10.4k

Changelog

Breaking changes, migration guides, and notable updates.

July 31, 2026

Scroll Area — overscroll contain

ScrollArea no longer applies overscroll-behavior: contain by default. Use the new optional overscrollContain prop (default false) to opt in.

Nested surfaces that should not chain scroll to the page already pass it: DialogPanel, SheetPanel, DrawerPanel, ComboboxList, AutocompleteList, and SidebarContent.

Migration:

No change required for those composed parts after upgrading. For custom nested scroll areas (command menus, calendar time lists, vendored sidebar.tsx, etc.), opt in explicitly:

Agent migration prompt:

July 26, 2026

React DayPicker 10

coss ui now targets @daypicker/react@10. The legacy react-day-picker package name remains available for compatibility, but DayPicker recommends the scoped package for v10 and newer.

If you import DayPicker APIs directly, update the dependency and imports:

DayPicker v10 removes APIs deprecated in v9, including legacy navigation props, aliases, component slots, and classNames / styles keys. Applications with custom calendar wrappers should follow the DayPicker v10 migration guide.

Agent migration prompt:

June 22, 2026

Base UI 1.6.0

coss ui now targets @base-ui/react@1.6.0.

Breaking change covered in this bump: Base UI renamed the OTP namespace export from OTPFieldPreview to OTPField. coss has been updated accordingly in the OTP field implementation and docs.

If you import Base UI OTP primitives directly in your app, update:

June 11, 2026

Context Menu

@coss/context-menu is a new registry component for right-click and long-press action menus anchored to the pointer. See the Context Menu docs for installation and examples.

Install:

No migration from an existing coss primitive—opt in where you need pointer-triggered menus instead of (or alongside) Menu.

MenuLinkItem and ContextMenuLinkItem are styled wrappers for Base UI LinkItem. They match MenuItem / ContextMenuItem visually and default closeOnClick to true so the menu closes on navigation.

LinkItem renders a native <a> when you pass href. If you were already using render={<Link href="..." />} (or another router link), keep render on the link item — swap the component name only, do not drop render for href alone.

Use href only for plain anchor links with no router Link.

Migration:

Plain anchor (no router Link):

For context menus:

Existing MenuItem render={<Link … />} usage keeps working; migrate when you touch those menus.

Agent migration prompt:

May 29, 2026

Scroll Area

ScrollArea adds an optional fill prop (default false). When fill is enabled, size-full is applied to ScrollArea.Content so inner flex layouts can use the full viewport height (for example, pinning a footer with mt-auto in a sidebar).

Most scroll areas should keep the default. Opt in only when the scroll container must stretch rather than size to its children.

Migration:

No change required for existing ScrollArea usage (lists, dialogs, comboboxes, command menus). For custom sidebars or other flex columns with mt-auto footers inside a scroll area, opt in explicitly:

SidebarContent from @coss/sidebar already passes fill—update your local sidebar.tsx copy if you vendor the component.

Agent migration prompt:

Apr 17, 2026

Form

The Form component (form.tsx) no longer applies default layout classes (flex, flex-col, gap-4, w-full). It is a thin wrapper around Base UI only; pass className wherever you need a vertical field stack, width constraints, or dialog/sheet layout.

Migration:

For a typical stacked-field form, restore the previous default explicitly:

For dialogs, sheets, and drawers, keep DialogHeader (or SheetHeader, DrawerHeader) outside the form. Wrap DialogPanel and DialogFooter (or sheet/drawer equivalents) in <Form className="contents"> or a native <form className="contents">. display: contents keeps header, panel, and footer as the direct flex children of the popup’s column layout so DialogPanel scroll and height constraints work correctly.

Agent migration prompt:

Apr 14, 2026

OTP Field

The input-otp.tsx registry component has been removed in favor of otp-field.tsx (@coss/otp-field), which wraps Base UI OTP Field. See the OTP Field docs and migration guide for API details.

Migration:

Agent migration prompt:

Apr 12, 2026

Table

Table now supports an optional variant prop: "default" (the default) or "card". Omitting it keeps the same appearance as before. Use variant="card" for the card-style grid (separated rows, rounded cells, updated hover/footer treatment)—including tables inside a Frame or CardFrame as shown in the Table docs.

Migration:

No change required for existing tables. Opt in where you want the card-style table:

Agent migration prompt:

Mar 20, 2026

Toggle Group

Toggle was renamed to ToggleGroupItem in toggle-group.tsx to avoid a naming conflict with the standalone Toggle export.

Migration:

Agent migration prompt:

coss.com ui

Built by and for the team of Cal.com, Inc. — the leading commercial open source company (“coss”).