gridsmith-ui 0.6.2 → 0.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../showcase/src/components/RichTextEditor.tsx"],"names":[],"mappings":"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","file":"editor.js","sourcesContent":["import { useState, useCallback, useRef, useEffect, type Ref } from \"react\";\nimport { useEditor, EditorContent, type Editor } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport Link from \"@tiptap/extension-link\";\nimport Image from \"@tiptap/extension-image\";\nimport { Table } from \"@tiptap/extension-table\";\nimport { TableRow } from \"@tiptap/extension-table-row\";\nimport { TableCell } from \"@tiptap/extension-table-cell\";\nimport { TableHeader } from \"@tiptap/extension-table-header\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport CodeBlockLowlight from \"@tiptap/extension-code-block-lowlight\";\nimport Underline from \"@tiptap/extension-underline\";\nimport { TextStyle, FontSize } from \"@tiptap/extension-text-style\";\nimport Color from \"@tiptap/extension-color\";\nimport Highlight from \"@tiptap/extension-highlight\";\nimport TextAlign from \"@tiptap/extension-text-align\";\nimport TaskList from \"@tiptap/extension-task-list\";\nimport TaskItem from \"@tiptap/extension-task-item\";\nimport Subscript from \"@tiptap/extension-subscript\";\nimport Superscript from \"@tiptap/extension-superscript\";\nimport FontFamily from \"@tiptap/extension-font-family\";\nimport { all, createLowlight } from \"lowlight\";\nimport { cn, ACTIVE_RING, FOCUS_RING } from \"../lib/utils\";\nimport { Icon } from \"../lib/icons\";\nimport { useBreakpoint } from \"../lib/use-breakpoint\";\n\nconst lowlight = createLowlight(all);\n\nexport type ToolbarGroup =\n | \"blockType\"\n | \"fontFamily\"\n | \"textSize\"\n | \"formatting\"\n | \"colors\"\n | \"alignment\"\n | \"lists\"\n | \"blocks\"\n | \"insert\"\n | \"extras\"\n | \"history\";\n\nconst DEFAULT_TOOLBAR: ToolbarGroup[] = [\n \"blockType\", \"fontFamily\", \"textSize\",\n \"formatting\", \"colors\", \"alignment\",\n \"lists\", \"blocks\", \"insert\", \"extras\", \"history\",\n];\n\nconst MINIMAL_TOOLBAR: ToolbarGroup[] = [\n \"formatting\", \"lists\", \"insert\", \"history\",\n];\n\nexport interface RichTextEditorProps {\n content?: string;\n placeholder?: string;\n onChange?: (html: string) => void;\n editable?: boolean;\n toolbar?: ToolbarGroup[] | \"full\" | \"minimal\";\n className?: string;\n ref?: Ref<HTMLDivElement>;\n /** Accessible name for the editable area. Default \"Rich text editor\". */\n label?: string;\n}\n\nexport function RichTextEditor({\n content = \"\",\n placeholder = \"Start writing...\",\n onChange,\n editable = true,\n toolbar = \"full\",\n className,\n ref, label = \"Rich text editor\" }: RichTextEditorProps) {\n const resolvedToolbar = toolbar === \"full\" ? DEFAULT_TOOLBAR : toolbar === \"minimal\" ? MINIMAL_TOOLBAR : toolbar;\n const editor = useEditor({\n extensions: [\n StarterKit.configure({ codeBlock: false }),\n Link.configure({ openOnClick: false, HTMLAttributes: { class: \"rte-link\" } }),\n Image.configure({ inline: false, allowBase64: true }),\n CodeBlockLowlight.configure({ lowlight }),\n Table.configure({ resizable: false }),\n TableRow,\n TableCell,\n TableHeader,\n Placeholder.configure({ placeholder }),\n Underline,\n TextStyle,\n FontSize,\n Color,\n Highlight.configure({ multicolor: true }),\n TextAlign.configure({ types: [\"heading\", \"paragraph\"] }),\n TaskList,\n TaskItem.configure({ nested: true }),\n Subscript,\n Superscript,\n FontFamily,\n ],\n content,\n editable,\n // Setting attributes replaces tiptap's defaults, so restore role=\"textbox\" alongside the name.\n editorProps: { attributes: { role: \"textbox\", \"aria-label\": label, \"aria-multiline\": \"true\" } },\n onUpdate: ({ editor: e }) => onChange?.(e.getHTML()),\n });\n\n if (!editor) return null;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col rounded-[var(--ds-radius-md)] overflow-hidden\",\n \"border-[length:var(--ds-border-width)] border-[var(--ds-border-default)]\",\n \"bg-[var(--ds-bg-surface)]\",\n className,\n )}\n >\n {editable && <Toolbar editor={editor} groups={resolvedToolbar} />}\n\n <EditorContent\n editor={editor}\n className={cn(\n \"rte-content\",\n \"flex-1 overflow-y-auto px-ds-4 py-ds-3\",\n \"text-sm text-[var(--ds-text-primary)]\",\n \"focus-within:outline-none\",\n )}\n />\n </div>\n );\n}\n\n/* ── Toolbar ──────────────────────────────────────────────────────── */\n\nconst TEXT_COLORS = [\n { label: \"Default\", value: \"\" },\n { label: \"Red\", value: \"#ef4444\" },\n { label: \"Orange\", value: \"#f97316\" },\n { label: \"Yellow\", value: \"#eab308\" },\n { label: \"Green\", value: \"#22c55e\" },\n { label: \"Blue\", value: \"#3b82f6\" },\n { label: \"Purple\", value: \"#a855f7\" },\n { label: \"Pink\", value: \"#ec4899\" },\n];\n\nconst HIGHLIGHT_COLORS = [\n { label: \"None\", value: \"\" },\n { label: \"Yellow\", value: \"#fef08a\" },\n { label: \"Green\", value: \"#bbf7d0\" },\n { label: \"Blue\", value: \"#bfdbfe\" },\n { label: \"Pink\", value: \"#fbcfe8\" },\n { label: \"Orange\", value: \"#fed7aa\" },\n { label: \"Purple\", value: \"#e9d5ff\" },\n];\n\nconst FONT_FAMILIES = [\n { label: \"Default\", value: \"\" },\n { label: \"Sans\", value: \"var(--ds-font-sans)\" },\n { label: \"Mono\", value: \"var(--ds-font-mono)\" },\n { label: \"Display\", value: \"var(--ds-font-display)\" },\n { label: \"Serif\", value: \"Georgia, serif\" },\n];\n\nconst TEXT_SIZES = [\n { label: \"Small\", value: \"0.85em\" },\n { label: \"Normal\", value: \"\" },\n { label: \"Large\", value: \"1.2em\" },\n { label: \"Huge\", value: \"1.5em\" },\n];\n\nfunction Toolbar({ editor, groups }: { editor: Editor; groups: ToolbarGroup[] }) {\n const [, forceUpdate] = useState(0);\n const isMobile = useBreakpoint(\"sm\");\n\n useEffect(() => {\n const handler = () => forceUpdate((n) => n + 1);\n editor.on(\"selectionUpdate\", handler);\n editor.on(\"transaction\", handler);\n return () => {\n editor.off(\"selectionUpdate\", handler);\n editor.off(\"transaction\", handler);\n };\n }, [editor]);\n\n const inTable = editor.isActive(\"table\");\n const has = (g: ToolbarGroup) => groups.includes(g);\n\n const groupElements: React.ReactNode[] = [];\n\n if (has(\"blockType\")) groupElements.push(<BlockTypeSelect key=\"blockType\" editor={editor} />);\n if (has(\"fontFamily\")) groupElements.push(<FontFamilySelect key=\"fontFamily\" editor={editor} />);\n if (has(\"textSize\")) groupElements.push(<TextSizeControls key=\"textSize\" editor={editor} />);\n\n if (has(\"formatting\")) {\n groupElements.push(\n <ToolGroup key=\"formatting\">\n <ToolBtn active={editor.isActive(\"bold\")} onClick={() => editor.chain().focus().toggleBold().run()} title=\"Bold (Ctrl+B)\">\n <Icon name=\"bold\" size={16} />\n </ToolBtn>\n <ToolBtn active={editor.isActive(\"italic\")} onClick={() => editor.chain().focus().toggleItalic().run()} title=\"Italic (Ctrl+I)\">\n <Icon name=\"italic\" size={16} />\n </ToolBtn>\n <ToolBtn active={editor.isActive(\"underline\")} onClick={() => editor.chain().focus().toggleUnderline().run()} title=\"Underline (Ctrl+U)\">\n <Icon name=\"underline\" size={16} />\n </ToolBtn>\n <ToolBtn active={editor.isActive(\"strike\")} onClick={() => editor.chain().focus().toggleStrike().run()} title=\"Strikethrough\">\n <Icon name=\"strikethrough\" size={16} />\n </ToolBtn>\n </ToolGroup>\n );\n }\n\n if (has(\"colors\")) {\n groupElements.push(\n <ToolGroup key=\"colors\">\n <ColorPicker\n colors={TEXT_COLORS}\n activeColor={editor.getAttributes(\"textStyle\").color ?? \"\"}\n onSelect={(c) => c ? editor.chain().focus().setColor(c).run() : editor.chain().focus().unsetColor().run()}\n title=\"Text color\"\n icon={<Icon name=\"type\" size={16} />}\n />\n <ColorPicker\n colors={HIGHLIGHT_COLORS}\n activeColor={editor.getAttributes(\"highlight\").color ?? \"\"}\n onSelect={(c) => c ? editor.chain().focus().toggleHighlight({ color: c }).run() : editor.chain().focus().unsetHighlight().run()}\n title=\"Highlight\"\n icon={<Icon name=\"highlight\" size={16} />}\n />\n </ToolGroup>\n );\n }\n\n if (has(\"alignment\")) {\n groupElements.push(\n <ToolGroup key=\"alignment\">\n <ToolBtn active={editor.isActive({ textAlign: \"left\" })} onClick={() => editor.chain().focus().setTextAlign(\"left\").run()} title=\"Align left\">\n <Icon name=\"align-left\" size={16} />\n </ToolBtn>\n <ToolBtn active={editor.isActive({ textAlign: \"center\" })} onClick={() => editor.chain().focus().setTextAlign(\"center\").run()} title=\"Align center\">\n <Icon name=\"align-center\" size={16} />\n </ToolBtn>\n <ToolBtn active={editor.isActive({ textAlign: \"right\" })} onClick={() => editor.chain().focus().setTextAlign(\"right\").run()} title=\"Align right\">\n <Icon name=\"align-right\" size={16} />\n </ToolBtn>\n </ToolGroup>\n );\n }\n\n if (has(\"lists\")) {\n groupElements.push(\n <ToolGroup key=\"lists\">\n <ToolBtn active={editor.isActive(\"bulletList\")} onClick={() => editor.chain().focus().toggleBulletList().run()} title=\"Bullet list\">\n <Icon name=\"list\" size={16} />\n </ToolBtn>\n <ToolBtn active={editor.isActive(\"orderedList\")} onClick={() => editor.chain().focus().toggleOrderedList().run()} title=\"Ordered list\">\n <Icon name=\"list-ordered\" size={16} />\n </ToolBtn>\n <ToolBtn active={editor.isActive(\"taskList\")} onClick={() => editor.chain().focus().toggleTaskList().run()} title=\"Task list\">\n <Icon name=\"list-checks\" size={16} />\n </ToolBtn>\n </ToolGroup>\n );\n }\n\n if (has(\"blocks\")) {\n groupElements.push(\n <ToolGroup key=\"blocks\">\n <ToolBtn active={editor.isActive(\"blockquote\")} onClick={() => editor.chain().focus().toggleBlockquote().run()} title=\"Blockquote\">\n <Icon name=\"quote\" size={16} />\n </ToolBtn>\n <ToolBtn active={editor.isActive(\"codeBlock\")} onClick={() => editor.chain().focus().toggleCodeBlock().run()} title=\"Code block\">\n <Icon name=\"code\" size={16} />\n </ToolBtn>\n </ToolGroup>\n );\n }\n\n if (has(\"insert\")) {\n groupElements.push(\n <ToolGroup key=\"insert\">\n <LinkPopover editor={editor} />\n <ImagePopover editor={editor} />\n <ToolBtn onClick={() => editor.chain().focus().insertTable({ rows: 3, cols: 3, withHeaderRow: true }).run()} disabled={inTable} title=\"Insert table\">\n <Icon name=\"table\" size={16} />\n </ToolBtn>\n <ToolBtn onClick={() => editor.chain().focus().setHorizontalRule().run()} title=\"Horizontal rule\">\n <Icon name=\"minus\" size={16} />\n </ToolBtn>\n </ToolGroup>\n );\n }\n\n if (has(\"extras\")) {\n groupElements.push(\n <ToolGroup key=\"extras\">\n <ToolBtn active={editor.isActive(\"code\")} onClick={() => editor.chain().focus().toggleCode().run()} title=\"Inline code\">\n <Icon name=\"code\" size={16} />\n </ToolBtn>\n <ToolBtn active={editor.isActive(\"superscript\")} onClick={() => editor.chain().focus().toggleSuperscript().run()} title=\"Superscript\">\n <Icon name=\"superscript\" size={16} />\n </ToolBtn>\n <ToolBtn active={editor.isActive(\"subscript\")} onClick={() => editor.chain().focus().toggleSubscript().run()} title=\"Subscript\">\n <Icon name=\"subscript\" size={16} />\n </ToolBtn>\n </ToolGroup>\n );\n }\n\n if (has(\"history\")) {\n groupElements.push(\n <ToolGroup key=\"history\">\n <ToolBtn onClick={() => editor.chain().focus().undo().run()} disabled={!editor.can().undo()} title=\"Undo (Ctrl+Z)\">\n <Icon name=\"undo\" size={16} />\n </ToolBtn>\n <ToolBtn onClick={() => editor.chain().focus().redo().run()} disabled={!editor.can().redo()} title=\"Redo (Ctrl+Shift+Z)\">\n <Icon name=\"redo\" size={16} />\n </ToolBtn>\n </ToolGroup>\n );\n }\n\n const withDividers = groupElements.reduce<React.ReactNode[]>((acc, el, i) => {\n if (i > 0) acc.push(<Divider key={`d-${i}`} />);\n acc.push(el);\n return acc;\n }, []);\n\n return (\n <div className=\"border-b-[length:var(--ds-border-width)] border-[var(--ds-border-subtle)] bg-[var(--ds-bg-muted)]\">\n <div\n className={cn(\n \"flex items-center gap-ds-0.5 px-ds-2 py-ds-1\",\n isMobile ? \"overflow-x-auto flex-nowrap scrollbar-none\" : \"flex-wrap\",\n )}\n >\n {withDividers}\n </div>\n\n {inTable && (\n <div className={cn(\n \"flex items-center gap-ds-0.5 px-ds-2 py-ds-1 border-t-[length:var(--ds-border-width)] border-[var(--ds-border-subtle)]\",\n isMobile && \"overflow-x-auto flex-nowrap scrollbar-none\",\n )}>\n <span className=\"text-2xs text-[var(--ds-text-muted)] uppercase tracking-wider mr-ds-1 shrink-0\">Table</span>\n <TableOpBtn onClick={() => editor.chain().focus().addRowAfter().run()} label=\"+ Row\" />\n <TableOpBtn onClick={() => editor.chain().focus().addColumnAfter().run()} label=\"+ Col\" />\n <Divider />\n <TableOpBtn onClick={() => editor.chain().focus().deleteRow().run()} label=\"− Row\" />\n <TableOpBtn onClick={() => editor.chain().focus().deleteColumn().run()} label=\"− Col\" />\n <Divider />\n <TableOpBtn onClick={() => editor.chain().focus().mergeCells().run()} label=\"Merge\" />\n <TableOpBtn onClick={() => editor.chain().focus().splitCell().run()} label=\"Split\" />\n <Divider />\n <ToolBtn onClick={() => editor.chain().focus().deleteTable().run()} title=\"Delete table\"><Icon name=\"trash\" size={14} /></ToolBtn>\n </div>\n )}\n </div>\n );\n}\n\n/* ── Block type select (paragraph / headings) ─────────────────────── */\n\nfunction BlockTypeSelect({ editor }: { editor: Editor }) {\n const value = editor.isActive(\"heading\", { level: 1 }) ? \"h1\"\n : editor.isActive(\"heading\", { level: 2 }) ? \"h2\"\n : editor.isActive(\"heading\", { level: 3 }) ? \"h3\"\n : \"p\";\n\n return (\n <select\n value={value}\n onChange={(e) => {\n const v = e.target.value;\n if (v === \"p\") editor.chain().focus().setParagraph().run();\n else if (v === \"h1\") editor.chain().focus().toggleHeading({ level: 1 }).run();\n else if (v === \"h2\") editor.chain().focus().toggleHeading({ level: 2 }).run();\n else if (v === \"h3\") editor.chain().focus().toggleHeading({ level: 3 }).run();\n }}\n title=\"Block type\"\n aria-label=\"Block type\"\n className={cn(\n \"h-7 px-ds-1.5 text-xs rounded-[var(--ds-radius-sm)] cursor-pointer\",\n \"bg-transparent text-[var(--ds-text-secondary)] hover:bg-[var(--ds-bg-surface)]\",\n \"border-none outline-none\",\n \"focus-visible:shadow-[var(--ds-shadow-focus)]\",\n )}\n >\n <option value=\"p\">Paragraph</option>\n <option value=\"h1\">Heading 1</option>\n <option value=\"h2\">Heading 2</option>\n <option value=\"h3\">Heading 3</option>\n </select>\n );\n}\n\n/* ── Text size increase/decrease ──────────────────────────────────── */\n\nfunction TextSizeControls({ editor }: { editor: Editor }) {\n const current = editor.getAttributes(\"textStyle\").fontSize ?? \"\";\n const idx = TEXT_SIZES.findIndex((s) => s.value === current);\n const currentIdx = idx === -1 ? 1 : idx;\n\n const decrease = () => {\n const next = Math.max(0, currentIdx - 1);\n const v = TEXT_SIZES[next].value;\n v ? editor.chain().focus().setFontSize(v).run() : editor.chain().focus().unsetFontSize().run();\n };\n\n const increase = () => {\n const next = Math.min(TEXT_SIZES.length - 1, currentIdx + 1);\n const v = TEXT_SIZES[next].value;\n v ? editor.chain().focus().setFontSize(v).run() : editor.chain().focus().unsetFontSize().run();\n };\n\n return (\n <ToolGroup>\n <ToolBtn onClick={decrease} disabled={currentIdx <= 0} title={`Decrease text size (${TEXT_SIZES[Math.max(0, currentIdx - 1)]?.label})`}>\n <span className=\"text-2xs font-bold leading-none select-none\">A</span>\n </ToolBtn>\n <ToolBtn onClick={increase} disabled={currentIdx >= TEXT_SIZES.length - 1} title={`Increase text size (${TEXT_SIZES[Math.min(TEXT_SIZES.length - 1, currentIdx + 1)]?.label})`}>\n <span className=\"text-base font-bold leading-none select-none\">A</span>\n </ToolBtn>\n </ToolGroup>\n );\n}\n\n/* ── Color picker popover ─────────────────────────────────────────── */\n\nfunction ColorPicker({\n colors,\n activeColor,\n onSelect,\n title,\n icon,\n}: {\n colors: { label: string; value: string }[];\n activeColor: string;\n onSelect: (color: string) => void;\n title: string;\n icon: React.ReactNode;\n}) {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n const close = useCallback(() => setOpen(false), []);\n\n useEffect(() => {\n if (!open) return;\n const onClick = (e: MouseEvent) => { if (!ref.current?.contains(e.target as Node)) close(); };\n const onKey = (e: KeyboardEvent) => { if (e.key === \"Escape\") close(); };\n document.addEventListener(\"mousedown\", onClick);\n document.addEventListener(\"keydown\", onKey);\n return () => { document.removeEventListener(\"mousedown\", onClick); document.removeEventListener(\"keydown\", onKey); };\n }, [open, close]);\n\n return (\n <div ref={ref} className=\"relative\">\n <button\n type=\"button\"\n onClick={() => setOpen(!open)}\n title={title}\n className={cn(\n \"flex flex-col items-center justify-center w-7 h-7 rounded-[var(--ds-radius-sm)] transition-colors cursor-pointer\",\n \"focus-visible:outline-none focus-visible:shadow-[var(--ds-shadow-focus)]\",\n open\n ? \"bg-[var(--ds-accent-primary)] text-[var(--ds-text-on-primary)]\"\n : \"text-[var(--ds-text-secondary)] hover:bg-[var(--ds-bg-surface)] hover:text-[var(--ds-text-primary)]\",\n )}\n >\n {icon}\n {activeColor && (\n <span className=\"w-3.5 h-0.5 rounded-[var(--ds-radius-full)] -mt-ds-0.5\" style={{ backgroundColor: activeColor }} />\n )}\n </button>\n\n {open && (\n <div className=\"absolute top-full left-0 mt-ds-1 z-[var(--ds-z-popover)] p-ds-1.5 rounded-[var(--ds-radius-md)] border-[length:var(--ds-border-width)] border-[var(--ds-border-default)] bg-[var(--ds-bg-surface-elevated)] shadow-[var(--ds-shadow-dropdown)] flex gap-ds-1 flex-wrap w-[140px]\">\n {colors.map((c) => (\n <button\n key={c.label}\n type=\"button\"\n title={c.label}\n onClick={() => { onSelect(c.value); close(); }}\n className={cn(\n \"w-6 h-6 rounded-[var(--ds-radius-sm)] border-[2px] transition-all cursor-pointer\",\n \"focus-visible:outline-none focus-visible:shadow-[var(--ds-shadow-focus)]\",\n activeColor === c.value ? `${ACTIVE_RING} scale-110` : \"border-transparent hover:scale-110\",\n )}\n style={{ backgroundColor: c.value || \"var(--ds-text-primary)\" }}\n >\n {!c.value && <span className=\"block w-full h-full rounded-[calc(var(--ds-radius-sm)-2px)] bg-[var(--ds-bg-surface)] relative after:absolute after:inset-0 after:rounded-[inherit] after:bg-gradient-to-br after:from-transparent after:to-[var(--ds-text-muted)] after:opacity-30\" />}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n}\n\n/* ── Link popover ─────────────────────────────────────────────────── */\n\nfunction LinkPopover({ editor }: { editor: Editor }) {\n const [open, setOpen] = useState(false);\n const [url, setUrl] = useState(\"\");\n const ref = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const close = useCallback(() => { setOpen(false); setUrl(\"\"); }, []);\n\n const toggle = useCallback(() => {\n if (editor.isActive(\"link\")) {\n editor.chain().focus().unsetLink().run();\n return;\n }\n const existing = editor.getAttributes(\"link\").href ?? \"\";\n setUrl(existing);\n setOpen((o) => !o);\n }, [editor]);\n\n useEffect(() => {\n if (!open) return;\n const onClick = (e: MouseEvent) => { if (!ref.current?.contains(e.target as Node)) close(); };\n const onKey = (e: KeyboardEvent) => { if (e.key === \"Escape\") close(); };\n document.addEventListener(\"mousedown\", onClick);\n document.addEventListener(\"keydown\", onKey);\n requestAnimationFrame(() => inputRef.current?.focus());\n return () => { document.removeEventListener(\"mousedown\", onClick); document.removeEventListener(\"keydown\", onKey); };\n }, [open, close]);\n\n const apply = () => {\n if (url) editor.chain().focus().setLink({ href: url }).run();\n close();\n };\n\n return (\n <div ref={ref} className=\"relative\">\n <ToolBtn active={editor.isActive(\"link\")} onClick={toggle} title=\"Link\">\n <Icon name=\"link\" size={16} />\n </ToolBtn>\n\n {open && (\n <div className=\"absolute top-full left-0 mt-ds-1 z-[var(--ds-z-popover)] p-ds-1.5 rounded-[var(--ds-radius-md)] border-[length:var(--ds-border-width)] border-[var(--ds-border-subtle)] bg-[var(--ds-bg-surface-elevated)] shadow-[var(--ds-shadow-dropdown)] flex items-center gap-ds-1 w-[240px]\">\n <input\n ref={inputRef}\n type=\"url\"\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n onKeyDown={(e) => { if (e.key === \"Enter\") apply(); }}\n placeholder=\"https://...\"\n className={cn(\n \"flex-1 h-6 px-ds-2 text-xs rounded-[var(--ds-radius-sm)]\",\n \"bg-transparent text-[var(--ds-text-primary)] placeholder:text-[var(--ds-text-muted)]\",\n \"border-[length:var(--ds-border-width)] border-[var(--ds-border-subtle)]\",\n FOCUS_RING,\n )}\n />\n <button\n type=\"button\"\n onClick={apply}\n className={cn(\n \"shrink-0 h-6 px-ds-2 text-xs font-medium rounded-[var(--ds-radius-sm)] cursor-pointer\",\n \"bg-[var(--ds-accent-primary)] text-[var(--ds-text-on-primary)]\",\n \"hover:opacity-90 transition-opacity\",\n \"focus-visible:outline-none focus-visible:shadow-[var(--ds-shadow-focus)]\",\n )}\n >\n Apply\n </button>\n </div>\n )}\n </div>\n );\n}\n\n/* ── Image popover ────────────────────────────────────────────────── */\n\nfunction ImagePopover({ editor }: { editor: Editor }) {\n const [open, setOpen] = useState(false);\n const [url, setUrl] = useState(\"\");\n const [alt, setAlt] = useState(\"\");\n const ref = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const close = useCallback(() => { setOpen(false); setUrl(\"\"); setAlt(\"\"); }, []);\n\n useEffect(() => {\n if (!open) return;\n const onClick = (e: MouseEvent) => { if (!ref.current?.contains(e.target as Node)) close(); };\n const onKey = (e: KeyboardEvent) => { if (e.key === \"Escape\") close(); };\n document.addEventListener(\"mousedown\", onClick);\n document.addEventListener(\"keydown\", onKey);\n requestAnimationFrame(() => inputRef.current?.focus());\n return () => { document.removeEventListener(\"mousedown\", onClick); document.removeEventListener(\"keydown\", onKey); };\n }, [open, close]);\n\n const insert = () => {\n if (url) editor.chain().focus().setImage({ src: url, alt: alt || undefined }).run();\n close();\n };\n\n return (\n <div ref={ref} className=\"relative\">\n <ToolBtn onClick={() => setOpen((o) => !o)} title=\"Image\">\n <Icon name=\"image\" size={16} />\n </ToolBtn>\n\n {open && (\n <div className=\"absolute top-full left-0 mt-ds-1 z-[var(--ds-z-popover)] p-ds-1.5 rounded-[var(--ds-radius-md)] border-[length:var(--ds-border-width)] border-[var(--ds-border-subtle)] bg-[var(--ds-bg-surface-elevated)] shadow-[var(--ds-shadow-dropdown)] flex flex-col gap-ds-1 w-[240px]\">\n <input\n ref={inputRef}\n type=\"url\"\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n placeholder=\"Image URL\"\n className={cn(\n \"h-6 px-ds-2 text-xs rounded-[var(--ds-radius-sm)]\",\n \"bg-transparent text-[var(--ds-text-primary)] placeholder:text-[var(--ds-text-muted)]\",\n \"border-[length:var(--ds-border-width)] border-[var(--ds-border-subtle)]\",\n FOCUS_RING,\n )}\n />\n <div className=\"flex items-center gap-ds-1\">\n <input\n type=\"text\"\n value={alt}\n onChange={(e) => setAlt(e.target.value)}\n onKeyDown={(e) => { if (e.key === \"Enter\") insert(); }}\n placeholder=\"Alt text (optional)\"\n className={cn(\n \"flex-1 h-6 px-ds-2 text-xs rounded-[var(--ds-radius-sm)]\",\n \"bg-transparent text-[var(--ds-text-primary)] placeholder:text-[var(--ds-text-muted)]\",\n \"border-[length:var(--ds-border-width)] border-[var(--ds-border-subtle)]\",\n FOCUS_RING,\n )}\n />\n <button\n type=\"button\"\n onClick={insert}\n className={cn(\n \"shrink-0 h-6 px-ds-2 text-xs font-medium rounded-[var(--ds-radius-sm)] cursor-pointer\",\n \"bg-[var(--ds-accent-primary)] text-[var(--ds-text-on-primary)]\",\n \"hover:opacity-90 transition-opacity\",\n \"focus-visible:outline-none focus-visible:shadow-[var(--ds-shadow-focus)]\",\n )}\n >\n Insert\n </button>\n </div>\n </div>\n )}\n </div>\n );\n}\n\n/* ── Font family select ───────────────────────────────────────────── */\n\nfunction FontFamilySelect({ editor }: { editor: Editor }) {\n const current = editor.getAttributes(\"textStyle\").fontFamily ?? \"\";\n\n return (\n <select\n value={current}\n onChange={(e) => {\n const v = e.target.value;\n v ? editor.chain().focus().setFontFamily(v).run() : editor.chain().focus().unsetFontFamily().run();\n }}\n title=\"Font family\"\n aria-label=\"Font family\"\n className={cn(\n \"h-7 px-ds-1.5 text-xs rounded-[var(--ds-radius-sm)] cursor-pointer\",\n \"bg-transparent text-[var(--ds-text-secondary)] hover:bg-[var(--ds-bg-surface)]\",\n \"border-none outline-none\",\n \"focus-visible:shadow-[var(--ds-shadow-focus)]\",\n )}\n >\n {FONT_FAMILIES.map((f) => (\n <option key={f.label} value={f.value}>{f.label}</option>\n ))}\n </select>\n );\n}\n\n/* ── Shared toolbar helpers ───────────────────────────────────────── */\n\nfunction ToolGroup({ children }: { children: React.ReactNode }) {\n return <div className=\"flex items-center gap-ds-0.5\">{children}</div>;\n}\n\nfunction Divider() {\n return <div className=\"w-px h-5 mx-ds-1 bg-[var(--ds-border-subtle)]\" />;\n}\n\nfunction TableOpBtn({ onClick, label }: { onClick: () => void; label: string }) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n title={label}\n className={cn(\n \"h-6 px-ds-1.5 text-2xs font-medium rounded-[var(--ds-radius-sm)] transition-colors cursor-pointer whitespace-nowrap\",\n \"focus-visible:outline-none focus-visible:shadow-[var(--ds-shadow-focus)]\",\n \"text-[var(--ds-text-secondary)] hover:bg-[var(--ds-bg-surface)] hover:text-[var(--ds-text-primary)]\",\n )}\n >\n {label}\n </button>\n );\n}\n\nfunction ToolBtn({ active, disabled, onClick, title, children }: { active?: boolean; disabled?: boolean; onClick: () => void; title: string; children: React.ReactNode }) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n title={title}\n className={cn(\n \"flex items-center justify-center w-7 h-7 rounded-[var(--ds-radius-sm)] transition-colors cursor-pointer\",\n \"focus-visible:outline-none focus-visible:shadow-[var(--ds-shadow-focus)]\",\n active\n ? \"bg-[var(--ds-accent-primary)] text-[var(--ds-text-on-primary)]\"\n : \"text-[var(--ds-text-secondary)] hover:bg-[var(--ds-bg-surface)] hover:text-[var(--ds-text-primary)]\",\n disabled && \"opacity-disabled pointer-events-none\",\n )}\n >\n {children}\n </button>\n );\n}\n\n"]}
1
+ {"version":3,"sources":["../../../showcase/src/components/RichTextEditor.tsx"],"names":[],"mappings":"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","file":"editor.js","sourcesContent":["import { useState, useCallback, useRef, useEffect, type Ref } from \"react\";\nimport { useEditor, EditorContent, type Editor } from \"@tiptap/react\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport Link from \"@tiptap/extension-link\";\nimport Image from \"@tiptap/extension-image\";\nimport { Table } from \"@tiptap/extension-table\";\nimport { TableRow } from \"@tiptap/extension-table-row\";\nimport { TableCell } from \"@tiptap/extension-table-cell\";\nimport { TableHeader } from \"@tiptap/extension-table-header\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport CodeBlockLowlight from \"@tiptap/extension-code-block-lowlight\";\nimport Underline from \"@tiptap/extension-underline\";\nimport { TextStyle, FontSize } from \"@tiptap/extension-text-style\";\nimport Color from \"@tiptap/extension-color\";\nimport Highlight from \"@tiptap/extension-highlight\";\nimport TextAlign from \"@tiptap/extension-text-align\";\nimport TaskList from \"@tiptap/extension-task-list\";\nimport TaskItem from \"@tiptap/extension-task-item\";\nimport Subscript from \"@tiptap/extension-subscript\";\nimport Superscript from \"@tiptap/extension-superscript\";\nimport FontFamily from \"@tiptap/extension-font-family\";\nimport { all, createLowlight } from \"lowlight\";\nimport { cn, ACTIVE_RING, FOCUS_RING } from \"../lib/utils\";\nimport { Icon } from \"../lib/icons\";\nimport { useBreakpoint } from \"../lib/use-breakpoint\";\n\nconst lowlight = createLowlight(all);\n\nexport type ToolbarGroup =\n | \"blockType\"\n | \"fontFamily\"\n | \"textSize\"\n | \"formatting\"\n | \"colors\"\n | \"alignment\"\n | \"lists\"\n | \"blocks\"\n | \"insert\"\n | \"extras\"\n | \"history\";\n\nconst DEFAULT_TOOLBAR: ToolbarGroup[] = [\n \"blockType\", \"fontFamily\", \"textSize\",\n \"formatting\", \"colors\", \"alignment\",\n \"lists\", \"blocks\", \"insert\", \"extras\", \"history\",\n];\n\nconst MINIMAL_TOOLBAR: ToolbarGroup[] = [\n \"formatting\", \"lists\", \"insert\", \"history\",\n];\n\nexport interface RichTextEditorProps {\n content?: string;\n placeholder?: string;\n onChange?: (html: string) => void;\n editable?: boolean;\n toolbar?: ToolbarGroup[] | \"full\" | \"minimal\";\n className?: string;\n ref?: Ref<HTMLDivElement>;\n /** Accessible name for the editable area. Default \"Rich text editor\". */\n label?: string;\n}\n\nexport function RichTextEditor({\n content = \"\",\n placeholder = \"Start writing...\",\n onChange,\n editable = true,\n toolbar = \"full\",\n className,\n ref, label = \"Rich text editor\" }: RichTextEditorProps) {\n const resolvedToolbar = toolbar === \"full\" ? DEFAULT_TOOLBAR : toolbar === \"minimal\" ? MINIMAL_TOOLBAR : toolbar;\n const editor = useEditor({\n extensions: [\n StarterKit.configure({ codeBlock: false }),\n Link.configure({ openOnClick: false, HTMLAttributes: { class: \"rte-link\" } }),\n Image.configure({ inline: false, allowBase64: true }),\n CodeBlockLowlight.configure({ lowlight }),\n Table.configure({ resizable: false }),\n TableRow,\n TableCell,\n TableHeader,\n Placeholder.configure({ placeholder }),\n Underline,\n TextStyle,\n FontSize,\n Color,\n Highlight.configure({ multicolor: true }),\n TextAlign.configure({ types: [\"heading\", \"paragraph\"] }),\n TaskList,\n TaskItem.configure({ nested: true }),\n Subscript,\n Superscript,\n FontFamily,\n ],\n content,\n editable,\n // Setting attributes replaces tiptap's defaults, so restore role=\"textbox\" alongside the name.\n editorProps: { attributes: { role: \"textbox\", \"aria-label\": label, \"aria-multiline\": \"true\" } },\n onUpdate: ({ editor: e }) => onChange?.(e.getHTML()),\n });\n\n if (!editor) return null;\n\n return (\n <div\n ref={ref}\n className={cn(\n \"flex flex-col rounded-[var(--ds-radius-md)] overflow-hidden\",\n \"border-[length:var(--ds-border-width)] border-[var(--ds-border-default)]\",\n \"bg-[var(--ds-bg-surface)]\",\n className,\n )}\n >\n {editable && <Toolbar editor={editor} groups={resolvedToolbar} />}\n\n <EditorContent\n editor={editor}\n className={cn(\n \"rte-content\",\n \"flex-1 overflow-y-auto px-ds-4 py-ds-3\",\n \"text-sm text-[var(--ds-text-primary)]\",\n \"focus-within:outline-none\",\n )}\n />\n </div>\n );\n}\n\n/* ── Toolbar ──────────────────────────────────────────────────────── */\n\nconst TEXT_COLORS = [\n { label: \"Default\", value: \"\" },\n { label: \"Red\", value: \"#ef4444\" },\n { label: \"Orange\", value: \"#f97316\" },\n { label: \"Yellow\", value: \"#eab308\" },\n { label: \"Green\", value: \"#22c55e\" },\n { label: \"Blue\", value: \"#3b82f6\" },\n { label: \"Purple\", value: \"#a855f7\" },\n { label: \"Pink\", value: \"#ec4899\" },\n];\n\nconst HIGHLIGHT_COLORS = [\n { label: \"None\", value: \"\" },\n { label: \"Yellow\", value: \"#fef08a\" },\n { label: \"Green\", value: \"#bbf7d0\" },\n { label: \"Blue\", value: \"#bfdbfe\" },\n { label: \"Pink\", value: \"#fbcfe8\" },\n { label: \"Orange\", value: \"#fed7aa\" },\n { label: \"Purple\", value: \"#e9d5ff\" },\n];\n\nconst FONT_FAMILIES = [\n { label: \"Default\", value: \"\" },\n { label: \"Sans\", value: \"var(--ds-font-sans)\" },\n { label: \"Mono\", value: \"var(--ds-font-mono)\" },\n { label: \"Display\", value: \"var(--ds-font-display)\" },\n { label: \"Serif\", value: \"Georgia, serif\" },\n];\n\nconst TEXT_SIZES = [\n { label: \"Small\", value: \"0.85em\" },\n { label: \"Normal\", value: \"\" },\n { label: \"Large\", value: \"1.2em\" },\n { label: \"Huge\", value: \"1.5em\" },\n];\n\nfunction Toolbar({ editor, groups }: { editor: Editor; groups: ToolbarGroup[] }) {\n const [, forceUpdate] = useState(0);\n const isMobile = useBreakpoint(\"sm\");\n\n useEffect(() => {\n const handler = () => forceUpdate((n) => n + 1);\n editor.on(\"selectionUpdate\", handler);\n editor.on(\"transaction\", handler);\n return () => {\n editor.off(\"selectionUpdate\", handler);\n editor.off(\"transaction\", handler);\n };\n }, [editor]);\n\n const inTable = editor.isActive(\"table\");\n const has = (g: ToolbarGroup) => groups.includes(g);\n\n const groupElements: React.ReactNode[] = [];\n\n if (has(\"blockType\")) groupElements.push(<BlockTypeSelect key=\"blockType\" editor={editor} />);\n if (has(\"fontFamily\")) groupElements.push(<FontFamilySelect key=\"fontFamily\" editor={editor} />);\n if (has(\"textSize\")) groupElements.push(<TextSizeControls key=\"textSize\" editor={editor} />);\n\n if (has(\"formatting\")) {\n groupElements.push(\n <ToolGroup key=\"formatting\">\n <ToolBtn active={editor.isActive(\"bold\")} onClick={() => editor.chain().focus().toggleBold().run()} title=\"Bold (Ctrl+B)\">\n <Icon name=\"bold\" size={16} />\n </ToolBtn>\n <ToolBtn active={editor.isActive(\"italic\")} onClick={() => editor.chain().focus().toggleItalic().run()} title=\"Italic (Ctrl+I)\">\n <Icon name=\"italic\" size={16} />\n </ToolBtn>\n <ToolBtn active={editor.isActive(\"underline\")} onClick={() => editor.chain().focus().toggleUnderline().run()} title=\"Underline (Ctrl+U)\">\n <Icon name=\"underline\" size={16} />\n </ToolBtn>\n <ToolBtn active={editor.isActive(\"strike\")} onClick={() => editor.chain().focus().toggleStrike().run()} title=\"Strikethrough\">\n <Icon name=\"strikethrough\" size={16} />\n </ToolBtn>\n </ToolGroup>\n );\n }\n\n if (has(\"colors\")) {\n groupElements.push(\n <ToolGroup key=\"colors\">\n <ColorPicker\n colors={TEXT_COLORS}\n activeColor={editor.getAttributes(\"textStyle\").color ?? \"\"}\n onSelect={(c) => c ? editor.chain().focus().setColor(c).run() : editor.chain().focus().unsetColor().run()}\n title=\"Text color\"\n icon={<Icon name=\"type\" size={16} />}\n />\n <ColorPicker\n colors={HIGHLIGHT_COLORS}\n activeColor={editor.getAttributes(\"highlight\").color ?? \"\"}\n onSelect={(c) => c ? editor.chain().focus().toggleHighlight({ color: c }).run() : editor.chain().focus().unsetHighlight().run()}\n title=\"Highlight\"\n icon={<Icon name=\"highlight\" size={16} />}\n />\n </ToolGroup>\n );\n }\n\n if (has(\"alignment\")) {\n groupElements.push(\n <ToolGroup key=\"alignment\">\n <ToolBtn active={editor.isActive({ textAlign: \"left\" })} onClick={() => editor.chain().focus().setTextAlign(\"left\").run()} title=\"Align left\">\n <Icon name=\"align-left\" size={16} />\n </ToolBtn>\n <ToolBtn active={editor.isActive({ textAlign: \"center\" })} onClick={() => editor.chain().focus().setTextAlign(\"center\").run()} title=\"Align center\">\n <Icon name=\"align-center\" size={16} />\n </ToolBtn>\n <ToolBtn active={editor.isActive({ textAlign: \"right\" })} onClick={() => editor.chain().focus().setTextAlign(\"right\").run()} title=\"Align right\">\n <Icon name=\"align-right\" size={16} />\n </ToolBtn>\n </ToolGroup>\n );\n }\n\n if (has(\"lists\")) {\n groupElements.push(\n <ToolGroup key=\"lists\">\n <ToolBtn active={editor.isActive(\"bulletList\")} onClick={() => editor.chain().focus().toggleBulletList().run()} title=\"Bullet list\">\n <Icon name=\"list\" size={16} />\n </ToolBtn>\n <ToolBtn active={editor.isActive(\"orderedList\")} onClick={() => editor.chain().focus().toggleOrderedList().run()} title=\"Ordered list\">\n <Icon name=\"list-ordered\" size={16} />\n </ToolBtn>\n <ToolBtn active={editor.isActive(\"taskList\")} onClick={() => editor.chain().focus().toggleTaskList().run()} title=\"Task list\">\n <Icon name=\"list-checks\" size={16} />\n </ToolBtn>\n </ToolGroup>\n );\n }\n\n if (has(\"blocks\")) {\n groupElements.push(\n <ToolGroup key=\"blocks\">\n <ToolBtn active={editor.isActive(\"blockquote\")} onClick={() => editor.chain().focus().toggleBlockquote().run()} title=\"Blockquote\">\n <Icon name=\"quote\" size={16} />\n </ToolBtn>\n <ToolBtn active={editor.isActive(\"codeBlock\")} onClick={() => editor.chain().focus().toggleCodeBlock().run()} title=\"Code block\">\n <Icon name=\"code\" size={16} />\n </ToolBtn>\n </ToolGroup>\n );\n }\n\n if (has(\"insert\")) {\n groupElements.push(\n <ToolGroup key=\"insert\">\n <LinkPopover editor={editor} />\n <ImagePopover editor={editor} />\n <ToolBtn onClick={() => editor.chain().focus().insertTable({ rows: 3, cols: 3, withHeaderRow: true }).run()} disabled={inTable} title=\"Insert table\">\n <Icon name=\"table\" size={16} />\n </ToolBtn>\n <ToolBtn onClick={() => editor.chain().focus().setHorizontalRule().run()} title=\"Horizontal rule\">\n <Icon name=\"minus\" size={16} />\n </ToolBtn>\n </ToolGroup>\n );\n }\n\n if (has(\"extras\")) {\n groupElements.push(\n <ToolGroup key=\"extras\">\n <ToolBtn active={editor.isActive(\"code\")} onClick={() => editor.chain().focus().toggleCode().run()} title=\"Inline code\">\n <Icon name=\"code\" size={16} />\n </ToolBtn>\n <ToolBtn active={editor.isActive(\"superscript\")} onClick={() => editor.chain().focus().toggleSuperscript().run()} title=\"Superscript\">\n <Icon name=\"superscript\" size={16} />\n </ToolBtn>\n <ToolBtn active={editor.isActive(\"subscript\")} onClick={() => editor.chain().focus().toggleSubscript().run()} title=\"Subscript\">\n <Icon name=\"subscript\" size={16} />\n </ToolBtn>\n </ToolGroup>\n );\n }\n\n if (has(\"history\")) {\n groupElements.push(\n <ToolGroup key=\"history\">\n <ToolBtn onClick={() => editor.chain().focus().undo().run()} disabled={!editor.can().undo()} title=\"Undo (Ctrl+Z)\">\n <Icon name=\"undo\" size={16} />\n </ToolBtn>\n <ToolBtn onClick={() => editor.chain().focus().redo().run()} disabled={!editor.can().redo()} title=\"Redo (Ctrl+Shift+Z)\">\n <Icon name=\"redo\" size={16} />\n </ToolBtn>\n </ToolGroup>\n );\n }\n\n const withDividers = groupElements.reduce<React.ReactNode[]>((acc, el, i) => {\n if (i > 0) acc.push(<Divider key={`d-${i}`} />);\n acc.push(el);\n return acc;\n }, []);\n\n return (\n <div className=\"border-b-[length:var(--ds-border-width)] border-[var(--ds-border-subtle)] bg-[var(--ds-bg-muted)]\">\n <div\n className={cn(\n \"flex items-center gap-ds-0.5 px-ds-2 py-ds-1\",\n isMobile ? \"overflow-x-auto flex-nowrap scrollbar-none\" : \"flex-wrap\",\n )}\n >\n {withDividers}\n </div>\n\n {inTable && (\n <div className={cn(\n \"flex items-center gap-ds-0.5 px-ds-2 py-ds-1 border-t-[length:var(--ds-border-width)] border-[var(--ds-border-subtle)]\",\n isMobile && \"overflow-x-auto flex-nowrap scrollbar-none\",\n )}>\n <span className=\"text-2xs text-[var(--ds-text-muted)] uppercase tracking-wider mr-ds-1 shrink-0\">Table</span>\n <TableOpBtn onClick={() => editor.chain().focus().addRowAfter().run()} label=\"+ Row\" />\n <TableOpBtn onClick={() => editor.chain().focus().addColumnAfter().run()} label=\"+ Col\" />\n <Divider />\n <TableOpBtn onClick={() => editor.chain().focus().deleteRow().run()} label=\"− Row\" />\n <TableOpBtn onClick={() => editor.chain().focus().deleteColumn().run()} label=\"− Col\" />\n <Divider />\n <TableOpBtn onClick={() => editor.chain().focus().mergeCells().run()} label=\"Merge\" />\n <TableOpBtn onClick={() => editor.chain().focus().splitCell().run()} label=\"Split\" />\n <Divider />\n <ToolBtn onClick={() => editor.chain().focus().deleteTable().run()} title=\"Delete table\"><Icon name=\"trash\" size={14} /></ToolBtn>\n </div>\n )}\n </div>\n );\n}\n\n/* ── Block type select (paragraph / headings) ─────────────────────── */\n\nfunction BlockTypeSelect({ editor }: { editor: Editor }) {\n const value = editor.isActive(\"heading\", { level: 1 }) ? \"h1\"\n : editor.isActive(\"heading\", { level: 2 }) ? \"h2\"\n : editor.isActive(\"heading\", { level: 3 }) ? \"h3\"\n : \"p\";\n\n return (\n <select\n value={value}\n onChange={(e) => {\n const v = e.target.value;\n if (v === \"p\") editor.chain().focus().setParagraph().run();\n else if (v === \"h1\") editor.chain().focus().toggleHeading({ level: 1 }).run();\n else if (v === \"h2\") editor.chain().focus().toggleHeading({ level: 2 }).run();\n else if (v === \"h3\") editor.chain().focus().toggleHeading({ level: 3 }).run();\n }}\n title=\"Block type\"\n aria-label=\"Block type\"\n className={cn(\n \"h-7 px-ds-1.5 text-xs rounded-[var(--ds-radius-sm)] cursor-pointer\",\n \"bg-transparent text-[var(--ds-text-secondary)] hover:bg-[var(--ds-bg-surface)]\",\n \"border-none outline-none\",\n \"focus-visible:shadow-[var(--ds-shadow-focus)]\",\n )}\n >\n <option value=\"p\">Paragraph</option>\n <option value=\"h1\">Heading 1</option>\n <option value=\"h2\">Heading 2</option>\n <option value=\"h3\">Heading 3</option>\n </select>\n );\n}\n\n/* ── Text size increase/decrease ──────────────────────────────────── */\n\nfunction TextSizeControls({ editor }: { editor: Editor }) {\n const current = editor.getAttributes(\"textStyle\").fontSize ?? \"\";\n const idx = TEXT_SIZES.findIndex((s) => s.value === current);\n const currentIdx = idx === -1 ? 1 : idx;\n\n const decrease = () => {\n const next = Math.max(0, currentIdx - 1);\n const v = TEXT_SIZES[next].value;\n if (v) editor.chain().focus().setFontSize(v).run();\n else editor.chain().focus().unsetFontSize().run();\n };\n\n const increase = () => {\n const next = Math.min(TEXT_SIZES.length - 1, currentIdx + 1);\n const v = TEXT_SIZES[next].value;\n if (v) editor.chain().focus().setFontSize(v).run();\n else editor.chain().focus().unsetFontSize().run();\n };\n\n return (\n <ToolGroup>\n <ToolBtn onClick={decrease} disabled={currentIdx <= 0} title={`Decrease text size (${TEXT_SIZES[Math.max(0, currentIdx - 1)]?.label})`}>\n <span className=\"text-2xs font-bold leading-none select-none\">A</span>\n </ToolBtn>\n <ToolBtn onClick={increase} disabled={currentIdx >= TEXT_SIZES.length - 1} title={`Increase text size (${TEXT_SIZES[Math.min(TEXT_SIZES.length - 1, currentIdx + 1)]?.label})`}>\n <span className=\"text-base font-bold leading-none select-none\">A</span>\n </ToolBtn>\n </ToolGroup>\n );\n}\n\n/* ── Color picker popover ─────────────────────────────────────────── */\n\nfunction ColorPicker({\n colors,\n activeColor,\n onSelect,\n title,\n icon,\n}: {\n colors: { label: string; value: string }[];\n activeColor: string;\n onSelect: (color: string) => void;\n title: string;\n icon: React.ReactNode;\n}) {\n const [open, setOpen] = useState(false);\n const ref = useRef<HTMLDivElement>(null);\n\n const close = useCallback(() => setOpen(false), []);\n\n useEffect(() => {\n if (!open) return;\n const onClick = (e: MouseEvent) => { if (!ref.current?.contains(e.target as Node)) close(); };\n const onKey = (e: KeyboardEvent) => { if (e.key === \"Escape\") close(); };\n document.addEventListener(\"mousedown\", onClick);\n document.addEventListener(\"keydown\", onKey);\n return () => { document.removeEventListener(\"mousedown\", onClick); document.removeEventListener(\"keydown\", onKey); };\n }, [open, close]);\n\n return (\n <div ref={ref} className=\"relative\">\n <button\n type=\"button\"\n onClick={() => setOpen(!open)}\n title={title}\n className={cn(\n \"flex flex-col items-center justify-center w-7 h-7 rounded-[var(--ds-radius-sm)] transition-colors cursor-pointer\",\n \"focus-visible:outline-none focus-visible:shadow-[var(--ds-shadow-focus)]\",\n open\n ? \"bg-[var(--ds-accent-primary)] text-[var(--ds-text-on-primary)]\"\n : \"text-[var(--ds-text-secondary)] hover:bg-[var(--ds-bg-surface)] hover:text-[var(--ds-text-primary)]\",\n )}\n >\n {icon}\n {activeColor && (\n <span className=\"w-3.5 h-0.5 rounded-[var(--ds-radius-full)] -mt-ds-0.5\" style={{ backgroundColor: activeColor }} />\n )}\n </button>\n\n {open && (\n <div className=\"absolute top-full left-0 mt-ds-1 z-[var(--ds-z-popover)] p-ds-1.5 rounded-[var(--ds-radius-md)] border-[length:var(--ds-border-width)] border-[var(--ds-border-default)] bg-[var(--ds-bg-surface-elevated)] shadow-[var(--ds-shadow-dropdown)] flex gap-ds-1 flex-wrap w-[140px]\">\n {colors.map((c) => (\n <button\n key={c.label}\n type=\"button\"\n title={c.label}\n onClick={() => { onSelect(c.value); close(); }}\n className={cn(\n \"w-6 h-6 rounded-[var(--ds-radius-sm)] border-[2px] transition-all cursor-pointer\",\n \"focus-visible:outline-none focus-visible:shadow-[var(--ds-shadow-focus)]\",\n activeColor === c.value ? `${ACTIVE_RING} scale-110` : \"border-transparent hover:scale-110\",\n )}\n style={{ backgroundColor: c.value || \"var(--ds-text-primary)\" }}\n >\n {!c.value && <span className=\"block w-full h-full rounded-[calc(var(--ds-radius-sm)-2px)] bg-[var(--ds-bg-surface)] relative after:absolute after:inset-0 after:rounded-[inherit] after:bg-gradient-to-br after:from-transparent after:to-[var(--ds-text-muted)] after:opacity-30\" />}\n </button>\n ))}\n </div>\n )}\n </div>\n );\n}\n\n/* ── Link popover ─────────────────────────────────────────────────── */\n\nfunction LinkPopover({ editor }: { editor: Editor }) {\n const [open, setOpen] = useState(false);\n const [url, setUrl] = useState(\"\");\n const ref = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const close = useCallback(() => { setOpen(false); setUrl(\"\"); }, []);\n\n const toggle = useCallback(() => {\n if (editor.isActive(\"link\")) {\n editor.chain().focus().unsetLink().run();\n return;\n }\n const existing = editor.getAttributes(\"link\").href ?? \"\";\n setUrl(existing);\n setOpen((o) => !o);\n }, [editor]);\n\n useEffect(() => {\n if (!open) return;\n const onClick = (e: MouseEvent) => { if (!ref.current?.contains(e.target as Node)) close(); };\n const onKey = (e: KeyboardEvent) => { if (e.key === \"Escape\") close(); };\n document.addEventListener(\"mousedown\", onClick);\n document.addEventListener(\"keydown\", onKey);\n requestAnimationFrame(() => inputRef.current?.focus());\n return () => { document.removeEventListener(\"mousedown\", onClick); document.removeEventListener(\"keydown\", onKey); };\n }, [open, close]);\n\n const apply = () => {\n if (url) editor.chain().focus().setLink({ href: url }).run();\n close();\n };\n\n return (\n <div ref={ref} className=\"relative\">\n <ToolBtn active={editor.isActive(\"link\")} onClick={toggle} title=\"Link\">\n <Icon name=\"link\" size={16} />\n </ToolBtn>\n\n {open && (\n <div className=\"absolute top-full left-0 mt-ds-1 z-[var(--ds-z-popover)] p-ds-1.5 rounded-[var(--ds-radius-md)] border-[length:var(--ds-border-width)] border-[var(--ds-border-subtle)] bg-[var(--ds-bg-surface-elevated)] shadow-[var(--ds-shadow-dropdown)] flex items-center gap-ds-1 w-[240px]\">\n <input\n ref={inputRef}\n type=\"url\"\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n onKeyDown={(e) => { if (e.key === \"Enter\") apply(); }}\n placeholder=\"https://...\"\n className={cn(\n \"flex-1 h-6 px-ds-2 text-xs rounded-[var(--ds-radius-sm)]\",\n \"bg-transparent text-[var(--ds-text-primary)] placeholder:text-[var(--ds-text-muted)]\",\n \"border-[length:var(--ds-border-width)] border-[var(--ds-border-subtle)]\",\n FOCUS_RING,\n )}\n />\n <button\n type=\"button\"\n onClick={apply}\n className={cn(\n \"shrink-0 h-6 px-ds-2 text-xs font-medium rounded-[var(--ds-radius-sm)] cursor-pointer\",\n \"bg-[var(--ds-accent-primary)] text-[var(--ds-text-on-primary)]\",\n \"hover:opacity-90 transition-opacity\",\n \"focus-visible:outline-none focus-visible:shadow-[var(--ds-shadow-focus)]\",\n )}\n >\n Apply\n </button>\n </div>\n )}\n </div>\n );\n}\n\n/* ── Image popover ────────────────────────────────────────────────── */\n\nfunction ImagePopover({ editor }: { editor: Editor }) {\n const [open, setOpen] = useState(false);\n const [url, setUrl] = useState(\"\");\n const [alt, setAlt] = useState(\"\");\n const ref = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const close = useCallback(() => { setOpen(false); setUrl(\"\"); setAlt(\"\"); }, []);\n\n useEffect(() => {\n if (!open) return;\n const onClick = (e: MouseEvent) => { if (!ref.current?.contains(e.target as Node)) close(); };\n const onKey = (e: KeyboardEvent) => { if (e.key === \"Escape\") close(); };\n document.addEventListener(\"mousedown\", onClick);\n document.addEventListener(\"keydown\", onKey);\n requestAnimationFrame(() => inputRef.current?.focus());\n return () => { document.removeEventListener(\"mousedown\", onClick); document.removeEventListener(\"keydown\", onKey); };\n }, [open, close]);\n\n const insert = () => {\n if (url) editor.chain().focus().setImage({ src: url, alt: alt || undefined }).run();\n close();\n };\n\n return (\n <div ref={ref} className=\"relative\">\n <ToolBtn onClick={() => setOpen((o) => !o)} title=\"Image\">\n <Icon name=\"image\" size={16} />\n </ToolBtn>\n\n {open && (\n <div className=\"absolute top-full left-0 mt-ds-1 z-[var(--ds-z-popover)] p-ds-1.5 rounded-[var(--ds-radius-md)] border-[length:var(--ds-border-width)] border-[var(--ds-border-subtle)] bg-[var(--ds-bg-surface-elevated)] shadow-[var(--ds-shadow-dropdown)] flex flex-col gap-ds-1 w-[240px]\">\n <input\n ref={inputRef}\n type=\"url\"\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n placeholder=\"Image URL\"\n className={cn(\n \"h-6 px-ds-2 text-xs rounded-[var(--ds-radius-sm)]\",\n \"bg-transparent text-[var(--ds-text-primary)] placeholder:text-[var(--ds-text-muted)]\",\n \"border-[length:var(--ds-border-width)] border-[var(--ds-border-subtle)]\",\n FOCUS_RING,\n )}\n />\n <div className=\"flex items-center gap-ds-1\">\n <input\n type=\"text\"\n value={alt}\n onChange={(e) => setAlt(e.target.value)}\n onKeyDown={(e) => { if (e.key === \"Enter\") insert(); }}\n placeholder=\"Alt text (optional)\"\n className={cn(\n \"flex-1 h-6 px-ds-2 text-xs rounded-[var(--ds-radius-sm)]\",\n \"bg-transparent text-[var(--ds-text-primary)] placeholder:text-[var(--ds-text-muted)]\",\n \"border-[length:var(--ds-border-width)] border-[var(--ds-border-subtle)]\",\n FOCUS_RING,\n )}\n />\n <button\n type=\"button\"\n onClick={insert}\n className={cn(\n \"shrink-0 h-6 px-ds-2 text-xs font-medium rounded-[var(--ds-radius-sm)] cursor-pointer\",\n \"bg-[var(--ds-accent-primary)] text-[var(--ds-text-on-primary)]\",\n \"hover:opacity-90 transition-opacity\",\n \"focus-visible:outline-none focus-visible:shadow-[var(--ds-shadow-focus)]\",\n )}\n >\n Insert\n </button>\n </div>\n </div>\n )}\n </div>\n );\n}\n\n/* ── Font family select ───────────────────────────────────────────── */\n\nfunction FontFamilySelect({ editor }: { editor: Editor }) {\n const current = editor.getAttributes(\"textStyle\").fontFamily ?? \"\";\n\n return (\n <select\n value={current}\n onChange={(e) => {\n const v = e.target.value;\n if (v) editor.chain().focus().setFontFamily(v).run();\n else editor.chain().focus().unsetFontFamily().run();\n }}\n title=\"Font family\"\n aria-label=\"Font family\"\n className={cn(\n \"h-7 px-ds-1.5 text-xs rounded-[var(--ds-radius-sm)] cursor-pointer\",\n \"bg-transparent text-[var(--ds-text-secondary)] hover:bg-[var(--ds-bg-surface)]\",\n \"border-none outline-none\",\n \"focus-visible:shadow-[var(--ds-shadow-focus)]\",\n )}\n >\n {FONT_FAMILIES.map((f) => (\n <option key={f.label} value={f.value}>{f.label}</option>\n ))}\n </select>\n );\n}\n\n/* ── Shared toolbar helpers ───────────────────────────────────────── */\n\nfunction ToolGroup({ children }: { children: React.ReactNode }) {\n return <div className=\"flex items-center gap-ds-0.5\">{children}</div>;\n}\n\nfunction Divider() {\n return <div className=\"w-px h-5 mx-ds-1 bg-[var(--ds-border-subtle)]\" />;\n}\n\nfunction TableOpBtn({ onClick, label }: { onClick: () => void; label: string }) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n title={label}\n className={cn(\n \"h-6 px-ds-1.5 text-2xs font-medium rounded-[var(--ds-radius-sm)] transition-colors cursor-pointer whitespace-nowrap\",\n \"focus-visible:outline-none focus-visible:shadow-[var(--ds-shadow-focus)]\",\n \"text-[var(--ds-text-secondary)] hover:bg-[var(--ds-bg-surface)] hover:text-[var(--ds-text-primary)]\",\n )}\n >\n {label}\n </button>\n );\n}\n\nfunction ToolBtn({ active, disabled, onClick, title, children }: { active?: boolean; disabled?: boolean; onClick: () => void; title: string; children: React.ReactNode }) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n title={title}\n className={cn(\n \"flex items-center justify-center w-7 h-7 rounded-[var(--ds-radius-sm)] transition-colors cursor-pointer\",\n \"focus-visible:outline-none focus-visible:shadow-[var(--ds-shadow-focus)]\",\n active\n ? \"bg-[var(--ds-accent-primary)] text-[var(--ds-text-on-primary)]\"\n : \"text-[var(--ds-text-secondary)] hover:bg-[var(--ds-bg-surface)] hover:text-[var(--ds-text-primary)]\",\n disabled && \"opacity-disabled pointer-events-none\",\n )}\n >\n {children}\n </button>\n );\n}\n\n"]}
package/dist/index.d.ts CHANGED
@@ -2,8 +2,8 @@ import * as react from 'react';
2
2
  import { ButtonHTMLAttributes, ReactNode, InputHTMLAttributes, LabelHTMLAttributes, TextareaHTMLAttributes, Ref, ReactElement, HTMLAttributes, AnchorHTMLAttributes, ComponentType } from 'react';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
  import { IconName } from './icons.js';
