@aquera/nile-elements 1.5.8 → 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 +6 -0
- package/dist/index.js +85 -46
- package/dist/nile-dropdown/nile-dropdown.cjs.js +1 -1
- package/dist/nile-dropdown/nile-dropdown.cjs.js.map +1 -1
- package/dist/nile-dropdown/nile-dropdown.esm.js +1 -1
- 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-dropdown/nile-dropdown.js +4 -2
- package/dist/src/nile-dropdown/nile-dropdown.js.map +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-dropdown/nile-dropdown.ts +5 -3
- 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};
|
|
@@ -359,8 +359,10 @@ let NileDropdown = class NileDropdown extends NileElement {
|
|
|
359
359
|
const trigger = this.querySelector('[slot="trigger"]');
|
|
360
360
|
if (!trigger)
|
|
361
361
|
return;
|
|
362
|
-
|
|
363
|
-
|
|
362
|
+
const triggerAlreadyDisabled = trigger.hasAttribute('disabled');
|
|
363
|
+
if (this.disabled || triggerAlreadyDisabled) {
|
|
364
|
+
trigger.disabled = true;
|
|
365
|
+
this.disabled = true;
|
|
364
366
|
}
|
|
365
367
|
}
|
|
366
368
|
async handleOpenChange() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nile-dropdown.js","sourceRoot":"","sources":["../../../src/nile-dropdown/nile-dropdown.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright Aquera Inc 2023\n *\n * This source code is licensed under the BSD-3-Clause license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {LitElement, html, CSSResultArray, TemplateResult, PropertyValues} from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport {styles} from './nile-dropdown.css';\nimport { animateTo, stopAnimations } from '../internal/animate';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { query } from 'lit/decorators.js';\nimport { getAnimation, setDefaultAnimation } from '../utilities/animation-registry';\nimport { getTabbableBoundary } from '../internal/tabbable';\nimport { waitForEvent } from '../internal/event';\nimport { watch } from '../internal/watch';\nimport NileElement from '../internal/nile-element';\nimport type { CSSResultGroup } from 'lit';\nimport type NileButton from '../nile-button/nile-button';\nimport type NileIconButton from '../nile-icon-button/nile-icon-button';\nimport type { NileMenu } from '../nile-menu';\nimport type { NilePopup } from '../nile-popup';\nimport '../nile-popup';\nimport { DropdownPortalManager } from './portal-manager';\nimport { VisibilityManager } from '../utilities/visibility-manager.js';\n\n/**\n * Nile icon component.\n *\n * @tag nile-dropdown\n * @summary Dropdowns expose additional content that \"drops down\" in a panel.\n * @dependency nile-popup\n *\n * @slot - The dropdown's main content.\n * @slot trigger - The dropdown's trigger, usually a `<nile-button>` element.\n *\n * @event nile-show - Emitted when the dropdown opens.\n * @event nile-after-show - Emitted after the dropdown opens and all animations are complete.\n * @event nile-hide - Emitted when the dropdown closes.\n * @event nile-after-hide - Emitted after the dropdown closes and all animations are complete.\n *\n * @csspart base - The component's base wrapper.\n * @csspart trigger - The container that wraps the trigger.\n * @csspart panel - The panel that gets shown when the dropdown is open.\n *\n * @animation dropdown.show - The animation to use when showing the dropdown.\n * @animation dropdown.hide - The animation to use when hiding the dropdown.\n */\n@customElement('nile-dropdown')\nexport class NileDropdown extends NileElement {\n static styles: CSSResultGroup = styles;\n\n @query('.dropdown') popup: NilePopup;\n @query('.dropdown__trigger') trigger: HTMLSlotElement;\n @query('.dropdown__panel') panel: HTMLSlotElement;\n\n\n /**\n * Indicates whether or not the dropdown is open. You can toggle this attribute to show and hide the dropdown, or you\n * can use the `show()` and `hide()` methods and this attribute will reflect the dropdown's open state.\n */\n @property({ type: Boolean, reflect: true }) open = false;\n\n /**\n * The preferred placement of the dropdown panel. Note that the actual placement may vary as needed to keep the panel\n * inside of the viewport.\n */\n @property({ reflect: true }) placement:\n | 'top'\n | 'top-start'\n | 'top-end'\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end'\n | 'right'\n | 'right-start'\n | 'right-end'\n | 'left'\n | 'left-start'\n | 'left-end' = 'bottom-start';\n\n /** Disables the dropdown so the panel will not open. */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n /**\n * By default, the dropdown is closed when an item is selected. This attribute will keep it open instead. Useful for\n * dropdowns that allow for multiple interactions.\n */\n @property({ attribute: 'stay-open-on-select', type: Boolean, reflect: true }) stayOpenOnSelect = false;\n\n /**\n * The dropdown will close when the user interacts outside of this element (e.g. clicking). Useful for composing other\n * components that use a dropdown internally.\n */\n @property({ attribute: false }) containingElement?: HTMLElement;\n\n /** The distance in pixels from which to offset the panel away from its trigger. */\n @property({ type: Number }) distance = 0;\n\n\n @property({ type: Boolean }) noOpenOnClick = false;\n\n /** The distance in pixels from which to offset the panel along its trigger. */\n @property({ type: Number }) skidding = 0;\n\n /** Syncs the popup's width or height to that of the anchor element. */\n @property() sync: 'width' | 'height' | 'both';\n\n /**\n * Enable this option to prevent the panel from being clipped when the component is placed inside a container with\n * `overflow: auto|scroll`. Hoisting uses a fixed positioning strategy that works in many, but not all, scenarios.\n */\n @property({ type: Boolean }) hoist = false;\n\n /**\n * Enable portal mode to render the dropdown panel in a portal outside the component's DOM tree.\n * This provides better positioning control and prevents clipping issues in complex layouts.\n */\n @property({ type: Boolean, reflect: true }) portal = false;\n\n @property({ type: Boolean, reflect: true }) enableVisibilityEffect = false;\n\n @property({ type: Boolean, reflect: true }) enableTabClose = false;\n\n\n private portalManager: DropdownPortalManager | null = null;\n private visibilityManager?: VisibilityManager;\n\n connectedCallback() {\n super.connectedCallback();\n this.handlePanelSelect = this.handlePanelSelect.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleDocumentKeyDown = this.handleDocumentKeyDown.bind(this);\n this.handleDocumentMouseDown = this.handleDocumentMouseDown.bind(this);\n\n if (!this.containingElement) {\n this.containingElement = this;\n }\n this.emit('nile-init');\n\n requestAnimationFrame(() => {\n if (this.portal && !this.portalManager) {\n this.portalManager = new DropdownPortalManager(this);\n }\n });\n }\n\n protected async firstUpdated(_changed: PropertyValues) {\n \n this.panel.hidden = !this.open;\n\n // If the dropdown is visible on init, update its position\n if (this.open) {\n this.addOpenListeners();\n this.popup.active = true;\n }\n \n await this.updateComplete;\n const triggerNode = this.trigger.assignedElements({ flatten: true })[0] as HTMLElement | undefined;\n \n this.visibilityManager = new VisibilityManager({\n host: this,\n target: triggerNode || null,\n enableVisibilityEffect: this.enableVisibilityEffect,\n enableTabClose: this.enableTabClose,\n isOpen: () => this.open,\n onAnchorOutOfView: () => {\n this.hide();\n this.emit('nile-visibility-change', {\n visible: false,\n reason: 'anchor-out-of-view',\n });\n },\n onDocumentHidden: () => {\n this.hide();\n this.emit('nile-visibility-change', {\n visible: false,\n reason: 'document-hidden',\n });\n },\n emit: (event, detail) => this.emit(`nile-${event}`, detail),\n });\n }\n \n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.visibilityManager?.cleanup();\n this.removeOpenListeners();\n this.hide();\n this.emit('nile-destroy');\n\n if (this.portalManager) {\n this.portalManager.cleanupPortalAppend();\n this.portalManager = null;\n }\n }\n\n focusOnTrigger() {\n const trigger = this.trigger.assignedElements({ flatten: true })[0] as HTMLElement | undefined;\n if (typeof trigger?.focus === 'function') {\n trigger.focus();\n }\n }\n\n getMenu() {\n return this.panel.assignedElements({ flatten: true }).find(el => el.tagName.toLowerCase() === 'nile-menu') as\n | NileMenu\n | undefined;\n }\n\n handleKeyDown(event: KeyboardEvent) {\n // Close when escape is pressed inside an open dropdown. We need to listen on the panel itself and stop propagation\n // in case any ancestors are also listening for this key.\n if (this.open && event.key === 'Escape') {\n event.stopPropagation();\n this.hide();\n this.focusOnTrigger();\n }\n }\n\n handleDocumentKeyDown(event: KeyboardEvent) {\n // Close when escape or tab is pressed\n if (event.key === 'Escape' && this.open) {\n event.stopPropagation();\n this.focusOnTrigger();\n this.hide();\n return;\n }\n\n // Handle tabbing\n if (event.key === 'Tab') {\n // Tabbing within an open menu should close the dropdown and refocus the trigger\n if (this.open && document.activeElement?.tagName.toLowerCase() === 'nile-menu-item') {\n event.preventDefault();\n this.hide();\n this.focusOnTrigger();\n return;\n }\n\n // Tabbing outside of the containing element closes the panel\n //\n // If the dropdown is used within a shadow DOM, we need to obtain the activeElement within that shadowRoot,\n // otherwise `document.activeElement` will only return the name of the parent shadow DOM element.\n setTimeout(() => {\n const activeElement =\n this.containingElement?.getRootNode() instanceof ShadowRoot\n ? document.activeElement?.shadowRoot?.activeElement\n : document.activeElement;\n\n const hitSelf = this.containingElement && activeElement?.closest(this.containingElement.tagName.toLowerCase()) === this.containingElement;\n const hitPortalAppend = this.portal && this.portalManager?.portalContainerElement && \n (activeElement === this.portalManager.portalContainerElement || \n activeElement?.closest('.nile-dropdown-portal-append') === this.portalManager.portalContainerElement);\n\n if (!hitSelf && !hitPortalAppend) {\n this.hide();\n }\n });\n }\n }\n\n handleDocumentMouseDown(event: MouseEvent) {\n // Close when clicking outside of the containing element\n const path = event.composedPath();\n const hitSelf = this.containingElement && path.includes(this.containingElement);\n const hitPortalAppend = this.portal && this.portalManager?.portalContainerElement && path.includes(this.portalManager.portalContainerElement);\n\n if (!hitSelf && !hitPortalAppend) {\n this.hide();\n }\n }\n\n handlePanelSelect(event: any) {\n const target = event.target as HTMLElement;\n\n // Hide the dropdown when a menu item is selected\n if (!this.stayOpenOnSelect && target.tagName.toLowerCase() === 'nile-menu') {\n this.hide();\n this.focusOnTrigger();\n } else if(this.stayOpenOnSelect && target.tagName.toLowerCase() === 'nile-menu') {\n this.show();\n this.focusOnTrigger();\n }\n }\n\n handleTriggerClick() {\n if(this.noOpenOnClick){\n return;\n }\n if (this.open) {\n this.hide();\n } else {\n this.show();\n this.focusOnTrigger();\n }\n }\n\n handleTriggerKeyDown(event: KeyboardEvent) {\n // When spacebar/enter is pressed, show the panel but don't focus on the menu. This let's the user press the same\n // key again to hide the menu in case they don't want to make a selection.\n // if (['Enter'].includes(event.key)) {\n // event.preventDefault();\n // this.handleTriggerClick();\n // return;\n // }\n\n const menu = this.getMenu();\n\n if (menu) {\n const menuItems = menu.getAllItems();\n const firstMenuItem = menuItems[0];\n const lastMenuItem = menuItems[menuItems.length - 1];\n\n // When up/down is pressed, we make the assumption that the user is familiar with the menu and plans to make a\n // selection. Rather than toggle the panel, we focus on the menu (if one exists) and activate the first item for\n // faster navigation.\n if (['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) {\n event.preventDefault();\n\n // Show the menu if it's not already open\n if (!this.open) {\n this.show();\n }\n\n if (menuItems.length > 0) {\n // Focus on the first/last menu item after showing\n this.updateComplete.then(() => {\n if (event.key === 'ArrowDown' || event.key === 'Home') {\n menu.setCurrentItem(firstMenuItem);\n firstMenuItem.focus();\n }\n\n if (event.key === 'ArrowUp' || event.key === 'End') {\n menu.setCurrentItem(lastMenuItem);\n lastMenuItem.focus();\n }\n });\n }\n }\n }\n }\n\n handleTriggerKeyUp(event: KeyboardEvent) {\n // Prevent space from triggering a click event in Firefox\n if (event.key === ' ') {\n event.preventDefault();\n }\n }\n\n handleTriggerSlotChange() {\n this.updateAccessibleTrigger();\n }\n\n //\n // Slotted triggers can be arbitrary content, but we need to link them to the dropdown panel with `aria-haspopup` and\n // `aria-expanded`. These must be applied to the \"accessible trigger\" (the tabbable portion of the trigger element\n // that gets slotted in) so screen readers will understand them. The accessible trigger could be the slotted element,\n // a child of the slotted element, or an element in the slotted element's shadow root.\n //\n // For example, the accessible trigger of an <nile-button> is a <button> located inside its shadow root.\n //\n // To determine this, we assume the first tabbable element in the trigger slot is the \"accessible trigger.\"\n //\n updateAccessibleTrigger() {\n const assignedElements = this.trigger.assignedElements({ flatten: true }) as HTMLElement[];\n const accessibleTrigger = assignedElements.find(el => getTabbableBoundary(el).start);\n let target: HTMLElement;\n\n if (accessibleTrigger) {\n switch (accessibleTrigger.tagName.toLowerCase()) {\n // nile buttons have to update the internal button so it's announced correctly by screen readers\n case 'nile-button':\n case 'nile-icon-button':\n target = (accessibleTrigger as NileButton | NileIconButton).button;\n break;\n\n default:\n target = accessibleTrigger;\n }\n\n target.setAttribute('aria-haspopup', 'true');\n target.setAttribute('aria-expanded', this.open ? 'true' : 'false');\n }\n }\n\n /** Shows the dropdown panel. */\n async show() {\n if (this.open) {\n return undefined;\n }\n\n this.open = true;\n return waitForEvent(this, 'nile-after-show');\n }\n\n /** Hides the dropdown panel */\n async hide() {\n if (!this.open) {\n return undefined;\n }\n\n this.open = false;\n return waitForEvent(this, 'nile-after-hide');\n }\n\n /**\n * Instructs the dropdown menu to reposition. Useful when the position or size of the trigger changes when the menu\n * is activated.\n */\n reposition() {\n this.popup.reposition();\n }\n\n addOpenListeners() {\n this.panel.addEventListener('nile-select', this.handlePanelSelect);\n this.panel.addEventListener('keydown', this.handleKeyDown);\n document.addEventListener('keydown', this.handleDocumentKeyDown);\n document.addEventListener('mousedown', this.handleDocumentMouseDown);\n }\n\n removeOpenListeners() {\n if (this.panel) {\n this.panel.removeEventListener('nile-select', this.handlePanelSelect);\n this.panel.removeEventListener('keydown', this.handleKeyDown);\n }\n document.removeEventListener('keydown', this.handleDocumentKeyDown);\n document.removeEventListener('mousedown', this.handleDocumentMouseDown);\n }\n\n protected updated(changedProperties: PropertyValues): void {\n super.updated(changedProperties);\n \n if (changedProperties.has('portal')) {\n if (this.portal && !this.portalManager) {\n this.portalManager = new DropdownPortalManager(this);\n if (this.open) {\n this.portalManager.setupPortalAppend();\n }\n } else if (!this.portal && this.portalManager) {\n this.portalManager.cleanupPortalAppend();\n this.portalManager = null;\n }\n }\n if (changedProperties.has('disabled')) {\n this.updateTriggerDisabledState();\n }\n }\n \n private updateTriggerDisabledState() {\n const trigger = this.querySelector('[slot=\"trigger\"]') as HTMLElement | null;\n if (!trigger) return;\n if ('disabled' in trigger) {\n (trigger as any).disabled = this.disabled;\n }\n }\n\n @watch('open', { waitUntilFirstUpdate: true })\n async handleOpenChange() {\n this.visibilityManager?.setup();\n if (this.disabled) {\n this.open = false;\n return;\n }\n\n this.updateAccessibleTrigger();\n\n if (this.open) {\n // Show\n this.emit('nile-show');\n this.addOpenListeners();\n\n if (this.portal && this.portalManager) {\n this.portalManager.setupPortalAppend();\n } else if (this.portal && !this.portalManager) {\n this.portalManager = new DropdownPortalManager(this);\n this.portalManager.setupPortalAppend();\n }\n\n await stopAnimations(this);\n \n // Only show panel and animate if not using portal\n if (!this.portal) {\n this.panel.hidden = false;\n this.popup.active = true;\n const { keyframes, options } = getAnimation(this, 'dropdown.show', { dir: '' });\n await animateTo(this.popup.popup, keyframes, options);\n }\n\n this.emit('nile-after-show');\n } else {\n // Hide\n this.emit('nile-hide');\n this.removeOpenListeners();\n this.visibilityManager?.cleanup();\n\n if (this.portal && this.portalManager) {\n this.portalManager.cleanupPortalAppend();\n }\n\n await stopAnimations(this);\n \n // Only hide panel and animate if not using portal\n if (!this.portal) {\n const { keyframes, options } = getAnimation(this, 'dropdown.hide', { dir: '' });\n await animateTo(this.popup.popup, keyframes, options);\n this.panel.hidden = true;\n this.popup.active = false;\n }\n\n this.emit('nile-after-hide');\n }\n }\n\n render() {\n return html`\n <nile-popup\n part=\"base\"\n id=\"dropdown\"\n placement=${this.placement}\n distance=${this.distance}\n skidding=${this.skidding}\n strategy=${this.hoist ? 'fixed' : 'absolute'}\n sync=${this.sync}\n flip\n shift\n auto-size=\"both\"\n auto-size-padding=\"10\"\n class=${classMap({\n dropdown: true,\n 'dropdown--open': this.open\n })}\n >\n <slot\n name=\"trigger\"\n slot=\"anchor\"\n part=\"trigger\"\n class=\"dropdown__trigger\"\n @click=${this.handleTriggerClick}\n @keydown=${this.handleTriggerKeyDown}\n @keyup=${this.handleTriggerKeyUp}\n @slotchange=${this.handleTriggerSlotChange}\n ></slot>\n\n <slot\n part=\"panel\"\n class=\"dropdown__panel\"\n aria-hidden=${this.open ? 'false' : 'true'}\n aria-labelledby=\"dropdown\"\n style=${this.portal && this.portalManager ? 'display: none;' : ''}\n ></slot>\n </nile-popup>\n `;\n }\n}\n\nsetDefaultAnimation('dropdown.show', {\n keyframes: [\n { opacity: 0, scale: 0.9 },\n { opacity: 1, scale: 1 }\n ],\n options: { duration: 100, easing: 'ease' }\n});\n\nsetDefaultAnimation('dropdown.hide', {\n keyframes: [\n { opacity: 1, scale: 1 },\n { opacity: 0, scale: 0.9 }\n ],\n options: { duration: 100, easing: 'ease' }\n});\n\nexport default NileDropdown;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-dropdown': NileDropdown;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"nile-dropdown.js","sourceRoot":"","sources":["../../../src/nile-dropdown/nile-dropdown.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright Aquera Inc 2023\n *\n * This source code is licensed under the BSD-3-Clause license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {LitElement, html, CSSResultArray, TemplateResult, PropertyValues} from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport {styles} from './nile-dropdown.css';\nimport { animateTo, stopAnimations } from '../internal/animate';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { query } from 'lit/decorators.js';\nimport { getAnimation, setDefaultAnimation } from '../utilities/animation-registry';\nimport { getTabbableBoundary } from '../internal/tabbable';\nimport { waitForEvent } from '../internal/event';\nimport { watch } from '../internal/watch';\nimport NileElement from '../internal/nile-element';\nimport type { CSSResultGroup } from 'lit';\nimport type NileButton from '../nile-button/nile-button';\nimport type NileIconButton from '../nile-icon-button/nile-icon-button';\nimport type { NileMenu } from '../nile-menu';\nimport type { NilePopup } from '../nile-popup';\nimport '../nile-popup';\nimport { DropdownPortalManager } from './portal-manager';\nimport { VisibilityManager } from '../utilities/visibility-manager.js';\n\n/**\n * Nile icon component.\n *\n * @tag nile-dropdown\n * @summary Dropdowns expose additional content that \"drops down\" in a panel.\n * @dependency nile-popup\n *\n * @slot - The dropdown's main content.\n * @slot trigger - The dropdown's trigger, usually a `<nile-button>` element.\n *\n * @event nile-show - Emitted when the dropdown opens.\n * @event nile-after-show - Emitted after the dropdown opens and all animations are complete.\n * @event nile-hide - Emitted when the dropdown closes.\n * @event nile-after-hide - Emitted after the dropdown closes and all animations are complete.\n *\n * @csspart base - The component's base wrapper.\n * @csspart trigger - The container that wraps the trigger.\n * @csspart panel - The panel that gets shown when the dropdown is open.\n *\n * @animation dropdown.show - The animation to use when showing the dropdown.\n * @animation dropdown.hide - The animation to use when hiding the dropdown.\n */\n@customElement('nile-dropdown')\nexport class NileDropdown extends NileElement {\n static styles: CSSResultGroup = styles;\n\n @query('.dropdown') popup: NilePopup;\n @query('.dropdown__trigger') trigger: HTMLSlotElement;\n @query('.dropdown__panel') panel: HTMLSlotElement;\n\n\n /**\n * Indicates whether or not the dropdown is open. You can toggle this attribute to show and hide the dropdown, or you\n * can use the `show()` and `hide()` methods and this attribute will reflect the dropdown's open state.\n */\n @property({ type: Boolean, reflect: true }) open = false;\n\n /**\n * The preferred placement of the dropdown panel. Note that the actual placement may vary as needed to keep the panel\n * inside of the viewport.\n */\n @property({ reflect: true }) placement:\n | 'top'\n | 'top-start'\n | 'top-end'\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end'\n | 'right'\n | 'right-start'\n | 'right-end'\n | 'left'\n | 'left-start'\n | 'left-end' = 'bottom-start';\n\n /** Disables the dropdown so the panel will not open. */\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n /**\n * By default, the dropdown is closed when an item is selected. This attribute will keep it open instead. Useful for\n * dropdowns that allow for multiple interactions.\n */\n @property({ attribute: 'stay-open-on-select', type: Boolean, reflect: true }) stayOpenOnSelect = false;\n\n /**\n * The dropdown will close when the user interacts outside of this element (e.g. clicking). Useful for composing other\n * components that use a dropdown internally.\n */\n @property({ attribute: false }) containingElement?: HTMLElement;\n\n /** The distance in pixels from which to offset the panel away from its trigger. */\n @property({ type: Number }) distance = 0;\n\n\n @property({ type: Boolean }) noOpenOnClick = false;\n\n /** The distance in pixels from which to offset the panel along its trigger. */\n @property({ type: Number }) skidding = 0;\n\n /** Syncs the popup's width or height to that of the anchor element. */\n @property() sync: 'width' | 'height' | 'both';\n\n /**\n * Enable this option to prevent the panel from being clipped when the component is placed inside a container with\n * `overflow: auto|scroll`. Hoisting uses a fixed positioning strategy that works in many, but not all, scenarios.\n */\n @property({ type: Boolean }) hoist = false;\n\n /**\n * Enable portal mode to render the dropdown panel in a portal outside the component's DOM tree.\n * This provides better positioning control and prevents clipping issues in complex layouts.\n */\n @property({ type: Boolean, reflect: true }) portal = false;\n\n @property({ type: Boolean, reflect: true }) enableVisibilityEffect = false;\n\n @property({ type: Boolean, reflect: true }) enableTabClose = false;\n\n\n private portalManager: DropdownPortalManager | null = null;\n private visibilityManager?: VisibilityManager;\n\n connectedCallback() {\n super.connectedCallback();\n this.handlePanelSelect = this.handlePanelSelect.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleDocumentKeyDown = this.handleDocumentKeyDown.bind(this);\n this.handleDocumentMouseDown = this.handleDocumentMouseDown.bind(this);\n\n if (!this.containingElement) {\n this.containingElement = this;\n }\n this.emit('nile-init');\n\n requestAnimationFrame(() => {\n if (this.portal && !this.portalManager) {\n this.portalManager = new DropdownPortalManager(this);\n }\n });\n }\n\n protected async firstUpdated(_changed: PropertyValues) {\n \n this.panel.hidden = !this.open;\n\n // If the dropdown is visible on init, update its position\n if (this.open) {\n this.addOpenListeners();\n this.popup.active = true;\n }\n \n await this.updateComplete;\n const triggerNode = this.trigger.assignedElements({ flatten: true })[0] as HTMLElement | undefined;\n \n this.visibilityManager = new VisibilityManager({\n host: this,\n target: triggerNode || null,\n enableVisibilityEffect: this.enableVisibilityEffect,\n enableTabClose: this.enableTabClose,\n isOpen: () => this.open,\n onAnchorOutOfView: () => {\n this.hide();\n this.emit('nile-visibility-change', {\n visible: false,\n reason: 'anchor-out-of-view',\n });\n },\n onDocumentHidden: () => {\n this.hide();\n this.emit('nile-visibility-change', {\n visible: false,\n reason: 'document-hidden',\n });\n },\n emit: (event, detail) => this.emit(`nile-${event}`, detail),\n });\n }\n \n\n disconnectedCallback() {\n super.disconnectedCallback();\n this.visibilityManager?.cleanup();\n this.removeOpenListeners();\n this.hide();\n this.emit('nile-destroy');\n\n if (this.portalManager) {\n this.portalManager.cleanupPortalAppend();\n this.portalManager = null;\n }\n }\n\n focusOnTrigger() {\n const trigger = this.trigger.assignedElements({ flatten: true })[0] as HTMLElement | undefined;\n if (typeof trigger?.focus === 'function') {\n trigger.focus();\n }\n }\n\n getMenu() {\n return this.panel.assignedElements({ flatten: true }).find(el => el.tagName.toLowerCase() === 'nile-menu') as\n | NileMenu\n | undefined;\n }\n\n handleKeyDown(event: KeyboardEvent) {\n // Close when escape is pressed inside an open dropdown. We need to listen on the panel itself and stop propagation\n // in case any ancestors are also listening for this key.\n if (this.open && event.key === 'Escape') {\n event.stopPropagation();\n this.hide();\n this.focusOnTrigger();\n }\n }\n\n handleDocumentKeyDown(event: KeyboardEvent) {\n // Close when escape or tab is pressed\n if (event.key === 'Escape' && this.open) {\n event.stopPropagation();\n this.focusOnTrigger();\n this.hide();\n return;\n }\n\n // Handle tabbing\n if (event.key === 'Tab') {\n // Tabbing within an open menu should close the dropdown and refocus the trigger\n if (this.open && document.activeElement?.tagName.toLowerCase() === 'nile-menu-item') {\n event.preventDefault();\n this.hide();\n this.focusOnTrigger();\n return;\n }\n\n // Tabbing outside of the containing element closes the panel\n //\n // If the dropdown is used within a shadow DOM, we need to obtain the activeElement within that shadowRoot,\n // otherwise `document.activeElement` will only return the name of the parent shadow DOM element.\n setTimeout(() => {\n const activeElement =\n this.containingElement?.getRootNode() instanceof ShadowRoot\n ? document.activeElement?.shadowRoot?.activeElement\n : document.activeElement;\n\n const hitSelf = this.containingElement && activeElement?.closest(this.containingElement.tagName.toLowerCase()) === this.containingElement;\n const hitPortalAppend = this.portal && this.portalManager?.portalContainerElement && \n (activeElement === this.portalManager.portalContainerElement || \n activeElement?.closest('.nile-dropdown-portal-append') === this.portalManager.portalContainerElement);\n\n if (!hitSelf && !hitPortalAppend) {\n this.hide();\n }\n });\n }\n }\n\n handleDocumentMouseDown(event: MouseEvent) {\n // Close when clicking outside of the containing element\n const path = event.composedPath();\n const hitSelf = this.containingElement && path.includes(this.containingElement);\n const hitPortalAppend = this.portal && this.portalManager?.portalContainerElement && path.includes(this.portalManager.portalContainerElement);\n\n if (!hitSelf && !hitPortalAppend) {\n this.hide();\n }\n }\n\n handlePanelSelect(event: any) {\n const target = event.target as HTMLElement;\n\n // Hide the dropdown when a menu item is selected\n if (!this.stayOpenOnSelect && target.tagName.toLowerCase() === 'nile-menu') {\n this.hide();\n this.focusOnTrigger();\n } else if(this.stayOpenOnSelect && target.tagName.toLowerCase() === 'nile-menu') {\n this.show();\n this.focusOnTrigger();\n }\n }\n\n handleTriggerClick() {\n if(this.noOpenOnClick){\n return;\n }\n if (this.open) {\n this.hide();\n } else {\n this.show();\n this.focusOnTrigger();\n }\n }\n\n handleTriggerKeyDown(event: KeyboardEvent) {\n // When spacebar/enter is pressed, show the panel but don't focus on the menu. This let's the user press the same\n // key again to hide the menu in case they don't want to make a selection.\n // if (['Enter'].includes(event.key)) {\n // event.preventDefault();\n // this.handleTriggerClick();\n // return;\n // }\n\n const menu = this.getMenu();\n\n if (menu) {\n const menuItems = menu.getAllItems();\n const firstMenuItem = menuItems[0];\n const lastMenuItem = menuItems[menuItems.length - 1];\n\n // When up/down is pressed, we make the assumption that the user is familiar with the menu and plans to make a\n // selection. Rather than toggle the panel, we focus on the menu (if one exists) and activate the first item for\n // faster navigation.\n if (['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(event.key)) {\n event.preventDefault();\n\n // Show the menu if it's not already open\n if (!this.open) {\n this.show();\n }\n\n if (menuItems.length > 0) {\n // Focus on the first/last menu item after showing\n this.updateComplete.then(() => {\n if (event.key === 'ArrowDown' || event.key === 'Home') {\n menu.setCurrentItem(firstMenuItem);\n firstMenuItem.focus();\n }\n\n if (event.key === 'ArrowUp' || event.key === 'End') {\n menu.setCurrentItem(lastMenuItem);\n lastMenuItem.focus();\n }\n });\n }\n }\n }\n }\n\n handleTriggerKeyUp(event: KeyboardEvent) {\n // Prevent space from triggering a click event in Firefox\n if (event.key === ' ') {\n event.preventDefault();\n }\n }\n\n handleTriggerSlotChange() {\n this.updateAccessibleTrigger();\n }\n\n //\n // Slotted triggers can be arbitrary content, but we need to link them to the dropdown panel with `aria-haspopup` and\n // `aria-expanded`. These must be applied to the \"accessible trigger\" (the tabbable portion of the trigger element\n // that gets slotted in) so screen readers will understand them. The accessible trigger could be the slotted element,\n // a child of the slotted element, or an element in the slotted element's shadow root.\n //\n // For example, the accessible trigger of an <nile-button> is a <button> located inside its shadow root.\n //\n // To determine this, we assume the first tabbable element in the trigger slot is the \"accessible trigger.\"\n //\n updateAccessibleTrigger() {\n const assignedElements = this.trigger.assignedElements({ flatten: true }) as HTMLElement[];\n const accessibleTrigger = assignedElements.find(el => getTabbableBoundary(el).start);\n let target: HTMLElement;\n\n if (accessibleTrigger) {\n switch (accessibleTrigger.tagName.toLowerCase()) {\n // nile buttons have to update the internal button so it's announced correctly by screen readers\n case 'nile-button':\n case 'nile-icon-button':\n target = (accessibleTrigger as NileButton | NileIconButton).button;\n break;\n\n default:\n target = accessibleTrigger;\n }\n\n target.setAttribute('aria-haspopup', 'true');\n target.setAttribute('aria-expanded', this.open ? 'true' : 'false');\n }\n }\n\n /** Shows the dropdown panel. */\n async show() {\n if (this.open) {\n return undefined;\n }\n\n this.open = true;\n return waitForEvent(this, 'nile-after-show');\n }\n\n /** Hides the dropdown panel */\n async hide() {\n if (!this.open) {\n return undefined;\n }\n\n this.open = false;\n return waitForEvent(this, 'nile-after-hide');\n }\n\n /**\n * Instructs the dropdown menu to reposition. Useful when the position or size of the trigger changes when the menu\n * is activated.\n */\n reposition() {\n this.popup.reposition();\n }\n\n addOpenListeners() {\n this.panel.addEventListener('nile-select', this.handlePanelSelect);\n this.panel.addEventListener('keydown', this.handleKeyDown);\n document.addEventListener('keydown', this.handleDocumentKeyDown);\n document.addEventListener('mousedown', this.handleDocumentMouseDown);\n }\n\n removeOpenListeners() {\n if (this.panel) {\n this.panel.removeEventListener('nile-select', this.handlePanelSelect);\n this.panel.removeEventListener('keydown', this.handleKeyDown);\n }\n document.removeEventListener('keydown', this.handleDocumentKeyDown);\n document.removeEventListener('mousedown', this.handleDocumentMouseDown);\n }\n\n protected updated(changedProperties: PropertyValues): void {\n super.updated(changedProperties);\n \n if (changedProperties.has('portal')) {\n if (this.portal && !this.portalManager) {\n this.portalManager = new DropdownPortalManager(this);\n if (this.open) {\n this.portalManager.setupPortalAppend();\n }\n } else if (!this.portal && this.portalManager) {\n this.portalManager.cleanupPortalAppend();\n this.portalManager = null;\n }\n }\n if (changedProperties.has('disabled')) {\n this.updateTriggerDisabledState();\n }\n }\n \n private updateTriggerDisabledState() {\n const trigger = this.querySelector('[slot=\"trigger\"]') as any;\n if (!trigger) return;\n const triggerAlreadyDisabled = trigger.hasAttribute('disabled');\n if (this.disabled || triggerAlreadyDisabled) {\n trigger.disabled = true;\n this.disabled = true;\n }\n }\n\n @watch('open', { waitUntilFirstUpdate: true })\n async handleOpenChange() {\n this.visibilityManager?.setup();\n if (this.disabled) {\n this.open = false;\n return;\n }\n\n this.updateAccessibleTrigger();\n\n if (this.open) {\n // Show\n this.emit('nile-show');\n this.addOpenListeners();\n\n if (this.portal && this.portalManager) {\n this.portalManager.setupPortalAppend();\n } else if (this.portal && !this.portalManager) {\n this.portalManager = new DropdownPortalManager(this);\n this.portalManager.setupPortalAppend();\n }\n\n await stopAnimations(this);\n \n // Only show panel and animate if not using portal\n if (!this.portal) {\n this.panel.hidden = false;\n this.popup.active = true;\n const { keyframes, options } = getAnimation(this, 'dropdown.show', { dir: '' });\n await animateTo(this.popup.popup, keyframes, options);\n }\n\n this.emit('nile-after-show');\n } else {\n // Hide\n this.emit('nile-hide');\n this.removeOpenListeners();\n this.visibilityManager?.cleanup();\n\n if (this.portal && this.portalManager) {\n this.portalManager.cleanupPortalAppend();\n }\n\n await stopAnimations(this);\n \n // Only hide panel and animate if not using portal\n if (!this.portal) {\n const { keyframes, options } = getAnimation(this, 'dropdown.hide', { dir: '' });\n await animateTo(this.popup.popup, keyframes, options);\n this.panel.hidden = true;\n this.popup.active = false;\n }\n\n this.emit('nile-after-hide');\n }\n }\n\n render() {\n return html`\n <nile-popup\n part=\"base\"\n id=\"dropdown\"\n placement=${this.placement}\n distance=${this.distance}\n skidding=${this.skidding}\n strategy=${this.hoist ? 'fixed' : 'absolute'}\n sync=${this.sync}\n flip\n shift\n auto-size=\"both\"\n auto-size-padding=\"10\"\n class=${classMap({\n dropdown: true,\n 'dropdown--open': this.open\n })}\n >\n <slot\n name=\"trigger\"\n slot=\"anchor\"\n part=\"trigger\"\n class=\"dropdown__trigger\"\n @click=${this.handleTriggerClick}\n @keydown=${this.handleTriggerKeyDown}\n @keyup=${this.handleTriggerKeyUp}\n @slotchange=${this.handleTriggerSlotChange}\n ></slot>\n\n <slot\n part=\"panel\"\n class=\"dropdown__panel\"\n aria-hidden=${this.open ? 'false' : 'true'}\n aria-labelledby=\"dropdown\"\n style=${this.portal && this.portalManager ? 'display: none;' : ''}\n ></slot>\n </nile-popup>\n `;\n }\n}\n\nsetDefaultAnimation('dropdown.show', {\n keyframes: [\n { opacity: 0, scale: 0.9 },\n { opacity: 1, scale: 1 }\n ],\n options: { duration: 100, easing: 'ease' }\n});\n\nsetDefaultAnimation('dropdown.hide', {\n keyframes: [\n { opacity: 1, scale: 1 },\n { opacity: 0, scale: 0.9 }\n ],\n options: { duration: 100, easing: 'ease' }\n});\n\nexport default NileDropdown;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-dropdown': NileDropdown;\n }\n}\n"]}
|