F1 component kit/Search and pickers/Combobox, cloth picker and ⌘KDesktop

Combobox, cloth picker and ⌘K

F1 variant12 · combobox

Async search over thousands of rows: debounced server search + per_page, “20 of 186”, loading / empty / error, multi-select, creatable, recent picks, and matching on the en or cn name. The cloth picker re-points to admin.fabrics.index (~3,600 cloths); ⌘K adds server quick search plus pages from /me/menu.

Covers: combobox primitive, combobox designer, cloth-picker designer, command-palette designer. Exports: Combobox, ClothPicker, CommandPalette.

Whole page:Phone is fixed at comfortable (POWERUPS #15).Laravel · navyDTC · midnight green

Anatomy

The component as it sits in the product: English, compact, real data shapes.

Search cloths

States

8 states, left to right, top to bottom. A mock poll never finishes, so each state is drawn on purpose.

closed
Search cloths
results · 20 of 186

Pick a cloth

2281
searching

Pick a cloth

2281
multi-select

Pick a cloth

2281492281552281
recent picks

Pick a cloth

2281
creatable

Pick a cloth

Autumn 2026 capsule
no match

Pick a cloth

2281
search failed

Pick a cloth

2281

Density

The phone shell is always comfortable (POWERUPS #15): 44px tap targets, 16px inputs. Compact exists on desktop only; see the desktop page.

comfortable · phone default
Search cloths

English · 中文

Staff pick en or cn (T001 Q25). Labels arrive localised; CJK falls back to PingFang SC / Noto Sans SC.

en
Search cloths
中文 · lang=zh-Hans
搜索面料

Long string · permission denied

The long-string case (PL-063) and what a role without the permission sees (the server decides; T003).

long string
oxford
permission denied
228149
Read only: changing the cloth needs edit orders.

Contract

The @rj/admin-kit API for this family. Mirrored in CONTRACT.md.

Export
Combobox · @rj/admin-kit
Props
query (async fn: search, page) · value · multiple · creatable · recentKey · renderOption · minChars
States
closed · typing · loading · results · empty · error · selected · multi · creatable · read-only
shadcn / Radix
Popover + Command (cmdk)
Package underneath
cmdk · @tanstack/react-query · use-debounce · @tanstack/react-virtual
Accessibility
combobox / listbox roles, aria-activedescendant; result count announced
API operations
admin.fabrics.index (search, per_page) · admin.orders.lookup · admin.pickers.account-options
Phone variant
full-screen picker sheet
Export
ClothPicker · @rj/admin-kit
Props
supplier facet · status · multiple
States
as Combobox + stock chip
Package underneath
Combobox + cloth row
API operations
admin.fabrics.index
Export
CommandPalette · @rj/admin-kit
Props
menu (from /me/menu) · quickSearch
shadcn / Radix
Dialog + Command
Package underneath
cmdk · react-hotkeys-hook
Accessibility
⌘K / Ctrl K; Esc closes and returns focus
API operations
admin.dashboard.quick-search · admin.me.menu
Phone variant
search icon in the app bar, full screen