@aquera/nile-elements 0.1.64-beta-1.2 → 0.1.65-beta-1.0

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.
Files changed (38) hide show
  1. package/demo/index.html +29 -109
  2. package/dist/index.js +608 -547
  3. package/dist/nile-rich-text-editor/nile-rich-text-editor.cjs.js +1 -1
  4. package/dist/nile-rich-text-editor/nile-rich-text-editor.cjs.js.map +1 -1
  5. package/dist/nile-rich-text-editor/nile-rich-text-editor.css.cjs.js +1 -1
  6. package/dist/nile-rich-text-editor/nile-rich-text-editor.css.cjs.js.map +1 -1
  7. package/dist/nile-rich-text-editor/nile-rich-text-editor.css.esm.js +45 -2
  8. package/dist/nile-rich-text-editor/nile-rich-text-editor.esm.js +1 -1
  9. package/dist/nile-rich-text-editor/nile-rte-mentions.cjs.js +1 -1
  10. package/dist/nile-rich-text-editor/nile-rte-mentions.cjs.js.map +1 -1
  11. package/dist/nile-rich-text-editor/nile-rte-mentions.esm.js +1 -1
  12. package/dist/nile-rich-text-editor/nile-rte-select.cjs.js +1 -1
  13. package/dist/nile-rich-text-editor/nile-rte-select.cjs.js.map +1 -1
  14. package/dist/nile-rich-text-editor/nile-rte-select.esm.js +31 -13
  15. package/dist/nile-rich-text-editor/utils.cjs.js +1 -1
  16. package/dist/nile-rich-text-editor/utils.cjs.js.map +1 -1
  17. package/dist/nile-rich-text-editor/utils.esm.js +1 -1
  18. package/dist/src/nile-rich-text-editor/nile-rich-text-editor.css.js +43 -0
  19. package/dist/src/nile-rich-text-editor/nile-rich-text-editor.css.js.map +1 -1
  20. package/dist/src/nile-rich-text-editor/nile-rich-text-editor.d.ts +3 -0
  21. package/dist/src/nile-rich-text-editor/nile-rich-text-editor.js +81 -22
  22. package/dist/src/nile-rich-text-editor/nile-rich-text-editor.js.map +1 -1
  23. package/dist/src/nile-rich-text-editor/nile-rte-mentions.js +5 -0
  24. package/dist/src/nile-rich-text-editor/nile-rte-mentions.js.map +1 -1
  25. package/dist/src/nile-rich-text-editor/nile-rte-select.d.ts +15 -1
  26. package/dist/src/nile-rich-text-editor/nile-rte-select.js +85 -52
  27. package/dist/src/nile-rich-text-editor/nile-rte-select.js.map +1 -1
  28. package/dist/src/nile-rich-text-editor/utils.d.ts +1 -0
  29. package/dist/src/nile-rich-text-editor/utils.js +17 -0
  30. package/dist/src/nile-rich-text-editor/utils.js.map +1 -1
  31. package/dist/tsconfig.tsbuildinfo +1 -1
  32. package/package.json +1 -1
  33. package/src/nile-rich-text-editor/nile-rich-text-editor.css.ts +43 -0
  34. package/src/nile-rich-text-editor/nile-rich-text-editor.ts +112 -40
  35. package/src/nile-rich-text-editor/nile-rte-mentions.ts +5 -0
  36. package/src/nile-rich-text-editor/nile-rte-select.ts +97 -58
  37. package/src/nile-rich-text-editor/utils.ts +18 -0
  38. package/vscode-html-custom-data.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"nile-rte-mentions.cjs.js","sources":["../../../src/nile-rich-text-editor/nile-rte-mentions.ts"],"sourcesContent":["import { LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport type { MentionItem } from './nile-rte-mentions-item';\n\ntype MentionsConfig = Record<string, MentionItem[]>;\n\n@customElement('nile-rte-mentions')\nexport class NileRteMentions extends LitElement {\n protected createRenderRoot() { return this; } \n\n \n @property({\n attribute: 'mentions',\n converter: {\n fromAttribute: (value: string): MentionsConfig => {\n try {\n const parsed = JSON.parse(value);\n const out: MentionsConfig = {};\n for (const trig of Object.keys(parsed)) {\n const arr = parsed[trig];\n if (Array.isArray(arr)) {\n out[trig] = arr\n .filter(i => i && typeof i.key === 'string' && typeof i.label === 'string')\n .map(i => ({ key: i.key, label: i.label }));\n }\n }\n return out;\n } catch { return {}; }\n },\n toAttribute: (v: MentionsConfig) => JSON.stringify(v),\n }\n })\n mentions: MentionsConfig = {};\n\n @property({\n attribute: 'mentioncolors',\n converter: {\n fromAttribute: (value: string): Record<string,string> => {\n try { const o = JSON.parse(value); return (o && typeof o === 'object') ? o : {}; }\n catch { return {}; }\n },\n toAttribute: (v: Record<string,string>) => JSON.stringify(v ?? {})\n }\n })\n mentionColors: Record<string, string> = {}; // NEW\n\n /** External config from the editor (lowest priority) */\n @state() private externalConfig: MentionsConfig = {};\n\n /** Config gathered from child <nile-rte-mentions-item> (highest priority) */\n @state() private itemsConfig: MentionsConfig = {};\n\n @state() private itemsColors: Record<string,string> = {}; // NEW\n\n private get config(): MentionsConfig {\n // Priority: external < attribute < child-items\n return { ...this.externalConfig, ...this.mentions, ...this.itemsConfig };\n }\n\n // wired from editor\n private editorEl: HTMLElement | null = null;\n private hostEl: HTMLElement | null = null;\n\n \nprivate dropdownEl: HTMLElement | null = null; // <nile-dropdown>\nprivate menuEl: HTMLElement | null = null; // <nile-menu>\n\n\n // selection caret\n private lastRange: Range | null = null;\n\n // dropdown state\n private mentionOpen = false;\n private mentionTrigger: string | null = null;\n private mentionQuery = '';\n private mentionSuggestions: MentionItem[] = [];\n private mentionFiltered: MentionItem[] = [];\n private mentionX = 0;\n private mentionY = 0;\nprivate triggerBtn: HTMLElement | null = null;\n\n \n\n // Observe child items & their attributes\n private mo: MutationObserver | null = null;\n\n // Public API used by <nile-rich-text-editor>\n attach(editorEl: HTMLElement, hostEl: HTMLElement) {\n this.editorEl = editorEl;\n this.hostEl = hostEl;\n\n this.injectStyles();\n this.ensureMentionDropdown();\n this.rebuildConfigFromChildren();\n\n // Watch for <nile-rte-mentions-item> add/remove/attr changes\n this.mo = new MutationObserver(() => this.rebuildConfigFromChildren());\n this.mo.observe(this, { childList: true, subtree: true, attributes: true });\n\n // listeners on editor\n this.editorEl.addEventListener('input', this.onEditorInput);\n this.editorEl.addEventListener('mouseup', this.saveSelection);\n this.editorEl.addEventListener('keyup', this.onEditorKeyUp);\n this.editorEl.addEventListener('keydown', this.onEditorKeyDown);\n this.editorEl.addEventListener('scroll', this.repositionMention);\n\n // keep range fresh\n document.addEventListener('selectionchange', this.onSelectionChange, true);\n }\n\n detach() {\n if (this.mo) { this.mo.disconnect(); this.mo = null; }\n if (this.editorEl) {\n this.editorEl.removeEventListener('input', this.onEditorInput);\n this.editorEl.removeEventListener('mouseup', this.saveSelection);\n this.editorEl.removeEventListener('keyup', this.onEditorKeyUp);\n this.editorEl.removeEventListener('keydown', this.onEditorKeyDown);\n this.editorEl.removeEventListener('scroll', this.repositionMention);\n }\n document.removeEventListener('selectionchange', this.onSelectionChange, true);\n }\n\n setExternalConfig(cfg: MentionsConfig) {\n this.externalConfig = cfg || {};\n }\n\n disconnectedCallback(): void {\n this.detach();\n super.disconnectedCallback();\n }\n\n // ---------- gather child items ----------\n private rebuildConfigFromChildren() {\n const cfg: MentionsConfig = {};\n const colors: Record<string,string> = {}; // NEW\n\n const items = Array.from(this.querySelectorAll('nile-rte-mentions-item')) as Array<\n HTMLElement & { mentionsCharacter?: string; mentionsData?: MentionItem[]; mentionsColor?: string }\n >;\n\n for (const item of items) {\n const trig =\n (item as any).mentionsCharacter ??\n item.getAttribute('mentionscharacter') ??\n '';\n\n if (!trig || typeof trig !== 'string') continue;\n\n let data: MentionItem[] | null =\n (item as any).mentionsData ??\n (() => {\n const raw = item.getAttribute('mentionsdata');\n if (!raw) return null;\n try {\n const parsed = JSON.parse(raw);\n return Array.isArray(parsed)\n ? parsed.filter(i => i && typeof i.key === 'string' && typeof i.label === 'string')\n : [];\n } catch { return []; }\n })();\n\n const color =\n (item as any).mentionsColor ??\n item.getAttribute('mentionscolor') ??\n '';\n\n if (!Array.isArray(data)) data = [];\n cfg[trig] = data;\n if (color) colors[trig] = String(color); // record color if provided\n }\n\n this.itemsConfig = cfg;\n this.itemsColors = colors; // NEW\n }\n // ---------- styles ----------\n private injectStyles() {\n if (this.querySelector('style[data-mentions-style]')) return;\n const style = document.createElement('style');\n style.setAttribute('data-mentions-style', 'true');\n style.textContent = `\n .mention-dropdown {\n position: absolute; z-index: 1000; list-style: none; margin: 0; padding: 4px;\n border: 1px solid #e5e7eb; border-radius: 6px; background: #fff;\n box-shadow: 0 4px 10px rgba(0,0,0,.08); max-height: 180px; overflow: auto; font-size: 14px;\n }\n .mention-dropdown li { padding: 6px 8px; cursor: pointer; border-radius: 4px; }\n .mention-dropdown li:hover { background: #f1f5f9; }\n .mention { background: #eef2ff; padding: 0 3px; border-radius: 3px; }\n `;\n this.insertBefore(style, this.firstChild);\n }\n\n private getTriggerColor(trigger: string): string | undefined {\n // Priority: child item color > attribute JSON color\n return this.itemsColors[trigger] ?? this.mentionColors[trigger];\n }\n\n \nprivate ensureMentionDropdown() {\n if (this.dropdownEl || !this.hostEl) return;\n\n const dd = document.createElement('nile-dropdown');\n dd.style.zIndex = '1000';\n\n const btn = document.createElement('nile-button'); // invisible trigger\n btn.setAttribute('slot', 'trigger');\n btn.style.position = 'absolute'; \n btn.style.width = '1px';\n btn.style.height = '1px';\n btn.style.border = '0';\n btn.style.padding = '0';\n btn.style.opacity = '0'; \n btn.style.pointerEvents = 'none'; \n dd.appendChild(btn);\n this.triggerBtn = btn; \n const menu = document.createElement('nile-menu');\n dd.appendChild(menu);\n\n this.hostEl.appendChild(dd);\n this.dropdownEl = dd;\n this.menuEl = menu;\n}\n\n // ---------- selection helpers ----------\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 }\n };\n private saveSelection = () => {\n const sel = window.getSelection();\n if (sel && sel.rangeCount) this.lastRange = sel.getRangeAt(0).cloneRange();\n };\n private restoreSelection() {\n if (!this.lastRange) return;\n const sel = document.getSelection(); if (!sel) return;\n sel.removeAllRanges(); sel.addRange(this.lastRange);\n }\n private focusAndRestore() { this.editorEl?.focus(); this.restoreSelection(); }\n\n private getCaretClientRect(): DOMRect | null {\n const sel = document.getSelection();\n if (!sel || sel.rangeCount === 0) return null;\n\n const range = sel.getRangeAt(0).cloneRange();\n range.collapse(false);\n\n const rects = range.getClientRects();\n if (rects && rects.length > 0) return rects[0];\n\n const marker = document.createElement('span');\n marker.setAttribute('data-caret-marker', '1');\n marker.textContent = '\\u200B';\n range.insertNode(marker);\n\n const rect = marker.getBoundingClientRect();\n\n const after = document.createRange();\n after.setStartAfter(marker);\n after.collapse(true);\n sel.removeAllRanges();\n sel.addRange(after);\n marker.remove();\n\n return rect || null;\n }\n\n // ---------- editor events ----------\n private onEditorInput = () => {\n if (this.mentionOpen) this.handleMention();\n };\n\n private onEditorKeyUp = (e: KeyboardEvent) => {\n this.saveSelection();\n const key = e.key;\n const cfg = this.config;\n if (!this.mentionOpen && key && cfg[key]) {\n this.openMention(key);\n return;\n }\n if (this.mentionOpen) this.handleMention();\n };\n\n private onEditorKeyDown = (e: KeyboardEvent) => {\n if (!this.mentionOpen) return;\n const key = e.key;\n if (key === 'ArrowDown' || key === 'ArrowUp' || key === 'Enter') {\n e.preventDefault();\n if (key === 'Enter' && this.mentionFiltered.length) {\n this.selectMention(this.mentionFiltered[0]);\n }\n } else if (key === 'Escape') {\n e.preventDefault();\n this.closeMention();\n }\n };\n\n // ---------- mentions flow ----------\n private openMention(trigger: string) {\n this.saveSelection();\n if (!this.editorEl || !this.dropdownEl || !this.hostEl) return;\n\n const caretRect = this.getCaretClientRect();\n if (!caretRect) return;\n\n const hostRect = this.hostEl.getBoundingClientRect();\n\n this.mentionX = caretRect.left - hostRect.left;\n this.mentionY = caretRect.bottom - hostRect.top;\n\n this.mentionTrigger = trigger;\n this.mentionSuggestions = this.config[trigger] || [];\n this.mentionQuery = '';\n this.updateMentionFiltered();\n\n this.mentionOpen = true;\n this.renderMentionList();\n }\n\n private closeMention() {\n this.mentionOpen = false;\n this.mentionTrigger = null;\n this.mentionQuery = '';\n this.mentionFiltered = [];\n // hide dropdown\n this.dropdownEl?.removeAttribute('open');\n }\n\n private handleMention() {\n if (!this.mentionOpen || !this.mentionTrigger) return;\n const sel = window.getSelection(); if (!sel || !sel.anchorNode) return;\n\n let node: Node | null = sel.anchorNode;\n if (node.nodeType !== Node.TEXT_NODE) {\n const c = (node as HTMLElement).childNodes?.[sel.anchorOffset] || node.firstChild;\n if (c?.nodeType === Node.TEXT_NODE) node = c;\n }\n const text = (node && node.nodeType === Node.TEXT_NODE) ? (node.textContent || '') : '';\n const idx = text.lastIndexOf(this.mentionTrigger);\n if (idx >= 0) {\n this.mentionQuery = text.substring(idx + 1);\n this.updateMentionFiltered();\n this.renderMentionList();\n } else {\n this.closeMention();\n }\n }\n\n private updateMentionFiltered() {\n const q = this.mentionQuery.toLowerCase();\n this.mentionFiltered = (this.mentionSuggestions || []).filter(item =>\n item.label.toLowerCase().startsWith(q)\n );\n }\n\n private renderMentionList() {\n if (!this.dropdownEl || !this.menuEl) return;\n \n if (!this.triggerBtn) return;\n this.triggerBtn.style.position = 'absolute';\n this.triggerBtn.style.left = `${this.mentionX}px`;\n this.triggerBtn.style.top = `${this.mentionY}px`;\n \n \n // clear old items\n this.menuEl.innerHTML = '';\n \n if (!this.mentionOpen || !this.mentionFiltered.length) {\n this.dropdownEl.removeAttribute('open');\n return;\n }\n \n // build menu items\n for (const item of this.mentionFiltered) {\n const mi = document.createElement('nile-menu-item');\n mi.textContent = item.label;\n mi.addEventListener('mousedown', (e) => {\n e.preventDefault();\n this.selectMention(item);\n });\n this.menuEl.appendChild(mi);\n }\n \n // show dropdown\n this.dropdownEl.setAttribute('open', '');\n }\n \n\n private repositionMention = () => {\n if (!this.mentionOpen || !this.hostEl || !this.triggerBtn) return;\n\n const caretRect = this.getCaretClientRect();\n if (!caretRect) return;\n\n const hostRect = this.hostEl.getBoundingClientRect();\n\n this.mentionX = caretRect.left - hostRect.left;\n this.mentionY = caretRect.bottom - hostRect.top;\n\n this.triggerBtn.style.left = `${this.mentionX}px`;\n this.triggerBtn.style.top = `${this.mentionY}px`;\n };\n\n private selectMention(item: MentionItem) {\n this.restoreSelection(); if (!this.lastRange || !this.mentionTrigger || !this.editorEl) return;\n\n let node: Node = this.lastRange.startContainer;\n let offset = this.lastRange.startOffset;\n if (node.nodeType !== Node.TEXT_NODE) {\n const child = node.childNodes[offset];\n if (child?.nodeType === Node.TEXT_NODE) { node = child; offset = 0; } else return;\n }\n const textNode = node as Text;\n const text = textNode.textContent || '';\n const atIndex = text.lastIndexOf(this.mentionTrigger, offset);\n if (atIndex < 0) return;\n\n const endIndex = atIndex + 1 + this.mentionQuery.length;\n const mentionRange = document.createRange();\n mentionRange.setStart(textNode, atIndex);\n mentionRange.setEnd(textNode, endIndex);\n mentionRange.deleteContents();\n\n const span = document.createElement('span');\n span.classList.add('mention');\n span.textContent = `${this.mentionTrigger}${item.label}`;\n const bg = this.getTriggerColor(this.mentionTrigger);\n if (bg) {\n span.style.backgroundColor = bg;\n // Optional: if you prefer colored text instead of bg\n // span.style.color = bg;\n }\n\n mentionRange.insertNode(span);\n\n const spaceNode = document.createTextNode('\\u00A0');\n span.after(spaceNode);\n\n const sel = window.getSelection();\n const afterRange = document.createRange();\n afterRange.setStartAfter(spaceNode); afterRange.collapse(true);\n sel?.removeAllRanges(); sel?.addRange(afterRange);\n this.lastRange = afterRange.cloneRange();\n\n this.closeMention();\n\n // bubble an input event so the editor updates preview/state\n this.editorEl.dispatchEvent(new InputEvent('input', { bubbles: true }));\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-rte-mentions': NileRteMentions;\n }\n}\n"],"names":["NileRteMentions","o","this","mentions","mentionColors","externalConfig","itemsConfig","itemsColors","editorEl","hostEl","dropdownEl","menuEl","lastRange","mentionOpen","mentionTrigger","mentionQuery","mentionSuggestions","mentionFiltered","mentionX","mentionY","triggerBtn","mo","onSelectionChange","sel","document","getSelection","rangeCount","range","getRangeAt","contains","commonAncestorContainer","cloneRange","saveSelection","window","onEditorInput","handleMention","onEditorKeyUp","e","key","cfg","config","openMention","onEditorKeyDown","preventDefault","length","selectMention","closeMention","repositionMention","caretRect","getCaretClientRect","hostRect","getBoundingClientRect","left","bottom","top","style","concat","_this","_inherits","_i","_createClass","value","createRenderRoot","get","_objectSpread","attach","injectStyles","ensureMentionDropdown","rebuildConfigFromChildren","MutationObserver","observe","childList","subtree","attributes","addEventListener","detach","disconnect","removeEventListener","setExternalConfig","disconnectedCallback","super","colors","items","Array","from","querySelectorAll","_loop","_ref","_n$mentionsCharacter","_n$mentionsData","_ref2","_n$mentionsColor","item","trig","mentionsCharacter","getAttribute","data","mentionsData","raw","parsed","JSON","parse","isArray","filter","i","label","_unused","color","mentionsColor","String","_i2","_s","querySelector","createElement","setAttribute","textContent","insertBefore","firstChild","getTriggerColor","trigger","_this$itemsColors$t","dd","zIndex","btn","position","width","height","border","padding","opacity","pointerEvents","appendChild","menu","restoreSelection","removeAllRanges","addRange","focusAndRestore","focus","collapse","rects","getClientRects","marker","insertNode","rect","after","createRange","setStartAfter","remove","updateMentionFiltered","renderMentionList","_this$dropdownEl","removeAttribute","anchorNode","node","nodeType","Node","TEXT_NODE","_i$childNodes","c","childNodes","anchorOffset","text","idx","lastIndexOf","substring","q","toLowerCase","startsWith","_this3","innerHTML","_iterator","_createForOfIteratorHelper","mi","s","_step","n","done","_loop2","startContainer","offset","startOffset","child","textNode","atIndex","endIndex","mentionRange","setStart","setEnd","deleteContents","span","classList","add","bg","backgroundColor","spaceNode","createTextNode","afterRange","dispatchEvent","InputEvent","bubbles","__decorate","LitElement","property","attribute","converter","fromAttribute","out","_i5","_Object$keys","Object","keys","arr","map","_unused2","toAttribute","v","stringify","prototype","_typeof","_unused3","state","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"nile-rte-mentions.cjs.js","sources":["../../../src/nile-rich-text-editor/nile-rte-mentions.ts"],"sourcesContent":["import { LitElement } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport type { MentionItem } from './nile-rte-mentions-item';\n\ntype MentionsConfig = Record<string, MentionItem[]>;\n\n@customElement('nile-rte-mentions')\nexport class NileRteMentions extends LitElement {\n protected createRenderRoot() { return this; } \n\n \n @property({\n attribute: 'mentions',\n converter: {\n fromAttribute: (value: string): MentionsConfig => {\n try {\n const parsed = JSON.parse(value);\n const out: MentionsConfig = {};\n for (const trig of Object.keys(parsed)) {\n const arr = parsed[trig];\n if (Array.isArray(arr)) {\n out[trig] = arr\n .filter(i => i && typeof i.key === 'string' && typeof i.label === 'string')\n .map(i => ({ key: i.key, label: i.label }));\n }\n }\n return out;\n } catch { return {}; }\n },\n toAttribute: (v: MentionsConfig) => JSON.stringify(v),\n }\n })\n mentions: MentionsConfig = {};\n\n @property({\n attribute: 'mentioncolors',\n converter: {\n fromAttribute: (value: string): Record<string,string> => {\n try { const o = JSON.parse(value); return (o && typeof o === 'object') ? o : {}; }\n catch { return {}; }\n },\n toAttribute: (v: Record<string,string>) => JSON.stringify(v ?? {})\n }\n })\n mentionColors: Record<string, string> = {}; // NEW\n\n /** External config from the editor (lowest priority) */\n @state() private externalConfig: MentionsConfig = {};\n\n /** Config gathered from child <nile-rte-mentions-item> (highest priority) */\n @state() private itemsConfig: MentionsConfig = {};\n\n @state() private itemsColors: Record<string,string> = {}; // NEW\n\n private get config(): MentionsConfig {\n // Priority: external < attribute < child-items\n return { ...this.externalConfig, ...this.mentions, ...this.itemsConfig };\n }\n\n // wired from editor\n private editorEl: HTMLElement | null = null;\n private hostEl: HTMLElement | null = null;\n\n \nprivate dropdownEl: HTMLElement | null = null; // <nile-dropdown>\nprivate menuEl: HTMLElement | null = null; // <nile-menu>\n\n\n // selection caret\n private lastRange: Range | null = null;\n\n // dropdown state\n private mentionOpen = false;\n private mentionTrigger: string | null = null;\n private mentionQuery = '';\n private mentionSuggestions: MentionItem[] = [];\n private mentionFiltered: MentionItem[] = [];\n private mentionX = 0;\n private mentionY = 0;\nprivate triggerBtn: HTMLElement | null = null;\n\n \n\n // Observe child items & their attributes\n private mo: MutationObserver | null = null;\n\n // Public API used by <nile-rich-text-editor>\n attach(editorEl: HTMLElement, hostEl: HTMLElement) {\n this.editorEl = editorEl;\n this.hostEl = hostEl;\n\n this.injectStyles();\n this.ensureMentionDropdown();\n this.rebuildConfigFromChildren();\n\n // Watch for <nile-rte-mentions-item> add/remove/attr changes\n this.mo = new MutationObserver(() => this.rebuildConfigFromChildren());\n this.mo.observe(this, { childList: true, subtree: true, attributes: true });\n\n // listeners on editor\n this.editorEl.addEventListener('input', this.onEditorInput);\n this.editorEl.addEventListener('mouseup', this.saveSelection);\n this.editorEl.addEventListener('keyup', this.onEditorKeyUp);\n this.editorEl.addEventListener('keydown', this.onEditorKeyDown);\n this.editorEl.addEventListener('scroll', this.repositionMention);\n\n // keep range fresh\n document.addEventListener('selectionchange', this.onSelectionChange, true);\n }\n\n detach() {\n if (this.mo) { this.mo.disconnect(); this.mo = null; }\n if (this.editorEl) {\n this.editorEl.removeEventListener('input', this.onEditorInput);\n this.editorEl.removeEventListener('mouseup', this.saveSelection);\n this.editorEl.removeEventListener('keyup', this.onEditorKeyUp);\n this.editorEl.removeEventListener('keydown', this.onEditorKeyDown);\n this.editorEl.removeEventListener('scroll', this.repositionMention);\n }\n document.removeEventListener('selectionchange', this.onSelectionChange, true);\n }\n\n setExternalConfig(cfg: MentionsConfig) {\n this.externalConfig = cfg || {};\n }\n\n disconnectedCallback(): void {\n this.detach();\n super.disconnectedCallback();\n }\n\n // ---------- gather child items ----------\n private rebuildConfigFromChildren() {\n const cfg: MentionsConfig = {};\n const colors: Record<string,string> = {}; // NEW\n\n const items = Array.from(this.querySelectorAll('nile-rte-mentions-item')) as Array<\n HTMLElement & { mentionsCharacter?: string; mentionsData?: MentionItem[]; mentionsColor?: string }\n >;\n\n for (const item of items) {\n const trig =\n (item as any).mentionsCharacter ??\n item.getAttribute('mentionscharacter') ??\n '';\n\n if (!trig || typeof trig !== 'string') continue;\n\n let data: MentionItem[] | null =\n (item as any).mentionsData ??\n (() => {\n const raw = item.getAttribute('mentionsdata');\n if (!raw) return null;\n try {\n const parsed = JSON.parse(raw);\n return Array.isArray(parsed)\n ? parsed.filter(i => i && typeof i.key === 'string' && typeof i.label === 'string')\n : [];\n } catch { return []; }\n })();\n\n const color =\n (item as any).mentionsColor ??\n item.getAttribute('mentionscolor') ??\n '';\n\n if (!Array.isArray(data)) data = [];\n cfg[trig] = data;\n if (color) colors[trig] = String(color); // record color if provided\n }\n\n this.itemsConfig = cfg;\n this.itemsColors = colors; // NEW\n }\n // ---------- styles ----------\n private injectStyles() {\n if (this.querySelector('style[data-mentions-style]')) return;\n const style = document.createElement('style');\n style.setAttribute('data-mentions-style', 'true');\n style.textContent = `\n .mention-dropdown {\n position: absolute; z-index: 1000; list-style: none; margin: 0; padding: 4px;\n border: 1px solid #e5e7eb; border-radius: 6px; background: #fff;\n box-shadow: 0 4px 10px rgba(0,0,0,.08); max-height: 180px; overflow: auto; font-size: 14px;\n }\n .mention-dropdown li { padding: 6px 8px; cursor: pointer; border-radius: 4px; }\n .mention-dropdown li:hover { background: #f1f5f9; }\n .mention { background: #eef2ff; padding: 0 3px; border-radius: 3px; }\n nile-menu.mentions-menu::part(menu__items-wrapper){\n max-height: 260px;\n }\n\n `;\n this.insertBefore(style, this.firstChild);\n }\n\n private getTriggerColor(trigger: string): string | undefined {\n // Priority: child item color > attribute JSON color\n return this.itemsColors[trigger] ?? this.mentionColors[trigger];\n }\n\n \nprivate ensureMentionDropdown() {\n if (this.dropdownEl || !this.hostEl) return;\n\n const dd = document.createElement('nile-dropdown');\n dd.style.zIndex = '1000';\n\n const btn = document.createElement('nile-button'); // invisible trigger\n btn.setAttribute('slot', 'trigger');\n btn.style.position = 'absolute'; \n btn.style.width = '1px';\n btn.style.height = '1px';\n btn.style.border = '0';\n btn.style.padding = '0';\n btn.style.opacity = '0'; \n btn.style.pointerEvents = 'none'; \n dd.appendChild(btn);\n this.triggerBtn = btn; \n const menu = document.createElement('nile-menu');\n menu.classList.add('mentions-menu');\n dd.appendChild(menu);\n\n this.hostEl.appendChild(dd);\n this.dropdownEl = dd;\n this.menuEl = menu;\n}\n\n // ---------- selection helpers ----------\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 }\n };\n private saveSelection = () => {\n const sel = window.getSelection();\n if (sel && sel.rangeCount) this.lastRange = sel.getRangeAt(0).cloneRange();\n };\n private restoreSelection() {\n if (!this.lastRange) return;\n const sel = document.getSelection(); if (!sel) return;\n sel.removeAllRanges(); sel.addRange(this.lastRange);\n }\n private focusAndRestore() { this.editorEl?.focus(); this.restoreSelection(); }\n\n private getCaretClientRect(): DOMRect | null {\n const sel = document.getSelection();\n if (!sel || sel.rangeCount === 0) return null;\n\n const range = sel.getRangeAt(0).cloneRange();\n range.collapse(false);\n\n const rects = range.getClientRects();\n if (rects && rects.length > 0) return rects[0];\n\n const marker = document.createElement('span');\n marker.setAttribute('data-caret-marker', '1');\n marker.textContent = '\\u200B';\n range.insertNode(marker);\n\n const rect = marker.getBoundingClientRect();\n\n const after = document.createRange();\n after.setStartAfter(marker);\n after.collapse(true);\n sel.removeAllRanges();\n sel.addRange(after);\n marker.remove();\n\n return rect || null;\n }\n\n // ---------- editor events ----------\n private onEditorInput = () => {\n if (this.mentionOpen) this.handleMention();\n };\n\n private onEditorKeyUp = (e: KeyboardEvent) => {\n this.saveSelection();\n const key = e.key;\n const cfg = this.config;\n if (!this.mentionOpen && key && cfg[key]) {\n this.openMention(key);\n return;\n }\n if (this.mentionOpen) this.handleMention();\n };\n\n private onEditorKeyDown = (e: KeyboardEvent) => {\n if (!this.mentionOpen) return;\n const key = e.key;\n if (key === 'ArrowDown' || key === 'ArrowUp' || key === 'Enter') {\n e.preventDefault();\n if (key === 'Enter' && this.mentionFiltered.length) {\n this.selectMention(this.mentionFiltered[0]);\n }\n } else if (key === 'Escape') {\n e.preventDefault();\n this.closeMention();\n }\n };\n\n // ---------- mentions flow ----------\n private openMention(trigger: string) {\n this.saveSelection();\n if (!this.editorEl || !this.dropdownEl || !this.hostEl) return;\n\n const caretRect = this.getCaretClientRect();\n if (!caretRect) return;\n\n const hostRect = this.hostEl.getBoundingClientRect();\n\n this.mentionX = caretRect.left - hostRect.left;\n this.mentionY = caretRect.bottom - hostRect.top;\n\n this.mentionTrigger = trigger;\n this.mentionSuggestions = this.config[trigger] || [];\n this.mentionQuery = '';\n this.updateMentionFiltered();\n\n this.mentionOpen = true;\n this.renderMentionList();\n }\n\n private closeMention() {\n this.mentionOpen = false;\n this.mentionTrigger = null;\n this.mentionQuery = '';\n this.mentionFiltered = [];\n // hide dropdown\n this.dropdownEl?.removeAttribute('open');\n }\n\n private handleMention() {\n if (!this.mentionOpen || !this.mentionTrigger) return;\n const sel = window.getSelection(); if (!sel || !sel.anchorNode) return;\n\n let node: Node | null = sel.anchorNode;\n if (node.nodeType !== Node.TEXT_NODE) {\n const c = (node as HTMLElement).childNodes?.[sel.anchorOffset] || node.firstChild;\n if (c?.nodeType === Node.TEXT_NODE) node = c;\n }\n const text = (node && node.nodeType === Node.TEXT_NODE) ? (node.textContent || '') : '';\n const idx = text.lastIndexOf(this.mentionTrigger);\n if (idx >= 0) {\n this.mentionQuery = text.substring(idx + 1);\n this.updateMentionFiltered();\n this.renderMentionList();\n } else {\n this.closeMention();\n }\n }\n\n private updateMentionFiltered() {\n const q = this.mentionQuery.toLowerCase();\n this.mentionFiltered = (this.mentionSuggestions || []).filter(item =>\n item.label.toLowerCase().startsWith(q)\n );\n }\n\n private renderMentionList() {\n if (!this.dropdownEl || !this.menuEl) return;\n \n if (!this.triggerBtn) return;\n this.triggerBtn.style.position = 'absolute';\n this.triggerBtn.style.left = `${this.mentionX}px`;\n this.triggerBtn.style.top = `${this.mentionY}px`;\n \n \n // clear old items\n this.menuEl.innerHTML = '';\n \n if (!this.mentionOpen || !this.mentionFiltered.length) {\n this.dropdownEl.removeAttribute('open');\n return;\n }\n \n // build menu items\n for (const item of this.mentionFiltered) {\n const mi = document.createElement('nile-menu-item');\n mi.textContent = item.label;\n mi.addEventListener('mousedown', (e) => {\n e.preventDefault();\n this.selectMention(item);\n });\n this.menuEl.appendChild(mi);\n }\n \n // show dropdown\n this.dropdownEl.setAttribute('open', '');\n }\n \n\n private repositionMention = () => {\n if (!this.mentionOpen || !this.hostEl || !this.triggerBtn) return;\n\n const caretRect = this.getCaretClientRect();\n if (!caretRect) return;\n\n const hostRect = this.hostEl.getBoundingClientRect();\n\n this.mentionX = caretRect.left - hostRect.left;\n this.mentionY = caretRect.bottom - hostRect.top;\n\n this.triggerBtn.style.left = `${this.mentionX}px`;\n this.triggerBtn.style.top = `${this.mentionY}px`;\n };\n\n private selectMention(item: MentionItem) {\n this.restoreSelection(); if (!this.lastRange || !this.mentionTrigger || !this.editorEl) return;\n\n let node: Node = this.lastRange.startContainer;\n let offset = this.lastRange.startOffset;\n if (node.nodeType !== Node.TEXT_NODE) {\n const child = node.childNodes[offset];\n if (child?.nodeType === Node.TEXT_NODE) { node = child; offset = 0; } else return;\n }\n const textNode = node as Text;\n const text = textNode.textContent || '';\n const atIndex = text.lastIndexOf(this.mentionTrigger, offset);\n if (atIndex < 0) return;\n\n const endIndex = atIndex + 1 + this.mentionQuery.length;\n const mentionRange = document.createRange();\n mentionRange.setStart(textNode, atIndex);\n mentionRange.setEnd(textNode, endIndex);\n mentionRange.deleteContents();\n\n const span = document.createElement('span');\n span.classList.add('mention');\n span.textContent = `${this.mentionTrigger}${item.label}`;\n const bg = this.getTriggerColor(this.mentionTrigger);\n if (bg) {\n span.style.backgroundColor = bg;\n // Optional: if you prefer colored text instead of bg\n // span.style.color = bg;\n }\n\n mentionRange.insertNode(span);\n\n const spaceNode = document.createTextNode('\\u00A0');\n span.after(spaceNode);\n\n const sel = window.getSelection();\n const afterRange = document.createRange();\n afterRange.setStartAfter(spaceNode); afterRange.collapse(true);\n sel?.removeAllRanges(); sel?.addRange(afterRange);\n this.lastRange = afterRange.cloneRange();\n\n this.closeMention();\n\n // bubble an input event so the editor updates preview/state\n this.editorEl.dispatchEvent(new InputEvent('input', { bubbles: true }));\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-rte-mentions': NileRteMentions;\n }\n}\n"],"names":["NileRteMentions","o","this","mentions","mentionColors","externalConfig","itemsConfig","itemsColors","editorEl","hostEl","dropdownEl","menuEl","lastRange","mentionOpen","mentionTrigger","mentionQuery","mentionSuggestions","mentionFiltered","mentionX","mentionY","triggerBtn","mo","onSelectionChange","sel","document","getSelection","rangeCount","range","getRangeAt","contains","commonAncestorContainer","cloneRange","saveSelection","window","onEditorInput","handleMention","onEditorKeyUp","e","key","cfg","config","openMention","onEditorKeyDown","preventDefault","length","selectMention","closeMention","repositionMention","caretRect","getCaretClientRect","hostRect","getBoundingClientRect","left","bottom","top","style","_this","_inherits","_i","_createClass","value","createRenderRoot","get","_objectSpread","attach","injectStyles","ensureMentionDropdown","rebuildConfigFromChildren","MutationObserver","observe","childList","subtree","attributes","addEventListener","detach","disconnect","removeEventListener","setExternalConfig","disconnectedCallback","colors","items","Array","from","querySelectorAll","_loop","_ref","_n$mentionsCharacter","_n$mentionsData","_ref2","_n$mentionsColor","item","trig","mentionsCharacter","getAttribute","data","mentionsData","raw","parsed","JSON","parse","isArray","filter","i","label","_unused","color","mentionsColor","String","_i2","_s","querySelector","createElement","setAttribute","textContent","insertBefore","firstChild","getTriggerColor","trigger","_this$itemsColors$t","dd","zIndex","btn","position","width","height","border","padding","opacity","pointerEvents","appendChild","menu","classList","add","restoreSelection","removeAllRanges","addRange","focusAndRestore","focus","collapse","rects","getClientRects","marker","insertNode","rect","after","createRange","setStartAfter","remove","updateMentionFiltered","renderMentionList","_this$dropdownEl","removeAttribute","anchorNode","node","nodeType","Node","TEXT_NODE","_i$childNodes","c","childNodes","anchorOffset","text","idx","lastIndexOf","substring","q","toLowerCase","startsWith","concat","innerHTML","_iterator","_createForOfIteratorHelper","_step","_loop2","mi","s","n","done","startContainer","offset","startOffset","child","textNode","atIndex","endIndex","mentionRange","setStart","setEnd","deleteContents","span","bg","backgroundColor","spaceNode","createTextNode","afterRange","dispatchEvent","InputEvent","bubbles","LitElement","__decorate","property","attribute","converter","fromAttribute","out","_i5","_Object$keys","Object","keys","arr","map","_unused2","toAttribute","v","stringify","prototype","_typeof","_unused3","state","customElement"],"mappings":"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"}
@@ -1 +1 @@
1
- import{__decorate as t}from"tslib";import{LitElement as i}from"lit";import{property as s,state as n,customElement as e}from"lit/decorators.js";let o=class extends i{constructor(){super(...arguments),this.mentions={},this.mentionColors={},this.externalConfig={},this.itemsConfig={},this.itemsColors={},this.editorEl=null,this.hostEl=null,this.dropdownEl=null,this.menuEl=null,this.lastRange=null,this.mentionOpen=!1,this.mentionTrigger=null,this.mentionQuery="",this.mentionSuggestions=[],this.mentionFiltered=[],this.mentionX=0,this.mentionY=0,this.triggerBtn=null,this.mo=null,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.saveSelection=()=>{const t=window.getSelection();t&&t.rangeCount&&(this.lastRange=t.getRangeAt(0).cloneRange())},this.onEditorInput=()=>{this.mentionOpen&&this.handleMention()},this.onEditorKeyUp=t=>{this.saveSelection();const i=t.key,s=this.config;!this.mentionOpen&&i&&s[i]?this.openMention(i):this.mentionOpen&&this.handleMention()},this.onEditorKeyDown=t=>{if(!this.mentionOpen)return;const i=t.key;"ArrowDown"===i||"ArrowUp"===i||"Enter"===i?(t.preventDefault(),"Enter"===i&&this.mentionFiltered.length&&this.selectMention(this.mentionFiltered[0])):"Escape"===i&&(t.preventDefault(),this.closeMention())},this.repositionMention=()=>{if(!this.mentionOpen||!this.hostEl||!this.triggerBtn)return;const t=this.getCaretClientRect();if(!t)return;const i=this.hostEl.getBoundingClientRect();this.mentionX=t.left-i.left,this.mentionY=t.bottom-i.top,this.triggerBtn.style.left=`${this.mentionX}px`,this.triggerBtn.style.top=`${this.mentionY}px`}}createRenderRoot(){return this}get config(){return{...this.externalConfig,...this.mentions,...this.itemsConfig}}attach(t,i){this.editorEl=t,this.hostEl=i,this.injectStyles(),this.ensureMentionDropdown(),this.rebuildConfigFromChildren(),this.mo=new MutationObserver((()=>this.rebuildConfigFromChildren())),this.mo.observe(this,{childList:!0,subtree:!0,attributes:!0}),this.editorEl.addEventListener("input",this.onEditorInput),this.editorEl.addEventListener("mouseup",this.saveSelection),this.editorEl.addEventListener("keyup",this.onEditorKeyUp),this.editorEl.addEventListener("keydown",this.onEditorKeyDown),this.editorEl.addEventListener("scroll",this.repositionMention),document.addEventListener("selectionchange",this.onSelectionChange,!0)}detach(){this.mo&&(this.mo.disconnect(),this.mo=null),this.editorEl&&(this.editorEl.removeEventListener("input",this.onEditorInput),this.editorEl.removeEventListener("mouseup",this.saveSelection),this.editorEl.removeEventListener("keyup",this.onEditorKeyUp),this.editorEl.removeEventListener("keydown",this.onEditorKeyDown),this.editorEl.removeEventListener("scroll",this.repositionMention)),document.removeEventListener("selectionchange",this.onSelectionChange,!0)}setExternalConfig(t){this.externalConfig=t||{}}disconnectedCallback(){this.detach(),super.disconnectedCallback()}rebuildConfigFromChildren(){const t={},i={},s=Array.from(this.querySelectorAll("nile-rte-mentions-item"));for(const n of s){const s=n.mentionsCharacter??n.getAttribute("mentionscharacter")??"";if(!s||"string"!=typeof s)continue;let e=n.mentionsData??(()=>{const t=n.getAttribute("mentionsdata");if(!t)return null;try{const i=JSON.parse(t);return Array.isArray(i)?i.filter((t=>t&&"string"==typeof t.key&&"string"==typeof t.label)):[]}catch{return[]}})();const o=n.mentionsColor??n.getAttribute("mentionscolor")??"";Array.isArray(e)||(e=[]),t[s]=e,o&&(i[s]=String(o))}this.itemsConfig=t,this.itemsColors=i}injectStyles(){if(this.querySelector("style[data-mentions-style]"))return;const t=document.createElement("style");t.setAttribute("data-mentions-style","true"),t.textContent="\n .mention-dropdown {\n position: absolute; z-index: 1000; list-style: none; margin: 0; padding: 4px;\n border: 1px solid #e5e7eb; border-radius: 6px; background: #fff;\n box-shadow: 0 4px 10px rgba(0,0,0,.08); max-height: 180px; overflow: auto; font-size: 14px;\n }\n .mention-dropdown li { padding: 6px 8px; cursor: pointer; border-radius: 4px; }\n .mention-dropdown li:hover { background: #f1f5f9; }\n .mention { background: #eef2ff; padding: 0 3px; border-radius: 3px; }\n ",this.insertBefore(t,this.firstChild)}getTriggerColor(t){return this.itemsColors[t]??this.mentionColors[t]}ensureMentionDropdown(){if(this.dropdownEl||!this.hostEl)return;const t=document.createElement("nile-dropdown");t.style.zIndex="1000";const i=document.createElement("nile-button");i.setAttribute("slot","trigger"),i.style.position="absolute",i.style.width="1px",i.style.height="1px",i.style.border="0",i.style.padding="0",i.style.opacity="0",i.style.pointerEvents="none",t.appendChild(i),this.triggerBtn=i;const s=document.createElement("nile-menu");t.appendChild(s),this.hostEl.appendChild(t),this.dropdownEl=t,this.menuEl=s}restoreSelection(){if(!this.lastRange)return;const t=document.getSelection();t&&(t.removeAllRanges(),t.addRange(this.lastRange))}focusAndRestore(){this.editorEl?.focus(),this.restoreSelection()}getCaretClientRect(){const t=document.getSelection();if(!t||0===t.rangeCount)return null;const i=t.getRangeAt(0).cloneRange();i.collapse(!1);const s=i.getClientRects();if(s&&s.length>0)return s[0];const n=document.createElement("span");n.setAttribute("data-caret-marker","1"),n.textContent="​",i.insertNode(n);const e=n.getBoundingClientRect(),o=document.createRange();return o.setStartAfter(n),o.collapse(!0),t.removeAllRanges(),t.addRange(o),n.remove(),e||null}openMention(t){if(this.saveSelection(),!this.editorEl||!this.dropdownEl||!this.hostEl)return;const i=this.getCaretClientRect();if(!i)return;const s=this.hostEl.getBoundingClientRect();this.mentionX=i.left-s.left,this.mentionY=i.bottom-s.top,this.mentionTrigger=t,this.mentionSuggestions=this.config[t]||[],this.mentionQuery="",this.updateMentionFiltered(),this.mentionOpen=!0,this.renderMentionList()}closeMention(){this.mentionOpen=!1,this.mentionTrigger=null,this.mentionQuery="",this.mentionFiltered=[],this.dropdownEl?.removeAttribute("open")}handleMention(){if(!this.mentionOpen||!this.mentionTrigger)return;const t=window.getSelection();if(!t||!t.anchorNode)return;let i=t.anchorNode;if(i.nodeType!==Node.TEXT_NODE){const s=i.childNodes?.[t.anchorOffset]||i.firstChild;s?.nodeType===Node.TEXT_NODE&&(i=s)}const s=i&&i.nodeType===Node.TEXT_NODE&&i.textContent||"",n=s.lastIndexOf(this.mentionTrigger);n>=0?(this.mentionQuery=s.substring(n+1),this.updateMentionFiltered(),this.renderMentionList()):this.closeMention()}updateMentionFiltered(){const t=this.mentionQuery.toLowerCase();this.mentionFiltered=(this.mentionSuggestions||[]).filter((i=>i.label.toLowerCase().startsWith(t)))}renderMentionList(){if(this.dropdownEl&&this.menuEl&&this.triggerBtn)if(this.triggerBtn.style.position="absolute",this.triggerBtn.style.left=`${this.mentionX}px`,this.triggerBtn.style.top=`${this.mentionY}px`,this.menuEl.innerHTML="",this.mentionOpen&&this.mentionFiltered.length){for(const t of this.mentionFiltered){const i=document.createElement("nile-menu-item");i.textContent=t.label,i.addEventListener("mousedown",(i=>{i.preventDefault(),this.selectMention(t)})),this.menuEl.appendChild(i)}this.dropdownEl.setAttribute("open","")}else this.dropdownEl.removeAttribute("open")}selectMention(t){if(this.restoreSelection(),!this.lastRange||!this.mentionTrigger||!this.editorEl)return;let i=this.lastRange.startContainer,s=this.lastRange.startOffset;if(i.nodeType!==Node.TEXT_NODE){const t=i.childNodes[s];if(t?.nodeType!==Node.TEXT_NODE)return;i=t,s=0}const n=i,e=(n.textContent||"").lastIndexOf(this.mentionTrigger,s);if(e<0)return;const o=e+1+this.mentionQuery.length,h=document.createRange();h.setStart(n,e),h.setEnd(n,o),h.deleteContents();const r=document.createElement("span");r.classList.add("mention"),r.textContent=`${this.mentionTrigger}${t.label}`;const c=this.getTriggerColor(this.mentionTrigger);c&&(r.style.backgroundColor=c),h.insertNode(r);const u=document.createTextNode(" ");r.after(u);const l=window.getSelection(),d=document.createRange();d.setStartAfter(u),d.collapse(!0),l?.removeAllRanges(),l?.addRange(d),this.lastRange=d.cloneRange(),this.closeMention(),this.editorEl.dispatchEvent(new InputEvent("input",{bubbles:!0}))}};t([s({attribute:"mentions",converter:{fromAttribute:t=>{try{const i=JSON.parse(t),s={};for(const t of Object.keys(i)){const n=i[t];Array.isArray(n)&&(s[t]=n.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)}})],o.prototype,"mentions",void 0),t([s({attribute:"mentioncolors",converter:{fromAttribute:t=>{try{const i=JSON.parse(t);return i&&"object"==typeof i?i:{}}catch{return{}}},toAttribute:t=>JSON.stringify(t??{})}})],o.prototype,"mentionColors",void 0),t([n()],o.prototype,"externalConfig",void 0),t([n()],o.prototype,"itemsConfig",void 0),t([n()],o.prototype,"itemsColors",void 0),o=t([e("nile-rte-mentions")],o);
1
+ import{__decorate as t}from"tslib";import{LitElement as i}from"lit";import{property as s,state as n,customElement as e}from"lit/decorators.js";let o=class extends i{constructor(){super(...arguments),this.mentions={},this.mentionColors={},this.externalConfig={},this.itemsConfig={},this.itemsColors={},this.editorEl=null,this.hostEl=null,this.dropdownEl=null,this.menuEl=null,this.lastRange=null,this.mentionOpen=!1,this.mentionTrigger=null,this.mentionQuery="",this.mentionSuggestions=[],this.mentionFiltered=[],this.mentionX=0,this.mentionY=0,this.triggerBtn=null,this.mo=null,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.saveSelection=()=>{const t=window.getSelection();t&&t.rangeCount&&(this.lastRange=t.getRangeAt(0).cloneRange())},this.onEditorInput=()=>{this.mentionOpen&&this.handleMention()},this.onEditorKeyUp=t=>{this.saveSelection();const i=t.key,s=this.config;!this.mentionOpen&&i&&s[i]?this.openMention(i):this.mentionOpen&&this.handleMention()},this.onEditorKeyDown=t=>{if(!this.mentionOpen)return;const i=t.key;"ArrowDown"===i||"ArrowUp"===i||"Enter"===i?(t.preventDefault(),"Enter"===i&&this.mentionFiltered.length&&this.selectMention(this.mentionFiltered[0])):"Escape"===i&&(t.preventDefault(),this.closeMention())},this.repositionMention=()=>{if(!this.mentionOpen||!this.hostEl||!this.triggerBtn)return;const t=this.getCaretClientRect();if(!t)return;const i=this.hostEl.getBoundingClientRect();this.mentionX=t.left-i.left,this.mentionY=t.bottom-i.top,this.triggerBtn.style.left=`${this.mentionX}px`,this.triggerBtn.style.top=`${this.mentionY}px`}}createRenderRoot(){return this}get config(){return{...this.externalConfig,...this.mentions,...this.itemsConfig}}attach(t,i){this.editorEl=t,this.hostEl=i,this.injectStyles(),this.ensureMentionDropdown(),this.rebuildConfigFromChildren(),this.mo=new MutationObserver((()=>this.rebuildConfigFromChildren())),this.mo.observe(this,{childList:!0,subtree:!0,attributes:!0}),this.editorEl.addEventListener("input",this.onEditorInput),this.editorEl.addEventListener("mouseup",this.saveSelection),this.editorEl.addEventListener("keyup",this.onEditorKeyUp),this.editorEl.addEventListener("keydown",this.onEditorKeyDown),this.editorEl.addEventListener("scroll",this.repositionMention),document.addEventListener("selectionchange",this.onSelectionChange,!0)}detach(){this.mo&&(this.mo.disconnect(),this.mo=null),this.editorEl&&(this.editorEl.removeEventListener("input",this.onEditorInput),this.editorEl.removeEventListener("mouseup",this.saveSelection),this.editorEl.removeEventListener("keyup",this.onEditorKeyUp),this.editorEl.removeEventListener("keydown",this.onEditorKeyDown),this.editorEl.removeEventListener("scroll",this.repositionMention)),document.removeEventListener("selectionchange",this.onSelectionChange,!0)}setExternalConfig(t){this.externalConfig=t||{}}disconnectedCallback(){this.detach(),super.disconnectedCallback()}rebuildConfigFromChildren(){const t={},i={},s=Array.from(this.querySelectorAll("nile-rte-mentions-item"));for(const n of s){const s=n.mentionsCharacter??n.getAttribute("mentionscharacter")??"";if(!s||"string"!=typeof s)continue;let e=n.mentionsData??(()=>{const t=n.getAttribute("mentionsdata");if(!t)return null;try{const i=JSON.parse(t);return Array.isArray(i)?i.filter((t=>t&&"string"==typeof t.key&&"string"==typeof t.label)):[]}catch{return[]}})();const o=n.mentionsColor??n.getAttribute("mentionscolor")??"";Array.isArray(e)||(e=[]),t[s]=e,o&&(i[s]=String(o))}this.itemsConfig=t,this.itemsColors=i}injectStyles(){if(this.querySelector("style[data-mentions-style]"))return;const t=document.createElement("style");t.setAttribute("data-mentions-style","true"),t.textContent="\n .mention-dropdown {\n position: absolute; z-index: 1000; list-style: none; margin: 0; padding: 4px;\n border: 1px solid #e5e7eb; border-radius: 6px; background: #fff;\n box-shadow: 0 4px 10px rgba(0,0,0,.08); max-height: 180px; overflow: auto; font-size: 14px;\n }\n .mention-dropdown li { padding: 6px 8px; cursor: pointer; border-radius: 4px; }\n .mention-dropdown li:hover { background: #f1f5f9; }\n .mention { background: #eef2ff; padding: 0 3px; border-radius: 3px; }\n nile-menu.mentions-menu::part(menu__items-wrapper){\n max-height: 260px;\n }\n\n ",this.insertBefore(t,this.firstChild)}getTriggerColor(t){return this.itemsColors[t]??this.mentionColors[t]}ensureMentionDropdown(){if(this.dropdownEl||!this.hostEl)return;const t=document.createElement("nile-dropdown");t.style.zIndex="1000";const i=document.createElement("nile-button");i.setAttribute("slot","trigger"),i.style.position="absolute",i.style.width="1px",i.style.height="1px",i.style.border="0",i.style.padding="0",i.style.opacity="0",i.style.pointerEvents="none",t.appendChild(i),this.triggerBtn=i;const s=document.createElement("nile-menu");s.classList.add("mentions-menu"),t.appendChild(s),this.hostEl.appendChild(t),this.dropdownEl=t,this.menuEl=s}restoreSelection(){if(!this.lastRange)return;const t=document.getSelection();t&&(t.removeAllRanges(),t.addRange(this.lastRange))}focusAndRestore(){this.editorEl?.focus(),this.restoreSelection()}getCaretClientRect(){const t=document.getSelection();if(!t||0===t.rangeCount)return null;const i=t.getRangeAt(0).cloneRange();i.collapse(!1);const s=i.getClientRects();if(s&&s.length>0)return s[0];const n=document.createElement("span");n.setAttribute("data-caret-marker","1"),n.textContent="​",i.insertNode(n);const e=n.getBoundingClientRect(),o=document.createRange();return o.setStartAfter(n),o.collapse(!0),t.removeAllRanges(),t.addRange(o),n.remove(),e||null}openMention(t){if(this.saveSelection(),!this.editorEl||!this.dropdownEl||!this.hostEl)return;const i=this.getCaretClientRect();if(!i)return;const s=this.hostEl.getBoundingClientRect();this.mentionX=i.left-s.left,this.mentionY=i.bottom-s.top,this.mentionTrigger=t,this.mentionSuggestions=this.config[t]||[],this.mentionQuery="",this.updateMentionFiltered(),this.mentionOpen=!0,this.renderMentionList()}closeMention(){this.mentionOpen=!1,this.mentionTrigger=null,this.mentionQuery="",this.mentionFiltered=[],this.dropdownEl?.removeAttribute("open")}handleMention(){if(!this.mentionOpen||!this.mentionTrigger)return;const t=window.getSelection();if(!t||!t.anchorNode)return;let i=t.anchorNode;if(i.nodeType!==Node.TEXT_NODE){const s=i.childNodes?.[t.anchorOffset]||i.firstChild;s?.nodeType===Node.TEXT_NODE&&(i=s)}const s=i&&i.nodeType===Node.TEXT_NODE&&i.textContent||"",n=s.lastIndexOf(this.mentionTrigger);n>=0?(this.mentionQuery=s.substring(n+1),this.updateMentionFiltered(),this.renderMentionList()):this.closeMention()}updateMentionFiltered(){const t=this.mentionQuery.toLowerCase();this.mentionFiltered=(this.mentionSuggestions||[]).filter((i=>i.label.toLowerCase().startsWith(t)))}renderMentionList(){if(this.dropdownEl&&this.menuEl&&this.triggerBtn)if(this.triggerBtn.style.position="absolute",this.triggerBtn.style.left=`${this.mentionX}px`,this.triggerBtn.style.top=`${this.mentionY}px`,this.menuEl.innerHTML="",this.mentionOpen&&this.mentionFiltered.length){for(const t of this.mentionFiltered){const i=document.createElement("nile-menu-item");i.textContent=t.label,i.addEventListener("mousedown",(i=>{i.preventDefault(),this.selectMention(t)})),this.menuEl.appendChild(i)}this.dropdownEl.setAttribute("open","")}else this.dropdownEl.removeAttribute("open")}selectMention(t){if(this.restoreSelection(),!this.lastRange||!this.mentionTrigger||!this.editorEl)return;let i=this.lastRange.startContainer,s=this.lastRange.startOffset;if(i.nodeType!==Node.TEXT_NODE){const t=i.childNodes[s];if(t?.nodeType!==Node.TEXT_NODE)return;i=t,s=0}const n=i,e=(n.textContent||"").lastIndexOf(this.mentionTrigger,s);if(e<0)return;const o=e+1+this.mentionQuery.length,h=document.createRange();h.setStart(n,e),h.setEnd(n,o),h.deleteContents();const r=document.createElement("span");r.classList.add("mention"),r.textContent=`${this.mentionTrigger}${t.label}`;const u=this.getTriggerColor(this.mentionTrigger);u&&(r.style.backgroundColor=u),h.insertNode(r);const c=document.createTextNode(" ");r.after(c);const l=window.getSelection(),d=document.createRange();d.setStartAfter(c),d.collapse(!0),l?.removeAllRanges(),l?.addRange(d),this.lastRange=d.cloneRange(),this.closeMention(),this.editorEl.dispatchEvent(new InputEvent("input",{bubbles:!0}))}};t([s({attribute:"mentions",converter:{fromAttribute:t=>{try{const i=JSON.parse(t),s={};for(const t of Object.keys(i)){const n=i[t];Array.isArray(n)&&(s[t]=n.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)}})],o.prototype,"mentions",void 0),t([s({attribute:"mentioncolors",converter:{fromAttribute:t=>{try{const i=JSON.parse(t);return i&&"object"==typeof i?i:{}}catch{return{}}},toAttribute:t=>JSON.stringify(t??{})}})],o.prototype,"mentionColors",void 0),t([n()],o.prototype,"externalConfig",void 0),t([n()],o.prototype,"itemsConfig",void 0),t([n()],o.prototype,"itemsColors",void 0),o=t([e("nile-rte-mentions")],o);
@@ -1,2 +1,2 @@
1
- function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o;}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o;},_typeof(o);}System.register(["tslib","lit","lit/decorators.js"],function(_export,_context){"use strict";var e,t,n,i,l,r,_templateObject,_templateObject2,_templateObject3,_templateObject4,_templateObject5,s;function _taggedTemplateLiteral(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}));}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function");}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o);}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e;}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+"";}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.");}return("string"===r?String:Number)(t);}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e));}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t);}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e;}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t;})();}function _superPropGet(t,o,e,r){var p=_get(_getPrototypeOf(1&r?t.prototype:t),o,e);return 2&r&&"function"==typeof p?function(t){return p.apply(e,t);}:p;}function _get(){return _get="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,r){var p=_superPropBase(e,t);if(p){var n=Object.getOwnPropertyDescriptor(p,t);return n.get?n.get.call(arguments.length<3?e:r):n.value;}},_get.apply(null,arguments);}function _superPropBase(t,o){for(;!{}.hasOwnProperty.call(t,o)&&null!==(t=_getPrototypeOf(t)););return t;}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t);},_getPrototypeOf(t);}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e);}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t;},_setPrototypeOf(t,e);}return{setters:[function(_tslib){e=_tslib.__decorate;},function(_lit){t=_lit.LitElement;n=_lit.html;},function(_litDecoratorsJs){i=_litDecoratorsJs.property;l=_litDecoratorsJs.state;r=_litDecoratorsJs.customElement;}],execute:function execute(){s=/*#__PURE__*/function(_t){function s(){var _this;_classCallCheck(this,s);_this=_callSuper(this,s,arguments),_this.type="",_this.options="[]",_this.label="",_this.selectedValue="";return _this;}_inherits(s,_t);return _createClass(s,[{key:"createRenderRoot",value:function createRenderRoot(){return this;}},{key:"mapAlignIcon",value:function mapAlignIcon(e){return{left:"align-left",center:"align-center",right:"align-right",justify:"nile-justify"}[e]||"align-left";}},{key:"parsedOptions",get:function get(){var _this2=this;try{return JSON.parse(this.options).map(function(e){var _e$value,_ref,_e$label,_e$icon;var t=(_e$value=e.value)!==null&&_e$value!==void 0?_e$value:e;return{value:t,label:(_ref=(_e$label=e.label)!==null&&_e$label!==void 0?_e$label:e.value)!==null&&_ref!==void 0?_ref:e,icon:(_e$icon=e.icon)!==null&&_e$icon!==void 0?_e$icon:"align"===_this2.type?_this2.mapAlignIcon(String(t)):void 0};});}catch(_unused){return[];}}},{key:"ensureDefault",value:function ensureDefault(){if(!this.selectedValue){var _e=this.parsedOptions[0];_e&&(this.selectedValue=_e.value);}}},{key:"onSelect",value:function onSelect(e){this.selectedValue=e,this.dispatchEvent(new CustomEvent("change",{detail:e,bubbles:!0,composed:!0}));}},{key:"connectedCallback",value:function connectedCallback(){_superPropGet(s,"connectedCallback",this,3)([]),this.injectLocalStyles();}},{key:"injectLocalStyles",value:function injectLocalStyles(){if(this.querySelector("style[data-rte-select-style]"))return;var e=document.createElement("style");e.setAttribute("data-rte-select-style","true"),e.textContent="\n\n nile-menu.rte-align-menu::part(menu__items-wrapper) {\n display: flex;\n }\n nile-menu.rte-align-menu,nile-menu.rte-default-menu{\n margin-top: 0px;\n }\n\n nile-button.rte-align-trigger::part(base),nile-button.rte-default-trigger::part(base){\n min-width: 32px;\n height: 32px;\n padding: 0px 6px;\n box-shadow: none;\n }\n \n ",this.insertBefore(e,this.firstChild);}},{key:"render",value:function render(){var _this3=this;var e=this.parsedOptions;this.ensureDefault();var t=e.find(function(e){return e.value===_this3.selectedValue;});if("align"===this.type){var _i=t!==null&&t!==void 0&&t.icon?n(_templateObject||(_templateObject=_taggedTemplateLiteral(["<nile-icon name=\"","\"></nile-icon>"])),t.icon):this.label||"Align";return n(_templateObject2||(_templateObject2=_taggedTemplateLiteral(["\n <nile-dropdown class=\"rte-align-dd\">\n <nile-button slot=\"trigger\" variant=\"tertiary\" class=\"rte-align-trigger\">\n ","\n </nile-button>\n <nile-menu class=\"rte-align-menu\">\n ","\n </nile-menu>\n </nile-dropdown>\n\n \n "])),_i,e.map(function(e){return n(_templateObject3||(_templateObject3=_taggedTemplateLiteral(["\n <nile-menu-item\n class=\"rte-align-item\"\n ?active=","\n @click=",">\n <nile-icon name=\"","\"></nile-icon>\n </nile-menu-item>\n "])),e.value===_this3.selectedValue,function(){return _this3.onSelect(e.value);},e.icon);}));}var i=(t===null||t===void 0?void 0:t.label)||this.label||"Select";return n(_templateObject4||(_templateObject4=_taggedTemplateLiteral(["\n <nile-dropdown class=\"rte-default-dd\">\n <nile-button slot=\"trigger\" variant=\"tertiary\" class=\"rte-default-trigger\">\n "," <nile-icon name=\"arrowdown\"></nile-icon>\n </nile-button>\n <nile-menu class=\"rte-default-menu\">\n ","\n </nile-menu>\n </nile-dropdown>\n "])),i,e.map(function(e){return n(_templateObject5||(_templateObject5=_taggedTemplateLiteral(["\n <nile-menu-item\n ?active=","\n @click=",">\n ","\n </nile-menu-item>\n "])),e.value===_this3.selectedValue,function(){return _this3.onSelect(e.value);},e.label);}));}}]);}(t);e([i({type:String})],s.prototype,"type",void 0),e([i({type:String})],s.prototype,"options",void 0),e([i({type:String})],s.prototype,"label",void 0),e([l()],s.prototype,"selectedValue",void 0),s=e([r("nile-rte-select")],s);}};});
1
+ function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o;}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o;},_typeof(o);}System.register(["tslib","lit","lit/decorators.js"],function(_export,_context){"use strict";var t,e,n,i,l,r,_templateObject,_templateObject2,_templateObject3,_templateObject4,_templateObject5,_templateObject6,_templateObject7,s,a;function _taggedTemplateLiteral(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}));}function _classCallCheck(a,n){if(!(a instanceof n))throw new TypeError("Cannot call a class as a function");}function _defineProperties(e,r){for(var t=0;t<r.length;t++){var o=r[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,_toPropertyKey(o.key),o);}}function _createClass(e,r,t){return r&&_defineProperties(e.prototype,r),t&&_defineProperties(e,t),Object.defineProperty(e,"prototype",{writable:!1}),e;}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+"";}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.");}return("string"===r?String:Number)(t);}function _callSuper(t,o,e){return o=_getPrototypeOf(o),_possibleConstructorReturn(t,_isNativeReflectConstruct()?Reflect.construct(o,e||[],_getPrototypeOf(t).constructor):o.apply(t,e));}function _possibleConstructorReturn(t,e){if(e&&("object"==_typeof(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return _assertThisInitialized(t);}function _assertThisInitialized(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e;}function _isNativeReflectConstruct(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));}catch(t){}return(_isNativeReflectConstruct=function _isNativeReflectConstruct(){return!!t;})();}function _superPropGet(t,o,e,r){var p=_get(_getPrototypeOf(1&r?t.prototype:t),o,e);return 2&r&&"function"==typeof p?function(t){return p.apply(e,t);}:p;}function _get(){return _get="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,r){var p=_superPropBase(e,t);if(p){var n=Object.getOwnPropertyDescriptor(p,t);return n.get?n.get.call(arguments.length<3?e:r):n.value;}},_get.apply(null,arguments);}function _superPropBase(t,o){for(;!{}.hasOwnProperty.call(t,o)&&null!==(t=_getPrototypeOf(t)););return t;}function _getPrototypeOf(t){return _getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t);},_getPrototypeOf(t);}function _inherits(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&_setPrototypeOf(t,e);}function _setPrototypeOf(t,e){return _setPrototypeOf=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t;},_setPrototypeOf(t,e);}function o(t){return s.has(t);}return{setters:[function(_tslib){t=_tslib.__decorate;},function(_lit){e=_lit.LitElement;n=_lit.html;},function(_litDecoratorsJs){i=_litDecoratorsJs.property;l=_litDecoratorsJs.state;r=_litDecoratorsJs.customElement;}],execute:function execute(){s=new Set(["p","h1","h2","h3","h4","h5","h6"]);a=/*#__PURE__*/function(_e){function a(){var _this;_classCallCheck(this,a);_this=_callSuper(this,a,arguments),_this.type="",_this.options="[]",_this.label="",_this.selectedValue="";return _this;}_inherits(a,_e);return _createClass(a,[{key:"createRenderRoot",value:function createRenderRoot(){return this;}},{key:"mapAlignIcon",value:function mapAlignIcon(t){return{left:"align-left",center:"align-center",right:"align-right",justify:"nile-justify"}[t]||"align-left";}},{key:"parsedOptions",get:function get(){var _this$optionsObj,_this2=this;var t=(_this$optionsObj=this.optionsObj)!==null&&_this$optionsObj!==void 0?_this$optionsObj:this.options;var e=function(){if(Array.isArray(t))return t;try{return JSON.parse(String(t));}catch(_unused){return[];}}().map(function(t){var _t$value,_ref,_t$label,_t$icon;var e=(_t$value=t===null||t===void 0?void 0:t.value)!==null&&_t$value!==void 0?_t$value:t;return{value:e,label:(_ref=(_t$label=t===null||t===void 0?void 0:t.label)!==null&&_t$label!==void 0?_t$label:t===null||t===void 0?void 0:t.value)!==null&&_ref!==void 0?_ref:t,icon:(_t$icon=t===null||t===void 0?void 0:t.icon)!==null&&_t$icon!==void 0?_t$icon:"align"===_this2.type?_this2.mapAlignIcon(String(e)):void 0};});if("heading"===this.type){e.length;e=e.filter(function(t){return o(t.value);}),e.length,this.selectedValue&&!o(this.selectedValue)&&(this.selectedValue="");}return e;}},{key:"ensureDefault",value:function ensureDefault(){if(!this.selectedValue){var _t=this.parsedOptions[0];_t&&(this.selectedValue=_t.value);}}},{key:"onSelect",value:function onSelect(t){"heading"!==this.type||o(t)?(this.selectedValue=t,this.dispatchEvent(new CustomEvent("change",{detail:t,bubbles:!0,composed:!0}))):console.warn("[nile-rte-select] Ignoring invalid heading value: ".concat(t));}},{key:"connectedCallback",value:function connectedCallback(){_superPropGet(a,"connectedCallback",this,3)([]),this.injectLocalStyles();}},{key:"injectLocalStyles",value:function injectLocalStyles(){if(this.querySelector("style[data-rte-select-style]"))return;var t=document.createElement("style");t.setAttribute("data-rte-select-style","true"),t.textContent="\n nile-menu.rte-align-menu::part(menu__items-wrapper) {\n display: flex;\n }\n nile-menu.rte-align-menu,\n nile-menu.rte-default-menu {\n margin-top: 0px;\n }\n nile-button.rte-align-trigger::part(base),\n nile-button.rte-default-trigger::part(base) {\n min-width: 32px;\n height: 32px;\n padding: 0px 6px;\n box-shadow: none;\n }\n ",this.insertBefore(t,this.firstChild);}},{key:"render",value:function render(){var _this3=this;var t=this.parsedOptions;this.ensureDefault();var e=t.find(function(t){return t.value===_this3.selectedValue;});if("align"===this.type){var _i=e!==null&&e!==void 0&&e.icon?n(_templateObject||(_templateObject=_taggedTemplateLiteral(["<nile-icon name=\"","\"></nile-icon>"])),e.icon):this.label||"Align";return n(_templateObject2||(_templateObject2=_taggedTemplateLiteral(["\n <nile-dropdown class=\"rte-align-dd\">\n <nile-button slot=\"trigger\" variant=\"tertiary\" class=\"rte-align-trigger\">\n ","\n </nile-button>\n <nile-menu class=\"rte-align-menu\">\n ","\n </nile-menu>\n </nile-dropdown>\n "])),_i,t.map(function(t){return n(_templateObject3||(_templateObject3=_taggedTemplateLiteral(["\n <nile-menu-item\n class=\"rte-align-item\"\n ?active=","\n @click=",">\n <nile-icon name=\"","\"></nile-icon>\n </nile-menu-item>\n "])),t.value===_this3.selectedValue,function(){return _this3.onSelect(t.value);},t.icon);}));}if("font"===this.type){var _i2=(e===null||e===void 0?void 0:e.label)||this.label||"Font";return n(_templateObject4||(_templateObject4=_taggedTemplateLiteral(["\n <nile-dropdown class=\"rte-default-dd\">\n <nile-button\n slot=\"trigger\"\n variant=\"tertiary\"\n class=\"rte-default-trigger\"\n style=\"font-family: ","\">\n "," <nile-icon name=\"arrowdown\"></nile-icon>\n </nile-button>\n <nile-menu class=\"rte-default-menu\">\n ","\n </nile-menu>\n </nile-dropdown>\n "])),(e===null||e===void 0?void 0:e.value)||"inherit",_i2,t.map(function(t){return n(_templateObject5||(_templateObject5=_taggedTemplateLiteral(["\n <nile-menu-item\n style=\"font-family: ","\"\n ?active=","\n @click=",">\n ","\n </nile-menu-item>\n "])),t.value,t.value===_this3.selectedValue,function(){return _this3.onSelect(t.value);},t.label);}));}var i=(e===null||e===void 0?void 0:e.label)||this.label||"Select";return n(_templateObject6||(_templateObject6=_taggedTemplateLiteral(["\n <nile-dropdown class=\"rte-default-dd\">\n <nile-button slot=\"trigger\" variant=\"tertiary\" class=\"rte-default-trigger\">\n "," <nile-icon name=\"arrowdown\"></nile-icon>\n </nile-button>\n <nile-menu class=\"rte-default-menu\">\n ","\n </nile-menu>\n </nile-dropdown>\n "])),i,t.map(function(t){return n(_templateObject7||(_templateObject7=_taggedTemplateLiteral(["\n <nile-menu-item\n ?active=","\n @click=",">\n ","\n </nile-menu-item>\n "])),t.value===_this3.selectedValue,function(){return _this3.onSelect(t.value);},t.label);}));}}]);}(e);t([i({type:String})],a.prototype,"type",void 0),t([i({type:String})],a.prototype,"options",void 0),t([i({attribute:!1})],a.prototype,"optionsObj",void 0),t([i({type:String})],a.prototype,"label",void 0),t([l()],a.prototype,"selectedValue",void 0),a=t([r("nile-rte-select")],a);}};});
2
2
  //# sourceMappingURL=nile-rte-select.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"nile-rte-select.cjs.js","sources":["../../../src/nile-rich-text-editor/nile-rte-select.ts"],"sourcesContent":["// nile-rte-select.ts\nimport { LitElement, html } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\n\n@customElement('nile-rte-select')\nexport class NileRteSelect extends LitElement {\n protected createRenderRoot() { return this; }\n\n /** 'heading' | 'font' | 'align' */\n @property({ type: String }) type = '';\n /** JSON: [{ value, label?, icon? }, ...] */\n @property({ type: String }) options = '[]';\n /** Fallback label for trigger (e.g., \"Align\") */\n @property({ type: String }) label = '';\n\n @state() private selectedValue = '';\n\n private mapAlignIcon(v: string) {\n const map: Record<string,string> = {\n left: 'align-left',\n center: 'align-center',\n right: 'align-right',\n justify: 'nile-justify'\n };\n return map[v] || 'align-left';\n }\n\n private get parsedOptions(): Array<{ value: string; label: string; icon?: string }> {\n try {\n const raw = JSON.parse(this.options);\n return raw.map((o: any) => {\n const value = o.value ?? o;\n const label = o.label ?? o.value ?? o;\n const icon = o.icon ?? (this.type === 'align' ? this.mapAlignIcon(String(value)) : undefined);\n return { value, label, icon };\n });\n } catch {\n return [];\n }\n }\n\n private ensureDefault() {\n if (!this.selectedValue) {\n const first = this.parsedOptions[0];\n if (first) this.selectedValue = first.value;\n }\n }\n\n private onSelect(value: string) {\n this.selectedValue = value;\n this.dispatchEvent(new CustomEvent('change', {\n detail: value, bubbles: true, composed: true\n }));\n }\n\n \n\n connectedCallback(): void {\n super.connectedCallback();\n this.injectLocalStyles(); \n }\n\n private injectLocalStyles() {\n \n if (this.querySelector('style[data-rte-select-style]')) return;\n\n const style = document.createElement('style');\n style.setAttribute('data-rte-select-style', 'true');\n style.textContent = `\n\n nile-menu.rte-align-menu::part(menu__items-wrapper) {\n display: flex;\n }\n nile-menu.rte-align-menu,nile-menu.rte-default-menu{\n margin-top: 0px;\n }\n\n nile-button.rte-align-trigger::part(base),nile-button.rte-default-trigger::part(base){\n min-width: 32px;\n height: 32px;\n padding: 0px 6px;\n box-shadow: none;\n }\n \n `;\n \n this.insertBefore(style, this.firstChild);\n }\n\n\n render() {\n const opts = this.parsedOptions;\n this.ensureDefault();\n const current = opts.find(o => o.value === this.selectedValue);\n\n if (this.type === 'align') {\n // ► Align: separate dropdown instance + icon-only items + icon trigger\n const trigger = current?.icon\n ? html`<nile-icon name=\"${current.icon}\"></nile-icon>`\n : (this.label || 'Align');\n return html`\n <nile-dropdown class=\"rte-align-dd\">\n <nile-button slot=\"trigger\" variant=\"tertiary\" class=\"rte-align-trigger\">\n ${trigger}\n </nile-button>\n <nile-menu class=\"rte-align-menu\">\n ${opts.map(o => html`\n <nile-menu-item\n class=\"rte-align-item\"\n ?active=${o.value === this.selectedValue}\n @click=${() => this.onSelect(o.value)}>\n <nile-icon name=\"${o.icon}\"></nile-icon>\n </nile-menu-item>\n `)}\n </nile-menu>\n </nile-dropdown>\n\n \n `;\n if (this.type === 'font') {\n const triggerText = current?.label || this.label || 'Font';\n return html`\n <nile-dropdown class=\"rte-default-dd\">\n <nile-button slot=\"trigger\" variant=\"tertiary\" class=\"rte-default-trigger\"\n style=\"font-family: ${current?.value || 'inherit'}\">\n ${triggerText} <nile-icon name=\"arrowdown\"></nile-icon>\n </nile-button>\n <nile-menu class=\"rte-default-menu\">\n ${opts.map(o => html`\n <nile-menu-item\n style=\"font-family: ${o.value}\"\n ?active=${o.value === this.selectedValue}\n @click=${() => this.onSelect(o.value)}>\n ${o.label}\n </nile-menu-item>\n `)}\n </nile-menu>\n </nile-dropdown>\n `;\n }\n }\n\n // ► Everything else: default (text) dropdown\n const triggerText = current?.label || this.label || 'Select';\n return html`\n <nile-dropdown class=\"rte-default-dd\">\n <nile-button slot=\"trigger\" variant=\"tertiary\" class=\"rte-default-trigger\">\n ${triggerText} <nile-icon name=\"arrowdown\"></nile-icon>\n </nile-button>\n <nile-menu class=\"rte-default-menu\">\n ${opts.map(o => html`\n <nile-menu-item\n ?active=${o.value === this.selectedValue}\n @click=${() => this.onSelect(o.value)}>\n ${o.label}\n </nile-menu-item>\n `)}\n </nile-menu>\n </nile-dropdown>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-rte-select': NileRteSelect;\n }\n}\n"],"names":["NileRteSelect","s","this","type","options","label","selectedValue","_this","_inherits","_t","_createClass","key","value","createRenderRoot","mapAlignIcon","v","left","center","right","justify","get","_this2","JSON","parse","map","o","icon","_e$icon","String","undefined","_unused","ensureDefault","first","parsedOptions","onSelect","dispatchEvent","CustomEvent","detail","bubbles","composed","connectedCallback","super","injectLocalStyles","querySelector","style","document","createElement","setAttribute","textContent","insertBefore","firstChild","render","opts","current","find","trigger","html","_templateObject","_taggedTemplateLiteral","_templateObject2","_templateObject3","triggerText","_templateObject4","_templateObject5","LitElement","__decorate","property","prototype","state","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"nile-rte-select.cjs.js","sources":["../../../src/nile-rich-text-editor/nile-rte-select.ts"],"sourcesContent":["// nile-rte-select.ts\nimport { LitElement, html } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\ntype HeadingTag = 'p' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\ntype GenericOption = { value: string; label?: string; icon?: string };\ntype HeadingOption = { value: HeadingTag; label?: string; icon?: string };\ntype NormalizedOption = { value: string; label: string; icon?: string };\n\nconst HEADING_ALLOWLIST: ReadonlySet<HeadingTag> = new Set([\n 'p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'\n]);\n\nfunction isHeadingTag(v: string): v is HeadingTag {\n return HEADING_ALLOWLIST.has(v as HeadingTag);\n}\n\n@customElement('nile-rte-select')\nexport class NileRteSelect extends LitElement {\n protected createRenderRoot() { return this; }\n\n /** 'heading' | 'font' | 'align' */\n @property({ type: String }) type = '';\n\n /** JSON: [{ value, label?, icon? }, ...] (attribute-based; runtime-validated) */\n @property({ type: String }) options = '[]';\n\n /** Programmatic options (preferred for TS safety). */\n @property({ attribute: false })\n optionsObj?: Array<GenericOption | HeadingOption>;\n\n /** Fallback label for trigger (e.g., \"Align\") */\n @property({ type: String }) label = '';\n\n @state() private selectedValue = '';\n\n private mapAlignIcon(v: string) {\n const map: Record<string,string> = {\n left: 'align-left',\n center: 'align-center',\n right: 'align-right',\n justify: 'nile-justify'\n };\n return map[v] || 'align-left';\n }\n\n private get parsedOptions(): NormalizedOption[] {\n // Prefer programmatic options if present (gives TS compile-time checks)\n const source: unknown = this.optionsObj ?? this.options;\n\n const rawArray: any[] = (() => {\n if (Array.isArray(source)) return source;\n try { return JSON.parse(String(source)); } catch { return []; }\n })();\n\n // Normalize to consistent shape\n let items: NormalizedOption[] = rawArray.map((o: any) => {\n const value: string = o?.value ?? o;\n const label: string = o?.label ?? o?.value ?? o;\n const icon: string | undefined =\n o?.icon ?? (this.type === 'align' ? this.mapAlignIcon(String(value)) : undefined);\n return { value, label, icon };\n });\n\n // If type is heading, enforce allowlist (runtime validation)\n if (this.type === 'heading') {\n const before = items.length;\n items = items.filter(i => isHeadingTag(i.value));\n if (items.length !== before) {\n }\n // If current selection is invalid for heading, reset\n if (this.selectedValue && !isHeadingTag(this.selectedValue)) {\n this.selectedValue = '';\n }\n }\n\n return items;\n }\n\n private ensureDefault() {\n if (!this.selectedValue) {\n const first = this.parsedOptions[0];\n if (first) this.selectedValue = first.value;\n }\n }\n\n private onSelect(value: string) {\n if (this.type === 'heading' && !isHeadingTag(value)) {\n console.warn(`[nile-rte-select] Ignoring invalid heading value: ${value}`);\n return;\n }\n this.selectedValue = value;\n this.dispatchEvent(new CustomEvent('change', {\n detail: value, bubbles: true, composed: true\n }));\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n this.injectLocalStyles();\n }\n\n private injectLocalStyles() {\n if (this.querySelector('style[data-rte-select-style]')) return;\n\n const style = document.createElement('style');\n style.setAttribute('data-rte-select-style', 'true');\n style.textContent = `\n nile-menu.rte-align-menu::part(menu__items-wrapper) {\n display: flex;\n }\n nile-menu.rte-align-menu,\n nile-menu.rte-default-menu {\n margin-top: 0px;\n }\n nile-button.rte-align-trigger::part(base),\n nile-button.rte-default-trigger::part(base) {\n min-width: 32px;\n height: 32px;\n padding: 0px 6px;\n box-shadow: none;\n }\n `;\n this.insertBefore(style, this.firstChild);\n }\n\n render() {\n const opts = this.parsedOptions;\n this.ensureDefault();\n const current = opts.find(o => o.value === this.selectedValue);\n\n // ► Align: icon-only items + icon trigger\n if (this.type === 'align') {\n const trigger = current?.icon\n ? html`<nile-icon name=\"${current.icon}\"></nile-icon>`\n : (this.label || 'Align');\n\n return html`\n <nile-dropdown class=\"rte-align-dd\">\n <nile-button slot=\"trigger\" variant=\"tertiary\" class=\"rte-align-trigger\">\n ${trigger}\n </nile-button>\n <nile-menu class=\"rte-align-menu\">\n ${opts.map(o => html`\n <nile-menu-item\n class=\"rte-align-item\"\n ?active=${o.value === this.selectedValue}\n @click=${() => this.onSelect(o.value)}>\n <nile-icon name=\"${o.icon}\"></nile-icon>\n </nile-menu-item>\n `)}\n </nile-menu>\n </nile-dropdown>\n `;\n }\n\n // ► Font: show labels, preview fonts in items and trigger\n if (this.type === 'font') {\n const triggerText = current?.label || this.label || 'Font';\n return html`\n <nile-dropdown class=\"rte-default-dd\">\n <nile-button\n slot=\"trigger\"\n variant=\"tertiary\"\n class=\"rte-default-trigger\"\n style=\"font-family: ${current?.value || 'inherit'}\">\n ${triggerText} <nile-icon name=\"arrowdown\"></nile-icon>\n </nile-button>\n <nile-menu class=\"rte-default-menu\">\n ${opts.map(o => html`\n <nile-menu-item\n style=\"font-family: ${o.value}\"\n ?active=${o.value === this.selectedValue}\n @click=${() => this.onSelect(o.value)}>\n ${o.label}\n </nile-menu-item>\n `)}\n </nile-menu>\n </nile-dropdown>\n `;\n }\n\n // ► Default (e.g., heading): text items; heading values are validated already\n const triggerText = current?.label || this.label || 'Select';\n return html`\n <nile-dropdown class=\"rte-default-dd\">\n <nile-button slot=\"trigger\" variant=\"tertiary\" class=\"rte-default-trigger\">\n ${triggerText} <nile-icon name=\"arrowdown\"></nile-icon>\n </nile-button>\n <nile-menu class=\"rte-default-menu\">\n ${opts.map(o => html`\n <nile-menu-item\n ?active=${o.value === this.selectedValue}\n @click=${() => this.onSelect(o.value)}>\n ${o.label}\n </nile-menu-item>\n `)}\n </nile-menu>\n </nile-dropdown>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-rte-select': NileRteSelect;\n }\n}\n"],"names":["isHeadingTag","v","HEADING_ALLOWLIST","has","setters","_tslib","Set","NileRteSelect","a","constructor","this","type","options","label","selectedValue","_this","_inherits","_e","_createClass","key","value","createRenderRoot","mapAlignIcon","left","center","right","justify","get","parsedOptions","source","optionsObj","items","Array","isArray","JSON","parse","String","_unused","map","o","icon","undefined","length","filter","i","ensureDefault","first","onSelect","dispatchEvent","CustomEvent","detail","bubbles","composed","console","warn","connectedCallback","super","injectLocalStyles","querySelector","style","document","createElement","setAttribute","textContent","insertBefore","firstChild","render","opts","current","find","trigger","html","_templateObject","_taggedTemplateLiteral","_templateObject2","_templateObject3","triggerText","_templateObject4","_templateObject5","_templateObject6","_templateObject7","__decorate","LitElement","property","prototype","attribute","state","customElement"],"mappings":"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"}
