@burtson-labs/ui 0.2.0 → 0.3.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.
Files changed (93) hide show
  1. package/README.md +3 -3
  2. package/dist/components/accordion.js +1 -1
  3. package/dist/components/accordion.js.map +1 -1
  4. package/dist/components/alert.d.ts +1 -1
  5. package/dist/components/alert.js +9 -8
  6. package/dist/components/alert.js.map +1 -1
  7. package/dist/components/app-shell.d.ts +8 -0
  8. package/dist/components/app-shell.js +50 -0
  9. package/dist/components/app-shell.js.map +1 -0
  10. package/dist/components/avatar.js +1 -1
  11. package/dist/components/avatar.js.map +1 -1
  12. package/dist/components/badge.d.ts +1 -1
  13. package/dist/components/badge.js +9 -8
  14. package/dist/components/badge.js.map +1 -1
  15. package/dist/components/button.d.ts +4 -4
  16. package/dist/components/button.js +28 -19
  17. package/dist/components/button.js.map +1 -1
  18. package/dist/components/card.d.ts +10 -2
  19. package/dist/components/card.js +40 -9
  20. package/dist/components/card.js.map +1 -1
  21. package/dist/components/checkbox.js +1 -1
  22. package/dist/components/checkbox.js.map +1 -1
  23. package/dist/components/command.js +4 -4
  24. package/dist/components/command.js.map +1 -1
  25. package/dist/components/dialog.d.ts +1 -1
  26. package/dist/components/dialog.js +15 -15
  27. package/dist/components/dialog.js.map +1 -1
  28. package/dist/components/dropdown-menu.js +3 -3
  29. package/dist/components/dropdown-menu.js.map +1 -1
  30. package/dist/components/empty-state.d.ts +7 -0
  31. package/dist/components/empty-state.js +44 -0
  32. package/dist/components/empty-state.js.map +1 -0
  33. package/dist/components/field.d.ts +8 -0
  34. package/dist/components/field.js +51 -0
  35. package/dist/components/field.js.map +1 -0
  36. package/dist/components/icon-button.d.ts +8 -0
  37. package/dist/components/icon-button.js +19 -0
  38. package/dist/components/icon-button.js.map +1 -0
  39. package/dist/components/input.d.ts +1 -2
  40. package/dist/components/input.js +2 -3
  41. package/dist/components/input.js.map +1 -1
  42. package/dist/components/kbd.js +1 -1
  43. package/dist/components/kbd.js.map +1 -1
  44. package/dist/components/label.js +1 -1
  45. package/dist/components/label.js.map +1 -1
  46. package/dist/components/page-header.d.ts +8 -0
  47. package/dist/components/page-header.js +51 -0
  48. package/dist/components/page-header.js.map +1 -0
  49. package/dist/components/popover.d.ts +5 -2
  50. package/dist/components/popover.js +5 -2
  51. package/dist/components/popover.js.map +1 -1
  52. package/dist/components/progress.js +2 -2
  53. package/dist/components/progress.js.map +1 -1
  54. package/dist/components/radio-group.js +1 -1
  55. package/dist/components/radio-group.js.map +1 -1
  56. package/dist/components/scroll-area.js +1 -1
  57. package/dist/components/scroll-area.js.map +1 -1
  58. package/dist/components/select.js +3 -3
  59. package/dist/components/select.js.map +1 -1
  60. package/dist/components/sheet.js +4 -4
  61. package/dist/components/sheet.js.map +1 -1
  62. package/dist/components/skeleton.js +1 -1
  63. package/dist/components/skeleton.js.map +1 -1
  64. package/dist/components/stat-card.d.ts +11 -0
  65. package/dist/components/stat-card.js +42 -0
  66. package/dist/components/stat-card.js.map +1 -0
  67. package/dist/components/status.d.ts +12 -0
  68. package/dist/components/status.js +40 -0
  69. package/dist/components/status.js.map +1 -0
  70. package/dist/components/switch.js +1 -1
  71. package/dist/components/switch.js.map +1 -1
  72. package/dist/components/table.d.ts +19 -4
  73. package/dist/components/table.js +18 -12
  74. package/dist/components/table.js.map +1 -1
  75. package/dist/components/tabs.js +4 -4
  76. package/dist/components/tabs.js.map +1 -1
  77. package/dist/components/textarea.js +1 -1
  78. package/dist/components/textarea.js.map +1 -1
  79. package/dist/components/toolbar.d.ts +6 -0
  80. package/dist/components/toolbar.js +39 -0
  81. package/dist/components/toolbar.js.map +1 -0
  82. package/dist/components/tooltip.js +2 -2
  83. package/dist/components/tooltip.js.map +1 -1
  84. package/dist/index.d.ts +8 -0
  85. package/dist/index.js +11 -3
  86. package/dist/mui/index.js +9 -5
  87. package/dist/mui/index.js.map +1 -1
  88. package/dist/styles.css +1 -1
  89. package/dist/theme.css +95 -47
  90. package/dist/tokens.d.ts +41 -13
  91. package/dist/tokens.js +80 -47
  92. package/dist/tokens.js.map +1 -1
  93. package/package.json +2 -2
