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 },
};