@aquera/nile-elements 1.6.6 → 1.6.7
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/README.md +3 -0
- package/dist/index.js +6 -3
- 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 +5 -2
- package/dist/nile-rich-text-editor/nile-rich-text-editor.esm.js +1 -1
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.css.js +5 -2
- 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 +2 -1
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.js +9 -0
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.js.map +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.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 +5 -2
- package/src/nile-rich-text-editor/nile-rich-text-editor.ts +12 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nile-rich-text-editor.cjs.js","sources":["../../../src/nile-rich-text-editor/nile-rich-text-editor.ts"],"sourcesContent":["import { 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';\nimport './nile-rte-link';\n\nimport {\n closestBlock,\n nearestElement,\n rgbToHex,\n toggleInlineTag,\n setBlockTag,\n setAlignment,\n setFontFamily,\n setForeColor,\n setBackColor,\n toggleList,\n} from './utils/index';\n\nimport { styles } from './nile-rich-text-editor.css';\n\ntype MentionsConfig = Record<string, { key: string; label: string }[]>;\n\nconst DEFAULT_ICONS: Record<string, string> = {\n bold: 'format_bold',\n italic: 'format_italic',\n underline: 'format_underline',\n link: 'link_2',\n left: 'format_align_left',\n center: 'format_align_middle',\n right: 'format_align_right',\n justify: 'format_align_justify',\n ul: 'format_list_bulleted',\n ol: 'format_list_numbered',\n clear: 'format_clear'\n};\n\nconst DEFAULT_IMPORTANT_PROPS = [\n 'font-weight',\n 'font-style',\n 'text-decoration',\n 'color',\n 'background-color',\n 'font-size',\n 'font-family',\n 'text-align',\n 'line-height',\n 'letter-spacing',\n 'white-space',\n 'vertical-align',\n 'list-style-position',\n 'padding-inline-start',\n];\n\n@customElement('nile-rich-text-editor')\nexport class NileRichTextEditor extends LitElement {\n protected createRenderRoot() {\n return this;\n }\n\n @property({ type: String, attribute: true, reflect: true }) value = '';\n @property({ type: Boolean, attribute: true, reflect: true }) noStyles = false;\n @property({ type: Boolean, attribute: true, reflect: true }) disabled = false; \n @property({ type: Boolean, attribute: 'singlelineeditor', reflect: true }) singleLineEditor =\n false;\n @property({ type: String }) placeholder = '';\n\n\n @property({\n attribute: 'mentions',\n reflect: true,\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(\n i =>\n i &&\n typeof i.key === 'string' &&\n typeof i.label === 'string'\n )\n .map(i => ({ key: i.key, label: i.label }));\n }\n }\n return out;\n } catch {\n return {};\n }\n },\n toAttribute: (v: MentionsConfig) => JSON.stringify(v),\n },\n })\n mentions: MentionsConfig = {};\n\n @property({\n attribute: 'whitelist',\n reflect: false,\n converter: {\n fromAttribute: (value: string): string[] => {\n try {\n const parsed = JSON.parse(value);\n return Array.isArray(parsed) ? parsed.filter(v => typeof v === 'string') : [];\n } catch {\n return [];\n }\n },\n },\n })\n whitelist: string[] = [];\n\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 private buttonMap = new Map<string, HTMLElement[]>();\n private headingSelect: HTMLSelectElement | null = null;\n private fontSelect: HTMLSelectElement | null = null;\n private colorInput: HTMLInputElement | null = null;\n private bgColorInput: HTMLInputElement | null = null;\n private colorSwatchEl: HTMLElement | null = null;\n private bgSwatchEl: HTMLElement | null = null;\n private containerEl: HTMLElement | null = null;\n private linkEl: HTMLElement | null = null;\n\n private mentionsEl: HTMLElement | null = null;\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 this.injectCss(styles.cssText);\n this.ensureStructure();\n if (this.placeholder && this.editorEl) {\n this.editorEl.dataset.placeholder = this.placeholder;\n }\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 if (this.toolbarEl) this.wireAuthoredToolbar(this.toolbarEl);\n this.mentionsEl = this.querySelector('nile-rte-mentions');\n if (this.mentionsEl) {\n (this.mentionsEl as any).attach?.(this.editorEl, this as HTMLElement);\n (this.mentionsEl as any).setExternalConfig?.(this.mentions);\n }\n\n this.wireEditor();\n document.addEventListener('selectionchange', this.onSelectionChange, {\n passive: true,\n });\n this.updateToolbarState();\n this.syncPreview();\n }\n\n private ensureStructure() {\n this.toolbarEl = this.querySelector('nile-rte-toolbar');\n this.previewEl = this.querySelector('nile-rte-preview');\n\n // container for toolbar + editor\n this.containerEl = this.querySelector('.rte-container') as HTMLElement;\n if (!this.containerEl) {\n this.containerEl = document.createElement('div');\n this.containerEl.className = 'rte-container';\n this.appendChild(this.containerEl);\n }\n\n // ensure editor\n this.ensureEditor();\n\n // put toolbar + editor inside container\n if (this.toolbarEl && this.toolbarEl.parentElement !== this.containerEl) {\n this.containerEl.appendChild(this.toolbarEl);\n }\n if (this.editorEl.parentElement !== this.containerEl) {\n this.containerEl.appendChild(this.editorEl);\n }\n\n if (this.previewEl) {\n if (this.previewEl.parentElement !== this) {\n this.appendChild(this.previewEl);\n }\n\n if (this.previewEl.previousElementSibling !== this.containerEl) {\n this.insertBefore(this.previewEl, this.containerEl.nextSibling);\n }\n }\n }\n\n private updateContentWithMention(mentionDetail: any) {\n this.updateContent();\n this.dispatchEvent(\n new CustomEvent('nile-change', {\n detail: {\n content: this.content,\n mention: mentionDetail,\n },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n disconnectedCallback(): void {\n this.unwireEditor();\n document.removeEventListener('selectionchange', this.onSelectionChange);\n\n if (this.mentionsEl && (this.mentionsEl as any).detach) {\n (this.mentionsEl as any).detach();\n }\n super.disconnectedCallback();\n }\n protected updated(changed: Map<string, any>) {\n if (changed.has('value')) {\n if (this.editorEl && this.value !== this.editorEl.innerHTML) {\n this.editorEl.innerHTML = this.value || '<p><br></p>';\n this.content = this.editorEl.innerHTML;\n this.syncPreview();\n }\n }\n if (changed.has('singleLineEditor')) {\n if (this.editorEl) {\n this.editorEl.classList.toggle('single-line', this.singleLineEditor);\n }\n if (this.previewEl) {\n this.previewEl.classList.toggle('single-line', this.singleLineEditor);\n }\n }\n if (changed.has('disabled') && this.editorEl) {\n this.editorEl.setAttribute('contenteditable', this.disabled ? 'false' : 'true');\n this.editorEl.tabIndex = this.disabled ? -1 : 0;\n if (this.linkEl) {\n (this.linkEl as any).disabled = this.disabled;\n }\n }\n if (changed.has('placeholder') && this.editorEl) {\n if (this.placeholder) {\n this.editorEl.dataset.placeholder = this.placeholder;\n } else {\n delete this.editorEl.dataset.placeholder;\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', this.disabled ? 'false' : 'true');\n editor.tabIndex = this.disabled ? -1 : 0;\n this.editorEl = editor;\n }\n if (this.placeholder) {\n this.editorEl.dataset.placeholder = this.placeholder;\n }\n \n if (!this.editorEl.innerHTML.trim()) {\n this.editorEl.innerHTML = '<p><br></p>';\n }\n }\n\n private unwrapMention(span: HTMLElement, preserveText = true) {\n const parent = span.parentNode;\n if (!parent) return;\n\n const txt = preserveText\n ? (span.textContent ?? '').replace(/\\u200B/g, '')\n : '';\n const textNode = document.createTextNode(txt);\n parent.insertBefore(textNode, span);\n parent.removeChild(span);\n const r = document.createRange();\n r.setStartAfter(textNode);\n r.collapse(true);\n const sel = window.getSelection();\n sel?.removeAllRanges();\n sel?.addRange(r);\n }\n\n private scrubBrokenMentions() {\n if (!this.editorEl) return;\n const mentions = this.editorEl.querySelectorAll('span.mention');\n\n mentions.forEach(m => {\n const span = m as HTMLElement;\n const key = span.getAttribute('data-mention-key');\n const label = span.getAttribute('data-mention-label');\n const trigger = span.getAttribute('data-mention-trigger') || '';\n const text = (span.textContent ?? '').replace(/\\u200B/g, '').trim();\n\n const looksValid =\n !!key &&\n !!label &&\n text.length > 0 &&\n text.startsWith(trigger) &&\n text.includes(label);\n\n if (!text || !looksValid) {\n this.unwrapMention(span, true);\n return;\n }\n });\n }\n\n private onEditorClick = (e: MouseEvent) => {\n if (this.disabled) { e.preventDefault(); return; }\n const anchor = (e.target as HTMLElement).closest?.('a');\n if (anchor) e.preventDefault();\n };\n\n private onEditorPaste = (e: ClipboardEvent) => {\n if (this.disabled) e.preventDefault();\n };\n\n private onEditorDrop = (e: DragEvent) => {\n if (this.disabled) e.preventDefault();\n };\n\n private onEditorInput = () => {\n if (this.disabled) return;\n this.ensureAtLeastOneParagraph();\n this.scrubBrokenMentions();\n this.updateContent();\n this.updateToolbarState();\n };\n\n private onEditorMouseup = () => {\n this.saveSelection();\n this.updateToolbarState();\n };\n\n private onEditorKeyup = (e: KeyboardEvent) => {\n this.saveSelection();\n\n if (\n [\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'ArrowDown',\n 'Home',\n 'End',\n ].includes(e.key)\n ) {\n this.updateToolbarState();\n }\n };\n\n private wireEditor() {\n this.editorEl.addEventListener('click', this.onEditorClick);\n this.editorEl.addEventListener('input', this.onEditorInput);\n this.editorEl.addEventListener('mouseup', this.onEditorMouseup);\n this.editorEl.addEventListener('keyup', this.onEditorKeyup);\n this.editorEl.addEventListener('keydown', this.onEditorKeydown);\n this.editorEl.addEventListener('paste', this.onEditorPaste);\n this.editorEl.addEventListener('drop', this.onEditorDrop);\n }\n\n private unwireEditor() {\n if (!this.editorEl) return;\n this.editorEl.removeEventListener('click', this.onEditorClick);\n this.editorEl.removeEventListener('input', this.onEditorInput);\n this.editorEl.removeEventListener('mouseup', this.onEditorMouseup);\n this.editorEl.removeEventListener('keyup', this.onEditorKeyup);\n this.editorEl.removeEventListener('keydown', this.onEditorKeydown);\n this.editorEl.removeEventListener('paste', this.onEditorPaste);\n this.editorEl.removeEventListener('drop', this.onEditorDrop);\n }\n\n private onEditorKeydown = (e: KeyboardEvent) => {\n if (this.disabled) {\n e.preventDefault();\n return;\n }\n if (this.singleLineEditor && e.key === 'Enter' && e.shiftKey) {\n e.preventDefault();\n return;\n }\n if (e.ctrlKey && e.key.toLowerCase() === 'i') {\n e.preventDefault();\n toggleInlineTag(this.editorEl, 'em');\n this.updateContent();\n this.updateToolbarState();\n }\n\n if (this.singleLineEditor && e.key === 'Enter') {\n e.preventDefault();\n return;\n }\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 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 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 range.deleteContents();\n const tabNode = document.createTextNode('\\t');\n range.insertNode(tabNode);\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 private wireAuthoredToolbar(tb: HTMLElement) {\n this.buttonMap.clear();\n this.headingSelect = null;\n this.fontSelect = null;\n this.colorInput = null;\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 as any).disabled = this.disabled;\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 if (tag === 'nile-rte-link') {\n (child as any).editorEl = this.editorEl;\n (child as any).disabled = this.disabled;\n this.linkEl = child as HTMLElement;\n child.addEventListener('nile-link-changed', () => {\n this.updateContent();\n this.updateToolbarState();\n });\n return;\n }\n\n if (tag === 'nile-rte-toolbar-item') {\n let btn = child.querySelector(\n ':scope > nile-button'\n ) 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 if (!btn) {\n btn = document.createElement('nile-button');\n (btn as any).variant = 'tertiary';\n (btn as any).size = 'small';\n }\n (btn as any).disabled = this.disabled;\n\n if (iconAttr) {\n btn.innerHTML = `<nile-icon name=\"${iconAttr}\" color=\"${this.disabled ? 'var(--nile-colors-neutral-500, var(--ng-colors-fg-disabled-subtle))' : 'var(--nile-colors-dark-900, var(--ng-colors-text-primary-900))'}\" ></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=\"${this.disabled ? 'var(--nile-colors-neutral-500, var(--ng-colors-fg-disabled-subtle))' : 'var(--nile-colors-dark-900, var(--ng-colors-text-primary-900))'}\" ></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 if (!btn.isConnected) {\n if (this.disabled) {\n child.appendChild(btn);\n } else {\n const tooltip = document.createElement('nile-lite-tooltip');\n tooltip.setAttribute('content', label);\n tooltip.appendChild(btn);\n child.appendChild(tooltip);\n }\n }\n\n btn.setAttribute('aria-label', label);\n btn.addEventListener('mousedown', e => e.preventDefault());\n btn.addEventListener('click', () => this.onToolbarCommand(cmd));\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 child.addEventListener('change', (e: any) => {\n this.focusAndRestore();\n\n const val = e.detail as string;\n\n if (type === 'heading') {\n setBlockTag(this.editorEl, val as any);\n } else if (type === 'font') {\n setFontFamily(this.editorEl, val);\n }\n\n this.updateContent();\n this.updateToolbarState();\n });\n\n return;\n }\n\n if (tag === 'nile-rte-color') {\n child.addEventListener('change', (e: any) => {\n this.focusAndRestore();\n const { mode, value } = e.detail;\n\n if (mode === 'backColor') {\n setBackColor(this.editorEl, value);\n } else {\n setForeColor(this.editorEl, value);\n }\n\n this.updateContent();\n this.updateToolbarState();\n });\n return;\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();\n if (!sel) return;\n sel.removeAllRanges();\n sel.addRange(this.lastRange);\n }\n private focusAndRestore() {\n this.editorEl?.focus();\n this.restoreSelection();\n }\n private getCleanContent(): string {\n const clone = this.editorEl.cloneNode(true) as HTMLElement;\n clone.querySelectorAll<HTMLElement>('*').forEach(el => {\n el.removeAttribute('style');\n });\n \n return clone.innerHTML;\n }\n \n private insertList(type: 'ul' | 'ol') {\n this.restoreSelection();\n if (!this.lastRange) return;\n\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);\n list.appendChild(li);\n });\n\n this.lastRange.insertNode(list);\n this.afterListEdit(list);\n }\n\n private 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\n private ensureAtLeastOneParagraph() {\n const el = this.editorEl;\n if (!el) return;\n\n const onlyWhitespace =\n (el.textContent ?? '').replace(/\\u200B/g, '').trim() === '';\n if (el.childNodes.length === 0 || onlyWhitespace) {\n el.innerHTML = '<p><br></p>';\n const p = el.querySelector('p');\n if (p) {\n const range = document.createRange();\n range.setStart(p, 0);\n range.collapse(true);\n const sel = window.getSelection();\n if (sel) {\n sel.removeAllRanges();\n sel.addRange(range);\n }\n }\n return;\n }\n\n const hasBlock = el.querySelector(\n 'p,h1,h2,h3,h4,h5,h6,ul,ol,table,blockquote,pre'\n );\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 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 // ---------- Toolbar/commands ----------\n private onToolbarCommand(cmd: string) {\n if (this.disabled) return;\n this.focusAndRestore();\n switch (cmd) {\n case 'bold':\n toggleInlineTag(this.editorEl, 'strong');\n break;\n case 'italic':\n toggleInlineTag(this.editorEl, 'em');\n break;\n case 'underline':\n toggleInlineTag(this.editorEl, 'u');\n break;\n case 'left':\n setAlignment(this.editorEl, 'left');\n break;\n case 'center':\n setAlignment(this.editorEl, 'center');\n break;\n case 'right':\n setAlignment(this.editorEl, 'right');\n break;\n case 'justify':\n setAlignment(this.editorEl, 'justify');\n break;\n case 'ul':\n toggleList(this.editorEl, 'ul');\n this.updateContent();\n this.updateToolbarState();\n break;\n case 'ol':\n toggleList(this.editorEl, 'ol');\n this.updateContent();\n this.updateToolbarState();\n break;\n\n case 'link':\n break;\n case 'clear':\n const walker = document.createTreeWalker(\n this.editorEl,\n NodeFilter.SHOW_ELEMENT\n );\n const toUnwrap: HTMLElement[] = [];\n while (walker.nextNode()) {\n const el = walker.currentNode as HTMLElement;\n el.removeAttribute('style');\n if (\n ['B', 'STRONG', 'I', 'EM', 'U', 'SPAN', 'FONT'].includes(el.tagName)\n ) {\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:\n break;\n }\n this.updateContent();\n this.updateToolbarState();\n }\n\n private setBtnActive(cmd: string, active: boolean) {\n const arr = this.buttonMap.get(cmd);\n 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 =\n 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 ||\n getComputedStyle(block).textAlign ||\n 'start') as string;\n const alignNorm = align === 'start' ? 'left' : align;\n\n const inLi = !!startElm.closest('li');\n const listType = inLi\n ? startElm.closest('ul,ol')?.tagName.toLowerCase() || ''\n : '';\n\n this.setBtnActive('bold', isBold);\n this.setBtnActive('italic', isItalic);\n this.setBtnActive('underline', isUnderline);\n this.setBtnActive('link', inLink);\n\n if (this.linkEl) {\n const linkBtn = this.linkEl.querySelector('nile-button');\n if (linkBtn) linkBtn.toggleAttribute('data-active', inLink);\n }\n\n this.setBtnActive(\n 'left',\n alignNorm === 'left' &&\n !['center', 'right', 'justify'].includes(alignNorm)\n );\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 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 if (this.fontSelect) {\n const ff = (comp.fontFamily || '')\n .replace(/[\"']/g, '')\n .split(',')[0]\n .trim()\n .toLowerCase();\n if (ff) {\n for (const opt of Array.from(this.fontSelect.options)) {\n if (opt.value.toLowerCase() === ff) {\n this.fontSelect.value = opt.value;\n break;\n }\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)\n this.colorSwatchEl.style.backgroundColor = this.colorInput.value;\n }\n\n if (this.bgColorInput) {\n const bg = getComputedStyle(startElm).backgroundColor;\n if (\n bg &&\n !/transparent|rgba\\(\\s*0\\s*,\\s*0\\s*,\\s*0\\s*,\\s*0\\s*\\)/i.test(bg)\n ) {\n const bgHex = rgbToHex(bg);\n if (\n bgHex &&\n this.bgColorInput.value.toLowerCase() !== bgHex.toLowerCase()\n ) {\n this.bgColorInput.value = bgHex;\n }\n }\n if (this.bgSwatchEl)\n this.bgSwatchEl.style.backgroundColor = this.bgColorInput.value;\n }\n }\n\n private syncPreview() {\n this.updateContent();\n }\n\n private getComputedImportantProps(): string[] {\n return Array.from(\n new Set([\n ...DEFAULT_IMPORTANT_PROPS,\n ...(this.whitelist ?? []),\n ])\n );\n }\n \n\n private updateContent() {\n if (!this.editorEl) return;\n this.ensureAtLeastOneParagraph();\n const isEmpty = (this.editorEl.textContent ?? '').trim() === '';\n this.editorEl.classList.toggle('empty', isEmpty);\n\n const sel = window.getSelection();\n const caretRange =\n sel && sel.rangeCount > 0 && this.editorEl.contains(sel.getRangeAt(0).startContainer)\n ? sel.getRangeAt(0).cloneRange()\n : null;\n\n const clone = this.editorEl.cloneNode(true) as HTMLElement;\n \n if (!this.noStyles) {\n const origWalker = document.createTreeWalker(\n this.editorEl,\n NodeFilter.SHOW_ELEMENT\n );\n const cloneWalker = document.createTreeWalker(\n clone,\n NodeFilter.SHOW_ELEMENT\n );\n \n \n const importantProps = this.getComputedImportantProps();\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 const cssText = importantProps\n .map(prop => `${prop}:${computed.getPropertyValue(prop)}`)\n .join(';');\n \n if (cssText.trim()) {\n cloneEl.setAttribute('style', cssText);\n }\n }\n } else {\n clone.querySelectorAll<HTMLElement>('[style]').forEach(el =>\n el.removeAttribute('style')\n );\n }\n\n if (caretRange && sel && this.editorEl.contains(caretRange.startContainer)) {\n sel.removeAllRanges();\n sel.addRange(caretRange);\n }\n\n this.content = clone.innerHTML; \n if (this.previewEl) this.previewEl.innerHTML = this.content;\n \n this.dispatchEvent(\n new CustomEvent('nile-change', {\n detail: { content: this.content },\n bubbles: true,\n composed: true,\n })\n );\n }\n \n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-rich-text-editor': NileRichTextEditor;\n }\n}\n"],"names":["DEFAULT_ICONS","bold","italic","underline","link","left","center","right","justify","ul","ol","clear","DEFAULT_IMPORTANT_PROPS","_export","NileRichTextEditor","y","constructor","this","value","noStyles","disabled","singleLineEditor","placeholder","mentions","whitelist","content","previewEl","toolbarEl","lastRange","buttonMap","Map","headingSelect","fontSelect","colorInput","bgColorInput","colorSwatchEl","bgSwatchEl","containerEl","linkEl","mentionsEl","onEditorClick","e","_t$target$closest","_t$target","preventDefault","anchor","target","closest","onEditorPaste","onEditorDrop","onEditorInput","ensureAtLeastOneParagraph","scrubBrokenMentions","updateContent","updateToolbarState","onEditorMouseup","saveSelection","onEditorKeyup","includes","key","onEditorKeydown","shiftKey","ctrlKey","toLowerCase","toggleInlineTag","editorEl","focusAndRestore","sel","window","getSelection","rangeCount","range","getRangeAt","collapsed","startContainer","nodeType","Node","TEXT_NODE","t","off","startOffset","before","data","slice","removed","replace","length","r","document","createRange","setStart","collapse","removeAllRanges","addRange","deleteContents","tabNode","createTextNode","insertNode","setStartAfter","onSelectionChange","contains","commonAncestorContainer","cloneRange","_this","_inherits","_i","_createClass","createRenderRoot","injectCss","cssText","querySelector","style","createElement","setAttribute","textContent","insertBefore","firstChild","connectedCallback","super","styles","ensureStructure","dataset","innerHTML","trim","wireAuthoredToolbar","attach","setExternalConfig","wireEditor","addEventListener","passive","syncPreview","className","appendChild","ensureEditor","parentElement","previousElementSibling","nextSibling","updateContentWithMention","mentionDetail","dispatchEvent","CustomEvent","detail","mention","bubbles","composed","disconnectedCallback","unwireEditor","removeEventListener","detach","updated","changed","has","classList","toggle","tabIndex","editor","unwrapMention","span","preserveText","_t$textContent","parent","parentNode","txt","textNode","removeChild","querySelectorAll","forEach","m","getAttribute","label","trigger","text","looksValid","startsWith","tb","Array","from","children","child","tag","tagName","alignment","setAlignment","_this3$buttonMap$get","btn","cmd","iconAttr","authoredHasContent","variant","size","defaultIcon","isConnected","tooltip","onToolbarCommand","arr","get","push","set","_t$detail","mode","setBackColor","setForeColor","type","val","setBlockTag","setFontFamily","restoreSelection","focus","getCleanContent","clone","cloneNode","el","removeAttribute","insertList","list","frag","extractContents","temp","childNodes","n","li","afterListEdit","node","onlyWhitespace","_t$textContent3","p","hasChildNodes","_t$textContent4","toggleList","walker","createTreeWalker","NodeFilter","SHOW_ELEMENT","toUnwrap","nextNode","currentNode","_i8","_i7","remove","setBtnActive","active","_iterator","_createForOfIteratorHelper","s","_step","done","toggleAttribute","err","f","_this4","_s$closest","startElm","nearestElement","comp","getComputedStyle","block","closestBlock","isBold","HTMLElement","w","fontWeight","parseInt","isItalic","fontStyle","isUnderline","tdl","textDecorationLine","inLink","align","textAlign","alignNorm","listType","linkBtn","v","ff","fontFamily","split","_i13","_Array$from","options","opt","hex","rgbToHex","color","backgroundColor","bg","test","bgHex","getComputedImportantProps","Set","_this$whitelist","isEmpty","_this$editorEl$textCo","caretRange","origWalker","cloneWalker","importantProps","_loop","origEl","cloneEl","computed","map","prop","concat","getPropertyValue","join","__decorate","LitElement","property","String","attribute","reflect","prototype","Boolean","converter","fromAttribute","parsed","JSON","parse","out","_i18","_Object$keys","Object","keys","trig","isArray","filter","i","_unused","toAttribute","stringify","_unused2","state","customElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nile-rich-text-editor.cjs.js","sources":["../../../src/nile-rich-text-editor/nile-rich-text-editor.ts"],"sourcesContent":["import { LitElement, PropertyValues } 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';\nimport './nile-rte-link';\n\nimport {\n closestBlock,\n nearestElement,\n rgbToHex,\n toggleInlineTag,\n setBlockTag,\n setAlignment,\n setFontFamily,\n setForeColor,\n setBackColor,\n toggleList,\n} from './utils/index';\n\nimport { styles } from './nile-rich-text-editor.css';\n\ntype MentionsConfig = Record<string, { key: string; label: string }[]>;\n\nconst DEFAULT_ICONS: Record<string, string> = {\n bold: 'format_bold',\n italic: 'format_italic',\n underline: 'format_underline',\n link: 'link_2',\n left: 'format_align_left',\n center: 'format_align_middle',\n right: 'format_align_right',\n justify: 'format_align_justify',\n ul: 'format_list_bulleted',\n ol: 'format_list_numbered',\n clear: 'format_clear'\n};\n\nconst DEFAULT_IMPORTANT_PROPS = [\n 'font-weight',\n 'font-style',\n 'text-decoration',\n 'color',\n 'background-color',\n 'font-size',\n 'font-family',\n 'text-align',\n 'line-height',\n 'letter-spacing',\n 'white-space',\n 'vertical-align',\n 'list-style-position',\n 'padding-inline-start',\n];\n\n@customElement('nile-rich-text-editor')\nexport class NileRichTextEditor extends LitElement {\n protected createRenderRoot() {\n return this;\n }\n\n @property({ type: String, attribute: true, reflect: true }) value = '';\n @property({ type: Boolean, attribute: true, reflect: true }) noStyles = false;\n @property({ type: Boolean, attribute: true, reflect: true }) disabled = false; \n @property({ type: Boolean, attribute: 'singlelineeditor', reflect: true }) singleLineEditor =\n false;\n @property({ type: String }) placeholder = '';\n\n\n @property({\n attribute: 'mentions',\n reflect: true,\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(\n i =>\n i &&\n typeof i.key === 'string' &&\n typeof i.label === 'string'\n )\n .map(i => ({ key: i.key, label: i.label }));\n }\n }\n return out;\n } catch {\n return {};\n }\n },\n toAttribute: (v: MentionsConfig) => JSON.stringify(v),\n },\n })\n mentions: MentionsConfig = {};\n\n @property({\n attribute: 'whitelist',\n reflect: false,\n converter: {\n fromAttribute: (value: string): string[] => {\n try {\n const parsed = JSON.parse(value);\n return Array.isArray(parsed) ? parsed.filter(v => typeof v === 'string') : [];\n } catch {\n return [];\n }\n },\n },\n })\n whitelist: string[] = [];\n\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 private buttonMap = new Map<string, HTMLElement[]>();\n private headingSelect: HTMLSelectElement | null = null;\n private fontSelect: HTMLSelectElement | null = null;\n private colorInput: HTMLInputElement | null = null;\n private bgColorInput: HTMLInputElement | null = null;\n private colorSwatchEl: HTMLElement | null = null;\n private bgSwatchEl: HTMLElement | null = null;\n private containerEl: HTMLElement | null = null;\n private linkEl: HTMLElement | null = null;\n\n private mentionsEl: HTMLElement | null = null;\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 this.injectCss(styles.cssText);\n this.ensureStructure();\n if (this.placeholder && this.editorEl) {\n this.editorEl.dataset.placeholder = this.placeholder;\n }\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 if (this.toolbarEl) this.wireAuthoredToolbar(this.toolbarEl);\n this.mentionsEl = this.querySelector('nile-rte-mentions');\n if (this.mentionsEl) {\n (this.mentionsEl as any).attach?.(this.editorEl, this as HTMLElement);\n (this.mentionsEl as any).setExternalConfig?.(this.mentions);\n }\n\n this.wireEditor();\n document.addEventListener('selectionchange', this.onSelectionChange, {\n passive: true,\n });\n this.updateToolbarState();\n this.syncPreview();\n }\n\n private ensureStructure() {\n this.toolbarEl = this.querySelector('nile-rte-toolbar');\n this.previewEl = this.querySelector('nile-rte-preview');\n\n // container for toolbar + editor\n this.containerEl = this.querySelector('.rte-container') as HTMLElement;\n if (!this.containerEl) {\n this.containerEl = document.createElement('div');\n this.containerEl.className = 'rte-container';\n this.appendChild(this.containerEl);\n }\n\n // ensure editor\n this.ensureEditor();\n\n // put toolbar + editor inside container\n if (this.toolbarEl && this.toolbarEl.parentElement !== this.containerEl) {\n this.containerEl.appendChild(this.toolbarEl);\n }\n if (this.editorEl.parentElement !== this.containerEl) {\n this.containerEl.appendChild(this.editorEl);\n }\n\n if (this.previewEl) {\n if (this.previewEl.parentElement !== this) {\n this.appendChild(this.previewEl);\n }\n\n if (this.previewEl.previousElementSibling !== this.containerEl) {\n this.insertBefore(this.previewEl, this.containerEl.nextSibling);\n }\n }\n }\n\n protected firstUpdated(_changedProperties: PropertyValues): void {\n super.firstUpdated(_changedProperties);\n\n if (this.editorEl) {\n const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n if (isSafari) {\n this.editorEl.classList.add('safari');\n }\n }\n}\n\n private updateContentWithMention(mentionDetail: any) {\n this.updateContent();\n this.dispatchEvent(\n new CustomEvent('nile-change', {\n detail: {\n content: this.content,\n mention: mentionDetail,\n },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n disconnectedCallback(): void {\n this.unwireEditor();\n document.removeEventListener('selectionchange', this.onSelectionChange);\n\n if (this.mentionsEl && (this.mentionsEl as any).detach) {\n (this.mentionsEl as any).detach();\n }\n super.disconnectedCallback();\n }\n protected updated(changed: Map<string, any>) {\n if (changed.has('value')) {\n if (this.editorEl && this.value !== this.editorEl.innerHTML) {\n this.editorEl.innerHTML = this.value || '<p><br></p>';\n this.content = this.editorEl.innerHTML;\n this.syncPreview();\n }\n }\n if (changed.has('singleLineEditor')) {\n if (this.editorEl) {\n this.editorEl.classList.toggle('single-line', this.singleLineEditor);\n }\n if (this.previewEl) {\n this.previewEl.classList.toggle('single-line', this.singleLineEditor);\n }\n }\n if (changed.has('disabled') && this.editorEl) {\n this.editorEl.setAttribute('contenteditable', this.disabled ? 'false' : 'true');\n this.editorEl.tabIndex = this.disabled ? -1 : 0;\n if (this.linkEl) {\n (this.linkEl as any).disabled = this.disabled;\n }\n }\n if (changed.has('placeholder') && this.editorEl) {\n if (this.placeholder) {\n this.editorEl.dataset.placeholder = this.placeholder;\n } else {\n delete this.editorEl.dataset.placeholder;\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', this.disabled ? 'false' : 'true');\n editor.tabIndex = this.disabled ? -1 : 0;\n this.editorEl = editor;\n }\n if (this.placeholder) {\n this.editorEl.dataset.placeholder = this.placeholder;\n }\n \n if (!this.editorEl.innerHTML.trim()) {\n this.editorEl.innerHTML = '<p><br></p>';\n }\n }\n\n private unwrapMention(span: HTMLElement, preserveText = true) {\n const parent = span.parentNode;\n if (!parent) return;\n\n const txt = preserveText\n ? (span.textContent ?? '').replace(/\\u200B/g, '')\n : '';\n const textNode = document.createTextNode(txt);\n parent.insertBefore(textNode, span);\n parent.removeChild(span);\n const r = document.createRange();\n r.setStartAfter(textNode);\n r.collapse(true);\n const sel = window.getSelection();\n sel?.removeAllRanges();\n sel?.addRange(r);\n }\n\n private scrubBrokenMentions() {\n if (!this.editorEl) return;\n const mentions = this.editorEl.querySelectorAll('span.mention');\n\n mentions.forEach(m => {\n const span = m as HTMLElement;\n const key = span.getAttribute('data-mention-key');\n const label = span.getAttribute('data-mention-label');\n const trigger = span.getAttribute('data-mention-trigger') || '';\n const text = (span.textContent ?? '').replace(/\\u200B/g, '').trim();\n\n const looksValid =\n !!key &&\n !!label &&\n text.length > 0 &&\n text.startsWith(trigger) &&\n text.includes(label);\n\n if (!text || !looksValid) {\n this.unwrapMention(span, true);\n return;\n }\n });\n }\n\n private onEditorClick = (e: MouseEvent) => {\n if (this.disabled) { e.preventDefault(); return; }\n const anchor = (e.target as HTMLElement).closest?.('a');\n if (anchor) e.preventDefault();\n };\n\n private onEditorPaste = (e: ClipboardEvent) => {\n if (this.disabled) e.preventDefault();\n };\n\n private onEditorDrop = (e: DragEvent) => {\n if (this.disabled) e.preventDefault();\n };\n\n private onEditorInput = () => {\n if (this.disabled) return;\n this.ensureAtLeastOneParagraph();\n this.scrubBrokenMentions();\n this.updateContent();\n this.updateToolbarState();\n };\n\n private onEditorMouseup = () => {\n this.saveSelection();\n this.updateToolbarState();\n };\n\n private onEditorKeyup = (e: KeyboardEvent) => {\n this.saveSelection();\n\n if (\n [\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'ArrowDown',\n 'Home',\n 'End',\n ].includes(e.key)\n ) {\n this.updateToolbarState();\n }\n };\n\n private wireEditor() {\n this.editorEl.addEventListener('click', this.onEditorClick);\n this.editorEl.addEventListener('input', this.onEditorInput);\n this.editorEl.addEventListener('mouseup', this.onEditorMouseup);\n this.editorEl.addEventListener('keyup', this.onEditorKeyup);\n this.editorEl.addEventListener('keydown', this.onEditorKeydown);\n this.editorEl.addEventListener('paste', this.onEditorPaste);\n this.editorEl.addEventListener('drop', this.onEditorDrop);\n }\n\n private unwireEditor() {\n if (!this.editorEl) return;\n this.editorEl.removeEventListener('click', this.onEditorClick);\n this.editorEl.removeEventListener('input', this.onEditorInput);\n this.editorEl.removeEventListener('mouseup', this.onEditorMouseup);\n this.editorEl.removeEventListener('keyup', this.onEditorKeyup);\n this.editorEl.removeEventListener('keydown', this.onEditorKeydown);\n this.editorEl.removeEventListener('paste', this.onEditorPaste);\n this.editorEl.removeEventListener('drop', this.onEditorDrop);\n }\n\n private onEditorKeydown = (e: KeyboardEvent) => {\n if (this.disabled) {\n e.preventDefault();\n return;\n }\n if (this.singleLineEditor && e.key === 'Enter' && e.shiftKey) {\n e.preventDefault();\n return;\n }\n if (e.ctrlKey && e.key.toLowerCase() === 'i') {\n e.preventDefault();\n toggleInlineTag(this.editorEl, 'em');\n this.updateContent();\n this.updateToolbarState();\n }\n\n if (this.singleLineEditor && e.key === 'Enter') {\n e.preventDefault();\n return;\n }\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 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 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 range.deleteContents();\n const tabNode = document.createTextNode('\\t');\n range.insertNode(tabNode);\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 private wireAuthoredToolbar(tb: HTMLElement) {\n this.buttonMap.clear();\n this.headingSelect = null;\n this.fontSelect = null;\n this.colorInput = null;\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 as any).disabled = this.disabled;\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 if (tag === 'nile-rte-link') {\n (child as any).editorEl = this.editorEl;\n (child as any).disabled = this.disabled;\n this.linkEl = child as HTMLElement;\n child.addEventListener('nile-link-changed', () => {\n this.updateContent();\n this.updateToolbarState();\n });\n return;\n }\n\n if (tag === 'nile-rte-toolbar-item') {\n let btn = child.querySelector(\n ':scope > nile-button'\n ) 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 if (!btn) {\n btn = document.createElement('nile-button');\n (btn as any).variant = 'tertiary';\n (btn as any).size = 'small';\n }\n (btn as any).disabled = this.disabled;\n\n if (iconAttr) {\n btn.innerHTML = `<nile-icon name=\"${iconAttr}\" color=\"${this.disabled ? 'var(--nile-colors-neutral-500, var(--ng-colors-fg-disabled-subtle))' : 'var(--nile-colors-dark-900, var(--ng-colors-text-primary-900))'}\" ></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=\"${this.disabled ? 'var(--nile-colors-neutral-500, var(--ng-colors-fg-disabled-subtle))' : 'var(--nile-colors-dark-900, var(--ng-colors-text-primary-900))'}\" ></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 if (!btn.isConnected) {\n if (this.disabled) {\n child.appendChild(btn);\n } else {\n const tooltip = document.createElement('nile-lite-tooltip');\n tooltip.setAttribute('content', label);\n tooltip.appendChild(btn);\n child.appendChild(tooltip);\n }\n }\n\n btn.setAttribute('aria-label', label);\n btn.addEventListener('mousedown', e => e.preventDefault());\n btn.addEventListener('click', () => this.onToolbarCommand(cmd));\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 child.addEventListener('change', (e: any) => {\n this.focusAndRestore();\n\n const val = e.detail as string;\n\n if (type === 'heading') {\n setBlockTag(this.editorEl, val as any);\n } else if (type === 'font') {\n setFontFamily(this.editorEl, val);\n }\n\n this.updateContent();\n this.updateToolbarState();\n });\n\n return;\n }\n\n if (tag === 'nile-rte-color') {\n child.addEventListener('change', (e: any) => {\n this.focusAndRestore();\n const { mode, value } = e.detail;\n\n if (mode === 'backColor') {\n setBackColor(this.editorEl, value);\n } else {\n setForeColor(this.editorEl, value);\n }\n\n this.updateContent();\n this.updateToolbarState();\n });\n return;\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();\n if (!sel) return;\n sel.removeAllRanges();\n sel.addRange(this.lastRange);\n }\n private focusAndRestore() {\n this.editorEl?.focus();\n this.restoreSelection();\n }\n private getCleanContent(): string {\n const clone = this.editorEl.cloneNode(true) as HTMLElement;\n clone.querySelectorAll<HTMLElement>('*').forEach(el => {\n el.removeAttribute('style');\n });\n \n return clone.innerHTML;\n }\n \n private insertList(type: 'ul' | 'ol') {\n this.restoreSelection();\n if (!this.lastRange) return;\n\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);\n list.appendChild(li);\n });\n\n this.lastRange.insertNode(list);\n this.afterListEdit(list);\n }\n\n private 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\n private ensureAtLeastOneParagraph() {\n const el = this.editorEl;\n if (!el) return;\n\n const onlyWhitespace =\n (el.textContent ?? '').replace(/\\u200B/g, '').trim() === '';\n if (el.childNodes.length === 0 || onlyWhitespace) {\n el.innerHTML = '<p><br></p>';\n const p = el.querySelector('p');\n if (p) {\n const range = document.createRange();\n range.setStart(p, 0);\n range.collapse(true);\n const sel = window.getSelection();\n if (sel) {\n sel.removeAllRanges();\n sel.addRange(range);\n }\n }\n return;\n }\n\n const hasBlock = el.querySelector(\n 'p,h1,h2,h3,h4,h5,h6,ul,ol,table,blockquote,pre'\n );\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 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 // ---------- Toolbar/commands ----------\n private onToolbarCommand(cmd: string) {\n if (this.disabled) return;\n this.focusAndRestore();\n switch (cmd) {\n case 'bold':\n toggleInlineTag(this.editorEl, 'strong');\n break;\n case 'italic':\n toggleInlineTag(this.editorEl, 'em');\n break;\n case 'underline':\n toggleInlineTag(this.editorEl, 'u');\n break;\n case 'left':\n setAlignment(this.editorEl, 'left');\n break;\n case 'center':\n setAlignment(this.editorEl, 'center');\n break;\n case 'right':\n setAlignment(this.editorEl, 'right');\n break;\n case 'justify':\n setAlignment(this.editorEl, 'justify');\n break;\n case 'ul':\n toggleList(this.editorEl, 'ul');\n this.updateContent();\n this.updateToolbarState();\n break;\n case 'ol':\n toggleList(this.editorEl, 'ol');\n this.updateContent();\n this.updateToolbarState();\n break;\n\n case 'link':\n break;\n case 'clear':\n const walker = document.createTreeWalker(\n this.editorEl,\n NodeFilter.SHOW_ELEMENT\n );\n const toUnwrap: HTMLElement[] = [];\n while (walker.nextNode()) {\n const el = walker.currentNode as HTMLElement;\n el.removeAttribute('style');\n if (\n ['B', 'STRONG', 'I', 'EM', 'U', 'SPAN', 'FONT'].includes(el.tagName)\n ) {\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:\n break;\n }\n this.updateContent();\n this.updateToolbarState();\n }\n\n private setBtnActive(cmd: string, active: boolean) {\n const arr = this.buttonMap.get(cmd);\n 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 =\n 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 ||\n getComputedStyle(block).textAlign ||\n 'start') as string;\n const alignNorm = align === 'start' ? 'left' : align;\n\n const inLi = !!startElm.closest('li');\n const listType = inLi\n ? startElm.closest('ul,ol')?.tagName.toLowerCase() || ''\n : '';\n\n this.setBtnActive('bold', isBold);\n this.setBtnActive('italic', isItalic);\n this.setBtnActive('underline', isUnderline);\n this.setBtnActive('link', inLink);\n\n if (this.linkEl) {\n const linkBtn = this.linkEl.querySelector('nile-button');\n if (linkBtn) linkBtn.toggleAttribute('data-active', inLink);\n }\n\n this.setBtnActive(\n 'left',\n alignNorm === 'left' &&\n !['center', 'right', 'justify'].includes(alignNorm)\n );\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 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 if (this.fontSelect) {\n const ff = (comp.fontFamily || '')\n .replace(/[\"']/g, '')\n .split(',')[0]\n .trim()\n .toLowerCase();\n if (ff) {\n for (const opt of Array.from(this.fontSelect.options)) {\n if (opt.value.toLowerCase() === ff) {\n this.fontSelect.value = opt.value;\n break;\n }\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)\n this.colorSwatchEl.style.backgroundColor = this.colorInput.value;\n }\n\n if (this.bgColorInput) {\n const bg = getComputedStyle(startElm).backgroundColor;\n if (\n bg &&\n !/transparent|rgba\\(\\s*0\\s*,\\s*0\\s*,\\s*0\\s*,\\s*0\\s*\\)/i.test(bg)\n ) {\n const bgHex = rgbToHex(bg);\n if (\n bgHex &&\n this.bgColorInput.value.toLowerCase() !== bgHex.toLowerCase()\n ) {\n this.bgColorInput.value = bgHex;\n }\n }\n if (this.bgSwatchEl)\n this.bgSwatchEl.style.backgroundColor = this.bgColorInput.value;\n }\n }\n\n private syncPreview() {\n this.updateContent();\n }\n\n private getComputedImportantProps(): string[] {\n return Array.from(\n new Set([\n ...DEFAULT_IMPORTANT_PROPS,\n ...(this.whitelist ?? []),\n ])\n );\n }\n \n\n private updateContent() {\n if (!this.editorEl) return;\n this.ensureAtLeastOneParagraph();\n const isEmpty = (this.editorEl.textContent ?? '').trim() === '';\n this.editorEl.classList.toggle('empty', isEmpty);\n\n const sel = window.getSelection();\n const caretRange =\n sel && sel.rangeCount > 0 && this.editorEl.contains(sel.getRangeAt(0).startContainer)\n ? sel.getRangeAt(0).cloneRange()\n : null;\n\n const clone = this.editorEl.cloneNode(true) as HTMLElement;\n \n if (!this.noStyles) {\n const origWalker = document.createTreeWalker(\n this.editorEl,\n NodeFilter.SHOW_ELEMENT\n );\n const cloneWalker = document.createTreeWalker(\n clone,\n NodeFilter.SHOW_ELEMENT\n );\n \n \n const importantProps = this.getComputedImportantProps();\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 const cssText = importantProps\n .map(prop => `${prop}:${computed.getPropertyValue(prop)}`)\n .join(';');\n \n if (cssText.trim()) {\n cloneEl.setAttribute('style', cssText);\n }\n }\n } else {\n clone.querySelectorAll<HTMLElement>('[style]').forEach(el =>\n el.removeAttribute('style')\n );\n }\n\n if (caretRange && sel && this.editorEl.contains(caretRange.startContainer)) {\n sel.removeAllRanges();\n sel.addRange(caretRange);\n }\n\n this.content = clone.innerHTML; \n if (this.previewEl) this.previewEl.innerHTML = this.content;\n \n this.dispatchEvent(\n new CustomEvent('nile-change', {\n detail: { content: this.content },\n bubbles: true,\n composed: true,\n })\n );\n }\n \n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-rich-text-editor': NileRichTextEditor;\n }\n}\n"],"names":["DEFAULT_ICONS","bold","italic","underline","link","left","center","right","justify","ul","ol","clear","DEFAULT_IMPORTANT_PROPS","_export","NileRichTextEditor","y","this","value","noStyles","disabled","singleLineEditor","placeholder","mentions","whitelist","content","previewEl","toolbarEl","lastRange","buttonMap","Map","headingSelect","fontSelect","colorInput","bgColorInput","colorSwatchEl","bgSwatchEl","containerEl","linkEl","mentionsEl","onEditorClick","e","preventDefault","anchor","target","closest","_t$target$closest","onEditorPaste","onEditorDrop","onEditorInput","ensureAtLeastOneParagraph","scrubBrokenMentions","updateContent","updateToolbarState","onEditorMouseup","saveSelection","onEditorKeyup","includes","key","onEditorKeydown","shiftKey","ctrlKey","toLowerCase","toggleInlineTag","editorEl","focusAndRestore","sel","window","getSelection","rangeCount","range","getRangeAt","collapsed","startContainer","nodeType","Node","TEXT_NODE","t","off","startOffset","before","data","slice","removed","replace","length","r","document","createRange","setStart","collapse","removeAllRanges","addRange","deleteContents","tabNode","createTextNode","insertNode","setStartAfter","onSelectionChange","contains","commonAncestorContainer","cloneRange","_this","_inherits","_i","_createClass","createRenderRoot","injectCss","cssText","querySelector","style","createElement","setAttribute","textContent","insertBefore","firstChild","connectedCallback","super","styles","ensureStructure","dataset","innerHTML","trim","wireAuthoredToolbar","attach","setExternalConfig","wireEditor","addEventListener","passive","syncPreview","className","appendChild","ensureEditor","parentElement","previousElementSibling","nextSibling","firstUpdated","_changedProperties","test","navigator","userAgent","classList","add","updateContentWithMention","mentionDetail","dispatchEvent","CustomEvent","detail","mention","bubbles","composed","disconnectedCallback","unwireEditor","removeEventListener","detach","updated","changed","has","toggle","tabIndex","editor","unwrapMention","span","_t$textContent","preserveText","arguments","undefined","parent","parentNode","txt","textNode","removeChild","_this2","querySelectorAll","forEach","m","_i$textContent","getAttribute","label","trigger","text","looksValid","startsWith","tb","Array","from","children","child","tag","tagName","alignment","setAlignment","_this3$buttonMap$get","btn","cmd","iconAttr","authoredHasContent","variant","size","defaultIcon","concat","isConnected","tooltip","onToolbarCommand","arr","get","push","set","_t$detail","mode","setBackColor","setForeColor","type","val","setBlockTag","setFontFamily","restoreSelection","focus","getCleanContent","clone","cloneNode","el","removeAttribute","insertList","list","frag","extractContents","temp","childNodes","n","li","afterListEdit","node","onlyWhitespace","p","hasChildNodes","toggleList","walker","createTreeWalker","NodeFilter","SHOW_ELEMENT","toUnwrap","nextNode","currentNode","_i8","_i7","remove","setBtnActive","active","_iterator","s","_step","done","toggleAttribute","err","f","startElm","nearestElement","comp","getComputedStyle","block","closestBlock","isBold","HTMLElement","w","fontWeight","parseInt","isItalic","fontStyle","isUnderline","tdl","textDecorationLine","inLink","align","textAlign","alignNorm","listType","_s$closest","linkBtn","v","ff","fontFamily","split","_i13","_Array$from","options","opt","hex","rgbToHex","color","backgroundColor","bg","bgHex","getComputedImportantProps","Set","_this$editorEl$textCo","isEmpty","caretRange","origWalker","cloneWalker","importantProps","_loop","origEl","cloneEl","computed","map","prop","getPropertyValue","join","LitElement","__decorate","property","String","attribute","reflect","prototype","Boolean","converter","fromAttribute","parsed","JSON","parse","out","_i18","_Object$keys","Object","keys","trig","isArray","filter","i","_unused","toAttribute","stringify","_unused2","state","customElement"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
System.register(["lit"],function(_export,_context){"use strict";var r,_templateObject,e;function _taggedTemplateLiteral(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}));}return{setters:[function(_lit){r=_lit.css;}],execute:function execute(){_export("s",e=r(_templateObject||(_templateObject=_taggedTemplateLiteral(["\n .editor { all: revert;\n -webkit-user-modify: read-write
|
|
1
|
+
System.register(["lit"],function(_export,_context){"use strict";var r,_templateObject,e;function _taggedTemplateLiteral(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}));}return{setters:[function(_lit){r=_lit.css;}],execute:function execute(){_export("s",e=r(_templateObject||(_templateObject=_taggedTemplateLiteral(["\n .editor { all: revert;\n }\n .rte-container .editor.safari {\n -webkit-user-modify: read-write;\n }\n\n nile-rich-text-editor {\n position: relative;\n display: block;\n font-family: inherit;\n }\n\n\n .rte-container {\n width: 100%;\n border: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-neutral));\n border-radius: var(--nile-radius-radius-xl, var(--ng-radius-md));\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n box-sizing: border-box;\n }\n\n \n .rte-container nile-rte-toolbar {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px;\n border-bottom: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-neutral));\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n border-radius: 8px 8px 0 0;\n width: 100%; \n box-sizing: border-box; \n}\n\n .rte-container .editor {\n min-height: 160px;\n width: 100%;\n padding: 12px;\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n border-radius: 0 0 8px 8px;\n outline: none;\n tab-size: 4;\n -moz-tab-size: 4;\n word-break: break-word;\n box-sizing: border-box;\n border-radius: var(--nile-radius-radius-xl, var(--ng-radius-md));\n }\n\n nile-rich-text-editor[disabled] .rte-container {\n border-color: var(--nile-colors-neutral-500, var(--ng-colors-border-disabled));\n cursor: not-allowed !important;\n background: var(--nile-colors-dark-200, var(--ng-colors-bg-disabled-subtle));\n }\n\n nile-rich-text-editor[disabled] .rte-container nile-rte-toolbar {\n border-color: var(--nile-colors-neutral-500, var(--ng-colors-border-disabled));\n cursor: not-allowed !important;\n } \n\n nile-rich-text-editor[disabled] .rte-container .editor {\n background: var(--nile-colors-dark-200, var(--ng-colors-bg-disabled-subtle));\n pointer-events: none;\n user-select: none;\n -webkit-user-select: none;\n -webkit-user-modify: read-only;\n border-color: var(--nile-colors-neutral-500, var(--ng-colors-border-disabled));\n color: var(--nile-colors-dark-500, var(--ng-colors-text-disabled));\n }\n\nnile-rte-preview {\n display: block;\n width: 100%;\n margin-top: 16px; \n padding: 12px;\n border: 1px dashed var(--nile-colors-neutral-400, var(--ng-colors-border-neutral));\n border-radius: var(--nile-radius-radius-xl, var(--ng-radius-md));\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n box-sizing: border-box;\n word-wrap: break-word;\n}\n\n nile-rich-text-editor[disabled] nile-rte-preview {\n background: var(--nile-colors-dark-200, var(--ng-colors-bg-disabled-subtle));\n cursor: not-allowed ;\n border-color: var(--nile-colors-neutral-500, var(--ng-colors-border-disabled));\n user-select: none;\n -webkit-user-select: none;\n color: var(--nile-colors-dark-500, var(--ng-colors-text-disabled));\n}\n\n nile-rte-toolbar-item nile-button::part(base) {\n width: 32px;\n height: 32px;\n padding: 0px 6px;\n border: none;\n }\n\n nile-rte-toolbar-item > button,\n nile-rte-toolbar button {\n border: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-neutral));\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n border-radius: var(--nile-radius-radius-lg, var(--ng-radius-md));\n cursor: pointer;\n }\n\n nile-rte-toolbar-item > button nile-icon { pointer-events: none; }\n\n nile-rte-toolbar-item > button.active {\n border-color: #2563eb;\n background: var(--nile-colors-white-base);\n }\n\n .editor p { margin: 1em 0; }\n .editor h1, .preview h1 {\n font-size: 2em;\n margin: 0.67em 0;\n font-weight: bold;\n }\n .editor h2, .preview h2 {\n font-size: 1.5em;\n margin: 0.83em 0;\n font-weight: bold;\n }\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\n .editor.single-line {\n min-height: 50px;\n max-height: 50px;\n line-height: 1.2;\n overflow-x: auto;\n white-space: nowrap;\n padding: 0px 12px 0px 12px;\n scrollbar-width: none;\n -ms-overflow-style: none;\n }\n nile-rte-preview.single-line {\n min-height: 50px;\n max-height: 50px;\n line-height: 1.2;\n padding: 0px 12px 0px 12px;\n overflow-x: auto;\n white-space: nowrap;\n scrollbar-width: none;\n -ms-overflow-style: none;\n }\n nile-rte-divider { \n margin: 0 4px;\n display: inline-block;\n height: 24px;\n width: 1px;\n background: var(--nile-colors-neutral-400, var(--ng-colors-border-neutral));\n }\n \n .editor ul,\n .editor ol {\n list-style-position: outside;\n padding-inline-start: 24px;\n }\n\n\n \n \n\n nile-rte-toolbar-item nile-button[data-active]::part(base) {\n background-color: var(--nile-colors-primary-400, var(--ng-componentcolors-utility-blue-400));\n}\n\nnile-rte-toolbar-item nile-button[data-active]::part(base):hover {\n background-color: var(--nile-colors-primary-500, var(--ng-componentcolors-utility-blue-500)); \n}\n\nnile-rte-link nile-button[data-active]::part(base) {\n background-color: var(--nile-colors-primary-400, var(--ng-componentcolors-utility-blue-400));\n}\n\nnile-rte-link nile-button[data-active]::part(base):hover {\n background-color: var(--nile-colors-primary-500, var(--ng-componentcolors-utility-blue-500));\n}\n\n.editor a {\n color: var(--nile-colors-primary-600, var(--ng-colors-text-brand-tertiary-600));\n cursor: pointer;\n text-decoration: none;\n}\n\n.editor a:hover {\n text-decoration: none;\n}\n\nnile-rich-text-editor[disabled] .editor a {\n color: var(--nile-colors-dark-500, var(--ng-colors-text-disabled));\n cursor: not-allowed;\n pointer-events: none;\n}\n\n.editor.empty::before {\n content: attr(data-placeholder);\n color: var(--nile-colors-neutral-500, var(--ng-colors-text-secondary));\n position: absolute;\n font-family: var(--nile-font-family-sans-serif, var(--ng-font-family-body));\n pointer-events: none;\n user-select: none;\n padding-top: 16px;\n opacity: 0.7;\n}\n\n\n\n \n\n\n\n"]))));}};});
|
|
2
2
|
//# sourceMappingURL=nile-rich-text-editor.css.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nile-rich-text-editor.css.cjs.js","sources":["../../../src/nile-rich-text-editor/nile-rich-text-editor.css.ts"],"sourcesContent":[" \nimport { css } from 'lit';\n\nexport const styles = css`\n .editor { all: revert;\n -webkit-user-modify: read-write
|
|
1
|
+
{"version":3,"file":"nile-rich-text-editor.css.cjs.js","sources":["../../../src/nile-rich-text-editor/nile-rich-text-editor.css.ts"],"sourcesContent":[" \nimport { css } from 'lit';\n\nexport const styles = css`\n .editor { all: revert;\n }\n .rte-container .editor.safari {\n -webkit-user-modify: read-write;\n }\n\n nile-rich-text-editor {\n position: relative;\n display: block;\n font-family: inherit;\n }\n\n\n .rte-container {\n width: 100%;\n border: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-neutral));\n border-radius: var(--nile-radius-radius-xl, var(--ng-radius-md));\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n box-sizing: border-box;\n }\n\n \n .rte-container nile-rte-toolbar {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px;\n border-bottom: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-neutral));\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n border-radius: 8px 8px 0 0;\n width: 100%; \n box-sizing: border-box; \n}\n\n .rte-container .editor {\n min-height: 160px;\n width: 100%;\n padding: 12px;\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n border-radius: 0 0 8px 8px;\n outline: none;\n tab-size: 4;\n -moz-tab-size: 4;\n word-break: break-word;\n box-sizing: border-box;\n border-radius: var(--nile-radius-radius-xl, var(--ng-radius-md));\n }\n\n nile-rich-text-editor[disabled] .rte-container {\n border-color: var(--nile-colors-neutral-500, var(--ng-colors-border-disabled));\n cursor: not-allowed !important;\n background: var(--nile-colors-dark-200, var(--ng-colors-bg-disabled-subtle));\n }\n\n nile-rich-text-editor[disabled] .rte-container nile-rte-toolbar {\n border-color: var(--nile-colors-neutral-500, var(--ng-colors-border-disabled));\n cursor: not-allowed !important;\n } \n\n nile-rich-text-editor[disabled] .rte-container .editor {\n background: var(--nile-colors-dark-200, var(--ng-colors-bg-disabled-subtle));\n pointer-events: none;\n user-select: none;\n -webkit-user-select: none;\n -webkit-user-modify: read-only;\n border-color: var(--nile-colors-neutral-500, var(--ng-colors-border-disabled));\n color: var(--nile-colors-dark-500, var(--ng-colors-text-disabled));\n }\n\nnile-rte-preview {\n display: block;\n width: 100%;\n margin-top: 16px; \n padding: 12px;\n border: 1px dashed var(--nile-colors-neutral-400, var(--ng-colors-border-neutral));\n border-radius: var(--nile-radius-radius-xl, var(--ng-radius-md));\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n box-sizing: border-box;\n word-wrap: break-word;\n}\n\n nile-rich-text-editor[disabled] nile-rte-preview {\n background: var(--nile-colors-dark-200, var(--ng-colors-bg-disabled-subtle));\n cursor: not-allowed ;\n border-color: var(--nile-colors-neutral-500, var(--ng-colors-border-disabled));\n user-select: none;\n -webkit-user-select: none;\n color: var(--nile-colors-dark-500, var(--ng-colors-text-disabled));\n}\n\n nile-rte-toolbar-item nile-button::part(base) {\n width: 32px;\n height: 32px;\n padding: 0px 6px;\n border: none;\n }\n\n nile-rte-toolbar-item > button,\n nile-rte-toolbar button {\n border: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-neutral));\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n border-radius: var(--nile-radius-radius-lg, var(--ng-radius-md));\n cursor: pointer;\n }\n\n nile-rte-toolbar-item > button nile-icon { pointer-events: none; }\n\n nile-rte-toolbar-item > button.active {\n border-color: #2563eb;\n background: var(--nile-colors-white-base);\n }\n\n .editor p { margin: 1em 0; }\n .editor h1, .preview h1 {\n font-size: 2em;\n margin: 0.67em 0;\n font-weight: bold;\n }\n .editor h2, .preview h2 {\n font-size: 1.5em;\n margin: 0.83em 0;\n font-weight: bold;\n }\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\n .editor.single-line {\n min-height: 50px;\n max-height: 50px;\n line-height: 1.2;\n overflow-x: auto;\n white-space: nowrap;\n padding: 0px 12px 0px 12px;\n scrollbar-width: none;\n -ms-overflow-style: none;\n }\n nile-rte-preview.single-line {\n min-height: 50px;\n max-height: 50px;\n line-height: 1.2;\n padding: 0px 12px 0px 12px;\n overflow-x: auto;\n white-space: nowrap;\n scrollbar-width: none;\n -ms-overflow-style: none;\n }\n nile-rte-divider { \n margin: 0 4px;\n display: inline-block;\n height: 24px;\n width: 1px;\n background: var(--nile-colors-neutral-400, var(--ng-colors-border-neutral));\n }\n \n .editor ul,\n .editor ol {\n list-style-position: outside;\n padding-inline-start: 24px;\n }\n\n\n \n \n\n nile-rte-toolbar-item nile-button[data-active]::part(base) {\n background-color: var(--nile-colors-primary-400, var(--ng-componentcolors-utility-blue-400));\n}\n\nnile-rte-toolbar-item nile-button[data-active]::part(base):hover {\n background-color: var(--nile-colors-primary-500, var(--ng-componentcolors-utility-blue-500)); \n}\n\nnile-rte-link nile-button[data-active]::part(base) {\n background-color: var(--nile-colors-primary-400, var(--ng-componentcolors-utility-blue-400));\n}\n\nnile-rte-link nile-button[data-active]::part(base):hover {\n background-color: var(--nile-colors-primary-500, var(--ng-componentcolors-utility-blue-500));\n}\n\n.editor a {\n color: var(--nile-colors-primary-600, var(--ng-colors-text-brand-tertiary-600));\n cursor: pointer;\n text-decoration: none;\n}\n\n.editor a:hover {\n text-decoration: none;\n}\n\nnile-rich-text-editor[disabled] .editor a {\n color: var(--nile-colors-dark-500, var(--ng-colors-text-disabled));\n cursor: not-allowed;\n pointer-events: none;\n}\n\n.editor.empty::before {\n content: attr(data-placeholder);\n color: var(--nile-colors-neutral-500, var(--ng-colors-text-secondary));\n position: absolute;\n font-family: var(--nile-font-family-sans-serif, var(--ng-font-family-body));\n pointer-events: none;\n user-select: none;\n padding-top: 16px;\n opacity: 0.7;\n}\n\n\n\n \n\n\n\n`;\n\nexport default [styles];\n"],"names":["styles","css","_templateObject","_taggedTemplateLiteral"],"mappings":"oTAGaA,CAAAA,CAASC,CAAG,CAAAC,eAAA,GAAAA,eAAA,CAAAC,sBAAA"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import{css as r}from"lit";const e=r`
|
|
2
2
|
.editor { all: revert;
|
|
3
|
-
|
|
3
|
+
}
|
|
4
|
+
.rte-container .editor.safari {
|
|
5
|
+
-webkit-user-modify: read-write;
|
|
6
|
+
}
|
|
4
7
|
|
|
5
8
|
nile-rich-text-editor {
|
|
6
9
|
position: relative;
|
|
@@ -199,7 +202,7 @@ nile-rich-text-editor[disabled] .editor a {
|
|
|
199
202
|
content: attr(data-placeholder);
|
|
200
203
|
color: var(--nile-colors-neutral-500, var(--ng-colors-text-secondary));
|
|
201
204
|
position: absolute;
|
|
202
|
-
font-family: var(
|
|
205
|
+
font-family: var(--nile-font-family-sans-serif, var(--ng-font-family-body));
|
|
203
206
|
pointer-events: none;
|
|
204
207
|
user-select: none;
|
|
205
208
|
padding-top: 16px;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{__decorate as t}from"tslib";import{LitElement as i}from"lit";import{property as s,state as e,customElement as n}from"lit/decorators.js";import"./nile-rte-toolbar.esm.js";import"./nile-rte-toolbar-item.esm.js";import"./nile-rte-select.esm.js";import"./nile-rte-color.esm.js";import"./nile-rte-divider.esm.js";import"./nile-rte-preview.esm.js";import"./nile-rte-mentions.esm.js";import"./nile-rte-link.esm.js";import{s as h,a as r,n as o,c as l}from"./utils/block-utils.esm.js";import{t as c,s as a,r as u}from"./utils/inline-utils.esm.js";import{s as d,a as f}from"./utils/color-utils.esm.js";import{t as m}from"./utils/list-utils.esm.js";import{s as p}from"./nile-rich-text-editor.css.esm.js";const b={bold:"format_bold",italic:"format_italic",underline:"format_underline",link:"link_2",left:"format_align_left",center:"format_align_middle",right:"format_align_right",justify:"format_align_justify",ul:"format_list_bulleted",ol:"format_list_numbered",clear:"format_clear"},g=["font-weight","font-style","text-decoration","color","background-color","font-size","font-family","text-align","line-height","letter-spacing","white-space","vertical-align","list-style-position","padding-inline-start"];let y=class extends i{constructor(){super(...arguments),this.value="",this.noStyles=!1,this.disabled=!1,this.singleLineEditor=!1,this.placeholder="",this.mentions={},this.whitelist=[],this.content="",this.previewEl=null,this.toolbarEl=null,this.lastRange=null,this.buttonMap=new Map,this.headingSelect=null,this.fontSelect=null,this.colorInput=null,this.bgColorInput=null,this.colorSwatchEl=null,this.bgSwatchEl=null,this.containerEl=null,this.linkEl=null,this.mentionsEl=null,this.onEditorClick=t=>{if(this.disabled)return void t.preventDefault();const i=t.target.closest?.("a");i&&t.preventDefault()},this.onEditorPaste=t=>{this.disabled&&t.preventDefault()},this.onEditorDrop=t=>{this.disabled&&t.preventDefault()},this.onEditorInput=()=>{this.disabled||(this.ensureAtLeastOneParagraph(),this.scrubBrokenMentions(),this.updateContent(),this.updateToolbarState())},this.onEditorMouseup=()=>{this.saveSelection(),this.updateToolbarState()},this.onEditorKeyup=t=>{this.saveSelection(),["ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End"].includes(t.key)&&this.updateToolbarState()},this.onEditorKeydown=t=>{if(this.disabled)return void t.preventDefault();if(this.singleLineEditor&&"Enter"===t.key&&t.shiftKey)return void t.preventDefault();if(t.ctrlKey&&"i"===t.key.toLowerCase()&&(t.preventDefault(),c(this.editorEl,"em"),this.updateContent(),this.updateToolbarState()),this.singleLineEditor&&"Enter"===t.key)return void t.preventDefault();if("Tab"!==t.key)return;t.preventDefault(),this.focusAndRestore();const i=window.getSelection();if(!i||0===i.rangeCount)return;const s=i.getRangeAt(0);if(t.shiftKey){if(s.collapsed&&s.startContainer.nodeType===Node.TEXT_NODE){const t=s.startContainer,e=s.startOffset,n=t.data.slice(0,e),h=n.replace(/(\t|[ \u00a0]{2})$/,"");if(h.length!==n.length){t.data=h+t.data.slice(e);const s=document.createRange();s.setStart(t,h.length),s.collapse(!0),i.removeAllRanges(),i.addRange(s),this.updateContent(),this.updateToolbarState()}}return}s.deleteContents();const e=document.createTextNode("\t");s.insertNode(e);const n=document.createRange();n.setStartAfter(e),n.collapse(!0),i.removeAllRanges(),i.addRange(n),this.updateContent(),this.updateToolbarState()},this.onSelectionChange=()=>{if(!this.editorEl)return;const t=document.getSelection();if(!t||0===t.rangeCount)return;const i=t.getRangeAt(0);this.editorEl.contains(i.commonAncestorContainer)&&(this.lastRange=i.cloneRange(),this.updateToolbarState())}}createRenderRoot(){return this}injectCss(t){if(this.querySelector("style[data-rte-style]"))return;const i=document.createElement("style");i.setAttribute("data-rte-style","true"),i.textContent=t,this.insertBefore(i,this.firstChild)}connectedCallback(){super.connectedCallback(),this.injectCss(p.cssText),this.ensureStructure(),this.placeholder&&this.editorEl&&(this.editorEl.dataset.placeholder=this.placeholder),this.value&&!this.editorEl.innerHTML.trim()&&(this.editorEl.innerHTML=this.value),this.content=this.editorEl.innerHTML,this.toolbarEl&&this.wireAuthoredToolbar(this.toolbarEl),this.mentionsEl=this.querySelector("nile-rte-mentions"),this.mentionsEl&&(this.mentionsEl.attach?.(this.editorEl,this),this.mentionsEl.setExternalConfig?.(this.mentions)),this.wireEditor(),document.addEventListener("selectionchange",this.onSelectionChange,{passive:!0}),this.updateToolbarState(),this.syncPreview()}ensureStructure(){this.toolbarEl=this.querySelector("nile-rte-toolbar"),this.previewEl=this.querySelector("nile-rte-preview"),this.containerEl=this.querySelector(".rte-container"),this.containerEl||(this.containerEl=document.createElement("div"),this.containerEl.className="rte-container",this.appendChild(this.containerEl)),this.ensureEditor(),this.toolbarEl&&this.toolbarEl.parentElement!==this.containerEl&&this.containerEl.appendChild(this.toolbarEl),this.editorEl.parentElement!==this.containerEl&&this.containerEl.appendChild(this.editorEl),this.previewEl&&(this.previewEl.parentElement!==this&&this.appendChild(this.previewEl),this.previewEl.previousElementSibling!==this.containerEl&&this.insertBefore(this.previewEl,this.containerEl.nextSibling))}updateContentWithMention(t){this.updateContent(),this.dispatchEvent(new CustomEvent("nile-change",{detail:{content:this.content,mention:t},bubbles:!0,composed:!0}))}disconnectedCallback(){this.unwireEditor(),document.removeEventListener("selectionchange",this.onSelectionChange),this.mentionsEl&&this.mentionsEl.detach&&this.mentionsEl.detach(),super.disconnectedCallback()}updated(t){t.has("value")&&this.editorEl&&this.value!==this.editorEl.innerHTML&&(this.editorEl.innerHTML=this.value||"<p><br></p>",this.content=this.editorEl.innerHTML,this.syncPreview()),t.has("singleLineEditor")&&(this.editorEl&&this.editorEl.classList.toggle("single-line",this.singleLineEditor),this.previewEl&&this.previewEl.classList.toggle("single-line",this.singleLineEditor)),t.has("disabled")&&this.editorEl&&(this.editorEl.setAttribute("contenteditable",this.disabled?"false":"true"),this.editorEl.tabIndex=this.disabled?-1:0,this.linkEl&&(this.linkEl.disabled=this.disabled)),t.has("placeholder")&&this.editorEl&&(this.placeholder?this.editorEl.dataset.placeholder=this.placeholder:delete this.editorEl.dataset.placeholder)}ensureEditor(){if(this.editorEl=this.querySelector(".editor"),!this.editorEl){const t=document.createElement("article");t.className="editor",t.setAttribute("contenteditable",this.disabled?"false":"true"),t.tabIndex=this.disabled?-1:0,this.editorEl=t}this.placeholder&&(this.editorEl.dataset.placeholder=this.placeholder),this.editorEl.innerHTML.trim()||(this.editorEl.innerHTML="<p><br></p>")}unwrapMention(t,i=!0){const s=t.parentNode;if(!s)return;const e=i?(t.textContent??"").replace(/\u200B/g,""):"",n=document.createTextNode(e);s.insertBefore(n,t),s.removeChild(t);const h=document.createRange();h.setStartAfter(n),h.collapse(!0);const r=window.getSelection();r?.removeAllRanges(),r?.addRange(h)}scrubBrokenMentions(){if(!this.editorEl)return;this.editorEl.querySelectorAll("span.mention").forEach((t=>{const i=t,s=i.getAttribute("data-mention-key"),e=i.getAttribute("data-mention-label"),n=i.getAttribute("data-mention-trigger")||"",h=(i.textContent??"").replace(/\u200B/g,"").trim(),r=!!s&&!!e&&h.length>0&&h.startsWith(n)&&h.includes(e);h&&r||this.unwrapMention(i,!0)}))}wireEditor(){this.editorEl.addEventListener("click",this.onEditorClick),this.editorEl.addEventListener("input",this.onEditorInput),this.editorEl.addEventListener("mouseup",this.onEditorMouseup),this.editorEl.addEventListener("keyup",this.onEditorKeyup),this.editorEl.addEventListener("keydown",this.onEditorKeydown),this.editorEl.addEventListener("paste",this.onEditorPaste),this.editorEl.addEventListener("drop",this.onEditorDrop)}unwireEditor(){this.editorEl&&(this.editorEl.removeEventListener("click",this.onEditorClick),this.editorEl.removeEventListener("input",this.onEditorInput),this.editorEl.removeEventListener("mouseup",this.onEditorMouseup),this.editorEl.removeEventListener("keyup",this.onEditorKeyup),this.editorEl.removeEventListener("keydown",this.onEditorKeydown),this.editorEl.removeEventListener("paste",this.onEditorPaste),this.editorEl.removeEventListener("drop",this.onEditorDrop))}wireAuthoredToolbar(t){this.buttonMap.clear(),this.headingSelect=null,this.fontSelect=null,this.colorInput=null,Array.from(t.children).forEach((t=>{const i=t.tagName.toLowerCase();if("nile-rte-select"===i&&"align"===t.getAttribute("type"))return t.disabled=this.disabled,void t.addEventListener("change",(t=>{this.focusAndRestore();const i=t.detail;h(this.editorEl,i),this.updateContent(),this.updateToolbarState()}));if("nile-rte-link"===i)return t.editorEl=this.editorEl,t.disabled=this.disabled,this.linkEl=t,void t.addEventListener("nile-link-changed",(()=>{this.updateContent(),this.updateToolbarState()}));if("nile-rte-toolbar-item"===i){let i=t.querySelector(":scope > nile-button");const s=t.getAttribute("name")||"",e=t.getAttribute("label")||s,n=t.getAttribute("icon"),h=t.innerHTML.trim().length>0;if(i||(i=document.createElement("nile-button"),i.variant="tertiary",i.size="small"),i.disabled=this.disabled,n)i.innerHTML=`<nile-icon name="${n}" color="${this.disabled?"var(--nile-colors-neutral-500, var(--ng-colors-fg-disabled-subtle))":"var(--nile-colors-dark-900, var(--ng-colors-text-primary-900))"}" ></nile-icon>`,t.innerHTML="";else if(h)i.innerHTML=t.innerHTML,t.innerHTML="";else{const n=b[s];n?i.innerHTML=`<nile-icon name="${n}" size="20" color="${this.disabled?"var(--nile-colors-neutral-500, var(--ng-colors-fg-disabled-subtle))":"var(--nile-colors-dark-900, var(--ng-colors-text-primary-900))"}" ></nile-icon>`:i.textContent=e||s,t.innerHTML=""}if(!i.isConnected)if(this.disabled)t.appendChild(i);else{const s=document.createElement("nile-lite-tooltip");s.setAttribute("content",e),s.appendChild(i),t.appendChild(s)}i.setAttribute("aria-label",e),i.addEventListener("mousedown",(t=>t.preventDefault())),i.addEventListener("click",(()=>this.onToolbarCommand(s)));const r=this.buttonMap.get(s)??[];return r.push(i),void this.buttonMap.set(s,r)}if("nile-rte-select"!==i)"nile-rte-color"!==i||t.addEventListener("change",(t=>{this.focusAndRestore();const{mode:i,value:s}=t.detail;"backColor"===i?d(this.editorEl,s):f(this.editorEl,s),this.updateContent(),this.updateToolbarState()}));else{const i=t.getAttribute("type")||"";t.addEventListener("change",(t=>{this.focusAndRestore();const s=t.detail;"heading"===i?r(this.editorEl,s):"font"===i&&a(this.editorEl,s),this.updateContent(),this.updateToolbarState()}))}}))}saveSelection(){const t=window.getSelection();t&&t.rangeCount&&(this.lastRange=t.getRangeAt(0).cloneRange())}restoreSelection(){if(!this.lastRange)return;const t=document.getSelection();t&&(t.removeAllRanges(),t.addRange(this.lastRange))}focusAndRestore(){this.editorEl?.focus(),this.restoreSelection()}getCleanContent(){const t=this.editorEl.cloneNode(!0);return t.querySelectorAll("*").forEach((t=>{t.removeAttribute("style")})),t.innerHTML}insertList(t){if(this.restoreSelection(),!this.lastRange)return;const i=document.createElement(t),s=this.lastRange.extractContents(),e=document.createElement("div");e.appendChild(s),Array.from(e.childNodes).forEach((t=>{if(t.nodeType===Node.TEXT_NODE&&!t.textContent?.trim())return;const s=document.createElement("li");s.appendChild(t),i.appendChild(s)})),this.lastRange.insertNode(i),this.afterListEdit(i)}afterListEdit(t){const i=document.createRange();i.setStartAfter(t),i.collapse(!0);const s=window.getSelection();s?.removeAllRanges(),s?.addRange(i),this.saveSelection(),this.updateContent(),this.updateToolbarState()}ensureAtLeastOneParagraph(){const t=this.editorEl;if(!t)return;const i=""===(t.textContent??"").replace(/\u200B/g,"").trim();if(0===t.childNodes.length||i){t.innerHTML="<p><br></p>";const i=t.querySelector("p");if(i){const t=document.createRange();t.setStart(i,0),t.collapse(!0);const s=window.getSelection();s&&(s.removeAllRanges(),s.addRange(t))}return}if(!t.querySelector("p,h1,h2,h3,h4,h5,h6,ul,ol,table,blockquote,pre")){const i=document.createElement("p");for(;t.firstChild;)i.appendChild(t.firstChild);return i.hasChildNodes()||i.appendChild(document.createElement("br")),void t.appendChild(i)}t.querySelectorAll("p").forEach((t=>{""===(t.textContent??"").replace(/\u200B/g,"")&&(t.innerHTML.toLowerCase().includes("<br")||(t.innerHTML="<br>"))}))}onToolbarCommand(t){if(!this.disabled){switch(this.focusAndRestore(),t){case"bold":c(this.editorEl,"strong");break;case"italic":c(this.editorEl,"em");break;case"underline":c(this.editorEl,"u");break;case"left":h(this.editorEl,"left");break;case"center":h(this.editorEl,"center");break;case"right":h(this.editorEl,"right");break;case"justify":h(this.editorEl,"justify");break;case"ul":m(this.editorEl,"ul"),this.updateContent(),this.updateToolbarState();break;case"ol":m(this.editorEl,"ol"),this.updateContent(),this.updateToolbarState();break;case"link":break;case"clear":const t=document.createTreeWalker(this.editorEl,NodeFilter.SHOW_ELEMENT),i=[];for(;t.nextNode();){const s=t.currentNode;s.removeAttribute("style"),["B","STRONG","I","EM","U","SPAN","FONT"].includes(s.tagName)&&i.push(s)}for(const t of i){for(;t.firstChild;)t.parentNode?.insertBefore(t.firstChild,t);t.remove()}this.ensureAtLeastOneParagraph()}this.updateContent(),this.updateToolbarState()}}setBtnActive(t,i){const s=this.buttonMap.get(t);if(s)for(const t of s)t.toggleAttribute("data-active",!!i)}updateToolbarState(){if(!this.editorEl)return;const t=document.getSelection();if(!t||0===t.rangeCount)return;const i=t.getRangeAt(0);if(!this.editorEl.contains(i.commonAncestorContainer))return;const s=o(i.startContainer)||this.editorEl,e=getComputedStyle(s),n=l(i.startContainer,this.editorEl)||this.editorEl,h=(()=>{let t=s;for(;t&&t!==this.editorEl;){if(t instanceof HTMLElement){const i=t.tagName.toLowerCase();if("strong"===i||"b"===i)return!0;const s=getComputedStyle(t).fontWeight;if(parseInt(s,10)>=600)return!0}t=t.parentNode}return!1})(),r=(()=>{let t=s;for(;t&&t!==this.editorEl;){if(t instanceof HTMLElement){const i=t.tagName.toLowerCase();if("em"===i||"i"===i)return!0;if("italic"===getComputedStyle(t).fontStyle)return!0}t=t.parentNode}return!1})(),c=(()=>{let t=s;for(;t&&t!==this.editorEl;){if(t instanceof HTMLElement){const i=getComputedStyle(t).textDecorationLine;if(i&&i.includes("underline"))return!0;if("u"===t.tagName.toLowerCase())return!0}t=t.parentNode}return!1})(),a=!!s.closest("a"),d=n.style.textAlign||getComputedStyle(n).textAlign||"start",f="start"===d?"left":d,m=!!s.closest("li")&&s.closest("ul,ol")?.tagName.toLowerCase()||"";if(this.setBtnActive("bold",h),this.setBtnActive("italic",r),this.setBtnActive("underline",c),this.setBtnActive("link",a),this.linkEl){const t=this.linkEl.querySelector("nile-button");t&&t.toggleAttribute("data-active",a)}if(this.setBtnActive("left","left"===f&&!["center","right","justify"].includes(f)),this.setBtnActive("center","center"===f),this.setBtnActive("right","right"===f),this.setBtnActive("justify","justify"===f),this.setBtnActive("ul","ul"===m),this.setBtnActive("ol","ol"===m),this.headingSelect){const t=n.tagName.toLowerCase(),i=["h1","h2","h3"].includes(t)?t:"p";this.headingSelect.value!==i&&(this.headingSelect.value=i)}if(this.fontSelect){const t=(e.fontFamily||"").replace(/["']/g,"").split(",")[0].trim().toLowerCase();if(t)for(const i of Array.from(this.fontSelect.options))if(i.value.toLowerCase()===t){this.fontSelect.value=i.value;break}}if(this.colorInput){const t=u(e.color);t&&this.colorInput.value.toLowerCase()!==t.toLowerCase()&&(this.colorInput.value=t),this.colorSwatchEl&&(this.colorSwatchEl.style.backgroundColor=this.colorInput.value)}if(this.bgColorInput){const t=getComputedStyle(s).backgroundColor;if(t&&!/transparent|rgba\(\s*0\s*,\s*0\s*,\s*0\s*,\s*0\s*\)/i.test(t)){const i=u(t);i&&this.bgColorInput.value.toLowerCase()!==i.toLowerCase()&&(this.bgColorInput.value=i)}this.bgSwatchEl&&(this.bgSwatchEl.style.backgroundColor=this.bgColorInput.value)}}syncPreview(){this.updateContent()}getComputedImportantProps(){return Array.from(new Set([...g,...this.whitelist??[]]))}updateContent(){if(!this.editorEl)return;this.ensureAtLeastOneParagraph();const t=""===(this.editorEl.textContent??"").trim();this.editorEl.classList.toggle("empty",t);const i=window.getSelection(),s=i&&i.rangeCount>0&&this.editorEl.contains(i.getRangeAt(0).startContainer)?i.getRangeAt(0).cloneRange():null,e=this.editorEl.cloneNode(!0);if(this.noStyles)e.querySelectorAll("[style]").forEach((t=>t.removeAttribute("style")));else{const t=document.createTreeWalker(this.editorEl,NodeFilter.SHOW_ELEMENT),i=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT),s=this.getComputedImportantProps();for(;t.nextNode()&&i.nextNode();){const e=t.currentNode,n=i.currentNode,h=window.getComputedStyle(e),r=s.map((t=>`${t}:${h.getPropertyValue(t)}`)).join(";");r.trim()&&n.setAttribute("style",r)}}s&&i&&this.editorEl.contains(s.startContainer)&&(i.removeAllRanges(),i.addRange(s)),this.content=e.innerHTML,this.previewEl&&(this.previewEl.innerHTML=this.content),this.dispatchEvent(new CustomEvent("nile-change",{detail:{content:this.content},bubbles:!0,composed:!0}))}};t([s({type:String,attribute:!0,reflect:!0})],y.prototype,"value",void 0),t([s({type:Boolean,attribute:!0,reflect:!0})],y.prototype,"noStyles",void 0),t([s({type:Boolean,attribute:!0,reflect:!0})],y.prototype,"disabled",void 0),t([s({type:Boolean,attribute:"singlelineeditor",reflect:!0})],y.prototype,"singleLineEditor",void 0),t([s({type:String})],y.prototype,"placeholder",void 0),t([s({attribute:"mentions",reflect:!0,converter:{fromAttribute:t=>{try{const i=JSON.parse(t),s={};for(const t of Object.keys(i)){const e=i[t];Array.isArray(e)&&(s[t]=e.filter((t=>t&&"string"==typeof t.key&&"string"==typeof t.label)).map((t=>({key:t.key,label:t.label}))))}return s}catch{return{}}},toAttribute:t=>JSON.stringify(t)}})],y.prototype,"mentions",void 0),t([s({attribute:"whitelist",reflect:!1,converter:{fromAttribute:t=>{try{const i=JSON.parse(t);return Array.isArray(i)?i.filter((t=>"string"==typeof t)):[]}catch{return[]}}}})],y.prototype,"whitelist",void 0),t([e()],y.prototype,"content",void 0),y=t([n("nile-rich-text-editor")],y);export{y as N};
|
|
1
|
+
import{__decorate as t}from"tslib";import{LitElement as i}from"lit";import{property as s,state as e,customElement as n}from"lit/decorators.js";import"./nile-rte-toolbar.esm.js";import"./nile-rte-toolbar-item.esm.js";import"./nile-rte-select.esm.js";import"./nile-rte-color.esm.js";import"./nile-rte-divider.esm.js";import"./nile-rte-preview.esm.js";import"./nile-rte-mentions.esm.js";import"./nile-rte-link.esm.js";import{s as h,a as r,n as o,c as l}from"./utils/block-utils.esm.js";import{t as c,s as a,r as u}from"./utils/inline-utils.esm.js";import{s as d,a as f}from"./utils/color-utils.esm.js";import{t as m}from"./utils/list-utils.esm.js";import{s as p}from"./nile-rich-text-editor.css.esm.js";const b={bold:"format_bold",italic:"format_italic",underline:"format_underline",link:"link_2",left:"format_align_left",center:"format_align_middle",right:"format_align_right",justify:"format_align_justify",ul:"format_list_bulleted",ol:"format_list_numbered",clear:"format_clear"},g=["font-weight","font-style","text-decoration","color","background-color","font-size","font-family","text-align","line-height","letter-spacing","white-space","vertical-align","list-style-position","padding-inline-start"];let y=class extends i{constructor(){super(...arguments),this.value="",this.noStyles=!1,this.disabled=!1,this.singleLineEditor=!1,this.placeholder="",this.mentions={},this.whitelist=[],this.content="",this.previewEl=null,this.toolbarEl=null,this.lastRange=null,this.buttonMap=new Map,this.headingSelect=null,this.fontSelect=null,this.colorInput=null,this.bgColorInput=null,this.colorSwatchEl=null,this.bgSwatchEl=null,this.containerEl=null,this.linkEl=null,this.mentionsEl=null,this.onEditorClick=t=>{if(this.disabled)return void t.preventDefault();const i=t.target.closest?.("a");i&&t.preventDefault()},this.onEditorPaste=t=>{this.disabled&&t.preventDefault()},this.onEditorDrop=t=>{this.disabled&&t.preventDefault()},this.onEditorInput=()=>{this.disabled||(this.ensureAtLeastOneParagraph(),this.scrubBrokenMentions(),this.updateContent(),this.updateToolbarState())},this.onEditorMouseup=()=>{this.saveSelection(),this.updateToolbarState()},this.onEditorKeyup=t=>{this.saveSelection(),["ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End"].includes(t.key)&&this.updateToolbarState()},this.onEditorKeydown=t=>{if(this.disabled)return void t.preventDefault();if(this.singleLineEditor&&"Enter"===t.key&&t.shiftKey)return void t.preventDefault();if(t.ctrlKey&&"i"===t.key.toLowerCase()&&(t.preventDefault(),c(this.editorEl,"em"),this.updateContent(),this.updateToolbarState()),this.singleLineEditor&&"Enter"===t.key)return void t.preventDefault();if("Tab"!==t.key)return;t.preventDefault(),this.focusAndRestore();const i=window.getSelection();if(!i||0===i.rangeCount)return;const s=i.getRangeAt(0);if(t.shiftKey){if(s.collapsed&&s.startContainer.nodeType===Node.TEXT_NODE){const t=s.startContainer,e=s.startOffset,n=t.data.slice(0,e),h=n.replace(/(\t|[ \u00a0]{2})$/,"");if(h.length!==n.length){t.data=h+t.data.slice(e);const s=document.createRange();s.setStart(t,h.length),s.collapse(!0),i.removeAllRanges(),i.addRange(s),this.updateContent(),this.updateToolbarState()}}return}s.deleteContents();const e=document.createTextNode("\t");s.insertNode(e);const n=document.createRange();n.setStartAfter(e),n.collapse(!0),i.removeAllRanges(),i.addRange(n),this.updateContent(),this.updateToolbarState()},this.onSelectionChange=()=>{if(!this.editorEl)return;const t=document.getSelection();if(!t||0===t.rangeCount)return;const i=t.getRangeAt(0);this.editorEl.contains(i.commonAncestorContainer)&&(this.lastRange=i.cloneRange(),this.updateToolbarState())}}createRenderRoot(){return this}injectCss(t){if(this.querySelector("style[data-rte-style]"))return;const i=document.createElement("style");i.setAttribute("data-rte-style","true"),i.textContent=t,this.insertBefore(i,this.firstChild)}connectedCallback(){super.connectedCallback(),this.injectCss(p.cssText),this.ensureStructure(),this.placeholder&&this.editorEl&&(this.editorEl.dataset.placeholder=this.placeholder),this.value&&!this.editorEl.innerHTML.trim()&&(this.editorEl.innerHTML=this.value),this.content=this.editorEl.innerHTML,this.toolbarEl&&this.wireAuthoredToolbar(this.toolbarEl),this.mentionsEl=this.querySelector("nile-rte-mentions"),this.mentionsEl&&(this.mentionsEl.attach?.(this.editorEl,this),this.mentionsEl.setExternalConfig?.(this.mentions)),this.wireEditor(),document.addEventListener("selectionchange",this.onSelectionChange,{passive:!0}),this.updateToolbarState(),this.syncPreview()}ensureStructure(){this.toolbarEl=this.querySelector("nile-rte-toolbar"),this.previewEl=this.querySelector("nile-rte-preview"),this.containerEl=this.querySelector(".rte-container"),this.containerEl||(this.containerEl=document.createElement("div"),this.containerEl.className="rte-container",this.appendChild(this.containerEl)),this.ensureEditor(),this.toolbarEl&&this.toolbarEl.parentElement!==this.containerEl&&this.containerEl.appendChild(this.toolbarEl),this.editorEl.parentElement!==this.containerEl&&this.containerEl.appendChild(this.editorEl),this.previewEl&&(this.previewEl.parentElement!==this&&this.appendChild(this.previewEl),this.previewEl.previousElementSibling!==this.containerEl&&this.insertBefore(this.previewEl,this.containerEl.nextSibling))}firstUpdated(t){if(super.firstUpdated(t),this.editorEl){/^((?!chrome|android).)*safari/i.test(navigator.userAgent)&&this.editorEl.classList.add("safari")}}updateContentWithMention(t){this.updateContent(),this.dispatchEvent(new CustomEvent("nile-change",{detail:{content:this.content,mention:t},bubbles:!0,composed:!0}))}disconnectedCallback(){this.unwireEditor(),document.removeEventListener("selectionchange",this.onSelectionChange),this.mentionsEl&&this.mentionsEl.detach&&this.mentionsEl.detach(),super.disconnectedCallback()}updated(t){t.has("value")&&this.editorEl&&this.value!==this.editorEl.innerHTML&&(this.editorEl.innerHTML=this.value||"<p><br></p>",this.content=this.editorEl.innerHTML,this.syncPreview()),t.has("singleLineEditor")&&(this.editorEl&&this.editorEl.classList.toggle("single-line",this.singleLineEditor),this.previewEl&&this.previewEl.classList.toggle("single-line",this.singleLineEditor)),t.has("disabled")&&this.editorEl&&(this.editorEl.setAttribute("contenteditable",this.disabled?"false":"true"),this.editorEl.tabIndex=this.disabled?-1:0,this.linkEl&&(this.linkEl.disabled=this.disabled)),t.has("placeholder")&&this.editorEl&&(this.placeholder?this.editorEl.dataset.placeholder=this.placeholder:delete this.editorEl.dataset.placeholder)}ensureEditor(){if(this.editorEl=this.querySelector(".editor"),!this.editorEl){const t=document.createElement("article");t.className="editor",t.setAttribute("contenteditable",this.disabled?"false":"true"),t.tabIndex=this.disabled?-1:0,this.editorEl=t}this.placeholder&&(this.editorEl.dataset.placeholder=this.placeholder),this.editorEl.innerHTML.trim()||(this.editorEl.innerHTML="<p><br></p>")}unwrapMention(t,i=!0){const s=t.parentNode;if(!s)return;const e=i?(t.textContent??"").replace(/\u200B/g,""):"",n=document.createTextNode(e);s.insertBefore(n,t),s.removeChild(t);const h=document.createRange();h.setStartAfter(n),h.collapse(!0);const r=window.getSelection();r?.removeAllRanges(),r?.addRange(h)}scrubBrokenMentions(){if(!this.editorEl)return;this.editorEl.querySelectorAll("span.mention").forEach((t=>{const i=t,s=i.getAttribute("data-mention-key"),e=i.getAttribute("data-mention-label"),n=i.getAttribute("data-mention-trigger")||"",h=(i.textContent??"").replace(/\u200B/g,"").trim(),r=!!s&&!!e&&h.length>0&&h.startsWith(n)&&h.includes(e);h&&r||this.unwrapMention(i,!0)}))}wireEditor(){this.editorEl.addEventListener("click",this.onEditorClick),this.editorEl.addEventListener("input",this.onEditorInput),this.editorEl.addEventListener("mouseup",this.onEditorMouseup),this.editorEl.addEventListener("keyup",this.onEditorKeyup),this.editorEl.addEventListener("keydown",this.onEditorKeydown),this.editorEl.addEventListener("paste",this.onEditorPaste),this.editorEl.addEventListener("drop",this.onEditorDrop)}unwireEditor(){this.editorEl&&(this.editorEl.removeEventListener("click",this.onEditorClick),this.editorEl.removeEventListener("input",this.onEditorInput),this.editorEl.removeEventListener("mouseup",this.onEditorMouseup),this.editorEl.removeEventListener("keyup",this.onEditorKeyup),this.editorEl.removeEventListener("keydown",this.onEditorKeydown),this.editorEl.removeEventListener("paste",this.onEditorPaste),this.editorEl.removeEventListener("drop",this.onEditorDrop))}wireAuthoredToolbar(t){this.buttonMap.clear(),this.headingSelect=null,this.fontSelect=null,this.colorInput=null,Array.from(t.children).forEach((t=>{const i=t.tagName.toLowerCase();if("nile-rte-select"===i&&"align"===t.getAttribute("type"))return t.disabled=this.disabled,void t.addEventListener("change",(t=>{this.focusAndRestore();const i=t.detail;h(this.editorEl,i),this.updateContent(),this.updateToolbarState()}));if("nile-rte-link"===i)return t.editorEl=this.editorEl,t.disabled=this.disabled,this.linkEl=t,void t.addEventListener("nile-link-changed",(()=>{this.updateContent(),this.updateToolbarState()}));if("nile-rte-toolbar-item"===i){let i=t.querySelector(":scope > nile-button");const s=t.getAttribute("name")||"",e=t.getAttribute("label")||s,n=t.getAttribute("icon"),h=t.innerHTML.trim().length>0;if(i||(i=document.createElement("nile-button"),i.variant="tertiary",i.size="small"),i.disabled=this.disabled,n)i.innerHTML=`<nile-icon name="${n}" color="${this.disabled?"var(--nile-colors-neutral-500, var(--ng-colors-fg-disabled-subtle))":"var(--nile-colors-dark-900, var(--ng-colors-text-primary-900))"}" ></nile-icon>`,t.innerHTML="";else if(h)i.innerHTML=t.innerHTML,t.innerHTML="";else{const n=b[s];n?i.innerHTML=`<nile-icon name="${n}" size="20" color="${this.disabled?"var(--nile-colors-neutral-500, var(--ng-colors-fg-disabled-subtle))":"var(--nile-colors-dark-900, var(--ng-colors-text-primary-900))"}" ></nile-icon>`:i.textContent=e||s,t.innerHTML=""}if(!i.isConnected)if(this.disabled)t.appendChild(i);else{const s=document.createElement("nile-lite-tooltip");s.setAttribute("content",e),s.appendChild(i),t.appendChild(s)}i.setAttribute("aria-label",e),i.addEventListener("mousedown",(t=>t.preventDefault())),i.addEventListener("click",(()=>this.onToolbarCommand(s)));const r=this.buttonMap.get(s)??[];return r.push(i),void this.buttonMap.set(s,r)}if("nile-rte-select"!==i)"nile-rte-color"!==i||t.addEventListener("change",(t=>{this.focusAndRestore();const{mode:i,value:s}=t.detail;"backColor"===i?d(this.editorEl,s):f(this.editorEl,s),this.updateContent(),this.updateToolbarState()}));else{const i=t.getAttribute("type")||"";t.addEventListener("change",(t=>{this.focusAndRestore();const s=t.detail;"heading"===i?r(this.editorEl,s):"font"===i&&a(this.editorEl,s),this.updateContent(),this.updateToolbarState()}))}}))}saveSelection(){const t=window.getSelection();t&&t.rangeCount&&(this.lastRange=t.getRangeAt(0).cloneRange())}restoreSelection(){if(!this.lastRange)return;const t=document.getSelection();t&&(t.removeAllRanges(),t.addRange(this.lastRange))}focusAndRestore(){this.editorEl?.focus(),this.restoreSelection()}getCleanContent(){const t=this.editorEl.cloneNode(!0);return t.querySelectorAll("*").forEach((t=>{t.removeAttribute("style")})),t.innerHTML}insertList(t){if(this.restoreSelection(),!this.lastRange)return;const i=document.createElement(t),s=this.lastRange.extractContents(),e=document.createElement("div");e.appendChild(s),Array.from(e.childNodes).forEach((t=>{if(t.nodeType===Node.TEXT_NODE&&!t.textContent?.trim())return;const s=document.createElement("li");s.appendChild(t),i.appendChild(s)})),this.lastRange.insertNode(i),this.afterListEdit(i)}afterListEdit(t){const i=document.createRange();i.setStartAfter(t),i.collapse(!0);const s=window.getSelection();s?.removeAllRanges(),s?.addRange(i),this.saveSelection(),this.updateContent(),this.updateToolbarState()}ensureAtLeastOneParagraph(){const t=this.editorEl;if(!t)return;const i=""===(t.textContent??"").replace(/\u200B/g,"").trim();if(0===t.childNodes.length||i){t.innerHTML="<p><br></p>";const i=t.querySelector("p");if(i){const t=document.createRange();t.setStart(i,0),t.collapse(!0);const s=window.getSelection();s&&(s.removeAllRanges(),s.addRange(t))}return}if(!t.querySelector("p,h1,h2,h3,h4,h5,h6,ul,ol,table,blockquote,pre")){const i=document.createElement("p");for(;t.firstChild;)i.appendChild(t.firstChild);return i.hasChildNodes()||i.appendChild(document.createElement("br")),void t.appendChild(i)}t.querySelectorAll("p").forEach((t=>{""===(t.textContent??"").replace(/\u200B/g,"")&&(t.innerHTML.toLowerCase().includes("<br")||(t.innerHTML="<br>"))}))}onToolbarCommand(t){if(!this.disabled){switch(this.focusAndRestore(),t){case"bold":c(this.editorEl,"strong");break;case"italic":c(this.editorEl,"em");break;case"underline":c(this.editorEl,"u");break;case"left":h(this.editorEl,"left");break;case"center":h(this.editorEl,"center");break;case"right":h(this.editorEl,"right");break;case"justify":h(this.editorEl,"justify");break;case"ul":m(this.editorEl,"ul"),this.updateContent(),this.updateToolbarState();break;case"ol":m(this.editorEl,"ol"),this.updateContent(),this.updateToolbarState();break;case"link":break;case"clear":const t=document.createTreeWalker(this.editorEl,NodeFilter.SHOW_ELEMENT),i=[];for(;t.nextNode();){const s=t.currentNode;s.removeAttribute("style"),["B","STRONG","I","EM","U","SPAN","FONT"].includes(s.tagName)&&i.push(s)}for(const t of i){for(;t.firstChild;)t.parentNode?.insertBefore(t.firstChild,t);t.remove()}this.ensureAtLeastOneParagraph()}this.updateContent(),this.updateToolbarState()}}setBtnActive(t,i){const s=this.buttonMap.get(t);if(s)for(const t of s)t.toggleAttribute("data-active",!!i)}updateToolbarState(){if(!this.editorEl)return;const t=document.getSelection();if(!t||0===t.rangeCount)return;const i=t.getRangeAt(0);if(!this.editorEl.contains(i.commonAncestorContainer))return;const s=o(i.startContainer)||this.editorEl,e=getComputedStyle(s),n=l(i.startContainer,this.editorEl)||this.editorEl,h=(()=>{let t=s;for(;t&&t!==this.editorEl;){if(t instanceof HTMLElement){const i=t.tagName.toLowerCase();if("strong"===i||"b"===i)return!0;const s=getComputedStyle(t).fontWeight;if(parseInt(s,10)>=600)return!0}t=t.parentNode}return!1})(),r=(()=>{let t=s;for(;t&&t!==this.editorEl;){if(t instanceof HTMLElement){const i=t.tagName.toLowerCase();if("em"===i||"i"===i)return!0;if("italic"===getComputedStyle(t).fontStyle)return!0}t=t.parentNode}return!1})(),c=(()=>{let t=s;for(;t&&t!==this.editorEl;){if(t instanceof HTMLElement){const i=getComputedStyle(t).textDecorationLine;if(i&&i.includes("underline"))return!0;if("u"===t.tagName.toLowerCase())return!0}t=t.parentNode}return!1})(),a=!!s.closest("a"),d=n.style.textAlign||getComputedStyle(n).textAlign||"start",f="start"===d?"left":d,m=!!s.closest("li")&&s.closest("ul,ol")?.tagName.toLowerCase()||"";if(this.setBtnActive("bold",h),this.setBtnActive("italic",r),this.setBtnActive("underline",c),this.setBtnActive("link",a),this.linkEl){const t=this.linkEl.querySelector("nile-button");t&&t.toggleAttribute("data-active",a)}if(this.setBtnActive("left","left"===f&&!["center","right","justify"].includes(f)),this.setBtnActive("center","center"===f),this.setBtnActive("right","right"===f),this.setBtnActive("justify","justify"===f),this.setBtnActive("ul","ul"===m),this.setBtnActive("ol","ol"===m),this.headingSelect){const t=n.tagName.toLowerCase(),i=["h1","h2","h3"].includes(t)?t:"p";this.headingSelect.value!==i&&(this.headingSelect.value=i)}if(this.fontSelect){const t=(e.fontFamily||"").replace(/["']/g,"").split(",")[0].trim().toLowerCase();if(t)for(const i of Array.from(this.fontSelect.options))if(i.value.toLowerCase()===t){this.fontSelect.value=i.value;break}}if(this.colorInput){const t=u(e.color);t&&this.colorInput.value.toLowerCase()!==t.toLowerCase()&&(this.colorInput.value=t),this.colorSwatchEl&&(this.colorSwatchEl.style.backgroundColor=this.colorInput.value)}if(this.bgColorInput){const t=getComputedStyle(s).backgroundColor;if(t&&!/transparent|rgba\(\s*0\s*,\s*0\s*,\s*0\s*,\s*0\s*\)/i.test(t)){const i=u(t);i&&this.bgColorInput.value.toLowerCase()!==i.toLowerCase()&&(this.bgColorInput.value=i)}this.bgSwatchEl&&(this.bgSwatchEl.style.backgroundColor=this.bgColorInput.value)}}syncPreview(){this.updateContent()}getComputedImportantProps(){return Array.from(new Set([...g,...this.whitelist??[]]))}updateContent(){if(!this.editorEl)return;this.ensureAtLeastOneParagraph();const t=""===(this.editorEl.textContent??"").trim();this.editorEl.classList.toggle("empty",t);const i=window.getSelection(),s=i&&i.rangeCount>0&&this.editorEl.contains(i.getRangeAt(0).startContainer)?i.getRangeAt(0).cloneRange():null,e=this.editorEl.cloneNode(!0);if(this.noStyles)e.querySelectorAll("[style]").forEach((t=>t.removeAttribute("style")));else{const t=document.createTreeWalker(this.editorEl,NodeFilter.SHOW_ELEMENT),i=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT),s=this.getComputedImportantProps();for(;t.nextNode()&&i.nextNode();){const e=t.currentNode,n=i.currentNode,h=window.getComputedStyle(e),r=s.map((t=>`${t}:${h.getPropertyValue(t)}`)).join(";");r.trim()&&n.setAttribute("style",r)}}s&&i&&this.editorEl.contains(s.startContainer)&&(i.removeAllRanges(),i.addRange(s)),this.content=e.innerHTML,this.previewEl&&(this.previewEl.innerHTML=this.content),this.dispatchEvent(new CustomEvent("nile-change",{detail:{content:this.content},bubbles:!0,composed:!0}))}};t([s({type:String,attribute:!0,reflect:!0})],y.prototype,"value",void 0),t([s({type:Boolean,attribute:!0,reflect:!0})],y.prototype,"noStyles",void 0),t([s({type:Boolean,attribute:!0,reflect:!0})],y.prototype,"disabled",void 0),t([s({type:Boolean,attribute:"singlelineeditor",reflect:!0})],y.prototype,"singleLineEditor",void 0),t([s({type:String})],y.prototype,"placeholder",void 0),t([s({attribute:"mentions",reflect:!0,converter:{fromAttribute:t=>{try{const i=JSON.parse(t),s={};for(const t of Object.keys(i)){const e=i[t];Array.isArray(e)&&(s[t]=e.filter((t=>t&&"string"==typeof t.key&&"string"==typeof t.label)).map((t=>({key:t.key,label:t.label}))))}return s}catch{return{}}},toAttribute:t=>JSON.stringify(t)}})],y.prototype,"mentions",void 0),t([s({attribute:"whitelist",reflect:!1,converter:{fromAttribute:t=>{try{const i=JSON.parse(t);return Array.isArray(i)?i.filter((t=>"string"==typeof t)):[]}catch{return[]}}}})],y.prototype,"whitelist",void 0),t([e()],y.prototype,"content",void 0),y=t([n("nile-rich-text-editor")],y);export{y as N};
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { css } from 'lit';
|
|
2
2
|
export const styles = css `
|
|
3
3
|
.editor { all: revert;
|
|
4
|
-
|
|
4
|
+
}
|
|
5
|
+
.rte-container .editor.safari {
|
|
6
|
+
-webkit-user-modify: read-write;
|
|
7
|
+
}
|
|
5
8
|
|
|
6
9
|
nile-rich-text-editor {
|
|
7
10
|
position: relative;
|
|
@@ -200,7 +203,7 @@ nile-rich-text-editor[disabled] .editor a {
|
|
|
200
203
|
content: attr(data-placeholder);
|
|
201
204
|
color: var(--nile-colors-neutral-500, var(--ng-colors-text-secondary));
|
|
202
205
|
position: absolute;
|
|
203
|
-
font-family: var(
|
|
206
|
+
font-family: var(--nile-font-family-sans-serif, var(--ng-font-family-body));
|
|
204
207
|
pointer-events: none;
|
|
205
208
|
user-select: none;
|
|
206
209
|
padding-top: 16px;
|
|
@@ -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":"AACA,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":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyNxB,CAAC;AAEF,eAAe,CAAC,MAAM,CAAC,CAAC","sourcesContent":[" \nimport { css } from 'lit';\n\nexport const styles = css`\n .editor { all: revert;\n }\n .rte-container .editor.safari {\n -webkit-user-modify: read-write;\n }\n\n nile-rich-text-editor {\n position: relative;\n display: block;\n font-family: inherit;\n }\n\n\n .rte-container {\n width: 100%;\n border: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-neutral));\n border-radius: var(--nile-radius-radius-xl, var(--ng-radius-md));\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n box-sizing: border-box;\n }\n\n \n .rte-container nile-rte-toolbar {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px;\n border-bottom: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-neutral));\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n border-radius: 8px 8px 0 0;\n width: 100%; \n box-sizing: border-box; \n}\n\n .rte-container .editor {\n min-height: 160px;\n width: 100%;\n padding: 12px;\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n border-radius: 0 0 8px 8px;\n outline: none;\n tab-size: 4;\n -moz-tab-size: 4;\n word-break: break-word;\n box-sizing: border-box;\n border-radius: var(--nile-radius-radius-xl, var(--ng-radius-md));\n }\n\n nile-rich-text-editor[disabled] .rte-container {\n border-color: var(--nile-colors-neutral-500, var(--ng-colors-border-disabled));\n cursor: not-allowed !important;\n background: var(--nile-colors-dark-200, var(--ng-colors-bg-disabled-subtle));\n }\n\n nile-rich-text-editor[disabled] .rte-container nile-rte-toolbar {\n border-color: var(--nile-colors-neutral-500, var(--ng-colors-border-disabled));\n cursor: not-allowed !important;\n } \n\n nile-rich-text-editor[disabled] .rte-container .editor {\n background: var(--nile-colors-dark-200, var(--ng-colors-bg-disabled-subtle));\n pointer-events: none;\n user-select: none;\n -webkit-user-select: none;\n -webkit-user-modify: read-only;\n border-color: var(--nile-colors-neutral-500, var(--ng-colors-border-disabled));\n color: var(--nile-colors-dark-500, var(--ng-colors-text-disabled));\n }\n\nnile-rte-preview {\n display: block;\n width: 100%;\n margin-top: 16px; \n padding: 12px;\n border: 1px dashed var(--nile-colors-neutral-400, var(--ng-colors-border-neutral));\n border-radius: var(--nile-radius-radius-xl, var(--ng-radius-md));\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n box-sizing: border-box;\n word-wrap: break-word;\n}\n\n nile-rich-text-editor[disabled] nile-rte-preview {\n background: var(--nile-colors-dark-200, var(--ng-colors-bg-disabled-subtle));\n cursor: not-allowed ;\n border-color: var(--nile-colors-neutral-500, var(--ng-colors-border-disabled));\n user-select: none;\n -webkit-user-select: none;\n color: var(--nile-colors-dark-500, var(--ng-colors-text-disabled));\n}\n\n nile-rte-toolbar-item nile-button::part(base) {\n width: 32px;\n height: 32px;\n padding: 0px 6px;\n border: none;\n }\n\n nile-rte-toolbar-item > button,\n nile-rte-toolbar button {\n border: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-neutral));\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n border-radius: var(--nile-radius-radius-lg, var(--ng-radius-md));\n cursor: pointer;\n }\n\n nile-rte-toolbar-item > button nile-icon { pointer-events: none; }\n\n nile-rte-toolbar-item > button.active {\n border-color: #2563eb;\n background: var(--nile-colors-white-base);\n }\n\n .editor p { margin: 1em 0; }\n .editor h1, .preview h1 {\n font-size: 2em;\n margin: 0.67em 0;\n font-weight: bold;\n }\n .editor h2, .preview h2 {\n font-size: 1.5em;\n margin: 0.83em 0;\n font-weight: bold;\n }\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\n .editor.single-line {\n min-height: 50px;\n max-height: 50px;\n line-height: 1.2;\n overflow-x: auto;\n white-space: nowrap;\n padding: 0px 12px 0px 12px;\n scrollbar-width: none;\n -ms-overflow-style: none;\n }\n nile-rte-preview.single-line {\n min-height: 50px;\n max-height: 50px;\n line-height: 1.2;\n padding: 0px 12px 0px 12px;\n overflow-x: auto;\n white-space: nowrap;\n scrollbar-width: none;\n -ms-overflow-style: none;\n }\n nile-rte-divider { \n margin: 0 4px;\n display: inline-block;\n height: 24px;\n width: 1px;\n background: var(--nile-colors-neutral-400, var(--ng-colors-border-neutral));\n }\n \n .editor ul,\n .editor ol {\n list-style-position: outside;\n padding-inline-start: 24px;\n }\n\n\n \n \n\n nile-rte-toolbar-item nile-button[data-active]::part(base) {\n background-color: var(--nile-colors-primary-400, var(--ng-componentcolors-utility-blue-400));\n}\n\nnile-rte-toolbar-item nile-button[data-active]::part(base):hover {\n background-color: var(--nile-colors-primary-500, var(--ng-componentcolors-utility-blue-500)); \n}\n\nnile-rte-link nile-button[data-active]::part(base) {\n background-color: var(--nile-colors-primary-400, var(--ng-componentcolors-utility-blue-400));\n}\n\nnile-rte-link nile-button[data-active]::part(base):hover {\n background-color: var(--nile-colors-primary-500, var(--ng-componentcolors-utility-blue-500));\n}\n\n.editor a {\n color: var(--nile-colors-primary-600, var(--ng-colors-text-brand-tertiary-600));\n cursor: pointer;\n text-decoration: none;\n}\n\n.editor a:hover {\n text-decoration: none;\n}\n\nnile-rich-text-editor[disabled] .editor a {\n color: var(--nile-colors-dark-500, var(--ng-colors-text-disabled));\n cursor: not-allowed;\n pointer-events: none;\n}\n\n.editor.empty::before {\n content: attr(data-placeholder);\n color: var(--nile-colors-neutral-500, var(--ng-colors-text-secondary));\n position: absolute;\n font-family: var(--nile-font-family-sans-serif, var(--ng-font-family-body));\n pointer-events: none;\n user-select: none;\n padding-top: 16px;\n opacity: 0.7;\n}\n\n\n\n \n\n\n\n`;\n\nexport default [styles];\n"]}
|