* fix(docs): use render prop instead of asChild in base ui docs
The base ui docs were copied from the radix docs without adapting the
code examples to the Base UI API. Replace asChild with render, remove
the radix-specific --radix-popper-anchor-width CSS variable (base
DropdownMenuContent already sizes to --anchor-width), and update
data-[state=open] to data-open.
Closes#9049
* style: code format
Registers the knock.codes open source registry so it's addressable via
the @knock-codes namespace (npx shadcn add @knock-codes/<item>).
Co-authored-by: shadcn <m@shadcn.com>
diklein.com/components lists the registry's items with install commands, so directory visitors land on the components instead of the site's front page.
* fix(shadcn): replace node-fetch with undici
Removes the transitive node-domexception deprecation warning triggered
on install by node-fetch -> fetch-blob. Uses Node's global fetch with
undici.ProxyAgent as the dispatcher when https_proxy is set, preserving
existing proxy support.
Also declares the implicit Node version requirement (>=20.18.1, matching
undici@7's engines field) now that Node 20 is entering maintenance EOL.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* chore: changeset
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* fix(shadcn): expand proxy env-var support via EnvHttpProxyAgent
Switch the registry fetcher from undici.ProxyAgent (single-URI) to
undici.EnvHttpProxyAgent, which honors HTTPS_PROXY, HTTP_PROXY,
NO_PROXY (and lowercase variants). Previously only https_proxy
lowercase was respected.
Extracts the dispatcher selection into createProxyDispatcher in
packages/shadcn/src/registry/proxy.ts, with unit tests covering
all env-var permutations and an integration test that spins up a
local CONNECT-tunneling proxy to verify end-to-end routing and
NO_PROXY bypass.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* chore: update changeset
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* feat(shadcn): add SOCKS and PAC proxy support
Extends the registry's proxy capabilities beyond HTTP/HTTPS to cover
the standard proxy mechanisms users encounter:
- SOCKS4/SOCKS5 via ALL_PROXY=socks5://... (curl convention).
Implementation uses the `socks` package wired into a custom undici
Agent's `connect` factory, so SOCKS routing flows through the same
fetch dispatcher pipeline as HTTP/HTTPS.
- PAC files via PAC_URL, with full PROXY/SOCKS/DIRECT directive
support. PacDispatcher lazily fetches and compiles the PAC script
using `pac-resolver` (running PAC JavaScript in a QuickJS WASM
sandbox via `quickjs-wasi`), then resolves and routes per request.
Detection and routing priority is PAC > SOCKS > HTTP, matching the
specificity of each mechanism (PAC can return mixed directives
per request; SOCKS and HTTP are per-process configurations).
Coverage:
- 14 new unit tests (env-var detection, priority, edge cases)
- 7 new integration tests using a hand-rolled SOCKS5 server, a
CONNECT-tunneling HTTP proxy, and a PAC file server — verifying
end-to-end routing for each mechanism plus per-host PAC directives.
A local pac-resolver.d.ts stub mirrors the v9 surface we use,
because pac-resolver@9 ships its types only via the `exports` map
which the repo's classic `moduleResolution: node` doesn't read.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* chore: update changeset for SOCKS and PAC support
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* test(shadcn): tighten proxy integration tests per review
- Replace the dead "proxy-direct" response body in the test proxy's
request handler with a 502 reply. The request callback path was
never exercised (undici only sends CONNECT to the proxy), so the
unreachable JSON body was confusing dead code. Lock the new
CONNECT-only contract in with an explicit test.
- Tighten the NO_PROXY-non-match assertion from `.toHaveLength(1)` +
`.toBe("CONNECT")` to `.toEqual([{ url: originHost, method: "CONNECT" }])`,
matching the parallel HTTP_PROXY test. The looser version would
miss bugs where the dispatcher CONNECTed to the wrong host (e.g.,
the proxy's own address instead of the origin's) — the strict
version catches that bug class.
Both changes per @pomeh's review feedback.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* refactor(shadcn): rescope proxy support to SOCKS only
Per review feedback, split the proxy work: this branch now lands SOCKS
support alone and PAC moves to a follow-up PR.
Removes the PacDispatcher, the PAC directive parser, the PAC_URL env
handling and the pac-resolver type stub, along with the pac-resolver and
quickjs-wasi dependencies (the latter being ~3 MB of WASM). The socks
dependency and the entire SOCKS code path are unchanged, as is
fetchWithProxy's cross-origin redirect hardening.
ALL_PROXY remains SOCKS-only: a non-socks scheme falls through to the
explicit HTTP_PROXY / HTTPS_PROXY variables rather than being absorbed.
Changeset bumped from patch to minor.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011YT4UiAoMUVeF9xaVm9ufi
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: shadcn <m@shadcn.com>
* feat(v4): update data table docs and examples to tanstack table v9
- Migrate all data-table demos, dashboard-01 blocks, and the tasks
example to the TanStack Table v9 stable API (tableFeatures, useTable,
createColumnHelper)
- Add a shared data-table-features.ts module to the tasks example
- Rewrite the base/radix/aria data-table.mdx guides for v9 and update
table.mdx links
- Remove the orphaned components/cards/payments.tsx (the live payments
card no longer uses TanStack Table)
- Pin the frozen v3 dashboard-01 registry payloads to react-table v8 so
legacy CLI installs keep working now that v9 is npm latest
- Fix pre-existing docs bugs (base preview styleName, radix frontmatter
base, aria getFlatHeaders missing .map)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(v4): register built-in filter/sort fns and use FlexRender component
In v9 the built-in filter and sort functions are tree-shaken like
everything else: a column's default filterFn of 'auto' resolves through
the filterFns registry on the features object, so an unregistered
includesString made the demo filter inputs silently no-op. Register
filterFns/sortFns in every table with filter/sort UI and document the
requirement in the data-table guides.
Also replace flexRender() call sites with the v9 FlexRender component:
table.FlexRender where the table instance is in scope, the imported
FlexRender in the dnd-kit blocks whose DraggableRow renders cells
outside it.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* clean up comments for best practices
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: shadcn <m@shadcn.com>
* fix(shadcn): create nested output directories in build
Registry item names can contain path segments (e.g. "extension/foo").
Both build commands wrote <outputDir>/<name>.json without creating the
implied nested directories, so builds failed with ENOENT on clean
checkouts where the output directory does not already exist. Create the
parent directory before writing each item.
Fixes#11321
* chore: format
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Xq2q7jaDcyxyA6YjutStLn
---------
Co-authored-by: shadcn <m@shadcn.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Adds the @retab namespace (Retab document-processing UI components) to
the registry directory. Registry is open source, publicly hosted, and
flat at https://ui.retab.com/r/{name}.json.
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Adds @atelier to the registry directory.
Atelier UI is an open-source registry of WebGL and motion components for React, built on a single shared canvas so many effects can run on one page.
Homepage: https://www.atelier-ui.com
Registry: https://www.atelier-ui.com/r/registry.json
Evaluating 16.3's dev memory eviction: footprint after browsing 14 docs routes drops 32GB -> 15GB and page nav 3.6-16s -> sub-2s vs 16.2.7. Canary, not for merge until stable.
The generated __components__ maps put every style's dynamic-import edges
(~3,800) into any route that resolves a component, making docs pages
uncompilable in dev. Emit one shard per style plus a lazy getComponent
dispatcher, and fail fast in next.config when generated styles are stale.
* feat(registry): add @dkproductcard to registry directory
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* Update directory.json
Co-authored-by: shadcn <m@shadcn.com>
* registry: consolidate under the @diklein namespace
Collection-level description and homepage for the @diklein entry, and the earlier single-component @dkmediaviewer entry removed: it pointed at the same registry and its item now installs via @diklein/dk-media-viewer. Recreated as one API commit so it carries a verified signature.
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: shadcn <m@shadcn.com>
* feat(registry): add @hexui to registry directory
* fix(registry): update logo SVG fill color in directory.json
* fix(registry): remove unintended changes