@ukic/web-components 2.30.0 → 2.31.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (145) hide show
  1. package/dist/cjs/core.cjs.js +1 -1
  2. package/dist/cjs/ic-checkbox.cjs.entry.js.map +1 -1
  3. package/dist/cjs/ic-horizontal-scroll.cjs.entry.js +3 -2
  4. package/dist/cjs/ic-horizontal-scroll.cjs.entry.js.map +1 -1
  5. package/dist/cjs/ic-input-component-container_3.cjs.entry.js +3 -2
  6. package/dist/cjs/ic-input-component-container_3.cjs.entry.js.map +1 -1
  7. package/dist/cjs/ic-menu-group.cjs.entry.js +1 -1
  8. package/dist/cjs/ic-menu-group.cjs.entry.js.map +1 -1
  9. package/dist/cjs/ic-menu-item.cjs.entry.js +10 -6
  10. package/dist/cjs/ic-menu-item.cjs.entry.js.map +1 -1
  11. package/dist/cjs/ic-navigation-group.cjs.entry.js +3 -2
  12. package/dist/cjs/ic-navigation-group.cjs.entry.js.map +1 -1
  13. package/dist/cjs/ic-navigation-item.cjs.entry.js +28 -1
  14. package/dist/cjs/ic-navigation-item.cjs.entry.js.map +1 -1
  15. package/dist/cjs/ic-popover-menu.cjs.entry.js +3 -3
  16. package/dist/cjs/ic-popover-menu.cjs.entry.js.map +1 -1
  17. package/dist/cjs/ic-select.cjs.entry.js.map +1 -1
  18. package/dist/cjs/ic-side-navigation.cjs.entry.js +2 -1
  19. package/dist/cjs/ic-side-navigation.cjs.entry.js.map +1 -1
  20. package/dist/cjs/ic-tab-context.cjs.entry.js +2 -1
  21. package/dist/cjs/ic-tab-context.cjs.entry.js.map +1 -1
  22. package/dist/cjs/ic-text-field.cjs.entry.js.map +1 -1
  23. package/dist/cjs/ic-toggle-button-group.cjs.entry.js +1 -1
  24. package/dist/cjs/ic-toggle-button-group.cjs.entry.js.map +1 -1
  25. package/dist/cjs/loader.cjs.js +1 -1
  26. package/dist/collection/ag-theme-icds.css +217 -0
  27. package/dist/collection/components/ic-checkbox/ic-checkbox.js +1 -1
  28. package/dist/collection/components/ic-checkbox/ic-checkbox.js.map +1 -1
  29. package/dist/collection/components/ic-horizontal-scroll/ic-horizontal-scroll.js +3 -2
  30. package/dist/collection/components/ic-horizontal-scroll/ic-horizontal-scroll.js.map +1 -1
  31. package/dist/collection/components/ic-menu/ic-menu.js +3 -2
  32. package/dist/collection/components/ic-menu/ic-menu.js.map +1 -1
  33. package/dist/collection/components/ic-menu-group/ic-menu-group.js +1 -1
  34. package/dist/collection/components/ic-menu-group/ic-menu-group.js.map +1 -1
  35. package/dist/collection/components/ic-menu-item/ic-menu-item.js +42 -11
  36. package/dist/collection/components/ic-menu-item/ic-menu-item.js.map +1 -1
  37. package/dist/collection/components/ic-navigation-group/ic-navigation-group.js +3 -2
  38. package/dist/collection/components/ic-navigation-group/ic-navigation-group.js.map +1 -1
  39. package/dist/collection/components/ic-navigation-item/ic-navigation-item.js +31 -3
  40. package/dist/collection/components/ic-navigation-item/ic-navigation-item.js.map +1 -1
  41. package/dist/collection/components/ic-navigation-item/test/basic/ic-navigation-item.spec.js +12 -0
  42. package/dist/collection/components/ic-navigation-item/test/basic/ic-navigation-item.spec.js.map +1 -1
  43. package/dist/collection/components/ic-popover-menu/ic-popover-menu.js +3 -3
  44. package/dist/collection/components/ic-popover-menu/ic-popover-menu.js.map +1 -1
  45. package/dist/collection/components/ic-select/ic-select.css +1 -0
  46. package/dist/collection/components/ic-side-navigation/ic-side-navigation.js +2 -1
  47. package/dist/collection/components/ic-side-navigation/ic-side-navigation.js.map +1 -1
  48. package/dist/collection/components/ic-tab-context/ic-tab-context.js +2 -1
  49. package/dist/collection/components/ic-tab-context/ic-tab-context.js.map +1 -1
  50. package/dist/collection/components/ic-text-field/ic-text-field.css +1 -0
  51. package/dist/collection/components/ic-toggle-button-group/ic-toggle-button-group.js +1 -1
  52. package/dist/collection/components/ic-toggle-button-group/ic-toggle-button-group.js.map +1 -1
  53. package/dist/collection/components/ic-toggle-button-group/test/ic-toggle-button-group.spec.js +1 -0
  54. package/dist/collection/components/ic-toggle-button-group/test/ic-toggle-button-group.spec.js.map +1 -1
  55. package/dist/components/ic-checkbox.js.map +1 -1
  56. package/dist/components/ic-horizontal-scroll2.js +3 -2
  57. package/dist/components/ic-horizontal-scroll2.js.map +1 -1
  58. package/dist/components/ic-menu-group.js +1 -1
  59. package/dist/components/ic-menu-group.js.map +1 -1
  60. package/dist/components/ic-menu-item2.js +12 -8
  61. package/dist/components/ic-menu-item2.js.map +1 -1
  62. package/dist/components/ic-menu2.js +3 -2
  63. package/dist/components/ic-menu2.js.map +1 -1
  64. package/dist/components/ic-navigation-group.js +3 -2
  65. package/dist/components/ic-navigation-group.js.map +1 -1
  66. package/dist/components/ic-navigation-item.js +30 -2
  67. package/dist/components/ic-navigation-item.js.map +1 -1
  68. package/dist/components/ic-popover-menu.js +3 -3
  69. package/dist/components/ic-popover-menu.js.map +1 -1
  70. package/dist/components/ic-select.js.map +1 -1
  71. package/dist/components/ic-side-navigation.js +2 -1
  72. package/dist/components/ic-side-navigation.js.map +1 -1
  73. package/dist/components/ic-tab-context.js +2 -1
  74. package/dist/components/ic-tab-context.js.map +1 -1
  75. package/dist/components/ic-text-field2.js.map +1 -1
  76. package/dist/components/ic-toggle-button-group.js +1 -1
  77. package/dist/components/ic-toggle-button-group.js.map +1 -1
  78. package/dist/core/ag-theme-icds.css +217 -0
  79. package/dist/core/core.esm.js +1 -1
  80. package/dist/core/core.esm.js.map +1 -1
  81. package/dist/core/{p-a6ff78aa.entry.js → p-07514ea0.entry.js} +2 -2
  82. package/dist/core/p-07514ea0.entry.js.map +1 -0
  83. package/dist/core/{p-836e71de.entry.js → p-0aed0cee.entry.js} +2 -2
  84. package/dist/core/p-0aed0cee.entry.js.map +1 -0
  85. package/dist/core/{p-cbd4caf5.entry.js → p-2c587c73.entry.js} +2 -2
  86. package/dist/core/p-2c587c73.entry.js.map +1 -0
  87. package/dist/core/{p-b4da66f0.entry.js → p-32fa7c28.entry.js} +2 -2
  88. package/dist/core/{p-b4da66f0.entry.js.map → p-32fa7c28.entry.js.map} +1 -1
  89. package/dist/core/{p-bb963aa4.entry.js → p-77d49138.entry.js} +2 -2
  90. package/dist/core/p-77d49138.entry.js.map +1 -0
  91. package/dist/core/{p-1ae6aadb.entry.js → p-7e739287.entry.js} +2 -2
  92. package/dist/core/p-7e739287.entry.js.map +1 -0
  93. package/dist/core/p-81deed36.entry.js.map +1 -1
  94. package/dist/core/p-94d5aa77.entry.js.map +1 -1
  95. package/dist/core/p-9930557b.entry.js +2 -0
  96. package/dist/core/p-9930557b.entry.js.map +1 -0
  97. package/dist/core/{p-b47021d8.entry.js → p-cdf6e902.entry.js} +2 -2
  98. package/dist/core/p-cdf6e902.entry.js.map +1 -0
  99. package/dist/core/p-d638d75d.entry.js.map +1 -1
  100. package/dist/core/{p-72b350bc.entry.js → p-ee6aa6a1.entry.js} +2 -2
  101. package/dist/core/p-ee6aa6a1.entry.js.map +1 -0
  102. package/dist/core/{p-a75f3c4d.entry.js → p-f1b210ed.entry.js} +2 -2
  103. package/dist/core/p-f1b210ed.entry.js.map +1 -0
  104. package/dist/esm/core.js +1 -1
  105. package/dist/esm/ic-checkbox.entry.js.map +1 -1
  106. package/dist/esm/ic-horizontal-scroll.entry.js +3 -2
  107. package/dist/esm/ic-horizontal-scroll.entry.js.map +1 -1
  108. package/dist/esm/ic-input-component-container_3.entry.js +3 -2
  109. package/dist/esm/ic-input-component-container_3.entry.js.map +1 -1
  110. package/dist/esm/ic-menu-group.entry.js +1 -1
  111. package/dist/esm/ic-menu-group.entry.js.map +1 -1
  112. package/dist/esm/ic-menu-item.entry.js +10 -6
  113. package/dist/esm/ic-menu-item.entry.js.map +1 -1
  114. package/dist/esm/ic-navigation-group.entry.js +3 -2
  115. package/dist/esm/ic-navigation-group.entry.js.map +1 -1
  116. package/dist/esm/ic-navigation-item.entry.js +29 -2
  117. package/dist/esm/ic-navigation-item.entry.js.map +1 -1
  118. package/dist/esm/ic-popover-menu.entry.js +3 -3
  119. package/dist/esm/ic-popover-menu.entry.js.map +1 -1
  120. package/dist/esm/ic-select.entry.js.map +1 -1
  121. package/dist/esm/ic-side-navigation.entry.js +2 -1
  122. package/dist/esm/ic-side-navigation.entry.js.map +1 -1
  123. package/dist/esm/ic-tab-context.entry.js +2 -1
  124. package/dist/esm/ic-tab-context.entry.js.map +1 -1
  125. package/dist/esm/ic-text-field.entry.js.map +1 -1
  126. package/dist/esm/ic-toggle-button-group.entry.js +1 -1
  127. package/dist/esm/ic-toggle-button-group.entry.js.map +1 -1
  128. package/dist/esm/loader.js +1 -1
  129. package/dist/types/components/ic-checkbox/ic-checkbox.d.ts +1 -1
  130. package/dist/types/components/ic-menu-item/ic-menu-item.d.ts +10 -1
  131. package/dist/types/components/ic-navigation-item/ic-navigation-item.d.ts +5 -0
  132. package/dist/types/components.d.ts +19 -2
  133. package/hydrate/index.js +55 -23
  134. package/package.json +2 -2
  135. package/vscode-data.json +5 -1
  136. package/dist/core/p-1ae6aadb.entry.js.map +0 -1
  137. package/dist/core/p-72b350bc.entry.js.map +0 -1
  138. package/dist/core/p-836e71de.entry.js.map +0 -1
  139. package/dist/core/p-936ab032.entry.js +0 -2
  140. package/dist/core/p-936ab032.entry.js.map +0 -1
  141. package/dist/core/p-a6ff78aa.entry.js.map +0 -1
  142. package/dist/core/p-a75f3c4d.entry.js.map +0 -1
  143. package/dist/core/p-b47021d8.entry.js.map +0 -1
  144. package/dist/core/p-bb963aa4.entry.js.map +0 -1
  145. package/dist/core/p-cbd4caf5.entry.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["icSelectCss","inputIds","MUTABLE_ATTRIBUTES","IC_INHERITED_ARIA","Select","this","hasSetDefaultValue","inheritedAttributes","initialOptionsEmpty","inputId","menuId","searchableMenuItemSelected","ungroupedOptions","hostMutationObserver","hostMutationCallback","mutationList","forceComponentUpdate","forEach","attributeName","type","addedNodes","removedNodes","includes","el","getAttribute","checkSlotInChildMutations","forceUpdate","handleRetry","ev","detail","keyPressed","_a","searchableSelectElement","focus","blurredBecauseButtonPressed","retryButtonClick","icRetryLoad","emit","value","hiddenInputValue","emitIcChange","searchable","clearTimeout","debounceIcChange","window","setTimeout","icChange","currDebounce","emitImmediateIcChange","deduplicateOptions","options","uniqueValues","dedupedOptions","dedupedChildren","option","children","child","console","warn","label","push","modifiedParent","Object","assign","setOptionsValuesFromLabels","length","map","setUngroupedOptions","event","setTextColor","nativeSelectElement","selectedIndex","className","setMenuChange","open","getLabelFromValue","uniqueOptions","getFilteredChildMenuOptions","getFilteredMenuOptions","includeDescriptionsInSearch","searchableSelectInputValue","searchMatchPosition","pressedCharacters","newOption","handleNativeSelectChange","icOptionSelect","handleCustomSelectChange","emptyOptionListText","currValue","inputValueToFilter","getValueFromLabel","ariaActiveDescendant","optionId","handleMenuChange","handleFocusIndicatorDisplay","handleMenuKeyPress","cancelBubble","handleCharacterKeyDown","key","handleMenuValueChange","focusIndicator","shadowRoot","querySelector","classList","add","remove","handleMouseDown","preventDefault","isExternalFiltering","disableFilter","handleClick","menu","filteredOptions","hasTimedOut","loading","noOptions","handleClickOpen","handleExpandIconMouseDown","disabled","handleClear","stopPropagation","timeoutTimer","icClear","customSelectElement","characterKeyPressTimer","handleFilter","handleNativeSelectKeyDown","handleKeyDown","isArrowKey","handleKeyboardOpen","handleClearButtonFocus","clearButtonFocused","handleClearButtonBlur","retryButton","relatedTarget","isGrouped","newFilteredOptions","menuOptionsFiltered","includeGroupTitlesInSearch","indexOf","noChildOptionsWhenFiltered","triggerLoading","loadingLabel","timeout","loadingErrorLabel","timedOut","find","handleSearchableSelectInput","target","icInput","debounceAriaLiveUpdate","updateSearchableSelectResultAriaLive","searchableSelectResultsStatusEl","innerText","getDefaultValue","onFocus","icFocus","onBlur","tagName","isSearchableAndNoFocusedInternalElements","Array","from","querySelectorAll","clearButton","icBlur","onTimeoutBlur","handleFormReset","initialValue","debounce","loadingHandler","newValue","watchOptionsHandler","setDefaultValue","debounceChangedHandler","updateOnChangeDebounce","valueChangedHandler","openChangedHandler","icOpen","icClose","disconnectedCallback","removeFormResetListener","disconnect","componentWillLoad","inheritAttributes","removeDisabledFalse","addFormResetListener","componentDidLoad","onComponentRequiredPropUndefined","prop","propName","MutationObserver","observe","attributes","childList","componentDidRender","setFocus","debounceAria","render","small","size","fullWidth","helperText","hideLabel","name","placeholder","readonly","required","showClearButton","validationStatus","validationText","renderHiddenInput","invalid","IcInformationStatus","Error","describedBy","getInputDescribedByText","hasValidationStatus","trim","showLeftIcon","h","Host","class","for","ref","anchorEl","slot","isMobileOrTablet","onChange","id","onKeyDown","form","selected","role","autocomplete","onInput","onClick","formaction","formenctype","formmethod","formnovalidate","formtarget","innerHTML","Clear","variant","appearance","IcThemeForegroundEnum","Light","Dark","onMouseDown","Expand","undefined","inputEl","inputLabel","selectOnEnter","onMenuStateChange","onMenuOptionSelect","onMenuKeyPress","onMenuValueChange","onUngroupedOptionsSet","onRetryButtonClicked","parentEl","activationType","ariaLiveMode","status","message"],"sources":["src/components/ic-select/ic-select.css?tag=ic-select&encapsulation=shadow","src/components/ic-select/ic-select.tsx"],"sourcesContent":["@import \"../../global/normalize.css\";\n\n/**\n * @prop --input-width: Width of the input field\n * @prop --ic-z-index-menu: z-index of select menu\n */\n\n:host {\n display: block;\n position: relative;\n --ic-input-label-helpertext-padding: var(--ic-space-xxs);\n}\n\n:host(.full-width) {\n width: 100%;\n}\n\nic-input-component-container:hover {\n --border-color: var(--ic-action-dark-hover);\n}\n\nic-input-component-container:active {\n --border-color: var(--ic-action-dark-active);\n\n color: var(--ic-action-dark-active);\n}\n\nic-input-component-container.menu-open {\n --border-color: var(--ic-architectural-400);\n\n color: var(--ic-action-dark);\n}\n\nic-input-validation .status-icon,\nic-input-validation .statustext {\n visibility: visible;\n}\n\nic-input-validation.menu-open .status-icon,\nic-input-validation.menu-open .statustext {\n visibility: hidden;\n transition: visibility 0s;\n}\n\nic-input-label {\n margin-bottom: var(--ic-space-xs) !important;\n}\n\nselect {\n border: 0;\n border-radius: var(--ic-border-radius);\n background-color: var(--ic-architectural-white);\n color: var(--ic-color-primary-text);\n line-height: 1.5rem;\n letter-spacing: 0.005rem;\n width: 100%;\n height: 100%;\n padding-left: 0.375rem;\n appearance: none;\n background-repeat: no-repeat;\n background-position: right 0.375rem center;\n background-image: url(\"data:image/svg+xml;utf8,<svg fill='black' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path d='M7 10l5 5 5-5z'/><path d='M0 0h24v24H0z' fill='none'/></svg>\");\n}\n\nselect option,\n.select-option-selected {\n color: var(--ic-color-primary-text);\n}\n\nselect:disabled {\n color: var(--ic-architectural-200);\n background-image: url(\"data:image/svg+xml;utf8,<svg fill='grey' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path d='M7 10l5 5 5-5z'/><path d='M0 0h24v24H0z' fill='none'/></svg>\");\n}\n\nselect:focus {\n border: 0;\n outline: 0;\n}\n\nselect:not([disabled]) {\n cursor: pointer;\n}\n\n.select-container {\n width: 100%;\n display: flex;\n align-items: center;\n position: relative;\n}\n\n.select-input {\n width: 100%;\n height: 100%;\n padding: 0 0.375rem;\n display: flex;\n cursor: pointer;\n align-items: center;\n justify-content: space-between;\n background: none;\n border: none;\n}\n\n.select-input:focus {\n outline: var(--ic-hc-focus-outline);\n}\n\n:host(:not(.disabled)) ic-input-component-container:hover .select-input {\n background-color: var(--ic-architectural-white);\n}\n\n.select-input[disabled] {\n pointer-events: none;\n}\n\n:host(.searchable) .select-input {\n cursor: auto;\n}\n\n.searchable-select-container {\n align-items: center;\n display: flex;\n width: 100%;\n position: relative;\n}\n\n.expand-icon {\n height: var(--ic-space-lg);\n padding-left: var(--ic-space-xs);\n color: var(--ic-action-dark);\n}\n\n.expand-icon > svg {\n display: inline-block;\n width: var(--ic-space-lg);\n height: var(--ic-space-lg);\n}\n\n:host(.disabled) .expand-icon,\n:host(.disabled) .expand-icon > svg > path {\n color: var(--ic-architectural-200);\n}\n\n:host(.searchable) .expand-icon {\n padding-left: var(--ic-space-xxs);\n height: 2.25rem;\n}\n\n:host(.searchable) .expand-icon > svg {\n height: 2.25rem;\n padding: 0 0.375rem;\n}\n\n:host(.searchable:not(.disabled)) .expand-icon > svg {\n cursor: pointer;\n}\n\n.expand-icon-open {\n color: var(--ic-action-dark);\n}\n\n.expand-icon-filled {\n color: var(--ic-action-dark);\n}\n\n.expand-icon-open,\n:host(.searchable) .expand-icon-open {\n transform: rotateX(180deg);\n}\n\n:host(.disabled) .value-text,\n.placeholder {\n color: var(--ic-color-tertiary-text);\n}\n\n.select-input-end {\n display: flex;\n align-items: center;\n}\n\n.clear-button-container {\n display: flex;\n gap: var(--ic-space-xxs);\n padding-left: 2.375rem;\n align-items: center;\n}\n\n:host(.small) .clear-button-container {\n padding-left: 1.875rem;\n}\n\n.divider {\n width: var(--ic-border-width);\n background-color: var(--ic-architectural-400);\n margin: var(--ic-space-xxs) 0;\n border-radius: var(--ic-space-1px);\n height: var(--ic-space-lg);\n}\n\n:host(.small) .divider {\n height: var(--ic-space-md);\n}\n\n.clear-button {\n position: absolute;\n right: 2.75rem;\n border-radius: var(--ic-border-radius);\n transition: box-shadow var(--ic-easing-transition),\n border-radius var(--ic-easing-transition);\n}\n\n.clear-button:focus {\n background-color: var(--ic-focus-blue);\n box-shadow: inset 0 0 0 0.125rem var(--ic-focus-glow);\n border-radius: 0.25rem;\n}\n\n.clear-button:focus * {\n fill: white;\n}\n\n.searchable-select-results-status {\n border: 0;\n clip: rect(0, 0, 0, 0, 0);\n height: var(--ic-space-1px);\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n width: var(--ic-space-1px);\n}\n\n::slotted([slot=\"icon\"]) {\n fill: var(--ic-color-tertiary-text);\n}\n\n.has-value ::slotted([slot=\"icon\"]) {\n fill: var(--ic-color-primary-text);\n}\n\n.readonly ::slotted([slot=\"icon\"]) {\n padding: 0.375rem;\n margin-bottom: 0.75rem;\n}\n\n@media (forced-colors: active) {\n .has-value ::slotted([slot=\"icon\"]) {\n fill: currentcolor;\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n Host,\n Method,\n Prop,\n h,\n State,\n Watch,\n forceUpdate,\n} from \"@stencil/core\";\n\nimport {\n getInputDescribedByText,\n getLabelFromValue,\n hasValidationStatus,\n inheritAttributes,\n onComponentRequiredPropUndefined,\n renderHiddenInput,\n isMobileOrTablet,\n getFilteredMenuOptions,\n addFormResetListener,\n removeFormResetListener,\n removeDisabledFalse,\n checkSlotInChildMutations,\n} from \"../../utils/helpers\";\nimport { IC_INHERITED_ARIA } from \"../../utils/constants\";\nimport {\n IcInformationStatus,\n IcInformationStatusOrEmpty,\n IcThemeForegroundEnum,\n IcMenuOption,\n IcSearchMatchPositions,\n IcValueEventDetail,\n IcSizes,\n} from \"../../utils/types\";\nimport Expand from \"./assets/Expand.svg\";\nimport Clear from \"./assets/Clear.svg\";\nimport { IcOptionSelectEventDetail } from \"../ic-menu/ic-menu.types\";\n\nlet inputIds = 0;\nconst MUTABLE_ATTRIBUTES = [...IC_INHERITED_ARIA, \"tabindex\", \"title\"];\n\n/**\n * @slot icon - Content will be placed to the left of the select text input.\n */\n@Component({\n tag: \"ic-select\",\n styleUrl: \"ic-select.css\",\n shadow: {\n delegatesFocus: true,\n },\n})\nexport class Select {\n private anchorEl: HTMLElement;\n private blurredBecauseButtonPressed: boolean;\n private characterKeyPressTimer: number;\n private clearButton: HTMLIcButtonElement;\n private customSelectElement: HTMLButtonElement;\n private debounceAria: number;\n private hasSetDefaultValue = false;\n private hasTimedOut: boolean;\n private inheritedAttributes: { [k: string]: string } = {};\n private initialOptionsEmpty = false;\n private inputId = `ic-select-input-${inputIds++}`;\n private menu: HTMLIcMenuElement;\n private menuId = `${this.inputId}-menu`;\n private nativeSelectElement: HTMLSelectElement;\n private retryButtonClick: boolean;\n private searchableMenuItemSelected: boolean = false;\n private searchableSelectElement: HTMLInputElement;\n private timeoutTimer: number;\n private ungroupedOptions: IcMenuOption[] = [];\n private hostMutationObserver: MutationObserver = null;\n\n @Element() el!: HTMLIcSelectElement;\n\n @State() ariaActiveDescendant: string;\n @State() clearButtonFocused: boolean = false;\n @State() debounceIcChange: number;\n @State() hiddenInputValue: string;\n @State() noOptions: IcMenuOption[] = null;\n @State() open: boolean = false;\n @State() pressedCharacters: string = \"\";\n @State() searchableSelectInputValue: string = null;\n\n /**\n * @deprecated This prop should not be used anymore.\n */\n @Prop() charactersUntilSuggestions?: number = 0;\n\n /**\n * If `true`, the disabled state will be set.\n */\n @Prop({ reflect: true }) disabled?: boolean = false;\n\n /**\n * If `true`, the built in filtering will be disabled for a searchable variant. For example, if options will already be filtered from external source.\n */\n @Prop() disableFilter?: boolean = false;\n\n /**\n * The text displayed when there are no options in the option list.\n */\n @Prop() emptyOptionListText = \"No results found\";\n\n /**\n * The <form> element to associate the select with.\n */\n @Prop() form?: string;\n\n /**\n * The URL that processes the information submitted by the select. It overrides the action attribute of the select's form owner. Does nothing if there is no form owner.\n * This prop should only be used with searchable select and will only be applied if searchable is true.\n */\n @Prop() formaction?: string;\n\n /**\n * The way the submitted form data is encoded. This prop should only be used with searchable select and will only be applied if searchable is true.\n */\n @Prop() formenctype?: string;\n\n /**\n * The HTTP method used to submit the form. This prop should only be used with searchable select and will only be applied if searchable is true.\n */\n @Prop() formmethod?: string;\n\n /**\n * If `true`, the form will not be validated when submitted. This prop should only be used with searchable select and will only be applied if searchable is true.\n */\n @Prop() formnovalidate?: boolean;\n\n /**\n * The place to display the response from submitting the form. It overrides the target attribute of the select's form owner.\n * This prop should only be used with searchable select and will only be applied if searchable is true.\n */\n @Prop() formtarget?: string;\n\n /**\n * If `true`, the select element will fill the width of the container. This prop should only be used with searchable select and will only be applied if searchable is true.\n */\n @Prop() fullWidth: boolean = false;\n\n /**\n * The helper text that will be displayed for additional field guidance.\n */\n @Prop() helperText?: string = \"\";\n\n /**\n * If `true`, the label will be hidden and the required label value will be applied as an aria-label.\n */\n @Prop() hideLabel?: boolean = false;\n\n /**\n * If `true`, descriptions of options will be included when filtering options in a searchable select. Only applies to built in filtering.\n */\n @Prop() includeDescriptionsInSearch?: boolean = false;\n\n /**\n * If `true`, group titles of grouped options will be included when filtering options in a searchable select. Only applies to built in filtering.\n */\n @Prop() includeGroupTitlesInSearch?: boolean = false;\n\n /**\n * The label for the select.\n */\n @Prop() label!: string;\n\n /**\n * The message displayed when external loading times out.\n */\n @Prop() loadingErrorLabel?: string = \"Loading Error\";\n\n /**\n * The message displayed whilst the options are being loaded externally.\n */\n @Prop() loadingLabel?: string = \"Loading...\";\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 * The placeholder value to be displayed.\n */\n @Prop() placeholder?: string = \"Select an option\";\n\n /**\n * If `true`, the readonly state will be set.\n */\n @Prop() readonly?: boolean = false;\n\n /**\n * If `true`, the select will require a value.\n */\n @Prop() required?: boolean = false;\n\n /**\n * If `true`, a searchable variant of the select will be displayed which can be typed in to filter options.\n */\n @Prop() searchable?: boolean = false;\n\n /**\n * Whether the search string of the searchable select should match the start of or anywhere in the options. Only applies to built in filtering.\n */\n @Prop() searchMatchPosition?: IcSearchMatchPositions = \"anywhere\";\n\n /**\n * If `true`, the icOptionSelect event will be fired on enter instead of ArrowUp and ArrowDown.\n */\n @Prop() selectOnEnter?: boolean = false;\n\n /**\n * If `true`, a button which clears the select input when clicked will be displayed. The button will always appear on the searchable select.\n */\n @Prop() showClearButton?: boolean = false;\n\n /**\n * The size of the select component.\n */\n @Prop() size?: IcSizes = \"default\";\n\n /**\n * @deprecated This prop should not be used anymore. Set prop `size` to \"small\" instead.\n */\n @Prop() small?: boolean = false;\n\n /**\n * If using external filtering, set a timeout for when loading takes too long.\n */\n @Prop() timeout?: number;\n\n /**\n * The validation status - e.g. 'error' | 'warning' | 'success'.\n */\n @Prop() validationStatus?: IcInformationStatusOrEmpty = \"\";\n\n /**\n * The text to display as the validation message.\n */\n @Prop() validationText?: string = \"\";\n\n /**\n * If `true`, the loading state will be triggered when fetching options asynchronously.\n */\n @Prop({ mutable: true }) loading?: boolean = false;\n\n @Watch(\"loading\")\n loadingHandler(newValue: boolean): void {\n newValue && this.triggerLoading();\n }\n\n /**\n * The possible selection options.\n */\n @Prop() options?: IcMenuOption[] = [];\n @State() filteredOptions: IcMenuOption[] = this.options;\n @State() uniqueOptions: IcMenuOption[] = this.options;\n\n @Watch(\"options\")\n watchOptionsHandler(): void {\n if (!this.hasTimedOut) {\n this.loading = false;\n clearTimeout(this.timeoutTimer);\n if (this.isExternalFiltering()) {\n if (this.options?.length > 0) {\n this.setOptionsValuesFromLabels();\n this.noOptions = null;\n this.uniqueOptions = this.deduplicateOptions(this.options);\n this.filteredOptions = this.uniqueOptions;\n } else {\n this.noOptions = [{ label: this.emptyOptionListText, value: \"\" }];\n this.uniqueOptions = this.noOptions;\n this.filteredOptions = this.noOptions;\n }\n this.updateSearchableSelectResultAriaLive();\n this.setDefaultValue();\n } else {\n this.setOptionsValuesFromLabels();\n this.uniqueOptions = this.deduplicateOptions(this.options);\n this.filteredOptions = this.uniqueOptions;\n if (this.initialOptionsEmpty) {\n this.setDefaultValue();\n this.initialOptionsEmpty = false;\n }\n }\n } else {\n if (!this.searchable) {\n this.options = this.noOptions;\n }\n }\n }\n\n /**\n * The amount of time, in milliseconds, to wait to trigger the `icChange` event after each keystroke.\n */\n @Prop() debounce?: number = 0;\n @State() currDebounce = this.debounce;\n\n @Watch(\"debounce\")\n debounceChangedHandler(newValue: number): void {\n this.updateOnChangeDebounce(newValue);\n }\n\n /**\n * The value of the select, reflected by the value of the currently selected option. For the searchable variant, the value is also reflected by the user input.\n */\n @Prop({ mutable: true }) value?: string;\n @State() initialValue = this.value;\n @State() inputValueToFilter = this.value;\n @State() currValue = this.value;\n\n @Watch(\"value\")\n valueChangedHandler(): void {\n if (this.value !== this.currValue) {\n this.currValue = this.value;\n }\n\n if (this.searchable) {\n this.searchableSelectInputValue =\n this.getLabelFromValue(this.currValue) || this.currValue;\n }\n }\n\n @Watch(\"open\")\n openChangedHandler(): void {\n this.open ? this.icOpen.emit() : this.icClose.emit();\n }\n\n /**\n * Emitted when the select loses focus.\n */\n @Event() icBlur: EventEmitter<void>;\n\n /**\n * Emitted when the value changes.\n */\n @Event() icChange: EventEmitter<IcValueEventDetail>;\n\n /**\n * Emitted when the clear button is clicked.\n */\n @Event() icClear: EventEmitter<void>;\n\n /**\n * Emitted when the select options menu is closed.\n */\n @Event() icClose: EventEmitter<void>;\n\n /**\n * Emitted when the select gains focus.\n */\n @Event() icFocus: EventEmitter<void>;\n\n /**\n * Emitted when a keyboard input occurred.\n */\n @Event() icInput: EventEmitter<IcValueEventDetail>;\n\n /**\n * Emitted when the select options menu is opened.\n */\n @Event() icOpen: EventEmitter<void>;\n\n /**\n * Emitted when an option is highlighted within the menu.\n * Highlighting a menu item will also trigger an `icChange/onIcChange` due to the value being updated.\n */\n @Event() icOptionSelect: EventEmitter<IcOptionSelectEventDetail>;\n\n /**\n * Emitted when the 'retry loading' button is clicked for a searchable variant.\n */\n @Event() icRetryLoad: EventEmitter<IcValueEventDetail>;\n\n disconnectedCallback(): void {\n removeFormResetListener(this.el, this.handleFormReset);\n this.hostMutationObserver?.disconnect();\n }\n\n componentWillLoad(): void {\n this.inheritedAttributes = inheritAttributes(this.el, MUTABLE_ATTRIBUTES);\n\n removeDisabledFalse(this.disabled, this.el);\n\n this.setOptionsValuesFromLabels();\n\n addFormResetListener(this.el, this.handleFormReset);\n\n if (!this.options?.length) {\n this.initialOptionsEmpty = true;\n this.noOptions = [{ label: this.emptyOptionListText, value: \"\" }];\n this.uniqueOptions = this.noOptions;\n this.filteredOptions = this.noOptions;\n } else {\n this.setDefaultValue();\n this.uniqueOptions = this.deduplicateOptions(this.options);\n }\n }\n\n componentDidLoad(): void {\n onComponentRequiredPropUndefined(\n [{ prop: this.label, propName: \"label\" }],\n \"Select\"\n );\n\n if (this.loading) {\n this.triggerLoading();\n }\n this.hiddenInputValue = this.searchable && this.currValue;\n\n this.hostMutationObserver = new MutationObserver(this.hostMutationCallback);\n this.hostMutationObserver.observe(this.el, {\n attributes: true,\n childList: true,\n });\n }\n\n componentDidRender(): void {\n if (this.nativeSelectElement && !this.disabled) {\n this.setTextColor();\n }\n }\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 // triggered when attributes of host element change\n private hostMutationCallback = (mutationList: MutationRecord[]): void => {\n let forceComponentUpdate = false;\n mutationList.forEach(\n ({ attributeName, type, addedNodes, removedNodes }) => {\n if (MUTABLE_ATTRIBUTES.includes(attributeName)) {\n this.inheritedAttributes[attributeName] =\n this.el.getAttribute(attributeName);\n forceComponentUpdate = true;\n } else if (type === \"childList\") {\n forceComponentUpdate = checkSlotInChildMutations(\n addedNodes,\n removedNodes,\n \"icon\"\n );\n }\n }\n );\n if (forceComponentUpdate) {\n forceUpdate(this);\n }\n };\n\n private handleRetry = (ev: CustomEvent<IcValueEventDetail>) => {\n if (ev.detail.keyPressed) this.searchableSelectElement?.focus();\n this.blurredBecauseButtonPressed = true;\n this.retryButtonClick = true;\n this.hasSetDefaultValue = true;\n this.icRetryLoad.emit({ value: this.hiddenInputValue });\n };\n\n private updateOnChangeDebounce(newValue: number) {\n if (this.currDebounce !== newValue) {\n this.currDebounce = newValue;\n }\n }\n\n private emitIcChange = (value: string) => {\n if (!this.searchable) {\n this.value = value;\n }\n\n clearTimeout(this.debounceIcChange);\n this.debounceIcChange = window.setTimeout(() => {\n this.icChange.emit({ value: value });\n }, this.currDebounce);\n };\n\n private emitImmediateIcChange = (value: string) => {\n this.value = value;\n clearTimeout(this.debounceIcChange);\n this.icChange.emit({ value: value });\n };\n\n /**\n * Processes the provided array of IcMenuOptions, removing duplicates and reporting them with a console.warn\n * @param options array of IcMenuOptions\n * @returns a new options object, with all entries possessing a duplicate 'value' field removed\n */\n private deduplicateOptions = (options: IcMenuOption[]): IcMenuOption[] => {\n const uniqueValues: string[] = [];\n const dedupedOptions: IcMenuOption[] = [];\n let dedupedChildren: IcMenuOption[];\n\n options.forEach((option: IcMenuOption) => {\n if (option.children) {\n //If an option has children, we will loop through them\n dedupedChildren = [];\n option.children.forEach((child) => {\n if (uniqueValues.includes(child.value)) {\n console.warn(\n `ic-select with label ${this.label} was populated with duplicate option (value: ${child.value}) which has been removed.`\n );\n } else {\n uniqueValues.push(child.value);\n dedupedChildren.push(child);\n }\n });\n // construct a modified option, inserting the deduplicated children alongside the original information\n const modifiedParent: IcMenuOption = {\n ...option,\n children: dedupedChildren,\n };\n dedupedOptions.push(modifiedParent);\n } else {\n // If an option does not have children, assess to see if it's value has been included already\n if (uniqueValues.includes(option.value)) {\n console.warn(\n `ic-select with label ${this.label} was populated with duplicate option (value: ${option.value}) which has been removed.`\n );\n } else {\n uniqueValues.push(option.value);\n dedupedOptions.push(option);\n }\n }\n });\n return dedupedOptions;\n };\n\n /**\n * Loop through options array and for all options with no value, infer it from the label\n */\n private setOptionsValuesFromLabels = (): void => {\n if (this.options?.length > 0 && this.options.map) {\n this.options.map((option) => {\n if (!option.value) {\n option.value = option.label;\n }\n });\n }\n };\n\n private setUngroupedOptions = (event: CustomEvent): void => {\n this.ungroupedOptions = event.detail.options;\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.uniqueOptions);\n };\n\n private getFilteredChildMenuOptions = (option: IcMenuOption) => {\n let children = option.children;\n\n if (this.searchable) {\n children = getFilteredMenuOptions(\n option.children,\n this.includeDescriptionsInSearch,\n this.searchableSelectInputValue,\n this.searchMatchPosition\n );\n } else {\n children = getFilteredMenuOptions(\n option.children,\n false,\n this.pressedCharacters,\n \"start\"\n );\n }\n\n const newOption = { ...option };\n newOption.children = children;\n return newOption;\n };\n\n private handleNativeSelectChange = (): void => {\n this.icOptionSelect.emit({ value: this.nativeSelectElement.value });\n this.emitImmediateIcChange(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.value = event.detail.value;\n this.searchableMenuItemSelected = true;\n\n // After editing the input, if selecting the same option as before, set the input value to label again\n if (this.value === this.currValue) {\n this.searchableSelectInputValue = this.getLabelFromValue(this.value);\n }\n\n this.inputValueToFilter = null;\n this.hiddenInputValue = this.getValueFromLabel(\n this.searchableSelectInputValue\n );\n }\n\n this.ariaActiveDescendant = event.detail.optionId;\n this.icOptionSelect.emit({ value: event.detail.value });\n this.emitIcChange(event.detail.value);\n };\n\n private handleMenuChange = (event: CustomEvent): void => {\n this.open = event.detail.open;\n this.pressedCharacters = \"\";\n\n this.searchable && this.handleFocusIndicatorDisplay();\n };\n\n // clears the debounce delay when navigating the menu with arrow keys etc\n // to prevent delay in change event, which should only occur when typing in input\n private handleMenuKeyPress = (ev: CustomEvent): void => {\n ev.cancelBubble = true;\n this.handleCharacterKeyDown(ev.detail.key);\n };\n\n private handleMenuValueChange = (ev: CustomEvent): void => {\n this.value = ev.detail.value;\n };\n\n private handleFocusIndicatorDisplay = () => {\n const focusIndicator = this.el.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 isExternalFiltering = (): boolean =>\n this.searchable && this.disableFilter;\n\n private handleClick = (event: MouseEvent): void => {\n if (!this.open) {\n if (this.isExternalFiltering()) {\n this.menu.options = this.filteredOptions;\n } else if (\n !this.hasTimedOut &&\n !this.loading &&\n !this.noOptions?.length &&\n (!this.searchable || this.searchableMenuItemSelected)\n ) {\n this.noOptions = null;\n this.menu.options = this.uniqueOptions;\n }\n }\n\n if (event.detail !== 0) {\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.hasTimedOut = false;\n clearTimeout(this.timeoutTimer);\n this.noOptions = null;\n this.emitImmediateIcChange(null);\n this.icClear.emit();\n\n if (this.searchable) {\n this.searchableSelectElement.value = null;\n this.searchableSelectInputValue = null;\n this.filteredOptions = this.uniqueOptions;\n this.hiddenInputValue = null;\n this.searchableSelectElement.focus();\n } else {\n this.customSelectElement.focus();\n }\n };\n\n private handleCharacterKeyDown = (key: string) => {\n // Only close menu when space is pressed if not being used alongside character keys to quickly select options\n if (\n this.open &&\n key === \" \" &&\n this.pressedCharacters.length === 0 &&\n !this.hasTimedOut &&\n !this.loading\n ) {\n this.setMenuChange(false);\n }\n\n if (key.length === 1 && !this.searchable) {\n window.clearTimeout(this.characterKeyPressTimer);\n this.characterKeyPressTimer = window.setTimeout(\n () => (this.pressedCharacters = \"\"),\n 1000\n );\n\n this.pressedCharacters += key;\n this.handleFilter();\n\n if (!this.noOptions) {\n this.emitImmediateIcChange(this.filteredOptions[0].value);\n }\n } else {\n this.pressedCharacters = \"\";\n }\n };\n\n private handleNativeSelectKeyDown = (event: KeyboardEvent) => {\n if ((event.key !== \"Escape\" && event.key !== \"Tab\") || this.open) {\n event.cancelBubble = true;\n }\n this.handleCharacterKeyDown(event.key);\n };\n\n private handleKeyDown = (event: KeyboardEvent): void => {\n if ((event.key !== \"Escape\" && event.key !== \"Tab\") || this.open) {\n event.cancelBubble = true;\n }\n const isArrowKey = event.key === \"ArrowDown\" || event.key === \"ArrowUp\";\n\n if (!this.open) {\n if (this.isExternalFiltering() && (event.key === \"Enter\" || isArrowKey)) {\n this.menu.options = this.filteredOptions;\n } else {\n if (!this.hasTimedOut) {\n this.noOptions = null;\n this.menu.options = this.uniqueOptions;\n }\n }\n }\n\n if (this.open && event.key === \"Enter\") {\n this.setMenuChange(false);\n } else {\n if (!(isArrowKey && this.noOptions !== null)) {\n if (!(event.key === \" \" && this.pressedCharacters.length > 0)) {\n // Keyboard events get passed onto ic-menu\n this.menu.handleKeyboardOpen(event);\n }\n this.handleCharacterKeyDown(event.key);\n }\n }\n };\n\n private handleClearButtonFocus = (): void => {\n this.clearButtonFocused = true;\n };\n\n private handleClearButtonBlur = (ev: FocusEvent): void => {\n const retryButton = this.menu?.querySelector(\"#retry-button\");\n if (\n !(\n this.searchableSelectElement &&\n ev.relatedTarget === this.searchableSelectElement\n ) &&\n !(retryButton && ev.relatedTarget === retryButton)\n ) {\n this.setMenuChange(false);\n this.handleFocusIndicatorDisplay();\n }\n this.clearButtonFocused = false;\n };\n\n private handleFilter = (): void => {\n const options = this.deduplicateOptions(\n this.searchable ? [...this.uniqueOptions] : this.ungroupedOptions\n );\n\n let isGrouped = false;\n let newFilteredOptions: IcMenuOption[] = [];\n\n options.map((option) => {\n if (option.children) isGrouped = true;\n });\n\n let menuOptionsFiltered: IcMenuOption[];\n\n if (this.searchable) {\n menuOptionsFiltered = getFilteredMenuOptions(\n options,\n this.includeDescriptionsInSearch,\n this.inputValueToFilter,\n this.searchMatchPosition\n );\n this.searchableMenuItemSelected = false;\n } else {\n menuOptionsFiltered = getFilteredMenuOptions(\n options,\n false,\n this.pressedCharacters,\n \"start\"\n );\n }\n\n if (\n !isGrouped &&\n menuOptionsFiltered[0]?.label !== this.emptyOptionListText\n ) {\n newFilteredOptions = menuOptionsFiltered;\n } else if (isGrouped) {\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 if (newFilteredOptions.length > 0 && !noChildOptionsWhenFiltered) {\n this.noOptions = null;\n this.filteredOptions = newFilteredOptions;\n } else {\n this.noOptions = [{ label: this.emptyOptionListText, value: \"\" }];\n this.filteredOptions = this.noOptions;\n }\n };\n\n /**\n * Put the select component into loading state.\n * Replace options with the loading message. If timeout is enabled, set the timeout and once passed, replace options with the loading error message\n */\n private triggerLoading = () => {\n this.hasTimedOut = false;\n this.noOptions = [{ label: this.loadingLabel, value: \"\", loading: true }];\n if (this.filteredOptions !== this.noOptions && this.searchable) {\n this.filteredOptions = this.noOptions;\n } else if (this.uniqueOptions !== this.noOptions && !this.searchable) {\n this.uniqueOptions = this.noOptions;\n }\n if (this.timeout) {\n this.timeoutTimer = window.setTimeout(() => {\n this.loading = false;\n this.hasTimedOut = true;\n this.noOptions = [\n { label: this.loadingErrorLabel, value: \"\", timedOut: true },\n ];\n this.filteredOptions = this.noOptions;\n if (!this.searchable) this.uniqueOptions = this.noOptions;\n }, this.timeout);\n }\n };\n\n private getValueFromLabel = (label: string): string | undefined => {\n return this.uniqueOptions.find((option) => option.label === label)?.value;\n };\n\n private handleSearchableSelectInput = (event: Event): void => {\n this.searchableSelectInputValue = (event.target as HTMLInputElement).value;\n this.icInput.emit({ value: this.searchableSelectInputValue });\n this.emitIcChange(this.searchableSelectInputValue);\n\n this.hiddenInputValue = this.searchableSelectInputValue;\n this.inputValueToFilter = this.searchableSelectInputValue;\n this.setMenuChange(true);\n\n if (!this.disableFilter) {\n this.handleFilter();\n this.debounceAriaLiveUpdate();\n }\n };\n\n private updateSearchableSelectResultAriaLive = (): void => {\n const searchableSelectResultsStatusEl = this.el.shadowRoot.querySelector(\n \".searchable-select-results-status\"\n ) as HTMLDivElement;\n\n if (searchableSelectResultsStatusEl) {\n if (this.noOptions !== null) {\n searchableSelectResultsStatusEl.innerText = this.emptyOptionListText;\n } else {\n searchableSelectResultsStatusEl.innerText = \"\";\n }\n }\n };\n\n private debounceAriaLiveUpdate() {\n clearTimeout(this.debounceAria);\n\n window.setTimeout(() => {\n this.updateSearchableSelectResultAriaLive();\n }, 800);\n }\n\n private getDefaultValue = (value: string): string | null =>\n this.getLabelFromValue(value) || value || null;\n\n private setDefaultValue() {\n if (!this.hasSetDefaultValue && this.currValue) {\n this.searchableSelectInputValue = this.getDefaultValue(this.currValue);\n this.initialValue = this.currValue;\n this.hasSetDefaultValue = true;\n }\n }\n\n private onFocus = (): void => {\n this.icFocus.emit();\n };\n\n private onBlur = ({ relatedTarget }: FocusEvent): void => {\n const target = relatedTarget as HTMLElement;\n if (\n target !== null &&\n ((target.tagName === \"UL\" && target.className.includes(\"menu\")) ||\n (target.tagName === \"LI\" && target.className.includes(\"option\")))\n ) {\n return;\n }\n\n const retryButton = this.menu?.querySelector(\"#retry-button\");\n const isSearchableAndNoFocusedInternalElements =\n this.searchable &&\n !!this.menu &&\n target !== this.menu &&\n !Array.from(this.menu.querySelectorAll(\"[role='option']\")).includes(\n target\n ) &&\n !(this.clearButton && target === this.clearButton) &&\n !(retryButton && target === retryButton);\n\n if (isSearchableAndNoFocusedInternalElements) {\n if (!this.retryButtonClick) {\n this.setMenuChange(false);\n }\n this.handleFocusIndicatorDisplay();\n }\n\n this.retryButtonClick = false;\n this.icBlur.emit();\n };\n\n private onTimeoutBlur = (ev: CustomEvent) => {\n if (\n (ev.detail.ev as FocusEvent).relatedTarget !==\n this.searchableSelectElement &&\n !this.blurredBecauseButtonPressed\n ) {\n this.setMenuChange(false);\n this.handleFocusIndicatorDisplay();\n this.icBlur.emit();\n }\n this.blurredBecauseButtonPressed = false;\n };\n\n private handleFormReset = (): void => {\n this.value = this.initialValue;\n if (this.searchable) {\n this.searchableSelectInputValue = this.getDefaultValue(this.value);\n this.hiddenInputValue = this.value;\n }\n };\n\n render() {\n const {\n small,\n size,\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 currValue,\n } = this;\n\n renderHiddenInput(\n true,\n this.el,\n name,\n this.searchable ? this.hiddenInputValue : currValue,\n disabled\n );\n\n const invalid = `${validationStatus === IcInformationStatus.Error}`;\n\n const describedBy = getInputDescribedByText(\n this.inputId,\n helperText !== \"\",\n hasValidationStatus(this.validationStatus, this.disabled)\n ).trim();\n\n let showLeftIcon = !!this.el.querySelector(`[slot=\"icon\"]`);\n if (showLeftIcon && (disabled || (readonly && !this.value))) {\n showLeftIcon = false;\n }\n\n return (\n <Host\n class={{\n disabled,\n searchable,\n small,\n [size]: size !== \"default\",\n \"full-width\": fullWidth,\n }}\n onBlur={this.onBlur}\n >\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 small={small}\n size={size}\n fullWidth={fullWidth}\n disabled={disabled}\n readonly={readonly}\n validationStatus={validationStatus}\n >\n {showLeftIcon && (\n <span\n slot=\"left-icon\"\n class={{\n [\"readonly\"]: readonly,\n [\"has-value\"]: !!this.value,\n }}\n >\n <slot name=\"icon\" />\n </span>\n )}\n {readonly ? (\n <ic-typography>\n <p>{this.getLabelFromValue(currValue)}</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 onKeyDown={this.handleNativeSelectKeyDown}\n form={this.form}\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 === currValue}\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 === currValue}\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 autocomplete=\"off\"\n aria-label={label}\n aria-describedby={describedBy}\n aria-activedescendant={this.ariaActiveDescendant}\n aria-autocomplete=\"list\"\n aria-expanded={`${this.open}`}\n aria-invalid={invalid}\n aria-required={`${required}`}\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 form={this.form}\n formaction={this.formaction}\n formenctype={this.formenctype}\n formmethod={this.formmethod}\n formnovalidate={this.formnovalidate}\n formtarget={this.formtarget}\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 && currValue === 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={size}\n variant=\"icon\"\n appearance={\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\": !(\n currValue == null || currValue === \"\"\n ),\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(currValue) || 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:\n this.getLabelFromValue(currValue) === undefined,\n }}\n >\n {this.getLabelFromValue(currValue) || placeholder}\n </ic-typography>\n <div class=\"select-input-end\">\n {currValue && showClearButton && (\n <div class=\"divider\"></div>\n )}\n <span\n class={{\n \"expand-icon\": true,\n \"expand-icon-open\": this.open,\n \"expand-icon-filled\": !(\n currValue == null || currValue === \"\"\n ),\n }}\n innerHTML={Expand}\n aria-hidden=\"true\"\n />\n </div>\n </button>\n {currValue && 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={size}\n variant=\"icon\"\n appearance={\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\":\n this.loading ||\n this.hasTimedOut ||\n (this.noOptions !== null &&\n this.noOptions[0] &&\n this.noOptions[0].label === this.emptyOptionListText),\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 small={small}\n size={size}\n menuId={menuId}\n open={this.open}\n options={searchable ? this.filteredOptions : this.uniqueOptions}\n value={currValue}\n fullWidth={fullWidth}\n selectOnEnter={this.selectOnEnter}\n onMenuStateChange={this.handleMenuChange}\n onMenuOptionSelect={this.handleCustomSelectChange}\n onMenuKeyPress={this.handleMenuKeyPress}\n onMenuValueChange={this.handleMenuValueChange}\n onUngroupedOptionsSet={this.setUngroupedOptions}\n onRetryButtonClicked={this.handleRetry}\n parentEl={this.el}\n onTimeoutBlur={this.onTimeoutBlur}\n activationType={\n this.searchable || this.selectOnEnter ? \"manual\" : \"automatic\"\n }\n ></ic-menu>\n )}\n {hasValidationStatus(this.validationStatus, this.disabled) && (\n <ic-input-validation\n class={{ \"menu-open\": this.open }}\n ariaLiveMode=\"polite\"\n status={validationStatus}\n message={validationText}\n for={this.inputId}\n ></ic-input-validation>\n )}\n </ic-input-container>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["icSelectCss","inputIds","MUTABLE_ATTRIBUTES","IC_INHERITED_ARIA","Select","this","hasSetDefaultValue","inheritedAttributes","initialOptionsEmpty","inputId","menuId","searchableMenuItemSelected","ungroupedOptions","hostMutationObserver","hostMutationCallback","mutationList","forceComponentUpdate","forEach","attributeName","type","addedNodes","removedNodes","includes","el","getAttribute","checkSlotInChildMutations","forceUpdate","handleRetry","ev","detail","keyPressed","_a","searchableSelectElement","focus","blurredBecauseButtonPressed","retryButtonClick","icRetryLoad","emit","value","hiddenInputValue","emitIcChange","searchable","clearTimeout","debounceIcChange","window","setTimeout","icChange","currDebounce","emitImmediateIcChange","deduplicateOptions","options","uniqueValues","dedupedOptions","dedupedChildren","option","children","child","console","warn","label","push","modifiedParent","Object","assign","setOptionsValuesFromLabels","length","map","setUngroupedOptions","event","setTextColor","nativeSelectElement","selectedIndex","className","setMenuChange","open","getLabelFromValue","uniqueOptions","getFilteredChildMenuOptions","getFilteredMenuOptions","includeDescriptionsInSearch","searchableSelectInputValue","searchMatchPosition","pressedCharacters","newOption","handleNativeSelectChange","icOptionSelect","handleCustomSelectChange","emptyOptionListText","currValue","inputValueToFilter","getValueFromLabel","ariaActiveDescendant","optionId","handleMenuChange","handleFocusIndicatorDisplay","handleMenuKeyPress","cancelBubble","handleCharacterKeyDown","key","handleMenuValueChange","focusIndicator","shadowRoot","querySelector","classList","add","remove","handleMouseDown","preventDefault","isExternalFiltering","disableFilter","handleClick","menu","filteredOptions","hasTimedOut","loading","noOptions","handleClickOpen","handleExpandIconMouseDown","disabled","handleClear","stopPropagation","timeoutTimer","icClear","customSelectElement","characterKeyPressTimer","handleFilter","handleNativeSelectKeyDown","handleKeyDown","isArrowKey","handleKeyboardOpen","handleClearButtonFocus","clearButtonFocused","handleClearButtonBlur","retryButton","relatedTarget","isGrouped","newFilteredOptions","menuOptionsFiltered","includeGroupTitlesInSearch","indexOf","noChildOptionsWhenFiltered","triggerLoading","loadingLabel","timeout","loadingErrorLabel","timedOut","find","handleSearchableSelectInput","target","icInput","debounceAriaLiveUpdate","updateSearchableSelectResultAriaLive","searchableSelectResultsStatusEl","innerText","getDefaultValue","onFocus","icFocus","onBlur","tagName","isSearchableAndNoFocusedInternalElements","Array","from","querySelectorAll","clearButton","icBlur","onTimeoutBlur","handleFormReset","initialValue","debounce","loadingHandler","newValue","watchOptionsHandler","setDefaultValue","debounceChangedHandler","updateOnChangeDebounce","valueChangedHandler","openChangedHandler","icOpen","icClose","disconnectedCallback","removeFormResetListener","disconnect","componentWillLoad","inheritAttributes","removeDisabledFalse","addFormResetListener","componentDidLoad","onComponentRequiredPropUndefined","prop","propName","MutationObserver","observe","attributes","childList","componentDidRender","setFocus","debounceAria","render","small","size","fullWidth","helperText","hideLabel","name","placeholder","readonly","required","showClearButton","validationStatus","validationText","renderHiddenInput","invalid","IcInformationStatus","Error","describedBy","getInputDescribedByText","hasValidationStatus","trim","showLeftIcon","h","Host","class","for","ref","anchorEl","slot","isMobileOrTablet","onChange","id","onKeyDown","form","selected","role","autocomplete","onInput","onClick","formaction","formenctype","formmethod","formnovalidate","formtarget","innerHTML","Clear","variant","appearance","IcThemeForegroundEnum","Light","Dark","onMouseDown","Expand","undefined","inputEl","inputLabel","selectOnEnter","onMenuStateChange","onMenuOptionSelect","onMenuKeyPress","onMenuValueChange","onUngroupedOptionsSet","onRetryButtonClicked","parentEl","activationType","ariaLiveMode","status","message"],"sources":["src/components/ic-select/ic-select.css?tag=ic-select&encapsulation=shadow","src/components/ic-select/ic-select.tsx"],"sourcesContent":["@import \"../../global/normalize.css\";\n\n/**\n * @prop --input-width: Width of the input field\n * @prop --ic-z-index-menu: z-index of select menu\n */\n\n:host {\n display: block;\n position: relative;\n\n --ic-input-label-helpertext-padding: var(--ic-space-xxs);\n}\n\n:host(.full-width) {\n width: 100%;\n}\n\nic-input-component-container:hover {\n --border-color: var(--ic-action-dark-hover);\n}\n\nic-input-component-container:active {\n --border-color: var(--ic-action-dark-active);\n\n color: var(--ic-action-dark-active);\n}\n\nic-input-component-container.menu-open {\n --border-color: var(--ic-architectural-400);\n\n color: var(--ic-action-dark);\n}\n\nic-input-validation .status-icon,\nic-input-validation .statustext {\n visibility: visible;\n}\n\nic-input-validation.menu-open .status-icon,\nic-input-validation.menu-open .statustext {\n visibility: hidden;\n transition: visibility 0s;\n}\n\nic-input-label {\n margin-bottom: var(--ic-space-xs) !important;\n}\n\nselect {\n border: 0;\n border-radius: var(--ic-border-radius);\n background-color: var(--ic-architectural-white);\n color: var(--ic-color-primary-text);\n line-height: 1.5rem;\n letter-spacing: 0.005rem;\n width: 100%;\n height: 100%;\n padding-left: 0.375rem;\n appearance: none;\n background-repeat: no-repeat;\n background-position: right 0.375rem center;\n background-image: url(\"data:image/svg+xml;utf8,<svg fill='black' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path d='M7 10l5 5 5-5z'/><path d='M0 0h24v24H0z' fill='none'/></svg>\");\n}\n\nselect option,\n.select-option-selected {\n color: var(--ic-color-primary-text);\n}\n\nselect:disabled {\n color: var(--ic-architectural-200);\n background-image: url(\"data:image/svg+xml;utf8,<svg fill='grey' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'><path d='M7 10l5 5 5-5z'/><path d='M0 0h24v24H0z' fill='none'/></svg>\");\n}\n\nselect:focus {\n border: 0;\n outline: 0;\n}\n\nselect:not([disabled]) {\n cursor: pointer;\n}\n\n.select-container {\n width: 100%;\n display: flex;\n align-items: center;\n position: relative;\n}\n\n.select-input {\n width: 100%;\n height: 100%;\n padding: 0 0.375rem;\n display: flex;\n cursor: pointer;\n align-items: center;\n justify-content: space-between;\n background: none;\n border: none;\n}\n\n.select-input:focus {\n outline: var(--ic-hc-focus-outline);\n}\n\n:host(:not(.disabled)) ic-input-component-container:hover .select-input {\n background-color: var(--ic-architectural-white);\n}\n\n.select-input[disabled] {\n pointer-events: none;\n}\n\n:host(.searchable) .select-input {\n cursor: auto;\n}\n\n.searchable-select-container {\n align-items: center;\n display: flex;\n width: 100%;\n position: relative;\n}\n\n.expand-icon {\n height: var(--ic-space-lg);\n padding-left: var(--ic-space-xs);\n color: var(--ic-action-dark);\n}\n\n.expand-icon > svg {\n display: inline-block;\n width: var(--ic-space-lg);\n height: var(--ic-space-lg);\n}\n\n:host(.disabled) .expand-icon,\n:host(.disabled) .expand-icon > svg > path {\n color: var(--ic-architectural-200);\n}\n\n:host(.searchable) .expand-icon {\n padding-left: var(--ic-space-xxs);\n height: 2.25rem;\n}\n\n:host(.searchable) .expand-icon > svg {\n height: 2.25rem;\n padding: 0 0.375rem;\n}\n\n:host(.searchable:not(.disabled)) .expand-icon > svg {\n cursor: pointer;\n}\n\n.expand-icon-open {\n color: var(--ic-action-dark);\n}\n\n.expand-icon-filled {\n color: var(--ic-action-dark);\n}\n\n.expand-icon-open,\n:host(.searchable) .expand-icon-open {\n transform: rotateX(180deg);\n}\n\n:host(.disabled) .value-text,\n.placeholder {\n color: var(--ic-color-tertiary-text);\n}\n\n.select-input-end {\n display: flex;\n align-items: center;\n}\n\n.clear-button-container {\n display: flex;\n gap: var(--ic-space-xxs);\n padding-left: 2.375rem;\n align-items: center;\n}\n\n:host(.small) .clear-button-container {\n padding-left: 1.875rem;\n}\n\n.divider {\n width: var(--ic-border-width);\n background-color: var(--ic-architectural-400);\n margin: var(--ic-space-xxs) 0;\n border-radius: var(--ic-space-1px);\n height: var(--ic-space-lg);\n}\n\n:host(.small) .divider {\n height: var(--ic-space-md);\n}\n\n.clear-button {\n position: absolute;\n right: 2.75rem;\n border-radius: var(--ic-border-radius);\n transition: box-shadow var(--ic-easing-transition),\n border-radius var(--ic-easing-transition);\n}\n\n.clear-button:focus {\n background-color: var(--ic-focus-blue);\n box-shadow: inset 0 0 0 0.125rem var(--ic-focus-glow);\n border-radius: 0.25rem;\n}\n\n.clear-button:focus * {\n fill: white;\n}\n\n.searchable-select-results-status {\n border: 0;\n clip: rect(0, 0, 0, 0, 0);\n height: var(--ic-space-1px);\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n width: var(--ic-space-1px);\n}\n\n::slotted([slot=\"icon\"]) {\n fill: var(--ic-color-tertiary-text);\n}\n\n.has-value ::slotted([slot=\"icon\"]) {\n fill: var(--ic-color-primary-text);\n}\n\n.readonly ::slotted([slot=\"icon\"]) {\n padding: 0.375rem;\n margin-bottom: 0.75rem;\n}\n\n@media (forced-colors: active) {\n .has-value ::slotted([slot=\"icon\"]) {\n fill: currentcolor;\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n Host,\n Method,\n Prop,\n h,\n State,\n Watch,\n forceUpdate,\n} from \"@stencil/core\";\n\nimport {\n getInputDescribedByText,\n getLabelFromValue,\n hasValidationStatus,\n inheritAttributes,\n onComponentRequiredPropUndefined,\n renderHiddenInput,\n isMobileOrTablet,\n getFilteredMenuOptions,\n addFormResetListener,\n removeFormResetListener,\n removeDisabledFalse,\n checkSlotInChildMutations,\n} from \"../../utils/helpers\";\nimport { IC_INHERITED_ARIA } from \"../../utils/constants\";\nimport {\n IcInformationStatus,\n IcInformationStatusOrEmpty,\n IcThemeForegroundEnum,\n IcMenuOption,\n IcSearchMatchPositions,\n IcValueEventDetail,\n IcSizes,\n} from \"../../utils/types\";\nimport Expand from \"./assets/Expand.svg\";\nimport Clear from \"./assets/Clear.svg\";\nimport { IcOptionSelectEventDetail } from \"../ic-menu/ic-menu.types\";\n\nlet inputIds = 0;\nconst MUTABLE_ATTRIBUTES = [...IC_INHERITED_ARIA, \"tabindex\", \"title\"];\n\n/**\n * @slot icon - Content will be placed to the left of the select text input.\n */\n@Component({\n tag: \"ic-select\",\n styleUrl: \"ic-select.css\",\n shadow: {\n delegatesFocus: true,\n },\n})\nexport class Select {\n private anchorEl: HTMLElement;\n private blurredBecauseButtonPressed: boolean;\n private characterKeyPressTimer: number;\n private clearButton: HTMLIcButtonElement;\n private customSelectElement: HTMLButtonElement;\n private debounceAria: number;\n private hasSetDefaultValue = false;\n private hasTimedOut: boolean;\n private inheritedAttributes: { [k: string]: string } = {};\n private initialOptionsEmpty = false;\n private inputId = `ic-select-input-${inputIds++}`;\n private menu: HTMLIcMenuElement;\n private menuId = `${this.inputId}-menu`;\n private nativeSelectElement: HTMLSelectElement;\n private retryButtonClick: boolean;\n private searchableMenuItemSelected: boolean = false;\n private searchableSelectElement: HTMLInputElement;\n private timeoutTimer: number;\n private ungroupedOptions: IcMenuOption[] = [];\n private hostMutationObserver: MutationObserver = null;\n\n @Element() el!: HTMLIcSelectElement;\n\n @State() ariaActiveDescendant: string;\n @State() clearButtonFocused: boolean = false;\n @State() debounceIcChange: number;\n @State() hiddenInputValue: string;\n @State() noOptions: IcMenuOption[] = null;\n @State() open: boolean = false;\n @State() pressedCharacters: string = \"\";\n @State() searchableSelectInputValue: string = null;\n\n /**\n * @deprecated This prop should not be used anymore.\n */\n @Prop() charactersUntilSuggestions?: number = 0;\n\n /**\n * If `true`, the disabled state will be set.\n */\n @Prop({ reflect: true }) disabled?: boolean = false;\n\n /**\n * If `true`, the built in filtering will be disabled for a searchable variant. For example, if options will already be filtered from external source.\n */\n @Prop() disableFilter?: boolean = false;\n\n /**\n * The text displayed when there are no options in the option list.\n */\n @Prop() emptyOptionListText = \"No results found\";\n\n /**\n * The <form> element to associate the select with.\n */\n @Prop() form?: string;\n\n /**\n * The URL that processes the information submitted by the select. It overrides the action attribute of the select's form owner. Does nothing if there is no form owner.\n * This prop should only be used with searchable select and will only be applied if searchable is true.\n */\n @Prop() formaction?: string;\n\n /**\n * The way the submitted form data is encoded. This prop should only be used with searchable select and will only be applied if searchable is true.\n */\n @Prop() formenctype?: string;\n\n /**\n * The HTTP method used to submit the form. This prop should only be used with searchable select and will only be applied if searchable is true.\n */\n @Prop() formmethod?: string;\n\n /**\n * If `true`, the form will not be validated when submitted. This prop should only be used with searchable select and will only be applied if searchable is true.\n */\n @Prop() formnovalidate?: boolean;\n\n /**\n * The place to display the response from submitting the form. It overrides the target attribute of the select's form owner.\n * This prop should only be used with searchable select and will only be applied if searchable is true.\n */\n @Prop() formtarget?: string;\n\n /**\n * If `true`, the select element will fill the width of the container. This prop should only be used with searchable select and will only be applied if searchable is true.\n */\n @Prop() fullWidth: boolean = false;\n\n /**\n * The helper text that will be displayed for additional field guidance.\n */\n @Prop() helperText?: string = \"\";\n\n /**\n * If `true`, the label will be hidden and the required label value will be applied as an aria-label.\n */\n @Prop() hideLabel?: boolean = false;\n\n /**\n * If `true`, descriptions of options will be included when filtering options in a searchable select. Only applies to built in filtering.\n */\n @Prop() includeDescriptionsInSearch?: boolean = false;\n\n /**\n * If `true`, group titles of grouped options will be included when filtering options in a searchable select. Only applies to built in filtering.\n */\n @Prop() includeGroupTitlesInSearch?: boolean = false;\n\n /**\n * The label for the select.\n */\n @Prop() label!: string;\n\n /**\n * The message displayed when external loading times out.\n */\n @Prop() loadingErrorLabel?: string = \"Loading Error\";\n\n /**\n * The message displayed whilst the options are being loaded externally.\n */\n @Prop() loadingLabel?: string = \"Loading...\";\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 * The placeholder value to be displayed.\n */\n @Prop() placeholder?: string = \"Select an option\";\n\n /**\n * If `true`, the readonly state will be set.\n */\n @Prop() readonly?: boolean = false;\n\n /**\n * If `true`, the select will require a value.\n */\n @Prop() required?: boolean = false;\n\n /**\n * If `true`, a searchable variant of the select will be displayed which can be typed in to filter options.\n */\n @Prop() searchable?: boolean = false;\n\n /**\n * Whether the search string of the searchable select should match the start of or anywhere in the options. Only applies to built in filtering.\n */\n @Prop() searchMatchPosition?: IcSearchMatchPositions = \"anywhere\";\n\n /**\n * If `true`, the icOptionSelect event will be fired on enter instead of ArrowUp and ArrowDown.\n */\n @Prop() selectOnEnter?: boolean = false;\n\n /**\n * If `true`, a button which clears the select input when clicked will be displayed. The button will always appear on the searchable select.\n */\n @Prop() showClearButton?: boolean = false;\n\n /**\n * The size of the select component.\n */\n @Prop() size?: IcSizes = \"default\";\n\n /**\n * @deprecated This prop should not be used anymore. Set prop `size` to \"small\" instead.\n */\n @Prop() small?: boolean = false;\n\n /**\n * If using external filtering, set a timeout for when loading takes too long.\n */\n @Prop() timeout?: number;\n\n /**\n * The validation status - e.g. 'error' | 'warning' | 'success'.\n */\n @Prop() validationStatus?: IcInformationStatusOrEmpty = \"\";\n\n /**\n * The text to display as the validation message.\n */\n @Prop() validationText?: string = \"\";\n\n /**\n * If `true`, the loading state will be triggered when fetching options asynchronously.\n */\n @Prop({ mutable: true }) loading?: boolean = false;\n\n @Watch(\"loading\")\n loadingHandler(newValue: boolean): void {\n newValue && this.triggerLoading();\n }\n\n /**\n * The possible selection options.\n */\n @Prop() options?: IcMenuOption[] = [];\n @State() filteredOptions: IcMenuOption[] = this.options;\n @State() uniqueOptions: IcMenuOption[] = this.options;\n\n @Watch(\"options\")\n watchOptionsHandler(): void {\n if (!this.hasTimedOut) {\n this.loading = false;\n clearTimeout(this.timeoutTimer);\n if (this.isExternalFiltering()) {\n if (this.options?.length > 0) {\n this.setOptionsValuesFromLabels();\n this.noOptions = null;\n this.uniqueOptions = this.deduplicateOptions(this.options);\n this.filteredOptions = this.uniqueOptions;\n } else {\n this.noOptions = [{ label: this.emptyOptionListText, value: \"\" }];\n this.uniqueOptions = this.noOptions;\n this.filteredOptions = this.noOptions;\n }\n this.updateSearchableSelectResultAriaLive();\n this.setDefaultValue();\n } else {\n this.setOptionsValuesFromLabels();\n this.uniqueOptions = this.deduplicateOptions(this.options);\n this.filteredOptions = this.uniqueOptions;\n if (this.initialOptionsEmpty) {\n this.setDefaultValue();\n this.initialOptionsEmpty = false;\n }\n }\n } else {\n if (!this.searchable) {\n this.options = this.noOptions;\n }\n }\n }\n\n /**\n * The amount of time, in milliseconds, to wait to trigger the `icChange` event after each keystroke.\n */\n @Prop() debounce?: number = 0;\n @State() currDebounce = this.debounce;\n\n @Watch(\"debounce\")\n debounceChangedHandler(newValue: number): void {\n this.updateOnChangeDebounce(newValue);\n }\n\n /**\n * The value of the select, reflected by the value of the currently selected option. For the searchable variant, the value is also reflected by the user input.\n */\n @Prop({ mutable: true }) value?: string;\n @State() initialValue = this.value;\n @State() inputValueToFilter = this.value;\n @State() currValue = this.value;\n\n @Watch(\"value\")\n valueChangedHandler(): void {\n if (this.value !== this.currValue) {\n this.currValue = this.value;\n }\n\n if (this.searchable) {\n this.searchableSelectInputValue =\n this.getLabelFromValue(this.currValue) || this.currValue;\n }\n }\n\n @Watch(\"open\")\n openChangedHandler(): void {\n this.open ? this.icOpen.emit() : this.icClose.emit();\n }\n\n /**\n * Emitted when the select loses focus.\n */\n @Event() icBlur: EventEmitter<void>;\n\n /**\n * Emitted when the value changes.\n */\n @Event() icChange: EventEmitter<IcValueEventDetail>;\n\n /**\n * Emitted when the clear button is clicked.\n */\n @Event() icClear: EventEmitter<void>;\n\n /**\n * Emitted when the select options menu is closed.\n */\n @Event() icClose: EventEmitter<void>;\n\n /**\n * Emitted when the select gains focus.\n */\n @Event() icFocus: EventEmitter<void>;\n\n /**\n * Emitted when a keyboard input occurred.\n */\n @Event() icInput: EventEmitter<IcValueEventDetail>;\n\n /**\n * Emitted when the select options menu is opened.\n */\n @Event() icOpen: EventEmitter<void>;\n\n /**\n * Emitted when an option is highlighted within the menu.\n * Highlighting a menu item will also trigger an `icChange/onIcChange` due to the value being updated.\n */\n @Event() icOptionSelect: EventEmitter<IcOptionSelectEventDetail>;\n\n /**\n * Emitted when the 'retry loading' button is clicked for a searchable variant.\n */\n @Event() icRetryLoad: EventEmitter<IcValueEventDetail>;\n\n disconnectedCallback(): void {\n removeFormResetListener(this.el, this.handleFormReset);\n this.hostMutationObserver?.disconnect();\n }\n\n componentWillLoad(): void {\n this.inheritedAttributes = inheritAttributes(this.el, MUTABLE_ATTRIBUTES);\n\n removeDisabledFalse(this.disabled, this.el);\n\n this.setOptionsValuesFromLabels();\n\n addFormResetListener(this.el, this.handleFormReset);\n\n if (!this.options?.length) {\n this.initialOptionsEmpty = true;\n this.noOptions = [{ label: this.emptyOptionListText, value: \"\" }];\n this.uniqueOptions = this.noOptions;\n this.filteredOptions = this.noOptions;\n } else {\n this.setDefaultValue();\n this.uniqueOptions = this.deduplicateOptions(this.options);\n }\n }\n\n componentDidLoad(): void {\n onComponentRequiredPropUndefined(\n [{ prop: this.label, propName: \"label\" }],\n \"Select\"\n );\n\n if (this.loading) {\n this.triggerLoading();\n }\n this.hiddenInputValue = this.searchable && this.currValue;\n\n this.hostMutationObserver = new MutationObserver(this.hostMutationCallback);\n this.hostMutationObserver.observe(this.el, {\n attributes: true,\n childList: true,\n });\n }\n\n componentDidRender(): void {\n if (this.nativeSelectElement && !this.disabled) {\n this.setTextColor();\n }\n }\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 // triggered when attributes of host element change\n private hostMutationCallback = (mutationList: MutationRecord[]): void => {\n let forceComponentUpdate = false;\n mutationList.forEach(\n ({ attributeName, type, addedNodes, removedNodes }) => {\n if (MUTABLE_ATTRIBUTES.includes(attributeName)) {\n this.inheritedAttributes[attributeName] =\n this.el.getAttribute(attributeName);\n forceComponentUpdate = true;\n } else if (type === \"childList\") {\n forceComponentUpdate = checkSlotInChildMutations(\n addedNodes,\n removedNodes,\n \"icon\"\n );\n }\n }\n );\n if (forceComponentUpdate) {\n forceUpdate(this);\n }\n };\n\n private handleRetry = (ev: CustomEvent<IcValueEventDetail>) => {\n if (ev.detail.keyPressed) this.searchableSelectElement?.focus();\n this.blurredBecauseButtonPressed = true;\n this.retryButtonClick = true;\n this.hasSetDefaultValue = true;\n this.icRetryLoad.emit({ value: this.hiddenInputValue });\n };\n\n private updateOnChangeDebounce(newValue: number) {\n if (this.currDebounce !== newValue) {\n this.currDebounce = newValue;\n }\n }\n\n private emitIcChange = (value: string) => {\n if (!this.searchable) {\n this.value = value;\n }\n\n clearTimeout(this.debounceIcChange);\n this.debounceIcChange = window.setTimeout(() => {\n this.icChange.emit({ value: value });\n }, this.currDebounce);\n };\n\n private emitImmediateIcChange = (value: string) => {\n this.value = value;\n clearTimeout(this.debounceIcChange);\n this.icChange.emit({ value: value });\n };\n\n /**\n * Processes the provided array of IcMenuOptions, removing duplicates and reporting them with a console.warn\n * @param options array of IcMenuOptions\n * @returns a new options object, with all entries possessing a duplicate 'value' field removed\n */\n private deduplicateOptions = (options: IcMenuOption[]): IcMenuOption[] => {\n const uniqueValues: string[] = [];\n const dedupedOptions: IcMenuOption[] = [];\n let dedupedChildren: IcMenuOption[];\n\n options.forEach((option: IcMenuOption) => {\n if (option.children) {\n //If an option has children, we will loop through them\n dedupedChildren = [];\n option.children.forEach((child) => {\n if (uniqueValues.includes(child.value)) {\n console.warn(\n `ic-select with label ${this.label} was populated with duplicate option (value: ${child.value}) which has been removed.`\n );\n } else {\n uniqueValues.push(child.value);\n dedupedChildren.push(child);\n }\n });\n // construct a modified option, inserting the deduplicated children alongside the original information\n const modifiedParent: IcMenuOption = {\n ...option,\n children: dedupedChildren,\n };\n dedupedOptions.push(modifiedParent);\n } else {\n // If an option does not have children, assess to see if it's value has been included already\n if (uniqueValues.includes(option.value)) {\n console.warn(\n `ic-select with label ${this.label} was populated with duplicate option (value: ${option.value}) which has been removed.`\n );\n } else {\n uniqueValues.push(option.value);\n dedupedOptions.push(option);\n }\n }\n });\n return dedupedOptions;\n };\n\n /**\n * Loop through options array and for all options with no value, infer it from the label\n */\n private setOptionsValuesFromLabels = (): void => {\n if (this.options?.length > 0 && this.options.map) {\n this.options.map((option) => {\n if (!option.value) {\n option.value = option.label;\n }\n });\n }\n };\n\n private setUngroupedOptions = (event: CustomEvent): void => {\n this.ungroupedOptions = event.detail.options;\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.uniqueOptions);\n };\n\n private getFilteredChildMenuOptions = (option: IcMenuOption) => {\n let children = option.children;\n\n if (this.searchable) {\n children = getFilteredMenuOptions(\n option.children,\n this.includeDescriptionsInSearch,\n this.searchableSelectInputValue,\n this.searchMatchPosition\n );\n } else {\n children = getFilteredMenuOptions(\n option.children,\n false,\n this.pressedCharacters,\n \"start\"\n );\n }\n\n const newOption = { ...option };\n newOption.children = children;\n return newOption;\n };\n\n private handleNativeSelectChange = (): void => {\n this.icOptionSelect.emit({ value: this.nativeSelectElement.value });\n this.emitImmediateIcChange(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.value = event.detail.value;\n this.searchableMenuItemSelected = true;\n\n // After editing the input, if selecting the same option as before, set the input value to label again\n if (this.value === this.currValue) {\n this.searchableSelectInputValue = this.getLabelFromValue(this.value);\n }\n\n this.inputValueToFilter = null;\n this.hiddenInputValue = this.getValueFromLabel(\n this.searchableSelectInputValue\n );\n }\n\n this.ariaActiveDescendant = event.detail.optionId;\n this.icOptionSelect.emit({ value: event.detail.value });\n this.emitIcChange(event.detail.value);\n };\n\n private handleMenuChange = (event: CustomEvent): void => {\n this.open = event.detail.open;\n this.pressedCharacters = \"\";\n\n this.searchable && this.handleFocusIndicatorDisplay();\n };\n\n // clears the debounce delay when navigating the menu with arrow keys etc\n // to prevent delay in change event, which should only occur when typing in input\n private handleMenuKeyPress = (ev: CustomEvent): void => {\n ev.cancelBubble = true;\n this.handleCharacterKeyDown(ev.detail.key);\n };\n\n private handleMenuValueChange = (ev: CustomEvent): void => {\n this.value = ev.detail.value;\n };\n\n private handleFocusIndicatorDisplay = () => {\n const focusIndicator = this.el.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 isExternalFiltering = (): boolean =>\n this.searchable && this.disableFilter;\n\n private handleClick = (event: MouseEvent): void => {\n if (!this.open) {\n if (this.isExternalFiltering()) {\n this.menu.options = this.filteredOptions;\n } else if (\n !this.hasTimedOut &&\n !this.loading &&\n !this.noOptions?.length &&\n (!this.searchable || this.searchableMenuItemSelected)\n ) {\n this.noOptions = null;\n this.menu.options = this.uniqueOptions;\n }\n }\n\n if (event.detail !== 0) {\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.hasTimedOut = false;\n clearTimeout(this.timeoutTimer);\n this.noOptions = null;\n this.emitImmediateIcChange(null);\n this.icClear.emit();\n\n if (this.searchable) {\n this.searchableSelectElement.value = null;\n this.searchableSelectInputValue = null;\n this.filteredOptions = this.uniqueOptions;\n this.hiddenInputValue = null;\n this.searchableSelectElement.focus();\n } else {\n this.customSelectElement.focus();\n }\n };\n\n private handleCharacterKeyDown = (key: string) => {\n // Only close menu when space is pressed if not being used alongside character keys to quickly select options\n if (\n this.open &&\n key === \" \" &&\n this.pressedCharacters.length === 0 &&\n !this.hasTimedOut &&\n !this.loading\n ) {\n this.setMenuChange(false);\n }\n\n if (key.length === 1 && !this.searchable) {\n window.clearTimeout(this.characterKeyPressTimer);\n this.characterKeyPressTimer = window.setTimeout(\n () => (this.pressedCharacters = \"\"),\n 1000\n );\n\n this.pressedCharacters += key;\n this.handleFilter();\n\n if (!this.noOptions) {\n this.emitImmediateIcChange(this.filteredOptions[0].value);\n }\n } else {\n this.pressedCharacters = \"\";\n }\n };\n\n private handleNativeSelectKeyDown = (event: KeyboardEvent) => {\n if ((event.key !== \"Escape\" && event.key !== \"Tab\") || this.open) {\n event.cancelBubble = true;\n }\n this.handleCharacterKeyDown(event.key);\n };\n\n private handleKeyDown = (event: KeyboardEvent): void => {\n if ((event.key !== \"Escape\" && event.key !== \"Tab\") || this.open) {\n event.cancelBubble = true;\n }\n const isArrowKey = event.key === \"ArrowDown\" || event.key === \"ArrowUp\";\n\n if (!this.open) {\n if (this.isExternalFiltering() && (event.key === \"Enter\" || isArrowKey)) {\n this.menu.options = this.filteredOptions;\n } else {\n if (!this.hasTimedOut) {\n this.noOptions = null;\n this.menu.options = this.uniqueOptions;\n }\n }\n }\n\n if (this.open && event.key === \"Enter\") {\n this.setMenuChange(false);\n } else {\n if (!(isArrowKey && this.noOptions !== null)) {\n if (!(event.key === \" \" && this.pressedCharacters.length > 0)) {\n // Keyboard events get passed onto ic-menu\n this.menu.handleKeyboardOpen(event);\n }\n this.handleCharacterKeyDown(event.key);\n }\n }\n };\n\n private handleClearButtonFocus = (): void => {\n this.clearButtonFocused = true;\n };\n\n private handleClearButtonBlur = (ev: FocusEvent): void => {\n const retryButton = this.menu?.querySelector(\"#retry-button\");\n if (\n !(\n this.searchableSelectElement &&\n ev.relatedTarget === this.searchableSelectElement\n ) &&\n !(retryButton && ev.relatedTarget === retryButton)\n ) {\n this.setMenuChange(false);\n this.handleFocusIndicatorDisplay();\n }\n this.clearButtonFocused = false;\n };\n\n private handleFilter = (): void => {\n const options = this.deduplicateOptions(\n this.searchable ? [...this.uniqueOptions] : this.ungroupedOptions\n );\n\n let isGrouped = false;\n let newFilteredOptions: IcMenuOption[] = [];\n\n options.map((option) => {\n if (option.children) isGrouped = true;\n });\n\n let menuOptionsFiltered: IcMenuOption[];\n\n if (this.searchable) {\n menuOptionsFiltered = getFilteredMenuOptions(\n options,\n this.includeDescriptionsInSearch,\n this.inputValueToFilter,\n this.searchMatchPosition\n );\n this.searchableMenuItemSelected = false;\n } else {\n menuOptionsFiltered = getFilteredMenuOptions(\n options,\n false,\n this.pressedCharacters,\n \"start\"\n );\n }\n\n if (\n !isGrouped &&\n menuOptionsFiltered[0]?.label !== this.emptyOptionListText\n ) {\n newFilteredOptions = menuOptionsFiltered;\n } else if (isGrouped) {\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 if (newFilteredOptions.length > 0 && !noChildOptionsWhenFiltered) {\n this.noOptions = null;\n this.filteredOptions = newFilteredOptions;\n } else {\n this.noOptions = [{ label: this.emptyOptionListText, value: \"\" }];\n this.filteredOptions = this.noOptions;\n }\n };\n\n /**\n * Put the select component into loading state.\n * Replace options with the loading message. If timeout is enabled, set the timeout and once passed, replace options with the loading error message\n */\n private triggerLoading = () => {\n this.hasTimedOut = false;\n this.noOptions = [{ label: this.loadingLabel, value: \"\", loading: true }];\n if (this.filteredOptions !== this.noOptions && this.searchable) {\n this.filteredOptions = this.noOptions;\n } else if (this.uniqueOptions !== this.noOptions && !this.searchable) {\n this.uniqueOptions = this.noOptions;\n }\n if (this.timeout) {\n this.timeoutTimer = window.setTimeout(() => {\n this.loading = false;\n this.hasTimedOut = true;\n this.noOptions = [\n { label: this.loadingErrorLabel, value: \"\", timedOut: true },\n ];\n this.filteredOptions = this.noOptions;\n if (!this.searchable) this.uniqueOptions = this.noOptions;\n }, this.timeout);\n }\n };\n\n private getValueFromLabel = (label: string): string | undefined => {\n return this.uniqueOptions.find((option) => option.label === label)?.value;\n };\n\n private handleSearchableSelectInput = (event: Event): void => {\n this.searchableSelectInputValue = (event.target as HTMLInputElement).value;\n this.icInput.emit({ value: this.searchableSelectInputValue });\n this.emitIcChange(this.searchableSelectInputValue);\n\n this.hiddenInputValue = this.searchableSelectInputValue;\n this.inputValueToFilter = this.searchableSelectInputValue;\n this.setMenuChange(true);\n\n if (!this.disableFilter) {\n this.handleFilter();\n this.debounceAriaLiveUpdate();\n }\n };\n\n private updateSearchableSelectResultAriaLive = (): void => {\n const searchableSelectResultsStatusEl = this.el.shadowRoot.querySelector(\n \".searchable-select-results-status\"\n ) as HTMLDivElement;\n\n if (searchableSelectResultsStatusEl) {\n if (this.noOptions !== null) {\n searchableSelectResultsStatusEl.innerText = this.emptyOptionListText;\n } else {\n searchableSelectResultsStatusEl.innerText = \"\";\n }\n }\n };\n\n private debounceAriaLiveUpdate() {\n clearTimeout(this.debounceAria);\n\n window.setTimeout(() => {\n this.updateSearchableSelectResultAriaLive();\n }, 800);\n }\n\n private getDefaultValue = (value: string): string | null =>\n this.getLabelFromValue(value) || value || null;\n\n private setDefaultValue() {\n if (!this.hasSetDefaultValue && this.currValue) {\n this.searchableSelectInputValue = this.getDefaultValue(this.currValue);\n this.initialValue = this.currValue;\n this.hasSetDefaultValue = true;\n }\n }\n\n private onFocus = (): void => {\n this.icFocus.emit();\n };\n\n private onBlur = ({ relatedTarget }: FocusEvent): void => {\n const target = relatedTarget as HTMLElement;\n if (\n target !== null &&\n ((target.tagName === \"UL\" && target.className.includes(\"menu\")) ||\n (target.tagName === \"LI\" && target.className.includes(\"option\")))\n ) {\n return;\n }\n\n const retryButton = this.menu?.querySelector(\"#retry-button\");\n const isSearchableAndNoFocusedInternalElements =\n this.searchable &&\n !!this.menu &&\n target !== this.menu &&\n !Array.from(this.menu.querySelectorAll(\"[role='option']\")).includes(\n target\n ) &&\n !(this.clearButton && target === this.clearButton) &&\n !(retryButton && target === retryButton);\n\n if (isSearchableAndNoFocusedInternalElements) {\n if (!this.retryButtonClick) {\n this.setMenuChange(false);\n }\n this.handleFocusIndicatorDisplay();\n }\n\n this.retryButtonClick = false;\n this.icBlur.emit();\n };\n\n private onTimeoutBlur = (ev: CustomEvent) => {\n if (\n (ev.detail.ev as FocusEvent).relatedTarget !==\n this.searchableSelectElement &&\n !this.blurredBecauseButtonPressed\n ) {\n this.setMenuChange(false);\n this.handleFocusIndicatorDisplay();\n this.icBlur.emit();\n }\n this.blurredBecauseButtonPressed = false;\n };\n\n private handleFormReset = (): void => {\n this.value = this.initialValue;\n if (this.searchable) {\n this.searchableSelectInputValue = this.getDefaultValue(this.value);\n this.hiddenInputValue = this.value;\n }\n };\n\n render() {\n const {\n small,\n size,\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 currValue,\n } = this;\n\n renderHiddenInput(\n true,\n this.el,\n name,\n this.searchable ? this.hiddenInputValue : currValue,\n disabled\n );\n\n const invalid = `${validationStatus === IcInformationStatus.Error}`;\n\n const describedBy = getInputDescribedByText(\n this.inputId,\n helperText !== \"\",\n hasValidationStatus(this.validationStatus, this.disabled)\n ).trim();\n\n let showLeftIcon = !!this.el.querySelector(`[slot=\"icon\"]`);\n if (showLeftIcon && (disabled || (readonly && !this.value))) {\n showLeftIcon = false;\n }\n\n return (\n <Host\n class={{\n disabled,\n searchable,\n small,\n [size]: size !== \"default\",\n \"full-width\": fullWidth,\n }}\n onBlur={this.onBlur}\n >\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 small={small}\n size={size}\n fullWidth={fullWidth}\n disabled={disabled}\n readonly={readonly}\n validationStatus={validationStatus}\n >\n {showLeftIcon && (\n <span\n slot=\"left-icon\"\n class={{\n [\"readonly\"]: readonly,\n [\"has-value\"]: !!this.value,\n }}\n >\n <slot name=\"icon\" />\n </span>\n )}\n {readonly ? (\n <ic-typography>\n <p>{this.getLabelFromValue(currValue)}</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 onKeyDown={this.handleNativeSelectKeyDown}\n form={this.form}\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 === currValue}\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 === currValue}\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 autocomplete=\"off\"\n aria-label={label}\n aria-describedby={describedBy}\n aria-activedescendant={this.ariaActiveDescendant}\n aria-autocomplete=\"list\"\n aria-expanded={`${this.open}`}\n aria-invalid={invalid}\n aria-required={`${required}`}\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 form={this.form}\n formaction={this.formaction}\n formenctype={this.formenctype}\n formmethod={this.formmethod}\n formnovalidate={this.formnovalidate}\n formtarget={this.formtarget}\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 && currValue === 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={size}\n variant=\"icon\"\n appearance={\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\": !(\n currValue == null || currValue === \"\"\n ),\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(currValue) || 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:\n this.getLabelFromValue(currValue) === undefined,\n }}\n >\n {this.getLabelFromValue(currValue) || placeholder}\n </ic-typography>\n <div class=\"select-input-end\">\n {currValue && showClearButton && (\n <div class=\"divider\"></div>\n )}\n <span\n class={{\n \"expand-icon\": true,\n \"expand-icon-open\": this.open,\n \"expand-icon-filled\": !(\n currValue == null || currValue === \"\"\n ),\n }}\n innerHTML={Expand}\n aria-hidden=\"true\"\n />\n </div>\n </button>\n {currValue && 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={size}\n variant=\"icon\"\n appearance={\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\":\n this.loading ||\n this.hasTimedOut ||\n (this.noOptions !== null &&\n this.noOptions[0] &&\n this.noOptions[0].label === this.emptyOptionListText),\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 small={small}\n size={size}\n menuId={menuId}\n open={this.open}\n options={searchable ? this.filteredOptions : this.uniqueOptions}\n value={currValue}\n fullWidth={fullWidth}\n selectOnEnter={this.selectOnEnter}\n onMenuStateChange={this.handleMenuChange}\n onMenuOptionSelect={this.handleCustomSelectChange}\n onMenuKeyPress={this.handleMenuKeyPress}\n onMenuValueChange={this.handleMenuValueChange}\n onUngroupedOptionsSet={this.setUngroupedOptions}\n onRetryButtonClicked={this.handleRetry}\n parentEl={this.el}\n onTimeoutBlur={this.onTimeoutBlur}\n activationType={\n this.searchable || this.selectOnEnter ? \"manual\" : \"automatic\"\n }\n ></ic-menu>\n )}\n {hasValidationStatus(this.validationStatus, this.disabled) && (\n <ic-input-validation\n class={{ \"menu-open\": this.open }}\n ariaLiveMode=\"polite\"\n status={validationStatus}\n message={validationText}\n for={this.inputId}\n ></ic-input-validation>\n )}\n </ic-input-container>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":["icTextFieldCss","inputIds","MUTABLE_ATTRIBUTES","IC_INHERITED_ARIA","TextField","this","inheritedAttributes","hostMutationObserver","getMaxLengthExceeded","value","numChars","length","type","minValueUnattained","Number","min","maxValueExceeded","max","maxLength","maxLengthExceeded","getMaxCharactersReached","maxCharactersReached","maxCharacters","maxCharactersError","onInput","ev","target","icInput","emit","onBlur","minCharactersUnattained","minCharacters","icBlur","onFocus","icFocus","hasStatus","status","disabled","handleFormReset","initialValue","hostMutationCallback","mutationList","forceComponentUpdate","forEach","attributeName","addedNodes","removedNodes","includes","el","getAttribute","checkSlotInChildMutations","forceUpdate","undefined","inputId","debounceChanged","icChange","debounceEvent","debounce","watchValueHandler","newValue","inputEl","connectedCallback","disconnectedCallback","removeFormResetListener","_a","disconnect","componentWillLoad","inheritAttributes","readonly","addFormResetListener","removeDisabledFalse","componentDidLoad","onComponentRequiredPropUndefined","prop","label","propName","validationInlineInternal","getValidationText","validationText","MutationObserver","observe","attributes","childList","handleKeyDown","icKeydown","event","setFocus","focus","render","name","required","size","small","placeholder","helperText","rows","resize","validationStatus","validationInline","spellcheck","inputmode","fullWidth","truncateValue","hiddenInput","disabledMode","currentStatus","IcInformationStatus","Warning","Error","currentValidationText","maxLengthMessage","maxNumChars","messageAriaLive","showStatusText","Success","multiline","hiddenCharCountDescId","describedBy","getInputDescribedByText","trim","disabledText","showLeftIcon","querySelector","invalid","renderHiddenInput","h","Host","class","hideLabel","for","multiLine","slot","Object","assign","id","ref","ariaActiveDescendant","ariaExpanded","ariaOwns","autocomplete","autocapitalize","autoFocus","role","maxlength","minlength","isSlotUsed","isEmptyString","message","ariaLiveMode","variant","hidden"],"sources":["src/components/ic-text-field/ic-text-field.css?tag=ic-text-field&encapsulation=shadow","src/components/ic-text-field/ic-text-field.tsx"],"sourcesContent":["@import \"../../global/normalize.css\";\n\n:host {\n /**\n * @prop --input-width: Width of the input field\n */\n display: block;\n --ic-input-label-helpertext-padding: var(--ic-space-xxs);\n}\n\n:host(.fullwidth) {\n width: 100%;\n}\n\n::placeholder {\n color: var(--ic-color-tertiary-text);\n opacity: 1;\n}\n\ninput,\ntextarea {\n border: 0;\n border-radius: var(--ic-border-radius);\n background-color: var(--ic-architectural-white);\n line-height: 1.5rem;\n letter-spacing: 0.005rem;\n width: 100%;\n padding-right: var(--ic-space-xs);\n padding-left: var(--ic-space-xs);\n}\n\ntextarea {\n min-height: var(--ic-space-lg);\n resize: vertical;\n padding-top: 0.375rem;\n}\n\ninput:focus,\ntextarea:focus {\n border: 0;\n outline: 0;\n}\n\ninput:disabled,\ntextarea:disabled {\n color: var(--ic-architectural-200);\n}\n\ninput.readonly,\ntextarea.readonly {\n color: var(--ic-color-primary-text);\n}\n\n/* Chrome, Safari, Edge */\ninput::-webkit-outer-spin-button,\ninput::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n}\n\n/* Firefox */\ninput[type=\"number\"] {\n -moz-appearance: textfield;\n}\n\ntextarea.no-resize {\n resize: none;\n}\n\n.maxlengthtext {\n color: var(--ic-color-secondary-text);\n padding-right: var(--ic-space-xxxs);\n}\n\n.no-left-pad {\n padding-left: 0;\n}\n\n::slotted([slot=\"icon\"]) {\n fill: var(--ic-color-tertiary-text);\n}\n\n.has-value ::slotted([slot=\"icon\"]) {\n fill: var(--ic-color-primary-text);\n}\n\n.charcount {\n margin-right: calc(-1 * var(--ic-space-xxxs));\n}\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration,\ninput[type=\"search\"]::-webkit-search-results-button,\ninput[type=\"search\"]::-webkit-search-results-decoration {\n display: none;\n}\n\ninput[type=\"search\"].truncate-value {\n width: 100%;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n@media (forced-colors: active) {\n input.readonly,\n textarea.readonly {\n color: canvastext;\n }\n\n .has-value ::slotted([slot=\"icon\"]) {\n fill: currentcolor;\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n Host,\n Listen,\n Prop,\n State,\n Watch,\n Method,\n h,\n forceUpdate,\n} from \"@stencil/core\";\nimport {\n IcInformationStatus,\n IcAutocompleteTypes,\n IcAutocorrectStates,\n IcInformationStatusOrEmpty,\n IcValueEventDetail,\n IcSizesNoLarge,\n} from \"../../utils/types\";\nimport {\n inheritAttributes,\n debounceEvent,\n getInputDescribedByText,\n renderHiddenInput,\n isEmptyString,\n onComponentRequiredPropUndefined,\n addFormResetListener,\n removeFormResetListener,\n isSlotUsed,\n removeDisabledFalse,\n checkSlotInChildMutations,\n} from \"../../utils/helpers\";\nimport { IC_INHERITED_ARIA } from \"../../utils/constants\";\nimport {\n IcAriaAutocompleteTypes,\n IcTextFieldInputModes,\n IcTextFieldTypes,\n} from \"./ic-text-field.types\";\n\nlet inputIds = 0;\nconst MUTABLE_ATTRIBUTES = [...IC_INHERITED_ARIA, \"title\"];\n\n/**\n * @slot icon - Content will be placed to the left of the text input.\n */\n@Component({\n tag: \"ic-text-field\",\n styleUrl: \"ic-text-field.css\",\n shadow: true,\n})\nexport class TextField {\n private inheritedAttributes: { [k: string]: string } = {};\n private inputEl: HTMLInputElement | HTMLTextAreaElement;\n private hostMutationObserver: MutationObserver = null;\n\n @Element() el: HTMLIcTextFieldElement;\n\n @State() numChars: number = 0;\n @State() maxCharactersReached: boolean = false;\n @State() maxCharactersError: boolean = false;\n @State() minCharactersUnattained: boolean = false;\n @State() maxLengthExceeded: boolean = false;\n @State() maxValueExceeded: boolean = false;\n @State() minValueUnattained: boolean = false;\n\n /**\n * @slot clear-button - an ic-button clear component will render as an end adornment to the input.\n * @slot search-submit-button - an ic-button search submit component will render as an end adornment to the input.\n * @slot menu - an ic-menu component will appear below the input.\n */\n\n /**\n * @internal The active element when focus is on the ic-menu items.\n */\n @Prop() ariaActiveDescendant?: string;\n\n /**\n * @internal Used to identify whether inputting any text triggers more predictions\n */\n @Prop() ariaAutocomplete: IcAriaAutocompleteTypes = undefined;\n\n /**\n * @internal Used to identify if the slotted menu is rendered\n */\n @Prop() ariaExpanded: string;\n\n /**\n * @internal Used to identify any related child component\n */\n @Prop() ariaOwns: string;\n\n /**\n * The automatic capitalisation of the text value as it is entered/edited by the user.\n * Available options: \"off\", \"none\", \"on\", \"sentences\", \"words\", \"characters\".\n */\n @Prop() autocapitalize = \"off\";\n\n /**\n * The state of autocompletion the browser can apply on the text value.\n */\n @Prop() autocomplete: IcAutocompleteTypes = \"off\";\n\n /**\n * The state of autocorrection the browser can apply when the user is entering/editing the text value.\n */\n @Prop() autocorrect: IcAutocorrectStates = \"off\";\n\n /**\n * If `true`, the form control will have input focus when the page loads.\n */\n @Prop() autoFocus = false;\n\n /**\n * If `true`, the disabled state will be set.\n */\n @Prop() disabled: boolean = false;\n\n /**\n * Specify whether the text field fills the full width of the container.\n * If `true`, this overrides the --input-width CSS variable.\n */\n @Prop() fullWidth: boolean = false;\n\n /**\n * The helper text that will be displayed for additional field guidance.\n */\n @Prop() helperText: string = \"\";\n\n /**\n * If `true`, the label will be hidden and the required label value will be applied as an aria-label.\n */\n @Prop() hideLabel: boolean = false;\n\n /**\n * @internal If `true`, the hidden form input will stop rendering for form submission.\n */\n @Prop() hiddenInput: boolean = true;\n\n /**\n * The ID for the input.\n */\n @Prop() inputId?: string = `ic-text-field-input-${inputIds++}`;\n\n /**\n * A hint to the browser for which keyboard to display.\n * Possible values: `\"none\"`, `\"text\"`, `\"tel\"`, `\"url\"`,\n * `\"email\"`, `\"numeric\"`, `\"decimal\"`, and `\"search\"`.\n */\n @Prop() inputmode: IcTextFieldInputModes = \"text\";\n\n /**\n * The label for the input.\n */\n @Prop() label!: string;\n\n /**\n * The maximum number that can be accepted as a value, when `type` is `number` and `rows` is `1`. (NOTE: Ensure to include visual indication of max value in `helperText` or `label`)\n */\n @Prop() max: string | number = undefined;\n\n /**\n * The maximum number of characters that can be entered in the field. Will display an error if too many characters are entered.\n */\n @Prop() maxCharacters: number = 0;\n\n /**\n * The count of characters in the field. Will display a warning if the bound is reached.\n */\n @Prop() maxLength: number = 0;\n\n /**\n * The text to display as the validation message when the maximum length is exceeded.\n */\n @Prop() maxLengthMessage: string = \"Maximum length exceeded\";\n\n /**\n * The minimum number that can be accepted as a value, when `type` is `number` and `rows` is `1`. (NOTE: Ensure to include visual indication of min value in `helperText` or `label`)\n */\n @Prop() min: string | number = undefined;\n\n /**\n * The minimum number of characters that can be entered in the field.\n */\n @Prop() minCharacters: number = 0;\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 * The placeholder value to be displayed.\n */\n @Prop() placeholder: string = \"\";\n\n /**\n * If `true`, the read only state will be set.\n */\n @Prop({ reflect: true }) readonly: boolean = false;\n\n /**\n * If `true`, the input will require a value.\n */\n @Prop() required: boolean = false;\n\n /**\n * If `true`, the multiline text area will be resizeable.\n */\n @Prop() resize: boolean = false;\n\n /**\n * @internal Used to set the role if not default textbox;\n */\n @Prop() role: string;\n\n /**\n * The number of rows to transform the text field into a text area with a specific height.\n */\n @Prop() rows: number = 1;\n\n /**\n * The size of the text field component.\n */\n @Prop() size?: IcSizesNoLarge = \"default\";\n\n /**\n * @deprecated This prop should not be used anymore. Set prop `size` to \"small\" instead.\n */\n @Prop() small?: boolean = false;\n\n /**\n * If `true`, the value of the text field will have its spelling and grammar checked.\n */\n @Prop() spellcheck: boolean = false;\n /**\n * @internal If `true`, an ellipsis will be displayed at the end of the value if the value is longer than the container.\n */\n @Prop() truncateValue?: boolean;\n\n /**\n * The type of control to display. The default type is text.\n */\n @Prop() type: IcTextFieldTypes = \"text\";\n\n /**\n * If `true`, the icon in input control will be displayed - only applies when validationStatus ='success'.\n */\n @Prop() validationInline: boolean = false;\n\n /**\n * @internal If `true`, the validation will display inline.\n */\n @Prop() validationInlineInternal: boolean = false;\n\n /**\n * The validation state - e.g. 'error' | 'warning' | 'success'.\n */\n @Prop() validationStatus: IcInformationStatusOrEmpty = \"\";\n\n /**\n * The validation state - e.g. 'error' | 'warning' | 'success'.\n */\n @Prop() validationText: string = \"\";\n\n /**\n * The amount of time, in milliseconds, to wait to trigger the `icChange` event after each keystroke.\n */\n @Prop() debounce: number = 0;\n\n @Watch(\"debounce\")\n private debounceChanged() {\n this.icChange = debounceEvent(this.icChange, this.debounce);\n }\n\n /**\n * The value of the text field.\n */\n @Prop({ reflect: true, mutable: true }) value: string = \"\";\n @State() initialValue = this.value;\n\n @Watch(\"value\")\n private watchValueHandler(newValue: string): void {\n if (this.inputEl && this.inputEl.value !== newValue) {\n this.inputEl.value = newValue;\n }\n\n this.getMaxLengthExceeded(newValue);\n\n this.getMaxCharactersReached(newValue);\n\n this.icChange.emit({ value: newValue });\n }\n\n /**\n * @internal Emitted when the validationInlineInternal is `true`\n */\n @Event() getValidationText: EventEmitter<IcValueEventDetail>;\n\n /**\n * Emitted when input loses focus.\n */\n @Event() icBlur: EventEmitter<IcValueEventDetail>;\n\n /**\n * Emitted when the value has changed.\n */\n @Event() icChange: EventEmitter<IcValueEventDetail>;\n\n /**\n * Emitted when input gains focus.\n */\n @Event() icFocus: EventEmitter<IcValueEventDetail>;\n\n /**\n * Emitted when a keyboard input occurred.\n */\n @Event() icInput: EventEmitter<IcValueEventDetail>;\n\n /**\n * Emitted when a keydown event occurred.\n */\n @Event() icKeydown: EventEmitter<{ event: KeyboardEvent }>;\n\n connectedCallback(): void {\n this.debounceChanged();\n }\n\n disconnectedCallback(): void {\n removeFormResetListener(this.el, this.handleFormReset);\n this.hostMutationObserver?.disconnect();\n }\n\n componentWillLoad(): void {\n if (this.value !== this.initialValue) {\n this.watchValueHandler(this.value);\n }\n\n this.getMaxLengthExceeded(this.value);\n\n this.getMaxCharactersReached(this.value);\n\n this.inheritedAttributes = inheritAttributes(this.el, MUTABLE_ATTRIBUTES);\n\n if (this.readonly) {\n this.maxLengthExceeded = false;\n this.maxValueExceeded = false;\n this.minValueUnattained = false;\n }\n\n addFormResetListener(this.el, this.handleFormReset);\n\n removeDisabledFalse(this.disabled, this.el);\n }\n\n componentDidLoad(): void {\n onComponentRequiredPropUndefined(\n [{ prop: this.label, propName: \"label\" }],\n \"Text Field\"\n );\n if (this.validationInlineInternal) {\n this.getValidationText.emit({ value: this.validationText });\n }\n\n this.hostMutationObserver = new MutationObserver(this.hostMutationCallback);\n this.hostMutationObserver.observe(this.el, {\n attributes: true,\n childList: true,\n });\n }\n\n @Listen(\"keydown\", {})\n handleKeyDown(ev: KeyboardEvent): void {\n this.icKeydown.emit({ event: ev });\n this.maxCharactersError = this.maxCharactersReached;\n }\n\n /**\n * Sets focus on the native `input`.\n */\n\n @Method()\n async setFocus(): Promise<void> {\n this.inputEl?.focus();\n }\n\n private getMaxLengthExceeded = (value: string) => {\n this.numChars = value.length;\n\n if (this.type === \"number\") {\n this.minValueUnattained = value && Number(value) < Number(this.min);\n this.maxValueExceeded = Number(value) > Number(this.max);\n }\n\n if (this.maxLength > 0) {\n this.maxLengthExceeded = this.numChars > this.maxLength;\n }\n };\n\n private getMaxCharactersReached = (value: string) => {\n this.numChars = value.length;\n this.maxCharactersReached =\n this.maxCharacters > 0 ? this.numChars >= this.maxCharacters : false;\n\n if (this.maxCharactersError && !this.maxCharactersReached) {\n this.maxCharactersError = false;\n }\n };\n\n private onInput = (ev: Event) => {\n this.value = (ev.target as HTMLInputElement).value;\n this.icInput.emit({ value: this.value });\n };\n\n private onBlur = (ev: Event) => {\n const value = (ev.target as HTMLInputElement).value;\n this.numChars = value.length;\n this.minCharactersUnattained =\n this.minCharacters > 0 ? this.numChars < this.minCharacters : false;\n this.icBlur.emit({ value: value });\n };\n\n private onFocus = (ev: Event) => {\n this.icFocus.emit({ value: (ev.target as HTMLInputElement).value });\n };\n\n private hasStatus = (status: IcInformationStatusOrEmpty) =>\n status !== \"\" && !this.disabled;\n\n private handleFormReset = (): void => {\n this.value = this.initialValue;\n };\n\n // triggered when attributes of host element change\n private hostMutationCallback = (mutationList: MutationRecord[]): void => {\n let forceComponentUpdate = false;\n mutationList.forEach(\n ({ attributeName, type, addedNodes, removedNodes }) => {\n if (MUTABLE_ATTRIBUTES.includes(attributeName)) {\n this.inheritedAttributes[attributeName] =\n this.el.getAttribute(attributeName);\n forceComponentUpdate = true;\n } else if (type === \"childList\") {\n forceComponentUpdate = checkSlotInChildMutations(\n addedNodes,\n removedNodes,\n \"icon\"\n );\n }\n }\n );\n if (forceComponentUpdate) {\n forceUpdate(this);\n }\n };\n\n render() {\n const {\n inputId,\n name,\n label,\n required,\n size,\n small,\n placeholder,\n helperText,\n rows,\n resize,\n disabled,\n value,\n min,\n max,\n maxLength,\n numChars,\n readonly,\n maxLengthExceeded,\n maxCharacters,\n maxCharactersError,\n maxCharactersReached,\n minCharacters,\n minCharactersUnattained,\n minValueUnattained,\n maxValueExceeded,\n validationStatus,\n validationText,\n validationInline,\n validationInlineInternal,\n spellcheck,\n inputmode,\n fullWidth,\n truncateValue,\n hiddenInput,\n } = this;\n\n const disabledMode = readonly || disabled;\n\n const currentStatus =\n maxLengthExceeded ||\n maxValueExceeded ||\n minValueUnattained ||\n minCharactersUnattained ||\n maxCharactersError\n ? maxCharactersError\n ? IcInformationStatus.Warning\n : IcInformationStatus.Error\n : validationStatus;\n\n const currentValidationText = maxLengthExceeded\n ? this.maxLengthMessage\n : maxCharactersError\n ? `Maximum input is ${maxCharacters} characters`\n : maxValueExceeded\n ? `Maximum value of ${max} exceeded`\n : minValueUnattained\n ? `Minimum value of ${min} not met`\n : minCharactersUnattained\n ? `Minimum input is ${minCharacters} characters`\n : validationText;\n\n const maxNumChars = readonly ? 0 : maxLength;\n const messageAriaLive =\n maxLengthExceeded ||\n maxCharactersError ||\n maxValueExceeded ||\n minValueUnattained ||\n (maxLength === 0 && currentStatus === IcInformationStatus.Error)\n ? \"assertive\"\n : \"polite\";\n\n const showStatusText =\n this.hasStatus(currentStatus) &&\n !(currentStatus == IcInformationStatus.Success && validationInline) &&\n !validationInlineInternal;\n\n const multiline = rows > 1;\n const hiddenCharCountDescId =\n maxLength > 0 ? `${inputId}-charcount-desc` : \"\";\n\n const describedBy = `${hiddenCharCountDescId} ${getInputDescribedByText(\n inputId,\n helperText !== \"\",\n showStatusText\n )}`.trim();\n\n const disabledText = disabledMode && !readonly;\n const showLeftIcon =\n !!this.el.querySelector(`[slot=\"icon\"]`) && !disabledText;\n\n const invalid = `${currentStatus === IcInformationStatus.Error}`;\n\n if (hiddenInput) {\n renderHiddenInput(true, this.el, name, value, disabledMode);\n }\n return (\n <Host class={{ [\"fullwidth\"]: fullWidth }}>\n <ic-input-container readonly={readonly} disabled={disabledMode}>\n {!this.hideLabel && (\n <ic-input-label\n for={inputId}\n label={label}\n helperText={helperText}\n required={required}\n disabled={disabledText}\n readonly={readonly}\n ></ic-input-label>\n )}\n\n <ic-input-component-container\n size={small ? \"small\" : size}\n validationStatus={currentStatus}\n multiLine={multiline}\n disabled={disabledMode}\n readonly={readonly}\n validationInline={validationInline}\n fullWidth={fullWidth}\n >\n {showLeftIcon && (\n <span\n class={{\n [\"readonly\"]: readonly,\n [\"has-value\"]: value.length > 0,\n }}\n slot=\"left-icon\"\n >\n <slot name=\"icon\" />\n </span>\n )}\n\n {!multiline ? (\n <input\n id={inputId}\n name={name}\n ref={(el) => (this.inputEl = el as HTMLInputElement)}\n type={this.type}\n min={min}\n max={max}\n value={value}\n class={{\n [\"no-left-pad\"]: !showLeftIcon && readonly,\n [\"readonly\"]: readonly,\n [\"truncate-value\"]: truncateValue,\n }}\n placeholder={placeholder ? placeholder : \"\"}\n required={required}\n disabled={disabledMode}\n readonly={readonly}\n onInput={this.onInput}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n aria-label={label}\n aria-describedby={describedBy}\n aria-invalid={invalid}\n aria-activedescendant={this.ariaActiveDescendant}\n aria-expanded={this.ariaExpanded}\n aria-owns={this.ariaOwns}\n autocomplete={this.autocomplete}\n autocapitalize={this.autocapitalize}\n autoFocus={this.autoFocus}\n spellcheck={spellcheck}\n inputmode={inputmode}\n role={this.role}\n maxlength={maxCharactersReached ? maxCharacters : null}\n minlength={minCharactersUnattained ? minCharacters : null}\n {...this.inheritedAttributes}\n ></input>\n ) : (\n <textarea\n id={inputId}\n class={{\n [\"no-resize\"]: resize === false || readonly,\n [\"no-left-pad\"]: !showLeftIcon && readonly,\n [\"readonly\"]: readonly,\n }}\n name={name}\n ref={(el) => (this.inputEl = el as HTMLTextAreaElement)}\n value={value}\n rows={rows}\n required={required}\n disabled={disabledMode}\n placeholder={placeholder ? placeholder : \"\"}\n readonly={readonly}\n onInput={this.onInput}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n aria-label={label}\n aria-describedby={describedBy}\n aria-invalid={invalid}\n autocapitalize={this.autocapitalize}\n autoFocus={this.autoFocus}\n spellcheck={spellcheck}\n inputmode={inputmode}\n maxlength={maxCharactersReached ? maxCharacters : null}\n minlength={minCharactersUnattained ? minCharacters : null}\n {...this.inheritedAttributes}\n ></textarea>\n )}\n {isSlotUsed(this.el, \"clear-button\") && (\n <slot name=\"clear-button\"></slot>\n )}\n {isSlotUsed(this.el, \"search-submit-button\") && (\n <slot name=\"search-submit-button\"></slot>\n )}\n </ic-input-component-container>\n {isSlotUsed(this.el, \"menu\") && <slot name=\"menu\"></slot>}\n {(!isEmptyString(validationStatus) ||\n !isEmptyString(validationText) ||\n maxNumChars > 0 ||\n maxValueExceeded ||\n maxCharactersError ||\n minCharactersUnattained ||\n minValueUnattained) &&\n !validationInlineInternal && (\n <ic-input-validation\n status={\n this.hasStatus(currentStatus) === false ||\n (currentStatus === IcInformationStatus.Success &&\n validationInline) ||\n validationInlineInternal\n ? \"\"\n : currentStatus\n }\n message={showStatusText ? currentValidationText : \"\"}\n ariaLiveMode={messageAriaLive}\n for={inputId}\n fullWidth={fullWidth}\n >\n {!readonly && maxNumChars > 0 && (\n <div slot=\"validation-message-adornment\">\n <ic-typography\n variant=\"caption\"\n class={{\n [\"maxlengthtext\"]: true,\n [\"error\"]: maxLengthExceeded,\n [\"disabled\"]: disabledText,\n }}\n >\n <span\n aria-live=\"polite\"\n id={`${inputId}-charcount`}\n class=\"charcount\"\n >\n {numChars}/{maxNumChars}\n </span>\n <span hidden={true} id={hiddenCharCountDescId}>\n Field can contain a maximum of {maxNumChars} characters.\n </span>\n </ic-typography>\n </div>\n )}\n </ic-input-validation>\n )}\n </ic-input-container>\n </Host>\n );\n }\n}\n"],"mappings":"4NAAA,MAAMA,EAAiB,09HC0CvB,IAAIC,EAAW,EACf,MAAMC,EAAqB,IAAIC,EAAmB,S,MAUrCC,EAAS,M,uPACZC,KAAAC,oBAA+C,GAE/CD,KAAAE,qBAAyC,KA4UzCF,KAAAG,qBAAwBC,IAC9BJ,KAAKK,SAAWD,EAAME,OAEtB,GAAIN,KAAKO,OAAS,SAAU,CAC1BP,KAAKQ,mBAAqBJ,GAASK,OAAOL,GAASK,OAAOT,KAAKU,KAC/DV,KAAKW,iBAAmBF,OAAOL,GAASK,OAAOT,KAAKY,I,CAGtD,GAAIZ,KAAKa,UAAY,EAAG,CACtBb,KAAKc,kBAAoBd,KAAKK,SAAWL,KAAKa,S,GAI1Cb,KAAAe,wBAA2BX,IACjCJ,KAAKK,SAAWD,EAAME,OACtBN,KAAKgB,qBACHhB,KAAKiB,cAAgB,EAAIjB,KAAKK,UAAYL,KAAKiB,cAAgB,MAEjE,GAAIjB,KAAKkB,qBAAuBlB,KAAKgB,qBAAsB,CACzDhB,KAAKkB,mBAAqB,K,GAItBlB,KAAAmB,QAAWC,IACjBpB,KAAKI,MAASgB,EAAGC,OAA4BjB,MAC7CJ,KAAKsB,QAAQC,KAAK,CAAEnB,MAAOJ,KAAKI,OAAQ,EAGlCJ,KAAAwB,OAAUJ,IAChB,MAAMhB,EAASgB,EAAGC,OAA4BjB,MAC9CJ,KAAKK,SAAWD,EAAME,OACtBN,KAAKyB,wBACHzB,KAAK0B,cAAgB,EAAI1B,KAAKK,SAAWL,KAAK0B,cAAgB,MAChE1B,KAAK2B,OAAOJ,KAAK,CAAEnB,MAAOA,GAAQ,EAG5BJ,KAAA4B,QAAWR,IACjBpB,KAAK6B,QAAQN,KAAK,CAAEnB,MAAQgB,EAAGC,OAA4BjB,OAAQ,EAG7DJ,KAAA8B,UAAaC,GACnBA,IAAW,KAAO/B,KAAKgC,SAEjBhC,KAAAiC,gBAAkB,KACxBjC,KAAKI,MAAQJ,KAAKkC,YAAY,EAIxBlC,KAAAmC,qBAAwBC,IAC9B,IAAIC,EAAuB,MAC3BD,EAAaE,SACX,EAAGC,gBAAehC,OAAMiC,aAAYC,mBAClC,GAAI5C,EAAmB6C,SAASH,GAAgB,CAC9CvC,KAAKC,oBAAoBsC,GACvBvC,KAAK2C,GAAGC,aAAaL,GACvBF,EAAuB,I,MAClB,GAAI9B,IAAS,YAAa,CAC/B8B,EAAuBQ,EACrBL,EACAC,EACA,O,KAKR,GAAIJ,EAAsB,CACxBS,EAAY9C,K,iBA1YY,E,0BACa,M,wBACF,M,6BACK,M,uBACN,M,sBACD,M,wBACE,M,0DAgBa+C,U,wEAgB3B,M,kBAKmB,M,iBAKD,M,eAKvB,M,cAKQ,M,eAMC,M,gBAKA,G,eAKA,M,iBAKE,K,aAKJ,uBAAuBnD,M,eAOP,O,8BAUZmD,U,mBAKC,E,eAKJ,E,sBAKO,0B,SAKJA,U,mBAKC,E,UAKT/C,KAAKgD,Q,iBAKE,G,cAKe,M,cAKjB,M,YAKF,M,8BAUH,E,UAKS,U,WAKN,M,gBAKI,M,uCASG,O,sBAKG,M,8BAKQ,M,sBAKW,G,oBAKtB,G,cAKN,E,WAU6B,G,kBAChChD,KAAKI,K,CARrB,eAAA6C,GACNjD,KAAKkD,SAAWC,EAAcnD,KAAKkD,SAAUlD,KAAKoD,S,CAU5C,iBAAAC,CAAkBC,GACxB,GAAItD,KAAKuD,SAAWvD,KAAKuD,QAAQnD,QAAUkD,EAAU,CACnDtD,KAAKuD,QAAQnD,MAAQkD,C,CAGvBtD,KAAKG,qBAAqBmD,GAE1BtD,KAAKe,wBAAwBuC,GAE7BtD,KAAKkD,SAAS3B,KAAK,CAAEnB,MAAOkD,G,CAiC9B,iBAAAE,GACExD,KAAKiD,iB,CAGP,oBAAAQ,G,MACEC,EAAwB1D,KAAK2C,GAAI3C,KAAKiC,kBACtC0B,EAAA3D,KAAKE,wBAAoB,MAAAyD,SAAA,SAAAA,EAAEC,Y,CAG7B,iBAAAC,GACE,GAAI7D,KAAKI,QAAUJ,KAAKkC,aAAc,CACpClC,KAAKqD,kBAAkBrD,KAAKI,M,CAG9BJ,KAAKG,qBAAqBH,KAAKI,OAE/BJ,KAAKe,wBAAwBf,KAAKI,OAElCJ,KAAKC,oBAAsB6D,EAAkB9D,KAAK2C,GAAI9C,GAEtD,GAAIG,KAAK+D,SAAU,CACjB/D,KAAKc,kBAAoB,MACzBd,KAAKW,iBAAmB,MACxBX,KAAKQ,mBAAqB,K,CAG5BwD,EAAqBhE,KAAK2C,GAAI3C,KAAKiC,iBAEnCgC,EAAoBjE,KAAKgC,SAAUhC,KAAK2C,G,CAG1C,gBAAAuB,GACEC,EACE,CAAC,CAAEC,KAAMpE,KAAKqE,MAAOC,SAAU,UAC/B,cAEF,GAAItE,KAAKuE,yBAA0B,CACjCvE,KAAKwE,kBAAkBjD,KAAK,CAAEnB,MAAOJ,KAAKyE,gB,CAG5CzE,KAAKE,qBAAuB,IAAIwE,iBAAiB1E,KAAKmC,sBACtDnC,KAAKE,qBAAqByE,QAAQ3E,KAAK2C,GAAI,CACzCiC,WAAY,KACZC,UAAW,M,CAKf,aAAAC,CAAc1D,GACZpB,KAAK+E,UAAUxD,KAAK,CAAEyD,MAAO5D,IAC7BpB,KAAKkB,mBAAqBlB,KAAKgB,oB,CAQjC,cAAMiE,G,OACJtB,EAAA3D,KAAKuD,WAAO,MAAAI,SAAA,SAAAA,EAAEuB,O,CAyEhB,MAAAC,GACE,MAAMnC,QACJA,EAAOoC,KACPA,EAAIf,MACJA,EAAKgB,SACLA,EAAQC,KACRA,EAAIC,MACJA,EAAKC,YACLA,EAAWC,WACXA,EAAUC,KACVA,EAAIC,OACJA,EAAM3D,SACNA,EAAQ5B,MACRA,EAAKM,IACLA,EAAGE,IACHA,EAAGC,UACHA,EAASR,SACTA,EAAQ0D,SACRA,EAAQjD,kBACRA,EAAiBG,cACjBA,EAAaC,mBACbA,EAAkBF,qBAClBA,EAAoBU,cACpBA,EAAaD,wBACbA,EAAuBjB,mBACvBA,EAAkBG,iBAClBA,EAAgBiF,iBAChBA,EAAgBnB,eAChBA,EAAcoB,iBACdA,EAAgBtB,yBAChBA,EAAwBuB,WACxBA,EAAUC,UACVA,EAASC,UACTA,EAASC,cACTA,EAAaC,YACbA,GACElG,KAEJ,MAAMmG,EAAepC,GAAY/B,EAEjC,MAAMoE,EACJtF,GACAH,GACAH,GACAiB,GACAP,EACIA,EACEmF,EAAoBC,QACpBD,EAAoBE,MACtBX,EAEN,MAAMY,EAAwB1F,EAC1Bd,KAAKyG,iBACLvF,EACA,oBAAoBD,eACpBN,EACA,oBAAoBC,aACpBJ,EACA,oBAAoBE,YACpBe,EACA,oBAAoBC,eACpB+C,EAEJ,MAAMiC,EAAc3C,EAAW,EAAIlD,EACnC,MAAM8F,EACJ7F,GACAI,GACAP,GACAH,GACCK,IAAc,GAAKuF,IAAkBC,EAAoBE,MACtD,YACA,SAEN,MAAMK,EACJ5G,KAAK8B,UAAUsE,MACbA,GAAiBC,EAAoBQ,SAAWhB,KACjDtB,EAEH,MAAMuC,EAAYpB,EAAO,EACzB,MAAMqB,EACJlG,EAAY,EAAI,GAAGmC,mBAA2B,GAEhD,MAAMgE,EAAc,GAAGD,KAAyBE,EAC9CjE,EACAyC,IAAe,GACfmB,KACEM,OAEJ,MAAMC,EAAehB,IAAiBpC,EACtC,MAAMqD,IACFpH,KAAK2C,GAAG0E,cAAc,mBAAqBF,EAE/C,MAAMG,EAAU,GAAGlB,IAAkBC,EAAoBE,QAEzD,GAAIL,EAAa,CACfqB,EAAkB,KAAMvH,KAAK2C,GAAIyC,EAAMhF,EAAO+F,E,CAEhD,OACEqB,EAACC,EAAI,CAACC,MAAO,CAAE,CAAC,aAAc1B,IAC5BwB,EAAA,sBAAoBzD,SAAUA,EAAU/B,SAAUmE,IAC9CnG,KAAK2H,WACLH,EAAA,kBACEI,IAAK5E,EACLqB,MAAOA,EACPoB,WAAYA,EACZJ,SAAUA,EACVrD,SAAUmF,EACVpD,SAAUA,IAIdyD,EAAA,gCACElC,KAAMC,EAAQ,QAAUD,EACxBM,iBAAkBQ,EAClByB,UAAWf,EACX9E,SAAUmE,EACVpC,SAAUA,EACV8B,iBAAkBA,EAClBG,UAAWA,GAEVoB,GACCI,EAAA,QACEE,MAAO,CACL,CAAC,YAAa3D,EACd,CAAC,aAAc3D,EAAME,OAAS,GAEhCwH,KAAK,aAELN,EAAA,QAAMpC,KAAK,WAIb0B,EACAU,EAAA,QAAAO,OAAAC,OAAA,CACEC,GAAIjF,EACJoC,KAAMA,EACN8C,IAAMvF,GAAQ3C,KAAKuD,QAAUZ,EAC7BpC,KAAMP,KAAKO,KACXG,IAAKA,EACLE,IAAKA,EACLR,MAAOA,EACPsH,MAAO,CACL,CAAC,gBAAiBN,GAAgBrD,EAClC,CAAC,YAAaA,EACd,CAAC,kBAAmBkC,GAEtBT,YAAaA,EAAcA,EAAc,GACzCH,SAAUA,EACVrD,SAAUmE,EACVpC,SAAUA,EACV5C,QAASnB,KAAKmB,QACdK,OAAQxB,KAAKwB,OACbI,QAAS5B,KAAK4B,QAAO,aACTyC,EAAK,mBACC2C,EAAW,eACfM,EAAO,wBACEtH,KAAKmI,qBAAoB,gBACjCnI,KAAKoI,aAAY,YACrBpI,KAAKqI,SAChBC,aAActI,KAAKsI,aACnBC,eAAgBvI,KAAKuI,eACrBC,UAAWxI,KAAKwI,UAChB1C,WAAYA,EACZC,UAAWA,EACX0C,KAAMzI,KAAKyI,KACXC,UAAW1H,EAAuBC,EAAgB,KAClD0H,UAAWlH,EAA0BC,EAAgB,MACjD1B,KAAKC,sBAGXuH,EAAA,WAAAO,OAAAC,OAAA,CACEC,GAAIjF,EACJ0E,MAAO,CACL,CAAC,aAAc/B,IAAW,OAAS5B,EACnC,CAAC,gBAAiBqD,GAAgBrD,EAClC,CAAC,YAAaA,GAEhBqB,KAAMA,EACN8C,IAAMvF,GAAQ3C,KAAKuD,QAAUZ,EAC7BvC,MAAOA,EACPsF,KAAMA,EACNL,SAAUA,EACVrD,SAAUmE,EACVX,YAAaA,EAAcA,EAAc,GACzCzB,SAAUA,EACV5C,QAASnB,KAAKmB,QACdK,OAAQxB,KAAKwB,OACbI,QAAS5B,KAAK4B,QAAO,aACTyC,EAAK,mBACC2C,EAAW,eACfM,EACdiB,eAAgBvI,KAAKuI,eACrBC,UAAWxI,KAAKwI,UAChB1C,WAAYA,EACZC,UAAWA,EACX2C,UAAW1H,EAAuBC,EAAgB,KAClD0H,UAAWlH,EAA0BC,EAAgB,MACjD1B,KAAKC,sBAGZ2I,EAAW5I,KAAK2C,GAAI,iBACnB6E,EAAA,QAAMpC,KAAK,iBAEZwD,EAAW5I,KAAK2C,GAAI,yBACnB6E,EAAA,QAAMpC,KAAK,0BAGdwD,EAAW5I,KAAK2C,GAAI,SAAW6E,EAAA,QAAMpC,KAAK,WACxCyD,EAAcjD,KACdiD,EAAcpE,IACfiC,EAAc,GACd/F,GACAO,GACAO,GACAjB,KACC+D,GACCiD,EAAA,uBACEzF,OACE/B,KAAK8B,UAAUsE,KAAmB,OACjCA,IAAkBC,EAAoBQ,SACrChB,GACFtB,EACI,GACA6B,EAEN0C,QAASlC,EAAiBJ,EAAwB,GAClDuC,aAAcpC,EACdiB,IAAK5E,EACLgD,UAAWA,IAETjC,GAAY2C,EAAc,GAC1Bc,EAAA,OAAKM,KAAK,gCACRN,EAAA,iBACEwB,QAAQ,UACRtB,MAAO,CACL,CAAC,iBAAkB,KACnB,CAAC,SAAU5G,EACX,CAAC,YAAaqG,IAGhBK,EAAA,oBACY,SACVS,GAAI,GAAGjF,cACP0E,MAAM,aAELrH,EAAQ,IAAGqG,GAEdc,EAAA,QAAMyB,OAAQ,KAAMhB,GAAIlB,GAAqB,kCACXL,EAAW,oB"}
