trotl-texteditor 1.0.21 → 1.0.22

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
@@ -421,6 +421,7 @@ function Editor({
421
421
  showLiveHtml = true,
422
422
  showStats = true,
423
423
  showCopyHtml = true,
424
+ disabled = false,
424
425
  onChange = () => {},
425
426
  initialHtml = "",
426
427
  t
@@ -502,6 +503,21 @@ function Editor({
502
503
  setCodeTheme(theme);
503
504
  }, [theme]);
504
505
 
506
+ // When `disabled` changes, update editor surface and toolbar controls (DOM-level guard)
507
+ React.useEffect(() => {
508
+ if (editorRef.current) {
509
+ editorRef.current.contentEditable = !disabled;
510
+ editorRef.current.setAttribute('aria-disabled', String(!!disabled));
511
+ }
512
+ const root = editorRef.current?.closest('.editor-root');
513
+ if (root) {
514
+ const controls = root.querySelectorAll('button, select, input, textarea');
515
+ controls.forEach(el => {
516
+ if (disabled) el.setAttribute('disabled', '');else el.removeAttribute('disabled');
517
+ });
518
+ }
519
+ }, [disabled]);
520
+
505
521
  // NOTE: initialization for `initialHtml` / demo text moved below `updateToolbarState` declaration to avoid referencing
506
522
  // `updateToolbarState` before it is defined. See the effect inserted later in the file.
507
523
 
@@ -658,12 +674,14 @@ function Editor({
658
674
  type: "button",
659
675
  className: "toolbar-btn",
660
676
  onClick: () => exec$1("undo"),
661
- title: translate("Undo")
677
+ title: translate("Undo"),
678
+ disabled: disabled
662
679
  }, "\u21B6"), /*#__PURE__*/React.createElement("button", {
663
680
  type: "button",
664
681
  className: "toolbar-btn",
665
682
  onClick: () => exec$1("redo"),
666
- title: translate("Redo")
683
+ title: translate("Redo"),
684
+ disabled: disabled
667
685
  }, "\u21B7")), /*#__PURE__*/React.createElement("span", {
668
686
  className: "toolbar-separator"
669
687
  }, "|")), activeCommands.length > 0 && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
@@ -675,7 +693,8 @@ function Editor({
675
693
  onMouseDown: event => event.preventDefault(),
676
694
  onClick: () => exec$1(item.cmd),
677
695
  title: translate(item.label),
678
- "aria-pressed": activeToolMap[item.cmd] || false
696
+ "aria-pressed": activeToolMap[item.cmd] || false,
697
+ disabled: disabled
679
698
  }, item.icon))), /*#__PURE__*/React.createElement("span", {
680
699
  className: "toolbar-separator"
681
700
  }, "|")), (showHeading || showFontSize || showColor) && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
