@frontlit/page-builder 0.1.0-alpha.1 → 0.1.0-alpha.3

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 (116) hide show
  1. package/README.md +38 -2
  2. package/dist/blocks/index.d.ts +35 -21
  3. package/dist/blocks/index.js +4 -3
  4. package/dist/builder/index.d.ts +8 -11
  5. package/dist/builder/index.js +7 -5
  6. package/dist/{button-C3VrMJkr.d.ts → button-OLKN3wPf.d.ts} +3 -3
  7. package/dist/{chunk-7W6Q4WA7.js → chunk-36QHCIPM.js} +252 -282
  8. package/dist/chunk-36QHCIPM.js.map +1 -0
  9. package/dist/{chunk-GTY75HW2.js → chunk-ATNM5JHI.js} +2 -2
  10. package/dist/chunk-ATNM5JHI.js.map +1 -0
  11. package/dist/chunk-BBI7UHOA.js +56 -0
  12. package/dist/chunk-BBI7UHOA.js.map +1 -0
  13. package/dist/{chunk-MO76KZY2.js → chunk-GIKTOAQS.js} +661 -423
  14. package/dist/chunk-GIKTOAQS.js.map +1 -0
  15. package/dist/chunk-HWOVSHIW.js +4 -0
  16. package/dist/{chunk-RUYOL7JZ.js.map → chunk-HWOVSHIW.js.map} +1 -1
  17. package/dist/{chunk-SSQWYMQR.js → chunk-IU4KATI2.js} +74 -129
  18. package/dist/chunk-IU4KATI2.js.map +1 -0
  19. package/dist/chunk-J7Z4UW45.js +3418 -0
  20. package/dist/chunk-J7Z4UW45.js.map +1 -0
  21. package/dist/{chunk-7KIX4WAO.js → chunk-K4WCLHMS.js} +1435 -1382
  22. package/dist/chunk-K4WCLHMS.js.map +1 -0
  23. package/dist/chunk-XU7ALPGQ.js +22 -0
  24. package/dist/chunk-XU7ALPGQ.js.map +1 -0
  25. package/dist/components/index.d.ts +33 -8
  26. package/dist/components/index.js +43 -2
  27. package/dist/components/index.js.map +1 -1
  28. package/dist/data-slots.d.ts +3 -3
  29. package/dist/data-slots.js +1 -1
  30. package/dist/fonts/archivo/archivo-latin-variable.woff2 +0 -0
  31. package/dist/fonts/hanken-grotesk/hanken-grotesk-latin-variable.woff2 +0 -0
  32. package/dist/fonts/jetbrains-mono/jetbrains-mono-latin-variable.woff2 +0 -0
  33. package/dist/fonts/spline-sans-mono/spline-sans-mono-latin-variable.woff2 +0 -0
  34. package/dist/heading-DQCxQt38.d.ts +20 -0
  35. package/dist/image-Bk8kPXwP.d.ts +52 -0
  36. package/dist/index.d.ts +18 -11
  37. package/dist/index.js +9 -7
  38. package/dist/media-CnLImjVC.d.ts +21 -0
  39. package/dist/models/index.d.ts +6 -6
  40. package/dist/models/index.js +2 -1
  41. package/dist/{page-DfVl_aHX.d.ts → page-B5Gmm-Ys.d.ts} +2 -3
  42. package/dist/primitives/index.d.ts +287 -61
  43. package/dist/primitives/index.js +2 -1
  44. package/dist/renderer/index.d.ts +12 -8
  45. package/dist/renderer/index.js +6 -4
  46. package/dist/{section-background-BgOCp5l3.d.ts → section-background-6V_LCi5e.d.ts} +1 -1
  47. package/dist/server/index.d.ts +103 -0
  48. package/dist/server/index.js +2649 -0
  49. package/dist/server/index.js.map +1 -0
  50. package/dist/server/islands/code-snippet.d.ts +17 -0
  51. package/dist/server/islands/code-snippet.js +72 -0
  52. package/dist/server/islands/code-snippet.js.map +1 -0
  53. package/dist/server/islands/email-form.d.ts +50 -0
  54. package/dist/server/islands/email-form.js +406 -0
  55. package/dist/server/islands/email-form.js.map +1 -0
  56. package/dist/server/islands/header-mobile-menu.d.ts +22 -0
  57. package/dist/server/islands/header-mobile-menu.js +422 -0
  58. package/dist/server/islands/header-mobile-menu.js.map +1 -0
  59. package/dist/server/islands/inline-embed.d.ts +28 -0
  60. package/dist/server/islands/inline-embed.js +84 -0
  61. package/dist/server/islands/inline-embed.js.map +1 -0
  62. package/dist/server/islands/marquee-track.d.ts +18 -0
  63. package/dist/server/islands/marquee-track.js +67 -0
  64. package/dist/server/islands/marquee-track.js.map +1 -0
  65. package/dist/server/islands/nav-link.d.ts +37 -0
  66. package/dist/server/islands/nav-link.js +67 -0
  67. package/dist/server/islands/nav-link.js.map +1 -0
  68. package/dist/server/islands/support-form.d.ts +17 -0
  69. package/dist/server/islands/support-form.js +469 -0
  70. package/dist/server/islands/support-form.js.map +1 -0
  71. package/dist/server/islands/theme-mode-switcher.d.ts +38 -0
  72. package/dist/server/islands/theme-mode-switcher.js +169 -0
  73. package/dist/server/islands/theme-mode-switcher.js.map +1 -0
  74. package/dist/server/islands/video-with-preview.d.ts +13 -0
  75. package/dist/server/islands/video-with-preview.js +269 -0
  76. package/dist/server/islands/video-with-preview.js.map +1 -0
  77. package/dist/server/primitives.d.ts +200 -0
  78. package/dist/server/primitives.js +888 -0
  79. package/dist/server/primitives.js.map +1 -0
  80. package/dist/server/schema.d.ts +11308 -0
  81. package/dist/server/schema.js +6179 -0
  82. package/dist/server/schema.js.map +1 -0
  83. package/dist/server/theme-CF3fIKvw.d.ts +9 -0
  84. package/dist/{theme-style-39nxXQy0.d.ts → server/theme-style-5_AGy-4V.d.ts} +43 -1
  85. package/dist/server/theme-style-BPaMwk88.d.ts +183 -0
  86. package/dist/server/theme.d.ts +28 -0
  87. package/dist/{chunk-RBJBODQP.js → server/theme.js} +903 -1243
  88. package/dist/server/theme.js.map +1 -0
  89. package/dist/server/widget-YH9BrOwY.d.ts +77 -0
  90. package/dist/styles.css +4016 -8317
  91. package/dist/theme-style-BVd5tOsc.d.ts +183 -0
  92. package/dist/theme.css +186 -191
  93. package/dist/{widget--uEOpdq3.d.ts → widget-CpE2HdgU.d.ts} +25 -18
  94. package/package.json +71 -11
  95. package/schema/page.v1.json +3855 -0
  96. package/schema/site.v1.json +3811 -0
  97. package/dist/alignment-dZDzN96G.d.ts +0 -5
  98. package/dist/chunk-7KIX4WAO.js.map +0 -1
  99. package/dist/chunk-7W6Q4WA7.js.map +0 -1
  100. package/dist/chunk-GTY75HW2.js.map +0 -1
  101. package/dist/chunk-MO76KZY2.js.map +0 -1
  102. package/dist/chunk-RBJBODQP.js.map +0 -1
  103. package/dist/chunk-RUYOL7JZ.js +0 -4
  104. package/dist/chunk-SSQWYMQR.js.map +0 -1
  105. package/dist/fonts/montserrat/montserrat-latin-100-normal.woff2 +0 -0
  106. package/dist/fonts/montserrat/montserrat-latin-200-normal.woff2 +0 -0
  107. package/dist/fonts/montserrat/montserrat-latin-300-normal.woff2 +0 -0
  108. package/dist/fonts/montserrat/montserrat-latin-400-normal.woff2 +0 -0
  109. package/dist/fonts/montserrat/montserrat-latin-500-normal.woff2 +0 -0
  110. package/dist/fonts/montserrat/montserrat-latin-600-normal.woff2 +0 -0
  111. package/dist/fonts/montserrat/montserrat-latin-700-normal.woff2 +0 -0
  112. package/dist/fonts/montserrat/montserrat-latin-800-normal.woff2 +0 -0
  113. package/dist/fonts/montserrat/montserrat-latin-900-normal.woff2 +0 -0
  114. package/dist/fonts/source-sans-3/source-sans-3-latin-400-normal.woff2 +0 -0
  115. package/dist/image-D7GlnOio.d.ts +0 -30
  116. package/dist/media-Njv378j7.d.ts +0 -13
