@carbon/web-components 2.48.0 → 2.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/custom-elements.json +38 -13
  2. package/es/components/ai-label/ai-label.scss.js +1 -1
  3. package/es/components/breadcrumb/breadcrumb.scss.js +1 -1
  4. package/es/components/button/button-set.js +1 -1
  5. package/es/components/button/button-set.js.map +1 -1
  6. package/es/components/button/button.scss.js +1 -1
  7. package/es/components/checkbox/checkbox.js +1 -1
  8. package/es/components/checkbox/checkbox.js.map +1 -1
  9. package/es/components/code-snippet/code-snippet.scss.js +1 -1
  10. package/es/components/combo-box/combo-box-item.d.ts +3 -4
  11. package/es/components/combo-box/combo-box-item.js +0 -14
  12. package/es/components/combo-box/combo-box-item.js.map +1 -1
  13. package/es/components/combo-box/combo-box.d.ts +7 -0
  14. package/es/components/combo-box/combo-box.js +30 -8
  15. package/es/components/combo-box/combo-box.js.map +1 -1
  16. package/es/components/combo-box/combo-box.scss.js +1 -1
  17. package/es/components/combo-button/combo-button.scss.js +1 -1
  18. package/es/components/contained-list/contained-list.scss.js +1 -1
  19. package/es/components/content-switcher/content-switcher-item.d.ts +1 -1
  20. package/es/components/content-switcher/content-switcher-item.js +2 -2
  21. package/es/components/content-switcher/content-switcher-item.js.map +1 -1
  22. package/es/components/content-switcher/content-switcher.scss.js +1 -1
  23. package/es/components/copy-button/copy-button.scss.js +1 -1
  24. package/es/components/data-table/data-table.scss.js +1 -1
  25. package/es/components/data-table/table-skeleton.d.ts +1 -5
  26. package/es/components/data-table/table-skeleton.js +2 -10
  27. package/es/components/data-table/table-skeleton.js.map +1 -1
  28. package/es/components/dropdown/dropdown-item.d.ts +15 -0
  29. package/es/components/dropdown/dropdown-item.js +52 -0
  30. package/es/components/dropdown/dropdown-item.js.map +1 -1
  31. package/es/components/dropdown/dropdown.js +0 -1
  32. package/es/components/dropdown/dropdown.js.map +1 -1
  33. package/es/components/dropdown/dropdown.scss.js +1 -1
  34. package/es/components/file-uploader/file-uploader.scss.js +1 -1
  35. package/es/components/menu-button/menu-button.scss.js +1 -1
  36. package/es/components/modal/modal.scss.js +1 -1
  37. package/es/components/multi-select/multi-select.js +0 -3
  38. package/es/components/multi-select/multi-select.js.map +1 -1
  39. package/es/components/notification/actionable-notification.scss.js +1 -1
  40. package/es/components/notification/inline-notification.scss.js +1 -1
  41. package/es/components/notification/toast-notification.scss.js +1 -1
  42. package/es/components/overflow-menu/overflow-menu-item.d.ts +5 -1
  43. package/es/components/overflow-menu/overflow-menu-item.js +24 -1
  44. package/es/components/overflow-menu/overflow-menu-item.js.map +1 -1
  45. package/es/components/overflow-menu/overflow-menu.d.ts +1 -1
  46. package/es/components/overflow-menu/overflow-menu.js +3 -3
  47. package/es/components/overflow-menu/overflow-menu.js.map +1 -1
  48. package/es/components/overflow-menu/overflow-menu.scss.js +1 -1
  49. package/es/components/pagination/pagination.scss.js +1 -1
  50. package/es/components/pagination-nav/pagination-nav.scss.js +1 -1
  51. package/es/components/popover/popover.d.ts +12 -2
  52. package/es/components/popover/popover.js +56 -37
  53. package/es/components/popover/popover.js.map +1 -1
  54. package/es/components/popover/popover.scss.js +1 -1
  55. package/es/components/progress-indicator/progress-indicator.scss.js +1 -1
  56. package/es/components/progress-indicator/progress-step.d.ts +1 -1
  57. package/es/components/progress-indicator/progress-step.js +2 -2
  58. package/es/components/progress-indicator/progress-step.js.map +1 -1
  59. package/es/components/radio-button/radio-button.js +1 -1
  60. package/es/components/radio-button/radio-button.js.map +1 -1
  61. package/es/components/select/select.d.ts +1 -1
  62. package/es/components/select/select.js +3 -3
  63. package/es/components/select/select.js.map +1 -1
  64. package/es/components/skip-to-content/skip-to-content.scss.js +1 -1
  65. package/es/components/slug/slug.scss.js +1 -1
  66. package/es/components/tabs/tab.d.ts +1 -1
  67. package/es/components/tabs/tab.js +2 -2
  68. package/es/components/tabs/tab.js.map +1 -1
  69. package/es/components/tabs/tabs.scss.js +1 -1
  70. package/es/components/tag/tag.d.ts +1 -1
  71. package/es/components/tag/tag.js +2 -2
  72. package/es/components/tag/tag.js.map +1 -1
  73. package/es/components/tag/tag.scss.js +1 -1
  74. package/es/components/text-input/text-input.d.ts +2 -0
  75. package/es/components/text-input/text-input.js +26 -14
  76. package/es/components/text-input/text-input.js.map +1 -1
  77. package/es/components/tile/expandable-tile.d.ts +1 -1
  78. package/es/components/tile/expandable-tile.js +2 -2
  79. package/es/components/tile/expandable-tile.js.map +1 -1
  80. package/es/components/time-picker/time-picker-select.d.ts +1 -1
  81. package/es/components/time-picker/time-picker-select.js +2 -2
  82. package/es/components/time-picker/time-picker-select.js.map +1 -1
  83. package/es/components/toggle-tip/toggletip.d.ts +0 -1
  84. package/es/components/toggle-tip/toggletip.js +2 -13
  85. package/es/components/toggle-tip/toggletip.js.map +1 -1
  86. package/es/components/toggle-tip/toggletip.scss.js +1 -1
  87. package/es/components/tooltip/tooltip.scss.js +1 -1
  88. package/es/components/ui-shell/header-menu.d.ts +1 -1
  89. package/es/components/ui-shell/header-menu.js +2 -2
  90. package/es/components/ui-shell/header-menu.js.map +1 -1
  91. package/es/components/ui-shell/header.scss.js +1 -1
  92. package/es/components/ui-shell/side-nav-menu.d.ts +1 -1
  93. package/es/components/ui-shell/side-nav-menu.js +2 -2
  94. package/es/components/ui-shell/side-nav-menu.js.map +1 -1
  95. package/es/globals/controllers/floating-controller.js +6 -2
  96. package/es/globals/controllers/floating-controller.js.map +1 -1
  97. package/es/globals/internal/deep-shadow-contains.d.ts +15 -0
  98. package/es/globals/internal/deep-shadow-contains.js +36 -0
  99. package/es/globals/internal/deep-shadow-contains.js.map +1 -0
  100. package/es/polyfills/toggle-attribute.d.ts +1 -1
  101. package/es-custom/components/ai-label/ai-label.scss.js +1 -1
  102. package/es-custom/components/breadcrumb/breadcrumb.scss.js +1 -1
  103. package/es-custom/components/button/button-set.js +1 -1
  104. package/es-custom/components/button/button-set.js.map +1 -1
  105. package/es-custom/components/button/button.scss.js +1 -1
  106. package/es-custom/components/checkbox/checkbox.js +1 -1
  107. package/es-custom/components/checkbox/checkbox.js.map +1 -1
  108. package/es-custom/components/code-snippet/code-snippet.scss.js +1 -1
  109. package/es-custom/components/combo-box/combo-box-item.d.ts +3 -4
  110. package/es-custom/components/combo-box/combo-box-item.js +0 -14
  111. package/es-custom/components/combo-box/combo-box-item.js.map +1 -1
  112. package/es-custom/components/combo-box/combo-box.d.ts +7 -0
  113. package/es-custom/components/combo-box/combo-box.js +30 -8
  114. package/es-custom/components/combo-box/combo-box.js.map +1 -1
  115. package/es-custom/components/combo-box/combo-box.scss.js +1 -1
  116. package/es-custom/components/combo-button/combo-button.scss.js +1 -1
  117. package/es-custom/components/contained-list/contained-list.scss.js +1 -1
  118. package/es-custom/components/content-switcher/content-switcher-item.d.ts +1 -1
  119. package/es-custom/components/content-switcher/content-switcher-item.js +2 -2
  120. package/es-custom/components/content-switcher/content-switcher-item.js.map +1 -1
  121. package/es-custom/components/content-switcher/content-switcher.scss.js +1 -1
  122. package/es-custom/components/copy-button/copy-button.scss.js +1 -1
  123. package/es-custom/components/data-table/data-table.scss.js +1 -1
  124. package/es-custom/components/data-table/table-skeleton.d.ts +1 -5
  125. package/es-custom/components/data-table/table-skeleton.js +2 -10
  126. package/es-custom/components/data-table/table-skeleton.js.map +1 -1
  127. package/es-custom/components/dropdown/dropdown-item.d.ts +15 -0
  128. package/es-custom/components/dropdown/dropdown-item.js +52 -0
  129. package/es-custom/components/dropdown/dropdown-item.js.map +1 -1
  130. package/es-custom/components/dropdown/dropdown.js +0 -1
  131. package/es-custom/components/dropdown/dropdown.js.map +1 -1
  132. package/es-custom/components/dropdown/dropdown.scss.js +1 -1
  133. package/es-custom/components/file-uploader/file-uploader.scss.js +1 -1
  134. package/es-custom/components/menu-button/menu-button.scss.js +1 -1
  135. package/es-custom/components/modal/modal.scss.js +1 -1
  136. package/es-custom/components/multi-select/multi-select.js +0 -3
  137. package/es-custom/components/multi-select/multi-select.js.map +1 -1
  138. package/es-custom/components/notification/actionable-notification.scss.js +1 -1
  139. package/es-custom/components/notification/inline-notification.scss.js +1 -1
  140. package/es-custom/components/notification/toast-notification.scss.js +1 -1
  141. package/es-custom/components/overflow-menu/overflow-menu-item.d.ts +5 -1
  142. package/es-custom/components/overflow-menu/overflow-menu-item.js +24 -1
  143. package/es-custom/components/overflow-menu/overflow-menu-item.js.map +1 -1
  144. package/es-custom/components/overflow-menu/overflow-menu.d.ts +1 -1
  145. package/es-custom/components/overflow-menu/overflow-menu.js +3 -3
  146. package/es-custom/components/overflow-menu/overflow-menu.js.map +1 -1
  147. package/es-custom/components/overflow-menu/overflow-menu.scss.js +1 -1
  148. package/es-custom/components/pagination/pagination.scss.js +1 -1
  149. package/es-custom/components/pagination-nav/pagination-nav.scss.js +1 -1
  150. package/es-custom/components/popover/popover.d.ts +12 -2
  151. package/es-custom/components/popover/popover.js +56 -37
  152. package/es-custom/components/popover/popover.js.map +1 -1
  153. package/es-custom/components/popover/popover.scss.js +1 -1
  154. package/es-custom/components/progress-indicator/progress-indicator.scss.js +1 -1
  155. package/es-custom/components/progress-indicator/progress-step.d.ts +1 -1
  156. package/es-custom/components/progress-indicator/progress-step.js +2 -2
  157. package/es-custom/components/progress-indicator/progress-step.js.map +1 -1
  158. package/es-custom/components/radio-button/radio-button.js +1 -1
  159. package/es-custom/components/radio-button/radio-button.js.map +1 -1
  160. package/es-custom/components/select/select.d.ts +1 -1
  161. package/es-custom/components/select/select.js +3 -3
  162. package/es-custom/components/select/select.js.map +1 -1
  163. package/es-custom/components/skip-to-content/skip-to-content.scss.js +1 -1
  164. package/es-custom/components/slug/slug.scss.js +1 -1
  165. package/es-custom/components/tabs/tab.d.ts +1 -1
  166. package/es-custom/components/tabs/tab.js +2 -2
  167. package/es-custom/components/tabs/tab.js.map +1 -1
  168. package/es-custom/components/tabs/tabs.scss.js +1 -1
  169. package/es-custom/components/tag/tag.d.ts +1 -1
  170. package/es-custom/components/tag/tag.js +2 -2
  171. package/es-custom/components/tag/tag.js.map +1 -1
  172. package/es-custom/components/tag/tag.scss.js +1 -1
  173. package/es-custom/components/text-input/text-input.d.ts +2 -0
  174. package/es-custom/components/text-input/text-input.js +26 -14
  175. package/es-custom/components/text-input/text-input.js.map +1 -1
  176. package/es-custom/components/tile/expandable-tile.d.ts +1 -1
  177. package/es-custom/components/tile/expandable-tile.js +2 -2
  178. package/es-custom/components/tile/expandable-tile.js.map +1 -1
  179. package/es-custom/components/time-picker/time-picker-select.d.ts +1 -1
  180. package/es-custom/components/time-picker/time-picker-select.js +2 -2
  181. package/es-custom/components/time-picker/time-picker-select.js.map +1 -1
  182. package/es-custom/components/toggle-tip/toggletip.d.ts +0 -1
  183. package/es-custom/components/toggle-tip/toggletip.js +2 -13
  184. package/es-custom/components/toggle-tip/toggletip.js.map +1 -1
  185. package/es-custom/components/toggle-tip/toggletip.scss.js +1 -1
  186. package/es-custom/components/tooltip/tooltip.scss.js +1 -1
  187. package/es-custom/components/ui-shell/header-menu.d.ts +1 -1
  188. package/es-custom/components/ui-shell/header-menu.js +2 -2
  189. package/es-custom/components/ui-shell/header-menu.js.map +1 -1
  190. package/es-custom/components/ui-shell/header.scss.js +1 -1
  191. package/es-custom/components/ui-shell/side-nav-menu.d.ts +1 -1
  192. package/es-custom/components/ui-shell/side-nav-menu.js +2 -2
  193. package/es-custom/components/ui-shell/side-nav-menu.js.map +1 -1
  194. package/es-custom/globals/controllers/floating-controller.js +6 -2
  195. package/es-custom/globals/controllers/floating-controller.js.map +1 -1
  196. package/es-custom/globals/internal/deep-shadow-contains.d.ts +15 -0
  197. package/es-custom/globals/internal/deep-shadow-contains.js +36 -0
  198. package/es-custom/globals/internal/deep-shadow-contains.js.map +1 -0
  199. package/es-custom/polyfills/toggle-attribute.d.ts +1 -1
  200. package/lib/components/combo-box/combo-box-item.d.ts +3 -4
  201. package/lib/components/combo-box/combo-box.d.ts +7 -0
  202. package/lib/components/content-switcher/content-switcher-item.d.ts +1 -1
  203. package/lib/components/data-table/table-skeleton.d.ts +1 -5
  204. package/lib/components/dropdown/dropdown-item.d.ts +15 -0
  205. package/lib/components/overflow-menu/overflow-menu-item.d.ts +5 -1
  206. package/lib/components/overflow-menu/overflow-menu.d.ts +1 -1
  207. package/lib/components/popover/popover.d.ts +12 -2
  208. package/lib/components/progress-indicator/progress-step.d.ts +1 -1
  209. package/lib/components/select/select.d.ts +1 -1
  210. package/lib/components/tabs/tab.d.ts +1 -1
  211. package/lib/components/tag/tag.d.ts +1 -1
  212. package/lib/components/text-input/text-input.d.ts +2 -0
  213. package/lib/components/tile/expandable-tile.d.ts +1 -1
  214. package/lib/components/time-picker/time-picker-select.d.ts +1 -1
  215. package/lib/components/toggle-tip/toggletip.d.ts +0 -1
  216. package/lib/components/ui-shell/header-menu.d.ts +1 -1
  217. package/lib/components/ui-shell/side-nav-menu.d.ts +1 -1
  218. package/lib/globals/controllers/floating-controller.js +6 -2
  219. package/lib/globals/controllers/floating-controller.js.map +1 -1
  220. package/lib/globals/internal/deep-shadow-contains.d.ts +15 -0
  221. package/lib/polyfills/toggle-attribute.d.ts +1 -1
  222. package/package.json +6 -6
  223. package/scss/components/dropdown/dropdown.scss +5 -0
  224. package/scss/components/overflow-menu/overflow-menu.scss +4 -0
  225. package/scss/components/popover/popover.scss +160 -4
  226. package/telemetry.yml +2 -1