package/dist/theme.css CHANGED
@@ -13,68 +13,91 @@
13
13
  @custom-variant dark (&:where(.dark, .dark *, [data-theme='dark'], [data-theme='dark'] *));
14
14
 
15
15
  :root {
16
- --background: #ffffff;
17
- --foreground: #17151c;
16
+ --background: #fbfafc;
17
+ --foreground: #17131c;
18
+ --surface: #ffffff;
19
+ --surface-raised: #ffffff;
20
+ --surface-muted: #f7f4f9;
18
21
  --card: #ffffff;
19
- --card-foreground: #17151c;
22
+ --card-foreground: #17131c;
20
23
  --popover: #ffffff;
21
- --popover-foreground: #17151c;
22
- --primary: #a60ee5;
24
+ --popover-foreground: #17131c;
25
+ --primary: #8f0bc7;
23
26
  --primary-foreground: #ffffff;
24
- --secondary: #f3f0f7;
25
- --secondary-foreground: #221c2b;
26
- --muted: #f5f3f8;
27
- --muted-foreground: #655e70;
28
- --accent: #f1e7fb;
29
- --accent-foreground: #4d0a6b;
30
- --destructive: #d42a3a;
27
+ --secondary: #f1edf4;
28
+ --secondary-foreground: #29212f;
29
+ --muted: #f4f1f6;
30
+ --muted-foreground: #6c6472;
31
+ --accent: #f3e7fb;
32
+ --accent-foreground: #561071;
33
+ --destructive: #c92d3f;
31
34
  --destructive-foreground: #ffffff;
32
- --success: #12805c;
35
+ --success: #0e7a56;
33
36
  --success-foreground: #ffffff;
34
- --warning: #a35c00;
37
+ --warning: #9b5c08;
35
38
  --warning-foreground: #ffffff;
36
- --border: #e4dfeb;
37
- --input: #d9d2e2;
39
+ --info: #2563eb;
40
+ --info-foreground: #ffffff;
41
+ --border: #e5dfe8;
42
+ --border-strong: #cfc5d5;
43
+ --input: #d8cfdd;
38
44
  --ring: #a60ee5;
39
45
  --brand: #a60ee5;
40
- --brand-soft: #f4e6fd;
46
+ --brand-hover: #8f0bc7;
47
+ --brand-soft: #f5e8fc;
48
+ --brand-soft-foreground: #5b1476;
49
+ --code: #18141d;
50
+ --code-foreground: #f5f0f7;
41
51
  --radius: 0.625rem;
42
52
  color-scheme: light;
43
53
  }
44
54
 
45
55
  .dark,
46
56
  [data-theme='dark'] {
47
- --background: #101016;
48
- --foreground: #f0edf7;
49
- --card: #16151d;
50
- --card-foreground: #f0edf7;
51
- --popover: #191820;
52
- --popover-foreground: #f0edf7;
53
- --primary: #a60ee5;
57
+ --background: #0d0d12;
58
+ --foreground: #f2eef5;
59
+ --surface: #121218;
60
+ --surface-raised: #18171f;
61
+ --surface-muted: #17151c;
62
+ --card: #14131a;
63
+ --card-foreground: #f2eef5;
64
+ --popover: #18171f;
65
+ --popover-foreground: #f2eef5;
66
+ --primary: #b836ed;
54
67
  --primary-foreground: #ffffff;
55
- --secondary: #221f2b;
56
- --secondary-foreground: #e4ddeb;
57
- --muted: #1d1b25;
58
- --muted-foreground: #a39bac;
59
- --accent: #2b193a;
60
- --accent-foreground: #e9cffc;
61
- --destructive: #e5484d;
62
- --destructive-foreground: #ffffff;
63
- --success: #2fb67f;
64
- --success-foreground: #07170f;
65
- --warning: #f0a53a;
66
- --warning-foreground: #1c1204;
67
- --border: #2e2a3b;
68
- --input: #3a3548;
69
- --ring: #c77afa;
70
- --brand: #c77afa;
71
- --brand-soft: #2b193a;
68
+ --secondary: #211e28;
69
+ --secondary-foreground: #e7e0eb;
70
+ --muted: #1b1921;
71
+ --muted-foreground: #a49ca9;
72
+ --accent: #291734;
73
+ --accent-foreground: #efd7fa;
74
+ --destructive: #ef5b65;
75
+ --destructive-foreground: #1b090b;
76
+ --success: #36c58d;
77
+ --success-foreground: #07160f;
78
+ --warning: #f3b24c;
79
+ --warning-foreground: #201304;
80
+ --info: #6ea8ff;
81
+ --info-foreground: #071226;
82
+ --border: #2a2732;
83
+ --border-strong: #403a49;
84
+ --input: #34303d;
85
+ --ring: #c65ef1;
86
+ --brand: #c65ef1;
87
+ --brand-hover: #d384f3;
88
+ --brand-soft: #291734;
89
+ --brand-soft-foreground: #efd7fa;
90
+ --code: #09090d;
91
+ --code-foreground: #f5f0f7;
72
92
  color-scheme: dark;
73
93
  }
