@frontlit/page-builder 0.1.0-alpha.2 → 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 (98) hide show
  1. package/README.md +32 -0
  2. package/dist/blocks/index.d.ts +33 -21
  3. package/dist/blocks/index.js +3 -3
  4. package/dist/builder/index.d.ts +7 -8
  5. package/dist/builder/index.js +6 -5
  6. package/dist/{button-Bzt1GDO-.d.ts → button-OLKN3wPf.d.ts} +2 -2
  7. package/dist/{chunk-H4P5MFJI.js → chunk-36QHCIPM.js} +205 -251
  8. package/dist/chunk-36QHCIPM.js.map +1 -0
  9. package/dist/chunk-BBI7UHOA.js +56 -0
  10. package/dist/chunk-BBI7UHOA.js.map +1 -0
  11. package/dist/{chunk-KQKSLI3L.js → chunk-GIKTOAQS.js} +335 -122
  12. package/dist/chunk-GIKTOAQS.js.map +1 -0
  13. package/dist/chunk-HWOVSHIW.js +4 -0
  14. package/dist/{chunk-RUYOL7JZ.js.map → chunk-HWOVSHIW.js.map} +1 -1
  15. package/dist/{chunk-HDINUNI2.js → chunk-IU4KATI2.js} +69 -96
  16. package/dist/chunk-IU4KATI2.js.map +1 -0
  17. package/dist/{chunk-SGNRWWG3.js → chunk-J7Z4UW45.js} +530 -135
  18. package/dist/chunk-J7Z4UW45.js.map +1 -0
  19. package/dist/{chunk-UO7XGBGM.js → chunk-K4WCLHMS.js} +1182 -1033
  20. package/dist/chunk-K4WCLHMS.js.map +1 -0
  21. package/dist/components/index.d.ts +33 -8
  22. package/dist/components/index.js +42 -2
  23. package/dist/components/index.js.map +1 -1
  24. package/dist/data-slots.d.ts +3 -3
  25. package/dist/fonts/archivo/archivo-latin-variable.woff2 +0 -0
  26. package/dist/fonts/hanken-grotesk/hanken-grotesk-latin-variable.woff2 +0 -0
  27. package/dist/fonts/jetbrains-mono/jetbrains-mono-latin-variable.woff2 +0 -0
  28. package/dist/fonts/spline-sans-mono/spline-sans-mono-latin-variable.woff2 +0 -0
  29. package/dist/heading-DQCxQt38.d.ts +20 -0
  30. package/dist/image-Bk8kPXwP.d.ts +52 -0
  31. package/dist/index.d.ts +17 -10
  32. package/dist/index.js +7 -6
  33. package/dist/models/index.d.ts +5 -5
  34. package/dist/models/index.js +1 -1
  35. package/dist/{page-W3hQga4w.d.ts → page-B5Gmm-Ys.d.ts} +1 -1
  36. package/dist/primitives/index.d.ts +44 -9
  37. package/dist/primitives/index.js +1 -1
  38. package/dist/renderer/index.d.ts +12 -8
  39. package/dist/renderer/index.js +5 -4
  40. package/dist/{section-background-MsdE40Rk.d.ts → section-background-6V_LCi5e.d.ts} +1 -1
  41. package/dist/server/index.d.ts +103 -0
  42. package/dist/server/index.js +2649 -0
  43. package/dist/server/index.js.map +1 -0
  44. package/dist/server/islands/code-snippet.d.ts +17 -0
  45. package/dist/server/islands/code-snippet.js +72 -0
  46. package/dist/server/islands/code-snippet.js.map +1 -0
  47. package/dist/server/islands/email-form.d.ts +50 -0
  48. package/dist/server/islands/email-form.js +406 -0
  49. package/dist/server/islands/email-form.js.map +1 -0
  50. package/dist/server/islands/header-mobile-menu.d.ts +22 -0
  51. package/dist/server/islands/header-mobile-menu.js +422 -0
  52. package/dist/server/islands/header-mobile-menu.js.map +1 -0
  53. package/dist/server/islands/inline-embed.d.ts +28 -0
  54. package/dist/server/islands/inline-embed.js +84 -0
  55. package/dist/server/islands/inline-embed.js.map +1 -0
  56. package/dist/server/islands/marquee-track.d.ts +18 -0
  57. package/dist/server/islands/marquee-track.js +67 -0
  58. package/dist/server/islands/marquee-track.js.map +1 -0
  59. package/dist/server/islands/nav-link.d.ts +37 -0
  60. package/dist/server/islands/nav-link.js +67 -0
  61. package/dist/server/islands/nav-link.js.map +1 -0
  62. package/dist/server/islands/support-form.d.ts +17 -0
  63. package/dist/server/islands/support-form.js +469 -0
  64. package/dist/server/islands/support-form.js.map +1 -0
  65. package/dist/server/islands/theme-mode-switcher.d.ts +38 -0
  66. package/dist/server/islands/theme-mode-switcher.js +169 -0
  67. package/dist/server/islands/theme-mode-switcher.js.map +1 -0
  68. package/dist/server/islands/video-with-preview.d.ts +13 -0
  69. package/dist/server/islands/video-with-preview.js +269 -0
  70. package/dist/server/islands/video-with-preview.js.map +1 -0
  71. package/dist/server/primitives.d.ts +200 -0
  72. package/dist/server/primitives.js +888 -0
  73. package/dist/server/primitives.js.map +1 -0
  74. package/dist/server/schema.d.ts +11308 -0
  75. package/dist/server/schema.js +6179 -0
  76. package/dist/server/schema.js.map +1 -0
  77. package/dist/server/theme-CF3fIKvw.d.ts +9 -0
  78. package/dist/server/theme-style-5_AGy-4V.d.ts +183 -0
  79. package/dist/server/theme-style-BPaMwk88.d.ts +183 -0
  80. package/dist/server/theme.d.ts +28 -0
  81. package/dist/server/theme.js +1671 -0
  82. package/dist/server/theme.js.map +1 -0
  83. package/dist/server/widget-YH9BrOwY.d.ts +77 -0
  84. package/dist/styles.css +121 -15
  85. package/dist/{theme-style-Cbl7NM-T.d.ts → theme-style-BVd5tOsc.d.ts} +20 -0
  86. package/dist/theme.css +12 -0
  87. package/dist/{widget-B_RoG6se.d.ts → widget-CpE2HdgU.d.ts} +17 -14
  88. package/package.json +60 -11
  89. package/schema/page.v1.json +3855 -0
  90. package/schema/site.v1.json +3811 -0
  91. package/dist/alignment-dZDzN96G.d.ts +0 -5
  92. package/dist/chunk-H4P5MFJI.js.map +0 -1
  93. package/dist/chunk-HDINUNI2.js.map +0 -1
  94. package/dist/chunk-KQKSLI3L.js.map +0 -1
  95. package/dist/chunk-RUYOL7JZ.js +0 -4
  96. package/dist/chunk-SGNRWWG3.js.map +0 -1
  97. package/dist/chunk-UO7XGBGM.js.map +0 -1
  98. package/dist/image-DAWVx1zQ.d.ts +0 -31
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { getMediaUrl } from './chunk-XU7ALPGQ.js';
3
3
  import * as AlertDialogPrimitive from '@radix-ui/react-alert-dialog';
