@ukic/web-components 3.0.0-alpha.11 → 3.0.0-alpha.12

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 (94) hide show
  1. package/dist/cjs/core.cjs.js +1 -1
  2. package/dist/cjs/ic-back-to-top.cjs.entry.js +3 -1
  3. package/dist/cjs/ic-back-to-top.cjs.entry.js.map +1 -1
  4. package/dist/cjs/ic-breadcrumb-group.cjs.entry.js +22 -21
  5. package/dist/cjs/ic-breadcrumb-group.cjs.entry.js.map +1 -1
  6. package/dist/cjs/ic-radio-option.cjs.entry.js +1 -1
  7. package/dist/cjs/ic-radio-option.cjs.entry.js.map +1 -1
  8. package/dist/cjs/ic-select.cjs.entry.js +1 -1
  9. package/dist/cjs/ic-select.cjs.entry.js.map +1 -1
  10. package/dist/cjs/ic-tab-context.cjs.entry.js +1 -2
  11. package/dist/cjs/ic-tab-context.cjs.entry.js.map +1 -1
  12. package/dist/cjs/ic-tab-panel.cjs.entry.js +5 -6
  13. package/dist/cjs/ic-tab-panel.cjs.entry.js.map +1 -1
  14. package/dist/cjs/loader.cjs.js +1 -1
  15. package/dist/collection/components/ic-back-to-top/ic-back-to-top.css +49 -18
  16. package/dist/collection/components/ic-back-to-top/ic-back-to-top.js +26 -0
  17. package/dist/collection/components/ic-back-to-top/ic-back-to-top.js.map +1 -1
  18. package/dist/collection/components/ic-back-to-top/ic-back-to-top.stories.js +54 -0
  19. package/dist/collection/components/ic-back-to-top/ic-back-to-top.types.js.map +1 -1
  20. package/dist/collection/components/ic-back-to-top/test/basic/ic-back-to-top.spec.js +14 -0
  21. package/dist/collection/components/ic-back-to-top/test/basic/ic-back-to-top.spec.js.map +1 -1
  22. package/dist/collection/components/ic-breadcrumb-group/ic-breadcrumb-group.js +22 -21
  23. package/dist/collection/components/ic-breadcrumb-group/ic-breadcrumb-group.js.map +1 -1
  24. package/dist/collection/components/ic-breadcrumb-group/test/basic/ic-breadcrumb-group.spec.js +16 -1
  25. package/dist/collection/components/ic-breadcrumb-group/test/basic/ic-breadcrumb-group.spec.js.map +1 -1
  26. package/dist/collection/components/ic-radio-group/ic-radio-group.stories.js +31 -0
  27. package/dist/collection/components/ic-radio-option/ic-radio-option.css +20 -0
  28. package/dist/collection/components/ic-select/ic-select.css +1 -1
  29. package/dist/collection/components/ic-tab-context/ic-tab-context.js +1 -2
  30. package/dist/collection/components/ic-tab-context/ic-tab-context.js.map +1 -1
  31. package/dist/collection/components/ic-tab-panel/ic-tab-panel.css +5 -1
  32. package/dist/collection/components/ic-tab-panel/ic-tab-panel.js +25 -5
  33. package/dist/collection/components/ic-tab-panel/ic-tab-panel.js.map +1 -1
  34. package/dist/collection/components/ic-tab-panel/test/basic/ic-tab-panel.spec.js +7 -38
  35. package/dist/collection/components/ic-tab-panel/test/basic/ic-tab-panel.spec.js.map +1 -1
  36. package/dist/components/ic-back-to-top.js +4 -1
  37. package/dist/components/ic-back-to-top.js.map +1 -1
  38. package/dist/components/ic-breadcrumb-group.js +22 -21
  39. package/dist/components/ic-breadcrumb-group.js.map +1 -1
  40. package/dist/components/ic-radio-option.js +1 -1
  41. package/dist/components/ic-radio-option.js.map +1 -1
  42. package/dist/components/ic-select.js +1 -1
  43. package/dist/components/ic-select.js.map +1 -1
  44. package/dist/components/ic-tab-context.js +1 -2
  45. package/dist/components/ic-tab-context.js.map +1 -1
  46. package/dist/components/ic-tab-panel.js +6 -6
  47. package/dist/components/ic-tab-panel.js.map +1 -1
  48. package/dist/core/core.css +4 -4
  49. package/dist/core/core.esm.js +1 -1
  50. package/dist/core/core.esm.js.map +1 -1
  51. package/dist/core/p-116875ae.entry.js +2 -0
  52. package/dist/core/p-116875ae.entry.js.map +1 -0
  53. package/dist/core/{p-df957570.entry.js → p-31d4bfc3.entry.js} +2 -2
  54. package/dist/core/p-31d4bfc3.entry.js.map +1 -0
  55. package/dist/core/p-6b9db71a.entry.js +2 -0
  56. package/dist/core/p-6b9db71a.entry.js.map +1 -0
  57. package/dist/core/p-720428a3.entry.js +2 -0
  58. package/dist/core/p-720428a3.entry.js.map +1 -0
  59. package/dist/core/p-73a208c7.entry.js +2 -0
  60. package/dist/core/p-73a208c7.entry.js.map +1 -0
  61. package/dist/core/p-d7ccd00f.entry.js +2 -0
  62. package/dist/core/p-d7ccd00f.entry.js.map +1 -0
  63. package/dist/esm/core.js +1 -1
  64. package/dist/esm/ic-back-to-top.entry.js +3 -1
  65. package/dist/esm/ic-back-to-top.entry.js.map +1 -1
  66. package/dist/esm/ic-breadcrumb-group.entry.js +22 -21
  67. package/dist/esm/ic-breadcrumb-group.entry.js.map +1 -1
  68. package/dist/esm/ic-radio-option.entry.js +1 -1
  69. package/dist/esm/ic-radio-option.entry.js.map +1 -1
  70. package/dist/esm/ic-select.entry.js +1 -1
  71. package/dist/esm/ic-select.entry.js.map +1 -1
  72. package/dist/esm/ic-tab-context.entry.js +1 -2
  73. package/dist/esm/ic-tab-context.entry.js.map +1 -1
  74. package/dist/esm/ic-tab-panel.entry.js +5 -6
  75. package/dist/esm/ic-tab-panel.entry.js.map +1 -1
  76. package/dist/esm/loader.js +1 -1
  77. package/dist/types/components/ic-back-to-top/ic-back-to-top.d.ts +5 -1
  78. package/dist/types/components/ic-back-to-top/ic-back-to-top.types.d.ts +1 -0
  79. package/dist/types/components/ic-tab-panel/ic-tab-panel.d.ts +7 -1
  80. package/dist/types/components.d.ts +11 -2
  81. package/hydrate/index.js +35 -31
  82. package/package.json +2 -2
  83. package/vscode-data.json +15 -0
  84. package/dist/core/p-4572b2ba.entry.js +0 -2
  85. package/dist/core/p-4572b2ba.entry.js.map +0 -1
  86. package/dist/core/p-b260b967.entry.js +0 -2
  87. package/dist/core/p-b260b967.entry.js.map +0 -1
  88. package/dist/core/p-d0afa458.entry.js +0 -2
  89. package/dist/core/p-d0afa458.entry.js.map +0 -1
  90. package/dist/core/p-d8690838.entry.js +0 -2
  91. package/dist/core/p-d8690838.entry.js.map +0 -1
  92. package/dist/core/p-df957570.entry.js.map +0 -1
  93. package/dist/core/p-e6189634.entry.js +0 -2
  94. package/dist/core/p-e6189634.entry.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"names":["icSelectCss","inputIds","MUTABLE_ATTRIBUTES","IC_INHERITED_ARIA","Select","this","hasSetDefaultValue","inheritedAttributes","initialOptionsEmpty","inputId","menuId","searchableMenuItemSelected","ungroupedOptions","hostMutationObserver","hostMutationCallback","mutationList","forceComponentUpdate","forEach","attributeName","type","addedNodes","removedNodes","includes","el","getAttribute","checkSlotInChildMutations","forceUpdate","handleRetry","ev","detail","keyPressed","_a","searchableSelectElement","focus","blurredBecauseButtonPressed","retryButtonClick","icRetryLoad","emit","value","searchable","searchableSelectInputValue","hiddenInputValue","emitIcChange","multiple","Array","isArray","handleMultipleSelectChange","String","valueToEmit","icChange","emitIcInput","clearTimeout","debounceIcInput","window","setTimeout","icInput","currDebounce","deduplicateOptions","options","uniqueValues","dedupedOptions","dedupedChildren","option","children","child","console","warn","label","push","modifiedParent","Object","assign","setOptionsValuesFromLabels","length","map","setUngroupedOptions","event","setTextColor","nativeSelectElement","selectedIndex","className","setMenuChange","open","getLabelFromValue","uniqueOptions","getMultipleOptionsString","selectedValues","selectedLabels","join","getFilteredChildMenuOptions","getFilteredMenuOptions","includeDescriptionsInSearch","searchMatchPosition","pressedCharacters","newOption","getValueSortedByOptions","valueArray","valuesFromAllOptions","sort","a","b","indexOf","handleNativeSelectChange","icOptionSelect","handleCustomSelectChange","emptyOptionListText","currValue","inputValueToFilter","getValueFromLabel","icOptionDeselect","ariaActiveDescendant","optionId","slice","valueIndex","splice","handleSelectAllChange","selectAllOptions","select","allEnabledOptions","filter","disabled","allValues","newValue","unselectedValues","handleMenuChange","handleFocusIndicatorDisplay","handleMenuKeyPress","cancelBubble","handleCharacterKeyDown","key","focusIndicator","shadowRoot","querySelector","classList","add","remove","handleMouseDown","preventDefault","isExternalFiltering","disableAutoFiltering","handleClick","menu","filteredOptions","hasTimedOut","loading","noOptions","handleClickOpen","handleExpandIconMouseDown","handleClear","stopPropagation","timeoutTimer","clearInput","icClear","customSelectElement","characterKeyPressTimer","handleFilter","handleNativeSelectKeyDown","handleKeyDown","isArrowKey","handleKeyboardOpen","handleClearButtonFocus","clearButtonFocused","handleClearButtonBlur","retryButton","relatedTarget","isGrouped","newFilteredOptions","menuOptionsFiltered","includeGroupTitlesInSearch","noChildOptionsWhenFiltered","triggerLoading","loadingLabel","timeout","loadingErrorLabel","timedOut","find","handleSearchableSelectInput","target","debounceAriaLiveUpdate","updateSearchableSelectResultAriaLive","searchableSelectResultsStatusEl","innerText","updateMultiSelectedCountAriaLive","multiSelectSelectedCountEl","selectedCount","getOptionsWithoutGroupTitlesCount","getDefaultValue","setDefaultValue","initialValue","onFocus","icFocus","onBlur","tagName","isSearchableAndNoFocusedInternalElements","from","querySelectorAll","clearButton","icBlur","onTimeoutBlur","handleFormReset","debounce","watchDisabledHandler","removeDisabledFalse","loadingHandler","watchOptionsHandler","debounceChangedHandler","updateOnChangeDebounce","valueChangedHandler","openChangedHandler","icOpen","icClose","disconnectedCallback","removeFormResetListener","disconnect","componentWillLoad","inheritAttributes","addFormResetListener","componentDidLoad","onComponentRequiredPropUndefined","prop","propName","MutationObserver","observe","attributes","childList","componentDidRender","setFocus","debounceAria","render","size","fullWidth","helperText","hideLabel","name","placeholder","readonly","required","showClearButton","validationStatus","validationText","theme","renderHiddenInput","invalid","IcInformationStatus","Error","describedBy","getInputDescribedByText","hasValidationStatus","trim","showLeftIcon","optionsSelectedCount","h","Host","class","for","ref","anchorEl","slot","isMobileOrTablet","onChange","id","onKeyDown","form","selected","role","autocomplete","onInput","onClick","innerHTML","Clear","variant","onMouseDown","Expand","inputEl","inputLabel","selectOnEnter","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-xxs);\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) !important;\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: var(--ic-hc-focus-outline);\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:host(.ic-select-disabled) .value-text,\n.placeholder {\n color: var(--ic-select-content-placeholder-text);\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} from \"../../utils/helpers\";\nimport { IC_INHERITED_ARIA } from \"../../utils/constants\";\nimport {\n IcInformationStatus,\n IcInformationStatusOrEmpty,\n IcMenuOption,\n IcSearchMatchPositions,\n IcValueEventDetail,\n IcSizes,\n IcThemeMode,\n} from \"../../utils/types\";\nimport Expand from \"./assets/Expand.svg\";\nimport Clear from \"./assets/Clear.svg\";\nimport { IcOptionSelectEventDetail } from \"../ic-menu/ic-menu.types\";\n\nlet inputIds = 0;\nconst MUTABLE_ATTRIBUTES = [...IC_INHERITED_ARIA, \"tabindex\", \"title\"];\n\n/**\n * @slot icon - Content will be placed to the left of the select text input.\n */\n@Component({\n tag: \"ic-select\",\n styleUrl: \"ic-select.css\",\n shadow: {\n delegatesFocus: true,\n },\n})\nexport class Select {\n private anchorEl: HTMLElement;\n private blurredBecauseButtonPressed: boolean;\n private characterKeyPressTimer: number;\n private clearButton: HTMLIcButtonElement;\n private customSelectElement: HTMLButtonElement;\n private debounceAria: number;\n private hasSetDefaultValue = false;\n private hasTimedOut: boolean;\n private inheritedAttributes: { [k: string]: string } = {};\n private initialOptionsEmpty = false;\n private inputId = `ic-select-input-${inputIds++}`;\n private menu: HTMLIcMenuElement;\n private menuId = `${this.inputId}-menu`;\n private nativeSelectElement: HTMLSelectElement;\n private retryButtonClick: boolean;\n private searchableMenuItemSelected: boolean = false;\n private searchableSelectElement: HTMLInputElement;\n private timeoutTimer: number;\n private ungroupedOptions: IcMenuOption[] = [];\n private hostMutationObserver: MutationObserver = null;\n\n @Element() el!: HTMLIcSelectElement;\n\n @State() ariaActiveDescendant: string;\n @State() clearButtonFocused: boolean = false;\n @State() debounceIcInput: number;\n @State() hiddenInputValue: string;\n @State() noOptions: IcMenuOption[] = null;\n @State() open: boolean = false;\n @State() pressedCharacters: string = \"\";\n @State() searchableSelectInputValue: string = null;\n\n /**\n * If `true`, the disabled state will be set.\n */\n @Prop({ reflect: true }) disabled?: boolean = 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?: boolean = false;\n\n /**\n * The text displayed when there are no options in the option list.\n */\n @Prop() emptyOptionListText = \"No results found\";\n\n /**\n * The <form> element to associate the select with.\n */\n @Prop() form?: string;\n\n /**\n * If `true`, the select will fill the width of the container.\n */\n @Prop() fullWidth: boolean = false;\n\n /**\n * The helper text that will be displayed for additional field guidance.\n */\n @Prop() helperText?: string = \"\";\n\n /**\n * If `true`, the label will be hidden and the required label value will be applied as an aria-label.\n */\n @Prop() hideLabel?: boolean = false;\n\n /**\n * If `true`, descriptions of options will be included when filtering options in a searchable select. Only applies to built in filtering.\n */\n @Prop() includeDescriptionsInSearch?: boolean = false;\n\n /**\n * If `true`, group titles of grouped options will be included when filtering options in a searchable select. Only applies to built in filtering.\n */\n @Prop() includeGroupTitlesInSearch?: boolean = false;\n\n /**\n * The label for the select.\n */\n @Prop() label!: string;\n\n /**\n * The message displayed when external loading times out.\n */\n @Prop() loadingErrorLabel?: string = \"Loading Error\";\n\n /**\n * The message displayed whilst the options are being loaded externally.\n */\n @Prop() loadingLabel?: string = \"Loading...\";\n\n /**\n * If `true`, multiple options can be selected.\n */\n @Prop() multiple?: boolean = false;\n\n /**\n * The name of the control, which is submitted with the form data.\n */\n @Prop() name?: string = this.inputId;\n\n /**\n * The placeholder value to be displayed.\n */\n @Prop() placeholder?: string = \"Select an option\";\n\n /**\n * If `true`, the readonly state will be set.\n */\n @Prop() readonly?: boolean = false;\n\n /**\n * If `true`, the select will require a value.\n */\n @Prop() required?: boolean = false;\n\n /**\n * If `true`, a searchable variant of the select will be displayed which can be typed in to filter options. This functionality is only available on the single-select variant of the select component.\n */\n @Prop() searchable?: boolean = false;\n\n /**\n * Whether the search string of the searchable select should match the start of or anywhere in the options. Only applies to built in filtering.\n */\n @Prop() searchMatchPosition?: IcSearchMatchPositions = \"anywhere\";\n\n /**\n * If `true`, the icOptionSelect event will be fired on enter instead of ArrowUp and ArrowDown on the single select.\n */\n @Prop() selectOnEnter?: boolean = false;\n\n /**\n * If `true`, a button which clears the select input when clicked will be displayed. The button will always appear on the searchable select.\n */\n @Prop() showClearButton?: boolean = false;\n\n /**\n * The size of the select.\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?: string = \"\";\n\n /**\n * If `true`, the loading state will be triggered when fetching options asynchronously.\n */\n @Prop({ mutable: true }) loading?: boolean = false;\n\n @Watch(\"loading\")\n loadingHandler(newValue: boolean): void {\n newValue && this.triggerLoading();\n }\n\n /**\n * The possible selection options.\n */\n @Prop() options?: IcMenuOption[] = [];\n @State() filteredOptions: IcMenuOption[] = this.options;\n @State() uniqueOptions: IcMenuOption[] = this.options;\n\n @Watch(\"options\")\n watchOptionsHandler(): void {\n if (!this.hasTimedOut && this.options !== this.noOptions) {\n this.loading = false;\n clearTimeout(this.timeoutTimer);\n if (this.isExternalFiltering()) {\n // When searchable select\n if (this.options?.length > 0) {\n this.setOptionsValuesFromLabels();\n this.noOptions = null;\n this.uniqueOptions = this.deduplicateOptions(this.options);\n this.filteredOptions = this.uniqueOptions;\n } else {\n this.noOptions = [{ label: this.emptyOptionListText, value: \"\" }];\n this.uniqueOptions = this.noOptions;\n this.filteredOptions = this.noOptions;\n }\n this.updateSearchableSelectResultAriaLive();\n this.setDefaultValue();\n } else {\n this.setOptionsValuesFromLabels();\n this.uniqueOptions = this.deduplicateOptions(this.options);\n this.filteredOptions = this.uniqueOptions;\n if (this.initialOptionsEmpty) {\n this.setDefaultValue();\n this.initialOptionsEmpty = false;\n }\n }\n } else {\n if (!this.searchable) {\n this.options = this.noOptions;\n }\n }\n }\n\n /**\n * The amount of time, in milliseconds, to wait to trigger the `icInput` event after each keystroke.\n */\n @Prop() debounce?: number = 0;\n @State() currDebounce = this.debounce;\n\n @Watch(\"debounce\")\n debounceChangedHandler(newValue: number): void {\n this.updateOnChangeDebounce(newValue);\n }\n\n /**\n * The value of the select, reflected by the value of the currently selected option.\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[];\n @State() initialValue = this.value;\n @State() inputValueToFilter = this.value as string;\n @State() currValue = this.value;\n\n @Watch(\"value\")\n valueChangedHandler(): void {\n if (this.value !== this.currValue) {\n if (this.value && this.multiple) {\n this.currValue = this.getValueSortedByOptions(this.value as string[]);\n this.updateMultiSelectedCountAriaLive();\n } else {\n this.currValue = this.value;\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)) ||\n (this.currValue as string);\n }\n }\n\n @Watch(\"open\")\n openChangedHandler(): void {\n this.open ? this.icOpen.emit() : this.icClose.emit();\n }\n\n /**\n * Emitted when the select loses focus.\n */\n @Event() icBlur: EventEmitter<void>;\n\n /**\n * Emitted when the value changes.\n */\n @Event() icChange: EventEmitter<IcValueEventDetail>;\n\n /**\n * Emitted when the clear 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<IcValueEventDetail>;\n\n /**\n * Emitted when the select options menu is opened.\n */\n @Event() icOpen: EventEmitter<void>;\n\n /**\n * Emitted when an option is 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<IcValueEventDetail>;\n\n disconnectedCallback(): void {\n removeFormResetListener(this.el, this.handleFormReset);\n this.hostMutationObserver?.disconnect();\n }\n\n componentWillLoad(): void {\n this.inheritedAttributes = inheritAttributes(this.el, MUTABLE_ATTRIBUTES);\n\n removeDisabledFalse(this.disabled, this.el);\n\n this.setOptionsValuesFromLabels();\n\n addFormResetListener(this.el, this.handleFormReset);\n\n if (!this.options?.length) {\n this.initialOptionsEmpty = true;\n this.noOptions = [{ label: this.emptyOptionListText, value: \"\" }];\n this.uniqueOptions = this.noOptions;\n this.filteredOptions = this.noOptions;\n } else {\n this.setDefaultValue();\n this.uniqueOptions = this.deduplicateOptions(this.options);\n }\n }\n\n componentDidLoad(): void {\n onComponentRequiredPropUndefined(\n [{ prop: this.label, propName: \"label\" }],\n \"Select\"\n );\n\n if (this.loading) {\n this.triggerLoading();\n }\n\n this.hiddenInputValue = this.searchable && (this.currValue as string);\n\n this.hostMutationObserver = new MutationObserver(this.hostMutationCallback);\n this.hostMutationObserver.observe(this.el, {\n attributes: true,\n childList: true,\n });\n }\n\n componentDidRender(): void {\n if (this.nativeSelectElement && !this.disabled) {\n this.setTextColor();\n }\n }\n\n /**\n * Sets focus on the input box.\n */\n @Method()\n async setFocus(): Promise<void> {\n if (this.nativeSelectElement) {\n this.nativeSelectElement.focus();\n } else if (this.customSelectElement) {\n this.customSelectElement.focus();\n } else if (this.searchableSelectElement) {\n this.searchableSelectElement.focus();\n }\n }\n\n // triggered when attributes of host element change\n private hostMutationCallback = (mutationList: MutationRecord[]): void => {\n let forceComponentUpdate = false;\n mutationList.forEach(\n ({ attributeName, type, addedNodes, removedNodes }) => {\n if (MUTABLE_ATTRIBUTES.includes(attributeName)) {\n this.inheritedAttributes[attributeName] =\n this.el.getAttribute(attributeName);\n forceComponentUpdate = true;\n } else if (type === \"childList\") {\n forceComponentUpdate = checkSlotInChildMutations(\n addedNodes,\n removedNodes,\n \"icon\"\n );\n }\n }\n );\n if (forceComponentUpdate) {\n forceUpdate(this);\n }\n };\n\n private handleRetry = (ev: CustomEvent<IcValueEventDetail>) => {\n if (ev.detail.keyPressed) this.searchableSelectElement?.focus();\n this.blurredBecauseButtonPressed = true;\n this.retryButtonClick = true;\n this.hasSetDefaultValue = true;\n this.icRetryLoad.emit({\n value: this.searchable\n ? this.searchableSelectInputValue\n : this.hiddenInputValue,\n });\n };\n\n private updateOnChangeDebounce(newValue: number) {\n if (this.currDebounce !== newValue) {\n this.currDebounce = newValue;\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 this.handleMultipleSelectChange(String(value));\n } else {\n this.value = value;\n }\n\n const valueToEmit = this.multiple ? this.value : value;\n this.icChange.emit({ value: valueToEmit });\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 /**\n * Processes the provided array of IcMenuOptions, removing duplicates and reporting them with a console.warn\n * @param options array of IcMenuOptions\n * @returns a new options object, with all entries possessing a duplicate 'value' field removed\n */\n private deduplicateOptions = (options: IcMenuOption[]): IcMenuOption[] => {\n const uniqueValues: string[] = [];\n const dedupedOptions: IcMenuOption[] = [];\n let dedupedChildren: IcMenuOption[];\n\n options.forEach((option: IcMenuOption) => {\n if (option.children) {\n //If an option has children, we will loop through them\n dedupedChildren = [];\n option.children.forEach((child) => {\n if (uniqueValues.includes(child.value)) {\n console.warn(\n `ic-select with label ${this.label} was populated with duplicate option (value: ${child.value}) which has been removed.`\n );\n } else {\n uniqueValues.push(child.value);\n dedupedChildren.push(child);\n }\n });\n // construct a modified option, inserting the deduplicated children alongside the original information\n const modifiedParent: IcMenuOption = {\n ...option,\n children: dedupedChildren,\n };\n dedupedOptions.push(modifiedParent);\n } else {\n // If an option does not have children, assess to see if it's value has been included already\n if (uniqueValues.includes(option.value)) {\n console.warn(\n `ic-select with label ${this.label} was populated with duplicate option (value: ${option.value}) which has been removed.`\n );\n } else {\n uniqueValues.push(option.value);\n dedupedOptions.push(option);\n }\n }\n });\n return dedupedOptions;\n };\n\n /**\n * Loop through options array and for all options with no value, infer it from the label\n */\n private setOptionsValuesFromLabels = (): void => {\n if (this.options?.length > 0 && this.options.map) {\n this.options.map((option) => {\n if (!option.value) {\n option.value = option.label;\n }\n });\n }\n };\n\n private setUngroupedOptions = (event: CustomEvent): void => {\n this.ungroupedOptions = event.detail.options;\n };\n\n private setTextColor = (): void => {\n if (this.nativeSelectElement.selectedIndex === 0) {\n this.nativeSelectElement.className = \"placeholder\";\n } else {\n this.nativeSelectElement.className = \"select-option-selected\";\n }\n };\n\n private setMenuChange = (open: boolean) => {\n if (this.open !== open) {\n this.open = open;\n }\n };\n\n private getLabelFromValue = (value: string): string | undefined => {\n return getLabelFromValue(value, this.uniqueOptions);\n };\n\n private getMultipleOptionsString = (selectedValues: string[]) => {\n const selectedLabels = selectedValues?.map((value) =>\n this.getLabelFromValue(value)\n );\n return selectedLabels?.join(\", \");\n };\n\n private getFilteredChildMenuOptions = (option: IcMenuOption) => {\n let children = option.children;\n\n if (this.searchable) {\n children = getFilteredMenuOptions(\n option.children,\n this.includeDescriptionsInSearch,\n this.searchableSelectInputValue,\n this.searchMatchPosition\n );\n } else {\n children = getFilteredMenuOptions(\n option.children,\n false,\n this.pressedCharacters,\n \"start\"\n );\n }\n\n const newOption = { ...option };\n newOption.children = children;\n return newOption;\n };\n\n // (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 = (): void => {\n this.icOptionSelect.emit({ value: this.nativeSelectElement.value });\n this.emitIcChange(this.nativeSelectElement.value);\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 = (event: CustomEvent): void => {\n const value = event.detail.value;\n\n if (event.detail.label === this.emptyOptionListText) {\n if (this.searchable) {\n this.searchableSelectElement.focus();\n }\n return;\n }\n\n if (this.searchable) {\n this.value = value;\n this.searchableMenuItemSelected = true;\n\n // After editing the input, if selecting the same option as before, set the input value to label again\n if (this.value === this.currValue) {\n this.searchableSelectInputValue = this.getLabelFromValue(\n this.value as string\n );\n }\n\n this.inputValueToFilter = null;\n this.hiddenInputValue = this.getValueFromLabel(\n this.searchableSelectInputValue\n );\n }\n\n if (this.multiple && this.value?.includes(value)) {\n this.icOptionDeselect.emit({ value });\n } else {\n this.icOptionSelect.emit({ value });\n }\n\n this.ariaActiveDescendant = event.detail.optionId;\n this.emitIcChange(value);\n };\n\n // Update selected options - adds / removes them, in order of option list\n // Create new array if value prop is undefined\n private handleMultipleSelectChange = (value: string) => {\n if (this.value) {\n let valueArray = (this.value as string[]).slice();\n\n if (this.value.includes(value)) {\n const valueIndex = valueArray.indexOf(value);\n valueArray.splice(valueIndex, 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 const valueArray = [];\n valueArray.push(value);\n this.value = valueArray;\n }\n };\n\n private handleSelectAllChange = (event: CustomEvent) => {\n const selectAllOptions = event.detail.select;\n const allEnabledOptions = this.ungroupedOptions.filter(\n (option) => !option.disabled\n );\n const allValues = allEnabledOptions.map((option) => option.value);\n let newValue: string[];\n\n if (selectAllOptions) {\n let unselectedValues;\n\n // Only emit icOptionSelect for all values that are newly selected\n if (this.value) {\n unselectedValues = allValues.filter(\n (value) => this.value && !(this.value as string[]).includes(value)\n );\n } else {\n unselectedValues = allValues;\n }\n\n unselectedValues.forEach((value) => this.icOptionSelect.emit({ value }));\n newValue = allValues;\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 newValue = null;\n }\n\n this.emitIcChange(newValue);\n };\n\n private handleMenuChange = (event: CustomEvent): void => {\n this.open = event.detail.open;\n this.pressedCharacters = \"\";\n\n this.searchable && this.handleFocusIndicatorDisplay();\n };\n\n // clears the debounce delay when navigating the menu with arrow keys etc\n // to prevent delay in change event, which should only occur when typing in input\n private handleMenuKeyPress = (ev: CustomEvent): void => {\n ev.cancelBubble = true;\n if (!this.multiple) {\n this.handleCharacterKeyDown(ev.detail.key);\n }\n };\n\n private handleFocusIndicatorDisplay = () => {\n const focusIndicator = this.el.shadowRoot.querySelector(\".focus-indicator\");\n\n if (this.open) {\n focusIndicator.classList.add(\"focus-indicator-enabled\");\n } else {\n focusIndicator.classList.remove(\"focus-indicator-enabled\");\n }\n };\n\n private handleMouseDown = (event: Event): void => {\n if (!this.open) {\n event.preventDefault();\n }\n };\n\n private isExternalFiltering = (): boolean =>\n this.searchable && this.disableAutoFiltering;\n\n private handleClick = (event: MouseEvent): void => {\n if (!this.open) {\n if (this.isExternalFiltering()) {\n this.menu.options = this.filteredOptions;\n } else if (\n !this.hasTimedOut &&\n !this.loading &&\n !this.noOptions?.length &&\n (!this.searchable || this.searchableMenuItemSelected)\n ) {\n this.noOptions = null;\n this.menu.options = this.uniqueOptions;\n }\n }\n\n if (event.detail !== 0) {\n this.menu.handleClickOpen();\n }\n };\n\n private handleExpandIconMouseDown = (event: MouseEvent) => {\n if (!this.disabled) {\n event.preventDefault();\n this.searchableSelectElement.focus();\n this.handleClick(event);\n }\n };\n\n private handleClear = (event: Event): void => {\n event.stopPropagation();\n this.hasTimedOut = false;\n clearTimeout(this.timeoutTimer);\n this.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 (\n this.open &&\n key === \" \" &&\n this.pressedCharacters.length === 0 &&\n !this.hasTimedOut &&\n !this.loading\n ) {\n this.setMenuChange(false);\n }\n\n if (key.length === 1 && !this.searchable) {\n window.clearTimeout(this.characterKeyPressTimer);\n this.characterKeyPressTimer = window.setTimeout(\n () => (this.pressedCharacters = \"\"),\n 1000\n );\n\n 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 } else {\n this.pressedCharacters = \"\";\n }\n };\n\n private handleNativeSelectKeyDown = (event: KeyboardEvent) => {\n if ((event.key !== \"Escape\" && event.key !== \"Tab\") || this.open) {\n event.cancelBubble = true;\n }\n this.handleCharacterKeyDown(event.key);\n };\n\n private handleKeyDown = (event: KeyboardEvent): void => {\n if ((event.key !== \"Escape\" && event.key !== \"Tab\") || this.open) {\n event.cancelBubble = true;\n }\n const isArrowKey = event.key === \"ArrowDown\" || event.key === \"ArrowUp\";\n\n if (!this.open) {\n if (this.isExternalFiltering() && (event.key === \"Enter\" || isArrowKey)) {\n this.menu.options = this.filteredOptions;\n } else {\n if (!this.hasTimedOut) {\n this.noOptions = null;\n this.menu.options = this.uniqueOptions;\n }\n }\n }\n\n if (this.open && event.key === \"Enter\") {\n this.setMenuChange(false);\n } else {\n if (!(isArrowKey && this.noOptions !== null)) {\n if (!(event.key === \" \" && this.pressedCharacters.length > 0)) {\n // Keyboard events get passed onto ic-menu\n this.menu.handleKeyboardOpen(event);\n }\n if (!this.multiple) {\n this.handleCharacterKeyDown(event.key);\n }\n }\n }\n };\n\n private handleClearButtonFocus = (): void => {\n this.clearButtonFocused = true;\n };\n\n private handleClearButtonBlur = (ev: FocusEvent): void => {\n const retryButton = this.menu?.querySelector(\"#retry-button\");\n if (\n !(\n this.searchableSelectElement &&\n ev.relatedTarget === this.searchableSelectElement\n ) &&\n !(retryButton && ev.relatedTarget === retryButton)\n ) {\n this.setMenuChange(false);\n this.handleFocusIndicatorDisplay();\n }\n this.clearButtonFocused = false;\n };\n\n private handleFilter = (): void => {\n const options = this.deduplicateOptions(\n this.searchable ? [...this.uniqueOptions] : this.ungroupedOptions\n );\n\n let isGrouped = false;\n let newFilteredOptions: IcMenuOption[] = [];\n\n options.map((option) => {\n if (option.children) isGrouped = true;\n });\n\n let menuOptionsFiltered: IcMenuOption[];\n\n if (this.searchable) {\n menuOptionsFiltered = getFilteredMenuOptions(\n options,\n this.includeDescriptionsInSearch,\n this.inputValueToFilter,\n this.searchMatchPosition\n );\n this.searchableMenuItemSelected = false;\n } else {\n menuOptionsFiltered = getFilteredMenuOptions(\n options,\n false,\n this.pressedCharacters,\n \"start\"\n );\n }\n\n if (\n !isGrouped &&\n menuOptionsFiltered[0]?.label !== this.emptyOptionListText\n ) {\n newFilteredOptions = menuOptionsFiltered;\n } else if (isGrouped) {\n options.map((option) => {\n if (this.includeGroupTitlesInSearch) {\n if (menuOptionsFiltered.indexOf(option) !== -1) {\n newFilteredOptions.push(option);\n } else {\n newFilteredOptions.push(this.getFilteredChildMenuOptions(option));\n }\n } else {\n newFilteredOptions.push(this.getFilteredChildMenuOptions(option));\n }\n });\n }\n\n let noChildOptionsWhenFiltered = false;\n\n if (isGrouped) {\n noChildOptionsWhenFiltered = true;\n newFilteredOptions.map((option) => {\n if (option.children.length > 0) {\n noChildOptionsWhenFiltered = false;\n }\n });\n }\n\n if (newFilteredOptions.length > 0 && !noChildOptionsWhenFiltered) {\n this.noOptions = null;\n this.filteredOptions = newFilteredOptions;\n } else {\n this.noOptions = [{ label: this.emptyOptionListText, value: \"\" }];\n this.filteredOptions = this.noOptions;\n }\n };\n\n /**\n * Put the select component into loading state.\n * Replace options with the loading message. If timeout is enabled, set the timeout and once passed, replace options with the loading error message\n */\n private triggerLoading = () => {\n this.hasTimedOut = false;\n this.noOptions = [{ label: this.loadingLabel, value: \"\", loading: true }];\n if (this.filteredOptions !== this.noOptions && this.searchable) {\n this.filteredOptions = this.noOptions;\n } else if (this.uniqueOptions !== this.noOptions && !this.searchable) {\n this.uniqueOptions = this.noOptions;\n }\n if (this.timeout) {\n this.timeoutTimer = window.setTimeout(() => {\n this.loading = false;\n this.hasTimedOut = true;\n this.noOptions = [\n { label: this.loadingErrorLabel, value: \"\", timedOut: true },\n ];\n this.filteredOptions = this.noOptions;\n if (!this.searchable) this.uniqueOptions = this.noOptions;\n }, this.timeout);\n }\n };\n\n private getValueFromLabel = (label: string): string | undefined => {\n return this.uniqueOptions.find((option) => option.label === label)?.value;\n };\n\n private handleSearchableSelectInput = (event: Event): void => {\n this.searchableSelectInputValue = (event.target as HTMLInputElement).value;\n this.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 this.debounceAriaLiveUpdate();\n }\n };\n\n private updateSearchableSelectResultAriaLive = (): void => {\n const searchableSelectResultsStatusEl = this.el.shadowRoot.querySelector(\n \".searchable-select-results-status\"\n ) as HTMLDivElement;\n\n if (searchableSelectResultsStatusEl) {\n if (this.noOptions !== null) {\n searchableSelectResultsStatusEl.innerText = this.emptyOptionListText;\n } else {\n searchableSelectResultsStatusEl.innerText = \"\";\n }\n }\n };\n\n private debounceAriaLiveUpdate() {\n clearTimeout(this.debounceAria);\n\n window.setTimeout(() => {\n this.updateSearchableSelectResultAriaLive();\n }, 800);\n }\n\n private updateMultiSelectedCountAriaLive = (): void => {\n const multiSelectSelectedCountEl = this.el.shadowRoot.querySelector(\n \".multi-select-selected-count\"\n ) as HTMLDivElement;\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): string | null =>\n this.getLabelFromValue(value) || value || null;\n\n private setDefaultValue = (): void => {\n if (!this.hasSetDefaultValue && this.currValue) {\n this.searchableSelectInputValue =\n this.searchable && this.getDefaultValue(this.currValue as string);\n\n this.initialValue = this.currValue;\n this.hasSetDefaultValue = true;\n }\n };\n\n private onFocus = (): void => {\n this.icFocus.emit();\n };\n\n private onBlur = ({ relatedTarget }: FocusEvent): void => {\n const target = relatedTarget as HTMLElement;\n if (\n target !== null &&\n ((target.tagName === \"UL\" && target.className.includes(\"menu\")) ||\n (target.tagName === \"LI\" && target.className.includes(\"option\")))\n ) {\n return;\n }\n\n const retryButton = this.menu?.querySelector(\"#retry-button\");\n const isSearchableAndNoFocusedInternalElements =\n this.searchable &&\n !!this.menu &&\n target !== this.menu &&\n !Array.from(this.menu.querySelectorAll(\"[role='option']\")).includes(\n target\n ) &&\n !(this.clearButton && target === this.clearButton) &&\n !(retryButton && target === retryButton);\n\n if (isSearchableAndNoFocusedInternalElements) {\n if (!this.retryButtonClick) {\n this.setMenuChange(false);\n // 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 = (): void => {\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 = (): void => {\n this.noOptions = null;\n\n if (this.searchable) {\n this.searchableSelectElement.value = null;\n this.searchableSelectInputValue = null;\n this.filteredOptions = this.uniqueOptions;\n }\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 } = 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 true,\n this.el,\n name,\n this.searchable ? this.hiddenInputValue : (currValue as string),\n disabled\n );\n\n const invalid = `${validationStatus === IcInformationStatus.Error}`;\n\n const describedBy = getInputDescribedByText(\n this.inputId,\n helperText !== \"\",\n hasValidationStatus(this.validationStatus, this.disabled)\n ).trim();\n\n let showLeftIcon = !!this.el.querySelector(`[slot=\"icon\"]`);\n if (showLeftIcon && (disabled || (readonly && !this.value))) {\n showLeftIcon = false;\n }\n\n const optionsSelectedCount = `${\n currValue?.length\n } of ${getOptionsWithoutGroupTitlesCount(this.options)} selected`;\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={this.inputId}\n label={label}\n helperText={helperText}\n required={required}\n disabled={disabled}\n readonly={readonly}\n ></ic-input-label>\n )}\n <ic-input-component-container\n ref={(el: HTMLElement) => (this.anchorEl = el)}\n class={{ \"menu-open\": this.open }}\n size={size}\n fullWidth={fullWidth}\n disabled={disabled}\n readonly={readonly}\n validationStatus={validationStatus}\n >\n {showLeftIcon && (\n <span\n slot=\"left-icon\"\n class={{\n [\"readonly\"]: readonly,\n [\"has-value\"]: !!this.value,\n }}\n >\n <slot name=\"icon\" />\n </span>\n )}\n {readonly ? (\n <ic-typography>\n <p>\n {multiple\n ? this.getMultipleOptionsString(currValue as string[])\n : this.getLabelFromValue(currValue as string)}\n </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={this.inputId}\n aria-label={label}\n aria-describedby={describedBy}\n aria-invalid={invalid}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n onKeyDown={this.handleNativeSelectKeyDown}\n form={this.form}\n {...this.inheritedAttributes}\n >\n <option value=\"\" selected disabled={!showClearButton}>\n {placeholder}\n </option>\n {options.map((option) => {\n if (option.children) {\n return (\n <optgroup label={option.label}>\n {option.children.map((option) => (\n <option\n value={option.value}\n disabled={option.disabled}\n selected={option.value === currValue}\n >\n {option.label}\n </option>\n ))}\n </optgroup>\n );\n } else {\n return (\n <option\n value={option.value}\n disabled={option.disabled}\n selected={option.value === currValue}\n >\n {option.label}\n </option>\n );\n }\n })}\n </select>\n ) : searchable ? (\n <div class=\"searchable-select-container\">\n <input\n class={{\n \"select-input\": true,\n \"with-clear-button\": !!this.searchableSelectInputValue,\n }}\n role=\"combobox\"\n autocomplete=\"off\"\n aria-label={label}\n aria-describedby={describedBy}\n aria-activedescendant={this.ariaActiveDescendant}\n aria-autocomplete=\"list\"\n aria-expanded={`${this.open}`}\n aria-invalid={invalid}\n aria-required={`${required}`}\n aria-controls={menuId}\n ref={(el) => (this.searchableSelectElement = el)}\n id={this.inputId}\n value={this.searchableSelectInputValue}\n placeholder={placeholder}\n disabled={disabled}\n onInput={this.handleSearchableSelectInput}\n onClick={this.handleClick}\n onKeyDown={this.handleKeyDown}\n onFocus={this.onFocus}\n onBlur={this.onBlur}\n form={this.form}\n ></input>\n {this.searchableSelectInputValue &&\n (showClearButton || searchable) && (\n <div class=\"clear-button-container\">\n <ic-button\n id=\"clear-button\"\n ref={(el: HTMLIcButtonElement) =>\n (this.clearButton = el)\n }\n aria-label={\n this.searchableSelectInputValue && currValue === null\n ? \"Clear input\"\n : \"Clear selection\"\n }\n class=\"clear-button\"\n innerHTML={Clear}\n onClick={this.handleClear}\n onFocus={this.handleClearButtonFocus}\n onBlur={this.handleClearButtonBlur}\n size={size}\n variant=\"icon\"\n theme={this.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\": this.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={this.inputId}\n aria-label={`${label}, ${\n (multiple && currValue\n ? `${optionsSelectedCount}, ${this.getMultipleOptionsString(\n currValue as string[]\n )}`\n : this.getLabelFromValue(currValue as string)) ||\n placeholder\n }${required ? \", required\" : \"\"}`}\n aria-describedby={describedBy}\n aria-invalid={invalid}\n aria-haspopup=\"listbox\"\n aria-expanded={this.open ? \"true\" : \"false\"}\n aria-owns={menuId}\n aria-controls={menuId}\n disabled={disabled}\n onBlur={this.onBlur}\n onFocus={this.onFocus}\n onClick={this.handleClick}\n onMouseDown={this.handleMouseDown}\n onKeyDown={this.handleKeyDown}\n >\n <ic-typography\n variant=\"body\"\n class={{\n \"value-text\": true,\n \"with-clear-button\": currValue && showClearButton,\n placeholder:\n !this.value || (multiple && this.value.length < 1),\n }}\n >\n {(multiple\n ? this.getMultipleOptionsString(currValue as string[])\n : this.getLabelFromValue(currValue as string)) ||\n placeholder}\n </ic-typography>\n <div class=\"select-input-end\">\n {currValue && showClearButton && (\n <div class=\"divider\"></div>\n )}\n <span\n class={{\n \"expand-icon\": true,\n \"expand-icon-open\": this.open,\n }}\n innerHTML={Expand}\n aria-hidden=\"true\"\n />\n </div>\n </button>\n {currValue && showClearButton && (\n <ic-button\n id=\"clear-button\"\n aria-label=\"Clear selection\"\n class=\"clear-button\"\n innerHTML={Clear}\n onClick={this.handleClear}\n onFocus={this.handleClearButtonFocus}\n onBlur={this.handleClearButtonBlur}\n size={size}\n variant=\"icon\"\n theme={this.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 this.loading ||\n this.hasTimedOut ||\n (this.noOptions !== null &&\n this.noOptions[0] &&\n this.noOptions[0].label === this.emptyOptionListText),\n }}\n ref={(el: HTMLIcMenuElement) => (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={this.open}\n options={searchable ? this.filteredOptions : this.uniqueOptions}\n value={multiple ? (currValue as string[]) : (currValue as string)}\n fullWidth={fullWidth}\n selectOnEnter={this.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 this.searchable || multiple || this.selectOnEnter\n ? \"manual\"\n : \"automatic\"\n }\n closeOnSelect={!multiple}\n ></ic-menu>\n )}\n {this.multiple && (\n <div\n aria-live=\"polite\"\n role=\"status\"\n class=\"multi-select-selected-count\"\n ></div>\n )}\n {hasValidationStatus(this.validationStatus, this.disabled) && (\n <ic-input-validation\n class={{ \"menu-open\": this.open }}\n ariaLiveMode=\"polite\"\n status={validationStatus}\n message={validationText}\n for={this.inputId}\n ></ic-input-validation>\n )}\n </ic-input-container>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{r as s,h as i,H as t,g as h}from"./p-6b5e91e2.js";import{D as e,e as a,f as r}from"./p-cda4aca9.js";const l=":host{display:block}:host ol{display:flex;list-style-type:none;align-items:center;flex-wrap:wrap;padding:0;margin:0}:host(.ic-breadcrumb-group-back) ol ::slotted(ic-breadcrumb){display:none}:host(.ic-breadcrumb-group-back) ol ::slotted(ic-breadcrumb.show){display:flex}:host(.ic-breadcrumb-group-collapsed) ol ::slotted(ic-breadcrumb.hide){display:none;opacity:0;visibility:hidden}:host(.ic-breadcrumb-group-collapsed) ol ::slotted(ic-breadcrumb.visuallyhidden){display:block;opacity:0;transition:all var(--ic-easing-transition-slow)}:host(.ic-breadcrumb-group-collapsed) ol ::slotted(ic-breadcrumb.fade){opacity:1}";const c=class{constructor(i){s(this,i);this.ADD_CLASS_DELAY=50;this.IC_BREADCRUMB="ic-breadcrumb";this.resizeObserver=null;this.SHOW_BACK_ICON="show-back-icon";this.setBreadcrumbTheme=()=>{const s=Array.from(this.el.querySelectorAll(this.IC_BREADCRUMB));s.forEach((s=>{s.theme=this.theme}))};this.setBreadcrumbMonochrome=()=>{const s=Array.from(this.el.querySelectorAll(this.IC_BREADCRUMB));s.forEach((s=>{s.monochrome=this.monochrome}))};this.setBackBreadcrumb=()=>{if(this.backBreadcrumbOnly){this.setLastParentCollapsedBackBreadcrumb()}else{this.revertLastParentCollapsedBreadcrumb()}};this.setBackBreadcrumbAttr=()=>{if(this.lastParentBreadcrumb){this.lastParentBreadcrumb.classList.add("show");this.lastParentBreadcrumb.setAttribute(this.SHOW_BACK_ICON,"true")}};this.getLastParentBreadcrumb=()=>{const s=Array.from(this.el.querySelectorAll(this.IC_BREADCRUMB));if(s.length===1){return null}this.breadcrumbs=s;this.breadcrumb=this.breadcrumbs[this.breadcrumbs.length-2];return this.breadcrumb};this.lastParentBreadcrumb=this.getLastParentBreadcrumb();this.setDefaultBreadcrumbs=()=>{const s=Array.from(this.el.querySelectorAll(this.IC_BREADCRUMB));s.forEach((s=>{s.setAttribute(this.SHOW_BACK_ICON,"false")}))};this.setCollapsed=()=>{const s=Array.from(this.el.querySelectorAll(this.IC_BREADCRUMB));const i=s[0];if(this.collapsedBreadcrumbs){this.collapsedBreadcrumbs.forEach((s=>{s.classList.remove("visuallyhidden");s.classList.remove("fade")}))}if(this.collapsed){this.renderCollapsedBreadcrumb();this.collapsedBreadcrumbs=s.splice(1,s.length-2).filter((s=>!s.classList.contains("collapsed-breadcrumb-wrapper")));if(!this.backBreadcrumbOnly){this.collapsedBreadcrumbs.forEach((s=>s.classList.add("hide")))}if(i){i.insertAdjacentElement("afterend",this.collapsedBreadcrumbWrapper)}}else{this.collapsedBreadcrumbWrapper.remove()}};this.clickHandler=()=>{this.handleHiddenCollapsedBreadcrumbs()};this.renderCollapsedBreadcrumb=()=>{this.collapsedBreadcrumbWrapper=document.createElement("ic-breadcrumb");this.collapsedBreadcrumbWrapper.classList.add("collapsed-breadcrumb-wrapper");this.collapsedBreadcrumbEl=document.createElement("button");const s=document.createElement("span");s.id="collapsed-button-label";s.innerText="Collapsed breadcrumbs";s.className="hide";this.collapsedBreadcrumbEl.setAttribute("aria-labelledby","collapsed-button-label");const i=document.createElement("span");i.id="collapsed-button-described";i.innerText="Select to view collapsed breadcrumbs";i.className="hide";this.collapsedBreadcrumbEl.setAttribute("aria-describedby","collapsed-button-described");this.collapsedBreadcrumbEl.id="collapsed-ellipsis";this.collapsedBreadcrumbEl.innerText="...";this.collapsedBreadcrumbEl.classList.add("collapsed-breadcrumb");this.collapsedBreadcrumbEl.addEventListener("click",this.clickHandler);this.collapsedBreadcrumbWrapper.append(i);this.collapsedBreadcrumbWrapper.append(s);this.collapsedBreadcrumbWrapper.append(this.collapsedBreadcrumbEl);return this.collapsedBreadcrumbWrapper};this.handleHiddenCollapsedBreadcrumbs=()=>{this.collapsedBreadcrumbWrapper.remove();this.collapsedBreadcrumbs.forEach((s=>{s.classList.add("visuallyhidden");s.classList.remove("hide");setTimeout((()=>{s.classList.add("fade")}),this.ADD_CLASS_DELAY);this.removeVisuallyHiddenClass(s)}));this.expandedBreadcrumbs=true;this.collapsedBreadcrumbs[0].setFocus()};this.transitionendHandler=s=>{if(s.propertyName==="opacity"){s.target.classList.remove("visuallyhidden")}};this.removeVisuallyHiddenClass=s=>{s.addEventListener("transitionend",this.transitionendHandler)};this.setLastParentCollapsedBackBreadcrumb=()=>{this.lastParentBreadcrumb=this.getLastParentBreadcrumb();this.setBackBreadcrumbAttr();if(this.lastParentBreadcrumb){this.lastParentBreadcrumb.classList.remove("hide");this.lastParentBreadcrumb.classList.add("show")}};this.revertLastParentCollapsedBreadcrumb=()=>{this.lastParentBreadcrumb.setAttribute(this.SHOW_BACK_ICON,"false");if(this.collapsed){this.lastParentBreadcrumb.classList.add("hide")}};this.resizeObserverCallback=s=>{if(s!==this.deviceSize){this.deviceSize=s;if(this.deviceSize<=e.S){this.el.setAttribute("back-breadcrumb-only","true");if(this.collapsed){this.setLastParentCollapsedBackBreadcrumb()}else{this.setBackBreadcrumb()}}else{this.el.setAttribute("back-breadcrumb-only","false");if(this.collapsed&&this.breadcrumbs&&this.breadcrumbs.length>2){this.revertLastParentCollapsedBreadcrumb();if(this.expandedBreadcrumbs){this.setDefaultBreadcrumbs()}else{this.setCollapsed()}}else{this.setDefaultBreadcrumbs()}}}};this.runResizeObserver=()=>{this.resizeObserver=new ResizeObserver((()=>{const s=a();this.resizeObserverCallback(s)}));this.resizeObserver.observe(this.el)};this.deviceSize=e.XL;this.expandedBreadcrumbs=false;this.backBreadcrumbOnly=false;this.collapsed=false;this.monochrome=false;this.theme="inherit"}watchBackBreadcrumbHandler(){this.setBackBreadcrumb()}watchCollapsedHandler(){this.setCollapsed()}watchMonochromeHandler(){this.setBreadcrumbMonochrome()}watchThemeHandler(){this.setBreadcrumbTheme()}componentWillLoad(){const s=Array.from(this.el.querySelectorAll(this.IC_BREADCRUMB));this.setBreadcrumbTheme();this.setBreadcrumbMonochrome();if(this.backBreadcrumbOnly){this.setBackBreadcrumb()}else{r(this.runResizeObserver)}if(this.collapsed&&s.length>2){if(a()===e.S){this.setLastParentCollapsedBackBreadcrumb()}else{this.setCollapsed()}}}disconnectedCallback(){this.breadcrumb&&this.breadcrumb.removeEventListener("transitionend",this.transitionendHandler);this.collapsedBreadcrumbEl&&this.collapsedBreadcrumbEl.removeEventListener("click",this.clickHandler)}render(){return i(t,{class:{"ic-breadcrumb-group-back":this.backBreadcrumbOnly,"ic-breadcrumb-group-collapsed":this.collapsed,[`ic-theme-${this.theme}`]:this.theme!=="inherit"}},i("nav",{"aria-label":"breadcrumbs"},i("ol",null,i("slot",null))))}get el(){return h(this)}static get watchers(){return{backBreadcrumbOnly:["watchBackBreadcrumbHandler"],collapsed:["watchCollapsedHandler"],monochrome:["watchMonochromeHandler"],theme:["watchThemeHandler"]}}};c.style=l;export{c as ic_breadcrumb_group};
2
- //# sourceMappingURL=p-b260b967.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["icBreadcrumbGroupCss","BreadcrumbGroup","this","ADD_CLASS_DELAY","IC_BREADCRUMB","resizeObserver","SHOW_BACK_ICON","setBreadcrumbTheme","allBreadcrumbs","Array","from","el","querySelectorAll","forEach","breadcrumb","theme","setBreadcrumbMonochrome","monochrome","setBackBreadcrumb","backBreadcrumbOnly","setLastParentCollapsedBackBreadcrumb","revertLastParentCollapsedBreadcrumb","setBackBreadcrumbAttr","lastParentBreadcrumb","classList","add","setAttribute","getLastParentBreadcrumb","length","breadcrumbs","setDefaultBreadcrumbs","setCollapsed","firstBreadcrumb","collapsedBreadcrumbs","remove","collapsed","renderCollapsedBreadcrumb","splice","filter","contains","insertAdjacentElement","collapsedBreadcrumbWrapper","clickHandler","handleHiddenCollapsedBreadcrumbs","document","createElement","collapsedBreadcrumbEl","ariaLabel","id","innerText","className","ariaDescribed","addEventListener","append","setTimeout","removeVisuallyHiddenClass","expandedBreadcrumbs","setFocus","transitionendHandler","event","propertyName","target","resizeObserverCallback","currSize","deviceSize","DEVICE_SIZES","S","runResizeObserver","ResizeObserver","getCurrentDeviceSize","observe","XL","watchBackBreadcrumbHandler","watchCollapsedHandler","watchMonochromeHandler","watchThemeHandler","componentWillLoad","checkResizeObserver","disconnectedCallback","removeEventListener","render","h","Host","class"],"sources":["src/components/ic-breadcrumb-group/ic-breadcrumb-group.css?tag=ic-breadcrumb-group&encapsulation=shadow","src/components/ic-breadcrumb-group/ic-breadcrumb-group.tsx"],"sourcesContent":[":host {\n display: block;\n}\n\n:host ol {\n display: flex;\n list-style-type: none;\n align-items: center;\n flex-wrap: wrap;\n padding: 0;\n margin: 0;\n}\n\n:host(.ic-breadcrumb-group-back) ol ::slotted(ic-breadcrumb) {\n display: none;\n}\n\n:host(.ic-breadcrumb-group-back) ol ::slotted(ic-breadcrumb.show) {\n display: flex;\n}\n\n:host(.ic-breadcrumb-group-collapsed) ol ::slotted(ic-breadcrumb.hide) {\n display: none;\n opacity: 0;\n visibility: hidden;\n}\n\n:host(.ic-breadcrumb-group-collapsed)\n ol\n ::slotted(ic-breadcrumb.visuallyhidden) {\n display: block;\n opacity: 0;\n transition: all var(--ic-easing-transition-slow);\n}\n\n:host(.ic-breadcrumb-group-collapsed) ol ::slotted(ic-breadcrumb.fade) {\n opacity: 1;\n}\n","import { Component, Host, h, Element, Prop, State, Watch } from \"@stencil/core\";\nimport {\n checkResizeObserver,\n DEVICE_SIZES,\n getCurrentDeviceSize,\n} from \"../../utils/helpers\";\nimport { IcThemeMode } from \"../../utils/types\";\n\n@Component({\n tag: \"ic-breadcrumb-group\",\n styleUrl: \"ic-breadcrumb-group.css\",\n shadow: true,\n})\n\n// Added ResizeObserver to find out width of breadcrumbs and parents. Use side navigation long title for ref.\nexport class BreadcrumbGroup {\n private ADD_CLASS_DELAY = 50;\n private breadcrumb: HTMLIcBreadcrumbElement;\n private breadcrumbs: HTMLIcBreadcrumbElement[];\n private collapsedBreadcrumbEl: HTMLButtonElement;\n private collapsedBreadcrumbs: HTMLIcBreadcrumbElement[];\n private collapsedBreadcrumbWrapper: HTMLIcBreadcrumbElement;\n private IC_BREADCRUMB: string = \"ic-breadcrumb\";\n private resizeObserver: ResizeObserver = null;\n private SHOW_BACK_ICON: string = \"show-back-icon\";\n\n @Element() el: HTMLIcBreadcrumbGroupElement;\n\n @State() deviceSize: number = DEVICE_SIZES.XL;\n @State() expandedBreadcrumbs: boolean = false;\n\n /**\n * If `true`, display only a single breadcrumb for the parent page with a back icon.\n */\n @Prop() backBreadcrumbOnly: boolean = false;\n @Watch(\"backBreadcrumbOnly\")\n watchBackBreadcrumbHandler(): void {\n this.setBackBreadcrumb();\n }\n\n /**\n * If `true`, all breadcrumbs between the first and last breadcrumb will be collapsed.\n */\n @Prop() collapsed: boolean = false;\n @Watch(\"collapsed\")\n watchCollapsedHandler(): void {\n this.setCollapsed();\n }\n\n /**\n * If `true`, the breadcrumb group will display as black in the light theme, and white in the dark theme.\n */\n @Prop() monochrome?: boolean = false;\n @Watch(\"monochrome\")\n watchMonochromeHandler(): void {\n this.setBreadcrumbMonochrome();\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.setBreadcrumbTheme();\n }\n\n componentWillLoad(): void {\n const allBreadcrumbs = Array.from(\n this.el.querySelectorAll(this.IC_BREADCRUMB)\n );\n\n this.setBreadcrumbTheme();\n this.setBreadcrumbMonochrome();\n\n if (this.backBreadcrumbOnly) {\n this.setBackBreadcrumb();\n } else {\n checkResizeObserver(this.runResizeObserver);\n }\n\n if (this.collapsed && allBreadcrumbs.length > 2) {\n if (getCurrentDeviceSize() === DEVICE_SIZES.S) {\n this.setLastParentCollapsedBackBreadcrumb();\n } else {\n this.setCollapsed();\n }\n }\n }\n\n disconnectedCallback(): void {\n this.breadcrumb &&\n this.breadcrumb.removeEventListener(\n \"transitionend\",\n this.transitionendHandler\n );\n\n this.collapsedBreadcrumbEl &&\n this.collapsedBreadcrumbEl.removeEventListener(\n \"click\",\n this.clickHandler\n );\n }\n\n private setBreadcrumbTheme = () => {\n const allBreadcrumbs = Array.from(\n this.el.querySelectorAll(this.IC_BREADCRUMB)\n );\n\n allBreadcrumbs.forEach((breadcrumb: HTMLIcBreadcrumbElement) => {\n breadcrumb.theme = this.theme;\n });\n };\n\n private setBreadcrumbMonochrome = () => {\n const allBreadcrumbs = Array.from(\n this.el.querySelectorAll(this.IC_BREADCRUMB)\n );\n\n allBreadcrumbs.forEach((breadcrumb: HTMLIcBreadcrumbElement) => {\n breadcrumb.monochrome = this.monochrome;\n });\n };\n\n private setBackBreadcrumb = () => {\n if (this.backBreadcrumbOnly) {\n this.setLastParentCollapsedBackBreadcrumb();\n } else {\n this.revertLastParentCollapsedBreadcrumb();\n }\n };\n\n private setBackBreadcrumbAttr = () => {\n if (this.lastParentBreadcrumb) {\n this.lastParentBreadcrumb.classList.add(\"show\");\n this.lastParentBreadcrumb.setAttribute(this.SHOW_BACK_ICON, \"true\");\n }\n };\n\n private getLastParentBreadcrumb = (): HTMLIcBreadcrumbElement | null => {\n const allBreadcrumbs: HTMLIcBreadcrumbElement[] = Array.from(\n this.el.querySelectorAll(this.IC_BREADCRUMB)\n );\n\n if (allBreadcrumbs.length === 1) {\n return null;\n }\n\n this.breadcrumbs = allBreadcrumbs;\n this.breadcrumb = this.breadcrumbs[this.breadcrumbs.length - 2];\n\n return this.breadcrumb;\n };\n\n private lastParentBreadcrumb = this.getLastParentBreadcrumb();\n\n private setDefaultBreadcrumbs = () => {\n const allBreadcrumbs = Array.from(\n this.el.querySelectorAll(this.IC_BREADCRUMB)\n );\n allBreadcrumbs.forEach((breadcrumb) => {\n breadcrumb.setAttribute(this.SHOW_BACK_ICON, \"false\");\n });\n };\n\n private setCollapsed = () => {\n const allBreadcrumbs: HTMLIcBreadcrumbElement[] = Array.from(\n this.el.querySelectorAll(this.IC_BREADCRUMB)\n );\n const firstBreadcrumb = allBreadcrumbs[0];\n if (this.collapsedBreadcrumbs) {\n this.collapsedBreadcrumbs.forEach((breadcrumb) => {\n breadcrumb.classList.remove(\"visuallyhidden\");\n breadcrumb.classList.remove(\"fade\");\n });\n }\n\n if (this.collapsed) {\n this.renderCollapsedBreadcrumb();\n\n this.collapsedBreadcrumbs = allBreadcrumbs\n .splice(1, allBreadcrumbs.length - 2)\n .filter(\n (breadcrumb) =>\n !breadcrumb.classList.contains(\"collapsed-breadcrumb-wrapper\")\n );\n if (!this.backBreadcrumbOnly) {\n this.collapsedBreadcrumbs.forEach((breadcrumb) =>\n breadcrumb.classList.add(\"hide\")\n );\n }\n\n if (firstBreadcrumb) {\n firstBreadcrumb.insertAdjacentElement(\n \"afterend\",\n this.collapsedBreadcrumbWrapper\n );\n }\n } else {\n this.collapsedBreadcrumbWrapper.remove();\n }\n };\n\n private clickHandler = () => {\n this.handleHiddenCollapsedBreadcrumbs();\n };\n\n private renderCollapsedBreadcrumb = () => {\n this.collapsedBreadcrumbWrapper = document.createElement(\"ic-breadcrumb\");\n this.collapsedBreadcrumbWrapper.classList.add(\n \"collapsed-breadcrumb-wrapper\"\n );\n this.collapsedBreadcrumbEl = document.createElement(\"button\");\n\n const ariaLabel = document.createElement(\"span\");\n ariaLabel.id = \"collapsed-button-label\";\n ariaLabel.innerText = \"Collapsed breadcrumbs\";\n ariaLabel.className = \"hide\";\n this.collapsedBreadcrumbEl.setAttribute(\n \"aria-labelledby\",\n \"collapsed-button-label\"\n );\n\n const ariaDescribed = document.createElement(\"span\");\n ariaDescribed.id = \"collapsed-button-described\";\n ariaDescribed.innerText = \"Select to view collapsed breadcrumbs\";\n ariaDescribed.className = \"hide\";\n this.collapsedBreadcrumbEl.setAttribute(\n \"aria-describedby\",\n \"collapsed-button-described\"\n );\n\n this.collapsedBreadcrumbEl.id = \"collapsed-ellipsis\";\n this.collapsedBreadcrumbEl.innerText = \"...\";\n this.collapsedBreadcrumbEl.classList.add(\"collapsed-breadcrumb\");\n this.collapsedBreadcrumbEl.addEventListener(\"click\", this.clickHandler);\n\n this.collapsedBreadcrumbWrapper.append(ariaDescribed);\n this.collapsedBreadcrumbWrapper.append(ariaLabel);\n this.collapsedBreadcrumbWrapper.append(this.collapsedBreadcrumbEl);\n\n return this.collapsedBreadcrumbWrapper;\n };\n\n private handleHiddenCollapsedBreadcrumbs = () => {\n this.collapsedBreadcrumbWrapper.remove();\n this.collapsedBreadcrumbs.forEach((breadcrumb) => {\n breadcrumb.classList.add(\"visuallyhidden\");\n breadcrumb.classList.remove(\"hide\");\n setTimeout(() => {\n breadcrumb.classList.add(\"fade\");\n }, this.ADD_CLASS_DELAY);\n\n this.removeVisuallyHiddenClass(breadcrumb);\n });\n this.expandedBreadcrumbs = true;\n // Set focus to first unhidden breadcrumb\n this.collapsedBreadcrumbs[0].setFocus();\n };\n\n private transitionendHandler = (event: TransitionEvent) => {\n if (event.propertyName === \"opacity\") {\n (event.target as HTMLElement).classList.remove(\"visuallyhidden\");\n }\n };\n\n private removeVisuallyHiddenClass = (breadcrumb: HTMLIcBreadcrumbElement) => {\n breadcrumb.addEventListener(\"transitionend\", this.transitionendHandler);\n };\n\n private setLastParentCollapsedBackBreadcrumb = () => {\n this.lastParentBreadcrumb = this.getLastParentBreadcrumb();\n this.setBackBreadcrumbAttr();\n if (this.lastParentBreadcrumb) {\n this.lastParentBreadcrumb.classList.remove(\"hide\");\n this.lastParentBreadcrumb.classList.add(\"show\");\n }\n };\n\n private revertLastParentCollapsedBreadcrumb = () => {\n this.lastParentBreadcrumb.setAttribute(this.SHOW_BACK_ICON, \"false\");\n if (this.collapsed) {\n this.lastParentBreadcrumb.classList.add(\"hide\");\n }\n };\n\n private resizeObserverCallback = (currSize: number) => {\n if (currSize !== this.deviceSize) {\n this.deviceSize = currSize;\n\n if (this.deviceSize <= DEVICE_SIZES.S) {\n this.el.setAttribute(\"back-breadcrumb-only\", \"true\");\n if (this.collapsed) {\n this.setLastParentCollapsedBackBreadcrumb();\n } else {\n this.setBackBreadcrumb();\n }\n } else {\n this.el.setAttribute(\"back-breadcrumb-only\", \"false\");\n if (this.collapsed && this.breadcrumbs && this.breadcrumbs.length > 2) {\n this.revertLastParentCollapsedBreadcrumb();\n if (this.expandedBreadcrumbs) {\n this.setDefaultBreadcrumbs();\n } else {\n this.setCollapsed();\n }\n } else {\n this.setDefaultBreadcrumbs();\n }\n }\n }\n };\n\n private runResizeObserver = () => {\n this.resizeObserver = new ResizeObserver(() => {\n const currSize = getCurrentDeviceSize();\n this.resizeObserverCallback(currSize);\n });\n\n this.resizeObserver.observe(this.el);\n };\n\n render() {\n return (\n <Host\n class={{\n \"ic-breadcrumb-group-back\": this.backBreadcrumbOnly,\n \"ic-breadcrumb-group-collapsed\": this.collapsed,\n [`ic-theme-${this.theme}`]: this.theme !== \"inherit\",\n }}\n >\n <nav aria-label=\"breadcrumbs\">\n <ol>\n <slot />\n </ol>\n </nav>\n </Host>\n );\n }\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{r as e,c as t,h as i,H as o,g as n}from"./p-6b5e91e2.js";import{d as a}from"./p-cda4aca9.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}:host:not[hidden]{display:block}:host{color:var(--ic-color-text-primary)}';const r=class{constructor(i){e(this,i);this.tabPanelCreated=t(this,"tabPanelCreated",7);this.tabPanelRemoved=t(this,"tabPanelRemoved",7);this.monochrome=false;this.panelId=undefined;this.selectedTab=undefined;this.tabPosition=undefined;this.theme="inherit"}connectedCallback(){this.tabPanelCreated.emit(this.el)}render(){const{panelId:e,selectedTab:t,theme:n}=this;return i(o,{class:{[`ic-theme-${n}`]:n!=="inherit"},role:"tabpanel",hidden:a(e)&&a(t)?!(e===t):true},i("div",null,i("slot",null)))}get el(){return n(this)}};r.style=s;export{r as ic_tab_panel};
2
- //# sourceMappingURL=p-d0afa458.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["icTabPanelCss","TabPanel","connectedCallback","this","tabPanelCreated","emit","el","render","panelId","selectedTab","theme","h","Host","class","role","hidden","isPropDefined"],"sources":["src/components/ic-tab-panel/ic-tab-panel.css?tag=ic-tab-panel&encapsulation=shadow","src/components/ic-tab-panel/ic-tab-panel.tsx"],"sourcesContent":["@import \"../../global/normalize.css\";\n\n:host:not[hidden] {\n display: block;\n}\n\n:host {\n color: var(--ic-color-text-primary);\n}\n","import {\n Component,\n Element,\n Event,\n EventEmitter,\n Host,\n Prop,\n h,\n} from \"@stencil/core\";\nimport { IcThemeMode } from \"../../utils/types\";\nimport { isPropDefined } from \"../../utils/helpers\";\n\n@Component({\n tag: \"ic-tab-panel\",\n styleUrl: \"ic-tab-panel.css\",\n shadow: true,\n})\nexport class TabPanel {\n @Element() el: HTMLIcTabPanelElement;\n\n /** @internal Determines whether black variant of the tabs should be displayed. */\n @Prop() monochrome?: boolean = false;\n\n /**\n * @internal The shared ID that links the panel and tab.\n */\n @Prop({ reflect: true }) panelId?: string;\n\n /**\n * @internal The shared ID of the currently selected tab.\n */\n @Prop() selectedTab?: string;\n\n /**\n * @internal The position of the tab panel inside the tabs array in context.\n */\n @Prop({ reflect: true }) tabPosition?: number;\n\n /** @internal Determines whether the light or dark variant of the tabs should be displayed. */\n @Prop() theme?: IcThemeMode = \"inherit\";\n\n /**\n * @internal Emitted when a tab panel is dynamically created.\n */\n @Event() tabPanelCreated: EventEmitter<HTMLIcTabPanelElement>;\n\n /**\n * @internal Emitted when a tab panel is unmounted.\n */\n @Event() tabPanelRemoved: EventEmitter<void>;\n\n connectedCallback(): void {\n this.tabPanelCreated.emit(this.el);\n }\n\n render() {\n const { panelId, selectedTab, theme } = this;\n return (\n <Host\n class={{\n [`ic-theme-${theme}`]: theme !== \"inherit\",\n }}\n role=\"tabpanel\"\n hidden={\n isPropDefined(panelId) && isPropDefined(selectedTab)\n ? !(panelId === selectedTab)\n : true\n }\n >\n <div>\n <slot></slot>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"oGAAA,MAAMA,EAAgB,66E,MCiBTC,EAAQ,M,2IAIY,M,wFAkBD,S,CAY9B,iBAAAC,GACEC,KAAKC,gBAAgBC,KAAKF,KAAKG,G,CAGjC,MAAAC,GACE,MAAMC,QAAEA,EAAOC,YAAEA,EAAWC,MAAEA,GAAUP,KACxC,OACEQ,EAACC,EAAI,CACHC,MAAO,CACL,CAAC,YAAYH,KAAUA,IAAU,WAEnCI,KAAK,WACLC,OACEC,EAAcR,IAAYQ,EAAcP,KAClCD,IAAYC,GACd,MAGNE,EAAA,WACEA,EAAA,c"}
@@ -1,2 +0,0 @@
1
- import{r as e,c as i,h as t,H as a,g as o}from"./p-6b5e91e2.js";import{r,k as n,i as c,j as d,b as s,s as l,d as h}from"./p-cda4aca9.js";const p='/*! 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}ic-radio-option{display:flex;flex-direction:column;width:-moz-fit-content;width:fit-content}.additional-field-wrapper [slot="additional-field"]{margin-top:calc(var(--ic-space-sm) / 2);margin-left:var(--ic-space-xl)}ic-radio-option.ic-radio-option-disabled,ic-radio-option.ic-radio-option-disabled .radio-label{--ic-typography-color:var(--ic-radio-button-text-option-disabled)}.container input:focus+span.checkmark,.container:hover input:focus+span.checkmark,.container:active input:focus+span.checkmark,:host(:focus) .container input:checked+span.checkmark{box-shadow:var(--ic-border-focus)}.container{display:grid;grid-template-columns:min-content auto;position:relative;cursor:pointer;align-items:center;margin:var(--ic-space-xxs) 0 var(--ic-space-xxs) var(--ic-space-xxs)}.container.disabled,.container.disabled input:disabled{cursor:default}.container input{-webkit-appearance:none;-moz-appearance:none;appearance:none;display:inline-block;position:absolute;cursor:pointer;height:var(--ic-space-lg);width:var(--ic-space-lg);border-radius:50%;border:none}.checkmark{display:block;position:relative;top:0;left:0;height:var(--ic-space-lg);width:var(--ic-space-lg);background-color:var(--ic-radio-button-background-default);border:var(--ic-space-1px) solid var(--ic-radio-button-border-default);border-radius:50%;transition:var(--ic-easing-transition-fast);box-sizing:border-box}.container input:checked~.checkmark::after{display:inline-block}.container:hover input~.checkmark{box-shadow:0 0 0 0.25rem var(--ic-radio-button-active-hover);border:var(--ic-border-width) solid var(--ic-radio-button-default-hover)}.container:hover input:checked~.checkmark{box-shadow:0 0 0 0.25rem var(--ic-radio-button-active-hover);border:0.125rem solid var(--ic-radio-button-default-hover)}.container:hover:not(.disabled) input:checked~.checkmark::after{background-color:var(--ic-radio-button-default-hover)}.container:active input~.checkmark{box-shadow:0 0 0 0.25rem var(--ic-radio-button-active-pressed);border:var(--ic-border-width) solid var(--ic-radio-button-default-pressed)}.container:active input:checked~.checkmark{border:0.125rem solid var(--ic-radio-button-default-pressed);box-shadow:0 0 0 0.25rem var(--ic-radio-button-active-pressed)}.container:active input:checked~.checkmark::after{background-color:var(--ic-radio-button-default-pressed)}.container input:checked~.checkmark{border:0.125rem solid var(--ic-radio-button-default-active)}.container input:checked:disabled~.checkmark{border:0.125rem solid var(--ic-radio-button-border-disabled)}.container input:disabled~.checkmark{border:var(--ic-border-width) dashed var(--ic-radio-button-border-disabled)}.container input:disabled~.checkmark::after{background:var(--ic-radio-button-disabled)}.container:hover input:disabled~.checkmark{box-shadow:none;border:0.125rem solid none}.container:active input:disabled~.checkmark::after{background-color:var(--ic-radio-button-disabled)}.container .checkmark::after{content:"";position:absolute;display:none;top:calc(50% - var(--ic-space-xs));left:calc(50% - var(--ic-space-xs));width:var(--ic-space-md);height:var(--ic-space-md);border-radius:50%;background:var(--ic-radio-button-default-active)}.radio-label{margin-left:var(--ic-space-md);--ic-typography-color:var(--ic-radio-button-text-option)}.additional-field-wrapper{margin-left:var(--ic-space-xs)}.branch-corner{color:var(--ic-radio-button-required-bar);height:var(--ic-space-md);width:var(--ic-space-xl);border-radius:0 0 0 0.188rem;border-bottom:0.125rem solid var(--ic-radio-button-required-bar);border-left:0.125rem solid var(--ic-radio-button-required-bar);margin-left:calc(-1 * var(--ic-space-1px))}.dynamic-container{display:flex;position:relative;margin:var(--ic-space-xxxs) 0 var(--ic-space-xxs) var(--ic-space-md);gap:var(--ic-space-xs)}.dynamic-container.hidden{display:none}.dynamic-text{color:var(--ic-radio-button-required-text);--ic-typography-color:var(--ic-radio-button-required-text);margin-top:calc(var(--ic-space-sm) / 2);margin-bottom:var(--ic-space-xs);border-radius:2%}@media (max-width: 576px){ic-text-field{--input-width:100%}}@media (forced-colors: active){.container input:checked~.checkmark,.container:active input:checked~.checkmark{border-color:Highlight}.container input:checked~.checkmark::after,.container:active input:checked~.checkmark::after{background-color:Highlight}.container input:disabled~.checkmark,.container input:checked:disabled~.checkmark{border-color:GrayText}.container input:disabled~.checkmark::after,.container:active input:disabled~.checkmark::after{background-color:GrayText}}';const b="additional-field";const u=class{constructor(t){e(this,t);this.icCheck=i(this,"icCheck",7);this.icSelectedChange=i(this,"icSelectedChange",7);this.defaultRadioValue="";this.hasAdditionalField=false;this.skipFocus=false;this.handleClick=e=>{var i;const t=e.target.matches(".dynamic-container:not(ic-radio-option, .checkmark), .dynamic-container *:not(ic-radio-option, .checkmark)");if(!this.disabled&&(!t||e.target===this.radioElement)){e.stopPropagation();if(this.skipFocus===false){this.radioElement.focus()}this.skipFocus=false;if(this.hasAdditionalField){this.value=((i=this.getAdditionalField())===null||i===void 0?void 0:i.value)||this.defaultRadioValue}this.icCheck.emit({value:this.value})}};this.handleKeyDown=e=>{const i=["IC-DATE-INPUT","IC-DATE-PICKER"];if(this.getAdditionalField()==document.activeElement&&i.includes(this.getAdditionalField().nodeName)){e.stopPropagation()}};this.handleFormReset=()=>{this.skipFocus=true;this.selected=this.initiallySelected};this.additionalFieldDisplay="static";this.disabled=false;this.dynamicText="This selection requires additional answers";this.form=undefined;this.groupLabel=undefined;this.label=undefined;this.name=undefined;this.theme="inherit";this.value=undefined;this.selected=false;this.initiallySelected=this.selected}watchDisabledHandler(){r(this.disabled,this.el)}watchSelectedHandler(){this.icSelectedChange.emit()}handleCheck(e){if(this.additionalFieldDisplay==="static"&&Array.from(this.el.querySelectorAll("ic-radio-option")).includes(e.target))this.icCheck.emit({value:this.value})}disconnectedCallback(){n(this.el,this.handleFormReset)}componentWillLoad(){if(c(this.el,b)){this.hasAdditionalField=true;this.getAdditionalField()}this.defaultRadioValue=this.value;d(this.el,this.handleFormReset);r(this.disabled,this.el)}componentDidLoad(){s([{prop:this.value,propName:"value"}],"Radio Option")}componentWillRender(){const e=l(this.el,b);if(e&&!this.hasAdditionalField){this.hasAdditionalField=true;this.getAdditionalField()}else if(!e&&this.hasAdditionalField){this.hasAdditionalField=false}}componentDidRender(){if(this.additionalFieldDisplay==="static"){const e=this.getAdditionalField();if(!this.selected||this.disabled){e===null||e===void 0?void 0:e.setAttribute("disabled","")}else{e===null||e===void 0?void 0:e.removeAttribute("disabled")}}}additionalFieldValueHandler(e){if(this.selected){this.value=e.detail.value||this.defaultRadioValue;this.icCheck.emit({value:this.value})}e.stopImmediatePropagation()}async setFocus(){var e;(e=this.radioElement)===null||e===void 0?void 0:e.focus()}async setTabIndex(e){this.radioElement.tabIndex=e}getAdditionalField(){const e=this.el.querySelector('ic-text-field[slot="additional-field"]');if(e)e.hiddenInput=false;return e}render(){const{additionalFieldDisplay:e,disabled:i,dynamicText:o,form:r,groupLabel:n,handleClick:c,handleKeyDown:d,hasAdditionalField:s,label:l,name:p,selected:u,value:m,theme:v}=this;const f=`ic-radio-option-${h(l)||m}-${n}`;return t(a,{onClick:c,onKeyDown:d,class:{["ic-radio-option-disabled"]:i,[`ic-theme-${v}`]:v!=="inherit"}},t("div",{class:{container:true,disabled:i}},t("div",null,t("input",{tabindex:u?"0":"-1",type:"radio",name:p,id:f,value:m,disabled:i?true:null,checked:u,ref:e=>this.radioElement=e,form:r}),t("span",{class:"checkmark"})),t("ic-typography",{class:"radio-label",variant:"body"},t("label",{htmlFor:f},l))),s&&t("div",{class:{"dynamic-container":true,hidden:e==="dynamic"&&!u}},e==="dynamic"&&t("div",{class:"branch-corner"}),t("div",null,e==="dynamic"&&t("ic-typography",{variant:"caption"},t("p",{class:"dynamic-text"},o)),t("div",{class:{"additional-field-wrapper":e==="static"}},t("slot",{name:b})))))}get el(){return o(this)}static get watchers(){return{disabled:["watchDisabledHandler"],selected:["watchSelectedHandler"]}}};u.style=p;export{u as ic_radio_option};
2
- //# sourceMappingURL=p-d8690838.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["icRadioOptionCss","ADDITIONAL_FIELD","RadioOption","this","defaultRadioValue","hasAdditionalField","skipFocus","handleClick","event","clickedAdditionalField","target","matches","disabled","radioElement","stopPropagation","focus","value","_a","getAdditionalField","icCheck","emit","handleKeyDown","preventPropagationElements","document","activeElement","includes","nodeName","handleFormReset","selected","initiallySelected","watchDisabledHandler","removeDisabledFalse","el","watchSelectedHandler","icSelectedChange","handleCheck","ev","additionalFieldDisplay","Array","from","querySelectorAll","disconnectedCallback","removeFormResetListener","componentWillLoad","isSlotUsed","addFormResetListener","componentDidLoad","onComponentRequiredPropUndefined","prop","propName","componentWillRender","hasSlot","slotHasContent","componentDidRender","additionalField","setAttribute","removeAttribute","additionalFieldValueHandler","detail","stopImmediatePropagation","setFocus","setTabIndex","tabIndex","querySelector","hiddenInput","render","dynamicText","form","groupLabel","label","name","theme","id","isPropDefined","h","Host","onClick","onKeyDown","class","container","tabindex","type","checked","ref","variant","htmlFor","hidden"],"sources":["src/components/ic-radio-option/ic-radio-option.css?tag=ic-radio-option","src/components/ic-radio-option/ic-radio-option.tsx"],"sourcesContent":["@import \"../../global/normalize.css\";\n\nic-radio-option {\n display: flex;\n flex-direction: column;\n width: fit-content;\n}\n\n.additional-field-wrapper [slot=\"additional-field\"] {\n margin-top: calc(var(--ic-space-sm) / 2);\n margin-left: var(--ic-space-xl);\n}\n\n/* The label turns grey when disabled */\nic-radio-option.ic-radio-option-disabled,\nic-radio-option.ic-radio-option-disabled .radio-label {\n --ic-typography-color: var(--ic-radio-button-text-option-disabled);\n}\n\n/* Focus states */\n\n.container input:focus + span.checkmark,\n.container:hover input:focus + span.checkmark,\n.container:active input:focus + span.checkmark,\n:host(:focus) .container input:checked + span.checkmark {\n box-shadow: var(--ic-border-focus);\n}\n\n/* The container */\n.container {\n display: grid;\n grid-template-columns: min-content auto;\n position: relative;\n cursor: pointer;\n align-items: center;\n margin: var(--ic-space-xxs) 0 var(--ic-space-xxs) var(--ic-space-xxs);\n}\n\n.container.disabled,\n.container.disabled input:disabled {\n cursor: default;\n}\n\n/* Hide the browser's default radio button */\n.container input {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n display: inline-block;\n position: absolute;\n cursor: pointer;\n height: var(--ic-space-lg);\n width: var(--ic-space-lg);\n border-radius: 50%;\n border: none;\n}\n\n/* Create a custom radio button */\n.checkmark {\n display: block;\n position: relative;\n top: 0;\n left: 0;\n height: var(--ic-space-lg);\n width: var(--ic-space-lg);\n background-color: var(--ic-radio-button-background-default);\n border: var(--ic-space-1px) solid var(--ic-radio-button-border-default);\n border-radius: 50%;\n transition: var(--ic-easing-transition-fast);\n box-sizing: border-box;\n}\n\n/* Show the indicator (dot/circle) when checked */\n.container input:checked ~ .checkmark::after {\n display: inline-block;\n}\n\n/* On mouse-over, add a light blue background color */\n.container:hover input ~ .checkmark {\n box-shadow: 0 0 0 0.25rem var(--ic-radio-button-active-hover);\n border: var(--ic-border-width) solid var(--ic-radio-button-default-hover);\n}\n\n.container:hover input:checked ~ .checkmark {\n box-shadow: 0 0 0 0.25rem var(--ic-radio-button-active-hover);\n border: 0.125rem solid var(--ic-radio-button-default-hover);\n}\n\n.container:hover:not(.disabled) input:checked ~ .checkmark::after {\n background-color: var(--ic-radio-button-default-hover);\n}\n\n/* When pressed, adds the active colours */\n.container:active input ~ .checkmark {\n box-shadow: 0 0 0 0.25rem var(--ic-radio-button-active-pressed);\n border: var(--ic-border-width) solid var(--ic-radio-button-default-pressed);\n}\n\n/* When pressed, adds the active colours */\n.container:active input:checked ~ .checkmark {\n border: 0.125rem solid var(--ic-radio-button-default-pressed);\n box-shadow: 0 0 0 0.25rem var(--ic-radio-button-active-pressed);\n}\n\n/* When pressed and selected, adds the active colours */\n.container:active input:checked ~ .checkmark::after {\n background-color: var(--ic-radio-button-default-pressed);\n}\n\n/* When the radio button is checked */\n.container input:checked ~ .checkmark {\n border: 0.125rem solid var(--ic-radio-button-default-active);\n}\n\n/* When the radio button is checked and disabled */\n.container input:checked:disabled ~ .checkmark {\n border: 0.125rem solid var(--ic-radio-button-border-disabled);\n}\n\n/* When the radio button is disabled */\n.container input:disabled ~ .checkmark {\n border: var(--ic-border-width) dashed var(--ic-radio-button-border-disabled);\n}\n\n/* When the radio button is disabled */\n.container input:disabled ~ .checkmark::after {\n background: var(--ic-radio-button-disabled);\n}\n\n/* On mouse-over inactive */\n.container:hover input:disabled ~ .checkmark {\n box-shadow: none;\n border: 0.125rem solid none;\n}\n\n.container:active input:disabled ~ .checkmark::after {\n background-color: var(--ic-radio-button-disabled);\n}\n\n/* Style the indicator (dot/circle) */\n.container .checkmark::after {\n content: \"\";\n position: absolute;\n display: none;\n top: calc(50% - var(--ic-space-xs));\n left: calc(50% - var(--ic-space-xs));\n width: var(--ic-space-md);\n height: var(--ic-space-md);\n border-radius: 50%;\n background: var(--ic-radio-button-default-active);\n}\n\n.radio-label {\n margin-left: var(--ic-space-md);\n --ic-typography-color: var(--ic-radio-button-text-option);\n}\n\n.additional-field-wrapper {\n margin-left: var(--ic-space-xs);\n}\n\n/* The line */\n.branch-corner {\n color: var(--ic-radio-button-required-bar);\n height: var(--ic-space-md);\n width: var(--ic-space-xl);\n border-radius: 0 0 0 0.188rem;\n border-bottom: 0.125rem solid var(--ic-radio-button-required-bar);\n border-left: 0.125rem solid var(--ic-radio-button-required-bar);\n margin-left: calc(-1 * var(--ic-space-1px));\n}\n\n/* The dynamic container */\n.dynamic-container {\n display: flex;\n position: relative;\n margin: var(--ic-space-xxxs) 0 var(--ic-space-xxs) var(--ic-space-md);\n gap: var(--ic-space-xs);\n}\n\n.dynamic-container.hidden {\n display: none;\n}\n\n.dynamic-text {\n color: var(--ic-radio-button-required-text);\n\n --ic-typography-color: var(--ic-radio-button-required-text);\n\n margin-top: calc(var(--ic-space-sm) / 2);\n margin-bottom: var(--ic-space-xs);\n border-radius: 2%;\n}\n\n@media (max-width: 576px) {\n ic-text-field {\n --input-width: 100%;\n }\n}\n\n@media (forced-colors: active) {\n /* Styles here only apply to Forced Colors Mode */\n\n .container input:checked ~ .checkmark,\n .container:active input:checked ~ .checkmark {\n border-color: Highlight;\n }\n\n .container input:checked ~ .checkmark::after,\n .container:active input:checked ~ .checkmark::after {\n background-color: Highlight;\n }\n\n .container input:disabled ~ .checkmark,\n .container input:checked:disabled ~ .checkmark {\n border-color: GrayText;\n }\n\n .container input:disabled ~ .checkmark::after,\n .container:active input:disabled ~ .checkmark::after {\n background-color: GrayText;\n }\n}\n","import {\n Component,\n Host,\n h,\n Prop,\n Element,\n Event,\n EventEmitter,\n Listen,\n State,\n Method,\n Watch,\n} from \"@stencil/core\";\nimport {\n IcAdditionalFieldTypes,\n IcThemeMode,\n IcValueEventDetail,\n} from \"../../utils/types\";\nimport {\n onComponentRequiredPropUndefined,\n addFormResetListener,\n removeFormResetListener,\n removeDisabledFalse,\n isPropDefined,\n isSlotUsed,\n slotHasContent,\n} from \"../../utils/helpers\";\n\nconst ADDITIONAL_FIELD = \"additional-field\";\n\n/**\n * @slot additional-field - Content to displayed alongside a radio option.\n */\n@Component({\n tag: \"ic-radio-option\",\n styleUrl: \"ic-radio-option.css\",\n})\nexport class RadioOption {\n private defaultRadioValue: string = \"\";\n private hasAdditionalField: boolean = false;\n private radioElement: HTMLInputElement;\n private skipFocus = false;\n\n @Element() el: HTMLIcRadioOptionElement;\n\n /**\n * The style of additionalField that will be displayed if used.\n */\n @Prop({ reflect: true }) additionalFieldDisplay: IcAdditionalFieldTypes =\n \"static\";\n\n /**\n * If `true`, the disabled state will be set.\n */\n @Prop() disabled?: boolean = false;\n @Watch(\"disabled\")\n watchDisabledHandler(): void {\n removeDisabledFalse(this.disabled, this.el);\n }\n\n /**\n * The text to be displayed when dynamic.\n */\n @Prop() dynamicText: string = \"This selection requires additional answers\";\n\n /**\n * The <form> element to associate the radio with.\n */\n @Prop() form?: string;\n\n /**\n * The group label for the radio option.\n */\n @Prop() groupLabel: string;\n\n /**\n * The label for the radio option.\n */\n @Prop() label?: string;\n\n /**\n * The name for the radio option.\n */\n @Prop() name: 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 * The value for the radio option.\n */\n @Prop({ mutable: true }) value!: string;\n\n /**\n * If `true`, the radio option will be displayed in a selected state.\n */\n @Prop({ reflect: true, mutable: true }) selected?: boolean = false;\n @State() initiallySelected = this.selected;\n\n @Watch(\"selected\")\n watchSelectedHandler(): void {\n this.icSelectedChange.emit();\n }\n\n /**\n * Emitted when the radio option is selected.\n */\n @Event() icCheck: EventEmitter<IcValueEventDetail>;\n @Listen(\"icCheck\")\n handleCheck(ev: CustomEvent<IcValueEventDetail>): void {\n if (\n this.additionalFieldDisplay === \"static\" &&\n Array.from(this.el.querySelectorAll(\"ic-radio-option\")).includes(\n ev.target as HTMLIcRadioOptionElement\n )\n )\n this.icCheck.emit({ value: this.value });\n }\n\n /**\n * Emitted when the radio option is selected or deselected.\n */\n @Event() icSelectedChange: EventEmitter<void>;\n\n disconnectedCallback(): void {\n removeFormResetListener(this.el, this.handleFormReset);\n }\n\n componentWillLoad(): void {\n if (isSlotUsed(this.el, ADDITIONAL_FIELD)) {\n this.hasAdditionalField = true;\n this.getAdditionalField();\n }\n\n this.defaultRadioValue = this.value;\n\n addFormResetListener(this.el, this.handleFormReset);\n\n removeDisabledFalse(this.disabled, this.el);\n }\n\n componentDidLoad(): void {\n onComponentRequiredPropUndefined(\n [{ prop: this.value, propName: \"value\" }],\n \"Radio Option\"\n );\n }\n\n componentWillRender(): void {\n const hasSlot = slotHasContent(this.el, ADDITIONAL_FIELD);\n if (hasSlot && !this.hasAdditionalField) {\n this.hasAdditionalField = true;\n this.getAdditionalField();\n } else if (!hasSlot && this.hasAdditionalField) {\n this.hasAdditionalField = false;\n }\n }\n\n componentDidRender(): void {\n if (this.additionalFieldDisplay === \"static\") {\n const additionalField = this.getAdditionalField();\n if (!this.selected || this.disabled) {\n additionalField?.setAttribute(\"disabled\", \"\");\n } else {\n additionalField?.removeAttribute(\"disabled\");\n }\n }\n }\n\n @Listen(\"icChange\")\n additionalFieldValueHandler(event: CustomEvent<{ value: string }>): void {\n if (this.selected) {\n this.value = event.detail.value || this.defaultRadioValue;\n this.icCheck.emit({\n value: this.value,\n });\n }\n\n event.stopImmediatePropagation();\n }\n\n /**\n * Sets focus on the radio option.\n */\n @Method()\n async setFocus(): Promise<void> {\n this.radioElement?.focus();\n }\n\n /**\n * @internal Sets the tabIndex of the radio option.\n */\n @Method()\n async setTabIndex(value: number): Promise<void> {\n this.radioElement.tabIndex = value;\n }\n\n private getAdditionalField(): HTMLIcTextFieldElement {\n const additionalField = this.el.querySelector(\n 'ic-text-field[slot=\"additional-field\"]'\n ) as HTMLIcTextFieldElement;\n if (additionalField) additionalField.hiddenInput = false;\n return additionalField;\n }\n\n private handleClick = (event: MouseEvent) => {\n const clickedAdditionalField = (event.target as Element).matches(\n \".dynamic-container:not(ic-radio-option, .checkmark), .dynamic-container *:not(ic-radio-option, .checkmark)\"\n );\n\n if (\n !this.disabled &&\n (!clickedAdditionalField || event.target === this.radioElement)\n ) {\n event.stopPropagation();\n if (this.skipFocus === false) {\n this.radioElement.focus();\n }\n this.skipFocus = false;\n\n if (this.hasAdditionalField) {\n this.value = this.getAdditionalField()?.value || this.defaultRadioValue;\n }\n\n this.icCheck.emit({\n value: this.value,\n });\n }\n };\n\n private handleKeyDown = (event: KeyboardEvent) => {\n const preventPropagationElements = [\"IC-DATE-INPUT\", \"IC-DATE-PICKER\"];\n\n if (\n this.getAdditionalField() == document.activeElement &&\n preventPropagationElements.includes(this.getAdditionalField().nodeName)\n ) {\n event.stopPropagation();\n }\n };\n\n private handleFormReset = (): void => {\n this.skipFocus = true;\n this.selected = this.initiallySelected;\n };\n\n render() {\n const {\n additionalFieldDisplay,\n disabled,\n dynamicText,\n form,\n groupLabel,\n handleClick,\n handleKeyDown,\n hasAdditionalField,\n label,\n name,\n selected,\n value,\n theme,\n } = this;\n\n const id = `ic-radio-option-${isPropDefined(label) || value}-${groupLabel}`;\n\n return (\n <Host\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n class={{\n [\"ic-radio-option-disabled\"]: disabled,\n [`ic-theme-${theme}`]: theme !== \"inherit\",\n }}\n >\n <div class={{ container: true, disabled }}>\n <div>\n <input\n tabindex={selected ? \"0\" : \"-1\"}\n type=\"radio\"\n name={name}\n id={id}\n value={value}\n disabled={disabled ? true : null}\n checked={selected}\n ref={(el) => (this.radioElement = el)}\n form={form}\n ></input>\n <span class=\"checkmark\"></span>\n </div>\n <ic-typography class=\"radio-label\" variant=\"body\">\n <label htmlFor={id}>{label}</label>\n </ic-typography>\n </div>\n\n {hasAdditionalField && (\n <div\n class={{\n \"dynamic-container\": true,\n hidden: additionalFieldDisplay === \"dynamic\" && !selected,\n }}\n >\n {additionalFieldDisplay === \"dynamic\" && (\n <div class=\"branch-corner\"></div>\n )}\n <div>\n {additionalFieldDisplay === \"dynamic\" && (\n <ic-typography variant=\"caption\">\n <p class=\"dynamic-text\">{dynamicText}</p>\n </ic-typography>\n )}\n <div\n class={{\n \"additional-field-wrapper\":\n additionalFieldDisplay === \"static\",\n }}\n >\n <slot name={ADDITIONAL_FIELD}></slot>\n </div>\n </div>\n </div>\n )}\n </Host>\n );\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"names":["CONTEXT_ID_ATTR","TabContext","this","newTabPanels","newTabs","linkTabs","tabs","forEach","tab","index","tabId","contextId","tabPanelId","setAttribute","tabPosition","tabGroup","tabPanels","theme","getChildren","el","querySelector","Array","from","querySelectorAll","children","filter","child","tagName","enabledTabs","getEnabledTabs","keydownHandler","event","isManual","activationType","enabledTabIndex","findIndex","focusedTabIndex","selectedTab","keyboardFunction","keyboardFocusTab","keyboardSelectTab","preventDefault","key","length","setInitialTab","selectedTabIndex","undefined","firstEnabledTabIndex","configureTabs","selected","tabPanel","hidden","disabled","newIndex","focus","icTabSelect","emit","tabIndex","tabLabel","textContent","trim","updateSelectedTab","newValue","watchMonochromeHandler","monochrome","watchThemeHandler","componentDidLoad","addEventListener","componentWillUpdate","disconnectedCallback","_a","removeEventListener","tabClickHandler","detail","position","stopImmediatePropagation","tabCreatedHandler","ev","setFocus","push","tabEnabledHandler","tabRemovedHandler","hadFocus","render","h"],"sources":["src/components/ic-tab-context/ic-tab-context.tsx"],"sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n Listen,\n Prop,\n State,\n h,\n Watch,\n Method,\n} from \"@stencil/core\";\nimport { IcActivationTypes, IcThemeMode } from \"../../utils/types\";\n\nimport {\n IcTabClickEventDetail,\n IcTabSelectEventDetail,\n} from \"../ic-tab/ic-tab.types\";\n\nconst CONTEXT_ID_ATTR = \"context-id\";\n\n@Component({\n tag: \"ic-tab-context\",\n})\nexport class TabContext {\n private enabledTabs: HTMLIcTabElement[];\n private focusedTabIndex: number;\n private newTabPanels: HTMLIcTabPanelElement[] = [];\n private newTabs: HTMLIcTabElement[] = [];\n private tabs: HTMLIcTabElement[];\n private tabGroup: HTMLIcTabGroupElement;\n private tabPanels: HTMLIcTabPanelElement[];\n\n @Element() el: HTMLIcTabContextElement;\n\n @State() selectedTab: number | null;\n\n /**\n * Determines whether tabs have to be manually activated (by pressing 'Enter' or 'Space') when they receive focus using keyboard navigation.\n */\n @Prop() activationType?: IcActivationTypes = \"automatic\";\n\n /**\n * The unique context needed if using multiple tabs inside one another i.e. rendering another set of tabs inside a tab panel.\n */\n @Prop({ reflect: true }) contextId?: string = \"default\";\n\n /**\n * The selected tab to be controlled by the user. Must be used alongside the icTabSelect event to manage tab selection.\n */\n @Prop() selectedTabIndex?: number;\n\n @Watch(\"selectedTabIndex\")\n updateSelectedTab(newValue: number): void {\n this.selectedTab = newValue;\n }\n\n /**\n * If `true`, the tabs will display as black in the light theme.\n */\n @Prop() monochrome?: boolean = false;\n @Watch(\"monochrome\")\n watchMonochromeHandler(): void {\n this.tabs.forEach((tab, index) => {\n tab.monochrome = this.monochrome;\n this.tabPanels[index].monochrome = this.monochrome;\n });\n this.tabGroup.monochrome = this.monochrome;\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.tabs.forEach((tab, index) => {\n tab.theme = this.theme;\n this.tabPanels[index].theme = this.theme;\n });\n this.tabGroup.theme = this.theme;\n }\n\n /**\n * Emitted when a user selects a tab.\n */\n @Event({ bubbles: false }) icTabSelect: EventEmitter<IcTabSelectEventDetail>;\n\n componentDidLoad(): void {\n if (this.selectedTabIndex !== undefined) {\n this.selectedTab = this.selectedTabIndex;\n }\n this.getChildren();\n this.linkTabs();\n this.tabGroup.addEventListener(\"keydown\", this.keydownHandler);\n this.setInitialTab();\n this.configureTabs();\n }\n\n componentWillUpdate(): void {\n this.configureTabs();\n }\n\n disconnectedCallback(): void {\n this.tabGroup?.removeEventListener(\"keydown\", this.keydownHandler);\n }\n\n @Listen(\"tabClick\")\n tabClickHandler(event: CustomEvent<IcTabClickEventDetail>): void {\n if (\n this.selectedTabIndex === undefined &&\n event.detail.contextId === this.contextId\n ) {\n this.selectedTab = event.detail.position;\n }\n /* eslint-disable no-unexpected-multiline */\n this.icTabSelect.emit({\n tabIndex: event.detail.position,\n tabLabel: this.el\n .querySelectorAll(\"ic-tab\")\n [event.detail.position].textContent.trim(),\n });\n /* eslint-enable no-unexpected-multiline */\n event.stopImmediatePropagation();\n }\n\n @Listen(\"tabCreated\")\n @Listen(\"tabPanelCreated\")\n tabCreatedHandler(ev: CustomEvent): void {\n if (this.tabs && this.tabPanels) {\n (ev.detail.setFocus ? this.newTabs : this.newTabPanels).push(ev.detail);\n if (this.newTabs.length === this.newTabPanels.length) {\n this.tabs.push(...this.newTabs);\n this.tabPanels.push(...this.newTabPanels);\n this.enabledTabs = this.getEnabledTabs();\n this.linkTabs();\n if (!this.tabs[this.selectedTab] || !this.tabPanels[this.selectedTab])\n this.setInitialTab();\n this.configureTabs();\n this.newTabs = [];\n this.newTabPanels = [];\n }\n }\n }\n\n @Listen(\"tabEnabled\")\n tabEnabledHandler(): void {\n this.enabledTabs = this.getEnabledTabs();\n }\n\n /**\n * @internal Used to set tab/tab panel IDs when a tab/tab panel has been removed\n */\n @Method()\n async tabRemovedHandler(hadFocus?: boolean): Promise<void> {\n this.getChildren();\n this.linkTabs();\n if (this.tabs[this.selectedTab] && this.tabPanels[this.selectedTab]) {\n this.tabs[this.selectedTab].selected = true;\n this.tabPanels[this.selectedTab].hidden = false;\n } else {\n this.setInitialTab();\n }\n\n if (hadFocus) {\n this.tabs[this.selectedTab].setFocus();\n }\n }\n\n /** Sets attributes to link tab-group, tabs and tab-panels */\n private linkTabs = () => {\n this.tabs.forEach((tab, index) => {\n const tabId = `ic-tab-${index}-context-${this.contextId}`;\n const tabPanelId = `ic-tab-panel-${index}-context-${this.contextId}`;\n tab.setAttribute(\"id\", tabId);\n tab.tabId = `ic-tab--${index}-context-${this.contextId}`;\n tab.tabPosition = index;\n tab.setAttribute(\"aria-controls\", tabPanelId);\n tab.setAttribute(CONTEXT_ID_ATTR, this.contextId);\n this.tabGroup.setAttribute(CONTEXT_ID_ATTR, this.contextId);\n this.tabPanels[index].setAttribute(\"id\", tabPanelId);\n this.tabPanels[index].setAttribute(\"aria-labelledby\", tabId);\n this.tabPanels[index].setAttribute(CONTEXT_ID_ATTR, this.contextId);\n\n tab.theme = this.theme;\n this.tabPanels[index].theme = this.theme;\n this.tabGroup.theme = this.theme;\n });\n };\n\n /**\n * Gets tabs and tabpanels with the same context ID using querySelector to selector the children in relation to the host\n */\n private getChildren = (): void => {\n this.tabGroup = this.el.querySelector(\"ic-tab-group\");\n this.tabs = Array.from(this.tabGroup.querySelectorAll(\"ic-tab\"));\n this.tabPanels = Array.from(this.el.children).filter(\n (child) => child.tagName === \"IC-TAB-PANEL\"\n ) as HTMLIcTabPanelElement[];\n this.enabledTabs = this.getEnabledTabs();\n };\n\n private keydownHandler = (event: KeyboardEvent) => {\n const isManual = this.activationType === \"manual\";\n const enabledTabIndex = this.enabledTabs.findIndex(\n (tab) =>\n tab.tabId ===\n this.tabs[isManual ? this.focusedTabIndex : this.selectedTab].tabId\n );\n const keyboardFunction = isManual\n ? this.keyboardFocusTab\n : this.keyboardSelectTab;\n let preventDefault = true;\n switch (event.key) {\n case \"Home\":\n keyboardFunction(0);\n break;\n case \"End\":\n keyboardFunction(this.enabledTabs.length - 1);\n break;\n case \"ArrowRight\":\n keyboardFunction(\n enabledTabIndex < this.enabledTabs.length - 1\n ? enabledTabIndex + 1\n : 0\n );\n break;\n case \"ArrowLeft\":\n keyboardFunction(\n (enabledTabIndex > 0 ? enabledTabIndex : this.enabledTabs.length) - 1\n );\n break;\n default:\n if (isManual && (event.key === \"Enter\" || event.key === \" \")) {\n this.keyboardSelectTab(this.focusedTabIndex);\n } else {\n preventDefault = false;\n }\n }\n if (preventDefault) event.preventDefault();\n };\n\n /** Sets the tab that is selected on initial render */\n private setInitialTab = (): void => {\n if (this.selectedTabIndex !== undefined) {\n this.selectedTab = this.selectedTabIndex;\n this.focusedTabIndex = this.selectedTabIndex;\n } else {\n const firstEnabledTabIndex = this.tabs.findIndex(\n (tab) => tab.tabId === this.enabledTabs[0].tabId\n );\n this.selectedTab = firstEnabledTabIndex;\n this.focusedTabIndex = firstEnabledTabIndex;\n }\n };\n\n /** Passes the selected tab to the tab and tab panel components */\n private configureTabs = () => {\n this.enabledTabs.forEach((tab) => {\n tab.selected = tab.tabPosition === this.selectedTab;\n });\n this.tabPanels.forEach((tabPanel, index) => {\n tabPanel.hidden = index !== this.selectedTab;\n });\n };\n\n private getEnabledTabs = () =>\n Array.from(this.tabs).filter((child) => !child.disabled);\n\n /** Sets focus on tab and selects it */\n private keyboardSelectTab = (enabledTabIndex: number) => {\n const newIndex = this.tabs.findIndex(\n (tab) => tab.tabId === this.enabledTabs[enabledTabIndex].tabId\n );\n this.enabledTabs[enabledTabIndex].focus();\n if (this.selectedTabIndex === undefined) {\n this.selectedTab = newIndex;\n } else {\n /* eslint-disable no-unexpected-multiline */\n this.icTabSelect.emit({\n tabIndex: newIndex,\n tabLabel: this.el\n .querySelectorAll(\"ic-tab\")\n [newIndex].textContent.trim(),\n });\n }\n };\n\n /** Sets focus on tab without selecting it (for manual activation) */\n private keyboardFocusTab = (enabledTabIndex: number) => {\n this.enabledTabs[enabledTabIndex].focus();\n this.focusedTabIndex = this.tabs.findIndex(\n (tab) => tab.tabId === this.enabledTabs[enabledTabIndex].tabId\n );\n };\n\n render() {\n return <slot></slot>;\n }\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{r as t,h as i,H as e,g as o}from"./p-6b5e91e2.js";import{o as n,b as s}from"./p-cda4aca9.js";const a=`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" aria-hidden="true">\n <path d="M0 8L1.41 9.41L7 3.83V16H9V3.83L14.58 9.42L16 8L8 0L0 8Z"/>\n</svg>\n`;const r='/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-webkit-text-size-adjust:100%;}body{margin:0}main{display:block}h1{font-size:2em;margin:0.67em 0}hr{box-sizing:content-box;height:0;overflow:visible;}pre{font-family:monospace, monospace;font-size:1em;}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em;}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0;}button,input{overflow:visible}button,select{text-transform:none}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal;}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0;}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px;}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit;}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none}html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video{margin:0;padding:0;border:0;font-size:100%;font-style:inherit;vertical-align:baseline}:host{display:block;position:absolute;right:0}ic-button{height:2.5rem;align-items:center;background-color:var(--ic-color-background-primary);border-radius:5rem;box-shadow:var(--ic-elevation-overlay);visibility:hidden;opacity:0;position:fixed;right:var(--ic-space-md);bottom:var(--ic-space-md);transition:visibility 0s linear var(--ic-transition-duration-slow),\n opacity var(--ic-transition-duration-slow);z-index:var(--ic-z-index-back-to-top)}:host([variant="icon"]) ic-button::part(button){margin:0}ic-button::part(button){border-radius:5rem}ic-button.show{visibility:visible;opacity:1;transition:visibility 0s linear 0s,\n opacity var(--ic-transition-duration-slow),\n box-shadow var(--ic-easing-transition-fast)}ic-button.by-footer{position:relative;right:var(--ic-space-md);bottom:3.5rem}ic-button.offset-banner{margin-bottom:var(--ic-space-lg)}.ic-back-to-top-icon{padding-top:var(--ic-space-xxs);padding-right:var(--ic-space-xs)}.ic-back-to-top-icon>svg{height:var(--ic-space-md);width:var(--ic-space-md)}.icon-only{width:2.5rem}.icon-only .ic-back-to-top-icon>svg{padding-left:calc(var(--ic-space-xs) - var(--ic-space-1px))}@media (forced-colors: active){.icon-only .ic-back-to-top-icon>svg{padding-left:calc(var(--ic-space-xs) - var(--ic-space-xxxs))}}';const c="Back to top";const l=class{constructor(i){t(this,i);this.topObserver=null;this.getObservedEl=()=>document.querySelector("#ic-back-to-top-target");this.setTargetElVisible=t=>{this.targetElVisible=t};this.setFooterVisible=t=>{this.checkForClassificationBanner();this.footerVisible=typeof window!=="undefined"&&window.scrollY===0?false:t};this.targetElObserverCallback=t=>{this.setTargetElVisible(t[0].isIntersecting)};this.footerObserverCallback=t=>{this.setFooterVisible(t[0].isIntersecting)};this.findTargetEl=t=>{let i=null;if(t===null||t===undefined){console.log("Error: No target ID specified for back to top component - defaulting to top of page")}else{i=document.querySelector(`${t.startsWith("#")?"":"#"}${t}`);if(i===null){console.log(`Error: Back to top target element '${t}' not found - defaulting to top of page`)}}return i};this.createTopObserver=t=>{this.targetEl=this.findTargetEl(t);let i;if(this.topObserver!==null){const t=this.getObservedEl();if(t!==null){this.topObserver.unobserve(t);t.remove()}}if(this.targetEl===null){i=document.body;this.targetEl=i.firstElementChild;this.isTargetElNull=true}else{i=this.targetEl.parentNode;this.isTargetElNull=false}const e=document.createElement("div");e.setAttribute("id","ic-back-to-top-target");e.setAttribute("tabindex","-1");i.insertBefore(e,this.targetEl);const o=getComputedStyle(this.targetEl).marginTop;this.topObserver=new IntersectionObserver(this.targetElObserverCallback,{threshold:[0],rootMargin:`${o} 0px 0px 0px`});this.topObserver.observe(e)};this.handleClick=()=>{if(this.isTargetElNull){window.scrollTo(0,0)}else{this.targetEl.scrollIntoView()}this.getObservedEl().focus()};this.checkForClassificationBanner=()=>{const t=document.querySelectorAll("ic-classification-banner:not([inline='true'])");this.bannerOffset=t.length>0};this.bannerOffset=false;this.footerVisible=false;this.targetElVisible=true;this.target=undefined;this.theme="inherit";this.variant="default"}watchPropHandler(t,i){n(i,t,(()=>{this.createTopObserver(t)}))}componentWillLoad(){this.createTopObserver(this.target);this.checkForClassificationBanner();let t=document.querySelectorAll("ic-footer");if(t.length===0){t=document.querySelectorAll("footer")}if(t.length){const i=t[t.length-1];const e=this.bannerOffset?.15:0;const o=new IntersectionObserver(this.footerObserverCallback,{threshold:[e]});o.observe(i)}}componentDidLoad(){s([{prop:this.target,propName:"target"}],"Back to Top")}render(){const{variant:t,bannerOffset:o,targetElVisible:n,footerVisible:s}=this;const r=t==="icon"?"icon-secondary":"secondary";const l=t==="icon"?"large":"medium";const d=t==="icon"?"":c;return i(e,{class:{[`ic-theme-${this.theme}`]:this.theme!=="inherit"}},i("ic-button",{"aria-label":c,variant:r,size:l,onClick:this.handleClick,class:{["offset-banner"]:o,["show"]:!n,["by-footer"]:s,["icon-only"]:t==="icon"},theme:this.theme},i("span",{class:"ic-back-to-top-icon",innerHTML:a}),d))}static get delegatesFocus(){return true}get el(){return o(this)}static get watchers(){return{target:["watchPropHandler"]}}};l.style=r;export{l as ic_back_to_top};
2
- //# sourceMappingURL=p-e6189634.entry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"names":["icBackToTopCss","backToTopLabel","BackToTop","this","topObserver","getObservedEl","document","querySelector","setTargetElVisible","visible","targetElVisible","setFooterVisible","checkForClassificationBanner","footerVisible","window","scrollY","targetElObserverCallback","entries","isIntersecting","footerObserverCallback","findTargetEl","target","targetElement","undefined","console","log","startsWith","createTopObserver","targetEl","objParent","observedEl","unobserve","remove","body","firstElementChild","isTargetElNull","parentNode","objBackToTopTargetEl","createElement","setAttribute","insertBefore","marginTop","getComputedStyle","IntersectionObserver","threshold","rootMargin","observe","handleClick","scrollTo","scrollIntoView","focus","banners","querySelectorAll","bannerOffset","length","watchPropHandler","newValue","oldValue","onComponentPropUndefinedChange","componentWillLoad","footers","footerEl","footerObserver","componentDidLoad","onComponentRequiredPropUndefined","prop","propName","render","variant","btnVariant","size","label","h","Host","class","theme","onClick","innerHTML","ArrowUpward"],"sources":["src/components/ic-back-to-top/ic-back-to-top.css?tag=ic-back-to-top&encapsulation=shadow","src/components/ic-back-to-top/ic-back-to-top.tsx"],"sourcesContent":["@import \"../../global/normalize.css\";\n\n/**\n * @prop --ic-z-index-back-to-top: z-index of back to top\n */\n\n:host {\n display: block;\n position: absolute;\n right: 0;\n}\n\nic-button {\n height: 2.5rem;\n align-items: center;\n background-color: var(--ic-color-background-primary);\n border-radius: 5rem;\n box-shadow: var(--ic-elevation-overlay);\n visibility: hidden;\n opacity: 0;\n position: fixed;\n right: var(--ic-space-md);\n bottom: var(--ic-space-md);\n transition: visibility 0s linear var(--ic-transition-duration-slow),\n opacity var(--ic-transition-duration-slow);\n z-index: var(--ic-z-index-back-to-top);\n}\n\n:host([variant=\"icon\"]) ic-button::part(button) {\n margin: 0;\n}\n\nic-button::part(button) {\n border-radius: 5rem;\n}\n\nic-button.show {\n visibility: visible;\n opacity: 1;\n transition: visibility 0s linear 0s,\n opacity var(--ic-transition-duration-slow),\n box-shadow var(--ic-easing-transition-fast);\n}\n\nic-button.by-footer {\n position: relative;\n right: var(--ic-space-md);\n bottom: 3.5rem;\n}\n\nic-button.offset-banner {\n margin-bottom: var(--ic-space-lg);\n}\n\n.ic-back-to-top-icon {\n padding-top: var(--ic-space-xxs);\n padding-right: var(--ic-space-xs);\n}\n\n.ic-back-to-top-icon > svg {\n height: var(--ic-space-md);\n width: var(--ic-space-md);\n}\n\n.icon-only {\n width: 2.5rem;\n}\n\n.icon-only .ic-back-to-top-icon > svg {\n padding-left: calc(var(--ic-space-xs) - var(--ic-space-1px));\n}\n\n@media (forced-colors: active) {\n .icon-only .ic-back-to-top-icon > svg {\n padding-left: calc(var(--ic-space-xs) - var(--ic-space-xxxs));\n }\n}\n","import { Component, h, Host, Element, Prop, State, Watch } from \"@stencil/core\";\nimport ArrowUpward from \"./assets/ArrowUpward.svg\";\nimport {\n onComponentPropUndefinedChange,\n onComponentRequiredPropUndefined,\n} from \"../../utils/helpers\";\nimport { IcThemeMode } from \"../../utils/types\";\nimport { IcBackToTopVariants } from \"./ic-back-to-top.types\";\n\nconst backToTopLabel = \"Back to top\";\n\n@Component({\n tag: \"ic-back-to-top\",\n styleUrl: \"ic-back-to-top.css\",\n shadow: {\n delegatesFocus: true,\n },\n})\nexport class BackToTop {\n private isTargetElNull: boolean;\n private targetEl: Element;\n private topObserver: IntersectionObserver = null;\n\n @Element() el: HTMLIcBackToTopElement;\n\n @State() bannerOffset: boolean = false;\n @State() footerVisible: boolean = false;\n @State() targetElVisible: boolean = true;\n\n /**\n * The ID of the element to jump back to when the link is clicked.\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 * The variant of the button to render\n */\n @Prop() variant: IcBackToTopVariants = \"default\";\n\n @Watch(\"target\")\n watchPropHandler(newValue: string, oldValue: string): void {\n //added for gatsby rehydration issue where prop is initially undefined but then changes to actual value\n onComponentPropUndefinedChange(oldValue, newValue, () => {\n this.createTopObserver(newValue);\n });\n }\n\n componentWillLoad(): void {\n this.createTopObserver(this.target);\n this.checkForClassificationBanner();\n\n //observer for when footer scrolls into view\n let footers = document.querySelectorAll(\n \"ic-footer\"\n ) as NodeListOf<HTMLElement>;\n if (footers.length === 0) {\n footers = document.querySelectorAll(\"footer\");\n }\n\n if (footers.length) {\n const footerEl = footers[footers.length - 1];\n const threshold = this.bannerOffset ? 0.15 : 0;\n const footerObserver = new IntersectionObserver(\n this.footerObserverCallback,\n { threshold: [threshold] }\n );\n footerObserver.observe(footerEl);\n }\n }\n\n componentDidLoad(): void {\n onComponentRequiredPropUndefined(\n [{ prop: this.target, propName: \"target\" }],\n \"Back to Top\"\n );\n }\n\n private getObservedEl = () => {\n return document.querySelector(\"#ic-back-to-top-target\");\n };\n\n private setTargetElVisible = (visible: boolean) => {\n this.targetElVisible = visible;\n };\n\n private setFooterVisible = (visible: boolean) => {\n this.checkForClassificationBanner();\n this.footerVisible =\n typeof window !== \"undefined\" && window.scrollY === 0 ? false : visible;\n };\n\n private targetElObserverCallback = (entries: IntersectionObserverEntry[]) => {\n this.setTargetElVisible(entries[0].isIntersecting);\n };\n\n private footerObserverCallback = (entries: IntersectionObserverEntry[]) => {\n this.setFooterVisible(entries[0].isIntersecting);\n };\n\n private findTargetEl = (target: string): Element => {\n let targetElement: Element = null;\n if (target === null || target === undefined) {\n console.log(\n \"Error: No target ID specified for back to top component - defaulting to top of page\"\n );\n } else {\n targetElement = document.querySelector(\n `${target.startsWith(\"#\") ? \"\" : \"#\"}${target}`\n );\n if (targetElement === null) {\n console.log(\n `Error: Back to top target element '${target}' not found - defaulting to top of page`\n );\n }\n }\n return targetElement;\n };\n\n private createTopObserver = (target: string) => {\n this.targetEl = this.findTargetEl(target);\n let objParent: HTMLElement;\n\n //remove old element & observer\n if (this.topObserver !== null) {\n const observedEl = this.getObservedEl();\n if (observedEl !== null) {\n this.topObserver.unobserve(observedEl);\n observedEl.remove();\n }\n }\n\n if (this.targetEl === null) {\n objParent = document.body;\n this.targetEl = objParent.firstElementChild;\n this.isTargetElNull = true;\n } else {\n objParent = this.targetEl.parentNode as HTMLElement;\n this.isTargetElNull = false;\n }\n\n //insert a new 0px height element before specified target that can be used to determine when page is scrolled\n const objBackToTopTargetEl = document.createElement(\"div\");\n objBackToTopTargetEl.setAttribute(\"id\", \"ic-back-to-top-target\");\n objBackToTopTargetEl.setAttribute(\"tabindex\", \"-1\"); // Needed for virtual cursor behaviour to work\n objParent.insertBefore(objBackToTopTargetEl, this.targetEl);\n\n // resize observer needs to factor in any top margin on the target el\n const marginTop = getComputedStyle(this.targetEl).marginTop;\n this.topObserver = new IntersectionObserver(this.targetElObserverCallback, {\n threshold: [0],\n rootMargin: `${marginTop} 0px 0px 0px`,\n });\n this.topObserver.observe(objBackToTopTargetEl);\n };\n\n private handleClick = () => {\n if (this.isTargetElNull) {\n window.scrollTo(0, 0);\n } else {\n this.targetEl.scrollIntoView();\n }\n // Get virtual cursor to move\n (this.getObservedEl() as HTMLElement).focus();\n };\n\n private checkForClassificationBanner = () => {\n //adjust position for classification banner at bottom\n const banners = document.querySelectorAll(\n \"ic-classification-banner:not([inline='true'])\"\n );\n this.bannerOffset = banners.length > 0;\n };\n\n render() {\n const { variant, bannerOffset, targetElVisible, footerVisible } = this;\n const btnVariant = variant === \"icon\" ? \"icon-secondary\" : \"secondary\";\n const size = variant === \"icon\" ? \"large\" : \"medium\";\n const label = variant === \"icon\" ? \"\" : backToTopLabel;\n\n return (\n <Host\n class={{\n [`ic-theme-${this.theme}`]: this.theme !== \"inherit\",\n }}\n >\n <ic-button\n aria-label={backToTopLabel}\n variant={btnVariant}\n size={size}\n onClick={this.handleClick}\n class={{\n [\"offset-banner\"]: bannerOffset,\n [\"show\"]: !targetElVisible,\n [\"by-footer\"]: footerVisible,\n [\"icon-only\"]: variant === \"icon\",\n }}\n theme={this.theme}\n >\n <span class=\"ic-back-to-top-icon\" innerHTML={ArrowUpward} />\n {label}\n </ic-button>\n </Host>\n );\n }\n}\n"],"mappings":"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"}