74
94
 
75
95
  @theme inline {
76
96
  --color-background: var(--background);
77
97
  --color-foreground: var(--foreground);
98
+ --color-surface: var(--surface);
99
+ --color-surface-raised: var(--surface-raised);
100
+ --color-surface-muted: var(--surface-muted);
78
101
  --color-card: var(--card);
79
102
  --color-card-foreground: var(--card-foreground);
80
103
  --color-popover: var(--popover);
@@ -93,17 +116,31 @@
93
116
  --color-success-foreground: var(--success-foreground);
94
117
  --color-warning: var(--warning);
95
118
  --color-warning-foreground: var(--warning-foreground);
119
+ --color-info: var(--info);
120
+ --color-info-foreground: var(--info-foreground);
96
121
  --color-border: var(--border);
122
+ --color-border-strong: var(--border-strong);
97
123
  --color-input: var(--input);
98
124
  --color-ring: var(--ring);
99
125
  --color-brand: var(--brand);
126
+ --color-brand-hover: var(--brand-hover);
100
127
  --color-brand-soft: var(--brand-soft);
101
- --radius-sm: calc(var(--radius) - 4px);
102
- --radius-md: calc(var(--radius) - 2px);
103
- --radius-lg: var(--radius);
104
- --radius-xl: calc(var(--radius) + 4px);
105
- --font-sans: "Inter", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
106
- --font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
128
+ --color-brand-soft-foreground: var(--brand-soft-foreground);
129
+ --color-code: var(--code);
130
+ --color-code-foreground: var(--code-foreground);
131
+ /* Controls 8-10px, panels 10-12px, pills only for tags and status. */
132
+ --radius-xs: 0.375rem;
133
+ --radius-sm: 0.5rem;
134
+ --radius-md: 0.625rem;
135
+ --radius-lg: 0.75rem;
136
+ --radius-xl: 1rem;
137
+ /* Borders carry hierarchy; shadows stay quiet except on floating surfaces. */
138
+ --shadow-xs: 0 1px 2px rgb(10 8 14 / 0.05);
139
+ --shadow-sm: 0 1px 3px rgb(10 8 14 / 0.08), 0 1px 2px rgb(10 8 14 / 0.05);
140
+ --shadow-md: 0 10px 30px rgb(10 8 14 / 0.10), 0 2px 8px rgb(10 8 14 / 0.06);
141
+ --shadow-focus: 0 0 0 3px color-mix(in srgb, var(--ring) 22%, transparent);
142
+ --font-sans: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
143
+ --font-mono: "JetBrains Mono", "SFMono-Regular", Consolas, "Liberation Mono", monospace;
107
144
  --animate-in: bl-in 160ms cubic-bezier(0.16, 1, 0.3, 1);
108
145
  --animate-out: bl-out 120ms ease-in forwards;
109
146
  --animate-sheet-in: bl-sheet-in 220ms cubic-bezier(0.16, 1, 0.3, 1);
@@ -186,4 +223,15 @@
186
223
  :focus-visible {
187
224
  outline-color: var(--color-ring);
188
225
  }
226
+ html,
227
+ body {
228
+ background: var(--color-background);
229
+ color: var(--color-foreground);
230
+ }
231
+ body {
232
+ font-family: var(--font-sans);
233
+ }
234
+ ::selection {
235
+ background: color-mix(in srgb, var(--color-brand) 28%, transparent);
236
+ }
189
237
  }
package/dist/tokens.d.ts CHANGED
@@ -1,28 +1,56 @@
1
1
  /**
2
- * Burtson UI design tokens. This file is the single source for colour, radius
3
- * and type: `scripts/theme.mjs` writes src/styles/theme.css from it, and the
2
+ * Burtson UI design tokens. This file is the single source for colour, radius,
3
+ * shadow and type: `scripts/theme.mjs` writes src/styles/theme.css from it, and the
4
4
  * MUI adapter (`@burtson-labs/ui/mui`) builds its palette from it, so Tailwind
5
5
  * apps and MUI apps render the same brand.
6
6
  *
7
- * Colour names follow the shadcn/ui convention (background, primary, muted, …)
8
- * so components copied from the shadcn ecosystem pick up the Burtson palette.
7
+ * Burtson's design language: technical, quiet, precise. Purple (`brand`) is a
8
+ * signal colour for selection, focus, primary actions and small accents, not a
9
+ * panel fill. Dark is a first-class palette, not an inversion of light. The
10
+ * base colour names stay registry-compatible, so source copied into an app
11
+ * keeps working.
9
12
  */
