trotl-texteditor 1.0.21 → 1.0.23

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,8 @@ function Editor({
421
421
  showLiveHtml = true,
422
422
  showStats = true,
423
423
  showCopyHtml = true,
424
+ disabled = false,
425
+ readOnly = false,
424
426
  onChange = () => {},
425
427
  initialHtml = "",
426
428
  t
@@ -502,6 +504,24 @@ function Editor({
502
504
  setCodeTheme(theme);
503
505
  }, [theme]);
504
506
 
507
+ // When `disabled` or `readOnly` changes, update editor surface and toolbar controls (DOM-level guard)
508
+ React.useEffect(() => {
509
+ const isReadOnly = !!readOnly;
510
+ const isDisabled = !!disabled;
511
+ const editable = !(isDisabled || isReadOnly);
512
+ if (editorRef.current) {
513
+ editorRef.current.contentEditable = editable;
514
+ editorRef.current.setAttribute('aria-disabled', String(isDisabled || isReadOnly));
515
+ }
516
+ const root = editorRef.current?.closest('.editor-root');
517
+ if (root) {
518
+ const controls = root.querySelectorAll('button, select, input, textarea');
519
+ controls.forEach(el => {
520
+ if (isDisabled || isReadOnly) el.setAttribute('disabled', '');else el.removeAttribute('disabled');
521
+ });
522
+ }
523
+ }, [disabled, readOnly]);
524
+
505
525
  // NOTE: initialization for `initialHtml` / demo text moved below `updateToolbarState` declaration to avoid referencing
506
526
  // `updateToolbarState` before it is defined. See the effect inserted later in the file.
507
527
 
@@ -513,6 +533,10 @@ function Editor({
513
533
  chars: text.length
514
534
  };
515
535
  }, [html]);
536
+
537
+ // computed flags accounting for readOnly state
538
+ const effectiveLiveHtml = showLiveHtml && !readOnly;
539
+ const showFooter = !readOnly && (showStats || showCopyHtml);
516
540
  const exec$1 = (cmd, value = null) => {
517
541
  exec(editorRef, cmd, value, setHtml, onChange, updateToolbarState);
518
542
  };
@@ -648,9 +672,9 @@ function Editor({
648
672
  };
649
673
  const activeCommands = React.useMemo(() => COMMANDS.filter(item => tools.includes(item.cmd)), [tools]);
650
674
  return /*#__PURE__*/React.createElement("section", {
651
- className: `editor-root theme-${theme}${showLiveHtml ? " show-preview" : " no-preview"}${isFullscreen ? " fullscreen" : ""}`,
675
+ className: `editor-root theme-${theme}${effectiveLiveHtml ? " show-preview" : " no-preview"}${isFullscreen ? " fullscreen" : ""}`,
652
676
  "data-theme": theme
653
- }, /*#__PURE__*/React.createElement("div", {
677
+ }, !readOnly && /*#__PURE__*/React.createElement("div", {
654
678
  className: "toolbar"
655
679
  }, showUndoRedo && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
656
680
  className: "toolbar-group"
@@ -658,12 +682,14 @@ function Editor({
658
682
  type: "button",
659
683
  className: "toolbar-btn",
660
684
  onClick: () => exec$1("undo"),
661
- title: translate("Undo")
685
+ title: translate("Undo"),
686
+ disabled: disabled
662
687
  }, "\u21B6"), /*#__PURE__*/React.createElement("button", {
663
688
  type: "button",
664
689
  className: "toolbar-btn",
665
690
  onClick: () => exec$1("redo"),
666
- title: translate("Redo")
691
+ title: translate("Redo"),
692
+ disabled: disabled
667
693
  }, "\u21B7")), /*#__PURE__*/React.createElement("span", {
668
694
  className: "toolbar-separator"
669
695
  }, "|")), activeCommands.length > 0 && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
@@ -675,7 +701,8 @@ function Editor({
675
701
  onMouseDown: event => event.preventDefault(),
676
702
  onClick: () => exec$1(item.cmd),
677
703
  title: translate(item.label),
678
- "aria-pressed": activeToolMap[item.cmd] || false
704
+ "aria-pressed": activeToolMap[item.cmd] || false,
705
+ disabled: disabled
679
706
  }, item.icon))), /*#__PURE__*/React.createElement("span", {
680
707
  className: "toolbar-separator"
681
708
  }, "|")), (showHeading || showFontSize || showColor) && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