1
+ {"version":3,"names":["icTextFieldCss","inputIds","MUTABLE_ATTRIBUTES","IC_INHERITED_ARIA","TextField","this","inheritedAttributes","hostMutationObserver","getMaxLengthExceeded","value","numChars","length","type","minValueUnattained","Number","min","maxValueExceeded","max","maxLength","maxLengthExceeded","getMaxCharactersReached","maxCharactersReached","maxCharacters","maxCharactersError","onInput","ev","target","icInput","emit","onBlur","minCharactersUnattained","minCharacters","icBlur","onFocus","icFocus","hasStatus","status","disabled","handleFormReset","initialValue","hostMutationCallback","mutationList","forceComponentUpdate","forEach","attributeName","addedNodes","removedNodes","includes","el","getAttribute","checkSlotInChildMutations","forceUpdate","undefined","inputId","debounceChanged","icChange","debounceEvent","debounce","watchValueHandler","newValue","inputEl","connectedCallback","disconnectedCallback","removeFormResetListener","_a","disconnect","componentWillLoad","inheritAttributes","readonly","addFormResetListener","removeDisabledFalse","componentDidLoad","onComponentRequiredPropUndefined","prop","label","propName","validationInlineInternal","getValidationText","validationText","MutationObserver","observe","attributes","childList","handleKeyDown","icKeydown","event","setFocus","focus","render","name","required","size","small","placeholder","helperText","rows","resize","validationStatus","validationInline","spellcheck","inputmode","fullWidth","truncateValue","hiddenInput","disabledMode","currentStatus","IcInformationStatus","Warning","Error","currentValidationText","maxLengthMessage","maxNumChars","messageAriaLive","showStatusText","Success","multiline","hiddenCharCountDescId","describedBy","getInputDescribedByText","trim","disabledText","showLeftIcon","querySelector","invalid","renderHiddenInput","h","Host","class","hideLabel","for","multiLine","slot","Object","assign","id","ref","ariaActiveDescendant","ariaExpanded","ariaOwns","autocomplete","autocapitalize","autoFocus","role","maxlength","minlength","isSlotUsed","isEmptyString","message","ariaLiveMode","variant","hidden"],"sources":["src/components/ic-text-field/ic-text-field.css?tag=ic-text-field&encapsulation=shadow","src/components/ic-text-field/ic-text-field.tsx"],"sourcesContent":["@import \"../../global/normalize.css\";\n\n:host {\n /**\n * @prop --input-width: Width of the input field\n */\n display: block;\n\n --ic-input-label-helpertext-padding: var(--ic-space-xxs);\n}\n\n:host(.fullwidth) {\n width: 100%;\n}\n\n::placeholder {\n color: var(--ic-color-tertiary-text);\n opacity: 1;\n}\n\ninput,\ntextarea {\n border: 0;\n border-radius: var(--ic-border-radius);\n background-color: var(--ic-architectural-white);\n line-height: 1.5rem;\n letter-spacing: 0.005rem;\n width: 100%;\n padding-right: var(--ic-space-xs);\n padding-left: var(--ic-space-xs);\n}\n\ntextarea {\n min-height: var(--ic-space-lg);\n resize: vertical;\n padding-top: 0.375rem;\n}\n\ninput:focus,\ntextarea:focus {\n border: 0;\n outline: 0;\n}\n\ninput:disabled,\ntextarea:disabled {\n color: var(--ic-architectural-200);\n}\n\ninput.readonly,\ntextarea.readonly {\n color: var(--ic-color-primary-text);\n}\n\n/* Chrome, Safari, Edge */\ninput::-webkit-outer-spin-button,\ninput::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n}\n\n/* Firefox */\ninput[type=\"number\"] {\n -moz-appearance: textfield;\n}\n\ntextarea.no-resize {\n resize: none;\n}\n\n.maxlengthtext {\n color: var(--ic-color-secondary-text);\n padding-right: var(--ic-space-xxxs);\n}\n\n.no-left-pad {\n padding-left: 0;\n}\n\n::slotted([slot=\"icon\"]) {\n fill: var(--ic-color-tertiary-text);\n}\n\n.has-value ::slotted([slot=\"icon\"]) {\n fill: var(--ic-color-primary-text);\n}\n\n.charcount {\n margin-right: calc(-1 * var(--ic-space-xxxs));\n}\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration,\ninput[type=\"search\"]::-webkit-search-results-button,\ninput[type=\"search\"]::-webkit-search-results-decoration {\n display: none;\n}\n\ninput[type=\"search\"].truncate-value {\n width: 100%;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n\n@media (forced-colors: active) {\n input.readonly,\n textarea.readonly {\n color: canvastext;\n }\n\n .has-value ::slotted([slot=\"icon\"]) {\n fill: currentcolor;\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n Host,\n Listen,\n Prop,\n State,\n Watch,\n Method,\n h,\n forceUpdate,\n} from \"@stencil/core\";\nimport {\n IcInformationStatus,\n IcAutocompleteTypes,\n IcAutocorrectStates,\n IcInformationStatusOrEmpty,\n IcValueEventDetail,\n IcSizesNoLarge,\n} from \"../../utils/types\";\nimport {\n inheritAttributes,\n debounceEvent,\n getInputDescribedByText,\n renderHiddenInput,\n isEmptyString,\n onComponentRequiredPropUndefined,\n addFormResetListener,\n removeFormResetListener,\n isSlotUsed,\n removeDisabledFalse,\n checkSlotInChildMutations,\n} from \"../../utils/helpers\";\nimport { IC_INHERITED_ARIA } from \"../../utils/constants\";\nimport {\n IcAriaAutocompleteTypes,\n IcTextFieldInputModes,\n IcTextFieldTypes,\n} from \"./ic-text-field.types\";\n\nlet inputIds = 0;\nconst MUTABLE_ATTRIBUTES = [...IC_INHERITED_ARIA, \"title\"];\n\n/**\n * @slot icon - Content will be placed to the left of the text input.\n */\n@Component({\n tag: \"ic-text-field\",\n styleUrl: \"ic-text-field.css\",\n shadow: true,\n})\nexport class TextField {\n private inheritedAttributes: { [k: string]: string } = {};\n private inputEl: HTMLInputElement | HTMLTextAreaElement;\n private hostMutationObserver: MutationObserver = null;\n\n @Element() el: HTMLIcTextFieldElement;\n\n @State() numChars: number = 0;\n @State() maxCharactersReached: boolean = false;\n @State() maxCharactersError: boolean = false;\n @State() minCharactersUnattained: boolean = false;\n @State() maxLengthExceeded: boolean = false;\n @State() maxValueExceeded: boolean = false;\n @State() minValueUnattained: boolean = false;\n\n /**\n * @slot clear-button - an ic-button clear component will render as an end adornment to the input.\n * @slot search-submit-button - an ic-button search submit component will render as an end adornment to the input.\n * @slot menu - an ic-menu component will appear below the input.\n */\n\n /**\n * @internal The active element when focus is on the ic-menu items.\n */\n @Prop() ariaActiveDescendant?: string;\n\n /**\n * @internal Used to identify whether inputting any text triggers more predictions\n */\n @Prop() ariaAutocomplete: IcAriaAutocompleteTypes = undefined;\n\n /**\n * @internal Used to identify if the slotted menu is rendered\n */\n @Prop() ariaExpanded: string;\n\n /**\n * @internal Used to identify any related child component\n */\n @Prop() ariaOwns: string;\n\n /**\n * The automatic capitalisation of the text value as it is entered/edited by the user.\n * Available options: \"off\", \"none\", \"on\", \"sentences\", \"words\", \"characters\".\n */\n @Prop() autocapitalize = \"off\";\n\n /**\n * The state of autocompletion the browser can apply on the text value.\n */\n @Prop() autocomplete: IcAutocompleteTypes = \"off\";\n\n /**\n * The state of autocorrection the browser can apply when the user is entering/editing the text value.\n */\n @Prop() autocorrect: IcAutocorrectStates = \"off\";\n\n /**\n * If `true`, the form control will have input focus when the page loads.\n */\n @Prop() autoFocus = false;\n\n /**\n * If `true`, the disabled state will be set.\n */\n @Prop() disabled: boolean = false;\n\n /**\n * Specify whether the text field fills the full width of the container.\n * If `true`, this overrides the --input-width CSS variable.\n */\n @Prop() fullWidth: boolean = false;\n\n /**\n * The helper text that will be displayed for additional field guidance.\n */\n @Prop() helperText: string = \"\";\n\n /**\n * If `true`, the label will be hidden and the required label value will be applied as an aria-label.\n */\n @Prop() hideLabel: boolean = false;\n\n /**\n * @internal If `true`, the hidden form input will stop rendering for form submission.\n */\n @Prop() hiddenInput: boolean = true;\n\n /**\n * The ID for the input.\n */\n @Prop() inputId?: string = `ic-text-field-input-${inputIds++}`;\n\n /**\n * A hint to the browser for which keyboard to display.\n * Possible values: `\"none\"`, `\"text\"`, `\"tel\"`, `\"url\"`,\n * `\"email\"`, `\"numeric\"`, `\"decimal\"`, and `\"search\"`.\n */\n @Prop() inputmode: IcTextFieldInputModes = \"text\";\n\n /**\n * The label for the input.\n */\n @Prop() label!: string;\n\n /**\n * The maximum number that can be accepted as a value, when `type` is `number` and `rows` is `1`. (NOTE: Ensure to include visual indication of max value in `helperText` or `label`)\n */\n @Prop() max: string | number = undefined;\n\n /**\n * The maximum number of characters that can be entered in the field. Will display an error if too many characters are entered.\n */\n @Prop() maxCharacters: number = 0;\n\n /**\n * The count of characters in the field. Will display a warning if the bound is reached.\n */\n @Prop() maxLength: number = 0;\n\n /**\n * The text to display as the validation message when the maximum length is exceeded.\n */\n @Prop() maxLengthMessage: string = \"Maximum length exceeded\";\n\n /**\n * The minimum number that can be accepted as a value, when `type` is `number` and `rows` is `1`. (NOTE: Ensure to include visual indication of min value in `helperText` or `label`)\n */\n @Prop() min: string | number = undefined;\n\n /**\n * The minimum number of characters that can be entered in the field.\n */\n @Prop() minCharacters: number = 0;\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 * The placeholder value to be displayed.\n */\n @Prop() placeholder: string = \"\";\n\n /**\n * If `true`, the read only state will be set.\n */\n @Prop({ reflect: true }) readonly: boolean = false;\n\n /**\n * If `true`, the input will require a value.\n */\n @Prop() required: boolean = false;\n\n /**\n * If `true`, the multiline text area will be resizeable.\n */\n @Prop() resize: boolean = false;\n\n /**\n * @internal Used to set the role if not default textbox;\n */\n @Prop() role: string;\n\n /**\n * The number of rows to transform the text field into a text area with a specific height.\n */\n @Prop() rows: number = 1;\n\n /**\n * The size of the text field component.\n */\n @Prop() size?: IcSizesNoLarge = \"default\";\n\n /**\n * @deprecated This prop should not be used anymore. Set prop `size` to \"small\" instead.\n */\n @Prop() small?: boolean = false;\n\n /**\n * If `true`, the value of the text field will have its spelling and grammar checked.\n */\n @Prop() spellcheck: boolean = false;\n /**\n * @internal If `true`, an ellipsis will be displayed at the end of the value if the value is longer than the container.\n */\n @Prop() truncateValue?: boolean;\n\n /**\n * The type of control to display. The default type is text.\n */\n @Prop() type: IcTextFieldTypes = \"text\";\n\n /**\n * If `true`, the icon in input control will be displayed - only applies when validationStatus ='success'.\n */\n @Prop() validationInline: boolean = false;\n\n /**\n * @internal If `true`, the validation will display inline.\n */\n @Prop() validationInlineInternal: boolean = false;\n\n /**\n * The validation state - e.g. 'error' | 'warning' | 'success'.\n */\n @Prop() validationStatus: IcInformationStatusOrEmpty = \"\";\n\n /**\n * The validation state - e.g. 'error' | 'warning' | 'success'.\n */\n @Prop() validationText: string = \"\";\n\n /**\n * The amount of time, in milliseconds, to wait to trigger the `icChange` event after each keystroke.\n */\n @Prop() debounce: number = 0;\n\n @Watch(\"debounce\")\n private debounceChanged() {\n this.icChange = debounceEvent(this.icChange, this.debounce);\n }\n\n /**\n * The value of the text field.\n */\n @Prop({ reflect: true, mutable: true }) value: string = \"\";\n @State() initialValue = this.value;\n\n @Watch(\"value\")\n private watchValueHandler(newValue: string): void {\n if (this.inputEl && this.inputEl.value !== newValue) {\n this.inputEl.value = newValue;\n }\n\n this.getMaxLengthExceeded(newValue);\n\n this.getMaxCharactersReached(newValue);\n\n this.icChange.emit({ value: newValue });\n }\n\n /**\n * @internal Emitted when the validationInlineInternal is `true`\n */\n @Event() getValidationText: EventEmitter<IcValueEventDetail>;\n\n /**\n * Emitted when input loses focus.\n */\n @Event() icBlur: EventEmitter<IcValueEventDetail>;\n\n /**\n * Emitted when the value has changed.\n */\n @Event() icChange: EventEmitter<IcValueEventDetail>;\n\n /**\n * Emitted when input gains focus.\n */\n @Event() icFocus: EventEmitter<IcValueEventDetail>;\n\n /**\n * Emitted when a keyboard input occurred.\n */\n @Event() icInput: EventEmitter<IcValueEventDetail>;\n\n /**\n * Emitted when a keydown event occurred.\n */\n @Event() icKeydown: EventEmitter<{ event: KeyboardEvent }>;\n\n connectedCallback(): void {\n this.debounceChanged();\n }\n\n disconnectedCallback(): void {\n removeFormResetListener(this.el, this.handleFormReset);\n this.hostMutationObserver?.disconnect();\n }\n\n componentWillLoad(): void {\n if (this.value !== this.initialValue) {\n this.watchValueHandler(this.value);\n }\n\n this.getMaxLengthExceeded(this.value);\n\n this.getMaxCharactersReached(this.value);\n\n this.inheritedAttributes = inheritAttributes(this.el, MUTABLE_ATTRIBUTES);\n\n if (this.readonly) {\n this.maxLengthExceeded = false;\n this.maxValueExceeded = false;\n this.minValueUnattained = false;\n }\n\n addFormResetListener(this.el, this.handleFormReset);\n\n removeDisabledFalse(this.disabled, this.el);\n }\n\n componentDidLoad(): void {\n onComponentRequiredPropUndefined(\n [{ prop: this.label, propName: \"label\" }],\n \"Text Field\"\n );\n if (this.validationInlineInternal) {\n this.getValidationText.emit({ value: this.validationText });\n }\n\n this.hostMutationObserver = new MutationObserver(this.hostMutationCallback);\n this.hostMutationObserver.observe(this.el, {\n attributes: true,\n childList: true,\n });\n }\n\n @Listen(\"keydown\", {})\n handleKeyDown(ev: KeyboardEvent): void {\n this.icKeydown.emit({ event: ev });\n this.maxCharactersError = this.maxCharactersReached;\n }\n\n /**\n * Sets focus on the native `input`.\n */\n\n @Method()\n async setFocus(): Promise<void> {\n this.inputEl?.focus();\n }\n\n private getMaxLengthExceeded = (value: string) => {\n this.numChars = value.length;\n\n if (this.type === \"number\") {\n this.minValueUnattained = value && Number(value) < Number(this.min);\n this.maxValueExceeded = Number(value) > Number(this.max);\n }\n\n if (this.maxLength > 0) {\n this.maxLengthExceeded = this.numChars > this.maxLength;\n }\n };\n\n private getMaxCharactersReached = (value: string) => {\n this.numChars = value.length;\n this.maxCharactersReached =\n this.maxCharacters > 0 ? this.numChars >= this.maxCharacters : false;\n\n if (this.maxCharactersError && !this.maxCharactersReached) {\n this.maxCharactersError = false;\n }\n };\n\n private onInput = (ev: Event) => {\n this.value = (ev.target as HTMLInputElement).value;\n this.icInput.emit({ value: this.value });\n };\n\n private onBlur = (ev: Event) => {\n const value = (ev.target as HTMLInputElement).value;\n this.numChars = value.length;\n this.minCharactersUnattained =\n this.minCharacters > 0 ? this.numChars < this.minCharacters : false;\n this.icBlur.emit({ value: value });\n };\n\n private onFocus = (ev: Event) => {\n this.icFocus.emit({ value: (ev.target as HTMLInputElement).value });\n };\n\n private hasStatus = (status: IcInformationStatusOrEmpty) =>\n status !== \"\" && !this.disabled;\n\n private handleFormReset = (): void => {\n this.value = this.initialValue;\n };\n\n // triggered when attributes of host element change\n private hostMutationCallback = (mutationList: MutationRecord[]): void => {\n let forceComponentUpdate = false;\n mutationList.forEach(\n ({ attributeName, type, addedNodes, removedNodes }) => {\n if (MUTABLE_ATTRIBUTES.includes(attributeName)) {\n this.inheritedAttributes[attributeName] =\n this.el.getAttribute(attributeName);\n forceComponentUpdate = true;\n } else if (type === \"childList\") {\n forceComponentUpdate = checkSlotInChildMutations(\n addedNodes,\n removedNodes,\n \"icon\"\n );\n }\n }\n );\n if (forceComponentUpdate) {\n forceUpdate(this);\n }\n };\n\n render() {\n const {\n inputId,\n name,\n label,\n required,\n size,\n small,\n placeholder,\n helperText,\n rows,\n resize,\n disabled,\n value,\n min,\n max,\n maxLength,\n numChars,\n readonly,\n maxLengthExceeded,\n maxCharacters,\n maxCharactersError,\n maxCharactersReached,\n minCharacters,\n minCharactersUnattained,\n minValueUnattained,\n maxValueExceeded,\n validationStatus,\n validationText,\n validationInline,\n validationInlineInternal,\n spellcheck,\n inputmode,\n fullWidth,\n truncateValue,\n hiddenInput,\n } = this;\n\n const disabledMode = readonly || disabled;\n\n const currentStatus =\n maxLengthExceeded ||\n maxValueExceeded ||\n minValueUnattained ||\n minCharactersUnattained ||\n maxCharactersError\n ? maxCharactersError\n ? IcInformationStatus.Warning\n : IcInformationStatus.Error\n : validationStatus;\n\n const currentValidationText = maxLengthExceeded\n ? this.maxLengthMessage\n : maxCharactersError\n ? `Maximum input is ${maxCharacters} characters`\n : maxValueExceeded\n ? `Maximum value of ${max} exceeded`\n : minValueUnattained\n ? `Minimum value of ${min} not met`\n : minCharactersUnattained\n ? `Minimum input is ${minCharacters} characters`\n : validationText;\n\n const maxNumChars = readonly ? 0 : maxLength;\n const messageAriaLive =\n maxLengthExceeded ||\n maxCharactersError ||\n maxValueExceeded ||\n minValueUnattained ||\n (maxLength === 0 && currentStatus === IcInformationStatus.Error)\n ? \"assertive\"\n : \"polite\";\n\n const showStatusText =\n this.hasStatus(currentStatus) &&\n !(currentStatus == IcInformationStatus.Success && validationInline) &&\n !validationInlineInternal;\n\n const multiline = rows > 1;\n const hiddenCharCountDescId =\n maxLength > 0 ? `${inputId}-charcount-desc` : \"\";\n\n const describedBy = `${hiddenCharCountDescId} ${getInputDescribedByText(\n inputId,\n helperText !== \"\",\n showStatusText\n )}`.trim();\n\n const disabledText = disabledMode && !readonly;\n const showLeftIcon =\n !!this.el.querySelector(`[slot=\"icon\"]`) && !disabledText;\n\n const invalid = `${currentStatus === IcInformationStatus.Error}`;\n\n if (hiddenInput) {\n renderHiddenInput(true, this.el, name, value, disabledMode);\n }\n return (\n <Host class={{ [\"fullwidth\"]: fullWidth }}>\n <ic-input-container readonly={readonly} disabled={disabledMode}>\n {!this.hideLabel && (\n <ic-input-label\n for={inputId}\n label={label}\n helperText={helperText}\n required={required}\n disabled={disabledText}\n readonly={readonly}\n ></ic-input-label>\n )}\n\n <ic-input-component-container\n size={small ? \"small\" : size}\n validationStatus={currentStatus}\n multiLine={multiline}\n disabled={disabledMode}\n readonly={readonly}\n validationInline={validationInline}\n fullWidth={fullWidth}\n >\n {showLeftIcon && (\n <span\n class={{\n [\"readonly\"]: readonly,\n [\"has-value\"]: value.length > 0,\n }}\n slot=\"left-icon\"\n >\n <slot name=\"icon\" />\n </span>\n )}\n\n {!multiline ? (\n <input\n id={inputId}\n name={name}\n ref={(el) => (this.inputEl = el as HTMLInputElement)}\n type={this.type}\n min={min}\n max={max}\n value={value}\n class={{\n [\"no-left-pad\"]: !showLeftIcon && readonly,\n [\"readonly\"]: readonly,\n [\"truncate-value\"]: truncateValue,\n }}\n placeholder={placeholder ? placeholder : \"\"}\n required={required}\n disabled={disabledMode}\n readonly={readonly}\n onInput={this.onInput}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n aria-label={label}\n aria-describedby={describedBy}\n aria-invalid={invalid}\n aria-activedescendant={this.ariaActiveDescendant}\n aria-expanded={this.ariaExpanded}\n aria-owns={this.ariaOwns}\n autocomplete={this.autocomplete}\n autocapitalize={this.autocapitalize}\n autoFocus={this.autoFocus}\n spellcheck={spellcheck}\n inputmode={inputmode}\n role={this.role}\n maxlength={maxCharactersReached ? maxCharacters : null}\n minlength={minCharactersUnattained ? minCharacters : null}\n {...this.inheritedAttributes}\n ></input>\n ) : (\n <textarea\n id={inputId}\n class={{\n [\"no-resize\"]: resize === false || readonly,\n [\"no-left-pad\"]: !showLeftIcon && readonly,\n [\"readonly\"]: readonly,\n }}\n name={name}\n ref={(el) => (this.inputEl = el as HTMLTextAreaElement)}\n value={value}\n rows={rows}\n required={required}\n disabled={disabledMode}\n placeholder={placeholder ? placeholder : \"\"}\n readonly={readonly}\n onInput={this.onInput}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n aria-label={label}\n aria-describedby={describedBy}\n aria-invalid={invalid}\n autocapitalize={this.autocapitalize}\n autoFocus={this.autoFocus}\n spellcheck={spellcheck}\n inputmode={inputmode}\n maxlength={maxCharactersReached ? maxCharacters : null}\n minlength={minCharactersUnattained ? minCharacters : null}\n {...this.inheritedAttributes}\n ></textarea>\n )}\n {isSlotUsed(this.el, \"clear-button\") && (\n <slot name=\"clear-button\"></slot>\n )}\n {isSlotUsed(this.el, \"search-submit-button\") && (\n <slot name=\"search-submit-button\"></slot>\n )}\n </ic-input-component-container>\n {isSlotUsed(this.el, \"menu\") && <slot name=\"menu\"></slot>}\n {(!isEmptyString(validationStatus) ||\n !isEmptyString(validationText) ||\n maxNumChars > 0 ||\n maxValueExceeded ||\n maxCharactersError ||\n minCharactersUnattained ||\n minValueUnattained) &&\n !validationInlineInternal && (\n <ic-input-validation\n status={\n this.hasStatus(currentStatus) === false ||\n (currentStatus === IcInformationStatus.Success &&\n validationInline) ||\n validationInlineInternal\n ? \"\"\n : currentStatus\n }\n message={showStatusText ? currentValidationText : \"\"}\n ariaLiveMode={messageAriaLive}\n for={inputId}\n fullWidth={fullWidth}\n >\n {!readonly && maxNumChars > 0 && (\n <div slot=\"validation-message-adornment\">\n <ic-typography\n variant=\"caption\"\n class={{\n [\"maxlengthtext\"]: true,\n [\"error\"]: maxLengthExceeded,\n [\"disabled\"]: disabledText,\n }}\n >\n <span\n aria-live=\"polite\"\n id={`${inputId}-charcount`}\n class=\"charcount\"\n >\n {numChars}/{maxNumChars}\n </span>\n <span hidden={true} id={hiddenCharCountDescId}>\n Field can contain a maximum of {maxNumChars} characters.\n </span>\n </ic-typography>\n </div>\n )}\n </ic-input-validation>\n )}\n </ic-input-container>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{r as i,c as t,h as e,f as a,H as o,g as n}from"./p-6b5e91e2.js";import{i as s,D as r,b as d,e as c,z as l}from"./p-fef9e8c9.js";import{C as v}from"./p-3b185c32.js";import{O as h}from"./p-426ec638.js";import"./p-26b7b18f.js";const m='/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%;}body{margin:0}main{display:block}h1{font-size:2em;margin:0.67em 0}hr{box-sizing:content-box;height:0;overflow:visible;}pre{font-family:monospace, monospace;font-size:1em;}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em;}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0;}button,input{overflow:visible}button,select{text-transform:none}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal;}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0;}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px;}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit;}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font-style:inherit;vertical-align:baseline}:host{display:block}:host(:focus-within){z-index:var(--ic-z-index-navigation-item)}svg{width:var(--ic-space-xl);fill:var(--ic-theme-text)}.svg{margin-left:auto}.chevron-container svg,.chevron-container .svg{width:var(--ic-space-lg);height:var(--ic-space-lg)}.chevron-container{flex-grow:1}:host(.expandable.navigation-item) .link,:host(.expandable.navigation-item) ::slotted(a){padding-right:0}:host(.navigation-item) .link,:host(.navigation-item) ::slotted(a){height:calc(100% - var(--ic-space-xxs));width:-moz-fit-content;width:fit-content;color:var(--ic-theme-text);display:flex;align-items:center;justify-content:center;padding:0 var(--ic-space-md) var(--ic-space-xxs);text-decoration:none;transition:var(--ic-easing-transition-fast);position:relative;white-space:nowrap}:host(.navigation-item) ::slotted(a){height:100%;font:var(--ic-font-label) !important;letter-spacing:var(--ic-font-letter-spacing-0pt025) !important;padding:0 var(--ic-space-md) !important}:host(.navigation-item-selected) .link::after,:host(.navigation-item-selected) ::slotted(a.active)::after,:host(.navigation-item-top-nav) ::slotted(a.active)::after{content:"";height:0.25rem;width:100%;position:absolute;bottom:0;background-color:var(--ic-theme-text)}:host(.navigation-item-selected.navigation-item-page-header) ::slotted(a.active)::after,:host(.navigation-item-selected.navigation-item-page-header) .link::after,:host(.navigation-item.navigation-item-page-header) ::slotted(a.active)::after,:host(.navigation-item-top-nav-child) ::slotted(a.active)::after{content:none}:host(.navigation-item-side-menu-selected) .link,:host(.navigation-item-side-menu) ::slotted(a.active),:host(.navigation-item-top-nav-child) ::slotted(a.active){box-shadow:none}:host(.navigation-item) .link:hover:not(:focus){background-color:var(--ic-theme-hover);cursor:pointer}:host(.navigation-item:not(.navigation-item-page-header,.navigation-item-side-menu)) ::slotted(a:hover:not(:focus)){background-color:var(--ic-theme-hover) !important}:host(.navigation-item:not(.navigation-item-top-nav-child,.navigation-item-side-menu,.navigation-item-top-nav-child-selected .navigation-item-side-menu-selected)) .focus-indicator:focus-within{box-shadow:var(--ic-border-focus);border-radius:var(--ic-border-radius)}:host(.navigation-item) .link:focus,:host(.navigation-item) ::slotted(a:focus){box-shadow:var(--ic-border-focus);border-radius:var(--ic-border-radius);outline:var(--ic-hc-focus-outline)}:host(.navigation-item-selected) .link:focus,:host(.navigation-item) ::slotted(a.active:focus){box-shadow:var(--ic-border-focus);border-radius:var(--ic-border-radius);outline:var(--ic-hc-focus-outline)}:host(.navigation-item-selected.dark) .link:focus,:host(.navigation-item.dark) ::slotted(a.active:focus){box-shadow:var(--ic-border-focus);border-radius:var(--ic-border-radius);outline:var(--ic-hc-focus-outline)}:host(.navigation-item) .link:active:not(:focus),:host(.navigation-item) ::slotted(a:active:not(:focus)){background-color:var(--ic-theme-active)}:host(.navigation-item-side-menu) .link,:host(.navigation-item-side-menu) ::slotted(a){min-height:2.5rem;height:auto;width:100%;box-sizing:border-box;color:var(--ic-color-primary-text);display:flex;align-items:center;justify-content:flex-start;text-decoration:none;text-wrap:wrap;white-space:normal;transition:box-shadow var(--ic-transition-duration-fast),\n border-radius var(--ic-transition-duration-fast)}:host(.navigation-item-side-menu) ::slotted(a){font:var(--ic-font-body) !important;letter-spacing:var(--ic-font-letter-spacing-0pt005) !important;transition:box-shadow var(--ic-easing-transition-fast),\n background-color var(--ic-easing-transition-fast)}:host(.navigation-item-side-menu) .link:hover:not(:focus){background-color:var(--ic-action-dark-bg-hover)}:host(.navigation-item-side-menu) ::slotted(a:hover:not(:focus)){background-color:var(--ic-action-dark-bg-hover) !important}:host(.navigation-item-side-menu) .focus-indicator:focus-within{box-shadow:none}:host(.navigation-item-side-menu) .link:focus,:host(.navigation-item-side-menu) ::slotted(a:focus){box-shadow:var(--ic-border-focus-inset) !important;width:auto;border-radius:var(--ic-border-radius-inset) !important}:host(.navigation-item-side-menu-selected) .link,:host(.navigation-item-side-menu-selected) ::slotted(a){transition:box-shadow var(--ic-easing-transition-slow),\n background-color var(--ic-easing-transition-slow)}:host(.navigation-item-side-menu-selected) .link:focus,:host(.navigation-item-side-menu) ::slotted(a.active:focus),:host(.navigation-item-top-nav-child) ::slotted(a.active:focus){margin-left:var(--ic-space-xs) !important;padding-left:var(--ic-space-xs) !important}:host(.navigation-item-top-nav-child) .link,:host(.navigation-item-top-nav-child) ::slotted(a){height:2.5rem;width:-moz-fit-content;width:fit-content;min-width:9.063rem;color:var(--ic-color-primary-text);display:flex;align-items:center;justify-content:flex-start;padding:0 var(--ic-space-md) !important;text-decoration:none;position:relative;transition:box-shadow var(--ic-transition-duration-fast),\n border-radius var(--ic-transition-duration-slow)}:host(.navigation-item-top-nav-child) ::slotted(a){font:var(--ic-font-body) !important;letter-spacing:var(--ic-font-letter-spacing-0pt005) !important}:host(.navigation-item-top-nav-child) .link:hover:not(:focus){background-color:var(--ic-action-dark-bg-hover) !important}:host(.navigation-item-top-nav-child) ::slotted(a:hover):not(:focus){background-color:var(--ic-action-dark-bg-hover) !important}:host(.navigation-item-top-nav-child) .link:focus,:host(.navigation-item-top-nav-child) ::slotted(a:focus){z-index:1;outline:var(--ic-hc-focus-outline);border-radius:var(--ic-border-radius-inset);box-shadow:var(--ic-border-focus-inset);transition:border-radius 0s, box-shadow var(--ic-transition-duration-fast)}:host(.navigation-item-top-nav-child) ::slotted(a.active:focus){box-shadow:var(--ic-border-focus-inset);border-radius:var(--ic-border-radius-inset)}:host(.navigation-item-side-menu) .link:active:not(:focus){background-color:var(--ic-action-dark-bg-active)}:host(.navigation-item-top-nav-child) .link:active:not(:focus),:host(.navigation-item-top-nav-child) ::slotted(a:active):not(:focus){outline:var(--ic-hc-focus-outline);background-color:var(--ic-action-dark-bg-active)}:host(.navigation-item-top-nav-child) ::slotted(a:active):not(:focus),:host(.navigation-item-side-menu) ::slotted(a:active):not(:focus){background-color:var(--ic-action-dark-bg-active) !important}:host(.navigation-item-side-menu-selected) *,:host(.navigation-item-top-nav-child-selected) *,:host(.navigation-item-side-menu) ::slotted(a.active),:host(.navigation-item-top-nav-child) ::slotted(a.active){font-weight:700 !important}:host(.navigation-item-top-nav-child) ::slotted(a.active)::before,:host(.navigation-item-top-nav-child-selected) .link::before,:host(.navigation-item-side-menu-selected) .link::before,:host(.navigation-item-side-menu) ::slotted(a.active)::before,:host(.navigation-item-side-menu-selected) .link:focus::before,:host(.navigation-item-side-menu) ::slotted(a.active:focus)::before{content:"";position:absolute;left:0;width:var(--ic-space-xs);height:inherit;min-height:2.5rem;background-color:var(--ic-action-default);transition:left 0s}:host(.navigation-item-top-nav-child-selected) .link::before,:host(.navigation-item-side-menu-selected) .link::before,:host(.navigation-item-side-menu-selected) .link:focus::before{margin-top:0.25rem}:host(.navigation-item-top-nav-child-selected) .link:focus{margin-left:var(--ic-space-xs);margin-right:calc(-1 * var(--ic-space-xs));padding-left:var(--ic-space-xs) !important}:host(.navigation-item-top-nav-child-selected) .link:focus::before{left:calc(-1 * var(--ic-space-xs));z-index:1}:host(.navigation-item-side-menu-selected) .link::before,:host(.navigation-item-side-menu) ::slotted(a.active)::before,:host(.navigation-item-side-menu-selected) .link:focus::before,:host(.navigation-item-side-menu) ::slotted(a.active:focus)::before{z-index:1}:host(.navigation-item-side-menu-selected) .link:focus::before,:host(.navigation-item-side-menu) ::slotted(a.active:focus)::before,:host(.navigation-item-top-nav-child) ::slotted(a.active:focus)::before{left:calc(-1 * var(--ic-space-xs))}:host(.navigation-item-side-menu-selected) .link::after{display:none}:host(.navigation-item-side-nav-collapsed) .link{height:100%}:host(.navigation-item-side-nav-collapsed) ::slotted(svg),:host(.navigation-item-side-nav-collapsed-with-label) ::slotted(svg){margin:auto;pointer-events:none}:host(.navigation-item-side-nav-collapsed) .icon,:host(.navigation-item-side-nav-collapsed-with-label) .icon,:host(.navigation-item-side-nav-collapsed-with-label) ic-typography{align-items:center;padding:0;margin:auto 0;width:-moz-fit-content;width:fit-content;pointer-events:none}:host(.navigation-item-side-nav-collapsed-with-label) ic-typography{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%;text-align:center}:host(.navigation-item-side-nav-collapsed-with-label) .link,:host(.navigation-item-side-nav-collapsed-with-label) ::slotted(a){display:flex;flex-direction:column;height:-moz-fit-content;height:fit-content;padding:var(--ic-space-xs) !important;gap:var(--ic-space-xxs)}:host(.navigation-item-side-nav.navigation-item-side-nav-collapsed-with-label) .link,:host(.navigation-item-side-nav.navigation-item-side-nav-collapsed-with-label) ::slotted(a){height:auto !important;gap:0;width:auto;padding:var(--ic-space-xs) !important}:host(.navigation-item-side-nav.navigation-item-side-nav-collapsed-with-label) ::slotted(a){display:block;text-align:center}:host(.navigation-item-side-nav.navigation-item-side-nav-collapsed-with-label) .link ic-typography{opacity:1;min-width:-moz-min-content;min-width:min-content}:host(.navigation-item-side-nav-collapsed) svg,:host(.navigation-item-side-nav-collapsed-with-label) svg{display:none}::slotted(svg){fill:var(--ic-theme-text);width:var(--ic-space-lg);margin-left:var(--ic-space-md)}.icon{height:var(--ic-space-lg);width:var(--ic-space-xxl);margin-left:calc(-1 * var(--ic-space-md));flex:0 1 0%;position:relative}.icon>::slotted(*){margin-left:var(--ic-space-md) !important}:host(.navigation-item-side-nav-collapsed) .icon>::slotted(*){margin:auto !important}:host(.navigation-item-side-nav) .link,:host(.navigation-item-side-nav) ::slotted(a){height:var(--navigation-item-height, 56px);min-height:var(--navigation-item-min-height);width:var(--navigation-item-width, auto);justify-content:var(--navigation-item-justify-content);display:flex;gap:var(--ic-space-xs);box-sizing:border-box;color:var(--navigation-item-child-color) !important;text-decoration:none !important;white-space:nowrap;padding-top:var(--ic-space-md) !important;padding-bottom:var(--ic-space-md) !important;text-wrap:wrap}:host(.navigation-item-side-nav.navigation-item-top-nav-child) .link,:host(.navigation-item-side-nav.navigation-item-top-nav-child) ::slotted(a){height:var(--navigation-item-child-height);width:var(--navigation-group-width);color:var(--navigation-item-child-color) !important;display:flex;gap:0.625rem;box-sizing:border-box;min-width:0;transition:box-shadow var(--ic-easing-transition-fast);text-decoration:none !important;white-space:nowrap}:host(.navigation-item-side-nav.navigation-item-top-nav-child) .link:focus,:host(.navigation-item-side-nav.navigation-item-top-nav-child) ::slotted(a:focus){box-shadow:var(--ic-border-focus-dark)}:host(.navigation-item-side-nav.navigation-item-side-menu) .link:active{background-color:var(--navigation-item-child-active)}:host(.navigation-item-side-nav.navigation-item-top-nav-child) .link:active,:host(.navigation-item-side-nav.navigation-item-top-nav-child) ::slotted(a:active){background-color:var(--navigation-item-child-active)}:host(.navigation-item-side-nav) a.link ic-typography,:host(.navigation-item-side-nav.navigation-item-top-nav-child) a.link ic-typography,:host(.navigation-item-side-nav) div.link ic-typography,:host(.navigation-item-side-nav.navigation-item-top-nav-child) div.link ic-typography,.navigation-item-side-nav-slotted-text{opacity:var(--navigation-item-label-opacity);transition:opacity var(--ic-easing-transition-slow);white-space:wrap;text-overflow:ellipsis;overflow:hidden}:host(.navigation-item-side-nav.navigation-item-selected) .link,:host(.navigation-item-side-nav.navigation-item) ::slotted(a.active){box-shadow:inset 0.313rem 0 0 var(--ic-theme-text)}:host(.navigation-item-side-nav.navigation-item-selected) .link::before,:host(.navigation-item-side-nav) ::slotted(a.active)::before{content:"";display:block;position:absolute;inset:0 0 0 0.313rem;border-radius:0.688rem !important;transition:var(--ic-easing-transition-slow)}:host(.navigation-item-side-nav.navigation-item-selected) .link:focus::before,:host(.navigation-item-side-nav) ::slotted(a.active:focus)::before{box-shadow:var(--ic-border-focus-inset)}:host(:not(.navigation-item-side-nav-collapsed).navigation-item-side-nav.navigation-item-side-nav-collapsed-with-label) .link{opacity:var(--navigation-item-label-opacity);height:auto}:host(.navigation-item-top-nav-child.navigation-item-side-nav-collapsed-with-label) .link,:host(.navigation-item-top-nav-child.navigation-item-side-nav-collapsed-with-label) ::slotted(a){min-width:var(--navigation-group-item-min-width);padding:var(--ic-space-xs) !important;height:auto;gap:0}:host(.navigation-item-top-nav-child.navigation-item-side-nav-collapsed-with-label) ::slotted(a){display:block}:host(.navigation-item-side-nav.navigation-item-selected) .link::after,:host(.navigation-item-side-nav) ::slotted(a.active)::after{display:none}:host(.navigation-item-side-nav.navigation-item) .link:focus,:host(.navigation-item-side-nav.navigation-item) ::slotted(a:focus){box-shadow:var(--ic-border-focus-inset);border-radius:var(--ic-border-radius-inset);background-color:transparent}:host(.navigation-item-side-nav.navigation-item-selected) .link:focus,:host(.navigation-item-side-nav) ::slotted(a.active:focus){margin:0 auto;box-shadow:inset 0.313rem 0 0 var(--ic-theme-text);border-radius:0}:host(.navigation-item-side-nav.navigation-item) .link:hover:not(:focus){background-color:var(--ic-theme-hover) !important}:host(.navigation-item-page-header).link,:host(.navigation-item-page-header) a,:host(.navigation-item-page-header) ::slotted(a){height:2.5rem !important;color:var(--ic-color-primary-text) !important;transition:all var(--ic-easing-transition-fast) !important;box-shadow:rgba(23 89 188 / 0%) !important}:host(.navigation-item-page-header.navigation-item-selected) .link::after,:host(.navigation-item-page-header) ::slotted(a.active)::after{content:" " !important;position:absolute;bottom:0;left:0;right:0;height:var(--ic-space-xxs);background-color:var(--ic-action-default) !important}:host(.navigation-item-page-header) .link:hover,:host(.navigation-item-page-header) ::slotted(.link:hover),:host(.navigation-item-page-header) ::slotted(a:hover),:host(.navigation-item-page-header) .link:hover:not(:focus){background-color:var(--ic-action-default-bg-hover) !important;cursor:pointer}:host(.navigation-item-page-header) .link:focus,:host(.navigation-item-page-header) ::slotted(a:focus){box-shadow:var(--ic-border-focus)}:host(.navigation-item-page-header) .link:active,:host(.navigation-item-page-header) ::slotted(a:active){background-color:var(--ic-action-default-bg-active) !important}:host(.navigation-item-page-header.navigation-item-selected) .link:focus::after,:host(.navigation-item-page-header) ::slotted(a.active:focus)::after{border-bottom-left-radius:var(--ic-border-radius);border-bottom-right-radius:var(--ic-border-radius)}:host(.navigation-item-page-header.navigation-item-selected.with-transition) .link,:host(.navigation-item-page-header.navigation-item-selected.with-transition) ::slotted(a.active){transition:all var(--ic-easing-transition-fast),\n border-color var(--ic-transition-duration-fast)}:host(.navigation-item-page-header) ::slotted(a.active)::before,:host(.navigation-item-page-header) ::slotted(a.active:focus)::before,:host(.navigation-item-page-header.navigation-item-selected) .link:focus::before{display:none}.open-in-new-icon{flex:1}.open-in-new-icon svg{margin-top:var(--ic-space-xxs);padding-left:var(--ic-space-xxs)}:host(.navigation-item-side-nav) .open-in-new-icon{margin-left:calc(-1 * var(--ic-space-xs))}:host(.navigation-item-top-nav) .open-in-new-icon svg,:host(.navigation-item-page-header) .open-in-new-icon svg,:host(.navigation-item-side-nav) .open-in-new-icon svg{height:0.875rem;width:0.875rem}:host(.navigation-item-side-menu) .open-in-new-icon svg,:host(.navigation-item-top-nav-child) .open-in-new-icon svg{height:var(--ic-space-md);width:var(--ic-space-md)}:host(.navigation-item-page-header) .open-in-new-icon svg,:host(.navigation-item-top-nav-child) .open-in-new-icon svg,:host(.navigation-item-side-menu) .open-in-new-icon svg{fill:var(--ic-color-primary-text)}@media (forced-colors: active){.open-in-new-icon svg{fill:currentcolor}}';const g=class{constructor(o){i(this,o);this.childBlur=t(this,"childBlur",7);this.navItemClicked=t(this,"navItemClicked",7);this.isInitialRender=true;this.hostMutationObserver=null;this.ARIA_LABEL_STRING="aria-label";this.displayDefaultNavigationItem=(i,t,a,o,n,r,d)=>{const c=this.isTopNavChild||this.inTopNavSideMenu?"body":"label";const l=this.expandable&&e("div",{class:{svg:true},innerHTML:v});const m=this.el.querySelector('[slot="icon"]')&&e("div",{class:"icon"},e("slot",{name:"icon"}),s(this.el,"badge")&&e("slot",{name:"badge"}));if(i!==""){return e("a",{href:i,target:a,rel:o,hreflang:t,referrerPolicy:n,download:r!==false?r:null,class:"link",ref:i=>this.itemEl=i,part:"link","aria-label":this.ariaLabel?this.ariaLabel:null},m,e("ic-typography",{variant:c},d),e("div",{class:"chevron-container"},l),a==="_blank"&&e("span",{class:"open-in-new-icon",innerHTML:h}))}return e("div",{tabindex:"0",class:"link",ref:i=>this.itemEl=i},m,e("ic-typography",{variant:c},d),l)};this.topNavResizedHandler=({detail:i})=>{var t;const{size:e}=i;if(e!==this.deviceSize){this.deviceSize=e;this.inTopNavSideMenu=e<=(((t=this.parentEl)===null||t===void 0?void 0:t.customMobileBreakpoint)||r.L)}};this.sideNavExpandHandler=({detail:i})=>{const{sideNavExpanded:t,sideNavMobile:e}=i;this.sideNavExpanded=t;this.isSideNavMobile=e};this.handleBlur=({relatedTarget:i})=>{if(i===null||i.tagName!=="IC-NAVIGATION-ITEM"){this.childBlur.emit()}};this.handleClick=()=>{this.navItemClicked.emit()};this.hostMutationCallback=i=>{let t=false;i.forEach((({attributeName:i})=>{if(i===this.ARIA_LABEL_STRING){this.ariaLabel=this.el.getAttribute(i);t=true}}));if(t){a(this)}};this.generateTooltipLabel=()=>{if(this.label){return this.label}if(this.navigationSlot){return this.navigationSlot.textContent}if(this.el.children[0]){return this.el.children[0].textContent}return""};this.renderNavigationItemContent=()=>{if(this.label){return this.displayDefaultNavigationItem(this.href,this.hreflang,this.target,this.rel,this.referrerpolicy,this.download,this.label)}if(this.navigationSlot){return e("slot",{name:"navigation-item"})}return e("slot",null)};this.deviceSize=r.XL;this.focusStyle=d();this.inTopNavSideMenu=false;this.isSideNavMobile=false;this.isTopNavChild=false;this.navigationType=undefined;this.parentEl=undefined;this.sideNavExpanded=false;this.ariaLabel="";this.collapsedIconLabel=false;this.displayNavigationTooltip=false;this.download=false;this.expandable=false;this.href="";this.hreflang=undefined;this.label=undefined;this.rel=undefined;this.referrerpolicy=undefined;this.selected=false;this.target=undefined}disconnectedCallback(){var i;if(this.navigationType==="side"){this.parentEl.removeEventListener("sideNavExpanded",this.sideNavExpandHandler)}else if(this.navigationType==="top"){this.parentEl.removeEventListener("topNavResized",this.topNavResizedHandler)}(i=this.hostMutationObserver)===null||i===void 0?void 0:i.disconnect()}componentWillLoad(){const{navType:i,parent:t}=l(this.el);this.navigationType=i;this.parentEl=t;this.deviceSize=c();if(this.navigationType==="side"){this.parentEl.addEventListener("sideNavExpanded",this.sideNavExpandHandler)}else if(this.navigationType==="top"){this.parentEl.addEventListener("topNavResized",this.topNavResizedHandler);if(this.el.parentElement.tagName==="IC-NAVIGATION-GROUP")this.isTopNavChild=true;if(this.deviceSize<=this.parentEl.customMobileBreakpoint)this.inTopNavSideMenu=true}this.navigationSlot=this.el.querySelector('[slot="navigation-item"]');if(this.navigationSlot){this.navigationSlot.ariaLabel=this.navigationSlot.textContent.trim()}if(this.el.hasAttribute(this.ARIA_LABEL_STRING)){this.ariaLabel=this.el.getAttribute(this.ARIA_LABEL_STRING)}}componentDidLoad(){this.hostMutationObserver=new MutationObserver(this.hostMutationCallback);this.hostMutationObserver.observe(this.el,{attributes:true})}componentDidUpdate(){this.isInitialRender=false}themeChangeHandler({detail:i}){this.focusStyle=i.mode}async setFocus(){var i;(i=this.itemEl)===null||i===void 0?void 0:i.focus()}render(){const{inTopNavSideMenu:i,isTopNavChild:t,selected:a}=this;return e(o,{class:{["navigation-item"]:true,["navigation-item-top-nav"]:!i&&this.navigationType==="top",["navigation-item-top-nav-child-selected"]:t&&!i&&a,[this.focusStyle]:!i&&!t||this.navigationType==="side"&&t,["navigation-item-selected"]:!t&&a,["navigation-item-side-menu"]:i,["navigation-item-side-menu-selected"]:i&&a,["navigation-item-top-nav-child"]:t&&!i,["navigation-item-page-header"]:this.navigationType==="page-header",["with-transition"]:!this.isInitialRender,["navigation-item-side-nav"]:this.navigationType==="side",["navigation-item-side-nav-collapsed"]:(!this.sideNavExpanded||this.displayNavigationTooltip)&&this.navigationType==="side",["navigation-item-side-nav-collapsed-with-label"]:!this.sideNavExpanded&&this.navigationType==="side"&&this.collapsedIconLabel&&!this.isSideNavMobile,["expandable"]:this.expandable},onBlur:t&&!i?this.handleBlur:null,onClick:this.handleClick,"aria-current":a?"page":null,role:"listitem"},e("ic-tooltip",{label:this.generateTooltipLabel(),target:"navigation-item",placement:"right",class:{["tooltip-navigation-item"]:true,["tooltip-navigation-item-side-nav-collapsed"]:(!this.sideNavExpanded||this.displayNavigationTooltip)&&this.navigationType==="side",["tooltip-long-label-navigation-item-side-nav-expanded"]:this.el.hasAttribute("[display-navigation-tooltip = 'true']")}},this.renderNavigationItemContent()))}static get delegatesFocus(){return true}get el(){return n(this)}};g.style=m;export{g as ic_navigation_item};
2
+ //# sourceMappingURL=p-9930557b.entry.js.map