@carbon/web-components 2.42.0 → 2.43.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 (211) hide show
  1. package/custom-elements.json +1225 -97
  2. package/dist/accordion.min.js +1 -1
  3. package/dist/code-snippet.min.js +7 -7
  4. package/dist/{collection-helpers-_CvqQaiX.js → collection-helpers-C5emLOnk.js} +1 -1
  5. package/dist/combo-box.min.js +5 -5
  6. package/dist/{content-switcher-item-VHI7iTTP.js → content-switcher-item-3fTDI2Aq.js} +1 -1
  7. package/dist/content-switcher.min.js +1 -1
  8. package/dist/data-table.min.js +1 -1
  9. package/dist/date-picker.min.js +1 -1
  10. package/dist/{dropdown-item-Pt_eWt66.js → dropdown-item-BO7AhHPd.js} +25 -25
  11. package/dist/dropdown.min.js +1 -1
  12. package/dist/file-uploader.min.js +1 -1
  13. package/dist/fluid-search.min.js +33 -0
  14. package/dist/fluid-select.min.js +30 -0
  15. package/dist/fluid-textarea.min.js +36 -0
  16. package/dist/icon-indicator.min.js +1 -1
  17. package/dist/inline-loading.min.js +1 -1
  18. package/dist/list.min.js +1 -1
  19. package/dist/loading.min.js +1 -1
  20. package/dist/menu.min.js +1 -1
  21. package/dist/modal.min.js +5 -5
  22. package/dist/multi-select.min.js +1 -1
  23. package/dist/overflow-menu.min.js +1 -1
  24. package/dist/pagination.min.js +1 -1
  25. package/dist/progress-indicator.min.js +1 -1
  26. package/dist/radio-button.min.js +10 -8
  27. package/dist/{search-BrKCrPl3.js → search-DhwzN9sI.js} +2 -1
  28. package/dist/search.min.js +4 -4
  29. package/dist/select-BIi12O8B.js +108 -0
  30. package/dist/select-item-Be7OL9mD.js +28 -0
  31. package/dist/select-skeleton-8uIIQzNt.js +31 -0
  32. package/dist/select.min.js +1 -4
  33. package/dist/structured-list.min.js +1 -1
  34. package/dist/tabs.min.js +1 -1
  35. package/dist/textarea.min.js +23 -15
  36. package/dist/time-picker.min.js +20 -20
  37. package/dist/ui-shell.min.js +2 -2
  38. package/es/components/combo-box/combo-box.d.ts +9 -2
  39. package/es/components/combo-box/combo-box.js +63 -6
  40. package/es/components/combo-box/combo-box.js.map +1 -1
  41. package/es/components/combo-box/combo-box.scss.js +1 -1
  42. package/es/components/data-table/data-table.scss.js +1 -1
  43. package/es/components/dropdown/dropdown.d.ts +8 -0
  44. package/es/components/dropdown/dropdown.js +29 -11
  45. package/es/components/dropdown/dropdown.js.map +1 -1
  46. package/es/components/dropdown/dropdown.scss.js +1 -1
  47. package/es/components/file-uploader/file-uploader.scss.js +1 -1
  48. package/es/components/fluid-search/fluid-search-skeleton.d.ts +17 -0
  49. package/es/components/fluid-search/fluid-search-skeleton.js +38 -0
  50. package/es/components/fluid-search/fluid-search-skeleton.js.map +1 -0
  51. package/es/components/fluid-search/fluid-search.d.ts +17 -0
  52. package/es/components/fluid-search/fluid-search.js +44 -0
  53. package/es/components/fluid-search/fluid-search.js.map +1 -0
  54. package/es/components/fluid-search/fluid-search.scss.js +13 -0
  55. package/es/components/fluid-search/fluid-search.scss.js.map +1 -0
  56. package/es/components/fluid-search/index.d.ts +8 -0
  57. package/es/components/fluid-search/index.js +10 -0
  58. package/es/components/fluid-search/index.js.map +1 -0
  59. package/es/components/fluid-select/fluid-select-skeleton.d.ts +17 -0
  60. package/es/components/fluid-select/fluid-select-skeleton.js +40 -0
  61. package/es/components/fluid-select/fluid-select-skeleton.js.map +1 -0
  62. package/es/components/fluid-select/fluid-select.d.ts +19 -0
  63. package/es/components/fluid-select/fluid-select.js +59 -0
  64. package/es/components/fluid-select/fluid-select.js.map +1 -0
  65. package/es/components/fluid-select/fluid-select.scss.js +13 -0
  66. package/es/components/fluid-select/fluid-select.scss.js.map +1 -0
  67. package/es/components/fluid-select/index.d.ts +8 -0
  68. package/es/components/fluid-select/index.js +10 -0
  69. package/es/components/fluid-select/index.js.map +1 -0
  70. package/es/components/fluid-textarea/fluid-textarea-skeleton.d.ts +17 -0
  71. package/es/components/fluid-textarea/fluid-textarea-skeleton.js +42 -0
  72. package/es/components/fluid-textarea/fluid-textarea-skeleton.js.map +1 -0
  73. package/es/components/fluid-textarea/fluid-textarea.d.ts +18 -0
  74. package/es/components/fluid-textarea/fluid-textarea.js +46 -0
  75. package/es/components/fluid-textarea/fluid-textarea.js.map +1 -0
  76. package/es/components/fluid-textarea/fluid-textarea.scss.js +13 -0
  77. package/es/components/fluid-textarea/fluid-textarea.scss.js.map +1 -0
  78. package/es/components/fluid-textarea/index.d.ts +8 -0
  79. package/es/components/fluid-textarea/index.js +10 -0
  80. package/es/components/fluid-textarea/index.js.map +1 -0
  81. package/es/components/inline-loading/inline-loading.scss.js +1 -1
  82. package/es/components/list/list.scss.js +1 -1
  83. package/es/components/loading/loading.scss.js +1 -1
  84. package/es/components/menu/menu.js +3 -1
  85. package/es/components/menu/menu.js.map +1 -1
  86. package/es/components/modal/modal.scss.js +1 -1
  87. package/es/components/multi-select/multi-select.scss.js +1 -1
  88. package/es/components/overflow-menu/overflow-menu-body.js +22 -10
  89. package/es/components/overflow-menu/overflow-menu-body.js.map +1 -1
  90. package/es/components/radio-button/radio-button-group.js +4 -2
  91. package/es/components/radio-button/radio-button-group.js.map +1 -1
  92. package/es/components/radio-button/radio-button.d.ts +8 -0
  93. package/es/components/radio-button/radio-button.js +53 -3
  94. package/es/components/radio-button/radio-button.js.map +1 -1
  95. package/es/components/radio-button/radio-button.scss.js +1 -1
  96. package/es/components/search/search-skeleton.js +2 -2
  97. package/es/components/search/search-skeleton.js.map +1 -1
  98. package/es/components/search/search.js +1 -0
  99. package/es/components/search/search.js.map +1 -1
  100. package/es/components/search/search.scss.js +1 -1
  101. package/es/components/select/select.d.ts +4 -0
  102. package/es/components/select/select.js +14 -1
  103. package/es/components/select/select.js.map +1 -1
  104. package/es/components/select/select.scss.js +1 -1
  105. package/es/components/textarea/textarea.d.ts +4 -0
  106. package/es/components/textarea/textarea.js +37 -11
  107. package/es/components/textarea/textarea.js.map +1 -1
  108. package/es/components/time-picker/time-picker.js +13 -8
  109. package/es/components/time-picker/time-picker.js.map +1 -1
  110. package/es/components/ui-shell/side-nav.scss.js +1 -1
  111. package/es-custom/components/combo-box/combo-box.d.ts +9 -2
  112. package/es-custom/components/combo-box/combo-box.js +63 -6
  113. package/es-custom/components/combo-box/combo-box.js.map +1 -1
  114. package/es-custom/components/combo-box/combo-box.scss.js +1 -1
  115. package/es-custom/components/data-table/data-table.scss.js +1 -1
  116. package/es-custom/components/dropdown/dropdown.d.ts +8 -0
  117. package/es-custom/components/dropdown/dropdown.js +29 -11
  118. package/es-custom/components/dropdown/dropdown.js.map +1 -1
  119. package/es-custom/components/dropdown/dropdown.scss.js +1 -1
  120. package/es-custom/components/file-uploader/file-uploader.scss.js +1 -1
  121. package/es-custom/components/fluid-search/fluid-search-skeleton.d.ts +17 -0
  122. package/es-custom/components/fluid-search/fluid-search-skeleton.js +38 -0
  123. package/es-custom/components/fluid-search/fluid-search-skeleton.js.map +1 -0
  124. package/es-custom/components/fluid-search/fluid-search.d.ts +17 -0
  125. package/es-custom/components/fluid-search/fluid-search.js +44 -0
  126. package/es-custom/components/fluid-search/fluid-search.js.map +1 -0
  127. package/es-custom/components/fluid-search/fluid-search.scss.js +13 -0
  128. package/es-custom/components/fluid-search/fluid-search.scss.js.map +1 -0
  129. package/es-custom/components/fluid-search/index.d.ts +8 -0
  130. package/es-custom/components/fluid-search/index.js +10 -0
  131. package/es-custom/components/fluid-search/index.js.map +1 -0
  132. package/es-custom/components/fluid-select/fluid-select-skeleton.d.ts +17 -0
  133. package/es-custom/components/fluid-select/fluid-select-skeleton.js +40 -0
  134. package/es-custom/components/fluid-select/fluid-select-skeleton.js.map +1 -0
  135. package/es-custom/components/fluid-select/fluid-select.d.ts +19 -0
  136. package/es-custom/components/fluid-select/fluid-select.js +59 -0
  137. package/es-custom/components/fluid-select/fluid-select.js.map +1 -0
  138. package/es-custom/components/fluid-select/fluid-select.scss.js +13 -0
  139. package/es-custom/components/fluid-select/fluid-select.scss.js.map +1 -0
  140. package/es-custom/components/fluid-select/index.d.ts +8 -0
  141. package/es-custom/components/fluid-select/index.js +10 -0
  142. package/es-custom/components/fluid-select/index.js.map +1 -0
  143. package/es-custom/components/fluid-textarea/fluid-textarea-skeleton.d.ts +17 -0
  144. package/es-custom/components/fluid-textarea/fluid-textarea-skeleton.js +42 -0
  145. package/es-custom/components/fluid-textarea/fluid-textarea-skeleton.js.map +1 -0
  146. package/es-custom/components/fluid-textarea/fluid-textarea.d.ts +18 -0
  147. package/es-custom/components/fluid-textarea/fluid-textarea.js +46 -0
  148. package/es-custom/components/fluid-textarea/fluid-textarea.js.map +1 -0
  149. package/es-custom/components/fluid-textarea/fluid-textarea.scss.js +13 -0
  150. package/es-custom/components/fluid-textarea/fluid-textarea.scss.js.map +1 -0
  151. package/es-custom/components/fluid-textarea/index.d.ts +8 -0
  152. package/es-custom/components/fluid-textarea/index.js +10 -0
  153. package/es-custom/components/fluid-textarea/index.js.map +1 -0
  154. package/es-custom/components/inline-loading/inline-loading.scss.js +1 -1
  155. package/es-custom/components/list/list.scss.js +1 -1
  156. package/es-custom/components/loading/loading.scss.js +1 -1
  157. package/es-custom/components/menu/menu.js +3 -1
  158. package/es-custom/components/menu/menu.js.map +1 -1
  159. package/es-custom/components/modal/modal.scss.js +1 -1
  160. package/es-custom/components/multi-select/multi-select.scss.js +1 -1
  161. package/es-custom/components/overflow-menu/overflow-menu-body.js +22 -10
  162. package/es-custom/components/overflow-menu/overflow-menu-body.js.map +1 -1
  163. package/es-custom/components/radio-button/radio-button-group.js +4 -2
  164. package/es-custom/components/radio-button/radio-button-group.js.map +1 -1
  165. package/es-custom/components/radio-button/radio-button.d.ts +8 -0
  166. package/es-custom/components/radio-button/radio-button.js +53 -3
  167. package/es-custom/components/radio-button/radio-button.js.map +1 -1
  168. package/es-custom/components/radio-button/radio-button.scss.js +1 -1
  169. package/es-custom/components/search/search-skeleton.js +2 -2
  170. package/es-custom/components/search/search-skeleton.js.map +1 -1
  171. package/es-custom/components/search/search.js +1 -0
  172. package/es-custom/components/search/search.js.map +1 -1
  173. package/es-custom/components/search/search.scss.js +1 -1
  174. package/es-custom/components/select/select.d.ts +4 -0
  175. package/es-custom/components/select/select.js +14 -1
  176. package/es-custom/components/select/select.js.map +1 -1
  177. package/es-custom/components/select/select.scss.js +1 -1
  178. package/es-custom/components/textarea/textarea.d.ts +4 -0
  179. package/es-custom/components/textarea/textarea.js +37 -11
  180. package/es-custom/components/textarea/textarea.js.map +1 -1
  181. package/es-custom/components/time-picker/time-picker.js +13 -8
  182. package/es-custom/components/time-picker/time-picker.js.map +1 -1
  183. package/es-custom/components/ui-shell/side-nav.scss.js +1 -1
  184. package/lib/components/combo-box/combo-box.d.ts +9 -2
  185. package/lib/components/dropdown/dropdown.d.ts +8 -0
  186. package/lib/components/fluid-search/fluid-search-skeleton.d.ts +17 -0
  187. package/lib/components/fluid-search/fluid-search.d.ts +17 -0
  188. package/lib/components/fluid-search/index.d.ts +8 -0
  189. package/lib/components/fluid-select/fluid-select-skeleton.d.ts +17 -0
  190. package/lib/components/fluid-select/fluid-select.d.ts +19 -0
  191. package/lib/components/fluid-select/index.d.ts +8 -0
  192. package/lib/components/fluid-textarea/fluid-textarea-skeleton.d.ts +17 -0
  193. package/lib/components/fluid-textarea/fluid-textarea.d.ts +18 -0
  194. package/lib/components/fluid-textarea/index.d.ts +8 -0
  195. package/lib/components/radio-button/radio-button.d.ts +8 -0
  196. package/lib/components/select/select.d.ts +4 -0
  197. package/lib/components/textarea/textarea.d.ts +4 -0
  198. package/package.json +6 -6
  199. package/scss/components/combo-box/combo-box.scss +82 -18
  200. package/scss/components/data-table/_table-core.scss +9 -9
  201. package/scss/components/data-table/_table-expandable.scss +7 -7
  202. package/scss/components/data-table/_table-selection.scss +3 -3
  203. package/scss/components/dropdown/dropdown.scss +2 -0
  204. package/scss/components/fluid-search/fluid-search.scss +55 -0
  205. package/scss/components/fluid-select/fluid-select.scss +58 -0
  206. package/scss/components/fluid-textarea/fluid-textarea.scss +16 -0
  207. package/scss/components/list/list.scss +1 -1
  208. package/scss/components/radio-button/radio-button.scss +9 -4
  209. package/scss/components/select/select.scss +1 -0
  210. package/telemetry.yml +9 -10
  211. package/dist/select-Dwsf_c0t.js +0 -104