@@ -1,34 +1,52 @@
1
- import{__decorate as e}from"tslib";import{LitElement as t,html as n}from"lit";import{property as i,state as l,customElement as r}from"lit/decorators.js";let s=class extends t{constructor(){super(...arguments),this.type="",this.options="[]",this.label="",this.selectedValue=""}createRenderRoot(){return this}mapAlignIcon(e){return{left:"align-left",center:"align-center",right:"align-right",justify:"nile-justify"}[e]||"align-left"}get parsedOptions(){try{return JSON.parse(this.options).map((e=>{const t=e.value??e;return{value:t,label:e.label??e.value??e,icon:e.icon??("align"===this.type?this.mapAlignIcon(String(t)):void 0)}}))}catch{return[]}}ensureDefault(){if(!this.selectedValue){const e=this.parsedOptions[0];e&&(this.selectedValue=e.value)}}onSelect(e){this.selectedValue=e,this.dispatchEvent(new CustomEvent("change",{detail:e,bubbles:!0,composed:!0}))}connectedCallback(){super.connectedCallback(),this.injectLocalStyles()}injectLocalStyles(){if(this.querySelector("style[data-rte-select-style]"))return;const e=document.createElement("style");e.setAttribute("data-rte-select-style","true"),e.textContent="\n\n nile-menu.rte-align-menu::part(menu__items-wrapper) {\n display: flex;\n }\n nile-menu.rte-align-menu,nile-menu.rte-default-menu{\n margin-top: 0px;\n }\n\n nile-button.rte-align-trigger::part(base),nile-button.rte-default-trigger::part(base){\n min-width: 32px;\n height: 32px;\n padding: 0px 6px;\n box-shadow: none;\n }\n \n ",this.insertBefore(e,this.firstChild)}render(){const e=this.parsedOptions;this.ensureDefault();const t=e.find((e=>e.value===this.selectedValue));if("align"===this.type){const i=t?.icon?n`<nile-icon name="${t.icon}"></nile-icon>`:this.label||"Align";return n`
1
+ import{__decorate as t}from"tslib";import{LitElement as e,html as n}from"lit";import{property as i,state as l,customElement as r}from"lit/decorators.js";const s=new Set(["p","h1","h2","h3","h4","h5","h6"]);function o(t){return s.has(t)}let a=class extends e{constructor(){super(...arguments),this.type="",this.options="[]",this.label="",this.selectedValue=""}createRenderRoot(){return this}mapAlignIcon(t){return{left:"align-left",center:"align-center",right:"align-right",justify:"nile-justify"}[t]||"align-left"}get parsedOptions(){const t=this.optionsObj??this.options;let e=(()=>{if(Array.isArray(t))return t;try{return JSON.parse(String(t))}catch{return[]}})().map((t=>{const e=t?.value??t;return{value:e,label:t?.label??t?.value??t,icon:t?.icon??("align"===this.type?this.mapAlignIcon(String(e)):void 0)}}));if("heading"===this.type){e.length;e=e.filter((t=>o(t.value))),e.length,this.selectedValue&&!o(this.selectedValue)&&(this.selectedValue="")}return e}ensureDefault(){if(!this.selectedValue){const t=this.parsedOptions[0];t&&(this.selectedValue=t.value)}}onSelect(t){"heading"!==this.type||o(t)?(this.selectedValue=t,this.dispatchEvent(new CustomEvent("change",{detail:t,bubbles:!0,composed:!0}))):console.warn(`[nile-rte-select] Ignoring invalid heading value: ${t}`)}connectedCallback(){super.connectedCallback(),this.injectLocalStyles()}injectLocalStyles(){if(this.querySelector("style[data-rte-select-style]"))return;const t=document.createElement("style");t.setAttribute("data-rte-select-style","true"),t.textContent="\n nile-menu.rte-align-menu::part(menu__items-wrapper) {\n display: flex;\n }\n nile-menu.rte-align-menu,\n nile-menu.rte-default-menu {\n margin-top: 0px;\n }\n nile-button.rte-align-trigger::part(base),\n nile-button.rte-default-trigger::part(base) {\n min-width: 32px;\n height: 32px;\n padding: 0px 6px;\n box-shadow: none;\n }\n ",this.insertBefore(t,this.firstChild)}render(){const t=this.parsedOptions;this.ensureDefault();const e=t.find((t=>t.value===this.selectedValue));if("align"===this.type){const i=e?.icon?n`<nile-icon name="${e.icon}"></nile-icon>`:this.label||"Align";return n`
2
2
  <nile-dropdown class="rte-align-dd">
3
3
  <nile-button slot="trigger" variant="tertiary" class="rte-align-trigger">
4
4
  ${i}
5
5
  </nile-button>
6
6
  <nile-menu class="rte-align-menu">
7
- ${e.map((e=>n`
7
+ ${t.map((t=>n`
8
8
  <nile-menu-item
9
9
  class="rte-align-item"
10
- ?active=${e.value===this.selectedValue}
11
- @click=${()=>this.onSelect(e.value)}>
12
- <nile-icon name="${e.icon}"></nile-icon>
10
+ ?active=${t.value===this.selectedValue}
11
+ @click=${()=>this.onSelect(t.value)}>
12
+ <nile-icon name="${t.icon}"></nile-icon>
13
13
  </nile-menu-item>
14
14
  `))}
15
15
  </nile-menu>
16
16
  </nile-dropdown>
17
-
18
-
19
- `}const i=t?.label||this.label||"Select";return n`
17
+ `}if("font"===this.type){const i=e?.label||this.label||"Font";return n`
18
+ <nile-dropdown class="rte-default-dd">
19
+ <nile-button
20
+ slot="trigger"
21
+ variant="tertiary"
22
+ class="rte-default-trigger"
23
+ style="font-family: ${e?.value||"inherit"}">
24
+ ${i} <nile-icon name="arrowdown"></nile-icon>
25
+ </nile-button>
26
+ <nile-menu class="rte-default-menu">
27
+ ${t.map((t=>n`
28
+ <nile-menu-item
29
+ style="font-family: ${t.value}"
30
+ ?active=${t.value===this.selectedValue}
31
+ @click=${()=>this.onSelect(t.value)}>
32
+ ${t.label}
33
+ </nile-menu-item>
34
+ `))}
35
+ </nile-menu>
36
+ </nile-dropdown>
37
+ `}const i=e?.label||this.label||"Select";return n`
20
38
  <nile-dropdown class="rte-default-dd">
21
39
  <nile-button slot="trigger" variant="tertiary" class="rte-default-trigger">
22
40
  ${i} <nile-icon name="arrowdown"></nile-icon>
23
41
  </nile-button>
24
42
  <nile-menu class="rte-default-menu">
25
- ${e.map((e=>n`
43
+ ${t.map((t=>n`
26
44
  <nile-menu-item
27
- ?active=${e.value===this.selectedValue}
28
- @click=${()=>this.onSelect(e.value)}>
29
- ${e.label}
45
+ ?active=${t.value===this.selectedValue}
46
+ @click=${()=>this.onSelect(t.value)}>
47
+ ${t.label}
30
48
  </nile-menu-item>
31
49
  `))}
32
50
  </nile-menu>
33
51
  </nile-dropdown>
34
- `}};e([i({type:String})],s.prototype,"type",void 0),e([i({type:String})],s.prototype,"options",void 0),e([i({type:String})],s.prototype,"label",void 0),e([l()],s.prototype,"selectedValue",void 0),s=e([r("nile-rte-select")],s);
52
+ `}};t([i({type:String})],a.prototype,"type",void 0),t([i({type:String})],a.prototype,"options",void 0),t([i({attribute:!1})],a.prototype,"optionsObj",void 0),t([i({type:String})],a.prototype,"label",void 0),t([l()],a.prototype,"selectedValue",void 0),a=t([r("nile-rte-select")],a);
@@ -1,2 +1,2 @@
1
- System.register([],function(_export,_context){"use strict";function _slicedToArray(r,e){return _arrayWithHoles(r)||_iterableToArrayLimit(r,e)||_unsupportedIterableToArray(r,e)||_nonIterableRest();}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0;}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n;}function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l){if(Object(t)!==t)return;f=!1;}else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r;}finally{try{if(!f&&null!=t["return"]&&(u=t["return"](),Object(u)!==u))return;}finally{if(o)throw n;}}return a;}}function _arrayWithHoles(r){if(Array.isArray(r))return r;}function n(n,t){for(;n&&n!==t;){var _n;if(n instanceof HTMLElement){var _t=getComputedStyle(n).display;if(n.tagName.match(/^(P|DIV|H1|H2|H3|H4|H5|H6|LI)$/)||"block"===_t||"list-item"===_t)return n;}n=((_n=n)===null||_n===void 0?void 0:_n.parentNode)||null;}return t;}function t(n){for(;n&&!(n instanceof HTMLElement);)n=n.parentNode;return n;}function o(n){var t=n.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/i);if(!t)return"#000000";return"#".concat(Number(t[1]).toString(16).padStart(2,"0")).concat(Number(t[2]).toString(16).padStart(2,"0")).concat(Number(t[3]).toString(16).padStart(2,"0"));}function c(n,t,o){var c=document.createElement(t);o&&Object.entries(o).forEach(function(_ref){var _ref2=_slicedToArray(_ref,2),n=_ref2[0],t=_ref2[1];return c.setAttribute(n,t);});try{n.surroundContents(c);}catch(_unused){var _t2=n.extractContents();c.appendChild(_t2),n.insertNode(c);}}function e(n,t,o){var e=document.getSelection();if(!e||0===e.rangeCount)return;var u=e.getRangeAt(0);if(u.collapsed){var _n2=document.createElement(t);o&&Object.entries(o).forEach(function(_ref3){var _ref4=_slicedToArray(_ref3,2),t=_ref4[0],o=_ref4[1];return _n2.setAttribute(t,o);}),_n2.appendChild(document.createTextNode("​")),u.insertNode(_n2);var _c=document.createRange();return _c.setStart(_n2.firstChild,1),_c.collapse(!0),e.removeAllRanges(),void e.addRange(_c);}var r=u.startContainer,s=null;for(;r&&r!==n;){if(r instanceof HTMLElement&&r.tagName.toLowerCase()===t){s=r;break;}r=r.parentNode;}s?function(n){var t=n.parentNode;if(t){for(;n.firstChild;)t.insertBefore(n.firstChild,n);t.removeChild(n);}}(s):c(u,t,o);}function u(t,o){var c=document.getSelection();if(!c||0===c.rangeCount)return;var e=n(c.getRangeAt(0).startContainer,t);if(!e)return;if(e.tagName.toLowerCase()===o)return;var u=document.createElement(o);for(;e.firstChild;)u.appendChild(e.firstChild);e.replaceWith(u);var r=document.createRange();r.selectNodeContents(u),r.collapse(!0),c.removeAllRanges(),c.addRange(r);}function r(t,o){var c=document.getSelection();if(!c||0===c.rangeCount)return;var e=n(c.getRangeAt(0).startContainer,t);e&&(e.style.textAlign="justify"===o?"justify":o);}function s(n,t){var o=document.getSelection();if(!o||0===o.rangeCount)return;var e=o.getRangeAt(0);if(e.collapsed){var _n3=document.createElement("span");_n3.style.fontFamily=t,_n3.appendChild(document.createTextNode("​")),e.insertNode(_n3);var _c2=document.createRange();return _c2.setStart(_n3.firstChild,1),_c2.collapse(!0),o.removeAllRanges(),void o.addRange(_c2);}c(e,"span",{style:"font-family:".concat(t)});}function i(n,t){var o=document.getSelection();if(!o||0===o.rangeCount)return;var e=o.getRangeAt(0);if(e.collapsed){var _n4=document.createElement("span");_n4.style.color=t,_n4.appendChild(document.createTextNode("​")),e.insertNode(_n4);var _c3=document.createRange();return _c3.setStart(_n4.firstChild,1),_c3.collapse(!0),o.removeAllRanges(),void o.addRange(_c3);}c(e,"span",{style:"color:".concat(t)});}function f(n,t){var _u;var o=document.getSelection();if(!o||0===o.rangeCount)return;var c=o.getRangeAt(0);var e=c.startContainer,u=null;for(;e&&e!==n;){if(e instanceof HTMLAnchorElement){u=e;break;}e=e.parentNode;}var r=t!==null&&t!==void 0?t:"undefined"!=typeof window&&window.prompt("Enter URL",((_u=u)===null||_u===void 0?void 0:_u.href)||"https://")||"";if(!r)return;if(u)return void(u.href=r);if(c.collapsed){var _n5=document.createElement("a");_n5.href=r,_n5.textContent=r,c.insertNode(_n5);var _t3=document.createRange();return _t3.setStartAfter(_n5),_t3.collapse(!0),o.removeAllRanges(),void o.addRange(_t3);}var s=document.createElement("a");s.href=r;try{c.surroundContents(s);}catch(_unused2){var _n6=c.extractContents();s.appendChild(_n6),c.insertNode(s);}}_export({a:u,b:s,c:i,d:n,i:f,n:t,r:o,s:r,t:e});return{setters:[],execute:function execute(){}};});
1
+ System.register([],function(_export,_context){"use strict";function _slicedToArray(r,e){return _arrayWithHoles(r)||_iterableToArrayLimit(r,e)||_unsupportedIterableToArray(r,e)||_nonIterableRest();}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0;}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n;}function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l){if(Object(t)!==t)return;f=!1;}else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r;}finally{try{if(!f&&null!=t["return"]&&(u=t["return"](),Object(u)!==u))return;}finally{if(o)throw n;}}return a;}}function _arrayWithHoles(r){if(Array.isArray(r))return r;}function n(n,t){for(;n&&n!==t;){var _n;if(n instanceof HTMLElement){var _t=getComputedStyle(n).display;if(n.tagName.match(/^(P|DIV|H1|H2|H3|H4|H5|H6|LI)$/)||"block"===_t||"list-item"===_t)return n;}n=((_n=n)===null||_n===void 0?void 0:_n.parentNode)||null;}return t;}function t(n){for(;n&&!(n instanceof HTMLElement);)n=n.parentNode;return n;}function o(n){var t=n.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/i);if(!t)return"#000000";return"#".concat(Number(t[1]).toString(16).padStart(2,"0")).concat(Number(t[2]).toString(16).padStart(2,"0")).concat(Number(t[3]).toString(16).padStart(2,"0"));}function c(n,t,o){var c=document.createElement(t);o&&Object.entries(o).forEach(function(_ref){var _ref2=_slicedToArray(_ref,2),n=_ref2[0],t=_ref2[1];return c.setAttribute(n,t);});try{n.surroundContents(c);}catch(_unused){var _t2=n.extractContents();c.appendChild(_t2),n.insertNode(c);}}function e(n,t,o){var e=document.getSelection();if(!e||0===e.rangeCount)return;var u=e.getRangeAt(0);if(u.collapsed){var _n2=document.createElement(t);o&&Object.entries(o).forEach(function(_ref3){var _ref4=_slicedToArray(_ref3,2),t=_ref4[0],o=_ref4[1];return _n2.setAttribute(t,o);}),_n2.appendChild(document.createTextNode("​")),u.insertNode(_n2);var _c=document.createRange();return _c.setStart(_n2.firstChild,1),_c.collapse(!0),e.removeAllRanges(),void e.addRange(_c);}var s=u.startContainer,r=null;for(;s&&s!==n;){if(s instanceof HTMLElement&&s.tagName.toLowerCase()===t){r=s;break;}s=s.parentNode;}r?function(n){var t=n.parentNode;if(t){for(;n.firstChild;)t.insertBefore(n.firstChild,n);t.removeChild(n);}}(r):c(u,t,o);}function u(t,o){var c=document.getSelection();if(!c||0===c.rangeCount)return;var e=n(c.getRangeAt(0).startContainer,t);if(!e)return;if(e.tagName.toLowerCase()===o)return;var u=document.createElement(o);for(;e.firstChild;)u.appendChild(e.firstChild);e.replaceWith(u);var s=document.createRange();s.selectNodeContents(u),s.collapse(!0),c.removeAllRanges(),c.addRange(s);}function s(t,o){var c=document.getSelection();if(!c||0===c.rangeCount)return;var e=n(c.getRangeAt(0).startContainer,t);e&&(e.style.textAlign="justify"===o?"justify":o);}function r(n,t){var o=document.getSelection();if(!o||0===o.rangeCount)return;var e=o.getRangeAt(0);if(e.collapsed){var _n3=document.createElement("span");_n3.style.fontFamily=t,_n3.appendChild(document.createTextNode("​")),e.insertNode(_n3);var _c2=document.createRange();return _c2.setStart(_n3.firstChild,1),_c2.collapse(!0),o.removeAllRanges(),void o.addRange(_c2);}c(e,"span",{style:"font-family:".concat(t)});}function i(n,t){var o=window.getSelection();if(!o||0===o.rangeCount)return;var c=o.getRangeAt(0);if(!n.contains(c.commonAncestorContainer)||c.collapsed)return;var e=document.createElement("span");e.style.backgroundColor=t,e.appendChild(c.extractContents()),c.insertNode(e);var u=document.createRange();u.setStartAfter(e),u.collapse(!0),o.removeAllRanges(),o.addRange(u);}function f(n,t){var o=document.getSelection();if(!o||0===o.rangeCount)return;var e=o.getRangeAt(0);if(e.collapsed){var _n4=document.createElement("span");_n4.style.color=t,_n4.appendChild(document.createTextNode("​")),e.insertNode(_n4);var _c3=document.createRange();return _c3.setStart(_n4.firstChild,1),_c3.collapse(!0),o.removeAllRanges(),void o.addRange(_c3);}c(e,"span",{style:"color:".concat(t)});}function d(n,t){var _u;var o=document.getSelection();if(!o||0===o.rangeCount)return;var c=o.getRangeAt(0);var e=c.startContainer,u=null;for(;e&&e!==n;){if(e instanceof HTMLAnchorElement){u=e;break;}e=e.parentNode;}var s=t!==null&&t!==void 0?t:"undefined"!=typeof window&&window.prompt("Enter URL",((_u=u)===null||_u===void 0?void 0:_u.href)||"https://")||"";if(!s)return;if(u)return void(u.href=s);if(c.collapsed){var _n5=document.createElement("a");_n5.href=s,_n5.textContent=s,c.insertNode(_n5);var _t3=document.createRange();return _t3.setStartAfter(_n5),_t3.collapse(!0),o.removeAllRanges(),void o.addRange(_t3);}var r=document.createElement("a");r.href=s;try{c.surroundContents(r);}catch(_unused2){var _n6=c.extractContents();r.appendChild(_n6),c.insertNode(r);}}_export({a:u,b:r,c:i,d:f,e:n,i:d,n:t,r:o,s:s,t:e});return{setters:[],execute:function execute(){}};});
2
2
  //# sourceMappingURL=utils.cjs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.cjs.js","sources":["../../../src/nile-rich-text-editor/utils.ts"],"sourcesContent":["// src/nile-rich-text-editor/utils.ts\nexport function closestBlock(node: Node | null, root: HTMLElement): HTMLElement | null {\n while (node && node !== root) {\n if (node instanceof HTMLElement) {\n const display = getComputedStyle(node).display;\n if (node.tagName.match(/^(P|DIV|H1|H2|H3|H4|H5|H6|LI)$/) || display === 'block' || display === 'list-item') {\n return node;\n }\n }\n node = node?.parentNode || null;\n }\n return root;\n }\n \n export function nearestElement(n: Node | null): HTMLElement | null {\n while (n && !(n instanceof HTMLElement)) n = n.parentNode as Node | null;\n return n as HTMLElement | null;\n }\n \n export function rgbToHex(rgb: string): string {\n const m = rgb.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/i);\n if (!m) return '#000000';\n const r = Number(m[1]).toString(16).padStart(2,'0');\n const g = Number(m[2]).toString(16).padStart(2,'0');\n const b = Number(m[3]).toString(16).padStart(2,'0');\n return `#${r}${g}${b}`;\n }\n \n export function unwrap(node: HTMLElement) {\n const p = node.parentNode; if (!p) return;\n while (node.firstChild) p.insertBefore(node.firstChild, node);\n p.removeChild(node);\n }\n \n export function surroundInline(range: Range, tag: string, attrs?: Record<string,string>) {\n const wrap = document.createElement(tag);\n if (attrs) Object.entries(attrs).forEach(([k,v]) => wrap.setAttribute(k, v));\n try { range.surroundContents(wrap); }\n catch {\n const frag = range.extractContents();\n wrap.appendChild(frag);\n range.insertNode(wrap);\n }\n }\n \n export function toggleInlineTag(root: HTMLElement, tag: 'strong'|'em'|'u'|'span', attrs?: Record<string,string>) {\n const sel = document.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n \n if (range.collapsed) {\n const elm = document.createElement(tag);\n if (attrs) Object.entries(attrs).forEach(([k,v]) => elm.setAttribute(k,v));\n elm.appendChild(document.createTextNode('\\u200b'));\n range.insertNode(elm);\n const r = document.createRange();\n r.setStart(elm.firstChild!, 1);\n r.collapse(true);\n sel.removeAllRanges(); sel.addRange(r);\n return;\n }\n \n let n: Node | null = range.startContainer;\n let target: HTMLElement | null = null;\n while (n && n !== root) {\n if (n instanceof HTMLElement && n.tagName.toLowerCase() === tag) { target = n; break; }\n n = n.parentNode;\n }\n if (target) unwrap(target); else surroundInline(range, tag, attrs);\n }\n \n export function setBlockTag(root: HTMLElement, tag: 'p'|'h1'|'h2'|'h3') {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n const block = closestBlock(range.startContainer, root); if (!block) return;\n if (block.tagName.toLowerCase() === tag) return;\n const nb = document.createElement(tag);\n while (block.firstChild) nb.appendChild(block.firstChild);\n block.replaceWith(nb);\n const r = document.createRange(); r.selectNodeContents(nb); r.collapse(true);\n sel.removeAllRanges(); sel.addRange(r);\n }\n \n export function setAlignment(root: HTMLElement, align: 'left'|'center'|'right'|'justify') {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n const block = closestBlock(range.startContainer, root); if (!block) return;\n block.style.textAlign = align === 'justify' ? 'justify' : align;\n }\n \n export function setFontFamily(root: HTMLElement, family: string) {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n if (range.collapsed) {\n const span = document.createElement('span');\n span.style.fontFamily = family;\n span.appendChild(document.createTextNode('\\u200b'));\n range.insertNode(span);\n const r = document.createRange(); r.setStart(span.firstChild!, 1); r.collapse(true);\n sel.removeAllRanges(); sel.addRange(r);\n return;\n }\n surroundInline(range, 'span', { style: `font-family:${family}` });\n }\n \n export function setForeColor(root: HTMLElement, color: string) {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n if (range.collapsed) {\n const span = document.createElement('span');\n span.style.color = color;\n span.appendChild(document.createTextNode('\\u200b'));\n range.insertNode(span);\n const r = document.createRange(); r.setStart(span.firstChild!, 1); r.collapse(true);\n sel.removeAllRanges(); sel.addRange(r);\n return;\n }\n surroundInline(range, 'span', { style: `color:${color}` });\n }\n \n export function toggleList(root: HTMLElement, kind: 'ul'|'ol') {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n const block = closestBlock(range.startContainer, root); if (!block) return;\n \n let li = block.closest('li');\n if (li) {\n const list = li.closest('ul,ol') as HTMLElement | null;\n if (!list) return;\n if (list.tagName.toLowerCase() === kind) {\n const parent = list.parentElement!;\n const frag = document.createDocumentFragment();\n for (const child of Array.from(list.children)) {\n if (child.tagName.toLowerCase() === 'li') {\n const p = document.createElement('p');\n while (child.firstChild) p.appendChild(child.firstChild);\n frag.appendChild(p);\n }\n }\n parent.replaceChild(frag, list);\n } else {\n const newList = document.createElement(kind);\n while (list.firstChild) newList.appendChild(list.firstChild);\n list.replaceWith(newList);\n }\n return;\n }\n \n const list = document.createElement(kind);\n const item = document.createElement('li'); list.appendChild(item);\n while (block.firstChild) item.appendChild(block.firstChild);\n block.replaceWith(list);\n }\n \n export function insertOrEditLink(root: HTMLElement, href?: string) {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n \n let n: Node | null = range.startContainer;\n let a: HTMLAnchorElement | null = null;\n while (n && n !== root) { if (n instanceof HTMLAnchorElement) { a = n; break; } n = n.parentNode; }\n \n const url = href ?? (typeof window !== 'undefined' ? window.prompt('Enter URL', a?.href || 'https://') || '' : '');\n if (!url) return;\n \n if (a) { a.href = url; return; }\n \n if (range.collapsed) {\n const link = document.createElement('a'); link.href = url; link.textContent = url; range.insertNode(link);\n const r = document.createRange(); r.setStartAfter(link); r.collapse(true);\n sel.removeAllRanges(); sel.addRange(r);\n return;\n }\n \n const link = document.createElement('a'); link.href = url;\n try { range.surroundContents(link); }\n catch { const frag = range.extractContents(); link.appendChild(frag); range.insertNode(link); }\n }\n "],"names":["closestBlock","node","root","_n","HTMLElement","display","getComputedStyle","tagName","match","parentNode","nearestElement","n","rgbToHex","rgb","m","concat","Number","toString","padStart","surroundInline","range","tag","attrs","wrap","document","createElement","Object","entries","forEach","_ref","_ref2","_slicedToArray","k","v","setAttribute","surroundContents","_unused","frag","extractContents","appendChild","insertNode","toggleInlineTag","sel","getSelection","rangeCount","getRangeAt","collapsed","elm","_ref3","_ref4","createTextNode","r","createRange","setStart","firstChild","collapse","removeAllRanges","addRange","startContainer","target","toLowerCase","p","insertBefore","removeChild","unwrap","setBlockTag","block","nb","replaceWith","selectNodeContents","setAlignment","align","style","textAlign","setFontFamily","family","span","fontFamily","setForeColor","color","insertOrEditLink","href","a","HTMLAnchorElement","url","window","prompt","link","textContent","setStartAfter","_unused2"],"mappings":"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"}