4
- import { X, Check, Circle, ChevronRight, ChevronDown, ChevronUp } from 'lucide-react';
4
+ import { X, Check, Circle, ChevronRight, ChevronDown, ChevronUp, Copy } from 'lucide-react';
5
5
  import * as React7 from 'react';
6
6
  import React7__default, { useRef, useState, useLayoutEffect } from 'react';
7
7
  import { clsx } from 'clsx';
@@ -388,29 +388,82 @@ var Caption = ({
388
388
  );
389
389
  return /* @__PURE__ */ jsx("span", { className: classes, ...props, children });
390
390
  };
391
- var Header4 = ({
392
- children,
393
- className = "",
394
- theme,
395
- ...props
396
- }) => {
397
- const typographyStyles = theme?.typography?.header4;
398
- const classes = cn(
399
- // Base styles
400
- "scroll-m-20 text-xl font-semibold tracking-normal",
401
- // Theme overrides
402
- typographyStyles?.fontFamily,
403
- typographyStyles?.fontSize,
404
- typographyStyles?.fontWeight,
405
- typographyStyles?.lineHeight,
406
- typographyStyles?.letterSpacing,
407
- typographyStyles?.textTransform,
408
- typographyStyles?.textDecoration,
409
- typographyStyles?.textOverflow,
410
- className
411
- );
412
- return /* @__PURE__ */ jsx("h4", { className: classes, ...props, children });
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
413
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
+ );
414
467
  var PageCard = ({
415
468
  isLink,
416
469
  children,
@@ -718,8 +771,10 @@ function Drawer({
718
771
  const triggerWrapRef = useRef(null);
719
772
  const [container, setContainer] = useState(null);
720
773
  useLayoutEffect(() => {
721
- const root = triggerWrapRef.current?.closest("[data-pb-theme], .pb-theme");
722
- setContainer(root instanceof HTMLElement ? root : null);
774
+ const root = triggerWrapRef.current?.closest(
775
+ "[data-pb-theme], .pb-theme"
776
+ );
777
+ setContainer(root ?? null);
723
778
  }, []);
724
779
  return /* @__PURE__ */ jsxs(Sheet, { open, onOpenChange: setOpen, children: [
725
780
  /* @__PURE__ */ jsx(SheetTrigger, { asChild: true, children: /* @__PURE__ */ jsx("span", { ref: triggerWrapRef, children: trigger }) }),
@@ -971,75 +1026,90 @@ var DropdownMenuSubContent = React7.forwardRef(({ className, theme: providedThem
971
1026
  });
972
1027
  DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
973
1028
  var DropdownMenuArrow = DropdownMenuPrimitive.Arrow;
974
- var Header1 = ({
975
- children,
976
- className = "",
977
- theme,
978
- ...props
979
- }) => {
980
- const typographyStyles = theme?.typography?.header1;
981
- const classes = cn(
982
- // Base styles
983
- "scroll-m-20 text-4xl font-bold tracking-tight",
984
- // Theme overrides
985
- typographyStyles?.fontFamily,
986
- typographyStyles?.fontSize,
987
- typographyStyles?.fontWeight,
988
- typographyStyles?.lineHeight,
989
- typographyStyles?.letterSpacing,
990
- typographyStyles?.textTransform,
991
- typographyStyles?.textDecoration,
992
- typographyStyles?.textOverflow,
993
- className
994
- );
995
- return /* @__PURE__ */ jsx("h1", { className: classes, ...props, children });
996
- };
997
- var Header2 = ({
998
- children,
999
- className = "",
1000
- theme,
1001
- ...props
1002
- }) => {
1003
- const typographyStyles = theme?.typography?.header2;
1004
- const classes = cn(
1005
- // Base styles
1006
- "scroll-m-20 text-3xl font-bold tracking-tight",
1007
- // Theme overrides
1008
- typographyStyles?.fontFamily,
1009
- typographyStyles?.fontSize,
1010
- typographyStyles?.fontWeight,
1011
- typographyStyles?.lineHeight,
1012
- typographyStyles?.letterSpacing,
1013
- typographyStyles?.textTransform,
1014
- typographyStyles?.textDecoration,
1015
- typographyStyles?.textOverflow,
1016
- className
1017
- );
1018
- return /* @__PURE__ */ jsx("h2", { className: classes, ...props, children });
1019
- };
1020
- var Header3 = ({
1021
- children,
1022
- className = "",
1023
- theme,
1024
- ...props
1025
- }) => {
1026
- const typographyStyles = theme?.typography?.header3;
1027
- const classes = cn(
1028
- // Base styles
1029
- "scroll-m-20 text-2xl font-semibold tracking-normal",
1030
- // Theme overrides
1031
- typographyStyles?.fontFamily,
1032
- typographyStyles?.fontSize,
1033
- typographyStyles?.fontWeight,
1034
- typographyStyles?.lineHeight,
1035
- typographyStyles?.letterSpacing,
1036
- typographyStyles?.textTransform,
1037
- typographyStyles?.textDecoration,
1038
- typographyStyles?.textOverflow,
1039
- className
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
+ }
1040
1079
  );
1041
- return /* @__PURE__ */ jsx("h3", { className: classes, ...props, children });
1042
- };
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
+ );
1043
1113
  var Image2 = ({
1044
1114
  src,
1045
1115
  alt = "",
@@ -1287,34 +1357,43 @@ var RadioGroupItem = React7.forwardRef(({ className, theme: providedTheme, ...pr
1287
1357
  );
1288
1358
  });
1289
1359
  RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;
1290
- function resolveBackgroundLayerStyle(background, nextTheme) {
1291
- const isDark = nextTheme === "dark";
1360
+ function resolveBackgroundLayer(background) {
1292
1361
  const attachment = background.backgroundAttachment || "scroll";
1293
1362
  if (background.type === "color") {
1294
1363
  return {
1295
- backgroundColor: isDark ? background.backgroundColorDark || background.backgroundColor : background.backgroundColor
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
+ }
1296
1369
  };
1297
1370
  }
1298
1371
  if (background.type === "image") {
1299
1372
  const bgUrl = getMediaUrl(background.media);
1300
1373
  return {
1301
- backgroundImage: bgUrl ? `url(${bgUrl})` : void 0,
1302
- backgroundSize: background.backgroundSize || "cover",
1303
- backgroundPosition: background.backgroundPosition || "center",
1304
- backgroundRepeat: background.backgroundRepeat || "no-repeat",
1305
- backgroundAttachment: attachment,
1306
- maskImage: background.maskImage,
1307
- WebkitMaskImage: background.maskImage
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
+ }
1308
1383
  };
1309
1384
  }
1310
1385
  return {
1311
- backgroundImage: isDark ? background.backgroundImageDark || background.backgroundImage : background.backgroundImage,
1312
- backgroundSize: background.gradientBackgroundSize || "cover",
1313
- backgroundPosition: background.gradientBackgroundPosition || "center",
1314
- backgroundRepeat: background.gradientBackgroundRepeat || "no-repeat",
1315
- backgroundAttachment: attachment,
1316
- maskImage: background.gradientMaskImage,
1317
- WebkitMaskImage: background.gradientMaskImage
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
+ }
1318
1397
  };
1319
1398
  }
1320
1399
  var Section = ({
@@ -1322,11 +1401,15 @@ var Section = ({
1322
1401
  className = "",
1323
1402
  theme,
1324
1403
  background,
1325
- nextTheme,
1326
1404
  component = "section",
1327
1405
  ...props
1328
1406
  }) => {
1329
- const classes = cn("bg-background text-foreground relative", className);
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;
1330
1413
  const isFixed = background && background.type !== "color" && background.backgroundAttachment === "fixed";
1331
1414
  return /* @__PURE__ */ jsx(Fragment, { children: React7__default.createElement(
1332
1415
  component,
@@ -1338,22 +1421,25 @@ var Section = ({
1338
1421
  ...props
1339
1422
  },
1340
1423
  /* @__PURE__ */ jsxs(Fragment, { children: [
1341
- background && /* @__PURE__ */ jsx(
1424
+ backgroundLayer && /* @__PURE__ */ jsx(
1342
1425
  "div",
1343
1426
  {
1344
- suppressHydrationWarning: true,
1345
1427
  "aria-hidden": true,
1346
- className: "pointer-events-none absolute inset-0 z-0",
1347
- style: resolveBackgroundLayerStyle(background, nextTheme)
1428
+ className: cn(
1429
+ "pointer-events-none absolute inset-0 z-0",
1430
+ backgroundLayer.className
1431
+ ),
1432
+ style: backgroundLayer.style
1348
1433
  }
1349
1434
  ),
1350
1435
  background && background.type === "image" && /* @__PURE__ */ jsx(
1351
1436
  "div",
1352
1437
  {
1353
1438
  "aria-hidden": true,
1354
- className: "pointer-events-none absolute inset-0 z-[1]",
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))]",
1355
1440
  style: {
1356
- backgroundColor: nextTheme === "dark" ? background?.overlay?.colorDark || background?.overlay?.color : background?.overlay?.color,
1441
+ "--pb-overlay": background?.overlay?.color,
1442
+ "--pb-overlay-dark": background?.overlay?.colorDark,
1357
1443
  opacity: background?.overlay?.opacity ? background.overlay.opacity / 10 : 0,
1358
1444
  mixBlendMode: background?.overlay?.blendMode
1359
1445
  }
@@ -1805,19 +1891,29 @@ var themeStyles = {
1805
1891
  letterSpacing: "tracking-widest",
1806
1892
  textTransform: "uppercase"
1807
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
+ },
1808
1902
  header1: {
1809
1903
  fontFamily: "font-inter",
1810
1904
  fontSize: "text-5xl",
1811
1905
  fontWeight: "font-semibold",
1812
1906
  lineHeight: "leading-tight",
1813
- letterSpacing: "tracking-tighter"
1907
+ letterSpacing: "tracking-tighter",
1908
+ fluid: { min: 28, max: 48 }
1814
1909
  },
1815
1910
  header2: {
1816
1911
  fontFamily: "font-inter",
1817
1912
  fontSize: "text-4xl",
1818
1913
  fontWeight: "font-semibold",
1819
1914
  lineHeight: "leading-tight",
1820
- letterSpacing: "tracking-tight"
1915
+ letterSpacing: "tracking-tight",
1916
+ fluid: { min: 24, max: 36 }
1821
1917
  },
1822
1918
  header3: {
1823
1919
  fontFamily: "font-inter",
@@ -1891,6 +1987,7 @@ var themeStyles = {
1891
1987
  letterSpacing: "tracking-normal"
1892
1988
  }
1893
1989
  },
1990
+ highlight: "marker",
1894
1991
  interactives: {
1895
1992
  button: {
1896
1993
  padding: {
@@ -2082,19 +2179,29 @@ var themeStyles2 = {
2082
2179
  letterSpacing: "tracking-widest",
2083
2180
  textTransform: "uppercase"
2084
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
+ },
2085
2190
  header1: {
2086
2191
  fontFamily: "font-playfair-display",
2087
2192
  fontSize: "text-6xl",
2088
2193
  fontWeight: "font-medium",
2089
- lineHeight: "leading-none",
2090
- letterSpacing: "tracking-tighter"
2194
+ lineHeight: "leading-tight",
2195
+ letterSpacing: "tracking-tighter",
2196
+ fluid: { min: 30, max: 52 }
2091
2197
  },
2092
2198
  header2: {
2093
2199
  fontFamily: "font-playfair-display",
2094
2200
  fontSize: "text-4xl",
2095
2201
  fontWeight: "font-medium",
2096
2202
  lineHeight: "leading-tight",
2097
- letterSpacing: "tracking-tighter"
2203
+ letterSpacing: "tracking-tighter",
2204
+ fluid: { min: 24, max: 36 }
2098
2205
  },
2099
2206
  header3: {
2100
2207
  fontFamily: "font-source-serif-4",
@@ -2330,19 +2437,29 @@ var themeStyles3 = {
2330
2437
  letterSpacing: "tracking-widest",
2331
2438
  textTransform: "uppercase"
2332
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
+ },
2333
2448
  header1: {
2334
2449
  fontFamily: "font-roboto",
2335
2450
  fontSize: "text-5xl",
2336
2451
  fontWeight: "font-medium",
2337
2452
  lineHeight: "leading-tight",
2338
- letterSpacing: "tracking-tighter"
2453
+ letterSpacing: "tracking-tighter",
2454
+ fluid: { min: 28, max: 48 }
2339
2455
  },
2340
2456
  header2: {
2341
2457
  fontFamily: "font-roboto",
2342
2458
  fontSize: "text-4xl",
2343
2459
  fontWeight: "font-medium",
2344
2460
  lineHeight: "leading-tight",
2345
- letterSpacing: "tracking-tight"
2461
+ letterSpacing: "tracking-tight",
2462
+ fluid: { min: 24, max: 36 }
2346
2463
  },
2347
2464
  header3: {
2348
2465
  fontFamily: "font-roboto",
@@ -2576,19 +2693,29 @@ var themeStyles4 = {
2576
2693
  letterSpacing: "tracking-widest",
2577
2694
  textTransform: "uppercase"
2578
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
+ },
2579
2704
  header1: {
2580
2705
  fontFamily: "font-inter",
2581
2706
  fontSize: "text-5xl",
2582
2707
  fontWeight: "font-black",
2583
- lineHeight: "leading-none",
2584
- letterSpacing: "tracking-tighter"
2708
+ lineHeight: "leading-tight",
2709
+ letterSpacing: "tracking-tighter",
2710
+ fluid: { min: 28, max: 48 }
2585
2711
  },
2586
2712
  header2: {
2587
2713
  fontFamily: "font-inter",
2588
2714
  fontSize: "text-4xl",
2589
2715
  fontWeight: "font-extrabold",
2590
2716
  lineHeight: "leading-tight",
2591
- letterSpacing: "tracking-tight"
2717
+ letterSpacing: "tracking-tight",
2718
+ fluid: { min: 24, max: 36 }
2592
2719
  },
2593
2720
  header3: {
2594
2721
  fontFamily: "font-inter",
@@ -2648,6 +2775,7 @@ var themeStyles4 = {
2648
2775
  textTransform: "uppercase"
2649
2776
  }
2650
2777
  },
2778
+ highlight: "marker",
2651
2779
  interactives: {
2652
2780
  button: {
2653
2781
  padding: { x: "px-6", y: "py-3" },
@@ -2822,19 +2950,29 @@ var themeStyles5 = {
2822
2950
  letterSpacing: "tracking-widest",
2823
2951
  textTransform: "uppercase"
2824
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
+ },
2825
2961
  header1: {
2826
2962
  fontFamily: "font-montserrat",
2827
2963
  fontSize: "text-6xl",
2828
2964
  fontWeight: "font-semibold",
2829
- lineHeight: "leading-none",
2830
- letterSpacing: "tracking-tighter"
2965
+ lineHeight: "leading-tight",
2966
+ letterSpacing: "tracking-tighter",
2967
+ fluid: { min: 30, max: 52 }
2831
2968
  },
2832
2969
  header2: {
2833
2970
  fontFamily: "font-montserrat",
2834
2971
  fontSize: "text-4xl",
2835
2972
  fontWeight: "font-semibold",
2836
2973
  lineHeight: "leading-tight",
2837
- letterSpacing: "tracking-tight"
2974
+ letterSpacing: "tracking-tight",
2975
+ fluid: { min: 24, max: 36 }
2838
2976
  },
2839
2977
  header3: {
2840
2978
  fontFamily: "font-montserrat",
@@ -2978,8 +3116,265 @@ var studio = {
2978
3116
  theme: themeStyles5
2979
3117
  };
2980
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
+
2981
3369
  // src/primitives/themes/index.ts
2982
- var themes = [classic, studio, midnight, editorial, neobrutalism];
3370
+ var themes = [
3371
+ classic,
3372
+ studio,
3373
+ midnight,
3374
+ editorial,
3375
+ neobrutalism,
3376
+ terminal
3377
+ ];
2983
3378
  var TooltipThemeContext = React7.createContext(void 0);
2984
3379
  function useTooltipTheme(providedTheme) {
2985
3380
  const contextTheme = React7.useContext(TooltipThemeContext);
@@ -3018,6 +3413,6 @@ var TooltipContent = React7.forwardRef(({ className, sideOffset = 6, theme: prov
3018
3413
  });
3019
3414
  TooltipContent.displayName = TooltipPrimitive.Content.displayName;
3020
3415
 
3021
- export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, Avatar, AvatarFallback, AvatarImage, Badge2 as Badge, Button, Button2, Caption, Checkbox, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, 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, Text1, Text2, Textarea, Tooltip, TooltipContent, TooltipPortal, TooltipProvider, TooltipTrigger, cn, themes };
3022
- //# sourceMappingURL=chunk-SGNRWWG3.js.map
3023
- //# sourceMappingURL=chunk-SGNRWWG3.js.map
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