@bergetai/ui 0.8.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -49,7 +49,7 @@ Components are organized by category:
49
49
 
50
50
  - **actions** - Interactive controls (Button)
51
51
  - **branding** - Brand identity assets (Logotype, Symbol)
52
- - **data** - Content presentation (CodeBlock, FeatureCards, HeroBlock, List, StatCard)
52
+ - **data** - Content presentation (CodeBlock, FeatureCards, List, StatCard)
53
53
  - **display** - Visual elements (Badge, Card, Icon, Typography)
54
54
  - **feedback** - Status and messaging (Alert, SectionHeader)
55
55
  - **forms** - Form field primitives (Checkbox, Input, Label, Select, Textarea)
package/dist/index.cjs CHANGED
@@ -99,7 +99,6 @@ __export(src_exports, {
99
99
  FieldTitle: () => FieldTitle,
100
100
  FogIllustration: () => FogIllustration,
101
101
  Grid: () => Grid,
102
- HeroBlock: () => HeroBlock,
103
102
  Icon: () => Icon,
104
103
  Input: () => Input2,
105
104
  Item: () => Item2,
@@ -266,7 +265,16 @@ var twMerge = (0, import_tailwind_merge.extendTailwindMerge)({
266
265
  "rounded-berget-lg",
267
266
  "rounded-berget-full"
268
267
  ],
269
- "font-size": ["text-h1", "text-h2", "text-h3", "text-h4", "text-p", "text-mono"]
268
+ "font-size": [
269
+ "text-h1",
270
+ "text-h2",
271
+ "text-h3",
272
+ "text-h4",
273
+ "text-p",
274
+ "text-mono",
275
+ "text-hero",
276
+ "text-caption"
277
+ ]
270
278
  }
271
279
  }
272
280
  });