@@ -16,6 +16,7 @@ import HostListener from '../../globals/decorators/host-listener.js';
16
16
  import HostListenerMixin from '../../globals/mixins/host-listener.js';
17
17
  import FloatingController from '../../globals/controllers/floating-controller.js';
18
18
  import { POPOVER_BACKGROUND_TOKEN } from './defs.js';
19
+ import { deepShadowContains } from '../../globals/internal/deep-shadow-contains.js';
19
20
 
20
21
  /**
21
22
  * Copyright IBM Corp. 2019, 2026
@@ -28,6 +29,8 @@ var CDSPopover_1;
28
29
  * Popover.
29
30
  *
30
31
  * @element cds-custom-popover
32
+ * @fires cds-custom-popover-beingclosed before the popover closes via focusout/outsideclick.
33
+ * @fires cds-custom-popover-closed when the popover closes via focusout/outsideclick
31
34
  */
32
35
  let CDSPopover = CDSPopover_1 = class CDSPopover extends HostListenerMixin(LitElement) {
33
36
  /**
@@ -44,44 +47,42 @@ let CDSPopover = CDSPopover_1 = class CDSPopover extends HostListenerMixin(LitEl
44
47
  }
45
48
  this.requestUpdate();
46
49
  }
47
- _handleMouseDown(event) {
48
- const path = event.composedPath();
49
- const contentEl = this._contentSlotNode.assignedElements()[0];
50
- this._lastClickWasInsidePopoverContent =
51
- contentEl && path.includes(contentEl);
52
- // reset flag
53
- if (this._lastClickWasInsidePopoverContent) {
54
- setTimeout(() => {
55
- this._lastClickWasInsidePopoverContent = false;
56
- }, 0);
50
+ _handleKeyDown(event) {
51
+ if (!this.open) {
52
+ return;
53
+ }
54
+ if (event.key === 'Tab') {
55
+ this._tabKeyPressed = true;
56
+ }
57
+ else {
58
+ this._tabKeyPressed = false;
57
59
  }
58
60
  }
59
61
  _handleFocusOut(event) {
60
- const relatedTarget = event.relatedTarget;
61
- const path = event.composedPath();
62
- const triggerEl = this._triggerSlotNode.assignedElements({
63
- flatten: true,
64
- })[0];
65
- if (this._lastClickWasInsidePopoverContent) {
66
- this._lastClickWasInsidePopoverContent = false;
62
+ // Only handle focusout if Tab key was pressed
63
+ if (!this._tabKeyPressed || !this.open) {
67
64
  return;
68
65
  }
69
- if (relatedTarget &&
70
- triggerEl &&
71
- (path.includes(triggerEl) ||
72
- triggerEl === relatedTarget ||
73
- triggerEl.contains(relatedTarget))) {
66
+ if (this.contains(event.relatedTarget) ||
67
+ deepShadowContains(this, event.relatedTarget)) {
68
+ this._tabKeyPressed = false;
74
69
  return;
75
70
  }
76
- if (!this.contains(relatedTarget)) {
77
- const wasOpen = this.open;
71
+ // focus moved outside the popover, close it
72
+ this._tabKeyPressed = false;
73
+ if (this.dispatchEvent(new CustomEvent(this.constructor.eventBeforeClose, {
74
+ bubbles: true,
75
+ cancelable: true,
76
+ composed: true,
77
+ detail: {
78
+ triggeredBy: event.target,
79
+ },
80
+ }))) {
78
81
  this.open = false;
79
- if (wasOpen) {
80
- this.dispatchEvent(new CustomEvent(this.constructor.eventOnClose, {
81
- bubbles: true,
82
- composed: true,
83
- }));
84
- }
82
+ this.dispatchEvent(new CustomEvent(this.constructor.eventOnClose, {
83
+ bubbles: true,
84
+ composed: true,
85
+ }));
85
86
  }
86
87
  }
87
88
  _handleOutsideClick(event) {
@@ -98,11 +99,20 @@ let CDSPopover = CDSPopover_1 = class CDSPopover extends HostListenerMixin(LitEl
98
99
  target &&
99
100
  !this.contains(target) &&
100
101
  !this.contains(composedTarget)) {
101
- this.open = false;
102
- this.dispatchEvent(new CustomEvent(this.constructor.eventOnClose, {
102
+ if (this.dispatchEvent(new CustomEvent(this.constructor.eventBeforeClose, {
103
103
  bubbles: true,
104
+ cancelable: true,
104
105
  composed: true,
105
- }));
106
+ detail: {
107
+ triggeredBy: event.target,
108
+ },
109
+ }))) {
110
+ this.open = false;
111
+ this.dispatchEvent(new CustomEvent(this.constructor.eventOnClose, {
112
+ bubbles: true,
113
+ composed: true,
114
+ }));
115
+ }
106
116
  }
107
117
  }
108
118
  constructor() {
@@ -111,6 +121,10 @@ let CDSPopover = CDSPopover_1 = class CDSPopover extends HostListenerMixin(LitEl
111
121
  * Create popover controller instance
112
122
  */
113
123
  this.popoverController = new FloatingController(this);
124
+ /**
125
+ * Tracks Tab key press to check relatedTarget on focusout event
126
+ */
127
+ this._tabKeyPressed = false;
114
128
  /**
115
129
  * Specify direction of alignment
116
130
  */
@@ -147,8 +161,6 @@ let CDSPopover = CDSPopover_1 = class CDSPopover extends HostListenerMixin(LitEl
147
161
  * Specify the background token to use. Default is 'layer'.
148
162
  */
149
163
  this.backgroundToken = POPOVER_BACKGROUND_TOKEN.LAYER;
150
- // Tracks whether the last mousedown event was inside the popover content
151
- this._lastClickWasInsidePopoverContent = false;
152
164
  this._handleOutsideClick = this._handleOutsideClick.bind(this);
153
165
  }
154
166
  connectedCallback() {
@@ -306,6 +318,13 @@ let CDSPopover = CDSPopover_1 = class CDSPopover extends HostListenerMixin(LitEl
306
318
  static get selectorPopoverContent() {
307
319
  return `${prefix}-popover-content`;
308
320
  }
321
+ /**
322
+ * The name of the custom event fired before the popover closes via focusout/outsideclick.
323
+ * This event is cancellable.
324
+ */
325
+ static get eventBeforeClose() {
326
+ return `${prefix}-popover-beingclosed`;
327
+ }
309
328
  /**
310
329
  * The name of the custom event fired when the popover closes via focusout/outsideclick
311
330
  */
@@ -354,10 +373,10 @@ __decorate([
354
373
  property({ type: String, reflect: true, attribute: 'autoalign-boundary' })
355
374
  ], CDSPopover.prototype, "autoAlignBoundary", void 0);
356
375
  __decorate([
357
- HostListener('mousedown')
376
+ HostListener('keydown')
358
377
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- https://github.com/carbon-design-system/carbon/issues/20452
359
378
  // @ts-ignore
360
- ], CDSPopover.prototype, "_handleMouseDown", null);
379
+ ], CDSPopover.prototype, "_handleKeyDown", null);
361
380
  __decorate([
362
381
  HostListener('focusout')
363
382
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- https://github.com/carbon-design-system/carbon/issues/20452
@@ -1 +1 @@
1
- {"version":3,"file":"popover.js","sources":["../../../src/components/popover/popover.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2019, 2026\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { classMap } from 'lit/directives/class-map.js';\nimport { LitElement, html } from 'lit';\nimport { property, query } from 'lit/decorators.js';\nimport { carbonElement as customElement } from '../../globals/decorators/carbon-element';\nimport { prefix } from '../../globals/settings';\nimport styles from './popover.scss?lit';\nimport CDSPopoverContent from './popover-content';\nimport HostListener from '../../globals/decorators/host-listener';\nimport HostListenerMixin from '../../globals/mixins/host-listener';\nimport FloatingUIController from '../../globals/controllers/floating-controller';\nimport { POPOVER_BACKGROUND_TOKEN } from './defs';\nimport type { Boundary, Rect } from '@floating-ui/dom';\n\n/**\n * Popover.\n *\n * @element cds-custom-popover\n */\n@customElement(`${prefix}-popover`)\nclass CDSPopover extends HostListenerMixin(LitElement) {\n /**\n * Create popover controller instance\n */\n private popoverController = new FloatingUIController(this);\n\n /**\n * The `<slot>` element in the shadow DOM.\n */\n @query('slot')\n private _triggerSlotNode!: HTMLSlotElement;\n\n /**\n * The `<slot>` element in the shadow DOM.\n */\n @query('slot[name=\"content\"]')\n private _contentSlotNode!: HTMLSlotElement;\n\n /**\n * Specify direction of alignment\n */\n @property({ reflect: true, type: String })\n align = '';\n\n /**\n * **Experimental:** Provide an offset value for alignment axis. Only takes effect when `autoalign` is enabled.\n */\n @property({ type: Number, reflect: true, attribute: 'alignment-axis-offset' })\n alignmentAxisOffset?: number;\n\n /**\n * Specify whether a auto align functionality should be applied\n */\n @property({ type: Boolean, reflect: true })\n autoalign = false;\n\n /**\n * Specify whether a caret should be rendered\n */\n @property({ type: Boolean, reflect: true })\n caret = true;\n\n /**\n * Specify whether a dropShadow should be rendered\n */\n @property({ type: Boolean, reflect: true })\n dropShadow = true;\n\n /**\n * Specify whether a border should be rendered on the popover\n */\n @property({ type: Boolean, reflect: true })\n border = false;\n\n /**\n * Render the component using the high-contrast variant\n */\n @property({ type: Boolean, reflect: true })\n highContrast = false;\n\n /**\n * Specify whether the component is currently open or closed\n */\n @property({ type: Boolean, reflect: true })\n open = false;\n\n /**\n * Render the component using the tab tip variant\n */\n @property({ type: Boolean, reflect: true })\n tabTip = false;\n\n /**\n * Specify the background token to use. Default is 'layer'.\n */\n @property({ reflect: true, type: String })\n backgroundToken = POPOVER_BACKGROUND_TOKEN.LAYER;\n\n /**\n * Specify a bounding element to be used for autoAlign calculations. The viewport is used by default.\n * Takes one of the following: 'clippingAncestors', '#elementid', '#elementid_1, #elementid_2', 'rect(x, y, width, height)'\n * This prop is currently experimental and is subject to future changes.\n */\n @property({ type: String, reflect: true, attribute: 'autoalign-boundary' })\n autoAlignBoundary?: string;\n\n // Tracks whether the last mousedown event was inside the popover content\n private _lastClickWasInsidePopoverContent = false;\n\n /**\n * Handles `slotchange` event.\n */\n protected _handleSlotChange({ target }: Event) {\n if (this.tabTip) {\n const component = (target as HTMLSlotElement)\n .assignedNodes()\n .filter(\n (node) =>\n node.nodeType === Node.ELEMENT_NODE &&\n (node as Element).tagName === 'BUTTON'\n );\n\n (component[0] as HTMLElement)?.classList.add(\n `${prefix}--popover--tab-tip__button`\n );\n }\n this.requestUpdate();\n }\n\n @HostListener('mousedown')\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- https://github.com/carbon-design-system/carbon/issues/20452\n // @ts-ignore\n private _handleMouseDown(event: MouseEvent) {\n const path = event.composedPath();\n const contentEl = this._contentSlotNode.assignedElements()[0];\n\n this._lastClickWasInsidePopoverContent =\n contentEl && path.includes(contentEl);\n\n // reset flag\n if (this._lastClickWasInsidePopoverContent) {\n setTimeout(() => {\n this._lastClickWasInsidePopoverContent = false;\n }, 0);\n }\n }\n\n @HostListener('focusout')\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- https://github.com/carbon-design-system/carbon/issues/20452\n // @ts-ignore\n private _handleFocusOut(event: Event) {\n const relatedTarget = (event as FocusEvent).relatedTarget as Node | null;\n const path = event.composedPath();\n const triggerEl = this._triggerSlotNode.assignedElements({\n flatten: true,\n })[0];\n\n if (this._lastClickWasInsidePopoverContent) {\n this._lastClickWasInsidePopoverContent = false;\n return;\n }\n\n if (\n relatedTarget &&\n triggerEl &&\n (path.includes(triggerEl) ||\n triggerEl === relatedTarget ||\n triggerEl.contains(relatedTarget))\n ) {\n return;\n }\n if (!this.contains(relatedTarget)) {\n const wasOpen = this.open;\n this.open = false;\n\n if (wasOpen) {\n this.dispatchEvent(\n new CustomEvent(\n (this.constructor as typeof CDSPopover).eventOnClose,\n {\n bubbles: true,\n composed: true,\n }\n )\n );\n }\n }\n }\n\n private _handleOutsideClick(event: Event) {\n const path = event.composedPath();\n\n if (path.includes(this._triggerSlotNode.assignedElements()[0])) return;\n\n const popoverContent = this.querySelector(\n (this.constructor as typeof CDSPopover).selectorPopoverContent\n )?.shadowRoot?.querySelector(\n (this.constructor as typeof CDSPopover).selectorPopoverContentClass\n ) as HTMLElement;\n\n if (path.includes(popoverContent)) return;\n\n const target = event.target as Node | null;\n const composedTarget = event.composedPath?.()[0] as Node | null;\n\n if (\n this.open &&\n target &&\n !this.contains(target) &&\n !this.contains(composedTarget)\n ) {\n this.open = false;\n this.dispatchEvent(\n new CustomEvent((this.constructor as typeof CDSPopover).eventOnClose, {\n bubbles: true,\n composed: true,\n })\n );\n }\n }\n\n constructor() {\n super();\n this._handleOutsideClick = this._handleOutsideClick.bind(this);\n }\n\n connectedCallback() {\n super.connectedCallback();\n document.addEventListener('click', this._handleOutsideClick);\n }\n\n disconnectedCallback() {\n document.removeEventListener('click', this._handleOutsideClick);\n }\n\n /**\n * This function resolves the string passed in for `autoAlignBoundary` to either:\n * \"clippingAncestors\"\n * An element (found via #id)\n * An array of elements (found via #id1, #id2, #id3, separated by \",\")\n * A rect, input format should be 'rect(x,y,width,height)'\n */\n private _resolveAutoAlignBoundary(): Boundary {\n const raw = (this.autoAlignBoundary ?? '').trim();\n\n // Default to 'clippingAncestors'\n if (!raw) return 'clippingAncestors';\n if (raw === 'clippingAncestors') return 'clippingAncestors';\n\n // regex match for: rect(x,y,width,height)\n const rectMatch =\n /^rect\\(\\s*([-\\d.]+)\\s*,\\s*([-\\d.]+)\\s*,\\s*([-\\d.]+)\\s*,\\s*([-\\d.]+)\\s*\\)$/i.exec(\n raw\n );\n if (rectMatch) {\n const [, x, y, w, h] = rectMatch;\n const rect: Rect = { x: +x, y: +y, width: +w, height: +h };\n return rect;\n }\n\n // Get element(s)\n const ids = raw\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s.length > 1 && s.startsWith('#'))\n .map((s) => s.slice(1).trim())\n .filter(Boolean);\n\n if (ids.length > 0) {\n const elements: Element[] = [];\n const inputted_ids = new Set<string>();\n\n for (const id of ids) {\n if (inputted_ids.has(id)) continue;\n inputted_ids.add(id);\n\n const el = document.getElementById(id);\n\n if (el) elements.push(el);\n }\n return elements.length === 1 ? elements[0] : elements;\n }\n\n // default fallback\n return 'clippingAncestors';\n }\n\n updated(changedProperties) {\n const { selectorPopoverContent } = this.constructor as typeof CDSPopover;\n [\n 'open',\n 'align',\n 'autoalign',\n 'caret',\n 'dropShadow',\n 'border',\n 'tabTip',\n 'highContrast',\n 'backgroundToken',\n ].forEach((name) => {\n if (changedProperties.has(name)) {\n const { [name as keyof CDSPopover]: value } = this;\n if (this.querySelector(selectorPopoverContent) as CDSPopoverContent) {\n (this.querySelector(selectorPopoverContent) as CDSPopoverContent)[\n name\n ] = value;\n }\n }\n });\n\n if (this.autoalign && this.open) {\n // auto align functionality with @floating-ui/dom library\n const button = this._triggerSlotNode.assignedElements()[0];\n const content = this._contentSlotNode.assignedElements()[0];\n\n const tooltip = content?.shadowRoot?.querySelector(\n CDSPopover.selectorPopoverContentClass\n );\n const arrowElement = content?.shadowRoot?.querySelector(\n CDSPopover.selectorPopoverCaret\n );\n\n if (button && tooltip) {\n this.popoverController?.setPlacement({\n trigger: button as HTMLElement,\n target: tooltip as HTMLElement,\n arrowElement:\n this.caret && arrowElement\n ? (arrowElement as HTMLElement)\n : undefined,\n caret: this.caret,\n flipArguments: { fallbackAxisSideDirection: 'start' },\n alignment: this.align,\n open: this.open,\n alignmentAxisOffset: this.alignmentAxisOffset,\n autoAlignBoundary: this._resolveAutoAlignBoundary(),\n isTabTip: this.tabTip,\n });\n }\n }\n }\n\n render() {\n const {\n dropShadow,\n border,\n highContrast,\n open,\n tabTip,\n _handleSlotChange: handleSlotChange,\n } = this;\n if (tabTip) {\n this.caret = !tabTip;\n }\n\n if (!this.autoalign) {\n this.align = this.align ? this.align : tabTip ? 'bottom-start' : 'bottom';\n }\n\n if (tabTip) {\n const tabTipAlignments = [\n 'bottom-start',\n 'bottom-end',\n 'bottom-left', // remove in v12\n 'bottom-right', // remove in v12\n ];\n\n if (!tabTipAlignments.includes(this.align)) {\n this.align = 'bottom-start';\n }\n }\n\n const classes = classMap({\n [`${prefix}--popover-container`]: true,\n [`${prefix}--popover--caret`]: this.caret,\n [`${prefix}--popover--drop-shadow`]: dropShadow,\n [`${prefix}--popover--border`]: border,\n [`${prefix}--popover--high-contrast`]: highContrast,\n [`${prefix}--popover--open`]: open,\n [`${prefix}--popover--${this.align}`]: true,\n [`${prefix}--popover--tab-tip`]: tabTip,\n [`${prefix}--popover--background-token__background`]:\n this.backgroundToken === POPOVER_BACKGROUND_TOKEN.BACKGROUND &&\n !highContrast,\n });\n return html`\n <span class=\"${classes}\" part=\"popover-container\">\n <slot @slotchange=\"${handleSlotChange}\"></slot>\n <slot name=\"content\"></slot>\n </span>\n `;\n }\n\n /**\n * A selector that will return popover content element within\n * CDSPopoverContent's shadowRoot.\n */\n static get selectorPopoverContentClass() {\n return `.${prefix}--popover-content`;\n }\n\n /**\n * A selector that will return popover caret element within\n * CDSPopoverContent's shadowRoot.\n */\n static get selectorPopoverCaret() {\n return `.${prefix}--popover-caret`;\n }\n\n /**\n * A selector that will return the CDSPopoverContent.\n */\n static get selectorPopoverContent() {\n return `${prefix}-popover-content`;\n }\n\n /**\n * The name of the custom event fired when the popover closes via focusout/outsideclick\n */\n static get eventOnClose() {\n return `${prefix}-popover-closed`;\n }\n\n static styles = styles;\n}\n\nexport default CDSPopover;\n"],"names":["FloatingUIController","styles","customElement"],"mappings":"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"}
1
+ {"version":3,"file":"popover.js","sources":["../../../src/components/popover/popover.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2019, 2026\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { classMap } from 'lit/directives/class-map.js';\nimport { LitElement, html } from 'lit';\nimport { property, query } from 'lit/decorators.js';\nimport { carbonElement as customElement } from '../../globals/decorators/carbon-element';\nimport { prefix } from '../../globals/settings';\nimport styles from './popover.scss?lit';\nimport CDSPopoverContent from './popover-content';\nimport HostListener from '../../globals/decorators/host-listener';\nimport HostListenerMixin from '../../globals/mixins/host-listener';\nimport FloatingUIController from '../../globals/controllers/floating-controller';\nimport { POPOVER_BACKGROUND_TOKEN } from './defs';\nimport type { Boundary, Rect } from '@floating-ui/dom';\nimport { deepShadowContains } from '../../globals/internal/deep-shadow-contains';\n\n/**\n * Popover.\n *\n * @element cds-custom-popover\n * @fires cds-custom-popover-beingclosed before the popover closes via focusout/outsideclick.\n * @fires cds-custom-popover-closed when the popover closes via focusout/outsideclick\n */\n@customElement(`${prefix}-popover`)\nclass CDSPopover extends HostListenerMixin(LitElement) {\n /**\n * Create popover controller instance\n */\n private popoverController = new FloatingUIController(this);\n\n /**\n * The `<slot>` element in the shadow DOM.\n */\n @query('slot')\n private _triggerSlotNode!: HTMLSlotElement;\n\n /**\n * The `<slot>` element in the shadow DOM.\n */\n @query('slot[name=\"content\"]')\n private _contentSlotNode!: HTMLSlotElement;\n\n /**\n * Tracks Tab key press to check relatedTarget on focusout event\n */\n private _tabKeyPressed = false;\n\n /**\n * Specify direction of alignment\n */\n @property({ reflect: true, type: String })\n align = '';\n\n /**\n * **Experimental:** Provide an offset value for alignment axis. Only takes effect when `autoalign` is enabled.\n */\n @property({ type: Number, reflect: true, attribute: 'alignment-axis-offset' })\n alignmentAxisOffset?: number;\n\n /**\n * Specify whether a auto align functionality should be applied\n */\n @property({ type: Boolean, reflect: true })\n autoalign = false;\n\n /**\n * Specify whether a caret should be rendered\n */\n @property({ type: Boolean, reflect: true })\n caret = true;\n\n /**\n * Specify whether a dropShadow should be rendered\n */\n @property({ type: Boolean, reflect: true })\n dropShadow = true;\n\n /**\n * Specify whether a border should be rendered on the popover\n */\n @property({ type: Boolean, reflect: true })\n border = false;\n\n /**\n * Render the component using the high-contrast variant\n */\n @property({ type: Boolean, reflect: true })\n highContrast = false;\n\n /**\n * Specify whether the component is currently open or closed\n */\n @property({ type: Boolean, reflect: true })\n open = false;\n\n /**\n * Render the component using the tab tip variant\n */\n @property({ type: Boolean, reflect: true })\n tabTip = false;\n\n /**\n * Specify the background token to use. Default is 'layer'.\n */\n @property({ reflect: true, type: String })\n backgroundToken = POPOVER_BACKGROUND_TOKEN.LAYER;\n\n /**\n * Specify a bounding element to be used for autoAlign calculations. The viewport is used by default.\n * Takes one of the following: 'clippingAncestors', '#elementid', '#elementid_1, #elementid_2', 'rect(x, y, width, height)'\n * This prop is currently experimental and is subject to future changes.\n */\n @property({ type: String, reflect: true, attribute: 'autoalign-boundary' })\n autoAlignBoundary?: string;\n\n /**\n * Handles `slotchange` event.\n */\n protected _handleSlotChange({ target }: Event) {\n if (this.tabTip) {\n const component = (target as HTMLSlotElement)\n .assignedNodes()\n .filter(\n (node) =>\n node.nodeType === Node.ELEMENT_NODE &&\n (node as Element).tagName === 'BUTTON'\n );\n\n (component[0] as HTMLElement)?.classList.add(\n `${prefix}--popover--tab-tip__button`\n );\n }\n this.requestUpdate();\n }\n\n @HostListener('keydown')\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- https://github.com/carbon-design-system/carbon/issues/20452\n // @ts-ignore\n private _handleKeyDown(event: KeyboardEvent) {\n if (!this.open) {\n return;\n }\n if (event.key === 'Tab') {\n this._tabKeyPressed = true;\n } else {\n this._tabKeyPressed = false;\n }\n }\n\n @HostListener('focusout')\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- https://github.com/carbon-design-system/carbon/issues/20452\n // @ts-ignore\n private _handleFocusOut(event: FocusEvent) {\n // Only handle focusout if Tab key was pressed\n if (!this._tabKeyPressed || !this.open) {\n return;\n }\n\n if (\n this.contains(event.relatedTarget as Node) ||\n deepShadowContains(this, event.relatedTarget)\n ) {\n this._tabKeyPressed = false;\n return;\n }\n\n // focus moved outside the popover, close it\n this._tabKeyPressed = false;\n if (\n this.dispatchEvent(\n new CustomEvent(\n (this.constructor as typeof CDSPopover).eventBeforeClose,\n {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail: {\n triggeredBy: event.target,\n },\n }\n )\n )\n ) {\n this.open = false;\n this.dispatchEvent(\n new CustomEvent((this.constructor as typeof CDSPopover).eventOnClose, {\n bubbles: true,\n composed: true,\n })\n );\n }\n }\n\n private _handleOutsideClick(event: Event) {\n const path = event.composedPath();\n\n if (path.includes(this._triggerSlotNode.assignedElements()[0])) return;\n\n const popoverContent = this.querySelector(\n (this.constructor as typeof CDSPopover).selectorPopoverContent\n )?.shadowRoot?.querySelector(\n (this.constructor as typeof CDSPopover).selectorPopoverContentClass\n ) as HTMLElement;\n\n if (path.includes(popoverContent)) return;\n\n const target = event.target as Node | null;\n const composedTarget = event.composedPath?.()[0] as Node | null;\n\n if (\n this.open &&\n target &&\n !this.contains(target) &&\n !this.contains(composedTarget)\n ) {\n if (\n this.dispatchEvent(\n new CustomEvent(\n (this.constructor as typeof CDSPopover).eventBeforeClose,\n {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail: {\n triggeredBy: event.target,\n },\n }\n )\n )\n ) {\n this.open = false;\n this.dispatchEvent(\n new CustomEvent(\n (this.constructor as typeof CDSPopover).eventOnClose,\n {\n bubbles: true,\n composed: true,\n }\n )\n );\n }\n }\n }\n\n constructor() {\n super();\n this._handleOutsideClick = this._handleOutsideClick.bind(this);\n }\n\n connectedCallback() {\n super.connectedCallback();\n document.addEventListener('click', this._handleOutsideClick);\n }\n\n disconnectedCallback() {\n document.removeEventListener('click', this._handleOutsideClick);\n }\n\n /**\n * This function resolves the string passed in for `autoAlignBoundary` to either:\n * \"clippingAncestors\"\n * An element (found via #id)\n * An array of elements (found via #id1, #id2, #id3, separated by \",\")\n * A rect, input format should be 'rect(x,y,width,height)'\n */\n private _resolveAutoAlignBoundary(): Boundary {\n const raw = (this.autoAlignBoundary ?? '').trim();\n\n // Default to 'clippingAncestors'\n if (!raw) return 'clippingAncestors';\n if (raw === 'clippingAncestors') return 'clippingAncestors';\n\n // regex match for: rect(x,y,width,height)\n const rectMatch =\n /^rect\\(\\s*([-\\d.]+)\\s*,\\s*([-\\d.]+)\\s*,\\s*([-\\d.]+)\\s*,\\s*([-\\d.]+)\\s*\\)$/i.exec(\n raw\n );\n if (rectMatch) {\n const [, x, y, w, h] = rectMatch;\n const rect: Rect = { x: +x, y: +y, width: +w, height: +h };\n return rect;\n }\n\n // Get element(s)\n const ids = raw\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s.length > 1 && s.startsWith('#'))\n .map((s) => s.slice(1).trim())\n .filter(Boolean);\n\n if (ids.length > 0) {\n const elements: Element[] = [];\n const inputted_ids = new Set<string>();\n\n for (const id of ids) {\n if (inputted_ids.has(id)) continue;\n inputted_ids.add(id);\n\n const el = document.getElementById(id);\n\n if (el) elements.push(el);\n }\n return elements.length === 1 ? elements[0] : elements;\n }\n\n // default fallback\n return 'clippingAncestors';\n }\n\n updated(changedProperties) {\n const { selectorPopoverContent } = this.constructor as typeof CDSPopover;\n [\n 'open',\n 'align',\n 'autoalign',\n 'caret',\n 'dropShadow',\n 'border',\n 'tabTip',\n 'highContrast',\n 'backgroundToken',\n ].forEach((name) => {\n if (changedProperties.has(name)) {\n const { [name as keyof CDSPopover]: value } = this;\n if (this.querySelector(selectorPopoverContent) as CDSPopoverContent) {\n (this.querySelector(selectorPopoverContent) as CDSPopoverContent)[\n name\n ] = value;\n }\n }\n });\n\n if (this.autoalign && this.open) {\n // auto align functionality with @floating-ui/dom library\n const button = this._triggerSlotNode.assignedElements()[0];\n const content = this._contentSlotNode.assignedElements()[0];\n\n const tooltip = content?.shadowRoot?.querySelector(\n CDSPopover.selectorPopoverContentClass\n );\n const arrowElement = content?.shadowRoot?.querySelector(\n CDSPopover.selectorPopoverCaret\n );\n\n if (button && tooltip) {\n this.popoverController?.setPlacement({\n trigger: button as HTMLElement,\n target: tooltip as HTMLElement,\n arrowElement:\n this.caret && arrowElement\n ? (arrowElement as HTMLElement)\n : undefined,\n caret: this.caret,\n flipArguments: { fallbackAxisSideDirection: 'start' },\n alignment: this.align,\n open: this.open,\n alignmentAxisOffset: this.alignmentAxisOffset,\n autoAlignBoundary: this._resolveAutoAlignBoundary(),\n isTabTip: this.tabTip,\n });\n }\n }\n }\n\n render() {\n const {\n dropShadow,\n border,\n highContrast,\n open,\n tabTip,\n _handleSlotChange: handleSlotChange,\n } = this;\n if (tabTip) {\n this.caret = !tabTip;\n }\n\n if (!this.autoalign) {\n this.align = this.align ? this.align : tabTip ? 'bottom-start' : 'bottom';\n }\n\n if (tabTip) {\n const tabTipAlignments = [\n 'bottom-start',\n 'bottom-end',\n 'bottom-left', // remove in v12\n 'bottom-right', // remove in v12\n ];\n\n if (!tabTipAlignments.includes(this.align)) {\n this.align = 'bottom-start';\n }\n }\n\n const classes = classMap({\n [`${prefix}--popover-container`]: true,\n [`${prefix}--popover--caret`]: this.caret,\n [`${prefix}--popover--drop-shadow`]: dropShadow,\n [`${prefix}--popover--border`]: border,\n [`${prefix}--popover--high-contrast`]: highContrast,\n [`${prefix}--popover--open`]: open,\n [`${prefix}--popover--${this.align}`]: true,\n [`${prefix}--popover--tab-tip`]: tabTip,\n [`${prefix}--popover--background-token__background`]:\n this.backgroundToken === POPOVER_BACKGROUND_TOKEN.BACKGROUND &&\n !highContrast,\n });\n return html`\n <span class=\"${classes}\" part=\"popover-container\">\n <slot @slotchange=\"${handleSlotChange}\"></slot>\n <slot name=\"content\"></slot>\n </span>\n `;\n }\n\n /**\n * A selector that will return popover content element within\n * CDSPopoverContent's shadowRoot.\n */\n static get selectorPopoverContentClass() {\n return `.${prefix}--popover-content`;\n }\n\n /**\n * A selector that will return popover caret element within\n * CDSPopoverContent's shadowRoot.\n */\n static get selectorPopoverCaret() {\n return `.${prefix}--popover-caret`;\n }\n\n /**\n * A selector that will return the CDSPopoverContent.\n */\n static get selectorPopoverContent() {\n return `${prefix}-popover-content`;\n }\n\n /**\n * The name of the custom event fired before the popover closes via focusout/outsideclick.\n * This event is cancellable.\n */\n static get eventBeforeClose() {\n return `${prefix}-popover-beingclosed`;\n }\n\n /**\n * The name of the custom event fired when the popover closes via focusout/outsideclick\n */\n static get eventOnClose() {\n return `${prefix}-popover-closed`;\n }\n\n static styles = styles;\n}\n\nexport default CDSPopover;\n"],"names":["FloatingUIController","styles","customElement"],"mappings":"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"}