-
Changed Naming convention for boolean properties from
is<X>to<x>- isOpen -> open
- defaultIsOpen -> defaultOpen
- isDisabled -> disabled
- isInvalid -> invalid
- isRequired -> required
-
Introduce new
unstyledprop to every component to allow for unstyled rendering of the component or its parts -
Gradient style prop simplified to
gradientandgradientFromandgradientToprops. This reduces the runtime performance cost of parsing the gradient string, and allows for better type inference.
Before:
<Box bgGradient="linear(to-r, red.200, pink.500)" />After:
<Box bgGradient="to-r" gradientFrom="red.200" gradientTo="pink.500" />colorSchemeis nowcolorPalette: Prior to this change, thecolorSchemeprop could only be used in a component's theme. This has been changed tocolorPaletteto better reflect the purpose of the prop and can be used anywhere.
Before:
<Button colorScheme="blue">Click me</Button>After:
<Button colorPalette="blue">Click me</Button>Usage in any component, you can do somethine like:
<Box colorPalette="red">
<Box bg="colorPalette.400">Some box</Box>
<Text color="colorPalette.600">Some text</Text>
</Box>We've removed the Hide component in favor of hidding elements using the
hideFrom media queries or explicitly setting display: none on the element.
The Show component is now used to explicitly render an element based on the
condition set it when property. It doesn't rely on media queries.
You can combine the useMediaQuery() hook and Show to achieve the previous
Show and Hide components.
- Changed
spacingtogap - Changed
spacingXtorowGap - Changed
spacingYtocolumnGap - Remove
shouldWrapChildrenin favor of using theWrapItemcomponent explicitly
- Change
spacingtogap
We've removed the @chakra-ui/next-js package in favor of using the asChild
prop for better flexibility.
To style the Next.js image component, you can use the asChild prop on the
Box component.
<Box asChild>
<NextImage />
</Box>To style the Next.js link component, you can use the asChild prop on the
<Link isExternal asChild>
<NextLink />
</Link>We no longer infer the props from element passed via the as prop. This caused
a lot of slow typing issues and complexity in the codebase.
Prefer to use the asChild prop which offers better flexibility.
The
asChildpattern is inspired by Radix UI.
Due to the simplification of the as prop, we no longer provide a custom
forwardRef.
Prefer to use forwardRef from React directly.
Renamed all container parts to root. Kindly update your theme to reflect
- Removed
ControlBoxcomponent - Removed
@chakra-ui/iconspackage. Prefer to uselucide-reactorreact-iconsinstead.
All root components and their respective types are now suffixed with <X>.Root
or <X>Root
Accordion->Accordion.RootAccordionProps->AccordionRootPropsCheckbox->Checkbox.RootCheckboxProps->CheckboxRootProps- and so on...
- Rename
allowMultipletomultiple - Rename
allowToggletocollapsible - Rename
AccordionButtontoAccordion.Trigger - Rename
AccordionPaneltoAccordion.Content - Rename
AccordionIcontoAccordion.Indicator. To render a custom icon, you can use theAccordion.Indicatorcomponent and pass the icon as children.
Before:
<Accordion>
<AccordionItem>
<AccordionButton>
<AccordionIcon />
</AccordionButton>
<AccordionPanel pb={4}>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
commodo consequat.
</AccordionPanel>
</AccordionItem>
</Accordion>After:
<Accordion.Root>
<Accordion.Item>
<Accordion.Trigger>
<Accordion.Indicator />
</Accordion.Trigger>
<Accordion.Content pb={4}>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
commodo consequat.
</Accordion.Content>
</Accordion.Item>
</Accordion.Root>- Decompose
AvatarintoAvatar.Root,Avatar.Image, andAvatar.Fallback
Before:
<Avatar name="Christian Nwamba" src="https://bit.ly/code-beast" />After:
<Avatar.Root name="Dan Abrahmov" src="https://bit.ly/dan-abramov">
<Avatar.Image />
<Avatar.Fallback />
</Avatar.Root>- Removed
AvatarGroupin favor of using theGroupcomponent and setting thespaceXprop
Before
<AvatarGroup>
<Avatar name="Baba Lee" src="..." />
<Avatar name="Kent Dodds" />
</AvatarGroup>After
<Group gap="0" spaceX="-3">
<Avatar.Root size={size}>
<Avatar.Image src="..." />
<Avatar.Fallback>BA</Avatar.Fallback>
</Avatar.Root>
<Avatar.Root size={size} variant="solid">
<Avatar.Fallback>+3</Avatar.Fallback>
</Avatar.Root>
</Group>- Removed
AvatarBadgein factor of using theFloatingcomponent. This makes it easier to use other elements like smaller avatars or icons as badges.
<Avatar.Root colorPalette="green" variant="subtle">
<Avatar.Fallback>DA</Avatar.Fallback>
<Float placement="bottom-end" offsetX="1" offsetY="1">
<Circle bg="green.500" size="8px" outline="0.2em solid" outlineColor="bg" />
</Float>
</Avatar.Root>- Explicitly render the
separatorviaBreadcrumb.Separator. - Pass custom separator as children to the
Breadcrumb.Separatorcomponent - Explicitly render list via
Breadcrumb.List - Explicitly render the ellipsis via
Breadcrumb.Ellipsis - To add
spacing, set thegapon the list element listPropshas been removed. Pass props directly toBreadcrumb.List
Before:
<Breadcrumb spacing="4">
<BreadcrumbItem>
<BreadcrumbLink as={Link} to="/home" replace>
Breadcrumb 1
</BreadcrumbLink>
</BreadcrumbItem>
</Breadcrumb>After:
<Breadcrumb.Root>
<Breadcrumb.List spacing="4">
<Breadcrumb.Item>
<Breadcrumb.Link asChild>
<Link to="/home" replace>
Breadcrumb 1
</Link>
</Breadcrumb.Link>
</Breadcrumb.Item>
<Breadcrumb.Separator />
</Breadcrumb.List>
</Breadcrumb.Root>- Checkbox icon is now
Checkbox.Indicatorand can be used to customize the checkbox icon in the checked and indeterminate state.
Before:
<Checkbox defaultChecked>My Checkbox</Checkbox>After:
<Checkbox.Root defaultChecked>
<Checkbox.Control />
<Checkbox.Label>My Checkbox</Checkbox.Label>
</Checkbox.Root>Before:
<Progress value={50} />After:
<Progress.Root value={50}>
<Progress.Track>
<Progress.FilledTrack />
</Progress.Track>
<Progress.ValueText />
</Progress.Root>-
ProgressLabelis now assigned toProgress.ValueText. This means the theme key for the label is nowvalueText -
ProgressLabelshould now be used to provide a label for the progress bar
Before:
<CircularProgress value={50} />After:
<CircularProgress.Root value={50}>
<CircularProgress.Circle>
<CircularProgress.Track />
<CircularProgress.FilledTrack />
</CircularProgress.Circle>
</CircularProgress.Root>-
CircularProgressLabelis now assigned toCircularProgress.ValueText -
CircularProgressLabelshould now be used to provide a label for the progress bar
TagLeftIconandTagRightIconare removed in favor of rendering the icon directly inside theTagcomponent.
- Move
portalPropstoTooltip.Positioner
Before:
<Tooltip label="Hey there" hasArrow>
<Button>Hover me</Button>
</Tooltip>After:
<Tooltip.Root placement="bottom">
<Tooltip.Trigger asChild>
<Button>Hover me</Button>
</Tooltip.Trigger>
<Tooltip.Positioner>
<Tooltip.Content>
<Tooltip.Arrow />
Hey there
</Tooltip.Content>
</Tooltip.Positioner>
</Tooltip.Root>However, you can still get back to the legacy API by creating a custom component.
import { Tooltip } from "@chakra-ui/react"
export type CustomTooltipProps = Tooltip.RootProps & {
label?: string
hasArrow?: boolean
}
const CustomTooltip = (props: Props) => {
const { label, children, hasArrow, ...localProps } = props
const [rootProps, contentProps] = Tooltip.splitProps(localProps)
return (
<Tooltip.Root placement="bottom" {...rootProps}>
<Tooltip.Trigger asChild>
{isValidElement(children) ? children : <span>{children}</span>}
</Tooltip.Trigger>
<Tooltip.Content {...contentProps}>
{hasArrow && <Tooltip.Arrow />}
{label}
</Tooltip.Content>
</Tooltip.Root>
)
}- Remove
closeOnMouseDown, usecloseOnPointerDowninstead - Remove all
arrow*props in favor of rendering theTooltip.Arrowcomponent
Form control has now been renamed to Field to better reflect its purpose as an
element that represents a form field.
<Field id="first-name" required invalid>
<Label>First name</Label>
<Input placeholder="First Name" />
<HelpText>Keep it very short and sweet!</HelpText>
<ErrorMessage>Your First name is invalid</ErrorMessage>
</Field>HelperText has been renamed to Field.HelpText for brevity.
-
Removed
focusBorderColoranderrorBorderColor, consider setting the--focus-colorand--error-colorcss variables instead -
Renamed
SelectIcontoSelect.Indicator -
Move
valueandonChangeto theNativeSelect.Fieldcomponent
The Select component has been renamed to NativeSelect to better reflect its
purpose as a native select element, and give room for a custom select component.
The API has also changed significantly to make it more modular.
Before:
<Select color="red.400">
<option value="option1">Option 1</option>
<option value="option2">Option 2</option>
<option value="option3">Option 3</option>
</Select>After:
<NativeSelect.Root>
<NativeSelect.Field color="pink.500" placeholder="Select option">
<option value="Option 1">Option 1</option>
<option value="Option 2">Option 2</option>
<option value="Option 3">Option 3</option>
</NativeSelect.Field>
<NativeSelect.Icon />
</NativeSelect.Root>- The
Modalcomponent has been renamed toDialogto better reflect its purpose as a dialog element. - Removed
containerPropsin favor of rendering theDialog.Positionercomponent to better control this element. - Renamed
ModalOverlaytoDialog.Backdrop - Renamed
initialFocusReftoinitialFocusElwhich is now a function that returns the element to focus on - Renamed
finalFocusReftofinalFocusElwhich is now a function that returns the element to focus on - Renamed
returnFocusOnClosetorestoreFocus - Renamed
blockScrollOnMounttopreventScroll - Removed
preserveScrollBarGapandallowPinZoom onOpenandonClose->onOpenChange- Now requires an explicit
Portalcomponent to render the dialog outside the DOM tree
Before:
<Modal>
<ModalOverlay />
<ModalContent>
<ModalHeader>Modal Title</ModalHeader>
<ModalCloseButton />
<ModalBody />
<ModalFooter />
</ModalContent>
</Modal>After:
<Dialog.Root>
<Dialog.Backdrop />
<Dialog.Positioner>
<Dialog.Content>
<Dialog.Header>Dialog Title</Dialog.Header>
<Dialog.CloseTrigger />
<Dialog.Body />
<Dialog.Footer />
</Dialog.Content>
</Dialog.Positioner>
</Dialog.Root>- Same changes as
Dialogabove - Renamed
DrawerOverlaytoDrawer.Backdrop - Removed
isFullHeightin favor of settingheight=100dvhon the content directly.
We've removed the AlertDialog component in favor of passing the
role="alertdialog" to the Dialog component.
-
PopoverTriggernow renders abuttonby default. Use theasChildto switch the trigger to a different element. -
PopoverAnchornow renders aspanby default. Use theasChildto switch the anchor to a different element. -
Popover now requires the
Popover.Positionercomponent to control the position of the popover. -
Removed
containerPropsin favor of rendering thePopover.Positionercomponent
Before:
<Popover>
<PopoverTrigger>
<Button>Trigger</Button>
</PopoverTrigger>
<PopoverContent>
<PopoverArrow />
<PopoverCloseButton />
<PopoverHeader>Confirmation!</PopoverHeader>
<PopoverBody>Are you sure you want to have that milkshake?</PopoverBody>
</PopoverContent>
</Popover>After:
<Popover.Root>
<Popover.Trigger asChild>
<Button>Trigger</Button>
</Popover.Trigger>
<Popover.Positioner>
<Popover.Content>
<Popover.Arrow />
<Popover.CloseTrigger />
<Popover.Header>Confirmation!</Popover.Header>
<Popover.Body>
<p>Are you sure you want to have that milkshake?</p>
<br />
<button>Yes</button>
<button>No</button>
</Popover.Body>
</Popover.Content>
</Popover.Positioner>
</Popover.Root>The Button component has been simplified to remove internal complexity.
isLoading
Removed isLoading prop in favor of rendering Spinner component
Before:
<Button isLoading colorScheme="blue">
Click me
</Button>After:
<Button disabled colorPalette="blue">
<Spinner boxSize="1em" />
Click me
</Button>Alternative approach to keep the content width but center the spinner:
<Button disabled variant="solid" colorPalette="blue">
<AbsoluteCenter>
<BeatLoader size={8} color="white" />
</AbsoluteCenter>
<Span opacity="0">Click me</Span>
</Button>leftIcon and rightIcon
Removed leftIcon and rightIcon in favor of rendering an icon component
inlined with the button content.
To implement
iconSpacing, you can use thegapprop on theButtoncomponent.
Before:
<Button leftIcon={<AddIcon />}>Click me</Button>After:
<Button>
<AddIcon />
Click me
</Button>Removed loadingText in favor of updating the button content directly.
Before:
<Button isLoading loadingText="Submitting">
Click me
</Button>After:
<Button isDisabled>
<Spinner boxSize="1em" />
Submitting
</Button>Renamed all table components to better reflect their purpose. This also affects the theme keys.
- Renamed
TableContainertoTable.Overflow - Renamed
TdtoTable.Cell - Renamed
ThtoTable.ColumnHeader - Renamed
TrtoTable.Row - Renamed
TheadtoTable.Header - Renamed
TbodytoTable.Body - Renamed
TfoottoTable.Footer - Renamed
isNumerictonumeric
- Removed
rootPropsin favor of rendering theMenu.Positionercomponent - Renamed
MenuButtontoMenu.Trigger
-
Removed
OrderedListandUnorderedListin favor of using theListcomponent with theasprop. -
To change the list style type, you can use the
styleTypeprop on theListcomponent.
We've added Em , Strong, Quote and Span components
The For component is a new component that allows you to render a list of items
using a render prop.
import { For } from "@chakra-ui/react"
const Demo = () => {
return (
<For each={[1, 2, 3]} fallback={<div>No items</div>}>
{(item) => <div key={item}>{item}</div>}
</For>
)
}The Bleed component applied a negative margin to allow content to bleed out
into the surrounding layout.
export const Demo = () => (
<Box padding="4" borderWidth="1px">
<Bleed inline="4" bg="pink.100" padding="3">
Some bleed
</Bleed>
<Box padding="4">Inner text</Box>
</Box>
)You can import components by leveraging the dot notation.
import { Accordion } from "@chakra-ui/react"
const Demo = () => {
return (
<Accordion.Root>
<Accordion.Item>
<Accordion.Trigger>Click me</Accordion.Trigger>
<Accordion.Content>Panel content</Accordion.Content>
</Accordion.Item>
</Accordion.Root>
)
}Removed support for as prop due to the type complexity involved.
Action: Replace asChild in chakra factory and existing components.
import { Button } from "@chakra-ui/react"
const Demo = () => {
return (
<Button asChild>
<a href="#">Child</a>
</Button>
)
}The chakra factory has been recipes to make it easier to style components
using recipes. Its API is inspired by Panda CSS and Stitches.
- Renamed
baseStyletobase - Removed
variantsandsizesin favor of defining them directly in thevariantsobject - Removed
sxand__cssin favor of using thecssprop which can now take an array of styles, which will be merged together.
import { chakra } from "@chakra-ui/react"
const Alert = chakra("div", {
base: {
lineHeight: "1",
fontSize: "sm",
rounded: 4,
fontFamily: "Inter",
color: "white",
},
variants: {
variant: {
default: { bg: "gray" },
error: { bg: "red" },
success: { bg: "green" },
warning: { bg: "orange" },
},
sizes: {
sm: { paddingX: 10, paddingY: 5 },
md: { paddingX: 20, paddingY: 10 },
lg: { paddingX: 30, paddingY: 15 },
},
},
defaultVariants: {
variant: "default",
size: "md",
},
})We've also removed support for functions in the theme object due to the performance implications.
Consider the following approach instead:
- Use the
data-*attribute to store dynamic values and style them using CSS - Design the dynamic property/value in the recipe
- Leverage
compoundVariantsto create complex variants overrides
We've renamed useStyleConfig to useRecipe, and useMultiStyleConfig to
useSlotRecipe
Before:
import { chakra, useStyleConfig } from "@chakra-ui/react"
function Alert(props) {
const elementProps = omitThemingProps(props)
const styles = useStyleConfig("Alert", props)
return <chakra.div {...elementProps} __css={styles} />
}After:
import { chakra, useRecipe } from "@chakra-ui/react"
function Alert(props) {
const recipe = useRecipe("Alert", props.recipe)
const [variantProps, elementProps] = recipe.splitVariantProps(props)
return <chakra.div {...elementProps} css={recipe(variantProps)} />
}Before:
import { chakra, useMultiStyleConfig } from "@chakra-ui/react"
function Alert(props) {
const elementProps = omitThemingProps(props)
const styles = useMultiStyleConfig("Alert", props)
return (
<chakra.div __css={styles.root}>
<chakra.p __css={styles.title}>Welcome</chakra.p>
</chakra.div>
)
}After:
import { chakra, useSlotRecipe } from "@chakra-ui/react"
function Alert(props) {
const recipe = useSlotRecipe("Alert", props.recipe)
const [variantProps, elementProps] = recipe.splitVariantProps(props)
const styles = recipe(variantProps)
return (
<chakra.div css={styles.root}>
<chakra.p css={styles.title}>Welcome</chakra.p>
</chakra.div>
)
}TODO
Prefer to use useChakraContext instead of useTheme to access the theme and
much more.
- Changed to
RecipePropsandSlotRecipePropsfor better clarity
- No more
ButtonGroup, prefer to use the genericGroupcomponent instead - No more
InputGroup, prefer genericGroupandAddoncomponents - No more
InputLeftAddonandInputRightAddon, prefer to useAddoncomponent withplacementprop
- Remove isRound in favor of passing
shape=pill - Prefer to use
childrenovericonprop
- Added new
Blockquotecomponent - Docs: https://designsystem.utah.gov/library/components/textLayout/blockQuote
- Remove
maxprop in favor of userland control - Remove excess label part
- Move image related props to
Avatar.Imagecomponent - Move fallback icon to
Avatar.Fallbackcomponent - Move
nameprop toAvatar.Fallbackcomponent
We're removed the storybook addon in favor of using @storybook/addon-themes
and withThemeByClassName helper.
- No more
InputLeftAddonandInputRightAddon, prefer to useInputAddoncomponent with theGroupcomponent
- No more
InputLeftElementandInputRightElement, prefer to useInputElementcomponent with theGroupcomponent andplacementprop.
- No more
InputGroup, prefer genericGroupcomponent
- Removed
requiredIndicatorandoptionalIndicatorin favor of using theFormLabel.RequiredIndicatorwith thefallbackprop if needed
_activeLinkis now_currentPage_activeStepis now_currentStep- No more
focusBorderColoranderrorBorderColor, consider setting the--focus-colorand--error-colorcss variables instead
- Remove
top-accentandleft-accentin favor addingborderLeftandborderTopdirectly to theAlertcomponent - Added new outline variant
- No more
soft-roundedandsolid-roundedvariants - The
enclosedvariant has been modified - Added
plainvariant for usage withTabs.Indicator - Changed
isManualtoactivationMode=manual
- Default color palette is now gray for all components but you can configure this in your theme.
- Move
stripedandanimatedto thedecorationvariant in recipe. Value can be eitherstripedorstriped-animated - label or valueText no longer comes with a color by default, you can style yourself
No longer exists. Prefer to use the IconButton component with your own icon.
- Remove
SkeletonTextandSkeletonCirclein favor of using theSkeletoncomponent and styling as needed - Remove
fitContentprop in favor of passingwidth="fit-content"directly to theSkeletoncomponent - Remove
startColorandendColorprop in favor of using css variables
Skeleton Text
Before:
<SkeletonText />After:
<Stack>
<Skeleton height="40px" />
<Skeleton height="40px" />
<Skeleton width="40%" height="40px" />
</Stack>Skeleton Circle
Before:
<SkeletonCircle />After:
<Skeleton width="40px" height="40px" rounded="full" />- Renamed
SteppertoSteps - Changed data attribute format
data-status=complete->data-completeand style with_completedata-status=active->data-currentand style with_currentdata-status=incomplete->data-incompleteand style with_incomplete
- Removed
StepIndicatorContent, use theSteps.Statuscomponent to render a component based on status
Before:
<Stepper index={activeStep}>
{steps.map((step, index) => (
<Step key={index}>
<StepIndicator>
<StepStatus
complete={<StepIcon />}
incomplete={<StepNumber />}
active={<StepNumber />}
/>
</StepIndicator>
<Box flexShrink="0">
<StepTitle>{step.title}</StepTitle>
<StepDescription>{step.description}</StepDescription>
</Box>
<StepSeparator />
</Step>
))}
</Stepper>After:
<Steps.Root index={activeStep}>
{steps.map((step, index) => (
<Steps.Item key={index}>
<Steps.Indicator>
<Steps.Status
complete={<StepIcon />}
incomplete={<StepNumber />}
active={<StepNumber />}
/>
</Steps.Indicator>
<Box flexShrink="0">
<Steps.Title>{step.title}</Steps.Title>
<Steps.Description>{step.description}</Steps.Description>
</Box>
<Steps.Separator />
</Steps.Item>
))}
</Stepper>- Rename to
Separator - Switch to
divelement for better layout control - Simplify component to rely on
borderTopWidthandborderInlineStartWidth - To change the thickness reliably, set the
--divider-border-widthcss variable
- Remove
shouldWrapChildrenin favor of using theStackItemexplicitly - Rename
spacingtogap - Rename
dividerprop toseparator
- Rename
NumberInputSteppertoNumberInput.Control - Rename
NumberInputStepperIncrementtoNumberInput.IncrementTrigger - Rename
NumberInputStepperDecrementtoNumberInput.DecrementTrigger - Remove
focusBorderColoranderrorBorderColor, consider setting the--focus-colorand--error-colorcss variables instead
Before:
<NumberInput>
<NumberInputField />
<NumberInputStepper>
<NumberIncrementStepper />
<NumberDecrementStepper />
</NumberInputStepper>
</NumberInput>After:
<NumberInput.Root>
<NumberInput.Field />
<NumberInput.Control>
<NumberInput.IncrementTrigger />
<NumberInput.DecrementTrigger />
</NumberInput.Control>
</NumberInput.Root>- Changed
value,defaultValueandonChangeto usestring[]instead ofstring - Add new
PinInput.ControlandPinInput.Labelcomponent parts PinInput.Rootnow renders adivelement by default. Consider combining withStackorGroupfor better layout control
- Now renders a native
imgwithout any fallback - Remove
fallbackSrcdue to the SSR issues it causes - Remove
useImagehook - Remove
Imgin favor of using theImagecomponent directly
There's been a significant change to the Toast component to make it more
flexible and easier to style.
- Removed
createStandaloneToasts,useToastin favor of usingcreateToasterto spawn toast in a specific position. - With the
toastreturned fromcreateToaster, you can now create toasts outside of the React tree. - Toast now reads from its own recipe and all parts can be styled directly
Before:
import { useToast } from "@chakra-ui/react"
const toast = useToast()
toast({
title: "Account created.",
description: "We've created your account for you.",
status: "success",
})After:
const [ToastContainer, toast] = createToaster({
placement: "bottom",
render(toast) {
return (
<Toast.Transition>
<Toast.Root status={toast.status}>
<Toast.Title>{toast.title}</Toast.Title>
<Toast.Description>{toast.description}</Toast.Description>
<Box pos="absolute" top="1" insetEnd="1">
<Toast.CloseTrigger asChild>
<HiX />
</Toast.CloseTrigger>
</Box>
</Toast.Root>
</Toast.Transition>
)
},
})
toast({
title: "Account created.",
description: "We've created your account for you.",
status: "success",
})- Remove
appendToParentPortalprop in favor of using thecontainerRef - Simplify the
Portalcomponent - Remove
PortalManagercomponent
- We've removed the
ColorModeProvideranduseColorModein favor of usingnext-themesor similar libraries. - Removed
LightMode,DarkModeandColorModeScriptcomponents - Removed
useColorModeValuein favor of usinguseThemefromnext-themes
// TODO: Provide snippets
_activeLink->_currentPage_activeStep->_currentStepapplyis no longer supported, prefer creating a recipe using thechakrafactory instead
- Rename
StatArrowtoStat.Indicator - Rename
StatNumbertoStat.Value
- Now requires the
Slider.Controlto work properly - Added new
Slider.ValueTextandSlider.Labelcomponents
- Rename
EnvironmentProvidertoEnvironment - Rename
useEnvironmenttouseEnvironmentContext - Environment is no longer automatically provided by
ChakraProvider. You must wrap your app inEnvironmentto use it and provide thegetRootNodefunction
- Rename
CollapsetoCollapsiblenamespace - Rename
intoopen animateOpacityhas been removed, use keyframes animationscollapse-inandcollapse-outinstead
Before:
<Collapse in={isOpen} animateOpacity>
Some content
</Collapse>After:
<Collapsible.Root open={isOpen}>
<Collapsible.Content>Some content</Collapsible.Content>
</Collapsible.Root>