9.7k

Changelog

Breaking changes, migration guides, and notable updates.

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”).