@aquera/nile-elements 0.1.67-beta-1.2 → 0.1.67-beta-1.3
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/demo/index.html +9 -9
- package/dist/index.js +31 -29
- package/dist/nile-rich-text-editor/nile-rich-text-editor.cjs.js +1 -1
- package/dist/nile-rich-text-editor/nile-rich-text-editor.cjs.js.map +1 -1
- package/dist/nile-rich-text-editor/nile-rich-text-editor.css.cjs.js +1 -1
- package/dist/nile-rich-text-editor/nile-rich-text-editor.css.cjs.js.map +1 -1
- package/dist/nile-rich-text-editor/nile-rich-text-editor.css.esm.js +3 -1
- package/dist/nile-rich-text-editor/nile-rich-text-editor.esm.js +1 -1
- package/dist/nile-rich-text-editor/utils.cjs.js +1 -1
- package/dist/nile-rich-text-editor/utils.cjs.js.map +1 -1
- package/dist/nile-rich-text-editor/utils.esm.js +1 -1
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.css.js +3 -1
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.css.js.map +1 -1
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.d.ts +1 -0
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.js +64 -8
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.js.map +1 -1
- package/dist/src/nile-rich-text-editor/utils.d.ts +2 -2
- package/dist/src/nile-rich-text-editor/utils.js +181 -27
- package/dist/src/nile-rich-text-editor/utils.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/nile-rich-text-editor/nile-rich-text-editor.css.ts +3 -1
- package/src/nile-rich-text-editor/nile-rich-text-editor.ts +89 -11
- package/src/nile-rich-text-editor/utils.ts +248 -26
- package/vscode-html-custom-data.json +1 -1
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"utils.cjs.js","sources":["../../../src/nile-rich-text-editor/utils.ts"],"sourcesContent":["// src/nile-rich-text-editor/utils.ts\nexport function closestBlock(node: Node | null, root: HTMLElement): HTMLElement | null {\n while (node && node !== root) {\n if (node instanceof HTMLElement) {\n const display = getComputedStyle(node).display;\n if (node.tagName.match(/^(P|DIV|H1|H2|H3|H4|H5|H6|LI)$/) || display === 'block' || display === 'list-item') {\n return node;\n }\n }\n node = node?.parentNode || null;\n }\n return root;\n }\n \n export function nearestElement(n: Node | null): HTMLElement | null {\n while (n && !(n instanceof HTMLElement)) n = n.parentNode as Node | null;\n return n as HTMLElement | null;\n }\n \n export function rgbToHex(rgb: string): string {\n const m = rgb.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/i);\n if (!m) return '#000000';\n const r = Number(m[1]).toString(16).padStart(2,'0');\n const g = Number(m[2]).toString(16).padStart(2,'0');\n const b = Number(m[3]).toString(16).padStart(2,'0');\n return `#${r}${g}${b}`;\n }\n \n export function unwrap(node: HTMLElement) {\n const p = node.parentNode; if (!p) return;\n while (node.firstChild) p.insertBefore(node.firstChild, node);\n p.removeChild(node);\n }\n \n export function surroundInline(range: Range, tag: string, attrs?: Record<string,string>) {\n const wrap = document.createElement(tag);\n if (attrs) Object.entries(attrs).forEach(([k,v]) => wrap.setAttribute(k, v));\n try { range.surroundContents(wrap); }\n catch {\n const frag = range.extractContents();\n wrap.appendChild(frag);\n range.insertNode(wrap);\n }\n }\n \n export function toggleInlineTag(root: HTMLElement, tag: 'strong'|'em'|'u'|'span', attrs?: Record<string,string>) {\n const sel = document.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n \n if (range.collapsed) {\n const elm = document.createElement(tag);\n if (attrs) Object.entries(attrs).forEach(([k,v]) => elm.setAttribute(k,v));\n elm.appendChild(document.createTextNode('\\u200b'));\n range.insertNode(elm);\n const r = document.createRange();\n r.setStart(elm.firstChild!, 1);\n r.collapse(true);\n sel.removeAllRanges(); sel.addRange(r);\n return;\n }\n \n let n: Node | null = range.startContainer;\n let target: HTMLElement | null = null;\n while (n && n !== root) {\n if (n instanceof HTMLElement && n.tagName.toLowerCase() === tag) { target = n; break; }\n n = n.parentNode;\n }\n if (target) unwrap(target); else surroundInline(range, tag, attrs);\n }\n \n export function setBlockTag(root: HTMLElement, tag: 'p'|'h1'|'h2'|'h3') {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n const block = closestBlock(range.startContainer, root); if (!block) return;\n if (block.tagName.toLowerCase() === tag) return;\n const nb = document.createElement(tag);\n while (block.firstChild) nb.appendChild(block.firstChild);\n block.replaceWith(nb);\n const r = document.createRange(); r.selectNodeContents(nb); r.collapse(true);\n sel.removeAllRanges(); sel.addRange(r);\n }\n \n export function setAlignment(root: HTMLElement, align: 'left'|'center'|'right'|'justify') {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n const block = closestBlock(range.startContainer, root); if (!block) return;\n block.style.textAlign = align === 'justify' ? 'justify' : align;\n }\n \n export function setFontFamily(root: HTMLElement, family: string) {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n if (range.collapsed) {\n const span = document.createElement('span');\n span.style.fontFamily = family;\n span.appendChild(document.createTextNode('\\u200b'));\n range.insertNode(span);\n const r = document.createRange(); r.setStart(span.firstChild!, 1); r.collapse(true);\n sel.removeAllRanges(); sel.addRange(r);\n return;\n }\n surroundInline(range, 'span', { style: `font-family:${family}` });\n }\n\nexport function setBackColor(rootEl: HTMLElement, color: string) {\n const sel = window.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n if (!rootEl.contains(range.commonAncestorContainer) || range.collapsed) return;\n\n const span = document.createElement('span');\n span.style.backgroundColor = color;\n span.appendChild(range.extractContents());\n range.insertNode(span);\n const after = document.createRange();\n after.setStartAfter(span);\n after.collapse(true);\n sel.removeAllRanges();\n sel.addRange(after);\n}\n\n \n export function setForeColor(root: HTMLElement, color: string) {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n if (range.collapsed) {\n const span = document.createElement('span');\n span.style.color = color;\n span.appendChild(document.createTextNode('\\u200b'));\n range.insertNode(span);\n const r = document.createRange(); r.setStart(span.firstChild!, 1); r.collapse(true);\n sel.removeAllRanges(); sel.addRange(r);\n return;\n }\n surroundInline(range, 'span', { style: `color:${color}` });\n }\n \n export function toggleList(root: HTMLElement, kind: 'ul'|'ol') {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n const block = closestBlock(range.startContainer, root); if (!block) return;\n \n let li = block.closest('li');\n if (li) {\n const list = li.closest('ul,ol') as HTMLElement | null;\n if (!list) return;\n if (list.tagName.toLowerCase() === kind) {\n const parent = list.parentElement!;\n const frag = document.createDocumentFragment();\n for (const child of Array.from(list.children)) {\n if (child.tagName.toLowerCase() === 'li') {\n const p = document.createElement('p');\n while (child.firstChild) p.appendChild(child.firstChild);\n frag.appendChild(p);\n }\n }\n parent.replaceChild(frag, list);\n } else {\n const newList = document.createElement(kind);\n while (list.firstChild) newList.appendChild(list.firstChild);\n list.replaceWith(newList);\n }\n return;\n }\n \n const list = document.createElement(kind);\n const item = document.createElement('li'); list.appendChild(item);\n while (block.firstChild) item.appendChild(block.firstChild);\n block.replaceWith(list);\n }\n \n export function insertOrEditLink(root: HTMLElement, href?: string) {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n \n let n: Node | null = range.startContainer;\n let a: HTMLAnchorElement | null = null;\n while (n && n !== root) { if (n instanceof HTMLAnchorElement) { a = n; break; } n = n.parentNode; }\n \n const url = href ?? (typeof window !== 'undefined' ? window.prompt('Enter URL', a?.href || 'https://') || '' : '');\n if (!url) return;\n \n if (a) { a.href = url; return; }\n \n if (range.collapsed) {\n const link = document.createElement('a'); link.href = url; link.textContent = url; range.insertNode(link);\n const r = document.createRange(); r.setStartAfter(link); r.collapse(true);\n sel.removeAllRanges(); sel.addRange(r);\n return;\n }\n \n const link = document.createElement('a'); link.href = url;\n try { range.surroundContents(link); }\n catch { const frag = range.extractContents(); link.appendChild(frag); range.insertNode(link); }\n }\n "],"names":["closestBlock","node","root","_n","HTMLElement","display","getComputedStyle","tagName","match","parentNode","nearestElement","n","rgbToHex","rgb","m","concat","Number","toString","padStart","surroundInline","range","tag","attrs","wrap","document","createElement","Object","entries","forEach","_ref","_ref2","_slicedToArray","k","v","setAttribute","surroundContents","_unused","frag","extractContents","appendChild","insertNode","toggleInlineTag","sel","getSelection","rangeCount","getRangeAt","collapsed","elm","_ref3","_ref4","createTextNode","r","createRange","setStart","firstChild","collapse","removeAllRanges","addRange","startContainer","target","toLowerCase","p","insertBefore","removeChild","unwrap","setBlockTag","block","nb","replaceWith","selectNodeContents","setAlignment","align","style","textAlign","setFontFamily","family","span","fontFamily","setBackColor","rootEl","color","window","contains","commonAncestorContainer","backgroundColor","after","setStartAfter","setForeColor","insertOrEditLink","href","a","HTMLAnchorElement","url","prompt","link","textContent","_unused2"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"utils.cjs.js","sources":["../../../src/nile-rich-text-editor/utils.ts"],"sourcesContent":["// src/nile-rich-text-editor/utils.ts\nexport function closestBlock(node: Node | null, root: HTMLElement): HTMLElement | null {\n while (node && node !== root) {\n if (node instanceof HTMLElement) {\n const display = getComputedStyle(node).display;\n if (node.tagName.match(/^(P|DIV|H1|H2|H3|H4|H5|H6|LI)$/) || display === 'block' || display === 'list-item') {\n return node;\n }\n }\n node = node?.parentNode || null;\n }\n return root;\n }\n \n export function nearestElement(n: Node | null): HTMLElement | null {\n while (n && !(n instanceof HTMLElement)) n = n.parentNode as Node | null;\n return n as HTMLElement | null;\n }\n \n export function rgbToHex(rgb: string): string {\n const m = rgb.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/i);\n if (!m) return '#000000';\n const r = Number(m[1]).toString(16).padStart(2,'0');\n const g = Number(m[2]).toString(16).padStart(2,'0');\n const b = Number(m[3]).toString(16).padStart(2,'0');\n return `#${r}${g}${b}`;\n }\n \n export function unwrap(node: HTMLElement) {\n const p = node.parentNode; if (!p) return;\n while (node.firstChild) p.insertBefore(node.firstChild, node);\n p.removeChild(node);\n }\n \n export function surroundInline(range: Range, tag: string, attrs?: Record<string,string>) {\n const wrap = document.createElement(tag);\n if (attrs) Object.entries(attrs).forEach(([k,v]) => wrap.setAttribute(k, v));\n try { range.surroundContents(wrap); }\n catch {\n const frag = range.extractContents();\n wrap.appendChild(frag);\n range.insertNode(wrap);\n }\n }\n \n export function toggleInlineTag(root: HTMLElement, tag: 'strong'|'em'|'u'|'span', attrs?: Record<string,string>) {\n const sel = document.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n \n if (range.collapsed) {\n const elm = document.createElement(tag);\n if (attrs) Object.entries(attrs).forEach(([k,v]) => elm.setAttribute(k,v));\n elm.appendChild(document.createTextNode('\\u200b'));\n range.insertNode(elm);\n const r = document.createRange();\n r.setStart(elm.firstChild!, 1);\n r.collapse(true);\n sel.removeAllRanges(); sel.addRange(r);\n return;\n }\n \n let n: Node | null = range.startContainer;\n let target: HTMLElement | null = null;\n while (n && n !== root) {\n if (n instanceof HTMLElement && n.tagName.toLowerCase() === tag) { target = n; break; }\n n = n.parentNode;\n }\n if (target) unwrap(target); else surroundInline(range, tag, attrs);\n }\n \n export function setBlockTag(root: HTMLElement, tag: 'p'|'h1'|'h2'|'h3') {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n const block = closestBlock(range.startContainer, root); if (!block) return;\n if (block.tagName.toLowerCase() === tag) return;\n const nb = document.createElement(tag);\n while (block.firstChild) nb.appendChild(block.firstChild);\n block.replaceWith(nb);\n const r = document.createRange(); r.selectNodeContents(nb); r.collapse(true);\n sel.removeAllRanges(); sel.addRange(r);\n }\n \n export function setAlignment(root: HTMLElement, align: 'left'|'center'|'right'|'justify') {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n const block = closestBlock(range.startContainer, root); if (!block) return;\n block.style.textAlign = align === 'justify' ? 'justify' : align;\n }\n \n export function setFontFamily(root: HTMLElement, family: string) {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n if (range.collapsed) {\n const span = document.createElement('span');\n span.style.fontFamily = family;\n span.appendChild(document.createTextNode('\\u200b'));\n range.insertNode(span);\n const r = document.createRange(); r.setStart(span.firstChild!, 1); r.collapse(true);\n sel.removeAllRanges(); sel.addRange(r);\n return;\n }\n surroundInline(range, 'span', { style: `font-family:${family}` });\n }\n\n \nfunction enclosingStyledSpan(\n editor: HTMLElement,\n node: Node | null,\n dataAttr: 'data-rte-color' | 'data-rte-bg'\n): HTMLSpanElement | null {\n while (node && node !== editor) {\n if (node instanceof HTMLSpanElement && node.hasAttribute(dataAttr)) {\n return node;\n }\n node = node.parentNode;\n }\n return null;\n}\n\n \nfunction applyInlineStyle(\n editor: HTMLElement,\n cssProp: 'color' | 'backgroundColor',\n value: string,\n dataAttr: 'data-rte-color' | 'data-rte-bg'\n) {\n const sel = window.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const r0 = sel.getRangeAt(0);\n if (!editor.contains(r0.commonAncestorContainer)) return;\n\n const range = r0.cloneRange();\n\n \n if (range.collapsed) {\n const enclosing = enclosingStyledSpan(editor, range.startContainer, dataAttr);\n if (enclosing) {\n (enclosing.style as any)[cssProp] = value;\n mergeAdjacentStyledSpans(editor, dataAttr, cssProp);\n return;\n }\n\n const s = document.createElement('span');\n s.setAttribute(dataAttr, '1');\n (s.style as any)[cssProp] = value;\n s.appendChild(document.createTextNode('\\u200B')); \n range.insertNode(s);\n\n \n const caret = document.createRange();\n caret.setStart(s.firstChild!, 1);\n caret.collapse(true);\n sel.removeAllRanges(); sel.addRange(caret);\n\n mergeAdjacentStyledSpans(editor, dataAttr, cssProp);\n return;\n }\n\n \n const leftEdge = enclosingStyledSpan(editor, range.startContainer, dataAttr);\n const rightEdge = enclosingStyledSpan(editor, range.endContainer, dataAttr);\n if (leftEdge && leftEdge === rightEdge) {\n \n if (rangeCoversWholeNode(range, leftEdge)) {\n (leftEdge.style as any)[cssProp] = value;\n } else {\n \n const mid = splitAndRecolorWithinSpan(\n leftEdge,\n range,\n dataAttr,\n cssProp,\n value\n );\n \n \n const sel = window.getSelection();\n const r = document.createRange();\n r.selectNodeContents(mid);\n sel?.removeAllRanges();\n sel?.addRange(r);\n }\n mergeAdjacentStyledSpans(editor, dataAttr, cssProp);\n return;\n }\n\n \n const commonEl = (() => {\n let n: Node | null = range.commonAncestorContainer;\n while (n && !(n instanceof HTMLElement)) n = n.parentNode;\n return n as HTMLElement | null;\n })();\n\n const walker = document.createTreeWalker(\n commonEl || editor,\n NodeFilter.SHOW_TEXT,\n {\n acceptNode: (n) => {\n if (!n.nodeValue || !n.nodeValue.trim()) return NodeFilter.FILTER_REJECT;\n const nodeRange = document.createRange();\n nodeRange.selectNodeContents(n);\n const intersects =\n range.compareBoundaryPoints(Range.END_TO_START, nodeRange) < 0 &&\n range.compareBoundaryPoints(Range.START_TO_END, nodeRange) > 0;\n return intersects ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n }\n }\n );\n\n const toProcess: Text[] = [];\n let t: Node | null;\n while ((t = walker.nextNode())) toProcess.push(t as Text);\n\n toProcess.forEach((text) => {\n \n let start = 0, end = text.length;\n if (text === range.startContainer) start = range.startOffset;\n if (text === range.endContainer) end = range.endOffset;\n if (start > 0) text = text.splitText(start);\n if (end < text.length) text.splitText(end);\n\n // If this slice already sits in a styled span → update it, don’t nest.\n const existing = enclosingStyledSpan(editor, text, dataAttr);\n if (existing) {\n (existing.style as any)[cssProp] = value;\n return;\n }\n\n // Create a new, single-purpose span\n const span = document.createElement('span');\n span.setAttribute(dataAttr, '1');\n (span.style as any)[cssProp] = value;\n const parent = text.parentElement!;\n parent.replaceChild(span, text);\n span.appendChild(text);\n });\n\n mergeAdjacentStyledSpans(editor, dataAttr, cssProp);\n\n // restore selection\n sel.removeAllRanges(); sel.addRange(range);\n}\n\n // Is the range covering the entire node's contents?\nfunction rangeCoversWholeNode(range: Range, node: Node): boolean {\n const all = document.createRange();\n all.selectNodeContents(node);\n return (\n range.compareBoundaryPoints(Range.START_TO_START, all) <= 0 &&\n range.compareBoundaryPoints(Range.END_TO_END, all) >= 0\n );\n}\n\nfunction hasRangeContent(r: Range): boolean {\n if (r.collapsed) return false;\n const text = r.cloneContents().textContent || '';\n return text.length > 0;\n}\n\n// Split one styled span into [left][middle][right]; recolor only middle\nfunction splitAndRecolorWithinSpan(\n span: HTMLSpanElement,\n range: Range,\n dataAttr: 'data-rte-color' | 'data-rte-bg',\n cssProp: 'color' | 'backgroundColor',\n newValue: string\n): HTMLSpanElement {\n const oldValue = (span.style as any)[cssProp];\n\n const left = document.createRange();\n left.setStart(span, 0);\n left.setEnd(range.startContainer, range.startOffset);\n\n const right = document.createRange();\n right.setStart(range.endContainer, range.endOffset);\n right.setEnd(span, span.childNodes.length);\n\n // Build replacement fragment\n const frag = document.createDocumentFragment();\n\n // helper to make a styled clone shell\n const makeShell = (val: string) => {\n const s = document.createElement('span');\n s.setAttribute(dataAttr, '1');\n (s.style as any)[cssProp] = val;\n return s;\n };\n\n if (hasRangeContent(left)) {\n const sLeft = makeShell(oldValue);\n sLeft.appendChild(left.cloneContents());\n frag.appendChild(sLeft);\n }\n\n const mid = makeShell(newValue);\n mid.appendChild(range.cloneContents());\n frag.appendChild(mid);\n\n if (hasRangeContent(right)) {\n const sRight = makeShell(oldValue);\n sRight.appendChild(right.cloneContents());\n frag.appendChild(sRight);\n }\n\n // Replace original span\n span.replaceWith(frag);\n return mid; // return the middle span so caller can restore selection\n}\n\n\nfunction mergeAdjacentStyledSpans(\n root: HTMLElement,\n dataAttr: 'data-rte-color' | 'data-rte-bg',\n cssProp: 'color' | 'backgroundColor'\n) {\n const spans = Array.from(root.querySelectorAll<HTMLSpanElement>(`span[${dataAttr}]`));\n\n const valOf = (el: HTMLElement) => (el.style as any)[cssProp];\n\n spans.forEach((s) => {\n \n const nested = Array.from(s.querySelectorAll<HTMLSpanElement>(`span[${dataAttr}]`));\n nested.forEach((child) => {\n if (valOf(child) === valOf(s)) {\n while (child.firstChild) s.insertBefore(child.firstChild, child);\n child.remove();\n }\n });\n\n \n const prev = s.previousSibling;\n if (prev instanceof HTMLSpanElement &&\n prev.hasAttribute(dataAttr) &&\n valOf(prev) === valOf(s)) {\n while (s.firstChild) prev.appendChild(s.firstChild);\n s.remove();\n return; // s is gone, next checks not needed\n }\n\n // 3) Merge with next sibling if identical\n const next = s.nextSibling;\n if (next instanceof HTMLSpanElement &&\n next.hasAttribute(dataAttr) &&\n valOf(next) === valOf(s)) {\n while (next.firstChild) s.appendChild(next.firstChild);\n next.remove();\n }\n });\n}\n\n\nexport function setForeColor(editor: HTMLElement, hex: string) {\n applyInlineStyle(editor, 'color', hex, 'data-rte-color');\n}\nexport function setBackColor(editor: HTMLElement, hex: string) {\n applyInlineStyle(editor, 'backgroundColor', hex, 'data-rte-bg');\n}\n\n\n export function toggleList(root: HTMLElement, kind: 'ul'|'ol') {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n const block = closestBlock(range.startContainer, root); if (!block) return;\n \n let li = block.closest('li');\n if (li) {\n const list = li.closest('ul,ol') as HTMLElement | null;\n if (!list) return;\n if (list.tagName.toLowerCase() === kind) {\n const parent = list.parentElement!;\n const frag = document.createDocumentFragment();\n for (const child of Array.from(list.children)) {\n if (child.tagName.toLowerCase() === 'li') {\n const p = document.createElement('p');\n while (child.firstChild) p.appendChild(child.firstChild);\n frag.appendChild(p);\n }\n }\n parent.replaceChild(frag, list);\n } else {\n const newList = document.createElement(kind);\n while (list.firstChild) newList.appendChild(list.firstChild);\n list.replaceWith(newList);\n }\n return;\n }\n \n const list = document.createElement(kind);\n const item = document.createElement('li'); list.appendChild(item);\n while (block.firstChild) item.appendChild(block.firstChild);\n block.replaceWith(list);\n }\n \n export function insertOrEditLink(root: HTMLElement, href?: string) {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n \n let n: Node | null = range.startContainer;\n let a: HTMLAnchorElement | null = null;\n while (n && n !== root) { if (n instanceof HTMLAnchorElement) { a = n; break; } n = n.parentNode; }\n \n const url = href ?? (typeof window !== 'undefined' ? window.prompt('Enter URL', a?.href || 'https://') || '' : '');\n if (!url) return;\n \n if (a) { a.href = url; return; }\n \n if (range.collapsed) {\n const link = document.createElement('a'); link.href = url; link.textContent = url; range.insertNode(link);\n const r = document.createRange(); r.setStartAfter(link); r.collapse(true);\n sel.removeAllRanges(); sel.addRange(r);\n return;\n }\n \n const link = document.createElement('a'); link.href = url;\n try { range.surroundContents(link); }\n catch { const frag = range.extractContents(); link.appendChild(frag); range.insertNode(link); }\n }\n "],"names":["closestBlock","node","root","_n","HTMLElement","display","getComputedStyle","tagName","match","parentNode","nearestElement","n","rgbToHex","rgb","m","concat","Number","toString","padStart","surroundInline","range","tag","attrs","wrap","document","createElement","Object","entries","forEach","_ref","_ref2","_slicedToArray","k","v","setAttribute","surroundContents","_unused","frag","extractContents","appendChild","insertNode","toggleInlineTag","sel","getSelection","rangeCount","getRangeAt","collapsed","elm","_ref3","_ref4","createTextNode","r","createRange","setStart","firstChild","collapse","removeAllRanges","addRange","startContainer","target","toLowerCase","p","insertBefore","removeChild","unwrap","setBlockTag","block","nb","replaceWith","selectNodeContents","setAlignment","align","style","textAlign","setFontFamily","family","span","fontFamily","enclosingStyledSpan","editor","dataAttr","HTMLSpanElement","hasAttribute","applyInlineStyle","cssProp","value","window","r0","contains","commonAncestorContainer","cloneRange","enclosing","mergeAdjacentStyledSpans","s","caret","leftEdge","rightEdge","endContainer","all","compareBoundaryPoints","Range","START_TO_START","END_TO_END","rangeCoversWholeNode","mid","newValue","oldValue","left","setEnd","startOffset","right","endOffset","childNodes","length","createDocumentFragment","makeShell","val","hasRangeContent","sLeft","cloneContents","sRight","splitAndRecolorWithinSpan","commonEl","walker","createTreeWalker","NodeFilter","SHOW_TEXT","acceptNode","nodeValue","trim","FILTER_REJECT","nodeRange","END_TO_START","START_TO_END","FILTER_ACCEPT","toProcess","t","nextNode","push","text","start","end","splitText","existing","parentElement","replaceChild","textContent","spans","Array","from","querySelectorAll","valOf","el","child","remove","prev","previousSibling","next","nextSibling","setForeColor","hex","setBackColor","insertOrEditLink","href","_r3","a","HTMLAnchorElement","url","prompt","link","setStartAfter","_unused2"],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
function n(n,t){for(;n&&n!==t;){if(n instanceof HTMLElement){const t=getComputedStyle(n).display;if(n.tagName.match(/^(P|DIV|H1|H2|H3|H4|H5|H6|LI)$/)||"block"===t||"list-item"===t)return n}n=n?.parentNode||null}return t}function t(n){for(;n&&!(n instanceof HTMLElement);)n=n.parentNode;return n}function o(n){const t=n.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/i);if(!t)return"#000000";return`#${Number(t[1]).toString(16).padStart(2,"0")}${Number(t[2]).toString(16).padStart(2,"0")}${Number(t[3]).toString(16).padStart(2,"0")}`}function
|
1
|
+
function n(n,t){for(;n&&n!==t;){if(n instanceof HTMLElement){const t=getComputedStyle(n).display;if(n.tagName.match(/^(P|DIV|H1|H2|H3|H4|H5|H6|LI)$/)||"block"===t||"list-item"===t)return n}n=n?.parentNode||null}return t}function t(n){for(;n&&!(n instanceof HTMLElement);)n=n.parentNode;return n}function o(n){const t=n.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/i);if(!t)return"#000000";return`#${Number(t[1]).toString(16).padStart(2,"0")}${Number(t[2]).toString(16).padStart(2,"0")}${Number(t[3]).toString(16).padStart(2,"0")}`}function e(n,t,o){const e=document.createElement(t);o&&Object.entries(o).forEach((([n,t])=>e.setAttribute(n,t)));try{n.surroundContents(e)}catch{const t=n.extractContents();e.appendChild(t),n.insertNode(e)}}function c(n,t,o){const c=document.getSelection();if(!c||0===c.rangeCount)return;const r=c.getRangeAt(0);if(r.collapsed){const n=document.createElement(t);o&&Object.entries(o).forEach((([t,o])=>n.setAttribute(t,o))),n.appendChild(document.createTextNode("")),r.insertNode(n);const e=document.createRange();return e.setStart(n.firstChild,1),e.collapse(!0),c.removeAllRanges(),void c.addRange(e)}let u=r.startContainer,i=null;for(;u&&u!==n;){if(u instanceof HTMLElement&&u.tagName.toLowerCase()===t){i=u;break}u=u.parentNode}i?function(n){const t=n.parentNode;if(t){for(;n.firstChild;)t.insertBefore(n.firstChild,n);t.removeChild(n)}}(i):e(r,t,o)}function r(t,o){const e=document.getSelection();if(!e||0===e.rangeCount)return;const c=n(e.getRangeAt(0).startContainer,t);if(!c)return;if(c.tagName.toLowerCase()===o)return;const r=document.createElement(o);for(;c.firstChild;)r.appendChild(c.firstChild);c.replaceWith(r);const u=document.createRange();u.selectNodeContents(r),u.collapse(!0),e.removeAllRanges(),e.addRange(u)}function u(t,o){const e=document.getSelection();if(!e||0===e.rangeCount)return;const c=n(e.getRangeAt(0).startContainer,t);c&&(c.style.textAlign="justify"===o?"justify":o)}function i(n,t){const o=document.getSelection();if(!o||0===o.rangeCount)return;const c=o.getRangeAt(0);if(c.collapsed){const n=document.createElement("span");n.style.fontFamily=t,n.appendChild(document.createTextNode("")),c.insertNode(n);const e=document.createRange();return e.setStart(n.firstChild,1),e.collapse(!0),o.removeAllRanges(),void o.addRange(e)}e(c,"span",{style:`font-family:${t}`})}function s(n,t,o){for(;t&&t!==n;){if(t instanceof HTMLSpanElement&&t.hasAttribute(o))return t;t=t.parentNode}return null}function f(n,t,o,e){const c=window.getSelection();if(!c||0===c.rangeCount)return;const r=c.getRangeAt(0);if(!n.contains(r.commonAncestorContainer))return;const u=r.cloneRange();if(u.collapsed){const r=s(n,u.startContainer,e);if(r)return r.style[t]=o,void a(n,e,t);const i=document.createElement("span");i.setAttribute(e,"1"),i.style[t]=o,i.appendChild(document.createTextNode("")),u.insertNode(i);const f=document.createRange();return f.setStart(i.firstChild,1),f.collapse(!0),c.removeAllRanges(),c.addRange(f),void a(n,e,t)}const i=s(n,u.startContainer,e),f=s(n,u.endContainer,e);if(i&&i===f){if(function(n,t){const o=document.createRange();return o.selectNodeContents(t),n.compareBoundaryPoints(Range.START_TO_START,o)<=0&&n.compareBoundaryPoints(Range.END_TO_END,o)>=0}(u,i))i.style[t]=o;else{const n=function(n,t,o,e,c){const r=n.style[e],u=document.createRange();u.setStart(n,0),u.setEnd(t.startContainer,t.startOffset);const i=document.createRange();i.setStart(t.endContainer,t.endOffset),i.setEnd(n,n.childNodes.length);const s=document.createDocumentFragment(),f=n=>{const t=document.createElement("span");return t.setAttribute(o,"1"),t.style[e]=n,t};if(d(u)){const n=f(r);n.appendChild(u.cloneContents()),s.appendChild(n)}const a=f(c);if(a.appendChild(t.cloneContents()),s.appendChild(a),d(i)){const n=f(r);n.appendChild(i.cloneContents()),s.appendChild(n)}return n.replaceWith(s),a}(i,u,e,t,o),c=window.getSelection(),r=document.createRange();r.selectNodeContents(n),c?.removeAllRanges(),c?.addRange(r)}return void a(n,e,t)}const m=(()=>{let n=u.commonAncestorContainer;for(;n&&!(n instanceof HTMLElement);)n=n.parentNode;return n})(),l=document.createTreeWalker(m||n,NodeFilter.SHOW_TEXT,{acceptNode:n=>{if(!n.nodeValue||!n.nodeValue.trim())return NodeFilter.FILTER_REJECT;const t=document.createRange();t.selectNodeContents(n);return u.compareBoundaryPoints(Range.END_TO_START,t)<0&&u.compareBoundaryPoints(Range.START_TO_END,t)>0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT}}),p=[];let H;for(;H=l.nextNode();)p.push(H);p.forEach((c=>{let r=0,i=c.length;c===u.startContainer&&(r=u.startOffset),c===u.endContainer&&(i=u.endOffset),r>0&&(c=c.splitText(r)),i<c.length&&c.splitText(i);const f=s(n,c,e);if(f)return void(f.style[t]=o);const d=document.createElement("span");d.setAttribute(e,"1"),d.style[t]=o;c.parentElement.replaceChild(d,c),d.appendChild(c)})),a(n,e,t),c.removeAllRanges(),c.addRange(u)}function d(n){if(n.collapsed)return!1;return(n.cloneContents().textContent||"").length>0}function a(n,t,o){const e=Array.from(n.querySelectorAll(`span[${t}]`)),c=n=>n.style[o];e.forEach((n=>{Array.from(n.querySelectorAll(`span[${t}]`)).forEach((t=>{if(c(t)===c(n)){for(;t.firstChild;)n.insertBefore(t.firstChild,t);t.remove()}}));const o=n.previousSibling;if(o instanceof HTMLSpanElement&&o.hasAttribute(t)&&c(o)===c(n)){for(;n.firstChild;)o.appendChild(n.firstChild);return void n.remove()}const e=n.nextSibling;if(e instanceof HTMLSpanElement&&e.hasAttribute(t)&&c(e)===c(n)){for(;e.firstChild;)n.appendChild(e.firstChild);e.remove()}}))}function m(n,t){f(n,"color",t,"data-rte-color")}function l(n,t){f(n,"backgroundColor",t,"data-rte-bg")}function p(n,t){const o=document.getSelection();if(!o||0===o.rangeCount)return;const e=o.getRangeAt(0);let c=e.startContainer,r=null;for(;c&&c!==n;){if(c instanceof HTMLAnchorElement){r=c;break}c=c.parentNode}const u=t??("undefined"!=typeof window&&window.prompt("Enter URL",r?.href||"https://")||"");if(!u)return;if(r)return void(r.href=u);if(e.collapsed){const n=document.createElement("a");n.href=u,n.textContent=u,e.insertNode(n);const t=document.createRange();return t.setStartAfter(n),t.collapse(!0),o.removeAllRanges(),void o.addRange(t)}const i=document.createElement("a");i.href=u;try{e.surroundContents(i)}catch{const n=e.extractContents();i.appendChild(n),e.insertNode(i)}}export{r as a,i as b,l as c,m as d,n as e,p as i,t as n,o as r,u as s,c as t};
|
@@ -41,7 +41,9 @@ nile-rte-toolbar-item > nile-button::part(base) {
|
|
41
41
|
.editor h5 { font-size:0.83em }
|
42
42
|
.editor h6 { font-size:0.67em }
|
43
43
|
|
44
|
-
.editor { min-height:160px; padding:12px; border:1px solid #e5e7eb; border-radius:0 0 8px 8px; background:#fff; outline:none;
|
44
|
+
.editor { min-height:160px; padding:12px; border:1px solid #e5e7eb; border-radius:0 0 8px 8px; background:#fff; outline:none; white-space: pre-wrap;
|
45
|
+
tab-size: 4;
|
46
|
+
-moz-tab-size: 4; }
|
45
47
|
nile-rte-preview { display:block; margin-top:10px; padding:10px; border:1px dashed #cbd5e1; border-radius:8px; background:#fafafa; }
|
46
48
|
|
47
49
|
.rte-color-trigger {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"nile-rich-text-editor.css.js","sourceRoot":"","sources":["../../../src/nile-rich-text-editor/nile-rich-text-editor.css.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA
|
1
|
+
{"version":3,"file":"nile-rich-text-editor.css.js","sourceRoot":"","sources":["../../../src/nile-rich-text-editor/nile-rich-text-editor.css.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwFxB,CAAC;AAEF,eAAe,CAAC,MAAM,CAAC,CAAC","sourcesContent":["// rte-styles.ts\nimport { css } from 'lit';\n\nexport const styles = css`\n /* Host positioning for overlays */\n nile-rich-text-editor { position: relative; display: block; font-family: inherit; }\n\n \nnile-rte-toolbar-item > nile-button::part(base) {\n \n width:32px; height:32px; padding:0px 6px;\n border: none;\n}\n \n \n\n\n .toolbar, nile-rte-toolbar {\n display:flex; align-items:center; gap:8px; padding:8px; \n border:1px solid #e5e7eb; border-bottom:none; border-radius:8px 8px 0 0; background:#fff;\n }\n\n nile-rte-toolbar-item > button, .toolbar button, nile-rte-toolbar button {\n border:1px solid #e5e7eb; background:#fff; border-radius:6px;\n cursor:pointer;\n }\n\n \n /* Ensure clicks hit the button (not nested icon internals) */\n nile-rte-toolbar-item > button nile-icon { pointer-events:none; }\n\n nile-rte-toolbar-item > button.active { border-color:#2563eb; background:#eff6ff; }\n nile-rte-select select { height:32px; border:1px solid #e5e7eb; border-radius:6px; background:#fff; }\n nile-rte-color input[type=\"color\"] { height:32px; width:36px; border:1px solid #e5e7eb; padding:0; border-radius:6px; background:#fff; }\n nile-rte-divider { width:1px; height:20px; background:#e5e7eb; display:inline-block; margin:0 4px; }\n\n .editor p { margin:1em 0; }\n .editor h1 { font-size:2em }\n .editor h2 { font-size:1.5em }\n .editor h3 { font-size:1.17em }\n .editor h4 { font-size:1em }\n .editor h5 { font-size:0.83em }\n .editor h6 { font-size:0.67em }\n\n .editor { min-height:160px; padding:12px; border:1px solid #e5e7eb; border-radius:0 0 8px 8px; background:#fff; outline:none; white-space: pre-wrap;\n tab-size: 4; \n -moz-tab-size: 4; }\n nile-rte-preview { display:block; margin-top:10px; padding:10px; border:1px dashed #cbd5e1; border-radius:8px; background:#fafafa; }\n\n .rte-color-trigger {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n height: 28px;\n padding: 0 8px;\n border: 1px solid var(--nile-color-border, #d9d9d9);\n border-radius: 6px;\n background: #fff;\n cursor: pointer;\n}\n\n.rte-color-trigger .glyph-stack {\n display: grid; /* stack vertically */\n grid-auto-rows: max-content; \n align-items: center;\n justify-items: center;\n line-height: 1;\n}\n\n.rte-color-trigger .glyph {\n font-size: 14px;\n line-height: 1;\n margin-bottom: 2px; /* little breathing space above underline */\n}\n\n.rte-color-trigger .underline {\n width: 18px;\n height: 3px;\n border-radius: 2px;\n background: currentColor; /* we override via JS with backgroundColor */\n}\n\n/* (unchanged) highlight square */\n.rte-color-trigger .swatch-box {\n width: 18px;\n height: 16px;\n border-radius: 4px;\n border: 1px solid rgba(0,0,0,0.35);\n background: currentColor; /* overridden via JS */\n}\n\n`;\n\nexport default [styles];"]}
|
@@ -50,6 +50,45 @@ let NileRichTextEditor = class NileRichTextEditor extends LitElement {
|
|
50
50
|
this.bgSwatchEl = null;
|
51
51
|
// Mentions controller (child)
|
52
52
|
this.mentionsEl = null;
|
53
|
+
this.onEditorKeydown = (e) => {
|
54
|
+
if (e.key !== 'Tab')
|
55
|
+
return;
|
56
|
+
e.preventDefault();
|
57
|
+
this.focusAndRestore();
|
58
|
+
const sel = window.getSelection();
|
59
|
+
if (!sel || sel.rangeCount === 0)
|
60
|
+
return;
|
61
|
+
const range = sel.getRangeAt(0);
|
62
|
+
if (e.shiftKey) {
|
63
|
+
if (range.collapsed && range.startContainer.nodeType === Node.TEXT_NODE) {
|
64
|
+
const t = range.startContainer;
|
65
|
+
const off = range.startOffset;
|
66
|
+
const before = t.data.slice(0, off);
|
67
|
+
const removed = before.replace(/(\t|[ \u00a0]{2})$/, '');
|
68
|
+
if (removed.length !== before.length) {
|
69
|
+
t.data = removed + t.data.slice(off);
|
70
|
+
const r = document.createRange();
|
71
|
+
r.setStart(t, removed.length);
|
72
|
+
r.collapse(true);
|
73
|
+
sel.removeAllRanges();
|
74
|
+
sel.addRange(r);
|
75
|
+
this.updateContent();
|
76
|
+
this.updateToolbarState();
|
77
|
+
}
|
78
|
+
}
|
79
|
+
return;
|
80
|
+
}
|
81
|
+
range.deleteContents();
|
82
|
+
const tabNode = document.createTextNode('\t');
|
83
|
+
range.insertNode(tabNode);
|
84
|
+
const r = document.createRange();
|
85
|
+
r.setStartAfter(tabNode);
|
86
|
+
r.collapse(true);
|
87
|
+
sel.removeAllRanges();
|
88
|
+
sel.addRange(r);
|
89
|
+
this.updateContent();
|
90
|
+
this.updateToolbarState();
|
91
|
+
};
|
53
92
|
this.onSelectionChange = () => {
|
54
93
|
if (!this.editorEl)
|
55
94
|
return;
|
@@ -105,7 +144,7 @@ let NileRichTextEditor = class NileRichTextEditor extends LitElement {
|
|
105
144
|
ensureEditor() {
|
106
145
|
this.editorEl = this.querySelector('.editor');
|
107
146
|
if (!this.editorEl) {
|
108
|
-
const editor = document.createElement('
|
147
|
+
const editor = document.createElement('article');
|
109
148
|
editor.className = 'editor';
|
110
149
|
editor.setAttribute('contenteditable', 'true');
|
111
150
|
if (this.toolbarEl?.nextSibling) {
|
@@ -125,13 +164,13 @@ let NileRichTextEditor = class NileRichTextEditor extends LitElement {
|
|
125
164
|
this.ensureAtLeastOneParagraph();
|
126
165
|
}
|
127
166
|
wireEditor() {
|
128
|
-
// Input & selection preservation
|
129
167
|
this.editorEl.addEventListener('input', () => {
|
130
168
|
this.ensureAtLeastOneParagraph();
|
131
169
|
this.updateContent();
|
132
170
|
});
|
133
171
|
this.editorEl.addEventListener('mouseup', () => this.saveSelection());
|
134
172
|
this.editorEl.addEventListener('keyup', () => this.saveSelection());
|
173
|
+
this.editorEl.addEventListener('keydown', this.onEditorKeydown);
|
135
174
|
}
|
136
175
|
wireAuthoredToolbar(tb) {
|
137
176
|
this.buttonMap.clear();
|
@@ -176,7 +215,6 @@ let NileRichTextEditor = class NileRichTextEditor extends LitElement {
|
|
176
215
|
child.innerHTML = '';
|
177
216
|
}
|
178
217
|
else {
|
179
|
-
// Author provided custom content (could be a <nile-icon> already)
|
180
218
|
btn.innerHTML = child.innerHTML;
|
181
219
|
child.innerHTML = '';
|
182
220
|
}
|
@@ -187,11 +225,10 @@ let NileRichTextEditor = class NileRichTextEditor extends LitElement {
|
|
187
225
|
btn.setAttribute('aria-label', label);
|
188
226
|
btn.addEventListener('mousedown', e => e.preventDefault());
|
189
227
|
btn.addEventListener('click', () => this.onToolbarCommand(cmd));
|
190
|
-
// Register for active reflection
|
191
228
|
const arr = this.buttonMap.get(cmd) ?? [];
|
192
229
|
arr.push(btn);
|
193
230
|
this.buttonMap.set(cmd, arr);
|
194
|
-
return;
|
231
|
+
return;
|
195
232
|
}
|
196
233
|
if (tag === 'nile-rte-select') {
|
197
234
|
const type = child.getAttribute('type') || '';
|
@@ -555,12 +592,31 @@ let NileRichTextEditor = class NileRichTextEditor extends LitElement {
|
|
555
592
|
if (!this.editorEl)
|
556
593
|
return;
|
557
594
|
this.ensureAtLeastOneParagraph();
|
558
|
-
|
559
|
-
|
595
|
+
// Clone content for safe manipulation
|
596
|
+
const clone = this.editorEl.cloneNode(true);
|
597
|
+
// Walk the original DOM and the clone in parallel
|
598
|
+
const origWalker = document.createTreeWalker(this.editorEl, NodeFilter.SHOW_ELEMENT);
|
599
|
+
const cloneWalker = document.createTreeWalker(clone, NodeFilter.SHOW_ELEMENT);
|
600
|
+
while (origWalker.nextNode() && cloneWalker.nextNode()) {
|
601
|
+
const origEl = origWalker.currentNode;
|
602
|
+
const cloneEl = cloneWalker.currentNode;
|
603
|
+
const computed = window.getComputedStyle(origEl);
|
604
|
+
// Dump *all* computed styles into a single inline style attribute
|
605
|
+
const cssText = Array.from(computed)
|
606
|
+
.map(prop => `${prop}:${computed.getPropertyValue(prop)}`)
|
607
|
+
.join(';');
|
608
|
+
cloneEl.setAttribute('style', cssText);
|
609
|
+
}
|
610
|
+
// Store the fully inlined HTML
|
611
|
+
this.content = clone.innerHTML;
|
612
|
+
// Live preview updates
|
560
613
|
if (this.previewEl)
|
561
614
|
this.previewEl.innerHTML = this.content;
|
615
|
+
// Emit event with full inline styles
|
562
616
|
this.dispatchEvent(new CustomEvent('content-changed', {
|
563
|
-
detail: { content: this.content },
|
617
|
+
detail: { content: this.content },
|
618
|
+
bubbles: true,
|
619
|
+
composed: true
|
564
620
|
}));
|
565
621
|
}
|
566
622
|
};
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"nile-rich-text-editor.js","sourceRoot":"","sources":["../../../src/nile-rich-text-editor/nile-rich-text-editor.ts"],"names":[],"mappings":"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","sourcesContent":["// nile-rich-text-editor.ts\nimport { LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport './nile-rte-toolbar';\nimport './nile-rte-toolbar-item';\nimport './nile-rte-select';\nimport './nile-rte-color';\nimport './nile-rte-divider';\nimport './nile-rte-preview';\nimport './nile-rte-mentions';\n\nimport {\n closestBlock, nearestElement, rgbToHex,\n toggleInlineTag, setBlockTag, setAlignment,\n setFontFamily, setForeColor, insertOrEditLink, setBackColor\n} from './utils';\n\nimport {styles} from './nile-rich-text-editor.css'; \n\ntype MentionsConfig = Record<string, { key: string; label: string }[]>;\n\n/**\n * Map commands → default icon names from your <nile-icon> set.\n * Adjust values to match the real names you have.\n */\nconst DEFAULT_ICONS: Record<string, string> = {\n bold: 'nile-bold',\n italic: 'nile-italic',\n underline: 'nile-underline',\n link: 'user',\n left: 'nile-leftalign',\n center: 'nile-centeralign',\n right: 'nile-rightalign',\n justify: 'nile-justify',\n ul: 'nile-ul',\n ol: 'nile-ol',\n clear: 'error',\n};\n\n@customElement('nile-rich-text-editor')\nexport class NileRichTextEditor extends LitElement {\n protected createRenderRoot() { return this; } \n protected shouldUpdate() { return false; } \n\n /** Initial HTML content */\n @property({ type: String }) value = '';\n\n /** Optional mentions config (can also be on <nile-rte-mentions mentions=\"...\">) */\n @property({\n attribute: 'mentions',\n converter: {\n fromAttribute: (value: string): MentionsConfig => {\n try {\n const parsed = JSON.parse(value);\n const out: MentionsConfig = {};\n for (const trig of Object.keys(parsed)) {\n const arr = parsed[trig];\n if (Array.isArray(arr)) {\n out[trig] = arr\n .filter(i => i && typeof i.key === 'string' && typeof i.label === 'string')\n .map(i => ({ key: i.key, label: i.label }));\n }\n }\n return out;\n } catch { return {}; }\n },\n toAttribute: (v: MentionsConfig) => JSON.stringify(v),\n }\n })\n mentions: MentionsConfig = {};\n\n // ----- internal state (no Lit render) -----\n @state() private content = '';\n private editorEl!: HTMLElement;\n private previewEl: HTMLElement | null = null;\n private toolbarEl: HTMLElement | null = null;\n\n private lastRange: Range | null = null;\n\n // map for button active reflections\n private buttonMap = new Map<string, HTMLElement[]>();\n private headingSelect: HTMLSelectElement | null = null;\n private fontSelect: HTMLSelectElement | null = null;\n private colorInput: HTMLInputElement | null = null;\nprivate bgColorInput: HTMLInputElement | null = null; \nprivate colorSwatchEl: HTMLElement | null = null; \nprivate bgSwatchEl: HTMLElement | null = null; \n\n\n // Mentions controller (child)\n private mentionsEl: HTMLElement | null = null;\n\n \n\n private injectCss(cssText: string) {\n if (this.querySelector('style[data-rte-style]')) return;\n const style = document.createElement('style');\n style.setAttribute('data-rte-style', 'true');\n style.textContent = cssText;\n this.insertBefore(style, this.firstChild);\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n\n \n this.injectCss(styles.cssText); \n \n\n \n this.toolbarEl = this.querySelector('nile-rte-toolbar');\n this.previewEl = this.querySelector('nile-rte-preview');\n\n \n this.ensureEditor();\n\n \n if (this.value && !this.editorEl.innerHTML.trim()) {\n this.editorEl.innerHTML = this.value;\n }\n this.content = this.editorEl.innerHTML;\n\n \n if (this.toolbarEl) this.wireAuthoredToolbar(this.toolbarEl);\n\n \n this.mentionsEl = this.querySelector('nile-rte-mentions');\n if (this.mentionsEl) {\n \n (this.mentionsEl as any).attach?.(this.editorEl, this as HTMLElement);\n \n (this.mentionsEl as any).setExternalConfig?.(this.mentions);\n }\n\n \n this.wireEditor();\n\n \n this.updateToolbarState();\n this.syncPreview();\n\n \n document.addEventListener('selectionchange', this.onSelectionChange, true);\n }\n\n disconnectedCallback(): void {\n document.removeEventListener('selectionchange', this.onSelectionChange, true);\n \n if (this.mentionsEl && (this.mentionsEl as any).detach) {\n (this.mentionsEl as any).detach();\n }\n super.disconnectedCallback();\n }\n\n \n \n\n private ensureEditor() {\n this.editorEl = this.querySelector('.editor') as HTMLElement;\n if (!this.editorEl) {\n const editor = document.createElement('div');\n editor.className = 'editor';\n editor.setAttribute('contenteditable','true');\n if (this.toolbarEl?.nextSibling) {\n this.insertBefore(editor, this.toolbarEl.nextSibling);\n } else if (this.previewEl) {\n this.insertBefore(editor, this.previewEl);\n } else {\n this.appendChild(editor);\n }\n this.editorEl = editor;\n }\n if (!this.editorEl.innerHTML.trim()) {\n this.editorEl.innerHTML = '<p><br></p>';\n }\n this.ensureAtLeastOneParagraph();\n }\n\n private wireEditor() {\n // Input & selection preservation\n this.editorEl.addEventListener('input', () => { \n this.ensureAtLeastOneParagraph();\n this.updateContent();\n });\n this.editorEl.addEventListener('mouseup', () => this.saveSelection());\n this.editorEl.addEventListener('keyup', () => this.saveSelection()); \n }\n\n private wireAuthoredToolbar(tb: HTMLElement) {\n \n this.buttonMap.clear();\n this.headingSelect = null;\n this.fontSelect = null;\n this.colorInput = null;\n\n \n Array.from(tb.children).forEach(child => {\n const tag = child.tagName.toLowerCase();\n\n if (tag === 'nile-rte-select' && child.getAttribute('type') === 'align') {\n child.addEventListener('change', (e: any) => {\n this.focusAndRestore();\n const alignment = e.detail as 'left'|'center'|'right'|'justify';\n setAlignment(this.editorEl, alignment);\n this.updateContent();\n this.updateToolbarState();\n });\n return;\n }\n \n\n if (tag === 'nile-rte-toolbar-item') {\n \n let btn = child.querySelector(':scope > nile-button') as HTMLElement | null;\n \n const cmd = child.getAttribute('name') || '';\n const label = child.getAttribute('label') || cmd;\n const iconAttr = child.getAttribute('icon');\n const authoredHasContent = child.innerHTML.trim().length > 0;\n \n \n if (!btn) {\n btn = document.createElement('nile-button');\n (btn as any).variant = 'tertiary';\n (btn as any).size = 'small'; // optional\n }\n \n \n if (iconAttr) {\n btn.innerHTML = `<nile-icon name=\"${iconAttr}\" aria-label=\"${label}\"></nile-icon>`;\n child.innerHTML = '';\n } else if (!authoredHasContent) {\n const defaultIcon = DEFAULT_ICONS[cmd];\n if (defaultIcon) {\n btn.innerHTML = `<nile-icon name=\"${defaultIcon}\" size=\"20\" color=\"black\" aria-label=\"${label}\"></nile-icon>`;\n } else {\n btn.textContent = label || cmd;\n }\n child.innerHTML = '';\n } else {\n // Author provided custom content (could be a <nile-icon> already)\n btn.innerHTML = child.innerHTML;\n child.innerHTML = '';\n }\n \n // Mount it\n if (!btn.isConnected) child.appendChild(btn);\n \n // Interactions\n btn.setAttribute('aria-label', label);\n btn.addEventListener('mousedown', e => e.preventDefault());\n btn.addEventListener('click', () => this.onToolbarCommand(cmd));\n \n // Register for active reflection\n const arr = this.buttonMap.get(cmd) ?? [];\n arr.push(btn);\n this.buttonMap.set(cmd, arr);\n \n return; // done with this child\n }\n if (tag === 'nile-rte-select') {\n const type = child.getAttribute('type') || '';\n\n // listen for our custom dropdown’s change event\n child.addEventListener('change', (e: any) => {\n // restore focus & selection\n this.focusAndRestore();\n\n const val = e.detail as string;\n\n if (type === 'heading') {\n // apply block tag\n setBlockTag(this.editorEl, val as any);\n }\n else if (type === 'font') {\n setFontFamily(this.editorEl, val);\n }\n \n // update the editor content & toolbar UI\n this.updateContent();\n this.updateToolbarState();\n });\n\n // nothing else to inject into the DOM\n return;\n }\n \n\n if (tag === 'nile-rte-color') {\n const label = child.getAttribute('label') ?? 'Text color';\n const value = child.getAttribute('value') ?? '#000000';\n const mode = child.getAttribute('mode') ?? 'text'; // 'text' | 'background'\n \n // Create/attach the hidden color input\n let input = child.querySelector(':scope > input[type=\"color\"]') as HTMLInputElement | null;\n if (!input) {\n input = document.createElement('input');\n input.type = 'color';\n input.style.position = 'absolute';\n input.style.opacity = '0';\n input.style.pointerEvents = 'none'; // we'll click it programmatically\n child.appendChild(input);\n }\n input.title = label;\n input.value = value;\n \n // Build a custom trigger that shows the current color\n let trigger = child.querySelector(':scope > button.rte-color-trigger') as HTMLButtonElement | null;\n if (!trigger) {\n trigger = document.createElement('button');\n trigger.type = 'button';\n trigger.className = 'rte-color-trigger';\n trigger.setAttribute('aria-label', label);\n \n if (mode === 'background') {\n trigger.innerHTML = `\n <span class=\"swatch-box\" aria-hidden=\"true\"></span>\n `;\n } else {\n trigger.innerHTML = `\n <span class=\"glyph-stack\" aria-hidden=\"true\">\n <span class=\"glyph\">A</span>\n <span class=\"underline\"></span>\n </span>\n `;\n }\n child.appendChild(trigger);\n }\n \n // Cache swatch elements to update later\n const underline = trigger.querySelector('.underline') as HTMLElement | null;\n const square = trigger.querySelector('.swatch-box') as HTMLElement | null;\n \n if (mode === 'background') {\n this.bgColorInput = input;\n this.bgSwatchEl = square;\n if (this.bgSwatchEl) this.bgSwatchEl.style.backgroundColor = input.value;\n } else {\n this.colorInput = input;\n this.colorSwatchEl = underline;\n if (this.colorSwatchEl) this.colorSwatchEl.style.backgroundColor = input.value;\n }\n \n // Open native picker on trigger click\n trigger.addEventListener('click', (e) => {\n e.preventDefault();\n // Keep selection before opening the picker\n this.focusAndRestore();\n input!.click();\n });\n \n // When the user picks a color, apply it + update swatch\n input.addEventListener('input', () => {\n this.focusAndRestore();\n if (mode === 'background') {\n setBackColor(this.editorEl, input!.value);\n if (this.bgSwatchEl) this.bgSwatchEl.style.backgroundColor = input!.value;\n } else {\n setForeColor(this.editorEl, input!.value);\n if (this.colorSwatchEl) this.colorSwatchEl.style.backgroundColor = input!.value;\n }\n this.updateContent();\n this.updateToolbarState();\n });\n \n // Prevent losing selection when interacting\n trigger.addEventListener('mousedown', e => e.preventDefault());\n input.addEventListener('mousedown', e => e.preventDefault());\n }\n });\n }\n private onSelectionChange = () => {\n if (!this.editorEl) return;\n const sel = document.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n if (this.editorEl.contains(range.commonAncestorContainer)) {\n this.lastRange = range.cloneRange();\n this.updateToolbarState();\n }\n };\n private saveSelection() {\n const sel = window.getSelection();\n if (sel && sel.rangeCount) this.lastRange = sel.getRangeAt(0).cloneRange();\n }\n private restoreSelection() {\n if (!this.lastRange) return;\n const sel = document.getSelection(); if (!sel) return;\n sel.removeAllRanges(); sel.addRange(this.lastRange);\n }\n private focusAndRestore() { this.editorEl?.focus(); this.restoreSelection(); }\n\n /*──────────────────────── LIST HELPERS ────────────────────────*/\nprivate insertList(type: 'ul' | 'ol') {\n this.restoreSelection();\n if (!this.lastRange) return;\n\n // build <ul>/<ol>\n const list = document.createElement(type);\n\n // grab the selected fragment\n const frag = this.lastRange.extractContents();\n const temp = document.createElement('div');\n temp.appendChild(frag);\n\n // wrap each top-level node in an <li>\n Array.from(temp.childNodes).forEach(n => {\n // skip empty whitespace text nodes\n if (n.nodeType === Node.TEXT_NODE && !n.textContent?.trim()) return;\n const li = document.createElement('li');\n li.appendChild(n); // moves the node!\n list.appendChild(li);\n });\n\n // insert list where the selection was\n this.lastRange.insertNode(list);\n this.afterListEdit(list);\n}\n\nprivate afterListEdit(node: Node) {\n const range = document.createRange();\n range.setStartAfter(node);\n range.collapse(true);\n const sel = window.getSelection();\n sel?.removeAllRanges();\n sel?.addRange(range);\n\n this.saveSelection();\n this.updateContent();\n this.updateToolbarState();\n}\n // Keep at least one <p><br></p> and wrap stray inline/text into a <p>\nprivate ensureAtLeastOneParagraph() {\n const el = this.editorEl;\n if (!el) return;\n\n // 1) If completely empty → seed a paragraph\n const onlyWhitespace =\n (el.textContent ?? '').replace(/\\u200B/g, '').trim() === '';\n if (el.childNodes.length === 0 || onlyWhitespace) {\n el.innerHTML = '<p><br></p>';\n return;\n }\n\n // 2) If no block elements exist, wrap whatever is there into a <p>\n const hasBlock = el.querySelector('p,h1,h2,h3,h4,h5,h6,ul,ol,table,blockquote,pre');\n if (!hasBlock) {\n const p = document.createElement('p');\n while (el.firstChild) p.appendChild(el.firstChild);\n if (!p.hasChildNodes()) p.appendChild(document.createElement('br'));\n el.appendChild(p);\n return;\n }\n\n // 3) Make sure the first/only empty <p> still has a <br>\n el.querySelectorAll('p').forEach(p => {\n if ((p.textContent ?? '').replace(/\\u200B/g, '') === '') {\n if (!p.innerHTML.toLowerCase().includes('<br')) p.innerHTML = '<br>';\n }\n });\n}\n\n\n\n // ---------- Toolbar/commands ----------\n private onToolbarCommand(cmd: string) {\n this.focusAndRestore();\n switch (cmd) {\n case 'bold': toggleInlineTag(this.editorEl, 'strong'); break;\n case 'italic': toggleInlineTag(this.editorEl, 'em'); break;\n case 'underline': toggleInlineTag(this.editorEl, 'u'); break;\n case 'left': setAlignment(this.editorEl, 'left'); break;\n case 'center': setAlignment(this.editorEl, 'center'); break;\n case 'right': setAlignment(this.editorEl, 'right'); break;\n case 'justify': setAlignment(this.editorEl, 'justify'); break;\n case 'ul': this.insertList('ul'); break;\n case 'ol': this.insertList('ol'); break;\n case 'link': insertOrEditLink(this.editorEl); break;\n case 'clear':\n const walker = document.createTreeWalker(this.editorEl, NodeFilter.SHOW_ELEMENT);\n const toUnwrap: HTMLElement[] = [];\n while (walker.nextNode()) {\n const el = walker.currentNode as HTMLElement;\n el.removeAttribute('style');\n if (['B','STRONG','I','EM','U','SPAN','FONT'].includes(el.tagName)) {\n toUnwrap.push(el);\n }\n }\n for (const el of toUnwrap) {\n while (el.firstChild) el.parentNode?.insertBefore(el.firstChild, el);\n el.remove();\n }\n this.ensureAtLeastOneParagraph();\n break;\n\n default: break;\n }\n this.updateContent(); this.updateToolbarState();\n }\n\n private setBtnActive(cmd: string, active: boolean) {\n const arr = this.buttonMap.get(cmd); if (!arr) return;\n for (const btn of arr) btn.toggleAttribute('data-active', !!active);\n }\n\n private updateToolbarState() {\n if (!this.editorEl) return;\n const sel = document.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n if (!this.editorEl.contains(range.commonAncestorContainer)) return;\n\n const startElm = nearestElement(range.startContainer) || this.editorEl;\n const comp = getComputedStyle(startElm);\n const block = closestBlock(range.startContainer, this.editorEl) || this.editorEl;\n\n const isBold = (() => {\n let n: Node | null = startElm;\n while (n && n !== this.editorEl) {\n if (n instanceof HTMLElement) {\n const t = n.tagName.toLowerCase();\n if (t === 'strong' || t === 'b') return true;\n const w = getComputedStyle(n).fontWeight;\n if (parseInt(w, 10) >= 600) return true;\n }\n n = n.parentNode;\n }\n return false;\n })();\n\n const isItalic = (() => {\n let n: Node | null = startElm;\n while (n && n !== this.editorEl) {\n if (n instanceof HTMLElement) {\n const t = n.tagName.toLowerCase();\n if (t === 'em' || t === 'i') return true;\n if (getComputedStyle(n).fontStyle === 'italic') return true;\n }\n n = n.parentNode;\n }\n return false;\n })();\n\n const isUnderline = (() => {\n let n: Node | null = startElm;\n while (n && n !== this.editorEl) {\n if (n instanceof HTMLElement) {\n const tdl = getComputedStyle(n).textDecorationLine;\n if (tdl && tdl.includes('underline')) return true;\n if (n.tagName.toLowerCase() === 'u') return true;\n }\n n = n.parentNode;\n }\n return false;\n })();\n\n const inLink = !!startElm.closest('a');\n\n const align = (block.style.textAlign || getComputedStyle(block).textAlign || 'start') as string;\n const alignNorm = align === 'start' ? 'left' : align;\n\n const inLi = !!startElm.closest('li');\n const listType = inLi ? (startElm.closest('ul,ol')?.tagName.toLowerCase() || '') : '';\n\n this.setBtnActive('bold', isBold);\n this.setBtnActive('italic', isItalic);\n this.setBtnActive('underline', isUnderline);\n this.setBtnActive('link', inLink);\n\n this.setBtnActive('left', alignNorm === 'left' && !['center','right','justify'].includes(alignNorm));\n this.setBtnActive('center', alignNorm === 'center');\n this.setBtnActive('right', alignNorm === 'right');\n this.setBtnActive('justify', alignNorm === 'justify');\n\n this.setBtnActive('ul', listType === 'ul');\n this.setBtnActive('ol', listType === 'ol');\n\n // Reflect heading\n if (this.headingSelect) {\n const tag = block.tagName.toLowerCase();\n const v = ['h1','h2','h3'].includes(tag) ? tag : 'p';\n if (this.headingSelect.value !== v) this.headingSelect.value = v;\n }\n\n // Reflect font family\n if (this.fontSelect) {\n const ff = (comp.fontFamily || '').replace(/[\"']/g, '').split(',')[0].trim().toLowerCase();\n if (ff) {\n for (const opt of Array.from(this.fontSelect.options)) {\n if (opt.value.toLowerCase() === ff) { this.fontSelect.value = opt.value; break; }\n }\n }\n }\n\n if (this.colorInput) {\n const hex = rgbToHex(comp.color);\n if (hex && this.colorInput.value.toLowerCase() !== hex.toLowerCase()) {\n this.colorInput.value = hex;\n }\n if (this.colorSwatchEl) this.colorSwatchEl.style.backgroundColor = this.colorInput.value;\n }\n \n\n if (this.bgColorInput) {\n const bg = getComputedStyle(startElm).backgroundColor;\n if (bg && !/transparent|rgba\\(\\s*0\\s*,\\s*0\\s*,\\s*0\\s*,\\s*0\\s*\\)/i.test(bg)) {\n const bgHex = rgbToHex(bg);\n if (bgHex && this.bgColorInput.value.toLowerCase() !== bgHex.toLowerCase()) {\n this.bgColorInput.value = bgHex;\n }\n }\n if (this.bgSwatchEl) this.bgSwatchEl.style.backgroundColor = this.bgColorInput.value;\n }\n }\n\n private syncPreview() {\n this.updateContent();\n }\n\n private updateContent() {\n if (!this.editorEl) return;\n this.ensureAtLeastOneParagraph();\n this.content = this.editorEl.innerHTML;\n\n // live preview on the authored node (kept in place)\n if (this.previewEl) this.previewEl.innerHTML = this.content;\n\n this.dispatchEvent(new CustomEvent('content-changed', {\n detail: { content: this.content }, bubbles: true, composed: true\n }));\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-rich-text-editor': NileRichTextEditor;\n }\n}\n\n"]}
|
1
|
+
{"version":3,"file":"nile-rich-text-editor.js","sourceRoot":"","sources":["../../../src/nile-rich-text-editor/nile-rich-text-editor.ts"],"names":[],"mappings":"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","sourcesContent":["// nile-rich-text-editor.ts\nimport { LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\nimport './nile-rte-toolbar';\nimport './nile-rte-toolbar-item';\nimport './nile-rte-select';\nimport './nile-rte-color';\nimport './nile-rte-divider';\nimport './nile-rte-preview';\nimport './nile-rte-mentions';\n\nimport {\n closestBlock, nearestElement, rgbToHex,\n toggleInlineTag, setBlockTag, setAlignment,\n setFontFamily, setForeColor, insertOrEditLink, setBackColor\n} from './utils';\n\nimport {styles} from './nile-rich-text-editor.css'; \n\ntype MentionsConfig = Record<string, { key: string; label: string }[]>;\n\n/**\n * Map commands → default icon names from your <nile-icon> set.\n * Adjust values to match the real names you have.\n */\nconst DEFAULT_ICONS: Record<string, string> = {\n bold: 'nile-bold',\n italic: 'nile-italic',\n underline: 'nile-underline',\n link: 'user',\n left: 'nile-leftalign',\n center: 'nile-centeralign',\n right: 'nile-rightalign',\n justify: 'nile-justify',\n ul: 'nile-ul',\n ol: 'nile-ol',\n clear: 'error',\n};\n\n@customElement('nile-rich-text-editor')\nexport class NileRichTextEditor extends LitElement {\n protected createRenderRoot() { return this; } \n protected shouldUpdate() { return false; } \n\n /** Initial HTML content */\n @property({ type: String }) value = '';\n\n /** Optional mentions config (can also be on <nile-rte-mentions mentions=\"...\">) */\n @property({\n attribute: 'mentions',\n converter: {\n fromAttribute: (value: string): MentionsConfig => {\n try {\n const parsed = JSON.parse(value);\n const out: MentionsConfig = {};\n for (const trig of Object.keys(parsed)) {\n const arr = parsed[trig];\n if (Array.isArray(arr)) {\n out[trig] = arr\n .filter(i => i && typeof i.key === 'string' && typeof i.label === 'string')\n .map(i => ({ key: i.key, label: i.label }));\n }\n }\n return out;\n } catch { return {}; }\n },\n toAttribute: (v: MentionsConfig) => JSON.stringify(v),\n }\n })\n mentions: MentionsConfig = {};\n\n // ----- internal state (no Lit render) -----\n @state() private content = '';\n private editorEl!: HTMLElement;\n private previewEl: HTMLElement | null = null;\n private toolbarEl: HTMLElement | null = null;\n\n private lastRange: Range | null = null;\n\n // map for button active reflections\n private buttonMap = new Map<string, HTMLElement[]>();\n private headingSelect: HTMLSelectElement | null = null;\n private fontSelect: HTMLSelectElement | null = null;\n private colorInput: HTMLInputElement | null = null;\nprivate bgColorInput: HTMLInputElement | null = null; \nprivate colorSwatchEl: HTMLElement | null = null; \nprivate bgSwatchEl: HTMLElement | null = null; \n\n\n // Mentions controller (child)\n private mentionsEl: HTMLElement | null = null;\n\n \n\n private injectCss(cssText: string) {\n if (this.querySelector('style[data-rte-style]')) return;\n const style = document.createElement('style');\n style.setAttribute('data-rte-style', 'true');\n style.textContent = cssText;\n this.insertBefore(style, this.firstChild);\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n\n \n this.injectCss(styles.cssText); \n \n\n \n this.toolbarEl = this.querySelector('nile-rte-toolbar');\n this.previewEl = this.querySelector('nile-rte-preview');\n\n \n this.ensureEditor();\n\n \n if (this.value && !this.editorEl.innerHTML.trim()) {\n this.editorEl.innerHTML = this.value;\n }\n this.content = this.editorEl.innerHTML;\n\n \n if (this.toolbarEl) this.wireAuthoredToolbar(this.toolbarEl);\n\n \n this.mentionsEl = this.querySelector('nile-rte-mentions');\n if (this.mentionsEl) {\n \n (this.mentionsEl as any).attach?.(this.editorEl, this as HTMLElement);\n \n (this.mentionsEl as any).setExternalConfig?.(this.mentions);\n }\n\n \n this.wireEditor();\n\n \n this.updateToolbarState();\n this.syncPreview();\n\n \n document.addEventListener('selectionchange', this.onSelectionChange, true);\n }\n\n disconnectedCallback(): void {\n document.removeEventListener('selectionchange', this.onSelectionChange, true);\n \n if (this.mentionsEl && (this.mentionsEl as any).detach) {\n (this.mentionsEl as any).detach();\n }\n super.disconnectedCallback();\n }\n\n \n \n\n private ensureEditor() {\n this.editorEl = this.querySelector('.editor') as HTMLElement;\n if (!this.editorEl) {\n const editor = document.createElement('article');\n editor.className = 'editor';\n editor.setAttribute('contenteditable','true');\n if (this.toolbarEl?.nextSibling) {\n this.insertBefore(editor, this.toolbarEl.nextSibling);\n } else if (this.previewEl) {\n this.insertBefore(editor, this.previewEl);\n } else {\n this.appendChild(editor);\n }\n this.editorEl = editor;\n }\n if (!this.editorEl.innerHTML.trim()) {\n this.editorEl.innerHTML = '<p><br></p>';\n }\n this.ensureAtLeastOneParagraph();\n }\n\n private wireEditor() {\n this.editorEl.addEventListener('input', () => { \n this.ensureAtLeastOneParagraph();\n this.updateContent();\n });\n this.editorEl.addEventListener('mouseup', () => this.saveSelection());\n this.editorEl.addEventListener('keyup', () => this.saveSelection());\n this.editorEl.addEventListener('keydown', this.onEditorKeydown); \n }\n \n \n private onEditorKeydown = (e: KeyboardEvent) => {\n if (e.key !== 'Tab') return;\n \n e.preventDefault();\n this.focusAndRestore();\n \n const sel = window.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n \n \n if (e.shiftKey) {\n if (range.collapsed && range.startContainer.nodeType === Node.TEXT_NODE) {\n const t = range.startContainer as Text;\n const off = range.startOffset;\n const before = t.data.slice(0, off);\n \n \n const removed = before.replace(/(\\t|[ \\u00a0]{2})$/, '');\n if (removed.length !== before.length) {\n t.data = removed + t.data.slice(off);\n const r = document.createRange();\n r.setStart(t, removed.length);\n r.collapse(true);\n sel.removeAllRanges();\n sel.addRange(r);\n this.updateContent();\n this.updateToolbarState();\n }\n }\n return;\n }\n \n \n range.deleteContents();\n const tabNode = document.createTextNode('\\t'); \n range.insertNode(tabNode);\n \n \n const r = document.createRange();\n r.setStartAfter(tabNode);\n r.collapse(true);\n sel.removeAllRanges();\n sel.addRange(r);\n \n this.updateContent();\n this.updateToolbarState();\n };\n \n\n private wireAuthoredToolbar(tb: HTMLElement) {\n \n this.buttonMap.clear();\n this.headingSelect = null;\n this.fontSelect = null;\n this.colorInput = null;\n\n \n Array.from(tb.children).forEach(child => {\n const tag = child.tagName.toLowerCase();\n\n if (tag === 'nile-rte-select' && child.getAttribute('type') === 'align') {\n child.addEventListener('change', (e: any) => {\n this.focusAndRestore();\n const alignment = e.detail as 'left'|'center'|'right'|'justify';\n setAlignment(this.editorEl, alignment);\n this.updateContent();\n this.updateToolbarState();\n });\n return;\n }\n \n\n if (tag === 'nile-rte-toolbar-item') {\n \n let btn = child.querySelector(':scope > nile-button') as HTMLElement | null;\n \n const cmd = child.getAttribute('name') || '';\n const label = child.getAttribute('label') || cmd;\n const iconAttr = child.getAttribute('icon');\n const authoredHasContent = child.innerHTML.trim().length > 0;\n \n \n if (!btn) {\n btn = document.createElement('nile-button');\n (btn as any).variant = 'tertiary';\n (btn as any).size = 'small'; // optional\n }\n \n \n if (iconAttr) {\n btn.innerHTML = `<nile-icon name=\"${iconAttr}\" aria-label=\"${label}\"></nile-icon>`;\n child.innerHTML = '';\n } else if (!authoredHasContent) {\n const defaultIcon = DEFAULT_ICONS[cmd];\n if (defaultIcon) {\n btn.innerHTML = `<nile-icon name=\"${defaultIcon}\" size=\"20\" color=\"black\" aria-label=\"${label}\"></nile-icon>`;\n } else {\n btn.textContent = label || cmd;\n }\n child.innerHTML = '';\n } else {\n btn.innerHTML = child.innerHTML;\n child.innerHTML = '';\n }\n \n // Mount it\n if (!btn.isConnected) child.appendChild(btn);\n \n // Interactions\n btn.setAttribute('aria-label', label);\n btn.addEventListener('mousedown', e => e.preventDefault());\n btn.addEventListener('click', () => this.onToolbarCommand(cmd));\n \n \n const arr = this.buttonMap.get(cmd) ?? [];\n arr.push(btn);\n this.buttonMap.set(cmd, arr);\n \n return; \n }\n if (tag === 'nile-rte-select') {\n const type = child.getAttribute('type') || '';\n\n // listen for our custom dropdown’s change event\n child.addEventListener('change', (e: any) => {\n // restore focus & selection\n this.focusAndRestore();\n\n const val = e.detail as string;\n\n if (type === 'heading') {\n // apply block tag\n setBlockTag(this.editorEl, val as any);\n }\n else if (type === 'font') {\n setFontFamily(this.editorEl, val);\n }\n \n // update the editor content & toolbar UI\n this.updateContent();\n this.updateToolbarState();\n });\n\n // nothing else to inject into the DOM\n return;\n }\n \n\n if (tag === 'nile-rte-color') {\n const label = child.getAttribute('label') ?? 'Text color';\n const value = child.getAttribute('value') ?? '#000000';\n const mode = child.getAttribute('mode') ?? 'text'; // 'text' | 'background'\n \n // Create/attach the hidden color input\n let input = child.querySelector(':scope > input[type=\"color\"]') as HTMLInputElement | null;\n if (!input) {\n input = document.createElement('input');\n input.type = 'color';\n input.style.position = 'absolute';\n input.style.opacity = '0';\n input.style.pointerEvents = 'none'; // we'll click it programmatically\n child.appendChild(input);\n }\n input.title = label;\n input.value = value;\n \n // Build a custom trigger that shows the current color\n let trigger = child.querySelector(':scope > button.rte-color-trigger') as HTMLButtonElement | null;\n if (!trigger) {\n trigger = document.createElement('button');\n trigger.type = 'button';\n trigger.className = 'rte-color-trigger';\n trigger.setAttribute('aria-label', label);\n \n if (mode === 'background') {\n trigger.innerHTML = `\n <span class=\"swatch-box\" aria-hidden=\"true\"></span>\n `;\n } else {\n trigger.innerHTML = `\n <span class=\"glyph-stack\" aria-hidden=\"true\">\n <span class=\"glyph\">A</span>\n <span class=\"underline\"></span>\n </span>\n `;\n }\n child.appendChild(trigger);\n }\n \n // Cache swatch elements to update later\n const underline = trigger.querySelector('.underline') as HTMLElement | null;\n const square = trigger.querySelector('.swatch-box') as HTMLElement | null;\n \n if (mode === 'background') {\n this.bgColorInput = input;\n this.bgSwatchEl = square;\n if (this.bgSwatchEl) this.bgSwatchEl.style.backgroundColor = input.value;\n } else {\n this.colorInput = input;\n this.colorSwatchEl = underline;\n if (this.colorSwatchEl) this.colorSwatchEl.style.backgroundColor = input.value;\n }\n \n // Open native picker on trigger click\n trigger.addEventListener('click', (e) => {\n e.preventDefault();\n // Keep selection before opening the picker\n this.focusAndRestore();\n input!.click();\n });\n \n // When the user picks a color, apply it + update swatch\n input.addEventListener('input', () => {\n this.focusAndRestore();\n if (mode === 'background') {\n setBackColor(this.editorEl, input!.value);\n if (this.bgSwatchEl) this.bgSwatchEl.style.backgroundColor = input!.value;\n } else {\n setForeColor(this.editorEl, input!.value);\n if (this.colorSwatchEl) this.colorSwatchEl.style.backgroundColor = input!.value;\n }\n this.updateContent();\n this.updateToolbarState();\n });\n \n // Prevent losing selection when interacting\n trigger.addEventListener('mousedown', e => e.preventDefault());\n input.addEventListener('mousedown', e => e.preventDefault());\n }\n });\n }\n private onSelectionChange = () => {\n if (!this.editorEl) return;\n const sel = document.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n if (this.editorEl.contains(range.commonAncestorContainer)) {\n this.lastRange = range.cloneRange();\n this.updateToolbarState();\n }\n };\n private saveSelection() {\n const sel = window.getSelection();\n if (sel && sel.rangeCount) this.lastRange = sel.getRangeAt(0).cloneRange();\n }\n private restoreSelection() {\n if (!this.lastRange) return;\n const sel = document.getSelection(); if (!sel) return;\n sel.removeAllRanges(); sel.addRange(this.lastRange);\n }\n private focusAndRestore() { this.editorEl?.focus(); this.restoreSelection(); }\n\n /*──────────────────────── LIST HELPERS ────────────────────────*/\nprivate insertList(type: 'ul' | 'ol') {\n this.restoreSelection();\n if (!this.lastRange) return;\n\n // build <ul>/<ol>\n const list = document.createElement(type);\n\n // grab the selected fragment\n const frag = this.lastRange.extractContents();\n const temp = document.createElement('div');\n temp.appendChild(frag);\n\n // wrap each top-level node in an <li>\n Array.from(temp.childNodes).forEach(n => {\n // skip empty whitespace text nodes\n if (n.nodeType === Node.TEXT_NODE && !n.textContent?.trim()) return;\n const li = document.createElement('li');\n li.appendChild(n); // moves the node!\n list.appendChild(li);\n });\n\n // insert list where the selection was\n this.lastRange.insertNode(list);\n this.afterListEdit(list);\n}\n\nprivate afterListEdit(node: Node) {\n const range = document.createRange();\n range.setStartAfter(node);\n range.collapse(true);\n const sel = window.getSelection();\n sel?.removeAllRanges();\n sel?.addRange(range);\n\n this.saveSelection();\n this.updateContent();\n this.updateToolbarState();\n}\n // Keep at least one <p><br></p> and wrap stray inline/text into a <p>\nprivate ensureAtLeastOneParagraph() {\n const el = this.editorEl;\n if (!el) return;\n\n // 1) If completely empty → seed a paragraph\n const onlyWhitespace =\n (el.textContent ?? '').replace(/\\u200B/g, '').trim() === '';\n if (el.childNodes.length === 0 || onlyWhitespace) {\n el.innerHTML = '<p><br></p>';\n return;\n }\n\n // 2) If no block elements exist, wrap whatever is there into a <p>\n const hasBlock = el.querySelector('p,h1,h2,h3,h4,h5,h6,ul,ol,table,blockquote,pre');\n if (!hasBlock) {\n const p = document.createElement('p');\n while (el.firstChild) p.appendChild(el.firstChild);\n if (!p.hasChildNodes()) p.appendChild(document.createElement('br'));\n el.appendChild(p);\n return;\n }\n\n // 3) Make sure the first/only empty <p> still has a <br>\n el.querySelectorAll('p').forEach(p => {\n if ((p.textContent ?? '').replace(/\\u200B/g, '') === '') {\n if (!p.innerHTML.toLowerCase().includes('<br')) p.innerHTML = '<br>';\n }\n });\n}\n\n\n\n // ---------- Toolbar/commands ----------\n private onToolbarCommand(cmd: string) {\n this.focusAndRestore();\n switch (cmd) {\n case 'bold': toggleInlineTag(this.editorEl, 'strong'); break;\n case 'italic': toggleInlineTag(this.editorEl, 'em'); break;\n case 'underline': toggleInlineTag(this.editorEl, 'u'); break;\n case 'left': setAlignment(this.editorEl, 'left'); break;\n case 'center': setAlignment(this.editorEl, 'center'); break;\n case 'right': setAlignment(this.editorEl, 'right'); break;\n case 'justify': setAlignment(this.editorEl, 'justify'); break;\n case 'ul': this.insertList('ul'); break;\n case 'ol': this.insertList('ol'); break;\n case 'link': insertOrEditLink(this.editorEl); break;\n case 'clear':\n const walker = document.createTreeWalker(this.editorEl, NodeFilter.SHOW_ELEMENT);\n const toUnwrap: HTMLElement[] = [];\n while (walker.nextNode()) {\n const el = walker.currentNode as HTMLElement;\n el.removeAttribute('style');\n if (['B','STRONG','I','EM','U','SPAN','FONT'].includes(el.tagName)) {\n toUnwrap.push(el);\n }\n }\n for (const el of toUnwrap) {\n while (el.firstChild) el.parentNode?.insertBefore(el.firstChild, el);\n el.remove();\n }\n this.ensureAtLeastOneParagraph();\n break;\n\n default: break;\n }\n this.updateContent(); this.updateToolbarState();\n }\n\n private setBtnActive(cmd: string, active: boolean) {\n const arr = this.buttonMap.get(cmd); if (!arr) return;\n for (const btn of arr) btn.toggleAttribute('data-active', !!active);\n }\n\n private updateToolbarState() {\n if (!this.editorEl) return;\n const sel = document.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n if (!this.editorEl.contains(range.commonAncestorContainer)) return;\n\n const startElm = nearestElement(range.startContainer) || this.editorEl;\n const comp = getComputedStyle(startElm);\n const block = closestBlock(range.startContainer, this.editorEl) || this.editorEl;\n\n const isBold = (() => {\n let n: Node | null = startElm;\n while (n && n !== this.editorEl) {\n if (n instanceof HTMLElement) {\n const t = n.tagName.toLowerCase();\n if (t === 'strong' || t === 'b') return true;\n const w = getComputedStyle(n).fontWeight;\n if (parseInt(w, 10) >= 600) return true;\n }\n n = n.parentNode;\n }\n return false;\n })();\n\n const isItalic = (() => {\n let n: Node | null = startElm;\n while (n && n !== this.editorEl) {\n if (n instanceof HTMLElement) {\n const t = n.tagName.toLowerCase();\n if (t === 'em' || t === 'i') return true;\n if (getComputedStyle(n).fontStyle === 'italic') return true;\n }\n n = n.parentNode;\n }\n return false;\n })();\n\n const isUnderline = (() => {\n let n: Node | null = startElm;\n while (n && n !== this.editorEl) {\n if (n instanceof HTMLElement) {\n const tdl = getComputedStyle(n).textDecorationLine;\n if (tdl && tdl.includes('underline')) return true;\n if (n.tagName.toLowerCase() === 'u') return true;\n }\n n = n.parentNode;\n }\n return false;\n })();\n\n const inLink = !!startElm.closest('a');\n\n const align = (block.style.textAlign || getComputedStyle(block).textAlign || 'start') as string;\n const alignNorm = align === 'start' ? 'left' : align;\n\n const inLi = !!startElm.closest('li');\n const listType = inLi ? (startElm.closest('ul,ol')?.tagName.toLowerCase() || '') : '';\n\n this.setBtnActive('bold', isBold);\n this.setBtnActive('italic', isItalic);\n this.setBtnActive('underline', isUnderline);\n this.setBtnActive('link', inLink);\n\n this.setBtnActive('left', alignNorm === 'left' && !['center','right','justify'].includes(alignNorm));\n this.setBtnActive('center', alignNorm === 'center');\n this.setBtnActive('right', alignNorm === 'right');\n this.setBtnActive('justify', alignNorm === 'justify');\n\n this.setBtnActive('ul', listType === 'ul');\n this.setBtnActive('ol', listType === 'ol');\n\n // Reflect heading\n if (this.headingSelect) {\n const tag = block.tagName.toLowerCase();\n const v = ['h1','h2','h3'].includes(tag) ? tag : 'p';\n if (this.headingSelect.value !== v) this.headingSelect.value = v;\n }\n\n // Reflect font family\n if (this.fontSelect) {\n const ff = (comp.fontFamily || '').replace(/[\"']/g, '').split(',')[0].trim().toLowerCase();\n if (ff) {\n for (const opt of Array.from(this.fontSelect.options)) {\n if (opt.value.toLowerCase() === ff) { this.fontSelect.value = opt.value; break; }\n }\n }\n }\n\n if (this.colorInput) {\n const hex = rgbToHex(comp.color);\n if (hex && this.colorInput.value.toLowerCase() !== hex.toLowerCase()) {\n this.colorInput.value = hex;\n }\n if (this.colorSwatchEl) this.colorSwatchEl.style.backgroundColor = this.colorInput.value;\n }\n \n\n if (this.bgColorInput) {\n const bg = getComputedStyle(startElm).backgroundColor;\n if (bg && !/transparent|rgba\\(\\s*0\\s*,\\s*0\\s*,\\s*0\\s*,\\s*0\\s*\\)/i.test(bg)) {\n const bgHex = rgbToHex(bg);\n if (bgHex && this.bgColorInput.value.toLowerCase() !== bgHex.toLowerCase()) {\n this.bgColorInput.value = bgHex;\n }\n }\n if (this.bgSwatchEl) this.bgSwatchEl.style.backgroundColor = this.bgColorInput.value;\n }\n }\n\n private syncPreview() {\n this.updateContent();\n }\n\n private updateContent() {\n if (!this.editorEl) return;\n this.ensureAtLeastOneParagraph();\n \n // Clone content for safe manipulation\n const clone = this.editorEl.cloneNode(true) as HTMLElement;\n \n // Walk the original DOM and the clone in parallel\n const origWalker = document.createTreeWalker(this.editorEl, NodeFilter.SHOW_ELEMENT);\n const cloneWalker = document.createTreeWalker(clone, NodeFilter.SHOW_ELEMENT);\n \n while (origWalker.nextNode() && cloneWalker.nextNode()) {\n const origEl = origWalker.currentNode as HTMLElement;\n const cloneEl = cloneWalker.currentNode as HTMLElement;\n const computed = window.getComputedStyle(origEl);\n \n // Dump *all* computed styles into a single inline style attribute\n const cssText = Array.from(computed)\n .map(prop => `${prop}:${computed.getPropertyValue(prop)}`)\n .join(';');\n \n cloneEl.setAttribute('style', cssText);\n }\n \n // Store the fully inlined HTML\n this.content = clone.innerHTML;\n \n // Live preview updates\n if (this.previewEl) this.previewEl.innerHTML = this.content;\n \n // Emit event with full inline styles\n this.dispatchEvent(new CustomEvent('content-changed', {\n detail: { content: this.content },\n bubbles: true,\n composed: true\n }));\n }\n \n \n \n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-rich-text-editor': NileRichTextEditor;\n }\n}\n\n"]}
|
@@ -7,7 +7,7 @@ export declare function toggleInlineTag(root: HTMLElement, tag: 'strong' | 'em'
|
|
7
7
|
export declare function setBlockTag(root: HTMLElement, tag: 'p' | 'h1' | 'h2' | 'h3'): void;
|
8
8
|
export declare function setAlignment(root: HTMLElement, align: 'left' | 'center' | 'right' | 'justify'): void;
|
9
9
|
export declare function setFontFamily(root: HTMLElement, family: string): void;
|
10
|
-
export declare function
|
11
|
-
export declare function
|
10
|
+
export declare function setForeColor(editor: HTMLElement, hex: string): void;
|
11
|
+
export declare function setBackColor(editor: HTMLElement, hex: string): void;
|
12
12
|
export declare function toggleList(root: HTMLElement, kind: 'ul' | 'ol'): void;
|
13
13
|
export declare function insertOrEditLink(root: HTMLElement, href?: string): void;
|