5
- import { B as BreakpointKey } from './use-breakpoint-Cn51IubK.js';
6
- export { a as BreakpointWidthProvider, u as useBreakpoint } from './use-breakpoint-Cn51IubK.js';
5
+ import { B as BreakpointKey } from './use-breakpoint-BfKzmkxx.js';
6
+ export { a as BreakpointWidthProvider, u as useBreakpoint } from './use-breakpoint-BfKzmkxx.js';
7
7
 
8
8
  type ButtonVariant = "default" | "secondary" | "tertiary" | "outline" | "ghost" | "destructive" | "success" | "warning" | "link";
9
9
  type ButtonSize = "sm" | "md" | "lg" | "icon-sm" | "icon" | "icon-lg";
@@ -658,15 +658,18 @@ interface TagProps {
658
658
  declare const Tag: react.ForwardRefExoticComponent<TagProps & react.RefAttributes<HTMLSpanElement>>;
659
659
 
660
660
  type AvatarStatus = "online" | "away" | "busy" | "offline";
661
+ type AvatarColor = "auto" | "accent" | "neutral" | 1 | 2 | 3 | 4 | 5;
661
662
  interface AvatarProps {
662
663
  initials?: string;
663
664
  src?: string;
664
665
  alt?: string;
665
666
  size?: "sm" | "md" | "lg";
666
667
  status?: AvatarStatus;
668
+ /** Initials background. "auto" (default) derives a stable palette tint from alt/initials so groups vary; use "accent" sparingly. */
669
+ color?: AvatarColor;
667
670
  className?: string;
668
671
  }
669
- declare function Avatar({ initials, src, alt, size, status, className }: AvatarProps): react_jsx_runtime.JSX.Element;
672
+ declare function Avatar({ initials, src, alt, size, status, color, className }: AvatarProps): react_jsx_runtime.JSX.Element;
670
673
 
671
674
  interface AvatarGroupItem {
672
675
  /** Display name — used for the tooltip and, when initials are omitted, to derive them. */
@@ -675,6 +678,7 @@ interface AvatarGroupItem {
675
678
  src?: string;
676
679
  alt?: string;
677
680
  status?: AvatarStatus;
681
+ color?: AvatarColor;
678
682
  }
679
683
  interface AvatarGroupProps {
680
684
  items: AvatarGroupItem[];
@@ -879,12 +883,17 @@ interface Tab {
879
883
  disabled?: boolean;
880
884
  /** Truncate long labels and show tooltip on hover. */
881
885
  truncate?: boolean;
886
+ /** Section heading in vertical layouts; becomes the option group in the mobile Dropdown. */
887
+ group?: string;
882
888
  }
883
889
  interface TabsArrayProps {
884
890
  tabs: Tab[];
885
891
  activeTab: string;
886
892
  onTabChange: (id: string) => void;
887
- orientation?: "horizontal" | "vertical";
893
+ /** "responsive" renders vertical from the md breakpoint up and collapses to a Dropdown below it. */
894
+ orientation?: "horizontal" | "vertical" | "responsive";
895
+ /** Below md, tabs either side-scroll (default) or collapse to a Dropdown. "responsive" implies "dropdown". */
896
+ mobile?: "scroll" | "dropdown";
888
897
  variant?: TabsVariant;
889
898
  fullWidth?: boolean;
890
899
  overflow?: TabsOverflow;
@@ -1263,8 +1272,17 @@ interface DrawerProps {
1263
1272
  lightBackdrop?: boolean;
1264
1273
  /** Offset the drawer from the top of its container. When set, the area above this offset remains visible and interactive (e.g. keeping a navbar accessible). */
1265
1274
  topOffset?: string;
1275
+ /**
1276
+ * What the drawer becomes at phone width (≤ the sm breakpoint).
1277
+ * "sheet" (default for right and bottom): a draggable bottom Sheet with snap points.
1278
+ * "panel" (default for left, which is the navigation convention): a full-height side panel.
1279
+ * lightBackdrop and topOffset do not apply in sheet mode.
1280
+ */
1281
+ mobile?: "sheet" | "panel";
1282
+ /** Snap points for the phone-width Sheet, as fractions of the viewport. Default [0.5, 0.92]. */
1283
+ snapPoints?: number[];
1266
1284
  }
1267
- declare function Drawer({ open, onClose, position, width, title, children, footer, container, flush, lightBackdrop, topOffset }: DrawerProps): react.ReactPortal | null;
1285
+ declare function Drawer(props: DrawerProps): react_jsx_runtime.JSX.Element;
1268
1286
 
1269
1287
  interface TooltipProps {
1270
1288
  content: ReactNode;
@@ -1343,12 +1361,17 @@ declare function ContextMenu({ items, children, className, ref, container }: Con
1343
1361
  interface SheetProps {
1344
1362
  open: boolean;
1345
1363
  onClose: () => void;
1346
- title?: string;
1364
+ title?: ReactNode;
1347
1365
  children: ReactNode;
1348
1366
  footer?: ReactNode;
1367
+ /** Heights the sheet snaps to, as fractions of the viewport (or container). Default [0.5, 0.92]. */
1349
1368
  snapPoints?: number[];
1369
+ /** Render inside this element (absolute positioning, no body scroll lock) instead of document.body. */
1370
+ container?: Element | DocumentFragment;
1371
+ /** Remove default content padding — use when the child handles its own spacing. */
1372
+ flush?: boolean;
1350
1373
  }
1351
- declare function Sheet({ open, onClose, title, children, footer, snapPoints }: SheetProps): react.ReactPortal | null;
1374
+ declare function Sheet({ open, onClose, title, children, footer, snapPoints, container, flush }: SheetProps): react.ReactPortal | null;
1352
1375
 
1353
1376
  interface Notification {
1354
1377
  id: string;