@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/dist/index.d.cts CHANGED
@@ -45,7 +45,7 @@ declare const buttonVariants: (props?: ({
45
45
  declare function Button$1({ className, variant, size, ...props }: Button$2.Props & VariantProps<typeof buttonVariants>): react_jsx_runtime.JSX.Element;
46
46
 
47
47
  /** Variants exposed by the Berget wrapper. */
48
- type CustomVariant = 'default' | 'primary' | 'destructive' | 'outline' | 'ghost' | 'link';
48
+ type CustomVariant = 'default' | 'primary' | 'destructive' | 'link';
49
49
  /** Props for the Berget Button wrapper. */
50
50
  interface ButtonProps extends Omit<React$1.ComponentProps<typeof Button$1>, 'variant' | 'ref'> {
51
51
  /** Visual style variant. `primary` is Berget-specific. */
@@ -59,8 +59,8 @@ interface ButtonProps extends Omit<React$1.ComponentProps<typeof Button$1>, 'var
59
59
  declare function Button({ className, variant, size, asChild, width, type, ref, children, ...props }: ButtonProps): react_jsx_runtime.JSX.Element;
60
60
 
61
61
  declare const typographyVariants: (props?: ({
62
- variant?: "small" | "xs" | "body" | "code" | "h1" | "h2" | "h3" | "h4" | "h5" | "large" | "mono" | null | undefined;
63
- color?: "default" | "muted" | "dim" | null | undefined;
62
+ variant?: "small" | "caption" | "xs" | "body" | "code" | "h1" | "h2" | "h3" | "h4" | "h5" | "hero" | "large" | "mono" | null | undefined;
63
+ color?: "default" | "primary" | "muted" | "dim" | null | undefined;
64
64
  } & class_variance_authority_types.ClassProp) | undefined) => string;
65
65
  interface TypographyProps extends Omit<React$1.HTMLAttributes<HTMLElement>, 'color'>, VariantProps<typeof typographyVariants> {
66
66
  as?: React$1.ElementType;
@@ -605,63 +605,6 @@ interface FeatureListProps extends React$1.HTMLAttributes<HTMLUListElement> {
605
605
  }
606
606
  declare const FeatureList: React$1.ForwardRefExoticComponent<FeatureListProps & React$1.RefAttributes<HTMLUListElement>>;
607
607
 
608
- interface HeroBlockProps extends React$1.HTMLAttributes<HTMLDivElement> {
609
- /**
610
- * Optional icon for the tagline badge
611
- */
612
- taglineIcon?: LucideIcon;
613
- /**
614
- * Tagline text (appears in badge)
615
- */
616
- tagline?: string;
617
- /**
618
- * Main hero title
619
- */
620
- title: string;
621
- /**
622
- * Hero description
623
- */
624
- description: string;
625
- /**
626
- * Call-to-action buttons
627
- */
628
- actions?: React$1.ReactNode;
629
- }
630
- /**
631
- * Hero Block Component
632
- *
633
- * Full-width hero section with optional tagline, title, description, and CTAs.
634
- * Based on the pattern from why-berget and other landing pages.
635
- *
636
- * **Features:**
637
- * - Tagline badge with optional icon
638
- * - Responsive sizing
639
- * - CTA button slots
640
- *
641
- * **Use Cases:**
642
- * - Page heroes
643
- * - Landing page intros
644
- * - Feature announcements
645
- * - Product showcases
646
- *
647
- * @example
648
- * ```tsx
649
- * <HeroBlock
650
- * tagline="Built for Europe"
651
- * taglineIcon={Shield}
652
- * title="European AI Infrastructure"
653
- * description="Deploy and scale AI models with data residency in Europe"
654
- * actions={
655
- * <>
656
- * <Button size="lg" variant="primary">Get Started</Button>
657
- * <Button size="lg" variant="outline">Learn More</Button>
658
- * </>
659
- * }
660
- * />
661
- * ```
662
- */
663
- declare const HeroBlock: React$1.ForwardRefExoticComponent<HeroBlockProps & React$1.RefAttributes<HTMLDivElement>>;
664
-
665
608
  interface CodeBlockProps {
666
609
  code: string;
667
610
  language?: string;
@@ -729,4 +672,4 @@ interface FogIllustrationProps {
729
672
  }
730
673
  declare const FogIllustration: ({ palette, speed, className }: FogIllustrationProps) => react_jsx_runtime.JSX.Element;
731
674
 
732
- export { Alert, AlertDescription, type AlertDescriptionProps, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, type AlertProps, AlertTitle, type AlertTitleProps, Badge, type BadgeProps, BergetLogo, type BergetLogoProps, Box, type BoxProps, type SpacingScale as BoxSpacingScale, Button, type ButtonProps, COUNTRIES, Card, CardContent, CardDescription, CardFooter, CardHeader, type CardProps, CardTitle, Checkbox, type CheckboxProps, CodeBlock, type CodeBlockProps, Container, type ContainerProps, type Country, CountrySelect, type CountrySelectProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EU_COUNTRY_CODES, FOG_BRAND_PALETTE, FeatureList, type FeatureListProps, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, FogIllustration, type FogIllustrationProps, type FogPalette, Grid, type GridColsScale, type GridProps, type GridRowsScale, type SpacingScale$1 as GridSpacingScale, HeroBlock, type HeroBlockProps, Icon, type IconProps, Input, type InputProps, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, type ItemProps, ItemSeparator, ItemTitle, Label, LanguageSelect, type LanguageSelectOption, type LanguageSelectProps, Link, type LinkProps, List, ListHeader, type ListHeaderProps, ListItem, type ListItemProps, type ListProps, ModelCard, type ModelCardProps, type ModelCategory, type ModelLifecycle, ModelLogo, type ModelLogoProps, type ModelLogoProvider, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuPositioner, NavigationMenuTrigger, Select, type SelectOption, type SelectProps, Switch, type SwitchProps, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, type TerminalExample, TextArea, type TextAreaProps, type Theme, ThemeProvider, type ThemeProviderProps, ThemeToggle, type ThemeToggleProps, Typography, type TypographyProps, WindowFrame, type WindowFrameProps, type WindowTab, alertVariants, badgeVariants, boxVariants, buttonVariants, cardVariants, categoryLabels, checkboxVariants, containerVariants, getCountryByCode, getCountryByName, gridVariants, isEUCountry, linkVariants, navigationMenuTriggerStyle, selectVariants, switchRootVariants, switchThumbVariants, textAreaVariants, typographyVariants, useTheme };
675
+ export { Alert, AlertDescription, type AlertDescriptionProps, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, type AlertProps, AlertTitle, type AlertTitleProps, Badge, type BadgeProps, BergetLogo, type BergetLogoProps, Box, type BoxProps, type SpacingScale as BoxSpacingScale, Button, type ButtonProps, COUNTRIES, Card, CardContent, CardDescription, CardFooter, CardHeader, type CardProps, CardTitle, Checkbox, type CheckboxProps, CodeBlock, type CodeBlockProps, Container, type ContainerProps, type Country, CountrySelect, type CountrySelectProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EU_COUNTRY_CODES, FOG_BRAND_PALETTE, FeatureList, type FeatureListProps, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, FogIllustration, type FogIllustrationProps, type FogPalette, Grid, type GridColsScale, type GridProps, type GridRowsScale, type SpacingScale$1 as GridSpacingScale, Icon, type IconProps, Input, type InputProps, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, type ItemProps, ItemSeparator, ItemTitle, Label, LanguageSelect, type LanguageSelectOption, type LanguageSelectProps, Link, type LinkProps, List, ListHeader, type ListHeaderProps, ListItem, type ListItemProps, type ListProps, ModelCard, type ModelCardProps, type ModelCategory, type ModelLifecycle, ModelLogo, type ModelLogoProps, type ModelLogoProvider, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuPositioner, NavigationMenuTrigger, Select, type SelectOption, type SelectProps, Switch, type SwitchProps, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, type TerminalExample, TextArea, type TextAreaProps, type Theme, ThemeProvider, type ThemeProviderProps, ThemeToggle, type ThemeToggleProps, Typography, type TypographyProps, WindowFrame, type WindowFrameProps, type WindowTab, alertVariants, badgeVariants, boxVariants, buttonVariants, cardVariants, categoryLabels, checkboxVariants, containerVariants, getCountryByCode, getCountryByName, gridVariants, isEUCountry, linkVariants, navigationMenuTriggerStyle, selectVariants, switchRootVariants, switchThumbVariants, textAreaVariants, typographyVariants, useTheme };
package/dist/index.d.ts CHANGED
@@ -45,7 +45,7 @@ declare const buttonVariants: (props?: ({
45
45
  declare function Button$1({ className, variant, size, ...props }: Button$2.Props & VariantProps<typeof buttonVariants>): react_jsx_runtime.JSX.Element;
46
46
 
47
47
  /** Variants exposed by the Berget wrapper. */
48
- type CustomVariant = 'default' | 'primary' | 'destructive' | 'outline' | 'ghost' | 'link';
48
+ type CustomVariant = 'default' | 'primary' | 'destructive' | 'link';
49
49
  /** Props for the Berget Button wrapper. */
50
50
  interface ButtonProps extends Omit<React$1.ComponentProps<typeof Button$1>, 'variant' | 'ref'> {
51
51
  /** Visual style variant. `primary` is Berget-specific. */
@@ -59,8 +59,8 @@ interface ButtonProps extends Omit<React$1.ComponentProps<typeof Button$1>, 'var
59
59
  declare function Button({ className, variant, size, asChild, width, type, ref, children, ...props }: ButtonProps): react_jsx_runtime.JSX.Element;
60
60
 
61
61
  declare const typographyVariants: (props?: ({
62
- variant?: "small" | "xs" | "body" | "code" | "h1" | "h2" | "h3" | "h4" | "h5" | "large" | "mono" | null | undefined;
63
- color?: "default" | "muted" | "dim" | null | undefined;
62
+ variant?: "small" | "caption" | "xs" | "body" | "code" | "h1" | "h2" | "h3" | "h4" | "h5" | "hero" | "large" | "mono" | null | undefined;
63
+ color?: "default" | "primary" | "muted" | "dim" | null | undefined;
64
64
  } & class_variance_authority_types.ClassProp) | undefined) => string;
65
65
  interface TypographyProps extends Omit<React$1.HTMLAttributes<HTMLElement>, 'color'>, VariantProps<typeof typographyVariants> {
66
66
  as?: React$1.ElementType;
@@ -605,63 +605,6 @@ interface FeatureListProps extends React$1.HTMLAttributes<HTMLUListElement> {
605
605
  }
606
606
  declare const FeatureList: React$1.ForwardRefExoticComponent<FeatureListProps & React$1.RefAttributes<HTMLUListElement>>;
607
607
 
608
- interface HeroBlockProps extends React$1.HTMLAttributes<HTMLDivElement> {
609
- /**
610
- * Optional icon for the tagline badge
611
- */
612
- taglineIcon?: LucideIcon;
613
- /**
614
- * Tagline text (appears in badge)
615
- */
616
- tagline?: string;
617
- /**
618
- * Main hero title
619
- */
620
- title: string;
621
- /**
622
- * Hero description
623
- */
624
- description: string;
625
- /**
626
- * Call-to-action buttons
627
- */
628
- actions?: React$1.ReactNode;
629
- }
630
- /**
631
- * Hero Block Component
632
- *
633
- * Full-width hero section with optional tagline, title, description, and CTAs.
634
- * Based on the pattern from why-berget and other landing pages.
635
- *
636
- * **Features:**
637
- * - Tagline badge with optional icon
638
- * - Responsive sizing
639
- * - CTA button slots
640
- *
641
- * **Use Cases:**
642
- * - Page heroes
643
- * - Landing page intros
644
- * - Feature announcements
645
- * - Product showcases
646
- *
647
- * @example
648
- * ```tsx
649
- * <HeroBlock
650
- * tagline="Built for Europe"
651
- * taglineIcon={Shield}
652
- * title="European AI Infrastructure"
653
- * description="Deploy and scale AI models with data residency in Europe"
654
- * actions={
655
- * <>
656
- * <Button size="lg" variant="primary">Get Started</Button>
657
- * <Button size="lg" variant="outline">Learn More</Button>
658
- * </>
659
- * }
660
- * />
661
- * ```
662
- */
663
- declare const HeroBlock: React$1.ForwardRefExoticComponent<HeroBlockProps & React$1.RefAttributes<HTMLDivElement>>;
664
-
665
608
  interface CodeBlockProps {
666
609
  code: string;
667
610
  language?: string;
@@ -729,4 +672,4 @@ interface FogIllustrationProps {
729
672
  }
730
673
  declare const FogIllustration: ({ palette, speed, className }: FogIllustrationProps) => react_jsx_runtime.JSX.Element;
731
674
 
732
- export { Alert, AlertDescription, type AlertDescriptionProps, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, type AlertProps, AlertTitle, type AlertTitleProps, Badge, type BadgeProps, BergetLogo, type BergetLogoProps, Box, type BoxProps, type SpacingScale as BoxSpacingScale, Button, type ButtonProps, COUNTRIES, Card, CardContent, CardDescription, CardFooter, CardHeader, type CardProps, CardTitle, Checkbox, type CheckboxProps, CodeBlock, type CodeBlockProps, Container, type ContainerProps, type Country, CountrySelect, type CountrySelectProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EU_COUNTRY_CODES, FOG_BRAND_PALETTE, FeatureList, type FeatureListProps, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, FogIllustration, type FogIllustrationProps, type FogPalette, Grid, type GridColsScale, type GridProps, type GridRowsScale, type SpacingScale$1 as GridSpacingScale, HeroBlock, type HeroBlockProps, Icon, type IconProps, Input, type InputProps, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, type ItemProps, ItemSeparator, ItemTitle, Label, LanguageSelect, type LanguageSelectOption, type LanguageSelectProps, Link, type LinkProps, List, ListHeader, type ListHeaderProps, ListItem, type ListItemProps, type ListProps, ModelCard, type ModelCardProps, type ModelCategory, type ModelLifecycle, ModelLogo, type ModelLogoProps, type ModelLogoProvider, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuPositioner, NavigationMenuTrigger, Select, type SelectOption, type SelectProps, Switch, type SwitchProps, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, type TerminalExample, TextArea, type TextAreaProps, type Theme, ThemeProvider, type ThemeProviderProps, ThemeToggle, type ThemeToggleProps, Typography, type TypographyProps, WindowFrame, type WindowFrameProps, type WindowTab, alertVariants, badgeVariants, boxVariants, buttonVariants, cardVariants, categoryLabels, checkboxVariants, containerVariants, getCountryByCode, getCountryByName, gridVariants, isEUCountry, linkVariants, navigationMenuTriggerStyle, selectVariants, switchRootVariants, switchThumbVariants, textAreaVariants, typographyVariants, useTheme };
675
+ export { Alert, AlertDescription, type AlertDescriptionProps, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, type AlertProps, AlertTitle, type AlertTitleProps, Badge, type BadgeProps, BergetLogo, type BergetLogoProps, Box, type BoxProps, type SpacingScale as BoxSpacingScale, Button, type ButtonProps, COUNTRIES, Card, CardContent, CardDescription, CardFooter, CardHeader, type CardProps, CardTitle, Checkbox, type CheckboxProps, CodeBlock, type CodeBlockProps, Container, type ContainerProps, type Country, CountrySelect, type CountrySelectProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EU_COUNTRY_CODES, FOG_BRAND_PALETTE, FeatureList, type FeatureListProps, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, FogIllustration, type FogIllustrationProps, type FogPalette, Grid, type GridColsScale, type GridProps, type GridRowsScale, type SpacingScale$1 as GridSpacingScale, Icon, type IconProps, Input, type InputProps, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, type ItemProps, ItemSeparator, ItemTitle, Label, LanguageSelect, type LanguageSelectOption, type LanguageSelectProps, Link, type LinkProps, List, ListHeader, type ListHeaderProps, ListItem, type ListItemProps, type ListProps, ModelCard, type ModelCardProps, type ModelCategory, type ModelLifecycle, ModelLogo, type ModelLogoProps, type ModelLogoProvider, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuPositioner, NavigationMenuTrigger, Select, type SelectOption, type SelectProps, Switch, type SwitchProps, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, type TerminalExample, TextArea, type TextAreaProps, type Theme, ThemeProvider, type ThemeProviderProps, ThemeToggle, type ThemeToggleProps, Typography, type TypographyProps, WindowFrame, type WindowFrameProps, type WindowTab, alertVariants, badgeVariants, boxVariants, buttonVariants, cardVariants, categoryLabels, checkboxVariants, containerVariants, getCountryByCode, getCountryByName, gridVariants, isEUCountry, linkVariants, navigationMenuTriggerStyle, selectVariants, switchRootVariants, switchThumbVariants, textAreaVariants, typographyVariants, useTheme };
package/dist/index.js CHANGED
@@ -102,7 +102,16 @@ var twMerge = extendTailwindMerge({
102
102
  "rounded-berget-lg",
103
103
  "rounded-berget-full"
104
104
  ],
105
- "font-size": ["text-h1", "text-h2", "text-h3", "text-h4", "text-p", "text-mono"]
105
+ "font-size": [
106
+ "text-h1",
107
+ "text-h2",
108
+ "text-h3",
109
+ "text-h4",
110
+ "text-p",
111
+ "text-mono",
112
+ "text-hero",
113
+ "text-caption"
114
+ ]
106
115
  }
107
116
  }
108
117
  });
@@ -253,21 +262,72 @@ function Button({
253
262
 
254
263
  // src/components/button/Button.tsx
255
264
  import { jsx as jsx4 } from "react/jsx-runtime";
265
+ var interactionClasses = cn(
266
+ // Outline-based focus indicator; neutralise the primitive's ring (the
267
+ // ring colour class is left — harmless at width 0).
268
+ "focus-visible:outline-solid focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-berget-button-focus-ring focus-visible:ring-0",
269
+ // Neutralise the primitive's disabled fade; variants apply their own tokens.
270
+ "disabled:pointer-events-none disabled:opacity-100 disabled:cursor-not-allowed",
271
+ // No press movement: same compound selector as the primitive base's 1px
272
+ // active translate so tailwind-merge strips it down to 0.
273
+ "active:not-aria-[haspopup]:translate-y-0"
274
+ );
275
+ var disabledClasses = "disabled:text-berget-button-disabled-fg disabled:shadow-none";
256
276
  function brandVariantClasses(variant) {
257
277
  switch (variant) {
258
278
  case "primary":
259
- return "bg-berget-button-primary-bg text-berget-button-primary-fg shadow-berget-lg hover:bg-berget-button-primary-hover hover:shadow-berget-lg";
279
+ return cn(
280
+ // Flat tinted-glass fill; the alpha carries the state, so no shadow lift.
281
+ "bg-berget-button-primary-bg text-berget-button-primary-fg",
282
+ "hover:bg-berget-button-primary-hover",
283
+ // Pin the foreground on hover — the underlying primitive ghost adds
284
+ // hover:text-foreground, which would override the primary fg token.
285
+ "hover:text-berget-button-primary-fg",
286
+ "active:bg-berget-button-primary-active",
287
+ // Keep the resting (transparent) border on focus — the outline is the indicator.
288
+ "focus-visible:border-transparent",
289
+ disabledClasses,
290
+ "disabled:bg-berget-button-primary-disabled-bg"
291
+ );
260
292
  case "destructive":
261
- 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";
262
- case "outline":
263
- 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";
264
- case "ghost":
265
- return "bg-transparent text-berget-foreground hover:bg-berget-brand-granite-800 hover:text-berget-foreground";
293
+ return cn(
294
+ "bg-berget-button-destructive-bg text-berget-button-destructive-fg",
295
+ "hover:bg-berget-button-destructive-hover",
296
+ // Pin the foreground on hover — the underlying primitive ghost adds
297
+ // hover:text-foreground, which would override the destructive fg token.
298
+ "hover:text-berget-button-destructive-hover-fg",
299
+ "active:bg-berget-button-destructive-active",
300
+ "focus-visible:border-transparent",
301
+ disabledClasses,
302
+ "disabled:bg-berget-button-destructive-disabled-bg"
303
+ );
266
304
  case "link":
267
- return "bg-transparent hover:bg-transparent focus:bg-transparent active:bg-transparent text-berget-button-link-fg underline-offset-4 hover:underline";
305
+ return cn(
306
+ "h-auto bg-transparent p-0 text-berget-button-link-fg underline-offset-4 shadow-none",
307
+ "hover:bg-transparent hover:text-berget-button-link-hover-fg",
308
+ // On press, return to the resting foreground (hover fg otherwise sticks).
309
+ "active:text-berget-button-link-fg",
310
+ "focus:bg-transparent",
311
+ // Neutralise the primitive base's focus-visible:border-ring + ring-3,
312
+ // which land on link too (the primitive merges its cva base under
313
+ // every variant): the outline above is the only focus indicator.
314
+ "focus-visible:border-transparent focus-visible:ring-0",
315
+ "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",
316
+ "disabled:text-berget-button-disabled-fg disabled:no-underline",
317
+ "disabled:opacity-100 disabled:cursor-not-allowed"
318
+ );
268
319
  case "default":
269
320
  default:
270
- 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";
321
+ return cn(
322
+ // Solid granite-800 fill with a granite-700 border on dark surfaces
323
+ // (ink glass in light theme).
324
+ "bg-berget-button-default-bg border-berget-button-default-border text-berget-button-default-fg",
325
+ "hover:bg-berget-button-default-hover",
326
+ "active:bg-berget-button-default-active",
327
+ "focus-visible:border-transparent",
328
+ disabledClasses,
329
+ "disabled:bg-berget-button-default-disabled-bg"
330
+ );
271
331
  }
272
332
  }
273
333
  function primitiveVariant(variant) {
@@ -294,9 +354,16 @@ function Button2({
294
354
  const isLink = variant === "link";
295
355
  const baseClass = cn(
296
356
  !isLink && buttonVariants({ variant: primitiveVariant(variant), size }),
297
- // Berget brand overrides
298
- !isLink && "rounded-full",
357
+ // Berget brand overrides — full-width buttons use the square radius;
358
+ // everything else stays pill-shaped.
359
+ !isLink && (width === "full" ? "rounded-berget-xs" : "rounded-full"),
360
+ // Em-based padding, inline = 2× block — matches the 8px/16px spacing-scale
361
+ // values at the default text-sm (14px) and scales down/up with smaller or
362
+ // larger button text. h-auto drops the primitive's fixed h-* so the
363
+ // vertical paddings take effect.
364
+ !isLink && !isIcon && "py-[0.57em] px-[1.14em] h-auto",
299
365
  brandVariantClasses(variant),
366
+ interactionClasses,
300
367
  !isLink && width === "full" && "w-full",
301
368
  isIcon && "rounded-full shadow-[0px_1px_3px_rgba(0,0,0,0.1),0px_1px_2px_-1px_rgba(0,0,0,0.1)]",
302
369
  className
@@ -324,6 +391,8 @@ var typographyVariants = cva2("", {
324
391
  variant: {
325
392
  // Fluid heading scale — use @theme tokens (clamp-based, 390px → 1440px)
326
393
  h1: "text-h1 font-h1 leading-h1 tracking-h1 text-balance",
394
+ // Hero display — from landing-page /dedicated-inference hero (Ovo, 400, tight display leading)
395
+ hero: "text-hero font-hero leading-hero tracking-hero text-balance font-normal [font-feature-settings:'normal']",
327
396
  h2: "text-h2 font-h2 leading-h2 tracking-h2 text-balance",
328
397
  h3: "text-h3 font-h3 leading-h3 tracking-h3 text-balance",
329
398
  h4: "text-h4 font-h4 leading-h4 tracking-h4 text-balance",
@@ -334,6 +403,8 @@ var typographyVariants = cva2("", {
334
403
  body: "text-p font-p leading-p text-pretty",
335
404
  small: "text-sm font-sm leading-sm text-pretty",
336
405
  xs: "text-xs font-xs leading-xs text-pretty",
406
+ // Caption / overline / eyebrow (DM Sans, Semibold, uppercase)
407
+ caption: "text-caption font-caption leading-caption tracking-caption text-pretty font-semibold uppercase",
337
408
  // Monospaced — use @theme token
338
409
  mono: "text-mono font-mono leading-mono text-pretty",
339
410
  // Inline code / spec labels
@@ -342,7 +413,8 @@ var typographyVariants = cva2("", {
342
413
  color: {
343
414
  default: "text-berget-foreground",
344
415
  muted: "text-berget-muted-foreground",
345
- dim: "text-berget-foreground/65"
416
+ dim: "text-berget-foreground/65",
417
+ primary: "text-berget-primary"
346
418
  }
347
419
  },
348
420
  defaultVariants: {
@@ -351,6 +423,7 @@ var typographyVariants = cva2("", {
351
423
  }
352
424
  });
353
425
  var defaultElementMap = {
426
+ hero: "h1",
354
427
  h1: "h1",
355
428
  h2: "h2",
356
429
  h3: "h3",
@@ -360,6 +433,7 @@ var defaultElementMap = {
360
433
  body: "p",
361
434
  small: "p",
362
435
  xs: "p",
436
+ caption: "span",
363
437
  mono: "p",
364
438
  code: "span"
365
439
  };
@@ -397,7 +471,7 @@ function Card({
397
471
  "data-slot": "card",
398
472
  "data-size": size,
399
473
  className: cn3(
400
- "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",
474
+ "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",
401
475
  className
402
476
  ),
403
477
  ...props
@@ -466,11 +540,11 @@ function CardFooter({ className, ...props }) {
466
540
 
467
541
  // src/components/card/Card.tsx
468
542
  import { jsx as jsx7 } from "react/jsx-runtime";
469
- var cardVariants = cva3("rounded-berget-sm", {
543
+ var cardVariants = cva3("rounded-berget-xs ring-0", {
470
544
  variants: {
471
545
  variant: {
472
- outlined: "bg-transparent border border-berget-border",
473
- filled: "bg-berget-card-filled-bg border border-berget-border"
546
+ outlined: "bg-transparent border border-berget-border-subtle",
547
+ filled: "bg-berget-card-filled-bg border border-berget-border-subtle"
474
548
  },
475
549
  padding: {
476
550
  none: "p-0",
@@ -806,7 +880,7 @@ var ModelCard = React9.forwardRef(
806
880
  {
807
881
  variant: "filled",
808
882
  padding: "none",
809
- 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",
883
+ 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",
810
884
  children: [
811
885
  lifecycle && /* @__PURE__ */ jsx11("div", { className: "absolute top-0 right-0 z-10 overflow-hidden rounded-bl-berget-sm", children: /* @__PURE__ */ jsx11(
812
886
  "div",
@@ -3849,45 +3923,10 @@ var FeatureList = React29.forwardRef(
3849
3923
  );
3850
3924
  FeatureList.displayName = "FeatureList";
3851
3925
 
3852
- // src/components/hero-block/HeroBlock.tsx
3853
- import * as React30 from "react";
3854
- import { jsx as jsx45, jsxs as jsxs25 } from "react/jsx-runtime";
3855
- var HeroBlock = React30.forwardRef(
3856
- ({ className, taglineIcon: TaglineIcon, tagline, title, description, actions, ...props }, ref) => {
3857
- return /* @__PURE__ */ jsx45(
3858
- "div",
3859
- {
3860
- ref,
3861
- className: cn(
3862
- "relative overflow-hidden min-h-[40dvh] flex items-center py-fluid-2xl",
3863
- className
3864
- ),
3865
- ...props,
3866
- children: /* @__PURE__ */ jsx45("div", { className: "mx-auto px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ jsxs25("div", { className: "mx-auto text-center max-w-4xl", children: [
3867
- tagline && /* @__PURE__ */ jsx45(
3868
- Badge,
3869
- {
3870
- variant: "default",
3871
- icon: TaglineIcon ? /* @__PURE__ */ jsx45(Icon, { icon: TaglineIcon, size: 16 }) : void 0,
3872
- iconGap: 2,
3873
- className: "mb-fluid-md",
3874
- children: tagline
3875
- }
3876
- ),
3877
- /* @__PURE__ */ jsx45(Typography, { variant: "h1", className: "mb-fluid-md", children: title }),
3878
- /* @__PURE__ */ jsx45(Typography, { variant: "h3", color: "muted", className: "mb-fluid-lg", children: description }),
3879
- actions && /* @__PURE__ */ jsx45("div", { className: "flex flex-wrap gap-fluid-md justify-center", children: actions })
3880
- ] }) })
3881
- }
3882
- );
3883
- }
3884
- );
3885
- HeroBlock.displayName = "HeroBlock";
3886
-
3887
3926
  // src/components/code-block/CodeBlock.tsx
3888
3927
  import { useState as useState3, useEffect as useEffect2, useCallback as useCallback3 } from "react";
3889
3928
  import { Copy, Check as Check4 } from "lucide-react";
3890
- import { jsx as jsx46, jsxs as jsxs26 } from "react/jsx-runtime";
3929
+ import { jsx as jsx45, jsxs as jsxs25 } from "react/jsx-runtime";
3891
3930
  function CodeBlock({ code, language = "text", title, className }) {
3892
3931
  const [html, setHtml] = useState3(null);
3893
3932
  const [copied, setCopied] = useState3(false);
@@ -3903,42 +3942,42 @@ function CodeBlock({ code, language = "text", title, className }) {
3903
3942
  setCopied(true);
3904
3943
  setTimeout(() => setCopied(false), 2e3);
3905
3944
  }, [code]);
3906
- const copyButton = /* @__PURE__ */ jsx46(
3945
+ const copyButton = /* @__PURE__ */ jsx45(
3907
3946
  "button",
3908
3947
  {
3909
3948
  onClick: handleCopy,
3910
3949
  className: "flex items-center justify-center w-6 h-6 text-berget-muted-foreground hover:text-berget-foreground transition-colors",
3911
3950
  "aria-label": "Copy code",
3912
- children: copied ? /* @__PURE__ */ jsx46(Check4, { className: "w-3.5 h-3.5" }) : /* @__PURE__ */ jsx46(Copy, { className: "w-3.5 h-3.5" })
3951
+ children: copied ? /* @__PURE__ */ jsx45(Check4, { className: "w-3.5 h-3.5" }) : /* @__PURE__ */ jsx45(Copy, { className: "w-3.5 h-3.5" })
3913
3952
  }
3914
3953
  );
3915
- return /* @__PURE__ */ jsxs26(
3954
+ return /* @__PURE__ */ jsxs25(
3916
3955
  "div",
3917
3956
  {
3918
3957
  className: cn(
3919
- "rounded-berget-sm border bg-berget-codeblock-bg border-berget-border backdrop-blur-[12px] relative overflow-hidden isolate",
3958
+ "rounded-berget-xs border bg-berget-codeblock-bg border-berget-border backdrop-blur-[12px] relative overflow-hidden isolate",
3920
3959
  className
3921
3960
  ),
3922
3961
  children: [
3923
- title && /* @__PURE__ */ jsx46("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__ */ jsx46("span", { className: "text-berget-muted-foreground", children: title }) }),
3924
- /* @__PURE__ */ jsx46("div", { className: "absolute right-2 top-2 z-10", children: copyButton }),
3925
- html ? /* @__PURE__ */ jsx46(
3962
+ title && /* @__PURE__ */ jsx45("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__ */ jsx45("span", { className: "text-berget-muted-foreground", children: title }) }),
3963
+ /* @__PURE__ */ jsx45("div", { className: "absolute right-2 top-2 z-10", children: copyButton }),
3964
+ html ? /* @__PURE__ */ jsx45(
3926
3965
  "div",
3927
3966
  {
3928
3967
  className: "[&_.shiki]:!p-4 [&_.shiki]:!m-0 [&_.shiki]:overflow-x-auto [&_.shiki]:!text-sm [&_.shiki]:!leading-relaxed [&_.shiki]:bg-transparent",
3929
3968
  dangerouslySetInnerHTML: { __html: html }
3930
3969
  }
3931
- ) : /* @__PURE__ */ jsx46("pre", { className: "!p-4 !m-0 overflow-x-auto !text-sm !leading-relaxed text-berget-muted-foreground", children: /* @__PURE__ */ jsx46("code", { children: code }) })
3970
+ ) : /* @__PURE__ */ jsx45("pre", { className: "!p-4 !m-0 overflow-x-auto !text-sm !leading-relaxed text-berget-muted-foreground", children: /* @__PURE__ */ jsx45("code", { children: code }) })
3932
3971
  ]
3933
3972
  }
3934
3973
  );
3935
3974
  }
3936
3975
 
3937
3976
  // src/components/window-frame/WindowFrame.tsx
3938
- import * as React31 from "react";
3977
+ import * as React30 from "react";
3939
3978
  import { useState as useState4 } from "react";
3940
- import { jsx as jsx47, jsxs as jsxs27 } from "react/jsx-runtime";
3941
- var WindowFrame = React31.forwardRef(
3979
+ import { jsx as jsx46, jsxs as jsxs26 } from "react/jsx-runtime";
3980
+ var WindowFrame = React30.forwardRef(
3942
3981
  ({ title = "window", tabs, activeTab, onTabChange, children, className, ...props }, ref) => {
3943
3982
  const [internalActive, setInternalActive] = useState4(tabs?.[0]?.id ?? "");
3944
3983
  const currentTab = activeTab ?? internalActive;
@@ -3949,7 +3988,7 @@ var WindowFrame = React31.forwardRef(
3949
3988
  setInternalActive(id);
3950
3989
  }
3951
3990
  };
3952
- return /* @__PURE__ */ jsxs27(
3991
+ return /* @__PURE__ */ jsxs26(
3953
3992
  "div",
3954
3993
  {
3955
3994
  ref,
@@ -3959,13 +3998,13 @@ var WindowFrame = React31.forwardRef(
3959
3998
  ),
3960
3999
  ...props,
3961
4000
  children: [
3962
- /* @__PURE__ */ jsxs27("div", { className: "flex items-center gap-2 px-4 py-3 border-b border-berget-brand-granite-700 bg-berget-brand-granite-900", children: [
3963
- /* @__PURE__ */ jsxs27("div", { className: "flex items-center gap-2 flex-shrink-0", children: [
3964
- /* @__PURE__ */ jsx47("div", { className: "w-3 h-3 rounded-full bg-berget-brand-muscaria-400" }),
3965
- /* @__PURE__ */ jsx47("div", { className: "w-3 h-3 rounded-full bg-berget-brand-chanterelle-200" }),
3966
- /* @__PURE__ */ jsx47("div", { className: "w-3 h-3 rounded-full bg-berget-brand-moss-400" })
4001
+ /* @__PURE__ */ jsxs26("div", { className: "flex items-center gap-2 px-4 py-3 border-b border-berget-brand-granite-700 bg-berget-brand-granite-900", children: [
4002
+ /* @__PURE__ */ jsxs26("div", { className: "flex items-center gap-2 flex-shrink-0", children: [
4003
+ /* @__PURE__ */ jsx46("div", { className: "w-3 h-3 rounded-full bg-berget-brand-muscaria-400" }),
4004
+ /* @__PURE__ */ jsx46("div", { className: "w-3 h-3 rounded-full bg-berget-brand-chanterelle-200" }),
4005
+ /* @__PURE__ */ jsx46("div", { className: "w-3 h-3 rounded-full bg-berget-brand-moss-400" })
3967
4006
  ] }),
3968
- tabs && tabs.length > 0 ? /* @__PURE__ */ jsx47("div", { className: "ml-4 flex items-center gap-1", children: tabs.map((tab) => /* @__PURE__ */ jsx47(
4007
+ tabs && tabs.length > 0 ? /* @__PURE__ */ jsx46("div", { className: "ml-4 flex items-center gap-1", children: tabs.map((tab) => /* @__PURE__ */ jsx46(
3969
4008
  "button",
3970
4009
  {
3971
4010
  type: "button",
@@ -3977,9 +4016,9 @@ var WindowFrame = React31.forwardRef(
3977
4016
  children: tab.label
3978
4017
  },
3979
4018
  tab.id
3980
- )) }) : /* @__PURE__ */ jsx47("span", { className: "ml-4 text-sm font-mono text-berget-brand-moss-400", children: title })
4019
+ )) }) : /* @__PURE__ */ jsx46("span", { className: "ml-4 text-sm font-mono text-berget-brand-moss-400", children: title })
3981
4020
  ] }),
3982
- /* @__PURE__ */ jsx47("div", { children })
4021
+ /* @__PURE__ */ jsx46("div", { children })
3983
4022
  ]
3984
4023
  }
3985
4024
  );
@@ -3989,7 +4028,7 @@ WindowFrame.displayName = "WindowFrame";
3989
4028
 
3990
4029
  // src/components/fog-illustration/FogIllustration.tsx
3991
4030
  import { useEffect as useEffect3, useRef } from "react";
3992
- import { jsx as jsx48 } from "react/jsx-runtime";
4031
+ import { jsx as jsx47 } from "react/jsx-runtime";
3993
4032
  var FOG_BRAND_PALETTE = {
3994
4033
  ink: "#171a1a",
3995
4034
  milk: "#f7f5ed",
@@ -4302,7 +4341,7 @@ var FogIllustration = ({ palette, speed = 1, className }) => {
4302
4341
  gl.deleteFramebuffer(fbo);
4303
4342
  };
4304
4343
  }, []);
4305
- return /* @__PURE__ */ jsx48("canvas", { ref, "aria-hidden": "true", className: cn("size-full", className) });
4344
+ return /* @__PURE__ */ jsx47("canvas", { ref, "aria-hidden": "true", className: cn("size-full", className) });
4306
4345
  };
4307
4346
  export {
4308
4347
  Alert2 as Alert,
@@ -4374,7 +4413,6 @@ export {
4374
4413
  FieldTitle,
4375
4414
  FogIllustration,
4376
4415
  Grid,
4377
- HeroBlock,
4378
4416
  Icon,
4379
4417
  Input2 as Input,
4380
4418
  Item2 as Item,