@almadar/ui 2.15.8 → 2.15.10

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.
Files changed (125) hide show
  1. package/dist/components/atoms/ContentSection.d.ts +16 -0
  2. package/dist/components/atoms/SectionHeader.d.ts +14 -0
  3. package/dist/components/atoms/StatCard.d.ts +13 -0
  4. package/dist/components/atoms/index.d.ts +3 -0
  5. package/dist/components/atoms/svg/SvgBranch.d.ts +12 -0
  6. package/dist/components/atoms/svg/SvgConnection.d.ts +13 -0
  7. package/dist/components/atoms/svg/SvgFlow.d.ts +10 -0
  8. package/dist/components/atoms/svg/SvgGrid.d.ts +14 -0
  9. package/dist/components/atoms/svg/SvgLobe.d.ts +13 -0
  10. package/dist/components/atoms/svg/SvgMesh.d.ts +12 -0
  11. package/dist/components/atoms/svg/SvgMorph.d.ts +11 -0
  12. package/dist/components/atoms/svg/SvgNode.d.ts +12 -0
  13. package/dist/components/atoms/svg/SvgPulse.d.ts +12 -0
  14. package/dist/components/atoms/svg/SvgRing.d.ts +13 -0
  15. package/dist/components/atoms/svg/SvgShield.d.ts +11 -0
  16. package/dist/components/atoms/svg/SvgStack.d.ts +13 -0
  17. package/dist/components/atoms/svg/index.d.ts +12 -0
  18. package/dist/{chunk-ACUO2BBW.js → components/index.cjs} +24764 -16677
  19. package/dist/components/index.js +37757 -889
  20. package/dist/components/molecules/AnimatedCounter.d.ts +18 -0
  21. package/dist/components/molecules/ArticleSection.d.ts +18 -0
  22. package/dist/components/molecules/CTABanner.d.ts +31 -0
  23. package/dist/components/molecules/CaseStudyCard.d.ts +24 -0
  24. package/dist/components/molecules/CodeExample.d.ts +23 -0
  25. package/dist/components/molecules/CommunityLinks.d.ts +25 -0
  26. package/dist/components/molecules/DocBreadcrumb.d.ts +20 -0
  27. package/dist/components/molecules/DocCodeBlock.d.ts +13 -0
  28. package/dist/components/molecules/DocPagination.d.ts +14 -0
  29. package/dist/components/molecules/DocSearch.d.ts +15 -0
  30. package/dist/components/molecules/DocSidebar.d.ts +24 -0
  31. package/dist/components/molecules/DocTOC.d.ts +24 -0
  32. package/dist/components/molecules/FeatureCard.d.ts +26 -0
  33. package/dist/components/molecules/FeatureGrid.d.ts +19 -0
  34. package/dist/components/molecules/GradientDivider.d.ts +14 -0
  35. package/dist/components/molecules/HeroSection.d.ts +36 -0
  36. package/dist/components/molecules/InstallBox.d.ts +16 -0
  37. package/dist/components/molecules/MarketingFooter.d.ts +27 -0
  38. package/dist/components/molecules/PricingCard.d.ts +21 -0
  39. package/dist/components/molecules/PricingGrid.d.ts +13 -0
  40. package/dist/components/molecules/PullQuote.d.ts +14 -0
  41. package/dist/components/molecules/ServiceCatalog.d.ts +19 -0
  42. package/dist/components/molecules/ShowcaseCard.d.ts +20 -0
  43. package/dist/components/molecules/SocialProof.d.ts +25 -0
  44. package/dist/components/molecules/SplitSection.d.ts +21 -0
  45. package/dist/components/molecules/StatsGrid.d.ts +17 -0
  46. package/dist/components/molecules/StepFlow.d.ts +20 -0
  47. package/dist/components/molecules/TagCloud.d.ts +18 -0
  48. package/dist/components/molecules/TeamCard.d.ts +18 -0
  49. package/dist/components/molecules/index.d.ts +19 -0
  50. package/dist/components/molecules/svg/AIGenerates.d.ts +7 -0
  51. package/dist/components/molecules/svg/ClosedCircuit.d.ts +7 -0
  52. package/dist/components/molecules/svg/CommunityOwnership.d.ts +7 -0
  53. package/dist/components/molecules/svg/CompileAnywhere.d.ts +7 -0
  54. package/dist/components/molecules/svg/ComposableModels.d.ts +7 -0
  55. package/dist/components/molecules/svg/DescribeProveDeploy.d.ts +7 -0
  56. package/dist/components/molecules/svg/DomainGrid.d.ts +7 -0
  57. package/dist/components/molecules/svg/EventBus.d.ts +7 -0
  58. package/dist/components/molecules/svg/OrbitalUnit.d.ts +7 -0
  59. package/dist/components/molecules/svg/PlanVerifyRemember.d.ts +7 -0
  60. package/dist/components/molecules/svg/ProveCorrect.d.ts +7 -0
  61. package/dist/components/molecules/svg/ServiceLayers.d.ts +7 -0
  62. package/dist/components/molecules/svg/SharedReality.d.ts +7 -0
  63. package/dist/components/molecules/svg/StandardLibrary.d.ts +7 -0
  64. package/dist/components/molecules/svg/StateMachine.d.ts +7 -0
  65. package/dist/components/molecules/svg/WorldModel.d.ts +7 -0
  66. package/dist/components/molecules/svg/index.d.ts +16 -0
  67. package/dist/components/organisms/CaseStudyOrganism.d.ts +19 -0
  68. package/dist/components/organisms/FeatureGridOrganism.d.ts +20 -0
  69. package/dist/components/organisms/HeroOrganism.d.ts +18 -0
  70. package/dist/components/organisms/PricingOrganism.d.ts +19 -0
  71. package/dist/components/organisms/ShowcaseOrganism.d.ts +20 -0
  72. package/dist/components/organisms/StatsOrganism.d.ts +17 -0
  73. package/dist/components/organisms/StepFlowOrganism.d.ts +20 -0
  74. package/dist/components/organisms/TeamOrganism.d.ts +18 -0
  75. package/dist/components/organisms/game/three/index.cjs +2525 -0
  76. package/dist/components/organisms/game/three/index.js +1795 -50
  77. package/dist/components/organisms/index.d.ts +9 -0
  78. package/dist/components/organisms/marketing-types.d.ts +87 -0
  79. package/dist/components/templates/AboutPageTemplate.d.ts +26 -0
  80. package/dist/components/templates/FeatureDetailPageTemplate.d.ts +27 -0
  81. package/dist/components/templates/LandingPageTemplate.d.ts +31 -0
  82. package/dist/components/templates/PricingPageTemplate.d.ts +26 -0
  83. package/dist/components/templates/index.d.ts +4 -0
  84. package/dist/context/index.cjs +550 -0
  85. package/dist/context/index.js +420 -6
  86. package/dist/docs/index.cjs +4015 -0
  87. package/dist/docs/index.d.cts +412 -0
  88. package/dist/docs/index.d.ts +29 -0
  89. package/dist/docs/index.js +3977 -0
  90. package/dist/hooks/index.cjs +2606 -0
  91. package/dist/hooks/index.js +2535 -8
  92. package/dist/illustrations/index.cjs +3004 -0
  93. package/dist/illustrations/index.d.cts +261 -0
  94. package/dist/illustrations/index.d.ts +35 -0
  95. package/dist/illustrations/index.js +2971 -0
  96. package/dist/{chunk-XL7WB2O5.js → lib/index.cjs} +454 -274
  97. package/dist/lib/index.js +1407 -3
  98. package/dist/locales/index.cjs +340 -0
  99. package/dist/locales/index.js +105 -2
  100. package/dist/marketing/index.cjs +4683 -0
  101. package/dist/marketing/index.d.cts +831 -0
  102. package/dist/marketing/index.d.ts +62 -0
  103. package/dist/marketing/index.js +4626 -0
  104. package/dist/providers/index.cjs +4811 -0
  105. package/dist/providers/index.js +4765 -11
  106. package/dist/{chunk-K2D5D3WK.js → renderer/index.cjs} +101 -42
  107. package/dist/renderer/index.js +1036 -2
  108. package/dist/runtime/index.cjs +4400 -0
  109. package/dist/runtime/index.js +3615 -19
  110. package/dist/{chunk-N7MVUW4R.js → stores/index.cjs} +24 -1
  111. package/dist/stores/index.js +194 -2
  112. package/dist/tsup.config.d.ts +2 -1
  113. package/package.json +27 -12
  114. package/tailwind-preset.cjs +9 -0
  115. package/themes/index.css +22 -20
  116. package/dist/chunk-3HJHHULT.js +0 -93
  117. package/dist/chunk-3JGAROCW.js +0 -149
  118. package/dist/chunk-4N3BAPDB.js +0 -1667
  119. package/dist/chunk-CDIOHSKG.js +0 -661
  120. package/dist/chunk-DKQN5FVU.js +0 -279
  121. package/dist/chunk-JJHCOO34.js +0 -375
  122. package/dist/chunk-PKBMQBKP.js +0 -5
  123. package/dist/chunk-QIABKRCN.js +0 -107
  124. package/dist/chunk-SD3KVCY6.js +0 -1465
  125. package/dist/chunk-YXZM3WCF.js +0 -222