@@ -6,14 +6,14 @@
6
6
  */
7
7
 
8
8
  import { __decorate } from 'tslib';
9
- import { html } from 'lit';
10
- import { property } from 'lit/decorators.js';
11
- import { prefix } from '../../globals/settings.js';
12
9
  import CDSFloatingMenu from '../floating-menu/floating-menu.js';
13
10
  import { OVERFLOW_MENU_SIZE, NAVIGATION_DIRECTION } from './defs.js';
14
11
  import HostListener from '../../globals/decorators/host-listener.js';
15
- import { indexOf } from '../../globals/internal/collection-helpers.js';
16
12
  import { carbonElement } from '../../globals/decorators/carbon-element.js';
13
+ import { html } from 'lit';
14
+ import { indexOf } from '../../globals/internal/collection-helpers.js';
15
+ import { prefix } from '../../globals/settings.js';
16
+ import { property } from 'lit/decorators.js';
17
17
  import styles from './overflow-menu.scss.js';
18
18
  import { FLOATING_MENU_DIRECTION } from '../floating-menu/defs.js';
19
19
 
@@ -84,26 +84,38 @@ let CDSOverflowMenuBody = CDSOverflowMenuBody_1 = class CDSOverflowMenuBody exte
84
84
  return;
85
85
  }
