import type { Meta, StoryObj } from '@storybook/html'; import { CommandPalette, type CommandPaletteOptions } from '@42/core/command-palette'; import '@42/styles/command-palette.css'; const snippet = `import { CommandPalette } from '@42/core/command-palette'; import '@42/styles/command-palette.css'; const palette = new CommandPalette(document.querySelector('[data-c42-command-palette]')!, { hotkey: 'k', // Cmd/Ctrl+K }); palette.on('commandpalette:select', (e) => console.log(e.detail.value));`; function build(): HTMLElement { const wrap = document.createElement('div'); wrap.innerHTML = `
No matching commands
`; return wrap; } const meta: Meta = { title: 'Core/Overlays/Command Palette', tags: ['autodocs'], parameters: { docs: { source: { code: snippet, language: 'ts' }, }, }, argTypes: { hotkey: { control: 'text' }, closeOnEscape: { control: 'boolean' }, closeOnOverlayClick: { control: 'boolean' }, }, args: { hotkey: 'k', closeOnEscape: true, closeOnOverlayClick: true, }, render: (args) => { const wrap = build(); const root = wrap.querySelector('[data-c42-command-palette]')!; const palette = new CommandPalette(root, args); wrap.querySelector('[data-open]')!.addEventListener('click', () => palette.openPalette(), ); return wrap; }, }; export default meta; type Story = StoryObj; export const Default: Story = {}; export const OpenByDefault: Story = { args: { defaultOpen: true }, };