import type { ReactNode } from 'react'; import { IconType } from '../Icon'; export type ActionConfigType = 'action' | 'dropdown' | 'group'; export interface BaseActionConfig { id: string; type: ActionConfigType; label: string; icon?: IconType; shortcut?: string; group?: string; } export interface SimpleActionConfig extends BaseActionConfig { type: 'action'; action: string; } export interface DropdownOption { value: string | number; label: string; icon?: IconType; } export interface DropdownActionConfig extends BaseActionConfig { type: 'dropdown'; action: string; options: DropdownOption[]; placeholder?: string; } export interface GroupConfig { id: string; type: 'group'; label: string; actions: ActionConfig[]; } export type ActionConfig = SimpleActionConfig | DropdownActionConfig | GroupConfig; export interface ActionData { id: string; action: string; metadata?: { value?: string | number; [key: string]: unknown; }; } export interface ActionState { isActive: boolean; isDisabled: boolean; } export interface ToolbarProviderProps { config: ActionConfig[]; onAction: (action: ActionData) => void; getActionState?: (actionId: string, metadata?: Record) => ActionState; editor?: unknown; children: ReactNode; } export interface ToolbarProps { variant?: 'highlight' | 'sticky'; className?: string; overrideActions?: string[]; } export interface SlashMenuProps { className?: string; maxHeight?: number | string; showShortcuts?: boolean; searchable?: boolean; onClose?: () => void; overrideActions?: string[]; } export interface ToolbarContextValue { config: ActionConfig[]; onAction: (action: ActionData) => void; getActionState: (actionId: string, metadata?: Record) => ActionState; editor?: unknown; }