trotl-texteditor 1.0.20 → 1.0.21

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.cjs CHANGED
@@ -121,6 +121,14 @@ const COMMANDS = [{
121
121
  cmd: "insertOrderedList",
122
122
  label: "Numbered",
123
123
  icon: "1."
124
+ }, {
125
+ cmd: "indent",
126
+ label: "Indent",
127
+ icon: "↦"
128
+ }, {
129
+ cmd: "outdent",
130
+ label: "Outdent",
131
+ icon: "↤"
124
132
  }, {
125
133
  cmd: "justifyLeft",
126
134
  label: "Left",
@@ -447,6 +455,8 @@ function Editor({
447
455
  "Align Center": "Align Center",
448
456
  "Align Right": "Align Right",
449
457
  Justify: "Justify",
458
+ Indent: "Indent",
459
+ Outdent: "Outdent",
450
460
  "Add tooltip/note to selected text": "Add tooltip/note to selected text",
451
461
  "Insert anchor": "Insert anchor",
452
462
  "Insert horizontal line": "Insert horizontal line",
@@ -855,6 +865,16 @@ function Editor({
855
865
  onInput: onInput$1,
856
866
  onPaste: onPaste$1,
857
867
  onClick: onEditorClick,
868
+ onKeyDown: e => {
869
+ // Tab => indent, Shift+Tab => outdent (do not intercept inside code/pre)
870
+ if (e.key === 'Tab') {
871
+ const sel = document.getSelection();
872
+ const node = sel && sel.anchorNode ? sel.anchorNode.nodeType === Node.TEXT_NODE ? sel.anchorNode.parentElement : sel.anchorNode : null;
873
+ if (node && node.closest && node.closest('pre, code')) return; // allow tab in code blocks
874
+ e.preventDefault();
875
+ if (e.shiftKey) exec$1('outdent');else exec$1('indent');
876
+ }
877
+ },
858
878
  onKeyUp: updateToolbarState,
859
879
  onMouseUp: updateToolbarState,
860
880
  suppressContentEditableWarning: true,
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/components/CodeBlock.jsx","../src/components/defaultContent.js","../src/components/editorCommands.js","../src/components/editorUtils.js","../src/components/formattingFunctions.js","../src/components/insertFunctions.js","../src/components/eventHandlers.js","../src/components/Editor.jsx","../src/index.js"],"sourcesContent":["import React, { useMemo } from \"react\";\r\n\r\nconst DEFAULT_LANGUAGES = [\r\n { value: \"plain\", label: \"Plain\" },\r\n { value: \"js\", label: \"JavaScript\" },\r\n { value: \"ts\", label: \"TypeScript\" },\r\n { value: \"java\", label: \"Java\" },\r\n { value: \"css\", label: \"CSS\" },\r\n { value: \"html\", label: \"HTML\" },\r\n { value: \"json\", label: \"JSON\" },\r\n];\r\n\r\nconst DEFAULT_THEMES = [\r\n { value: \"dark\", label: \"Dark\" },\r\n { value: \"light\", label: \"Light\" },\r\n];\r\n\r\nexport default function CodeBlock({\r\n value = \"\",\r\n language = \"plain\",\r\n theme = \"dark\",\r\n languages = DEFAULT_LANGUAGES,\r\n themes = DEFAULT_THEMES,\r\n onChange = () => {},\r\n onLanguageChange = () => {},\r\n onThemeChange = () => {},\r\n placeholder = \"Paste code here\",\r\n}) {\r\n const normalizedLanguages = useMemo(() => {\r\n if (!Array.isArray(languages) || languages.length === 0) return DEFAULT_LANGUAGES;\r\n if (typeof languages[0] === \"string\") {\r\n return languages.map((item) => ({ value: item, label: item }));\r\n }\r\n return languages;\r\n }, [languages]);\r\n\r\n const currentLanguage = useMemo(\r\n () => normalizedLanguages.find((item) => item.value === language) || normalizedLanguages[0],\r\n [language, normalizedLanguages]\r\n );\r\n\r\n return (\r\n <section className={`code-block code-block-${theme}`} data-language={currentLanguage?.value}>\r\n <header className=\"code-block-toolbar\">\r\n <label className=\"code-block-label\">\r\n Language\r\n <select\r\n className=\"code-block-select\"\r\n value={currentLanguage?.value}\r\n onChange={(event) => onLanguageChange(event.target.value)}\r\n >\r\n {normalizedLanguages.map((item) => (\r\n <option key={item.value} value={item.value}>\r\n {item.label}\r\n </option>\r\n ))}\r\n </select>\r\n </label>\r\n <label className=\"code-block-label\">\r\n Theme\r\n <select\r\n className=\"code-block-select\"\r\n value={theme}\r\n onChange={(event) => onThemeChange(event.target.value)}\r\n >\r\n {themes.map((item) => (\r\n <option key={item.value} value={item.value}>\r\n {item.label}\r\n </option>\r\n ))}\r\n </select>\r\n </label>\r\n </header>\r\n <textarea\r\n className=\"code-block-area\"\r\n value={value}\r\n onChange={(event) => onChange(event.target.value)}\r\n placeholder={placeholder}\r\n spellCheck={false}\r\n />\r\n </section>\r\n );\r\n}\r\n","export const DEFAULT_HTML = `\r\n\t<h1>Welcome</h1>\r\n\t<p>This is a lightweight WYSIWYG editor built without external libraries.</p>\r\n\t<ul>\r\n\t\t<li>Edit text directly</li>\r\n\t\t<li>Use the toolbar for formatting</li>\r\n\t\t<li>Copy, paste, and export HTML</li>\r\n\t</ul>\r\n`;\r\n","export const COMMANDS = [\r\n\t{ cmd: \"bold\", label: \"Bold\", icon: \"B\" },\r\n\t{ cmd: \"italic\", label: \"Italic\", icon: \"I\" },\r\n\t{ cmd: \"underline\", label: \"Underline\", icon: \"U\" },\r\n\t{ cmd: \"strikeThrough\", label: \"Strike\", icon: \"S\" },\r\n\t{ cmd: \"insertUnorderedList\", label: \"Bullets\", icon: \"•\" },\r\n\t{ cmd: \"insertOrderedList\", label: \"Numbered\", icon: \"1.\" },\r\n\t{ cmd: \"justifyLeft\", label: \"Left\", icon: \"⟸\" },\r\n\t{ cmd: \"justifyCenter\", label: \"Center\", icon: \"⇔\" },\r\n\t{ cmd: \"justifyRight\", label: \"Right\", icon: \"⟹\" },\r\n];\r\n","export const escapeHtml = (value) =>\r\n\tvalue\r\n\t\t.replace(/&/g, \"&amp;\")\r\n\t\t.replace(/</g, \"&lt;\")\r\n\t\t.replace(/>/g, \"&gt;\")\r\n\t\t.replace(/\\\"/g, \"&quot;\")\r\n\t\t.replace(/'/g, \"&#039;\");\r\n\r\nexport const exec = (editorRef, cmd, value = null, setHtml, onChange, updateToolbarState) => {\r\n\teditorRef.current?.focus();\r\n\tdocument.execCommand(cmd, false, value);\r\n\r\n\t// If user just toggled an ordered list, strip any leading numeric prefixes\r\n\t// inside list items (e.g. \"1. Item\") so the browser marker doesn't duplicate.\r\n\tif (cmd === \"insertOrderedList\" && editorRef.current) {\r\n\t\tconst lis = editorRef.current.querySelectorAll(\"li\");\r\n\t\tconst leadingNumberRE = /^\\s*\\d+[.)]\\s+/;\r\n\t\tlis.forEach((li) => {\r\n\t\t\t// only strip on plain-text starts (avoid breaking HTML children)\r\n\t\t\tif (li.firstChild && li.firstChild.nodeType === Node.TEXT_NODE) {\r\n\t\t\t\tli.firstChild.textContent = li.firstChild.textContent.replace(leadingNumberRE, \"\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tconst nextHtml = editorRef.current?.innerHTML || \"\";\r\n\tsetHtml(nextHtml);\r\n\r\n\t// avoid flooding parent with identical payloads (prevents some update loops)\r\n\ttry {\r\n\t\tif (editorRef.current) {\r\n\t\t\tconst last = editorRef.current.__lastOnChangeHtml || \"\";\r\n\t\t\tif (last === nextHtml) {\r\n\t\t\t\t// still update toolbar state but skip notifying parent\r\n\t\t\t\tupdateToolbarState();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\teditorRef.current.__lastOnChangeHtml = nextHtml;\r\n\t\t}\r\n\t} catch (err) {\r\n\t\t// ignore\r\n\t}\r\n\r\n\tonChange({ html: nextHtml, text: editorRef.current?.innerText || \"\" });\r\n\tupdateToolbarState();\r\n};\r\n\r\nexport const removeFormat = (exec) => exec(\"removeFormat\");\r\n\r\nexport const clearAll = (editorRef, setHtml, onChange, updateToolbarState) => {\r\n\tif (!editorRef.current) return;\r\n\teditorRef.current.innerHTML = \"<p></p>\";\r\n\tsetHtml(editorRef.current.innerHTML);\r\n\tonChange({ html: editorRef.current.innerHTML, text: editorRef.current.innerText || \"\" });\r\n\tupdateToolbarState();\r\n};\r\n\r\nexport const exportHtml = async (editorRef) => {\r\n\tconst payload = editorRef.current?.innerHTML || \"\";\r\n\tawait navigator.clipboard.writeText(payload);\r\n\talert(\"HTML copied to clipboard.\");\r\n};\r\n","export const applyHeading = (next, exec) => {\r\n\tif (next === \"p\") {\r\n\t\texec(\"formatBlock\", \"P\");\r\n\t\treturn;\r\n\t}\r\n\tif (next === \"pre\") {\r\n\t\texec(\"formatBlock\", \"PRE\");\r\n\t\treturn;\r\n\t}\r\n\texec(\"formatBlock\", next.toUpperCase());\r\n};\r\n\r\nexport const applyFontSize = (next, exec, editorRef, setHtml, updateToolbarState) => {\r\n\tconst selection = window.getSelection();\r\n\tif (!selection || selection.rangeCount === 0) return;\r\n\t\r\n\tconst range = selection.getRangeAt(0);\r\n\tif (range.collapsed) return; // No selection\r\n\t\r\n\texec(\"fontSize\", \"7\");\r\n\tconst fontElements = editorRef.current?.querySelectorAll(\"font[size='7']\") || [];\r\n\tfontElements.forEach((el) => {\r\n\t\tel.removeAttribute(\"size\");\r\n\t\tel.style.fontSize = `${next}px`;\r\n\t});\r\n\tsetHtml(editorRef.current?.innerHTML || \"\");\r\n\tupdateToolbarState();\r\n};\r\n\r\nexport const applyCustomFontSize = (value, exec, editorRef, setHtml, updateToolbarState) => {\r\n\tif (!value || isNaN(value)) return;\r\n\t\r\n\tconst selection = window.getSelection();\r\n\tif (!selection || selection.rangeCount === 0) return;\r\n\t\r\n\tconst range = selection.getRangeAt(0);\r\n\tif (range.collapsed) return; // No selection\r\n\t\r\n\texec(\"fontSize\", \"7\");\r\n\tconst fontElements = editorRef.current?.querySelectorAll(\"font[size='7']\") || [];\r\n\tfontElements.forEach((el) => {\r\n\t\tel.removeAttribute(\"size\");\r\n\t\tel.style.fontSize = `${value}px`;\r\n\t});\r\n\tsetHtml(editorRef.current?.innerHTML || \"\");\r\n\tupdateToolbarState();\r\n};\r\n\r\nexport const applyTextColor = (next, exec) => {\r\n\texec(\"foreColor\", next);\r\n};\r\n\r\nexport const applyBackgroundColor = (next, exec) => {\r\n\texec(\"hiliteColor\", next);\r\n};\r\n\r\nexport const resetColors = (theme, setTextColor, setBackgroundColor, exec) => {\r\n\tconst defaultText = theme === \"dark\" ? \"#e5e7eb\" : \"#1f2937\";\r\n\tconst defaultBg = \"#ffff00\";\r\n\tsetTextColor(defaultText);\r\n\tsetBackgroundColor(defaultBg);\r\n\texec(\"removeFormat\");\r\n};\r\n","import { escapeHtml } from \"./editorUtils.js\";\r\n\r\nexport const insertCodeBlock = (codeValue, codeLanguage, codeTheme, exec, setIsCodeModalOpen, setCodeValue) => {\r\n\tconst safeCode = escapeHtml(codeValue || \"\");\r\n\tconst languageClass = codeLanguage ? `language-${codeLanguage}` : \"language-plain\";\r\n\tconst htmlBlock = `<pre class=\"code-block-shell\" data-theme=\"${codeTheme}\"><code class=\"${languageClass}\">${safeCode}</code></pre>`;\r\n\texec(\"insertHTML\", htmlBlock);\r\n\tsetIsCodeModalOpen(false);\r\n\tsetCodeValue(\"\");\r\n};\r\n\r\nexport const insertLink = (exec) => {\r\n\tconst url = window.prompt(\"Enter URL\", \"https://\");\r\n\tif (!url) return;\r\n\texec(\"createLink\", url);\r\n};\r\n\r\nexport const insertTooltip = (editorRef, setHtml, onChange, updateToolbarState) => {\r\n\tconst selection = window.getSelection();\r\n\tif (!selection || selection.rangeCount === 0) return;\r\n\tconst selectedText = selection.toString();\r\n\tif (!selectedText) {\r\n\t\talert(\"Please select some text first\");\r\n\t\treturn;\r\n\t}\r\n\tconst tooltip = window.prompt(\"Enter tooltip/note text\", \"\");\r\n\tif (!tooltip) return;\r\n\t\r\n\tconst range = selection.getRangeAt(0);\r\n\tconst span = document.createElement(\"span\");\r\n\tspan.className = \"has-tooltip\";\r\n\tspan.title = tooltip;\r\n\t\r\n\ttry {\r\n\t\trange.surroundContents(span);\r\n\t} catch {\r\n\t\t// If surroundContents fails, use alternative method\r\n\t\tspan.appendChild(range.extractContents());\r\n\t\trange.insertNode(span);\r\n\t}\r\n\t\r\n\tselection.removeAllRanges();\r\n\tconst nextHtml = editorRef.current?.innerHTML || \"\";\r\n\tsetHtml(nextHtml);\r\n\tonChange({ html: nextHtml, text: editorRef.current?.innerText || \"\" });\r\n\tupdateToolbarState();\r\n};\r\n\r\nexport const insertAnchor = (exec) => {\r\n\tconst id = window.prompt(\"Enter anchor ID\", \"\");\r\n\tif (!id) return;\r\n\tconst sanitizedId = id.replace(/[^a-zA-Z0-9-_]/g, \"\");\r\n\tconst anchorHtml = `<span class=\"anchor-marker\" id=\"${sanitizedId}\" data-anchor=\"${sanitizedId}\">⚓${sanitizedId}</span>`;\r\n\texec(\"insertHTML\", anchorHtml);\r\n};\r\n\r\nexport const insertHr = (exec) => {\r\n\texec(\"insertHTML\", \"<hr>\");\r\n};\r\n\r\nexport const insertImage = (exec) => {\r\n\tconst url = window.prompt(\"Enter image URL\", \"https://\");\r\n\tif (!url) return;\r\n\tconst alt = window.prompt(\"Enter image description (alt text)\", \"\");\r\n\tconst imageHtml = `<img src=\"${url}\" alt=\"${alt || ''}\" style=\"max-width: 100%; height: auto;\" />`;\r\n\texec(\"insertHTML\", imageHtml);\r\n};\r\n\r\nexport const insertVideo = (exec) => {\r\n\tconst url = window.prompt(\"Enter video URL (YouTube, MP4, etc.)\", \"https://\");\r\n\tif (!url) return;\r\n\t\r\n\t// Check if it's a YouTube URL\r\n\tconst youtubeMatch = url.match(/(?:youtube\\.com\\/watch\\?v=|youtu\\.be\\/)([^&\\s]+)/);\r\n\tif (youtubeMatch) {\r\n\t\tconst videoId = youtubeMatch[1];\r\n\t\tconst embedHtml = `<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/${videoId}\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen style=\"max-width: 100%;\"></iframe>`;\r\n\t\texec(\"insertHTML\", embedHtml);\r\n\t} else {\r\n\t\t// Assume it's a direct video URL\r\n\t\tconst videoHtml = `<video controls style=\"max-width: 100%; height: auto;\"><source src=\"${url}\" type=\"video/mp4\">Your browser does not support the video tag.</video>`;\r\n\t\texec(\"insertHTML\", videoHtml);\r\n\t}\r\n};\r\n","import { COMMANDS } from \"./editorCommands.js\";\r\n\r\nexport const onInput = (editorRef, setHtml, onChange, updateToolbarState) => {\r\n\tconst nextHtml = editorRef.current?.innerHTML || \"\";\r\n\tsetHtml(nextHtml);\r\n\tonChange({ html: nextHtml, text: editorRef.current?.innerText || \"\" });\r\n\tupdateToolbarState();\r\n};\r\n\r\nexport const onPaste = (event, plainPaste) => {\r\n\tif (!plainPaste) return;\r\n\tevent.preventDefault();\r\n\tlet text = event.clipboardData.getData(\"text/plain\");\r\n\t// remove leading numeric list markers from pasted plain text (per-line)\r\n\ttext = text.replace(/^\\s*\\d+[\\.)]\\s+/gm, \"\");\r\n\tdocument.execCommand(\"insertText\", false, text);\r\n};\r\n\r\nexport const createUpdateToolbarState = (editorRef, setSelectionText, setActiveToolMap) => {\r\n\treturn () => {\r\n\t\tconst selection = document.getSelection();\r\n\t\tif (!selection || selection.rangeCount === 0 || !editorRef.current) return;\r\n\t\tconst anchorNode = selection.anchorNode;\r\n\t\tconst isInsideEditor = anchorNode && editorRef.current.contains(anchorNode);\r\n\t\tif (!isInsideEditor) {\r\n\t\t\tsetSelectionText(\"\");\r\n\t\t\tsetActiveToolMap({});\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsetSelectionText(selection.toString());\r\n\t\tconst nextActive = {};\r\n\t\tCOMMANDS.forEach((item) => {\r\n\t\t\ttry {\r\n\t\t\t\tnextActive[item.cmd] = document.queryCommandState(item.cmd);\r\n\t\t\t} catch {\r\n\t\t\t\tnextActive[item.cmd] = false;\r\n\t\t\t}\r\n\t\t});\r\n\t\tsetActiveToolMap(nextActive);\r\n\t};\r\n};\r\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\r\nimport CodeBlock from \"./CodeBlock.jsx\";\r\nimport { DEFAULT_HTML } from \"./defaultContent.js\";\r\nimport { COMMANDS } from \"./editorCommands.js\";\r\nimport { exec as execCommand, clearAll as clearAllContent, exportHtml as exportHtmlContent } from \"./editorUtils.js\";\r\nimport { applyHeading as applyHeadingFormat, applyFontSize as applyFontSizeFormat, applyCustomFontSize as applyCustomFontSizeFormat, applyTextColor as applyTextColorFormat, applyBackgroundColor as applyBackgroundColorFormat, resetColors as resetColorsFormat } from \"./formattingFunctions.js\";\r\nimport { insertCodeBlock as insertCodeBlockContent, insertLink as insertLinkContent, insertTooltip as insertTooltipContent, insertAnchor as insertAnchorContent, insertHr as insertHrContent, insertImage as insertImageContent, insertVideo as insertVideoContent } from \"./insertFunctions.js\";\r\nimport { onInput as handleInput, onPaste as handlePaste, createUpdateToolbarState } from \"./eventHandlers.js\";\r\n\r\n// helper: strip leading numeric markers (e.g. \"1. \") from block-starting text nodes\r\nconst _stripLeadingNumberPrefix = (node) => {\r\n\tconst leadingNumberRE = /^\\s*\\d+[.)]\\s+/;\r\n\tif (!node) return;\r\n\tif (node.firstChild && node.firstChild.nodeType === Node.TEXT_NODE) {\r\n\t\tnode.firstChild.textContent = node.firstChild.textContent.replace(leadingNumberRE, \"\");\r\n\t}\r\n};\r\n\r\n// sanitize initial HTML: remove numeric list prefixes at block starts to avoid\r\n// duplicate markers when user toggles ordered-list\r\nconst sanitizeInitialHtml = (rawHtml) => {\r\n\tif (!rawHtml) return rawHtml;\r\n\ttry {\r\n\t\tconst tmp = document.createElement(\"div\");\r\n\t\ttmp.innerHTML = rawHtml;\r\n\t\tconst blocks = tmp.querySelectorAll(\"p, div, li, h1, h2, h3, h4\");\r\n\t\tblocks.forEach((el) => {\r\n\t\t\tif (el.closest && el.closest(\"pre, code\")) return;\r\n\t\t\t_stripLeadingNumberPrefix(el);\r\n\t\t});\r\n\t\treturn tmp.innerHTML;\r\n\t} catch {\r\n\t\treturn rawHtml;\r\n\t}\r\n};\r\n\r\nexport default function Editor({\r\n\ttheme = \"dark\",\r\n\ttools = COMMANDS.map((item) => item.cmd),\r\n\tshowDemoText = false,\r\n\tshowHeading = true,\r\n\tshowFontSize = true,\r\n\tshowAlign = true,\r\n\tshowLink = true,\r\n\tshowTooltip = true,\r\n\tshowAnchor = true,\r\n\tshowHr = true,\r\n\tshowMedia = true,\r\n\tshowUndoRedo = true,\r\n\tshowClear = true,\r\n\tshowPlainPaste = true,\r\n\tshowColor = true,\r\n\tshowFullscreen = true,\r\n\tcodeBlock = false,\r\n\tcodeBlockLanguages,\r\n\tshowLiveHtml = true,\r\n\tshowStats = true,\r\n\tshowCopyHtml = true,\r\n\tonChange = () => { },\r\n\tinitialHtml = \"\",\r\n\tt\r\n}) {\r\n\tlet translate\r\n\tif (t) {\r\n\t\ttranslate = t\r\n\t} else {\r\n\t\ttranslate = (key) => {\r\n\t\t\tconst translations = {\r\n\t\t\t\tsample: \"Sample Text\",\r\n\t\t\t\tUndo: \"Undo\",\r\n\t\t\t\tRedo: \"Redo\",\r\n\t\t\t\tFormat: \"Format\",\r\n\t\t\t\tParagraph: \"Paragraph\",\r\n\t\t\t\t\"Heading 1\": \"Heading 1\",\r\n\t\t\t\t\"Heading 2\": \"Heading 2\",\r\n\t\t\t\t\"Heading 3\": \"Heading 3\",\r\n\t\t\t\t\"Heading 4\": \"Heading 4\",\r\n\t\t\t\tBlockquote: \"Blockquote\",\r\n\t\t\t\t\"Code Block\": \"Code Block\",\r\n\t\t\t\tSize: \"Size\",\r\n\t\t\t\tCustom: \"Custom\",\r\n\t\t\t\tFont: \"Font\",\r\n\t\t\t\t\"Text color\": \"Text color\",\r\n\t\t\t\tBackground: \"Background\",\r\n\t\t\t\t\"Background color\": \"Background color\",\r\n\t\t\t\t\"Reset colors\": \"Reset colors\",\r\n\t\t\t\t\"Insert code block\": \"Insert code block\",\r\n\t\t\t\tAlign: \"Align\",\r\n\t\t\t\t\"Align Left\": \"Align Left\",\r\n\t\t\t\t\"Align Center\": \"Align Center\",\r\n\t\t\t\t\"Align Right\": \"Align Right\",\r\n\t\t\t\tJustify: \"Justify\",\r\n\t\t\t\t\"Add tooltip/note to selected text\": \"Add tooltip/note to selected text\",\r\n\t\t\t\t\"Insert anchor\": \"Insert anchor\",\r\n\t\t\t\t\"Insert horizontal line\": \"Insert horizontal line\",\r\n\t\t\t\t\"Insert picture\": \"Insert picture\",\r\n\t\t\t\t\"Insert video\": \"Insert video\",\r\n\t\t\t\t\"Clear format\": \"Clear format\",\r\n\t\t\t\t\"Clear all\": \"Clear all\",\r\n\t\t\t\t\"Paste as plain text\": \"Paste as plain text\",\r\n\t\t\t\t\"Exit fullscreen\": \"Exit fullscreen\",\r\n\t\t\t\t\"Enter fullscreen\": \"Enter fullscreen\",\r\n\t\t\t\twords: \"words\",\r\n\t\t\t\tcharacters: \"characters\",\r\n\t\t\t\tselected: \"selected\",\r\n\t\t\t\t\"No selection\": \"No selection\",\r\n\t\t\t\t\"Copy HTML\": \"Copy HTML\",\r\n\t\t\t\t\"Live HTML\": \"Live HTML\",\r\n\t\t\t\t\"Insert Code Block\": \"Insert Code Block\",\r\n\t\t\t\t\"Paste your code here\": \"Paste your code here\",\r\n\t\t\t\tCancel: \"Cancel\",\r\n\t\t\t\tInsert: \"Insert\",\r\n\t\t\t};\r\n\t\t\treturn translations[key] || key;\r\n\t\t}\r\n\t}\r\n\r\n\tconst editorRef = useRef(null);\r\n\t// when true we already applied `initialHtml` / demo content once — don't overwrite user edits\r\n\tconst initialAppliedRef = useRef(false);\r\n\tconst [html, setHtml] = useState(\"\");\r\n\tconst [plainPaste, setPlainPaste] = useState(true);\r\n\tconst [selectionText, setSelectionText] = useState(\"\");\r\n\tconst [heading, setHeading] = useState(\"p\");\r\n\tconst [fontSize, setFontSize] = useState(\"16\");\r\n\tconst [customSize, setCustomSize] = useState(\"\");\r\n\tconst [textColor, setTextColor] = useState(\"#1f2937\");\r\n\tconst [backgroundColor, setBackgroundColor] = useState(\"#ffff00\");\r\n\tconst [activeToolMap, setActiveToolMap] = useState({});\r\n\tconst [isFullscreen, setIsFullscreen] = useState(false);\r\n\tconst [isCodeModalOpen, setIsCodeModalOpen] = useState(false);\r\n\tconst [codeValue, setCodeValue] = useState(\"\");\r\n\tconst [codeLanguage, setCodeLanguage] = useState(\"js\");\r\n\tconst [codeTheme, setCodeTheme] = useState(theme);\r\n\r\n\tuseEffect(() => {\r\n\t\tsetCodeTheme(theme);\r\n\t}, [theme]);\r\n\r\n\t// NOTE: initialization for `initialHtml` / demo text moved below `updateToolbarState` declaration to avoid referencing\r\n\t// `updateToolbarState` before it is defined. See the effect inserted later in the file.\r\n\r\n\tconst stats = useMemo(() => {\r\n\t\tconst text = editorRef.current?.innerText || (typeof html === 'string' ? html.replace(/<[^>]+>/g, '') : '');\r\n\t\tconst words = text.trim() ? text.trim().split(/\\s+/).length : 0;\r\n\t\treturn {\r\n\t\t\twords,\r\n\t\t\tchars: text.length,\r\n\t\t};\r\n\t}, [html]);\r\n\r\n\tconst exec = (cmd, value = null) => {\r\n\t\texecCommand(editorRef, cmd, value, setHtml, onChange, updateToolbarState);\r\n\t};\r\n\r\n\tconst applyHeading = (next) => {\r\n\t\tsetHeading(next);\r\n\t\tapplyHeadingFormat(next, exec);\r\n\t};\r\n\r\n\tconst applyFontSize = (next) => {\r\n\t\tif (next === \"custom\") {\r\n\t\t\tsetFontSize(\"custom\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsetFontSize(next);\r\n\t\tapplyFontSizeFormat(next, exec, editorRef, setHtml, updateToolbarState);\r\n\t};\r\n\r\n\tconst applyCustomFontSize = (value) => {\r\n\t\tsetCustomSize(value);\r\n\t\tapplyCustomFontSizeFormat(value, exec, editorRef, setHtml, updateToolbarState);\r\n\t};\r\n\r\n\tconst applyTextColor = (next) => {\r\n\t\tsetTextColor(next);\r\n\t\tapplyTextColorFormat(next, exec);\r\n\t};\r\n\r\n\tconst applyBackgroundColor = (next) => {\r\n\t\tsetBackgroundColor(next);\r\n\t\tapplyBackgroundColorFormat(next, exec);\r\n\t};\r\n\r\n\tconst resetColors = () => {\r\n\t\tresetColorsFormat(theme, setTextColor, setBackgroundColor, exec);\r\n\t};\r\n\r\n\tconst insertCodeBlock = () => {\r\n\t\tinsertCodeBlockContent(codeValue, codeLanguage, codeTheme, exec, setIsCodeModalOpen, setCodeValue);\r\n\t};\r\n\r\n\tconst insertLink = () => {\r\n\t\tinsertLinkContent(exec);\r\n\t};\r\n\r\n\tconst insertTooltip = () => {\r\n\t\tinsertTooltipContent(editorRef, setHtml, onChange, updateToolbarState);\r\n\t};\r\n\r\n\tconst insertAnchor = () => {\r\n\t\tinsertAnchorContent(exec);\r\n\t};\r\n\r\n\tconst insertHr = () => {\r\n\t\tinsertHrContent(exec);\r\n\t};\r\n\r\n\tconst insertImage = () => {\r\n\t\tinsertImageContent(exec);\r\n\t};\r\n\r\n\tconst insertVideo = () => {\r\n\t\tinsertVideoContent(exec);\r\n\t};\r\n\r\n\tconst toggleFullscreen = () => {\r\n\t\tsetIsFullscreen(!isFullscreen);\r\n\t};\r\n\r\n\tconst removeFormat = () => exec(\"removeFormat\");\r\n\r\n\tconst clearAll = () => {\r\n\t\tclearAllContent(editorRef, setHtml, onChange, updateToolbarState);\r\n\t};\r\n\r\n\tconst onInput = () => {\r\n\t\thandleInput(editorRef, setHtml, onChange, updateToolbarState);\r\n\t\t// Add key hint to all links\r\n\t\tconst links = editorRef.current?.querySelectorAll('a') || [];\r\n\t\tlinks.forEach((link) => {\r\n\t\t\tif (!link.getAttribute('data-key-hint')) {\r\n\t\t\t\tlink.setAttribute('data-key-hint', 'Ctrl/Shift + Click to follow');\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n\tconst onPaste = (event) => {\r\n\t\thandlePaste(event, plainPaste);\r\n\t};\r\n\r\n\tconst onEditorClick = (event) => {\r\n\t\tif (event.target.tagName === 'A' && (event.ctrlKey || event.shiftKey || event.metaKey)) {\r\n\t\t\tconst href = event.target.getAttribute('href');\r\n\t\t\tif (href) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\twindow.open(href, '_blank');\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tconst updateToolbarStateRef = useRef(null);\r\nif (!updateToolbarStateRef.current) {\r\n\tupdateToolbarStateRef.current = createUpdateToolbarState(editorRef, setSelectionText, setActiveToolMap);\r\n}\r\nconst updateToolbarState = updateToolbarStateRef.current;\r\n\r\n\tuseEffect(() => {\r\n\t\tdocument.addEventListener(\"selectionchange\", updateToolbarState);\r\n\t\treturn () => document.removeEventListener(\"selectionchange\", updateToolbarState);\r\n\t}, [updateToolbarState]);\r\n\r\n\r\n\r\n\t// Initialize editor from `initialHtml` (applied once) or fall back to demo text.\r\n\t// Guard against re-applying `initialHtml` on every render — that was causing user edits to be overwritten.\r\n\tuseEffect(() => {\r\n\t\tif (!editorRef.current || initialAppliedRef.current) return;\r\n\r\n\t\t// apply `initialHtml` only once (initialization). If parent later wants to *reset*\r\n\t\t// the editor, we can add an explicit API — but default behaviour is \"initial only\".\r\n\t\tif (initialHtml) {\r\n\t\t\tconst safeHtml = sanitizeInitialHtml(initialHtml);\r\n\t\t\teditorRef.current.innerHTML = safeHtml;\r\n\t\t\tsetHtml(safeHtml);\r\n\t\t\tconst links = editorRef.current?.querySelectorAll('a') || [];\r\n\t\t\tlinks.forEach((link) => {\r\n\t\t\t\tif (!link.getAttribute('data-key-hint')) {\r\n\t\t\t\t\tlink.setAttribute('data-key-hint', 'Ctrl/Shift + Click to follow');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tupdateToolbarState();\r\n\t\t\ttry {\r\n\t\t\t\tif (!editorRef.current || editorRef.current.__lastOnChangeHtml !== safeHtml) {\r\n\t\t\t\t\tonChange(safeHtml);\r\n\t\t\t\t\tif (editorRef.current) editorRef.current.__lastOnChangeHtml = safeHtml;\r\n\t\t\t\t}\r\n\t\t\t} catch { /* noop */ }\r\n\t\t\tinitialAppliedRef.current = true;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (showDemoText) {\r\n\t\t\teditorRef.current.innerHTML = DEFAULT_HTML;\r\n\t\t\tsetHtml(editorRef.current.innerHTML);\r\n\t\t\tconst links = editorRef.current?.querySelectorAll('a') || [];\r\n\t\t\tlinks.forEach((link) => {\r\n\t\t\t\tif (!link.getAttribute('data-key-hint')) {\r\n\t\t\t\t\tlink.setAttribute('data-key-hint', 'Ctrl/Shift + Click to follow');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tupdateToolbarState();\r\n\t\t\tinitialAppliedRef.current = true;\r\n\t\t}\r\n\t}, [initialHtml, showDemoText, onChange, updateToolbarState]);\r\n\r\n\tconst exportHtml = async () => {\r\n\t\tawait exportHtmlContent(editorRef);\r\n\t};\r\n\r\n\tconst activeCommands = useMemo(\r\n\t\t() => COMMANDS.filter((item) => tools.includes(item.cmd)),\r\n\t\t[tools]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<section\r\n\t\t\tclassName={`editor-root theme-${theme}${showLiveHtml ? \" show-preview\" : \" no-preview\"}${isFullscreen ? \" fullscreen\" : \"\"}`}\r\n\t\t\tdata-theme={theme}\r\n\t\t>\r\n\t\t\t<div className=\"toolbar\">\r\n\t\t\t\t{showUndoRedo && (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<div className=\"toolbar-group\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclassName=\"toolbar-btn\"\r\n\t\t\t\t\t\t\t\tonClick={() => exec(\"undo\")}\r\n\t\t\t\t\t\t\t\ttitle={translate(\"Undo\")}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t↶\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclassName=\"toolbar-btn\"\r\n\t\t\t\t\t\t\t\tonClick={() => exec(\"redo\")}\r\n\t\t\t\t\t\t\t\ttitle={translate(\"Redo\")}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t↷\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<span className=\"toolbar-separator\">|</span>\r\n\t\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t\t{activeCommands.length > 0 && (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<div className=\"toolbar-group\">\r\n\t\t\t\t\t\t\t{activeCommands.map((item) => (\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\tkey={item.cmd}\r\n\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\tclassName={`toolbar-btn${activeToolMap[item.cmd] ? \" active\" : \"\"}`}\r\n\t\t\t\t\t\t\t\t\tonMouseDown={(event) => event.preventDefault()}\r\n\t\t\t\t\t\t\t\t\tonClick={() => exec(item.cmd)}\r\n\t\t\t\t\t\t\t\t\ttitle={translate(item.label)}\r\n\t\t\t\t\t\t\t\t\taria-pressed={activeToolMap[item.cmd] || false}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{item.icon}\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<span className=\"toolbar-separator\">|</span>\r\n\t\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t\t{(showHeading || showFontSize || showColor) && (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<div className=\"toolbar-group\">\r\n\t\t\t\t\t\t{showHeading && (\r\n\t\t\t\t\t\t\t<label className=\"toolbar-label\">\r\n\t\t\t\t\t\t\t\t{translate(\"Format\")}\r\n\t\t\t\t\t\t\t\t<select\r\n\t\t\t\t\t\t\t\t\tvalue={heading}\r\n\t\t\t\t\t\t\t\t\tonChange={(event) => applyHeading(event.target.value)}\r\n\t\t\t\t\t\t\t\t\tclassName=\"toolbar-select\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<option value=\"p\">{translate(\"Paragraph\")}</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"h1\">{translate(\"Heading 1\")}</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"h2\">{translate(\"Heading 2\")}</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"h3\">{translate(\"Heading 3\")}</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"h4\">{translate(\"Heading 4\")}</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"blockquote\">{translate(\"Blockquote\")}</option>\r\n\t\t\t\t\t\t\t\t\t{codeBlock && <option value=\"pre\">{translate(\"Code Block\")}</option>}\r\n\t\t\t\t\t\t\t\t</select>\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showFontSize && (\r\n\t\t\t\t\t\t\t<label className=\"toolbar-label\">\r\n\t\t\t\t\t\t\t\t{translate(\"Size\")}\r\n\t\t\t\t\t\t\t\t<select\r\n\t\t\t\t\t\t\t\t\tvalue={fontSize}\r\n\t\t\t\t\t\t\t\t\tonChange={(event) => applyFontSize(event.target.value)}\r\n\t\t\t\t\t\t\t\t\tclassName=\"toolbar-select\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<option value=\"10\">10px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"12\">12px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"14\">14px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"16\">16px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"18\">18px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"20\">20px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"22\">22px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"24\">24px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"28\">28px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"32\">32px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"36\">36px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"48\">48px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"custom\">{translate(\"Custom\")}</option>\r\n\t\t\t\t\t\t\t\t</select>\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showFontSize && fontSize === \"custom\" && (\r\n\t\t\t\t\t\t\t<label className=\"toolbar-label\">\r\n\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\t\tmin=\"8\"\r\n\t\t\t\t\t\t\t\t\tmax=\"200\"\r\n\t\t\t\t\t\t\t\t\tvalue={customSize}\r\n\t\t\t\t\t\t\t\t\tonChange={(event) => applyCustomFontSize(event.target.value)}\r\n\t\t\t\t\t\t\t\t\tplaceholder={translate(\"Size\")}\r\n\t\t\t\t\t\t\t\t\tclassName=\"toolbar-input\"\r\n\t\t\t\t\t\t\t\t\tstyle={{ width: \"60px\" }}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\tpx\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showColor && (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t<label className=\"toolbar-label color-label\">\r\n\t\t\t\t\t\t\t\t\t{translate(\"Font\")}\r\n\t\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\t\ttype=\"color\"\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"toolbar-color\"\r\n\t\t\t\t\t\t\t\t\t\tvalue={textColor}\r\n\t\t\t\t\t\t\t\t\t\tonChange={(event) => applyTextColor(event.target.value)}\r\n\t\t\t\t\t\t\t\t\t\taria-label={translate(\"Text color\")}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t\t<label className=\"toolbar-label color-label\">\r\n\t\t\t\t\t\t\t\t\t{translate(\"Background\")}\r\n\t\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\t\ttype=\"color\"\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"toolbar-color\"\r\n\t\t\t\t\t\t\t\t\t\tvalue={backgroundColor}\r\n\t\t\t\t\t\t\t\t\t\tonChange={(event) => applyBackgroundColor(event.target.value)}\r\n\t\t\t\t\t\t\t\t\t\taria-label={translate(\"Background color\")}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\tclassName=\"toolbar-btn toolbar-btn-small\"\r\n\t\t\t\t\t\t\t\t\tonClick={resetColors}\r\n\t\t\t\t\t\t\t\t\ttitle={translate(\"Reset colors\")}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t↺\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{codeBlock && (\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclassName=\"toolbar-btn\"\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tsetCodeTheme(theme);\r\n\t\t\t\t\t\t\t\t\tsetIsCodeModalOpen(true);\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\ttitle={translate(\"Insert code block\")}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{translate(\"Code Block\")}\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showAlign && (\r\n\t\t\t\t\t\t\t<div className=\"toolbar-label\">\r\n\t\t\t\t\t\t\t\t{translate(\"Align\")}\r\n\t\t\t\t\t\t\t\t<div className=\"align-buttons\">\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"toolbar-btn toolbar-btn-small\"\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => exec(\"justifyLeft\")}\r\n\t\t\t\t\t\t\t\t\t\ttitle={translate(\"Align Left\")}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t⟸\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"toolbar-btn toolbar-btn-small\"\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => exec(\"justifyCenter\")}\r\n\t\t\t\t\t\t\t\t\t\ttitle={translate(\"Align Center\")}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t⇔\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"toolbar-btn toolbar-btn-small\"\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => exec(\"justifyRight\")}\r\n\t\t\t\t\t\t\t\t\t\ttitle={translate(\"Align Right\")}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t⟹\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"toolbar-btn toolbar-btn-small\"\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => exec(\"justifyFull\")}\r\n\t\t\t\t\t\t\t\t\t\ttitle={translate(\"Justify\")}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t⇿\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<span className=\"toolbar-separator\">|</span>\r\n\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t\t{(showLink || showTooltip || showAnchor || showHr || showMedia || showClear) && (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t<div className=\"toolbar-group\">\r\n\t\t\t\t\t\t{showLink && (\r\n\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={insertLink}>\r\n\t\t\t\t\t\t\t\t🔗\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showTooltip && (\r\n\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={insertTooltip} title={translate(\"Add tooltip/note to selected text\")}>\r\n\t\t\t\t\t\t\t\t💬\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showAnchor && (\r\n\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={insertAnchor} title={translate(\"Insert anchor\")}>\r\n\t\t\t\t\t\t\t\t⚓\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showHr && (\r\n\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={insertHr} title={translate(\"Insert horizontal line\")}>\r\n\t\t\t\t\t\t\t\t─\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showMedia && (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={insertImage} title={translate(\"Insert picture\")}>\r\n\t\t\t\t\t\t\t\t\t🖼️\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={insertVideo} title={translate(\"Insert video\")}>\r\n\t\t\t\t\t\t\t\t\t🎬\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showClear && (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={removeFormat}>\r\n\t\t\t\t\t\t\t\t\t{translate(\"Clear format\")}\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn danger\" onClick={clearAll}>\r\n\t\t\t\t\t\t\t\t\t{translate(\"Clear all\")}\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<span className=\"toolbar-separator\">|</span>\r\n\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t\t{showPlainPaste && (\r\n\t\t\t\t\t<div className=\"toolbar-group toggle\">\r\n\t\t\t\t\t\t<label className=\"toggle-row\">\r\n\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\ttype=\"checkbox\"\r\n\t\t\t\t\t\t\t\tchecked={plainPaste}\r\n\t\t\t\t\t\t\t\tonChange={(event) => setPlainPaste(event.target.checked)}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t{translate(\"Paste as plain text\")}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t)}\r\n\t\t\t\t{showFullscreen && (\r\n\t\t\t\t\t<div className=\"toolbar-group\">\r\n\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\tclassName=\"toolbar-btn\"\r\n\t\t\t\t\t\t\tonClick={toggleFullscreen}\r\n\t\t\t\t\t\t\ttitle={isFullscreen ? translate(\"Exit fullscreen\") : translate(\"Enter fullscreen\")}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{isFullscreen ? \"⤓\" : \"⤢\"}\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\r\n\t\t\t<div className=\"editor-area\">\r\n\t\t\t\t<div\r\n\t\t\t\t\tref={editorRef}\r\n\t\t\t\t\tclassName=\"editor-surface\"\r\n\t\t\t\t\tcontentEditable\r\n\t\t\t\t\tonInput={onInput}\r\n\t\t\t\t\tonPaste={onPaste}\r\n\t\t\t\tonClick={onEditorClick}\r\n\t\t\t\tonKeyUp={updateToolbarState}\r\n\t\t\t\tonMouseUp={updateToolbarState}\r\n\t\t\t\tsuppressContentEditableWarning\r\n\t\t\t\tspellCheck\r\n\t\t\t/>\r\n\t\t</div>\r\n\r\n\t\t\t{(showStats || showCopyHtml) && (\r\n\t\t\t\t<footer className=\"editor-footer\">\r\n\t\t\t\t\t{showStats && (\r\n\t\t\t\t\t\t<div className=\"footer-stats\">\r\n\t\t\t\t\t\t\t<span>{stats.words} {translate(\"words\")}</span>\r\n\t\t\t\t\t\t\t<span>{stats.chars} {translate(\"characters\")}</span>\r\n\t\t\t\t\t\t\t<span>{selectionText ? `${selectionText.length} ${translate(\"selected\")}` : translate(\"No selection\")}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{showCopyHtml && (\r\n\t\t\t\t\t\t<div className=\"footer-actions\">\r\n\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={exportHtml}>\r\n\t\t\t\t\t\t\t\t{translate(\"Copy HTML\")}\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</footer>\r\n\t\t\t)}\r\n\r\n\t\t\t{showLiveHtml && (\r\n\t\t\t\t<aside className=\"editor-preview\">\r\n\t\t\t\t\t<pre className=\"preview-code\">{html}</pre>\r\n\t\t\t\t\t<div className=\"preview-header\">{translate(\"Live HTML\")}</div>\r\n\t\t\t\t</aside>\r\n\t\t\t)}\r\n\r\n\t\t\t{codeBlock && isCodeModalOpen && (\r\n\t\t\t\t<div className=\"modal-backdrop\" role=\"dialog\" aria-modal=\"true\">\r\n\t\t\t\t\t<div className=\"modal\">\r\n\t\t\t\t\t\t<div className=\"modal-header\">\r\n\t\t\t\t\t\t\t{translate(\"Insert Code Block\")}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<CodeBlock\r\n\t\t\t\t\t\t\tvalue={codeValue}\r\n\t\t\t\t\t\t\tlanguage={codeLanguage}\r\n\t\t\t\t\t\t\ttheme={codeTheme}\r\n\t\t\t\t\t\t\tlanguages={codeBlockLanguages}\r\n\t\t\t\t\t\t\tonChange={setCodeValue}\r\n\t\t\t\t\t\t\tonLanguageChange={setCodeLanguage}\r\n\t\t\t\t\t\t\tonThemeChange={setCodeTheme}\r\n\t\t\t\t\t\t\tplaceholder={translate(\"Paste your code here\")}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t<div className=\"modal-actions\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclassName=\"toolbar-btn\"\r\n\t\t\t\t\t\t\t\tonClick={() => setIsCodeModalOpen(false)}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{translate(\"Cancel\")}\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclassName=\"toolbar-btn\"\r\n\t\t\t\t\t\t\t\tonClick={insertCodeBlock}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{translate(\"Insert\")}\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\t\t</section>\r\n\t);\r\n}\r\n","// src/index.js - Library entry point\r\nimport \"./index.css\";\r\nimport Editor from \"./components/Editor.jsx\";\r\nimport CodeBlock from \"./components/CodeBlock.jsx\";\r\n\r\nexport default Editor;\r\nexport { CodeBlock };\r\n"],"names":["DEFAULT_LANGUAGES","value","label","DEFAULT_THEMES","CodeBlock","language","theme","languages","themes","onChange","onLanguageChange","onThemeChange","placeholder","normalizedLanguages","useMemo","Array","isArray","length","map","item","currentLanguage","find","React","createElement","className","event","target","key","spellCheck","DEFAULT_HTML","COMMANDS","cmd","icon","escapeHtml","replace","exec","editorRef","setHtml","updateToolbarState","current","focus","document","execCommand","lis","querySelectorAll","leadingNumberRE","forEach","li","firstChild","nodeType","Node","TEXT_NODE","textContent","nextHtml","innerHTML","last","__lastOnChangeHtml","err","html","text","innerText","clearAll","exportHtml","payload","navigator","clipboard","writeText","alert","applyHeading","next","toUpperCase","applyFontSize","selection","window","getSelection","rangeCount","range","getRangeAt","collapsed","fontElements","el","removeAttribute","style","fontSize","applyCustomFontSize","isNaN","applyTextColor","applyBackgroundColor","resetColors","setTextColor","setBackgroundColor","defaultText","defaultBg","insertCodeBlock","codeValue","codeLanguage","codeTheme","setIsCodeModalOpen","setCodeValue","safeCode","languageClass","htmlBlock","insertLink","url","prompt","insertTooltip","selectedText","toString","tooltip","span","title","surroundContents","appendChild","extractContents","insertNode","removeAllRanges","insertAnchor","id","sanitizedId","anchorHtml","insertHr","insertImage","alt","imageHtml","insertVideo","youtubeMatch","match","videoId","embedHtml","videoHtml","onInput","onPaste","plainPaste","preventDefault","clipboardData","getData","createUpdateToolbarState","setSelectionText","setActiveToolMap","anchorNode","isInsideEditor","contains","nextActive","queryCommandState","_stripLeadingNumberPrefix","node","sanitizeInitialHtml","rawHtml","tmp","blocks","closest","Editor","tools","showDemoText","showHeading","showFontSize","showAlign","showLink","showTooltip","showAnchor","showHr","showMedia","showUndoRedo","showClear","showPlainPaste","showColor","showFullscreen","codeBlock","codeBlockLanguages","showLiveHtml","showStats","showCopyHtml","initialHtml","t","translate","translations","sample","Undo","Redo","Format","Paragraph","Blockquote","Size","Custom","Font","Background","Align","Justify","words","characters","selected","Cancel","Insert","useRef","initialAppliedRef","useState","setPlainPaste","selectionText","heading","setHeading","setFontSize","customSize","setCustomSize","textColor","backgroundColor","activeToolMap","isFullscreen","setIsFullscreen","isCodeModalOpen","setCodeLanguage","setCodeTheme","useEffect","stats","trim","split","chars","applyHeadingFormat","applyFontSizeFormat","applyCustomFontSizeFormat","applyTextColorFormat","applyBackgroundColorFormat","resetColorsFormat","insertCodeBlockContent","insertLinkContent","insertTooltipContent","insertAnchorContent","insertHrContent","insertImageContent","insertVideoContent","toggleFullscreen","removeFormat","clearAllContent","handleInput","links","link","getAttribute","setAttribute","handlePaste","onEditorClick","tagName","ctrlKey","shiftKey","metaKey","href","open","updateToolbarStateRef","addEventListener","removeEventListener","safeHtml","exportHtmlContent","activeCommands","filter","includes","Fragment","type","onClick","onMouseDown","min","max","width","checked","ref","contentEditable","onKeyUp","onMouseUp","suppressContentEditableWarning","role"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/components/CodeBlock.jsx","../src/components/defaultContent.js","../src/components/editorCommands.js","../src/components/editorUtils.js","../src/components/formattingFunctions.js","../src/components/insertFunctions.js","../src/components/eventHandlers.js","../src/components/Editor.jsx","../src/index.js"],"sourcesContent":["import React, { useMemo } from \"react\";\r\n\r\nconst DEFAULT_LANGUAGES = [\r\n { value: \"plain\", label: \"Plain\" },\r\n { value: \"js\", label: \"JavaScript\" },\r\n { value: \"ts\", label: \"TypeScript\" },\r\n { value: \"java\", label: \"Java\" },\r\n { value: \"css\", label: \"CSS\" },\r\n { value: \"html\", label: \"HTML\" },\r\n { value: \"json\", label: \"JSON\" },\r\n];\r\n\r\nconst DEFAULT_THEMES = [\r\n { value: \"dark\", label: \"Dark\" },\r\n { value: \"light\", label: \"Light\" },\r\n];\r\n\r\nexport default function CodeBlock({\r\n value = \"\",\r\n language = \"plain\",\r\n theme = \"dark\",\r\n languages = DEFAULT_LANGUAGES,\r\n themes = DEFAULT_THEMES,\r\n onChange = () => {},\r\n onLanguageChange = () => {},\r\n onThemeChange = () => {},\r\n placeholder = \"Paste code here\",\r\n}) {\r\n const normalizedLanguages = useMemo(() => {\r\n if (!Array.isArray(languages) || languages.length === 0) return DEFAULT_LANGUAGES;\r\n if (typeof languages[0] === \"string\") {\r\n return languages.map((item) => ({ value: item, label: item }));\r\n }\r\n return languages;\r\n }, [languages]);\r\n\r\n const currentLanguage = useMemo(\r\n () => normalizedLanguages.find((item) => item.value === language) || normalizedLanguages[0],\r\n [language, normalizedLanguages]\r\n );\r\n\r\n return (\r\n <section className={`code-block code-block-${theme}`} data-language={currentLanguage?.value}>\r\n <header className=\"code-block-toolbar\">\r\n <label className=\"code-block-label\">\r\n Language\r\n <select\r\n className=\"code-block-select\"\r\n value={currentLanguage?.value}\r\n onChange={(event) => onLanguageChange(event.target.value)}\r\n >\r\n {normalizedLanguages.map((item) => (\r\n <option key={item.value} value={item.value}>\r\n {item.label}\r\n </option>\r\n ))}\r\n </select>\r\n </label>\r\n <label className=\"code-block-label\">\r\n Theme\r\n <select\r\n className=\"code-block-select\"\r\n value={theme}\r\n onChange={(event) => onThemeChange(event.target.value)}\r\n >\r\n {themes.map((item) => (\r\n <option key={item.value} value={item.value}>\r\n {item.label}\r\n </option>\r\n ))}\r\n </select>\r\n </label>\r\n </header>\r\n <textarea\r\n className=\"code-block-area\"\r\n value={value}\r\n onChange={(event) => onChange(event.target.value)}\r\n placeholder={placeholder}\r\n spellCheck={false}\r\n />\r\n </section>\r\n );\r\n}\r\n","export const DEFAULT_HTML = `\r\n\t<h1>Welcome</h1>\r\n\t<p>This is a lightweight WYSIWYG editor built without external libraries.</p>\r\n\t<ul>\r\n\t\t<li>Edit text directly</li>\r\n\t\t<li>Use the toolbar for formatting</li>\r\n\t\t<li>Copy, paste, and export HTML</li>\r\n\t</ul>\r\n`;\r\n","export const COMMANDS = [\r\n\t{ cmd: \"bold\", label: \"Bold\", icon: \"B\" },\r\n\t{ cmd: \"italic\", label: \"Italic\", icon: \"I\" },\r\n\t{ cmd: \"underline\", label: \"Underline\", icon: \"U\" },\r\n\t{ cmd: \"strikeThrough\", label: \"Strike\", icon: \"S\" },\r\n\t{ cmd: \"insertUnorderedList\", label: \"Bullets\", icon: \"•\" },\r\n\t{ cmd: \"insertOrderedList\", label: \"Numbered\", icon: \"1.\" },\r\n\t{ cmd: \"indent\", label: \"Indent\", icon: \"↦\" },\r\n\t{ cmd: \"outdent\", label: \"Outdent\", icon: \"↤\" },\r\n\t{ cmd: \"justifyLeft\", label: \"Left\", icon: \"⟸\" },\r\n\t{ cmd: \"justifyCenter\", label: \"Center\", icon: \"⇔\" },\r\n\t{ cmd: \"justifyRight\", label: \"Right\", icon: \"⟹\" },\r\n];\r\n","export const escapeHtml = (value) =>\r\n\tvalue\r\n\t\t.replace(/&/g, \"&amp;\")\r\n\t\t.replace(/</g, \"&lt;\")\r\n\t\t.replace(/>/g, \"&gt;\")\r\n\t\t.replace(/\\\"/g, \"&quot;\")\r\n\t\t.replace(/'/g, \"&#039;\");\r\n\r\nexport const exec = (editorRef, cmd, value = null, setHtml, onChange, updateToolbarState) => {\r\n\teditorRef.current?.focus();\r\n\tdocument.execCommand(cmd, false, value);\r\n\r\n\t// If user just toggled an ordered list, strip any leading numeric prefixes\r\n\t// inside list items (e.g. \"1. Item\") so the browser marker doesn't duplicate.\r\n\tif (cmd === \"insertOrderedList\" && editorRef.current) {\r\n\t\tconst lis = editorRef.current.querySelectorAll(\"li\");\r\n\t\tconst leadingNumberRE = /^\\s*\\d+[.)]\\s+/;\r\n\t\tlis.forEach((li) => {\r\n\t\t\t// only strip on plain-text starts (avoid breaking HTML children)\r\n\t\t\tif (li.firstChild && li.firstChild.nodeType === Node.TEXT_NODE) {\r\n\t\t\t\tli.firstChild.textContent = li.firstChild.textContent.replace(leadingNumberRE, \"\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tconst nextHtml = editorRef.current?.innerHTML || \"\";\r\n\tsetHtml(nextHtml);\r\n\r\n\t// avoid flooding parent with identical payloads (prevents some update loops)\r\n\ttry {\r\n\t\tif (editorRef.current) {\r\n\t\t\tconst last = editorRef.current.__lastOnChangeHtml || \"\";\r\n\t\t\tif (last === nextHtml) {\r\n\t\t\t\t// still update toolbar state but skip notifying parent\r\n\t\t\t\tupdateToolbarState();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\teditorRef.current.__lastOnChangeHtml = nextHtml;\r\n\t\t}\r\n\t} catch (err) {\r\n\t\t// ignore\r\n\t}\r\n\r\n\tonChange({ html: nextHtml, text: editorRef.current?.innerText || \"\" });\r\n\tupdateToolbarState();\r\n};\r\n\r\nexport const removeFormat = (exec) => exec(\"removeFormat\");\r\n\r\nexport const clearAll = (editorRef, setHtml, onChange, updateToolbarState) => {\r\n\tif (!editorRef.current) return;\r\n\teditorRef.current.innerHTML = \"<p></p>\";\r\n\tsetHtml(editorRef.current.innerHTML);\r\n\tonChange({ html: editorRef.current.innerHTML, text: editorRef.current.innerText || \"\" });\r\n\tupdateToolbarState();\r\n};\r\n\r\nexport const exportHtml = async (editorRef) => {\r\n\tconst payload = editorRef.current?.innerHTML || \"\";\r\n\tawait navigator.clipboard.writeText(payload);\r\n\talert(\"HTML copied to clipboard.\");\r\n};\r\n","export const applyHeading = (next, exec) => {\r\n\tif (next === \"p\") {\r\n\t\texec(\"formatBlock\", \"P\");\r\n\t\treturn;\r\n\t}\r\n\tif (next === \"pre\") {\r\n\t\texec(\"formatBlock\", \"PRE\");\r\n\t\treturn;\r\n\t}\r\n\texec(\"formatBlock\", next.toUpperCase());\r\n};\r\n\r\nexport const applyFontSize = (next, exec, editorRef, setHtml, updateToolbarState) => {\r\n\tconst selection = window.getSelection();\r\n\tif (!selection || selection.rangeCount === 0) return;\r\n\t\r\n\tconst range = selection.getRangeAt(0);\r\n\tif (range.collapsed) return; // No selection\r\n\t\r\n\texec(\"fontSize\", \"7\");\r\n\tconst fontElements = editorRef.current?.querySelectorAll(\"font[size='7']\") || [];\r\n\tfontElements.forEach((el) => {\r\n\t\tel.removeAttribute(\"size\");\r\n\t\tel.style.fontSize = `${next}px`;\r\n\t});\r\n\tsetHtml(editorRef.current?.innerHTML || \"\");\r\n\tupdateToolbarState();\r\n};\r\n\r\nexport const applyCustomFontSize = (value, exec, editorRef, setHtml, updateToolbarState) => {\r\n\tif (!value || isNaN(value)) return;\r\n\t\r\n\tconst selection = window.getSelection();\r\n\tif (!selection || selection.rangeCount === 0) return;\r\n\t\r\n\tconst range = selection.getRangeAt(0);\r\n\tif (range.collapsed) return; // No selection\r\n\t\r\n\texec(\"fontSize\", \"7\");\r\n\tconst fontElements = editorRef.current?.querySelectorAll(\"font[size='7']\") || [];\r\n\tfontElements.forEach((el) => {\r\n\t\tel.removeAttribute(\"size\");\r\n\t\tel.style.fontSize = `${value}px`;\r\n\t});\r\n\tsetHtml(editorRef.current?.innerHTML || \"\");\r\n\tupdateToolbarState();\r\n};\r\n\r\nexport const applyTextColor = (next, exec) => {\r\n\texec(\"foreColor\", next);\r\n};\r\n\r\nexport const applyBackgroundColor = (next, exec) => {\r\n\texec(\"hiliteColor\", next);\r\n};\r\n\r\nexport const resetColors = (theme, setTextColor, setBackgroundColor, exec) => {\r\n\tconst defaultText = theme === \"dark\" ? \"#e5e7eb\" : \"#1f2937\";\r\n\tconst defaultBg = \"#ffff00\";\r\n\tsetTextColor(defaultText);\r\n\tsetBackgroundColor(defaultBg);\r\n\texec(\"removeFormat\");\r\n};\r\n","import { escapeHtml } from \"./editorUtils.js\";\r\n\r\nexport const insertCodeBlock = (codeValue, codeLanguage, codeTheme, exec, setIsCodeModalOpen, setCodeValue) => {\r\n\tconst safeCode = escapeHtml(codeValue || \"\");\r\n\tconst languageClass = codeLanguage ? `language-${codeLanguage}` : \"language-plain\";\r\n\tconst htmlBlock = `<pre class=\"code-block-shell\" data-theme=\"${codeTheme}\"><code class=\"${languageClass}\">${safeCode}</code></pre>`;\r\n\texec(\"insertHTML\", htmlBlock);\r\n\tsetIsCodeModalOpen(false);\r\n\tsetCodeValue(\"\");\r\n};\r\n\r\nexport const insertLink = (exec) => {\r\n\tconst url = window.prompt(\"Enter URL\", \"https://\");\r\n\tif (!url) return;\r\n\texec(\"createLink\", url);\r\n};\r\n\r\nexport const insertTooltip = (editorRef, setHtml, onChange, updateToolbarState) => {\r\n\tconst selection = window.getSelection();\r\n\tif (!selection || selection.rangeCount === 0) return;\r\n\tconst selectedText = selection.toString();\r\n\tif (!selectedText) {\r\n\t\talert(\"Please select some text first\");\r\n\t\treturn;\r\n\t}\r\n\tconst tooltip = window.prompt(\"Enter tooltip/note text\", \"\");\r\n\tif (!tooltip) return;\r\n\t\r\n\tconst range = selection.getRangeAt(0);\r\n\tconst span = document.createElement(\"span\");\r\n\tspan.className = \"has-tooltip\";\r\n\tspan.title = tooltip;\r\n\t\r\n\ttry {\r\n\t\trange.surroundContents(span);\r\n\t} catch {\r\n\t\t// If surroundContents fails, use alternative method\r\n\t\tspan.appendChild(range.extractContents());\r\n\t\trange.insertNode(span);\r\n\t}\r\n\t\r\n\tselection.removeAllRanges();\r\n\tconst nextHtml = editorRef.current?.innerHTML || \"\";\r\n\tsetHtml(nextHtml);\r\n\tonChange({ html: nextHtml, text: editorRef.current?.innerText || \"\" });\r\n\tupdateToolbarState();\r\n};\r\n\r\nexport const insertAnchor = (exec) => {\r\n\tconst id = window.prompt(\"Enter anchor ID\", \"\");\r\n\tif (!id) return;\r\n\tconst sanitizedId = id.replace(/[^a-zA-Z0-9-_]/g, \"\");\r\n\tconst anchorHtml = `<span class=\"anchor-marker\" id=\"${sanitizedId}\" data-anchor=\"${sanitizedId}\">⚓${sanitizedId}</span>`;\r\n\texec(\"insertHTML\", anchorHtml);\r\n};\r\n\r\nexport const insertHr = (exec) => {\r\n\texec(\"insertHTML\", \"<hr>\");\r\n};\r\n\r\nexport const insertImage = (exec) => {\r\n\tconst url = window.prompt(\"Enter image URL\", \"https://\");\r\n\tif (!url) return;\r\n\tconst alt = window.prompt(\"Enter image description (alt text)\", \"\");\r\n\tconst imageHtml = `<img src=\"${url}\" alt=\"${alt || ''}\" style=\"max-width: 100%; height: auto;\" />`;\r\n\texec(\"insertHTML\", imageHtml);\r\n};\r\n\r\nexport const insertVideo = (exec) => {\r\n\tconst url = window.prompt(\"Enter video URL (YouTube, MP4, etc.)\", \"https://\");\r\n\tif (!url) return;\r\n\t\r\n\t// Check if it's a YouTube URL\r\n\tconst youtubeMatch = url.match(/(?:youtube\\.com\\/watch\\?v=|youtu\\.be\\/)([^&\\s]+)/);\r\n\tif (youtubeMatch) {\r\n\t\tconst videoId = youtubeMatch[1];\r\n\t\tconst embedHtml = `<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/${videoId}\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen style=\"max-width: 100%;\"></iframe>`;\r\n\t\texec(\"insertHTML\", embedHtml);\r\n\t} else {\r\n\t\t// Assume it's a direct video URL\r\n\t\tconst videoHtml = `<video controls style=\"max-width: 100%; height: auto;\"><source src=\"${url}\" type=\"video/mp4\">Your browser does not support the video tag.</video>`;\r\n\t\texec(\"insertHTML\", videoHtml);\r\n\t}\r\n};\r\n","import { COMMANDS } from \"./editorCommands.js\";\r\n\r\nexport const onInput = (editorRef, setHtml, onChange, updateToolbarState) => {\r\n\tconst nextHtml = editorRef.current?.innerHTML || \"\";\r\n\tsetHtml(nextHtml);\r\n\tonChange({ html: nextHtml, text: editorRef.current?.innerText || \"\" });\r\n\tupdateToolbarState();\r\n};\r\n\r\nexport const onPaste = (event, plainPaste) => {\r\n\tif (!plainPaste) return;\r\n\tevent.preventDefault();\r\n\tlet text = event.clipboardData.getData(\"text/plain\");\r\n\t// remove leading numeric list markers from pasted plain text (per-line)\r\n\ttext = text.replace(/^\\s*\\d+[\\.)]\\s+/gm, \"\");\r\n\tdocument.execCommand(\"insertText\", false, text);\r\n};\r\n\r\nexport const createUpdateToolbarState = (editorRef, setSelectionText, setActiveToolMap) => {\r\n\treturn () => {\r\n\t\tconst selection = document.getSelection();\r\n\t\tif (!selection || selection.rangeCount === 0 || !editorRef.current) return;\r\n\t\tconst anchorNode = selection.anchorNode;\r\n\t\tconst isInsideEditor = anchorNode && editorRef.current.contains(anchorNode);\r\n\t\tif (!isInsideEditor) {\r\n\t\t\tsetSelectionText(\"\");\r\n\t\t\tsetActiveToolMap({});\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsetSelectionText(selection.toString());\r\n\t\tconst nextActive = {};\r\n\t\tCOMMANDS.forEach((item) => {\r\n\t\t\ttry {\r\n\t\t\t\tnextActive[item.cmd] = document.queryCommandState(item.cmd);\r\n\t\t\t} catch {\r\n\t\t\t\tnextActive[item.cmd] = false;\r\n\t\t\t}\r\n\t\t});\r\n\t\tsetActiveToolMap(nextActive);\r\n\t};\r\n};\r\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\r\nimport CodeBlock from \"./CodeBlock.jsx\";\r\nimport { DEFAULT_HTML } from \"./defaultContent.js\";\r\nimport { COMMANDS } from \"./editorCommands.js\";\r\nimport { exec as execCommand, clearAll as clearAllContent, exportHtml as exportHtmlContent } from \"./editorUtils.js\";\r\nimport { applyHeading as applyHeadingFormat, applyFontSize as applyFontSizeFormat, applyCustomFontSize as applyCustomFontSizeFormat, applyTextColor as applyTextColorFormat, applyBackgroundColor as applyBackgroundColorFormat, resetColors as resetColorsFormat } from \"./formattingFunctions.js\";\r\nimport { insertCodeBlock as insertCodeBlockContent, insertLink as insertLinkContent, insertTooltip as insertTooltipContent, insertAnchor as insertAnchorContent, insertHr as insertHrContent, insertImage as insertImageContent, insertVideo as insertVideoContent } from \"./insertFunctions.js\";\r\nimport { onInput as handleInput, onPaste as handlePaste, createUpdateToolbarState } from \"./eventHandlers.js\";\r\n\r\n// helper: strip leading numeric markers (e.g. \"1. \") from block-starting text nodes\r\nconst _stripLeadingNumberPrefix = (node) => {\r\n\tconst leadingNumberRE = /^\\s*\\d+[.)]\\s+/;\r\n\tif (!node) return;\r\n\tif (node.firstChild && node.firstChild.nodeType === Node.TEXT_NODE) {\r\n\t\tnode.firstChild.textContent = node.firstChild.textContent.replace(leadingNumberRE, \"\");\r\n\t}\r\n};\r\n\r\n// sanitize initial HTML: remove numeric list prefixes at block starts to avoid\r\n// duplicate markers when user toggles ordered-list\r\nconst sanitizeInitialHtml = (rawHtml) => {\r\n\tif (!rawHtml) return rawHtml;\r\n\ttry {\r\n\t\tconst tmp = document.createElement(\"div\");\r\n\t\ttmp.innerHTML = rawHtml;\r\n\t\tconst blocks = tmp.querySelectorAll(\"p, div, li, h1, h2, h3, h4\");\r\n\t\tblocks.forEach((el) => {\r\n\t\t\tif (el.closest && el.closest(\"pre, code\")) return;\r\n\t\t\t_stripLeadingNumberPrefix(el);\r\n\t\t});\r\n\t\treturn tmp.innerHTML;\r\n\t} catch {\r\n\t\treturn rawHtml;\r\n\t}\r\n};\r\n\r\nexport default function Editor({\r\n\ttheme = \"dark\",\r\n\ttools = COMMANDS.map((item) => item.cmd),\r\n\tshowDemoText = false,\r\n\tshowHeading = true,\r\n\tshowFontSize = true,\r\n\tshowAlign = true,\r\n\tshowLink = true,\r\n\tshowTooltip = true,\r\n\tshowAnchor = true,\r\n\tshowHr = true,\r\n\tshowMedia = true,\r\n\tshowUndoRedo = true,\r\n\tshowClear = true,\r\n\tshowPlainPaste = true,\r\n\tshowColor = true,\r\n\tshowFullscreen = true,\r\n\tcodeBlock = false,\r\n\tcodeBlockLanguages,\r\n\tshowLiveHtml = true,\r\n\tshowStats = true,\r\n\tshowCopyHtml = true,\r\n\tonChange = () => { },\r\n\tinitialHtml = \"\",\r\n\tt\r\n}) {\r\n\tlet translate\r\n\tif (t) {\r\n\t\ttranslate = t\r\n\t} else {\r\n\t\ttranslate = (key) => {\r\n\t\t\tconst translations = {\r\n\t\t\t\tsample: \"Sample Text\",\r\n\t\t\t\tUndo: \"Undo\",\r\n\t\t\t\tRedo: \"Redo\",\r\n\t\t\t\tFormat: \"Format\",\r\n\t\t\t\tParagraph: \"Paragraph\",\r\n\t\t\t\t\"Heading 1\": \"Heading 1\",\r\n\t\t\t\t\"Heading 2\": \"Heading 2\",\r\n\t\t\t\t\"Heading 3\": \"Heading 3\",\r\n\t\t\t\t\"Heading 4\": \"Heading 4\",\r\n\t\t\t\tBlockquote: \"Blockquote\",\r\n\t\t\t\t\"Code Block\": \"Code Block\",\r\n\t\t\t\tSize: \"Size\",\r\n\t\t\t\tCustom: \"Custom\",\r\n\t\t\t\tFont: \"Font\",\r\n\t\t\t\t\"Text color\": \"Text color\",\r\n\t\t\t\tBackground: \"Background\",\r\n\t\t\t\t\"Background color\": \"Background color\",\r\n\t\t\t\t\"Reset colors\": \"Reset colors\",\r\n\t\t\t\t\"Insert code block\": \"Insert code block\",\r\n\t\t\t\tAlign: \"Align\",\r\n\t\t\t\t\"Align Left\": \"Align Left\",\r\n\t\t\t\t\"Align Center\": \"Align Center\",\r\n\t\t\t\t\"Align Right\": \"Align Right\",\r\n\t\t\t\tJustify: \"Justify\",\r\n\t\t\t\tIndent: \"Indent\",\r\n\t\t\t\tOutdent: \"Outdent\",\r\n\t\t\t\t\"Add tooltip/note to selected text\": \"Add tooltip/note to selected text\",\r\n\t\t\t\t\"Insert anchor\": \"Insert anchor\",\r\n\t\t\t\t\"Insert horizontal line\": \"Insert horizontal line\",\r\n\t\t\t\t\"Insert picture\": \"Insert picture\",\r\n\t\t\t\t\"Insert video\": \"Insert video\",\r\n\t\t\t\t\"Clear format\": \"Clear format\",\r\n\t\t\t\t\"Clear all\": \"Clear all\",\r\n\t\t\t\t\"Paste as plain text\": \"Paste as plain text\",\r\n\t\t\t\t\"Exit fullscreen\": \"Exit fullscreen\",\r\n\t\t\t\t\"Enter fullscreen\": \"Enter fullscreen\",\r\n\t\t\t\twords: \"words\",\r\n\t\t\t\tcharacters: \"characters\",\r\n\t\t\t\tselected: \"selected\",\r\n\t\t\t\t\"No selection\": \"No selection\",\r\n\t\t\t\t\"Copy HTML\": \"Copy HTML\",\r\n\t\t\t\t\"Live HTML\": \"Live HTML\",\r\n\t\t\t\t\"Insert Code Block\": \"Insert Code Block\",\r\n\t\t\t\t\"Paste your code here\": \"Paste your code here\",\r\n\t\t\t\tCancel: \"Cancel\",\r\n\t\t\t\tInsert: \"Insert\",\r\n\t\t\t};\r\n\t\t\treturn translations[key] || key;\r\n\t\t}\r\n\t}\r\n\r\n\tconst editorRef = useRef(null);\r\n\t// when true we already applied `initialHtml` / demo content once — don't overwrite user edits\r\n\tconst initialAppliedRef = useRef(false);\r\n\tconst [html, setHtml] = useState(\"\");\r\n\tconst [plainPaste, setPlainPaste] = useState(true);\r\n\tconst [selectionText, setSelectionText] = useState(\"\");\r\n\tconst [heading, setHeading] = useState(\"p\");\r\n\tconst [fontSize, setFontSize] = useState(\"16\");\r\n\tconst [customSize, setCustomSize] = useState(\"\");\r\n\tconst [textColor, setTextColor] = useState(\"#1f2937\");\r\n\tconst [backgroundColor, setBackgroundColor] = useState(\"#ffff00\");\r\n\tconst [activeToolMap, setActiveToolMap] = useState({});\r\n\tconst [isFullscreen, setIsFullscreen] = useState(false);\r\n\tconst [isCodeModalOpen, setIsCodeModalOpen] = useState(false);\r\n\tconst [codeValue, setCodeValue] = useState(\"\");\r\n\tconst [codeLanguage, setCodeLanguage] = useState(\"js\");\r\n\tconst [codeTheme, setCodeTheme] = useState(theme);\r\n\r\n\tuseEffect(() => {\r\n\t\tsetCodeTheme(theme);\r\n\t}, [theme]);\r\n\r\n\t// NOTE: initialization for `initialHtml` / demo text moved below `updateToolbarState` declaration to avoid referencing\r\n\t// `updateToolbarState` before it is defined. See the effect inserted later in the file.\r\n\r\n\tconst stats = useMemo(() => {\r\n\t\tconst text = editorRef.current?.innerText || (typeof html === 'string' ? html.replace(/<[^>]+>/g, '') : '');\r\n\t\tconst words = text.trim() ? text.trim().split(/\\s+/).length : 0;\r\n\t\treturn {\r\n\t\t\twords,\r\n\t\t\tchars: text.length,\r\n\t\t};\r\n\t}, [html]);\r\n\r\n\tconst exec = (cmd, value = null) => {\r\n\t\texecCommand(editorRef, cmd, value, setHtml, onChange, updateToolbarState);\r\n\t};\r\n\r\n\tconst applyHeading = (next) => {\r\n\t\tsetHeading(next);\r\n\t\tapplyHeadingFormat(next, exec);\r\n\t};\r\n\r\n\tconst applyFontSize = (next) => {\r\n\t\tif (next === \"custom\") {\r\n\t\t\tsetFontSize(\"custom\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsetFontSize(next);\r\n\t\tapplyFontSizeFormat(next, exec, editorRef, setHtml, updateToolbarState);\r\n\t};\r\n\r\n\tconst applyCustomFontSize = (value) => {\r\n\t\tsetCustomSize(value);\r\n\t\tapplyCustomFontSizeFormat(value, exec, editorRef, setHtml, updateToolbarState);\r\n\t};\r\n\r\n\tconst applyTextColor = (next) => {\r\n\t\tsetTextColor(next);\r\n\t\tapplyTextColorFormat(next, exec);\r\n\t};\r\n\r\n\tconst applyBackgroundColor = (next) => {\r\n\t\tsetBackgroundColor(next);\r\n\t\tapplyBackgroundColorFormat(next, exec);\r\n\t};\r\n\r\n\tconst resetColors = () => {\r\n\t\tresetColorsFormat(theme, setTextColor, setBackgroundColor, exec);\r\n\t};\r\n\r\n\tconst insertCodeBlock = () => {\r\n\t\tinsertCodeBlockContent(codeValue, codeLanguage, codeTheme, exec, setIsCodeModalOpen, setCodeValue);\r\n\t};\r\n\r\n\tconst insertLink = () => {\r\n\t\tinsertLinkContent(exec);\r\n\t};\r\n\r\n\tconst insertTooltip = () => {\r\n\t\tinsertTooltipContent(editorRef, setHtml, onChange, updateToolbarState);\r\n\t};\r\n\r\n\tconst insertAnchor = () => {\r\n\t\tinsertAnchorContent(exec);\r\n\t};\r\n\r\n\tconst insertHr = () => {\r\n\t\tinsertHrContent(exec);\r\n\t};\r\n\r\n\tconst insertImage = () => {\r\n\t\tinsertImageContent(exec);\r\n\t};\r\n\r\n\tconst insertVideo = () => {\r\n\t\tinsertVideoContent(exec);\r\n\t};\r\n\r\n\tconst toggleFullscreen = () => {\r\n\t\tsetIsFullscreen(!isFullscreen);\r\n\t};\r\n\r\n\tconst removeFormat = () => exec(\"removeFormat\");\r\n\r\n\tconst clearAll = () => {\r\n\t\tclearAllContent(editorRef, setHtml, onChange, updateToolbarState);\r\n\t};\r\n\r\n\tconst onInput = () => {\r\n\t\thandleInput(editorRef, setHtml, onChange, updateToolbarState);\r\n\t\t// Add key hint to all links\r\n\t\tconst links = editorRef.current?.querySelectorAll('a') || [];\r\n\t\tlinks.forEach((link) => {\r\n\t\t\tif (!link.getAttribute('data-key-hint')) {\r\n\t\t\t\tlink.setAttribute('data-key-hint', 'Ctrl/Shift + Click to follow');\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n\tconst onPaste = (event) => {\r\n\t\thandlePaste(event, plainPaste);\r\n\t};\r\n\r\n\tconst onEditorClick = (event) => {\r\n\t\tif (event.target.tagName === 'A' && (event.ctrlKey || event.shiftKey || event.metaKey)) {\r\n\t\t\tconst href = event.target.getAttribute('href');\r\n\t\t\tif (href) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\twindow.open(href, '_blank');\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tconst updateToolbarStateRef = useRef(null);\r\nif (!updateToolbarStateRef.current) {\r\n\tupdateToolbarStateRef.current = createUpdateToolbarState(editorRef, setSelectionText, setActiveToolMap);\r\n}\r\nconst updateToolbarState = updateToolbarStateRef.current;\r\n\r\n\tuseEffect(() => {\r\n\t\tdocument.addEventListener(\"selectionchange\", updateToolbarState);\r\n\t\treturn () => document.removeEventListener(\"selectionchange\", updateToolbarState);\r\n\t}, [updateToolbarState]);\r\n\r\n\r\n\r\n\t// Initialize editor from `initialHtml` (applied once) or fall back to demo text.\r\n\t// Guard against re-applying `initialHtml` on every render — that was causing user edits to be overwritten.\r\n\tuseEffect(() => {\r\n\t\tif (!editorRef.current || initialAppliedRef.current) return;\r\n\r\n\t\t// apply `initialHtml` only once (initialization). If parent later wants to *reset*\r\n\t\t// the editor, we can add an explicit API — but default behaviour is \"initial only\".\r\n\t\tif (initialHtml) {\r\n\t\t\tconst safeHtml = sanitizeInitialHtml(initialHtml);\r\n\t\t\teditorRef.current.innerHTML = safeHtml;\r\n\t\t\tsetHtml(safeHtml);\r\n\t\t\tconst links = editorRef.current?.querySelectorAll('a') || [];\r\n\t\t\tlinks.forEach((link) => {\r\n\t\t\t\tif (!link.getAttribute('data-key-hint')) {\r\n\t\t\t\t\tlink.setAttribute('data-key-hint', 'Ctrl/Shift + Click to follow');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tupdateToolbarState();\r\n\t\t\ttry {\r\n\t\t\t\tif (!editorRef.current || editorRef.current.__lastOnChangeHtml !== safeHtml) {\r\n\t\t\t\t\tonChange(safeHtml);\r\n\t\t\t\t\tif (editorRef.current) editorRef.current.__lastOnChangeHtml = safeHtml;\r\n\t\t\t\t}\r\n\t\t\t} catch { /* noop */ }\r\n\t\t\tinitialAppliedRef.current = true;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (showDemoText) {\r\n\t\t\teditorRef.current.innerHTML = DEFAULT_HTML;\r\n\t\t\tsetHtml(editorRef.current.innerHTML);\r\n\t\t\tconst links = editorRef.current?.querySelectorAll('a') || [];\r\n\t\t\tlinks.forEach((link) => {\r\n\t\t\t\tif (!link.getAttribute('data-key-hint')) {\r\n\t\t\t\t\tlink.setAttribute('data-key-hint', 'Ctrl/Shift + Click to follow');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tupdateToolbarState();\r\n\t\t\tinitialAppliedRef.current = true;\r\n\t\t}\r\n\t}, [initialHtml, showDemoText, onChange, updateToolbarState]);\r\n\r\n\tconst exportHtml = async () => {\r\n\t\tawait exportHtmlContent(editorRef);\r\n\t};\r\n\r\n\tconst activeCommands = useMemo(\r\n\t\t() => COMMANDS.filter((item) => tools.includes(item.cmd)),\r\n\t\t[tools]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<section\r\n\t\t\tclassName={`editor-root theme-${theme}${showLiveHtml ? \" show-preview\" : \" no-preview\"}${isFullscreen ? \" fullscreen\" : \"\"}`}\r\n\t\t\tdata-theme={theme}\r\n\t\t>\r\n\t\t\t<div className=\"toolbar\">\r\n\t\t\t\t{showUndoRedo && (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<div className=\"toolbar-group\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclassName=\"toolbar-btn\"\r\n\t\t\t\t\t\t\t\tonClick={() => exec(\"undo\")}\r\n\t\t\t\t\t\t\t\ttitle={translate(\"Undo\")}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t↶\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclassName=\"toolbar-btn\"\r\n\t\t\t\t\t\t\t\tonClick={() => exec(\"redo\")}\r\n\t\t\t\t\t\t\t\ttitle={translate(\"Redo\")}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t↷\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<span className=\"toolbar-separator\">|</span>\r\n\t\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t\t{activeCommands.length > 0 && (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<div className=\"toolbar-group\">\r\n\t\t\t\t\t\t\t{activeCommands.map((item) => (\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\tkey={item.cmd}\r\n\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\tclassName={`toolbar-btn${activeToolMap[item.cmd] ? \" active\" : \"\"}`}\r\n\t\t\t\t\t\t\t\t\tonMouseDown={(event) => event.preventDefault()}\r\n\t\t\t\t\t\t\t\t\tonClick={() => exec(item.cmd)}\r\n\t\t\t\t\t\t\t\t\ttitle={translate(item.label)}\r\n\t\t\t\t\t\t\t\t\taria-pressed={activeToolMap[item.cmd] || false}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{item.icon}\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<span className=\"toolbar-separator\">|</span>\r\n\t\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t\t{(showHeading || showFontSize || showColor) && (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<div className=\"toolbar-group\">\r\n\t\t\t\t\t\t{showHeading && (\r\n\t\t\t\t\t\t\t<label className=\"toolbar-label\">\r\n\t\t\t\t\t\t\t\t{translate(\"Format\")}\r\n\t\t\t\t\t\t\t\t<select\r\n\t\t\t\t\t\t\t\t\tvalue={heading}\r\n\t\t\t\t\t\t\t\t\tonChange={(event) => applyHeading(event.target.value)}\r\n\t\t\t\t\t\t\t\t\tclassName=\"toolbar-select\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<option value=\"p\">{translate(\"Paragraph\")}</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"h1\">{translate(\"Heading 1\")}</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"h2\">{translate(\"Heading 2\")}</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"h3\">{translate(\"Heading 3\")}</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"h4\">{translate(\"Heading 4\")}</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"blockquote\">{translate(\"Blockquote\")}</option>\r\n\t\t\t\t\t\t\t\t\t{codeBlock && <option value=\"pre\">{translate(\"Code Block\")}</option>}\r\n\t\t\t\t\t\t\t\t</select>\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showFontSize && (\r\n\t\t\t\t\t\t\t<label className=\"toolbar-label\">\r\n\t\t\t\t\t\t\t\t{translate(\"Size\")}\r\n\t\t\t\t\t\t\t\t<select\r\n\t\t\t\t\t\t\t\t\tvalue={fontSize}\r\n\t\t\t\t\t\t\t\t\tonChange={(event) => applyFontSize(event.target.value)}\r\n\t\t\t\t\t\t\t\t\tclassName=\"toolbar-select\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<option value=\"10\">10px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"12\">12px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"14\">14px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"16\">16px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"18\">18px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"20\">20px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"22\">22px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"24\">24px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"28\">28px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"32\">32px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"36\">36px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"48\">48px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"custom\">{translate(\"Custom\")}</option>\r\n\t\t\t\t\t\t\t\t</select>\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showFontSize && fontSize === \"custom\" && (\r\n\t\t\t\t\t\t\t<label className=\"toolbar-label\">\r\n\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\t\tmin=\"8\"\r\n\t\t\t\t\t\t\t\t\tmax=\"200\"\r\n\t\t\t\t\t\t\t\t\tvalue={customSize}\r\n\t\t\t\t\t\t\t\t\tonChange={(event) => applyCustomFontSize(event.target.value)}\r\n\t\t\t\t\t\t\t\t\tplaceholder={translate(\"Size\")}\r\n\t\t\t\t\t\t\t\t\tclassName=\"toolbar-input\"\r\n\t\t\t\t\t\t\t\t\tstyle={{ width: \"60px\" }}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\tpx\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showColor && (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t<label className=\"toolbar-label color-label\">\r\n\t\t\t\t\t\t\t\t\t{translate(\"Font\")}\r\n\t\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\t\ttype=\"color\"\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"toolbar-color\"\r\n\t\t\t\t\t\t\t\t\t\tvalue={textColor}\r\n\t\t\t\t\t\t\t\t\t\tonChange={(event) => applyTextColor(event.target.value)}\r\n\t\t\t\t\t\t\t\t\t\taria-label={translate(\"Text color\")}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t\t<label className=\"toolbar-label color-label\">\r\n\t\t\t\t\t\t\t\t\t{translate(\"Background\")}\r\n\t\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\t\ttype=\"color\"\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"toolbar-color\"\r\n\t\t\t\t\t\t\t\t\t\tvalue={backgroundColor}\r\n\t\t\t\t\t\t\t\t\t\tonChange={(event) => applyBackgroundColor(event.target.value)}\r\n\t\t\t\t\t\t\t\t\t\taria-label={translate(\"Background color\")}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\tclassName=\"toolbar-btn toolbar-btn-small\"\r\n\t\t\t\t\t\t\t\t\tonClick={resetColors}\r\n\t\t\t\t\t\t\t\t\ttitle={translate(\"Reset colors\")}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t↺\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{codeBlock && (\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclassName=\"toolbar-btn\"\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tsetCodeTheme(theme);\r\n\t\t\t\t\t\t\t\t\tsetIsCodeModalOpen(true);\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\ttitle={translate(\"Insert code block\")}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{translate(\"Code Block\")}\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showAlign && (\r\n\t\t\t\t\t\t\t<div className=\"toolbar-label\">\r\n\t\t\t\t\t\t\t\t{translate(\"Align\")}\r\n\t\t\t\t\t\t\t\t<div className=\"align-buttons\">\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"toolbar-btn toolbar-btn-small\"\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => exec(\"justifyLeft\")}\r\n\t\t\t\t\t\t\t\t\t\ttitle={translate(\"Align Left\")}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t⟸\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"toolbar-btn toolbar-btn-small\"\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => exec(\"justifyCenter\")}\r\n\t\t\t\t\t\t\t\t\t\ttitle={translate(\"Align Center\")}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t⇔\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"toolbar-btn toolbar-btn-small\"\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => exec(\"justifyRight\")}\r\n\t\t\t\t\t\t\t\t\t\ttitle={translate(\"Align Right\")}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t⟹\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"toolbar-btn toolbar-btn-small\"\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => exec(\"justifyFull\")}\r\n\t\t\t\t\t\t\t\t\t\ttitle={translate(\"Justify\")}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t⇿\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<span className=\"toolbar-separator\">|</span>\r\n\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t\t{(showLink || showTooltip || showAnchor || showHr || showMedia || showClear) && (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t<div className=\"toolbar-group\">\r\n\t\t\t\t\t\t{showLink && (\r\n\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={insertLink}>\r\n\t\t\t\t\t\t\t\t🔗\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showTooltip && (\r\n\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={insertTooltip} title={translate(\"Add tooltip/note to selected text\")}>\r\n\t\t\t\t\t\t\t\t💬\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showAnchor && (\r\n\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={insertAnchor} title={translate(\"Insert anchor\")}>\r\n\t\t\t\t\t\t\t\t⚓\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showHr && (\r\n\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={insertHr} title={translate(\"Insert horizontal line\")}>\r\n\t\t\t\t\t\t\t\t─\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showMedia && (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={insertImage} title={translate(\"Insert picture\")}>\r\n\t\t\t\t\t\t\t\t\t🖼️\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={insertVideo} title={translate(\"Insert video\")}>\r\n\t\t\t\t\t\t\t\t\t🎬\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showClear && (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={removeFormat}>\r\n\t\t\t\t\t\t\t\t\t{translate(\"Clear format\")}\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn danger\" onClick={clearAll}>\r\n\t\t\t\t\t\t\t\t\t{translate(\"Clear all\")}\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<span className=\"toolbar-separator\">|</span>\r\n\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t\t{showPlainPaste && (\r\n\t\t\t\t\t<div className=\"toolbar-group toggle\">\r\n\t\t\t\t\t\t<label className=\"toggle-row\">\r\n\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\ttype=\"checkbox\"\r\n\t\t\t\t\t\t\t\tchecked={plainPaste}\r\n\t\t\t\t\t\t\t\tonChange={(event) => setPlainPaste(event.target.checked)}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t{translate(\"Paste as plain text\")}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t)}\r\n\t\t\t\t{showFullscreen && (\r\n\t\t\t\t\t<div className=\"toolbar-group\">\r\n\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\tclassName=\"toolbar-btn\"\r\n\t\t\t\t\t\t\tonClick={toggleFullscreen}\r\n\t\t\t\t\t\t\ttitle={isFullscreen ? translate(\"Exit fullscreen\") : translate(\"Enter fullscreen\")}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{isFullscreen ? \"⤓\" : \"⤢\"}\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\r\n\t\t\t<div className=\"editor-area\">\r\n\t\t\t\t<div\r\n\t\t\t\t\tref={editorRef}\r\n\t\t\t\t\tclassName=\"editor-surface\"\r\n\t\t\t\t\tcontentEditable\r\n\t\t\t\t\tonInput={onInput}\r\n\t\t\t\t\tonPaste={onPaste}\r\n\t\t\t\tonClick={onEditorClick}\r\n\t\t\t\tonKeyDown={(e) => {\r\n\t\t\t\t\t// Tab => indent, Shift+Tab => outdent (do not intercept inside code/pre)\r\n\t\t\t\t\tif (e.key === 'Tab') {\r\n\t\t\t\t\t\tconst sel = document.getSelection();\r\n\t\t\t\t\t\tconst node = sel && sel.anchorNode ? (sel.anchorNode.nodeType === Node.TEXT_NODE ? sel.anchorNode.parentElement : sel.anchorNode) : null;\r\n\t\t\t\t\t\tif (node && node.closest && node.closest('pre, code')) return; // allow tab in code blocks\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tif (e.shiftKey) exec('outdent');\r\n\t\t\t\t\t\telse exec('indent');\r\n\t\t\t\t\t}\r\n\t\t\t\t}}\r\n\t\t\t\tonKeyUp={updateToolbarState}\r\n\t\t\t\tonMouseUp={updateToolbarState}\r\n\t\t\t\tsuppressContentEditableWarning\r\n\t\t\t\tspellCheck\r\n\t\t\t/>\r\n\t\t</div>\r\n\r\n\t\t\t{(showStats || showCopyHtml) && (\r\n\t\t\t\t<footer className=\"editor-footer\">\r\n\t\t\t\t\t{showStats && (\r\n\t\t\t\t\t\t<div className=\"footer-stats\">\r\n\t\t\t\t\t\t\t<span>{stats.words} {translate(\"words\")}</span>\r\n\t\t\t\t\t\t\t<span>{stats.chars} {translate(\"characters\")}</span>\r\n\t\t\t\t\t\t\t<span>{selectionText ? `${selectionText.length} ${translate(\"selected\")}` : translate(\"No selection\")}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{showCopyHtml && (\r\n\t\t\t\t\t\t<div className=\"footer-actions\">\r\n\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={exportHtml}>\r\n\t\t\t\t\t\t\t\t{translate(\"Copy HTML\")}\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</footer>\r\n\t\t\t)}\r\n\r\n\t\t\t{showLiveHtml && (\r\n\t\t\t\t<aside className=\"editor-preview\">\r\n\t\t\t\t\t<pre className=\"preview-code\">{html}</pre>\r\n\t\t\t\t\t<div className=\"preview-header\">{translate(\"Live HTML\")}</div>\r\n\t\t\t\t</aside>\r\n\t\t\t)}\r\n\r\n\t\t\t{codeBlock && isCodeModalOpen && (\r\n\t\t\t\t<div className=\"modal-backdrop\" role=\"dialog\" aria-modal=\"true\">\r\n\t\t\t\t\t<div className=\"modal\">\r\n\t\t\t\t\t\t<div className=\"modal-header\">\r\n\t\t\t\t\t\t\t{translate(\"Insert Code Block\")}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<CodeBlock\r\n\t\t\t\t\t\t\tvalue={codeValue}\r\n\t\t\t\t\t\t\tlanguage={codeLanguage}\r\n\t\t\t\t\t\t\ttheme={codeTheme}\r\n\t\t\t\t\t\t\tlanguages={codeBlockLanguages}\r\n\t\t\t\t\t\t\tonChange={setCodeValue}\r\n\t\t\t\t\t\t\tonLanguageChange={setCodeLanguage}\r\n\t\t\t\t\t\t\tonThemeChange={setCodeTheme}\r\n\t\t\t\t\t\t\tplaceholder={translate(\"Paste your code here\")}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t<div className=\"modal-actions\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclassName=\"toolbar-btn\"\r\n\t\t\t\t\t\t\t\tonClick={() => setIsCodeModalOpen(false)}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{translate(\"Cancel\")}\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclassName=\"toolbar-btn\"\r\n\t\t\t\t\t\t\t\tonClick={insertCodeBlock}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{translate(\"Insert\")}\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\t\t</section>\r\n\t);\r\n}\r\n","// src/index.js - Library entry point\r\nimport \"./index.css\";\r\nimport Editor from \"./components/Editor.jsx\";\r\nimport CodeBlock from \"./components/CodeBlock.jsx\";\r\n\r\nexport default Editor;\r\nexport { CodeBlock };\r\n"],"names":["DEFAULT_LANGUAGES","value","label","DEFAULT_THEMES","CodeBlock","language","theme","languages","themes","onChange","onLanguageChange","onThemeChange","placeholder","normalizedLanguages","useMemo","Array","isArray","length","map","item","currentLanguage","find","React","createElement","className","event","target","key","spellCheck","DEFAULT_HTML","COMMANDS","cmd","icon","escapeHtml","replace","exec","editorRef","setHtml","updateToolbarState","current","focus","document","execCommand","lis","querySelectorAll","leadingNumberRE","forEach","li","firstChild","nodeType","Node","TEXT_NODE","textContent","nextHtml","innerHTML","last","__lastOnChangeHtml","err","html","text","innerText","clearAll","exportHtml","payload","navigator","clipboard","writeText","alert","applyHeading","next","toUpperCase","applyFontSize","selection","window","getSelection","rangeCount","range","getRangeAt","collapsed","fontElements","el","removeAttribute","style","fontSize","applyCustomFontSize","isNaN","applyTextColor","applyBackgroundColor","resetColors","setTextColor","setBackgroundColor","defaultText","defaultBg","insertCodeBlock","codeValue","codeLanguage","codeTheme","setIsCodeModalOpen","setCodeValue","safeCode","languageClass","htmlBlock","insertLink","url","prompt","insertTooltip","selectedText","toString","tooltip","span","title","surroundContents","appendChild","extractContents","insertNode","removeAllRanges","insertAnchor","id","sanitizedId","anchorHtml","insertHr","insertImage","alt","imageHtml","insertVideo","youtubeMatch","match","videoId","embedHtml","videoHtml","onInput","onPaste","plainPaste","preventDefault","clipboardData","getData","createUpdateToolbarState","setSelectionText","setActiveToolMap","anchorNode","isInsideEditor","contains","nextActive","queryCommandState","_stripLeadingNumberPrefix","node","sanitizeInitialHtml","rawHtml","tmp","blocks","closest","Editor","tools","showDemoText","showHeading","showFontSize","showAlign","showLink","showTooltip","showAnchor","showHr","showMedia","showUndoRedo","showClear","showPlainPaste","showColor","showFullscreen","codeBlock","codeBlockLanguages","showLiveHtml","showStats","showCopyHtml","initialHtml","t","translate","translations","sample","Undo","Redo","Format","Paragraph","Blockquote","Size","Custom","Font","Background","Align","Justify","Indent","Outdent","words","characters","selected","Cancel","Insert","useRef","initialAppliedRef","useState","setPlainPaste","selectionText","heading","setHeading","setFontSize","customSize","setCustomSize","textColor","backgroundColor","activeToolMap","isFullscreen","setIsFullscreen","isCodeModalOpen","setCodeLanguage","setCodeTheme","useEffect","stats","trim","split","chars","applyHeadingFormat","applyFontSizeFormat","applyCustomFontSizeFormat","applyTextColorFormat","applyBackgroundColorFormat","resetColorsFormat","insertCodeBlockContent","insertLinkContent","insertTooltipContent","insertAnchorContent","insertHrContent","insertImageContent","insertVideoContent","toggleFullscreen","removeFormat","clearAllContent","handleInput","links","link","getAttribute","setAttribute","handlePaste","onEditorClick","tagName","ctrlKey","shiftKey","metaKey","href","open","updateToolbarStateRef","addEventListener","removeEventListener","safeHtml","exportHtmlContent","activeCommands","filter","includes","Fragment","type","onClick","onMouseDown","min","max","width","checked","ref","contentEditable","onKeyDown","e","sel","parentElement","onKeyUp","onMouseUp","suppressContentEditableWarning","role"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -117,6 +117,14 @@ const COMMANDS = [{
117
117
  cmd: "insertOrderedList",
118
118
  label: "Numbered",
119
119
  icon: "1."
120
+ }, {
121
+ cmd: "indent",
122
+ label: "Indent",
123
+ icon: "↦"
124
+ }, {
125
+ cmd: "outdent",
126
+ label: "Outdent",
127
+ icon: "↤"
120
128
  }, {
121
129
  cmd: "justifyLeft",
122
130
  label: "Left",
@@ -443,6 +451,8 @@ function Editor({
443
451
  "Align Center": "Align Center",
444
452
  "Align Right": "Align Right",
445
453
  Justify: "Justify",
454
+ Indent: "Indent",
455
+ Outdent: "Outdent",
446
456
  "Add tooltip/note to selected text": "Add tooltip/note to selected text",
447
457
  "Insert anchor": "Insert anchor",
448
458
  "Insert horizontal line": "Insert horizontal line",
@@ -851,6 +861,16 @@ function Editor({
851
861
  onInput: onInput$1,
852
862
  onPaste: onPaste$1,
853
863
  onClick: onEditorClick,
864
+ onKeyDown: e => {
865
+ // Tab => indent, Shift+Tab => outdent (do not intercept inside code/pre)
866
+ if (e.key === 'Tab') {
867
+ const sel = document.getSelection();
868
+ const node = sel && sel.anchorNode ? sel.anchorNode.nodeType === Node.TEXT_NODE ? sel.anchorNode.parentElement : sel.anchorNode : null;
869
+ if (node && node.closest && node.closest('pre, code')) return; // allow tab in code blocks
870
+ e.preventDefault();
871
+ if (e.shiftKey) exec$1('outdent');else exec$1('indent');
872
+ }
873
+ },
854
874
  onKeyUp: updateToolbarState,
855
875
  onMouseUp: updateToolbarState,
856
876
  suppressContentEditableWarning: true,
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/components/CodeBlock.jsx","../src/components/defaultContent.js","../src/components/editorCommands.js","../src/components/editorUtils.js","../src/components/formattingFunctions.js","../src/components/insertFunctions.js","../src/components/eventHandlers.js","../src/components/Editor.jsx","../src/index.js"],"sourcesContent":["import React, { useMemo } from \"react\";\r\n\r\nconst DEFAULT_LANGUAGES = [\r\n { value: \"plain\", label: \"Plain\" },\r\n { value: \"js\", label: \"JavaScript\" },\r\n { value: \"ts\", label: \"TypeScript\" },\r\n { value: \"java\", label: \"Java\" },\r\n { value: \"css\", label: \"CSS\" },\r\n { value: \"html\", label: \"HTML\" },\r\n { value: \"json\", label: \"JSON\" },\r\n];\r\n\r\nconst DEFAULT_THEMES = [\r\n { value: \"dark\", label: \"Dark\" },\r\n { value: \"light\", label: \"Light\" },\r\n];\r\n\r\nexport default function CodeBlock({\r\n value = \"\",\r\n language = \"plain\",\r\n theme = \"dark\",\r\n languages = DEFAULT_LANGUAGES,\r\n themes = DEFAULT_THEMES,\r\n onChange = () => {},\r\n onLanguageChange = () => {},\r\n onThemeChange = () => {},\r\n placeholder = \"Paste code here\",\r\n}) {\r\n const normalizedLanguages = useMemo(() => {\r\n if (!Array.isArray(languages) || languages.length === 0) return DEFAULT_LANGUAGES;\r\n if (typeof languages[0] === \"string\") {\r\n return languages.map((item) => ({ value: item, label: item }));\r\n }\r\n return languages;\r\n }, [languages]);\r\n\r\n const currentLanguage = useMemo(\r\n () => normalizedLanguages.find((item) => item.value === language) || normalizedLanguages[0],\r\n [language, normalizedLanguages]\r\n );\r\n\r\n return (\r\n <section className={`code-block code-block-${theme}`} data-language={currentLanguage?.value}>\r\n <header className=\"code-block-toolbar\">\r\n <label className=\"code-block-label\">\r\n Language\r\n <select\r\n className=\"code-block-select\"\r\n value={currentLanguage?.value}\r\n onChange={(event) => onLanguageChange(event.target.value)}\r\n >\r\n {normalizedLanguages.map((item) => (\r\n <option key={item.value} value={item.value}>\r\n {item.label}\r\n </option>\r\n ))}\r\n </select>\r\n </label>\r\n <label className=\"code-block-label\">\r\n Theme\r\n <select\r\n className=\"code-block-select\"\r\n value={theme}\r\n onChange={(event) => onThemeChange(event.target.value)}\r\n >\r\n {themes.map((item) => (\r\n <option key={item.value} value={item.value}>\r\n {item.label}\r\n </option>\r\n ))}\r\n </select>\r\n </label>\r\n </header>\r\n <textarea\r\n className=\"code-block-area\"\r\n value={value}\r\n onChange={(event) => onChange(event.target.value)}\r\n placeholder={placeholder}\r\n spellCheck={false}\r\n />\r\n </section>\r\n );\r\n}\r\n","export const DEFAULT_HTML = `\r\n\t<h1>Welcome</h1>\r\n\t<p>This is a lightweight WYSIWYG editor built without external libraries.</p>\r\n\t<ul>\r\n\t\t<li>Edit text directly</li>\r\n\t\t<li>Use the toolbar for formatting</li>\r\n\t\t<li>Copy, paste, and export HTML</li>\r\n\t</ul>\r\n`;\r\n","export const COMMANDS = [\r\n\t{ cmd: \"bold\", label: \"Bold\", icon: \"B\" },\r\n\t{ cmd: \"italic\", label: \"Italic\", icon: \"I\" },\r\n\t{ cmd: \"underline\", label: \"Underline\", icon: \"U\" },\r\n\t{ cmd: \"strikeThrough\", label: \"Strike\", icon: \"S\" },\r\n\t{ cmd: \"insertUnorderedList\", label: \"Bullets\", icon: \"•\" },\r\n\t{ cmd: \"insertOrderedList\", label: \"Numbered\", icon: \"1.\" },\r\n\t{ cmd: \"justifyLeft\", label: \"Left\", icon: \"⟸\" },\r\n\t{ cmd: \"justifyCenter\", label: \"Center\", icon: \"⇔\" },\r\n\t{ cmd: \"justifyRight\", label: \"Right\", icon: \"⟹\" },\r\n];\r\n","export const escapeHtml = (value) =>\r\n\tvalue\r\n\t\t.replace(/&/g, \"&amp;\")\r\n\t\t.replace(/</g, \"&lt;\")\r\n\t\t.replace(/>/g, \"&gt;\")\r\n\t\t.replace(/\\\"/g, \"&quot;\")\r\n\t\t.replace(/'/g, \"&#039;\");\r\n\r\nexport const exec = (editorRef, cmd, value = null, setHtml, onChange, updateToolbarState) => {\r\n\teditorRef.current?.focus();\r\n\tdocument.execCommand(cmd, false, value);\r\n\r\n\t// If user just toggled an ordered list, strip any leading numeric prefixes\r\n\t// inside list items (e.g. \"1. Item\") so the browser marker doesn't duplicate.\r\n\tif (cmd === \"insertOrderedList\" && editorRef.current) {\r\n\t\tconst lis = editorRef.current.querySelectorAll(\"li\");\r\n\t\tconst leadingNumberRE = /^\\s*\\d+[.)]\\s+/;\r\n\t\tlis.forEach((li) => {\r\n\t\t\t// only strip on plain-text starts (avoid breaking HTML children)\r\n\t\t\tif (li.firstChild && li.firstChild.nodeType === Node.TEXT_NODE) {\r\n\t\t\t\tli.firstChild.textContent = li.firstChild.textContent.replace(leadingNumberRE, \"\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tconst nextHtml = editorRef.current?.innerHTML || \"\";\r\n\tsetHtml(nextHtml);\r\n\r\n\t// avoid flooding parent with identical payloads (prevents some update loops)\r\n\ttry {\r\n\t\tif (editorRef.current) {\r\n\t\t\tconst last = editorRef.current.__lastOnChangeHtml || \"\";\r\n\t\t\tif (last === nextHtml) {\r\n\t\t\t\t// still update toolbar state but skip notifying parent\r\n\t\t\t\tupdateToolbarState();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\teditorRef.current.__lastOnChangeHtml = nextHtml;\r\n\t\t}\r\n\t} catch (err) {\r\n\t\t// ignore\r\n\t}\r\n\r\n\tonChange({ html: nextHtml, text: editorRef.current?.innerText || \"\" });\r\n\tupdateToolbarState();\r\n};\r\n\r\nexport const removeFormat = (exec) => exec(\"removeFormat\");\r\n\r\nexport const clearAll = (editorRef, setHtml, onChange, updateToolbarState) => {\r\n\tif (!editorRef.current) return;\r\n\teditorRef.current.innerHTML = \"<p></p>\";\r\n\tsetHtml(editorRef.current.innerHTML);\r\n\tonChange({ html: editorRef.current.innerHTML, text: editorRef.current.innerText || \"\" });\r\n\tupdateToolbarState();\r\n};\r\n\r\nexport const exportHtml = async (editorRef) => {\r\n\tconst payload = editorRef.current?.innerHTML || \"\";\r\n\tawait navigator.clipboard.writeText(payload);\r\n\talert(\"HTML copied to clipboard.\");\r\n};\r\n","export const applyHeading = (next, exec) => {\r\n\tif (next === \"p\") {\r\n\t\texec(\"formatBlock\", \"P\");\r\n\t\treturn;\r\n\t}\r\n\tif (next === \"pre\") {\r\n\t\texec(\"formatBlock\", \"PRE\");\r\n\t\treturn;\r\n\t}\r\n\texec(\"formatBlock\", next.toUpperCase());\r\n};\r\n\r\nexport const applyFontSize = (next, exec, editorRef, setHtml, updateToolbarState) => {\r\n\tconst selection = window.getSelection();\r\n\tif (!selection || selection.rangeCount === 0) return;\r\n\t\r\n\tconst range = selection.getRangeAt(0);\r\n\tif (range.collapsed) return; // No selection\r\n\t\r\n\texec(\"fontSize\", \"7\");\r\n\tconst fontElements = editorRef.current?.querySelectorAll(\"font[size='7']\") || [];\r\n\tfontElements.forEach((el) => {\r\n\t\tel.removeAttribute(\"size\");\r\n\t\tel.style.fontSize = `${next}px`;\r\n\t});\r\n\tsetHtml(editorRef.current?.innerHTML || \"\");\r\n\tupdateToolbarState();\r\n};\r\n\r\nexport const applyCustomFontSize = (value, exec, editorRef, setHtml, updateToolbarState) => {\r\n\tif (!value || isNaN(value)) return;\r\n\t\r\n\tconst selection = window.getSelection();\r\n\tif (!selection || selection.rangeCount === 0) return;\r\n\t\r\n\tconst range = selection.getRangeAt(0);\r\n\tif (range.collapsed) return; // No selection\r\n\t\r\n\texec(\"fontSize\", \"7\");\r\n\tconst fontElements = editorRef.current?.querySelectorAll(\"font[size='7']\") || [];\r\n\tfontElements.forEach((el) => {\r\n\t\tel.removeAttribute(\"size\");\r\n\t\tel.style.fontSize = `${value}px`;\r\n\t});\r\n\tsetHtml(editorRef.current?.innerHTML || \"\");\r\n\tupdateToolbarState();\r\n};\r\n\r\nexport const applyTextColor = (next, exec) => {\r\n\texec(\"foreColor\", next);\r\n};\r\n\r\nexport const applyBackgroundColor = (next, exec) => {\r\n\texec(\"hiliteColor\", next);\r\n};\r\n\r\nexport const resetColors = (theme, setTextColor, setBackgroundColor, exec) => {\r\n\tconst defaultText = theme === \"dark\" ? \"#e5e7eb\" : \"#1f2937\";\r\n\tconst defaultBg = \"#ffff00\";\r\n\tsetTextColor(defaultText);\r\n\tsetBackgroundColor(defaultBg);\r\n\texec(\"removeFormat\");\r\n};\r\n","import { escapeHtml } from \"./editorUtils.js\";\r\n\r\nexport const insertCodeBlock = (codeValue, codeLanguage, codeTheme, exec, setIsCodeModalOpen, setCodeValue) => {\r\n\tconst safeCode = escapeHtml(codeValue || \"\");\r\n\tconst languageClass = codeLanguage ? `language-${codeLanguage}` : \"language-plain\";\r\n\tconst htmlBlock = `<pre class=\"code-block-shell\" data-theme=\"${codeTheme}\"><code class=\"${languageClass}\">${safeCode}</code></pre>`;\r\n\texec(\"insertHTML\", htmlBlock);\r\n\tsetIsCodeModalOpen(false);\r\n\tsetCodeValue(\"\");\r\n};\r\n\r\nexport const insertLink = (exec) => {\r\n\tconst url = window.prompt(\"Enter URL\", \"https://\");\r\n\tif (!url) return;\r\n\texec(\"createLink\", url);\r\n};\r\n\r\nexport const insertTooltip = (editorRef, setHtml, onChange, updateToolbarState) => {\r\n\tconst selection = window.getSelection();\r\n\tif (!selection || selection.rangeCount === 0) return;\r\n\tconst selectedText = selection.toString();\r\n\tif (!selectedText) {\r\n\t\talert(\"Please select some text first\");\r\n\t\treturn;\r\n\t}\r\n\tconst tooltip = window.prompt(\"Enter tooltip/note text\", \"\");\r\n\tif (!tooltip) return;\r\n\t\r\n\tconst range = selection.getRangeAt(0);\r\n\tconst span = document.createElement(\"span\");\r\n\tspan.className = \"has-tooltip\";\r\n\tspan.title = tooltip;\r\n\t\r\n\ttry {\r\n\t\trange.surroundContents(span);\r\n\t} catch {\r\n\t\t// If surroundContents fails, use alternative method\r\n\t\tspan.appendChild(range.extractContents());\r\n\t\trange.insertNode(span);\r\n\t}\r\n\t\r\n\tselection.removeAllRanges();\r\n\tconst nextHtml = editorRef.current?.innerHTML || \"\";\r\n\tsetHtml(nextHtml);\r\n\tonChange({ html: nextHtml, text: editorRef.current?.innerText || \"\" });\r\n\tupdateToolbarState();\r\n};\r\n\r\nexport const insertAnchor = (exec) => {\r\n\tconst id = window.prompt(\"Enter anchor ID\", \"\");\r\n\tif (!id) return;\r\n\tconst sanitizedId = id.replace(/[^a-zA-Z0-9-_]/g, \"\");\r\n\tconst anchorHtml = `<span class=\"anchor-marker\" id=\"${sanitizedId}\" data-anchor=\"${sanitizedId}\">⚓${sanitizedId}</span>`;\r\n\texec(\"insertHTML\", anchorHtml);\r\n};\r\n\r\nexport const insertHr = (exec) => {\r\n\texec(\"insertHTML\", \"<hr>\");\r\n};\r\n\r\nexport const insertImage = (exec) => {\r\n\tconst url = window.prompt(\"Enter image URL\", \"https://\");\r\n\tif (!url) return;\r\n\tconst alt = window.prompt(\"Enter image description (alt text)\", \"\");\r\n\tconst imageHtml = `<img src=\"${url}\" alt=\"${alt || ''}\" style=\"max-width: 100%; height: auto;\" />`;\r\n\texec(\"insertHTML\", imageHtml);\r\n};\r\n\r\nexport const insertVideo = (exec) => {\r\n\tconst url = window.prompt(\"Enter video URL (YouTube, MP4, etc.)\", \"https://\");\r\n\tif (!url) return;\r\n\t\r\n\t// Check if it's a YouTube URL\r\n\tconst youtubeMatch = url.match(/(?:youtube\\.com\\/watch\\?v=|youtu\\.be\\/)([^&\\s]+)/);\r\n\tif (youtubeMatch) {\r\n\t\tconst videoId = youtubeMatch[1];\r\n\t\tconst embedHtml = `<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/${videoId}\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen style=\"max-width: 100%;\"></iframe>`;\r\n\t\texec(\"insertHTML\", embedHtml);\r\n\t} else {\r\n\t\t// Assume it's a direct video URL\r\n\t\tconst videoHtml = `<video controls style=\"max-width: 100%; height: auto;\"><source src=\"${url}\" type=\"video/mp4\">Your browser does not support the video tag.</video>`;\r\n\t\texec(\"insertHTML\", videoHtml);\r\n\t}\r\n};\r\n","import { COMMANDS } from \"./editorCommands.js\";\r\n\r\nexport const onInput = (editorRef, setHtml, onChange, updateToolbarState) => {\r\n\tconst nextHtml = editorRef.current?.innerHTML || \"\";\r\n\tsetHtml(nextHtml);\r\n\tonChange({ html: nextHtml, text: editorRef.current?.innerText || \"\" });\r\n\tupdateToolbarState();\r\n};\r\n\r\nexport const onPaste = (event, plainPaste) => {\r\n\tif (!plainPaste) return;\r\n\tevent.preventDefault();\r\n\tlet text = event.clipboardData.getData(\"text/plain\");\r\n\t// remove leading numeric list markers from pasted plain text (per-line)\r\n\ttext = text.replace(/^\\s*\\d+[\\.)]\\s+/gm, \"\");\r\n\tdocument.execCommand(\"insertText\", false, text);\r\n};\r\n\r\nexport const createUpdateToolbarState = (editorRef, setSelectionText, setActiveToolMap) => {\r\n\treturn () => {\r\n\t\tconst selection = document.getSelection();\r\n\t\tif (!selection || selection.rangeCount === 0 || !editorRef.current) return;\r\n\t\tconst anchorNode = selection.anchorNode;\r\n\t\tconst isInsideEditor = anchorNode && editorRef.current.contains(anchorNode);\r\n\t\tif (!isInsideEditor) {\r\n\t\t\tsetSelectionText(\"\");\r\n\t\t\tsetActiveToolMap({});\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsetSelectionText(selection.toString());\r\n\t\tconst nextActive = {};\r\n\t\tCOMMANDS.forEach((item) => {\r\n\t\t\ttry {\r\n\t\t\t\tnextActive[item.cmd] = document.queryCommandState(item.cmd);\r\n\t\t\t} catch {\r\n\t\t\t\tnextActive[item.cmd] = false;\r\n\t\t\t}\r\n\t\t});\r\n\t\tsetActiveToolMap(nextActive);\r\n\t};\r\n};\r\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\r\nimport CodeBlock from \"./CodeBlock.jsx\";\r\nimport { DEFAULT_HTML } from \"./defaultContent.js\";\r\nimport { COMMANDS } from \"./editorCommands.js\";\r\nimport { exec as execCommand, clearAll as clearAllContent, exportHtml as exportHtmlContent } from \"./editorUtils.js\";\r\nimport { applyHeading as applyHeadingFormat, applyFontSize as applyFontSizeFormat, applyCustomFontSize as applyCustomFontSizeFormat, applyTextColor as applyTextColorFormat, applyBackgroundColor as applyBackgroundColorFormat, resetColors as resetColorsFormat } from \"./formattingFunctions.js\";\r\nimport { insertCodeBlock as insertCodeBlockContent, insertLink as insertLinkContent, insertTooltip as insertTooltipContent, insertAnchor as insertAnchorContent, insertHr as insertHrContent, insertImage as insertImageContent, insertVideo as insertVideoContent } from \"./insertFunctions.js\";\r\nimport { onInput as handleInput, onPaste as handlePaste, createUpdateToolbarState } from \"./eventHandlers.js\";\r\n\r\n// helper: strip leading numeric markers (e.g. \"1. \") from block-starting text nodes\r\nconst _stripLeadingNumberPrefix = (node) => {\r\n\tconst leadingNumberRE = /^\\s*\\d+[.)]\\s+/;\r\n\tif (!node) return;\r\n\tif (node.firstChild && node.firstChild.nodeType === Node.TEXT_NODE) {\r\n\t\tnode.firstChild.textContent = node.firstChild.textContent.replace(leadingNumberRE, \"\");\r\n\t}\r\n};\r\n\r\n// sanitize initial HTML: remove numeric list prefixes at block starts to avoid\r\n// duplicate markers when user toggles ordered-list\r\nconst sanitizeInitialHtml = (rawHtml) => {\r\n\tif (!rawHtml) return rawHtml;\r\n\ttry {\r\n\t\tconst tmp = document.createElement(\"div\");\r\n\t\ttmp.innerHTML = rawHtml;\r\n\t\tconst blocks = tmp.querySelectorAll(\"p, div, li, h1, h2, h3, h4\");\r\n\t\tblocks.forEach((el) => {\r\n\t\t\tif (el.closest && el.closest(\"pre, code\")) return;\r\n\t\t\t_stripLeadingNumberPrefix(el);\r\n\t\t});\r\n\t\treturn tmp.innerHTML;\r\n\t} catch {\r\n\t\treturn rawHtml;\r\n\t}\r\n};\r\n\r\nexport default function Editor({\r\n\ttheme = \"dark\",\r\n\ttools = COMMANDS.map((item) => item.cmd),\r\n\tshowDemoText = false,\r\n\tshowHeading = true,\r\n\tshowFontSize = true,\r\n\tshowAlign = true,\r\n\tshowLink = true,\r\n\tshowTooltip = true,\r\n\tshowAnchor = true,\r\n\tshowHr = true,\r\n\tshowMedia = true,\r\n\tshowUndoRedo = true,\r\n\tshowClear = true,\r\n\tshowPlainPaste = true,\r\n\tshowColor = true,\r\n\tshowFullscreen = true,\r\n\tcodeBlock = false,\r\n\tcodeBlockLanguages,\r\n\tshowLiveHtml = true,\r\n\tshowStats = true,\r\n\tshowCopyHtml = true,\r\n\tonChange = () => { },\r\n\tinitialHtml = \"\",\r\n\tt\r\n}) {\r\n\tlet translate\r\n\tif (t) {\r\n\t\ttranslate = t\r\n\t} else {\r\n\t\ttranslate = (key) => {\r\n\t\t\tconst translations = {\r\n\t\t\t\tsample: \"Sample Text\",\r\n\t\t\t\tUndo: \"Undo\",\r\n\t\t\t\tRedo: \"Redo\",\r\n\t\t\t\tFormat: \"Format\",\r\n\t\t\t\tParagraph: \"Paragraph\",\r\n\t\t\t\t\"Heading 1\": \"Heading 1\",\r\n\t\t\t\t\"Heading 2\": \"Heading 2\",\r\n\t\t\t\t\"Heading 3\": \"Heading 3\",\r\n\t\t\t\t\"Heading 4\": \"Heading 4\",\r\n\t\t\t\tBlockquote: \"Blockquote\",\r\n\t\t\t\t\"Code Block\": \"Code Block\",\r\n\t\t\t\tSize: \"Size\",\r\n\t\t\t\tCustom: \"Custom\",\r\n\t\t\t\tFont: \"Font\",\r\n\t\t\t\t\"Text color\": \"Text color\",\r\n\t\t\t\tBackground: \"Background\",\r\n\t\t\t\t\"Background color\": \"Background color\",\r\n\t\t\t\t\"Reset colors\": \"Reset colors\",\r\n\t\t\t\t\"Insert code block\": \"Insert code block\",\r\n\t\t\t\tAlign: \"Align\",\r\n\t\t\t\t\"Align Left\": \"Align Left\",\r\n\t\t\t\t\"Align Center\": \"Align Center\",\r\n\t\t\t\t\"Align Right\": \"Align Right\",\r\n\t\t\t\tJustify: \"Justify\",\r\n\t\t\t\t\"Add tooltip/note to selected text\": \"Add tooltip/note to selected text\",\r\n\t\t\t\t\"Insert anchor\": \"Insert anchor\",\r\n\t\t\t\t\"Insert horizontal line\": \"Insert horizontal line\",\r\n\t\t\t\t\"Insert picture\": \"Insert picture\",\r\n\t\t\t\t\"Insert video\": \"Insert video\",\r\n\t\t\t\t\"Clear format\": \"Clear format\",\r\n\t\t\t\t\"Clear all\": \"Clear all\",\r\n\t\t\t\t\"Paste as plain text\": \"Paste as plain text\",\r\n\t\t\t\t\"Exit fullscreen\": \"Exit fullscreen\",\r\n\t\t\t\t\"Enter fullscreen\": \"Enter fullscreen\",\r\n\t\t\t\twords: \"words\",\r\n\t\t\t\tcharacters: \"characters\",\r\n\t\t\t\tselected: \"selected\",\r\n\t\t\t\t\"No selection\": \"No selection\",\r\n\t\t\t\t\"Copy HTML\": \"Copy HTML\",\r\n\t\t\t\t\"Live HTML\": \"Live HTML\",\r\n\t\t\t\t\"Insert Code Block\": \"Insert Code Block\",\r\n\t\t\t\t\"Paste your code here\": \"Paste your code here\",\r\n\t\t\t\tCancel: \"Cancel\",\r\n\t\t\t\tInsert: \"Insert\",\r\n\t\t\t};\r\n\t\t\treturn translations[key] || key;\r\n\t\t}\r\n\t}\r\n\r\n\tconst editorRef = useRef(null);\r\n\t// when true we already applied `initialHtml` / demo content once — don't overwrite user edits\r\n\tconst initialAppliedRef = useRef(false);\r\n\tconst [html, setHtml] = useState(\"\");\r\n\tconst [plainPaste, setPlainPaste] = useState(true);\r\n\tconst [selectionText, setSelectionText] = useState(\"\");\r\n\tconst [heading, setHeading] = useState(\"p\");\r\n\tconst [fontSize, setFontSize] = useState(\"16\");\r\n\tconst [customSize, setCustomSize] = useState(\"\");\r\n\tconst [textColor, setTextColor] = useState(\"#1f2937\");\r\n\tconst [backgroundColor, setBackgroundColor] = useState(\"#ffff00\");\r\n\tconst [activeToolMap, setActiveToolMap] = useState({});\r\n\tconst [isFullscreen, setIsFullscreen] = useState(false);\r\n\tconst [isCodeModalOpen, setIsCodeModalOpen] = useState(false);\r\n\tconst [codeValue, setCodeValue] = useState(\"\");\r\n\tconst [codeLanguage, setCodeLanguage] = useState(\"js\");\r\n\tconst [codeTheme, setCodeTheme] = useState(theme);\r\n\r\n\tuseEffect(() => {\r\n\t\tsetCodeTheme(theme);\r\n\t}, [theme]);\r\n\r\n\t// NOTE: initialization for `initialHtml` / demo text moved below `updateToolbarState` declaration to avoid referencing\r\n\t// `updateToolbarState` before it is defined. See the effect inserted later in the file.\r\n\r\n\tconst stats = useMemo(() => {\r\n\t\tconst text = editorRef.current?.innerText || (typeof html === 'string' ? html.replace(/<[^>]+>/g, '') : '');\r\n\t\tconst words = text.trim() ? text.trim().split(/\\s+/).length : 0;\r\n\t\treturn {\r\n\t\t\twords,\r\n\t\t\tchars: text.length,\r\n\t\t};\r\n\t}, [html]);\r\n\r\n\tconst exec = (cmd, value = null) => {\r\n\t\texecCommand(editorRef, cmd, value, setHtml, onChange, updateToolbarState);\r\n\t};\r\n\r\n\tconst applyHeading = (next) => {\r\n\t\tsetHeading(next);\r\n\t\tapplyHeadingFormat(next, exec);\r\n\t};\r\n\r\n\tconst applyFontSize = (next) => {\r\n\t\tif (next === \"custom\") {\r\n\t\t\tsetFontSize(\"custom\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsetFontSize(next);\r\n\t\tapplyFontSizeFormat(next, exec, editorRef, setHtml, updateToolbarState);\r\n\t};\r\n\r\n\tconst applyCustomFontSize = (value) => {\r\n\t\tsetCustomSize(value);\r\n\t\tapplyCustomFontSizeFormat(value, exec, editorRef, setHtml, updateToolbarState);\r\n\t};\r\n\r\n\tconst applyTextColor = (next) => {\r\n\t\tsetTextColor(next);\r\n\t\tapplyTextColorFormat(next, exec);\r\n\t};\r\n\r\n\tconst applyBackgroundColor = (next) => {\r\n\t\tsetBackgroundColor(next);\r\n\t\tapplyBackgroundColorFormat(next, exec);\r\n\t};\r\n\r\n\tconst resetColors = () => {\r\n\t\tresetColorsFormat(theme, setTextColor, setBackgroundColor, exec);\r\n\t};\r\n\r\n\tconst insertCodeBlock = () => {\r\n\t\tinsertCodeBlockContent(codeValue, codeLanguage, codeTheme, exec, setIsCodeModalOpen, setCodeValue);\r\n\t};\r\n\r\n\tconst insertLink = () => {\r\n\t\tinsertLinkContent(exec);\r\n\t};\r\n\r\n\tconst insertTooltip = () => {\r\n\t\tinsertTooltipContent(editorRef, setHtml, onChange, updateToolbarState);\r\n\t};\r\n\r\n\tconst insertAnchor = () => {\r\n\t\tinsertAnchorContent(exec);\r\n\t};\r\n\r\n\tconst insertHr = () => {\r\n\t\tinsertHrContent(exec);\r\n\t};\r\n\r\n\tconst insertImage = () => {\r\n\t\tinsertImageContent(exec);\r\n\t};\r\n\r\n\tconst insertVideo = () => {\r\n\t\tinsertVideoContent(exec);\r\n\t};\r\n\r\n\tconst toggleFullscreen = () => {\r\n\t\tsetIsFullscreen(!isFullscreen);\r\n\t};\r\n\r\n\tconst removeFormat = () => exec(\"removeFormat\");\r\n\r\n\tconst clearAll = () => {\r\n\t\tclearAllContent(editorRef, setHtml, onChange, updateToolbarState);\r\n\t};\r\n\r\n\tconst onInput = () => {\r\n\t\thandleInput(editorRef, setHtml, onChange, updateToolbarState);\r\n\t\t// Add key hint to all links\r\n\t\tconst links = editorRef.current?.querySelectorAll('a') || [];\r\n\t\tlinks.forEach((link) => {\r\n\t\t\tif (!link.getAttribute('data-key-hint')) {\r\n\t\t\t\tlink.setAttribute('data-key-hint', 'Ctrl/Shift + Click to follow');\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n\tconst onPaste = (event) => {\r\n\t\thandlePaste(event, plainPaste);\r\n\t};\r\n\r\n\tconst onEditorClick = (event) => {\r\n\t\tif (event.target.tagName === 'A' && (event.ctrlKey || event.shiftKey || event.metaKey)) {\r\n\t\t\tconst href = event.target.getAttribute('href');\r\n\t\t\tif (href) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\twindow.open(href, '_blank');\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tconst updateToolbarStateRef = useRef(null);\r\nif (!updateToolbarStateRef.current) {\r\n\tupdateToolbarStateRef.current = createUpdateToolbarState(editorRef, setSelectionText, setActiveToolMap);\r\n}\r\nconst updateToolbarState = updateToolbarStateRef.current;\r\n\r\n\tuseEffect(() => {\r\n\t\tdocument.addEventListener(\"selectionchange\", updateToolbarState);\r\n\t\treturn () => document.removeEventListener(\"selectionchange\", updateToolbarState);\r\n\t}, [updateToolbarState]);\r\n\r\n\r\n\r\n\t// Initialize editor from `initialHtml` (applied once) or fall back to demo text.\r\n\t// Guard against re-applying `initialHtml` on every render — that was causing user edits to be overwritten.\r\n\tuseEffect(() => {\r\n\t\tif (!editorRef.current || initialAppliedRef.current) return;\r\n\r\n\t\t// apply `initialHtml` only once (initialization). If parent later wants to *reset*\r\n\t\t// the editor, we can add an explicit API — but default behaviour is \"initial only\".\r\n\t\tif (initialHtml) {\r\n\t\t\tconst safeHtml = sanitizeInitialHtml(initialHtml);\r\n\t\t\teditorRef.current.innerHTML = safeHtml;\r\n\t\t\tsetHtml(safeHtml);\r\n\t\t\tconst links = editorRef.current?.querySelectorAll('a') || [];\r\n\t\t\tlinks.forEach((link) => {\r\n\t\t\t\tif (!link.getAttribute('data-key-hint')) {\r\n\t\t\t\t\tlink.setAttribute('data-key-hint', 'Ctrl/Shift + Click to follow');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tupdateToolbarState();\r\n\t\t\ttry {\r\n\t\t\t\tif (!editorRef.current || editorRef.current.__lastOnChangeHtml !== safeHtml) {\r\n\t\t\t\t\tonChange(safeHtml);\r\n\t\t\t\t\tif (editorRef.current) editorRef.current.__lastOnChangeHtml = safeHtml;\r\n\t\t\t\t}\r\n\t\t\t} catch { /* noop */ }\r\n\t\t\tinitialAppliedRef.current = true;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (showDemoText) {\r\n\t\t\teditorRef.current.innerHTML = DEFAULT_HTML;\r\n\t\t\tsetHtml(editorRef.current.innerHTML);\r\n\t\t\tconst links = editorRef.current?.querySelectorAll('a') || [];\r\n\t\t\tlinks.forEach((link) => {\r\n\t\t\t\tif (!link.getAttribute('data-key-hint')) {\r\n\t\t\t\t\tlink.setAttribute('data-key-hint', 'Ctrl/Shift + Click to follow');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tupdateToolbarState();\r\n\t\t\tinitialAppliedRef.current = true;\r\n\t\t}\r\n\t}, [initialHtml, showDemoText, onChange, updateToolbarState]);\r\n\r\n\tconst exportHtml = async () => {\r\n\t\tawait exportHtmlContent(editorRef);\r\n\t};\r\n\r\n\tconst activeCommands = useMemo(\r\n\t\t() => COMMANDS.filter((item) => tools.includes(item.cmd)),\r\n\t\t[tools]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<section\r\n\t\t\tclassName={`editor-root theme-${theme}${showLiveHtml ? \" show-preview\" : \" no-preview\"}${isFullscreen ? \" fullscreen\" : \"\"}`}\r\n\t\t\tdata-theme={theme}\r\n\t\t>\r\n\t\t\t<div className=\"toolbar\">\r\n\t\t\t\t{showUndoRedo && (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<div className=\"toolbar-group\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclassName=\"toolbar-btn\"\r\n\t\t\t\t\t\t\t\tonClick={() => exec(\"undo\")}\r\n\t\t\t\t\t\t\t\ttitle={translate(\"Undo\")}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t↶\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclassName=\"toolbar-btn\"\r\n\t\t\t\t\t\t\t\tonClick={() => exec(\"redo\")}\r\n\t\t\t\t\t\t\t\ttitle={translate(\"Redo\")}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t↷\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<span className=\"toolbar-separator\">|</span>\r\n\t\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t\t{activeCommands.length > 0 && (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<div className=\"toolbar-group\">\r\n\t\t\t\t\t\t\t{activeCommands.map((item) => (\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\tkey={item.cmd}\r\n\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\tclassName={`toolbar-btn${activeToolMap[item.cmd] ? \" active\" : \"\"}`}\r\n\t\t\t\t\t\t\t\t\tonMouseDown={(event) => event.preventDefault()}\r\n\t\t\t\t\t\t\t\t\tonClick={() => exec(item.cmd)}\r\n\t\t\t\t\t\t\t\t\ttitle={translate(item.label)}\r\n\t\t\t\t\t\t\t\t\taria-pressed={activeToolMap[item.cmd] || false}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{item.icon}\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<span className=\"toolbar-separator\">|</span>\r\n\t\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t\t{(showHeading || showFontSize || showColor) && (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<div className=\"toolbar-group\">\r\n\t\t\t\t\t\t{showHeading && (\r\n\t\t\t\t\t\t\t<label className=\"toolbar-label\">\r\n\t\t\t\t\t\t\t\t{translate(\"Format\")}\r\n\t\t\t\t\t\t\t\t<select\r\n\t\t\t\t\t\t\t\t\tvalue={heading}\r\n\t\t\t\t\t\t\t\t\tonChange={(event) => applyHeading(event.target.value)}\r\n\t\t\t\t\t\t\t\t\tclassName=\"toolbar-select\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<option value=\"p\">{translate(\"Paragraph\")}</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"h1\">{translate(\"Heading 1\")}</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"h2\">{translate(\"Heading 2\")}</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"h3\">{translate(\"Heading 3\")}</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"h4\">{translate(\"Heading 4\")}</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"blockquote\">{translate(\"Blockquote\")}</option>\r\n\t\t\t\t\t\t\t\t\t{codeBlock && <option value=\"pre\">{translate(\"Code Block\")}</option>}\r\n\t\t\t\t\t\t\t\t</select>\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showFontSize && (\r\n\t\t\t\t\t\t\t<label className=\"toolbar-label\">\r\n\t\t\t\t\t\t\t\t{translate(\"Size\")}\r\n\t\t\t\t\t\t\t\t<select\r\n\t\t\t\t\t\t\t\t\tvalue={fontSize}\r\n\t\t\t\t\t\t\t\t\tonChange={(event) => applyFontSize(event.target.value)}\r\n\t\t\t\t\t\t\t\t\tclassName=\"toolbar-select\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<option value=\"10\">10px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"12\">12px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"14\">14px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"16\">16px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"18\">18px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"20\">20px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"22\">22px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"24\">24px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"28\">28px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"32\">32px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"36\">36px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"48\">48px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"custom\">{translate(\"Custom\")}</option>\r\n\t\t\t\t\t\t\t\t</select>\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showFontSize && fontSize === \"custom\" && (\r\n\t\t\t\t\t\t\t<label className=\"toolbar-label\">\r\n\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\t\tmin=\"8\"\r\n\t\t\t\t\t\t\t\t\tmax=\"200\"\r\n\t\t\t\t\t\t\t\t\tvalue={customSize}\r\n\t\t\t\t\t\t\t\t\tonChange={(event) => applyCustomFontSize(event.target.value)}\r\n\t\t\t\t\t\t\t\t\tplaceholder={translate(\"Size\")}\r\n\t\t\t\t\t\t\t\t\tclassName=\"toolbar-input\"\r\n\t\t\t\t\t\t\t\t\tstyle={{ width: \"60px\" }}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\tpx\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showColor && (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t<label className=\"toolbar-label color-label\">\r\n\t\t\t\t\t\t\t\t\t{translate(\"Font\")}\r\n\t\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\t\ttype=\"color\"\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"toolbar-color\"\r\n\t\t\t\t\t\t\t\t\t\tvalue={textColor}\r\n\t\t\t\t\t\t\t\t\t\tonChange={(event) => applyTextColor(event.target.value)}\r\n\t\t\t\t\t\t\t\t\t\taria-label={translate(\"Text color\")}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t\t<label className=\"toolbar-label color-label\">\r\n\t\t\t\t\t\t\t\t\t{translate(\"Background\")}\r\n\t\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\t\ttype=\"color\"\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"toolbar-color\"\r\n\t\t\t\t\t\t\t\t\t\tvalue={backgroundColor}\r\n\t\t\t\t\t\t\t\t\t\tonChange={(event) => applyBackgroundColor(event.target.value)}\r\n\t\t\t\t\t\t\t\t\t\taria-label={translate(\"Background color\")}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\tclassName=\"toolbar-btn toolbar-btn-small\"\r\n\t\t\t\t\t\t\t\t\tonClick={resetColors}\r\n\t\t\t\t\t\t\t\t\ttitle={translate(\"Reset colors\")}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t↺\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{codeBlock && (\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclassName=\"toolbar-btn\"\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tsetCodeTheme(theme);\r\n\t\t\t\t\t\t\t\t\tsetIsCodeModalOpen(true);\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\ttitle={translate(\"Insert code block\")}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{translate(\"Code Block\")}\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showAlign && (\r\n\t\t\t\t\t\t\t<div className=\"toolbar-label\">\r\n\t\t\t\t\t\t\t\t{translate(\"Align\")}\r\n\t\t\t\t\t\t\t\t<div className=\"align-buttons\">\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"toolbar-btn toolbar-btn-small\"\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => exec(\"justifyLeft\")}\r\n\t\t\t\t\t\t\t\t\t\ttitle={translate(\"Align Left\")}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t⟸\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"toolbar-btn toolbar-btn-small\"\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => exec(\"justifyCenter\")}\r\n\t\t\t\t\t\t\t\t\t\ttitle={translate(\"Align Center\")}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t⇔\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"toolbar-btn toolbar-btn-small\"\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => exec(\"justifyRight\")}\r\n\t\t\t\t\t\t\t\t\t\ttitle={translate(\"Align Right\")}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t⟹\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"toolbar-btn toolbar-btn-small\"\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => exec(\"justifyFull\")}\r\n\t\t\t\t\t\t\t\t\t\ttitle={translate(\"Justify\")}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t⇿\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<span className=\"toolbar-separator\">|</span>\r\n\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t\t{(showLink || showTooltip || showAnchor || showHr || showMedia || showClear) && (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t<div className=\"toolbar-group\">\r\n\t\t\t\t\t\t{showLink && (\r\n\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={insertLink}>\r\n\t\t\t\t\t\t\t\t🔗\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showTooltip && (\r\n\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={insertTooltip} title={translate(\"Add tooltip/note to selected text\")}>\r\n\t\t\t\t\t\t\t\t💬\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showAnchor && (\r\n\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={insertAnchor} title={translate(\"Insert anchor\")}>\r\n\t\t\t\t\t\t\t\t⚓\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showHr && (\r\n\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={insertHr} title={translate(\"Insert horizontal line\")}>\r\n\t\t\t\t\t\t\t\t─\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showMedia && (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={insertImage} title={translate(\"Insert picture\")}>\r\n\t\t\t\t\t\t\t\t\t🖼️\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={insertVideo} title={translate(\"Insert video\")}>\r\n\t\t\t\t\t\t\t\t\t🎬\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showClear && (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={removeFormat}>\r\n\t\t\t\t\t\t\t\t\t{translate(\"Clear format\")}\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn danger\" onClick={clearAll}>\r\n\t\t\t\t\t\t\t\t\t{translate(\"Clear all\")}\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<span className=\"toolbar-separator\">|</span>\r\n\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t\t{showPlainPaste && (\r\n\t\t\t\t\t<div className=\"toolbar-group toggle\">\r\n\t\t\t\t\t\t<label className=\"toggle-row\">\r\n\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\ttype=\"checkbox\"\r\n\t\t\t\t\t\t\t\tchecked={plainPaste}\r\n\t\t\t\t\t\t\t\tonChange={(event) => setPlainPaste(event.target.checked)}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t{translate(\"Paste as plain text\")}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t)}\r\n\t\t\t\t{showFullscreen && (\r\n\t\t\t\t\t<div className=\"toolbar-group\">\r\n\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\tclassName=\"toolbar-btn\"\r\n\t\t\t\t\t\t\tonClick={toggleFullscreen}\r\n\t\t\t\t\t\t\ttitle={isFullscreen ? translate(\"Exit fullscreen\") : translate(\"Enter fullscreen\")}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{isFullscreen ? \"⤓\" : \"⤢\"}\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\r\n\t\t\t<div className=\"editor-area\">\r\n\t\t\t\t<div\r\n\t\t\t\t\tref={editorRef}\r\n\t\t\t\t\tclassName=\"editor-surface\"\r\n\t\t\t\t\tcontentEditable\r\n\t\t\t\t\tonInput={onInput}\r\n\t\t\t\t\tonPaste={onPaste}\r\n\t\t\t\tonClick={onEditorClick}\r\n\t\t\t\tonKeyUp={updateToolbarState}\r\n\t\t\t\tonMouseUp={updateToolbarState}\r\n\t\t\t\tsuppressContentEditableWarning\r\n\t\t\t\tspellCheck\r\n\t\t\t/>\r\n\t\t</div>\r\n\r\n\t\t\t{(showStats || showCopyHtml) && (\r\n\t\t\t\t<footer className=\"editor-footer\">\r\n\t\t\t\t\t{showStats && (\r\n\t\t\t\t\t\t<div className=\"footer-stats\">\r\n\t\t\t\t\t\t\t<span>{stats.words} {translate(\"words\")}</span>\r\n\t\t\t\t\t\t\t<span>{stats.chars} {translate(\"characters\")}</span>\r\n\t\t\t\t\t\t\t<span>{selectionText ? `${selectionText.length} ${translate(\"selected\")}` : translate(\"No selection\")}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{showCopyHtml && (\r\n\t\t\t\t\t\t<div className=\"footer-actions\">\r\n\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={exportHtml}>\r\n\t\t\t\t\t\t\t\t{translate(\"Copy HTML\")}\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</footer>\r\n\t\t\t)}\r\n\r\n\t\t\t{showLiveHtml && (\r\n\t\t\t\t<aside className=\"editor-preview\">\r\n\t\t\t\t\t<pre className=\"preview-code\">{html}</pre>\r\n\t\t\t\t\t<div className=\"preview-header\">{translate(\"Live HTML\")}</div>\r\n\t\t\t\t</aside>\r\n\t\t\t)}\r\n\r\n\t\t\t{codeBlock && isCodeModalOpen && (\r\n\t\t\t\t<div className=\"modal-backdrop\" role=\"dialog\" aria-modal=\"true\">\r\n\t\t\t\t\t<div className=\"modal\">\r\n\t\t\t\t\t\t<div className=\"modal-header\">\r\n\t\t\t\t\t\t\t{translate(\"Insert Code Block\")}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<CodeBlock\r\n\t\t\t\t\t\t\tvalue={codeValue}\r\n\t\t\t\t\t\t\tlanguage={codeLanguage}\r\n\t\t\t\t\t\t\ttheme={codeTheme}\r\n\t\t\t\t\t\t\tlanguages={codeBlockLanguages}\r\n\t\t\t\t\t\t\tonChange={setCodeValue}\r\n\t\t\t\t\t\t\tonLanguageChange={setCodeLanguage}\r\n\t\t\t\t\t\t\tonThemeChange={setCodeTheme}\r\n\t\t\t\t\t\t\tplaceholder={translate(\"Paste your code here\")}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t<div className=\"modal-actions\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclassName=\"toolbar-btn\"\r\n\t\t\t\t\t\t\t\tonClick={() => setIsCodeModalOpen(false)}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{translate(\"Cancel\")}\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclassName=\"toolbar-btn\"\r\n\t\t\t\t\t\t\t\tonClick={insertCodeBlock}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{translate(\"Insert\")}\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\t\t</section>\r\n\t);\r\n}\r\n","// src/index.js - Library entry point\r\nimport \"./index.css\";\r\nimport Editor from \"./components/Editor.jsx\";\r\nimport CodeBlock from \"./components/CodeBlock.jsx\";\r\n\r\nexport default Editor;\r\nexport { CodeBlock };\r\n"],"names":["DEFAULT_LANGUAGES","value","label","DEFAULT_THEMES","CodeBlock","language","theme","languages","themes","onChange","onLanguageChange","onThemeChange","placeholder","normalizedLanguages","useMemo","Array","isArray","length","map","item","currentLanguage","find","React","createElement","className","event","target","key","spellCheck","DEFAULT_HTML","COMMANDS","cmd","icon","escapeHtml","replace","exec","editorRef","setHtml","updateToolbarState","current","focus","document","execCommand","lis","querySelectorAll","leadingNumberRE","forEach","li","firstChild","nodeType","Node","TEXT_NODE","textContent","nextHtml","innerHTML","last","__lastOnChangeHtml","err","html","text","innerText","clearAll","exportHtml","payload","navigator","clipboard","writeText","alert","applyHeading","next","toUpperCase","applyFontSize","selection","window","getSelection","rangeCount","range","getRangeAt","collapsed","fontElements","el","removeAttribute","style","fontSize","applyCustomFontSize","isNaN","applyTextColor","applyBackgroundColor","resetColors","setTextColor","setBackgroundColor","defaultText","defaultBg","insertCodeBlock","codeValue","codeLanguage","codeTheme","setIsCodeModalOpen","setCodeValue","safeCode","languageClass","htmlBlock","insertLink","url","prompt","insertTooltip","selectedText","toString","tooltip","span","title","surroundContents","appendChild","extractContents","insertNode","removeAllRanges","insertAnchor","id","sanitizedId","anchorHtml","insertHr","insertImage","alt","imageHtml","insertVideo","youtubeMatch","match","videoId","embedHtml","videoHtml","onInput","onPaste","plainPaste","preventDefault","clipboardData","getData","createUpdateToolbarState","setSelectionText","setActiveToolMap","anchorNode","isInsideEditor","contains","nextActive","queryCommandState","_stripLeadingNumberPrefix","node","sanitizeInitialHtml","rawHtml","tmp","blocks","closest","Editor","tools","showDemoText","showHeading","showFontSize","showAlign","showLink","showTooltip","showAnchor","showHr","showMedia","showUndoRedo","showClear","showPlainPaste","showColor","showFullscreen","codeBlock","codeBlockLanguages","showLiveHtml","showStats","showCopyHtml","initialHtml","t","translate","translations","sample","Undo","Redo","Format","Paragraph","Blockquote","Size","Custom","Font","Background","Align","Justify","words","characters","selected","Cancel","Insert","useRef","initialAppliedRef","useState","setPlainPaste","selectionText","heading","setHeading","setFontSize","customSize","setCustomSize","textColor","backgroundColor","activeToolMap","isFullscreen","setIsFullscreen","isCodeModalOpen","setCodeLanguage","setCodeTheme","useEffect","stats","trim","split","chars","applyHeadingFormat","applyFontSizeFormat","applyCustomFontSizeFormat","applyTextColorFormat","applyBackgroundColorFormat","resetColorsFormat","insertCodeBlockContent","insertLinkContent","insertTooltipContent","insertAnchorContent","insertHrContent","insertImageContent","insertVideoContent","toggleFullscreen","removeFormat","clearAllContent","handleInput","links","link","getAttribute","setAttribute","handlePaste","onEditorClick","tagName","ctrlKey","shiftKey","metaKey","href","open","updateToolbarStateRef","addEventListener","removeEventListener","safeHtml","exportHtmlContent","activeCommands","filter","includes","Fragment","type","onClick","onMouseDown","min","max","width","checked","ref","contentEditable","onKeyUp","onMouseUp","suppressContentEditableWarning","role"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/components/CodeBlock.jsx","../src/components/defaultContent.js","../src/components/editorCommands.js","../src/components/editorUtils.js","../src/components/formattingFunctions.js","../src/components/insertFunctions.js","../src/components/eventHandlers.js","../src/components/Editor.jsx","../src/index.js"],"sourcesContent":["import React, { useMemo } from \"react\";\r\n\r\nconst DEFAULT_LANGUAGES = [\r\n { value: \"plain\", label: \"Plain\" },\r\n { value: \"js\", label: \"JavaScript\" },\r\n { value: \"ts\", label: \"TypeScript\" },\r\n { value: \"java\", label: \"Java\" },\r\n { value: \"css\", label: \"CSS\" },\r\n { value: \"html\", label: \"HTML\" },\r\n { value: \"json\", label: \"JSON\" },\r\n];\r\n\r\nconst DEFAULT_THEMES = [\r\n { value: \"dark\", label: \"Dark\" },\r\n { value: \"light\", label: \"Light\" },\r\n];\r\n\r\nexport default function CodeBlock({\r\n value = \"\",\r\n language = \"plain\",\r\n theme = \"dark\",\r\n languages = DEFAULT_LANGUAGES,\r\n themes = DEFAULT_THEMES,\r\n onChange = () => {},\r\n onLanguageChange = () => {},\r\n onThemeChange = () => {},\r\n placeholder = \"Paste code here\",\r\n}) {\r\n const normalizedLanguages = useMemo(() => {\r\n if (!Array.isArray(languages) || languages.length === 0) return DEFAULT_LANGUAGES;\r\n if (typeof languages[0] === \"string\") {\r\n return languages.map((item) => ({ value: item, label: item }));\r\n }\r\n return languages;\r\n }, [languages]);\r\n\r\n const currentLanguage = useMemo(\r\n () => normalizedLanguages.find((item) => item.value === language) || normalizedLanguages[0],\r\n [language, normalizedLanguages]\r\n );\r\n\r\n return (\r\n <section className={`code-block code-block-${theme}`} data-language={currentLanguage?.value}>\r\n <header className=\"code-block-toolbar\">\r\n <label className=\"code-block-label\">\r\n Language\r\n <select\r\n className=\"code-block-select\"\r\n value={currentLanguage?.value}\r\n onChange={(event) => onLanguageChange(event.target.value)}\r\n >\r\n {normalizedLanguages.map((item) => (\r\n <option key={item.value} value={item.value}>\r\n {item.label}\r\n </option>\r\n ))}\r\n </select>\r\n </label>\r\n <label className=\"code-block-label\">\r\n Theme\r\n <select\r\n className=\"code-block-select\"\r\n value={theme}\r\n onChange={(event) => onThemeChange(event.target.value)}\r\n >\r\n {themes.map((item) => (\r\n <option key={item.value} value={item.value}>\r\n {item.label}\r\n </option>\r\n ))}\r\n </select>\r\n </label>\r\n </header>\r\n <textarea\r\n className=\"code-block-area\"\r\n value={value}\r\n onChange={(event) => onChange(event.target.value)}\r\n placeholder={placeholder}\r\n spellCheck={false}\r\n />\r\n </section>\r\n );\r\n}\r\n","export const DEFAULT_HTML = `\r\n\t<h1>Welcome</h1>\r\n\t<p>This is a lightweight WYSIWYG editor built without external libraries.</p>\r\n\t<ul>\r\n\t\t<li>Edit text directly</li>\r\n\t\t<li>Use the toolbar for formatting</li>\r\n\t\t<li>Copy, paste, and export HTML</li>\r\n\t</ul>\r\n`;\r\n","export const COMMANDS = [\r\n\t{ cmd: \"bold\", label: \"Bold\", icon: \"B\" },\r\n\t{ cmd: \"italic\", label: \"Italic\", icon: \"I\" },\r\n\t{ cmd: \"underline\", label: \"Underline\", icon: \"U\" },\r\n\t{ cmd: \"strikeThrough\", label: \"Strike\", icon: \"S\" },\r\n\t{ cmd: \"insertUnorderedList\", label: \"Bullets\", icon: \"•\" },\r\n\t{ cmd: \"insertOrderedList\", label: \"Numbered\", icon: \"1.\" },\r\n\t{ cmd: \"indent\", label: \"Indent\", icon: \"↦\" },\r\n\t{ cmd: \"outdent\", label: \"Outdent\", icon: \"↤\" },\r\n\t{ cmd: \"justifyLeft\", label: \"Left\", icon: \"⟸\" },\r\n\t{ cmd: \"justifyCenter\", label: \"Center\", icon: \"⇔\" },\r\n\t{ cmd: \"justifyRight\", label: \"Right\", icon: \"⟹\" },\r\n];\r\n","export const escapeHtml = (value) =>\r\n\tvalue\r\n\t\t.replace(/&/g, \"&amp;\")\r\n\t\t.replace(/</g, \"&lt;\")\r\n\t\t.replace(/>/g, \"&gt;\")\r\n\t\t.replace(/\\\"/g, \"&quot;\")\r\n\t\t.replace(/'/g, \"&#039;\");\r\n\r\nexport const exec = (editorRef, cmd, value = null, setHtml, onChange, updateToolbarState) => {\r\n\teditorRef.current?.focus();\r\n\tdocument.execCommand(cmd, false, value);\r\n\r\n\t// If user just toggled an ordered list, strip any leading numeric prefixes\r\n\t// inside list items (e.g. \"1. Item\") so the browser marker doesn't duplicate.\r\n\tif (cmd === \"insertOrderedList\" && editorRef.current) {\r\n\t\tconst lis = editorRef.current.querySelectorAll(\"li\");\r\n\t\tconst leadingNumberRE = /^\\s*\\d+[.)]\\s+/;\r\n\t\tlis.forEach((li) => {\r\n\t\t\t// only strip on plain-text starts (avoid breaking HTML children)\r\n\t\t\tif (li.firstChild && li.firstChild.nodeType === Node.TEXT_NODE) {\r\n\t\t\t\tli.firstChild.textContent = li.firstChild.textContent.replace(leadingNumberRE, \"\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tconst nextHtml = editorRef.current?.innerHTML || \"\";\r\n\tsetHtml(nextHtml);\r\n\r\n\t// avoid flooding parent with identical payloads (prevents some update loops)\r\n\ttry {\r\n\t\tif (editorRef.current) {\r\n\t\t\tconst last = editorRef.current.__lastOnChangeHtml || \"\";\r\n\t\t\tif (last === nextHtml) {\r\n\t\t\t\t// still update toolbar state but skip notifying parent\r\n\t\t\t\tupdateToolbarState();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\teditorRef.current.__lastOnChangeHtml = nextHtml;\r\n\t\t}\r\n\t} catch (err) {\r\n\t\t// ignore\r\n\t}\r\n\r\n\tonChange({ html: nextHtml, text: editorRef.current?.innerText || \"\" });\r\n\tupdateToolbarState();\r\n};\r\n\r\nexport const removeFormat = (exec) => exec(\"removeFormat\");\r\n\r\nexport const clearAll = (editorRef, setHtml, onChange, updateToolbarState) => {\r\n\tif (!editorRef.current) return;\r\n\teditorRef.current.innerHTML = \"<p></p>\";\r\n\tsetHtml(editorRef.current.innerHTML);\r\n\tonChange({ html: editorRef.current.innerHTML, text: editorRef.current.innerText || \"\" });\r\n\tupdateToolbarState();\r\n};\r\n\r\nexport const exportHtml = async (editorRef) => {\r\n\tconst payload = editorRef.current?.innerHTML || \"\";\r\n\tawait navigator.clipboard.writeText(payload);\r\n\talert(\"HTML copied to clipboard.\");\r\n};\r\n","export const applyHeading = (next, exec) => {\r\n\tif (next === \"p\") {\r\n\t\texec(\"formatBlock\", \"P\");\r\n\t\treturn;\r\n\t}\r\n\tif (next === \"pre\") {\r\n\t\texec(\"formatBlock\", \"PRE\");\r\n\t\treturn;\r\n\t}\r\n\texec(\"formatBlock\", next.toUpperCase());\r\n};\r\n\r\nexport const applyFontSize = (next, exec, editorRef, setHtml, updateToolbarState) => {\r\n\tconst selection = window.getSelection();\r\n\tif (!selection || selection.rangeCount === 0) return;\r\n\t\r\n\tconst range = selection.getRangeAt(0);\r\n\tif (range.collapsed) return; // No selection\r\n\t\r\n\texec(\"fontSize\", \"7\");\r\n\tconst fontElements = editorRef.current?.querySelectorAll(\"font[size='7']\") || [];\r\n\tfontElements.forEach((el) => {\r\n\t\tel.removeAttribute(\"size\");\r\n\t\tel.style.fontSize = `${next}px`;\r\n\t});\r\n\tsetHtml(editorRef.current?.innerHTML || \"\");\r\n\tupdateToolbarState();\r\n};\r\n\r\nexport const applyCustomFontSize = (value, exec, editorRef, setHtml, updateToolbarState) => {\r\n\tif (!value || isNaN(value)) return;\r\n\t\r\n\tconst selection = window.getSelection();\r\n\tif (!selection || selection.rangeCount === 0) return;\r\n\t\r\n\tconst range = selection.getRangeAt(0);\r\n\tif (range.collapsed) return; // No selection\r\n\t\r\n\texec(\"fontSize\", \"7\");\r\n\tconst fontElements = editorRef.current?.querySelectorAll(\"font[size='7']\") || [];\r\n\tfontElements.forEach((el) => {\r\n\t\tel.removeAttribute(\"size\");\r\n\t\tel.style.fontSize = `${value}px`;\r\n\t});\r\n\tsetHtml(editorRef.current?.innerHTML || \"\");\r\n\tupdateToolbarState();\r\n};\r\n\r\nexport const applyTextColor = (next, exec) => {\r\n\texec(\"foreColor\", next);\r\n};\r\n\r\nexport const applyBackgroundColor = (next, exec) => {\r\n\texec(\"hiliteColor\", next);\r\n};\r\n\r\nexport const resetColors = (theme, setTextColor, setBackgroundColor, exec) => {\r\n\tconst defaultText = theme === \"dark\" ? \"#e5e7eb\" : \"#1f2937\";\r\n\tconst defaultBg = \"#ffff00\";\r\n\tsetTextColor(defaultText);\r\n\tsetBackgroundColor(defaultBg);\r\n\texec(\"removeFormat\");\r\n};\r\n","import { escapeHtml } from \"./editorUtils.js\";\r\n\r\nexport const insertCodeBlock = (codeValue, codeLanguage, codeTheme, exec, setIsCodeModalOpen, setCodeValue) => {\r\n\tconst safeCode = escapeHtml(codeValue || \"\");\r\n\tconst languageClass = codeLanguage ? `language-${codeLanguage}` : \"language-plain\";\r\n\tconst htmlBlock = `<pre class=\"code-block-shell\" data-theme=\"${codeTheme}\"><code class=\"${languageClass}\">${safeCode}</code></pre>`;\r\n\texec(\"insertHTML\", htmlBlock);\r\n\tsetIsCodeModalOpen(false);\r\n\tsetCodeValue(\"\");\r\n};\r\n\r\nexport const insertLink = (exec) => {\r\n\tconst url = window.prompt(\"Enter URL\", \"https://\");\r\n\tif (!url) return;\r\n\texec(\"createLink\", url);\r\n};\r\n\r\nexport const insertTooltip = (editorRef, setHtml, onChange, updateToolbarState) => {\r\n\tconst selection = window.getSelection();\r\n\tif (!selection || selection.rangeCount === 0) return;\r\n\tconst selectedText = selection.toString();\r\n\tif (!selectedText) {\r\n\t\talert(\"Please select some text first\");\r\n\t\treturn;\r\n\t}\r\n\tconst tooltip = window.prompt(\"Enter tooltip/note text\", \"\");\r\n\tif (!tooltip) return;\r\n\t\r\n\tconst range = selection.getRangeAt(0);\r\n\tconst span = document.createElement(\"span\");\r\n\tspan.className = \"has-tooltip\";\r\n\tspan.title = tooltip;\r\n\t\r\n\ttry {\r\n\t\trange.surroundContents(span);\r\n\t} catch {\r\n\t\t// If surroundContents fails, use alternative method\r\n\t\tspan.appendChild(range.extractContents());\r\n\t\trange.insertNode(span);\r\n\t}\r\n\t\r\n\tselection.removeAllRanges();\r\n\tconst nextHtml = editorRef.current?.innerHTML || \"\";\r\n\tsetHtml(nextHtml);\r\n\tonChange({ html: nextHtml, text: editorRef.current?.innerText || \"\" });\r\n\tupdateToolbarState();\r\n};\r\n\r\nexport const insertAnchor = (exec) => {\r\n\tconst id = window.prompt(\"Enter anchor ID\", \"\");\r\n\tif (!id) return;\r\n\tconst sanitizedId = id.replace(/[^a-zA-Z0-9-_]/g, \"\");\r\n\tconst anchorHtml = `<span class=\"anchor-marker\" id=\"${sanitizedId}\" data-anchor=\"${sanitizedId}\">⚓${sanitizedId}</span>`;\r\n\texec(\"insertHTML\", anchorHtml);\r\n};\r\n\r\nexport const insertHr = (exec) => {\r\n\texec(\"insertHTML\", \"<hr>\");\r\n};\r\n\r\nexport const insertImage = (exec) => {\r\n\tconst url = window.prompt(\"Enter image URL\", \"https://\");\r\n\tif (!url) return;\r\n\tconst alt = window.prompt(\"Enter image description (alt text)\", \"\");\r\n\tconst imageHtml = `<img src=\"${url}\" alt=\"${alt || ''}\" style=\"max-width: 100%; height: auto;\" />`;\r\n\texec(\"insertHTML\", imageHtml);\r\n};\r\n\r\nexport const insertVideo = (exec) => {\r\n\tconst url = window.prompt(\"Enter video URL (YouTube, MP4, etc.)\", \"https://\");\r\n\tif (!url) return;\r\n\t\r\n\t// Check if it's a YouTube URL\r\n\tconst youtubeMatch = url.match(/(?:youtube\\.com\\/watch\\?v=|youtu\\.be\\/)([^&\\s]+)/);\r\n\tif (youtubeMatch) {\r\n\t\tconst videoId = youtubeMatch[1];\r\n\t\tconst embedHtml = `<iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/${videoId}\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen style=\"max-width: 100%;\"></iframe>`;\r\n\t\texec(\"insertHTML\", embedHtml);\r\n\t} else {\r\n\t\t// Assume it's a direct video URL\r\n\t\tconst videoHtml = `<video controls style=\"max-width: 100%; height: auto;\"><source src=\"${url}\" type=\"video/mp4\">Your browser does not support the video tag.</video>`;\r\n\t\texec(\"insertHTML\", videoHtml);\r\n\t}\r\n};\r\n","import { COMMANDS } from \"./editorCommands.js\";\r\n\r\nexport const onInput = (editorRef, setHtml, onChange, updateToolbarState) => {\r\n\tconst nextHtml = editorRef.current?.innerHTML || \"\";\r\n\tsetHtml(nextHtml);\r\n\tonChange({ html: nextHtml, text: editorRef.current?.innerText || \"\" });\r\n\tupdateToolbarState();\r\n};\r\n\r\nexport const onPaste = (event, plainPaste) => {\r\n\tif (!plainPaste) return;\r\n\tevent.preventDefault();\r\n\tlet text = event.clipboardData.getData(\"text/plain\");\r\n\t// remove leading numeric list markers from pasted plain text (per-line)\r\n\ttext = text.replace(/^\\s*\\d+[\\.)]\\s+/gm, \"\");\r\n\tdocument.execCommand(\"insertText\", false, text);\r\n};\r\n\r\nexport const createUpdateToolbarState = (editorRef, setSelectionText, setActiveToolMap) => {\r\n\treturn () => {\r\n\t\tconst selection = document.getSelection();\r\n\t\tif (!selection || selection.rangeCount === 0 || !editorRef.current) return;\r\n\t\tconst anchorNode = selection.anchorNode;\r\n\t\tconst isInsideEditor = anchorNode && editorRef.current.contains(anchorNode);\r\n\t\tif (!isInsideEditor) {\r\n\t\t\tsetSelectionText(\"\");\r\n\t\t\tsetActiveToolMap({});\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsetSelectionText(selection.toString());\r\n\t\tconst nextActive = {};\r\n\t\tCOMMANDS.forEach((item) => {\r\n\t\t\ttry {\r\n\t\t\t\tnextActive[item.cmd] = document.queryCommandState(item.cmd);\r\n\t\t\t} catch {\r\n\t\t\t\tnextActive[item.cmd] = false;\r\n\t\t\t}\r\n\t\t});\r\n\t\tsetActiveToolMap(nextActive);\r\n\t};\r\n};\r\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\r\nimport CodeBlock from \"./CodeBlock.jsx\";\r\nimport { DEFAULT_HTML } from \"./defaultContent.js\";\r\nimport { COMMANDS } from \"./editorCommands.js\";\r\nimport { exec as execCommand, clearAll as clearAllContent, exportHtml as exportHtmlContent } from \"./editorUtils.js\";\r\nimport { applyHeading as applyHeadingFormat, applyFontSize as applyFontSizeFormat, applyCustomFontSize as applyCustomFontSizeFormat, applyTextColor as applyTextColorFormat, applyBackgroundColor as applyBackgroundColorFormat, resetColors as resetColorsFormat } from \"./formattingFunctions.js\";\r\nimport { insertCodeBlock as insertCodeBlockContent, insertLink as insertLinkContent, insertTooltip as insertTooltipContent, insertAnchor as insertAnchorContent, insertHr as insertHrContent, insertImage as insertImageContent, insertVideo as insertVideoContent } from \"./insertFunctions.js\";\r\nimport { onInput as handleInput, onPaste as handlePaste, createUpdateToolbarState } from \"./eventHandlers.js\";\r\n\r\n// helper: strip leading numeric markers (e.g. \"1. \") from block-starting text nodes\r\nconst _stripLeadingNumberPrefix = (node) => {\r\n\tconst leadingNumberRE = /^\\s*\\d+[.)]\\s+/;\r\n\tif (!node) return;\r\n\tif (node.firstChild && node.firstChild.nodeType === Node.TEXT_NODE) {\r\n\t\tnode.firstChild.textContent = node.firstChild.textContent.replace(leadingNumberRE, \"\");\r\n\t}\r\n};\r\n\r\n// sanitize initial HTML: remove numeric list prefixes at block starts to avoid\r\n// duplicate markers when user toggles ordered-list\r\nconst sanitizeInitialHtml = (rawHtml) => {\r\n\tif (!rawHtml) return rawHtml;\r\n\ttry {\r\n\t\tconst tmp = document.createElement(\"div\");\r\n\t\ttmp.innerHTML = rawHtml;\r\n\t\tconst blocks = tmp.querySelectorAll(\"p, div, li, h1, h2, h3, h4\");\r\n\t\tblocks.forEach((el) => {\r\n\t\t\tif (el.closest && el.closest(\"pre, code\")) return;\r\n\t\t\t_stripLeadingNumberPrefix(el);\r\n\t\t});\r\n\t\treturn tmp.innerHTML;\r\n\t} catch {\r\n\t\treturn rawHtml;\r\n\t}\r\n};\r\n\r\nexport default function Editor({\r\n\ttheme = \"dark\",\r\n\ttools = COMMANDS.map((item) => item.cmd),\r\n\tshowDemoText = false,\r\n\tshowHeading = true,\r\n\tshowFontSize = true,\r\n\tshowAlign = true,\r\n\tshowLink = true,\r\n\tshowTooltip = true,\r\n\tshowAnchor = true,\r\n\tshowHr = true,\r\n\tshowMedia = true,\r\n\tshowUndoRedo = true,\r\n\tshowClear = true,\r\n\tshowPlainPaste = true,\r\n\tshowColor = true,\r\n\tshowFullscreen = true,\r\n\tcodeBlock = false,\r\n\tcodeBlockLanguages,\r\n\tshowLiveHtml = true,\r\n\tshowStats = true,\r\n\tshowCopyHtml = true,\r\n\tonChange = () => { },\r\n\tinitialHtml = \"\",\r\n\tt\r\n}) {\r\n\tlet translate\r\n\tif (t) {\r\n\t\ttranslate = t\r\n\t} else {\r\n\t\ttranslate = (key) => {\r\n\t\t\tconst translations = {\r\n\t\t\t\tsample: \"Sample Text\",\r\n\t\t\t\tUndo: \"Undo\",\r\n\t\t\t\tRedo: \"Redo\",\r\n\t\t\t\tFormat: \"Format\",\r\n\t\t\t\tParagraph: \"Paragraph\",\r\n\t\t\t\t\"Heading 1\": \"Heading 1\",\r\n\t\t\t\t\"Heading 2\": \"Heading 2\",\r\n\t\t\t\t\"Heading 3\": \"Heading 3\",\r\n\t\t\t\t\"Heading 4\": \"Heading 4\",\r\n\t\t\t\tBlockquote: \"Blockquote\",\r\n\t\t\t\t\"Code Block\": \"Code Block\",\r\n\t\t\t\tSize: \"Size\",\r\n\t\t\t\tCustom: \"Custom\",\r\n\t\t\t\tFont: \"Font\",\r\n\t\t\t\t\"Text color\": \"Text color\",\r\n\t\t\t\tBackground: \"Background\",\r\n\t\t\t\t\"Background color\": \"Background color\",\r\n\t\t\t\t\"Reset colors\": \"Reset colors\",\r\n\t\t\t\t\"Insert code block\": \"Insert code block\",\r\n\t\t\t\tAlign: \"Align\",\r\n\t\t\t\t\"Align Left\": \"Align Left\",\r\n\t\t\t\t\"Align Center\": \"Align Center\",\r\n\t\t\t\t\"Align Right\": \"Align Right\",\r\n\t\t\t\tJustify: \"Justify\",\r\n\t\t\t\tIndent: \"Indent\",\r\n\t\t\t\tOutdent: \"Outdent\",\r\n\t\t\t\t\"Add tooltip/note to selected text\": \"Add tooltip/note to selected text\",\r\n\t\t\t\t\"Insert anchor\": \"Insert anchor\",\r\n\t\t\t\t\"Insert horizontal line\": \"Insert horizontal line\",\r\n\t\t\t\t\"Insert picture\": \"Insert picture\",\r\n\t\t\t\t\"Insert video\": \"Insert video\",\r\n\t\t\t\t\"Clear format\": \"Clear format\",\r\n\t\t\t\t\"Clear all\": \"Clear all\",\r\n\t\t\t\t\"Paste as plain text\": \"Paste as plain text\",\r\n\t\t\t\t\"Exit fullscreen\": \"Exit fullscreen\",\r\n\t\t\t\t\"Enter fullscreen\": \"Enter fullscreen\",\r\n\t\t\t\twords: \"words\",\r\n\t\t\t\tcharacters: \"characters\",\r\n\t\t\t\tselected: \"selected\",\r\n\t\t\t\t\"No selection\": \"No selection\",\r\n\t\t\t\t\"Copy HTML\": \"Copy HTML\",\r\n\t\t\t\t\"Live HTML\": \"Live HTML\",\r\n\t\t\t\t\"Insert Code Block\": \"Insert Code Block\",\r\n\t\t\t\t\"Paste your code here\": \"Paste your code here\",\r\n\t\t\t\tCancel: \"Cancel\",\r\n\t\t\t\tInsert: \"Insert\",\r\n\t\t\t};\r\n\t\t\treturn translations[key] || key;\r\n\t\t}\r\n\t}\r\n\r\n\tconst editorRef = useRef(null);\r\n\t// when true we already applied `initialHtml` / demo content once — don't overwrite user edits\r\n\tconst initialAppliedRef = useRef(false);\r\n\tconst [html, setHtml] = useState(\"\");\r\n\tconst [plainPaste, setPlainPaste] = useState(true);\r\n\tconst [selectionText, setSelectionText] = useState(\"\");\r\n\tconst [heading, setHeading] = useState(\"p\");\r\n\tconst [fontSize, setFontSize] = useState(\"16\");\r\n\tconst [customSize, setCustomSize] = useState(\"\");\r\n\tconst [textColor, setTextColor] = useState(\"#1f2937\");\r\n\tconst [backgroundColor, setBackgroundColor] = useState(\"#ffff00\");\r\n\tconst [activeToolMap, setActiveToolMap] = useState({});\r\n\tconst [isFullscreen, setIsFullscreen] = useState(false);\r\n\tconst [isCodeModalOpen, setIsCodeModalOpen] = useState(false);\r\n\tconst [codeValue, setCodeValue] = useState(\"\");\r\n\tconst [codeLanguage, setCodeLanguage] = useState(\"js\");\r\n\tconst [codeTheme, setCodeTheme] = useState(theme);\r\n\r\n\tuseEffect(() => {\r\n\t\tsetCodeTheme(theme);\r\n\t}, [theme]);\r\n\r\n\t// NOTE: initialization for `initialHtml` / demo text moved below `updateToolbarState` declaration to avoid referencing\r\n\t// `updateToolbarState` before it is defined. See the effect inserted later in the file.\r\n\r\n\tconst stats = useMemo(() => {\r\n\t\tconst text = editorRef.current?.innerText || (typeof html === 'string' ? html.replace(/<[^>]+>/g, '') : '');\r\n\t\tconst words = text.trim() ? text.trim().split(/\\s+/).length : 0;\r\n\t\treturn {\r\n\t\t\twords,\r\n\t\t\tchars: text.length,\r\n\t\t};\r\n\t}, [html]);\r\n\r\n\tconst exec = (cmd, value = null) => {\r\n\t\texecCommand(editorRef, cmd, value, setHtml, onChange, updateToolbarState);\r\n\t};\r\n\r\n\tconst applyHeading = (next) => {\r\n\t\tsetHeading(next);\r\n\t\tapplyHeadingFormat(next, exec);\r\n\t};\r\n\r\n\tconst applyFontSize = (next) => {\r\n\t\tif (next === \"custom\") {\r\n\t\t\tsetFontSize(\"custom\");\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tsetFontSize(next);\r\n\t\tapplyFontSizeFormat(next, exec, editorRef, setHtml, updateToolbarState);\r\n\t};\r\n\r\n\tconst applyCustomFontSize = (value) => {\r\n\t\tsetCustomSize(value);\r\n\t\tapplyCustomFontSizeFormat(value, exec, editorRef, setHtml, updateToolbarState);\r\n\t};\r\n\r\n\tconst applyTextColor = (next) => {\r\n\t\tsetTextColor(next);\r\n\t\tapplyTextColorFormat(next, exec);\r\n\t};\r\n\r\n\tconst applyBackgroundColor = (next) => {\r\n\t\tsetBackgroundColor(next);\r\n\t\tapplyBackgroundColorFormat(next, exec);\r\n\t};\r\n\r\n\tconst resetColors = () => {\r\n\t\tresetColorsFormat(theme, setTextColor, setBackgroundColor, exec);\r\n\t};\r\n\r\n\tconst insertCodeBlock = () => {\r\n\t\tinsertCodeBlockContent(codeValue, codeLanguage, codeTheme, exec, setIsCodeModalOpen, setCodeValue);\r\n\t};\r\n\r\n\tconst insertLink = () => {\r\n\t\tinsertLinkContent(exec);\r\n\t};\r\n\r\n\tconst insertTooltip = () => {\r\n\t\tinsertTooltipContent(editorRef, setHtml, onChange, updateToolbarState);\r\n\t};\r\n\r\n\tconst insertAnchor = () => {\r\n\t\tinsertAnchorContent(exec);\r\n\t};\r\n\r\n\tconst insertHr = () => {\r\n\t\tinsertHrContent(exec);\r\n\t};\r\n\r\n\tconst insertImage = () => {\r\n\t\tinsertImageContent(exec);\r\n\t};\r\n\r\n\tconst insertVideo = () => {\r\n\t\tinsertVideoContent(exec);\r\n\t};\r\n\r\n\tconst toggleFullscreen = () => {\r\n\t\tsetIsFullscreen(!isFullscreen);\r\n\t};\r\n\r\n\tconst removeFormat = () => exec(\"removeFormat\");\r\n\r\n\tconst clearAll = () => {\r\n\t\tclearAllContent(editorRef, setHtml, onChange, updateToolbarState);\r\n\t};\r\n\r\n\tconst onInput = () => {\r\n\t\thandleInput(editorRef, setHtml, onChange, updateToolbarState);\r\n\t\t// Add key hint to all links\r\n\t\tconst links = editorRef.current?.querySelectorAll('a') || [];\r\n\t\tlinks.forEach((link) => {\r\n\t\t\tif (!link.getAttribute('data-key-hint')) {\r\n\t\t\t\tlink.setAttribute('data-key-hint', 'Ctrl/Shift + Click to follow');\r\n\t\t\t}\r\n\t\t});\r\n\t};\r\n\r\n\tconst onPaste = (event) => {\r\n\t\thandlePaste(event, plainPaste);\r\n\t};\r\n\r\n\tconst onEditorClick = (event) => {\r\n\t\tif (event.target.tagName === 'A' && (event.ctrlKey || event.shiftKey || event.metaKey)) {\r\n\t\t\tconst href = event.target.getAttribute('href');\r\n\t\t\tif (href) {\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\twindow.open(href, '_blank');\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tconst updateToolbarStateRef = useRef(null);\r\nif (!updateToolbarStateRef.current) {\r\n\tupdateToolbarStateRef.current = createUpdateToolbarState(editorRef, setSelectionText, setActiveToolMap);\r\n}\r\nconst updateToolbarState = updateToolbarStateRef.current;\r\n\r\n\tuseEffect(() => {\r\n\t\tdocument.addEventListener(\"selectionchange\", updateToolbarState);\r\n\t\treturn () => document.removeEventListener(\"selectionchange\", updateToolbarState);\r\n\t}, [updateToolbarState]);\r\n\r\n\r\n\r\n\t// Initialize editor from `initialHtml` (applied once) or fall back to demo text.\r\n\t// Guard against re-applying `initialHtml` on every render — that was causing user edits to be overwritten.\r\n\tuseEffect(() => {\r\n\t\tif (!editorRef.current || initialAppliedRef.current) return;\r\n\r\n\t\t// apply `initialHtml` only once (initialization). If parent later wants to *reset*\r\n\t\t// the editor, we can add an explicit API — but default behaviour is \"initial only\".\r\n\t\tif (initialHtml) {\r\n\t\t\tconst safeHtml = sanitizeInitialHtml(initialHtml);\r\n\t\t\teditorRef.current.innerHTML = safeHtml;\r\n\t\t\tsetHtml(safeHtml);\r\n\t\t\tconst links = editorRef.current?.querySelectorAll('a') || [];\r\n\t\t\tlinks.forEach((link) => {\r\n\t\t\t\tif (!link.getAttribute('data-key-hint')) {\r\n\t\t\t\t\tlink.setAttribute('data-key-hint', 'Ctrl/Shift + Click to follow');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tupdateToolbarState();\r\n\t\t\ttry {\r\n\t\t\t\tif (!editorRef.current || editorRef.current.__lastOnChangeHtml !== safeHtml) {\r\n\t\t\t\t\tonChange(safeHtml);\r\n\t\t\t\t\tif (editorRef.current) editorRef.current.__lastOnChangeHtml = safeHtml;\r\n\t\t\t\t}\r\n\t\t\t} catch { /* noop */ }\r\n\t\t\tinitialAppliedRef.current = true;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (showDemoText) {\r\n\t\t\teditorRef.current.innerHTML = DEFAULT_HTML;\r\n\t\t\tsetHtml(editorRef.current.innerHTML);\r\n\t\t\tconst links = editorRef.current?.querySelectorAll('a') || [];\r\n\t\t\tlinks.forEach((link) => {\r\n\t\t\t\tif (!link.getAttribute('data-key-hint')) {\r\n\t\t\t\t\tlink.setAttribute('data-key-hint', 'Ctrl/Shift + Click to follow');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tupdateToolbarState();\r\n\t\t\tinitialAppliedRef.current = true;\r\n\t\t}\r\n\t}, [initialHtml, showDemoText, onChange, updateToolbarState]);\r\n\r\n\tconst exportHtml = async () => {\r\n\t\tawait exportHtmlContent(editorRef);\r\n\t};\r\n\r\n\tconst activeCommands = useMemo(\r\n\t\t() => COMMANDS.filter((item) => tools.includes(item.cmd)),\r\n\t\t[tools]\r\n\t);\r\n\r\n\treturn (\r\n\t\t<section\r\n\t\t\tclassName={`editor-root theme-${theme}${showLiveHtml ? \" show-preview\" : \" no-preview\"}${isFullscreen ? \" fullscreen\" : \"\"}`}\r\n\t\t\tdata-theme={theme}\r\n\t\t>\r\n\t\t\t<div className=\"toolbar\">\r\n\t\t\t\t{showUndoRedo && (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<div className=\"toolbar-group\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclassName=\"toolbar-btn\"\r\n\t\t\t\t\t\t\t\tonClick={() => exec(\"undo\")}\r\n\t\t\t\t\t\t\t\ttitle={translate(\"Undo\")}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t↶\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclassName=\"toolbar-btn\"\r\n\t\t\t\t\t\t\t\tonClick={() => exec(\"redo\")}\r\n\t\t\t\t\t\t\t\ttitle={translate(\"Redo\")}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t↷\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<span className=\"toolbar-separator\">|</span>\r\n\t\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t\t{activeCommands.length > 0 && (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<div className=\"toolbar-group\">\r\n\t\t\t\t\t\t\t{activeCommands.map((item) => (\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\tkey={item.cmd}\r\n\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\tclassName={`toolbar-btn${activeToolMap[item.cmd] ? \" active\" : \"\"}`}\r\n\t\t\t\t\t\t\t\t\tonMouseDown={(event) => event.preventDefault()}\r\n\t\t\t\t\t\t\t\t\tonClick={() => exec(item.cmd)}\r\n\t\t\t\t\t\t\t\t\ttitle={translate(item.label)}\r\n\t\t\t\t\t\t\t\t\taria-pressed={activeToolMap[item.cmd] || false}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t{item.icon}\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t))}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<span className=\"toolbar-separator\">|</span>\r\n\t\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t\t{(showHeading || showFontSize || showColor) && (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t\t<div className=\"toolbar-group\">\r\n\t\t\t\t\t\t{showHeading && (\r\n\t\t\t\t\t\t\t<label className=\"toolbar-label\">\r\n\t\t\t\t\t\t\t\t{translate(\"Format\")}\r\n\t\t\t\t\t\t\t\t<select\r\n\t\t\t\t\t\t\t\t\tvalue={heading}\r\n\t\t\t\t\t\t\t\t\tonChange={(event) => applyHeading(event.target.value)}\r\n\t\t\t\t\t\t\t\t\tclassName=\"toolbar-select\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<option value=\"p\">{translate(\"Paragraph\")}</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"h1\">{translate(\"Heading 1\")}</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"h2\">{translate(\"Heading 2\")}</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"h3\">{translate(\"Heading 3\")}</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"h4\">{translate(\"Heading 4\")}</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"blockquote\">{translate(\"Blockquote\")}</option>\r\n\t\t\t\t\t\t\t\t\t{codeBlock && <option value=\"pre\">{translate(\"Code Block\")}</option>}\r\n\t\t\t\t\t\t\t\t</select>\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showFontSize && (\r\n\t\t\t\t\t\t\t<label className=\"toolbar-label\">\r\n\t\t\t\t\t\t\t\t{translate(\"Size\")}\r\n\t\t\t\t\t\t\t\t<select\r\n\t\t\t\t\t\t\t\t\tvalue={fontSize}\r\n\t\t\t\t\t\t\t\t\tonChange={(event) => applyFontSize(event.target.value)}\r\n\t\t\t\t\t\t\t\t\tclassName=\"toolbar-select\"\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t<option value=\"10\">10px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"12\">12px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"14\">14px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"16\">16px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"18\">18px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"20\">20px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"22\">22px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"24\">24px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"28\">28px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"32\">32px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"36\">36px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"48\">48px</option>\r\n\t\t\t\t\t\t\t\t\t<option value=\"custom\">{translate(\"Custom\")}</option>\r\n\t\t\t\t\t\t\t\t</select>\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showFontSize && fontSize === \"custom\" && (\r\n\t\t\t\t\t\t\t<label className=\"toolbar-label\">\r\n\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\ttype=\"number\"\r\n\t\t\t\t\t\t\t\t\tmin=\"8\"\r\n\t\t\t\t\t\t\t\t\tmax=\"200\"\r\n\t\t\t\t\t\t\t\t\tvalue={customSize}\r\n\t\t\t\t\t\t\t\t\tonChange={(event) => applyCustomFontSize(event.target.value)}\r\n\t\t\t\t\t\t\t\t\tplaceholder={translate(\"Size\")}\r\n\t\t\t\t\t\t\t\t\tclassName=\"toolbar-input\"\r\n\t\t\t\t\t\t\t\t\tstyle={{ width: \"60px\" }}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\tpx\r\n\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showColor && (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t<label className=\"toolbar-label color-label\">\r\n\t\t\t\t\t\t\t\t\t{translate(\"Font\")}\r\n\t\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\t\ttype=\"color\"\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"toolbar-color\"\r\n\t\t\t\t\t\t\t\t\t\tvalue={textColor}\r\n\t\t\t\t\t\t\t\t\t\tonChange={(event) => applyTextColor(event.target.value)}\r\n\t\t\t\t\t\t\t\t\t\taria-label={translate(\"Text color\")}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t\t<label className=\"toolbar-label color-label\">\r\n\t\t\t\t\t\t\t\t\t{translate(\"Background\")}\r\n\t\t\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\t\t\ttype=\"color\"\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"toolbar-color\"\r\n\t\t\t\t\t\t\t\t\t\tvalue={backgroundColor}\r\n\t\t\t\t\t\t\t\t\t\tonChange={(event) => applyBackgroundColor(event.target.value)}\r\n\t\t\t\t\t\t\t\t\t\taria-label={translate(\"Background color\")}\r\n\t\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t</label>\r\n\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\tclassName=\"toolbar-btn toolbar-btn-small\"\r\n\t\t\t\t\t\t\t\t\tonClick={resetColors}\r\n\t\t\t\t\t\t\t\t\ttitle={translate(\"Reset colors\")}\r\n\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t↺\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{codeBlock && (\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclassName=\"toolbar-btn\"\r\n\t\t\t\t\t\t\t\tonClick={() => {\r\n\t\t\t\t\t\t\t\t\tsetCodeTheme(theme);\r\n\t\t\t\t\t\t\t\t\tsetIsCodeModalOpen(true);\r\n\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\ttitle={translate(\"Insert code block\")}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{translate(\"Code Block\")}\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showAlign && (\r\n\t\t\t\t\t\t\t<div className=\"toolbar-label\">\r\n\t\t\t\t\t\t\t\t{translate(\"Align\")}\r\n\t\t\t\t\t\t\t\t<div className=\"align-buttons\">\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"toolbar-btn toolbar-btn-small\"\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => exec(\"justifyLeft\")}\r\n\t\t\t\t\t\t\t\t\t\ttitle={translate(\"Align Left\")}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t⟸\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"toolbar-btn toolbar-btn-small\"\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => exec(\"justifyCenter\")}\r\n\t\t\t\t\t\t\t\t\t\ttitle={translate(\"Align Center\")}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t⇔\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"toolbar-btn toolbar-btn-small\"\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => exec(\"justifyRight\")}\r\n\t\t\t\t\t\t\t\t\t\ttitle={translate(\"Align Right\")}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t⟹\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\t\t\tclassName=\"toolbar-btn toolbar-btn-small\"\r\n\t\t\t\t\t\t\t\t\t\tonClick={() => exec(\"justifyFull\")}\r\n\t\t\t\t\t\t\t\t\t\ttitle={translate(\"Justify\")}\r\n\t\t\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t\t\t⇿\r\n\t\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<span className=\"toolbar-separator\">|</span>\r\n\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t\t{(showLink || showTooltip || showAnchor || showHr || showMedia || showClear) && (\r\n\t\t\t\t\t<>\r\n\t\t\t\t\t<div className=\"toolbar-group\">\r\n\t\t\t\t\t\t{showLink && (\r\n\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={insertLink}>\r\n\t\t\t\t\t\t\t\t🔗\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showTooltip && (\r\n\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={insertTooltip} title={translate(\"Add tooltip/note to selected text\")}>\r\n\t\t\t\t\t\t\t\t💬\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showAnchor && (\r\n\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={insertAnchor} title={translate(\"Insert anchor\")}>\r\n\t\t\t\t\t\t\t\t⚓\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showHr && (\r\n\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={insertHr} title={translate(\"Insert horizontal line\")}>\r\n\t\t\t\t\t\t\t\t─\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showMedia && (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={insertImage} title={translate(\"Insert picture\")}>\r\n\t\t\t\t\t\t\t\t\t🖼️\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={insertVideo} title={translate(\"Insert video\")}>\r\n\t\t\t\t\t\t\t\t\t🎬\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t{showClear && (\r\n\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={removeFormat}>\r\n\t\t\t\t\t\t\t\t\t{translate(\"Clear format\")}\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn danger\" onClick={clearAll}>\r\n\t\t\t\t\t\t\t\t\t{translate(\"Clear all\")}\r\n\t\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t</>\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<span className=\"toolbar-separator\">|</span>\r\n\t\t\t\t</>\r\n\t\t\t\t)}\r\n\t\t\t\t{showPlainPaste && (\r\n\t\t\t\t\t<div className=\"toolbar-group toggle\">\r\n\t\t\t\t\t\t<label className=\"toggle-row\">\r\n\t\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\t\ttype=\"checkbox\"\r\n\t\t\t\t\t\t\t\tchecked={plainPaste}\r\n\t\t\t\t\t\t\t\tonChange={(event) => setPlainPaste(event.target.checked)}\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t{translate(\"Paste as plain text\")}\r\n\t\t\t\t\t\t</label>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t)}\r\n\t\t\t\t{showFullscreen && (\r\n\t\t\t\t\t<div className=\"toolbar-group\">\r\n\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\tclassName=\"toolbar-btn\"\r\n\t\t\t\t\t\t\tonClick={toggleFullscreen}\r\n\t\t\t\t\t\t\ttitle={isFullscreen ? translate(\"Exit fullscreen\") : translate(\"Enter fullscreen\")}\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t{isFullscreen ? \"⤓\" : \"⤢\"}\r\n\t\t\t\t\t\t</button>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t)}\r\n\t\t\t</div>\r\n\r\n\t\t\t<div className=\"editor-area\">\r\n\t\t\t\t<div\r\n\t\t\t\t\tref={editorRef}\r\n\t\t\t\t\tclassName=\"editor-surface\"\r\n\t\t\t\t\tcontentEditable\r\n\t\t\t\t\tonInput={onInput}\r\n\t\t\t\t\tonPaste={onPaste}\r\n\t\t\t\tonClick={onEditorClick}\r\n\t\t\t\tonKeyDown={(e) => {\r\n\t\t\t\t\t// Tab => indent, Shift+Tab => outdent (do not intercept inside code/pre)\r\n\t\t\t\t\tif (e.key === 'Tab') {\r\n\t\t\t\t\t\tconst sel = document.getSelection();\r\n\t\t\t\t\t\tconst node = sel && sel.anchorNode ? (sel.anchorNode.nodeType === Node.TEXT_NODE ? sel.anchorNode.parentElement : sel.anchorNode) : null;\r\n\t\t\t\t\t\tif (node && node.closest && node.closest('pre, code')) return; // allow tab in code blocks\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\tif (e.shiftKey) exec('outdent');\r\n\t\t\t\t\t\telse exec('indent');\r\n\t\t\t\t\t}\r\n\t\t\t\t}}\r\n\t\t\t\tonKeyUp={updateToolbarState}\r\n\t\t\t\tonMouseUp={updateToolbarState}\r\n\t\t\t\tsuppressContentEditableWarning\r\n\t\t\t\tspellCheck\r\n\t\t\t/>\r\n\t\t</div>\r\n\r\n\t\t\t{(showStats || showCopyHtml) && (\r\n\t\t\t\t<footer className=\"editor-footer\">\r\n\t\t\t\t\t{showStats && (\r\n\t\t\t\t\t\t<div className=\"footer-stats\">\r\n\t\t\t\t\t\t\t<span>{stats.words} {translate(\"words\")}</span>\r\n\t\t\t\t\t\t\t<span>{stats.chars} {translate(\"characters\")}</span>\r\n\t\t\t\t\t\t\t<span>{selectionText ? `${selectionText.length} ${translate(\"selected\")}` : translate(\"No selection\")}</span>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\t\t\t\t\t{showCopyHtml && (\r\n\t\t\t\t\t\t<div className=\"footer-actions\">\r\n\t\t\t\t\t\t\t<button type=\"button\" className=\"toolbar-btn\" onClick={exportHtml}>\r\n\t\t\t\t\t\t\t\t{translate(\"Copy HTML\")}\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t)}\r\n\t\t\t\t</footer>\r\n\t\t\t)}\r\n\r\n\t\t\t{showLiveHtml && (\r\n\t\t\t\t<aside className=\"editor-preview\">\r\n\t\t\t\t\t<pre className=\"preview-code\">{html}</pre>\r\n\t\t\t\t\t<div className=\"preview-header\">{translate(\"Live HTML\")}</div>\r\n\t\t\t\t</aside>\r\n\t\t\t)}\r\n\r\n\t\t\t{codeBlock && isCodeModalOpen && (\r\n\t\t\t\t<div className=\"modal-backdrop\" role=\"dialog\" aria-modal=\"true\">\r\n\t\t\t\t\t<div className=\"modal\">\r\n\t\t\t\t\t\t<div className=\"modal-header\">\r\n\t\t\t\t\t\t\t{translate(\"Insert Code Block\")}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<CodeBlock\r\n\t\t\t\t\t\t\tvalue={codeValue}\r\n\t\t\t\t\t\t\tlanguage={codeLanguage}\r\n\t\t\t\t\t\t\ttheme={codeTheme}\r\n\t\t\t\t\t\t\tlanguages={codeBlockLanguages}\r\n\t\t\t\t\t\t\tonChange={setCodeValue}\r\n\t\t\t\t\t\t\tonLanguageChange={setCodeLanguage}\r\n\t\t\t\t\t\t\tonThemeChange={setCodeTheme}\r\n\t\t\t\t\t\t\tplaceholder={translate(\"Paste your code here\")}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t<div className=\"modal-actions\">\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclassName=\"toolbar-btn\"\r\n\t\t\t\t\t\t\t\tonClick={() => setIsCodeModalOpen(false)}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{translate(\"Cancel\")}\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t\t<button\r\n\t\t\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\t\t\tclassName=\"toolbar-btn\"\r\n\t\t\t\t\t\t\t\tonClick={insertCodeBlock}\r\n\t\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\t\t{translate(\"Insert\")}\r\n\t\t\t\t\t\t\t</button>\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t)}\r\n\t\t</section>\r\n\t);\r\n}\r\n","// src/index.js - Library entry point\r\nimport \"./index.css\";\r\nimport Editor from \"./components/Editor.jsx\";\r\nimport CodeBlock from \"./components/CodeBlock.jsx\";\r\n\r\nexport default Editor;\r\nexport { CodeBlock };\r\n"],"names":["DEFAULT_LANGUAGES","value","label","DEFAULT_THEMES","CodeBlock","language","theme","languages","themes","onChange","onLanguageChange","onThemeChange","placeholder","normalizedLanguages","useMemo","Array","isArray","length","map","item","currentLanguage","find","React","createElement","className","event","target","key","spellCheck","DEFAULT_HTML","COMMANDS","cmd","icon","escapeHtml","replace","exec","editorRef","setHtml","updateToolbarState","current","focus","document","execCommand","lis","querySelectorAll","leadingNumberRE","forEach","li","firstChild","nodeType","Node","TEXT_NODE","textContent","nextHtml","innerHTML","last","__lastOnChangeHtml","err","html","text","innerText","clearAll","exportHtml","payload","navigator","clipboard","writeText","alert","applyHeading","next","toUpperCase","applyFontSize","selection","window","getSelection","rangeCount","range","getRangeAt","collapsed","fontElements","el","removeAttribute","style","fontSize","applyCustomFontSize","isNaN","applyTextColor","applyBackgroundColor","resetColors","setTextColor","setBackgroundColor","defaultText","defaultBg","insertCodeBlock","codeValue","codeLanguage","codeTheme","setIsCodeModalOpen","setCodeValue","safeCode","languageClass","htmlBlock","insertLink","url","prompt","insertTooltip","selectedText","toString","tooltip","span","title","surroundContents","appendChild","extractContents","insertNode","removeAllRanges","insertAnchor","id","sanitizedId","anchorHtml","insertHr","insertImage","alt","imageHtml","insertVideo","youtubeMatch","match","videoId","embedHtml","videoHtml","onInput","onPaste","plainPaste","preventDefault","clipboardData","getData","createUpdateToolbarState","setSelectionText","setActiveToolMap","anchorNode","isInsideEditor","contains","nextActive","queryCommandState","_stripLeadingNumberPrefix","node","sanitizeInitialHtml","rawHtml","tmp","blocks","closest","Editor","tools","showDemoText","showHeading","showFontSize","showAlign","showLink","showTooltip","showAnchor","showHr","showMedia","showUndoRedo","showClear","showPlainPaste","showColor","showFullscreen","codeBlock","codeBlockLanguages","showLiveHtml","showStats","showCopyHtml","initialHtml","t","translate","translations","sample","Undo","Redo","Format","Paragraph","Blockquote","Size","Custom","Font","Background","Align","Justify","Indent","Outdent","words","characters","selected","Cancel","Insert","useRef","initialAppliedRef","useState","setPlainPaste","selectionText","heading","setHeading","setFontSize","customSize","setCustomSize","textColor","backgroundColor","activeToolMap","isFullscreen","setIsFullscreen","isCodeModalOpen","setCodeLanguage","setCodeTheme","useEffect","stats","trim","split","chars","applyHeadingFormat","applyFontSizeFormat","applyCustomFontSizeFormat","applyTextColorFormat","applyBackgroundColorFormat","resetColorsFormat","insertCodeBlockContent","insertLinkContent","insertTooltipContent","insertAnchorContent","insertHrContent","insertImageContent","insertVideoContent","toggleFullscreen","removeFormat","clearAllContent","handleInput","links","link","getAttribute","setAttribute","handlePaste","onEditorClick","tagName","ctrlKey","shiftKey","metaKey","href","open","updateToolbarStateRef","addEventListener","removeEventListener","safeHtml","exportHtmlContent","activeCommands","filter","includes","Fragment","type","onClick","onMouseDown","min","max","width","checked","ref","contentEditable","onKeyDown","e","sel","parentElement","onKeyUp","onMouseUp","suppressContentEditableWarning","role"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "trotl-texteditor",
3
- "version": "1.0.20",
3
+ "version": "1.0.21",
4
4
  "description": "Texteditor table UI",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",