@aquera/nile-elements 1.7.9 → 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.
Files changed (111) hide show
  1. package/README.md +6 -0
  2. package/dist/index-6faafdf4.cjs.js +2 -0
  3. package/dist/index-6faafdf4.cjs.js.map +1 -0
  4. package/dist/index-9931b440.esm.js +1 -0
  5. package/dist/index.cjs.js +1 -1
  6. package/dist/index.esm.js +1 -1
  7. package/dist/index.js +630 -435
  8. package/dist/nile-combobox/index.cjs.js +1 -1
  9. package/dist/nile-combobox/index.esm.js +1 -1
  10. package/dist/nile-combobox/nile-combobox.cjs.js +1 -1
  11. package/dist/nile-combobox/nile-combobox.esm.js +1 -1
  12. package/dist/nile-context-menu/index.cjs.js +2 -0
  13. package/dist/nile-context-menu/index.cjs.js.map +1 -0
  14. package/dist/nile-context-menu/index.esm.js +1 -0
  15. package/dist/nile-context-menu/nile-context-menu.cjs.js +2 -0
  16. package/dist/nile-context-menu/nile-context-menu.cjs.js.map +1 -0
  17. package/dist/nile-context-menu/nile-context-menu.css.cjs.js +2 -0
  18. package/dist/nile-context-menu/nile-context-menu.css.cjs.js.map +1 -0
  19. package/dist/nile-context-menu/nile-context-menu.css.esm.js +51 -0
  20. package/dist/nile-context-menu/nile-context-menu.esm.js +25 -0
  21. package/dist/nile-context-menu-group/index.cjs.js +2 -0
  22. package/dist/nile-context-menu-group/index.cjs.js.map +1 -0
  23. package/dist/nile-context-menu-group/index.esm.js +1 -0
  24. package/dist/nile-context-menu-group/nile-context-menu-group.cjs.js +2 -0
  25. package/dist/nile-context-menu-group/nile-context-menu-group.cjs.js.map +1 -0
  26. package/dist/nile-context-menu-group/nile-context-menu-group.css.cjs.js +2 -0
  27. package/dist/nile-context-menu-group/nile-context-menu-group.css.cjs.js.map +1 -0
  28. package/dist/nile-context-menu-group/nile-context-menu-group.css.esm.js +20 -0
  29. package/dist/nile-context-menu-group/nile-context-menu-group.esm.js +11 -0
  30. package/dist/nile-context-menu-item/index.cjs.js +2 -0
  31. package/dist/nile-context-menu-item/index.cjs.js.map +1 -0
  32. package/dist/nile-context-menu-item/index.esm.js +1 -0
  33. package/dist/nile-context-menu-item/nile-context-menu-item.cjs.js +2 -0
  34. package/dist/nile-context-menu-item/nile-context-menu-item.cjs.js.map +1 -0
  35. package/dist/nile-context-menu-item/nile-context-menu-item.css.cjs.js +2 -0
  36. package/dist/nile-context-menu-item/nile-context-menu-item.css.cjs.js.map +1 -0
  37. package/dist/nile-context-menu-item/nile-context-menu-item.css.esm.js +72 -0
  38. package/dist/nile-context-menu-item/nile-context-menu-item.esm.js +20 -0
  39. package/dist/nile-context-submenu/index.cjs.js +2 -0
  40. package/dist/nile-context-submenu/index.cjs.js.map +1 -0
  41. package/dist/nile-context-submenu/index.esm.js +1 -0
  42. package/dist/nile-context-submenu/nile-context-submenu.cjs.js +2 -0
  43. package/dist/nile-context-submenu/nile-context-submenu.cjs.js.map +1 -0
  44. package/dist/nile-context-submenu/nile-context-submenu.esm.js +3 -0
  45. package/dist/nile-detail/index.cjs.js +1 -1
  46. package/dist/nile-detail/index.esm.js +1 -1
  47. package/dist/nile-detail/nile-detail.cjs.js +1 -1
  48. package/dist/nile-detail/nile-detail.esm.js +1 -1
  49. package/dist/nile-floating-panel/nile-floating-panel.cjs.js +1 -1
  50. package/dist/nile-floating-panel/nile-floating-panel.cjs.js.map +1 -1
  51. package/dist/nile-floating-panel/nile-floating-panel.esm.js +1 -1
  52. package/dist/src/index.d.ts +3 -0
  53. package/dist/src/index.js +3 -0
  54. package/dist/src/index.js.map +1 -1
  55. package/dist/src/nile-context-menu/index.d.ts +3 -0
  56. package/dist/src/nile-context-menu/index.js +4 -0
  57. package/dist/src/nile-context-menu/index.js.map +1 -0
  58. package/dist/src/nile-context-menu/nile-context-menu.css.d.ts +10 -0
  59. package/dist/src/nile-context-menu/nile-context-menu.css.js +127 -0
  60. package/dist/src/nile-context-menu/nile-context-menu.css.js.map +1 -0
  61. package/dist/src/nile-context-menu/nile-context-menu.d.ts +132 -0
  62. package/dist/src/nile-context-menu/nile-context-menu.js +705 -0
  63. package/dist/src/nile-context-menu/nile-context-menu.js.map +1 -0
  64. package/dist/src/nile-context-menu-group/index.d.ts +1 -0
  65. package/dist/src/nile-context-menu-group/index.js +2 -0
  66. package/dist/src/nile-context-menu-group/index.js.map +1 -0
  67. package/dist/src/nile-context-menu-group/nile-context-menu-group.css.d.ts +9 -0
  68. package/dist/src/nile-context-menu-group/nile-context-menu-group.css.js +29 -0
  69. package/dist/src/nile-context-menu-group/nile-context-menu-group.css.js.map +1 -0
  70. package/dist/src/nile-context-menu-group/nile-context-menu-group.d.ts +28 -0
  71. package/dist/src/nile-context-menu-group/nile-context-menu-group.js +55 -0
  72. package/dist/src/nile-context-menu-group/nile-context-menu-group.js.map +1 -0
  73. package/dist/src/nile-context-menu-item/index.d.ts +1 -0
  74. package/dist/src/nile-context-menu-item/index.js +2 -0
  75. package/dist/src/nile-context-menu-item/index.js.map +1 -0
  76. package/dist/src/nile-context-menu-item/nile-context-menu-item.css.d.ts +9 -0
  77. package/dist/src/nile-context-menu-item/nile-context-menu-item.css.js +81 -0
  78. package/dist/src/nile-context-menu-item/nile-context-menu-item.css.js.map +1 -0
  79. package/dist/src/nile-context-menu-item/nile-context-menu-item.d.ts +46 -0
  80. package/dist/src/nile-context-menu-item/nile-context-menu-item.js +100 -0
  81. package/dist/src/nile-context-menu-item/nile-context-menu-item.js.map +1 -0
  82. package/dist/src/nile-context-submenu/index.d.ts +1 -0
  83. package/dist/src/nile-context-submenu/index.js +2 -0
  84. package/dist/src/nile-context-submenu/index.js.map +1 -0
  85. package/dist/src/nile-context-submenu/nile-context-submenu.d.ts +69 -0
  86. package/dist/src/nile-context-submenu/nile-context-submenu.js +408 -0
  87. package/dist/src/nile-context-submenu/nile-context-submenu.js.map +1 -0
  88. package/dist/src/nile-floating-panel/nile-floating-panel.d.ts +2 -0
  89. package/dist/src/nile-floating-panel/nile-floating-panel.js +4 -0
  90. package/dist/src/nile-floating-panel/nile-floating-panel.js.map +1 -1
  91. package/dist/src/version.js +1 -1
  92. package/dist/src/version.js.map +1 -1
  93. package/dist/tsconfig.tsbuildinfo +1 -1
  94. package/package.json +1 -1
  95. package/src/index.ts +3 -0
  96. package/src/nile-context-menu/index.ts +12 -0
  97. package/src/nile-context-menu/nile-context-menu.css.ts +130 -0
  98. package/src/nile-context-menu/nile-context-menu.ts +776 -0
  99. package/src/nile-context-menu-group/index.ts +1 -0
  100. package/src/nile-context-menu-group/nile-context-menu-group.css.ts +31 -0
  101. package/src/nile-context-menu-group/nile-context-menu-group.ts +55 -0
  102. package/src/nile-context-menu-item/index.ts +5 -0
  103. package/src/nile-context-menu-item/nile-context-menu-item.css.ts +83 -0
  104. package/src/nile-context-menu-item/nile-context-menu-item.ts +114 -0
  105. package/src/nile-context-submenu/index.ts +1 -0
  106. package/src/nile-context-submenu/nile-context-submenu.ts +407 -0
  107. package/src/nile-floating-panel/nile-floating-panel.ts +5 -0
  108. package/vscode-html-custom-data.json +92 -4
  109. package/dist/index-644974d4.esm.js +0 -1
  110. package/dist/index-dd2af8ec.cjs.js +0 -2
  111. package/dist/index-dd2af8ec.cjs.js.map +0 -1
