diff --git a/CHANGELOG.md b/CHANGELOG.md index 8396212d..8744a636 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,9 +10,9 @@ Release automation can regenerate this file from Conventional Commits with ## [Unreleased] -> Target version: **`0.3.0`** - shipping as `0.3.0-canary.` on the npm -> `canary` tag on every merge to main. The stable `latest` release is gated on -> the [ROADMAP.md](./ROADMAP.md) shipping criteria and is not yet published. +_Nothing yet._ + +## [0.3.0] - 2026-06-26 ### Added @@ -72,6 +72,25 @@ Release automation can regenerate this file from Conventional Commits with `ContextLens`. - **Time navigation** - `TimelineScrubber`, `PlaybackGhost`, `BottomActivityStrip`, and `RunTimeline`. +- **Form primitives (18)** - `ButtonGroup`, `InputGroup`, `Field`, `Fieldset`, + `Item`, `ColorPicker`, `CheckboxGroup`, `NativeSelect`, `ListBox`, + `SearchField`, `TextField`, `PhoneInput`, `TimePicker`, `TimeField`, + `DateField`, `DateRangePicker`, `RangeCalendar`, and `TagGroup`. +- **Charts / dataviz (5)** - `PieChart`, `RadarChart`, `GaugeChart`, + `SankeyChart`, and `ContributionGraph` (joining the existing `BarChart` / + `LineChart` / `AreaChart`). +- **AI primitives (3)** - `Reasoning`, `ChainOfThought`, and `PromptInput`. +- **Core primitives (7)** - `Typography`, `Link`, `Toolbar`, `Meter`, `QrCode`, + `Grid`, and `Panel`. +- **Motion / effects (37)** - `BentoGrid`, `Sparkles`, `Typewriter`, + `AnimatedList`, `Dock`, `MagneticButton`, `TextShimmer`, `AnimatedBeam`, + `AnimatedTabs`, `ScrollProgress`, `ShimmerButton`, `ShimmerText`, + `AnimatedGridPattern`, `AnimatedTestimonials`, `AnimatedTooltip`, `BlurReveal`, + `CardFlip`, `Cursor`, `DotPattern`, `ExpandableCards`, `FloatingNavbar`, + `GlassCard`, `GlassProgress`, `LiquidGlass`, `Magnetic`, `Meteors`, + `Particles`, `ProgressiveBlur`, `RevealText`, `ScrambleText`, `ShineBorder`, + `ShinyButton`, `SpinningText`, `SpotlightCard`, `TextAnimate`, `TextReveal`, + and `TiltCard`. - Total component count: **309** (up from 140). - **OKLCH theming system** - color tokens migrated to the OKLCH color space, with 13 runtime theme presets, a `/themes` web theme editor route, and a `/r/themes` @@ -99,16 +118,32 @@ Release automation can regenerate this file from Conventional Commits with ### Changed +- **BREAKING - React 19 required.** The peer dependency moved to `react` / + `react-dom` `>=19`; **React 18 is no longer supported**. Components migrated + from `React.forwardRef` to the React 19 ref-as-prop pattern, and `useContext` + → `use()`. React-18 consumers must upgrade to React 19. +- **Internal quality sweep** - cleared the react-doctor backlog: + `no-react19-deprecated-apis` 456 → 0, plus state/effect warnings + (`useEffectEvent` for effect-captured handlers, derived-state, cascading + `setState`) and structural warnings (giant-component splits, render-in-render, + polymorphic children, passive listeners). +- **Shared internals** - extracted reusable hooks/utilities (reference-counted + body-scroll-lock fixing a multi-overlay unlock bug, escape-key, live-date, + cached `Intl` formatters, clipboard migration) and a Zod parse seam for the + registry shape. - Registry installs use a **hybrid CLI strategy** - leaf component source is inlined, sibling registry items resolve via `@vllnt/ui` to keep installs minimal and dedupe shared primitives. -### Notes +### Fixed -- `ROADMAP.md` tracks the open work gating the `0.3.0` cut. -- `0.3.0` requires the codebase-health gate (`react-doctor` CI + 0 errors), the - agent-first surface (`/llms.txt`, `/mcp`, sitemap, JSON-LD), and the rebuilt - landing page before shipping. +- **Docs sidebar dropped components** - the registry category union omitted four + categories (`ai`, `billing`, `data-display`, `educational`), silently hiding + ~32 components from the docs sidebar; all now render, with a structural + fallback so a missing category can no longer regress. +- **Theme-adaptive chart colors** - `CandlestickChart` and `SparklineGrid` + series colors now follow the active theme and dark mode instead of hardcoded + values. ## [0.2.1] - 2026-04-21 @@ -233,6 +268,7 @@ Release automation can regenerate this file from Conventional Commits with - Initial public publish to the public npm registry. +[0.3.0]: https://github.com/vllnt/ui/releases/tag/v0.3.0 [0.2.1]: https://github.com/vllnt/ui/releases/tag/v0.2.1 [0.2.0]: https://github.com/vllnt/ui/releases/tag/v0.2.0 [0.1.11]: https://github.com/vllnt/ui/releases/tag/v0.1.11 diff --git a/README.md b/README.md index 58c2b327..05301f8b 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ # @vllnt/ui -**144 accessible React components** built on [Radix UI](https://radix-ui.com) primitives, styled with [Tailwind CSS](https://tailwindcss.com), powered by [CVA](https://cva.style). +**309 accessible React components** built on [Radix UI](https://radix-ui.com) primitives, styled with [Tailwind CSS](https://tailwindcss.com), powered by [CVA](https://cva.style). [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) [![TypeScript](https://img.shields.io/badge/TypeScript-strict-blue)](https://www.typescriptlang.org) @@ -16,7 +16,7 @@ ## Features -- **225 components** — primitives (Button, Input), composites (Command, DataTable, Carousel), and domain families (AI, Financial, Ops, Educational, Billing, Animation, Maps, Canvas, Timelines) +- **309 components** — primitives (Button, Input), composites (Command, DataTable, Carousel), and domain families (AI, Financial, Ops, Educational, Billing, Animation, Maps, Canvas, Timelines) - **Accessible by default** — Radix UI handles focus, keyboard nav, and ARIA - **Tailwind CSS + CVA** — variant-driven styling with full theme override via CSS variables - **shadcn-compatible registry** — install individual components with `shadcn add` @@ -112,7 +112,7 @@ Override CSS variables after importing styles: ## Components
-All 225 components +All 309 components | Category | Components | |----------|------------| diff --git a/ROADMAP.md b/ROADMAP.md index 02244472..cd14b689 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,12 +1,12 @@ # Roadmap — 0.3.0 -> Status: **planning** · Previous release: `v0.2.1` · Current canary: `0.3.0-canary.` (+85 components) · Tracking: [milestone TBD](https://github.com/vllnt/ui/milestones) +> Status: **release prep** · Previous release: `v0.2.1` · Current canary: `0.3.0-canary.` (+169 components) · Tracking: [milestone 0.3.0](https://github.com/vllnt/ui/milestone/1) ## TLDR `0.3.0` is the **agent-first surface** release. Three themes: -1. **+85 new components** already in canary, finally published. +1. **+169 new components** already in canary, finally published. 2. **Discoverability** — full SEO + AI-agent surface (`/llms.txt`, `/mcp`, sitemap, JSON-LD, manifest, structured data on every page). 3. **Codebase health gate** — `react-doctor` CI + tooling so we ship and stay green. @@ -14,9 +14,9 @@ --- -## Components — canary → release (+85) +## Components — canary → release (+169) -Counts taken from `registry.json` at `v0.2.1` (140) vs `HEAD` (225). +Counts taken from `registry.json` at `v0.2.1` (140) vs `HEAD` (**309**, +169 net). The curated list below highlights the headline additions; the full set is in the changelog. ### Hooks + utility primitives - `CopyButton` + `useCopyToClipboard` hook (#159) @@ -112,7 +112,7 @@ Counts taken from `registry.json` at `v0.2.1` (140) vs `HEAD` (225). | Order | Issue | Type | Notes | |---|---|---|---| | 6 | [#233](https://github.com/vllnt/ui/issues/233) | Feature | `app/robots.ts` (allow all AI crawlers + sitemap link) | -| 7 | [#234](https://github.com/vllnt/ui/issues/234) | Feature | `app/sitemap.ts` (all routes + 225 components) | +| 7 | [#234](https://github.com/vllnt/ui/issues/234) | Feature | `app/sitemap.ts` (all routes + 309 components) | | 8 | [#237](https://github.com/vllnt/ui/issues/237) | Feature | Canonical URLs per page | | 9 | [#241](https://github.com/vllnt/ui/issues/241) | Feature | Keywords + verification + author metadata | | 10 | [#235](https://github.com/vllnt/ui/issues/235) | Feature | `/llms.txt` | diff --git a/apps/registry/lib/component-count.test.ts b/apps/registry/lib/component-count.test.ts index 1ce7ee3c..fe15a866 100644 --- a/apps/registry/lib/component-count.test.ts +++ b/apps/registry/lib/component-count.test.ts @@ -30,22 +30,16 @@ function read(filePath: string): string { } describe("component count stays consistent with the registry", () => { - it("the CHANGELOG [Unreleased] snapshot matches the live count", () => { + it("the newest CHANGELOG component-count snapshot matches the live count", () => { const changelog = read(path.join(repoRoot, "CHANGELOG.md")); - const unreleased = changelog - .split(/^## \[/m) - .find((section) => section.startsWith("Unreleased]")); - expect( - unreleased, - "CHANGELOG.md has no [Unreleased] section", - ).toBeDefined(); - - const match = /total component count:\s*\*\*(\d+)\*\*/i.exec( - unreleased ?? "", - ); + // The count snapshot lives in the newest section that declares one: + // [Unreleased] while changes are pending, or the dated release section + // after a release cut. The file is newest-first, so the first match + // is the current snapshot. + const match = /total component count:\s*\*\*(\d+)\*\*/i.exec(changelog); expect( match, - "[Unreleased] section is missing a 'Total component count' line", + "CHANGELOG.md is missing a 'Total component count' line", ).not.toBeNull(); expect(Number(match?.[1])).toBe(liveCount); }); diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index ca6abdb8..24223a15 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -7,7 +7,7 @@ vllnt/ui/ ├── packages/ │ └── ui/ # @vllnt/ui — the shipped library │ ├── src/ -│ │ ├── components/ # 144 component folders +│ │ ├── components/ # 309 component folders │ │ ├── hooks/ # shared hooks (useDebounce, etc.) │ │ ├── lib/ # utilities (cn, registry helpers) │ │ └── index.ts # barrel — the public surface diff --git a/docs/RELEASING.md b/docs/RELEASING.md index e6117cbc..9fc41815 100644 --- a/docs/RELEASING.md +++ b/docs/RELEASING.md @@ -23,7 +23,11 @@ The release workflow does not push commits to `main`. Version bumps land via nor Open a PR that: - Updates `packages/ui/package.json` `"version"` to the new target (follow SemVer — see below). +- Updates `apps/registry/package.json` `"version"` to match. - Moves the matching entry in root `CHANGELOG.md` and `packages/ui/CHANGELOG.md` from `[Unreleased]` to a dated `[x.y.z]` section. Root `CHANGELOG.md` is the source used for the website, feeds, and GitHub Release notes. +- Syncs docs that name a count or version: component count in `README.md` + `packages/ui/README.md`, the `packages/ui/package.json` `"description"`, `docs/ARCHITECTURE.md`, and the ROADMAP status line. The count is `registry.items.length`; `apps/registry/lib/component-count.test.ts` guards the enforced surfaces (changelog snapshot, home copy, PWA manifest). + +Do **not** touch `PUBLISHED_VERSION` in `apps/registry/scripts/inline-component-source.ts` here — that pins the shadcn install target and must only advance **after** the new version is live on npm `latest` (see step 3). Bumping it before publish makes the deployed registry advertise `@vllnt/ui@^{x.y.z}` while npm `latest` is still the previous version, breaking `npx shadcn add`. Merge the PR normally. The canary workflow on `main` will immediately publish `@vllnt/ui@{x.y.z}-canary.{sha}` — a dress-rehearsal of the release tarball. @@ -40,6 +44,15 @@ CI will: - `pnpm pack` and `npx --yes npm@latest publish --tag latest --provenance --access public`. OIDC trusted publishing signs the provenance attestation. - Create the GitHub Release for the new tag. +### 3. Point the registry at the published version (post-publish) + +Once `@vllnt/ui@{x.y.z}` is live on npm `latest`, open a small follow-up PR that: + +- Sets `PUBLISHED_VERSION` in `apps/registry/scripts/inline-component-source.ts` to `{x.y.z}`. +- Runs `pnpm -F @vllnt/ui-registry registry:build` and commits the regenerated `registry.json` + `registry/default` shims (the install target becomes `@vllnt/ui@^{x.y.z}` and item versions update). + +The `registry:check` and `registry:integrity` CI guards confirm the regenerated registry is in sync and pins a real (non-prerelease) published version. Until this lands, `npx shadcn add` keeps resolving to the previous published version — harmless, just one release behind. + ## Versioning policy - [SemVer](https://semver.org). Track API compatibility, not surface area — adding 50 new components is a **minor** bump if no existing exports break. diff --git a/packages/ui/CHANGELOG.md b/packages/ui/CHANGELOG.md index 2b345fd4..7e2aac0e 100644 --- a/packages/ui/CHANGELOG.md +++ b/packages/ui/CHANGELOG.md @@ -6,7 +6,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ## [Unreleased] -> Target version: **`0.3.0`** — shipping as `0.3.0-canary.` on the npm `canary` tag on every merge to main. The stable `latest` release is gated on the [ROADMAP.md](../../ROADMAP.md) shipping criteria and is not yet published. +_Nothing yet._ + +## [0.3.0] - 2026-06-26 ### Added @@ -28,7 +30,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), - **Inspector + dock panels** — `PropertySection`, `ObjectInspector`, `RelationshipInspector`, `RuntimeOverviewPanel`, `RoutingAssignmentPanel`, `PolicyDeliveryPanel`. - **Runtime overlays** — `AlertPulse`, `ThresholdRing`, `StickyMetric`, `HeatOverlay`, `StateBadgeOverlay`, `MetricCluster`, `JarvisDock`, `ContextLens`. - **Time navigation** — `TimelineScrubber`, `PlaybackGhost`, `BottomActivityStrip`, `RunTimeline`. -- Total component count: **225** (up from 140). +- **Form primitives (18)** — `ButtonGroup`, `InputGroup`, `Field`, `Fieldset`, `Item`, `ColorPicker`, `CheckboxGroup`, `NativeSelect`, `ListBox`, `SearchField`, `TextField`, `PhoneInput`, `TimePicker`, `TimeField`, `DateField`, `DateRangePicker`, `RangeCalendar`, `TagGroup`. +- **Charts / dataviz (5)** — `PieChart`, `RadarChart`, `GaugeChart`, `SankeyChart`, `ContributionGraph` (joining the existing `BarChart` / `LineChart` / `AreaChart`). +- **AI primitives (3)** — `Reasoning`, `ChainOfThought`, `PromptInput`. +- **Core primitives (7)** — `Typography`, `Link`, `Toolbar`, `Meter`, `QrCode`, `Grid`, `Panel`. +- **Motion / effects (37)** — `BentoGrid`, `Sparkles`, `Typewriter`, `AnimatedList`, `Dock`, `MagneticButton`, `TextShimmer`, `AnimatedBeam`, `AnimatedTabs`, `ScrollProgress`, `ShimmerButton`, `ShimmerText`, `AnimatedGridPattern`, `AnimatedTestimonials`, `AnimatedTooltip`, `BlurReveal`, `CardFlip`, `Cursor`, `DotPattern`, `ExpandableCards`, `FloatingNavbar`, `GlassCard`, `GlassProgress`, `LiquidGlass`, `Magnetic`, `Meteors`, `Particles`, `ProgressiveBlur`, `RevealText`, `ScrambleText`, `ShineBorder`, `ShinyButton`, `SpinningText`, `SpotlightCard`, `TextAnimate`, `TextReveal`, `TiltCard`. +- Total component count: **309** (up from 140). - **OKLCH theming system** — color tokens migrated to the OKLCH color space, with 13 runtime theme presets (`default`, `matrix`, `dracula`, `synthwave`, `tron`, `cyberpunk`, `nord`, `claude`, `chatgpt`, `gemini`, `dusk`, `cyberlime`, `aura`). New public theme exports from `@vllnt/ui`: `THEME_PRESETS`, `DEFAULT_THEME_PRESET`, `CUSTOM_THEME_NAME`, `isThemePresetName`, the `ThemePreset` and `ThemePresetName` types, plus the `useThemePreset` hook (with `UseThemePresetResult`), `setThemePreset`, and `setCustomTheme` for runtime preset switching and user-supplied custom themes. @@ -36,12 +43,15 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ### Changed +- **BREAKING — React 19 required.** The peer dependency moved to `react` / `react-dom` `>=19`; **React 18 is no longer supported**. Components migrated from `React.forwardRef` to the React 19 ref-as-prop pattern, and `useContext` → `use()`. React-18 consumers must upgrade to React 19. +- **Internal quality sweep** — cleared the react-doctor backlog: `no-react19-deprecated-apis` 456 → 0, plus state/effect warnings (`useEffectEvent` for effect-captured handlers, derived-state, cascading `setState`) and structural warnings (giant-component splits, render-in-render, polymorphic children, passive listeners). +- **Shared internals** — extracted reusable hooks/utilities (reference-counted body-scroll-lock that fixes a multi-overlay unlock bug, escape-key, live-date, cached `Intl` formatters, clipboard migration) and a Zod parse seam for the registry shape. - Registry installs use a **hybrid CLI strategy** — leaf component source is inlined, sibling registry items resolve via `@vllnt/ui` to keep installs minimal and dedupe shared primitives. -### Notes +### Fixed -- `ROADMAP.md` added at repo root tracking 50 open issues across 8 phases gating the `0.3.0` cut. -- `0.3.0` requires the codebase-health gate (`react-doctor` CI + 0 errors), the agent-first surface (`/llms.txt`, `/mcp`, sitemap, JSON-LD), and the rebuilt landing page before shipping. +- **Docs sidebar dropped components** — the registry category union omitted four categories (`ai`, `billing`, `data-display`, `educational`), silently hiding ~32 components from the docs sidebar; all now render, with a structural fallback so a missing category can no longer regress. +- **Theme-adaptive chart colors** — `CandlestickChart` and `SparklineGrid` series colors now follow the active theme and dark mode instead of hardcoded values. ## [0.2.1] - 2026-04-21 @@ -145,6 +155,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), - Initial public publish to the public npm registry. +[0.3.0]: https://github.com/vllnt/ui/releases/tag/v0.3.0 [0.2.1]: https://github.com/vllnt/ui/releases/tag/v0.2.1 [0.2.0]: https://github.com/vllnt/ui/releases/tag/v0.2.0 [0.1.11]: https://github.com/vllnt/ui/releases/tag/v0.1.11 diff --git a/packages/ui/README.md b/packages/ui/README.md index 07361b05..4c1d6143 100644 --- a/packages/ui/README.md +++ b/packages/ui/README.md @@ -1,6 +1,6 @@ # @vllnt/ui -React component library — 144 components built on Radix UI primitives, Tailwind CSS, and CVA. +React component library — 309 components built on Radix UI primitives, Tailwind CSS, and CVA. See [CHANGELOG.md](./CHANGELOG.md) for release history. diff --git a/packages/ui/package.json b/packages/ui/package.json index 300f5bb5..04947354 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,7 +1,7 @@ { "name": "@vllnt/ui", "version": "0.3.0", - "description": "React component library — 225 components built on Radix UI, Tailwind CSS, and CVA", + "description": "React component library — 309 components built on Radix UI, Tailwind CSS, and CVA", "license": "MIT", "author": "vllnt", "homepage": "https://ui.vllnt.ai",