@frontlit/text-editor 0.1.0-alpha.3 → 0.1.0-alpha.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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/empty-doc.ts","../src/create-id.ts","../src/components/custom-code-mirror.tsx","../src/extensions.ts","../src/components/link-editor-popover.tsx","../src/toolbar.tsx","../src/bubble-menu.tsx","../src/lib/cn.ts","../src/image-picker.tsx","../src/docs/urls.ts","../src/docs/extensions.ts","../src/editor.tsx","../src/extract-headings.ts","../src/extract-text-from-node.ts","../src/components/copy-code-button.tsx","../src/components/rendered-code-block.tsx","../src/docs/headings.ts","../src/text-renderer.tsx","../src/normalize-text-editor-content.ts","../src/extract-text-from-text-editor-content.ts","../src/truncate-text-editor-content.ts"],"names":["jsx","useState","useRef","useEffect","jsxs","LinkIcon","ListIcon","TableIcon","ImageIcon","Trash2","Bold","Italic","Underline","Code","StarterKit","Node","Link","Image","Table","TableRow","TableCell","TableHeader","Placeholder","json","useCallback","Fragment","Check","React","getSchema","Tag","classes"],"mappings":"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","file":"index.js","sourcesContent":["import type { TextEditorContent } from \"./text-editor-content\";\n\nconst emptyDoc: TextEditorContent = {\n type: \"doc\",\n content: [],\n};\n\nexport default emptyDoc;\n","export function createId(textContent: string) {\n return textContent.replace(/\\s/g, \"-\").toLowerCase();\n}\n","// This is only to maintain backward compatibility for codeMirror node type\n\nimport { Node } from \"@tiptap/core\";\n\nexport const CodeMirrorNode = Node.create({\n name: \"codeMirror\",\n content: \"block+\",\n code: true,\n\n addOptions() {\n return {\n HTMLAttributes: {},\n };\n },\n\n parseHTML() {\n return [\n {\n tag: \"pre\",\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\"pre\", HTMLAttributes, 0];\n },\n});\n","import StarterKit from \"@tiptap/starter-kit\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport Link from \"@tiptap/extension-link\";\nimport { Table, TableCell, TableHeader, TableRow } from \"@tiptap/extension-table\";\nimport Image from \"@tiptap/extension-image\";\nimport Dropcursor from \"@tiptap/extension-dropcursor\";\nimport Gapcursor from \"@tiptap/extension-gapcursor\";\nimport CodeBlockLowlight from \"@tiptap/extension-code-block-lowlight\";\nimport Heading from \"@tiptap/extension-heading\";\nimport Highlight from \"@tiptap/extension-highlight\";\nimport { lowlight } from \"lowlight\";\nimport javascript from \"highlight.js/lib/languages/javascript\";\nimport typescript from \"highlight.js/lib/languages/typescript\";\nimport json from \"highlight.js/lib/languages/json\";\nimport css from \"highlight.js/lib/languages/css\";\nimport xml from \"highlight.js/lib/languages/xml\";\nimport type { Extensions } from \"@tiptap/core\";\nimport { createId } from \"./create-id\";\nimport { CodeMirrorNode } from \"./components/custom-code-mirror\";\n\nlowlight.registerLanguage(\"javascript\", javascript);\nlowlight.registerLanguage(\"typescript\", typescript);\nlowlight.registerLanguage(\"json\", json);\nlowlight.registerLanguage(\"css\", css);\nlowlight.registerLanguage(\"html\", xml);\n\ninterface ExtensionOptions {\n placeholder?: string;\n}\n\nexport const createExtensions = ({\n placeholder,\n}: ExtensionOptions = {}): Extensions => [\n StarterKit.configure({\n codeBlock: false,\n // Configured/replaced explicitly below (custom options or a\n // `.extend()`) — disabled here to avoid tiptap's duplicate-extension\n // warning and constructing throwaway instances of each.\n link: false,\n dropcursor: false,\n gapcursor: false,\n heading: false,\n }),\n Placeholder.configure({\n placeholder: placeholder || \"Write something…\",\n }),\n Link.configure({\n openOnClick: false,\n autolink: true,\n linkOnPaste: true,\n }),\n Table.configure({\n resizable: true,\n }),\n TableRow,\n TableHeader,\n TableCell,\n Image.configure({\n // We embed uploaded images as data URLs (no backend/media library in\n // this package), so base64 sources must be allowed.\n allowBase64: true,\n HTMLAttributes: {\n class: \"max-w-full h-auto rounded-md\",\n },\n resize: {\n enabled: true,\n directions: [\"top\", \"bottom\", \"left\", \"right\"],\n alwaysPreserveAspectRatio: true,\n },\n }),\n Dropcursor.configure({\n color: \"hsl(var(--foreground))\",\n width: 2,\n }),\n Gapcursor,\n CodeBlockLowlight.configure({\n lowlight,\n }),\n Heading.extend({\n renderHTML({ node, HTMLAttributes }) {\n const level = this.options.levels.includes(node.attrs.level)\n ? node.attrs.level\n : this.options.levels[0];\n const id =\n typeof node.textContent === \"string\" ? createId(node.textContent) : undefined;\n\n return [\n `h${level}`,\n {\n ...HTMLAttributes,\n id,\n },\n 0,\n ];\n },\n }),\n Highlight,\n CodeMirrorNode,\n];\n","\"use client\";\n\nimport React, { useEffect, useRef, useState } from \"react\";\nimport type { Editor } from \"@tiptap/react\";\nimport { Check, Trash2, X } from \"lucide-react\";\n\ninterface LinkEditorPopoverProps {\n editor: Editor;\n onClose: () => void;\n variant?: \"panel\" | \"inline\";\n containerRef?: React.MutableRefObject<HTMLDivElement | null>;\n}\n\nconst LinkEditorPopover = ({\n editor,\n onClose,\n variant = \"panel\",\n containerRef,\n}: LinkEditorPopoverProps): React.JSX.Element => {\n const [linkValue, setLinkValue] = useState(\"\");\n const inputRef = useRef<HTMLInputElement | null>(null);\n const localContainerRef = useRef<HTMLDivElement | null>(null);\n\n const assignContainerRef = (node: HTMLDivElement | null) => {\n localContainerRef.current = node;\n if (containerRef) {\n containerRef.current = node;\n }\n };\n\n useEffect(() => {\n const current = editor.getAttributes(\"link\").href as string | undefined;\n setLinkValue(current ?? \"\");\n }, [editor]);\n\n useEffect(() => {\n const timer = window.setTimeout(() => {\n inputRef.current?.focus();\n }, 20);\n\n return () => window.clearTimeout(timer);\n }, []);\n\n const applyLink = () => {\n const value = linkValue.trim();\n if (!value) {\n editor.chain().focus().extendMarkRange(\"link\").unsetLink().run();\n } else {\n editor.chain().focus().extendMarkRange(\"link\").setLink({ href: value }).run();\n }\n\n onClose();\n };\n\n const removeLink = () => {\n editor.chain().focus().extendMarkRange(\"link\").unsetLink().run();\n onClose();\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n applyLink();\n }\n\n if (event.key === \"Escape\") {\n event.preventDefault();\n onClose();\n }\n };\n\n if (variant === \"inline\") {\n return (\n <div\n ref={assignContainerRef}\n className=\"flex items-center gap-2 rounded-md border border-border bg-background p-2 shadow\"\n onMouseDown={(event) => event.stopPropagation()}\n >\n <input\n ref={inputRef}\n type=\"text\"\n inputMode=\"url\"\n placeholder=\"https://example.com\"\n value={linkValue}\n onChange={(event) => setLinkValue(event.target.value)}\n onKeyDown={handleKeyDown}\n className=\"w-48 rounded border border-border bg-background px-2 py-1 text-sm text-foreground focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary\"\n />\n <button\n type=\"button\"\n aria-label=\"Cancel link editing\"\n className=\"inline-flex h-8 w-8 items-center justify-center rounded border border-border text-foreground transition-colors hover:bg-muted\"\n onClick={onClose}\n >\n <X className=\"h-4 w-4\" />\n </button>\n <button\n type=\"button\"\n aria-label=\"Remove link\"\n className=\"inline-flex h-8 w-8 items-center justify-center rounded border border-border text-foreground transition-colors hover:bg-muted\"\n onClick={removeLink}\n >\n <Trash2 className=\"h-4 w-4\" />\n </button>\n <button\n type=\"button\"\n aria-label=\"Apply link\"\n className=\"inline-flex h-8 w-8 items-center justify-center rounded bg-primary text-primary-foreground transition-colors hover:bg-primary/90\"\n onClick={applyLink}\n >\n <Check className=\"h-4 w-4\" />\n </button>\n </div>\n );\n }\n\n return (\n <div\n ref={assignContainerRef}\n className=\"absolute left-2 top-full z-20 mt-2 w-full max-w-sm rounded-md border border-border bg-background p-3 shadow-lg\"\n >\n <div className=\"flex flex-col gap-2\">\n <label className=\"text-xs font-medium text-muted-foreground\">Link URL</label>\n <input\n ref={inputRef}\n type=\"text\"\n inputMode=\"url\"\n placeholder=\"https://example.com\"\n value={linkValue}\n onChange={(event) => setLinkValue(event.target.value)}\n onKeyDown={handleKeyDown}\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-sm text-foreground focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary\"\n />\n <div className=\"flex items-center justify-end gap-2\">\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 rounded border border-border px-2 py-1 text-sm text-foreground transition-colors hover:bg-muted\"\n onClick={onClose}\n >\n <X className=\"h-4 w-4\" />\n Cancel\n </button>\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 rounded border border-border px-2 py-1 text-sm text-foreground transition-colors hover:bg-muted\"\n onClick={removeLink}\n >\n <Trash2 className=\"h-4 w-4\" />\n Remove\n </button>\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 rounded bg-primary px-2 py-1 text-sm font-medium text-primary-foreground transition-colors hover:bg-primary/90\"\n onClick={applyLink}\n >\n <Check className=\"h-4 w-4\" />\n Apply\n </button>\n </div>\n </div>\n </div>\n );\n};\n\nexport default LinkEditorPopover;\n","import React, { useEffect, useRef, useState } from \"react\";\nimport type { Editor } from \"@tiptap/core\";\nimport type { Level } from \"@tiptap/extension-heading\";\nimport {\n Bold,\n ChevronDown,\n Code,\n Image as ImageIcon,\n Italic,\n Link as LinkIcon,\n List as ListIcon,\n ListOrdered,\n Minus,\n Plus,\n Quote,\n Redo2,\n Table as TableIcon,\n Trash2,\n Underline,\n Undo2,\n} from \"lucide-react\";\nimport LinkEditorPopover from \"./components/link-editor-popover.js\";\n\ninterface ToolbarProps {\n profile?: \"default\" | \"documentation\";\n editor: Editor | null;\n onRequestImageUpload: () => void;\n isUploadingImage?: boolean;\n}\n\ntype PopoverType = \"heading\" | \"insert\" | \"link\" | null;\n\nconst iconButtonBase =\n \"inline-flex h-8 w-8 items-center justify-center rounded border border-transparent text-foreground transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary disabled:cursor-not-allowed disabled:opacity-50\";\n\nfunction IconButton({\n icon: Icon,\n label,\n active,\n disabled,\n onClick,\n}: {\n icon: React.ComponentType<{ className?: string }>;\n label: string;\n active?: boolean;\n disabled?: boolean;\n onClick?: () => void;\n}): React.JSX.Element {\n return (\n <button\n type=\"button\"\n aria-label={label}\n title={label}\n className={`${iconButtonBase} ${\n active\n ? \"bg-primary text-primary-foreground hover:bg-primary/90\"\n : \"bg-transparent hover:bg-muted\"\n }`}\n disabled={disabled}\n onClick={onClick}\n >\n <Icon className=\"h-4 w-4\" />\n </button>\n );\n}\n\nconst headingOptions: Array<{\n label: string;\n value: string;\n level?: Level;\n}> = [\n { label: \"Paragraph\", value: \"paragraph\" },\n { label: \"Heading 1\", value: \"h1\", level: 1 },\n { label: \"Heading 2\", value: \"h2\", level: 2 },\n { label: \"Heading 3\", value: \"h3\", level: 3 },\n];\n\nfunction Divider(): React.JSX.Element {\n return <span aria-hidden className=\"mx-1 h-6 w-px shrink-0 bg-border\" />;\n}\n\nconst Toolbar = ({\n editor,\n onRequestImageUpload,\n isUploadingImage,\n profile = \"default\",\n}: ToolbarProps): React.JSX.Element | null => {\n const [activePopover, setActivePopover] = useState<PopoverType>(null);\n const [wordCount, setWordCount] = useState(0);\n const popoverRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n if (!activePopover) return undefined;\n\n const handleClick = (event: MouseEvent) => {\n if (popoverRef.current && !popoverRef.current.contains(event.target as Node)) {\n setActivePopover(null);\n }\n };\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") setActivePopover(null);\n };\n\n document.addEventListener(\"mousedown\", handleClick);\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n document.removeEventListener(\"mousedown\", handleClick);\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [activePopover]);\n\n useEffect(() => {\n if (!editor) return undefined;\n const updateStats = () => {\n const text = editor.getText().trim();\n setWordCount(text ? text.split(/\\s+/).length : 0);\n };\n updateStats();\n editor.on(\"update\", updateStats);\n return () => {\n editor.off(\"update\", updateStats);\n };\n }, [editor]);\n\n if (!editor) return null;\n\n const availableHeadingOptions =\n profile === \"documentation\"\n ? [\n ...headingOptions,\n { label: \"Heading 4\", value: \"h4\", level: 4 as Level },\n { label: \"Heading 5\", value: \"h5\", level: 5 as Level },\n { label: \"Heading 6\", value: \"h6\", level: 6 as Level },\n ]\n : headingOptions;\n const activeHeading =\n availableHeadingOptions.find((option) =>\n option.level\n ? editor.isActive(\"heading\", { level: option.level })\n : editor.isActive(\"paragraph\"),\n ) ?? headingOptions[0];\n const readTime = wordCount === 0 ? 0 : Math.max(1, Math.ceil(wordCount / 200));\n\n const selectHeading = (level?: Level) => {\n const chain = editor.chain().focus();\n if (level) chain.setHeading({ level }).run();\n else chain.setParagraph().run();\n setActivePopover(null);\n };\n\n const insertTable = () => {\n editor.chain().focus().insertTable({ rows: 3, cols: 3, withHeaderRow: true }).run();\n setActivePopover(null);\n };\n\n return (\n <div className=\"relative w-full\">\n <div className=\"overflow-visible border-b border-border bg-card\">\n <div className=\"flex min-h-11 flex-wrap items-center gap-1 px-4 py-1\">\n <IconButton\n icon={Undo2}\n label=\"Undo\"\n disabled={!editor.can().undo()}\n onClick={() => editor.chain().focus().undo().run()}\n />\n <IconButton\n icon={Redo2}\n label=\"Redo\"\n disabled={!editor.can().redo()}\n onClick={() => editor.chain().focus().redo().run()}\n />\n <Divider />\n\n <div\n ref={activePopover === \"heading\" ? popoverRef : undefined}\n className=\"relative\"\n >\n <button\n type=\"button\"\n className=\"flex h-8 min-w-28 items-center justify-between gap-3 rounded border border-input bg-card px-3 text-sm font-medium hover:bg-muted\"\n aria-haspopup=\"menu\"\n aria-expanded={activePopover === \"heading\"}\n onClick={() =>\n setActivePopover((current) =>\n current === \"heading\" ? null : \"heading\",\n )\n }\n >\n {activeHeading.label}\n <ChevronDown className=\"size-4 text-muted-foreground\" />\n </button>\n {activePopover === \"heading\" && (\n <div className=\"te-popover absolute left-0 top-full z-30 mt-1 w-40 rounded-md p-1 shadow-lg\">\n {availableHeadingOptions.map((option) => (\n <button\n key={option.value}\n type=\"button\"\n role=\"menuitem\"\n className=\"flex w-full rounded px-2.5 py-2 text-left text-sm hover:bg-muted\"\n onClick={() => selectHeading(option.level)}\n >\n {option.label}\n </button>\n ))}\n </div>\n )}\n </div>\n <Divider />\n\n <IconButton\n icon={Bold}\n label=\"Bold\"\n active={editor.isActive(\"bold\")}\n onClick={() => editor.chain().focus().toggleBold().run()}\n />\n <IconButton\n icon={Italic}\n label=\"Italic\"\n active={editor.isActive(\"italic\")}\n onClick={() => editor.chain().focus().toggleItalic().run()}\n />\n {profile !== \"documentation\" && (\n <IconButton\n icon={Underline}\n label=\"Underline\"\n active={editor.isActive(\"underline\")}\n onClick={() => editor.chain().focus().toggleMark(\"underline\").run()}\n />\n )}\n <IconButton\n icon={Code}\n label=\"Inline code\"\n active={editor.isActive(\"code\")}\n onClick={() => editor.chain().focus().toggleCode().run()}\n />\n <IconButton\n icon={LinkIcon}\n label=\"Insert link\"\n active={editor.isActive(\"link\")}\n onClick={() =>\n setActivePopover((current) => (current === \"link\" ? null : \"link\"))\n }\n />\n <Divider />\n\n <IconButton\n icon={ListIcon}\n label=\"Bullet list\"\n active={editor.isActive(\"bulletList\")}\n onClick={() => editor.chain().focus().toggleBulletList().run()}\n />\n <IconButton\n icon={ListOrdered}\n label=\"Numbered list\"\n active={editor.isActive(\"orderedList\")}\n onClick={() => editor.chain().focus().toggleOrderedList().run()}\n />\n <IconButton\n icon={Quote}\n label=\"Blockquote\"\n active={editor.isActive(\"blockquote\")}\n onClick={() => editor.chain().focus().toggleBlockquote().run()}\n />\n <Divider />\n\n <div\n ref={activePopover === \"insert\" ? popoverRef : undefined}\n className=\"relative\"\n >\n <button\n type=\"button\"\n className=\"flex h-8 items-center gap-1.5 rounded border border-primary px-2.5 text-sm font-semibold text-primary hover:bg-[var(--primary-soft)]\"\n aria-haspopup=\"menu\"\n aria-expanded={activePopover === \"insert\"}\n onClick={() =>\n setActivePopover((current) => (current === \"insert\" ? null : \"insert\"))\n }\n >\n <Plus className=\"size-4\" />\n Insert\n </button>\n {activePopover === \"insert\" && (\n <div className=\"te-popover absolute right-0 top-full z-30 mt-1 w-52 rounded-md p-1 shadow-lg\">\n <button\n type=\"button\"\n className=\"flex w-full items-center gap-2 rounded px-2.5 py-2 text-sm hover:bg-muted\"\n onClick={() => {\n editor.chain().focus().setHorizontalRule().run();\n setActivePopover(null);\n }}\n >\n <Minus className=\"size-4\" />\n Horizontal rule\n </button>\n <button\n type=\"button\"\n className=\"flex w-full items-center gap-2 rounded px-2.5 py-2 text-sm hover:bg-muted\"\n onClick={() => {\n editor.chain().focus().toggleCodeBlock().run();\n setActivePopover(null);\n }}\n >\n <Code className=\"size-4\" />\n Code block\n </button>\n <button\n type=\"button\"\n className=\"flex w-full items-center gap-2 rounded px-2.5 py-2 text-sm hover:bg-muted disabled:opacity-50\"\n onClick={insertTable}\n disabled={\n !editor\n .can()\n .chain()\n .focus()\n .insertTable({\n rows: 3,\n cols: 3,\n withHeaderRow: true,\n })\n .run()\n }\n >\n <TableIcon className=\"size-4\" />\n Table\n </button>\n <button\n type=\"button\"\n className=\"flex w-full items-center gap-2 rounded px-2.5 py-2 text-sm hover:bg-muted disabled:opacity-50\"\n disabled={isUploadingImage}\n onClick={() => {\n onRequestImageUpload();\n setActivePopover(null);\n }}\n >\n <ImageIcon className=\"size-4\" />\n {isUploadingImage ? \"Uploading image…\" : \"Image\"}\n </button>\n\n {editor.isActive(\"table\") && (\n <>\n <div className=\"my-1 h-px bg-border\" />\n <button\n type=\"button\"\n className=\"flex w-full rounded px-2.5 py-2 text-sm hover:bg-muted\"\n onClick={() => {\n editor.chain().focus().addRowAfter().run();\n setActivePopover(null);\n }}\n >\n Add table row\n </button>\n <button\n type=\"button\"\n className=\"flex w-full rounded px-2.5 py-2 text-sm hover:bg-muted\"\n onClick={() => {\n editor.chain().focus().addColumnAfter().run();\n setActivePopover(null);\n }}\n >\n Add table column\n </button>\n <button\n type=\"button\"\n className=\"flex w-full items-center gap-2 rounded px-2.5 py-2 text-sm text-destructive hover:bg-destructive/10\"\n onClick={() => {\n editor.chain().focus().deleteTable().run();\n setActivePopover(null);\n }}\n >\n <Trash2 className=\"size-4\" />\n Remove table\n </button>\n </>\n )}\n </div>\n )}\n </div>\n\n <span className=\"ml-auto hidden pl-8 text-xs tabular-nums text-muted-foreground xl:inline\">\n {wordCount.toLocaleString()} {wordCount === 1 ? \"word\" : \"words\"}\n <span aria-hidden className=\"mx-2\">\n ·\n </span>\n {readTime} min\n </span>\n </div>\n </div>\n\n {activePopover === \"link\" && (\n <LinkEditorPopover\n editor={editor}\n onClose={() => setActivePopover(null)}\n containerRef={popoverRef}\n />\n )}\n </div>\n );\n};\n\nexport default Toolbar;\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { Editor } from \"@tiptap/core\";\nimport type { BubbleMenuPluginProps } from \"@tiptap/extension-bubble-menu\";\nimport { BubbleMenuPlugin } from \"@tiptap/extension-bubble-menu\";\nimport {\n Bold,\n Code,\n Italic,\n Link as LinkIcon,\n Strikethrough,\n Underline,\n} from \"lucide-react\";\nimport LinkEditorPopover from \"./components/link-editor-popover\";\n\ninterface BubbleMenuProps {\n editor: Editor;\n profile?: \"default\" | \"documentation\";\n}\n\nconst buttonBase =\n \"inline-flex h-8 w-8 items-center justify-center rounded text-foreground transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary\";\n\ntype TipTapBubbleMenuProps = {\n editor: Editor | null;\n className?: string;\n children: React.ReactNode;\n pluginKey?: string;\n} & Partial<Omit<BubbleMenuPluginProps, \"editor\" | \"element\" | \"pluginKey\">>;\n\nconst TipTapBubbleMenu = ({\n editor,\n className,\n children,\n pluginKey = \"inlineBubbleMenu\",\n updateDelay,\n resizeDelay,\n shouldShow,\n appendTo,\n getReferencedVirtualElement,\n options,\n}: TipTapBubbleMenuProps): React.JSX.Element => {\n const menuRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n const element = menuRef.current;\n\n if (!editor || editor.isDestroyed || !element) {\n return;\n }\n\n const plugin = BubbleMenuPlugin({\n editor,\n element,\n pluginKey,\n updateDelay,\n resizeDelay,\n shouldShow: shouldShow ?? null,\n appendTo,\n getReferencedVirtualElement,\n options,\n });\n\n editor.registerPlugin(plugin);\n\n return () => {\n editor.unregisterPlugin(pluginKey);\n };\n }, [\n editor,\n pluginKey,\n updateDelay,\n resizeDelay,\n shouldShow,\n appendTo,\n getReferencedVirtualElement,\n options,\n ]);\n\n return (\n <div ref={menuRef} className={className} style={{ visibility: \"hidden\" }}>\n {children}\n </div>\n );\n};\n\nfunction InlineButton({\n icon: Icon,\n label,\n active,\n onClick,\n}: {\n icon: React.ComponentType<{ className?: string }>;\n label: string;\n active?: boolean;\n onClick: () => void;\n}): React.JSX.Element {\n return (\n <button\n type=\"button\"\n aria-label={label}\n title={label}\n className={`${buttonBase} ${\n active\n ? \"bg-primary text-primary-foreground hover:bg-primary/90\"\n : \"bg-transparent hover:bg-muted\"\n }`}\n onClick={onClick}\n >\n <Icon className=\"h-4 w-4\" />\n </button>\n );\n}\n\nconst InlineBubbleMenu = ({\n editor,\n profile = \"default\",\n}: BubbleMenuProps): React.JSX.Element | null => {\n const [isLinkEditing, setIsLinkEditing] = useState(false);\n\n const openLinkEditor = useCallback(() => {\n setIsLinkEditing((prev) => !prev);\n }, []);\n\n useEffect(() => {\n const handleSelectionUpdate = () => {\n setIsLinkEditing(false);\n };\n\n editor.on(\"selectionUpdate\", handleSelectionUpdate);\n\n return () => {\n editor.off(\"selectionUpdate\", handleSelectionUpdate);\n };\n }, [editor]);\n\n if (!editor) {\n return null;\n }\n\n return (\n <TipTapBubbleMenu\n editor={editor}\n className=\"bubble-menu flex flex-col gap-1 rounded-md border border-border bg-popover p-2 text-popover-foreground shadow-xl\"\n >\n <div className=\"flex items-center gap-1\">\n <InlineButton\n icon={Bold}\n label=\"Bold\"\n active={editor.isActive(\"bold\")}\n onClick={() => editor.chain().focus().toggleBold().run()}\n />\n <InlineButton\n icon={Italic}\n label=\"Italic\"\n active={editor.isActive(\"italic\")}\n onClick={() => editor.chain().focus().toggleItalic().run()}\n />\n {profile !== \"documentation\" && (\n <InlineButton\n icon={Underline}\n label=\"Underline\"\n active={editor.isActive(\"underline\")}\n onClick={() => editor.chain().focus().toggleMark(\"underline\").run()}\n />\n )}\n <InlineButton\n icon={Strikethrough}\n label=\"Strikethrough\"\n active={editor.isActive(\"strike\")}\n onClick={() => editor.chain().focus().toggleStrike().run()}\n />\n <InlineButton\n icon={Code}\n label=\"Inline code\"\n active={editor.isActive(\"code\")}\n onClick={() => editor.chain().focus().toggleCode().run()}\n />\n <InlineButton\n icon={LinkIcon}\n label=\"Insert link\"\n active={editor.isActive(\"link\")}\n onClick={openLinkEditor}\n />\n </div>\n {isLinkEditing && (\n <LinkEditorPopover\n editor={editor}\n onClose={() => setIsLinkEditing(false)}\n variant=\"inline\"\n />\n )}\n </TipTapBubbleMenu>\n );\n};\n\nexport default InlineBubbleMenu;\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport { createContext, useContext, type ReactNode } from \"react\";\n\nexport type PickedImage = {\n src: string;\n alt?: string;\n};\n\nconst ImagePickerContext = createContext<(() => Promise<PickedImage | null>) | null>(\n null,\n);\n\nexport function ImagePickerContextProvider({\n pickImage,\n children,\n}: {\n pickImage: () => Promise<PickedImage | null>;\n children: ReactNode;\n}) {\n return (\n <ImagePickerContext.Provider value={pickImage}>\n {children}\n </ImagePickerContext.Provider>\n );\n}\n\nexport function useImagePicker() {\n return useContext(ImagePickerContext);\n}\n","/** DM-VALIDATE/DM-MEDIA: syntax safety; ownership/provider checks belong to the API. */\nexport function isSafeDocsUrl(value: unknown, image = false): value is string {\n if (typeof value !== \"string\" || !value || value !== value.trim()) return false;\n // Browsers ignore control characters in protocols. Reject their encoded forms too.\n if (\n // biome-ignore lint/suspicious/noControlCharactersInRegex: Browsers ignore controls in dangerous protocols.\n /[\\u0000-\\u0020\\u007f\\\\]/.test(value) ||\n /%(?:0[0-9a-f]|1[0-9a-f]|7f|5c)/i.test(value)\n )\n return false;\n if (value.startsWith(\"//\")) return false;\n const privatePath =\n /\\/(?:attachments|private|ticket-attachments|conversation-attachments)(?:\\/|$)/i;\n const signedKey =\n /^(?:x-amz-.+|x-goog-.+|signature|sig|token|access_token|expires)$/i;\n if (/^(?:https?:|mailto:)/i.test(value)) {\n try {\n const url = new URL(value);\n if (image && url.protocol !== \"https:\") return false;\n if (url.username || url.password) return false;\n if (url.protocol === \"mailto:\") return !image && Boolean(url.pathname);\n // Known private attachment paths and expiring signed links are never docs assets.\n if (privatePath.test(decodeURIComponent(url.pathname))) return false;\n for (const key of url.searchParams.keys()) {\n if (signedKey.test(key)) return false;\n }\n return Boolean(url.hostname);\n } catch {\n return false;\n }\n }\n if (image) return false;\n // Relative Markdown paths, site paths, fragments, and query links are safe data.\n if (/^[^/?#]*:/.test(value) || /%(?:2f|3a)/i.test(value)) return false;\n try {\n const url = new URL(value, \"https://docs.invalid/\");\n return (\n !privatePath.test(decodeURIComponent(url.pathname)) &&\n ![...url.searchParams.keys()].some((key) => signedKey.test(key))\n );\n } catch {\n return false;\n }\n}\n","import { getSchema, Node, type Extensions } from \"@tiptap/core\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport Image from \"@tiptap/extension-image\";\nimport Link from \"@tiptap/extension-link\";\nimport { Table, TableCell, TableHeader, TableRow } from \"@tiptap/extension-table\";\nimport { isSafeDocsUrl } from \"./urls\";\nimport type { Schema } from \"@tiptap/pm/model\";\n\n/** DM-VALIDATE: schema-only extensions; no React, upload controls, or node views. */\nexport function createDocsExtensions(): Extensions {\n return [\n StarterKit.configure({\n document: false,\n underline: false,\n link: false,\n dropcursor: false,\n gapcursor: false,\n trailingNode: false,\n }),\n Node.create({ name: \"doc\", topNode: true, content: \"block*\" }),\n Link.extend({\n addAttributes() {\n return { ...this.parent?.(), title: { default: null } };\n },\n }).configure({ openOnClick: false, isAllowedUri: (url) => isSafeDocsUrl(url) }),\n Image.configure({ allowBase64: false, resize: false }),\n Table.configure({ resizable: false }),\n TableRow,\n TableCell.extend({ content: \"paragraph\" }),\n TableHeader.extend({ content: \"paragraph\" }),\n ];\n}\n\nexport const docsSchema: Schema = getSchema(createDocsExtensions());\nexport const DOCS_SCHEMA_VERSION = 1;\n","\"use client\";\n\nimport React, {\n FC,\n PropsWithChildren,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { JSONContent } from \"@tiptap/core\";\nimport { generateText } from \"@tiptap/core\";\nimport { EditorContent, useEditor } from \"@tiptap/react\";\nimport emptyDoc from \"./empty-doc\";\nimport { createExtensions } from \"./extensions\";\nimport Toolbar from \"./toolbar\";\nimport BubbleMenu from \"./bubble-menu\";\nimport type { ReactEditorProps } from \"./types\";\nimport { cn } from \"./lib/cn\";\nimport { useImagePicker } from \"./image-picker\";\nimport { createDocsExtensions } from \"./docs/extensions\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport { isSafeDocsUrl } from \"./docs/urls\";\n\nexport interface EditorProps {\n profile?: \"default\" | \"documentation\";\n onChange: (json: JSONContent) => void;\n onFlushChangeReady?: (flush: () => void) => void;\n /** How long to wait after the last edit before calling `onChange`. Defaults to 1000. */\n debounceMs?: number;\n showToolbar?: boolean;\n editable?: boolean;\n refresh?: number;\n url?: string;\n initialContent?: ReactEditorProps[\"initialContent\"];\n placeholder?: string;\n autoFocus?: boolean;\n imageSizeLimit?: number;\n onError?: (...args: any[]) => void;\n className?: string;\n editorClassName?: string;\n contentClassName?: string;\n beforeContent?: React.ReactNode;\n}\n\ninterface EditorType extends FC<PropsWithChildren<EditorProps>> {\n getPlainText: (doc: JSONContent) => string;\n emptyDoc: JSONContent;\n}\n\nconst Editor: EditorType = Object.assign(\n ({\n initialContent,\n onChange,\n onFlushChangeReady,\n debounceMs = 1000,\n placeholder,\n children,\n showToolbar = true,\n editable = true,\n refresh,\n url,\n autoFocus,\n imageSizeLimit,\n onError,\n className,\n editorClassName,\n contentClassName,\n beforeContent,\n profile = \"default\" as EditorProps[\"profile\"],\n }) => {\n const [isUploading, setIsUploading] = useState(false);\n const fileInputRef = useRef<HTMLInputElement | null>(null);\n const pickImage = useImagePicker();\n const hasInteractedRef = useRef(false);\n const lastSerializedContentRef = useRef(JSON.stringify(initialContent ?? emptyDoc));\n const refreshRef = useRef<EditorProps[\"refresh\"]>(refresh);\n\n const extensions = useMemo(\n () =>\n profile === \"documentation\"\n ? [\n ...createDocsExtensions(),\n Placeholder.configure({ placeholder: placeholder || \"Write something…\" }),\n ]\n : createExtensions({ placeholder }),\n [placeholder, profile],\n );\n\n const changeTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const pendingJsonRef = useRef<JSONContent | null>(null);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const debounceMsRef = useRef(debounceMs);\n debounceMsRef.current = debounceMs;\n\n const editor = useEditor(\n {\n immediatelyRender: false,\n extensions,\n content: initialContent ?? emptyDoc,\n autofocus: autoFocus ? \"end\" : false,\n editable,\n editorProps: {\n attributes: {\n class: `tiptap-content ${editorClassName ?? \"\"}`,\n \"data-placeholder\": placeholder ?? \"\",\n },\n },\n onUpdate: ({ editor: instance }) => {\n // TipTap may normalize loaded JSON during initialization\n // (notably `{ type: \"doc\", content: [] }` to\n // `{ type: \"doc\" }`). Do not turn that internal mount work\n // into a user-visible autosave.\n if (!hasInteractedRef.current) {\n return;\n }\n if (changeTimeoutRef.current) {\n clearTimeout(changeTimeoutRef.current);\n }\n\n pendingJsonRef.current = instance.getJSON();\n changeTimeoutRef.current = setTimeout(() => {\n changeTimeoutRef.current = null;\n const json = pendingJsonRef.current;\n pendingJsonRef.current = null;\n if (json) onChangeRef.current(json);\n }, debounceMsRef.current);\n },\n onSelectionUpdate: ({ editor: instance }) => {\n hasInteractedRef.current = true;\n },\n },\n [extensions],\n );\n useEffect(() => {\n onFlushChangeReady?.(() => {\n if (!editor || !changeTimeoutRef.current) return;\n clearTimeout(changeTimeoutRef.current);\n changeTimeoutRef.current = null;\n pendingJsonRef.current = null;\n onChangeRef.current(editor.getJSON());\n });\n return () => onFlushChangeReady?.(() => {});\n }, [editor, onFlushChangeReady]);\n useEffect(() => {\n // Deliver an edit that is still waiting on the debounce instead of\n // dropping it, e.g. when the panel hosting the editor is closed.\n return () => {\n if (changeTimeoutRef.current) {\n clearTimeout(changeTimeoutRef.current);\n changeTimeoutRef.current = null;\n }\n const json = pendingJsonRef.current;\n pendingJsonRef.current = null;\n if (json) onChangeRef.current(json);\n };\n }, []);\n\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n editor.setEditable(editable);\n }, [editor, editable]);\n\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n const nextContent = initialContent ?? emptyDoc;\n const nextSerialized = JSON.stringify(nextContent);\n const refreshChanged = refreshRef.current !== refresh;\n\n if (refreshChanged) {\n refreshRef.current = refresh;\n hasInteractedRef.current = false;\n lastSerializedContentRef.current = nextSerialized;\n editor.commands.setContent(nextContent, {\n emitUpdate: false,\n });\n return;\n }\n\n if (!hasInteractedRef.current) {\n if (lastSerializedContentRef.current !== nextSerialized) {\n lastSerializedContentRef.current = nextSerialized;\n editor.commands.setContent(nextContent, {\n emitUpdate: false,\n });\n }\n return;\n }\n\n lastSerializedContentRef.current = nextSerialized;\n }, [editor, initialContent, refresh]);\n\n const handleImageUpload = useCallback(\n async (file: File) => {\n if (profile === \"documentation\") {\n onError?.(\n \"Upload a public image using the media library before inserting it.\",\n );\n return;\n }\n const sizeLimit = imageSizeLimit ?? 2097152; // 2 MB\n if (file.size > sizeLimit) {\n onError?.(\"File is larger than the allowed size\");\n return;\n }\n\n try {\n setIsUploading(true);\n // First-draft implementation: embed the image as a data URL so\n // the editor works without a media/upload backend.\n const dataUrl = await new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = reject;\n reader.readAsDataURL(file);\n });\n editor\n ?.chain()\n .focus()\n .setImage({\n src: dataUrl,\n alt: file.name,\n title: file.name,\n })\n .run();\n } catch (error) {\n console.error(\"Image upload failed\", error);\n } finally {\n setIsUploading(false);\n }\n },\n [editor, profile, onError, imageSizeLimit],\n );\n\n const handleSelectFile = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const files = event.target.files;\n if (!files || files.length === 0) {\n return;\n }\n\n const file = files[0];\n void handleImageUpload(file);\n event.target.value = \"\";\n },\n [handleImageUpload],\n );\n\n const insertPickedImage = useCallback(\n (image: { src: string; alt?: string }) => {\n if (profile === \"documentation\" && !isSafeDocsUrl(image.src, true)) {\n onError?.(\"Documentation images require a stable public HTTPS URL.\");\n return;\n }\n editor\n ?.chain()\n .focus()\n .setImage({\n src: image.src,\n alt: image.alt,\n title: image.alt,\n })\n .run();\n },\n [editor, profile, onError],\n );\n\n const openFileDialog = useCallback(() => {\n if (pickImage) {\n void pickImage().then((image) => {\n if (image) insertPickedImage(image);\n });\n return;\n }\n fileInputRef.current?.click();\n }, [insertPickedImage, pickImage]);\n\n if (typeof window === \"undefined\") {\n return <></>;\n }\n\n return (\n <div\n className={cn(\"tiptap-editor flex flex-col gap-4 border\", className)}\n onPointerDownCapture={() => {\n hasInteractedRef.current = true;\n }}\n onKeyDownCapture={() => {\n hasInteractedRef.current = true;\n }}\n >\n {editable && showToolbar && (\n <div\n className=\"sticky top-0 bg-background\"\n style={{\n zIndex: 1,\n }}\n >\n <Toolbar\n editor={editor}\n onRequestImageUpload={openFileDialog}\n isUploadingImage={isUploading}\n profile={profile}\n />\n </div>\n )}\n <div className=\"flex w-full justify-center\">\n <div className={cn(\"flex w-full max-w-3xl flex-col\", contentClassName)}>\n {beforeContent}\n <EditorContent\n editor={editor}\n className={`${editorClassName ?? \"\"} ${editorClassName?.includes(\"min-h-\") ? \"\" : \"min-h-[200px]\"}`}\n />\n {pickImage ? null : (\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/*\"\n className=\"hidden\"\n onChange={handleSelectFile}\n />\n )}\n {children}\n {editor && <BubbleMenu editor={editor} profile={profile} />}\n </div>\n </div>\n </div>\n );\n },\n {\n getPlainText: (doc: JSONContent) =>\n generateText(doc || emptyDoc, createExtensions()),\n emptyDoc,\n },\n) as EditorType;\n\nexport default Editor;\n","import type { JSONContent } from \"@tiptap/core\";\nimport { createId } from \"./create-id\";\n\ninterface Heading {\n level: number;\n text: string;\n id: string;\n}\n\nexport function extractHeadings(json: JSONContent | null | undefined): Heading[] {\n const headings: Heading[] = [];\n\n const collectHeadings = (node?: JSONContent) => {\n if (!node) {\n return;\n }\n\n if (node.type === \"heading\") {\n const level = typeof node.attrs?.level === \"number\" ? node.attrs.level : 1;\n\n const collectText = (current?: JSONContent): string => {\n if (!current) {\n return \"\";\n }\n\n if (typeof current.text === \"string\") {\n return current.text;\n }\n\n if (!current.content) {\n return \"\";\n }\n\n return current.content.map(collectText).join(\"\");\n };\n\n const textContent = collectText(node);\n\n headings.push({\n level,\n text: textContent,\n id: createId(textContent),\n });\n }\n\n if (Array.isArray(node.content)) {\n node.content.forEach((child) => {\n collectHeadings(child as JSONContent);\n });\n }\n };\n\n collectHeadings(json || undefined);\n\n return headings;\n}\n","export function extractTextFromNode(node): string {\n if (!node) {\n return \"\";\n }\n\n // ProseMirror nodes have a textContent property that contains all text\n if (typeof node.textContent === \"string\") {\n return node.textContent;\n }\n\n // Fallback: if content is a Fragment, access its content array\n if (node.content && node.content.content && Array.isArray(node.content.content)) {\n return node.content.content\n .map((child: any) => {\n // Text nodes have a text property\n if (child.text) {\n return child.text;\n }\n // Recursively extract from child nodes\n return extractTextFromNode(child);\n })\n .join(\"\");\n }\n\n // Fallback: if content is directly an array\n if (Array.isArray(node.content)) {\n return node.content\n .map((child: any) => {\n if (child.text) {\n return child.text;\n }\n return extractTextFromNode(child);\n })\n .join(\"\");\n }\n\n return \"\";\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { Check, Copy } from \"lucide-react\";\n\nasync function writeClipboard(text: string): Promise<void> {\n if (navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(text);\n return;\n }\n const area = document.createElement(\"textarea\");\n area.value = text;\n area.setAttribute(\"readonly\", \"\");\n area.style.position = \"fixed\";\n area.style.left = \"-9999px\";\n document.body.appendChild(area);\n area.select();\n document.execCommand(\"copy\");\n area.remove();\n}\n\n/** The copy button of a rendered code block; the only client part of it. */\nexport function CopyCodeButton({ source }: { source: string }) {\n const [copied, setCopied] = useState(false);\n\n useEffect(() => {\n if (!copied) return;\n const timer = window.setTimeout(() => setCopied(false), 1500);\n return () => window.clearTimeout(timer);\n }, [copied]);\n\n async function handleCopy() {\n if (!source) return;\n try {\n await writeClipboard(source);\n setCopied(true);\n } catch {\n setCopied(false);\n }\n }\n\n return (\n <button\n type=\"button\"\n className=\"te-code-copy\"\n aria-label={copied ? \"Copied\" : \"Copy code\"}\n title={copied ? \"Copied\" : \"Copy\"}\n onClick={() => {\n void handleCopy();\n }}\n >\n {copied ? (\n <Check className=\"te-code-copy__icon\" aria-hidden />\n ) : (\n <Copy className=\"te-code-copy__icon\" aria-hidden />\n )}\n </button>\n );\n}\n","import React from \"react\";\nimport { extractTextFromNode } from \"../extract-text-from-node\";\nimport { CopyCodeButton } from \"./copy-code-button\";\n\nfunction textFromChildren(node: React.ReactNode): string {\n if (node == null || typeof node === \"boolean\") return \"\";\n if (typeof node === \"string\" || typeof node === \"number\") {\n return String(node);\n }\n if (Array.isArray(node)) return node.map(textFromChildren).join(\"\");\n if (React.isValidElement<{ children?: React.ReactNode }>(node)) {\n return textFromChildren(node.props.children);\n }\n return \"\";\n}\n\nexport function RenderedCodeBlock({\n node,\n children,\n language,\n}: {\n node?: { textContent?: string; content?: unknown };\n children?: React.ReactNode;\n language?: string;\n}): React.JSX.Element {\n const source = extractTextFromNode(node) || textFromChildren(children);\n\n return (\n <div className=\"te-code-block\">\n <pre>\n <code className={language ? `language-${language}` : undefined}>\n {children}\n </code>\n </pre>\n <CopyCodeButton source={source} />\n </div>\n );\n}\n","export const DOCS_HEADING_POLICY_VERSION = 1;\n\nexport interface HeadingNode {\n type?: string;\n text?: string;\n attrs?: Record<string, unknown>;\n content?: HeadingNode[];\n}\n\nexport function docsNodeText(node: HeadingNode): string {\n if (typeof node.text === \"string\") return node.text;\n if (node.type === \"hardBreak\") return \"\\n\";\n return (node.content ?? []).map(docsNodeText).join(\"\");\n}\n\n/** DM-CONVERT: deterministic Unicode anchors, including duplicate-base collisions. */\nexport function createHeadingIdGenerator(): (text: string) => string {\n const used = new Set<string>();\n return (text) => {\n const base =\n text\n .normalize(\"NFKC\")\n .toLowerCase()\n .trim()\n .replace(/[^\\p{L}\\p{N}\\s_-]/gu, \"\")\n .replace(/\\s+/g, \"-\") || \"section\";\n let id = base;\n let suffix = 2;\n while (used.has(id)) id = `${base}-${suffix++}`;\n used.add(id);\n return id;\n };\n}\n\nexport function extractDocsHeadings(json: HeadingNode | null | undefined) {\n const nextId = createHeadingIdGenerator();\n const headings: { level: number; text: string; id: string }[] = [];\n function walk(node: HeadingNode) {\n if (node.type === \"heading\") {\n const text = docsNodeText(node);\n headings.push({ level: Number(node.attrs?.level ?? 1), text, id: nextId(text) });\n }\n for (const child of node.content ?? []) walk(child);\n }\n if (json) walk(json);\n return headings;\n}\n","import React from \"react\";\nimport { renderToReactElement } from \"@tiptap/static-renderer\";\nimport { getSchema } from \"@tiptap/core\";\nimport type { Node as ProseMirrorNode } from \"@tiptap/pm/model\";\nimport { extractTextFromNode } from \"./extract-text-from-node\";\nimport emptyDoc from \"./empty-doc\";\nimport { createExtensions } from \"./extensions\";\nimport { createId } from \"./create-id\";\nimport type { TextEditorContent } from \"./text-editor-content\";\nimport type { TextRendererTheme } from \"./renderer-theme\";\nimport { cn } from \"./lib/cn\";\nimport { RenderedCodeBlock } from \"./components/rendered-code-block\";\nimport { extractDocsHeadings } from \"./docs/headings\";\n\ninterface TextRendererProps {\n profile?: \"default\" | \"documentation\";\n json: TextEditorContent;\n className?: string;\n theme?: TextRendererTheme;\n}\n\nconst typographyClasses = (typography?: {\n fontFamily?: string;\n fontSize?: string;\n fontWeight?: string;\n lineHeight?: string;\n letterSpacing?: string;\n textTransform?: string;\n textDecoration?: string;\n textOverflow?: string;\n}) => [\n typography?.fontFamily,\n typography?.fontSize,\n typography?.fontWeight,\n typography?.lineHeight,\n typography?.letterSpacing,\n typography?.textTransform,\n typography?.textDecoration,\n typography?.textOverflow,\n];\n\nfunction removeEmptyTextNodes(node: any): any {\n if (!node || typeof node !== \"object\") {\n return node;\n }\n\n if (node.type === \"text\" && node.text === \"\") {\n return undefined;\n }\n\n if (!Array.isArray(node.content)) {\n return node;\n }\n\n const content = node.content\n .map(removeEmptyTextNodes)\n .filter((child: any) => child !== undefined);\n\n return {\n ...node,\n content,\n };\n}\n\n/**\n * Renders TipTap `TextEditorContent` JSON as static React elements — used to\n * display rich text saved by the `Editor` (e.g. inside a block's body). When\n * a `theme` is provided, headings/paragraphs/links pick up its typography;\n * otherwise plain semantic HTML tags are used.\n */\nexport function TextRenderer({\n json,\n className,\n theme,\n profile = \"default\",\n}: TextRendererProps) {\n const extensions = createExtensions();\n const content = removeEmptyTextNodes(\n (json as any) ?? (emptyDoc as any),\n ) as TextEditorContent;\n const docsHeadings = profile === \"documentation\" ? extractDocsHeadings(content) : [];\n // React can replay each mapped node (StrictMode, hydration, or a retry).\n // Bind IDs before rendering instead of consuming an iterator in a component.\n const renderContent =\n profile === \"documentation\" ? getSchema(extensions).nodeFromJSON(content) : content;\n const headingIds = new WeakMap<ProseMirrorNode, string>();\n if (profile === \"documentation\") {\n let headingIndex = 0;\n (renderContent as ProseMirrorNode).descendants((node) => {\n if (node.type.name === \"heading\") {\n headingIds.set(node, docsHeadings[headingIndex++].id);\n }\n });\n }\n\n const rendered = renderToReactElement({\n extensions,\n content: renderContent,\n options: {\n nodeMapping: {\n paragraph: ({ children }) => {\n const classes = cn(\n \"text-base\",\n ...typographyClasses(theme?.typography?.text1),\n );\n return <p className={classes}>{children}</p>;\n },\n hardBreak: () => <br />,\n heading: ({ node, children }) => {\n const level = node?.attrs?.level ?? 1;\n // Extract text from the node structure (same as extractHeadings does)\n const textContent = extractTextFromNode(node);\n const id =\n profile === \"documentation\" ? headingIds.get(node) : createId(textContent);\n\n if (!theme) {\n const Tag = `h${level}` as React.ElementType;\n return <Tag id={id}>{children}</Tag>;\n }\n\n if (level === 1) {\n const classes = cn(\n \"scroll-m-20 text-4xl font-bold tracking-tight\",\n ...typographyClasses(theme?.typography?.header1),\n );\n return (\n <h1 id={id} className={classes}>\n {children}\n </h1>\n );\n }\n if (level === 2) {\n const classes = cn(\n \"scroll-m-20 text-3xl font-bold tracking-tight\",\n ...typographyClasses(theme?.typography?.header2),\n );\n return (\n <h2 id={id} className={classes}>\n {children}\n </h2>\n );\n }\n const classes = cn(\n \"scroll-m-20 text-2xl font-semibold tracking-normal\",\n ...typographyClasses(\n profile === \"documentation\" && level >= 4\n ? (theme?.typography?.header4 ?? theme?.typography?.header3)\n : theme?.typography?.header3,\n ),\n );\n const Tag = (\n profile === \"documentation\" ? `h${level}` : \"h3\"\n ) as React.ElementType;\n return (\n <Tag id={id} className={classes}>\n {children}\n </Tag>\n );\n },\n codeBlock: ({ node, children }) => (\n <RenderedCodeBlock node={node} language={node?.attrs?.language}>\n {children}\n </RenderedCodeBlock>\n ),\n codeMirror: ({ node, children }) => (\n <RenderedCodeBlock node={node}>{children}</RenderedCodeBlock>\n ),\n },\n markMapping: {\n link: ({ mark, children }) => {\n const href = mark?.attrs?.href;\n const linkStyle = theme?.interactives?.link;\n const classes = cn(\n \"font-medium cursor-pointer\",\n ...typographyClasses(theme?.typography?.link),\n linkStyle?.padding?.x,\n linkStyle?.padding?.y,\n linkStyle?.border?.width,\n linkStyle?.border?.radius,\n linkStyle?.border?.style,\n linkStyle?.custom,\n );\n return (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={classes}\n style={{\n textShadow: linkStyle?.textShadow || undefined,\n }}\n >\n {children}\n </a>\n );\n },\n highlight: ({ children }) => (\n <mark className=\"bg-accent text-accent-foreground\">{children}</mark>\n ),\n },\n },\n });\n\n const combinedClassName = [\"tiptap-renderer\", className].filter(Boolean).join(\" \");\n\n return (\n <div className=\"text-editor flex flex-col gap-4\">\n <div className={combinedClassName}>{rendered}</div>\n </div>\n );\n}\n\nexport default TextRenderer;\n","import type { TextEditorContent } from \"./text-editor-content\";\n\nfunction createParagraphNode(text: string) {\n const lines = text.split(\"\\n\");\n const content: Record<string, unknown>[] = [];\n\n lines.forEach((line, index) => {\n if (line) {\n content.push({\n type: \"text\",\n text: line,\n });\n }\n\n if (index < lines.length - 1) {\n content.push({\n type: \"hardBreak\",\n });\n }\n });\n\n return {\n type: \"paragraph\",\n ...(content.length ? { content } : {}),\n };\n}\n\n/** Normalizes a plain string or an already-valid TipTap doc into `TextEditorContent`. */\nexport function normalizeTextEditorContent(\n json: TextEditorContent | string,\n): TextEditorContent {\n if (json && typeof json === \"object\" && \"type\" in json && json.type === \"doc\") {\n return json as TextEditorContent;\n }\n\n const text = typeof json === \"string\" ? json.replace(/\\r\\n?/g, \"\\n\") : \"\";\n\n return {\n type: \"doc\",\n content: text\n ? text.split(/\\n{2,}/).map((paragraph) => createParagraphNode(paragraph))\n : [],\n };\n}\n","/** Recursively concatenates all plain text out of a TipTap JSON content tree. */\nexport function extractTextFromTextEditorContent(content: unknown): string {\n if (typeof content === \"string\") {\n return content;\n }\n\n if (!content || typeof content !== \"object\") {\n return \"\";\n }\n\n const record = content as Record<string, unknown>;\n const ownText = typeof record.text === \"string\" ? record.text : \"\";\n const children = Array.isArray(record.content)\n ? record.content.map(extractTextFromTextEditorContent).join(\"\")\n : \"\";\n\n return `${ownText}${children}`;\n}\n","import type { TextEditorContent } from \"./text-editor-content\";\n\nfunction appendEllipsisToLastTextNode(nodes: any[]): any[] {\n for (let i = nodes.length - 1; i >= 0; i--) {\n const node = nodes[i];\n\n if (!node) {\n continue;\n }\n\n if (node.type === \"text\" && typeof node.text === \"string\") {\n if (!node.text.endsWith(\"...\")) {\n nodes[i] = {\n ...node,\n text: `${node.text.trimEnd()}...`,\n };\n }\n return nodes;\n }\n\n if (Array.isArray(node.content) && node.content.length) {\n nodes[i] = {\n ...node,\n content: appendEllipsisToLastTextNode([...node.content]),\n };\n return nodes;\n }\n }\n\n return nodes;\n}\n\nfunction truncateNodes(\n nodes: any[],\n remaining: number,\n): {\n nodes: any[];\n remaining: number;\n truncated: boolean;\n} {\n const truncatedNodes: any[] = [];\n let truncated = false;\n\n for (let index = 0; index < nodes.length; index++) {\n const node = nodes[index];\n\n if (!node) {\n continue;\n }\n\n if (remaining <= 0) {\n truncated = true;\n break;\n }\n\n if (node.type === \"text\" && typeof node.text === \"string\") {\n if (node.text.length <= remaining) {\n truncatedNodes.push(node);\n remaining -= node.text.length;\n } else {\n truncatedNodes.push({\n ...node,\n text: node.text.slice(0, remaining).trimEnd(),\n });\n remaining = 0;\n truncated = true;\n break;\n }\n\n continue;\n }\n\n if (node.type === \"hardBreak\") {\n truncatedNodes.push(node);\n remaining -= 1;\n continue;\n }\n\n if (Array.isArray(node.content)) {\n const result = truncateNodes(node.content, remaining);\n remaining = result.remaining;\n\n if (result.nodes.length > 0) {\n truncatedNodes.push({\n ...node,\n content: result.nodes,\n });\n }\n\n if (result.truncated) {\n truncated = true;\n break;\n }\n\n continue;\n }\n\n truncatedNodes.push(node);\n }\n\n if (truncated) {\n return {\n nodes: appendEllipsisToLastTextNode(truncatedNodes),\n remaining,\n truncated,\n };\n }\n\n return {\n nodes: truncatedNodes,\n remaining,\n truncated,\n };\n}\n\nexport function truncateTextEditorContent(\n json: TextEditorContent,\n characterLimit?: number,\n): TextEditorContent {\n if (!characterLimit || characterLimit <= 0) {\n return json;\n }\n\n const content = Array.isArray((json as any)?.content) ? (json as any).content : [];\n const result = truncateNodes(content, characterLimit);\n\n return {\n ...(json as any),\n content: result.nodes,\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/empty-doc.ts","../src/create-id.ts","../src/components/custom-code-mirror.tsx","../src/docs/blocks.ts","../src/extensions.ts","../src/components/link-editor-popover.tsx","../src/components/docs-block-views.tsx","../src/toolbar.tsx","../src/bubble-menu.tsx","../src/lib/cn.ts","../src/image-picker.tsx","../src/docs/urls.ts","../src/docs/extensions.ts","../src/editor.tsx","../src/extract-headings.ts","../src/extract-text-from-node.ts","../src/components/copy-code-button.tsx","../src/components/rendered-code-block.tsx","../src/docs/headings.ts","../src/components/docs-tabs.tsx","../src/components/docs-blocks.tsx","../src/text-renderer.tsx","../src/normalize-text-editor-content.ts","../src/extract-text-from-text-editor-content.ts","../src/truncate-text-editor-content.ts"],"names":["Node","Gapcursor","jsxs","jsx","Fragment","Trash2","X","TiptapNode","useState","useRef","useEffect","Code","LinkIcon","ListIcon","Plus","TableIcon","ImageIcon","block","Bold","Italic","Underline","StarterKit","Link","Image","Table","TableRow","TableCell","TableHeader","Placeholder","json","useCallback","Check","React","getSchema","Tag","classes","paragraph"],"mappings":"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","file":"index.js","sourcesContent":["import type { TextEditorContent } from \"./text-editor-content\";\n\nconst emptyDoc: TextEditorContent = {\n type: \"doc\",\n content: [],\n};\n\nexport default emptyDoc;\n","export function createId(textContent: string) {\n return textContent.replace(/\\s/g, \"-\").toLowerCase();\n}\n","// This is only to maintain backward compatibility for codeMirror node type\n\nimport { Node } from \"@tiptap/core\";\n\nexport const CodeMirrorNode = Node.create({\n name: \"codeMirror\",\n content: \"block+\",\n code: true,\n\n addOptions() {\n return {\n HTMLAttributes: {},\n };\n },\n\n parseHTML() {\n return [\n {\n tag: \"pre\",\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n return [\"pre\", HTMLAttributes, 0];\n },\n});\n","import { Extension, Node, type Extensions } from \"@tiptap/core\";\nimport Code from \"@tiptap/extension-code\";\n\n/**\n * Rich documentation blocks (Callout, Tabs, Steps, Cards, Accordion, Code\n * group, Type table). Schema-only: no React, so the server-side docs profile\n * and the browser editor share them. Markdown form is MDX-style JSX with\n * literal props; see `markdown.ts`.\n */\nexport const CALLOUT_TYPES = [\"note\", \"tip\", \"info\", \"warning\", \"danger\"] as const;\nexport type CalloutType = (typeof CALLOUT_TYPES)[number];\n\nexport interface TypeTableRow {\n name: string;\n type: string;\n default: string | null;\n description: string | null;\n required: boolean;\n}\n\nfunction attr(name: string, fallback: unknown = null) {\n return {\n [name]: {\n default: fallback,\n parseHTML: (element: HTMLElement) => {\n const value = element.getAttribute(`data-${name}`);\n if (value === null) return fallback;\n try {\n return JSON.parse(value);\n } catch {\n return fallback;\n }\n },\n renderHTML: (attributes: Record<string, unknown>) =>\n attributes[name] === null || attributes[name] === undefined\n ? {}\n : { [`data-${name}`]: JSON.stringify(attributes[name]) },\n },\n };\n}\n\nfunction block(\n name: string,\n spec: {\n content?: string;\n group?: string;\n attrs?: Record<string, unknown>;\n atom?: boolean;\n },\n) {\n const tag = `div[data-docs-block=\"${name}\"]`;\n return Node.create({\n name,\n group: spec.group,\n content: spec.content,\n atom: spec.atom,\n defining: true,\n isolating: true,\n addAttributes() {\n return Object.assign(\n {},\n ...Object.entries(spec.attrs ?? {}).map(([key, value]) => attr(key, value)),\n );\n },\n parseHTML() {\n return [{ tag }];\n },\n renderHTML({ HTMLAttributes }) {\n return spec.atom\n ? [\"div\", { ...HTMLAttributes, \"data-docs-block\": name }]\n : [\"div\", { ...HTMLAttributes, \"data-docs-block\": name }, 0];\n },\n });\n}\n\n/** Inline code may sit inside links, bold, italic and strike (e.g. a linked `useUpload`). */\nexport const DocsCode = Code.extend({ excludes: \"\" });\n\nexport function createDocsBlockExtensions(): Extensions {\n return [\n DocsCode,\n block(\"callout\", {\n group: \"block\",\n content: \"block+\",\n attrs: { type: null, title: null },\n }),\n block(\"tabs\", { group: \"block\", content: \"tab+\" }),\n block(\"tab\", { content: \"block+\", attrs: { label: \"\" } }),\n block(\"steps\", { group: \"block\", content: \"step+\" }),\n block(\"step\", { content: \"block+\" }),\n block(\"cards\", { group: \"block\", content: \"card+\" }),\n block(\"card\", {\n content: \"block*\",\n attrs: { title: \"\", href: null, icon: null },\n }),\n block(\"accordions\", {\n group: \"block\",\n content: \"accordion+\",\n attrs: { type: null },\n }),\n block(\"accordion\", { content: \"block+\", attrs: { title: \"\" } }),\n block(\"codeGroup\", { group: \"block\", content: \"codeBlock+\" }),\n block(\"typeTable\", { group: \"block\", atom: true, attrs: { rows: [] } }),\n ];\n}\n\n/** Node names owned by this module, in Markdown component order. */\nexport const DOCS_BLOCK_COMPONENTS = {\n Callout: \"callout\",\n Tabs: \"tabs\",\n Tab: \"tab\",\n Steps: \"steps\",\n Step: \"step\",\n Cards: \"cards\",\n Card: \"card\",\n Accordions: \"accordions\",\n Accordion: \"accordion\",\n CodeGroup: \"codeGroup\",\n TypeTable: \"typeTable\",\n} as const;\n\n/** Code fence `title=\"…\"` metadata, shown as the block's file name or tab label. */\nexport const CodeBlockTitle = Extension.create({\n name: \"codeBlockTitle\",\n addGlobalAttributes() {\n return [\n {\n types: [\"codeBlock\"],\n attributes: {\n title: {\n default: null,\n parseHTML: (element) => element.getAttribute(\"data-title\"),\n renderHTML: (attributes) =>\n attributes.title ? { \"data-title\": attributes.title } : {},\n },\n },\n },\n ];\n },\n});\n","import StarterKit from \"@tiptap/starter-kit\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport Link from \"@tiptap/extension-link\";\nimport { Table, TableCell, TableHeader, TableRow } from \"@tiptap/extension-table\";\nimport Image from \"@tiptap/extension-image\";\nimport Dropcursor from \"@tiptap/extension-dropcursor\";\nimport Gapcursor from \"@tiptap/extension-gapcursor\";\nimport CodeBlockLowlight from \"@tiptap/extension-code-block-lowlight\";\nimport Heading from \"@tiptap/extension-heading\";\nimport Highlight from \"@tiptap/extension-highlight\";\nimport { lowlight } from \"lowlight\";\nimport javascript from \"highlight.js/lib/languages/javascript\";\nimport typescript from \"highlight.js/lib/languages/typescript\";\nimport json from \"highlight.js/lib/languages/json\";\nimport css from \"highlight.js/lib/languages/css\";\nimport xml from \"highlight.js/lib/languages/xml\";\nimport type { Extensions } from \"@tiptap/core\";\nimport { createId } from \"./create-id\";\nimport { CodeMirrorNode } from \"./components/custom-code-mirror\";\nimport { CodeBlockTitle, createDocsBlockExtensions } from \"./docs/blocks\";\n\nlowlight.registerLanguage(\"javascript\", javascript);\nlowlight.registerLanguage(\"typescript\", typescript);\nlowlight.registerLanguage(\"json\", json);\nlowlight.registerLanguage(\"css\", css);\nlowlight.registerLanguage(\"html\", xml);\n\ninterface ExtensionOptions {\n placeholder?: string;\n}\n\nexport const createExtensions = ({\n placeholder,\n}: ExtensionOptions = {}): Extensions => [\n StarterKit.configure({\n code: false,\n codeBlock: false,\n // Configured/replaced explicitly below (custom options or a\n // `.extend()`) — disabled here to avoid tiptap's duplicate-extension\n // warning and constructing throwaway instances of each.\n link: false,\n dropcursor: false,\n gapcursor: false,\n heading: false,\n }),\n Placeholder.configure({\n placeholder: placeholder || \"Write something…\",\n }),\n Link.configure({\n openOnClick: false,\n autolink: true,\n linkOnPaste: true,\n }),\n Table.configure({\n resizable: true,\n }),\n TableRow,\n TableHeader,\n TableCell,\n Image.configure({\n // We embed uploaded images as data URLs (no backend/media library in\n // this package), so base64 sources must be allowed.\n allowBase64: true,\n HTMLAttributes: {\n class: \"max-w-full h-auto rounded-md\",\n },\n resize: {\n enabled: true,\n directions: [\"top\", \"bottom\", \"left\", \"right\"],\n alwaysPreserveAspectRatio: true,\n },\n }),\n Dropcursor.configure({\n color: \"hsl(var(--foreground))\",\n width: 2,\n }),\n Gapcursor,\n CodeBlockLowlight.configure({\n lowlight,\n }),\n Heading.extend({\n renderHTML({ node, HTMLAttributes }) {\n const level = this.options.levels.includes(node.attrs.level)\n ? node.attrs.level\n : this.options.levels[0];\n const id =\n typeof node.textContent === \"string\" ? createId(node.textContent) : undefined;\n\n return [\n `h${level}`,\n {\n ...HTMLAttributes,\n id,\n },\n 0,\n ];\n },\n }),\n Highlight,\n CodeMirrorNode,\n CodeBlockTitle,\n ...createDocsBlockExtensions(),\n];\n","\"use client\";\n\nimport React, { useEffect, useRef, useState } from \"react\";\nimport type { Editor } from \"@tiptap/react\";\nimport { Check, Trash2, X } from \"lucide-react\";\n\ninterface LinkEditorPopoverProps {\n editor: Editor;\n onClose: () => void;\n variant?: \"panel\" | \"inline\";\n containerRef?: React.MutableRefObject<HTMLDivElement | null>;\n}\n\nconst LinkEditorPopover = ({\n editor,\n onClose,\n variant = \"panel\",\n containerRef,\n}: LinkEditorPopoverProps): React.JSX.Element => {\n const [linkValue, setLinkValue] = useState(\"\");\n const inputRef = useRef<HTMLInputElement | null>(null);\n const localContainerRef = useRef<HTMLDivElement | null>(null);\n\n const assignContainerRef = (node: HTMLDivElement | null) => {\n localContainerRef.current = node;\n if (containerRef) {\n containerRef.current = node;\n }\n };\n\n useEffect(() => {\n const current = editor.getAttributes(\"link\").href as string | undefined;\n setLinkValue(current ?? \"\");\n }, [editor]);\n\n useEffect(() => {\n const timer = window.setTimeout(() => {\n inputRef.current?.focus();\n }, 20);\n\n return () => window.clearTimeout(timer);\n }, []);\n\n const applyLink = () => {\n const value = linkValue.trim();\n if (!value) {\n editor.chain().focus().extendMarkRange(\"link\").unsetLink().run();\n } else {\n editor.chain().focus().extendMarkRange(\"link\").setLink({ href: value }).run();\n }\n\n onClose();\n };\n\n const removeLink = () => {\n editor.chain().focus().extendMarkRange(\"link\").unsetLink().run();\n onClose();\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n applyLink();\n }\n\n if (event.key === \"Escape\") {\n event.preventDefault();\n onClose();\n }\n };\n\n if (variant === \"inline\") {\n return (\n <div\n ref={assignContainerRef}\n className=\"flex items-center gap-2 rounded-md border border-border bg-background p-2 shadow\"\n onMouseDown={(event) => event.stopPropagation()}\n >\n <input\n ref={inputRef}\n type=\"text\"\n inputMode=\"url\"\n placeholder=\"https://example.com\"\n value={linkValue}\n onChange={(event) => setLinkValue(event.target.value)}\n onKeyDown={handleKeyDown}\n className=\"w-48 rounded border border-border bg-background px-2 py-1 text-sm text-foreground focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary\"\n />\n <button\n type=\"button\"\n aria-label=\"Cancel link editing\"\n className=\"inline-flex h-8 w-8 items-center justify-center rounded border border-border text-foreground transition-colors hover:bg-muted\"\n onClick={onClose}\n >\n <X className=\"h-4 w-4\" />\n </button>\n <button\n type=\"button\"\n aria-label=\"Remove link\"\n className=\"inline-flex h-8 w-8 items-center justify-center rounded border border-border text-foreground transition-colors hover:bg-muted\"\n onClick={removeLink}\n >\n <Trash2 className=\"h-4 w-4\" />\n </button>\n <button\n type=\"button\"\n aria-label=\"Apply link\"\n className=\"inline-flex h-8 w-8 items-center justify-center rounded bg-primary text-primary-foreground transition-colors hover:bg-primary/90\"\n onClick={applyLink}\n >\n <Check className=\"h-4 w-4\" />\n </button>\n </div>\n );\n }\n\n return (\n <div\n ref={assignContainerRef}\n className=\"absolute left-2 top-full z-20 mt-2 w-full max-w-sm rounded-md border border-border bg-background p-3 shadow-lg\"\n >\n <div className=\"flex flex-col gap-2\">\n <label className=\"text-xs font-medium text-muted-foreground\">Link URL</label>\n <input\n ref={inputRef}\n type=\"text\"\n inputMode=\"url\"\n placeholder=\"https://example.com\"\n value={linkValue}\n onChange={(event) => setLinkValue(event.target.value)}\n onKeyDown={handleKeyDown}\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-sm text-foreground focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary\"\n />\n <div className=\"flex items-center justify-end gap-2\">\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 rounded border border-border px-2 py-1 text-sm text-foreground transition-colors hover:bg-muted\"\n onClick={onClose}\n >\n <X className=\"h-4 w-4\" />\n Cancel\n </button>\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 rounded border border-border px-2 py-1 text-sm text-foreground transition-colors hover:bg-muted\"\n onClick={removeLink}\n >\n <Trash2 className=\"h-4 w-4\" />\n Remove\n </button>\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 rounded bg-primary px-2 py-1 text-sm font-medium text-primary-foreground transition-colors hover:bg-primary/90\"\n onClick={applyLink}\n >\n <Check className=\"h-4 w-4\" />\n Apply\n </button>\n </div>\n </div>\n </div>\n );\n};\n\nexport default LinkEditorPopover;\n","import React from \"react\";\nimport type { Extensions, JSONContent } from \"@tiptap/core\";\nimport { Node as TiptapNode } from \"@tiptap/core\";\nimport {\n NodeViewContent,\n NodeViewWrapper,\n ReactNodeViewRenderer,\n type ReactNodeViewProps,\n} from \"@tiptap/react\";\nimport { Fragment } from \"@tiptap/pm/model\";\nimport { Plus, Trash2, X } from \"lucide-react\";\nimport { CALLOUT_TYPES, type TypeTableRow } from \"../docs/blocks\";\n\nconst input =\n \"h-7 min-w-0 rounded border border-input bg-card px-2 text-xs text-foreground placeholder:text-muted-foreground\";\nconst smallButton =\n \"inline-flex h-7 items-center gap-1 rounded px-2 text-xs text-muted-foreground hover:bg-muted hover:text-foreground disabled:opacity-40\";\n\nconst paragraph = (text = \"\"): JSONContent =>\n text\n ? { type: \"paragraph\", content: [{ type: \"text\", text }] }\n : { type: \"paragraph\" };\n\n/** Content inserted from the toolbar's Insert menu. */\nexport const docsBlockTemplates: Record<\n string,\n { label: string; content: JSONContent }\n> = {\n callout: {\n label: \"Callout\",\n content: { type: \"callout\", attrs: { type: \"info\" }, content: [paragraph()] },\n },\n tabs: {\n label: \"Tabs\",\n content: {\n type: \"tabs\",\n content: [\"Tab 1\", \"Tab 2\"].map((label) => ({\n type: \"tab\",\n attrs: { label },\n content: [paragraph()],\n })),\n },\n },\n steps: {\n label: \"Steps\",\n content: {\n type: \"steps\",\n content: [\n {\n type: \"step\",\n content: [{ type: \"heading\", attrs: { level: 3 } }, paragraph()],\n },\n ],\n },\n },\n cards: {\n label: \"Cards\",\n content: { type: \"cards\", content: [{ type: \"card\", attrs: { title: \"Card\" } }] },\n },\n accordions: {\n label: \"Accordion\",\n content: {\n type: \"accordions\",\n content: [\n { type: \"accordion\", attrs: { title: \"Question\" }, content: [paragraph()] },\n ],\n },\n },\n codeGroup: {\n label: \"Code group\",\n content: {\n type: \"codeGroup\",\n content: [\n { type: \"codeBlock\", attrs: { language: \"bash\", title: \"Terminal\" } },\n { type: \"codeBlock\", attrs: { language: \"ts\", title: \"index.ts\" } },\n ],\n },\n },\n typeTable: {\n label: \"Type table\",\n content: {\n type: \"typeTable\",\n attrs: {\n rows: [\n {\n name: \"name\",\n type: \"string\",\n default: null,\n description: null,\n required: false,\n },\n ],\n },\n },\n },\n};\n\n/** New child appended by a container's \"Add\" button. */\nconst childTemplates: Record<string, (count: number) => JSONContent> = {\n tabs: (count) => ({\n type: \"tab\",\n attrs: { label: `Tab ${count + 1}` },\n content: [paragraph()],\n }),\n steps: () => ({\n type: \"step\",\n content: [{ type: \"heading\", attrs: { level: 3 } }, paragraph()],\n }),\n cards: () => ({ type: \"card\", attrs: { title: \"Card\" } }),\n accordions: () => ({\n type: \"accordion\",\n attrs: { title: \"Question\" },\n content: [paragraph()],\n }),\n codeGroup: () => ({ type: \"codeBlock\", attrs: { language: null, title: \"Code\" } }),\n};\nconst childLabels: Record<string, string> = {\n tabs: \"Add tab\",\n steps: \"Add step\",\n cards: \"Add card\",\n accordions: \"Add item\",\n codeGroup: \"Add code block\",\n};\n\nfunction BlockFrame({\n label,\n props,\n children,\n fields,\n}: {\n label: string;\n props: ReactNodeViewProps;\n children?: React.ReactNode;\n fields?: React.ReactNode;\n}) {\n const { node, editor, getPos, deleteNode } = props;\n const add = childTemplates[node.type.name];\n return (\n <NodeViewWrapper className=\"te-block\" data-block={node.type.name}>\n <div className=\"te-block__bar\" contentEditable={false}>\n <span className=\"te-block__label\">{label}</span>\n {fields}\n <span className=\"ml-auto flex items-center gap-1\">\n {add && editor.isEditable && (\n <button\n type=\"button\"\n className={smallButton}\n onClick={() => {\n // Read the container from the current state: the view's `node`\n // can predate edits inside it, and a stale size would put the\n // child inside the last item, where insertContentAt re-fits\n // (wraps) the surrounding content instead of failing.\n const pos = getPos();\n const current =\n typeof pos === \"number\" ? editor.state.doc.nodeAt(pos) : null;\n if (typeof pos !== \"number\" || current?.type !== node.type) return;\n const child = editor.schema.nodeFromJSON(add(current.childCount));\n const end = current.childCount;\n if (!current.canReplace(end, end, Fragment.from(child))) return;\n const at = pos + current.nodeSize - 1;\n editor.view.dispatch(\n editor.state.tr.insert(at, child).scrollIntoView(),\n );\n editor.view.focus();\n }}\n >\n <Plus className=\"size-3.5\" />\n {childLabels[node.type.name]}\n </button>\n )}\n {editor.isEditable && (\n <button\n type=\"button\"\n className={smallButton}\n aria-label={`Remove ${label.toLowerCase()}`}\n title={`Remove ${label.toLowerCase()}`}\n onClick={deleteNode}\n >\n <Trash2 className=\"size-3.5\" />\n </button>\n )}\n </span>\n </div>\n {children ?? <NodeViewContent className=\"te-block__content\" />}\n </NodeViewWrapper>\n );\n}\n\n/** A tab, step, card or accordion item: optional fields, removable unless it is the last one. */\nfunction ItemFrame({\n props,\n fields,\n}: {\n props: ReactNodeViewProps;\n fields?: React.ReactNode;\n}) {\n const { editor, getPos, deleteNode, node } = props;\n const pos = getPos();\n const parent = typeof pos === \"number\" ? editor.state.doc.resolve(pos).parent : null;\n return (\n <NodeViewWrapper className=\"te-block-item\" data-block={node.type.name}>\n {(fields || (parent?.childCount ?? 0) > 1) && (\n <div className=\"te-block__bar\" contentEditable={false}>\n {fields}\n {(parent?.childCount ?? 0) > 1 && editor.isEditable && (\n <button\n type=\"button\"\n className={`${smallButton} ml-auto`}\n aria-label=\"Remove item\"\n title=\"Remove item\"\n onClick={deleteNode}\n >\n <X className=\"size-3.5\" />\n </button>\n )}\n </div>\n )}\n <NodeViewContent className=\"te-block__content\" />\n </NodeViewWrapper>\n );\n}\n\nfunction TextField({\n props,\n name,\n placeholder,\n nullable,\n className = \"w-40\",\n}: {\n props: ReactNodeViewProps;\n name: string;\n placeholder: string;\n nullable?: boolean;\n className?: string;\n}) {\n const value = (props.node.attrs[name] as string | null) ?? \"\";\n return (\n <input\n className={`${input} ${className}`}\n aria-label={placeholder}\n placeholder={placeholder}\n value={value}\n disabled={!props.editor.isEditable}\n onChange={(event) =>\n props.updateAttributes({\n [name]: nullable && !event.target.value ? null : event.target.value,\n })\n }\n />\n );\n}\n\nfunction CalloutView(props: ReactNodeViewProps) {\n return (\n <BlockFrame\n label=\"Callout\"\n props={props}\n fields={\n <>\n <select\n className={input}\n aria-label=\"Callout type\"\n value={props.node.attrs.type ?? \"info\"}\n disabled={!props.editor.isEditable}\n onChange={(event) => props.updateAttributes({ type: event.target.value })}\n >\n {CALLOUT_TYPES.map((type) => (\n <option key={type} value={type}>\n {type}\n </option>\n ))}\n </select>\n <TextField\n props={props}\n name=\"title\"\n placeholder=\"Title (optional)\"\n nullable\n />\n </>\n }\n />\n );\n}\n\nfunction CodeBlockView(props: ReactNodeViewProps) {\n return (\n <NodeViewWrapper className=\"te-block-code\">\n <div className=\"te-block__bar\" contentEditable={false}>\n <TextField props={props} name=\"title\" placeholder=\"File name\" nullable />\n <TextField\n props={props}\n name=\"language\"\n placeholder=\"Language\"\n nullable\n className=\"w-24\"\n />\n </div>\n <pre>\n <NodeViewContent<\"code\"> as=\"code\" />\n </pre>\n </NodeViewWrapper>\n );\n}\n\nfunction TypeTableView(props: ReactNodeViewProps) {\n const rows = (props.node.attrs.rows ?? []) as TypeTableRow[];\n const editable = props.editor.isEditable;\n const update = (index: number, patch: Partial<TypeTableRow>) =>\n props.updateAttributes({\n rows: rows.map((row, i) => (i === index ? { ...row, ...patch } : row)),\n });\n const text = (index: number, key: \"name\" | \"type\" | \"default\" | \"description\") => (\n <input\n className={`${input} w-full`}\n aria-label={key}\n placeholder={key}\n value={rows[index][key] ?? \"\"}\n disabled={!editable}\n onChange={(event) =>\n update(index, {\n [key]:\n (key === \"default\" || key === \"description\") && !event.target.value\n ? null\n : event.target.value,\n })\n }\n />\n );\n return (\n <BlockFrame label=\"Type table\" props={props}>\n <div contentEditable={false} className=\"te-block__content\">\n <table className=\"te-block-table\">\n <thead>\n <tr>\n <th>Prop</th>\n <th>Type</th>\n <th>Default</th>\n <th>Description</th>\n <th>Required</th>\n <th />\n </tr>\n </thead>\n <tbody>\n {rows.map((row, index) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: row names are edited in place.\n <tr key={index}>\n <td>{text(index, \"name\")}</td>\n <td>{text(index, \"type\")}</td>\n <td>{text(index, \"default\")}</td>\n <td>{text(index, \"description\")}</td>\n <td>\n <input\n type=\"checkbox\"\n aria-label=\"Required\"\n checked={row.required}\n disabled={!editable}\n onChange={(event) =>\n update(index, { required: event.target.checked })\n }\n />\n </td>\n <td>\n <button\n type=\"button\"\n className={smallButton}\n aria-label=\"Remove row\"\n disabled={!editable || rows.length === 1}\n onClick={() =>\n props.updateAttributes({\n rows: rows.filter((_, i) => i !== index),\n })\n }\n >\n <X className=\"size-3.5\" />\n </button>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n {editable && (\n <button\n type=\"button\"\n className={smallButton}\n onClick={() =>\n props.updateAttributes({\n rows: [\n ...rows,\n {\n name: `prop${rows.length + 1}`,\n type: \"string\",\n default: null,\n description: null,\n required: false,\n },\n ],\n })\n }\n >\n <Plus className=\"size-3.5\" />\n Add row\n </button>\n )}\n </div>\n </BlockFrame>\n );\n}\n\nconst views: Record<string, React.ComponentType<ReactNodeViewProps>> = {\n callout: CalloutView,\n tabs: (props) => <BlockFrame label=\"Tabs\" props={props} />,\n tab: (props) => (\n <ItemFrame\n props={props}\n fields={<TextField props={props} name=\"label\" placeholder=\"Tab label\" />}\n />\n ),\n steps: (props) => <BlockFrame label=\"Steps\" props={props} />,\n step: (props) => <ItemFrame props={props} />,\n cards: (props) => <BlockFrame label=\"Cards\" props={props} />,\n card: (props) => (\n <ItemFrame\n props={props}\n fields={\n <>\n <TextField props={props} name=\"title\" placeholder=\"Title\" />\n <TextField props={props} name=\"href\" placeholder=\"Link (/docs/…)\" nullable />\n <TextField\n props={props}\n name=\"icon\"\n placeholder=\"Icon (e.g. Rocket)\"\n nullable\n className=\"w-32\"\n />\n </>\n }\n />\n ),\n accordions: (props) => <BlockFrame label=\"Accordion\" props={props} />,\n accordion: (props) => (\n <ItemFrame\n props={props}\n fields={<TextField props={props} name=\"title\" placeholder=\"Title\" />}\n />\n ),\n codeGroup: (props) => <BlockFrame label=\"Code group\" props={props} />,\n typeTable: TypeTableView,\n};\n\n/**\n * Gives the schema-only docs blocks editing UI in the browser editor. Code\n * blocks get a file-name field only in the documentation profile, so the\n * default editor keeps its syntax-highlighted code blocks.\n */\nexport function withDocsBlockViews(\n extensions: Extensions,\n profile: \"default\" | \"documentation\",\n): Extensions {\n return extensions.map((extension) => {\n const view =\n views[extension.name] ??\n (profile === \"documentation\" && extension.name === \"codeBlock\"\n ? CodeBlockView\n : undefined);\n if (!view || !(extension instanceof TiptapNode)) return extension;\n return extension.extend({\n addNodeView() {\n return ReactNodeViewRenderer(view);\n },\n });\n });\n}\n","import React, { useEffect, useRef, useState } from \"react\";\nimport type { Editor } from \"@tiptap/core\";\nimport type { Level } from \"@tiptap/extension-heading\";\nimport {\n Bold,\n ChevronDown,\n Code,\n Image as ImageIcon,\n Italic,\n Link as LinkIcon,\n List as ListIcon,\n ListOrdered,\n Minus,\n Plus,\n Quote,\n Redo2,\n Table as TableIcon,\n Trash2,\n Underline,\n Undo2,\n} from \"lucide-react\";\nimport LinkEditorPopover from \"./components/link-editor-popover.js\";\nimport { docsBlockTemplates } from \"./components/docs-block-views\";\n\ninterface ToolbarProps {\n profile?: \"default\" | \"documentation\";\n editor: Editor | null;\n onRequestImageUpload: () => void;\n isUploadingImage?: boolean;\n}\n\ntype PopoverType = \"heading\" | \"insert\" | \"link\" | null;\n\nconst iconButtonBase =\n \"inline-flex h-8 w-8 items-center justify-center rounded border border-transparent text-foreground transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary disabled:cursor-not-allowed disabled:opacity-50\";\n\nfunction IconButton({\n icon: Icon,\n label,\n active,\n disabled,\n onClick,\n}: {\n icon: React.ComponentType<{ className?: string }>;\n label: string;\n active?: boolean;\n disabled?: boolean;\n onClick?: () => void;\n}): React.JSX.Element {\n return (\n <button\n type=\"button\"\n aria-label={label}\n title={label}\n className={`${iconButtonBase} ${\n active\n ? \"bg-primary text-primary-foreground hover:bg-primary/90\"\n : \"bg-transparent hover:bg-muted\"\n }`}\n disabled={disabled}\n onClick={onClick}\n >\n <Icon className=\"h-4 w-4\" />\n </button>\n );\n}\n\nconst headingOptions: Array<{\n label: string;\n value: string;\n level?: Level;\n}> = [\n { label: \"Paragraph\", value: \"paragraph\" },\n { label: \"Heading 1\", value: \"h1\", level: 1 },\n { label: \"Heading 2\", value: \"h2\", level: 2 },\n { label: \"Heading 3\", value: \"h3\", level: 3 },\n];\n\nfunction Divider(): React.JSX.Element {\n return <span aria-hidden className=\"mx-1 h-6 w-px shrink-0 bg-border\" />;\n}\n\nconst Toolbar = ({\n editor,\n onRequestImageUpload,\n isUploadingImage,\n profile = \"default\",\n}: ToolbarProps): React.JSX.Element | null => {\n const [activePopover, setActivePopover] = useState<PopoverType>(null);\n const [wordCount, setWordCount] = useState(0);\n const popoverRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n if (!activePopover) return undefined;\n\n const handleClick = (event: MouseEvent) => {\n if (popoverRef.current && !popoverRef.current.contains(event.target as Node)) {\n setActivePopover(null);\n }\n };\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") setActivePopover(null);\n };\n\n document.addEventListener(\"mousedown\", handleClick);\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n document.removeEventListener(\"mousedown\", handleClick);\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [activePopover]);\n\n useEffect(() => {\n if (!editor) return undefined;\n const updateStats = () => {\n const text = editor.getText().trim();\n setWordCount(text ? text.split(/\\s+/).length : 0);\n };\n updateStats();\n editor.on(\"update\", updateStats);\n return () => {\n editor.off(\"update\", updateStats);\n };\n }, [editor]);\n\n if (!editor) return null;\n\n const availableHeadingOptions =\n profile === \"documentation\"\n ? [\n ...headingOptions,\n { label: \"Heading 4\", value: \"h4\", level: 4 as Level },\n { label: \"Heading 5\", value: \"h5\", level: 5 as Level },\n { label: \"Heading 6\", value: \"h6\", level: 6 as Level },\n ]\n : headingOptions;\n const activeHeading =\n availableHeadingOptions.find((option) =>\n option.level\n ? editor.isActive(\"heading\", { level: option.level })\n : editor.isActive(\"paragraph\"),\n ) ?? headingOptions[0];\n const readTime = wordCount === 0 ? 0 : Math.max(1, Math.ceil(wordCount / 200));\n\n const selectHeading = (level?: Level) => {\n const chain = editor.chain().focus();\n if (level) chain.setHeading({ level }).run();\n else chain.setParagraph().run();\n setActivePopover(null);\n };\n\n const insertTable = () => {\n editor.chain().focus().insertTable({ rows: 3, cols: 3, withHeaderRow: true }).run();\n setActivePopover(null);\n };\n\n return (\n <div className=\"relative w-full\">\n <div className=\"overflow-visible border-b border-border bg-card\">\n <div className=\"flex min-h-11 flex-wrap items-center gap-1 px-4 py-1\">\n <IconButton\n icon={Undo2}\n label=\"Undo\"\n disabled={!editor.can().undo()}\n onClick={() => editor.chain().focus().undo().run()}\n />\n <IconButton\n icon={Redo2}\n label=\"Redo\"\n disabled={!editor.can().redo()}\n onClick={() => editor.chain().focus().redo().run()}\n />\n <Divider />\n\n <div\n ref={activePopover === \"heading\" ? popoverRef : undefined}\n className=\"relative\"\n >\n <button\n type=\"button\"\n className=\"flex h-8 min-w-28 items-center justify-between gap-3 rounded border border-input bg-card px-3 text-sm font-medium hover:bg-muted\"\n aria-haspopup=\"menu\"\n aria-expanded={activePopover === \"heading\"}\n onClick={() =>\n setActivePopover((current) =>\n current === \"heading\" ? null : \"heading\",\n )\n }\n >\n {activeHeading.label}\n <ChevronDown className=\"size-4 text-muted-foreground\" />\n </button>\n {activePopover === \"heading\" && (\n <div className=\"te-popover absolute left-0 top-full z-30 mt-1 w-40 rounded-md p-1 shadow-lg\">\n {availableHeadingOptions.map((option) => (\n <button\n key={option.value}\n type=\"button\"\n role=\"menuitem\"\n className=\"flex w-full rounded px-2.5 py-2 text-left text-sm hover:bg-muted\"\n onClick={() => selectHeading(option.level)}\n >\n {option.label}\n </button>\n ))}\n </div>\n )}\n </div>\n <Divider />\n\n <IconButton\n icon={Bold}\n label=\"Bold\"\n active={editor.isActive(\"bold\")}\n onClick={() => editor.chain().focus().toggleBold().run()}\n />\n <IconButton\n icon={Italic}\n label=\"Italic\"\n active={editor.isActive(\"italic\")}\n onClick={() => editor.chain().focus().toggleItalic().run()}\n />\n {profile !== \"documentation\" && (\n <IconButton\n icon={Underline}\n label=\"Underline\"\n active={editor.isActive(\"underline\")}\n onClick={() => editor.chain().focus().toggleMark(\"underline\").run()}\n />\n )}\n <IconButton\n icon={Code}\n label=\"Inline code\"\n active={editor.isActive(\"code\")}\n onClick={() => editor.chain().focus().toggleCode().run()}\n />\n <IconButton\n icon={LinkIcon}\n label=\"Insert link\"\n active={editor.isActive(\"link\")}\n onClick={() =>\n setActivePopover((current) => (current === \"link\" ? null : \"link\"))\n }\n />\n <Divider />\n\n <IconButton\n icon={ListIcon}\n label=\"Bullet list\"\n active={editor.isActive(\"bulletList\")}\n onClick={() => editor.chain().focus().toggleBulletList().run()}\n />\n <IconButton\n icon={ListOrdered}\n label=\"Numbered list\"\n active={editor.isActive(\"orderedList\")}\n onClick={() => editor.chain().focus().toggleOrderedList().run()}\n />\n <IconButton\n icon={Quote}\n label=\"Blockquote\"\n active={editor.isActive(\"blockquote\")}\n onClick={() => editor.chain().focus().toggleBlockquote().run()}\n />\n <Divider />\n\n <div\n ref={activePopover === \"insert\" ? popoverRef : undefined}\n className=\"relative\"\n >\n <button\n type=\"button\"\n className=\"flex h-8 items-center gap-1.5 rounded border border-primary px-2.5 text-sm font-semibold text-primary hover:bg-[var(--primary-soft)]\"\n aria-haspopup=\"menu\"\n aria-expanded={activePopover === \"insert\"}\n onClick={() =>\n setActivePopover((current) => (current === \"insert\" ? null : \"insert\"))\n }\n >\n <Plus className=\"size-4\" />\n Insert\n </button>\n {activePopover === \"insert\" && (\n <div className=\"te-popover absolute right-0 top-full z-30 mt-1 w-52 rounded-md p-1 shadow-lg\">\n <button\n type=\"button\"\n className=\"flex w-full items-center gap-2 rounded px-2.5 py-2 text-sm hover:bg-muted\"\n onClick={() => {\n editor.chain().focus().setHorizontalRule().run();\n setActivePopover(null);\n }}\n >\n <Minus className=\"size-4\" />\n Horizontal rule\n </button>\n <button\n type=\"button\"\n className=\"flex w-full items-center gap-2 rounded px-2.5 py-2 text-sm hover:bg-muted\"\n onClick={() => {\n editor.chain().focus().toggleCodeBlock().run();\n setActivePopover(null);\n }}\n >\n <Code className=\"size-4\" />\n Code block\n </button>\n <button\n type=\"button\"\n className=\"flex w-full items-center gap-2 rounded px-2.5 py-2 text-sm hover:bg-muted disabled:opacity-50\"\n onClick={insertTable}\n disabled={\n !editor\n .can()\n .chain()\n .focus()\n .insertTable({\n rows: 3,\n cols: 3,\n withHeaderRow: true,\n })\n .run()\n }\n >\n <TableIcon className=\"size-4\" />\n Table\n </button>\n <button\n type=\"button\"\n className=\"flex w-full items-center gap-2 rounded px-2.5 py-2 text-sm hover:bg-muted disabled:opacity-50\"\n disabled={isUploadingImage}\n onClick={() => {\n onRequestImageUpload();\n setActivePopover(null);\n }}\n >\n <ImageIcon className=\"size-4\" />\n {isUploadingImage ? \"Uploading image…\" : \"Image\"}\n </button>\n\n {profile === \"documentation\" && (\n <>\n <div className=\"my-1 h-px bg-border\" />\n {Object.entries(docsBlockTemplates).map(([name, block]) => (\n <button\n key={name}\n type=\"button\"\n className=\"flex w-full rounded px-2.5 py-2 text-sm hover:bg-muted\"\n onClick={() => {\n editor.chain().focus().insertContent(block.content).run();\n setActivePopover(null);\n }}\n >\n {block.label}\n </button>\n ))}\n </>\n )}\n\n {editor.isActive(\"table\") && (\n <>\n <div className=\"my-1 h-px bg-border\" />\n <button\n type=\"button\"\n className=\"flex w-full rounded px-2.5 py-2 text-sm hover:bg-muted\"\n onClick={() => {\n editor.chain().focus().addRowAfter().run();\n setActivePopover(null);\n }}\n >\n Add table row\n </button>\n <button\n type=\"button\"\n className=\"flex w-full rounded px-2.5 py-2 text-sm hover:bg-muted\"\n onClick={() => {\n editor.chain().focus().addColumnAfter().run();\n setActivePopover(null);\n }}\n >\n Add table column\n </button>\n <button\n type=\"button\"\n className=\"flex w-full items-center gap-2 rounded px-2.5 py-2 text-sm text-destructive hover:bg-destructive/10\"\n onClick={() => {\n editor.chain().focus().deleteTable().run();\n setActivePopover(null);\n }}\n >\n <Trash2 className=\"size-4\" />\n Remove table\n </button>\n </>\n )}\n </div>\n )}\n </div>\n\n <span className=\"ml-auto hidden pl-8 text-xs tabular-nums text-muted-foreground xl:inline\">\n {wordCount.toLocaleString()} {wordCount === 1 ? \"word\" : \"words\"}\n <span aria-hidden className=\"mx-2\">\n ·\n </span>\n {readTime} min\n </span>\n </div>\n </div>\n\n {activePopover === \"link\" && (\n <LinkEditorPopover\n editor={editor}\n onClose={() => setActivePopover(null)}\n containerRef={popoverRef}\n />\n )}\n </div>\n );\n};\n\nexport default Toolbar;\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { Editor } from \"@tiptap/core\";\nimport type { BubbleMenuPluginProps } from \"@tiptap/extension-bubble-menu\";\nimport { BubbleMenuPlugin } from \"@tiptap/extension-bubble-menu\";\nimport {\n Bold,\n Code,\n Italic,\n Link as LinkIcon,\n Strikethrough,\n Underline,\n} from \"lucide-react\";\nimport LinkEditorPopover from \"./components/link-editor-popover\";\n\ninterface BubbleMenuProps {\n editor: Editor;\n profile?: \"default\" | \"documentation\";\n}\n\nconst buttonBase =\n \"inline-flex h-8 w-8 items-center justify-center rounded text-foreground transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary\";\n\ntype TipTapBubbleMenuProps = {\n editor: Editor | null;\n className?: string;\n children: React.ReactNode;\n pluginKey?: string;\n} & Partial<Omit<BubbleMenuPluginProps, \"editor\" | \"element\" | \"pluginKey\">>;\n\nconst TipTapBubbleMenu = ({\n editor,\n className,\n children,\n pluginKey = \"inlineBubbleMenu\",\n updateDelay,\n resizeDelay,\n shouldShow,\n appendTo,\n getReferencedVirtualElement,\n options,\n}: TipTapBubbleMenuProps): React.JSX.Element => {\n const menuRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n const element = menuRef.current;\n\n if (!editor || editor.isDestroyed || !element) {\n return;\n }\n\n const plugin = BubbleMenuPlugin({\n editor,\n element,\n pluginKey,\n updateDelay,\n resizeDelay,\n shouldShow: shouldShow ?? null,\n appendTo,\n getReferencedVirtualElement,\n options,\n });\n\n editor.registerPlugin(plugin);\n\n return () => {\n editor.unregisterPlugin(pluginKey);\n };\n }, [\n editor,\n pluginKey,\n updateDelay,\n resizeDelay,\n shouldShow,\n appendTo,\n getReferencedVirtualElement,\n options,\n ]);\n\n return (\n <div ref={menuRef} className={className} style={{ visibility: \"hidden\" }}>\n {children}\n </div>\n );\n};\n\nfunction InlineButton({\n icon: Icon,\n label,\n active,\n onClick,\n}: {\n icon: React.ComponentType<{ className?: string }>;\n label: string;\n active?: boolean;\n onClick: () => void;\n}): React.JSX.Element {\n return (\n <button\n type=\"button\"\n aria-label={label}\n title={label}\n className={`${buttonBase} ${\n active\n ? \"bg-primary text-primary-foreground hover:bg-primary/90\"\n : \"bg-transparent hover:bg-muted\"\n }`}\n onClick={onClick}\n >\n <Icon className=\"h-4 w-4\" />\n </button>\n );\n}\n\nconst InlineBubbleMenu = ({\n editor,\n profile = \"default\",\n}: BubbleMenuProps): React.JSX.Element | null => {\n const [isLinkEditing, setIsLinkEditing] = useState(false);\n\n const openLinkEditor = useCallback(() => {\n setIsLinkEditing((prev) => !prev);\n }, []);\n\n useEffect(() => {\n const handleSelectionUpdate = () => {\n setIsLinkEditing(false);\n };\n\n editor.on(\"selectionUpdate\", handleSelectionUpdate);\n\n return () => {\n editor.off(\"selectionUpdate\", handleSelectionUpdate);\n };\n }, [editor]);\n\n if (!editor) {\n return null;\n }\n\n return (\n <TipTapBubbleMenu\n editor={editor}\n className=\"bubble-menu flex flex-col gap-1 rounded-md border border-border bg-popover p-2 text-popover-foreground shadow-xl\"\n >\n <div className=\"flex items-center gap-1\">\n <InlineButton\n icon={Bold}\n label=\"Bold\"\n active={editor.isActive(\"bold\")}\n onClick={() => editor.chain().focus().toggleBold().run()}\n />\n <InlineButton\n icon={Italic}\n label=\"Italic\"\n active={editor.isActive(\"italic\")}\n onClick={() => editor.chain().focus().toggleItalic().run()}\n />\n {profile !== \"documentation\" && (\n <InlineButton\n icon={Underline}\n label=\"Underline\"\n active={editor.isActive(\"underline\")}\n onClick={() => editor.chain().focus().toggleMark(\"underline\").run()}\n />\n )}\n <InlineButton\n icon={Strikethrough}\n label=\"Strikethrough\"\n active={editor.isActive(\"strike\")}\n onClick={() => editor.chain().focus().toggleStrike().run()}\n />\n <InlineButton\n icon={Code}\n label=\"Inline code\"\n active={editor.isActive(\"code\")}\n onClick={() => editor.chain().focus().toggleCode().run()}\n />\n <InlineButton\n icon={LinkIcon}\n label=\"Insert link\"\n active={editor.isActive(\"link\")}\n onClick={openLinkEditor}\n />\n </div>\n {isLinkEditing && (\n <LinkEditorPopover\n editor={editor}\n onClose={() => setIsLinkEditing(false)}\n variant=\"inline\"\n />\n )}\n </TipTapBubbleMenu>\n );\n};\n\nexport default InlineBubbleMenu;\n","import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport { createContext, useContext, type ReactNode } from \"react\";\n\nexport type PickedImage = {\n src: string;\n alt?: string;\n};\n\nconst ImagePickerContext = createContext<(() => Promise<PickedImage | null>) | null>(\n null,\n);\n\nexport function ImagePickerContextProvider({\n pickImage,\n children,\n}: {\n pickImage: () => Promise<PickedImage | null>;\n children: ReactNode;\n}) {\n return (\n <ImagePickerContext.Provider value={pickImage}>\n {children}\n </ImagePickerContext.Provider>\n );\n}\n\nexport function useImagePicker() {\n return useContext(ImagePickerContext);\n}\n","/** DM-VALIDATE/DM-MEDIA: syntax safety; ownership/provider checks belong to the API. */\nexport function isSafeDocsUrl(value: unknown, image = false): value is string {\n if (typeof value !== \"string\" || !value || value !== value.trim()) return false;\n // Browsers ignore control characters in protocols. Reject their encoded forms too.\n if (\n // biome-ignore lint/suspicious/noControlCharactersInRegex: Browsers ignore controls in dangerous protocols.\n /[\\u0000-\\u0020\\u007f\\\\]/.test(value) ||\n /%(?:0[0-9a-f]|1[0-9a-f]|7f|5c)/i.test(value)\n )\n return false;\n if (value.startsWith(\"//\")) return false;\n const privatePath =\n /\\/(?:attachments|private|ticket-attachments|conversation-attachments)(?:\\/|$)/i;\n const signedKey =\n /^(?:x-amz-.+|x-goog-.+|signature|sig|token|access_token|expires)$/i;\n if (/^(?:https?:|mailto:)/i.test(value)) {\n try {\n const url = new URL(value);\n if (image && url.protocol !== \"https:\") return false;\n if (url.username || url.password) return false;\n if (url.protocol === \"mailto:\") return !image && Boolean(url.pathname);\n // Known private attachment paths and expiring signed links are never docs assets.\n if (privatePath.test(decodeURIComponent(url.pathname))) return false;\n for (const key of url.searchParams.keys()) {\n if (signedKey.test(key)) return false;\n }\n return Boolean(url.hostname);\n } catch {\n return false;\n }\n }\n if (image) return false;\n // Relative Markdown paths, site paths, fragments, and query links are safe data.\n if (/^[^/?#]*:/.test(value) || /%(?:2f|3a)/i.test(value)) return false;\n try {\n const url = new URL(value, \"https://docs.invalid/\");\n return (\n !privatePath.test(decodeURIComponent(url.pathname)) &&\n ![...url.searchParams.keys()].some((key) => signedKey.test(key))\n );\n } catch {\n return false;\n }\n}\n","import { getSchema, Node, type Extensions } from \"@tiptap/core\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport CodeBlock from \"@tiptap/extension-code-block\";\nimport Image from \"@tiptap/extension-image\";\nimport Link from \"@tiptap/extension-link\";\nimport { Table, TableCell, TableHeader, TableRow } from \"@tiptap/extension-table\";\nimport { isSafeDocsUrl } from \"./urls\";\nimport { CodeBlockTitle, createDocsBlockExtensions } from \"./blocks\";\nimport type { Schema } from \"@tiptap/pm/model\";\n\n/** DM-VALIDATE: schema-only extensions; no React, upload controls, or node views. */\nexport function createDocsExtensions(): Extensions {\n return [\n StarterKit.configure({\n code: false,\n codeBlock: false,\n document: false,\n underline: false,\n link: false,\n dropcursor: false,\n gapcursor: false,\n trailingNode: false,\n }),\n Node.create({ name: \"doc\", topNode: true, content: \"block*\" }),\n Link.extend({\n addAttributes() {\n return { ...this.parent?.(), title: { default: null } };\n },\n }).configure({ openOnClick: false, isAllowedUri: (url) => isSafeDocsUrl(url) }),\n Image.configure({ allowBase64: false, resize: false }),\n Table.configure({ resizable: false }),\n TableRow,\n TableCell.extend({ content: \"paragraph\" }),\n TableHeader.extend({ content: \"paragraph\" }),\n CodeBlock,\n CodeBlockTitle,\n ...createDocsBlockExtensions(),\n ];\n}\n\nexport const docsSchema: Schema = getSchema(createDocsExtensions());\nexport const DOCS_SCHEMA_VERSION = 1;\n","\"use client\";\n\nimport React, {\n FC,\n PropsWithChildren,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { JSONContent } from \"@tiptap/core\";\nimport { generateText } from \"@tiptap/core\";\nimport { EditorContent, useEditor } from \"@tiptap/react\";\nimport emptyDoc from \"./empty-doc\";\nimport { createExtensions } from \"./extensions\";\nimport Toolbar from \"./toolbar\";\nimport BubbleMenu from \"./bubble-menu\";\nimport type { ReactEditorProps } from \"./types\";\nimport { cn } from \"./lib/cn\";\nimport { useImagePicker } from \"./image-picker\";\nimport { createDocsExtensions } from \"./docs/extensions\";\nimport { withDocsBlockViews } from \"./components/docs-block-views\";\nimport { Gapcursor, TrailingNode } from \"@tiptap/extensions\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport { isSafeDocsUrl } from \"./docs/urls\";\n\nexport interface EditorProps {\n profile?: \"default\" | \"documentation\";\n onChange: (json: JSONContent) => void;\n onFlushChangeReady?: (flush: () => void) => void;\n /** How long to wait after the last edit before calling `onChange`. Defaults to 1000. */\n debounceMs?: number;\n showToolbar?: boolean;\n editable?: boolean;\n refresh?: number;\n url?: string;\n initialContent?: ReactEditorProps[\"initialContent\"];\n placeholder?: string;\n autoFocus?: boolean;\n imageSizeLimit?: number;\n onError?: (...args: any[]) => void;\n className?: string;\n editorClassName?: string;\n contentClassName?: string;\n beforeContent?: React.ReactNode;\n}\n\ninterface EditorType extends FC<PropsWithChildren<EditorProps>> {\n getPlainText: (doc: JSONContent) => string;\n emptyDoc: JSONContent;\n}\n\nconst Editor: EditorType = Object.assign(\n ({\n initialContent,\n onChange,\n onFlushChangeReady,\n debounceMs = 1000,\n placeholder,\n children,\n showToolbar = true,\n editable = true,\n refresh,\n url,\n autoFocus,\n imageSizeLimit,\n onError,\n className,\n editorClassName,\n contentClassName,\n beforeContent,\n profile = \"default\" as EditorProps[\"profile\"],\n }) => {\n const [isUploading, setIsUploading] = useState(false);\n const fileInputRef = useRef<HTMLInputElement | null>(null);\n const pickImage = useImagePicker();\n const hasInteractedRef = useRef(false);\n const lastSerializedContentRef = useRef(JSON.stringify(initialContent ?? emptyDoc));\n const refreshRef = useRef<EditorProps[\"refresh\"]>(refresh);\n\n const extensions = useMemo(\n () =>\n withDocsBlockViews(\n profile === \"documentation\"\n ? [\n ...createDocsExtensions(),\n Placeholder.configure({\n placeholder: placeholder || \"Write something…\",\n }),\n // Editing only: lets authors type before or after a block that\n // starts or ends the doc. Empty paragraphs are not saved to Markdown.\n Gapcursor,\n TrailingNode,\n ]\n : createExtensions({ placeholder }),\n profile ?? \"default\",\n ),\n [placeholder, profile],\n );\n\n const changeTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const pendingJsonRef = useRef<JSONContent | null>(null);\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const debounceMsRef = useRef(debounceMs);\n debounceMsRef.current = debounceMs;\n\n const editor = useEditor(\n {\n immediatelyRender: false,\n extensions,\n content: initialContent ?? emptyDoc,\n autofocus: autoFocus ? \"end\" : false,\n editable,\n editorProps: {\n attributes: {\n class: `tiptap-content ${editorClassName ?? \"\"}`,\n \"data-placeholder\": placeholder ?? \"\",\n },\n },\n onUpdate: ({ editor: instance }) => {\n // TipTap may normalize loaded JSON during initialization\n // (notably `{ type: \"doc\", content: [] }` to\n // `{ type: \"doc\" }`). Do not turn that internal mount work\n // into a user-visible autosave.\n if (!hasInteractedRef.current) {\n return;\n }\n if (changeTimeoutRef.current) {\n clearTimeout(changeTimeoutRef.current);\n }\n\n pendingJsonRef.current = instance.getJSON();\n changeTimeoutRef.current = setTimeout(() => {\n changeTimeoutRef.current = null;\n const json = pendingJsonRef.current;\n pendingJsonRef.current = null;\n if (json) onChangeRef.current(json);\n }, debounceMsRef.current);\n },\n onSelectionUpdate: ({ editor: instance }) => {\n hasInteractedRef.current = true;\n },\n },\n [extensions],\n );\n useEffect(() => {\n onFlushChangeReady?.(() => {\n if (!editor || !changeTimeoutRef.current) return;\n clearTimeout(changeTimeoutRef.current);\n changeTimeoutRef.current = null;\n pendingJsonRef.current = null;\n onChangeRef.current(editor.getJSON());\n });\n return () => onFlushChangeReady?.(() => {});\n }, [editor, onFlushChangeReady]);\n useEffect(() => {\n // Deliver an edit that is still waiting on the debounce instead of\n // dropping it, e.g. when the panel hosting the editor is closed.\n return () => {\n if (changeTimeoutRef.current) {\n clearTimeout(changeTimeoutRef.current);\n changeTimeoutRef.current = null;\n }\n const json = pendingJsonRef.current;\n pendingJsonRef.current = null;\n if (json) onChangeRef.current(json);\n };\n }, []);\n\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n editor.setEditable(editable);\n }, [editor, editable]);\n\n useEffect(() => {\n if (!editor) {\n return;\n }\n\n const nextContent = initialContent ?? emptyDoc;\n const nextSerialized = JSON.stringify(nextContent);\n const refreshChanged = refreshRef.current !== refresh;\n\n if (refreshChanged) {\n refreshRef.current = refresh;\n hasInteractedRef.current = false;\n lastSerializedContentRef.current = nextSerialized;\n editor.commands.setContent(nextContent, {\n emitUpdate: false,\n });\n return;\n }\n\n if (!hasInteractedRef.current) {\n if (lastSerializedContentRef.current !== nextSerialized) {\n lastSerializedContentRef.current = nextSerialized;\n editor.commands.setContent(nextContent, {\n emitUpdate: false,\n });\n }\n return;\n }\n\n lastSerializedContentRef.current = nextSerialized;\n }, [editor, initialContent, refresh]);\n\n const handleImageUpload = useCallback(\n async (file: File) => {\n if (profile === \"documentation\") {\n onError?.(\n \"Upload a public image using the media library before inserting it.\",\n );\n return;\n }\n const sizeLimit = imageSizeLimit ?? 2097152; // 2 MB\n if (file.size > sizeLimit) {\n onError?.(\"File is larger than the allowed size\");\n return;\n }\n\n try {\n setIsUploading(true);\n // First-draft implementation: embed the image as a data URL so\n // the editor works without a media/upload backend.\n const dataUrl = await new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = reject;\n reader.readAsDataURL(file);\n });\n editor\n ?.chain()\n .focus()\n .setImage({\n src: dataUrl,\n alt: file.name,\n title: file.name,\n })\n .run();\n } catch (error) {\n console.error(\"Image upload failed\", error);\n } finally {\n setIsUploading(false);\n }\n },\n [editor, profile, onError, imageSizeLimit],\n );\n\n const handleSelectFile = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const files = event.target.files;\n if (!files || files.length === 0) {\n return;\n }\n\n const file = files[0];\n void handleImageUpload(file);\n event.target.value = \"\";\n },\n [handleImageUpload],\n );\n\n const insertPickedImage = useCallback(\n (image: { src: string; alt?: string }) => {\n if (profile === \"documentation\" && !isSafeDocsUrl(image.src, true)) {\n onError?.(\"Documentation images require a stable public HTTPS URL.\");\n return;\n }\n editor\n ?.chain()\n .focus()\n .setImage({\n src: image.src,\n alt: image.alt,\n title: image.alt,\n })\n .run();\n },\n [editor, profile, onError],\n );\n\n const openFileDialog = useCallback(() => {\n if (pickImage) {\n void pickImage().then((image) => {\n if (image) insertPickedImage(image);\n });\n return;\n }\n fileInputRef.current?.click();\n }, [insertPickedImage, pickImage]);\n\n if (typeof window === \"undefined\") {\n return <></>;\n }\n\n return (\n <div\n className={cn(\"tiptap-editor flex flex-col gap-4 border\", className)}\n onPointerDownCapture={() => {\n hasInteractedRef.current = true;\n }}\n onKeyDownCapture={() => {\n hasInteractedRef.current = true;\n }}\n >\n {editable && showToolbar && (\n <div\n className=\"sticky top-0 bg-background\"\n style={{\n zIndex: 1,\n }}\n >\n <Toolbar\n editor={editor}\n onRequestImageUpload={openFileDialog}\n isUploadingImage={isUploading}\n profile={profile}\n />\n </div>\n )}\n <div className=\"flex w-full justify-center\">\n <div className={cn(\"flex w-full max-w-3xl flex-col\", contentClassName)}>\n {beforeContent}\n <EditorContent\n editor={editor}\n className={`${editorClassName ?? \"\"} ${editorClassName?.includes(\"min-h-\") ? \"\" : \"min-h-[200px]\"}`}\n />\n {pickImage ? null : (\n <input\n ref={fileInputRef}\n type=\"file\"\n accept=\"image/*\"\n className=\"hidden\"\n onChange={handleSelectFile}\n />\n )}\n {children}\n {editor && <BubbleMenu editor={editor} profile={profile} />}\n </div>\n </div>\n </div>\n );\n },\n {\n getPlainText: (doc: JSONContent) =>\n generateText(doc || emptyDoc, createExtensions()),\n emptyDoc,\n },\n) as EditorType;\n\nexport default Editor;\n","import type { JSONContent } from \"@tiptap/core\";\nimport { createId } from \"./create-id\";\n\ninterface Heading {\n level: number;\n text: string;\n id: string;\n}\n\nexport function extractHeadings(json: JSONContent | null | undefined): Heading[] {\n const headings: Heading[] = [];\n\n const collectHeadings = (node?: JSONContent) => {\n if (!node) {\n return;\n }\n\n if (node.type === \"heading\") {\n const level = typeof node.attrs?.level === \"number\" ? node.attrs.level : 1;\n\n const collectText = (current?: JSONContent): string => {\n if (!current) {\n return \"\";\n }\n\n if (typeof current.text === \"string\") {\n return current.text;\n }\n\n if (!current.content) {\n return \"\";\n }\n\n return current.content.map(collectText).join(\"\");\n };\n\n const textContent = collectText(node);\n\n headings.push({\n level,\n text: textContent,\n id: createId(textContent),\n });\n }\n\n if (Array.isArray(node.content)) {\n node.content.forEach((child) => {\n collectHeadings(child as JSONContent);\n });\n }\n };\n\n collectHeadings(json || undefined);\n\n return headings;\n}\n","export function extractTextFromNode(node): string {\n if (!node) {\n return \"\";\n }\n\n // ProseMirror nodes have a textContent property that contains all text\n if (typeof node.textContent === \"string\") {\n return node.textContent;\n }\n\n // Fallback: if content is a Fragment, access its content array\n if (node.content && node.content.content && Array.isArray(node.content.content)) {\n return node.content.content\n .map((child: any) => {\n // Text nodes have a text property\n if (child.text) {\n return child.text;\n }\n // Recursively extract from child nodes\n return extractTextFromNode(child);\n })\n .join(\"\");\n }\n\n // Fallback: if content is directly an array\n if (Array.isArray(node.content)) {\n return node.content\n .map((child: any) => {\n if (child.text) {\n return child.text;\n }\n return extractTextFromNode(child);\n })\n .join(\"\");\n }\n\n return \"\";\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { Check, Copy } from \"lucide-react\";\n\nasync function writeClipboard(text: string): Promise<void> {\n if (navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(text);\n return;\n }\n const area = document.createElement(\"textarea\");\n area.value = text;\n area.setAttribute(\"readonly\", \"\");\n area.style.position = \"fixed\";\n area.style.left = \"-9999px\";\n document.body.appendChild(area);\n area.select();\n document.execCommand(\"copy\");\n area.remove();\n}\n\n/** The copy button of a rendered code block; the only client part of it. */\nexport function CopyCodeButton({ source }: { source: string }) {\n const [copied, setCopied] = useState(false);\n\n useEffect(() => {\n if (!copied) return;\n const timer = window.setTimeout(() => setCopied(false), 1500);\n return () => window.clearTimeout(timer);\n }, [copied]);\n\n async function handleCopy() {\n if (!source) return;\n try {\n await writeClipboard(source);\n setCopied(true);\n } catch {\n setCopied(false);\n }\n }\n\n return (\n <button\n type=\"button\"\n className=\"te-code-copy\"\n aria-label={copied ? \"Copied\" : \"Copy code\"}\n title={copied ? \"Copied\" : \"Copy\"}\n onClick={() => {\n void handleCopy();\n }}\n >\n {copied ? (\n <Check className=\"te-code-copy__icon\" aria-hidden />\n ) : (\n <Copy className=\"te-code-copy__icon\" aria-hidden />\n )}\n </button>\n );\n}\n","import React from \"react\";\nimport { extractTextFromNode } from \"../extract-text-from-node\";\nimport { CopyCodeButton } from \"./copy-code-button\";\n\nfunction textFromChildren(node: React.ReactNode): string {\n if (node == null || typeof node === \"boolean\") return \"\";\n if (typeof node === \"string\" || typeof node === \"number\") {\n return String(node);\n }\n if (Array.isArray(node)) return node.map(textFromChildren).join(\"\");\n if (React.isValidElement<{ children?: React.ReactNode }>(node)) {\n return textFromChildren(node.props.children);\n }\n return \"\";\n}\n\nexport function RenderedCodeBlock({\n node,\n children,\n language,\n title,\n}: {\n node?: { textContent?: string; content?: unknown };\n children?: React.ReactNode;\n language?: string;\n title?: string | null;\n}): React.JSX.Element {\n const source = extractTextFromNode(node) || textFromChildren(children);\n\n return (\n <div className=\"te-code-block\">\n {title && <div className=\"te-code-block__title\">{title}</div>}\n <pre>\n <code className={language ? `language-${language}` : undefined}>\n {children}\n </code>\n </pre>\n <CopyCodeButton source={source} />\n </div>\n );\n}\n","export const DOCS_HEADING_POLICY_VERSION = 1;\n\nexport interface HeadingNode {\n type?: string;\n text?: string;\n attrs?: Record<string, unknown>;\n content?: HeadingNode[];\n}\n\nexport function docsNodeText(node: HeadingNode): string {\n if (typeof node.text === \"string\") return node.text;\n if (node.type === \"hardBreak\") return \"\\n\";\n return (node.content ?? []).map(docsNodeText).join(\"\");\n}\n\n/** DM-CONVERT: deterministic Unicode anchors, including duplicate-base collisions. */\nexport function createHeadingIdGenerator(): (text: string) => string {\n const used = new Set<string>();\n return (text) => {\n const base =\n text\n .normalize(\"NFKC\")\n .toLowerCase()\n .trim()\n .replace(/[^\\p{L}\\p{N}\\s_-]/gu, \"\")\n .replace(/\\s+/g, \"-\") || \"section\";\n let id = base;\n let suffix = 2;\n while (used.has(id)) id = `${base}-${suffix++}`;\n used.add(id);\n return id;\n };\n}\n\nexport function extractDocsHeadings(json: HeadingNode | null | undefined) {\n const nextId = createHeadingIdGenerator();\n const headings: { level: number; text: string; id: string }[] = [];\n function walk(node: HeadingNode) {\n if (node.type === \"heading\") {\n const text = docsNodeText(node);\n headings.push({ level: Number(node.attrs?.level ?? 1), text, id: nextId(text) });\n }\n for (const child of node.content ?? []) walk(child);\n }\n if (json) walk(json);\n return headings;\n}\n","\"use client\";\n\nimport React, { useId, useState } from \"react\";\n\n/**\n * Tab switching for docs Tabs and Code groups; the only client part of them.\n * Every panel is server-rendered, so hidden tabs stay in the page for search.\n */\nexport function DocsTabs({\n labels,\n children,\n className,\n}: {\n labels: string[];\n children: React.ReactNode;\n className?: string;\n}) {\n const id = useId();\n const [active, setActive] = useState(0);\n const panels = React.Children.toArray(children);\n\n function onKeyDown(event: React.KeyboardEvent<HTMLButtonElement>, index: number) {\n const step = event.key === \"ArrowRight\" ? 1 : event.key === \"ArrowLeft\" ? -1 : 0;\n if (!step) return;\n event.preventDefault();\n const next = (index + step + labels.length) % labels.length;\n setActive(next);\n document.getElementById(`${id}-tab-${next}`)?.focus();\n }\n\n return (\n <div className={className}>\n <div role=\"tablist\" className=\"te-tabs__list\">\n {labels.map((label, index) => (\n <button\n // biome-ignore lint/suspicious/noArrayIndexKey: labels may repeat or be empty.\n key={index}\n id={`${id}-tab-${index}`}\n type=\"button\"\n role=\"tab\"\n aria-selected={index === active}\n aria-controls={`${id}-panel-${index}`}\n tabIndex={index === active ? 0 : -1}\n className=\"te-tabs__tab\"\n onClick={() => setActive(index)}\n onKeyDown={(event) => onKeyDown(event, index)}\n >\n {label}\n </button>\n ))}\n </div>\n {panels.map((panel, index) => (\n <div\n // biome-ignore lint/suspicious/noArrayIndexKey: panels follow their tab's position.\n key={index}\n id={`${id}-panel-${index}`}\n role=\"tabpanel\"\n aria-labelledby={`${id}-tab-${index}`}\n hidden={index !== active}\n className=\"te-tabs__panel\"\n >\n {panel}\n </div>\n ))}\n </div>\n );\n}\n","import React from \"react\";\nimport type { Node as ProseMirrorNode } from \"@tiptap/pm/model\";\nimport { CircleAlert, Info, Lightbulb, OctagonAlert, StickyNote } from \"lucide-react\";\nimport { DynamicIcon, type IconName } from \"lucide-react/dynamic\";\nimport type { NodeProps } from \"@tiptap/static-renderer\";\nimport type { TypeTableRow } from \"../docs/blocks\";\nimport { DocsTabs } from \"./docs-tabs\";\n\ntype BlockProps = NodeProps<ProseMirrorNode, React.ReactNode>;\n\nconst childAttrs = (node: ProseMirrorNode) => {\n const attrs: Record<string, any>[] = [];\n node.forEach((child) => {\n attrs.push(child.attrs);\n });\n return attrs;\n};\n\nconst CALLOUT_ICONS = {\n note: StickyNote,\n tip: Lightbulb,\n info: Info,\n warning: CircleAlert,\n danger: OctagonAlert,\n};\n\nexport function Callout({ node, children }: BlockProps) {\n const type = (node.attrs.type ?? \"info\") as keyof typeof CALLOUT_ICONS;\n const Icon = CALLOUT_ICONS[type] ?? Info;\n return (\n <div className=\"te-callout\" data-type={type} role=\"note\">\n <Icon className=\"te-callout__icon\" aria-hidden />\n <div className=\"te-callout__body\">\n {node.attrs.title && <p className=\"te-callout__title\">{node.attrs.title}</p>}\n {children}\n </div>\n </div>\n );\n}\n\nexport function Tabs({ node, children }: BlockProps) {\n return (\n <DocsTabs className=\"te-tabs\" labels={childAttrs(node).map((attrs) => attrs.label)}>\n {children}\n </DocsTabs>\n );\n}\n\nexport function CodeGroup({ node, children }: BlockProps) {\n const labels = childAttrs(node).map(\n (attrs, index) => attrs.title ?? attrs.language ?? `Code ${index + 1}`,\n );\n return (\n <DocsTabs className=\"te-tabs te-code-group\" labels={labels}>\n {children}\n </DocsTabs>\n );\n}\n\nexport function Steps({ children }: BlockProps) {\n return <ol className=\"te-steps\">{children}</ol>;\n}\n\nexport function Step({ children }: BlockProps) {\n return <li className=\"te-step\">{children}</li>;\n}\n\nexport function Cards({ children }: BlockProps) {\n return <div className=\"te-cards\">{children}</div>;\n}\n\n/** Card icons are lucide names, written in Fumadocs as `<BookOpen />`. */\nconst iconName = (name: string) =>\n name\n .replace(/([a-z0-9])([A-Z])/g, \"$1-$2\")\n .replace(/([A-Za-z])([0-9])/g, \"$1-$2\")\n .toLowerCase() as IconName;\n\nexport function Card({ node, children }: BlockProps) {\n const { title, href, icon } = node.attrs;\n const body = (\n <>\n {icon && (\n <DynamicIcon name={iconName(icon)} className=\"te-card__icon\" aria-hidden />\n )}\n <span className=\"te-card__title\">{title}</span>\n {node.childCount > 0 && <div className=\"te-card__body\">{children}</div>}\n </>\n );\n return href ? (\n <a className=\"te-card\" href={href}>\n {body}\n </a>\n ) : (\n <div className=\"te-card\">{body}</div>\n );\n}\n\nexport function Accordions({ children }: BlockProps) {\n return <div className=\"te-accordions\">{children}</div>;\n}\n\nexport function Accordion({ node, children }: BlockProps) {\n return (\n <details className=\"te-accordion\">\n <summary className=\"te-accordion__title\">{node.attrs.title}</summary>\n <div className=\"te-accordion__body\">{children}</div>\n </details>\n );\n}\n\nexport function TypeTable({ node }: BlockProps) {\n const rows = (node.attrs.rows ?? []) as TypeTableRow[];\n return (\n <div className=\"te-type-table\">\n <table>\n <thead>\n <tr>\n <th>Prop</th>\n <th>Type</th>\n <th>Default</th>\n <th>Description</th>\n </tr>\n </thead>\n <tbody>\n {rows.map((row) => (\n <tr key={row.name}>\n <td>\n <code>{row.name}</code>\n {row.required && (\n <span className=\"te-type-table__required\"> (required)</span>\n )}\n </td>\n <td>\n <code>{row.type}</code>\n </td>\n <td>{row.default === null ? \"—\" : <code>{row.default}</code>}</td>\n <td>{row.description ?? \"\"}</td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n\nexport const docsBlockMapping = {\n callout: Callout,\n tabs: Tabs,\n tab: ({ children }: BlockProps) => <>{children}</>,\n codeGroup: CodeGroup,\n steps: Steps,\n step: Step,\n cards: Cards,\n card: Card,\n accordions: Accordions,\n accordion: Accordion,\n typeTable: TypeTable,\n};\n","import React from \"react\";\nimport { renderToReactElement } from \"@tiptap/static-renderer\";\nimport { getSchema } from \"@tiptap/core\";\nimport type { Node as ProseMirrorNode } from \"@tiptap/pm/model\";\nimport { extractTextFromNode } from \"./extract-text-from-node\";\nimport emptyDoc from \"./empty-doc\";\nimport { createExtensions } from \"./extensions\";\nimport { createId } from \"./create-id\";\nimport type { TextEditorContent } from \"./text-editor-content\";\nimport type { TextRendererTheme } from \"./renderer-theme\";\nimport { cn } from \"./lib/cn\";\nimport { RenderedCodeBlock } from \"./components/rendered-code-block\";\nimport { extractDocsHeadings } from \"./docs/headings\";\nimport { docsBlockMapping } from \"./components/docs-blocks\";\n\ninterface TextRendererProps {\n profile?: \"default\" | \"documentation\";\n json: TextEditorContent;\n className?: string;\n theme?: TextRendererTheme;\n}\n\nconst typographyClasses = (typography?: {\n fontFamily?: string;\n fontSize?: string;\n fontWeight?: string;\n lineHeight?: string;\n letterSpacing?: string;\n textTransform?: string;\n textDecoration?: string;\n textOverflow?: string;\n}) => [\n typography?.fontFamily,\n typography?.fontSize,\n typography?.fontWeight,\n typography?.lineHeight,\n typography?.letterSpacing,\n typography?.textTransform,\n typography?.textDecoration,\n typography?.textOverflow,\n];\n\nfunction removeEmptyTextNodes(node: any): any {\n if (!node || typeof node !== \"object\") {\n return node;\n }\n\n if (node.type === \"text\" && node.text === \"\") {\n return undefined;\n }\n\n if (!Array.isArray(node.content)) {\n return node;\n }\n\n const content = node.content\n .map(removeEmptyTextNodes)\n .filter((child: any) => child !== undefined);\n\n return {\n ...node,\n content,\n };\n}\n\n/**\n * Renders TipTap `TextEditorContent` JSON as static React elements — used to\n * display rich text saved by the `Editor` (e.g. inside a block's body). When\n * a `theme` is provided, headings/paragraphs/links pick up its typography;\n * otherwise plain semantic HTML tags are used.\n */\nexport function TextRenderer({\n json,\n className,\n theme,\n profile = \"default\",\n}: TextRendererProps) {\n const extensions = createExtensions();\n const content = removeEmptyTextNodes(\n (json as any) ?? (emptyDoc as any),\n ) as TextEditorContent;\n const docsHeadings = profile === \"documentation\" ? extractDocsHeadings(content) : [];\n // React can replay each mapped node (StrictMode, hydration, or a retry).\n // Bind IDs before rendering instead of consuming an iterator in a component.\n const renderContent =\n profile === \"documentation\" ? getSchema(extensions).nodeFromJSON(content) : content;\n const headingIds = new WeakMap<ProseMirrorNode, string>();\n if (profile === \"documentation\") {\n let headingIndex = 0;\n (renderContent as ProseMirrorNode).descendants((node) => {\n if (node.type.name === \"heading\") {\n headingIds.set(node, docsHeadings[headingIndex++].id);\n }\n });\n }\n\n const rendered = renderToReactElement({\n extensions,\n content: renderContent,\n options: {\n nodeMapping: {\n paragraph: ({ children }) => {\n const classes = cn(\n \"text-base\",\n ...typographyClasses(theme?.typography?.text1),\n );\n return <p className={classes}>{children}</p>;\n },\n hardBreak: () => <br />,\n heading: ({ node, children }) => {\n const level = node?.attrs?.level ?? 1;\n // Extract text from the node structure (same as extractHeadings does)\n const textContent = extractTextFromNode(node);\n const id =\n profile === \"documentation\" ? headingIds.get(node) : createId(textContent);\n\n if (!theme) {\n const Tag = `h${level}` as React.ElementType;\n return <Tag id={id}>{children}</Tag>;\n }\n\n if (level === 1) {\n const classes = cn(\n \"scroll-m-20 text-4xl font-bold tracking-tight\",\n ...typographyClasses(theme?.typography?.header1),\n );\n return (\n <h1 id={id} className={classes}>\n {children}\n </h1>\n );\n }\n if (level === 2) {\n const classes = cn(\n \"scroll-m-20 text-3xl font-bold tracking-tight\",\n ...typographyClasses(theme?.typography?.header2),\n );\n return (\n <h2 id={id} className={classes}>\n {children}\n </h2>\n );\n }\n const classes = cn(\n \"scroll-m-20 text-2xl font-semibold tracking-normal\",\n ...typographyClasses(\n profile === \"documentation\" && level >= 4\n ? (theme?.typography?.header4 ?? theme?.typography?.header3)\n : theme?.typography?.header3,\n ),\n );\n const Tag = (\n profile === \"documentation\" ? `h${level}` : \"h3\"\n ) as React.ElementType;\n return (\n <Tag id={id} className={classes}>\n {children}\n </Tag>\n );\n },\n ...docsBlockMapping,\n codeBlock: ({ node, children }) => (\n <RenderedCodeBlock\n node={node}\n language={node?.attrs?.language}\n title={node?.attrs?.title}\n >\n {children}\n </RenderedCodeBlock>\n ),\n codeMirror: ({ node, children }) => (\n <RenderedCodeBlock node={node}>{children}</RenderedCodeBlock>\n ),\n },\n markMapping: {\n link: ({ mark, children }) => {\n const href = mark?.attrs?.href;\n const linkStyle = theme?.interactives?.link;\n const classes = cn(\n \"font-medium cursor-pointer\",\n ...typographyClasses(theme?.typography?.link),\n linkStyle?.padding?.x,\n linkStyle?.padding?.y,\n linkStyle?.border?.width,\n linkStyle?.border?.radius,\n linkStyle?.border?.style,\n linkStyle?.custom,\n );\n return (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={classes}\n style={{\n textShadow: linkStyle?.textShadow || undefined,\n }}\n >\n {children}\n </a>\n );\n },\n highlight: ({ children }) => (\n <mark className=\"bg-accent text-accent-foreground\">{children}</mark>\n ),\n },\n },\n });\n\n const combinedClassName = [\"tiptap-renderer\", className].filter(Boolean).join(\" \");\n\n return (\n <div className=\"text-editor flex flex-col gap-4\">\n <div className={combinedClassName}>{rendered}</div>\n </div>\n );\n}\n\nexport default TextRenderer;\n","import type { TextEditorContent } from \"./text-editor-content\";\n\nfunction createParagraphNode(text: string) {\n const lines = text.split(\"\\n\");\n const content: Record<string, unknown>[] = [];\n\n lines.forEach((line, index) => {\n if (line) {\n content.push({\n type: \"text\",\n text: line,\n });\n }\n\n if (index < lines.length - 1) {\n content.push({\n type: \"hardBreak\",\n });\n }\n });\n\n return {\n type: \"paragraph\",\n ...(content.length ? { content } : {}),\n };\n}\n\n/** Normalizes a plain string or an already-valid TipTap doc into `TextEditorContent`. */\nexport function normalizeTextEditorContent(\n json: TextEditorContent | string,\n): TextEditorContent {\n if (json && typeof json === \"object\" && \"type\" in json && json.type === \"doc\") {\n return json as TextEditorContent;\n }\n\n const text = typeof json === \"string\" ? json.replace(/\\r\\n?/g, \"\\n\") : \"\";\n\n return {\n type: \"doc\",\n content: text\n ? text.split(/\\n{2,}/).map((paragraph) => createParagraphNode(paragraph))\n : [],\n };\n}\n","/** Recursively concatenates all plain text out of a TipTap JSON content tree. */\nexport function extractTextFromTextEditorContent(content: unknown): string {\n if (typeof content === \"string\") {\n return content;\n }\n\n if (!content || typeof content !== \"object\") {\n return \"\";\n }\n\n const record = content as Record<string, unknown>;\n const ownText = typeof record.text === \"string\" ? record.text : \"\";\n const children = Array.isArray(record.content)\n ? record.content.map(extractTextFromTextEditorContent).join(\"\")\n : \"\";\n\n return `${ownText}${children}`;\n}\n","import type { TextEditorContent } from \"./text-editor-content\";\n\nfunction appendEllipsisToLastTextNode(nodes: any[]): any[] {\n for (let i = nodes.length - 1; i >= 0; i--) {\n const node = nodes[i];\n\n if (!node) {\n continue;\n }\n\n if (node.type === \"text\" && typeof node.text === \"string\") {\n if (!node.text.endsWith(\"...\")) {\n nodes[i] = {\n ...node,\n text: `${node.text.trimEnd()}...`,\n };\n }\n return nodes;\n }\n\n if (Array.isArray(node.content) && node.content.length) {\n nodes[i] = {\n ...node,\n content: appendEllipsisToLastTextNode([...node.content]),\n };\n return nodes;\n }\n }\n\n return nodes;\n}\n\nfunction truncateNodes(\n nodes: any[],\n remaining: number,\n): {\n nodes: any[];\n remaining: number;\n truncated: boolean;\n} {\n const truncatedNodes: any[] = [];\n let truncated = false;\n\n for (let index = 0; index < nodes.length; index++) {\n const node = nodes[index];\n\n if (!node) {\n continue;\n }\n\n if (remaining <= 0) {\n truncated = true;\n break;\n }\n\n if (node.type === \"text\" && typeof node.text === \"string\") {\n if (node.text.length <= remaining) {\n truncatedNodes.push(node);\n remaining -= node.text.length;\n } else {\n truncatedNodes.push({\n ...node,\n text: node.text.slice(0, remaining).trimEnd(),\n });\n remaining = 0;\n truncated = true;\n break;\n }\n\n continue;\n }\n\n if (node.type === \"hardBreak\") {\n truncatedNodes.push(node);\n remaining -= 1;\n continue;\n }\n\n if (Array.isArray(node.content)) {\n const result = truncateNodes(node.content, remaining);\n remaining = result.remaining;\n\n if (result.nodes.length > 0) {\n truncatedNodes.push({\n ...node,\n content: result.nodes,\n });\n }\n\n if (result.truncated) {\n truncated = true;\n break;\n }\n\n continue;\n }\n\n truncatedNodes.push(node);\n }\n\n if (truncated) {\n return {\n nodes: appendEllipsisToLastTextNode(truncatedNodes),\n remaining,\n truncated,\n };\n }\n\n return {\n nodes: truncatedNodes,\n remaining,\n truncated,\n };\n}\n\nexport function truncateTextEditorContent(\n json: TextEditorContent,\n characterLimit?: number,\n): TextEditorContent {\n if (!characterLimit || characterLimit <= 0) {\n return json;\n }\n\n const content = Array.isArray((json as any)?.content) ? (json as any).content : [];\n const result = truncateNodes(content, characterLimit);\n\n return {\n ...(json as any),\n content: result.nodes,\n };\n}\n"]}