@remotion/promo-pages 4.0.259

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 (134) hide show
  1. package/.turbo/turbo-make.log +8 -0
  2. package/LICENSE.md +49 -0
  3. package/README.md +5 -0
  4. package/bundle.ts +38 -0
  5. package/dist/Homepage.css +88 -0
  6. package/dist/Homepage.js +20805 -0
  7. package/dist/homepage/Pricing.js +1963 -0
  8. package/dist/tailwind.css +1364 -0
  9. package/eslint.config.mjs +7 -0
  10. package/index.html +13 -0
  11. package/package.json +50 -0
  12. package/public/fire.mp3 +0 -0
  13. package/public/img/cluster.png +0 -0
  14. package/public/img/code-sample-new.png +0 -0
  15. package/public/img/freelancers/alex.jpeg +0 -0
  16. package/public/img/freelancers/antoine.jpeg +0 -0
  17. package/public/img/freelancers/ayush.png +0 -0
  18. package/public/img/freelancers/benjamin.jpeg +0 -0
  19. package/public/img/freelancers/default.png +0 -0
  20. package/public/img/freelancers/florent.jpeg +0 -0
  21. package/public/img/freelancers/karel.jpeg +0 -0
  22. package/public/img/freelancers/lorenzo.jpeg +0 -0
  23. package/public/img/freelancers/mickael.jpeg +0 -0
  24. package/public/img/freelancers/mohit.jpeg +0 -0
  25. package/public/img/freelancers/pramod.jpg +0 -0
  26. package/public/img/freelancers/pranav.jpg +0 -0
  27. package/public/img/freelancers/rahul.png +0 -0
  28. package/public/img/freelancers/ray.jpeg +0 -0
  29. package/public/img/freelancers/stephen.png +0 -0
  30. package/public/img/freelancers/umungo.png +0 -0
  31. package/public/img/freelancers/yehor.jpeg +0 -0
  32. package/public/img/gt-planar-black.woff2 +0 -0
  33. package/public/img/gt-planar-bold.woff2 +0 -0
  34. package/public/img/gt-planar-medium.woff2 +0 -0
  35. package/public/img/gt-planar-regular.woff2 +0 -0
  36. package/public/img/logo-small.png +0 -0
  37. package/public/img/mp4.png +0 -0
  38. package/public/img/player-demo.mp4 +0 -0
  39. package/public/img/player-example-dark.png +0 -0
  40. package/public/img/player-example.png +0 -0
  41. package/public/img/writeinreact.png +0 -0
  42. package/public/partyhorn.mp3 +0 -0
  43. package/public/sad.mp3 +0 -0
  44. package/src/cn.ts +6 -0
  45. package/src/components/Homepage.tsx +88 -0
  46. package/src/components/homepage/BackgroundAnimation.tsx +108 -0
  47. package/src/components/homepage/ChooseTemplate.tsx +57 -0
  48. package/src/components/homepage/CodeExample.tsx +89 -0
  49. package/src/components/homepage/CommunityStats.tsx +54 -0
  50. package/src/components/homepage/CommunityStatsItems.tsx +304 -0
  51. package/src/components/homepage/Counter.tsx +110 -0
  52. package/src/components/homepage/Demo/Card.tsx +273 -0
  53. package/src/components/homepage/Demo/Cards.tsx +129 -0
  54. package/src/components/homepage/Demo/Comp.tsx +157 -0
  55. package/src/components/homepage/Demo/CurrentCountry.tsx +97 -0
  56. package/src/components/homepage/Demo/DemoError.tsx +18 -0
  57. package/src/components/homepage/Demo/DemoErrorIcon.tsx +32 -0
  58. package/src/components/homepage/Demo/DemoRender.tsx +166 -0
  59. package/src/components/homepage/Demo/DigitWheel.tsx +179 -0
  60. package/src/components/homepage/Demo/DisplayedEmoji.tsx +81 -0
  61. package/src/components/homepage/Demo/DoneCheckmark.tsx +39 -0
  62. package/src/components/homepage/Demo/DownloadNudge.tsx +62 -0
  63. package/src/components/homepage/Demo/DragAndDropNudge.tsx +57 -0
  64. package/src/components/homepage/Demo/EmojiCard.tsx +198 -0
  65. package/src/components/homepage/Demo/Minus.tsx +21 -0
  66. package/src/components/homepage/Demo/PlayPauseButton.tsx +66 -0
  67. package/src/components/homepage/Demo/PlayerControls.tsx +48 -0
  68. package/src/components/homepage/Demo/PlayerSeekBar.tsx +325 -0
  69. package/src/components/homepage/Demo/PlayerVolume.tsx +83 -0
  70. package/src/components/homepage/Demo/Progress.tsx +38 -0
  71. package/src/components/homepage/Demo/Spinner.tsx +60 -0
  72. package/src/components/homepage/Demo/Switcher.tsx +54 -0
  73. package/src/components/homepage/Demo/Temperature.tsx +44 -0
  74. package/src/components/homepage/Demo/TemperatureNumber.tsx +68 -0
  75. package/src/components/homepage/Demo/ThemeNudge.tsx +72 -0
  76. package/src/components/homepage/Demo/TimeDisplay.tsx +43 -0
  77. package/src/components/homepage/Demo/TrendingRepos.tsx +106 -0
  78. package/src/components/homepage/Demo/icons.tsx +114 -0
  79. package/src/components/homepage/Demo/index.tsx +158 -0
  80. package/src/components/homepage/Demo/math.ts +43 -0
  81. package/src/components/homepage/Demo/types.ts +6 -0
  82. package/src/components/homepage/Editor.tsx +67 -0
  83. package/src/components/homepage/EvaluateRemotion.tsx +92 -0
  84. package/src/components/homepage/FreePricing.tsx +295 -0
  85. package/src/components/homepage/GetStartedStrip.tsx +77 -0
  86. package/src/components/homepage/GitHubButton.tsx +23 -0
  87. package/src/components/homepage/IconForTemplate.tsx +154 -0
  88. package/src/components/homepage/IfYouKnowReact.tsx +29 -0
  89. package/src/components/homepage/InfoTooltip.tsx +25 -0
  90. package/src/components/homepage/MoreTemplatesButton.tsx +29 -0
  91. package/src/components/homepage/MuxVideo.tsx +68 -0
  92. package/src/components/homepage/NewsletterButton.tsx +88 -0
  93. package/src/components/homepage/Pricing.tsx +49 -0
  94. package/src/components/homepage/PricingBulletPoint.tsx +50 -0
  95. package/src/components/homepage/RealMp4Videos.tsx +50 -0
  96. package/src/components/homepage/Spacer.tsx +5 -0
  97. package/src/components/homepage/TemplateIcon.tsx +36 -0
  98. package/src/components/homepage/TextInput.tsx +62 -0
  99. package/src/components/homepage/TrustedByBanner.tsx +194 -0
  100. package/src/components/homepage/VideoApps.tsx +231 -0
  101. package/src/components/homepage/VideoAppsShowcase.tsx +276 -0
  102. package/src/components/homepage/VideoAppsTitle.tsx +24 -0
  103. package/src/components/homepage/VideoPlayerWithControls.tsx +188 -0
  104. package/src/components/homepage/WriteInReact.tsx +34 -0
  105. package/src/components/homepage/YouAreHere.tsx +30 -0
  106. package/src/components/homepage/custom.css +57 -0
  107. package/src/components/homepage/layout/Button.tsx +93 -0
  108. package/src/components/homepage/layout/colors.ts +17 -0
  109. package/src/components/homepage/layout/use-color-mode.tsx +44 -0
  110. package/src/components/homepage/layout/use-el-size.ts +51 -0
  111. package/src/components/homepage/layout/use-mobile-layout.ts +8 -0
  112. package/src/components/homepage/video-player.css +24 -0
  113. package/src/components/icons/blank.tsx +13 -0
  114. package/src/components/icons/clone.tsx +10 -0
  115. package/src/components/icons/code-hike.tsx +15 -0
  116. package/src/components/icons/cubes.tsx +13 -0
  117. package/src/components/icons/js.tsx +17 -0
  118. package/src/components/icons/next.tsx +64 -0
  119. package/src/components/icons/overlay.tsx +24 -0
  120. package/src/components/icons/remix.tsx +24 -0
  121. package/src/components/icons/skia.tsx +13 -0
  122. package/src/components/icons/stargazer.tsx +13 -0
  123. package/src/components/icons/still.tsx +13 -0
  124. package/src/components/icons/tailwind.tsx +22 -0
  125. package/src/components/icons/tiktok.tsx +13 -0
  126. package/src/components/icons/ts.tsx +18 -0
  127. package/src/components/icons/tts.tsx +13 -0
  128. package/src/components/icons/undo.tsx +11 -0
  129. package/src/components/icons/waveform.tsx +13 -0
  130. package/src/fonts.css +30 -0
  131. package/src/index.css +74 -0
  132. package/src/main.tsx +12 -0
  133. package/tsconfig.json +15 -0
  134. package/vite.config.ts +9 -0