@@ -0,0 +1,408 @@
1
+ /**
2
+ * Copyright Aquera Inc 2026
3
+ *
4
+ * This source code is licensed under the BSD-3-Clause license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ var NileContextSubmenu_1;
8
+ import { __decorate } from "tslib";
9
+ import { html, css } from 'lit';
10
+ import { customElement, property, state } from 'lit/decorators.js';
11
+ import NileElement from '../internal/nile-element';
12
+ import '../nile-floating-panel';
13
+ const ITEM_TAG = 'nile-context-menu-item';
14
+ const SUBMENU_TAG = 'nile-context-submenu';
15
+ const HOVER_OPEN_DELAY = 100;
16
+ const HOVER_CLOSE_DELAY = 300;
17
+ let submenuIdSeq = 0;
18
+ /**
19
+ * Nested submenu inside a `nile-context-menu-item`.
20
+ * @tag nile-context-submenu
21
+ */
22
+ let NileContextSubmenu = NileContextSubmenu_1 = class NileContextSubmenu extends NileElement {
23
+ constructor() {
24
+ super(...arguments);
25
+ this.zIndex = 9999;
26
+ this._open = false;
27
+ this._parentItem = null;
28
+ this._proxyId = `nile-context-submenu-anchor-${++submenuIdSeq}`;
29
+ this._menuContainerRef = null;
30
+ this._setupDone = false;
31
+ this._repositionQueued = false;
32
+ this._onParentEnter = () => {
33
+ if (this._parentItem?.disabled)
34
+ return;
35
+ this._clearTimers();
36
+ if (this._open)
37
+ return;
38
+ this._openTimer = window.setTimeout(() => this.openSubmenu(), HOVER_OPEN_DELAY);
39
+ };
40
+ this._onParentLeave = () => {
41
+ if (this._openTimer != null) {
42
+ clearTimeout(this._openTimer);
43
+ this._openTimer = undefined;
44
+ }
45
+ if (this._pinnedOpen)
46
+ return;
47
+ if (this._open) {
48
+ this._closeTimer = window.setTimeout(() => this.closeSubmenu(), HOVER_CLOSE_DELAY);
49
+ }
50
+ };
51
+ this._onParentClick = (e) => {
52
+ e.stopPropagation();
53
+ if (this._parentItem?.disabled)
54
+ return;
55
+ this._clearTimers();
56
+ if (this._open) {
57
+ if (!this._pinnedOpen)
58
+ this.closeSubmenu();
59
+ }
60
+ else {
61
+ this.openSubmenu();
62
+ }
63
+ };
64
+ this._onPanelEnter = () => {
65
+ this._clearTimers();
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
+ };
80
+ this._onPanelLeave = () => {
81
+ if (this._pinnedOpen)
82
+ return;
83
+ if (this._open) {
84
+ this._closeTimer = window.setTimeout(() => {
85
+ const hasOpenDescendant = NileContextSubmenu_1.openStack.some(sub => sub !== this && this._menuContainerRef?.contains(sub));
86
+ if (hasOpenDescendant)
87
+ return;
88
+ this.closeSubmenu();
89
+ }, HOVER_CLOSE_DELAY);
90
+ }
91
+ };
92
+ this._onMenuMouseOver = (e) => {
93
+ const item = e.composedPath().find(n => n instanceof HTMLElement && n.tagName.toLowerCase() === ITEM_TAG);
94
+ if (!item || item.disabled)
95
+ return;
96
+ item.focus();
97
+ };
98
+ this._onNestedSelect = (e) => {
99
+ if (e.target === this)
100
+ return;
101
+ if (e.detail?.type !== 'click')
102
+ return;
103
+ this.emit('nile-change', e.detail);
104
+ };
105
+ this._onMenuClick = (e) => {
106
+ const item = e.composedPath().find(n => n instanceof HTMLElement && n.tagName.toLowerCase() === ITEM_TAG);
107
+ if (!item || item.disabled)
108
+ return;
109
+ if (item.querySelector(`:scope > ${SUBMENU_TAG}`))
110
+ return;
111
+ const detail = {
112
+ id: item.id,
113
+ value: item.value,
114
+ name: (item.textContent ?? '').trim(),
115
+ target: null,
116
+ originalEvent: e,
117
+ };
118
+ try {
119
+ item.onSelect?.(detail);
120
+ }
121
+ catch (err) {
122
+ console.error('[nile-context-submenu] onSelect callback threw:', err);
123
+ }
124
+ this.emit('nile-change', { type: 'click', ...detail });
125
+ };
126
+ }
127
+ static get styles() {
128
+ return [
129
+ css `
130
+ :host { display: contents; }
131
+ `,
132
+ ];
133
+ }
134
+ get _pinnedOpen() {
135
+ return !!(this._parentItem?.open && !this._parentItem.disabled);
136
+ }
137
+ connectedCallback() {
138
+ super.connectedCallback();
139
+ let p = this.parentElement;
140
+ while (p && p.tagName.toLowerCase() !== ITEM_TAG)
141
+ p = p.parentElement;
142
+ this._parentItem = p;
143
+ this._ensureProxy();
144
+ if (this._parentItem) {
145
+ this._parentItem.setSubmenuExpanded?.(false);
146
+ this._parentItem.addEventListener('mouseenter', this._onParentEnter);
147
+ this._parentItem.addEventListener('mouseleave', this._onParentLeave);
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
+ });
163
+ }
164
+ this._ensureBodyPanel();
165
+ }
166
+ _isParentVisible() {
167
+ const rect = this._parentItem?.getBoundingClientRect();
168
+ return !!rect && rect.width > 0 && rect.height > 0;
169
+ }
170
+ _ensureProxy() {
171
+ if (this._proxyEl)
172
+ return;
173
+ const el = document.createElement('div');
174
+ el.id = this._proxyId;
175
+ el.setAttribute('aria-hidden', 'true');
176
+ el.style.cssText =
177
+ 'position: fixed; top: 0; left: 0; width: 0; height: 0; pointer-events: none;';
178
+ document.body.appendChild(el);
179
+ this._proxyEl = el;
180
+ }
181
+ _syncProxyToParent() {
182
+ if (!this._proxyEl || !this._parentItem)
183
+ return;
184
+ const rect = this._parentItem.getBoundingClientRect();
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
+ }
196
+ this._proxyEl.style.width = `${rect.width}px`;
197
+ this._proxyEl.style.height = `${rect.height}px`;
198
+ }
199
+ disconnectedCallback() {
200
+ super.disconnectedCallback();
201
+ if (this._parentItem) {
202
+ this._parentItem.removeEventListener('mouseenter', this._onParentEnter);
203
+ this._parentItem.removeEventListener('mouseleave', this._onParentLeave);
204
+ this._parentItem.removeEventListener('click', this._onParentClick, true);
205
+ }
206
+ this._parentObserver?.disconnect();
207
+ this._parentObserver = undefined;
208
+ this._clearTimers();
209
+ if (this._open)
210
+ this.closeSubmenu();
211
+ this._teardownBodyArtifacts();
212
+ NileContextSubmenu_1.openStack = NileContextSubmenu_1.openStack.filter(s => s !== this);
213
+ }
214
+ _teardownBodyArtifacts() {
215
+ const menu = this._menuContainerRef;
216
+ if (menu) {
217
+ menu.removeEventListener('click', this._onMenuClick);
218
+ menu.removeEventListener('mouseover', this._onMenuMouseOver);
219
+ menu.removeEventListener('mouseenter', this._onPanelEnter);
220
+ menu.removeEventListener('mouseleave', this._onPanelLeave);
221
+ menu.removeEventListener('nile-change', this._onNestedSelect);
222
+ while (menu.firstChild)
223
+ this.appendChild(menu.firstChild);
224
+ }
225
+ this._floatingPanelEl?.remove();
226
+ this._floatingPanelEl = undefined;
227
+ this._menuContainerRef = null;
228
+ this._setupDone = false;
229
+ this._proxyEl?.remove();
230
+ this._proxyEl = undefined;
231
+ }
232
+ _ensureBodyPanel() {
233
+ if (this._setupDone)
234
+ return;
235
+ const fp = document.createElement('nile-floating-panel');
236
+ fp.setAttribute('for', this._proxyId);
237
+ fp.setAttribute('trigger', 'manual');
238
+ fp.setAttribute('placement', 'right-start');
239
+ fp.panelClass = 'nile-context-menu-panel';
240
+ fp.zIndex = this.zIndex;
241
+ fp.interactive = true;
242
+ fp.hideOnClick = false;
243
+ fp.closeOnEscape = false;
244
+ fp.arrow = 'none';
245
+ fp.distance = 0;
246
+ const menu = document.createElement('div');
247
+ menu.className = 'nile-context-menu__menu';
248
+ menu.setAttribute('role', 'menu');
249
+ fp.appendChild(menu);
250
+ document.body.appendChild(fp);
251
+ this._floatingPanelEl = fp;
252
+ this._menuContainerRef = menu;
253
+ menu.addEventListener('click', this._onMenuClick);
254
+ menu.addEventListener('mouseover', this._onMenuMouseOver);
255
+ menu.addEventListener('mouseenter', this._onPanelEnter);
256
+ menu.addEventListener('mouseleave', this._onPanelLeave);
257
+ menu.addEventListener('nile-change', this._onNestedSelect);
258
+ this._relocateLightChildren();
259
+ this._setupDone = true;
260
+ }
261
+ firstUpdated() {
262
+ this._relocateLightChildren();
263
+ }
264
+ _relocateLightChildren() {
265
+ if (!this._menuContainerRef)
266
+ return;
267
+ for (const kid of Array.from(this.children)) {
268
+ this._menuContainerRef.appendChild(kid);
269
+ }
270
+ }
271
+ _clearTimers() {
272
+ if (this._openTimer != null) {
273
+ clearTimeout(this._openTimer);
274
+ this._openTimer = undefined;
275
+ }
276
+ if (this._closeTimer != null) {
277
+ clearTimeout(this._closeTimer);
278
+ this._closeTimer = undefined;
279
+ }
280
+ }
281
+ openSubmenu() {
282
+ if (this._open)
283
+ return;
284
+ if (this._parentItem?.disabled)
285
+ return;
286
+ this._closeSiblingSubmenus();
287
+ this._ensureProxy();
288
+ this._ensureBodyPanel();
289
+ this._syncProxyToParent();
290
+ this._open = true;
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 });
297
+ this._floatingPanelEl.open = true;
298
+ }
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
+ }));
306
+ this._parentItem?.setSubmenuExpanded?.(true);
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
+ }
332
+ closeSubmenu() {
333
+ if (!this._open)
334
+ return;
335
+ for (const sub of [...NileContextSubmenu_1.openStack]) {
336
+ if (sub !== this && this._menuContainerRef?.contains(sub)) {
337
+ sub.closeSubmenu();
338
+ }
339
+ }
340
+ this._open = false;
341
+ if (this._floatingPanelEl)
342
+ this._floatingPanelEl.open = false;
343
+ window.removeEventListener('scroll', this._onReposition, true);
344
+ window.removeEventListener('resize', this._onReposition);
345
+ NileContextSubmenu_1.openStack = NileContextSubmenu_1.openStack.filter(s => s !== this);
346
+ this._clearTimers();
347
+ this._parentItem?.setSubmenuExpanded?.(false);
348
+ }
349
+ get isOpen() {
350
+ return this._open;
351
+ }
352
+ static findByContainer(container) {
353
+ for (const sub of NileContextSubmenu_1.openStack) {
354
+ if (sub._menuContainerRef === container)
355
+ return sub;
356
+ }
357
+ return null;
358
+ }
359
+ get parentItem() {
360
+ return this._parentItem;
361
+ }
362
+ focusFirstItem() {
363
+ if (!this._menuContainerRef)
364
+ return;
365
+ const items = Array.from(this._menuContainerRef.querySelectorAll(ITEM_TAG));
366
+ for (const item of items) {
367
+ if (!this._isDirectChildItem(item))
368
+ continue;
369
+ if (!item.disabled) {
370
+ item.focus();
371
+ return;
372
+ }
373
+ }
374
+ }
375
+ _closeSiblingSubmenus() {
376
+ const myLevel = this._parentLevel();
377
+ for (const sub of [...NileContextSubmenu_1.openStack]) {
378
+ if (sub === this)
379
+ continue;
380
+ if (sub._pinnedOpen)
381
+ continue;
382
+ if (sub._parentLevel() === myLevel)
383
+ sub.closeSubmenu();
384
+ }
385
+ }
386
+ _parentLevel() {
387
+ const item = this._parentItem;
388
+ if (!item)
389
+ return null;
390
+ return item.parentElement?.closest('.nile-context-menu__menu') ?? null;
391
+ }
392
+ render() {
393
+ return html ``;
394
+ }
395
+ };
396
+ NileContextSubmenu.openStack = [];
397
+ __decorate([
398
+ property({ attribute: true, type: Number, reflect: true })
399
+ ], NileContextSubmenu.prototype, "zIndex", void 0);
400
+ __decorate([
401
+ state()
402
+ ], NileContextSubmenu.prototype, "_open", void 0);
403
+ NileContextSubmenu = NileContextSubmenu_1 = __decorate([
404
+ customElement('nile-context-submenu')
405
+ ], NileContextSubmenu);
406
+ export { NileContextSubmenu };
407
+ export default NileContextSubmenu;
408
+ //# sourceMappingURL=nile-context-submenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nile-context-submenu.js","sourceRoot":"","sources":["../../../src/nile-context-submenu/nile-context-submenu.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, css } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport NileElement from '../internal/nile-element';\nimport type { NileContextMenuItem } from '../nile-context-menu-item';\nimport '../nile-floating-panel';\nimport type { NileFloatingPanel } from '../nile-floating-panel';\n\nconst ITEM_TAG = 'nile-context-menu-item';\nconst SUBMENU_TAG = 'nile-context-submenu';\nconst HOVER_OPEN_DELAY = 100;\nconst HOVER_CLOSE_DELAY = 300;\n\nlet submenuIdSeq = 0;\n\n/**\n * Nested submenu inside a `nile-context-menu-item`.\n * @tag nile-context-submenu\n */\n@customElement('nile-context-submenu')\nexport class NileContextSubmenu extends NileElement {\n public static get styles(): CSSResultArray {\n return [\n css`\n :host { display: contents; }\n `,\n ];\n }\n\n @property({ attribute: true, type: Number, reflect: true }) zIndex = 9999;\n\n @state() private _open = false;\n\n public static openStack: NileContextSubmenu[] = [];\n\n private _parentItem: NileContextMenuItem | null = null;\n private _proxyId = `nile-context-submenu-anchor-${++submenuIdSeq}`;\n private _proxyEl?: HTMLDivElement;\n private _floatingPanelEl?: NileFloatingPanel;\n private _menuContainerRef: HTMLDivElement | null = null;\n private _openTimer?: number;\n private _closeTimer?: number;\n private _setupDone = false;\n private _parentObserver?: MutationObserver;\n private _repositionQueued = false;\n private get _pinnedOpen(): boolean {\n return !!(this._parentItem?.open && !this._parentItem.disabled);\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n let p: Element | null = this.parentElement;\n while (p && p.tagName.toLowerCase() !== ITEM_TAG) p = p.parentElement;\n this._parentItem = p as NileContextMenuItem | null;\n this._ensureProxy();\n if (this._parentItem) {\n this._parentItem.setSubmenuExpanded?.(false);\n this._parentItem.addEventListener('mouseenter', this._onParentEnter);\n this._parentItem.addEventListener('mouseleave', this._onParentLeave);\n this._parentItem.addEventListener('click', this._onParentClick, true);\n // Open/close the submenu when the parent item's `open` attribute changes.\n this._parentObserver = new MutationObserver(() => {\n if (this._pinnedOpen) {\n if (this._isParentVisible()) this.openSubmenu();\n } else if (this._open) {\n this.closeSubmenu();\n }\n });\n this._parentObserver.observe(this._parentItem, {\n attributes: true,\n attributeFilter: ['open'],\n });\n }\n this._ensureBodyPanel();\n }\n\n private _isParentVisible(): boolean {\n const rect = this._parentItem?.getBoundingClientRect();\n return !!rect && rect.width > 0 && rect.height > 0;\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 _syncProxyToParent(): void {\n if (!this._proxyEl || !this._parentItem) return;\n const rect = this._parentItem.getBoundingClientRect();\n if (this._pinnedOpen) {\n // Pinned submenus anchor in document coordinates.\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 } else {\n this._proxyEl.style.position = 'fixed';\n this._proxyEl.style.left = `${rect.left}px`;\n this._proxyEl.style.top = `${rect.top}px`;\n }\n this._proxyEl.style.width = `${rect.width}px`;\n this._proxyEl.style.height = `${rect.height}px`;\n }\n\n public override disconnectedCallback(): void {\n super.disconnectedCallback();\n if (this._parentItem) {\n this._parentItem.removeEventListener('mouseenter', this._onParentEnter);\n this._parentItem.removeEventListener('mouseleave', this._onParentLeave);\n this._parentItem.removeEventListener('click', this._onParentClick, true);\n }\n this._parentObserver?.disconnect();\n this._parentObserver = undefined;\n this._clearTimers();\n if (this._open) this.closeSubmenu();\n this._teardownBodyArtifacts();\n NileContextSubmenu.openStack = NileContextSubmenu.openStack.filter(s => s !== this);\n }\n\n private _teardownBodyArtifacts(): void {\n const menu = this._menuContainerRef;\n if (menu) {\n menu.removeEventListener('click', this._onMenuClick);\n menu.removeEventListener('mouseover', this._onMenuMouseOver);\n menu.removeEventListener('mouseenter', this._onPanelEnter);\n menu.removeEventListener('mouseleave', this._onPanelLeave);\n menu.removeEventListener('nile-change', this._onNestedSelect as EventListener);\n while (menu.firstChild) this.appendChild(menu.firstChild);\n }\n this._floatingPanelEl?.remove();\n this._floatingPanelEl = undefined;\n this._menuContainerRef = null;\n this._setupDone = false;\n this._proxyEl?.remove();\n this._proxyEl = undefined;\n }\n\n private _ensureBodyPanel(): void {\n if (this._setupDone) return;\n const fp = document.createElement('nile-floating-panel') as NileFloatingPanel;\n fp.setAttribute('for', this._proxyId);\n fp.setAttribute('trigger', 'manual');\n fp.setAttribute('placement', 'right-start');\n fp.panelClass = 'nile-context-menu-panel';\n fp.zIndex = this.zIndex;\n fp.interactive = true;\n fp.hideOnClick = false;\n fp.closeOnEscape = false;\n (fp as unknown as { arrow: 'none' }).arrow = 'none';\n fp.distance = 0;\n\n const menu = document.createElement('div');\n menu.className = 'nile-context-menu__menu';\n menu.setAttribute('role', 'menu');\n fp.appendChild(menu);\n\n document.body.appendChild(fp);\n this._floatingPanelEl = fp;\n this._menuContainerRef = menu;\n\n menu.addEventListener('click', this._onMenuClick);\n menu.addEventListener('mouseover', this._onMenuMouseOver);\n menu.addEventListener('mouseenter', this._onPanelEnter);\n menu.addEventListener('mouseleave', this._onPanelLeave);\n menu.addEventListener('nile-change', this._onNestedSelect as EventListener);\n\n this._relocateLightChildren();\n this._setupDone = true;\n }\n\n protected override firstUpdated(): void {\n this._relocateLightChildren();\n }\n\n private _relocateLightChildren(): void {\n if (!this._menuContainerRef) return;\n for (const kid of Array.from(this.children)) {\n this._menuContainerRef.appendChild(kid);\n }\n }\n\n private _clearTimers(): void {\n if (this._openTimer != null) { clearTimeout(this._openTimer); this._openTimer = undefined; }\n if (this._closeTimer != null) { clearTimeout(this._closeTimer); this._closeTimer = undefined; }\n }\n\n private _onParentEnter = (): void => {\n if (this._parentItem?.disabled) return;\n this._clearTimers();\n if (this._open) return;\n this._openTimer = window.setTimeout(() => this.openSubmenu(), HOVER_OPEN_DELAY);\n };\n\n private _onParentLeave = (): void => {\n if (this._openTimer != null) { clearTimeout(this._openTimer); this._openTimer = undefined; }\n if (this._pinnedOpen) return;\n if (this._open) {\n this._closeTimer = window.setTimeout(() => this.closeSubmenu(), HOVER_CLOSE_DELAY);\n }\n };\n\n private _onParentClick = (e: MouseEvent): void => {\n e.stopPropagation();\n if (this._parentItem?.disabled) return;\n this._clearTimers();\n if (this._open) {\n if (!this._pinnedOpen) this.closeSubmenu();\n } else {\n this.openSubmenu();\n }\n };\n\n private _onPanelEnter = (): void => {\n this._clearTimers();\n };\n\n //Re-anchor to the parent item after scroll/resize\n private _onReposition = (): void => {\n if (this._repositionQueued || !this._open) return;\n this._repositionQueued = true;\n requestAnimationFrame(() => {\n this._repositionQueued = false;\n if (!this._open) return;\n this._syncProxyToParent();\n this._floatingPanelEl?.reposition();\n });\n };\n\n private _onPanelLeave = (): void => {\n if (this._pinnedOpen) return;\n if (this._open) {\n this._closeTimer = window.setTimeout(() => {\n const hasOpenDescendant = NileContextSubmenu.openStack.some(\n sub => sub !== this && this._menuContainerRef?.contains(sub),\n );\n if (hasOpenDescendant) return;\n this.closeSubmenu();\n }, HOVER_CLOSE_DELAY);\n }\n };\n\n public openSubmenu(): void {\n if (this._open) return;\n if (this._parentItem?.disabled) return;\n this._closeSiblingSubmenus();\n this._ensureProxy();\n this._ensureBodyPanel();\n this._syncProxyToParent();\n this._open = true;\n if (this._floatingPanelEl) {\n // open pinned descendants only once this panel is fully shown\n this._floatingPanelEl.addEventListener(\n 'nile-after-show',\n () => {\n if (this._open) this._openPinnedDescendants();\n },\n { once: true },\n );\n this._floatingPanelEl.open = true;\n }\n NileContextSubmenu.openStack.push(this);\n window.addEventListener('scroll', this._onReposition, true);\n window.addEventListener('resize', this._onReposition);\n requestAnimationFrame(() => requestAnimationFrame(() => {\n if (this._open) this._openPinnedDescendants();\n }));\n this._parentItem?.setSubmenuExpanded?.(true);\n }\n\n /** Open the submenu of every direct child item carrying the `open` attribute. */\n private _openPinnedDescendants(): void {\n if (!this._menuContainerRef) return;\n const items = Array.from(\n this._menuContainerRef.querySelectorAll(ITEM_TAG)\n ) as NileContextMenuItem[];\n for (const item of items) {\n if (!this._isDirectChildItem(item)) continue;\n if (!item.open || item.disabled) continue;\n const sub = item.querySelector(`:scope > ${SUBMENU_TAG}`) as NileContextSubmenu | null;\n sub?.openSubmenu();\n }\n }\n\n /** True if `item` sits at this submenu's own level (not inside a deeper submenu). */\n private _isDirectChildItem(item: Element): boolean {\n let cur: Element | null = item.parentElement;\n while (cur && cur !== this._menuContainerRef) {\n if (cur.tagName.toLowerCase() === SUBMENU_TAG) return false;\n cur = cur.parentElement;\n }\n return true;\n }\n\n public closeSubmenu(): void {\n if (!this._open) return;\n for (const sub of [...NileContextSubmenu.openStack]) {\n if (sub !== this && this._menuContainerRef?.contains(sub)) {\n sub.closeSubmenu();\n }\n }\n this._open = false;\n if (this._floatingPanelEl) this._floatingPanelEl.open = false;\n window.removeEventListener('scroll', this._onReposition, true);\n window.removeEventListener('resize', this._onReposition);\n NileContextSubmenu.openStack = NileContextSubmenu.openStack.filter(s => s !== this);\n this._clearTimers();\n this._parentItem?.setSubmenuExpanded?.(false);\n }\n\n public get isOpen(): boolean {\n return this._open;\n }\n\n public static findByContainer(container: Element): NileContextSubmenu | null {\n for (const sub of NileContextSubmenu.openStack) {\n if (sub._menuContainerRef === container) return sub;\n }\n return null;\n }\n\n public get parentItem(): NileContextMenuItem | null {\n return this._parentItem;\n }\n public focusFirstItem(): void {\n if (!this._menuContainerRef) return;\n const items = Array.from(\n this._menuContainerRef.querySelectorAll(ITEM_TAG)\n ) as NileContextMenuItem[];\n for (const item of items) {\n if (!this._isDirectChildItem(item)) continue;\n if (!item.disabled) { item.focus(); return; }\n }\n }\n\n private _closeSiblingSubmenus(): void {\n const myLevel = this._parentLevel();\n for (const sub of [...NileContextSubmenu.openStack]) {\n if (sub === this) continue;\n if (sub._pinnedOpen) continue;\n if (sub._parentLevel() === myLevel) sub.closeSubmenu();\n }\n }\n\n private _parentLevel(): Element | null {\n const item = this._parentItem;\n if (!item) return null;\n return item.parentElement?.closest('.nile-context-menu__menu') ?? null;\n }\n\n private _onMenuMouseOver = (e: MouseEvent): void => {\n const item = e.composedPath().find(\n n => n instanceof HTMLElement && n.tagName.toLowerCase() === ITEM_TAG\n ) as NileContextMenuItem | undefined;\n if (!item || item.disabled) return;\n item.focus();\n };\n\n private _onNestedSelect = (e: CustomEvent): void => {\n if (e.target === this) return;\n if (e.detail?.type !== 'click') return;\n this.emit('nile-change', e.detail);\n };\n\n private _onMenuClick = (e: MouseEvent): void => {\n const item = e.composedPath().find(\n n => n instanceof HTMLElement && n.tagName.toLowerCase() === ITEM_TAG\n ) as NileContextMenuItem | undefined;\n if (!item || item.disabled) return;\n if (item.querySelector(`:scope > ${SUBMENU_TAG}`)) return;\n const detail = {\n id: item.id,\n value: item.value,\n name: (item.textContent ?? '').trim(),\n target: null,\n originalEvent: e,\n };\n try {\n (item as unknown as { onSelect?: (d: typeof detail) => void }).onSelect?.(detail);\n } catch (err) {\n console.error('[nile-context-submenu] onSelect callback threw:', err);\n }\n this.emit('nile-change', { type: 'click', ...detail });\n };\n\n public render(): TemplateResult {\n return html``;\n }\n}\n\nexport default NileContextSubmenu;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-context-submenu': NileContextSubmenu;\n }\n}\n"]}
@@ -83,6 +83,8 @@ export declare class NileFloatingPanel extends NileElement {
83
83
  private _cleanupPendingHideListener;
84
84
  toggle(): void;
85
85
  refresh(): void;
86
+ /** Recomputes the panel position against its anchor (e.g. after the anchor moved). */
87
+ reposition(): void;
86
88
  /** Returns the current resolved placement from Tippy/Popper. */
87
89
  getCurrentPlacement(): string;
88
90
  /** Returns true if the resolved placement matches the requested placement. */
@@ -205,6 +205,10 @@ let NileFloatingPanel = NileFloatingPanel_1 = class NileFloatingPanel extends Ni
205
205
  refresh() {
206
206
  this._attachTippy();
207
207
  }
208
+ /** Recomputes the panel position against its anchor (e.g. after the anchor moved). */
209
+ reposition() {
210
+ this.tippyInstance?.popperInstance?.update();
211
+ }
208
212
  /** Returns the current resolved placement from Tippy/Popper. */
209
213
  getCurrentPlacement() {
210
214
  const popper = this.tippyInstance?.popper;