@@ -0,0 +1,4683 @@
1
+ 'use strict';
2
+
3
+ var React5 = require('react');
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+ var LucideIcons = require('lucide-react');
6
+
7
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
+
9
+ function _interopNamespace(e) {
10
+ if (e && e.__esModule) return e;
11
+ var n = Object.create(null);
12
+ if (e) {
13
+ Object.keys(e).forEach(function (k) {
14
+ if (k !== 'default') {
15
+ var d = Object.getOwnPropertyDescriptor(e, k);
16
+ Object.defineProperty(n, k, d.get ? d : {
17
+ enumerable: true,
18
+ get: function () { return e[k]; }
19
+ });
20
+ }
21
+ });
22
+ }
23
+ n.default = e;
24
+ return Object.freeze(n);
25
+ }
26
+
27
+ var React5__default = /*#__PURE__*/_interopDefault(React5);
28
+ var LucideIcons__namespace = /*#__PURE__*/_interopNamespace(LucideIcons);
29
+
30
+ // node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs
31
+ function r(e) {
32
+ var t, f, n = "";
33
+ if ("string" == typeof e || "number" == typeof e) n += e;
34
+ else if ("object" == typeof e) if (Array.isArray(e)) {
35
+ var o = e.length;
36
+ for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
37
+ } else for (f in e) e[f] && (n && (n += " "), n += f);
38
+ return n;
39
+ }
40
+ function clsx() {
41
+ for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t);
42
+ return n;
43
+ }
44
+
45
+ // node_modules/.pnpm/tailwind-merge@2.6.1/node_modules/tailwind-merge/dist/bundle-mjs.mjs
46
+ var CLASS_PART_SEPARATOR = "-";
47
+ var createClassGroupUtils = (config) => {
48
+ const classMap = createClassMap(config);
49
+ const {
50
+ conflictingClassGroups,
51
+ conflictingClassGroupModifiers
52
+ } = config;
53
+ const getClassGroupId = (className) => {
54
+ const classParts = className.split(CLASS_PART_SEPARATOR);
55
+ if (classParts[0] === "" && classParts.length !== 1) {
56
+ classParts.shift();
57
+ }
58
+ return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);
59
+ };
60
+ const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {
61
+ const conflicts = conflictingClassGroups[classGroupId] || [];
62
+ if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {
63
+ return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]];
64
+ }
65
+ return conflicts;
66
+ };
67
+ return {
68
+ getClassGroupId,
69
+ getConflictingClassGroupIds
70
+ };
71
+ };
72
+ var getGroupRecursive = (classParts, classPartObject) => {
73
+ if (classParts.length === 0) {
74
+ return classPartObject.classGroupId;
75
+ }
76
+ const currentClassPart = classParts[0];
77
+ const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);
78
+ const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : void 0;
79
+ if (classGroupFromNextClassPart) {
80
+ return classGroupFromNextClassPart;
81
+ }
82
+ if (classPartObject.validators.length === 0) {
83
+ return void 0;
84
+ }
85
+ const classRest = classParts.join(CLASS_PART_SEPARATOR);
86
+ return classPartObject.validators.find(({
87
+ validator
88
+ }) => validator(classRest))?.classGroupId;
89
+ };
90
+ var arbitraryPropertyRegex = /^\[(.+)\]$/;
91
+ var getGroupIdForArbitraryProperty = (className) => {
92
+ if (arbitraryPropertyRegex.test(className)) {
93
+ const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];
94
+ const property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(":"));
95
+ if (property) {
96
+ return "arbitrary.." + property;
97
+ }
98
+ }
99
+ };
100
+ var createClassMap = (config) => {
101
+ const {
102
+ theme,
103
+ prefix
104
+ } = config;
105
+ const classMap = {
106
+ nextPart: /* @__PURE__ */ new Map(),
107
+ validators: []
108
+ };
109
+ const prefixedClassGroupEntries = getPrefixedClassGroupEntries(Object.entries(config.classGroups), prefix);
110
+ prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => {
111
+ processClassesRecursively(classGroup, classMap, classGroupId, theme);
112
+ });
113
+ return classMap;
114
+ };
115
+ var processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {
116
+ classGroup.forEach((classDefinition) => {
117
+ if (typeof classDefinition === "string") {
118
+ const classPartObjectToEdit = classDefinition === "" ? classPartObject : getPart(classPartObject, classDefinition);
119
+ classPartObjectToEdit.classGroupId = classGroupId;
120
+ return;
121
+ }
122
+ if (typeof classDefinition === "function") {
123
+ if (isThemeGetter(classDefinition)) {
124
+ processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);
125
+ return;
126
+ }
127
+ classPartObject.validators.push({
128
+ validator: classDefinition,
129
+ classGroupId
130
+ });
131
+ return;
132
+ }
133
+ Object.entries(classDefinition).forEach(([key, classGroup2]) => {
134
+ processClassesRecursively(classGroup2, getPart(classPartObject, key), classGroupId, theme);
135
+ });
136
+ });
137
+ };
138
+ var getPart = (classPartObject, path) => {
139
+ let currentClassPartObject = classPartObject;
140
+ path.split(CLASS_PART_SEPARATOR).forEach((pathPart) => {
141
+ if (!currentClassPartObject.nextPart.has(pathPart)) {
142
+ currentClassPartObject.nextPart.set(pathPart, {
143
+ nextPart: /* @__PURE__ */ new Map(),
144
+ validators: []
145
+ });
146
+ }
147
+ currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);
148
+ });
149
+ return currentClassPartObject;
150
+ };
151
+ var isThemeGetter = (func) => func.isThemeGetter;
152
+ var getPrefixedClassGroupEntries = (classGroupEntries, prefix) => {
153
+ if (!prefix) {
154
+ return classGroupEntries;
155
+ }
156
+ return classGroupEntries.map(([classGroupId, classGroup]) => {
157
+ const prefixedClassGroup = classGroup.map((classDefinition) => {
158
+ if (typeof classDefinition === "string") {
159
+ return prefix + classDefinition;
160
+ }
161
+ if (typeof classDefinition === "object") {
162
+ return Object.fromEntries(Object.entries(classDefinition).map(([key, value]) => [prefix + key, value]));
163
+ }
164
+ return classDefinition;
165
+ });
166
+ return [classGroupId, prefixedClassGroup];
167
+ });
168
+ };
169
+ var createLruCache = (maxCacheSize) => {
170
+ if (maxCacheSize < 1) {
171
+ return {
172
+ get: () => void 0,
173
+ set: () => {
174
+ }
175
+ };
176
+ }
177
+ let cacheSize = 0;
178
+ let cache = /* @__PURE__ */ new Map();
179
+ let previousCache = /* @__PURE__ */ new Map();
180
+ const update = (key, value) => {
181
+ cache.set(key, value);
182
+ cacheSize++;
183
+ if (cacheSize > maxCacheSize) {
184
+ cacheSize = 0;
185
+ previousCache = cache;
186
+ cache = /* @__PURE__ */ new Map();
187
+ }
188
+ };
189
+ return {
190
+ get(key) {
191
+ let value = cache.get(key);
192
+ if (value !== void 0) {
193
+ return value;
194
+ }
195
+ if ((value = previousCache.get(key)) !== void 0) {
196
+ update(key, value);
197
+ return value;
198
+ }
199
+ },
200
+ set(key, value) {
201
+ if (cache.has(key)) {
202
+ cache.set(key, value);
203
+ } else {
204
+ update(key, value);
205
+ }
206
+ }
207
+ };
208
+ };
209
+ var IMPORTANT_MODIFIER = "!";
210
+ var createParseClassName = (config) => {
211
+ const {
212
+ separator,
213
+ experimentalParseClassName
214
+ } = config;
215
+ const isSeparatorSingleCharacter = separator.length === 1;
216
+ const firstSeparatorCharacter = separator[0];
217
+ const separatorLength = separator.length;
218
+ const parseClassName = (className) => {
219
+ const modifiers = [];
220
+ let bracketDepth = 0;
221
+ let modifierStart = 0;
222
+ let postfixModifierPosition;
223
+ for (let index = 0; index < className.length; index++) {
224
+ let currentCharacter = className[index];
225
+ if (bracketDepth === 0) {
226
+ if (currentCharacter === firstSeparatorCharacter && (isSeparatorSingleCharacter || className.slice(index, index + separatorLength) === separator)) {
227
+ modifiers.push(className.slice(modifierStart, index));
228
+ modifierStart = index + separatorLength;
229
+ continue;
230
+ }
231
+ if (currentCharacter === "/") {
232
+ postfixModifierPosition = index;
233
+ continue;
234
+ }
235
+ }
236
+ if (currentCharacter === "[") {
237
+ bracketDepth++;
238
+ } else if (currentCharacter === "]") {
239
+ bracketDepth--;
240
+ }
241
+ }
242
+ const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);
243
+ const hasImportantModifier = baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER);
244
+ const baseClassName = hasImportantModifier ? baseClassNameWithImportantModifier.substring(1) : baseClassNameWithImportantModifier;
245
+ const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : void 0;
246
+ return {
247
+ modifiers,
248
+ hasImportantModifier,
249
+ baseClassName,
250
+ maybePostfixModifierPosition
251
+ };
252
+ };
253
+ if (experimentalParseClassName) {
254
+ return (className) => experimentalParseClassName({
255
+ className,
256
+ parseClassName
257
+ });
258
+ }
259
+ return parseClassName;
260
+ };
261
+ var sortModifiers = (modifiers) => {
262
+ if (modifiers.length <= 1) {
263
+ return modifiers;
264
+ }
265
+ const sortedModifiers = [];
266
+ let unsortedModifiers = [];
267
+ modifiers.forEach((modifier) => {
268
+ const isArbitraryVariant = modifier[0] === "[";
269
+ if (isArbitraryVariant) {
270
+ sortedModifiers.push(...unsortedModifiers.sort(), modifier);
271
+ unsortedModifiers = [];
272
+ } else {
273
+ unsortedModifiers.push(modifier);
274
+ }
275
+ });
276
+ sortedModifiers.push(...unsortedModifiers.sort());
277
+ return sortedModifiers;
278
+ };
279
+ var createConfigUtils = (config) => ({
280
+ cache: createLruCache(config.cacheSize),
281
+ parseClassName: createParseClassName(config),
282
+ ...createClassGroupUtils(config)
283
+ });
284
+ var SPLIT_CLASSES_REGEX = /\s+/;
285
+ var mergeClassList = (classList, configUtils) => {
286
+ const {
287
+ parseClassName,
288
+ getClassGroupId,
289
+ getConflictingClassGroupIds
290
+ } = configUtils;
291
+ const classGroupsInConflict = [];
292
+ const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);
293
+ let result = "";
294
+ for (let index = classNames.length - 1; index >= 0; index -= 1) {
295
+ const originalClassName = classNames[index];
296
+ const {
297
+ modifiers,
298
+ hasImportantModifier,
299
+ baseClassName,
300
+ maybePostfixModifierPosition
301
+ } = parseClassName(originalClassName);
302
+ let hasPostfixModifier = Boolean(maybePostfixModifierPosition);
303
+ let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);
304
+ if (!classGroupId) {
305
+ if (!hasPostfixModifier) {
306
+ result = originalClassName + (result.length > 0 ? " " + result : result);
307
+ continue;
308
+ }
309
+ classGroupId = getClassGroupId(baseClassName);
310
+ if (!classGroupId) {
311
+ result = originalClassName + (result.length > 0 ? " " + result : result);
312
+ continue;
313
+ }
314
+ hasPostfixModifier = false;
315
+ }
316
+ const variantModifier = sortModifiers(modifiers).join(":");
317
+ const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;
318
+ const classId = modifierId + classGroupId;
319
+ if (classGroupsInConflict.includes(classId)) {
320
+ continue;
321
+ }
322
+ classGroupsInConflict.push(classId);
323
+ const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);
324
+ for (let i = 0; i < conflictGroups.length; ++i) {
325
+ const group = conflictGroups[i];
326
+ classGroupsInConflict.push(modifierId + group);
327
+ }
328
+ result = originalClassName + (result.length > 0 ? " " + result : result);
329
+ }
330
+ return result;
331
+ };
332
+ function twJoin() {
333
+ let index = 0;
334
+ let argument;
335
+ let resolvedValue;
336
+ let string = "";
337
+ while (index < arguments.length) {
338
+ if (argument = arguments[index++]) {
339
+ if (resolvedValue = toValue(argument)) {
340
+ string && (string += " ");
341
+ string += resolvedValue;
342
+ }
343
+ }
344
+ }
345
+ return string;
346
+ }
347
+ var toValue = (mix) => {
348
+ if (typeof mix === "string") {
349
+ return mix;
350
+ }
351
+ let resolvedValue;
352
+ let string = "";
353
+ for (let k = 0; k < mix.length; k++) {
354
+ if (mix[k]) {
355
+ if (resolvedValue = toValue(mix[k])) {
356
+ string && (string += " ");
357
+ string += resolvedValue;
358
+ }
359
+ }
360
+ }
361
+ return string;
362
+ };
363
+ function createTailwindMerge(createConfigFirst, ...createConfigRest) {
364
+ let configUtils;
365
+ let cacheGet;
366
+ let cacheSet;
367
+ let functionToCall = initTailwindMerge;
368
+ function initTailwindMerge(classList) {
369
+ const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());
370
+ configUtils = createConfigUtils(config);
371
+ cacheGet = configUtils.cache.get;
372
+ cacheSet = configUtils.cache.set;
373
+ functionToCall = tailwindMerge;
374
+ return tailwindMerge(classList);
375
+ }
376
+ function tailwindMerge(classList) {
377
+ const cachedResult = cacheGet(classList);
378
+ if (cachedResult) {
379
+ return cachedResult;
380
+ }
381
+ const result = mergeClassList(classList, configUtils);
382
+ cacheSet(classList, result);
383
+ return result;
384
+ }
385
+ return function callTailwindMerge() {
386
+ return functionToCall(twJoin.apply(null, arguments));
387
+ };
388
+ }
389
+ var fromTheme = (key) => {
390
+ const themeGetter = (theme) => theme[key] || [];
391
+ themeGetter.isThemeGetter = true;
392
+ return themeGetter;
393
+ };
394
+ var arbitraryValueRegex = /^\[(?:([a-z-]+):)?(.+)\]$/i;
395
+ var fractionRegex = /^\d+\/\d+$/;
396
+ var stringLengths = /* @__PURE__ */ new Set(["px", "full", "screen"]);
397
+ var tshirtUnitRegex = /^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/;
398
+ var lengthUnitRegex = /\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$/;
399
+ var colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/;
400
+ var shadowRegex = /^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/;
401
+ var imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/;
402
+ var isLength = (value) => isNumber(value) || stringLengths.has(value) || fractionRegex.test(value);
403
+ var isArbitraryLength = (value) => getIsArbitraryValue(value, "length", isLengthOnly);
404
+ var isNumber = (value) => Boolean(value) && !Number.isNaN(Number(value));
405
+ var isArbitraryNumber = (value) => getIsArbitraryValue(value, "number", isNumber);
406
+ var isInteger = (value) => Boolean(value) && Number.isInteger(Number(value));
407
+ var isPercent = (value) => value.endsWith("%") && isNumber(value.slice(0, -1));
408
+ var isArbitraryValue = (value) => arbitraryValueRegex.test(value);
409
+ var isTshirtSize = (value) => tshirtUnitRegex.test(value);
410
+ var sizeLabels = /* @__PURE__ */ new Set(["length", "size", "percentage"]);
411
+ var isArbitrarySize = (value) => getIsArbitraryValue(value, sizeLabels, isNever);
412
+ var isArbitraryPosition = (value) => getIsArbitraryValue(value, "position", isNever);
413
+ var imageLabels = /* @__PURE__ */ new Set(["image", "url"]);
414
+ var isArbitraryImage = (value) => getIsArbitraryValue(value, imageLabels, isImage);
415
+ var isArbitraryShadow = (value) => getIsArbitraryValue(value, "", isShadow);
416
+ var isAny = () => true;
417
+ var getIsArbitraryValue = (value, label, testValue) => {
418
+ const result = arbitraryValueRegex.exec(value);
419
+ if (result) {
420
+ if (result[1]) {
421
+ return typeof label === "string" ? result[1] === label : label.has(result[1]);
422
+ }
423
+ return testValue(result[2]);
424
+ }
425
+ return false;
426
+ };
427
+ var isLengthOnly = (value) => (
428
+ // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.
429
+ // For example, `hsl(0 0% 0%)` would be classified as a length without this check.
430
+ // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.
431
+ lengthUnitRegex.test(value) && !colorFunctionRegex.test(value)
432
+ );
433
+ var isNever = () => false;
434
+ var isShadow = (value) => shadowRegex.test(value);
435
+ var isImage = (value) => imageRegex.test(value);
436
+ var getDefaultConfig = () => {
437
+ const colors = fromTheme("colors");
438
+ const spacing = fromTheme("spacing");
439
+ const blur = fromTheme("blur");
440
+ const brightness = fromTheme("brightness");
441
+ const borderColor = fromTheme("borderColor");
442
+ const borderRadius = fromTheme("borderRadius");
443
+ const borderSpacing = fromTheme("borderSpacing");
444
+ const borderWidth = fromTheme("borderWidth");
445
+ const contrast = fromTheme("contrast");
446
+ const grayscale = fromTheme("grayscale");
447
+ const hueRotate = fromTheme("hueRotate");
448
+ const invert = fromTheme("invert");
449
+ const gap = fromTheme("gap");
450
+ const gradientColorStops = fromTheme("gradientColorStops");
451
+ const gradientColorStopPositions = fromTheme("gradientColorStopPositions");
452
+ const inset = fromTheme("inset");
453
+ const margin = fromTheme("margin");
454
+ const opacity = fromTheme("opacity");
455
+ const padding = fromTheme("padding");
456
+ const saturate = fromTheme("saturate");
457
+ const scale = fromTheme("scale");
458
+ const sepia = fromTheme("sepia");
459
+ const skew = fromTheme("skew");
460
+ const space = fromTheme("space");
461
+ const translate = fromTheme("translate");
462
+ const getOverscroll = () => ["auto", "contain", "none"];
463
+ const getOverflow = () => ["auto", "hidden", "clip", "visible", "scroll"];
464
+ const getSpacingWithAutoAndArbitrary = () => ["auto", isArbitraryValue, spacing];
465
+ const getSpacingWithArbitrary = () => [isArbitraryValue, spacing];
466
+ const getLengthWithEmptyAndArbitrary = () => ["", isLength, isArbitraryLength];
467
+ const getNumberWithAutoAndArbitrary = () => ["auto", isNumber, isArbitraryValue];
468
+ const getPositions = () => ["bottom", "center", "left", "left-bottom", "left-top", "right", "right-bottom", "right-top", "top"];
469
+ const getLineStyles = () => ["solid", "dashed", "dotted", "double", "none"];
470
+ const getBlendModes = () => ["normal", "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity"];
471
+ const getAlign = () => ["start", "end", "center", "between", "around", "evenly", "stretch"];
472
+ const getZeroAndEmpty = () => ["", "0", isArbitraryValue];
473
+ const getBreaks = () => ["auto", "avoid", "all", "avoid-page", "page", "left", "right", "column"];
474
+ const getNumberAndArbitrary = () => [isNumber, isArbitraryValue];
475
+ return {
476
+ cacheSize: 500,
477
+ separator: ":",
478
+ theme: {
479
+ colors: [isAny],
480
+ spacing: [isLength, isArbitraryLength],
481
+ blur: ["none", "", isTshirtSize, isArbitraryValue],
482
+ brightness: getNumberAndArbitrary(),
483
+ borderColor: [colors],
484
+ borderRadius: ["none", "", "full", isTshirtSize, isArbitraryValue],
485
+ borderSpacing: getSpacingWithArbitrary(),
486
+ borderWidth: getLengthWithEmptyAndArbitrary(),
487
+ contrast: getNumberAndArbitrary(),
488
+ grayscale: getZeroAndEmpty(),
489
+ hueRotate: getNumberAndArbitrary(),
490
+ invert: getZeroAndEmpty(),
491
+ gap: getSpacingWithArbitrary(),
492
+ gradientColorStops: [colors],
493
+ gradientColorStopPositions: [isPercent, isArbitraryLength],
494
+ inset: getSpacingWithAutoAndArbitrary(),
495
+ margin: getSpacingWithAutoAndArbitrary(),
496
+ opacity: getNumberAndArbitrary(),
497
+ padding: getSpacingWithArbitrary(),
498
+ saturate: getNumberAndArbitrary(),
499
+ scale: getNumberAndArbitrary(),
500
+ sepia: getZeroAndEmpty(),
501
+ skew: getNumberAndArbitrary(),
502
+ space: getSpacingWithArbitrary(),
503
+ translate: getSpacingWithArbitrary()
504
+ },
505
+ classGroups: {
506
+ // Layout
507
+ /**
508
+ * Aspect Ratio
509
+ * @see https://tailwindcss.com/docs/aspect-ratio
510
+ */
511
+ aspect: [{
512
+ aspect: ["auto", "square", "video", isArbitraryValue]
513
+ }],
514
+ /**
515
+ * Container
516
+ * @see https://tailwindcss.com/docs/container
517
+ */
518
+ container: ["container"],
519
+ /**
520
+ * Columns
521
+ * @see https://tailwindcss.com/docs/columns
522
+ */
523
+ columns: [{
524
+ columns: [isTshirtSize]
525
+ }],
526
+ /**
527
+ * Break After
528
+ * @see https://tailwindcss.com/docs/break-after
529
+ */
530
+ "break-after": [{
531
+ "break-after": getBreaks()
532
+ }],
533
+ /**
534
+ * Break Before
535
+ * @see https://tailwindcss.com/docs/break-before
536
+ */
537
+ "break-before": [{
538
+ "break-before": getBreaks()
539
+ }],
540
+ /**
541
+ * Break Inside
542
+ * @see https://tailwindcss.com/docs/break-inside
543
+ */
544
+ "break-inside": [{
545
+ "break-inside": ["auto", "avoid", "avoid-page", "avoid-column"]
546
+ }],
547
+ /**
548
+ * Box Decoration Break
549
+ * @see https://tailwindcss.com/docs/box-decoration-break
550
+ */
551
+ "box-decoration": [{
552
+ "box-decoration": ["slice", "clone"]
553
+ }],
554
+ /**
555
+ * Box Sizing
556
+ * @see https://tailwindcss.com/docs/box-sizing
557
+ */
558
+ box: [{
559
+ box: ["border", "content"]
560
+ }],
561
+ /**
562
+ * Display
563
+ * @see https://tailwindcss.com/docs/display
564
+ */
565
+ 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"],
566
+ /**
567
+ * Floats
568
+ * @see https://tailwindcss.com/docs/float
569
+ */
570
+ float: [{
571
+ float: ["right", "left", "none", "start", "end"]
572
+ }],
573
+ /**
574
+ * Clear
575
+ * @see https://tailwindcss.com/docs/clear
576
+ */
577
+ clear: [{
578
+ clear: ["left", "right", "both", "none", "start", "end"]
579
+ }],
580
+ /**
581
+ * Isolation
582
+ * @see https://tailwindcss.com/docs/isolation
583
+ */
584
+ isolation: ["isolate", "isolation-auto"],
585
+ /**
586
+ * Object Fit
587
+ * @see https://tailwindcss.com/docs/object-fit
588
+ */
589
+ "object-fit": [{
590
+ object: ["contain", "cover", "fill", "none", "scale-down"]
591
+ }],
592
+ /**
593
+ * Object Position
594
+ * @see https://tailwindcss.com/docs/object-position
595
+ */
596
+ "object-position": [{
597
+ object: [...getPositions(), isArbitraryValue]
598
+ }],
599
+ /**
600
+ * Overflow
601
+ * @see https://tailwindcss.com/docs/overflow
602
+ */
603
+ overflow: [{
604
+ overflow: getOverflow()
605
+ }],
606
+ /**
607
+ * Overflow X
608
+ * @see https://tailwindcss.com/docs/overflow
609
+ */
610
+ "overflow-x": [{
611
+ "overflow-x": getOverflow()
612
+ }],
613
+ /**
614
+ * Overflow Y
615
+ * @see https://tailwindcss.com/docs/overflow
616
+ */
617
+ "overflow-y": [{
618
+ "overflow-y": getOverflow()
619
+ }],
620
+ /**
621
+ * Overscroll Behavior
622
+ * @see https://tailwindcss.com/docs/overscroll-behavior
623
+ */
624
+ overscroll: [{
625
+ overscroll: getOverscroll()
626
+ }],
627
+ /**
628
+ * Overscroll Behavior X
629
+ * @see https://tailwindcss.com/docs/overscroll-behavior
630
+ */
631
+ "overscroll-x": [{
632
+ "overscroll-x": getOverscroll()
633
+ }],
634
+ /**
635
+ * Overscroll Behavior Y
636
+ * @see https://tailwindcss.com/docs/overscroll-behavior
637
+ */
638
+ "overscroll-y": [{
639
+ "overscroll-y": getOverscroll()
640
+ }],
641
+ /**
642
+ * Position
643
+ * @see https://tailwindcss.com/docs/position
644
+ */
645
+ position: ["static", "fixed", "absolute", "relative", "sticky"],
646
+ /**
647
+ * Top / Right / Bottom / Left
648
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
649
+ */
650
+ inset: [{
651
+ inset: [inset]
652
+ }],
653
+ /**
654
+ * Right / Left
655
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
656
+ */
657
+ "inset-x": [{
658
+ "inset-x": [inset]
659
+ }],
660
+ /**
661
+ * Top / Bottom
662
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
663
+ */
664
+ "inset-y": [{
665
+ "inset-y": [inset]
666
+ }],
667
+ /**
668
+ * Start
669
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
670
+ */
671
+ start: [{
672
+ start: [inset]
673
+ }],
674
+ /**
675
+ * End
676
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
677
+ */
678
+ end: [{
679
+ end: [inset]
680
+ }],
681
+ /**
682
+ * Top
683
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
684
+ */
685
+ top: [{
686
+ top: [inset]
687
+ }],
688
+ /**
689
+ * Right
690
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
691
+ */
692
+ right: [{
693
+ right: [inset]
694
+ }],
695
+ /**
696
+ * Bottom
697
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
698
+ */
699
+ bottom: [{
700
+ bottom: [inset]
701
+ }],
702
+ /**
703
+ * Left
704
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
705
+ */
706
+ left: [{
707
+ left: [inset]
708
+ }],
709
+ /**
710
+ * Visibility
711
+ * @see https://tailwindcss.com/docs/visibility
712
+ */
713
+ visibility: ["visible", "invisible", "collapse"],
714
+ /**
715
+ * Z-Index
716
+ * @see https://tailwindcss.com/docs/z-index
717
+ */
718
+ z: [{
719
+ z: ["auto", isInteger, isArbitraryValue]
720
+ }],
721
+ // Flexbox and Grid
722
+ /**
723
+ * Flex Basis
724
+ * @see https://tailwindcss.com/docs/flex-basis
725
+ */
726
+ basis: [{
727
+ basis: getSpacingWithAutoAndArbitrary()
728
+ }],
729
+ /**
730
+ * Flex Direction
731
+ * @see https://tailwindcss.com/docs/flex-direction
732
+ */
733
+ "flex-direction": [{
734
+ flex: ["row", "row-reverse", "col", "col-reverse"]
735
+ }],
736
+ /**
737
+ * Flex Wrap
738
+ * @see https://tailwindcss.com/docs/flex-wrap
739
+ */
740
+ "flex-wrap": [{
741
+ flex: ["wrap", "wrap-reverse", "nowrap"]
742
+ }],
743
+ /**
744
+ * Flex
745
+ * @see https://tailwindcss.com/docs/flex
746
+ */
747
+ flex: [{
748
+ flex: ["1", "auto", "initial", "none", isArbitraryValue]
749
+ }],
750
+ /**
751
+ * Flex Grow
752
+ * @see https://tailwindcss.com/docs/flex-grow
753
+ */
754
+ grow: [{
755
+ grow: getZeroAndEmpty()
756
+ }],
757
+ /**
758
+ * Flex Shrink
759
+ * @see https://tailwindcss.com/docs/flex-shrink
760
+ */
761
+ shrink: [{
762
+ shrink: getZeroAndEmpty()
763
+ }],
764
+ /**
765
+ * Order
766
+ * @see https://tailwindcss.com/docs/order
767
+ */
768
+ order: [{
769
+ order: ["first", "last", "none", isInteger, isArbitraryValue]
770
+ }],
771
+ /**
772
+ * Grid Template Columns
773
+ * @see https://tailwindcss.com/docs/grid-template-columns
774
+ */
775
+ "grid-cols": [{
776
+ "grid-cols": [isAny]
777
+ }],
778
+ /**
779
+ * Grid Column Start / End
780
+ * @see https://tailwindcss.com/docs/grid-column
781
+ */
782
+ "col-start-end": [{
783
+ col: ["auto", {
784
+ span: ["full", isInteger, isArbitraryValue]
785
+ }, isArbitraryValue]
786
+ }],
787
+ /**
788
+ * Grid Column Start
789
+ * @see https://tailwindcss.com/docs/grid-column
790
+ */
791
+ "col-start": [{
792
+ "col-start": getNumberWithAutoAndArbitrary()
793
+ }],
794
+ /**
795
+ * Grid Column End
796
+ * @see https://tailwindcss.com/docs/grid-column
797
+ */
798
+ "col-end": [{
799
+ "col-end": getNumberWithAutoAndArbitrary()
800
+ }],
801
+ /**
802
+ * Grid Template Rows
803
+ * @see https://tailwindcss.com/docs/grid-template-rows
804
+ */
805
+ "grid-rows": [{
806
+ "grid-rows": [isAny]
807
+ }],
808
+ /**
809
+ * Grid Row Start / End
810
+ * @see https://tailwindcss.com/docs/grid-row
811
+ */
812
+ "row-start-end": [{
813
+ row: ["auto", {
814
+ span: [isInteger, isArbitraryValue]
815
+ }, isArbitraryValue]
816
+ }],
817
+ /**
818
+ * Grid Row Start
819
+ * @see https://tailwindcss.com/docs/grid-row
820
+ */
821
+ "row-start": [{
822
+ "row-start": getNumberWithAutoAndArbitrary()
823
+ }],
824
+ /**
825
+ * Grid Row End
826
+ * @see https://tailwindcss.com/docs/grid-row
827
+ */
828
+ "row-end": [{
829
+ "row-end": getNumberWithAutoAndArbitrary()
830
+ }],
831
+ /**
832
+ * Grid Auto Flow
833
+ * @see https://tailwindcss.com/docs/grid-auto-flow
834
+ */
835
+ "grid-flow": [{
836
+ "grid-flow": ["row", "col", "dense", "row-dense", "col-dense"]
837
+ }],
838
+ /**
839
+ * Grid Auto Columns
840
+ * @see https://tailwindcss.com/docs/grid-auto-columns
841
+ */
842
+ "auto-cols": [{
843
+ "auto-cols": ["auto", "min", "max", "fr", isArbitraryValue]
844
+ }],
845
+ /**
846
+ * Grid Auto Rows
847
+ * @see https://tailwindcss.com/docs/grid-auto-rows
848
+ */
849
+ "auto-rows": [{
850
+ "auto-rows": ["auto", "min", "max", "fr", isArbitraryValue]
851
+ }],
852
+ /**
853
+ * Gap
854
+ * @see https://tailwindcss.com/docs/gap
855
+ */
856
+ gap: [{
857
+ gap: [gap]
858
+ }],
859
+ /**
860
+ * Gap X
861
+ * @see https://tailwindcss.com/docs/gap
862
+ */
863
+ "gap-x": [{
864
+ "gap-x": [gap]
865
+ }],
866
+ /**
867
+ * Gap Y
868
+ * @see https://tailwindcss.com/docs/gap
869
+ */
870
+ "gap-y": [{
871
+ "gap-y": [gap]
872
+ }],
873
+ /**
874
+ * Justify Content
875
+ * @see https://tailwindcss.com/docs/justify-content
876
+ */
877
+ "justify-content": [{
878
+ justify: ["normal", ...getAlign()]
879
+ }],
880
+ /**
881
+ * Justify Items
882
+ * @see https://tailwindcss.com/docs/justify-items
883
+ */
884
+ "justify-items": [{
885
+ "justify-items": ["start", "end", "center", "stretch"]
886
+ }],
887
+ /**
888
+ * Justify Self
889
+ * @see https://tailwindcss.com/docs/justify-self
890
+ */
891
+ "justify-self": [{
892
+ "justify-self": ["auto", "start", "end", "center", "stretch"]
893
+ }],
894
+ /**
895
+ * Align Content
896
+ * @see https://tailwindcss.com/docs/align-content
897
+ */
898
+ "align-content": [{
899
+ content: ["normal", ...getAlign(), "baseline"]
900
+ }],
901
+ /**
902
+ * Align Items
903
+ * @see https://tailwindcss.com/docs/align-items
904
+ */
905
+ "align-items": [{
906
+ items: ["start", "end", "center", "baseline", "stretch"]
907
+ }],
908
+ /**
909
+ * Align Self
910
+ * @see https://tailwindcss.com/docs/align-self
911
+ */
912
+ "align-self": [{
913
+ self: ["auto", "start", "end", "center", "stretch", "baseline"]
914
+ }],
915
+ /**
916
+ * Place Content
917
+ * @see https://tailwindcss.com/docs/place-content
918
+ */
919
+ "place-content": [{
920
+ "place-content": [...getAlign(), "baseline"]
921
+ }],
922
+ /**
923
+ * Place Items
924
+ * @see https://tailwindcss.com/docs/place-items
925
+ */
926
+ "place-items": [{
927
+ "place-items": ["start", "end", "center", "baseline", "stretch"]
928
+ }],
929
+ /**
930
+ * Place Self
931
+ * @see https://tailwindcss.com/docs/place-self
932
+ */
933
+ "place-self": [{
934
+ "place-self": ["auto", "start", "end", "center", "stretch"]
935
+ }],
936
+ // Spacing
937
+ /**
938
+ * Padding
939
+ * @see https://tailwindcss.com/docs/padding
940
+ */
941
+ p: [{
942
+ p: [padding]
943
+ }],
944
+ /**
945
+ * Padding X
946
+ * @see https://tailwindcss.com/docs/padding
947
+ */
948
+ px: [{
949
+ px: [padding]
950
+ }],
951
+ /**
952
+ * Padding Y
953
+ * @see https://tailwindcss.com/docs/padding
954
+ */
955
+ py: [{
956
+ py: [padding]
957
+ }],
958
+ /**
959
+ * Padding Start
960
+ * @see https://tailwindcss.com/docs/padding
961
+ */
962
+ ps: [{
963
+ ps: [padding]
964
+ }],
965
+ /**
966
+ * Padding End
967
+ * @see https://tailwindcss.com/docs/padding
968
+ */
969
+ pe: [{
970
+ pe: [padding]
971
+ }],
972
+ /**
973
+ * Padding Top
974
+ * @see https://tailwindcss.com/docs/padding
975
+ */
976
+ pt: [{
977
+ pt: [padding]
978
+ }],
979
+ /**
980
+ * Padding Right
981
+ * @see https://tailwindcss.com/docs/padding
982
+ */
983
+ pr: [{
984
+ pr: [padding]
985
+ }],
986
+ /**
987
+ * Padding Bottom
988
+ * @see https://tailwindcss.com/docs/padding
989
+ */
990
+ pb: [{
991
+ pb: [padding]
992
+ }],
993
+ /**
994
+ * Padding Left
995
+ * @see https://tailwindcss.com/docs/padding
996
+ */
997
+ pl: [{
998
+ pl: [padding]
999
+ }],
1000
+ /**
1001
+ * Margin
1002
+ * @see https://tailwindcss.com/docs/margin
1003
+ */
1004
+ m: [{
1005
+ m: [margin]
1006
+ }],
1007
+ /**
1008
+ * Margin X
1009
+ * @see https://tailwindcss.com/docs/margin
1010
+ */
1011
+ mx: [{
1012
+ mx: [margin]
1013
+ }],
1014
+ /**
1015
+ * Margin Y
1016
+ * @see https://tailwindcss.com/docs/margin
1017
+ */
1018
+ my: [{
1019
+ my: [margin]
1020
+ }],
1021
+ /**
1022
+ * Margin Start
1023
+ * @see https://tailwindcss.com/docs/margin
1024
+ */
1025
+ ms: [{
1026
+ ms: [margin]
1027
+ }],
1028
+ /**
1029
+ * Margin End
1030
+ * @see https://tailwindcss.com/docs/margin
1031
+ */
1032
+ me: [{
1033
+ me: [margin]
1034
+ }],
1035
+ /**
1036
+ * Margin Top
1037
+ * @see https://tailwindcss.com/docs/margin
1038
+ */
1039
+ mt: [{
1040
+ mt: [margin]
1041
+ }],
1042
+ /**
1043
+ * Margin Right
1044
+ * @see https://tailwindcss.com/docs/margin
1045
+ */
1046
+ mr: [{
1047
+ mr: [margin]
1048
+ }],
1049
+ /**
1050
+ * Margin Bottom
1051
+ * @see https://tailwindcss.com/docs/margin
1052
+ */
1053
+ mb: [{
1054
+ mb: [margin]
1055
+ }],
1056
+ /**
1057
+ * Margin Left
1058
+ * @see https://tailwindcss.com/docs/margin
1059
+ */
1060
+ ml: [{
1061
+ ml: [margin]
1062
+ }],
1063
+ /**
1064
+ * Space Between X
1065
+ * @see https://tailwindcss.com/docs/space
1066
+ */
1067
+ "space-x": [{
1068
+ "space-x": [space]
1069
+ }],
1070
+ /**
1071
+ * Space Between X Reverse
1072
+ * @see https://tailwindcss.com/docs/space
1073
+ */
1074
+ "space-x-reverse": ["space-x-reverse"],
1075
+ /**
1076
+ * Space Between Y
1077
+ * @see https://tailwindcss.com/docs/space
1078
+ */
1079
+ "space-y": [{
1080
+ "space-y": [space]
1081
+ }],
1082
+ /**
1083
+ * Space Between Y Reverse
1084
+ * @see https://tailwindcss.com/docs/space
1085
+ */
1086
+ "space-y-reverse": ["space-y-reverse"],
1087
+ // Sizing
1088
+ /**
1089
+ * Width
1090
+ * @see https://tailwindcss.com/docs/width
1091
+ */
1092
+ w: [{
1093
+ w: ["auto", "min", "max", "fit", "svw", "lvw", "dvw", isArbitraryValue, spacing]
1094
+ }],
1095
+ /**
1096
+ * Min-Width
1097
+ * @see https://tailwindcss.com/docs/min-width
1098
+ */
1099
+ "min-w": [{
1100
+ "min-w": [isArbitraryValue, spacing, "min", "max", "fit"]
1101
+ }],
1102
+ /**
1103
+ * Max-Width
1104
+ * @see https://tailwindcss.com/docs/max-width
1105
+ */
1106
+ "max-w": [{
1107
+ "max-w": [isArbitraryValue, spacing, "none", "full", "min", "max", "fit", "prose", {
1108
+ screen: [isTshirtSize]
1109
+ }, isTshirtSize]
1110
+ }],
1111
+ /**
1112
+ * Height
1113
+ * @see https://tailwindcss.com/docs/height
1114
+ */
1115
+ h: [{
1116
+ h: [isArbitraryValue, spacing, "auto", "min", "max", "fit", "svh", "lvh", "dvh"]
1117
+ }],
1118
+ /**
1119
+ * Min-Height
1120
+ * @see https://tailwindcss.com/docs/min-height
1121
+ */
1122
+ "min-h": [{
1123
+ "min-h": [isArbitraryValue, spacing, "min", "max", "fit", "svh", "lvh", "dvh"]
1124
+ }],
1125
+ /**
1126
+ * Max-Height
1127
+ * @see https://tailwindcss.com/docs/max-height
1128
+ */
1129
+ "max-h": [{
1130
+ "max-h": [isArbitraryValue, spacing, "min", "max", "fit", "svh", "lvh", "dvh"]
1131
+ }],
1132
+ /**
1133
+ * Size
1134
+ * @see https://tailwindcss.com/docs/size
1135
+ */
1136
+ size: [{
1137
+ size: [isArbitraryValue, spacing, "auto", "min", "max", "fit"]
1138
+ }],
1139
+ // Typography
1140
+ /**
1141
+ * Font Size
1142
+ * @see https://tailwindcss.com/docs/font-size
1143
+ */
1144
+ "font-size": [{
1145
+ text: ["base", isTshirtSize, isArbitraryLength]
1146
+ }],
1147
+ /**
1148
+ * Font Smoothing
1149
+ * @see https://tailwindcss.com/docs/font-smoothing
1150
+ */
1151
+ "font-smoothing": ["antialiased", "subpixel-antialiased"],
1152
+ /**
1153
+ * Font Style
1154
+ * @see https://tailwindcss.com/docs/font-style
1155
+ */
1156
+ "font-style": ["italic", "not-italic"],
1157
+ /**
1158
+ * Font Weight
1159
+ * @see https://tailwindcss.com/docs/font-weight
1160
+ */
1161
+ "font-weight": [{
1162
+ font: ["thin", "extralight", "light", "normal", "medium", "semibold", "bold", "extrabold", "black", isArbitraryNumber]
1163
+ }],
1164
+ /**
1165
+ * Font Family
1166
+ * @see https://tailwindcss.com/docs/font-family
1167
+ */
1168
+ "font-family": [{
1169
+ font: [isAny]
1170
+ }],
1171
+ /**
1172
+ * Font Variant Numeric
1173
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1174
+ */
1175
+ "fvn-normal": ["normal-nums"],
1176
+ /**
1177
+ * Font Variant Numeric
1178
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1179
+ */
1180
+ "fvn-ordinal": ["ordinal"],
1181
+ /**
1182
+ * Font Variant Numeric
1183
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1184
+ */
1185
+ "fvn-slashed-zero": ["slashed-zero"],
1186
+ /**
1187
+ * Font Variant Numeric
1188
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1189
+ */
1190
+ "fvn-figure": ["lining-nums", "oldstyle-nums"],
1191
+ /**
1192
+ * Font Variant Numeric
1193
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1194
+ */
1195
+ "fvn-spacing": ["proportional-nums", "tabular-nums"],
1196
+ /**
1197
+ * Font Variant Numeric
1198
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1199
+ */
1200
+ "fvn-fraction": ["diagonal-fractions", "stacked-fractions"],
1201
+ /**
1202
+ * Letter Spacing
1203
+ * @see https://tailwindcss.com/docs/letter-spacing
1204
+ */
1205
+ tracking: [{
1206
+ tracking: ["tighter", "tight", "normal", "wide", "wider", "widest", isArbitraryValue]
1207
+ }],
1208
+ /**
1209
+ * Line Clamp
1210
+ * @see https://tailwindcss.com/docs/line-clamp
1211
+ */
1212
+ "line-clamp": [{
1213
+ "line-clamp": ["none", isNumber, isArbitraryNumber]
1214
+ }],
1215
+ /**
1216
+ * Line Height
1217
+ * @see https://tailwindcss.com/docs/line-height
1218
+ */
1219
+ leading: [{
1220
+ leading: ["none", "tight", "snug", "normal", "relaxed", "loose", isLength, isArbitraryValue]
1221
+ }],
1222
+ /**
1223
+ * List Style Image
1224
+ * @see https://tailwindcss.com/docs/list-style-image
1225
+ */
1226
+ "list-image": [{
1227
+ "list-image": ["none", isArbitraryValue]
1228
+ }],
1229
+ /**
1230
+ * List Style Type
1231
+ * @see https://tailwindcss.com/docs/list-style-type
1232
+ */
1233
+ "list-style-type": [{
1234
+ list: ["none", "disc", "decimal", isArbitraryValue]
1235
+ }],
1236
+ /**
1237
+ * List Style Position
1238
+ * @see https://tailwindcss.com/docs/list-style-position
1239
+ */
1240
+ "list-style-position": [{
1241
+ list: ["inside", "outside"]
1242
+ }],
1243
+ /**
1244
+ * Placeholder Color
1245
+ * @deprecated since Tailwind CSS v3.0.0
1246
+ * @see https://tailwindcss.com/docs/placeholder-color
1247
+ */
1248
+ "placeholder-color": [{
1249
+ placeholder: [colors]
1250
+ }],
1251
+ /**
1252
+ * Placeholder Opacity
1253
+ * @see https://tailwindcss.com/docs/placeholder-opacity
1254
+ */
1255
+ "placeholder-opacity": [{
1256
+ "placeholder-opacity": [opacity]
1257
+ }],
1258
+ /**
1259
+ * Text Alignment
1260
+ * @see https://tailwindcss.com/docs/text-align
1261
+ */
1262
+ "text-alignment": [{
1263
+ text: ["left", "center", "right", "justify", "start", "end"]
1264
+ }],
1265
+ /**
1266
+ * Text Color
1267
+ * @see https://tailwindcss.com/docs/text-color
1268
+ */
1269
+ "text-color": [{
1270
+ text: [colors]
1271
+ }],
1272
+ /**
1273
+ * Text Opacity
1274
+ * @see https://tailwindcss.com/docs/text-opacity
1275
+ */
1276
+ "text-opacity": [{
1277
+ "text-opacity": [opacity]
1278
+ }],
1279
+ /**
1280
+ * Text Decoration
1281
+ * @see https://tailwindcss.com/docs/text-decoration
1282
+ */
1283
+ "text-decoration": ["underline", "overline", "line-through", "no-underline"],
1284
+ /**
1285
+ * Text Decoration Style
1286
+ * @see https://tailwindcss.com/docs/text-decoration-style
1287
+ */
1288
+ "text-decoration-style": [{
1289
+ decoration: [...getLineStyles(), "wavy"]
1290
+ }],
1291
+ /**
1292
+ * Text Decoration Thickness
1293
+ * @see https://tailwindcss.com/docs/text-decoration-thickness
1294
+ */
1295
+ "text-decoration-thickness": [{
1296
+ decoration: ["auto", "from-font", isLength, isArbitraryLength]
1297
+ }],
1298
+ /**
1299
+ * Text Underline Offset
1300
+ * @see https://tailwindcss.com/docs/text-underline-offset
1301
+ */
1302
+ "underline-offset": [{
1303
+ "underline-offset": ["auto", isLength, isArbitraryValue]
1304
+ }],
1305
+ /**
1306
+ * Text Decoration Color
1307
+ * @see https://tailwindcss.com/docs/text-decoration-color
1308
+ */
1309
+ "text-decoration-color": [{
1310
+ decoration: [colors]
1311
+ }],
1312
+ /**
1313
+ * Text Transform
1314
+ * @see https://tailwindcss.com/docs/text-transform
1315
+ */
1316
+ "text-transform": ["uppercase", "lowercase", "capitalize", "normal-case"],
1317
+ /**
1318
+ * Text Overflow
1319
+ * @see https://tailwindcss.com/docs/text-overflow
1320
+ */
1321
+ "text-overflow": ["truncate", "text-ellipsis", "text-clip"],
1322
+ /**
1323
+ * Text Wrap
1324
+ * @see https://tailwindcss.com/docs/text-wrap
1325
+ */
1326
+ "text-wrap": [{
1327
+ text: ["wrap", "nowrap", "balance", "pretty"]
1328
+ }],
1329
+ /**
1330
+ * Text Indent
1331
+ * @see https://tailwindcss.com/docs/text-indent
1332
+ */
1333
+ indent: [{
1334
+ indent: getSpacingWithArbitrary()
1335
+ }],
1336
+ /**
1337
+ * Vertical Alignment
1338
+ * @see https://tailwindcss.com/docs/vertical-align
1339
+ */
1340
+ "vertical-align": [{
1341
+ align: ["baseline", "top", "middle", "bottom", "text-top", "text-bottom", "sub", "super", isArbitraryValue]
1342
+ }],
1343
+ /**
1344
+ * Whitespace
1345
+ * @see https://tailwindcss.com/docs/whitespace
1346
+ */
1347
+ whitespace: [{
1348
+ whitespace: ["normal", "nowrap", "pre", "pre-line", "pre-wrap", "break-spaces"]
1349
+ }],
1350
+ /**
1351
+ * Word Break
1352
+ * @see https://tailwindcss.com/docs/word-break
1353
+ */
1354
+ break: [{
1355
+ break: ["normal", "words", "all", "keep"]
1356
+ }],
1357
+ /**
1358
+ * Hyphens
1359
+ * @see https://tailwindcss.com/docs/hyphens
1360
+ */
1361
+ hyphens: [{
1362
+ hyphens: ["none", "manual", "auto"]
1363
+ }],
1364
+ /**
1365
+ * Content
1366
+ * @see https://tailwindcss.com/docs/content
1367
+ */
1368
+ content: [{
1369
+ content: ["none", isArbitraryValue]
1370
+ }],
1371
+ // Backgrounds
1372
+ /**
1373
+ * Background Attachment
1374
+ * @see https://tailwindcss.com/docs/background-attachment
1375
+ */
1376
+ "bg-attachment": [{
1377
+ bg: ["fixed", "local", "scroll"]
1378
+ }],
1379
+ /**
1380
+ * Background Clip
1381
+ * @see https://tailwindcss.com/docs/background-clip
1382
+ */
1383
+ "bg-clip": [{
1384
+ "bg-clip": ["border", "padding", "content", "text"]
1385
+ }],
1386
+ /**
1387
+ * Background Opacity
1388
+ * @deprecated since Tailwind CSS v3.0.0
1389
+ * @see https://tailwindcss.com/docs/background-opacity
1390
+ */
1391
+ "bg-opacity": [{
1392
+ "bg-opacity": [opacity]
1393
+ }],
1394
+ /**
1395
+ * Background Origin
1396
+ * @see https://tailwindcss.com/docs/background-origin
1397
+ */
1398
+ "bg-origin": [{
1399
+ "bg-origin": ["border", "padding", "content"]
1400
+ }],
1401
+ /**
1402
+ * Background Position
1403
+ * @see https://tailwindcss.com/docs/background-position
1404
+ */
1405
+ "bg-position": [{
1406
+ bg: [...getPositions(), isArbitraryPosition]
1407
+ }],
1408
+ /**
1409
+ * Background Repeat
1410
+ * @see https://tailwindcss.com/docs/background-repeat
1411
+ */
1412
+ "bg-repeat": [{
1413
+ bg: ["no-repeat", {
1414
+ repeat: ["", "x", "y", "round", "space"]
1415
+ }]
1416
+ }],
1417
+ /**
1418
+ * Background Size
1419
+ * @see https://tailwindcss.com/docs/background-size
1420
+ */
1421
+ "bg-size": [{
1422
+ bg: ["auto", "cover", "contain", isArbitrarySize]
1423
+ }],
1424
+ /**
1425
+ * Background Image
1426
+ * @see https://tailwindcss.com/docs/background-image
1427
+ */
1428
+ "bg-image": [{
1429
+ bg: ["none", {
1430
+ "gradient-to": ["t", "tr", "r", "br", "b", "bl", "l", "tl"]
1431
+ }, isArbitraryImage]
1432
+ }],
1433
+ /**
1434
+ * Background Color
1435
+ * @see https://tailwindcss.com/docs/background-color
1436
+ */
1437
+ "bg-color": [{
1438
+ bg: [colors]
1439
+ }],
1440
+ /**
1441
+ * Gradient Color Stops From Position
1442
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1443
+ */
1444
+ "gradient-from-pos": [{
1445
+ from: [gradientColorStopPositions]
1446
+ }],
1447
+ /**
1448
+ * Gradient Color Stops Via Position
1449
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1450
+ */
1451
+ "gradient-via-pos": [{
1452
+ via: [gradientColorStopPositions]
1453
+ }],
1454
+ /**
1455
+ * Gradient Color Stops To Position
1456
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1457
+ */
1458
+ "gradient-to-pos": [{
1459
+ to: [gradientColorStopPositions]
1460
+ }],
1461
+ /**
1462
+ * Gradient Color Stops From
1463
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1464
+ */
1465
+ "gradient-from": [{
1466
+ from: [gradientColorStops]
1467
+ }],
1468
+ /**
1469
+ * Gradient Color Stops Via
1470
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1471
+ */
1472
+ "gradient-via": [{
1473
+ via: [gradientColorStops]
1474
+ }],
1475
+ /**
1476
+ * Gradient Color Stops To
1477
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1478
+ */
1479
+ "gradient-to": [{
1480
+ to: [gradientColorStops]
1481
+ }],
1482
+ // Borders
1483
+ /**
1484
+ * Border Radius
1485
+ * @see https://tailwindcss.com/docs/border-radius
1486
+ */
1487
+ rounded: [{
1488
+ rounded: [borderRadius]
1489
+ }],
1490
+ /**
1491
+ * Border Radius Start
1492
+ * @see https://tailwindcss.com/docs/border-radius
1493
+ */
1494
+ "rounded-s": [{
1495
+ "rounded-s": [borderRadius]
1496
+ }],
1497
+ /**
1498
+ * Border Radius End
1499
+ * @see https://tailwindcss.com/docs/border-radius
1500
+ */
1501
+ "rounded-e": [{
1502
+ "rounded-e": [borderRadius]
1503
+ }],
1504
+ /**
1505
+ * Border Radius Top
1506
+ * @see https://tailwindcss.com/docs/border-radius
1507
+ */
1508
+ "rounded-t": [{
1509
+ "rounded-t": [borderRadius]
1510
+ }],
1511
+ /**
1512
+ * Border Radius Right
1513
+ * @see https://tailwindcss.com/docs/border-radius
1514
+ */
1515
+ "rounded-r": [{
1516
+ "rounded-r": [borderRadius]
1517
+ }],
1518
+ /**
1519
+ * Border Radius Bottom
1520
+ * @see https://tailwindcss.com/docs/border-radius
1521
+ */
1522
+ "rounded-b": [{
1523
+ "rounded-b": [borderRadius]
1524
+ }],
1525
+ /**
1526
+ * Border Radius Left
1527
+ * @see https://tailwindcss.com/docs/border-radius
1528
+ */
1529
+ "rounded-l": [{
1530
+ "rounded-l": [borderRadius]
1531
+ }],
1532
+ /**
1533
+ * Border Radius Start Start
1534
+ * @see https://tailwindcss.com/docs/border-radius
1535
+ */
1536
+ "rounded-ss": [{
1537
+ "rounded-ss": [borderRadius]
1538
+ }],
1539
+ /**
1540
+ * Border Radius Start End
1541
+ * @see https://tailwindcss.com/docs/border-radius
1542
+ */
1543
+ "rounded-se": [{
1544
+ "rounded-se": [borderRadius]
1545
+ }],
1546
+ /**
1547
+ * Border Radius End End
1548
+ * @see https://tailwindcss.com/docs/border-radius
1549
+ */
1550
+ "rounded-ee": [{
1551
+ "rounded-ee": [borderRadius]
1552
+ }],
1553
+ /**
1554
+ * Border Radius End Start
1555
+ * @see https://tailwindcss.com/docs/border-radius
1556
+ */
1557
+ "rounded-es": [{
1558
+ "rounded-es": [borderRadius]
1559
+ }],
1560
+ /**
1561
+ * Border Radius Top Left
1562
+ * @see https://tailwindcss.com/docs/border-radius
1563
+ */
1564
+ "rounded-tl": [{
1565
+ "rounded-tl": [borderRadius]
1566
+ }],
1567
+ /**
1568
+ * Border Radius Top Right
1569
+ * @see https://tailwindcss.com/docs/border-radius
1570
+ */
1571
+ "rounded-tr": [{
1572
+ "rounded-tr": [borderRadius]
1573
+ }],
1574
+ /**
1575
+ * Border Radius Bottom Right
1576
+ * @see https://tailwindcss.com/docs/border-radius
1577
+ */
1578
+ "rounded-br": [{
1579
+ "rounded-br": [borderRadius]
1580
+ }],
1581
+ /**
1582
+ * Border Radius Bottom Left
1583
+ * @see https://tailwindcss.com/docs/border-radius
1584
+ */
1585
+ "rounded-bl": [{
1586
+ "rounded-bl": [borderRadius]
1587
+ }],
1588
+ /**
1589
+ * Border Width
1590
+ * @see https://tailwindcss.com/docs/border-width
1591
+ */
1592
+ "border-w": [{
1593
+ border: [borderWidth]
1594
+ }],
1595
+ /**
1596
+ * Border Width X
1597
+ * @see https://tailwindcss.com/docs/border-width
1598
+ */
1599
+ "border-w-x": [{
1600
+ "border-x": [borderWidth]
1601
+ }],
1602
+ /**
1603
+ * Border Width Y
1604
+ * @see https://tailwindcss.com/docs/border-width
1605
+ */
1606
+ "border-w-y": [{
1607
+ "border-y": [borderWidth]
1608
+ }],
1609
+ /**
1610
+ * Border Width Start
1611
+ * @see https://tailwindcss.com/docs/border-width
1612
+ */
1613
+ "border-w-s": [{
1614
+ "border-s": [borderWidth]
1615
+ }],
1616
+ /**
1617
+ * Border Width End
1618
+ * @see https://tailwindcss.com/docs/border-width
1619
+ */
1620
+ "border-w-e": [{
1621
+ "border-e": [borderWidth]
1622
+ }],
1623
+ /**
1624
+ * Border Width Top
1625
+ * @see https://tailwindcss.com/docs/border-width
1626
+ */
1627
+ "border-w-t": [{
1628
+ "border-t": [borderWidth]
1629
+ }],
1630
+ /**
1631
+ * Border Width Right
1632
+ * @see https://tailwindcss.com/docs/border-width
1633
+ */
1634
+ "border-w-r": [{
1635
+ "border-r": [borderWidth]
1636
+ }],
1637
+ /**
1638
+ * Border Width Bottom
1639
+ * @see https://tailwindcss.com/docs/border-width
1640
+ */
1641
+ "border-w-b": [{
1642
+ "border-b": [borderWidth]
1643
+ }],
1644
+ /**
1645
+ * Border Width Left
1646
+ * @see https://tailwindcss.com/docs/border-width
1647
+ */
1648
+ "border-w-l": [{
1649
+ "border-l": [borderWidth]
1650
+ }],
1651
+ /**
1652
+ * Border Opacity
1653
+ * @see https://tailwindcss.com/docs/border-opacity
1654
+ */
1655
+ "border-opacity": [{
1656
+ "border-opacity": [opacity]
1657
+ }],
1658
+ /**
1659
+ * Border Style
1660
+ * @see https://tailwindcss.com/docs/border-style
1661
+ */
1662
+ "border-style": [{
1663
+ border: [...getLineStyles(), "hidden"]
1664
+ }],
1665
+ /**
1666
+ * Divide Width X
1667
+ * @see https://tailwindcss.com/docs/divide-width
1668
+ */
1669
+ "divide-x": [{
1670
+ "divide-x": [borderWidth]
1671
+ }],
1672
+ /**
1673
+ * Divide Width X Reverse
1674
+ * @see https://tailwindcss.com/docs/divide-width
1675
+ */
1676
+ "divide-x-reverse": ["divide-x-reverse"],
1677
+ /**
1678
+ * Divide Width Y
1679
+ * @see https://tailwindcss.com/docs/divide-width
1680
+ */
1681
+ "divide-y": [{
1682
+ "divide-y": [borderWidth]
1683
+ }],
1684
+ /**
1685
+ * Divide Width Y Reverse
1686
+ * @see https://tailwindcss.com/docs/divide-width
1687
+ */
1688
+ "divide-y-reverse": ["divide-y-reverse"],
1689
+ /**
1690
+ * Divide Opacity
1691
+ * @see https://tailwindcss.com/docs/divide-opacity
1692
+ */
1693
+ "divide-opacity": [{
1694
+ "divide-opacity": [opacity]
1695
+ }],
1696
+ /**
1697
+ * Divide Style
1698
+ * @see https://tailwindcss.com/docs/divide-style
1699
+ */
1700
+ "divide-style": [{
1701
+ divide: getLineStyles()
1702
+ }],
1703
+ /**
1704
+ * Border Color
1705
+ * @see https://tailwindcss.com/docs/border-color
1706
+ */
1707
+ "border-color": [{
1708
+ border: [borderColor]
1709
+ }],
1710
+ /**
1711
+ * Border Color X
1712
+ * @see https://tailwindcss.com/docs/border-color
1713
+ */
1714
+ "border-color-x": [{
1715
+ "border-x": [borderColor]
1716
+ }],
1717
+ /**
1718
+ * Border Color Y
1719
+ * @see https://tailwindcss.com/docs/border-color
1720
+ */
1721
+ "border-color-y": [{
1722
+ "border-y": [borderColor]
1723
+ }],
1724
+ /**
1725
+ * Border Color S
1726
+ * @see https://tailwindcss.com/docs/border-color
1727
+ */
1728
+ "border-color-s": [{
1729
+ "border-s": [borderColor]
1730
+ }],
1731
+ /**
1732
+ * Border Color E
1733
+ * @see https://tailwindcss.com/docs/border-color
1734
+ */
1735
+ "border-color-e": [{
1736
+ "border-e": [borderColor]
1737
+ }],
1738
+ /**
1739
+ * Border Color Top
1740
+ * @see https://tailwindcss.com/docs/border-color
1741
+ */
1742
+ "border-color-t": [{
1743
+ "border-t": [borderColor]
1744
+ }],
1745
+ /**
1746
+ * Border Color Right
1747
+ * @see https://tailwindcss.com/docs/border-color
1748
+ */
1749
+ "border-color-r": [{
1750
+ "border-r": [borderColor]
1751
+ }],
1752
+ /**
1753
+ * Border Color Bottom
1754
+ * @see https://tailwindcss.com/docs/border-color
1755
+ */
1756
+ "border-color-b": [{
1757
+ "border-b": [borderColor]
1758
+ }],
1759
+ /**
1760
+ * Border Color Left
1761
+ * @see https://tailwindcss.com/docs/border-color
1762
+ */
1763
+ "border-color-l": [{
1764
+ "border-l": [borderColor]
1765
+ }],
1766
+ /**
1767
+ * Divide Color
1768
+ * @see https://tailwindcss.com/docs/divide-color
1769
+ */
1770
+ "divide-color": [{
1771
+ divide: [borderColor]
1772
+ }],
1773
+ /**
1774
+ * Outline Style
1775
+ * @see https://tailwindcss.com/docs/outline-style
1776
+ */
1777
+ "outline-style": [{
1778
+ outline: ["", ...getLineStyles()]
1779
+ }],
1780
+ /**
1781
+ * Outline Offset
1782
+ * @see https://tailwindcss.com/docs/outline-offset
1783
+ */
1784
+ "outline-offset": [{
1785
+ "outline-offset": [isLength, isArbitraryValue]
1786
+ }],
1787
+ /**
1788
+ * Outline Width
1789
+ * @see https://tailwindcss.com/docs/outline-width
1790
+ */
1791
+ "outline-w": [{
1792
+ outline: [isLength, isArbitraryLength]
1793
+ }],
1794
+ /**
1795
+ * Outline Color
1796
+ * @see https://tailwindcss.com/docs/outline-color
1797
+ */
1798
+ "outline-color": [{
1799
+ outline: [colors]
1800
+ }],
1801
+ /**
1802
+ * Ring Width
1803
+ * @see https://tailwindcss.com/docs/ring-width
1804
+ */
1805
+ "ring-w": [{
1806
+ ring: getLengthWithEmptyAndArbitrary()
1807
+ }],
1808
+ /**
1809
+ * Ring Width Inset
1810
+ * @see https://tailwindcss.com/docs/ring-width
1811
+ */
1812
+ "ring-w-inset": ["ring-inset"],
1813
+ /**
1814
+ * Ring Color
1815
+ * @see https://tailwindcss.com/docs/ring-color
1816
+ */
1817
+ "ring-color": [{
1818
+ ring: [colors]
1819
+ }],
1820
+ /**
1821
+ * Ring Opacity
1822
+ * @see https://tailwindcss.com/docs/ring-opacity
1823
+ */
1824
+ "ring-opacity": [{
1825
+ "ring-opacity": [opacity]
1826
+ }],
1827
+ /**
1828
+ * Ring Offset Width
1829
+ * @see https://tailwindcss.com/docs/ring-offset-width
1830
+ */
1831
+ "ring-offset-w": [{
1832
+ "ring-offset": [isLength, isArbitraryLength]
1833
+ }],
1834
+ /**
1835
+ * Ring Offset Color
1836
+ * @see https://tailwindcss.com/docs/ring-offset-color
1837
+ */
1838
+ "ring-offset-color": [{
1839
+ "ring-offset": [colors]
1840
+ }],
1841
+ // Effects
1842
+ /**
1843
+ * Box Shadow
1844
+ * @see https://tailwindcss.com/docs/box-shadow
1845
+ */
1846
+ shadow: [{
1847
+ shadow: ["", "inner", "none", isTshirtSize, isArbitraryShadow]
1848
+ }],
1849
+ /**
1850
+ * Box Shadow Color
1851
+ * @see https://tailwindcss.com/docs/box-shadow-color
1852
+ */
1853
+ "shadow-color": [{
1854
+ shadow: [isAny]
1855
+ }],
1856
+ /**
1857
+ * Opacity
1858
+ * @see https://tailwindcss.com/docs/opacity
1859
+ */
1860
+ opacity: [{
1861
+ opacity: [opacity]
1862
+ }],
1863
+ /**
1864
+ * Mix Blend Mode
1865
+ * @see https://tailwindcss.com/docs/mix-blend-mode
1866
+ */
1867
+ "mix-blend": [{
1868
+ "mix-blend": [...getBlendModes(), "plus-lighter", "plus-darker"]
1869
+ }],
1870
+ /**
1871
+ * Background Blend Mode
1872
+ * @see https://tailwindcss.com/docs/background-blend-mode
1873
+ */
1874
+ "bg-blend": [{
1875
+ "bg-blend": getBlendModes()
1876
+ }],
1877
+ // Filters
1878
+ /**
1879
+ * Filter
1880
+ * @deprecated since Tailwind CSS v3.0.0
1881
+ * @see https://tailwindcss.com/docs/filter
1882
+ */
1883
+ filter: [{
1884
+ filter: ["", "none"]
1885
+ }],
1886
+ /**
1887
+ * Blur
1888
+ * @see https://tailwindcss.com/docs/blur
1889
+ */
1890
+ blur: [{
1891
+ blur: [blur]
1892
+ }],
1893
+ /**
1894
+ * Brightness
1895
+ * @see https://tailwindcss.com/docs/brightness
1896
+ */
1897
+ brightness: [{
1898
+ brightness: [brightness]
1899
+ }],
1900
+ /**
1901
+ * Contrast
1902
+ * @see https://tailwindcss.com/docs/contrast
1903
+ */
1904
+ contrast: [{
1905
+ contrast: [contrast]
1906
+ }],
1907
+ /**
1908
+ * Drop Shadow
1909
+ * @see https://tailwindcss.com/docs/drop-shadow
1910
+ */
1911
+ "drop-shadow": [{
1912
+ "drop-shadow": ["", "none", isTshirtSize, isArbitraryValue]
1913
+ }],
1914
+ /**
1915
+ * Grayscale
1916
+ * @see https://tailwindcss.com/docs/grayscale
1917
+ */
1918
+ grayscale: [{
1919
+ grayscale: [grayscale]
1920
+ }],
1921
+ /**
1922
+ * Hue Rotate
1923
+ * @see https://tailwindcss.com/docs/hue-rotate
1924
+ */
1925
+ "hue-rotate": [{
1926
+ "hue-rotate": [hueRotate]
1927
+ }],
1928
+ /**
1929
+ * Invert
1930
+ * @see https://tailwindcss.com/docs/invert
1931
+ */
1932
+ invert: [{
1933
+ invert: [invert]
1934
+ }],
1935
+ /**
1936
+ * Saturate
1937
+ * @see https://tailwindcss.com/docs/saturate
1938
+ */
1939
+ saturate: [{
1940
+ saturate: [saturate]
1941
+ }],
1942
+ /**
1943
+ * Sepia
1944
+ * @see https://tailwindcss.com/docs/sepia
1945
+ */
1946
+ sepia: [{
1947
+ sepia: [sepia]
1948
+ }],
1949
+ /**
1950
+ * Backdrop Filter
1951
+ * @deprecated since Tailwind CSS v3.0.0
1952
+ * @see https://tailwindcss.com/docs/backdrop-filter
1953
+ */
1954
+ "backdrop-filter": [{
1955
+ "backdrop-filter": ["", "none"]
1956
+ }],
1957
+ /**
1958
+ * Backdrop Blur
1959
+ * @see https://tailwindcss.com/docs/backdrop-blur
1960
+ */
1961
+ "backdrop-blur": [{
1962
+ "backdrop-blur": [blur]
1963
+ }],
1964
+ /**
1965
+ * Backdrop Brightness
1966
+ * @see https://tailwindcss.com/docs/backdrop-brightness
1967
+ */
1968
+ "backdrop-brightness": [{
1969
+ "backdrop-brightness": [brightness]
1970
+ }],
1971
+ /**
1972
+ * Backdrop Contrast
1973
+ * @see https://tailwindcss.com/docs/backdrop-contrast
1974
+ */
1975
+ "backdrop-contrast": [{
1976
+ "backdrop-contrast": [contrast]
1977
+ }],
1978
+ /**
1979
+ * Backdrop Grayscale
1980
+ * @see https://tailwindcss.com/docs/backdrop-grayscale
1981
+ */
1982
+ "backdrop-grayscale": [{
1983
+ "backdrop-grayscale": [grayscale]
1984
+ }],
1985
+ /**
1986
+ * Backdrop Hue Rotate
1987
+ * @see https://tailwindcss.com/docs/backdrop-hue-rotate
1988
+ */
1989
+ "backdrop-hue-rotate": [{
1990
+ "backdrop-hue-rotate": [hueRotate]
1991
+ }],
1992
+ /**
1993
+ * Backdrop Invert
1994
+ * @see https://tailwindcss.com/docs/backdrop-invert
1995
+ */
1996
+ "backdrop-invert": [{
1997
+ "backdrop-invert": [invert]
1998
+ }],
1999
+ /**
2000
+ * Backdrop Opacity
2001
+ * @see https://tailwindcss.com/docs/backdrop-opacity
2002
+ */
2003
+ "backdrop-opacity": [{
2004
+ "backdrop-opacity": [opacity]
2005
+ }],
2006
+ /**
2007
+ * Backdrop Saturate
2008
+ * @see https://tailwindcss.com/docs/backdrop-saturate
2009
+ */
2010
+ "backdrop-saturate": [{
2011
+ "backdrop-saturate": [saturate]
2012
+ }],
2013
+ /**
2014
+ * Backdrop Sepia
2015
+ * @see https://tailwindcss.com/docs/backdrop-sepia
2016
+ */
2017
+ "backdrop-sepia": [{
2018
+ "backdrop-sepia": [sepia]
2019
+ }],
2020
+ // Tables
2021
+ /**
2022
+ * Border Collapse
2023
+ * @see https://tailwindcss.com/docs/border-collapse
2024
+ */
2025
+ "border-collapse": [{
2026
+ border: ["collapse", "separate"]
2027
+ }],
2028
+ /**
2029
+ * Border Spacing
2030
+ * @see https://tailwindcss.com/docs/border-spacing
2031
+ */
2032
+ "border-spacing": [{
2033
+ "border-spacing": [borderSpacing]
2034
+ }],
2035
+ /**
2036
+ * Border Spacing X
2037
+ * @see https://tailwindcss.com/docs/border-spacing
2038
+ */
2039
+ "border-spacing-x": [{
2040
+ "border-spacing-x": [borderSpacing]
2041
+ }],
2042
+ /**
2043
+ * Border Spacing Y
2044
+ * @see https://tailwindcss.com/docs/border-spacing
2045
+ */
2046
+ "border-spacing-y": [{
2047
+ "border-spacing-y": [borderSpacing]
2048
+ }],
2049
+ /**
2050
+ * Table Layout
2051
+ * @see https://tailwindcss.com/docs/table-layout
2052
+ */
2053
+ "table-layout": [{
2054
+ table: ["auto", "fixed"]
2055
+ }],
2056
+ /**
2057
+ * Caption Side
2058
+ * @see https://tailwindcss.com/docs/caption-side
2059
+ */
2060
+ caption: [{
2061
+ caption: ["top", "bottom"]
2062
+ }],
2063
+ // Transitions and Animation
2064
+ /**
2065
+ * Tranisition Property
2066
+ * @see https://tailwindcss.com/docs/transition-property
2067
+ */
2068
+ transition: [{
2069
+ transition: ["none", "all", "", "colors", "opacity", "shadow", "transform", isArbitraryValue]
2070
+ }],
2071
+ /**
2072
+ * Transition Duration
2073
+ * @see https://tailwindcss.com/docs/transition-duration
2074
+ */
2075
+ duration: [{
2076
+ duration: getNumberAndArbitrary()
2077
+ }],
2078
+ /**
2079
+ * Transition Timing Function
2080
+ * @see https://tailwindcss.com/docs/transition-timing-function
2081
+ */
2082
+ ease: [{
2083
+ ease: ["linear", "in", "out", "in-out", isArbitraryValue]
2084
+ }],
2085
+ /**
2086
+ * Transition Delay
2087
+ * @see https://tailwindcss.com/docs/transition-delay
2088
+ */
2089
+ delay: [{
2090
+ delay: getNumberAndArbitrary()
2091
+ }],
2092
+ /**
2093
+ * Animation
2094
+ * @see https://tailwindcss.com/docs/animation
2095
+ */
2096
+ animate: [{
2097
+ animate: ["none", "spin", "ping", "pulse", "bounce", isArbitraryValue]
2098
+ }],
2099
+ // Transforms
2100
+ /**
2101
+ * Transform
2102
+ * @see https://tailwindcss.com/docs/transform
2103
+ */
2104
+ transform: [{
2105
+ transform: ["", "gpu", "none"]
2106
+ }],
2107
+ /**
2108
+ * Scale
2109
+ * @see https://tailwindcss.com/docs/scale
2110
+ */
2111
+ scale: [{
2112
+ scale: [scale]
2113
+ }],
2114
+ /**
2115
+ * Scale X
2116
+ * @see https://tailwindcss.com/docs/scale
2117
+ */
2118
+ "scale-x": [{
2119
+ "scale-x": [scale]
2120
+ }],
2121
+ /**
2122
+ * Scale Y
2123
+ * @see https://tailwindcss.com/docs/scale
2124
+ */
2125
+ "scale-y": [{
2126
+ "scale-y": [scale]
2127
+ }],
2128
+ /**
2129
+ * Rotate
2130
+ * @see https://tailwindcss.com/docs/rotate
2131
+ */
2132
+ rotate: [{
2133
+ rotate: [isInteger, isArbitraryValue]
2134
+ }],
2135
+ /**
2136
+ * Translate X
2137
+ * @see https://tailwindcss.com/docs/translate
2138
+ */
2139
+ "translate-x": [{
2140
+ "translate-x": [translate]
2141
+ }],
2142
+ /**
2143
+ * Translate Y
2144
+ * @see https://tailwindcss.com/docs/translate
2145
+ */
2146
+ "translate-y": [{
2147
+ "translate-y": [translate]
2148
+ }],
2149
+ /**
2150
+ * Skew X
2151
+ * @see https://tailwindcss.com/docs/skew
2152
+ */
2153
+ "skew-x": [{
2154
+ "skew-x": [skew]
2155
+ }],
2156
+ /**
2157
+ * Skew Y
2158
+ * @see https://tailwindcss.com/docs/skew
2159
+ */
2160
+ "skew-y": [{
2161
+ "skew-y": [skew]
2162
+ }],
2163
+ /**
2164
+ * Transform Origin
2165
+ * @see https://tailwindcss.com/docs/transform-origin
2166
+ */
2167
+ "transform-origin": [{
2168
+ origin: ["center", "top", "top-right", "right", "bottom-right", "bottom", "bottom-left", "left", "top-left", isArbitraryValue]
2169
+ }],
2170
+ // Interactivity
2171
+ /**
2172
+ * Accent Color
2173
+ * @see https://tailwindcss.com/docs/accent-color
2174
+ */
2175
+ accent: [{
2176
+ accent: ["auto", colors]
2177
+ }],
2178
+ /**
2179
+ * Appearance
2180
+ * @see https://tailwindcss.com/docs/appearance
2181
+ */
2182
+ appearance: [{
2183
+ appearance: ["none", "auto"]
2184
+ }],
2185
+ /**
2186
+ * Cursor
2187
+ * @see https://tailwindcss.com/docs/cursor
2188
+ */
2189
+ cursor: [{
2190
+ 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", isArbitraryValue]
2191
+ }],
2192
+ /**
2193
+ * Caret Color
2194
+ * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities
2195
+ */
2196
+ "caret-color": [{
2197
+ caret: [colors]
2198
+ }],
2199
+ /**
2200
+ * Pointer Events
2201
+ * @see https://tailwindcss.com/docs/pointer-events
2202
+ */
2203
+ "pointer-events": [{
2204
+ "pointer-events": ["none", "auto"]
2205
+ }],
2206
+ /**
2207
+ * Resize
2208
+ * @see https://tailwindcss.com/docs/resize
2209
+ */
2210
+ resize: [{
2211
+ resize: ["none", "y", "x", ""]
2212
+ }],
2213
+ /**
2214
+ * Scroll Behavior
2215
+ * @see https://tailwindcss.com/docs/scroll-behavior
2216
+ */
2217
+ "scroll-behavior": [{
2218
+ scroll: ["auto", "smooth"]
2219
+ }],
2220
+ /**
2221
+ * Scroll Margin
2222
+ * @see https://tailwindcss.com/docs/scroll-margin
2223
+ */
2224
+ "scroll-m": [{
2225
+ "scroll-m": getSpacingWithArbitrary()
2226
+ }],
2227
+ /**
2228
+ * Scroll Margin X
2229
+ * @see https://tailwindcss.com/docs/scroll-margin
2230
+ */
2231
+ "scroll-mx": [{
2232
+ "scroll-mx": getSpacingWithArbitrary()
2233
+ }],
2234
+ /**
2235
+ * Scroll Margin Y
2236
+ * @see https://tailwindcss.com/docs/scroll-margin
2237
+ */
2238
+ "scroll-my": [{
2239
+ "scroll-my": getSpacingWithArbitrary()
2240
+ }],
2241
+ /**
2242
+ * Scroll Margin Start
2243
+ * @see https://tailwindcss.com/docs/scroll-margin
2244
+ */
2245
+ "scroll-ms": [{
2246
+ "scroll-ms": getSpacingWithArbitrary()
2247
+ }],
2248
+ /**
2249
+ * Scroll Margin End
2250
+ * @see https://tailwindcss.com/docs/scroll-margin
2251
+ */
2252
+ "scroll-me": [{
2253
+ "scroll-me": getSpacingWithArbitrary()
2254
+ }],
2255
+ /**
2256
+ * Scroll Margin Top
2257
+ * @see https://tailwindcss.com/docs/scroll-margin
2258
+ */
2259
+ "scroll-mt": [{
2260
+ "scroll-mt": getSpacingWithArbitrary()
2261
+ }],
2262
+ /**
2263
+ * Scroll Margin Right
2264
+ * @see https://tailwindcss.com/docs/scroll-margin
2265
+ */
2266
+ "scroll-mr": [{
2267
+ "scroll-mr": getSpacingWithArbitrary()
2268
+ }],
2269
+ /**
2270
+ * Scroll Margin Bottom
2271
+ * @see https://tailwindcss.com/docs/scroll-margin
2272
+ */
2273
+ "scroll-mb": [{
2274
+ "scroll-mb": getSpacingWithArbitrary()
2275
+ }],
2276
+ /**
2277
+ * Scroll Margin Left
2278
+ * @see https://tailwindcss.com/docs/scroll-margin
2279
+ */
2280
+ "scroll-ml": [{
2281
+ "scroll-ml": getSpacingWithArbitrary()
2282
+ }],
2283
+ /**
2284
+ * Scroll Padding
2285
+ * @see https://tailwindcss.com/docs/scroll-padding
2286
+ */
2287
+ "scroll-p": [{
2288
+ "scroll-p": getSpacingWithArbitrary()
2289
+ }],
2290
+ /**
2291
+ * Scroll Padding X
2292
+ * @see https://tailwindcss.com/docs/scroll-padding
2293
+ */
2294
+ "scroll-px": [{
2295
+ "scroll-px": getSpacingWithArbitrary()
2296
+ }],
2297
+ /**
2298
+ * Scroll Padding Y
2299
+ * @see https://tailwindcss.com/docs/scroll-padding
2300
+ */
2301
+ "scroll-py": [{
2302
+ "scroll-py": getSpacingWithArbitrary()
2303
+ }],
2304
+ /**
2305
+ * Scroll Padding Start
2306
+ * @see https://tailwindcss.com/docs/scroll-padding
2307
+ */
2308
+ "scroll-ps": [{
2309
+ "scroll-ps": getSpacingWithArbitrary()
2310
+ }],
2311
+ /**
2312
+ * Scroll Padding End
2313
+ * @see https://tailwindcss.com/docs/scroll-padding
2314
+ */
2315
+ "scroll-pe": [{
2316
+ "scroll-pe": getSpacingWithArbitrary()
2317
+ }],
2318
+ /**
2319
+ * Scroll Padding Top
2320
+ * @see https://tailwindcss.com/docs/scroll-padding
2321
+ */
2322
+ "scroll-pt": [{
2323
+ "scroll-pt": getSpacingWithArbitrary()
2324
+ }],
2325
+ /**
2326
+ * Scroll Padding Right
2327
+ * @see https://tailwindcss.com/docs/scroll-padding
2328
+ */
2329
+ "scroll-pr": [{
2330
+ "scroll-pr": getSpacingWithArbitrary()
2331
+ }],
2332
+ /**
2333
+ * Scroll Padding Bottom
2334
+ * @see https://tailwindcss.com/docs/scroll-padding
2335
+ */
2336
+ "scroll-pb": [{
2337
+ "scroll-pb": getSpacingWithArbitrary()
2338
+ }],
2339
+ /**
2340
+ * Scroll Padding Left
2341
+ * @see https://tailwindcss.com/docs/scroll-padding
2342
+ */
2343
+ "scroll-pl": [{
2344
+ "scroll-pl": getSpacingWithArbitrary()
2345
+ }],
2346
+ /**
2347
+ * Scroll Snap Align
2348
+ * @see https://tailwindcss.com/docs/scroll-snap-align
2349
+ */
2350
+ "snap-align": [{
2351
+ snap: ["start", "end", "center", "align-none"]
2352
+ }],
2353
+ /**
2354
+ * Scroll Snap Stop
2355
+ * @see https://tailwindcss.com/docs/scroll-snap-stop
2356
+ */
2357
+ "snap-stop": [{
2358
+ snap: ["normal", "always"]
2359
+ }],
2360
+ /**
2361
+ * Scroll Snap Type
2362
+ * @see https://tailwindcss.com/docs/scroll-snap-type
2363
+ */
2364
+ "snap-type": [{
2365
+ snap: ["none", "x", "y", "both"]
2366
+ }],
2367
+ /**
2368
+ * Scroll Snap Type Strictness
2369
+ * @see https://tailwindcss.com/docs/scroll-snap-type
2370
+ */
2371
+ "snap-strictness": [{
2372
+ snap: ["mandatory", "proximity"]
2373
+ }],
2374
+ /**
2375
+ * Touch Action
2376
+ * @see https://tailwindcss.com/docs/touch-action
2377
+ */
2378
+ touch: [{
2379
+ touch: ["auto", "none", "manipulation"]
2380
+ }],
2381
+ /**
2382
+ * Touch Action X
2383
+ * @see https://tailwindcss.com/docs/touch-action
2384
+ */
2385
+ "touch-x": [{
2386
+ "touch-pan": ["x", "left", "right"]
2387
+ }],
2388
+ /**
2389
+ * Touch Action Y
2390
+ * @see https://tailwindcss.com/docs/touch-action
2391
+ */
2392
+ "touch-y": [{
2393
+ "touch-pan": ["y", "up", "down"]
2394
+ }],
2395
+ /**
2396
+ * Touch Action Pinch Zoom
2397
+ * @see https://tailwindcss.com/docs/touch-action
2398
+ */
2399
+ "touch-pz": ["touch-pinch-zoom"],
2400
+ /**
2401
+ * User Select
2402
+ * @see https://tailwindcss.com/docs/user-select
2403
+ */
2404
+ select: [{
2405
+ select: ["none", "text", "all", "auto"]
2406
+ }],
2407
+ /**
2408
+ * Will Change
2409
+ * @see https://tailwindcss.com/docs/will-change
2410
+ */
2411
+ "will-change": [{
2412
+ "will-change": ["auto", "scroll", "contents", "transform", isArbitraryValue]
2413
+ }],
2414
+ // SVG
2415
+ /**
2416
+ * Fill
2417
+ * @see https://tailwindcss.com/docs/fill
2418
+ */
2419
+ fill: [{
2420
+ fill: [colors, "none"]
2421
+ }],
2422
+ /**
2423
+ * Stroke Width
2424
+ * @see https://tailwindcss.com/docs/stroke-width
2425
+ */
2426
+ "stroke-w": [{
2427
+ stroke: [isLength, isArbitraryLength, isArbitraryNumber]
2428
+ }],
2429
+ /**
2430
+ * Stroke
2431
+ * @see https://tailwindcss.com/docs/stroke
2432
+ */
2433
+ stroke: [{
2434
+ stroke: [colors, "none"]
2435
+ }],
2436
+ // Accessibility
2437
+ /**
2438
+ * Screen Readers
2439
+ * @see https://tailwindcss.com/docs/screen-readers
2440
+ */
2441
+ sr: ["sr-only", "not-sr-only"],
2442
+ /**
2443
+ * Forced Color Adjust
2444
+ * @see https://tailwindcss.com/docs/forced-color-adjust
2445
+ */
2446
+ "forced-color-adjust": [{
2447
+ "forced-color-adjust": ["auto", "none"]
2448
+ }]
2449
+ },
2450
+ conflictingClassGroups: {
2451
+ overflow: ["overflow-x", "overflow-y"],
2452
+ overscroll: ["overscroll-x", "overscroll-y"],
2453
+ inset: ["inset-x", "inset-y", "start", "end", "top", "right", "bottom", "left"],
2454
+ "inset-x": ["right", "left"],
2455
+ "inset-y": ["top", "bottom"],
2456
+ flex: ["basis", "grow", "shrink"],
2457
+ gap: ["gap-x", "gap-y"],
2458
+ p: ["px", "py", "ps", "pe", "pt", "pr", "pb", "pl"],
2459
+ px: ["pr", "pl"],
2460
+ py: ["pt", "pb"],
2461
+ m: ["mx", "my", "ms", "me", "mt", "mr", "mb", "ml"],
2462
+ mx: ["mr", "ml"],
2463
+ my: ["mt", "mb"],
2464
+ size: ["w", "h"],
2465
+ "font-size": ["leading"],
2466
+ "fvn-normal": ["fvn-ordinal", "fvn-slashed-zero", "fvn-figure", "fvn-spacing", "fvn-fraction"],
2467
+ "fvn-ordinal": ["fvn-normal"],
2468
+ "fvn-slashed-zero": ["fvn-normal"],
2469
+ "fvn-figure": ["fvn-normal"],
2470
+ "fvn-spacing": ["fvn-normal"],
2471
+ "fvn-fraction": ["fvn-normal"],
2472
+ "line-clamp": ["display", "overflow"],
2473
+ 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"],
2474
+ "rounded-s": ["rounded-ss", "rounded-es"],
2475
+ "rounded-e": ["rounded-se", "rounded-ee"],
2476
+ "rounded-t": ["rounded-tl", "rounded-tr"],
2477
+ "rounded-r": ["rounded-tr", "rounded-br"],
2478
+ "rounded-b": ["rounded-br", "rounded-bl"],
2479
+ "rounded-l": ["rounded-tl", "rounded-bl"],
2480
+ "border-spacing": ["border-spacing-x", "border-spacing-y"],
2481
+ "border-w": ["border-w-s", "border-w-e", "border-w-t", "border-w-r", "border-w-b", "border-w-l"],
2482
+ "border-w-x": ["border-w-r", "border-w-l"],
2483
+ "border-w-y": ["border-w-t", "border-w-b"],
2484
+ "border-color": ["border-color-s", "border-color-e", "border-color-t", "border-color-r", "border-color-b", "border-color-l"],
2485
+ "border-color-x": ["border-color-r", "border-color-l"],
2486
+ "border-color-y": ["border-color-t", "border-color-b"],
2487
+ "scroll-m": ["scroll-mx", "scroll-my", "scroll-ms", "scroll-me", "scroll-mt", "scroll-mr", "scroll-mb", "scroll-ml"],
2488
+ "scroll-mx": ["scroll-mr", "scroll-ml"],
2489
+ "scroll-my": ["scroll-mt", "scroll-mb"],
2490
+ "scroll-p": ["scroll-px", "scroll-py", "scroll-ps", "scroll-pe", "scroll-pt", "scroll-pr", "scroll-pb", "scroll-pl"],
2491
+ "scroll-px": ["scroll-pr", "scroll-pl"],
2492
+ "scroll-py": ["scroll-pt", "scroll-pb"],
2493
+ touch: ["touch-x", "touch-y", "touch-pz"],
2494
+ "touch-x": ["touch"],
2495
+ "touch-y": ["touch"],
2496
+ "touch-pz": ["touch"]
2497
+ },
2498
+ conflictingClassGroupModifiers: {
2499
+ "font-size": ["leading"]
2500
+ }
2501
+ };
2502
+ };
2503
+ var twMerge = /* @__PURE__ */ createTailwindMerge(getDefaultConfig);
2504
+
2505
+ // lib/cn.ts
2506
+ function cn(...inputs) {
2507
+ return twMerge(clsx(inputs));
2508
+ }
2509
+ var EventBusContext = React5.createContext(null);
2510
+
2511
+ // hooks/useEventBus.ts
2512
+ function getGlobalEventBus() {
2513
+ if (typeof window !== "undefined") {
2514
+ return window.__kflowEventBus ?? null;
2515
+ }
2516
+ return null;
2517
+ }
2518
+ var fallbackListeners = /* @__PURE__ */ new Map();
2519
+ var fallbackAnyListeners = /* @__PURE__ */ new Set();
2520
+ var fallbackEventBus = {
2521
+ emit: (type, payload) => {
2522
+ const event = {
2523
+ type,
2524
+ payload,
2525
+ timestamp: Date.now()
2526
+ };
2527
+ const handlers = fallbackListeners.get(type);
2528
+ if (handlers) {
2529
+ handlers.forEach((handler) => {
2530
+ try {
2531
+ handler(event);
2532
+ } catch (error) {
2533
+ console.error(`[EventBus] Error in listener for '${type}':`, error);
2534
+ }
2535
+ });
2536
+ }
2537
+ fallbackAnyListeners.forEach((handler) => {
2538
+ try {
2539
+ handler(event);
2540
+ } catch (error) {
2541
+ console.error(`[EventBus] Error in onAny listener for '${type}':`, error);
2542
+ }
2543
+ });
2544
+ },
2545
+ on: (type, listener) => {
2546
+ if (!fallbackListeners.has(type)) {
2547
+ fallbackListeners.set(type, /* @__PURE__ */ new Set());
2548
+ }
2549
+ fallbackListeners.get(type).add(listener);
2550
+ return () => {
2551
+ const handlers = fallbackListeners.get(type);
2552
+ if (handlers) {
2553
+ handlers.delete(listener);
2554
+ if (handlers.size === 0) {
2555
+ fallbackListeners.delete(type);
2556
+ }
2557
+ }
2558
+ };
2559
+ },
2560
+ once: (type, listener) => {
2561
+ const wrappedListener = (event) => {
2562
+ fallbackListeners.get(type)?.delete(wrappedListener);
2563
+ listener(event);
2564
+ };
2565
+ return fallbackEventBus.on(type, wrappedListener);
2566
+ },
2567
+ hasListeners: (type) => {
2568
+ const handlers = fallbackListeners.get(type);
2569
+ return handlers !== void 0 && handlers.size > 0;
2570
+ },
2571
+ onAny: (listener) => {
2572
+ fallbackAnyListeners.add(listener);
2573
+ return () => {
2574
+ fallbackAnyListeners.delete(listener);
2575
+ };
2576
+ }
2577
+ };
2578
+ function useEventBus() {
2579
+ const context = React5.useContext(EventBusContext);
2580
+ return context ?? getGlobalEventBus() ?? fallbackEventBus;
2581
+ }
2582
+ var paddingStyles = {
2583
+ none: "p-0",
2584
+ xs: "p-1",
2585
+ sm: "p-2",
2586
+ md: "p-4",
2587
+ lg: "p-6",
2588
+ xl: "p-8",
2589
+ "2xl": "p-12"
2590
+ };
2591
+ var paddingXStyles = {
2592
+ none: "px-0",
2593
+ xs: "px-1",
2594
+ sm: "px-2",
2595
+ md: "px-4",
2596
+ lg: "px-6",
2597
+ xl: "px-8",
2598
+ "2xl": "px-12"
2599
+ };
2600
+ var paddingYStyles = {
2601
+ none: "py-0",
2602
+ xs: "py-1",
2603
+ sm: "py-2",
2604
+ md: "py-4",
2605
+ lg: "py-6",
2606
+ xl: "py-8",
2607
+ "2xl": "py-12"
2608
+ };
2609
+ var marginStyles = {
2610
+ none: "m-0",
2611
+ xs: "m-1",
2612
+ sm: "m-2",
2613
+ md: "m-4",
2614
+ lg: "m-6",
2615
+ xl: "m-8",
2616
+ "2xl": "m-12",
2617
+ auto: "m-auto"
2618
+ };
2619
+ var marginXStyles = {
2620
+ none: "mx-0",
2621
+ xs: "mx-1",
2622
+ sm: "mx-2",
2623
+ md: "mx-4",
2624
+ lg: "mx-6",
2625
+ xl: "mx-8",
2626
+ "2xl": "mx-12",
2627
+ auto: "mx-auto"
2628
+ };
2629
+ var marginYStyles = {
2630
+ none: "my-0",
2631
+ xs: "my-1",
2632
+ sm: "my-2",
2633
+ md: "my-4",
2634
+ lg: "my-6",
2635
+ xl: "my-8",
2636
+ "2xl": "my-12",
2637
+ auto: "my-auto"
2638
+ };
2639
+ var bgStyles = {
2640
+ transparent: "bg-transparent",
2641
+ primary: "bg-[var(--color-primary)] text-[var(--color-primary-foreground)]",
2642
+ secondary: "bg-[var(--color-secondary)] text-[var(--color-secondary-foreground)]",
2643
+ muted: "bg-[var(--color-muted)] text-[var(--color-foreground)]",
2644
+ accent: "bg-[var(--color-accent)] text-[var(--color-accent-foreground)]",
2645
+ surface: "bg-[var(--color-card)]",
2646
+ overlay: "bg-[var(--color-card)]/80 backdrop-blur-sm"
2647
+ };
2648
+ var roundedStyles = {
2649
+ none: "rounded-none",
2650
+ sm: "rounded-[var(--radius-sm)]",
2651
+ md: "rounded-[var(--radius-md)]",
2652
+ lg: "rounded-[var(--radius-lg)]",
2653
+ xl: "rounded-[var(--radius-xl)]",
2654
+ "2xl": "rounded-[var(--radius-xl)]",
2655
+ full: "rounded-[var(--radius-full)]"
2656
+ };
2657
+ var shadowStyles = {
2658
+ none: "shadow-none",
2659
+ sm: "shadow-[var(--shadow-sm)]",
2660
+ md: "shadow-[var(--shadow-main)]",
2661
+ lg: "shadow-[var(--shadow-lg)]",
2662
+ xl: "shadow-[var(--shadow-lg)]"
2663
+ };
2664
+ var displayStyles = {
2665
+ block: "block",
2666
+ inline: "inline",
2667
+ "inline-block": "inline-block",
2668
+ flex: "flex",
2669
+ "inline-flex": "inline-flex",
2670
+ grid: "grid"
2671
+ };
2672
+ var overflowStyles = {
2673
+ auto: "overflow-auto",
2674
+ hidden: "overflow-hidden",
2675
+ visible: "overflow-visible",
2676
+ scroll: "overflow-scroll"
2677
+ };
2678
+ var positionStyles = {
2679
+ relative: "relative",
2680
+ absolute: "absolute",
2681
+ fixed: "fixed",
2682
+ sticky: "sticky"
2683
+ };
2684
+ var Box = React5__default.default.forwardRef(
2685
+ ({
2686
+ padding,
2687
+ paddingX,
2688
+ paddingY,
2689
+ margin,
2690
+ marginX,
2691
+ marginY,
2692
+ bg = "transparent",
2693
+ border = false,
2694
+ rounded = "none",
2695
+ shadow = "none",
2696
+ display,
2697
+ fullWidth = false,
2698
+ fullHeight = false,
2699
+ overflow,
2700
+ position,
2701
+ className,
2702
+ children,
2703
+ as: Component = "div",
2704
+ action,
2705
+ actionPayload,
2706
+ hoverEvent,
2707
+ onClick,
2708
+ onMouseEnter,
2709
+ onMouseLeave,
2710
+ ...rest
2711
+ }, ref) => {
2712
+ const eventBus = useEventBus();
2713
+ const handleClick = React5.useCallback((e) => {
2714
+ if (action) {
2715
+ e.stopPropagation();
2716
+ eventBus.emit(`UI:${action}`, actionPayload ?? {});
2717
+ }
2718
+ onClick?.(e);
2719
+ }, [action, actionPayload, eventBus, onClick]);
2720
+ const handleMouseEnter = React5.useCallback((e) => {
2721
+ if (hoverEvent) {
2722
+ eventBus.emit(`UI:${hoverEvent}`, { hovered: true });
2723
+ }
2724
+ onMouseEnter?.(e);
2725
+ }, [hoverEvent, eventBus, onMouseEnter]);
2726
+ const handleMouseLeave = React5.useCallback((e) => {
2727
+ if (hoverEvent) {
2728
+ eventBus.emit(`UI:${hoverEvent}`, { hovered: false });
2729
+ }
2730
+ onMouseLeave?.(e);
2731
+ }, [hoverEvent, eventBus, onMouseLeave]);
2732
+ const isClickable = action || onClick;
2733
+ const Comp = Component;
2734
+ return /* @__PURE__ */ jsxRuntime.jsx(
2735
+ Comp,
2736
+ {
2737
+ ref,
2738
+ className: cn(
2739
+ // Padding
2740
+ padding && paddingStyles[padding],
2741
+ paddingX && paddingXStyles[paddingX],
2742
+ paddingY && paddingYStyles[paddingY],
2743
+ // Margin
2744
+ margin && marginStyles[margin],
2745
+ marginX && marginXStyles[marginX],
2746
+ marginY && marginYStyles[marginY],
2747
+ // Background
2748
+ bgStyles[bg],
2749
+ // Border - uses theme variables
2750
+ border && "border-[length:var(--border-width)] border-[var(--color-border)]",
2751
+ // Rounded
2752
+ roundedStyles[rounded],
2753
+ // Shadow
2754
+ shadowStyles[shadow],
2755
+ // Display
2756
+ display && displayStyles[display],
2757
+ // Dimensions
2758
+ fullWidth && "w-full",
2759
+ fullHeight && "h-full",
2760
+ // Overflow
2761
+ overflow && overflowStyles[overflow],
2762
+ // Position
2763
+ position && positionStyles[position],
2764
+ // Cursor for clickable
2765
+ isClickable && "cursor-pointer",
2766
+ className
2767
+ ),
2768
+ onClick: isClickable ? handleClick : void 0,
2769
+ onMouseEnter: hoverEvent || onMouseEnter ? handleMouseEnter : void 0,
2770
+ onMouseLeave: hoverEvent || onMouseLeave ? handleMouseLeave : void 0,
2771
+ ...rest,
2772
+ children
2773
+ }
2774
+ );
2775
+ }
2776
+ );
2777
+ Box.displayName = "Box";
2778
+ var gapStyles = {
2779
+ none: "gap-0",
2780
+ xs: "gap-1",
2781
+ sm: "gap-2",
2782
+ md: "gap-4",
2783
+ lg: "gap-6",
2784
+ xl: "gap-8",
2785
+ "2xl": "gap-12"
2786
+ };
2787
+ var alignStyles = {
2788
+ start: "items-start",
2789
+ center: "items-center",
2790
+ end: "items-end",
2791
+ stretch: "items-stretch",
2792
+ baseline: "items-baseline"
2793
+ };
2794
+ var justifyStyles = {
2795
+ start: "justify-start",
2796
+ center: "justify-center",
2797
+ end: "justify-end",
2798
+ between: "justify-between",
2799
+ around: "justify-around",
2800
+ evenly: "justify-evenly"
2801
+ };
2802
+ var Stack = ({
2803
+ direction = "vertical",
2804
+ gap = "md",
2805
+ align = "stretch",
2806
+ justify = "start",
2807
+ wrap = false,
2808
+ reverse = false,
2809
+ flex = false,
2810
+ className,
2811
+ style,
2812
+ children,
2813
+ as: Component = "div",
2814
+ onClick,
2815
+ onKeyDown,
2816
+ role,
2817
+ tabIndex,
2818
+ action,
2819
+ actionPayload,
2820
+ responsive = false
2821
+ }) => {
2822
+ const eventBus = useEventBus();
2823
+ const handleClick = (e) => {
2824
+ if (action) {
2825
+ eventBus.emit(`UI:${action}`, actionPayload ?? {});
2826
+ }
2827
+ onClick?.(e);
2828
+ };
2829
+ const isHorizontal = direction === "horizontal";
2830
+ const directionClass = responsive && isHorizontal ? reverse ? "flex-col-reverse md:flex-row-reverse" : "flex-col md:flex-row" : isHorizontal ? reverse ? "flex-row-reverse" : "flex-row" : reverse ? "flex-col-reverse" : "flex-col";
2831
+ const Comp = Component;
2832
+ return /* @__PURE__ */ jsxRuntime.jsx(
2833
+ Comp,
2834
+ {
2835
+ className: cn(
2836
+ "flex",
2837
+ directionClass,
2838
+ gapStyles[gap],
2839
+ alignStyles[align],
2840
+ justifyStyles[justify],
2841
+ wrap && "flex-wrap",
2842
+ flex && "flex-1",
2843
+ className
2844
+ ),
2845
+ style,
2846
+ onClick: action || onClick ? handleClick : void 0,
2847
+ onKeyDown,
2848
+ role,
2849
+ tabIndex,
2850
+ children
2851
+ }
2852
+ );
2853
+ };
2854
+ var VStack = (props) => /* @__PURE__ */ jsxRuntime.jsx(Stack, { direction: "vertical", ...props });
2855
+ var HStack = (props) => /* @__PURE__ */ jsxRuntime.jsx(Stack, { direction: "horizontal", ...props });
2856
+ var variantStyles = {
2857
+ h1: "text-4xl font-bold tracking-tight text-[var(--color-foreground)]",
2858
+ h2: "text-3xl font-bold tracking-tight text-[var(--color-foreground)]",
2859
+ h3: "text-2xl font-bold text-[var(--color-foreground)]",
2860
+ h4: "text-xl font-bold text-[var(--color-foreground)]",
2861
+ h5: "text-lg font-bold text-[var(--color-foreground)]",
2862
+ h6: "text-base font-bold text-[var(--color-foreground)]",
2863
+ heading: "text-2xl font-bold text-[var(--color-foreground)]",
2864
+ subheading: "text-lg font-semibold text-[var(--color-foreground)]",
2865
+ body1: "text-base font-normal text-[var(--color-foreground)]",
2866
+ body2: "text-sm font-normal text-[var(--color-foreground)]",
2867
+ body: "text-base font-normal text-[var(--color-foreground)]",
2868
+ caption: "text-xs font-normal text-[var(--color-muted-foreground)]",
2869
+ overline: "text-xs uppercase tracking-wide font-bold text-[var(--color-muted-foreground)]",
2870
+ small: "text-sm font-normal text-[var(--color-foreground)]",
2871
+ large: "text-lg font-medium text-[var(--color-foreground)]",
2872
+ label: "text-sm font-medium text-[var(--color-foreground)]"
2873
+ };
2874
+ var colorStyles = {
2875
+ primary: "text-[var(--color-foreground)]",
2876
+ secondary: "text-[var(--color-muted-foreground)]",
2877
+ muted: "text-[var(--color-muted-foreground)]",
2878
+ error: "text-[var(--color-error)]",
2879
+ success: "text-[var(--color-success)]",
2880
+ warning: "text-[var(--color-warning)]",
2881
+ inherit: "text-inherit"
2882
+ };
2883
+ var weightStyles = {
2884
+ light: "font-light",
2885
+ normal: "font-normal",
2886
+ medium: "font-medium",
2887
+ semibold: "font-semibold",
2888
+ bold: "font-bold"
2889
+ };
2890
+ var defaultElements = {
2891
+ h1: "h1",
2892
+ h2: "h2",
2893
+ h3: "h3",
2894
+ h4: "h4",
2895
+ h5: "h5",
2896
+ h6: "h6",
2897
+ heading: "h2",
2898
+ subheading: "h3",
2899
+ body1: "p",
2900
+ body2: "p",
2901
+ body: "p",
2902
+ caption: "span",
2903
+ overline: "span",
2904
+ small: "span",
2905
+ large: "p",
2906
+ label: "span"
2907
+ };
2908
+ var typographySizeStyles = {
2909
+ xs: "text-xs",
2910
+ sm: "text-sm",
2911
+ md: "text-base",
2912
+ lg: "text-lg",
2913
+ xl: "text-xl",
2914
+ "2xl": "text-2xl",
2915
+ "3xl": "text-3xl"
2916
+ };
2917
+ var overflowStyles2 = {
2918
+ visible: "overflow-visible",
2919
+ hidden: "overflow-hidden",
2920
+ wrap: "break-words overflow-hidden",
2921
+ "clamp-2": "overflow-hidden line-clamp-2",
2922
+ "clamp-3": "overflow-hidden line-clamp-3"
2923
+ };
2924
+ var Typography = ({
2925
+ variant: variantProp,
2926
+ level,
2927
+ color = "primary",
2928
+ align,
2929
+ weight,
2930
+ size,
2931
+ truncate = false,
2932
+ overflow,
2933
+ as,
2934
+ id,
2935
+ className,
2936
+ style,
2937
+ content,
2938
+ children
2939
+ }) => {
2940
+ const variant = variantProp ?? (level ? `h${level}` : "body1");
2941
+ const Component = as || defaultElements[variant];
2942
+ const Comp = Component;
2943
+ return /* @__PURE__ */ jsxRuntime.jsx(
2944
+ Comp,
2945
+ {
2946
+ id,
2947
+ className: cn(
2948
+ variantStyles[variant],
2949
+ colorStyles[color],
2950
+ weight && weightStyles[weight],
2951
+ size && typographySizeStyles[size],
2952
+ align && `text-${align}`,
2953
+ truncate && "truncate overflow-hidden text-ellipsis",
2954
+ overflow && overflowStyles2[overflow],
2955
+ className
2956
+ ),
2957
+ style,
2958
+ children: children ?? content
2959
+ }
2960
+ );
2961
+ };
2962
+ Typography.displayName = "Typography";
2963
+ var iconAliases = {
2964
+ "close": LucideIcons__namespace.X,
2965
+ "trash": LucideIcons__namespace.Trash2,
2966
+ "loader": LucideIcons__namespace.Loader2,
2967
+ "stop": LucideIcons__namespace.Square,
2968
+ "volume": LucideIcons__namespace.Volume2,
2969
+ "volume-off": LucideIcons__namespace.VolumeX,
2970
+ "refresh": LucideIcons__namespace.RefreshCw,
2971
+ "share": LucideIcons__namespace.Share2,
2972
+ "sort-asc": LucideIcons__namespace.ArrowUpNarrowWide,
2973
+ "sort-desc": LucideIcons__namespace.ArrowDownNarrowWide
2974
+ };
2975
+ function kebabToPascal(name) {
2976
+ return name.split("-").map((part) => {
2977
+ if (/^\d+$/.test(part)) return part;
2978
+ return part.charAt(0).toUpperCase() + part.slice(1);
2979
+ }).join("");
2980
+ }
2981
+ var resolvedCache = /* @__PURE__ */ new Map();
2982
+ function resolveIcon(name) {
2983
+ const cached = resolvedCache.get(name);
2984
+ if (cached) return cached;
2985
+ const resolved = doResolve(name);
2986
+ resolvedCache.set(name, resolved);
2987
+ return resolved;
2988
+ }
2989
+ function doResolve(name) {
2990
+ if (iconAliases[name]) return iconAliases[name];
2991
+ const pascalName = kebabToPascal(name);
2992
+ const directLookup = LucideIcons__namespace[pascalName];
2993
+ if (directLookup && typeof directLookup === "object") return directLookup;
2994
+ const asIs = LucideIcons__namespace[name];
2995
+ if (asIs && typeof asIs === "object") return asIs;
2996
+ return LucideIcons__namespace.HelpCircle;
2997
+ }
2998
+ var sizeClasses = {
2999
+ xs: "w-3 h-3",
3000
+ sm: "w-4 h-4",
3001
+ md: "w-5 h-5",
3002
+ lg: "w-6 h-6",
3003
+ xl: "w-8 h-8"
3004
+ };
3005
+ var animationClasses = {
3006
+ none: "",
3007
+ spin: "animate-spin",
3008
+ pulse: "animate-pulse"
3009
+ };
3010
+ var Icon = ({
3011
+ icon,
3012
+ name,
3013
+ size = "md",
3014
+ color,
3015
+ animation = "none",
3016
+ className,
3017
+ strokeWidth,
3018
+ style
3019
+ }) => {
3020
+ const IconComponent = icon ?? (name ? resolveIcon(name) : LucideIcons__namespace.HelpCircle);
3021
+ const effectiveStrokeWidth = strokeWidth ?? void 0;
3022
+ return /* @__PURE__ */ jsxRuntime.jsx(
3023
+ IconComponent,
3024
+ {
3025
+ className: cn(
3026
+ sizeClasses[size],
3027
+ animationClasses[animation],
3028
+ // Use theme's icon color or provided color
3029
+ color ? color : "text-[var(--icon-color,currentColor)]",
3030
+ className
3031
+ ),
3032
+ strokeWidth: effectiveStrokeWidth,
3033
+ style: {
3034
+ ...effectiveStrokeWidth === void 0 ? { strokeWidth: "var(--icon-stroke-width, 2)" } : {},
3035
+ ...style
3036
+ }
3037
+ }
3038
+ );
3039
+ };
3040
+ Icon.displayName = "Icon";
3041
+ var variantStyles2 = {
3042
+ primary: [
3043
+ "bg-[var(--color-primary)] text-[var(--color-primary-foreground)]",
3044
+ "border-[length:var(--border-width)] border-[var(--color-border)]",
3045
+ "shadow-[var(--shadow-sm)]",
3046
+ "hover:bg-[var(--color-primary-hover)] hover:shadow-[var(--shadow-hover)]",
3047
+ "active:scale-[var(--active-scale)] active:shadow-[var(--shadow-active)]"
3048
+ ].join(" "),
3049
+ secondary: [
3050
+ "bg-[var(--color-secondary)] text-[var(--color-secondary-foreground)]",
3051
+ "border-[length:var(--border-width-thin)] border-[var(--color-border)]",
3052
+ "hover:bg-[var(--color-secondary-hover)]",
3053
+ "active:scale-[var(--active-scale)]"
3054
+ ].join(" "),
3055
+ ghost: [
3056
+ "bg-transparent text-[var(--color-muted-foreground)]",
3057
+ "hover:text-[var(--color-foreground)] hover:bg-[var(--color-muted)]",
3058
+ "active:scale-[var(--active-scale)]"
3059
+ ].join(" "),
3060
+ danger: [
3061
+ "bg-[var(--color-surface)] text-[var(--color-error)]",
3062
+ "border-[length:var(--border-width)] border-[var(--color-error)]",
3063
+ "shadow-[var(--shadow-sm)]",
3064
+ "hover:bg-[var(--color-error)] hover:text-[var(--color-error-foreground)] hover:shadow-[var(--shadow-hover)]",
3065
+ "active:scale-[var(--active-scale)] active:shadow-[var(--shadow-active)]"
3066
+ ].join(" "),
3067
+ success: [
3068
+ "bg-[var(--color-surface)] text-[var(--color-success)]",
3069
+ "border-[length:var(--border-width)] border-[var(--color-success)]",
3070
+ "shadow-[var(--shadow-sm)]",
3071
+ "hover:bg-[var(--color-success)] hover:text-[var(--color-success-foreground)] hover:shadow-[var(--shadow-hover)]",
3072
+ "active:scale-[var(--active-scale)] active:shadow-[var(--shadow-active)]"
3073
+ ].join(" "),
3074
+ warning: [
3075
+ "bg-[var(--color-surface)] text-[var(--color-warning)]",
3076
+ "border-[length:var(--border-width)] border-[var(--color-warning)]",
3077
+ "shadow-[var(--shadow-sm)]",
3078
+ "hover:bg-[var(--color-warning)] hover:text-[var(--color-warning-foreground)] hover:shadow-[var(--shadow-hover)]",
3079
+ "active:scale-[var(--active-scale)] active:shadow-[var(--shadow-active)]"
3080
+ ].join(" "),
3081
+ // "default" is an alias for secondary
3082
+ default: [
3083
+ "bg-[var(--color-secondary)] text-[var(--color-secondary-foreground)]",
3084
+ "border-[length:var(--border-width-thin)] border-[var(--color-border)]",
3085
+ "hover:bg-[var(--color-secondary-hover)]",
3086
+ "active:scale-[var(--active-scale)]"
3087
+ ].join(" ")
3088
+ };
3089
+ variantStyles2.destructive = variantStyles2.danger;
3090
+ var sizeStyles2 = {
3091
+ sm: "px-3 py-1.5 text-sm",
3092
+ md: "px-4 py-2 text-sm",
3093
+ lg: "px-6 py-3 text-base"
3094
+ };
3095
+ var iconSizeStyles = {
3096
+ sm: "h-3.5 w-3.5",
3097
+ md: "h-4 w-4",
3098
+ lg: "h-5 w-5"
3099
+ };
3100
+ function resolveIconProp(value, sizeClass) {
3101
+ if (!value) return null;
3102
+ if (typeof value === "string") {
3103
+ const Resolved = resolveIcon(value);
3104
+ return Resolved ? /* @__PURE__ */ jsxRuntime.jsx(Resolved, { className: sizeClass }) : null;
3105
+ }
3106
+ if (typeof value === "function") {
3107
+ const IconComp = value;
3108
+ return /* @__PURE__ */ jsxRuntime.jsx(IconComp, { className: sizeClass });
3109
+ }
3110
+ if (React5__default.default.isValidElement(value)) {
3111
+ return value;
3112
+ }
3113
+ if (typeof value === "object" && value !== null && "render" in value) {
3114
+ const IconComp = value;
3115
+ return /* @__PURE__ */ jsxRuntime.jsx(IconComp, { className: sizeClass });
3116
+ }
3117
+ return value;
3118
+ }
3119
+ var Button = React5__default.default.forwardRef(
3120
+ ({
3121
+ className,
3122
+ variant = "primary",
3123
+ size = "md",
3124
+ isLoading = false,
3125
+ disabled,
3126
+ leftIcon,
3127
+ rightIcon,
3128
+ icon: iconProp,
3129
+ iconRight: iconRightProp,
3130
+ action,
3131
+ actionPayload,
3132
+ label,
3133
+ children,
3134
+ onClick,
3135
+ ...props
3136
+ }, ref) => {
3137
+ const eventBus = useEventBus();
3138
+ const leftIconValue = leftIcon || iconProp;
3139
+ const rightIconValue = rightIcon || iconRightProp;
3140
+ const resolvedLeftIcon = resolveIconProp(leftIconValue, iconSizeStyles[size]);
3141
+ const resolvedRightIcon = resolveIconProp(rightIconValue, iconSizeStyles[size]);
3142
+ const handleClick = (e) => {
3143
+ if (action) {
3144
+ eventBus.emit(`UI:${action}`, actionPayload ?? {});
3145
+ }
3146
+ onClick?.(e);
3147
+ };
3148
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3149
+ "button",
3150
+ {
3151
+ ref,
3152
+ disabled: disabled || isLoading,
3153
+ className: cn(
3154
+ "inline-flex items-center justify-center gap-2",
3155
+ "font-[var(--font-weight-medium)]",
3156
+ "rounded-[var(--radius-sm)]",
3157
+ "transition-all duration-[var(--transition-normal)]",
3158
+ "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-[var(--color-ring)] focus:ring-offset-[length:var(--focus-ring-offset)]",
3159
+ "disabled:opacity-50 disabled:cursor-not-allowed",
3160
+ variantStyles2[variant],
3161
+ sizeStyles2[size],
3162
+ className
3163
+ ),
3164
+ onClick: handleClick,
3165
+ ...props,
3166
+ "data-testid": props["data-testid"] ?? (action ? `action-${action}` : void 0),
3167
+ children: [
3168
+ isLoading ? /* @__PURE__ */ jsxRuntime.jsx(LucideIcons.Loader2, { className: "h-4 w-4 animate-spin" }) : resolvedLeftIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0", children: resolvedLeftIcon }),
3169
+ children || label,
3170
+ resolvedRightIcon && !isLoading && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-shrink-0", children: resolvedRightIcon })
3171
+ ]
3172
+ }
3173
+ );
3174
+ }
3175
+ );
3176
+ Button.displayName = "Button";
3177
+ var variantStyles3 = {
3178
+ default: [
3179
+ "bg-[var(--color-muted)] text-[var(--color-foreground)]",
3180
+ "border-[length:var(--border-width-thin)] border-[var(--color-border)]"
3181
+ ].join(" "),
3182
+ primary: "bg-[var(--color-primary)] text-[var(--color-primary-foreground)]",
3183
+ secondary: "bg-[var(--color-secondary)] text-[var(--color-secondary-foreground)]",
3184
+ success: [
3185
+ "bg-[var(--color-surface)] text-[var(--color-success)]",
3186
+ "border-[length:var(--border-width)] border-[var(--color-success)]"
3187
+ ].join(" "),
3188
+ warning: [
3189
+ "bg-[var(--color-surface)] text-[var(--color-warning)]",
3190
+ "border-[length:var(--border-width)] border-[var(--color-warning)]"
3191
+ ].join(" "),
3192
+ danger: [
3193
+ "bg-[var(--color-surface)] text-[var(--color-error)]",
3194
+ "border-[length:var(--border-width)] border-[var(--color-error)]"
3195
+ ].join(" "),
3196
+ error: [
3197
+ "bg-[var(--color-surface)] text-[var(--color-error)]",
3198
+ "border-[length:var(--border-width)] border-[var(--color-error)]"
3199
+ ].join(" "),
3200
+ info: [
3201
+ "bg-[var(--color-surface)] text-[var(--color-info)]",
3202
+ "border-[length:var(--border-width)] border-[var(--color-info)]"
3203
+ ].join(" "),
3204
+ neutral: [
3205
+ "bg-[var(--color-muted)] text-[var(--color-muted-foreground)]",
3206
+ "border-[length:var(--border-width-thin)] border-[var(--color-border)]"
3207
+ ].join(" ")
3208
+ };
3209
+ var sizeStyles3 = {
3210
+ sm: "px-2 py-0.5 text-xs",
3211
+ md: "px-2.5 py-1 text-sm",
3212
+ lg: "px-3 py-1.5 text-base"
3213
+ };
3214
+ var Badge = React5__default.default.forwardRef(
3215
+ ({ className, variant = "default", size = "sm", amount, label, icon, children, ...props }, ref) => {
3216
+ const iconSizes = { sm: "w-3 h-3", md: "w-3.5 h-3.5", lg: "w-4 h-4" };
3217
+ const resolvedIcon = typeof icon === "string" ? (() => {
3218
+ const I = resolveIcon(icon);
3219
+ return I ? /* @__PURE__ */ jsxRuntime.jsx(I, { className: iconSizes[size] }) : null;
3220
+ })() : icon;
3221
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3222
+ "span",
3223
+ {
3224
+ ref,
3225
+ className: cn(
3226
+ "inline-flex items-center gap-1 font-bold rounded-[var(--radius-sm)]",
3227
+ variantStyles3[variant],
3228
+ sizeStyles3[size],
3229
+ className
3230
+ ),
3231
+ ...props,
3232
+ children: [
3233
+ resolvedIcon,
3234
+ children || (amount != null ? `${label ? `${label} ` : ""}${amount}` : label)
3235
+ ]
3236
+ }
3237
+ );
3238
+ }
3239
+ );
3240
+ Badge.displayName = "Badge";
3241
+ var variantStyles4 = {
3242
+ default: [
3243
+ "bg-[var(--color-card)] border-none",
3244
+ "transition-all duration-[var(--transition-normal)]",
3245
+ "hover:shadow-[var(--shadow-hover)] hover:-translate-y-0.5"
3246
+ ].join(" "),
3247
+ bordered: [
3248
+ "bg-[var(--color-card)]",
3249
+ "border-[length:var(--border-width)] border-[var(--color-border)]",
3250
+ "shadow-none",
3251
+ "transition-all duration-[var(--transition-normal)]",
3252
+ "hover:shadow-[var(--shadow-hover)] hover:-translate-y-0.5"
3253
+ ].join(" "),
3254
+ elevated: [
3255
+ "bg-[var(--color-card)]",
3256
+ "border-[length:var(--border-width)] border-[var(--color-border)]",
3257
+ "shadow-[var(--shadow-main)]",
3258
+ "transition-all duration-[var(--transition-normal)]",
3259
+ "hover:shadow-[var(--shadow-hover)] hover:-translate-y-0.5"
3260
+ ].join(" "),
3261
+ // Interactive variant with theme-specific hover effects
3262
+ interactive: [
3263
+ "bg-[var(--color-card)]",
3264
+ "border-[length:var(--border-width)] border-[var(--color-border)]",
3265
+ "shadow-[var(--shadow-main)]",
3266
+ "cursor-pointer",
3267
+ "transition-all duration-[var(--transition-normal)]",
3268
+ "hover:shadow-[var(--shadow-hover)]"
3269
+ ].join(" ")
3270
+ };
3271
+ var paddingStyles2 = {
3272
+ none: "",
3273
+ sm: "p-3",
3274
+ md: "p-4",
3275
+ lg: "p-6"
3276
+ };
3277
+ var shadowStyles2 = {
3278
+ none: "shadow-none",
3279
+ sm: "shadow-[var(--shadow-sm)]",
3280
+ md: "shadow-[var(--shadow-main)]",
3281
+ lg: "shadow-[var(--shadow-lg)]"
3282
+ };
3283
+ var Card = React5__default.default.forwardRef(
3284
+ ({
3285
+ className,
3286
+ variant = "bordered",
3287
+ padding = "md",
3288
+ title,
3289
+ subtitle,
3290
+ shadow,
3291
+ children,
3292
+ ...props
3293
+ }, ref) => {
3294
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3295
+ "div",
3296
+ {
3297
+ ref,
3298
+ className: cn(
3299
+ "rounded-[var(--radius-md)]",
3300
+ "transition-all duration-[var(--transition-normal)]",
3301
+ variantStyles4[variant],
3302
+ paddingStyles2[padding],
3303
+ shadow && shadowStyles2[shadow],
3304
+ className
3305
+ ),
3306
+ ...props,
3307
+ children: [
3308
+ (title || subtitle) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-4", children: [
3309
+ title && /* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-lg text-[var(--color-card-foreground)] font-[var(--font-weight-bold)]", children: title }),
3310
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-[var(--color-muted-foreground)] mt-1", children: subtitle })
3311
+ ] }),
3312
+ children
3313
+ ]
3314
+ }
3315
+ );
3316
+ }
3317
+ );
3318
+ Card.displayName = "Card";
3319
+ var CardHeader = React5__default.default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn("mb-4", className), ...props }));
3320
+ CardHeader.displayName = "CardHeader";
3321
+ var CardTitle = React5__default.default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
3322
+ "h3",
3323
+ {
3324
+ ref,
3325
+ className: cn(
3326
+ "text-lg text-[var(--color-card-foreground)]",
3327
+ "font-[var(--font-weight-bold)]",
3328
+ className
3329
+ ),
3330
+ ...props
3331
+ }
3332
+ ));
3333
+ CardTitle.displayName = "CardTitle";
3334
+ var CardContent = React5__default.default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx("div", { ref, className: cn("", className), ...props }));
3335
+ CardContent.displayName = "CardContent";
3336
+ var CardBody = CardContent;
3337
+ CardBody.displayName = "CardBody";
3338
+ var CardFooter = React5__default.default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsx(
3339
+ "div",
3340
+ {
3341
+ ref,
3342
+ className: cn("mt-4 flex items-center", className),
3343
+ ...props
3344
+ }
3345
+ ));
3346
+ CardFooter.displayName = "CardFooter";
3347
+ var variantStyles5 = {
3348
+ solid: "border-solid",
3349
+ dashed: "border-dashed",
3350
+ dotted: "border-dotted"
3351
+ };
3352
+ var Divider = ({
3353
+ orientation = "horizontal",
3354
+ label,
3355
+ variant = "solid",
3356
+ className
3357
+ }) => {
3358
+ if (orientation === "vertical") {
3359
+ return /* @__PURE__ */ jsxRuntime.jsx(
3360
+ "div",
3361
+ {
3362
+ className: cn(
3363
+ "w-0 h-full border-l border-[var(--color-border)]",
3364
+ variantStyles5[variant],
3365
+ className
3366
+ ),
3367
+ role: "separator",
3368
+ "aria-orientation": "vertical"
3369
+ }
3370
+ );
3371
+ }
3372
+ if (label) {
3373
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3374
+ "div",
3375
+ {
3376
+ className: cn("flex items-center gap-3 my-4", className),
3377
+ role: "separator",
3378
+ "aria-label": label,
3379
+ children: [
3380
+ /* @__PURE__ */ jsxRuntime.jsx(
3381
+ "div",
3382
+ {
3383
+ className: cn(
3384
+ "flex-1 h-0 border-t border-[var(--color-border)]",
3385
+ variantStyles5[variant]
3386
+ )
3387
+ }
3388
+ ),
3389
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-[var(--color-foreground)] font-bold uppercase tracking-wide", children: label }),
3390
+ /* @__PURE__ */ jsxRuntime.jsx(
3391
+ "div",
3392
+ {
3393
+ className: cn(
3394
+ "flex-1 h-0 border-t border-[var(--color-border)]",
3395
+ variantStyles5[variant]
3396
+ )
3397
+ }
3398
+ )
3399
+ ]
3400
+ }
3401
+ );
3402
+ }
3403
+ return /* @__PURE__ */ jsxRuntime.jsx(
3404
+ "div",
3405
+ {
3406
+ className: cn(
3407
+ "w-full h-0 border-t border-[var(--color-border)] my-4",
3408
+ variantStyles5[variant],
3409
+ className
3410
+ ),
3411
+ role: "separator",
3412
+ "aria-orientation": "horizontal"
3413
+ }
3414
+ );
3415
+ };
3416
+ Divider.displayName = "Divider";
3417
+ var Center = ({
3418
+ inline = false,
3419
+ horizontal = true,
3420
+ vertical = true,
3421
+ minHeight,
3422
+ fullHeight = false,
3423
+ fullWidth = false,
3424
+ className,
3425
+ style,
3426
+ children,
3427
+ as: Component = "div"
3428
+ }) => {
3429
+ const mergedStyle = minHeight ? { minHeight, ...style } : style;
3430
+ const Comp = Component;
3431
+ return /* @__PURE__ */ jsxRuntime.jsx(
3432
+ Comp,
3433
+ {
3434
+ className: cn(
3435
+ inline ? "inline-flex" : "flex",
3436
+ horizontal && "justify-center",
3437
+ vertical && "items-center",
3438
+ fullHeight && "h-full",
3439
+ fullWidth && "w-full",
3440
+ className
3441
+ ),
3442
+ style: mergedStyle,
3443
+ children
3444
+ }
3445
+ );
3446
+ };
3447
+ var horizontalSizes = {
3448
+ xs: "w-1",
3449
+ sm: "w-2",
3450
+ md: "w-4",
3451
+ lg: "w-6",
3452
+ xl: "w-8",
3453
+ "2xl": "w-12"
3454
+ };
3455
+ var verticalSizes = {
3456
+ xs: "h-1",
3457
+ sm: "h-2",
3458
+ md: "h-4",
3459
+ lg: "h-6",
3460
+ xl: "h-8",
3461
+ "2xl": "h-12"
3462
+ };
3463
+ var Spacer = ({
3464
+ size = "auto",
3465
+ axis = "horizontal",
3466
+ className
3467
+ }) => {
3468
+ if (size === "auto") {
3469
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex-1", className), "aria-hidden": "true" });
3470
+ }
3471
+ const sizeClass = axis === "horizontal" ? horizontalSizes[size] : verticalSizes[size];
3472
+ return /* @__PURE__ */ jsxRuntime.jsx(
3473
+ "div",
3474
+ {
3475
+ className: cn("flex-shrink-0", sizeClass, className),
3476
+ "aria-hidden": "true"
3477
+ }
3478
+ );
3479
+ };
3480
+ var backgroundClasses = {
3481
+ default: "",
3482
+ alt: "bg-[var(--color-surface)]",
3483
+ dark: "bg-[var(--color-foreground)] text-[var(--color-background)]",
3484
+ gradient: [
3485
+ "bg-gradient-to-b",
3486
+ "from-[var(--color-primary)]/5",
3487
+ "to-[var(--color-secondary)]/5"
3488
+ ].join(" ")
3489
+ };
3490
+ var paddingClasses = {
3491
+ sm: "py-12",
3492
+ md: "py-16",
3493
+ lg: "py-24"
3494
+ };
3495
+ var ContentSection = React5__default.default.forwardRef(
3496
+ ({ children, background = "default", padding = "lg", id, className }, ref) => {
3497
+ return /* @__PURE__ */ jsxRuntime.jsx(
3498
+ Box,
3499
+ {
3500
+ ref,
3501
+ as: "section",
3502
+ id,
3503
+ className: cn(
3504
+ backgroundClasses[background],
3505
+ paddingClasses[padding],
3506
+ className
3507
+ ),
3508
+ children: /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "mx-auto max-w-7xl px-4 sm:px-6 lg:px-8", children })
3509
+ }
3510
+ );
3511
+ }
3512
+ );
3513
+ ContentSection.displayName = "ContentSection";
3514
+ var InstallBox = ({
3515
+ command,
3516
+ label,
3517
+ className
3518
+ }) => {
3519
+ const [copied, setCopied] = React5.useState(false);
3520
+ const handleCopy = React5.useCallback(() => {
3521
+ void navigator.clipboard.writeText(command);
3522
+ setCopied(true);
3523
+ const timer = setTimeout(() => setCopied(false), 2e3);
3524
+ return () => clearTimeout(timer);
3525
+ }, [command]);
3526
+ return /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: cn("inline-block", className), children: [
3527
+ label && /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", className: "mb-1", children: label }),
3528
+ /* @__PURE__ */ jsxRuntime.jsx(
3529
+ Box,
3530
+ {
3531
+ className: cn(
3532
+ "bg-[var(--color-foreground)]",
3533
+ "rounded-[var(--radius-md)]",
3534
+ "border-[length:var(--border-width)] border-[var(--color-border)]"
3535
+ ),
3536
+ padding: "md",
3537
+ children: /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "md", align: "center", children: [
3538
+ /* @__PURE__ */ jsxRuntime.jsx(
3539
+ Typography,
3540
+ {
3541
+ variant: "body2",
3542
+ className: "font-mono flex-1 min-w-0 text-[var(--color-background)] select-all",
3543
+ truncate: true,
3544
+ children: command
3545
+ }
3546
+ ),
3547
+ /* @__PURE__ */ jsxRuntime.jsx(
3548
+ Button,
3549
+ {
3550
+ variant: "ghost",
3551
+ size: "md",
3552
+ onClick: handleCopy,
3553
+ className: "flex-shrink-0 text-[var(--color-background)] hover:text-[var(--color-background)]",
3554
+ children: copied ? "Copied!" : "Copy"
3555
+ }
3556
+ )
3557
+ ] })
3558
+ }
3559
+ )
3560
+ ] });
3561
+ };
3562
+ InstallBox.displayName = "InstallBox";
3563
+ var tagVariantMap = {
3564
+ primary: "primary",
3565
+ secondary: "secondary",
3566
+ accent: "info"
3567
+ };
3568
+ var MarketingImage = ({ src, alt, className }) => /* @__PURE__ */ jsxRuntime.jsx(
3569
+ Box,
3570
+ {
3571
+ className: cn(
3572
+ "overflow-hidden rounded-[var(--radius-lg)] bg-cover bg-center bg-no-repeat",
3573
+ className
3574
+ ),
3575
+ style: { backgroundImage: `url(${src})` },
3576
+ role: "img",
3577
+ "aria-label": alt
3578
+ }
3579
+ );
3580
+ MarketingImage.displayName = "MarketingImage";
3581
+ var HeroSection = ({
3582
+ tag,
3583
+ tagVariant = "primary",
3584
+ title,
3585
+ titleAccent,
3586
+ subtitle,
3587
+ primaryAction,
3588
+ secondaryAction,
3589
+ installCommand,
3590
+ image,
3591
+ imagePosition = "below",
3592
+ background = "subtle",
3593
+ align = "center",
3594
+ backgroundElement,
3595
+ children,
3596
+ className
3597
+ }) => {
3598
+ const isCenter = align === "center";
3599
+ const isDark = background === "dark";
3600
+ const titleNode = titleAccent ? /* @__PURE__ */ jsxRuntime.jsxs(
3601
+ Typography,
3602
+ {
3603
+ variant: "h1",
3604
+ align: isCenter ? "center" : "left",
3605
+ className: cn(
3606
+ "max-w-3xl leading-tight",
3607
+ isDark && "text-[var(--color-background)]"
3608
+ ),
3609
+ children: [
3610
+ title,
3611
+ " ",
3612
+ /* @__PURE__ */ jsxRuntime.jsx(
3613
+ Typography,
3614
+ {
3615
+ as: "span",
3616
+ variant: "h1",
3617
+ className: "text-[var(--color-primary)]",
3618
+ children: titleAccent
3619
+ }
3620
+ )
3621
+ ]
3622
+ }
3623
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
3624
+ Typography,
3625
+ {
3626
+ variant: "h1",
3627
+ align: isCenter ? "center" : "left",
3628
+ className: cn(
3629
+ "max-w-3xl leading-tight",
3630
+ isDark && "text-[var(--color-background)]"
3631
+ ),
3632
+ children: title
3633
+ }
3634
+ );
3635
+ const textContent = /* @__PURE__ */ jsxRuntime.jsxs(
3636
+ VStack,
3637
+ {
3638
+ gap: "lg",
3639
+ align: isCenter ? "center" : "start",
3640
+ className: cn(
3641
+ isCenter && "items-center",
3642
+ imagePosition === "right" ? "flex-1" : "w-full"
3643
+ ),
3644
+ children: [
3645
+ tag && /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: tagVariantMap[tagVariant] ?? "primary", size: "md", children: tag }),
3646
+ titleNode,
3647
+ /* @__PURE__ */ jsxRuntime.jsx(
3648
+ Typography,
3649
+ {
3650
+ variant: "body1",
3651
+ color: "muted",
3652
+ align: isCenter ? "center" : "left",
3653
+ className: "max-w-xl",
3654
+ children: subtitle
3655
+ }
3656
+ ),
3657
+ installCommand && /* @__PURE__ */ jsxRuntime.jsx(InstallBox, { command: installCommand }),
3658
+ (primaryAction || secondaryAction) && /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "md", align: "center", children: [
3659
+ primaryAction && /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "primary", size: "lg", children: primaryAction.label }),
3660
+ secondaryAction && /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "secondary", size: "lg", children: secondaryAction.label })
3661
+ ] }),
3662
+ children
3663
+ ]
3664
+ }
3665
+ );
3666
+ const imageNode = image && /* @__PURE__ */ jsxRuntime.jsx(
3667
+ MarketingImage,
3668
+ {
3669
+ src: image.src,
3670
+ alt: image.alt,
3671
+ className: cn(
3672
+ imagePosition === "right" ? "flex-1 min-h-[300px]" : "w-full max-w-3xl min-h-[400px]"
3673
+ )
3674
+ }
3675
+ );
3676
+ const innerContent = image && imagePosition === "right" ? /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "xl", align: "center", className: "w-full max-w-6xl", responsive: true, children: [
3677
+ textContent,
3678
+ imageNode
3679
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xl", align: isCenter ? "center" : "start", className: "w-full max-w-6xl", children: [
3680
+ textContent,
3681
+ image && imagePosition === "below" && imageNode
3682
+ ] });
3683
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3684
+ Box,
3685
+ {
3686
+ as: "header",
3687
+ className: cn(
3688
+ "w-full min-h-[60vh] flex items-center justify-center",
3689
+ "px-6 py-20",
3690
+ "relative overflow-hidden",
3691
+ className
3692
+ ),
3693
+ children: [
3694
+ backgroundElement,
3695
+ image && imagePosition === "background" && /* @__PURE__ */ jsxRuntime.jsx(
3696
+ MarketingImage,
3697
+ {
3698
+ src: image.src,
3699
+ alt: image.alt,
3700
+ className: "absolute inset-0 w-full h-full opacity-20"
3701
+ }
3702
+ ),
3703
+ /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "relative z-10 w-full flex justify-center", children: innerContent })
3704
+ ]
3705
+ }
3706
+ );
3707
+ };
3708
+ HeroSection.displayName = "HeroSection";
3709
+ var CTABanner = ({
3710
+ title,
3711
+ subtitle,
3712
+ primaryAction,
3713
+ secondaryAction,
3714
+ background = "alt",
3715
+ align = "center",
3716
+ className
3717
+ }) => {
3718
+ const handleAction = (href) => {
3719
+ window.open(href, "_blank", "noopener,noreferrer");
3720
+ };
3721
+ return /* @__PURE__ */ jsxRuntime.jsx(
3722
+ Box,
3723
+ {
3724
+ className: cn(
3725
+ "py-16 px-4",
3726
+ background === "alt" && "bg-[var(--color-surface)]",
3727
+ background === "dark" && "bg-[var(--color-surface)]",
3728
+ background === "gradient" && "bg-[var(--color-surface)]",
3729
+ background === "primary" && "bg-[var(--color-surface)]",
3730
+ className
3731
+ ),
3732
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
3733
+ VStack,
3734
+ {
3735
+ gap: "lg",
3736
+ align: align === "center" ? "center" : "start",
3737
+ className: "max-w-3xl mx-auto",
3738
+ children: [
3739
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h2", align, children: title }),
3740
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", color: "muted", align, children: subtitle }),
3741
+ (primaryAction || secondaryAction) && /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "md", align: "center", children: [
3742
+ primaryAction && /* @__PURE__ */ jsxRuntime.jsx(
3743
+ Button,
3744
+ {
3745
+ variant: "primary",
3746
+ size: "lg",
3747
+ onClick: () => handleAction(primaryAction.href),
3748
+ children: primaryAction.label
3749
+ }
3750
+ ),
3751
+ secondaryAction && /* @__PURE__ */ jsxRuntime.jsx(
3752
+ Button,
3753
+ {
3754
+ variant: "secondary",
3755
+ size: "lg",
3756
+ onClick: () => handleAction(secondaryAction.href),
3757
+ children: secondaryAction.label
3758
+ }
3759
+ )
3760
+ ] })
3761
+ ]
3762
+ }
3763
+ )
3764
+ }
3765
+ );
3766
+ };
3767
+ CTABanner.displayName = "CTABanner";
3768
+ var iconSizeMap = {
3769
+ sm: "lg",
3770
+ md: "xl",
3771
+ lg: "xl"
3772
+ };
3773
+ var gapMap = {
3774
+ sm: "sm",
3775
+ md: "md",
3776
+ lg: "lg"
3777
+ };
3778
+ var FeatureCard = ({
3779
+ icon,
3780
+ title,
3781
+ description,
3782
+ href,
3783
+ linkLabel = "Learn more",
3784
+ variant = "bordered",
3785
+ size = "md",
3786
+ className
3787
+ }) => {
3788
+ const renderIcon = () => {
3789
+ if (!icon) return null;
3790
+ if (typeof icon === "string") {
3791
+ return /* @__PURE__ */ jsxRuntime.jsx(
3792
+ Icon,
3793
+ {
3794
+ name: icon,
3795
+ size: iconSizeMap[size],
3796
+ className: "text-[var(--color-primary)]"
3797
+ }
3798
+ );
3799
+ }
3800
+ return icon;
3801
+ };
3802
+ const handleLinkClick = () => {
3803
+ if (href) {
3804
+ window.open(href, "_blank", "noopener,noreferrer");
3805
+ }
3806
+ };
3807
+ return /* @__PURE__ */ jsxRuntime.jsx(
3808
+ Card,
3809
+ {
3810
+ variant,
3811
+ padding: size,
3812
+ className: cn(
3813
+ variant === "interactive" && "hover:border-[var(--color-primary)]",
3814
+ className
3815
+ ),
3816
+ onClick: variant === "interactive" && href ? handleLinkClick : void 0,
3817
+ children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: gapMap[size], align: "start", children: [
3818
+ renderIcon(),
3819
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", className: size === "sm" ? "text-base" : void 0, children: title }),
3820
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", color: "muted", children: description }),
3821
+ href && variant !== "interactive" && /* @__PURE__ */ jsxRuntime.jsx(
3822
+ Button,
3823
+ {
3824
+ variant: "ghost",
3825
+ size: "sm",
3826
+ onClick: handleLinkClick,
3827
+ className: "text-[var(--color-primary)] -ml-2",
3828
+ children: linkLabel
3829
+ }
3830
+ )
3831
+ ] })
3832
+ }
3833
+ );
3834
+ };
3835
+ FeatureCard.displayName = "FeatureCard";
3836
+ var gapStyles2 = {
3837
+ none: "gap-0",
3838
+ xs: "gap-1",
3839
+ sm: "gap-2",
3840
+ md: "gap-4",
3841
+ lg: "gap-6",
3842
+ xl: "gap-8"
3843
+ };
3844
+ var colStyles = {
3845
+ 1: "grid-cols-1",
3846
+ 2: "grid-cols-2",
3847
+ 3: "grid-cols-3",
3848
+ 4: "grid-cols-4",
3849
+ 5: "grid-cols-5",
3850
+ 6: "grid-cols-6"
3851
+ };
3852
+ var SimpleGrid = ({
3853
+ minChildWidth = 250,
3854
+ maxCols,
3855
+ cols,
3856
+ gap = "md",
3857
+ className,
3858
+ children
3859
+ }) => {
3860
+ if (cols) {
3861
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("grid", colStyles[cols], gapStyles2[gap], className), children });
3862
+ }
3863
+ const minWidth = typeof minChildWidth === "number" ? `${minChildWidth}px` : minChildWidth;
3864
+ const templateColumns = maxCols ? `repeat(auto-fit, minmax(min(${minWidth}, 100%), 1fr))` : `repeat(auto-fit, minmax(${minWidth}, 1fr))`;
3865
+ return /* @__PURE__ */ jsxRuntime.jsx(
3866
+ "div",
3867
+ {
3868
+ className: cn("grid", gapStyles2[gap], className),
3869
+ style: {
3870
+ gridTemplateColumns: templateColumns,
3871
+ // Limit max columns if specified
3872
+ ...maxCols && { maxWidth: `calc(${maxCols} * (${minWidth} + var(--gap, 1rem)))` }
3873
+ },
3874
+ children
3875
+ }
3876
+ );
3877
+ };
3878
+ SimpleGrid.displayName = "SimpleGrid";
3879
+ var FeatureGrid = ({
3880
+ items,
3881
+ columns = 3,
3882
+ gap = "md",
3883
+ className
3884
+ }) => {
3885
+ return /* @__PURE__ */ jsxRuntime.jsx(
3886
+ SimpleGrid,
3887
+ {
3888
+ cols: columns,
3889
+ gap,
3890
+ className: cn(className),
3891
+ children: items.map((item, index) => /* @__PURE__ */ jsxRuntime.jsx(FeatureCard, { ...item }, `${item.title}-${index}`))
3892
+ }
3893
+ );
3894
+ };
3895
+ FeatureGrid.displayName = "FeatureGrid";
3896
+ var PricingCard = ({
3897
+ name,
3898
+ price,
3899
+ description,
3900
+ features,
3901
+ action,
3902
+ highlighted = false,
3903
+ badge,
3904
+ className
3905
+ }) => {
3906
+ return /* @__PURE__ */ jsxRuntime.jsx(
3907
+ Card,
3908
+ {
3909
+ variant: highlighted ? "elevated" : "bordered",
3910
+ padding: "lg",
3911
+ className: cn(
3912
+ "flex flex-col h-full",
3913
+ "hover:-translate-y-1 transition-all",
3914
+ highlighted && [
3915
+ "border-[length:2px] border-[var(--color-primary)]",
3916
+ "shadow-[var(--shadow-lg)]",
3917
+ "scale-[1.05]",
3918
+ "ring-2 ring-[var(--color-primary)]"
3919
+ ],
3920
+ className
3921
+ ),
3922
+ children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "md", className: "flex-1", children: [
3923
+ badge && /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "primary", size: "sm", children: badge }),
3924
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h3", children: name }),
3925
+ /* @__PURE__ */ jsxRuntime.jsx(
3926
+ Typography,
3927
+ {
3928
+ variant: "h2",
3929
+ className: "text-[var(--color-primary)] font-bold",
3930
+ children: price
3931
+ }
3932
+ ),
3933
+ description && /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", color: "muted", children: description }),
3934
+ /* @__PURE__ */ jsxRuntime.jsx(Divider, {}),
3935
+ /* @__PURE__ */ jsxRuntime.jsx(VStack, { gap: "sm", children: features.map((feature) => /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", align: "center", children: [
3936
+ /* @__PURE__ */ jsxRuntime.jsx(
3937
+ Icon,
3938
+ {
3939
+ icon: LucideIcons.Check,
3940
+ size: "sm",
3941
+ className: "flex-shrink-0 text-[var(--color-success)]"
3942
+ }
3943
+ ),
3944
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", children: feature })
3945
+ ] }, feature)) }),
3946
+ /* @__PURE__ */ jsxRuntime.jsx(Spacer, {}),
3947
+ /* @__PURE__ */ jsxRuntime.jsx(
3948
+ Button,
3949
+ {
3950
+ variant: highlighted ? "primary" : "secondary",
3951
+ size: "lg",
3952
+ className: "w-full",
3953
+ children: action.label
3954
+ }
3955
+ )
3956
+ ] })
3957
+ }
3958
+ );
3959
+ };
3960
+ PricingCard.displayName = "PricingCard";
3961
+ var PricingGrid = ({
3962
+ plans,
3963
+ className
3964
+ }) => {
3965
+ const cols = Math.min(plans.length, 4);
3966
+ return /* @__PURE__ */ jsxRuntime.jsx(
3967
+ SimpleGrid,
3968
+ {
3969
+ cols: cols > 0 ? cols : 1,
3970
+ gap: "lg",
3971
+ className: cn("items-stretch", className),
3972
+ children: plans.map((plan) => /* @__PURE__ */ jsxRuntime.jsx(PricingCard, { ...plan }, plan.name))
3973
+ }
3974
+ );
3975
+ };
3976
+ PricingGrid.displayName = "PricingGrid";
3977
+ var SplitSection = ({
3978
+ title,
3979
+ description,
3980
+ bullets,
3981
+ image,
3982
+ imagePosition = "right",
3983
+ background = "default",
3984
+ children,
3985
+ className
3986
+ }) => {
3987
+ const textContent = /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "md", className: "flex-1 min-w-0", children: [
3988
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h2", children: title }),
3989
+ typeof description === "string" ? /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", color: "muted", children: description }) : description,
3990
+ bullets && bullets.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(VStack, { gap: "sm", children: bullets.map((bullet, index) => /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", align: "start", className: "mt-0.5", children: [
3991
+ /* @__PURE__ */ jsxRuntime.jsx(
3992
+ Icon,
3993
+ {
3994
+ name: "check",
3995
+ size: "sm",
3996
+ className: "text-[var(--color-primary)] flex-shrink-0 mt-0.5"
3997
+ }
3998
+ ),
3999
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", children: bullet })
4000
+ ] }, index)) })
4001
+ ] });
4002
+ const mediaContent = children ?? (image ? /* @__PURE__ */ jsxRuntime.jsx(
4003
+ Box,
4004
+ {
4005
+ className: cn(
4006
+ "flex-1 min-w-0 min-h-[240px] rounded-[var(--radius-md)]",
4007
+ "bg-cover bg-center"
4008
+ ),
4009
+ style: { backgroundImage: `url(${image.src})` },
4010
+ role: "img",
4011
+ "aria-label": image.alt
4012
+ }
4013
+ ) : null);
4014
+ const isImageLeft = imagePosition === "left";
4015
+ return /* @__PURE__ */ jsxRuntime.jsx(
4016
+ Box,
4017
+ {
4018
+ className: cn(
4019
+ "w-full",
4020
+ background === "alt" ? "bg-[var(--color-muted)]" : "bg-[var(--color-background)]",
4021
+ className
4022
+ ),
4023
+ padding: "lg",
4024
+ children: /* @__PURE__ */ jsxRuntime.jsx(HStack, { gap: "lg", align: "start", className: "flex-wrap gap-16", children: isImageLeft ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
4025
+ mediaContent,
4026
+ textContent
4027
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
4028
+ textContent,
4029
+ mediaContent
4030
+ ] }) })
4031
+ }
4032
+ );
4033
+ };
4034
+ SplitSection.displayName = "SplitSection";
4035
+ var StepCircle = ({ step, index }) => {
4036
+ if (step.icon) {
4037
+ return /* @__PURE__ */ jsxRuntime.jsx(
4038
+ Center,
4039
+ {
4040
+ className: cn(
4041
+ "w-10 h-10 rounded-full flex-shrink-0",
4042
+ "flex items-center justify-center",
4043
+ "bg-[var(--color-primary)] text-[var(--color-primary-foreground)]"
4044
+ ),
4045
+ children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: step.icon, size: "sm", className: "text-[var(--color-primary-foreground)]" })
4046
+ }
4047
+ );
4048
+ }
4049
+ return /* @__PURE__ */ jsxRuntime.jsx(
4050
+ Center,
4051
+ {
4052
+ className: cn(
4053
+ "w-10 h-10 rounded-full flex-shrink-0",
4054
+ "flex items-center justify-center",
4055
+ "bg-[var(--color-primary)] text-[var(--color-primary-foreground)]"
4056
+ ),
4057
+ children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-semibold text-sm text-[var(--color-primary-foreground)] leading-none", children: step.number ?? index + 1 })
4058
+ }
4059
+ );
4060
+ };
4061
+ StepCircle.displayName = "StepCircle";
4062
+ var StepFlow = ({
4063
+ steps,
4064
+ orientation = "horizontal",
4065
+ showConnectors = true,
4066
+ className
4067
+ }) => {
4068
+ if (orientation === "vertical") {
4069
+ return /* @__PURE__ */ jsxRuntime.jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsxRuntime.jsx(React5__default.default.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "md", align: "start", className: "w-full", children: [
4070
+ /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "none", align: "center", children: [
4071
+ /* @__PURE__ */ jsxRuntime.jsx(StepCircle, { step, index }),
4072
+ showConnectors && index < steps.length - 1 && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-px h-8 bg-[var(--color-border)]" })
4073
+ ] }),
4074
+ /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", className: "flex-1 pt-1", children: [
4075
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", children: step.title }),
4076
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", color: "muted", children: step.description })
4077
+ ] })
4078
+ ] }) }, index)) });
4079
+ }
4080
+ return /* @__PURE__ */ jsxRuntime.jsx(HStack, { gap: "none", align: "start", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsxRuntime.jsxs(React5__default.default.Fragment, { children: [
4081
+ /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", align: "center", className: "flex-1", children: [
4082
+ /* @__PURE__ */ jsxRuntime.jsx(StepCircle, { step, index }),
4083
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h4", className: "text-center", children: step.title }),
4084
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", color: "muted", className: "text-center", children: step.description })
4085
+ ] }),
4086
+ showConnectors && index < steps.length - 1 && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "flex-shrink-0 pt-5 px-2", children: /* @__PURE__ */ jsxRuntime.jsx(Divider, { orientation: "horizontal", className: "w-12" }) })
4087
+ ] }, index)) });
4088
+ };
4089
+ StepFlow.displayName = "StepFlow";
4090
+ var StatsGrid = ({
4091
+ stats,
4092
+ columns = 3,
4093
+ className
4094
+ }) => {
4095
+ return /* @__PURE__ */ jsxRuntime.jsx(SimpleGrid, { cols: columns, gap: "lg", className: cn("w-full", className), children: stats.map((stat) => /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", align: "center", className: "py-4", children: [
4096
+ /* @__PURE__ */ jsxRuntime.jsx(
4097
+ Typography,
4098
+ {
4099
+ variant: "h2",
4100
+ className: "font-bold text-[var(--color-primary)]",
4101
+ children: stat.value
4102
+ }
4103
+ ),
4104
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", color: "muted", children: stat.label })
4105
+ ] }, stat.label)) });
4106
+ };
4107
+ StatsGrid.displayName = "StatsGrid";
4108
+ var variantMap = {
4109
+ default: "default",
4110
+ primary: "primary",
4111
+ accent: "info"
4112
+ };
4113
+ function normalizeTags(tags) {
4114
+ if (tags.length === 0) return [];
4115
+ if (typeof tags[0] === "string") {
4116
+ return tags.map((label) => ({ label }));
4117
+ }
4118
+ return tags;
4119
+ }
4120
+ var TagCloud = ({
4121
+ tags,
4122
+ variant = "default",
4123
+ className
4124
+ }) => {
4125
+ const normalizedTags = normalizeTags(tags);
4126
+ return /* @__PURE__ */ jsxRuntime.jsx(HStack, { gap: "sm", className: cn("flex-wrap justify-center", className), children: normalizedTags.map((tag, index) => {
4127
+ const badgeVariant = tag.variant ? variantMap[tag.variant] ?? "default" : variantMap[variant] ?? "default";
4128
+ return /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: badgeVariant, label: tag.label }, index);
4129
+ }) });
4130
+ };
4131
+ TagCloud.displayName = "TagCloud";
4132
+ function formatCount(count) {
4133
+ if (count >= 1e3) {
4134
+ return `${(count / 1e3).toFixed(1)}k`;
4135
+ }
4136
+ return String(count);
4137
+ }
4138
+ var CommunityLinks = ({
4139
+ github,
4140
+ discord,
4141
+ twitter,
4142
+ heading,
4143
+ subtitle,
4144
+ className
4145
+ }) => {
4146
+ const openLink = (url) => () => {
4147
+ window.open(url, "_blank", "noopener,noreferrer");
4148
+ };
4149
+ return /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", align: "center", className, children: [
4150
+ heading && /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h2", className: "text-center", children: heading }),
4151
+ subtitle && /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", color: "muted", className: "text-center", children: subtitle }),
4152
+ /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "md", className: "flex-wrap justify-center", children: [
4153
+ github && /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "primary", onClick: openLink(github.url), children: /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", align: "center", children: [
4154
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "github", size: "sm" }),
4155
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-inherit", children: github.stars != null ? `GitHub (${formatCount(github.stars)} stars)` : "GitHub" })
4156
+ ] }) }),
4157
+ discord && /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "secondary", onClick: openLink(discord.url), children: /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", align: "center", children: [
4158
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "message-circle", size: "sm" }),
4159
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-inherit", children: discord.members != null ? `Discord (${formatCount(discord.members)} members)` : "Discord" })
4160
+ ] }) }),
4161
+ twitter && /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "secondary", onClick: openLink(twitter.url), children: /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "sm", align: "center", children: [
4162
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "twitter", size: "sm" }),
4163
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", className: "text-inherit", children: twitter.followers != null ? `Twitter (${formatCount(twitter.followers)} followers)` : "Twitter" })
4164
+ ] }) })
4165
+ ] })
4166
+ ] });
4167
+ };
4168
+ CommunityLinks.displayName = "CommunityLinks";
4169
+ var ServiceCatalog = ({
4170
+ services,
4171
+ className
4172
+ }) => {
4173
+ return /* @__PURE__ */ jsxRuntime.jsx(SimpleGrid, { cols: 4, gap: "sm", className: cn(className), children: services.map((service) => /* @__PURE__ */ jsxRuntime.jsx(Card, { variant: "bordered", padding: "sm", children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "xs", align: "start", children: [
4174
+ /* @__PURE__ */ jsxRuntime.jsx(
4175
+ Badge,
4176
+ {
4177
+ size: "sm",
4178
+ className: service.layerColor,
4179
+ children: service.layer
4180
+ }
4181
+ ),
4182
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", children: service.name })
4183
+ ] }) }, service.name)) });
4184
+ };
4185
+ ServiceCatalog.displayName = "ServiceCatalog";
4186
+ var ShowcaseCard = ({
4187
+ title,
4188
+ description,
4189
+ image,
4190
+ href,
4191
+ badge,
4192
+ accentColor,
4193
+ className
4194
+ }) => {
4195
+ const cardVariant = href ? "interactive" : "bordered";
4196
+ const handleClick = () => {
4197
+ if (href) {
4198
+ window.open(href, "_blank", "noopener,noreferrer");
4199
+ }
4200
+ };
4201
+ return /* @__PURE__ */ jsxRuntime.jsxs(
4202
+ Card,
4203
+ {
4204
+ variant: cardVariant,
4205
+ padding: "none",
4206
+ className: cn("overflow-hidden w-full", className),
4207
+ style: accentColor ? { borderTopColor: accentColor, borderTopWidth: "3px" } : void 0,
4208
+ onClick: href ? handleClick : void 0,
4209
+ children: [
4210
+ /* @__PURE__ */ jsxRuntime.jsx(
4211
+ Box,
4212
+ {
4213
+ className: cn(
4214
+ "w-full aspect-video bg-cover bg-center",
4215
+ "rounded-t-[var(--radius-md)]"
4216
+ ),
4217
+ style: { backgroundImage: `url(${image.src})` },
4218
+ role: "img",
4219
+ "aria-label": image.alt
4220
+ }
4221
+ ),
4222
+ /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", className: "p-4", children: [
4223
+ badge && /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: "primary", label: badge }),
4224
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h3", children: title }),
4225
+ description && /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", color: "muted", children: description })
4226
+ ] })
4227
+ ]
4228
+ }
4229
+ );
4230
+ };
4231
+ ShowcaseCard.displayName = "ShowcaseCard";
4232
+ var sizeClasses2 = {
4233
+ xs: "w-6 h-6 text-xs",
4234
+ sm: "w-8 h-8 text-sm",
4235
+ md: "w-10 h-10 text-base",
4236
+ lg: "w-12 h-12 text-lg",
4237
+ xl: "w-16 h-16 text-xl"
4238
+ };
4239
+ var iconSizeClasses = {
4240
+ xs: "w-3 h-3",
4241
+ sm: "w-4 h-4",
4242
+ md: "w-5 h-5",
4243
+ lg: "w-6 h-6",
4244
+ xl: "w-8 h-8"
4245
+ };
4246
+ var statusSizeClasses = {
4247
+ xs: "w-1.5 h-1.5",
4248
+ sm: "w-2 h-2",
4249
+ md: "w-2.5 h-2.5",
4250
+ lg: "w-3 h-3",
4251
+ xl: "w-4 h-4"
4252
+ };
4253
+ var statusClasses = {
4254
+ online: "bg-[var(--color-success)]",
4255
+ offline: "bg-[var(--color-muted-foreground)]",
4256
+ away: "bg-[var(--color-warning)]",
4257
+ busy: "bg-[var(--color-error)]"
4258
+ };
4259
+ var badgeSizeClasses = {
4260
+ xs: "w-3 h-3 text-[8px]",
4261
+ sm: "w-4 h-4 text-[10px]",
4262
+ md: "w-5 h-5 text-xs",
4263
+ lg: "w-6 h-6 text-sm",
4264
+ xl: "w-7 h-7 text-base"
4265
+ };
4266
+ function generateInitials(name) {
4267
+ const parts = name.trim().split(/\s+/);
4268
+ if (parts.length === 1) {
4269
+ return parts[0].substring(0, 2).toUpperCase();
4270
+ }
4271
+ return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();
4272
+ }
4273
+ var Avatar = ({
4274
+ src,
4275
+ alt,
4276
+ name,
4277
+ initials: providedInitials,
4278
+ icon: Icon2,
4279
+ size = "md",
4280
+ status,
4281
+ badge,
4282
+ className,
4283
+ onClick,
4284
+ action,
4285
+ actionPayload
4286
+ }) => {
4287
+ const eventBus = useEventBus();
4288
+ const initials = providedInitials ?? (name ? generateInitials(name) : void 0);
4289
+ const hasImage = !!src;
4290
+ const hasInitials = !!initials;
4291
+ const hasIcon = !!Icon2;
4292
+ const getInitialsBackground = () => "bg-[var(--color-primary)] text-[var(--color-primary-foreground)]";
4293
+ const isClickable = action || onClick;
4294
+ const handleClick = () => {
4295
+ if (action) {
4296
+ eventBus.emit(`UI:${action}`, actionPayload ?? {});
4297
+ }
4298
+ onClick?.();
4299
+ };
4300
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative inline-block", children: [
4301
+ /* @__PURE__ */ jsxRuntime.jsx(
4302
+ "div",
4303
+ {
4304
+ className: cn(
4305
+ "relative inline-flex items-center justify-center",
4306
+ "bg-[var(--color-muted)] border-[length:var(--border-width)] border-[var(--color-border)]",
4307
+ "overflow-hidden",
4308
+ sizeClasses2[size],
4309
+ isClickable && "cursor-pointer hover:bg-[var(--color-surface-hover)] transition-colors",
4310
+ className
4311
+ ),
4312
+ onClick: isClickable ? handleClick : void 0,
4313
+ role: isClickable ? "button" : void 0,
4314
+ tabIndex: isClickable ? 0 : void 0,
4315
+ children: hasImage ? /* @__PURE__ */ jsxRuntime.jsx(
4316
+ "img",
4317
+ {
4318
+ src,
4319
+ alt: alt || "Avatar",
4320
+ className: "w-full h-full object-cover",
4321
+ onError: (e) => {
4322
+ const target = e.target;
4323
+ target.style.display = "none";
4324
+ }
4325
+ }
4326
+ ) : hasInitials ? /* @__PURE__ */ jsxRuntime.jsx(
4327
+ "div",
4328
+ {
4329
+ className: cn(
4330
+ "w-full h-full flex items-center justify-center font-bold",
4331
+ getInitialsBackground()
4332
+ ),
4333
+ children: initials.substring(0, 2).toUpperCase()
4334
+ }
4335
+ ) : hasIcon ? /* @__PURE__ */ jsxRuntime.jsx(
4336
+ Icon2,
4337
+ {
4338
+ className: cn(
4339
+ "text-[var(--color-foreground)]",
4340
+ iconSizeClasses[size]
4341
+ )
4342
+ }
4343
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
4344
+ LucideIcons.User,
4345
+ {
4346
+ className: cn(
4347
+ "text-[var(--color-foreground)]",
4348
+ iconSizeClasses[size]
4349
+ )
4350
+ }
4351
+ )
4352
+ }
4353
+ ),
4354
+ status && /* @__PURE__ */ jsxRuntime.jsx(
4355
+ "div",
4356
+ {
4357
+ className: cn(
4358
+ "absolute bottom-0 right-0 border-2 border-[var(--color-card)]",
4359
+ statusClasses[status],
4360
+ statusSizeClasses[size]
4361
+ ),
4362
+ "aria-label": `Status: ${status}`
4363
+ }
4364
+ ),
4365
+ badge !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(
4366
+ "div",
4367
+ {
4368
+ className: cn(
4369
+ "absolute -top-1 -right-1 flex items-center justify-center",
4370
+ "bg-[var(--color-primary)] text-[var(--color-primary-foreground)] font-bold",
4371
+ "border-2 border-[var(--color-card)]",
4372
+ badgeSizeClasses[size]
4373
+ ),
4374
+ "aria-label": `Badge: ${badge}`,
4375
+ children: typeof badge === "number" && badge > 99 ? "99+" : badge
4376
+ }
4377
+ )
4378
+ ] });
4379
+ };
4380
+ Avatar.displayName = "Avatar";
4381
+ var TeamCard = ({
4382
+ name,
4383
+ nameAr,
4384
+ role,
4385
+ bio,
4386
+ avatar,
4387
+ className
4388
+ }) => {
4389
+ const avatarSrc = typeof avatar === "string" ? avatar : void 0;
4390
+ const avatarInitials = typeof avatar === "object" && avatar !== null ? avatar.initials : void 0;
4391
+ return /* @__PURE__ */ jsxRuntime.jsx(Card, { variant: "bordered", padding: "lg", className: cn("w-full", className), children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "md", align: "center", children: [
4392
+ /* @__PURE__ */ jsxRuntime.jsx(
4393
+ Avatar,
4394
+ {
4395
+ src: avatarSrc,
4396
+ initials: avatarInitials,
4397
+ name: !avatarSrc && !avatarInitials ? name : void 0,
4398
+ size: "lg"
4399
+ }
4400
+ ),
4401
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h3", className: "text-center", children: name }),
4402
+ nameAr && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "text-center", style: { direction: "rtl" }, children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", children: nameAr }) }),
4403
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", color: "muted", className: "text-center", children: role }),
4404
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", className: "text-center", children: bio })
4405
+ ] }) });
4406
+ };
4407
+ TeamCard.displayName = "TeamCard";
4408
+ var CaseStudyCard = ({
4409
+ title,
4410
+ description,
4411
+ category,
4412
+ categoryColor,
4413
+ href,
4414
+ linkLabel = "Read more",
4415
+ className
4416
+ }) => {
4417
+ const handleClick = () => {
4418
+ window.open(href, "_blank", "noopener,noreferrer");
4419
+ };
4420
+ return /* @__PURE__ */ jsxRuntime.jsx(Card, { variant: "interactive", className: cn(className), children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "md", align: "start", children: [
4421
+ /* @__PURE__ */ jsxRuntime.jsx(
4422
+ Badge,
4423
+ {
4424
+ size: "sm",
4425
+ style: categoryColor ? { backgroundColor: categoryColor, color: "white" } : void 0,
4426
+ children: category
4427
+ }
4428
+ ),
4429
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h3", children: title }),
4430
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", color: "muted", children: description }),
4431
+ /* @__PURE__ */ jsxRuntime.jsxs(
4432
+ Button,
4433
+ {
4434
+ variant: "ghost",
4435
+ size: "sm",
4436
+ onClick: handleClick,
4437
+ className: "text-[var(--color-primary)] -ml-2",
4438
+ children: [
4439
+ linkLabel,
4440
+ " \u2192"
4441
+ ]
4442
+ }
4443
+ )
4444
+ ] }) });
4445
+ };
4446
+ CaseStudyCard.displayName = "CaseStudyCard";
4447
+ var maxWidthMap = {
4448
+ sm: "max-w-2xl",
4449
+ md: "max-w-3xl",
4450
+ lg: "max-w-4xl"
4451
+ };
4452
+ var ArticleSection = ({
4453
+ title,
4454
+ children,
4455
+ maxWidth = "md",
4456
+ className
4457
+ }) => {
4458
+ return /* @__PURE__ */ jsxRuntime.jsx(
4459
+ Box,
4460
+ {
4461
+ className: cn(
4462
+ maxWidthMap[maxWidth],
4463
+ "mx-auto",
4464
+ className
4465
+ ),
4466
+ padding: "md",
4467
+ children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", align: "start", children: [
4468
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "h2", children: title }),
4469
+ /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full", children })
4470
+ ] })
4471
+ }
4472
+ );
4473
+ };
4474
+ ArticleSection.displayName = "ArticleSection";
4475
+ var MarketingFooter = ({
4476
+ columns,
4477
+ copyright,
4478
+ logo,
4479
+ className
4480
+ }) => {
4481
+ return /* @__PURE__ */ jsxRuntime.jsx(
4482
+ Box,
4483
+ {
4484
+ as: "footer",
4485
+ className: cn(
4486
+ "bg-[var(--color-foreground)] text-[var(--color-background)]",
4487
+ "border-t border-[var(--color-border)]",
4488
+ "pt-12 pb-8 px-4",
4489
+ className
4490
+ ),
4491
+ children: /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "lg", className: "max-w-6xl mx-auto", children: [
4492
+ /* @__PURE__ */ jsxRuntime.jsxs(HStack, { gap: "lg", align: "start", className: "flex-wrap w-full justify-between", children: [
4493
+ logo && /* @__PURE__ */ jsxRuntime.jsx(VStack, { gap: "sm", className: "min-w-[140px] mb-4", children: logo.href ? /* @__PURE__ */ jsxRuntime.jsx("a", { href: logo.href, children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: logo.src, alt: logo.alt, className: "h-8 w-auto" }) }) : /* @__PURE__ */ jsxRuntime.jsx("img", { src: logo.src, alt: logo.alt, className: "h-8 w-auto" }) }),
4494
+ columns.map((col) => /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "sm", className: "min-w-[140px] mb-4", children: [
4495
+ /* @__PURE__ */ jsxRuntime.jsx(
4496
+ Typography,
4497
+ {
4498
+ variant: "body2",
4499
+ className: "font-semibold text-[var(--color-background)] mb-1",
4500
+ children: col.title
4501
+ }
4502
+ ),
4503
+ col.items.map((item) => /* @__PURE__ */ jsxRuntime.jsx(
4504
+ "a",
4505
+ {
4506
+ href: item.href,
4507
+ className: cn(
4508
+ "text-sm no-underline",
4509
+ "text-[var(--color-background)]/60",
4510
+ "hover:text-[var(--color-background)]",
4511
+ "transition-colors duration-150"
4512
+ ),
4513
+ target: item.href.startsWith("http") ? "_blank" : void 0,
4514
+ rel: item.href.startsWith("http") ? "noopener noreferrer" : void 0,
4515
+ children: item.label
4516
+ },
4517
+ item.label
4518
+ ))
4519
+ ] }, col.title))
4520
+ ] }),
4521
+ copyright && /* @__PURE__ */ jsxRuntime.jsx(
4522
+ Typography,
4523
+ {
4524
+ variant: "caption",
4525
+ className: "text-[var(--color-background)]/30 text-center w-full pt-6",
4526
+ children: copyright
4527
+ }
4528
+ )
4529
+ ] })
4530
+ }
4531
+ );
4532
+ };
4533
+ MarketingFooter.displayName = "MarketingFooter";
4534
+ var GradientDivider = ({
4535
+ color,
4536
+ className
4537
+ }) => {
4538
+ const centerColor = color ?? "var(--color-primary)";
4539
+ return /* @__PURE__ */ jsxRuntime.jsx(
4540
+ Box,
4541
+ {
4542
+ className: cn("w-full h-px", className),
4543
+ style: {
4544
+ background: `linear-gradient(to right, transparent, ${centerColor}, transparent)`
4545
+ }
4546
+ }
4547
+ );
4548
+ };
4549
+ GradientDivider.displayName = "GradientDivider";
4550
+ var PullQuote = ({
4551
+ children,
4552
+ className
4553
+ }) => {
4554
+ return /* @__PURE__ */ jsxRuntime.jsx(
4555
+ Box,
4556
+ {
4557
+ className: cn(
4558
+ "border-l-4 border-l-[var(--color-primary)]",
4559
+ "pl-6 py-2 my-6",
4560
+ className
4561
+ ),
4562
+ children: /* @__PURE__ */ jsxRuntime.jsx(
4563
+ Typography,
4564
+ {
4565
+ variant: "large",
4566
+ className: "italic text-[var(--color-foreground)] opacity-90",
4567
+ children
4568
+ }
4569
+ )
4570
+ }
4571
+ );
4572
+ };
4573
+ PullQuote.displayName = "PullQuote";
4574
+ function parseValue(value) {
4575
+ const match = value.match(/^([^0-9]*)([0-9]+(?:\.[0-9]+)?)(.*)$/);
4576
+ if (!match) {
4577
+ return { num: 0, prefix: "", suffix: value, decimals: 0 };
4578
+ }
4579
+ const numStr = match[2];
4580
+ const decimalIdx = numStr.indexOf(".");
4581
+ const decimals = decimalIdx >= 0 ? numStr.length - decimalIdx - 1 : 0;
4582
+ return {
4583
+ prefix: match[1],
4584
+ num: parseFloat(numStr),
4585
+ suffix: match[3],
4586
+ decimals
4587
+ };
4588
+ }
4589
+ var AnimatedCounter = ({
4590
+ value,
4591
+ label,
4592
+ duration = 1500,
4593
+ className
4594
+ }) => {
4595
+ const ref = React5.useRef(null);
4596
+ const [displayValue, setDisplayValue] = React5.useState("0");
4597
+ const [hasAnimated, setHasAnimated] = React5.useState(false);
4598
+ const animate = React5.useCallback(() => {
4599
+ const { num, prefix, suffix, decimals } = parseValue(value);
4600
+ if (num === 0) {
4601
+ setDisplayValue(value);
4602
+ return;
4603
+ }
4604
+ const startTime = performance.now();
4605
+ const tick = (now) => {
4606
+ const elapsed = now - startTime;
4607
+ const progress = Math.min(elapsed / duration, 1);
4608
+ const eased = 1 - Math.pow(1 - progress, 3);
4609
+ const current = eased * num;
4610
+ setDisplayValue(`${prefix}${current.toFixed(decimals)}${suffix}`);
4611
+ if (progress < 1) {
4612
+ requestAnimationFrame(tick);
4613
+ } else {
4614
+ setDisplayValue(value);
4615
+ }
4616
+ };
4617
+ requestAnimationFrame(tick);
4618
+ }, [value, duration]);
4619
+ React5.useEffect(() => {
4620
+ if (hasAnimated) return;
4621
+ const el = ref.current;
4622
+ if (!el) return;
4623
+ const observer = new IntersectionObserver(
4624
+ (entries) => {
4625
+ if (entries[0].isIntersecting) {
4626
+ setHasAnimated(true);
4627
+ animate();
4628
+ observer.disconnect();
4629
+ }
4630
+ },
4631
+ { threshold: 0.3 }
4632
+ );
4633
+ observer.observe(el);
4634
+ return () => observer.disconnect();
4635
+ }, [hasAnimated, animate]);
4636
+ return /* @__PURE__ */ jsxRuntime.jsxs(Box, { ref, className: cn("flex flex-col items-center gap-1 p-4", className), children: [
4637
+ /* @__PURE__ */ jsxRuntime.jsx(
4638
+ Typography,
4639
+ {
4640
+ variant: "h2",
4641
+ className: "text-[var(--color-primary)] font-bold tabular-nums",
4642
+ children: hasAnimated ? displayValue : "0"
4643
+ }
4644
+ ),
4645
+ /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body2", color: "muted", className: "text-center", children: label })
4646
+ ] });
4647
+ };
4648
+ AnimatedCounter.displayName = "AnimatedCounter";
4649
+
4650
+ exports.AnimatedCounter = AnimatedCounter;
4651
+ exports.ArticleSection = ArticleSection;
4652
+ exports.Badge = Badge;
4653
+ exports.Box = Box;
4654
+ exports.Button = Button;
4655
+ exports.CTABanner = CTABanner;
4656
+ exports.Card = Card;
4657
+ exports.CaseStudyCard = CaseStudyCard;
4658
+ exports.Center = Center;
4659
+ exports.CommunityLinks = CommunityLinks;
4660
+ exports.ContentSection = ContentSection;
4661
+ exports.Divider = Divider;
4662
+ exports.FeatureCard = FeatureCard;
4663
+ exports.FeatureGrid = FeatureGrid;
4664
+ exports.GradientDivider = GradientDivider;
4665
+ exports.HStack = HStack;
4666
+ exports.HeroSection = HeroSection;
4667
+ exports.Icon = Icon;
4668
+ exports.InstallBox = InstallBox;
4669
+ exports.MarketingFooter = MarketingFooter;
4670
+ exports.PricingCard = PricingCard;
4671
+ exports.PricingGrid = PricingGrid;
4672
+ exports.PullQuote = PullQuote;
4673
+ exports.ServiceCatalog = ServiceCatalog;
4674
+ exports.ShowcaseCard = ShowcaseCard;
4675
+ exports.SimpleGrid = SimpleGrid;
4676
+ exports.Spacer = Spacer;
4677
+ exports.SplitSection = SplitSection;
4678
+ exports.StatsGrid = StatsGrid;
4679
+ exports.StepFlow = StepFlow;
4680
+ exports.TagCloud = TagCloud;
4681
+ exports.TeamCard = TeamCard;
4682
+ exports.Typography = Typography;
4683
+ exports.VStack = VStack;