@ukic/web-components 3.6.0 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/README.md +2 -1
  2. package/dist/cjs/core.cjs.js +1 -1
  3. package/dist/cjs/ic-button_3.cjs.entry.js +1 -1
  4. package/dist/cjs/ic-button_3.cjs.entry.js.map +1 -1
  5. package/dist/cjs/ic-input-component-container_3.cjs.entry.js +39 -47
  6. package/dist/cjs/ic-input-component-container_3.cjs.entry.js.map +1 -1
  7. package/dist/cjs/ic-navigation-item.cjs.entry.js +3 -10
  8. package/dist/cjs/ic-navigation-item.cjs.entry.js.map +1 -1
  9. package/dist/cjs/ic-search-bar.cjs.entry.js +2 -2
  10. package/dist/cjs/ic-search-bar.cjs.entry.js.map +1 -1
  11. package/dist/cjs/ic-select.cjs.entry.js +2 -2
  12. package/dist/cjs/ic-select.cjs.entry.js.map +1 -1
  13. package/dist/cjs/ic-side-navigation.cjs.entry.js +2 -2
  14. package/dist/cjs/ic-side-navigation.cjs.entry.js.map +1 -1
  15. package/dist/cjs/ic-toggle-button-group.cjs.entry.js +15 -4
  16. package/dist/cjs/ic-toggle-button-group.cjs.entry.js.map +1 -1
  17. package/dist/cjs/ic-toggle-button.cjs.entry.js +13 -4
  18. package/dist/cjs/ic-toggle-button.cjs.entry.js.map +1 -1
  19. package/dist/cjs/loader.cjs.js +1 -1
  20. package/dist/collection/components/ic-checkbox-group/ic-checkbox-group.stories.js +5 -3
  21. package/dist/collection/components/ic-loading-indicator/ic-loading-indicator.css +5 -0
  22. package/dist/collection/components/ic-menu/ic-menu.js +108 -47
  23. package/dist/collection/components/ic-menu/ic-menu.js.map +1 -1
  24. package/dist/collection/components/ic-navigation-item/ic-navigation-item.js +3 -10
  25. package/dist/collection/components/ic-navigation-item/ic-navigation-item.js.map +1 -1
  26. package/dist/collection/components/ic-radio-group/ic-radio-group.stories.js +5 -3
  27. package/dist/collection/components/ic-search-bar/ic-search-bar.js +2 -2
  28. package/dist/collection/components/ic-search-bar/ic-search-bar.js.map +1 -1
  29. package/dist/collection/components/ic-select/ic-select.js +2 -2
  30. package/dist/collection/components/ic-select/ic-select.js.map +1 -1
  31. package/dist/collection/components/ic-select/ic-select_(multi).stories.js +7 -5
  32. package/dist/collection/components/ic-select/ic-select_(searchable).stories.js +7 -5
  33. package/dist/collection/components/ic-select/ic-select_(single).stories.js +7 -5
  34. package/dist/collection/components/ic-side-navigation/ic-side-navigation.js +2 -2
  35. package/dist/collection/components/ic-side-navigation/ic-side-navigation.js.map +1 -1
  36. package/dist/collection/components/ic-side-navigation/ic-side-navigation.stories.js +31 -4
  37. package/dist/collection/components/ic-text-field/ic-text-field.stories.js +5 -10
  38. package/dist/collection/components/ic-toggle-button/ic-toggle-button.css +17 -0
  39. package/dist/collection/components/ic-toggle-button/ic-toggle-button.js +32 -3
  40. package/dist/collection/components/ic-toggle-button/ic-toggle-button.js.map +1 -1
  41. package/dist/collection/components/ic-toggle-button/ic-toggle-button.stories.js +7 -0
  42. package/dist/collection/components/ic-toggle-button-group/ic-toggle-button-group.css +7 -0
  43. package/dist/collection/components/ic-toggle-button-group/ic-toggle-button-group.js +36 -3
  44. package/dist/collection/components/ic-toggle-button-group/ic-toggle-button-group.js.map +1 -1
  45. package/dist/collection/components/ic-toggle-button-group/ic-toggle-button-group.stories.js +17 -0
  46. package/dist/components/ic-loading-indicator2.js +1 -1
  47. package/dist/components/ic-loading-indicator2.js.map +1 -1
  48. package/dist/components/ic-menu2.js +42 -47
  49. package/dist/components/ic-menu2.js.map +1 -1
  50. package/dist/components/ic-navigation-item.js +3 -10
  51. package/dist/components/ic-navigation-item.js.map +1 -1
  52. package/dist/components/ic-search-bar.js +2 -2
  53. package/dist/components/ic-search-bar.js.map +1 -1
  54. package/dist/components/ic-select.js +2 -2
  55. package/dist/components/ic-select.js.map +1 -1
  56. package/dist/components/ic-side-navigation.js +2 -2
  57. package/dist/components/ic-side-navigation.js.map +1 -1
  58. package/dist/components/ic-tab-panel.js.map +1 -1
  59. package/dist/components/ic-text-field.js.map +1 -1
  60. package/dist/components/ic-toggle-button-group.js +17 -4
  61. package/dist/components/ic-toggle-button-group.js.map +1 -1
  62. package/dist/components/ic-toggle-button.js +14 -4
  63. package/dist/components/ic-toggle-button.js.map +1 -1
  64. package/dist/core/core.esm.js +1 -1
  65. package/dist/core/core.esm.js.map +1 -1
  66. package/dist/core/{p-7b9e10a0.entry.js → p-018eaee0.entry.js} +2 -2
  67. package/dist/core/p-018eaee0.entry.js.map +1 -0
  68. package/dist/core/{p-57309502.entry.js → p-02132a4c.entry.js} +2 -2
  69. package/dist/core/p-02132a4c.entry.js.map +1 -0
  70. package/dist/core/{p-4935b899.entry.js → p-152ddde9.entry.js} +2 -2
  71. package/dist/core/{p-4935b899.entry.js.map → p-152ddde9.entry.js.map} +1 -1
  72. package/dist/core/{p-b730963a.entry.js → p-182b7037.entry.js} +2 -2
  73. package/dist/core/p-182b7037.entry.js.map +1 -0
  74. package/dist/core/p-543b90c5.entry.js +2 -0
  75. package/dist/core/p-543b90c5.entry.js.map +1 -0
  76. package/dist/core/p-6b52e47f.entry.js +2 -0
  77. package/dist/core/p-6b52e47f.entry.js.map +1 -0
  78. package/dist/core/{p-e29ba8bd.entry.js → p-ab1103e1.entry.js} +2 -2
  79. package/dist/core/p-ab1103e1.entry.js.map +1 -0
  80. package/dist/core/{p-cd42b7c0.entry.js → p-d85b438a.entry.js} +2 -2
  81. package/dist/core/{p-cd42b7c0.entry.js.map → p-d85b438a.entry.js.map} +1 -1
  82. package/dist/esm/core.js +1 -1
  83. package/dist/esm/ic-button_3.entry.js +1 -1
  84. package/dist/esm/ic-button_3.entry.js.map +1 -1
  85. package/dist/esm/ic-input-component-container_3.entry.js +39 -47
  86. package/dist/esm/ic-input-component-container_3.entry.js.map +1 -1
  87. package/dist/esm/ic-navigation-item.entry.js +3 -10
  88. package/dist/esm/ic-navigation-item.entry.js.map +1 -1
  89. package/dist/esm/ic-search-bar.entry.js +2 -2
  90. package/dist/esm/ic-search-bar.entry.js.map +1 -1
  91. package/dist/esm/ic-select.entry.js +2 -2
  92. package/dist/esm/ic-select.entry.js.map +1 -1
  93. package/dist/esm/ic-side-navigation.entry.js +2 -2
  94. package/dist/esm/ic-side-navigation.entry.js.map +1 -1
  95. package/dist/esm/ic-toggle-button-group.entry.js +15 -4
  96. package/dist/esm/ic-toggle-button-group.entry.js.map +1 -1
  97. package/dist/esm/ic-toggle-button.entry.js +13 -4
  98. package/dist/esm/ic-toggle-button.entry.js.map +1 -1
  99. package/dist/esm/loader.js +1 -1
  100. package/dist/types/components/ic-menu/ic-menu.d.ts +12 -4
  101. package/dist/types/components/ic-toggle-button/ic-toggle-button.d.ts +4 -0
  102. package/dist/types/components/ic-toggle-button-group/ic-toggle-button-group.d.ts +5 -0
  103. package/dist/types/components.d.ts +19 -0
  104. package/hydrate/index.js +82 -72
  105. package/hydrate/index.mjs +82 -72
  106. package/package.json +2 -2
  107. package/vscode-data.json +8 -0
  108. package/dist/core/p-57309502.entry.js.map +0 -1
  109. package/dist/core/p-7b9e10a0.entry.js.map +0 -1
  110. package/dist/core/p-9caa9e7b.entry.js +0 -2
  111. package/dist/core/p-9caa9e7b.entry.js.map +0 -1
  112. package/dist/core/p-b730963a.entry.js.map +0 -1
  113. package/dist/core/p-d7c8f10d.entry.js +0 -2
  114. package/dist/core/p-d7c8f10d.entry.js.map +0 -1
  115. package/dist/core/p-e29ba8bd.entry.js.map +0 -1
package/vscode-data.json CHANGED
@@ -4129,6 +4129,10 @@
4129
4129
  "name": "monochrome",
4130
4130
  "description": "If `true`, the toggle button will display as black in the light theme, and white in dark theme."
4131
4131
  },
4132
+ {
4133
+ "name": "outline",
4134
+ "description": "If `true`, the toggle button will display with an outline."
4135
+ },
4132
4136
  {
4133
4137
  "name": "size",
4134
4138
  "description": "The size of the toggle button to be displayed.",
@@ -4233,6 +4237,10 @@
4233
4237
  "name": "monochrome",
4234
4238
  "description": "If `true`, the toggle button group will display as black in the light theme, and white in dark theme."
4235
4239
  },