@@ -0,0 +1,1963 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __export = (target, all) => {
3
+ for (var name in all)
4
+ __defProp(target, name, {
5
+ get: all[name],
6
+ enumerable: true,
7
+ configurable: true,
8
+ set: (newValue) => all[name] = () => newValue
9
+ });
10
+ };
11
+ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
12
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
13
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
14
+ }) : x)(function(x) {
15
+ if (typeof require !== "undefined")
16
+ return require.apply(this, arguments);
17
+ throw Error('Dynamic require of "' + x + '" is not supported');
18
+ });
19
+
20
+ // src/components/homepage/FreePricing.tsx
21
+ import React2, { useCallback, useMemo } from "react";
22
+
23
+ // ../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs
24
+ function r(e) {
25
+ var t, f, n = "";
26
+ if (typeof e == "string" || typeof e == "number")
27
+ n += e;
28
+ else if (typeof e == "object")
29
+ if (Array.isArray(e)) {
30
+ var o = e.length;
31
+ for (t = 0;t < o; t++)
32
+ e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
33
+ } else
34
+ for (f in e)
35
+ e[f] && (n && (n += " "), n += f);
36
+ return n;
37
+ }
38
+ function clsx() {
39
+ for (var e, t, f = 0, n = "", o = arguments.length;f < o; f++)
40
+ (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t);
41
+ return n;
42
+ }
43
+
44
+ // ../../node_modules/.pnpm/tailwind-merge@2.5.2/node_modules/tailwind-merge/dist/bundle-mjs.mjs
45
+ var CLASS_PART_SEPARATOR = "-";
46
+ var createClassGroupUtils = (config) => {
47
+ const classMap = createClassMap(config);
48
+ const {
49
+ conflictingClassGroups,
50
+ conflictingClassGroupModifiers
51
+ } = config;
52
+ const getClassGroupId = (className) => {
53
+ const classParts = className.split(CLASS_PART_SEPARATOR);
54
+ if (classParts[0] === "" && classParts.length !== 1) {
55
+ classParts.shift();
56
+ }
57
+ return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);
58
+ };
59
+ const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {
60
+ const conflicts = conflictingClassGroups[classGroupId] || [];
61
+ if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {
62
+ return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]];
63
+ }
64
+ return conflicts;
65
+ };
66
+ return {
67
+ getClassGroupId,
68
+ getConflictingClassGroupIds
69
+ };
70
+ };
71
+ var getGroupRecursive = (classParts, classPartObject) => {
72
+ if (classParts.length === 0) {
73
+ return classPartObject.classGroupId;
74
+ }
75
+ const currentClassPart = classParts[0];
76
+ const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);
77
+ const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : undefined;
78
+ if (classGroupFromNextClassPart) {
79
+ return classGroupFromNextClassPart;
80
+ }
81
+ if (classPartObject.validators.length === 0) {
82
+ return;
83
+ }
84
+ const classRest = classParts.join(CLASS_PART_SEPARATOR);
85
+ return classPartObject.validators.find(({
86
+ validator
87
+ }) => validator(classRest))?.classGroupId;
88
+ };
89
+ var arbitraryPropertyRegex = /^\[(.+)\]$/;
90
+ var getGroupIdForArbitraryProperty = (className) => {
91
+ if (arbitraryPropertyRegex.test(className)) {
92
+ const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];
93
+ const property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(":"));
94
+ if (property) {
95
+ return "arbitrary.." + property;
96
+ }
97
+ }
98
+ };
99
+ var createClassMap = (config) => {
100
+ const {
101
+ theme,
102
+ prefix
103
+ } = config;
104
+ const classMap = {
105
+ nextPart: new Map,
106
+ validators: []
107
+ };
108
+ const prefixedClassGroupEntries = getPrefixedClassGroupEntries(Object.entries(config.classGroups), prefix);
109
+ prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => {
110
+ processClassesRecursively(classGroup, classMap, classGroupId, theme);
111
+ });
112
+ return classMap;
113
+ };
114
+ var processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {
115
+ classGroup.forEach((classDefinition) => {
116
+ if (typeof classDefinition === "string") {
117
+ const classPartObjectToEdit = classDefinition === "" ? classPartObject : getPart(classPartObject, classDefinition);
118
+ classPartObjectToEdit.classGroupId = classGroupId;
119
+ return;
120
+ }
121
+ if (typeof classDefinition === "function") {
122
+ if (isThemeGetter(classDefinition)) {
123
+ processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);
124
+ return;
125
+ }
126
+ classPartObject.validators.push({
127
+ validator: classDefinition,
128
+ classGroupId
129
+ });
130
+ return;
131
+ }
132
+ Object.entries(classDefinition).forEach(([key, classGroup2]) => {
133
+ processClassesRecursively(classGroup2, getPart(classPartObject, key), classGroupId, theme);
134
+ });
135
+ });
136
+ };
137
+ var getPart = (classPartObject, path) => {
138
+ let currentClassPartObject = classPartObject;
139
+ path.split(CLASS_PART_SEPARATOR).forEach((pathPart) => {
140
+ if (!currentClassPartObject.nextPart.has(pathPart)) {
141
+ currentClassPartObject.nextPart.set(pathPart, {
142
+ nextPart: new Map,
143
+ validators: []
144
+ });
145
+ }
146
+ currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);
147
+ });
148
+ return currentClassPartObject;
149
+ };
150
+ var isThemeGetter = (func) => func.isThemeGetter;
151
+ var getPrefixedClassGroupEntries = (classGroupEntries, prefix) => {
152
+ if (!prefix) {
153
+ return classGroupEntries;
154
+ }
155
+ return classGroupEntries.map(([classGroupId, classGroup]) => {
156
+ const prefixedClassGroup = classGroup.map((classDefinition) => {
157
+ if (typeof classDefinition === "string") {
158
+ return prefix + classDefinition;
159
+ }
160
+ if (typeof classDefinition === "object") {
161
+ return Object.fromEntries(Object.entries(classDefinition).map(([key, value]) => [prefix + key, value]));
162
+ }
163
+ return classDefinition;
164
+ });
165
+ return [classGroupId, prefixedClassGroup];
166
+ });
167
+ };
168
+ var createLruCache = (maxCacheSize) => {
169
+ if (maxCacheSize < 1) {
170
+ return {
171
+ get: () => {
172
+ return;
173
+ },
174
+ set: () => {
175
+ }
176
+ };
177
+ }
178
+ let cacheSize = 0;
179
+ let cache = new Map;
180
+ let previousCache = new Map;
181
+ const update = (key, value) => {
182
+ cache.set(key, value);
183
+ cacheSize++;
184
+ if (cacheSize > maxCacheSize) {
185
+ cacheSize = 0;
186
+ previousCache = cache;
187
+ cache = new Map;
188
+ }
189
+ };
190
+ return {
191
+ get(key) {
192
+ let value = cache.get(key);
193
+ if (value !== undefined) {
194
+ return value;
195
+ }
196
+ if ((value = previousCache.get(key)) !== undefined) {
197
+ update(key, value);
198
+ return value;
199
+ }
200
+ },
201
+ set(key, value) {
202
+ if (cache.has(key)) {
203
+ cache.set(key, value);
204
+ } else {
205
+ update(key, value);
206
+ }
207
+ }
208
+ };
209
+ };
210
+ var IMPORTANT_MODIFIER = "!";
211
+ var createParseClassName = (config) => {
212
+ const {
213
+ separator,
214
+ experimentalParseClassName
215
+ } = config;
216
+ const isSeparatorSingleCharacter = separator.length === 1;
217
+ const firstSeparatorCharacter = separator[0];
218
+ const separatorLength = separator.length;
219
+ const parseClassName = (className) => {
220
+ const modifiers = [];
221
+ let bracketDepth = 0;
222
+ let modifierStart = 0;
223
+ let postfixModifierPosition;
224
+ for (let index = 0;index < className.length; index++) {
225
+ let currentCharacter = className[index];
226
+ if (bracketDepth === 0) {
227
+ if (currentCharacter === firstSeparatorCharacter && (isSeparatorSingleCharacter || className.slice(index, index + separatorLength) === separator)) {
228
+ modifiers.push(className.slice(modifierStart, index));
229
+ modifierStart = index + separatorLength;
230
+ continue;
231
+ }
232
+ if (currentCharacter === "/") {
233
+ postfixModifierPosition = index;
234
+ continue;
235
+ }
236
+ }
237
+ if (currentCharacter === "[") {
238
+ bracketDepth++;
239
+ } else if (currentCharacter === "]") {
240
+ bracketDepth--;
241
+ }
242
+ }
243
+ const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);
244
+ const hasImportantModifier = baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER);
245
+ const baseClassName = hasImportantModifier ? baseClassNameWithImportantModifier.substring(1) : baseClassNameWithImportantModifier;
246
+ const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;
247
+ return {
248
+ modifiers,
249
+ hasImportantModifier,
250
+ baseClassName,
251
+ maybePostfixModifierPosition
252
+ };
253
+ };
254
+ if (experimentalParseClassName) {
255
+ return (className) => experimentalParseClassName({
256
+ className,
257
+ parseClassName
258
+ });
259
+ }
260
+ return parseClassName;
261
+ };
262
+ var sortModifiers = (modifiers) => {
263
+ if (modifiers.length <= 1) {
264
+ return modifiers;
265
+ }
266
+ const sortedModifiers = [];
267
+ let unsortedModifiers = [];
268
+ modifiers.forEach((modifier) => {
269
+ const isArbitraryVariant = modifier[0] === "[";
270
+ if (isArbitraryVariant) {
271
+ sortedModifiers.push(...unsortedModifiers.sort(), modifier);
272
+ unsortedModifiers = [];
273
+ } else {
274
+ unsortedModifiers.push(modifier);
275
+ }
276
+ });
277
+ sortedModifiers.push(...unsortedModifiers.sort());
278
+ return sortedModifiers;
279
+ };
280
+ var createConfigUtils = (config) => ({
281
+ cache: createLruCache(config.cacheSize),
282
+ parseClassName: createParseClassName(config),
283
+ ...createClassGroupUtils(config)
284
+ });
285
+ var SPLIT_CLASSES_REGEX = /\s+/;
286
+ var mergeClassList = (classList, configUtils) => {
287
+ const {
288
+ parseClassName,
289
+ getClassGroupId,
290
+ getConflictingClassGroupIds
291
+ } = configUtils;
292
+ const classGroupsInConflict = [];
293
+ const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);
294
+ let result = "";
295
+ for (let index = classNames.length - 1;index >= 0; index -= 1) {
296
+ const originalClassName = classNames[index];
297
+ const {
298
+ modifiers,
299
+ hasImportantModifier,
300
+ baseClassName,
301
+ maybePostfixModifierPosition
302
+ } = parseClassName(originalClassName);
303
+ let hasPostfixModifier = Boolean(maybePostfixModifierPosition);
304
+ let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);
305
+ if (!classGroupId) {
306
+ if (!hasPostfixModifier) {
307
+ result = originalClassName + (result.length > 0 ? " " + result : result);
308
+ continue;
309
+ }
310
+ classGroupId = getClassGroupId(baseClassName);
311
+ if (!classGroupId) {
312
+ result = originalClassName + (result.length > 0 ? " " + result : result);
313
+ continue;
314
+ }
315
+ hasPostfixModifier = false;
316
+ }
317
+ const variantModifier = sortModifiers(modifiers).join(":");
318
+ const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;
319
+ const classId = modifierId + classGroupId;
320
+ if (classGroupsInConflict.includes(classId)) {
321
+ continue;
322
+ }
323
+ classGroupsInConflict.push(classId);
324
+ const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);
325
+ for (let i = 0;i < conflictGroups.length; ++i) {
326
+ const group = conflictGroups[i];
327
+ classGroupsInConflict.push(modifierId + group);
328
+ }
329
+ result = originalClassName + (result.length > 0 ? " " + result : result);
330
+ }
331
+ return result;
332
+ };
333
+ function twJoin() {
334
+ let index = 0;
335
+ let argument;
336
+ let resolvedValue;
337
+ let string = "";
338
+ while (index < arguments.length) {
339
+ if (argument = arguments[index++]) {
340
+ if (resolvedValue = toValue(argument)) {
341
+ string && (string += " ");
342
+ string += resolvedValue;
343
+ }
344
+ }
345
+ }
346
+ return string;
347
+ }
348
+ var toValue = (mix) => {
349
+ if (typeof mix === "string") {
350
+ return mix;
351
+ }
352
+ let resolvedValue;
353
+ let string = "";
354
+ for (let k = 0;k < mix.length; k++) {
355
+ if (mix[k]) {
356
+ if (resolvedValue = toValue(mix[k])) {
357
+ string && (string += " ");
358
+ string += resolvedValue;
359
+ }
360
+ }
361
+ }
362
+ return string;
363
+ };
364
+ function createTailwindMerge(createConfigFirst, ...createConfigRest) {
365
+ let configUtils;
366
+ let cacheGet;
367
+ let cacheSet;
368
+ let functionToCall = initTailwindMerge;
369
+ function initTailwindMerge(classList) {
370
+ const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());
371
+ configUtils = createConfigUtils(config);
372
+ cacheGet = configUtils.cache.get;
373
+ cacheSet = configUtils.cache.set;
374
+ functionToCall = tailwindMerge;
375
+ return tailwindMerge(classList);
376
+ }
377
+ function tailwindMerge(classList) {
378
+ const cachedResult = cacheGet(classList);
379
+ if (cachedResult) {
380
+ return cachedResult;
381
+ }
382
+ const result = mergeClassList(classList, configUtils);
383
+ cacheSet(classList, result);
384
+ return result;
385
+ }
386
+ return function callTailwindMerge() {
387
+ return functionToCall(twJoin.apply(null, arguments));
388
+ };
389
+ }
390
+ var fromTheme = (key) => {
391
+ const themeGetter = (theme) => theme[key] || [];
392
+ themeGetter.isThemeGetter = true;
393
+ return themeGetter;
394
+ };
395
+ var arbitraryValueRegex = /^\[(?:([a-z-]+):)?(.+)\]$/i;
396
+ var fractionRegex = /^\d+\/\d+$/;
397
+ var stringLengths = /* @__PURE__ */ new Set(["px", "full", "screen"]);
398
+ var tshirtUnitRegex = /^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/;
399
+ 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$/;
400
+ var colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/;
401
+ var shadowRegex = /^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/;
402
+ var imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/;
403
+ var isLength = (value) => isNumber(value) || stringLengths.has(value) || fractionRegex.test(value);
404
+ var isArbitraryLength = (value) => getIsArbitraryValue(value, "length", isLengthOnly);
405
+ var isNumber = (value) => Boolean(value) && !Number.isNaN(Number(value));
406
+ var isArbitraryNumber = (value) => getIsArbitraryValue(value, "number", isNumber);
407
+ var isInteger = (value) => Boolean(value) && Number.isInteger(Number(value));
408
+ var isPercent = (value) => value.endsWith("%") && isNumber(value.slice(0, -1));
409
+ var isArbitraryValue = (value) => arbitraryValueRegex.test(value);
410
+ var isTshirtSize = (value) => tshirtUnitRegex.test(value);
411
+ var sizeLabels = /* @__PURE__ */ new Set(["length", "size", "percentage"]);
412
+ var isArbitrarySize = (value) => getIsArbitraryValue(value, sizeLabels, isNever);
413
+ var isArbitraryPosition = (value) => getIsArbitraryValue(value, "position", isNever);
414
+ var imageLabels = /* @__PURE__ */ new Set(["image", "url"]);
415
+ var isArbitraryImage = (value) => getIsArbitraryValue(value, imageLabels, isImage);
416
+ var isArbitraryShadow = (value) => getIsArbitraryValue(value, "", isShadow);
417
+ var isAny = () => true;
418
+ var getIsArbitraryValue = (value, label, testValue) => {
419
+ const result = arbitraryValueRegex.exec(value);
420
+ if (result) {
421
+ if (result[1]) {
422
+ return typeof label === "string" ? result[1] === label : label.has(result[1]);
423
+ }
424
+ return testValue(result[2]);
425
+ }
426
+ return false;
427
+ };
428
+ var isLengthOnly = (value) => lengthUnitRegex.test(value) && !colorFunctionRegex.test(value);
429
+ var isNever = () => false;
430
+ var isShadow = (value) => shadowRegex.test(value);
431
+ var isImage = (value) => imageRegex.test(value);
432
+ var getDefaultConfig = () => {
433
+ const colors = fromTheme("colors");
434
+ const spacing = fromTheme("spacing");
435
+ const blur = fromTheme("blur");
436
+ const brightness = fromTheme("brightness");
437
+ const borderColor = fromTheme("borderColor");
438
+ const borderRadius = fromTheme("borderRadius");
439
+ const borderSpacing = fromTheme("borderSpacing");
440
+ const borderWidth = fromTheme("borderWidth");
441
+ const contrast = fromTheme("contrast");
442
+ const grayscale = fromTheme("grayscale");
443
+ const hueRotate = fromTheme("hueRotate");
444
+ const invert = fromTheme("invert");
445
+ const gap = fromTheme("gap");
446
+ const gradientColorStops = fromTheme("gradientColorStops");
447
+ const gradientColorStopPositions = fromTheme("gradientColorStopPositions");
448
+ const inset = fromTheme("inset");
449
+ const margin = fromTheme("margin");
450
+ const opacity = fromTheme("opacity");
451
+ const padding = fromTheme("padding");
452
+ const saturate = fromTheme("saturate");
453
+ const scale = fromTheme("scale");
454
+ const sepia = fromTheme("sepia");
455
+ const skew = fromTheme("skew");
456
+ const space = fromTheme("space");
457
+ const translate = fromTheme("translate");
458
+ const getOverscroll = () => ["auto", "contain", "none"];
459
+ const getOverflow = () => ["auto", "hidden", "clip", "visible", "scroll"];
460
+ const getSpacingWithAutoAndArbitrary = () => ["auto", isArbitraryValue, spacing];
461
+ const getSpacingWithArbitrary = () => [isArbitraryValue, spacing];
462
+ const getLengthWithEmptyAndArbitrary = () => ["", isLength, isArbitraryLength];
463
+ const getNumberWithAutoAndArbitrary = () => ["auto", isNumber, isArbitraryValue];
464
+ const getPositions = () => ["bottom", "center", "left", "left-bottom", "left-top", "right", "right-bottom", "right-top", "top"];
465
+ const getLineStyles = () => ["solid", "dashed", "dotted", "double", "none"];
466
+ const getBlendModes = () => ["normal", "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity"];
467
+ const getAlign = () => ["start", "end", "center", "between", "around", "evenly", "stretch"];
468
+ const getZeroAndEmpty = () => ["", "0", isArbitraryValue];
469
+ const getBreaks = () => ["auto", "avoid", "all", "avoid-page", "page", "left", "right", "column"];
470
+ const getNumberAndArbitrary = () => [isNumber, isArbitraryValue];
471
+ return {
472
+ cacheSize: 500,
473
+ separator: ":",
474
+ theme: {
475
+ colors: [isAny],
476
+ spacing: [isLength, isArbitraryLength],
477
+ blur: ["none", "", isTshirtSize, isArbitraryValue],
478
+ brightness: getNumberAndArbitrary(),
479
+ borderColor: [colors],
480
+ borderRadius: ["none", "", "full", isTshirtSize, isArbitraryValue],
481
+ borderSpacing: getSpacingWithArbitrary(),
482
+ borderWidth: getLengthWithEmptyAndArbitrary(),
483
+ contrast: getNumberAndArbitrary(),
484
+ grayscale: getZeroAndEmpty(),
485
+ hueRotate: getNumberAndArbitrary(),
486
+ invert: getZeroAndEmpty(),
487
+ gap: getSpacingWithArbitrary(),
488
+ gradientColorStops: [colors],
489
+ gradientColorStopPositions: [isPercent, isArbitraryLength],
490
+ inset: getSpacingWithAutoAndArbitrary(),
491
+ margin: getSpacingWithAutoAndArbitrary(),
492
+ opacity: getNumberAndArbitrary(),
493
+ padding: getSpacingWithArbitrary(),
494
+ saturate: getNumberAndArbitrary(),
495
+ scale: getNumberAndArbitrary(),
496
+ sepia: getZeroAndEmpty(),
497
+ skew: getNumberAndArbitrary(),
498
+ space: getSpacingWithArbitrary(),
499
+ translate: getSpacingWithArbitrary()
500
+ },
501
+ classGroups: {
502
+ aspect: [{
503
+ aspect: ["auto", "square", "video", isArbitraryValue]
504
+ }],
505
+ container: ["container"],
506
+ columns: [{
507
+ columns: [isTshirtSize]
508
+ }],
509
+ "break-after": [{
510
+ "break-after": getBreaks()
511
+ }],
512
+ "break-before": [{
513
+ "break-before": getBreaks()
514
+ }],
515
+ "break-inside": [{
516
+ "break-inside": ["auto", "avoid", "avoid-page", "avoid-column"]
517
+ }],
518
+ "box-decoration": [{
519
+ "box-decoration": ["slice", "clone"]
520
+ }],
521
+ box: [{
522
+ box: ["border", "content"]
523
+ }],
524
+ 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"],
525
+ float: [{
526
+ float: ["right", "left", "none", "start", "end"]
527
+ }],
528
+ clear: [{
529
+ clear: ["left", "right", "both", "none", "start", "end"]
530
+ }],
531
+ isolation: ["isolate", "isolation-auto"],
532
+ "object-fit": [{
533
+ object: ["contain", "cover", "fill", "none", "scale-down"]
534
+ }],
535
+ "object-position": [{
536
+ object: [...getPositions(), isArbitraryValue]
537
+ }],
538
+ overflow: [{
539
+ overflow: getOverflow()
540
+ }],
541
+ "overflow-x": [{
542
+ "overflow-x": getOverflow()
543
+ }],
544
+ "overflow-y": [{
545
+ "overflow-y": getOverflow()
546
+ }],
547
+ overscroll: [{
548
+ overscroll: getOverscroll()
549
+ }],
550
+ "overscroll-x": [{
551
+ "overscroll-x": getOverscroll()
552
+ }],
553
+ "overscroll-y": [{
554
+ "overscroll-y": getOverscroll()
555
+ }],
556
+ position: ["static", "fixed", "absolute", "relative", "sticky"],
557
+ inset: [{
558
+ inset: [inset]
559
+ }],
560
+ "inset-x": [{
561
+ "inset-x": [inset]
562
+ }],
563
+ "inset-y": [{
564
+ "inset-y": [inset]
565
+ }],
566
+ start: [{
567
+ start: [inset]
568
+ }],
569
+ end: [{
570
+ end: [inset]
571
+ }],
572
+ top: [{
573
+ top: [inset]
574
+ }],
575
+ right: [{
576
+ right: [inset]
577
+ }],
578
+ bottom: [{
579
+ bottom: [inset]
580
+ }],
581
+ left: [{
582
+ left: [inset]
583
+ }],
584
+ visibility: ["visible", "invisible", "collapse"],
585
+ z: [{
586
+ z: ["auto", isInteger, isArbitraryValue]
587
+ }],
588
+ basis: [{
589
+ basis: getSpacingWithAutoAndArbitrary()
590
+ }],
591
+ "flex-direction": [{
592
+ flex: ["row", "row-reverse", "col", "col-reverse"]
593
+ }],
594
+ "flex-wrap": [{
595
+ flex: ["wrap", "wrap-reverse", "nowrap"]
596
+ }],
597
+ flex: [{
598
+ flex: ["1", "auto", "initial", "none", isArbitraryValue]
599
+ }],
600
+ grow: [{
601
+ grow: getZeroAndEmpty()
602
+ }],
603
+ shrink: [{
604
+ shrink: getZeroAndEmpty()
605
+ }],
606
+ order: [{
607
+ order: ["first", "last", "none", isInteger, isArbitraryValue]
608
+ }],
609
+ "grid-cols": [{
610
+ "grid-cols": [isAny]
611
+ }],
612
+ "col-start-end": [{
613
+ col: ["auto", {
614
+ span: ["full", isInteger, isArbitraryValue]
615
+ }, isArbitraryValue]
616
+ }],
617
+ "col-start": [{
618
+ "col-start": getNumberWithAutoAndArbitrary()
619
+ }],
620
+ "col-end": [{
621
+ "col-end": getNumberWithAutoAndArbitrary()
622
+ }],
623
+ "grid-rows": [{
624
+ "grid-rows": [isAny]
625
+ }],
626
+ "row-start-end": [{
627
+ row: ["auto", {
628
+ span: [isInteger, isArbitraryValue]
629
+ }, isArbitraryValue]
630
+ }],
631
+ "row-start": [{
632
+ "row-start": getNumberWithAutoAndArbitrary()
633
+ }],
634
+ "row-end": [{
635
+ "row-end": getNumberWithAutoAndArbitrary()
636
+ }],
637
+ "grid-flow": [{
638
+ "grid-flow": ["row", "col", "dense", "row-dense", "col-dense"]
639
+ }],
640
+ "auto-cols": [{
641
+ "auto-cols": ["auto", "min", "max", "fr", isArbitraryValue]
642
+ }],
643
+ "auto-rows": [{
644
+ "auto-rows": ["auto", "min", "max", "fr", isArbitraryValue]
645
+ }],
646
+ gap: [{
647
+ gap: [gap]
648
+ }],
649
+ "gap-x": [{
650
+ "gap-x": [gap]
651
+ }],
652
+ "gap-y": [{
653
+ "gap-y": [gap]
654
+ }],
655
+ "justify-content": [{
656
+ justify: ["normal", ...getAlign()]
657
+ }],
658
+ "justify-items": [{
659
+ "justify-items": ["start", "end", "center", "stretch"]
660
+ }],
661
+ "justify-self": [{
662
+ "justify-self": ["auto", "start", "end", "center", "stretch"]
663
+ }],
664
+ "align-content": [{
665
+ content: ["normal", ...getAlign(), "baseline"]
666
+ }],
667
+ "align-items": [{
668
+ items: ["start", "end", "center", "baseline", "stretch"]
669
+ }],
670
+ "align-self": [{
671
+ self: ["auto", "start", "end", "center", "stretch", "baseline"]
672
+ }],
673
+ "place-content": [{
674
+ "place-content": [...getAlign(), "baseline"]
675
+ }],
676
+ "place-items": [{
677
+ "place-items": ["start", "end", "center", "baseline", "stretch"]
678
+ }],
679
+ "place-self": [{
680
+ "place-self": ["auto", "start", "end", "center", "stretch"]
681
+ }],
682
+ p: [{
683
+ p: [padding]
684
+ }],
685
+ px: [{
686
+ px: [padding]
687
+ }],
688
+ py: [{
689
+ py: [padding]
690
+ }],
691
+ ps: [{
692
+ ps: [padding]
693
+ }],
694
+ pe: [{
695
+ pe: [padding]
696
+ }],
697
+ pt: [{
698
+ pt: [padding]
699
+ }],
700
+ pr: [{
701
+ pr: [padding]
702
+ }],
703
+ pb: [{
704
+ pb: [padding]
705
+ }],
706
+ pl: [{
707
+ pl: [padding]
708
+ }],
709
+ m: [{
710
+ m: [margin]
711
+ }],
712
+ mx: [{
713
+ mx: [margin]
714
+ }],
715
+ my: [{
716
+ my: [margin]
717
+ }],
718
+ ms: [{
719
+ ms: [margin]
720
+ }],
721
+ me: [{
722
+ me: [margin]
723
+ }],
724
+ mt: [{
725
+ mt: [margin]
726
+ }],
727
+ mr: [{
728
+ mr: [margin]
729
+ }],
730
+ mb: [{
731
+ mb: [margin]
732
+ }],
733
+ ml: [{
734
+ ml: [margin]
735
+ }],
736
+ "space-x": [{
737
+ "space-x": [space]
738
+ }],
739
+ "space-x-reverse": ["space-x-reverse"],
740
+ "space-y": [{
741
+ "space-y": [space]
742
+ }],
743
+ "space-y-reverse": ["space-y-reverse"],
744
+ w: [{
745
+ w: ["auto", "min", "max", "fit", "svw", "lvw", "dvw", isArbitraryValue, spacing]
746
+ }],
747
+ "min-w": [{
748
+ "min-w": [isArbitraryValue, spacing, "min", "max", "fit"]
749
+ }],
750
+ "max-w": [{
751
+ "max-w": [isArbitraryValue, spacing, "none", "full", "min", "max", "fit", "prose", {
752
+ screen: [isTshirtSize]
753
+ }, isTshirtSize]
754
+ }],
755
+ h: [{
756
+ h: [isArbitraryValue, spacing, "auto", "min", "max", "fit", "svh", "lvh", "dvh"]
757
+ }],
758
+ "min-h": [{
759
+ "min-h": [isArbitraryValue, spacing, "min", "max", "fit", "svh", "lvh", "dvh"]
760
+ }],
761
+ "max-h": [{
762
+ "max-h": [isArbitraryValue, spacing, "min", "max", "fit", "svh", "lvh", "dvh"]
763
+ }],
764
+ size: [{
765
+ size: [isArbitraryValue, spacing, "auto", "min", "max", "fit"]
766
+ }],
767
+ "font-size": [{
768
+ text: ["base", isTshirtSize, isArbitraryLength]
769
+ }],
770
+ "font-smoothing": ["antialiased", "subpixel-antialiased"],
771
+ "font-style": ["italic", "not-italic"],
772
+ "font-weight": [{
773
+ font: ["thin", "extralight", "light", "normal", "medium", "semibold", "bold", "extrabold", "black", isArbitraryNumber]
774
+ }],
775
+ "font-family": [{
776
+ font: [isAny]
777
+ }],
778
+ "fvn-normal": ["normal-nums"],
779
+ "fvn-ordinal": ["ordinal"],
780
+ "fvn-slashed-zero": ["slashed-zero"],
781
+ "fvn-figure": ["lining-nums", "oldstyle-nums"],
782
+ "fvn-spacing": ["proportional-nums", "tabular-nums"],
783
+ "fvn-fraction": ["diagonal-fractions", "stacked-fractons"],
784
+ tracking: [{
785
+ tracking: ["tighter", "tight", "normal", "wide", "wider", "widest", isArbitraryValue]
786
+ }],
787
+ "line-clamp": [{
788
+ "line-clamp": ["none", isNumber, isArbitraryNumber]
789
+ }],
790
+ leading: [{
791
+ leading: ["none", "tight", "snug", "normal", "relaxed", "loose", isLength, isArbitraryValue]
792
+ }],
793
+ "list-image": [{
794
+ "list-image": ["none", isArbitraryValue]
795
+ }],
796
+ "list-style-type": [{
797
+ list: ["none", "disc", "decimal", isArbitraryValue]
798
+ }],
799
+ "list-style-position": [{
800
+ list: ["inside", "outside"]
801
+ }],
802
+ "placeholder-color": [{
803
+ placeholder: [colors]
804
+ }],
805
+ "placeholder-opacity": [{
806
+ "placeholder-opacity": [opacity]
807
+ }],
808
+ "text-alignment": [{
809
+ text: ["left", "center", "right", "justify", "start", "end"]
810
+ }],
811
+ "text-color": [{
812
+ text: [colors]
813
+ }],
814
+ "text-opacity": [{
815
+ "text-opacity": [opacity]
816
+ }],
817
+ "text-decoration": ["underline", "overline", "line-through", "no-underline"],
818
+ "text-decoration-style": [{
819
+ decoration: [...getLineStyles(), "wavy"]
820
+ }],
821
+ "text-decoration-thickness": [{
822
+ decoration: ["auto", "from-font", isLength, isArbitraryLength]
823
+ }],
824
+ "underline-offset": [{
825
+ "underline-offset": ["auto", isLength, isArbitraryValue]
826
+ }],
827
+ "text-decoration-color": [{
828
+ decoration: [colors]
829
+ }],
830
+ "text-transform": ["uppercase", "lowercase", "capitalize", "normal-case"],
831
+ "text-overflow": ["truncate", "text-ellipsis", "text-clip"],
832
+ "text-wrap": [{
833
+ text: ["wrap", "nowrap", "balance", "pretty"]
834
+ }],
835
+ indent: [{
836
+ indent: getSpacingWithArbitrary()
837
+ }],
838
+ "vertical-align": [{
839
+ align: ["baseline", "top", "middle", "bottom", "text-top", "text-bottom", "sub", "super", isArbitraryValue]
840
+ }],
841
+ whitespace: [{
842
+ whitespace: ["normal", "nowrap", "pre", "pre-line", "pre-wrap", "break-spaces"]
843
+ }],
844
+ break: [{
845
+ break: ["normal", "words", "all", "keep"]
846
+ }],
847
+ hyphens: [{
848
+ hyphens: ["none", "manual", "auto"]
849
+ }],
850
+ content: [{
851
+ content: ["none", isArbitraryValue]
852
+ }],
853
+ "bg-attachment": [{
854
+ bg: ["fixed", "local", "scroll"]
855
+ }],
856
+ "bg-clip": [{
857
+ "bg-clip": ["border", "padding", "content", "text"]
858
+ }],
859
+ "bg-opacity": [{
860
+ "bg-opacity": [opacity]
861
+ }],
862
+ "bg-origin": [{
863
+ "bg-origin": ["border", "padding", "content"]
864
+ }],
865
+ "bg-position": [{
866
+ bg: [...getPositions(), isArbitraryPosition]
867
+ }],
868
+ "bg-repeat": [{
869
+ bg: ["no-repeat", {
870
+ repeat: ["", "x", "y", "round", "space"]
871
+ }]
872
+ }],
873
+ "bg-size": [{
874
+ bg: ["auto", "cover", "contain", isArbitrarySize]
875
+ }],
876
+ "bg-image": [{
877
+ bg: ["none", {
878
+ "gradient-to": ["t", "tr", "r", "br", "b", "bl", "l", "tl"]
879
+ }, isArbitraryImage]
880
+ }],
881
+ "bg-color": [{
882
+ bg: [colors]
883
+ }],
884
+ "gradient-from-pos": [{
885
+ from: [gradientColorStopPositions]
886
+ }],
887
+ "gradient-via-pos": [{
888
+ via: [gradientColorStopPositions]
889
+ }],
890
+ "gradient-to-pos": [{
891
+ to: [gradientColorStopPositions]
892
+ }],
893
+ "gradient-from": [{
894
+ from: [gradientColorStops]
895
+ }],
896
+ "gradient-via": [{
897
+ via: [gradientColorStops]
898
+ }],
899
+ "gradient-to": [{
900
+ to: [gradientColorStops]
901
+ }],
902
+ rounded: [{
903
+ rounded: [borderRadius]
904
+ }],
905
+ "rounded-s": [{
906
+ "rounded-s": [borderRadius]
907
+ }],
908
+ "rounded-e": [{
909
+ "rounded-e": [borderRadius]
910
+ }],
911
+ "rounded-t": [{
912
+ "rounded-t": [borderRadius]
913
+ }],
914
+ "rounded-r": [{
915
+ "rounded-r": [borderRadius]
916
+ }],
917
+ "rounded-b": [{
918
+ "rounded-b": [borderRadius]
919
+ }],
920
+ "rounded-l": [{
921
+ "rounded-l": [borderRadius]
922
+ }],
923
+ "rounded-ss": [{
924
+ "rounded-ss": [borderRadius]
925
+ }],
926
+ "rounded-se": [{
927
+ "rounded-se": [borderRadius]
928
+ }],
929
+ "rounded-ee": [{
930
+ "rounded-ee": [borderRadius]
931
+ }],
932
+ "rounded-es": [{
933
+ "rounded-es": [borderRadius]
934
+ }],
935
+ "rounded-tl": [{
936
+ "rounded-tl": [borderRadius]
937
+ }],
938
+ "rounded-tr": [{
939
+ "rounded-tr": [borderRadius]
940
+ }],
941
+ "rounded-br": [{
942
+ "rounded-br": [borderRadius]
943
+ }],
944
+ "rounded-bl": [{
945
+ "rounded-bl": [borderRadius]
946
+ }],
947
+ "border-w": [{
948
+ border: [borderWidth]
949
+ }],
950
+ "border-w-x": [{
951
+ "border-x": [borderWidth]
952
+ }],
953
+ "border-w-y": [{
954
+ "border-y": [borderWidth]
955
+ }],
956
+ "border-w-s": [{
957
+ "border-s": [borderWidth]
958
+ }],
959
+ "border-w-e": [{
960
+ "border-e": [borderWidth]
961
+ }],
962
+ "border-w-t": [{
963
+ "border-t": [borderWidth]
964
+ }],
965
+ "border-w-r": [{
966
+ "border-r": [borderWidth]
967
+ }],
968
+ "border-w-b": [{
969
+ "border-b": [borderWidth]
970
+ }],
971
+ "border-w-l": [{
972
+ "border-l": [borderWidth]
973
+ }],
974
+ "border-opacity": [{
975
+ "border-opacity": [opacity]
976
+ }],
977
+ "border-style": [{
978
+ border: [...getLineStyles(), "hidden"]
979
+ }],
980
+ "divide-x": [{
981
+ "divide-x": [borderWidth]
982
+ }],
983
+ "divide-x-reverse": ["divide-x-reverse"],
984
+ "divide-y": [{
985
+ "divide-y": [borderWidth]
986
+ }],
987
+ "divide-y-reverse": ["divide-y-reverse"],
988
+ "divide-opacity": [{
989
+ "divide-opacity": [opacity]
990
+ }],
991
+ "divide-style": [{
992
+ divide: getLineStyles()
993
+ }],
994
+ "border-color": [{
995
+ border: [borderColor]
996
+ }],
997
+ "border-color-x": [{
998
+ "border-x": [borderColor]
999
+ }],
1000
+ "border-color-y": [{
1001
+ "border-y": [borderColor]
1002
+ }],
1003
+ "border-color-t": [{
1004
+ "border-t": [borderColor]
1005
+ }],
1006
+ "border-color-r": [{
1007
+ "border-r": [borderColor]
1008
+ }],
1009
+ "border-color-b": [{
1010
+ "border-b": [borderColor]
1011
+ }],
1012
+ "border-color-l": [{
1013
+ "border-l": [borderColor]
1014
+ }],
1015
+ "divide-color": [{
1016
+ divide: [borderColor]
1017
+ }],
1018
+ "outline-style": [{
1019
+ outline: ["", ...getLineStyles()]
1020
+ }],
1021
+ "outline-offset": [{
1022
+ "outline-offset": [isLength, isArbitraryValue]
1023
+ }],
1024
+ "outline-w": [{
1025
+ outline: [isLength, isArbitraryLength]
1026
+ }],
1027
+ "outline-color": [{
1028
+ outline: [colors]
1029
+ }],
1030
+ "ring-w": [{
1031
+ ring: getLengthWithEmptyAndArbitrary()
1032
+ }],
1033
+ "ring-w-inset": ["ring-inset"],
1034
+ "ring-color": [{
1035
+ ring: [colors]
1036
+ }],
1037
+ "ring-opacity": [{
1038
+ "ring-opacity": [opacity]
1039
+ }],
1040
+ "ring-offset-w": [{
1041
+ "ring-offset": [isLength, isArbitraryLength]
1042
+ }],
1043
+ "ring-offset-color": [{
1044
+ "ring-offset": [colors]
1045
+ }],
1046
+ shadow: [{
1047
+ shadow: ["", "inner", "none", isTshirtSize, isArbitraryShadow]
1048
+ }],
1049
+ "shadow-color": [{
1050
+ shadow: [isAny]
1051
+ }],
1052
+ opacity: [{
1053
+ opacity: [opacity]
1054
+ }],
1055
+ "mix-blend": [{
1056
+ "mix-blend": [...getBlendModes(), "plus-lighter", "plus-darker"]
1057
+ }],
1058
+ "bg-blend": [{
1059
+ "bg-blend": getBlendModes()
1060
+ }],
1061
+ filter: [{
1062
+ filter: ["", "none"]
1063
+ }],
1064
+ blur: [{
1065
+ blur: [blur]
1066
+ }],
1067
+ brightness: [{
1068
+ brightness: [brightness]
1069
+ }],
1070
+ contrast: [{
1071
+ contrast: [contrast]
1072
+ }],
1073
+ "drop-shadow": [{
1074
+ "drop-shadow": ["", "none", isTshirtSize, isArbitraryValue]
1075
+ }],
1076
+ grayscale: [{
1077
+ grayscale: [grayscale]
1078
+ }],
1079
+ "hue-rotate": [{
1080
+ "hue-rotate": [hueRotate]
1081
+ }],
1082
+ invert: [{
1083
+ invert: [invert]
1084
+ }],
1085
+ saturate: [{
1086
+ saturate: [saturate]
1087
+ }],
1088
+ sepia: [{
1089
+ sepia: [sepia]
1090
+ }],
1091
+ "backdrop-filter": [{
1092
+ "backdrop-filter": ["", "none"]
1093
+ }],
1094
+ "backdrop-blur": [{
1095
+ "backdrop-blur": [blur]
1096
+ }],
1097
+ "backdrop-brightness": [{
1098
+ "backdrop-brightness": [brightness]
1099
+ }],
1100
+ "backdrop-contrast": [{
1101
+ "backdrop-contrast": [contrast]
1102
+ }],
1103
+ "backdrop-grayscale": [{
1104
+ "backdrop-grayscale": [grayscale]
1105
+ }],
1106
+ "backdrop-hue-rotate": [{
1107
+ "backdrop-hue-rotate": [hueRotate]
1108
+ }],
1109
+ "backdrop-invert": [{
1110
+ "backdrop-invert": [invert]
1111
+ }],
1112
+ "backdrop-opacity": [{
1113
+ "backdrop-opacity": [opacity]
1114
+ }],
1115
+ "backdrop-saturate": [{
1116
+ "backdrop-saturate": [saturate]
1117
+ }],
1118
+ "backdrop-sepia": [{
1119
+ "backdrop-sepia": [sepia]
1120
+ }],
1121
+ "border-collapse": [{
1122
+ border: ["collapse", "separate"]
1123
+ }],
1124
+ "border-spacing": [{
1125
+ "border-spacing": [borderSpacing]
1126
+ }],
1127
+ "border-spacing-x": [{
1128
+ "border-spacing-x": [borderSpacing]
1129
+ }],
1130
+ "border-spacing-y": [{
1131
+ "border-spacing-y": [borderSpacing]
1132
+ }],
1133
+ "table-layout": [{
1134
+ table: ["auto", "fixed"]
1135
+ }],
1136
+ caption: [{
1137
+ caption: ["top", "bottom"]
1138
+ }],
1139
+ transition: [{
1140
+ transition: ["none", "all", "", "colors", "opacity", "shadow", "transform", isArbitraryValue]
1141
+ }],
1142
+ duration: [{
1143
+ duration: getNumberAndArbitrary()
1144
+ }],
1145
+ ease: [{
1146
+ ease: ["linear", "in", "out", "in-out", isArbitraryValue]
1147
+ }],
1148
+ delay: [{
1149
+ delay: getNumberAndArbitrary()
1150
+ }],
1151
+ animate: [{
1152
+ animate: ["none", "spin", "ping", "pulse", "bounce", isArbitraryValue]
1153
+ }],
1154
+ transform: [{
1155
+ transform: ["", "gpu", "none"]
1156
+ }],
1157
+ scale: [{
1158
+ scale: [scale]
1159
+ }],
1160
+ "scale-x": [{
1161
+ "scale-x": [scale]
1162
+ }],
1163
+ "scale-y": [{
1164
+ "scale-y": [scale]
1165
+ }],
1166
+ rotate: [{
1167
+ rotate: [isInteger, isArbitraryValue]
1168
+ }],
1169
+ "translate-x": [{
1170
+ "translate-x": [translate]
1171
+ }],
1172
+ "translate-y": [{
1173
+ "translate-y": [translate]
1174
+ }],
1175
+ "skew-x": [{
1176
+ "skew-x": [skew]
1177
+ }],
1178
+ "skew-y": [{
1179
+ "skew-y": [skew]
1180
+ }],
1181
+ "transform-origin": [{
1182
+ origin: ["center", "top", "top-right", "right", "bottom-right", "bottom", "bottom-left", "left", "top-left", isArbitraryValue]
1183
+ }],
1184
+ accent: [{
1185
+ accent: ["auto", colors]
1186
+ }],
1187
+ appearance: [{
1188
+ appearance: ["none", "auto"]
1189
+ }],
1190
+ cursor: [{
1191
+ 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]
1192
+ }],
1193
+ "caret-color": [{
1194
+ caret: [colors]
1195
+ }],
1196
+ "pointer-events": [{
1197
+ "pointer-events": ["none", "auto"]
1198
+ }],
1199
+ resize: [{
1200
+ resize: ["none", "y", "x", ""]
1201
+ }],
1202
+ "scroll-behavior": [{
1203
+ scroll: ["auto", "smooth"]
1204
+ }],
1205
+ "scroll-m": [{
1206
+ "scroll-m": getSpacingWithArbitrary()
1207
+ }],
1208
+ "scroll-mx": [{
1209
+ "scroll-mx": getSpacingWithArbitrary()
1210
+ }],
1211
+ "scroll-my": [{
1212
+ "scroll-my": getSpacingWithArbitrary()
1213
+ }],
1214
+ "scroll-ms": [{
1215
+ "scroll-ms": getSpacingWithArbitrary()
1216
+ }],
1217
+ "scroll-me": [{
1218
+ "scroll-me": getSpacingWithArbitrary()
1219
+ }],
1220
+ "scroll-mt": [{
1221
+ "scroll-mt": getSpacingWithArbitrary()
1222
+ }],
1223
+ "scroll-mr": [{
1224
+ "scroll-mr": getSpacingWithArbitrary()
1225
+ }],
1226
+ "scroll-mb": [{
1227
+ "scroll-mb": getSpacingWithArbitrary()
1228
+ }],
1229
+ "scroll-ml": [{
1230
+ "scroll-ml": getSpacingWithArbitrary()
1231
+ }],
1232
+ "scroll-p": [{
1233
+ "scroll-p": getSpacingWithArbitrary()
1234
+ }],
1235
+ "scroll-px": [{
1236
+ "scroll-px": getSpacingWithArbitrary()
1237
+ }],
1238
+ "scroll-py": [{
1239
+ "scroll-py": getSpacingWithArbitrary()
1240
+ }],
1241
+ "scroll-ps": [{
1242
+ "scroll-ps": getSpacingWithArbitrary()
1243
+ }],
1244
+ "scroll-pe": [{
1245
+ "scroll-pe": getSpacingWithArbitrary()
1246
+ }],
1247
+ "scroll-pt": [{
1248
+ "scroll-pt": getSpacingWithArbitrary()
1249
+ }],
1250
+ "scroll-pr": [{
1251
+ "scroll-pr": getSpacingWithArbitrary()
1252
+ }],
1253
+ "scroll-pb": [{
1254
+ "scroll-pb": getSpacingWithArbitrary()
1255
+ }],
1256
+ "scroll-pl": [{
1257
+ "scroll-pl": getSpacingWithArbitrary()
1258
+ }],
1259
+ "snap-align": [{
1260
+ snap: ["start", "end", "center", "align-none"]
1261
+ }],
1262
+ "snap-stop": [{
1263
+ snap: ["normal", "always"]
1264
+ }],
1265
+ "snap-type": [{
1266
+ snap: ["none", "x", "y", "both"]
1267
+ }],
1268
+ "snap-strictness": [{
1269
+ snap: ["mandatory", "proximity"]
1270
+ }],
1271
+ touch: [{
1272
+ touch: ["auto", "none", "manipulation"]
1273
+ }],
1274
+ "touch-x": [{
1275
+ "touch-pan": ["x", "left", "right"]
1276
+ }],
1277
+ "touch-y": [{
1278
+ "touch-pan": ["y", "up", "down"]
1279
+ }],
1280
+ "touch-pz": ["touch-pinch-zoom"],
1281
+ select: [{
1282
+ select: ["none", "text", "all", "auto"]
1283
+ }],
1284
+ "will-change": [{
1285
+ "will-change": ["auto", "scroll", "contents", "transform", isArbitraryValue]
1286
+ }],
1287
+ fill: [{
1288
+ fill: [colors, "none"]
1289
+ }],
1290
+ "stroke-w": [{
1291
+ stroke: [isLength, isArbitraryLength, isArbitraryNumber]
1292
+ }],
1293
+ stroke: [{
1294
+ stroke: [colors, "none"]
1295
+ }],
1296
+ sr: ["sr-only", "not-sr-only"],
1297
+ "forced-color-adjust": [{
1298
+ "forced-color-adjust": ["auto", "none"]
1299
+ }]
1300
+ },
1301
+ conflictingClassGroups: {
1302
+ overflow: ["overflow-x", "overflow-y"],
1303
+ overscroll: ["overscroll-x", "overscroll-y"],
1304
+ inset: ["inset-x", "inset-y", "start", "end", "top", "right", "bottom", "left"],
1305
+ "inset-x": ["right", "left"],
1306
+ "inset-y": ["top", "bottom"],
1307
+ flex: ["basis", "grow", "shrink"],
1308
+ gap: ["gap-x", "gap-y"],
1309
+ p: ["px", "py", "ps", "pe", "pt", "pr", "pb", "pl"],
1310
+ px: ["pr", "pl"],
1311
+ py: ["pt", "pb"],
1312
+ m: ["mx", "my", "ms", "me", "mt", "mr", "mb", "ml"],
1313
+ mx: ["mr", "ml"],
1314
+ my: ["mt", "mb"],
1315
+ size: ["w", "h"],
1316
+ "font-size": ["leading"],
1317
+ "fvn-normal": ["fvn-ordinal", "fvn-slashed-zero", "fvn-figure", "fvn-spacing", "fvn-fraction"],
1318
+ "fvn-ordinal": ["fvn-normal"],
1319
+ "fvn-slashed-zero": ["fvn-normal"],
1320
+ "fvn-figure": ["fvn-normal"],
1321
+ "fvn-spacing": ["fvn-normal"],
1322
+ "fvn-fraction": ["fvn-normal"],
1323
+ "line-clamp": ["display", "overflow"],
1324
+ 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"],
1325
+ "rounded-s": ["rounded-ss", "rounded-es"],
1326
+ "rounded-e": ["rounded-se", "rounded-ee"],
1327
+ "rounded-t": ["rounded-tl", "rounded-tr"],
1328
+ "rounded-r": ["rounded-tr", "rounded-br"],
1329
+ "rounded-b": ["rounded-br", "rounded-bl"],
1330
+ "rounded-l": ["rounded-tl", "rounded-bl"],
1331
+ "border-spacing": ["border-spacing-x", "border-spacing-y"],
1332
+ "border-w": ["border-w-s", "border-w-e", "border-w-t", "border-w-r", "border-w-b", "border-w-l"],
1333
+ "border-w-x": ["border-w-r", "border-w-l"],
1334
+ "border-w-y": ["border-w-t", "border-w-b"],
1335
+ "border-color": ["border-color-t", "border-color-r", "border-color-b", "border-color-l"],
1336
+ "border-color-x": ["border-color-r", "border-color-l"],
1337
+ "border-color-y": ["border-color-t", "border-color-b"],
1338
+ "scroll-m": ["scroll-mx", "scroll-my", "scroll-ms", "scroll-me", "scroll-mt", "scroll-mr", "scroll-mb", "scroll-ml"],
1339
+ "scroll-mx": ["scroll-mr", "scroll-ml"],
1340
+ "scroll-my": ["scroll-mt", "scroll-mb"],
1341
+ "scroll-p": ["scroll-px", "scroll-py", "scroll-ps", "scroll-pe", "scroll-pt", "scroll-pr", "scroll-pb", "scroll-pl"],
1342
+ "scroll-px": ["scroll-pr", "scroll-pl"],
1343
+ "scroll-py": ["scroll-pt", "scroll-pb"],
1344
+ touch: ["touch-x", "touch-y", "touch-pz"],
1345
+ "touch-x": ["touch"],
1346
+ "touch-y": ["touch"],
1347
+ "touch-pz": ["touch"]
1348
+ },
1349
+ conflictingClassGroupModifiers: {
1350
+ "font-size": ["leading"]
1351
+ }
1352
+ };
1353
+ };
1354
+ var twMerge = /* @__PURE__ */ createTailwindMerge(getDefaultConfig);
1355
+
1356
+ // src/cn.ts
1357
+ function cn(...inputs) {
1358
+ return twMerge(clsx(inputs));
1359
+ }
1360
+
1361
+ // src/components/homepage/Counter.tsx
1362
+ import { jsx, jsxs } from "react/jsx-runtime";
1363
+ var Triangle = ({ rotated }) => /* @__PURE__ */ jsx("svg", {
1364
+ width: "12px",
1365
+ height: "7px",
1366
+ viewBox: "0 0 12 7",
1367
+ fill: "none",
1368
+ style: {
1369
+ transform: rotated ? "rotate(180deg)" : "rotate(0deg)"
1370
+ },
1371
+ children: /* @__PURE__ */ jsx("path", {
1372
+ fill: "currentcolor",
1373
+ d: "M7.17096 0.475588C6.73198 0.0764969 6.01906 0.0764969 5.58007 0.475588L1.08483 4.56228C0.761737 4.85601 0.666915 5.29341 0.84251 5.67654C1.01811 6.05966 1.42549 6.3087 1.88203 6.3087H10.8725C11.3255 6.3087 11.7364 6.05966 11.912 5.67654C12.0876 5.29341 11.9893 4.85601 11.6697 4.56228L7.17448 0.475588H7.17096Z"
1374
+ })
1375
+ });
1376
+ var container = {
1377
+ display: "flex",
1378
+ flexDirection: "row",
1379
+ justifyContent: "flex-end",
1380
+ alignItems: "center",
1381
+ borderRadius: 4,
1382
+ height: 42,
1383
+ overflow: "hidden",
1384
+ flexShrink: 0
1385
+ };
1386
+ var buttonContainer = {
1387
+ display: "flex",
1388
+ width: 30,
1389
+ padding: 2,
1390
+ height: 20,
1391
+ justifyContent: "center",
1392
+ alignItems: "center",
1393
+ backgroundColor: "inherit",
1394
+ cursor: "pointer"
1395
+ };
1396
+ var Counter = ({
1397
+ count,
1398
+ setCount,
1399
+ minCount = 0
1400
+ }) => {
1401
+ const decrement = () => {
1402
+ if (count > minCount) {
1403
+ setCount(count - 1);
1404
+ }
1405
+ };
1406
+ const increment = () => {
1407
+ setCount(count + 1);
1408
+ };
1409
+ return /* @__PURE__ */ jsxs("div", {
1410
+ style: container,
1411
+ className: cn("border-effect w-[110px]"),
1412
+ children: [
1413
+ /* @__PURE__ */ jsx("input", {
1414
+ className: "fontbrand text-2xl font-medium min-w-[60px] border-0 text-end bg-transparent outline-0",
1415
+ type: "number",
1416
+ onClick: (e) => e.currentTarget.select(),
1417
+ value: count,
1418
+ onChange: (e) => {
1419
+ if (e.target.value.trim() === "") {
1420
+ setCount(1);
1421
+ return;
1422
+ }
1423
+ const max = Math.max(parseInt(e.target.value, 10), 1);
1424
+ setCount(max);
1425
+ }
1426
+ }),
1427
+ /* @__PURE__ */ jsxs("div", {
1428
+ className: "flex flex-col ml-3 h-full",
1429
+ children: [
1430
+ /* @__PURE__ */ jsx("button", {
1431
+ type: "button",
1432
+ className: "border-0 border-l-2 border-l-solid border-b-2 flex-1",
1433
+ style: {
1434
+ ...buttonContainer
1435
+ },
1436
+ onClick: increment,
1437
+ children: /* @__PURE__ */ jsx(Triangle, {
1438
+ rotated: false
1439
+ })
1440
+ }),
1441
+ /* @__PURE__ */ jsx("button", {
1442
+ type: "button",
1443
+ className: "border-0 border-l-2 border-l-solid flex-1",
1444
+ style: {
1445
+ ...buttonContainer
1446
+ },
1447
+ onClick: decrement,
1448
+ children: /* @__PURE__ */ jsx(Triangle, {
1449
+ rotated: true
1450
+ })
1451
+ })
1452
+ ]
1453
+ })
1454
+ ]
1455
+ });
1456
+ };
1457
+
1458
+ // src/components/homepage/InfoTooltip.tsx
1459
+ import { useState } from "react";
1460
+ import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
1461
+ var InfoTooltip = ({ text }) => {
1462
+ const [isVisible, setIsVisible] = useState(false);
1463
+ return /* @__PURE__ */ jsxs2("span", {
1464
+ className: "relative inline-block ml-1 text-gray-600 cursor-default",
1465
+ onMouseEnter: () => setIsVisible(true),
1466
+ onMouseLeave: () => setIsVisible(false),
1467
+ children: [
1468
+ /* @__PURE__ */ jsx2("span", {
1469
+ style: { fontSize: "1rem" },
1470
+ children: "ⓘ"
1471
+ }),
1472
+ isVisible && /* @__PURE__ */ jsxs2("span", {
1473
+ className: "absolute bottom-full left-1/2 transform -translate-x-1/2 bg-gray-800 text-white p-2 rounded text-xs whitespace-nowrap z-10 cursor-default",
1474
+ children: [
1475
+ text,
1476
+ /* @__PURE__ */ jsx2("span", {
1477
+ className: "absolute top-full left-1/2 transform -translate-x-1/2 border-5 border-solid border-gray-800 border-t-transparent border-r-transparent border-b-transparent border-l-transparent cursor-default"
1478
+ })
1479
+ ]
1480
+ })
1481
+ ]
1482
+ });
1483
+ };
1484
+
1485
+ // src/components/homepage/PricingBulletPoint.tsx
1486
+ import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
1487
+ var container2 = {
1488
+ display: "flex",
1489
+ flexDirection: "row",
1490
+ alignItems: "center",
1491
+ gap: "10px"
1492
+ };
1493
+ var greyCircle = {
1494
+ width: 20,
1495
+ height: 20,
1496
+ borderRadius: 10,
1497
+ backgroundColor: "var(--footer-border)"
1498
+ };
1499
+ var PricingBulletPoint = ({ text, checked, children }) => {
1500
+ const checkmarkSVG = /* @__PURE__ */ jsxs3("svg", {
1501
+ width: "20",
1502
+ height: "20",
1503
+ viewBox: "0 0 20 20",
1504
+ fill: "none",
1505
+ xmlns: "http://www.w3.org/2000/svg",
1506
+ style: {
1507
+ flexShrink: 0
1508
+ },
1509
+ children: [
1510
+ /* @__PURE__ */ jsx3("circle", {
1511
+ cx: "10",
1512
+ cy: "10",
1513
+ r: "10",
1514
+ fill: "#0B84F3"
1515
+ }),
1516
+ /* @__PURE__ */ jsx3("path", {
1517
+ d: "M14.7908 7.20505C15.0697 7.47844 15.0697 7.92243 14.7908 8.19583L9.07711 13.795C8.79813 14.0683 8.34505 14.0683 8.06606 13.795L5.20924 10.9954C4.93025 10.722 4.93025 10.278 5.20924 10.0046C5.48823 9.73121 5.9413 9.73121 6.22029 10.0046L8.5727 12.3077L13.7819 7.20505C14.0609 6.93165 14.514 6.93165 14.793 7.20505H14.7908Z",
1518
+ fill: "white"
1519
+ })
1520
+ ]
1521
+ });
1522
+ return /* @__PURE__ */ jsxs3("div", {
1523
+ style: container2,
1524
+ children: [
1525
+ checked ? checkmarkSVG : /* @__PURE__ */ jsx3("div", {
1526
+ style: greyCircle
1527
+ }),
1528
+ /* @__PURE__ */ jsxs3("div", {
1529
+ className: "fontbrand text-lg\t",
1530
+ children: [
1531
+ text,
1532
+ children
1533
+ ]
1534
+ })
1535
+ ]
1536
+ });
1537
+ };
1538
+
1539
+ // src/components/homepage/FreePricing.tsx
1540
+ import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
1541
+ var Container = ({
1542
+ children
1543
+ }) => {
1544
+ return /* @__PURE__ */ jsx4("div", {
1545
+ className: "flex flex-col border-effect rounded-xl p-5 bg-pane",
1546
+ children
1547
+ });
1548
+ };
1549
+ var Title = ({ children }) => {
1550
+ return /* @__PURE__ */ jsx4("div", {
1551
+ className: "text-4xl font-bold leading-none fontbrand mt-2 mb-5",
1552
+ children
1553
+ });
1554
+ };
1555
+ var Audience = ({ children }) => {
1556
+ return /* @__PURE__ */ jsx4("div", {
1557
+ className: "fontbrand text-lg leading-none",
1558
+ children
1559
+ });
1560
+ };
1561
+ var BottomInfo = ({
1562
+ children,
1563
+ className,
1564
+ ...props
1565
+ }) => {
1566
+ return /* @__PURE__ */ jsx4("div", {
1567
+ className: cn(className, "text-[var(--subtitle)] fontbrand text-sm"),
1568
+ ...props,
1569
+ children
1570
+ });
1571
+ };
1572
+ var PriceTag = ({ children }) => {
1573
+ return /* @__PURE__ */ jsx4("div", {
1574
+ className: "fontbrand text-2xl font-bold min-w-[80px] w-auto text-right shrink-0 ml-4",
1575
+ children
1576
+ });
1577
+ };
1578
+ var SmallPriceTag = ({ children }) => {
1579
+ return /* @__PURE__ */ jsx4("div", {
1580
+ className: "fontbrand text-2xl font-medium w-auto min-w-[80px] text-right shrink-0 ml-4",
1581
+ children
1582
+ });
1583
+ };
1584
+ var FreePricing = () => {
1585
+ return /* @__PURE__ */ jsxs4(Container, {
1586
+ children: [
1587
+ /* @__PURE__ */ jsx4(Audience, {
1588
+ children: "For individuals and companies of up to 3 people"
1589
+ }),
1590
+ /* @__PURE__ */ jsx4(Title, {
1591
+ children: "Free License"
1592
+ }),
1593
+ /* @__PURE__ */ jsx4(PricingBulletPoint, {
1594
+ text: "Unlimited videos",
1595
+ checked: true
1596
+ }),
1597
+ /* @__PURE__ */ jsx4(PricingBulletPoint, {
1598
+ text: "Commercial use allowed",
1599
+ checked: true
1600
+ }),
1601
+ /* @__PURE__ */ jsx4(PricingBulletPoint, {
1602
+ text: "Self-hosted cloud rendering allowed",
1603
+ checked: true
1604
+ }),
1605
+ /* @__PURE__ */ jsx4(PricingBulletPoint, {
1606
+ text: "Must upgrade when your team grows",
1607
+ checked: false
1608
+ })
1609
+ ]
1610
+ });
1611
+ };
1612
+ var textUnitWrapper = {
1613
+ display: "flex",
1614
+ flexDirection: "column"
1615
+ };
1616
+ var EnterpriseLicense = () => {
1617
+ return /* @__PURE__ */ jsxs4(Container, {
1618
+ children: [
1619
+ /* @__PURE__ */ jsx4(Audience, {
1620
+ children: "For advanced needs"
1621
+ }),
1622
+ /* @__PURE__ */ jsx4(Title, {
1623
+ children: "Enterprise License"
1624
+ }),
1625
+ /* @__PURE__ */ jsx4(PricingBulletPoint, {
1626
+ text: "Everything in Company License",
1627
+ checked: true
1628
+ }),
1629
+ /* @__PURE__ */ jsx4(PricingBulletPoint, {
1630
+ text: "Custom terms, billing and pricing",
1631
+ checked: true
1632
+ }),
1633
+ /* @__PURE__ */ jsx4(PricingBulletPoint, {
1634
+ text: "Compliance forms",
1635
+ checked: true
1636
+ }),
1637
+ /* @__PURE__ */ jsx4(PricingBulletPoint, {
1638
+ text: "Prioritized feature requests",
1639
+ checked: true
1640
+ }),
1641
+ /* @__PURE__ */ jsx4(PricingBulletPoint, {
1642
+ text: "Private support channel",
1643
+ checked: true
1644
+ }),
1645
+ /* @__PURE__ */ jsx4(PricingBulletPoint, {
1646
+ text: "Monthly consulting session",
1647
+ checked: true
1648
+ }),
1649
+ /* @__PURE__ */ jsx4("div", {
1650
+ style: { height: 30 }
1651
+ }),
1652
+ /* @__PURE__ */ jsx4("div", {
1653
+ className: "flex flex-row justify-end",
1654
+ children: /* @__PURE__ */ jsxs4("div", {
1655
+ style: {
1656
+ ...textUnitWrapper,
1657
+ alignItems: "flex-end"
1658
+ },
1659
+ children: [
1660
+ /* @__PURE__ */ jsx4(PriceTag, {
1661
+ children: /* @__PURE__ */ jsx4("a", {
1662
+ className: "cursor-pointer no-underline text-inherit hover:text-brand",
1663
+ target: "_blank",
1664
+ href: "https://www.remotion.pro/contact",
1665
+ children: "Contact us"
1666
+ })
1667
+ }),
1668
+ /* @__PURE__ */ jsx4("div", {
1669
+ className: "text-[var(--subtitle)] fontbrand text-sm",
1670
+ children: "Starting at $500 per month"
1671
+ })
1672
+ ]
1673
+ })
1674
+ })
1675
+ ]
1676
+ });
1677
+ };
1678
+ var SEAT_PRICE = 25;
1679
+ var RENDER_UNIT_PRICE = 10;
1680
+ var WEBCODECS_UNIT_PRICE = 10;
1681
+ var CompanyPricing = () => {
1682
+ const [devSeatCount, setDevSeatCount] = React2.useState(1);
1683
+ const [cloudUnitCount, setCloudUnitCount] = React2.useState(1);
1684
+ const [webcodecsUnits, setWebcodecsUnits] = React2.useState(1);
1685
+ const formatPrice = useCallback((price) => {
1686
+ const formatter = new Intl.NumberFormat("en-US", {
1687
+ style: "currency",
1688
+ currency: "USD",
1689
+ maximumFractionDigits: 0
1690
+ });
1691
+ return formatter.format(price);
1692
+ }, []);
1693
+ const totalPrice = useMemo(() => {
1694
+ return Math.max(100, devSeatCount * SEAT_PRICE + cloudUnitCount * RENDER_UNIT_PRICE + webcodecsUnits * WEBCODECS_UNIT_PRICE);
1695
+ }, [cloudUnitCount, devSeatCount, webcodecsUnits]);
1696
+ const totalPriceString = useMemo(() => {
1697
+ return formatPrice(totalPrice);
1698
+ }, [formatPrice, totalPrice]);
1699
+ const rendersPerMonth = useMemo(() => {
1700
+ const formatter = new Intl.NumberFormat("en-US", {
1701
+ maximumFractionDigits: 0
1702
+ });
1703
+ return formatter.format(cloudUnitCount * 1000);
1704
+ }, [cloudUnitCount]);
1705
+ const conversionsPerMonth = useMemo(() => {
1706
+ const formatter = new Intl.NumberFormat("en-US", {
1707
+ maximumFractionDigits: 0
1708
+ });
1709
+ return formatter.format(webcodecsUnits * 1000);
1710
+ }, [webcodecsUnits]);
1711
+ return /* @__PURE__ */ jsxs4(Container, {
1712
+ children: [
1713
+ /* @__PURE__ */ jsx4(Audience, {
1714
+ children: "For collaborations and companies of 4+ people"
1715
+ }),
1716
+ /* @__PURE__ */ jsx4(Title, {
1717
+ children: "Company License"
1718
+ }),
1719
+ /* @__PURE__ */ jsx4(PricingBulletPoint, {
1720
+ text: "Commercial use allowed",
1721
+ checked: true
1722
+ }),
1723
+ /* @__PURE__ */ jsx4(PricingBulletPoint, {
1724
+ text: "Self-hosted cloud rendering allowed",
1725
+ checked: true
1726
+ }),
1727
+ /* @__PURE__ */ jsx4(PricingBulletPoint, {
1728
+ text: "Prioritized Support",
1729
+ checked: true
1730
+ }),
1731
+ /* @__PURE__ */ jsx4(PricingBulletPoint, {
1732
+ text: /* @__PURE__ */ jsxs4("span", {
1733
+ children: [
1734
+ /* @__PURE__ */ jsx4("a", {
1735
+ href: "https://remotion.dev/recorder",
1736
+ className: "underline underline-offset-4 text-inherit",
1737
+ children: "Remotion Recorder"
1738
+ }),
1739
+ " ",
1740
+ "included"
1741
+ ]
1742
+ }),
1743
+ checked: true
1744
+ }),
1745
+ /* @__PURE__ */ jsx4(PricingBulletPoint, {
1746
+ text: "$250 Mux credits",
1747
+ checked: true,
1748
+ children: /* @__PURE__ */ jsx4(InfoTooltip, {
1749
+ text: "Credits for Mux.com. Applies only to new Mux customers."
1750
+ })
1751
+ }),
1752
+ /* @__PURE__ */ jsx4("div", {
1753
+ style: { height: 30 }
1754
+ }),
1755
+ /* @__PURE__ */ jsxs4("div", {
1756
+ className: "flex flex-row items-center",
1757
+ children: [
1758
+ /* @__PURE__ */ jsxs4("div", {
1759
+ style: textUnitWrapper,
1760
+ children: [
1761
+ /* @__PURE__ */ jsx4("div", {
1762
+ className: "fontbrand font-bold text-lg",
1763
+ children: "Developer Seats"
1764
+ }),
1765
+ /* @__PURE__ */ jsx4("div", {
1766
+ className: "text-muted fontbrand text-sm",
1767
+ children: "Number of developers working with Remotion"
1768
+ })
1769
+ ]
1770
+ }),
1771
+ /* @__PURE__ */ jsx4("div", {
1772
+ style: { flex: 3 }
1773
+ }),
1774
+ /* @__PURE__ */ jsx4(Counter, {
1775
+ count: devSeatCount,
1776
+ setCount: setDevSeatCount,
1777
+ minCount: 1
1778
+ }),
1779
+ /* @__PURE__ */ jsxs4(SmallPriceTag, {
1780
+ children: [
1781
+ "$",
1782
+ new Intl.NumberFormat("en-US", {
1783
+ maximumFractionDigits: 0
1784
+ }).format(SEAT_PRICE * devSeatCount)
1785
+ ]
1786
+ })
1787
+ ]
1788
+ }),
1789
+ /* @__PURE__ */ jsx4("div", {
1790
+ style: { height: 14 }
1791
+ }),
1792
+ /* @__PURE__ */ jsxs4("div", {
1793
+ className: "flex flex-row items-center",
1794
+ children: [
1795
+ /* @__PURE__ */ jsxs4("div", {
1796
+ style: textUnitWrapper,
1797
+ children: [
1798
+ /* @__PURE__ */ jsx4("div", {
1799
+ className: "fontbrand font-bold text-lg",
1800
+ children: "Cloud Rendering Units"
1801
+ }),
1802
+ /* @__PURE__ */ jsxs4("div", {
1803
+ className: "text-muted fontbrand text-sm",
1804
+ children: [
1805
+ "Allows for ",
1806
+ rendersPerMonth,
1807
+ " ",
1808
+ /* @__PURE__ */ jsx4("a", {
1809
+ href: "https://www.remotion.dev/docs/compare-ssr",
1810
+ className: "underline underline-offset-4 text-inherit",
1811
+ children: "self-hosted renders per month"
1812
+ }),
1813
+ " ",
1814
+ "each"
1815
+ ]
1816
+ })
1817
+ ]
1818
+ }),
1819
+ /* @__PURE__ */ jsx4("div", {
1820
+ style: { flex: 3 }
1821
+ }),
1822
+ /* @__PURE__ */ jsx4(Counter, {
1823
+ count: cloudUnitCount,
1824
+ setCount: setCloudUnitCount,
1825
+ minCount: 0
1826
+ }),
1827
+ /* @__PURE__ */ jsxs4(SmallPriceTag, {
1828
+ children: [
1829
+ "$",
1830
+ new Intl.NumberFormat("en-US", {
1831
+ maximumFractionDigits: 0
1832
+ }).format(RENDER_UNIT_PRICE * cloudUnitCount)
1833
+ ]
1834
+ })
1835
+ ]
1836
+ }),
1837
+ /* @__PURE__ */ jsx4("div", {
1838
+ style: { height: 14 }
1839
+ }),
1840
+ /* @__PURE__ */ jsxs4("div", {
1841
+ className: "flex flex-row items-center",
1842
+ children: [
1843
+ /* @__PURE__ */ jsxs4("div", {
1844
+ style: textUnitWrapper,
1845
+ children: [
1846
+ /* @__PURE__ */ jsx4("div", {
1847
+ className: "fontbrand font-bold text-lg",
1848
+ children: "WebCodec Conversion Units"
1849
+ }),
1850
+ /* @__PURE__ */ jsxs4("div", {
1851
+ className: "text-muted fontbrand text-sm",
1852
+ children: [
1853
+ "Allows for",
1854
+ " ",
1855
+ /* @__PURE__ */ jsxs4("a", {
1856
+ className: "underline underline-offset-4 text-inherit",
1857
+ href: "https://remotion.dev/webcodecs",
1858
+ children: [
1859
+ conversionsPerMonth,
1860
+ " client-side video conversions",
1861
+ " "
1862
+ ]
1863
+ })
1864
+ ]
1865
+ })
1866
+ ]
1867
+ }),
1868
+ /* @__PURE__ */ jsx4("div", {
1869
+ style: { flex: 3 }
1870
+ }),
1871
+ /* @__PURE__ */ jsx4(Counter, {
1872
+ count: webcodecsUnits,
1873
+ setCount: setWebcodecsUnits,
1874
+ minCount: 0
1875
+ }),
1876
+ /* @__PURE__ */ jsxs4(SmallPriceTag, {
1877
+ children: [
1878
+ "$",
1879
+ new Intl.NumberFormat("en-US", {
1880
+ maximumFractionDigits: 0
1881
+ }).format(RENDER_UNIT_PRICE * webcodecsUnits)
1882
+ ]
1883
+ })
1884
+ ]
1885
+ }),
1886
+ /* @__PURE__ */ jsx4("div", {
1887
+ style: { height: 20 }
1888
+ }),
1889
+ /* @__PURE__ */ jsx4("div", {
1890
+ className: "flex flex-row justify-end",
1891
+ children: /* @__PURE__ */ jsxs4("div", {
1892
+ style: { ...textUnitWrapper, alignItems: "flex-end" },
1893
+ children: [
1894
+ /* @__PURE__ */ jsxs4(PriceTag, {
1895
+ children: [
1896
+ totalPriceString,
1897
+ "/mo"
1898
+ ]
1899
+ }),
1900
+ /* @__PURE__ */ jsx4(BottomInfo, {
1901
+ "data-visible": totalPrice <= 100,
1902
+ className: "opacity-0 data-[visible=true]:opacity-100 transition-opacity",
1903
+ children: "The minimum is $100 per month"
1904
+ })
1905
+ ]
1906
+ })
1907
+ })
1908
+ ]
1909
+ });
1910
+ };
1911
+
1912
+ // src/components/homepage/Pricing.tsx
1913
+ import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
1914
+ var Pricing = () => {
1915
+ return /* @__PURE__ */ jsxs5("div", {
1916
+ style: {
1917
+ display: "flex",
1918
+ flexDirection: "column",
1919
+ gap: 20,
1920
+ marginBottom: 40
1921
+ },
1922
+ children: [
1923
+ /* @__PURE__ */ jsx5(FreePricing, {}),
1924
+ /* @__PURE__ */ jsx5(CompanyPricing, {}),
1925
+ /* @__PURE__ */ jsx5(EnterpriseLicense, {}),
1926
+ /* @__PURE__ */ jsx5("div", {
1927
+ style: {
1928
+ justifyContent: "center",
1929
+ display: "flex"
1930
+ },
1931
+ children: /* @__PURE__ */ jsxs5("div", {
1932
+ style: {
1933
+ fontFamily: "GTPlanar"
1934
+ },
1935
+ children: [
1936
+ "See our",
1937
+ " ",
1938
+ /* @__PURE__ */ jsx5("a", {
1939
+ target: "_blank",
1940
+ className: "bluelink",
1941
+ href: "https://remotion.pro/faq",
1942
+ children: "FAQ"
1943
+ }),
1944
+ " ",
1945
+ "and",
1946
+ " ",
1947
+ /* @__PURE__ */ jsx5("a", {
1948
+ target: "_blank",
1949
+ className: "bluelink",
1950
+ href: "https://www.remotion.pro/terms",
1951
+ children: "Terms and Conditions"
1952
+ }),
1953
+ " ",
1954
+ "for more details."
1955
+ ]
1956
+ })
1957
+ })
1958
+ ]
1959
+ });
1960
+ };
1961
+ export {
1962
+ Pricing
1963
+ };