Changelog
What changed in Camaleo, newest first. Nothing is published to npm yet; everything below leads up to 1.0.
1.0 — Unreleased
1.0 will be the first version on npm. It is being finished now: the documentation site (this one), a last pass on the library and the release setup. Until then, the packages are at 0.0.0 and the entries below are the history of the repository.
Skin polish
30 Oct 2026 · styles
material: vertical tabs get a side indicator instead of the bottom underline.glass: the lines between future steps of aStepperstay visible in light mode.neubrutalism: text placed directly in anAlertkeeps 4.5:1.progressive: the highlighted danger item of a dark menu reaches 4.5:1 (it was 4.43:1).- The
Drawer× sits on the title line in every skin, also when there is a description. - The
Sliderfill is centred on its track (it was 1 px off ineditorial,y2k,neumorphismandretro). retro: theAppShellgets a window bevel.neumorphism: a softer light shadow.
Menus, steppers, tables and more
30 Oct 2026 · library
- Overlays. Radio items and submenus in
MenuandContextMenu, checkbox items inContextMenu, and Tab closes it.Toggletipno longer announces a dialog. A scrollingDrawerBodytakes focus. A tallPopoveris capped to the viewport. Toasts map theloadinganderrortypes and respectlimit. Ctrl+K no longer opens theCommandPalettefrom another text field. - Display.
sentimentonStatDelta, for metrics where down is good.EmptyStateTitletakesas.ProgressCircleannounces its value text. NewTableCaptionandTableFooter. A card can become one big link.CodeBlockscrolls as a named region and highlights comments per language.Carouselfollows the tabs pattern. - Navigation.
SteppergetsactiveStep, an error status and a styledStepSeparator. NewToolbarInput, and Home/End in toolbars. A tabs list scrolls when the tabs don't fit.AccordionTriggertakes a heading level. NewBreadcrumbEllipsis. - App structure. New
AppShellBody,renderonAppShellContentandSidebarItem, Enter collapses aSplitterpanel,ScrollAreaworks with only amax-height,VisuallyHiddencan show on focus. - Forms.
RadioGroupandSlidervalues are typed.Sliderpasses value text to its thumbs and has a vertical layout.NativeSelectjoinsField.NumberFieldshows a decimal keypad for decimal steps.OtpFielderrors reach every cell.TagsInputno longer drops a repeated tag without tellingonValueChange.CheckboxandRatingput theidon the focusable element.
Missing tokens, stable slots and translated texts
30 Oct 2026 · library
- Four tokens that components used but nobody defined are now in
tokens.css:--cml-border-subtle,--cml-item-hover,--cml-surface-subtleand--cml-motion-duration. data-slotcomes after{...props}in 183 places, sorender={<Button />}keeps the button's slot and look.- New
MessagesProvider,useMessages,Messageand theenandptBRsets. The built-in texts of 23 components come from it; props still win. See Languages & RTL.
A page for every component
28–30 Oct 2026 · docs
Every component got its own page, in English and Portuguese: a playground, 6 to 9 live examples, real compositions, do/don't pairs, props generated from the types, styling hooks and keyboard notes. They went group by group, from actions and forms to layout and app structure.
Writing them found and fixed bugs on the way, among them: 12-hour times breaking hydration, an indeterminate Progress that looked complete, NavigationMenu panels opening empty, CommandPalette arrows following the wrong order, Stack inside Stack inheriting the parent's gap, and focus falling to <body> on the last page of a Pagination.
The documentation site
27–28 Oct 2026 · docs
- Bilingual site with English at the root and Portuguese under
/pt-br. - The "preview in" bar: one skin, mode and brand for every preview, saved between visits.
- Previews with a Code tab that reads the example's own file, props tables generated from the types, and a page checker that runs axe in 4 skins, both modes, three widths and both languages.
Drawerpopup wrapped in its viewport, which removed a Base UI warning.
Advanced forms, dates, data and app structure
27 Oct 2026 · library
- Advanced forms:
PasswordInput,SearchInput,InputGroup,OtpField,TagsInput,DropzonewithFileList,Rating,ChipandErrorSummary. - Dates, on React Aria:
Calendar,RangeCalendar,DatePicker,DateRangePicker,DateFieldandTimeField, joined toField. - Data display:
DataTable(TanStack Table),Stat,DataList,Timeline,EmptyState,ProgressCircle,Meter,Image,CodeBlock,TreeViewandCarousel. - App structure:
Sidebar,AppShell,NavigationMenu,Menubar,ContextMenu,Toolbar,Stepper,CommandPalette,HoverCard,ToggletipandSplitter.
Nine more skins
26–27 Oct 2026 · styles
neubrutalism,retroandglass; thenswiss,progressiveandclay; thenmaterial,cupertinoandy2k. Thirteen skins in all, each in light and dark.- The contrast matrix learned to measure text over gradients and glass on real pixels. It caught the dark glass tab at 4.36:1 with a cyan brand on its first run.
The first 50 components
26 Oct 2026 · library
About 50 components, in four groups: actions and forms, display and feedback (with tones checked at 4.5:1), navigation and overlays, and the layout primitives (Box, Stack, Grid, Container, AspectRatio, ScrollArea, Portal, DirectionProvider). Each one in the four first skins: minimal, neumorphism, retro-pixel and editorial.
The style contract
26 Oct 2026 · library
The idea the whole library rests on, proven with four skins as far apart as possible: fixed DOM with data-slot names, tokens in cascade layers (cml.tokens, cml.components, cml.style, cml.preferences), StyleProvider with nested islands, and Button, Dialog and Tabs as the first components.
Foundation
26 Oct 2026 · tooling
The pnpm and Turborepo monorepo: @camaleo/react, @camaleo/styles, Storybook, this docs app and a Next.js app that checks server rendering.