Skip to content

Commit d75ec43

Browse files
authored
chore(design-system): sync Progress and Select to Claude Design (#663)
@uploads/ui grew from 12 to 14 components. Author previews for the two new components and add them to the conventions header so the design agent builds with them. - previews/Progress.tsx — labelled quota meter (Default, Levels, Percentage) - previews/Select.tsx — dark select (InField, Standalone, Compact) - conventions.md — document Progress and Select - NOTES.md — record the 12 to 14 change
1 parent cd9268a commit d75ec43

4 files changed

Lines changed: 91 additions & 5 deletions

File tree

.design-sync/NOTES.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,13 @@ restage by hand (or copy from main) in those worktrees.
7979
- 5 components use `cfg.overrides.<Name>.cardMode = "column"` (Button, Divider,
8080
Field, GalleryTile, Panel) to resolve `[GRID_OVERFLOW]` — their previews are wider
8181
than a grid cell. Not a warn once the override is applied.
82-
- No `[RENDER_THIN]` / `variants-identical` warns to record — all 22 cells graded good.
82+
- No `[RENDER_THIN]` / `variants-identical` warns to record — all cells graded good.
83+
- **Progress** and **Select** were added to `@uploads/ui` and authored on the
84+
2026-08-14 sync (`previews/Progress.tsx`, `previews/Select.tsx`) — 3 cells each,
85+
all graded good, no grid override needed (default card width fits). Select is a
86+
new export from `Field.tsx` (`ul-select` / compact `ul-select--sm`); Progress is
87+
its own file (`ul-progress__*`, `data-level` fill bands). Both added to
88+
`conventions.md`. That brought the DS from 12 → 14 components.
8389

8490
## Re-sync risks
8591

.design-sync/conventions.md

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,10 @@ There is **no utility-class vocabulary to author**. Style two ways only:
3636
- `Callout``tone` (`info | ready | error | muted`), `title`
3737
- `Badge``tone` (`neutral | accent | ok | danger`), `dot`
3838
- `Field``label`, `hint`, `invalid`
39+
- `Select` — a dark `<select>`; compact variant via `className="ul-select--sm"`
3940
- `Panel``title`, `description`, `roomy`
41+
- `Progress``label`, `value`, `max`, `detail` (a labelled quota meter; the
42+
fill goes quiet below 85%, warns near the cap, and turns `--accent` when full)
4043
- `Brand``size` (`md | lg`), `href`
4144
2. **Token overrides** for your own layout glue — set any `var(--*)` on a scope:
4245
- Surfaces: `--bg` (page), `--panel` (raised cards), `--line` (hairline borders)
@@ -58,7 +61,7 @@ for headings and body copy; `--pixel` only for brand moments.
5861

5962
## Components
6063

61-
`Surface` · `Brand` · `Button` · `Panel` · `Field` / `Input` / `Label` ·
62-
`Callout` · `Badge` · `Divider` · `GalleryTile` (a hosted image / PR-screenshot
63-
tile — the product's core object) · `FileBrowser` (a read-only, folder-aware
64-
files-sdk browser).
64+
`Surface` · `Brand` · `Button` · `Panel` · `Field` / `Input` / `Select` / `Label` ·
65+
`Progress` (a labelled quota / usage meter) · `Callout` · `Badge` · `Divider` ·
66+
`GalleryTile` (a hosted image / PR-screenshot tile — the product's core object) ·
67+
`FileBrowser` (a read-only, folder-aware files-sdk browser).

.design-sync/previews/Progress.tsx

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { Surface, Progress } from "@uploads/ui";
2+
3+
/** Two stacked quota meters — the shape of a workspace usage panel. */
4+
export function Default() {
5+
return (
6+
<Surface style={{ padding: 28, width: 380 }}>
7+
<div className="ul-progress">
8+
<Progress label="Storage" detail="3.2 GB of 25 GB" value={3.2} max={25} />
9+
<Progress label="Uploads this month" detail="420 of 10,000" value={420} max={10000} />
10+
</div>
11+
</Surface>
12+
);
13+
}
14+
15+
/** The fill bands: quiet below 85%, warm near the cap, accent when full. */
16+
export function Levels() {
17+
return (
18+
<Surface style={{ padding: 28, width: 380 }}>
19+
<div className="ul-progress">
20+
<Progress label="Bandwidth" detail="12 GB of 100 GB" value={12} max={100} />
21+
<Progress label="Storage" detail="22.4 GB of 25 GB" value={22.4} max={25} />
22+
<Progress label="Seats" detail="5 of 5" value={5} max={5} />
23+
</div>
24+
</Surface>
25+
);
26+
}
27+
28+
/** Percentage mode — omit `max` and the bar reads 0–100. */
29+
export function Percentage() {
30+
return (
31+
<Surface style={{ padding: 28, width: 380 }}>
32+
<Progress label="Upload progress" detail="68%" value={68} />
33+
</Surface>
34+
);
35+
}

.design-sync/previews/Select.tsx

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { Surface, Field, Select } from "@uploads/ui";
2+
3+
/** The canonical composition — a `Select` inside a labelled `Field`. */
4+
export function InField() {
5+
return (
6+
<Surface style={{ padding: 28, width: 320 }}>
7+
<Field label="Role" hint="Controls what this member can change.">
8+
<Select defaultValue="member">
9+
<option value="member">member</option>
10+
<option value="admin">admin</option>
11+
<option value="owner">owner</option>
12+
</Select>
13+
</Field>
14+
</Surface>
15+
);
16+
}
17+
18+
/** Standalone — the same box as `Input`, with a drawn caret. */
19+
export function Standalone() {
20+
return (
21+
<Surface style={{ padding: 28, width: 300 }}>
22+
<Select defaultValue="private">
23+
<option value="private">private</option>
24+
<option value="unlisted">unlisted</option>
25+
<option value="public">public</option>
26+
</Select>
27+
</Surface>
28+
);
29+
}
30+
31+
/** The compact `ul-select--sm` variant used in dense rows and tables. */
32+
export function Compact() {
33+
return (
34+
<Surface style={{ padding: 28, width: 220 }}>
35+
<Select className="ul-select--sm" defaultValue="30d">
36+
<option value="7d">7 days</option>
37+
<option value="30d">30 days</option>
38+
<option value="90d">90 days</option>
39+
</Select>
40+
</Surface>
41+
);
42+
}

0 commit comments

Comments
 (0)