History
Every release of @comitor/ui , what changed in it, and what you have to change to move up. This is the canonical record — the package’s README points here rather than repeating it. The rest of this site documents the newest release.
Versioning changed at 1.0.0. From 1.0.0 on this is ordinary SemVer: breaking changes ship in a major bump, so an app pinning ^1.0.0 can update without reading this page first. The 0.x rule — breaking changes in a minor bump — explains only the entries below it.
Releases 3.17.315 Nov 2026 An Avatar whose image is taken away shows its initials again. No new props, no change in look. Fixed
Switching from a workspace WITH a logo to one WITHOUT left the WorkspaceSwitcher avatar EMPTY — no image, no initials, until a reload. Radix Avatar keeps its loading status on the Root, and an AvatarImage that unmounts does not reset it, so {url ? <AvatarImage src={url} /> : null} on a reused avatar stayed "loaded" and AvatarFallback never rendered. Fixed in Avatar itself: the Root is rebuilt when a DIRECT-child AvatarImage appears or disappears — so UserAvatar (/shell, switching user) and every app avatar written that way are fixed too. Image A → image B does not rebuild (Radix goes back to "loading" on its own).Nothing to do — upgrading is enough. Put a key on <Avatar> that follows whether there is an image only when AvatarImage is wrapped in a component of your own instead of sitting directly in <Avatar>, or when <Avatar> + AvatarImage are written directly in a Server Component (RSC turns the type into a lazy reference, so the package cannot see it).
3.17.214 Nov 2026 Every entry of exports gains a default condition, so an app built with webpack can load a sub-entry through next/dynamic. No code change, no change in look, no new props. Fixed
next dev --webpack returned a 500 on a page loading @comitor/ui/editor through next/dynamic : the exports map declared only types + import, and in webpack mode SWC adds a require.resolveWeak("…") next to dynamic(() => import("…")) — resolved under the require condition, which matched no branch. Turbopack (Next 16's default, for next dev and next build) does not take that path. All nine entries were affected; only /editor showed it, being the one apps load through next/dynamic. Each entry now ends with a "default" pointing at the same ESM file as import — the package is still ESM-only, no CJS is shipped.Nothing to do.
3.17.112 Nov 2026 The shape of the module rail and of the folded sidebar, following mockup option B — an 84px rail with 72px tiles and the open module in the app's colour, a 53px folded sidebar with square tiles — and the CSS warning every app printed on 3.17.0 is gone. No new props, no change in behaviour.
3.17.012 Nov 2026 The rail layout can keep a brand strip like an ordinary sidebar, brand.trailing for a version beside the app name, a sidebar that folds without moving anything, and module chips on mobile that pick a menu instead of navigating. No new peers, no change to existing prop shapes or default behaviour.
3.16.012 Nov 2026 Modules: an app frame for ONE app split into business areas (Production, HR, Commerce…), in four layouts — grouped, rail, switcher, tabs. No new peers; an app that passes no modules renders exactly as on 3.15.0.
3.15.09 Nov 2026 Theme palettes (a fifth display axis), an app frame for products without workspaces, and three components ported from Dice UI. No new peers, no change to the existing API, and the default gold palette does not move a pixel.
3.14.05 Nov 2026 Left, center and right alignment for paragraphs and headings in MarkdownEditor and RichTextEditor. No new peers, no change to the existing API.
3.13.65 Nov 2026 Corrections to the 3.13.3 and 3.13.4 entries, nothing else. No code, API, type or peer changes — the source is the same as 3.13.5.
3.13.55 Nov 2026 Four fields that grow with their content are 36px again on a phone, like every field beside them, and KeyValue maxRows cuts at exactly that many lines. No API changes.
3.13.41 Nov 2026 Every field sets its text the way Textarea always has — text-base md:text-sm, 16px below md and 14px from md up — so a phone no longer shows a 16px Textarea beside a 14px Input. No API changes.
3.13.31 Nov 2026 Safari on iOS no longer zooms the page when a field takes focus. No API changes — and no npm release: this content ships in 3.13.4.
3.13.21 Nov 2026 DateRangePicker puts className on its outer frame, as DatePicker does. No type changes.
3.13.11 Nov 2026 Progress default goes back to --primary-ink, as in 3.12.1, and the package writes down why: a filled part is never darkened just to pass a contrast measurement. No API changes.
3.13.01 Nov 2026 A review pass over this site: new options on CircularProgress, ImageUploadField and FileUpload, and a round of colour, spacing and layout-shift fixes across Timeline, Gantt, StatusPill, Table/DataTable, Tabs, FormSection, InlineEdit and Button. No API breaks — every new prop and label key is optional — but a few defaults look different.
3.12.131 Oct 2026 Four gaps found while this site documented 3.12.0: ChatThread let screen-reader text escape its scroll area, TreeView took a drop into the middle of a leaf, LEGACY_AVATAR_TONE_ALIASES was never exported, and two sentences in the chat notes were wrong. Nothing breaks.
3.12.030 Oct 2026 Three pieces Comitor Tasks needs for its next waves: Gantt, TreeView and a new entry, @comitor/ui/chat. Nothing breaks — new names, one new entry and one optional editor prop.
3.11.130 Oct 2026 Accessible names in DataGrid — the accessibility invariants of Comitor Tasks caught 8 violations × 2 languages on its task list. Nothing breaks.
3.11.026 Oct 2026 The three identity hues 3.10.0 added — blue, purple, pink — get a -foreground step, so they work as an app frame accent; AppLauncher widens to balance. Nothing breaks.
3.10.026 Oct 2026 The avatar and app-icon tone palette gets three real hues in place of three greys; app tiles in AppLauncher become square and centred, and a locked tile keeps its app's colour. Nothing breaks: the old tone names are still accepted as aliases, and tone is still a string.
3.9.015 Oct 2026 UserMenu gathers every way out into ONE group. No type changes; only where a variant: "destructive" item goes.
3.8.015 Oct 2026 UserMenu gets a shared way into Comitor.Account. Nothing breaks: an app that passes no new prop gets the menu it had.
3.7.110 Oct 2026 Fixes a crash 3.7.0 introduced: <Badge asChild> threw and took the whole page down with it. No new API.
3.7.010 Oct 2026 Eight things Comitor Tasks was patching on its own move into the package: a skip link in AppShell, list roles that ItemGroup adds itself, removable Badge chips, wrapping InlineEdit titles, avatars in Combobox, mentions of things other than people, key-sequence shortcuts with their ? dialog, and a script that seeds account display defaults before first paint. No type breaks; two default behaviours change.
3.6.29 Oct 2026 Security patch for the package's own development dependencies — pnpm audit goes from 9 advisories (1 critical, 3 high) to 0. The published dist/ is identical to 3.6.1: no code, API or peer range changes.
3.6.19 Oct 2026 Two DataGrid fixes found by driving the Comitor Tasks list from the keyboard: ticking a row keeps the focused cell, and a select cell can offer a different list per row. Both additions are optional; nothing breaks.
3.6.02 Oct 2026 RichTextEditor — a second editor in @comitor/ui/editor that stores HTML, for published content — and toolbar="fixed", a toolbar pinned to the top of the frame, for both editors. Four fixes to MarkdownEditor, two of which damaged content. Nothing breaks.
3.5.02 Oct 2026 A new entry, @comitor/ui/editor, with MarkdownEditor — a Linear-style rich-text editor that stores Markdown (GFM), built on Tiptap 3. The main entry does not change and pulls in no new peer; nothing breaks.
3.4.030 Sept 2026 RelativeTime takes a timeZone for its tooltip, and DataGrid keeps the highlight of ticked rows on those rows when the data changes. One new dependency, @date-fns/tz; nothing breaks.
3.3.430 Sept 2026 Ctrl+Backspace on a sorted or filtered DataGrid with ticked rows handed onRowsDelete the wrong rows. It now hands over the ticked ones. No new API.
3.3.330 Sept 2026 DataGrid can be told that the user cancelled a delete, Progress reads max, @comitor/ui/tokens matches the stylesheet again, and the Vietnamese labels settle on one spelling. No breaking type change.
3.3.229 Sept 2026 Two visual fixes in DataGrid: pinned columns are fully opaque, and the “Row height” button matches the three buttons beside it. No new API.
3.3.129 Sept 2026 The focus-return rule of 3.3.0 missed the case real apps use most — a dialog with an autoFocus field — and ConfirmDialog missed dialogs opened from a menu item. Both now return focus. No new API.
3.3.029 Sept 2026 Four things comitor-account ran into moving from 1.10.0 to 3.2.0 with an ActionBar on its Members screen — plus anchor="container", which centres the bar on its table rather than the window. Toast region and close button follow the language, and Dialog/Sheet hand focus back when they close.
3.2.028 Sept 2026 Grids and lists can draw with the same components as the detail view — renderValue on DataGrid's select cells, a static AvatarGroup — and a new orange severe tone for the rung between warning and destructive. Everything new is optional; without it nothing looks different.
3.1.028 Sept 2026 Closes almost every “known, not done” item the package owned, plus the DataGrid bugs this site's Patterns turned up when their long lists moved from DataTable to the grid. MINOR for two additions — meta.readOnly on a grid column, a { locale } argument to applyPercentageMask — and because TimePicker now actually enforces min / max. Nothing breaks.
3.0.128 Sept 2026 A patch for what writing this site's 3.0.0 pages turned up: MaskInput misread amounts and dropped pasted values, SonnerToaster and KeyValue swallowed text, Tour fired its callbacks on the wrong step — plus a round of accessibility fixes. No API changed.
3.0.027 Sept 2026 Breaking English is now the default for every component , and Vietnamese becomes a built-in table you choose once with ComitorLocaleProvider — the shape DataGrid took in 2.0.0, applied to the whole package. The package now serves international apps, not only Comitor's own.
2.1.027 Sept 2026 18 components ported from Dice UI — Kanban, Stepper, Timeline, TimePicker, TagsInput, Mention, ActionBar, PhoneInput, MaskInput, Rating, CircularProgress, Banner, ResponsiveDialog, Tour, KeyValue, Cropper, ScrollSpy, BadgeOverflow — all in the main entry, and Drawer finally moves focus inside when it opens.
2.0.021 Sept 2026 Breaking DataGrid takes a locale prop — English and Vietnamese, plus a door for a table of your own — and the default moves to English . That default is the one breaking change.
1.11.021 Sept 2026 DataGrid — a spreadsheet for bulk entry, at a new @comitor/ui/data-grid entry: edit in the cell, virtualised rows, range selection, clipboard against Excel, multi-criteria filter and sort, undo and redo.
1.10.07 Sept 2026 AppLauncher paints its tile icons with IconAvatar now — each app's colour is derived from its key instead of hand-assigned — and the three AppDescriptor colour props are deprecated.
1.9.07 Sept 2026 IconAvatar — an app or workspace icon in a coloured identity tile, sibling to LetterAvatar, its colour derived from the identity and overridable with any of the eight tones — plus the last inherited-alpha icon, at the sidebar collapse button.
1.8.37 Sept 2026 The remaining case from 1.8.2: a collapsed sidebar icon still showed the seam, because it inherited the alpha from its parent rather than declaring it itself.
1.8.27 Sept 2026 Sidebar navigation icons showed a darker seam where their strokes cross — an alpha-in-color bug the contrast gate had passed, because summing ratios cannot see a compositing fault.
1.8.16 Sept 2026 A single class missing from AvatarGroup left a white crescent under every avatar — invisible at rest, exposed on hover.
1.8.05 Sept 2026 Four optional additions, all defaulting to undefined, closing one gap: an app running the display-axis controls had no way to learn the user had just changed one, so it could not record an account-level default anywhere else.
1.7.12 Sept 2026 Two appearance regressions from 1.7.0, both from the same kind of mistake: changing one property after reasoning about only one of its two effects.
1.7.02 Sept 2026 Tailwind v4 dropped cursor: pointer from its preflight, so every <button> in every app on this package had fallen back to cursor: default — the package now declares the rule itself, at the base layer.
1.6.02 Sept 2026 The lint:a11y gate measured the high-contrast palette twice and labelled one of the two passes as the default, so the palette every app actually runs had never been measured at all.
1.5.02 Sept 2026 Three fixes in @comitor/ui/chart: a legend whose labels were painted with a background token, stacked bars rounded at every joint, and a field missing from a type in a way that pushed an app back out of the package.
1.4.02 Sept 2026 FormSection's accent now tints the icon tile as well as the 4px rule on the left, so a section header carries one signal instead of two that contradict each other.
1.3.431 Aug 2026 Picking a file of the wrong type stops printing a red error in the console — a fix worth its own release because a warning channel that cries every time is a channel people stop reading.
1.3.331 Aug 2026 The focus ring on an Input inside a DialogBody is no longer clipped on both sides — a regression introduced by 1.3.2's own fix.
1.3.231 Aug 2026 A long form in a dialog no longer has its head and its foot cut off with no way to scroll to either.
1.3.131 Aug 2026 FormField stops breaking every dialog it is placed in — and changes nothing at all on the path it was designed for.
1.3.031 Aug 2026 ImageUploadField — the compact row an avatar or a logo actually needs — plus the headless hook both uploaders now share.
1.2.031 Aug 2026 A new entry point, @comitor/ui/uploader, with two optional peers — an app that never imports it pays nothing.
1.1.031 Aug 2026 Three optional props, all defaulting to undefined: an app that passes nothing emits HTML identical to 1.0.0.
1.0.031 Aug 2026 Breaking The API is frozen — from here a breaking change means a MAJOR bump, not a minor one — and six additive items open up the last hard-coded Vietnamese strings, together with the one prop-shape change that had to land before the freeze.
0.9.129 Aug 2026 A layout fix in AppLauncherPanel: app names in the grid variant overflowed their cell instead of truncating, because the truncate class there never had anything to bite on.
0.9.029 Aug 2026 Breaking Three components had Vietnamese hard-coded where props could not reach it; this release opens them up, and changes one default in a breaking way.
0.8.029 Aug 2026 Progress gets the tone="warning" that 0.7.0 measured and refused, solved with a non-colour signal; the three existing tones are untouched.
0.7.029 Aug 2026 Three gaps that consuming apps were patching in their own code become real API: a fixed reference time for RelativeTime, a warning Alert, and tones for Progress.
0.6.226 Aug 2026 ComitorLockup's size table is rebuilt as a proportional scale, so at sm, md and lg the slogan no longer runs wider than the wordmark and stretches the gold rule past it.
0.6.126 Aug 2026 Five presentation fixes — three of them one tailwind-merge trap that silently dropped leading-* — plus variant="auto" on ComitorLogo.
0.6.026 Aug 2026 Breaking Two new display axes — font size and layout density — plus a tablet sidebar default; --radius changes units and DataTable's density changes how it works.
0.5.126 Aug 2026 DataTable's isRowActive is usable: it marks each cell with an inset shadow instead of tinting the row background.
0.5.026 Aug 2026 Breaking An audit pass over real apps: new tokens for choice borders and table rows, six changes to read before upgrading, and a run of geometry and transparency fixes.
0.4.024 Aug 2026 Adds RouteTabs for tab bars whose items are real routes and a striped prop on DataTable, and restyles StatCard back to its approved design.
0.3.324 Aug 2026 Two layout bugs found by real use of the package: a large blank strip below long pages, and a sidebar that highlighted every nav item sharing a pathname.
0.3.224 Aug 2026 Submenus in DropdownMenu, ContextMenu and Menubar never became visible; SubContent is now wrapped in a Portal in all three.
0.3.124 Aug 2026 Two shell details realigned with the Patterns section of comitor-ds: the active sidebar row drops its left rule, and the header search box moves to the center.
0.3.024 Aug 2026 Breaking The default palette reverts to the approved comitor-ds colors, and the WCAG-corrected palette that shipped through 0.2.2 becomes an opt-in [data-contrast="high"] mode.
0.2.224 Aug 2026 Three bugs no amount of code review could catch — they only appear once the package is rendered in a real browser or loaded by real Node.
0.2.124 Aug 2026 Four fixes, all surfaced by the first real app built on the package, plus searchParams support in the shell's active-nav matching.
0.2.024 Aug 2026 Breaking An API cleanup plus a package-wide contrast pass: renames and removals land before any app consumes the package, and colour gains a three-role token contract so text and controls reach WCAG AA in both themes.
0.1.023 Aug 2026 First release on npm.
Format follows Keep a Changelog ; versions follow SemVer , strictly from 1.0.0 on and under the 0.x rule above before that.