86
86
  if (key === 'Escape') {
87
+ event.preventDefault();
88
+ const menuTrigger = this.parent;
87
89
  this.open = false;
90
+ if (menuTrigger && 'open' in menuTrigger) {
91
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
92
+ menuTrigger.open = false;
93
+ }
94
+ requestAnimationFrame(() => {
95
+ var _a;
96
+ const triggerButton = ((_a = menuTrigger === null || menuTrigger === void 0 ? void 0 : menuTrigger.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector(`button.${prefix}--overflow-menu`)) || (menuTrigger === null || menuTrigger === void 0 ? void 0 : menuTrigger.querySelector(`button.${prefix}--overflow-menu`));
97
+ if (triggerButton) {
98
+ triggerButton.focus();
99
+ }
100
+ });
88
101
  return;
89
102
  }
90
103
  const items = this.querySelectorAll(CDSOverflowMenuBody_1.selectorItemEnabled);
91
104
  const isInsideMenu = Array.from(items).some((item) => item.contains(document.activeElement));
92
105
  if (isInsideMenu) {
93
106
  event.preventDefault();
107
+ const menuTrigger = this.parent;
94
108
  this.open = false;
109
+ if (menuTrigger && 'open' in menuTrigger) {
110
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
111
+ menuTrigger.open = false;
112
+ }
95
113
  requestAnimationFrame(() => {
96
114
  var _a;
97
- const menuTrigger = this.parent;
98
115
  const triggerButton = ((_a = menuTrigger === null || menuTrigger === void 0 ? void 0 : menuTrigger.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector(`button.${prefix}--overflow-menu`)) || (menuTrigger === null || menuTrigger === void 0 ? void 0 : menuTrigger.querySelector(`button.${prefix}--overflow-menu`));
99
116
  if (triggerButton) {
100
117
  triggerButton.focus();
101
118
  }
102
- else {
103
- // eslint-disable-next-line no-console -- https://github.com/carbon-design-system/carbon/issues/20452
104
- console.warn('Could not find trigger button.');
105
- document.body.focus();
106
- }
107
119
  });
108
120
  }
109
121
  }
@@ -1 +1 @@
1
- {"version":3,"file":"overflow-menu-body.js","sources":["../../../src/components/overflow-menu/overflow-menu-body.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2019, 2025\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 { html } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { prefix } from '../../globals/settings';\nimport CDSFloatingMenu, {\n FLOATING_MENU_DIRECTION,\n} from '../floating-menu/floating-menu';\nimport { NAVIGATION_DIRECTION, OVERFLOW_MENU_SIZE } from './defs';\nimport CDSOverflowMenuItem from './overflow-menu-item';\nimport HostListener from '../../globals/decorators/host-listener';\nimport { indexOf } from '../../globals/internal/collection-helpers';\nimport { carbonElement as customElement } from '../../globals/decorators/carbon-element';\nimport styles from './overflow-menu.scss?lit';\n\n/**\n * @param index The index\n * @param length The length of the array.\n * @returns The new index, adjusting overflow/underflow.\n */\nconst capIndex = (index: number, length: number) => {\n if (index < 0) {\n return length - 1;\n }\n if (index >= length) {\n return 0;\n }\n return index;\n};\n\n/**\n * Overflow menu body.\n *\n * @element cds-custom-overflow-menu-body\n */\n@customElement(`${prefix}-overflow-menu-body`)\nclass CDSOverflowMenuBody extends CDSFloatingMenu {\n /**\n * The menu direction.\n */\n @property()\n direction = FLOATING_MENU_DIRECTION.BOTTOM;\n\n /**\n * How the menu is aligned to the trigger button.\n */\n @property({ type: Boolean, reflect: true })\n flipped = false;\n\n /**\n * `true` if the menu should be open.\n *\n * @private\n */\n @property({ type: Boolean, reflect: true })\n open = false;\n\n selected: CDSOverflowMenuItem | null = null;\n\n /**\n * The overflow menu size.\n */\n @property({ reflect: true })\n size = OVERFLOW_MENU_SIZE.MEDIUM;\n\n /**\n * @param currentItem The currently selected item.\n * @param direction The navigation direction.\n * @returns The item to be selected.\n */\n protected _getNextItem(currentItem: CDSOverflowMenuItem, direction: number) {\n const { selectorItemEnabled } = this\n .constructor as typeof CDSOverflowMenuBody;\n const menuItems = this.querySelectorAll(selectorItemEnabled);\n const currentIndex = indexOf(menuItems, currentItem);\n const nextIndex = capIndex(currentIndex + direction, menuItems.length);\n return nextIndex === currentIndex ? null : menuItems[nextIndex];\n }\n\n /**\n * Navigates through overflow menu items.\n *\n * @param direction `-1` to navigate backward, `1` to navigate forward.\n */\n protected _navigate(direction: number) {\n if (this.selected) {\n const nextItem = this._getNextItem(this.selected, direction);\n (nextItem as HTMLElement)?.focus();\n }\n }\n\n /**\n * Handles `keydown` event on the menu body.\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: The decorator refers to this method but TS thinks this method is not referred to\n protected _handleKeydown = async (event: KeyboardEvent) => {\n const { key } = event;\n if (this.open) {\n /**\n * sets this.selected to focused menu item. the menu item is focused\n * automatically due to FocusMixin\n */\n if (this.contains(document.activeElement)) {\n this.selected = document.activeElement as CDSOverflowMenuItem;\n }\n\n if (key in NAVIGATION_DIRECTION) {\n event.preventDefault();\n this._navigate(NAVIGATION_DIRECTION[key]);\n return;\n }\n\n if (key === 'Escape') {\n this.open = false;\n return;\n }\n\n const items = this.querySelectorAll(\n CDSOverflowMenuBody.selectorItemEnabled\n );\n const isInsideMenu = Array.from(items).some((item) =>\n item.contains(document.activeElement)\n );\n\n if (isInsideMenu) {\n event.preventDefault();\n this.open = false;\n\n requestAnimationFrame(() => {\n const menuTrigger = this.parent as HTMLElement | null;\n const triggerButton =\n menuTrigger?.shadowRoot?.querySelector(\n `button.${prefix}--overflow-menu`\n ) || menuTrigger?.querySelector(`button.${prefix}--overflow-menu`);\n\n if (triggerButton) {\n (triggerButton as HTMLElement).focus();\n } else {\n // eslint-disable-next-line no-console -- https://github.com/carbon-design-system/carbon/issues/20452\n console.warn('Could not find trigger button.');\n (document.body as HTMLElement).focus();\n }\n });\n }\n }\n };\n\n connectedCallback() {\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'menu');\n }\n if (!this.hasAttribute('tabindex')) {\n // TODO: Should we use a property?\n this.setAttribute('tabindex', '-1');\n }\n super.connectedCallback();\n }\n\n updated(changedProperties) {\n if (changedProperties.has('size')) {\n const { selectorMenuItem } = this\n .constructor as typeof CDSOverflowMenuBody;\n const menuItems = this.querySelectorAll(selectorMenuItem);\n menuItems.forEach((item) => {\n item.setAttribute('size', this.size);\n });\n }\n\n super.updated(changedProperties);\n }\n\n render() {\n return html` <slot></slot> `;\n }\n\n /**\n * A selector that will return menu items.\n */\n static get selectorMenuItem() {\n return `${prefix}-overflow-menu-item`;\n }\n\n /**\n * A selector that will return enabled menu items.\n */\n static get selectorItemEnabled() {\n return `${prefix}-overflow-menu-item:not([disabled])`;\n }\n\n static styles = styles;\n}\n\nexport default CDSOverflowMenuBody;\n"],"names":["customElement"],"mappings":"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"}
1
+ {"version":3,"file":"overflow-menu-body.js","sources":["../../../src/components/overflow-menu/overflow-menu-body.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2019, 2025\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 CDSFloatingMenu, {\n FLOATING_MENU_DIRECTION,\n} from '../floating-menu/floating-menu';\nimport { NAVIGATION_DIRECTION, OVERFLOW_MENU_SIZE } from './defs';\n\nimport CDSOverflowMenuItem from './overflow-menu-item';\nimport HostListener from '../../globals/decorators/host-listener';\nimport { carbonElement as customElement } from '../../globals/decorators/carbon-element';\nimport { html } from 'lit';\nimport { indexOf } from '../../globals/internal/collection-helpers';\nimport { prefix } from '../../globals/settings';\nimport { property } from 'lit/decorators.js';\nimport styles from './overflow-menu.scss?lit';\n\n/**\n * @param index The index\n * @param length The length of the array.\n * @returns The new index, adjusting overflow/underflow.\n */\nconst capIndex = (index: number, length: number) => {\n if (index < 0) {\n return length - 1;\n }\n if (index >= length) {\n return 0;\n }\n return index;\n};\n\n/**\n * Overflow menu body.\n *\n * @element cds-custom-overflow-menu-body\n */\n@customElement(`${prefix}-overflow-menu-body`)\nclass CDSOverflowMenuBody extends CDSFloatingMenu {\n /**\n * The menu direction.\n */\n @property()\n direction = FLOATING_MENU_DIRECTION.BOTTOM;\n\n /**\n * How the menu is aligned to the trigger button.\n */\n @property({ type: Boolean, reflect: true })\n flipped = false;\n\n /**\n * `true` if the menu should be open.\n *\n * @private\n */\n @property({ type: Boolean, reflect: true })\n open = false;\n\n selected: CDSOverflowMenuItem | null = null;\n\n /**\n * The overflow menu size.\n */\n @property({ reflect: true })\n size = OVERFLOW_MENU_SIZE.MEDIUM;\n\n /**\n * @param currentItem The currently selected item.\n * @param direction The navigation direction.\n * @returns The item to be selected.\n */\n protected _getNextItem(currentItem: CDSOverflowMenuItem, direction: number) {\n const { selectorItemEnabled } = this\n .constructor as typeof CDSOverflowMenuBody;\n const menuItems = this.querySelectorAll(selectorItemEnabled);\n const currentIndex = indexOf(menuItems, currentItem);\n const nextIndex = capIndex(currentIndex + direction, menuItems.length);\n return nextIndex === currentIndex ? null : menuItems[nextIndex];\n }\n\n /**\n * Navigates through overflow menu items.\n *\n * @param direction `-1` to navigate backward, `1` to navigate forward.\n */\n protected _navigate(direction: number) {\n if (this.selected) {\n const nextItem = this._getNextItem(this.selected, direction);\n (nextItem as HTMLElement)?.focus();\n }\n }\n\n /**\n * Handles `keydown` event on the menu body.\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: The decorator refers to this method but TS thinks this method is not referred to\n protected _handleKeydown = async (event: KeyboardEvent) => {\n const { key } = event;\n if (this.open) {\n /**\n * sets this.selected to focused menu item. the menu item is focused\n * automatically due to FocusMixin\n */\n if (this.contains(document.activeElement)) {\n this.selected = document.activeElement as CDSOverflowMenuItem;\n }\n\n if (key in NAVIGATION_DIRECTION) {\n event.preventDefault();\n this._navigate(NAVIGATION_DIRECTION[key]);\n return;\n }\n\n if (key === 'Escape') {\n event.preventDefault();\n\n const menuTrigger = this.parent as HTMLElement | null;\n this.open = false;\n\n if (menuTrigger && 'open' in menuTrigger) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (menuTrigger as any).open = false;\n }\n\n requestAnimationFrame(() => {\n const triggerButton =\n menuTrigger?.shadowRoot?.querySelector(\n `button.${prefix}--overflow-menu`\n ) || menuTrigger?.querySelector(`button.${prefix}--overflow-menu`);\n\n if (triggerButton) {\n (triggerButton as HTMLElement).focus();\n }\n });\n return;\n }\n\n const items = this.querySelectorAll(\n CDSOverflowMenuBody.selectorItemEnabled\n );\n const isInsideMenu = Array.from(items).some((item) =>\n item.contains(document.activeElement)\n );\n\n if (isInsideMenu) {\n event.preventDefault();\n\n const menuTrigger = this.parent as HTMLElement | null;\n this.open = false;\n\n if (menuTrigger && 'open' in menuTrigger) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (menuTrigger as any).open = false;\n }\n\n requestAnimationFrame(() => {\n const triggerButton =\n menuTrigger?.shadowRoot?.querySelector(\n `button.${prefix}--overflow-menu`\n ) || menuTrigger?.querySelector(`button.${prefix}--overflow-menu`);\n\n if (triggerButton) {\n (triggerButton as HTMLElement).focus();\n }\n });\n }\n }\n };\n\n connectedCallback() {\n if (!this.hasAttribute('role')) {\n this.setAttribute('role', 'menu');\n }\n if (!this.hasAttribute('tabindex')) {\n // TODO: Should we use a property?\n this.setAttribute('tabindex', '-1');\n }\n super.connectedCallback();\n }\n\n updated(changedProperties) {\n if (changedProperties.has('size')) {\n const { selectorMenuItem } = this\n .constructor as typeof CDSOverflowMenuBody;\n const menuItems = this.querySelectorAll(selectorMenuItem);\n menuItems.forEach((item) => {\n item.setAttribute('size', this.size);\n });\n }\n\n super.updated(changedProperties);\n }\n\n render() {\n return html` <slot></slot> `;\n }\n\n /**\n * A selector that will return menu items.\n */\n static get selectorMenuItem() {\n return `${prefix}-overflow-menu-item`;\n }\n\n /**\n * A selector that will return enabled menu items.\n */\n static get selectorItemEnabled() {\n return `${prefix}-overflow-menu-item:not([disabled])`;\n }\n\n static styles = styles;\n}\n\nexport default CDSOverflowMenuBody;\n"],"names":["customElement"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;;;;AAKG;;AAgBH;;;;AAIG;AACH,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,MAAc,KAAI;AACjD,IAAA,IAAI,KAAK,GAAG,CAAC,EAAE;QACb,OAAO,MAAM,GAAG,CAAC;;AAEnB,IAAA,IAAI,KAAK,IAAI,MAAM,EAAE;AACnB,QAAA,OAAO,CAAC;;AAEV,IAAA,OAAO,KAAK;AACd,CAAC;AAED;;;;AAIG;AAEH,IAAM,mBAAmB,GAAA,qBAAA,GAAzB,MAAM,mBAAoB,SAAQ,eAAe,CAAA;AAAjD,IAAA,WAAA,GAAA;;AACE;;AAEG;AAEH,QAAA,IAAA,CAAA,SAAS,GAAG,uBAAuB,CAAC,MAAM;AAE1C;;AAEG;QAEH,IAAO,CAAA,OAAA,GAAG,KAAK;AAEf;;;;AAIG;QAEH,IAAI,CAAA,IAAA,GAAG,KAAK;QAEZ,IAAQ,CAAA,QAAA,GAA+B,IAAI;AAE3C;;AAEG;AAEH,QAAA,IAAA,CAAA,IAAI,GAAG,kBAAkB,CAAC,MAAM;AA4BhC;;AAEG;AAIO,QAAA,IAAA,CAAA,cAAc,GAAG,OAAO,KAAoB,KAAI;AACxD,YAAA,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK;AACrB,YAAA,IAAI,IAAI,CAAC,IAAI,EAAE;AACb;;;AAGG;gBACH,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;AACzC,oBAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,aAAoC;;AAG/D,gBAAA,IAAI,GAAG,IAAI,oBAAoB,EAAE;oBAC/B,KAAK,CAAC,cAAc,EAAE;oBACtB,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;oBACzC;;AAGF,gBAAA,IAAI,GAAG,KAAK,QAAQ,EAAE;oBACpB,KAAK,CAAC,cAAc,EAAE;AAEtB,oBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAA4B;AACrD,oBAAA,IAAI,CAAC,IAAI,GAAG,KAAK;AAEjB,oBAAA,IAAI,WAAW,IAAI,MAAM,IAAI,WAAW,EAAE;;AAEvC,wBAAA,WAAmB,CAAC,IAAI,GAAG,KAAK;;oBAGnC,qBAAqB,CAAC,MAAK;;AACzB,wBAAA,MAAM,aAAa,GACjB,CAAA,CAAA,EAAA,GAAA,WAAW,KAAX,IAAA,IAAA,WAAW,KAAX,MAAA,GAAA,MAAA,GAAA,WAAW,CAAE,UAAU,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,aAAa,CACpC,CAAU,OAAA,EAAA,MAAM,CAAiB,eAAA,CAAA,CAClC,MAAI,WAAW,KAAX,IAAA,IAAA,WAAW,uBAAX,WAAW,CAAE,aAAa,CAAC,CAAU,OAAA,EAAA,MAAM,CAAiB,eAAA,CAAA,CAAC,CAAA;wBAEpE,IAAI,aAAa,EAAE;4BAChB,aAA6B,CAAC,KAAK,EAAE;;AAE1C,qBAAC,CAAC;oBACF;;gBAGF,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CACjC,qBAAmB,CAAC,mBAAmB,CACxC;gBACD,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAC/C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CACtC;gBAED,IAAI,YAAY,EAAE;oBAChB,KAAK,CAAC,cAAc,EAAE;AAEtB,oBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,MAA4B;AACrD,oBAAA,IAAI,CAAC,IAAI,GAAG,KAAK;AAEjB,oBAAA,IAAI,WAAW,IAAI,MAAM,IAAI,WAAW,EAAE;;AAEvC,wBAAA,WAAmB,CAAC,IAAI,GAAG,KAAK;;oBAGnC,qBAAqB,CAAC,MAAK;;AACzB,wBAAA,MAAM,aAAa,GACjB,CAAA,CAAA,EAAA,GAAA,WAAW,KAAX,IAAA,IAAA,WAAW,KAAX,MAAA,GAAA,MAAA,GAAA,WAAW,CAAE,UAAU,MAAE,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAA,aAAa,CACpC,CAAU,OAAA,EAAA,MAAM,CAAiB,eAAA,CAAA,CAClC,MAAI,WAAW,KAAX,IAAA,IAAA,WAAW,uBAAX,WAAW,CAAE,aAAa,CAAC,CAAU,OAAA,EAAA,MAAM,CAAiB,eAAA,CAAA,CAAC,CAAA;wBAEpE,IAAI,aAAa,EAAE;4BAChB,aAA6B,CAAC,KAAK,EAAE;;AAE1C,qBAAC,CAAC;;;AAGR,SAAC;;AAvGD;;;;AAIG;IACO,YAAY,CAAC,WAAgC,EAAE,SAAiB,EAAA;AACxE,QAAA,MAAM,EAAE,mBAAmB,EAAE,GAAG;AAC7B,aAAA,WAAyC;QAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC;QAC5D,MAAM,YAAY,GAAG,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC;AACpD,QAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,GAAG,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC;AACtE,QAAA,OAAO,SAAS,KAAK,YAAY,GAAG,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC;;AAGjE;;;;AAIG;AACO,IAAA,SAAS,CAAC,SAAiB,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;AAC3D,YAAA,QAAwB,aAAxB,QAAQ,KAAA,MAAA,GAAA,MAAA,GAAR,QAAQ,CAAkB,KAAK,EAAE;;;IAmFtC,iBAAiB,GAAA;QACf,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;AAC9B,YAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC;;QAEnC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;;AAElC,YAAA,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;;QAErC,KAAK,CAAC,iBAAiB,EAAE;;AAG3B,IAAA,OAAO,CAAC,iBAAiB,EAAA;AACvB,QAAA,IAAI,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACjC,YAAA,MAAM,EAAE,gBAAgB,EAAE,GAAG;AAC1B,iBAAA,WAAyC;YAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC;AACzD,YAAA,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;gBACzB,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;AACtC,aAAC,CAAC;;AAGJ,QAAA,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC;;IAGlC,MAAM,GAAA;QACJ,OAAO,IAAI,CAAA,CAAA,eAAA,CAAiB;;AAG9B;;AAEG;AACH,IAAA,WAAW,gBAAgB,GAAA;QACzB,OAAO,CAAA,EAAG,MAAM,CAAA,mBAAA,CAAqB;;AAGvC;;AAEG;AACH,IAAA,WAAW,mBAAmB,GAAA;QAC5B,OAAO,CAAA,EAAG,MAAM,CAAA,mCAAA,CAAqC;;;AAGhD,mBAAM,CAAA,MAAA,GAAG,MAAH;AA3Kb,UAAA,CAAA;AADC,IAAA,QAAQ;AACkC,CAAA,EAAA,mBAAA,CAAA,SAAA,EAAA,WAAA,EAAA,MAAA,CAAA;AAM3C,UAAA,CAAA;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAC1B,CAAA,EAAA,mBAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,CAAA;AAQhB,UAAA,CAAA;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAC7B,CAAA,EAAA,mBAAA,CAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA;AAQb,UAAA,CAAA;AADC,IAAA,QAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;AACM,CAAA,EAAA,mBAAA,CAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA;AAkCvB,UAAA,CAAA;IAHT,YAAY,CAAC,SAAS;;;AA0ErB,CAAA,EAAA,mBAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,MAAA,CAAA;AApIE,mBAAmB,GAAA,qBAAA,GAAA,UAAA,CAAA;AADxB,IAAAA,aAAa,CAAC,CAAA,EAAG,MAAM,CAAA,mBAAA,CAAqB;AACvC,CAAA,EAAA,mBAAmB,CAiLxB;AAED,4BAAe,mBAAmB;;;;"}
@@ -167,7 +167,7 @@ let CDSRadioButtonGroup = class CDSRadioButtonGroup extends FormMixin(HostListen
167
167
  }
168
168
  render() {
169
169
  const { readOnly, invalid, invalidText, warn, warnText, disabled, orientation, legendText, helperText, _hasAILabel: hasAILabel, _handleSlotChange: handleSlotChange, } = this;
170
- const showWarning = !readOnly && !invalid && warn;
170
+ const showWarning = !readOnly && !disabled && !invalid && warn;
171
171
  const showHelper = !invalid && !disabled && !warn;
172
172
  const invalidIcon = iconLoader(WarningFilled16, {
173
173
  class: `${prefix}--radio-button__invalid-icon`,
@@ -182,6 +182,8 @@ let CDSRadioButtonGroup = class CDSRadioButtonGroup extends FormMixin(HostListen
182
182
  [`${prefix}--radio-button-group`]: true,
183
183
  [`${prefix}--radio-button-group--readonly`]: readOnly,
184
184
  [`${prefix}--radio-button-group--${orientation}`]: orientation === 'vertical',
185
+ [`${prefix}--radio-button-group--invalid`]: !readOnly && !disabled && invalid,
186
+ [`${prefix}--radio-button-group--warning`]: showWarning,
185
187
  [`${prefix}--radio-button-group--slug`]: hasAILabel,
186
188
  });
187
189
  return html ` <fieldset
@@ -198,7 +200,7 @@ let CDSRadioButtonGroup = class CDSRadioButtonGroup extends FormMixin(HostListen
198
200
  <slot></slot>
199
201
  </fieldset>
200
202
  <div class="${prefix}--radio-button__validation-msg">
201
- ${!readOnly && invalid
203
+ ${!readOnly && !disabled && invalid
202
204
  ? html `
203
205
  ${invalidIcon}
204
206
  <div class="${prefix}--form-requirement">${invalidText}</div>
@@ -1 +1 @@
1
- {"version":3,"file":"radio-button-group.js","sources":["../../../src/components/radio-button/radio-button-group.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2019, 2025\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 { LitElement, html } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { prefix } from '../../globals/settings';\nimport FormMixin from '../../globals/mixins/form';\nimport HostListenerMixin from '../../globals/mixins/host-listener';\nimport HostListener from '../../globals/decorators/host-listener';\nimport { find, forEach } from '../../globals/internal/collection-helpers';\nimport { RADIO_BUTTON_LABEL_POSITION, RADIO_BUTTON_ORIENTATION } from './defs';\nimport CDSRadioButton from './radio-button';\nimport WarningFilled16 from '@carbon/icons/es/warning--filled/16.js';\nimport WarningAltFilled16 from '@carbon/icons/es/warning--alt--filled/16.js';\nimport styles from './radio-button.scss?lit';\nimport { carbonElement as customElement } from '../../globals/decorators/carbon-element';\nimport { iconLoader } from '../../globals/internal/icon-loader';\n\nexport { RADIO_BUTTON_ORIENTATION };\n\n/**\n * Radio button group.\n *\n * @element cds-custom-radio-button-group\n * @fires cds-custom-radio-button-group-changed - The custom event fired after this radio button group changes its selected item.\n * @fires cds-custom-radio-button-changed\n * The name of the custom event fired after a radio button changes its checked state.\n */\n@customElement(`${prefix}-radio-button-group`)\nclass CDSRadioButtonGroup extends FormMixin(HostListenerMixin(LitElement)) {\n /**\n * Handles user-initiated change in selected radio button.\n */\n @HostListener('eventChangeRadioButton')\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- https://github.com/carbon-design-system/carbon/issues/20452\n // @ts-ignore: The decorator refers to this method but TS thinks this method is not referred to\n private _handleAfterChangeRadioButton = (event: CustomEvent) => {\n // Bail out early if readOnly\n if (this.readOnly) {\n return;\n }\n\n const { selectorRadioButton } = this\n .constructor as typeof CDSRadioButtonGroup;\n const selected = find(\n this.querySelectorAll(selectorRadioButton),\n (elem) => (elem as CDSRadioButton).checked\n );\n\n const oldValue = this.value;\n this.value = selected && selected.value;\n\n if (oldValue !== this.value) {\n const { eventChange } = this.constructor as typeof CDSRadioButtonGroup;\n this.dispatchEvent(\n new CustomEvent(eventChange, {\n bubbles: true,\n composed: true,\n detail: {\n value: this.value,\n name: this.name,\n event,\n },\n })\n );\n }\n };\n\n _handleFormdata(event: FormDataEvent) {\n const { formData } = event;\n const { disabled, name, value } = this;\n if (\n !disabled &&\n typeof name !== 'undefined' &&\n typeof value !== 'undefined'\n ) {\n formData.append(name, value);\n }\n }\n\n /**\n * Handles `slotchange` event.\n */\n protected _handleSlotChange({ target }: Event) {\n const hasContent = (target as HTMLSlotElement)\n .assignedNodes()\n .filter((elem) =>\n (elem as HTMLElement).matches !== undefined\n ? (elem as HTMLElement).matches(\n (this.constructor as typeof CDSRadioButtonGroup).aiLabelItem\n ) ||\n // remove reference to slug in v12\n (elem as HTMLElement).matches(\n (this.constructor as typeof CDSRadioButtonGroup).slugItem\n )\n : false\n );\n\n this._hasAILabel = Boolean(hasContent);\n (hasContent[0] as HTMLElement).setAttribute('size', 'mini');\n this.requestUpdate();\n }\n\n /**\n * `true` if there is an AI Label.\n */\n protected _hasAILabel = false;\n\n /**\n * The `value` attribute for the `<input>` for selection.\n */\n @property()\n defaultSelected!: string;\n\n /**\n * `true` if the radio button group should be disabled.\n */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /**\n * The label position.\n */\n @property({ reflect: true, attribute: 'label-position' })\n labelPosition = RADIO_BUTTON_LABEL_POSITION.RIGHT;\n\n /**\n * The label position.\n */\n @property({ reflect: true, attribute: 'legend-text' })\n legendText = '';\n\n /**\n * The helper text.\n */\n @property({ attribute: 'helper-text' })\n helperText;\n\n /**\n * Specify whether the control is currently in warning state\n */\n @property({ type: Boolean, reflect: true })\n warn = false;\n\n /**\n * Provide the text that is displayed when the control is in warning state\n */\n @property({ attribute: 'warn-text' })\n warnText = '';\n\n /**\n * Specify if the currently value is invalid.\n */\n @property({ type: Boolean, reflect: true })\n invalid = false;\n\n /**\n * Message which is displayed if the value is invalid.\n */\n @property({ attribute: 'invalid-text' })\n invalidText = '';\n\n /**\n * The `name` attribute for the `<input>` for selection.\n */\n @property()\n name!: string;\n\n /**\n * The orientation to lay out radio buttons.\n */\n @property({ reflect: true })\n orientation = RADIO_BUTTON_ORIENTATION.HORIZONTAL;\n\n /**\n * Controls the readonly state of the radio button group.\n */\n @property({ type: Boolean, reflect: true })\n readOnly = false;\n\n /**\n * `true` to specify if input selection in group is required.\n */\n @property({ type: Boolean, reflect: true })\n required = false;\n /**\n * The `value` attribute for the `<input>` for selection.\n */\n @property()\n value!: string;\n\n updated(changedProperties) {\n const { selectorRadioButton } = this\n .constructor as typeof CDSRadioButtonGroup;\n [\n 'disabled',\n 'labelPosition',\n 'orientation',\n 'readOnly',\n 'name',\n 'required',\n ].forEach((name) => {\n if (changedProperties.has(name)) {\n const { [name as keyof CDSRadioButtonGroup]: value } = this;\n // Propagate the property to descendants until `:host-context()` gets supported in all major browsers\n forEach(this.querySelectorAll(selectorRadioButton), (elem) => {\n (elem as CDSRadioButton)[name] = value;\n });\n }\n });\n if (changedProperties.has('value')) {\n const { value } = this;\n forEach(this.querySelectorAll(selectorRadioButton), (elem) => {\n (elem as CDSRadioButton).checked =\n value === (elem as CDSRadioButton).value;\n });\n }\n if (changedProperties.has('invalid')) {\n forEach(this.querySelectorAll(selectorRadioButton), (elem) => {\n (elem as CDSRadioButton).invalid = this.invalid;\n });\n }\n }\n\n render() {\n const {\n readOnly,\n invalid,\n invalidText,\n warn,\n warnText,\n disabled,\n orientation,\n legendText,\n helperText,\n _hasAILabel: hasAILabel,\n _handleSlotChange: handleSlotChange,\n } = this;\n\n const showWarning = !readOnly && !invalid && warn;\n const showHelper = !invalid && !disabled && !warn;\n\n const invalidIcon = iconLoader(WarningFilled16, {\n class: `${prefix}--radio-button__invalid-icon`,\n });\n\n const warnIcon = iconLoader(WarningAltFilled16, {\n class: `${prefix}--radio-button__invalid-icon ${prefix}--radio-button__invalid-icon--warning`,\n });\n\n const helper = helperText\n ? html`<div class=\"${prefix}--form__helper-text\">${helperText}</div>`\n : null;\n\n const fieldsetClasses = classMap({\n [`${prefix}--radio-button-group`]: true,\n [`${prefix}--radio-button-group--readonly`]: readOnly,\n [`${prefix}--radio-button-group--${orientation}`]:\n orientation === 'vertical',\n [`${prefix}--radio-button-group--slug`]: hasAILabel,\n });\n\n return html` <fieldset\n class=\"${fieldsetClasses}\"\n ?disabled=\"${disabled}\"\n aria-readonly=\"${readOnly}\">\n ${legendText\n ? html` <legend class=\"${prefix}--label\">\n ${legendText}\n <slot name=\"ai-label\" @slotchange=\"${handleSlotChange}\"></slot>\n <slot name=\"slug\" @slotchange=\"${handleSlotChange}\"></slot>\n </legend>`\n : ``}\n <slot></slot>\n </fieldset>\n <div class=\"${prefix}--radio-button__validation-msg\">\n ${!readOnly && invalid\n ? html`\n ${invalidIcon}\n <div class=\"${prefix}--form-requirement\">${invalidText}</div>\n `\n : null}\n ${showWarning\n ? html`${warnIcon}\n <div class=\"${prefix}--form-requirement\">${warnText}</div>`\n : null}\n </div>\n ${showHelper ? helper : null}`;\n }\n\n /**\n * A selector that will return the radio buttons.\n */\n static get selectorRadioButton() {\n return `${prefix}-radio-button`;\n }\n\n /**\n * A selector that will return the slug item.\n *\n * remove in v12\n */\n static get slugItem() {\n return `${prefix}-slug`;\n }\n\n /**\n * A selector that will return the AI Label item.\n */\n static get aiLabelItem() {\n return `${prefix}-ai-label`;\n }\n\n /**\n * The name of the custom event fired after this radio button group changes its selected item.\n */\n static get eventChange() {\n return `${prefix}-radio-button-group-changed`;\n }\n\n /**\n * The name of the custom event fired after a radio button changes its checked state.\n */\n static get eventChangeRadioButton() {\n return `${prefix}-radio-button-changed`;\n }\n\n static styles = styles;\n}\n\nexport default CDSRadioButtonGroup;\n"],"names":["customElement"],"mappings":"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"}
1
+ {"version":3,"file":"radio-button-group.js","sources":["../../../src/components/radio-button/radio-button-group.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2019, 2025\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 { LitElement, html } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { prefix } from '../../globals/settings';\nimport FormMixin from '../../globals/mixins/form';\nimport HostListenerMixin from '../../globals/mixins/host-listener';\nimport HostListener from '../../globals/decorators/host-listener';\nimport { find, forEach } from '../../globals/internal/collection-helpers';\nimport { RADIO_BUTTON_LABEL_POSITION, RADIO_BUTTON_ORIENTATION } from './defs';\nimport CDSRadioButton from './radio-button';\nimport WarningFilled16 from '@carbon/icons/es/warning--filled/16.js';\nimport WarningAltFilled16 from '@carbon/icons/es/warning--alt--filled/16.js';\nimport styles from './radio-button.scss?lit';\nimport { carbonElement as customElement } from '../../globals/decorators/carbon-element';\nimport { iconLoader } from '../../globals/internal/icon-loader';\n\nexport { RADIO_BUTTON_ORIENTATION };\n\n/**\n * Radio button group.\n *\n * @element cds-custom-radio-button-group\n * @fires cds-custom-radio-button-group-changed - The custom event fired after this radio button group changes its selected item.\n * @fires cds-custom-radio-button-changed\n * The name of the custom event fired after a radio button changes its checked state.\n */\n@customElement(`${prefix}-radio-button-group`)\nclass CDSRadioButtonGroup extends FormMixin(HostListenerMixin(LitElement)) {\n /**\n * Handles user-initiated change in selected radio button.\n */\n @HostListener('eventChangeRadioButton')\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- https://github.com/carbon-design-system/carbon/issues/20452\n // @ts-ignore: The decorator refers to this method but TS thinks this method is not referred to\n private _handleAfterChangeRadioButton = (event: CustomEvent) => {\n // Bail out early if readOnly\n if (this.readOnly) {\n return;\n }\n\n const { selectorRadioButton } = this\n .constructor as typeof CDSRadioButtonGroup;\n const selected = find(\n this.querySelectorAll(selectorRadioButton),\n (elem) => (elem as CDSRadioButton).checked\n );\n\n const oldValue = this.value;\n this.value = selected && selected.value;\n\n if (oldValue !== this.value) {\n const { eventChange } = this.constructor as typeof CDSRadioButtonGroup;\n this.dispatchEvent(\n new CustomEvent(eventChange, {\n bubbles: true,\n composed: true,\n detail: {\n value: this.value,\n name: this.name,\n event,\n },\n })\n );\n }\n };\n\n _handleFormdata(event: FormDataEvent) {\n const { formData } = event;\n const { disabled, name, value } = this;\n if (\n !disabled &&\n typeof name !== 'undefined' &&\n typeof value !== 'undefined'\n ) {\n formData.append(name, value);\n }\n }\n\n /**\n * Handles `slotchange` event.\n */\n protected _handleSlotChange({ target }: Event) {\n const hasContent = (target as HTMLSlotElement)\n .assignedNodes()\n .filter((elem) =>\n (elem as HTMLElement).matches !== undefined\n ? (elem as HTMLElement).matches(\n (this.constructor as typeof CDSRadioButtonGroup).aiLabelItem\n ) ||\n // remove reference to slug in v12\n (elem as HTMLElement).matches(\n (this.constructor as typeof CDSRadioButtonGroup).slugItem\n )\n : false\n );\n\n this._hasAILabel = Boolean(hasContent);\n (hasContent[0] as HTMLElement).setAttribute('size', 'mini');\n this.requestUpdate();\n }\n\n /**\n * `true` if there is an AI Label.\n */\n protected _hasAILabel = false;\n\n /**\n * The `value` attribute for the `<input>` for selection.\n */\n @property()\n defaultSelected!: string;\n\n /**\n * `true` if the radio button group should be disabled.\n */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /**\n * The label position.\n */\n @property({ reflect: true, attribute: 'label-position' })\n labelPosition = RADIO_BUTTON_LABEL_POSITION.RIGHT;\n\n /**\n * The label position.\n */\n @property({ reflect: true, attribute: 'legend-text' })\n legendText = '';\n\n /**\n * The helper text.\n */\n @property({ attribute: 'helper-text' })\n helperText;\n\n /**\n * Specify whether the control is currently in warning state\n */\n @property({ type: Boolean, reflect: true })\n warn = false;\n\n /**\n * Provide the text that is displayed when the control is in warning state\n */\n @property({ attribute: 'warn-text' })\n warnText = '';\n\n /**\n * Specify if the currently value is invalid.\n */\n @property({ type: Boolean, reflect: true })\n invalid = false;\n\n /**\n * Message which is displayed if the value is invalid.\n */\n @property({ attribute: 'invalid-text' })\n invalidText = '';\n\n /**\n * The `name` attribute for the `<input>` for selection.\n */\n @property()\n name!: string;\n\n /**\n * The orientation to lay out radio buttons.\n */\n @property({ reflect: true })\n orientation = RADIO_BUTTON_ORIENTATION.HORIZONTAL;\n\n /**\n * Controls the readonly state of the radio button group.\n */\n @property({ type: Boolean, reflect: true })\n readOnly = false;\n\n /**\n * `true` to specify if input selection in group is required.\n */\n @property({ type: Boolean, reflect: true })\n required = false;\n /**\n * The `value` attribute for the `<input>` for selection.\n */\n @property()\n value!: string;\n\n updated(changedProperties) {\n const { selectorRadioButton } = this\n .constructor as typeof CDSRadioButtonGroup;\n [\n 'disabled',\n 'labelPosition',\n 'orientation',\n 'readOnly',\n 'name',\n 'required',\n ].forEach((name) => {\n if (changedProperties.has(name)) {\n const { [name as keyof CDSRadioButtonGroup]: value } = this;\n // Propagate the property to descendants until `:host-context()` gets supported in all major browsers\n forEach(this.querySelectorAll(selectorRadioButton), (elem) => {\n (elem as CDSRadioButton)[name] = value;\n });\n }\n });\n if (changedProperties.has('value')) {\n const { value } = this;\n forEach(this.querySelectorAll(selectorRadioButton), (elem) => {\n (elem as CDSRadioButton).checked =\n value === (elem as CDSRadioButton).value;\n });\n }\n if (changedProperties.has('invalid')) {\n forEach(this.querySelectorAll(selectorRadioButton), (elem) => {\n (elem as CDSRadioButton).invalid = this.invalid;\n });\n }\n }\n\n render() {\n const {\n readOnly,\n invalid,\n invalidText,\n warn,\n warnText,\n disabled,\n orientation,\n legendText,\n helperText,\n _hasAILabel: hasAILabel,\n _handleSlotChange: handleSlotChange,\n } = this;\n\n const showWarning = !readOnly && !disabled && !invalid && warn;\n const showHelper = !invalid && !disabled && !warn;\n\n const invalidIcon = iconLoader(WarningFilled16, {\n class: `${prefix}--radio-button__invalid-icon`,\n });\n\n const warnIcon = iconLoader(WarningAltFilled16, {\n class: `${prefix}--radio-button__invalid-icon ${prefix}--radio-button__invalid-icon--warning`,\n });\n\n const helper = helperText\n ? html`<div class=\"${prefix}--form__helper-text\">${helperText}</div>`\n : null;\n\n const fieldsetClasses = classMap({\n [`${prefix}--radio-button-group`]: true,\n [`${prefix}--radio-button-group--readonly`]: readOnly,\n [`${prefix}--radio-button-group--${orientation}`]:\n orientation === 'vertical',\n [`${prefix}--radio-button-group--invalid`]:\n !readOnly && !disabled && invalid,\n [`${prefix}--radio-button-group--warning`]: showWarning,\n [`${prefix}--radio-button-group--slug`]: hasAILabel,\n });\n\n return html` <fieldset\n class=\"${fieldsetClasses}\"\n ?disabled=\"${disabled}\"\n aria-readonly=\"${readOnly}\">\n ${legendText\n ? html` <legend class=\"${prefix}--label\">\n ${legendText}\n <slot name=\"ai-label\" @slotchange=\"${handleSlotChange}\"></slot>\n <slot name=\"slug\" @slotchange=\"${handleSlotChange}\"></slot>\n </legend>`\n : ``}\n <slot></slot>\n </fieldset>\n <div class=\"${prefix}--radio-button__validation-msg\">\n ${!readOnly && !disabled && invalid\n ? html`\n ${invalidIcon}\n <div class=\"${prefix}--form-requirement\">${invalidText}</div>\n `\n : null}\n ${showWarning\n ? html`${warnIcon}\n <div class=\"${prefix}--form-requirement\">${warnText}</div>`\n : null}\n </div>\n ${showHelper ? helper : null}`;\n }\n\n /**\n * A selector that will return the radio buttons.\n */\n static get selectorRadioButton() {\n return `${prefix}-radio-button`;\n }\n\n /**\n * A selector that will return the slug item.\n *\n * remove in v12\n */\n static get slugItem() {\n return `${prefix}-slug`;\n }\n\n /**\n * A selector that will return the AI Label item.\n */\n static get aiLabelItem() {\n return `${prefix}-ai-label`;\n }\n\n /**\n * The name of the custom event fired after this radio button group changes its selected item.\n */\n static get eventChange() {\n return `${prefix}-radio-button-group-changed`;\n }\n\n /**\n * The name of the custom event fired after a radio button changes its checked state.\n */\n static get eventChangeRadioButton() {\n return `${prefix}-radio-button-changed`;\n }\n\n static styles = styles;\n}\n\nexport default CDSRadioButtonGroup;\n"],"names":["customElement"],"mappings":"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"}
@@ -787,6 +787,14 @@ declare class CDSRadioButton extends CDSRadioButton_base {
787
787
  * Specify if the currently value is invalid.
788
788
  */
789
789
  invalid: boolean;
790
+ /**
791
+ * Specify whether the control is currently in warning state
792
+ */
793
+ warn: boolean;
794
+ /**
795
+ * Provide the text that is displayed when the control is in warning state
796
+ */
797
+ warnText: string;
790
798
  /**
791
799
  * The label position.
792
800
  */
@@ -199,6 +199,14 @@ let CDSRadioButton = class CDSRadioButton extends HostListenerMixin(FocusMixin(L
199
199
  * Specify if the currently value is invalid.
200
200
  */
201
201
  this.invalid = false;
202
+ /**
203
+ * Specify whether the control is currently in warning state
204
+ */
205
+ this.warn = false;
206
+ /**
207
+ * Provide the text that is displayed when the control is in warning state
208
+ */
209
+ this.warnText = '';
202
210
  /**
203
211
  * The label position.
204
212
  */
@@ -250,7 +258,12 @@ let CDSRadioButton = class CDSRadioButton extends HostListenerMixin(FocusMixin(L
250
258
  }
251
259
  }
252
260
  updated(changedProperties) {
253
- const { _hasAILabel: hasAILabel, _inputNode: inputNode, _radioButtonDelegate: radioButtonDelegate, name, } = this;
261
+ const { _hasAILabel: hasAILabel, _inputNode: inputNode, _radioButtonDelegate: radioButtonDelegate, name, disabled, disabledItem, readOnly, invalid, warn, } = this;
262
+ // Normalize input props similar to useNormalizedInputProps in React
263
+ const normalizedProps = {
264
+ invalid: !readOnly && !disabled && !disabledItem && invalid,
265
+ warn: !readOnly && !disabled && !disabledItem && !invalid && warn,
266
+ };
254
267
  if (changedProperties.has('checked') || changedProperties.has('name')) {
255
268
  if (!this._manager) {
256
269
  this._manager = RadioGroupManager.get(this.getRootNode({ composed: true }));
@@ -273,13 +286,38 @@ let CDSRadioButton = class CDSRadioButton extends HostListenerMixin(FocusMixin(L
273
286
  ? '-1'
274
287
  : '0');
275
288
  }
289
+ // Handle validation states based on normalized props
290
+ if (changedProperties.has('invalid') ||
291
+ changedProperties.has('warn') ||
292
+ changedProperties.has('disabled') ||
293
+ changedProperties.has('disabledItem') ||
294
+ changedProperties.has('readOnly')) {
295
+ // Apply normalized validation states
296
+ if (normalizedProps.invalid) {
297
+ this.setAttribute('invalid', '');
298
+ this.removeAttribute('warn');
299
+ }
300
+ else if (normalizedProps.warn) {
301
+ this.setAttribute('warn', '');
302
+ this.removeAttribute('invalid');
303
+ }
304
+ else {
305
+ this.removeAttribute('invalid');
306
+ this.removeAttribute('warn');
307
+ }
308
+ }
276
309
  // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- https://github.com/carbon-design-system/carbon/issues/20452
277
310
  hasAILabel
278
311
  ? this.setAttribute('ai-label', '')
279
312
  : this.removeAttribute('ai-label');
280
313
  }
281
314
  render() {
282
- const { checked, hideLabel, labelText, name, value, disabled, disabledItem, readOnly, } = this;
315
+ const { checked, hideLabel, labelText, name, value, disabled, disabledItem, readOnly, invalid, warn, } = this;
316
+ // Normalize input props similar to useNormalizedInputProps in React
317
+ const normalizedProps = {
318
+ invalid: !readOnly && !disabled && !disabledItem && invalid,
319
+ warn: !readOnly && !disabled && !disabledItem && !invalid && warn,
320
+ };
283
321
  const innerLabelClasses = classMap({
284
322
  [`${prefix}--radio-button__label-text`]: true,
285
323
  [`${prefix}--visually-hidden`]: hideLabel,
@@ -295,7 +333,13 @@ let CDSRadioButton = class CDSRadioButton extends HostListenerMixin(FocusMixin(L
295
333
  aria-readonly="${String(Boolean(readOnly))}"
296
334
  name=${ifDefined(name)}
297
335
  value=${ifDefined(value)} />
298
- <label for="input" class="${prefix}--radio-button__label">
336
+ <label
337
+ for="input"
338
+ class="${prefix}--radio-button__label ${normalizedProps.invalid
339
+ ? `${prefix}--radio-button__label--invalid`
340
+ : ''} ${normalizedProps.warn
341
+ ? `${prefix}--radio-button__label--warn`
342
+ : ''}">
299
343
  <span class="${prefix}--radio-button__appearance"></span>
300
344
  <span class="${innerLabelClasses}">
301
345
  <slot> ${labelText} </slot>
@@ -362,6 +406,12 @@ __decorate([
362
406
  __decorate([
363
407
  property({ type: Boolean, reflect: true })
364
408
  ], CDSRadioButton.prototype, "invalid", void 0);
409
+ __decorate([
410
+ property({ type: Boolean, reflect: true })
411
+ ], CDSRadioButton.prototype, "warn", void 0);
412
+ __decorate([
413
+ property({ attribute: 'warn-text' })
414
+ ], CDSRadioButton.prototype, "warnText", void 0);
365
415
  __decorate([
366
416
  property({ reflect: true, attribute: 'label-position' })
367
417
  ], CDSRadioButton.prototype, "labelPosition", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"radio-button.js","sources":["../../../src/components/radio-button/radio-button.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2019, 2024\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 { prefix } from '../../globals/settings';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport HostListener from '../../globals/decorators/host-listener';\nimport FocusMixin from '../../globals/mixins/focus';\nimport HostListenerMixin from '../../globals/mixins/host-listener';\nimport RadioGroupManager, {\n NAVIGATION_DIRECTION,\n ManagedRadioButtonDelegate,\n} from '../../globals/internal/radio-group-manager';\nimport { RADIO_BUTTON_LABEL_POSITION, RADIO_BUTTON_ORIENTATION } from './defs';\nimport styles from './radio-button.scss?lit';\nimport { carbonElement as customElement } from '../../globals/decorators/carbon-element';\n\nexport { RADIO_BUTTON_LABEL_POSITION };\n\n/**\n * Map of navigation direction by key for horizontal alignment.\n */\nconst navigationDirectionForKeyHorizontal = {\n ArrowLeft: NAVIGATION_DIRECTION.BACKWARD,\n Left: NAVIGATION_DIRECTION.BACKWARD, // IE\n ArrowRight: NAVIGATION_DIRECTION.FORWARD,\n Right: NAVIGATION_DIRECTION.FORWARD, // IE\n};\n\n/**\n * Map of navigation direction by key for vertical alignment.\n */\nconst navigationDirectionForKeyVertical = {\n ArrowUp: NAVIGATION_DIRECTION.BACKWARD,\n Up: NAVIGATION_DIRECTION.BACKWARD, // IE\n ArrowDown: NAVIGATION_DIRECTION.FORWARD,\n Down: NAVIGATION_DIRECTION.FORWARD, // IE\n};\n\n/**\n * The interface for `RadioGroupManager` for radio button.\n */\nclass RadioButtonDelegate implements ManagedRadioButtonDelegate {\n /**\n * The radio button to target.\n */\n private _radio: HTMLInputElement;\n\n constructor(radio: HTMLInputElement) {\n this._radio = radio;\n }\n\n get checked() {\n return this._radio.checked;\n }\n\n set checked(checked) {\n const { host } = this._radio.getRootNode() as ShadowRoot;\n const { eventChange } = host.constructor as typeof CDSRadioButton;\n (host as CDSRadioButton).checked = checked;\n this._radio.tabIndex = checked ? 0 : -1;\n host.dispatchEvent(\n new CustomEvent(eventChange, {\n bubbles: true,\n composed: true,\n detail: {\n checked,\n value: this._radio.value,\n name: this._radio.name,\n },\n })\n );\n }\n\n get tabIndex() {\n return this._radio.tabIndex;\n }\n\n set tabIndex(tabIndex) {\n this._radio.tabIndex = tabIndex;\n }\n\n get name() {\n return this._radio.name;\n }\n\n get disabled() {\n return this._radio.disabled;\n }\n\n compareDocumentPosition(other: RadioButtonDelegate) {\n return this._radio.compareDocumentPosition(other._radio);\n }\n\n focus() {\n this._radio.focus();\n }\n}\n\n/**\n * Radio button.\n *\n * @element cds-custom-radio-button\n * @fires cds-custom-radio-button-changed - The custom event fired after this radio button changes its checked state.\n */\n@customElement(`${prefix}-radio-button`)\nclass CDSRadioButton extends HostListenerMixin(FocusMixin(LitElement)) {\n /**\n * The radio group manager associated with the radio button.\n */\n private _manager: RadioGroupManager | null = null;\n\n /**\n * The interface for `RadioGroupManager` for radio button.\n */\n private _radioButtonDelegate!: RadioButtonDelegate;\n\n /**\n * The hidden radio button.\n */\n @query('input')\n private _inputNode!: HTMLInputElement;\n\n /**\n * Handles `click` event on this element.\n */\n @HostListener('click')\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- https://github.com/carbon-design-system/carbon/issues/20452\n // @ts-ignore: The decorator refers to this method but TS thinks this method is not referred to\n private _handleClick = (event) => {\n if (\n !(event.target as HTMLElement).matches(\n (this.constructor as typeof CDSRadioButton)?.aiLabelItem\n ) &&\n !(event.target as HTMLElement).matches(\n (this.constructor as typeof CDSRadioButton)?.slugItem\n )\n ) {\n const {\n disabled,\n _radioButtonDelegate: radioButtonDelegate,\n readOnly,\n } = this;\n if (readOnly) {\n event.preventDefault();\n return;\n }\n if (radioButtonDelegate && !disabled && !this.disabledItem) {\n this.checked = true;\n if (this._manager) {\n this._manager.select(radioButtonDelegate, this.readOnly);\n }\n this.dispatchEvent(\n new CustomEvent(\n (this.constructor as typeof CDSRadioButton).eventChange,\n {\n bubbles: true,\n composed: true,\n detail: {\n checked: this.checked,\n value: this.value,\n name: this.name,\n event,\n },\n }\n )\n );\n }\n this.dispatchEvent(\n new CustomEvent(\n (this.constructor as typeof CDSRadioButton).eventChange,\n {\n bubbles: true,\n composed: true,\n detail: {\n checked: this.checked,\n value: this.value,\n name: this.name,\n event,\n },\n }\n )\n );\n }\n };\n\n /**\n * Handles `keydown` event on this element.\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: The decorator refers to this method but TS thinks this method is not referred to\n private _handleKeydown = (event: KeyboardEvent) => {\n if (\n !(event.target as HTMLElement).matches(\n (this.constructor as typeof CDSRadioButton)?.aiLabelItem\n ) &&\n !(event.target as HTMLElement).matches(\n (this.constructor as typeof CDSRadioButton)?.slugItem\n )\n ) {\n const {\n orientation,\n _radioButtonDelegate: radioButtonDelegate,\n disabled,\n disabledItem,\n readOnly,\n } = this;\n const manager = this._manager;\n if (readOnly) {\n event.preventDefault();\n return;\n }\n if (radioButtonDelegate && manager && !disabled && !disabledItem) {\n const navigationDirectionForKey =\n orientation === RADIO_BUTTON_ORIENTATION.HORIZONTAL\n ? navigationDirectionForKeyHorizontal\n : navigationDirectionForKeyVertical;\n const navigationDirection = navigationDirectionForKey[event.key];\n if (navigationDirection) {\n manager.select(\n manager.navigate(radioButtonDelegate, navigationDirection),\n this.readOnly\n );\n }\n if (event.key === ' ' || event.key === 'Enter') {\n manager.select(radioButtonDelegate, this.readOnly);\n }\n }\n }\n };\n\n /**\n * Handles `slotchange` event.\n */\n protected _handleSlotChange({ target }: Event) {\n const hasContent = (target as HTMLSlotElement)\n .assignedNodes()\n .filter((elem) =>\n (elem as HTMLElement).matches !== undefined\n ? (elem as HTMLElement).matches(\n (this.constructor as typeof CDSRadioButton).aiLabelItem\n ) ||\n // remove reference to slug in v12\n (elem as HTMLElement).matches(\n (this.constructor as typeof CDSRadioButton).slugItem\n )\n : false\n );\n\n this._hasAILabel = Boolean(hasContent);\n const type = (hasContent[0] as HTMLElement).getAttribute('kind');\n (hasContent[0] as HTMLElement).setAttribute(\n 'size',\n type === 'inline' ? 'md' : 'mini'\n );\n this.requestUpdate();\n }\n\n /**\n * `true` if there is an AI Label.\n */\n protected _hasAILabel = false;\n\n /**\n * `true` if this radio button should be checked.\n */\n @property({ type: Boolean, reflect: true })\n checked = false;\n\n /**\n * `true` if the radio button is used in a data table\n */\n @property({ type: Boolean, reflect: true, attribute: 'data-table' })\n dataTable = false;\n\n /**\n * Specify whether the `<radio-button>` should be checked by default\n */\n @property({ type: Boolean, attribute: 'default-checked' })\n defaultChecked = false;\n\n /**\n * `true` if the radio button item should be disabled.\n */\n @property({ type: Boolean, reflect: true })\n disabledItem = false;\n\n /**\n * `true` if the radio button group should be disabled.\n */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /**\n * `true` if the label should be hidden.\n */\n @property({ type: Boolean, reflect: true, attribute: 'hide-label' })\n hideLabel = false;\n\n /**\n * Specify if the currently value is invalid.\n */\n @property({ type: Boolean, reflect: true })\n invalid = false;\n\n /**\n * The label position.\n */\n @property({ reflect: true, attribute: 'label-position' })\n labelPosition = RADIO_BUTTON_LABEL_POSITION.RIGHT;\n\n /**\n * The label text.\n */\n @property({ attribute: 'label-text' })\n labelText = '';\n\n /**\n * The `name` attribute for the `<input>` for selection.\n */\n @property()\n name!: string;\n\n /**\n * The orientation to lay out radio buttons.\n */\n @property({ reflect: true })\n orientation = RADIO_BUTTON_ORIENTATION.HORIZONTAL;\n\n /**\n * `true` if the radio button group should be disabled.\n */\n @property({ type: Boolean, reflect: true })\n readOnly = false;\n\n /**\n * `true` if the radio button is required.\n */\n @property({ type: Boolean, reflect: true })\n required = false;\n\n /**\n * The `value` attribute for the `<input>` for selection.\n */\n @property()\n value!: string;\n\n disconnectedCallback() {\n if (this._manager) {\n this._manager.delete(this._radioButtonDelegate);\n }\n super.disconnectedCallback();\n }\n\n firstUpdated() {\n this._radioButtonDelegate = new RadioButtonDelegate(this._inputNode);\n\n // If user hasn’t explicitly set `checked`, respect `defaultChecked`\n if (this.defaultChecked && this.checked === false) {\n this.checked = true;\n }\n }\n\n updated(changedProperties) {\n const {\n _hasAILabel: hasAILabel,\n _inputNode: inputNode,\n _radioButtonDelegate: radioButtonDelegate,\n name,\n } = this;\n\n if (changedProperties.has('checked') || changedProperties.has('name')) {\n if (!this._manager) {\n this._manager = RadioGroupManager.get(\n this.getRootNode({ composed: true }) as Document\n );\n }\n const { _manager: manager } = this;\n if (changedProperties.has('name')) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- https://github.com/carbon-design-system/carbon/issues/20452\n manager!.delete(radioButtonDelegate, changedProperties.get('name'));\n if (name) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- https://github.com/carbon-design-system/carbon/issues/20452\n manager!.add(radioButtonDelegate);\n }\n }\n // Disabled items should have tabIndex -1.\n inputNode.setAttribute(\n 'tabindex',\n !name ||\n !manager ||\n this.disabled ||\n this.disabledItem ||\n !manager.shouldBeFocusable(radioButtonDelegate)\n ? '-1'\n : '0'\n );\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- https://github.com/carbon-design-system/carbon/issues/20452\n hasAILabel\n ? this.setAttribute('ai-label', '')\n : this.removeAttribute('ai-label');\n }\n\n render() {\n const {\n checked,\n hideLabel,\n labelText,\n name,\n value,\n disabled,\n disabledItem,\n readOnly,\n } = this;\n const innerLabelClasses = classMap({\n [`${prefix}--radio-button__label-text`]: true,\n [`${prefix}--visually-hidden`]: hideLabel,\n });\n return html`\n <input\n id=\"radio\"\n type=\"radio\"\n class=\"${prefix}--radio-button\"\n .checked=${checked}\n ?disabled=\"${disabledItem || disabled}\"\n ?required=${this.required}\n aria-readonly=\"${String(Boolean(readOnly))}\"\n name=${ifDefined(name)}\n value=${ifDefined(value)} />\n <label for=\"input\" class=\"${prefix}--radio-button__label\">\n <span class=\"${prefix}--radio-button__appearance\"></span>\n <span class=\"${innerLabelClasses}\">\n <slot> ${labelText} </slot>\n <slot name=\"ai-label\" @slotchange=\"${this._handleSlotChange}\"></slot>\n <slot name=\"slug\" @slotchange=\"${this._handleSlotChange}\"></slot\n ></span>\n </label>\n `;\n }\n\n /**\n * A selector that will return the slug item.\n *\n * remove in v12\n */\n static get slugItem() {\n return `${prefix}-slug`;\n }\n\n /**\n * A selector that will return the AI Label item.\n */\n static get aiLabelItem() {\n return `${prefix}-ai-label`;\n }\n\n /**\n * The name of the custom event fired after this radio button changes its checked state.\n */\n static get eventChange() {\n return `${prefix}-radio-button-changed`;\n }\n\n static shadowRootOptions = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true,\n };\n static styles = styles;\n}\n\nexport default CDSRadioButton;\n"],"names":["customElement"],"mappings":"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"}
1
+ {"version":3,"file":"radio-button.js","sources":["../../../src/components/radio-button/radio-button.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2019, 2024\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 { prefix } from '../../globals/settings';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport HostListener from '../../globals/decorators/host-listener';\nimport FocusMixin from '../../globals/mixins/focus';\nimport HostListenerMixin from '../../globals/mixins/host-listener';\nimport RadioGroupManager, {\n NAVIGATION_DIRECTION,\n ManagedRadioButtonDelegate,\n} from '../../globals/internal/radio-group-manager';\nimport { RADIO_BUTTON_LABEL_POSITION, RADIO_BUTTON_ORIENTATION } from './defs';\nimport styles from './radio-button.scss?lit';\nimport { carbonElement as customElement } from '../../globals/decorators/carbon-element';\n\nexport { RADIO_BUTTON_LABEL_POSITION };\n\n/**\n * Map of navigation direction by key for horizontal alignment.\n */\nconst navigationDirectionForKeyHorizontal = {\n ArrowLeft: NAVIGATION_DIRECTION.BACKWARD,\n Left: NAVIGATION_DIRECTION.BACKWARD, // IE\n ArrowRight: NAVIGATION_DIRECTION.FORWARD,\n Right: NAVIGATION_DIRECTION.FORWARD, // IE\n};\n\n/**\n * Map of navigation direction by key for vertical alignment.\n */\nconst navigationDirectionForKeyVertical = {\n ArrowUp: NAVIGATION_DIRECTION.BACKWARD,\n Up: NAVIGATION_DIRECTION.BACKWARD, // IE\n ArrowDown: NAVIGATION_DIRECTION.FORWARD,\n Down: NAVIGATION_DIRECTION.FORWARD, // IE\n};\n\n/**\n * The interface for `RadioGroupManager` for radio button.\n */\nclass RadioButtonDelegate implements ManagedRadioButtonDelegate {\n /**\n * The radio button to target.\n */\n private _radio: HTMLInputElement;\n\n constructor(radio: HTMLInputElement) {\n this._radio = radio;\n }\n\n get checked() {\n return this._radio.checked;\n }\n\n set checked(checked) {\n const { host } = this._radio.getRootNode() as ShadowRoot;\n const { eventChange } = host.constructor as typeof CDSRadioButton;\n (host as CDSRadioButton).checked = checked;\n this._radio.tabIndex = checked ? 0 : -1;\n host.dispatchEvent(\n new CustomEvent(eventChange, {\n bubbles: true,\n composed: true,\n detail: {\n checked,\n value: this._radio.value,\n name: this._radio.name,\n },\n })\n );\n }\n\n get tabIndex() {\n return this._radio.tabIndex;\n }\n\n set tabIndex(tabIndex) {\n this._radio.tabIndex = tabIndex;\n }\n\n get name() {\n return this._radio.name;\n }\n\n get disabled() {\n return this._radio.disabled;\n }\n\n compareDocumentPosition(other: RadioButtonDelegate) {\n return this._radio.compareDocumentPosition(other._radio);\n }\n\n focus() {\n this._radio.focus();\n }\n}\n\n/**\n * Radio button.\n *\n * @element cds-custom-radio-button\n * @fires cds-custom-radio-button-changed - The custom event fired after this radio button changes its checked state.\n */\n@customElement(`${prefix}-radio-button`)\nclass CDSRadioButton extends HostListenerMixin(FocusMixin(LitElement)) {\n /**\n * The radio group manager associated with the radio button.\n */\n private _manager: RadioGroupManager | null = null;\n\n /**\n * The interface for `RadioGroupManager` for radio button.\n */\n private _radioButtonDelegate!: RadioButtonDelegate;\n\n /**\n * The hidden radio button.\n */\n @query('input')\n private _inputNode!: HTMLInputElement;\n\n /**\n * Handles `click` event on this element.\n */\n @HostListener('click')\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- https://github.com/carbon-design-system/carbon/issues/20452\n // @ts-ignore: The decorator refers to this method but TS thinks this method is not referred to\n private _handleClick = (event) => {\n if (\n !(event.target as HTMLElement).matches(\n (this.constructor as typeof CDSRadioButton)?.aiLabelItem\n ) &&\n !(event.target as HTMLElement).matches(\n (this.constructor as typeof CDSRadioButton)?.slugItem\n )\n ) {\n const {\n disabled,\n _radioButtonDelegate: radioButtonDelegate,\n readOnly,\n } = this;\n if (readOnly) {\n event.preventDefault();\n return;\n }\n if (radioButtonDelegate && !disabled && !this.disabledItem) {\n this.checked = true;\n if (this._manager) {\n this._manager.select(radioButtonDelegate, this.readOnly);\n }\n this.dispatchEvent(\n new CustomEvent(\n (this.constructor as typeof CDSRadioButton).eventChange,\n {\n bubbles: true,\n composed: true,\n detail: {\n checked: this.checked,\n value: this.value,\n name: this.name,\n event,\n },\n }\n )\n );\n }\n this.dispatchEvent(\n new CustomEvent(\n (this.constructor as typeof CDSRadioButton).eventChange,\n {\n bubbles: true,\n composed: true,\n detail: {\n checked: this.checked,\n value: this.value,\n name: this.name,\n event,\n },\n }\n )\n );\n }\n };\n\n /**\n * Handles `keydown` event on this element.\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: The decorator refers to this method but TS thinks this method is not referred to\n private _handleKeydown = (event: KeyboardEvent) => {\n if (\n !(event.target as HTMLElement).matches(\n (this.constructor as typeof CDSRadioButton)?.aiLabelItem\n ) &&\n !(event.target as HTMLElement).matches(\n (this.constructor as typeof CDSRadioButton)?.slugItem\n )\n ) {\n const {\n orientation,\n _radioButtonDelegate: radioButtonDelegate,\n disabled,\n disabledItem,\n readOnly,\n } = this;\n const manager = this._manager;\n if (readOnly) {\n event.preventDefault();\n return;\n }\n if (radioButtonDelegate && manager && !disabled && !disabledItem) {\n const navigationDirectionForKey =\n orientation === RADIO_BUTTON_ORIENTATION.HORIZONTAL\n ? navigationDirectionForKeyHorizontal\n : navigationDirectionForKeyVertical;\n const navigationDirection = navigationDirectionForKey[event.key];\n if (navigationDirection) {\n manager.select(\n manager.navigate(radioButtonDelegate, navigationDirection),\n this.readOnly\n );\n }\n if (event.key === ' ' || event.key === 'Enter') {\n manager.select(radioButtonDelegate, this.readOnly);\n }\n }\n }\n };\n\n /**\n * Handles `slotchange` event.\n */\n protected _handleSlotChange({ target }: Event) {\n const hasContent = (target as HTMLSlotElement)\n .assignedNodes()\n .filter((elem) =>\n (elem as HTMLElement).matches !== undefined\n ? (elem as HTMLElement).matches(\n (this.constructor as typeof CDSRadioButton).aiLabelItem\n ) ||\n // remove reference to slug in v12\n (elem as HTMLElement).matches(\n (this.constructor as typeof CDSRadioButton).slugItem\n )\n : false\n );\n\n this._hasAILabel = Boolean(hasContent);\n const type = (hasContent[0] as HTMLElement).getAttribute('kind');\n (hasContent[0] as HTMLElement).setAttribute(\n 'size',\n type === 'inline' ? 'md' : 'mini'\n );\n this.requestUpdate();\n }\n\n /**\n * `true` if there is an AI Label.\n */\n protected _hasAILabel = false;\n\n /**\n * `true` if this radio button should be checked.\n */\n @property({ type: Boolean, reflect: true })\n checked = false;\n\n /**\n * `true` if the radio button is used in a data table\n */\n @property({ type: Boolean, reflect: true, attribute: 'data-table' })\n dataTable = false;\n\n /**\n * Specify whether the `<radio-button>` should be checked by default\n */\n @property({ type: Boolean, attribute: 'default-checked' })\n defaultChecked = false;\n\n /**\n * `true` if the radio button item should be disabled.\n */\n @property({ type: Boolean, reflect: true })\n disabledItem = false;\n\n /**\n * `true` if the radio button group should be disabled.\n */\n @property({ type: Boolean, reflect: true })\n disabled = false;\n\n /**\n * `true` if the label should be hidden.\n */\n @property({ type: Boolean, reflect: true, attribute: 'hide-label' })\n hideLabel = false;\n\n /**\n * Specify if the currently value is invalid.\n */\n @property({ type: Boolean, reflect: true })\n invalid = false;\n\n /**\n * Specify whether the control is currently in warning state\n */\n @property({ type: Boolean, reflect: true })\n warn = false;\n\n /**\n * Provide the text that is displayed when the control is in warning state\n */\n @property({ attribute: 'warn-text' })\n warnText = '';\n\n /**\n * The label position.\n */\n @property({ reflect: true, attribute: 'label-position' })\n labelPosition = RADIO_BUTTON_LABEL_POSITION.RIGHT;\n\n /**\n * The label text.\n */\n @property({ attribute: 'label-text' })\n labelText = '';\n\n /**\n * The `name` attribute for the `<input>` for selection.\n */\n @property()\n name!: string;\n\n /**\n * The orientation to lay out radio buttons.\n */\n @property({ reflect: true })\n orientation = RADIO_BUTTON_ORIENTATION.HORIZONTAL;\n\n /**\n * `true` if the radio button group should be disabled.\n */\n @property({ type: Boolean, reflect: true })\n readOnly = false;\n\n /**\n * `true` if the radio button is required.\n */\n @property({ type: Boolean, reflect: true })\n required = false;\n\n /**\n * The `value` attribute for the `<input>` for selection.\n */\n @property()\n value!: string;\n\n disconnectedCallback() {\n if (this._manager) {\n this._manager.delete(this._radioButtonDelegate);\n }\n super.disconnectedCallback();\n }\n\n firstUpdated() {\n this._radioButtonDelegate = new RadioButtonDelegate(this._inputNode);\n\n // If user hasn’t explicitly set `checked`, respect `defaultChecked`\n if (this.defaultChecked && this.checked === false) {\n this.checked = true;\n }\n }\n\n updated(changedProperties) {\n const {\n _hasAILabel: hasAILabel,\n _inputNode: inputNode,\n _radioButtonDelegate: radioButtonDelegate,\n name,\n disabled,\n disabledItem,\n readOnly,\n invalid,\n warn,\n } = this;\n\n // Normalize input props similar to useNormalizedInputProps in React\n const normalizedProps = {\n disabled: !readOnly && (disabled || disabledItem),\n invalid: !readOnly && !disabled && !disabledItem && invalid,\n warn: !readOnly && !disabled && !disabledItem && !invalid && warn,\n };\n\n if (changedProperties.has('checked') || changedProperties.has('name')) {\n if (!this._manager) {\n this._manager = RadioGroupManager.get(\n this.getRootNode({ composed: true }) as Document\n );\n }\n const { _manager: manager } = this;\n if (changedProperties.has('name')) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- https://github.com/carbon-design-system/carbon/issues/20452\n manager!.delete(radioButtonDelegate, changedProperties.get('name'));\n if (name) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- https://github.com/carbon-design-system/carbon/issues/20452\n manager!.add(radioButtonDelegate);\n }\n }\n // Disabled items should have tabIndex -1.\n inputNode.setAttribute(\n 'tabindex',\n !name ||\n !manager ||\n this.disabled ||\n this.disabledItem ||\n !manager.shouldBeFocusable(radioButtonDelegate)\n ? '-1'\n : '0'\n );\n }\n // Handle validation states based on normalized props\n if (\n changedProperties.has('invalid') ||\n changedProperties.has('warn') ||\n changedProperties.has('disabled') ||\n changedProperties.has('disabledItem') ||\n changedProperties.has('readOnly')\n ) {\n // Apply normalized validation states\n if (normalizedProps.invalid) {\n this.setAttribute('invalid', '');\n this.removeAttribute('warn');\n } else if (normalizedProps.warn) {\n this.setAttribute('warn', '');\n this.removeAttribute('invalid');\n } else {\n this.removeAttribute('invalid');\n this.removeAttribute('warn');\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- https://github.com/carbon-design-system/carbon/issues/20452\n hasAILabel\n ? this.setAttribute('ai-label', '')\n : this.removeAttribute('ai-label');\n }\n\n render() {\n const {\n checked,\n hideLabel,\n labelText,\n name,\n value,\n disabled,\n disabledItem,\n readOnly,\n invalid,\n warn,\n } = this;\n\n // Normalize input props similar to useNormalizedInputProps in React\n const normalizedProps = {\n disabled: !readOnly && (disabled || disabledItem),\n invalid: !readOnly && !disabled && !disabledItem && invalid,\n warn: !readOnly && !disabled && !disabledItem && !invalid && warn,\n };\n const innerLabelClasses = classMap({\n [`${prefix}--radio-button__label-text`]: true,\n [`${prefix}--visually-hidden`]: hideLabel,\n });\n return html`\n <input\n id=\"radio\"\n type=\"radio\"\n class=\"${prefix}--radio-button\"\n .checked=${checked}\n ?disabled=\"${disabledItem || disabled}\"\n ?required=${this.required}\n aria-readonly=\"${String(Boolean(readOnly))}\"\n name=${ifDefined(name)}\n value=${ifDefined(value)} />\n <label\n for=\"input\"\n class=\"${prefix}--radio-button__label ${normalizedProps.invalid\n ? `${prefix}--radio-button__label--invalid`\n : ''} ${normalizedProps.warn\n ? `${prefix}--radio-button__label--warn`\n : ''}\">\n <span class=\"${prefix}--radio-button__appearance\"></span>\n <span class=\"${innerLabelClasses}\">\n <slot> ${labelText} </slot>\n <slot name=\"ai-label\" @slotchange=\"${this._handleSlotChange}\"></slot>\n <slot name=\"slug\" @slotchange=\"${this._handleSlotChange}\"></slot\n ></span>\n </label>\n `;\n }\n\n /**\n * A selector that will return the slug item.\n *\n * remove in v12\n */\n static get slugItem() {\n return `${prefix}-slug`;\n }\n\n /**\n * A selector that will return the AI Label item.\n */\n static get aiLabelItem() {\n return `${prefix}-ai-label`;\n }\n\n /**\n * The name of the custom event fired after this radio button changes its checked state.\n */\n static get eventChange() {\n return `${prefix}-radio-button-changed`;\n }\n\n static shadowRootOptions = {\n ...LitElement.shadowRootOptions,\n delegatesFocus: true,\n };\n static styles = styles;\n}\n\nexport default CDSRadioButton;\n"],"names":["customElement"],"mappings":"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"}