@botiverse/raft-ui 0.0.0-stage → 0.7.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 (41) hide show
  1. package/CHANGELOG.md +561 -0
  2. package/LICENSE +21 -0
  3. package/README.md +103 -2
  4. package/codemods/package-name.mjs +166 -0
  5. package/codemods/token-names.mjs +150 -0
  6. package/dist/cn.d.mts +5 -0
  7. package/dist/cn.mjs +48 -0
  8. package/dist/components/combobox-select/combobox-select.css +286 -0
  9. package/dist/components/float-button/float-button.css +316 -0
  10. package/dist/components/steps/otter-indicator.css +141 -0
  11. package/dist/components/steps/steps.css +370 -0
  12. package/dist/components/timeline/timeline.css +255 -0
  13. package/dist/dialog-CY6S-Xqf.mjs +505 -0
  14. package/dist/fonts.css +13 -0
  15. package/dist/foundation.css +623 -0
  16. package/dist/index-B3_j9XYd.d.mts +329 -0
  17. package/dist/index.d.mts +5114 -0
  18. package/dist/index.mjs +16442 -0
  19. package/dist/style.css +1315 -0
  20. package/dist/styles.css +391 -0
  21. package/dist/tokens.json +3811 -0
  22. package/dist/wip.d.mts +92 -0
  23. package/dist/wip.mjs +517 -0
  24. package/package.json +92 -3
  25. package/skills/raft-ui-critique/SKILL.md +167 -0
  26. package/skills/raft-ui-critique/agents/openai.yaml +4 -0
  27. package/skills/raft-ui-critique/references/theme-lenses.md +69 -0
  28. package/skills/raft-ui-guide/SKILL.md +96 -0
  29. package/skills/raft-ui-guide/agents/openai.yaml +4 -0
  30. package/skills/raft-ui-guide/rules/adoption.md +55 -0
  31. package/skills/raft-ui-guide/rules/composition.md +14 -0
  32. package/skills/raft-ui-guide/rules/conversation.md +15 -0
  33. package/skills/raft-ui-guide/rules/display.md +14 -0
  34. package/skills/raft-ui-guide/rules/feedback.md +13 -0
  35. package/skills/raft-ui-guide/rules/forms.md +13 -0
  36. package/skills/raft-ui-guide/rules/layout.md +15 -0
  37. package/skills/raft-ui-guide/rules/lookup.md +78 -0
  38. package/skills/raft-ui-guide/rules/overlays.md +13 -0
  39. package/skills/raft-ui-guide/rules/overview.md +30 -0
  40. package/skills/raft-ui-guide/rules/styling.md +17 -0
  41. package/skills/raft-ui-guide/rules/technical-overview.md +80 -0