1
+ {"version":3,"file":"utils.cjs.js","sources":["../../../src/nile-rich-text-editor/utils.ts"],"sourcesContent":["// src/nile-rich-text-editor/utils.ts\nexport function closestBlock(node: Node | null, root: HTMLElement): HTMLElement | null {\n while (node && node !== root) {\n if (node instanceof HTMLElement) {\n const display = getComputedStyle(node).display;\n if (node.tagName.match(/^(P|DIV|H1|H2|H3|H4|H5|H6|LI)$/) || display === 'block' || display === 'list-item') {\n return node;\n }\n }\n node = node?.parentNode || null;\n }\n return root;\n }\n \n export function nearestElement(n: Node | null): HTMLElement | null {\n while (n && !(n instanceof HTMLElement)) n = n.parentNode as Node | null;\n return n as HTMLElement | null;\n }\n \n export function rgbToHex(rgb: string): string {\n const m = rgb.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/i);\n if (!m) return '#000000';\n const r = Number(m[1]).toString(16).padStart(2,'0');\n const g = Number(m[2]).toString(16).padStart(2,'0');\n const b = Number(m[3]).toString(16).padStart(2,'0');\n return `#${r}${g}${b}`;\n }\n \n export function unwrap(node: HTMLElement) {\n const p = node.parentNode; if (!p) return;\n while (node.firstChild) p.insertBefore(node.firstChild, node);\n p.removeChild(node);\n }\n \n export function surroundInline(range: Range, tag: string, attrs?: Record<string,string>) {\n const wrap = document.createElement(tag);\n if (attrs) Object.entries(attrs).forEach(([k,v]) => wrap.setAttribute(k, v));\n try { range.surroundContents(wrap); }\n catch {\n const frag = range.extractContents();\n wrap.appendChild(frag);\n range.insertNode(wrap);\n }\n }\n \n export function toggleInlineTag(root: HTMLElement, tag: 'strong'|'em'|'u'|'span', attrs?: Record<string,string>) {\n const sel = document.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n \n if (range.collapsed) {\n const elm = document.createElement(tag);\n if (attrs) Object.entries(attrs).forEach(([k,v]) => elm.setAttribute(k,v));\n elm.appendChild(document.createTextNode('\\u200b'));\n range.insertNode(elm);\n const r = document.createRange();\n r.setStart(elm.firstChild!, 1);\n r.collapse(true);\n sel.removeAllRanges(); sel.addRange(r);\n return;\n }\n \n let n: Node | null = range.startContainer;\n let target: HTMLElement | null = null;\n while (n && n !== root) {\n if (n instanceof HTMLElement && n.tagName.toLowerCase() === tag) { target = n; break; }\n n = n.parentNode;\n }\n if (target) unwrap(target); else surroundInline(range, tag, attrs);\n }\n \n export function setBlockTag(root: HTMLElement, tag: 'p'|'h1'|'h2'|'h3') {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n const block = closestBlock(range.startContainer, root); if (!block) return;\n if (block.tagName.toLowerCase() === tag) return;\n const nb = document.createElement(tag);\n while (block.firstChild) nb.appendChild(block.firstChild);\n block.replaceWith(nb);\n const r = document.createRange(); r.selectNodeContents(nb); r.collapse(true);\n sel.removeAllRanges(); sel.addRange(r);\n }\n \n export function setAlignment(root: HTMLElement, align: 'left'|'center'|'right'|'justify') {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n const block = closestBlock(range.startContainer, root); if (!block) return;\n block.style.textAlign = align === 'justify' ? 'justify' : align;\n }\n \n export function setFontFamily(root: HTMLElement, family: string) {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n if (range.collapsed) {\n const span = document.createElement('span');\n span.style.fontFamily = family;\n span.appendChild(document.createTextNode('\\u200b'));\n range.insertNode(span);\n const r = document.createRange(); r.setStart(span.firstChild!, 1); r.collapse(true);\n sel.removeAllRanges(); sel.addRange(r);\n return;\n }\n surroundInline(range, 'span', { style: `font-family:${family}` });\n }\n\nexport function setBackColor(rootEl: HTMLElement, color: string) {\n const sel = window.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n if (!rootEl.contains(range.commonAncestorContainer) || range.collapsed) return;\n\n const span = document.createElement('span');\n span.style.backgroundColor = color;\n span.appendChild(range.extractContents());\n range.insertNode(span);\n const after = document.createRange();\n after.setStartAfter(span);\n after.collapse(true);\n sel.removeAllRanges();\n sel.addRange(after);\n}\n\n \n export function setForeColor(root: HTMLElement, color: string) {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n if (range.collapsed) {\n const span = document.createElement('span');\n span.style.color = color;\n span.appendChild(document.createTextNode('\\u200b'));\n range.insertNode(span);\n const r = document.createRange(); r.setStart(span.firstChild!, 1); r.collapse(true);\n sel.removeAllRanges(); sel.addRange(r);\n return;\n }\n surroundInline(range, 'span', { style: `color:${color}` });\n }\n \n export function toggleList(root: HTMLElement, kind: 'ul'|'ol') {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n const block = closestBlock(range.startContainer, root); if (!block) return;\n \n let li = block.closest('li');\n if (li) {\n const list = li.closest('ul,ol') as HTMLElement | null;\n if (!list) return;\n if (list.tagName.toLowerCase() === kind) {\n const parent = list.parentElement!;\n const frag = document.createDocumentFragment();\n for (const child of Array.from(list.children)) {\n if (child.tagName.toLowerCase() === 'li') {\n const p = document.createElement('p');\n while (child.firstChild) p.appendChild(child.firstChild);\n frag.appendChild(p);\n }\n }\n parent.replaceChild(frag, list);\n } else {\n const newList = document.createElement(kind);\n while (list.firstChild) newList.appendChild(list.firstChild);\n list.replaceWith(newList);\n }\n return;\n }\n \n const list = document.createElement(kind);\n const item = document.createElement('li'); list.appendChild(item);\n while (block.firstChild) item.appendChild(block.firstChild);\n block.replaceWith(list);\n }\n \n export function insertOrEditLink(root: HTMLElement, href?: string) {\n const sel = document.getSelection(); if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n \n let n: Node | null = range.startContainer;\n let a: HTMLAnchorElement | null = null;\n while (n && n !== root) { if (n instanceof HTMLAnchorElement) { a = n; break; } n = n.parentNode; }\n \n const url = href ?? (typeof window !== 'undefined' ? window.prompt('Enter URL', a?.href || 'https://') || '' : '');\n if (!url) return;\n \n if (a) { a.href = url; return; }\n \n if (range.collapsed) {\n const link = document.createElement('a'); link.href = url; link.textContent = url; range.insertNode(link);\n const r = document.createRange(); r.setStartAfter(link); r.collapse(true);\n sel.removeAllRanges(); sel.addRange(r);\n return;\n }\n \n const link = document.createElement('a'); link.href = url;\n try { range.surroundContents(link); }\n catch { const frag = range.extractContents(); link.appendChild(frag); range.insertNode(link); }\n }\n "],"names":["closestBlock","node","root","_n","HTMLElement","display","getComputedStyle","tagName","match","parentNode","nearestElement","n","rgbToHex","rgb","m","concat","Number","toString","padStart","surroundInline","range","tag","attrs","wrap","document","createElement","Object","entries","forEach","_ref","_ref2","_slicedToArray","k","v","setAttribute","surroundContents","_unused","frag","extractContents","appendChild","insertNode","toggleInlineTag","sel","getSelection","rangeCount","getRangeAt","collapsed","elm","_ref3","_ref4","createTextNode","r","createRange","setStart","firstChild","collapse","removeAllRanges","addRange","startContainer","target","toLowerCase","p","insertBefore","removeChild","unwrap","setBlockTag","block","nb","replaceWith","selectNodeContents","setAlignment","align","style","textAlign","setFontFamily","family","span","fontFamily","setBackColor","rootEl","color","window","contains","commonAncestorContainer","backgroundColor","after","setStartAfter","setForeColor","insertOrEditLink","href","a","HTMLAnchorElement","url","prompt","link","textContent","_unused2"],"mappings":"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"}
@@ -1 +1 @@
1
- function n(n,t){for(;n&&n!==t;){if(n instanceof HTMLElement){const t=getComputedStyle(n).display;if(n.tagName.match(/^(P|DIV|H1|H2|H3|H4|H5|H6|LI)$/)||"block"===t||"list-item"===t)return n}n=n?.parentNode||null}return t}function t(n){for(;n&&!(n instanceof HTMLElement);)n=n.parentNode;return n}function o(n){const t=n.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/i);if(!t)return"#000000";return`#${Number(t[1]).toString(16).padStart(2,"0")}${Number(t[2]).toString(16).padStart(2,"0")}${Number(t[3]).toString(16).padStart(2,"0")}`}function c(n,t,o){const c=document.createElement(t);o&&Object.entries(o).forEach((([n,t])=>c.setAttribute(n,t)));try{n.surroundContents(c)}catch{const t=n.extractContents();c.appendChild(t),n.insertNode(c)}}function e(n,t,o){const e=document.getSelection();if(!e||0===e.rangeCount)return;const u=e.getRangeAt(0);if(u.collapsed){const n=document.createElement(t);o&&Object.entries(o).forEach((([t,o])=>n.setAttribute(t,o))),n.appendChild(document.createTextNode("​")),u.insertNode(n);const c=document.createRange();return c.setStart(n.firstChild,1),c.collapse(!0),e.removeAllRanges(),void e.addRange(c)}let r=u.startContainer,s=null;for(;r&&r!==n;){if(r instanceof HTMLElement&&r.tagName.toLowerCase()===t){s=r;break}r=r.parentNode}s?function(n){const t=n.parentNode;if(t){for(;n.firstChild;)t.insertBefore(n.firstChild,n);t.removeChild(n)}}(s):c(u,t,o)}function u(t,o){const c=document.getSelection();if(!c||0===c.rangeCount)return;const e=n(c.getRangeAt(0).startContainer,t);if(!e)return;if(e.tagName.toLowerCase()===o)return;const u=document.createElement(o);for(;e.firstChild;)u.appendChild(e.firstChild);e.replaceWith(u);const r=document.createRange();r.selectNodeContents(u),r.collapse(!0),c.removeAllRanges(),c.addRange(r)}function r(t,o){const c=document.getSelection();if(!c||0===c.rangeCount)return;const e=n(c.getRangeAt(0).startContainer,t);e&&(e.style.textAlign="justify"===o?"justify":o)}function s(n,t){const o=document.getSelection();if(!o||0===o.rangeCount)return;const e=o.getRangeAt(0);if(e.collapsed){const n=document.createElement("span");n.style.fontFamily=t,n.appendChild(document.createTextNode("​")),e.insertNode(n);const c=document.createRange();return c.setStart(n.firstChild,1),c.collapse(!0),o.removeAllRanges(),void o.addRange(c)}c(e,"span",{style:`font-family:${t}`})}function i(n,t){const o=document.getSelection();if(!o||0===o.rangeCount)return;const e=o.getRangeAt(0);if(e.collapsed){const n=document.createElement("span");n.style.color=t,n.appendChild(document.createTextNode("​")),e.insertNode(n);const c=document.createRange();return c.setStart(n.firstChild,1),c.collapse(!0),o.removeAllRanges(),void o.addRange(c)}c(e,"span",{style:`color:${t}`})}function f(n,t){const o=document.getSelection();if(!o||0===o.rangeCount)return;const c=o.getRangeAt(0);let e=c.startContainer,u=null;for(;e&&e!==n;){if(e instanceof HTMLAnchorElement){u=e;break}e=e.parentNode}const r=t??("undefined"!=typeof window&&window.prompt("Enter URL",u?.href||"https://")||"");if(!r)return;if(u)return void(u.href=r);if(c.collapsed){const n=document.createElement("a");n.href=r,n.textContent=r,c.insertNode(n);const t=document.createRange();return t.setStartAfter(n),t.collapse(!0),o.removeAllRanges(),void o.addRange(t)}const s=document.createElement("a");s.href=r;try{c.surroundContents(s)}catch{const n=c.extractContents();s.appendChild(n),c.insertNode(s)}}export{u as a,s as b,i as c,n as d,f as i,t as n,o as r,r as s,e as t};
1
+ function n(n,t){for(;n&&n!==t;){if(n instanceof HTMLElement){const t=getComputedStyle(n).display;if(n.tagName.match(/^(P|DIV|H1|H2|H3|H4|H5|H6|LI)$/)||"block"===t||"list-item"===t)return n}n=n?.parentNode||null}return t}function t(n){for(;n&&!(n instanceof HTMLElement);)n=n.parentNode;return n}function o(n){const t=n.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/i);if(!t)return"#000000";return`#${Number(t[1]).toString(16).padStart(2,"0")}${Number(t[2]).toString(16).padStart(2,"0")}${Number(t[3]).toString(16).padStart(2,"0")}`}function c(n,t,o){const c=document.createElement(t);o&&Object.entries(o).forEach((([n,t])=>c.setAttribute(n,t)));try{n.surroundContents(c)}catch{const t=n.extractContents();c.appendChild(t),n.insertNode(c)}}function e(n,t,o){const e=document.getSelection();if(!e||0===e.rangeCount)return;const u=e.getRangeAt(0);if(u.collapsed){const n=document.createElement(t);o&&Object.entries(o).forEach((([t,o])=>n.setAttribute(t,o))),n.appendChild(document.createTextNode("​")),u.insertNode(n);const c=document.createRange();return c.setStart(n.firstChild,1),c.collapse(!0),e.removeAllRanges(),void e.addRange(c)}let s=u.startContainer,r=null;for(;s&&s!==n;){if(s instanceof HTMLElement&&s.tagName.toLowerCase()===t){r=s;break}s=s.parentNode}r?function(n){const t=n.parentNode;if(t){for(;n.firstChild;)t.insertBefore(n.firstChild,n);t.removeChild(n)}}(r):c(u,t,o)}function u(t,o){const c=document.getSelection();if(!c||0===c.rangeCount)return;const e=n(c.getRangeAt(0).startContainer,t);if(!e)return;if(e.tagName.toLowerCase()===o)return;const u=document.createElement(o);for(;e.firstChild;)u.appendChild(e.firstChild);e.replaceWith(u);const s=document.createRange();s.selectNodeContents(u),s.collapse(!0),c.removeAllRanges(),c.addRange(s)}function s(t,o){const c=document.getSelection();if(!c||0===c.rangeCount)return;const e=n(c.getRangeAt(0).startContainer,t);e&&(e.style.textAlign="justify"===o?"justify":o)}function r(n,t){const o=document.getSelection();if(!o||0===o.rangeCount)return;const e=o.getRangeAt(0);if(e.collapsed){const n=document.createElement("span");n.style.fontFamily=t,n.appendChild(document.createTextNode("​")),e.insertNode(n);const c=document.createRange();return c.setStart(n.firstChild,1),c.collapse(!0),o.removeAllRanges(),void o.addRange(c)}c(e,"span",{style:`font-family:${t}`})}function i(n,t){const o=window.getSelection();if(!o||0===o.rangeCount)return;const c=o.getRangeAt(0);if(!n.contains(c.commonAncestorContainer)||c.collapsed)return;const e=document.createElement("span");e.style.backgroundColor=t,e.appendChild(c.extractContents()),c.insertNode(e);const u=document.createRange();u.setStartAfter(e),u.collapse(!0),o.removeAllRanges(),o.addRange(u)}function f(n,t){const o=document.getSelection();if(!o||0===o.rangeCount)return;const e=o.getRangeAt(0);if(e.collapsed){const n=document.createElement("span");n.style.color=t,n.appendChild(document.createTextNode("​")),e.insertNode(n);const c=document.createRange();return c.setStart(n.firstChild,1),c.collapse(!0),o.removeAllRanges(),void o.addRange(c)}c(e,"span",{style:`color:${t}`})}function d(n,t){const o=document.getSelection();if(!o||0===o.rangeCount)return;const c=o.getRangeAt(0);let e=c.startContainer,u=null;for(;e&&e!==n;){if(e instanceof HTMLAnchorElement){u=e;break}e=e.parentNode}const s=t??("undefined"!=typeof window&&window.prompt("Enter URL",u?.href||"https://")||"");if(!s)return;if(u)return void(u.href=s);if(c.collapsed){const n=document.createElement("a");n.href=s,n.textContent=s,c.insertNode(n);const t=document.createRange();return t.setStartAfter(n),t.collapse(!0),o.removeAllRanges(),void o.addRange(t)}const r=document.createElement("a");r.href=s;try{c.surroundContents(r)}catch{const n=c.extractContents();r.appendChild(n),c.insertNode(r)}}export{u as a,r as b,i as c,f as d,n as e,d as i,t as n,o as r,s,e as t};