command-palette — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited command-palette (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Searchable command menu with keyboard navigation, sections, hotkey support, and animated items. Typically used inside a Dialog for modal access.
import {
CommandPalette,
CommandPaletteItem,
CommandPaletteSection,
CommandPaletteInput
} from 'reablocks';| Prop | Type | Default | Description |
|---|---|---|---|
search | string | — | Controlled search input value |
placeholder | string | — | Search input placeholder text |
selected | number | — | Controlled selected item index |
autoFocus | boolean | true | Auto-focus the search input |
emptyMessage | string | — | Message when no items match |
inputIcon | ReactNode | SearchIcon | Icon in the search input |
onSearchChange | (value: string) => void | — | Search value change callback |
onSelectedIndexChange | (value: number) => void | — | Selection index change callback |
onHotkey | (hotkey: HotkeyItem) => void | — | Hotkey trigger callback |
theme | CommandPaletteTheme | — | Per-instance theme override |
children | ReactNode | — | Sections and items |
| Prop | Type | Default | Description |
|---|---|---|---|
title | string | — | Section header title |
className | string | — | Additional CSS classes |
children | ReactNode | — | Section items |
| Prop | Type | Default | Description |
|---|---|---|---|
hotkey | string | — | Hotkey shortcut (displayed with Kbd) |
children | ReactNode | — | Item content |
active | boolean | — | Active state |
end | ReactNode | — | End adornment |
onClick | () => void | — | Click handler |
className | string | — | Additional CSS classes |
<CommandPalette>
<CommandPaletteSection title="Actions">
<CommandPaletteItem onClick={() => doSomething()}>
New File
</CommandPaletteItem>
<CommandPaletteItem onClick={() => doSomethingElse()}>
Open Settings
</CommandPaletteItem>
</CommandPaletteSection>
<CommandPaletteSection title="Navigation">
<CommandPaletteItem onClick={() => navigate('/home')}>
Go to Home
</CommandPaletteItem>
</CommandPaletteSection>
</CommandPalette><CommandPaletteSection title="Actions">
<CommandPaletteItem
start={<FileIcon />}
onClick={() => newFile()}
>
New File
</CommandPaletteItem>
<CommandPaletteItem
start={<SettingsIcon />}
onClick={() => openSettings()}
>
Settings
</CommandPaletteItem>
</CommandPaletteSection><CommandPaletteItem hotkey="mod+n" onClick={() => newFile()}>
New File
</CommandPaletteItem>
<CommandPaletteItem hotkey="mod+," onClick={() => openSettings()}>
Settings
</CommandPaletteItem>When onHotkey is provided on the CommandPalette, pressing the hotkey triggers the callback with the matched item.
Common pattern — open with a keyboard shortcut:
const [open, setOpen] = useState(false);
<Dialog open={open} onClose={() => setOpen(false)}>
<CommandPalette
placeholder="Type a command..."
onSearchChange={setSearch}
>
<CommandPaletteSection title="Commands">
<CommandPaletteItem onClick={() => { action(); setOpen(false); }}>
Do Something
</CommandPaletteItem>
</CommandPaletteSection>
</CommandPalette>
</Dialog><CommandPalette emptyMessage="No results found">
{filteredItems.length === 0 ? null : (
<CommandPaletteSection title="Results">
{filteredItems.map(item => (
<CommandPaletteItem key={item.id}>{item.label}</CommandPaletteItem>
))}
</CommandPaletteSection>
)}
</CommandPalette>interface CommandPaletteTheme {
base: string; // Root container
inner: string; // Items container
emptyContainer: string; // Empty state container
input: {
base: string; // Input container
input: string; // Input element
icon: string; // Search icon wrapper
};
item: {
base: string; // Item container
active: string; // Active item highlight
clickable: string; // Clickable item styles
};
section: {
base: string; // Section container
first: string; // First section override
};
}~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.