@@ -0,0 +1,391 @@
1
+ @import "./components/combobox-select/combobox-select.css";
2
+ @import "./foundation.css";
3
+ @import "./components/float-button/float-button.css";
4
+ @import "./components/timeline/timeline.css";
5
+ @import "./components/steps/steps.css";
6
+ @import "./components/steps/otter-indicator.css";
7
+
8
+ /* `dark:` follows the nearest explicit mode class, and before hydration the
9
+ system preference. A `.light` island inside a dark page re-enters light
10
+ context for its subtree (one level of nesting). */
11
+ @custom-variant dark {
12
+ &:where(:is(.dark, .dark *):not(:where(.dark .light, .dark .light *))) {
13
+ @slot;
14
+ }
15
+ @media (prefers-color-scheme: dark) {
16
+ &:where(
17
+ :is(:root:not(.light):not(.dark), :root:not(.light):not(.dark) *):not(
18
+ :where(:root:not(.light):not(.dark) .light, :root:not(.light):not(.dark) .light *)
19
+ )
20
+ ) {
21
+ @slot;
22
+ }
23
+ }
24
+ }
25
+
26
+ @theme {
27
+ --color-black: oklch(0 0 0);
28
+ --color-white: oklch(1 0 0);
29
+
30
+ /* Bare palette utilities (`bg-palette-yellow`). The numbered ramps
31
+ (`--palette-yellow-400`) are plain variables in foundation.css and
32
+ deliberately not utilities; reach for semantic tokens first. */
33
+ --color-palette-yellow: var(--palette-yellow-400);
34
+ --color-palette-lavender: var(--palette-lavender-400);
35
+ --color-palette-pink: var(--palette-pink-400);
36
+ --color-palette-cyan: var(--palette-cyan-400);
37
+ --color-palette-orange: var(--palette-orange-400);
38
+ --color-palette-lime: var(--palette-lime-400);
39
+ --color-palette-red: var(--palette-red-400);
40
+ --color-palette-stone: var(--palette-stone-400);
41
+ --color-palette-cream: var(--palette-cream-200);
42
+
43
+ --ease-slide: cubic-bezier(0.32, 0.72, 0, 1);
44
+
45
+ /* Raft Design System shape scale: pixels are hard, containers are soft.
46
+ sticker = avatars, channel tiles, checkboxes, counts, inline marks;
47
+ chip = 22px tags and status chips; control = buttons, fields, rows, menu
48
+ items; container = cards, menus, composer, banners; dialog = dialogs and
49
+ sheet tops. Round (rounded-full) is only for switches and radios. */
50
+ --radius-sticker: 4px;
51
+ --radius-chip: 6px;
52
+ --radius-control: 8px;
53
+ --radius-container: 10px;
54
+ --radius-dialog: 16px;
55
+
56
+ /* Raft Design System type styles (size / line-height / weight). Grotesk is
57
+ what people say; pair the mono styles with `font-mono` for what machines
58
+ write (ids, times, counts, events, code). */
59
+ --text-hero: 40px;
60
+ --text-hero--line-height: 44px;
61
+ --text-hero--font-weight: 700;
62
+ --text-hero--letter-spacing: -0.03em;
63
+ --text-display: 34px;
64
+ --text-display--line-height: 40px;
65
+ --text-display--font-weight: 700;
66
+ --text-display--letter-spacing: -0.02em;
67
+ --text-title: 22px;
68
+ --text-title--line-height: 28px;
69
+ --text-title--font-weight: 700;
70
+ --text-title--letter-spacing: -0.01em;
71
+ --text-headline: 17px;
72
+ --text-headline--line-height: 22px;
73
+ --text-headline--font-weight: 700;
74
+ --text-body: 16px;
75
+ --text-body--line-height: 24px;
76
+ --text-subhead: 15px;
77
+ --text-subhead--line-height: 20px;
78
+ --text-callout: 14px;
79
+ --text-callout--line-height: 20px;
80
+ --text-footnote: 13px;
81
+ --text-footnote--line-height: 18px;
82
+ --text-caption: 12px;
83
+ --text-caption--line-height: 16px;
84
+ --text-caption--font-weight: 500;
85
+ --text-label: 11px;
86
+ --text-label--line-height: 13px;
87
+ --text-label--font-weight: 600;
88
+ --text-mono-meta: 12px;
89
+ --text-mono-meta--line-height: 16px;
90
+ --text-mono-code: 13px;
91
+ --text-mono-code--line-height: 20px;
92
+
93
+ /* Deprecated utility names, kept until raft-ui 1.0 (see codemods/token-names.mjs). */
94
+ --color-brutal-yellow: var(--palette-yellow-400);
95
+ --color-soft-signal: var(--palette-yellow-400);
96
+ --color-brutal-lavender: var(--palette-lavender-400);
97
+ --color-brutal-pink: var(--palette-pink-400);
98
+ --color-brutal-cyan: var(--palette-cyan-400);
99
+ --color-brutal-orange: var(--palette-orange-400);
100
+ --color-brutal-lime: var(--palette-lime-400);
101
+ --color-brutal-red: var(--palette-red-400);
102
+ --color-brutal-stone: var(--palette-stone-400);
103
+ --color-brutal-cream: var(--palette-cream-200);
104
+ }
105
+
106
+ @theme inline {
107
+ --color-foreground: var(--foreground);
108
+ --color-foreground-muted: var(--foreground-muted);
109
+ --color-foreground-hint: var(--foreground-hint);
110
+ --color-foreground-disabled: var(--foreground-disabled);
111
+ --color-foreground-inverse: var(--foreground-inverse);
112
+ --color-foreground-active: var(--foreground-active);
113
+ --color-foreground-hover: var(--foreground-hover);
114
+
115
+ --color-layer-canvas: var(--layer-canvas);
116
+ --color-layer-sidebar: var(--layer-sidebar);
117
+ --color-layer-popover: var(--layer-popover);
118
+ --color-layer-backdrop: var(--layer-backdrop);
119
+ --color-layer-card: var(--layer-card);
120
+ --color-layer-hud: var(--layer-hud);
121
+ --color-foreground-on-hud: var(--foreground-on-hud);
122
+ --color-foreground-on-hud-muted: var(--foreground-on-hud-muted);
123
+
124
+ --color-fill-muted: var(--fill-muted);
125
+ --color-fill-strong: var(--fill-strong);
126
+
127
+ --color-line-strong: var(--line-strong);
128
+ --color-line-hairline: var(--line-hairline);
129
+ --color-line-field: var(--line-field);
130
+ --color-line-field-hover: var(--line-field-hover);
131
+
132
+ --color-ink: var(--ink);
133
+ --color-ink-2: var(--ink-2);
134
+ --color-ink-4: var(--ink-4);
135
+ --color-ink-6: var(--ink-6);
136
+ --color-ink-8: var(--ink-8);
137
+ --color-ink-10: var(--ink-10);
138
+ --color-ink-16: var(--ink-16);
139
+ --color-ink-20: var(--ink-20);
140
+ --color-ink-30: var(--ink-30);
141
+ --color-ink-40: var(--ink-40);
142
+
143
+ --color-brand: var(--brand-400);
144
+ --color-brand-50: var(--brand-50);
145
+ --color-brand-100: var(--brand-100);
146
+ --color-brand-200: var(--brand-200);
147
+ --color-brand-300: var(--brand-300);
148
+ --color-brand-400: var(--brand-400);
149
+ --color-brand-500: var(--brand-500);
150
+ --color-brand-600: var(--brand-600);
151
+ --color-brand-700: var(--brand-700);
152
+ --color-brand-800: var(--brand-800);
153
+ --color-brand-900: var(--brand-900);
154
+ --color-brand-950: var(--brand-950);
155
+ --color-brand-strong: var(--brand-strong);
156
+ --color-brand-soft: var(--brand-soft);
157
+ --color-brand-hover: var(--brand-hover);
158
+ --color-brand-active: var(--brand-active);
159
+
160
+ --color-attention: var(--attention-400);
161
+ --color-attention-50: var(--attention-50);
162
+ --color-attention-100: var(--attention-100);
163
+ --color-attention-200: var(--attention-200);
164
+ --color-attention-300: var(--attention-300);
165
+ --color-attention-400: var(--attention-400);
166
+ --color-attention-500: var(--attention-500);
167
+ --color-attention-600: var(--attention-600);
168
+ --color-attention-700: var(--attention-700);
169
+ --color-attention-800: var(--attention-800);
170
+ --color-attention-900: var(--attention-900);
171
+ --color-attention-950: var(--attention-950);
172
+ --color-attention-strong: var(--attention-strong);
173
+ --color-attention-soft: var(--attention-soft);
174
+ --color-attention-hover: var(--attention-hover);
175
+ --color-attention-active: var(--attention-active);
176
+
177
+ --color-info: var(--info);
178
+ --color-info-strong: var(--info-strong);
179
+ --color-info-muted: var(--info-muted);
180
+ --color-info-soft: var(--info-soft);
181
+ --color-info-hover: var(--info-hover);
182
+ --color-info-active: var(--info-active);
183
+
184
+ --color-success: var(--success);
185
+ --color-success-foreground: var(--success-foreground);
186
+ --color-success-strong: var(--success-strong);
187
+ --color-success-muted: var(--success-muted);
188
+ --color-success-soft: var(--success-soft);
189
+
190
+ --color-warning: var(--warning);
191
+ --color-warning-foreground: var(--warning-foreground);
192
+ --color-warning-strong: var(--warning-strong);
193
+ --color-warning-muted: var(--warning-muted);
194
+ --color-warning-soft: var(--warning-soft);
195
+ --color-warning-hover: var(--warning-hover);
196
+ --color-warning-active: var(--warning-active);
197
+
198
+ --color-danger: var(--danger);
199
+ --color-danger-foreground: var(--danger-foreground);
200
+ --color-danger-strong: var(--danger-strong);
201
+ --color-danger-muted: var(--danger-muted);
202
+ --color-danger-soft: var(--danger-soft);
203
+ --color-danger-hover: var(--danger-hover);
204
+ --color-danger-active: var(--danger-active);
205
+
206
+ --color-inactive: var(--inactive);
207
+ --color-inactive-foreground: var(--inactive-foreground);
208
+ --color-inactive-soft: var(--inactive-soft);
209
+
210
+ /* Raft Design System roles (stamped by every theme scope). */
211
+ --color-line-seam: var(--line-seam);
212
+ --color-layer-frame: var(--layer-frame);
213
+ --color-layer-frame-active: var(--layer-frame-active);
214
+ --color-line-frame-active: var(--line-frame-active);
215
+ --color-foreground-on-frame: var(--foreground-on-frame);
216
+ --color-foreground-on-frame-muted: var(--foreground-on-frame-muted);
217
+ --color-foreground-on-frame-active: var(--foreground-on-frame-active);
218
+ --color-fill-frame-pressed: var(--fill-frame-pressed);
219
+ --color-fill-pressed: var(--fill-pressed);
220
+ --color-layer-code: var(--layer-code);
221
+ --color-foreground-link: var(--foreground-link);
222
+ --color-sticker-ink: var(--sticker-ink);
223
+ --color-sticker-paper: var(--sticker-paper);
224
+ --color-sticker-edge: var(--sticker-edge);
225
+ --color-sticker-pressed: var(--sticker-pressed);
226
+ --color-presence-online: var(--presence-online);
227
+ --color-presence-busy: var(--presence-busy);
228
+ --color-presence-error: var(--presence-error);
229
+ --color-presence-offline: var(--presence-offline);
230
+ --color-presence-external: var(--presence-external);
231
+
232
+ /* Task-status scale for Tailwind (`bg-task-status-todo`, `text-task-status-*`,
233
+ …). One slot per state plus its soft wash / strong ink; all four theme
234
+ scopes in foundation.css define the underlying values. */
235
+ --color-task-status-todo: var(--task-status-todo);
236
+ --color-task-status-todo-soft: var(--task-status-todo-soft);
237
+ --color-task-status-todo-strong: var(--task-status-todo-strong);
238
+ --color-task-status-in-progress: var(--task-status-in-progress);
239
+ --color-task-status-in-progress-soft: var(--task-status-in-progress-soft);
240
+ --color-task-status-in-progress-strong: var(--task-status-in-progress-strong);
241
+ --color-task-status-in-review: var(--task-status-in-review);
242
+ --color-task-status-in-review-soft: var(--task-status-in-review-soft);
243
+ --color-task-status-in-review-strong: var(--task-status-in-review-strong);
244
+ --color-task-status-done: var(--task-status-done);
245
+ --color-task-status-done-soft: var(--task-status-done-soft);
246
+ --color-task-status-done-strong: var(--task-status-done-strong);
247
+ --color-task-status-closed: var(--task-status-closed);
248
+ --color-task-status-closed-soft: var(--task-status-closed-soft);
249
+ --color-task-status-closed-strong: var(--task-status-closed-strong);
250
+
251
+ --shadow-float: var(--elevation-float);
252
+ --shadow-sticker: var(--elevation-sticker);
253
+ --shadow-focus: var(--focus-ring);
254
+
255
+ --font-heading: var(--heading-font, system-ui, sans-serif);
256
+ --font-sans: var(--sans-font, system-ui, sans-serif);
257
+ --font-mono: var(--mono-font, ui-monospace, monospace);
258
+ /* ─── Field metric axis ─────────────────────────────────────────────────────
259
+ The first non-colour token axis in this file. It exists because a form
260
+ field had no declared metrics at all: `Input` got its height from `py-2`
261
+ plus inherited line-height, `SelectTrigger` borrowed the Button size scale
262
+ because it is built on Button, and a Select popup declared its own
263
+ typography with no relation to the field it belongs to. Three components,
264
+ three different sizes for the same value.
265
+
266
+ Consumers: `Input`, `Textarea`, the field variant of `SelectTrigger`, and
267
+ Select popup options. Textarea shares the Input typography contract while
268
+ retaining its independent min-height and resize behavior. Options share
269
+ font-size/weight/line-height with the trigger so a value does not change
270
+ size when the list opens; their height and padding stay independent,
271
+ because a list row is not a control and must not be stretched to the
272
+ field's height.
273
+
274
+ Raft's Select contract, not an industry rule — both conventions exist. */
275
+ --text-field: var(--field-font-size);
276
+ --text-field--line-height: var(--field-line-height);
277
+ --font-weight-field: var(--field-font-weight);
278
+ /* ─── Card-title metric axis ────────────────────────────────────────────────
279
+ Same pattern as the field axis, for CardTitle. Consumers that vertically
280
+ align a control (radio, checkbox) with a card title need the title's
281
+ line-height to size the alignment container — without it, the value must
282
+ be hard-coded per theme and drifts when the title recipe changes.
283
+
284
+ Consumers: `CardTitle`, plus any composition that lays a control beside a
285
+ card title (radio-card and checkbox-card patterns in the Raft web app). */
286
+ --text-card-title: var(--card-title-font-size);
287
+ --text-card-title--line-height: var(--card-title-line-height);
288
+ --font-weight-card-title: var(--card-title-font-weight);
289
+
290
+ /* Deprecated utility names, kept until raft-ui 1.0 (see codemods/token-names.mjs). */
291
+ --color-foreground-strong: var(--foreground);
292
+ --color-foreground-icon: var(--foreground-muted);
293
+ --color-foreground-placeholder: var(--foreground-hint);
294
+ --color-layer-canvas-muted: var(--layer-sidebar);
295
+ --color-layer-panel: var(--layer-canvas);
296
+ --color-layer-inset: var(--fill-muted);
297
+ --color-layer-hud-foreground: var(--foreground-on-hud);
298
+ --color-line: var(--line-seam);
299
+ --color-line-muted: var(--line-hairline);
300
+ --color-primary: var(--brand-400);
301
+ --color-primary-50: var(--brand-50);
302
+ --color-primary-100: var(--brand-100);
303
+ --color-primary-200: var(--brand-200);
304
+ --color-primary-300: var(--brand-300);
305
+ --color-primary-400: var(--brand-400);
306
+ --color-primary-500: var(--brand-500);
307
+ --color-primary-600: var(--brand-600);
308
+ --color-primary-700: var(--brand-700);
309
+ --color-primary-800: var(--brand-800);
310
+ --color-primary-900: var(--brand-900);
311
+ --color-primary-950: var(--brand-950);
312
+ --color-primary-strong: var(--brand-strong);
313
+ --color-primary-soft: var(--brand-soft);
314
+ --color-primary-hover: var(--brand-hover);
315
+ --color-primary-active: var(--brand-active);
316
+ --color-accent: var(--attention-400);
317
+ --color-accent-50: var(--attention-50);
318
+ --color-accent-100: var(--attention-100);
319
+ --color-accent-200: var(--attention-200);
320
+ --color-accent-300: var(--attention-300);
321
+ --color-accent-400: var(--attention-400);
322
+ --color-accent-500: var(--attention-500);
323
+ --color-accent-600: var(--attention-600);
324
+ --color-accent-700: var(--attention-700);
325
+ --color-accent-800: var(--attention-800);
326
+ --color-accent-900: var(--attention-900);
327
+ --color-accent-950: var(--attention-950);
328
+ --color-accent-strong: var(--attention-strong);
329
+ --color-accent-soft: var(--attention-soft);
330
+ --color-accent-hover: var(--attention-hover);
331
+ --color-accent-active: var(--attention-active);
332
+ --color-secondary: var(--secondary-400);
333
+ --color-secondary-50: var(--secondary-50);
334
+ --color-secondary-100: var(--secondary-100);
335
+ --color-secondary-200: var(--secondary-200);
336
+ --color-secondary-300: var(--secondary-300);
337
+ --color-secondary-400: var(--secondary-400);
338
+ --color-secondary-500: var(--secondary-500);
339
+ --color-secondary-600: var(--secondary-600);
340
+ --color-secondary-700: var(--secondary-700);
341
+ --color-secondary-800: var(--secondary-800);
342
+ --color-secondary-900: var(--secondary-900);
343
+ --color-secondary-950: var(--secondary-950);
344
+ --shadow-raft-xs: var(--theme-shadow-xs);
345
+ --shadow-raft-sm: var(--theme-shadow-sm);
346
+ --shadow-raft-md: var(--theme-shadow-md);
347
+ --shadow-raft-lg: var(--elevation-float);
348
+ --shadow-raft-xl: var(--elevation-float);
349
+ --shadow-raft-float: var(--elevation-float);
350
+ --shadow-raft-sticker: var(--elevation-sticker);
351
+ --shadow-raft-focus: var(--focus-ring);
352
+ }
353
+
354
+ *,
355
+ ::before,
356
+ ::after {
357
+ -webkit-font-smoothing: antialiased;
358
+ -moz-osx-font-smoothing: grayscale;
359
+ }
360
+
361
+ body {
362
+ position: relative;
363
+ }
364
+
365
+ @utility image-transparency-bg {
366
+ --checker-cell: light-dark(oklch(0.1813 0.00497 17.62 / 0.12), oklch(1 0 0 / 0.1));
367
+ background-color: light-dark(oklch(1 0 0), oklch(0.23 0 0));
368
+ background-image:
369
+ linear-gradient(45deg, var(--checker-cell) 25%, transparent 25%),
370
+ linear-gradient(-45deg, var(--checker-cell) 25%, transparent 25%),
371
+ linear-gradient(45deg, transparent 75%, var(--checker-cell) 75%),
372
+ linear-gradient(-45deg, transparent 75%, var(--checker-cell) 75%);
373
+ background-position:
374
+ 0 0,
375
+ 0 8px,
376
+ 8px -8px,
377
+ -8px 0;
378
+ background-size: 16px 16px;
379
+ }
380
+
381
+ /* Raft Design System press feedback: hover and press lay one overlay over the
382
+ resting colour instead of swapping it, so a control keeps its identity.
383
+ Paper controls take the 8% ink wash (fill-pressed); colour stickers take
384
+ sticker-pressed (12% ink in both modes). */
385
+ @utility press-overlay {
386
+ background-image: linear-gradient(var(--fill-pressed), var(--fill-pressed));
387
+ }
388
+
389
+ @utility press-overlay-sticker {
390
+ background-image: linear-gradient(var(--sticker-pressed), var(--sticker-pressed));
391
+ }