@aquera/nile-elements 1.8.0 → 1.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/dist/index-6faafdf4.cjs.js +2 -0
- package/dist/index-6faafdf4.cjs.js.map +1 -0
- package/dist/index-9931b440.esm.js +1 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.js +283 -283
- package/dist/nile-combobox/index.cjs.js +1 -1
- package/dist/nile-combobox/index.esm.js +1 -1
- package/dist/nile-combobox/nile-combobox.cjs.js +1 -1
- package/dist/nile-combobox/nile-combobox.esm.js +1 -1
- package/dist/nile-context-menu/nile-context-menu.cjs.js +1 -1
- package/dist/nile-context-menu/nile-context-menu.cjs.js.map +1 -1
- package/dist/nile-context-menu/nile-context-menu.esm.js +2 -2
- package/dist/nile-context-menu-item/nile-context-menu-item.cjs.js +1 -1
- package/dist/nile-context-menu-item/nile-context-menu-item.cjs.js.map +1 -1
- package/dist/nile-context-menu-item/nile-context-menu-item.esm.js +3 -3
- package/dist/nile-context-submenu/nile-context-submenu.cjs.js +1 -1
- package/dist/nile-context-submenu/nile-context-submenu.cjs.js.map +1 -1
- package/dist/nile-context-submenu/nile-context-submenu.esm.js +2 -2
- package/dist/nile-detail/index.cjs.js +1 -1
- package/dist/nile-detail/index.esm.js +1 -1
- package/dist/nile-detail/nile-detail.cjs.js +1 -1
- package/dist/nile-detail/nile-detail.esm.js +1 -1
- package/dist/nile-floating-panel/nile-floating-panel.cjs.js +1 -1
- package/dist/nile-floating-panel/nile-floating-panel.cjs.js.map +1 -1
- package/dist/nile-floating-panel/nile-floating-panel.esm.js +1 -1
- package/dist/src/nile-context-menu/nile-context-menu.d.ts +10 -1
- package/dist/src/nile-context-menu/nile-context-menu.js +85 -5
- package/dist/src/nile-context-menu/nile-context-menu.js.map +1 -1
- package/dist/src/nile-context-menu-item/nile-context-menu-item.d.ts +1 -0
- package/dist/src/nile-context-menu-item/nile-context-menu-item.js +5 -1
- package/dist/src/nile-context-menu-item/nile-context-menu-item.js.map +1 -1
- package/dist/src/nile-context-submenu/nile-context-submenu.d.ts +9 -0
- package/dist/src/nile-context-submenu/nile-context-submenu.js +100 -16
- package/dist/src/nile-context-submenu/nile-context-submenu.js.map +1 -1
- package/dist/src/nile-floating-panel/nile-floating-panel.d.ts +2 -0
- package/dist/src/nile-floating-panel/nile-floating-panel.js +4 -0
- package/dist/src/nile-floating-panel/nile-floating-panel.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-context-menu/nile-context-menu.ts +86 -8
- package/src/nile-context-menu-item/nile-context-menu-item.ts +3 -1
- package/src/nile-context-submenu/nile-context-submenu.ts +97 -12
- package/src/nile-floating-panel/nile-floating-panel.ts +5 -0
- package/vscode-html-custom-data.json +13 -3
- package/dist/index-644974d4.esm.js +0 -1
- package/dist/index-dd2af8ec.cjs.js +0 -2
- package/dist/index-dd2af8ec.cjs.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nile-context-menu.js","sourceRoot":"","sources":["../../../src/nile-context-menu/nile-context-menu.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright Aquera Inc 2026\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 { html, CSSResultArray, TemplateResult } from 'lit';\nimport type { PropertyValues } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { styles } from './nile-context-menu.css';\nimport NileElement from '../internal/nile-element';\nimport type { NileContextMenuItem } from '../nile-context-menu-item';\nimport type { NileContextMenuGroup } from '../nile-context-menu-group';\nimport '../nile-floating-panel';\nimport '../nile-context-menu-group';\nimport '../nile-context-menu-item';\nimport '../nile-context-submenu';\n\n// Data-driven menu entry\nexport interface NileContextMenuItemData {\n type: 'item';\n id: string;\n label: string;\n value?: string;\n disabled?: boolean;\n icon?: string;\n iconSet?: string;\n iconSize?: string;\n iconMethod?: 'fill' | 'stroke' | string;\n iconColor?: string;\n submenu?: NileContextMenuData[];\n}\n\nexport interface NileContextMenuGroupData {\n type: 'group';\n name?: string;\n data: NileContextMenuItemData[];\n}\n\nexport type NileContextMenuData = NileContextMenuGroupData;\n\nconst ITEM_TAG = 'nile-context-menu-item';\nconst SUBMENU_TAG = 'nile-context-submenu';\nconst MENU_CONTAINER_CLASS = 'nile-context-menu__menu';\nconst OBSERVED_ITEM_ATTRS = ['value', 'disabled'];\n\nexport type NileContextMenuTrigger = 'right' | 'left' | 'both' | 'manual' | 'global';\n\nexport interface NileContextMenuOpenOptions {\n x: number;\n y: number;\n target?: Element;\n originalEvent?: Event;\n}\n\nexport type NileContextMenuCloseReason =\n | 'select'\n | 'outside-click'\n | 'escape'\n | 'programmatic';\n\ninterface NileContextMenuOpenContext {\n x: number;\n y: number;\n target: Element | null;\n originalEvent: Event | null;\n}\n\nlet proxyIdSeq = 0;\n\n/**\n * Nile context-menu component.\n *\n * @tag nile-context-menu\n *\n * @slot Default menu content.\n *\n * @event nile-change Fired on menu lifecycle and selection. `detail.type` is one of\n * `'open'`, `'click'`, or `'close'`; remaining fields depend on the type.\n */\n@customElement('nile-context-menu')\nexport class NileContextMenu extends NileElement {\n public static get styles(): CSSResultArray {\n return [styles];\n }\n\n \n @property({ attribute: true, type: String, reflect: true }) for = '';\n \n @property({ attribute: true, type: String, reflect: true }) trigger: NileContextMenuTrigger = 'right';\n \n @property({ attribute: true, type: String, reflect: true }) skipOn = '';\n \n @property({ attribute: true, type: Number, reflect: true }) zIndex = 9999;\n \n @property({ attribute: false }) public items: NileContextMenuData[] = [];\n \n private get _isDataMode(): boolean {\n return Array.isArray(this.items) && this.items.length > 0;\n }\n @query('nile-floating-panel') private _floatingPanel?: HTMLElement;\n \n @state() private _items: NileContextMenuItem[] = [];\n \n @state() private _open = false;\n \n protected _openContext: NileContextMenuOpenContext | null = null;\n \n protected _targetEl: Element | null = null;\n \n private _previouslyFocused: HTMLElement | null = null;\n \n private static _openInstances = new Set<NileContextMenu>();\n \n private _detachTriggers?: () => void;\n private _lightObserver?: MutationObserver;\n private _menuObserver?: MutationObserver;\n \n private _proxyEl?: HTMLDivElement;\n private readonly _proxyId = `nile-context-menu-anchor-${++proxyIdSeq}`;\n \n private _wasDataMode = false;\n\n public override connectedCallback(): void {\n super.connectedCallback();\n this._ensureProxy();\n this._resolveTarget();\n this._attachTriggers();\n this._lightObserver = new MutationObserver(() => {\n if (this._isDataMode) return;\n this._relocateLightChildren();\n });\n this._lightObserver.observe(this, { childList: true });\n }\n\n protected override updated(changed: PropertyValues): void {\n super.updated(changed);\n if ((changed.has('for') || changed.has('trigger') || changed.has('skipOn')) && this._open) {\n this.close('programmatic');\n }\n if (changed.has('for')) {\n this._resolveTarget();\n this._attachTriggers();\n } else if (changed.has('trigger') || changed.has('skipOn')) {\n this._attachTriggers();\n }\n if (changed.has('items') && this._menuContainerRef) {\n if (this._isDataMode) {\n this._renderDataItems();\n this._wasDataMode = true;\n } else if (this._wasDataMode) {\n this._renderDataItems();\n this._wasDataMode = false;\n }\n }\n }\n\n private _resolveTarget(): void {\n const value = this.for?.trim();\n if (!value) {\n this._targetEl = null;\n return;\n }\n const root = (this.getRootNode() as Document | ShadowRoot) ?? document;\n if (/^[#.\\[:]/.test(value)) {\n this._targetEl = (root as ParentNode).querySelector(value);\n } else if ('getElementById' in root) {\n this._targetEl = (root as Document | ShadowRoot).getElementById(value);\n } else {\n this._targetEl = document.getElementById(value);\n }\n }\n\n public get targetElement(): Element | null {\n return this._targetEl;\n }\n\n private _attachTriggers(): void {\n this._detachTriggers?.();\n this._detachTriggers = undefined;\n\n const trigger = this.trigger;\n if (trigger === 'manual') return;\n\n const cleanups: Array<() => void> = [];\n\n if (trigger === 'global') {\n const skipSelector = this.skipOn?.trim() ?? '';\n const isInteractive = (el: Element | null): boolean => {\n if (!el || !skipSelector) return false;\n return !!el.closest(skipSelector);\n };\n const handler = (e: Event) => {\n const me = e as MouseEvent;\n if (isInteractive(me.target as Element | null)) return;\n me.preventDefault();\n if (this._open) return;\n this.open({\n x: me.clientX,\n y: me.clientY,\n target: (me.target as Element | null) ?? undefined,\n originalEvent: me,\n });\n };\n window.addEventListener('contextmenu', handler, true);\n cleanups.push(() => window.removeEventListener('contextmenu', handler, true));\n this._detachTriggers = () => cleanups.forEach(fn => fn());\n return;\n }\n\n const target = this._targetEl;\n if (!target) return;\n\n const wantsContext = trigger === 'right' || trigger === 'both';\n const wantsClick = trigger === 'left' || trigger === 'both';\n\n if (wantsContext) {\n const handler = (e: Event) => {\n const me = e as MouseEvent;\n me.preventDefault();\n this.open({\n x: me.clientX,\n y: me.clientY,\n target,\n originalEvent: me,\n });\n };\n target.addEventListener('contextmenu', handler);\n cleanups.push(() => target.removeEventListener('contextmenu', handler));\n }\n\n if (wantsClick) {\n const handler = (e: Event) => {\n const me = e as MouseEvent;\n this.open({\n x: me.clientX,\n y: me.clientY,\n target,\n originalEvent: me,\n });\n };\n target.addEventListener('click', handler);\n cleanups.push(() => target.removeEventListener('click', handler));\n }\n\n if (cleanups.length === 0) return;\n this._detachTriggers = () => cleanups.forEach(fn => fn());\n }\n\n public override disconnectedCallback(): void {\n super.disconnectedCallback();\n NileContextMenu._openInstances.delete(this);\n this._open = false;\n this._detachTriggers?.();\n this._detachTriggers = undefined;\n this._lightObserver?.disconnect();\n this._lightObserver = undefined;\n this._menuObserver?.disconnect();\n this._menuObserver = undefined;\n this._menuContainerRef?.removeEventListener('click', this._onMenuClick);\n this._menuContainerRef?.removeEventListener('mouseover', this._onMenuMouseOver);\n this._menuContainerRef?.removeEventListener(\n 'nile-change',\n this._onDescendantSelect as EventListener,\n );\n document.removeEventListener('pointerdown', this._onOutsidePointer, true);\n document.removeEventListener('keydown', this._onKeydown, true);\n window.removeEventListener('scroll', this._onScroll, true);\n this._proxyEl?.remove();\n this._proxyEl = undefined;\n }\n\n private _menuContainerRef: HTMLDivElement | null = null;\n\n protected override firstUpdated(): void {\n this._menuContainerRef = this.renderRoot.querySelector('.nile-context-menu__menu') as HTMLDivElement | null;\n if (this._isDataMode) {\n this._renderDataItems();\n this._wasDataMode = true;\n } else {\n this._relocateLightChildren();\n }\n if (this._menuContainerRef) {\n this._menuObserver = new MutationObserver(() => this._parseChildren());\n this._menuObserver.observe(this._menuContainerRef, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: OBSERVED_ITEM_ATTRS,\n });\n this._menuContainerRef.addEventListener('click', this._onMenuClick);\n this._menuContainerRef.addEventListener('mouseover', this._onMenuMouseOver);\n this._menuContainerRef.addEventListener(\n 'nile-change',\n this._onDescendantSelect as EventListener,\n );\n }\n this._parseChildren();\n }\n\n private _ensureProxy(): void {\n if (this._proxyEl) return;\n const el = document.createElement('div');\n el.id = this._proxyId;\n el.setAttribute('aria-hidden', 'true');\n el.style.cssText =\n 'position: fixed; top: 0; left: 0; width: 0; height: 0; pointer-events: none;';\n document.body.appendChild(el);\n this._proxyEl = el;\n }\n\n private _positionProxyAt(x: number, y: number): void {\n if (!this._proxyEl) return;\n this._proxyEl.style.left = `${x}px`;\n this._proxyEl.style.top = `${y}px`;\n }\n\n private _relocateLightChildren(): void {\n if (!this._menuContainerRef) return;\n const kids = Array.from(this.children);\n if (kids.length === 0) return;\n for (const kid of kids) {\n this._menuContainerRef.appendChild(kid);\n }\n }\n\n private _renderDataItems(): void {\n const container = this._menuContainerRef;\n if (!container) return;\n while (container.firstChild) container.removeChild(container.firstChild);\n for (const entry of this.items) {\n const node = this._createDataNode(entry);\n if (node) container.appendChild(node);\n }\n }\n\n private _createDataNode(entry: NileContextMenuData): HTMLElement | null {\n if (entry.type === 'group') {\n const group = document.createElement('nile-context-menu-group') as NileContextMenuGroup;\n if (entry.name) group.label = entry.name;\n for (const item of entry.data ?? []) {\n group.appendChild(this._createItemNode(item));\n }\n return group;\n }\n return null;\n }\n\n private _createItemNode(data: NileContextMenuItemData): NileContextMenuItem {\n const item = document.createElement('nile-context-menu-item') as NileContextMenuItem;\n if (data.id) item.id = data.id;\n item.value = data.value ?? data.id ?? '';\n if (data.disabled) item.disabled = true;\n if (data.icon) {\n const glyph = document.createElement('nile-glyph');\n glyph.setAttribute('slot', 'icon');\n glyph.setAttribute('name', data.icon);\n if (data.iconSet) glyph.setAttribute('set', data.iconSet);\n if (data.iconSize) glyph.setAttribute('size', data.iconSize);\n if (data.iconMethod) glyph.setAttribute('method', data.iconMethod);\n if (data.iconColor) glyph.setAttribute('color', data.iconColor);\n item.appendChild(glyph);\n }\n item.appendChild(document.createTextNode(data.label));\n if (data.submenu && data.submenu.length > 0) {\n const submenu = document.createElement('nile-context-submenu');\n for (const entry of data.submenu) {\n const node = this._createDataNode(entry);\n if (node) submenu.appendChild(node);\n }\n item.appendChild(submenu);\n }\n return item;\n }\n\n private _parseChildren(): void {\n const root: Element = this._menuContainerRef ?? this;\n const all = Array.from(root.querySelectorAll(ITEM_TAG)) as NileContextMenuItem[];\n this._items = all.filter(item => !this._isInsideDescendantSubmenu(item, root));\n }\n\n private _isInsideDescendantSubmenu(item: Element, container: Element): boolean {\n let cur: Element | null = item.parentElement;\n while (cur && cur !== container) {\n if (cur.tagName.toLowerCase() === SUBMENU_TAG) return true;\n cur = cur.parentElement;\n }\n return false;\n }\n\n public get menuItems(): readonly NileContextMenuItem[] {\n return this._items;\n }\n\n public getItemByValue(value: string): NileContextMenuItem | undefined {\n return this._items.find(item => item.value === value);\n }\n\n public get isOpen(): boolean {\n return this._open;\n }\n\n public open(options: NileContextMenuOpenOptions): void {\n if (this._open) return;\n for (const other of NileContextMenu._openInstances) {\n if (other !== this) other.close('programmatic');\n }\n this._previouslyFocused = document.activeElement as HTMLElement | null;\n this._openContext = {\n x: options.x,\n y: options.y,\n target: options.target ?? null,\n originalEvent: options.originalEvent ?? null,\n };\n this._ensureProxy();\n this._positionProxyAt(options.x, options.y);\n this._open = true;\n NileContextMenu._openInstances.add(this);\n document.addEventListener('pointerdown', this._onOutsidePointer, true);\n document.addEventListener('keydown', this._onKeydown, true);\n requestAnimationFrame(() => {\n if (this._open) window.addEventListener('scroll', this._onScroll, true);\n });\n this.emit('nile-change', { type: 'open', ...this._openContext });\n }\n\n public close(reason: NileContextMenuCloseReason = 'programmatic'): void {\n if (!this._open) return;\n this._open = false;\n this._openContext = null;\n NileContextMenu._openInstances.delete(this);\n const subs = this._menuContainerRef?.querySelectorAll(SUBMENU_TAG);\n subs?.forEach(s => (s as unknown as { closeSubmenu?: () => void }).closeSubmenu?.());\n document.removeEventListener('pointerdown', this._onOutsidePointer, true);\n document.removeEventListener('keydown', this._onKeydown, true);\n window.removeEventListener('scroll', this._onScroll, true);\n const active = document.activeElement;\n const focusInMenu =\n active === this ||\n this._items.some(item => item === active || item.shadowRoot?.contains(active as Node));\n if (focusInMenu) {\n this._previouslyFocused?.focus?.();\n }\n this._previouslyFocused = null;\n this.emit('nile-change', { type: 'close', reason });\n }\n\n private _enabledItems(): NileContextMenuItem[] {\n return this._items.filter(item => !item.disabled);\n }\n\n private _getFocusedItem(): NileContextMenuItem | null {\n const active = document.activeElement;\n for (const item of this._items) {\n if (item === active || item.shadowRoot?.contains(active as Node)) return item;\n }\n return null;\n }\n\n private _getFocusedItemAnyLevel(): {\n item: NileContextMenuItem | null;\n container: Element | null;\n } {\n let node: Element | null = document.activeElement as Element | null;\n while (node && node.tagName?.toLowerCase() !== ITEM_TAG) {\n const root = node.getRootNode();\n node = root instanceof ShadowRoot ? root.host : node.parentElement;\n }\n if (!node) return { item: null, container: null };\n const container = node.closest(`.${MENU_CONTAINER_CLASS}`);\n return { item: node as NileContextMenuItem, container };\n }\n\n private _enabledItemsIn(container: Element): NileContextMenuItem[] {\n const all = Array.from(container.querySelectorAll(ITEM_TAG)) as NileContextMenuItem[];\n return all.filter(item => {\n if (item.disabled) return false;\n return !this._isInsideDescendantSubmenu(item, container);\n });\n }\n\n private _focusFirstEnabled(): void {\n const enabled = this._enabledItems();\n enabled[0]?.focus();\n }\n\n private _moveFocus(delta: number): void {\n const { item: focused, container } = this._getFocusedItemAnyLevel();\n const root: Element = container ?? this._menuContainerRef ?? this;\n const enabled = this._enabledItemsIn(root);\n if (enabled.length === 0) return;\n const current = focused ? enabled.indexOf(focused) : -1;\n const next = current + delta;\n const wrapped = ((next % enabled.length) + enabled.length) % enabled.length;\n enabled[wrapped].focus();\n }\n\n private _onKeydown = (e: KeyboardEvent): void => {\n if (!this._open) return;\n switch (e.key) {\n case 'Escape':\n e.preventDefault();\n this.close('escape');\n return;\n case 'Tab':\n this.close('programmatic');\n return;\n case 'ArrowDown':\n e.preventDefault();\n this._moveFocus(1);\n return;\n case 'ArrowUp':\n e.preventDefault();\n this._moveFocus(-1);\n return;\n case 'ArrowRight': {\n const { item } = this._getFocusedItemAnyLevel();\n const sub = item?.querySelector(`:scope > ${SUBMENU_TAG}`) as\n | (HTMLElement & { openSubmenu?: () => void })\n | null;\n if (!sub) return;\n e.preventDefault();\n sub.openSubmenu?.();\n requestAnimationFrame(() => {\n (sub as unknown as { focusFirstItem?: () => void }).focusFirstItem?.();\n });\n return;\n }\n case 'ArrowLeft': {\n const { item, container } = this._getFocusedItemAnyLevel();\n if (!item || !container) return;\n const sub = this._findSubmenuOwning(container);\n if (!sub) return;\n e.preventDefault();\n sub.closeSubmenu?.();\n sub.parentItem?.focus();\n return;\n }\n case 'Enter':\n case ' ': {\n e.preventDefault();\n const { item } = this._getFocusedItemAnyLevel();\n if (!item || item.disabled) return;\n const sub = item.querySelector(`:scope > ${SUBMENU_TAG}`) as\n | (HTMLElement & { openSubmenu?: () => void })\n | null;\n if (sub) {\n sub.openSubmenu?.();\n requestAnimationFrame(() => {\n const panel = sub.shadowRoot?.querySelector(`.${MENU_CONTAINER_CLASS}`);\n const first = panel\n ? (this._enabledItemsIn(panel)[0] as NileContextMenuItem | undefined)\n : undefined;\n first?.focus();\n });\n return;\n }\n this._selectItem(item);\n return;\n }\n }\n };\n\n private _findSubmenuOwning(container: Element):\n | (HTMLElement & { closeSubmenu?: () => void; parentItem?: NileContextMenuItem | null })\n | null {\n type SubCtor = {\n findByContainer?: (c: Element) => HTMLElement & {\n closeSubmenu?: () => void;\n parentItem?: NileContextMenuItem | null;\n } | null;\n };\n const customElements = window.customElements;\n const ctor = customElements.get(SUBMENU_TAG) as unknown as SubCtor | undefined;\n return ctor?.findByContainer?.(container) ?? null;\n }\n\n private _onScroll = (e: Event): void => {\n if (!this._open) return;\n const path = e.composedPath();\n // Scroll inside the root menu container?\n if (this._menuContainerRef && path.includes(this._menuContainerRef)) return;\n // Scroll inside any descendant submenu's portaled panel?\n for (const node of path) {\n if (node instanceof HTMLElement && node.classList?.contains(MENU_CONTAINER_CLASS)) {\n return;\n }\n }\n this.close('programmatic');\n };\n\n private _onOutsidePointer = (e: Event): void => {\n if (!this._open) return;\n const path = e.composedPath();\n if (this._menuContainerRef && path.includes(this._menuContainerRef)) return;\n for (const node of path) {\n if (\n node instanceof HTMLElement &&\n node.classList?.contains(MENU_CONTAINER_CLASS)\n ) {\n return;\n }\n }\n this.close('outside-click');\n };\n\n private _onDescendantSelect = (e: CustomEvent): void => {\n if (e.detail?.type !== 'click') return;\n this.close('select');\n };\n private _stop(e: Event): void {\n e.stopPropagation();\n }\n\n private _onPanelShown = (e: Event): void => {\n e.stopPropagation();\n };\n\n private _onMenuMouseOver = (e: MouseEvent): void => {\n const item = e\n .composedPath()\n .find(\n node =>\n node instanceof HTMLElement &&\n node.tagName.toLowerCase() === ITEM_TAG\n ) as NileContextMenuItem | undefined;\n if (!item || item.disabled) return;\n item.focus();\n };\n\n private _onMenuClick = (e: MouseEvent): void => {\n const item = e\n .composedPath()\n .find(\n node =>\n node instanceof HTMLElement &&\n node.tagName.toLowerCase() === ITEM_TAG\n ) as NileContextMenuItem | undefined;\n\n if (!item || item.disabled) return;\n if (item.querySelector(`:scope > ${SUBMENU_TAG}`)) return;\n this._selectItem(item);\n };\n\n private _selectItem(item: NileContextMenuItem): void {\n const detail = {\n id: item.id,\n value: item.value,\n name: (item.textContent ?? '').trim(),\n target: this._openContext?.target ?? null,\n originalEvent: this._openContext?.originalEvent ?? null,\n };\n try {\n item.onSelect?.(detail);\n } catch (err) {\n console.error('[nile-context-menu] onSelect callback threw:', err);\n }\n this.emit('nile-change', { type: 'click', ...detail });\n this.close('select');\n }\n\n public render(): TemplateResult {\n return html`\n <nile-floating-panel\n for=${this._proxyId}\n trigger=\"manual\"\n placement=\"bottom-start\"\n panelClass=\"nile-context-menu-panel\"\n .zIndex=${this.zIndex}\n ?open=${this._open}\n .interactive=${true}\n .hideOnClick=${false}\n .closeOnEscape=${false}\n .arrow=${'none'}\n .distance=${0}\n @nile-init=${this._stop}\n @nile-destroy=${this._stop}\n @nile-show=${this._stop}\n @nile-hide=${this._stop}\n @nile-after-show=${this._onPanelShown}\n @nile-after-hide=${this._stop}\n @nile-toggle=${this._stop}\n @nile-visibility-change=${this._stop}\n >\n <div class=\"nile-context-menu__menu\" role=\"menu\"></div>\n </nile-floating-panel>\n `;\n }\n}\n\nexport default NileContextMenu;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-context-menu': NileContextMenu;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"nile-context-menu.js","sourceRoot":"","sources":["../../../src/nile-context-menu/nile-context-menu.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright Aquera Inc 2026\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 { html, CSSResultArray, TemplateResult } from 'lit';\nimport type { PropertyValues } from 'lit';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { styles } from './nile-context-menu.css';\nimport NileElement from '../internal/nile-element';\nimport type { NileContextMenuItem } from '../nile-context-menu-item';\nimport type { NileContextMenuGroup } from '../nile-context-menu-group';\nimport '../nile-floating-panel';\nimport '../nile-context-menu-group';\nimport '../nile-context-menu-item';\nimport '../nile-context-submenu';\n\n// Data-driven menu entry\nexport interface NileContextMenuItemData {\n type: 'item';\n id: string;\n label: string;\n value?: string;\n disabled?: boolean;\n icon?: string;\n iconSet?: string;\n iconSize?: string;\n iconMethod?: 'fill' | 'stroke' | string;\n iconColor?: string;\n submenu?: NileContextMenuData[];\n open?: boolean;\n}\n\nexport interface NileContextMenuGroupData {\n type: 'group';\n name?: string;\n data: NileContextMenuItemData[];\n}\n\nexport type NileContextMenuData = NileContextMenuGroupData;\n\nconst ITEM_TAG = 'nile-context-menu-item';\nconst SUBMENU_TAG = 'nile-context-submenu';\nconst MENU_CONTAINER_CLASS = 'nile-context-menu__menu';\nconst OBSERVED_ITEM_ATTRS = ['value', 'disabled'];\n\nexport type NileContextMenuTrigger = 'right' | 'left' | 'both' | 'manual' | 'global';\n\nexport interface NileContextMenuOpenOptions {\n x: number;\n y: number;\n target?: Element;\n originalEvent?: Event;\n}\n\nexport type NileContextMenuCloseReason =\n | 'select'\n | 'outside-click'\n | 'escape'\n | 'programmatic';\n\ninterface NileContextMenuOpenContext {\n x: number;\n y: number;\n target: Element | null;\n originalEvent: Event | null;\n}\n\nlet proxyIdSeq = 0;\n\n/**\n * Nile context-menu component.\n *\n * @tag nile-context-menu\n *\n * @slot Default menu content.\n *\n * @event nile-change Fired on menu lifecycle and selection. `detail.type` is one of\n * `'open'`, `'click'`, or `'close'`; remaining fields depend on the type.\n */\n@customElement('nile-context-menu')\nexport class NileContextMenu extends NileElement {\n public static get styles(): CSSResultArray {\n return [styles];\n }\n\n \n @property({ attribute: true, type: String, reflect: true }) for = '';\n \n @property({ attribute: true, type: String, reflect: true }) trigger: NileContextMenuTrigger = 'right';\n \n @property({ attribute: true, type: String, reflect: true }) skipOn = '';\n \n @property({ attribute: true, type: Number, reflect: true }) zIndex = 9999;\n\n @property({ attribute: true, type: Boolean, reflect: true }) open = false;\n\n @property({ attribute: false }) public items: NileContextMenuData[] = [];\n \n private get _isDataMode(): boolean {\n return Array.isArray(this.items) && this.items.length > 0;\n }\n @query('nile-floating-panel') private _floatingPanel?: HTMLElement;\n \n @state() private _items: NileContextMenuItem[] = [];\n\n @state() private _open = false;\n\n private _pinned = false;\n\n protected _openContext: NileContextMenuOpenContext | null = null;\n \n protected _targetEl: Element | null = null;\n \n private _previouslyFocused: HTMLElement | null = null;\n \n private static _openInstances = new Set<NileContextMenu>();\n \n private _detachTriggers?: () => void;\n private _lightObserver?: MutationObserver;\n private _menuObserver?: MutationObserver;\n \n private _proxyEl?: HTMLDivElement;\n private readonly _proxyId = `nile-context-menu-anchor-${++proxyIdSeq}`;\n \n private _wasDataMode = false;\n\n public override connectedCallback(): void {\n super.connectedCallback();\n this._ensureProxy();\n this._resolveTarget();\n this._attachTriggers();\n this._lightObserver = new MutationObserver(() => {\n if (this._isDataMode) return;\n this._relocateLightChildren();\n });\n this._lightObserver.observe(this, { childList: true });\n // Restore a declaratively-opened menu after a disconnect/reconnect.\n if (this.open && !this._open) {\n this.updateComplete.then(() => {\n if (this.isConnected && this.open && !this._open) {\n this._pinned = true;\n this._openAtTarget();\n }\n });\n }\n }\n\n protected override updated(changed: PropertyValues): void {\n super.updated(changed);\n if ((changed.has('for') || changed.has('trigger') || changed.has('skipOn')) && this._open) {\n this.close('programmatic');\n }\n if (changed.has('for')) {\n this._resolveTarget();\n this._attachTriggers();\n } else if (changed.has('trigger') || changed.has('skipOn')) {\n this._attachTriggers();\n }\n if (changed.has('items') && this._menuContainerRef) {\n if (this._isDataMode) {\n this._renderDataItems();\n this._wasDataMode = true;\n } else if (this._wasDataMode) {\n this._renderDataItems();\n this._wasDataMode = false;\n }\n }\n if (changed.has('open')) {\n if (this.open && !this._open) {\n this._pinned = true;\n this._openAtTarget();\n } else if (!this.open && this._open) {\n this.close('programmatic');\n }\n }\n }\n\n /** Open anchored to the `for` target (used when the `open` property is set). */\n private _openAtTarget(): void {\n const rect = this._targetEl?.getBoundingClientRect();\n this.openAt({\n x: rect ? rect.left : 0,\n y: rect ? rect.bottom : 0,\n target: this._targetEl ?? undefined,\n });\n }\n\n /** Re-anchor a pinned menu to its target after layout changes. */\n private _onPinnedReposition = (): void => {\n if (!this._open || !this._pinned || !this._targetEl) return;\n const rect = this._targetEl.getBoundingClientRect();\n this._positionProxyAt(rect.left, rect.bottom);\n };\n\n private _resolveTarget(): void {\n const value = this.for?.trim();\n if (!value) {\n this._targetEl = null;\n return;\n }\n const root = (this.getRootNode() as Document | ShadowRoot) ?? document;\n if (/^[#.\\[:]/.test(value)) {\n this._targetEl = (root as ParentNode).querySelector(value);\n } else if ('getElementById' in root) {\n this._targetEl = (root as Document | ShadowRoot).getElementById(value);\n } else {\n this._targetEl = document.getElementById(value);\n }\n }\n\n public get targetElement(): Element | null {\n return this._targetEl;\n }\n\n private _attachTriggers(): void {\n this._detachTriggers?.();\n this._detachTriggers = undefined;\n\n const trigger = this.trigger;\n if (trigger === 'manual') return;\n\n const cleanups: Array<() => void> = [];\n\n if (trigger === 'global') {\n const skipSelector = this.skipOn?.trim() ?? '';\n const isInteractive = (el: Element | null): boolean => {\n if (!el || !skipSelector) return false;\n return !!el.closest(skipSelector);\n };\n const handler = (e: Event) => {\n const me = e as MouseEvent;\n if (isInteractive(me.target as Element | null)) return;\n me.preventDefault();\n if (this._open) return;\n this.openAt({\n x: me.clientX,\n y: me.clientY,\n target: (me.target as Element | null) ?? undefined,\n originalEvent: me,\n });\n };\n window.addEventListener('contextmenu', handler, true);\n cleanups.push(() => window.removeEventListener('contextmenu', handler, true));\n this._detachTriggers = () => cleanups.forEach(fn => fn());\n return;\n }\n\n const target = this._targetEl;\n if (!target) return;\n\n const wantsContext = trigger === 'right' || trigger === 'both';\n const wantsClick = trigger === 'left' || trigger === 'both';\n\n if (wantsContext) {\n const handler = (e: Event) => {\n const me = e as MouseEvent;\n me.preventDefault();\n this.openAt({\n x: me.clientX,\n y: me.clientY,\n target,\n originalEvent: me,\n });\n };\n target.addEventListener('contextmenu', handler);\n cleanups.push(() => target.removeEventListener('contextmenu', handler));\n }\n\n if (wantsClick) {\n const handler = (e: Event) => {\n const me = e as MouseEvent;\n this.openAt({\n x: me.clientX,\n y: me.clientY,\n target,\n originalEvent: me,\n });\n };\n target.addEventListener('click', handler);\n cleanups.push(() => target.removeEventListener('click', handler));\n }\n\n if (cleanups.length === 0) return;\n this._detachTriggers = () => cleanups.forEach(fn => fn());\n }\n\n public override disconnectedCallback(): void {\n super.disconnectedCallback();\n NileContextMenu._openInstances.delete(this);\n this._open = false;\n this._detachTriggers?.();\n this._detachTriggers = undefined;\n this._lightObserver?.disconnect();\n this._lightObserver = undefined;\n this._menuObserver?.disconnect();\n this._menuObserver = undefined;\n this._menuContainerRef?.removeEventListener('click', this._onMenuClick);\n this._menuContainerRef?.removeEventListener('mouseover', this._onMenuMouseOver);\n this._menuContainerRef?.removeEventListener(\n 'nile-change',\n this._onDescendantSelect as EventListener,\n );\n document.removeEventListener('pointerdown', this._onOutsidePointer, true);\n document.removeEventListener('keydown', this._onKeydown, true);\n window.removeEventListener('scroll', this._onScroll, true);\n window.removeEventListener('resize', this._onPinnedReposition);\n this._proxyEl?.remove();\n this._proxyEl = undefined;\n }\n\n private _menuContainerRef: HTMLDivElement | null = null;\n\n protected override firstUpdated(): void {\n this._menuContainerRef = this.renderRoot.querySelector('.nile-context-menu__menu') as HTMLDivElement | null;\n if (this._isDataMode) {\n this._renderDataItems();\n this._wasDataMode = true;\n } else {\n this._relocateLightChildren();\n }\n if (this._menuContainerRef) {\n this._menuObserver = new MutationObserver(() => this._parseChildren());\n this._menuObserver.observe(this._menuContainerRef, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: OBSERVED_ITEM_ATTRS,\n });\n this._menuContainerRef.addEventListener('click', this._onMenuClick);\n this._menuContainerRef.addEventListener('mouseover', this._onMenuMouseOver);\n this._menuContainerRef.addEventListener(\n 'nile-change',\n this._onDescendantSelect as EventListener,\n );\n }\n this._parseChildren();\n }\n\n private _ensureProxy(): void {\n if (this._proxyEl) return;\n const el = document.createElement('div');\n el.id = this._proxyId;\n el.setAttribute('aria-hidden', 'true');\n el.style.cssText =\n 'position: fixed; top: 0; left: 0; width: 0; height: 0; pointer-events: none;';\n document.body.appendChild(el);\n this._proxyEl = el;\n }\n\n private _positionProxyAt(x: number, y: number): void {\n if (!this._proxyEl) return;\n if (this._pinned && this._targetEl) {\n // menu attaches below it pinned menus (or flips cleanly above it)\n const rect = this._targetEl.getBoundingClientRect();\n this._proxyEl.style.position = 'absolute';\n this._proxyEl.style.left = `${rect.left + window.scrollX}px`;\n this._proxyEl.style.top = `${rect.top + window.scrollY}px`;\n this._proxyEl.style.width = `${rect.width}px`;\n this._proxyEl.style.height = `${rect.height}px`;\n return;\n }\n this._proxyEl.style.position = 'fixed';\n this._proxyEl.style.left = `${x}px`;\n this._proxyEl.style.top = `${y}px`;\n this._proxyEl.style.width = '0';\n this._proxyEl.style.height = '0';\n }\n\n private _relocateLightChildren(): void {\n if (!this._menuContainerRef) return;\n const kids = Array.from(this.children);\n if (kids.length === 0) return;\n for (const kid of kids) {\n this._menuContainerRef.appendChild(kid);\n }\n }\n\n private _renderDataItems(): void {\n const container = this._menuContainerRef;\n if (!container) return;\n while (container.firstChild) container.removeChild(container.firstChild);\n for (const entry of this.items) {\n const node = this._createDataNode(entry);\n if (node) container.appendChild(node);\n }\n }\n\n private _createDataNode(entry: NileContextMenuData): HTMLElement | null {\n if (entry.type === 'group') {\n const group = document.createElement('nile-context-menu-group') as NileContextMenuGroup;\n if (entry.name) group.label = entry.name;\n for (const item of entry.data ?? []) {\n group.appendChild(this._createItemNode(item));\n }\n return group;\n }\n return null;\n }\n\n private _createItemNode(data: NileContextMenuItemData): NileContextMenuItem {\n const item = document.createElement('nile-context-menu-item') as NileContextMenuItem;\n if (data.id) item.id = data.id;\n item.value = data.value ?? data.id ?? '';\n if (data.disabled) item.disabled = true;\n if (data.open) item.open = true;\n if (data.icon) {\n const glyph = document.createElement('nile-glyph');\n glyph.setAttribute('slot', 'icon');\n glyph.setAttribute('name', data.icon);\n if (data.iconSet) glyph.setAttribute('set', data.iconSet);\n if (data.iconSize) glyph.setAttribute('size', data.iconSize);\n if (data.iconMethod) glyph.setAttribute('method', data.iconMethod);\n if (data.iconColor) glyph.setAttribute('color', data.iconColor);\n item.appendChild(glyph);\n }\n item.appendChild(document.createTextNode(data.label));\n if (data.submenu && data.submenu.length > 0) {\n const submenu = document.createElement('nile-context-submenu');\n for (const entry of data.submenu) {\n const node = this._createDataNode(entry);\n if (node) submenu.appendChild(node);\n }\n item.appendChild(submenu);\n }\n return item;\n }\n\n private _parseChildren(): void {\n const root: Element = this._menuContainerRef ?? this;\n const all = Array.from(root.querySelectorAll(ITEM_TAG)) as NileContextMenuItem[];\n this._items = all.filter(item => !this._isInsideDescendantSubmenu(item, root));\n }\n\n private _isInsideDescendantSubmenu(item: Element, container: Element): boolean {\n let cur: Element | null = item.parentElement;\n while (cur && cur !== container) {\n if (cur.tagName.toLowerCase() === SUBMENU_TAG) return true;\n cur = cur.parentElement;\n }\n return false;\n }\n\n public get menuItems(): readonly NileContextMenuItem[] {\n return this._items;\n }\n\n public getItemByValue(value: string): NileContextMenuItem | undefined {\n return this._items.find(item => item.value === value);\n }\n\n public get isOpen(): boolean {\n return this._open;\n }\n\n public openAt(options: NileContextMenuOpenOptions): void {\n if (this._open) return;\n for (const other of NileContextMenu._openInstances) {\n if (other !== this) other.close('programmatic');\n }\n this._previouslyFocused = document.activeElement as HTMLElement | null;\n this._openContext = {\n x: options.x,\n y: options.y,\n target: options.target ?? null,\n originalEvent: options.originalEvent ?? null,\n };\n this._ensureProxy();\n this._positionProxyAt(options.x, options.y);\n this._open = true;\n this.open = true;\n NileContextMenu._openInstances.add(this);\n document.addEventListener('pointerdown', this._onOutsidePointer, true);\n document.addEventListener('keydown', this._onKeydown, true);\n if (this._pinned) window.addEventListener('resize', this._onPinnedReposition);\n requestAnimationFrame(() => {\n if (this._open) window.addEventListener('scroll', this._onScroll, true);\n requestAnimationFrame(() => this._openPinnedSubmenus());\n });\n this.emit('nile-change', { type: 'open', ...this._openContext });\n }\n\n public close(reason: NileContextMenuCloseReason = 'programmatic'): void {\n if (!this._open) return;\n this._open = false;\n this.open = false;\n this._pinned = false;\n this._openContext = null;\n NileContextMenu._openInstances.delete(this);\n const subs = this._menuContainerRef?.querySelectorAll(SUBMENU_TAG);\n subs?.forEach(s => (s as unknown as { closeSubmenu?: () => void }).closeSubmenu?.());\n document.removeEventListener('pointerdown', this._onOutsidePointer, true);\n document.removeEventListener('keydown', this._onKeydown, true);\n window.removeEventListener('scroll', this._onScroll, true);\n window.removeEventListener('resize', this._onPinnedReposition);\n const active = document.activeElement;\n const focusInMenu =\n active === this ||\n this._items.some(item => item === active || item.shadowRoot?.contains(active as Node));\n if (focusInMenu) {\n this._previouslyFocused?.focus?.();\n }\n this._previouslyFocused = null;\n this.emit('nile-change', { type: 'close', reason });\n }\n\n private _enabledItems(): NileContextMenuItem[] {\n return this._items.filter(item => !item.disabled);\n }\n\n private _getFocusedItem(): NileContextMenuItem | null {\n const active = document.activeElement;\n for (const item of this._items) {\n if (item === active || item.shadowRoot?.contains(active as Node)) return item;\n }\n return null;\n }\n\n private _getFocusedItemAnyLevel(): {\n item: NileContextMenuItem | null;\n container: Element | null;\n } {\n let node: Element | null = document.activeElement as Element | null;\n while (node && node.tagName?.toLowerCase() !== ITEM_TAG) {\n const root = node.getRootNode();\n node = root instanceof ShadowRoot ? root.host : node.parentElement;\n }\n if (!node) return { item: null, container: null };\n const container = node.closest(`.${MENU_CONTAINER_CLASS}`);\n return { item: node as NileContextMenuItem, container };\n }\n\n private _enabledItemsIn(container: Element): NileContextMenuItem[] {\n const all = Array.from(container.querySelectorAll(ITEM_TAG)) as NileContextMenuItem[];\n return all.filter(item => {\n if (item.disabled) return false;\n return !this._isInsideDescendantSubmenu(item, container);\n });\n }\n\n private _focusFirstEnabled(): void {\n const enabled = this._enabledItems();\n enabled[0]?.focus();\n }\n\n private _moveFocus(delta: number): void {\n const { item: focused, container } = this._getFocusedItemAnyLevel();\n const root: Element = container ?? this._menuContainerRef ?? this;\n const enabled = this._enabledItemsIn(root);\n if (enabled.length === 0) return;\n const current = focused ? enabled.indexOf(focused) : -1;\n const next = current + delta;\n const wrapped = ((next % enabled.length) + enabled.length) % enabled.length;\n enabled[wrapped].focus();\n }\n\n private _onKeydown = (e: KeyboardEvent): void => {\n if (!this._open) return;\n switch (e.key) {\n case 'Escape':\n e.preventDefault();\n this.close('escape');\n return;\n case 'Tab':\n this.close('programmatic');\n return;\n case 'ArrowDown':\n e.preventDefault();\n this._moveFocus(1);\n return;\n case 'ArrowUp':\n e.preventDefault();\n this._moveFocus(-1);\n return;\n case 'ArrowRight': {\n const { item } = this._getFocusedItemAnyLevel();\n const sub = item?.querySelector(`:scope > ${SUBMENU_TAG}`) as\n | (HTMLElement & { openSubmenu?: () => void })\n | null;\n if (!sub) return;\n e.preventDefault();\n sub.openSubmenu?.();\n requestAnimationFrame(() => {\n (sub as unknown as { focusFirstItem?: () => void }).focusFirstItem?.();\n });\n return;\n }\n case 'ArrowLeft': {\n const { item, container } = this._getFocusedItemAnyLevel();\n if (!item || !container) return;\n const sub = this._findSubmenuOwning(container);\n if (!sub) return;\n e.preventDefault();\n // Pinned submenus (parent item has `open`) stay open; just move focus.\n if (!sub.parentItem?.open) sub.closeSubmenu?.();\n sub.parentItem?.focus();\n return;\n }\n case 'Enter':\n case ' ': {\n e.preventDefault();\n const { item } = this._getFocusedItemAnyLevel();\n if (!item || item.disabled) return;\n const sub = item.querySelector(`:scope > ${SUBMENU_TAG}`) as\n | (HTMLElement & { openSubmenu?: () => void })\n | null;\n if (sub) {\n sub.openSubmenu?.();\n requestAnimationFrame(() => {\n const panel = sub.shadowRoot?.querySelector(`.${MENU_CONTAINER_CLASS}`);\n const first = panel\n ? (this._enabledItemsIn(panel)[0] as NileContextMenuItem | undefined)\n : undefined;\n first?.focus();\n });\n return;\n }\n this._selectItem(item);\n return;\n }\n }\n };\n\n private _findSubmenuOwning(container: Element):\n | (HTMLElement & { closeSubmenu?: () => void; parentItem?: NileContextMenuItem | null })\n | null {\n type SubCtor = {\n findByContainer?: (c: Element) => HTMLElement & {\n closeSubmenu?: () => void;\n parentItem?: NileContextMenuItem | null;\n } | null;\n };\n const customElements = window.customElements;\n const ctor = customElements.get(SUBMENU_TAG) as unknown as SubCtor | undefined;\n return ctor?.findByContainer?.(container) ?? null;\n }\n\n private _onScroll = (e: Event): void => {\n if (!this._open) return;\n if (this._pinned) {\n this._onPinnedReposition();\n return;\n }\n const path = e.composedPath();\n // Scroll inside the root menu container?\n if (this._menuContainerRef && path.includes(this._menuContainerRef)) return;\n // Scroll inside any descendant submenu's portaled panel?\n for (const node of path) {\n if (node instanceof HTMLElement && node.classList?.contains(MENU_CONTAINER_CLASS)) {\n return;\n }\n }\n this.close('programmatic');\n };\n\n private _onOutsidePointer = (e: Event): void => {\n if (!this._open) return;\n const path = e.composedPath();\n if (this._menuContainerRef && path.includes(this._menuContainerRef)) return;\n for (const node of path) {\n if (\n node instanceof HTMLElement &&\n node.classList?.contains(MENU_CONTAINER_CLASS)\n ) {\n return;\n }\n }\n this.close('outside-click');\n };\n\n private _onDescendantSelect = (e: CustomEvent): void => {\n if (e.detail?.type !== 'click') return;\n this.close('select');\n };\n private _stop(e: Event): void {\n e.stopPropagation();\n }\n\n private _onPanelShown = (e: Event): void => {\n e.stopPropagation();\n this._openPinnedSubmenus();\n };\n\n /** Open the submenu of every top-level item carrying the `open` attribute. */\n private _openPinnedSubmenus(): void {\n if (!this._open || !this._menuContainerRef) return;\n for (const item of this._items) {\n if (!item.open || item.disabled) continue;\n const sub = item.querySelector(`:scope > ${SUBMENU_TAG}`) as\n | (HTMLElement & { openSubmenu?: () => void })\n | null;\n sub?.openSubmenu?.();\n }\n }\n\n private _onMenuMouseOver = (e: MouseEvent): void => {\n const item = e\n .composedPath()\n .find(\n node =>\n node instanceof HTMLElement &&\n node.tagName.toLowerCase() === ITEM_TAG\n ) as NileContextMenuItem | undefined;\n if (!item || item.disabled) return;\n item.focus();\n };\n\n private _onMenuClick = (e: MouseEvent): void => {\n const item = e\n .composedPath()\n .find(\n node =>\n node instanceof HTMLElement &&\n node.tagName.toLowerCase() === ITEM_TAG\n ) as NileContextMenuItem | undefined;\n\n if (!item || item.disabled) return;\n if (item.querySelector(`:scope > ${SUBMENU_TAG}`)) return;\n this._selectItem(item);\n };\n\n private _selectItem(item: NileContextMenuItem): void {\n const detail = {\n id: item.id,\n value: item.value,\n name: (item.textContent ?? '').trim(),\n target: this._openContext?.target ?? null,\n originalEvent: this._openContext?.originalEvent ?? null,\n };\n try {\n item.onSelect?.(detail);\n } catch (err) {\n console.error('[nile-context-menu] onSelect callback threw:', err);\n }\n this.emit('nile-change', { type: 'click', ...detail });\n this.close('select');\n }\n\n public render(): TemplateResult {\n return html`\n <nile-floating-panel\n for=${this._proxyId}\n trigger=\"manual\"\n placement=\"bottom-start\"\n panelClass=\"nile-context-menu-panel\"\n .zIndex=${this.zIndex}\n ?open=${this._open}\n .interactive=${true}\n .hideOnClick=${false}\n .closeOnEscape=${false}\n .arrow=${'none'}\n .distance=${0}\n @nile-init=${this._stop}\n @nile-destroy=${this._stop}\n @nile-show=${this._stop}\n @nile-hide=${this._stop}\n @nile-after-show=${this._onPanelShown}\n @nile-after-hide=${this._stop}\n @nile-toggle=${this._stop}\n @nile-visibility-change=${this._stop}\n >\n <div class=\"nile-context-menu__menu\" role=\"menu\"></div>\n </nile-floating-panel>\n `;\n }\n}\n\nexport default NileContextMenu;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-context-menu': NileContextMenu;\n }\n}\n"]}
|
|
@@ -22,6 +22,7 @@ let NileContextMenuItem = class NileContextMenuItem extends NileElement {
|
|
|
22
22
|
super(...arguments);
|
|
23
23
|
this.value = '';
|
|
24
24
|
this.disabled = false;
|
|
25
|
+
this.open = false;
|
|
25
26
|
this._hasSubmenu = false;
|
|
26
27
|
this._hasIcon = false;
|
|
27
28
|
this._submenuExpanded = false;
|
|
@@ -66,7 +67,7 @@ let NileContextMenuItem = class NileContextMenuItem extends NileElement {
|
|
|
66
67
|
<span part="label" class="label"><slot @slotchange=${this._onSlotChange}></slot></span>
|
|
67
68
|
${this._hasSubmenu
|
|
68
69
|
? html `<span part="chevron" class="chevron" aria-hidden="true">
|
|
69
|
-
<nile-glyph name="ng-chevron-right" size="16"></nile-glyph>
|
|
70
|
+
<nile-glyph name="ng-chevron-right" size="16" method="stroke"></nile-glyph>
|
|
70
71
|
</span>`
|
|
71
72
|
: ''}
|
|
72
73
|
</div>
|
|
@@ -79,6 +80,9 @@ __decorate([
|
|
|
79
80
|
__decorate([
|
|
80
81
|
property({ attribute: true, type: Boolean, reflect: true })
|
|
81
82
|
], NileContextMenuItem.prototype, "disabled", void 0);
|
|
83
|
+
__decorate([
|
|
84
|
+
property({ attribute: true, type: Boolean, reflect: true })
|
|
85
|
+
], NileContextMenuItem.prototype, "open", void 0);
|
|
82
86
|
__decorate([
|
|
83
87
|
state()
|
|
84
88
|
], NileContextMenuItem.prototype, "_hasSubmenu", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nile-context-menu-item.js","sourceRoot":"","sources":["../../../src/nile-context-menu-item/nile-context-menu-item.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;;AAEH,OAAO,EAAE,IAAI,EAAkC,OAAO,EAAE,MAAM,KAAK,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AACtD,OAAO,WAAW,MAAM,0BAA0B,CAAC;AAenD;;;;;;;GAOG;AAEI,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,WAAW;IAA7C;;QAKuD,UAAK,GAAG,EAAE,CAAC;QAEV,aAAQ,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"nile-context-menu-item.js","sourceRoot":"","sources":["../../../src/nile-context-menu-item/nile-context-menu-item.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright Aquera Inc 2026\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 { html, CSSResultArray, TemplateResult, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { styles } from './nile-context-menu-item.css';\nimport NileElement from '../internal/nile-element';\n\n//Data passed to an item's `onSelect` callback. Matches the `nile-context-menu:select` event detail.\nexport interface NileContextMenuItemSelectDetail {\n id: string;\n value: string;\n name: string;\n target: Element | null;\n originalEvent: Event | null;\n}\n\nexport type NileContextMenuItemSelectHandler = (\n detail: NileContextMenuItemSelectDetail\n) => void;\n\n/**\n * Nile context-menu item. A clickable entry inside `nile-context-menu`.\n *\n * @tag nile-context-menu-item\n *\n * @slot - Default slot for the visible label.\n * @slot icon - Optional leading icon (e.g. a `<nile-glyph slot=\"icon\">`).\n */\n@customElement('nile-context-menu-item')\nexport class NileContextMenuItem extends NileElement {\n public static get styles(): CSSResultArray {\n return [styles];\n }\n\n @property({ attribute: true, type: String, reflect: true }) value = '';\n\n @property({ attribute: true, type: Boolean, reflect: true }) disabled = false;\n\n @property({ attribute: true, type: Boolean, reflect: true }) open = false;\n\n public onSelect?: NileContextMenuItemSelectHandler;\n\n @state() private _hasSubmenu = false;\n\n @state() private _hasIcon = false;\n\n @state() private _submenuExpanded = false;\n\n public setSubmenuExpanded(expanded: boolean): void {\n this._submenuExpanded = expanded;\n }\n\n public override focus(options?: FocusOptions): void {\n const inner = this.shadowRoot?.querySelector('.item') as HTMLElement | null;\n inner?.focus(options);\n }\n\n public get hasSubmenu(): boolean {\n return this._hasSubmenu;\n }\n\n private _onSlotChange = (e: Event): void => {\n const slot = e.target as HTMLSlotElement;\n const nodes = slot.assignedElements({ flatten: true });\n this._hasSubmenu = nodes.some(\n n => n.tagName.toLowerCase() === 'nile-context-submenu'\n );\n };\n\n private _onIconSlotChange = (e: Event): void => {\n const slot = e.target as HTMLSlotElement;\n this._hasIcon = slot.assignedNodes({ flatten: true }).some(\n n => n.nodeType === Node.ELEMENT_NODE || (n.textContent ?? '').trim() !== ''\n );\n };\n\n public render(): TemplateResult {\n return html`\n <div\n part=\"item\"\n class=\"item\"\n role=\"menuitem\"\n tabindex=\"-1\"\n aria-disabled=${this.disabled ? 'true' : 'false'}\n aria-haspopup=${this._hasSubmenu ? 'menu' : nothing}\n aria-expanded=${this._hasSubmenu ? String(this._submenuExpanded) : nothing}\n data-has-submenu=${this._hasSubmenu ? 'true' : 'false'}\n >\n <span part=\"icon\" class=\"icon\" data-empty=${this._hasIcon ? 'false' : 'true'}>\n <slot name=\"icon\" @slotchange=${this._onIconSlotChange}></slot>\n </span>\n <span part=\"label\" class=\"label\"><slot @slotchange=${this._onSlotChange}></slot></span>\n ${this._hasSubmenu\n ? html`<span part=\"chevron\" class=\"chevron\" aria-hidden=\"true\">\n <nile-glyph name=\"ng-chevron-right\" size=\"16\" method=\"stroke\"></nile-glyph>\n </span>`\n : ''}\n </div>\n `;\n }\n}\n\nexport default NileContextMenuItem;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-context-menu-item': NileContextMenuItem;\n }\n}\n"]}
|
|
@@ -25,7 +25,11 @@ export declare class NileContextSubmenu extends NileElement {
|
|
|
25
25
|
private _openTimer?;
|
|
26
26
|
private _closeTimer?;
|
|
27
27
|
private _setupDone;
|
|
28
|
+
private _parentObserver?;
|
|
29
|
+
private _repositionQueued;
|
|
30
|
+
private get _pinnedOpen();
|
|
28
31
|
connectedCallback(): void;
|
|
32
|
+
private _isParentVisible;
|
|
29
33
|
private _ensureProxy;
|
|
30
34
|
private _syncProxyToParent;
|
|
31
35
|
disconnectedCallback(): void;
|
|
@@ -38,8 +42,13 @@ export declare class NileContextSubmenu extends NileElement {
|
|
|
38
42
|
private _onParentLeave;
|
|
39
43
|
private _onParentClick;
|
|
40
44
|
private _onPanelEnter;
|
|
45
|
+
private _onReposition;
|
|
41
46
|
private _onPanelLeave;
|
|
42
47
|
openSubmenu(): void;
|
|
48
|
+
/** Open the submenu of every direct child item carrying the `open` attribute. */
|
|
49
|
+
private _openPinnedDescendants;
|
|
50
|
+
/** True if `item` sits at this submenu's own level (not inside a deeper submenu). */
|
|
51
|
+
private _isDirectChildItem;
|
|
43
52
|
closeSubmenu(): void;
|
|
44
53
|
get isOpen(): boolean;
|
|
45
54
|
static findByContainer(container: Element): NileContextSubmenu | null;
|
|
@@ -28,6 +28,7 @@ let NileContextSubmenu = NileContextSubmenu_1 = class NileContextSubmenu extends
|
|
|
28
28
|
this._proxyId = `nile-context-submenu-anchor-${++submenuIdSeq}`;
|
|
29
29
|
this._menuContainerRef = null;
|
|
30
30
|
this._setupDone = false;
|
|
31
|
+
this._repositionQueued = false;
|
|
31
32
|
this._onParentEnter = () => {
|
|
32
33
|
if (this._parentItem?.disabled)
|
|
33
34
|
return;
|
|
@@ -41,6 +42,8 @@ let NileContextSubmenu = NileContextSubmenu_1 = class NileContextSubmenu extends
|
|
|
41
42
|
clearTimeout(this._openTimer);
|
|
42
43
|
this._openTimer = undefined;
|
|
43
44
|
}
|
|
45
|
+
if (this._pinnedOpen)
|
|
46
|
+
return;
|
|
44
47
|
if (this._open) {
|
|
45
48
|
this._closeTimer = window.setTimeout(() => this.closeSubmenu(), HOVER_CLOSE_DELAY);
|
|
46
49
|
}
|
|
@@ -50,15 +53,33 @@ let NileContextSubmenu = NileContextSubmenu_1 = class NileContextSubmenu extends
|
|
|
50
53
|
if (this._parentItem?.disabled)
|
|
51
54
|
return;
|
|
52
55
|
this._clearTimers();
|
|
53
|
-
if (this._open)
|
|
54
|
-
this.
|
|
55
|
-
|
|
56
|
+
if (this._open) {
|
|
57
|
+
if (!this._pinnedOpen)
|
|
58
|
+
this.closeSubmenu();
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
56
61
|
this.openSubmenu();
|
|
62
|
+
}
|
|
57
63
|
};
|
|
58
64
|
this._onPanelEnter = () => {
|
|
59
65
|
this._clearTimers();
|
|
60
66
|
};
|
|
67
|
+
//Re-anchor to the parent item after scroll/resize
|
|
68
|
+
this._onReposition = () => {
|
|
69
|
+
if (this._repositionQueued || !this._open)
|
|
70
|
+
return;
|
|
71
|
+
this._repositionQueued = true;
|
|
72
|
+
requestAnimationFrame(() => {
|
|
73
|
+
this._repositionQueued = false;
|
|
74
|
+
if (!this._open)
|
|
75
|
+
return;
|
|
76
|
+
this._syncProxyToParent();
|
|
77
|
+
this._floatingPanelEl?.reposition();
|
|
78
|
+
});
|
|
79
|
+
};
|
|
61
80
|
this._onPanelLeave = () => {
|
|
81
|
+
if (this._pinnedOpen)
|
|
82
|
+
return;
|
|
62
83
|
if (this._open) {
|
|
63
84
|
this._closeTimer = window.setTimeout(() => {
|
|
64
85
|
const hasOpenDescendant = NileContextSubmenu_1.openStack.some(sub => sub !== this && this._menuContainerRef?.contains(sub));
|
|
@@ -110,6 +131,9 @@ let NileContextSubmenu = NileContextSubmenu_1 = class NileContextSubmenu extends
|
|
|
110
131
|
`,
|
|
111
132
|
];
|
|
112
133
|
}
|
|
134
|
+
get _pinnedOpen() {
|
|
135
|
+
return !!(this._parentItem?.open && !this._parentItem.disabled);
|
|
136
|
+
}
|
|
113
137
|
connectedCallback() {
|
|
114
138
|
super.connectedCallback();
|
|
115
139
|
let p = this.parentElement;
|
|
@@ -122,9 +146,27 @@ let NileContextSubmenu = NileContextSubmenu_1 = class NileContextSubmenu extends
|
|
|
122
146
|
this._parentItem.addEventListener('mouseenter', this._onParentEnter);
|
|
123
147
|
this._parentItem.addEventListener('mouseleave', this._onParentLeave);
|
|
124
148
|
this._parentItem.addEventListener('click', this._onParentClick, true);
|
|
149
|
+
// Open/close the submenu when the parent item's `open` attribute changes.
|
|
150
|
+
this._parentObserver = new MutationObserver(() => {
|
|
151
|
+
if (this._pinnedOpen) {
|
|
152
|
+
if (this._isParentVisible())
|
|
153
|
+
this.openSubmenu();
|
|
154
|
+
}
|
|
155
|
+
else if (this._open) {
|
|
156
|
+
this.closeSubmenu();
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
this._parentObserver.observe(this._parentItem, {
|
|
160
|
+
attributes: true,
|
|
161
|
+
attributeFilter: ['open'],
|
|
162
|
+
});
|
|
125
163
|
}
|
|
126
164
|
this._ensureBodyPanel();
|
|
127
165
|
}
|
|
166
|
+
_isParentVisible() {
|
|
167
|
+
const rect = this._parentItem?.getBoundingClientRect();
|
|
168
|
+
return !!rect && rect.width > 0 && rect.height > 0;
|
|
169
|
+
}
|
|
128
170
|
_ensureProxy() {
|
|
129
171
|
if (this._proxyEl)
|
|
130
172
|
return;
|
|
@@ -140,8 +182,17 @@ let NileContextSubmenu = NileContextSubmenu_1 = class NileContextSubmenu extends
|
|
|
140
182
|
if (!this._proxyEl || !this._parentItem)
|
|
141
183
|
return;
|
|
142
184
|
const rect = this._parentItem.getBoundingClientRect();
|
|
143
|
-
this.
|
|
144
|
-
|
|
185
|
+
if (this._pinnedOpen) {
|
|
186
|
+
// Pinned submenus anchor in document coordinates.
|
|
187
|
+
this._proxyEl.style.position = 'absolute';
|
|
188
|
+
this._proxyEl.style.left = `${rect.left + window.scrollX}px`;
|
|
189
|
+
this._proxyEl.style.top = `${rect.top + window.scrollY}px`;
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
this._proxyEl.style.position = 'fixed';
|
|
193
|
+
this._proxyEl.style.left = `${rect.left}px`;
|
|
194
|
+
this._proxyEl.style.top = `${rect.top}px`;
|
|
195
|
+
}
|
|
145
196
|
this._proxyEl.style.width = `${rect.width}px`;
|
|
146
197
|
this._proxyEl.style.height = `${rect.height}px`;
|
|
147
198
|
}
|
|
@@ -152,6 +203,8 @@ let NileContextSubmenu = NileContextSubmenu_1 = class NileContextSubmenu extends
|
|
|
152
203
|
this._parentItem.removeEventListener('mouseleave', this._onParentLeave);
|
|
153
204
|
this._parentItem.removeEventListener('click', this._onParentClick, true);
|
|
154
205
|
}
|
|
206
|
+
this._parentObserver?.disconnect();
|
|
207
|
+
this._parentObserver = undefined;
|
|
155
208
|
this._clearTimers();
|
|
156
209
|
if (this._open)
|
|
157
210
|
this.closeSubmenu();
|
|
@@ -235,11 +288,47 @@ let NileContextSubmenu = NileContextSubmenu_1 = class NileContextSubmenu extends
|
|
|
235
288
|
this._ensureBodyPanel();
|
|
236
289
|
this._syncProxyToParent();
|
|
237
290
|
this._open = true;
|
|
238
|
-
if (this._floatingPanelEl)
|
|
291
|
+
if (this._floatingPanelEl) {
|
|
292
|
+
// open pinned descendants only once this panel is fully shown
|
|
293
|
+
this._floatingPanelEl.addEventListener('nile-after-show', () => {
|
|
294
|
+
if (this._open)
|
|
295
|
+
this._openPinnedDescendants();
|
|
296
|
+
}, { once: true });
|
|
239
297
|
this._floatingPanelEl.open = true;
|
|
298
|
+
}
|
|
240
299
|
NileContextSubmenu_1.openStack.push(this);
|
|
300
|
+
window.addEventListener('scroll', this._onReposition, true);
|
|
301
|
+
window.addEventListener('resize', this._onReposition);
|
|
302
|
+
requestAnimationFrame(() => requestAnimationFrame(() => {
|
|
303
|
+
if (this._open)
|
|
304
|
+
this._openPinnedDescendants();
|
|
305
|
+
}));
|
|
241
306
|
this._parentItem?.setSubmenuExpanded?.(true);
|
|
242
307
|
}
|
|
308
|
+
/** Open the submenu of every direct child item carrying the `open` attribute. */
|
|
309
|
+
_openPinnedDescendants() {
|
|
310
|
+
if (!this._menuContainerRef)
|
|
311
|
+
return;
|
|
312
|
+
const items = Array.from(this._menuContainerRef.querySelectorAll(ITEM_TAG));
|
|
313
|
+
for (const item of items) {
|
|
314
|
+
if (!this._isDirectChildItem(item))
|
|
315
|
+
continue;
|
|
316
|
+
if (!item.open || item.disabled)
|
|
317
|
+
continue;
|
|
318
|
+
const sub = item.querySelector(`:scope > ${SUBMENU_TAG}`);
|
|
319
|
+
sub?.openSubmenu();
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
/** True if `item` sits at this submenu's own level (not inside a deeper submenu). */
|
|
323
|
+
_isDirectChildItem(item) {
|
|
324
|
+
let cur = item.parentElement;
|
|
325
|
+
while (cur && cur !== this._menuContainerRef) {
|
|
326
|
+
if (cur.tagName.toLowerCase() === SUBMENU_TAG)
|
|
327
|
+
return false;
|
|
328
|
+
cur = cur.parentElement;
|
|
329
|
+
}
|
|
330
|
+
return true;
|
|
331
|
+
}
|
|
243
332
|
closeSubmenu() {
|
|
244
333
|
if (!this._open)
|
|
245
334
|
return;
|
|
@@ -251,6 +340,8 @@ let NileContextSubmenu = NileContextSubmenu_1 = class NileContextSubmenu extends
|
|
|
251
340
|
this._open = false;
|
|
252
341
|
if (this._floatingPanelEl)
|
|
253
342
|
this._floatingPanelEl.open = false;
|
|
343
|
+
window.removeEventListener('scroll', this._onReposition, true);
|
|
344
|
+
window.removeEventListener('resize', this._onReposition);
|
|
254
345
|
NileContextSubmenu_1.openStack = NileContextSubmenu_1.openStack.filter(s => s !== this);
|
|
255
346
|
this._clearTimers();
|
|
256
347
|
this._parentItem?.setSubmenuExpanded?.(false);
|
|
@@ -273,16 +364,7 @@ let NileContextSubmenu = NileContextSubmenu_1 = class NileContextSubmenu extends
|
|
|
273
364
|
return;
|
|
274
365
|
const items = Array.from(this._menuContainerRef.querySelectorAll(ITEM_TAG));
|
|
275
366
|
for (const item of items) {
|
|
276
|
-
|
|
277
|
-
let inDeeperSub = false;
|
|
278
|
-
while (cur && cur !== this._menuContainerRef) {
|
|
279
|
-
if (cur.tagName.toLowerCase() === SUBMENU_TAG) {
|
|
280
|
-
inDeeperSub = true;
|
|
281
|
-
break;
|
|
282
|
-
}
|
|
283
|
-
cur = cur.parentElement;
|
|
284
|
-
}
|
|
285
|
-
if (inDeeperSub)
|
|
367
|
+
if (!this._isDirectChildItem(item))
|
|
286
368
|
continue;
|
|
287
369
|
if (!item.disabled) {
|
|
288
370
|
item.focus();
|
|
@@ -295,6 +377,8 @@ let NileContextSubmenu = NileContextSubmenu_1 = class NileContextSubmenu extends
|
|
|
295
377
|
for (const sub of [...NileContextSubmenu_1.openStack]) {
|
|
296
378
|
if (sub === this)
|
|
297
379
|
continue;
|
|
380
|
+
if (sub._pinnedOpen)
|
|
381
|
+
continue;
|
|
298
382
|
if (sub._parentLevel() === myLevel)
|
|
299
383
|
sub.closeSubmenu();
|
|
300
384
|
}
|