@airlock-hq/design-system 0.1.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 ADDED
@@ -0,0 +1,13 @@
1
+ # @airlock-hq/design-system
2
+
3
+ Airlock's shared design system package for semantic tokens and React primitives.
4
+
5
+ ## Exports
6
+
7
+ - `@airlock-hq/design-system/react`
8
+ - `@airlock-hq/design-system/theme.css`
9
+ - `@airlock-hq/design-system/styles.css`
10
+
11
+ ## Local usage
12
+
13
+ In this repository, the Tauri app consumes this package via local path aliases.
@@ -0,0 +1 @@
1
+ export * from './react';
package/dist/index.js ADDED
@@ -0,0 +1,50 @@
1
+ import { A as t, a as e, b as o, B as r, c as l, C as i, d as n, e as g, f as D, g as T, h as c, D as S, i as p, j as C, k as d, l as u, m as b, n as B, o as A, p as L, q as V, I as m, L as v, S as x, r as F, s as H, t as I, u as P, v as f, w, x as y, y as G, z as O, E as U, F as h, T as j, G as k, H as q, J as z, K as E, M as J, N as K, O as M, P as N, Q, R, U as W } from "./tooltip-D_CcZ2wZ.js";
2
+ export {
3
+ t as Alert,
4
+ e as AlertDescription,
5
+ o as AlertTitle,
6
+ r as Badge,
7
+ l as Button,
8
+ i as Card,
9
+ n as CardContent,
10
+ g as CardDescription,
11
+ D as CardFooter,
12
+ T as CardHeader,
13
+ c as CardTitle,
14
+ S as Dialog,
15
+ p as DialogClose,
16
+ C as DialogContent,
17
+ d as DialogDescription,
18
+ u as DialogFooter,
19
+ b as DialogHeader,
20
+ B as DialogOverlay,
21
+ A as DialogPortal,
22
+ L as DialogTitle,
23
+ V as DialogTrigger,
24
+ m as Input,
25
+ v as Label,
26
+ x as Select,
27
+ F as SelectContent,
28
+ H as SelectGroup,
29
+ I as SelectItem,
30
+ P as SelectLabel,
31
+ f as SelectScrollDownButton,
32
+ w as SelectScrollUpButton,
33
+ y as SelectSeparator,
34
+ G as SelectTrigger,
35
+ O as SelectValue,
36
+ U as Separator,
37
+ h as StatusDot,
38
+ j as Tabs,
39
+ k as TabsContent,
40
+ q as TabsList,
41
+ z as TabsTrigger,
42
+ E as Textarea,
43
+ J as Tooltip,
44
+ K as TooltipContent,
45
+ M as TooltipProvider,
46
+ N as TooltipTrigger,
47
+ Q as badgeVariants,
48
+ R as buttonVariants,
49
+ W as statusDotVariants
50
+ };
@@ -0,0 +1,8 @@
1
+ import { VariantProps } from 'class-variance-authority';
2
+ import * as React from 'react';
3
+ declare const Alert: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & VariantProps<(props?: ({
4
+ variant?: "default" | "danger" | "destructive" | "warning" | null | undefined;
5
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string> & React.RefAttributes<HTMLDivElement>>;
6
+ declare const AlertTitle: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLHeadingElement> & React.RefAttributes<HTMLParagraphElement>>;
7
+ declare const AlertDescription: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLParagraphElement> & React.RefAttributes<HTMLParagraphElement>>;
8
+ export { Alert, AlertTitle, AlertDescription };
@@ -0,0 +1,9 @@
1
+ import { VariantProps } from 'class-variance-authority';
2
+ import * as React from 'react';
3
+ declare const badgeVariants: (props?: ({
4
+ variant?: "default" | "danger" | "destructive" | "warning" | "signal" | "secondary" | "outline" | "success" | null | undefined;
5
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string;
6
+ export interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {
7
+ }
8
+ declare function Badge({ className, variant, ...props }: BadgeProps): import("react/jsx-runtime").JSX.Element;
9
+ export { Badge, badgeVariants };
@@ -0,0 +1,11 @@
1
+ import { VariantProps } from 'class-variance-authority';
2
+ import * as React from 'react';
3
+ declare const buttonVariants: (props?: ({
4
+ variant?: "default" | "danger" | "destructive" | "link" | "signal" | "secondary" | "outline" | "ghost" | null | undefined;
5
+ size?: "default" | "sm" | "lg" | "icon" | null | undefined;
6
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string;
7
+ export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
8
+ asChild?: boolean;
9
+ }
10
+ declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
11
+ export { Button, buttonVariants };
@@ -0,0 +1,8 @@
1
+ import * as React from 'react';
2
+ declare const Card: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
3
+ declare const CardHeader: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
4
+ declare const CardTitle: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLHeadingElement> & React.RefAttributes<HTMLParagraphElement>>;
5
+ declare const CardDescription: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLParagraphElement> & React.RefAttributes<HTMLParagraphElement>>;
6
+ declare const CardContent: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
7
+ declare const CardFooter: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
8
+ export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent };
@@ -0,0 +1,19 @@
1
+ import * as React from 'react';
2
+ import * as DialogPrimitive from '@radix-ui/react-dialog';
3
+ declare const Dialog: React.FC<DialogPrimitive.DialogProps>;
4
+ declare const DialogTrigger: React.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
5
+ declare const DialogPortal: React.FC<DialogPrimitive.DialogPortalProps>;
6
+ declare const DialogClose: React.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;
7
+ declare const DialogOverlay: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
8
+ declare const DialogContent: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
9
+ declare const DialogHeader: {
10
+ ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
11
+ displayName: string;
12
+ };
13
+ declare const DialogFooter: {
14
+ ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
15
+ displayName: string;
16
+ };
17
+ declare const DialogTitle: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogTitleProps & React.RefAttributes<HTMLHeadingElement>, "ref"> & React.RefAttributes<HTMLHeadingElement>>;
18
+ declare const DialogDescription: React.ForwardRefExoticComponent<Omit<DialogPrimitive.DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>, "ref"> & React.RefAttributes<HTMLParagraphElement>>;
19
+ export { Dialog, DialogPortal, DialogOverlay, DialogTrigger, DialogClose, DialogContent, DialogHeader, DialogFooter, DialogTitle, DialogDescription, };
@@ -0,0 +1,13 @@
1
+ export * from './alert';
2
+ export * from './badge';
3
+ export * from './button';
4
+ export * from './card';
5
+ export * from './dialog';
6
+ export * from './input';
7
+ export * from './label';
8
+ export * from './select';
9
+ export * from './separator';
10
+ export * from './status-dot';
11
+ export * from './tabs';
12
+ export * from './textarea';
13
+ export * from './tooltip';
@@ -0,0 +1,3 @@
1
+ import * as React from 'react';
2
+ declare const Input: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref"> & React.RefAttributes<HTMLInputElement>>;
3
+ export { Input };
@@ -0,0 +1,5 @@
1
+ import { VariantProps } from 'class-variance-authority';
2
+ import * as React from 'react';
3
+ import * as LabelPrimitive from '@radix-ui/react-label';
4
+ declare const Label: React.ForwardRefExoticComponent<Omit<LabelPrimitive.LabelProps & React.RefAttributes<HTMLLabelElement>, "ref"> & VariantProps<(props?: import('class-variance-authority/types').ClassProp | undefined) => string> & React.RefAttributes<HTMLLabelElement>>;
5
+ export { Label };
@@ -0,0 +1,13 @@
1
+ import * as React from 'react';
2
+ import * as SelectPrimitive from '@radix-ui/react-select';
3
+ declare const Select: React.FC<SelectPrimitive.SelectProps>;
4
+ declare const SelectGroup: React.ForwardRefExoticComponent<SelectPrimitive.SelectGroupProps & React.RefAttributes<HTMLDivElement>>;
5
+ declare const SelectValue: React.ForwardRefExoticComponent<SelectPrimitive.SelectValueProps & React.RefAttributes<HTMLSpanElement>>;
6
+ declare const SelectTrigger: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
7
+ declare const SelectScrollUpButton: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollUpButtonProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
8
+ declare const SelectScrollDownButton: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollDownButtonProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
9
+ declare const SelectContent: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
10
+ declare const SelectLabel: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectLabelProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
11
+ declare const SelectItem: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
12
+ declare const SelectSeparator: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectSeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
13
+ export { Select, SelectGroup, SelectValue, SelectTrigger, SelectContent, SelectLabel, SelectItem, SelectSeparator, SelectScrollUpButton, SelectScrollDownButton, };
@@ -0,0 +1,4 @@
1
+ import * as React from 'react';
2
+ import * as SeparatorPrimitive from '@radix-ui/react-separator';
3
+ declare const Separator: React.ForwardRefExoticComponent<Omit<SeparatorPrimitive.SeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
4
+ export { Separator };
@@ -0,0 +1,11 @@
1
+ import { VariantProps } from 'class-variance-authority';
2
+ import * as React from 'react';
3
+ declare const statusDotVariants: (props?: ({
4
+ variant?: "danger" | "warning" | "signal" | "success" | "muted" | null | undefined;
5
+ size?: "sm" | "md" | null | undefined;
6
+ pulse?: boolean | null | undefined;
7
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string;
8
+ export interface StatusDotProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof statusDotVariants> {
9
+ }
10
+ declare function StatusDot({ className, variant, size, pulse, ...props }: StatusDotProps): import("react/jsx-runtime").JSX.Element;
11
+ export { StatusDot, statusDotVariants };
@@ -0,0 +1,12 @@
1
+ import { VariantProps } from 'class-variance-authority';
2
+ import * as React from 'react';
3
+ import * as TabsPrimitive from '@radix-ui/react-tabs';
4
+ declare const Tabs: React.ForwardRefExoticComponent<TabsPrimitive.TabsProps & React.RefAttributes<HTMLDivElement>>;
5
+ declare const TabsList: React.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsListProps & React.RefAttributes<HTMLDivElement>, "ref"> & VariantProps<(props?: ({
6
+ variant?: "default" | "line" | null | undefined;
7
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string> & React.RefAttributes<HTMLDivElement>>;
8
+ declare const TabsTrigger: React.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & VariantProps<(props?: ({
9
+ variant?: "default" | "line" | null | undefined;
10
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string> & React.RefAttributes<HTMLButtonElement>>;
11
+ declare const TabsContent: React.ForwardRefExoticComponent<Omit<TabsPrimitive.TabsContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
12
+ export { Tabs, TabsList, TabsTrigger, TabsContent };
@@ -0,0 +1,3 @@
1
+ import * as React from 'react';
2
+ declare const Textarea: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.TextareaHTMLAttributes<HTMLTextAreaElement>, HTMLTextAreaElement>, "ref"> & React.RefAttributes<HTMLTextAreaElement>>;
3
+ export { Textarea };
@@ -0,0 +1,7 @@
1
+ import * as React from 'react';
2
+ import * as TooltipPrimitive from '@radix-ui/react-tooltip';
3
+ declare const TooltipProvider: React.FC<TooltipPrimitive.TooltipProviderProps>;
4
+ declare const Tooltip: React.FC<TooltipPrimitive.TooltipProps>;
5
+ declare const TooltipTrigger: React.ForwardRefExoticComponent<TooltipPrimitive.TooltipTriggerProps & React.RefAttributes<HTMLButtonElement>>;
6
+ declare const TooltipContent: React.ForwardRefExoticComponent<Omit<TooltipPrimitive.TooltipContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
7
+ export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };
package/dist/react.js ADDED
@@ -0,0 +1,50 @@
1
+ import { A as t, a as e, b as o, B as r, c as l, C as i, d as n, e as g, f as D, g as T, h as c, D as S, i as p, j as C, k as d, l as u, m as b, n as B, o as A, p as L, q as V, I as m, L as v, S as x, r as F, s as H, t as I, u as P, v as f, w, x as y, y as G, z as O, E as U, F as h, T as j, G as k, H as q, J as z, K as E, M as J, N as K, O as M, P as N, Q, R, U as W } from "./tooltip-D_CcZ2wZ.js";
2
+ export {
3
+ t as Alert,
4
+ e as AlertDescription,
5
+ o as AlertTitle,
6
+ r as Badge,
7
+ l as Button,
8
+ i as Card,
9
+ n as CardContent,
10
+ g as CardDescription,
11
+ D as CardFooter,
12
+ T as CardHeader,
13
+ c as CardTitle,
14
+ S as Dialog,
15
+ p as DialogClose,
16
+ C as DialogContent,
17
+ d as DialogDescription,
18
+ u as DialogFooter,
19
+ b as DialogHeader,
20
+ B as DialogOverlay,
21
+ A as DialogPortal,
22
+ L as DialogTitle,
23
+ V as DialogTrigger,
24
+ m as Input,
25
+ v as Label,
26
+ x as Select,
27
+ F as SelectContent,
28
+ H as SelectGroup,
29
+ I as SelectItem,
30
+ P as SelectLabel,
31
+ f as SelectScrollDownButton,
32
+ w as SelectScrollUpButton,
33
+ y as SelectSeparator,
34
+ G as SelectTrigger,
35
+ O as SelectValue,
36
+ U as Separator,
37
+ h as StatusDot,
38
+ j as Tabs,
39
+ k as TabsContent,
40
+ q as TabsList,
41
+ z as TabsTrigger,
42
+ E as Textarea,
43
+ J as Tooltip,
44
+ K as TooltipContent,
45
+ M as TooltipProvider,
46
+ N as TooltipTrigger,
47
+ Q as badgeVariants,
48
+ R as buttonVariants,
49
+ W as statusDotVariants
50
+ };
package/dist/theme.css ADDED
@@ -0,0 +1,69 @@
1
+ @import 'tw-animate-css';
2
+ @import './tokens.css';
3
+
4
+ @theme {
5
+ --font-sans: var(--font-sans);
6
+ --font-mono: var(--font-mono);
7
+
8
+ --text-display: var(--text-display);
9
+ --text-display--line-height: var(--text-display-line-height);
10
+ --text-display--letter-spacing: var(--text-display-letter-spacing);
11
+ --text-h1: var(--text-h1);
12
+ --text-h1--line-height: var(--text-h1-line-height);
13
+ --text-h2: var(--text-h2);
14
+ --text-h2--line-height: var(--text-h2-line-height);
15
+ --text-body: var(--text-body);
16
+ --text-body--line-height: var(--text-body-line-height);
17
+ --text-small: var(--text-small);
18
+ --text-small--line-height: var(--text-small-line-height);
19
+ --text-micro: var(--text-micro);
20
+ --text-micro--line-height: var(--text-micro-line-height);
21
+ --text-micro--letter-spacing: var(--text-micro-letter-spacing);
22
+
23
+ --color-background: hsl(var(--background));
24
+ --color-surface: hsl(var(--surface));
25
+ --color-surface-elevated: hsl(var(--surface-elevated));
26
+ --color-foreground: hsl(var(--foreground));
27
+ --color-foreground-muted: hsl(var(--foreground-muted));
28
+ --color-border: hsl(var(--border));
29
+ --color-border-subtle: hsl(var(--border-subtle));
30
+ --color-signal: hsl(var(--signal));
31
+ --color-signal-subtle: hsl(var(--signal-subtle));
32
+ --color-signal-glow: hsl(var(--signal-glow));
33
+ --color-signal-active: hsl(var(--signal-active));
34
+ --color-signal-focus: hsl(var(--signal-focus));
35
+ --color-signal-attention: hsl(var(--signal-attention));
36
+ --color-success: hsl(var(--success));
37
+ --color-warning: hsl(var(--warning));
38
+ --color-danger: hsl(var(--danger));
39
+ --color-destructive: hsl(var(--danger));
40
+ --color-ring: hsl(var(--ring));
41
+ --color-atmosphere-orbit-line: hsl(var(--atmosphere-orbit-line));
42
+ --color-terminal: hsl(var(--terminal));
43
+ --color-terminal-foreground: hsl(var(--terminal-foreground));
44
+ --color-terminal-muted: hsl(var(--terminal-muted));
45
+ --color-terminal-border: hsl(var(--terminal-border));
46
+
47
+ --radius-lg: var(--radius);
48
+ --radius-md: calc(var(--radius) - 2px);
49
+ --radius-sm: calc(var(--radius) - 4px);
50
+
51
+ @keyframes accordion-down {
52
+ from {
53
+ height: 0;
54
+ }
55
+ to {
56
+ height: var(--radix-accordion-content-height);
57
+ }
58
+ }
59
+ @keyframes accordion-up {
60
+ from {
61
+ height: var(--radix-accordion-content-height);
62
+ }
63
+ to {
64
+ height: 0;
65
+ }
66
+ }
67
+ --animate-accordion-down: accordion-down 0.2s ease-out;
68
+ --animate-accordion-up: accordion-up 0.2s ease-out;
69
+ }
@@ -0,0 +1,72 @@
1
+ @import '@fontsource-variable/inter';
2
+ @import '@fontsource-variable/jetbrains-mono';
3
+
4
+ :root {
5
+ --radius: 0.625rem;
6
+
7
+ /* Typography */
8
+ --font-sans:
9
+ 'Inter Variable', Inter, ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, Arial, 'Apple Color Emoji',
10
+ 'Segoe UI Emoji';
11
+ --font-mono:
12
+ 'JetBrains Mono Variable', 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
13
+ 'Liberation Mono', 'Courier New', monospace;
14
+
15
+ /* Type scale */
16
+ --text-display: 3rem;
17
+ --text-display-line-height: 3.5rem;
18
+ --text-display-letter-spacing: -0.02em;
19
+ --text-h1: 2rem;
20
+ --text-h1-line-height: 2.5rem;
21
+ --text-h2: 1.5rem;
22
+ --text-h2-line-height: 2rem;
23
+ --text-body: 1rem;
24
+ --text-body-line-height: 1.5rem;
25
+ --text-small: 0.875rem;
26
+ --text-small-line-height: 1.25rem;
27
+ --text-micro: 0.75rem;
28
+ --text-micro-line-height: 1rem;
29
+ --text-micro-letter-spacing: 0.08em;
30
+
31
+ /* Surfaces (cooled for NASA lab vibe) */
32
+ --background: 0 0% 100%;
33
+ --surface: 220 25% 98%;
34
+ --surface-elevated: 220 25% 96%;
35
+
36
+ /* Text */
37
+ --foreground: 220 30% 10%;
38
+ --foreground-muted: 220 15% 45%;
39
+
40
+ /* Borders */
41
+ --border: 220 20% 88%;
42
+ --border-subtle: 220 20% 92%;
43
+
44
+ /* Orbital violet signal */
45
+ --signal: 250 55% 55%;
46
+ --signal-subtle: 250 60% 96%;
47
+ --signal-glow: 250 70% 65%;
48
+
49
+ /* Signal state variants */
50
+ --signal-active: 250 55% 55%;
51
+ --signal-focus: 250 55% 55%;
52
+ --signal-attention: 250 60% 50%;
53
+
54
+ /* Status */
55
+ --success: 145 60% 40%;
56
+ --warning: 38 90% 50%;
57
+ --danger: 0 70% 50%;
58
+
59
+ /* Focus */
60
+ --ring: 250 55% 55%;
61
+
62
+ /* Atmosphere (landing / decorative layers) */
63
+ --atmosphere-orbit-line: 220 20% 90%;
64
+ --atmosphere-glow-opacity: 0.08;
65
+ --atmosphere-particle-opacity: 0.12;
66
+
67
+ /* Log/terminal */
68
+ --terminal: 220 20% 9%;
69
+ --terminal-foreground: 220 15% 92%;
70
+ --terminal-muted: 220 15% 16%;
71
+ --terminal-border: 220 15% 22%;
72
+ }
@@ -0,0 +1,426 @@
1
+ import { jsx as r, jsxs as g } from "react/jsx-runtime";
2
+ import * as o from "react";
3
+ import { cva as c } from "class-variance-authority";
4
+ import { Slot as w } from "@radix-ui/react-slot";
5
+ import * as d from "@radix-ui/react-dialog";
6
+ import { X as N, ChevronDown as m, ChevronUp as R, Check as C } from "lucide-react";
7
+ import * as p from "@radix-ui/react-label";
8
+ import * as i from "@radix-ui/react-select";
9
+ import * as b from "@radix-ui/react-separator";
10
+ import * as f from "@radix-ui/react-tabs";
11
+ import * as u from "@radix-ui/react-tooltip";
12
+ import { clsx as T } from "clsx";
13
+ import { twMerge as D } from "tailwind-merge";
14
+ function s(...e) {
15
+ return D(T(e));
16
+ }
17
+ const S = c(
18
+ "relative w-full rounded-lg border px-4 py-3 text-sm [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground [&>svg~*]:pl-7",
19
+ {
20
+ variants: {
21
+ variant: {
22
+ default: "bg-background text-foreground",
23
+ danger: "border-danger/30 bg-danger/5 text-danger [&>svg]:text-danger",
24
+ destructive: "border-danger/30 bg-danger/5 text-danger [&>svg]:text-danger",
25
+ warning: "border-warning/30 bg-warning/10 text-warning [&>svg]:text-warning"
26
+ }
27
+ },
28
+ defaultVariants: {
29
+ variant: "default"
30
+ }
31
+ }
32
+ ), k = o.forwardRef(({ className: e, variant: a, ...t }, n) => /* @__PURE__ */ r("div", { ref: n, role: "alert", className: s(S({ variant: a }), e), ...t }));
33
+ k.displayName = "Alert";
34
+ const V = o.forwardRef(
35
+ ({ className: e, ...a }, t) => /* @__PURE__ */ r("h5", { ref: t, className: s("mb-1 leading-none font-medium tracking-tight", e), ...a })
36
+ );
37
+ V.displayName = "AlertTitle";
38
+ const z = o.forwardRef(
39
+ ({ className: e, ...a }, t) => /* @__PURE__ */ r("div", { ref: t, className: s("text-sm [&_p]:leading-relaxed", e), ...a })
40
+ );
41
+ z.displayName = "AlertDescription";
42
+ const P = c(
43
+ "inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2",
44
+ {
45
+ variants: {
46
+ variant: {
47
+ default: "border-border-subtle bg-surface text-foreground hover:bg-surface-elevated",
48
+ signal: "border-transparent bg-signal-subtle text-signal hover:bg-signal-subtle/70",
49
+ secondary: "border-transparent bg-surface-elevated text-foreground hover:bg-surface",
50
+ danger: "border-transparent bg-danger/10 text-danger hover:bg-danger/20",
51
+ destructive: "border-transparent bg-danger/10 text-danger hover:bg-danger/20",
52
+ outline: "text-foreground",
53
+ success: "border-transparent bg-success/10 text-success hover:bg-success/20",
54
+ warning: "border-transparent bg-warning/10 text-warning hover:bg-warning/20"
55
+ }
56
+ },
57
+ defaultVariants: {
58
+ variant: "default"
59
+ }
60
+ }
61
+ );
62
+ function be({ className: e, variant: a, ...t }) {
63
+ return /* @__PURE__ */ r("div", { className: s(P({ variant: a }), e), ...t });
64
+ }
65
+ const j = c(
66
+ "inline-flex cursor-pointer items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
67
+ {
68
+ variants: {
69
+ variant: {
70
+ default: "bg-surface text-foreground hover:bg-surface-elevated",
71
+ signal: "border border-border bg-background text-foreground hover:border-signal hover:shadow-[0_0_12px_hsl(var(--signal-glow)/0.3)] hover:text-signal",
72
+ danger: "bg-danger text-background hover:opacity-90",
73
+ destructive: "bg-danger text-background hover:opacity-90",
74
+ outline: "border border-border-subtle bg-background hover:bg-surface hover:text-foreground",
75
+ secondary: "bg-surface-elevated text-foreground hover:bg-surface",
76
+ ghost: "hover:bg-surface-elevated hover:text-foreground",
77
+ link: "text-signal underline-offset-4 hover:underline"
78
+ },
79
+ size: {
80
+ default: "h-10 px-4 py-2",
81
+ sm: "h-9 rounded-md px-3",
82
+ lg: "h-11 rounded-md px-8",
83
+ icon: "h-10 w-10"
84
+ }
85
+ },
86
+ defaultVariants: {
87
+ variant: "default",
88
+ size: "default"
89
+ }
90
+ }
91
+ ), B = o.forwardRef(
92
+ ({ className: e, variant: a, size: t, asChild: n = !1, ...l }, y) => /* @__PURE__ */ r(n ? w : "button", { className: s(j({ variant: a, size: t, className: e })), ref: y, ...l })
93
+ );
94
+ B.displayName = "Button";
95
+ const I = o.forwardRef(({ className: e, ...a }, t) => /* @__PURE__ */ r(
96
+ "div",
97
+ {
98
+ ref: t,
99
+ className: s("border-border-subtle bg-surface text-foreground rounded-lg border shadow-xs", e),
100
+ ...a
101
+ }
102
+ ));
103
+ I.displayName = "Card";
104
+ const L = o.forwardRef(
105
+ ({ className: e, ...a }, t) => /* @__PURE__ */ r("div", { ref: t, className: s("flex flex-col space-y-1.5 p-6", e), ...a })
106
+ );
107
+ L.displayName = "CardHeader";
108
+ const A = o.forwardRef(
109
+ ({ className: e, ...a }, t) => /* @__PURE__ */ r("h3", { ref: t, className: s("text-2xl leading-none font-semibold tracking-tight", e), ...a })
110
+ );
111
+ A.displayName = "CardTitle";
112
+ const F = o.forwardRef(
113
+ ({ className: e, ...a }, t) => /* @__PURE__ */ r("p", { ref: t, className: s("text-foreground-muted text-sm", e), ...a })
114
+ );
115
+ F.displayName = "CardDescription";
116
+ const H = o.forwardRef(
117
+ ({ className: e, ...a }, t) => /* @__PURE__ */ r("div", { ref: t, className: s("p-6 pt-0", e), ...a })
118
+ );
119
+ H.displayName = "CardContent";
120
+ const U = o.forwardRef(
121
+ ({ className: e, ...a }, t) => /* @__PURE__ */ r("div", { ref: t, className: s("flex items-center p-6 pt-0", e), ...a })
122
+ );
123
+ U.displayName = "CardFooter";
124
+ const xe = d.Root, ve = d.Trigger, O = d.Portal, he = d.Close, x = o.forwardRef(({ className: e, ...a }, t) => /* @__PURE__ */ r(
125
+ d.Overlay,
126
+ {
127
+ ref: t,
128
+ className: s(
129
+ "bg-foreground/25 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50",
130
+ e
131
+ ),
132
+ ...a
133
+ }
134
+ ));
135
+ x.displayName = d.Overlay.displayName;
136
+ const _ = o.forwardRef(({ className: e, children: a, ...t }, n) => /* @__PURE__ */ g(O, { children: [
137
+ /* @__PURE__ */ r(x, {}),
138
+ /* @__PURE__ */ g(
139
+ d.Content,
140
+ {
141
+ ref: n,
142
+ className: s(
143
+ "border-border-subtle bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed top-[50%] left-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200",
144
+ e
145
+ ),
146
+ ...t,
147
+ children: [
148
+ a,
149
+ /* @__PURE__ */ g(d.Close, { className: "ring-offset-background focus:ring-ring data-[state=open]:bg-surface-elevated data-[state=open]:text-foreground-muted absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none", children: [
150
+ /* @__PURE__ */ r(N, { className: "h-4 w-4" }),
151
+ /* @__PURE__ */ r("span", { className: "sr-only", children: "Close" })
152
+ ] })
153
+ ]
154
+ }
155
+ )
156
+ ] }));
157
+ _.displayName = d.Content.displayName;
158
+ const G = ({ className: e, ...a }) => /* @__PURE__ */ r("div", { className: s("flex flex-col space-y-1.5 text-center sm:text-left", e), ...a });
159
+ G.displayName = "DialogHeader";
160
+ const M = ({ className: e, ...a }) => /* @__PURE__ */ r("div", { className: s("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", e), ...a });
161
+ M.displayName = "DialogFooter";
162
+ const q = o.forwardRef(({ className: e, ...a }, t) => /* @__PURE__ */ r(
163
+ d.Title,
164
+ {
165
+ ref: t,
166
+ className: s("text-lg leading-none font-semibold tracking-tight", e),
167
+ ...a
168
+ }
169
+ ));
170
+ q.displayName = d.Title.displayName;
171
+ const E = o.forwardRef(({ className: e, ...a }, t) => /* @__PURE__ */ r(d.Description, { ref: t, className: s("text-foreground-muted text-sm", e), ...a }));
172
+ E.displayName = d.Description.displayName;
173
+ const J = o.forwardRef(
174
+ ({ className: e, type: a, ...t }, n) => /* @__PURE__ */ r(
175
+ "input",
176
+ {
177
+ type: a,
178
+ className: s(
179
+ "border-border-subtle bg-background file:text-foreground placeholder:text-foreground-muted focus-visible:ring-ring flex h-9 w-full rounded-md border px-3 py-1 text-base shadow-xs transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:ring-1 focus-visible:outline-hidden disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
180
+ e
181
+ ),
182
+ ref: n,
183
+ ...t
184
+ }
185
+ )
186
+ );
187
+ J.displayName = "Input";
188
+ const K = c("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"), Q = o.forwardRef(({ className: e, ...a }, t) => /* @__PURE__ */ r(p.Root, { ref: t, className: s(K(), e), ...a }));
189
+ Q.displayName = p.Root.displayName;
190
+ const ye = i.Root, we = i.Group, Ne = i.Value, X = o.forwardRef(({ className: e, children: a, ...t }, n) => /* @__PURE__ */ g(
191
+ i.Trigger,
192
+ {
193
+ ref: n,
194
+ className: s(
195
+ "border-border-subtle bg-background ring-offset-background focus:ring-ring data-[placeholder]:text-foreground-muted flex h-9 w-full items-center justify-between rounded-md border px-3 py-2 text-sm whitespace-nowrap shadow-xs focus:ring-1 focus:outline-hidden disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
196
+ e
197
+ ),
198
+ ...t,
199
+ children: [
200
+ a,
201
+ /* @__PURE__ */ r(i.Icon, { asChild: !0, children: /* @__PURE__ */ r(m, { className: "h-4 w-4 opacity-50" }) })
202
+ ]
203
+ }
204
+ ));
205
+ X.displayName = i.Trigger.displayName;
206
+ const v = o.forwardRef(({ className: e, ...a }, t) => /* @__PURE__ */ r(
207
+ i.ScrollUpButton,
208
+ {
209
+ ref: t,
210
+ className: s("flex cursor-default items-center justify-center py-1", e),
211
+ ...a,
212
+ children: /* @__PURE__ */ r(R, { className: "h-4 w-4" })
213
+ }
214
+ ));
215
+ v.displayName = i.ScrollUpButton.displayName;
216
+ const h = o.forwardRef(({ className: e, ...a }, t) => /* @__PURE__ */ r(
217
+ i.ScrollDownButton,
218
+ {
219
+ ref: t,
220
+ className: s("flex cursor-default items-center justify-center py-1", e),
221
+ ...a,
222
+ children: /* @__PURE__ */ r(m, { className: "h-4 w-4" })
223
+ }
224
+ ));
225
+ h.displayName = i.ScrollDownButton.displayName;
226
+ const W = o.forwardRef(({ className: e, children: a, position: t = "popper", ...n }, l) => /* @__PURE__ */ r(i.Portal, { children: /* @__PURE__ */ g(
227
+ i.Content,
228
+ {
229
+ ref: l,
230
+ className: s(
231
+ "border-border-subtle bg-surface-elevated text-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 relative z-50 max-h-[--radix-select-content-available-height] min-w-[8rem] origin-[--radix-select-content-transform-origin] overflow-x-hidden overflow-y-auto rounded-md border shadow-md",
232
+ t === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
233
+ e
234
+ ),
235
+ position: t,
236
+ ...n,
237
+ children: [
238
+ /* @__PURE__ */ r(v, {}),
239
+ /* @__PURE__ */ r(
240
+ i.Viewport,
241
+ {
242
+ className: s(
243
+ "p-1",
244
+ t === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"
245
+ ),
246
+ children: a
247
+ }
248
+ ),
249
+ /* @__PURE__ */ r(h, {})
250
+ ]
251
+ }
252
+ ) }));
253
+ W.displayName = i.Content.displayName;
254
+ const Y = o.forwardRef(({ className: e, ...a }, t) => /* @__PURE__ */ r(i.Label, { ref: t, className: s("px-2 py-1.5 text-sm font-semibold", e), ...a }));
255
+ Y.displayName = i.Label.displayName;
256
+ const Z = o.forwardRef(({ className: e, children: a, ...t }, n) => /* @__PURE__ */ g(
257
+ i.Item,
258
+ {
259
+ ref: n,
260
+ className: s(
261
+ "focus:bg-surface focus:text-foreground relative flex w-full cursor-default items-center rounded-xs py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
262
+ e
263
+ ),
264
+ ...t,
265
+ children: [
266
+ /* @__PURE__ */ r("span", { className: "absolute right-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ r(i.ItemIndicator, { children: /* @__PURE__ */ r(C, { className: "h-4 w-4" }) }) }),
267
+ /* @__PURE__ */ r(i.ItemText, { children: a })
268
+ ]
269
+ }
270
+ ));
271
+ Z.displayName = i.Item.displayName;
272
+ const $ = o.forwardRef(({ className: e, ...a }, t) => /* @__PURE__ */ r(i.Separator, { ref: t, className: s("bg-border-subtle -mx-1 my-1 h-px", e), ...a }));
273
+ $.displayName = i.Separator.displayName;
274
+ const ee = o.forwardRef(({ className: e, orientation: a = "horizontal", decorative: t = !0, ...n }, l) => /* @__PURE__ */ r(
275
+ b.Root,
276
+ {
277
+ ref: l,
278
+ decorative: t,
279
+ orientation: a,
280
+ className: s("bg-border shrink-0", a === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]", e),
281
+ ...n
282
+ }
283
+ ));
284
+ ee.displayName = b.Root.displayName;
285
+ const ae = c("shrink-0 rounded-full", {
286
+ variants: {
287
+ variant: {
288
+ success: "bg-success",
289
+ danger: "bg-danger",
290
+ warning: "bg-warning",
291
+ signal: "bg-signal",
292
+ muted: "bg-foreground-muted"
293
+ },
294
+ size: {
295
+ sm: "h-1.5 w-1.5",
296
+ md: "h-2 w-2"
297
+ },
298
+ pulse: {
299
+ true: "animate-pulse",
300
+ false: ""
301
+ }
302
+ },
303
+ defaultVariants: {
304
+ variant: "muted",
305
+ size: "sm",
306
+ pulse: !1
307
+ }
308
+ });
309
+ function Re({ className: e, variant: a, size: t, pulse: n, ...l }) {
310
+ return /* @__PURE__ */ r("div", { className: s(ae({ variant: a, size: t, pulse: n }), e), ...l });
311
+ }
312
+ const Ce = f.Root, te = c("inline-flex items-center justify-center", {
313
+ variants: {
314
+ variant: {
315
+ default: "h-9 rounded-lg bg-surface p-1 text-foreground-muted",
316
+ line: "h-auto gap-4 border-b border-border bg-transparent p-0 text-foreground-muted"
317
+ }
318
+ },
319
+ defaultVariants: {
320
+ variant: "default"
321
+ }
322
+ }), re = o.forwardRef(({ className: e, variant: a, ...t }, n) => /* @__PURE__ */ r(f.List, { ref: n, className: s(te({ variant: a }), e), ...t }));
323
+ re.displayName = f.List.displayName;
324
+ const se = c(
325
+ "inline-flex cursor-pointer items-center justify-center whitespace-nowrap text-sm font-medium ring-offset-background transition-all focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
326
+ {
327
+ variants: {
328
+ variant: {
329
+ default: "rounded-md px-3 py-1 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm",
330
+ line: "rounded-none border-b border-transparent px-2 pb-3 pt-2 data-[state=active]:border-signal data-[state=active]:text-foreground"
331
+ }
332
+ },
333
+ defaultVariants: {
334
+ variant: "default"
335
+ }
336
+ }
337
+ ), oe = o.forwardRef(({ className: e, variant: a, ...t }, n) => /* @__PURE__ */ r(f.Trigger, { ref: n, className: s(se({ variant: a }), e), ...t }));
338
+ oe.displayName = f.Trigger.displayName;
339
+ const ne = o.forwardRef(({ className: e, ...a }, t) => /* @__PURE__ */ r(
340
+ f.Content,
341
+ {
342
+ ref: t,
343
+ className: s(
344
+ "ring-offset-background focus-visible:ring-ring mt-2 focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden",
345
+ e
346
+ ),
347
+ ...a
348
+ }
349
+ ));
350
+ ne.displayName = f.Content.displayName;
351
+ const ie = o.forwardRef(
352
+ ({ className: e, ...a }, t) => /* @__PURE__ */ r(
353
+ "textarea",
354
+ {
355
+ className: s(
356
+ "border-border-subtle bg-background placeholder:text-foreground-muted focus-visible:ring-ring flex min-h-[60px] w-full rounded-md border px-3 py-2 text-base shadow-xs focus-visible:ring-1 focus-visible:outline-hidden disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
357
+ e
358
+ ),
359
+ ref: t,
360
+ ...a
361
+ }
362
+ )
363
+ );
364
+ ie.displayName = "Textarea";
365
+ const Te = u.Provider, De = u.Root, Se = u.Trigger, de = o.forwardRef(({ className: e, sideOffset: a = 4, ...t }, n) => /* @__PURE__ */ r(u.Portal, { children: /* @__PURE__ */ r(
366
+ u.Content,
367
+ {
368
+ ref: n,
369
+ sideOffset: a,
370
+ className: s(
371
+ "bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 z-50 origin-[--radix-tooltip-content-transform-origin] overflow-hidden rounded-md px-3 py-1.5 text-xs",
372
+ e
373
+ ),
374
+ ...t
375
+ }
376
+ ) }));
377
+ de.displayName = u.Content.displayName;
378
+ export {
379
+ k as A,
380
+ be as B,
381
+ I as C,
382
+ xe as D,
383
+ ee as E,
384
+ Re as F,
385
+ ne as G,
386
+ re as H,
387
+ J as I,
388
+ oe as J,
389
+ ie as K,
390
+ Q as L,
391
+ De as M,
392
+ de as N,
393
+ Te as O,
394
+ Se as P,
395
+ P as Q,
396
+ j as R,
397
+ ye as S,
398
+ Ce as T,
399
+ ae as U,
400
+ z as a,
401
+ V as b,
402
+ B as c,
403
+ H as d,
404
+ F as e,
405
+ U as f,
406
+ L as g,
407
+ A as h,
408
+ he as i,
409
+ _ as j,
410
+ E as k,
411
+ M as l,
412
+ G as m,
413
+ x as n,
414
+ O as o,
415
+ q as p,
416
+ ve as q,
417
+ W as r,
418
+ we as s,
419
+ Z as t,
420
+ Y as u,
421
+ h as v,
422
+ v as w,
423
+ $ as x,
424
+ X as y,
425
+ Ne as z
426
+ };
@@ -0,0 +1,2 @@
1
+ import { ClassValue } from 'clsx';
2
+ export declare function cn(...inputs: ClassValue[]): string;
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "@airlock-hq/design-system",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "files": [
6
+ "dist"
7
+ ],
8
+ "main": "./dist/index.js",
9
+ "module": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.js"
15
+ },
16
+ "./react": {
17
+ "types": "./dist/react/index.d.ts",
18
+ "import": "./dist/react.js"
19
+ },
20
+ "./theme.css": "./dist/theme.css",
21
+ "./styles.css": "./dist/tokens.css"
22
+ },
23
+ "peerDependencies": {
24
+ "react": "^19.0.0",
25
+ "react-dom": "^19.0.0"
26
+ },
27
+ "dependencies": {
28
+ "@fontsource-variable/inter": "^5.2.8",
29
+ "@fontsource-variable/jetbrains-mono": "^5.2.8",
30
+ "@radix-ui/react-dialog": "^1.1.15",
31
+ "@radix-ui/react-label": "^2.1.8",
32
+ "@radix-ui/react-select": "^2.2.6",
33
+ "@radix-ui/react-separator": "^1.1.8",
34
+ "@radix-ui/react-slot": "^1.2.4",
35
+ "@radix-ui/react-tabs": "^1.1.13",
36
+ "@radix-ui/react-tooltip": "^1.2.8",
37
+ "class-variance-authority": "^0.7.1",
38
+ "clsx": "^2.1.1",
39
+ "lucide-react": "^0.562.0",
40
+ "tailwind-merge": "^3.4.0"
41
+ },
42
+ "devDependencies": {
43
+ "@storybook/react-vite": "^9.1.17",
44
+ "@tailwindcss/vite": "^4.0.0",
45
+ "@types/react": "^19.2.5",
46
+ "@types/react-dom": "^19.2.3",
47
+ "storybook": "^9.1.17",
48
+ "tailwindcss": "^4.0.0",
49
+ "tw-animate-css": "^1.0.0",
50
+ "typescript": "~5.9.3",
51
+ "vite": "^7.2.4",
52
+ "vite-plugin-dts": "^4.5.4"
53
+ },
54
+ "scripts": {
55
+ "build": "vite build && cp src/styles/tokens.css dist/tokens.css && cp src/styles/theme.css dist/theme.css",
56
+ "storybook": "storybook dev -p 6006",
57
+ "build-storybook": "storybook build"
58
+ }
59
+ }