Releases: ANIBIT14/boldkit
Release list
v3.4.6 — Vue components all build on Nuxt
Installing and building the entire Vue library in a real Nuxt 4 project surfaced latent SFC compile errors — components BoldKit's own app never compiled (unused ones are tree-shaken, and vue-tsc doesn't enforce these compiler-only rules).
🐛 Fixes
<script setup>cannot contain ES module exports — 8 components declared an injection-keyexport const … = Symbol()inside<script setup>, breaking the consumer's build: Carousel, Dropzone, ChartContainer, ToggleGroup, Timeline, SidebarProvider, Stepper, StepperItem. Each key (and cross-imported context type) moved to a paired<script>block.- GaugeChart —
withDefaultsreferenced a setup-localDEFAULT_ZONES(defineProps() cannot reference locally declared variables). Moved to module scope.
Verified end-to-end: all 364 components compile in one Nuxt 4 build; vue-tsc clean; registry:audit clean.
Bumps
- React:
3.4.5 → 3.4.6 - Vue:
3.2.5 → 3.2.6
v3.4.5 — Nuxt compatibility, motion a11y & SEO prerender
Makes BoldKit install cleanly on Nuxt 4 (verified end-to-end in a real project), plus an animation-audit pass and a docs-site SEO upgrade.
🐛 Nuxt compatibility (#10)
- srcDir component resolution — files no longer pin to hardcoded
components/ui/…targets; they install under whatever your aliases resolve to (app/components/uion Nuxt 4). - Alias-relative registry paths —
@boldkit/utilsno longer mis-installs toapp/lib/default/lib/utils.ts; theregistry/default/prefix that collapsed the CLI's common-root is gone. Verified live on Nuxt 4. - Docs import fix — all 66 Vue usage examples now show per-file imports (
import Button from '@/components/ui/Button.vue') instead of a non-existent barrel. - Nuxt
componentDirdocs added; internaluibarrel synced.
🎬 Motion (React + Vue)
- Universal
prefers-reduced-motionguard in the shipped theme. transition-all→ scopedtransition(zero visual change).- Overlays scale from their trigger (Radix/Reka transform-origin vars).
- Command palette fades instead of zooming.
🚀 Docs site
- Route prerendering — every route ships fully-rendered HTML for crawlers & AI crawlers.
Bumps
- React:
3.4.4 → 3.4.5 - Vue:
3.2.4 → 3.2.5
v3.4.4 — Chart export fidelity & fullscreen fixes
Patch fixes for the <ChartToolbar> shipped in 3.4.3, across React and Vue. If you installed chart-toolbar or chart-export, re-run the CLI to pull these fixes.
🐛 Fixes
PNG / SVG export now downloads the chart, not a toolbar icon. The export grabbed the container's first <svg> — which was a toolbar button icon — so downloads came out as a tiny glyph. It now skips the toolbar controls and serializes the actual chart.
Exports keep their colors in every viewer. Chart colors come from CSS variables (hsl(var(--primary))) that don't survive serialization. The export now resolves each element's computed color and writes it as a concrete presentation attribute (not just inline style), plus an opaque white backdrop — so Preview, Quick Look, Illustrator, and browsers all render the real chart instead of a colorless outline.
Fullscreen no longer leaves a black gap. A fullscreened chart kept its fixed height, letting the browser's black backdrop show below it. The container now takes the page background and lays the chart out with a definite height, so Recharts and ECharts grow to fill.
Crisper canvas exports. ECharts (canvas) PNGs are composited onto white so a transparent background doesn't export as black.
Bumps
- React:
3.4.3 → 3.4.4 - Vue:
3.2.3 → 3.2.4
Full diff: v3.4.3...v3.4.4
v3.4.3 — Vue Motion parity, chart export toolbar & CI
Vue Motion parity, a chart export toolbar, and a real CI pipeline. This release closes the last framework gap left open in 3.4.2 — the Vue motion adapter now ships — and adds a brutalist chart export toolbar for both React and Vue, automated accessibility testing, and repo cleanup.
✨ Vue Motion adapter — parity with React
The <Motion>, <Reveal>, and <Stagger> components plus useShake / useViewTransition composables now ship for Vue 3, wrapping the same framework-agnostic motion-core the React adapter uses. New Vue registry items motion + motion-core mirror the React motion-core / motion-react split, so the full six-recipe motion language — press, stamp-in, shake, reveal, slide-hard, pulse-shadow — is now identical across both frameworks.
npx shadcn-vue@latest add @boldkit/motion✨ Chart export toolbar (React + Vue)
New <ChartToolbar> wraps any chart with a brutalist overlay to export PNG, SVG, or CSV, and toggle fullscreen. It's engine-agnostic — reading the wrapped <svg> (Recharts) or <canvas> (ECharts) — so a single shared chart-export core drives both frameworks.
npx shadcn@latest add @boldkit/chart-toolbar # React
npx shadcn-vue@latest add @boldkit/chart-toolbar # Vue♿ Automated accessibility
axe-core now runs in the test suite over core components (Button, Input, Label, Badge, Alert, Card, Checkbox, Switch). Accessibility regressions fail the build instead of waiting for a manual audit.
🩹 Continuous integration
A real CI pipeline — lint + React tsc + Vue vue-tsc + tests + registry audit — replaces the old React-Native-only workflow.
🧹 Internals
- Removed the phantom
react-nativepackage (no source — only an Expo example and committed build cache). - Hardened
.gitignoreagainst Expo / Android / iOS build artifacts. - New live docs at
/components/chart-toolbar.
Setup
No breaking changes — every existing React and Vue component is untouched. Vue Motion pulls motion-core transitively; remember to import styles/motion.css into your globals.
Full diff: v3.4.2...v3.4.3
v3.4.2 — Motion system + buttery component retrofit
[3.4.2] — 2026-06-18 — Motion system + buttery component retrofit
The signature "hard look, buttery feel" release. Neubrutalism's reputation is harsh and static — this patch keeps the hard visual language (3px borders, 4px offset shadows, sharp corners) but gives every interaction a premium, settled motion so the kit feels world-class to use.
Highlights
✨ Motion system (React). New motion, motion-core, and motion-react registry items. A framework-agnostic, zero-runtime CSS core (--bk-* tokens, canonical keyframes, a reduced-motion guard) drives six signature recipes — press, stamp-in, shake, reveal, slide-hard, pulse-shadow — exposed through <Motion>, <Reveal>, <Stagger> components plus useShake / useViewTransition hooks. SSR-safe. Live docs at /components/motion.
✨ Buttery retrofit, by default (React + Vue). Button, Card, Input, Toggle, and Switch now route their press/hover/focus through a shared .bk-interactive timing on a new snap easing curve — the chunky shadow-collapse settles with a small overshoot instead of a flat slide. Easing is split: overshoot applies only to transform/box-shadow, while colour/border/opacity stay on a smooth ease-out (no hover flicker).
🩹 .bk-press press choreography. Animates transform + a hard offset box-shadow (composes correctly with a background colour), replacing an earlier pseudo-element approach that could invert under the hover transform.
♿ Reduced-motion throughout. Every recipe and the .bk-interactive timing collapse to near-instant under prefers-reduced-motion: reduce; reveals show their content immediately.
Notes
- The Vue
<Motion>/<Reveal>adapter is not in this release — the buttery retrofit ships for Vue now; the Vue adapter components follow in a focused update.
Bumps
- React:
3.4.1 → 3.4.2 - Vue:
3.2.1 → 3.2.2
v3.4.1 — custom easing system + docs Theming fix
A motion-polish + docs fix patch. Every transition and animation in BoldKit now runs on a custom easing system based on the animations.dev easing blueprint. The browser's built-in ease-out / ease-in-out curves are too weak to read as "snappy" on hard neubrutalist surfaces — so they're replaced with stronger custom cubic-bezier curves, applied identically across React and Vue 3.
✨ Custom easing system
- New easing tokens in
@theme:--ease-out(out-quart),--ease-in-out(in-out-cubic),--ease-in, plus a named scale--ease-out-quad…expo/--ease-in-out-quad…quintsorted weakest→strongest. --default-transition-timing-functionis nowease-out— everytransition-*utility gets responsive motion for free, no per-element easing needed.- ~37 keyframe animations retrofitted per stylesheet (accordion, collapsible, bounce, pop, shake, wiggle, jello, …) to reference the tokens. Continuous
linearmotion (marquee, spin) and the caret blink are intentionally left as-is.
🩹 Overlays animate with intent
All 16 React + 18 Vue overlay components — Popover, Dialog, Dropdown, Tooltip, Sheet, Select, Menubar, Context Menu, Hover Card, Command, Tour, and more — now apply the custom ease-out curve on enter/exit instead of falling back to the browser default.
🐛 Docs fix
- "Theming" in the docs sidebar now opens the full-width standalone Theme Builder (
/themes) in a new tab, instead of rendering it embedded in the narrow docs column where it didn't lay out fully.
Install
The easing system ships with the theme stylesheet — re-add it to pick up the tokens:
# React
npx shadcn@latest add "https://boldkit.dev/r/styles.json"
# Vue
npx shadcn-vue@latest add "https://boldkit.dev/r/vue/styles.json"Bumps: React 3.4.0 → 3.4.1 · Vue 3.2.0 → 3.2.1
Full diff: v3.4.0...v3.4.1
v3.4.0 - 9 new components + full Vue parity
BoldKit now ships every classic shadcn primitive - nine new components, each with full React and Vue 3 parity, installable straight from the registry. Plus a manifest-driven docs refactor and a batch of UI fixes found while building them.
✨ New components
The four classics — the only standard shadcn primitives BoldKit was missing:
- Context Menu — right-click menus
- Menubar — desktop-style application toolbars
- Navigation Menu — site navigation with dropdown panels
- Resizable — draggable split panes & dashboard layouts
Five form / layout adds:
- Button Group — join buttons into one bordered unit
- Input Group — inputs with leading/trailing addons
- Field — label + control + description + error composition
- Native Select — a11y-first styled
<select> - Date Picker — a single-date button → calendar popover
Every one ships matching React + Vue 3 implementations and registry entries — no placeholders.
🐛 Fixes
- Resizable vertical panels no longer collapse — demos use
min-h-*(the lib sets an inlineheight:100%that beatsh-*). The npm dep is pinned toreact-resizable-panels@^2.1.0. - Navigation Menu dropdown now renders reliably (panel renders in place instead of via the brittle measured-height viewport).
- Date Range Picker presets restyled as proper neubrutalist buttons; single Date Picker correctly tracks a controlled
value.
🛠 Internals
- Docs routes are now manifest-driven (
src/config/component-docs.tsx) —App.tsxshrank 336 → ~165 lines, and adding a component is a one-line entry. - New components wired into ⌘K search, sitemap, and
llms-full.txt.
Install
# React
npx shadcn@latest add "https://boldkit.dev/r/navigation-menu.json"
# Vue
npx shadcn-vue@latest add "https://boldkit.dev/r/vue/navigation-menu.json"Bumps: React 3.3.9 → 3.4.0 · Vue 3.1.9 → 3.2.0
Full diff: v3.3.9...v3.4.0
v3.3.9 — Next.js + Tailwind v4 compatibility
Three install-time bugs reported against v3.3.8 — all in the path between BoldKit's docs/registry and a fresh Next.js + Tailwind v4 + shadcn project. None affect existing Vite users.
Highlights
🩹 import.meta.env.DEV no longer breaks Next.js builds (#8). Five components emitted Vite-only import.meta.env.DEV reads — fine under Vite, fatal under next build because Next.js does not type ImportMeta.env. Replaced with process.env.NODE_ENV === 'development' everywhere (works in both Vite and Next): React ErrorBoundary, Tour, Slider, SankeyChart, Invoice block, and the Vue ErrorBoundary (hoisted to an isDev const so the template binding stays SSR-safe). Registry JSONs regenerated.
🩹 Theme Builder now emits a Tailwind v4 @theme bridge (#7). The generator at /theme-builder shipped only :root { --background: 60 9% 98%; } etc. — raw HSL channels with no --color-* mapping. Pasted into a Tailwind v4 + shadcn project that expects --color-background: var(--background), the utilities resolved to background-color: 60 9% 98% (invalid). Generator now prepends a full @theme { --color-background: hsl(var(--background)); … } block matching the shipped registry styles, plus the --radius-sm/md/lg/xl shorthands. Every preset funnels through generateCSS(), so all themes inherit the fix.
🩹 Registry alias docs use the {name}.json template (#9). shadcn 4.x requires the templated item URL in the registries map — BoldKit's install docs showed "@boldkit": "https://boldkit.dev/r" (and Vue …/r/vue), which fails to resolve @boldkit/button. Updated Installation page, Introduction page (both copy-buttons), and README to:
- React:
https://boldkit.dev/r/{name}.json - Vue:
https://boldkit.dev/r/vue/{name}.json
Internals
tsconfig.app.jsonnow includes"node"intypesand adds@types/nodeto devDeps — required so the newprocess.env.NODE_ENVreads type-check under BoldKit's owntsc -b. Downstream Next.js users already have these via Next.
Bumps
- React:
3.3.8 → 3.3.9 - Vue:
3.1.8 → 3.1.9
v3.3.8 - Registry recheck + chart family fix
A follow-up stability pass after a full source-vs-registry recheck. 36 install-breakers that were silently shipping in v3.3.7 - caught by extending the audit script to cover relative imports, fixed in this release.
Highlights
🩹 React chart family is installable. All 9 standalone chart entries (donut-chart, radar-chart, radial-bar-chart, gauge-chart, sparkline, funnel-chart, treemap-chart, heatmap-chart, sankey-chart) shipped with install targets at components/ui/chart/<name>.tsx while their relative ./chart import resolved to a path nothing shipped. Flattened all chart targets to components/ui/<name>.tsx so ./chart correctly hits the base chart entry. Added missing @boldkit/chart registryDep on the four entries that import ./empty.
🩹 8 Vue entries had missing registryDependencies or stale file lists. alert-dialog, calendar, pagination now declare button. toggle-group declares toggle. dropzone declares progress + spinner. stat-card declares card + progress. empty-state and layered-card now ship their -variants.ts sibling. pagination and dropdown-menu had stale files: lists referencing components that don't exist on disk — corrected.
🩹 20 Vue shapes were missing from the registry. SHAPE_FILES had drifted 20 entries behind the 55 on disk. Replaced with disk auto-discovery so any new shape ships automatically.
✨ Vue parity for ascii-shapes and error-boundary. Both existed on the React side but had no Vue install path. ASCII Shapes now ship all 17 components + constants via a new subdirectory codepath. ErrorBoundary now has a Vue equivalent using onErrorCaptured with the same neubrutalism fallback UI.
✨ New /components/error-boundary docs page. Framework-switched preview/code/install with a live "Trigger error" demo button.
🐛 Blocks page no longer shows broken install commands. All 15 block cards were displaying npx shadcn add boldkit.dev/r/<block>.json commands that 404'd — the block registry entries don't exist (blocks remain copy/paste-grade). Removed the install bar UI. Each block doc page now has React + Vue "View on GitHub" source links.
Setup
No migration required. Existing @boldkit/* install paths remain unchanged. Anyone who couldn't install a chart entry before v3.3.8 can now do so directly:
npx shadcn@latest add @boldkit/donut-chart
npx shadcn-vue@latest add @boldkit/error-boundaryInternals
scripts/audit-registry-imports.mjs was previously blind to relative imports — only checked from '@/...' aliases. Extended to resolve from './x' and from '../x' against each file's install target, verifying the resolved path is shipped by the same entry or by a declared registryDependency. That single change exposed all 36 issues above in one audit run, and will catch the same class of bug going forward.
Commits
3db6e19release: v3.3.8 — registry recheck + chart family fix
Full diff: v3.3.7...v3.3.8
v3.3.7 - Registry health pass
BoldKit 3.3.7 - Registry health pass
A focused stability release that fixes install-time failures consumers have been hitting and adds permanent guards so the same classes of bug can't silently return.
Highlights
🩹 @boldkit/* install path now works end-to-end.
Cross-component deps (button, utils, math-curves, etc.) were resolving against shadcn's default registry instead of BoldKit's. All 74 references across React + Vue are now properly scoped.
🩹 Vue math-curve-* family is installable.
MathCurveLoader, MathCurveProgress, MathCurveBackground, and the shared math-curves engine were missing from shadcn-vue entirely. Now registered.
🩹 Chart components ship current source.
React chart-X files synced from src/components/ui/chart/ with import rewriting. Vue chart entries now bundle ChartEmpty.vue and chart-types.ts so installs compile.
🩹 37 UI mirrors caught up with src/.
Months of bug fixes (focus-visible, ARIA attrs, edge cases) and security helpers (safeHref, sanitizeCssValue) had never reached the registry. rating.tsx registry was an entirely different implementation from src.
✨ Two new MathCurveLoader curves. spiral and heart, both already in the runtime — TypeScript just needed widening.
🐛 /components/sidebar no longer crashes. Active-state demo was missing its <SidebarProvider> wrapper.
⚠️ Required setup (positive break)
Add the @boldkit alias to your components.json:
{
"registries": {
"@boldkit": "https://boldkit.dev/r"
}
}(Vue: https://boldkit.dev/r/vue.)
Then install components as:
npx shadcn@latest add @boldkit/button @boldkit/card
# or for Vue
npx shadcn-vue@latest add @boldkit/button @boldkit/cardSingle-file installs of leaf items (utils, styles) still work via direct URL, but any component with cross-deps requires the alias.
Internals - drift can't recur
New scripts/sync-registry-from-src.js runs as a pre-step in registry:build. It copies src/components/ui/*.tsx and selected libs into registry/default/ and self-verifies — if any in-scope mirror still drifts after sync, the build fails. This protects against the silent-drift class of bug going forward.
Commits
2f68fd1registry: scope cross-references with@boldkit/namespace86397c2registry+docs: finish scoping pass, fix build order, update install docs9b70d71registry: migrate 6 hand-written Vue entries into build script2c016b0math-curves: addspiral+hearttoLoaderCurveKeyf9151faregistry: close Vue math-curve gap + sync 37 drifted React mirrorsb74270fregistry: chart family drift — sync React, complete Vue bundlingde251ecdocs: wrap Active State sidebar demo inSidebarProvider
Full diff: v3.3.6...v3.3.7