@@ -0,0 +1,3418 @@
1
+ "use client";
2
+ import { getMediaUrl } from './chunk-XU7ALPGQ.js';
3
+ import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
4
+ import { X, Check, Circle, ChevronRight, ChevronDown, ChevronUp, Copy } from 'lucide-react';
5
+ import * as React7 from 'react';
6
+ import React7__default, { useRef, useState, useLayoutEffect } from 'react';
7
+ import { clsx } from 'clsx';
8
+ import { twMerge } from 'tailwind-merge';
9
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
10
+ import * as AvatarPrimitive from '@radix-ui/react-avatar';
11
+ import { cva } from 'class-variance-authority';
12
+ import { Slot } from '@radix-ui/react-slot';
13
+ import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
14
+ import * as DialogPrimitive from '@radix-ui/react-dialog';
15
+ import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
16
+ import * as LabelPrimitive from '@radix-ui/react-label';
17
+ import * as PopoverPrimitive from '@radix-ui/react-popover';
18
+ import * as RadioGroupPrimitive from '@radix-ui/react-radio-group';
19
+ import * as SelectPrimitive from '@radix-ui/react-select';
20
+ import * as SeparatorPrimitive from '@radix-ui/react-separator';
21
+ import * as SwitchPrimitives from '@radix-ui/react-switch';
22
+ import * as TooltipPrimitive from '@radix-ui/react-tooltip';
23
+
24
+ function cn(...inputs) {
25
+ return twMerge(clsx(inputs));
26
+ }
27
+ var AlertDialogThemeContext = React7.createContext(void 0);
28
+ function useAlertDialogTheme(providedTheme) {
29
+ const contextTheme = React7.useContext(AlertDialogThemeContext);
30
+ return providedTheme ?? contextTheme;
31
+ }
32
+ function AlertDialog({ theme, children, ...props }) {
33
+ return /* @__PURE__ */ jsx(AlertDialogThemeContext.Provider, { value: theme, children: /* @__PURE__ */ jsx(AlertDialogPrimitive.Root, { ...props, children }) });
34
+ }
35
+ var AlertDialogTrigger = AlertDialogPrimitive.Trigger;
36
+ var AlertDialogCancel = AlertDialogPrimitive.Cancel;
37
+ var AlertDialogAction = AlertDialogPrimitive.Action;
38
+ var AlertDialogPortal = AlertDialogPrimitive.Portal;
39
+ var AlertDialogOverlay = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
40
+ AlertDialogPrimitive.Overlay,
41
+ {
42
+ ref,
43
+ className: cn(
44
+ "fixed inset-0 z-50 bg-black/60 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0",
45
+ className
46
+ ),
47
+ ...props
48
+ }
49
+ ));
50
+ AlertDialogOverlay.displayName = AlertDialogPrimitive.Overlay.displayName;
51
+ var AlertDialogContent = React7.forwardRef(
52
+ ({
53
+ children,
54
+ className,
55
+ closeClassName,
56
+ overlayClassName,
57
+ showCloseButton = false,
58
+ theme: providedTheme,
59
+ ...props
60
+ }, ref) => {
61
+ const theme = useAlertDialogTheme(providedTheme);
62
+ const styles = theme?.interactives?.dialog;
63
+ return /* @__PURE__ */ jsxs(AlertDialogPrimitive.Portal, { children: [
64
+ /* @__PURE__ */ jsx(AlertDialogOverlay, { className: overlayClassName }),
65
+ /* @__PURE__ */ jsxs(
66
+ AlertDialogPrimitive.Content,
67
+ {
68
+ ref,
69
+ className: cn(
70
+ "fixed top-1/2 left-1/2 z-50 grid w-full max-w-lg -translate-x-1/2 -translate-y-1/2 gap-4 overflow-y-auto rounded-lg border bg-popover p-6 text-popover-foreground shadow-lg outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
71
+ styles?.padding?.x,
72
+ styles?.padding?.y,
73
+ styles?.border?.width,
74
+ styles?.border?.radius,
75
+ styles?.border?.style,
76
+ styles?.shadow,
77
+ styles?.custom,
78
+ className
79
+ ),
80
+ ...props,
81
+ children: [
82
+ children,
83
+ showCloseButton ? /* @__PURE__ */ jsxs(
84
+ AlertDialogPrimitive.Cancel,
85
+ {
86
+ className: cn(
87
+ "absolute top-4 right-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none",
88
+ closeClassName
89
+ ),
90
+ children: [
91
+ /* @__PURE__ */ jsx(X, { className: "size-4" }),
92
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
93
+ ]
94
+ }
95
+ ) : null
96
+ ]
97
+ }
98
+ )
99
+ ] });
100
+ }
101
+ );
102
+ AlertDialogContent.displayName = AlertDialogPrimitive.Content.displayName;
103
+ function AlertDialogHeader({
104
+ className,
105
+ ...props
106
+ }) {
107
+ return /* @__PURE__ */ jsx("div", { className: cn("flex flex-col gap-2 text-left", className), ...props });
108
+ }
109
+ function AlertDialogFooter({
110
+ className,
111
+ ...props
112
+ }) {
113
+ return /* @__PURE__ */ jsx(
114
+ "div",
115
+ {
116
+ className: cn(
117
+ "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
118
+ className
119
+ ),
120
+ ...props
121
+ }
122
+ );
123
+ }
124
+ var AlertDialogTitle = React7.forwardRef(({ className, theme: providedTheme, ...props }, ref) => {
125
+ const theme = useAlertDialogTheme(providedTheme);
126
+ const typography = theme?.typography?.header4;
127
+ return /* @__PURE__ */ jsx(
128
+ AlertDialogPrimitive.Title,
129
+ {
130
+ ref,
131
+ className: cn(
132
+ "text-lg leading-none font-semibold",
133
+ typography?.fontFamily,
134
+ typography?.fontSize,
135
+ typography?.fontWeight,
136
+ typography?.lineHeight,
137
+ typography?.letterSpacing,
138
+ typography?.textTransform,
139
+ typography?.textDecoration,
140
+ typography?.textOverflow,
141
+ className
142
+ ),
143
+ ...props
144
+ }
145
+ );
146
+ });
147
+ AlertDialogTitle.displayName = AlertDialogPrimitive.Title.displayName;
148
+ var AlertDialogDescription = React7.forwardRef(({ className, theme: providedTheme, ...props }, ref) => {
149
+ const theme = useAlertDialogTheme(providedTheme);
150
+ const typography = theme?.typography?.text2;
151
+ return /* @__PURE__ */ jsx(
152
+ AlertDialogPrimitive.Description,
153
+ {
154
+ ref,
155
+ className: cn(
156
+ "text-sm text-muted-foreground",
157
+ typography?.fontFamily,
158
+ typography?.fontSize,
159
+ typography?.fontWeight,
160
+ typography?.lineHeight,
161
+ typography?.letterSpacing,
162
+ typography?.textTransform,
163
+ typography?.textDecoration,
164
+ typography?.textOverflow,
165
+ className
166
+ ),
167
+ ...props
168
+ }
169
+ );
170
+ });
171
+ AlertDialogDescription.displayName = AlertDialogPrimitive.Description.displayName;
172
+ var AvatarThemeContext = React7.createContext(void 0);
173
+ function Avatar({ className, theme, ...props }) {
174
+ return /* @__PURE__ */ jsx(AvatarThemeContext.Provider, { value: theme, children: /* @__PURE__ */ jsx(
175
+ AvatarPrimitive.Root,
176
+ {
177
+ className: cn(
178
+ "relative flex size-10 shrink-0 overflow-hidden rounded-full bg-muted",
179
+ className
180
+ ),
181
+ ...props
182
+ }
183
+ ) });
184
+ }
185
+ var AvatarImage = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
186
+ AvatarPrimitive.Image,
187
+ {
188
+ ref,
189
+ className: cn("aspect-square size-full object-cover", className),
190
+ ...props
191
+ }
192
+ ));
193
+ AvatarImage.displayName = AvatarPrimitive.Image.displayName;
194
+ var AvatarFallback = React7.forwardRef(({ className, ...props }, ref) => {
195
+ const theme = React7.useContext(AvatarThemeContext);
196
+ const typography = theme?.typography?.text2;
197
+ return /* @__PURE__ */ jsx(
198
+ AvatarPrimitive.Fallback,
199
+ {
200
+ ref,
201
+ className: cn(
202
+ "flex size-full items-center justify-center bg-muted text-muted-foreground",
203
+ typography?.fontFamily,
204
+ typography?.fontSize,
205
+ typography?.fontWeight,
206
+ typography?.lineHeight,
207
+ typography?.letterSpacing,
208
+ className
209
+ ),
210
+ ...props
211
+ }
212
+ );
213
+ });
214
+ AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName;
215
+ var badgeVariants = cva(
216
+ "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
217
+ {
218
+ variants: {
219
+ variant: {
220
+ default: "border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
221
+ secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
222
+ destructive: "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",
223
+ outline: "text-foreground"
224
+ }
225
+ },
226
+ defaultVariants: {
227
+ variant: "default"
228
+ }
229
+ }
230
+ );
231
+ function Badge({ className, variant, ...props }) {
232
+ return /* @__PURE__ */ jsx("div", { className: cn(badgeVariants({ variant }), className), ...props });
233
+ }
234
+ var Badge2 = ({
235
+ variant = "default",
236
+ children,
237
+ className = "",
238
+ style = {},
239
+ theme,
240
+ ...props
241
+ }) => {
242
+ const typographyStyles = theme?.typography?.caption;
243
+ const buttonStyles = theme?.interactives?.button;
244
+ const classes = cn(
245
+ // Base styles
246
+ // "bg-secondary",
247
+ // Theme typography from caption
248
+ typographyStyles?.fontFamily,
249
+ typographyStyles?.fontSize,
250
+ typographyStyles?.fontWeight,
251
+ typographyStyles?.lineHeight,
252
+ typographyStyles?.letterSpacing,
253
+ typographyStyles?.textTransform,
254
+ buttonStyles?.border?.width,
255
+ buttonStyles?.border?.radius,
256
+ buttonStyles?.border?.style,
257
+ className
258
+ );
259
+ return /* @__PURE__ */ jsx(
260
+ Badge,
261
+ {
262
+ variant,
263
+ className: classes,
264
+ style: {
265
+ ...style,
266
+ backgroundColor: style.backgroundColor,
267
+ color: style.color
268
+ },
269
+ ...props,
270
+ children
271
+ }
272
+ );
273
+ };
274
+ var buttonVariants = cva(
275
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
276
+ {
277
+ variants: {
278
+ variant: {
279
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
280
+ destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
281
+ outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground",
282
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
283
+ ghost: "hover:bg-accent hover:text-accent-foreground",
284
+ link: "text-primary underline-offset-4 hover:underline"
285
+ },
286
+ size: {
287
+ default: "h-10 px-4 py-2",
288
+ sm: "h-9 rounded-md px-3",
289
+ lg: "h-11 rounded-md px-8",
290
+ icon: "h-10 w-10"
291
+ }
292
+ },
293
+ defaultVariants: {
294
+ variant: "default",
295
+ size: "default"
296
+ }
297
+ }
298
+ );
299
+ var Button = React7.forwardRef(
300
+ ({ className, variant, size, asChild = false, ...props }, ref) => {
301
+ const Comp = asChild ? Slot : "button";
302
+ return /* @__PURE__ */ jsx(
303
+ Comp,
304
+ {
305
+ className: cn(buttonVariants({ variant, size, className })),
306
+ ref,
307
+ ...props
308
+ }
309
+ );
310
+ }
311
+ );
312
+ Button.displayName = "Button";
313
+ var Button2 = ({
314
+ variant = "default",
315
+ size = "default",
316
+ disabled = false,
317
+ children,
318
+ className = "",
319
+ theme,
320
+ ...props
321
+ }) => {
322
+ const buttonStyles = theme?.interactives?.button;
323
+ const typographyStyles = theme?.typography?.button;
324
+ const isIcon = size === "icon";
325
+ const classes = cn(
326
+ // Base styles
327
+ "",
328
+ // Theme typography
329
+ typographyStyles?.fontFamily,
330
+ typographyStyles?.fontSize,
331
+ typographyStyles?.fontWeight,
332
+ typographyStyles?.lineHeight,
333
+ typographyStyles?.letterSpacing,
334
+ typographyStyles?.textTransform,
335
+ typographyStyles?.textDecoration,
336
+ typographyStyles?.textOverflow,
337
+ // Theme interactivity. Icon buttons stay square — CTA padding
338
+ // would stretch them off the size="icon" box.
339
+ !isIcon && buttonStyles?.padding?.x,
340
+ !isIcon && buttonStyles?.padding?.y,
341
+ buttonStyles?.border?.width,
342
+ buttonStyles?.border?.radius,
343
+ buttonStyles?.border?.style,
344
+ // buttonStyles?.border?.color,
345
+ buttonStyles?.shadow,
346
+ // Theme disabled states
347
+ disabled && buttonStyles?.disabled?.opacity,
348
+ disabled && buttonStyles?.disabled?.cursor,
349
+ disabled && buttonStyles?.disabled?.color,
350
+ disabled && buttonStyles?.disabled?.background,
351
+ disabled && buttonStyles?.disabled?.border,
352
+ // User overrides
353
+ buttonStyles?.custom,
354
+ className
355
+ );
356
+ return /* @__PURE__ */ jsx(
357
+ Button,
358
+ {
359
+ variant,
360
+ size,
361
+ disabled,
362
+ className: classes,
363
+ ...props,
364
+ children
365
+ }
366
+ );
367
+ };
368
+ var Caption = ({
369
+ children,
370
+ className = "",
371
+ theme,
372
+ ...props
373
+ }) => {
374
+ const typographyStyles = theme?.typography?.caption;
375
+ const classes = cn(
376
+ // Base styles
377
+ "text-xs leading-7 text-muted-foreground",
378
+ // Theme overrides
379
+ typographyStyles?.fontFamily,
380
+ typographyStyles?.fontSize,
381
+ typographyStyles?.fontWeight,
382
+ typographyStyles?.lineHeight,
383
+ typographyStyles?.letterSpacing,
384
+ typographyStyles?.textTransform,
385
+ typographyStyles?.textDecoration,
386
+ typographyStyles?.textOverflow,
387
+ className
388
+ );
389
+ return /* @__PURE__ */ jsx("span", { className: classes, ...props, children });
390
+ };
391
+ var FLUID_MIN_VIEWPORT = 360;
392
+ var FLUID_MAX_VIEWPORT = 1280;
393
+ var TAILWIND_TEXT_PX = {
394
+ "text-xs": 12,
395
+ "text-sm": 14,
396
+ "text-base": 16,
397
+ "text-lg": 18,
398
+ "text-xl": 20,
399
+ "text-2xl": 24,
400
+ "text-3xl": 30,
401
+ "text-4xl": 36,
402
+ "text-5xl": 48,
403
+ "text-6xl": 60,
404
+ "text-7xl": 72,
405
+ "text-8xl": 96,
406
+ "text-9xl": 128
407
+ };
408
+ var rem = (px) => `${+(px / 16).toFixed(4)}rem`;
409
+ function fluidFontSize({ min, max }) {
410
+ const slope = (max - min) / (FLUID_MAX_VIEWPORT - FLUID_MIN_VIEWPORT);
411
+ const intercept = min - slope * FLUID_MIN_VIEWPORT;
412
+ return `clamp(${rem(Math.min(min, max))}, ${rem(intercept)} + ${+(slope * 100).toFixed(4)}vw, ${rem(Math.max(min, max))})`;
413
+ }
414
+ function themeSize(typography) {
415
+ if (typography?.fluid) return fluidFontSize(typography.fluid);
416
+ const px = TAILWIND_TEXT_PX[typography?.fontSize ?? ""];
417
+ return px ? rem(px) : void 0;
418
+ }
419
+ function createHeading(displayName, defaultTag, baseClasses, getTypography) {
420
+ const Heading = ({
421
+ children,
422
+ className = "",
423
+ theme,
424
+ as: Tag = defaultTag,
425
+ sizeClassName,
426
+ style,
427
+ ...props
428
+ }) => {
429
+ const typography = getTypography(theme);
430
+ const fluid = typography?.fluid;
431
+ const classes = cn(
432
+ baseClasses,
433
+ typography?.fontSize,
434
+ // A class (not an inline font-size) so `sizeClassName` still wins.
435
+ fluid && "text-[length:var(--pb-theme-size)]",
436
+ sizeClassName,
437
+ typography?.fontFamily,
438
+ typography?.fontWeight,
439
+ typography?.lineHeight,
440
+ typography?.letterSpacing,
441
+ typography?.textTransform,
442
+ typography?.textDecoration,
443
+ typography?.textOverflow,
444
+ className
445
+ );
446
+ return /* @__PURE__ */ jsx(
447
+ Tag,
448
+ {
449
+ className: classes,
450
+ style: { "--pb-theme-size": themeSize(typography), ...style },
451
+ ...props,
452
+ children
453
+ }
454
+ );
455
+ };
456
+ Heading.displayName = displayName;
457
+ return Heading;
458
+ }
459
+
460
+ // src/primitives/header4.tsx
461
+ var Header4 = createHeading(
462
+ "Header4",
463
+ "h4",
464
+ "scroll-m-20 text-xl font-semibold tracking-normal",
465
+ (theme) => theme?.typography?.header4
466
+ );
467
+ var PageCard = ({
468
+ isLink,
469
+ children,
470
+ className = "",
471
+ theme,
472
+ ...props
473
+ }) => {
474
+ const cardStyles = theme?.interactives?.card;
475
+ const classes = cn(
476
+ // Base styles
477
+ "bg-card text-card-foreground",
478
+ // Theme interactivity
479
+ cardStyles?.border?.width,
480
+ cardStyles?.border?.radius,
481
+ cardStyles?.border?.style,
482
+ cardStyles?.shadow,
483
+ isLink ? "cursor-pointer" : "",
484
+ // User overrides
485
+ cardStyles?.custom,
486
+ className
487
+ );
488
+ return /* @__PURE__ */ jsx("div", { className: classes, ...props, children });
489
+ };
490
+ var PageCardImage = ({
491
+ src,
492
+ alt,
493
+ className = "",
494
+ theme,
495
+ ...props
496
+ }) => {
497
+ const classes = cn(
498
+ // Base styles
499
+ "w-full",
500
+ className
501
+ );
502
+ return /* @__PURE__ */ jsx("img", { src, alt, className: classes, ...props });
503
+ };
504
+ var PageCardContent = ({
505
+ children,
506
+ className = "",
507
+ theme,
508
+ ...props
509
+ }) => {
510
+ const cardStyles = theme?.interactives?.card;
511
+ const classes = cn(
512
+ // Base styles
513
+ "p-4",
514
+ // Theme interactivity
515
+ cardStyles?.padding?.x,
516
+ cardStyles?.padding?.y,
517
+ className
518
+ );
519
+ return /* @__PURE__ */ jsx("div", { className: classes, ...props, children });
520
+ };
521
+ var PageCardHeader = ({
522
+ children,
523
+ className = "",
524
+ theme,
525
+ ...props
526
+ }) => {
527
+ const classes = cn(
528
+ // Base styles
529
+ "pb-4",
530
+ className
531
+ );
532
+ return /* @__PURE__ */ jsx("div", { className: classes, ...props, children: /* @__PURE__ */ jsx(Header4, { theme, children }) });
533
+ };
534
+ var Checkbox = React7.forwardRef(({ className, theme, ...props }, ref) => {
535
+ const inputStyles = theme?.interactives?.input;
536
+ return /* @__PURE__ */ jsx(
537
+ CheckboxPrimitive.Root,
538
+ {
539
+ ref,
540
+ className: cn(
541
+ "peer size-4 shrink-0 rounded-sm border border-primary shadow-sm transition-colors focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",
542
+ inputStyles?.border?.width,
543
+ inputStyles?.border?.radius,
544
+ inputStyles?.border?.style,
545
+ inputStyles?.shadow,
546
+ inputStyles?.custom,
547
+ className
548
+ ),
549
+ ...props,
550
+ children: /* @__PURE__ */ jsx(CheckboxPrimitive.Indicator, { className: "flex items-center justify-center text-current", children: /* @__PURE__ */ jsx(Check, { className: "size-3.5" }) })
551
+ }
552
+ );
553
+ });
554
+ Checkbox.displayName = CheckboxPrimitive.Root.displayName;
555
+ var DialogThemeContext = React7.createContext(void 0);
556
+ function useDialogTheme(providedTheme) {
557
+ const contextTheme = React7.useContext(DialogThemeContext);
558
+ return providedTheme ?? contextTheme;
559
+ }
560
+ function Dialog({ theme, children, ...props }) {
561
+ return /* @__PURE__ */ jsx(DialogThemeContext.Provider, { value: theme, children: /* @__PURE__ */ jsx(DialogPrimitive.Root, { ...props, children }) });
562
+ }
563
+ var DialogTrigger = DialogPrimitive.Trigger;
564
+ var DialogClose = DialogPrimitive.Close;
565
+ var DialogPortal = DialogPrimitive.Portal;
566
+ var DialogOverlay = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
567
+ DialogPrimitive.Overlay,
568
+ {
569
+ ref,
570
+ className: cn(
571
+ "fixed inset-0 z-50 bg-black/60 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0",
572
+ className
573
+ ),
574
+ ...props
575
+ }
576
+ ));
577
+ DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
578
+ var DialogContent = React7.forwardRef(
579
+ ({
580
+ children,
581
+ className,
582
+ closeClassName,
583
+ overlayClassName,
584
+ showCloseButton = true,
585
+ theme: providedTheme,
586
+ ...props
587
+ }, ref) => {
588
+ const theme = useDialogTheme(providedTheme);
589
+ const styles = theme?.interactives?.dialog;
590
+ return /* @__PURE__ */ jsxs(DialogPrimitive.Portal, { children: [
591
+ /* @__PURE__ */ jsx(DialogOverlay, { className: overlayClassName }),
592
+ /* @__PURE__ */ jsxs(
593
+ DialogPrimitive.Content,
594
+ {
595
+ ref,
596
+ className: cn(
597
+ "fixed top-1/2 left-1/2 z-50 grid w-full max-w-lg -translate-x-1/2 -translate-y-1/2 gap-4 overflow-y-auto rounded-lg border bg-popover p-6 text-popover-foreground shadow-lg outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95",
598
+ styles?.padding?.x,
599
+ styles?.padding?.y,
600
+ styles?.border?.width,
601
+ styles?.border?.radius,
602
+ styles?.border?.style,
603
+ styles?.shadow,
604
+ styles?.custom,
605
+ className
606
+ ),
607
+ ...props,
608
+ children: [
609
+ children,
610
+ showCloseButton ? /* @__PURE__ */ jsxs(
611
+ DialogPrimitive.Close,
612
+ {
613
+ className: cn(
614
+ "absolute top-4 right-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none disabled:pointer-events-none",
615
+ closeClassName
616
+ ),
617
+ children: [
618
+ /* @__PURE__ */ jsx(X, { className: "size-4" }),
619
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
620
+ ]
621
+ }
622
+ ) : null
623
+ ]
624
+ }
625
+ )
626
+ ] });
627
+ }
628
+ );
629
+ DialogContent.displayName = DialogPrimitive.Content.displayName;
630
+ function DialogHeader({ className, ...props }) {
631
+ return /* @__PURE__ */ jsx("div", { className: cn("flex flex-col gap-2 text-left", className), ...props });
632
+ }
633
+ function DialogFooter({ className, ...props }) {
634
+ return /* @__PURE__ */ jsx(
635
+ "div",
636
+ {
637
+ className: cn(
638
+ "flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
639
+ className
640
+ ),
641
+ ...props
642
+ }
643
+ );
644
+ }
645
+ var DialogTitle = React7.forwardRef(({ className, theme: providedTheme, ...props }, ref) => {
646
+ const theme = useDialogTheme(providedTheme);
647
+ const typography = theme?.typography?.header4;
648
+ return /* @__PURE__ */ jsx(
649
+ DialogPrimitive.Title,
650
+ {
651
+ ref,
652
+ className: cn(
653
+ "text-lg leading-none font-semibold",
654
+ typography?.fontFamily,
655
+ typography?.fontSize,
656
+ typography?.fontWeight,
657
+ typography?.lineHeight,
658
+ typography?.letterSpacing,
659
+ typography?.textTransform,
660
+ typography?.textDecoration,
661
+ typography?.textOverflow,
662
+ className
663
+ ),
664
+ ...props
665
+ }
666
+ );
667
+ });
668
+ DialogTitle.displayName = DialogPrimitive.Title.displayName;
669
+ var DialogDescription = React7.forwardRef(({ className, theme: providedTheme, ...props }, ref) => {
670
+ const theme = useDialogTheme(providedTheme);
671
+ const typography = theme?.typography?.text2;
672
+ return /* @__PURE__ */ jsx(
673
+ DialogPrimitive.Description,
674
+ {
675
+ ref,
676
+ className: cn(
677
+ "text-sm text-muted-foreground",
678
+ typography?.fontFamily,
679
+ typography?.fontSize,
680
+ typography?.fontWeight,
681
+ typography?.lineHeight,
682
+ typography?.letterSpacing,
683
+ typography?.textTransform,
684
+ typography?.textDecoration,
685
+ typography?.textOverflow,
686
+ className
687
+ ),
688
+ ...props
689
+ }
690
+ );
691
+ });
692
+ DialogDescription.displayName = DialogPrimitive.Description.displayName;
693
+ var Sheet = DialogPrimitive.Root;
694
+ var SheetTrigger = DialogPrimitive.Trigger;
695
+ var SheetPortal = DialogPrimitive.Portal;
696
+ var SheetOverlay = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
697
+ DialogPrimitive.Overlay,
698
+ {
699
+ className: cn(
700
+ "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
701
+ className
702
+ ),
703
+ ...props,
704
+ ref
705
+ }
706
+ ));
707
+ SheetOverlay.displayName = DialogPrimitive.Overlay.displayName;
708
+ var sheetVariants = cva(
709
+ "fixed z-50 gap-4 bg-background p-6 text-foreground shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500",
710
+ {
711
+ variants: {
712
+ side: {
713
+ top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
714
+ bottom: "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
715
+ left: "inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",
716
+ right: "inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm"
717
+ }
718
+ },
719
+ defaultVariants: {
720
+ side: "right"
721
+ }
722
+ }
723
+ );
724
+ var SheetContent = React7.forwardRef(({ side = "right", className, children, container, ...props }, ref) => /* @__PURE__ */ jsxs(SheetPortal, { container: container ?? void 0, children: [
725
+ /* @__PURE__ */ jsx(SheetOverlay, {}),
726
+ /* @__PURE__ */ jsxs(
727
+ DialogPrimitive.Content,
728
+ {
729
+ ref,
730
+ className: cn(sheetVariants({ side }), className),
731
+ ...props,
732
+ children: [
733
+ children,
734
+ /* @__PURE__ */ jsxs(DialogPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary", children: [
735
+ /* @__PURE__ */ jsx(X, { className: "h-4 w-4" }),
736
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
737
+ ] })
738
+ ]
739
+ }
740
+ )
741
+ ] }));
742
+ SheetContent.displayName = DialogPrimitive.Content.displayName;
743
+ var SheetTitle = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
744
+ DialogPrimitive.Title,
745
+ {
746
+ ref,
747
+ className: cn("text-lg font-semibold text-foreground", className),
748
+ ...props
749
+ }
750
+ ));
751
+ SheetTitle.displayName = DialogPrimitive.Title.displayName;
752
+ var SheetDescription = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
753
+ DialogPrimitive.Description,
754
+ {
755
+ ref,
756
+ className: cn("text-sm text-muted-foreground", className),
757
+ ...props
758
+ }
759
+ ));
760
+ SheetDescription.displayName = DialogPrimitive.Description.displayName;
761
+ function Drawer({
762
+ trigger,
763
+ children,
764
+ side = "left",
765
+ open,
766
+ setOpen,
767
+ style,
768
+ className = "",
769
+ theme: _theme
770
+ }) {
771
+ const triggerWrapRef = useRef(null);
772
+ const [container, setContainer] = useState(null);
773
+ useLayoutEffect(() => {
774
+ const root = triggerWrapRef.current?.closest(
775
+ "[data-pb-theme], .pb-theme"
776
+ );
777
+ setContainer(root ?? null);
778
+ }, []);
779
+ return /* @__PURE__ */ jsxs(Sheet, { open, onOpenChange: setOpen, children: [
780
+ /* @__PURE__ */ jsx(SheetTrigger, { asChild: true, children: /* @__PURE__ */ jsx("span", { ref: triggerWrapRef, children: trigger }) }),
781
+ /* @__PURE__ */ jsx(
782
+ SheetContent,
783
+ {
784
+ side,
785
+ style,
786
+ container,
787
+ className: cn(
788
+ "bg-background text-foreground",
789
+ !container && "pb-theme",
790
+ className
791
+ ),
792
+ children
793
+ }
794
+ )
795
+ ] });
796
+ }
797
+ var DropdownMenuThemeContext = React7.createContext(void 0);
798
+ function useDropdownMenuTheme(providedTheme) {
799
+ const contextTheme = React7.useContext(DropdownMenuThemeContext);
800
+ return providedTheme ?? contextTheme;
801
+ }
802
+ function DropdownMenu({ theme, children, ...props }) {
803
+ return /* @__PURE__ */ jsx(DropdownMenuThemeContext.Provider, { value: theme, children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.Root, { ...props, children }) });
804
+ }
805
+ var DropdownMenuTrigger = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(DropdownMenuPrimitive.Trigger, { ref, className, ...props }));
806
+ DropdownMenuTrigger.displayName = DropdownMenuPrimitive.Trigger.displayName;
807
+ var DropdownMenuGroup = DropdownMenuPrimitive.Group;
808
+ var DropdownMenuPortal = DropdownMenuPrimitive.Portal;
809
+ var DropdownMenuSub = DropdownMenuPrimitive.Sub;
810
+ var DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
811
+ var DropdownMenuContent = React7.forwardRef(({ className, sideOffset = 4, theme: providedTheme, ...props }, ref) => {
812
+ const theme = useDropdownMenuTheme(providedTheme);
813
+ const menuStyles = theme?.interactives?.menu;
814
+ return /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
815
+ DropdownMenuPrimitive.Content,
816
+ {
817
+ ref,
818
+ sideOffset,
819
+ className: cn(
820
+ "z-50 min-w-32 overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md",
821
+ menuStyles?.padding?.x,
822
+ menuStyles?.padding?.y,
823
+ menuStyles?.border?.width,
824
+ menuStyles?.border?.radius,
825
+ menuStyles?.border?.style,
826
+ menuStyles?.shadow,
827
+ menuStyles?.custom,
828
+ className
829
+ ),
830
+ ...props
831
+ }
832
+ ) });
833
+ });
834
+ DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
835
+ var DropdownMenuItem = React7.forwardRef(({ className, inset, theme: providedTheme, ...props }, ref) => {
836
+ const theme = useDropdownMenuTheme(providedTheme);
837
+ const menuItemStyles = theme?.interactives?.menu?.item;
838
+ const typographyStyles = theme?.typography?.button;
839
+ return /* @__PURE__ */ jsx(
840
+ DropdownMenuPrimitive.Item,
841
+ {
842
+ ref,
843
+ className: cn(
844
+ "relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
845
+ inset && "pl-8",
846
+ typographyStyles?.fontFamily,
847
+ typographyStyles?.fontSize,
848
+ typographyStyles?.fontWeight,
849
+ typographyStyles?.lineHeight,
850
+ typographyStyles?.letterSpacing,
851
+ typographyStyles?.textTransform,
852
+ typographyStyles?.textDecoration,
853
+ typographyStyles?.textOverflow,
854
+ menuItemStyles?.padding?.x,
855
+ menuItemStyles?.padding?.y,
856
+ menuItemStyles?.border?.width,
857
+ menuItemStyles?.border?.radius,
858
+ menuItemStyles?.border?.style,
859
+ menuItemStyles?.custom,
860
+ className
861
+ ),
862
+ ...props
863
+ }
864
+ );
865
+ });
866
+ DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
867
+ var DropdownMenuCheckboxItem = React7.forwardRef(({ className, children, checked, theme: providedTheme, ...props }, ref) => {
868
+ const theme = useDropdownMenuTheme(providedTheme);
869
+ const menuItemStyles = theme?.interactives?.menu?.item;
870
+ const typographyStyles = theme?.typography?.button;
871
+ return /* @__PURE__ */ jsxs(
872
+ DropdownMenuPrimitive.CheckboxItem,
873
+ {
874
+ ref,
875
+ checked,
876
+ className: cn(
877
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
878
+ typographyStyles?.fontFamily,
879
+ typographyStyles?.fontSize,
880
+ typographyStyles?.fontWeight,
881
+ typographyStyles?.lineHeight,
882
+ typographyStyles?.letterSpacing,
883
+ menuItemStyles?.padding?.x,
884
+ menuItemStyles?.padding?.y,
885
+ menuItemStyles?.border?.width,
886
+ menuItemStyles?.border?.radius,
887
+ menuItemStyles?.border?.style,
888
+ menuItemStyles?.custom,
889
+ className
890
+ ),
891
+ ...props,
892
+ children: [
893
+ /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(Check, { className: "size-4" }) }) }),
894
+ children
895
+ ]
896
+ }
897
+ );
898
+ });
899
+ DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
900
+ var DropdownMenuRadioItem = React7.forwardRef(({ className, children, theme: providedTheme, ...props }, ref) => {
901
+ const theme = useDropdownMenuTheme(providedTheme);
902
+ const menuItemStyles = theme?.interactives?.menu?.item;
903
+ const typographyStyles = theme?.typography?.button;
904
+ return /* @__PURE__ */ jsxs(
905
+ DropdownMenuPrimitive.RadioItem,
906
+ {
907
+ ref,
908
+ className: cn(
909
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
910
+ typographyStyles?.fontFamily,
911
+ typographyStyles?.fontSize,
912
+ typographyStyles?.fontWeight,
913
+ typographyStyles?.lineHeight,
914
+ typographyStyles?.letterSpacing,
915
+ menuItemStyles?.padding?.x,
916
+ menuItemStyles?.padding?.y,
917
+ menuItemStyles?.border?.width,
918
+ menuItemStyles?.border?.radius,
919
+ menuItemStyles?.border?.style,
920
+ menuItemStyles?.custom,
921
+ className
922
+ ),
923
+ ...props,
924
+ children: [
925
+ /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(Circle, { className: "size-2 fill-current" }) }) }),
926
+ children
927
+ ]
928
+ }
929
+ );
930
+ });
931
+ DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
932
+ var DropdownMenuLabel = React7.forwardRef(({ className, inset, theme: providedTheme, ...props }, ref) => {
933
+ const theme = useDropdownMenuTheme(providedTheme);
934
+ const typographyStyles = theme?.typography?.caption ?? theme?.typography?.button;
935
+ return /* @__PURE__ */ jsx(
936
+ DropdownMenuPrimitive.Label,
937
+ {
938
+ ref,
939
+ className: cn(
940
+ "px-2 py-1.5 text-sm font-semibold",
941
+ inset && "pl-8",
942
+ typographyStyles?.fontFamily,
943
+ typographyStyles?.fontSize,
944
+ typographyStyles?.fontWeight,
945
+ typographyStyles?.lineHeight,
946
+ typographyStyles?.letterSpacing,
947
+ typographyStyles?.textTransform,
948
+ className
949
+ ),
950
+ ...props
951
+ }
952
+ );
953
+ });
954
+ DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
955
+ var DropdownMenuSeparator = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
956
+ DropdownMenuPrimitive.Separator,
957
+ {
958
+ ref,
959
+ className: cn("-mx-1 my-1 h-px bg-muted", className),
960
+ ...props
961
+ }
962
+ ));
963
+ DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
964
+ var DropdownMenuShortcut = ({
965
+ className,
966
+ ...props
967
+ }) => /* @__PURE__ */ jsx(
968
+ "span",
969
+ {
970
+ className: cn("ml-auto text-xs tracking-widest opacity-60", className),
971
+ ...props
972
+ }
973
+ );
974
+ var DropdownMenuSubTrigger = React7.forwardRef(({ className, inset, children, theme: providedTheme, ...props }, ref) => {
975
+ const theme = useDropdownMenuTheme(providedTheme);
976
+ const menuItemStyles = theme?.interactives?.menu?.item;
977
+ const typographyStyles = theme?.typography?.button;
978
+ return /* @__PURE__ */ jsxs(
979
+ DropdownMenuPrimitive.SubTrigger,
980
+ {
981
+ ref,
982
+ className: cn(
983
+ "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[state=open]:bg-accent",
984
+ inset && "pl-8",
985
+ typographyStyles?.fontFamily,
986
+ typographyStyles?.fontSize,
987
+ typographyStyles?.fontWeight,
988
+ typographyStyles?.lineHeight,
989
+ typographyStyles?.letterSpacing,
990
+ menuItemStyles?.padding?.x,
991
+ menuItemStyles?.padding?.y,
992
+ menuItemStyles?.border?.radius,
993
+ menuItemStyles?.custom,
994
+ className
995
+ ),
996
+ ...props,
997
+ children: [
998
+ children,
999
+ /* @__PURE__ */ jsx(ChevronRight, { className: "ml-auto size-4" })
1000
+ ]
1001
+ }
1002
+ );
1003
+ });
1004
+ DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
1005
+ var DropdownMenuSubContent = React7.forwardRef(({ className, theme: providedTheme, ...props }, ref) => {
1006
+ const theme = useDropdownMenuTheme(providedTheme);
1007
+ const menuStyles = theme?.interactives?.menu;
1008
+ return /* @__PURE__ */ jsx(
1009
+ DropdownMenuPrimitive.SubContent,
1010
+ {
1011
+ ref,
1012
+ className: cn(
1013
+ "z-50 min-w-32 overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg",
1014
+ menuStyles?.padding?.x,
1015
+ menuStyles?.padding?.y,
1016
+ menuStyles?.border?.width,
1017
+ menuStyles?.border?.radius,
1018
+ menuStyles?.border?.style,
1019
+ menuStyles?.shadow,
1020
+ menuStyles?.custom,
1021
+ className
1022
+ ),
1023
+ ...props
1024
+ }
1025
+ );
1026
+ });
1027
+ DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
1028
+ var DropdownMenuArrow = DropdownMenuPrimitive.Arrow;
1029
+ function CodeSnippet({ code, prompt, theme, className }) {
1030
+ const [copied, setCopied] = React7__default.useState(false);
1031
+ const typography = theme?.typography?.code;
1032
+ const card = theme?.interactives?.card;
1033
+ React7__default.useEffect(() => {
1034
+ if (!copied) return;
1035
+ const timeout = setTimeout(() => setCopied(false), 2e3);
1036
+ return () => clearTimeout(timeout);
1037
+ }, [copied]);
1038
+ return /* @__PURE__ */ jsxs(
1039
+ "div",
1040
+ {
1041
+ className: cn(
1042
+ "flex w-full min-w-0 items-start gap-3 border border-border bg-card text-card-foreground",
1043
+ card?.border?.radius ?? "rounded-md",
1044
+ className
1045
+ ),
1046
+ children: [
1047
+ /* @__PURE__ */ jsxs(
1048
+ "pre",
1049
+ {
1050
+ className: cn(
1051
+ "min-w-0 flex-1 overflow-x-auto whitespace-pre px-4 py-3 text-left",
1052
+ typography?.fontFamily ?? "font-jetbrains-mono",
1053
+ typography?.fontSize ?? "text-sm",
1054
+ typography?.fontWeight,
1055
+ typography?.lineHeight ?? "leading-relaxed",
1056
+ typography?.letterSpacing
1057
+ ),
1058
+ children: [
1059
+ prompt && /* @__PURE__ */ jsx("span", { className: "mr-2 select-none text-muted-foreground", "aria-hidden": "true", children: prompt }),
1060
+ /* @__PURE__ */ jsx("code", { children: code })
1061
+ ]
1062
+ }
1063
+ ),
1064
+ /* @__PURE__ */ jsx(
1065
+ "button",
1066
+ {
1067
+ type: "button",
1068
+ "aria-label": copied ? "Copied" : "Copy to clipboard",
1069
+ title: copied ? "Copied" : "Copy",
1070
+ className: "m-1.5 inline-flex h-8 w-8 shrink-0 items-center justify-center text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
1071
+ onClick: () => {
1072
+ void navigator.clipboard?.writeText(code).then(() => setCopied(true));
1073
+ },
1074
+ children: copied ? /* @__PURE__ */ jsx(Check, { className: "h-4 w-4", "aria-hidden": "true" }) : /* @__PURE__ */ jsx(Copy, { className: "h-4 w-4", "aria-hidden": "true" })
1075
+ }
1076
+ )
1077
+ ]
1078
+ }
1079
+ );
1080
+ }
1081
+
1082
+ // src/primitives/display.tsx
1083
+ var Display = createHeading(
1084
+ "Display",
1085
+ "h1",
1086
+ "scroll-m-20 text-balance text-5xl font-bold tracking-tight",
1087
+ (theme) => theme?.typography?.display ?? theme?.typography?.header1
1088
+ );
1089
+
1090
+ // src/primitives/header1.tsx
1091
+ var Header1 = createHeading(
1092
+ "Header1",
1093
+ "h1",
1094
+ "scroll-m-20 text-balance text-4xl font-bold tracking-tight",
1095
+ (theme) => theme?.typography?.header1
1096
+ );
1097
+
1098
+ // src/primitives/header2.tsx
1099
+ var Header2 = createHeading(
1100
+ "Header2",
1101
+ "h2",
1102
+ "scroll-m-20 text-balance text-3xl font-bold tracking-tight",
1103
+ (theme) => theme?.typography?.header2
1104
+ );
1105
+
1106
+ // src/primitives/header3.tsx
1107
+ var Header3 = createHeading(
1108
+ "Header3",
1109
+ "h3",
1110
+ "scroll-m-20 text-2xl font-semibold tracking-normal",
1111
+ (theme) => theme?.typography?.header3
1112
+ );
1113
+ var Image2 = ({
1114
+ src,
1115
+ alt = "",
1116
+ className = "",
1117
+ theme,
1118
+ ...props
1119
+ }) => {
1120
+ const cardStyles = theme?.interactives?.card;
1121
+ const classes = cn("w-full object-cover", cardStyles?.border?.radius, className);
1122
+ return /* @__PURE__ */ jsx("img", { src, alt, className: classes, ...props });
1123
+ };
1124
+ var Input = React7.forwardRef(
1125
+ ({ className, type, ...props }, ref) => {
1126
+ return /* @__PURE__ */ jsx(
1127
+ "input",
1128
+ {
1129
+ type,
1130
+ className: cn(
1131
+ "flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
1132
+ className
1133
+ ),
1134
+ ref,
1135
+ ...props
1136
+ }
1137
+ );
1138
+ }
1139
+ );
1140
+ Input.displayName = "Input";
1141
+ var Input2 = React7__default.forwardRef(
1142
+ ({
1143
+ className = "",
1144
+ theme,
1145
+ error = false,
1146
+ /*style = {},*/
1147
+ ...props
1148
+ }, ref) => {
1149
+ const inputStyles = theme?.interactives?.input;
1150
+ const typographyStyles = theme?.typography?.input;
1151
+ const classes = cn(
1152
+ // Base styles
1153
+ // "flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
1154
+ // Theme typography
1155
+ typographyStyles?.fontFamily,
1156
+ typographyStyles?.fontSize,
1157
+ typographyStyles?.fontWeight,
1158
+ typographyStyles?.lineHeight,
1159
+ typographyStyles?.letterSpacing,
1160
+ typographyStyles?.textTransform,
1161
+ typographyStyles?.textDecoration,
1162
+ typographyStyles?.textOverflow,
1163
+ // Theme interactivity
1164
+ inputStyles?.padding?.x,
1165
+ inputStyles?.padding?.y,
1166
+ inputStyles?.border?.width,
1167
+ inputStyles?.border?.style,
1168
+ inputStyles?.border?.radius,
1169
+ // inputStyles?.border?.color,
1170
+ inputStyles?.shadow,
1171
+ // Theme disabled states
1172
+ props.disabled && inputStyles?.disabled?.opacity,
1173
+ props.disabled && inputStyles?.disabled?.cursor,
1174
+ props.disabled && inputStyles?.disabled?.color,
1175
+ props.disabled && inputStyles?.disabled?.background,
1176
+ props.disabled && inputStyles?.disabled?.border,
1177
+ // Error state
1178
+ error && "border-red-300 focus:border-red-500 focus:ring-red-500",
1179
+ // User overrides
1180
+ inputStyles?.custom,
1181
+ className
1182
+ );
1183
+ return /* @__PURE__ */ jsx(Input, { ref, className: classes, ...props });
1184
+ }
1185
+ );
1186
+ Input2.displayName = "Input";
1187
+ var labelVariants = cva(
1188
+ "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
1189
+ );
1190
+ var Label2 = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1191
+ LabelPrimitive.Root,
1192
+ {
1193
+ ref,
1194
+ className: cn(labelVariants(), className),
1195
+ ...props
1196
+ }
1197
+ ));
1198
+ Label2.displayName = LabelPrimitive.Root.displayName;
1199
+ var Label3 = React7__default.forwardRef(
1200
+ ({ className = "", theme, error = false, ...props }, ref) => {
1201
+ const typographyStyles = theme?.typography?.text2;
1202
+ const classes = cn(
1203
+ // Theme typography
1204
+ typographyStyles?.fontFamily,
1205
+ typographyStyles?.fontSize,
1206
+ typographyStyles?.fontWeight,
1207
+ typographyStyles?.lineHeight,
1208
+ typographyStyles?.letterSpacing,
1209
+ typographyStyles?.textTransform,
1210
+ typographyStyles?.textDecoration,
1211
+ typographyStyles?.textOverflow,
1212
+ // Error state
1213
+ error && "text-red-500",
1214
+ className
1215
+ );
1216
+ return /* @__PURE__ */ jsx(Label2, { ref, className: classes, ...props });
1217
+ }
1218
+ );
1219
+ Label3.displayName = "Label";
1220
+ var Link = ({
1221
+ children,
1222
+ className = "",
1223
+ theme,
1224
+ disabled = false,
1225
+ style,
1226
+ ...props
1227
+ }) => {
1228
+ const typographyStyles = theme?.typography?.link;
1229
+ const linkStyles = theme?.interactives?.link;
1230
+ const classes = cn(
1231
+ // Base styles
1232
+ "font-medium cursor-pointer",
1233
+ // Theme typography
1234
+ typographyStyles?.fontFamily,
1235
+ typographyStyles?.fontSize,
1236
+ typographyStyles?.fontWeight,
1237
+ typographyStyles?.lineHeight,
1238
+ typographyStyles?.letterSpacing,
1239
+ typographyStyles?.textTransform,
1240
+ typographyStyles?.textDecoration,
1241
+ typographyStyles?.textOverflow,
1242
+ // Theme interactivity
1243
+ linkStyles?.padding?.x,
1244
+ linkStyles?.padding?.y,
1245
+ linkStyles?.border?.width,
1246
+ linkStyles?.border?.radius,
1247
+ linkStyles?.border?.style,
1248
+ // Theme disabled states
1249
+ disabled && linkStyles?.disabled?.color,
1250
+ disabled && linkStyles?.disabled?.background,
1251
+ disabled && linkStyles?.disabled?.border,
1252
+ disabled && linkStyles?.disabled?.opacity,
1253
+ disabled && linkStyles?.disabled?.cursor,
1254
+ // User overrides
1255
+ linkStyles?.custom,
1256
+ className
1257
+ );
1258
+ return /* @__PURE__ */ jsx(
1259
+ "span",
1260
+ {
1261
+ className: classes,
1262
+ style: {
1263
+ ...style,
1264
+ textShadow: linkStyles?.textShadow || void 0
1265
+ },
1266
+ ...props,
1267
+ children
1268
+ }
1269
+ );
1270
+ };
1271
+ var PopoverThemeContext = React7.createContext(void 0);
1272
+ function usePopoverTheme(providedTheme) {
1273
+ const contextTheme = React7.useContext(PopoverThemeContext);
1274
+ return providedTheme ?? contextTheme;
1275
+ }
1276
+ function Popover({ theme, children, ...props }) {
1277
+ return /* @__PURE__ */ jsx(PopoverThemeContext.Provider, { value: theme, children: /* @__PURE__ */ jsx(PopoverPrimitive.Root, { ...props, children }) });
1278
+ }
1279
+ var PopoverTrigger = PopoverPrimitive.Trigger;
1280
+ var PopoverAnchor = PopoverPrimitive.Anchor;
1281
+ var PopoverClose = PopoverPrimitive.Close;
1282
+ var PopoverPortal = PopoverPrimitive.Portal;
1283
+ var PopoverContent = React7.forwardRef(({ className, sideOffset = 4, theme: providedTheme, ...props }, ref) => {
1284
+ const theme = usePopoverTheme(providedTheme);
1285
+ const styles = theme?.interactives?.popover;
1286
+ return /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(
1287
+ PopoverPrimitive.Content,
1288
+ {
1289
+ ref,
1290
+ sideOffset,
1291
+ className: cn(
1292
+ "z-50 w-72 overflow-hidden rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
1293
+ styles?.padding?.x,
1294
+ styles?.padding?.y,
1295
+ styles?.border?.width,
1296
+ styles?.border?.radius,
1297
+ styles?.border?.style,
1298
+ styles?.shadow,
1299
+ styles?.custom,
1300
+ className
1301
+ ),
1302
+ ...props
1303
+ }
1304
+ ) });
1305
+ });
1306
+ PopoverContent.displayName = PopoverPrimitive.Content.displayName;
1307
+ var Preheader = ({
1308
+ children,
1309
+ className = "",
1310
+ theme,
1311
+ ...props
1312
+ }) => {
1313
+ const typographyStyles = theme?.typography?.preheader;
1314
+ const classes = cn(
1315
+ // Base styles
1316
+ "text-sm font-medium uppercase tracking-wide",
1317
+ // Theme typography
1318
+ typographyStyles?.fontFamily,
1319
+ typographyStyles?.fontSize,
1320
+ typographyStyles?.fontWeight,
1321
+ typographyStyles?.lineHeight,
1322
+ typographyStyles?.letterSpacing,
1323
+ typographyStyles?.textTransform,
1324
+ typographyStyles?.textDecoration,
1325
+ typographyStyles?.textOverflow,
1326
+ className
1327
+ );
1328
+ return /* @__PURE__ */ jsx("p", { className: classes, ...props, children });
1329
+ };
1330
+ var RadioGroupThemeContext = React7.createContext(void 0);
1331
+ function useRadioGroupTheme(providedTheme) {
1332
+ const contextTheme = React7.useContext(RadioGroupThemeContext);
1333
+ return providedTheme ?? contextTheme;
1334
+ }
1335
+ function RadioGroup2({ theme, className, ...props }) {
1336
+ return /* @__PURE__ */ jsx(RadioGroupThemeContext.Provider, { value: theme, children: /* @__PURE__ */ jsx(RadioGroupPrimitive.Root, { className: cn("grid gap-2", className), ...props }) });
1337
+ }
1338
+ var RadioGroupItem = React7.forwardRef(({ className, theme: providedTheme, ...props }, ref) => {
1339
+ const theme = useRadioGroupTheme(providedTheme);
1340
+ const inputStyles = theme?.interactives?.input;
1341
+ return /* @__PURE__ */ jsx(
1342
+ RadioGroupPrimitive.Item,
1343
+ {
1344
+ ref,
1345
+ className: cn(
1346
+ "aspect-square size-4 shrink-0 rounded-full border border-primary text-primary shadow-sm transition-colors focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50",
1347
+ inputStyles?.border?.width,
1348
+ inputStyles?.border?.radius,
1349
+ inputStyles?.border?.style,
1350
+ inputStyles?.shadow,
1351
+ inputStyles?.custom,
1352
+ className
1353
+ ),
1354
+ ...props,
1355
+ children: /* @__PURE__ */ jsx(RadioGroupPrimitive.Indicator, { className: "flex items-center justify-center", children: /* @__PURE__ */ jsx(Circle, { className: "size-2.5 fill-current" }) })
1356
+ }
1357
+ );
1358
+ });
1359
+ RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;
1360
+ function resolveBackgroundLayer(background) {
1361
+ const attachment = background.backgroundAttachment || "scroll";
1362
+ if (background.type === "color") {
1363
+ return {
1364
+ className: "[background-color:var(--pb-bg)] dark:[background-color:var(--pb-bg-dark,var(--pb-bg))]",
1365
+ style: {
1366
+ "--pb-bg": background.backgroundColor,
1367
+ "--pb-bg-dark": background.backgroundColorDark
1368
+ }
1369
+ };
1370
+ }
1371
+ if (background.type === "image") {
1372
+ const bgUrl = getMediaUrl(background.media);
1373
+ return {
1374
+ style: {
1375
+ backgroundImage: bgUrl ? `url(${bgUrl})` : void 0,
1376
+ backgroundSize: background.backgroundSize || "cover",
1377
+ backgroundPosition: background.backgroundPosition || "center",
1378
+ backgroundRepeat: background.backgroundRepeat || "no-repeat",
1379
+ backgroundAttachment: attachment,
1380
+ maskImage: background.maskImage,
1381
+ WebkitMaskImage: background.maskImage
1382
+ }
1383
+ };
1384
+ }
1385
+ return {
1386
+ className: "[background-image:var(--pb-bg-image)] dark:[background-image:var(--pb-bg-image-dark,var(--pb-bg-image))]",
1387
+ style: {
1388
+ "--pb-bg-image": background.backgroundImage,
1389
+ "--pb-bg-image-dark": background.backgroundImageDark,
1390
+ backgroundSize: background.gradientBackgroundSize || "cover",
1391
+ backgroundPosition: background.gradientBackgroundPosition || "center",
1392
+ backgroundRepeat: background.gradientBackgroundRepeat || "no-repeat",
1393
+ backgroundAttachment: attachment,
1394
+ maskImage: background.gradientMaskImage,
1395
+ WebkitMaskImage: background.gradientMaskImage
1396
+ }
1397
+ };
1398
+ }
1399
+ var Section = ({
1400
+ children,
1401
+ className = "",
1402
+ theme,
1403
+ background,
1404
+ component = "section",
1405
+ ...props
1406
+ }) => {
1407
+ const classes = cn(
1408
+ "bg-background text-foreground relative",
1409
+ component === "section" && theme?.structure?.section?.dividers && "border-t border-border",
1410
+ className
1411
+ );
1412
+ const backgroundLayer = background ? resolveBackgroundLayer(background) : null;
1413
+ const isFixed = background && background.type !== "color" && background.backgroundAttachment === "fixed";
1414
+ return /* @__PURE__ */ jsx(Fragment, { children: React7__default.createElement(
1415
+ component,
1416
+ {
1417
+ // `overflow-clip` keeps a fixed-attachment layer painted
1418
+ // only within the section bounds without creating a new
1419
+ // scroll container (unlike overflow-hidden in some cases).
1420
+ className: cn(classes, isFixed && "overflow-clip"),
1421
+ ...props
1422
+ },
1423
+ /* @__PURE__ */ jsxs(Fragment, { children: [
1424
+ backgroundLayer && /* @__PURE__ */ jsx(
1425
+ "div",
1426
+ {
1427
+ "aria-hidden": true,
1428
+ className: cn(
1429
+ "pointer-events-none absolute inset-0 z-0",
1430
+ backgroundLayer.className
1431
+ ),
1432
+ style: backgroundLayer.style
1433
+ }
1434
+ ),
1435
+ background && background.type === "image" && /* @__PURE__ */ jsx(
1436
+ "div",
1437
+ {
1438
+ "aria-hidden": true,
1439
+ className: "pointer-events-none absolute inset-0 z-[1] [background-color:var(--pb-overlay)] dark:[background-color:var(--pb-overlay-dark,var(--pb-overlay))]",
1440
+ style: {
1441
+ "--pb-overlay": background?.overlay?.color,
1442
+ "--pb-overlay-dark": background?.overlay?.colorDark,
1443
+ opacity: background?.overlay?.opacity ? background.overlay.opacity / 10 : 0,
1444
+ mixBlendMode: background?.overlay?.blendMode
1445
+ }
1446
+ }
1447
+ ),
1448
+ background && background.type === "image" && /* @__PURE__ */ jsx(
1449
+ "div",
1450
+ {
1451
+ "aria-hidden": true,
1452
+ className: "pointer-events-none absolute inset-0 z-[2]",
1453
+ style: {
1454
+ backdropFilter: background?.blur ? `blur(${background?.blur}px)` : void 0
1455
+ }
1456
+ }
1457
+ ),
1458
+ /* @__PURE__ */ jsx(
1459
+ "div",
1460
+ {
1461
+ className: cn(
1462
+ "mx-auto z-[3] relative overflow-hidden",
1463
+ `lg:${theme?.structure?.page?.width || "max-w-6xl"}`,
1464
+ theme?.structure?.section?.padding?.x || "px-4",
1465
+ theme?.structure?.section?.padding?.y || "py-4"
1466
+ ),
1467
+ children
1468
+ }
1469
+ )
1470
+ ] })
1471
+ ) });
1472
+ };
1473
+ var SelectThemeContext = React7.createContext(void 0);
1474
+ function useSelectTheme(providedTheme) {
1475
+ const contextTheme = React7.useContext(SelectThemeContext);
1476
+ return providedTheme ?? contextTheme;
1477
+ }
1478
+ function Select({ theme, children, ...props }) {
1479
+ return /* @__PURE__ */ jsx(SelectThemeContext.Provider, { value: theme, children: /* @__PURE__ */ jsx(SelectPrimitive.Root, { ...props, children }) });
1480
+ }
1481
+ var SelectGroup = SelectPrimitive.Group;
1482
+ var SelectValue = SelectPrimitive.Value;
1483
+ var SelectLabel = SelectPrimitive.Label;
1484
+ var SelectTrigger = React7.forwardRef(({ className, children, theme: providedTheme, ...props }, ref) => {
1485
+ const theme = useSelectTheme(providedTheme);
1486
+ const styles = theme?.interactives?.input;
1487
+ const typography = theme?.typography?.input;
1488
+ return /* @__PURE__ */ jsxs(
1489
+ SelectPrimitive.Trigger,
1490
+ {
1491
+ ref,
1492
+ className: cn(
1493
+ "flex h-10 w-full items-center justify-between gap-2 rounded-md border border-input bg-background px-3 py-2 text-sm text-foreground shadow-xs outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
1494
+ typography?.fontFamily,
1495
+ typography?.fontSize,
1496
+ typography?.fontWeight,
1497
+ typography?.lineHeight,
1498
+ typography?.letterSpacing,
1499
+ typography?.textTransform,
1500
+ typography?.textDecoration,
1501
+ typography?.textOverflow,
1502
+ styles?.padding?.x,
1503
+ styles?.padding?.y,
1504
+ styles?.border?.width,
1505
+ styles?.border?.radius,
1506
+ styles?.border?.style,
1507
+ styles?.shadow,
1508
+ styles?.custom,
1509
+ className
1510
+ ),
1511
+ ...props,
1512
+ children: [
1513
+ children,
1514
+ /* @__PURE__ */ jsx(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx(ChevronDown, { className: "size-4 opacity-50" }) })
1515
+ ]
1516
+ }
1517
+ );
1518
+ });
1519
+ SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
1520
+ var SelectContent = React7.forwardRef(
1521
+ ({
1522
+ className,
1523
+ children,
1524
+ position = "popper",
1525
+ sideOffset = 4,
1526
+ theme: providedTheme,
1527
+ ...props
1528
+ }, ref) => {
1529
+ const theme = useSelectTheme(providedTheme);
1530
+ const styles = theme?.interactives?.menu;
1531
+ return /* @__PURE__ */ jsx(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
1532
+ SelectPrimitive.Content,
1533
+ {
1534
+ ref,
1535
+ position,
1536
+ sideOffset,
1537
+ className: cn(
1538
+ "relative z-50 max-h-96 min-w-32 overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
1539
+ position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
1540
+ styles?.padding?.x,
1541
+ styles?.padding?.y,
1542
+ styles?.border?.width,
1543
+ styles?.border?.radius,
1544
+ styles?.border?.style,
1545
+ styles?.shadow,
1546
+ styles?.custom,
1547
+ className
1548
+ ),
1549
+ ...props,
1550
+ children: [
1551
+ /* @__PURE__ */ jsx(SelectScrollUpButton, {}),
1552
+ /* @__PURE__ */ jsx(
1553
+ SelectPrimitive.Viewport,
1554
+ {
1555
+ className: cn(
1556
+ "p-1",
1557
+ position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"
1558
+ ),
1559
+ children
1560
+ }
1561
+ ),
1562
+ /* @__PURE__ */ jsx(SelectScrollDownButton, {})
1563
+ ]
1564
+ }
1565
+ ) });
1566
+ }
1567
+ );
1568
+ SelectContent.displayName = SelectPrimitive.Content.displayName;
1569
+ var SelectScrollUpButton = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1570
+ SelectPrimitive.ScrollUpButton,
1571
+ {
1572
+ ref,
1573
+ className: cn("flex cursor-default items-center justify-center py-1", className),
1574
+ ...props,
1575
+ children: /* @__PURE__ */ jsx(ChevronUp, { className: "size-4" })
1576
+ }
1577
+ ));
1578
+ SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
1579
+ var SelectScrollDownButton = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1580
+ SelectPrimitive.ScrollDownButton,
1581
+ {
1582
+ ref,
1583
+ className: cn("flex cursor-default items-center justify-center py-1", className),
1584
+ ...props,
1585
+ children: /* @__PURE__ */ jsx(ChevronDown, { className: "size-4" })
1586
+ }
1587
+ ));
1588
+ SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
1589
+ var SelectItem = React7.forwardRef(({ className, children, theme: providedTheme, ...props }, ref) => {
1590
+ const theme = useSelectTheme(providedTheme);
1591
+ const styles = theme?.interactives?.menu?.item;
1592
+ const typography = theme?.typography?.button;
1593
+ return /* @__PURE__ */ jsxs(
1594
+ SelectPrimitive.Item,
1595
+ {
1596
+ ref,
1597
+ className: cn(
1598
+ "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pr-8 pl-2 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1599
+ typography?.fontFamily,
1600
+ typography?.fontSize,
1601
+ typography?.fontWeight,
1602
+ typography?.lineHeight,
1603
+ typography?.letterSpacing,
1604
+ typography?.textTransform,
1605
+ typography?.textDecoration,
1606
+ typography?.textOverflow,
1607
+ styles?.padding?.x,
1608
+ styles?.padding?.y,
1609
+ styles?.border?.width,
1610
+ styles?.border?.radius,
1611
+ styles?.border?.style,
1612
+ styles?.custom,
1613
+ className
1614
+ ),
1615
+ ...props,
1616
+ children: [
1617
+ /* @__PURE__ */ jsx(SelectPrimitive.ItemText, { children }),
1618
+ /* @__PURE__ */ jsx("span", { className: "absolute right-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(Check, { className: "size-4" }) }) })
1619
+ ]
1620
+ }
1621
+ );
1622
+ });
1623
+ SelectItem.displayName = SelectPrimitive.Item.displayName;
1624
+ var SelectSeparator = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1625
+ SelectPrimitive.Separator,
1626
+ {
1627
+ ref,
1628
+ className: cn("-mx-1 my-1 h-px bg-muted", className),
1629
+ ...props
1630
+ }
1631
+ ));
1632
+ SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
1633
+ var Separator3 = React7.forwardRef(
1634
+ ({
1635
+ className,
1636
+ orientation = "horizontal",
1637
+ decorative = true,
1638
+ theme: _theme,
1639
+ ...props
1640
+ }, ref) => /* @__PURE__ */ jsx(
1641
+ SeparatorPrimitive.Root,
1642
+ {
1643
+ ref,
1644
+ decorative,
1645
+ orientation,
1646
+ className: cn(
1647
+ "shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
1648
+ className
1649
+ ),
1650
+ ...props
1651
+ }
1652
+ )
1653
+ );
1654
+ Separator3.displayName = SeparatorPrimitive.Root.displayName;
1655
+ var Subheader1 = ({
1656
+ children,
1657
+ className = "",
1658
+ theme,
1659
+ component = "h5",
1660
+ ...props
1661
+ }) => {
1662
+ const typographyStyles = theme?.typography?.subheader1;
1663
+ const classes = cn(
1664
+ typographyStyles?.fontFamily || "font-sans",
1665
+ typographyStyles?.fontSize || "text-lg",
1666
+ typographyStyles?.fontWeight || "font-medium",
1667
+ typographyStyles?.lineHeight || "leading-relaxed",
1668
+ typographyStyles?.letterSpacing || "tracking-normal",
1669
+ typographyStyles?.textTransform,
1670
+ typographyStyles?.textDecoration,
1671
+ typographyStyles?.textOverflow,
1672
+ className
1673
+ );
1674
+ return component === "h5" ? /* @__PURE__ */ jsx("h5", { className: classes, ...props, children }) : /* @__PURE__ */ jsx("span", { className: classes, ...props, children });
1675
+ };
1676
+ var Subheader2 = ({
1677
+ children,
1678
+ className = "",
1679
+ theme,
1680
+ ...props
1681
+ }) => {
1682
+ const typographyStyles = theme?.typography?.subheader2;
1683
+ const classes = [
1684
+ typographyStyles?.fontFamily || "font-sans",
1685
+ typographyStyles?.fontSize || "text-base",
1686
+ typographyStyles?.fontWeight || "font-medium",
1687
+ typographyStyles?.lineHeight || "leading-relaxed",
1688
+ typographyStyles?.letterSpacing || "tracking-normal",
1689
+ typographyStyles?.textTransform,
1690
+ typographyStyles?.textDecoration,
1691
+ typographyStyles?.textOverflow,
1692
+ className
1693
+ ].filter(Boolean).join(" ");
1694
+ return /* @__PURE__ */ jsx("h6", { className: classes, ...props, children });
1695
+ };
1696
+ var Switch = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1697
+ SwitchPrimitives.Root,
1698
+ {
1699
+ className: cn(
1700
+ "peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",
1701
+ className
1702
+ ),
1703
+ ...props,
1704
+ ref,
1705
+ children: /* @__PURE__ */ jsx(
1706
+ SwitchPrimitives.Thumb,
1707
+ {
1708
+ className: cn(
1709
+ "pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0"
1710
+ )
1711
+ }
1712
+ )
1713
+ }
1714
+ ));
1715
+ Switch.displayName = SwitchPrimitives.Root.displayName;
1716
+ var Switch2 = React7__default.forwardRef(({ className = "", theme, ...props }, ref) => {
1717
+ const classes = cn(
1718
+ // Base styles
1719
+ "",
1720
+ // User overrides
1721
+ className
1722
+ );
1723
+ return /* @__PURE__ */ jsx(Switch, { ref, className: classes, ...props });
1724
+ });
1725
+ var Text1 = ({
1726
+ children,
1727
+ className = "",
1728
+ theme,
1729
+ component = "p",
1730
+ ...props
1731
+ }) => {
1732
+ const typographyStyles = theme?.typography?.text1;
1733
+ const classes = cn(
1734
+ // Base styles
1735
+ "text-base",
1736
+ // Theme overrides
1737
+ typographyStyles?.fontFamily,
1738
+ typographyStyles?.fontSize,
1739
+ typographyStyles?.fontWeight,
1740
+ typographyStyles?.lineHeight,
1741
+ typographyStyles?.letterSpacing,
1742
+ typographyStyles?.textTransform,
1743
+ typographyStyles?.textDecoration,
1744
+ typographyStyles?.textOverflow,
1745
+ className
1746
+ );
1747
+ return component === "p" ? /* @__PURE__ */ jsx("p", { className: classes, ...props, children }) : /* @__PURE__ */ jsx("span", { className: classes, ...props, children });
1748
+ };
1749
+ var Text2 = ({
1750
+ children,
1751
+ className = "",
1752
+ theme,
1753
+ component = "p",
1754
+ ...props
1755
+ }) => {
1756
+ const typographyStyles = theme?.typography?.text2;
1757
+ const classes = cn(
1758
+ // Base styles
1759
+ "text-sm",
1760
+ // Theme overrides
1761
+ typographyStyles?.fontFamily,
1762
+ typographyStyles?.fontSize,
1763
+ typographyStyles?.fontWeight,
1764
+ typographyStyles?.lineHeight,
1765
+ typographyStyles?.letterSpacing,
1766
+ typographyStyles?.textTransform,
1767
+ typographyStyles?.textDecoration,
1768
+ typographyStyles?.textOverflow,
1769
+ className
1770
+ );
1771
+ return component === "p" ? /* @__PURE__ */ jsx("p", { className: classes, ...props, children }) : /* @__PURE__ */ jsx("span", { className: classes, ...props, children });
1772
+ };
1773
+ var Textarea = React7__default.forwardRef(
1774
+ ({ className = "", theme, error = false, ...props }, ref) => {
1775
+ const inputStyles = theme?.interactives?.input;
1776
+ const typographyStyles = theme?.typography?.input;
1777
+ const classes = cn(
1778
+ "flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm outline-none placeholder:text-muted-foreground focus-visible:ring-2 focus-visible:ring-ring/30 disabled:cursor-not-allowed disabled:opacity-50",
1779
+ typographyStyles?.fontFamily,
1780
+ typographyStyles?.fontSize,
1781
+ typographyStyles?.fontWeight,
1782
+ typographyStyles?.lineHeight,
1783
+ typographyStyles?.letterSpacing,
1784
+ inputStyles?.padding?.x,
1785
+ inputStyles?.padding?.y,
1786
+ inputStyles?.border?.width,
1787
+ inputStyles?.border?.style,
1788
+ inputStyles?.border?.radius,
1789
+ inputStyles?.shadow,
1790
+ props.disabled && inputStyles?.disabled?.opacity,
1791
+ props.disabled && inputStyles?.disabled?.cursor,
1792
+ error && "border-red-300 focus:border-red-500 focus:ring-red-500",
1793
+ inputStyles?.custom,
1794
+ className
1795
+ );
1796
+ return /* @__PURE__ */ jsx("textarea", { ref, className: classes, ...props });
1797
+ }
1798
+ );
1799
+ Textarea.displayName = "Textarea";
1800
+
1801
+ // src/primitives/themes/classic.ts
1802
+ var themeStyles = {
1803
+ colors: {
1804
+ light: {
1805
+ background: "#f7f7f5",
1806
+ foreground: "#18181b",
1807
+ card: "#ffffff",
1808
+ cardForeground: "#18181b",
1809
+ popover: "#ffffff",
1810
+ popoverForeground: "#18181b",
1811
+ primary: "#18181b",
1812
+ primaryForeground: "#fafafa",
1813
+ secondary: "#eeeee8",
1814
+ secondaryForeground: "#18181b",
1815
+ muted: "#f0efe9",
1816
+ mutedForeground: "#52525b",
1817
+ accent: "#eeeee8",
1818
+ accentForeground: "#18181b",
1819
+ destructive: "#e11d48",
1820
+ border: "#e4e4de",
1821
+ input: "#e4e4de",
1822
+ ring: "#18181b",
1823
+ chart1: "#18181b",
1824
+ chart2: "#71717a",
1825
+ chart3: "#a1a1aa",
1826
+ chart4: "#d4d4d8",
1827
+ chart5: "#e4e4e7",
1828
+ sidebar: "#f7f7f5",
1829
+ sidebarForeground: "#18181b",
1830
+ sidebarPrimary: "#18181b",
1831
+ sidebarPrimaryForeground: "#fafafa",
1832
+ sidebarAccent: "#eeeee8",
1833
+ sidebarAccentForeground: "#18181b",
1834
+ sidebarBorder: "#e4e4de",
1835
+ sidebarRing: "#18181b",
1836
+ shadow2xs: "0 1px 2px 0 rgb(24 24 27 / 0.04)",
1837
+ shadowXs: "0 1px 2px 0 rgb(24 24 27 / 0.05)",
1838
+ shadowSm: "0 1px 2px 0 rgb(24 24 27 / 0.05), 0 1px 3px -1px rgb(24 24 27 / 0.08)",
1839
+ shadowMd: "0 2px 4px -1px rgb(24 24 27 / 0.06), 0 4px 8px -2px rgb(24 24 27 / 0.08)",
1840
+ shadowLg: "0 8px 16px -4px rgb(24 24 27 / 0.08), 0 4px 6px -2px rgb(24 24 27 / 0.04)",
1841
+ shadowXl: "0 16px 32px -8px rgb(24 24 27 / 0.12)",
1842
+ shadow2xl: "0 24px 48px -12px rgb(24 24 27 / 0.18)"
1843
+ },
1844
+ dark: {
1845
+ background: "#09090b",
1846
+ foreground: "#fafafa",
1847
+ card: "#141416",
1848
+ cardForeground: "#fafafa",
1849
+ popover: "#18181b",
1850
+ popoverForeground: "#fafafa",
1851
+ primary: "#fafafa",
1852
+ primaryForeground: "#09090b",
1853
+ secondary: "#27272a",
1854
+ secondaryForeground: "#fafafa",
1855
+ muted: "#1c1c1f",
1856
+ mutedForeground: "#a1a1aa",
1857
+ accent: "#27272a",
1858
+ accentForeground: "#fafafa",
1859
+ destructive: "#fb7185",
1860
+ border: "#27272a",
1861
+ input: "#27272a",
1862
+ ring: "#d4d4d8",
1863
+ chart1: "#fafafa",
1864
+ chart2: "#a1a1aa",
1865
+ chart3: "#71717a",
1866
+ chart4: "#52525b",
1867
+ chart5: "#3f3f46",
1868
+ sidebar: "#141416",
1869
+ sidebarForeground: "#fafafa",
1870
+ sidebarPrimary: "#fafafa",
1871
+ sidebarPrimaryForeground: "#09090b",
1872
+ sidebarAccent: "#27272a",
1873
+ sidebarAccentForeground: "#fafafa",
1874
+ sidebarBorder: "#27272a",
1875
+ sidebarRing: "#d4d4d8",
1876
+ shadow2xs: "0 1px 2px 0 rgb(0 0 0 / 0.24)",
1877
+ shadowXs: "0 1px 2px 0 rgb(0 0 0 / 0.28)",
1878
+ shadowSm: "0 1px 2px 0 rgb(0 0 0 / 0.32), 0 1px 3px -1px rgb(0 0 0 / 0.4)",
1879
+ shadowMd: "0 4px 8px -2px rgb(0 0 0 / 0.4), 0 2px 4px -1px rgb(0 0 0 / 0.28)",
1880
+ shadowLg: "0 12px 24px -6px rgb(0 0 0 / 0.5)",
1881
+ shadowXl: "0 20px 40px -8px rgb(0 0 0 / 0.55)",
1882
+ shadow2xl: "0 32px 64px -12px rgb(0 0 0 / 0.65)"
1883
+ }
1884
+ },
1885
+ typography: {
1886
+ preheader: {
1887
+ fontFamily: "font-inter",
1888
+ fontSize: "text-xs",
1889
+ fontWeight: "font-medium",
1890
+ lineHeight: "leading-normal",
1891
+ letterSpacing: "tracking-widest",
1892
+ textTransform: "uppercase"
1893
+ },
1894
+ display: {
1895
+ fontFamily: "font-inter",
1896
+ fontSize: "text-6xl",
1897
+ fontWeight: "font-semibold",
1898
+ lineHeight: "leading-tight",
1899
+ letterSpacing: "tracking-tighter",
1900
+ fluid: { min: 34, max: 56 }
1901
+ },
1902
+ header1: {
1903
+ fontFamily: "font-inter",
1904
+ fontSize: "text-5xl",
1905
+ fontWeight: "font-semibold",
1906
+ lineHeight: "leading-tight",
1907
+ letterSpacing: "tracking-tighter",
1908
+ fluid: { min: 28, max: 48 }
1909
+ },
1910
+ header2: {
1911
+ fontFamily: "font-inter",
1912
+ fontSize: "text-4xl",
1913
+ fontWeight: "font-semibold",
1914
+ lineHeight: "leading-tight",
1915
+ letterSpacing: "tracking-tight",
1916
+ fluid: { min: 24, max: 36 }
1917
+ },
1918
+ header3: {
1919
+ fontFamily: "font-inter",
1920
+ fontSize: "text-2xl",
1921
+ fontWeight: "font-semibold",
1922
+ lineHeight: "leading-snug",
1923
+ letterSpacing: "tracking-tight"
1924
+ },
1925
+ header4: {
1926
+ fontFamily: "font-inter",
1927
+ fontSize: "text-xl",
1928
+ fontWeight: "font-medium",
1929
+ lineHeight: "leading-snug",
1930
+ letterSpacing: "tracking-tight"
1931
+ },
1932
+ subheader1: {
1933
+ fontFamily: "font-inter",
1934
+ fontSize: "text-xl",
1935
+ fontWeight: "font-normal",
1936
+ lineHeight: "leading-relaxed",
1937
+ letterSpacing: "tracking-normal"
1938
+ },
1939
+ subheader2: {
1940
+ fontFamily: "font-inter",
1941
+ fontSize: "text-lg",
1942
+ fontWeight: "font-normal",
1943
+ lineHeight: "leading-relaxed",
1944
+ letterSpacing: "tracking-normal"
1945
+ },
1946
+ text1: {
1947
+ fontFamily: "font-inter",
1948
+ fontSize: "text-base",
1949
+ fontWeight: "font-normal",
1950
+ lineHeight: "leading-relaxed",
1951
+ letterSpacing: "tracking-normal"
1952
+ },
1953
+ text2: {
1954
+ fontFamily: "font-inter",
1955
+ fontSize: "text-sm",
1956
+ fontWeight: "font-normal",
1957
+ lineHeight: "leading-relaxed",
1958
+ letterSpacing: "tracking-normal"
1959
+ },
1960
+ caption: {
1961
+ fontFamily: "font-inter",
1962
+ fontSize: "text-xs",
1963
+ fontWeight: "font-medium",
1964
+ lineHeight: "leading-relaxed",
1965
+ letterSpacing: "tracking-wide"
1966
+ },
1967
+ link: {
1968
+ fontFamily: "font-inter",
1969
+ fontSize: "text-base",
1970
+ fontWeight: "font-medium",
1971
+ lineHeight: "leading-relaxed",
1972
+ letterSpacing: "tracking-normal",
1973
+ textDecoration: "no-underline"
1974
+ },
1975
+ button: {
1976
+ fontFamily: "font-inter",
1977
+ fontSize: "text-sm",
1978
+ fontWeight: "font-medium",
1979
+ lineHeight: "leading-normal",
1980
+ letterSpacing: "tracking-wide"
1981
+ },
1982
+ input: {
1983
+ fontFamily: "font-inter",
1984
+ fontSize: "text-sm",
1985
+ fontWeight: "font-normal",
1986
+ lineHeight: "leading-normal",
1987
+ letterSpacing: "tracking-normal"
1988
+ }
1989
+ },
1990
+ highlight: "marker",
1991
+ interactives: {
1992
+ button: {
1993
+ padding: {
1994
+ x: "px-5",
1995
+ y: "py-3"
1996
+ },
1997
+ border: {
1998
+ width: "border-0",
1999
+ radius: "rounded-xl"
2000
+ },
2001
+ shadow: "shadow-xs",
2002
+ disabled: {
2003
+ opacity: "opacity-50",
2004
+ cursor: "cursor-not-allowed"
2005
+ },
2006
+ custom: "transition-colors duration-200"
2007
+ },
2008
+ menu: {
2009
+ padding: { x: "px-1", y: "py-1" },
2010
+ border: { width: "border", radius: "rounded-xl", style: "border-solid" },
2011
+ shadow: "shadow-xs",
2012
+ item: {
2013
+ padding: { x: "px-3", y: "py-2" },
2014
+ border: { radius: "rounded-lg" }
2015
+ }
2016
+ },
2017
+ dialog: {
2018
+ padding: { x: "px-6", y: "py-6" },
2019
+ border: { width: "border-0", radius: "rounded-xl" },
2020
+ shadow: "shadow-lg"
2021
+ },
2022
+ popover: {
2023
+ padding: { x: "px-4", y: "py-4" },
2024
+ border: { width: "border-0", radius: "rounded-xl" },
2025
+ shadow: "shadow-md"
2026
+ },
2027
+ tooltip: {
2028
+ padding: { x: "px-2", y: "py-1" },
2029
+ border: { width: "border-0", radius: "rounded-sm" },
2030
+ shadow: "shadow-sm"
2031
+ },
2032
+ link: {
2033
+ custom: "underline-offset-4 hover:underline",
2034
+ disabled: {
2035
+ color: "gray-400",
2036
+ cursor: "cursor-not-allowed"
2037
+ }
2038
+ },
2039
+ card: {
2040
+ padding: {
2041
+ x: "px-6",
2042
+ y: "py-6"
2043
+ },
2044
+ border: {
2045
+ width: "border",
2046
+ radius: "rounded-2xl",
2047
+ style: "border-solid"
2048
+ },
2049
+ shadow: "shadow-xs",
2050
+ custom: "transition-shadow duration-200 hover:shadow-md"
2051
+ },
2052
+ input: {
2053
+ borderRadius: "rounded-xl",
2054
+ padding: {
2055
+ x: "px-4",
2056
+ y: "py-3"
2057
+ },
2058
+ border: {
2059
+ width: "border",
2060
+ style: "border-solid",
2061
+ radius: "rounded-xl"
2062
+ },
2063
+ shadow: "shadow-none",
2064
+ custom: "transition-shadow duration-150 focus-visible:shadow-sm",
2065
+ disabled: {
2066
+ opacity: "opacity-50",
2067
+ cursor: "cursor-not-allowed"
2068
+ }
2069
+ }
2070
+ },
2071
+ structure: {
2072
+ page: {
2073
+ width: "max-w-6xl"
2074
+ },
2075
+ section: {
2076
+ padding: {
2077
+ x: "px-6",
2078
+ y: "py-20"
2079
+ }
2080
+ }
2081
+ }
2082
+ };
2083
+ var classic = {
2084
+ id: "classic",
2085
+ name: "Classic",
2086
+ theme: themeStyles
2087
+ };
2088
+
2089
+ // src/primitives/themes/editorial.ts
2090
+ var themeStyles2 = {
2091
+ colors: {
2092
+ light: {
2093
+ background: "#f6f1e8",
2094
+ foreground: "#1a1612",
2095
+ card: "#fffaf2",
2096
+ cardForeground: "#1a1612",
2097
+ popover: "#fffaf2",
2098
+ popoverForeground: "#1a1612",
2099
+ primary: "#1e3a8a",
2100
+ primaryForeground: "#fffaf2",
2101
+ secondary: "#c2410c",
2102
+ secondaryForeground: "#fffaf2",
2103
+ muted: "#ece4d6",
2104
+ mutedForeground: "#5c5348",
2105
+ accent: "#1d4ed8",
2106
+ accentForeground: "#fffaf2",
2107
+ border: "#e0d5c4",
2108
+ destructive: "#b91c1c",
2109
+ input: "#e0d5c4",
2110
+ ring: "#1e3a8a",
2111
+ chart1: "#1e3a8a",
2112
+ chart2: "#c2410c",
2113
+ chart3: "#1d4ed8",
2114
+ chart4: "#b91c1c",
2115
+ chart5: "#78716c",
2116
+ sidebar: "#fffaf2",
2117
+ sidebarForeground: "#1a1612",
2118
+ sidebarPrimary: "#1e3a8a",
2119
+ sidebarPrimaryForeground: "#fffaf2",
2120
+ sidebarAccent: "#ece4d6",
2121
+ sidebarAccentForeground: "#1a1612",
2122
+ sidebarBorder: "#e0d5c4",
2123
+ sidebarRing: "#1e3a8a",
2124
+ shadow2xs: "0 1px 2px 0 rgb(26 22 18 / 0.05)",
2125
+ shadowXs: "0 1px 2px 0 rgb(26 22 18 / 0.06)",
2126
+ shadowSm: "0 1px 2px 0 rgb(26 22 18 / 0.06), 0 2px 6px -2px rgb(26 22 18 / 0.1)",
2127
+ shadowMd: "0 8px 20px -6px rgb(26 22 18 / 0.12)",
2128
+ shadowLg: "0 16px 32px -10px rgb(26 22 18 / 0.14)",
2129
+ shadowXl: "0 24px 48px -12px rgb(26 22 18 / 0.16)",
2130
+ shadow2xl: "0 32px 64px -16px rgb(26 22 18 / 0.2)"
2131
+ },
2132
+ dark: {
2133
+ background: "#100e0c",
2134
+ foreground: "#f6f1e8",
2135
+ card: "#1b1713",
2136
+ cardForeground: "#f6f1e8",
2137
+ popover: "#1b1713",
2138
+ popoverForeground: "#f6f1e8",
2139
+ primary: "#93c5fd",
2140
+ primaryForeground: "#100e0c",
2141
+ secondary: "#fb923c",
2142
+ secondaryForeground: "#100e0c",
2143
+ muted: "#241f19",
2144
+ mutedForeground: "#c4b8a5",
2145
+ accent: "#60a5fa",
2146
+ accentForeground: "#100e0c",
2147
+ border: "#3a3228",
2148
+ destructive: "#f87171",
2149
+ input: "#3a3228",
2150
+ ring: "#93c5fd",
2151
+ chart1: "#93c5fd",
2152
+ chart2: "#fb923c",
2153
+ chart3: "#60a5fa",
2154
+ chart4: "#f87171",
2155
+ chart5: "#a8a29e",
2156
+ sidebar: "#1b1713",
2157
+ sidebarForeground: "#f6f1e8",
2158
+ sidebarPrimary: "#93c5fd",
2159
+ sidebarPrimaryForeground: "#100e0c",
2160
+ sidebarAccent: "#241f19",
2161
+ sidebarAccentForeground: "#f6f1e8",
2162
+ sidebarBorder: "#3a3228",
2163
+ sidebarRing: "#93c5fd",
2164
+ shadow2xs: "0 1px 2px 0 rgb(0 0 0 / 0.3)",
2165
+ shadowXs: "0 1px 2px 0 rgb(0 0 0 / 0.35)",
2166
+ shadowSm: "0 2px 6px 0 rgb(0 0 0 / 0.4)",
2167
+ shadowMd: "0 8px 20px -6px rgb(0 0 0 / 0.5)",
2168
+ shadowLg: "0 16px 32px -10px rgb(0 0 0 / 0.55)",
2169
+ shadowXl: "0 24px 48px -12px rgb(0 0 0 / 0.6)",
2170
+ shadow2xl: "0 32px 64px -16px rgb(0 0 0 / 0.7)"
2171
+ }
2172
+ },
2173
+ typography: {
2174
+ preheader: {
2175
+ fontFamily: "font-work-sans",
2176
+ fontSize: "text-xs",
2177
+ fontWeight: "font-medium",
2178
+ lineHeight: "leading-relaxed",
2179
+ letterSpacing: "tracking-widest",
2180
+ textTransform: "uppercase"
2181
+ },
2182
+ display: {
2183
+ fontFamily: "font-playfair-display",
2184
+ fontSize: "text-7xl",
2185
+ fontWeight: "font-medium",
2186
+ lineHeight: "leading-tight",
2187
+ letterSpacing: "tracking-tighter",
2188
+ fluid: { min: 34, max: 60 }
2189
+ },
2190
+ header1: {
2191
+ fontFamily: "font-playfair-display",
2192
+ fontSize: "text-6xl",
2193
+ fontWeight: "font-medium",
2194
+ lineHeight: "leading-tight",
2195
+ letterSpacing: "tracking-tighter",
2196
+ fluid: { min: 30, max: 52 }
2197
+ },
2198
+ header2: {
2199
+ fontFamily: "font-playfair-display",
2200
+ fontSize: "text-4xl",
2201
+ fontWeight: "font-medium",
2202
+ lineHeight: "leading-tight",
2203
+ letterSpacing: "tracking-tighter",
2204
+ fluid: { min: 24, max: 36 }
2205
+ },
2206
+ header3: {
2207
+ fontFamily: "font-source-serif-4",
2208
+ fontSize: "text-3xl",
2209
+ fontWeight: "font-medium",
2210
+ lineHeight: "leading-snug",
2211
+ letterSpacing: "tracking-tight"
2212
+ },
2213
+ header4: {
2214
+ fontFamily: "font-source-serif-4",
2215
+ fontSize: "text-2xl",
2216
+ fontWeight: "font-medium",
2217
+ lineHeight: "leading-snug",
2218
+ letterSpacing: "tracking-tight"
2219
+ },
2220
+ subheader1: {
2221
+ fontFamily: "font-source-serif-4",
2222
+ fontSize: "text-xl",
2223
+ fontWeight: "font-normal",
2224
+ lineHeight: "leading-relaxed"
2225
+ },
2226
+ subheader2: {
2227
+ fontFamily: "font-work-sans",
2228
+ fontSize: "text-lg",
2229
+ fontWeight: "font-normal",
2230
+ lineHeight: "leading-relaxed"
2231
+ },
2232
+ text1: {
2233
+ fontFamily: "font-source-serif-4",
2234
+ fontSize: "text-lg",
2235
+ fontWeight: "font-normal",
2236
+ lineHeight: "leading-loose"
2237
+ },
2238
+ text2: {
2239
+ fontFamily: "font-work-sans",
2240
+ fontSize: "text-sm",
2241
+ fontWeight: "font-normal",
2242
+ lineHeight: "leading-relaxed"
2243
+ },
2244
+ link: {
2245
+ fontFamily: "font-work-sans",
2246
+ fontSize: "text-base",
2247
+ fontWeight: "font-medium"
2248
+ },
2249
+ button: {
2250
+ fontFamily: "font-work-sans",
2251
+ fontSize: "text-sm",
2252
+ fontWeight: "font-medium",
2253
+ letterSpacing: "tracking-wide"
2254
+ },
2255
+ input: {
2256
+ fontFamily: "font-work-sans",
2257
+ fontSize: "text-base",
2258
+ fontWeight: "font-normal"
2259
+ },
2260
+ caption: {
2261
+ fontFamily: "font-work-sans",
2262
+ fontSize: "text-xs",
2263
+ fontWeight: "font-medium",
2264
+ lineHeight: "leading-normal",
2265
+ letterSpacing: "tracking-wide"
2266
+ }
2267
+ },
2268
+ interactives: {
2269
+ button: {
2270
+ padding: { x: "px-6", y: "py-3" },
2271
+ border: {
2272
+ width: "border-0",
2273
+ radius: "rounded-full"
2274
+ },
2275
+ shadow: "shadow-none",
2276
+ custom: "transition-colors duration-200",
2277
+ disabled: {
2278
+ opacity: "opacity-50",
2279
+ cursor: "cursor-not-allowed"
2280
+ }
2281
+ },
2282
+ menu: {
2283
+ padding: { x: "px-1", y: "py-1" },
2284
+ border: { width: "border-0", radius: "rounded-none" },
2285
+ shadow: "shadow-none",
2286
+ item: {
2287
+ padding: { x: "px-3", y: "py-2" },
2288
+ border: { radius: "rounded-none" }
2289
+ }
2290
+ },
2291
+ dialog: {
2292
+ padding: { x: "px-6", y: "py-6" },
2293
+ border: { width: "border-0", radius: "rounded-none" },
2294
+ shadow: "shadow-none"
2295
+ },
2296
+ popover: {
2297
+ padding: { x: "px-4", y: "py-4" },
2298
+ border: { width: "border-0", radius: "rounded-none" },
2299
+ shadow: "shadow-none"
2300
+ },
2301
+ tooltip: {
2302
+ padding: { x: "px-2", y: "py-1" },
2303
+ border: { width: "border-0", radius: "rounded-none" },
2304
+ shadow: "shadow-none"
2305
+ },
2306
+ link: {
2307
+ padding: { x: "px-0", y: "py-0" },
2308
+ custom: "underline-offset-4 decoration-1 hover:underline"
2309
+ },
2310
+ card: {
2311
+ padding: { x: "px-8", y: "py-8" },
2312
+ border: {
2313
+ width: "border-0",
2314
+ radius: "rounded-none"
2315
+ },
2316
+ shadow: "shadow-none",
2317
+ custom: ""
2318
+ },
2319
+ input: {
2320
+ padding: { x: "px-4", y: "py-3" },
2321
+ border: {
2322
+ width: "border",
2323
+ radius: "rounded-none",
2324
+ style: "border-solid"
2325
+ },
2326
+ shadow: "shadow-none",
2327
+ custom: "",
2328
+ disabled: {
2329
+ opacity: "opacity-50",
2330
+ cursor: "cursor-not-allowed"
2331
+ }
2332
+ }
2333
+ },
2334
+ structure: {
2335
+ page: { width: "max-w-5xl" },
2336
+ section: {
2337
+ padding: { x: "px-6", y: "py-24" }
2338
+ }
2339
+ }
2340
+ };
2341
+ var editorial = {
2342
+ id: "editorial",
2343
+ name: "Editorial",
2344
+ theme: themeStyles2
2345
+ };
2346
+
2347
+ // src/primitives/themes/midnight.ts
2348
+ var themeStyles3 = {
2349
+ colors: {
2350
+ light: {
2351
+ background: "#f4f5f7",
2352
+ foreground: "#1c1f26",
2353
+ card: "#ffffff",
2354
+ cardForeground: "#1c1f26",
2355
+ popover: "#ffffff",
2356
+ popoverForeground: "#1c1f26",
2357
+ primary: "#61afef",
2358
+ primaryForeground: "#0b0d11",
2359
+ secondary: "#e8eaf0",
2360
+ secondaryForeground: "#1c1f26",
2361
+ muted: "#eceef2",
2362
+ mutedForeground: "#5b6170",
2363
+ accent: "#d7f1f4",
2364
+ accentForeground: "#164e63",
2365
+ border: "#d7dbe3",
2366
+ destructive: "#e06c75",
2367
+ input: "#d7dbe3",
2368
+ ring: "#61afef",
2369
+ chart1: "#61afef",
2370
+ chart2: "#818cf8",
2371
+ chart3: "#56b6c2",
2372
+ chart4: "#98c379",
2373
+ chart5: "#e5c07b",
2374
+ sidebar: "#ffffff",
2375
+ sidebarForeground: "#1c1f26",
2376
+ sidebarPrimary: "#61afef",
2377
+ sidebarPrimaryForeground: "#0b0d11",
2378
+ sidebarAccent: "#e8eaf0",
2379
+ sidebarAccentForeground: "#1c1f26",
2380
+ sidebarBorder: "#d7dbe3",
2381
+ sidebarRing: "#61afef",
2382
+ shadow2xs: "0 1px 2px 0 rgb(28 31 38 / 0.05)",
2383
+ shadowXs: "0 1px 2px 0 rgb(28 31 38 / 0.06)",
2384
+ shadowSm: "0 1px 2px 0 rgb(97 175 239 / 0.12), 0 1px 3px -1px rgb(28 31 38 / 0.08)",
2385
+ shadowMd: "0 8px 20px -6px rgb(28 31 38 / 0.12)",
2386
+ shadowLg: "0 16px 32px -8px rgb(28 31 38 / 0.16)",
2387
+ shadowXl: "0 24px 48px -12px rgb(28 31 38 / 0.2)",
2388
+ shadow2xl: "0 32px 64px -16px rgb(28 31 38 / 0.24)"
2389
+ },
2390
+ dark: {
2391
+ background: "#0c0e12",
2392
+ foreground: "#e6e8ee",
2393
+ card: "#14171e",
2394
+ cardForeground: "#e6e8ee",
2395
+ popover: "#14171e",
2396
+ popoverForeground: "#e6e8ee",
2397
+ primary: "#61afef",
2398
+ primaryForeground: "#0b0d11",
2399
+ secondary: "#1d2230",
2400
+ secondaryForeground: "#e6e8ee",
2401
+ muted: "#171b24",
2402
+ mutedForeground: "#9aa3b2",
2403
+ accent: "#14363c",
2404
+ accentForeground: "#a5f3fc",
2405
+ border: "#262b38",
2406
+ destructive: "#e06c75",
2407
+ input: "#262b38",
2408
+ ring: "#61afef",
2409
+ chart1: "#61afef",
2410
+ chart2: "#818cf8",
2411
+ chart3: "#56b6c2",
2412
+ chart4: "#98c379",
2413
+ chart5: "#e5c07b",
2414
+ sidebar: "#14171e",
2415
+ sidebarForeground: "#e6e8ee",
2416
+ sidebarPrimary: "#61afef",
2417
+ sidebarPrimaryForeground: "#0b0d11",
2418
+ sidebarAccent: "#1d2230",
2419
+ sidebarAccentForeground: "#e6e8ee",
2420
+ sidebarBorder: "#262b38",
2421
+ sidebarRing: "#61afef",
2422
+ shadow2xs: "0 1px 2px 0 rgb(0 0 0 / 0.35)",
2423
+ shadowXs: "0 1px 2px 0 rgb(0 0 0 / 0.4)",
2424
+ shadowSm: "0 2px 6px 0 rgb(0 0 0 / 0.45)",
2425
+ shadowMd: "0 10px 24px -6px rgb(0 0 0 / 0.55)",
2426
+ shadowLg: "0 18px 36px -8px rgb(0 0 0 / 0.6)",
2427
+ shadowXl: "0 28px 52px -12px rgb(0 0 0 / 0.65)",
2428
+ shadow2xl: "0 36px 72px -16px rgb(0 0 0 / 0.75)"
2429
+ }
2430
+ },
2431
+ typography: {
2432
+ preheader: {
2433
+ fontFamily: "font-roboto",
2434
+ fontSize: "text-xs",
2435
+ fontWeight: "font-medium",
2436
+ lineHeight: "leading-normal",
2437
+ letterSpacing: "tracking-widest",
2438
+ textTransform: "uppercase"
2439
+ },
2440
+ display: {
2441
+ fontFamily: "font-roboto",
2442
+ fontSize: "text-6xl",
2443
+ fontWeight: "font-medium",
2444
+ lineHeight: "leading-tight",
2445
+ letterSpacing: "tracking-tighter",
2446
+ fluid: { min: 34, max: 56 }
2447
+ },
2448
+ header1: {
2449
+ fontFamily: "font-roboto",
2450
+ fontSize: "text-5xl",
2451
+ fontWeight: "font-medium",
2452
+ lineHeight: "leading-tight",
2453
+ letterSpacing: "tracking-tighter",
2454
+ fluid: { min: 28, max: 48 }
2455
+ },
2456
+ header2: {
2457
+ fontFamily: "font-roboto",
2458
+ fontSize: "text-4xl",
2459
+ fontWeight: "font-medium",
2460
+ lineHeight: "leading-tight",
2461
+ letterSpacing: "tracking-tight",
2462
+ fluid: { min: 24, max: 36 }
2463
+ },
2464
+ header3: {
2465
+ fontFamily: "font-roboto",
2466
+ fontSize: "text-2xl",
2467
+ fontWeight: "font-medium",
2468
+ lineHeight: "leading-snug"
2469
+ },
2470
+ header4: {
2471
+ fontFamily: "font-roboto",
2472
+ fontSize: "text-xl",
2473
+ fontWeight: "font-medium",
2474
+ lineHeight: "leading-snug"
2475
+ },
2476
+ subheader1: {
2477
+ fontFamily: "font-roboto",
2478
+ fontSize: "text-lg",
2479
+ fontWeight: "font-normal",
2480
+ lineHeight: "leading-relaxed"
2481
+ },
2482
+ subheader2: {
2483
+ fontFamily: "font-roboto",
2484
+ fontSize: "text-base",
2485
+ fontWeight: "font-normal",
2486
+ lineHeight: "leading-relaxed"
2487
+ },
2488
+ text1: {
2489
+ fontFamily: "font-roboto",
2490
+ fontSize: "text-base",
2491
+ fontWeight: "font-normal",
2492
+ lineHeight: "leading-relaxed"
2493
+ },
2494
+ text2: {
2495
+ fontFamily: "font-roboto",
2496
+ fontSize: "text-sm",
2497
+ fontWeight: "font-normal",
2498
+ lineHeight: "leading-relaxed"
2499
+ },
2500
+ link: {
2501
+ fontFamily: "font-roboto",
2502
+ fontSize: "text-base",
2503
+ fontWeight: "font-medium"
2504
+ },
2505
+ button: {
2506
+ fontFamily: "font-roboto",
2507
+ fontSize: "text-sm",
2508
+ fontWeight: "font-medium",
2509
+ letterSpacing: "tracking-wide"
2510
+ },
2511
+ input: {
2512
+ fontFamily: "font-roboto",
2513
+ fontSize: "text-base",
2514
+ fontWeight: "font-normal"
2515
+ },
2516
+ caption: {
2517
+ fontFamily: "font-roboto",
2518
+ fontSize: "text-xs",
2519
+ fontWeight: "font-medium",
2520
+ lineHeight: "leading-normal",
2521
+ letterSpacing: "tracking-wide"
2522
+ }
2523
+ },
2524
+ interactives: {
2525
+ button: {
2526
+ padding: { x: "px-5", y: "py-3" },
2527
+ border: {
2528
+ width: "border-0",
2529
+ radius: "rounded-xl"
2530
+ },
2531
+ shadow: "shadow-xs",
2532
+ custom: "transition-colors duration-200",
2533
+ disabled: {
2534
+ opacity: "opacity-50",
2535
+ cursor: "cursor-not-allowed"
2536
+ }
2537
+ },
2538
+ menu: {
2539
+ padding: { x: "px-1", y: "py-1" },
2540
+ border: { width: "border", radius: "rounded-2xl", style: "border-solid" },
2541
+ shadow: "shadow-xs",
2542
+ item: {
2543
+ padding: { x: "px-3", y: "py-2" },
2544
+ border: { radius: "rounded-xl" }
2545
+ }
2546
+ },
2547
+ dialog: {
2548
+ padding: { x: "px-6", y: "py-6" },
2549
+ border: { width: "border", radius: "rounded-2xl", style: "border-solid" },
2550
+ shadow: "shadow-xl"
2551
+ },
2552
+ popover: {
2553
+ padding: { x: "px-4", y: "py-4" },
2554
+ border: { width: "border", radius: "rounded-2xl", style: "border-solid" },
2555
+ shadow: "shadow-lg"
2556
+ },
2557
+ tooltip: {
2558
+ padding: { x: "px-2", y: "py-1" },
2559
+ border: { width: "border", radius: "rounded-lg", style: "border-solid" },
2560
+ shadow: "shadow-sm"
2561
+ },
2562
+ link: {
2563
+ padding: { x: "px-0", y: "py-0" },
2564
+ custom: "underline-offset-4 hover:underline"
2565
+ },
2566
+ card: {
2567
+ padding: { x: "px-6", y: "py-6" },
2568
+ border: {
2569
+ width: "border",
2570
+ radius: "rounded-2xl",
2571
+ style: "border-solid"
2572
+ },
2573
+ shadow: "shadow-xs",
2574
+ custom: "transition-shadow duration-200 hover:shadow-md"
2575
+ },
2576
+ input: {
2577
+ padding: { x: "px-4", y: "py-3" },
2578
+ border: {
2579
+ width: "border",
2580
+ radius: "rounded-xl",
2581
+ style: "border-solid"
2582
+ },
2583
+ shadow: "shadow-none",
2584
+ custom: "",
2585
+ disabled: {
2586
+ opacity: "opacity-50",
2587
+ cursor: "cursor-not-allowed"
2588
+ }
2589
+ }
2590
+ },
2591
+ structure: {
2592
+ page: { width: "max-w-6xl" },
2593
+ section: {
2594
+ padding: { x: "px-6", y: "py-16" }
2595
+ }
2596
+ }
2597
+ };
2598
+ var midnight = {
2599
+ id: "midnight",
2600
+ name: "Midnight",
2601
+ theme: themeStyles3
2602
+ };
2603
+
2604
+ // src/primitives/themes/neobrutalism.ts
2605
+ var themeStyles4 = {
2606
+ colors: {
2607
+ light: {
2608
+ background: "#f3fff9",
2609
+ foreground: "#050505",
2610
+ card: "#ffffff",
2611
+ cardForeground: "#050505",
2612
+ popover: "#ffffff",
2613
+ popoverForeground: "#050505",
2614
+ primary: "#ffe600",
2615
+ primaryForeground: "#050505",
2616
+ secondary: "#7df9ff",
2617
+ secondaryForeground: "#050505",
2618
+ muted: "#e7fff4",
2619
+ mutedForeground: "#3f3f46",
2620
+ accent: "#2ff2f2",
2621
+ accentForeground: "#050505",
2622
+ border: "#050505",
2623
+ destructive: "#ff4911",
2624
+ input: "#050505",
2625
+ ring: "#050505",
2626
+ chart1: "#ffe600",
2627
+ chart2: "#7df9ff",
2628
+ chart3: "#2ff2f2",
2629
+ chart4: "#ff4911",
2630
+ chart5: "#6fffd7",
2631
+ sidebar: "#ffffff",
2632
+ sidebarForeground: "#050505",
2633
+ sidebarPrimary: "#ffe600",
2634
+ sidebarPrimaryForeground: "#050505",
2635
+ sidebarAccent: "#2ff2f2",
2636
+ sidebarAccentForeground: "#050505",
2637
+ sidebarBorder: "#050505",
2638
+ sidebarRing: "#050505",
2639
+ shadow2xs: "2px 2px 0 0 #050505",
2640
+ shadowXs: "3px 3px 0 0 #050505",
2641
+ shadowSm: "4px 4px 0 0 #050505",
2642
+ shadowMd: "6px 6px 0 0 #050505",
2643
+ shadowLg: "8px 8px 0 0 #050505",
2644
+ shadowXl: "10px 10px 0 0 #050505",
2645
+ shadow2xl: "14px 14px 0 0 #050505"
2646
+ },
2647
+ dark: {
2648
+ background: "#050505",
2649
+ foreground: "#6fffd7",
2650
+ card: "#0a0a0a",
2651
+ cardForeground: "#6fffd7",
2652
+ popover: "#0a0a0a",
2653
+ popoverForeground: "#6fffd7",
2654
+ primary: "#ffe600",
2655
+ primaryForeground: "#050505",
2656
+ secondary: "#7df9ff",
2657
+ secondaryForeground: "#050505",
2658
+ muted: "#141414",
2659
+ mutedForeground: "#a1a1aa",
2660
+ accent: "#2ff2f2",
2661
+ accentForeground: "#050505",
2662
+ border: "#6fffd7",
2663
+ destructive: "#ff4911",
2664
+ input: "#6fffd7",
2665
+ ring: "#6fffd7",
2666
+ chart1: "#ffe600",
2667
+ chart2: "#7df9ff",
2668
+ chart3: "#2ff2f2",
2669
+ chart4: "#ff4911",
2670
+ chart5: "#6fffd7",
2671
+ sidebar: "#050505",
2672
+ sidebarForeground: "#6fffd7",
2673
+ sidebarPrimary: "#ffe600",
2674
+ sidebarPrimaryForeground: "#050505",
2675
+ sidebarAccent: "#2ff2f2",
2676
+ sidebarAccentForeground: "#050505",
2677
+ sidebarBorder: "#6fffd7",
2678
+ sidebarRing: "#6fffd7",
2679
+ shadow2xs: "2px 2px 0 0 #6fffd7",
2680
+ shadowXs: "3px 3px 0 0 #6fffd7",
2681
+ shadowSm: "4px 4px 0 0 #6fffd7",
2682
+ shadowMd: "6px 6px 0 0 #6fffd7",
2683
+ shadowLg: "8px 8px 0 0 #6fffd7",
2684
+ shadowXl: "10px 10px 0 0 #6fffd7",
2685
+ shadow2xl: "14px 14px 0 0 #6fffd7"
2686
+ }
2687
+ },
2688
+ typography: {
2689
+ preheader: {
2690
+ fontFamily: "font-inter",
2691
+ fontSize: "text-sm",
2692
+ fontWeight: "font-bold",
2693
+ letterSpacing: "tracking-widest",
2694
+ textTransform: "uppercase"
2695
+ },
2696
+ display: {
2697
+ fontFamily: "font-inter",
2698
+ fontSize: "text-6xl",
2699
+ fontWeight: "font-black",
2700
+ lineHeight: "leading-tight",
2701
+ letterSpacing: "tracking-tighter",
2702
+ fluid: { min: 34, max: 56 }
2703
+ },
2704
+ header1: {
2705
+ fontFamily: "font-inter",
2706
+ fontSize: "text-5xl",
2707
+ fontWeight: "font-black",
2708
+ lineHeight: "leading-tight",
2709
+ letterSpacing: "tracking-tighter",
2710
+ fluid: { min: 28, max: 48 }
2711
+ },
2712
+ header2: {
2713
+ fontFamily: "font-inter",
2714
+ fontSize: "text-4xl",
2715
+ fontWeight: "font-extrabold",
2716
+ lineHeight: "leading-tight",
2717
+ letterSpacing: "tracking-tight",
2718
+ fluid: { min: 24, max: 36 }
2719
+ },
2720
+ header3: {
2721
+ fontFamily: "font-inter",
2722
+ fontSize: "text-2xl",
2723
+ fontWeight: "font-extrabold",
2724
+ lineHeight: "leading-snug"
2725
+ },
2726
+ header4: {
2727
+ fontFamily: "font-inter",
2728
+ fontSize: "text-xl",
2729
+ fontWeight: "font-bold",
2730
+ lineHeight: "leading-snug"
2731
+ },
2732
+ subheader1: {
2733
+ fontFamily: "font-inter",
2734
+ fontSize: "text-lg",
2735
+ fontWeight: "font-medium",
2736
+ lineHeight: "leading-relaxed"
2737
+ },
2738
+ subheader2: {
2739
+ fontFamily: "font-inter",
2740
+ fontSize: "text-base",
2741
+ fontWeight: "font-medium"
2742
+ },
2743
+ text1: {
2744
+ fontFamily: "font-inter",
2745
+ fontSize: "text-base",
2746
+ fontWeight: "font-medium",
2747
+ lineHeight: "leading-relaxed"
2748
+ },
2749
+ text2: {
2750
+ fontFamily: "font-inter",
2751
+ fontSize: "text-sm",
2752
+ fontWeight: "font-medium"
2753
+ },
2754
+ link: {
2755
+ fontFamily: "font-inter",
2756
+ fontSize: "text-base",
2757
+ fontWeight: "font-extrabold"
2758
+ },
2759
+ button: {
2760
+ fontFamily: "font-inter",
2761
+ fontSize: "text-base",
2762
+ fontWeight: "font-extrabold",
2763
+ letterSpacing: "tracking-wide"
2764
+ },
2765
+ input: {
2766
+ fontFamily: "font-inter",
2767
+ fontSize: "text-base",
2768
+ fontWeight: "font-medium"
2769
+ },
2770
+ caption: {
2771
+ fontFamily: "font-inter",
2772
+ fontSize: "text-xs",
2773
+ fontWeight: "font-bold",
2774
+ letterSpacing: "tracking-wide",
2775
+ textTransform: "uppercase"
2776
+ }
2777
+ },
2778
+ highlight: "marker",
2779
+ interactives: {
2780
+ button: {
2781
+ padding: { x: "px-6", y: "py-3" },
2782
+ border: {
2783
+ width: "border-2",
2784
+ radius: "rounded-none",
2785
+ style: "border-solid"
2786
+ },
2787
+ shadow: "shadow-md",
2788
+ custom: "transition-transform duration-150 ease-out hover:translate-x-1 hover:translate-y-1 hover:shadow-none",
2789
+ disabled: {
2790
+ opacity: "opacity-50",
2791
+ cursor: "cursor-not-allowed"
2792
+ }
2793
+ },
2794
+ menu: {
2795
+ padding: { x: "px-1", y: "py-1" },
2796
+ border: { width: "border-2", radius: "rounded-none", style: "border-solid" },
2797
+ shadow: "shadow-md",
2798
+ item: {
2799
+ padding: { x: "px-3", y: "py-2" },
2800
+ border: { radius: "rounded-none" }
2801
+ }
2802
+ },
2803
+ dialog: {
2804
+ padding: { x: "px-6", y: "py-6" },
2805
+ border: { width: "border-2", radius: "rounded-none", style: "border-solid" },
2806
+ shadow: "shadow-md"
2807
+ },
2808
+ popover: {
2809
+ padding: { x: "px-4", y: "py-4" },
2810
+ border: { width: "border-2", radius: "rounded-none", style: "border-solid" },
2811
+ shadow: "shadow-md"
2812
+ },
2813
+ tooltip: {
2814
+ padding: { x: "px-2", y: "py-1" },
2815
+ border: { width: "border-2", radius: "rounded-none", style: "border-solid" },
2816
+ shadow: "shadow-md"
2817
+ },
2818
+ link: {
2819
+ padding: { x: "px-0", y: "py-0" },
2820
+ custom: "underline decoration-2 underline-offset-4"
2821
+ },
2822
+ card: {
2823
+ padding: { x: "px-6", y: "py-6" },
2824
+ border: {
2825
+ width: "border-2",
2826
+ radius: "rounded-none",
2827
+ style: "border-solid"
2828
+ },
2829
+ shadow: "shadow-md",
2830
+ custom: "transition-transform duration-150 ease-out hover:translate-x-1 hover:translate-y-1 hover:shadow-none"
2831
+ },
2832
+ input: {
2833
+ padding: { x: "px-4", y: "py-3" },
2834
+ border: {
2835
+ width: "border-2",
2836
+ style: "border-solid",
2837
+ radius: "rounded-none"
2838
+ },
2839
+ shadow: "shadow-sm",
2840
+ custom: "",
2841
+ disabled: {
2842
+ cursor: "cursor-not-allowed",
2843
+ opacity: "opacity-50"
2844
+ }
2845
+ }
2846
+ },
2847
+ structure: {
2848
+ page: { width: "max-w-6xl" },
2849
+ section: {
2850
+ padding: { x: "px-6", y: "py-16" }
2851
+ }
2852
+ }
2853
+ };
2854
+ var neobrutalism = {
2855
+ id: "neobrutalism",
2856
+ name: "Neo-Brutalism",
2857
+ theme: themeStyles4
2858
+ };
2859
+
2860
+ // src/primitives/themes/studio.ts
2861
+ var themeStyles5 = {
2862
+ colors: {
2863
+ light: {
2864
+ background: "#f4f1ea",
2865
+ foreground: "#1c1917",
2866
+ card: "#fffcf7",
2867
+ cardForeground: "#1c1917",
2868
+ popover: "#fffcf7",
2869
+ popoverForeground: "#1c1917",
2870
+ primary: "#0f766e",
2871
+ primaryForeground: "#f4fffc",
2872
+ secondary: "#ebe4d6",
2873
+ secondaryForeground: "#1c1917",
2874
+ muted: "#ebe6dc",
2875
+ mutedForeground: "#57534e",
2876
+ accent: "#d9f3ee",
2877
+ accentForeground: "#115e59",
2878
+ destructive: "#dc2626",
2879
+ border: "#e0d8cc",
2880
+ input: "#e0d8cc",
2881
+ ring: "#0f766e",
2882
+ chart1: "#0f766e",
2883
+ chart2: "#0d9488",
2884
+ chart3: "#14b8a6",
2885
+ chart4: "#5eead4",
2886
+ chart5: "#ccfbf1",
2887
+ sidebar: "#fffcf7",
2888
+ sidebarForeground: "#1c1917",
2889
+ sidebarPrimary: "#0f766e",
2890
+ sidebarPrimaryForeground: "#f4fffc",
2891
+ sidebarAccent: "#ebe4d6",
2892
+ sidebarAccentForeground: "#1c1917",
2893
+ sidebarBorder: "#e0d8cc",
2894
+ sidebarRing: "#0f766e",
2895
+ shadow2xs: "0 1px 2px 0 rgb(28 25 23 / 0.04)",
2896
+ shadowXs: "0 1px 2px 0 rgb(28 25 23 / 0.05)",
2897
+ shadowSm: "0 1px 2px 0 rgb(15 118 110 / 0.08), 0 1px 3px -1px rgb(28 25 23 / 0.08)",
2898
+ shadowMd: "0 6px 16px -4px rgb(28 25 23 / 0.1), 0 2px 6px -2px rgb(15 118 110 / 0.08)",
2899
+ shadowLg: "0 16px 32px -8px rgb(28 25 23 / 0.12), 0 6px 12px -4px rgb(15 118 110 / 0.08)",
2900
+ shadowXl: "0 24px 48px -12px rgb(28 25 23 / 0.16)",
2901
+ shadow2xl: "0 32px 64px -16px rgb(28 25 23 / 0.22)"
2902
+ },
2903
+ dark: {
2904
+ background: "#12100d",
2905
+ foreground: "#f4efe6",
2906
+ card: "#1b1814",
2907
+ cardForeground: "#f4efe6",
2908
+ popover: "#1b1814",
2909
+ popoverForeground: "#f4efe6",
2910
+ primary: "#2dd4bf",
2911
+ primaryForeground: "#042f2e",
2912
+ secondary: "#2a241c",
2913
+ secondaryForeground: "#f4efe6",
2914
+ muted: "#221e19",
2915
+ mutedForeground: "#a8a29e",
2916
+ accent: "#134e4a",
2917
+ accentForeground: "#ccfbf1",
2918
+ destructive: "#f87171",
2919
+ border: "#2e2922",
2920
+ input: "#2e2922",
2921
+ ring: "#2dd4bf",
2922
+ chart1: "#2dd4bf",
2923
+ chart2: "#5eead4",
2924
+ chart3: "#99f6e4",
2925
+ chart4: "#14b8a6",
2926
+ chart5: "#0f766e",
2927
+ sidebar: "#1b1814",
2928
+ sidebarForeground: "#f4efe6",
2929
+ sidebarPrimary: "#2dd4bf",
2930
+ sidebarPrimaryForeground: "#042f2e",
2931
+ sidebarAccent: "#2a241c",
2932
+ sidebarAccentForeground: "#f4efe6",
2933
+ sidebarBorder: "#2e2922",
2934
+ sidebarRing: "#2dd4bf",
2935
+ shadow2xs: "0 1px 2px 0 rgb(0 0 0 / 0.28)",
2936
+ shadowXs: "0 1px 2px 0 rgb(0 0 0 / 0.32)",
2937
+ shadowSm: "0 1px 2px 0 rgb(0 0 0 / 0.36), 0 1px 3px -1px rgb(0 0 0 / 0.4)",
2938
+ shadowMd: "0 8px 20px -6px rgb(0 0 0 / 0.48)",
2939
+ shadowLg: "0 16px 32px -8px rgb(0 0 0 / 0.52)",
2940
+ shadowXl: "0 24px 48px -10px rgb(0 0 0 / 0.56)",
2941
+ shadow2xl: "0 32px 64px -12px rgb(0 0 0 / 0.64)"
2942
+ }
2943
+ },
2944
+ typography: {
2945
+ preheader: {
2946
+ fontFamily: "font-montserrat",
2947
+ fontSize: "text-xs",
2948
+ fontWeight: "font-semibold",
2949
+ lineHeight: "leading-normal",
2950
+ letterSpacing: "tracking-widest",
2951
+ textTransform: "uppercase"
2952
+ },
2953
+ display: {
2954
+ fontFamily: "font-montserrat",
2955
+ fontSize: "text-7xl",
2956
+ fontWeight: "font-semibold",
2957
+ lineHeight: "leading-tight",
2958
+ letterSpacing: "tracking-tighter",
2959
+ fluid: { min: 34, max: 60 }
2960
+ },
2961
+ header1: {
2962
+ fontFamily: "font-montserrat",
2963
+ fontSize: "text-6xl",
2964
+ fontWeight: "font-semibold",
2965
+ lineHeight: "leading-tight",
2966
+ letterSpacing: "tracking-tighter",
2967
+ fluid: { min: 30, max: 52 }
2968
+ },
2969
+ header2: {
2970
+ fontFamily: "font-montserrat",
2971
+ fontSize: "text-4xl",
2972
+ fontWeight: "font-semibold",
2973
+ lineHeight: "leading-tight",
2974
+ letterSpacing: "tracking-tight",
2975
+ fluid: { min: 24, max: 36 }
2976
+ },
2977
+ header3: {
2978
+ fontFamily: "font-montserrat",
2979
+ fontSize: "text-2xl",
2980
+ fontWeight: "font-semibold",
2981
+ lineHeight: "leading-snug",
2982
+ letterSpacing: "tracking-tight"
2983
+ },
2984
+ header4: {
2985
+ fontFamily: "font-montserrat",
2986
+ fontSize: "text-xl",
2987
+ fontWeight: "font-medium",
2988
+ lineHeight: "leading-snug"
2989
+ },
2990
+ subheader1: {
2991
+ fontFamily: "font-source-sans-3",
2992
+ fontSize: "text-xl",
2993
+ fontWeight: "font-normal",
2994
+ lineHeight: "leading-relaxed"
2995
+ },
2996
+ subheader2: {
2997
+ fontFamily: "font-source-sans-3",
2998
+ fontSize: "text-lg",
2999
+ fontWeight: "font-normal",
3000
+ lineHeight: "leading-relaxed"
3001
+ },
3002
+ text1: {
3003
+ fontFamily: "font-source-sans-3",
3004
+ fontSize: "text-base",
3005
+ fontWeight: "font-normal",
3006
+ lineHeight: "leading-relaxed"
3007
+ },
3008
+ text2: {
3009
+ fontFamily: "font-source-sans-3",
3010
+ fontSize: "text-sm",
3011
+ fontWeight: "font-normal",
3012
+ lineHeight: "leading-relaxed"
3013
+ },
3014
+ link: {
3015
+ fontFamily: "font-source-sans-3",
3016
+ fontSize: "text-base",
3017
+ fontWeight: "font-medium"
3018
+ },
3019
+ button: {
3020
+ fontFamily: "font-montserrat",
3021
+ fontSize: "text-sm",
3022
+ fontWeight: "font-medium",
3023
+ letterSpacing: "tracking-wide"
3024
+ },
3025
+ input: {
3026
+ fontFamily: "font-source-sans-3",
3027
+ fontSize: "text-base",
3028
+ fontWeight: "font-normal"
3029
+ },
3030
+ caption: {
3031
+ fontFamily: "font-source-sans-3",
3032
+ fontSize: "text-xs",
3033
+ fontWeight: "font-medium",
3034
+ lineHeight: "leading-normal",
3035
+ letterSpacing: "tracking-wide"
3036
+ }
3037
+ },
3038
+ interactives: {
3039
+ button: {
3040
+ padding: { x: "px-6", y: "py-3" },
3041
+ border: {
3042
+ width: "border-0",
3043
+ radius: "rounded-2xl"
3044
+ },
3045
+ shadow: "shadow-xs",
3046
+ custom: "transition-colors duration-200",
3047
+ disabled: {
3048
+ opacity: "opacity-50",
3049
+ cursor: "cursor-not-allowed"
3050
+ }
3051
+ },
3052
+ menu: {
3053
+ padding: { x: "px-1", y: "py-1" },
3054
+ border: { width: "border", radius: "rounded-2xl", style: "border-solid" },
3055
+ shadow: "shadow-xs",
3056
+ item: {
3057
+ padding: { x: "px-3", y: "py-2" },
3058
+ border: { radius: "rounded-xl" }
3059
+ }
3060
+ },
3061
+ dialog: {
3062
+ padding: { x: "px-6", y: "py-6" },
3063
+ border: { width: "border-0", radius: "rounded-2xl" },
3064
+ shadow: "shadow-lg"
3065
+ },
3066
+ popover: {
3067
+ padding: { x: "px-4", y: "py-4" },
3068
+ border: { width: "border-0", radius: "rounded-2xl" },
3069
+ shadow: "shadow-md"
3070
+ },
3071
+ tooltip: {
3072
+ padding: { x: "px-2", y: "py-1" },
3073
+ border: { width: "border-0", radius: "rounded-lg" },
3074
+ shadow: "shadow-sm"
3075
+ },
3076
+ link: {
3077
+ padding: { x: "px-0", y: "py-0" },
3078
+ custom: "underline-offset-4 transition-colors duration-150 hover:underline"
3079
+ },
3080
+ card: {
3081
+ padding: { x: "px-8", y: "py-8" },
3082
+ border: {
3083
+ width: "border",
3084
+ radius: "rounded-3xl",
3085
+ style: "border-solid"
3086
+ },
3087
+ shadow: "shadow-xs",
3088
+ custom: "transition-shadow duration-200 hover:shadow-lg"
3089
+ },
3090
+ input: {
3091
+ borderRadius: "rounded-2xl",
3092
+ padding: { x: "px-4", y: "py-3" },
3093
+ border: {
3094
+ width: "border",
3095
+ style: "border-solid",
3096
+ radius: "rounded-2xl"
3097
+ },
3098
+ shadow: "shadow-none",
3099
+ custom: "transition-shadow duration-150",
3100
+ disabled: {
3101
+ cursor: "cursor-not-allowed",
3102
+ opacity: "opacity-50"
3103
+ }
3104
+ }
3105
+ },
3106
+ structure: {
3107
+ page: { width: "max-w-6xl" },
3108
+ section: {
3109
+ padding: { x: "px-6", y: "py-24" }
3110
+ }
3111
+ }
3112
+ };
3113
+ var studio = {
3114
+ id: "studio",
3115
+ name: "Studio",
3116
+ theme: themeStyles5
3117
+ };
3118
+
3119
+ // src/primitives/themes/terminal.ts
3120
+ var themeStyles6 = {
3121
+ colors: {
3122
+ light: {
3123
+ background: "#ffffff",
3124
+ foreground: "#111111",
3125
+ card: "#ffffff",
3126
+ cardForeground: "#111111",
3127
+ popover: "#ffffff",
3128
+ popoverForeground: "#111111",
3129
+ primary: "#111111",
3130
+ primaryForeground: "#ffffff",
3131
+ secondary: "#ffffff",
3132
+ secondaryForeground: "#111111",
3133
+ muted: "#f5f5f5",
3134
+ mutedForeground: "#5c5c66",
3135
+ accent: "#f0f0f2",
3136
+ accentForeground: "#111111",
3137
+ border: "#dcdce0",
3138
+ destructive: "#d92d20",
3139
+ input: "#111111",
3140
+ ring: "#6d28d9",
3141
+ chart1: "#111111",
3142
+ chart2: "#6d28d9",
3143
+ chart3: "#2f4ad8",
3144
+ chart4: "#5c5c66",
3145
+ chart5: "#a1a1aa",
3146
+ sidebar: "#ffffff",
3147
+ sidebarForeground: "#111111",
3148
+ sidebarPrimary: "#111111",
3149
+ sidebarPrimaryForeground: "#ffffff",
3150
+ sidebarAccent: "#f0f0f2",
3151
+ sidebarAccentForeground: "#111111",
3152
+ sidebarBorder: "#dcdce0",
3153
+ sidebarRing: "#6d28d9",
3154
+ shadow2xs: "none",
3155
+ shadowXs: "none",
3156
+ shadowSm: "none",
3157
+ shadowMd: "none",
3158
+ shadowLg: "none",
3159
+ shadowXl: "none",
3160
+ shadow2xl: "none"
3161
+ },
3162
+ dark: {
3163
+ background: "#17171a",
3164
+ foreground: "#eae8ee",
3165
+ card: "#1c1c20",
3166
+ cardForeground: "#eae8ee",
3167
+ popover: "#1c1c20",
3168
+ popoverForeground: "#eae8ee",
3169
+ primary: "#cba6f7",
3170
+ primaryForeground: "#17171a",
3171
+ secondary: "#17171a",
3172
+ secondaryForeground: "#eae8ee",
3173
+ muted: "#222226",
3174
+ mutedForeground: "#9b99a3",
3175
+ accent: "#26262b",
3176
+ accentForeground: "#eae8ee",
3177
+ border: "#2e2e34",
3178
+ destructive: "#f38ba8",
3179
+ input: "#3a3a41",
3180
+ ring: "#cba6f7",
3181
+ chart1: "#cba6f7",
3182
+ chart2: "#a6e3a1",
3183
+ chart3: "#89b4fa",
3184
+ chart4: "#f9e2af",
3185
+ chart5: "#f38ba8",
3186
+ sidebar: "#17171a",
3187
+ sidebarForeground: "#eae8ee",
3188
+ sidebarPrimary: "#cba6f7",
3189
+ sidebarPrimaryForeground: "#17171a",
3190
+ sidebarAccent: "#26262b",
3191
+ sidebarAccentForeground: "#eae8ee",
3192
+ sidebarBorder: "#2e2e34",
3193
+ sidebarRing: "#cba6f7",
3194
+ shadow2xs: "none",
3195
+ shadowXs: "none",
3196
+ shadowSm: "none",
3197
+ shadowMd: "none",
3198
+ shadowLg: "none",
3199
+ shadowXl: "none",
3200
+ shadow2xl: "none"
3201
+ }
3202
+ },
3203
+ typography: {
3204
+ preheader: {
3205
+ fontFamily: "font-jetbrains-mono",
3206
+ fontSize: "text-xs",
3207
+ fontWeight: "font-normal",
3208
+ letterSpacing: "tracking-widest",
3209
+ textTransform: "uppercase"
3210
+ },
3211
+ display: {
3212
+ fontFamily: "font-archivo",
3213
+ fontSize: "text-7xl",
3214
+ fontWeight: "font-black",
3215
+ lineHeight: "leading-tight",
3216
+ letterSpacing: "tracking-tight",
3217
+ fluid: { min: 36, max: 64 }
3218
+ },
3219
+ header1: {
3220
+ fontFamily: "font-archivo",
3221
+ fontSize: "text-5xl",
3222
+ fontWeight: "font-extrabold",
3223
+ lineHeight: "leading-tight",
3224
+ letterSpacing: "tracking-tight",
3225
+ fluid: { min: 28, max: 44 }
3226
+ },
3227
+ header2: {
3228
+ fontFamily: "font-archivo",
3229
+ fontSize: "text-3xl",
3230
+ fontWeight: "font-extrabold",
3231
+ lineHeight: "leading-tight",
3232
+ letterSpacing: "tracking-tight",
3233
+ fluid: { min: 22, max: 32 }
3234
+ },
3235
+ header3: {
3236
+ fontFamily: "font-archivo",
3237
+ fontSize: "text-xl",
3238
+ fontWeight: "font-bold",
3239
+ lineHeight: "leading-snug",
3240
+ letterSpacing: "tracking-tight"
3241
+ },
3242
+ header4: {
3243
+ fontFamily: "font-archivo",
3244
+ fontSize: "text-lg",
3245
+ fontWeight: "font-bold",
3246
+ lineHeight: "leading-snug",
3247
+ letterSpacing: "tracking-tight"
3248
+ },
3249
+ subheader1: {
3250
+ fontFamily: "font-inter",
3251
+ fontSize: "text-lg",
3252
+ fontWeight: "font-normal",
3253
+ lineHeight: "leading-relaxed"
3254
+ },
3255
+ subheader2: {
3256
+ fontFamily: "font-inter",
3257
+ fontSize: "text-base",
3258
+ fontWeight: "font-normal",
3259
+ lineHeight: "leading-relaxed"
3260
+ },
3261
+ text1: {
3262
+ fontFamily: "font-inter",
3263
+ fontSize: "text-base",
3264
+ fontWeight: "font-normal",
3265
+ lineHeight: "leading-relaxed"
3266
+ },
3267
+ text2: {
3268
+ fontFamily: "font-inter",
3269
+ fontSize: "text-sm",
3270
+ fontWeight: "font-normal",
3271
+ lineHeight: "leading-relaxed"
3272
+ },
3273
+ link: {
3274
+ fontFamily: "font-inter",
3275
+ fontSize: "text-sm",
3276
+ fontWeight: "font-medium"
3277
+ },
3278
+ button: {
3279
+ fontFamily: "font-jetbrains-mono",
3280
+ fontSize: "text-xs",
3281
+ fontWeight: "font-medium",
3282
+ letterSpacing: "tracking-wider",
3283
+ textTransform: "uppercase"
3284
+ },
3285
+ input: {
3286
+ fontFamily: "font-jetbrains-mono",
3287
+ fontSize: "text-sm",
3288
+ fontWeight: "font-normal"
3289
+ },
3290
+ code: {
3291
+ fontFamily: "font-jetbrains-mono",
3292
+ fontSize: "text-sm",
3293
+ fontWeight: "font-normal",
3294
+ lineHeight: "leading-relaxed"
3295
+ },
3296
+ caption: {
3297
+ fontFamily: "font-jetbrains-mono",
3298
+ fontSize: "text-xs",
3299
+ fontWeight: "font-normal",
3300
+ letterSpacing: "tracking-wider",
3301
+ textTransform: "uppercase"
3302
+ }
3303
+ },
3304
+ highlight: "marker",
3305
+ interactives: {
3306
+ button: {
3307
+ padding: { x: "px-5", y: "py-3" },
3308
+ border: { width: "border", radius: "rounded-none", style: "border-solid" },
3309
+ shadow: "shadow-none",
3310
+ custom: "transition-colors",
3311
+ disabled: { opacity: "opacity-50", cursor: "cursor-not-allowed" }
3312
+ },
3313
+ menu: {
3314
+ padding: { x: "px-1", y: "py-1" },
3315
+ border: { width: "border", radius: "rounded-none", style: "border-solid" },
3316
+ shadow: "shadow-none",
3317
+ item: {
3318
+ padding: { x: "px-3", y: "py-2" },
3319
+ border: { radius: "rounded-none" }
3320
+ }
3321
+ },
3322
+ dialog: {
3323
+ padding: { x: "px-6", y: "py-6" },
3324
+ border: { width: "border", radius: "rounded-none", style: "border-solid" },
3325
+ shadow: "shadow-none"
3326
+ },
3327
+ popover: {
3328
+ padding: { x: "px-4", y: "py-4" },
3329
+ border: { width: "border", radius: "rounded-none", style: "border-solid" },
3330
+ shadow: "shadow-none"
3331
+ },
3332
+ tooltip: {
3333
+ padding: { x: "px-2", y: "py-1" },
3334
+ border: { width: "border", radius: "rounded-none", style: "border-solid" },
3335
+ shadow: "shadow-none"
3336
+ },
3337
+ link: {
3338
+ padding: { x: "px-0", y: "py-0" },
3339
+ custom: "underline-offset-4 hover:underline"
3340
+ },
3341
+ card: {
3342
+ padding: { x: "px-6", y: "py-6" },
3343
+ border: { width: "border", radius: "rounded-none", style: "border-solid" },
3344
+ shadow: "shadow-none",
3345
+ custom: ""
3346
+ },
3347
+ input: {
3348
+ padding: { x: "px-4", y: "py-3" },
3349
+ border: { width: "border", radius: "rounded-none", style: "border-solid" },
3350
+ shadow: "shadow-none",
3351
+ custom: "",
3352
+ disabled: { cursor: "cursor-not-allowed", opacity: "opacity-50" }
3353
+ }
3354
+ },
3355
+ structure: {
3356
+ page: { width: "max-w-6xl" },
3357
+ section: {
3358
+ dividers: true,
3359
+ padding: { x: "px-6", y: "py-20" }
3360
+ }
3361
+ }
3362
+ };
3363
+ var terminal = {
3364
+ id: "terminal",
3365
+ name: "Terminal",
3366
+ theme: themeStyles6
3367
+ };
3368
+
3369
+ // src/primitives/themes/index.ts
3370
+ var themes = [
3371
+ classic,
3372
+ studio,
3373
+ midnight,
3374
+ editorial,
3375
+ neobrutalism,
3376
+ terminal
3377
+ ];
3378
+ var TooltipThemeContext = React7.createContext(void 0);
3379
+ function useTooltipTheme(providedTheme) {
3380
+ const contextTheme = React7.useContext(TooltipThemeContext);
3381
+ return providedTheme ?? contextTheme;
3382
+ }
3383
+ function TooltipProvider({ theme, children, ...props }) {
3384
+ return /* @__PURE__ */ jsx(TooltipThemeContext.Provider, { value: theme, children: /* @__PURE__ */ jsx(TooltipPrimitive.Provider, { ...props, children }) });
3385
+ }
3386
+ function Tooltip({ theme, children, ...props }) {
3387
+ return /* @__PURE__ */ jsx(TooltipThemeContext.Provider, { value: theme, children: /* @__PURE__ */ jsx(TooltipPrimitive.Root, { ...props, children }) });
3388
+ }
3389
+ var TooltipTrigger = TooltipPrimitive.Trigger;
3390
+ var TooltipPortal = TooltipPrimitive.Portal;
3391
+ var TooltipContent = React7.forwardRef(({ className, sideOffset = 6, theme: providedTheme, ...props }, ref) => {
3392
+ const theme = useTooltipTheme(providedTheme);
3393
+ const styles = theme?.interactives?.tooltip;
3394
+ return /* @__PURE__ */ jsx(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx(
3395
+ TooltipPrimitive.Content,
3396
+ {
3397
+ ref,
3398
+ sideOffset,
3399
+ className: cn(
3400
+ "z-50 w-fit rounded-sm bg-foreground px-2.5 py-1.5 text-xs font-medium text-background outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95",
3401
+ styles?.padding?.x,
3402
+ styles?.padding?.y,
3403
+ styles?.border?.width,
3404
+ styles?.border?.radius,
3405
+ styles?.border?.style,
3406
+ styles?.shadow,
3407
+ styles?.custom,
3408
+ className
3409
+ ),
3410
+ ...props
3411
+ }
3412
+ ) });
3413
+ });
3414
+ TooltipContent.displayName = TooltipPrimitive.Content.displayName;
3415
+
3416
+ export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, Avatar, AvatarFallback, AvatarImage, Badge2 as Badge, Button, Button2, Caption, Checkbox, CodeSnippet, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Display, Drawer, DropdownMenu, DropdownMenuArrow, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Header1, Header2, Header3, Header4, Image2 as Image, Input2 as Input, Label3 as Label, Link, PageCard, PageCardContent, PageCardHeader, PageCardImage, Popover, PopoverAnchor, PopoverClose, PopoverContent, PopoverPortal, PopoverTrigger, Preheader, RadioGroup2 as RadioGroup, RadioGroupItem, Section, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator3 as Separator, Subheader1, Subheader2, Switch, Switch2, TAILWIND_TEXT_PX, Text1, Text2, Textarea, Tooltip, TooltipContent, TooltipPortal, TooltipProvider, TooltipTrigger, cn, createHeading, fluidFontSize, themes };
3417
+ //# sourceMappingURL=chunk-J7Z4UW45.js.map
3418
+ //# sourceMappingURL=chunk-J7Z4UW45.js.map