@optilogic/editor 1.0.0-beta.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/slate-editor.tsx"],"names":["SlateElement","editor"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * SlateEditor Component\n *\n * A reusable rich text editor primitive based on Slate.js\n * Provides consistent theming and can be used as an alternative to textarea\n */\n\nimport * as React from \"react\";\nimport {\n createEditor,\n Descendant,\n Editor,\n Transforms,\n Text,\n Element as SlateElement,\n Range,\n Node,\n BaseEditor,\n Path,\n} from \"slate\";\nimport {\n Slate,\n Editable,\n withReact,\n ReactEditor,\n RenderElementProps,\n RenderLeafProps,\n} from \"slate-react\";\nimport { withHistory, HistoryEditor } from \"slate-history\";\nimport { cn } from \"@optilogic/core\";\n\ntype TagElement = {\n type: \"tag\";\n tag: string;\n children: [{ text: \"\" }];\n};\n\ntype ParagraphElement = {\n type: \"paragraph\";\n children: Descendant[];\n};\n\ntype CustomElement = TagElement | ParagraphElement;\ntype CustomText = { text: string };\n\ndeclare module \"slate\" {\n interface CustomTypes {\n Editor: BaseEditor & ReactEditor & HistoryEditor;\n Element: CustomElement;\n Text: CustomText;\n }\n}\n\nconst isTagElement = (element: CustomElement): element is TagElement => {\n return element.type === \"tag\";\n};\n\nexport interface SlateEditorRef {\n /** Focus the editor */\n focus: () => void;\n /** Clear the editor content */\n clear: () => void;\n /** Get plain text content */\n getText: () => string;\n /** Insert text at cursor */\n insertText: (text: string) => void;\n /** Insert a tag element */\n insertTag: (tag: string) => void;\n}\n\nexport interface SlateEditorProps {\n /** Initial plain text value */\n value?: string;\n /** Callback when content changes (plain text) */\n onChange?: (value: string) => void;\n /** Callback when a tag is created */\n onTagCreate?: (tag: string) => void;\n /** Callback when a tag is deleted */\n onTagDelete?: (tag: string) => void;\n /** Callback when Enter is pressed (without Shift) */\n onSubmit?: (text: string) => void;\n /** Placeholder text */\n placeholder?: string;\n /** Whether the editor is disabled */\n disabled?: boolean;\n /** Whether to enable tag detection (# character) */\n enableTags?: boolean;\n /** Minimum number of rows */\n minRows?: number;\n /** Maximum number of rows before scrolling */\n maxRows?: number;\n /** Additional class names */\n className?: string;\n}\n\nconst withTags = (editor: Editor) => {\n const { isInline, isVoid, deleteBackward, deleteForward } = editor;\n\n editor.isInline = (element) => {\n return element.type === \"tag\" ? true : isInline(element);\n };\n\n editor.isVoid = (element) => {\n return element.type === \"tag\" ? true : isVoid(element);\n };\n\n editor.deleteBackward = (unit) => {\n const { selection } = editor;\n\n if (selection && Range.isCollapsed(selection)) {\n const [tagEntry] = Editor.nodes(editor, {\n match: (n) =>\n !Editor.isEditor(n) && SlateElement.isElement(n) && n.type === \"tag\",\n });\n\n if (tagEntry) {\n const [, path] = tagEntry;\n const after = Editor.after(editor, path);\n if (after && Path.equals(selection.anchor.path, after.path)) {\n Transforms.removeNodes(editor, { at: path });\n return;\n }\n }\n\n const before = Editor.before(editor, selection);\n if (before) {\n const [beforeTagEntry] = Editor.nodes(editor, {\n at: before,\n match: (n) =>\n !Editor.isEditor(n) &&\n SlateElement.isElement(n) &&\n n.type === \"tag\",\n });\n\n if (beforeTagEntry) {\n const [, path] = beforeTagEntry;\n Transforms.removeNodes(editor, { at: path });\n return;\n }\n }\n }\n\n deleteBackward(unit);\n };\n\n editor.deleteForward = (unit) => {\n const { selection } = editor;\n\n if (selection && Range.isCollapsed(selection)) {\n const after = Editor.after(editor, selection);\n if (after) {\n const [afterTagEntry] = Editor.nodes(editor, {\n at: after,\n match: (n) =>\n !Editor.isEditor(n) &&\n SlateElement.isElement(n) &&\n n.type === \"tag\",\n });\n\n if (afterTagEntry) {\n const [, path] = afterTagEntry;\n Transforms.removeNodes(editor, { at: path });\n return;\n }\n }\n }\n\n deleteForward(unit);\n };\n\n return editor;\n};\n\n/**\n * Convert Slate content to plain text\n */\nexport function serializeToText(nodes: Descendant[]): string {\n return nodes\n .map((n) => {\n if (Text.isText(n)) {\n return n.text;\n }\n if (SlateElement.isElement(n)) {\n if (n.type === \"tag\") {\n return `#${n.tag}`;\n }\n return serializeToText(n.children);\n }\n return \"\";\n })\n .join(\"\");\n}\n\n/**\n * Convert plain text to Slate nodes (preserving existing tags)\n */\nexport function deserializeFromText(text: string): Descendant[] {\n if (!text) {\n return [{ type: \"paragraph\", children: [{ text: \"\" }] }];\n }\n\n const children: Descendant[] = [];\n const tagRegex = /#([a-zA-Z0-9@#$_-]+(?:--[a-zA-Z0-9_-]+)?)/g;\n let lastIndex = 0;\n let match;\n\n while ((match = tagRegex.exec(text)) !== null) {\n if (match.index > lastIndex) {\n children.push({ text: text.substring(lastIndex, match.index) });\n }\n\n children.push({\n type: \"tag\",\n tag: match[1],\n children: [{ text: \"\" }],\n });\n\n lastIndex = match.index + match[0].length;\n }\n\n if (lastIndex < text.length) {\n children.push({ text: text.substring(lastIndex) });\n }\n\n if (children.length === 0) {\n children.push({ text: \"\" });\n }\n\n return [{ type: \"paragraph\", children }];\n}\n\nconst TagElementRenderer = ({\n attributes,\n children,\n element,\n}: RenderElementProps & { element: TagElement }) => {\n return (\n <span\n {...attributes}\n contentEditable={false}\n className={cn(\n \"inline-flex items-center\",\n \"px-1.5 py-0.5 mx-0.5\",\n \"rounded-md border\",\n \"bg-accent/20 text-accent border-accent/40\",\n \"text-sm font-medium\",\n \"select-none cursor-default\"\n )}\n >\n <span className=\"font-bold\">#</span>\n {element.tag}\n {children}\n </span>\n );\n};\n\nconst DefaultElement = ({ attributes, children }: RenderElementProps) => {\n return <p {...attributes}>{children}</p>;\n};\n\nconst Leaf = ({ attributes, children }: RenderLeafProps) => {\n return <span {...attributes}>{children}</span>;\n};\n\n/**\n * SlateEditor component\n *\n * A rich text editor based on Slate.js with support for inline tags.\n * Can be used as a drop-in replacement for textarea with enhanced features.\n *\n * @example\n * <SlateEditor\n * value={content}\n * onChange={setContent}\n * placeholder=\"Type your message...\"\n * onSubmit={(text) => console.log('Submitted:', text)}\n * />\n */\nexport const SlateEditor = React.forwardRef<SlateEditorRef, SlateEditorProps>(\n (\n {\n value = \"\",\n onChange,\n onTagCreate,\n onTagDelete,\n onSubmit,\n placeholder = \"Type something...\",\n disabled = false,\n enableTags = true,\n minRows = 3,\n maxRows = 8,\n className,\n },\n ref\n ) => {\n const editor = React.useMemo(\n () => withTags(withHistory(withReact(createEditor()))),\n []\n );\n\n const [isCreatingTag, setIsCreatingTag] = React.useState(false);\n const [tagStartPoint, setTagStartPoint] = React.useState<{\n path: Path;\n offset: number;\n } | null>(null);\n const [currentTagText, setCurrentTagText] = React.useState(\"\");\n\n const [editorValue, setEditorValue] = React.useState<Descendant[]>(() =>\n deserializeFromText(value)\n );\n\n React.useEffect(() => {\n const newValue = deserializeFromText(value);\n const currentText = serializeToText(editorValue);\n if (currentText !== value) {\n setEditorValue(newValue);\n Transforms.removeNodes(editor, { at: [] });\n Transforms.insertNodes(editor, newValue, { at: [0] });\n Transforms.select(editor, Editor.start(editor, []));\n }\n }, [value, editor]);\n\n React.useImperativeHandle(\n ref,\n () => ({\n focus: () => {\n ReactEditor.focus(editor);\n },\n clear: () => {\n const newValue: Descendant[] = [\n { type: \"paragraph\", children: [{ text: \"\" }] },\n ];\n setEditorValue(newValue);\n Transforms.select(editor, Editor.start(editor, []));\n },\n getText: () => serializeToText(editorValue),\n insertText: (text: string) => {\n Transforms.insertText(editor, text);\n },\n insertTag: (tag: string) => {\n insertTag(editor, tag);\n onTagCreate?.(tag);\n },\n }),\n [editor, editorValue, onTagCreate]\n );\n\n const handleChange = React.useCallback(\n (newValue: Descendant[]) => {\n setEditorValue(newValue);\n\n if (isCreatingTag && tagStartPoint) {\n const { selection } = editor;\n if (selection && Range.isCollapsed(selection)) {\n const currentPath = selection.anchor.path;\n const currentOffset = selection.anchor.offset;\n\n if (Path.equals(currentPath, tagStartPoint.path)) {\n try {\n const [textNode] = Editor.node(editor, currentPath);\n if (Text.isText(textNode)) {\n const tagText = textNode.text.substring(\n tagStartPoint.offset + 1,\n currentOffset\n );\n setCurrentTagText(tagText);\n }\n } catch {\n // Ignore - node may not exist\n }\n }\n }\n }\n\n const oldTags = new Set<string>();\n const newTags = new Set<string>();\n\n for (const node of Node.descendants(editor, {\n from: [],\n pass: ([n]) => SlateElement.isElement(n) && n.type === \"paragraph\",\n })) {\n const [n] = node;\n if (SlateElement.isElement(n) && n.type === \"tag\") {\n oldTags.add(n.tag);\n }\n }\n\n const extractTags = (nodes: Descendant[]) => {\n for (const node of nodes) {\n if (SlateElement.isElement(node)) {\n if (node.type === \"tag\") {\n newTags.add(node.tag);\n }\n if (\"children\" in node) {\n extractTags(node.children);\n }\n }\n }\n };\n extractTags(newValue);\n\n for (const tag of oldTags) {\n if (!newTags.has(tag)) {\n onTagDelete?.(tag);\n }\n }\n\n const text = serializeToText(newValue);\n onChange?.(text);\n },\n [editor, onChange, onTagDelete, isCreatingTag, tagStartPoint]\n );\n\n const insertTag = (editor: Editor, tag: string) => {\n const tagNode: TagElement = {\n type: \"tag\",\n tag,\n children: [{ text: \"\" }],\n };\n Transforms.insertNodes(editor, tagNode);\n Transforms.move(editor);\n Transforms.insertText(editor, \" \");\n };\n\n const completeTag = React.useCallback(() => {\n if (!isCreatingTag || !tagStartPoint) return;\n\n const { selection } = editor;\n if (!selection || !Range.isCollapsed(selection)) return;\n\n const currentPath = selection.anchor.path;\n const currentOffset = selection.anchor.offset;\n\n if (!Path.equals(currentPath, tagStartPoint.path)) {\n setIsCreatingTag(false);\n setTagStartPoint(null);\n setCurrentTagText(\"\");\n return;\n }\n\n const [textNode] = Editor.node(editor, currentPath);\n if (!Text.isText(textNode)) {\n setIsCreatingTag(false);\n setTagStartPoint(null);\n setCurrentTagText(\"\");\n return;\n }\n\n const tagText = textNode.text.substring(\n tagStartPoint.offset + 1,\n currentOffset\n );\n\n if (!tagText.trim()) {\n setIsCreatingTag(false);\n setTagStartPoint(null);\n setCurrentTagText(\"\");\n return;\n }\n\n const start = { path: currentPath, offset: tagStartPoint.offset };\n const end = { path: currentPath, offset: currentOffset };\n\n Transforms.delete(editor, { at: { anchor: start, focus: end } });\n insertTag(editor, tagText.trim());\n\n onTagCreate?.(tagText.trim());\n\n setIsCreatingTag(false);\n setTagStartPoint(null);\n setCurrentTagText(\"\");\n }, [editor, isCreatingTag, tagStartPoint, onTagCreate]);\n\n const cancelTag = React.useCallback(() => {\n setIsCreatingTag(false);\n setTagStartPoint(null);\n setCurrentTagText(\"\");\n }, []);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (isCreatingTag) {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n completeTag();\n return;\n }\n\n if (event.key === \"Escape\") {\n event.preventDefault();\n cancelTag();\n return;\n }\n }\n\n if (enableTags && event.key === \"#\" && !isCreatingTag) {\n const { selection } = editor;\n if (selection && Range.isCollapsed(selection)) {\n setIsCreatingTag(true);\n setCurrentTagText(\"\");\n setTagStartPoint({\n path: selection.anchor.path,\n offset: selection.anchor.offset,\n });\n }\n }\n\n if (event.key === \"Enter\" && !event.shiftKey && !isCreatingTag) {\n event.preventDefault();\n const text = serializeToText(editorValue);\n if (text.trim() && onSubmit) {\n onSubmit(text.trim());\n }\n return;\n }\n\n if (\n (event.key === \"Backspace\" || event.key === \"Delete\") &&\n event.ctrlKey\n ) {\n const { selection } = editor;\n if (selection && Range.isCollapsed(selection)) {\n const direction =\n event.key === \"Backspace\" ? \"backward\" : \"forward\";\n const pointFn =\n direction === \"backward\" ? Editor.before : Editor.after;\n const point = pointFn(editor, selection, { unit: \"word\" });\n\n if (point) {\n const [tagEntry] = Editor.nodes(editor, {\n at:\n direction === \"backward\"\n ? { anchor: point, focus: selection.anchor }\n : { anchor: selection.anchor, focus: point },\n match: (n) =>\n !Editor.isEditor(n) &&\n SlateElement.isElement(n) &&\n n.type === \"tag\",\n });\n\n if (tagEntry) {\n event.preventDefault();\n const [tagNode, tagPath] = tagEntry;\n if (SlateElement.isElement(tagNode) && tagNode.type === \"tag\") {\n onTagDelete?.(tagNode.tag);\n }\n Transforms.removeNodes(editor, { at: tagPath });\n return;\n }\n }\n }\n }\n },\n [\n editor,\n editorValue,\n isCreatingTag,\n enableTags,\n completeTag,\n cancelTag,\n onSubmit,\n onTagDelete,\n ]\n );\n\n const renderElement = React.useCallback((props: RenderElementProps) => {\n switch (props.element.type) {\n case \"tag\":\n return (\n <TagElementRenderer\n {...props}\n element={props.element as TagElement}\n />\n );\n default:\n return <DefaultElement {...props} />;\n }\n }, []);\n\n const renderLeaf = React.useCallback((props: RenderLeafProps) => {\n return <Leaf {...props} />;\n }, []);\n\n const lineHeight = 24;\n const minHeight = lineHeight * minRows;\n const maxHeight = lineHeight * maxRows;\n\n return (\n <div\n className={cn(\n \"relative w-full rounded-md\",\n \"bg-transparent\",\n disabled && \"opacity-50 cursor-not-allowed\",\n className\n )}\n >\n <Slate\n editor={editor}\n initialValue={editorValue}\n onChange={handleChange}\n >\n <Editable\n readOnly={disabled}\n placeholder={placeholder}\n renderElement={renderElement}\n renderLeaf={renderLeaf}\n onKeyDown={handleKeyDown}\n className={cn(\n \"w-full outline-none\",\n \"text-foreground placeholder:text-muted-foreground\",\n \"leading-6\",\n \"overflow-y-auto overflow-x-hidden\",\n \"whitespace-pre-wrap break-words\"\n )}\n style={{\n minHeight: `${minHeight}px`,\n maxHeight: `${maxHeight}px`,\n wordBreak: \"break-word\",\n overflowWrap: \"break-word\",\n }}\n spellCheck\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n />\n </Slate>\n\n {isCreatingTag && (\n <div className=\"absolute bottom-full left-0 mb-2 flex items-center gap-2.5 animate-in fade-in-0 slide-in-from-bottom-1 duration-150\">\n <div className=\"flex items-center px-2 py-1 rounded-md border shadow-sm bg-accent/20 border-accent/40\">\n <span className=\"font-bold text-sm text-accent\">#</span>\n <span className=\"text-sm font-medium min-w-[2ch] text-accent\">\n {currentTagText || (\n <span className=\"opacity-50 italic\">tag</span>\n )}\n </span>\n </div>\n <span className=\"text-muted-foreground/80 text-[11px]\">\n <kbd className=\"px-1.5 py-0.5 bg-muted rounded text-[10px] font-mono mr-1\">\n Enter\n </kbd>\n or\n <kbd className=\"px-1.5 py-0.5 bg-muted rounded text-[10px] font-mono mx-1\">\n Space\n </kbd>\n to add\n <span className=\"mx-1.5 text-muted-foreground/50\">·</span>\n <kbd className=\"px-1.5 py-0.5 bg-muted rounded text-[10px] font-mono mr-1\">\n Esc\n </kbd>\n to cancel\n </span>\n </div>\n )}\n </div>\n );\n }\n);\n\nSlateEditor.displayName = \"SlateEditor\";\n"]}
package/package.json ADDED
@@ -0,0 +1,69 @@
1
+ {
2
+ "name": "@optilogic/editor",
3
+ "version": "1.0.0-beta.0",
4
+ "description": "Rich text editor component for Optilogic - SlateEditor built on Slate.js",
5
+ "type": "module",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": {
12
+ "types": "./dist/index.d.ts",
13
+ "default": "./dist/index.js"
14
+ },
15
+ "require": {
16
+ "types": "./dist/index.d.cts",
17
+ "default": "./dist/index.cjs"
18
+ }
19
+ }
20
+ },
21
+ "files": [
22
+ "dist",
23
+ "src",
24
+ "README.md"
25
+ ],
26
+ "dependencies": {
27
+ "@optilogic/core": "1.0.0-beta.0"
28
+ },
29
+ "peerDependencies": {
30
+ "react": "^18.0.0 || ^19.0.0",
31
+ "react-dom": "^18.0.0 || ^19.0.0",
32
+ "slate": "^0.100.0",
33
+ "slate-history": "^0.100.0",
34
+ "slate-react": "^0.100.0"
35
+ },
36
+ "devDependencies": {
37
+ "@types/react": "^18.3.0",
38
+ "@types/react-dom": "^18.3.0",
39
+ "react": "^18.3.1",
40
+ "react-dom": "^18.3.1",
41
+ "slate": "^0.110.2",
42
+ "slate-history": "^0.110.3",
43
+ "slate-react": "^0.111.0",
44
+ "tsup": "^8.3.5",
45
+ "typescript": "^5.7.2"
46
+ },
47
+ "keywords": [
48
+ "react",
49
+ "editor",
50
+ "slate",
51
+ "rich-text",
52
+ "optilogic"
53
+ ],
54
+ "license": "MIT",
55
+ "repository": {
56
+ "type": "git",
57
+ "url": "https://github.com/optilogic/opti-ui"
58
+ },
59
+ "publishConfig": {
60
+ "access": "public"
61
+ },
62
+ "scripts": {
63
+ "build": "tsup",
64
+ "dev": "tsup --watch",
65
+ "typecheck": "tsc --noEmit",
66
+ "lint": "eslint src --ext .ts,.tsx",
67
+ "clean": "rm -rf dist .turbo"
68
+ }
69
+ }
package/src/index.ts ADDED
@@ -0,0 +1,7 @@
1
+ export {
2
+ SlateEditor,
3
+ serializeToText,
4
+ deserializeFromText,
5
+ type SlateEditorProps,
6
+ type SlateEditorRef,
7
+ } from "./slate-editor";