@@ -848,7 +875,8 @@ function Editor({
848
875
  }, /*#__PURE__*/React.createElement("input", {
849
876
  type: "checkbox",
850
877
  checked: plainPaste,
851
- onChange: event => setPlainPaste(event.target.checked)
878
+ onChange: event => setPlainPaste(event.target.checked),
879
+ disabled: disabled || readOnly
852
880
  }), translate("Paste as plain text"))), showFullscreen && /*#__PURE__*/React.createElement("div", {
853
881
  className: "toolbar-group"
854
882
  }, /*#__PURE__*/React.createElement("button", {
@@ -861,11 +889,19 @@ function Editor({
861
889
  }, /*#__PURE__*/React.createElement("div", {
862
890
  ref: editorRef,
863
891
  className: "editor-surface",
864
- contentEditable: true,
865
- onInput: onInput$1,
866
- onPaste: onPaste$1,
892
+ contentEditable: !disabled && !readOnly,
893
+ "aria-disabled": disabled || readOnly,
894
+ onInput: () => {
895
+ if (disabled || readOnly) return;
896
+ onInput$1();
897
+ },
898
+ onPaste: event => {
899
+ if (disabled || readOnly) return;
900
+ onPaste$1(event);
901
+ },
867
902
  onClick: onEditorClick,
868
903
  onKeyDown: e => {
904
+ if (disabled || readOnly) return;
869
905
  // Tab => indent, Shift+Tab => outdent (do not intercept inside code/pre)
870
906
  if (e.key === 'Tab') {
871
907
  const sel = document.getSelection();
@@ -879,7 +915,7 @@ function Editor({
879
915
  onMouseUp: updateToolbarState,
880
916
  suppressContentEditableWarning: true,
881
917
  spellCheck: true
882
- })), (showStats || showCopyHtml) && /*#__PURE__*/React.createElement("footer", {
918
+ })), showFooter && /*#__PURE__*/React.createElement("footer", {
883
919
  className: "editor-footer"
884
920
  }, showStats && /*#__PURE__*/React.createElement("div", {
885
921
  className: "footer-stats"
@@ -888,8 +924,9 @@ function Editor({
888
924
  }, /*#__PURE__*/React.createElement("button", {
889
925
  type: "button",
890
926
  className: "toolbar-btn",
891
- onClick: exportHtml$1
892
- }, translate("Copy HTML")))), showLiveHtml && /*#__PURE__*/React.createElement("aside", {
927
+ onClick: exportHtml$1,
928
+ disabled: readOnly
929
+ }, translate("Copy HTML")))), effectiveLiveHtml && /*#__PURE__*/React.createElement("aside", {
893
930
  className: "editor-preview"
894
931
  }, /*#__PURE__*/React.createElement("pre", {
895
932
  className: "preview-code"
@@ -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\treadOnly = 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// When `disabled` or `readOnly` changes, update editor surface and toolbar controls (DOM-level guard)\r\nuseEffect(() => {\r\n\tconst isReadOnly = !!readOnly;\r\n\tconst isDisabled = !!disabled;\r\n\tconst editable = !(isDisabled || isReadOnly);\r\n\tif (editorRef.current) {\r\n\t\teditorRef.current.contentEditable = editable;\r\n\t\teditorRef.current.setAttribute('aria-disabled', String(isDisabled || isReadOnly));\r\n\t}\r\n\tconst root = editorRef.current?.closest('.editor-root');\r\n\tif (root) {\r\n\t\tconst controls = root.querySelectorAll('button, select, input, textarea');\r\n\t\tcontrols.forEach((el) => {\r\n\t\t\tif (isDisabled || isReadOnly) el.setAttribute('disabled', '');\r\n\t\t\telse el.removeAttribute('disabled');\r\n\t\t});\r\n\t}\r\n}, [disabled, readOnly]);\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\t// computed flags accounting for readOnly state\r\n\tconst effectiveLiveHtml = showLiveHtml && !readOnly;\r\n\tconst showFooter = !readOnly && (showStats || showCopyHtml);\r\n\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}${effectiveLiveHtml ? \" show-preview\" : \" no-preview\"}${isFullscreen ? \" fullscreen\" : \"\"}`}\r\n\t\t\tdata-theme={theme}\r\n\t\t>\r\n\t\t\t{!readOnly && (\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 || readOnly}\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\t\t)}\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={!disabled && !readOnly} aria-disabled={disabled || readOnly}\r\n\t\t\t\t\tonInput={() => { if (disabled || readOnly) return; onInput(); }}\r\n\t\t\t\t\tonPaste={(event) => { if (disabled || readOnly) return; onPaste(event); }}\r\n\t\t\t\tonClick={onEditorClick}\r\n\t\t\t\tonKeyDown={(e) => { if (disabled || readOnly) 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{showFooter && (\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} disabled={readOnly}>\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{effectiveLiveHtml && (\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","readOnly","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","isReadOnly","isDisabled","editable","contentEditable","setAttribute","String","root","controls","stats","trim","split","chars","effectiveLiveHtml","showFooter","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 */