@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.
- package/custom-elements.json +1225 -97
- package/dist/accordion.min.js +1 -1
- package/dist/code-snippet.min.js +7 -7
- package/dist/{collection-helpers-_CvqQaiX.js → collection-helpers-C5emLOnk.js} +1 -1
- package/dist/combo-box.min.js +5 -5
- package/dist/{content-switcher-item-VHI7iTTP.js → content-switcher-item-3fTDI2Aq.js} +1 -1
- package/dist/content-switcher.min.js +1 -1
- package/dist/data-table.min.js +1 -1
- package/dist/date-picker.min.js +1 -1
- package/dist/{dropdown-item-Pt_eWt66.js → dropdown-item-BO7AhHPd.js} +25 -25
- package/dist/dropdown.min.js +1 -1
- package/dist/file-uploader.min.js +1 -1
- package/dist/fluid-search.min.js +33 -0
- package/dist/fluid-select.min.js +30 -0
- package/dist/fluid-textarea.min.js +36 -0
- package/dist/icon-indicator.min.js +1 -1
- package/dist/inline-loading.min.js +1 -1
- package/dist/list.min.js +1 -1
- package/dist/loading.min.js +1 -1
- package/dist/menu.min.js +1 -1
- package/dist/modal.min.js +5 -5
- package/dist/multi-select.min.js +1 -1
- package/dist/overflow-menu.min.js +1 -1
- package/dist/pagination.min.js +1 -1
- package/dist/progress-indicator.min.js +1 -1
- package/dist/radio-button.min.js +10 -8
- package/dist/{search-BrKCrPl3.js → search-DhwzN9sI.js} +2 -1
- package/dist/search.min.js +4 -4
- package/dist/select-BIi12O8B.js +108 -0
- package/dist/select-item-Be7OL9mD.js +28 -0
- package/dist/select-skeleton-8uIIQzNt.js +31 -0
- package/dist/select.min.js +1 -4
- package/dist/structured-list.min.js +1 -1
- package/dist/tabs.min.js +1 -1
- package/dist/textarea.min.js +23 -15
- package/dist/time-picker.min.js +20 -20
- package/dist/ui-shell.min.js +2 -2
- package/es/components/combo-box/combo-box.d.ts +9 -2
- package/es/components/combo-box/combo-box.js +63 -6
- package/es/components/combo-box/combo-box.js.map +1 -1
- package/es/components/combo-box/combo-box.scss.js +1 -1
- package/es/components/data-table/data-table.scss.js +1 -1
- package/es/components/dropdown/dropdown.d.ts +8 -0
- package/es/components/dropdown/dropdown.js +29 -11
- package/es/components/dropdown/dropdown.js.map +1 -1
- package/es/components/dropdown/dropdown.scss.js +1 -1
- package/es/components/file-uploader/file-uploader.scss.js +1 -1
- package/es/components/fluid-search/fluid-search-skeleton.d.ts +17 -0
- package/es/components/fluid-search/fluid-search-skeleton.js +38 -0
- package/es/components/fluid-search/fluid-search-skeleton.js.map +1 -0
- package/es/components/fluid-search/fluid-search.d.ts +17 -0
- package/es/components/fluid-search/fluid-search.js +44 -0
- package/es/components/fluid-search/fluid-search.js.map +1 -0
- package/es/components/fluid-search/fluid-search.scss.js +13 -0
- package/es/components/fluid-search/fluid-search.scss.js.map +1 -0
- package/es/components/fluid-search/index.d.ts +8 -0
- package/es/components/fluid-search/index.js +10 -0
- package/es/components/fluid-search/index.js.map +1 -0
- package/es/components/fluid-select/fluid-select-skeleton.d.ts +17 -0
- package/es/components/fluid-select/fluid-select-skeleton.js +40 -0
- package/es/components/fluid-select/fluid-select-skeleton.js.map +1 -0
- package/es/components/fluid-select/fluid-select.d.ts +19 -0
- package/es/components/fluid-select/fluid-select.js +59 -0
- package/es/components/fluid-select/fluid-select.js.map +1 -0
- package/es/components/fluid-select/fluid-select.scss.js +13 -0
- package/es/components/fluid-select/fluid-select.scss.js.map +1 -0
- package/es/components/fluid-select/index.d.ts +8 -0
- package/es/components/fluid-select/index.js +10 -0
- package/es/components/fluid-select/index.js.map +1 -0
- package/es/components/fluid-textarea/fluid-textarea-skeleton.d.ts +17 -0
- package/es/components/fluid-textarea/fluid-textarea-skeleton.js +42 -0
- package/es/components/fluid-textarea/fluid-textarea-skeleton.js.map +1 -0
- package/es/components/fluid-textarea/fluid-textarea.d.ts +18 -0
- package/es/components/fluid-textarea/fluid-textarea.js +46 -0
- package/es/components/fluid-textarea/fluid-textarea.js.map +1 -0
- package/es/components/fluid-textarea/fluid-textarea.scss.js +13 -0
- package/es/components/fluid-textarea/fluid-textarea.scss.js.map +1 -0
- package/es/components/fluid-textarea/index.d.ts +8 -0
- package/es/components/fluid-textarea/index.js +10 -0
- package/es/components/fluid-textarea/index.js.map +1 -0
- package/es/components/inline-loading/inline-loading.scss.js +1 -1
- package/es/components/list/list.scss.js +1 -1
- package/es/components/loading/loading.scss.js +1 -1
- package/es/components/menu/menu.js +3 -1
- package/es/components/menu/menu.js.map +1 -1
- package/es/components/modal/modal.scss.js +1 -1
- package/es/components/multi-select/multi-select.scss.js +1 -1
- package/es/components/overflow-menu/overflow-menu-body.js +22 -10
- package/es/components/overflow-menu/overflow-menu-body.js.map +1 -1
- package/es/components/radio-button/radio-button-group.js +4 -2
- package/es/components/radio-button/radio-button-group.js.map +1 -1
- package/es/components/radio-button/radio-button.d.ts +8 -0
- package/es/components/radio-button/radio-button.js +53 -3
- package/es/components/radio-button/radio-button.js.map +1 -1
- package/es/components/radio-button/radio-button.scss.js +1 -1
- package/es/components/search/search-skeleton.js +2 -2
- package/es/components/search/search-skeleton.js.map +1 -1
- package/es/components/search/search.js +1 -0
- package/es/components/search/search.js.map +1 -1
- package/es/components/search/search.scss.js +1 -1
- package/es/components/select/select.d.ts +4 -0
- package/es/components/select/select.js +14 -1
- package/es/components/select/select.js.map +1 -1
- package/es/components/select/select.scss.js +1 -1
- package/es/components/textarea/textarea.d.ts +4 -0
- package/es/components/textarea/textarea.js +37 -11
- package/es/components/textarea/textarea.js.map +1 -1
- package/es/components/time-picker/time-picker.js +13 -8
- package/es/components/time-picker/time-picker.js.map +1 -1
- package/es/components/ui-shell/side-nav.scss.js +1 -1
- package/es-custom/components/combo-box/combo-box.d.ts +9 -2
- package/es-custom/components/combo-box/combo-box.js +63 -6
- package/es-custom/components/combo-box/combo-box.js.map +1 -1
- package/es-custom/components/combo-box/combo-box.scss.js +1 -1
- package/es-custom/components/data-table/data-table.scss.js +1 -1
- package/es-custom/components/dropdown/dropdown.d.ts +8 -0
- package/es-custom/components/dropdown/dropdown.js +29 -11
- package/es-custom/components/dropdown/dropdown.js.map +1 -1
- package/es-custom/components/dropdown/dropdown.scss.js +1 -1
- package/es-custom/components/file-uploader/file-uploader.scss.js +1 -1
- package/es-custom/components/fluid-search/fluid-search-skeleton.d.ts +17 -0
- package/es-custom/components/fluid-search/fluid-search-skeleton.js +38 -0
- package/es-custom/components/fluid-search/fluid-search-skeleton.js.map +1 -0
- package/es-custom/components/fluid-search/fluid-search.d.ts +17 -0
- package/es-custom/components/fluid-search/fluid-search.js +44 -0
- package/es-custom/components/fluid-search/fluid-search.js.map +1 -0
- package/es-custom/components/fluid-search/fluid-search.scss.js +13 -0
- package/es-custom/components/fluid-search/fluid-search.scss.js.map +1 -0
- package/es-custom/components/fluid-search/index.d.ts +8 -0
- package/es-custom/components/fluid-search/index.js +10 -0
- package/es-custom/components/fluid-search/index.js.map +1 -0
- package/es-custom/components/fluid-select/fluid-select-skeleton.d.ts +17 -0
- package/es-custom/components/fluid-select/fluid-select-skeleton.js +40 -0
- package/es-custom/components/fluid-select/fluid-select-skeleton.js.map +1 -0
- package/es-custom/components/fluid-select/fluid-select.d.ts +19 -0
- package/es-custom/components/fluid-select/fluid-select.js +59 -0
- package/es-custom/components/fluid-select/fluid-select.js.map +1 -0
- package/es-custom/components/fluid-select/fluid-select.scss.js +13 -0
- package/es-custom/components/fluid-select/fluid-select.scss.js.map +1 -0
- package/es-custom/components/fluid-select/index.d.ts +8 -0
- package/es-custom/components/fluid-select/index.js +10 -0
- package/es-custom/components/fluid-select/index.js.map +1 -0
- package/es-custom/components/fluid-textarea/fluid-textarea-skeleton.d.ts +17 -0
- package/es-custom/components/fluid-textarea/fluid-textarea-skeleton.js +42 -0
- package/es-custom/components/fluid-textarea/fluid-textarea-skeleton.js.map +1 -0
- package/es-custom/components/fluid-textarea/fluid-textarea.d.ts +18 -0
- package/es-custom/components/fluid-textarea/fluid-textarea.js +46 -0
- package/es-custom/components/fluid-textarea/fluid-textarea.js.map +1 -0
- package/es-custom/components/fluid-textarea/fluid-textarea.scss.js +13 -0
- package/es-custom/components/fluid-textarea/fluid-textarea.scss.js.map +1 -0
- package/es-custom/components/fluid-textarea/index.d.ts +8 -0
- package/es-custom/components/fluid-textarea/index.js +10 -0
- package/es-custom/components/fluid-textarea/index.js.map +1 -0
- package/es-custom/components/inline-loading/inline-loading.scss.js +1 -1
- package/es-custom/components/list/list.scss.js +1 -1
- package/es-custom/components/loading/loading.scss.js +1 -1
- package/es-custom/components/menu/menu.js +3 -1
- package/es-custom/components/menu/menu.js.map +1 -1
- package/es-custom/components/modal/modal.scss.js +1 -1
- package/es-custom/components/multi-select/multi-select.scss.js +1 -1
- package/es-custom/components/overflow-menu/overflow-menu-body.js +22 -10
- package/es-custom/components/overflow-menu/overflow-menu-body.js.map +1 -1
- package/es-custom/components/radio-button/radio-button-group.js +4 -2
- package/es-custom/components/radio-button/radio-button-group.js.map +1 -1
- package/es-custom/components/radio-button/radio-button.d.ts +8 -0
- package/es-custom/components/radio-button/radio-button.js +53 -3
- package/es-custom/components/radio-button/radio-button.js.map +1 -1
- package/es-custom/components/radio-button/radio-button.scss.js +1 -1
- package/es-custom/components/search/search-skeleton.js +2 -2
- package/es-custom/components/search/search-skeleton.js.map +1 -1
- package/es-custom/components/search/search.js +1 -0
- package/es-custom/components/search/search.js.map +1 -1
- package/es-custom/components/search/search.scss.js +1 -1
- package/es-custom/components/select/select.d.ts +4 -0
- package/es-custom/components/select/select.js +14 -1
- package/es-custom/components/select/select.js.map +1 -1
- package/es-custom/components/select/select.scss.js +1 -1
- package/es-custom/components/textarea/textarea.d.ts +4 -0
- package/es-custom/components/textarea/textarea.js +37 -11
- package/es-custom/components/textarea/textarea.js.map +1 -1
- package/es-custom/components/time-picker/time-picker.js +13 -8
- package/es-custom/components/time-picker/time-picker.js.map +1 -1
- package/es-custom/components/ui-shell/side-nav.scss.js +1 -1
- package/lib/components/combo-box/combo-box.d.ts +9 -2
- package/lib/components/dropdown/dropdown.d.ts +8 -0
- package/lib/components/fluid-search/fluid-search-skeleton.d.ts +17 -0
- package/lib/components/fluid-search/fluid-search.d.ts +17 -0
- package/lib/components/fluid-search/index.d.ts +8 -0
- package/lib/components/fluid-select/fluid-select-skeleton.d.ts +17 -0
- package/lib/components/fluid-select/fluid-select.d.ts +19 -0
- package/lib/components/fluid-select/index.d.ts +8 -0
- package/lib/components/fluid-textarea/fluid-textarea-skeleton.d.ts +17 -0
- package/lib/components/fluid-textarea/fluid-textarea.d.ts +18 -0
- package/lib/components/fluid-textarea/index.d.ts +8 -0
- package/lib/components/radio-button/radio-button.d.ts +8 -0
- package/lib/components/select/select.d.ts +4 -0
- package/lib/components/textarea/textarea.d.ts +4 -0
- package/package.json +6 -6
- package/scss/components/combo-box/combo-box.scss +82 -18
- package/scss/components/data-table/_table-core.scss +9 -9
- package/scss/components/data-table/_table-expandable.scss +7 -7
- package/scss/components/data-table/_table-selection.scss +3 -3
- package/scss/components/dropdown/dropdown.scss +2 -0
- package/scss/components/fluid-search/fluid-search.scss +55 -0
- package/scss/components/fluid-select/fluid-select.scss +58 -0
- package/scss/components/fluid-textarea/fluid-textarea.scss +16 -0
- package/scss/components/list/list.scss +1 -1
- package/scss/components/radio-button/radio-button.scss +9 -4
- package/scss/components/select/select.scss +1 -0
- package/telemetry.yml +9 -10
- 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":"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"}
|
|
@@ -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
|
|
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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"}
|