neuphlo-editor 0.3.13 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -22
- package/dist/chunk-M6GRNJJ6.js +366 -0
- package/dist/chunk-M6GRNJJ6.js.map +1 -0
- package/dist/editor-DI3_SEDt.d.cts +29 -0
- package/dist/editor-DI3_SEDt.d.ts +29 -0
- package/dist/headless/index.cjs +345 -0
- package/dist/headless/index.cjs.map +1 -0
- package/dist/headless/index.d.cts +70 -0
- package/dist/headless/index.d.ts +70 -0
- package/dist/headless/index.js +35 -0
- package/dist/headless/index.js.map +1 -0
- package/dist/highlight.css +3 -0
- package/dist/react/index.cjs +1223 -3
- package/dist/react/index.cjs.map +1 -0
- package/dist/react/index.css +434 -0
- package/dist/react/index.css.map +1 -0
- package/dist/react/index.d.cts +22 -9
- package/dist/react/index.d.ts +22 -9
- package/dist/react/index.js +937 -3
- package/dist/react/index.js.map +1 -0
- package/dist/styles.css +374 -470
- package/dist/tailwind.css +462 -0
- package/package.json +55 -51
- package/dist/index.cjs +0 -3
- package/dist/index.d.cts +0 -4
- package/dist/index.d.ts +0 -4
- package/dist/index.js +0 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/headless/extensions/extension-kit.ts","../../src/react/menus/TextMenu.tsx","../../src/react/menus/MenuList.tsx","../../src/react/menus/LinkPopover.tsx","../../src/react/menus/SlashMenu.tsx","../../src/react/Editor.tsx"],"sourcesContent":["import { StarterKit, Placeholder, CodeBlock, Link } from \".\"\nimport {\n Command as SlashCommand,\n renderItems as renderSlashItems,\n} from \"./slash-command\"\n\nexport const ExtensionKit = () => [\n StarterKit.configure({}),\n CodeBlock,\n Link,\n Placeholder.configure({\n placeholder: ({ node }: any) => {\n if (node.type.name === \"heading\") {\n return `Heading ${node.attrs.level}`\n }\n return \"Press '/' for commands\"\n },\n includeChildren: true,\n }),\n SlashCommand.configure({\n suggestion: {\n char: \"/\",\n render: renderSlashItems,\n },\n }),\n]\n\nexport default ExtensionKit\n","import { useCurrentEditor } from \"@tiptap/react\"\nimport { useEffect, useState } from \"react\"\nimport { EditorBubble } from \"../../headless\"\nimport {\n IconBold,\n IconItalic,\n IconStrikethrough,\n IconArrowBackUp,\n} from \"@tabler/icons-react\"\nimport { MenuList } from \"./MenuList\"\nimport { LinkPopover } from \"./LinkPopover\"\n\nexport type TextMenuProps = {\n className?: string\n options?: Record<string, unknown>\n}\n\nexport function TextMenu({ className, options }: TextMenuProps) {\n const { editor } = useCurrentEditor()\n if (!editor) return null\n\n const [, setTick] = useState(0)\n useEffect(() => {\n const update = () => setTick((v) => v + 1)\n editor.on(\"selectionUpdate\", update)\n editor.on(\"transaction\", update)\n editor.on(\"update\", update)\n return () => {\n editor.off(\"selectionUpdate\", update)\n editor.off(\"transaction\", update)\n editor.off(\"update\", update)\n }\n }, [editor])\n\n const hasAnyMarksInSelection = () => {\n const anyEditor: any = editor\n const state = anyEditor.state\n const sel: any = state.selection\n let has = false\n state.doc.nodesBetween(sel.from, sel.to, (node: any) => {\n if (node.isText && node.marks && node.marks.length > 0) {\n has = true\n return false\n }\n return undefined\n })\n if (!has && sel.empty) {\n const marks = state.storedMarks || sel.$from.marks()\n if (marks && marks.length > 0) has = true\n }\n return has\n }\n\n return (\n <EditorBubble\n options={{ placement: \"bottom\", offset: 8, ...(options ?? {}) }}\n >\n <div className={className ? `bubble-menu ${className}` : \"bubble-menu\"}>\n <MenuList editor={editor} />\n <button\n type=\"button\"\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => (editor as any).chain().focus().toggleBold().run()}\n className={`nph-btn nph-btn-ghost nph-btn-xs nph-btn-icon${editor.isActive(\"bold\") ? \" is-active\" : \"\"}`}\n disabled={editor.isActive(\"code\") || editor.isActive(\"codeBlock\")}\n aria-disabled={\n editor.isActive(\"code\") || editor.isActive(\"codeBlock\")\n }\n aria-pressed={editor.isActive(\"bold\")}\n aria-label=\"Toggle bold\"\n >\n <IconBold size={16} />\n </button>\n <button\n type=\"button\"\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => (editor as any).chain().focus().toggleItalic().run()}\n className={`nph-btn nph-btn-ghost nph-btn-xs nph-btn-icon${editor.isActive(\"italic\") ? \" is-active\" : \"\"}`}\n disabled={editor.isActive(\"code\") || editor.isActive(\"codeBlock\")}\n aria-disabled={\n editor.isActive(\"code\") || editor.isActive(\"codeBlock\")\n }\n aria-pressed={editor.isActive(\"italic\")}\n aria-label=\"Toggle italic\"\n >\n <IconItalic size={16} />\n </button>\n <button\n type=\"button\"\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => (editor as any).chain().focus().toggleStrike().run()}\n className={`nph-btn nph-btn-ghost nph-btn-xs nph-btn-icon${editor.isActive(\"strike\") ? \" is-active\" : \"\"}`}\n disabled={editor.isActive(\"code\") || editor.isActive(\"codeBlock\")}\n aria-disabled={\n editor.isActive(\"code\") || editor.isActive(\"codeBlock\")\n }\n aria-pressed={editor.isActive(\"strike\")}\n aria-label=\"Toggle strike\"\n >\n <IconStrikethrough size={16} />\n </button>\n\n <LinkPopover editor={editor} hideWhenUnavailable={false} />\n\n {(() => {\n const isHeading =\n editor.isActive(\"heading\", { level: 1 }) ||\n editor.isActive(\"heading\", { level: 2 }) ||\n editor.isActive(\"heading\", { level: 3 }) ||\n editor.isActive(\"heading\", { level: 4 })\n const isList =\n editor.isActive(\"bulletList\") || editor.isActive(\"orderedList\")\n const isBlockquote = editor.isActive(\"blockquote\")\n const isCodeBlock = editor.isActive(\"codeBlock\")\n const hasInlineMarks = hasAnyMarksInSelection()\n\n const isPlainParagraph =\n editor.isActive(\"paragraph\") &&\n !isHeading &&\n !isList &&\n !isBlockquote &&\n !isCodeBlock &&\n !hasInlineMarks\n\n return (\n <button\n type=\"button\"\n onMouseDown={(e) => e.preventDefault()}\n onClick={() =>\n (editor as any)\n .chain()\n .focus()\n .clearNodes()\n .setParagraph()\n .unsetAllMarks()\n .run()\n }\n className=\"nph-btn nph-btn-ghost nph-btn-xs nph-btn-icon\"\n aria-label=\"Revert to paragraph\"\n title=\"Revert to paragraph\"\n disabled={isPlainParagraph}\n aria-disabled={isPlainParagraph}\n >\n <IconArrowBackUp size={16} />\n </button>\n )\n })()}\n </div>\n </EditorBubble>\n )\n}\n\nexport default TextMenu\n","import React, { useCallback, useEffect, useRef, useState } from \"react\"\nimport {\n IconTypography,\n IconH1,\n IconH2,\n IconH3,\n IconH4,\n IconList,\n IconListNumbers,\n IconBlockquote,\n IconCode,\n IconChevronDown,\n IconSourceCode,\n} from \"@tabler/icons-react\"\n\nexport type MenuListProps = {\n editor: any\n className?: string\n style?: React.CSSProperties\n onSelect?: () => void\n buttonClassName?: string\n}\n\nexport function MenuList({\n editor,\n className,\n style,\n onSelect,\n buttonClassName,\n}: MenuListProps) {\n const [open, setOpen] = useState(false)\n const [label, setLabel] = useState(\"Paragraph\")\n const rootRef = useRef<HTMLDivElement | null>(null)\n\n const computeLabel = useCallback(() => {\n if (!editor) return \"Paragraph\"\n if (editor.isActive(\"heading\", { level: 1 })) return \"Heading 1\"\n if (editor.isActive(\"heading\", { level: 2 })) return \"Heading 2\"\n if (editor.isActive(\"heading\", { level: 3 })) return \"Heading 3\"\n if (editor.isActive(\"heading\", { level: 4 })) return \"Heading 4\"\n if (editor.isActive(\"bulletList\")) return \"Bullet list\"\n if (editor.isActive(\"orderedList\")) return \"Ordered list\"\n if (editor.isActive(\"blockquote\")) return \"Quote\"\n if (editor.isActive(\"code\")) return \"Code\"\n if (editor.isActive(\"codeBlock\")) return \"Code Block\"\n return \"Paragraph\"\n }, [editor])\n\n useEffect(() => {\n setLabel(computeLabel())\n if (!editor) return\n const update = () => setLabel(computeLabel())\n editor.on(\"selectionUpdate\", update)\n editor.on(\"transaction\", update)\n editor.on(\"update\", update)\n return () => {\n editor.off(\"selectionUpdate\", update)\n editor.off(\"transaction\", update)\n editor.off(\"update\", update)\n }\n }, [editor, computeLabel])\n\n useEffect(() => {\n if (!editor) return\n const close = () => setOpen(false)\n editor.on(\"selectionUpdate\", close)\n editor.on(\"blur\", close)\n return () => {\n editor.off(\"selectionUpdate\", close)\n editor.off(\"blur\", close)\n }\n }, [editor])\n\n useEffect(() => {\n const handlePointerDown = (e: MouseEvent) => {\n if (!open) return\n const el = rootRef.current\n if (!el) return\n if (!el.contains(e.target as Node)) setOpen(false)\n }\n document.addEventListener(\"pointerdown\", handlePointerDown)\n return () => document.removeEventListener(\"pointerdown\", handlePointerDown)\n }, [open])\n\n const handle = (fn: () => void) => () => {\n fn()\n onSelect?.()\n setOpen(false)\n }\n\n const isActive = useCallback((name: string) => label === name, [label])\n\n return (\n <div ref={rootRef} className=\"nph-dropdown\">\n <button\n type=\"button\"\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => setOpen((v) => !v)}\n className={\n buttonClassName ??\n `nph-btn nph-btn-ghost nph-btn-xs${open || label !== \"Paragraph\" ? \" is-active\" : \"\"}`\n }\n aria-expanded={open}\n aria-label=\"Change block type\"\n >\n <span style={{ display: \"inline-flex\", alignItems: \"center\", gap: 4 }}>\n <span style={{ fontSize: 12 }}>{label}</span>\n <IconChevronDown size={16} />\n </span>\n </button>\n\n {open ? (\n <div\n className=\"nph-dropdown__panel nph-command\"\n onMouseDown={(e) => e.preventDefault()}\n >\n <div\n className={className ? className : \"nph-command__list\"}\n style={{ maxHeight: 240, ...(style ?? {}) }}\n >\n <button\n type=\"button\"\n className={`nph-command__item${isActive(\"Paragraph\") ? \" is-active\" : \"\"}`}\n aria-selected={isActive(\"Paragraph\")}\n onClick={handle(() =>\n (editor as any).chain().focus().setParagraph().run()\n )}\n >\n <IconTypography size={16} />\n <span>Paragraph</span>\n </button>\n\n <button\n type=\"button\"\n className={`nph-command__item${isActive(\"Heading 1\") ? \" is-active\" : \"\"}`}\n aria-selected={isActive(\"Heading 1\")}\n onClick={handle(() =>\n (editor as any)\n .chain()\n .focus()\n .toggleHeading({ level: 1 })\n .run()\n )}\n >\n <IconH1 size={16} />\n <span>Heading 1</span>\n </button>\n\n <button\n type=\"button\"\n className={`nph-command__item${isActive(\"Heading 2\") ? \" is-active\" : \"\"}`}\n aria-selected={isActive(\"Heading 2\")}\n onClick={handle(() =>\n (editor as any)\n .chain()\n .focus()\n .toggleHeading({ level: 2 })\n .run()\n )}\n >\n <IconH2 size={16} />\n <span>Heading 2</span>\n </button>\n\n <button\n type=\"button\"\n className={`nph-command__item${isActive(\"Heading 3\") ? \" is-active\" : \"\"}`}\n aria-selected={isActive(\"Heading 3\")}\n onClick={handle(() =>\n (editor as any)\n .chain()\n .focus()\n .toggleHeading({ level: 3 })\n .run()\n )}\n >\n <IconH3 size={16} />\n <span>Heading 3</span>\n </button>\n\n <button\n type=\"button\"\n className={`nph-command__item${isActive(\"Heading 4\") ? \" is-active\" : \"\"}`}\n aria-selected={isActive(\"Heading 4\")}\n onClick={handle(() =>\n (editor as any)\n .chain()\n .focus()\n .toggleHeading({ level: 4 })\n .run()\n )}\n >\n <IconH4 size={16} />\n <span>Heading 4</span>\n </button>\n\n <button\n type=\"button\"\n className={`nph-command__item${isActive(\"Bullet list\") ? \" is-active\" : \"\"}`}\n aria-selected={isActive(\"Bullet list\")}\n onClick={handle(() =>\n (editor as any).chain().focus().toggleBulletList().run()\n )}\n >\n <IconList size={16} />\n <span>Bullet list</span>\n </button>\n\n <button\n type=\"button\"\n className={`nph-command__item${isActive(\"Ordered list\") ? \" is-active\" : \"\"}`}\n aria-selected={isActive(\"Ordered list\")}\n onClick={handle(() =>\n (editor as any).chain().focus().toggleOrderedList().run()\n )}\n >\n <IconListNumbers size={16} />\n <span>Ordered list</span>\n </button>\n\n <button\n type=\"button\"\n className={`nph-command__item${isActive(\"Quote\") ? \" is-active\" : \"\"}`}\n aria-selected={isActive(\"Quote\")}\n onClick={handle(() =>\n (editor as any).chain().focus().toggleBlockquote().run()\n )}\n >\n <IconBlockquote size={16} />\n <span>Quote</span>\n </button>\n\n <button\n type=\"button\"\n className={`nph-command__item${isActive(\"Code\") ? \" is-active\" : \"\"}`}\n aria-selected={isActive(\"Code\")}\n onClick={handle(() =>\n (editor as any).chain().focus().toggleCode().run()\n )}\n >\n <IconCode size={16} />\n <span>Code</span>\n </button>\n\n <button\n type=\"button\"\n className={`nph-command__item${isActive(\"Code Block\") ? \" is-active\" : \"\"}`}\n aria-selected={isActive(\"Code Block\")}\n onClick={handle(() =>\n (editor as any).chain().focus().toggleCodeBlock().run()\n )}\n >\n <IconSourceCode size={16} />\n <span>Code Block</span>\n </button>\n </div>\n </div>\n ) : null}\n </div>\n )\n}\n\nexport default MenuList\n","import React, { useEffect, useMemo, useRef, useState } from \"react\"\nimport {\n IconLink,\n IconExternalLink,\n IconTrash,\n IconCornerDownLeft,\n} from \"@tabler/icons-react\"\n\nexport type LinkPopoverProps = {\n editor: any | null\n hideWhenUnavailable?: boolean\n autoOpenOnLinkActive?: boolean\n onSetLink?: () => void\n onOpenChange?: (isOpen: boolean) => void\n}\n\nexport function LinkPopover({\n editor,\n hideWhenUnavailable = false,\n autoOpenOnLinkActive = true,\n onSetLink,\n onOpenChange,\n}: LinkPopoverProps) {\n const [open, setOpen] = useState(false)\n const [url, setUrl] = useState<string>(\"\")\n const inputRef = useRef<HTMLInputElement | null>(null)\n const rootRef = useRef<HTMLDivElement | null>(null)\n\n const isInCode =\n !!editor?.isActive?.(\"code\") || !!editor?.isActive?.(\"codeBlock\")\n const isActive = !!editor?.isActive?.(\"link\")\n const currentHref: string = useMemo(\n () =>\n editor?.getAttributes ? (editor.getAttributes(\"link\")?.href ?? \"\") : \"\",\n [editor, editor?.state?.selection?.from, editor?.state?.selection?.to]\n )\n\n const canSet = useMemo(() => {\n if (!editor || isInCode) return false\n try {\n return editor\n .can()\n .chain()\n .focus()\n .setLink({ href: \"https://example.com\" })\n .run()\n } catch (_) {\n return false\n }\n }, [editor, isInCode])\n\n useEffect(() => {\n if (!editor) return\n const update = () => {\n const next = editor.getAttributes(\"link\")?.href ?? \"\"\n setUrl(next)\n const linkActive = editor.isActive(\"link\")\n if (autoOpenOnLinkActive && editor.isFocused && linkActive) setOpen(true)\n if (!linkActive) setOpen(false)\n }\n update()\n editor.on(\"selectionUpdate\", update)\n editor.on(\"transaction\", update)\n editor.on(\"update\", update)\n return () => {\n editor.off(\"selectionUpdate\", update)\n editor.off(\"transaction\", update)\n editor.off(\"update\", update)\n }\n }, [editor, autoOpenOnLinkActive])\n\n useEffect(() => {\n if (open) inputRef.current?.focus()\n onOpenChange?.(open)\n }, [open, onOpenChange])\n\n if (!editor) return null\n if (hideWhenUnavailable && !canSet && !isActive) return null\n\n const applyLink = () => {\n if (!url) return\n ;(editor as any)\n .chain()\n .focus()\n .extendMarkRange(\"link\")\n .setLink({ href: url })\n .run()\n onSetLink?.()\n setOpen(false)\n }\n\n const removeLink = () => {\n ;(editor as any).chain().focus().unsetLink().run()\n setOpen(false)\n }\n\n // Close when clicking outside of the popover/button container\n useEffect(() => {\n const handler = (e: MouseEvent) => {\n if (!open) return\n const el = rootRef.current\n if (!el) return\n if (!el.contains(e.target as Node)) setOpen(false)\n }\n document.addEventListener(\"pointerdown\", handler)\n return () => document.removeEventListener(\"pointerdown\", handler)\n }, [open])\n\n return (\n <div\n ref={rootRef}\n className=\"nph-dropdown\"\n style={{ position: \"relative\" }}\n >\n <button\n type=\"button\"\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => setOpen((v) => !v)}\n className={`nph-btn nph-btn-ghost nph-btn-xs nph-btn-icon${isActive ? \" is-active\" : \"\"}`}\n aria-label={isActive ? \"Edit link\" : \"Add link\"}\n aria-pressed={isActive}\n aria-expanded={open}\n disabled={isInCode}\n aria-disabled={isInCode}\n title={isActive ? currentHref || \"Edit link\" : \"Add link\"}\n >\n <IconLink size={16} />\n </button>\n\n {open ? (\n <div\n className=\"nph-dropdown__panel\"\n style={{\n padding: 0,\n minWidth: 320,\n background: \"transparent\",\n boxShadow: \"none\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n }}\n role=\"dialog\"\n aria-label=\"Link editor\"\n >\n <div className=\"nph-link-popover\">\n <input\n ref={inputRef}\n type=\"url\"\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n placeholder=\"https://example.com\"\n className=\"nph-link-popover__input\"\n onMouseDown={(e) => {\n e.stopPropagation()\n }}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") {\n e.preventDefault()\n applyLink()\n } else if (e.key === \"Escape\") {\n e.preventDefault()\n setOpen(false)\n }\n }}\n />\n <div className=\"nph-link-popover__divider\" />\n <button\n type=\"button\"\n className=\"nph-btn nph-btn-ghost nph-btn-xs nph-btn-icon\"\n title=\"Apply\"\n onMouseDown={(e) => e.preventDefault()}\n onClick={applyLink}\n disabled={!url}\n >\n <IconCornerDownLeft size={16} />\n </button>\n <button\n type=\"button\"\n className=\"nph-btn nph-btn-ghost nph-btn-xs nph-btn-icon\"\n title=\"Open in new tab\"\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => {\n const target = url || currentHref\n if (target) window.open(target, \"_blank\", \"noopener,noreferrer\")\n }}\n disabled={!url && !currentHref}\n >\n <IconExternalLink size={16} />\n </button>\n <button\n type=\"button\"\n className=\"nph-btn nph-btn-ghost nph-btn-xs nph-btn-icon\"\n title=\"Remove link\"\n onMouseDown={(e) => e.preventDefault()}\n onClick={removeLink}\n disabled={!isActive}\n >\n <IconTrash size={16} />\n </button>\n </div>\n </div>\n ) : null}\n </div>\n )\n}\n\nexport default LinkPopover\n","import { useCurrentEditor } from \"@tiptap/react\"\nimport {\n EditorCommand,\n EditorCommandList,\n EditorCommandItem,\n} from \"../../headless\"\nimport {\n IconBold,\n IconItalic,\n IconStrikethrough,\n IconH1,\n IconH2,\n IconH3,\n IconH4,\n IconList,\n IconListNumbers,\n IconBlockquote,\n IconCode,\n IconSourceCode,\n} from \"@tabler/icons-react\"\n\nexport type SlashMenuProps = {\n className?: string\n}\n\nexport function SlashMenu({ className }: SlashMenuProps) {\n const { editor } = useCurrentEditor()\n if (!editor) return null\n\n return (\n <EditorCommand className={className ?? \"nph-command\"}>\n <EditorCommandList\n className=\"nph-command__list\"\n style={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}\n >\n <EditorCommandItem\n value=\"bold\"\n className=\"nph-command__item\"\n onCommand={({\n editor,\n range,\n }: {\n editor: any\n range: { from: number; to: number }\n }) =>\n (editor as any)\n .chain()\n .focus()\n .deleteRange(range)\n .toggleBold()\n .run()\n }\n >\n <span\n style={{ display: \"inline-flex\", alignItems: \"center\", gap: 8 }}\n >\n <IconBold size={16} />\n <span>Bold</span>\n </span>\n </EditorCommandItem>\n <EditorCommandItem\n value=\"italic\"\n className=\"nph-command__item\"\n onCommand={({\n editor,\n range,\n }: {\n editor: any\n range: { from: number; to: number }\n }) =>\n (editor as any)\n .chain()\n .focus()\n .deleteRange(range)\n .toggleItalic()\n .run()\n }\n >\n <span\n style={{ display: \"inline-flex\", alignItems: \"center\", gap: 8 }}\n >\n <IconItalic size={16} />\n <span>Italic</span>\n </span>\n </EditorCommandItem>\n <EditorCommandItem\n value=\"strike\"\n className=\"nph-command__item\"\n onCommand={({\n editor,\n range,\n }: {\n editor: any\n range: { from: number; to: number }\n }) =>\n (editor as any)\n .chain()\n .focus()\n .deleteRange(range)\n .toggleStrike()\n .run()\n }\n >\n <span\n style={{ display: \"inline-flex\", alignItems: \"center\", gap: 8 }}\n >\n <IconStrikethrough size={16} />\n <span>Strike</span>\n </span>\n </EditorCommandItem>\n <EditorCommandItem\n value=\"heading1 h1\"\n className=\"nph-command__item\"\n onCommand={({\n editor,\n range,\n }: {\n editor: any\n range: { from: number; to: number }\n }) =>\n (editor as any)\n .chain()\n .focus()\n .deleteRange(range)\n .toggleHeading({ level: 1 })\n .run()\n }\n >\n <span\n style={{ display: \"inline-flex\", alignItems: \"center\", gap: 8 }}\n >\n <IconH1 size={16} />\n <span>Heading 1</span>\n </span>\n </EditorCommandItem>\n <EditorCommandItem\n value=\"heading2 h2\"\n className=\"nph-command__item\"\n onCommand={({\n editor,\n range,\n }: {\n editor: any\n range: { from: number; to: number }\n }) =>\n (editor as any)\n .chain()\n .focus()\n .deleteRange(range)\n .toggleHeading({ level: 2 })\n .run()\n }\n >\n <span\n style={{ display: \"inline-flex\", alignItems: \"center\", gap: 8 }}\n >\n <IconH2 size={16} />\n <span>Heading 2</span>\n </span>\n </EditorCommandItem>\n <EditorCommandItem\n value=\"heading3 h3\"\n className=\"nph-command__item\"\n onCommand={({\n editor,\n range,\n }: {\n editor: any\n range: { from: number; to: number }\n }) =>\n (editor as any)\n .chain()\n .focus()\n .deleteRange(range)\n .toggleHeading({ level: 3 })\n .run()\n }\n >\n <span\n style={{ display: \"inline-flex\", alignItems: \"center\", gap: 8 }}\n >\n <IconH3 size={16} />\n <span>Heading 3</span>\n </span>\n </EditorCommandItem>\n <EditorCommandItem\n value=\"heading4 h4\"\n className=\"nph-command__item\"\n onCommand={({\n editor,\n range,\n }: {\n editor: any\n range: { from: number; to: number }\n }) =>\n (editor as any)\n .chain()\n .focus()\n .deleteRange(range)\n .toggleHeading({ level: 4 })\n .run()\n }\n >\n <span\n style={{ display: \"inline-flex\", alignItems: \"center\", gap: 8 }}\n >\n <IconH4 size={16} />\n <span>Heading 4</span>\n </span>\n </EditorCommandItem>\n <EditorCommandItem\n value=\"bullet list ul\"\n className=\"nph-command__item\"\n onCommand={({\n editor,\n range,\n }: {\n editor: any\n range: { from: number; to: number }\n }) =>\n (editor as any)\n .chain()\n .focus()\n .deleteRange(range)\n .toggleBulletList()\n .run()\n }\n >\n <span\n style={{ display: \"inline-flex\", alignItems: \"center\", gap: 8 }}\n >\n <IconList size={16} />\n <span>Bullet list</span>\n </span>\n </EditorCommandItem>\n <EditorCommandItem\n value=\"ordered list ol\"\n className=\"nph-command__item\"\n onCommand={({\n editor,\n range,\n }: {\n editor: any\n range: { from: number; to: number }\n }) =>\n (editor as any)\n .chain()\n .focus()\n .deleteRange(range)\n .toggleOrderedList()\n .run()\n }\n >\n <span\n style={{ display: \"inline-flex\", alignItems: \"center\", gap: 8 }}\n >\n <IconListNumbers size={16} />\n <span>Ordered list</span>\n </span>\n </EditorCommandItem>\n <EditorCommandItem\n value=\"quote blockquote\"\n className=\"nph-command__item\"\n onCommand={({\n editor,\n range,\n }: {\n editor: any\n range: { from: number; to: number }\n }) =>\n (editor as any)\n .chain()\n .focus()\n .deleteRange(range)\n .toggleBlockquote()\n .run()\n }\n >\n <span\n style={{ display: \"inline-flex\", alignItems: \"center\", gap: 8 }}\n >\n <IconBlockquote size={16} />\n <span>Quote</span>\n </span>\n </EditorCommandItem>\n\n <EditorCommandItem\n value=\"code inline\"\n className=\"nph-command__item\"\n onCommand={({\n editor,\n range,\n }: {\n editor: any\n range: { from: number; to: number }\n }) =>\n (editor as any)\n .chain()\n .focus()\n .deleteRange(range)\n .toggleCode()\n .run()\n }\n >\n <span\n style={{ display: \"inline-flex\", alignItems: \"center\", gap: 8 }}\n >\n <IconCode size={16} />\n <span>Code</span>\n </span>\n </EditorCommandItem>\n\n <EditorCommandItem\n value=\"code block codeblock\"\n className=\"nph-command__item\"\n onCommand={({\n editor,\n range,\n }: {\n editor: any\n range: { from: number; to: number }\n }) =>\n (editor as any)\n .chain()\n .focus()\n .deleteRange(range)\n .toggleCodeBlock()\n .run()\n }\n >\n <span\n style={{ display: \"inline-flex\", alignItems: \"center\", gap: 8 }}\n >\n <IconSourceCode size={16} />\n <span>Code Block</span>\n </span>\n </EditorCommandItem>\n </EditorCommandList>\n </EditorCommand>\n )\n}\n\nexport default SlashMenu\n","import {\n EditorRoot,\n EditorContent,\n handleCommandNavigation,\n type EditorContentProps,\n} from \"../headless\"\nimport ExtensionKit from \"../headless/extensions/extension-kit\"\nimport { SlashMenu, TextMenu } from \"./menus\"\n\nexport type NeuphloEditorProps = {\n content?: string\n className?: string\n editable?: boolean\n immediatelyRender?: boolean\n showTextMenu?: boolean\n showSlashMenu?: boolean\n bubbleMenuOptions?: Record<string, unknown>\n extensions?: any[]\n onUpdate?: EditorContentProps[\"onUpdate\"]\n onCreate?: EditorContentProps[\"onCreate\"]\n}\n\nexport function Editor({\n content,\n className,\n editable = true,\n immediatelyRender = false,\n showTextMenu = true,\n showSlashMenu = true,\n extensions,\n onUpdate,\n onCreate,\n}: NeuphloEditorProps) {\n return (\n <div className={className}>\n <EditorRoot>\n <EditorContent\n onUpdate={onUpdate}\n onCreate={onCreate}\n immediatelyRender={immediatelyRender}\n editable={editable}\n content={content}\n extensions={[...ExtensionKit(), ...(extensions ?? [])]}\n editorProps={{\n attributes: {\n class: \"nph-editor max-w-none outline-none\",\n },\n handleKeyDown: (view, event) => {\n return !!handleCommandNavigation?.(event as any)\n },\n }}\n >\n {showTextMenu ? <TextMenu /> : null}\n {showSlashMenu ? <SlashMenu /> : null}\n </EditorContent>\n </EditorRoot>\n </div>\n )\n}\n"],"mappings":"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","names":["useEffect","useState","useEffect","useRef","useState","jsx","jsxs","jsx","jsxs","useState","useEffect","useCurrentEditor","IconBold","IconItalic","IconStrikethrough","IconH1","IconH2","IconH3","IconH4","IconList","IconListNumbers","IconBlockquote","IconCode","IconSourceCode","jsx","jsxs","useCurrentEditor","editor","jsx","jsxs"]}
|