@sudobility/building_blocks 0.0.16 → 0.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
- import { jsxs, jsx } from "react/jsx-runtime";
2
- import React, { useState, useRef, useMemo, useCallback, useEffect } from "react";
3
- import { TopbarProvider, Topbar, TopbarLeft, TopbarNavigation, TopbarLogo, Logo, TopbarCenter, TopbarRight, TopbarActions, TopbarMobileContent, BreadcrumbSection, Footer, FooterCompact, FooterCompactLeft, FooterVersion, FooterCopyright, FooterCompactRight, FooterGrid, FooterLinkSection, FooterLink, FooterBottom, FooterBrand, FooterSocialLinks, LayoutProvider, Label, Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from "@sudobility/components";
1
+ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
2
+ import React, { useState, useRef, useMemo, useCallback, useEffect, createContext } from "react";
3
+ import { TopbarProvider, Topbar, TopbarLeft, TopbarNavigation, TopbarLogo, Logo, TopbarCenter, TopbarRight, TopbarActions, TopbarMobileContent, BreadcrumbSection, Footer, FooterCompact, FooterCompactLeft, FooterVersion, FooterCopyright, FooterCompactRight, FooterGrid, FooterLinkSection, FooterLink, FooterBottom, FooterBrand, FooterSocialLinks, LayoutProvider, Label, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, Card, CardContent, Button } from "@sudobility/components";
4
4
  import { clsx } from "clsx";
5
5
  import { twMerge } from "tailwind-merge";
6
6
  import { ChevronDownIcon, CalendarDaysIcon, PaintBrushIcon, ChevronLeftIcon } from "@heroicons/react/24/outline";
@@ -43,7 +43,7 @@ const LanguageSelector = ({
43
43
  const [isOpen, setIsOpen] = useState(false);
44
44
  const dropdownRef = useRef(null);
45
45
  const sortedLanguages = useMemo(
46
- () => [...languages].sort((a, b) => a.name.localeCompare(b.name)),
46
+ () => [...languages].sort((a, b2) => a.name.localeCompare(b2.name)),
47
47
  [languages]
48
48
  );
49
49
  const currentLang = useMemo(
@@ -1004,11 +1004,3745 @@ const GlobalSettingsPage = ({
1004
1004
  ] }) })
1005
1005
  ] });
1006
1006
  };
