@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
@@ -1 +1 @@
1
- {"version":3,"file":"floating-controller.js","sources":["../../../src/globals/controllers/floating-controller.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2024, 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 { ReactiveController, ReactiveElement } from 'lit';\nimport {\n computePosition,\n flip,\n size,\n offset,\n arrow,\n autoUpdate,\n hide,\n Placement,\n type Boundary,\n} from '@floating-ui/dom';\n\ntype FloatingControllerOptions = {\n target: HTMLElement;\n trigger: HTMLElement;\n alignment: string;\n\n arrowElement?: HTMLElement | undefined;\n flipArguments?: object;\n caret?: boolean;\n\n styleElement?: HTMLElement;\n matchWidth?: boolean;\n open: boolean;\n alignmentAxisOffset?: number;\n autoAlignBoundary?: Boundary;\n isTabTip?: boolean;\n};\n\n/**\n * Controller for positioning the menu using Floating UI.\n */\nexport default class FloatingController implements ReactiveController {\n /**\n * Host component\n */\n private host: ReactiveElement;\n /**\n * Floating-ui options to pass to `computePlacement()`\n */\n private options!: FloatingControllerOptions;\n /**\n * cleanup function to stop auto updates\n */\n private cleanup?: () => void;\n\n /**\n * register with host component\n * @param host host component\n */\n constructor(host: ReactiveElement) {\n this.host = host;\n host.addController(this);\n }\n\n async setPlacement(options: FloatingControllerOptions = this.options) {\n this.options = options;\n const { trigger, target } = options;\n this.cleanup = autoUpdate(trigger, target, this.updatePlacement);\n }\n\n updatePlacement = (): void => {\n this.computePlacement();\n };\n\n async computePlacement() {\n const {\n arrowElement,\n alignment,\n caret,\n trigger,\n target,\n styleElement,\n matchWidth,\n open,\n alignmentAxisOffset,\n autoAlignBoundary,\n isTabTip,\n } = this.options;\n\n const isListBox = target?.role === 'listbox';\n const isMenu = target?.localName === 'cds-custom-menu';\n\n const element = styleElement ?? target;\n\n if (!element) return;\n\n let shimmedAlign;\n switch (alignment) {\n case 'top-left':\n shimmedAlign = 'top-start';\n break;\n case 'top-right':\n shimmedAlign = 'top-end';\n break;\n case 'bottom-left':\n shimmedAlign = 'bottom-start';\n break;\n case 'bottom-right':\n shimmedAlign = 'bottom-end';\n break;\n case 'left-bottom':\n shimmedAlign = 'left-end';\n break;\n case 'left-top':\n shimmedAlign = 'left-start';\n break;\n case 'right-bottom':\n shimmedAlign = 'right-end';\n break;\n case 'right-top':\n shimmedAlign = 'right-start';\n break;\n default:\n shimmedAlign = alignment;\n break;\n }\n const cs = getComputedStyle(element);\n const toPx = (val: string) => {\n const raw = parseFloat(val);\n return val.trim().endsWith('rem') ? raw * 16 : raw;\n };\n const offsetPx = !isTabTip\n ? (toPx(cs.getPropertyValue('--cds-popover-offset').trim()) ?? 10)\n : 0;\n\n const middleware = [\n offset(\n caret && !isTabTip\n ? { alignmentAxis: alignmentAxisOffset, mainAxis: offsetPx }\n : 0\n ),\n flip({\n fallbackPlacements: isTabTip\n ? shimmedAlign.includes('bottom')\n ? ['bottom-start', 'bottom-end', 'top-start', 'top-end']\n : ['top-start', 'top-end', 'bottom-start', 'bottom-end']\n : isListBox || isMenu\n ? ['top', 'bottom']\n : shimmedAlign.includes('bottom')\n ? [\n 'bottom',\n 'bottom-start',\n 'bottom-end',\n 'right',\n 'right-start',\n 'right-end',\n 'left',\n 'left-start',\n 'left-end',\n 'top',\n 'top-start',\n 'top-end',\n ]\n : [\n 'top',\n 'top-start',\n 'top-end',\n 'left',\n 'left-start',\n 'left-end',\n 'right',\n 'right-start',\n 'right-end',\n 'bottom',\n 'bottom-start',\n 'bottom-end',\n ],\n\n fallbackStrategy: 'initialPlacement',\n fallbackAxisSideDirection: 'start',\n boundary: autoAlignBoundary,\n }),\n ...(matchWidth && (shimmedAlign === 'bottom' || shimmedAlign === 'top')\n ? [\n size({\n apply({ rects, elements }) {\n elements.floating.style.width = `${rects.reference.width}px`;\n },\n }),\n ]\n : [\n size({\n apply({ elements }) {\n elements.floating.style.removeProperty('width');\n },\n }),\n ]),\n\n ...(caret && arrowElement\n ? [arrow({ element: arrowElement, padding: 15 })]\n : []),\n\n ...[hide()],\n ];\n\n if (open) {\n const { x, y, placement, middlewareData, strategy } =\n await computePosition(trigger, element, {\n strategy: 'fixed',\n middleware,\n placement: shimmedAlign as Placement,\n });\n\n element.setAttribute('align', placement);\n\n element.style.left = `${x}px`;\n element.style.top = `${y}px`;\n element.style.position = `${strategy}`;\n\n element.style.visibility = middlewareData.hide?.referenceHidden\n ? 'hidden'\n : 'visible';\n\n if (arrowElement) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- https://github.com/carbon-design-system/carbon/issues/20452\n // @ts-ignore\n const { x: arrowX, y: arrowY } = middlewareData.arrow;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- https://github.com/carbon-design-system/carbon/issues/20452\n const staticSide: any = {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right',\n }[placement.split('-')[0]];\n\n arrowElement.style.left = arrowX != null ? `${arrowX}px` : '';\n arrowElement.style.top = arrowY != null ? `${arrowY}px` : '';\n arrowElement.style.right = '';\n arrowElement.style.bottom = '';\n arrowElement.style[staticSide] = `${-arrowElement.offsetWidth / 2}px`;\n }\n\n // adding specific case here where the style of the caret/arrow\n // is dependent on the placement\n // TODO: remove reference to slug in v12\n if (\n this.host.tagName === 'CDS-AI-LABEL' ||\n this.host.tagName === 'CDS-SLUG'\n ) {\n this.host?.setAttribute('alignment', placement);\n }\n }\n }\n\n hostUpdated(): void {\n if (!this.host.hasAttribute('open')) {\n this.cleanup?.();\n this.cleanup = undefined;\n }\n }\n\n hostDisconnected(): void {\n this.cleanup?.();\n this.cleanup = undefined;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"floating-controller.js","sources":["../../../src/globals/controllers/floating-controller.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2024, 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 { ReactiveController, ReactiveElement } from 'lit';\nimport {\n computePosition,\n flip,\n size,\n offset,\n arrow,\n autoUpdate,\n hide,\n Placement,\n type Boundary,\n} from '@floating-ui/dom';\n\ntype FloatingControllerOptions = {\n target: HTMLElement;\n trigger: HTMLElement;\n alignment: string;\n\n arrowElement?: HTMLElement | undefined;\n flipArguments?: object;\n caret?: boolean;\n\n styleElement?: HTMLElement;\n matchWidth?: boolean;\n open: boolean;\n alignmentAxisOffset?: number;\n autoAlignBoundary?: Boundary;\n isTabTip?: boolean;\n};\n\n/**\n * Controller for positioning the menu using Floating UI.\n */\nexport default class FloatingController implements ReactiveController {\n /**\n * Host component\n */\n private host: ReactiveElement;\n /**\n * Floating-ui options to pass to `computePlacement()`\n */\n private options!: FloatingControllerOptions;\n /**\n * cleanup function to stop auto updates\n */\n private cleanup?: () => void;\n\n /**\n * register with host component\n * @param host host component\n */\n constructor(host: ReactiveElement) {\n this.host = host;\n host.addController(this);\n }\n\n async setPlacement(options: FloatingControllerOptions = this.options) {\n this.options = options;\n const { trigger, target } = options;\n this.cleanup = autoUpdate(trigger, target, this.updatePlacement);\n }\n\n updatePlacement = (): void => {\n this.computePlacement();\n };\n\n async computePlacement() {\n const {\n arrowElement,\n alignment,\n caret,\n trigger,\n target,\n styleElement,\n matchWidth,\n open,\n alignmentAxisOffset,\n autoAlignBoundary,\n isTabTip,\n } = this.options;\n\n const isListBox = target?.role === 'listbox';\n const isMenu = target?.localName === 'cds-custom-menu';\n\n const element = styleElement ?? target;\n\n if (!element) return;\n\n let shimmedAlign;\n switch (alignment) {\n case 'top-left':\n shimmedAlign = 'top-start';\n break;\n case 'top-right':\n shimmedAlign = 'top-end';\n break;\n case 'bottom-left':\n shimmedAlign = 'bottom-start';\n break;\n case 'bottom-right':\n shimmedAlign = 'bottom-end';\n break;\n case 'left-bottom':\n shimmedAlign = 'left-end';\n break;\n case 'left-top':\n shimmedAlign = 'left-start';\n break;\n case 'right-bottom':\n shimmedAlign = 'right-end';\n break;\n case 'right-top':\n shimmedAlign = 'right-start';\n break;\n default:\n shimmedAlign = alignment;\n break;\n }\n const cs = getComputedStyle(element);\n const toPx = (val: string) => {\n const raw = parseFloat(val);\n return val.trim().endsWith('rem') ? raw * 16 : raw;\n };\n const offsetPx = !isTabTip\n ? (toPx(cs.getPropertyValue('--cds-popover-offset').trim()) ?? 10)\n : 0;\n\n const middleware = [\n offset(\n !isTabTip\n ? {\n alignmentAxis: alignmentAxisOffset,\n // Use 4px spacing when no caret, otherwise use the caret offset\n mainAxis: caret ? offsetPx : 4,\n }\n : 0\n ),\n flip({\n fallbackPlacements: isTabTip\n ? shimmedAlign.includes('bottom')\n ? ['bottom-start', 'bottom-end', 'top-start', 'top-end']\n : ['top-start', 'top-end', 'bottom-start', 'bottom-end']\n : isListBox || isMenu\n ? ['top', 'bottom']\n : shimmedAlign.includes('bottom')\n ? [\n 'bottom',\n 'bottom-start',\n 'bottom-end',\n 'right',\n 'right-start',\n 'right-end',\n 'left',\n 'left-start',\n 'left-end',\n 'top',\n 'top-start',\n 'top-end',\n ]\n : [\n 'top',\n 'top-start',\n 'top-end',\n 'left',\n 'left-start',\n 'left-end',\n 'right',\n 'right-start',\n 'right-end',\n 'bottom',\n 'bottom-start',\n 'bottom-end',\n ],\n\n fallbackStrategy: 'initialPlacement',\n fallbackAxisSideDirection: 'start',\n boundary: autoAlignBoundary,\n }),\n ...(matchWidth && (shimmedAlign === 'bottom' || shimmedAlign === 'top')\n ? [\n size({\n apply({ rects, elements }) {\n elements.floating.style.width = `${rects.reference.width}px`;\n },\n }),\n ]\n : [\n size({\n apply({ elements }) {\n elements.floating.style.removeProperty('width');\n },\n }),\n ]),\n\n ...(caret && arrowElement\n ? [arrow({ element: arrowElement, padding: 15 })]\n : []),\n\n ...[hide()],\n ];\n\n if (open) {\n const { x, y, placement, middlewareData, strategy } =\n await computePosition(trigger, element, {\n strategy: 'fixed',\n middleware,\n placement: shimmedAlign as Placement,\n });\n\n element.setAttribute('align', placement);\n\n element.style.left = `${x}px`;\n element.style.top = `${y}px`;\n element.style.position = `${strategy}`;\n\n element.style.visibility = middlewareData.hide?.referenceHidden\n ? 'hidden'\n : 'visible';\n\n if (arrowElement) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- https://github.com/carbon-design-system/carbon/issues/20452\n // @ts-ignore\n const { x: arrowX, y: arrowY } = middlewareData.arrow;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- https://github.com/carbon-design-system/carbon/issues/20452\n const staticSide: any = {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right',\n }[placement.split('-')[0]];\n\n arrowElement.style.left = arrowX != null ? `${arrowX}px` : '';\n arrowElement.style.top = arrowY != null ? `${arrowY}px` : '';\n arrowElement.style.right = '';\n arrowElement.style.bottom = '';\n arrowElement.style[staticSide] = `${-arrowElement.offsetWidth / 2}px`;\n }\n\n // adding specific case here where the style of the caret/arrow\n // is dependent on the placement\n // TODO: remove reference to slug in v12\n if (\n this.host.tagName === 'CDS-AI-LABEL' ||\n this.host.tagName === 'CDS-SLUG'\n ) {\n this.host?.setAttribute('alignment', placement);\n }\n }\n }\n\n hostUpdated(): void {\n if (!this.host.hasAttribute('open')) {\n this.cleanup?.();\n this.cleanup = undefined;\n }\n }\n\n hostDisconnected(): void {\n this.cleanup?.();\n this.cleanup = undefined;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Copyright IBM Corp. 2026
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ /**
8
+ * Checks if an element is contained within a root node, traversing through shadow DOMs.
9
+ * This utility handles shadow DOM boundaries by checking assignedSlot, parentNode, and shadow root hosts.
10
+ *
11
+ * @param root - The root node to check containment within
12
+ * @param el - The element to check if it's contained within the root
13
+ * @returns true if the element is contained within the root (including through shadow DOMs), false otherwise
14
+ */
15
+ export declare function deepShadowContains(root: Node, el: EventTarget | null): boolean;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Copyright IBM Corp. 2024
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ /**
9
+ * Copyright IBM Corp. 2026
10
+ *
11
+ * This source code is licensed under the Apache-2.0 license found in the
12
+ * LICENSE file in the root directory of this source tree.
13
+ */
14
+ /**
15
+ * Checks if an element is contained within a root node, traversing through shadow DOMs.
16
+ * This utility handles shadow DOM boundaries by checking assignedSlot, parentNode, and shadow root hosts.
17
+ *
18
+ * @param root - The root node to check containment within
19
+ * @param el - The element to check if it's contained within the root
20
+ * @returns true if the element is contained within the root (including through shadow DOMs), false otherwise
21
+ */
22
+ function deepShadowContains(root, el) {
23
+ if (!(el instanceof Node)) {
24
+ return false;
25
+ }
26
+ if (el === root) {
27
+ return true;
28
+ }
29
+ return deepShadowContains(root, el.assignedSlot ||
30
+ el.parentNode ||
31
+ el.getRootNode().host ||
32
+ null);
33
+ }
34
+
35
+ export { deepShadowContains };
36
+ //# sourceMappingURL=deep-shadow-contains.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deep-shadow-contains.js","sources":["../../../src/globals/internal/deep-shadow-contains.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 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\n/**\n * Checks if an element is contained within a root node, traversing through shadow DOMs.\n * This utility handles shadow DOM boundaries by checking assignedSlot, parentNode, and shadow root hosts.\n *\n * @param root - The root node to check containment within\n * @param el - The element to check if it's contained within the root\n * @returns true if the element is contained within the root (including through shadow DOMs), false otherwise\n */\n\nexport function deepShadowContains(\n root: Node,\n el: EventTarget | null\n): boolean {\n if (!(el instanceof Node)) {\n return false;\n }\n if (el === root) {\n return true;\n }\n\n return deepShadowContains(\n root,\n (el as HTMLElement).assignedSlot ||\n el.parentNode ||\n (el.getRootNode() as ShadowRoot).host ||\n null\n );\n}\n"],"names":[],"mappings":";;;;;;;AAAA;;;;;AAKG;AAEH;;;;;;;AAOG;AAEG,SAAU,kBAAkB,CAChC,IAAU,EACV,EAAsB,EAAA;AAEtB,IAAA,IAAI,EAAE,EAAE,YAAY,IAAI,CAAC,EAAE;AACzB,QAAA,OAAO,KAAK;IACd;AACA,IAAA,IAAI,EAAE,KAAK,IAAI,EAAE;AACf,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,OAAO,kBAAkB,CACvB,IAAI,EACH,EAAkB,CAAC,YAAY;AAC9B,QAAA,EAAE,CAAC,UAAU;AACZ,QAAA,EAAE,CAAC,WAAW,EAAiB,CAAC,IAAI;AACrC,QAAA,IAAI,CACP;AACH;;;;"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2019, 2022
2
+ * Copyright IBM Corp. 2019, 2026
3
3
  *
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -6,6 +6,7 @@
6
6
  */
7
7
  import type { PropertyValues } from 'lit';
8
8
  import CDSDropdownItem from '../dropdown/dropdown-item';
9
+ type NextSiblingAttribute = 'hovered-next-sibling' | 'highlighted-next-sibling' | 'selected-next-sibling';
9
10
  /**
10
11
  * Combo box item.
11
12
  *
@@ -13,12 +14,10 @@ import CDSDropdownItem from '../dropdown/dropdown-item';
13
14
  */
14
15
  declare class CDSComboBoxItem extends CDSDropdownItem {
15
16
  private _nextSiblingRefs;
16
- private _handleMouseEnter;
17
- private _handleMouseLeave;
18
17
  connectedCallback(): void;
19
18
  disconnectedCallback(): void;
20
- private _getNextItem;
21
- private _syncNextSibling;
19
+ protected _getNextItem(): Element | null;
20
+ protected _syncNextSibling(attribute: NextSiblingAttribute, shouldSet: boolean): void;
22
21
  protected updated(changedProperties: PropertyValues): void;
23
22
  static styles: any;
24
23
  }
@@ -104,6 +104,13 @@ declare class CDSComboBox extends CDSDropdown {
104
104
  * `true` to allow custom values that do not match any item in the list.
105
105
  */
106
106
  allowCustomValue: boolean;
107
+ /**
108
+ * Additional input attributes to apply to the internal input element.
109
+ * Allows passing native HTML input attributes like `maxlength`, `pattern`,
110
+ * `autocomplete`, etc.
111
+ */
112
+ inputProps?: Record<string, string | number | boolean>;
113
+ private _normalizeInputProps;
107
114
  shouldUpdate(changedProperties: any): boolean;
108
115
  protected _clearInputWithoutSelecting(focus?: boolean): void;
109
116
  updated(changedProperties: any): void;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2019, 2025
2
+ * Copyright IBM Corp. 2019, 2026
3
3
  *
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2019, 2024
2
+ * Copyright IBM Corp. 2019, 2026
3
3
  *
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -15,10 +15,6 @@ declare class CDSTableSkeleton extends LitElement {
15
15
  * Optionally specify the displayed headers
16
16
  */
17
17
  private headers;
18
- /**
19
- * Optionally specify whether you want the Skeleton to be rendered as a compact DataTable
20
- */
21
- compact: boolean;
22
18
  /**
23
19
  * Specify the number of columns that you want to render in the skeleton state
24
20
  */
@@ -42,7 +42,22 @@ declare class CDSDropdownItem extends LitElement {
42
42
  * true if menu item has ellipsis applied
43
43
  */
44
44
  _hasEllipsisApplied: boolean;
45
+ /**
46
+ * Reference to the next sibling element for hover state management.
47
+ */
48
+ protected _nextSiblingRef: Element | null;
49
+ /**
50
+ * Gets the next dropdown/combo-box item sibling.
51
+ */
52
+ protected _getNextItem(): Element | null;
53
+ /**
54
+ * Syncs the hovered-next-sibling attribute with the next item.
55
+ */
56
+ protected _syncNextSibling(attribute: string, shouldSet: boolean): void;
57
+ protected _handleMouseEnter: () => void;
58
+ protected _handleMouseLeave: () => void;
45
59
  connectedCallback(): void;
60
+ disconnectedCallback(): void;
46
61
  /**
47
62
  * Handles `slotchange` event.
48
63
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2019, 2023
2
+ * Copyright IBM Corp. 2019, 2026
3
3
  *
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -375,6 +375,10 @@ declare class CDSOverflowMenuItem extends CDSOverflowMenuItem_base {
375
375
  * `true` if the action is danger.
376
376
  */
377
377
  danger: boolean;
378
+ /**
379
+ * Specify the message read by screen readers for the danger over flow menu item variant
380
+ */
381
+ dangerDescription: string;
378
382
  /**
379
383
  * `true` if the overflow menu item should be disabled.
380
384
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2019, 2023
2
+ * Copyright IBM Corp. 2019, 2026
3
3
  *
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -374,6 +374,8 @@ declare const CDSPopover_base: {
374
374
  * Popover.
375
375
  *
376
376
  * @element cds-popover
377
+ * @fires cds-popover-beingclosed before the popover closes via focusout/outsideclick.
378
+ * @fires cds-popover-closed when the popover closes via focusout/outsideclick
377
379
  */
378
380
  declare class CDSPopover extends CDSPopover_base {
379
381
  /**
@@ -388,6 +390,10 @@ declare class CDSPopover extends CDSPopover_base {
388
390
  * The `<slot>` element in the shadow DOM.
389
391
  */
390
392
  private _contentSlotNode;
393
+ /**
394
+ * Tracks Tab key press to check relatedTarget on focusout event
395
+ */
396
+ private _tabKeyPressed;
391
397
  /**
392
398
  * Specify direction of alignment
393
399
  */
@@ -434,12 +440,11 @@ declare class CDSPopover extends CDSPopover_base {
434
440
  * This prop is currently experimental and is subject to future changes.
435
441
  */
436
442
  autoAlignBoundary?: string;
437
- private _lastClickWasInsidePopoverContent;
438
443
  /**
439
444
  * Handles `slotchange` event.
440
445
  */
441
446
  protected _handleSlotChange({ target }: Event): void;
442
- private _handleMouseDown;
447
+ private _handleKeyDown;
443
448
  private _handleFocusOut;
444
449
  private _handleOutsideClick;
445
450
  constructor();
@@ -469,6 +474,11 @@ declare class CDSPopover extends CDSPopover_base {
469
474
  * A selector that will return the CDSPopoverContent.
470
475
  */
471
476
  static get selectorPopoverContent(): string;
477
+ /**
478
+ * The name of the custom event fired before the popover closes via focusout/outsideclick.
479
+ * This event is cancellable.
480
+ */
481
+ static get eventBeforeClose(): string;
472
482
  /**
473
483
  * The name of the custom event fired when the popover closes via focusout/outsideclick
474
484
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2019, 2025
2
+ * Copyright IBM Corp. 2019, 2026
3
3
  *
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2020, 2025
2
+ * Copyright IBM Corp. 2020, 2026
3
3
  *
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2019, 2024
2
+ * Copyright IBM Corp. 2019, 2026
3
3
  *
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2019, 2023
2
+ * Copyright IBM Corp. 2019, 2026
3
3
  *
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -744,6 +744,7 @@ declare class CDSTextInput extends CDSTextInput_base {
744
744
  * The underlying input element
745
745
  */
746
746
  protected _input: HTMLInputElement;
747
+ protected _slotHelperTextNode: HTMLSlotElement;
747
748
  /**
748
749
  * The internal value.
749
750
  */
@@ -756,6 +757,7 @@ declare class CDSTextInput extends CDSTextInput_base {
756
757
  */
757
758
  protected _handleInput({ target }: Event): void;
758
759
  _handleFormdata(event: FormDataEvent): void;
760
+ protected _handleHelperTextSlotChange(): void;
759
761
  /**
760
762
  * May be any of the standard HTML autocomplete options
761
763
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2019, 2023
2
+ * Copyright IBM Corp. 2019, 2026
3
3
  *
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2020, 2025
2
+ * Copyright IBM Corp. 2020, 2026
3
3
  *
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -773,7 +773,6 @@ declare class CDSToggletip extends CDSToggletip_base {
773
773
  * @param event The event.
774
774
  */
775
775
  protected _handleFocusOut(event: FocusEvent): void;
776
- private _deepShadowContains;
777
776
  protected _renderToggleTipLabel: () => import("lit-html").TemplateResult<1>;
778
777
  protected _renderTooltipButton: () => import("lit-html").TemplateResult<1>;
779
778
  protected _renderTooltipContent: () => import("lit-html").TemplateResult<1>;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2019, 2024
2
+ * Copyright IBM Corp. 2019, 2026
3
3
  *
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2019, 2024
2
+ * Copyright IBM Corp. 2019, 2026
3
3
  *
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -84,8 +84,12 @@ class FloatingController {
84
84
  ? ((_a = toPx(cs.getPropertyValue('--cds-popover-offset').trim())) !== null && _a !== void 0 ? _a : 10)
85
85
  : 0;
86
86
  const middleware = [
87
- dom.offset(caret && !isTabTip
88
- ? { alignmentAxis: alignmentAxisOffset, mainAxis: offsetPx }
87
+ dom.offset(!isTabTip
88
+ ? {
89
+ alignmentAxis: alignmentAxisOffset,
90
+ // Use 4px spacing when no caret, otherwise use the caret offset
91
+ mainAxis: caret ? offsetPx : 4,
92
+ }
89
93
  : 0),
90
94
  dom.flip({
91
95
  fallbackPlacements: isTabTip
@@ -1 +1 @@
1
- {"version":3,"file":"floating-controller.js","sources":["../../../src/globals/controllers/floating-controller.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2024, 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 { ReactiveController, ReactiveElement } from 'lit';\nimport {\n computePosition,\n flip,\n size,\n offset,\n arrow,\n autoUpdate,\n hide,\n Placement,\n type Boundary,\n} from '@floating-ui/dom';\n\ntype FloatingControllerOptions = {\n target: HTMLElement;\n trigger: HTMLElement;\n alignment: string;\n\n arrowElement?: HTMLElement | undefined;\n flipArguments?: object;\n caret?: boolean;\n\n styleElement?: HTMLElement;\n matchWidth?: boolean;\n open: boolean;\n alignmentAxisOffset?: number;\n autoAlignBoundary?: Boundary;\n isTabTip?: boolean;\n};\n\n/**\n * Controller for positioning the menu using Floating UI.\n */\nexport default class FloatingController implements ReactiveController {\n /**\n * Host component\n */\n private host: ReactiveElement;\n /**\n * Floating-ui options to pass to `computePlacement()`\n */\n private options!: FloatingControllerOptions;\n /**\n * cleanup function to stop auto updates\n */\n private cleanup?: () => void;\n\n /**\n * register with host component\n * @param host host component\n */\n constructor(host: ReactiveElement) {\n this.host = host;\n host.addController(this);\n }\n\n async setPlacement(options: FloatingControllerOptions = this.options) {\n this.options = options;\n const { trigger, target } = options;\n this.cleanup = autoUpdate(trigger, target, this.updatePlacement);\n }\n\n updatePlacement = (): void => {\n this.computePlacement();\n };\n\n async computePlacement() {\n const {\n arrowElement,\n alignment,\n caret,\n trigger,\n target,\n styleElement,\n matchWidth,\n open,\n alignmentAxisOffset,\n autoAlignBoundary,\n isTabTip,\n } = this.options;\n\n const isListBox = target?.role === 'listbox';\n const isMenu = target?.localName === 'cds-menu';\n\n const element = styleElement ?? target;\n\n if (!element) return;\n\n let shimmedAlign;\n switch (alignment) {\n case 'top-left':\n shimmedAlign = 'top-start';\n break;\n case 'top-right':\n shimmedAlign = 'top-end';\n break;\n case 'bottom-left':\n shimmedAlign = 'bottom-start';\n break;\n case 'bottom-right':\n shimmedAlign = 'bottom-end';\n break;\n case 'left-bottom':\n shimmedAlign = 'left-end';\n break;\n case 'left-top':\n shimmedAlign = 'left-start';\n break;\n case 'right-bottom':\n shimmedAlign = 'right-end';\n break;\n case 'right-top':\n shimmedAlign = 'right-start';\n break;\n default:\n shimmedAlign = alignment;\n break;\n }\n const cs = getComputedStyle(element);\n const toPx = (val: string) => {\n const raw = parseFloat(val);\n return val.trim().endsWith('rem') ? raw * 16 : raw;\n };\n const offsetPx = !isTabTip\n ? (toPx(cs.getPropertyValue('--cds-popover-offset').trim()) ?? 10)\n : 0;\n\n const middleware = [\n offset(\n caret && !isTabTip\n ? { alignmentAxis: alignmentAxisOffset, mainAxis: offsetPx }\n : 0\n ),\n flip({\n fallbackPlacements: isTabTip\n ? shimmedAlign.includes('bottom')\n ? ['bottom-start', 'bottom-end', 'top-start', 'top-end']\n : ['top-start', 'top-end', 'bottom-start', 'bottom-end']\n : isListBox || isMenu\n ? ['top', 'bottom']\n : shimmedAlign.includes('bottom')\n ? [\n 'bottom',\n 'bottom-start',\n 'bottom-end',\n 'right',\n 'right-start',\n 'right-end',\n 'left',\n 'left-start',\n 'left-end',\n 'top',\n 'top-start',\n 'top-end',\n ]\n : [\n 'top',\n 'top-start',\n 'top-end',\n 'left',\n 'left-start',\n 'left-end',\n 'right',\n 'right-start',\n 'right-end',\n 'bottom',\n 'bottom-start',\n 'bottom-end',\n ],\n\n fallbackStrategy: 'initialPlacement',\n fallbackAxisSideDirection: 'start',\n boundary: autoAlignBoundary,\n }),\n ...(matchWidth && (shimmedAlign === 'bottom' || shimmedAlign === 'top')\n ? [\n size({\n apply({ rects, elements }) {\n elements.floating.style.width = `${rects.reference.width}px`;\n },\n }),\n ]\n : [\n size({\n apply({ elements }) {\n elements.floating.style.removeProperty('width');\n },\n }),\n ]),\n\n ...(caret && arrowElement\n ? [arrow({ element: arrowElement, padding: 15 })]\n : []),\n\n ...[hide()],\n ];\n\n if (open) {\n const { x, y, placement, middlewareData, strategy } =\n await computePosition(trigger, element, {\n strategy: 'fixed',\n middleware,\n placement: shimmedAlign as Placement,\n });\n\n element.setAttribute('align', placement);\n\n element.style.left = `${x}px`;\n element.style.top = `${y}px`;\n element.style.position = `${strategy}`;\n\n element.style.visibility = middlewareData.hide?.referenceHidden\n ? 'hidden'\n : 'visible';\n\n if (arrowElement) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- https://github.com/carbon-design-system/carbon/issues/20452\n // @ts-ignore\n const { x: arrowX, y: arrowY } = middlewareData.arrow;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- https://github.com/carbon-design-system/carbon/issues/20452\n const staticSide: any = {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right',\n }[placement.split('-')[0]];\n\n arrowElement.style.left = arrowX != null ? `${arrowX}px` : '';\n arrowElement.style.top = arrowY != null ? `${arrowY}px` : '';\n arrowElement.style.right = '';\n arrowElement.style.bottom = '';\n arrowElement.style[staticSide] = `${-arrowElement.offsetWidth / 2}px`;\n }\n\n // adding specific case here where the style of the caret/arrow\n // is dependent on the placement\n // TODO: remove reference to slug in v12\n if (\n this.host.tagName === 'CDS-AI-LABEL' ||\n this.host.tagName === 'CDS-SLUG'\n ) {\n this.host?.setAttribute('alignment', placement);\n }\n }\n }\n\n hostUpdated(): void {\n if (!this.host.hasAttribute('open')) {\n this.cleanup?.();\n this.cleanup = undefined;\n }\n }\n\n hostDisconnected(): void {\n this.cleanup?.();\n this.cleanup = undefined;\n }\n}\n"],"names":["autoUpdate","offset","flip","size","arrow","hide","computePosition"],"mappings":"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"}
1
+ {"version":3,"file":"floating-controller.js","sources":["../../../src/globals/controllers/floating-controller.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2024, 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 { ReactiveController, ReactiveElement } from 'lit';\nimport {\n computePosition,\n flip,\n size,\n offset,\n arrow,\n autoUpdate,\n hide,\n Placement,\n type Boundary,\n} from '@floating-ui/dom';\n\ntype FloatingControllerOptions = {\n target: HTMLElement;\n trigger: HTMLElement;\n alignment: string;\n\n arrowElement?: HTMLElement | undefined;\n flipArguments?: object;\n caret?: boolean;\n\n styleElement?: HTMLElement;\n matchWidth?: boolean;\n open: boolean;\n alignmentAxisOffset?: number;\n autoAlignBoundary?: Boundary;\n isTabTip?: boolean;\n};\n\n/**\n * Controller for positioning the menu using Floating UI.\n */\nexport default class FloatingController implements ReactiveController {\n /**\n * Host component\n */\n private host: ReactiveElement;\n /**\n * Floating-ui options to pass to `computePlacement()`\n */\n private options!: FloatingControllerOptions;\n /**\n * cleanup function to stop auto updates\n */\n private cleanup?: () => void;\n\n /**\n * register with host component\n * @param host host component\n */\n constructor(host: ReactiveElement) {\n this.host = host;\n host.addController(this);\n }\n\n async setPlacement(options: FloatingControllerOptions = this.options) {\n this.options = options;\n const { trigger, target } = options;\n this.cleanup = autoUpdate(trigger, target, this.updatePlacement);\n }\n\n updatePlacement = (): void => {\n this.computePlacement();\n };\n\n async computePlacement() {\n const {\n arrowElement,\n alignment,\n caret,\n trigger,\n target,\n styleElement,\n matchWidth,\n open,\n alignmentAxisOffset,\n autoAlignBoundary,\n isTabTip,\n } = this.options;\n\n const isListBox = target?.role === 'listbox';\n const isMenu = target?.localName === 'cds-menu';\n\n const element = styleElement ?? target;\n\n if (!element) return;\n\n let shimmedAlign;\n switch (alignment) {\n case 'top-left':\n shimmedAlign = 'top-start';\n break;\n case 'top-right':\n shimmedAlign = 'top-end';\n break;\n case 'bottom-left':\n shimmedAlign = 'bottom-start';\n break;\n case 'bottom-right':\n shimmedAlign = 'bottom-end';\n break;\n case 'left-bottom':\n shimmedAlign = 'left-end';\n break;\n case 'left-top':\n shimmedAlign = 'left-start';\n break;\n case 'right-bottom':\n shimmedAlign = 'right-end';\n break;\n case 'right-top':\n shimmedAlign = 'right-start';\n break;\n default:\n shimmedAlign = alignment;\n break;\n }\n const cs = getComputedStyle(element);\n const toPx = (val: string) => {\n const raw = parseFloat(val);\n return val.trim().endsWith('rem') ? raw * 16 : raw;\n };\n const offsetPx = !isTabTip\n ? (toPx(cs.getPropertyValue('--cds-popover-offset').trim()) ?? 10)\n : 0;\n\n const middleware = [\n offset(\n !isTabTip\n ? {\n alignmentAxis: alignmentAxisOffset,\n // Use 4px spacing when no caret, otherwise use the caret offset\n mainAxis: caret ? offsetPx : 4,\n }\n : 0\n ),\n flip({\n fallbackPlacements: isTabTip\n ? shimmedAlign.includes('bottom')\n ? ['bottom-start', 'bottom-end', 'top-start', 'top-end']\n : ['top-start', 'top-end', 'bottom-start', 'bottom-end']\n : isListBox || isMenu\n ? ['top', 'bottom']\n : shimmedAlign.includes('bottom')\n ? [\n 'bottom',\n 'bottom-start',\n 'bottom-end',\n 'right',\n 'right-start',\n 'right-end',\n 'left',\n 'left-start',\n 'left-end',\n 'top',\n 'top-start',\n 'top-end',\n ]\n : [\n 'top',\n 'top-start',\n 'top-end',\n 'left',\n 'left-start',\n 'left-end',\n 'right',\n 'right-start',\n 'right-end',\n 'bottom',\n 'bottom-start',\n 'bottom-end',\n ],\n\n fallbackStrategy: 'initialPlacement',\n fallbackAxisSideDirection: 'start',\n boundary: autoAlignBoundary,\n }),\n ...(matchWidth && (shimmedAlign === 'bottom' || shimmedAlign === 'top')\n ? [\n size({\n apply({ rects, elements }) {\n elements.floating.style.width = `${rects.reference.width}px`;\n },\n }),\n ]\n : [\n size({\n apply({ elements }) {\n elements.floating.style.removeProperty('width');\n },\n }),\n ]),\n\n ...(caret && arrowElement\n ? [arrow({ element: arrowElement, padding: 15 })]\n : []),\n\n ...[hide()],\n ];\n\n if (open) {\n const { x, y, placement, middlewareData, strategy } =\n await computePosition(trigger, element, {\n strategy: 'fixed',\n middleware,\n placement: shimmedAlign as Placement,\n });\n\n element.setAttribute('align', placement);\n\n element.style.left = `${x}px`;\n element.style.top = `${y}px`;\n element.style.position = `${strategy}`;\n\n element.style.visibility = middlewareData.hide?.referenceHidden\n ? 'hidden'\n : 'visible';\n\n if (arrowElement) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- https://github.com/carbon-design-system/carbon/issues/20452\n // @ts-ignore\n const { x: arrowX, y: arrowY } = middlewareData.arrow;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- https://github.com/carbon-design-system/carbon/issues/20452\n const staticSide: any = {\n top: 'bottom',\n right: 'left',\n bottom: 'top',\n left: 'right',\n }[placement.split('-')[0]];\n\n arrowElement.style.left = arrowX != null ? `${arrowX}px` : '';\n arrowElement.style.top = arrowY != null ? `${arrowY}px` : '';\n arrowElement.style.right = '';\n arrowElement.style.bottom = '';\n arrowElement.style[staticSide] = `${-arrowElement.offsetWidth / 2}px`;\n }\n\n // adding specific case here where the style of the caret/arrow\n // is dependent on the placement\n // TODO: remove reference to slug in v12\n if (\n this.host.tagName === 'CDS-AI-LABEL' ||\n this.host.tagName === 'CDS-SLUG'\n ) {\n this.host?.setAttribute('alignment', placement);\n }\n }\n }\n\n hostUpdated(): void {\n if (!this.host.hasAttribute('open')) {\n this.cleanup?.();\n this.cleanup = undefined;\n }\n }\n\n hostDisconnected(): void {\n this.cleanup?.();\n this.cleanup = undefined;\n }\n}\n"],"names":["autoUpdate","offset","flip","size","arrow","hide","computePosition"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Copyright IBM Corp. 2026
3
+ *
4
+ * This source code is licensed under the Apache-2.0 license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ /**
8
+ * Checks if an element is contained within a root node, traversing through shadow DOMs.
9
+ * This utility handles shadow DOM boundaries by checking assignedSlot, parentNode, and shadow root hosts.
10
+ *
11
+ * @param root - The root node to check containment within
12
+ * @param el - The element to check if it's contained within the root
13
+ * @returns true if the element is contained within the root (including through shadow DOMs), false otherwise
14
+ */
15
+ export declare function deepShadowContains(root: Node, el: EventTarget | null): boolean;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright IBM Corp. 2019, 2022
2
+ * Copyright IBM Corp. 2019, 2026
3
3
  *
4
4
  * This source code is licensed under the Apache-2.0 license found in the
5
5
  * LICENSE file in the root directory of this source tree.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@carbon/web-components",
3
3
  "description": "Web components for the Carbon Design System",
4
- "version": "2.48.0",
4
+ "version": "2.49.0",
5
5
  "license": "Apache-2.0",
6
6
  "main": "es/index.js",
7
7
  "module": "es/index.js",
@@ -65,8 +65,8 @@
65
65
  },
66
66
  "dependencies": {
67
67
  "@carbon/icon-helpers": "10.47.0",
68
- "@carbon/icons": "^11.75.0",
69
- "@carbon/styles": "^1.100.0",
68
+ "@carbon/icons": "^11.76.0",
69
+ "@carbon/styles": "^1.101.0",
70
70
  "@floating-ui/dom": "^1.6.3",
71
71
  "@ibm/telemetry-js": "^1.10.2",
72
72
  "@lit/context": "^1.1.3",
@@ -76,8 +76,8 @@
76
76
  "tslib": "^2.6.3"
77
77
  },
78
78
  "devDependencies": {
79
- "@carbon/layout": "^11.48.0",
80
- "@carbon/motion": "^11.41.0",
79
+ "@carbon/layout": "^11.49.0",
80
+ "@carbon/motion": "^11.42.0",
81
81
  "@juggle/resize-observer": "^3.4.0",
82
82
  "@mordech/vite-lit-loader": "^0.37.0",
83
83
  "@open-wc/testing": "^4.0.0",
@@ -129,5 +129,5 @@
129
129
  }
130
130
  ]
131
131
  },
132
- "gitHead": "6dde90f9edfb378e1585f1954c92484a37f22f02"
132
+ "gitHead": "4f48ac426be7302a57460b1c81d74dd5d6071ad6"
133
133
  }
@@ -205,6 +205,11 @@ $css--plex: true !default;
205
205
  border-block-start-color: transparent;
206
206
  }
207
207
 
208
+ :host(#{$prefix}-dropdown-item[hovered-next-sibling])
209
+ .#{$prefix}--list-box__menu-item__option {
210
+ border-block-start-color: transparent;
211
+ }
212
+
208
213
  :host(#{$prefix}-dropdown-item[disabled])
209
214
  .#{$prefix}--list-box__menu-item__option {
210
215
  color: $text-disabled;
@@ -106,6 +106,10 @@
106
106
 
107
107
  outline: none;
108
108
 
109
+ button {
110
+ justify-content: space-between;
111
+ }
112
+
109
113
  button:hover {
110
114
  background-color: $layer-hover;
111
115
  }