COSS UI Particles Index
Particles are copy-paste-ready UI patterns built on coss primitives. Browse them visually at https://coss.com/ui/particles.
How to use this skill
-
Describe the UI you need (e.g. "a form with validation", "a dialog with a form inside", "tabs with icons").
-
Search this index for matching particles by component type and description.
-
Fetch the JSON URL to get the full source code of the particle.
-
Adapt the particle code to your needs.
JSON URL pattern
Each particle has a JSON manifest at:
https://coss.com/ui/r/<particle-name>.json
For example: https://coss.com/ui/r/p-accordion-1.json
Source code
Particle source files live in this repo at apps/ui/registry/default/particles/ .
Updating this index
Run the generator script from the coss repo root:
node apps/ui/scripts/generate-particle-index.cjs
Total: 480 particles across 52 component types
Component types
-
accordion (4)
-
alert (7)
-
alert-dialog (2)
-
autocomplete (15)
-
avatar (14)
-
badge (20)
-
breadcrumb (7)
-
button (40)
-
calendar (24)
-
card (11)
-
checkbox (5)
-
checkbox-group (5)
-
collapsible (1)
-
combobox (18)
-
command (2)
-
date-picker (9)
-
dialog (6)
-
drawer (14)
-
empty (1)
-
field (18)
-
fieldset (1)
-
form (2)
-
frame (4)
-
group (22)
-
input (19)
-
input-group (28)
-
kbd (1)
-
menu (9)
-
meter (4)
-
number-field (11)
-
otp-field (9)
-
pagination (3)
-
popover (3)
-
preview-card (1)
-
progress (3)
-
radio-group (6)
-
scroll-area (5)
-
select (23)
-
separator (1)
-
sheet (3)
-
skeleton (2)
-
slider (23)
-
spinner (1)
-
switch (6)
-
table (8)
-
tabs (13)
-
textarea (15)
-
toast (9)
-
toggle (8)
-
toggle-group (9)
-
toolbar (1)
-
tooltip (4)
accordion
-
Basic accordion | JSON
-
Accordion with one panel open | JSON
-
Accordion allowing multiple panels open | JSON
-
Controlled accordion | JSON
alert
-
Basic alert | JSON
-
Alert with icon | JSON
-
Alert with icon and action buttons | JSON
-
Info alert | JSON
-
Success alert | JSON
-
Warning alert | JSON
-
Error alert | JSON
alert-dialog
-
Alert dialog | JSON
-
Alert dialog with bare footer | JSON
autocomplete
-
Basic autocomplete | JSON
-
Disabled autocomplete | JSON
-
Small autocomplete | JSON
-
Large autocomplete | JSON
-
Autocomplete with label | JSON
-
Autocomplete autofilling the input with the highlighted item | JSON
-
Autocomplete auto highlighting the first option | JSON
-
Autocomplete with clear button | JSON
-
Autocomplete with trigger and clear buttons | JSON
-
Autocomplete with grouped items | JSON
-
Autocomplete with limited number of results | JSON
-
Autocomplete with async items loading | JSON
-
Autocomplete form | JSON
-
Autocomplete form | JSON
-
Pill-shaped autocomplete | JSON
avatar
-
Avatar with image and fallback | JSON
-
Fallback-only avatar | JSON
-
Avatars with different sizes | JSON
-
Avatars with different radii | JSON
-
Overlapping avatar group | JSON
-
Avatar with user icon fallback | JSON
-
Avatar with emerald status dot | JSON
-
Avatar with muted status dot | JSON
-
Rounded avatar with top-right emerald status | JSON
-
Avatar with notification badge | JSON
-
Rounded avatar with notification badge | JSON
-
Avatar with verified badge | JSON
-
Small overlapping avatar group | JSON
-
Large overlapping avatar group | JSON
badge
-
Basic badge | JSON
-
Outline badge | JSON
-
Secondary badge | JSON
-
Destructive badge | JSON
-
Info badge | JSON
-
Success badge | JSON
-
Warning badge | JSON
-
Error badge | JSON
-
Small badge | JSON
-
Large badge | JSON
-
Badge with icon | JSON
-
Badge with link | JSON
-
Badge with count | JSON
-
Full rounded badge (pill) | JSON
-
Badge with number after text | JSON
-
Status badge - Paid | JSON
-
Status badge - Pending | JSON
-
Status badge - Failed | JSON
-
Selectable badge with checkbox | JSON
-
Removable badge | JSON
breadcrumb
-
Breadcrumb with menu example | JSON
-
Breadcrumb with custom separator | JSON
-
Breadcrumb with home icon for home link only | JSON
-
Breadcrumb with folders icon menu | JSON
-
Breadcrumb with icons before text | JSON
-
Breadcrumb with dot separators | JSON
-
Breadcrumb with select dropdown | JSON
button
-
Default button | JSON
-
Outline button | JSON
-
Secondary button | JSON
-
Destructive button | JSON
-
Destructive outline button | JSON
-
Ghost button | JSON
-
Link button | JSON
-
Extra-small button | JSON
-
Small button | JSON
-
Large button | JSON
-
Extra-large button | JSON
-
Disabled button | JSON
-
Icon button | JSON
-
Small icon button | JSON
-
Large icon button | JSON
-
Button with icon | JSON
-
Link rendered as button | JSON
-
Button using the built-in loading prop | JSON
-
Custom loading button with manual Spinner | JSON
-
Expandable show more/less toggle button | JSON
-
Back link button with chevron | JSON
-
Card-style button with heading and description | JSON
-
Directional pad control buttons | JSON
-
Outline like button with count | JSON
-
Social login icon buttons | JSON
-
Star button with count badge | JSON
-
Button group with QR code icon and sign in | JSON
-
Button with avatar | JSON
-
Pill-shaped button with rounded-full styling | JSON
-
Button with animated arrow on hover | JSON
-
Button with keyboard shortcut indicator | JSON
-
Button with notification badge | JSON
-
Paired buttons (Cancel/Save) | JSON
-
Button with animated status dot | JSON
-
Icon-only copy button with feedback | JSON
-
Copy button with feedback | JSON
-
Rotating icon button (FAB-style toggle) | JSON
-
Hamburger menu button with animated icon | JSON
-
Download button with progress and cancel action | JSON
-
Social login buttons (Google, X, GitHub) | JSON
calendar
-
Basic calendar | JSON
-
Calendar with date range selection | JSON
-
Calendar with month/year dropdown navigation | JSON
-
Calendar with custom Select dropdown for month/year | JSON
-
Calendar with Combobox dropdown for month/year | JSON
-
Calendar with disabled dates | JSON
-
Calendar with multiple date selection | JSON
-
Calendar with custom cell size | JSON
-
Calendar with rounded day buttons | JSON
-
Calendar with rounded range selection style | JSON
-
Calendar with right-aligned navigation | JSON
-
Calendar with week numbers | JSON
-
Calendar with year-only combobox dropdown | JSON
-
Calendar without arrow navigation (dropdown only) | JSON
-
Calendar with current month button | JSON
-
Calendar with today button | JSON
-
Calendar with date input | JSON
-
Calendar with time input | JSON
-
Calendar with time slots (appointment picker) | JSON
-
Calendar with date presets | JSON
-
Range calendar with date presets | JSON
-
Two months calendar | JSON
-
Three months calendar | JSON
-
Pricing calendar with custom day buttons | JSON
card
-
A basic card with header and footer | JSON
-
Authentication card with actions | JSON
-
Authentication card with separators | JSON
-
Framed card with footer | JSON
-
Framed card with header | JSON
-
Framed card with header and footer | JSON
-
Framed card with no rounded bottom | JSON
-
Card within a frame and footer | JSON
-
Card within a frame and footer | JSON
-
Card within a frame with header and footer | JSON
-
CardFrame with header action | JSON
checkbox
-
Basic checkbox | JSON
-
Disabled checkbox | JSON
-
Checkbox with description | JSON
-
Card-style checkbox | JSON
-
Checkbox form | JSON
checkbox-group
-
Basic checkbox group | JSON
-
Checkbox group with disabled items | JSON
-
Checkbox group with parent checkbox | JSON
-
Nested checkbox group with parent | JSON
-
Checkbox group form | JSON
collapsible
- Basic collapsible | JSON
combobox
-
Basic combobox | JSON
-
Disabled combobox | JSON
-
Small combobox | JSON
-
Large combobox | JSON
-
Combobox with label | JSON
-
Combobox auto highlighting the first option | JSON
-
Combobox with clear button | JSON
-
Combobox with grouped items | JSON
-
Combobox with multiple selection | JSON
-
Combobox with input inside popup | JSON
-
Combobox form | JSON
-
Combobox multiple form | JSON
-
Combobox with start addon | JSON
-
Combobox multiple with start addon | JSON
-
Pill-shaped combobox | JSON
-
Timezone combobox | JSON
-
Timezone combobox with search input | JSON
-
Combobox with select trigger | JSON
command
-
Command palette with dialog | JSON
-
Command palette with AI assistant | JSON
date-picker
-
Basic date picker | JSON
-
Date range picker | JSON
-
Two months calendar with range date | JSON
-
Date picker with field and dropdown navigation | JSON
-
Date picker with presets | JSON
-
Date picker with input | JSON
-
Date picker that closes on select | JSON
-
Multiple dates picker | JSON
-
Date picker with select-like trigger | JSON
dialog
-
Dialog with form | JSON
-
Dialog with bare footer | JSON
-
Dialog opened from menu | JSON
-
Nested dialogs | JSON
-
Dialog with close confirmation | JSON
-
Dialog with long content | JSON
drawer
-
Simple bottom drawer with close button | JSON
-
Bottom drawer without drag bar | JSON
-
Drawer with close button | JSON
-
Inset variant drawers for all four positions | JSON
-
Straight variant drawers for all four positions | JSON
-
Scrollable content with terms and conditions | JSON
-
Nested bottom drawers with centered content | JSON
-
Nested right drawers with inset variant | JSON
-
Bottom drawer with snap points | JSON
-
Edit profile form with default and bare footer variants | JSON
-
Mobile menu drawer from the left | JSON
-
Responsive edit profile: dialog on desktop, drawer on mobile | JSON
-
Responsive actions menu: menu on desktop, drawer on mobile | JSON
-
Left drawer with swipe area | JSON
empty
- Empty state with icon and actions | JSON
field
-
Field with description | JSON
-
Field with required indicator | JSON
-
Field in disabled state | JSON
-
Field showing validation error | JSON
-
Show field validity state | JSON
-
Input group with field | JSON
-
Field with autocomplete | JSON
-
Field with combobox | JSON
-
Field with multiple selection combobox | JSON
-
Field with textarea | JSON
-
Field with select | JSON
-
Field with checkbox | JSON
-
Field with checkbox group | JSON
-
Field with radio group | JSON
-
Field with toggle switch | JSON
-
Field with slider | JSON
-
Field with number field | JSON
-
Complete form built with field | JSON
fieldset
- Fieldset with multiple fields | JSON
form
-
Input in a form | JSON
-
Form with zod validation | JSON
frame
-
Basic frame | JSON
-
Frame with multiple separated panels | JSON
-
Frame with multiple stacked panels | JSON
-
Frame with collapsible content and delete button | JSON
group
-
Basic group | JSON
-
Group with input | JSON
-
Small group | JSON
-
Large group | JSON
-
Group with disabled button | JSON
-
Group with default button | JSON
-
Group with start text | JSON
-
Group with end text | JSON
-
Vertical group | JSON
-
Nested groups | JSON
-
Group with popup | JSON
-
Group with input group | JSON
-
Group with menu | JSON
-
Group with select | JSON
-
Group with search | JSON
-
Group with add button and input | JSON
-
Group with input and currency text | JSON
-
Group with select and input | JSON
-
Group with input and select | JSON
-
Group with input and text button | JSON
-
Group with two number inputs for range | JSON
-
Group with filter label, combobox multi-select, and remove button | JSON
input
-
Basic input | JSON
-
Small input | JSON
-
Large input | JSON
-
Disabled input | JSON
-
File input | JSON
-
Input with label | JSON
-
Input with button using Group | JSON
-
Input with start text and end tooltip | JSON
-
Password input with toggle visibility | JSON
-
Input group mimicking a URL bar | JSON
-
Input group with keyboard shortcut | JSON
-
Input group with start loading spinner | JSON
-
Input with label and required indicator | JSON
-
Input with optional label | JSON
-
Input with custom border and background | JSON
-
Input group with end loading spinner | JSON
-
Read-only input | JSON
-
Input with characters remaining counter | JSON
-
Pill-shaped input | JSON
input-group
-
Basic input group | JSON
-
Input group with end icon | JSON
-
Input group with start text | JSON
-
Input group with end text | JSON
-
Input group with start and end text | JSON
-
Input group with number field | JSON
-
Input group with end tooltip | JSON
-
Input group with icon button | JSON
-
Input group with button | JSON
-
Input group with badge | JSON
-
Input group with keyboard shortcut | JSON
-
Input group with inner label | JSON
-
Small input group | JSON
-
Large input group | JSON
-
Disabled input group | JSON
-
Input group with loading spinner | JSON
-
Input group with textarea | JSON
-
Input group with badge and menu | JSON
-
Mini editor built with input group and toggle | JSON
-
Input group with search icon | JSON
-
Input group with start tooltip | JSON
-
Input group with clear button | JSON
-
Search input group with loader and voice button | JSON
-
Input group with character counter | JSON
-
Password input with strength indicator | JSON
-
Code snippet input with language selector | JSON
-
Message composer with attachment buttons | JSON
-
Chat input with voice and send buttons | JSON
kbd
- Keyboard shortcuts display | JSON
menu
-
Basic menu | JSON
-
Menu with hover | JSON
-
Menu with checkbox | JSON
-
Menu with checkbox items as switches | JSON
-
Menu with radio group | JSON
-
Menu with link | JSON
-
Menu with group labels | JSON
-
Nested menu | JSON
-
Menu close on click | JSON
meter
-
Basic meter | JSON
-
Simple meter | JSON
-
Meter with formatted value | JSON
-
Meter with range | JSON
number-field
-
Basic number field | JSON
-
Small number field | JSON
-
Large number field | JSON
-
Disabled number field | JSON
-
Number field with label | JSON
-
Number field with scrub | JSON
-
Number field with range | JSON
-
Number field with formatted value | JSON
-
Number field with step | JSON
-
Number field in form | JSON
-
Pill-shaped number field | JSON
otp-field
-
Basic OTP field | JSON
-
Large OTP field | JSON
-
OTP field with separator | JSON
-
OTP field with label | JSON
-
OTP field with custom sanitization | JSON
-
OTP field with auto validation | JSON
-
Alphanumeric OTP field | JSON
-
OTP field with placeholder hints | JSON
-
Masked OTP field | JSON
pagination
-
Pagination example | JSON
-
Pagination with previous and next buttons only | JSON
-
Pagination with select, and previous and next buttons | JSON
popover
-
Popover with a form | JSON
-
Popover with close button | JSON
-
Animated popovers | JSON
preview-card
- Preview card with popup | JSON
progress
-
Basic progress bar | JSON
-
Progress with label and value | JSON
-
Progress with formatted value | JSON
radio-group
-
Basic radio group | JSON
-
Disabled radio group | JSON
-
Radio group with description | JSON
-
Radio group card | JSON
-
Radio group in form | JSON
-
Theme selector with image cards | JSON
scroll-area
-
Basic scroll area | JSON
-
Horizontal scroll area | JSON
-
Scroll area with both directions | JSON
-
Scroll area with fading edges | JSON
-
Horizontal scroll area with scrollbar gutter | JSON
select
-
Basic select | JSON
-
Small select | JSON
-
Large select | JSON
-
Disabled select | JSON
-
Select without item alignment | JSON
-
Select with groups | JSON
-
Multiple select | JSON
-
Select with icon | JSON
-
Select options with icon | JSON
-
Select with object values | JSON
-
Select with disabled items | JSON
-
Timezone select | JSON
-
Status select with colored dot | JSON
-
Pill-shaped select trigger | JSON
-
Select with left text label | JSON
-
Select with country flags | JSON
-
Select with description in options only | JSON
-
Select with avatars | JSON
-
Rich select with avatars and usernames | JSON
-
Auto width select | JSON
-
Select with custom border and background | JSON
-
Select with label | JSON
-
Select in form | JSON
separator
- Separator with horizontal and vertical orientations | JSON
sheet
-
Basic sheet | JSON
-
Sheet inset | JSON
-
Sheet position | JSON
skeleton
-
Basic skeleton | JSON
-
Skeleton only | JSON
slider
-
Basic slider | JSON
-
Slider with label and value | JSON
-
Disabled slider | JSON
-
Slider with reference labels | JSON
-
Slider with ticks | JSON
-
Slider with labels above | JSON
-
Range slider | JSON
-
Slider with 3 thumbs | JSON
-
Range slider with collision behavior none | JSON
-
Range slider with collision behavior swap | JSON
-
Slider with icons | JSON
-
Slider with input | JSON
-
Range slider with inputs | JSON
-
Slider with increment and decrement buttons | JSON
-
Price range slider | JSON
-
Emoji rating slider | JSON
-
Vertical slider | JSON
-
Vertical range slider | JSON
-
Vertical slider with input | JSON
-
Equalizer with vertical sliders | JSON
-
Object position sliders with reset | JSON
-
Price slider with histogram | JSON
-
Slider in form | JSON
spinner
- Basic spinner | JSON
switch
-
Basic switch | JSON
-
Disabled switch | JSON
-
Switch with description | JSON
-
Switch card | JSON
-
Switch in form | JSON
-
Custom size switch | JSON
table
-
Basic table | JSON
-
Frame with card-style table | JSON
-
Table with TanStack Table and checkboxes | JSON
-
Table with TanStack Table, sorting, and pagination | JSON
-
Card-style table variant | JSON
-
CardFrame with card-style table | JSON
-
CardFrame with TanStack Table and checkboxes | JSON
-
CardFrame with TanStack Table, sorting, and pagination | JSON
tabs
-
Basic tabs | JSON
-
Tabs with underline | JSON
-
Vertical tabs | JSON
-
Vertical tabs with underline | JSON
-
Tabs with full rounded triggers | JSON
-
Tabs with icon before name | JSON
-
Tabs with icon before name and underline | JSON
-
Tabs with icon only | JSON
-
Tabs with underline and icon on top | JSON
-
Tabs with count badge | JSON
-
Vertical tabs with underline and icon before name | JSON
-
Tabs with icon only and count badge | JSON
-
Tabs with icon only and grouped tooltips | JSON
textarea
-
Basic textarea | JSON
-
Small textarea | JSON
-
Large textarea | JSON
-
Disabled textarea | JSON
-
Textarea with label | JSON
-
Textarea in form | JSON
-
Textarea with label and required indicator | JSON
-
Textarea with optional label | JSON
-
Textarea with custom border and background | JSON
-
Read-only textarea | JSON
-
Textarea with characters remaining counter | JSON
-
Textarea field with required indicator | JSON
-
Shorter textarea with fixed height | JSON
-
Textarea with button aligned right | JSON
-
Textarea with button aligned left | JSON
toast
-
Basic toast | JSON
-
Toast with status | JSON
-
Loading toast | JSON
-
Toast with action | JSON
-
Promise toast | JSON
-
Toast with varying heights | JSON
-
Anchored toast with tooltip style | JSON
-
Anchored toast | JSON
-
Promise toast with cancel action | JSON
toggle
-
Basic toggle | JSON
-
Toggle with outline | JSON
-
Toggle with icon | JSON
-
Small toggle | JSON
-
Large toggle | JSON
-
Disabled toggle | JSON
-
Toggle icon group | JSON
-
Bookmark toggle with tooltip and success toast | JSON
toggle-group
-
Basic toggle group | JSON
-
Small toggle group | JSON
-
Large toggle group | JSON
-
Toggle group with outline | JSON
-
Vertical toggle group with outline | JSON
-
Disabled toggle group | JSON
-
Toggle group with disabled item | JSON
-
Multiple selection toggle group | JSON
-
Toggle group with tooltips | JSON
toolbar
- Toolbar with toggles, buttons, and select | JSON
tooltip
-
Basic tooltip | JSON
-
Grouped tooltips | JSON
-
Toggle group animated tooltip | JSON
-
Vertical group with animated tooltip | JSON