1007
+ function Ie(e) {
1008
+ var o, r, t = "";
1009
+ if (typeof e == "string" || typeof e == "number") t += e;
1010
+ else if (typeof e == "object") if (Array.isArray(e)) {
1011
+ var n = e.length;
1012
+ for (o = 0; o < n; o++) e[o] && (r = Ie(e[o])) && (t && (t += " "), t += r);
1013
+ } else for (r in e) e[r] && (t && (t += " "), t += r);
1014
+ return t;
1015
+ }
1016
+ function Xe() {
1017
+ for (var e, o, r = 0, t = "", n = arguments.length; r < n; r++) (e = arguments[r]) && (o = Ie(e)) && (t && (t += " "), t += o);
1018
+ return t;
1019
+ }
1020
+ const Je = (e, o) => {
1021
+ const r = new Array(e.length + o.length);
1022
+ for (let t = 0; t < e.length; t++)
1023
+ r[t] = e[t];
1024
+ for (let t = 0; t < o.length; t++)
1025
+ r[e.length + t] = o[t];
1026
+ return r;
1027
+ }, He = (e, o) => ({
1028
+ classGroupId: e,
1029
+ validator: o
1030
+ }), Re = (e = /* @__PURE__ */ new Map(), o = null, r) => ({
1031
+ nextPart: e,
1032
+ validators: o,
1033
+ classGroupId: r
1034
+ }), me = "-", Ce = [], Qe = "arbitrary..", Ze = (e) => {
1035
+ const o = tt(e), {
1036
+ conflictingClassGroups: r,
1037
+ conflictingClassGroupModifiers: t
1038
+ } = e;
1039
+ return {
1040
+ getClassGroupId: (a) => {
1041
+ if (a.startsWith("[") && a.endsWith("]"))
1042
+ return et(a);
1043
+ const p = a.split(me), c = p[0] === "" && p.length > 1 ? 1 : 0;
1044
+ return Me(p, c, o);
1045
+ },
1046
+ getConflictingClassGroupIds: (a, p) => {
1047
+ if (p) {
1048
+ const c = t[a], h = r[a];
1049
+ return c ? h ? Je(h, c) : c : h || Ce;
1050
+ }
1051
+ return r[a] || Ce;
1052
+ }
1053
+ };
1054
+ }, Me = (e, o, r) => {
1055
+ if (e.length - o === 0)
1056
+ return r.classGroupId;
1057
+ const n = e[o], s = r.nextPart.get(n);
1058
+ if (s) {
1059
+ const h = Me(e, o + 1, s);
1060
+ if (h) return h;
1061
+ }
1062
+ const a = r.validators;
1063
+ if (a === null)
1064
+ return;
1065
+ const p = o === 0 ? e.join(me) : e.slice(o).join(me), c = a.length;
1066
+ for (let h = 0; h < c; h++) {
1067
+ const x = a[h];
1068
+ if (x.validator(p))
1069
+ return x.classGroupId;
1070
+ }
1071
+ }, et = (e) => e.slice(1, -1).indexOf(":") === -1 ? void 0 : (() => {
1072
+ const o = e.slice(1, -1), r = o.indexOf(":"), t = o.slice(0, r);
1073
+ return t ? Qe + t : void 0;
1074
+ })(), tt = (e) => {
1075
+ const {
1076
+ theme: o,
1077
+ classGroups: r
1078
+ } = e;
1079
+ return rt(r, o);
1080
+ }, rt = (e, o) => {
1081
+ const r = Re();
1082
+ for (const t in e) {
1083
+ const n = e[t];
1084
+ we(n, r, t, o);
1085
+ }
1086
+ return r;
1087
+ }, we = (e, o, r, t) => {
1088
+ const n = e.length;
1089
+ for (let s = 0; s < n; s++) {
1090
+ const a = e[s];
1091
+ ot(a, o, r, t);
1092
+ }
1093
+ }, ot = (e, o, r, t) => {
1094
+ if (typeof e == "string") {
1095
+ nt(e, o, r);
1096
+ return;
1097
+ }
1098
+ if (typeof e == "function") {
1099
+ st(e, o, r, t);
1100
+ return;
1101
+ }
1102
+ at(e, o, r, t);
1103
+ }, nt = (e, o, r) => {
1104
+ const t = e === "" ? o : De(o, e);
1105
+ t.classGroupId = r;
1106
+ }, st = (e, o, r, t) => {
1107
+ if (it(e)) {
1108
+ we(e(t), o, r, t);
1109
+ return;
1110
+ }
1111
+ o.validators === null && (o.validators = []), o.validators.push(He(r, e));
1112
+ }, at = (e, o, r, t) => {
1113
+ const n = Object.entries(e), s = n.length;
1114
+ for (let a = 0; a < s; a++) {
1115
+ const [p, c] = n[a];
1116
+ we(c, De(o, p), r, t);
1117
+ }
1118
+ }, De = (e, o) => {
1119
+ let r = e;
1120
+ const t = o.split(me), n = t.length;
1121
+ for (let s = 0; s < n; s++) {
1122
+ const a = t[s];
1123
+ let p = r.nextPart.get(a);
1124
+ p || (p = Re(), r.nextPart.set(a, p)), r = p;
1125
+ }
1126
+ return r;
1127
+ }, it = (e) => "isThemeGetter" in e && e.isThemeGetter === true, lt = (e) => {
1128
+ if (e < 1)
1129
+ return {
1130
+ get: () => {
1131
+ },
1132
+ set: () => {
1133
+ }
1134
+ };
1135
+ let o = 0, r = /* @__PURE__ */ Object.create(null), t = /* @__PURE__ */ Object.create(null);
1136
+ const n = (s, a) => {
1137
+ r[s] = a, o++, o > e && (o = 0, t = r, r = /* @__PURE__ */ Object.create(null));
1138
+ };
1139
+ return {
1140
+ get(s) {
1141
+ let a = r[s];
1142
+ if (a !== void 0)
1143
+ return a;
1144
+ if ((a = t[s]) !== void 0)
1145
+ return n(s, a), a;
1146
+ },
1147
+ set(s, a) {
1148
+ s in r ? r[s] = a : n(s, a);
1149
+ }
1150
+ };
1151
+ }, xe = "!", Pe = ":", ct = [], ze = (e, o, r, t, n) => ({
1152
+ modifiers: e,
1153
+ hasImportantModifier: o,
1154
+ baseClassName: r,
1155
+ maybePostfixModifierPosition: t,
1156
+ isExternal: n
1157
+ }), dt = (e) => {
1158
+ const {
1159
+ prefix: o,
1160
+ experimentalParseClassName: r
1161
+ } = e;
1162
+ let t = (n) => {
1163
+ const s = [];
1164
+ let a = 0, p = 0, c = 0, h;
1165
+ const x = n.length;
1166
+ for (let z = 0; z < x; z++) {
1167
+ const k = n[z];
1168
+ if (a === 0 && p === 0) {
1169
+ if (k === Pe) {
1170
+ s.push(n.slice(c, z)), c = z + 1;
1171
+ continue;
1172
+ }
1173
+ if (k === "/") {
1174
+ h = z;
1175
+ continue;
1176
+ }
1177
+ }
1178
+ k === "[" ? a++ : k === "]" ? a-- : k === "(" ? p++ : k === ")" && p--;
1179
+ }
1180
+ const S = s.length === 0 ? n : n.slice(c);
1181
+ let w = S, y = false;
1182
+ S.endsWith(xe) ? (w = S.slice(0, -1), y = true) : (
1183
+ /**
1184
+ * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.
1185
+ * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864
1186
+ */
1187
+ S.startsWith(xe) && (w = S.slice(1), y = true)
1188
+ );
1189
+ const j = h && h > c ? h - c : void 0;
1190
+ return ze(s, y, w, j);
1191
+ };
1192
+ if (o) {
1193
+ const n = o + Pe, s = t;
1194
+ t = (a) => a.startsWith(n) ? s(a.slice(n.length)) : ze(ct, false, a, void 0, true);
1195
+ }
1196
+ if (r) {
1197
+ const n = t;
1198
+ t = (s) => r({
1199
+ className: s,
1200
+ parseClassName: n
1201
+ });
1202
+ }
1203
+ return t;
1204
+ }, mt = (e) => {
1205
+ const o = /* @__PURE__ */ new Map();
1206
+ return e.orderSensitiveModifiers.forEach((r, t) => {
1207
+ o.set(r, 1e6 + t);
1208
+ }), (r) => {
1209
+ const t = [];
1210
+ let n = [];
1211
+ for (let s = 0; s < r.length; s++) {
1212
+ const a = r[s], p = a[0] === "[", c = o.has(a);
1213
+ p || c ? (n.length > 0 && (n.sort(), t.push(...n), n = []), t.push(a)) : n.push(a);
1214
+ }
1215
+ return n.length > 0 && (n.sort(), t.push(...n)), t;
1216
+ };
1217
+ }, ut = (e) => ({
1218
+ cache: lt(e.cacheSize),
1219
+ parseClassName: dt(e),
1220
+ sortModifiers: mt(e),
1221
+ ...Ze(e)
1222
+ }), ft = /\s+/, pt = (e, o) => {
1223
+ const {
1224
+ parseClassName: r,
1225
+ getClassGroupId: t,
1226
+ getConflictingClassGroupIds: n,
1227
+ sortModifiers: s
1228
+ } = o, a = [], p = e.trim().split(ft);
1229
+ let c = "";
1230
+ for (let h = p.length - 1; h >= 0; h -= 1) {
1231
+ const x = p[h], {
1232
+ isExternal: S,
1233
+ modifiers: w,
1234
+ hasImportantModifier: y,
1235
+ baseClassName: j,
1236
+ maybePostfixModifierPosition: z
1237
+ } = r(x);
1238
+ if (S) {
1239
+ c = x + (c.length > 0 ? " " + c : c);
1240
+ continue;
1241
+ }
1242
+ let k = !!z, D = t(k ? j.substring(0, z) : j);
1243
+ if (!D) {
1244
+ if (!k) {
1245
+ c = x + (c.length > 0 ? " " + c : c);
1246
+ continue;
1247
+ }
1248
+ if (D = t(j), !D) {
1249
+ c = x + (c.length > 0 ? " " + c : c);
1250
+ continue;
1251
+ }
1252
+ k = false;
1253
+ }
1254
+ const F = w.length === 0 ? "" : w.length === 1 ? w[0] : s(w).join(":"), M = y ? F + xe : F, L = M + D;
1255
+ if (a.indexOf(L) > -1)
1256
+ continue;
1257
+ a.push(L);
1258
+ const N = n(D, k);
1259
+ for (let C = 0; C < N.length; ++C) {
1260
+ const E = N[C];
1261
+ a.push(M + E);
1262
+ }
1263
+ c = x + (c.length > 0 ? " " + c : c);
1264
+ }
1265
+ return c;
1266
+ }, gt = (...e) => {
1267
+ let o = 0, r, t, n = "";
1268
+ for (; o < e.length; )
1269
+ (r = e[o++]) && (t = Ee(r)) && (n && (n += " "), n += t);
1270
+ return n;
1271
+ }, Ee = (e) => {
1272
+ if (typeof e == "string")
1273
+ return e;
1274
+ let o, r = "";
1275
+ for (let t = 0; t < e.length; t++)
1276
+ e[t] && (o = Ee(e[t])) && (r && (r += " "), r += o);
1277
+ return r;
1278
+ }, bt = (e, ...o) => {
1279
+ let r, t, n, s;
1280
+ const a = (c) => {
1281
+ const h = o.reduce((x, S) => S(x), e());
1282
+ return r = ut(h), t = r.cache.get, n = r.cache.set, s = p, p(c);
1283
+ }, p = (c) => {
1284
+ const h = t(c);
1285
+ if (h)
1286
+ return h;
1287
+ const x = pt(c, r);
1288
+ return n(c, x), x;
1289
+ };
1290
+ return s = a, (...c) => s(gt(...c));
1291
+ }, ht = [], A = (e) => {
1292
+ const o = (r) => r[e] || ht;
1293
+ return o.isThemeGetter = true, o;
1294
+ }, Oe = /^\[(?:(\w[\w-]*):)?(.+)\]$/i, Te = /^\((?:(\w[\w-]*):)?(.+)\)$/i, xt = /^\d+\/\d+$/, wt = /^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/, yt = /\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$/, kt = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/, vt = /^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/, Ct = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/, Z = (e) => xt.test(e), b = (e) => !!e && !Number.isNaN(Number(e)), q = (e) => !!e && Number.isInteger(Number(e)), fe = (e) => e.endsWith("%") && b(e.slice(0, -1)), B = (e) => wt.test(e), Pt = () => true, zt = (e) => (
1295
+ // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.
1296
+ // For example, `hsl(0 0% 0%)` would be classified as a length without this check.
1297
+ // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.
1298
+ yt.test(e) && !kt.test(e)
1299
+ ), Ge = () => false, Nt = (e) => vt.test(e), At = (e) => Ct.test(e), St = (e) => !i(e) && !l(e), It = (e) => ee(e, _e, Ge), i = (e) => Oe.test(e), X = (e) => ee(e, Fe, zt), pe = (e) => ee(e, Ot, b), Ne = (e) => ee(e, je, Ge), Rt = (e) => ee(e, Le, At), ce = (e) => ee(e, Ve, Nt), l = (e) => Te.test(e), ne = (e) => te(e, Fe), Mt = (e) => te(e, Tt), Ae = (e) => te(e, je), Dt = (e) => te(e, _e), Et = (e) => te(e, Le), de = (e) => te(e, Ve, true), ee = (e, o, r) => {
1300
+ const t = Oe.exec(e);
1301
+ return t ? t[1] ? o(t[1]) : r(t[2]) : false;
1302
+ }, te = (e, o, r = false) => {
1303
+ const t = Te.exec(e);
1304
+ return t ? t[1] ? o(t[1]) : r : false;
1305
+ }, je = (e) => e === "position" || e === "percentage", Le = (e) => e === "image" || e === "url", _e = (e) => e === "length" || e === "size" || e === "bg-size", Fe = (e) => e === "length", Ot = (e) => e === "number", Tt = (e) => e === "family-name", Ve = (e) => e === "shadow", Gt = () => {
1306
+ const e = A("color"), o = A("font"), r = A("text"), t = A("font-weight"), n = A("tracking"), s = A("leading"), a = A("breakpoint"), p = A("container"), c = A("spacing"), h = A("radius"), x = A("shadow"), S = A("inset-shadow"), w = A("text-shadow"), y = A("drop-shadow"), j = A("blur"), z = A("perspective"), k = A("aspect"), D = A("ease"), F = A("animate"), M = () => ["auto", "avoid", "all", "avoid-page", "page", "left", "right", "column"], L = () => [
1307
+ "center",
1308
+ "top",
1309
+ "bottom",
1310
+ "left",
1311
+ "right",
1312
+ "top-left",
1313
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
1314
+ "left-top",
1315
+ "top-right",
1316
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
1317
+ "right-top",
1318
+ "bottom-right",
1319
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
1320
+ "right-bottom",
1321
+ "bottom-left",
1322
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
1323
+ "left-bottom"
1324
+ ], N = () => [...L(), l, i], C = () => ["auto", "hidden", "clip", "visible", "scroll"], E = () => ["auto", "contain", "none"], m = () => [l, i, c], V = () => [Z, "full", "auto", ...m()], J = () => [q, "none", "subgrid", l, i], H = () => ["auto", {
1325
+ span: ["full", q, l, i]
1326
+ }, q, l, i], I = () => [q, "auto", l, i], U = () => ["auto", "min", "max", "fr", l, i], re = () => ["start", "end", "center", "between", "around", "evenly", "stretch", "baseline", "center-safe", "end-safe"], u = () => ["start", "end", "center", "stretch", "center-safe", "end-safe"], f = () => ["auto", ...m()], v = () => [Z, "auto", "full", "dvw", "dvh", "lvw", "lvh", "svw", "svh", "min", "max", "fit", ...m()], d = () => [e, l, i], O = () => [...L(), Ae, Ne, {
1327
+ position: [l, i]
1328
+ }], W = () => ["no-repeat", {
1329
+ repeat: ["", "x", "y", "space", "round"]
1330
+ }], Q = () => ["auto", "cover", "contain", Dt, It, {
1331
+ size: [l, i]
1332
+ }], oe = () => [fe, ne, X], _ = () => [
1333
+ // Deprecated since Tailwind CSS v4.0.0
1334
+ "",
1335
+ "none",
1336
+ "full",
1337
+ h,
1338
+ l,
1339
+ i
1340
+ ], $ = () => ["", b, ne, X], se = () => ["solid", "dashed", "dotted", "double"], ye = () => ["normal", "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity"], R = () => [b, fe, Ae, Ne], ke = () => [
1341
+ // Deprecated since Tailwind CSS v4.0.0
1342
+ "",
1343
+ "none",
1344
+ j,
1345
+ l,
1346
+ i
1347
+ ], ae = () => ["none", b, l, i], ie = () => ["none", b, l, i], ue = () => [b, l, i], le = () => [Z, "full", ...m()];
1348
+ return {
1349
+ cacheSize: 500,
1350
+ theme: {
1351
+ animate: ["spin", "ping", "pulse", "bounce"],
1352
+ aspect: ["video"],
1353
+ blur: [B],
1354
+ breakpoint: [B],
1355
+ color: [Pt],
1356
+ container: [B],
1357
+ "drop-shadow": [B],
1358
+ ease: ["in", "out", "in-out"],
1359
+ font: [St],
1360
+ "font-weight": ["thin", "extralight", "light", "normal", "medium", "semibold", "bold", "extrabold", "black"],
1361
+ "inset-shadow": [B],
1362
+ leading: ["none", "tight", "snug", "normal", "relaxed", "loose"],
1363
+ perspective: ["dramatic", "near", "normal", "midrange", "distant", "none"],
1364
+ radius: [B],
1365
+ shadow: [B],
1366
+ spacing: ["px", b],
1367
+ text: [B],
1368
+ "text-shadow": [B],
1369
+ tracking: ["tighter", "tight", "normal", "wide", "wider", "widest"]
1370
+ },
1371
+ classGroups: {
1372
+ // --------------
1373
+ // --- Layout ---
1374
+ // --------------
1375
+ /**
1376
+ * Aspect Ratio
1377
+ * @see https://tailwindcss.com/docs/aspect-ratio
1378
+ */
1379
+ aspect: [{
1380
+ aspect: ["auto", "square", Z, i, l, k]
1381
+ }],
1382
+ /**
1383
+ * Container
1384
+ * @see https://tailwindcss.com/docs/container
1385
+ * @deprecated since Tailwind CSS v4.0.0
1386
+ */
1387
+ container: ["container"],
1388
+ /**
1389
+ * Columns
1390
+ * @see https://tailwindcss.com/docs/columns
1391
+ */
1392
+ columns: [{
1393
+ columns: [b, i, l, p]
1394
+ }],
1395
+ /**
1396
+ * Break After
1397
+ * @see https://tailwindcss.com/docs/break-after
1398
+ */
1399
+ "break-after": [{
1400
+ "break-after": M()
1401
+ }],
1402
+ /**
1403
+ * Break Before
1404
+ * @see https://tailwindcss.com/docs/break-before
1405
+ */
1406
+ "break-before": [{
1407
+ "break-before": M()
1408
+ }],
1409
+ /**
1410
+ * Break Inside
1411
+ * @see https://tailwindcss.com/docs/break-inside
1412
+ */
1413
+ "break-inside": [{
1414
+ "break-inside": ["auto", "avoid", "avoid-page", "avoid-column"]
1415
+ }],
1416
+ /**
1417
+ * Box Decoration Break
1418
+ * @see https://tailwindcss.com/docs/box-decoration-break
1419
+ */
1420
+ "box-decoration": [{
1421
+ "box-decoration": ["slice", "clone"]
1422
+ }],
1423
+ /**
1424
+ * Box Sizing
1425
+ * @see https://tailwindcss.com/docs/box-sizing
1426
+ */
1427
+ box: [{
1428
+ box: ["border", "content"]
1429
+ }],
1430
+ /**
1431
+ * Display
1432
+ * @see https://tailwindcss.com/docs/display
1433
+ */
1434
+ 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"],
1435
+ /**
1436
+ * Screen Reader Only
1437
+ * @see https://tailwindcss.com/docs/display#screen-reader-only
1438
+ */
1439
+ sr: ["sr-only", "not-sr-only"],
1440
+ /**
1441
+ * Floats
1442
+ * @see https://tailwindcss.com/docs/float
1443
+ */
1444
+ float: [{
1445
+ float: ["right", "left", "none", "start", "end"]
1446
+ }],
1447
+ /**
1448
+ * Clear
1449
+ * @see https://tailwindcss.com/docs/clear
1450
+ */
1451
+ clear: [{
1452
+ clear: ["left", "right", "both", "none", "start", "end"]
1453
+ }],
1454
+ /**
1455
+ * Isolation
1456
+ * @see https://tailwindcss.com/docs/isolation
1457
+ */
1458
+ isolation: ["isolate", "isolation-auto"],
1459
+ /**
1460
+ * Object Fit
1461
+ * @see https://tailwindcss.com/docs/object-fit
1462
+ */
1463
+ "object-fit": [{
1464
+ object: ["contain", "cover", "fill", "none", "scale-down"]
1465
+ }],
1466
+ /**
1467
+ * Object Position
1468
+ * @see https://tailwindcss.com/docs/object-position
1469
+ */
1470
+ "object-position": [{
1471
+ object: N()
1472
+ }],
1473
+ /**
1474
+ * Overflow
1475
+ * @see https://tailwindcss.com/docs/overflow
1476
+ */
1477
+ overflow: [{
1478
+ overflow: C()
1479
+ }],
1480
+ /**
1481
+ * Overflow X
1482
+ * @see https://tailwindcss.com/docs/overflow
1483
+ */
1484
+ "overflow-x": [{
1485
+ "overflow-x": C()
1486
+ }],
1487
+ /**
1488
+ * Overflow Y
1489
+ * @see https://tailwindcss.com/docs/overflow
1490
+ */
1491
+ "overflow-y": [{
1492
+ "overflow-y": C()
1493
+ }],
1494
+ /**
1495
+ * Overscroll Behavior
1496
+ * @see https://tailwindcss.com/docs/overscroll-behavior
1497
+ */
1498
+ overscroll: [{
1499
+ overscroll: E()
1500
+ }],
1501
+ /**
1502
+ * Overscroll Behavior X
1503
+ * @see https://tailwindcss.com/docs/overscroll-behavior
1504
+ */
1505
+ "overscroll-x": [{
1506
+ "overscroll-x": E()
1507
+ }],
1508
+ /**
1509
+ * Overscroll Behavior Y
1510
+ * @see https://tailwindcss.com/docs/overscroll-behavior
1511
+ */
1512
+ "overscroll-y": [{
1513
+ "overscroll-y": E()
1514
+ }],
1515
+ /**
1516
+ * Position
1517
+ * @see https://tailwindcss.com/docs/position
1518
+ */
1519
+ position: ["static", "fixed", "absolute", "relative", "sticky"],
1520
+ /**
1521
+ * Top / Right / Bottom / Left
1522
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1523
+ */
1524
+ inset: [{
1525
+ inset: V()
1526
+ }],
1527
+ /**
1528
+ * Right / Left
1529
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1530
+ */
1531
+ "inset-x": [{
1532
+ "inset-x": V()
1533
+ }],
1534
+ /**
1535
+ * Top / Bottom
1536
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1537
+ */
1538
+ "inset-y": [{
1539
+ "inset-y": V()
1540
+ }],
1541
+ /**
1542
+ * Start
1543
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1544
+ */
1545
+ start: [{
1546
+ start: V()
1547
+ }],
1548
+ /**
1549
+ * End
1550
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1551
+ */
1552
+ end: [{
1553
+ end: V()
1554
+ }],
1555
+ /**
1556
+ * Top
1557
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1558
+ */
1559
+ top: [{
1560
+ top: V()
1561
+ }],
1562
+ /**
1563
+ * Right
1564
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1565
+ */
1566
+ right: [{
1567
+ right: V()
1568
+ }],
1569
+ /**
1570
+ * Bottom
1571
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1572
+ */
1573
+ bottom: [{
1574
+ bottom: V()
1575
+ }],
1576
+ /**
1577
+ * Left
1578
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
1579
+ */
1580
+ left: [{
1581
+ left: V()
1582
+ }],
1583
+ /**
1584
+ * Visibility
1585
+ * @see https://tailwindcss.com/docs/visibility
1586
+ */
1587
+ visibility: ["visible", "invisible", "collapse"],
1588
+ /**
1589
+ * Z-Index
1590
+ * @see https://tailwindcss.com/docs/z-index
1591
+ */
1592
+ z: [{
1593
+ z: [q, "auto", l, i]
1594
+ }],
1595
+ // ------------------------
1596
+ // --- Flexbox and Grid ---
1597
+ // ------------------------
1598
+ /**
1599
+ * Flex Basis
1600
+ * @see https://tailwindcss.com/docs/flex-basis
1601
+ */
1602
+ basis: [{
1603
+ basis: [Z, "full", "auto", p, ...m()]
1604
+ }],
1605
+ /**
1606
+ * Flex Direction
1607
+ * @see https://tailwindcss.com/docs/flex-direction
1608
+ */
1609
+ "flex-direction": [{
1610
+ flex: ["row", "row-reverse", "col", "col-reverse"]
1611
+ }],
1612
+ /**
1613
+ * Flex Wrap
1614
+ * @see https://tailwindcss.com/docs/flex-wrap
1615
+ */
1616
+ "flex-wrap": [{
1617
+ flex: ["nowrap", "wrap", "wrap-reverse"]
1618
+ }],
1619
+ /**
1620
+ * Flex
1621
+ * @see https://tailwindcss.com/docs/flex
1622
+ */
1623
+ flex: [{
1624
+ flex: [b, Z, "auto", "initial", "none", i]
1625
+ }],
1626
+ /**
1627
+ * Flex Grow
1628
+ * @see https://tailwindcss.com/docs/flex-grow
1629
+ */
1630
+ grow: [{
1631
+ grow: ["", b, l, i]
1632
+ }],
1633
+ /**
1634
+ * Flex Shrink
1635
+ * @see https://tailwindcss.com/docs/flex-shrink
1636
+ */
1637
+ shrink: [{
1638
+ shrink: ["", b, l, i]
1639
+ }],
1640
+ /**
1641
+ * Order
1642
+ * @see https://tailwindcss.com/docs/order
1643
+ */
1644
+ order: [{
1645
+ order: [q, "first", "last", "none", l, i]
1646
+ }],
1647
+ /**
1648
+ * Grid Template Columns
1649
+ * @see https://tailwindcss.com/docs/grid-template-columns
1650
+ */
1651
+ "grid-cols": [{
1652
+ "grid-cols": J()
1653
+ }],
1654
+ /**
1655
+ * Grid Column Start / End
1656
+ * @see https://tailwindcss.com/docs/grid-column
1657
+ */
1658
+ "col-start-end": [{
1659
+ col: H()
1660
+ }],
1661
+ /**
1662
+ * Grid Column Start
1663
+ * @see https://tailwindcss.com/docs/grid-column
1664
+ */
1665
+ "col-start": [{
1666
+ "col-start": I()
1667
+ }],
1668
+ /**
1669
+ * Grid Column End
1670
+ * @see https://tailwindcss.com/docs/grid-column
1671
+ */
1672
+ "col-end": [{
1673
+ "col-end": I()
1674
+ }],
1675
+ /**
1676
+ * Grid Template Rows
1677
+ * @see https://tailwindcss.com/docs/grid-template-rows
1678
+ */
1679
+ "grid-rows": [{
1680
+ "grid-rows": J()
1681
+ }],
1682
+ /**
1683
+ * Grid Row Start / End
1684
+ * @see https://tailwindcss.com/docs/grid-row
1685
+ */
1686
+ "row-start-end": [{
1687
+ row: H()
1688
+ }],
1689
+ /**
1690
+ * Grid Row Start
1691
+ * @see https://tailwindcss.com/docs/grid-row
1692
+ */
1693
+ "row-start": [{
1694
+ "row-start": I()
1695
+ }],
1696
+ /**
1697
+ * Grid Row End
1698
+ * @see https://tailwindcss.com/docs/grid-row
1699
+ */
1700
+ "row-end": [{
1701
+ "row-end": I()
1702
+ }],
1703
+ /**
1704
+ * Grid Auto Flow
1705
+ * @see https://tailwindcss.com/docs/grid-auto-flow
1706
+ */
1707
+ "grid-flow": [{
1708
+ "grid-flow": ["row", "col", "dense", "row-dense", "col-dense"]
1709
+ }],
1710
+ /**
1711
+ * Grid Auto Columns
1712
+ * @see https://tailwindcss.com/docs/grid-auto-columns
1713
+ */
1714
+ "auto-cols": [{
1715
+ "auto-cols": U()
1716
+ }],
1717
+ /**
1718
+ * Grid Auto Rows
1719
+ * @see https://tailwindcss.com/docs/grid-auto-rows
1720
+ */
1721
+ "auto-rows": [{
1722
+ "auto-rows": U()
1723
+ }],
1724
+ /**
1725
+ * Gap
1726
+ * @see https://tailwindcss.com/docs/gap
1727
+ */
1728
+ gap: [{
1729
+ gap: m()
1730
+ }],
1731
+ /**
1732
+ * Gap X
1733
+ * @see https://tailwindcss.com/docs/gap
1734
+ */
1735
+ "gap-x": [{
1736
+ "gap-x": m()
1737
+ }],
1738
+ /**
1739
+ * Gap Y
1740
+ * @see https://tailwindcss.com/docs/gap
1741
+ */
1742
+ "gap-y": [{
1743
+ "gap-y": m()
1744
+ }],
1745
+ /**
1746
+ * Justify Content
1747
+ * @see https://tailwindcss.com/docs/justify-content
1748
+ */
1749
+ "justify-content": [{
1750
+ justify: [...re(), "normal"]
1751
+ }],
1752
+ /**
1753
+ * Justify Items
1754
+ * @see https://tailwindcss.com/docs/justify-items
1755
+ */
1756
+ "justify-items": [{
1757
+ "justify-items": [...u(), "normal"]
1758
+ }],
1759
+ /**
1760
+ * Justify Self
1761
+ * @see https://tailwindcss.com/docs/justify-self
1762
+ */
1763
+ "justify-self": [{
1764
+ "justify-self": ["auto", ...u()]
1765
+ }],
1766
+ /**
1767
+ * Align Content
1768
+ * @see https://tailwindcss.com/docs/align-content
1769
+ */
1770
+ "align-content": [{
1771
+ content: ["normal", ...re()]
1772
+ }],
1773
+ /**
1774
+ * Align Items
1775
+ * @see https://tailwindcss.com/docs/align-items
1776
+ */
1777
+ "align-items": [{
1778
+ items: [...u(), {
1779
+ baseline: ["", "last"]
1780
+ }]
1781
+ }],
1782
+ /**
1783
+ * Align Self
1784
+ * @see https://tailwindcss.com/docs/align-self
1785
+ */
1786
+ "align-self": [{
1787
+ self: ["auto", ...u(), {
1788
+ baseline: ["", "last"]
1789
+ }]
1790
+ }],
1791
+ /**
1792
+ * Place Content
1793
+ * @see https://tailwindcss.com/docs/place-content
1794
+ */
1795
+ "place-content": [{
1796
+ "place-content": re()
1797
+ }],
1798
+ /**
1799
+ * Place Items
1800
+ * @see https://tailwindcss.com/docs/place-items
1801
+ */
1802
+ "place-items": [{
1803
+ "place-items": [...u(), "baseline"]
1804
+ }],
1805
+ /**
1806
+ * Place Self
1807
+ * @see https://tailwindcss.com/docs/place-self
1808
+ */
1809
+ "place-self": [{
1810
+ "place-self": ["auto", ...u()]
1811
+ }],
1812
+ // Spacing
1813
+ /**
1814
+ * Padding
1815
+ * @see https://tailwindcss.com/docs/padding
1816
+ */
1817
+ p: [{
1818
+ p: m()
1819
+ }],
1820
+ /**
1821
+ * Padding X
1822
+ * @see https://tailwindcss.com/docs/padding
1823
+ */
1824
+ px: [{
1825
+ px: m()
1826
+ }],
1827
+ /**
1828
+ * Padding Y
1829
+ * @see https://tailwindcss.com/docs/padding
1830
+ */
1831
+ py: [{
1832
+ py: m()
1833
+ }],
1834
+ /**
1835
+ * Padding Start
1836
+ * @see https://tailwindcss.com/docs/padding
1837
+ */
1838
+ ps: [{
1839
+ ps: m()
1840
+ }],
1841
+ /**
1842
+ * Padding End
1843
+ * @see https://tailwindcss.com/docs/padding
1844
+ */
1845
+ pe: [{
1846
+ pe: m()
1847
+ }],
1848
+ /**
1849
+ * Padding Top
1850
+ * @see https://tailwindcss.com/docs/padding
1851
+ */
1852
+ pt: [{
1853
+ pt: m()
1854
+ }],
1855
+ /**
1856
+ * Padding Right
1857
+ * @see https://tailwindcss.com/docs/padding
1858
+ */
1859
+ pr: [{
1860
+ pr: m()
1861
+ }],
1862
+ /**
1863
+ * Padding Bottom
1864
+ * @see https://tailwindcss.com/docs/padding
1865
+ */
1866
+ pb: [{
1867
+ pb: m()
1868
+ }],
1869
+ /**
1870
+ * Padding Left
1871
+ * @see https://tailwindcss.com/docs/padding
1872
+ */
1873
+ pl: [{
1874
+ pl: m()
1875
+ }],
1876
+ /**
1877
+ * Margin
1878
+ * @see https://tailwindcss.com/docs/margin
1879
+ */
1880
+ m: [{
1881
+ m: f()
1882
+ }],
1883
+ /**
1884
+ * Margin X
1885
+ * @see https://tailwindcss.com/docs/margin
1886
+ */
1887
+ mx: [{
1888
+ mx: f()
1889
+ }],
1890
+ /**
1891
+ * Margin Y
1892
+ * @see https://tailwindcss.com/docs/margin
1893
+ */
1894
+ my: [{
1895
+ my: f()
1896
+ }],
1897
+ /**
1898
+ * Margin Start
1899
+ * @see https://tailwindcss.com/docs/margin
1900
+ */
1901
+ ms: [{
1902
+ ms: f()
1903
+ }],
1904
+ /**
1905
+ * Margin End
1906
+ * @see https://tailwindcss.com/docs/margin
1907
+ */
1908
+ me: [{
1909
+ me: f()
1910
+ }],
1911
+ /**
1912
+ * Margin Top
1913
+ * @see https://tailwindcss.com/docs/margin
1914
+ */
1915
+ mt: [{
1916
+ mt: f()
1917
+ }],
1918
+ /**
1919
+ * Margin Right
1920
+ * @see https://tailwindcss.com/docs/margin
1921
+ */
1922
+ mr: [{
1923
+ mr: f()
1924
+ }],
1925
+ /**
1926
+ * Margin Bottom
1927
+ * @see https://tailwindcss.com/docs/margin
1928
+ */
1929
+ mb: [{
1930
+ mb: f()
1931
+ }],
1932
+ /**
1933
+ * Margin Left
1934
+ * @see https://tailwindcss.com/docs/margin
1935
+ */
1936
+ ml: [{
1937
+ ml: f()
1938
+ }],
1939
+ /**
1940
+ * Space Between X
1941
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1942
+ */
1943
+ "space-x": [{
1944
+ "space-x": m()
1945
+ }],
1946
+ /**
1947
+ * Space Between X Reverse
1948
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1949
+ */
1950
+ "space-x-reverse": ["space-x-reverse"],
1951
+ /**
1952
+ * Space Between Y
1953
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1954
+ */
1955
+ "space-y": [{
1956
+ "space-y": m()
1957
+ }],
1958
+ /**
1959
+ * Space Between Y Reverse
1960
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1961
+ */
1962
+ "space-y-reverse": ["space-y-reverse"],
1963
+ // --------------
1964
+ // --- Sizing ---
1965
+ // --------------
1966
+ /**
1967
+ * Size
1968
+ * @see https://tailwindcss.com/docs/width#setting-both-width-and-height
1969
+ */
1970
+ size: [{
1971
+ size: v()
1972
+ }],
1973
+ /**
1974
+ * Width
1975
+ * @see https://tailwindcss.com/docs/width
1976
+ */
1977
+ w: [{
1978
+ w: [p, "screen", ...v()]
1979
+ }],
1980
+ /**
1981
+ * Min-Width
1982
+ * @see https://tailwindcss.com/docs/min-width
1983
+ */
1984
+ "min-w": [{
1985
+ "min-w": [
1986
+ p,
1987
+ "screen",
1988
+ /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1989
+ "none",
1990
+ ...v()
1991
+ ]
1992
+ }],
1993
+ /**
1994
+ * Max-Width
1995
+ * @see https://tailwindcss.com/docs/max-width
1996
+ */
1997
+ "max-w": [{
1998
+ "max-w": [
1999
+ p,
2000
+ "screen",
2001
+ "none",
2002
+ /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
2003
+ "prose",
2004
+ /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
2005
+ {
2006
+ screen: [a]
2007
+ },
2008
+ ...v()
2009
+ ]
2010
+ }],
2011
+ /**
2012
+ * Height
2013
+ * @see https://tailwindcss.com/docs/height
2014
+ */
2015
+ h: [{
2016
+ h: ["screen", "lh", ...v()]
2017
+ }],
2018
+ /**
2019
+ * Min-Height
2020
+ * @see https://tailwindcss.com/docs/min-height
2021
+ */
2022
+ "min-h": [{
2023
+ "min-h": ["screen", "lh", "none", ...v()]
2024
+ }],
2025
+ /**
2026
+ * Max-Height
2027
+ * @see https://tailwindcss.com/docs/max-height
2028
+ */
2029
+ "max-h": [{
2030
+ "max-h": ["screen", "lh", ...v()]
2031
+ }],
2032
+ // ------------------
2033
+ // --- Typography ---
2034
+ // ------------------
2035
+ /**
2036
+ * Font Size
2037
+ * @see https://tailwindcss.com/docs/font-size
2038
+ */
2039
+ "font-size": [{
2040
+ text: ["base", r, ne, X]
2041
+ }],
2042
+ /**
2043
+ * Font Smoothing
2044
+ * @see https://tailwindcss.com/docs/font-smoothing
2045
+ */
2046
+ "font-smoothing": ["antialiased", "subpixel-antialiased"],
2047
+ /**
2048
+ * Font Style
2049
+ * @see https://tailwindcss.com/docs/font-style
2050
+ */
2051
+ "font-style": ["italic", "not-italic"],
2052
+ /**
2053
+ * Font Weight
2054
+ * @see https://tailwindcss.com/docs/font-weight
2055
+ */
2056
+ "font-weight": [{
2057
+ font: [t, l, pe]
2058
+ }],
2059
+ /**
2060
+ * Font Stretch
2061
+ * @see https://tailwindcss.com/docs/font-stretch
2062
+ */
2063
+ "font-stretch": [{
2064
+ "font-stretch": ["ultra-condensed", "extra-condensed", "condensed", "semi-condensed", "normal", "semi-expanded", "expanded", "extra-expanded", "ultra-expanded", fe, i]
2065
+ }],
2066
+ /**
2067
+ * Font Family
2068
+ * @see https://tailwindcss.com/docs/font-family
2069
+ */
2070
+ "font-family": [{
2071
+ font: [Mt, i, o]
2072
+ }],
2073
+ /**
2074
+ * Font Variant Numeric
2075
+ * @see https://tailwindcss.com/docs/font-variant-numeric
2076
+ */
2077
+ "fvn-normal": ["normal-nums"],
2078
+ /**
2079
+ * Font Variant Numeric
2080
+ * @see https://tailwindcss.com/docs/font-variant-numeric
2081
+ */
2082
+ "fvn-ordinal": ["ordinal"],
2083
+ /**
2084
+ * Font Variant Numeric
2085
+ * @see https://tailwindcss.com/docs/font-variant-numeric
2086
+ */
2087
+ "fvn-slashed-zero": ["slashed-zero"],
2088
+ /**
2089
+ * Font Variant Numeric
2090
+ * @see https://tailwindcss.com/docs/font-variant-numeric
2091
+ */
2092
+ "fvn-figure": ["lining-nums", "oldstyle-nums"],
2093
+ /**
2094
+ * Font Variant Numeric
2095
+ * @see https://tailwindcss.com/docs/font-variant-numeric
2096
+ */
2097
+ "fvn-spacing": ["proportional-nums", "tabular-nums"],
2098
+ /**
2099
+ * Font Variant Numeric
2100
+ * @see https://tailwindcss.com/docs/font-variant-numeric
2101
+ */
2102
+ "fvn-fraction": ["diagonal-fractions", "stacked-fractions"],
2103
+ /**
2104
+ * Letter Spacing
2105
+ * @see https://tailwindcss.com/docs/letter-spacing
2106
+ */
2107
+ tracking: [{
2108
+ tracking: [n, l, i]
2109
+ }],
2110
+ /**
2111
+ * Line Clamp
2112
+ * @see https://tailwindcss.com/docs/line-clamp
2113
+ */
2114
+ "line-clamp": [{
2115
+ "line-clamp": [b, "none", l, pe]
2116
+ }],
2117
+ /**
2118
+ * Line Height
2119
+ * @see https://tailwindcss.com/docs/line-height
2120
+ */
2121
+ leading: [{
2122
+ leading: [
2123
+ /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
2124
+ s,
2125
+ ...m()
2126
+ ]
2127
+ }],
2128
+ /**
2129
+ * List Style Image
2130
+ * @see https://tailwindcss.com/docs/list-style-image
2131
+ */
2132
+ "list-image": [{
2133
+ "list-image": ["none", l, i]
2134
+ }],
2135
+ /**
2136
+ * List Style Position
2137
+ * @see https://tailwindcss.com/docs/list-style-position
2138
+ */
2139
+ "list-style-position": [{
2140
+ list: ["inside", "outside"]
2141
+ }],
2142
+ /**
2143
+ * List Style Type
2144
+ * @see https://tailwindcss.com/docs/list-style-type
2145
+ */
2146
+ "list-style-type": [{
2147
+ list: ["disc", "decimal", "none", l, i]
2148
+ }],
2149
+ /**
2150
+ * Text Alignment
2151
+ * @see https://tailwindcss.com/docs/text-align
2152
+ */
2153
+ "text-alignment": [{
2154
+ text: ["left", "center", "right", "justify", "start", "end"]
2155
+ }],
2156
+ /**
2157
+ * Placeholder Color
2158
+ * @deprecated since Tailwind CSS v3.0.0
2159
+ * @see https://v3.tailwindcss.com/docs/placeholder-color
2160
+ */
2161
+ "placeholder-color": [{
2162
+ placeholder: d()
2163
+ }],
2164
+ /**
2165
+ * Text Color
2166
+ * @see https://tailwindcss.com/docs/text-color
2167
+ */
2168
+ "text-color": [{
2169
+ text: d()
2170
+ }],
2171
+ /**
2172
+ * Text Decoration
2173
+ * @see https://tailwindcss.com/docs/text-decoration
2174
+ */
2175
+ "text-decoration": ["underline", "overline", "line-through", "no-underline"],
2176
+ /**
2177
+ * Text Decoration Style
2178
+ * @see https://tailwindcss.com/docs/text-decoration-style
2179
+ */
2180
+ "text-decoration-style": [{
2181
+ decoration: [...se(), "wavy"]
2182
+ }],
2183
+ /**
2184
+ * Text Decoration Thickness
2185
+ * @see https://tailwindcss.com/docs/text-decoration-thickness
2186
+ */
2187
+ "text-decoration-thickness": [{
2188
+ decoration: [b, "from-font", "auto", l, X]
2189
+ }],
2190
+ /**
2191
+ * Text Decoration Color
2192
+ * @see https://tailwindcss.com/docs/text-decoration-color
2193
+ */
2194
+ "text-decoration-color": [{
2195
+ decoration: d()
2196
+ }],
2197
+ /**
2198
+ * Text Underline Offset
2199
+ * @see https://tailwindcss.com/docs/text-underline-offset
2200
+ */
2201
+ "underline-offset": [{
2202
+ "underline-offset": [b, "auto", l, i]
2203
+ }],
2204
+ /**
2205
+ * Text Transform
2206
+ * @see https://tailwindcss.com/docs/text-transform
2207
+ */
2208
+ "text-transform": ["uppercase", "lowercase", "capitalize", "normal-case"],
2209
+ /**
2210
+ * Text Overflow
2211
+ * @see https://tailwindcss.com/docs/text-overflow
2212
+ */
2213
+ "text-overflow": ["truncate", "text-ellipsis", "text-clip"],
2214
+ /**
2215
+ * Text Wrap
2216
+ * @see https://tailwindcss.com/docs/text-wrap
2217
+ */
2218
+ "text-wrap": [{
2219
+ text: ["wrap", "nowrap", "balance", "pretty"]
2220
+ }],
2221
+ /**
2222
+ * Text Indent
2223
+ * @see https://tailwindcss.com/docs/text-indent
2224
+ */
2225
+ indent: [{
2226
+ indent: m()
2227
+ }],
2228
+ /**
2229
+ * Vertical Alignment
2230
+ * @see https://tailwindcss.com/docs/vertical-align
2231
+ */
2232
+ "vertical-align": [{
2233
+ align: ["baseline", "top", "middle", "bottom", "text-top", "text-bottom", "sub", "super", l, i]
2234
+ }],
2235
+ /**
2236
+ * Whitespace
2237
+ * @see https://tailwindcss.com/docs/whitespace
2238
+ */
2239
+ whitespace: [{
2240
+ whitespace: ["normal", "nowrap", "pre", "pre-line", "pre-wrap", "break-spaces"]
2241
+ }],
2242
+ /**
2243
+ * Word Break
2244
+ * @see https://tailwindcss.com/docs/word-break
2245
+ */
2246
+ break: [{
2247
+ break: ["normal", "words", "all", "keep"]
2248
+ }],
2249
+ /**
2250
+ * Overflow Wrap
2251
+ * @see https://tailwindcss.com/docs/overflow-wrap
2252
+ */
2253
+ wrap: [{
2254
+ wrap: ["break-word", "anywhere", "normal"]
2255
+ }],
2256
+ /**
2257
+ * Hyphens
2258
+ * @see https://tailwindcss.com/docs/hyphens
2259
+ */
2260
+ hyphens: [{
2261
+ hyphens: ["none", "manual", "auto"]
2262
+ }],
2263
+ /**
2264
+ * Content
2265
+ * @see https://tailwindcss.com/docs/content
2266
+ */
2267
+ content: [{
2268
+ content: ["none", l, i]
2269
+ }],
2270
+ // -------------------
2271
+ // --- Backgrounds ---
2272
+ // -------------------
2273
+ /**
2274
+ * Background Attachment
2275
+ * @see https://tailwindcss.com/docs/background-attachment
2276
+ */
2277
+ "bg-attachment": [{
2278
+ bg: ["fixed", "local", "scroll"]
2279
+ }],
2280
+ /**
2281
+ * Background Clip
2282
+ * @see https://tailwindcss.com/docs/background-clip
2283
+ */
2284
+ "bg-clip": [{
2285
+ "bg-clip": ["border", "padding", "content", "text"]
2286
+ }],
2287
+ /**
2288
+ * Background Origin
2289
+ * @see https://tailwindcss.com/docs/background-origin
2290
+ */
2291
+ "bg-origin": [{
2292
+ "bg-origin": ["border", "padding", "content"]
2293
+ }],
2294
+ /**
2295
+ * Background Position
2296
+ * @see https://tailwindcss.com/docs/background-position
2297
+ */
2298
+ "bg-position": [{
2299
+ bg: O()
2300
+ }],
2301
+ /**
2302
+ * Background Repeat
2303
+ * @see https://tailwindcss.com/docs/background-repeat
2304
+ */
2305
+ "bg-repeat": [{
2306
+ bg: W()
2307
+ }],
2308
+ /**
2309
+ * Background Size
2310
+ * @see https://tailwindcss.com/docs/background-size
2311
+ */
2312
+ "bg-size": [{
2313
+ bg: Q()
2314
+ }],
2315
+ /**
2316
+ * Background Image
2317
+ * @see https://tailwindcss.com/docs/background-image
2318
+ */
2319
+ "bg-image": [{
2320
+ bg: ["none", {
2321
+ linear: [{
2322
+ to: ["t", "tr", "r", "br", "b", "bl", "l", "tl"]
2323
+ }, q, l, i],
2324
+ radial: ["", l, i],
2325
+ conic: [q, l, i]
2326
+ }, Et, Rt]
2327
+ }],
2328
+ /**
2329
+ * Background Color
2330
+ * @see https://tailwindcss.com/docs/background-color
2331
+ */
2332
+ "bg-color": [{
2333
+ bg: d()
2334
+ }],
2335
+ /**
2336
+ * Gradient Color Stops From Position
2337
+ * @see https://tailwindcss.com/docs/gradient-color-stops
2338
+ */
2339
+ "gradient-from-pos": [{
2340
+ from: oe()
2341
+ }],
2342
+ /**
2343
+ * Gradient Color Stops Via Position
2344
+ * @see https://tailwindcss.com/docs/gradient-color-stops
2345
+ */
2346
+ "gradient-via-pos": [{
2347
+ via: oe()
2348
+ }],
2349
+ /**
2350
+ * Gradient Color Stops To Position
2351
+ * @see https://tailwindcss.com/docs/gradient-color-stops
2352
+ */
2353
+ "gradient-to-pos": [{
2354
+ to: oe()
2355
+ }],
2356
+ /**
2357
+ * Gradient Color Stops From
2358
+ * @see https://tailwindcss.com/docs/gradient-color-stops
2359
+ */
2360
+ "gradient-from": [{
2361
+ from: d()
2362
+ }],
2363
+ /**
2364
+ * Gradient Color Stops Via
2365
+ * @see https://tailwindcss.com/docs/gradient-color-stops
2366
+ */
2367
+ "gradient-via": [{
2368
+ via: d()
2369
+ }],
2370
+ /**
2371
+ * Gradient Color Stops To
2372
+ * @see https://tailwindcss.com/docs/gradient-color-stops
2373
+ */
2374
+ "gradient-to": [{
2375
+ to: d()
2376
+ }],
2377
+ // ---------------
2378
+ // --- Borders ---
2379
+ // ---------------
2380
+ /**
2381
+ * Border Radius
2382
+ * @see https://tailwindcss.com/docs/border-radius
2383
+ */
2384
+ rounded: [{
2385
+ rounded: _()
2386
+ }],
2387
+ /**
2388
+ * Border Radius Start
2389
+ * @see https://tailwindcss.com/docs/border-radius
2390
+ */
2391
+ "rounded-s": [{
2392
+ "rounded-s": _()
2393
+ }],
2394
+ /**
2395
+ * Border Radius End
2396
+ * @see https://tailwindcss.com/docs/border-radius
2397
+ */
2398
+ "rounded-e": [{
2399
+ "rounded-e": _()
2400
+ }],
2401
+ /**
2402
+ * Border Radius Top
2403
+ * @see https://tailwindcss.com/docs/border-radius
2404
+ */
2405
+ "rounded-t": [{
2406
+ "rounded-t": _()
2407
+ }],
2408
+ /**
2409
+ * Border Radius Right
2410
+ * @see https://tailwindcss.com/docs/border-radius
2411
+ */
2412
+ "rounded-r": [{
2413
+ "rounded-r": _()
2414
+ }],
2415
+ /**
2416
+ * Border Radius Bottom
2417
+ * @see https://tailwindcss.com/docs/border-radius
2418
+ */
2419
+ "rounded-b": [{
2420
+ "rounded-b": _()
2421
+ }],
2422
+ /**
2423
+ * Border Radius Left
2424
+ * @see https://tailwindcss.com/docs/border-radius
2425
+ */
2426
+ "rounded-l": [{
2427
+ "rounded-l": _()
2428
+ }],
2429
+ /**
2430
+ * Border Radius Start Start
2431
+ * @see https://tailwindcss.com/docs/border-radius
2432
+ */
2433
+ "rounded-ss": [{
2434
+ "rounded-ss": _()
2435
+ }],
2436
+ /**
2437
+ * Border Radius Start End
2438
+ * @see https://tailwindcss.com/docs/border-radius
2439
+ */
2440
+ "rounded-se": [{
2441
+ "rounded-se": _()
2442
+ }],
2443
+ /**
2444
+ * Border Radius End End
2445
+ * @see https://tailwindcss.com/docs/border-radius
2446
+ */
2447
+ "rounded-ee": [{
2448
+ "rounded-ee": _()
2449
+ }],
2450
+ /**
2451
+ * Border Radius End Start
2452
+ * @see https://tailwindcss.com/docs/border-radius
2453
+ */
2454
+ "rounded-es": [{
2455
+ "rounded-es": _()
2456
+ }],
2457
+ /**
2458
+ * Border Radius Top Left
2459
+ * @see https://tailwindcss.com/docs/border-radius
2460
+ */
2461
+ "rounded-tl": [{
2462
+ "rounded-tl": _()
2463
+ }],
2464
+ /**
2465
+ * Border Radius Top Right
2466
+ * @see https://tailwindcss.com/docs/border-radius
2467
+ */
2468
+ "rounded-tr": [{
2469
+ "rounded-tr": _()
2470
+ }],
2471
+ /**
2472
+ * Border Radius Bottom Right
2473
+ * @see https://tailwindcss.com/docs/border-radius
2474
+ */
2475
+ "rounded-br": [{
2476
+ "rounded-br": _()
2477
+ }],
2478
+ /**
2479
+ * Border Radius Bottom Left
2480
+ * @see https://tailwindcss.com/docs/border-radius
2481
+ */
2482
+ "rounded-bl": [{
2483
+ "rounded-bl": _()
2484
+ }],
2485
+ /**
2486
+ * Border Width
2487
+ * @see https://tailwindcss.com/docs/border-width
2488
+ */
2489
+ "border-w": [{
2490
+ border: $()
2491
+ }],
2492
+ /**
2493
+ * Border Width X
2494
+ * @see https://tailwindcss.com/docs/border-width
2495
+ */
2496
+ "border-w-x": [{
2497
+ "border-x": $()
2498
+ }],
2499
+ /**
2500
+ * Border Width Y
2501
+ * @see https://tailwindcss.com/docs/border-width
2502
+ */
2503
+ "border-w-y": [{
2504
+ "border-y": $()
2505
+ }],
2506
+ /**
2507
+ * Border Width Start
2508
+ * @see https://tailwindcss.com/docs/border-width
2509
+ */
2510
+ "border-w-s": [{
2511
+ "border-s": $()
2512
+ }],
2513
+ /**
2514
+ * Border Width End
2515
+ * @see https://tailwindcss.com/docs/border-width
2516
+ */
2517
+ "border-w-e": [{
2518
+ "border-e": $()
2519
+ }],
2520
+ /**
2521
+ * Border Width Top
2522
+ * @see https://tailwindcss.com/docs/border-width
2523
+ */
2524
+ "border-w-t": [{
2525
+ "border-t": $()
2526
+ }],
2527
+ /**
2528
+ * Border Width Right
2529
+ * @see https://tailwindcss.com/docs/border-width
2530
+ */
2531
+ "border-w-r": [{
2532
+ "border-r": $()
2533
+ }],
2534
+ /**
2535
+ * Border Width Bottom
2536
+ * @see https://tailwindcss.com/docs/border-width
2537
+ */
2538
+ "border-w-b": [{
2539
+ "border-b": $()
2540
+ }],
2541
+ /**
2542
+ * Border Width Left
2543
+ * @see https://tailwindcss.com/docs/border-width
2544
+ */
2545
+ "border-w-l": [{
2546
+ "border-l": $()
2547
+ }],
2548
+ /**
2549
+ * Divide Width X
2550
+ * @see https://tailwindcss.com/docs/border-width#between-children
2551
+ */
2552
+ "divide-x": [{
2553
+ "divide-x": $()
2554
+ }],
2555
+ /**
2556
+ * Divide Width X Reverse
2557
+ * @see https://tailwindcss.com/docs/border-width#between-children
2558
+ */
2559
+ "divide-x-reverse": ["divide-x-reverse"],
2560
+ /**
2561
+ * Divide Width Y
2562
+ * @see https://tailwindcss.com/docs/border-width#between-children
2563
+ */
2564
+ "divide-y": [{
2565
+ "divide-y": $()
2566
+ }],
2567
+ /**
2568
+ * Divide Width Y Reverse
2569
+ * @see https://tailwindcss.com/docs/border-width#between-children
2570
+ */
2571
+ "divide-y-reverse": ["divide-y-reverse"],
2572
+ /**
2573
+ * Border Style
2574
+ * @see https://tailwindcss.com/docs/border-style
2575
+ */
2576
+ "border-style": [{
2577
+ border: [...se(), "hidden", "none"]
2578
+ }],
2579
+ /**
2580
+ * Divide Style
2581
+ * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style
2582
+ */
2583
+ "divide-style": [{
2584
+ divide: [...se(), "hidden", "none"]
2585
+ }],
2586
+ /**
2587
+ * Border Color
2588
+ * @see https://tailwindcss.com/docs/border-color
2589
+ */
2590
+ "border-color": [{
2591
+ border: d()
2592
+ }],
2593
+ /**
2594
+ * Border Color X
2595
+ * @see https://tailwindcss.com/docs/border-color
2596
+ */
2597
+ "border-color-x": [{
2598
+ "border-x": d()
2599
+ }],
2600
+ /**
2601
+ * Border Color Y
2602
+ * @see https://tailwindcss.com/docs/border-color
2603
+ */
2604
+ "border-color-y": [{
2605
+ "border-y": d()
2606
+ }],
2607
+ /**
2608
+ * Border Color S
2609
+ * @see https://tailwindcss.com/docs/border-color
2610
+ */
2611
+ "border-color-s": [{
2612
+ "border-s": d()
2613
+ }],
2614
+ /**
2615
+ * Border Color E
2616
+ * @see https://tailwindcss.com/docs/border-color
2617
+ */
2618
+ "border-color-e": [{
2619
+ "border-e": d()
2620
+ }],
2621
+ /**
2622
+ * Border Color Top
2623
+ * @see https://tailwindcss.com/docs/border-color
2624
+ */
2625
+ "border-color-t": [{
2626
+ "border-t": d()
2627
+ }],
2628
+ /**
2629
+ * Border Color Right
2630
+ * @see https://tailwindcss.com/docs/border-color
2631
+ */
2632
+ "border-color-r": [{
2633
+ "border-r": d()
2634
+ }],
2635
+ /**
2636
+ * Border Color Bottom
2637
+ * @see https://tailwindcss.com/docs/border-color
2638
+ */
2639
+ "border-color-b": [{
2640
+ "border-b": d()
2641
+ }],
2642
+ /**
2643
+ * Border Color Left
2644
+ * @see https://tailwindcss.com/docs/border-color
2645
+ */
2646
+ "border-color-l": [{
2647
+ "border-l": d()
2648
+ }],
2649
+ /**
2650
+ * Divide Color
2651
+ * @see https://tailwindcss.com/docs/divide-color
2652
+ */
2653
+ "divide-color": [{
2654
+ divide: d()
2655
+ }],
2656
+ /**
2657
+ * Outline Style
2658
+ * @see https://tailwindcss.com/docs/outline-style
2659
+ */
2660
+ "outline-style": [{
2661
+ outline: [...se(), "none", "hidden"]
2662
+ }],
2663
+ /**
2664
+ * Outline Offset
2665
+ * @see https://tailwindcss.com/docs/outline-offset
2666
+ */
2667
+ "outline-offset": [{
2668
+ "outline-offset": [b, l, i]
2669
+ }],
2670
+ /**
2671
+ * Outline Width
2672
+ * @see https://tailwindcss.com/docs/outline-width
2673
+ */
2674
+ "outline-w": [{
2675
+ outline: ["", b, ne, X]
2676
+ }],
2677
+ /**
2678
+ * Outline Color
2679
+ * @see https://tailwindcss.com/docs/outline-color
2680
+ */
2681
+ "outline-color": [{
2682
+ outline: d()
2683
+ }],
2684
+ // ---------------
2685
+ // --- Effects ---
2686
+ // ---------------
2687
+ /**
2688
+ * Box Shadow
2689
+ * @see https://tailwindcss.com/docs/box-shadow
2690
+ */
2691
+ shadow: [{
2692
+ shadow: [
2693
+ // Deprecated since Tailwind CSS v4.0.0
2694
+ "",
2695
+ "none",
2696
+ x,
2697
+ de,
2698
+ ce
2699
+ ]
2700
+ }],
2701
+ /**
2702
+ * Box Shadow Color
2703
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color
2704
+ */
2705
+ "shadow-color": [{
2706
+ shadow: d()
2707
+ }],
2708
+ /**
2709
+ * Inset Box Shadow
2710
+ * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow
2711
+ */
2712
+ "inset-shadow": [{
2713
+ "inset-shadow": ["none", S, de, ce]
2714
+ }],
2715
+ /**
2716
+ * Inset Box Shadow Color
2717
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color
2718
+ */
2719
+ "inset-shadow-color": [{
2720
+ "inset-shadow": d()
2721
+ }],
2722
+ /**
2723
+ * Ring Width
2724
+ * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring
2725
+ */
2726
+ "ring-w": [{
2727
+ ring: $()
2728
+ }],
2729
+ /**
2730
+ * Ring Width Inset
2731
+ * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings
2732
+ * @deprecated since Tailwind CSS v4.0.0
2733
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
2734
+ */
2735
+ "ring-w-inset": ["ring-inset"],
2736
+ /**
2737
+ * Ring Color
2738
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color
2739
+ */
2740
+ "ring-color": [{
2741
+ ring: d()
2742
+ }],
2743
+ /**
2744
+ * Ring Offset Width
2745
+ * @see https://v3.tailwindcss.com/docs/ring-offset-width
2746
+ * @deprecated since Tailwind CSS v4.0.0
2747
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
2748
+ */
2749
+ "ring-offset-w": [{
2750
+ "ring-offset": [b, X]
2751
+ }],
2752
+ /**
2753
+ * Ring Offset Color
2754
+ * @see https://v3.tailwindcss.com/docs/ring-offset-color
2755
+ * @deprecated since Tailwind CSS v4.0.0
2756
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
2757
+ */
2758
+ "ring-offset-color": [{
2759
+ "ring-offset": d()
2760
+ }],
2761
+ /**
2762
+ * Inset Ring Width
2763
+ * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring
2764
+ */
2765
+ "inset-ring-w": [{
2766
+ "inset-ring": $()
2767
+ }],
2768
+ /**
2769
+ * Inset Ring Color
2770
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color
2771
+ */
2772
+ "inset-ring-color": [{
2773
+ "inset-ring": d()
2774
+ }],
2775
+ /**
2776
+ * Text Shadow
2777
+ * @see https://tailwindcss.com/docs/text-shadow
2778
+ */
2779
+ "text-shadow": [{
2780
+ "text-shadow": ["none", w, de, ce]
2781
+ }],
2782
+ /**
2783
+ * Text Shadow Color
2784
+ * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color
2785
+ */
2786
+ "text-shadow-color": [{
2787
+ "text-shadow": d()
2788
+ }],
2789
+ /**
2790
+ * Opacity
2791
+ * @see https://tailwindcss.com/docs/opacity
2792
+ */
2793
+ opacity: [{
2794
+ opacity: [b, l, i]
2795
+ }],
2796
+ /**
2797
+ * Mix Blend Mode
2798
+ * @see https://tailwindcss.com/docs/mix-blend-mode
2799
+ */
2800
+ "mix-blend": [{
2801
+ "mix-blend": [...ye(), "plus-darker", "plus-lighter"]
2802
+ }],
2803
+ /**
2804
+ * Background Blend Mode
2805
+ * @see https://tailwindcss.com/docs/background-blend-mode
2806
+ */
2807
+ "bg-blend": [{
2808
+ "bg-blend": ye()
2809
+ }],
2810
+ /**
2811
+ * Mask Clip
2812
+ * @see https://tailwindcss.com/docs/mask-clip
2813
+ */
2814
+ "mask-clip": [{
2815
+ "mask-clip": ["border", "padding", "content", "fill", "stroke", "view"]
2816
+ }, "mask-no-clip"],
2817
+ /**
2818
+ * Mask Composite
2819
+ * @see https://tailwindcss.com/docs/mask-composite
2820
+ */
2821
+ "mask-composite": [{
2822
+ mask: ["add", "subtract", "intersect", "exclude"]
2823
+ }],
2824
+ /**
2825
+ * Mask Image
2826
+ * @see https://tailwindcss.com/docs/mask-image
2827
+ */
2828
+ "mask-image-linear-pos": [{
2829
+ "mask-linear": [b]
2830
+ }],
2831
+ "mask-image-linear-from-pos": [{
2832
+ "mask-linear-from": R()
2833
+ }],
2834
+ "mask-image-linear-to-pos": [{
2835
+ "mask-linear-to": R()
2836
+ }],
2837
+ "mask-image-linear-from-color": [{
2838
+ "mask-linear-from": d()
2839
+ }],
2840
+ "mask-image-linear-to-color": [{
2841
+ "mask-linear-to": d()
2842
+ }],
2843
+ "mask-image-t-from-pos": [{
2844
+ "mask-t-from": R()
2845
+ }],
2846
+ "mask-image-t-to-pos": [{
2847
+ "mask-t-to": R()
2848
+ }],
2849
+ "mask-image-t-from-color": [{
2850
+ "mask-t-from": d()
2851
+ }],
2852
+ "mask-image-t-to-color": [{
2853
+ "mask-t-to": d()
2854
+ }],
2855
+ "mask-image-r-from-pos": [{
2856
+ "mask-r-from": R()
2857
+ }],
2858
+ "mask-image-r-to-pos": [{
2859
+ "mask-r-to": R()
2860
+ }],
2861
+ "mask-image-r-from-color": [{
2862
+ "mask-r-from": d()
2863
+ }],
2864
+ "mask-image-r-to-color": [{
2865
+ "mask-r-to": d()
2866
+ }],
2867
+ "mask-image-b-from-pos": [{
2868
+ "mask-b-from": R()
2869
+ }],
2870
+ "mask-image-b-to-pos": [{
2871
+ "mask-b-to": R()
2872
+ }],
2873
+ "mask-image-b-from-color": [{
2874
+ "mask-b-from": d()
2875
+ }],
2876
+ "mask-image-b-to-color": [{
2877
+ "mask-b-to": d()
2878
+ }],
2879
+ "mask-image-l-from-pos": [{
2880
+ "mask-l-from": R()
2881
+ }],
2882
+ "mask-image-l-to-pos": [{
2883
+ "mask-l-to": R()
2884
+ }],
2885
+ "mask-image-l-from-color": [{
2886
+ "mask-l-from": d()
2887
+ }],
2888
+ "mask-image-l-to-color": [{
2889
+ "mask-l-to": d()
2890
+ }],
2891
+ "mask-image-x-from-pos": [{
2892
+ "mask-x-from": R()
2893
+ }],
2894
+ "mask-image-x-to-pos": [{
2895
+ "mask-x-to": R()
2896
+ }],
2897
+ "mask-image-x-from-color": [{
2898
+ "mask-x-from": d()
2899
+ }],
2900
+ "mask-image-x-to-color": [{
2901
+ "mask-x-to": d()
2902
+ }],
2903
+ "mask-image-y-from-pos": [{
2904
+ "mask-y-from": R()
2905
+ }],
2906
+ "mask-image-y-to-pos": [{
2907
+ "mask-y-to": R()
2908
+ }],
2909
+ "mask-image-y-from-color": [{
2910
+ "mask-y-from": d()
2911
+ }],
2912
+ "mask-image-y-to-color": [{
2913
+ "mask-y-to": d()
2914
+ }],
2915
+ "mask-image-radial": [{
2916
+ "mask-radial": [l, i]
2917
+ }],
2918
+ "mask-image-radial-from-pos": [{
2919
+ "mask-radial-from": R()
2920
+ }],
2921
+ "mask-image-radial-to-pos": [{
2922
+ "mask-radial-to": R()
2923
+ }],
2924
+ "mask-image-radial-from-color": [{
2925
+ "mask-radial-from": d()
2926
+ }],
2927
+ "mask-image-radial-to-color": [{
2928
+ "mask-radial-to": d()
2929
+ }],
2930
+ "mask-image-radial-shape": [{
2931
+ "mask-radial": ["circle", "ellipse"]
2932
+ }],
2933
+ "mask-image-radial-size": [{
2934
+ "mask-radial": [{
2935
+ closest: ["side", "corner"],
2936
+ farthest: ["side", "corner"]
2937
+ }]
2938
+ }],
2939
+ "mask-image-radial-pos": [{
2940
+ "mask-radial-at": L()
2941
+ }],
2942
+ "mask-image-conic-pos": [{
2943
+ "mask-conic": [b]
2944
+ }],
2945
+ "mask-image-conic-from-pos": [{
2946
+ "mask-conic-from": R()
2947
+ }],
2948
+ "mask-image-conic-to-pos": [{
2949
+ "mask-conic-to": R()
2950
+ }],
2951
+ "mask-image-conic-from-color": [{
2952
+ "mask-conic-from": d()
2953
+ }],
2954
+ "mask-image-conic-to-color": [{
2955
+ "mask-conic-to": d()
2956
+ }],
2957
+ /**
2958
+ * Mask Mode
2959
+ * @see https://tailwindcss.com/docs/mask-mode
2960
+ */
2961
+ "mask-mode": [{
2962
+ mask: ["alpha", "luminance", "match"]
2963
+ }],
2964
+ /**
2965
+ * Mask Origin
2966
+ * @see https://tailwindcss.com/docs/mask-origin
2967
+ */
2968
+ "mask-origin": [{
2969
+ "mask-origin": ["border", "padding", "content", "fill", "stroke", "view"]
2970
+ }],
2971
+ /**
2972
+ * Mask Position
2973
+ * @see https://tailwindcss.com/docs/mask-position
2974
+ */
2975
+ "mask-position": [{
2976
+ mask: O()
2977
+ }],
2978
+ /**
2979
+ * Mask Repeat
2980
+ * @see https://tailwindcss.com/docs/mask-repeat
2981
+ */
2982
+ "mask-repeat": [{
2983
+ mask: W()
2984
+ }],
2985
+ /**
2986
+ * Mask Size
2987
+ * @see https://tailwindcss.com/docs/mask-size
2988
+ */
2989
+ "mask-size": [{
2990
+ mask: Q()
2991
+ }],
2992
+ /**
2993
+ * Mask Type
2994
+ * @see https://tailwindcss.com/docs/mask-type
2995
+ */
2996
+ "mask-type": [{
2997
+ "mask-type": ["alpha", "luminance"]
2998
+ }],
2999
+ /**
3000
+ * Mask Image
3001
+ * @see https://tailwindcss.com/docs/mask-image
3002
+ */
3003
+ "mask-image": [{
3004
+ mask: ["none", l, i]
3005
+ }],
3006
+ // ---------------
3007
+ // --- Filters ---
3008
+ // ---------------
3009
+ /**
3010
+ * Filter
3011
+ * @see https://tailwindcss.com/docs/filter
3012
+ */
3013
+ filter: [{
3014
+ filter: [
3015
+ // Deprecated since Tailwind CSS v3.0.0
3016
+ "",
3017
+ "none",
3018
+ l,
3019
+ i
3020
+ ]
3021
+ }],
3022
+ /**
3023
+ * Blur
3024
+ * @see https://tailwindcss.com/docs/blur
3025
+ */
3026
+ blur: [{
3027
+ blur: ke()
3028
+ }],
3029
+ /**
3030
+ * Brightness
3031
+ * @see https://tailwindcss.com/docs/brightness
3032
+ */
3033
+ brightness: [{
3034
+ brightness: [b, l, i]
3035
+ }],
3036
+ /**
3037
+ * Contrast
3038
+ * @see https://tailwindcss.com/docs/contrast
3039
+ */
3040
+ contrast: [{
3041
+ contrast: [b, l, i]
3042
+ }],
3043
+ /**
3044
+ * Drop Shadow
3045
+ * @see https://tailwindcss.com/docs/drop-shadow
3046
+ */
3047
+ "drop-shadow": [{
3048
+ "drop-shadow": [
3049
+ // Deprecated since Tailwind CSS v4.0.0
3050
+ "",
3051
+ "none",
3052
+ y,
3053
+ de,
3054
+ ce
3055
+ ]
3056
+ }],
3057
+ /**
3058
+ * Drop Shadow Color
3059
+ * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color
3060
+ */
3061
+ "drop-shadow-color": [{
3062
+ "drop-shadow": d()
3063
+ }],
3064
+ /**
3065
+ * Grayscale
3066
+ * @see https://tailwindcss.com/docs/grayscale
3067
+ */
3068
+ grayscale: [{
3069
+ grayscale: ["", b, l, i]
3070
+ }],
3071
+ /**
3072
+ * Hue Rotate
3073
+ * @see https://tailwindcss.com/docs/hue-rotate
3074
+ */
3075
+ "hue-rotate": [{
3076
+ "hue-rotate": [b, l, i]
3077
+ }],
3078
+ /**
3079
+ * Invert
3080
+ * @see https://tailwindcss.com/docs/invert
3081
+ */
3082
+ invert: [{
3083
+ invert: ["", b, l, i]
3084
+ }],
3085
+ /**
3086
+ * Saturate
3087
+ * @see https://tailwindcss.com/docs/saturate
3088
+ */
3089
+ saturate: [{
3090
+ saturate: [b, l, i]
3091
+ }],
3092
+ /**
3093
+ * Sepia
3094
+ * @see https://tailwindcss.com/docs/sepia
3095
+ */
3096
+ sepia: [{
3097
+ sepia: ["", b, l, i]
3098
+ }],
3099
+ /**
3100
+ * Backdrop Filter
3101
+ * @see https://tailwindcss.com/docs/backdrop-filter
3102
+ */
3103
+ "backdrop-filter": [{
3104
+ "backdrop-filter": [
3105
+ // Deprecated since Tailwind CSS v3.0.0
3106
+ "",
3107
+ "none",
3108
+ l,
3109
+ i
3110
+ ]
3111
+ }],
3112
+ /**
3113
+ * Backdrop Blur
3114
+ * @see https://tailwindcss.com/docs/backdrop-blur
3115
+ */
3116
+ "backdrop-blur": [{
3117
+ "backdrop-blur": ke()
3118
+ }],
3119
+ /**
3120
+ * Backdrop Brightness
3121
+ * @see https://tailwindcss.com/docs/backdrop-brightness
3122
+ */
3123
+ "backdrop-brightness": [{
3124
+ "backdrop-brightness": [b, l, i]
3125
+ }],
3126
+ /**
3127
+ * Backdrop Contrast
3128
+ * @see https://tailwindcss.com/docs/backdrop-contrast
3129
+ */
3130
+ "backdrop-contrast": [{
3131
+ "backdrop-contrast": [b, l, i]
3132
+ }],
3133
+ /**
3134
+ * Backdrop Grayscale
3135
+ * @see https://tailwindcss.com/docs/backdrop-grayscale
3136
+ */
3137
+ "backdrop-grayscale": [{
3138
+ "backdrop-grayscale": ["", b, l, i]
3139
+ }],
3140
+ /**
3141
+ * Backdrop Hue Rotate
3142
+ * @see https://tailwindcss.com/docs/backdrop-hue-rotate
3143
+ */
3144
+ "backdrop-hue-rotate": [{
3145
+ "backdrop-hue-rotate": [b, l, i]
3146
+ }],
3147
+ /**
3148
+ * Backdrop Invert
3149
+ * @see https://tailwindcss.com/docs/backdrop-invert
3150
+ */
3151
+ "backdrop-invert": [{
3152
+ "backdrop-invert": ["", b, l, i]
3153
+ }],
3154
+ /**
3155
+ * Backdrop Opacity
3156
+ * @see https://tailwindcss.com/docs/backdrop-opacity
3157
+ */
3158
+ "backdrop-opacity": [{
3159
+ "backdrop-opacity": [b, l, i]
3160
+ }],
3161
+ /**
3162
+ * Backdrop Saturate
3163
+ * @see https://tailwindcss.com/docs/backdrop-saturate
3164
+ */
3165
+ "backdrop-saturate": [{
3166
+ "backdrop-saturate": [b, l, i]
3167
+ }],
3168
+ /**
3169
+ * Backdrop Sepia
3170
+ * @see https://tailwindcss.com/docs/backdrop-sepia
3171
+ */
3172
+ "backdrop-sepia": [{
3173
+ "backdrop-sepia": ["", b, l, i]
3174
+ }],
3175
+ // --------------
3176
+ // --- Tables ---
3177
+ // --------------
3178
+ /**
3179
+ * Border Collapse
3180
+ * @see https://tailwindcss.com/docs/border-collapse
3181
+ */
3182
+ "border-collapse": [{
3183
+ border: ["collapse", "separate"]
3184
+ }],
3185
+ /**
3186
+ * Border Spacing
3187
+ * @see https://tailwindcss.com/docs/border-spacing
3188
+ */
3189
+ "border-spacing": [{
3190
+ "border-spacing": m()
3191
+ }],
3192
+ /**
3193
+ * Border Spacing X
3194
+ * @see https://tailwindcss.com/docs/border-spacing
3195
+ */
3196
+ "border-spacing-x": [{
3197
+ "border-spacing-x": m()
3198
+ }],
3199
+ /**
3200
+ * Border Spacing Y
3201
+ * @see https://tailwindcss.com/docs/border-spacing
3202
+ */
3203
+ "border-spacing-y": [{
3204
+ "border-spacing-y": m()
3205
+ }],
3206
+ /**
3207
+ * Table Layout
3208
+ * @see https://tailwindcss.com/docs/table-layout
3209
+ */
3210
+ "table-layout": [{
3211
+ table: ["auto", "fixed"]
3212
+ }],
3213
+ /**
3214
+ * Caption Side
3215
+ * @see https://tailwindcss.com/docs/caption-side
3216
+ */
3217
+ caption: [{
3218
+ caption: ["top", "bottom"]
3219
+ }],
3220
+ // ---------------------------------
3221
+ // --- Transitions and Animation ---
3222
+ // ---------------------------------
3223
+ /**
3224
+ * Transition Property
3225
+ * @see https://tailwindcss.com/docs/transition-property
3226
+ */
3227
+ transition: [{
3228
+ transition: ["", "all", "colors", "opacity", "shadow", "transform", "none", l, i]
3229
+ }],
3230
+ /**
3231
+ * Transition Behavior
3232
+ * @see https://tailwindcss.com/docs/transition-behavior
3233
+ */
3234
+ "transition-behavior": [{
3235
+ transition: ["normal", "discrete"]
3236
+ }],
3237
+ /**
3238
+ * Transition Duration
3239
+ * @see https://tailwindcss.com/docs/transition-duration
3240
+ */
3241
+ duration: [{
3242
+ duration: [b, "initial", l, i]
3243
+ }],
3244
+ /**
3245
+ * Transition Timing Function
3246
+ * @see https://tailwindcss.com/docs/transition-timing-function
3247
+ */
3248
+ ease: [{
3249
+ ease: ["linear", "initial", D, l, i]
3250
+ }],
3251
+ /**
3252
+ * Transition Delay
3253
+ * @see https://tailwindcss.com/docs/transition-delay
3254
+ */
3255
+ delay: [{
3256
+ delay: [b, l, i]
3257
+ }],
3258
+ /**
3259
+ * Animation
3260
+ * @see https://tailwindcss.com/docs/animation
3261
+ */
3262
+ animate: [{
3263
+ animate: ["none", F, l, i]
3264
+ }],
3265
+ // ------------------
3266
+ // --- Transforms ---
3267
+ // ------------------
3268
+ /**
3269
+ * Backface Visibility
3270
+ * @see https://tailwindcss.com/docs/backface-visibility
3271
+ */
3272
+ backface: [{
3273
+ backface: ["hidden", "visible"]
3274
+ }],
3275
+ /**
3276
+ * Perspective
3277
+ * @see https://tailwindcss.com/docs/perspective
3278
+ */
3279
+ perspective: [{
3280
+ perspective: [z, l, i]
3281
+ }],
3282
+ /**
3283
+ * Perspective Origin
3284
+ * @see https://tailwindcss.com/docs/perspective-origin
3285
+ */
3286
+ "perspective-origin": [{
3287
+ "perspective-origin": N()
3288
+ }],
3289
+ /**
3290
+ * Rotate
3291
+ * @see https://tailwindcss.com/docs/rotate
3292
+ */
3293
+ rotate: [{
3294
+ rotate: ae()
3295
+ }],
3296
+ /**
3297
+ * Rotate X
3298
+ * @see https://tailwindcss.com/docs/rotate
3299
+ */
3300
+ "rotate-x": [{
3301
+ "rotate-x": ae()
3302
+ }],
3303
+ /**
3304
+ * Rotate Y
3305
+ * @see https://tailwindcss.com/docs/rotate
3306
+ */
3307
+ "rotate-y": [{
3308
+ "rotate-y": ae()
3309
+ }],
3310
+ /**
3311
+ * Rotate Z
3312
+ * @see https://tailwindcss.com/docs/rotate
3313
+ */
3314
+ "rotate-z": [{
3315
+ "rotate-z": ae()
3316
+ }],
3317
+ /**
3318
+ * Scale
3319
+ * @see https://tailwindcss.com/docs/scale
3320
+ */
3321
+ scale: [{
3322
+ scale: ie()
3323
+ }],
3324
+ /**
3325
+ * Scale X
3326
+ * @see https://tailwindcss.com/docs/scale
3327
+ */
3328
+ "scale-x": [{
3329
+ "scale-x": ie()
3330
+ }],
3331
+ /**
3332
+ * Scale Y
3333
+ * @see https://tailwindcss.com/docs/scale
3334
+ */
3335
+ "scale-y": [{
3336
+ "scale-y": ie()
3337
+ }],
3338
+ /**
3339
+ * Scale Z
3340
+ * @see https://tailwindcss.com/docs/scale
3341
+ */
3342
+ "scale-z": [{
3343
+ "scale-z": ie()
3344
+ }],
3345
+ /**
3346
+ * Scale 3D
3347
+ * @see https://tailwindcss.com/docs/scale
3348
+ */
3349
+ "scale-3d": ["scale-3d"],
3350
+ /**
3351
+ * Skew
3352
+ * @see https://tailwindcss.com/docs/skew
3353
+ */
3354
+ skew: [{
3355
+ skew: ue()
3356
+ }],
3357
+ /**
3358
+ * Skew X
3359
+ * @see https://tailwindcss.com/docs/skew
3360
+ */
3361
+ "skew-x": [{
3362
+ "skew-x": ue()
3363
+ }],
3364
+ /**
3365
+ * Skew Y
3366
+ * @see https://tailwindcss.com/docs/skew
3367
+ */
3368
+ "skew-y": [{
3369
+ "skew-y": ue()
3370
+ }],
3371
+ /**
3372
+ * Transform
3373
+ * @see https://tailwindcss.com/docs/transform
3374
+ */
3375
+ transform: [{
3376
+ transform: [l, i, "", "none", "gpu", "cpu"]
3377
+ }],
3378
+ /**
3379
+ * Transform Origin
3380
+ * @see https://tailwindcss.com/docs/transform-origin
3381
+ */
3382
+ "transform-origin": [{
3383
+ origin: N()
3384
+ }],
3385
+ /**
3386
+ * Transform Style
3387
+ * @see https://tailwindcss.com/docs/transform-style
3388
+ */
3389
+ "transform-style": [{
3390
+ transform: ["3d", "flat"]
3391
+ }],
3392
+ /**
3393
+ * Translate
3394
+ * @see https://tailwindcss.com/docs/translate
3395
+ */
3396
+ translate: [{
3397
+ translate: le()
3398
+ }],
3399
+ /**
3400
+ * Translate X
3401
+ * @see https://tailwindcss.com/docs/translate
3402
+ */
3403
+ "translate-x": [{
3404
+ "translate-x": le()
3405
+ }],
3406
+ /**
3407
+ * Translate Y
3408
+ * @see https://tailwindcss.com/docs/translate
3409
+ */
3410
+ "translate-y": [{
3411
+ "translate-y": le()
3412
+ }],
3413
+ /**
3414
+ * Translate Z
3415
+ * @see https://tailwindcss.com/docs/translate
3416
+ */
3417
+ "translate-z": [{
3418
+ "translate-z": le()
3419
+ }],
3420
+ /**
3421
+ * Translate None
3422
+ * @see https://tailwindcss.com/docs/translate
3423
+ */
3424
+ "translate-none": ["translate-none"],
3425
+ // ---------------------
3426
+ // --- Interactivity ---
3427
+ // ---------------------
3428
+ /**
3429
+ * Accent Color
3430
+ * @see https://tailwindcss.com/docs/accent-color
3431
+ */
3432
+ accent: [{
3433
+ accent: d()
3434
+ }],
3435
+ /**
3436
+ * Appearance
3437
+ * @see https://tailwindcss.com/docs/appearance
3438
+ */
3439
+ appearance: [{
3440
+ appearance: ["none", "auto"]
3441
+ }],
3442
+ /**
3443
+ * Caret Color
3444
+ * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities
3445
+ */
3446
+ "caret-color": [{
3447
+ caret: d()
3448
+ }],
3449
+ /**
3450
+ * Color Scheme
3451
+ * @see https://tailwindcss.com/docs/color-scheme
3452
+ */
3453
+ "color-scheme": [{
3454
+ scheme: ["normal", "dark", "light", "light-dark", "only-dark", "only-light"]
3455
+ }],
3456
+ /**
3457
+ * Cursor
3458
+ * @see https://tailwindcss.com/docs/cursor
3459
+ */
3460
+ cursor: [{
3461
+ 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", l, i]
3462
+ }],
3463
+ /**
3464
+ * Field Sizing
3465
+ * @see https://tailwindcss.com/docs/field-sizing
3466
+ */
3467
+ "field-sizing": [{
3468
+ "field-sizing": ["fixed", "content"]
3469
+ }],
3470
+ /**
3471
+ * Pointer Events
3472
+ * @see https://tailwindcss.com/docs/pointer-events
3473
+ */
3474
+ "pointer-events": [{
3475
+ "pointer-events": ["auto", "none"]
3476
+ }],
3477
+ /**
3478
+ * Resize
3479
+ * @see https://tailwindcss.com/docs/resize
3480
+ */
3481
+ resize: [{
3482
+ resize: ["none", "", "y", "x"]
3483
+ }],
3484
+ /**
3485
+ * Scroll Behavior
3486
+ * @see https://tailwindcss.com/docs/scroll-behavior
3487
+ */
3488
+ "scroll-behavior": [{
3489
+ scroll: ["auto", "smooth"]
3490
+ }],
3491
+ /**
3492
+ * Scroll Margin
3493
+ * @see https://tailwindcss.com/docs/scroll-margin
3494
+ */
3495
+ "scroll-m": [{
3496
+ "scroll-m": m()
3497
+ }],
3498
+ /**
3499
+ * Scroll Margin X
3500
+ * @see https://tailwindcss.com/docs/scroll-margin
3501
+ */
3502
+ "scroll-mx": [{
3503
+ "scroll-mx": m()
3504
+ }],
3505
+ /**
3506
+ * Scroll Margin Y
3507
+ * @see https://tailwindcss.com/docs/scroll-margin
3508
+ */
3509
+ "scroll-my": [{
3510
+ "scroll-my": m()
3511
+ }],
3512
+ /**
3513
+ * Scroll Margin Start
3514
+ * @see https://tailwindcss.com/docs/scroll-margin
3515
+ */
3516
+ "scroll-ms": [{
3517
+ "scroll-ms": m()
3518
+ }],
3519
+ /**
3520
+ * Scroll Margin End
3521
+ * @see https://tailwindcss.com/docs/scroll-margin
3522
+ */
3523
+ "scroll-me": [{
3524
+ "scroll-me": m()
3525
+ }],
3526
+ /**
3527
+ * Scroll Margin Top
3528
+ * @see https://tailwindcss.com/docs/scroll-margin
3529
+ */
3530
+ "scroll-mt": [{
3531
+ "scroll-mt": m()
3532
+ }],
3533
+ /**
3534
+ * Scroll Margin Right
3535
+ * @see https://tailwindcss.com/docs/scroll-margin
3536
+ */
3537
+ "scroll-mr": [{
3538
+ "scroll-mr": m()
3539
+ }],
3540
+ /**
3541
+ * Scroll Margin Bottom
3542
+ * @see https://tailwindcss.com/docs/scroll-margin
3543
+ */
3544
+ "scroll-mb": [{
3545
+ "scroll-mb": m()
3546
+ }],
3547
+ /**
3548
+ * Scroll Margin Left
3549
+ * @see https://tailwindcss.com/docs/scroll-margin
3550
+ */
3551
+ "scroll-ml": [{
3552
+ "scroll-ml": m()
3553
+ }],
3554
+ /**
3555
+ * Scroll Padding
3556
+ * @see https://tailwindcss.com/docs/scroll-padding
3557
+ */
3558
+ "scroll-p": [{
3559
+ "scroll-p": m()
3560
+ }],
3561
+ /**
3562
+ * Scroll Padding X
3563
+ * @see https://tailwindcss.com/docs/scroll-padding
3564
+ */
3565
+ "scroll-px": [{
3566
+ "scroll-px": m()
3567
+ }],
3568
+ /**
3569
+ * Scroll Padding Y
3570
+ * @see https://tailwindcss.com/docs/scroll-padding
3571
+ */
3572
+ "scroll-py": [{
3573
+ "scroll-py": m()
3574
+ }],
3575
+ /**
3576
+ * Scroll Padding Start
3577
+ * @see https://tailwindcss.com/docs/scroll-padding
3578
+ */
3579
+ "scroll-ps": [{
3580
+ "scroll-ps": m()
3581
+ }],
3582
+ /**
3583
+ * Scroll Padding End
3584
+ * @see https://tailwindcss.com/docs/scroll-padding
3585
+ */
3586
+ "scroll-pe": [{
3587
+ "scroll-pe": m()
3588
+ }],
3589
+ /**
3590
+ * Scroll Padding Top
3591
+ * @see https://tailwindcss.com/docs/scroll-padding
3592
+ */
3593
+ "scroll-pt": [{
3594
+ "scroll-pt": m()
3595
+ }],
3596
+ /**
3597
+ * Scroll Padding Right
3598
+ * @see https://tailwindcss.com/docs/scroll-padding
3599
+ */
3600
+ "scroll-pr": [{
3601
+ "scroll-pr": m()
3602
+ }],
3603
+ /**
3604
+ * Scroll Padding Bottom
3605
+ * @see https://tailwindcss.com/docs/scroll-padding
3606
+ */
3607
+ "scroll-pb": [{
3608
+ "scroll-pb": m()
3609
+ }],
3610
+ /**
3611
+ * Scroll Padding Left
3612
+ * @see https://tailwindcss.com/docs/scroll-padding
3613
+ */
3614
+ "scroll-pl": [{
3615
+ "scroll-pl": m()
3616
+ }],
3617
+ /**
3618
+ * Scroll Snap Align
3619
+ * @see https://tailwindcss.com/docs/scroll-snap-align
3620
+ */
3621
+ "snap-align": [{
3622
+ snap: ["start", "end", "center", "align-none"]
3623
+ }],
3624
+ /**
3625
+ * Scroll Snap Stop
3626
+ * @see https://tailwindcss.com/docs/scroll-snap-stop
3627
+ */
3628
+ "snap-stop": [{
3629
+ snap: ["normal", "always"]
3630
+ }],
3631
+ /**
3632
+ * Scroll Snap Type
3633
+ * @see https://tailwindcss.com/docs/scroll-snap-type
3634
+ */
3635
+ "snap-type": [{
3636
+ snap: ["none", "x", "y", "both"]
3637
+ }],
3638
+ /**
3639
+ * Scroll Snap Type Strictness
3640
+ * @see https://tailwindcss.com/docs/scroll-snap-type
3641
+ */
3642
+ "snap-strictness": [{
3643
+ snap: ["mandatory", "proximity"]
3644
+ }],
3645
+ /**
3646
+ * Touch Action
3647
+ * @see https://tailwindcss.com/docs/touch-action
3648
+ */
3649
+ touch: [{
3650
+ touch: ["auto", "none", "manipulation"]
3651
+ }],
3652
+ /**
3653
+ * Touch Action X
3654
+ * @see https://tailwindcss.com/docs/touch-action
3655
+ */
3656
+ "touch-x": [{
3657
+ "touch-pan": ["x", "left", "right"]
3658
+ }],
3659
+ /**
3660
+ * Touch Action Y
3661
+ * @see https://tailwindcss.com/docs/touch-action
3662
+ */
3663
+ "touch-y": [{
3664
+ "touch-pan": ["y", "up", "down"]
3665
+ }],
3666
+ /**
3667
+ * Touch Action Pinch Zoom
3668
+ * @see https://tailwindcss.com/docs/touch-action
3669
+ */
3670
+ "touch-pz": ["touch-pinch-zoom"],
3671
+ /**
3672
+ * User Select
3673
+ * @see https://tailwindcss.com/docs/user-select
3674
+ */
3675
+ select: [{
3676
+ select: ["none", "text", "all", "auto"]
3677
+ }],
3678
+ /**
3679
+ * Will Change
3680
+ * @see https://tailwindcss.com/docs/will-change
3681
+ */
3682
+ "will-change": [{
3683
+ "will-change": ["auto", "scroll", "contents", "transform", l, i]
3684
+ }],
3685
+ // -----------
3686
+ // --- SVG ---
3687
+ // -----------
3688
+ /**
3689
+ * Fill
3690
+ * @see https://tailwindcss.com/docs/fill
3691
+ */
3692
+ fill: [{
3693
+ fill: ["none", ...d()]
3694
+ }],
3695
+ /**
3696
+ * Stroke Width
3697
+ * @see https://tailwindcss.com/docs/stroke-width
3698
+ */
3699
+ "stroke-w": [{
3700
+ stroke: [b, ne, X, pe]
3701
+ }],
3702
+ /**
3703
+ * Stroke
3704
+ * @see https://tailwindcss.com/docs/stroke
3705
+ */
3706
+ stroke: [{
3707
+ stroke: ["none", ...d()]
3708
+ }],
3709
+ // ---------------------
3710
+ // --- Accessibility ---
3711
+ // ---------------------
3712
+ /**
3713
+ * Forced Color Adjust
3714
+ * @see https://tailwindcss.com/docs/forced-color-adjust
3715
+ */
3716
+ "forced-color-adjust": [{
3717
+ "forced-color-adjust": ["auto", "none"]
3718
+ }]
3719
+ },
3720
+ conflictingClassGroups: {
3721
+ overflow: ["overflow-x", "overflow-y"],
3722
+ overscroll: ["overscroll-x", "overscroll-y"],
3723
+ inset: ["inset-x", "inset-y", "start", "end", "top", "right", "bottom", "left"],
3724
+ "inset-x": ["right", "left"],
3725
+ "inset-y": ["top", "bottom"],
3726
+ flex: ["basis", "grow", "shrink"],
3727
+ gap: ["gap-x", "gap-y"],
3728
+ p: ["px", "py", "ps", "pe", "pt", "pr", "pb", "pl"],
3729
+ px: ["pr", "pl"],
3730
+ py: ["pt", "pb"],
3731
+ m: ["mx", "my", "ms", "me", "mt", "mr", "mb", "ml"],
3732
+ mx: ["mr", "ml"],
3733
+ my: ["mt", "mb"],
3734
+ size: ["w", "h"],
3735
+ "font-size": ["leading"],
3736
+ "fvn-normal": ["fvn-ordinal", "fvn-slashed-zero", "fvn-figure", "fvn-spacing", "fvn-fraction"],
3737
+ "fvn-ordinal": ["fvn-normal"],
3738
+ "fvn-slashed-zero": ["fvn-normal"],
3739
+ "fvn-figure": ["fvn-normal"],
3740
+ "fvn-spacing": ["fvn-normal"],
3741
+ "fvn-fraction": ["fvn-normal"],
3742
+ "line-clamp": ["display", "overflow"],
3743
+ 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"],
3744
+ "rounded-s": ["rounded-ss", "rounded-es"],
3745
+ "rounded-e": ["rounded-se", "rounded-ee"],
3746
+ "rounded-t": ["rounded-tl", "rounded-tr"],
3747
+ "rounded-r": ["rounded-tr", "rounded-br"],
3748
+ "rounded-b": ["rounded-br", "rounded-bl"],
3749
+ "rounded-l": ["rounded-tl", "rounded-bl"],
3750
+ "border-spacing": ["border-spacing-x", "border-spacing-y"],
3751
+ "border-w": ["border-w-x", "border-w-y", "border-w-s", "border-w-e", "border-w-t", "border-w-r", "border-w-b", "border-w-l"],
3752
+ "border-w-x": ["border-w-r", "border-w-l"],
3753
+ "border-w-y": ["border-w-t", "border-w-b"],
3754
+ "border-color": ["border-color-x", "border-color-y", "border-color-s", "border-color-e", "border-color-t", "border-color-r", "border-color-b", "border-color-l"],
3755
+ "border-color-x": ["border-color-r", "border-color-l"],
3756
+ "border-color-y": ["border-color-t", "border-color-b"],
3757
+ translate: ["translate-x", "translate-y", "translate-none"],
3758
+ "translate-none": ["translate", "translate-x", "translate-y", "translate-z"],
3759
+ "scroll-m": ["scroll-mx", "scroll-my", "scroll-ms", "scroll-me", "scroll-mt", "scroll-mr", "scroll-mb", "scroll-ml"],
3760
+ "scroll-mx": ["scroll-mr", "scroll-ml"],
3761
+ "scroll-my": ["scroll-mt", "scroll-mb"],
3762
+ "scroll-p": ["scroll-px", "scroll-py", "scroll-ps", "scroll-pe", "scroll-pt", "scroll-pr", "scroll-pb", "scroll-pl"],
3763
+ "scroll-px": ["scroll-pr", "scroll-pl"],
3764
+ "scroll-py": ["scroll-pt", "scroll-pb"],
3765
+ touch: ["touch-x", "touch-y", "touch-pz"],
3766
+ "touch-x": ["touch"],
3767
+ "touch-y": ["touch"],
3768
+ "touch-pz": ["touch"]
3769
+ },
3770
+ conflictingClassGroupModifiers: {
3771
+ "font-size": ["leading"]
3772
+ },
3773
+ orderSensitiveModifiers: ["*", "**", "after", "backdrop", "before", "details-content", "file", "first-letter", "first-line", "marker", "placeholder", "selection"]
3774
+ };
3775
+ }, jt = /* @__PURE__ */ bt(Gt);
3776
+ function P(...e) {
3777
+ return jt(Xe(e));
3778
+ }
3779
+ const Lt = {
3780
+ purple: "bg-purple-500",
3781
+ green: "bg-green-500",
3782
+ blue: "bg-blue-500",
3783
+ yellow: "bg-yellow-400 !text-yellow-900",
3784
+ red: "bg-red-500"
3785
+ }, _t = ({
3786
+ id: e,
3787
+ title: o,
3788
+ price: r,
3789
+ periodLabel: t,
3790
+ features: n,
3791
+ isSelected: s,
3792
+ onSelect: a,
3793
+ topBadge: p,
3794
+ discountBadge: c,
3795
+ premiumCallout: h,
3796
+ bottomNote: x,
3797
+ introPriceNote: S,
3798
+ isBestValue: w = false,
3799
+ ctaButton: y,
3800
+ className: j,
3801
+ children: z,
3802
+ disabled: k = false,
3803
+ ariaLabel: D,
3804
+ onTrack: F,
3805
+ trackingLabel: M,
3806
+ componentName: L = "SubscriptionTile",
3807
+ hideSelectionIndicator: N = false
3808
+ }) => {
3809
+ const C = !!y, E = !N, m = s ? "bg-blue-600 text-white ring-4 ring-blue-600 ring-offset-4 ring-offset-white dark:ring-offset-gray-900 border-transparent" : "bg-gray-100 dark:bg-gray-800 border border-gray-200 dark:border-gray-700 hover:border-gray-300 dark:hover:border-gray-600 hover:shadow-md", V = () => {
3810
+ !k && !C && (F == null ? void 0 : F({ action: "select", trackingLabel: M, componentName: L }), a());
3811
+ }, J = (I) => {
3812
+ !k && !C && (I.key === "Enter" || I.key === " ") && (I.preventDefault(), F == null ? void 0 : F({ action: "select", trackingLabel: M, componentName: L }), a());
3813
+ }, H = (I) => {
3814
+ I.stopPropagation(), F == null ? void 0 : F({ action: "cta_click", trackingLabel: M, componentName: L }), (y == null ? void 0 : y.onClick) && y.onClick();
3815
+ };
3816
+ return /* @__PURE__ */ jsxs(
3817
+ "div",
3818
+ {
3819
+ className: P(
3820
+ "relative rounded-2xl p-6 transition-all flex flex-col h-full",
3821
+ // Add extra bottom padding for radio button or CTA button (not needed if hidden)
3822
+ E && (C ? "pb-20" : "pb-14"),
3823
+ k ? "opacity-50 cursor-not-allowed" : C ? "cursor-default" : "cursor-pointer",
3824
+ m,
3825
+ j
3826
+ ),
3827
+ onClick: V,
3828
+ onKeyDown: J,
3829
+ role: C ? "article" : "radio",
3830
+ "aria-checked": C ? void 0 : s,
3831
+ "aria-label": D || `${o} - ${r}${t || ""}`,
3832
+ "aria-disabled": k,
3833
+ tabIndex: C || k ? -1 : 0,
3834
+ children: [
3835
+ p && /* @__PURE__ */ jsx("div", { className: "absolute top-0 left-1/2 -translate-x-1/2 -translate-y-1/2 z-10", children: /* @__PURE__ */ jsx(
3836
+ "span",
3837
+ {
3838
+ className: P(
3839
+ Lt[p.color],
3840
+ "text-white px-4 py-1.5 rounded-full text-sm font-semibold shadow-lg whitespace-nowrap"
3841
+ ),
3842
+ children: p.text
3843
+ }
3844
+ ) }),
3845
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col flex-grow", children: [
3846
+ /* @__PURE__ */ jsxs("div", { className: P("text-center mb-6", p && "mt-2"), children: [
3847
+ /* @__PURE__ */ jsx(
3848
+ "h3",
3849
+ {
3850
+ className: P(
3851
+ textVariants.heading.h4(),
3852
+ "mb-2",
3853
+ s ? "text-white" : ""
3854
+ ),
3855
+ children: o
3856
+ }
3857
+ ),
3858
+ /* @__PURE__ */ jsxs("div", { className: "mb-3", children: [
3859
+ /* @__PURE__ */ jsx(
3860
+ "span",
3861
+ {
3862
+ className: P(
3863
+ "text-4xl font-bold",
3864
+ s ? "text-white" : "text-gray-900 dark:text-gray-100"
3865
+ ),
3866
+ children: r
3867
+ }
3868
+ ),
3869
+ t && /* @__PURE__ */ jsx(
3870
+ "span",
3871
+ {
3872
+ className: P(
3873
+ "text-lg",
3874
+ s ? "text-blue-100" : "text-gray-500 dark:text-gray-400"
3875
+ ),
3876
+ children: t
3877
+ }
3878
+ )
3879
+ ] }),
3880
+ c && /* @__PURE__ */ jsx(
3881
+ "div",
3882
+ {
3883
+ className: P(
3884
+ "inline-flex items-center px-2 py-1 rounded-full text-sm font-semibold",
3885
+ s ? "bg-blue-500 text-white" : "bg-green-100 text-green-700 dark:bg-green-900/50 dark:text-green-300"
3886
+ ),
3887
+ children: c.text
3888
+ }
3889
+ )
3890
+ ] }),
3891
+ z,
3892
+ n.length > 0 && /* @__PURE__ */ jsx("div", { className: "space-y-3 mb-6 flex-grow", children: n.map((I, U) => /* @__PURE__ */ jsxs("div", { className: "flex items-start", children: [
3893
+ /* @__PURE__ */ jsx(
3894
+ "svg",
3895
+ {
3896
+ className: P(
3897
+ "w-5 h-5 mr-3 flex-shrink-0",
3898
+ s ? "text-blue-200" : "text-green-500"
3899
+ ),
3900
+ fill: "none",
3901
+ stroke: "currentColor",
3902
+ viewBox: "0 0 24 24",
3903
+ children: /* @__PURE__ */ jsx(
3904
+ "path",
3905
+ {
3906
+ strokeLinecap: "round",
3907
+ strokeLinejoin: "round",
3908
+ strokeWidth: 2,
3909
+ d: "M5 13l4 4L19 7"
3910
+ }
3911
+ )
3912
+ }
3913
+ ),
3914
+ /* @__PURE__ */ jsx(
3915
+ "span",
3916
+ {
3917
+ className: P(
3918
+ "text-sm text-left",
3919
+ s ? "text-white" : "text-gray-700 dark:text-gray-300"
3920
+ ),
3921
+ children: I.replace(/^✓\s*/, "")
3922
+ }
3923
+ )
3924
+ ] }, U)) }),
3925
+ h && /* @__PURE__ */ jsxs(
3926
+ "div",
3927
+ {
3928
+ className: P(
3929
+ "rounded-lg p-4 mb-4",
3930
+ s ? "bg-blue-500/30" : "bg-gradient-to-r from-purple-50 to-blue-50 dark:from-purple-900/20 dark:to-blue-900/20"
3931
+ ),
3932
+ children: [
3933
+ /* @__PURE__ */ jsx("div", { className: "flex items-center mb-2", children: /* @__PURE__ */ jsx(
3934
+ "span",
3935
+ {
3936
+ className: P(
3937
+ "font-semibold text-sm",
3938
+ s ? "text-white" : "text-purple-600 dark:text-purple-400"
3939
+ ),
3940
+ children: h.title
3941
+ }
3942
+ ) }),
3943
+ /* @__PURE__ */ jsx(
3944
+ "ul",
3945
+ {
3946
+ className: P(
3947
+ "text-xs space-y-1",
3948
+ s ? "text-blue-100" : "text-gray-600 dark:text-gray-400"
3949
+ ),
3950
+ children: h.features.map((I, U) => /* @__PURE__ */ jsxs("li", { children: [
3951
+ "• ",
3952
+ I
3953
+ ] }, U))
3954
+ }
3955
+ )
3956
+ ]
3957
+ }
3958
+ ),
3959
+ x && /* @__PURE__ */ jsx(
3960
+ "div",
3961
+ {
3962
+ className: P(
3963
+ "text-center text-sm font-medium mb-4",
3964
+ s ? "text-blue-100" : "text-blue-600 dark:text-blue-400"
3965
+ ),
3966
+ children: x
3967
+ }
3968
+ ),
3969
+ S && /* @__PURE__ */ jsx(
3970
+ "div",
3971
+ {
3972
+ className: P(
3973
+ "p-3 rounded-lg mt-auto",
3974
+ s ? "bg-blue-500/30" : "bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800"
3975
+ ),
3976
+ children: /* @__PURE__ */ jsx(
3977
+ "p",
3978
+ {
3979
+ className: P(
3980
+ "text-sm font-semibold text-center",
3981
+ s ? "text-white" : "text-yellow-700 dark:text-yellow-300"
3982
+ ),
3983
+ children: S
3984
+ }
3985
+ )
3986
+ }
3987
+ )
3988
+ ] }),
3989
+ E && C && /* @__PURE__ */ jsx("div", { className: "absolute bottom-4 left-0 right-0 px-6", children: y.href ? /* @__PURE__ */ jsx(
3990
+ "a",
3991
+ {
3992
+ href: y.href,
3993
+ className: P(
3994
+ "block w-full py-3 font-semibold rounded-lg text-center transition-colors",
3995
+ s ? "bg-white text-blue-600 hover:bg-gray-100" : "bg-blue-600 text-white hover:bg-blue-700"
3996
+ ),
3997
+ onClick: (I) => I.stopPropagation(),
3998
+ children: y.label
3999
+ }
4000
+ ) : /* @__PURE__ */ jsx(
4001
+ "button",
4002
+ {
4003
+ onClick: H,
4004
+ disabled: k,
4005
+ className: P(
4006
+ "w-full py-3 font-semibold rounded-lg transition-colors",
4007
+ s ? "bg-white text-blue-600 hover:bg-gray-100" : "bg-blue-600 text-white hover:bg-blue-700",
4008
+ k && "opacity-50 cursor-not-allowed"
4009
+ ),
4010
+ children: y.label
4011
+ }
4012
+ ) }),
4013
+ E && !C && /* @__PURE__ */ jsx("div", { className: "absolute bottom-4 left-1/2 -translate-x-1/2", children: /* @__PURE__ */ jsx(
4014
+ "div",
4015
+ {
4016
+ className: P(
4017
+ "w-5 h-5 rounded-full border-2 flex items-center justify-center",
4018
+ s ? "border-white bg-white" : "border-gray-300 dark:border-gray-600"
4019
+ ),
4020
+ children: s && /* @__PURE__ */ jsx("div", { className: "w-2 h-2 rounded-full bg-blue-600" })
4021
+ }
4022
+ ) })
4023
+ ]
4024
+ }
4025
+ );
4026
+ }, Kt = ({
4027
+ title: e,
4028
+ children: o,
4029
+ error: r,
4030
+ variant: t = "selection",
4031
+ currentStatus: n,
4032
+ primaryAction: s,
4033
+ secondaryAction: a,
4034
+ minTileWidth: p = 240,
4035
+ className: c,
4036
+ headerContent: h,
4037
+ aboveProducts: x,
4038
+ footerContent: S,
4039
+ currentStatusLabel: w = "Current Status",
4040
+ freeTileConfig: y,
4041
+ onTrack: j,
4042
+ trackingLabel: z,
4043
+ componentName: k = "SubscriptionLayout"
4044
+ }) => {
4045
+ var _a, _b, _c, _d;
4046
+ const D = t === "selection" && s, F = () => {
4047
+ j == null ? void 0 : j({ action: "primary_action", trackingLabel: z, componentName: k }), s == null ? void 0 : s.onClick();
4048
+ }, M = () => {
4049
+ j == null ? void 0 : j({ action: "secondary_action", trackingLabel: z, componentName: k }), a == null ? void 0 : a.onClick();
4050
+ }, L = t === "cta" && y, N = {
4051
+ display: "grid",
4052
+ gridTemplateColumns: `repeat(auto-fit, minmax(min(100%, ${p}px), 1fr))`,
4053
+ gap: "1.5rem"
4054
+ };
4055
+ return /* @__PURE__ */ jsx(Card, { className: c, children: /* @__PURE__ */ jsxs(CardContent, { className: "pt-6", children: [
4056
+ h,
4057
+ n && /* @__PURE__ */ jsxs(Fragment, { children: [
4058
+ /* @__PURE__ */ jsx("h2", { className: P(textVariants.heading.h3(), "mb-4"), children: w }),
4059
+ n.isActive ? /* @__PURE__ */ jsxs("div", { className: "bg-green-50 dark:bg-green-900/20 border border-green-200 dark:border-green-800 rounded-lg p-4 mb-6", children: [
4060
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center mb-2", children: [
4061
+ /* @__PURE__ */ jsx("div", { className: "w-3 h-3 bg-green-500 rounded-full mr-3" }),
4062
+ /* @__PURE__ */ jsx("span", { className: "font-semibold text-green-800 dark:text-green-300", children: ((_a = n.activeContent) == null ? void 0 : _a.title) || "Active Subscription" })
4063
+ ] }),
4064
+ ((_b = n.activeContent) == null ? void 0 : _b.fields) && n.activeContent.fields.length > 0 && /* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4 mt-4", children: n.activeContent.fields.map(
4065
+ (C, E) => /* @__PURE__ */ jsxs("div", { children: [
4066
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-green-600 dark:text-green-400", children: C.label }),
4067
+ /* @__PURE__ */ jsx("p", { className: "font-semibold text-green-800 dark:text-green-300", children: C.value })
4068
+ ] }, E)
4069
+ ) })
4070
+ ] }) : /* @__PURE__ */ jsxs("div", { className: "bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 rounded-lg p-4 mb-6", children: [
4071
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center mb-2", children: [
4072
+ /* @__PURE__ */ jsx("div", { className: "w-3 h-3 bg-yellow-500 rounded-full mr-3" }),
4073
+ /* @__PURE__ */ jsx("span", { className: "font-semibold text-yellow-800 dark:text-yellow-300", children: ((_c = n.inactiveContent) == null ? void 0 : _c.title) || "No Active Subscription" })
4074
+ ] }),
4075
+ ((_d = n.inactiveContent) == null ? void 0 : _d.message) && /* @__PURE__ */ jsx("p", { className: "text-yellow-700 dark:text-yellow-400", children: n.inactiveContent.message })
4076
+ ] })
4077
+ ] }),
4078
+ /* @__PURE__ */ jsx("h2", { className: P(textVariants.heading.h3(), "mb-4"), children: e }),
4079
+ x,
4080
+ /* @__PURE__ */ jsxs("div", { style: N, children: [
4081
+ L && /* @__PURE__ */ jsx(
4082
+ _t,
4083
+ {
4084
+ id: "free",
4085
+ title: y.title,
4086
+ price: y.price,
4087
+ periodLabel: y.periodLabel,
4088
+ features: y.features,
4089
+ isSelected: false,
4090
+ onSelect: () => {
4091
+ },
4092
+ topBadge: y.topBadge,
4093
+ ctaButton: y.ctaButton
4094
+ }
4095
+ ),
4096
+ o
4097
+ ] }),
4098
+ S,
4099
+ r && /* @__PURE__ */ jsx("div", { className: "bg-red-50 dark:bg-red-900/20 border border-red-200 dark:border-red-800 rounded-lg p-4 mt-6", children: /* @__PURE__ */ jsx("p", { className: "text-red-600 dark:text-red-400", children: r }) }),
4100
+ D && /* @__PURE__ */ jsxs("div", { className: "flex flex-col sm:flex-row gap-3 mt-6", children: [
4101
+ a && /* @__PURE__ */ jsx(
4102
+ Button,
4103
+ {
4104
+ onClick: M,
4105
+ disabled: a.disabled || a.loading,
4106
+ variant: "outline",
4107
+ className: "sm:flex-shrink-0",
4108
+ children: a.label
4109
+ }
4110
+ ),
4111
+ /* @__PURE__ */ jsx(
4112
+ Button,
4113
+ {
4114
+ onClick: F,
4115
+ disabled: s.disabled || s.loading,
4116
+ className: "flex-1",
4117
+ children: s.label
4118
+ }
4119
+ )
4120
+ ] })
4121
+ ] }) });
4122
+ };
4123
+ function Yt({
4124
+ options: e,
4125
+ value: o,
4126
+ onChange: r,
4127
+ className: t,
4128
+ disabled: n = false,
4129
+ size: s = "md"
4130
+ }) {
4131
+ const a = {
4132
+ sm: "px-3 py-1.5 text-xs",
4133
+ md: "px-4 py-2 text-sm",
4134
+ lg: "px-6 py-3 text-base"
4135
+ };
4136
+ return /* @__PURE__ */ jsx(
4137
+ "div",
4138
+ {
4139
+ className: P(
4140
+ "inline-flex rounded-lg bg-gray-100 dark:bg-gray-800 p-1",
4141
+ n && "opacity-50",
4142
+ t
4143
+ ),
4144
+ role: "radiogroup",
4145
+ children: e.map((p) => {
4146
+ const c = o === p.value;
4147
+ return /* @__PURE__ */ jsx(
4148
+ "button",
4149
+ {
4150
+ type: "button",
4151
+ role: "radio",
4152
+ "aria-checked": c,
4153
+ disabled: n,
4154
+ onClick: () => !n && r(p.value),
4155
+ className: P(
4156
+ a[s],
4157
+ "font-medium rounded-md transition-all focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2",
4158
+ c ? "bg-white dark:bg-gray-700 text-gray-900 dark:text-white shadow-sm" : "text-gray-600 dark:text-gray-400 hover:text-gray-900 dark:hover:text-white",
4159
+ n && "cursor-not-allowed"
4160
+ ),
4161
+ children: p.label
4162
+ },
4163
+ p.value
4164
+ );
4165
+ })
4166
+ }
4167
+ );
4168
+ }
4169
+ createContext(
4170
+ void 0
4171
+ );
4172
+ const DEFAULT_PACKAGE_ENTITLEMENT_MAP = {
4173
+ ultra_yearly: "bandwidth_ultra",
4174
+ ultra_monthly: "bandwidth_ultra",
4175
+ pro_yearly: "bandwidth_pro",
4176
+ pro_monthly: "bandwidth_pro",
4177
+ dev_yearly: "bandwidth_dev",
4178
+ dev_monthly: "bandwidth_dev"
4179
+ };
4180
+ function AppSubscriptionsPage({
4181
+ subscription,
4182
+ rateLimitsConfig,
4183
+ labels,
4184
+ formatters,
4185
+ packageEntitlementMap = DEFAULT_PACKAGE_ENTITLEMENT_MAP,
4186
+ onPurchaseSuccess,
4187
+ onRestoreSuccess,
4188
+ onError,
4189
+ onWarning
4190
+ }) {
4191
+ const {
4192
+ products,
4193
+ currentSubscription,
4194
+ isLoading,
4195
+ error,
4196
+ purchase,
4197
+ restore,
4198
+ clearError
4199
+ } = subscription;
4200
+ const [billingPeriod, setBillingPeriod] = useState("monthly");
4201
+ const [selectedPlan, setSelectedPlan] = useState(null);
4202
+ const [isPurchasing, setIsPurchasing] = useState(false);
4203
+ const [isRestoring, setIsRestoring] = useState(false);
4204
+ useEffect(() => {
4205
+ if (error) {
4206
+ onError == null ? void 0 : onError(labels.errorTitle, error);
4207
+ clearError();
4208
+ }
4209
+ }, [error, clearError, labels.errorTitle, onError]);
4210
+ const filteredProducts = products.filter((product) => {
4211
+ if (!product.period) return false;
4212
+ const isYearly = product.period.includes("Y") || product.period.includes("year");
4213
+ return billingPeriod === "yearly" ? isYearly : !isYearly;
4214
+ }).sort((a, b2) => parseFloat(a.price) - parseFloat(b2.price));
4215
+ const handlePeriodChange = (period) => {
4216
+ setBillingPeriod(period);
4217
+ setSelectedPlan(null);
4218
+ };
4219
+ const handlePurchase = async () => {
4220
+ if (!selectedPlan) return;
4221
+ setIsPurchasing(true);
4222
+ clearError();
4223
+ try {
4224
+ const result = await purchase(selectedPlan);
4225
+ if (result) {
4226
+ onPurchaseSuccess == null ? void 0 : onPurchaseSuccess();
4227
+ setSelectedPlan(null);
4228
+ }
4229
+ } catch (err) {
4230
+ onError == null ? void 0 : onError(
4231
+ labels.errorTitle,
4232
+ err instanceof Error ? err.message : labels.purchaseError
4233
+ );
4234
+ } finally {
4235
+ setIsPurchasing(false);
4236
+ }
4237
+ };
4238
+ const handleRestore = async () => {
4239
+ setIsRestoring(true);
4240
+ clearError();
4241
+ try {
4242
+ const result = await restore();
4243
+ if (result) {
4244
+ onRestoreSuccess == null ? void 0 : onRestoreSuccess();
4245
+ } else {
4246
+ onWarning == null ? void 0 : onWarning(labels.errorTitle, labels.restoreNoPurchases);
4247
+ }
4248
+ } catch (err) {
4249
+ onError == null ? void 0 : onError(
4250
+ labels.errorTitle,
4251
+ err instanceof Error ? err.message : labels.restoreError
4252
+ );
4253
+ } finally {
4254
+ setIsRestoring(false);
4255
+ }
4256
+ };
4257
+ const formatExpirationDate = useCallback((date) => {
4258
+ if (!date) return "";
4259
+ return new Intl.DateTimeFormat(void 0, {
4260
+ year: "numeric",
4261
+ month: "long",
4262
+ day: "numeric"
4263
+ }).format(date);
4264
+ }, []);
4265
+ const getPeriodLabel = useCallback(
4266
+ (period) => {
4267
+ if (!period) return "";
4268
+ if (period.includes("Y") || period.includes("year"))
4269
+ return labels.periodYear;
4270
+ if (period.includes("M") || period.includes("month"))
4271
+ return labels.periodMonth;
4272
+ if (period.includes("W") || period.includes("week"))
4273
+ return labels.periodWeek;
4274
+ return "";
4275
+ },
4276
+ [labels]
4277
+ );
4278
+ const getTrialLabel = useCallback(
4279
+ (trialPeriod) => {
4280
+ if (!trialPeriod) return void 0;
4281
+ const num = parseInt(trialPeriod.replace(/\D/g, "") || "1", 10);
4282
+ if (trialPeriod.includes("W")) {
4283
+ return formatters.formatTrialWeeks(num);
4284
+ }
4285
+ if (trialPeriod.includes("M")) {
4286
+ return formatters.formatTrialMonths(num);
4287
+ }
4288
+ return formatters.formatTrialDays(num);
4289
+ },
4290
+ [formatters]
4291
+ );
4292
+ const getRateLimitTierForProduct = useCallback(
4293
+ (packageId) => {
4294
+ if (!(rateLimitsConfig == null ? void 0 : rateLimitsConfig.tiers)) return void 0;
4295
+ const entitlement = packageEntitlementMap[packageId];
4296
+ if (entitlement) {
4297
+ return rateLimitsConfig.tiers.find(
4298
+ (tier) => tier.entitlement === entitlement
4299
+ );
4300
+ }
4301
+ return rateLimitsConfig.tiers.find((tier) => tier.entitlement === "none");
4302
+ },
4303
+ [rateLimitsConfig, packageEntitlementMap]
4304
+ );
4305
+ const formatRateLimit = useCallback(
4306
+ (limit) => {
4307
+ if (limit === null) return labels.unlimited;
4308
+ return limit.toLocaleString();
4309
+ },
4310
+ [labels.unlimited]
4311
+ );
4312
+ const getRateLimitFeatures = useCallback(
4313
+ (packageId) => {
4314
+ const tier = getRateLimitTierForProduct(packageId);
4315
+ if (!tier) return [];
4316
+ const features = [];
4317
+ if (tier.limits.hourly !== null) {
4318
+ features.push(
4319
+ formatters.formatHourlyLimit(formatRateLimit(tier.limits.hourly))
4320
+ );
4321
+ }
4322
+ if (tier.limits.daily !== null) {
4323
+ features.push(
4324
+ formatters.formatDailyLimit(formatRateLimit(tier.limits.daily))
4325
+ );
4326
+ }
4327
+ if (tier.limits.monthly !== null) {
4328
+ features.push(
4329
+ formatters.formatMonthlyLimit(formatRateLimit(tier.limits.monthly))
4330
+ );
4331
+ }
4332
+ if (tier.limits.hourly === null && tier.limits.daily === null && tier.limits.monthly === null) {
4333
+ features.push(labels.unlimitedRequests);
4334
+ }
4335
+ return features;
4336
+ },
4337
+ [
4338
+ getRateLimitTierForProduct,
4339
+ formatRateLimit,
4340
+ formatters,
4341
+ labels.unlimitedRequests
4342
+ ]
4343
+ );
4344
+ const getProductFeatures = useCallback(
4345
+ (packageId) => {
4346
+ return getRateLimitFeatures(packageId);
4347
+ },
4348
+ [getRateLimitFeatures]
4349
+ );
4350
+ const getFreeTierFeatures = useCallback(() => {
4351
+ const benefits = [...labels.freeTierFeatures];
4352
+ if (rateLimitsConfig == null ? void 0 : rateLimitsConfig.tiers) {
4353
+ const freeTier = rateLimitsConfig.tiers.find(
4354
+ (tier) => tier.entitlement === "none"
4355
+ );
4356
+ if (freeTier) {
4357
+ if (freeTier.limits.hourly !== null) {
4358
+ benefits.push(
4359
+ formatters.formatHourlyLimit(
4360
+ formatRateLimit(freeTier.limits.hourly)
4361
+ )
4362
+ );
4363
+ }
4364
+ if (freeTier.limits.daily !== null) {
4365
+ benefits.push(
4366
+ formatters.formatDailyLimit(formatRateLimit(freeTier.limits.daily))
4367
+ );
4368
+ }
4369
+ if (freeTier.limits.monthly !== null) {
4370
+ benefits.push(
4371
+ formatters.formatMonthlyLimit(
4372
+ formatRateLimit(freeTier.limits.monthly)
4373
+ )
4374
+ );
4375
+ }
4376
+ }
4377
+ }
4378
+ return benefits;
4379
+ }, [rateLimitsConfig, formatRateLimit, formatters, labels.freeTierFeatures]);
4380
+ const getYearlySavingsPercent = useCallback(
4381
+ (yearlyPackageId) => {
4382
+ var _a;
4383
+ const yearlyEntitlement = packageEntitlementMap[yearlyPackageId];
4384
+ if (!yearlyEntitlement) return void 0;
4385
+ const yearlyProduct = products.find(
4386
+ (p) => p.identifier === yearlyPackageId
4387
+ );
4388
+ if (!yearlyProduct) return void 0;
4389
+ const monthlyPackageId = (_a = Object.entries(packageEntitlementMap).find(
4390
+ ([pkgId, ent]) => ent === yearlyEntitlement && pkgId.includes("monthly")
4391
+ )) == null ? void 0 : _a[0];
4392
+ if (!monthlyPackageId) return void 0;
4393
+ const monthlyProduct = products.find(
4394
+ (p) => p.identifier === monthlyPackageId
4395
+ );
4396
+ if (!monthlyProduct) return void 0;
4397
+ const yearlyPrice = parseFloat(yearlyProduct.price);
4398
+ const monthlyPrice = parseFloat(monthlyProduct.price);
4399
+ if (monthlyPrice <= 0 || yearlyPrice <= 0) return void 0;
4400
+ const annualizedMonthly = monthlyPrice * 12;
4401
+ const savings = (annualizedMonthly - yearlyPrice) / annualizedMonthly * 100;
4402
+ return Math.round(savings);
4403
+ },
4404
+ [products, packageEntitlementMap]
4405
+ );
4406
+ const billingPeriodOptions = [
4407
+ { value: "monthly", label: labels.billingMonthly },
4408
+ { value: "yearly", label: labels.billingYearly }
4409
+ ];
4410
+ return /* @__PURE__ */ jsx(
4411
+ Kt,
4412
+ {
4413
+ title: labels.title,
4414
+ error,
4415
+ currentStatusLabel: labels.currentStatusLabel,
4416
+ currentStatus: {
4417
+ isActive: (currentSubscription == null ? void 0 : currentSubscription.isActive) ?? false,
4418
+ activeContent: (currentSubscription == null ? void 0 : currentSubscription.isActive) ? {
4419
+ title: labels.statusActive,
4420
+ fields: [
4421
+ {
4422
+ label: labels.labelPlan,
4423
+ value: currentSubscription.productIdentifier || labels.labelPremium
4424
+ },
4425
+ {
4426
+ label: labels.labelExpires,
4427
+ value: formatExpirationDate(
4428
+ currentSubscription.expirationDate
4429
+ )
4430
+ },
4431
+ {
4432
+ label: labels.labelWillRenew,
4433
+ value: currentSubscription.willRenew ? labels.yes : labels.no
4434
+ },
4435
+ ...rateLimitsConfig ? [
4436
+ {
4437
+ label: labels.labelMonthlyUsage,
4438
+ value: `${rateLimitsConfig.currentUsage.monthly.toLocaleString()} / ${formatRateLimit(rateLimitsConfig.currentLimits.monthly)}`
4439
+ },
4440
+ {
4441
+ label: labels.labelDailyUsage,
4442
+ value: `${rateLimitsConfig.currentUsage.daily.toLocaleString()} / ${formatRateLimit(rateLimitsConfig.currentLimits.daily)}`
4443
+ }
4444
+ ] : []
4445
+ ]
4446
+ } : void 0,
4447
+ inactiveContent: !(currentSubscription == null ? void 0 : currentSubscription.isActive) ? {
4448
+ title: labels.statusInactive,
4449
+ message: labels.statusInactiveMessage
4450
+ } : void 0
4451
+ },
4452
+ aboveProducts: !isLoading && products.length > 0 ? /* @__PURE__ */ jsx("div", { className: "flex justify-center mb-6", children: /* @__PURE__ */ jsx(
4453
+ Yt,
4454
+ {
4455
+ options: billingPeriodOptions,
4456
+ value: billingPeriod,
4457
+ onChange: handlePeriodChange
4458
+ }
4459
+ ) }) : null,
4460
+ primaryAction: {
4461
+ label: isPurchasing ? labels.buttonPurchasing : labels.buttonSubscribe,
4462
+ onClick: handlePurchase,
4463
+ disabled: !selectedPlan || isPurchasing || isRestoring,
4464
+ loading: isPurchasing
4465
+ },
4466
+ secondaryAction: {
4467
+ label: isRestoring ? labels.buttonRestoring : labels.buttonRestore,
4468
+ onClick: handleRestore,
4469
+ disabled: isPurchasing || isRestoring,
4470
+ loading: isRestoring
4471
+ },
4472
+ children: isLoading ? /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center py-12", children: /* @__PURE__ */ jsx("div", { className: "animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600" }) }) : products.length === 0 ? /* @__PURE__ */ jsx("div", { className: "text-center py-12 text-theme-text-secondary", children: labels.noProducts }) : filteredProducts.length === 0 ? /* @__PURE__ */ jsx("div", { className: "text-center py-12 text-theme-text-secondary", children: labels.noProductsForPeriod }) : /* @__PURE__ */ jsxs(Fragment, { children: [
4473
+ /* @__PURE__ */ jsx(
4474
+ _t,
4475
+ {
4476
+ id: "free",
4477
+ title: labels.freeTierTitle,
4478
+ price: labels.freeTierPrice,
4479
+ periodLabel: labels.periodMonth,
4480
+ features: getFreeTierFeatures(),
4481
+ isSelected: !(currentSubscription == null ? void 0 : currentSubscription.isActive) && selectedPlan === null,
4482
+ onSelect: () => setSelectedPlan(null),
4483
+ topBadge: !(currentSubscription == null ? void 0 : currentSubscription.isActive) ? {
4484
+ text: labels.currentPlanBadge,
4485
+ color: "green"
4486
+ } : void 0,
4487
+ disabled: isPurchasing || isRestoring,
4488
+ hideSelectionIndicator: true
4489
+ },
4490
+ "free"
4491
+ ),
4492
+ filteredProducts.map((product) => {
4493
+ var _a;
4494
+ return /* @__PURE__ */ jsx(
4495
+ _t,
4496
+ {
4497
+ id: product.identifier,
4498
+ title: product.title,
4499
+ price: product.priceString,
4500
+ periodLabel: getPeriodLabel(product.period),
4501
+ features: getProductFeatures(product.identifier),
4502
+ isSelected: selectedPlan === product.identifier,
4503
+ onSelect: () => setSelectedPlan(product.identifier),
4504
+ isBestValue: product.identifier.includes("pro"),
4505
+ discountBadge: ((_a = product.period) == null ? void 0 : _a.includes("Y")) ? (() => {
4506
+ const savings = getYearlySavingsPercent(
4507
+ product.identifier
4508
+ );
4509
+ return savings && savings > 0 ? {
4510
+ text: formatters.formatSavePercent(savings),
4511
+ isBestValue: true
4512
+ } : void 0;
4513
+ })() : void 0,
4514
+ introPriceNote: product.freeTrialPeriod ? getTrialLabel(product.freeTrialPeriod) : product.introPrice ? formatters.formatIntroNote(product.introPrice) : void 0,
4515
+ disabled: isPurchasing || isRestoring
4516
+ },
4517
+ product.identifier
4518
+ );
4519
+ })
4520
+ ] })
4521
+ }
4522
+ );
4523
+ }
4524
+ function AppPricingPage({
4525
+ products,
4526
+ isAuthenticated,
4527
+ hasActiveSubscription,
4528
+ currentProductIdentifier,
4529
+ labels,
4530
+ formatters,
4531
+ entitlementMap,
4532
+ entitlementLevels,
4533
+ onPlanClick,
4534
+ onFreePlanClick,
4535
+ faqItems,
4536
+ className
4537
+ }) {
4538
+ const [billingPeriod, setBillingPeriod] = useState("monthly");
4539
+ const getProductLevel = useCallback(
4540
+ (productId) => {
4541
+ const entitlement = entitlementMap[productId];
4542
+ if (!entitlement) return 0;
4543
+ return entitlementLevels[entitlement] ?? 0;
4544
+ },
4545
+ [entitlementMap, entitlementLevels]
4546
+ );
4547
+ const currentLevel = currentProductIdentifier ? getProductLevel(currentProductIdentifier) : 0;
4548
+ const filteredProducts = products.filter((product) => {
4549
+ if (!product.period) return false;
4550
+ const isYearly = product.period.includes("Y") || product.period.includes("year");
4551
+ return billingPeriod === "yearly" ? isYearly : !isYearly;
4552
+ }).sort((a, b2) => parseFloat(a.price) - parseFloat(b2.price));
4553
+ const getPeriodLabel = useCallback(
4554
+ (period) => {
4555
+ if (!period) return "";
4556
+ if (period.includes("Y") || period.includes("year"))
4557
+ return labels.periodYear;
4558
+ if (period.includes("M") || period.includes("month"))
4559
+ return labels.periodMonth;
4560
+ if (period.includes("W") || period.includes("week"))
4561
+ return labels.periodWeek;
4562
+ return "";
4563
+ },
4564
+ [labels]
4565
+ );
4566
+ const getYearlySavingsPercent = useCallback(
4567
+ (yearlyPackageId) => {
4568
+ var _a;
4569
+ const yearlyEntitlement = entitlementMap[yearlyPackageId];
4570
+ if (!yearlyEntitlement) return void 0;
4571
+ const yearlyProduct = products.find(
4572
+ (p) => p.identifier === yearlyPackageId
4573
+ );
4574
+ if (!yearlyProduct) return void 0;
4575
+ const monthlyPackageId = (_a = Object.entries(entitlementMap).find(
4576
+ ([pkgId, ent]) => ent === yearlyEntitlement && pkgId.includes("monthly")
4577
+ )) == null ? void 0 : _a[0];
4578
+ if (!monthlyPackageId) return void 0;
4579
+ const monthlyProduct = products.find(
4580
+ (p) => p.identifier === monthlyPackageId
4581
+ );
4582
+ if (!monthlyProduct) return void 0;
4583
+ const yearlyPrice = parseFloat(yearlyProduct.price);
4584
+ const monthlyPrice = parseFloat(monthlyProduct.price);
4585
+ if (monthlyPrice <= 0 || yearlyPrice <= 0) return void 0;
4586
+ const annualizedMonthly = monthlyPrice * 12;
4587
+ const savings = (annualizedMonthly - yearlyPrice) / annualizedMonthly * 100;
4588
+ return Math.round(savings);
4589
+ },
4590
+ [products, entitlementMap]
4591
+ );
4592
+ const billingPeriodOptions = [
4593
+ { value: "monthly", label: labels.billingMonthly },
4594
+ { value: "yearly", label: labels.billingYearly }
4595
+ ];
4596
+ const isCurrentPlan = useCallback(
4597
+ (productId) => {
4598
+ if (!isAuthenticated) return false;
4599
+ if (!hasActiveSubscription) return false;
4600
+ return getProductLevel(productId) === currentLevel && currentLevel > 0;
4601
+ },
4602
+ [isAuthenticated, hasActiveSubscription, getProductLevel, currentLevel]
4603
+ );
4604
+ const isUpgrade = useCallback(
4605
+ (productId) => {
4606
+ const productLevel = getProductLevel(productId);
4607
+ return productLevel > currentLevel;
4608
+ },
4609
+ [getProductLevel, currentLevel]
4610
+ );
4611
+ return /* @__PURE__ */ jsxs("div", { className, children: [
4612
+ /* @__PURE__ */ jsx("section", { className: "py-16 px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsxs("div", { className: "max-w-4xl mx-auto text-center", children: [
4613
+ /* @__PURE__ */ jsx("h1", { className: "text-4xl sm:text-5xl font-bold text-theme-text-primary mb-4", children: labels.title }),
4614
+ /* @__PURE__ */ jsx("p", { className: "text-lg text-theme-text-secondary", children: labels.subtitle })
4615
+ ] }) }),
4616
+ /* @__PURE__ */ jsx("section", { className: "pb-20 px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsxs("div", { className: "max-w-6xl mx-auto", children: [
4617
+ /* @__PURE__ */ jsx("div", { className: "flex justify-center mb-8", children: /* @__PURE__ */ jsx(
4618
+ Yt,
4619
+ {
4620
+ options: billingPeriodOptions,
4621
+ value: billingPeriod,
4622
+ onChange: setBillingPeriod
4623
+ }
4624
+ ) }),
4625
+ /* @__PURE__ */ jsxs(
4626
+ "div",
4627
+ {
4628
+ style: {
4629
+ display: "grid",
4630
+ gridTemplateColumns: "repeat(auto-fit, minmax(min(100%, 280px), 1fr))",
4631
+ gap: "1.5rem"
4632
+ },
4633
+ children: [
4634
+ /* @__PURE__ */ jsx(
4635
+ _t,
4636
+ {
4637
+ id: "free",
4638
+ title: labels.freeTierTitle,
4639
+ price: labels.freeTierPrice,
4640
+ periodLabel: labels.periodMonth,
4641
+ features: labels.freeTierFeatures,
4642
+ isSelected: false,
4643
+ onSelect: () => {
4644
+ },
4645
+ topBadge: isAuthenticated && !hasActiveSubscription ? {
4646
+ text: labels.currentPlanBadge,
4647
+ color: "green"
4648
+ } : void 0,
4649
+ ctaButton: (
4650
+ // Not logged in: show "Try it for Free"
4651
+ // Logged in on free plan: no CTA (current plan)
4652
+ // Logged in with subscription: no CTA (can't downgrade here)
4653
+ !isAuthenticated ? {
4654
+ label: labels.ctaTryFree,
4655
+ onClick: onFreePlanClick
4656
+ } : void 0
4657
+ ),
4658
+ hideSelectionIndicator: isAuthenticated
4659
+ }
4660
+ ),
4661
+ filteredProducts.map((product) => {
4662
+ var _a;
4663
+ const isCurrent = isCurrentPlan(product.identifier);
4664
+ const canUpgrade = isUpgrade(product.identifier);
4665
+ let ctaButton;
4666
+ if (!isAuthenticated) {
4667
+ ctaButton = {
4668
+ label: labels.ctaLogIn,
4669
+ onClick: () => onPlanClick(product.identifier)
4670
+ };
4671
+ } else if (isCurrent) {
4672
+ ctaButton = void 0;
4673
+ } else if (canUpgrade) {
4674
+ ctaButton = {
4675
+ label: labels.ctaUpgrade,
4676
+ onClick: () => onPlanClick(product.identifier)
4677
+ };
4678
+ }
4679
+ let topBadge;
4680
+ if (isCurrent) {
4681
+ topBadge = {
4682
+ text: labels.currentPlanBadge,
4683
+ color: "green"
4684
+ };
4685
+ } else if (product.identifier.includes("pro")) {
4686
+ topBadge = {
4687
+ text: labels.mostPopularBadge,
4688
+ color: "yellow"
4689
+ };
4690
+ }
4691
+ return /* @__PURE__ */ jsx(
4692
+ _t,
4693
+ {
4694
+ id: product.identifier,
4695
+ title: product.title,
4696
+ price: product.priceString,
4697
+ periodLabel: getPeriodLabel(product.period),
4698
+ features: formatters.getProductFeatures(product.identifier),
4699
+ isSelected: false,
4700
+ onSelect: () => {
4701
+ },
4702
+ isBestValue: product.identifier.includes("pro"),
4703
+ topBadge,
4704
+ discountBadge: ((_a = product.period) == null ? void 0 : _a.includes("Y")) ? (() => {
4705
+ const savings = getYearlySavingsPercent(
4706
+ product.identifier
4707
+ );
4708
+ return savings && savings > 0 ? {
4709
+ text: formatters.formatSavePercent(savings),
4710
+ isBestValue: true
4711
+ } : void 0;
4712
+ })() : void 0,
4713
+ ctaButton,
4714
+ hideSelectionIndicator: !ctaButton
4715
+ },
4716
+ product.identifier
4717
+ );
4718
+ })
4719
+ ]
4720
+ }
4721
+ )
4722
+ ] }) }),
4723
+ faqItems && faqItems.length > 0 && /* @__PURE__ */ jsx("section", { className: "py-20 px-4 sm:px-6 lg:px-8 bg-theme-bg-secondary", children: /* @__PURE__ */ jsxs("div", { className: "max-w-3xl mx-auto", children: [
4724
+ /* @__PURE__ */ jsx("h2", { className: "text-3xl font-bold text-theme-text-primary text-center mb-12", children: labels.faqTitle }),
4725
+ /* @__PURE__ */ jsx("div", { className: "space-y-6", children: faqItems.map((item, index) => /* @__PURE__ */ jsxs(
4726
+ "div",
4727
+ {
4728
+ className: "bg-theme-bg-primary p-6 rounded-xl border border-theme-border",
4729
+ children: [
4730
+ /* @__PURE__ */ jsx("h3", { className: "text-lg font-semibold text-theme-text-primary mb-2", children: item.question }),
4731
+ /* @__PURE__ */ jsx("p", { className: "text-theme-text-secondary", children: item.answer })
4732
+ ]
4733
+ },
4734
+ index
4735
+ )) })
4736
+ ] }) })
4737
+ ] });
4738
+ }
1007
4739
  export {
1008
4740
  AppBreadcrumbs,
1009
4741
  AppFooter,
1010
4742
  AppFooterForHomePage,
1011
4743
  AppPageLayout,
4744
+ AppPricingPage,
4745
+ AppSubscriptionsPage,
1012
4746
  AppTopBar,
1013
4747
  AppTopBarWithFirebaseAuth,
1014
4748
  AppTopBarWithWallet,