@ukic/web-components 2.0.0-alpha.122 → 2.0.0-alpha.125
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/cjs/core.cjs.js +1 -1
- package/dist/cjs/{helpers-9d4961dc.js → helpers-ea79c7b0.js} +41 -2
- package/dist/cjs/helpers-ea79c7b0.js.map +1 -0
- package/dist/cjs/ic-alert.cjs.entry.js +1 -1
- package/dist/cjs/ic-back-to-top.cjs.entry.js +1 -1
- package/dist/cjs/ic-breadcrumb.cjs.entry.js +1 -1
- package/dist/cjs/ic-breadcrumbs.cjs.entry.js +1 -1
- package/dist/cjs/ic-button_3.cjs.entry.js +2 -2
- package/dist/cjs/ic-button_3.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-card.cjs.entry.js +2 -2
- package/dist/cjs/ic-card.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-checkbox-group.cjs.entry.js +1 -1
- package/dist/cjs/ic-checkbox.cjs.entry.js +1 -1
- package/dist/cjs/ic-data-row.cjs.entry.js +1 -1
- package/dist/cjs/ic-divider.cjs.entry.js +1 -1
- package/dist/cjs/ic-footer-link-group.cjs.entry.js +1 -1
- package/dist/cjs/ic-footer-link.cjs.entry.js +1 -1
- package/dist/cjs/ic-footer.cjs.entry.js +1 -1
- package/dist/cjs/ic-hero.cjs.entry.js +3 -3
- package/dist/cjs/ic-hero.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-input-component-container_3.cjs.entry.js +78 -24
- package/dist/cjs/ic-input-component-container_3.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-input-label_2.cjs.entry.js +1 -1
- package/dist/cjs/ic-link.cjs.entry.js +1 -1
- package/dist/cjs/ic-navigation-button.cjs.entry.js +1 -1
- package/dist/cjs/ic-navigation-group.cjs.entry.js +1 -1
- package/dist/cjs/ic-navigation-item.cjs.entry.js +1 -1
- package/dist/cjs/ic-navigation-menu.cjs.entry.js +1 -1
- package/dist/cjs/ic-page-header.cjs.entry.js +1 -1
- package/dist/cjs/ic-radio-group.cjs.entry.js +1 -1
- package/dist/cjs/ic-radio-option.cjs.entry.js +1 -1
- package/dist/cjs/ic-search-bar.cjs.entry.js +3 -5
- package/dist/cjs/ic-search-bar.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-select.cjs.entry.js +216 -23
- package/dist/cjs/ic-select.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-side-navigation.cjs.entry.js +1 -1
- package/dist/cjs/ic-status-tag.cjs.entry.js +1 -1
- package/dist/cjs/ic-step.cjs.entry.js +1 -1
- package/dist/cjs/ic-stepper.cjs.entry.js +1 -1
- package/dist/cjs/ic-switch.cjs.entry.js +1 -1
- package/dist/cjs/ic-tab-list.cjs.entry.js +1 -1
- package/dist/cjs/ic-tab-panel.cjs.entry.js +1 -1
- package/dist/cjs/ic-tab.cjs.entry.js +1 -1
- package/dist/cjs/ic-text-field.cjs.entry.js +1 -1
- package/dist/cjs/ic-theme.cjs.entry.js +1 -1
- package/dist/cjs/ic-top-navigation.cjs.entry.js +1 -1
- package/dist/cjs/ic-typography.cjs.entry.js +1 -1
- package/dist/cjs/ic-typography.cjs.entry.js.map +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/collection/components/ic-button/ic-button.css +0 -6
- package/dist/collection/components/ic-card/ic-card.js +1 -1
- package/dist/collection/components/ic-card/ic-card.js.map +1 -1
- package/dist/collection/components/ic-hero/ic-hero.css +5 -0
- package/dist/collection/components/ic-hero/ic-hero.js +1 -1
- package/dist/collection/components/ic-hero/ic-hero.js.map +1 -1
- package/dist/collection/components/ic-input-component-container/ic-input-component-container.css +4 -3
- package/dist/collection/components/ic-menu/ic-menu.css +3 -2
- package/dist/collection/components/ic-menu/ic-menu.js +78 -21
- package/dist/collection/components/ic-menu/ic-menu.js.map +1 -1
- package/dist/collection/components/ic-menu/ic-menu.types.js.map +1 -1
- package/dist/collection/components/ic-search-bar/ic-search-bar.css +6 -0
- package/dist/collection/components/ic-search-bar/ic-search-bar.js +2 -4
- package/dist/collection/components/ic-search-bar/ic-search-bar.js.map +1 -1
- package/dist/collection/components/ic-select/ic-select.css +70 -9
- package/dist/collection/components/ic-select/ic-select.js +337 -24
- package/dist/collection/components/ic-select/ic-select.js.map +1 -1
- package/dist/collection/components/ic-typography/ic-typography.css +11 -4
- package/dist/collection/components/ic-typography/ic-typography.js +1 -1
- package/dist/collection/components/ic-typography/ic-typography.js.map +1 -1
- package/dist/collection/utils/helpers.js +39 -1
- package/dist/collection/utils/helpers.js.map +1 -1
- package/dist/collection/utils/types.js.map +1 -1
- package/dist/components/helpers.js +40 -2
- package/dist/components/helpers.js.map +1 -1
- package/dist/components/ic-button2.js +2 -2
- package/dist/components/ic-button2.js.map +1 -1
- package/dist/components/ic-card.js +1 -1
- package/dist/components/ic-card.js.map +1 -1
- package/dist/components/ic-hero.js +2 -2
- package/dist/components/ic-hero.js.map +1 -1
- package/dist/components/ic-input-component-container2.js +2 -2
- package/dist/components/ic-input-component-container2.js.map +1 -1
- package/dist/components/ic-input-label2.js +1 -1
- package/dist/components/ic-input-validation2.js +1 -1
- package/dist/components/ic-link2.js +1 -1
- package/dist/components/ic-menu2.js +76 -22
- package/dist/components/ic-menu2.js.map +1 -1
- package/dist/components/ic-navigation-menu2.js +1 -1
- package/dist/components/ic-search-bar.js +3 -5
- package/dist/components/ic-search-bar.js.map +1 -1
- package/dist/components/ic-select.js +226 -23
- package/dist/components/ic-select.js.map +1 -1
- package/dist/components/ic-side-navigation.js +1 -1
- package/dist/components/ic-tab-list.js +1 -1
- package/dist/components/ic-text-field2.js +1 -1
- package/dist/components/ic-theme.js +1 -1
- package/dist/components/ic-top-navigation.js +1 -1
- package/dist/components/ic-typography2.js +1 -1
- package/dist/components/ic-typography2.js.map +1 -1
- package/dist/core/core.css +1 -1
- package/dist/core/core.esm.js +1 -1
- package/dist/core/core.esm.js.map +1 -1
- package/dist/core/{p-8af2a343.entry.js → p-01450166.entry.js} +2 -2
- package/dist/core/{p-8af2a343.entry.js.map → p-01450166.entry.js.map} +0 -0
- package/dist/core/{p-016fcce8.entry.js → p-01a17304.entry.js} +2 -2
- package/dist/core/{p-016fcce8.entry.js.map → p-01a17304.entry.js.map} +0 -0
- package/dist/core/{p-5e0b88fa.entry.js → p-08239789.entry.js} +2 -2
- package/dist/core/{p-5e0b88fa.entry.js.map → p-08239789.entry.js.map} +0 -0
- package/dist/core/{p-44af91df.entry.js → p-09c0cd28.entry.js} +2 -2
- package/dist/core/{p-44af91df.entry.js.map → p-09c0cd28.entry.js.map} +0 -0
- package/dist/core/{p-44355e34.entry.js → p-0cf51da5.entry.js} +2 -2
- package/dist/core/{p-44355e34.entry.js.map → p-0cf51da5.entry.js.map} +0 -0
- package/dist/core/{p-bbe0b521.entry.js → p-10531d9a.entry.js} +2 -2
- package/dist/core/{p-bbe0b521.entry.js.map → p-10531d9a.entry.js.map} +0 -0
- package/dist/core/p-14ba2f18.js +2 -0
- package/dist/core/p-14ba2f18.js.map +1 -0
- package/dist/core/{p-0d4ac3c9.entry.js → p-211465cf.entry.js} +2 -2
- package/dist/core/{p-0d4ac3c9.entry.js.map → p-211465cf.entry.js.map} +0 -0
- package/dist/core/{p-13854b65.entry.js → p-2c687b76.entry.js} +2 -2
- package/dist/core/{p-13854b65.entry.js.map → p-2c687b76.entry.js.map} +0 -0
- package/dist/core/p-2d5824f1.entry.js +2 -0
- package/dist/core/p-2d5824f1.entry.js.map +1 -0
- package/dist/core/{p-17420c90.entry.js → p-34e5ee10.entry.js} +2 -2
- package/dist/core/{p-17420c90.entry.js.map → p-34e5ee10.entry.js.map} +0 -0
- package/dist/core/{p-17f3a2bd.entry.js → p-35b91376.entry.js} +2 -2
- package/dist/core/{p-17f3a2bd.entry.js.map → p-35b91376.entry.js.map} +0 -0
- package/dist/core/{p-7152788d.entry.js → p-36e9f6ff.entry.js} +2 -2
- package/dist/core/{p-7152788d.entry.js.map → p-36e9f6ff.entry.js.map} +0 -0
- package/dist/core/{p-85a32ec7.entry.js → p-3a7725ed.entry.js} +2 -2
- package/dist/core/{p-85a32ec7.entry.js.map → p-3a7725ed.entry.js.map} +0 -0
- package/dist/core/{p-85436343.entry.js → p-3d95b097.entry.js} +2 -2
- package/dist/core/{p-85436343.entry.js.map → p-3d95b097.entry.js.map} +0 -0
- package/dist/core/p-40a17d61.entry.js +2 -0
- package/dist/core/p-40a17d61.entry.js.map +1 -0
- package/dist/core/{p-a3df537f.entry.js → p-41dab885.entry.js} +2 -2
- package/dist/core/{p-a3df537f.entry.js.map → p-41dab885.entry.js.map} +0 -0
- package/dist/core/{p-ed1d8712.entry.js → p-42876f02.entry.js} +2 -2
- package/dist/core/{p-ed1d8712.entry.js.map → p-42876f02.entry.js.map} +0 -0
- package/dist/core/{p-bddb885a.entry.js → p-483ba0f6.entry.js} +2 -2
- package/dist/core/{p-bddb885a.entry.js.map → p-483ba0f6.entry.js.map} +0 -0
- package/dist/core/{p-bdd2f166.entry.js → p-49831676.entry.js} +2 -2
- package/dist/core/{p-bdd2f166.entry.js.map → p-49831676.entry.js.map} +0 -0
- package/dist/core/p-55a8f5b6.entry.js +2 -0
- package/dist/core/p-55a8f5b6.entry.js.map +1 -0
- package/dist/core/{p-7ed79493.entry.js → p-5928296a.entry.js} +2 -2
- package/dist/core/p-5928296a.entry.js.map +1 -0
- package/dist/core/{p-4b1b46f5.entry.js → p-66800ec4.entry.js} +2 -2
- package/dist/core/p-66800ec4.entry.js.map +1 -0
- package/dist/core/{p-dc79694a.entry.js → p-7c207056.entry.js} +2 -2
- package/dist/core/{p-dc79694a.entry.js.map → p-7c207056.entry.js.map} +0 -0
- package/dist/core/{p-3b9d4007.entry.js → p-7f27efda.entry.js} +2 -2
- package/dist/core/{p-3b9d4007.entry.js.map → p-7f27efda.entry.js.map} +0 -0
- package/dist/core/{p-263018da.entry.js → p-87fc80f1.entry.js} +2 -2
- package/dist/core/{p-263018da.entry.js.map → p-87fc80f1.entry.js.map} +0 -0
- package/dist/core/{p-ea93611e.entry.js → p-886e7a24.entry.js} +2 -2
- package/dist/core/{p-ea93611e.entry.js.map → p-886e7a24.entry.js.map} +0 -0
- package/dist/core/{p-012dc33c.entry.js → p-889744b7.entry.js} +2 -2
- package/dist/core/{p-012dc33c.entry.js.map → p-889744b7.entry.js.map} +0 -0
- package/dist/core/{p-836c93b1.entry.js → p-92cc098f.entry.js} +2 -2
- package/dist/core/{p-836c93b1.entry.js.map → p-92cc098f.entry.js.map} +0 -0
- package/dist/core/{p-a968ff18.entry.js → p-961c9038.entry.js} +2 -2
- package/dist/core/{p-a968ff18.entry.js.map → p-961c9038.entry.js.map} +0 -0
- package/dist/core/{p-c09e9589.entry.js → p-9753e5f2.entry.js} +2 -2
- package/dist/core/{p-c09e9589.entry.js.map → p-9753e5f2.entry.js.map} +0 -0
- package/dist/core/{p-7f6ba60a.entry.js → p-a334ed34.entry.js} +2 -2
- package/dist/core/{p-7f6ba60a.entry.js.map → p-a334ed34.entry.js.map} +0 -0
- package/dist/core/p-b70f2538.entry.js +2 -0
- package/dist/core/p-b70f2538.entry.js.map +1 -0
- package/dist/core/{p-d198ae1f.entry.js → p-bbff1667.entry.js} +2 -2
- package/dist/core/{p-d198ae1f.entry.js.map → p-bbff1667.entry.js.map} +0 -0
- package/dist/core/{p-d10ce0a7.entry.js → p-c0bfb272.entry.js} +2 -2
- package/dist/core/{p-d10ce0a7.entry.js.map → p-c0bfb272.entry.js.map} +0 -0
- package/dist/core/{p-4fba6cae.entry.js → p-cd14a9dc.entry.js} +2 -2
- package/dist/core/{p-4fba6cae.entry.js.map → p-cd14a9dc.entry.js.map} +0 -0
- package/dist/core/{p-4cf60a22.entry.js → p-d7af7446.entry.js} +2 -2
- package/dist/core/{p-4cf60a22.entry.js.map → p-d7af7446.entry.js.map} +0 -0
- package/dist/core/{p-5d3dd182.entry.js → p-e2304886.entry.js} +2 -2
- package/dist/core/{p-5d3dd182.entry.js.map → p-e2304886.entry.js.map} +0 -0
- package/dist/core/p-f90ce9ca.entry.js +2 -0
- package/dist/core/p-f90ce9ca.entry.js.map +1 -0
- package/dist/esm/core.js +1 -1
- package/dist/esm/{helpers-db00eae1.js → helpers-63cb8828.js} +41 -3
- package/dist/esm/helpers-63cb8828.js.map +1 -0
- package/dist/esm/ic-alert.entry.js +1 -1
- package/dist/esm/ic-back-to-top.entry.js +1 -1
- package/dist/esm/ic-breadcrumb.entry.js +1 -1
- package/dist/esm/ic-breadcrumbs.entry.js +1 -1
- package/dist/esm/ic-button_3.entry.js +2 -2
- package/dist/esm/ic-button_3.entry.js.map +1 -1
- package/dist/esm/ic-card.entry.js +2 -2
- package/dist/esm/ic-card.entry.js.map +1 -1
- package/dist/esm/ic-checkbox-group.entry.js +1 -1
- package/dist/esm/ic-checkbox.entry.js +1 -1
- package/dist/esm/ic-data-row.entry.js +1 -1
- package/dist/esm/ic-divider.entry.js +1 -1
- package/dist/esm/ic-footer-link-group.entry.js +1 -1
- package/dist/esm/ic-footer-link.entry.js +1 -1
- package/dist/esm/ic-footer.entry.js +1 -1
- package/dist/esm/ic-hero.entry.js +3 -3
- package/dist/esm/ic-hero.entry.js.map +1 -1
- package/dist/esm/ic-input-component-container_3.entry.js +78 -24
- package/dist/esm/ic-input-component-container_3.entry.js.map +1 -1
- package/dist/esm/ic-input-label_2.entry.js +1 -1
- package/dist/esm/ic-link.entry.js +1 -1
- package/dist/esm/ic-navigation-button.entry.js +1 -1
- package/dist/esm/ic-navigation-group.entry.js +1 -1
- package/dist/esm/ic-navigation-item.entry.js +1 -1
- package/dist/esm/ic-navigation-menu.entry.js +1 -1
- package/dist/esm/ic-page-header.entry.js +1 -1
- package/dist/esm/ic-radio-group.entry.js +1 -1
- package/dist/esm/ic-radio-option.entry.js +1 -1
- package/dist/esm/ic-search-bar.entry.js +3 -5
- package/dist/esm/ic-search-bar.entry.js.map +1 -1
- package/dist/esm/ic-select.entry.js +216 -23
- package/dist/esm/ic-select.entry.js.map +1 -1
- package/dist/esm/ic-side-navigation.entry.js +1 -1
- package/dist/esm/ic-status-tag.entry.js +1 -1
- package/dist/esm/ic-step.entry.js +1 -1
- package/dist/esm/ic-stepper.entry.js +1 -1
- package/dist/esm/ic-switch.entry.js +1 -1
- package/dist/esm/ic-tab-list.entry.js +1 -1
- package/dist/esm/ic-tab-panel.entry.js +1 -1
- package/dist/esm/ic-tab.entry.js +1 -1
- package/dist/esm/ic-text-field.entry.js +1 -1
- package/dist/esm/ic-theme.entry.js +1 -1
- package/dist/esm/ic-top-navigation.entry.js +1 -1
- package/dist/esm/ic-typography.entry.js +1 -1
- package/dist/esm/ic-typography.entry.js.map +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/types/components/ic-menu/ic-menu.d.ts +2 -0
- package/dist/types/components/ic-menu/ic-menu.types.d.ts +1 -0
- package/dist/types/components/ic-select/ic-select.d.ts +44 -2
- package/dist/types/components/ic-typography/ic-typography.d.ts +1 -1
- package/dist/types/components.d.ts +53 -5
- package/dist/types/utils/helpers.d.ts +11 -2
- package/dist/types/utils/types.d.ts +1 -0
- package/hydrate/index.js +348 -55
- package/package.json +3 -3
- package/README.md +0 -8
- package/dist/cjs/helpers-9d4961dc.js.map +0 -1
- package/dist/core/p-16a81e12.entry.js +0 -2
- package/dist/core/p-16a81e12.entry.js.map +0 -1
- package/dist/core/p-22eb7fc8.entry.js +0 -2
- package/dist/core/p-22eb7fc8.entry.js.map +0 -1
- package/dist/core/p-4b1b46f5.entry.js.map +0 -1
- package/dist/core/p-6238313f.entry.js +0 -2
- package/dist/core/p-6238313f.entry.js.map +0 -1
- package/dist/core/p-7ed79493.entry.js.map +0 -1
- package/dist/core/p-856d9516.entry.js +0 -2
- package/dist/core/p-856d9516.entry.js.map +0 -1
- package/dist/core/p-8a677ff1.entry.js +0 -2
- package/dist/core/p-8a677ff1.entry.js.map +0 -1
- package/dist/core/p-e5a09372.js +0 -2
- package/dist/core/p-e5a09372.js.map +0 -1
- package/dist/esm/helpers-db00eae1.js.map +0 -1
@@ -1,5 +1,5 @@
|
|
1
1
|
import { Host, h, } from "@stencil/core";
|
2
|
-
import { getInputDescribedByText, getLabelFromValue, hasValidationStatus, inheritAttributes, onComponentRequiredPropUndefined, renderHiddenInput, isMobileOrTablet, } from "../../utils/helpers";
|
2
|
+
import { getInputDescribedByText, getLabelFromValue, hasValidationStatus, inheritAttributes, onComponentRequiredPropUndefined, renderHiddenInput, isMobileOrTablet, getFilteredMenuOptions, } from "../../utils/helpers";
|
3
3
|
import { IC_INHERITED_ARIA } from "../../utils/constants";
|
4
4
|
import { IcInformationStatus, IcThemeForegroundEnum, } from "../../utils/types";
|
5
5
|
import Expand from "./assets/Expand.svg";
|
@@ -10,6 +10,23 @@ export class Select {
|
|
10
10
|
this.inputId = `ic-select-input-${inputIds++}`;
|
11
11
|
this.menuId = `${this.inputId}-menu`;
|
12
12
|
this.inheritedAttributes = {};
|
13
|
+
this.isMenuEnabled = () => {
|
14
|
+
return (((this.searchableSelectInputValue === null ||
|
15
|
+
this.searchableSelectInputValue === "") &&
|
16
|
+
this.charactersUntilSuggestions === 0) ||
|
17
|
+
(this.searchableSelectInputValue &&
|
18
|
+
this.searchableSelectInputValue.length >=
|
19
|
+
this.charactersUntilSuggestions));
|
20
|
+
};
|
21
|
+
this.setOptionsValuesFromLabels = () => {
|
22
|
+
if (this.options.length > 0) {
|
23
|
+
this.options.map((option) => {
|
24
|
+
if (!option.value) {
|
25
|
+
option.value = option.label;
|
26
|
+
}
|
27
|
+
});
|
28
|
+
}
|
29
|
+
};
|
13
30
|
this.setTextColor = () => {
|
14
31
|
if (this.nativeSelectElement.selectedIndex === 0) {
|
15
32
|
this.nativeSelectElement.className = "placeholder";
|
@@ -18,18 +35,53 @@ export class Select {
|
|
18
35
|
this.nativeSelectElement.className = "select-option-selected";
|
19
36
|
}
|
20
37
|
};
|
38
|
+
this.setMenuChange = (open) => {
|
39
|
+
if (this.open !== open) {
|
40
|
+
this.open = open;
|
41
|
+
}
|
42
|
+
};
|
21
43
|
this.getLabelFromValue = (value) => {
|
22
44
|
return getLabelFromValue(value, this.options);
|
23
45
|
};
|
46
|
+
this.getValueFromLabel = (label) => {
|
47
|
+
var _a;
|
48
|
+
const value = (_a = this.options.find((option) => option.label === label)) === null || _a === void 0 ? void 0 : _a.value;
|
49
|
+
return value;
|
50
|
+
};
|
51
|
+
this.getFilteredChildMenuOptions = (option) => {
|
52
|
+
let children = option.children;
|
53
|
+
children = getFilteredMenuOptions(option.children, this.includeDescriptionsInSearch, this.searchableSelectInputValue, this.searchMatchPosition);
|
54
|
+
const newOption = Object.assign({}, option);
|
55
|
+
newOption.children = children;
|
56
|
+
return newOption;
|
57
|
+
};
|
24
58
|
this.handleNativeSelectChange = () => {
|
25
59
|
this.icChange.emit({ value: this.nativeSelectElement.value });
|
26
60
|
this.setTextColor();
|
27
61
|
};
|
28
62
|
this.handleCustomSelectChange = (event) => {
|
63
|
+
if (this.searchable && event.detail.label === this.emptyOptionListText) {
|
64
|
+
this.searchableSelectElement.focus();
|
65
|
+
return;
|
66
|
+
}
|
67
|
+
if (this.searchable) {
|
68
|
+
this.searchableSelectInputValue = this.getLabelFromValue(event.detail.value);
|
69
|
+
}
|
70
|
+
this.ariaActiveDescendant = event.detail.optionId;
|
29
71
|
this.icChange.emit({ value: event.detail.value });
|
30
72
|
};
|
31
73
|
this.handleMenuChange = (event) => {
|
32
74
|
this.open = event.detail.open;
|
75
|
+
this.searchable && this.handleFocusIndicatorDisplay();
|
76
|
+
};
|
77
|
+
this.handleFocusIndicatorDisplay = () => {
|
78
|
+
const focusIndicator = this.host.shadowRoot.querySelector(".focus-indicator");
|
79
|
+
if (this.open) {
|
80
|
+
focusIndicator.classList.add("focus-indicator-enabled");
|
81
|
+
}
|
82
|
+
else {
|
83
|
+
focusIndicator.classList.remove("focus-indicator-enabled");
|
84
|
+
}
|
33
85
|
};
|
34
86
|
this.handleMouseDown = (event) => {
|
35
87
|
if (!this.open) {
|
@@ -37,17 +89,52 @@ export class Select {
|
|
37
89
|
}
|
38
90
|
};
|
39
91
|
this.handleClick = (event) => {
|
40
|
-
|
92
|
+
this.noOptions = null;
|
93
|
+
this.menu.options = this.options;
|
94
|
+
if (event.detail !== 0 && this.isMenuEnabled()) {
|
41
95
|
this.menu.handleClickOpen();
|
42
96
|
}
|
43
97
|
};
|
98
|
+
this.handleExpandIconMouseDown = (event) => {
|
99
|
+
if (!this.disabled) {
|
100
|
+
event.preventDefault();
|
101
|
+
this.searchableSelectElement.focus();
|
102
|
+
this.handleClick(event);
|
103
|
+
}
|
104
|
+
};
|
44
105
|
this.handleClear = (event) => {
|
45
106
|
event.stopPropagation();
|
107
|
+
this.noOptions = null;
|
46
108
|
this.icChange.emit({ value: null });
|
47
|
-
this.
|
109
|
+
if (this.searchable) {
|
110
|
+
this.searchableSelectElement.value = null;
|
111
|
+
this.searchableSelectInputValue = null;
|
112
|
+
this.menu.options = this.options;
|
113
|
+
this.searchableSelectElement.focus();
|
114
|
+
if (!this.isMenuEnabled()) {
|
115
|
+
this.setMenuChange(false);
|
116
|
+
}
|
117
|
+
}
|
118
|
+
else {
|
119
|
+
this.customSelectElement.focus();
|
120
|
+
}
|
48
121
|
};
|
49
122
|
this.handleKeyDown = (event) => {
|
50
|
-
|
123
|
+
event.cancelBubble = true;
|
124
|
+
if (!this.open) {
|
125
|
+
this.noOptions = null;
|
126
|
+
this.menu.options = this.options;
|
127
|
+
}
|
128
|
+
if (this.open && event.key === "Enter") {
|
129
|
+
this.setMenuChange(false);
|
130
|
+
}
|
131
|
+
else {
|
132
|
+
if (!((event.key === "ArrowDown" || event.key === "ArrowUp") &&
|
133
|
+
this.noOptions !== null) &&
|
134
|
+
this.isMenuEnabled()) {
|
135
|
+
this.menu.handleKeyboardOpen(event);
|
136
|
+
}
|
137
|
+
}
|
51
138
|
};
|
52
139
|
this.handleClearButtonFocus = () => {
|
53
140
|
this.clearButtonFocused = true;
|
@@ -55,10 +142,82 @@ export class Select {
|
|
55
142
|
this.handleClearButtonBlur = () => {
|
56
143
|
this.clearButtonFocused = false;
|
57
144
|
};
|
145
|
+
this.handleSearchableSelectInput = (event) => {
|
146
|
+
this.searchableSelectInputValue = event.target.value;
|
147
|
+
if (this.getValueFromLabel(this.searchableSelectInputValue) === undefined) {
|
148
|
+
this.icChange.emit({ value: null });
|
149
|
+
}
|
150
|
+
if (this.isMenuEnabled()) {
|
151
|
+
this.setMenuChange(true);
|
152
|
+
}
|
153
|
+
else {
|
154
|
+
this.setMenuChange(false);
|
155
|
+
}
|
156
|
+
const options = [...this.options];
|
157
|
+
let isGrouped = false;
|
158
|
+
let newFilteredOptions = [];
|
159
|
+
options.map((option) => {
|
160
|
+
if (option.children)
|
161
|
+
isGrouped = true;
|
162
|
+
});
|
163
|
+
const menuOptionsFiltered = getFilteredMenuOptions(options, this.includeDescriptionsInSearch, this.searchableSelectInputValue, this.searchMatchPosition);
|
164
|
+
if (!isGrouped) {
|
165
|
+
newFilteredOptions = menuOptionsFiltered;
|
166
|
+
}
|
167
|
+
else {
|
168
|
+
options.map((option) => {
|
169
|
+
if (this.includeGroupTitlesInSearch) {
|
170
|
+
if (menuOptionsFiltered.indexOf(option) !== -1) {
|
171
|
+
newFilteredOptions.push(option);
|
172
|
+
}
|
173
|
+
else {
|
174
|
+
newFilteredOptions.push(this.getFilteredChildMenuOptions(option));
|
175
|
+
}
|
176
|
+
}
|
177
|
+
else {
|
178
|
+
newFilteredOptions.push(this.getFilteredChildMenuOptions(option));
|
179
|
+
}
|
180
|
+
});
|
181
|
+
}
|
182
|
+
let noChildOptionsWhenFiltered = false;
|
183
|
+
if (isGrouped) {
|
184
|
+
noChildOptionsWhenFiltered = true;
|
185
|
+
newFilteredOptions.map((option) => {
|
186
|
+
if (option.children.length > 0) {
|
187
|
+
noChildOptionsWhenFiltered = false;
|
188
|
+
}
|
189
|
+
});
|
190
|
+
}
|
191
|
+
const noOptions = [{ label: this.emptyOptionListText, value: "" }];
|
192
|
+
if (newFilteredOptions.length > 0 && !noChildOptionsWhenFiltered) {
|
193
|
+
this.noOptions = null;
|
194
|
+
this.filteredOptions = newFilteredOptions;
|
195
|
+
}
|
196
|
+
else {
|
197
|
+
this.noOptions = noOptions;
|
198
|
+
this.filteredOptions = this.noOptions;
|
199
|
+
}
|
200
|
+
this.debounceAriaLiveUpdate();
|
201
|
+
};
|
202
|
+
this.updateSearchableSelectResultAriaLive = () => {
|
203
|
+
const searchableSelectResultsStatusEl = this.host.shadowRoot.querySelector(".searchable-select-results-status");
|
204
|
+
if (this.noOptions !== null) {
|
205
|
+
searchableSelectResultsStatusEl.innerText = this.emptyOptionListText;
|
206
|
+
}
|
207
|
+
else {
|
208
|
+
searchableSelectResultsStatusEl.innerText = "";
|
209
|
+
}
|
210
|
+
};
|
58
211
|
this.onFocus = () => {
|
59
212
|
this.icFocus.emit();
|
60
213
|
};
|
61
|
-
this.onBlur = () => {
|
214
|
+
this.onBlur = (event) => {
|
215
|
+
if (this.searchable &&
|
216
|
+
event.relatedTarget !== this.menu &&
|
217
|
+
!(this.clearButton && event.relatedTarget === this.clearButton)) {
|
218
|
+
this.setMenuChange(false);
|
219
|
+
this.handleFocusIndicatorDisplay();
|
220
|
+
}
|
62
221
|
this.icBlur.emit();
|
63
222
|
};
|
64
223
|
this.label = undefined;
|
@@ -76,8 +235,22 @@ export class Select {
|
|
76
235
|
this.value = undefined;
|
77
236
|
this.name = this.inputId;
|
78
237
|
this.showClearButton = false;
|
238
|
+
this.searchable = false;
|
239
|
+
this.includeDescriptionsInSearch = false;
|
240
|
+
this.includeGroupTitlesInSearch = false;
|
241
|
+
this.searchMatchPosition = "anywhere";
|
242
|
+
this.charactersUntilSuggestions = 0;
|
243
|
+
this.emptyOptionListText = "No results found";
|
79
244
|
this.open = false;
|
80
245
|
this.clearButtonFocused = false;
|
246
|
+
this.searchableSelectInputValue = null;
|
247
|
+
this.filteredOptions = this.options;
|
248
|
+
this.ariaActiveDescendant = undefined;
|
249
|
+
this.noOptions = null;
|
250
|
+
}
|
251
|
+
watchOptionsHandler() {
|
252
|
+
this.setOptionsValuesFromLabels();
|
253
|
+
this.filteredOptions = this.options;
|
81
254
|
}
|
82
255
|
/**
|
83
256
|
* Sets focus on the input box.
|
@@ -89,6 +262,15 @@ export class Select {
|
|
89
262
|
else if (this.customSelectElement) {
|
90
263
|
this.customSelectElement.focus();
|
91
264
|
}
|
265
|
+
else if (this.searchableSelectElement) {
|
266
|
+
this.searchableSelectElement.focus();
|
267
|
+
}
|
268
|
+
}
|
269
|
+
debounceAriaLiveUpdate() {
|
270
|
+
clearTimeout(this.debounce);
|
271
|
+
window.setTimeout(() => {
|
272
|
+
this.updateSearchableSelectResultAriaLive();
|
273
|
+
}, 800);
|
92
274
|
}
|
93
275
|
componentWillLoad() {
|
94
276
|
this.inheritedAttributes = inheritAttributes(this.host, [
|
@@ -96,13 +278,7 @@ export class Select {
|
|
96
278
|
"tabindex",
|
97
279
|
"title",
|
98
280
|
]);
|
99
|
-
|
100
|
-
this.options.map((option) => {
|
101
|
-
if (!option.value) {
|
102
|
-
option.value = option.label;
|
103
|
-
}
|
104
|
-
});
|
105
|
-
}
|
281
|
+
this.setOptionsValuesFromLabels();
|
106
282
|
}
|
107
283
|
componentDidRender() {
|
108
284
|
if (this.nativeSelectElement && !this.disabled) {
|
@@ -113,32 +289,46 @@ export class Select {
|
|
113
289
|
onComponentRequiredPropUndefined([{ prop: this.label, propName: "label" }], "Select");
|
114
290
|
}
|
115
291
|
render() {
|
116
|
-
const { dense, disabled, fullWidth, helperText, hideLabel,
|
292
|
+
const { dense, disabled, fullWidth, helperText, hideLabel, label, menuId, name, options, placeholder, readonly, required, searchable, showClearButton, validationStatus, validationText, value, } = this;
|
117
293
|
renderHiddenInput(true, this.host, name, value, disabled);
|
118
294
|
const invalid = validationStatus === IcInformationStatus.Error ? "true" : "false";
|
119
|
-
const describedBy = getInputDescribedByText(inputId, helperText !== "", hasValidationStatus(this.validationStatus, this.disabled)).trim();
|
120
|
-
return (h(Host, null, h("ic-input-container", { readonly: readonly }, !hideLabel && (h("ic-input-label", { for: inputId, label: label, helperText: helperText, required: required, disabled: disabled, readonly: readonly })), h("ic-input-component-container", { ref: (el) => (this.anchorEl = el), class: { "menu-open": open }, dense: dense, fullWidth: fullWidth, disabled: disabled, readonly: readonly, validationStatus: validationStatus }, readonly ? (h("ic-typography", null, h("p", null, this.getLabelFromValue(value)))) : isMobileOrTablet() ? (h("select", Object.assign({ ref: (el) => (this.nativeSelectElement = el), disabled: disabled, onChange: this.handleNativeSelectChange, required: required, id: inputId, "aria-label": label, "aria-describedby": describedBy, "aria-invalid": invalid, onBlur: this.onBlur, onFocus: this.onFocus }, this.inheritedAttributes), h("option", { value: "", selected: true, disabled: !
|
295
|
+
const describedBy = getInputDescribedByText(this.inputId, helperText !== "", hasValidationStatus(this.validationStatus, this.disabled)).trim();
|
296
|
+
return (h(Host, null, h("ic-input-container", { readonly: readonly }, !hideLabel && (h("ic-input-label", { for: this.inputId, label: label, helperText: helperText, required: required, disabled: disabled, readonly: readonly })), h("ic-input-component-container", { ref: (el) => (this.anchorEl = el), class: { "menu-open": this.open }, dense: dense, fullWidth: fullWidth, disabled: disabled, readonly: readonly, validationStatus: validationStatus }, readonly ? (h("ic-typography", null, h("p", null, this.getLabelFromValue(value)))) : isMobileOrTablet() ? (h("select", Object.assign({ ref: (el) => (this.nativeSelectElement = el), disabled: disabled, onChange: this.handleNativeSelectChange, required: required, id: this.inputId, "aria-label": label, "aria-describedby": describedBy, "aria-invalid": invalid, onBlur: this.onBlur, onFocus: this.onFocus }, this.inheritedAttributes), h("option", { value: "", selected: true, disabled: !showClearButton }, placeholder), options.map((option) => {
|
121
297
|
if (option.children) {
|
122
298
|
return (h("optgroup", { label: option.label }, option.children.map((option) => (h("option", { value: option.value, disabled: option.disabled, selected: option.value === value }, option.label)))));
|
123
299
|
}
|
124
300
|
else {
|
125
301
|
return (h("option", { value: option.value, disabled: option.disabled, selected: option.value === value }, option.label));
|
126
302
|
}
|
127
|
-
}))) : (h("
|
303
|
+
}))) : searchable ? (h("div", { class: "searchable-select-container" }, h("input", { class: "select-input", role: "combobox", "aria-label": label, "aria-describedby": describedBy, "aria-activedescendant": this.ariaActiveDescendant, "aria-autocomplete": "list", "aria-expanded": this.open ? "true" : "false", "aria-invalid": invalid, "aria-required": required ? "true" : "false", "aria-controls": menuId, ref: (el) => (this.searchableSelectElement = el), id: this.inputId, value: this.searchableSelectInputValue, placeholder: placeholder, disabled: disabled, onInput: this.handleSearchableSelectInput, onClick: this.handleClick, onKeyDown: this.handleKeyDown, onFocus: this.onFocus, onBlur: this.onBlur }), this.searchableSelectInputValue &&
|
304
|
+
(showClearButton || searchable) && (h("div", { class: "clear-button-container" }, h("ic-button", { id: "clear-button", ref: (el) => (this.clearButton = el), "aria-label": this.searchableSelectInputValue && value === null
|
305
|
+
? "Clear input"
|
306
|
+
: "Clear selection", class: "clear-button", innerHTML: Clear, onClick: this.handleClear, onFocus: this.handleClearButtonFocus, onBlur: this.handleClearButtonBlur, size: dense ? "dense" : "default", variant: "icon", buttonStyle: this.clearButtonFocused
|
307
|
+
? IcThemeForegroundEnum.Light
|
308
|
+
: IcThemeForegroundEnum.Dark }), h("div", { class: "divider" }))), h("span", { onMouseDown: this.handleExpandIconMouseDown, class: {
|
309
|
+
"expand-icon": true,
|
310
|
+
"expand-icon-open": this.open,
|
311
|
+
"expand-icon-filled": !(value == null || value === ""),
|
312
|
+
"expand-icon-disabled": !this.isMenuEnabled(),
|
313
|
+
}, innerHTML: Expand, "aria-hidden": "true" }), h("div", { "aria-live": "polite", role: "status", class: "searchable-select-results-status" }))) : (h("div", { class: "select-container" }, h("button", { class: "select-input", ref: (el) => (this.customSelectElement = el), id: this.inputId, "aria-label": `${label}, ${this.getLabelFromValue(value) || placeholder}${required ? ", required" : ""}`, "aria-describedby": describedBy, "aria-invalid": invalid, "aria-haspopup": "listbox", "aria-expanded": this.open ? "true" : "false", "aria-owns": menuId, "aria-controls": menuId, disabled: disabled, onBlur: this.onBlur, onFocus: this.onFocus, onClick: this.handleClick, onMouseDown: this.handleMouseDown, onKeyDown: this.handleKeyDown }, h("ic-typography", { variant: "body", class: {
|
128
314
|
"value-text": true,
|
129
315
|
placeholder: this.getLabelFromValue(value) === undefined,
|
130
|
-
} }, h("p", null, this.getLabelFromValue(value) || placeholder)), h("div", { class: "select-input-end" }, value && showClearButton &&
|
131
|
-
? IcThemeForegroundEnum.Light
|
132
|
-
: IcThemeForegroundEnum.Dark }), h("div", { class: "divider" }))), h("span", { class: {
|
316
|
+
} }, h("p", null, this.getLabelFromValue(value) || placeholder)), h("div", { class: "select-input-end" }, value && showClearButton && h("div", { class: "divider" }), h("span", { class: {
|
133
317
|
"expand-icon": true,
|
134
318
|
"expand-icon-open": this.open,
|
135
|
-
"expand-icon-filled": !(
|
136
|
-
}, innerHTML: Expand, "aria-hidden": "true" })))
|
319
|
+
"expand-icon-filled": !(value == null || value === ""),
|
320
|
+
}, innerHTML: Expand, "aria-hidden": "true" }))), value && showClearButton && (h("ic-button", { id: "clear-button", "aria-label": "Clear selection", class: "clear-button", innerHTML: Clear, onClick: this.handleClear, onFocus: this.handleClearButtonFocus, onBlur: this.handleClearButtonBlur, size: dense ? "dense" : "default", variant: "icon", buttonStyle: this.clearButtonFocused
|
321
|
+
? IcThemeForegroundEnum.Light
|
322
|
+
: IcThemeForegroundEnum.Dark }))))), !isMobileOrTablet() && (h("ic-menu", { class: {
|
323
|
+
"no-results": this.noOptions !== null,
|
324
|
+
}, ref: (el) => (this.menu = el), inputEl: searchable
|
325
|
+
? this.searchableSelectElement
|
326
|
+
: this.customSelectElement, inputLabel: label, anchorEl: this.anchorEl, dense: dense, menuId: menuId, open: this.open, options: searchable ? this.filteredOptions : options, value: value, fullWidth: fullWidth, onMenuChange: this.handleMenuChange, onOptionSelect: this.handleCustomSelectChange, parentEl: this.host })), h("ic-input-validation", { class: { "menu-open": this.open }, ariaLiveMode: "polite", status: hasValidationStatus(this.validationStatus, this.disabled) ===
|
137
327
|
false
|
138
328
|
? ""
|
139
329
|
: validationStatus, message: hasValidationStatus(this.validationStatus, this.disabled)
|
140
330
|
? validationText
|
141
|
-
: "", for: inputId }))));
|
331
|
+
: "", for: this.inputId }))));
|
142
332
|
}
|
143
333
|
static get is() { return "ic-select"; }
|
144
334
|
static get encapsulation() { return "shadow"; }
|
@@ -424,18 +614,135 @@ export class Select {
|
|
424
614
|
"optional": true,
|
425
615
|
"docs": {
|
426
616
|
"tags": [],
|
427
|
-
"text": "Display a button which clears the input when clicked."
|
617
|
+
"text": "Display a button which clears the input when clicked. The button will always appear on the searchable select."
|
428
618
|
},
|
429
619
|
"attribute": "show-clear-button",
|
430
620
|
"reflect": false,
|
431
621
|
"defaultValue": "false"
|
622
|
+
},
|
623
|
+
"searchable": {
|
624
|
+
"type": "boolean",
|
625
|
+
"mutable": false,
|
626
|
+
"complexType": {
|
627
|
+
"original": "boolean",
|
628
|
+
"resolved": "boolean",
|
629
|
+
"references": {}
|
630
|
+
},
|
631
|
+
"required": false,
|
632
|
+
"optional": true,
|
633
|
+
"docs": {
|
634
|
+
"tags": [],
|
635
|
+
"text": "If true, the select can be typed in to filter options."
|
636
|
+
},
|
637
|
+
"attribute": "searchable",
|
638
|
+
"reflect": false,
|
639
|
+
"defaultValue": "false"
|
640
|
+
},
|
641
|
+
"includeDescriptionsInSearch": {
|
642
|
+
"type": "boolean",
|
643
|
+
"mutable": false,
|
644
|
+
"complexType": {
|
645
|
+
"original": "boolean",
|
646
|
+
"resolved": "boolean",
|
647
|
+
"references": {}
|
648
|
+
},
|
649
|
+
"required": false,
|
650
|
+
"optional": true,
|
651
|
+
"docs": {
|
652
|
+
"tags": [],
|
653
|
+
"text": "If true, descriptions of options are included when filtering options in a searchable select."
|
654
|
+
},
|
655
|
+
"attribute": "include-descriptions-in-search",
|
656
|
+
"reflect": false,
|
657
|
+
"defaultValue": "false"
|
658
|
+
},
|
659
|
+
"includeGroupTitlesInSearch": {
|
660
|
+
"type": "boolean",
|
661
|
+
"mutable": false,
|
662
|
+
"complexType": {
|
663
|
+
"original": "boolean",
|
664
|
+
"resolved": "boolean",
|
665
|
+
"references": {}
|
666
|
+
},
|
667
|
+
"required": false,
|
668
|
+
"optional": true,
|
669
|
+
"docs": {
|
670
|
+
"tags": [],
|
671
|
+
"text": "If true, group titles of grouped options are included when filtering options in a searchable select."
|
672
|
+
},
|
673
|
+
"attribute": "include-group-titles-in-search",
|
674
|
+
"reflect": false,
|
675
|
+
"defaultValue": "false"
|
676
|
+
},
|
677
|
+
"searchMatchPosition": {
|
678
|
+
"type": "string",
|
679
|
+
"mutable": false,
|
680
|
+
"complexType": {
|
681
|
+
"original": "IcSearchMatchPositions",
|
682
|
+
"resolved": "\"anywhere\" | \"start\"",
|
683
|
+
"references": {
|
684
|
+
"IcSearchMatchPositions": {
|
685
|
+
"location": "import",
|
686
|
+
"path": "../../utils/types"
|
687
|
+
}
|
688
|
+
}
|
689
|
+
},
|
690
|
+
"required": false,
|
691
|
+
"optional": true,
|
692
|
+
"docs": {
|
693
|
+
"tags": [],
|
694
|
+
"text": "Whether the search string of the searchable select should match the start of or anywhere in the options."
|
695
|
+
},
|
696
|
+
"attribute": "search-match-position",
|
697
|
+
"reflect": false,
|
698
|
+
"defaultValue": "\"anywhere\""
|
699
|
+
},
|
700
|
+
"charactersUntilSuggestions": {
|
701
|
+
"type": "number",
|
702
|
+
"mutable": false,
|
703
|
+
"complexType": {
|
704
|
+
"original": "number",
|
705
|
+
"resolved": "number",
|
706
|
+
"references": {}
|
707
|
+
},
|
708
|
+
"required": false,
|
709
|
+
"optional": true,
|
710
|
+
"docs": {
|
711
|
+
"tags": [],
|
712
|
+
"text": "Number of characters until suggestions appear for a searchable select."
|
713
|
+
},
|
714
|
+
"attribute": "characters-until-suggestions",
|
715
|
+
"reflect": false,
|
716
|
+
"defaultValue": "0"
|
717
|
+
},
|
718
|
+
"emptyOptionListText": {
|
719
|
+
"type": "string",
|
720
|
+
"mutable": false,
|
721
|
+
"complexType": {
|
722
|
+
"original": "string",
|
723
|
+
"resolved": "string",
|
724
|
+
"references": {}
|
725
|
+
},
|
726
|
+
"required": false,
|
727
|
+
"optional": false,
|
728
|
+
"docs": {
|
729
|
+
"tags": [],
|
730
|
+
"text": "Provide text for empty results list"
|
731
|
+
},
|
732
|
+
"attribute": "empty-option-list-text",
|
733
|
+
"reflect": false,
|
734
|
+
"defaultValue": "\"No results found\""
|
432
735
|
}
|
433
736
|
};
|
434
737
|
}
|
435
738
|
static get states() {
|
436
739
|
return {
|
437
740
|
"open": {},
|
438
|
-
"clearButtonFocused": {}
|
741
|
+
"clearButtonFocused": {},
|
742
|
+
"searchableSelectInputValue": {},
|
743
|
+
"filteredOptions": {},
|
744
|
+
"ariaActiveDescendant": {},
|
745
|
+
"noOptions": {}
|
439
746
|
};
|
440
747
|
}
|
441
748
|
static get events() {
|
@@ -512,5 +819,11 @@ export class Select {
|
|
512
819
|
};
|
513
820
|
}
|
514
821
|
static get elementRef() { return "host"; }
|
822
|
+
static get watchers() {
|
823
|
+
return [{
|
824
|
+
"propName": "options",
|
825
|
+
"methodName": "watchOptionsHandler"
|
826
|
+
}];
|
827
|
+
}
|
515
828
|
}
|
516
829
|
//# sourceMappingURL=ic-select.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ic-select.js","sourceRoot":"","sources":["../../../src/components/ic-select/ic-select.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n Host,\n Method,\n Prop,\n h,\n State,\n} from \"@stencil/core\";\n\nimport {\n getInputDescribedByText,\n getLabelFromValue,\n hasValidationStatus,\n inheritAttributes,\n onComponentRequiredPropUndefined,\n renderHiddenInput,\n isMobileOrTablet,\n} from \"../../utils/helpers\";\nimport { IC_INHERITED_ARIA } from \"../../utils/constants\";\nimport {\n IcInformationStatus,\n IcInformationStatusOrEmpty,\n IcThemeForegroundEnum,\n IcMenuOption,\n} from \"../../utils/types\";\nimport Expand from \"./assets/Expand.svg\";\nimport Clear from \"./assets/Clear.svg\";\nimport { IcValueEventDetail } from \"../../interface\";\n\nlet inputIds = 0;\n\n@Component({\n tag: \"ic-select\",\n styleUrl: \"ic-select.css\",\n shadow: true,\n})\nexport class Select {\n private nativeSelectElement: HTMLSelectElement;\n private customSelectElement: HTMLButtonElement;\n private menu: HTMLIcMenuElement;\n private anchorEl: HTMLElement;\n\n private inputId = `ic-select-input-${inputIds++}`;\n private menuId = `${this.inputId}-menu`;\n\n private inheritedAttributes: { [k: string]: unknown } = {};\n\n /**\n * Provide a label for the input.\n */\n @Prop() label!: string;\n\n /**\n * Provide the possible selection options.\n */\n @Prop() options?: IcMenuOption[] = [];\n\n /**\n * Specify if the input requires a value.\n */\n @Prop() required?: boolean = false;\n\n /**\n * Hides the label and applies the required label value as an aria-label.\n */\n @Prop() hideLabel?: boolean = false;\n\n /**\n * Specify whether the input is disabled.\n */\n @Prop({ reflect: true }) disabled?: boolean = false;\n\n /**\n * Specify whether the input is read only.\n */\n @Prop() readonly?: boolean = false;\n\n /**\n * Provide a placeholder value to display.\n */\n @Prop() placeholder?: string = \"Select an option\";\n\n /**\n * Provide helper text to display additional field guidance.\n */\n @Prop() helperText?: string = \"\";\n\n /**\n * Specify whether dense styling is to be applied to the element.\n */\n @Prop() dense?: boolean = false;\n\n /**\n * If true, then fill width of container.\n */\n @Prop() fullWidth: boolean = false;\n\n /**\n * Provide a validation status.\n */\n @Prop() validationStatus?: IcInformationStatusOrEmpty = \"\";\n\n /**\n * Provide the text to display as the validation message.\n */\n @Prop() validationText?: string = \"\";\n\n /**\n * The value of the currently selected option.\n */\n @Prop() value?: string;\n\n /**\n * The name of the control, which is submitted with the form data.\n */\n @Prop() name?: string = this.inputId;\n\n /**\n * Display a button which clears the input when clicked.\n */\n @Prop() showClearButton?: boolean = false;\n\n @State() open: boolean = false;\n\n @State() clearButtonFocused: boolean = false;\n\n /**\n * Emitted when a value is selected.\n */\n @Event() icChange!: EventEmitter<IcValueEventDetail>;\n\n /**\n * Emitted when select has focus.\n */\n @Event() icFocus!: EventEmitter<void>;\n\n /**\n * Emitted when select has blur.\n */\n @Event() icBlur!: EventEmitter<void>;\n\n @Element() host!: HTMLIcSelectElement;\n\n /**\n * Sets focus on the input box.\n */\n @Method()\n async setFocus(): Promise<void> {\n if (this.nativeSelectElement) {\n this.nativeSelectElement.focus();\n } else if (this.customSelectElement) {\n this.customSelectElement.focus();\n }\n }\n\n private setTextColor = (): void => {\n if (this.nativeSelectElement.selectedIndex === 0) {\n this.nativeSelectElement.className = \"placeholder\";\n } else {\n this.nativeSelectElement.className = \"select-option-selected\";\n }\n };\n\n private getLabelFromValue = (value: string): string | undefined => {\n return getLabelFromValue(value, this.options);\n };\n\n private handleNativeSelectChange = (): void => {\n this.icChange.emit({ value: this.nativeSelectElement.value });\n this.setTextColor();\n };\n\n private handleCustomSelectChange = (event: CustomEvent): void => {\n this.icChange.emit({ value: event.detail.value });\n };\n\n private handleMenuChange = (event: CustomEvent): void => {\n this.open = event.detail.open;\n };\n\n private handleMouseDown = (event: Event): void => {\n if (!this.open) {\n event.preventDefault();\n }\n };\n\n private handleClick = (event: MouseEvent): void => {\n if (event.detail !== 0) {\n this.menu.handleClickOpen();\n }\n };\n\n private handleClear = (event: Event): void => {\n event.stopPropagation();\n this.icChange.emit({ value: null });\n this.customSelectElement.focus();\n };\n\n private handleKeyDown = (event: KeyboardEvent): void => {\n this.menu.handleKeyboardOpen(event);\n };\n\n private handleClearButtonFocus = (): void => {\n this.clearButtonFocused = true;\n };\n\n private handleClearButtonBlur = (): void => {\n this.clearButtonFocused = false;\n };\n\n private onFocus = (): void => {\n this.icFocus.emit();\n };\n\n private onBlur = (): void => {\n this.icBlur.emit();\n };\n\n componentWillLoad(): void {\n this.inheritedAttributes = inheritAttributes(this.host, [\n ...IC_INHERITED_ARIA,\n \"tabindex\",\n \"title\",\n ]);\n\n if (this.options.length > 0) {\n this.options.map((option) => {\n if (!option.value) {\n option.value = option.label;\n }\n });\n }\n }\n\n componentDidRender(): void {\n if (this.nativeSelectElement && !this.disabled) {\n this.setTextColor();\n }\n }\n\n componentDidLoad(): void {\n onComponentRequiredPropUndefined(\n [{ prop: this.label, propName: \"label\" }],\n \"Select\"\n );\n }\n\n render() {\n const {\n dense,\n disabled,\n fullWidth,\n helperText,\n hideLabel,\n host,\n inputId,\n label,\n name,\n open,\n options,\n menuId,\n placeholder,\n readonly,\n required,\n showClearButton,\n validationStatus,\n validationText,\n value,\n } = this;\n\n renderHiddenInput(true, this.host, name, value, disabled);\n\n const invalid =\n validationStatus === IcInformationStatus.Error ? \"true\" : \"false\";\n\n const describedBy = getInputDescribedByText(\n inputId,\n helperText !== \"\",\n hasValidationStatus(this.validationStatus, this.disabled)\n ).trim();\n\n return (\n <Host>\n <ic-input-container readonly={readonly}>\n {!hideLabel && (\n <ic-input-label\n for={inputId}\n label={label}\n helperText={helperText}\n required={required}\n disabled={disabled}\n readonly={readonly}\n ></ic-input-label>\n )}\n <ic-input-component-container\n ref={(el) => (this.anchorEl = el)}\n class={{ \"menu-open\": open }}\n dense={dense}\n fullWidth={fullWidth}\n disabled={disabled}\n readonly={readonly}\n validationStatus={validationStatus}\n >\n {readonly ? (\n <ic-typography>\n <p>{this.getLabelFromValue(value)}</p>\n </ic-typography>\n ) : isMobileOrTablet() ? (\n <select\n ref={(el) => (this.nativeSelectElement = el)}\n disabled={disabled}\n onChange={this.handleNativeSelectChange}\n required={required}\n id={inputId}\n aria-label={label}\n aria-describedby={describedBy}\n aria-invalid={invalid}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n {...this.inheritedAttributes}\n >\n <option value=\"\" selected disabled={!this.showClearButton}>\n {placeholder}\n </option>\n {options.map((option) => {\n if (option.children) {\n return (\n <optgroup label={option.label}>\n {option.children.map((option) => (\n <option\n value={option.value}\n disabled={option.disabled}\n selected={option.value === value}\n >\n {option.label}\n </option>\n ))}\n </optgroup>\n );\n } else {\n return (\n <option\n value={option.value}\n disabled={option.disabled}\n selected={option.value === value}\n >\n {option.label}\n </option>\n );\n }\n })}\n </select>\n ) : (\n <button\n class=\"select-input\"\n ref={(el) => (this.customSelectElement = el)}\n id={inputId}\n aria-label={`${label}, ${\n this.getLabelFromValue(value) || placeholder\n }${required ? \", required\" : \"\"}`}\n aria-describedby={describedBy}\n aria-invalid={invalid}\n aria-haspopup=\"listbox\"\n aria-expanded={open ? \"true\" : \"false\"}\n aria-owns={menuId}\n aria-controls={menuId}\n disabled={disabled}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n onClick={this.handleClick}\n onMouseDown={this.handleMouseDown}\n onKeyDown={this.handleKeyDown}\n >\n <ic-typography\n variant=\"body\"\n class={{\n \"value-text\": true,\n placeholder: this.getLabelFromValue(value) === undefined,\n }}\n >\n <p>{this.getLabelFromValue(value) || placeholder}</p>\n </ic-typography>\n <div class=\"select-input-end\">\n {value && showClearButton && (\n <div class=\"clear-button-container\">\n <ic-button\n id=\"clear-button\"\n aria-label=\"Clear selection\"\n class=\"clear-button\"\n innerHTML={Clear}\n onClick={this.handleClear}\n onFocus={this.handleClearButtonFocus}\n onBlur={this.handleClearButtonBlur}\n size={dense ? \"dense\" : \"default\"}\n variant=\"icon\"\n buttonStyle={\n this.clearButtonFocused\n ? IcThemeForegroundEnum.Light\n : IcThemeForegroundEnum.Dark\n }\n ></ic-button>\n <div class=\"divider\"></div>\n </div>\n )}\n <span\n class={{\n \"expand-icon\": true,\n \"expand-icon-open\": this.open,\n \"expand-icon-filled\": !(\n this.value == null || this.value === \"\"\n ),\n }}\n innerHTML={Expand}\n aria-hidden=\"true\"\n />\n </div>\n </button>\n )}\n </ic-input-component-container>\n {!isMobileOrTablet() && (\n <ic-menu\n ref={(el) => (this.menu = el)}\n inputEl={this.customSelectElement}\n inputLabel={label}\n anchorEl={this.anchorEl}\n dense={dense}\n menuId={menuId}\n open={open}\n options={options}\n value={value}\n fullWidth={fullWidth}\n onMenuChange={this.handleMenuChange}\n onOptionSelect={this.handleCustomSelectChange}\n parentEl={host}\n ></ic-menu>\n )}\n <ic-input-validation\n class={{ \"menu-open\": open }}\n ariaLiveMode=\"polite\"\n status={\n hasValidationStatus(this.validationStatus, this.disabled) ===\n false\n ? \"\"\n : validationStatus\n }\n message={\n hasValidationStatus(this.validationStatus, this.disabled)\n ? validationText\n : \"\"\n }\n for={inputId}\n ></ic-input-validation>\n </ic-input-container>\n </Host>\n );\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"ic-select.js","sourceRoot":"","sources":["../../../src/components/ic-select/ic-select.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n Host,\n Method,\n Prop,\n h,\n State,\n Watch,\n} from \"@stencil/core\";\n\nimport {\n getInputDescribedByText,\n getLabelFromValue,\n hasValidationStatus,\n inheritAttributes,\n onComponentRequiredPropUndefined,\n renderHiddenInput,\n isMobileOrTablet,\n getFilteredMenuOptions,\n} from \"../../utils/helpers\";\nimport { IC_INHERITED_ARIA } from \"../../utils/constants\";\nimport {\n IcInformationStatus,\n IcInformationStatusOrEmpty,\n IcThemeForegroundEnum,\n IcMenuOption,\n IcSearchMatchPositions,\n} from \"../../utils/types\";\nimport Expand from \"./assets/Expand.svg\";\nimport Clear from \"./assets/Clear.svg\";\nimport { IcValueEventDetail } from \"../../interface\";\n\nlet inputIds = 0;\n\n@Component({\n tag: \"ic-select\",\n styleUrl: \"ic-select.css\",\n shadow: true,\n})\nexport class Select {\n private nativeSelectElement: HTMLSelectElement;\n private customSelectElement: HTMLButtonElement;\n private searchableSelectElement: HTMLInputElement;\n private menu: HTMLIcMenuElement;\n private anchorEl: HTMLElement;\n private clearButton: HTMLIcButtonElement;\n\n private inputId = `ic-select-input-${inputIds++}`;\n private menuId = `${this.inputId}-menu`;\n\n private inheritedAttributes: { [k: string]: unknown } = {};\n\n private debounce: number;\n\n /**\n * Provide a label for the input.\n */\n @Prop() label!: string;\n\n /**\n * Provide the possible selection options.\n */\n @Prop() options?: IcMenuOption[] = [];\n\n /**\n * Specify if the input requires a value.\n */\n @Prop() required?: boolean = false;\n\n /**\n * Hides the label and applies the required label value as an aria-label.\n */\n @Prop() hideLabel?: boolean = false;\n\n /**\n * Specify whether the input is disabled.\n */\n @Prop({ reflect: true }) disabled?: boolean = false;\n\n /**\n * Specify whether the input is read only.\n */\n @Prop() readonly?: boolean = false;\n\n /**\n * Provide a placeholder value to display.\n */\n @Prop() placeholder?: string = \"Select an option\";\n\n /**\n * Provide helper text to display additional field guidance.\n */\n @Prop() helperText?: string = \"\";\n\n /**\n * Specify whether dense styling is to be applied to the element.\n */\n @Prop() dense?: boolean = false;\n\n /**\n * If true, then fill width of container.\n */\n @Prop() fullWidth: boolean = false;\n\n /**\n * Provide a validation status.\n */\n @Prop() validationStatus?: IcInformationStatusOrEmpty = \"\";\n\n /**\n * Provide the text to display as the validation message.\n */\n @Prop() validationText?: string = \"\";\n\n /**\n * The value of the currently selected option.\n */\n @Prop() value?: string;\n\n /**\n * The name of the control, which is submitted with the form data.\n */\n @Prop() name?: string = this.inputId;\n\n /**\n * Display a button which clears the input when clicked. The button will always appear on the searchable select.\n */\n @Prop() showClearButton?: boolean = false;\n\n /**\n * If true, the select can be typed in to filter options.\n */\n @Prop() searchable?: boolean = false;\n\n /**\n * If true, descriptions of options are included when filtering options in a searchable select.\n */\n @Prop() includeDescriptionsInSearch?: boolean = false;\n\n /**\n * If true, group titles of grouped options are included when filtering options in a searchable select.\n */\n @Prop() includeGroupTitlesInSearch?: boolean = false;\n\n /**\n * Whether the search string of the searchable select should match the start of or anywhere in the options.\n */\n @Prop() searchMatchPosition?: IcSearchMatchPositions = \"anywhere\";\n\n /**\n * Number of characters until suggestions appear for a searchable select.\n */\n @Prop() charactersUntilSuggestions?: number = 0;\n\n /**\n * Provide text for empty results list\n */\n @Prop() emptyOptionListText = \"No results found\";\n\n @State() open: boolean = false;\n\n @State() clearButtonFocused: boolean = false;\n\n @State() searchableSelectInputValue: string = null;\n\n @State() filteredOptions: IcMenuOption[] = this.options;\n\n @State() ariaActiveDescendant: string;\n\n @State() noOptions: IcMenuOption[] = null;\n\n @Watch(\"options\")\n watchOptionsHandler(): void {\n this.setOptionsValuesFromLabels();\n this.filteredOptions = this.options;\n }\n\n /**\n * Emitted when a value is selected.\n */\n @Event() icChange!: EventEmitter<IcValueEventDetail>;\n\n /**\n * Emitted when select has focus.\n */\n @Event() icFocus!: EventEmitter<void>;\n\n /**\n * Emitted when select has blur.\n */\n @Event() icBlur!: EventEmitter<void>;\n\n @Element() host!: HTMLIcSelectElement;\n\n /**\n * Sets focus on the input box.\n */\n @Method()\n async setFocus(): Promise<void> {\n if (this.nativeSelectElement) {\n this.nativeSelectElement.focus();\n } else if (this.customSelectElement) {\n this.customSelectElement.focus();\n } else if (this.searchableSelectElement) {\n this.searchableSelectElement.focus();\n }\n }\n\n private isMenuEnabled = () => {\n return (\n ((this.searchableSelectInputValue === null ||\n this.searchableSelectInputValue === \"\") &&\n this.charactersUntilSuggestions === 0) ||\n (this.searchableSelectInputValue &&\n this.searchableSelectInputValue.length >=\n this.charactersUntilSuggestions)\n );\n };\n\n private setOptionsValuesFromLabels = (): void => {\n if (this.options.length > 0) {\n this.options.map((option) => {\n if (!option.value) {\n option.value = option.label;\n }\n });\n }\n };\n\n private setTextColor = (): void => {\n if (this.nativeSelectElement.selectedIndex === 0) {\n this.nativeSelectElement.className = \"placeholder\";\n } else {\n this.nativeSelectElement.className = \"select-option-selected\";\n }\n };\n\n private setMenuChange = (open: boolean) => {\n if (this.open !== open) {\n this.open = open;\n }\n };\n\n private getLabelFromValue = (value: string): string | undefined => {\n return getLabelFromValue(value, this.options);\n };\n\n private getValueFromLabel = (label: string): string | undefined => {\n const value = this.options.find((option) => option.label === label)?.value;\n return value;\n };\n\n private getFilteredChildMenuOptions = (option: IcMenuOption) => {\n let children = option.children;\n\n children = getFilteredMenuOptions(\n option.children,\n this.includeDescriptionsInSearch,\n this.searchableSelectInputValue,\n this.searchMatchPosition\n );\n\n const newOption = { ...option };\n newOption.children = children;\n return newOption;\n };\n\n private handleNativeSelectChange = (): void => {\n this.icChange.emit({ value: this.nativeSelectElement.value });\n this.setTextColor();\n };\n\n private handleCustomSelectChange = (event: CustomEvent): void => {\n if (this.searchable && event.detail.label === this.emptyOptionListText) {\n this.searchableSelectElement.focus();\n return;\n }\n\n if (this.searchable) {\n this.searchableSelectInputValue = this.getLabelFromValue(\n event.detail.value\n );\n }\n\n this.ariaActiveDescendant = event.detail.optionId;\n this.icChange.emit({ value: event.detail.value });\n };\n\n private handleMenuChange = (event: CustomEvent): void => {\n this.open = event.detail.open;\n\n this.searchable && this.handleFocusIndicatorDisplay();\n };\n\n private handleFocusIndicatorDisplay = () => {\n const focusIndicator =\n this.host.shadowRoot.querySelector(\".focus-indicator\");\n\n if (this.open) {\n focusIndicator.classList.add(\"focus-indicator-enabled\");\n } else {\n focusIndicator.classList.remove(\"focus-indicator-enabled\");\n }\n };\n\n private handleMouseDown = (event: Event): void => {\n if (!this.open) {\n event.preventDefault();\n }\n };\n\n private handleClick = (event: MouseEvent): void => {\n this.noOptions = null;\n this.menu.options = this.options;\n\n if (event.detail !== 0 && this.isMenuEnabled()) {\n this.menu.handleClickOpen();\n }\n };\n\n private handleExpandIconMouseDown = (event: MouseEvent) => {\n if (!this.disabled) {\n event.preventDefault();\n this.searchableSelectElement.focus();\n this.handleClick(event);\n }\n };\n\n private handleClear = (event: Event): void => {\n event.stopPropagation();\n this.noOptions = null;\n this.icChange.emit({ value: null });\n\n if (this.searchable) {\n this.searchableSelectElement.value = null;\n this.searchableSelectInputValue = null;\n this.menu.options = this.options;\n this.searchableSelectElement.focus();\n\n if (!this.isMenuEnabled()) {\n this.setMenuChange(false);\n }\n } else {\n this.customSelectElement.focus();\n }\n };\n\n private handleKeyDown = (event: KeyboardEvent): void => {\n event.cancelBubble = true;\n\n if (!this.open) {\n this.noOptions = null;\n this.menu.options = this.options;\n }\n\n if (this.open && event.key === \"Enter\") {\n this.setMenuChange(false);\n } else {\n if (\n !(\n (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") &&\n this.noOptions !== null\n ) &&\n this.isMenuEnabled()\n ) {\n this.menu.handleKeyboardOpen(event);\n }\n }\n };\n\n private handleClearButtonFocus = (): void => {\n this.clearButtonFocused = true;\n };\n\n private handleClearButtonBlur = (): void => {\n this.clearButtonFocused = false;\n };\n\n private handleSearchableSelectInput = (event: Event): void => {\n this.searchableSelectInputValue = (event.target as HTMLInputElement).value;\n\n if (this.getValueFromLabel(this.searchableSelectInputValue) === undefined) {\n this.icChange.emit({ value: null });\n }\n\n if (this.isMenuEnabled()) {\n this.setMenuChange(true);\n } else {\n this.setMenuChange(false);\n }\n\n const options = [...this.options];\n\n let isGrouped = false;\n let newFilteredOptions: IcMenuOption[] = [];\n\n options.map((option) => {\n if (option.children) isGrouped = true;\n });\n\n const menuOptionsFiltered = getFilteredMenuOptions(\n options,\n this.includeDescriptionsInSearch,\n this.searchableSelectInputValue,\n this.searchMatchPosition\n );\n\n if (!isGrouped) {\n newFilteredOptions = menuOptionsFiltered;\n } else {\n options.map((option) => {\n if (this.includeGroupTitlesInSearch) {\n if (menuOptionsFiltered.indexOf(option) !== -1) {\n newFilteredOptions.push(option);\n } else {\n newFilteredOptions.push(this.getFilteredChildMenuOptions(option));\n }\n } else {\n newFilteredOptions.push(this.getFilteredChildMenuOptions(option));\n }\n });\n }\n\n let noChildOptionsWhenFiltered = false;\n\n if (isGrouped) {\n noChildOptionsWhenFiltered = true;\n newFilteredOptions.map((option) => {\n if (option.children.length > 0) {\n noChildOptionsWhenFiltered = false;\n }\n });\n }\n\n const noOptions = [{ label: this.emptyOptionListText, value: \"\" }];\n\n if (newFilteredOptions.length > 0 && !noChildOptionsWhenFiltered) {\n this.noOptions = null;\n this.filteredOptions = newFilteredOptions;\n } else {\n this.noOptions = noOptions;\n this.filteredOptions = this.noOptions;\n }\n\n this.debounceAriaLiveUpdate();\n };\n\n private updateSearchableSelectResultAriaLive = (): void => {\n const searchableSelectResultsStatusEl = this.host.shadowRoot.querySelector(\n \".searchable-select-results-status\"\n ) as HTMLDivElement;\n\n if (this.noOptions !== null) {\n searchableSelectResultsStatusEl.innerText = this.emptyOptionListText;\n } else {\n searchableSelectResultsStatusEl.innerText = \"\";\n }\n };\n\n private debounceAriaLiveUpdate() {\n clearTimeout(this.debounce);\n\n window.setTimeout(() => {\n this.updateSearchableSelectResultAriaLive();\n }, 800);\n }\n\n private onFocus = (): void => {\n this.icFocus.emit();\n };\n\n private onBlur = (event: FocusEvent): void => {\n if (\n this.searchable &&\n event.relatedTarget !== this.menu &&\n !(this.clearButton && event.relatedTarget === this.clearButton)\n ) {\n this.setMenuChange(false);\n this.handleFocusIndicatorDisplay();\n }\n\n this.icBlur.emit();\n };\n\n componentWillLoad(): void {\n this.inheritedAttributes = inheritAttributes(this.host, [\n ...IC_INHERITED_ARIA,\n \"tabindex\",\n \"title\",\n ]);\n\n this.setOptionsValuesFromLabels();\n }\n\n componentDidRender(): void {\n if (this.nativeSelectElement && !this.disabled) {\n this.setTextColor();\n }\n }\n\n componentDidLoad(): void {\n onComponentRequiredPropUndefined(\n [{ prop: this.label, propName: \"label\" }],\n \"Select\"\n );\n }\n\n render() {\n const {\n dense,\n disabled,\n fullWidth,\n helperText,\n hideLabel,\n label,\n menuId,\n name,\n options,\n placeholder,\n readonly,\n required,\n searchable,\n showClearButton,\n validationStatus,\n validationText,\n value,\n } = this;\n\n renderHiddenInput(true, this.host, name, value, disabled);\n\n const invalid =\n validationStatus === IcInformationStatus.Error ? \"true\" : \"false\";\n\n const describedBy = getInputDescribedByText(\n this.inputId,\n helperText !== \"\",\n hasValidationStatus(this.validationStatus, this.disabled)\n ).trim();\n\n return (\n <Host>\n <ic-input-container readonly={readonly}>\n {!hideLabel && (\n <ic-input-label\n for={this.inputId}\n label={label}\n helperText={helperText}\n required={required}\n disabled={disabled}\n readonly={readonly}\n ></ic-input-label>\n )}\n <ic-input-component-container\n ref={(el) => (this.anchorEl = el)}\n class={{ \"menu-open\": this.open }}\n dense={dense}\n fullWidth={fullWidth}\n disabled={disabled}\n readonly={readonly}\n validationStatus={validationStatus}\n >\n {readonly ? (\n <ic-typography>\n <p>{this.getLabelFromValue(value)}</p>\n </ic-typography>\n ) : isMobileOrTablet() ? (\n <select\n ref={(el) => (this.nativeSelectElement = el)}\n disabled={disabled}\n onChange={this.handleNativeSelectChange}\n required={required}\n id={this.inputId}\n aria-label={label}\n aria-describedby={describedBy}\n aria-invalid={invalid}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n {...this.inheritedAttributes}\n >\n <option value=\"\" selected disabled={!showClearButton}>\n {placeholder}\n </option>\n {options.map((option) => {\n if (option.children) {\n return (\n <optgroup label={option.label}>\n {option.children.map((option) => (\n <option\n value={option.value}\n disabled={option.disabled}\n selected={option.value === value}\n >\n {option.label}\n </option>\n ))}\n </optgroup>\n );\n } else {\n return (\n <option\n value={option.value}\n disabled={option.disabled}\n selected={option.value === value}\n >\n {option.label}\n </option>\n );\n }\n })}\n </select>\n ) : searchable ? (\n <div class=\"searchable-select-container\">\n <input\n class=\"select-input\"\n role=\"combobox\"\n aria-label={label}\n aria-describedby={describedBy}\n aria-activedescendant={this.ariaActiveDescendant}\n aria-autocomplete=\"list\"\n aria-expanded={this.open ? \"true\" : \"false\"}\n aria-invalid={invalid}\n aria-required={required ? \"true\" : \"false\"}\n aria-controls={menuId}\n ref={(el) => (this.searchableSelectElement = el)}\n id={this.inputId}\n value={this.searchableSelectInputValue}\n placeholder={placeholder}\n disabled={disabled}\n onInput={this.handleSearchableSelectInput}\n onClick={this.handleClick}\n onKeyDown={this.handleKeyDown}\n onFocus={this.onFocus}\n onBlur={this.onBlur}\n ></input>\n {this.searchableSelectInputValue &&\n (showClearButton || searchable) && (\n <div class=\"clear-button-container\">\n <ic-button\n id=\"clear-button\"\n ref={(el) => (this.clearButton = el)}\n aria-label={\n this.searchableSelectInputValue && value === null\n ? \"Clear input\"\n : \"Clear selection\"\n }\n class=\"clear-button\"\n innerHTML={Clear}\n onClick={this.handleClear}\n onFocus={this.handleClearButtonFocus}\n onBlur={this.handleClearButtonBlur}\n size={dense ? \"dense\" : \"default\"}\n variant=\"icon\"\n buttonStyle={\n this.clearButtonFocused\n ? IcThemeForegroundEnum.Light\n : IcThemeForegroundEnum.Dark\n }\n ></ic-button>\n <div class=\"divider\"></div>\n </div>\n )}\n <span\n onMouseDown={this.handleExpandIconMouseDown}\n class={{\n \"expand-icon\": true,\n \"expand-icon-open\": this.open,\n \"expand-icon-filled\": !(value == null || value === \"\"),\n \"expand-icon-disabled\": !this.isMenuEnabled(),\n }}\n innerHTML={Expand}\n aria-hidden=\"true\"\n />\n <div\n aria-live=\"polite\"\n role=\"status\"\n class=\"searchable-select-results-status\"\n ></div>\n </div>\n ) : (\n <div class=\"select-container\">\n <button\n class=\"select-input\"\n ref={(el) => (this.customSelectElement = el)}\n id={this.inputId}\n aria-label={`${label}, ${\n this.getLabelFromValue(value) || placeholder\n }${required ? \", required\" : \"\"}`}\n aria-describedby={describedBy}\n aria-invalid={invalid}\n aria-haspopup=\"listbox\"\n aria-expanded={this.open ? \"true\" : \"false\"}\n aria-owns={menuId}\n aria-controls={menuId}\n disabled={disabled}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n onClick={this.handleClick}\n onMouseDown={this.handleMouseDown}\n onKeyDown={this.handleKeyDown}\n >\n <ic-typography\n variant=\"body\"\n class={{\n \"value-text\": true,\n placeholder: this.getLabelFromValue(value) === undefined,\n }}\n >\n <p>{this.getLabelFromValue(value) || placeholder}</p>\n </ic-typography>\n <div class=\"select-input-end\">\n {value && showClearButton && <div class=\"divider\"></div>}\n <span\n class={{\n \"expand-icon\": true,\n \"expand-icon-open\": this.open,\n \"expand-icon-filled\": !(value == null || value === \"\"),\n }}\n innerHTML={Expand}\n aria-hidden=\"true\"\n />\n </div>\n </button>\n {value && showClearButton && (\n <ic-button\n id=\"clear-button\"\n aria-label=\"Clear selection\"\n class=\"clear-button\"\n innerHTML={Clear}\n onClick={this.handleClear}\n onFocus={this.handleClearButtonFocus}\n onBlur={this.handleClearButtonBlur}\n size={dense ? \"dense\" : \"default\"}\n variant=\"icon\"\n buttonStyle={\n this.clearButtonFocused\n ? IcThemeForegroundEnum.Light\n : IcThemeForegroundEnum.Dark\n }\n ></ic-button>\n )}\n </div>\n )}\n </ic-input-component-container>\n {!isMobileOrTablet() && (\n <ic-menu\n class={{\n \"no-results\": this.noOptions !== null,\n }}\n ref={(el) => (this.menu = el)}\n inputEl={\n searchable\n ? this.searchableSelectElement\n : this.customSelectElement\n }\n inputLabel={label}\n anchorEl={this.anchorEl}\n dense={dense}\n menuId={menuId}\n open={this.open}\n options={searchable ? this.filteredOptions : options}\n value={value}\n fullWidth={fullWidth}\n onMenuChange={this.handleMenuChange}\n onOptionSelect={this.handleCustomSelectChange}\n parentEl={this.host}\n ></ic-menu>\n )}\n <ic-input-validation\n class={{ \"menu-open\": this.open }}\n ariaLiveMode=\"polite\"\n status={\n hasValidationStatus(this.validationStatus, this.disabled) ===\n false\n ? \"\"\n : validationStatus\n }\n message={\n hasValidationStatus(this.validationStatus, this.disabled)\n ? validationText\n : \"\"\n }\n for={this.inputId}\n ></ic-input-validation>\n </ic-input-container>\n </Host>\n );\n }\n}\n"]}
|