@@ -417,21 +425,72 @@ function Button({
417
425
 
418
426
  // src/components/button/Button.tsx
419
427
  var import_jsx_runtime4 = require("react/jsx-runtime");
428
+ var interactionClasses = cn(
429
+ // Outline-based focus indicator; neutralise the primitive's ring (the
430
+ // ring colour class is left — harmless at width 0).
431
+ "focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-berget-button-focus-ring focus-visible:ring-0",
432
+ // Neutralise the primitive's disabled fade; variants apply their own tokens.
433
+ "disabled:pointer-events-none disabled:opacity-100 disabled:cursor-not-allowed",
434
+ // No press movement: same compound selector as the primitive base's 1px
435
+ // active translate so tailwind-merge strips it down to 0.
436
+ "active:not-aria-[haspopup]:translate-y-0"
437
+ );
438
+ var disabledClasses = "disabled:text-berget-button-disabled-fg disabled:shadow-none";
420
439
  function brandVariantClasses(variant) {
421
440
  switch (variant) {
422
441
  case "primary":
423
- return "bg-berget-button-primary-bg text-berget-button-primary-fg shadow-berget-lg hover:bg-berget-button-primary-hover hover:shadow-berget-lg";
442
+ return cn(
443
+ // Flat tinted-glass fill; the alpha carries the state, so no shadow lift.
444
+ "bg-berget-button-primary-bg text-berget-button-primary-fg",
445
+ "hover:bg-berget-button-primary-hover",
446
+ // Pin the foreground on hover — the underlying primitive ghost adds
447
+ // hover:text-foreground, which would override the primary fg token.
448
+ "hover:text-berget-button-primary-fg",
449
+ "active:bg-berget-button-primary-active",
450
+ // Keep the resting (transparent) border on focus — the outline is the indicator.
451
+ "focus-visible:border-transparent",
452
+ disabledClasses,
453
+ "disabled:bg-berget-button-primary-disabled-bg"
454
+ );
424
455
  case "destructive":
425
- return "bg-berget-button-destructive-bg text-berget-button-destructive-fg shadow-berget-sm hover:bg-berget-button-destructive-bg/80 hover:shadow-berget-sm dark:hover:bg-berget-button-destructive-bg/80 dark:hover:text-berget-button-destructive-fg";
426
- case "outline":
427
- return "border-berget-border-interactive bg-transparent text-berget-foreground hover:bg-berget-surface-hover hover:text-berget-foreground hover:border-berget-border-interactive-elevated";
428
- case "ghost":
429
- return "bg-transparent text-berget-foreground hover:bg-berget-brand-granite-800 hover:text-berget-foreground";
456
+ return cn(
457
+ "bg-berget-button-destructive-bg text-berget-button-destructive-fg",
458
+ "hover:bg-berget-button-destructive-hover",
459
+ // Pin the foreground on hover — the underlying primitive ghost adds
460
+ // hover:text-foreground, which would override the destructive fg token.
461
+ "hover:text-berget-button-destructive-hover-fg",
462
+ "active:bg-berget-button-destructive-active",
463
+ "focus-visible:border-transparent",
464
+ disabledClasses,
465
+ "disabled:bg-berget-button-destructive-disabled-bg"
466
+ );
430
467
  case "link":
431
- return "bg-transparent hover:bg-transparent focus:bg-transparent active:bg-transparent text-berget-button-link-fg underline-offset-4 hover:underline";
468
+ return cn(
469
+ "h-auto bg-transparent p-0 text-berget-button-link-fg underline-offset-4 shadow-none",
470
+ "hover:bg-transparent hover:text-berget-button-link-hover-fg",
471
+ // On press, return to the resting foreground (hover fg otherwise sticks).
472
+ "active:text-berget-button-link-fg",
473
+ "focus:bg-transparent",
474
+ // Neutralise the primitive base's focus-visible:border-ring + ring-3,
475
+ // which land on link too (the primitive merges its cva base under
476
+ // every variant): the outline above is the only focus indicator.
477
+ "focus-visible:border-transparent focus-visible:ring-0",
478
+ "focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-berget-button-focus-ring focus-visible:rounded-berget-xs",
479
+ "disabled:text-berget-button-disabled-fg disabled:no-underline",
480
+ "disabled:opacity-100 disabled:cursor-not-allowed"
481
+ );
432
482
  case "default":
433
483
  default:
434
- return "bg-berget-button-default-bg text-berget-button-default-fg shadow-berget-lg hover:bg-berget-button-default-bg/90 hover:shadow-berget-lg";
484
+ return cn(
485
+ // Solid granite-800 fill with a granite-700 border on dark surfaces
486
+ // (ink glass in light theme).
487
+ "bg-berget-button-default-bg border-berget-button-default-border text-berget-button-default-fg",
488
+ "hover:bg-berget-button-default-hover",
489
+ "active:bg-berget-button-default-active",
490
+ "focus-visible:border-transparent",
491
+ disabledClasses,
492
+ "disabled:bg-berget-button-default-disabled-bg"
493
+ );
435
494
  }
436
495
  }
437
496
  function primitiveVariant(variant) {
@@ -458,9 +517,16 @@ function Button2({
458
517
  const isLink = variant === "link";
459
518
  const baseClass = cn(
460
519
  !isLink && buttonVariants({ variant: primitiveVariant(variant), size }),
461
- // Berget brand overrides
462
- !isLink && "rounded-full",
520
+ // Berget brand overrides — full-width buttons use the square radius;
521
+ // everything else stays pill-shaped.
522
+ !isLink && (width === "full" ? "rounded-berget-xs" : "rounded-full"),
523
+ // Em-based padding, inline = 2× block — matches the 8px/16px spacing-scale
524
+ // values at the default text-sm (14px) and scales down/up with smaller or
525
+ // larger button text. h-auto drops the primitive's fixed h-* so the
526
+ // vertical paddings take effect.
527
+ !isLink && !isIcon && "py-[0.57em] px-[1.14em] h-auto",
463
528
  brandVariantClasses(variant),
529
+ interactionClasses,
464
530
  !isLink && width === "full" && "w-full",
465
531
  isIcon && "rounded-full shadow-[0px_1px_3px_rgba(0,0,0,0.1),0px_1px_2px_-1px_rgba(0,0,0,0.1)]",
466
532
  className
@@ -488,6 +554,8 @@ var typographyVariants = (0, import_class_variance_authority2.cva)("", {
488
554
  variant: {
489
555
  // Fluid heading scale — use @theme tokens (clamp-based, 390px → 1440px)
490
556
  h1: "text-h1 font-h1 leading-h1 tracking-h1 text-balance",
557
+ // Hero display — from landing-page /dedicated-inference hero (Ovo, 400, tight display leading)
558
+ hero: "text-hero font-hero leading-hero tracking-hero text-balance font-normal [font-feature-settings:'normal']",
491
559
  h2: "text-h2 font-h2 leading-h2 tracking-h2 text-balance",
492
560
  h3: "text-h3 font-h3 leading-h3 tracking-h3 text-balance",
493
561
  h4: "text-h4 font-h4 leading-h4 tracking-h4 text-balance",
@@ -498,6 +566,8 @@ var typographyVariants = (0, import_class_variance_authority2.cva)("", {
498
566
  body: "text-p font-p leading-p text-pretty",
499
567
  small: "text-sm font-sm leading-sm text-pretty",
500
568
  xs: "text-xs font-xs leading-xs text-pretty",
569
+ // Caption / overline / eyebrow (DM Sans, Semibold, uppercase)
570
+ caption: "text-caption font-caption leading-caption tracking-caption text-pretty font-semibold uppercase",
501
571
  // Monospaced — use @theme token
502
572
  mono: "text-mono font-mono leading-mono text-pretty",
503
573
  // Inline code / spec labels
@@ -506,7 +576,8 @@ var typographyVariants = (0, import_class_variance_authority2.cva)("", {
506
576
  color: {
507
577
  default: "text-berget-foreground",
508
578
  muted: "text-berget-muted-foreground",
509
- dim: "text-berget-foreground/65"
579
+ dim: "text-berget-foreground/65",
580
+ primary: "text-berget-primary"
510
581
  }
511
582
  },
512
583
  defaultVariants: {
@@ -515,6 +586,7 @@ var typographyVariants = (0, import_class_variance_authority2.cva)("", {
515
586
  }
516
587
  });
517
588
  var defaultElementMap = {
589
+ hero: "h1",
518
590
  h1: "h1",
519
591
  h2: "h2",
520
592
  h3: "h3",
@@ -524,6 +596,7 @@ var defaultElementMap = {
524
596
  body: "p",
525
597
  small: "p",
526
598
  xs: "p",
599
+ caption: "span",
527
600
  mono: "p",
528
601
  code: "span"
529
602
  };
@@ -561,7 +634,7 @@ function Card({
561
634
  "data-slot": "card",
562
635
  "data-size": size,
563
636
  className: (0, import_cn2.cn)(
564
- "group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-xl bg-card py-(--card-spacing) text-sm text-card-foreground ring-1 ring-foreground/10 [--card-spacing:--spacing(4)] has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",
637
+ "group/card flex flex-col gap-(--card-spacing) overflow-hidden rounded-berget-xs bg-card py-(--card-spacing) text-sm text-card-foreground ring-1 ring-foreground/10 [--card-spacing:--spacing(4)] has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:[--card-spacing:--spacing(3)] data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",
565
638
  className
566
639
  ),
567
640
  ...props
@@ -630,11 +703,11 @@ function CardFooter({ className, ...props }) {
630
703
 
631
704
  // src/components/card/Card.tsx
632
705
  var import_jsx_runtime7 = require("react/jsx-runtime");
633
- var cardVariants = (0, import_class_variance_authority3.cva)("rounded-berget-sm", {
706
+ var cardVariants = (0, import_class_variance_authority3.cva)("rounded-berget-xs ring-0", {
634
707
  variants: {
635
708
  variant: {
636
- outlined: "bg-transparent border border-berget-border",
637
- filled: "bg-berget-card-filled-bg border border-berget-border"
709
+ outlined: "bg-transparent border border-berget-border-subtle",
710
+ filled: "bg-berget-card-filled-bg border border-berget-border-subtle"
638
711
  },
639
712
  padding: {
640
713
  none: "p-0",
@@ -970,7 +1043,7 @@ var ModelCard = React9.forwardRef(
970
1043
  {
971
1044
  variant: "filled",
972
1045
  padding: "none",
973
- className: "relative flex h-full flex-col bg-berget-card-filled-bg p-5 transition-all hover:bg-[color-mix(in_oklab,var(--berget-brand-granite-100)_5%,var(--berget-card-filled-bg))] hover:ring-2 hover:ring-berget-brand-granite-700 sm:p-6",
1046
+ className: "relative flex h-full flex-col bg-berget-card-filled-bg p-5 transition-all hover:bg-[color-mix(in_oklab,var(--berget-brand-granite-100)_5%,var(--berget-card-filled-bg))] sm:p-6",
974
1047
  children: [
975
1048
  lifecycle && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "absolute top-0 right-0 z-10 overflow-hidden rounded-bl-berget-sm", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
976
1049
  "div",
@@ -4013,41 +4086,6 @@ var FeatureList = React29.forwardRef(
4013
4086
  );
4014
4087
  FeatureList.displayName = "FeatureList";
4015
4088
 
4016
- // src/components/hero-block/HeroBlock.tsx
4017
- var React30 = __toESM(require("react"), 1);
4018
- var import_jsx_runtime45 = require("react/jsx-runtime");
4019
- var HeroBlock = React30.forwardRef(
4020
- ({ className, taglineIcon: TaglineIcon, tagline, title, description, actions, ...props }, ref) => {
4021
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
4022
- "div",
4023
- {
4024
- ref,
4025
- className: cn(
4026
- "relative overflow-hidden min-h-[40dvh] flex items-center py-fluid-2xl",
4027
- className
4028
- ),
4029
- ...props,
4030
- children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "mx-auto px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "mx-auto text-center max-w-4xl", children: [
4031
- tagline && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
4032
- Badge,
4033
- {
4034
- variant: "default",
4035
- icon: TaglineIcon ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Icon, { icon: TaglineIcon, size: 16 }) : void 0,
4036
- iconGap: 2,
4037
- className: "mb-fluid-md",
4038
- children: tagline
4039
- }
4040
- ),
4041
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Typography, { variant: "h1", className: "mb-fluid-md", children: title }),
4042
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Typography, { variant: "h3", color: "muted", className: "mb-fluid-lg", children: description }),
4043
- actions && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "flex flex-wrap gap-fluid-md justify-center", children: actions })
4044
- ] }) })
4045
- }
4046
- );
4047
- }
4048
- );
4049
- HeroBlock.displayName = "HeroBlock";
4050
-
4051
4089
  // src/components/code-block/CodeBlock.tsx
4052
4090
  var import_react2 = require("react");
4053
4091
  var import_lucide_react15 = require("lucide-react");
@@ -4091,7 +4129,7 @@ function getHighlighter() {
4091
4129
  }
4092
4130
 
4093
4131
  // src/components/code-block/CodeBlock.tsx
4094
- var import_jsx_runtime46 = require("react/jsx-runtime");
4132
+ var import_jsx_runtime45 = require("react/jsx-runtime");
4095
4133
  function CodeBlock({ code, language = "text", title, className }) {
4096
4134
  const [html, setHtml] = (0, import_react2.useState)(null);
4097
4135
  const [copied, setCopied] = (0, import_react2.useState)(false);
@@ -4107,42 +4145,42 @@ function CodeBlock({ code, language = "text", title, className }) {
4107
4145
  setCopied(true);
4108
4146
  setTimeout(() => setCopied(false), 2e3);
4109
4147
  }, [code]);
4110
- const copyButton = /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
4148
+ const copyButton = /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
4111
4149
  "button",
4112
4150
  {
4113
4151
  onClick: handleCopy,
4114
4152
  className: "flex items-center justify-center w-6 h-6 text-berget-muted-foreground hover:text-berget-foreground transition-colors",
4115
4153
  "aria-label": "Copy code",
4116
- children: copied ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react15.Check, { className: "w-3.5 h-3.5" }) : /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_lucide_react15.Copy, { className: "w-3.5 h-3.5" })
4154
+ children: copied ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react15.Check, { className: "w-3.5 h-3.5" }) : /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_lucide_react15.Copy, { className: "w-3.5 h-3.5" })
4117
4155
  }
4118
4156
  );
4119
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
4157
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
4120
4158
  "div",
4121
4159
  {
4122
4160
  className: cn(
4123
- "rounded-berget-sm border bg-berget-codeblock-bg border-berget-border backdrop-blur-[12px] relative overflow-hidden isolate",
4161
+ "rounded-berget-xs border bg-berget-codeblock-bg border-berget-border backdrop-blur-[12px] relative overflow-hidden isolate",
4124
4162
  className
4125
4163
  ),
4126
4164
  children: [
4127
- title && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "!h-10 flex items-center !px-4 !text-xs !leading-normal border-b border-berget-border bg-berget-codeblock-header-bg", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "text-berget-muted-foreground", children: title }) }),
4128
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "absolute right-2 top-2 z-10", children: copyButton }),
4129
- html ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
4165
+ title && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "!h-10 flex items-center !px-4 !text-xs !leading-normal border-b border-berget-border bg-berget-codeblock-header-bg", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "text-berget-muted-foreground", children: title }) }),
4166
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "absolute right-2 top-2 z-10", children: copyButton }),
4167
+ html ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
4130
4168
  "div",