10
- export type ColorToken = 'background' | 'foreground' | 'card' | 'card-foreground' | 'popover' | 'popover-foreground' | 'primary' | 'primary-foreground' | 'secondary' | 'secondary-foreground' | 'muted' | 'muted-foreground' | 'accent' | 'accent-foreground' | 'destructive' | 'destructive-foreground' | 'success' | 'success-foreground' | 'warning' | 'warning-foreground' | 'border' | 'input' | 'ring' | 'brand' | 'brand-soft';
13
+ export type ColorToken = 'background' | 'foreground' | 'surface' | 'surface-raised' | 'surface-muted' | 'card' | 'card-foreground' | 'popover' | 'popover-foreground' | 'primary' | 'primary-foreground' | 'secondary' | 'secondary-foreground' | 'muted' | 'muted-foreground' | 'accent' | 'accent-foreground' | 'destructive' | 'destructive-foreground' | 'success' | 'success-foreground' | 'warning' | 'warning-foreground' | 'info' | 'info-foreground' | 'border' | 'border-strong' | 'input' | 'ring' | 'brand' | 'brand-hover' | 'brand-soft' | 'brand-soft-foreground' | 'code' | 'code-foreground';
11
14
  export type Palette = Record<ColorToken, string>;
12
- /** Burtson Labs purple, the one colour every surface shares. */
15
+ /** Burtson Labs purple. Use as signal, not wallpaper. */
13
16
  export declare const brand = "#a60ee5";
14
17
  export declare const light: Palette;
15
18
  export declare const dark: Palette;
16
- /** Base corner radius; sm/md/lg/xl derive from it. */
17
- export declare const radius = "0.625rem";
18
- export declare const fontSans = "\"Inter\", ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif";
19
- export declare const fontMono = "\"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace";
19
+ export declare const radius: {
20
+ readonly xs: "0.375rem";
21
+ readonly sm: "0.5rem";
22
+ readonly md: "0.625rem";
23
+ readonly lg: "0.75rem";
24
+ readonly xl: "1rem";
25
+ readonly full: "9999px";
26
+ };
27
+ export declare const shadow: {
28
+ readonly xs: "0 1px 2px rgb(10 8 14 / 0.05)";
29
+ readonly sm: "0 1px 3px rgb(10 8 14 / 0.08), 0 1px 2px rgb(10 8 14 / 0.05)";
30
+ readonly md: "0 10px 30px rgb(10 8 14 / 0.10), 0 2px 8px rgb(10 8 14 / 0.06)";
31
+ readonly focus: "0 0 0 3px color-mix(in srgb, var(--ring) 22%, transparent)";
32
+ };
33
+ export declare const fontSans = "Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif";
34
+ export declare const fontMono = "\"JetBrains Mono\", \"SFMono-Regular\", Consolas, \"Liberation Mono\", monospace";
20
35
  export declare const tokens: {
21
36
  readonly brand: "#a60ee5";
22
37
  readonly light: Palette;
23
38
  readonly dark: Palette;
24
- readonly radius: "0.625rem";
25
- readonly fontSans: "\"Inter\", ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif";
26
- readonly fontMono: "\"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace";
39
+ readonly radius: {
40
+ readonly xs: "0.375rem";
41
+ readonly sm: "0.5rem";
42
+ readonly md: "0.625rem";
43
+ readonly lg: "0.75rem";
44
+ readonly xl: "1rem";
45
+ readonly full: "9999px";
46
+ };
47
+ readonly shadow: {
48
+ readonly xs: "0 1px 2px rgb(10 8 14 / 0.05)";
49
+ readonly sm: "0 1px 3px rgb(10 8 14 / 0.08), 0 1px 2px rgb(10 8 14 / 0.05)";
50
+ readonly md: "0 10px 30px rgb(10 8 14 / 0.10), 0 2px 8px rgb(10 8 14 / 0.06)";
51
+ readonly focus: "0 0 0 3px color-mix(in srgb, var(--ring) 22%, transparent)";
52
+ };
53
+ readonly fontSans: "Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif";
54
+ readonly fontMono: "\"JetBrains Mono\", \"SFMono-Regular\", Consolas, \"Liberation Mono\", monospace";
27
55
  };
28
56
  export default tokens;
package/dist/tokens.js CHANGED
@@ -1,73 +1,106 @@
1
1
  //#region src/tokens.ts
2
- /** Burtson Labs purple, the one colour every surface shares. */
2
+ /** Burtson Labs purple. Use as signal, not wallpaper. */
3
3
  var brand = "#a60ee5";
