# Takeat UI Kit > React component library for Takeat's design system — built on Base UI, styled with vanilla-extract. ## Install ```bash yarn add takeat-design-system-ui-kit # peer deps: react >=18, @base-ui/react >=1.3, @vanilla-extract/css ``` ## Setup Wrap your app with `UiKitTheme` and import the CSS: ```tsx import "takeat-design-system-ui-kit/dist/index.css"; import { UiKitTheme } from "takeat-design-system-ui-kit"; export default function App({ children }) { return {children}; } ``` `UiKitTheme` applies the default theme class to the root element and injects device-responsive CSS variables. It accepts an optional `theme` prop (`defaultTheme | darkTheme | betaTheme`) and an optional `device` prop (`"desktop" | "tablet" | "totem"`). ## Imports ```ts // Root barrel — components and types import { Button, Input, Modal } from "takeat-design-system-ui-kit"; // Per-component subpath (smaller bundles) import { Button } from "takeat-design-system-ui-kit/button"; // Icons — ALWAYS use the subpath, never the root barrel import { IconCheck, IconClose } from "takeat-design-system-ui-kit/icons/IconCheck"; // or import the whole icons namespace import * as Icons from "takeat-design-system-ui-kit/icons"; // Theme tokens (CSS vars at runtime) import { vars } from "takeat-design-system-ui-kit"; // vars.colors.primary.default, vars.colors.neutral.dark, etc. ``` ## Components | Component | Purpose | Required props | Key props | Import | |-----------|---------|----------------|-----------|--------| | Accordion | — | header | — | `takeat-design-system-ui-kit` | | AlertDialog | — | — | open: boolean | `takeat-design-system-ui-kit` | | Avatar | — | — | size: number | `takeat-design-system-ui-kit` | | Badge | — | — | variant: "color"|"neutral"|"default"|"outlined"|"tonal"|"counter"; size: number | `takeat-design-system-ui-kit` | | Button | — | — | variant: "default"|"outlined"|"tonal"|"text"|"segmented"|"link"; size: "small"|"medium"|"large"; color: "primary"|"red"|"yellow"|"green"|"blue"|"orange"|"second_green"|"neutral"; isLoading: boolean; disabled: boolean; isSelected: boolean; render: ReactElement> | ComponentRenderFn | `takeat-design-system-ui-kit` | | Calendar | — | — | hideOptions: ("Hoje" | "Ontem" | "Essa semana" | "Semana passada" | "Esse mês" | "Mês passado" | "Esse ano")[]; hideAllOptions: boolean; onlyDate: boolean; isLoading: boolean; disabled: boolean; useTimeRange: boolean | `takeat-design-system-ui-kit` | | CalendarDateFuture | — | — | hideOptions: ("Hoje" | "Amanhã" | "Essa semana" | "Semana que vem" | "Esse mês" | "Mês que vem" | "Esse ano")[]; hideAllOptions: boolean; onlyDate: boolean; isLoading: boolean; disabled: boolean; useTimeRange: boolean | `takeat-design-system-ui-kit` | | Checkbox | — | — | labelPosition: "top"|"bottom"|"left"|"right"; checked: boolean; defaultChecked: boolean; disabled: boolean; indeterminate: boolean; required: boolean; readOnly: boolean; render: ReactElement> | ComponentRenderFn | `takeat-design-system-ui-kit` | | CheckboxGroup | — | children | disabled: boolean | `takeat-design-system-ui-kit` | | CollapsableMenu | — | menuObject | defaultSideBarOpen: boolean | `takeat-design-system-ui-kit` | | ColorBadge | — | — | customColor: "green"|"red"|"blue"|"yellow"|"neutral"|"primary"|"orange"|"second_green" | `takeat-design-system-ui-kit` | | CounterBadge | — | — | size: number | `takeat-design-system-ui-kit` | | DevelopedByTakeat | — | — | color: "primary"|"red"|"yellow"|"green"|"blue"|"orange"|"second_green"|"neutral"; horizontal: boolean | `takeat-design-system-ui-kit` | | Divider | — | — | orientation: "horizontal"|"vertical" | `takeat-design-system-ui-kit` | | Drawer | — | — | open: boolean; side: "left"|"right"|"top"|"bottom"; disableSwipe: boolean | `takeat-design-system-ui-kit` | | Dropdown | — | anchor | isOpen: boolean; side: "top"|"bottom"|"left"|"right"|"inline-end"|"inline-start"; align: "start"|"center"|"end" | `takeat-design-system-ui-kit` | | HighlightIcon | — | icon | icon: ReactElement>; color: "primary"|"red"|"yellow"|"green"|"blue"|"orange"|"second_green"; size: number | `takeat-design-system-ui-kit` | | Image | — | — | — | `takeat-design-system-ui-kit` | | Input | — | — | size: "small"|"medium"|"large"; isLoading: boolean; isCurrency: boolean; hasPrefix: boolean | `takeat-design-system-ui-kit` | | ColumnsGrid | — | columnCount, children | — | `takeat-design-system-ui-kit` | | Grid | — | children | children: ReactElement>[] | `takeat-design-system-ui-kit` | | GridArea | — | areaTemplate, children | children: ReactElement>[] | `takeat-design-system-ui-kit` | | LoadingPage | — | — | reversed: boolean | `takeat-design-system-ui-kit` | | Menu | — | — | — | `takeat-design-system-ui-kit` | | Meter | — | value | showValue: boolean | `takeat-design-system-ui-kit` | | NeutralBadge | — | — | — | `takeat-design-system-ui-kit` | | NotificationBanner | — | — | variant: "success"|"error"|"info"|"warning"; isOpen: boolean | `takeat-design-system-ui-kit` | | Radio | — | — | labelPosition: "top"|"bottom"|"left"|"right"; disabled: boolean; readOnly: boolean; required: boolean; checked: boolean; defaultChecked: boolean | `takeat-design-system-ui-kit` | | RadioGroup | — | name, options | labelPosition: "top"|"bottom"|"left"|"right"; isRequired: boolean; vertical: boolean | `takeat-design-system-ui-kit` | | ScrollArea | — | children | maxHeight: string | number; draggable: boolean | `takeat-design-system-ui-kit` | | Select | — | — | isLoading: boolean; isDisabled: boolean; isMulti: boolean; isClearable: boolean; isSearchable: boolean; required: boolean | `takeat-design-system-ui-kit` | | SingleCalendar | — | — | onlyDate: boolean; isLoading: boolean; disabled: boolean | `takeat-design-system-ui-kit` | | SingleTab | — | — | isSelected: boolean; variant: "default"|"transparent" | `takeat-design-system-ui-kit` | | Skeleton | — | — | width: string | number; height: string | number; borderRadius: string | number | `takeat-design-system-ui-kit` | | Slider | — | — | value: number | number[]; defaultValue: number | number[]; onValueChange: ((value: number | number[]) => void); onValueCommitted: ((value: number | number[]) => void); disabled: boolean; orientation: "horizontal"|"vertical"; showValue: boolean | `takeat-design-system-ui-kit` | | Spinner | — | — | size: number | `takeat-design-system-ui-kit` | | Switch | — | — | labelPosition: "top"|"bottom"|"left"|"right"; isLoading: boolean; checked: boolean; defaultChecked: boolean; disabled: boolean; required: boolean; readOnly: boolean; render: ReactElement> | ComponentRenderFn | `takeat-design-system-ui-kit` | | TabGroup | — | tabs | variant: "default"|"transparent"; tabs: (string | TabArrayItemProps)[] | `takeat-design-system-ui-kit` | | TakeatLogo | — | — | color: "primary"|"blue"|"green"|"orange"|"red"|"yellow"|"second_green"|"neutral"; width: string | number; height: string | number | `takeat-design-system-ui-kit` | | TextArea | — | — | isLoading: boolean; variant: "default"|"filled" | `takeat-design-system-ui-kit` | | Toolbar | — | — | orientation: "horizontal"|"vertical"; disabled: boolean; loopFocus: boolean | `takeat-design-system-ui-kit` | | Tooltip | — | content, children | children: ReactElement>; side: "top"|"bottom"|"left"|"right"; align: "start"|"center"|"end"; disabled: boolean | `takeat-design-system-ui-kit` | | ErrorBoundary | — | children | — | `takeat-design-system-ui-kit` | | Modal | — | — | open: boolean | `takeat-design-system-ui-kit` | ## Theme tokens ### colors | Token | Value | |-------|-------| | `vars.colors.primary.lightest` | `#e5a1a4` | | `vars.colors.primary.lighter` | `#db6e72` | | `vars.colors.primary.light` | `#d13f45` | | `vars.colors.primary.default` | `#c8131b` | | `vars.colors.primary.dark` | `#94090f` | | `vars.colors.primary.darker` | `#610206` | | `vars.colors.red.lightest` | `#e5a1a4` | | `vars.colors.red.lighter` | `#db6e72` | | `vars.colors.red.light` | `#d13f45` | | `vars.colors.red.default` | `#c8131b` | | `vars.colors.red.dark` | `#94090f` | | `vars.colors.red.darker` | `#610206` | | `vars.colors.yellow.lightest` | `#ffebc8` | | `vars.colors.yellow.lighter` | `#ffd894` | | `vars.colors.yellow.light` | `#ffc561` | | `vars.colors.yellow.default` | `#ffb32f` | | `vars.colors.yellow.dark` | `#cc8c1d` | | `vars.colors.yellow.darker` | `#99670f` | | `vars.colors.green.lightest` | `#bce3de` | | `vars.colors.green.lighter` | `#89d9cf` | | `vars.colors.green.light` | `#59cfc1` | | `vars.colors.green.default` | `#2ec9b7` | | `vars.colors.green.dark` | `#1d9688` | | `vars.colors.green.darker` | `#0f635a` | | `vars.colors.blue.lightest` | `#99dfff` | | `vars.colors.blue.lighter` | `#66cfff` | | `vars.colors.blue.light` | `#33bfff` | | `vars.colors.blue.default` | `#01afff` | | `vars.colors.blue.dark` | `#018ccc` | | `vars.colors.blue.darker` | `#016999` | | `vars.colors.orange.lightest` | `#FFD8BD` | | `vars.colors.orange.lighter` | `#FFB98A` | | `vars.colors.orange.light` | `#FF9B57` | | `vars.colors.orange.default` | `#FF7D24` | | `vars.colors.orange.dark` | `#CC5F14` | | `vars.colors.orange.darker` | `#994409` | | `vars.colors.second_green.lightest` | `#A5C7AF` | | `vars.colors.second_green.lighter` | `#77BD8B` | | `vars.colors.second_green.light` | `#4DB26A` | | `vars.colors.second_green.default` | `#27A84C` | | `vars.colors.second_green.dark` | `#167532` | | `vars.colors.second_green.darker` | `#0A421A` | | `vars.colors.neutral.white` | `#ffffff` | | `vars.colors.neutral.lightest` | `#f6f6f6` | | `vars.colors.neutral.lighter` | `#ededed` | | `vars.colors.neutral.light` | `#c6c6c6` | | `vars.colors.neutral.default` | `#7a7a7a` | | `vars.colors.neutral.dark` | `#545454` | | `vars.colors.neutral.darker` | `#222222` | | `vars.colors.neutral.black` | `#000000` | | `vars.colors.fixed.white` | `#ffffff` | | `vars.colors.fixed.black` | `#000000` | ### shadows | Token | Value | |-------|-------| | `vars.shadows.lighter` | `0px 0px 2px 0px #0000001F, 0px 1px 2px 0px #00000024;` | | `vars.shadows.light` | `0px 0px 2px 0px #0000001F, 0px 2px 4px 0px #00000024;` | | `vars.shadows.default` | `0px 0px 2px 0px #0000001F, 0px 4px 8px 0px #00000024;` | | `vars.shadows.dark` | `0px 0px 2px 0px #0000001F, 0px 8px 16px 0px #00000024;` | | `vars.shadows.darker` | `0px 0px 8px 0px #00000033, 0px 10px 25px 0px #00000024;` | ### typography | Token | Value | |-------|-------| | `vars.typography.family.default` | `"Poppins", sans-serif` | | `vars.typography.weights.regular` | `400` | | `vars.typography.weights.medium` | `500` | | `vars.typography.weights.semibold` | `600` | | `vars.typography.weights.bold` | `700` | | `vars.typography.scale.display.fontSize` | `24px` | | `vars.typography.scale.display.lineHeight` | `28px` | | `vars.typography.scale.display.fontWeight` | `700` | | `vars.typography.scale.heading.fontSize` | `20px` | | `vars.typography.scale.heading.lineHeight` | `24px` | | `vars.typography.scale.heading.fontWeight` | `700` | | `vars.typography.scale.body.fontSize` | `14px` | | `vars.typography.scale.body.lineHeight` | `20px` | | `vars.typography.scale.body.fontWeight` | `400` | | `vars.typography.scale.caption.fontSize` | `12px` | | `vars.typography.scale.caption.lineHeight` | `16px` | | `vars.typography.scale.caption.fontWeight` | `500` | | `vars.typography.scale.small.fontSize` | `10px` | | `vars.typography.scale.small.lineHeight` | `14px` | | `vars.typography.scale.small.fontWeight` | `400` | ### spacing | Token | Value | |-------|-------| | `vars.spacing.xxs` | `4px` | | `vars.spacing.xs` | `8px` | | `vars.spacing.s` | `16px` | | `vars.spacing.m` | `24px` | | `vars.spacing.l` | `32px` | | `vars.spacing.xl` | `40px` | | `vars.spacing.xxl` | `48px` | ### radius | Token | Value | |-------|-------| | `vars.radius.s` | `4px` | | `vars.radius.m` | `8px` | | `vars.radius.l` | `12px` | | `vars.radius.xl` | `16px` | | `vars.radius.xxl` | `24px` | ### semantic | Token | Value | |-------|-------| | `vars.semantic.error` | `#c8131b` | | `vars.semantic.success` | `#2ec9b7` | | `vars.semantic.info` | `#01afff` | | `vars.semantic.warning` | `#ffb32f` | ### zIndex | Token | Value | |-------|-------| | `vars.zIndex.dropdown` | `1000` | | `vars.zIndex.modal` | `1100` | | `vars.zIndex.tooltip` | `1200` | | `vars.zIndex.toast` | `1300` | ### motion | Token | Value | |-------|-------| | `vars.motion.fast` | `150ms` | | `vars.motion.normal` | `300ms` | | `vars.motion.slow` | `500ms` | ### components | Token | Value | |-------|-------| | `vars.components.fieldInfo.fontSize.desktop` | `12px` | | `vars.components.fieldInfo.fontSize.tablet` | `14px` | | `vars.components.fieldInfo.fontSize.totem` | `16px` | | `vars.components.input.label.fontSize.desktop` | `16px` | | `vars.components.input.label.fontSize.large` | `16px` | | `vars.components.input.label.fontSize.medium` | `14px` | | `vars.components.input.label.fontSize.small` | `12px` | | `vars.components.input.label.fontSize.tablet` | `18px` | | `vars.components.input.label.fontSize.tablet-medium` | `16px` | | `vars.components.input.label.fontSize.tablet-small` | `16px` | | `vars.components.input.label.fontSize.totem` | `20px` | | `vars.components.input.label.fontSize.totem-medium` | `18px` | | `vars.components.input.label.fontSize.totem-small` | `16px` | | `vars.components.input.input.fontSize.desktop` | `14px` | | `vars.components.input.input.fontSize.large` | `14px` | | `vars.components.input.input.fontSize.medium` | `14px` | | `vars.components.input.input.fontSize.small` | `12px` | | `vars.components.input.input.fontSize.tablet` | `16px` | | `vars.components.input.input.fontSize.tablet-medium` | `16px` | | `vars.components.input.input.fontSize.tablet-small` | `16px` | | `vars.components.input.input.fontSize.totem` | `18px` | | `vars.components.input.input.fontSize.totem-medium` | `16px` | | `vars.components.input.input.fontSize.totem-small` | `16px` | | `vars.components.input.input.height.desktop` | `40px` | | `vars.components.input.input.height.large` | `40px` | | `vars.components.input.input.height.medium` | `32px` | | `vars.components.input.input.height.small` | `24px` | | `vars.components.input.input.height.tablet` | `48px` | | `vars.components.input.input.height.tablet-medium` | `40px` | | `vars.components.input.input.height.tablet-small` | `32px` | | `vars.components.input.input.height.totem` | `56px` | | `vars.components.input.input.height.totem-medium` | `48px` | | `vars.components.input.input.height.totem-small` | `40px` | | `vars.components.input.input.borderRadius.desktop` | `8px` | | `vars.components.input.input.borderRadius.large` | `8px` | | `vars.components.input.input.borderRadius.medium` | `8px` | | `vars.components.input.input.borderRadius.small` | `4px` | | `vars.components.input.input.borderRadius.tablet` | `12px` | | `vars.components.input.input.borderRadius.tablet-medium` | `8px` | | `vars.components.input.input.borderRadius.tablet-small` | `4px` | | `vars.components.input.input.borderRadius.totem` | `16px` | | `vars.components.input.input.borderRadius.totem-medium` | `8px` | | `vars.components.input.input.borderRadius.totem-small` | `8px` | | `vars.components.input.input.padding.desktop` | `8px 16px` | | `vars.components.input.input.padding.large` | `8px 16px` | | `vars.components.input.input.padding.medium` | `4px 12px` | | `vars.components.input.input.padding.small` | `4px 8px` | | `vars.components.input.input.padding.tablet` | `8px 16px` | | `vars.components.input.input.padding.tablet-medium` | `4px 16px` | | `vars.components.input.input.padding.tablet-small` | `4px 12px` | | `vars.components.input.input.padding.totem` | `8px 12px` | | `vars.components.input.input.padding.totem-medium` | `8px 12px` | | `vars.components.input.input.padding.totem-small` | `4px 12px` | | `vars.components.select.padding.desktop` | `4px 16px` | | `vars.components.select.padding.tablet` | `4px 16px` | | `vars.components.select.padding.totem` | `4px 12px` | | `vars.components.button.fontSize.medium` | `14px` | | `vars.components.button.fontSize.small` | `12px` | | `vars.components.button.fontSize.large` | `14px` | | `vars.components.button.fontSize.tablet` | `16px` | | `vars.components.button.fontSize.tablet-medium` | `16px` | | `vars.components.button.fontSize.tablet-small` | `14px` | | `vars.components.button.fontSize.totem` | `24px` | | `vars.components.button.fontSize.totem-medium` | `24px` | | `vars.components.button.fontSize.totem-small` | `22px` | | `vars.components.button.height.large` | `40px` | | `vars.components.button.height.medium` | `32px` | | `vars.components.button.height.small` | `24px` | | `vars.components.button.height.tablet` | `48px` | | `vars.components.button.height.tablet-medium` | `40px` | | `vars.components.button.height.tablet-small` | `32px` | | `vars.components.button.height.totem` | `56px` | | `vars.components.button.height.totem-medium` | `48px` | | `vars.components.button.height.totem-small` | `40px` | | `vars.components.button.padding.large.text` | `0 24px` | | `vars.components.button.padding.large.icon` | `0 24px 0 16px` | | `vars.components.button.padding.large.textAndIcon` | `0 24px 0 16px` | | `vars.components.button.padding.medium.text` | `0 12px` | | `vars.components.button.padding.medium.icon` | `0 12px 0 8px` | | `vars.components.button.padding.medium.textAndIcon` | `0 12px 0 8px` | | `vars.components.button.padding.small.text` | `0 8px` | | `vars.components.button.padding.small.icon` | `0 8px 0 4px` | | `vars.components.button.padding.small.textAndIcon` | `0 8px 0 4px` | | `vars.components.button.padding.tablet.text` | `0 24px` | | `vars.components.button.padding.tablet.icon` | `0 24px 0 16px` | | `vars.components.button.padding.tablet.textAndIcon` | `0 24px 0 16px` | | `vars.components.button.padding.tablet-medium.text` | `0 12px` | | `vars.components.button.padding.tablet-medium.icon` | `0 12px 0 8px` | | `vars.components.button.padding.tablet-medium.textAndIcon` | `0 12px 0 8px` | | `vars.components.button.padding.tablet-small.text` | `0 8px` | | `vars.components.button.padding.tablet-small.icon` | `0 8px 0 4px` | | `vars.components.button.padding.tablet-small.textAndIcon` | `0 8px 0 4px` | | `vars.components.button.padding.totem.text` | `0 24px` | | `vars.components.button.padding.totem.icon` | `0 24px 0 16px` | | `vars.components.button.padding.totem.textAndIcon` | `0 24px 0 16px` | | `vars.components.button.padding.totem-medium.text` | `0 12px` | | `vars.components.button.padding.totem-medium.icon` | `0 12px 0 8px` | | `vars.components.button.padding.totem-medium.textAndIcon` | `0 12px 0 8px` | | `vars.components.button.padding.totem-small.text` | `0 8px` | | `vars.components.button.padding.totem-small.icon` | `0 8px 0 4px` | | `vars.components.button.padding.totem-small.textAndIcon` | `0 8px 0 4px` | | `vars.components.button.borderRadius.large` | `12px` | | `vars.components.button.borderRadius.medium` | `8px` | | `vars.components.button.borderRadius.small` | `4px` | | `vars.components.button.borderRadius.tablet` | `12px` | | `vars.components.button.borderRadius.tablet-medium` | `8px` | | `vars.components.button.borderRadius.tablet-small` | `4px` | | `vars.components.button.borderRadius.totem` | `12px` | | `vars.components.button.borderRadius.totem-medium` | `8px` | | `vars.components.button.borderRadius.totem-small` | `8px` | | `vars.components.button.iconSize.large` | `24px` | | `vars.components.button.iconSize.medium` | `20px` | | `vars.components.button.iconSize.small` | `16px` | | `vars.components.button.iconSize.tablet` | `24px` | | `vars.components.button.iconSize.tablet-medium` | `20px` | | `vars.components.button.iconSize.tablet-small` | `16px` | | `vars.components.button.iconSize.totem` | `36px` | | `vars.components.button.iconSize.totem-medium` | `32px` | | `vars.components.button.iconSize.totem-small` | `28px` | ## Recipes ### Form — Input + Select + RadioGroup + Button submit ```tsx import { Button, Input, RadioGroup, Select } from "takeat-design-system-ui-kit"; import { useState } from "react"; export function OrderForm() { const [name, setName] = useState(""); const [category, setCategory] = useState(""); const [payment, setPayment] = useState("credit"); const [error, setError] = useState(""); function handleSubmit(e: React.FormEvent) { e.preventDefault(); if (!name) { setError("Name is required"); return; } setError(""); // submit logic } return ( setName(e.target.value)} error={error} size="large" /> Save ); } ``` ### Modal flow — open via context, body scroll locked, action buttons ```tsx import Modal from "takeat-design-system-ui-kit/modal"; import { Button } from "takeat-design-system-ui-kit"; import { useState } from "react"; export function DeleteConfirm({ onConfirm }: { onConfirm: () => void }) { const [open, setOpen] = useState(false); return ( <> setOpen(true)}>Delete item setOpen(false)} title="Confirm deletion"> This action cannot be undone. Are you sure? setOpen(false)}>Cancel { onConfirm(); setOpen(false); }}> Delete > ); } ``` ### Drawer + nested Menu ```tsx import { Button, Drawer, Menu } from "takeat-design-system-ui-kit"; import { IconMenu } from "takeat-design-system-ui-kit/icons"; import { useState } from "react"; const navItems = [ { label: "Dashboard", path: "/dashboard" }, { label: "Orders", path: "/orders" }, { label: "Products", path: "/products" }, ]; export function AppShell() { const [open, setOpen] = useState(false); return ( <> setOpen(true)} aria-label="Open menu"> setOpen(false)} side="left"> {navItems.map((item) => ( setOpen(false)}> {item.label} ))} > ); } ``` ### Dashboard layout — Grid + CollapsableMenu + Toolbar ```tsx import { CollapsableMenu, ColumnsGrid, Grid, GridArea, Toolbar, } from "takeat-design-system-ui-kit"; export function DashboardShell({ children }: { children: React.ReactNode }) { return ( Filter Export {children} ); } ``` ## Composition Most components accept standard HTML props and forward refs. Compound components use dot-notation: ```tsx // Drawer sub-components ... ... // Modal sub-components ... ... // Toolbar sub-components Action ``` ## Migration notes - v1.1+: `Button` accepts `icon` + `aria-label` for icon-only buttons (no `children` required). - v1.1+: `Drawer` side prop locks direction during close animation — reset on close is safe. - `FieldInfo` is deprecated — use `Field.Error` / `Field.Description` from `@base-ui/react/field`. ## Don'ts - **Don't import icons from the root barrel** — use `takeat-design-system-ui-kit/icons/IconName` or the icons namespace export. - **Don't use `onChange` on Switch or Select** — use `onCheckedChange` (Switch) or `onValueChange` (Select, RadioGroup). - **Don't wrap Modal trigger with `cloneElement`** — use the `open`/`toggle` props directly. - **Don't pass hex literals as color props** — use `vars.colors.*` from the theme (e.g. `vars.colors.primary.default`). - **Don't use `style={{ color: "#c8131b" }}`** — prefer theme tokens so dark mode / beta theme work. - **Don't forget `UiKitTheme` wrapper** — components render without styles if the theme class is absent. - **Don't set `size` on `Spinner` as a string** — it takes a `number` (pixels).
This action cannot be undone. Are you sure?