4131
4169
  {
4132
4170
  className: "[&_.shiki]:!p-4 [&_.shiki]:!m-0 [&_.shiki]:overflow-x-auto [&_.shiki]:!text-sm [&_.shiki]:!leading-relaxed [&_.shiki]:bg-transparent",
4133
4171
  dangerouslySetInnerHTML: { __html: html }
4134
4172
  }
4135
- ) : /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("pre", { className: "!p-4 !m-0 overflow-x-auto !text-sm !leading-relaxed text-berget-muted-foreground", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("code", { children: code }) })
4173
+ ) : /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("pre", { className: "!p-4 !m-0 overflow-x-auto !text-sm !leading-relaxed text-berget-muted-foreground", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("code", { children: code }) })
4136
4174
  ]
4137
4175
  }
4138
4176
  );
4139
4177
  }
4140
4178
 
4141
4179
  // src/components/window-frame/WindowFrame.tsx
4142
- var React31 = __toESM(require("react"), 1);
4180
+ var React30 = __toESM(require("react"), 1);
4143
4181
  var import_react3 = require("react");
4144
- var import_jsx_runtime47 = require("react/jsx-runtime");
4145
- var WindowFrame = React31.forwardRef(
4182
+ var import_jsx_runtime46 = require("react/jsx-runtime");
4183
+ var WindowFrame = React30.forwardRef(
4146
4184
  ({ title = "window", tabs, activeTab, onTabChange, children, className, ...props }, ref) => {
4147
4185
  const [internalActive, setInternalActive] = (0, import_react3.useState)(tabs?.[0]?.id ?? "");
4148
4186
  const currentTab = activeTab ?? internalActive;
@@ -4153,7 +4191,7 @@ var WindowFrame = React31.forwardRef(
4153
4191
  setInternalActive(id);
4154
4192
  }
4155
4193
  };
4156
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
4194
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
4157
4195
  "div",
4158
4196
  {
4159
4197
  ref,
@@ -4163,13 +4201,13 @@ var WindowFrame = React31.forwardRef(
4163
4201
  ),
4164
4202
  ...props,
4165
4203
  children: [
4166
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center gap-2 px-4 py-3 border-b border-berget-brand-granite-700 bg-berget-brand-granite-900", children: [
4167
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex items-center gap-2 flex-shrink-0", children: [
4168
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "w-3 h-3 rounded-full bg-berget-brand-muscaria-400" }),
4169
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "w-3 h-3 rounded-full bg-berget-brand-chanterelle-200" }),
4170
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "w-3 h-3 rounded-full bg-berget-brand-moss-400" })
4204
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "flex items-center gap-2 px-4 py-3 border-b border-berget-brand-granite-700 bg-berget-brand-granite-900", children: [
4205
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "flex items-center gap-2 flex-shrink-0", children: [
4206
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "w-3 h-3 rounded-full bg-berget-brand-muscaria-400" }),
4207
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "w-3 h-3 rounded-full bg-berget-brand-chanterelle-200" }),
4208
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "w-3 h-3 rounded-full bg-berget-brand-moss-400" })
4171
4209
  ] }),
