gridsmith-ui 0.6.1 → 0.6.2

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 } 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 ? \"border-[var(--ds-accent-primary)] 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-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--ds-input-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-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--ds-input-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-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--ds-input-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 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"]}
package/dist/index.js CHANGED
@@ -1,13 +1,13 @@
1
- import { Skeleton } from './chunk-OUYJXVLQ.js';
2
- export { Skeleton } from './chunk-OUYJXVLQ.js';
3
- import { Badge } from './chunk-UYGTAVKR.js';
4
- export { Badge } from './chunk-UYGTAVKR.js';
1
+ import { Skeleton } from './chunk-QGBG72OB.js';
2
+ export { Skeleton } from './chunk-QGBG72OB.js';
3
+ import { Badge } from './chunk-TYU2LQGK.js';
4
+ export { Badge } from './chunk-TYU2LQGK.js';
5
5
  import { useBreakpoint } from './chunk-DPF6776I.js';
6
6
  export { BreakpointWidthProvider, useBreakpoint } from './chunk-DPF6776I.js';
7
- import { Tooltip, useTextOverflow, usePosition, Slot } from './chunk-CHNY75QI.js';
8
- export { Tooltip, useTextOverflow } from './chunk-CHNY75QI.js';
7
+ import { Tooltip, useTextOverflow, usePosition, Slot } from './chunk-R5QGJURZ.js';
8
+ export { Tooltip, useTextOverflow } from './chunk-R5QGJURZ.js';
9
9
  import { Icon } from './chunk-GX6O72IV.js';
10
- import { cn, GLASS_SURFACE, GLASS_BACKDROP, GLASS_DROPDOWN, lockBodyScroll, unlockBodyScroll, GLASS_OVERLAY } from './chunk-IUBWNDUK.js';
10
+ import { cn, GLASS_SURFACE, ACTIVE_RING, GLASS_BACKDROP, GLASS_DROPDOWN, lockBodyScroll, unlockBodyScroll, GLASS_OVERLAY, HAS_FOCUS_RING, FOCUS_RING, FOCUS_WITHIN_RING } from './chunk-TTZSZNJ6.js';
11
11
  import { createContext, forwardRef, useContext, useState, useRef, useEffect, useCallback, useId, isValidElement, cloneElement, useMemo, Children, Fragment as Fragment$1, useLayoutEffect } from 'react';
12
12
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
13
13
  import { createPortal } from 'react-dom';
@@ -324,7 +324,7 @@ function Input({ className, size = "md", error = false, prefix, suffix, ...props
324
324
  "rounded-[var(--ds-radius-md)]",
325
325
  "shadow-[var(--ds-input-shadow)]",
326
326
  hoverBorder,
327
- "has-[:focus-visible]:ring-2 has-[:focus-visible]:ring-[var(--ds-input-focus-ring)] has-[:focus-visible]:border-[var(--ds-input-focus-ring)]",
327
+ HAS_FOCUS_RING,
328
328
  "transition-colors duration-[var(--ds-transition-speed)]",
329
329
  props.disabled && "cursor-not-allowed opacity-disabled",
330
330
  props.readOnly && "bg-[var(--ds-bg-muted)] cursor-default",
@@ -366,7 +366,7 @@ function Input({ className, size = "md", error = false, prefix, suffix, ...props
366
366
  "shadow-[var(--ds-input-shadow)]",
367
367
  "placeholder:text-[var(--ds-text-muted)]",
368
368
  hoverBorder,
369
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ds-input-focus-ring)] focus-visible:border-[var(--ds-input-focus-ring)]",
369
+ FOCUS_RING,
370
370
  "disabled:cursor-not-allowed disabled:opacity-disabled",
371
371
  "read-only:bg-[var(--ds-bg-muted)] read-only:text-[var(--ds-text-secondary)] read-only:cursor-default",
372
372
  "transition-colors duration-[var(--ds-transition-speed)]",
@@ -406,7 +406,7 @@ function Textarea({ className, autoResize, maxRows, ref, ...props }) {
406
406
  "shadow-[var(--ds-input-shadow)]",
407
407
  "placeholder:text-[var(--ds-text-muted)]",
408
408
  "hover:border-[var(--ds-input-border-hover)]",
409
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ds-input-focus-ring)] focus-visible:border-[var(--ds-input-focus-ring)]",
409
+ FOCUS_RING,
410
410
  "disabled:cursor-not-allowed disabled:opacity-disabled disabled:hover:border-[var(--ds-input-border)]",
411
411
  "read-only:bg-[var(--ds-bg-muted)] read-only:text-[var(--ds-text-secondary)] read-only:cursor-default read-only:hover:border-[var(--ds-input-border)]",
412
412
  "transition-colors duration-[var(--ds-transition-speed)]",
@@ -677,8 +677,8 @@ function Dropdown({
677
677
  "shadow-[var(--ds-input-shadow)]",
678
678
  "transition-colors",
679
679
  !error && !disabled && !open && "hover:border-[var(--ds-input-border-hover)]",
680
- open && !error && "border-[var(--ds-input-focus-ring)] ring-2 ring-[var(--ds-input-focus-ring)]",
681
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ds-input-focus-ring)] focus-visible:border-[var(--ds-input-focus-ring)]",
680
+ open && !error && ACTIVE_RING,
681
+ FOCUS_RING,
682
682
  "cursor-pointer disabled:cursor-not-allowed disabled:opacity-disabled",
683
683
  !selectedValues.length && "text-[var(--ds-text-muted)]"
684
684
  ),
