Skip to content

Select theming ​

The values listed below are exposed as --rozie-select-* custom properties, each with a built-in fallback, so Select works with zero configuration and re-skins by remapping tokens. The structural rules compile per-leaf and are not consumer-overridable.

css
:root {
  --rozie-select-width: 16rem;
  --rozie-select-accent: #0066cc;
  --rozie-select-color: inherit;
  --rozie-select-placeholder: #757575;
}

Tokens ​

layout / typography ​

TokenDefault
--rozie-select-width16rem
--rozie-select-fontinherit
--rozie-select-gap0.5rem
--rozie-select-control-padding0.5rem 0.75rem

accent: the single color most consumers will set; the focus border and the selected option's check mark follow it

TokenDefault
--rozie-select-accent#0066cc

control box model ​

TokenDefault
--rozie-select-colorinherit
--rozie-select-bg#fff
--rozie-select-border-width1px
--rozie-select-border-colorrgba(0, 0, 0, 0.25)
--rozie-select-radius0.5rem

the placeholder text colour; the default is the browser's own ::placeholder grey, which is what Combobox's input renders

TokenDefault
--rozie-select-placeholder#757575

focus ring: while focus is anywhere inside the control it gets a focus-border-color border (defaults to the accent) and a box-shadow ring, as Combobox's input does

TokenDefault
--rozie-select-focus-ring-width3px
--rozie-select-focus-ring-colorrgba(0, 102, 204, 0.25)

disabled ​

TokenDefault
--rozie-select-disabled-opacity0.55
--rozie-select-disabled-bgrgba(0, 0, 0, 0.04)

trailing arrow and clear button ​

TokenDefault
--rozie-select-arrow-colorcurrentColor
--rozie-select-arrow-opacity0.7
--rozie-select-clear-colorcurrentColor
--rozie-select-clear-size1rem

popup listbox. list-gap is the in-flow gap between the control and the list of an inline select only; a floating popup's distance from the control is the offset prop. z is the stacking order of the floating popup: Select forwards it to the composed popover as --rozie-popover-z, so the popup panel follows it.

TokenDefault
--rozie-select-list-gap0.25rem
--rozie-select-list-padding0.25rem
--rozie-select-list-max-height16rem
--rozie-select-list-bg#fff
--rozie-select-list-border-colorrgba(0, 0, 0, 0.15)
--rozie-select-list-shadow0 10px 24px rgba(0, 0, 0, 0.16)
--rozie-select-z1000

option ​

TokenDefault
--rozie-select-option-padding0.4rem 0.6rem
--rozie-select-option-radius0.375rem
--rozie-select-option-colorinherit
--rozie-select-option-active-bgrgba(0, 102, 204, 0.12)
--rozie-select-active-fginherit
--rozie-select-selected-bgtransparent
--rozie-select-selected-fginherit
--rozie-select-option-selected-weight600
--rozie-select-option-disabled-opacity0.45
--rozie-select-check'✓'

group heading: the label rendered above a block of options when the options are grouped

TokenDefault
--rozie-select-group-heading-colorrgba(0, 0, 0, 0.5)
--rozie-select-group-heading-letter-spacing0.03em
--rozie-select-group-heading-margin-top0
--rozie-select-group-heading-padding0.35rem 0.6rem 0.15rem
--rozie-select-group-heading-size0.75rem
--rozie-select-group-heading-transformuppercase
--rozie-select-group-heading-weight600

empty state: rendered when the (filtered) options list has zero entries ​

TokenDefault
--rozie-select-empty-colorrgba(0, 0, 0, 0.5)
--rozie-select-empty-padding0.5rem 0.6rem

chips: the selected-value chips rendered inside the control when multiple is set. chip-gap is the gap between chips on a row and between rows once they wrap (it also spaces the trigger and the buttons while chips are shown); chip-size sets the chip's font-size, and the single chip-remove-size drives BOTH the width and the height of the round remove button.

TokenDefault
--rozie-select-chip-gap0.4rem
--rozie-select-chip-bgrgba(0, 102, 204, 0.12)
--rozie-select-chip-colorinherit
--rozie-select-chip-radius0.375rem
--rozie-select-chip-padding0.15rem 0.5rem
--rozie-select-chip-size0.85rem
--rozie-select-chip-remove-colorcurrentColor
--rozie-select-chip-remove-size1.1rem

Defaulted where Select reads them ​

Public, but declared nowhere by base.css: the fallback below applies only while no scope sets the token, and it is resolved at the component itself — so it follows a value set on any ancestor (a token it defaults to included).

TokenDefault
--rozie-select-check-colorvar(--rozie-select-accent, #0066cc)
--rozie-select-focus-border-colorvar(--rozie-select-accent, #0066cc)
--rozie-select-popup-radiusvar(--rozie-select-radius, 0.5rem)

Design-system bridges ​

Each package ships token presets that map Select's tokens onto a known design system's published CSS variables — import base.css first, then a bridge:

ts
import '@rozie-ui/select-react/themes/base.css';
import '@rozie-ui/select-react/themes/bootstrap.css';
import '@rozie-ui/select-react/themes/material.css';
import '@rozie-ui/select-react/themes/shadcn.css';

See also ​

Pre-1.0 — APIs may change between minor versions.