4
4
  var light = {
5
- background: "#ffffff",
6
- foreground: "#17151c",
5
+ background: "#fbfafc",
6
+ foreground: "#17131c",
7
+ surface: "#ffffff",
8
+ "surface-raised": "#ffffff",
9
+ "surface-muted": "#f7f4f9",
7
10
  card: "#ffffff",
8
- "card-foreground": "#17151c",
11
+ "card-foreground": "#17131c",
9
12
  popover: "#ffffff",
10
- "popover-foreground": "#17151c",
11
- primary: "#a60ee5",
13
+ "popover-foreground": "#17131c",
14
+ primary: "#8f0bc7",
12
15
  "primary-foreground": "#ffffff",
13
- secondary: "#f3f0f7",
14
- "secondary-foreground": "#221c2b",
15
- muted: "#f5f3f8",
16
- "muted-foreground": "#655e70",
17
- accent: "#f1e7fb",
18
- "accent-foreground": "#4d0a6b",
19
- destructive: "#d42a3a",
16
+ secondary: "#f1edf4",
17
+ "secondary-foreground": "#29212f",
18
+ muted: "#f4f1f6",
19
+ "muted-foreground": "#6c6472",
20
+ accent: "#f3e7fb",
21
+ "accent-foreground": "#561071",
22
+ destructive: "#c92d3f",
20
23
  "destructive-foreground": "#ffffff",
21
- success: "#12805c",
24
+ success: "#0e7a56",
22
25
  "success-foreground": "#ffffff",
23
- warning: "#a35c00",
26
+ warning: "#9b5c08",
24
27
  "warning-foreground": "#ffffff",
25
- border: "#e4dfeb",
26
- input: "#d9d2e2",
28
+ info: "#2563eb",
29
+ "info-foreground": "#ffffff",
30
+ border: "#e5dfe8",
31
+ "border-strong": "#cfc5d5",
32
+ input: "#d8cfdd",
27
33
  ring: "#a60ee5",
28
34
  brand: "#a60ee5",
29
- "brand-soft": "#f4e6fd"
35
+ "brand-hover": "#8f0bc7",
36
+ "brand-soft": "#f5e8fc",
37
+ "brand-soft-foreground": "#5b1476",
38
+ code: "#18141d",
39
+ "code-foreground": "#f5f0f7"
30
40
  };
31
41
  var dark = {
32
- background: "#101016",
33
- foreground: "#f0edf7",
34
- card: "#16151d",
35
- "card-foreground": "#f0edf7",
36
- popover: "#191820",
37
- "popover-foreground": "#f0edf7",
38
- primary: "#a60ee5",
42
+ background: "#0d0d12",
43
+ foreground: "#f2eef5",
44
+ surface: "#121218",
45
+ "surface-raised": "#18171f",
46
+ "surface-muted": "#17151c",
47
+ card: "#14131a",
48
+ "card-foreground": "#f2eef5",
49
+ popover: "#18171f",
50
+ "popover-foreground": "#f2eef5",
51
+ primary: "#b836ed",
39
52
  "primary-foreground": "#ffffff",
40
- secondary: "#221f2b",
41
- "secondary-foreground": "#e4ddeb",
42
- muted: "#1d1b25",
43
- "muted-foreground": "#a39bac",
44
- accent: "#2b193a",
45
- "accent-foreground": "#e9cffc",
46
- destructive: "#e5484d",
47
- "destructive-foreground": "#ffffff",
48
- success: "#2fb67f",
49
- "success-foreground": "#07170f",
50
- warning: "#f0a53a",
51
- "warning-foreground": "#1c1204",
52
- border: "#2e2a3b",
53
- input: "#3a3548",
54
- ring: "#c77afa",
55
- brand: "#c77afa",
56
- "brand-soft": "#2b193a"
53
+ secondary: "#211e28",
54
+ "secondary-foreground": "#e7e0eb",
55
+ muted: "#1b1921",
56
+ "muted-foreground": "#a49ca9",
57
+ accent: "#291734",
58
+ "accent-foreground": "#efd7fa",
59
+ destructive: "#ef5b65",
60
+ "destructive-foreground": "#1b090b",
61
+ success: "#36c58d",
62
+ "success-foreground": "#07160f",
63
+ warning: "#f3b24c",
64
+ "warning-foreground": "#201304",
65
+ info: "#6ea8ff",
66
+ "info-foreground": "#071226",
67
+ border: "#2a2732",
68
+ "border-strong": "#403a49",
69
+ input: "#34303d",
70
+ ring: "#c65ef1",
71
+ brand: "#c65ef1",
72
+ "brand-hover": "#d384f3",
73
+ "brand-soft": "#291734",
74
+ "brand-soft-foreground": "#efd7fa",
75
+ code: "#09090d",
76
+ "code-foreground": "#f5f0f7"
77
+ };
78
+ var radius = {
79
+ xs: "0.375rem",
80
+ sm: "0.5rem",
81
+ md: "0.625rem",
82
+ lg: "0.75rem",
83
+ xl: "1rem",
84
+ full: "9999px"
85
+ };
86
+ var shadow = {
87
+ xs: "0 1px 2px rgb(10 8 14 / 0.05)",
88
+ sm: "0 1px 3px rgb(10 8 14 / 0.08), 0 1px 2px rgb(10 8 14 / 0.05)",
89
+ md: "0 10px 30px rgb(10 8 14 / 0.10), 0 2px 8px rgb(10 8 14 / 0.06)",
90
+ focus: "0 0 0 3px color-mix(in srgb, var(--ring) 22%, transparent)"
57
91
  };
