@aquera/nile-elements 1.5.9 → 1.6.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.
- package/README.md +3 -0
- package/dist/index.js +84 -45
- package/dist/nile-rich-text-editor/nile-rich-text-editor.cjs.js +1 -1
- package/dist/nile-rich-text-editor/nile-rich-text-editor.cjs.js.map +1 -1
- package/dist/nile-rich-text-editor/nile-rich-text-editor.css.cjs.js +1 -1
- package/dist/nile-rich-text-editor/nile-rich-text-editor.css.cjs.js.map +1 -1
- package/dist/nile-rich-text-editor/nile-rich-text-editor.css.esm.js +24 -0
- package/dist/nile-rich-text-editor/nile-rich-text-editor.esm.js +1 -1
- package/dist/nile-rich-text-editor/nile-rte-link.cjs.js +1 -1
- package/dist/nile-rich-text-editor/nile-rte-link.cjs.js.map +1 -1
- package/dist/nile-rich-text-editor/nile-rte-link.esm.js +59 -44
- package/dist/nile-rich-text-editor/utils/inline-utils.cjs.js +1 -1
- package/dist/nile-rich-text-editor/utils/inline-utils.cjs.js.map +1 -1
- package/dist/nile-rich-text-editor/utils/inline-utils.esm.js +1 -1
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.css.js +24 -0
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.css.js.map +1 -1
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.d.ts +6 -0
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.js +62 -24
- package/dist/src/nile-rich-text-editor/nile-rich-text-editor.js.map +1 -1
- package/dist/src/nile-rich-text-editor/nile-rte-link.d.ts +12 -0
- package/dist/src/nile-rich-text-editor/nile-rte-link.js +239 -130
- package/dist/src/nile-rich-text-editor/nile-rte-link.js.map +1 -1
- package/dist/src/nile-rich-text-editor/nile-rte-link.test.d.ts +1 -0
- package/dist/src/nile-rich-text-editor/nile-rte-link.test.js +469 -0
- package/dist/src/nile-rich-text-editor/nile-rte-link.test.js.map +1 -0
- package/dist/src/nile-rich-text-editor/utils/inline-utils.js +13 -4
- package/dist/src/nile-rich-text-editor/utils/inline-utils.js.map +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/version.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/nile-rich-text-editor/nile-rich-text-editor.css.ts +24 -0
- package/src/nile-rich-text-editor/nile-rich-text-editor.ts +66 -26
- package/src/nile-rich-text-editor/nile-rte-link.test.ts +682 -0
- package/src/nile-rich-text-editor/nile-rte-link.ts +195 -100
- package/src/nile-rich-text-editor/utils/inline-utils.ts +11 -4
- package/vscode-html-custom-data.json +16 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nile-rte-link.cjs.js","sources":["../../../src/nile-rich-text-editor/nile-rte-link.ts"],"sourcesContent":["import { LitElement, html } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\n@customElement('nile-rte-link')\nexport class NileRteLink extends LitElement {\n protected createRenderRoot() {\n return this;\n }\n\n @property({ attribute: false }) editorEl!: HTMLElement;\n @property({ type: Boolean }) newTab = false;\n @property({ type: String }) placeholder = 'Type or paste link here';\n @property({ type: String }) label = 'Link';\n\n\n @state() private linkValue = '';\n @state() private hasActiveLink = false;\n @state() private popoverStyle = '';\n\n private selectionRange: Range | null = null;\n private activeAnchor: HTMLAnchorElement | null = null;\n\n private ignoreBlur = false;\n private isApplying = false;\n\n \n\n connectedCallback() {\n super.connectedCallback();\n\n this.injectCss(`\n nile-popover.rte-link-popover::part(popover) {\n min-width: 316px;\n background: white;\n border: 1px solid var(--nile-colors-neutral-400,var(--ng-componentcolors-utility-gray-400));\n border-radius: 4px;\n padding: 0;\n gap: 0;\n }\n\n .link-popup {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 8px;\n }\n\n .link-input {\n flex: 1;\n padding: 6px 8px;\n font-size: 14px;\n width: 276px;\n height: 14px;\n padding: 12px;\n border: 1px solid var(--nile-colors-primary-600, var(--ng-colors-border-brand));\n border-radius: 4px;\n }\n nile-button.rte-link-button::part(base) {\n border: none;\n height: 32px; \n width: 32px;\n }\n nile-button.rte-edit-button::part(base) {\n border: none;\n height: 38px; \n width: 38px;\n }\n `);\n }\n\n private injectCss(cssText: string) {\n if (this.querySelector('style[data-rte-link-style]')) return;\n const style = document.createElement('style');\n style.setAttribute('data-rte-link-style', 'true');\n style.textContent = cssText;\n this.insertBefore(style, this.firstChild);\n }\n\n \n\n private normalizeUrl(url: string) {\n if (/^(https?:|mailto:|tel:)/i.test(url)) return url;\n return `https://${url}`;\n }\n\n private displayUrl(url: string): string {\n return url.replace(/^https?:\\/\\//i, '');\n }\n\n private getSelectionRect(): DOMRect | null {\n if (!this.selectionRange) return null;\n\n let rect = this.selectionRange.getBoundingClientRect();\n if (rect.width === 0 && rect.height === 0) {\n const span = document.createElement('span');\n span.textContent = '\\u200b';\n const tempRange = this.selectionRange.cloneRange();\n tempRange.insertNode(span);\n rect = span.getBoundingClientRect();\n span.remove(); \n }\n return rect;\n }\n\n private positionPopover() {\n const rect = this.getSelectionRect();\n if (!rect) return;\n\n this.popoverStyle = `\n position: fixed;\n top: ${rect.bottom + 8}px;\n left: ${rect.left + rect.width / 2}px;\n transform: translateX(-50%);\n z-index: 1000;\n `;\n }\n\n private onScroll = () => {\n this.closePopover();\n };\n\n private openPopover() {\n requestAnimationFrame(() => {\n const pop = this.querySelector('nile-popover') as any;\n pop && (pop.isShow = true);\n window.addEventListener('scroll', this.onScroll, true);\n });\n }\n\n private closePopover() {\n const pop = this.querySelector('nile-popover') as any;\n pop && (pop.isShow = false);\n\n window.removeEventListener('scroll', this.onScroll, true);\n\n this.linkValue = '';\n this.selectionRange = null;\n this.activeAnchor = null;\n this.hasActiveLink = false;\n this.popoverStyle = '';\n }\n\n private unwrapLink(a: HTMLAnchorElement) {\n while (a.firstChild) a.parentNode?.insertBefore(a.firstChild, a);\n a.remove();\n }\n\n \n\n private onOpen() {\n const sel = document.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n\n this.selectionRange = sel.getRangeAt(0).cloneRange();\n this.activeAnchor = null;\n this.hasActiveLink = false;\n\n let n: Node | null = this.selectionRange.startContainer;\n while (n && n !== this.editorEl) {\n if (n instanceof HTMLAnchorElement) {\n this.activeAnchor = n;\n this.hasActiveLink = true;\n break;\n }\n n = n.parentNode;\n }\n\n this.linkValue = this.activeAnchor\n ? this.displayUrl(this.activeAnchor.href)\n : '';\n\n this.positionPopover();\n this.openPopover();\n\n requestAnimationFrame(() => {\n this.querySelector<HTMLInputElement>('.link-input')?.focus();\n });\n }\n\n \n\n private onInputKeydown(e: KeyboardEvent) {\n if (e.key !== 'Escape' && e.key !== 'Enter') return;\n \n e.preventDefault();\n e.stopPropagation();\n \n if (e.key === 'Escape') {\n this.closePopover();\n return;\n }\n \n this.isApplying = true;\n try {\n this.applyLink();\n } finally {\n this.isApplying = false;\n }\n }\n \n\n private onInputBlur() {\n if (this.ignoreBlur || this.isApplying) return;\n this.closePopover();\n }\n\n \n\n private applyLink() {\n if (!(this.selectionRange instanceof Range)) return;\n\n let url = this.linkValue.trim();\n if (!url) return;\n \n let parsed: URL;\n try {\n parsed = new URL(url, window.location.href);\n if (!['http:', 'https:', 'mailto:', 'tel:'].includes(parsed.protocol)) return;\n } catch {\n return;\n }\n \n url = parsed.href;\n \n\n url = this.normalizeUrl(url);\n\n this.editorEl.focus();\n\n const sel = document.getSelection();\n if (!sel) return;\n\n sel.removeAllRanges();\n sel.addRange(this.selectionRange);\n\n if (this.activeAnchor) {\n this.activeAnchor.href = url;\n\n if (this.newTab) {\n this.activeAnchor.target = '_blank';\n this.activeAnchor.rel = 'noopener noreferrer';\n } else {\n this.activeAnchor.removeAttribute('target');\n this.activeAnchor.removeAttribute('rel');\n }\n \n } else {\n const link = document.createElement('a');\n link.href = url;\n \n if (this.newTab) {\n link.target = '_blank';\n link.rel = 'noopener noreferrer';\n } else {\n link.removeAttribute('target');\n link.removeAttribute('rel');\n } \n\n if (this.selectionRange.collapsed) {\n link.textContent = url;\n this.selectionRange.insertNode(link);\n } else {\n try {\n this.selectionRange.surroundContents(link);\n } catch {\n const frag = this.selectionRange.extractContents();\n link.appendChild(frag);\n this.selectionRange.insertNode(link);\n }\n }\n }\n\n this.emit(url);\n this.closePopover();\n }\n\n private onRemove() {\n if (!this.activeAnchor) return;\n this.unwrapLink(this.activeAnchor);\n this.emit('');\n this.closePopover();\n }\n\n private emit(href: string) {\n this.dispatchEvent(\n new CustomEvent('nile-link-changed', {\n detail: { href },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n render() {\n return html`\n <nile-lite-tooltip content=${this.label}> \n <nile-button\n variant=\"tertiary\"\n size=\"small\"\n @mousedown=${(e: Event) => e.preventDefault()}\n @click=${() => this.onOpen()}\n class=\"rte-link-button\"\n >\n <nile-icon name=\"link_2\"></nile-icon>\n </nile-button>\n </nile-lite-tooltip>\n\n <nile-popover\n class=\"rte-link-popover\"\n .arrow=${false}\n style=${this.popoverStyle}\n @mousedown=${() => (this.ignoreBlur = true)}\n @mouseup=${() => (this.ignoreBlur = false)}\n >\n <div class=\"link-popup\">\n <input\n class=\"link-input\"\n placeholder=${this.placeholder}\n .value=${this.linkValue}\n @input=${(e: Event) =>\n (this.linkValue = (e.target as HTMLInputElement).value)}\n @keydown=${this.onInputKeydown}\n @blur=${this.onInputBlur}\n />\n\n ${this.hasActiveLink\n ? html`\n <nile-button\n size=\"small\"\n variant=\"tertiary\"\n class=\"rte-edit-button\"\n @click=${() => this.applyLink()}\n >\n <nile-icon name=\"pencil\"></nile-icon>\n </nile-button>\n\n <nile-button\n size=\"small\"\n variant=\"tertiary\"\n class=\"rte-edit-button\"\n @click=${() => this.onRemove()}\n >\n <nile-icon name=\"unlink\"></nile-icon>\n </nile-button>\n `\n : null}\n </div>\n </nile-popover>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-rte-link': NileRteLink;\n }\n}\n"],"names":["NileRteLink","r","this","newTab","placeholder","label","linkValue","hasActiveLink","popoverStyle","selectionRange","activeAnchor","ignoreBlur","isApplying","onScroll","closePopover","_this","_inherits","_i","_createClass","key","value","createRenderRoot","connectedCallback","super","injectCss","cssText","querySelector","style","document","createElement","setAttribute","textContent","insertBefore","firstChild","normalizeUrl","url","test","displayUrl","replace","getSelectionRect","rect","getBoundingClientRect","width","height","span","cloneRange","insertNode","remove","positionPopover","bottom","left","openPopover","requestAnimationFrame","pop","isShow","window","addEventListener","removeEventListener","unwrapLink","a","parentNode","onOpen","sel","getSelection","rangeCount","getRangeAt","n","startContainer","editorEl","HTMLAnchorElement","href","_this3$querySelector","focus","onInputKeydown","e","preventDefault","stopPropagation","applyLink","onInputBlur","Range","parsed","trim","URL","location","includes","protocol","_unused","removeAllRanges","addRange","target","rel","removeAttribute","link","collapsed","surroundContents","_unused2","frag","extractContents","appendChild","emit","onRemove","dispatchEvent","CustomEvent","detail","bubbles","composed","render","html","_templateObject","_taggedTemplateLiteral","_templateObject2","LitElement","__decorate","property","attribute","prototype","type","Boolean","String","state","customElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nile-rte-link.cjs.js","sources":["../../../src/nile-rich-text-editor/nile-rte-link.ts"],"sourcesContent":["import { LitElement, html } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\n\n@customElement('nile-rte-link')\nexport class NileRteLink extends LitElement {\n protected createRenderRoot() {\n return this;\n }\n\n @property({ attribute: false }) editorEl!: HTMLElement;\n @property({ type: Boolean, reflect: true, attribute: true }) newTab = false;\n @property({ type: Boolean, reflect: true, attribute: true }) disabled = false;\n @property({ type: Boolean, reflect: true, attribute: true }) showTextSupport = false;\n @property({ type: String, reflect: true, attribute: true }) placeholder = 'Type or paste link here';\n @property({ type: String, reflect: true, attribute: true }) textPlaceholder = 'Display text';\n @property({ type: String, reflect: true, attribute: true }) label = 'Link';\n\n @state() private linkValue = '';\n @state() private textValue = '';\n @state() private hasActiveLink = false;\n @state() private popoverStyle = '';\n\n private selectionRange: Range | null = null;\n private activeAnchor: HTMLAnchorElement | null = null;\n\n private ignoreBlur = false;\n private isApplying = false;\n\n \n\n connectedCallback() {\n super.connectedCallback();\n\n this.injectCss(`\n nile-popover.rte-link-popover::part(popover) {\n min-width: 340px;\n max-width: 420px;\n background: white;\n border: 1px solid var(--nile-colors-neutral-400, var(--ng-componentcolors-utility-gray-400));\n border-radius: 8px;\n padding: 0;\n gap: 0;\n overflow: hidden;\n height: auto;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);\n }\n\n .link-popup-wrap {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n }\n\n .link-popup-wrap nile-input {\n width: 100%;\n }\n\n .link-popup-wrap .link-input-row {\n width: 100%;\n }\n\n .link-popup-wrap .link-actions-row {\n display: flex;\n align-items: flex-end;\n gap: 4px;\n width: 100%;\n }\n\n .link-popup-wrap .link-actions-row nile-input {\n flex: 1;\n min-width: 0;\n }\n\n \n nile-button.rte-link-button::part(base) {\n border: none;\n height: 32px;\n width: 32px;\n }\n nile-button.rte-edit-button::part(base) {\n border: none;\n height: 32px;\n width: 32px;\n flex-shrink: 0;\n }\n `);\n }\n\n private injectCss(cssText: string) {\n if (this.querySelector('style[data-rte-link-style]')) return;\n const style = document.createElement('style');\n style.setAttribute('data-rte-link-style', 'true');\n style.textContent = cssText;\n this.insertBefore(style, this.firstChild);\n }\n\n \n\n private normalizeUrl(url: string) {\n if (/^(https?:|mailto:|tel:)/i.test(url)) return url;\n return `https://${url}`;\n }\n\n private displayUrl(url: string): string {\n return url;\n }\n\n private getSelectionRect(): DOMRect | null {\n if (!this.selectionRange) return null;\n\n let rect = this.selectionRange.getBoundingClientRect();\n if (rect.width === 0 && rect.height === 0) {\n const span = document.createElement('span');\n span.textContent = '\\u200b';\n const tempRange = this.selectionRange.cloneRange();\n tempRange.insertNode(span);\n rect = span.getBoundingClientRect();\n span.remove(); \n }\n return rect;\n }\n\n private positionPopover() {\n const rect = this.getSelectionRect();\n if (!rect) return;\n\n this.popoverStyle = `\n position: fixed;\n top: ${rect.bottom + 8}px;\n left: ${rect.left + rect.width / 2}px;\n transform: translateX(-50%);\n z-index: 1000;\n `;\n }\n\n private onScroll = () => {\n this.closePopover();\n };\n\n private openPopover() {\n requestAnimationFrame(() => {\n const pop = this.querySelector('nile-popover') as any;\n pop && (pop.isShow = true);\n window.addEventListener('scroll', this.onScroll, true);\n });\n }\n\n private closePopover() {\n const pop = this.querySelector('nile-popover') as any;\n pop && (pop.isShow = false);\n\n window.removeEventListener('scroll', this.onScroll, true);\n\n this.linkValue = '';\n this.textValue = '';\n this.selectionRange = null;\n this.activeAnchor = null;\n this.hasActiveLink = false;\n this.popoverStyle = '';\n }\n\n private unwrapLink(a: HTMLAnchorElement) {\n while (a.firstChild) a.parentNode?.insertBefore(a.firstChild, a);\n a.remove();\n }\n\n \n\n private onOpen = () => {\n if (this.disabled) return;\n\n const sel = document.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n if (!this.editorEl.contains(sel.getRangeAt(0).commonAncestorContainer)) return;\n\n this.selectionRange = sel.getRangeAt(0).cloneRange();\n this.activeAnchor = null;\n this.hasActiveLink = false;\n\n let n: Node | null = this.selectionRange.startContainer;\n while (n && n !== this.editorEl) {\n if (n instanceof HTMLAnchorElement) {\n this.activeAnchor = n;\n this.hasActiveLink = true;\n break;\n }\n n = n.parentNode;\n }\n\n this.linkValue = this.activeAnchor\n ? this.displayUrl(this.activeAnchor.href)\n : '';\n\n if (this.showTextSupport) {\n if (this.activeAnchor) {\n this.textValue = this.activeAnchor.textContent || '';\n } else if (!this.selectionRange.collapsed) {\n this.textValue = this.selectionRange.toString();\n } else {\n this.textValue = '';\n }\n }\n\n this.positionPopover();\n this.openPopover();\n\n requestAnimationFrame(() => {\n const inputs = this.querySelectorAll('nile-input');\n const target = inputs.length > 1 ? inputs[1] : inputs[0];\n (target as any)?.focus();\n });\n }\n\n \n\n private onInputKeydown = (e: KeyboardEvent) => {\n if (e.key !== 'Escape' && e.key !== 'Enter') return;\n e.preventDefault();\n e.stopPropagation();\n if (e.key === 'Escape') {\n this.closePopover();\n return;\n }\n this.isApplying = true;\n try {\n this.applyLink();\n } finally {\n this.isApplying = false;\n }\n };\n private onInputBlur = () => {\n if (this.ignoreBlur || this.isApplying) return;\n requestAnimationFrame(() => {\n if (this.ignoreBlur || this.isApplying) return;\n const pop = this.querySelector('nile-popover');\n if (pop?.matches(':focus-within')) return;\n this.closePopover();\n });\n };\n\n private onLinkInput = (e: CustomEvent) => {\n this.linkValue = e.detail.value;\n };\n\n private onTextInput = (e: CustomEvent) => {\n this.textValue = e.detail.value;\n };\n\n private onPopoverMousedown = () => {\n this.ignoreBlur = true;\n };\n\n private onPopoverMouseup = () => {\n this.ignoreBlur = false;\n };\n\n private onToolbarButtonMousedown = (e: Event) => {\n e.preventDefault();\n };\n\n private onActionMousedown = (e: Event) => {\n e.preventDefault();\n this.ignoreBlur = true;\n };\n\n private onApplyClick = () => {\n this.isApplying = true;\n this.applyLink();\n this.isApplying = false;\n this.ignoreBlur = false;\n };\n\n private onUnlinkClick = () => {\n this.isApplying = true;\n this.onRemove();\n this.isApplying = false;\n this.ignoreBlur = false;\n };\n\n \n\n private applyLink() {\n if (!(this.selectionRange instanceof Range)) return;\n\n let url = this.linkValue.trim();\n if (!url) return;\n\n if (/^javascript:/i.test(url)) return;\n\n if (!/^(https?:\\/\\/|mailto:|tel:|\\/)/i.test(url)) {\n url = `https://${url}`;\n }\n\n this.editorEl.focus();\n\n const sel = document.getSelection();\n if (!sel) return;\n\n sel.removeAllRanges();\n sel.addRange(this.selectionRange);\n\n const displayText = this.showTextSupport && this.textValue.trim()\n ? this.textValue.trim()\n : '';\n\n if (this.activeAnchor) {\n this.activeAnchor.href = url;\n\n if (displayText) {\n this.activeAnchor.textContent = displayText;\n }\n\n if (this.newTab) {\n this.activeAnchor.target = '_blank';\n this.activeAnchor.rel = 'noopener noreferrer';\n } else {\n this.activeAnchor.removeAttribute('target');\n this.activeAnchor.removeAttribute('rel');\n }\n \n } else {\n const link = document.createElement('a');\n link.href = url;\n \n if (this.newTab) {\n link.target = '_blank';\n link.rel = 'noopener noreferrer';\n } else {\n link.removeAttribute('target');\n link.removeAttribute('rel');\n } \n\n if (displayText) {\n this.selectionRange.deleteContents();\n link.textContent = displayText;\n this.selectionRange.insertNode(link);\n } else if (this.selectionRange.collapsed) {\n link.textContent = url;\n this.selectionRange.insertNode(link);\n } else {\n try {\n this.selectionRange.surroundContents(link);\n } catch {\n const frag = this.selectionRange.extractContents();\n link.appendChild(frag);\n this.selectionRange.insertNode(link);\n }\n }\n }\n\n this.emit(url);\n this.closePopover();\n }\n\n private onRemove() {\n if (!this.activeAnchor) return;\n this.unwrapLink(this.activeAnchor);\n this.emit('');\n this.closePopover();\n }\n\n private emit(href: string) {\n this.dispatchEvent(\n new CustomEvent('nile-link-changed', {\n detail: { href },\n bubbles: true,\n composed: true,\n })\n );\n }\n\n render() {\n const iconColor = this.disabled\n ? 'var(--nile-colors-neutral-500, var(--ng-colors-fg-disabled-subtle))'\n : 'var(--nile-colors-dark-900, var(--ng-colors-text-primary-900))';\n\n return html`\n <nile-lite-tooltip content=${this.label}>\n <nile-button\n variant=\"tertiary\"\n size=\"small\"\n ?disabled=${this.disabled}\n @mousedown=${this.onToolbarButtonMousedown}\n @click=${this.onOpen}\n class=\"rte-link-button\"\n >\n <nile-icon name=\"link_2\" color=${iconColor}></nile-icon>\n </nile-button>\n </nile-lite-tooltip>\n\n <nile-popover\n class=\"rte-link-popover\"\n .arrow=${false}\n style=${this.popoverStyle}\n @mousedown=${this.onPopoverMousedown}\n @mouseup=${this.onPopoverMouseup}\n >\n <div class=\"link-popup-wrap\">\n ${this.showTextSupport ? html`\n <div class=\"link-input-row\">\n <nile-input\n label=\"Text\"\n placeholder=${this.textPlaceholder}\n .value=${this.textValue}\n @nile-input=${this.onTextInput}\n @keydown=${this.onInputKeydown}\n @nile-blur=${this.onInputBlur}\n ></nile-input>\n </div>\n ` : null}\n <div class=\"link-actions-row\">\n <nile-input\n label=${this.showTextSupport ? 'URL' : ''}\n placeholder=${this.placeholder}\n .value=${this.linkValue}\n @nile-input=${this.onLinkInput}\n @keydown=${this.onInputKeydown}\n @nile-blur=${this.onInputBlur}\n ></nile-input>\n ${this.hasActiveLink ? html`\n <nile-button\n size=\"small\"\n variant=\"tertiary\"\n class=\"rte-edit-button\"\n @mousedown=${this.onActionMousedown}\n @click=${this.onApplyClick}\n >\n <nile-icon name=\"pencil\"></nile-icon>\n </nile-button>\n <nile-button\n size=\"small\"\n variant=\"tertiary\"\n class=\"rte-edit-button\"\n @mousedown=${this.onActionMousedown}\n @click=${this.onUnlinkClick}\n >\n <nile-icon name=\"unlink\"></nile-icon>\n </nile-button>\n ` : null}\n </div>\n </div>\n </nile-popover>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-rte-link': NileRteLink;\n }\n}\n"],"names":["NileRteLink","_i","o","constructor","this","newTab","disabled","showTextSupport","placeholder","textPlaceholder","label","linkValue","textValue","hasActiveLink","popoverStyle","selectionRange","activeAnchor","ignoreBlur","isApplying","onScroll","closePopover","onOpen","sel","document","getSelection","rangeCount","editorEl","contains","getRangeAt","commonAncestorContainer","cloneRange","n","startContainer","HTMLAnchorElement","parentNode","displayUrl","href","textContent","collapsed","toString","positionPopover","openPopover","requestAnimationFrame","inputs","querySelectorAll","target","length","focus","onInputKeydown","e","key","preventDefault","stopPropagation","applyLink","onInputBlur","pop","querySelector","matches","onLinkInput","detail","value","onTextInput","onPopoverMousedown","onPopoverMouseup","onToolbarButtonMousedown","onActionMousedown","onApplyClick","onUnlinkClick","onRemove","_this","_inherits","_createClass","createRenderRoot","connectedCallback","super","injectCss","cssText","style","createElement","setAttribute","insertBefore","firstChild","normalizeUrl","url","test","getSelectionRect","rect","getBoundingClientRect","width","height","span","insertNode","remove","concat","bottom","left","isShow","window","addEventListener","removeEventListener","unwrapLink","a","Range","trim","removeAllRanges","addRange","displayText","rel","removeAttribute","link","deleteContents","surroundContents","_unused","frag","extractContents","appendChild","emit","dispatchEvent","CustomEvent","bubbles","composed","render","iconColor","html","_templateObject","_taggedTemplateLiteral","_templateObject2","_templateObject3","LitElement","__decorate","property","attribute","prototype","type","Boolean","reflect","String","state","customElement"],"mappings":"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"}
|
|
@@ -1,52 +1,67 @@
|
|
|
1
|
-
import{__decorate as t}from"tslib";import{LitElement as i,html as n}from"lit";import{property as e,state as s,customElement as
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
import{__decorate as t}from"tslib";import{LitElement as i,html as n}from"lit";import{property as e,state as s,customElement as l}from"lit/decorators.js";let o=class extends i{constructor(){super(...arguments),this.newTab=!1,this.disabled=!1,this.showTextSupport=!1,this.placeholder="Type or paste link here",this.textPlaceholder="Display text",this.label="Link",this.linkValue="",this.textValue="",this.hasActiveLink=!1,this.popoverStyle="",this.selectionRange=null,this.activeAnchor=null,this.ignoreBlur=!1,this.isApplying=!1,this.onScroll=()=>{this.closePopover()},this.onOpen=()=>{if(this.disabled)return;const t=document.getSelection();if(!t||0===t.rangeCount)return;if(!this.editorEl.contains(t.getRangeAt(0).commonAncestorContainer))return;this.selectionRange=t.getRangeAt(0).cloneRange(),this.activeAnchor=null,this.hasActiveLink=!1;let i=this.selectionRange.startContainer;for(;i&&i!==this.editorEl;){if(i instanceof HTMLAnchorElement){this.activeAnchor=i,this.hasActiveLink=!0;break}i=i.parentNode}this.linkValue=this.activeAnchor?this.displayUrl(this.activeAnchor.href):"",this.showTextSupport&&(this.activeAnchor?this.textValue=this.activeAnchor.textContent||"":this.selectionRange.collapsed?this.textValue="":this.textValue=this.selectionRange.toString()),this.positionPopover(),this.openPopover(),requestAnimationFrame((()=>{const t=this.querySelectorAll("nile-input"),i=t.length>1?t[1]:t[0];i?.focus()}))},this.onInputKeydown=t=>{if("Escape"===t.key||"Enter"===t.key)if(t.preventDefault(),t.stopPropagation(),"Escape"!==t.key){this.isApplying=!0;try{this.applyLink()}finally{this.isApplying=!1}}else this.closePopover()},this.onInputBlur=()=>{this.ignoreBlur||this.isApplying||requestAnimationFrame((()=>{if(this.ignoreBlur||this.isApplying)return;const t=this.querySelector("nile-popover");t?.matches(":focus-within")||this.closePopover()}))},this.onLinkInput=t=>{this.linkValue=t.detail.value},this.onTextInput=t=>{this.textValue=t.detail.value},this.onPopoverMousedown=()=>{this.ignoreBlur=!0},this.onPopoverMouseup=()=>{this.ignoreBlur=!1},this.onToolbarButtonMousedown=t=>{t.preventDefault()},this.onActionMousedown=t=>{t.preventDefault(),this.ignoreBlur=!0},this.onApplyClick=()=>{this.isApplying=!0,this.applyLink(),this.isApplying=!1,this.ignoreBlur=!1},this.onUnlinkClick=()=>{this.isApplying=!0,this.onRemove(),this.isApplying=!1,this.ignoreBlur=!1}}createRenderRoot(){return this}connectedCallback(){super.connectedCallback(),this.injectCss("\n nile-popover.rte-link-popover::part(popover) {\n min-width: 340px;\n max-width: 420px;\n background: white;\n border: 1px solid var(--nile-colors-neutral-400, var(--ng-componentcolors-utility-gray-400));\n border-radius: 8px;\n padding: 0;\n gap: 0;\n overflow: hidden;\n height: auto;\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);\n }\n\n .link-popup-wrap {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n }\n\n .link-popup-wrap nile-input {\n width: 100%;\n }\n\n .link-popup-wrap .link-input-row {\n width: 100%;\n }\n\n .link-popup-wrap .link-actions-row {\n display: flex;\n align-items: flex-end;\n gap: 4px;\n width: 100%;\n }\n\n .link-popup-wrap .link-actions-row nile-input {\n flex: 1;\n min-width: 0;\n }\n\n \n nile-button.rte-link-button::part(base) {\n border: none;\n height: 32px;\n width: 32px;\n }\n nile-button.rte-edit-button::part(base) {\n border: none;\n height: 32px;\n width: 32px;\n flex-shrink: 0;\n }\n ")}injectCss(t){if(this.querySelector("style[data-rte-link-style]"))return;const i=document.createElement("style");i.setAttribute("data-rte-link-style","true"),i.textContent=t,this.insertBefore(i,this.firstChild)}normalizeUrl(t){return/^(https?:|mailto:|tel:)/i.test(t)?t:`https://${t}`}displayUrl(t){return t}getSelectionRect(){if(!this.selectionRange)return null;let t=this.selectionRange.getBoundingClientRect();if(0===t.width&&0===t.height){const i=document.createElement("span");i.textContent="";this.selectionRange.cloneRange().insertNode(i),t=i.getBoundingClientRect(),i.remove()}return t}positionPopover(){const t=this.getSelectionRect();t&&(this.popoverStyle=`\n position: fixed;\n top: ${t.bottom+8}px;\n left: ${t.left+t.width/2}px;\n transform: translateX(-50%);\n z-index: 1000;\n `)}openPopover(){requestAnimationFrame((()=>{const t=this.querySelector("nile-popover");t&&(t.isShow=!0),window.addEventListener("scroll",this.onScroll,!0)}))}closePopover(){const t=this.querySelector("nile-popover");t&&(t.isShow=!1),window.removeEventListener("scroll",this.onScroll,!0),this.linkValue="",this.textValue="",this.selectionRange=null,this.activeAnchor=null,this.hasActiveLink=!1,this.popoverStyle=""}unwrapLink(t){for(;t.firstChild;)t.parentNode?.insertBefore(t.firstChild,t);t.remove()}applyLink(){if(!(this.selectionRange instanceof Range))return;let t=this.linkValue.trim();if(!t)return;if(/^javascript:/i.test(t))return;/^(https?:\/\/|mailto:|tel:|\/)/i.test(t)||(t=`https://${t}`),this.editorEl.focus();const i=document.getSelection();if(!i)return;i.removeAllRanges(),i.addRange(this.selectionRange);const n=this.showTextSupport&&this.textValue.trim()?this.textValue.trim():"";if(this.activeAnchor)this.activeAnchor.href=t,n&&(this.activeAnchor.textContent=n),this.newTab?(this.activeAnchor.target="_blank",this.activeAnchor.rel="noopener noreferrer"):(this.activeAnchor.removeAttribute("target"),this.activeAnchor.removeAttribute("rel"));else{const i=document.createElement("a");if(i.href=t,this.newTab?(i.target="_blank",i.rel="noopener noreferrer"):(i.removeAttribute("target"),i.removeAttribute("rel")),n)this.selectionRange.deleteContents(),i.textContent=n,this.selectionRange.insertNode(i);else if(this.selectionRange.collapsed)i.textContent=t,this.selectionRange.insertNode(i);else try{this.selectionRange.surroundContents(i)}catch{const t=this.selectionRange.extractContents();i.appendChild(t),this.selectionRange.insertNode(i)}}this.emit(t),this.closePopover()}onRemove(){this.activeAnchor&&(this.unwrapLink(this.activeAnchor),this.emit(""),this.closePopover())}emit(t){this.dispatchEvent(new CustomEvent("nile-link-changed",{detail:{href:t},bubbles:!0,composed:!0}))}render(){const t=this.disabled?"var(--nile-colors-neutral-500, var(--ng-colors-fg-disabled-subtle))":"var(--nile-colors-dark-900, var(--ng-colors-text-primary-900))";return n`
|
|
2
|
+
<nile-lite-tooltip content=${this.label}>
|
|
3
|
+
<nile-button
|
|
4
|
+
variant="tertiary"
|
|
5
|
+
size="small"
|
|
6
|
+
?disabled=${this.disabled}
|
|
7
|
+
@mousedown=${this.onToolbarButtonMousedown}
|
|
8
|
+
@click=${this.onOpen}
|
|
9
|
+
class="rte-link-button"
|
|
10
|
+
>
|
|
11
|
+
<nile-icon name="link_2" color=${t}></nile-icon>
|
|
12
|
+
</nile-button>
|
|
13
|
+
</nile-lite-tooltip>
|
|
13
14
|
|
|
14
15
|
<nile-popover
|
|
15
16
|
class="rte-link-popover"
|
|
16
17
|
.arrow=${!1}
|
|
17
18
|
style=${this.popoverStyle}
|
|
18
|
-
@mousedown=${
|
|
19
|
-
@mouseup=${
|
|
19
|
+
@mousedown=${this.onPopoverMousedown}
|
|
20
|
+
@mouseup=${this.onPopoverMouseup}
|
|
20
21
|
>
|
|
21
|
-
<div class="link-popup">
|
|
22
|
-
|
|
23
|
-
class="link-input"
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
22
|
+
<div class="link-popup-wrap">
|
|
23
|
+
${this.showTextSupport?n`
|
|
24
|
+
<div class="link-input-row">
|
|
25
|
+
<nile-input
|
|
26
|
+
label="Text"
|
|
27
|
+
placeholder=${this.textPlaceholder}
|
|
28
|
+
.value=${this.textValue}
|
|
29
|
+
@nile-input=${this.onTextInput}
|
|
30
|
+
@keydown=${this.onInputKeydown}
|
|
31
|
+
@nile-blur=${this.onInputBlur}
|
|
32
|
+
></nile-input>
|
|
33
|
+
</div>
|
|
34
|
+
`:null}
|
|
35
|
+
<div class="link-actions-row">
|
|
36
|
+
<nile-input
|
|
37
|
+
label=${this.showTextSupport?"URL":""}
|
|
38
|
+
placeholder=${this.placeholder}
|
|
39
|
+
.value=${this.linkValue}
|
|
40
|
+
@nile-input=${this.onLinkInput}
|
|
41
|
+
@keydown=${this.onInputKeydown}
|
|
42
|
+
@nile-blur=${this.onInputBlur}
|
|
43
|
+
></nile-input>
|
|
44
|
+
${this.hasActiveLink?n`
|
|
45
|
+
<nile-button
|
|
46
|
+
size="small"
|
|
47
|
+
variant="tertiary"
|
|
48
|
+
class="rte-edit-button"
|
|
49
|
+
@mousedown=${this.onActionMousedown}
|
|
50
|
+
@click=${this.onApplyClick}
|
|
51
|
+
>
|
|
52
|
+
<nile-icon name="pencil"></nile-icon>
|
|
53
|
+
</nile-button>
|
|
54
|
+
<nile-button
|
|
55
|
+
size="small"
|
|
56
|
+
variant="tertiary"
|
|
57
|
+
class="rte-edit-button"
|
|
58
|
+
@mousedown=${this.onActionMousedown}
|
|
59
|
+
@click=${this.onUnlinkClick}
|
|
60
|
+
>
|
|
61
|
+
<nile-icon name="unlink"></nile-icon>
|
|
62
|
+
</nile-button>
|
|
63
|
+
`:null}
|
|
64
|
+
</div>
|
|
50
65
|
</div>
|
|
51
66
|
</nile-popover>
|
|
52
|
-
`}};t([e({attribute:!1})],
|
|
67
|
+
`}};t([e({attribute:!1})],o.prototype,"editorEl",void 0),t([e({type:Boolean,reflect:!0,attribute:!0})],o.prototype,"newTab",void 0),t([e({type:Boolean,reflect:!0,attribute:!0})],o.prototype,"disabled",void 0),t([e({type:Boolean,reflect:!0,attribute:!0})],o.prototype,"showTextSupport",void 0),t([e({type:String,reflect:!0,attribute:!0})],o.prototype,"placeholder",void 0),t([e({type:String,reflect:!0,attribute:!0})],o.prototype,"textPlaceholder",void 0),t([e({type:String,reflect:!0,attribute:!0})],o.prototype,"label",void 0),t([s()],o.prototype,"linkValue",void 0),t([s()],o.prototype,"textValue",void 0),t([s()],o.prototype,"hasActiveLink",void 0),t([s()],o.prototype,"popoverStyle",void 0),o=t([l("nile-rte-link")],o);
|
|
@@ -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,e){var _strong$em$u$span$t;var o=window.getSelection();if(!o||0===o.rangeCount)return;var c=o.getRangeAt(0),r=(_strong$em$u$span$t={strong:["strong","b"],em:["em","i"],u:["u"],span:["span"]}[t])!==null&&_strong$em$u$span$t!==void 0?_strong$em$u$span$t:[t],i=function i(n){return r.includes(n.tagName.toLowerCase());};function s(n){var t=n.parentNode;if(t){for(;n.firstChild;)t.insertBefore(n.firstChild,n);t.removeChild(n);}}function f(n){n.querySelectorAll(r.join(",")).forEach(function(n){var _n$textContent;if(!((_n$textContent=n.textContent)!==null&&_n$textContent!==void 0&&_n$textContent.trim()))return void n.remove();Array.from(n.querySelectorAll(r.join(","))).forEach(function(t){if(t!==n){for(;t.firstChild;)n.insertBefore(t.firstChild,t);t.remove();}});});}function u(n){Array.from(n.querySelectorAll(r.join(","))).forEach(function(n){var t=n.nextSibling;if(t instanceof HTMLElement&&i(t)){for(;t.firstChild;)n.appendChild(t.firstChild);t.remove();}});}if(c.collapsed){var _r=!1,_d=c.startContainer;for(;_d&&_d!==n;){if(_d instanceof HTMLElement&&i(_d)){_r=!0;break;}_d=_d.parentNode;}if(_r&&_d instanceof HTMLElement)s(_d);else{var _n=document.createElement(t);e&&Object.entries(e).forEach(function(_ref){var _ref2=_slicedToArray(_ref,2),t=_ref2[0],e=_ref2[1];return _n.setAttribute(t,e);}),_n.appendChild(document.createTextNode("")),c.insertNode(_n),c.setStart(_n.firstChild,1),c.collapse(!0),o.removeAllRanges(),o.addRange(c);}return f(n),void u(n);}c.startContainer.nodeType===Node.TEXT_NODE&&c.startContainer.splitText(c.startOffset),c.endContainer.nodeType===Node.TEXT_NODE&&c.endContainer.splitText(c.endOffset);var d=document.createTreeWalker(c.commonAncestorContainer,NodeFilter.SHOW_TEXT,{acceptNode:function acceptNode(n){var _n$nodeValue;if(!((_n$nodeValue=n.nodeValue)!==null&&_n$nodeValue!==void 0&&_n$nodeValue.trim()))return NodeFilter.FILTER_REJECT;var t=document.createRange();t.selectNodeContents(n);return c.compareBoundaryPoints(Range.END_TO_START,t)<0&&c.compareBoundaryPoints(Range.START_TO_END,t)>0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT;}}),m=[];var a;for(;a=d.nextNode();)m.push(a);if(m.length>0&&m.every(function(t){var e=t;for(;e&&e!==n;){if(e instanceof HTMLElement&&i(e))return!0;e=e.parentNode;}return!1;})){var _e$parentElement;var _e=m[0],_o=m[m.length-1],_c=(_e$parentElement=_e.parentElement)===null||_e$parentElement===void 0?void 0:_e$parentElement.closest(t);if(_c&&_c.contains(_o)){var _n2=_c.parentNode;if(_n2){var _r2=document.createRange();_r2.setStartBefore(_c),_r2.setEndBefore(_e);var _i=_r2.cloneContents(),_s=document.createRange();_s.setStartAfter(_o),_s.setEndAfter(_c);var _f=_s.cloneContents(),_u=document.createRange();_u.setStartBefore(_e),_u.setEndAfter(_o);var _d2=_u.extractContents(),_m=document.createDocumentFragment();if(_i.childNodes.length){var _n3=document.createElement(t);for(;_i.firstChild;)_n3.appendChild(_i.firstChild);_m.appendChild(_n3);}for(;_d2.firstChild;)_m.appendChild(_d2.firstChild);if(_f.childNodes.length){var _n4=document.createElement(t);for(;_f.firstChild;)_n4.appendChild(_f.firstChild);_m.appendChild(_n4);}_n2.insertBefore(_m,_c),_n2.removeChild(_c);}}else m.forEach(function(t){var e=t;for(;e&&e!==n;){if(e instanceof HTMLElement&&i(e)){s(e);break;}e=e.parentNode;}});}else m.forEach(function(n){var _n$parentElement,_n$parentNode;var o=(_n$parentElement=n.parentElement)===null||_n$parentElement===void 0?void 0:_n$parentElement.closest("
|
|
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,e){var _strong$em$u$span$t;var o=window.getSelection();if(!o||0===o.rangeCount)return;var c=o.getRangeAt(0),r=(_strong$em$u$span$t={strong:["strong","b"],em:["em","i"],u:["u"],span:["span"]}[t])!==null&&_strong$em$u$span$t!==void 0?_strong$em$u$span$t:[t],i=function i(n){return r.includes(n.tagName.toLowerCase());};function s(n){var t=n.parentNode;if(t){for(;n.firstChild;)t.insertBefore(n.firstChild,n);t.removeChild(n);}}function f(n){n.querySelectorAll(r.join(",")).forEach(function(n){var _n$textContent;if(!((_n$textContent=n.textContent)!==null&&_n$textContent!==void 0&&_n$textContent.trim()))return void n.remove();Array.from(n.querySelectorAll(r.join(","))).forEach(function(t){if(t!==n){for(;t.firstChild;)n.insertBefore(t.firstChild,t);t.remove();}});});}function u(n){Array.from(n.querySelectorAll(r.join(","))).forEach(function(n){var t=n.nextSibling;if(t instanceof HTMLElement&&i(t)){for(;t.firstChild;)n.appendChild(t.firstChild);t.remove();}});}if(c.collapsed){var _r=!1,_d=c.startContainer;for(;_d&&_d!==n;){if(_d instanceof HTMLElement&&i(_d)){_r=!0;break;}_d=_d.parentNode;}if(_r&&_d instanceof HTMLElement)s(_d);else{var _n=document.createElement(t);e&&Object.entries(e).forEach(function(_ref){var _ref2=_slicedToArray(_ref,2),t=_ref2[0],e=_ref2[1];return _n.setAttribute(t,e);}),_n.appendChild(document.createTextNode("")),c.insertNode(_n),c.setStart(_n.firstChild,1),c.collapse(!0),o.removeAllRanges(),o.addRange(c);}return f(n),void u(n);}c.startContainer.nodeType===Node.TEXT_NODE&&c.startContainer.splitText(c.startOffset),c.endContainer.nodeType===Node.TEXT_NODE&&c.endContainer.splitText(c.endOffset);var d=document.createTreeWalker(c.commonAncestorContainer,NodeFilter.SHOW_TEXT,{acceptNode:function acceptNode(n){var _n$nodeValue;if(!((_n$nodeValue=n.nodeValue)!==null&&_n$nodeValue!==void 0&&_n$nodeValue.trim()))return NodeFilter.FILTER_REJECT;var t=document.createRange();t.selectNodeContents(n);return c.compareBoundaryPoints(Range.END_TO_START,t)<0&&c.compareBoundaryPoints(Range.START_TO_END,t)>0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT;}}),m=[];var a;for(;a=d.nextNode();)m.push(a);if(m.length>0&&m.every(function(t){var e=t;for(;e&&e!==n;){if(e instanceof HTMLElement&&i(e))return!0;e=e.parentNode;}return!1;})){var _e$parentElement;var _e=m[0],_o=m[m.length-1],_c=(_e$parentElement=_e.parentElement)===null||_e$parentElement===void 0?void 0:_e$parentElement.closest(t);if(_c&&_c.contains(_o)){var _n2=_c.parentNode;if(_n2){var _r2=document.createRange();_r2.setStartBefore(_c),_r2.setEndBefore(_e);var _i=_r2.cloneContents(),_s=document.createRange();_s.setStartAfter(_o),_s.setEndAfter(_c);var _f=_s.cloneContents(),_u=document.createRange();_u.setStartBefore(_e),_u.setEndAfter(_o);var _d2=_u.extractContents(),_m=document.createDocumentFragment();if(_i.childNodes.length){var _n3=document.createElement(t);for(;_i.firstChild;)_n3.appendChild(_i.firstChild);_m.appendChild(_n3);}for(;_d2.firstChild;)_m.appendChild(_d2.firstChild);if(_f.childNodes.length){var _n4=document.createElement(t);for(;_f.firstChild;)_n4.appendChild(_f.firstChild);_m.appendChild(_n4);}_n2.insertBefore(_m,_c),_n2.removeChild(_c);}}else m.forEach(function(t){var e=t;for(;e&&e!==n;){if(e instanceof HTMLElement&&i(e)){s(e);break;}e=e.parentNode;}});}else m.forEach(function(n){var _n$parentElement,_n$parentElement2,_n$parentNode;var o=(_n$parentElement=n.parentElement)===null||_n$parentElement===void 0?void 0:_n$parentElement.closest(".mention, nile-mention");if(o)return;var c=(_n$parentElement2=n.parentElement)===null||_n$parentElement2===void 0?void 0:_n$parentElement2.closest("a");if(c&&"span"===t)return;var r=document.createElement(t);e&&Object.entries(e).forEach(function(_ref3){var _ref4=_slicedToArray(_ref3,2),n=_ref4[0],t=_ref4[1];return r.setAttribute(n,t);}),c?(c.insertBefore(r,n),r.appendChild(n)):((_n$parentNode=n.parentNode)!==null&&_n$parentNode!==void 0&&_n$parentNode.insertBefore(r,n),r.appendChild(n));});f(n),u(n),o.removeAllRanges(),o.addRange(c);}function t(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 e(n,t){var e=document.getSelection();if(!e||0===e.rangeCount)return;var o=e.getRangeAt(0);if(o.collapsed){var _n5=document.createElement("span");_n5.style.fontFamily=t,_n5.appendChild(document.createTextNode("")),o.insertNode(_n5);var c=document.createRange();return c.setStart(_n5.firstChild,1),c.collapse(!0),e.removeAllRanges(),void e.addRange(c);}!function(n,t,e){var o=document.createElement(t);e&&Object.entries(e).forEach(function(_ref5){var _ref6=_slicedToArray(_ref5,2),n=_ref6[0],t=_ref6[1];return o.setAttribute(n,t);});try{n.surroundContents(o);}catch(_unused){var _t=n.extractContents();o.appendChild(_t),n.insertNode(o);}}(o,"span",{style:"font-family:".concat(t)});}_export({r:t,s:e,t:n});return{setters:[],execute:function execute(){}};});
|
|
2
2
|
//# sourceMappingURL=inline-utils.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inline-utils.cjs.js","sources":["../../../../src/nile-rich-text-editor/utils/inline-utils.ts"],"sourcesContent":["export function toggleInlineTag(\n root: HTMLElement,\n tag: 'strong' | 'em' | 'u' | 'span',\n attrs?: Record<string, string>\n) {\n const sel = window.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n const aliases: Record<string, string[]> = {\n strong: ['strong', 'b'],\n em: ['em', 'i'],\n u: ['u'],\n span: ['span'],\n };\n const candidates = aliases[tag] ?? [tag];\n const isMatch = (el: HTMLElement) =>\n candidates.includes(el.tagName.toLowerCase());\n\n function unwrap(el: HTMLElement) {\n const p = el.parentNode;\n if (!p) return;\n while (el.firstChild) p.insertBefore(el.firstChild, el);\n p.removeChild(el);\n }\n\n function removeEmptyAndNested(root: HTMLElement) {\n root.querySelectorAll(candidates.join(',')).forEach(el => {\n if (!el.textContent?.trim()) {\n el.remove();\n return;\n }\n const nested = Array.from(el.querySelectorAll(candidates.join(',')));\n nested.forEach(n => {\n if (n === el) return;\n while (n.firstChild) el.insertBefore(n.firstChild, n);\n n.remove();\n });\n });\n }\n\n function mergeAdjacent(root: HTMLElement) {\n const list = Array.from(root.querySelectorAll(candidates.join(',')));\n list.forEach(el => {\n const next = el.nextSibling;\n if (next instanceof HTMLElement && isMatch(next)) {\n while (next.firstChild) el.appendChild(next.firstChild);\n next.remove();\n }\n });\n }\n if (range.collapsed) {\n let inside = false;\n let n: Node | null = range.startContainer;\n while (n && n !== root) {\n if (n instanceof HTMLElement && isMatch(n)) {\n inside = true;\n break;\n }\n n = n.parentNode;\n }\n\n if (inside && n instanceof HTMLElement) {\n unwrap(n);\n } else {\n const elm = document.createElement(tag);\n if (attrs)\n Object.entries(attrs).forEach(([k, v]) => elm.setAttribute(k, v));\n elm.appendChild(document.createTextNode('\\u200b'));\n range.insertNode(elm);\n range.setStart(elm.firstChild!, 1);\n range.collapse(true);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n\n removeEmptyAndNested(root);\n mergeAdjacent(root);\n return;\n }\n if (range.startContainer.nodeType === Node.TEXT_NODE)\n (range.startContainer as Text).splitText(range.startOffset);\n if (range.endContainer.nodeType === Node.TEXT_NODE)\n (range.endContainer as Text).splitText(range.endOffset);\n const walker = document.createTreeWalker(\n range.commonAncestorContainer,\n NodeFilter.SHOW_TEXT,\n {\n acceptNode: n => {\n if (!n.nodeValue?.trim()) return NodeFilter.FILTER_REJECT;\n const r = document.createRange();\n r.selectNodeContents(n);\n const inter =\n range.compareBoundaryPoints(Range.END_TO_START, r) < 0 &&\n range.compareBoundaryPoints(Range.START_TO_END, r) > 0;\n return inter ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n },\n }\n );\n\n const textNodes: Text[] = [];\n let tn: Node | null;\n while ((tn = walker.nextNode())) textNodes.push(tn as Text);\n\n const allInside =\n textNodes.length > 0 &&\n textNodes.every(txt => {\n let n: Node | null = txt;\n while (n && n !== root) {\n if (n instanceof HTMLElement && isMatch(n)) return true;\n n = n.parentNode;\n }\n return false;\n });\n\n if (allInside) {\n const first = textNodes[0];\n const last = textNodes[textNodes.length - 1];\n const common = first.parentElement?.closest(tag) as HTMLElement | null;\n if (common && common.contains(last)) {\n const parent = common.parentNode;\n if (parent) {\n const beforeRange = document.createRange();\n beforeRange.setStartBefore(common);\n beforeRange.setEndBefore(first);\n const before = beforeRange.cloneContents();\n\n const afterRange = document.createRange();\n afterRange.setStartAfter(last);\n afterRange.setEndAfter(common);\n const after = afterRange.cloneContents();\n\n const middleRange = document.createRange();\n middleRange.setStartBefore(first);\n middleRange.setEndAfter(last);\n const middle = middleRange.extractContents();\n\n const frag = document.createDocumentFragment();\n if (before.childNodes.length) {\n const b = document.createElement(tag);\n while (before.firstChild) b.appendChild(before.firstChild);\n frag.appendChild(b);\n }\n while (middle.firstChild) frag.appendChild(middle.firstChild);\n if (after.childNodes.length) {\n const a = document.createElement(tag);\n while (after.firstChild) a.appendChild(after.firstChild);\n frag.appendChild(a);\n }\n parent.insertBefore(frag, common);\n parent.removeChild(common);\n }\n } else {\n textNodes.forEach(txt => {\n let n: Node | null = txt;\n while (n && n !== root) {\n if (n instanceof HTMLElement && isMatch(n)) {\n unwrap(n);\n break;\n }\n n = n.parentNode;\n }\n });\n }\n } else {\n textNodes.forEach(txt => {\n const skip = txt.parentElement?.closest('a, .mention, nile-mention');\n if (skip) return;\n const wrapper = document.createElement(tag);\n if (attrs)\n Object.entries(attrs).forEach(([k, v]) => wrapper.setAttribute(k, v));\n txt.parentNode?.insertBefore(wrapper, txt);\n wrapper.appendChild(txt);\n });\n }\n\n removeEmptyAndNested(root);\n mergeAdjacent(root);\n\n sel.removeAllRanges();\n sel.addRange(range);\n}\n\nexport function surroundInline(\n range: Range,\n tag: string,\n attrs?: Record<string, string>\n) {\n const wrap = document.createElement(tag);\n if (attrs) Object.entries(attrs).forEach(([k, v]) => wrap.setAttribute(k, v));\n try {\n range.surroundContents(wrap);\n } catch {\n const frag = range.extractContents();\n wrap.appendChild(frag);\n range.insertNode(wrap);\n }\n}\n\nexport function unwrap(node: HTMLElement) {\n const p = node.parentNode;\n if (!p) return;\n while (node.firstChild) p.insertBefore(node.firstChild, node);\n p.removeChild(node);\n}\n\nfunction unwrapAllMatching(\n node: Node,\n root: HTMLElement,\n matcher: (el: HTMLElement) => boolean\n) {\n let n: Node | null = node.parentNode;\n while (n && n !== root) {\n if (n instanceof HTMLElement && matcher(n)) {\n unwrap(n);\n\n n = node.parentNode;\n continue;\n }\n n = n.parentNode;\n }\n}\n\nexport function rgbToHex(rgb: string): string {\n const m = rgb.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/i);\n if (!m) return '#000000';\n const r = Number(m[1]).toString(16).padStart(2, '0');\n const g = Number(m[2]).toString(16).padStart(2, '0');\n const b = Number(m[3]).toString(16).padStart(2, '0');\n return `#${r}${g}${b}`;\n}\n\nexport function setFontFamily(root: HTMLElement, family: string) {\n const sel = document.getSelection();\n 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();\n r.setStart(span.firstChild!, 1);\n r.collapse(true);\n sel.removeAllRanges();\n sel.addRange(r);\n return;\n }\n surroundInline(range, 'span', { style: `font-family:${family}` });\n}\n"],"names":["toggleInlineTag","root","tag","attrs","_strong$em$u$span$t","sel","window","getSelection","rangeCount","range","getRangeAt","candidates","strong","em","u","span","isMatch","el","includes","tagName","toLowerCase","unwrap","p","parentNode","firstChild","insertBefore","removeChild","removeEmptyAndNested","querySelectorAll","join","forEach","textContent","trim","remove","Array","from","n","mergeAdjacent","next","nextSibling","HTMLElement","appendChild","collapsed","inside","startContainer","elm","document","createElement","Object","entries","_ref","_ref2","_slicedToArray","k","v","setAttribute","createTextNode","insertNode","setStart","collapse","removeAllRanges","addRange","nodeType","Node","TEXT_NODE","splitText","startOffset","endContainer","endOffset","walker","createTreeWalker","commonAncestorContainer","NodeFilter","SHOW_TEXT","acceptNode","_n$nodeValue","nodeValue","FILTER_REJECT","r","createRange","selectNodeContents","compareBoundaryPoints","Range","END_TO_START","START_TO_END","FILTER_ACCEPT","textNodes","tn","nextNode","push","length","every","txt","_e$parentElement","first","last","common","parentElement","closest","contains","parent","beforeRange","setStartBefore","setEndBefore","before","cloneContents","afterRange","setStartAfter","setEndAfter","after","middleRange","middle","extractContents","frag","createDocumentFragment","childNodes","b","a","skip","wrapper","_ref3","_ref4","rgbToHex","rgb","m","match","concat","Number","toString","padStart","setFontFamily","family","style","fontFamily","wrap","_ref5","_ref6","surroundContents","_unused","surroundInline","_export"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"inline-utils.cjs.js","sources":["../../../../src/nile-rich-text-editor/utils/inline-utils.ts"],"sourcesContent":["export function toggleInlineTag(\n root: HTMLElement,\n tag: 'strong' | 'em' | 'u' | 'span',\n attrs?: Record<string, string>\n) {\n const sel = window.getSelection();\n if (!sel || sel.rangeCount === 0) return;\n const range = sel.getRangeAt(0);\n const aliases: Record<string, string[]> = {\n strong: ['strong', 'b'],\n em: ['em', 'i'],\n u: ['u'],\n span: ['span'],\n };\n const candidates = aliases[tag] ?? [tag];\n const isMatch = (el: HTMLElement) =>\n candidates.includes(el.tagName.toLowerCase());\n\n function unwrap(el: HTMLElement) {\n const p = el.parentNode;\n if (!p) return;\n while (el.firstChild) p.insertBefore(el.firstChild, el);\n p.removeChild(el);\n }\n\n function removeEmptyAndNested(root: HTMLElement) {\n root.querySelectorAll(candidates.join(',')).forEach(el => {\n if (!el.textContent?.trim()) {\n el.remove();\n return;\n }\n const nested = Array.from(el.querySelectorAll(candidates.join(',')));\n nested.forEach(n => {\n if (n === el) return;\n while (n.firstChild) el.insertBefore(n.firstChild, n);\n n.remove();\n });\n });\n }\n\n function mergeAdjacent(root: HTMLElement) {\n const list = Array.from(root.querySelectorAll(candidates.join(',')));\n list.forEach(el => {\n const next = el.nextSibling;\n if (next instanceof HTMLElement && isMatch(next)) {\n while (next.firstChild) el.appendChild(next.firstChild);\n next.remove();\n }\n });\n }\n if (range.collapsed) {\n let inside = false;\n let n: Node | null = range.startContainer;\n while (n && n !== root) {\n if (n instanceof HTMLElement && isMatch(n)) {\n inside = true;\n break;\n }\n n = n.parentNode;\n }\n\n if (inside && n instanceof HTMLElement) {\n unwrap(n);\n } else {\n const elm = document.createElement(tag);\n if (attrs)\n Object.entries(attrs).forEach(([k, v]) => elm.setAttribute(k, v));\n elm.appendChild(document.createTextNode('\\u200b'));\n range.insertNode(elm);\n range.setStart(elm.firstChild!, 1);\n range.collapse(true);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n\n removeEmptyAndNested(root);\n mergeAdjacent(root);\n return;\n }\n if (range.startContainer.nodeType === Node.TEXT_NODE)\n (range.startContainer as Text).splitText(range.startOffset);\n if (range.endContainer.nodeType === Node.TEXT_NODE)\n (range.endContainer as Text).splitText(range.endOffset);\n const walker = document.createTreeWalker(\n range.commonAncestorContainer,\n NodeFilter.SHOW_TEXT,\n {\n acceptNode: n => {\n if (!n.nodeValue?.trim()) return NodeFilter.FILTER_REJECT;\n const r = document.createRange();\n r.selectNodeContents(n);\n const inter =\n range.compareBoundaryPoints(Range.END_TO_START, r) < 0 &&\n range.compareBoundaryPoints(Range.START_TO_END, r) > 0;\n return inter ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n },\n }\n );\n\n const textNodes: Text[] = [];\n let tn: Node | null;\n while ((tn = walker.nextNode())) textNodes.push(tn as Text);\n\n const allInside =\n textNodes.length > 0 &&\n textNodes.every(txt => {\n let n: Node | null = txt;\n while (n && n !== root) {\n if (n instanceof HTMLElement && isMatch(n)) return true;\n n = n.parentNode;\n }\n return false;\n });\n\n if (allInside) {\n const first = textNodes[0];\n const last = textNodes[textNodes.length - 1];\n const common = first.parentElement?.closest(tag) as HTMLElement | null;\n if (common && common.contains(last)) {\n const parent = common.parentNode;\n if (parent) {\n const beforeRange = document.createRange();\n beforeRange.setStartBefore(common);\n beforeRange.setEndBefore(first);\n const before = beforeRange.cloneContents();\n\n const afterRange = document.createRange();\n afterRange.setStartAfter(last);\n afterRange.setEndAfter(common);\n const after = afterRange.cloneContents();\n\n const middleRange = document.createRange();\n middleRange.setStartBefore(first);\n middleRange.setEndAfter(last);\n const middle = middleRange.extractContents();\n\n const frag = document.createDocumentFragment();\n if (before.childNodes.length) {\n const b = document.createElement(tag);\n while (before.firstChild) b.appendChild(before.firstChild);\n frag.appendChild(b);\n }\n while (middle.firstChild) frag.appendChild(middle.firstChild);\n if (after.childNodes.length) {\n const a = document.createElement(tag);\n while (after.firstChild) a.appendChild(after.firstChild);\n frag.appendChild(a);\n }\n parent.insertBefore(frag, common);\n parent.removeChild(common);\n }\n } else {\n textNodes.forEach(txt => {\n let n: Node | null = txt;\n while (n && n !== root) {\n if (n instanceof HTMLElement && isMatch(n)) {\n unwrap(n);\n break;\n }\n n = n.parentNode;\n }\n });\n }\n } else {\n textNodes.forEach(txt => {\n const inProtected = txt.parentElement?.closest('.mention, nile-mention');\n if (inProtected) return;\n const inAnchor = txt.parentElement?.closest('a');\n if (inAnchor && tag === 'span') return;\n const wrapper = document.createElement(tag);\n if (attrs)\n Object.entries(attrs).forEach(([k, v]) => wrapper.setAttribute(k, v));\n if (inAnchor) {\n inAnchor.insertBefore(wrapper, txt);\n wrapper.appendChild(txt);\n } else {\n txt.parentNode?.insertBefore(wrapper, txt);\n wrapper.appendChild(txt);\n }\n });\n }\n\n removeEmptyAndNested(root);\n mergeAdjacent(root);\n\n sel.removeAllRanges();\n sel.addRange(range);\n}\n\nexport function surroundInline(\n range: Range,\n tag: string,\n attrs?: Record<string, string>\n) {\n const wrap = document.createElement(tag);\n if (attrs) Object.entries(attrs).forEach(([k, v]) => wrap.setAttribute(k, v));\n try {\n range.surroundContents(wrap);\n } catch {\n const frag = range.extractContents();\n wrap.appendChild(frag);\n range.insertNode(wrap);\n }\n}\n\nexport function unwrap(node: HTMLElement) {\n const p = node.parentNode;\n if (!p) return;\n while (node.firstChild) p.insertBefore(node.firstChild, node);\n p.removeChild(node);\n}\n\nfunction unwrapAllMatching(\n node: Node,\n root: HTMLElement,\n matcher: (el: HTMLElement) => boolean\n) {\n let n: Node | null = node.parentNode;\n while (n && n !== root) {\n if (n instanceof HTMLElement && matcher(n)) {\n unwrap(n);\n\n n = node.parentNode;\n continue;\n }\n n = n.parentNode;\n }\n}\n\nexport function rgbToHex(rgb: string): string {\n const m = rgb.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/i);\n if (!m) return '#000000';\n const r = Number(m[1]).toString(16).padStart(2, '0');\n const g = Number(m[2]).toString(16).padStart(2, '0');\n const b = Number(m[3]).toString(16).padStart(2, '0');\n return `#${r}${g}${b}`;\n}\n\nexport function setFontFamily(root: HTMLElement, family: string) {\n const sel = document.getSelection();\n 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();\n r.setStart(span.firstChild!, 1);\n r.collapse(true);\n sel.removeAllRanges();\n sel.addRange(r);\n return;\n }\n surroundInline(range, 'span', { style: `font-family:${family}` });\n}\n"],"names":["toggleInlineTag","root","tag","attrs","_strong$em$u$span$t","sel","window","getSelection","rangeCount","range","getRangeAt","candidates","strong","em","u","span","isMatch","el","includes","tagName","toLowerCase","unwrap","p","parentNode","firstChild","insertBefore","removeChild","removeEmptyAndNested","querySelectorAll","join","forEach","_n$textContent","textContent","trim","remove","Array","from","n","mergeAdjacent","next","nextSibling","HTMLElement","appendChild","collapsed","inside","startContainer","elm","document","createElement","Object","entries","_ref","_ref2","_slicedToArray","k","v","setAttribute","createTextNode","insertNode","setStart","collapse","removeAllRanges","addRange","nodeType","Node","TEXT_NODE","splitText","startOffset","endContainer","endOffset","walker","createTreeWalker","commonAncestorContainer","NodeFilter","SHOW_TEXT","acceptNode","nodeValue","FILTER_REJECT","r","createRange","selectNodeContents","compareBoundaryPoints","Range","END_TO_START","START_TO_END","FILTER_ACCEPT","textNodes","tn","nextNode","push","length","every","txt","_e$parentElement","first","last","common","parentElement","closest","contains","parent","beforeRange","setStartBefore","setEndBefore","before","cloneContents","afterRange","setStartAfter","setEndAfter","after","middleRange","middle","extractContents","frag","createDocumentFragment","childNodes","b","a","inProtected","inAnchor","wrapper","_ref3","_ref4","rgbToHex","rgb","m","match","concat","Number","toString","padStart","setFontFamily","family","style","fontFamily","wrap","_ref5","_ref6","surroundContents","_unused","surroundInline","_export"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function n(n,t,e){const o=window.getSelection();if(!o||0===o.rangeCount)return;const c=o.getRangeAt(0),r={strong:["strong","b"],em:["em","i"],u:["u"],span:["span"]}[t]??[t],i=n=>r.includes(n.tagName.toLowerCase());function s(n){const t=n.parentNode;if(t){for(;n.firstChild;)t.insertBefore(n.firstChild,n);t.removeChild(n)}}function f(n){n.querySelectorAll(r.join(",")).forEach((n=>{if(!n.textContent?.trim())return void n.remove();Array.from(n.querySelectorAll(r.join(","))).forEach((t=>{if(t!==n){for(;t.firstChild;)n.insertBefore(t.firstChild,t);t.remove()}}))}))}function u(n){Array.from(n.querySelectorAll(r.join(","))).forEach((n=>{const t=n.nextSibling;if(t instanceof HTMLElement&&i(t)){for(;t.firstChild;)n.appendChild(t.firstChild);t.remove()}}))}if(c.collapsed){let r=!1,d=c.startContainer;for(;d&&d!==n;){if(d instanceof HTMLElement&&i(d)){r=!0;break}d=d.parentNode}if(r&&d instanceof HTMLElement)s(d);else{const n=document.createElement(t);e&&Object.entries(e).forEach((([t,e])=>n.setAttribute(t,e))),n.appendChild(document.createTextNode("")),c.insertNode(n),c.setStart(n.firstChild,1),c.collapse(!0),o.removeAllRanges(),o.addRange(c)}return f(n),void u(n)}c.startContainer.nodeType===Node.TEXT_NODE&&c.startContainer.splitText(c.startOffset),c.endContainer.nodeType===Node.TEXT_NODE&&c.endContainer.splitText(c.endOffset);const d=document.createTreeWalker(c.commonAncestorContainer,NodeFilter.SHOW_TEXT,{acceptNode:n=>{if(!n.nodeValue?.trim())return NodeFilter.FILTER_REJECT;const t=document.createRange();t.selectNodeContents(n);return c.compareBoundaryPoints(Range.END_TO_START,t)<0&&c.compareBoundaryPoints(Range.START_TO_END,t)>0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT}}),m=[];let a;for(;a=d.nextNode();)m.push(a);if(m.length>0&&m.every((t=>{let e=t;for(;e&&e!==n;){if(e instanceof HTMLElement&&i(e))return!0;e=e.parentNode}return!1}))){const e=m[0],o=m[m.length-1],c=e.parentElement?.closest(t);if(c&&c.contains(o)){const n=c.parentNode;if(n){const r=document.createRange();r.setStartBefore(c),r.setEndBefore(e);const i=r.cloneContents(),s=document.createRange();s.setStartAfter(o),s.setEndAfter(c);const f=s.cloneContents(),u=document.createRange();u.setStartBefore(e),u.setEndAfter(o);const d=u.extractContents(),m=document.createDocumentFragment();if(i.childNodes.length){const n=document.createElement(t);for(;i.firstChild;)n.appendChild(i.firstChild);m.appendChild(n)}for(;d.firstChild;)m.appendChild(d.firstChild);if(f.childNodes.length){const n=document.createElement(t);for(;f.firstChild;)n.appendChild(f.firstChild);m.appendChild(n)}n.insertBefore(m,c),n.removeChild(c)}}else m.forEach((t=>{let e=t;for(;e&&e!==n;){if(e instanceof HTMLElement&&i(e)){s(e);break}e=e.parentNode}}))}else m.forEach((n=>{const o=n.parentElement?.closest("
|
|
1
|
+
function n(n,t,e){const o=window.getSelection();if(!o||0===o.rangeCount)return;const c=o.getRangeAt(0),r={strong:["strong","b"],em:["em","i"],u:["u"],span:["span"]}[t]??[t],i=n=>r.includes(n.tagName.toLowerCase());function s(n){const t=n.parentNode;if(t){for(;n.firstChild;)t.insertBefore(n.firstChild,n);t.removeChild(n)}}function f(n){n.querySelectorAll(r.join(",")).forEach((n=>{if(!n.textContent?.trim())return void n.remove();Array.from(n.querySelectorAll(r.join(","))).forEach((t=>{if(t!==n){for(;t.firstChild;)n.insertBefore(t.firstChild,t);t.remove()}}))}))}function u(n){Array.from(n.querySelectorAll(r.join(","))).forEach((n=>{const t=n.nextSibling;if(t instanceof HTMLElement&&i(t)){for(;t.firstChild;)n.appendChild(t.firstChild);t.remove()}}))}if(c.collapsed){let r=!1,d=c.startContainer;for(;d&&d!==n;){if(d instanceof HTMLElement&&i(d)){r=!0;break}d=d.parentNode}if(r&&d instanceof HTMLElement)s(d);else{const n=document.createElement(t);e&&Object.entries(e).forEach((([t,e])=>n.setAttribute(t,e))),n.appendChild(document.createTextNode("")),c.insertNode(n),c.setStart(n.firstChild,1),c.collapse(!0),o.removeAllRanges(),o.addRange(c)}return f(n),void u(n)}c.startContainer.nodeType===Node.TEXT_NODE&&c.startContainer.splitText(c.startOffset),c.endContainer.nodeType===Node.TEXT_NODE&&c.endContainer.splitText(c.endOffset);const d=document.createTreeWalker(c.commonAncestorContainer,NodeFilter.SHOW_TEXT,{acceptNode:n=>{if(!n.nodeValue?.trim())return NodeFilter.FILTER_REJECT;const t=document.createRange();t.selectNodeContents(n);return c.compareBoundaryPoints(Range.END_TO_START,t)<0&&c.compareBoundaryPoints(Range.START_TO_END,t)>0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT}}),m=[];let a;for(;a=d.nextNode();)m.push(a);if(m.length>0&&m.every((t=>{let e=t;for(;e&&e!==n;){if(e instanceof HTMLElement&&i(e))return!0;e=e.parentNode}return!1}))){const e=m[0],o=m[m.length-1],c=e.parentElement?.closest(t);if(c&&c.contains(o)){const n=c.parentNode;if(n){const r=document.createRange();r.setStartBefore(c),r.setEndBefore(e);const i=r.cloneContents(),s=document.createRange();s.setStartAfter(o),s.setEndAfter(c);const f=s.cloneContents(),u=document.createRange();u.setStartBefore(e),u.setEndAfter(o);const d=u.extractContents(),m=document.createDocumentFragment();if(i.childNodes.length){const n=document.createElement(t);for(;i.firstChild;)n.appendChild(i.firstChild);m.appendChild(n)}for(;d.firstChild;)m.appendChild(d.firstChild);if(f.childNodes.length){const n=document.createElement(t);for(;f.firstChild;)n.appendChild(f.firstChild);m.appendChild(n)}n.insertBefore(m,c),n.removeChild(c)}}else m.forEach((t=>{let e=t;for(;e&&e!==n;){if(e instanceof HTMLElement&&i(e)){s(e);break}e=e.parentNode}}))}else m.forEach((n=>{const o=n.parentElement?.closest(".mention, nile-mention");if(o)return;const c=n.parentElement?.closest("a");if(c&&"span"===t)return;const r=document.createElement(t);e&&Object.entries(e).forEach((([n,t])=>r.setAttribute(n,t))),c?(c.insertBefore(r,n),r.appendChild(n)):(n.parentNode?.insertBefore(r,n),r.appendChild(n))}));f(n),u(n),o.removeAllRanges(),o.addRange(c)}function t(n){const t=n.match(/rgba?\((\d+),\s*(\d+),\s*(\d+)/i);if(!t)return"#000000";return`#${Number(t[1]).toString(16).padStart(2,"0")}${Number(t[2]).toString(16).padStart(2,"0")}${Number(t[3]).toString(16).padStart(2,"0")}`}function e(n,t){const e=document.getSelection();if(!e||0===e.rangeCount)return;const o=e.getRangeAt(0);if(o.collapsed){const n=document.createElement("span");n.style.fontFamily=t,n.appendChild(document.createTextNode("")),o.insertNode(n);const c=document.createRange();return c.setStart(n.firstChild,1),c.collapse(!0),e.removeAllRanges(),void e.addRange(c)}!function(n,t,e){const o=document.createElement(t);e&&Object.entries(e).forEach((([n,t])=>o.setAttribute(n,t)));try{n.surroundContents(o)}catch{const t=n.extractContents();o.appendChild(t),n.insertNode(o)}}(o,"span",{style:`font-family:${t}`})}export{t as r,e as s,n as t};
|
|
@@ -170,6 +170,30 @@ nile-rte-toolbar-item nile-button[data-active]::part(base):hover {
|
|
|
170
170
|
background-color: var(--nile-colors-primary-500, var(--ng-componentcolors-utility-blue-500));
|
|
171
171
|
}
|
|
172
172
|
|
|
173
|
+
nile-rte-link nile-button[data-active]::part(base) {
|
|
174
|
+
background-color: var(--nile-colors-primary-400, var(--ng-componentcolors-utility-blue-400));
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
nile-rte-link nile-button[data-active]::part(base):hover {
|
|
178
|
+
background-color: var(--nile-colors-primary-500, var(--ng-componentcolors-utility-blue-500));
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.editor a {
|
|
182
|
+
color: var(--nile-colors-primary-600, var(--ng-colors-text-brand-tertiary-600));
|
|
183
|
+
cursor: pointer;
|
|
184
|
+
text-decoration: none;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.editor a:hover {
|
|
188
|
+
text-decoration: none;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
nile-rich-text-editor[disabled] .editor a {
|
|
192
|
+
color: var(--nile-colors-dark-500, var(--ng-colors-text-disabled));
|
|
193
|
+
cursor: not-allowed;
|
|
194
|
+
pointer-events: none;
|
|
195
|
+
}
|
|
196
|
+
|
|
173
197
|
.editor.empty::before {
|
|
174
198
|
content: attr(data-placeholder);
|
|
175
199
|
color: var(--nile-colors-neutral-500, var(--ng-colors-text-secondary));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nile-rich-text-editor.css.js","sourceRoot":"","sources":["../../../src/nile-rich-text-editor/nile-rich-text-editor.css.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA
|
|
1
|
+
{"version":3,"file":"nile-rich-text-editor.css.js","sourceRoot":"","sources":["../../../src/nile-rich-text-editor/nile-rich-text-editor.css.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoNxB,CAAC;AAEF,eAAe,CAAC,MAAM,CAAC,CAAC","sourcesContent":[" \nimport { css } from 'lit';\n\nexport const styles = css`\n .editor { all: revert; }\n\n nile-rich-text-editor {\n position: relative;\n display: block;\n font-family: inherit;\n }\n\n\n .rte-container {\n width: 100%;\n border: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-neutral));\n border-radius: var(--nile-radius-radius-xl, var(--ng-radius-md));\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n box-sizing: border-box;\n }\n\n \n .rte-container nile-rte-toolbar {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px;\n border-bottom: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-neutral));\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n border-radius: 8px 8px 0 0;\n width: 100%; \n box-sizing: border-box; \n}\n\n .rte-container .editor {\n min-height: 160px;\n width: 100%;\n padding: 12px;\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n border-radius: 0 0 8px 8px;\n outline: none;\n tab-size: 4;\n -moz-tab-size: 4;\n word-break: break-word;\n box-sizing: border-box;\n border-radius: var(--nile-radius-radius-xl, var(--ng-radius-md));\n }\n\n nile-rich-text-editor[disabled] .rte-container {\n border-color: var(--nile-colors-neutral-500, var(--ng-colors-border-disabled));\n cursor: not-allowed !important;\n background: var(--nile-colors-dark-200, var(--ng-colors-bg-disabled-subtle));\n }\n\n nile-rich-text-editor[disabled] .rte-container nile-rte-toolbar {\n border-color: var(--nile-colors-neutral-500, var(--ng-colors-border-disabled));\n cursor: not-allowed !important;\n } \n\n nile-rich-text-editor[disabled] .rte-container .editor {\n background: var(--nile-colors-dark-200, var(--ng-colors-bg-disabled-subtle));\n pointer-events: none ;\n user-select: none;\n -webkit-user-select: none;\n border-color: var(--nile-colors-neutral-500, var(--ng-colors-border-disabled));\n color: var(--nile-colors-dark-500, var(--ng-colors-text-disabled));\n }\n\nnile-rte-preview {\n display: block;\n width: 100%;\n margin-top: 16px; \n padding: 12px;\n border: 1px dashed var(--nile-colors-neutral-400, var(--ng-colors-border-neutral));\n border-radius: var(--nile-radius-radius-xl, var(--ng-radius-md));\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n box-sizing: border-box;\n word-wrap: break-word;\n}\n\n nile-rich-text-editor[disabled] nile-rte-preview {\n background: var(--nile-colors-dark-200, var(--ng-colors-bg-disabled-subtle));\n cursor: not-allowed ;\n border-color: var(--nile-colors-neutral-500, var(--ng-colors-border-disabled));\n user-select: none;\n -webkit-user-select: none;\n color: var(--nile-colors-dark-500, var(--ng-colors-text-disabled));\n}\n\n nile-rte-toolbar-item nile-button::part(base) {\n width: 32px;\n height: 32px;\n padding: 0px 6px;\n border: none;\n }\n\n nile-rte-toolbar-item > button,\n nile-rte-toolbar button {\n border: 1px solid var(--nile-colors-neutral-400, var(--ng-colors-border-neutral));\n background: var(--nile-colors-white-base, var(--ng-colors-bg-primary));\n border-radius: var(--nile-radius-radius-lg, var(--ng-radius-md));\n cursor: pointer;\n }\n\n nile-rte-toolbar-item > button nile-icon { pointer-events: none; }\n\n nile-rte-toolbar-item > button.active {\n border-color: #2563eb;\n background: var(--nile-colors-white-base);\n }\n\n .editor p { margin: 1em 0; }\n .editor h1, .preview h1 {\n font-size: 2em;\n margin: 0.67em 0;\n font-weight: bold;\n }\n .editor h2, .preview h2 {\n font-size: 1.5em;\n margin: 0.83em 0;\n font-weight: bold;\n }\n .editor h3 { font-size: 1.17em; }\n .editor h4 { font-size: 1em; }\n .editor h5 { font-size: 0.83em; }\n .editor h6 { font-size: 0.67em; }\n\n\n .editor.single-line {\n min-height: 50px;\n max-height: 50px;\n line-height: 1.2;\n overflow-x: auto;\n white-space: nowrap;\n padding: 0px 12px 0px 12px;\n scrollbar-width: none;\n -ms-overflow-style: none;\n }\n nile-rte-preview.single-line {\n min-height: 50px;\n max-height: 50px;\n line-height: 1.2;\n padding: 0px 12px 0px 12px;\n overflow-x: auto;\n white-space: nowrap;\n scrollbar-width: none;\n -ms-overflow-style: none;\n }\n nile-rte-divider { \n margin: 0 4px;\n display: inline-block;\n height: 24px;\n width: 1px;\n background: var(--nile-colors-neutral-400, var(--ng-colors-border-neutral));\n }\n \n .editor ul,\n.editor ol {\n list-style-position: inside; \n padding: 0px;\n}\n\n\n \n \n\n nile-rte-toolbar-item nile-button[data-active]::part(base) {\n background-color: var(--nile-colors-primary-400, var(--ng-componentcolors-utility-blue-400));\n}\n\nnile-rte-toolbar-item nile-button[data-active]::part(base):hover {\n background-color: var(--nile-colors-primary-500, var(--ng-componentcolors-utility-blue-500)); \n}\n\nnile-rte-link nile-button[data-active]::part(base) {\n background-color: var(--nile-colors-primary-400, var(--ng-componentcolors-utility-blue-400));\n}\n\nnile-rte-link nile-button[data-active]::part(base):hover {\n background-color: var(--nile-colors-primary-500, var(--ng-componentcolors-utility-blue-500));\n}\n\n.editor a {\n color: var(--nile-colors-primary-600, var(--ng-colors-text-brand-tertiary-600));\n cursor: pointer;\n text-decoration: none;\n}\n\n.editor a:hover {\n text-decoration: none;\n}\n\nnile-rich-text-editor[disabled] .editor a {\n color: var(--nile-colors-dark-500, var(--ng-colors-text-disabled));\n cursor: not-allowed;\n pointer-events: none;\n}\n\n.editor.empty::before {\n content: attr(data-placeholder);\n color: var(--nile-colors-neutral-500, var(--ng-colors-text-secondary));\n position: absolute;\n font-family: var(var(--nile-font-family-sans-serif), var(--ng-font-family-body));\n pointer-events: none;\n user-select: none;\n padding-top: 16px;\n opacity: 0.7;\n}\n\n\n\n \n\n\n\n`;\n\nexport default [styles];\n"]}
|
|
@@ -33,6 +33,7 @@ export declare class NileRichTextEditor extends LitElement {
|
|
|
33
33
|
private colorSwatchEl;
|
|
34
34
|
private bgSwatchEl;
|
|
35
35
|
private containerEl;
|
|
36
|
+
private linkEl;
|
|
36
37
|
private mentionsEl;
|
|
37
38
|
private injectCss;
|
|
38
39
|
connectedCallback(): void;
|
|
@@ -43,7 +44,12 @@ export declare class NileRichTextEditor extends LitElement {
|
|
|
43
44
|
private ensureEditor;
|
|
44
45
|
private unwrapMention;
|
|
45
46
|
private scrubBrokenMentions;
|
|
47
|
+
private onEditorClick;
|
|
48
|
+
private onEditorInput;
|
|
49
|
+
private onEditorMouseup;
|
|
50
|
+
private onEditorKeyup;
|
|
46
51
|
private wireEditor;
|
|
52
|
+
private unwireEditor;
|
|
47
53
|
private onEditorKeydown;
|
|
48
54
|
private wireAuthoredToolbar;
|
|
49
55
|
private onSelectionChange;
|