4240
+ {
4241
+ "name": "outline",
4242
+ "description": "If `true`, the toggle button group will display with an outline."
4243
+ },
4236
4244
  {
4237
4245
  "name": "select-method",
4238
4246
  "description": "If `auto`, controls are toggled automatically when navigated to. If `manual`, the controls must be actioned to change their toggled state. The value of this prop is ignored if `selectType` is set to`multi`.",
@@ -1 +0,0 @@
1
- {"version":3,"names":["icSelectCss","IcSelectStyle0","inputIds","MUTABLE_ATTRIBUTES","IC_INHERITED_ARIA","Select","constructor","hostRef","this","blurredBecauseButtonPressed","hasSetDefaultValue","hasTimedOut","inheritedAttributes","initialOptionsEmpty","inputId","menuId","retryButtonClick","searchableMenuItemSelected","ungroupedOptions","hostMutationObserver","clearButtonFocused","noOptions","open","pressedCharacters","searchableSelectInputValue","disabled","disableAutoFiltering","emptyOptionListText","fullWidth","helperText","hideLabel","includeDescriptionsInSearch","includeGroupTitlesInSearch","loadingErrorLabel","loadingLabel","multiple","name","placeholder","readonly","required","searchable","searchMatchPosition","selectOnEnter","showClearButton","size","theme","validationStatus","validationText","loading","options","filteredOptions","uniqueOptions","debounce","currDebounce","value","initialValue","inputValueToFilter","hostMutationCallback","mutationList","forceComponentUpdate","forEach","attributeName","type","addedNodes","removedNodes","attribute","el","getAttribute","includes","checkSlotInChildMutations","forceUpdate","handleRetry","ev","detail","keyPressed","_a","searchableSelectElement","focus","icRetryLoad","emit","hiddenInputValue","emitIcChange","Array","isArray","valueArray","slice","splice","indexOf","push","getValueSortedByOptions","length","icChange","emitIcInput","clearTimeout","debounceIcInput","window","setTimeout","icInput","setOptions","timeoutTimer","setOptionsValuesFromLabels","deduplicateOptions","label","isExternalFiltering","updateSearchableSelectResultAriaLive","setDefaultValue","uniqueValues","dedupedOptions","option","children","dedupedChildren","child","console","warn","Object","assign","map","setUngroupedOptions","event","setTextColor","nativeSelectElement","className","selectedIndex","setMenuChange","getLabelFromValue","getMultipleOptionsString","selectedValues","filter","join","getFilteredChildMenuOptions","getFilteredMenuOptions","valuesFromAllOptions","sort","a","b","handleNativeSelectChange","icOptionSelect","handleCustomSelectChange","optionId","currValue","getValueFromLabel","_b","icOptionDeselect","ariaActiveDescendant","handleSelectAllChange","allValues","select","unselectedValues","handleMenuChange","handleFocusIndicatorDisplay","handleMenuKeyPress","cancelBubble","handleCharacterKeyDown","key","focusIndicator","shadowRoot","querySelector","classList","add","remove","handleMouseDown","preventDefault","handleClick","menu","handleClickOpen","handleExpandIconMouseDown","handleClear","stopPropagation","clearInput","icClear","customSelectElement","characterKeyPressTimer","handleFilter","handleNativeSelectKeyDown","handleKeyDown","isArrowKey","handleKeyboardOpen","handleClearButtonFocus","handleClearButtonBlur","retryButton","relatedTarget","isGrouped","some","newFilteredOptions","menuOptionsFiltered","triggerLoading","timeout","timedOut","find","handleSearchableSelectInput","target","debounceAria","searchableSelectResultsStatusEl","innerText","updateMultiSelectedCountAriaLive","multiSelectSelectedCountEl","selectedCount","getOptionsWithoutGroupTitlesCount","getDefaultValue","onFocus","icFocus","onBlur","tagName","from","querySelectorAll","clearButton","icBlur","onTimeoutBlur","handleFormReset","setAttribute","renderNativeOption","h","selected","watchDisabledHandler","removeDisabledFalse","loadingHandler","newValue","watchOptionsHandler","debounceChangedHandler","valueChangedHandler","String","openChangedHandler","icOpen","icClose","disconnectedCallback","removeFormResetListener","disconnect","componentWillLoad","valueInOptions","inheritAttributes","addFormResetListener","componentDidLoad","onComponentRequiredPropUndefined","prop","propName","MutationObserver","observe","attributes","childList","componentDidRender","setFocus","render","form","renderHiddenInput","invalid","IcInformationStatus","Error","describedBy","getInputDescribedByText","hasValidationStatus","trim","valueLabelString","isClearable","Host","class","for","slot","ref","anchorEl","isSlotUsed","isMobileOrTablet","onChange","id","onKeyDown","role","autocomplete","undefined","onInput","onClick","innerHTML","Clear","variant","onMouseDown","Expand","inputEl","inputLabel","onMenuStateChange","onMenuOptionSelect","onMenuOptionSelectAll","onMenuKeyPress","onUngroupedOptionsSet","onRetryButtonClicked","parentEl","activationType","closeOnSelect","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 --menu-width: Width of the dropdown menu\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-xs);\n --menu-max-height: 100px;\n --border-color: var(--ic-select-field-border);\n --border-color-hover: var(--ic-select-field-border-hover);\n --border-color-pressed: var(--ic-select-field-border-pressed);\n --border-color-disabled: var(--ic-select-field-border-disabled);\n --border-color-error: var(--ic-select-field-border-error);\n --border-color-error-hover: var(--ic-select-field-border-error-hover);\n --border-color-error-pressed: var(--ic-select-field-border-error-pressed);\n --border-color-success: var(--ic-select-field-border-success);\n --border-color-success-hover: var(--ic-select-field-border-success-hover);\n --border-color-success-pressed: var(--ic-select-field-border-success-pressed);\n --border-color-warning: var(--ic-select-field-border-warning);\n --border-color-warning-hover: var(--ic-select-field-border-warning-hover);\n --border-color-warning-pressed: var(--ic-select-field-border-warning-pressed);\n --ic-input-label-text-color: var(--ic-select-field-labe);\n --ic-input-label-helper-text-color: var(\n --ic-select-input-field-label-subtitle\n );\n --ic-input-validation-status-text-color: var(--ic-select-state-text);\n --ic-input-validation-error: var(--ic-select-state-icon-error);\n --ic-input-validation-warning-icon-color: var(--ic-select-state-icon-warning);\n --ic-input-validation-success-icon-color: var(--ic-select-state-icon-success);\n --menu-item-text-color: var(--ic-select-list-option-text);\n --menu-bg-color: var(--ic-select-list-option-background);\n --menu-border-color: var(--ic-select-dropdown-list-border);\n}\n\n:host(.ic-select-disabled) {\n --ic-input-label-text-color: var(--ic-select-field-label-disabled);\n --ic-input-label-helper-text-color: var(\n --ic-select-input-field-label-subtitle-disabled\n );\n}\n\n:host(.ic-select-full-width) {\n width: 100%;\n}\n\nic-input-component-container.menu-open {\n --border-color: var(--ic-select-field-border-pressed);\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);\n}\n\nselect {\n border: 0;\n border-radius: var(--ic-border-radius);\n background-color: var(--ic-select-field-background);\n color: var(--ic-select-content-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: var(--ic-select-mobile-dropdown-icon);\n caret-color: var(--ic-select-input-field-text-cursor);\n}\n\nselect option,\n.select-option-selected {\n color: var(--ic-select-list-option-text);\n}\n\nselect:disabled {\n color: var(--ic-select-content-text-disabled);\n background-image: var(--ic-select-mobile-dropdown-icon-disabled);\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 background-color: var(--ic-select-field-background);\n color: var(--ic-select-content-text);\n}\n\n.select-input:focus {\n outline: none;\n}\n\n.select-input[disabled] {\n pointer-events: none;\n}\n\n:host(.ic-select-searchable) .select-input {\n cursor: auto;\n}\n\n.select-input.with-clear-button {\n padding-right: 0;\n}\n\n.value-text {\n max-width: calc(100% - (var(--ic-space-lg) + var(--ic-space-xxs)));\n box-sizing: border-box;\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n margin-bottom: 0 !important;\n}\n\n.value-text.with-clear-button {\n padding-right: calc(var(--ic-space-xl) + var(--ic-space-xs));\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-xxs);\n color: var(--ic-select-expand-icon-color);\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(.ic-select-disabled) .expand-icon,\n:host(.ic-select-disabled) .expand-icon > svg > path {\n color: var(--ic-select-disabled-expand-icon-color);\n}\n\n:host(.ic-select-searchable) .expand-icon {\n padding-left: 0;\n height: 2.25rem;\n}\n\n:host(.ic-select-searchable) .expand-icon > svg {\n height: 2.25rem;\n padding: 0 calc(var(--ic-space-xxxs) + var(--ic-space-xxs)) 0\n var(--ic-space-xxs);\n}\n\n:host(.ic-select-searchable:not(.ic-select-disabled)) .expand-icon > svg {\n cursor: pointer;\n}\n\n.expand-icon-open {\n color: var(--ic-select-expand-icon-color);\n}\n\n.expand-icon-open,\n:host(.ic-select-searchable) .expand-icon-open {\n transform: rotateX(180deg);\n}\n\n.placeholder {\n color: var(--ic-select-content-placeholder-text);\n}\n\n:host(.ic-select-disabled) .value-text,\n:host(.ic-select-disabled) .select-input,\n:host(.ic-select-disabled) .placeholder,\n:host(.ic-select-disabled.ic-select-searchable) .select-input::placeholder {\n color: var(--ic-select-content-text-disabled);\n}\n\n.select-input-end {\n display: flex;\n align-items: center;\n}\n\n.clear-button-container {\n display: flex;\n align-items: center;\n}\n\n.divider {\n width: var(--ic-space-1px);\n background-color: var(--ic-select-content-divider);\n margin: var(--ic-space-xxs) 0;\n border-radius: var(--ic-space-1px);\n height: var(--ic-space-lg);\n}\n\n:host(.ic-select-small) .divider {\n height: var(--ic-space-md);\n}\n\n:host(.ic-select-large) .divider {\n height: var(--ic-space-xl);\n}\n\n.clear-button {\n color: var(--ic-select-clear-button);\n position: absolute;\n right: calc(var(--ic-space-xl) + var(--ic-space-xxs) - var(--ic-space-1px));\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.clear-button:active {\n background-color: var(--ic-color-focus-inner);\n box-shadow: inset 0 0 0 0.125rem var(--ic-color-focus-outer);\n border-radius: 0.25rem;\n}\n\n.clear-button:focus,\n.clear-button:active * {\n fill: var(--ic-atoms-input-clear-button-focus);\n}\n\n.clear-button.searchable {\n position: static;\n}\n\n.searchable-select-results-status,\n.multi-select-selected-count {\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-select-content-placeholder-text);\n}\n\n.has-value ::slotted([slot=\"icon\"]) {\n fill: var(--ic-select-content-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 getOptionsWithoutGroupTitlesCount,\n addFormResetListener,\n removeFormResetListener,\n removeDisabledFalse,\n checkSlotInChildMutations,\n isSlotUsed,\n} from \"../../utils/helpers\";\nimport { IC_INHERITED_ARIA } from \"../../utils/constants\";\nimport {\n IcInformationStatus,\n IcInformationStatusOrEmpty,\n IcMenuOption,\n IcSearchMatchPositions,\n IcMultiValueEventDetail,\n IcSizes,\n IcThemeMode,\n} from \"../../utils/types\";\nimport Expand from \"./assets/Expand.svg\";\nimport Clear from \"./assets/Clear.svg\";\nimport {\n IcMenuChangeEventDetail,\n IcOptionSelectEventDetail,\n} from \"../ic-menu/ic-menu.types\";\n\nlet inputIds = 0;\nconst MUTABLE_ATTRIBUTES = [...IC_INHERITED_ARIA, \"tabindex\", \"title\"];\n\n/**\n * @slot helper-text - Content is set as the helper text for the select.\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 = false;\n private characterKeyPressTimer?: number;\n private clearButton?: HTMLIcButtonElement;\n private customSelectElement?: HTMLButtonElement;\n private debounceAria?: number;\n private hasSetDefaultValue = false;\n private hasTimedOut = false;\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 = false;\n private searchableMenuItemSelected = false;\n private searchableSelectElement?: HTMLInputElement;\n private timeoutTimer?: number;\n private ungroupedOptions: IcMenuOption[] = [];\n private hostMutationObserver: MutationObserver | null = null;\n\n @Element() el!: HTMLIcSelectElement;\n\n @State() ariaActiveDescendant?: string;\n @State() clearButtonFocused = false;\n @State() debounceIcInput?: number;\n @State() hiddenInputValue: string | null;\n @State() noOptions: IcMenuOption[] | null = null;\n @State() open = false;\n @State() pressedCharacters = \"\";\n @State() searchableSelectInputValue: string | null = null;\n\n /**\n * If `true`, the disabled state will be set.\n */\n @Prop({ reflect: true }) disabled = false;\n @Watch(\"disabled\")\n watchDisabledHandler(): void {\n removeDisabledFalse(this.disabled, this.el);\n }\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() disableAutoFiltering = 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 * If `true`, the select will fill the width of the container.\n */\n @Prop() fullWidth = false;\n\n /**\n * The helper text that will be displayed for additional field guidance.\n */\n @Prop() helperText = \"\";\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 = 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 = 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 = 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 = \"Loading Error\";\n\n /**\n * The message displayed whilst the options are being loaded externally.\n */\n @Prop() loadingLabel = \"Loading...\";\n\n /**\n * If `true`, multiple options can be selected.\n */\n @Prop() multiple = false;\n\n /**\n * The name of the control, which is submitted with the form data.\n */\n @Prop() name = this.inputId;\n\n /**\n * The placeholder value to be displayed.\n */\n @Prop() placeholder = \"Select an option\";\n\n /**\n * If `true`, the readonly state will be set.\n */\n @Prop() readonly = false;\n\n /**\n * If `true`, the select will require a value.\n */\n @Prop() required = false;\n\n /**\n * If `true`, a searchable variant of the select will be displayed which can be typed in to filter options. This functionality is only available on the single-select variant of the select component.\n */\n @Prop() searchable = 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 on the single select.\n */\n @Prop() selectOnEnter = 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 = false;\n\n /**\n * The size of the select.\n */\n @Prop() size: IcSizes = \"medium\";\n\n /**\n * If using external filtering, set a timeout for when loading takes too long.\n */\n @Prop() timeout?: number;\n\n /**\n * Sets the theme color to the dark or light theme color. \"inherit\" will set the color based on the system settings or ic-theme component.\n */\n @Prop() theme: IcThemeMode = \"inherit\";\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 = \"\";\n\n /**\n * If `true`, the loading state will be triggered when fetching options asynchronously.\n */\n @Prop({ mutable: true }) loading = false;\n @Watch(\"loading\")\n loadingHandler(newValue: boolean): void {\n newValue ? this.triggerLoading() : this.setOptions();\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 @Watch(\"options\")\n watchOptionsHandler(): void {\n this.setOptions();\n }\n\n /**\n * The amount of time, in milliseconds, to wait to trigger the `icInput` event after each keystroke.\n */\n @Prop() debounce = 0;\n @State() currDebounce = this.debounce;\n @Watch(\"debounce\")\n debounceChangedHandler(newValue: number): void {\n if (this.currDebounce !== newValue) {\n this.currDebounce = newValue;\n }\n }\n\n /**\n * The value of the select, reflected by the value of the currently selected option.\n * For the searchable variant, the value is also reflected by the user input.\n * For the multi-select variant, the value must be an array of option values.\n */\n @Prop({ mutable: true }) value: string | string[] | null = null;\n @State() initialValue = this.value;\n @State() inputValueToFilter: string | null = this.value as string;\n @State() currValue: string | string[] | null;\n @Watch(\"value\")\n valueChangedHandler(): void {\n if (this.value !== this.currValue) {\n if (this.value && this.multiple) {\n this.currValue = this.getMultipleOptionsString(this.value as string[])\n ? this.getValueSortedByOptions(this.value as string[])\n : null;\n this.updateMultiSelectedCountAriaLive();\n } else {\n this.currValue = this.getLabelFromValue(this.value as string)\n ? this.value\n : null;\n }\n }\n\n if (this.searchable && this.value) {\n // Only set if value not null - prevents whole input value being cleared when edited\n this.searchableSelectInputValue =\n this.getLabelFromValue(String(this.currValue)) || null;\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<IcMultiValueEventDetail>;\n\n /**\n * Emitted when the clear or clear all 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<IcMultiValueEventDetail>;\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 selected.\n * Selecting an option will also trigger an `icChange/onIcChange` due to the value being updated.\n */\n @Event() icOptionSelect: EventEmitter<IcOptionSelectEventDetail>;\n\n /**\n * Emitted when `multiple` is `true` and an option is deselected.\n */\n @Event() icOptionDeselect: EventEmitter<IcOptionSelectEventDetail>;\n\n /**\n * Emitted when the 'retry loading' button is clicked for a searchable variant.\n */\n @Event() icRetryLoad: EventEmitter<IcMultiValueEventDetail>;\n\n disconnectedCallback(): void {\n removeFormResetListener(this.el, this.handleFormReset);\n this.hostMutationObserver?.disconnect();\n }\n\n componentWillLoad(): void {\n const valueInOptions = this.multiple\n ? this.getMultipleOptionsString(this.value as string[])\n : this.getLabelFromValue(this.value as string);\n this.currValue = valueInOptions ? this.value : null;\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\n if (this.searchable) {\n this.hiddenInputValue = this.currValue as string;\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 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[]) => {\n let forceComponentUpdate = false;\n mutationList.forEach(\n ({ attributeName, type, addedNodes, removedNodes }) => {\n if (attributeName) {\n const attribute = this.el.getAttribute(attributeName);\n if (attribute && MUTABLE_ATTRIBUTES.includes(attributeName)) {\n this.inheritedAttributes[attributeName] = attribute;\n forceComponentUpdate = true;\n }\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<IcMultiValueEventDetail>) => {\n if (ev.detail.keyPressed) this.searchableSelectElement?.focus();\n this.blurredBecauseButtonPressed = true;\n this.retryButtonClick = true;\n this.hasSetDefaultValue = true;\n this.icRetryLoad.emit({\n value: this.searchable\n ? this.searchableSelectInputValue\n : this.hiddenInputValue,\n });\n };\n\n private emitIcChange = (value: string | string[] | null) => {\n // If \"Select all\" button clicked, replace value with new value (array of all option values)\n if (this.multiple && !Array.isArray(value) && value !== null) {\n // Update selected options - adds / removes them, in order of option list\n // Create new array if value prop is undefined\n if (this.value) {\n let valueArray = (this.value as string[]).slice();\n\n if (this.value.includes(value)) {\n valueArray.splice(valueArray.indexOf(value), 1);\n } else {\n valueArray.push(value);\n valueArray = this.getValueSortedByOptions(valueArray);\n }\n\n this.value = valueArray.length === 0 ? null : valueArray;\n } else {\n this.value = [value];\n }\n } else {\n this.value = value;\n }\n\n this.icChange.emit({ value: this.multiple ? this.value : value });\n };\n\n private emitIcInput = (value: string) => {\n clearTimeout(this.debounceIcInput);\n this.debounceIcInput = window.setTimeout(\n () => this.icInput.emit({ value }),\n this.currDebounce\n );\n };\n\n private setOptions = () => {\n if (!this.hasTimedOut && this.options !== this.noOptions) {\n this.loading = false;\n clearTimeout(this.timeoutTimer);\n\n if (this.options.length > 0) {\n this.setOptionsValuesFromLabels();\n this.uniqueOptions = this.deduplicateOptions(this.options);\n } else {\n this.noOptions = [{ label: this.emptyOptionListText, value: \"\" }];\n this.uniqueOptions = this.noOptions;\n }\n\n this.filteredOptions = this.uniqueOptions;\n\n if (this.isExternalFiltering()) {\n // When searchable select\n this.noOptions = null;\n this.updateSearchableSelectResultAriaLive();\n this.setDefaultValue();\n } else if (this.initialOptionsEmpty) {\n this.setDefaultValue();\n this.initialOptionsEmpty = false;\n }\n } else if (!this.searchable) {\n this.options = this.noOptions || [];\n }\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[]) => {\n const uniqueValues: string[] = [];\n const dedupedOptions: IcMenuOption[] = [];\n\n options.forEach((option) => {\n if (option.children) {\n //If an option has children, we will loop through them\n const dedupedChildren: IcMenuOption[] = [];\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 dedupedOptions.push({\n ...option,\n children: dedupedChildren,\n });\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 = () => {\n if (this.options.length > 0) {\n this.options.map((option) => {\n if (!option.value) {\n option.value = option.label;\n }\n });\n }\n };\n\n private setUngroupedOptions = (event: CustomEvent) => {\n this.ungroupedOptions = event.detail.options;\n };\n\n private setTextColor = () => {\n if (this.nativeSelectElement) {\n this.nativeSelectElement.className =\n this.nativeSelectElement.selectedIndex === 0\n ? \"placeholder\"\n : \"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) =>\n getLabelFromValue(value, this.uniqueOptions);\n\n private getMultipleOptionsString = (selectedValues: string[]) =>\n selectedValues\n ?.map((value) => this.getLabelFromValue(value))\n .filter((label) => !!label)\n .join(\", \");\n\n private getFilteredChildMenuOptions = (\n option: IcMenuOption\n ): IcMenuOption => ({\n ...option,\n children:\n option.children &&\n getFilteredMenuOptions(\n option.children,\n this.searchable && !!this.includeDescriptionsInSearch,\n this.searchable\n ? this.searchableSelectInputValue || \"\"\n : this.pressedCharacters,\n this.searchable ? this.searchMatchPosition : \"start\"\n ),\n });\n\n // (For multi-select) get value array, i.e. selected option values, in order they appear in option list\n private getValueSortedByOptions = (value: string[]) => {\n const valueArray = value;\n const valuesFromAllOptions = this.ungroupedOptions.map(\n (option) => option.value\n );\n\n valueArray.sort(\n (a, b) =>\n valuesFromAllOptions.indexOf(a) - valuesFromAllOptions.indexOf(b)\n );\n\n return valueArray;\n };\n\n private handleNativeSelectChange = () => {\n if (this.nativeSelectElement) {\n this.icOptionSelect.emit({ value: this.nativeSelectElement.value });\n this.emitIcChange(this.nativeSelectElement.value);\n }\n this.setTextColor();\n };\n\n // Handle option select for when a custom input box and menu is rendered\n // (rather than native <select> - rendered when viewed on a mobile / tablet screen)\n private handleCustomSelectChange = (\n event: CustomEvent<IcOptionSelectEventDetail>\n ) => {\n const { value, label, optionId } = event.detail;\n\n if (label === this.emptyOptionListText) {\n this.searchableSelectElement?.focus();\n return;\n }\n\n if (this.searchable) {\n this.value = value || null;\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 =\n this.getLabelFromValue(this.value as string) || null;\n }\n\n this.inputValueToFilter = null;\n this.hiddenInputValue =\n this.getValueFromLabel(this.searchableSelectInputValue) || null;\n }\n\n if (value) {\n if (this.multiple && this.value?.includes(value)) {\n this.icOptionDeselect.emit({ value });\n } else {\n this.icOptionSelect.emit({ value });\n }\n }\n\n this.ariaActiveDescendant = optionId;\n this.emitIcChange(value || null);\n };\n\n private handleSelectAllChange = ({\n detail,\n }: CustomEvent<{ select: boolean }>) => {\n const allValues = this.ungroupedOptions\n .filter((option) => !option.disabled)\n .map((option) => option.value);\n\n if (detail.select) {\n // Only emit icOptionSelect for all values that are newly selected\n const unselectedValues = this.value\n ? allValues.filter(\n (value) => this.value && !(this.value as string[]).includes(value)\n )\n : allValues;\n\n unselectedValues.forEach((value) => this.icOptionSelect.emit({ value }));\n } else {\n // Only emit icOptionDeselect for values that were selected\n (this.value as string[]).forEach((value) =>\n this.icOptionDeselect.emit({ value })\n );\n }\n\n this.emitIcChange(detail.select ? allValues : null);\n };\n\n private handleMenuChange = (event: CustomEvent<IcMenuChangeEventDetail>) => {\n this.open = event.detail.open;\n this.pressedCharacters = \"\";\n\n if (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 if (!this.multiple) {\n this.handleCharacterKeyDown(ev.detail.key);\n }\n };\n\n private handleFocusIndicatorDisplay = () => {\n const focusIndicator =\n this.el.shadowRoot?.querySelector(\".focus-indicator\");\n\n if (focusIndicator) {\n if (this.open) {\n focusIndicator.classList.add(\"focus-indicator-enabled\");\n } else {\n focusIndicator.classList.remove(\"focus-indicator-enabled\");\n }\n }\n };\n\n private handleMouseDown = (event: Event) => {\n if (!this.open) {\n event.preventDefault();\n }\n };\n\n private isExternalFiltering = () =>\n this.searchable && !!this.disableAutoFiltering;\n\n private handleClick = (event: MouseEvent) => {\n if (!this.open && this.menu) {\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) => {\n event.stopPropagation();\n this.hasTimedOut = false;\n clearTimeout(this.timeoutTimer);\n this.clearInput();\n this.emitIcChange(null);\n this.icClear.emit();\n\n if (this.searchable) {\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 (this.open && key === \" \" && this.pressedCharacters.length === 0) {\n this.setMenuChange(false);\n }\n\n if (key.length !== 1 || this.searchable) {\n this.pressedCharacters = \"\";\n return;\n }\n\n window.clearTimeout(this.characterKeyPressTimer);\n this.characterKeyPressTimer = window.setTimeout(\n () => (this.pressedCharacters = \"\"),\n 1000\n );\n\n if (key !== \" \" || !!this.pressedCharacters) {\n this.pressedCharacters += key;\n this.handleFilter();\n\n if (!this.noOptions) {\n this.emitIcChange(this.filteredOptions[0].value);\n }\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) => {\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.menu && !this.open) {\n if (this.isExternalFiltering() && (event.key === \"Enter\" || isArrowKey)) {\n this.menu.options = this.filteredOptions;\n } else if (!this.hasTimedOut) {\n this.noOptions = null;\n this.menu.options = this.uniqueOptions;\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 if (!this.multiple) {\n this.handleCharacterKeyDown(event.key);\n }\n }\n }\n };\n\n private handleClearButtonFocus = () => {\n this.clearButtonFocused = true;\n };\n\n private handleClearButtonBlur = (ev: FocusEvent) => {\n const retryButton = this.menu?.querySelector(\"#retry-button\");\n if (\n (!this.searchableSelectElement ||\n ev.relatedTarget !== this.searchableSelectElement) &&\n (!retryButton || ev.relatedTarget !== retryButton)\n ) {\n this.setMenuChange(false);\n this.handleFocusIndicatorDisplay();\n }\n this.clearButtonFocused = false;\n };\n\n private handleFilter = () => {\n const options = this.deduplicateOptions(\n this.searchable ? [...this.uniqueOptions] : this.ungroupedOptions\n );\n\n const isGrouped = options.some((option) => !!option.children);\n let newFilteredOptions: IcMenuOption[] = [];\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 newFilteredOptions = options.map((option) =>\n this.includeGroupTitlesInSearch &&\n menuOptionsFiltered.indexOf(option) !== -1\n ? option\n : this.getFilteredChildMenuOptions(option)\n );\n }\n\n if (\n newFilteredOptions.length > 0 &&\n (!isGrouped ||\n newFilteredOptions.some(\n ({ children }) => children && children.length > 0\n ))\n ) {\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 | null): string | undefined =>\n label && this.uniqueOptions.find((option) => option.label === label)?.value;\n\n private handleSearchableSelectInput = (event: Event) => {\n this.searchableSelectInputValue = (event.target as HTMLInputElement).value;\n this.emitIcInput(this.searchableSelectInputValue);\n\n // De-select previous selection when input is edited\n // Only emit icChange once when editing input\n if (this.value != null) {\n this.emitIcChange(null);\n }\n\n this.hiddenInputValue = null;\n this.inputValueToFilter = this.searchableSelectInputValue;\n this.setMenuChange(true);\n\n if (!this.disableAutoFiltering) {\n this.handleFilter();\n clearTimeout(this.debounceAria);\n\n window.setTimeout(() => {\n this.updateSearchableSelectResultAriaLive();\n }, 800);\n }\n };\n\n private updateSearchableSelectResultAriaLive = () => {\n const searchableSelectResultsStatusEl =\n this.el.shadowRoot?.querySelector<HTMLDivElement>(\n \".searchable-select-results-status\"\n );\n\n if (searchableSelectResultsStatusEl) {\n searchableSelectResultsStatusEl.innerText =\n this.noOptions !== null ? this.emptyOptionListText : \"\";\n }\n };\n\n private updateMultiSelectedCountAriaLive = () => {\n const multiSelectSelectedCountEl =\n this.el.shadowRoot?.querySelector<HTMLDivElement>(\n \".multi-select-selected-count\"\n );\n\n const selectedCount = `${\n this.currValue?.length\n } of ${getOptionsWithoutGroupTitlesCount(this.options)} selected`;\n\n if (\n multiSelectSelectedCountEl &&\n multiSelectSelectedCountEl.innerText !== selectedCount\n ) {\n multiSelectSelectedCountEl.innerText = selectedCount;\n }\n };\n\n private getDefaultValue = (value: string) =>\n this.getLabelFromValue(value) || null;\n\n private setDefaultValue = () => {\n if (!this.hasSetDefaultValue && this.currValue) {\n this.searchableSelectInputValue = this.searchable\n ? this.getDefaultValue(this.currValue as string)\n : null;\n\n this.initialValue = this.currValue;\n this.hasSetDefaultValue = true;\n }\n };\n\n private onFocus = () => {\n this.icFocus.emit();\n };\n\n private onBlur = ({ relatedTarget }: FocusEvent) => {\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\n if (\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 (!this.retryButtonClick) {\n this.setMenuChange(false);\n // Clear input field on blur when searchable if no option is selected\n if (!this.value) {\n this.clearInput();\n }\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 = () => {\n this.value = this.initialValue;\n if (this.searchable) {\n this.searchableSelectInputValue = this.getDefaultValue(\n this.value as string\n );\n this.hiddenInputValue = this.value as string;\n }\n };\n\n private clearInput = () => {\n this.noOptions = null;\n\n if (this.searchable) {\n this.searchableSelectElement?.setAttribute(\"value\", \"\");\n this.searchableSelectInputValue = null;\n this.filteredOptions = this.uniqueOptions;\n }\n };\n\n private renderNativeOption = (option: IcMenuOption) => (\n <option\n value={option.value}\n disabled={option.disabled}\n selected={option.value === this.currValue}\n >\n {option.label}\n </option>\n );\n\n render() {\n const {\n size,\n disabled,\n fullWidth,\n helperText,\n hideLabel,\n label,\n menuId,\n multiple,\n name,\n options,\n placeholder,\n readonly,\n required,\n searchable,\n showClearButton,\n validationStatus,\n validationText,\n currValue,\n theme,\n hiddenInputValue,\n open,\n inputId,\n searchableSelectInputValue,\n loading,\n value,\n emptyOptionListText,\n uniqueOptions,\n selectOnEnter,\n form,\n inheritedAttributes,\n ariaActiveDescendant,\n hasTimedOut,\n noOptions,\n filteredOptions,\n clearButtonFocused,\n } = this;\n\n // HTML inputs only accept 'string' for their value\n // Does not cause errors when it is a multi-select - sets value correctly, to a comma-separated string\n renderHiddenInput(\n this.el,\n searchable ? hiddenInputValue : (currValue as string),\n name || inputId,\n disabled\n );\n\n const invalid = `${validationStatus === IcInformationStatus.Error}`;\n\n const describedBy = getInputDescribedByText(\n this.el,\n inputId,\n helperText !== \"\",\n hasValidationStatus(validationStatus, !!disabled)\n ).trim();\n\n const valueLabelString = multiple\n ? this.getMultipleOptionsString(currValue as string[])\n : this.getLabelFromValue(currValue as string);\n\n const isClearable =\n !disabled &&\n (searchable\n ? !!searchableSelectInputValue\n : !!currValue && !loading && showClearButton);\n\n return (\n <Host\n class={{\n \"ic-select-disabled\": disabled,\n \"ic-select-searchable\": searchable,\n [`ic-select-${size}`]: size !== \"medium\",\n \"ic-select-full-width\": fullWidth,\n [`ic-theme-${theme}`]: theme !== \"inherit\",\n }}\n onBlur={this.onBlur}\n >\n <ic-input-container readonly={readonly}>\n {!hideLabel && (\n <ic-input-label\n for={inputId}\n label={label}\n helperText={helperText}\n required={required}\n disabled={disabled}\n readonly={readonly}\n >\n <slot name=\"helper-text\" slot=\"helper-text\"></slot>\n </ic-input-label>\n )}\n <ic-input-component-container\n ref={(el) => (this.anchorEl = el)}\n class={{ \"menu-open\": open }}\n size={size}\n fullWidth={fullWidth}\n disabled={disabled}\n readonly={readonly}\n validationStatus={validationStatus}\n >\n {isSlotUsed(this.el, \"icon\") &&\n !disabled &&\n (!readonly || !!value) && (\n <span\n slot=\"left-icon\"\n class={{\n readonly,\n \"has-value\": !!value,\n }}\n >\n <slot name=\"icon\" />\n </span>\n )}\n {readonly ? (\n <ic-typography>\n <p>{valueLabelString}</p>\n </ic-typography>\n ) : isMobileOrTablet() && !multiple ? (\n <select\n ref={(el) => (this.nativeSelectElement = el)}\n disabled={disabled}\n onChange={this.handleNativeSelectChange}\n required={required}\n id={inputId}\n aria-label={label}\n aria-describedby={describedBy}\n aria-invalid={invalid}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n onKeyDown={this.handleNativeSelectKeyDown}\n form={form}\n {...inheritedAttributes}\n >\n <option value=\"\" selected disabled={!showClearButton}>\n {placeholder}\n </option>\n {options.map((option) =>\n option.children ? (\n <optgroup label={option.label}>\n {option.children.map((child) =>\n this.renderNativeOption(child)\n )}\n </optgroup>\n ) : (\n this.renderNativeOption(option)\n )\n )}\n </select>\n ) : searchable ? (\n <div class=\"searchable-select-container\">\n <input\n class={{\n \"select-input\": true,\n \"with-clear-button\": !!searchableSelectInputValue,\n }}\n role=\"combobox\"\n autocomplete=\"off\"\n aria-label={label}\n aria-describedby={describedBy}\n aria-activedescendant={ariaActiveDescendant}\n aria-autocomplete=\"list\"\n aria-expanded={`${open}`}\n aria-invalid={invalid}\n aria-required={`${required}`}\n aria-controls={menuId}\n ref={(el) => (this.searchableSelectElement = el)}\n id={inputId}\n value={searchableSelectInputValue || undefined}\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={form}\n ></input>\n {isClearable && (\n <div class=\"clear-button-container\">\n <ic-button\n id=\"clear-button\"\n ref={(el) => (this.clearButton = el)}\n aria-label={\n searchableSelectInputValue &&\n (currValue === null || loading)\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 theme={clearButtonFocused ? \"light\" : \"dark\"}\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\": open,\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={inputId}\n aria-label={`${label}, ${\n (multiple && currValue\n ? `${\n currValue.length\n } of ${getOptionsWithoutGroupTitlesCount(\n options\n )} selected, ${valueLabelString}`\n : valueLabelString) || placeholder\n }${required ? \", required\" : \"\"}`}\n aria-describedby={describedBy}\n aria-invalid={invalid}\n aria-haspopup=\"listbox\"\n aria-expanded={`${open}`}\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 \"with-clear-button\": isClearable,\n placeholder:\n !loading && multiple\n ? !value || value.length < 1\n : !this.getLabelFromValue(currValue as string),\n }}\n >\n {valueLabelString || placeholder}\n </ic-typography>\n <div class=\"select-input-end\">\n {isClearable && <div class=\"divider\"></div>}\n <span\n class={{\n \"expand-icon\": true,\n \"expand-icon-open\": open,\n }}\n innerHTML={Expand}\n aria-hidden=\"true\"\n />\n </div>\n </button>\n {isClearable && (\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 theme={clearButtonFocused ? \"light\" : \"dark\"}\n ></ic-button>\n )}\n </div>\n )}\n </ic-input-component-container>\n {(!isMobileOrTablet() || multiple) && (\n <ic-menu\n class={{\n \"no-results\":\n loading ||\n hasTimedOut ||\n noOptions?.[0]?.label === 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 size={size}\n menuId={menuId}\n open={open}\n options={searchable ? filteredOptions : uniqueOptions}\n value={multiple ? (currValue as string[]) : (currValue as string)}\n fullWidth={fullWidth}\n selectOnEnter={selectOnEnter}\n onMenuStateChange={this.handleMenuChange}\n onMenuOptionSelect={this.handleCustomSelectChange}\n onMenuOptionSelectAll={this.handleSelectAllChange}\n onMenuKeyPress={this.handleMenuKeyPress}\n onUngroupedOptionsSet={this.setUngroupedOptions}\n onRetryButtonClicked={this.handleRetry}\n parentEl={this.el}\n onTimeoutBlur={this.onTimeoutBlur}\n activationType={\n searchable || multiple || selectOnEnter ? \"manual\" : \"automatic\"\n }\n closeOnSelect={!multiple}\n ></ic-menu>\n )}\n {multiple && (\n <div\n aria-live=\"polite\"\n role=\"status\"\n class=\"multi-select-selected-count\"\n ></div>\n )}\n {hasValidationStatus(validationStatus, disabled) && (\n <ic-input-validation\n class={{ \"menu-open\": open }}\n ariaLiveMode=\"polite\"\n status={validationStatus}\n message={validationText}\n for={inputId}\n ></ic-input-validation>\n )}\n </ic-input-container>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["icNavigationItemCss","IcNavigationItemStyle0","NavigationItem","constructor","hostRef","this","isInitialRender","hostMutationObserver","ANIMATION_DURATION","parseInt","getCssProperty","ARIA_LABEL_STRING","isInSideNav","deviceSize","DEVICE_SIZES","XL","focusStyle","getBrandForegroundAppearance","inTopNavSideMenu","isSideNavMobile","isTopNavChild","sideNavExpanded","ariaLabel","collapsedIconLabel","displayNavigationTooltip","download","expandable","href","selected","theme","displayDefaultNavigationItem","label","hreflang","target","rel","referrerpolicy","variant","ChevronIconComponent","h","class","svg","innerHTML","chevronIcon","slottedBadgeEl","el","querySelector","BadgeComponent","name","IconComponent","referrerPolicy","ref","itemEl","part","OpenInNew","tabindex","topNavResizedHandler","detail","size","_a","parentEl","customMobileBreakpoint","L","sideNavExpandHandler","sideNavMobile","sideNavToggleTooltip","handleBlur","relatedTarget","tagName","childBlur","emit","handleClick","event","type","key","navItemClicked","hostMutationCallback","mutationList","forceComponentUpdate","forEach","attributeName","attribute","getAttribute","forceUpdate","generateTooltipLabel","navigationSlot","textContent","children","renderNavigationItemContent","showTooltip","tooltip","shadowRoot","collapsedClass","timer","displayTooltip","setTimeout","classList","add","clearTimeout","remove","navigationTypeChangeHandler","navigationType","disconnectedCallback","removeEventListener","_b","_c","disconnect","componentWillLoad","navType","parent","getNavItemParentDetails","getCurrentDeviceSize","contains","addEventListener","_d","_e","parentElement","_f","trim","hasAttribute","componentDidLoad","MutationObserver","observe","attributes","componentDidUpdate","brandChangeHandler","mode","setFocus","focus","render","isTopNavChildDesktop","Host","onBlur","onClick","onKeyDown","role","placement"],"sources":["src/components/ic-navigation-item/ic-navigation-item.css?tag=ic-navigation-item&encapsulation=shadow","src/components/ic-navigation-item/ic-navigation-item.tsx"],"sourcesContent":["@import \"../../global/normalize.css\";\n\n/**\n * @prop --ic-z-index-navigation-item: z-index of navigation item\n */\n\n:host {\n display: block;\n\n --navigation-link-colour: var(--ic-brand-text-color);\n}\n\n:host(:focus-within) {\n z-index: var(--ic-z-index-navigation-item);\n}\n\n/* chevron */\nsvg {\n width: var(--ic-space-xl);\n fill: var(--ic-brand-text-color);\n}\n\n.svg {\n margin-left: auto;\n}\n\n.chevron-container svg,\n.chevron-container .svg {\n width: var(--ic-space-lg);\n height: var(--ic-space-lg);\n}\n\n.chevron-container {\n flex-grow: 1;\n}\n\n:host(.expandable.navigation-item) .link,\n:host(.expandable.navigation-item) ::slotted(a) {\n padding-right: 0;\n}\n\n:host(.navigation-item) .link,\n:host(.navigation-item) ::slotted(a) {\n height: calc(100% - var(--ic-space-xxs));\n width: fit-content;\n color: var(--navigation-link-colour);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 0 var(--ic-space-md) var(--ic-space-xxs);\n text-decoration: none;\n transition: var(--ic-easing-transition-fast);\n position: relative;\n white-space: nowrap;\n}\n\n:host(.navigation-item) ::slotted(a) {\n height: 100%;\n font: var(--ic-font-label) !important;\n letter-spacing: var(--ic-font-letter-spacing-0pt025) !important;\n padding: 0 var(--ic-space-md) !important;\n}\n\n:host(.navigation-item-selected) .link::after,\n:host(.navigation-item-selected) ::slotted(a.active)::after,\n:host(.navigation-item-top-nav) ::slotted(a.active)::after {\n content: \"\";\n height: 0.25rem;\n width: 100%;\n position: absolute;\n bottom: 0;\n background-color: var(--ic-top-navigation-theme);\n}\n\n:host(.navigation-item-selected.navigation-item-page-header)\n ::slotted(a.active)::after,\n:host(.navigation-item-selected.navigation-item-page-header) .link::after,\n:host(.navigation-item.navigation-item-page-header) ::slotted(a.active)::after,\n:host(.navigation-item-top-nav-child) ::slotted(a.active)::after {\n content: none;\n}\n\n:host(.navigation-item-side-menu-selected) .link,\n:host(.navigation-item-side-menu) ::slotted(a.active),\n:host(.navigation-item-top-nav-child) ::slotted(a.active) {\n box-shadow: none;\n}\n\n:host(.navigation-item) .link:hover:not(:focus) {\n background-color: var(--ic-brand-hover);\n cursor: pointer;\n}\n\n:host(.navigation-item:not(.navigation-item-page-header, .navigation-item-side-menu, .navigation-item-top-nav-child))\n ::slotted(a:hover:not(:focus)),\n:host(.navigation-item-side-nav.navigation-item) .link:hover:not(:focus) {\n background-color: var(--ic-brand-hover) !important;\n}\n\n:host(.navigation-item:not(.navigation-item-top-nav-child, .navigation-item-side-menu, .navigation-item-top-nav-child-selected\n .navigation-item-side-menu-selected))\n .focus-indicator:focus-within {\n box-shadow: var(--ic-border-focus);\n border-radius: var(--ic-border-radius);\n}\n\n:host(.navigation-item) .link:focus,\n:host(.navigation-item) ::slotted(a:focus) {\n box-shadow: var(--ic-border-focus);\n border-radius: var(--ic-border-radius);\n outline: var(--ic-hc-focus-outline);\n outline-offset: calc(-1 * (var(--ic-space-xxxs) + var(--ic-space-1px) / 2));\n}\n\n:host(.navigation-item-selected) .link:focus,\n:host(.navigation-item) ::slotted(a.active:focus) {\n box-shadow: var(--ic-border-focus);\n border-radius: var(--ic-border-radius);\n outline: var(--ic-hc-focus-outline);\n outline-offset: calc(-1 * (var(--ic-space-xxxs) + var(--ic-space-1px) / 2));\n}\n\n:host(.navigation-item) .link:active:not(:focus),\n:host(.navigation-item) ::slotted(a:active:not(:focus)) {\n background-color: var(--ic-brand-active);\n}\n\n:host(.navigation-item-side-menu) .link,\n:host(.navigation-item-side-menu) ::slotted(a) {\n min-height: 2.5rem;\n height: auto;\n width: 100%;\n box-sizing: border-box;\n color: var(--ic-top-navigation-nav-item);\n\n --ic-typography-color: var(--ic-top-navigation-nav-item);\n\n display: flex;\n align-items: center;\n justify-content: flex-start;\n text-decoration: none;\n text-wrap: wrap;\n white-space: normal;\n transition: box-shadow var(--ic-transition-duration-fast),\n border-radius var(--ic-transition-duration-fast);\n}\n\n:host(.navigation-item-top-nav-child) ::slotted(svg),\n:host(.navigation-item-side-menu) ::slotted(svg),\n:host(.navigation-item-page-header) ::slotted(svg) {\n fill: var(--ic-color-text-primary);\n}\n\n:host(.navigation-item-side-menu) ::slotted(a) {\n font: var(--ic-font-body) !important;\n letter-spacing: var(--ic-font-letter-spacing-0pt005) !important;\n transition: box-shadow var(--ic-easing-transition-fast),\n background-color var(--ic-easing-transition-fast);\n}\n\n:host(.navigation-item-side-menu) .link:hover:not(:focus) {\n background-color: var(--ic-top-navigation-nav-item-hover);\n}\n\n:host(.navigation-item-side-menu) ::slotted(a:hover:not(:focus)) {\n background-color: var(--ic-top-navigation-nav-item-hover) !important;\n}\n\n:host(.navigation-item-side-menu) .focus-indicator:focus-within {\n box-shadow: none;\n}\n\n:host(.navigation-item-side-menu) .link:focus,\n:host(.navigation-item-side-menu) ::slotted(a:focus) {\n box-shadow: var(--ic-border-focus-inset) !important;\n width: auto;\n border-radius: var(--ic-border-radius-inset) !important;\n}\n\n:host(.navigation-item-side-menu-selected) .link,\n:host(.navigation-item-side-menu-selected) ::slotted(a) {\n transition: box-shadow var(--ic-easing-transition-slow),\n background-color var(--ic-easing-transition-slow);\n}\n\n:host(.navigation-item-side-menu-selected) .link:focus,\n:host(.navigation-item-side-menu) ::slotted(a.active:focus),\n:host(.navigation-item-top-nav-child) ::slotted(a.active:focus) {\n margin-left: var(--ic-space-xs) !important;\n padding-left: var(--ic-space-xs) !important;\n}\n\n:host(.navigation-item-top-nav-child) .link,\n:host(.navigation-item-top-nav-child) ::slotted(a) {\n height: 2.5rem;\n width: calc(100% - var(--ic-space-xl));\n min-width: 9.063rem;\n color: var(--ic-top-navigation-nav-item);\n display: flex;\n align-items: center;\n justify-content: flex-start;\n padding: 0 var(--ic-space-md) !important;\n text-decoration: none;\n position: relative;\n transition: box-shadow var(--ic-transition-duration-fast),\n border-radius var(--ic-transition-duration-slow);\n}\n\n:host(.navigation-item-top-nav-child) ::slotted(a) {\n font: var(--ic-font-body) !important;\n letter-spacing: var(--ic-font-letter-spacing-0pt005) !important;\n}\n\n:host(.navigation-item-top-nav-child) .link:hover:not(:focus),\n:host(.navigation-item-top-nav-child) ::slotted(a:hover:not(:focus)) {\n background-color: var(--ic-top-navigation-nav-item-hover) !important;\n}\n\n:host(.navigation-item-top-nav-child) .link:focus,\n:host(.navigation-item-top-nav-child) ::slotted(a:focus) {\n z-index: 1;\n outline: var(--ic-hc-focus-outline);\n border-radius: var(--ic-border-radius-inset);\n box-shadow: var(--ic-border-focus-inset);\n transition: border-radius 0s, box-shadow var(--ic-transition-duration-fast);\n}\n\n:host(.navigation-item-top-nav-child) ::slotted(a.active:focus) {\n box-shadow: var(--ic-border-focus-inset);\n border-radius: var(--ic-border-radius-inset);\n}\n\n:host(.navigation-item-side-menu) .link:active:not(:focus) {\n background-color: var(--ic-top-navigation-nav-item-pressed);\n}\n\n:host(.navigation-item-top-nav-child) .link:active:not(:focus),\n:host(.navigation-item-top-nav-child) ::slotted(a:active:not(:focus)) {\n outline: var(--ic-hc-focus-outline);\n background-color: var(--ic-top-navigation-nav-item-pressed);\n}\n\n:host(.navigation-item-top-nav-child) ::slotted(a:active:not(:focus)),\n:host(.navigation-item-side-menu) ::slotted(a:active:not(:focus)) {\n background-color: var(--ic-top-navigation-nav-item-pressed) !important;\n}\n\n:host(.navigation-item-side-menu-selected) *,\n:host(.navigation-item-top-nav-child-selected) *,\n:host(.navigation-item-side-menu) ::slotted(a.active),\n:host(.navigation-item-top-nav-child) ::slotted(a.active) {\n font-weight: 700 !important;\n}\n\n:host(.navigation-item-top-nav-child) ::slotted(a.active)::before,\n:host(.navigation-item-top-nav-child-selected) .link::before,\n:host(.navigation-item-side-menu-selected) .link::before,\n:host(.navigation-item-side-menu) ::slotted(a.active)::before,\n:host(.navigation-item-side-menu-selected) .link:focus::before,\n:host(.navigation-item-side-menu) ::slotted(a.active:focus)::before {\n content: \"\";\n position: absolute;\n left: 0;\n width: var(--ic-space-xs);\n height: inherit;\n min-height: 2.5rem;\n background-color: var(--ic-top-navigation-nav-item-banner);\n transition: left 0s;\n}\n\n:host(.navigation-item-side-menu-selected) .link::before,\n:host(.navigation-item-side-menu-selected) .link:focus::before {\n margin-top: var(--ic-space-xxs);\n}\n\n:host(.navigation-item-top-nav-child-selected) .link:focus {\n margin-left: var(--ic-space-xs);\n margin-right: calc(-1 * var(--ic-space-xs));\n padding-left: var(--ic-space-xs) !important;\n}\n\n:host(.navigation-item-top-nav-child-selected) .link:focus::before {\n left: calc(-1 * var(--ic-space-xs));\n z-index: 1;\n}\n\n:host(.navigation-item-side-menu-selected) .link::before,\n:host(.navigation-item-side-menu) ::slotted(a.active)::before,\n:host(.navigation-item-side-menu-selected) .link:focus::before,\n:host(.navigation-item-side-menu) ::slotted(a.active:focus)::before {\n z-index: 1;\n}\n\n:host(.navigation-item-side-menu-selected) .link:focus::before,\n:host(.navigation-item-side-menu) ::slotted(a.active:focus)::before,\n:host(.navigation-item-top-nav-child) ::slotted(a.active:focus)::before {\n left: calc(-1 * var(--ic-space-xs));\n}\n\n:host(.navigation-item-side-menu-selected) .link::after {\n display: none;\n}\n\n:host(.navigation-item-side-nav-collapsed) .link {\n height: 100%;\n}\n\n:host(.navigation-item-side-nav-collapsed) ::slotted(svg),\n:host(.navigation-item-side-nav-collapsed-with-label) ::slotted(svg) {\n margin: auto;\n pointer-events: none;\n}\n\n:host(.navigation-item-side-nav-collapsed) .icon,\n:host(.navigation-item-side-nav-collapsed-with-label) .icon,\n:host(.navigation-item-side-nav-collapsed-with-label) ic-typography {\n align-items: center;\n padding: 0;\n margin: auto 0;\n width: fit-content;\n pointer-events: none;\n}\n\n:host(.navigation-item-side-nav-collapsed-with-label) ic-typography {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n width: 100%;\n text-align: center;\n}\n\n:host(.navigation-item-side-nav-collapsed-with-label) .link,\n:host(.navigation-item-side-nav-collapsed-with-label) ::slotted(a) {\n display: flex;\n flex-direction: column;\n height: fit-content;\n padding: var(--ic-space-xs) !important;\n gap: var(--ic-space-xxs);\n}\n\n:host(.navigation-item-side-nav.navigation-item-side-nav-collapsed-with-label)\n .link,\n:host(.navigation-item-side-nav.navigation-item-side-nav-collapsed-with-label)\n ::slotted(a) {\n height: auto !important;\n gap: 0;\n width: auto;\n padding: var(--ic-space-xs) !important;\n}\n\n:host(.navigation-item-side-nav.navigation-item-side-nav-collapsed-with-label)\n ::slotted(a) {\n display: block;\n text-align: center;\n}\n\n:host(.navigation-item-side-nav.navigation-item-side-nav-collapsed-with-label)\n .link\n ic-typography {\n opacity: 1;\n min-width: min-content;\n}\n\n:host(.navigation-item-side-nav-collapsed) svg,\n:host(.navigation-item-side-nav-collapsed-with-label) svg {\n display: none;\n}\n\n::slotted(svg) {\n fill: var(--ic-brand-text-color);\n height: var(--ic-space-lg);\n width: var(--ic-space-lg);\n margin-left: var(--ic-space-md);\n}\n\n.icon {\n height: 1.5rem;\n width: var(--ic-space-xxl);\n margin-left: calc(-1 * var(--ic-space-md));\n flex: 0 1 0%;\n position: relative;\n}\n\n.icon > ::slotted(*) {\n margin-left: var(--ic-space-md) !important;\n margin-right: var(--ic-space-xs);\n}\n\n.inline-badge {\n margin-left: var(--ic-space-xs);\n}\n\n.badge {\n margin-left: 0;\n}\n\n:host(.navigation-item-side-nav-collapsed) .icon > ::slotted(*) {\n margin: auto !important;\n}\n\n:host(.navigation-item-side-nav) .icon > ::slotted(*) {\n margin-right: 0;\n}\n\n:host(.navigation-item-side-nav) .link,\n:host(.navigation-item-side-nav) ::slotted(a) {\n height: var(--navigation-item-height, 4rem);\n min-height: var(--navigation-item-min-height);\n width: var(--navigation-item-width, auto);\n justify-content: var(--navigation-item-justify-content);\n display: flex;\n gap: var(--ic-space-xs);\n box-sizing: border-box;\n color: var(--navigation-item-child-color) !important;\n text-decoration: none !important;\n white-space: nowrap;\n padding: 0 var(--ic-space-md);\n text-wrap: wrap;\n}\n\n:host(.navigation-item-side-nav.navigation-item-top-nav-child) .link,\n:host(.navigation-item-side-nav.navigation-item-top-nav-child) ::slotted(a) {\n height: var(--navigation-item-child-height);\n width: var(--navigation-group-width);\n color: var(--navigation-item-child-color) !important;\n display: flex;\n gap: 0.625rem;\n box-sizing: border-box;\n min-width: 0;\n transition: box-shadow var(--ic-easing-transition-fast);\n text-decoration: none !important;\n white-space: nowrap;\n}\n\n:host(.navigation-item-side-nav.navigation-item-top-nav-child) .link:focus,\n:host(.navigation-item-side-nav.navigation-item-top-nav-child)\n ::slotted(a:focus) {\n box-shadow: var(--ic-border-focus-dark);\n}\n\n:host(.navigation-item-side-nav.navigation-item-side-menu) .link:active {\n background-color: var(--navigation-item-child-active);\n}\n\n:host(.navigation-item-side-nav.navigation-item-top-nav-child) .link:active,\n:host(.navigation-item-side-nav.navigation-item-top-nav-child)\n ::slotted(a:active) {\n background-color: var(--navigation-item-child-active);\n}\n\n:host(.navigation-item-side-nav) a.link ic-typography,\n:host(.navigation-item-side-nav.navigation-item-top-nav-child)\n a.link\n ic-typography,\n:host(.navigation-item-side-nav) div.link ic-typography,\n:host(.navigation-item-side-nav.navigation-item-top-nav-child)\n div.link\n ic-typography,\n.navigation-item-side-nav-slotted-text {\n opacity: var(--navigation-item-label-opacity);\n transition: opacity var(--ic-easing-transition-slow);\n white-space: wrap;\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n:host(.navigation-item-side-nav.navigation-item-selected) .link,\n:host(.navigation-item-side-nav.navigation-item) ::slotted(a.active) {\n box-shadow: inset 0.313rem 0 0 var(--ic-brand-text-color);\n}\n\n:host(.navigation-item-side-nav.navigation-item-selected) .link::before,\n:host(.navigation-item-side-nav) ::slotted(a.active)::before {\n content: \"\";\n display: block;\n position: absolute;\n inset: 0 0 0 0.313rem;\n border-radius: 0.688rem !important;\n transition: var(--ic-easing-transition-slow);\n}\n\n:host(.navigation-item-side-nav.navigation-item-selected) .link:focus::before,\n:host(.navigation-item-side-nav) ::slotted(a.active:focus)::before {\n box-shadow: var(--ic-border-focus-inset);\n}\n\n:host(:not(.navigation-item-side-nav-collapsed).navigation-item-side-nav.navigation-item-side-nav-collapsed-with-label)\n .link {\n opacity: var(--navigation-item-label-opacity);\n height: auto;\n}\n\n:host(.navigation-item-top-nav-child.navigation-item-side-nav-collapsed-with-label)\n .link,\n:host(.navigation-item-top-nav-child.navigation-item-side-nav-collapsed-with-label)\n ::slotted(a) {\n min-width: var(--navigation-group-item-min-width);\n padding: var(--ic-space-xs) !important;\n height: auto;\n gap: 0;\n}\n\n:host(.navigation-item-top-nav-child.navigation-item-side-nav-collapsed-with-label)\n ::slotted(a) {\n display: block;\n}\n\n:host(.navigation-item-side-nav.navigation-item-selected) .link::after,\n:host(.navigation-item-side-nav) ::slotted(a.active)::after {\n display: none;\n}\n\n:host(.navigation-item-side-nav.navigation-item) .link:focus,\n:host(.navigation-item-side-nav.navigation-item) ::slotted(a:focus) {\n box-shadow: var(--ic-border-focus-inset);\n border-radius: var(--ic-border-radius-inset);\n background-color: transparent;\n}\n\n:host(.navigation-item-side-nav.navigation-item-selected) .link:focus,\n:host(.navigation-item-side-nav) ::slotted(a.active:focus) {\n margin: 0 auto;\n box-shadow: inset 0.313rem 0 0 var(--ic-brand-text-color);\n border-radius: 0;\n}\n\n:host(.navigation-item-page-header).link,\n:host(.navigation-item-page-header) a,\n:host(.navigation-item-page-header) ::slotted(a) {\n height: 2.5rem !important;\n color: var(--ic-color-text-primary) !important;\n transition: all var(--ic-easing-transition-fast) !important;\n box-shadow: rgba(23 89 188 / 0%) !important;\n}\n\n:host(.navigation-item-page-header.navigation-item-selected) .link::after,\n:host(.navigation-item-page-header) ::slotted(a.active)::after {\n content: \" \" !important;\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n height: var(--ic-space-xxs);\n background-color: var(--ic-action-default) !important;\n}\n\n:host(.navigation-item-page-header) .link:hover,\n:host(.navigation-item-page-header) ::slotted(.link:hover),\n:host(.navigation-item-page-header) ::slotted(a:hover),\n:host(.navigation-item-page-header) .link:hover:not(:focus) {\n background-color: var(--ic-action-default-bg-hover) !important;\n cursor: pointer;\n}\n\n:host(.navigation-item-page-header) .link:focus,\n:host(.navigation-item-page-header) ::slotted(a:focus) {\n box-shadow: var(--ic-border-focus);\n}\n\n:host(.navigation-item-page-header) .link:active,\n:host(.navigation-item-page-header) ::slotted(a:active) {\n background-color: var(--ic-action-default-bg-pressed) !important;\n}\n\n:host(.navigation-item-page-header.navigation-item-selected) .link:focus::after,\n:host(.navigation-item-page-header) ::slotted(a.active:focus)::after {\n border-bottom-left-radius: var(--ic-border-radius);\n border-bottom-right-radius: var(--ic-border-radius);\n}\n\n:host(.navigation-item-page-header.navigation-item-selected.with-transition)\n .link,\n:host(.navigation-item-page-header.navigation-item-selected.with-transition)\n ::slotted(a.active) {\n transition: all var(--ic-easing-transition-fast),\n border-color var(--ic-transition-duration-fast);\n}\n\n:host(.navigation-item-page-header) ::slotted(a.active)::before,\n:host(.navigation-item-page-header) ::slotted(a.active:focus)::before,\n:host(.navigation-item-page-header.navigation-item-selected)\n .link:focus::before {\n display: none;\n}\n\n.open-in-new-icon {\n flex: 1;\n}\n\n.open-in-new-icon svg {\n margin-top: var(--ic-space-xxs);\n padding-left: var(--ic-space-xs);\n}\n\n:host(.navigation-item-side-nav) .open-in-new-icon {\n margin-left: calc(-1 * var(--ic-space-xs));\n}\n\n:host(.navigation-item-top-nav) .open-in-new-icon svg,\n:host(.navigation-item-page-header) .open-in-new-icon svg,\n:host(.navigation-item-side-nav) .open-in-new-icon svg {\n height: 0.875rem;\n width: 0.875rem;\n}\n\n:host(.navigation-item-side-menu) .open-in-new-icon svg,\n:host(.navigation-item-top-nav-child) .open-in-new-icon svg {\n height: var(--ic-space-md);\n width: var(--ic-space-md);\n}\n\n:host(.navigation-item-page-header) .open-in-new-icon svg,\n:host(.navigation-item-top-nav-child) .open-in-new-icon svg,\n:host(.navigation-item-side-menu) .open-in-new-icon svg {\n fill: var(--ic-color-text-primary);\n}\n\n@media (forced-colors: active) {\n .open-in-new-icon svg {\n fill: currentcolor;\n }\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n forceUpdate,\n Listen,\n Method,\n h,\n Host,\n Prop,\n State,\n Watch,\n} from \"@stencil/core\";\n\nimport {\n DEVICE_SIZES,\n getCssProperty,\n getCurrentDeviceSize,\n getBrandForegroundAppearance,\n getNavItemParentDetails,\n} from \"../../utils/helpers\";\nimport {\n IcNavType,\n IcBrand,\n IcBrandForeground,\n IcBrandForegroundNoDefault,\n IcThemeMode,\n} from \"../../utils/types\";\n\nimport chevronIcon from \"../../assets/chevron-icon.svg\";\n\nimport OpenInNew from \"../../assets/OpenInNew.svg\";\nimport { IcExpandedDetail } from \"../ic-side-navigation/ic-side-navigation.types\";\n\n/**\n * @part link - The `<a>` within ic-navigation-item\n * @slot badge - Badge component overlaying the top right of the icon.\n * @slot icon - Content will be displayed to the left of the label for expanded navigation items, and in replacement of the label for collapsed navigation items.\n */\n\n@Component({\n tag: \"ic-navigation-item\",\n styleUrl: \"ic-navigation-item.css\",\n shadow: {\n delegatesFocus: true,\n },\n})\nexport class NavigationItem {\n private navigationSlot: HTMLElement | null;\n private isInitialRender = true;\n private itemEl?: HTMLElement;\n private hostMutationObserver: MutationObserver | null = null;\n private ANIMATION_DURATION =\n parseInt(getCssProperty(\"--ic-transition-duration-slow\")) || 0;\n private ARIA_LABEL_STRING = \"aria-label\";\n private isInSideNav = false;\n\n @Element() el: HTMLIcNavigationItemElement;\n\n @State() deviceSize: number = DEVICE_SIZES.XL;\n @State() focusStyle: IcBrandForegroundNoDefault | IcBrandForeground =\n getBrandForegroundAppearance();\n @State() inTopNavSideMenu = false;\n @State() isSideNavMobile = false;\n @State() isTopNavChild = false;\n\n @State() navigationType: IcNavType | \"\";\n @Watch(\"navigationType\")\n navigationTypeChangeHandler(): void {\n this.isInSideNav = this.navigationType === \"side\";\n }\n\n @State() parentEl: HTMLElement | null;\n @State() sideNavExpanded = false;\n @State() ariaLabel = \"\";\n\n /**\n * @internal If `true`, the icon and label will be displayed when side navigation is collapsed.\n */\n @Prop() collapsedIconLabel = false;\n\n /**\n * @internal If `true`, the navigation item will be displayed within a tooltip.\n */\n @Prop() displayNavigationTooltip = false;\n\n /**\n * If `true`, the user can save the linked URL instead of navigating to it.\n */\n @Prop() download: string | boolean = false;\n\n /**\n * @internal If `true`, the navigation item will be expandable.\n */\n @Prop() expandable = false;\n\n /**\n * The destination of the navigation item.\n */\n @Prop() href = \"\";\n\n /**\n * The human language of the linked URL.\n */\n @Prop() hreflang?: string;\n\n /**\n * The label of the navigation item.\n */\n @Prop() label?: string;\n\n /**\n * The relationship of the linked URL as space-separated link types.\n */\n @Prop() rel?: string;\n\n /**\n * How much of the referrer to send when following the link.\n */\n @Prop() referrerpolicy?: ReferrerPolicy;\n\n /**\n * If `true`, the navigation item will be set in a selected state.\n */\n @Prop() selected = false;\n\n /**\n * The place to display the linked URL, as the name for a browsing context (a tab, window, or iframe).\n */\n @Prop() target?: string;\n\n /**\n * Sets the theme color to the dark or light theme color. \"inherit\" will set the color based on the system settings or ic-theme component.\n */\n @Prop() theme: IcThemeMode = \"inherit\";\n\n /**\n * @internal - Emitted when item loses focus.\n */\n @Event() childBlur: EventEmitter<void>;\n\n /**\n * @internal - Emitted when navigation item clicked.\n */\n @Event() navItemClicked: EventEmitter<void>;\n\n disconnectedCallback(): void {\n if (this.isInSideNav) {\n this.parentEl?.removeEventListener(\n \"icSideNavExpanded\",\n this.sideNavExpandHandler as EventListener\n );\n } else if (this.navigationType === \"top\") {\n this.parentEl?.removeEventListener(\n \"icTopNavResized\",\n this.topNavResizedHandler as EventListener\n );\n }\n this.hostMutationObserver?.disconnect();\n }\n\n componentWillLoad(): void {\n const { navType, parent } = getNavItemParentDetails(this.el);\n this.navigationType = navType;\n this.isInSideNav = this.navigationType === \"side\";\n this.parentEl = parent;\n this.deviceSize = getCurrentDeviceSize();\n\n this.sideNavExpanded =\n this.parentEl?.classList.contains(\"sm-expanded\") ||\n this.parentEl?.classList.contains(\"xs-menu-open\") ||\n false;\n\n if (this.isInSideNav) {\n this.parentEl?.addEventListener(\n \"icSideNavExpanded\",\n this.sideNavExpandHandler as EventListener\n );\n } else if (this.navigationType === \"top\") {\n this.parentEl?.addEventListener(\n \"icTopNavResized\",\n this.topNavResizedHandler as EventListener\n );\n if (this.el.parentElement?.tagName === \"IC-NAVIGATION-GROUP\")\n this.isTopNavChild = true;\n if (\n this.deviceSize <=\n (this.parentEl as HTMLIcTopNavigationElement).customMobileBreakpoint\n )\n this.inTopNavSideMenu = true;\n }\n\n this.navigationSlot = this.el.querySelector('[slot=\"navigation-item\"]');\n if (this.navigationSlot) {\n this.navigationSlot.ariaLabel =\n this.navigationSlot.textContent?.trim() || null;\n }\n\n if (this.el.hasAttribute(this.ARIA_LABEL_STRING)) {\n this.ariaLabel = this.el.getAttribute(this.ARIA_LABEL_STRING) || \"\";\n }\n }\n\n componentDidLoad(): void {\n this.hostMutationObserver = new MutationObserver(this.hostMutationCallback);\n this.hostMutationObserver.observe(this.el, {\n attributes: true,\n });\n }\n\n componentDidUpdate(): void {\n this.isInitialRender = false;\n }\n\n @Listen(\"brandChange\", { target: \"document\" })\n brandChangeHandler({ detail }: CustomEvent<IcBrand>): void {\n this.focusStyle = detail.mode;\n }\n\n /**\n * Sets focus on the nav item.\n */\n @Method()\n async setFocus(): Promise<void> {\n this.itemEl ? this.itemEl.focus() : this.el.querySelector(\"a\")?.focus();\n }\n\n private displayDefaultNavigationItem = (\n href: string,\n label: string,\n hreflang?: string,\n target?: string,\n rel?: string,\n referrerpolicy?: ReferrerPolicy,\n download?: string | boolean\n ) => {\n const variant =\n this.isTopNavChild || this.inTopNavSideMenu ? \"body\" : \"label\";\n const ChevronIconComponent = this.expandable && (\n <div class={{ svg: true }} innerHTML={chevronIcon}></div>\n );\n const slottedBadgeEl = this.el.querySelector('[slot=\"badge\"]');\n const BadgeComponent = slottedBadgeEl && (\n <div class=\"inline-badge\">\n <slot name=\"badge\"></slot>\n </div>\n );\n const IconComponent = this.el.querySelector('[slot=\"icon\"]') && (\n <div class=\"icon\">\n <slot name=\"icon\"></slot>\n {this.isInSideNav && BadgeComponent}\n </div>\n );\n\n return href !== \"\" ? (\n <a\n href={href}\n target={target}\n rel={rel}\n hreflang={hreflang}\n referrerPolicy={referrerpolicy}\n download={download !== false ? download : null}\n class=\"link\"\n ref={(el) => (this.itemEl = el)}\n part=\"link\"\n aria-label={this.ariaLabel ? this.ariaLabel : null}\n >\n {IconComponent}\n <ic-typography variant={variant}>{label}</ic-typography>\n {target === \"_blank\" && (\n <span class=\"open-in-new-icon\" innerHTML={OpenInNew} />\n )}\n {BadgeComponent}\n <div class=\"chevron-container\">{ChevronIconComponent}</div>\n </a>\n ) : (\n <div tabindex=\"0\" class=\"link\" ref={(el) => (this.itemEl = el)}>\n {IconComponent}\n <ic-typography variant={variant}>{label}</ic-typography>\n {ChevronIconComponent}\n {BadgeComponent}\n </div>\n );\n };\n\n private topNavResizedHandler = ({\n detail,\n }: CustomEvent<{ size: number }>) => {\n const { size } = detail;\n if (size !== this.deviceSize) {\n this.deviceSize = size;\n this.inTopNavSideMenu =\n size <=\n ((this.parentEl as HTMLIcTopNavigationElement)\n ?.customMobileBreakpoint || DEVICE_SIZES.L);\n }\n };\n\n private sideNavExpandHandler = ({\n detail,\n }: CustomEvent<IcExpandedDetail>) => {\n const { sideNavExpanded, sideNavMobile } = detail;\n this.sideNavExpanded = sideNavExpanded;\n this.isSideNavMobile = sideNavMobile;\n this.sideNavToggleTooltip(!sideNavExpanded && !sideNavMobile);\n };\n\n private handleBlur = ({ relatedTarget }: FocusEvent) => {\n if (\n relatedTarget === null ||\n (relatedTarget as HTMLElement).tagName !== \"IC-NAVIGATION-ITEM\"\n ) {\n this.childBlur.emit();\n }\n };\n\n private handleClick = (event: MouseEvent | KeyboardEvent) => {\n if (\n event.type === \"click\" ||\n (event.type === \"keydown\" &&\n ((event as KeyboardEvent).key === \"Enter\" ||\n (event as KeyboardEvent).key === \" \"))\n ) {\n this.navItemClicked.emit();\n }\n };\n\n // triggered when attributes of host element change\n private hostMutationCallback = (mutationList: MutationRecord[]) => {\n let forceComponentUpdate = false;\n mutationList.forEach(({ attributeName }) => {\n if (attributeName) {\n const attribute = this.el.getAttribute(attributeName);\n if (attribute && attributeName === this.ARIA_LABEL_STRING) {\n this.ariaLabel = attribute;\n forceComponentUpdate = true;\n }\n }\n });\n if (forceComponentUpdate) {\n forceUpdate(this);\n }\n };\n\n private generateTooltipLabel = () => {\n if (this.label) {\n return this.label;\n }\n\n if (this.navigationSlot) {\n return this.navigationSlot.textContent || \"\";\n }\n\n return this.el.children[0]?.textContent || \"\";\n };\n\n private renderNavigationItemContent = () => {\n if (!this.label && !this.navigationSlot) return <slot></slot>;\n\n return this.label ? (\n this.displayDefaultNavigationItem(\n this.href,\n this.label,\n this.hreflang,\n this.target,\n this.rel,\n this.referrerpolicy,\n this.download\n )\n ) : (\n <slot name=\"navigation-item\"></slot>\n );\n };\n\n // Displays tooltip only once the collapsing animation is finished\n private sideNavToggleTooltip = (showTooltip: boolean) => {\n const tooltip = this.el.shadowRoot?.querySelector(\"ic-tooltip\");\n const collapsedClass = \"tooltip-navigation-item-side-nav-collapsed\";\n let timer;\n\n if (!tooltip) return;\n\n if (showTooltip) {\n tooltip.displayTooltip(false); // Hides tooltip for when mouse is hovering over icon\n timer = setTimeout(() => {\n tooltip.classList.add(collapsedClass);\n }, this.ANIMATION_DURATION);\n } else {\n clearTimeout(timer);\n tooltip.classList.remove(collapsedClass);\n }\n };\n\n render() {\n const {\n inTopNavSideMenu,\n isTopNavChild,\n selected,\n navigationType,\n focusStyle,\n isInitialRender,\n sideNavExpanded,\n displayNavigationTooltip,\n collapsedIconLabel,\n isSideNavMobile,\n expandable,\n isInSideNav,\n theme,\n } = this;\n\n const isTopNavChildDesktop = isTopNavChild && !inTopNavSideMenu;\n\n return (\n <Host\n class={{\n \"navigation-item\": true,\n \"navigation-item-selected\": !isTopNavChild && selected,\n \"navigation-item-top-nav\":\n !inTopNavSideMenu && navigationType === \"top\",\n \"navigation-item-top-nav-child\": isTopNavChildDesktop,\n \"navigation-item-top-nav-child-selected\":\n isTopNavChildDesktop && selected,\n \"navigation-item-side-menu\": inTopNavSideMenu,\n \"navigation-item-side-menu-selected\": inTopNavSideMenu && selected,\n \"navigation-item-page-header\": navigationType === \"page-header\",\n \"navigation-item-side-nav\": isInSideNav,\n \"navigation-item-side-nav-collapsed\":\n (!sideNavExpanded || displayNavigationTooltip) && isInSideNav,\n \"navigation-item-side-nav-collapsed-with-label\":\n !sideNavExpanded &&\n isInSideNav &&\n collapsedIconLabel &&\n !isSideNavMobile,\n \"with-transition\": !isInitialRender,\n expandable,\n [focusStyle]: isTopNavChild ? isInSideNav : !inTopNavSideMenu,\n [`ic-theme-${theme}`]: theme !== \"inherit\",\n }}\n onBlur={isTopNavChildDesktop ? this.handleBlur : null}\n onClick={this.handleClick}\n onKeyDown={this.handleClick}\n aria-current={selected ? \"page\" : null}\n role=\"listitem\"\n >\n {/* Tooltip enabled by applying navigation-item-side-nav-collapsed class to host */}\n <ic-tooltip\n label={this.generateTooltipLabel()}\n target=\"navigation-item\"\n placement=\"right\"\n class={{\n \"tooltip-navigation-item\": true,\n \"tooltip-navigation-item-side-nav-collapsed\":\n displayNavigationTooltip && isInSideNav,\n \"tooltip-long-label-navigation-item-side-nav-expanded\":\n this.el.hasAttribute(\"[display-navigation-tooltip = 'true']\"),\n }}\n >\n {this.renderNavigationItemContent()}\n </ic-tooltip>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,2 +0,0 @@
1
- import{r as t,c as e,h as o,H as i,g as n}from"./p-8e4e97b4.js";import{r}from"./p-70abcb2b.js";const s='/*! 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}:root{display:block}:host{display:flex;flex-direction:row;width:-moz-fit-content;width:fit-content;min-width:-moz-min-content;min-width:min-content;border:var(--ic-border-width) solid var(--ic-toggle-button-unselected-border);border-radius:var(--ic-border-radius)}:host(.ic-toggle-button-group-full-width){width:100%;max-width:100%}:host(.ic-toggle-button-group-loading){min-width:-moz-max-content;min-width:max-content}:host(:focus){box-shadow:var(--ic-border-focus);border-radius:var(--ic-border-radius);transition:var(--ic-transition-duration-fast);outline:none}::slotted(ic-toggle-button){flex-grow:1;width:-moz-min-content;width:min-content;--toggle-button-border:none !important;--toggle-button-border-hover:none !important;--toggle-button-border-active:none !important}::slotted(ic-toggle-button:not(:last-of-type)){border-right:var(--ic-border-width) solid\n var(--ic-toggle-button-unselected-border)}:host(.ic-toggle-button-group-disabled){border:var(--ic-space-1px) dashed\n var(--ic-toggle-button-unselected-border-disabled);pointer-events:none}:host(.ic-toggle-button-group-disabled) ::slotted(ic-toggle-button:not(:last-of-type)){border-right:var(--ic-space-1px) dashed\n var(--ic-toggle-button-unselected-border-disabled)}:host(.ic-toggle-button-group-monochrome){border:var(--ic-border-width) solid\n var(--ic-toggle-button-unselected-border-monochrome)}:host(.ic-toggle-button-group-monochrome) ::slotted(ic-toggle-button:not(:last-of-type)){border-right:var(--ic-border-width) solid\n var(--ic-toggle-button-unselected-border-monochrome)}:host(.ic-toggle-button-group-disabled.ic-toggle-button-group-monochrome){border:var(--ic-border-width) dashed\n var(--ic-toggle-button-unselected-border-disabled-monochrome)}:host(.ic-toggle-button-group-disabled.ic-toggle-button-group-monochrome) ::slotted(ic-toggle-button:not(:last-of-type)){border-right:var(--ic-border-width) solid\n var(--ic-toggle-button-unselected-border-disabled-monochrome)}';const a=s;const d="IC-TOGGLE-BUTTON-GROUP";const l=class{constructor(o){t(this,o);this.icChange=e(this,"icChange",7);this.lastKeyPressed={key:null,shift:false};this.accessibleLabel="Toggle button group";this.disabled=false;this.fullWidth=false;this.loading=false;this.monochrome=false;this.selectMethod="manual";this.selectType="single";this.size="medium";this.theme="inherit";this.tooltipPlacement="bottom";this.variant="default";this.keyListener=t=>{this.lastKeyPressed={key:t.key,shift:t.shiftKey}};this.handleHostFocus=({target:t,relatedTarget:e})=>{var o;if(this.loading||this.disabled)return;const i=t;const n=e;const r=Array.from((i===null||i===void 0?void 0:i.querySelectorAll("ic-toggle-button"))||[]);const s=r.every((t=>!t.checked));const{shift:a}=this.lastKeyPressed;if((s||this.selectType!=="single")&&!a||s&&a&&(n===null||n===void 0?void 0:n.tagName)==d){(o=r[0])===null||o===void 0?void 0:o.focus()}else if(!a||(n===null||n===void 0?void 0:n.tagName)==d){r.filter((t=>t.checked))[0].focus()}};this.handleKeyDown=({key:t})=>{if(t!=="ArrowDown"&&t!=="ArrowRight"&&t!=="ArrowLeft"&&t!=="ArrowUp")return;const e=this.getAllToggleButtons();const o=e[this.getNextItemToSelect(e.indexOf(e.filter((t=>t===document.activeElement))[0]),t==="ArrowDown"||t==="ArrowRight")];if(this.selectMethod==="auto"){o.checked=true;this.selectHandler(new CustomEvent("icToggleChecked",{detail:{checked:o.checked}}),o)}else{o.focus()}};this.getNextItemToSelect=(t,e)=>{const o=this.getAllToggleButtons();const i=o.length-1;if(t<1){t=0}let n=e?t+1:t-1;if(n<0){n=i}else if(n>i){n=0}if(o[n].disabled){n=this.getNextItemToSelect(n,e)}return n};this.getAllToggleButtons=()=>Array.from(this.el.querySelectorAll("ic-toggle-button"))}watchDisabledHandler(){this.getAllToggleButtons().forEach((t=>{t.disabled=this.disabled}));r(this.disabled,this.el)}watchFullWidthHandler(){this.getAllToggleButtons().forEach((t=>{t.fullWidth=this.fullWidth}))}watchLoadingHandler(){this.getAllToggleButtons().forEach((t=>{t.loading=this.loading}))}watchMonochromeHandler(){this.getAllToggleButtons().forEach((t=>{t.monochrome=this.monochrome}))}watchSizeHandler(){this.getAllToggleButtons().forEach((t=>{t.size=this.size}))}watchThemeHandler(){this.getAllToggleButtons().forEach((t=>{t.theme=this.theme}))}watchTooltipPlacementHandler(){this.getAllToggleButtons().forEach((t=>{t.tooltipPlacement=this.tooltipPlacement}))}watchVariantHandler(){this.getAllToggleButtons().forEach((t=>{t.variant=this.variant}))}selectHandler(t,e){const o=this.getAllToggleButtons();let i=t.target;if(e)e.focus();if(this.selectType==="single"){if(!i&&e){i=e}o.forEach((t=>{if(t.id!==i.id&&t.checked){t.checked=false}}));this.icChange.emit({checked:t.detail.checked,selectedOption:i})}else{const t=o.filter((t=>t.checked&&!t.disabled));this.icChange.emit({checked:t.map((t=>t.checked)),toggledOptions:t.map((t=>({toggleButton:t}))),selectedOption:i})}}componentWillLoad(){if(this.selectType==="multi")this.selectMethod="manual";document.addEventListener("keydown",this.keyListener);r(this.disabled,this.el)}componentDidLoad(){this.getAllToggleButtons().forEach(((t,e)=>{var o,i,n;const r=(n=(i=(o=t.shadowRoot)===null||o===void 0?void 0:o.querySelector("ic-button"))===null||i===void 0?void 0:i.shadowRoot)===null||n===void 0?void 0:n.querySelector("button");if(r){const t=r.getAttribute("aria-label");const e=t?`${t}, `:"";r.setAttribute("aria-label",`${e}${this.accessibleLabel}`)}t.id=e.toString();t.tabIndex=-1;t.addEventListener("keydown",(t=>{this.handleKeyDown(t)}));t.classList.add("expand-toggle-group-child")}))}disconnectedCallback(){document===null||document===void 0?void 0:document.removeEventListener("keydown",this.keyListener)}render(){const{accessibleLabel:t,disabled:e,fullWidth:n,loading:r,monochrome:s,theme:a}=this;return o(i,{key:"c82ba602f319c2074da44667618cc5d7b7c3499b",role:"group","aria-label":t,tabindex:0,class:{"ic-toggle-button-group-disabled":e,"ic-toggle-button-group-full-width":n,"ic-toggle-button-group-loading":r,"ic-toggle-button-group-monochrome":s,[`ic-theme-${a}`]:a!=="inherit"},onFocus:this.handleHostFocus},o("slot",{key:"98defd37fd3f5c87d4d0aceefd1b5ac0c5ad6123"}))}get el(){return n(this)}static get watchers(){return{disabled:["watchDisabledHandler"],fullWidth:["watchFullWidthHandler"],loading:["watchLoadingHandler"],monochrome:["watchMonochromeHandler"],size:["watchSizeHandler"],theme:["watchThemeHandler"],tooltipPlacement:["watchTooltipPlacementHandler"],variant:["watchVariantHandler"]}}};l.style=a;export{l as ic_toggle_button_group};
2
- //# sourceMappingURL=p-9caa9e7b.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["icToggleButtonGroupCss","IcToggleButtonGroupStyle0","TOGGLE_GROUP","ToggleButtonGroup","constructor","hostRef","this","lastKeyPressed","key","shift","accessibleLabel","disabled","fullWidth","loading","monochrome","selectMethod","selectType","size","theme","tooltipPlacement","variant","keyListener","ev","shiftKey","handleHostFocus","target","relatedTarget","el","relEl","toggleButtons","Array","from","querySelectorAll","noToggleButtonsChecked","every","checked","tagName","_a","focus","filter","handleKeyDown","toggleButtonOptions","getAllToggleButtons","targetToggle","getNextItemToSelect","indexOf","document","activeElement","selectHandler","CustomEvent","detail","currentItem","movingDown","numToggles","length","nextItem","watchDisabledHandler","forEach","removeDisabledFalse","watchFullWidthHandler","watchLoadingHandler","watchMonochromeHandler","watchSizeHandler","watchThemeHandler","watchTooltipPlacementHandler","watchVariantHandler","tabTarget","allToggles","clickedToggle","id","icChange","emit","selectedOption","toggledOptions","map","opt","toggleButton","componentWillLoad","addEventListener","componentDidLoad","i","btn","_c","_b","shadowRoot","querySelector","btnAriaLabel","getAttribute","aria","setAttribute","toString","tabIndex","classList","add","disconnectedCallback","removeEventListener","render","h","Host","role","tabindex","class","onFocus"],"sources":["src/components/ic-toggle-button-group/ic-toggle-button-group.css?tag=ic-toggle-button-group&encapsulation=shadow","src/components/ic-toggle-button-group/ic-toggle-button-group.tsx"],"sourcesContent":["@import \"../../global/normalize.css\";\n\n/* PARENT HOST */\n\n:root {\n display: block;\n}\n\n:host {\n display: flex;\n flex-direction: row;\n width: fit-content;\n min-width: min-content;\n border: var(--ic-border-width) solid var(--ic-toggle-button-unselected-border);\n border-radius: var(--ic-border-radius);\n}\n\n:host(.ic-toggle-button-group-full-width) {\n width: 100%;\n max-width: 100%;\n}\n\n:host(.ic-toggle-button-group-loading) {\n min-width: max-content;\n}\n\n:host(:focus) {\n box-shadow: var(--ic-border-focus);\n border-radius: var(--ic-border-radius);\n transition: var(--ic-transition-duration-fast);\n outline: none;\n}\n\n/* CHILDREN SLOTTED */\n\n::slotted(ic-toggle-button) {\n flex-grow: 1;\n width: min-content;\n\n --toggle-button-border: none !important;\n --toggle-button-border-hover: none !important;\n --toggle-button-border-active: none !important;\n}\n\n::slotted(ic-toggle-button:not(:last-of-type)) {\n border-right: var(--ic-border-width) solid\n var(--ic-toggle-button-unselected-border);\n}\n\n/* DISABLED */\n:host(.ic-toggle-button-group-disabled) {\n border: var(--ic-space-1px) dashed\n var(--ic-toggle-button-unselected-border-disabled);\n pointer-events: none;\n}\n\n:host(.ic-toggle-button-group-disabled)\n ::slotted(ic-toggle-button:not(:last-of-type)) {\n border-right: var(--ic-space-1px) dashed\n var(--ic-toggle-button-unselected-border-disabled);\n}\n\n:host(.ic-toggle-button-group-monochrome) {\n border: var(--ic-border-width) solid\n var(--ic-toggle-button-unselected-border-monochrome);\n}\n\n:host(.ic-toggle-button-group-monochrome)\n ::slotted(ic-toggle-button:not(:last-of-type)) {\n border-right: var(--ic-border-width) solid\n var(--ic-toggle-button-unselected-border-monochrome);\n}\n\n:host(.ic-toggle-button-group-disabled.ic-toggle-button-group-monochrome) {\n border: var(--ic-border-width) dashed\n var(--ic-toggle-button-unselected-border-disabled-monochrome);\n}\n\n:host(.ic-toggle-button-group-disabled.ic-toggle-button-group-monochrome)\n ::slotted(ic-toggle-button:not(:last-of-type)) {\n border-right: var(--ic-border-width) solid\n var(--ic-toggle-button-unselected-border-disabled-monochrome);\n}\n","import {\n Component,\n Host,\n h,\n Prop,\n Listen,\n Element,\n Event,\n EventEmitter,\n State,\n Watch,\n} from \"@stencil/core\";\nimport {\n IcSizes,\n IcSelectTypes,\n IcSelectMethodTypes,\n IcThemeMode,\n IcButtonTooltipPlacement,\n IcIconPlacementOptions,\n} from \"../../utils/types\";\nimport { IcChangeEventDetail } from \"./ic-toggle-button-group.types\";\nimport { removeDisabledFalse } from \"../../utils/helpers\";\n\ninterface lastKey {\n key: string | null;\n shift: boolean;\n}\n\nconst TOGGLE_GROUP = \"IC-TOGGLE-BUTTON-GROUP\";\n\n@Component({\n tag: \"ic-toggle-button-group\",\n styleUrl: \"ic-toggle-button-group.css\",\n shadow: true,\n})\nexport class ToggleButtonGroup {\n @Element() el: HTMLIcToggleButtonGroupElement;\n\n @State() lastKeyPressed: lastKey = {\n key: null,\n shift: false,\n };\n\n /**\n * The accessible label of the toggle button group component to provide context for screen reader users.\n */\n @Prop() accessibleLabel = \"Toggle button group\";\n\n /**\n * If `true`, the toggle button group will be set to the disabled state.\n */\n @Prop() disabled = false;\n @Watch(\"disabled\")\n watchDisabledHandler(): void {\n this.getAllToggleButtons().forEach((el) => {\n el.disabled = this.disabled;\n });\n removeDisabledFalse(this.disabled, this.el);\n }\n\n /**\n * If `true`, the toggle button group will fill the width of the container.\n */\n @Prop() fullWidth = false;\n @Watch(\"fullWidth\")\n watchFullWidthHandler(): void {\n this.getAllToggleButtons().forEach((el) => {\n el.fullWidth = this.fullWidth;\n });\n }\n\n /**\n * The placement of the icons in relation to the toggle button labels.\n */\n @Prop() iconPlacement?: IcIconPlacementOptions;\n\n /**\n * If `true`, the toggle button group will be in loading state.\n */\n @Prop() loading = false;\n @Watch(\"loading\")\n watchLoadingHandler(): void {\n this.getAllToggleButtons().forEach((el) => {\n el.loading = this.loading;\n });\n }\n\n /**\n * If `true`, the toggle button group will display as black in the light theme, and white in dark theme.\n */\n @Prop() monochrome = false;\n @Watch(\"monochrome\")\n watchMonochromeHandler(): void {\n this.getAllToggleButtons().forEach((el) => {\n el.monochrome = this.monochrome;\n });\n }\n\n /**\n * If `auto`, controls are toggled automatically when navigated to. If `manual`, the controls must be actioned to change their toggled state. The value of this prop is ignored if `selectType` is set to`multi`.\n */\n @Prop({ mutable: true }) selectMethod: IcSelectMethodTypes = \"manual\";\n\n /**\n * Sets whether single or multiple options can be toggled. If `multi`, then the `selectMethod` is always `manual`.\n */\n @Prop() selectType: IcSelectTypes = \"single\";\n\n /**\n * The size of the toggle buttons to be displayed. This does not affect the font size of the accessible label.\n */\n @Prop() size: IcSizes = \"medium\";\n @Watch(\"size\")\n watchSizeHandler(): void {\n this.getAllToggleButtons().forEach((el) => {\n el.size = this.size;\n });\n }\n\n /**\n * Sets the theme color to the dark or light theme color. \"inherit\" will set the color based on the system settings or ic-theme component.\n */\n @Prop() theme: IcThemeMode = \"inherit\";\n @Watch(\"theme\")\n watchThemeHandler(): void {\n this.getAllToggleButtons().forEach((el) => {\n el.theme = this.theme;\n });\n }\n\n /**\n * The position of the tooltip in relation to the toggle buttons.\n */\n @Prop() tooltipPlacement: IcButtonTooltipPlacement = \"bottom\";\n @Watch(\"tooltipPlacement\")\n watchTooltipPlacementHandler(): void {\n this.getAllToggleButtons().forEach((el) => {\n el.tooltipPlacement = this.tooltipPlacement;\n });\n }\n\n /**\n * The variant of the toggle button.\n */\n @Prop({ reflect: true }) variant: \"default\" | \"icon\" = \"default\";\n @Watch(\"variant\")\n watchVariantHandler(): void {\n this.getAllToggleButtons().forEach((el) => {\n el.variant = this.variant;\n });\n }\n\n /**\n * Emitted when a toggle button is selected.\n */\n @Event() icChange: EventEmitter<IcChangeEventDetail>;\n\n @Listen(\"icToggleChecked\")\n selectHandler(ev: CustomEvent, tabTarget?: HTMLIcToggleButtonElement): void {\n const allToggles = this.getAllToggleButtons();\n let clickedToggle = ev.target as HTMLIcToggleButtonElement;\n\n if (tabTarget) tabTarget.focus(); // tabTarget used in proxySelectHandler\n\n if (this.selectType === \"single\") {\n if (!clickedToggle && tabTarget) {\n clickedToggle = tabTarget;\n }\n allToggles.forEach((el) => {\n if (el.id !== clickedToggle.id && el.checked) {\n el.checked = false;\n }\n });\n\n this.icChange.emit({\n checked: ev.detail.checked,\n selectedOption: clickedToggle,\n });\n } else {\n const toggledOptions = allToggles.filter(\n (el) => el.checked && !el.disabled\n );\n\n this.icChange.emit({\n checked: toggledOptions.map((opt) => opt.checked),\n toggledOptions: toggledOptions.map((opt) => ({\n toggleButton: opt,\n })),\n selectedOption: clickedToggle,\n });\n }\n }\n\n componentWillLoad(): void {\n if (this.selectType === \"multi\") this.selectMethod = \"manual\";\n if (this.selectMethod === \"auto\") this.selectType === \"single\";\n document.addEventListener(\"keydown\", this.keyListener);\n removeDisabledFalse(this.disabled, this.el);\n }\n\n componentDidLoad(): void {\n this.getAllToggleButtons().forEach((el, i) => {\n const btn = el.shadowRoot\n ?.querySelector(\"ic-button\")\n ?.shadowRoot?.querySelector(\"button\");\n if (btn) {\n const btnAriaLabel = btn.getAttribute(\"aria-label\");\n const aria = btnAriaLabel ? `${btnAriaLabel}, ` : \"\";\n btn.setAttribute(\"aria-label\", `${aria}${this.accessibleLabel}`);\n }\n\n el.id = i.toString();\n el.tabIndex = -1;\n el.addEventListener(\"keydown\", (ev) => {\n this.handleKeyDown(ev);\n });\n el.classList.add(\"expand-toggle-group-child\");\n });\n }\n\n disconnectedCallback(): void {\n document?.removeEventListener(\"keydown\", this.keyListener);\n }\n\n private keyListener = (ev: KeyboardEvent) => {\n this.lastKeyPressed = {\n key: ev.key,\n shift: ev.shiftKey,\n };\n };\n\n private handleHostFocus = ({ target, relatedTarget }: FocusEvent) => {\n if (this.loading || this.disabled) return;\n\n const el = target as HTMLIcToggleButtonGroupElement | null;\n const relEl = relatedTarget as HTMLIcToggleButtonElement | null;\n const toggleButtons = Array.from(\n el?.querySelectorAll(\"ic-toggle-button\") || []\n );\n const noToggleButtonsChecked = toggleButtons.every((el) => !el.checked);\n const { shift } = this.lastKeyPressed;\n if (\n ((noToggleButtonsChecked || this.selectType !== \"single\") && !shift) ||\n (noToggleButtonsChecked && shift && relEl?.tagName == TOGGLE_GROUP)\n ) {\n toggleButtons[0]?.focus();\n } else if (!shift || relEl?.tagName == TOGGLE_GROUP) {\n // if checked is true and selectMethod is \"single\", focus that toggle\n toggleButtons.filter((el) => el.checked)[0].focus();\n }\n };\n\n private handleKeyDown = ({ key }: KeyboardEvent) => {\n if (\n key !== \"ArrowDown\" &&\n key !== \"ArrowRight\" &&\n key !== \"ArrowLeft\" &&\n key !== \"ArrowUp\"\n )\n return;\n\n const toggleButtonOptions = this.getAllToggleButtons();\n const targetToggle =\n toggleButtonOptions[\n this.getNextItemToSelect(\n toggleButtonOptions.indexOf(\n toggleButtonOptions.filter((el) => el === document.activeElement)[0]\n ),\n key === \"ArrowDown\" || key === \"ArrowRight\"\n )\n ];\n\n if (this.selectMethod === \"auto\") {\n // trigger selectHandler when unable to add 'target'\n targetToggle.checked = true;\n this.selectHandler(\n new CustomEvent(\"icToggleChecked\", {\n detail: {\n checked: targetToggle.checked,\n },\n }),\n targetToggle\n );\n } else {\n targetToggle.focus();\n }\n };\n\n private getNextItemToSelect = (currentItem: number, movingDown: boolean) => {\n const toggleButtonOptions = this.getAllToggleButtons();\n const numToggles = toggleButtonOptions.length - 1;\n\n if (currentItem < 1) {\n currentItem = 0;\n }\n\n let nextItem = movingDown ? currentItem + 1 : currentItem - 1;\n if (nextItem < 0) {\n nextItem = numToggles;\n } else if (nextItem > numToggles) {\n nextItem = 0;\n }\n\n if (toggleButtonOptions[nextItem].disabled) {\n nextItem = this.getNextItemToSelect(nextItem, movingDown);\n }\n\n return nextItem;\n };\n\n private getAllToggleButtons = () =>\n Array.from(this.el.querySelectorAll(\"ic-toggle-button\"));\n\n render() {\n const { accessibleLabel, disabled, fullWidth, loading, monochrome, theme } =\n this;\n\n return (\n <Host\n role=\"group\"\n aria-label={accessibleLabel}\n tabindex={0}\n class={{\n \"ic-toggle-button-group-disabled\": disabled,\n \"ic-toggle-button-group-full-width\": fullWidth,\n \"ic-toggle-button-group-loading\": loading,\n \"ic-toggle-button-group-monochrome\": monochrome,\n [`ic-theme-${theme}`]: theme !== \"inherit\",\n }}\n onFocus={this.handleHostFocus}\n >\n <slot></slot>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +0,0 @@
1
- {"version":3,"names":["icSearchBarCss","IcSearchBarStyle0","inputIds","SearchBar","constructor","hostRef","this","hasTimedOut","inputId","menuCloseFromMenuChangeEvent","menuId","preLoad","preventSubmit","prevNoOption","retryButtonClick","retryViaKeyPress","truncateValue","clearButtonFocused","open","searchSubmitFocused","showClearButton","autocapitalize","autocomplete","autocorrect","autofocus","charactersUntilSuggestion","disabled","disableAutoFiltering","debounce","emptyOptionListText","focusOnLoad","fullWidth","helperText","hideLabel","assistiveHintText","labelField","loading","loadingErrorLabel","loadingLabel","name","placeholder","preventFormSubmitOnSearch","readonly","required","searchMode","size","spellcheck","theme","valueField","filteredOptions","options","value","handleClear","ev","keyboardEvent","mouseEvent","type","code","_a","inputEl","setAttribute","clearTimeout","timeoutTimer","showMenuWithNoInput","setMenuChange","el","setFocus","icClear","emit","preventDefault","onInput","target","icInput","length","rawFilteredOptions","getFilteredMenuOptions","debounceAriaLiveUpdate","onInputBlur","relatedTarget","icSearchBarBlur","onInputFocus","icSearchBarFocus","handleClearBlur","icClearBlur","handleSubmitSearchBlur","icSubmitSearchBlur","setInputValue","newValue","label","getLabelFromValue","handleMouseDown","handleSubmitSearchFocus","handleSubmitSearch","highlightedValue","undefined","icSubmitSearch","form","closest","searchSubmitButton","handleHiddenFormButtonClick","handleSubmitSearchKeyDown","key","handleRetry","detail","keyPressed","icRetryLoad","triggerLoading","loadingOption","timeout","window","setTimeout","timedOut","handleOptionSelect","icOptionSelect","handleMenuOptionHighlight","optionId","replace","ariaActiveDescendant","handleMenuChange","icMenuChange","handleHostFocus","handleHostBlur","menu","focus","updateSearchResultAriaLive","handleFocusClearButton","renderAssistiveHintEl","input","shadowRoot","querySelector","Object","keys","hasOptionsOrFilterDisabled","assistiveHintEl","document","createElement","innerText","id","style","display","_b","after","call","searchResultsStatusEl","hadNoOptions","isSubmitDisabled","updateSearchButtonType","searchButtonType","watchCharactersUntilSuggestionHandler","watchDisabledHandler","removeDisabledFalse","debounceChanged","icChange","debounceEvent","loadingHandler","preventFormSubmitOnSearchHandler","filteredOptionsHandler","newOptions","some","opt","watchOptionsHandler","watchValueHandler","connectedCallback","disconnectedCallback","remove","componentWillLoad","componentDidLoad","onComponentRequiredPropUndefined","prop","propName","componentWillRender","handleSetFirstOption","find","filteredOption","handleKeyDown","event","icKeydown","handleKeyboardOpen","handleKeyUp","debounceAriaLive","render","disabledMode","describedBy","getInputDescribedByText","trim","describedById","hasSuggestedSearch","menuOpen","menuRendered","labelValue","renderHiddenInput","h","Host","class","onFocus","onBlur","for","slot","ref","anchorEl","role","autoFocus","inputmode","innerHTML","clearIcon","onClick","onMouseDown","onKeyDown","variant","searchIcon","fullwidth","activationType","autofocusOnSelected","inputLabel","onMenuOptionSelect","onMenuStateChange","onMenuOptionId","onRetryButtonClicked","parentEl"],"sources":["src/components/ic-search-bar/ic-search-bar.css?tag=ic-search-bar&encapsulation=shadow","src/components/ic-search-bar/ic-search-bar.tsx"],"sourcesContent":["@import \"../../global/normalize.css\";\n\n/**\n * @prop --ic-z-index-menu: z-index of search bar menu\n */\n\n:host(.ic-search-bar-search) {\n display: block;\n\n --divider-height: 1.5rem;\n --ic-input-label-helpertext-padding: var(--ic-space-xs);\n --border-color: var(--ic-search-bar-outline);\n --input-bg-color: var(--ic-search-bar-background);\n --border-color-disabled: var(--ic-search-bar-outline-disabled);\n --menu-item-text-color: var(--ic-search-bar-dropdown-option-text);\n --menu-item-desc-text-color: var(--ic-search-bar-dropdown-option-description);\n --menu-bg-color: var(--ic-search-bar-dropdown-background);\n --menu-border-color: var(--ic-search-bar-dropdown-outline);\n}\n\n:host(.ic-search-bar-disabled) {\n --ic-input-label-text-color: var(--ic-search-bar-label-disabled);\n --ic-input-label-helper-text-color: var(--ic-search-bar-subtitle-disabled);\n}\n\n:host(.ic-search-bar-search:hover) {\n --border-color: var(--ic-search-bar-outline-hover);\n}\n\n:host(.ic-search-bar-search:active) {\n --border-color: var(--ic-search-bar-outline-pressed);\n}\n\n:host(.ic-search-bar-search.ic-search-bar-small) {\n --divider-height: 1rem;\n}\n\n:host(.ic-search-bar-full-width) {\n width: 100%;\n}\n\n/* Custom Input */\n\n::placeholder {\n color: var(--ic-search-bar-placeholder-text);\n opacity: 1;\n}\n\ninput {\n border: 0;\n border-radius: var(--ic-border-radius);\n color: var(--ic-search-bar-filled-text);\n background-color: var(--input-bg-color);\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 caret-color: var(--ic-search-bar-filled-text-cursor);\n}\n\ninput:focus {\n border: 0;\n outline: 0;\n}\n\ninput:disabled,\ninput:disabled::placeholder {\n color: var(--ic-search-bar-disabled-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.no-left-pad {\n padding-left: 0;\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/* CLEAR */\n\n.clear-button-container {\n align-items: center;\n margin-right: var(--ic-space-1px);\n display: none;\n visibility: hidden;\n}\n\n.clear-button {\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.clear-button:active {\n background-color: var(--ic-color-focus-inner);\n box-shadow: inset 0 0 0 0.125rem var(--ic-color-focus-outer);\n border-radius: 0.25rem;\n}\n\n.clear-button-unfocused * {\n fill: var(--ic-search-bar-clear-button);\n}\n\n.clear-button:focus,\n.clear-button:active * {\n fill: var(--ic-atoms-input-clear-button-focus);\n}\n\n.clear-button-visible {\n visibility: visible;\n display: flex;\n}\n\n.search-submit-button-container {\n display: flex;\n align-items: center;\n}\n\n.search-submit-button-unfocused * {\n fill: var(--ic-search-bar-filled-icon);\n}\n\n.search-submit-button-disabled * {\n fill: var(--ic-search-bar-icon-disabled);\n}\n\n.search-submit-button-disabled .ic-tooltip-container {\n display: none !important;\n}\n\n.search-submit-button:focus,\n.search-submit-button:active {\n background-color: var(--ic-color-focus-inner) !important;\n box-shadow: inset 0 0 0 0.125rem var(--ic-color-focus-outer) !important;\n border-radius: var(--ic-space-xxs);\n}\n\n.search-submit-button:focus,\n.search-submit-button:active * {\n fill: white;\n}\n\n.divider {\n width: var(--ic-border-width);\n background-color: var(--ic-search-bar-dropdown-divider);\n height: var(--divider-height);\n}\n\n.menu-container {\n width: var(--input-width, 20rem);\n position: relative;\n top: var(--ic-space-xxxs);\n}\n\n.menu-container.fullwidth {\n width: 100%;\n}\n\n.no-results {\n cursor: not-allowed;\n}\n\n.search-results-status {\n border: 0;\n clip: rect(0, 0, 0, 0, 0);\n height: var(--ic-space-1px);\n margin-bottom: calc(-1 * var(--ic-space-1px));\n margin-right: calc(-1 * 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@media (forced-colors: active) {\n .search-submit-button-unfocused * {\n fill: canvastext;\n }\n\n .search-submit-button-disabled * {\n fill: GrayText;\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} from \"@stencil/core\";\n\nimport {\n IcAutocompleteTypes,\n IcAutocorrectStates,\n IcMenuOption,\n IcMultiValueEventDetail,\n IcSizesNoLarge,\n IcThemeMode,\n} from \"../../utils/types\";\nimport {\n getInputDescribedByText,\n renderHiddenInput,\n handleHiddenFormButtonClick,\n getLabelFromValue,\n onComponentRequiredPropUndefined,\n getFilteredMenuOptions,\n removeDisabledFalse,\n debounceEvent,\n} from \"../../utils/helpers\";\nimport {\n IcSearchBarBlurEventDetail,\n IcSearchBarSearchModes,\n} from \"./ic-search-bar.types\";\nimport { IcValueEventDetail, IcBlurEventDetail } from \"../../utils/types\";\nimport {\n IcMenuChangeEventDetail,\n IcMenuOptionIdEventDetail,\n IcOptionSelectEventDetail,\n} from \"../ic-menu/ic-menu.types\";\n\nimport clearIcon from \"../../assets/clear-icon.svg\";\nimport searchIcon from \"../../assets/search-icon.svg\";\nimport { IcButtonTypes } from \"../ic-button/ic-button.types\";\n\nlet inputIds = 0;\n\n/**\n * @slot helper-text - Content is set as the helper text for the search bar.\n */\n@Component({\n tag: \"ic-search-bar\",\n styleUrl: \"ic-search-bar.css\",\n shadow: {\n delegatesFocus: true,\n },\n})\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport class SearchBar {\n private anchorEl?: HTMLElement;\n private assistiveHintEl?: HTMLSpanElement;\n private debounceAriaLive?: number;\n private hasTimedOut = false;\n private inputEl?: HTMLInputElement;\n private inputId = `ic-search-bar-input-${inputIds++}`;\n private menu?: HTMLIcMenuElement;\n private menuCloseFromMenuChangeEvent = false;\n private menuId = `${this.inputId}-menu`;\n private preLoad = true;\n private preventSubmit = false;\n private prevNoOption = false;\n private retryButtonClick = false;\n private retryViaKeyPress = false;\n private timeoutTimer?: number;\n private truncateValue = false;\n private searchSubmitButton?: HTMLIcButtonElement;\n\n @Element() el: HTMLIcSearchBarElement;\n\n @State() ariaActiveDescendant?: string;\n @State() clearButtonFocused = false;\n @State() highlightedValue?: string;\n @State() open = false;\n @State() searchSubmitFocused = false;\n @State() showClearButton = false;\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 * The number of characters until suggestions appear. The submit button will be disabled until the inputted value is equal to or greater than this number.\n */\n @Prop() charactersUntilSuggestion = 2;\n @Watch(\"charactersUntilSuggestion\")\n watchCharactersUntilSuggestionHandler(): void {\n if (this.showMenuWithNoInput()) {\n this.filteredOptions = this.options;\n }\n }\n\n /**\n * If `true`, the disabled state will be set.\n */\n @Prop() disabled = false;\n @Watch(\"disabled\")\n watchDisabledHandler(): void {\n removeDisabledFalse(this.disabled, this.el as HTMLElement);\n }\n\n /**\n * Specify whether to disable the built in filtering. For example, if options will already be filtered from external source.\n * If `true`, all options provided will be displayed.\n */\n @Prop() disableAutoFiltering = false;\n\n /**\n * The amount of time, in milliseconds, to wait to trigger the `icChange` event after each keystroke.\n */\n @Prop() debounce = 0;\n @Watch(\"debounce\")\n private debounceChanged() {\n this.icChange = debounceEvent(this.icChange, this.debounce);\n }\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 * If `true`, the search bar will be focused when component loaded.\n */\n @Prop() focusOnLoad = false;\n\n /**\n * Specify whether the search bar fills the full width of the container.\n * If `true`, this overrides the --input-width CSS variable.\n */\n @Prop() fullWidth = false;\n\n /**\n * The helper text that will be displayed for additional field guidance.\n */\n @Prop() helperText = \"\";\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 = false;\n\n /**\n * The hint text for the hidden assistive description element.\n */\n @Prop() assistiveHintText =\n \"When autocomplete results are available use the up and down arrows to choose and press enter to select\";\n\n /**\n * The label for the search bar.\n */\n @Prop() label!: string;\n\n /**\n * The custom name for the label field to correspond with the IcMenuOption type.\n */\n @Prop() labelField = \"label\";\n\n /**\n * Trigger loading state when fetching options asynchronously\n */\n @Prop({ mutable: true }) loading = false;\n @Watch(\"loading\")\n loadingHandler(newValue: boolean): void {\n if (newValue && !this.hasTimedOut) {\n this.preLoad = false;\n this.triggerLoading();\n }\n }\n\n /**\n * Change the message displayed when external loading times out.\n */\n @Prop() loadingErrorLabel = \"Loading Error\";\n\n /**\n * Change the message displayed whilst the options are being loaded externally.\n */\n @Prop() loadingLabel = \"Loading...\";\n\n /**\n * The name of the control, which is submitted with the form data.\n */\n @Prop() name = this.inputId;\n\n /**\n * The placeholder value to display.\n */\n @Prop() placeholder = \"Search\";\n\n /**\n * If `true` the parent form will not submit when the icSubmitSearch event fires.\n */\n @Prop() preventFormSubmitOnSearch = false;\n @State() searchButtonType: IcButtonTypes;\n @Watch(\"preventFormSubmitOnSearch\")\n preventFormSubmitOnSearchHandler(): void {\n this.updateSearchButtonType();\n }\n\n /**\n * If `true`, the readonly state will be set.\n */\n @Prop() readonly = false;\n\n /**\n * If `true`, the search bar will require a value.\n */\n @Prop() required = false;\n\n /**\n * Specify the mode search bar uses to search. `navigation` allows for quick lookups of a set of values, `query` allows for more general searches.\n */\n @Prop() searchMode: IcSearchBarSearchModes = \"navigation\";\n\n /**\n * The size of the search bar component.\n */\n @Prop() size: IcSizesNoLarge = \"medium\";\n\n /**\n * If `true`, the value of the search will have its spelling and grammar checked.\n */\n @Prop() spellcheck = false;\n\n /**\n * Sets the theme color to the dark or light theme color. \"inherit\" will set the color based on the system settings or ic-theme component.\n */\n @Prop() theme: IcThemeMode = \"inherit\";\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 custom name for the value field to correspond with the IcMenuOption type.\n */\n @Prop() valueField = \"value\";\n\n @State() filteredOptions: IcMenuOption[] = [];\n @Watch(\"filteredOptions\")\n filteredOptionsHandler(newOptions: IcMenuOption[]): void {\n this.hasTimedOut = newOptions.some((opt) => opt.timedOut);\n }\n\n /**\n * The suggested search options.\n */\n @Prop() options: IcMenuOption[] = [];\n @Watch(\"options\")\n watchOptionsHandler(newOptions: IcMenuOption[]): void {\n if (this.disableAutoFiltering) {\n if (!this.hasTimedOut) {\n this.loading = false;\n clearTimeout(this.timeoutTimer);\n if (newOptions.length > 0) {\n this.filteredOptions = newOptions;\n } else {\n if (this.hadNoOptions()) {\n return;\n }\n this.setMenuChange(true);\n if (!this.preLoad) {\n this.filteredOptions = [\n {\n [this.labelField]: this.emptyOptionListText,\n [this.valueField]: \"\",\n },\n ];\n }\n this.preLoad = true;\n }\n }\n } else if (this.showMenuWithNoInput()) {\n this.filteredOptions = newOptions;\n }\n this.debounceAriaLiveUpdate();\n }\n\n /**\n * The value of the search input.\n */\n @Prop({ reflect: true, mutable: true }) value = \"\";\n @Watch(\"value\")\n watchValueHandler(newValue: string): void {\n this.setInputValue(newValue);\n this.icChange.emit({ value: newValue });\n }\n\n // The icChange event is defined here so that it appears as an event for search bar\n /**\n * Emitted when the value has changed.\n */\n @Event() icChange: EventEmitter<IcValueEventDetail>;\n\n /**\n * Emitted when value is cleared with clear button\n */\n @Event() icClear: EventEmitter<void>;\n private handleClear = (ev: Event) => {\n const keyboardEvent = ev as KeyboardEvent;\n const mouseEvent = ev as MouseEvent;\n\n if (\n mouseEvent.type === \"click\" ||\n keyboardEvent.code === \"Enter\" ||\n keyboardEvent.code === \"Space\"\n ) {\n this.value = \"\";\n this.inputEl?.setAttribute(\"value\", \"\");\n this.loading = false;\n clearTimeout(this.timeoutTimer);\n this.filteredOptions = this.options;\n this.showMenuWithNoInput() && this.setMenuChange(true);\n this.el.setFocus();\n\n this.icClear.emit();\n ev.preventDefault();\n\n this.preventSubmit = true;\n }\n };\n\n // The icInput event is defined here so that it appears as an event for search bar\n /**\n * Emitted when a keyboard input occurred.\n */\n @Event() icInput: EventEmitter<IcValueEventDetail>;\n private onInput = ({ target }: Event) => {\n this.value = (target as HTMLInputElement).value;\n this.icInput.emit({ value: this.value });\n\n if (this.options.length > 0) {\n this.setMenuChange(true);\n\n this.preLoad = false;\n\n if (this.disableAutoFiltering === false) {\n const rawFilteredOptions = getFilteredMenuOptions(\n this.options,\n false,\n this.value,\n \"anywhere\",\n this.labelField\n );\n\n this.filteredOptions =\n rawFilteredOptions.length > 0\n ? rawFilteredOptions\n : [\n {\n [this.labelField]: this.emptyOptionListText,\n [this.valueField]: \"\",\n },\n ];\n }\n }\n\n if (!this.showClearButton) this.showClearButton = true;\n\n this.debounceAriaLiveUpdate();\n };\n\n private onInputBlur = ({ target, relatedTarget }: FocusEvent) => {\n this.icSearchBarBlur.emit({\n value: (target as HTMLInputElement).value,\n relatedTarget,\n });\n };\n\n private onInputFocus = ({ target }: Event) => {\n this.icSearchBarFocus.emit({ value: (target as HTMLInputElement).value });\n\n this.showClearButton = true;\n };\n\n /**\n * Emitted when option is highlighted within the menu\n */\n @Event() icOptionSelect: EventEmitter<IcOptionSelectEventDetail>;\n\n /**\n * Emitted when the state of the menu changes (i.e. open or close)\n */\n @Event() icMenuChange: EventEmitter<IcMenuChangeEventDetail>;\n\n /**\n * @internal - Emitted when blur is invoked from clear button\n */\n @Event() icClearBlur: EventEmitter<IcBlurEventDetail>;\n private handleClearBlur = ({ relatedTarget }: FocusEvent) => {\n this.icClearBlur.emit({ relatedTarget });\n\n this.clearButtonFocused = false;\n };\n\n /**\n * Emitted when the 'retry loading' button is clicked\n */\n @Event() icRetryLoad: EventEmitter<IcMultiValueEventDetail>;\n\n /**\n * Emitted when the search value has been submitted\n */\n @Event() icSubmitSearch: EventEmitter<IcValueEventDetail>;\n\n /**\n * @internal - Emitted when blur is invoked from search submit button\n */\n @Event() icSubmitSearchBlur: EventEmitter<IcBlurEventDetail>;\n private handleSubmitSearchBlur = ({ relatedTarget }: FocusEvent) => {\n this.icSubmitSearchBlur.emit({ relatedTarget });\n\n this.searchSubmitFocused = false;\n };\n\n /**\n * Emitted when blur is invoked from ic-search-bar\n */\n @Event() icSearchBarBlur: EventEmitter<IcSearchBarBlurEventDetail>;\n\n /**\n * Emitted when focus is invoked from ic-search-bar\n */\n @Event() icSearchBarFocus: 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 this.assistiveHintEl?.remove();\n }\n\n componentWillLoad(): void {\n this.setInputValue(this.value);\n\n removeDisabledFalse(this.disabled, this.el as HTMLElement);\n\n this.updateSearchButtonType();\n }\n\n componentDidLoad(): void {\n if (this.focusOnLoad) {\n this.el.setFocus();\n }\n\n if (this.hasOptionsOrFilterDisabled()) {\n this.renderAssistiveHintEl();\n if (this.disableAutoFiltering || this.showMenuWithNoInput()) {\n this.filteredOptions = this.options;\n }\n }\n\n onComponentRequiredPropUndefined(\n [{ prop: this.label, propName: \"label\" }],\n \"Search Bar\"\n );\n }\n\n componentWillRender(): void {\n if (this.prevNoOption && this.menu && !this.hasTimedOut) {\n this.menu.handleSetFirstOption();\n this.prevNoOption = false;\n }\n if (\n this.filteredOptions.find(\n (filteredOption) =>\n filteredOption[this.labelField] === this.emptyOptionListText ||\n filteredOption[this.labelField] === this.loadingErrorLabel ||\n filteredOption[this.labelField] === this.loadingLabel\n )\n ) {\n this.prevNoOption = true;\n }\n }\n\n @Listen(\"keydown\", {})\n handleKeyDown(event: KeyboardEvent): void {\n this.icKeydown.emit({ event });\n if (this.menu && this.open) {\n this.menu.handleKeyboardOpen(event);\n }\n }\n\n @Listen(\"keyup\", {})\n handleKeyUp(ev: KeyboardEvent): void {\n if (ev.key === \"Enter\") {\n if (this.preventSubmit || this.isSubmitDisabled()) {\n return;\n }\n\n this.handleSubmitSearch();\n this.setMenuChange(false);\n }\n\n if (ev.key === \"Escape\") {\n this.setMenuChange(false);\n }\n\n if (this.preventSubmit) {\n this.preventSubmit = false;\n }\n }\n\n /**\n * Sets focus on the native `input`.\n */\n @Method()\n async setFocus(): Promise<void> {\n this.retryViaKeyPress = false;\n this.retryButtonClick = false;\n this.inputEl?.focus();\n }\n\n private setInputValue = (newValue: string) => {\n if (this.inputEl) {\n const label = getLabelFromValue(\n newValue,\n this.options,\n this.valueField,\n this.labelField\n );\n if (label) this.inputEl.value = label;\n else if (this.inputEl.value !== newValue) {\n this.inputEl.value = newValue;\n }\n }\n };\n\n private handleMouseDown = (ev: Event) => {\n ev.preventDefault();\n };\n\n private handleSubmitSearchFocus = () => {\n this.searchSubmitFocused = true;\n };\n\n private handleSubmitSearch = () => {\n if (this.highlightedValue) this.value = this.highlightedValue;\n this.highlightedValue = undefined;\n this.icSubmitSearch.emit({ value: this.value });\n\n const form = this.el.closest<HTMLFormElement>(\"FORM\");\n\n if (this.searchSubmitButton && !!form && !this.preventSubmit) {\n handleHiddenFormButtonClick(form, this.searchSubmitButton);\n }\n };\n\n private debounceAriaLiveUpdate() {\n clearTimeout(this.debounceAriaLive);\n\n this.debounceAriaLive = window.setTimeout(() => {\n this.updateSearchResultAriaLive();\n }, 500);\n }\n\n private handleSubmitSearchKeyDown = (ev: KeyboardEvent) => {\n if (ev.key === \" \") {\n ev.preventDefault();\n this.handleSubmitSearch();\n }\n };\n\n private handleRetry = (ev: CustomEvent<IcMultiValueEventDetail>) => {\n this.retryViaKeyPress = ev.detail.keyPressed === \"Enter\";\n this.icRetryLoad.emit({ value: ev.detail.value });\n this.triggerLoading();\n this.retryButtonClick = true;\n };\n\n private triggerLoading = () => {\n const loadingOption: IcMenuOption[] = [\n {\n [this.labelField]: this.loadingLabel,\n [this.valueField]: \"\",\n loading: true,\n },\n ];\n if (this.filteredOptions !== loadingOption)\n this.filteredOptions = loadingOption;\n if (this.timeout) {\n this.timeoutTimer = window.setTimeout(() => {\n this.filteredOptions = [\n {\n [this.labelField]: this.loadingErrorLabel,\n [this.valueField]: \"\",\n timedOut: true,\n },\n ];\n }, this.timeout);\n }\n };\n\n private handleOptionSelect = (ev: CustomEvent) => {\n if (ev.detail.label === this.emptyOptionListText) {\n this.el.setFocus();\n return;\n }\n\n this.value = ev.detail.value;\n this.icOptionSelect.emit({ value: this.value });\n };\n\n private handleMenuOptionHighlight = (\n ev: CustomEvent<IcMenuOptionIdEventDetail>\n ) => {\n const { optionId } = ev.detail;\n if (optionId)\n this.highlightedValue = optionId.replace(`${this.menuId}-`, \"\");\n this.ariaActiveDescendant = optionId || \"\";\n };\n\n private handleMenuChange = (ev: CustomEvent<IcMenuChangeEventDetail>) => {\n this.setMenuChange(ev.detail.open);\n if (!ev.detail.open) {\n this.menuCloseFromMenuChangeEvent = true;\n }\n };\n\n private setMenuChange = (open: boolean) => {\n if (this.open !== open) {\n this.open = open;\n this.icMenuChange.emit({ open });\n }\n };\n\n private handleHostFocus = () => {\n if (\n this.options &&\n (this.value || this.showMenuWithNoInput()) &&\n !this.menuCloseFromMenuChangeEvent\n ) {\n this.setMenuChange(true);\n }\n this.truncateValue = false;\n this.showMenuWithNoInput() && this.debounceAriaLiveUpdate();\n\n this.icSearchBarFocus.emit();\n };\n\n private handleHostBlur = ({ relatedTarget }: FocusEvent) => {\n if (\n this.open &&\n this.options &&\n relatedTarget !== this.menu &&\n !this.retryViaKeyPress &&\n !this.retryButtonClick\n ) {\n this.setMenuChange(false);\n }\n\n if (this.retryButtonClick || this.retryViaKeyPress) {\n this.inputEl?.focus();\n }\n\n this.showClearButton = false;\n this.menuCloseFromMenuChangeEvent = false;\n this.truncateValue = true;\n this.icSearchBarBlur.emit({\n relatedTarget,\n value: this.value,\n });\n this.retryViaKeyPress = false;\n this.retryButtonClick = false;\n this.showMenuWithNoInput() && this.updateSearchResultAriaLive();\n };\n\n private handleFocusClearButton = () => {\n this.clearButtonFocused = true;\n };\n\n private renderAssistiveHintEl = () => {\n const input = this.el.shadowRoot?.querySelector(`#${this.inputId}`);\n\n if (\n input &&\n Object.keys(input).length > 0 &&\n this.hasOptionsOrFilterDisabled()\n ) {\n this.assistiveHintEl = document.createElement(\"span\");\n this.assistiveHintEl.innerText = this.assistiveHintText;\n this.assistiveHintEl.id = `${this.inputId}-assistive-hint`;\n this.assistiveHintEl.style.display = \"none\";\n input.after?.(this.assistiveHintEl);\n }\n };\n\n private updateSearchResultAriaLive = () => {\n const searchResultsStatusEl =\n this.el.shadowRoot?.querySelector<HTMLParagraphElement>(\n \".search-results-status\"\n );\n\n if (searchResultsStatusEl) {\n if (\n !this.open ||\n (this.value === \"\" && !this.showMenuWithNoInput()) ||\n this.value.length < this.charactersUntilSuggestion\n ) {\n searchResultsStatusEl.innerText = \"\";\n } else if (\n this.hasOptionsOrFilterDisabled() &&\n this.filteredOptions.length > 0 &&\n this.open &&\n !this.filteredOptions[0].loading\n ) {\n searchResultsStatusEl.innerText = this.hadNoOptions()\n ? this.emptyOptionListText\n : `${this.filteredOptions.length} result${\n this.filteredOptions.length > 1 ? \"s\" : \"\"\n } available`;\n }\n }\n };\n\n private hasOptionsOrFilterDisabled = () =>\n this.options.length > 0 || this.disableAutoFiltering;\n\n private hadNoOptions = () =>\n this.filteredOptions.length === 1 &&\n this.filteredOptions[0][this.labelField] === this.emptyOptionListText &&\n this.searchMode === \"navigation\";\n\n private isSubmitDisabled = () =>\n !this.value ||\n this.value.length < this.charactersUntilSuggestion ||\n this.disabled ||\n this.hadNoOptions() ||\n this.hasTimedOut ||\n this.loading;\n\n private showMenuWithNoInput = () => this.charactersUntilSuggestion === 0;\n private updateSearchButtonType = () => {\n this.searchButtonType =\n !!this.el.closest<HTMLFormElement>(\"FORM\") &&\n !this.preventFormSubmitOnSearch\n ? \"submit\"\n : \"button\";\n };\n\n render() {\n const {\n inputId,\n name,\n label,\n required,\n size,\n placeholder,\n helperText,\n disabled,\n value,\n readonly,\n spellcheck,\n fullWidth,\n options,\n open,\n hideLabel,\n menuId,\n ariaActiveDescendant,\n truncateValue,\n autofocus,\n autocapitalize,\n autocomplete,\n filteredOptions,\n theme,\n charactersUntilSuggestion,\n labelField,\n valueField,\n loadingLabel,\n loadingErrorLabel,\n searchMode,\n showClearButton,\n searchSubmitFocused,\n clearButtonFocused,\n searchButtonType,\n } = this;\n\n const disabledMode = readonly || disabled;\n\n const describedBy = getInputDescribedByText(\n this.el,\n inputId,\n helperText !== \"\",\n false\n ).trim();\n\n let describedById = undefined;\n\n if (describedBy !== \"\" && this.hasOptionsOrFilterDisabled()) {\n describedById = `${describedBy} ${inputId}-assistive-hint`;\n } else if (this.hasOptionsOrFilterDisabled()) {\n describedById = `${inputId}-assistive-hint`;\n } else if (describedBy !== \"\") {\n describedById = describedBy;\n }\n\n const hasSuggestedSearch =\n (!!value || this.showMenuWithNoInput()) &&\n this.hasOptionsOrFilterDisabled();\n const menuOpen = hasSuggestedSearch && open && filteredOptions.length > 0;\n const menuRendered = menuOpen && value.length >= charactersUntilSuggestion;\n\n const labelValue = getLabelFromValue(\n value,\n options,\n valueField,\n labelField\n );\n\n renderHiddenInput(this.el as HTMLElement, value, name, disabledMode);\n\n return (\n <Host\n class={{\n \"ic-search-bar-search\": true,\n \"ic-search-bar-full-width\": fullWidth,\n \"ic-search-bar-disabled\": disabled,\n \"ic-search-bar-small\": size === \"small\",\n [`ic-theme-${theme}`]: theme !== \"inherit\",\n }}\n onFocus={this.handleHostFocus}\n onBlur={this.handleHostBlur}\n >\n <ic-input-container readonly={readonly} disabled={disabledMode}>\n {!hideLabel && (\n <ic-input-label\n for={inputId}\n label={label}\n helperText={helperText}\n required={required}\n disabled={disabledMode && !readonly}\n readonly={readonly}\n >\n <slot name=\"helper-text\" slot=\"helper-text\"></slot>\n </ic-input-label>\n )}\n <ic-input-component-container\n ref={(el) => (this.anchorEl = el)}\n size={size}\n disabled={disabledMode}\n readonly={readonly}\n fullWidth={fullWidth}\n >\n <input\n id={inputId}\n name={name}\n ref={(el) => (this.inputEl = el)}\n value={options && !!labelValue ? labelValue : value}\n class={{\n \"no-left-pad\": readonly,\n readonly,\n \"truncate-value\": truncateValue,\n }}\n placeholder={placeholder}\n required={required}\n disabled={disabledMode}\n readonly={readonly}\n onInput={this.onInput}\n onBlur={this.onInputBlur}\n onFocus={this.onInputFocus}\n aria-label={hideLabel ? label : undefined}\n aria-activedescendant={ariaActiveDescendant}\n aria-expanded={\n options.length > 0 && menuRendered ? `${menuOpen}` : undefined\n }\n aria-owns={menuRendered ? menuId : undefined}\n aria-describedby={describedById}\n aria-controls={menuRendered ? menuId : undefined}\n aria-haspopup={options.length > 0 ? \"listbox\" : undefined}\n aria-autocomplete={hasSuggestedSearch ? \"list\" : undefined}\n role={options.length > 0 && menuRendered ? \"combobox\" : undefined}\n autocomplete={autocomplete}\n autocapitalize={autocapitalize}\n autoFocus={autofocus}\n spellcheck={spellcheck}\n inputmode=\"search\"\n ></input>\n <div\n class={{\n \"clear-button-container\": true,\n \"clear-button-visible\":\n !!value && !disabledMode && showClearButton,\n }}\n >\n <ic-button\n id=\"clear-button\"\n class={{\n \"clear-button\": true,\n \"clear-button-unfocused\": !clearButtonFocused,\n }}\n aria-label=\"Clear\"\n innerHTML={clearIcon}\n onClick={this.handleClear}\n onMouseDown={this.handleMouseDown}\n size={size}\n onFocus={this.handleFocusClearButton}\n onBlur={this.handleClearBlur}\n onKeyDown={this.handleClear}\n type={\"button\"}\n variant=\"icon\"\n theme={clearButtonFocused ? \"light\" : \"dark\"}\n ></ic-button>\n <div class=\"divider\"></div>\n </div>\n <div\n class={{\n \"search-submit-button-container\": true,\n \"search-submit-button-disabled\": this.isSubmitDisabled(),\n }}\n >\n <ic-button\n id=\"search-submit-button\"\n aria-label=\"Search\"\n ref={(el) => (this.searchSubmitButton = el)}\n class={{\n \"search-submit-button\": true,\n \"search-submit-button-small\": size === \"small\",\n \"search-submit-button-unfocused\": !searchSubmitFocused,\n \"search-submit-button-disabled\": this.isSubmitDisabled(),\n }}\n disabled={this.isSubmitDisabled()}\n innerHTML={searchIcon}\n size={size}\n onClick={this.handleSubmitSearch}\n onMouseDown={this.handleMouseDown}\n onBlur={this.handleSubmitSearchBlur}\n onFocus={this.handleSubmitSearchFocus}\n onKeyDown={this.handleSubmitSearchKeyDown}\n type={searchButtonType}\n variant=\"icon\"\n theme={searchSubmitFocused ? \"light\" : \"dark\"}\n ></ic-button>\n </div>\n </ic-input-component-container>\n <div\n class={{\n \"menu-container\": true,\n fullwidth: fullWidth,\n }}\n >\n {menuRendered && this.anchorEl && this.inputEl && (\n <ic-menu\n class={{\n \"no-results\":\n this.hadNoOptions() ||\n (filteredOptions.length === 1 &&\n (filteredOptions[0][labelField] === loadingLabel ||\n filteredOptions[0][labelField] === loadingErrorLabel)),\n }}\n activationType=\"manual\"\n anchorEl={this.anchorEl}\n autofocusOnSelected={false}\n searchMode={searchMode}\n inputEl={this.inputEl}\n inputLabel={label}\n ref={(el) => (this.menu = el)}\n fullWidth={fullWidth}\n menuId={menuId}\n open={true}\n options={filteredOptions}\n onMenuOptionSelect={this.handleOptionSelect}\n onMenuStateChange={this.handleMenuChange}\n onMenuOptionId={this.handleMenuOptionHighlight}\n onRetryButtonClicked={this.handleRetry}\n parentEl={this.el as HTMLElement}\n value={value}\n labelField={labelField}\n valueField={valueField}\n ></ic-menu>\n )}\n </div>\n </ic-input-container>\n <div\n aria-live=\"polite\"\n role=\"status\"\n class=\"search-results-status\"\n ></div>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}