@aquera/nile-elements 0.1.67-beta-1.4 → 0.1.67-beta-1.6
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 +13 -6
- package/dist/index.js +143 -247
- 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 +68 -172
- package/dist/nile-rich-text-editor/nile-rich-text-editor.esm.js +1 -1
- package/dist/nile-rich-text-editor/nile-rte-select.cjs.js +1 -1
- package/dist/nile-rich-text-editor/nile-rte-select.cjs.js.map +1 -1
- package/dist/nile-rich-text-editor/nile-rte-select.esm.js +39 -39
- package/dist/nile-rich-text-editor/utils.cjs.js.map +1 -1
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.css.js +68 -172
- 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 +0 -3
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.js +35 -125
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.js.map +1 -1
- package/dist/src/nile-rich-text-editor/nile-rte-select.js +62 -57
- package/dist/src/nile-rich-text-editor/nile-rte-select.js.map +1 -1
- package/dist/src/nile-rich-text-editor/rte-utils/content.d.ts +2 -0
- package/dist/src/nile-rich-text-editor/rte-utils/content.js +25 -0
- package/dist/src/nile-rich-text-editor/rte-utils/content.js.map +1 -0
- package/dist/src/nile-rich-text-editor/rte-utils/css.d.ts +1 -0
- package/dist/src/nile-rich-text-editor/rte-utils/css.js +9 -0
- package/dist/src/nile-rich-text-editor/rte-utils/css.js.map +1 -0
- package/dist/src/nile-rich-text-editor/rte-utils/dom.d.ts +2 -0
- package/dist/src/nile-rich-text-editor/rte-utils/dom.js +48 -0
- package/dist/src/nile-rich-text-editor/rte-utils/dom.js.map +1 -0
- package/dist/src/nile-rich-text-editor/rte-utils/formatting.d.ts +2 -0
- package/dist/src/nile-rich-text-editor/rte-utils/formatting.js +69 -0
- package/dist/src/nile-rich-text-editor/rte-utils/formatting.js.map +1 -0
- package/dist/src/nile-rich-text-editor/rte-utils/keys.d.ts +2 -0
- package/dist/src/nile-rich-text-editor/rte-utils/keys.js +38 -0
- package/dist/src/nile-rich-text-editor/rte-utils/keys.js.map +1 -0
- package/dist/src/nile-rich-text-editor/rte-utils/lists.d.ts +2 -0
- package/dist/src/nile-rich-text-editor/rte-utils/lists.js +28 -0
- package/dist/src/nile-rich-text-editor/rte-utils/lists.js.map +1 -0
- package/dist/src/nile-rich-text-editor/rte-utils/selection.d.ts +17 -0
- package/dist/src/nile-rich-text-editor/rte-utils/selection.js +39 -0
- package/dist/src/nile-rich-text-editor/rte-utils/selection.js.map +1 -0
- package/dist/src/nile-rich-text-editor/rte-utils/toolbar.d.ts +28 -0
- package/dist/src/nile-rich-text-editor/rte-utils/toolbar.js +161 -0
- package/dist/src/nile-rich-text-editor/rte-utils/toolbar.js.map +1 -0
- package/dist/src/nile-rich-text-editor/rte-utils/toolbarState.d.ts +13 -0
- package/dist/src/nile-rich-text-editor/rte-utils/toolbarState.js +119 -0
- package/dist/src/nile-rich-text-editor/rte-utils/toolbarState.js.map +1 -0
- package/dist/src/nile-rich-text-editor/rte-utils/vars.d.ts +1 -0
- package/dist/src/nile-rich-text-editor/rte-utils/vars.js +14 -0
- package/dist/src/nile-rich-text-editor/rte-utils/vars.js.map +1 -0
- 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 +68 -172
- package/src/nile-rich-text-editor/nile-rich-text-editor.ts +74 -160
- package/src/nile-rich-text-editor/nile-rte-select.ts +178 -173
- package/src/nile-rich-text-editor/utils.ts +342 -341
- 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\nexport 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\nexport 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\nexport 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\nexport 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\nexport 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\nexport 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\nexport 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\nexport 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(\neditor: HTMLElement,\nnode: Node | null,\ndataAttr: 'data-rte-color' | 'data-rte-bg'\n): HTMLSpanElement | null {\nwhile (node && node !== editor) {\n if (node instanceof HTMLSpanElement && node.hasAttribute(dataAttr)) {\n return node;\n }\n node = node.parentNode;\n}\nreturn null;\n}\n\n\nfunction applyInlineStyle(\neditor: HTMLElement,\ncssProp: 'color' | 'backgroundColor',\nvalue: string,\ndataAttr: 'data-rte-color' | 'data-rte-bg'\n) {\nconst sel = window.getSelection();\nif (!sel || sel.rangeCount === 0) return;\nconst r0 = sel.getRangeAt(0);\nif (!editor.contains(r0.commonAncestorContainer)) return;\n\nconst range = r0.cloneRange();\n\n \nif (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\nconst leftEdge = enclosingStyledSpan(editor, range.startContainer, dataAttr);\nconst rightEdge = enclosingStyledSpan(editor, range.endContainer, dataAttr);\nif (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\nconst 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\nconst toProcess: Text[] = [];\nlet t: Node | null;\nwhile ((t = walker.nextNode())) toProcess.push(t as Text);\n\ntoProcess.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\nmergeAdjacentStyledSpans(editor, dataAttr, cssProp);\n\n// restore selection\nsel.removeAllRanges(); sel.addRange(range);\n}\n\n// Is the range covering the entire node's contents?\nfunction rangeCoversWholeNode(range: Range, node: Node): boolean {\nconst all = document.createRange();\nall.selectNodeContents(node);\nreturn (\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 {\nif (r.collapsed) return false;\nconst text = r.cloneContents().textContent || '';\nreturn text.length > 0;\n}\n\n// Split one styled span into [left][middle][right]; recolor only middle\nfunction splitAndRecolorWithinSpan(\nspan: HTMLSpanElement,\nrange: Range,\ndataAttr: 'data-rte-color' | 'data-rte-bg',\ncssProp: 'color' | 'backgroundColor',\nnewValue: string\n): HTMLSpanElement {\nconst oldValue = (span.style as any)[cssProp];\n\nconst left = document.createRange();\nleft.setStart(span, 0);\nleft.setEnd(range.startContainer, range.startOffset);\n\nconst right = document.createRange();\nright.setStart(range.endContainer, range.endOffset);\nright.setEnd(span, span.childNodes.length);\n\n// Build replacement fragment\nconst frag = document.createDocumentFragment();\n\n// helper to make a styled clone shell\nconst 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\nif (hasRangeContent(left)) {\n const sLeft = makeShell(oldValue);\n sLeft.appendChild(left.cloneContents());\n frag.appendChild(sLeft);\n}\n\nconst mid = makeShell(newValue);\nmid.appendChild(range.cloneContents());\nfrag.appendChild(mid);\n\nif (hasRangeContent(right)) {\n const sRight = makeShell(oldValue);\n sRight.appendChild(right.cloneContents());\n frag.appendChild(sRight);\n}\n\n// Replace original span\nspan.replaceWith(frag);\nreturn mid; // return the middle span so caller can restore selection\n}\n\n\nfunction mergeAdjacentStyledSpans(\nroot: HTMLElement,\ndataAttr: 'data-rte-color' | 'data-rte-bg',\ncssProp: 'color' | 'backgroundColor'\n) {\nconst spans = Array.from(root.querySelectorAll<HTMLSpanElement>(`span[${dataAttr}]`));\n\nconst valOf = (el: HTMLElement) => (el.style as any)[cssProp];\n\nspans.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) {\napplyInlineStyle(editor, 'color', hex, 'data-rte-color');\n}\nexport function setBackColor(editor: HTMLElement, hex: string) {\napplyInlineStyle(editor, 'backgroundColor', hex, 'data-rte-bg');\n}\n\n\nexport 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\nexport 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
|
+
{"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,215 +1,111 @@
|
|
1
1
|
// rte-styles.ts
|
2
2
|
import { css } from 'lit';
|
3
3
|
export const styles = css `
|
4
|
-
|
5
|
-
|
6
|
-
all: revert; /* keep your reset… */
|
7
|
-
box-sizing: border-box; /* …but preserve sane layout */
|
8
|
-
overflow-wrap: anywhere; /* break long words/URLs */
|
9
|
-
word-break: break-word;
|
4
|
+
.editor * {
|
5
|
+
all: revert;
|
10
6
|
}
|
11
7
|
|
12
|
-
|
13
|
-
nile-rich-text-editor,
|
14
|
-
.editor {
|
15
|
-
display: block;
|
16
|
-
min-width: 0;
|
17
|
-
max-width: 100%;
|
18
|
-
font-family: inherit;
|
19
|
-
}
|
20
|
-
|
21
|
-
/* ---- TOOLBAR ------------------------------------------------------------- */
|
22
|
-
nile-rte-toolbar,
|
23
|
-
.toolbar {
|
24
|
-
display: flex;
|
25
|
-
flex-wrap: wrap; /* allow wrapping to next row */
|
26
|
-
align-items: center;
|
27
|
-
gap: 8px;
|
28
|
-
padding: 8px;
|
29
|
-
border: 1px solid #e5e7eb;
|
30
|
-
border-bottom: none;
|
31
|
-
border-radius: 8px 8px 0 0;
|
32
|
-
background: #fff;
|
33
|
-
box-sizing: border-box;
|
34
|
-
width: 100%;
|
35
|
-
}
|
36
|
-
|
37
|
-
/* allow children to shrink instead of forcing overflow */
|
38
|
-
nile-rte-toolbar > *,
|
39
|
-
.toolbar > * {
|
40
|
-
flex: 0 1 auto;
|
41
|
-
min-width: 0;
|
42
|
-
}
|
8
|
+
nile-rich-text-editor { position: relative; display: block; font-family: inherit; }
|
43
9
|
|
44
|
-
|
10
|
+
|
45
11
|
nile-rte-toolbar-item > nile-button::part(base) {
|
46
|
-
|
47
|
-
height:
|
48
|
-
padding: 0 6px;
|
12
|
+
|
13
|
+
width:32px; height:32px; padding:0px 6px;
|
49
14
|
border: none;
|
50
15
|
}
|
51
|
-
|
52
|
-
nile-rte-toolbar-item > button,
|
53
|
-
.toolbar button,
|
54
|
-
nile-rte-toolbar button {
|
55
|
-
border: 1px solid #e5e7eb;
|
56
|
-
background: #fff;
|
57
|
-
border-radius: 6px;
|
58
|
-
cursor: pointer;
|
59
|
-
}
|
60
|
-
|
61
|
-
nile-rte-toolbar-item > button nile-icon { pointer-events: none; }
|
62
|
-
|
63
|
-
nile-rte-toolbar-item > button.active {
|
64
|
-
border-color: #2563eb;
|
65
|
-
background: #eff6ff;
|
66
|
-
}
|
67
|
-
|
68
|
-
/* selects should be able to shrink on small screens */
|
69
|
-
nile-rte-select select {
|
70
|
-
height: 32px;
|
71
|
-
border: 1px solid #e5e7eb;
|
72
|
-
border-radius: 6px;
|
73
|
-
background: #fff;
|
74
|
-
min-width: 0;
|
75
|
-
max-width: 100%;
|
76
|
-
}
|
77
|
-
|
78
|
-
/* color input */
|
79
|
-
nile-rte-color input[type="color"] {
|
80
|
-
height: 32px;
|
81
|
-
width: 36px;
|
82
|
-
border: 1px solid #e5e7eb;
|
83
|
-
padding: 0;
|
84
|
-
border-radius: 6px;
|
85
|
-
background: #fff;
|
86
|
-
}
|
87
|
-
|
88
|
-
nile-rte-divider {
|
89
|
-
width: 1px;
|
90
|
-
height: 20px;
|
91
|
-
background: #e5e7eb;
|
92
|
-
display: inline-block;
|
93
|
-
margin: 0 4px;
|
94
|
-
}
|
95
|
-
|
96
|
-
/* ---- EDITOR AREA --------------------------------------------------------- */
|
97
|
-
.editor {
|
98
|
-
min-height: 160px;
|
99
|
-
padding: 12px;
|
100
|
-
border: 1px solid #e5e7eb;
|
101
|
-
border-radius: 0 0 8px 8px;
|
102
|
-
background: #fff;
|
103
|
-
outline: none;
|
104
|
-
white-space: pre-wrap;
|
105
|
-
tab-size: 4;
|
106
|
-
-moz-tab-size: 4;
|
107
|
-
overflow-wrap: anywhere;
|
108
|
-
box-sizing: border-box;
|
109
|
-
width: 100%;
|
110
|
-
}
|
111
|
-
|
112
16
|
|
113
|
-
|
114
|
-
.editor h1, .editor h2, .editor h3, .editor h4, .editor h5, .editor h6 {
|
115
|
-
margin-left: 0;
|
116
|
-
margin-right: 0;
|
117
|
-
font-weight: bold;
|
118
|
-
}
|
119
|
-
.editor h1 { font-size: 2em; margin: 0.67em 0; }
|
120
|
-
.editor h2 { font-size: 1.5em; margin: 0.83em 0; }
|
121
|
-
.editor h3 { font-size: 1.17em; margin: 1em 0; }
|
122
|
-
.editor h4 { font-size: 1em; margin: 1.33em 0; }
|
123
|
-
.editor h5 { font-size: 0.83em; margin: 1.67em 0; }
|
124
|
-
.editor h6 { font-size: 0.67em; margin: 2.33em 0; }
|
125
|
-
|
126
|
-
/* Keep typical wide content inside the box */
|
127
|
-
.editor img,
|
128
|
-
.editor svg,
|
129
|
-
.editor table,
|
130
|
-
.editor pre,
|
131
|
-
.editor code,
|
132
|
-
.editor blockquote {
|
133
|
-
max-width: 100%;
|
134
|
-
box-sizing: border-box;
|
135
|
-
}
|
136
|
-
|
137
|
-
/* Make <pre> wrap on small screens */
|
138
|
-
.editor pre {
|
139
|
-
white-space: pre-wrap;
|
140
|
-
word-break: break-word;
|
141
|
-
}
|
142
|
-
|
143
|
-
/* Long links shouldn’t push layout */
|
144
|
-
.editor a { word-break: break-all; }
|
17
|
+
|
145
18
|
|
146
|
-
/* ---- PREVIEW ------------------------------------------------------------- */
|
147
|
-
nile-rte-preview {
|
148
|
-
display: block;
|
149
|
-
margin-top: 10px;
|
150
|
-
padding: 10px;
|
151
|
-
border: 1px dashed #cbd5e1;
|
152
|
-
border-radius: 8px;
|
153
|
-
background: #fafafa;
|
154
|
-
}
|
155
19
|
|
156
|
-
|
157
|
-
|
20
|
+
.toolbar, nile-rte-toolbar {
|
21
|
+
display:flex; align-items:center; gap:6px; padding:8px;
|
22
|
+
border:1px solid #e5e7eb; border-bottom:none; border-radius:8px 8px 0 0; background:#fff;
|
23
|
+
}
|
24
|
+
|
25
|
+
nile-rte-toolbar-item > button, .toolbar button, nile-rte-toolbar button {
|
26
|
+
border:1px solid #e5e7eb; background:#fff; border-radius:6px;
|
27
|
+
cursor:pointer;
|
28
|
+
}
|
29
|
+
|
30
|
+
|
31
|
+
/* Ensure clicks hit the button (not nested icon internals) */
|
32
|
+
nile-rte-toolbar-item > button nile-icon { pointer-events:none; }
|
33
|
+
|
34
|
+
nile-rte-toolbar-item > button.active { border-color:#2563eb; background:#eff6ff; }
|
35
|
+
nile-rte-select select { height:32px; border:1px solid #e5e7eb; border-radius:6px; background:#fff; }
|
36
|
+
nile-rte-color input[type="color"] { height:32px; width:36px; border:1px solid #e5e7eb; padding:0; border-radius:6px; background:#fff; }
|
37
|
+
nile-rte-divider { width:1px; height:20px; background:#e5e7eb; display:inline-block; margin:0 4px; }
|
38
|
+
|
39
|
+
.editor p { margin:1em 0; }
|
40
|
+
.editor h1 { font-size:2em, all: revert; display: block;
|
41
|
+
font-size: 2em;
|
42
|
+
margin-top: 0.67em;
|
43
|
+
margin-bottom: 0.67em;
|
44
|
+
margin-left: 0;
|
45
|
+
margin-right: 0;
|
46
|
+
font-weight: bold; }
|
47
|
+
.editor h2 { all: revert; display: block;
|
48
|
+
font-size: 1.5em;
|
49
|
+
margin-top: 0.83em;
|
50
|
+
margin-bottom: 0.83em;
|
51
|
+
margin-left: 0;
|
52
|
+
margin-right: 0;
|
53
|
+
font-weight: bold;}
|
54
|
+
.editor h3 { font-size:1.17em }
|
55
|
+
.editor h4 { font-size:1em }
|
56
|
+
.editor h5 { font-size:0.83em }
|
57
|
+
.editor h6 { font-size:0.67em }
|
58
|
+
|
59
|
+
.editor { min-height:160px; padding:12px; border:1px solid #e5e7eb; border-radius:0 0 8px 8px; background:#fff; outline:none; white-space: pre-wrap;
|
60
|
+
tab-size: 4;
|
61
|
+
-moz-tab-size: 4; }
|
62
|
+
nile-rte-preview { display:block; margin-top:10px; padding:10px; border:1px dashed #cbd5e1; border-radius:8px; background:#fafafa; }
|
63
|
+
|
64
|
+
.rte-color-trigger {
|
158
65
|
display: inline-flex;
|
159
66
|
align-items: center;
|
160
67
|
justify-content: center;
|
161
|
-
|
162
|
-
padding: 0 8px;
|
163
|
-
border: 1px solid var(--nile-color-border, #d9d9d9);
|
68
|
+
/* border: 1px solid var(--nile-color-border, #d9d9d9); */
|
164
69
|
border-radius: 6px;
|
165
70
|
background: #fff;
|
166
71
|
cursor: pointer;
|
72
|
+
border:none;
|
73
|
+
|
74
|
+
|
75
|
+
}
|
76
|
+
nile-button.rte-color-trigger::part(base){
|
77
|
+
width:32px; height:32px; padding:0px 6px;
|
167
78
|
}
|
168
79
|
.rte-color-trigger .glyph-stack {
|
169
|
-
display: grid;
|
170
|
-
grid-auto-rows: max-content;
|
80
|
+
display: grid; /* stack vertically */
|
81
|
+
grid-auto-rows: max-content;
|
171
82
|
align-items: center;
|
172
83
|
justify-items: center;
|
173
84
|
line-height: 1;
|
174
85
|
}
|
86
|
+
|
175
87
|
.rte-color-trigger .glyph {
|
176
88
|
font-size: 14px;
|
177
89
|
line-height: 1;
|
178
|
-
margin-bottom: 2px;
|
90
|
+
margin-bottom: 2px;
|
179
91
|
}
|
92
|
+
|
180
93
|
.rte-color-trigger .underline {
|
181
94
|
width: 18px;
|
182
95
|
height: 3px;
|
183
96
|
border-radius: 2px;
|
184
|
-
background: currentColor;
|
97
|
+
background: currentColor;
|
185
98
|
}
|
99
|
+
|
100
|
+
|
186
101
|
.rte-color-trigger .swatch-box {
|
187
102
|
width: 18px;
|
188
103
|
height: 16px;
|
189
104
|
border-radius: 4px;
|
190
105
|
border: 1px solid rgba(0,0,0,0.35);
|
191
|
-
background: currentColor;
|
106
|
+
background: currentColor; /* overridden via JS */
|
192
107
|
}
|
193
108
|
|
194
|
-
/* ---- RESPONSIVE TWEAKS --------------------------------------------------- */
|
195
|
-
@media (max-width: 900px) {
|
196
|
-
nile-rte-toolbar { gap: 6px; padding: 6px; }
|
197
|
-
nile-rte-select select { max-width: 160px; }
|
198
|
-
}
|
199
|
-
|
200
|
-
@media (max-width: 600px) {
|
201
|
-
nile-rte-toolbar { gap: 4px; }
|
202
|
-
nile-rte-select select { max-width: 120px; }
|
203
|
-
/* optional fallback if wrapping still feels tight */
|
204
|
-
/* nile-rte-toolbar { overflow-x: auto; } */
|
205
|
-
}
|
206
|
-
|
207
|
-
@media (max-width: 420px) {
|
208
|
-
nile-rte-select select { max-width: 100px; }
|
209
|
-
nile-rte-divider { display: none; }
|
210
|
-
}
|
211
|
-
|
212
|
-
|
213
109
|
`;
|
214
110
|
export default [styles];
|
215
111
|
//# sourceMappingURL=nile-rich-text-editor.css.js.map
|
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0GxB,CAAC;AAEF,eAAe,CAAC,MAAM,CAAC,CAAC","sourcesContent":["// rte-styles.ts\nimport { css } from 'lit';\n\nexport const styles = css`\n .editor * {\n all: revert;\n}\n\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:6px; 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, all: revert; display: block;\nfont-size: 2em;\nmargin-top: 0.67em;\nmargin-bottom: 0.67em;\nmargin-left: 0;\nmargin-right: 0;\nfont-weight: bold; }\n .editor h2 { all: revert;\tdisplay: block;\nfont-size: 1.5em;\nmargin-top: 0.83em;\nmargin-bottom: 0.83em;\nmargin-left: 0;\nmargin-right: 0;\nfont-weight: bold;}\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 /* border: 1px solid var(--nile-color-border, #d9d9d9); */\n border-radius: 6px;\n background: #fff;\n cursor: pointer;\n border:none;\n \n\n}\nnile-button.rte-color-trigger::part(base){\n width:32px; height:32px; padding:0px 6px;\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; \n}\n\n.rte-color-trigger .underline {\n width: 18px;\n height: 3px;\n border-radius: 2px;\n background: currentColor; \n}\n\n \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];"]}
|
@@ -34,7 +34,6 @@ export declare class NileRichTextEditor extends LitElement {
|
|
34
34
|
connectedCallback(): void;
|
35
35
|
disconnectedCallback(): void;
|
36
36
|
private ensureEditor;
|
37
|
-
private onPaste;
|
38
37
|
private wireEditor;
|
39
38
|
private onEditorKeydown;
|
40
39
|
private wireAuthoredToolbar;
|
@@ -50,8 +49,6 @@ export declare class NileRichTextEditor extends LitElement {
|
|
50
49
|
private updateToolbarState;
|
51
50
|
private syncPreview;
|
52
51
|
private updateContent;
|
53
|
-
private collectMinimalInline;
|
54
|
-
private normalizeFontFamily;
|
55
52
|
}
|
56
53
|
declare global {
|
57
54
|
interface HTMLElementTagNameMap {
|