@vegastack/design 0.6.0 → 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.
- package/dist/{chunk-42HJ4OYZ.js → chunk-MSOIZXDR.js} +16 -2
- package/dist/create-animated-icon.js +1 -1
- package/dist/icons/index.js +1 -1
- package/dist/index.cjs +16 -2
- package/dist/index.d.cts +16 -2
- package/dist/index.d.ts +16 -2
- package/dist/index.js +1 -1
- package/package.json +3 -3
- package/skills/vegastack-design-audit/SKILL.md +16 -4
- package/skills/vegastack-design-system/SKILL.md +14 -14
- package/skills/vegastack-design-system/references/components.md +2 -2
|
@@ -4,8 +4,22 @@ import { twMerge as tailwindMerge } from "tailwind-merge";
|
|
|
4
4
|
|
|
5
5
|
// src/prose.ts
|
|
6
6
|
var prose = {
|
|
7
|
-
/**
|
|
8
|
-
|
|
7
|
+
/**
|
|
8
|
+
* The root's own FAMILY, ink and size — every rule below is relative to this.
|
|
9
|
+
*
|
|
10
|
+
* `font-sans` is load-bearing and was missing. A prose root has to be self-describing, because
|
|
11
|
+
* neither of its two consumers sets a family of its own: `MarkdownView` and `TextEdit` both wear
|
|
12
|
+
* nothing but `proseClassName`. With no family declared here, prose inherited whatever surrounded
|
|
13
|
+
* it — drop either surface inside a mono container (`terminal-body` is one in this very
|
|
14
|
+
* registry, and a chat or log panel is the obvious consumer case) and the WHOLE tree went mono:
|
|
15
|
+
* headings, paragraphs, table cells, and the `1.` / `2.` markers of an ordered list, because
|
|
16
|
+
* `::marker` inherits font properties from its originating element.
|
|
17
|
+
*
|
|
18
|
+
* Geist Mono is now the exception the recipe names explicitly — `code`, `pre` and `pre code` —
|
|
19
|
+
* rather than something prose falls into by accident. A consumer who genuinely wants mono prose
|
|
20
|
+
* still says so on the root, where it reads as a decision.
|
|
21
|
+
*/
|
|
22
|
+
root: "font-sans text-sm text-foreground",
|
|
9
23
|
// Headings. `scroll-m-20` keeps an anchored heading clear of a sticky header; the weight is
|
|
10
24
|
// `font-semibold`, the ordinary Tailwind weight upstream uses — Batch 1 of the shadcn reset
|
|
11
25
|
// deleted both the 400/500 ladder and the `text-h*` roles this comment used to name.
|
package/dist/icons/index.js
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -33,8 +33,22 @@ var import_tailwind_merge = require("tailwind-merge");
|
|
|
33
33
|
|
|
34
34
|
// src/prose.ts
|
|
35
35
|
var prose = {
|
|
36
|
-
/**
|
|
37
|
-
|
|
36
|
+
/**
|
|
37
|
+
* The root's own FAMILY, ink and size — every rule below is relative to this.
|
|
38
|
+
*
|
|
39
|
+
* `font-sans` is load-bearing and was missing. A prose root has to be self-describing, because
|
|
40
|
+
* neither of its two consumers sets a family of its own: `MarkdownView` and `TextEdit` both wear
|
|
41
|
+
* nothing but `proseClassName`. With no family declared here, prose inherited whatever surrounded
|
|
42
|
+
* it — drop either surface inside a mono container (`terminal-body` is one in this very
|
|
43
|
+
* registry, and a chat or log panel is the obvious consumer case) and the WHOLE tree went mono:
|
|
44
|
+
* headings, paragraphs, table cells, and the `1.` / `2.` markers of an ordered list, because
|
|
45
|
+
* `::marker` inherits font properties from its originating element.
|
|
46
|
+
*
|
|
47
|
+
* Geist Mono is now the exception the recipe names explicitly — `code`, `pre` and `pre code` —
|
|
48
|
+
* rather than something prose falls into by accident. A consumer who genuinely wants mono prose
|
|
49
|
+
* still says so on the root, where it reads as a decision.
|
|
50
|
+
*/
|
|
51
|
+
root: "font-sans text-sm text-foreground",
|
|
38
52
|
// Headings. `scroll-m-20` keeps an anchored heading clear of a sticky header; the weight is
|
|
39
53
|
// `font-semibold`, the ordinary Tailwind weight upstream uses — Batch 1 of the shadcn reset
|
|
40
54
|
// deleted both the 400/500 ladder and the `text-h*` roles this comment used to name.
|
package/dist/index.d.cts
CHANGED
|
@@ -40,8 +40,22 @@ import * as React from 'react';
|
|
|
40
40
|
* <div className={cn(prose.root, prose.p, prose.code)} />
|
|
41
41
|
*/
|
|
42
42
|
declare const prose: {
|
|
43
|
-
/**
|
|
44
|
-
|
|
43
|
+
/**
|
|
44
|
+
* The root's own FAMILY, ink and size — every rule below is relative to this.
|
|
45
|
+
*
|
|
46
|
+
* `font-sans` is load-bearing and was missing. A prose root has to be self-describing, because
|
|
47
|
+
* neither of its two consumers sets a family of its own: `MarkdownView` and `TextEdit` both wear
|
|
48
|
+
* nothing but `proseClassName`. With no family declared here, prose inherited whatever surrounded
|
|
49
|
+
* it — drop either surface inside a mono container (`terminal-body` is one in this very
|
|
50
|
+
* registry, and a chat or log panel is the obvious consumer case) and the WHOLE tree went mono:
|
|
51
|
+
* headings, paragraphs, table cells, and the `1.` / `2.` markers of an ordered list, because
|
|
52
|
+
* `::marker` inherits font properties from its originating element.
|
|
53
|
+
*
|
|
54
|
+
* Geist Mono is now the exception the recipe names explicitly — `code`, `pre` and `pre code` —
|
|
55
|
+
* rather than something prose falls into by accident. A consumer who genuinely wants mono prose
|
|
56
|
+
* still says so on the root, where it reads as a decision.
|
|
57
|
+
*/
|
|
58
|
+
readonly root: "font-sans text-sm text-foreground";
|
|
45
59
|
readonly h1: "[&_h1]:mt-6 [&_h1]:mb-3 [&_h1]:scroll-m-20 [&_h1]:text-3xl [&_h1]:font-semibold [&_h1]:text-foreground [&_h1]:first:mt-0";
|
|
46
60
|
readonly h2: "[&_h2]:mt-6 [&_h2]:mb-3 [&_h2]:scroll-m-20 [&_h2]:text-2xl [&_h2]:font-semibold [&_h2]:text-foreground [&_h2]:first:mt-0";
|
|
47
61
|
readonly h3: "[&_h3]:mt-5 [&_h3]:mb-2 [&_h3]:scroll-m-20 [&_h3]:text-xl [&_h3]:font-semibold [&_h3]:text-foreground [&_h3]:first:mt-0";
|
package/dist/index.d.ts
CHANGED
|
@@ -40,8 +40,22 @@ import * as React from 'react';
|
|
|
40
40
|
* <div className={cn(prose.root, prose.p, prose.code)} />
|
|
41
41
|
*/
|
|
42
42
|
declare const prose: {
|
|
43
|
-
/**
|
|
44
|
-
|
|
43
|
+
/**
|
|
44
|
+
* The root's own FAMILY, ink and size — every rule below is relative to this.
|
|
45
|
+
*
|
|
46
|
+
* `font-sans` is load-bearing and was missing. A prose root has to be self-describing, because
|
|
47
|
+
* neither of its two consumers sets a family of its own: `MarkdownView` and `TextEdit` both wear
|
|
48
|
+
* nothing but `proseClassName`. With no family declared here, prose inherited whatever surrounded
|
|
49
|
+
* it — drop either surface inside a mono container (`terminal-body` is one in this very
|
|
50
|
+
* registry, and a chat or log panel is the obvious consumer case) and the WHOLE tree went mono:
|
|
51
|
+
* headings, paragraphs, table cells, and the `1.` / `2.` markers of an ordered list, because
|
|
52
|
+
* `::marker` inherits font properties from its originating element.
|
|
53
|
+
*
|
|
54
|
+
* Geist Mono is now the exception the recipe names explicitly — `code`, `pre` and `pre code` —
|
|
55
|
+
* rather than something prose falls into by accident. A consumer who genuinely wants mono prose
|
|
56
|
+
* still says so on the root, where it reads as a decision.
|
|
57
|
+
*/
|
|
58
|
+
readonly root: "font-sans text-sm text-foreground";
|
|
45
59
|
readonly h1: "[&_h1]:mt-6 [&_h1]:mb-3 [&_h1]:scroll-m-20 [&_h1]:text-3xl [&_h1]:font-semibold [&_h1]:text-foreground [&_h1]:first:mt-0";
|
|
46
60
|
readonly h2: "[&_h2]:mt-6 [&_h2]:mb-3 [&_h2]:scroll-m-20 [&_h2]:text-2xl [&_h2]:font-semibold [&_h2]:text-foreground [&_h2]:first:mt-0";
|
|
47
61
|
readonly h3: "[&_h3]:mt-5 [&_h3]:mb-2 [&_h3]:scroll-m-20 [&_h3]:text-xl [&_h3]:font-semibold [&_h3]:text-foreground [&_h3]:first:mt-0";
|
package/dist/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vegastack/design",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "VegaStack design system — cn utility, icon runtime, Tailwind v4 preset, and the vegastack-design CLI (tokens ship separately as @vegastack/design-tokens)",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
"test": "node test/compare.test.mjs && node test/check-updates.test.mjs && node test/skills-install.test.mjs"
|
|
71
71
|
},
|
|
72
72
|
"dependencies": {
|
|
73
|
-
"@vegastack/design-tokens": "
|
|
73
|
+
"@vegastack/design-tokens": "^0.7.0",
|
|
74
74
|
"clsx": "^2.1.1",
|
|
75
75
|
"tailwind-merge": "^3.6.0",
|
|
76
76
|
"tsconfig-paths": "^4.2.0",
|
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
"lucide-react": "^1.47.0",
|
|
83
83
|
"motion": "^13.2.0",
|
|
84
84
|
"thesvg": "^3.2.6",
|
|
85
|
-
"tailwindcss": "
|
|
85
|
+
"tailwindcss": "^4.3.3"
|
|
86
86
|
},
|
|
87
87
|
"peerDependenciesMeta": {
|
|
88
88
|
"tailwindcss": {
|
|
@@ -79,10 +79,22 @@ rg -n 'ring-3\b|ring-\[3px\]|ring-ring/[0-9]+|focus-visible:ring-|shadow-\[0_0_0
|
|
|
79
79
|
- `React.forwardRef` — React 19 takes `ref` as a normal prop. **error**
|
|
80
80
|
|
|
81
81
|
**Things that are NOT findings any more**, and reporting them is noise: `rounded-xl`, `shadow-md`,
|
|
82
|
-
`text-4xl`, `font-semibold`, `
|
|
83
|
-
`
|
|
84
|
-
|
|
85
|
-
|
|
82
|
+
`text-4xl`, `font-semibold`, `transition-all`, `transition-colors`, `duration-100`, `ease-in-out`,
|
|
83
|
+
`z-50`, `opacity-50`, a raw `/NN` alpha, `h-8`/`size-4`, `cursor-default` on a menu row, an
|
|
84
|
+
arbitrary `h-[18.4px]`, and a `hover:` with no `active:` beside it. Every one of those is upstream's
|
|
85
|
+
own vocabulary, which this system now adopts.
|
|
86
|
+
|
|
87
|
+
**`tracking-tight` left that list on 2026-09-22 and IS a finding again.** The `@theme` bridge now
|
|
88
|
+
declares the heading tier's letter-spacing per size, and Tailwind compiles it as
|
|
89
|
+
`letter-spacing: var(--tw-tracking, …)` — so a local `tracking-*` silently beats the ramp and that
|
|
90
|
+
element stops matching the system. Only `tracking-widest` (a keyboard-shortcut hint) is allowed.
|
|
91
|
+
Two more in the same family:
|
|
92
|
+
|
|
93
|
+
- an arbitrary font size (`text-[13px]`, `text-[0.8rem]`) — it bypasses the `--text-*` namespace and
|
|
94
|
+
receives neither the ramp's line-height nor its letter-spacing. **error**
|
|
95
|
+
- the `uppercase` utility or a `textTransform: "uppercase"` — this system is sentence case
|
|
96
|
+
everywhere, and the transform rewrites whatever it is handed (it once turned the token name
|
|
97
|
+
`--text-lg` into `--TEXT-LG`). If a string is uppercase, write it uppercase. **error**
|
|
86
98
|
|
|
87
99
|
## 3b. Names and tokens the shadcn reset removed
|
|
88
100
|
|
|
@@ -83,20 +83,20 @@ info`, each an ink on the `card` surface with a required icon; **`announcement-b
|
|
|
83
83
|
Semantic CSS custom properties from `@vegastack/design-tokens/theme.css` (OKLCH, `:root` + `.dark`),
|
|
84
84
|
on shadcn's `neutral` base. Always use the utility, never a raw value.
|
|
85
85
|
|
|
86
|
-
| Role | Utilities
|
|
87
|
-
| -------- |
|
|
88
|
-
| Surface | `bg-background` (page) · `bg-card` · `bg-popover` · `bg-sidebar`
|
|
89
|
-
| Fill | `bg-primary` (solid action, every checked control) · `bg-secondary` (soft) · `bg-muted` (well, track, skeleton) · `bg-accent` (hover)
|
|
90
|
-
| Text | `text-foreground` · `text-muted-foreground` · `text-{primary,secondary,accent,card,popover}-foreground`
|
|
91
|
-
| Status | `bg-{destructive,success,warning,info}` · `-foreground` (ink ON the fill) · `-text` (ink on the page or on the family's own tint)
|
|
92
|
-
| Border | `border-border` · `border-input` — there are no rings; focus is one global outline
|
|
93
|
-
| Radius | `rounded-{sm,md,lg,xl,2xl}` — all derived from the single `--radius`
|
|
94
|
-
| Type | Tailwind's own `text-{xs…7xl}`. `text-sm` is 14px, `text-base` is 16px
|
|
95
|
-
| Font | `font-sans` `font-mono` `font-serif` `font-heading`
|
|
96
|
-
| Motion | `duration-{fast,base,slow}` · `ease-{standard,emphasized,exit,spring}` — or Tailwind's own steps
|
|
97
|
-
| Entrance | `motion-pop-in` `motion-enter-up` `motion-shake` `motion-flash`
|
|
98
|
-
| Docked | `motion-dock-in` / `motion-dock-out` — a control parked at a viewport edge, 150ms in / 100ms out
|
|
99
|
-
| Prose | `proseClassName` from `@vegastack/design` — the whole rendered-rich-text recipe, one class
|
|
86
|
+
| Role | Utilities |
|
|
87
|
+
| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
88
|
+
| Surface | `bg-background` (page) · `bg-card` · `bg-popover` · `bg-sidebar` |
|
|
89
|
+
| Fill | `bg-primary` (solid action, every checked control) · `bg-secondary` (soft) · `bg-muted` (well, track, skeleton) · `bg-accent` (hover) |
|
|
90
|
+
| Text | `text-foreground` · `text-muted-foreground` · `text-{primary,secondary,accent,card,popover}-foreground` |
|
|
91
|
+
| Status | `bg-{destructive,success,warning,info}` · `-foreground` (ink ON the fill) · `-text` (ink on the page or on the family's own tint) |
|
|
92
|
+
| Border | `border-border` · `border-input` — there are no rings; focus is one global outline |
|
|
93
|
+
| Radius | `rounded-{sm,md,lg,xl,2xl}` — all derived from the single `--radius` |
|
|
94
|
+
| Type | Tailwind's own `text-{xs…7xl}`. `text-sm` is 14px, `text-base` is 16px. Line-height and letter-spacing above `text-base` come from the theme — never write `tracking-*`, an arbitrary `text-[13px]`, or `uppercase` |
|
|
95
|
+
| Font | `font-sans` `font-mono` `font-serif` `font-heading` |
|
|
96
|
+
| Motion | `duration-{fast,base,slow}` · `ease-{standard,emphasized,exit,spring}` — or Tailwind's own steps |
|
|
97
|
+
| Entrance | `motion-pop-in` `motion-enter-up` `motion-shake` `motion-flash` |
|
|
98
|
+
| Docked | `motion-dock-in` / `motion-dock-out` — a control parked at a viewport edge, 150ms in / 100ms out |
|
|
99
|
+
| Prose | `proseClassName` from `@vegastack/design` — the whole rendered-rich-text recipe, one class |
|
|
100
100
|
|
|
101
101
|
**Hover and pressed are written, not imported.** A component owns its own interaction chrome, the
|
|
102
102
|
way shadcn writes it:
|
|
@@ -102,11 +102,12 @@ starts with `icon-` is a component and never an icon.
|
|
|
102
102
|
- **`breadcrumb`** — A hierarchical navigation trail — links, separators, the current page, and ellipsis collapse for long paths.
|
|
103
103
|
- **`command`** — A searchable command palette — filtered, grouped items with keyboard navigation, optionally inside a ⌘K dialog.
|
|
104
104
|
- **`menubar`** — A persistent horizontal bar of menus — application-style File / Edit / View navigation.
|
|
105
|
+
- **`multi-step-form`** — A guarded, branching flow around a Stepper — conditional steps, sync and async advance guards, locking, reachability-derived deep links and resume, and a phone layout chosen from the same predicate. Owns no fields and no validator.
|
|
105
106
|
- **`navigation-menu`** — A collection of links for navigating websites — triggers that open one shared panel, and plain links styled to match.
|
|
106
107
|
- **`page-header`** — The standardized header at the top of a page — back button, breadcrumb trail, title, description, actions, secondary menu, and a favorite star.
|
|
107
108
|
- **`pagination`** — Page navigation — previous/next, numbered page links, an ellipsis for long ranges, and the active page.
|
|
108
109
|
- **`sidebar`** — A composable, themeable and customizable sidebar — a provider, a collapsible panel with header, content and footer, labelled groups, menu rows with actions, badges and submenus, a rail and a trigger.
|
|
109
|
-
- **`stepper`** — A bounded linear process as an ordered list —
|
|
110
|
+
- **`stepper`** — A bounded linear process as an ordered list — seven step states on a numbered rail that fills in behind you, aria-current=step, orientation chosen from the step count, and a compact summary below a container width.
|
|
110
111
|
- **`tabs`** — A set of layered sections of content — known as tab panels — that are displayed one at a time.
|
|
111
112
|
|
|
112
113
|
## Feedback
|
|
@@ -116,7 +117,6 @@ starts with `icon-` is a component and never an icon.
|
|
|
116
117
|
- **`progress`** — Displays an indicator showing the completion progress of a task, typically displayed as a progress bar.
|
|
117
118
|
- **`provider`** — The single app-root wrapper — theme (next-themes), Base UI toasts, tooltip delays, and text direction in one mount-once component.
|
|
118
119
|
- **`skeleton`** — A pulsing placeholder that reserves layout space while content loads.
|
|
119
|
-
- **`sonner`** — The sonner toaster, themed onto the token contract — an alternative notification engine with its own imperative API.
|
|
120
120
|
- **`spinner`** — An indeterminate loading indicator that inherits its host's ink.
|
|
121
121
|
- **`toast`** — Brief, non-blocking notifications — a stacking Base UI Toast surface with typed icons, actions and promise toasts.
|
|
122
122
|
|