4172
- tabs && tabs.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "ml-4 flex items-center gap-1", children: tabs.map((tab) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
4210
+ tabs && tabs.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "ml-4 flex items-center gap-1", children: tabs.map((tab) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
4173
4211
  "button",
4174
4212
  {
4175
4213
  type: "button",
@@ -4181,9 +4219,9 @@ var WindowFrame = React31.forwardRef(
4181
4219
  children: tab.label
4182
4220
  },
4183
4221
  tab.id
4184
- )) }) : /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "ml-4 text-sm font-mono text-berget-brand-moss-400", children: title })
4222
+ )) }) : /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "ml-4 text-sm font-mono text-berget-brand-moss-400", children: title })
4185
4223
  ] }),
4186
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { children })
4224
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { children })
4187
4225
  ]
4188
4226
  }
4189
4227
  );
@@ -4193,7 +4231,7 @@ WindowFrame.displayName = "WindowFrame";
4193
4231
 
4194
4232
  // src/components/fog-illustration/FogIllustration.tsx
4195
4233
  var import_react4 = require("react");
4196
- var import_jsx_runtime48 = require("react/jsx-runtime");
4234
+ var import_jsx_runtime47 = require("react/jsx-runtime");
4197
4235
  var FOG_BRAND_PALETTE = {
4198
4236
  ink: "#171a1a",
4199
4237
  milk: "#f7f5ed",
@@ -4506,7 +4544,7 @@ var FogIllustration = ({ palette, speed = 1, className }) => {
4506
4544
  gl.deleteFramebuffer(fbo);
4507
4545
  };
4508
4546
  }, []);
4509
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("canvas", { ref, "aria-hidden": "true", className: cn("size-full", className) });
4547
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("canvas", { ref, "aria-hidden": "true", className: cn("size-full", className) });
4510
4548
  };
4511
4549
  // Annotate the CommonJS export names for ESM import in node:
4512
4550
  0 && (module.exports = {
@@ -4579,7 +4617,6 @@ var FogIllustration = ({ palette, speed = 1, className }) => {
4579
4617
  FieldTitle,
4580
4618
  FogIllustration,
4581
4619
  Grid,
4582
- HeroBlock,
4583
4620
  Icon,
4584
4621
  Input,
4585
4622
  Item,