インポート
import { CommandPalette } from '@k8ordo/ui';使い方
label と keywords を大文字小文字を区別せずに絞り込みます。↓ / ↑ で移り(端で反対側へ回る)、Enter かクリックでパレットを閉じてから onSelect を呼びます。フォーカスは検索欄に置いたままです。同じ group の項目は見出しの下にまとまり、shortcut のキーは Kbd で添えます。
CommandK
const [isOpen, setIsOpen] = useState(false);
<CommandPalette
isOpen={isOpen}
onClose={() => setIsOpen(false)}
items={[
{
id: 'new-file',
label: 'New file',
group: 'File',
shortcut: ['⌘', 'N'],
onSelect: createFile,
},
{
id: 'theme',
label: 'Toggle theme',
group: 'View',
keywords: ['dark', 'light'],
onSelect: toggleTheme,
},
]}
/>キーで開く
開閉は Modal と同じく isOpen / onClose で、⌘K / Ctrl+K のようなキーはアプリが配線します。閉じるとフォーカスは開く前の場所へ戻り、次に開いたときは空の検索から始まります。
useEffect(() => {
const listener = (event: KeyboardEvent) => {
if ((event.metaKey || event.ctrlKey) && event.key === 'k') {
event.preventDefault();
setIsOpen(true);
}
};
document.addEventListener('keydown', listener);
return () => {
document.removeEventListener('keydown', listener);
};
}, []);Props
items- Type:
readonly CommandPaletteItem[] - Default: -
aria-label?- Type:
string - Default: -
defaultOpen?- Type:
boolean - Default: -
isOpen?- Type:
boolean - Default: -
onClose?- Type:
() => void - Default: -
placeholder?- Type:
string - Default: -
ref?- Type:
Ref<HTMLDialogElement> - Default: -
| Prop | Type | Default |
|---|---|---|
items | readonly CommandPaletteItem[] | - |
aria-label? | string | - |
defaultOpen? | boolean | - |
isOpen? | boolean | - |
onClose? | () => void | - |
placeholder? | string | - |
ref? | Ref<HTMLDialogElement> | - |
このコンポーネントが描画する文言(ラベルやプレースホルダーなど)は、propsで指定しないとき文言辞書から解決されます。差し替え方は次を参照してください: i18n