58
- /** Base corner radius; sm/md/lg/xl derive from it. */
59
- var radius = "0.625rem";
60
- var fontSans = "\"Inter\", ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif";
61
- var fontMono = "\"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace";
92
+ var fontSans = "Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif";
93
+ var fontMono = "\"JetBrains Mono\", \"SFMono-Regular\", Consolas, \"Liberation Mono\", monospace";
62
94
  var tokens = {
63
95
  brand,
64
96
  light,
65
97
  dark,
66
98
  radius,
99
+ shadow,
67
100
  fontSans,
68
101
  fontMono
69
102
  };
70
103
  //#endregion
71
- export { brand, dark, tokens as default, tokens, fontMono, fontSans, light, radius };
104
+ export { brand, dark, tokens as default, tokens, fontMono, fontSans, light, radius, shadow };
72
105
 
73
106
  //# sourceMappingURL=tokens.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.js","names":[],"sources":["../src/tokens.ts"],"sourcesContent":["/**\n * Burtson UI design tokens. This file is the single source for colour, radius\n * and type: `scripts/theme.mjs` writes src/styles/theme.css from it, and the\n * MUI adapter (`@burtson-labs/ui/mui`) builds its palette from it, so Tailwind\n * apps and MUI apps render the same brand.\n *\n * Colour names follow the shadcn/ui convention (background, primary, muted, …)\n * so components copied from the shadcn ecosystem pick up the Burtson palette.\n */\n\nexport type ColorToken =\n | 'background'\n | 'foreground'\n | 'card'\n | 'card-foreground'\n | 'popover'\n | 'popover-foreground'\n | 'primary'\n | 'primary-foreground'\n | 'secondary'\n | 'secondary-foreground'\n | 'muted'\n | 'muted-foreground'\n | 'accent'\n | 'accent-foreground'\n | 'destructive'\n | 'destructive-foreground'\n | 'success'\n | 'success-foreground'\n | 'warning'\n | 'warning-foreground'\n | 'border'\n | 'input'\n | 'ring'\n | 'brand'\n | 'brand-soft';\n\nexport type Palette = Record<ColorToken, string>;\n\n/** Burtson Labs purple, the one colour every surface shares. */\nexport const brand = '#a60ee5';\n\nexport const light: Palette = {\n background: '#ffffff',\n foreground: '#17151c',\n card: '#ffffff',\n 'card-foreground': '#17151c',\n popover: '#ffffff',\n 'popover-foreground': '#17151c',\n primary: '#a60ee5',\n 'primary-foreground': '#ffffff',\n secondary: '#f3f0f7',\n 'secondary-foreground': '#221c2b',\n muted: '#f5f3f8',\n 'muted-foreground': '#655e70',\n accent: '#f1e7fb',\n 'accent-foreground': '#4d0a6b',\n destructive: '#d42a3a',\n 'destructive-foreground': '#ffffff',\n success: '#12805c',\n 'success-foreground': '#ffffff',\n warning: '#a35c00',\n 'warning-foreground': '#ffffff',\n border: '#e4dfeb',\n input: '#d9d2e2',\n ring: '#a60ee5',\n brand: '#a60ee5',\n 'brand-soft': '#f4e6fd',\n};\n\nexport const dark: Palette = {\n background: '#101016',\n foreground: '#f0edf7',\n card: '#16151d',\n 'card-foreground': '#f0edf7',\n popover: '#191820',\n 'popover-foreground': '#f0edf7',\n primary: '#a60ee5',\n 'primary-foreground': '#ffffff',\n secondary: '#221f2b',\n 'secondary-foreground': '#e4ddeb',\n muted: '#1d1b25',\n 'muted-foreground': '#a39bac',\n accent: '#2b193a',\n 'accent-foreground': '#e9cffc',\n destructive: '#e5484d',\n 'destructive-foreground': '#ffffff',\n success: '#2fb67f',\n 'success-foreground': '#07170f',\n warning: '#f0a53a',\n 'warning-foreground': '#1c1204',\n border: '#2e2a3b',\n input: '#3a3548',\n ring: '#c77afa',\n brand: '#c77afa',\n 'brand-soft': '#2b193a',\n};\n\n/** Base corner radius; sm/md/lg/xl derive from it. */\nexport const radius = '0.625rem';\n\nexport const fontSans =\n '\"Inter\", ui-sans-serif, system-ui, -apple-system, \"Segoe UI\", Roboto, sans-serif';\nexport const fontMono =\n '\"JetBrains Mono\", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace';\n\nexport const tokens = { brand, light, dark, radius, fontSans, fontMono } as const;\nexport default tokens;\n"],"mappings":";;AAwCA,IAAa,QAAQ;AAErB,IAAa,QAAiB;CAC5B,YAAY;CACZ,YAAY;CACZ,MAAM;CACN,mBAAmB;CACnB,SAAS;CACT,sBAAsB;CACtB,SAAS;CACT,sBAAsB;CACtB,WAAW;CACX,wBAAwB;CACxB,OAAO;CACP,oBAAoB;CACpB,QAAQ;CACR,qBAAqB;CACrB,aAAa;CACb,0BAA0B;CAC1B,SAAS;CACT,sBAAsB;CACtB,SAAS;CACT,sBAAsB;CACtB,QAAQ;CACR,OAAO;CACP,MAAM;CACN,OAAO;CACP,cAAc;AAChB;AAEA,IAAa,OAAgB;CAC3B,YAAY;CACZ,YAAY;CACZ,MAAM;CACN,mBAAmB;CACnB,SAAS;CACT,sBAAsB;CACtB,SAAS;CACT,sBAAsB;CACtB,WAAW;CACX,wBAAwB;CACxB,OAAO;CACP,oBAAoB;CACpB,QAAQ;CACR,qBAAqB;CACrB,aAAa;CACb,0BAA0B;CAC1B,SAAS;CACT,sBAAsB;CACtB,SAAS;CACT,sBAAsB;CACtB,QAAQ;CACR,OAAO;CACP,MAAM;CACN,OAAO;CACP,cAAc;AAChB;;AAGA,IAAa,SAAS;AAEtB,IAAa,WACX;AACF,IAAa,WACX;AAEF,IAAa,SAAS;CAAE;CAAO;CAAO;CAAM;CAAQ;CAAU;AAAS"}