@@ -848,7 +867,8 @@ function Editor({
848
867
  }, /*#__PURE__*/React.createElement("input", {
849
868
  type: "checkbox",
850
869
  checked: plainPaste,
851
- onChange: event => setPlainPaste(event.target.checked)
870
+ onChange: event => setPlainPaste(event.target.checked),
871
+ disabled: disabled
852
872
  }), translate("Paste as plain text"))), showFullscreen && /*#__PURE__*/React.createElement("div", {
853
873
  className: "toolbar-group"
854
874
  }, /*#__PURE__*/React.createElement("button", {
@@ -866,6 +886,7 @@ function Editor({
866
886
  onPaste: onPaste$1,
867
887
  onClick: onEditorClick,
868
888
  onKeyDown: e => {
889
+ if (disabled) return;
869
890
  // Tab => indent, Shift+Tab => outdent (do not intercept inside code/pre)
870
891
  if (e.key === 'Tab') {
871
892
  const sel = document.getSelection();
@@ -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: \"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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"}
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\tdisabled = false,\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// When `disabled` changes, update editor surface and toolbar controls (DOM-level guard)\r\n\tuseEffect(() => {\r\n\t\tif (editorRef.current) {\r\n\t\t\teditorRef.current.contentEditable = !disabled;\r\n\t\t\teditorRef.current.setAttribute('aria-disabled', String(!!disabled));\r\n\t\t}\r\n\t\tconst root = editorRef.current?.closest('.editor-root');\r\n\t\tif (root) {\r\n\t\t\tconst controls = root.querySelectorAll('button, select, input, textarea');\r\n\t\t\tcontrols.forEach((el) => {\r\n\t\t\t\tif (disabled) el.setAttribute('disabled', '');\r\n\t\t\t\telse el.removeAttribute('disabled');\r\n\t\t\t});\r\n\t\t}\r\n\t}, [disabled]);\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\")} disabled={disabled}\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\")} disabled={disabled}\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} disabled={disabled}\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)} disabled={disabled}\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) => { if (disabled) return;\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","disabled","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","contentEditable","setAttribute","String","root","controls","stats","trim","split","chars","applyHeadingFormat","applyFontSizeFormat","applyCustomFontSizeFormat","applyTextColorFormat","applyBackgroundColorFormat","resetColorsFormat","insertCodeBlockContent","insertLinkContent","insertTooltipContent","insertAnchorContent","insertHrContent","insertImageContent","insertVideoContent","toggleFullscreen","removeFormat","clearAllContent","handleInput","links","link","getAttribute","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","onKeyDown","e","sel","parentElement","onKeyUp","onMouseUp","suppressContentEditableWarning","role"],"mappings":"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"}
package/dist/index.css CHANGED
@@ -1,2 +1,2 @@
1
- .app-shell{background:radial-gradient(circle at top,rgba(99,102,241,.12),transparent 45%),#0b0f19;min-height:100vh}.app-header,.app-shell{display:flex;flex-direction:column}.app-header{gap:6px;padding:24px 32px 12px}.app-title{font-size:24px;font-weight:600}.app-subtitle{color:rgba(226,232,240,.68);font-size:14px}.app-main{flex:1;padding:0 32px 32px}.editor-root{--editor-bg:rgba(15,23,42,.78);--editor-panel:rgba(15,23,42,.85);--editor-border:rgba(148,163,184,.12);--editor-text:#f8fafc;--editor-muted:rgba(226,232,240,.65);--editor-btn-bg:rgba(30,41,59,.65);--editor-btn-border:rgba(148,163,184,.2);--editor-btn-hover:rgba(99,102,241,.7);--editor-code-bg:rgba(2,6,23,.8);display:grid;gap:16px;grid-template-columns:1.35fr .65fr}.editor-root.theme-light{--editor-bg:hsla(0,0%,100%,.9);--editor-panel:rgba(248,250,252,.95);--editor-border:rgba(15,23,42,.12);--editor-text:#0f172a;--editor-muted:rgba(15,23,42,.6);--editor-btn-bg:hsla(0,0%,100%,.9);--editor-btn-border:rgba(15,23,42,.2);--editor-btn-hover:rgba(79,70,229,.7);--editor-code-bg:rgba(226,232,240,.8)}.editor-root.no-preview{grid-template-columns:1fr}.editor-root.show-preview{grid-template-columns:1fr 1fr}.editor-root.fullscreen{background:var(--editor-bg);bottom:0;grid-template-rows:auto 1fr auto;height:100vh;left:0;margin:0;padding:16px;position:fixed;right:0;top:0;width:100vw;z-index:9999}.editor-root.fullscreen .editor-area{height:100%;overflow:auto}.toolbar{backdrop-filter:blur(8px);background:var(--editor-panel);border:1px solid var(--editor-border);border-radius:2px;gap:10px;grid-column:1/-1;padding:10px}.toolbar,.toolbar-group{display:flex;flex-wrap:wrap}.toolbar-group{align-items:center;gap:8px}.toolbar-group.toggle{margin-left:auto}.toolbar-separator{align-self:center;color:var(--editor-muted);font-size:18px;line-height:1;opacity:.4;user-select:none}.toolbar-btn{background:var(--editor-btn-bg);border:1px solid var(--editor-btn-border);border-radius:2px;color:var(--editor-text);cursor:pointer;font-size:13px;padding:8px 12px;transition:all .15s ease}.toolbar-btn:hover{border-color:var(--editor-btn-hover);transform:translateY(-1px)}.toolbar-btn.active{border-color:var(--editor-btn-hover);box-shadow:0 0 0 2px rgba(99,102,241,.18)}.toolbar-btn.danger{border-color:hsla(0,91%,71%,.45);color:#fecaca}.toolbar-label{align-items:center;color:var(--editor-muted);display:flex;font-size:12px;gap:6px}.toolbar-input,.toolbar-select{background:var(--editor-panel);border:1px solid var(--editor-btn-border);border-radius:2px;color:var(--editor-text);padding:6px 10px}.toolbar-input{font-size:13px}.align-buttons{display:flex;gap:4px}.toolbar-btn-small{min-width:32px;padding:6px 8px}.color-label{gap:10px}.toolbar-color{background:transparent;border:none;cursor:pointer;height:30px;padding:0;width:34px}.toggle-row{align-items:center;color:var(--editor-muted);display:flex;font-size:12px;gap:8px}.editor-area{background:var(--editor-bg);border:1px solid var(--editor-border);border-radius:2px;grid-column:1/-1;min-height:520px;padding:10px}.editor-surface{color:var(--editor-text);font-size:16px;line-height:1.7;min-height:460px;outline:none}.editor-surface ol,.editor-surface ul{list-style-position:outside;margin:0 0 1em 1.6rem;padding-left:1.1rem}.editor-surface li{margin:.25em 0;padding-left:0}.editor-surface .anchor-marker{background:var(--editor-btn-bg);border:1px dashed var(--editor-btn-border);border-radius:3px;color:var(--editor-muted);cursor:pointer;display:inline-block;font-size:11px;margin:0 4px;padding:2px 6px;user-select:none}.editor-surface .anchor-marker:hover{background:var(--editor-btn-hover);color:var(--editor-text)}.editor-surface .has-tooltip{border-bottom:1px dotted var(--editor-muted);cursor:help;position:relative}.editor-surface .has-tooltip:hover{border-bottom-color:var(--editor-btn-hover)}.editor-surface a{color:var(--editor-btn-hover);cursor:pointer;position:relative;text-decoration:underline;transition:opacity .2s ease}.editor-surface a:hover{opacity:1}.editor-surface a:after{background:#000;border:none;border-radius:4px;bottom:100%;box-shadow:0 4px 12px rgba(0,0,0,.4);color:#fff;content:attr(data-key-hint);font-size:13px;font-weight:500;left:50%;margin-bottom:8px;opacity:0;padding:8px 12px;pointer-events:none;position:absolute;transform:translateX(-50%);transition:opacity .2s ease;white-space:nowrap;z-index:100}.editor-surface a:hover:after{opacity:1}.editor-footer{align-items:center;color:var(--editor-muted);display:flex;font-size:12px;grid-column:1/2;justify-content:space-between;padding:12px 6px 0}.editor-root.no-preview .editor-footer{grid-column:1/-1}.editor-root.show-preview .editor-footer{grid-column:1/2;grid-row:3/4}.editor-root.show-preview .editor-area{grid-column:1/2;grid-row:2/3}.editor-root.show-preview .editor-preview{grid-column:2/3;grid-row:2/4}.footer-stats{display:flex;gap:16px}.editor-preview{background:var(--editor-bg);border:1px solid var(--editor-border);border-radius:2px;display:flex;flex-direction:column;grid-column:2/3;grid-row:2/4;min-height:520px;padding:10px}.preview-header{color:var(--editor-muted);font-size:13px;margin-bottom:12px}.preview-code{background:var(--editor-code-bg);border-radius:2px;color:var(--editor-text);flex:1;font-family:JetBrains Mono,Fira Code,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:12px;margin:0;overflow:auto;padding:12px;white-space:pre-wrap;word-break:break-all}.code-block{background:#0b1220;border:1px solid rgba(15,23,42,.12);border-radius:2px;color:#e2e8f0;overflow:hidden}.code-block-light{background:#f8fafc;color:#0f172a}.code-block-toolbar{background:rgba(15,23,42,.6);border-bottom:1px solid rgba(148,163,184,.2);display:flex;gap:12px;padding:10px 12px}.code-block-light .code-block-toolbar{background:rgba(226,232,240,.9)}.code-block-label{align-items:center;display:flex;font-size:12px;gap:8px}.code-block-select{background:rgba(15,23,42,.7);border:1px solid rgba(148,163,184,.4);border-radius:2px;color:inherit;min-width:140px;padding:4px 8px}.code-block-select option{background:inherit;color:inherit}.code-block-light .code-block-select{background:#fff;color:#0f172a}.code-block-area{background:transparent;border:none;color:inherit;font-family:JetBrains Mono,Fira Code,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:13px;line-height:1.5;min-height:180px;padding:12px;resize:vertical;width:100%}.code-block-area:focus{outline:none}.modal-backdrop{align-items:center;background:rgba(15,23,42,.6);display:flex;inset:0;justify-content:center;padding:24px;position:fixed;z-index:50000}.modal{background:var(--editor-panel);border:1px solid var(--editor-border);border-radius:2px;box-shadow:0 16px 40px rgba(0,0,0,.3);color:var(--editor-text);max-width:100%;padding:16px;width:720px}.modal-header{font-size:16px;font-weight:600;margin-bottom:12px}.modal-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:12px}.code-block-shell{background:rgba(15,23,42,.85);border:1px solid rgba(148,163,184,.2);border-radius:2px;color:#e2e8f0;overflow:auto;padding:12px}.code-block-shell[data-theme=light]{background:rgba(248,250,252,.95);color:#0f172a}.code-block-shell code.language-javascript{color:#f8fafc}.code-block-shell[data-theme=light] code.language-javascript{color:#0f172a}@media (max-width:1024px){.editor-root{grid-template-columns:1fr}.editor-preview{grid-row:auto}.editor-footer,.editor-preview{grid-column:1/-1}}
1
+ .app-shell{background:radial-gradient(circle at top,rgba(99,102,241,.12),transparent 45%),#0b0f19;min-height:100vh}.app-header,.app-shell{display:flex;flex-direction:column}.app-header{gap:6px;padding:24px 32px 12px}.app-title{font-size:24px;font-weight:600}.app-subtitle{color:rgba(226,232,240,.68);font-size:14px}.app-main{flex:1;padding:0 32px 32px}.editor-root{--editor-bg:rgba(15,23,42,.78);--editor-panel:rgba(15,23,42,.85);--editor-border:rgba(148,163,184,.12);--editor-text:#f8fafc;--editor-muted:rgba(226,232,240,.65);--editor-btn-bg:rgba(30,41,59,.65);--editor-btn-border:rgba(148,163,184,.2);--editor-btn-hover:rgba(99,102,241,.7);--editor-code-bg:rgba(2,6,23,.8);display:grid;gap:16px;grid-template-columns:1.35fr .65fr}.editor-root.theme-light{--editor-bg:hsla(0,0%,100%,.9);--editor-panel:rgba(248,250,252,.95);--editor-border:rgba(15,23,42,.12);--editor-text:#0f172a;--editor-muted:rgba(15,23,42,.6);--editor-btn-bg:hsla(0,0%,100%,.9);--editor-btn-border:rgba(15,23,42,.2);--editor-btn-hover:rgba(79,70,229,.7);--editor-code-bg:rgba(226,232,240,.8)}.editor-root.no-preview{grid-template-columns:1fr}.editor-root.show-preview{grid-template-columns:1fr 1fr}.editor-root.fullscreen{background:var(--editor-bg);bottom:0;grid-template-rows:auto 1fr auto;height:100vh;left:0;margin:0;padding:16px;position:fixed;right:0;top:0;width:100vw;z-index:9999}.editor-root.fullscreen .editor-area{height:100%;overflow:auto}.toolbar{backdrop-filter:blur(8px);background:var(--editor-panel);border:1px solid var(--editor-border);border-radius:2px;gap:10px;grid-column:1/-1;padding:10px}.toolbar,.toolbar-group{display:flex;flex-wrap:wrap}.toolbar-group{align-items:center;gap:8px}.toolbar-group.toggle{margin-left:auto}.toolbar-separator{align-self:center;color:var(--editor-muted);font-size:18px;line-height:1;opacity:.4;user-select:none}.toolbar-btn{background:var(--editor-btn-bg);border:1px solid var(--editor-btn-border);border-radius:2px;color:var(--editor-text);cursor:pointer;font-size:13px;padding:8px 12px;transition:all .15s ease}.toolbar-btn:hover{border-color:var(--editor-btn-hover);transform:translateY(-1px)}.toolbar-btn.active{border-color:var(--editor-btn-hover);box-shadow:0 0 0 2px rgba(99,102,241,.18)}.toolbar-btn.danger{border-color:hsla(0,91%,71%,.45);color:#fecaca}.toolbar-label{align-items:center;color:var(--editor-muted);display:flex;font-size:12px;gap:6px}.toolbar-input,.toolbar-select{background:var(--editor-panel);border:1px solid var(--editor-btn-border);border-radius:2px;color:var(--editor-text);padding:6px 10px}.toolbar-input{font-size:13px}.align-buttons{display:flex;gap:4px}.toolbar-btn-small{min-width:32px;padding:6px 8px}.color-label{gap:10px}.toolbar-color{background:transparent;border:none;cursor:pointer;height:30px;padding:0;width:34px}.toggle-row{align-items:center;color:var(--editor-muted);display:flex;font-size:12px;gap:8px}.editor-area{background:var(--editor-bg);border:1px solid var(--editor-border);border-radius:2px;grid-column:1/-1;min-height:520px;padding:10px}.editor-surface{color:var(--editor-text);font-size:16px;line-height:1.7;min-height:460px;outline:none}.editor-surface.disabled{cursor:not-allowed;opacity:.65}.editor-surface ol,.editor-surface ul{list-style-position:outside;margin:0 0 1em 1.6rem;padding-left:1.1rem}.editor-surface li{margin:.25em 0;padding-left:0}.editor-surface .anchor-marker{background:var(--editor-btn-bg);border:1px dashed var(--editor-btn-border);border-radius:3px;color:var(--editor-muted);cursor:pointer;display:inline-block;font-size:11px;margin:0 4px;padding:2px 6px;user-select:none}.editor-surface .anchor-marker:hover{background:var(--editor-btn-hover);color:var(--editor-text)}.editor-surface .has-tooltip{border-bottom:1px dotted var(--editor-muted);cursor:help;position:relative}.editor-surface .has-tooltip:hover{border-bottom-color:var(--editor-btn-hover)}.editor-surface a{color:var(--editor-btn-hover);cursor:pointer;position:relative;text-decoration:underline;transition:opacity .2s ease}.editor-surface a:hover{opacity:1}.editor-surface a:after{background:#000;border:none;border-radius:4px;bottom:100%;box-shadow:0 4px 12px rgba(0,0,0,.4);color:#fff;content:attr(data-key-hint);font-size:13px;font-weight:500;left:50%;margin-bottom:8px;opacity:0;padding:8px 12px;pointer-events:none;position:absolute;transform:translateX(-50%);transition:opacity .2s ease;white-space:nowrap;z-index:100}.editor-surface a:hover:after{opacity:1}.editor-footer{align-items:center;color:var(--editor-muted);display:flex;font-size:12px;grid-column:1/2;justify-content:space-between;padding:12px 6px 0}.editor-root.no-preview .editor-footer{grid-column:1/-1}.editor-root.show-preview .editor-footer{grid-column:1/2;grid-row:3/4}.editor-root.show-preview .editor-area{grid-column:1/2;grid-row:2/3}.editor-root.show-preview .editor-preview{grid-column:2/3;grid-row:2/4}.footer-stats{display:flex;gap:16px}.editor-preview{background:var(--editor-bg);border:1px solid var(--editor-border);border-radius:2px;display:flex;flex-direction:column;grid-column:2/3;grid-row:2/4;min-height:520px;padding:10px}.preview-header{color:var(--editor-muted);font-size:13px;margin-bottom:12px}.preview-code{background:var(--editor-code-bg);border-radius:2px;color:var(--editor-text);flex:1;font-family:JetBrains Mono,Fira Code,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:12px;margin:0;overflow:auto;padding:12px;white-space:pre-wrap;word-break:break-all}.code-block{background:#0b1220;border:1px solid rgba(15,23,42,.12);border-radius:2px;color:#e2e8f0;overflow:hidden}.code-block-light{background:#f8fafc;color:#0f172a}.code-block-toolbar{background:rgba(15,23,42,.6);border-bottom:1px solid rgba(148,163,184,.2);display:flex;gap:12px;padding:10px 12px}.code-block-light .code-block-toolbar{background:rgba(226,232,240,.9)}.code-block-label{align-items:center;display:flex;font-size:12px;gap:8px}.code-block-select{background:rgba(15,23,42,.7);border:1px solid rgba(148,163,184,.4);border-radius:2px;color:inherit;min-width:140px;padding:4px 8px}.code-block-select option{background:inherit;color:inherit}.code-block-light .code-block-select{background:#fff;color:#0f172a}.code-block-area{background:transparent;border:none;color:inherit;font-family:JetBrains Mono,Fira Code,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:13px;line-height:1.5;min-height:180px;padding:12px;resize:vertical;width:100%}.code-block-area:focus{outline:none}.modal-backdrop{align-items:center;background:rgba(15,23,42,.6);display:flex;inset:0;justify-content:center;padding:24px;position:fixed;z-index:50000}.modal{background:var(--editor-panel);border:1px solid var(--editor-border);border-radius:2px;box-shadow:0 16px 40px rgba(0,0,0,.3);color:var(--editor-text);max-width:100%;padding:16px;width:720px}.modal-header{font-size:16px;font-weight:600;margin-bottom:12px}.modal-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:12px}.code-block-shell{background:rgba(15,23,42,.85);border:1px solid rgba(148,163,184,.2);border-radius:2px;color:#e2e8f0;overflow:auto;padding:12px}.code-block-shell[data-theme=light]{background:rgba(248,250,252,.95);color:#0f172a}.code-block-shell code.language-javascript{color:#f8fafc}.code-block-shell[data-theme=light] code.language-javascript{color:#0f172a}@media (max-width:1024px){.editor-root{grid-template-columns:1fr}.editor-preview{grid-row:auto}.editor-footer,.editor-preview{grid-column:1/-1}}
2
2
  /*# sourceMappingURL=index.css.map */
@@ -1 +1 @@
1
- {"version":3,"sources":["index.css"],"names":[],"mappings":"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","file":"index.css","sourcesContent":["\r\n\r\n.app-shell {\r\n min-height: 100vh;\r\n display: flex;\r\n flex-direction: column;\r\n background: radial-gradient(circle at top, rgba(99, 102, 241, 0.12), transparent 45%),\r\n #0b0f19;\r\n}\r\n\r\n.app-header {\r\n padding: 24px 32px 12px;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 6px;\r\n}\r\n\r\n.app-title {\r\n font-size: 24px;\r\n font-weight: 600;\r\n}\r\n\r\n.app-subtitle {\r\n font-size: 14px;\r\n color: rgba(226, 232, 240, 0.68);\r\n}\r\n\r\n.app-main {\r\n flex: 1;\r\n padding: 0 32px 32px;\r\n}\r\n\r\n.editor-root {\r\n --editor-bg: rgba(15, 23, 42, 0.78);\r\n --editor-panel: rgba(15, 23, 42, 0.85);\r\n --editor-border: rgba(148, 163, 184, 0.12);\r\n --editor-text: #f8fafc;\r\n --editor-muted: rgba(226, 232, 240, 0.65);\r\n --editor-btn-bg: rgba(30, 41, 59, 0.65);\r\n --editor-btn-border: rgba(148, 163, 184, 0.2);\r\n --editor-btn-hover: rgba(99, 102, 241, 0.7);\r\n --editor-code-bg: rgba(2, 6, 23, 0.8);\r\n display: grid;\r\n grid-template-columns: 1.35fr 0.65fr;\r\n gap: 16px;\r\n}\r\n\r\n.editor-root.theme-light {\r\n --editor-bg: rgba(255, 255, 255, 0.9);\r\n --editor-panel: rgba(248, 250, 252, 0.95);\r\n --editor-border: rgba(15, 23, 42, 0.12);\r\n --editor-text: #0f172a;\r\n --editor-muted: rgba(15, 23, 42, 0.6);\r\n --editor-btn-bg: rgba(255, 255, 255, 0.9);\r\n --editor-btn-border: rgba(15, 23, 42, 0.2);\r\n --editor-btn-hover: rgba(79, 70, 229, 0.7);\r\n --editor-code-bg: rgba(226, 232, 240, 0.8);\r\n}\r\n\r\n.editor-root.no-preview {\r\n grid-template-columns: 1fr;\r\n}\r\n\r\n.editor-root.show-preview {\r\n grid-template-columns: 1fr 1fr;\r\n}\r\n\r\n.editor-root.fullscreen {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n width: 100vw;\r\n height: 100vh;\r\n z-index: 9999;\r\n padding: 16px;\r\n background: var(--editor-bg);\r\n margin: 0;\r\n grid-template-rows: auto 1fr auto;\r\n}\r\n\r\n.editor-root.fullscreen .editor-area {\r\n height: 100%;\r\n overflow: auto;\r\n}\r\n\r\n.toolbar {\r\n grid-column: 1 / -1;\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 10px;\r\n padding: 10px;\r\n background: var(--editor-panel);\r\n border: 1px solid var(--editor-border);\r\n border-radius: 2px;\r\n backdrop-filter: blur(8px);\r\n}\r\n\r\n.toolbar-group {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n flex-wrap: wrap;\r\n}\r\n\r\n.toolbar-group.toggle {\r\n margin-left: auto;\r\n}\r\n\r\n.toolbar-separator {\r\n color: var(--editor-muted);\r\n font-size: 18px;\r\n line-height: 1;\r\n opacity: 0.4;\r\n user-select: none;\r\n align-self: center;\r\n}\r\n\r\n.toolbar-btn {\r\n border: 1px solid var(--editor-btn-border);\r\n background: var(--editor-btn-bg);\r\n color: var(--editor-text);\r\n padding: 8px 12px;\r\n border-radius: 2px;\r\n cursor: pointer;\r\n font-size: 13px;\r\n transition: all 0.15s ease;\r\n}\r\n\r\n.toolbar-btn:hover {\r\n border-color: var(--editor-btn-hover);\r\n transform: translateY(-1px);\r\n}\r\n\r\n.toolbar-btn.active {\r\n border-color: var(--editor-btn-hover);\r\n box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.18);\r\n}\r\n\r\n.toolbar-btn.danger {\r\n border-color: rgba(248, 113, 113, 0.45);\r\n color: #fecaca;\r\n}\r\n\r\n.toolbar-label {\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n font-size: 12px;\r\n color: var(--editor-muted);\r\n}\r\n\r\n.toolbar-select {\r\n background: var(--editor-panel);\r\n color: var(--editor-text);\r\n border: 1px solid var(--editor-btn-border);\r\n border-radius: 2px;\r\n padding: 6px 10px;\r\n}\r\n\r\n.toolbar-input {\r\n background: var(--editor-panel);\r\n color: var(--editor-text);\r\n border: 1px solid var(--editor-btn-border);\r\n border-radius: 2px;\r\n padding: 6px 10px;\r\n font-size: 13px;\r\n}\r\n\r\n.align-buttons {\r\n display: flex;\r\n gap: 4px;\r\n}\r\n\r\n.toolbar-btn-small {\r\n padding: 6px 8px;\r\n min-width: 32px;\r\n}\r\n\r\n.color-label {\r\n gap: 10px;\r\n}\r\n\r\n.toolbar-color {\r\n width: 34px;\r\n height: 30px;\r\n border: none;\r\n padding: 0;\r\n background: transparent;\r\n cursor: pointer;\r\n}\r\n\r\n.toggle-row {\r\n display: flex;\r\n gap: 8px;\r\n align-items: center;\r\n font-size: 12px;\r\n color: var(--editor-muted);\r\n}\r\n\r\n.editor-area {\r\n background: var(--editor-bg);\r\n border: 1px solid var(--editor-border);\r\n border-radius: 2px;\r\n padding: 10px;\r\n min-height: 520px;\r\n grid-column: 1 / -1;\r\n}\r\n\r\n.editor-surface {\r\n min-height: 460px;\r\n outline: none;\r\n color: var(--editor-text);\r\n font-size: 16px;\r\n line-height: 1.7;\r\n}\r\n\r\n.editor-surface h1,\r\n.editor-surface h2,\r\n.editor-surface h3 {\r\n /* margin-top: 1.4em; */\r\n}\r\n\r\n/* Ensure list markers are properly indented and aligned inside the editor surface.\r\n This prevents numbers from appearing flush left or overlapping the editor gutter. */\r\n.editor-surface ol,\r\n.editor-surface ul {\r\n margin: 0 0 1em 1.6rem; /* space before list content */\r\n padding-left: 1.1rem; /* keeps marker inside expected content area */\r\n list-style-position: outside;\r\n}\r\n\r\n.editor-surface li {\r\n margin: 0.25em 0; /* small vertical spacing between items */\r\n padding-left: 0; /* do not add extra padding to list items */\r\n}\r\n\r\n.editor-surface .anchor-marker {\r\n display: inline-block;\r\n background: var(--editor-btn-bg);\r\n color: var(--editor-muted);\r\n border: 1px dashed var(--editor-btn-border);\r\n padding: 2px 6px;\r\n border-radius: 3px;\r\n font-size: 11px;\r\n margin: 0 4px;\r\n cursor: pointer;\r\n user-select: none;\r\n}\r\n\r\n.editor-surface .anchor-marker:hover {\r\n background: var(--editor-btn-hover);\r\n color: var(--editor-text);\r\n}\r\n\r\n.editor-surface .has-tooltip {\r\n border-bottom: 1px dotted var(--editor-muted);\r\n cursor: help;\r\n position: relative;\r\n}\r\n\r\n.editor-surface .has-tooltip:hover {\r\n border-bottom-color: var(--editor-btn-hover);\r\n}\r\n\r\n.editor-surface a {\r\n color: var(--editor-btn-hover);\r\n text-decoration: underline;\r\n cursor: pointer;\r\n transition: opacity 0.2s ease;\r\n position: relative;\r\n}\r\n\r\n.editor-surface a:hover {\r\n opacity: 2;\r\n}\r\n\r\n.editor-surface a::after {\r\n content: attr(data-key-hint);\r\n position: absolute;\r\n bottom: 100%;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n background: #000;\r\n color: #fff;\r\n padding: 8px 12px;\r\n border-radius: 4px;\r\n font-size: 13px;\r\n font-weight: 500;\r\n white-space: nowrap;\r\n opacity: 0;\r\n pointer-events: none;\r\n transition: opacity 0.2s ease;\r\n margin-bottom: 8px;\r\n border: none;\r\n z-index: 100;\r\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);\r\n}\r\n\r\n.editor-surface a:hover::after {\r\n opacity: 1;\r\n}\r\n\r\n.editor-footer {\r\n grid-column: 1 / 2;\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 12px 6px 0;\r\n color: var(--editor-muted);\r\n font-size: 12px;\r\n}\r\n\r\n.editor-root.no-preview .editor-footer {\r\n grid-column: 1 / -1;\r\n}\r\n\r\n.editor-root.show-preview .editor-footer {\r\n grid-column: 1 / 2;\r\n grid-row: 3 / 4;\r\n}\r\n\r\n.editor-root.show-preview .editor-area {\r\n grid-column: 1 / 2;\r\n grid-row: 2 / 3;\r\n}\r\n\r\n.editor-root.show-preview .editor-preview {\r\n grid-column: 2 / 3;\r\n grid-row: 2 / 4;\r\n}\r\n\r\n.footer-stats {\r\n display: flex;\r\n gap: 16px;\r\n}\r\n\r\n.editor-preview {\r\n grid-column: 2 / 3;\r\n grid-row: 2 / 4;\r\n background: var(--editor-bg);\r\n border: 1px solid var(--editor-border);\r\n border-radius: 2px;\r\n padding: 10px;\r\n display: flex;\r\n flex-direction: column;\r\n min-height: 520px;\r\n}\r\n\r\n.preview-header {\r\n font-size: 13px;\r\n color: var(--editor-muted);\r\n margin-bottom: 12px;\r\n}\r\n\r\n.preview-code {\r\n flex: 1;\r\n margin: 0;\r\n font-family: \"JetBrains Mono\", \"Fira Code\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,\r\n \"Liberation Mono\", \"Courier New\", monospace;\r\n font-size: 12px;\r\n color: var(--editor-text);\r\n background: var(--editor-code-bg);\r\n padding: 12px;\r\n border-radius: 2px;\r\n overflow: auto;\r\n white-space: pre-wrap;\r\n word-break: break-all;\r\n}\r\n\r\n.code-block {\r\n border: 1px solid rgba(15, 23, 42, 0.12);\r\n border-radius: 2px;\r\n overflow: hidden;\r\n background: #0b1220;\r\n color: #e2e8f0;\r\n}\r\n\r\n.code-block-light {\r\n background: #f8fafc;\r\n color: #0f172a;\r\n}\r\n\r\n.code-block-toolbar {\r\n display: flex;\r\n gap: 12px;\r\n padding: 10px 12px;\r\n border-bottom: 1px solid rgba(148, 163, 184, 0.2);\r\n background: rgba(15, 23, 42, 0.6);\r\n}\r\n\r\n.code-block-light .code-block-toolbar {\r\n background: rgba(226, 232, 240, 0.9);\r\n}\r\n\r\n.code-block-label {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n font-size: 12px;\r\n}\r\n\r\n.code-block-select {\r\n border: 1px solid rgba(148, 163, 184, 0.4);\r\n border-radius: 2px;\r\n padding: 4px 8px;\r\n background: rgba(15, 23, 42, 0.7);\r\n color: inherit;\r\n min-width: 140px;\r\n}\r\n\r\n.code-block-select option {\r\n color: inherit;\r\n background: inherit;\r\n}\r\n\r\n.code-block-light .code-block-select {\r\n background: #ffffff;\r\n color: #0f172a;\r\n}\r\n\r\n.code-block-area {\r\n width: 100%;\r\n min-height: 180px;\r\n padding: 12px;\r\n border: none;\r\n background: transparent;\r\n color: inherit;\r\n font-family: \"JetBrains Mono\", \"Fira Code\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,\r\n \"Liberation Mono\", \"Courier New\", monospace;\r\n font-size: 13px;\r\n line-height: 1.5;\r\n resize: vertical;\r\n}\r\n\r\n.code-block-area:focus {\r\n outline: none;\r\n}\r\n\r\n.modal-backdrop {\r\n position: fixed;\r\n inset: 0;\r\n background: rgba(15, 23, 42, 0.6);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n z-index: 50000;\r\n padding: 24px;\r\n}\r\n\r\n.modal {\r\n width: 720px;\r\n max-width: 100%;\r\n background: var(--editor-panel);\r\n border: 1px solid var(--editor-border);\r\n border-radius: 2px;\r\n padding: 16px;\r\n color: var(--editor-text);\r\n box-shadow: 0 16px 40px rgba(0, 0, 0, 0.3);\r\n}\r\n\r\n.modal-header {\r\n font-size: 16px;\r\n font-weight: 600;\r\n margin-bottom: 12px;\r\n}\r\n\r\n.modal-actions {\r\n display: flex;\r\n justify-content: flex-end;\r\n gap: 10px;\r\n margin-top: 12px;\r\n}\r\n\r\n.code-block-shell {\r\n padding: 12px;\r\n border-radius: 2px;\r\n border: 1px solid rgba(148, 163, 184, 0.2);\r\n background: rgba(15, 23, 42, 0.85);\r\n color: #e2e8f0;\r\n overflow: auto;\r\n}\r\n\r\n.code-block-shell[data-theme=\"light\"] {\r\n background: rgba(248, 250, 252, 0.95);\r\n color: #0f172a;\r\n}\r\n\r\n/* Language-specific styling (basic) */\r\n.code-block-shell code.language-javascript {\r\n color: #f8fafc;\r\n}\r\n\r\n.code-block-shell[data-theme=\"light\"] code.language-javascript {\r\n color: #0f172a;\r\n}\r\n\r\n@media (max-width: 1024px) {\r\n .editor-root {\r\n grid-template-columns: 1fr;\r\n }\r\n\r\n .editor-preview {\r\n grid-column: 1 / -1;\r\n grid-row: auto;\r\n }\r\n\r\n .editor-footer {\r\n grid-column: 1 / -1;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"sources":["index.css"],"names":[],"mappings":"AAEA,WAIE,sFACS,CAJT,gBAKF,CAEA,uBANE,YAAa,CACb,qBAUF,CALA,YAIE,OAAQ,CAHR,sBAIF,CAEA,WACE,cAAe,CACf,eACF,CAEA,cAEE,2BAAgC,CADhC,cAEF,CAEA,UACE,MAAO,CACP,mBACF,CAEA,aACE,8BAAmC,CACnC,iCAAsC,CACtC,qCAA0C,CAC1C,qBAAsB,CACtB,oCAAyC,CACzC,kCAAuC,CACvC,wCAA6C,CAC7C,sCAA2C,CAC3C,gCAAqC,CACrC,YAAa,CAEb,QAAS,CADT,kCAEF,CAEA,yBACE,8BAAqC,CACrC,oCAAyC,CACzC,kCAAuC,CACvC,qBAAsB,CACtB,gCAAqC,CACrC,kCAAyC,CACzC,qCAA0C,CAC1C,qCAA0C,CAC1C,qCACF,CAEA,wBACE,yBACF,CAEA,0BACE,6BACF,CAEA,wBAUE,2BAA4B,CAL5B,QAAS,CAOT,gCAAiC,CALjC,YAAa,CAJb,MAAO,CAQP,QAAS,CAFT,YAAa,CARb,cAAe,CAGf,OAAQ,CAFR,KAAM,CAIN,WAAY,CAEZ,YAKF,CAEA,qCACE,WAAY,CACZ,aACF,CAEA,SASE,yBAA0B,CAH1B,8BAA+B,CAC/B,qCAAsC,CACtC,iBAAkB,CAJlB,QAAS,CAHT,gBAAmB,CAInB,YAKF,CAEA,wBAVE,YAAa,CACb,cAcF,CALA,eAEE,kBAAmB,CACnB,OAEF,CAEA,sBACE,gBACF,CAEA,mBAME,iBAAkB,CALlB,yBAA0B,CAC1B,cAAe,CACf,aAAc,CACd,UAAY,CACZ,gBAEF,CAEA,aAEE,+BAAgC,CADhC,yCAA0C,CAI1C,iBAAkB,CAFlB,wBAAyB,CAGzB,cAAe,CACf,cAAe,CAHf,gBAAiB,CAIjB,wBACF,CAEA,mBACE,oCAAqC,CACrC,0BACF,CAEA,oBACE,oCAAqC,CACrC,yCACF,CAEA,oBACE,gCAAuC,CACvC,aACF,CAEA,eAEE,kBAAmB,CAGnB,yBAA0B,CAJ1B,YAAa,CAGb,cAAe,CADf,OAGF,CAUA,+BAPE,8BAA+B,CAE/B,yCAA0C,CAC1C,iBAAkB,CAFlB,wBAAyB,CAGzB,gBAUF,CAPA,eAME,cACF,CAEA,eACE,YAAa,CACb,OACF,CAEA,mBAEE,cAAe,CADf,eAEF,CAEA,aACE,QACF,CAEA,eAKE,sBAAuB,CAFvB,WAAY,CAGZ,cAAe,CAJf,WAAY,CAEZ,SAAU,CAHV,UAMF,CAEA,YAGE,kBAAmB,CAEnB,yBAA0B,CAJ1B,YAAa,CAGb,cAAe,CAFf,OAIF,CAEA,aACE,2BAA4B,CAC5B,qCAAsC,CACtC,iBAAkB,CAGlB,gBAAmB,CADnB,gBAAiB,CADjB,YAGF,CAEA,gBAGE,wBAAyB,CACzB,cAAe,CACf,eAAgB,CAJhB,gBAAiB,CACjB,YAIF,CAGA,yBAEE,kBAAmB,CADnB,WAEF,CAUA,sCAIE,2BAA4B,CAF5B,qBAAsB,CACtB,mBAEF,CAEA,mBACE,cAAgB,CAChB,cACF,CAEA,+BAEE,+BAAgC,CAEhC,0CAA2C,CAE3C,iBAAkB,CAHlB,yBAA0B,CAM1B,cAAe,CARf,oBAAqB,CAMrB,cAAe,CACf,YAAa,CAHb,eAAgB,CAKhB,gBACF,CAEA,qCACE,kCAAmC,CACnC,wBACF,CAEA,6BACE,4CAA6C,CAC7C,WAAY,CACZ,iBACF,CAEA,mCACE,2CACF,CAEA,kBACE,6BAA8B,CAE9B,cAAe,CAEf,iBAAkB,CAHlB,yBAA0B,CAE1B,2BAEF,CAEA,wBACE,SACF,CAEA,wBAME,eAAgB,CAWhB,WAAY,CARZ,iBAAkB,CANlB,WAAY,CAgBZ,oCAAyC,CAZzC,UAAW,CANX,2BAA4B,CAS5B,cAAe,CACf,eAAgB,CAPhB,QAAS,CAYT,iBAAkB,CAHlB,SAAU,CALV,gBAAiB,CAMjB,mBAAoB,CAZpB,iBAAkB,CAGlB,0BAA2B,CAU3B,2BAA6B,CAH7B,kBAAmB,CAMnB,WAEF,CAEA,8BACE,SACF,CAEA,eAGE,kBAAmB,CAGnB,yBAA0B,CAJ1B,YAAa,CAKb,cAAe,CANf,eAAkB,CAGlB,6BAA8B,CAC9B,kBAGF,CAEA,uCACE,gBACF,CAEA,yCACE,eAAkB,CAClB,YACF,CAEA,uCACE,eAAkB,CAClB,YACF,CAEA,0CACE,eAAkB,CAClB,YACF,CAEA,cACE,YAAa,CACb,QACF,CAEA,gBAGE,2BAA4B,CAC5B,qCAAsC,CACtC,iBAAkB,CAElB,YAAa,CACb,qBAAsB,CAPtB,eAAkB,CAClB,YAAe,CAOf,gBAAiB,CAHjB,YAIF,CAEA,gBAEE,yBAA0B,CAD1B,cAAe,CAEf,kBACF,CAEA,cAOE,gCAAiC,CAEjC,iBAAkB,CAHlB,wBAAyB,CALzB,MAAO,CAEP,4HAC6C,CAC7C,cAAe,CAHf,QAAS,CAQT,aAAc,CAFd,YAAa,CAGb,oBAAqB,CACrB,oBACF,CAEA,YAIE,kBAAmB,CAHnB,mCAAwC,CACxC,iBAAkB,CAGlB,aAAc,CAFd,eAGF,CAEA,kBACE,kBAAmB,CACnB,aACF,CAEA,oBAKE,4BAAiC,CADjC,4CAAiD,CAHjD,YAAa,CACb,QAAS,CACT,iBAGF,CAEA,sCACE,+BACF,CAEA,kBAEE,kBAAmB,CADnB,YAAa,CAGb,cAAe,CADf,OAEF,CAEA,mBAIE,4BAAiC,CAHjC,qCAA0C,CAC1C,iBAAkB,CAGlB,aAAc,CACd,eAAgB,CAHhB,eAIF,CAEA,0BAEE,kBAAmB,CADnB,aAEF,CAEA,qCACE,eAAmB,CACnB,aACF,CAEA,iBAKE,sBAAuB,CADvB,WAAY,CAEZ,aAAc,CACd,4HAC6C,CAC7C,cAAe,CACf,eAAgB,CARhB,gBAAiB,CACjB,YAAa,CAQb,eAAgB,CAVhB,UAWF,CAEA,uBACE,YACF,CAEA,gBAKE,kBAAmB,CAFnB,4BAAiC,CACjC,YAAa,CAFb,OAAQ,CAIR,sBAAuB,CAEvB,YAAa,CAPb,cAAe,CAMf,aAEF,CAEA,OAGE,8BAA+B,CAC/B,qCAAsC,CACtC,iBAAkB,CAGlB,qCAA0C,CAD1C,wBAAyB,CALzB,cAAe,CAIf,YAAa,CALb,WAQF,CAEA,cACE,cAAe,CACf,eAAgB,CAChB,kBACF,CAEA,eACE,YAAa,CAEb,QAAS,CADT,wBAAyB,CAEzB,eACF,CAEA,kBAIE,6BAAkC,CADlC,qCAA0C,CAD1C,iBAAkB,CAGlB,aAAc,CACd,aAAc,CALd,YAMF,CAEA,oCACE,gCAAqC,CACrC,aACF,CAGA,2CACE,aACF,CAEA,6DACE,aACF,CAEA,0BACE,aACE,yBACF,CAEA,gBAEE,aACF,CAEA,+BAJE,gBAMF,CACF","file":"index.css","sourcesContent":["\r\n\r\n.app-shell {\r\n min-height: 100vh;\r\n display: flex;\r\n flex-direction: column;\r\n background: radial-gradient(circle at top, rgba(99, 102, 241, 0.12), transparent 45%),\r\n #0b0f19;\r\n}\r\n\r\n.app-header {\r\n padding: 24px 32px 12px;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 6px;\r\n}\r\n\r\n.app-title {\r\n font-size: 24px;\r\n font-weight: 600;\r\n}\r\n\r\n.app-subtitle {\r\n font-size: 14px;\r\n color: rgba(226, 232, 240, 0.68);\r\n}\r\n\r\n.app-main {\r\n flex: 1;\r\n padding: 0 32px 32px;\r\n}\r\n\r\n.editor-root {\r\n --editor-bg: rgba(15, 23, 42, 0.78);\r\n --editor-panel: rgba(15, 23, 42, 0.85);\r\n --editor-border: rgba(148, 163, 184, 0.12);\r\n --editor-text: #f8fafc;\r\n --editor-muted: rgba(226, 232, 240, 0.65);\r\n --editor-btn-bg: rgba(30, 41, 59, 0.65);\r\n --editor-btn-border: rgba(148, 163, 184, 0.2);\r\n --editor-btn-hover: rgba(99, 102, 241, 0.7);\r\n --editor-code-bg: rgba(2, 6, 23, 0.8);\r\n display: grid;\r\n grid-template-columns: 1.35fr 0.65fr;\r\n gap: 16px;\r\n}\r\n\r\n.editor-root.theme-light {\r\n --editor-bg: rgba(255, 255, 255, 0.9);\r\n --editor-panel: rgba(248, 250, 252, 0.95);\r\n --editor-border: rgba(15, 23, 42, 0.12);\r\n --editor-text: #0f172a;\r\n --editor-muted: rgba(15, 23, 42, 0.6);\r\n --editor-btn-bg: rgba(255, 255, 255, 0.9);\r\n --editor-btn-border: rgba(15, 23, 42, 0.2);\r\n --editor-btn-hover: rgba(79, 70, 229, 0.7);\r\n --editor-code-bg: rgba(226, 232, 240, 0.8);\r\n}\r\n\r\n.editor-root.no-preview {\r\n grid-template-columns: 1fr;\r\n}\r\n\r\n.editor-root.show-preview {\r\n grid-template-columns: 1fr 1fr;\r\n}\r\n\r\n.editor-root.fullscreen {\r\n position: fixed;\r\n top: 0;\r\n left: 0;\r\n right: 0;\r\n bottom: 0;\r\n width: 100vw;\r\n height: 100vh;\r\n z-index: 9999;\r\n padding: 16px;\r\n background: var(--editor-bg);\r\n margin: 0;\r\n grid-template-rows: auto 1fr auto;\r\n}\r\n\r\n.editor-root.fullscreen .editor-area {\r\n height: 100%;\r\n overflow: auto;\r\n}\r\n\r\n.toolbar {\r\n grid-column: 1 / -1;\r\n display: flex;\r\n flex-wrap: wrap;\r\n gap: 10px;\r\n padding: 10px;\r\n background: var(--editor-panel);\r\n border: 1px solid var(--editor-border);\r\n border-radius: 2px;\r\n backdrop-filter: blur(8px);\r\n}\r\n\r\n.toolbar-group {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n flex-wrap: wrap;\r\n}\r\n\r\n.toolbar-group.toggle {\r\n margin-left: auto;\r\n}\r\n\r\n.toolbar-separator {\r\n color: var(--editor-muted);\r\n font-size: 18px;\r\n line-height: 1;\r\n opacity: 0.4;\r\n user-select: none;\r\n align-self: center;\r\n}\r\n\r\n.toolbar-btn {\r\n border: 1px solid var(--editor-btn-border);\r\n background: var(--editor-btn-bg);\r\n color: var(--editor-text);\r\n padding: 8px 12px;\r\n border-radius: 2px;\r\n cursor: pointer;\r\n font-size: 13px;\r\n transition: all 0.15s ease;\r\n}\r\n\r\n.toolbar-btn:hover {\r\n border-color: var(--editor-btn-hover);\r\n transform: translateY(-1px);\r\n}\r\n\r\n.toolbar-btn.active {\r\n border-color: var(--editor-btn-hover);\r\n box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.18);\r\n}\r\n\r\n.toolbar-btn.danger {\r\n border-color: rgba(248, 113, 113, 0.45);\r\n color: #fecaca;\r\n}\r\n\r\n.toolbar-label {\r\n display: flex;\r\n align-items: center;\r\n gap: 6px;\r\n font-size: 12px;\r\n color: var(--editor-muted);\r\n}\r\n\r\n.toolbar-select {\r\n background: var(--editor-panel);\r\n color: var(--editor-text);\r\n border: 1px solid var(--editor-btn-border);\r\n border-radius: 2px;\r\n padding: 6px 10px;\r\n}\r\n\r\n.toolbar-input {\r\n background: var(--editor-panel);\r\n color: var(--editor-text);\r\n border: 1px solid var(--editor-btn-border);\r\n border-radius: 2px;\r\n padding: 6px 10px;\r\n font-size: 13px;\r\n}\r\n\r\n.align-buttons {\r\n display: flex;\r\n gap: 4px;\r\n}\r\n\r\n.toolbar-btn-small {\r\n padding: 6px 8px;\r\n min-width: 32px;\r\n}\r\n\r\n.color-label {\r\n gap: 10px;\r\n}\r\n\r\n.toolbar-color {\r\n width: 34px;\r\n height: 30px;\r\n border: none;\r\n padding: 0;\r\n background: transparent;\r\n cursor: pointer;\r\n}\r\n\r\n.toggle-row {\r\n display: flex;\r\n gap: 8px;\r\n align-items: center;\r\n font-size: 12px;\r\n color: var(--editor-muted);\r\n}\r\n\r\n.editor-area {\r\n background: var(--editor-bg);\r\n border: 1px solid var(--editor-border);\r\n border-radius: 2px;\r\n padding: 10px;\r\n min-height: 520px;\r\n grid-column: 1 / -1;\r\n}\r\n\r\n.editor-surface {\r\n min-height: 460px;\r\n outline: none;\r\n color: var(--editor-text);\r\n font-size: 16px;\r\n line-height: 1.7;\r\n}\r\n\r\n/* visual hint when editor is disabled/read-only */\r\n.editor-surface.disabled {\r\n opacity: 0.65;\r\n cursor: not-allowed;\r\n}\r\n\r\n.editor-surface h1,\r\n.editor-surface h2,\r\n.editor-surface h3 {\r\n /* margin-top: 1.4em; */\r\n}\r\n\r\n/* Ensure list markers are properly indented and aligned inside the editor surface.\r\n This prevents numbers from appearing flush left or overlapping the editor gutter. */\r\n.editor-surface ol,\r\n.editor-surface ul {\r\n margin: 0 0 1em 1.6rem; /* space before list content */\r\n padding-left: 1.1rem; /* keeps marker inside expected content area */\r\n list-style-position: outside;\r\n}\r\n\r\n.editor-surface li {\r\n margin: 0.25em 0; /* small vertical spacing between items */\r\n padding-left: 0; /* do not add extra padding to list items */\r\n}\r\n\r\n.editor-surface .anchor-marker {\r\n display: inline-block;\r\n background: var(--editor-btn-bg);\r\n color: var(--editor-muted);\r\n border: 1px dashed var(--editor-btn-border);\r\n padding: 2px 6px;\r\n border-radius: 3px;\r\n font-size: 11px;\r\n margin: 0 4px;\r\n cursor: pointer;\r\n user-select: none;\r\n}\r\n\r\n.editor-surface .anchor-marker:hover {\r\n background: var(--editor-btn-hover);\r\n color: var(--editor-text);\r\n}\r\n\r\n.editor-surface .has-tooltip {\r\n border-bottom: 1px dotted var(--editor-muted);\r\n cursor: help;\r\n position: relative;\r\n}\r\n\r\n.editor-surface .has-tooltip:hover {\r\n border-bottom-color: var(--editor-btn-hover);\r\n}\r\n\r\n.editor-surface a {\r\n color: var(--editor-btn-hover);\r\n text-decoration: underline;\r\n cursor: pointer;\r\n transition: opacity 0.2s ease;\r\n position: relative;\r\n}\r\n\r\n.editor-surface a:hover {\r\n opacity: 2;\r\n}\r\n\r\n.editor-surface a::after {\r\n content: attr(data-key-hint);\r\n position: absolute;\r\n bottom: 100%;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n background: #000;\r\n color: #fff;\r\n padding: 8px 12px;\r\n border-radius: 4px;\r\n font-size: 13px;\r\n font-weight: 500;\r\n white-space: nowrap;\r\n opacity: 0;\r\n pointer-events: none;\r\n transition: opacity 0.2s ease;\r\n margin-bottom: 8px;\r\n border: none;\r\n z-index: 100;\r\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);\r\n}\r\n\r\n.editor-surface a:hover::after {\r\n opacity: 1;\r\n}\r\n\r\n.editor-footer {\r\n grid-column: 1 / 2;\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n padding: 12px 6px 0;\r\n color: var(--editor-muted);\r\n font-size: 12px;\r\n}\r\n\r\n.editor-root.no-preview .editor-footer {\r\n grid-column: 1 / -1;\r\n}\r\n\r\n.editor-root.show-preview .editor-footer {\r\n grid-column: 1 / 2;\r\n grid-row: 3 / 4;\r\n}\r\n\r\n.editor-root.show-preview .editor-area {\r\n grid-column: 1 / 2;\r\n grid-row: 2 / 3;\r\n}\r\n\r\n.editor-root.show-preview .editor-preview {\r\n grid-column: 2 / 3;\r\n grid-row: 2 / 4;\r\n}\r\n\r\n.footer-stats {\r\n display: flex;\r\n gap: 16px;\r\n}\r\n\r\n.editor-preview {\r\n grid-column: 2 / 3;\r\n grid-row: 2 / 4;\r\n background: var(--editor-bg);\r\n border: 1px solid var(--editor-border);\r\n border-radius: 2px;\r\n padding: 10px;\r\n display: flex;\r\n flex-direction: column;\r\n min-height: 520px;\r\n}\r\n\r\n.preview-header {\r\n font-size: 13px;\r\n color: var(--editor-muted);\r\n margin-bottom: 12px;\r\n}\r\n\r\n.preview-code {\r\n flex: 1;\r\n margin: 0;\r\n font-family: \"JetBrains Mono\", \"Fira Code\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,\r\n \"Liberation Mono\", \"Courier New\", monospace;\r\n font-size: 12px;\r\n color: var(--editor-text);\r\n background: var(--editor-code-bg);\r\n padding: 12px;\r\n border-radius: 2px;\r\n overflow: auto;\r\n white-space: pre-wrap;\r\n word-break: break-all;\r\n}\r\n\r\n.code-block {\r\n border: 1px solid rgba(15, 23, 42, 0.12);\r\n border-radius: 2px;\r\n overflow: hidden;\r\n background: #0b1220;\r\n color: #e2e8f0;\r\n}\r\n\r\n.code-block-light {\r\n background: #f8fafc;\r\n color: #0f172a;\r\n}\r\n\r\n.code-block-toolbar {\r\n display: flex;\r\n gap: 12px;\r\n padding: 10px 12px;\r\n border-bottom: 1px solid rgba(148, 163, 184, 0.2);\r\n background: rgba(15, 23, 42, 0.6);\r\n}\r\n\r\n.code-block-light .code-block-toolbar {\r\n background: rgba(226, 232, 240, 0.9);\r\n}\r\n\r\n.code-block-label {\r\n display: flex;\r\n align-items: center;\r\n gap: 8px;\r\n font-size: 12px;\r\n}\r\n\r\n.code-block-select {\r\n border: 1px solid rgba(148, 163, 184, 0.4);\r\n border-radius: 2px;\r\n padding: 4px 8px;\r\n background: rgba(15, 23, 42, 0.7);\r\n color: inherit;\r\n min-width: 140px;\r\n}\r\n\r\n.code-block-select option {\r\n color: inherit;\r\n background: inherit;\r\n}\r\n\r\n.code-block-light .code-block-select {\r\n background: #ffffff;\r\n color: #0f172a;\r\n}\r\n\r\n.code-block-area {\r\n width: 100%;\r\n min-height: 180px;\r\n padding: 12px;\r\n border: none;\r\n background: transparent;\r\n color: inherit;\r\n font-family: \"JetBrains Mono\", \"Fira Code\", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,\r\n \"Liberation Mono\", \"Courier New\", monospace;\r\n font-size: 13px;\r\n line-height: 1.5;\r\n resize: vertical;\r\n}\r\n\r\n.code-block-area:focus {\r\n outline: none;\r\n}\r\n\r\n.modal-backdrop {\r\n position: fixed;\r\n inset: 0;\r\n background: rgba(15, 23, 42, 0.6);\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n z-index: 50000;\r\n padding: 24px;\r\n}\r\n\r\n.modal {\r\n width: 720px;\r\n max-width: 100%;\r\n background: var(--editor-panel);\r\n border: 1px solid var(--editor-border);\r\n border-radius: 2px;\r\n padding: 16px;\r\n color: var(--editor-text);\r\n box-shadow: 0 16px 40px rgba(0, 0, 0, 0.3);\r\n}\r\n\r\n.modal-header {\r\n font-size: 16px;\r\n font-weight: 600;\r\n margin-bottom: 12px;\r\n}\r\n\r\n.modal-actions {\r\n display: flex;\r\n justify-content: flex-end;\r\n gap: 10px;\r\n margin-top: 12px;\r\n}\r\n\r\n.code-block-shell {\r\n padding: 12px;\r\n border-radius: 2px;\r\n border: 1px solid rgba(148, 163, 184, 0.2);\r\n background: rgba(15, 23, 42, 0.85);\r\n color: #e2e8f0;\r\n overflow: auto;\r\n}\r\n\r\n.code-block-shell[data-theme=\"light\"] {\r\n background: rgba(248, 250, 252, 0.95);\r\n color: #0f172a;\r\n}\r\n\r\n/* Language-specific styling (basic) */\r\n.code-block-shell code.language-javascript {\r\n color: #f8fafc;\r\n}\r\n\r\n.code-block-shell[data-theme=\"light\"] code.language-javascript {\r\n color: #0f172a;\r\n}\r\n\r\n@media (max-width: 1024px) {\r\n .editor-root {\r\n grid-template-columns: 1fr;\r\n }\r\n\r\n .editor-preview {\r\n grid-column: 1 / -1;\r\n grid-row: auto;\r\n }\r\n\r\n .editor-footer {\r\n grid-column: 1 / -1;\r\n }\r\n}\r\n"]}
package/dist/index.mjs CHANGED
@@ -417,6 +417,7 @@ function Editor({
417
417
  showLiveHtml = true,
418
418
  showStats = true,
419
419
  showCopyHtml = true,
420
+ disabled = false,
420
421
  onChange = () => {},
421
422
  initialHtml = "",
422
423
  t
@@ -498,6 +499,21 @@ function Editor({
498
499
  setCodeTheme(theme);
499
500
  }, [theme]);
500
501
 
502
+ // When `disabled` changes, update editor surface and toolbar controls (DOM-level guard)
503
+ useEffect(() => {
504
+ if (editorRef.current) {
505
+ editorRef.current.contentEditable = !disabled;
506
+ editorRef.current.setAttribute('aria-disabled', String(!!disabled));
507
+ }
508
+ const root = editorRef.current?.closest('.editor-root');
509
+ if (root) {
510
+ const controls = root.querySelectorAll('button, select, input, textarea');
511
+ controls.forEach(el => {
512
+ if (disabled) el.setAttribute('disabled', '');else el.removeAttribute('disabled');
513
+ });
514
+ }
515
+ }, [disabled]);
516
+
501
517
  // NOTE: initialization for `initialHtml` / demo text moved below `updateToolbarState` declaration to avoid referencing
502
518
  // `updateToolbarState` before it is defined. See the effect inserted later in the file.
503
519
 
@@ -654,12 +670,14 @@ function Editor({
654
670
  type: "button",
655
671
  className: "toolbar-btn",
656
672
  onClick: () => exec$1("undo"),
657
- title: translate("Undo")
673
+ title: translate("Undo"),
674
+ disabled: disabled
658
675
  }, "\u21B6"), /*#__PURE__*/React.createElement("button", {
659
676
  type: "button",
660
677
  className: "toolbar-btn",
661
678
  onClick: () => exec$1("redo"),
662
- title: translate("Redo")
679
+ title: translate("Redo"),
680
+ disabled: disabled
663
681
  }, "\u21B7")), /*#__PURE__*/React.createElement("span", {
664
682
  className: "toolbar-separator"
665
683
  }, "|")), activeCommands.length > 0 && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
@@ -671,7 +689,8 @@ function Editor({
671
689
  onMouseDown: event => event.preventDefault(),
672
690
  onClick: () => exec$1(item.cmd),
673
691
  title: translate(item.label),
674
- "aria-pressed": activeToolMap[item.cmd] || false
692
+ "aria-pressed": activeToolMap[item.cmd] || false,
693
+ disabled: disabled
675
694
  }, item.icon))), /*#__PURE__*/React.createElement("span", {
676
695
  className: "toolbar-separator"
677
696
  }, "|")), (showHeading || showFontSize || showColor) && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
@@ -844,7 +863,8 @@ function Editor({
844
863
  }, /*#__PURE__*/React.createElement("input", {
845
864
  type: "checkbox",
846
865
  checked: plainPaste,
847
- onChange: event => setPlainPaste(event.target.checked)
866
+ onChange: event => setPlainPaste(event.target.checked),
867
+ disabled: disabled
848
868
  }), translate("Paste as plain text"))), showFullscreen && /*#__PURE__*/React.createElement("div", {
849
869
  className: "toolbar-group"
850
870
  }, /*#__PURE__*/React.createElement("button", {
@@ -862,6 +882,7 @@ function Editor({
862
882
  onPaste: onPaste$1,
863
883
  onClick: onEditorClick,
864
884
  onKeyDown: e => {
885
+ if (disabled) return;
865
886
  // Tab => indent, Shift+Tab => outdent (do not intercept inside code/pre)
866
887
  if (e.key === 'Tab') {
867
888
  const sel = document.getSelection();
@@ -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: \"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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"}
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\tdisabled = false,\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// When `disabled` changes, update editor surface and toolbar controls (DOM-level guard)\r\n\tuseEffect(() => {\r\n\t\tif (editorRef.current) {\r\n\t\t\teditorRef.current.contentEditable = !disabled;\r\n\t\t\teditorRef.current.setAttribute('aria-disabled', String(!!disabled));\r\n\t\t}\r\n\t\tconst root = editorRef.current?.closest('.editor-root');\r\n\t\tif (root) {\r\n\t\t\tconst controls = root.querySelectorAll('button, select, input, textarea');\r\n\t\t\tcontrols.forEach((el) => {\r\n\t\t\t\tif (disabled) el.setAttribute('disabled', '');\r\n\t\t\t\telse el.removeAttribute('disabled');\r\n\t\t\t});\r\n\t\t}\r\n\t}, [disabled]);\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\")} disabled={disabled}\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\")} disabled={disabled}\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} disabled={disabled}\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)} disabled={disabled}\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) => { if (disabled) return;\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","disabled","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","contentEditable","setAttribute","String","root","controls","stats","trim","split","chars","applyHeadingFormat","applyFontSizeFormat","applyCustomFontSizeFormat","applyTextColorFormat","applyBackgroundColorFormat","resetColorsFormat","insertCodeBlockContent","insertLinkContent","insertTooltipContent","insertAnchorContent","insertHrContent","insertImageContent","insertVideoContent","toggleFullscreen","removeFormat","clearAllContent","handleInput","links","link","getAttribute","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","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.21",
3
+ "version": "1.0.22",
4
4
  "description": "Texteditor table UI",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.mjs",