@aquera/nile-elements 1.8.0 → 1.8.2

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 (80) 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 +375 -226
  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/nile-context-menu.cjs.js +1 -1
  13. package/dist/nile-context-menu/nile-context-menu.cjs.js.map +1 -1
  14. package/dist/nile-context-menu/nile-context-menu.esm.js +2 -2
  15. package/dist/nile-context-menu-item/nile-context-menu-item.cjs.js +1 -1
  16. package/dist/nile-context-menu-item/nile-context-menu-item.cjs.js.map +1 -1
  17. package/dist/nile-context-menu-item/nile-context-menu-item.esm.js +3 -3
  18. package/dist/nile-context-submenu/nile-context-submenu.cjs.js +1 -1
  19. package/dist/nile-context-submenu/nile-context-submenu.cjs.js.map +1 -1
  20. package/dist/nile-context-submenu/nile-context-submenu.esm.js +2 -2
  21. package/dist/nile-detail/index.cjs.js +1 -1
  22. package/dist/nile-detail/index.esm.js +1 -1
  23. package/dist/nile-detail/nile-detail.cjs.js +1 -1
  24. package/dist/nile-detail/nile-detail.esm.js +1 -1
  25. package/dist/nile-floating-panel/nile-floating-panel.cjs.js +1 -1
  26. package/dist/nile-floating-panel/nile-floating-panel.cjs.js.map +1 -1
  27. package/dist/nile-floating-panel/nile-floating-panel.esm.js +1 -1
  28. package/dist/nile-slider/nile-slider.cjs.js +1 -1
  29. package/dist/nile-slider/nile-slider.cjs.js.map +1 -1
  30. package/dist/nile-slider/nile-slider.css.cjs.js +1 -1
  31. package/dist/nile-slider/nile-slider.css.cjs.js.map +1 -1
  32. package/dist/nile-slider/nile-slider.css.esm.js +162 -41
  33. package/dist/nile-slider/nile-slider.esm.js +5 -3
  34. package/dist/nile-slider/nile-slider.template.cjs.js +1 -1
  35. package/dist/nile-slider/nile-slider.template.cjs.js.map +1 -1
  36. package/dist/nile-slider/nile-slider.template.esm.js +49 -23
  37. package/dist/nile-slider/utils/nile-slider.utils.cjs.js +1 -1
  38. package/dist/nile-slider/utils/nile-slider.utils.cjs.js.map +1 -1
  39. package/dist/nile-slider/utils/nile-slider.utils.esm.js +1 -1
  40. package/dist/src/nile-context-menu/nile-context-menu.d.ts +10 -1
  41. package/dist/src/nile-context-menu/nile-context-menu.js +85 -5
  42. package/dist/src/nile-context-menu/nile-context-menu.js.map +1 -1
  43. package/dist/src/nile-context-menu-item/nile-context-menu-item.d.ts +1 -0
  44. package/dist/src/nile-context-menu-item/nile-context-menu-item.js +5 -1
  45. package/dist/src/nile-context-menu-item/nile-context-menu-item.js.map +1 -1
  46. package/dist/src/nile-context-submenu/nile-context-submenu.d.ts +9 -0
  47. package/dist/src/nile-context-submenu/nile-context-submenu.js +100 -16
  48. package/dist/src/nile-context-submenu/nile-context-submenu.js.map +1 -1
  49. package/dist/src/nile-floating-panel/nile-floating-panel.d.ts +2 -0
  50. package/dist/src/nile-floating-panel/nile-floating-panel.js +4 -0
  51. package/dist/src/nile-floating-panel/nile-floating-panel.js.map +1 -1
  52. package/dist/src/nile-slider/nile-slider.css.js +160 -39
  53. package/dist/src/nile-slider/nile-slider.css.js.map +1 -1
  54. package/dist/src/nile-slider/nile-slider.d.ts +5 -1
  55. package/dist/src/nile-slider/nile-slider.js +23 -1
  56. package/dist/src/nile-slider/nile-slider.js.map +1 -1
  57. package/dist/src/nile-slider/nile-slider.template.d.ts +2 -0
  58. package/dist/src/nile-slider/nile-slider.template.js +38 -1
  59. package/dist/src/nile-slider/nile-slider.template.js.map +1 -1
  60. package/dist/src/nile-slider/types/nile-slider.types.d.ts +1 -0
  61. package/dist/src/nile-slider/types/nile-slider.types.js.map +1 -1
  62. package/dist/src/nile-slider/utils/nile-slider.utils.js +4 -0
  63. package/dist/src/nile-slider/utils/nile-slider.utils.js.map +1 -1
  64. package/dist/src/version.js +1 -1
  65. package/dist/src/version.js.map +1 -1
  66. package/dist/tsconfig.tsbuildinfo +1 -1
  67. package/package.json +1 -1
  68. package/src/nile-context-menu/nile-context-menu.ts +86 -8
  69. package/src/nile-context-menu-item/nile-context-menu-item.ts +3 -1
  70. package/src/nile-context-submenu/nile-context-submenu.ts +97 -12
  71. package/src/nile-floating-panel/nile-floating-panel.ts +5 -0
  72. package/src/nile-slider/nile-slider.css.ts +160 -39
  73. package/src/nile-slider/nile-slider.template.ts +45 -2
  74. package/src/nile-slider/nile-slider.ts +11 -3
  75. package/src/nile-slider/types/nile-slider.types.ts +2 -0
  76. package/src/nile-slider/utils/nile-slider.utils.ts +2 -0
  77. package/vscode-html-custom-data.json +51 -12
  78. package/dist/index-644974d4.esm.js +0 -1
  79. package/dist/index-dd2af8ec.cjs.js +0 -2
  80. package/dist/index-dd2af8ec.cjs.js.map +0 -1
@@ -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.closeSubmenu();
55
- else
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._proxyEl.style.left = `${rect.left}px`;
144
- this._proxyEl.style.top = `${rect.top}px`;
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
- let cur = item.parentElement;
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
  }