1
+ {"version":3,"file":"tokens.js","names":[],"sources":["../src/tokens.ts"],"sourcesContent":["/**\n * Burtson UI design tokens. This file is the single source for colour, radius,\n * shadow and type: `scripts/theme.mjs` writes src/styles/theme.css from it, and the\n * MUI adapter (`@burtson-labs/ui/mui`) builds its palette from it, so Tailwind\n * apps and MUI apps render the same brand.\n *\n * Burtson's design language: technical, quiet, precise. Purple (`brand`) is a\n * signal colour for selection, focus, primary actions and small accents, not a\n * panel fill. Dark is a first-class palette, not an inversion of light. The\n * base colour names stay registry-compatible, so source copied into an app\n * keeps working.\n */\n\nexport type ColorToken =\n | 'background'\n | 'foreground'\n | 'surface'\n | 'surface-raised'\n | 'surface-muted'\n | 'card'\n | 'card-foreground'\n | 'popover'\n | 'popover-foreground'\n | 'primary'\n | 'primary-foreground'\n | 'secondary'\n | 'secondary-foreground'\n | 'muted'\n | 'muted-foreground'\n | 'accent'\n | 'accent-foreground'\n | 'destructive'\n | 'destructive-foreground'\n | 'success'\n | 'success-foreground'\n | 'warning'\n | 'warning-foreground'\n | 'info'\n | 'info-foreground'\n | 'border'\n | 'border-strong'\n | 'input'\n | 'ring'\n | 'brand'\n | 'brand-hover'\n | 'brand-soft'\n | 'brand-soft-foreground'\n | 'code'\n | 'code-foreground';\n\nexport type Palette = Record<ColorToken, string>;\n\n/** Burtson Labs purple. Use as signal, not wallpaper. */\nexport const brand = '#a60ee5';\n\nexport const light: Palette = {\n background: '#fbfafc',\n foreground: '#17131c',\n surface: '#ffffff',\n 'surface-raised': '#ffffff',\n 'surface-muted': '#f7f4f9',\n card: '#ffffff',\n 'card-foreground': '#17131c',\n popover: '#ffffff',\n 'popover-foreground': '#17131c',\n primary: '#8f0bc7',\n 'primary-foreground': '#ffffff',\n secondary: '#f1edf4',\n 'secondary-foreground': '#29212f',\n muted: '#f4f1f6',\n 'muted-foreground': '#6c6472',\n accent: '#f3e7fb',\n 'accent-foreground': '#561071',\n destructive: '#c92d3f',\n 'destructive-foreground': '#ffffff',\n success: '#0e7a56',\n 'success-foreground': '#ffffff',\n warning: '#9b5c08',\n 'warning-foreground': '#ffffff',\n info: '#2563eb',\n 'info-foreground': '#ffffff',\n border: '#e5dfe8',\n 'border-strong': '#cfc5d5',\n input: '#d8cfdd',\n ring: '#a60ee5',\n brand: '#a60ee5',\n 'brand-hover': '#8f0bc7',\n 'brand-soft': '#f5e8fc',\n 'brand-soft-foreground': '#5b1476',\n code: '#18141d',\n 'code-foreground': '#f5f0f7',\n};\n\nexport const dark: Palette = {\n background: '#0d0d12',\n foreground: '#f2eef5',\n surface: '#121218',\n 'surface-raised': '#18171f',\n 'surface-muted': '#17151c',\n card: '#14131a',\n 'card-foreground': '#f2eef5',\n popover: '#18171f',\n 'popover-foreground': '#f2eef5',\n primary: '#b836ed',\n 'primary-foreground': '#ffffff',\n secondary: '#211e28',\n 'secondary-foreground': '#e7e0eb',\n muted: '#1b1921',\n 'muted-foreground': '#a49ca9',\n accent: '#291734',\n 'accent-foreground': '#efd7fa',\n destructive: '#ef5b65',\n 'destructive-foreground': '#1b090b',\n success: '#36c58d',\n 'success-foreground': '#07160f',\n warning: '#f3b24c',\n 'warning-foreground': '#201304',\n info: '#6ea8ff',\n 'info-foreground': '#071226',\n border: '#2a2732',\n 'border-strong': '#403a49',\n input: '#34303d',\n ring: '#c65ef1',\n brand: '#c65ef1',\n 'brand-hover': '#d384f3',\n 'brand-soft': '#291734',\n 'brand-soft-foreground': '#efd7fa',\n code: '#09090d',\n 'code-foreground': '#f5f0f7',\n};\n\nexport const radius = {\n xs: '0.375rem',\n sm: '0.5rem',\n md: '0.625rem',\n lg: '0.75rem',\n xl: '1rem',\n full: '9999px',\n} as const;\n\nexport const shadow = {\n xs: '0 1px 2px rgb(10 8 14 / 0.05)',\n sm: '0 1px 3px rgb(10 8 14 / 0.08), 0 1px 2px rgb(10 8 14 / 0.05)',\n md: '0 10px 30px rgb(10 8 14 / 0.10), 0 2px 8px rgb(10 8 14 / 0.06)',\n focus: '0 0 0 3px color-mix(in srgb, var(--ring) 22%, transparent)',\n} as const;\n\nexport const fontSans =\n 'Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif';\nexport const fontMono =\n '\"JetBrains Mono\", \"SFMono-Regular\", Consolas, \"Liberation Mono\", monospace';\n\nexport const tokens = { brand, light, dark, radius, shadow, fontSans, fontMono } as const;\nexport default tokens;\n"],"mappings":";;AAqDA,IAAa,QAAQ;AAErB,IAAa,QAAiB;CAC5B,YAAY;CACZ,YAAY;CACZ,SAAS;CACT,kBAAkB;CAClB,iBAAiB;CACjB,MAAM;CACN,mBAAmB;CACnB,SAAS;CACT,sBAAsB;CACtB,SAAS;CACT,sBAAsB;CACtB,WAAW;CACX,wBAAwB;CACxB,OAAO;CACP,oBAAoB;CACpB,QAAQ;CACR,qBAAqB;CACrB,aAAa;CACb,0BAA0B;CAC1B,SAAS;CACT,sBAAsB;CACtB,SAAS;CACT,sBAAsB;CACtB,MAAM;CACN,mBAAmB;CACnB,QAAQ;CACR,iBAAiB;CACjB,OAAO;CACP,MAAM;CACN,OAAO;CACP,eAAe;CACf,cAAc;CACd,yBAAyB;CACzB,MAAM;CACN,mBAAmB;AACrB;AAEA,IAAa,OAAgB;CAC3B,YAAY;CACZ,YAAY;CACZ,SAAS;CACT,kBAAkB;CAClB,iBAAiB;CACjB,MAAM;CACN,mBAAmB;CACnB,SAAS;CACT,sBAAsB;CACtB,SAAS;CACT,sBAAsB;CACtB,WAAW;CACX,wBAAwB;CACxB,OAAO;CACP,oBAAoB;CACpB,QAAQ;CACR,qBAAqB;CACrB,aAAa;CACb,0BAA0B;CAC1B,SAAS;CACT,sBAAsB;CACtB,SAAS;CACT,sBAAsB;CACtB,MAAM;CACN,mBAAmB;CACnB,QAAQ;CACR,iBAAiB;CACjB,OAAO;CACP,MAAM;CACN,OAAO;CACP,eAAe;CACf,cAAc;CACd,yBAAyB;CACzB,MAAM;CACN,mBAAmB;AACrB;AAEA,IAAa,SAAS;CACpB,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,MAAM;AACR;AAEA,IAAa,SAAS;CACpB,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,OAAO;AACT;AAEA,IAAa,WACX;AACF,IAAa,WACX;AAEF,IAAa,SAAS;CAAE;CAAO;CAAO;CAAM;CAAQ;CAAQ;CAAU;AAAS"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@burtson-labs/ui",
3
- "version": "0.2.0",
4
- "description": "Burtson UI: accessible React components on Radix and Tailwind, themed for Burtson Labs and paired with Burtson Icons. Install the package or copy the source with the shadcn CLI.",
3
+ "version": "0.3.0",
4
+ "description": "Burtson UI: a quiet, precise, dark-first React component system for agents, IDEs and ops tools. Accessible (Radix underneath), Tailwind-themed, Burtson Icons built in. Install the package or copy the source.",
5
5
  "license": "MIT",
6
6
  "author": {
7
7
  "name": "Burtson Labs",