@@ -885,7 +885,7 @@ function Combobox({ value, onChange, options, placeholder = "Search\u2026", disa
885
885
  "shadow-[var(--ds-input-shadow)]",
886
886
  "transition-colors duration-[var(--ds-transition-speed)]",
887
887
  !error && !disabled && "hover:border-[var(--ds-input-border-hover)]",
888
- "has-[:focus-visible]:ring-2 has-[:focus-visible]:ring-[var(--ds-input-focus-ring)] has-[:focus-visible]:border-[var(--ds-input-focus-ring)]",
888
+ HAS_FOCUS_RING,
889
889
  disabled && "opacity-disabled pointer-events-none"
890
890
  ),
891
891
  children: [
@@ -1290,7 +1290,7 @@ function DatePicker({ value, onChange, placeholder = "Pick a date", disabled, cl
1290
1290
  "transition-colors cursor-pointer",
1291
1291
  "px-ds-3 py-ds-2",
1292
1292
  !error && !disabled && !open && "hover:border-[var(--ds-input-border-hover)]",
1293
- open && "border-[var(--ds-accent-primary)] ring-2 ring-[var(--ds-input-focus-ring)]",
1293
+ open && ACTIVE_RING,
1294
1294
  disabled && "opacity-disabled cursor-not-allowed",
1295
1295
  value ? "text-[var(--ds-text-primary)]" : "text-[var(--ds-text-muted)]"
1296
1296
  ),
@@ -1695,8 +1695,8 @@ function DateRangePicker({
1695
1695
  "transition-colors cursor-pointer",
1696
1696
  "px-ds-3 py-ds-2",
1697
1697
  !error && !disabled && !open && "hover:border-[var(--ds-input-border-hover)]",
1698
- open && "border-[var(--ds-accent-primary)] ring-2 ring-[var(--ds-input-focus-ring)]",
1699
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ds-input-focus-ring)]",
1698
+ open && ACTIVE_RING,
1699
+ FOCUS_RING,
1700
1700
  disabled && "opacity-disabled cursor-not-allowed",
1701
1701
  summary ? "text-[var(--ds-text-primary)]" : "text-[var(--ds-text-muted)]"
1702
1702
  ),
@@ -1907,7 +1907,7 @@ function FileUpload({ onFiles, accept, multiple = true, maxSize, className, erro
1907
1907
  "flex flex-col items-center justify-center gap-ds-2 cursor-pointer group",
1908
1908
  "border-2 border-dashed rounded-[var(--ds-radius-md)]",
1909
1909
  "transition-colors",
1910
- error ? "border-[var(--ds-status-error)]" : dragOver ? "border-[var(--ds-accent-primary)] bg-[var(--ds-accent-whisper)]" : "border-[var(--ds-border-default)] hover:border-[var(--ds-accent-primary)] hover:bg-[var(--ds-accent-whisper)]"
1910
+ error ? "border-[var(--ds-status-error)]" : dragOver ? `${ACTIVE_RING} bg-[var(--ds-accent-whisper)]` : "border-[var(--ds-border-default)] hover:border-[var(--ds-accent-primary)] hover:bg-[var(--ds-accent-whisper)]"
1911
1911
  ),
1912
1912
  style: { padding: "var(--ds-space-8) var(--ds-space-4)" },
1913
1913
  children: [
@@ -2190,7 +2190,7 @@ function TimePicker({
2190
2190
  "transition-colors cursor-pointer",
2191
2191
  "px-ds-3 py-ds-2",
2192
2192
  !error && !disabled && !open && "hover:border-[var(--ds-input-border-hover)]",
2193
- open && "border-[var(--ds-accent-primary)] ring-2 ring-[var(--ds-input-focus-ring)]",
2193
+ open && ACTIVE_RING,
2194
2194
  disabled && "opacity-disabled cursor-not-allowed",
2195
2195
  value ? "text-[var(--ds-text-primary)]" : "text-[var(--ds-text-muted)]"
2196
2196
  ),
@@ -2382,7 +2382,8 @@ function NumberInput({
2382
2382
  "bg-[var(--ds-input-bg)]",
2383
2383
  "transition-colors duration-[var(--ds-transition-speed)]",
2384
2384
  !error && !disabled && "hover:border-[var(--ds-input-border-hover)]",
2385
- "focus-within:ring-2 focus-within:ring-[var(--ds-input-focus-ring)] focus-within:border-[var(--ds-input-focus-ring)] focus-within:hover:border-[var(--ds-input-focus-ring)]",
2385
+ FOCUS_WITHIN_RING,
2386
+ "focus-within:hover:border-[var(--ds-border-focus)]",
2386
2387
  disabled && "opacity-disabled cursor-not-allowed",
2387
2388
  className
2388
2389
  ),
@@ -2654,7 +2655,7 @@ function TagInput({
2654
2655
  "shadow-[var(--ds-input-shadow)]",
2655
2656
  "transition-colors duration-[var(--ds-transition-speed)] cursor-text",
2656
2657
  !error && !disabled && "hover:border-[var(--ds-input-border-hover)]",
2657
- "has-[:focus-visible]:ring-2 has-[:focus-visible]:ring-[var(--ds-input-focus-ring)] has-[:focus-visible]:border-[var(--ds-input-focus-ring)]",
2658
+ HAS_FOCUS_RING,
2658
2659
  disabled && "opacity-disabled cursor-not-allowed",
2659
2660
  className
2660
2661
  ),
@@ -2796,7 +2797,7 @@ function PinInput({
2796
2797
  "shadow-[var(--ds-input-shadow)]",
2797
2798
  "transition-colors",
2798
2799
  !error && !disabled && "hover:border-[var(--ds-input-border-hover)]",
2799
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ds-input-focus-ring)] focus-visible:border-[var(--ds-input-focus-ring)]",
2800
+ FOCUS_RING,
2800
2801
  "placeholder:text-[var(--ds-text-muted)]",
2801
2802
  sizes3[size],
2802
2803
  disabled && "opacity-disabled cursor-not-allowed"
@@ -3157,7 +3158,7 @@ function ColorPicker({
3157
3158
  "border-[length:var(--ds-border-width)] border-[var(--ds-input-border)]",
3158
3159
  "rounded-[var(--ds-radius-sm)]",
3159
3160
  "hover:border-[var(--ds-input-border-hover)]",
3160
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ds-input-focus-ring)] focus-visible:border-[var(--ds-input-focus-ring)]"
3161
+ FOCUS_RING
3161
3162
  )
3162
3163
  }
3163
3164
  )
@@ -3175,7 +3176,7 @@ function ColorPicker({
3175
3176
  "border-[length:var(--ds-border-width)]",
3176
3177
  "hover:scale-110 transition-transform",
3177
3178
  "focus-visible:shadow-[var(--ds-shadow-focus)] outline-none",
3178
- swatch.toLowerCase() === value.toLowerCase() ? "border-[var(--ds-accent-primary)] ring-1 ring-[var(--ds-accent-primary)]" : "border-[var(--ds-border-default)]"
3179
+ swatch.toLowerCase() === value.toLowerCase() ? ACTIVE_RING : "border-[var(--ds-border-default)]"
3179
3180
  ),
3180
3181
  style: { backgroundColor: swatch },
3181
3182
  "aria-label": swatch
@@ -3766,7 +3767,7 @@ function MentionInput({
3766
3767
  "shadow-[var(--ds-input-shadow)]",
3767
3768
  "placeholder:text-[var(--ds-text-muted)]",
3768
3769
  "hover:border-[var(--ds-input-border-hover)]",
3769
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--ds-input-focus-ring)] focus-visible:border-[var(--ds-input-focus-ring)]",
3770
+ FOCUS_RING,
3770
3771
  "disabled:cursor-not-allowed disabled:opacity-disabled disabled:hover:border-[var(--ds-input-border)]",
3771
3772
  "transition-colors duration-[var(--ds-transition-speed)]"
3772
3773
  )
@@ -3990,8 +3991,8 @@ var Card = forwardRef(function Card2({
3990
3991
  isSelectable && !disabled && "cursor-pointer select-none transition-all duration-[var(--ds-transition-speed)] ease-[var(--ds-transition-ease)]",
3991
3992
  isSelectable && !disabled && !selected && "hover:border-[var(--ds-accent-primary)]",
3992
3993
  isSelectable && "focus-visible:outline-none focus-visible:shadow-[var(--ds-shadow-focus)]",
3993
- showRing && "border-[var(--ds-accent-primary)] ring-1 ring-[var(--ds-accent-primary)]",
3994
- hasSelectType && selected && "border-[var(--ds-accent-primary)] bg-[var(--ds-accent-subtle)]",
3994
+ (showRing || hasSelectType && selected) && ACTIVE_RING,
3995
+ hasSelectType && selected && "bg-[var(--ds-accent-subtle)]",
3995
3996
  disabled && "opacity-disabled cursor-not-allowed",
3996
3997
  className
3997
3998
  ),
@@ -4536,7 +4537,7 @@ function Table({
4536
4537
  "border-[length:var(--ds-border-width)] border-[var(--ds-border-subtle)]",
4537
4538
  "rounded-[var(--ds-radius-md)] bg-[var(--ds-bg-surface)]",
4538
4539
  "p-ds-4 space-y-ds-2",
4539
- isSelected && "ring-1 ring-[var(--ds-accent-primary)]",
4540
+ isSelected && ACTIVE_RING,
4540
4541
  onRowClick && "cursor-pointer hover:bg-[var(--ds-bg-muted)] focus-visible:outline-none focus-visible:shadow-[var(--ds-shadow-focus)]"
4541
4542
  ),
4542
4543
  onClick: onRowClick ? () => onRowClick(row, originalIdx) : void 0,
@@ -7109,7 +7110,7 @@ function ChatInputBar({ onSend }) {
7109
7110
  "border-[length:var(--ds-border-width)] border-[var(--ds-border-default)]",
7110
7111
  "bg-[var(--ds-input-bg)]",
7111
7112
  "shadow-[var(--ds-input-shadow)]",
7112
- "focus-within:ring-2 focus-within:ring-[var(--ds-input-focus-ring)] focus-within:border-[var(--ds-input-focus-ring)]",
7113
+ FOCUS_WITHIN_RING,
7113
7114
  "transition-colors duration-[var(--ds-transition-speed)]"
7114
7115
  ),
7115
7116
  children: [
@@ -8103,9 +8104,9 @@ function StepCircle({ status, index, onClick, clickable }) {
8103
8104
  clickable && "cursor-pointer",
8104
8105
  !clickable && "cursor-default",
8105
8106
  status === "complete" && "bg-[var(--ds-accent-primary)] [background-image:var(--ds-gradient)] text-[var(--ds-text-on-primary)]",
8106
- status === "current" && "border-2 border-[var(--ds-accent-primary)] text-[var(--ds-accent-primary)] bg-[var(--ds-bg-surface)]",
8107
+ status === "current" && `border-2 ${ACTIVE_RING} text-[var(--ds-accent-primary)] bg-[var(--ds-bg-surface)]`,
8107
8108
  status === "error" && "bg-[var(--ds-status-error)] text-[var(--ds-text-on-primary)]",
8108
- status === "loading" && "border-2 border-[var(--ds-accent-primary)] text-[var(--ds-accent-primary)] bg-[var(--ds-bg-surface)] animate-pulse",
8109
+ status === "loading" && `border-2 ${ACTIVE_RING} text-[var(--ds-accent-primary)] bg-[var(--ds-bg-surface)] animate-pulse`,
8109
8110
  status === "upcoming" && "border-[length:var(--ds-border-width)] border-[var(--ds-border-default)] text-[var(--ds-text-muted)] bg-[var(--ds-bg-surface)]"
8110
8111
  ),
8111
8112
  children: status === "complete" ? /* @__PURE__ */ jsx(Icon, { name: "check", size: 14 }) : status === "error" ? /* @__PURE__ */ jsx(Icon, { name: "warning", size: 14 }) : index + 1