@@ -1 +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\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 }\n this._ensureBodyPanel();\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 this._proxyEl.style.left = `${rect.left}px`;\n this._proxyEl.style.top = `${rect.top}px`;\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._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._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) this.closeSubmenu();\n else this.openSubmenu();\n };\n\n private _onPanelEnter = (): void => {\n this._clearTimers();\n };\n\n private _onPanelLeave = (): void => {\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) this._floatingPanelEl.open = true;\n NileContextSubmenu.openStack.push(this);\n this._parentItem?.setSubmenuExpanded?.(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 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 let cur: Element | null = item.parentElement;\n let inDeeperSub = false;\n while (cur && cur !== this._menuContainerRef) {\n if (cur.tagName.toLowerCase() === SUBMENU_TAG) { inDeeperSub = true; break; }\n cur = cur.parentElement;\n }\n if (inDeeperSub) 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._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"]}
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;
@@ -1 +1 @@
1
- {"version":3,"file":"nile-floating-panel.js","sourceRoot":"","sources":["../../../src/nile-floating-panel/nile-floating-panel.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright Aquera Inc 2025\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 { CSSResultArray, PropertyValues } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { styles } from './nile-floating-panel.css';\nimport NileElement from '../internal/nile-element';\nimport tippy, {\n Instance,\n Props,\n roundArrow,\n followCursor as followCursorPlugin,\n} from 'tippy.js';\nimport {\n parseFollowCursor,\n parseDuration,\n} from '../nile-lite-tooltip/utils';\nimport { VisibilityManager } from '../utilities/visibility-manager.js';\n\n/**\n * Nile floating-panel component.\n *\n * A popover that supports rich content (title, body, actions).\n *\n * **Wrapper mode** (default): first child element is the trigger.\n * **For mode**: set `for=\"elementId\"` to attach to an external element.\n *\n * @tag nile-floating-panel\n *\n * @fires nile-init - Component initialized.\n * @fires nile-destroy - Component destroyed.\n * @fires nile-show - Panel opened.\n * @fires nile-hide - Panel closed.\n * @fires nile-after-show - Panel fully visible after animation.\n * @fires nile-after-hide - Panel fully hidden after animation.\n * @fires nile-toggle - Open/close transition (detail.open).\n * @fires nile-visibility-change - Hidden by scroll/tab change.\n */\n@customElement('nile-floating-panel')\nexport class NileFloatingPanel extends NileElement {\n private static _groups = new Map<string, Set<NileFloatingPanel>>();\n\n private static _reducedMotionQuery: MediaQueryList | null = null;\n\n private static get prefersReducedMotion(): boolean {\n if (!NileFloatingPanel._reducedMotionQuery) {\n NileFloatingPanel._reducedMotionQuery =\n window.matchMedia('(prefers-reduced-motion: reduce)');\n }\n return NileFloatingPanel._reducedMotionQuery.matches;\n }\n\n public static get styles(): CSSResultArray {\n return [styles];\n }\n\n protected createRenderRoot() {\n return this;\n }\n\n // ─── Tippy.js props ───\n\n @property({ type: String })\n placement:\n | 'top'\n | 'top-start'\n | 'top-end'\n | 'right'\n | 'right-start'\n | 'right-end'\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end'\n | 'left'\n | 'left-start'\n | 'left-end'\n | 'auto'\n | 'auto-start'\n | 'auto-end' = 'bottom';\n\n @property({ type: String }) trigger: string = 'click';\n\n @property({ type: Number }) distance = 12;\n\n @property({ type: Number }) skidding = 0;\n\n @property({ type: String, reflect: true })\n arrow: 'round' | 'default' | 'none' = 'round';\n\n @property({ type: String, reflect: true }) animation: string = 'fade';\n\n @property({ type: String, reflect: true }) duration:\n | string\n | number\n | [number, number] = 200;\n\n @property({ type: String, reflect: true }) delay:\n | number\n | [number, number] = 0;\n\n @property({ type: Boolean, reflect: true }) interactive = true;\n\n @property({ type: Number, reflect: true }) interactiveBorder = 2;\n\n @property({ type: String, reflect: true }) maxWidth: string | number = 'none';\n\n @property({ type: Number, reflect: true }) zIndex = 9999;\n\n @property({ type: String, reflect: true })\n followCursor:\n | boolean\n | 'initial'\n | 'horizontal'\n | 'vertical'\n | 'true'\n | 'false' = false;\n\n @property({ type: Boolean, reflect: true }) hideOnClick:\n | boolean\n | 'toggle' = true;\n\n @property({ type: Boolean, reflect: true }) inertia = false;\n\n @property({ type: Boolean, reflect: true }) allowHTML = false;\n\n @property({ type: Boolean, reflect: true }) flip = true;\n\n // ─── Popover-like props ───\n\n @property({ type: String, attribute: 'for' }) for: string | null = null;\n\n @property({ type: Boolean, reflect: true }) open = false;\n\n @property({ type: Boolean, reflect: true }) preventOverlayClose = false;\n\n @property({ type: String, reflect: true }) title = '';\n\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n @property({ type: String, reflect: true }) width?: string;\n\n @property({ type: String, reflect: true }) height?: string;\n\n /** When set, only one panel in the same group can be open at a time. */\n @property({ type: String, reflect: true }) group: string | null = null;\n\n /** Close the panel when Escape is pressed. */\n @property({ type: Boolean, reflect: true }) closeOnEscape = true;\n\n /** Custom CSS class(es) added to the Tippy popper element, allowing per-instance styling from the host. */\n @property({ type: String, reflect: true, attribute: true}) panelClass: string = '';\n\n // ─── Visibility manager props ───\n\n @property({ type: Boolean, reflect: true }) enableVisibilityEffect = false;\n\n @property({ type: Boolean, reflect: true }) enableTabClose = false;\n\n // ─── Internal state ───\n\n private tippyInstance: Instance | null = null;\n private visibilityManager?: VisibilityManager;\n private panelContainer: HTMLElement | null = null;\n private anchorEl: HTMLElement | null = null;\n private _suppressOpenWatch = false;\n private _panelId = `nile-fp-${Math.random().toString(36).slice(2, 9)}`;\n private _boundEscHandler = this._handleEscapeKey.bind(this);\n private _pendingShowListener: (() => void) | null = null;\n private _pendingHideListener: (() => void) | null = null;\n\n // ─── Lifecycle ───\n\n protected firstUpdated(): void {\n this._buildDOM();\n this._attachTippy();\n this._joinGroup();\n\n this.visibilityManager = new VisibilityManager({\n host: this,\n target: this.anchorEl || null,\n enableVisibilityEffect: this.enableVisibilityEffect,\n enableTabClose: this.enableTabClose,\n isOpen: () => this.open,\n onAnchorOutOfView: () => {\n this._setOpen(false);\n this.tippyInstance?.hide();\n this.emit('nile-visibility-change', {\n visible: false,\n reason: 'anchor-out-of-view',\n });\n },\n onDocumentHidden: () => {\n this._setOpen(false);\n this.tippyInstance?.hide();\n this.emit('nile-visibility-change', {\n visible: false,\n reason: 'document-hidden',\n });\n },\n emit: (event, detail) => this.emit(`nile-${event}`, detail),\n });\n\n this.emit('nile-init');\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this._cleanupPendingShowListener();\n this._cleanupPendingHideListener();\n this.visibilityManager?.cleanup();\n this._leaveGroup();\n this._removeEscListener();\n this._destroyTippy();\n this.emit('nile-destroy');\n }\n\n updated(changed: PropertyValues): void {\n super.updated(changed);\n\n if (!this.panelContainer) return;\n\n if (changed.has('open') && !this._suppressOpenWatch) {\n if (this.open) {\n this.visibilityManager?.setup();\n queueMicrotask(() => this.tippyInstance?.show());\n } else {\n this.visibilityManager?.cleanup();\n this.tippyInstance?.hide();\n }\n }\n\n if (changed.has('group')) {\n this._leaveGroup(changed.get('group') as string | null);\n this._joinGroup();\n }\n\n const rebuildProps: string[] = [\n 'placement', 'trigger', 'distance', 'skidding', 'arrow',\n 'animation', 'duration', 'delay', 'interactive', 'interactiveBorder',\n 'maxWidth', 'zIndex', 'followCursor', 'hideOnClick', 'inertia',\n 'allowHTML', 'flip', 'preventOverlayClose', 'disabled', 'width', 'height',\n 'panelClass'\n ];\n\n if (rebuildProps.some(p => changed.has(p))) {\n this._attachTippy();\n }\n }\n\n // ─── Public API ───\n\n /** Programmatically shows the panel. Returns a promise that resolves after the show animation. */\n public show(): Promise<void> {\n this.open = true;\n return new Promise<void>(resolve => {\n this._cleanupPendingShowListener();\n const handler = () => {\n this._pendingShowListener = null;\n resolve();\n };\n this._pendingShowListener = handler;\n this.addEventListener('nile-after-show', handler, { once: true });\n });\n }\n\n /** Programmatically hides the panel. Returns a promise that resolves after the hide animation. */\n public hide(): Promise<void> {\n this.open = false;\n return new Promise<void>(resolve => {\n this._cleanupPendingHideListener();\n const handler = () => {\n this._pendingHideListener = null;\n resolve();\n };\n this._pendingHideListener = handler;\n this.addEventListener('nile-after-hide', handler, { once: true });\n });\n }\n\n private _cleanupPendingShowListener(): void {\n if (this._pendingShowListener) {\n this.removeEventListener('nile-after-show', this._pendingShowListener);\n this._pendingShowListener = null;\n }\n }\n\n private _cleanupPendingHideListener(): void {\n if (this._pendingHideListener) {\n this.removeEventListener('nile-after-hide', this._pendingHideListener);\n this._pendingHideListener = null;\n }\n }\n\n public toggle(): void {\n this.open = !this.open;\n }\n\n public refresh(): void {\n this._attachTippy();\n }\n\n /** Returns the current resolved placement from Tippy/Popper. */\n public getCurrentPlacement(): string {\n const popper = this.tippyInstance?.popper;\n const box = popper?.querySelector('.tippy-box') as HTMLElement | null;\n return box?.dataset.placement ?? this.placement;\n }\n\n /** Returns true if the resolved placement matches the requested placement. */\n public isPositioningOptimal(): boolean {\n return this.getCurrentPlacement() === this.placement;\n }\n\n // ─── Group management ───\n\n private _joinGroup(): void {\n if (!this.group) return;\n let set = NileFloatingPanel._groups.get(this.group);\n if (!set) {\n set = new Set();\n NileFloatingPanel._groups.set(this.group, set);\n }\n set.add(this);\n }\n\n private _leaveGroup(oldGroup?: string | null): void {\n const key = oldGroup ?? this.group;\n if (!key) return;\n const set = NileFloatingPanel._groups.get(key);\n if (set) {\n set.delete(this);\n if (set.size === 0) NileFloatingPanel._groups.delete(key);\n }\n }\n\n private _hideGroupSiblings(): void {\n if (!this.group) return;\n const set = NileFloatingPanel._groups.get(this.group);\n if (!set) return;\n set.forEach(panel => {\n if (panel !== this && panel.open) {\n panel._setOpen(false);\n panel.tippyInstance?.hide();\n }\n });\n }\n\n // ─── Escape key ───\n\n private _addEscListener(): void {\n if (this.closeOnEscape) {\n document.addEventListener('keydown', this._boundEscHandler);\n }\n }\n\n private _removeEscListener(): void {\n document.removeEventListener('keydown', this._boundEscHandler);\n }\n\n private _handleEscapeKey(e: KeyboardEvent): void {\n if (e.key === 'Escape' && this.open) {\n this._setOpen(false);\n this.tippyInstance?.hide();\n }\n }\n\n // ─── ARIA ───\n\n private _applyAria(): void {\n if (!this.anchorEl || !this.panelContainer) return;\n this.panelContainer.setAttribute('role', 'dialog');\n this.panelContainer.id = this._panelId;\n this.anchorEl.setAttribute('aria-haspopup', 'dialog');\n this._syncAriaExpanded();\n }\n\n private _syncAriaExpanded(): void {\n this.anchorEl?.setAttribute('aria-expanded', String(this.open));\n if (this.open) {\n this.anchorEl?.setAttribute('aria-describedby', this._panelId);\n } else {\n this.anchorEl?.removeAttribute('aria-describedby');\n }\n }\n\n // ─── DOM construction ───\n\n private _buildDOM(): void {\n const children = Array.from(this.childNodes);\n\n this.anchorEl = null;\n const titleNodes: Node[] = [];\n const actionNodes: Node[] = [];\n const bodyNodes: Node[] = [];\n let firstElementSeen = false;\n\n for (const child of children) {\n if (child instanceof HTMLElement) {\n const slot = child.getAttribute('slot');\n if (slot === 'title') {\n child.removeAttribute('slot');\n titleNodes.push(child);\n continue;\n }\n if (slot === 'action') {\n child.removeAttribute('slot');\n actionNodes.push(child);\n continue;\n }\n if (!firstElementSeen && !this.for) {\n this.anchorEl = child;\n firstElementSeen = true;\n continue;\n }\n }\n bodyNodes.push(child);\n }\n\n if (this.for) {\n const anchor = document.getElementById(this.for);\n if (anchor) {\n this.anchorEl = anchor;\n }\n }\n\n while (this.firstChild) {\n this.removeChild(this.firstChild);\n }\n\n if (this.anchorEl && !this.for) {\n this.appendChild(this.anchorEl);\n }\n\n this.panelContainer = document.createElement('div');\n this.panelContainer.className = 'nile-floating-panel__content';\n this.panelContainer.style.display = 'none';\n\n const body = document.createElement('div');\n body.className = 'nile-floating-panel__body';\n\n if (titleNodes.length > 0 || this.title) {\n const titleDiv = document.createElement('div');\n titleDiv.className = 'nile-floating-panel__title';\n if (this.title) {\n titleDiv.textContent = this.title;\n } else {\n titleNodes.forEach(n => titleDiv.appendChild(n));\n }\n body.appendChild(titleDiv);\n }\n\n if (bodyNodes.length > 0) {\n const mainDiv = document.createElement('div');\n mainDiv.className = 'nile-floating-panel__main';\n bodyNodes.forEach(n => mainDiv.appendChild(n));\n body.appendChild(mainDiv);\n }\n\n if (actionNodes.length > 0) {\n const actionDiv = document.createElement('div');\n actionDiv.className = 'nile-floating-panel__action';\n actionNodes.forEach(n => actionDiv.appendChild(n));\n body.appendChild(actionDiv);\n }\n\n this.panelContainer.appendChild(body);\n this.appendChild(this.panelContainer);\n\n this._applyAria();\n }\n\n // ─── Tippy management ───\n\n private _resolveArrow() {\n switch (this.arrow) {\n case 'round': return roundArrow;\n case 'none': return false as const;\n default: return true as const;\n }\n }\n\n private _setOpen(value: boolean): void {\n this._suppressOpenWatch = true;\n this.open = value;\n this._syncAriaExpanded();\n this._suppressOpenWatch = false;\n }\n\n private _getEffectiveDuration(): number | [number, number] {\n if (NileFloatingPanel.prefersReducedMotion) return 0;\n return parseDuration(this.duration);\n }\n\n private _getEffectiveAnimation(): string | false {\n if (NileFloatingPanel.prefersReducedMotion) return false;\n return this.animation;\n }\n\n private _attachTippy(): void {\n this._destroyTippy();\n\n if (this.disabled || !this.anchorEl || !this.panelContainer) return;\n\n const resolvedFollowCursor = parseFollowCursor(this.followCursor);\n const effectiveHideOnClick = this.preventOverlayClose ? false : this.hideOnClick;\n\n const options: Partial<Props> = {\n content: this.panelContainer,\n placement: this.placement,\n trigger: this.trigger,\n offset: [this.skidding, this.distance],\n theme: 'floating-panel',\n animation: this._getEffectiveAnimation(),\n interactive: this.interactive,\n arrow: this._resolveArrow(),\n duration: this._getEffectiveDuration(),\n allowHTML: this.allowHTML,\n delay: this.delay as any,\n maxWidth: this.maxWidth,\n zIndex: this.zIndex,\n hideOnClick: effectiveHideOnClick,\n inertia: NileFloatingPanel.prefersReducedMotion ? false : this.inertia,\n interactiveBorder: this.interactiveBorder,\n appendTo: document.body,\n followCursor: resolvedFollowCursor,\n plugins: resolvedFollowCursor ? [followCursorPlugin] : [],\n popperOptions: {\n modifiers: [{ name: 'flip', enabled: this.flip }],\n },\n onMount: (instance) => {\n if (this.panelContainer) this.panelContainer.style.display = '';\n if (this.panelClass) {\n this.panelClass.split(/\\s+/).filter(Boolean).forEach(cls => {\n instance.popper.classList.add(cls);\n });\n }\n },\n onShow: (instance) => {\n if (this.panelContainer) this.panelContainer.style.display = '';\n const tc = instance.popper.querySelector('.tippy-content') as HTMLElement | null;\n if (tc) {\n if (this.width) tc.style.width = this.width;\n if (this.height) { tc.style.height = this.height; tc.style.overflow = 'auto'; }\n }\n this._hideGroupSiblings();\n this._setOpen(true);\n this._addEscListener();\n this.dispatchEvent(new CustomEvent('nile-show', { detail: { instance, target: instance.reference } }));\n this.dispatchEvent(new CustomEvent('nile-toggle', { detail: { open: true, instance, target: instance.reference } }));\n return undefined;\n },\n onShown: (instance) => {\n this.dispatchEvent(new CustomEvent('nile-after-show', { detail: { instance, target: instance.reference } }));\n },\n onHide: (instance) => {\n this._setOpen(false);\n this._removeEscListener();\n this.dispatchEvent(new CustomEvent('nile-hide', { detail: { instance, target: instance.reference } }));\n this.dispatchEvent(new CustomEvent('nile-toggle', { detail: { open: false, instance, target: instance.reference } }));\n return undefined;\n },\n onHidden: (instance) => {\n if (this.panelContainer) this.panelContainer.style.display = 'none';\n this.dispatchEvent(new CustomEvent('nile-after-hide', { detail: { instance, target: instance.reference } }));\n },\n };\n\n this.tippyInstance = tippy(this.anchorEl, options);\n\n if (this.open) {\n queueMicrotask(() => this.tippyInstance?.show());\n }\n }\n\n private _destroyTippy(): void {\n if (this.tippyInstance) {\n this.tippyInstance.destroy();\n this.tippyInstance = null;\n }\n if (this.panelContainer) {\n this.panelContainer.style.display = 'none';\n if (this.panelContainer.parentElement !== this) {\n this.appendChild(this.panelContainer);\n }\n }\n }\n}\n\nexport default NileFloatingPanel;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-floating-panel': NileFloatingPanel;\n }\n}\n"]}
1
+ {"version":3,"file":"nile-floating-panel.js","sourceRoot":"","sources":["../../../src/nile-floating-panel/nile-floating-panel.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;;;AAGH,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAC;AACnD,OAAO,WAAW,MAAM,0BAA0B,CAAC;AACnD,OAAO,KAAK,EAAE,EAGZ,UAAU,EACV,YAAY,IAAI,kBAAkB,GACnC,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,iBAAiB,EACjB,aAAa,GACd,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAEvE;;;;;;;;;;;;;;;;;;GAkBG;AAEI,IAAM,iBAAiB,yBAAvB,MAAM,iBAAkB,SAAQ,WAAW;IAA3C;;QAqBL,yBAAyB;QAGzB,cAAS,GAeQ,QAAQ,CAAC;QAEE,YAAO,GAAW,OAAO,CAAC;QAE1B,aAAQ,GAAG,EAAE,CAAC;QAEd,aAAQ,GAAG,CAAC,CAAC;QAGzC,UAAK,GAAiC,OAAO,CAAC;QAEH,cAAS,GAAW,MAAM,CAAC;QAE3B,aAAQ,GAG5B,GAAG,CAAC;QAEgB,UAAK,GAEzB,CAAC,CAAC;QAEmB,gBAAW,GAAG,IAAI,CAAC;QAEpB,sBAAiB,GAAG,CAAC,CAAC;QAEtB,aAAQ,GAAoB,MAAM,CAAC;QAEnC,WAAM,GAAG,IAAI,CAAC;QAGzD,iBAAY,GAME,KAAK,CAAC;QAEwB,gBAAW,GAExC,IAAI,CAAC;QAEwB,YAAO,GAAG,KAAK,CAAC;QAEhB,cAAS,GAAG,KAAK,CAAC;QAElB,SAAI,GAAG,IAAI,CAAC;QAExD,6BAA6B;QAEiB,QAAG,GAAkB,IAAI,CAAC;QAE5B,SAAI,GAAG,KAAK,CAAC;QAEb,wBAAmB,GAAG,KAAK,CAAC;QAE7B,UAAK,GAAG,EAAE,CAAC;QAEV,aAAQ,GAAG,KAAK,CAAC;QAM7D,wEAAwE;QAC7B,UAAK,GAAkB,IAAI,CAAC;QAEvE,8CAA8C;QACF,kBAAa,GAAG,IAAI,CAAC;QAEjE,2GAA2G;QAChD,eAAU,GAAW,EAAE,CAAC;QAEnF,mCAAmC;QAES,2BAAsB,GAAG,KAAK,CAAC;QAE/B,mBAAc,GAAG,KAAK,CAAC;QAEnE,yBAAyB;QAEjB,kBAAa,GAAoB,IAAI,CAAC;QAEtC,mBAAc,GAAuB,IAAI,CAAC;QAC1C,aAAQ,GAAuB,IAAI,CAAC;QACpC,uBAAkB,GAAG,KAAK,CAAC;QAC3B,aAAQ,GAAG,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC/D,qBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,yBAAoB,GAAwB,IAAI,CAAC;QACjD,yBAAoB,GAAwB,IAAI,CAAC;IAua3D,CAAC;IAniBS,MAAM,KAAK,oBAAoB;QACrC,IAAI,CAAC,mBAAiB,CAAC,mBAAmB,EAAE,CAAC;YAC3C,mBAAiB,CAAC,mBAAmB;gBACnC,MAAM,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,mBAAiB,CAAC,mBAAmB,CAAC,OAAO,CAAC;IACvD,CAAC;IAEM,MAAM,KAAK,MAAM;QACtB,OAAO,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAES,gBAAgB;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAgHD,oBAAoB;IAEV,YAAY;QACpB,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,CAAC;YAC7C,IAAI,EAAE,IAAI;YACV,MAAM,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI;YAC7B,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;YACnD,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI;YACvB,iBAAiB,EAAE,GAAG,EAAE;gBACtB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACrB,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;gBAC3B,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;oBAClC,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,oBAAoB;iBAC7B,CAAC,CAAC;YACL,CAAC;YACD,gBAAgB,EAAE,GAAG,EAAE;gBACrB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACrB,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;gBAC3B,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE;oBAClC,OAAO,EAAE,KAAK;oBACd,MAAM,EAAE,iBAAiB;iBAC1B,CAAC,CAAC;YACL,CAAC;YACD,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,EAAE,EAAE,MAAM,CAAC;SAC5D,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzB,CAAC;IAED,oBAAoB;QAClB,KAAK,CAAC,oBAAoB,EAAE,CAAC;QAC7B,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACnC,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACnC,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE,CAAC;QAClC,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC5B,CAAC;IAED,OAAO,CAAC,OAAuB;QAC7B,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEvB,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,OAAO;QAEjC,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACpD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,CAAC;gBAChC,cAAc,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE,CAAC;gBAClC,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAkB,CAAC,CAAC;YACxD,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,CAAC;QAED,MAAM,YAAY,GAAa;YAC7B,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO;YACvD,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,mBAAmB;YACpE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,SAAS;YAC9D,WAAW,EAAE,MAAM,EAAE,qBAAqB,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ;YACzE,YAAY;SACb,CAAC;QAEF,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED,qBAAqB;IAErB,kGAAkG;IAC3F,IAAI;QACT,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,OAAO,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;YACjC,IAAI,CAAC,2BAA2B,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;gBACjC,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;YACF,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC;YACpC,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;IACL,CAAC;IAED,kGAAkG;IAC3F,IAAI;QACT,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAClB,OAAO,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;YACjC,IAAI,CAAC,2BAA2B,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;gBACjC,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;YACF,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC;YACpC,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,2BAA2B;QACjC,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACvE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACnC,CAAC;IACH,CAAC;IAEO,2BAA2B;QACjC,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACvE,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACnC,CAAC;IACH,CAAC;IAEM,MAAM;QACX,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;IACzB,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,sFAAsF;IAC/E,UAAU;QACf,IAAI,CAAC,aAAa,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;IAC/C,CAAC;IAED,gEAAgE;IACzD,mBAAmB;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;QAC1C,MAAM,GAAG,GAAG,MAAM,EAAE,aAAa,CAAC,YAAY,CAAuB,CAAC;QACtE,OAAO,GAAG,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC;IAClD,CAAC;IAED,8EAA8E;IACvE,oBAAoB;QACzB,OAAO,IAAI,CAAC,mBAAmB,EAAE,KAAK,IAAI,CAAC,SAAS,CAAC;IACvD,CAAC;IAED,2BAA2B;IAEnB,UAAU;QAChB,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;QACxB,IAAI,GAAG,GAAG,mBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;YAChB,mBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACjD,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAEO,WAAW,CAAC,QAAwB;QAC1C,MAAM,GAAG,GAAG,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC;QACnC,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,MAAM,GAAG,GAAG,mBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,GAAG,EAAE,CAAC;YACR,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACjB,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC;gBAAE,mBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAEO,kBAAkB;QACxB,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;QACxB,MAAM,GAAG,GAAG,mBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtD,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAClB,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACjC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACtB,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;YAC9B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,qBAAqB;IAEb,eAAe;QACrB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAEO,kBAAkB;QACxB,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACjE,CAAC;IAEO,gBAAgB,CAAC,CAAgB;QACvC,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACpC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACrB,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,eAAe;IAEP,UAAU;QAChB,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,OAAO;QACnD,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,cAAc,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QACtD,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAChE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,2BAA2B;IAEnB,SAAS;QACf,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE7C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,MAAM,UAAU,GAAW,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAW,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAW,EAAE,CAAC;QAC7B,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAE7B,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;gBACjC,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBACxC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;oBACrB,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;oBAC9B,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACvB,SAAS;gBACX,CAAC;gBACD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACtB,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;oBAC9B,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACxB,SAAS;gBACX,CAAC;gBACD,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;oBACnC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;oBACtB,gBAAgB,GAAG,IAAI,CAAC;oBACxB,SAAS;gBACX,CAAC;YACH,CAAC;YACD,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjD,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;YACzB,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;YACvB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YAC/B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,8BAA8B,CAAC;QAC/D,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QAE3C,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,2BAA2B,CAAC;QAE7C,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC/C,QAAQ,CAAC,SAAS,GAAG,4BAA4B,CAAC;YAClD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;QAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC9C,OAAO,CAAC,SAAS,GAAG,2BAA2B,CAAC;YAChD,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAChD,SAAS,CAAC,SAAS,GAAG,6BAA6B,CAAC;YACpD,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YACnD,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAEtC,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,2BAA2B;IAEnB,aAAa;QACnB,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;YACnB,KAAK,OAAO,CAAC,CAAC,OAAO,UAAU,CAAC;YAChC,KAAK,MAAM,CAAC,CAAC,OAAO,KAAc,CAAC;YACnC,OAAO,CAAC,CAAC,OAAO,IAAa,CAAC;QAChC,CAAC;IACH,CAAC;IAEO,QAAQ,CAAC,KAAc;QAC7B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;QAClB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;IAClC,CAAC;IAEO,qBAAqB;QAC3B,IAAI,mBAAiB,CAAC,oBAAoB;YAAE,OAAO,CAAC,CAAC;QACrD,OAAO,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAEO,sBAAsB;QAC5B,IAAI,mBAAiB,CAAC,oBAAoB;YAAE,OAAO,KAAK,CAAC;QACzD,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,OAAO;QAEpE,MAAM,oBAAoB,GAAG,iBAAiB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAClE,MAAM,oBAAoB,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC;QAEjF,MAAM,OAAO,GAAmB;YAC9B,OAAO,EAAE,IAAI,CAAC,cAAc;YAC5B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC;YACtC,KAAK,EAAE,gBAAgB;YACvB,SAAS,EAAE,IAAI,CAAC,sBAAsB,EAAE;YACxC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE;YAC3B,QAAQ,EAAE,IAAI,CAAC,qBAAqB,EAAE;YACtC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,KAAK,EAAE,IAAI,CAAC,KAAY;YACxB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,WAAW,EAAE,oBAAoB;YACjC,OAAO,EAAE,mBAAiB,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO;YACtE,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,QAAQ,EAAE,QAAQ,CAAC,IAAI;YACvB,YAAY,EAAE,oBAAoB;YAClC,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE;YACzD,aAAa,EAAE;gBACb,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;aAClD;YACD,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE;gBACpB,IAAI,IAAI,CAAC,cAAc;oBAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;gBAChE,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACpB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;wBACzD,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACrC,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE;gBACnB,IAAI,IAAI,CAAC,cAAc;oBAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;gBAChE,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAuB,CAAC;gBACjF,IAAI,EAAE,EAAE,CAAC;oBACP,IAAI,IAAI,CAAC,KAAK;wBAAE,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;oBAC5C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;wBAAC,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;wBAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC;oBAAC,CAAC;gBACjF,CAAC;gBACD,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACpB,IAAI,CAAC,eAAe,EAAE,CAAC;gBACvB,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;gBACvG,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;gBACrH,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE;gBACpB,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;YAC/G,CAAC;YACD,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE;gBACnB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACrB,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;gBACvG,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;gBACtH,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE;gBACrB,IAAI,IAAI,CAAC,cAAc;oBAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;gBACpE,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;YAC/G,CAAC;SACF,CAAC;QAEF,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAEnD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,cAAc,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC;QACD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YAC3C,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;gBAC/C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;IACH,CAAC;;AAtiBc,yBAAO,GAAG,IAAI,GAAG,EAAkC,AAA5C,CAA6C;AAEpD,qCAAmB,GAA0B,IAAI,AAA9B,CAA+B;AAqBjE;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;oDAgBD;AAEE;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;kDAA2B;AAE1B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;mDAAe;AAEd;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;mDAAc;AAGzC;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gDACI;AAEH;IAA1C,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;oDAA4B;AAE3B;IAA1C,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;mDAGf;AAEgB;IAA1C,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gDAEjB;AAEmB;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;sDAAoB;AAEpB;IAA1C,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;4DAAuB;AAEtB;IAA1C,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;mDAAoC;AAEnC;IAA1C,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;iDAAe;AAGzD;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;uDAOtB;AAEwB;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;sDAEvB;AAEwB;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;kDAAiB;AAEhB;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;oDAAmB;AAElB;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;+CAAa;AAIV;IAA7C,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;8CAA2B;AAE5B;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;+CAAc;AAEb;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;8DAA6B;AAE7B;IAA1C,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gDAAY;AAEV;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;mDAAkB;AAElB;IAA1C,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gDAAgB;AAEf;IAA1C,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;iDAAiB;AAGhB;IAA1C,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gDAA6B;AAG3B;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;wDAAsB;AAGN;IAA1D,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAC,CAAC;qDAAyB;AAIvC;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;iEAAgC;AAE/B;IAA3C,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;yDAAwB;AArHxD,iBAAiB;IAD7B,aAAa,CAAC,qBAAqB,CAAC;GACxB,iBAAiB,CAwiB7B;;AAED,eAAe,iBAAiB,CAAC","sourcesContent":["/**\n * Copyright Aquera Inc 2025\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 { CSSResultArray, PropertyValues } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { styles } from './nile-floating-panel.css';\nimport NileElement from '../internal/nile-element';\nimport tippy, {\n Instance,\n Props,\n roundArrow,\n followCursor as followCursorPlugin,\n} from 'tippy.js';\nimport {\n parseFollowCursor,\n parseDuration,\n} from '../nile-lite-tooltip/utils';\nimport { VisibilityManager } from '../utilities/visibility-manager.js';\n\n/**\n * Nile floating-panel component.\n *\n * A popover that supports rich content (title, body, actions).\n *\n * **Wrapper mode** (default): first child element is the trigger.\n * **For mode**: set `for=\"elementId\"` to attach to an external element.\n *\n * @tag nile-floating-panel\n *\n * @fires nile-init - Component initialized.\n * @fires nile-destroy - Component destroyed.\n * @fires nile-show - Panel opened.\n * @fires nile-hide - Panel closed.\n * @fires nile-after-show - Panel fully visible after animation.\n * @fires nile-after-hide - Panel fully hidden after animation.\n * @fires nile-toggle - Open/close transition (detail.open).\n * @fires nile-visibility-change - Hidden by scroll/tab change.\n */\n@customElement('nile-floating-panel')\nexport class NileFloatingPanel extends NileElement {\n private static _groups = new Map<string, Set<NileFloatingPanel>>();\n\n private static _reducedMotionQuery: MediaQueryList | null = null;\n\n private static get prefersReducedMotion(): boolean {\n if (!NileFloatingPanel._reducedMotionQuery) {\n NileFloatingPanel._reducedMotionQuery =\n window.matchMedia('(prefers-reduced-motion: reduce)');\n }\n return NileFloatingPanel._reducedMotionQuery.matches;\n }\n\n public static get styles(): CSSResultArray {\n return [styles];\n }\n\n protected createRenderRoot() {\n return this;\n }\n\n // ─── Tippy.js props ───\n\n @property({ type: String })\n placement:\n | 'top'\n | 'top-start'\n | 'top-end'\n | 'right'\n | 'right-start'\n | 'right-end'\n | 'bottom'\n | 'bottom-start'\n | 'bottom-end'\n | 'left'\n | 'left-start'\n | 'left-end'\n | 'auto'\n | 'auto-start'\n | 'auto-end' = 'bottom';\n\n @property({ type: String }) trigger: string = 'click';\n\n @property({ type: Number }) distance = 12;\n\n @property({ type: Number }) skidding = 0;\n\n @property({ type: String, reflect: true })\n arrow: 'round' | 'default' | 'none' = 'round';\n\n @property({ type: String, reflect: true }) animation: string = 'fade';\n\n @property({ type: String, reflect: true }) duration:\n | string\n | number\n | [number, number] = 200;\n\n @property({ type: String, reflect: true }) delay:\n | number\n | [number, number] = 0;\n\n @property({ type: Boolean, reflect: true }) interactive = true;\n\n @property({ type: Number, reflect: true }) interactiveBorder = 2;\n\n @property({ type: String, reflect: true }) maxWidth: string | number = 'none';\n\n @property({ type: Number, reflect: true }) zIndex = 9999;\n\n @property({ type: String, reflect: true })\n followCursor:\n | boolean\n | 'initial'\n | 'horizontal'\n | 'vertical'\n | 'true'\n | 'false' = false;\n\n @property({ type: Boolean, reflect: true }) hideOnClick:\n | boolean\n | 'toggle' = true;\n\n @property({ type: Boolean, reflect: true }) inertia = false;\n\n @property({ type: Boolean, reflect: true }) allowHTML = false;\n\n @property({ type: Boolean, reflect: true }) flip = true;\n\n // ─── Popover-like props ───\n\n @property({ type: String, attribute: 'for' }) for: string | null = null;\n\n @property({ type: Boolean, reflect: true }) open = false;\n\n @property({ type: Boolean, reflect: true }) preventOverlayClose = false;\n\n @property({ type: String, reflect: true }) title = '';\n\n @property({ type: Boolean, reflect: true }) disabled = false;\n\n @property({ type: String, reflect: true }) width?: string;\n\n @property({ type: String, reflect: true }) height?: string;\n\n /** When set, only one panel in the same group can be open at a time. */\n @property({ type: String, reflect: true }) group: string | null = null;\n\n /** Close the panel when Escape is pressed. */\n @property({ type: Boolean, reflect: true }) closeOnEscape = true;\n\n /** Custom CSS class(es) added to the Tippy popper element, allowing per-instance styling from the host. */\n @property({ type: String, reflect: true, attribute: true}) panelClass: string = '';\n\n // ─── Visibility manager props ───\n\n @property({ type: Boolean, reflect: true }) enableVisibilityEffect = false;\n\n @property({ type: Boolean, reflect: true }) enableTabClose = false;\n\n // ─── Internal state ───\n\n private tippyInstance: Instance | null = null;\n private visibilityManager?: VisibilityManager;\n private panelContainer: HTMLElement | null = null;\n private anchorEl: HTMLElement | null = null;\n private _suppressOpenWatch = false;\n private _panelId = `nile-fp-${Math.random().toString(36).slice(2, 9)}`;\n private _boundEscHandler = this._handleEscapeKey.bind(this);\n private _pendingShowListener: (() => void) | null = null;\n private _pendingHideListener: (() => void) | null = null;\n\n // ─── Lifecycle ───\n\n protected firstUpdated(): void {\n this._buildDOM();\n this._attachTippy();\n this._joinGroup();\n\n this.visibilityManager = new VisibilityManager({\n host: this,\n target: this.anchorEl || null,\n enableVisibilityEffect: this.enableVisibilityEffect,\n enableTabClose: this.enableTabClose,\n isOpen: () => this.open,\n onAnchorOutOfView: () => {\n this._setOpen(false);\n this.tippyInstance?.hide();\n this.emit('nile-visibility-change', {\n visible: false,\n reason: 'anchor-out-of-view',\n });\n },\n onDocumentHidden: () => {\n this._setOpen(false);\n this.tippyInstance?.hide();\n this.emit('nile-visibility-change', {\n visible: false,\n reason: 'document-hidden',\n });\n },\n emit: (event, detail) => this.emit(`nile-${event}`, detail),\n });\n\n this.emit('nile-init');\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback();\n this._cleanupPendingShowListener();\n this._cleanupPendingHideListener();\n this.visibilityManager?.cleanup();\n this._leaveGroup();\n this._removeEscListener();\n this._destroyTippy();\n this.emit('nile-destroy');\n }\n\n updated(changed: PropertyValues): void {\n super.updated(changed);\n\n if (!this.panelContainer) return;\n\n if (changed.has('open') && !this._suppressOpenWatch) {\n if (this.open) {\n this.visibilityManager?.setup();\n queueMicrotask(() => this.tippyInstance?.show());\n } else {\n this.visibilityManager?.cleanup();\n this.tippyInstance?.hide();\n }\n }\n\n if (changed.has('group')) {\n this._leaveGroup(changed.get('group') as string | null);\n this._joinGroup();\n }\n\n const rebuildProps: string[] = [\n 'placement', 'trigger', 'distance', 'skidding', 'arrow',\n 'animation', 'duration', 'delay', 'interactive', 'interactiveBorder',\n 'maxWidth', 'zIndex', 'followCursor', 'hideOnClick', 'inertia',\n 'allowHTML', 'flip', 'preventOverlayClose', 'disabled', 'width', 'height',\n 'panelClass'\n ];\n\n if (rebuildProps.some(p => changed.has(p))) {\n this._attachTippy();\n }\n }\n\n // ─── Public API ───\n\n /** Programmatically shows the panel. Returns a promise that resolves after the show animation. */\n public show(): Promise<void> {\n this.open = true;\n return new Promise<void>(resolve => {\n this._cleanupPendingShowListener();\n const handler = () => {\n this._pendingShowListener = null;\n resolve();\n };\n this._pendingShowListener = handler;\n this.addEventListener('nile-after-show', handler, { once: true });\n });\n }\n\n /** Programmatically hides the panel. Returns a promise that resolves after the hide animation. */\n public hide(): Promise<void> {\n this.open = false;\n return new Promise<void>(resolve => {\n this._cleanupPendingHideListener();\n const handler = () => {\n this._pendingHideListener = null;\n resolve();\n };\n this._pendingHideListener = handler;\n this.addEventListener('nile-after-hide', handler, { once: true });\n });\n }\n\n private _cleanupPendingShowListener(): void {\n if (this._pendingShowListener) {\n this.removeEventListener('nile-after-show', this._pendingShowListener);\n this._pendingShowListener = null;\n }\n }\n\n private _cleanupPendingHideListener(): void {\n if (this._pendingHideListener) {\n this.removeEventListener('nile-after-hide', this._pendingHideListener);\n this._pendingHideListener = null;\n }\n }\n\n public toggle(): void {\n this.open = !this.open;\n }\n\n public refresh(): void {\n this._attachTippy();\n }\n\n /** Recomputes the panel position against its anchor (e.g. after the anchor moved). */\n public reposition(): void {\n this.tippyInstance?.popperInstance?.update();\n }\n\n /** Returns the current resolved placement from Tippy/Popper. */\n public getCurrentPlacement(): string {\n const popper = this.tippyInstance?.popper;\n const box = popper?.querySelector('.tippy-box') as HTMLElement | null;\n return box?.dataset.placement ?? this.placement;\n }\n\n /** Returns true if the resolved placement matches the requested placement. */\n public isPositioningOptimal(): boolean {\n return this.getCurrentPlacement() === this.placement;\n }\n\n // ─── Group management ───\n\n private _joinGroup(): void {\n if (!this.group) return;\n let set = NileFloatingPanel._groups.get(this.group);\n if (!set) {\n set = new Set();\n NileFloatingPanel._groups.set(this.group, set);\n }\n set.add(this);\n }\n\n private _leaveGroup(oldGroup?: string | null): void {\n const key = oldGroup ?? this.group;\n if (!key) return;\n const set = NileFloatingPanel._groups.get(key);\n if (set) {\n set.delete(this);\n if (set.size === 0) NileFloatingPanel._groups.delete(key);\n }\n }\n\n private _hideGroupSiblings(): void {\n if (!this.group) return;\n const set = NileFloatingPanel._groups.get(this.group);\n if (!set) return;\n set.forEach(panel => {\n if (panel !== this && panel.open) {\n panel._setOpen(false);\n panel.tippyInstance?.hide();\n }\n });\n }\n\n // ─── Escape key ───\n\n private _addEscListener(): void {\n if (this.closeOnEscape) {\n document.addEventListener('keydown', this._boundEscHandler);\n }\n }\n\n private _removeEscListener(): void {\n document.removeEventListener('keydown', this._boundEscHandler);\n }\n\n private _handleEscapeKey(e: KeyboardEvent): void {\n if (e.key === 'Escape' && this.open) {\n this._setOpen(false);\n this.tippyInstance?.hide();\n }\n }\n\n // ─── ARIA ───\n\n private _applyAria(): void {\n if (!this.anchorEl || !this.panelContainer) return;\n this.panelContainer.setAttribute('role', 'dialog');\n this.panelContainer.id = this._panelId;\n this.anchorEl.setAttribute('aria-haspopup', 'dialog');\n this._syncAriaExpanded();\n }\n\n private _syncAriaExpanded(): void {\n this.anchorEl?.setAttribute('aria-expanded', String(this.open));\n if (this.open) {\n this.anchorEl?.setAttribute('aria-describedby', this._panelId);\n } else {\n this.anchorEl?.removeAttribute('aria-describedby');\n }\n }\n\n // ─── DOM construction ───\n\n private _buildDOM(): void {\n const children = Array.from(this.childNodes);\n\n this.anchorEl = null;\n const titleNodes: Node[] = [];\n const actionNodes: Node[] = [];\n const bodyNodes: Node[] = [];\n let firstElementSeen = false;\n\n for (const child of children) {\n if (child instanceof HTMLElement) {\n const slot = child.getAttribute('slot');\n if (slot === 'title') {\n child.removeAttribute('slot');\n titleNodes.push(child);\n continue;\n }\n if (slot === 'action') {\n child.removeAttribute('slot');\n actionNodes.push(child);\n continue;\n }\n if (!firstElementSeen && !this.for) {\n this.anchorEl = child;\n firstElementSeen = true;\n continue;\n }\n }\n bodyNodes.push(child);\n }\n\n if (this.for) {\n const anchor = document.getElementById(this.for);\n if (anchor) {\n this.anchorEl = anchor;\n }\n }\n\n while (this.firstChild) {\n this.removeChild(this.firstChild);\n }\n\n if (this.anchorEl && !this.for) {\n this.appendChild(this.anchorEl);\n }\n\n this.panelContainer = document.createElement('div');\n this.panelContainer.className = 'nile-floating-panel__content';\n this.panelContainer.style.display = 'none';\n\n const body = document.createElement('div');\n body.className = 'nile-floating-panel__body';\n\n if (titleNodes.length > 0 || this.title) {\n const titleDiv = document.createElement('div');\n titleDiv.className = 'nile-floating-panel__title';\n if (this.title) {\n titleDiv.textContent = this.title;\n } else {\n titleNodes.forEach(n => titleDiv.appendChild(n));\n }\n body.appendChild(titleDiv);\n }\n\n if (bodyNodes.length > 0) {\n const mainDiv = document.createElement('div');\n mainDiv.className = 'nile-floating-panel__main';\n bodyNodes.forEach(n => mainDiv.appendChild(n));\n body.appendChild(mainDiv);\n }\n\n if (actionNodes.length > 0) {\n const actionDiv = document.createElement('div');\n actionDiv.className = 'nile-floating-panel__action';\n actionNodes.forEach(n => actionDiv.appendChild(n));\n body.appendChild(actionDiv);\n }\n\n this.panelContainer.appendChild(body);\n this.appendChild(this.panelContainer);\n\n this._applyAria();\n }\n\n // ─── Tippy management ───\n\n private _resolveArrow() {\n switch (this.arrow) {\n case 'round': return roundArrow;\n case 'none': return false as const;\n default: return true as const;\n }\n }\n\n private _setOpen(value: boolean): void {\n this._suppressOpenWatch = true;\n this.open = value;\n this._syncAriaExpanded();\n this._suppressOpenWatch = false;\n }\n\n private _getEffectiveDuration(): number | [number, number] {\n if (NileFloatingPanel.prefersReducedMotion) return 0;\n return parseDuration(this.duration);\n }\n\n private _getEffectiveAnimation(): string | false {\n if (NileFloatingPanel.prefersReducedMotion) return false;\n return this.animation;\n }\n\n private _attachTippy(): void {\n this._destroyTippy();\n\n if (this.disabled || !this.anchorEl || !this.panelContainer) return;\n\n const resolvedFollowCursor = parseFollowCursor(this.followCursor);\n const effectiveHideOnClick = this.preventOverlayClose ? false : this.hideOnClick;\n\n const options: Partial<Props> = {\n content: this.panelContainer,\n placement: this.placement,\n trigger: this.trigger,\n offset: [this.skidding, this.distance],\n theme: 'floating-panel',\n animation: this._getEffectiveAnimation(),\n interactive: this.interactive,\n arrow: this._resolveArrow(),\n duration: this._getEffectiveDuration(),\n allowHTML: this.allowHTML,\n delay: this.delay as any,\n maxWidth: this.maxWidth,\n zIndex: this.zIndex,\n hideOnClick: effectiveHideOnClick,\n inertia: NileFloatingPanel.prefersReducedMotion ? false : this.inertia,\n interactiveBorder: this.interactiveBorder,\n appendTo: document.body,\n followCursor: resolvedFollowCursor,\n plugins: resolvedFollowCursor ? [followCursorPlugin] : [],\n popperOptions: {\n modifiers: [{ name: 'flip', enabled: this.flip }],\n },\n onMount: (instance) => {\n if (this.panelContainer) this.panelContainer.style.display = '';\n if (this.panelClass) {\n this.panelClass.split(/\\s+/).filter(Boolean).forEach(cls => {\n instance.popper.classList.add(cls);\n });\n }\n },\n onShow: (instance) => {\n if (this.panelContainer) this.panelContainer.style.display = '';\n const tc = instance.popper.querySelector('.tippy-content') as HTMLElement | null;\n if (tc) {\n if (this.width) tc.style.width = this.width;\n if (this.height) { tc.style.height = this.height; tc.style.overflow = 'auto'; }\n }\n this._hideGroupSiblings();\n this._setOpen(true);\n this._addEscListener();\n this.dispatchEvent(new CustomEvent('nile-show', { detail: { instance, target: instance.reference } }));\n this.dispatchEvent(new CustomEvent('nile-toggle', { detail: { open: true, instance, target: instance.reference } }));\n return undefined;\n },\n onShown: (instance) => {\n this.dispatchEvent(new CustomEvent('nile-after-show', { detail: { instance, target: instance.reference } }));\n },\n onHide: (instance) => {\n this._setOpen(false);\n this._removeEscListener();\n this.dispatchEvent(new CustomEvent('nile-hide', { detail: { instance, target: instance.reference } }));\n this.dispatchEvent(new CustomEvent('nile-toggle', { detail: { open: false, instance, target: instance.reference } }));\n return undefined;\n },\n onHidden: (instance) => {\n if (this.panelContainer) this.panelContainer.style.display = 'none';\n this.dispatchEvent(new CustomEvent('nile-after-hide', { detail: { instance, target: instance.reference } }));\n },\n };\n\n this.tippyInstance = tippy(this.anchorEl, options);\n\n if (this.open) {\n queueMicrotask(() => this.tippyInstance?.show());\n }\n }\n\n private _destroyTippy(): void {\n if (this.tippyInstance) {\n this.tippyInstance.destroy();\n this.tippyInstance = null;\n }\n if (this.panelContainer) {\n this.panelContainer.style.display = 'none';\n if (this.panelContainer.parentElement !== this) {\n this.appendChild(this.panelContainer);\n }\n }\n }\n}\n\nexport default NileFloatingPanel;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-floating-panel': NileFloatingPanel;\n }\n}\n"]}