feat!: port all primitives and demos to Base UI - #63
Merged
Merged
Conversation
Replace Radix utilities with Base UI's useRender, mergeProps, and useControlled. The asChild prop is replaced by render, and the toggle and indicator now expose the open state via the data-visible attribute instead of data-state. BREAKING CHANGE: PasswordInputPrimitive components no longer accept asChild; use the render prop instead. data-state="visible|hidden" is replaced by the presence-based data-visible attribute. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Match the prevailing shadcn/ui style (carousel, form) of inline provider values instead of memoizing. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…e UI Swap Radix Slot, Primitive, compose-refs, and useControllableState for Base UI's useRender, mergeProps, useControlled, and useStableCallback. BREAKING CHANGE: Timeline and Virtualized components no longer accept asChild; use the render prop instead. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Swap Radix Primitive and composeEventHandlers for Base UI's useRender and mergeProps in both the primitive and styled components. BREAKING CHANGE: Dropzone components no longer accept asChild; use the render prop instead. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Convert date-time-field and date-time-range-field primitives from Radix Primitive/useComposedRefs to Base UI useRender, wiring timescape refs through useRender's ref param and gating AmPm with the enabled option. Styled wrappers and date-picker segment slots move from asChild to render props. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Replace useControllableState with useControlled/useStableCallback for the value and country states, and swap the Input's asChild/children composition for a Base UI render element that backs react-phone-number-input's inputComponent. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Replace Radix popover with Base UI popover parts, adding a Positioner part and context-based anchor plumbing to preserve Anchor support. Value and month state now use useControlled with null-based values. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Swap Radix Primitive, Slot, compose-refs and portal helpers for Base UI useRender and mergeProps, with the drag overlay portaled via react-dom createPortal. asChild composition becomes render props. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Vendor the base-nova field components and delete the Radix-based form.tsx, converting all form demos to Controller + Field composition. Wire the card demo submit button to its form element while at it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Remove all @radix-ui/* packages now that every component and demo is built on Base UI. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sweep docs and landing copy for Radix mentions, and rewrite the virtualizer scroll area and select guides to match the Base UI demos. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
react-hook-form fields without defaultValues start as undefined, which made useTimescape start uncontrolled and warn once typing produced a value. Pass null so the fields are controlled for their whole lifetime. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This branch had an error being deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Ports the entire registry from Radix UI to Base UI (ROADMAP Phase 4c), using the password-input pilot as the blueprint. Radix is fully excised from apps/v4.
@base-ui/reactidioms (rendercomposition,useControlled,useStableCallback).components/ui/form.tsxdeleted in favor of the base-novafield.tsxcomponents; all 13 example form demos plus the card demo converted toController+Fieldcomposition. The card demo's submit button is now actually wired to its form (latent bug).@radix-ui/*packages dropped from package.json and the lockfile (remaining lockfile mentions are transitive).field.value ?? nullso Base UI'suseControlledstays in controlled mode from first render (react-hook-form fields withoutdefaultValuesstartundefined, which previously tripped the uncontrolled→controlled dev warning).Verification
tsc --noEmitclean; prettier clean.FieldError(role="alert") with focus recovery; typing into the date-time-range field produces no controlled/uncontrolled warning; console clean throughout.Out of scope (pre-existing)
public/r) are rebuilt onfeat/style-refresh, not this branch.🤖 Generated with Claude Code