kosori

Compatibility

Where zen deliberately differs from shadcn/ui, and what it does not serve.

kosori takes Structure from shadcn/ui and Design from coss/ui. Most shadcn/ui names and snippets transfer unchanged. This page lists the deliberate differences, generated from the Registry sources and this Style's catalog, so it cannot drift from what you install.

Deliberate divergences

Field is not an alias

Field is the one semantic incompatibility. shadcn/ui composes a group, content, title, set and separator; kosori wraps Base UI Field and Fieldset primitives instead. The shared names keep their meaning, but the composition differs, so Field is not aliased to the shadcn/ui API.

  • FieldContent
  • FieldGroup
  • FieldLegend
  • FieldSeparator
  • FieldSet
  • FieldTitle
  • FieldControl
  • FieldItem
  • FieldValidity
  • Fieldset
  • FieldsetLegend

InputOTP is an adapter

InputOTP is an adapter, not an alias. The shadcn/ui slot names are preserved, but each slot takes an index and Base UI derives segment order from document position, so slots must be rendered in index order.

  • InputOTP
  • InputOTPGroup
  • InputOTPSeparator
  • InputOTPSlot

Toast is a Base UI surface

The toast surface is an adapter over the Base UI toast manager, not Sonner. Mount Toaster once and call toast.add; useToastManager and createToastManager expose the manager to custom compositions.

  • Toaster
  • createToastManager
  • toast
  • useToastManager

sonner is absent

sonner is not shipped and is not Pending. zen serves toast instead.

  • sonner
  • @kosori/toast

Tabler icons replace Lucide

Icons come from Tabler, not Lucide. A pasted shadcn/ui snippet that imports Lucide icons needs its icon imports changed; component names and props do not change.

  • @tabler/icons-react
  • lucide-react

State Tokens are a kosori addition

kosori adds seven state Tokens to every Base color because coss/ui class strings reference them and shadcn/ui has no equivalent. The values are identical across Base colors, so success, warning and info mean the same thing in every palette.

  • success
  • success-foreground
  • warning
  • warning-foreground
  • info
  • info-foreground
  • destructive-foreground

Export aliases

shadcn/ui names that resolve to another exported name in the same item. These are aliases, not second implementations.

  • AccordionContent ← accordion/AccordionPanel
  • AlertDialogOverlay ← alert-dialog/AlertDialogBackdrop
  • AlertDialogContent ← alert-dialog/AlertDialogPopup
  • ButtonGroup ← button-group/Group
  • ButtonGroupSeparator ← button-group/GroupSeparator
  • ButtonGroupText ← button-group/GroupText
  • buttonGroupVariants ← button-group/groupVariants
  • CardContent ← card/CardPanel
  • CollapsibleContent ← collapsible/CollapsiblePanel
  • ComboboxLabel ← combobox/ComboboxGroupLabel
  • ComboboxContent ← combobox/ComboboxPopup
  • ContextMenuLabel ← context-menu/ContextMenuGroupLabel
  • ContextMenuContent ← context-menu/ContextMenuPopup
  • ContextMenuSubContent ← context-menu/ContextMenuSubPopup
  • DialogOverlay ← dialog/DialogBackdrop
  • DialogContent ← dialog/DialogPopup
  • DrawerOverlay ← drawer/DrawerBackdrop
  • DrawerSwipeHandle ← drawer/DrawerBar
  • DropdownMenu ← dropdown-menu/Menu
  • DropdownMenuCheckboxItem ← dropdown-menu/MenuCheckboxItem
  • DropdownMenuCreateHandle ← dropdown-menu/MenuCreateHandle
  • DropdownMenuGroup ← dropdown-menu/MenuGroup
  • DropdownMenuLabel ← dropdown-menu/MenuGroupLabel
  • DropdownMenuItem ← dropdown-menu/MenuItem
  • DropdownMenuContent ← dropdown-menu/MenuPopup
  • DropdownMenuPortal ← dropdown-menu/MenuPortal
  • DropdownMenuRadioGroup ← dropdown-menu/MenuRadioGroup
  • DropdownMenuRadioItem ← dropdown-menu/MenuRadioItem
  • DropdownMenuSeparator ← dropdown-menu/MenuSeparator
  • DropdownMenuShortcut ← dropdown-menu/MenuShortcut
  • DropdownMenuSub ← dropdown-menu/MenuSub
  • DropdownMenuSubContent ← dropdown-menu/MenuSubPopup
  • DropdownMenuSubTrigger ← dropdown-menu/MenuSubTrigger
  • DropdownMenuTrigger ← dropdown-menu/MenuTrigger
  • HoverCard ← hover-card/PreviewCard
  • HoverCardContent ← hover-card/PreviewCardPopup
  • HoverCardTrigger ← hover-card/PreviewCardTrigger
  • PopoverContent ← popover/PopoverPopup
  • RadioGroupItem ← radio-group/Radio
  • SelectContent ← select/SelectPopup
  • SheetOverlay ← sheet/SheetBackdrop
  • SheetContent ← sheet/SheetPopup
  • TabsContent ← tabs/TabsPanel
  • TabsTrigger ← tabs/TabsTab
  • TooltipContent ← tooltip/TooltipPopup

Synthesized shadcn/ui exports

Exports kosori builds because coss/ui has no name to rename.

  • alert-dialog: AlertDialogAction, AlertDialogCancel, AlertDialogMedia
  • avatar: AvatarBadge
  • calendar: CalendarDayButton
  • input-group: InputGroupButton
  • popover: PopoverHeader
  • select: SelectScrollDownButton, SelectScrollUpButton
  • tabs: tabsListVariants

Authored

Names shadcn/ui publishes that coss/ui does not ship. The Structure is shadcn/ui's and the Design is inherited from the nearest Port, so an Authored component carries no upstream pin.

  • aspect-ratio
  • carousel
  • chart
  • direction
  • item
  • menubar
  • native-select
  • navigation-menu
  • resizable

Pending

Names this Style publishes as part of its scope but does not serve. They have no page and never appear in the Registry catalog. sonner is not Pending; the divergence above explains why it is absent.

  • attachment
  • bubble
  • code-block
  • marker
  • message
  • message-scroller
  • questionnaire
  • trace

Compositions

Documented patterns that are not Registry items and never will be.