@ukic/canary-web-components 3.0.0-canary.33 → 3.0.0-canary.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/core.cjs.js +1 -1
- package/dist/cjs/helpers-f81fed28.js.map +1 -1
- package/dist/cjs/ic-alert.cjs.entry.js +6 -2
- package/dist/cjs/ic-alert.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-button_3.cjs.entry.js +28 -16
- package/dist/cjs/ic-button_3.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-checkbox-group.cjs.entry.js +23 -2
- package/dist/cjs/ic-checkbox-group.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-data-row.cjs.entry.js +1 -1
- package/dist/cjs/ic-data-row.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-input-component-container_4.cjs.entry.js +3 -4
- package/dist/cjs/ic-input-component-container_4.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-menu.cjs.entry.js +1 -1
- package/dist/cjs/ic-menu.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-skeleton.cjs.entry.js +20 -5
- package/dist/cjs/ic-skeleton.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-step.cjs.entry.js +16 -14
- package/dist/cjs/ic-step.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-stepper.cjs.entry.js +24 -4
- package/dist/cjs/ic-stepper.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-switch.cjs.entry.js +4 -4
- package/dist/cjs/ic-switch.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-tab-context.cjs.entry.js +1 -1
- package/dist/cjs/ic-tab-context.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-tab-group.cjs.entry.js +2 -2
- package/dist/cjs/ic-tab-group.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-tab-panel.cjs.entry.js +2 -2
- package/dist/cjs/ic-tab-panel.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-theme.cjs.entry.js +1 -1
- package/dist/cjs/ic-theme.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-time-input.cjs.entry.js +7 -7
- package/dist/cjs/ic-time-input.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-time-selector.cjs.entry.js +50 -170
- package/dist/cjs/ic-time-selector.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-toast-region.cjs.entry.js +1 -1
- package/dist/cjs/ic-toast-region.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-toast.cjs.entry.js +5 -5
- package/dist/cjs/ic-toast.cjs.entry.js.map +1 -1
- package/dist/cjs/ic-toggle-button_2.cjs.entry.js +4 -4
- package/dist/cjs/ic-toggle-button_2.cjs.entry.js.map +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/collection/components/ic-time-input/ic-time-input.js +8 -8
- package/dist/collection/components/ic-time-input/ic-time-input.js.map +1 -1
- package/dist/collection/components/ic-time-input/ic-time-input.stories.js +4 -4
- package/dist/collection/components/ic-time-input/ic-time-input.stories.js.map +1 -1
- package/dist/collection/components/ic-time-selector/ic-time-selector.js +53 -200
- package/dist/collection/components/ic-time-selector/ic-time-selector.js.map +1 -1
- package/dist/collection/components/ic-time-selector/ic-time-selector.stories.js +50 -24
- package/dist/collection/components/ic-time-selector/ic-time-selector.stories.js.map +1 -1
- package/dist/collection/utils/types.js.map +1 -1
- package/dist/components/helpers2.js.map +1 -1
- package/dist/components/ic-alert.js +7 -2
- package/dist/components/ic-alert.js.map +1 -1
- package/dist/components/ic-button2.js +4 -4
- package/dist/components/ic-button2.js.map +1 -1
- package/dist/components/ic-checkbox-group.js +24 -2
- package/dist/components/ic-checkbox-group.js.map +1 -1
- package/dist/components/ic-data-row.js +1 -1
- package/dist/components/ic-data-row.js.map +1 -1
- package/dist/components/ic-input-validation2.js +4 -5
- package/dist/components/ic-input-validation2.js.map +1 -1
- package/dist/components/ic-loading-indicator2.js +27 -13
- package/dist/components/ic-loading-indicator2.js.map +1 -1
- package/dist/components/ic-menu2.js +1 -1
- package/dist/components/ic-menu2.js.map +1 -1
- package/dist/components/ic-skeleton.js +23 -6
- package/dist/components/ic-skeleton.js.map +1 -1
- package/dist/components/ic-step.js +17 -15
- package/dist/components/ic-step.js.map +1 -1
- package/dist/components/ic-stepper.js +24 -4
- package/dist/components/ic-stepper.js.map +1 -1
- package/dist/components/ic-switch.js +4 -4
- package/dist/components/ic-switch.js.map +1 -1
- package/dist/components/ic-tab-context.js +1 -1
- package/dist/components/ic-tab-context.js.map +1 -1
- package/dist/components/ic-tab-group.js +2 -2
- package/dist/components/ic-tab-group.js.map +1 -1
- package/dist/components/ic-tab-panel.js +2 -2
- package/dist/components/ic-tab-panel.js.map +1 -1
- package/dist/components/ic-theme.js +1 -1
- package/dist/components/ic-theme.js.map +1 -1
- package/dist/components/ic-time-input.js +7 -7
- package/dist/components/ic-time-input.js.map +1 -1
- package/dist/components/ic-time-selector.js +50 -172
- package/dist/components/ic-time-selector.js.map +1 -1
- package/dist/components/ic-toast-region.js +1 -1
- package/dist/components/ic-toast-region.js.map +1 -1
- package/dist/components/ic-toast.js +5 -5
- package/dist/components/ic-toast.js.map +1 -1
- package/dist/components/ic-toggle-button-group2.js +2 -2
- package/dist/components/ic-toggle-button-group2.js.map +1 -1
- package/dist/components/ic-toggle-button2.js +2 -2
- package/dist/components/ic-toggle-button2.js.map +1 -1
- package/dist/core/core.esm.js +1 -1
- package/dist/core/core.esm.js.map +1 -1
- package/dist/core/{p-802a4bd3.entry.js → p-0bca234b.entry.js} +2 -2
- package/dist/core/{p-802a4bd3.entry.js.map → p-0bca234b.entry.js.map} +1 -1
- package/dist/core/{p-5254a078.entry.js → p-1be17f22.entry.js} +2 -2
- package/dist/core/{p-5254a078.entry.js.map → p-1be17f22.entry.js.map} +1 -1
- package/dist/core/{p-d528d856.entry.js → p-1dbefb37.entry.js} +2 -2
- package/dist/core/p-1dbefb37.entry.js.map +1 -0
- package/dist/core/{p-c9525aac.entry.js → p-409d03b2.entry.js} +2 -2
- package/dist/core/{p-c9525aac.entry.js.map → p-409d03b2.entry.js.map} +1 -1
- package/dist/core/p-492991ad.entry.js +2 -0
- package/dist/core/p-492991ad.entry.js.map +1 -0
- package/dist/core/p-53dad961.entry.js +2 -0
- package/dist/core/p-53dad961.entry.js.map +1 -0
- package/dist/core/{p-ad551a0c.entry.js → p-7c4d6b13.entry.js} +2 -2
- package/dist/core/p-7c4d6b13.entry.js.map +1 -0
- package/dist/core/{p-a88e61b2.entry.js → p-7d878ad7.entry.js} +2 -2
- package/dist/core/{p-a88e61b2.entry.js.map → p-7d878ad7.entry.js.map} +1 -1
- package/dist/core/p-829b34f9.js.map +1 -1
- package/dist/core/p-8d42a6e5.entry.js +2 -0
- package/dist/core/{p-a94a7b71.entry.js.map → p-8d42a6e5.entry.js.map} +1 -1
- package/dist/core/{p-e2e556ec.entry.js → p-a58cf6fd.entry.js} +2 -2
- package/dist/core/p-a58cf6fd.entry.js.map +1 -0
- package/dist/core/{p-53740194.entry.js → p-a8310dfd.entry.js} +2 -2
- package/dist/core/p-a8310dfd.entry.js.map +1 -0
- package/dist/core/{p-c32f043e.entry.js → p-b76fdade.entry.js} +2 -2
- package/dist/core/{p-c32f043e.entry.js.map → p-b76fdade.entry.js.map} +1 -1
- package/dist/core/{p-04cb17d7.entry.js → p-b9459ba2.entry.js} +2 -2
- package/dist/core/{p-04cb17d7.entry.js.map → p-b9459ba2.entry.js.map} +1 -1
- package/dist/core/p-bb3db366.entry.js +2 -0
- package/dist/core/p-bb3db366.entry.js.map +1 -0
- package/dist/core/p-bc6e5d64.entry.js +2 -0
- package/dist/core/p-bc6e5d64.entry.js.map +1 -0
- package/dist/core/{p-adde6c66.entry.js → p-d376858f.entry.js} +2 -2
- package/dist/core/{p-adde6c66.entry.js.map → p-d376858f.entry.js.map} +1 -1
- package/dist/core/{p-6323da7a.entry.js → p-dbd9a403.entry.js} +2 -2
- package/dist/core/{p-6323da7a.entry.js.map → p-dbd9a403.entry.js.map} +1 -1
- package/dist/core/p-df064c8b.entry.js +2 -0
- package/dist/core/p-df064c8b.entry.js.map +1 -0
- package/dist/core/p-eac60693.entry.js +2 -0
- package/dist/core/p-eac60693.entry.js.map +1 -0
- package/dist/esm/core.js +1 -1
- package/dist/esm/helpers-a08b3f32.js.map +1 -1
- package/dist/esm/ic-alert.entry.js +6 -2
- package/dist/esm/ic-alert.entry.js.map +1 -1
- package/dist/esm/ic-button_3.entry.js +28 -16
- package/dist/esm/ic-button_3.entry.js.map +1 -1
- package/dist/esm/ic-checkbox-group.entry.js +23 -2
- package/dist/esm/ic-checkbox-group.entry.js.map +1 -1
- package/dist/esm/ic-data-row.entry.js +1 -1
- package/dist/esm/ic-data-row.entry.js.map +1 -1
- package/dist/esm/ic-input-component-container_4.entry.js +3 -4
- package/dist/esm/ic-input-component-container_4.entry.js.map +1 -1
- package/dist/esm/ic-menu.entry.js +1 -1
- package/dist/esm/ic-menu.entry.js.map +1 -1
- package/dist/esm/ic-skeleton.entry.js +20 -5
- package/dist/esm/ic-skeleton.entry.js.map +1 -1
- package/dist/esm/ic-step.entry.js +17 -15
- package/dist/esm/ic-step.entry.js.map +1 -1
- package/dist/esm/ic-stepper.entry.js +24 -4
- package/dist/esm/ic-stepper.entry.js.map +1 -1
- package/dist/esm/ic-switch.entry.js +4 -4
- package/dist/esm/ic-switch.entry.js.map +1 -1
- package/dist/esm/ic-tab-context.entry.js +1 -1
- package/dist/esm/ic-tab-context.entry.js.map +1 -1
- package/dist/esm/ic-tab-group.entry.js +2 -2
- package/dist/esm/ic-tab-group.entry.js.map +1 -1
- package/dist/esm/ic-tab-panel.entry.js +2 -2
- package/dist/esm/ic-tab-panel.entry.js.map +1 -1
- package/dist/esm/ic-theme.entry.js +1 -1
- package/dist/esm/ic-theme.entry.js.map +1 -1
- package/dist/esm/ic-time-input.entry.js +7 -7
- package/dist/esm/ic-time-input.entry.js.map +1 -1
- package/dist/esm/ic-time-selector.entry.js +50 -170
- package/dist/esm/ic-time-selector.entry.js.map +1 -1
- package/dist/esm/ic-toast-region.entry.js +1 -1
- package/dist/esm/ic-toast-region.entry.js.map +1 -1
- package/dist/esm/ic-toast.entry.js +5 -5
- package/dist/esm/ic-toast.entry.js.map +1 -1
- package/dist/esm/ic-toggle-button_2.entry.js +4 -4
- package/dist/esm/ic-toggle-button_2.entry.js.map +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/types/components/ic-time-input/ic-time-input.d.ts +1 -1
- package/dist/types/components/ic-time-selector/ic-time-selector.d.ts +2 -10
- package/dist/types/components/ic-time-selector/ic-time-selector.stories.d.ts +48 -13
- package/dist/types/components.d.ts +6 -16
- package/dist/types/utils/types.d.ts +1 -2
- package/hydrate/index.js +208 -250
- package/hydrate/index.mjs +208 -250
- package/package.json +3 -3
- package/dist/core/p-53740194.entry.js.map +0 -1
- package/dist/core/p-71cc5909.entry.js +0 -2
- package/dist/core/p-71cc5909.entry.js.map +0 -1
- package/dist/core/p-8830011c.entry.js +0 -2
- package/dist/core/p-8830011c.entry.js.map +0 -1
- package/dist/core/p-939b168a.entry.js +0 -2
- package/dist/core/p-939b168a.entry.js.map +0 -1
- package/dist/core/p-a94a7b71.entry.js +0 -2
- package/dist/core/p-ad551a0c.entry.js.map +0 -1
- package/dist/core/p-b434bd7c.entry.js +0 -2
- package/dist/core/p-b434bd7c.entry.js.map +0 -1
- package/dist/core/p-d528d856.entry.js.map +0 -1
- package/dist/core/p-da1c2883.entry.js +0 -2
- package/dist/core/p-da1c2883.entry.js.map +0 -1
- package/dist/core/p-e2e556ec.entry.js.map +0 -1
- package/dist/core/p-eaeb473e.entry.js +0 -2
- package/dist/core/p-eaeb473e.entry.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["getCustomElementHandling","allowICPrefix","CUSTOM_ELEMENT_HANDLING","tagNameCheck","tagName","startsWith","IC_CUSTOM_ALLOWED_COMPONENTS","includes","attributeNameCheck","sanitizeHTMLString","html","purifier","sanitize","sanitizeHTMLIconString","icMenuCss","IcMenuStyle0","Menu","constructor","hostRef","this","ACTIVE_DESCENDANT","CLEAR_BUTTON_ID","SEARCH_BAR_TAG","disabledOptionSelected","hasPreviouslyBlurred","hasTimedOut","isLoading","lastOptionSelected","lastOptionFocused","multiOptionClicked","preventClickOpen","preventMenuFocus","shiftPressed","ungroupedOptions","focusFromSearchKeypress","initialOptionsListRender","keyboardNav","preventIncorrectTabOrder","popperProps","activationType","autofocusOnSelected","closeOnSelect","fullWidth","labelField","multiSelect","searchableSelect","searchBar","searchMode","selectOnEnter","size","valueField","handleClearListener","optionHighlighted","handleSubmitSearch","highlightedOptionIndex","options","findIndex","option","setInputValue","handleMenuChange","open","focusInput","_a","menuStateChange","emit","inputEl","focus","undefined","setNextOptionValue","selectedOptionIndex","menuOptionSelect","value","optionId","getOptionId","setPreviousOptionValue","length","arrowBehaviour","event","preventDefault","getMenuOptions","setHighlightedOption","highlightedIndex","menuOptions","timedOut","autoSetInputValueKeyboardOpen","key","target","id","selectHighlightedOption","isOpen","disabled","isOptionSelected","index","deselectSelectedOptions","optionsToKeepSelected","selectedOptionIndexes","map","forEach","manualSetInputValueKeyboardOpen","isKeyboardCombination","shiftKey","metaKey","ctrlKey","getOptionHighlightedIndex","clickedMultiOptionIndex","Array","from","host","querySelectorAll","handleOptionSelect","handleSingleShiftSelect","menuOptionId","startOptionIndex","handleMultipleShiftSelect","endOptionIndex","stopImmediatePropagation","isMacDevice","emitSelectAllEvents","selectAllButton","focusOnSearchOrSelectInput","parentEl","setFocus","handleOptionClick","label","dataset","handleRetry","retryButtonClicked","handleRetryKeyDown","ev","keyPressed","handleBlur","_b","_c","_d","relatedTarget","menu","removeAttribute","contains","handleMouseDown","handleMenuKeyDown","autoSetValueOnMenuKeyDown","handleMenuKeyUp","handleSelectAllClick","handleSelectAllBlur","classList","remove","handleSelectAllFocus","add","handleSelectAllMouseDown","optionToSelectIndex","lastOptionInSelection","useFocusForSelection","firstOptionSelected","firstOptionInSelection","getFirstOptionInSelection","optionsToSelect","i","push","optionIndex","menuOptionSelectAll","select","icClear","emitMenuKeyPress","isNavKey","menuKeyPress","cancelBubble","isSearchableSelect","menuId","getOptionAriaLabel","parentOption","ariaLabel","description","element","getSortedOptions","sorted","sort","optionA","optionB","recommended","isManualMode","scrollToSelected","selectedOption","querySelector","elTop","offsetTop","offsetHeight","scrollTop","setAttribute","loadUngroupedOptions","children","ungroupedOptionsSet","setMenuScrollbar","optionsHeight","clientHeight","handleTimeoutBlur","timeoutBlur","optionContent","selected","showCheckIcon","h","Fragment","loading","class","icon","hideLabel","innerHTML","variant","component","Check","displayOption","Object","assign","timeout","role","tabindex","onClick","onBlur","onMouseDown","htmlProps","xmlns","viewBox","fill","d","onKeyDown","watchOpenHandler","popperInstance","destroy","watchOptionsHandler","newOptions","some","opt","connectedCallback","disconnectedCallback","removeEventListener","componentWillLoad","addEventListener","componentDidLoad","disableAutoFiltering","onComponentRequiredPropUndefined","prop","propName","inputLabel","componentDidUpdate","inputValueInOptions","highlightedEl","componentDidRender","anchorEl","initPopperJs","handleClickOpen","handleKeyboardOpen","handleSetFirstOption","anchor","createPopper","placement","modifiers","name","offset","fallbackPlacements","rootBoundary","setExternalPopperProps","props","render","selectAllButtonText","hasNoResults","Host","ref","el","onKeyUp","childOption","getOptionsWithoutGroupTitlesCount","onFocus"],"sources":["../web-components/dist/collection/utils/common-helpers.js","../web-components/dist/collection/components/ic-menu/ic-menu.css?tag=ic-menu&encapsulation=scoped","../web-components/dist/collection/components/ic-menu/ic-menu.js"],"sourcesContent":["import purifier from \"dompurify\";\nimport { IC_CUSTOM_ALLOWED_COMPONENTS } from \"./constants\";\n/* istanbul ignore next */\nconst getCustomElementHandling = (allowICPrefix) => ({\n CUSTOM_ELEMENT_HANDLING: {\n tagNameCheck: (tagName) => (allowICPrefix && tagName.startsWith(\"ic-\")) ||\n IC_CUSTOM_ALLOWED_COMPONENTS.includes(tagName),\n attributeNameCheck: /.*/,\n },\n});\nexport const sanitizeHTMLString = (html) => {\n return purifier.sanitize(html, getCustomElementHandling(true));\n};\nexport const sanitizeHTMLIconString = (html) => {\n return purifier.sanitize(html, getCustomElementHandling(false));\n};\n//# sourceMappingURL=common-helpers.js.map\n","/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput {\n /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect {\n /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n\nhtml,\nbody,\ndiv,\nspan,\napplet,\nobject,\niframe,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\np,\nblockquote,\npre,\na,\nabbr,\nacronym,\naddress,\nbig,\ncite,\ncode,\ndel,\ndfn,\nem,\nimg,\nins,\nkbd,\nq,\ns,\nsamp,\nsmall,\nstrike,\nstrong,\nsub,\nsup,\ntt,\nvar,\nb,\nu,\ni,\ncenter,\ndl,\ndt,\ndd,\nol,\nul,\nli,\nfieldset,\nform,\nlabel,\nlegend,\ntable,\ncaption,\ntbody,\ntfoot,\nthead,\ntr,\nth,\ntd,\narticle,\naside,\ncanvas,\ndetails,\nembed,\nfigure,\nfigcaption,\nfooter,\nheader,\nhgroup,\nmenu,\nnav,\noutput,\nruby,\nsection,\nsummary,\ntime,\nmark,\naudio,\nvideo {\n margin: 0;\n padding: 0;\n border: 0;\n font-size: 100%;\n font-style: inherit;\n vertical-align: baseline;\n}\n\n\n/**\n * @prop --ic-z-index-menu: z-index of menu\n */\n\n@media (prefers-reduced-motion: no-preference) {\n :host(.ic-menu-open) .menu {\n transition: max-height var(--ic-transition-duration-slow);\n }\n}\n\n:host {\n max-height: 0;\n width: var(--menu-width, var(--input-width, 20rem));\n color: var(--menu-item-text-color, var(--ic-menu-list-option-text-color));\n\n --ic-typography-color: var(\n --menu-item-text-color,\n var(--ic-menu-list-option-text-color)\n );\n\n background-color: var(\n --menu-bg-color,\n var(--ic-menu-list-option-background-color)\n );\n position: relative;\n z-index: var(--ic-z-index-menu);\n box-sizing: border-box;\n box-shadow: var(--ic-elevation-overlay);\n border-radius: var(--ic-border-radius);\n}\n\n:host(.ic-menu-open:not(.ic-menu-no-focus):focus-within) {\n box-shadow: var(--ic-border-focus);\n outline: var(--ic-hc-focus-outline);\n}\n\n:host(.ic-select-select-all-focused) {\n box-shadow: var(--ic-elevation-overlay) !important;\n}\n\n#retry-button::part(button) {\n height: var(--ic-space-lg);\n}\n\n.small #retry-button::part(button) {\n height: var(--ic-space-md);\n}\n\n:host(.on-dialog) {\n inset: auto !important;\n}\n\n.menu {\n text-decoration: none;\n list-style-type: none;\n border-radius: 1px;\n background-color: var(\n --menu-bg-color,\n var(--ic-menu-list-option-background-color)\n );\n visibility: hidden;\n max-height: 0;\n overflow-y: hidden;\n}\n\n.menu:has(+ .option-bar) {\n border-radius: 0 0 1px 1px;\n}\n\n.menu-scroll {\n overflow-y: auto;\n}\n\n.menu:focus-visible {\n outline: none;\n}\n\n:host(.ic-menu-open) {\n max-height: none;\n display: flex;\n flex-direction: column-reverse;\n border: var(--ic-border-width) solid\n var(--menu-border-color, var(--ic-menu-border-color));\n transition: box-shadow var(--ic-easing-transition-fast);\n}\n\n:host(.ic-menu-open) .menu {\n visibility: visible;\n max-height: calc(var(--ic-space-xl) * 10 + var(--ic-space-xxxs));\n}\n\n:host(.ic-menu-open) .option-bar {\n visibility: visible;\n}\n\n:host(.ic-menu-open) .select-all-button {\n display: block;\n}\n\n:host(.ic-menu-full-width) {\n width: 100%;\n}\n\n.option {\n padding: var(--ic-space-xs) calc(var(--ic-space-xs) - var(--ic-space-1px));\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: var(--ic-space-xs);\n}\n\n.loading-option p {\n margin-bottom: 0 !important;\n}\n\n.option:not(.loading-option) {\n justify-content: space-between;\n}\n\n:host(.ic-menu-small) .option {\n padding: var(--ic-space-xxs) calc(var(--ic-space-xs) - var(--ic-space-1px));\n}\n\n:host(.ic-menu-large) .option {\n padding: var(--ic-space-sm) calc(var(--ic-space-xs) - var(--ic-space-1px));\n}\n\n.option:last-child {\n border-radius: 0 0 1px 1px;\n}\n\n:not(.menu:has(+ .option-bar)) .option:first-child {\n border-radius: 1px 1px 0 0;\n}\n\n.option:not(.disabled-option):hover {\n background-color: var(--ic-menu-list-option-hover-background-color);\n}\n\n.option:not(.disabled-option):active {\n background-color: var(--ic-menu-list-option-pressed-background-color);\n}\n\n.option:focus-visible {\n outline: var(--ic-hc-focus-outline);\n}\n\n.option:not(.disabled-option) .option-description {\n --ic-typography-color: var(\n --menu-item-desc-text-color,\n var(--ic-menu-list-option-description-text-color)\n );\n}\n\n.option .option-label {\n display: flex;\n flex-direction: row;\n align-items: top;\n}\n\n.option .option-label ic-typography {\n max-width: 100%;\n word-wrap: break-word;\n}\n\n.option .option-element {\n margin-top: var(--ic-space-xxs);\n}\n\n.option .option-icon {\n height: var(--ic-space-md);\n width: var(--ic-space-md);\n margin-top: var(--ic-space-xxs);\n margin-right: var(--ic-space-xxxs);\n}\n\n.option-text-container {\n pointer-events: none;\n width: 100%;\n}\n\n.option-text-container.show-check-icon {\n flex-grow: 1;\n}\n\n.option.loading-option .option-text-container {\n margin-left: calc(var(--ic-space-xs) + var(--ic-space-xxxs));\n color: var(--ic-menu-loading-list-option-text-color);\n\n --ic-typography-color: var(--ic-menu-loading-list-option-text-color);\n}\n\n.error-icon-svg {\n height: var(--ic-space-md);\n width: var(--ic-space-md);\n fill: var(--ic-atoms-status-icon-error);\n align-self: center;\n display: flex;\n margin-right: calc(var(--ic-space-xxs) * 1.2);\n}\n\n.loading-error-info {\n display: flex;\n}\n\n.check-icon {\n height: var(--ic-space-lg);\n min-width: var(--ic-space-lg);\n width: var(--ic-space-lg);\n pointer-events: none;\n}\n\n.focused-option .check-icon * {\n fill: currentcolor;\n}\n\n.option-group-title {\n padding: var(--ic-space-lg) calc(var(--ic-space-xs) - var(--ic-space-1px))\n var(--ic-space-xs);\n\n --ic-typography-color: var(--ic-menu-option-group-label-text-color);\n}\n\n:host(.ic-menu-small) .option-group-title {\n padding: var(--ic-space-sm) calc(var(--ic-space-xs) - var(--ic-space-1px))\n var(--ic-space-xxs);\n}\n\n.last-recommended-option {\n border-bottom: var(--ic-menu-last-recommended-option-border);\n}\n\n.disabled-option {\n color: var(--ic-atoms-list-option-text-disabled-light);\n\n --ic-typography-color: var(--ic-atoms-list-option-text-disabled-light);\n\n cursor: default;\n pointer-events: none;\n}\n\n.focused-option,\n.focused-option .option-description {\n background-color: var(--ic-color-focus-inner) !important;\n color: var(--ic-atoms-list-option-text-focused-light) !important;\n\n --ic-typography-color: var(\n --ic-atoms-list-option-text-focused-light\n ) !important;\n}\n\n:host(.no-results) li {\n cursor: no-drop;\n}\n\n:host(.no-results) li:hover {\n background-color: transparent;\n}\n\n.option-bar {\n padding: var(--ic-space-xxs) var(--ic-space-xs);\n display: flex;\n align-items: center;\n justify-content: space-between;\n background-color: var(--ic-menu-option-bar-background-color);\n visibility: hidden;\n border-bottom: var(--ic-border-width) solid\n var(--ic-menu-option-bar-divider-color);\n border-radius: 1px 1px 0 0;\n}\n\n.option-bar p {\n margin-bottom: 0 !important;\n}\n\n:host(.ic-menu-large) .option-bar {\n padding: var(--ic-space-xs);\n}\n\n.select-all-button {\n display: none;\n}\n\n.select-all-button:focus {\n z-index: calc(var(--ic-z-index-menu) + 1);\n}\n\n@media (forced-colors: active) {\n .focused-option:focus {\n outline: none;\n border: 0.125rem solid transparent;\n }\n\n .disabled-option {\n color: GrayText;\n\n --ic-typography-color: GrayText;\n }\n}\n\n/* Breakpoint value chosen as it's a small amount bigger than the menu's default width */\n@media screen AND (max-width: 22rem) {\n :host {\n max-width: var(--menu-width, var(--input-width, 20rem));\n width: 100%;\n }\n}\n","import { h, Host, Fragment, } from \"@stencil/core\";\nimport { createPopper, } from \"@popperjs/core\";\nimport Check from \"../../assets/check-icon.svg\";\nimport { getOptionsWithoutGroupTitlesCount, isMacDevice, onComponentRequiredPropUndefined, } from \"../../utils/helpers\";\nimport { sanitizeHTMLString, sanitizeHTMLIconString, } from \"../../utils/common-helpers\";\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport class Menu {\n constructor() {\n this.ACTIVE_DESCENDANT = \"aria-activedescendant\";\n this.CLEAR_BUTTON_ID = \"clear-button\";\n this.SEARCH_BAR_TAG = \"IC-SEARCH-BAR\";\n this.disabledOptionSelected = false;\n this.hasPreviouslyBlurred = false;\n this.hasTimedOut = false;\n this.isLoading = false;\n this.lastOptionSelected = null; // Index of last option selected\n this.lastOptionFocused = null; // Index of last option focused\n this.multiOptionClicked = null;\n this.preventClickOpen = false; // Prevents menu re-opening immediately after it is closed on blur when clicking input.\n this.preventMenuFocus = false; // (When multiple) ensures focus moves straight to select all button from menu.\n this.shiftPressed = false;\n this.ungroupedOptions = [];\n this.focusFromSearchKeypress = false;\n this.initialOptionsListRender = false;\n this.keyboardNav = false;\n this.preventIncorrectTabOrder = false;\n this.popperProps = {};\n /**\n * Determines whether options manually set as values (by pressing 'Enter') when they receive focus using keyboard navigation.\n */\n this.activationType = \"automatic\";\n /**\n * @internal If `true`, autofocus will be applied on selected item when menu is open.\n */\n this.autofocusOnSelected = true;\n /**\n * If `true`, the menu will close when an option is selected.\n */\n this.closeOnSelect = true;\n /**\n * If `true`, the menu will fill the width of the container.\n */\n this.fullWidth = false;\n /**\n * The custom name for the label field for IcMenuOption.\n */\n this.labelField = \"label\";\n /**\n * @internal - flag to specify if menu is in a ic-select multiple.\n */\n this.multiSelect = false;\n /**\n * @internal - flag to specify if menu is in a searchable ic-select.\n */\n this.searchableSelect = false;\n /**\n * @internal - flag to specify if menu is in a ic-search-bar.\n */\n this.searchBar = false;\n /**\n * Specify the mode search bar uses to search. `navigation` allows for quick lookups of a set of values, `query` allows for more general searches.\n */\n this.searchMode = \"navigation\";\n /**\n * @internal If `true`, the icOptionSelect event will be fired on enter instead of ArrowUp and ArrowDown.\n */\n this.selectOnEnter = false;\n /**\n * The size of the menu.\n */\n this.size = \"medium\";\n /**\n * The custom name for the value field for IcMenuOption.\n */\n this.valueField = \"value\";\n this.handleClearListener = () => {\n this.optionHighlighted = \"\";\n };\n this.handleSubmitSearch = () => {\n const highlightedOptionIndex = this.options.findIndex((option) => option[this.valueField] === this.optionHighlighted);\n this.setInputValue(highlightedOptionIndex);\n };\n this.handleMenuChange = (open, focusInput) => {\n var _a;\n this.menuStateChange.emit({ open, focusInput });\n if (!open) {\n if (focusInput !== false) {\n (_a = this.inputEl) === null || _a === void 0 ? void 0 : _a.focus();\n this.preventClickOpen = false;\n }\n // Reset optionHighlighted so previously highlighted option doesn't get reselected when Enter pressed\n if (this.multiSelect) {\n this.optionHighlighted = undefined;\n this.multiOptionClicked = null;\n }\n }\n };\n this.setNextOptionValue = (selectedOptionIndex) => {\n if (this.ungroupedOptions[selectedOptionIndex + 1]) {\n this.menuOptionSelect.emit({\n value: this.ungroupedOptions[selectedOptionIndex + 1][this.valueField],\n optionId: this.getOptionId(this.ungroupedOptions[selectedOptionIndex + 1][this.valueField]),\n });\n }\n else {\n this.menuOptionSelect.emit({\n value: this.ungroupedOptions[0][this.valueField],\n optionId: this.getOptionId(this.ungroupedOptions[0][this.valueField]),\n });\n }\n };\n this.setPreviousOptionValue = (selectedOptionIndex) => {\n if (this.ungroupedOptions[selectedOptionIndex - 1]) {\n this.menuOptionSelect.emit({\n value: this.ungroupedOptions[selectedOptionIndex - 1][this.valueField],\n optionId: this.getOptionId(this.ungroupedOptions[selectedOptionIndex - 1][this.valueField]),\n });\n }\n else {\n this.menuOptionSelect.emit({\n value: this.ungroupedOptions[this.ungroupedOptions.length - 1][this.valueField],\n optionId: this.getOptionId(this.ungroupedOptions[this.ungroupedOptions.length - 1][this.valueField]),\n });\n }\n };\n // Open menu when up or down arrow keys are pressed\n this.arrowBehaviour = (event) => {\n event.preventDefault();\n this.handleMenuChange(true);\n };\n this.getMenuOptions = () => this.searchBar ? this.options : this.ungroupedOptions;\n // Set option that is focused and so should show focus state\n this.setHighlightedOption = (highlightedIndex) => {\n const menuOptions = this.getMenuOptions();\n menuOptions[highlightedIndex] &&\n !menuOptions[highlightedIndex].timedOut &&\n (this.optionHighlighted =\n menuOptions[highlightedIndex][this.valueField] || undefined);\n };\n // Determines keyboard behaviour when selection is automatic\n // (i.e. you don't have to press Enter select an option - just focus on it)\n // and menu is closed\n this.autoSetInputValueKeyboardOpen = (event) => {\n const selectedOptionIndex = this.ungroupedOptions.findIndex((option) => option[this.valueField] === this.value);\n this.keyboardNav = false;\n switch (event.key) {\n case \"ArrowDown\":\n this.keyboardNav = true;\n this.arrowBehaviour(event);\n this.setNextOptionValue(selectedOptionIndex);\n break;\n case \"ArrowUp\":\n this.keyboardNav = true;\n this.arrowBehaviour(event);\n this.setPreviousOptionValue(selectedOptionIndex);\n break;\n case \" \":\n case \"Enter\":\n if (event.target.id !== this.CLEAR_BUTTON_ID) {\n this.handleMenuChange(true);\n }\n break;\n }\n };\n this.selectHighlightedOption = (options, highlightedOptionIndex) => {\n if (!this.isLoading && !this.hasTimedOut) {\n this.keyboardNav = true;\n }\n const isOpen = this.searchBar || this.searchableSelect || this.open;\n if (isOpen) {\n if (highlightedOptionIndex >= 0) {\n if (options[highlightedOptionIndex] !== undefined) {\n if (this.searchBar &&\n options[highlightedOptionIndex].disabled === true) {\n this.disabledOptionSelected = true;\n }\n else {\n this.setInputValue(highlightedOptionIndex);\n }\n }\n }\n else {\n this.setInputValue(highlightedOptionIndex);\n }\n }\n else {\n this.handleMenuChange(true);\n }\n };\n // Check if option is selected based on the index of the option\n this.isOptionSelected = (index) => {\n const menuOptions = this.getMenuOptions();\n return this.value\n ? this.value.includes(menuOptions[index][this.valueField])\n : false;\n };\n // Deselect currently selected options when shift pressed, but keep certain options selected\n this.deselectSelectedOptions = (optionsToKeepSelected) => {\n const menuOptions = this.getMenuOptions();\n if (this.value) {\n const selectedOptionIndexes = this.value.map((value) => {\n return menuOptions.findIndex((option) => option[this.valueField] === value);\n });\n // Call setInputValue (which toggles the selected state) on options that need to be deselected\n selectedOptionIndexes.forEach((index) => !optionsToKeepSelected.includes(index) && this.setInputValue(index));\n }\n };\n // Determines keyboard behaviour when selection is manual (i.e. when you have to press Enter to select an option)\n this.manualSetInputValueKeyboardOpen = (event) => {\n const menuOptions = this.getMenuOptions();\n // For preventing focus disappearing on currently focused option when Shift / Cmd / Ctrl pressed\n // (i.e. when user is likely in the middle of executing a keyboard combination to select options)\n const isKeyboardCombination = event.shiftKey || event.metaKey || event.ctrlKey;\n const highlightedOptionIndex = this.getOptionHighlightedIndex();\n const clickedMultiOptionIndex = menuOptions.findIndex((option) => option[this.valueField] === this.multiOptionClicked);\n const getOptionId = (index) => { var _a; return (_a = Array.from(this.host.querySelectorAll(\"li\"))[index]) === null || _a === void 0 ? void 0 : _a.id; };\n // Space press should be equivalent to Enter when multi-select\n if (event.key === \" \" && this.multiSelect) {\n this.handleOptionSelect(event, highlightedOptionIndex);\n }\n else {\n switch (event.key) {\n case \"ArrowDown\":\n this.keyboardNav = true;\n this.arrowBehaviour(event);\n if (this.multiOptionClicked) {\n // Set focus to option last clicked\n // Prevents it resetting to the top of the menu when user switches to using keyboard\n this.setHighlightedOption(clickedMultiOptionIndex);\n this.multiOptionClicked = null;\n }\n else {\n this.handleSingleShiftSelect(event, highlightedOptionIndex, menuOptions);\n if (highlightedOptionIndex < menuOptions.length - 1) {\n this.setHighlightedOption(highlightedOptionIndex + 1);\n this.menuOptionId.emit({\n optionId: getOptionId(highlightedOptionIndex + 1),\n });\n this.handleSingleShiftSelect(event, highlightedOptionIndex + 1, menuOptions);\n }\n else {\n this.setHighlightedOption(0);\n this.menuOptionId.emit({\n optionId: getOptionId(0),\n });\n this.handleSingleShiftSelect(event, 0, menuOptions);\n }\n // Deselect currently selected options if arrow was pressed for first time after shift is held\n if (this.multiSelect && this.shiftPressed) {\n this.deselectSelectedOptions([\n highlightedOptionIndex,\n this.getOptionHighlightedIndex(),\n ]);\n this.shiftPressed = false;\n }\n }\n this.lastOptionFocused = this.getOptionHighlightedIndex();\n this.preventIncorrectTabOrder = false;\n this.focusFromSearchKeypress = false;\n break;\n case \"ArrowUp\":\n this.keyboardNav = true;\n this.arrowBehaviour(event);\n if (this.multiOptionClicked) {\n // Set focus to option last clicked\n // Prevents it resetting to the bottom of the menu when user switches to using keyboard\n this.setHighlightedOption(clickedMultiOptionIndex);\n this.multiOptionClicked = null;\n }\n else {\n this.handleSingleShiftSelect(event, highlightedOptionIndex, menuOptions);\n if (highlightedOptionIndex <= 0 ||\n highlightedOptionIndex > menuOptions.length + 1) {\n this.setHighlightedOption(menuOptions.length - 1);\n this.menuOptionId.emit({\n optionId: getOptionId(menuOptions.length - 1),\n });\n this.handleSingleShiftSelect(event, menuOptions.length - 1, menuOptions);\n }\n else {\n this.setHighlightedOption(highlightedOptionIndex - 1);\n this.menuOptionId.emit({\n optionId: getOptionId(highlightedOptionIndex - 1),\n });\n this.handleSingleShiftSelect(event, highlightedOptionIndex - 1, menuOptions);\n }\n // Deselect currently selected options if arrow was pressed for first time after shift is held\n if (this.multiSelect && this.shiftPressed) {\n this.deselectSelectedOptions([\n highlightedOptionIndex,\n this.getOptionHighlightedIndex(),\n ]);\n this.shiftPressed = false;\n }\n }\n this.lastOptionFocused = this.getOptionHighlightedIndex();\n this.preventIncorrectTabOrder = false;\n this.focusFromSearchKeypress = false;\n break;\n case \"Home\": {\n const startOptionIndex = 0;\n this.keyboardNav = true;\n event.preventDefault();\n this.arrowBehaviour(event);\n this.setHighlightedOption(startOptionIndex);\n this.menuOptionId.emit({\n optionId: getOptionId(startOptionIndex),\n });\n if (event.shiftKey && event.ctrlKey) {\n this.handleMultipleShiftSelect(startOptionIndex);\n }\n this.lastOptionFocused = startOptionIndex;\n this.lastOptionSelected = startOptionIndex;\n break;\n }\n case \"End\": {\n const endOptionIndex = menuOptions.length - 1;\n this.keyboardNav = true;\n event.preventDefault();\n this.arrowBehaviour(event);\n this.setHighlightedOption(endOptionIndex);\n this.menuOptionId.emit({\n optionId: getOptionId(endOptionIndex),\n });\n if (event.shiftKey && event.ctrlKey) {\n this.handleMultipleShiftSelect(endOptionIndex);\n }\n this.lastOptionFocused = endOptionIndex;\n this.lastOptionSelected = endOptionIndex;\n break;\n }\n case \" \":\n if (!isKeyboardCombination) {\n this.keyboardNav = false;\n }\n if (this.searchBar || this.searchableSelect) {\n break;\n }\n else {\n if (event.target.id !== this.CLEAR_BUTTON_ID) {\n this.handleMenuChange(true);\n }\n }\n break;\n case \"Enter\":\n event.preventDefault();\n if (!isKeyboardCombination) {\n this.keyboardNav = false;\n }\n this.handleOptionSelect(event, highlightedOptionIndex);\n break;\n case \"Escape\":\n if (this.open) {\n event.stopImmediatePropagation();\n }\n this.handleMenuChange(false);\n this.menuOptionId.emit({ optionId: undefined });\n break;\n case \"a\":\n // Checks if Cmd (meta) key is pressed if Mac device (while excluding meta key on Windows)\n // Otherwise, if a different OS, checks Ctrl key\n if ((isMacDevice() && event.metaKey) ||\n (!isMacDevice() && event.ctrlKey)) {\n this.emitSelectAllEvents();\n this.lastOptionFocused = null;\n this.lastOptionSelected = null;\n }\n break;\n case \"Shift\":\n case \"Tab\":\n if (event.key === \"Shift\") {\n this.shiftPressed = true;\n }\n if (this.searchBar) {\n this.keyboardNav = true;\n }\n if (this.multiSelect) {\n if (this.open && !event.shiftKey && this.selectAllButton) {\n event.preventDefault();\n this.selectAllButton.focus(); // Move focus to select all button instead of focused option\n this.preventMenuFocus = true;\n this.preventClickOpen = true;\n this.optionHighlighted = undefined; // Stop any option focus states showing when focus moved to select all button\n }\n }\n else {\n this.preventIncorrectTabOrder = true;\n }\n break;\n default:\n if (!isKeyboardCombination) {\n this.keyboardNav = false;\n }\n this.focusOnSearchOrSelectInput(menuOptions, highlightedOptionIndex);\n }\n }\n };\n this.setInputValue = (highlightedOptionIndex) => {\n const menuOptions = this.getMenuOptions();\n if (menuOptions[highlightedOptionIndex] !== undefined) {\n this.menuOptionSelect.emit({\n value: menuOptions[highlightedOptionIndex][this.valueField],\n });\n if (this.closeOnSelect) {\n this.optionHighlighted = undefined;\n this.menuOptionId.emit({ optionId: undefined });\n }\n }\n if (this.closeOnSelect) {\n if (!this.hasTimedOut) {\n this.handleMenuChange(false);\n }\n else {\n this.parentEl.setFocus();\n }\n }\n };\n this.handleOptionClick = (event) => {\n const { value, label } = event.target.dataset;\n if (this.multiSelect) {\n const menuOptions = this.getMenuOptions();\n const selectedOptionIndex = menuOptions.findIndex((option) => option[this.valueField] === value);\n this.handleOptionSelect(event, selectedOptionIndex, true);\n this.multiOptionClicked = value || null;\n }\n else {\n this.menuOptionSelect.emit({ value, label });\n this.handleMenuChange(false);\n }\n this.optionHighlighted = undefined;\n };\n this.handleRetry = () => {\n this.retryButtonClicked.emit({ value: this.value });\n };\n this.handleRetryKeyDown = (ev) => {\n if (ev.key === \"Enter\" || ev.key === \" \") {\n ev.preventDefault();\n this.retryButtonClicked.emit({ value: this.value, keyPressed: ev.key });\n }\n };\n this.handleBlur = (event) => {\n var _a, _b, _c, _d;\n if (event.relatedTarget !== this.inputEl) {\n if (event.relatedTarget === this.selectAllButton) {\n (_a = this.menu) === null || _a === void 0 ? void 0 : _a.removeAttribute(this.ACTIVE_DESCENDANT);\n }\n if (!(((_b = this.menu) === null || _b === void 0 ? void 0 : _b.contains(event.relatedTarget)) ||\n event.relatedTarget === this.selectAllButton)) {\n this.handleMenuChange(false, this.hasPreviouslyBlurred);\n (_c = this.menu) === null || _c === void 0 ? void 0 : _c.removeAttribute(this.ACTIVE_DESCENDANT);\n this.lastOptionFocused = null;\n this.lastOptionSelected = null;\n }\n }\n else {\n this.handleMenuChange(false);\n this.preventClickOpen = true;\n (_d = this.menu) === null || _d === void 0 ? void 0 : _d.removeAttribute(this.ACTIVE_DESCENDANT);\n this.lastOptionFocused = null;\n this.lastOptionSelected = null;\n }\n if (!this.searchBar)\n this.hasPreviouslyBlurred = !!event.relatedTarget;\n };\n this.handleMouseDown = (event) => {\n event.preventDefault();\n };\n this.handleMenuKeyDown = (event) => {\n if (this.activationType === \"automatic\") {\n this.autoSetValueOnMenuKeyDown(event);\n }\n else if (this.activationType === \"manual\" && !this.searchBar) {\n this.manualSetInputValueKeyboardOpen(event);\n }\n };\n this.handleMenuKeyUp = (event) => {\n if (event.key === \"Tab\" && event.shiftKey) {\n this.preventClickOpen = false;\n }\n if (event.key === \"Enter\" && this.disabledOptionSelected) {\n this.disabledOptionSelected = false;\n event.stopImmediatePropagation();\n }\n if (event.key === \"Shift\") {\n this.shiftPressed = false;\n }\n };\n this.handleSelectAllClick = () => {\n var _a;\n this.keyboardNav = false;\n (_a = this.menu) === null || _a === void 0 ? void 0 : _a.focus();\n this.emitSelectAllEvents();\n this.lastOptionFocused = null;\n this.lastOptionSelected = null;\n };\n this.handleSelectAllBlur = (event) => {\n var _a;\n this.host.classList.remove(\"ic-select-select-all-focused\");\n if (!((_a = this.menu) === null || _a === void 0 ? void 0 : _a.contains(event.relatedTarget))) {\n this.handleMenuChange(false, false);\n }\n };\n this.handleSelectAllFocus = () => {\n this.host.classList.add(\"ic-select-select-all-focused\");\n this.lastOptionFocused = null;\n this.lastOptionSelected = null;\n };\n // Fix for Safari - select all button click was causing menu to close\n this.handleSelectAllMouseDown = (event) => {\n event.preventDefault();\n };\n // When shift key is being used to select contiguous options one by one on a multi-select\n // I.e. holding shift and pressing up and down arrow keys\n this.handleSingleShiftSelect = (event, optionToSelectIndex, options) => {\n if (this.multiSelect &&\n event.shiftKey &&\n !this.isOptionSelected(optionToSelectIndex)) {\n this.selectHighlightedOption(options, optionToSelectIndex);\n this.lastOptionSelected = optionToSelectIndex;\n }\n };\n // When shift key is being used to select multiple options at once on a multi-select\n // I.e. holding shift when selecting another option\n this.handleMultipleShiftSelect = (lastOptionInSelection, useFocusForSelection = false, firstOptionSelected = null) => {\n this.shiftPressed = false;\n const firstOptionInSelection = firstOptionSelected === null\n ? this.getFirstOptionInSelection(useFocusForSelection)\n : firstOptionSelected;\n if (firstOptionInSelection !== null) {\n const optionsToSelect = [];\n if (firstOptionInSelection < lastOptionInSelection) {\n for (let i = firstOptionInSelection; i < lastOptionInSelection + 1; i++) {\n optionsToSelect.push(i);\n }\n }\n else {\n for (let i = firstOptionInSelection; i > lastOptionInSelection - 1; i--) {\n optionsToSelect.push(i);\n }\n }\n optionsToSelect.forEach((optionIndex) => !this.isOptionSelected(optionIndex) && this.setInputValue(optionIndex));\n this.deselectSelectedOptions(optionsToSelect);\n }\n };\n this.handleOptionSelect = (event, optionIndex, useFocusForSelection = false) => {\n const menuOptions = this.getMenuOptions();\n const firstOptionInSelection = this.getFirstOptionInSelection(useFocusForSelection);\n if (event.shiftKey && firstOptionInSelection !== null) {\n this.handleMultipleShiftSelect(optionIndex, useFocusForSelection, firstOptionInSelection);\n }\n else {\n this.selectHighlightedOption(menuOptions, optionIndex);\n }\n this.lastOptionFocused = optionIndex;\n this.lastOptionSelected = optionIndex;\n };\n this.getFirstOptionInSelection = (useFocusForSelection) => {\n return useFocusForSelection && this.lastOptionFocused !== null\n ? this.lastOptionFocused\n : this.lastOptionSelected !== null\n ? this.lastOptionSelected\n : null;\n };\n this.emitSelectAllEvents = () => {\n var _a, _b;\n // Select all if there is either no value or not all options are selected\n // 'true' means select all, 'false' means clear all\n this.menuOptionSelectAll.emit({\n select: !this.value || !(((_a = this.value) === null || _a === void 0 ? void 0 : _a.length) === this.ungroupedOptions.length),\n });\n // Emit clear event if all options are selected\n if (((_b = this.value) === null || _b === void 0 ? void 0 : _b.length) === this.ungroupedOptions.length) {\n this.icClear.emit();\n }\n };\n this.emitMenuKeyPress = (isNavKey, key) => {\n this.menuKeyPress.emit({ isNavKey: isNavKey, key: key });\n };\n // Determines keyboard behaviour when selection is automatic\n // (i.e. you don't have to press Enter select an option - just focus on it)\n // and menu is focused\n this.autoSetValueOnMenuKeyDown = (event) => {\n var _a, _b;\n event.cancelBubble = true;\n const selectedOptionIndex = this.ungroupedOptions.findIndex((option) => option[this.valueField] === this.value);\n const isSearchableSelect = !!this.inputEl && this.inputEl.tagName === \"INPUT\";\n this.keyboardNav = false;\n switch (event.key) {\n case \" \":\n event.preventDefault();\n break;\n case \"ArrowUp\":\n if (!this.hasTimedOut) {\n event.preventDefault();\n this.setPreviousOptionValue(selectedOptionIndex);\n this.keyboardNav = true;\n }\n break;\n case \"ArrowDown\":\n if (!this.hasTimedOut) {\n event.preventDefault();\n this.setNextOptionValue(selectedOptionIndex);\n this.keyboardNav = true;\n }\n break;\n case \"Home\":\n this.menuOptionSelect.emit({\n value: this.ungroupedOptions[0][this.valueField],\n });\n this.keyboardNav = true;\n break;\n case \"End\":\n this.menuOptionSelect.emit({\n value: this.ungroupedOptions[this.ungroupedOptions.length - 1][this.valueField],\n });\n this.keyboardNav = true;\n break;\n case \"Enter\":\n !this.hasTimedOut && this.handleMenuChange(false);\n break;\n case \"Escape\":\n this.handleMenuChange(false);\n break;\n case \"Backspace\":\n if (isSearchableSelect) {\n (_a = this.inputEl) === null || _a === void 0 ? void 0 : _a.focus();\n }\n break;\n case \"Shift\":\n break;\n default:\n if (isSearchableSelect && event.key !== \"Tab\" && !this.hasTimedOut) {\n (_b = this.inputEl) === null || _b === void 0 ? void 0 : _b.focus();\n }\n if (event.key.length === 1) {\n this.keyboardNav = true;\n }\n break;\n }\n this.emitMenuKeyPress(this.keyboardNav, event.key);\n };\n this.getOptionId = (value) => {\n return `${this.menuId}-${value}`;\n };\n this.getOptionAriaLabel = (option, parentOption) => {\n let ariaLabel = option[this.labelField];\n if (option.description) {\n ariaLabel = `${ariaLabel}, ${option.description}`;\n }\n if (option.element) {\n ariaLabel = `${ariaLabel}, ${option.element.ariaLabel}`;\n }\n if (parentOption) {\n return `${ariaLabel}, ${parentOption[this.labelField]} group`;\n }\n else {\n return ariaLabel;\n }\n };\n this.getSortedOptions = (options) => {\n let sorted = [];\n if (options.sort) {\n sorted = options.sort((optionA, optionB) => optionA.recommended && !optionB.recommended ? -1 : 0);\n }\n return sorted;\n };\n this.getOptionHighlightedIndex = () => {\n const menuOptions = this.getMenuOptions();\n return menuOptions.findIndex((option) => option[this.valueField] === this.optionHighlighted);\n };\n this.isManualMode = this.activationType === \"manual\";\n this.scrollToSelected = (menu) => {\n var _a;\n const selectedOption = this.selectOnEnter\n ? this.host.querySelector(`li[data-value=\"${this.optionHighlighted}\"]`)\n : menu.querySelector(\".option[aria-selected='true']\");\n if (selectedOption) {\n const elTop = selectedOption.offsetTop + selectedOption.offsetHeight;\n if (elTop > menu.scrollTop + menu.offsetHeight ||\n elTop < menu.scrollTop + menu.offsetHeight) {\n menu.scrollTop = selectedOption.offsetTop;\n }\n // 'aria-activedescendant' affects screen reader focus\n // https://www.w3.org/TR/2017/WD-wai-aria-practices-1.1-20170628/#kbd_focus_activedescendant\n (_a = this.menu) === null || _a === void 0 ? void 0 : _a.setAttribute(this.ACTIVE_DESCENDANT, selectedOption.id);\n selectedOption.focus();\n }\n };\n // Set 'ungroupedOptions' variable and emit its value\n // - this is all the options with disabled options and group titles removed\n this.loadUngroupedOptions = () => {\n if (this.options.length > 0 && this.options.map) {\n this.options.map((option) => {\n if (option.children) {\n option.children.map((option) => !option.disabled && this.ungroupedOptions.push(option));\n }\n else if (!option.disabled) {\n this.ungroupedOptions.push(option);\n }\n });\n }\n this.ungroupedOptions = this.getSortedOptions(this.ungroupedOptions);\n this.ungroupedOptionsSet.emit({ options: this.ungroupedOptions });\n };\n this.setMenuScrollbar = () => {\n var _a;\n let optionsHeight = 0;\n this.host\n .querySelectorAll(\".option, .option-group-title\")\n .forEach((option) => (optionsHeight += option.clientHeight));\n if (optionsHeight >= 320) {\n (_a = this.menu) === null || _a === void 0 ? void 0 : _a.classList.add(\"menu-scroll\");\n }\n };\n this.handleTimeoutBlur = (ev) => {\n this.timeoutBlur.emit({ ev });\n };\n this.optionContent = (option, selected) => {\n var _a;\n const showCheckIcon = !!option[this.valueField] &&\n !!this.value &&\n selected &&\n ((_a = this.parentEl) === null || _a === void 0 ? void 0 : _a.tagName) !== this.SEARCH_BAR_TAG;\n return (h(Fragment, null, option.loading && h(\"ic-loading-indicator\", { size: \"icon\" }), h(\"div\", { class: {\n \"option-text-container\": true,\n \"show-check-icon\": showCheckIcon,\n } }, (option.icon || !option.hideLabel) && (h(\"div\", { class: \"option-label\" }, option.icon && (h(\"div\", { class: \"option-icon\", innerHTML: sanitizeHTMLIconString(option.icon), \"aria-hidden\": \"true\" })), !option.hideLabel && (h(\"ic-typography\", { variant: \"body\", \"aria-hidden\": \"true\" }, option[this.labelField])))), option.description && (h(\"ic-typography\", { id: `${this.getOptionId(option[this.valueField])}-description`, class: \"option-description\", variant: \"caption\", \"aria-hidden\": \"true\" }, h(\"p\", null, option.description))), option.element && (h(\"div\", { class: {\n \"option-element\": option.icon || !option.hideLabel || option.description,\n }, innerHTML: sanitizeHTMLString(option.element.component), \"aria-hidden\": \"true\" }))), showCheckIcon && h(\"span\", { class: \"check-icon\", innerHTML: Check })));\n };\n this.displayOption = (option, selected, index, parentOption) => {\n var _a;\n const { open, keyboardNav, isManualMode, initialOptionsListRender, optionHighlighted, options, } = this;\n return (h(\"li\", Object.assign({ id: this.getOptionId(option[this.valueField]), class: {\n option: true,\n \"focused-option\": isManualMode\n ? (keyboardNav || initialOptionsListRender) &&\n option[this.valueField] === optionHighlighted\n : keyboardNav && selected,\n \"last-recommended-option\": !!(option.recommended &&\n options[index + 1] &&\n !options[index + 1].recommended),\n \"disabled-option\": !!option.disabled,\n \"loading-option\": !!option.loading,\n timeout: !!option.timedOut,\n }, role: \"option\", tabindex: open &&\n (selected || option[this.valueField] === optionHighlighted) &&\n keyboardNav\n ? \"0\"\n : \"-1\", \"aria-label\": this.getOptionAriaLabel(option, parentOption), \"aria-selected\": selected ? \"true\" : \"false\", \"aria-disabled\": option.disabled ? \"true\" : \"false\", onClick: !option.timedOut && !option.loading\n ? this.handleOptionClick\n : undefined, onBlur: this.handleBlur, onMouseDown: this.handleMouseDown, \"data-value\": option[this.valueField], \"data-label\": option[this.labelField] }, ((_a = option.htmlProps) !== null && _a !== void 0 ? _a : {})), option.timedOut ? (h(Fragment, null, h(\"div\", { class: \"loading-error-info\" }, h(\"svg\", { class: \"error-icon-svg\", xmlns: \"http://www.w3.org/2000/svg\", viewBox: \"0 0 24 24\", fill: \"#000000\" }, h(\"title\", null, \"Error\"), h(\"g\", null, h(\"path\", { d: \"M8.77 3L3.5 8.27V15.73L8.77 21H16.23L21.5 15.73V8.27L16.23 3M8.91 7L12.5 10.59L16.09 7L17.5 8.41L13.91 12L17.5 15.59L16.09 17L12.5 13.41L8.91 17L7.5 15.59L11.09 12L7.5 8.41\" }))), h(\"ic-typography\", { variant: \"label\" }, option[this.labelField])), h(\"ic-button\", { size: \"small\", variant: \"tertiary\", onClick: this.handleRetry, onKeyDown: this.handleRetryKeyDown, onBlur: this.handleTimeoutBlur, id: \"retry-button\" }, \"Retry\"))) : (this.optionContent(option, selected))));\n };\n }\n watchOpenHandler() {\n if (!this.open && this.popperInstance) {\n this.popperInstance.destroy();\n this.popperInstance = null;\n }\n }\n watchOptionsHandler(newOptions) {\n this.hasTimedOut = newOptions.some((opt) => opt.timedOut);\n this.isLoading = newOptions.some((opt) => opt.loading);\n this.ungroupedOptions = [];\n this.loadUngroupedOptions();\n }\n connectedCallback() {\n if (this.searchBar) {\n if (this.searchMode === \"navigation\")\n this.setHighlightedOption(0);\n this.initialOptionsListRender = true;\n }\n }\n disconnectedCallback() {\n var _a, _b, _c;\n (_a = this.popperInstance) === null || _a === void 0 ? void 0 : _a.destroy();\n (_b = this.parentEl) === null || _b === void 0 ? void 0 : _b.removeEventListener(\"icClear\", this.handleClearListener);\n (_c = this.parentEl) === null || _c === void 0 ? void 0 : _c.removeEventListener(\"icSubmitSearch\", this.handleSubmitSearch);\n }\n componentWillLoad() {\n var _a, _b, _c, _d;\n this.loadUngroupedOptions();\n (_a = this.parentEl) === null || _a === void 0 ? void 0 : _a.addEventListener(\"icClear\", this.handleClearListener);\n (_b = this.parentEl) === null || _b === void 0 ? void 0 : _b.addEventListener(\"icSubmitSearch\", this.handleSubmitSearch);\n this.hasTimedOut = (_c = this.options) === null || _c === void 0 ? void 0 : _c.some((opt) => opt.timedOut);\n this.isLoading = (_d = this.options) === null || _d === void 0 ? void 0 : _d.some((opt) => opt.loading);\n }\n componentDidLoad() {\n if (this.searchBar &&\n this.parentEl.disableAutoFiltering) {\n this.focusFromSearchKeypress = true;\n }\n onComponentRequiredPropUndefined([\n { prop: this.open, propName: \"open\" },\n { prop: this.options, propName: \"options\" },\n { prop: this.menuId, propName: \"menu-id\" },\n { prop: this.inputLabel, propName: \"input-label\" },\n //NOTE: no check for value, input-el or anchor-el as otherwise get console errors on first load of select component\n ], \"Menu\");\n }\n componentDidUpdate() {\n const inputValueInOptions = this.options.some((option) => option[this.valueField] === this.value);\n if (this.menu &&\n this.open &&\n this.options.length !== 0 &&\n !this.preventMenuFocus) {\n if (this.value &&\n this.keyboardNav &&\n inputValueInOptions &&\n this.autofocusOnSelected &&\n !this.searchableSelect) {\n this.scrollToSelected(this.menu);\n }\n else if (this.selectOnEnter) {\n this.menu.focus();\n }\n else if (!!this.optionHighlighted &&\n !this.focusFromSearchKeypress &&\n !this.preventIncorrectTabOrder) {\n const highlightedEl = this.host.querySelector(`li[data-value=\"${this.optionHighlighted}\"]`);\n if (highlightedEl) {\n this.menu.setAttribute(this.ACTIVE_DESCENDANT, highlightedEl.id);\n highlightedEl.focus();\n }\n }\n else if (this.inputEl && this.inputEl.tagName !== \"INPUT\") {\n this.menu.focus();\n }\n }\n if (this.menu && this.open && !this.value && this.selectOnEnter) {\n this.scrollToSelected(this.menu);\n }\n this.preventMenuFocus = false;\n }\n componentDidRender() {\n if (this.open && !this.popperInstance && this.anchorEl) {\n this.initPopperJs(this.anchorEl);\n }\n if (this.open && !!this.options.length) {\n this.setMenuScrollbar();\n }\n }\n /**\n * @internal If menu is opened with the mouse, emit menuStateChange custom event.\n */\n async handleClickOpen() {\n if (!this.preventClickOpen) {\n this.menuStateChange.emit({ open: !this.open });\n this.keyboardNav = false;\n }\n this.preventClickOpen = false;\n }\n /**\n * Used alongside activationType\n * If menu is opened via keyboard navigation (i.e. Enter, ArrowUp or ArrowDown), emit optionSelect custom event.\n * @param {KeyboardEvent} event The keyboard event which is available when handleKeyboardOpen is invoked.\n */\n async handleKeyboardOpen(event) {\n if (this.activationType === \"automatic\") {\n this.autoSetInputValueKeyboardOpen(event);\n }\n else {\n this.manualSetInputValueKeyboardOpen(event);\n }\n }\n /**\n * @internal Used to highlight the first option in the menu.\n */\n async handleSetFirstOption() {\n this.setHighlightedOption(0);\n }\n /**\n * @internal Used to initialize popperJS with an anchor element.\n * 5/12/2023: Tested with Floating UI, however, discovered inconsistent\n * boundary behaviour so sticking with PopperJS.\n */\n async initPopperJs(anchor) {\n // Placements set to \"-start\" to accommodate for custom menu width - menu should always be aligned to the left\n this.popperInstance = createPopper(anchor, this.host, Object.assign({ placement: \"bottom-start\", modifiers: [\n {\n name: \"offset\",\n options: {\n offset: [0, 7],\n },\n },\n {\n name: \"flip\",\n options: {\n fallbackPlacements: [\"top-start\"],\n rootBoundary: \"viewport\",\n },\n },\n ] }, this.popperProps));\n }\n /**\n * @internal This method allows props to be added to the PopperJS createPopper instance outside of the menu\n * @param props object - createPopper props set externally\n */\n async setExternalPopperProps(props) {\n this.popperProps = props;\n }\n focusOnSearchOrSelectInput(menuOptions, highlightedOptionIndex) {\n if (!menuOptions[highlightedOptionIndex])\n return;\n if (this.searchBar) {\n this.parentEl.setFocus();\n if (this.searchMode === \"navigation\")\n this.setHighlightedOption(0);\n }\n if (this.searchableSelect) {\n this.parentEl.setFocus();\n }\n this.focusFromSearchKeypress = true;\n }\n render() {\n const { inputLabel, options, menuId, value, fullWidth, hasTimedOut, isLoading, size, open, inputEl, keyboardNav, parentEl, SEARCH_BAR_TAG, multiSelect, } = this;\n const selectAllButtonText = `${(value === null || value === void 0 ? void 0 : value.length) === this.ungroupedOptions.length ? \"Clear\" : \"Select\"} all`;\n const hasNoResults = this.host.classList.contains(\"no-results\");\n return (h(Host, { key: '8dad972db607187821f9063a35f75768df5adcc1', class: {\n \"ic-menu-full-width\": !!fullWidth,\n \"ic-menu-no-focus\": ((inputEl === null || inputEl === void 0 ? void 0 : inputEl.tagName) === \"INPUT\" &&\n (parentEl === null || parentEl === void 0 ? void 0 : parentEl.tagName) !== SEARCH_BAR_TAG) ||\n hasTimedOut ||\n isLoading,\n [`ic-menu-${size}`]: true,\n \"ic-menu-open\": open && options.length !== 0,\n \"ic-menu-multiple\": multiSelect,\n } }, options.length !== 0 && (h(\"ul\", { key: 'bbdb630e801155ddb22240206eac4f919807ec2d', id: menuId, class: \"menu\", role: \"listbox\", \"aria-label\": `${inputLabel} pop-up`, \"aria-multiselectable\": multiSelect ? \"true\" : \"false\", tabindex: open &&\n !keyboardNav &&\n ((inputEl === null || inputEl === void 0 ? void 0 : inputEl.tagName) !== \"INPUT\" ||\n (parentEl === null || parentEl === void 0 ? void 0 : parentEl.tagName) === SEARCH_BAR_TAG)\n ? \"0\"\n : \"-1\", ref: (el) => (this.menu = el), onKeyDown: this.handleMenuKeyDown, onKeyUp: this.handleMenuKeyUp, onBlur: this.handleBlur }, this.getSortedOptions(options).map((option, index) => {\n if (option.children) {\n if (option.children.length > 0) {\n return (h(\"div\", null, h(\"ic-typography\", { class: \"option-group-title\", role: \"presentation\", variant: \"subtitle-small\" }, h(\"p\", null, option[this.labelField])), option.children.map((childOption) => childOption[this.labelField] &&\n this.displayOption(childOption, multiSelect\n ? value === null || value === void 0 ? void 0 : value.includes(childOption[this.valueField])\n : childOption[this.valueField] === value, index, option))));\n }\n else {\n return null;\n }\n }\n else {\n // Display option only if it has a label (rather than displaying an empty space)\n return (option[this.labelField] &&\n this.displayOption(option, multiSelect\n ? value === null || value === void 0 ? void 0 : value.includes(option[this.valueField])\n : option[this.valueField] === value, index));\n }\n }))), options.length !== 0 &&\n multiSelect &&\n !isLoading &&\n !hasTimedOut &&\n !hasNoResults && (h(\"div\", { key: '2806fdd383f3450d651e681a0156c47cd98689c5', class: \"option-bar\" }, h(\"ic-typography\", { key: 'dd2e0b74622eb359e4e53cc5c7b0f031ef577ca2' }, h(\"p\", { key: 'f6132822d0bf66e869b4c2bceba7dfcf93e697be' }, `${value ? value.length : 0}/${getOptionsWithoutGroupTitlesCount(this.options)} selected`)), h(\"ic-button\", { key: 'e233f3ac017ce08d46d1973406a4bb99bcfa2cf6', class: \"select-all-button\", \"aria-label\": `${selectAllButtonText} options for ${inputLabel}`, ref: (el) => (this.selectAllButton = el), variant: \"tertiary\", onClick: this.handleSelectAllClick, onMouseDown: this.handleSelectAllMouseDown, onBlur: this.handleSelectAllBlur, onFocus: this.handleSelectAllFocus, size: size === \"small\" ? \"small\" : \"medium\" }, selectAllButtonText)))));\n }\n static get is() { return \"ic-menu\"; }\n static get encapsulation() { return \"scoped\"; }\n static get originalStyleUrls() {\n return {\n \"$\": [\"ic-menu.css\"]\n };\n }\n static get styleUrls() {\n return {\n \"$\": [\"ic-menu.css\"]\n };\n }\n static get properties() {\n return {\n \"activationType\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"IcActivationTypes\",\n \"resolved\": \"\\\"automatic\\\" | \\\"manual\\\"\",\n \"references\": {\n \"IcActivationTypes\": {\n \"location\": \"import\",\n \"path\": \"../../utils/types\",\n \"id\": \"src/utils/types.ts::IcActivationTypes\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Determines whether options manually set as values (by pressing 'Enter') when they receive focus using keyboard navigation.\"\n },\n \"getter\": false,\n \"setter\": false,\n \"attribute\": \"activation-type\",\n \"reflect\": false,\n \"defaultValue\": \"\\\"automatic\\\"\"\n },\n \"anchorEl\": {\n \"type\": \"unknown\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"HTMLElement\",\n \"resolved\": \"HTMLElement | undefined\",\n \"references\": {\n \"HTMLElement\": {\n \"location\": \"global\",\n \"id\": \"global::HTMLElement\"\n }\n }\n },\n \"required\": false,\n \"optional\": true,\n \"docs\": {\n \"tags\": [],\n \"text\": \"The reference to an anchor element the menu will position itself from when rendered.\"\n },\n \"getter\": false,\n \"setter\": false\n },\n \"autofocusOnSelected\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [{\n \"name\": \"internal\",\n \"text\": \"If `true`, autofocus will be applied on selected item when menu is open.\"\n }],\n \"text\": \"\"\n },\n \"getter\": false,\n \"setter\": false,\n \"attribute\": \"autofocus-on-selected\",\n \"reflect\": false,\n \"defaultValue\": \"true\"\n },\n \"closeOnSelect\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"If `true`, the menu will close when an option is selected.\"\n },\n \"getter\": false,\n \"setter\": false,\n \"attribute\": \"close-on-select\",\n \"reflect\": false,\n \"defaultValue\": \"true\"\n },\n \"fullWidth\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"If `true`, the menu will fill the width of the container.\"\n },\n \"getter\": false,\n \"setter\": false,\n \"attribute\": \"full-width\",\n \"reflect\": false,\n \"defaultValue\": \"false\"\n },\n \"inputEl\": {\n \"type\": \"unknown\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"HTMLElement\",\n \"resolved\": \"HTMLElement | undefined\",\n \"references\": {\n \"HTMLElement\": {\n \"location\": \"global\",\n \"id\": \"global::HTMLElement\"\n }\n }\n },\n \"required\": false,\n \"optional\": true,\n \"docs\": {\n \"tags\": [],\n \"text\": \"The reference to the input element.\"\n },\n \"getter\": false,\n \"setter\": false\n },\n \"inputLabel\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"string\",\n \"resolved\": \"string\",\n \"references\": {}\n },\n \"required\": true,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"The label for the input element.\"\n },\n \"getter\": false,\n \"setter\": false,\n \"attribute\": \"input-label\",\n \"reflect\": false\n },\n \"labelField\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"string\",\n \"resolved\": \"string\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"The custom name for the label field for IcMenuOption.\"\n },\n \"getter\": false,\n \"setter\": false,\n \"attribute\": \"label-field\",\n \"reflect\": false,\n \"defaultValue\": \"\\\"label\\\"\"\n },\n \"menuId\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"string\",\n \"resolved\": \"string\",\n \"references\": {}\n },\n \"required\": true,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"The ID of the menu.\"\n },\n \"getter\": false,\n \"setter\": false,\n \"attribute\": \"menu-id\",\n \"reflect\": false\n },\n \"multiSelect\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [{\n \"name\": \"internal\",\n \"text\": \"- flag to specify if menu is in a ic-select multiple.\"\n }],\n \"text\": \"\"\n },\n \"getter\": false,\n \"setter\": false,\n \"attribute\": \"multi-select\",\n \"reflect\": false,\n \"defaultValue\": \"false\"\n },\n \"open\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": true,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"If `true`, the menu will be displayed open.\"\n },\n \"getter\": false,\n \"setter\": false,\n \"attribute\": \"open\",\n \"reflect\": true\n },\n \"parentEl\": {\n \"type\": \"unknown\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"HTMLElement\",\n \"resolved\": \"HTMLElement | undefined\",\n \"references\": {\n \"HTMLElement\": {\n \"location\": \"global\",\n \"id\": \"global::HTMLElement\"\n }\n }\n },\n \"required\": false,\n \"optional\": true,\n \"docs\": {\n \"tags\": [{\n \"name\": \"internal\",\n \"text\": \"- The parent element if ic-menu is nested inside another component.\"\n }],\n \"text\": \"\"\n },\n \"getter\": false,\n \"setter\": false\n },\n \"searchableSelect\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [{\n \"name\": \"internal\",\n \"text\": \"- flag to specify if menu is in a searchable ic-select.\"\n }],\n \"text\": \"\"\n },\n \"getter\": false,\n \"setter\": false,\n \"attribute\": \"searchable-select\",\n \"reflect\": false,\n \"defaultValue\": \"false\"\n },\n \"searchBar\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [{\n \"name\": \"internal\",\n \"text\": \"- flag to specify if menu is in a ic-search-bar.\"\n }],\n \"text\": \"\"\n },\n \"getter\": false,\n \"setter\": false,\n \"attribute\": \"search-bar\",\n \"reflect\": false,\n \"defaultValue\": \"false\"\n },\n \"searchMode\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"IcSearchBarSearchModes\",\n \"resolved\": \"\\\"navigation\\\" | \\\"query\\\"\",\n \"references\": {\n \"IcSearchBarSearchModes\": {\n \"location\": \"import\",\n \"path\": \"../ic-search-bar/ic-search-bar.types\",\n \"id\": \"src/components/ic-search-bar/ic-search-bar.types.ts::IcSearchBarSearchModes\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Specify the mode search bar uses to search. `navigation` allows for quick lookups of a set of values, `query` allows for more general searches.\"\n },\n \"getter\": false,\n \"setter\": false,\n \"attribute\": \"search-mode\",\n \"reflect\": false,\n \"defaultValue\": \"\\\"navigation\\\"\"\n },\n \"selectOnEnter\": {\n \"type\": \"boolean\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"boolean\",\n \"resolved\": \"boolean\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [{\n \"name\": \"internal\",\n \"text\": \"If `true`, the icOptionSelect event will be fired on enter instead of ArrowUp and ArrowDown.\"\n }],\n \"text\": \"\"\n },\n \"getter\": false,\n \"setter\": false,\n \"attribute\": \"select-on-enter\",\n \"reflect\": false,\n \"defaultValue\": \"false\"\n },\n \"size\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"IcSizes\",\n \"resolved\": \"\\\"large\\\" | \\\"medium\\\" | \\\"small\\\"\",\n \"references\": {\n \"IcSizes\": {\n \"location\": \"import\",\n \"path\": \"../../utils/types\",\n \"id\": \"src/utils/types.ts::IcSizes\"\n }\n }\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"The size of the menu.\"\n },\n \"getter\": false,\n \"setter\": false,\n \"attribute\": \"size\",\n \"reflect\": false,\n \"defaultValue\": \"\\\"medium\\\"\"\n },\n \"options\": {\n \"type\": \"unknown\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"IcMenuOption[]\",\n \"resolved\": \"IcMenuOption[]\",\n \"references\": {\n \"IcMenuOption\": {\n \"location\": \"import\",\n \"path\": \"../../utils/types\",\n \"id\": \"src/utils/types.ts::IcMenuOption\"\n }\n }\n },\n \"required\": true,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"The possible menu selection options.\"\n },\n \"getter\": false,\n \"setter\": false\n },\n \"value\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"string | string[]\",\n \"resolved\": \"string | string[]\",\n \"references\": {}\n },\n \"required\": true,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"The value of the currently selected option - or array of values (if multiple options allowed).\"\n },\n \"getter\": false,\n \"setter\": false,\n \"attribute\": \"value\",\n \"reflect\": false\n },\n \"valueField\": {\n \"type\": \"string\",\n \"mutable\": false,\n \"complexType\": {\n \"original\": \"string\",\n \"resolved\": \"string\",\n \"references\": {}\n },\n \"required\": false,\n \"optional\": false,\n \"docs\": {\n \"tags\": [],\n \"text\": \"The custom name for the value field for IcMenuOption.\"\n },\n \"getter\": false,\n \"setter\": false,\n \"attribute\": \"value-field\",\n \"reflect\": false,\n \"defaultValue\": \"\\\"value\\\"\"\n }\n };\n }\n static get states() {\n return {\n \"focusFromSearchKeypress\": {},\n \"initialOptionsListRender\": {},\n \"keyboardNav\": {},\n \"optionHighlighted\": {},\n \"preventIncorrectTabOrder\": {},\n \"menuOptions\": {},\n \"popperProps\": {}\n };\n }\n static get events() {\n return [{\n \"method\": \"icClear\",\n \"name\": \"icClear\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [],\n \"text\": \"Emitted when the clear all button is clicked.\"\n },\n \"complexType\": {\n \"original\": \"void\",\n \"resolved\": \"void\",\n \"references\": {}\n }\n }, {\n \"method\": \"menuKeyPress\",\n \"name\": \"menuKeyPress\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [{\n \"name\": \"internal\",\n \"text\": \"Emitted when key is pressed while menu is open.\"\n }],\n \"text\": \"\"\n },\n \"complexType\": {\n \"original\": \"{ isNavKey: boolean; key: string }\",\n \"resolved\": \"{ isNavKey: boolean; key: string; }\",\n \"references\": {}\n }\n }, {\n \"method\": \"menuOptionId\",\n \"name\": \"menuOptionId\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [{\n \"name\": \"internal\",\n \"text\": \"Emitted when an option has been highlighted.\"\n }],\n \"text\": \"\"\n },\n \"complexType\": {\n \"original\": \"IcMenuOptionIdEventDetail\",\n \"resolved\": \"IcMenuOptionIdEventDetail\",\n \"references\": {\n \"IcMenuOptionIdEventDetail\": {\n \"location\": \"import\",\n \"path\": \"./ic-menu.types\",\n \"id\": \"src/components/ic-menu/ic-menu.types.ts::IcMenuOptionIdEventDetail\"\n }\n }\n }\n }, {\n \"method\": \"menuOptionSelect\",\n \"name\": \"menuOptionSelect\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [{\n \"name\": \"internal\",\n \"text\": \"Emitted when an option is selected.\"\n }],\n \"text\": \"\"\n },\n \"complexType\": {\n \"original\": \"IcOptionSelectEventDetail\",\n \"resolved\": \"IcOptionSelectEventDetail\",\n \"references\": {\n \"IcOptionSelectEventDetail\": {\n \"location\": \"import\",\n \"path\": \"./ic-menu.types\",\n \"id\": \"src/components/ic-menu/ic-menu.types.ts::IcOptionSelectEventDetail\"\n }\n }\n }\n }, {\n \"method\": \"menuOptionSelectAll\",\n \"name\": \"menuOptionSelectAll\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [{\n \"name\": \"internal\",\n \"text\": \"Emitted when all options are selected or deselected.\"\n }],\n \"text\": \"\"\n },\n \"complexType\": {\n \"original\": \"{ select: boolean }\",\n \"resolved\": \"{ select: boolean; }\",\n \"references\": {}\n }\n }, {\n \"method\": \"menuStateChange\",\n \"name\": \"menuStateChange\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [{\n \"name\": \"internal\",\n \"text\": \"Emitted when state of menu changes (i.e. open or closed).\"\n }],\n \"text\": \"\"\n },\n \"complexType\": {\n \"original\": \"IcMenuChangeEventDetail\",\n \"resolved\": \"IcMenuChangeEventDetail\",\n \"references\": {\n \"IcMenuChangeEventDetail\": {\n \"location\": \"import\",\n \"path\": \"./ic-menu.types\",\n \"id\": \"src/components/ic-menu/ic-menu.types.ts::IcMenuChangeEventDetail\"\n }\n }\n }\n }, {\n \"method\": \"retryButtonClicked\",\n \"name\": \"retryButtonClicked\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [{\n \"name\": \"internal\",\n \"text\": \"Emitted when the retry button is clicked.\"\n }],\n \"text\": \"\"\n },\n \"complexType\": {\n \"original\": \"IcMultiValueEventDetail\",\n \"resolved\": \"IcMultiValueEventDetail\",\n \"references\": {\n \"IcMultiValueEventDetail\": {\n \"location\": \"import\",\n \"path\": \"../../utils/types\",\n \"id\": \"src/utils/types.ts::IcMultiValueEventDetail\"\n }\n }\n }\n }, {\n \"method\": \"timeoutBlur\",\n \"name\": \"timeoutBlur\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [{\n \"name\": \"internal\",\n \"text\": \"Emitted when the timeout menu loses focus.\"\n }],\n \"text\": \"\"\n },\n \"complexType\": {\n \"original\": \"{ ev: FocusEvent }\",\n \"resolved\": \"{ ev: FocusEvent; }\",\n \"references\": {\n \"FocusEvent\": {\n \"location\": \"global\",\n \"id\": \"global::FocusEvent\"\n }\n }\n }\n }, {\n \"method\": \"ungroupedOptionsSet\",\n \"name\": \"ungroupedOptionsSet\",\n \"bubbles\": true,\n \"cancelable\": true,\n \"composed\": true,\n \"docs\": {\n \"tags\": [{\n \"name\": \"internal\",\n \"text\": \"Emitted when the ungrouped options have been set.\"\n }],\n \"text\": \"\"\n },\n \"complexType\": {\n \"original\": \"{ options: IcMenuOption[] }\",\n \"resolved\": \"{ options: IcMenuOption[]; }\",\n \"references\": {\n \"IcMenuOption\": {\n \"location\": \"import\",\n \"path\": \"../../utils/types\",\n \"id\": \"src/utils/types.ts::IcMenuOption\"\n }\n }\n }\n }];\n }\n static get methods() {\n return {\n \"handleClickOpen\": {\n \"complexType\": {\n \"signature\": \"() => Promise<void>\",\n \"parameters\": [],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n }\n },\n \"return\": \"Promise<void>\"\n },\n \"docs\": {\n \"text\": \"\",\n \"tags\": [{\n \"name\": \"internal\",\n \"text\": \"If menu is opened with the mouse, emit menuStateChange custom event.\"\n }]\n }\n },\n \"handleKeyboardOpen\": {\n \"complexType\": {\n \"signature\": \"(event: KeyboardEvent) => Promise<void>\",\n \"parameters\": [{\n \"name\": \"event\",\n \"type\": \"KeyboardEvent\",\n \"docs\": \"The keyboard event which is available when handleKeyboardOpen is invoked.\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n },\n \"KeyboardEvent\": {\n \"location\": \"global\",\n \"id\": \"global::KeyboardEvent\"\n }\n },\n \"return\": \"Promise<void>\"\n },\n \"docs\": {\n \"text\": \"Used alongside activationType\\nIf menu is opened via keyboard navigation (i.e. Enter, ArrowUp or ArrowDown), emit optionSelect custom event.\",\n \"tags\": [{\n \"name\": \"param\",\n \"text\": \"event The keyboard event which is available when handleKeyboardOpen is invoked.\"\n }]\n }\n },\n \"handleSetFirstOption\": {\n \"complexType\": {\n \"signature\": \"() => Promise<void>\",\n \"parameters\": [],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n }\n },\n \"return\": \"Promise<void>\"\n },\n \"docs\": {\n \"text\": \"\",\n \"tags\": [{\n \"name\": \"internal\",\n \"text\": \"Used to highlight the first option in the menu.\"\n }]\n }\n },\n \"initPopperJs\": {\n \"complexType\": {\n \"signature\": \"(anchor: HTMLElement) => Promise<void>\",\n \"parameters\": [{\n \"name\": \"anchor\",\n \"type\": \"HTMLElement\",\n \"docs\": \"\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n },\n \"HTMLElement\": {\n \"location\": \"global\",\n \"id\": \"global::HTMLElement\"\n }\n },\n \"return\": \"Promise<void>\"\n },\n \"docs\": {\n \"text\": \"\",\n \"tags\": [{\n \"name\": \"internal\",\n \"text\": \"Used to initialize popperJS with an anchor element.\\n5/12/2023: Tested with Floating UI, however, discovered inconsistent\\nboundary behaviour so sticking with PopperJS.\"\n }]\n }\n },\n \"setExternalPopperProps\": {\n \"complexType\": {\n \"signature\": \"<T extends Partial<Options>>(props: T) => Promise<void>\",\n \"parameters\": [{\n \"name\": \"props\",\n \"type\": \"T\",\n \"docs\": \"object - createPopper props set externally\"\n }],\n \"references\": {\n \"Promise\": {\n \"location\": \"global\",\n \"id\": \"global::Promise\"\n },\n \"Partial\": {\n \"location\": \"global\",\n \"id\": \"global::Partial\"\n },\n \"Options\": {\n \"location\": \"import\",\n \"path\": \"@popperjs/core\",\n \"id\": \"node_modules::Options\"\n },\n \"T\": {\n \"location\": \"global\",\n \"id\": \"global::T\"\n }\n },\n \"return\": \"Promise<void>\"\n },\n \"docs\": {\n \"text\": \"\",\n \"tags\": [{\n \"name\": \"internal\",\n \"text\": \"This method allows props to be added to the PopperJS createPopper instance outside of the menu\"\n }, {\n \"name\": \"param\",\n \"text\": \"props object - createPopper props set externally\"\n }]\n }\n }\n };\n }\n static get elementRef() { return \"host\"; }\n static get watchers() {\n return [{\n \"propName\": \"open\",\n \"methodName\": \"watchOpenHandler\"\n }, {\n \"propName\": \"options\",\n \"methodName\": \"watchOptionsHandler\"\n }];\n }\n}\n//# sourceMappingURL=ic-menu.js.map\n"],"mappings":"4OAGA,MAAMA,EAA4BC,IAAa,CAC3CC,wBAAyB,CACrBC,aAAeC,GAAaH,GAAiBG,EAAQC,WAAW,QAC5DC,EAA6BC,SAASH,GAC1CI,mBAAoB,QAGrB,MAAMC,EAAsBC,GACxBC,EAASC,SAASF,EAAMV,EAAyB,OAErD,MAAMa,EAA0BH,GAC5BC,EAASC,SAASF,EAAMV,EAAyB,QCd5D,MAAMc,EAAY,g+TAClB,MAAAC,EAAeD,E,MCKFE,EAAI,MACb,WAAAC,CAAAC,G,ubACIC,KAAKC,kBAAoB,wBACzBD,KAAKE,gBAAkB,eACvBF,KAAKG,eAAiB,gBACtBH,KAAKI,uBAAyB,MAC9BJ,KAAKK,qBAAuB,MAC5BL,KAAKM,YAAc,MACnBN,KAAKO,UAAY,MACjBP,KAAKQ,mBAAqB,KAC1BR,KAAKS,kBAAoB,KACzBT,KAAKU,mBAAqB,KAC1BV,KAAKW,iBAAmB,MACxBX,KAAKY,iBAAmB,MACxBZ,KAAKa,aAAe,MACpBb,KAAKc,iBAAmB,GACxBd,KAAKe,wBAA0B,MAC/Bf,KAAKgB,yBAA2B,MAChChB,KAAKiB,YAAc,MACnBjB,KAAKkB,yBAA2B,MAChClB,KAAKmB,YAAc,GAInBnB,KAAKoB,eAAiB,YAItBpB,KAAKqB,oBAAsB,KAI3BrB,KAAKsB,cAAgB,KAIrBtB,KAAKuB,UAAY,MAIjBvB,KAAKwB,WAAa,QAIlBxB,KAAKyB,YAAc,MAInBzB,KAAK0B,iBAAmB,MAIxB1B,KAAK2B,UAAY,MAIjB3B,KAAK4B,WAAa,aAIlB5B,KAAK6B,cAAgB,MAIrB7B,KAAK8B,KAAO,SAIZ9B,KAAK+B,WAAa,QAClB/B,KAAKgC,oBAAsB,KACvBhC,KAAKiC,kBAAoB,EAAE,EAE/BjC,KAAKkC,mBAAqB,KACtB,MAAMC,EAAyBnC,KAAKoC,QAAQC,WAAWC,GAAWA,EAAOtC,KAAK+B,cAAgB/B,KAAKiC,oBACnGjC,KAAKuC,cAAcJ,EAAuB,EAE9CnC,KAAKwC,iBAAmB,CAACC,EAAMC,KAC3B,IAAIC,EACJ3C,KAAK4C,gBAAgBC,KAAK,CAAEJ,OAAMC,eAClC,IAAKD,EAAM,CACP,GAAIC,IAAe,MAAO,EACrBC,EAAK3C,KAAK8C,WAAa,MAAQH,SAAY,OAAS,EAAIA,EAAGI,QAC5D/C,KAAKW,iBAAmB,K,CAG5B,GAAIX,KAAKyB,YAAa,CAClBzB,KAAKiC,kBAAoBe,UACzBhD,KAAKU,mBAAqB,I,IAItCV,KAAKiD,mBAAsBC,IACvB,GAAIlD,KAAKc,iBAAiBoC,EAAsB,GAAI,CAChDlD,KAAKmD,iBAAiBN,KAAK,CACvBO,MAAOpD,KAAKc,iBAAiBoC,EAAsB,GAAGlD,KAAK+B,YAC3DsB,SAAUrD,KAAKsD,YAAYtD,KAAKc,iBAAiBoC,EAAsB,GAAGlD,KAAK+B,c,KAGlF,CACD/B,KAAKmD,iBAAiBN,KAAK,CACvBO,MAAOpD,KAAKc,iBAAiB,GAAGd,KAAK+B,YACrCsB,SAAUrD,KAAKsD,YAAYtD,KAAKc,iBAAiB,GAAGd,KAAK+B,c,GAIrE/B,KAAKuD,uBAA0BL,IAC3B,GAAIlD,KAAKc,iBAAiBoC,EAAsB,GAAI,CAChDlD,KAAKmD,iBAAiBN,KAAK,CACvBO,MAAOpD,KAAKc,iBAAiBoC,EAAsB,GAAGlD,KAAK+B,YAC3DsB,SAAUrD,KAAKsD,YAAYtD,KAAKc,iBAAiBoC,EAAsB,GAAGlD,KAAK+B,c,KAGlF,CACD/B,KAAKmD,iBAAiBN,KAAK,CACvBO,MAAOpD,KAAKc,iBAAiBd,KAAKc,iBAAiB0C,OAAS,GAAGxD,KAAK+B,YACpEsB,SAAUrD,KAAKsD,YAAYtD,KAAKc,iBAAiBd,KAAKc,iBAAiB0C,OAAS,GAAGxD,KAAK+B,c,GAKpG/B,KAAKyD,eAAkBC,IACnBA,EAAMC,iBACN3D,KAAKwC,iBAAiB,KAAK,EAE/BxC,KAAK4D,eAAiB,IAAM5D,KAAK2B,UAAY3B,KAAKoC,QAAUpC,KAAKc,iBAEjEd,KAAK6D,qBAAwBC,IACzB,MAAMC,EAAc/D,KAAK4D,iBACzBG,EAAYD,KACPC,EAAYD,GAAkBE,WAC9BhE,KAAKiC,kBACF8B,EAAYD,GAAkB9D,KAAK+B,aAAeiB,UAAU,EAKxEhD,KAAKiE,8BAAiCP,IAClC,MAAMR,EAAsBlD,KAAKc,iBAAiBuB,WAAWC,GAAWA,EAAOtC,KAAK+B,cAAgB/B,KAAKoD,QACzGpD,KAAKiB,YAAc,MACnB,OAAQyC,EAAMQ,KACV,IAAK,YACDlE,KAAKiB,YAAc,KACnBjB,KAAKyD,eAAeC,GACpB1D,KAAKiD,mBAAmBC,GACxB,MACJ,IAAK,UACDlD,KAAKiB,YAAc,KACnBjB,KAAKyD,eAAeC,GACpB1D,KAAKuD,uBAAuBL,GAC5B,MACJ,IAAK,IACL,IAAK,QACD,GAAIQ,EAAMS,OAAOC,KAAOpE,KAAKE,gBAAiB,CAC1CF,KAAKwC,iBAAiB,K,CAE1B,M,EAGZxC,KAAKqE,wBAA0B,CAACjC,EAASD,KACrC,IAAKnC,KAAKO,YAAcP,KAAKM,YAAa,CACtCN,KAAKiB,YAAc,I,CAEvB,MAAMqD,EAAStE,KAAK2B,WAAa3B,KAAK0B,kBAAoB1B,KAAKyC,KAC/D,GAAI6B,EAAQ,CACR,GAAInC,GAA0B,EAAG,CAC7B,GAAIC,EAAQD,KAA4Ba,UAAW,CAC/C,GAAIhD,KAAK2B,WACLS,EAAQD,GAAwBoC,WAAa,KAAM,CACnDvE,KAAKI,uBAAyB,I,KAE7B,CACDJ,KAAKuC,cAAcJ,E,OAI1B,CACDnC,KAAKuC,cAAcJ,E,MAGtB,CACDnC,KAAKwC,iBAAiB,K,GAI9BxC,KAAKwE,iBAAoBC,IACrB,MAAMV,EAAc/D,KAAK4D,iBACzB,OAAO5D,KAAKoD,MACNpD,KAAKoD,MAAMhE,SAAS2E,EAAYU,GAAOzE,KAAK+B,aAC5C,KAAK,EAGf/B,KAAK0E,wBAA2BC,IAC5B,MAAMZ,EAAc/D,KAAK4D,iBACzB,GAAI5D,KAAKoD,MAAO,CACZ,MAAMwB,EAAwB5E,KAAKoD,MAAMyB,KAAKzB,GACnCW,EAAY1B,WAAWC,GAAWA,EAAOtC,KAAK+B,cAAgBqB,MAGzEwB,EAAsBE,SAASL,IAAWE,EAAsBvF,SAASqF,IAAUzE,KAAKuC,cAAckC,I,GAI9GzE,KAAK+E,gCAAmCrB,IACpC,MAAMK,EAAc/D,KAAK4D,iBAGzB,MAAMoB,EAAwBtB,EAAMuB,UAAYvB,EAAMwB,SAAWxB,EAAMyB,QACvE,MAAMhD,EAAyBnC,KAAKoF,4BACpC,MAAMC,EAA0BtB,EAAY1B,WAAWC,GAAWA,EAAOtC,KAAK+B,cAAgB/B,KAAKU,qBACnG,MAAM4C,EAAemB,IAAY,IAAI9B,EAAI,OAAQA,EAAK2C,MAAMC,KAAKvF,KAAKwF,KAAKC,iBAAiB,OAAOhB,MAAY,MAAQ9B,SAAY,OAAS,EAAIA,EAAGyB,EAAE,EAErJ,GAAIV,EAAMQ,MAAQ,KAAOlE,KAAKyB,YAAa,CACvCzB,KAAK0F,mBAAmBhC,EAAOvB,E,KAE9B,CACD,OAAQuB,EAAMQ,KACV,IAAK,YACDlE,KAAKiB,YAAc,KACnBjB,KAAKyD,eAAeC,GACpB,GAAI1D,KAAKU,mBAAoB,CAGzBV,KAAK6D,qBAAqBwB,GAC1BrF,KAAKU,mBAAqB,I,KAEzB,CACDV,KAAK2F,wBAAwBjC,EAAOvB,EAAwB4B,GAC5D,GAAI5B,EAAyB4B,EAAYP,OAAS,EAAG,CACjDxD,KAAK6D,qBAAqB1B,EAAyB,GACnDnC,KAAK4F,aAAa/C,KAAK,CACnBQ,SAAUC,EAAYnB,EAAyB,KAEnDnC,KAAK2F,wBAAwBjC,EAAOvB,EAAyB,EAAG4B,E,KAE/D,CACD/D,KAAK6D,qBAAqB,GAC1B7D,KAAK4F,aAAa/C,KAAK,CACnBQ,SAAUC,EAAY,KAE1BtD,KAAK2F,wBAAwBjC,EAAO,EAAGK,E,CAG3C,GAAI/D,KAAKyB,aAAezB,KAAKa,aAAc,CACvCb,KAAK0E,wBAAwB,CACzBvC,EACAnC,KAAKoF,8BAETpF,KAAKa,aAAe,K,EAG5Bb,KAAKS,kBAAoBT,KAAKoF,4BAC9BpF,KAAKkB,yBAA2B,MAChClB,KAAKe,wBAA0B,MAC/B,MACJ,IAAK,UACDf,KAAKiB,YAAc,KACnBjB,KAAKyD,eAAeC,GACpB,GAAI1D,KAAKU,mBAAoB,CAGzBV,KAAK6D,qBAAqBwB,GAC1BrF,KAAKU,mBAAqB,I,KAEzB,CACDV,KAAK2F,wBAAwBjC,EAAOvB,EAAwB4B,GAC5D,GAAI5B,GAA0B,GAC1BA,EAAyB4B,EAAYP,OAAS,EAAG,CACjDxD,KAAK6D,qBAAqBE,EAAYP,OAAS,GAC/CxD,KAAK4F,aAAa/C,KAAK,CACnBQ,SAAUC,EAAYS,EAAYP,OAAS,KAE/CxD,KAAK2F,wBAAwBjC,EAAOK,EAAYP,OAAS,EAAGO,E,KAE3D,CACD/D,KAAK6D,qBAAqB1B,EAAyB,GACnDnC,KAAK4F,aAAa/C,KAAK,CACnBQ,SAAUC,EAAYnB,EAAyB,KAEnDnC,KAAK2F,wBAAwBjC,EAAOvB,EAAyB,EAAG4B,E,CAGpE,GAAI/D,KAAKyB,aAAezB,KAAKa,aAAc,CACvCb,KAAK0E,wBAAwB,CACzBvC,EACAnC,KAAKoF,8BAETpF,KAAKa,aAAe,K,EAG5Bb,KAAKS,kBAAoBT,KAAKoF,4BAC9BpF,KAAKkB,yBAA2B,MAChClB,KAAKe,wBAA0B,MAC/B,MACJ,IAAK,OAAQ,CACT,MAAM8E,EAAmB,EACzB7F,KAAKiB,YAAc,KACnByC,EAAMC,iBACN3D,KAAKyD,eAAeC,GACpB1D,KAAK6D,qBAAqBgC,GAC1B7F,KAAK4F,aAAa/C,KAAK,CACnBQ,SAAUC,EAAYuC,KAE1B,GAAInC,EAAMuB,UAAYvB,EAAMyB,QAAS,CACjCnF,KAAK8F,0BAA0BD,E,CAEnC7F,KAAKS,kBAAoBoF,EACzB7F,KAAKQ,mBAAqBqF,EAC1B,K,CAEJ,IAAK,MAAO,CACR,MAAME,EAAiBhC,EAAYP,OAAS,EAC5CxD,KAAKiB,YAAc,KACnByC,EAAMC,iBACN3D,KAAKyD,eAAeC,GACpB1D,KAAK6D,qBAAqBkC,GAC1B/F,KAAK4F,aAAa/C,KAAK,CACnBQ,SAAUC,EAAYyC,KAE1B,GAAIrC,EAAMuB,UAAYvB,EAAMyB,QAAS,CACjCnF,KAAK8F,0BAA0BC,E,CAEnC/F,KAAKS,kBAAoBsF,EACzB/F,KAAKQ,mBAAqBuF,EAC1B,K,CAEJ,IAAK,IACD,IAAKf,EAAuB,CACxBhF,KAAKiB,YAAc,K,CAEvB,GAAIjB,KAAK2B,WAAa3B,KAAK0B,iBAAkB,CACzC,K,KAEC,CACD,GAAIgC,EAAMS,OAAOC,KAAOpE,KAAKE,gBAAiB,CAC1CF,KAAKwC,iBAAiB,K,EAG9B,MACJ,IAAK,QACDkB,EAAMC,iBACN,IAAKqB,EAAuB,CACxBhF,KAAKiB,YAAc,K,CAEvBjB,KAAK0F,mBAAmBhC,EAAOvB,GAC/B,MACJ,IAAK,SACD,GAAInC,KAAKyC,KAAM,CACXiB,EAAMsC,0B,CAEVhG,KAAKwC,iBAAiB,OACtBxC,KAAK4F,aAAa/C,KAAK,CAAEQ,SAAUL,YACnC,MACJ,IAAK,IAGD,GAAKiD,KAAiBvC,EAAMwB,UACtBe,KAAiBvC,EAAMyB,QAAU,CACnCnF,KAAKkG,sBACLlG,KAAKS,kBAAoB,KACzBT,KAAKQ,mBAAqB,I,CAE9B,MACJ,IAAK,QACL,IAAK,MACD,GAAIkD,EAAMQ,MAAQ,QAAS,CACvBlE,KAAKa,aAAe,I,CAExB,GAAIb,KAAK2B,UAAW,CAChB3B,KAAKiB,YAAc,I,CAEvB,GAAIjB,KAAKyB,YAAa,CAClB,GAAIzB,KAAKyC,OAASiB,EAAMuB,UAAYjF,KAAKmG,gBAAiB,CACtDzC,EAAMC,iBACN3D,KAAKmG,gBAAgBpD,QACrB/C,KAAKY,iBAAmB,KACxBZ,KAAKW,iBAAmB,KACxBX,KAAKiC,kBAAoBe,S,MAG5B,CACDhD,KAAKkB,yBAA2B,I,CAEpC,MACJ,QACI,IAAK8D,EAAuB,CACxBhF,KAAKiB,YAAc,K,CAEvBjB,KAAKoG,2BAA2BrC,EAAa5B,G,GAI7DnC,KAAKuC,cAAiBJ,IAClB,MAAM4B,EAAc/D,KAAK4D,iBACzB,GAAIG,EAAY5B,KAA4Ba,UAAW,CACnDhD,KAAKmD,iBAAiBN,KAAK,CACvBO,MAAOW,EAAY5B,GAAwBnC,KAAK+B,cAEpD,GAAI/B,KAAKsB,cAAe,CACpBtB,KAAKiC,kBAAoBe,UACzBhD,KAAK4F,aAAa/C,KAAK,CAAEQ,SAAUL,W,EAG3C,GAAIhD,KAAKsB,cAAe,CACpB,IAAKtB,KAAKM,YAAa,CACnBN,KAAKwC,iBAAiB,M,KAErB,CACDxC,KAAKqG,SAASC,U,IAI1BtG,KAAKuG,kBAAqB7C,IACtB,MAAMN,MAAEA,EAAKoD,MAAEA,GAAU9C,EAAMS,OAAOsC,QACtC,GAAIzG,KAAKyB,YAAa,CAClB,MAAMsC,EAAc/D,KAAK4D,iBACzB,MAAMV,EAAsBa,EAAY1B,WAAWC,GAAWA,EAAOtC,KAAK+B,cAAgBqB,IAC1FpD,KAAK0F,mBAAmBhC,EAAOR,EAAqB,MACpDlD,KAAKU,mBAAqB0C,GAAS,I,KAElC,CACDpD,KAAKmD,iBAAiBN,KAAK,CAAEO,QAAOoD,UACpCxG,KAAKwC,iBAAiB,M,CAE1BxC,KAAKiC,kBAAoBe,SAAS,EAEtChD,KAAK0G,YAAc,KACf1G,KAAK2G,mBAAmB9D,KAAK,CAAEO,MAAOpD,KAAKoD,OAAQ,EAEvDpD,KAAK4G,mBAAsBC,IACvB,GAAIA,EAAG3C,MAAQ,SAAW2C,EAAG3C,MAAQ,IAAK,CACtC2C,EAAGlD,iBACH3D,KAAK2G,mBAAmB9D,KAAK,CAAEO,MAAOpD,KAAKoD,MAAO0D,WAAYD,EAAG3C,K,GAGzElE,KAAK+G,WAAcrD,IACf,IAAIf,EAAIqE,EAAIC,EAAIC,EAChB,GAAIxD,EAAMyD,gBAAkBnH,KAAK8C,QAAS,CACtC,GAAIY,EAAMyD,gBAAkBnH,KAAKmG,gBAAiB,EAC7CxD,EAAK3C,KAAKoH,QAAU,MAAQzE,SAAY,OAAS,EAAIA,EAAG0E,gBAAgBrH,KAAKC,kB,CAElF,OAAQ+G,EAAKhH,KAAKoH,QAAU,MAAQJ,SAAY,OAAS,EAAIA,EAAGM,SAAS5D,EAAMyD,iBAC3EzD,EAAMyD,gBAAkBnH,KAAKmG,iBAAkB,CAC/CnG,KAAKwC,iBAAiB,MAAOxC,KAAKK,uBACjC4G,EAAKjH,KAAKoH,QAAU,MAAQH,SAAY,OAAS,EAAIA,EAAGI,gBAAgBrH,KAAKC,mBAC9ED,KAAKS,kBAAoB,KACzBT,KAAKQ,mBAAqB,I,MAG7B,CACDR,KAAKwC,iBAAiB,OACtBxC,KAAKW,iBAAmB,MACvBuG,EAAKlH,KAAKoH,QAAU,MAAQF,SAAY,OAAS,EAAIA,EAAGG,gBAAgBrH,KAAKC,mBAC9ED,KAAKS,kBAAoB,KACzBT,KAAKQ,mBAAqB,I,CAE9B,IAAKR,KAAK2B,UACN3B,KAAKK,uBAAyBqD,EAAMyD,aAAa,EAEzDnH,KAAKuH,gBAAmB7D,IACpBA,EAAMC,gBAAgB,EAE1B3D,KAAKwH,kBAAqB9D,IACtB,GAAI1D,KAAKoB,iBAAmB,YAAa,CACrCpB,KAAKyH,0BAA0B/D,E,MAE9B,GAAI1D,KAAKoB,iBAAmB,WAAapB,KAAK2B,UAAW,CAC1D3B,KAAK+E,gCAAgCrB,E,GAG7C1D,KAAK0H,gBAAmBhE,IACpB,GAAIA,EAAMQ,MAAQ,OAASR,EAAMuB,SAAU,CACvCjF,KAAKW,iBAAmB,K,CAE5B,GAAI+C,EAAMQ,MAAQ,SAAWlE,KAAKI,uBAAwB,CACtDJ,KAAKI,uBAAyB,MAC9BsD,EAAMsC,0B,CAEV,GAAItC,EAAMQ,MAAQ,QAAS,CACvBlE,KAAKa,aAAe,K,GAG5Bb,KAAK2H,qBAAuB,KACxB,IAAIhF,EACJ3C,KAAKiB,YAAc,OAClB0B,EAAK3C,KAAKoH,QAAU,MAAQzE,SAAY,OAAS,EAAIA,EAAGI,QACzD/C,KAAKkG,sBACLlG,KAAKS,kBAAoB,KACzBT,KAAKQ,mBAAqB,IAAI,EAElCR,KAAK4H,oBAAuBlE,IACxB,IAAIf,EACJ3C,KAAKwF,KAAKqC,UAAUC,OAAO,gCAC3B,MAAOnF,EAAK3C,KAAKoH,QAAU,MAAQzE,SAAY,OAAS,EAAIA,EAAG2E,SAAS5D,EAAMyD,gBAAiB,CAC3FnH,KAAKwC,iBAAiB,MAAO,M,GAGrCxC,KAAK+H,qBAAuB,KACxB/H,KAAKwF,KAAKqC,UAAUG,IAAI,gCACxBhI,KAAKS,kBAAoB,KACzBT,KAAKQ,mBAAqB,IAAI,EAGlCR,KAAKiI,yBAA4BvE,IAC7BA,EAAMC,gBAAgB,EAI1B3D,KAAK2F,wBAA0B,CAACjC,EAAOwE,EAAqB9F,KACxD,GAAIpC,KAAKyB,aACLiC,EAAMuB,WACLjF,KAAKwE,iBAAiB0D,GAAsB,CAC7ClI,KAAKqE,wBAAwBjC,EAAS8F,GACtClI,KAAKQ,mBAAqB0H,C,GAKlClI,KAAK8F,0BAA4B,CAACqC,EAAuBC,EAAuB,MAAOC,EAAsB,QACzGrI,KAAKa,aAAe,MACpB,MAAMyH,EAAyBD,IAAwB,KACjDrI,KAAKuI,0BAA0BH,GAC/BC,EACN,GAAIC,IAA2B,KAAM,CACjC,MAAME,EAAkB,GACxB,GAAIF,EAAyBH,EAAuB,CAChD,IAAK,IAAIM,EAAIH,EAAwBG,EAAIN,EAAwB,EAAGM,IAAK,CACrED,EAAgBE,KAAKD,E,MAGxB,CACD,IAAK,IAAIA,EAAIH,EAAwBG,EAAIN,EAAwB,EAAGM,IAAK,CACrED,EAAgBE,KAAKD,E,EAG7BD,EAAgB1D,SAAS6D,IAAiB3I,KAAKwE,iBAAiBmE,IAAgB3I,KAAKuC,cAAcoG,KACnG3I,KAAK0E,wBAAwB8D,E,GAGrCxI,KAAK0F,mBAAqB,CAAChC,EAAOiF,EAAaP,EAAuB,SAClE,MAAMrE,EAAc/D,KAAK4D,iBACzB,MAAM0E,EAAyBtI,KAAKuI,0BAA0BH,GAC9D,GAAI1E,EAAMuB,UAAYqD,IAA2B,KAAM,CACnDtI,KAAK8F,0BAA0B6C,EAAaP,EAAsBE,E,KAEjE,CACDtI,KAAKqE,wBAAwBN,EAAa4E,E,CAE9C3I,KAAKS,kBAAoBkI,EACzB3I,KAAKQ,mBAAqBmI,CAAW,EAEzC3I,KAAKuI,0BAA6BH,GACvBA,GAAwBpI,KAAKS,oBAAsB,KACpDT,KAAKS,kBACLT,KAAKQ,qBAAuB,KACxBR,KAAKQ,mBACL,KAEdR,KAAKkG,oBAAsB,KACvB,IAAIvD,EAAIqE,EAGRhH,KAAK4I,oBAAoB/F,KAAK,CAC1BgG,QAAS7I,KAAKoD,WAAaT,EAAK3C,KAAKoD,SAAW,MAAQT,SAAY,OAAS,EAAIA,EAAGa,UAAYxD,KAAKc,iBAAiB0C,UAG1H,KAAMwD,EAAKhH,KAAKoD,SAAW,MAAQ4D,SAAY,OAAS,EAAIA,EAAGxD,UAAYxD,KAAKc,iBAAiB0C,OAAQ,CACrGxD,KAAK8I,QAAQjG,M,GAGrB7C,KAAK+I,iBAAmB,CAACC,EAAU9E,KAC/BlE,KAAKiJ,aAAapG,KAAK,CAAEmG,SAAUA,EAAU9E,IAAKA,GAAM,EAK5DlE,KAAKyH,0BAA6B/D,IAC9B,IAAIf,EAAIqE,EACRtD,EAAMwF,aAAe,KACrB,MAAMhG,EAAsBlD,KAAKc,iBAAiBuB,WAAWC,GAAWA,EAAOtC,KAAK+B,cAAgB/B,KAAKoD,QACzG,MAAM+F,IAAuBnJ,KAAK8C,SAAW9C,KAAK8C,QAAQ7D,UAAY,QACtEe,KAAKiB,YAAc,MACnB,OAAQyC,EAAMQ,KACV,IAAK,IACDR,EAAMC,iBACN,MACJ,IAAK,UACD,IAAK3D,KAAKM,YAAa,CACnBoD,EAAMC,iBACN3D,KAAKuD,uBAAuBL,GAC5BlD,KAAKiB,YAAc,I,CAEvB,MACJ,IAAK,YACD,IAAKjB,KAAKM,YAAa,CACnBoD,EAAMC,iBACN3D,KAAKiD,mBAAmBC,GACxBlD,KAAKiB,YAAc,I,CAEvB,MACJ,IAAK,OACDjB,KAAKmD,iBAAiBN,KAAK,CACvBO,MAAOpD,KAAKc,iBAAiB,GAAGd,KAAK+B,cAEzC/B,KAAKiB,YAAc,KACnB,MACJ,IAAK,MACDjB,KAAKmD,iBAAiBN,KAAK,CACvBO,MAAOpD,KAAKc,iBAAiBd,KAAKc,iBAAiB0C,OAAS,GAAGxD,KAAK+B,cAExE/B,KAAKiB,YAAc,KACnB,MACJ,IAAK,SACAjB,KAAKM,aAAeN,KAAKwC,iBAAiB,OAC3C,MACJ,IAAK,SACDxC,KAAKwC,iBAAiB,OACtB,MACJ,IAAK,YACD,GAAI2G,EAAoB,EACnBxG,EAAK3C,KAAK8C,WAAa,MAAQH,SAAY,OAAS,EAAIA,EAAGI,O,CAEhE,MACJ,IAAK,QACD,MACJ,QACI,GAAIoG,GAAsBzF,EAAMQ,MAAQ,QAAUlE,KAAKM,YAAa,EAC/D0G,EAAKhH,KAAK8C,WAAa,MAAQkE,SAAY,OAAS,EAAIA,EAAGjE,O,CAEhE,GAAIW,EAAMQ,IAAIV,SAAW,EAAG,CACxBxD,KAAKiB,YAAc,I,CAEvB,MAERjB,KAAK+I,iBAAiB/I,KAAKiB,YAAayC,EAAMQ,IAAI,EAEtDlE,KAAKsD,YAAeF,GACT,GAAGpD,KAAKoJ,UAAUhG,IAE7BpD,KAAKqJ,mBAAqB,CAAC/G,EAAQgH,KAC/B,IAAIC,EAAYjH,EAAOtC,KAAKwB,YAC5B,GAAIc,EAAOkH,YAAa,CACpBD,EAAY,GAAGA,MAAcjH,EAAOkH,a,CAExC,GAAIlH,EAAOmH,QAAS,CAChBF,EAAY,GAAGA,MAAcjH,EAAOmH,QAAQF,W,CAEhD,GAAID,EAAc,CACd,MAAO,GAAGC,MAAcD,EAAatJ,KAAKwB,mB,KAEzC,CACD,OAAO+H,C,GAGfvJ,KAAK0J,iBAAoBtH,IACrB,IAAIuH,EAAS,GACb,GAAIvH,EAAQwH,KAAM,CACdD,EAASvH,EAAQwH,MAAK,CAACC,EAASC,IAAYD,EAAQE,cAAgBD,EAAQC,aAAe,EAAI,G,CAEnG,OAAOJ,CAAM,EAEjB3J,KAAKoF,0BAA4B,KAC7B,MAAMrB,EAAc/D,KAAK4D,iBACzB,OAAOG,EAAY1B,WAAWC,GAAWA,EAAOtC,KAAK+B,cAAgB/B,KAAKiC,mBAAkB,EAEhGjC,KAAKgK,aAAehK,KAAKoB,iBAAmB,SAC5CpB,KAAKiK,iBAAoB7C,IACrB,IAAIzE,EACJ,MAAMuH,EAAiBlK,KAAK6B,cACtB7B,KAAKwF,KAAK2E,cAAc,kBAAkBnK,KAAKiC,uBAC/CmF,EAAK+C,cAAc,iCACzB,GAAID,EAAgB,CAChB,MAAME,EAAQF,EAAeG,UAAYH,EAAeI,aACxD,GAAIF,EAAQhD,EAAKmD,UAAYnD,EAAKkD,cAC9BF,EAAQhD,EAAKmD,UAAYnD,EAAKkD,aAAc,CAC5ClD,EAAKmD,UAAYL,EAAeG,S,EAInC1H,EAAK3C,KAAKoH,QAAU,MAAQzE,SAAY,OAAS,EAAIA,EAAG6H,aAAaxK,KAAKC,kBAAmBiK,EAAe9F,IAC7G8F,EAAenH,O,GAKvB/C,KAAKyK,qBAAuB,KACxB,GAAIzK,KAAKoC,QAAQoB,OAAS,GAAKxD,KAAKoC,QAAQyC,IAAK,CAC7C7E,KAAKoC,QAAQyC,KAAKvC,IACd,GAAIA,EAAOoI,SAAU,CACjBpI,EAAOoI,SAAS7F,KAAKvC,IAAYA,EAAOiC,UAAYvE,KAAKc,iBAAiB4H,KAAKpG,I,MAE9E,IAAKA,EAAOiC,SAAU,CACvBvE,KAAKc,iBAAiB4H,KAAKpG,E,KAIvCtC,KAAKc,iBAAmBd,KAAK0J,iBAAiB1J,KAAKc,kBACnDd,KAAK2K,oBAAoB9H,KAAK,CAAET,QAASpC,KAAKc,kBAAmB,EAErEd,KAAK4K,iBAAmB,KACpB,IAAIjI,EACJ,IAAIkI,EAAgB,EACpB7K,KAAKwF,KACAC,iBAAiB,gCACjBX,SAASxC,GAAYuI,GAAiBvI,EAAOwI,eAClD,GAAID,GAAiB,IAAK,EACrBlI,EAAK3C,KAAKoH,QAAU,MAAQzE,SAAY,OAAS,EAAIA,EAAGkF,UAAUG,IAAI,c,GAG/EhI,KAAK+K,kBAAqBlE,IACtB7G,KAAKgL,YAAYnI,KAAK,CAAEgE,MAAK,EAEjC7G,KAAKiL,cAAgB,CAAC3I,EAAQ4I,KAC1B,IAAIvI,EACJ,MAAMwI,IAAkB7I,EAAOtC,KAAK+B,eAC9B/B,KAAKoD,OACP8H,KACEvI,EAAK3C,KAAKqG,YAAc,MAAQ1D,SAAY,OAAS,EAAIA,EAAG1D,WAAae,KAAKG,eACpF,OAAQiL,EAAEC,EAAU,KAAM/I,EAAOgJ,SAAWF,EAAE,uBAAwB,CAAEtJ,KAAM,SAAWsJ,EAAE,MAAO,CAAEG,MAAO,CACnG,wBAAyB,KACzB,kBAAmBJ,KACjB7I,EAAOkJ,OAASlJ,EAAOmJ,YAAeL,EAAE,MAAO,CAAEG,MAAO,gBAAkBjJ,EAAOkJ,MAASJ,EAAE,MAAO,CAAEG,MAAO,cAAeG,UAAWhM,EAAuB4C,EAAOkJ,MAAO,cAAe,UAAalJ,EAAOmJ,WAAcL,EAAE,gBAAiB,CAAEO,QAAS,OAAQ,cAAe,QAAUrJ,EAAOtC,KAAKwB,cAAiBc,EAAOkH,aAAgB4B,EAAE,gBAAiB,CAAEhH,GAAI,GAAGpE,KAAKsD,YAAYhB,EAAOtC,KAAK+B,2BAA4BwJ,MAAO,qBAAsBI,QAAS,UAAW,cAAe,QAAUP,EAAE,IAAK,KAAM9I,EAAOkH,cAAgBlH,EAAOmH,SAAY2B,EAAE,MAAO,CAAEG,MAAO,CACzjB,iBAAkBjJ,EAAOkJ,OAASlJ,EAAOmJ,WAAanJ,EAAOkH,aAC9DkC,UAAWpM,EAAmBgD,EAAOmH,QAAQmC,WAAY,cAAe,UAAaT,GAAiBC,EAAE,OAAQ,CAAEG,MAAO,aAAcG,UAAWG,IAAS,EAEtK7L,KAAK8L,cAAgB,CAACxJ,EAAQ4I,EAAUzG,EAAO6E,KAC3C,IAAI3G,EACJ,MAAMF,KAAEA,EAAIxB,YAAEA,EAAW+I,aAAEA,EAAYhJ,yBAAEA,EAAwBiB,kBAAEA,EAAiBG,QAAEA,GAAapC,KACnG,OAAQoL,EAAE,KAAMW,OAAOC,OAAO,CAAE5H,GAAIpE,KAAKsD,YAAYhB,EAAOtC,KAAK+B,aAAcwJ,MAAO,CAC9EjJ,OAAQ,KACR,iBAAkB0H,GACX/I,GAAeD,IACdsB,EAAOtC,KAAK+B,cAAgBE,EAC9BhB,GAAeiK,EACrB,6BAA8B5I,EAAOyH,aACjC3H,EAAQqC,EAAQ,KACfrC,EAAQqC,EAAQ,GAAGsF,aACxB,oBAAqBzH,EAAOiC,SAC5B,mBAAoBjC,EAAOgJ,QAC3BW,UAAW3J,EAAO0B,UACnBkI,KAAM,SAAUC,SAAU1J,IACxByI,GAAY5I,EAAOtC,KAAK+B,cAAgBE,IACzChB,EACE,IACA,KAAM,aAAcjB,KAAKqJ,mBAAmB/G,EAAQgH,GAAe,gBAAiB4B,EAAW,OAAS,QAAS,gBAAiB5I,EAAOiC,SAAW,OAAS,QAAS6H,SAAU9J,EAAO0B,WAAa1B,EAAOgJ,QAC3MtL,KAAKuG,kBACLvD,UAAWqJ,OAAQrM,KAAK+G,WAAYuF,YAAatM,KAAKuH,gBAAiB,aAAcjF,EAAOtC,KAAK+B,YAAa,aAAcO,EAAOtC,KAAKwB,cAAiBmB,EAAKL,EAAOiK,aAAe,MAAQ5J,SAAY,EAAIA,EAAK,IAAML,EAAO0B,SAAYoH,EAAEC,EAAU,KAAMD,EAAE,MAAO,CAAEG,MAAO,sBAAwBH,EAAE,MAAO,CAAEG,MAAO,iBAAkBiB,MAAO,6BAA8BC,QAAS,YAAaC,KAAM,WAAatB,EAAE,QAAS,KAAM,SAAUA,EAAE,IAAK,KAAMA,EAAE,OAAQ,CAAEuB,EAAG,mLAAqLvB,EAAE,gBAAiB,CAAEO,QAAS,SAAWrJ,EAAOtC,KAAKwB,cAAe4J,EAAE,YAAa,CAAEtJ,KAAM,QAAS6J,QAAS,WAAYS,QAASpM,KAAK0G,YAAakG,UAAW5M,KAAK4G,mBAAoByF,OAAQrM,KAAK+K,kBAAmB3G,GAAI,gBAAkB,UAAcpE,KAAKiL,cAAc3I,EAAQ4I,GAAW,C,CAGx7B,gBAAA2B,GACI,IAAK7M,KAAKyC,MAAQzC,KAAK8M,eAAgB,CACnC9M,KAAK8M,eAAeC,UACpB/M,KAAK8M,eAAiB,I,EAG9B,mBAAAE,CAAoBC,GAChBjN,KAAKM,YAAc2M,EAAWC,MAAMC,GAAQA,EAAInJ,WAChDhE,KAAKO,UAAY0M,EAAWC,MAAMC,GAAQA,EAAI7B,UAC9CtL,KAAKc,iBAAmB,GACxBd,KAAKyK,sB,CAET,iBAAA2C,GACI,GAAIpN,KAAK2B,UAAW,CAChB,GAAI3B,KAAK4B,aAAe,aACpB5B,KAAK6D,qBAAqB,GAC9B7D,KAAKgB,yBAA2B,I,EAGxC,oBAAAqM,GACI,IAAI1K,EAAIqE,EAAIC,GACXtE,EAAK3C,KAAK8M,kBAAoB,MAAQnK,SAAY,OAAS,EAAIA,EAAGoK,WAClE/F,EAAKhH,KAAKqG,YAAc,MAAQW,SAAY,OAAS,EAAIA,EAAGsG,oBAAoB,UAAWtN,KAAKgC,sBAChGiF,EAAKjH,KAAKqG,YAAc,MAAQY,SAAY,OAAS,EAAIA,EAAGqG,oBAAoB,iBAAkBtN,KAAKkC,mB,CAE5G,iBAAAqL,GACI,IAAI5K,EAAIqE,EAAIC,EAAIC,EAChBlH,KAAKyK,wBACJ9H,EAAK3C,KAAKqG,YAAc,MAAQ1D,SAAY,OAAS,EAAIA,EAAG6K,iBAAiB,UAAWxN,KAAKgC,sBAC7FgF,EAAKhH,KAAKqG,YAAc,MAAQW,SAAY,OAAS,EAAIA,EAAGwG,iBAAiB,iBAAkBxN,KAAKkC,oBACrGlC,KAAKM,aAAe2G,EAAKjH,KAAKoC,WAAa,MAAQ6E,SAAY,OAAS,EAAIA,EAAGiG,MAAMC,GAAQA,EAAInJ,WACjGhE,KAAKO,WAAa2G,EAAKlH,KAAKoC,WAAa,MAAQ8E,SAAY,OAAS,EAAIA,EAAGgG,MAAMC,GAAQA,EAAI7B,S,CAEnG,gBAAAmC,GACI,GAAIzN,KAAK2B,WACL3B,KAAKqG,SAASqH,qBAAsB,CACpC1N,KAAKe,wBAA0B,I,CAEnC4M,EAAiC,CAC7B,CAAEC,KAAM5N,KAAKyC,KAAMoL,SAAU,QAC7B,CAAED,KAAM5N,KAAKoC,QAASyL,SAAU,WAChC,CAAED,KAAM5N,KAAKoJ,OAAQyE,SAAU,WAC/B,CAAED,KAAM5N,KAAK8N,WAAYD,SAAU,gBAEpC,O,CAEP,kBAAAE,GACI,MAAMC,EAAsBhO,KAAKoC,QAAQ8K,MAAM5K,GAAWA,EAAOtC,KAAK+B,cAAgB/B,KAAKoD,QAC3F,GAAIpD,KAAKoH,MACLpH,KAAKyC,MACLzC,KAAKoC,QAAQoB,SAAW,IACvBxD,KAAKY,iBAAkB,CACxB,GAAIZ,KAAKoD,OACLpD,KAAKiB,aACL+M,GACAhO,KAAKqB,sBACJrB,KAAK0B,iBAAkB,CACxB1B,KAAKiK,iBAAiBjK,KAAKoH,K,MAE1B,GAAIpH,KAAK6B,cAAe,CACzB7B,KAAKoH,KAAKrE,O,MAET,KAAM/C,KAAKiC,oBACXjC,KAAKe,0BACLf,KAAKkB,yBAA0B,CAChC,MAAM+M,EAAgBjO,KAAKwF,KAAK2E,cAAc,kBAAkBnK,KAAKiC,uBACrE,GAAIgM,EAAe,CACfjO,KAAKoH,KAAKoD,aAAaxK,KAAKC,kBAAmBgO,EAAc7J,IAC7D6J,EAAclL,O,OAGjB,GAAI/C,KAAK8C,SAAW9C,KAAK8C,QAAQ7D,UAAY,QAAS,CACvDe,KAAKoH,KAAKrE,O,EAGlB,GAAI/C,KAAKoH,MAAQpH,KAAKyC,OAASzC,KAAKoD,OAASpD,KAAK6B,cAAe,CAC7D7B,KAAKiK,iBAAiBjK,KAAKoH,K,CAE/BpH,KAAKY,iBAAmB,K,CAE5B,kBAAAsN,GACI,GAAIlO,KAAKyC,OAASzC,KAAK8M,gBAAkB9M,KAAKmO,SAAU,CACpDnO,KAAKoO,aAAapO,KAAKmO,S,CAE3B,GAAInO,KAAKyC,QAAUzC,KAAKoC,QAAQoB,OAAQ,CACpCxD,KAAK4K,kB,EAMb,qBAAMyD,GACF,IAAKrO,KAAKW,iBAAkB,CACxBX,KAAK4C,gBAAgBC,KAAK,CAAEJ,MAAOzC,KAAKyC,OACxCzC,KAAKiB,YAAc,K,CAEvBjB,KAAKW,iBAAmB,K,CAO5B,wBAAM2N,CAAmB5K,GACrB,GAAI1D,KAAKoB,iBAAmB,YAAa,CACrCpB,KAAKiE,8BAA8BP,E,KAElC,CACD1D,KAAK+E,gCAAgCrB,E,EAM7C,0BAAM6K,GACFvO,KAAK6D,qBAAqB,E,CAO9B,kBAAMuK,CAAaI,GAEfxO,KAAK8M,eAAiB2B,EAAaD,EAAQxO,KAAKwF,KAAMuG,OAAOC,OAAO,CAAE0C,UAAW,eAAgBC,UAAW,CACpG,CACIC,KAAM,SACNxM,QAAS,CACLyM,OAAQ,CAAC,EAAG,KAGpB,CACID,KAAM,OACNxM,QAAS,CACL0M,mBAAoB,CAAC,aACrBC,aAAc,eAGrB/O,KAAKmB,a,CAMlB,4BAAM6N,CAAuBC,GACzBjP,KAAKmB,YAAc8N,C,CAEvB,0BAAA7I,CAA2BrC,EAAa5B,GACpC,IAAK4B,EAAY5B,GACb,OACJ,GAAInC,KAAK2B,UAAW,CAChB3B,KAAKqG,SAASC,WACd,GAAItG,KAAK4B,aAAe,aACpB5B,KAAK6D,qBAAqB,E,CAElC,GAAI7D,KAAK0B,iBAAkB,CACvB1B,KAAKqG,SAASC,U,CAElBtG,KAAKe,wBAA0B,I,CAEnC,MAAAmO,GACI,MAAMpB,WAAEA,EAAU1L,QAAEA,EAAOgH,OAAEA,EAAMhG,MAAEA,EAAK7B,UAAEA,EAASjB,YAAEA,EAAWC,UAAEA,EAASuB,KAAEA,EAAIW,KAAEA,EAAIK,QAAEA,EAAO7B,YAAEA,EAAWoF,SAAEA,EAAQlG,eAAEA,EAAcsB,YAAEA,GAAiBzB,KAC5J,MAAMmP,EAAsB,IAAI/L,IAAU,MAAQA,SAAe,OAAS,EAAIA,EAAMI,UAAYxD,KAAKc,iBAAiB0C,OAAS,QAAU,eACzI,MAAM4L,EAAepP,KAAKwF,KAAKqC,UAAUP,SAAS,cAClD,OAAQ8D,EAAEiE,EAAM,CAAEnL,IAAK,2CAA4CqH,MAAO,CAClE,uBAAwBhK,EACxB,oBAAsBuB,IAAY,MAAQA,SAAiB,OAAS,EAAIA,EAAQ7D,WAAa,UACxFoH,IAAa,MAAQA,SAAkB,OAAS,EAAIA,EAASpH,WAAakB,GAC3EG,GACAC,EACJ,CAAC,WAAWuB,KAAS,KACrB,eAAgBW,GAAQL,EAAQoB,SAAW,EAC3C,mBAAoB/B,IACnBW,EAAQoB,SAAW,GAAM4H,EAAE,KAAM,CAAElH,IAAK,2CAA4CE,GAAIgF,EAAQmC,MAAO,OAAQW,KAAM,UAAW,aAAc,GAAG4B,WAAqB,uBAAwBrM,EAAc,OAAS,QAAS0K,SAAU1J,IACxOxB,KACC6B,IAAY,MAAQA,SAAiB,OAAS,EAAIA,EAAQ7D,WAAa,UACpEoH,IAAa,MAAQA,SAAkB,OAAS,EAAIA,EAASpH,WAAakB,GAC7E,IACA,KAAMmP,IAAMC,GAAQvP,KAAKoH,KAAOmI,EAAK3C,UAAW5M,KAAKwH,kBAAmBgI,QAASxP,KAAK0H,gBAAiB2E,OAAQrM,KAAK+G,YAAc/G,KAAK0J,iBAAiBtH,GAASyC,KAAI,CAACvC,EAAQmC,KACpL,GAAInC,EAAOoI,SAAU,CACjB,GAAIpI,EAAOoI,SAASlH,OAAS,EAAG,CAC5B,OAAQ4H,EAAE,MAAO,KAAMA,EAAE,gBAAiB,CAAEG,MAAO,qBAAsBW,KAAM,eAAgBP,QAAS,kBAAoBP,EAAE,IAAK,KAAM9I,EAAOtC,KAAKwB,cAAec,EAAOoI,SAAS7F,KAAK4K,GAAgBA,EAAYzP,KAAKwB,aACtNxB,KAAK8L,cAAc2D,EAAahO,EAC1B2B,IAAU,MAAQA,SAAe,OAAS,EAAIA,EAAMhE,SAASqQ,EAAYzP,KAAK+B,aAC9E0N,EAAYzP,KAAK+B,cAAgBqB,EAAOqB,EAAOnC,K,KAExD,CACD,OAAO,I,MAGV,CAED,OAAQA,EAAOtC,KAAKwB,aAChBxB,KAAK8L,cAAcxJ,EAAQb,EACrB2B,IAAU,MAAQA,SAAe,OAAS,EAAIA,EAAMhE,SAASkD,EAAOtC,KAAK+B,aACzEO,EAAOtC,KAAK+B,cAAgBqB,EAAOqB,E,MAE/CrC,EAAQoB,SAAW,GACrB/B,IACClB,IACAD,IACA8O,GAAiBhE,EAAE,MAAO,CAAElH,IAAK,2CAA4CqH,MAAO,cAAgBH,EAAE,gBAAiB,CAAElH,IAAK,4CAA8CkH,EAAE,IAAK,CAAElH,IAAK,4CAA8C,GAAGd,EAAQA,EAAMI,OAAS,KAAKkM,EAAkC1P,KAAKoC,sBAAuBgJ,EAAE,YAAa,CAAElH,IAAK,2CAA4CqH,MAAO,oBAAqB,aAAc,GAAG4D,iBAAmCrB,IAAcwB,IAAMC,GAAQvP,KAAKmG,gBAAkBoJ,EAAK5D,QAAS,WAAYS,QAASpM,KAAK2H,qBAAsB2E,YAAatM,KAAKiI,yBAA0BoE,OAAQrM,KAAK4H,oBAAqB+H,QAAS3P,KAAK+H,qBAAsBjG,KAAMA,IAAS,QAAU,QAAU,UAAYqN,I","ignoreList":[]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{r as o,h as t,H as e}from"./p-8e4e97b4.js";import{o as r}from"./p-e519f607.js";const c=":host{display:block;margin-bottom:var(--ic-space-md);border-bottom:var(--ic-space-1px) solid var(--ic-tab-bottom-border)}:host(.ic-tab-group-monochrome){border-bottom:var(--ic-space-1px) solid\n var(--ic-tab-bottom-border-monochrome)}:host(.ic-tab-group-inline){margin-bottom:0;border-bottom:none}.tabs-container{display:flex;flex-direction:row}.tabs-container::-webkit-scrollbar{display:none}:host ic-horizontal-scroll{--splitter-color:var(--ic-tab-divider)}:host(.ic-tab-group-monochrome) ic-horizontal-scroll{--splitter-color:var(--ic-tab-divider-monochrome)}";const a=c;const i=class{constructor(t){o(this,t);this.inline=false;this.monochrome=false;this.theme="inherit"}componentDidLoad(){r([{prop:this.label,propName:"label"}],"Tab Group")}render(){const{inline:o,theme:r,label:c,monochrome:a}=this;return t(e,{key:"6d47bc467418bb3448bc201c2903c1729d0b218c",role:"tablist","aria-label":c,class:{["ic-tab-group-inline"]:!!o,[`ic-theme-${r}`]:r!=="inherit",["ic-tab-group-monochrome"]:!!a}},t("ic-horizontal-scroll",{key:"4cd7ad023ed041945dd0ea53ea30ef471c4dc87a",theme:r,"focus-trigger":"tabFocus",monochrome:a},t("div",{key:"7b755ee071f940a648289a38cf792a86b19ee0f5",class:"tabs-container"},t("slot",{key:"c28ac4504330b33bc6809e8cc4bb8646eb0545e9"}))))}static get delegatesFocus(){return true}};i.style=a;export{i as ic_tab_group};
|
|
2
|
-
//# sourceMappingURL=p-a94a7b71.entry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["icTimeInputCss","IcTimeInputStyle0","inputIds","TimeInput","constructor","hostRef","this","DEFAULT_TIME_FORMAT","TOGGLE_BUTTON_SELECTOR","ARIA_INVALID","ARIA_LABEL","ARIA_LABELLED_BY","EVENT_OBJECT_STRING","FIT_TO_VALUE","initialValue","value","inputsInOrder","isValidHour","isValidMinute","isValidSecond","isValidMillisecond","isValidTime","isTimeSetFromKeyboardEvent","previousSelectedTime","selectedTime","externalSetTime","clearInput","maxTime","minTime","previousHour","previousMinute","previousSecond","previousMillisecond","previousPeriod","clockFocused","clearButtonFocused","removeLabelledBy","hour","minute","second","millisecond","period","isSSSFormat","timeFormat","disabled","disableTimes","emitTimePartChange","hideHelperText","hideLabel","inputId","invalidTimeMessage","max","min","name","required","showAmPmToggle","showClearButton","showClockButton","size","theme","timePeriod","validationAriaLive","validationStatus","validationText","setInputPasteValue","input","pastedValue","inputEl","classList","add","isHHMMFormat","isKeyboardOrEvent","event","Object","prototype","toString","call","setTimeValidity","minHour","maxHour","isEmptyString","setInputValue","clear","newValue","hourInputEl","minuteInputEl","secondInputEl","millisecondInputEl","setValidationMessage","setPreventInput","isPrevented","preventHourInput","preventMinuteInput","preventSecondInput","preventMillisecondInput","parseTimeHelper","date","outOfBoundsMsg","isDisabledTime","convertToTime","inputHour","selectedHour","getHours","selectedHour12","getMinutes","getSeconds","getMilliseconds","Array","isArray","length","some","t","start","end","parsed","parts","parsedHour","convertTo24Hour","formatTime","forEach","setAttribute","removeAttribute","invalidTimeText","time","hh","padStart","mm","ss","sss","handleInput","inputEvent","target","setFitToValueStyling","moveToNextInput","notifyScreenReader","inputType","preventAutoFormatting","handleKeyDown","isInputPrevented","navKeys","eventKey","_a","key","toLowerCase","test","ctrlKey","metaKey","preventDefault","regex","moveToPreviousInput","handleUpDownArrowKeyPress","preventInput","handleFocus","select","handleBlur","autocompleteInput","minValue","maxValue","val","handleTimeChange","force","setValueAndEmitChange","notifyScreenReaderSelectedTime","selectedTimeInfoEl","textContent","updateInputValues","emitIcTimeChange","date24hours","parseInt","allSelected","Date","setHours","setMinutes","setSeconds","setMilliseconds","allTimePartsEmpty","onlyPeriodChanged","icTimeChange","emit","timeObject","setTime","undefined","remove","zuluMatch","match","split","setAriaInvalid","validHour","validMinute","validSecond","validMillisecond","_b","_c","_d","handleClear","periodToggleEl","querySelectorAll","btn","toggleBtn","label","checked","focus","hours","hoursStr","minutesStr","secondsStr","msStr","handleHostBlur","icBlur","handleHostFocus","el","shadowRoot","activeElement","id","icFocus","handleFormReset","selectedString","substring","selectionStart","selectionEnd","currentInput","findIndex","inputValue","d","setInputsInOrder","shadowInputs","push","removeAriaLabelledBy","inputCompContainerEl","setAriaLabelledBy","getAttribute","labelEl","querySelector","labelId","hasValidation","labelledBy","screenReaderInfoId","getInputDescribedByText","helperText","defaultHelperText","selectedTimeInfoId","assistiveHintId","getInputsInOrder","timeParts","map","part","h","class","ref","placeholder","inputmode","pattern","onPaste","handlePaste","onKeyDown","getDescOfInputsOrder","getScreenReaderInfo","inputDescriptors","IcInformationStatus","Error","liveRegion","clipboardData","getData","isPastedStringTimeValid","setPastedValueAndValidation","handleClearFocus","handleClearBlur","ev","relatedTarget","handleClockFocus","handleClockBlur","replace","isoMatch","index","timeValue","slice","activeToggle","setActiveToggle","pasted","trim","isNumeric","handleAMPM","selectedOption","watchInputHandler","watchDisabledHandler","removeDisabledFalse","watchHelperTextHandler","useDefault","watchMaxHandler","watchMinHandler","watchRequiredHandler","asteriskSpan","document","createElement","appendChild","watchTimeFormatHandler","oldDefaultHelperText","disconnectedCallback","removeFormResetListener","componentWillLoad","addFormResetListener","componentDidLoad","onComponentRequiredPropUndefined","prop","propName","addEventListener","componentWillUpdate","componentDidRender","getTime","triggerIcTimeChange","render","hasCustomValidation","assistiveHint","renderHiddenInput","showDivider","Host","onBlur","onFocus","for","slot","role","innerHTML","Clear","onClick","variant","divider","Clock","onIcChange","e","detail","shiftKey","lastInput","status","message","ariaLiveMode"],"sources":["src/components/ic-time-input/ic-time-input.css?tag=ic-time-input&encapsulation=shadow","src/components/ic-time-input/ic-time-input.tsx"],"sourcesContent":["@import \"../../global/normalize.css\";\n\n:host {\n --ic-input-label-helpertext-padding: var(--ic-space-xs);\n --input-bg-color: var(--ic-time-picker-field-background);\n --ic-input-label-text-color: var(--ic-time-picker-label);\n --ic-input-label-helper-text-color: var(--ic-time-picker-subtitle);\n --border-color: var(--ic-time-picker-time-field-border-default);\n --border-color-disabled: var(--ic-time-picker-border-disabled);\n --border-color-hover: var(--ic-time-picker-time-field-border-hover);\n --border-color-pressed: var(--ic-time-picker-time-field-border-pressed);\n --border-error-color: var(--ic-time-picker-border-error);\n --border-error-color-hover: var(--ic-time-picker-border-error-hover);\n --border-error-color-pressed: var(--ic-time-picker-border-error-pressed);\n --border-success-color: var(--ic-time-picker-border-success);\n --border-success-color-hover: var(--ic-time-picker-border-success-hover);\n --border-success-color-pressed: var(--ic-time-picker-border-success-pressed);\n --border-warning-color: var(--ic-time-picker-border-warning);\n --border-warning-color-hover: var(--ic-time-picker-border-warning-hover);\n --border-warning-color-pressed: var(--ic-time-picker-border-warning-pressed);\n --input-width: calc((4 * var(--ic-space-xxl)) + var(--ic-space-xxs));\n}\n\n:host(.ic-time-input-disabled) {\n --ic-input-label-text-color: var(--ic-time-picker-label-disabled);\n --ic-input-label-helper-text-color: var(--ic-time-picker-subtitle-disabled);\n}\n\n:host(.ic-time-input-disabled) input {\n color: var(--ic-time-picker-time-text-disabled);\n}\n\n:host(.ic-time-input-large) {\n --input-width: calc(\n (4 * var(--ic-space-xxl)) + var(--ic-space-xxs) + var(--ic-space-lg)\n );\n}\n\n:host(.ic-time-input-small) {\n --input-width: calc(\n (3 * var(--ic-space-xxl)) + var(--ic-space-xxs) + var(--ic-space-xl)\n );\n}\n\n.with-am-pm-toggle {\n display: flex;\n flex-direction: row;\n}\n\n.am-pm-toggle ::part(button) {\n min-width: fit-content;\n}\n\n.am-pm-toggle {\n margin-left: var(--ic-space-xs);\n}\n\ninput {\n border: 0;\n height: 100%;\n padding: 0;\n outline: none;\n background: none;\n -moz-appearance: textfield;\n appearance: textfield;\n color: var(--ic-time-picker-time-text-default);\n caret-color: var(--ic-time-picker-typing-cursor);\n}\n\ninput::-webkit-outer-spin-button,\ninput::-webkit-inner-spin-button {\n -webkit-appearance: none;\n}\n\ninput:-webkit-autofill {\n box-shadow: 0 0 0 var(--ic-space-sm) var(--ic-color-background-primary) inset;\n -webkit-text-fill-color: var(--ic-time-picker-time-text-default) !important;\n}\n\ninput::placeholder {\n color: var(--ic-time-picker-field-placeholder-text);\n}\n\nic-input-component-container {\n cursor: text;\n}\n\nic-input-component-container .focus-indicator {\n padding: var(--ic-space-xxxs) var(--ic-space-xs);\n align-items: center;\n}\n\n.time-inputs {\n color: var(--ic-time-picker-field-placeholder-text);\n}\n\n.hour-input {\n width: 1.438rem;\n}\n\n.minute-input {\n width: 1.813rem;\n}\n\n.second-input {\n width: 1.18rem;\n}\n\n.millisecond-input,\n.millisecond-input.fit-to-value {\n width: 1.75rem;\n}\n\n.fit-to-value {\n width: 1.25rem;\n}\n\n.sr-only {\n position: absolute;\n left: -9999px;\n}\n\n.input-container {\n width: 100%;\n display: flex;\n justify-content: space-between;\n align-items: center;\n position: relative;\n}\n\n.action-buttons {\n display: flex;\n align-items: center;\n}\n\n.show-clock-button-wrapper {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.clear-button,\n.clock-button {\n border-radius: var(--ic-border-radius);\n transition: box-shadow var(--ic-easing-transition),\n border-radius var(--ic-easing-transition);\n margin: 0;\n}\n\n.clear-button.hidden {\n display: none;\n}\n\n.clear-button:focus,\n.clock-button:focus,\n.clear-button:active,\n.clock-button:active {\n background-color: var(--ic-color-focus-inner) !important;\n box-shadow: inset 0 0 0 0.125rem var(--ic-color-focus-outer) !important;\n border-radius: 0.25rem;\n}\n\n.clock-button:focus,\n.clock-button:active {\n --ic-button-tertiary-text-active: var(--ic-atoms-input-clear-button-focus);\n --ic-button-tertiary-text-hover-active: var(\n --ic-atoms-input-clear-button-focus\n );\n --ic-button-tertiary-text-pressed-active: var(\n --ic-atoms-input-clear-button-focus\n );\n}\n\n.clear-button:focus,\n.clock-button:focus,\n.clear-button:active *,\n.clock-button:active * {\n fill: var(--ic-atoms-input-clear-button-focus);\n}\n\n.clear-button svg {\n color: var(--ic-time-picker-clear-icon);\n}\n\n.clear-button:focus svg {\n color: var(--ic-atoms-input-clear-button-focus);\n}\n\n.divider {\n margin: 0 var(--ic-space-xxs);\n width: var(--ic-space-1px);\n background-color: var(--ic-atoms-input-divider);\n border-radius: var(--ic-space-1px);\n}\n\n.divider.small {\n height: var(--ic-space-md);\n}\n\n.divider.medium {\n height: calc(var(--ic-space-sm) + var(--ic-space-xs));\n}\n\n.divider.large {\n height: var(--ic-space-lg);\n}\n\nic-input-validation {\n --ic-input-validation-status-text-color: var(--ic-time-picker-status-text);\n --ic-input-validation-error: var(--ic-time-picker-icon-error);\n --ic-input-validation-warning-icon-color: var(--ic-time-picker-icon-warning);\n --ic-input-validation-success-icon-color: var(--ic-time-picker-icon-success);\n}\n\n@media (forced-colors: active) {\n .clear-button svg {\n color: currentcolor;\n }\n}\n","/* eslint-disable react/jsx-no-bind */\nimport {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Prop,\n State,\n Host,\n Method,\n Watch,\n} from \"@stencil/core\";\nimport {\n IcAriaLive,\n IcDateValueFormat,\n IcDisableTimeSelection,\n IcInformationStatus,\n IcInformationStatusOrEmpty,\n IcSizes,\n IcThemeMode,\n IcTimeFormat,\n} from \"../../utils/types\";\nimport {\n isEmptyString,\n isNumeric,\n addFormResetListener,\n getInputDescribedByText,\n onComponentRequiredPropUndefined,\n removeDisabledFalse,\n removeFormResetListener,\n renderHiddenInput,\n parseTimeHelper,\n} from \"../../utils/helpers\";\nimport Clear from \"../../assets/clear-icon.svg\";\nimport Clock from \"../../assets/clock.svg\";\n\nlet inputIds = 0;\n\n/**\n * @slot helper-text - Content is set as the helper text for the time input.\n */\n@Component({\n tag: \"ic-time-input\",\n styleUrl: \"ic-time-input.css\",\n shadow: {\n delegatesFocus: true,\n },\n})\nexport class TimeInput {\n private DEFAULT_TIME_FORMAT: IcTimeFormat = \"HH:MM:SS\";\n private TOGGLE_BUTTON_SELECTOR = \"ic-toggle-button\";\n private ARIA_INVALID = \"aria-invalid\";\n private ARIA_LABEL = \"aria-label\";\n private ARIA_LABELLED_BY = \"aria-labelledby\";\n private assistiveHintId: string;\n private hourInputEl?: HTMLInputElement;\n private minuteInputEl?: HTMLInputElement;\n private secondInputEl?: HTMLInputElement;\n private millisecondInputEl?: HTMLInputElement;\n private periodToggleEl?: HTMLIcToggleButtonGroupElement;\n private defaultHelperText: string;\n private EVENT_OBJECT_STRING = \"[object Event]\";\n private FIT_TO_VALUE = \"fit-to-value\";\n private initialValue = this.value;\n private inputCompContainerEl: HTMLIcInputComponentContainerElement;\n private inputsInOrder: HTMLInputElement[] = [];\n private isValidHour: boolean = true;\n private isValidMinute: boolean = true;\n private isValidSecond: boolean = true;\n private isValidMillisecond: boolean = true;\n private isValidTime: boolean = true;\n private isTimeSetFromKeyboardEvent: boolean = false;\n private preventAutoFormatting: boolean;\n private preventHourInput: boolean;\n private preventMinuteInput: boolean;\n private preventSecondInput: boolean;\n private preventMillisecondInput: boolean;\n private previousSelectedTime: Date | null = null;\n private selectedTime: Date | null = null;\n private selectedTimeInfoEl?: HTMLSpanElement;\n private screenReaderInfoId: string;\n private selectedTimeInfoId: string;\n private externalSetTime: boolean = false;\n private clearInput: boolean = false;\n private maxTime: Date | null = null;\n private minTime: Date | null = null;\n private previousHour: string = \"\";\n private previousMinute: string = \"\";\n private previousSecond: string = \"\";\n private previousMillisecond: string = \"\";\n private previousPeriod: string = \"AM\";\n\n @Element() el: HTMLIcTimeInputElement;\n\n @State() invalidTimeText: string;\n @State() clockFocused: boolean = false;\n @State() clearButtonFocused: boolean = false;\n @State() removeLabelledBy: boolean = false;\n @State() hour: string = \"\";\n @State() minute: string = \"\";\n @State() second: string = \"\";\n @State() millisecond: string = \"\";\n @State() period: string = \"AM\";\n\n @Watch(\"hour\")\n @Watch(\"minute\")\n @Watch(\"second\")\n @Watch(\"millisecond\")\n @Watch(\"period\")\n watchInputHandler(): void {\n if (\n this.emitTimePartChange &&\n !this.externalSetTime &&\n !this.clearInput &&\n !(\n this.hour &&\n this.minute &&\n this.second &&\n (this.isSSSFormat() ? this.millisecond : true)\n ) &&\n this.selectedTime === null\n ) {\n this.emitIcTimeChange(this.selectedTime);\n }\n }\n private isSSSFormat = () => this.timeFormat === \"HH:MM:SS.SSS\";\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 * An array of times that will be disabled in the time input. The times can be in any format supported as `timeFormat`, in ISO 8601 time string format (`HH:MM:SS`) or as a JavaScript `Date` object.\n */\n @Prop() disableTimes: IcDisableTimeSelection[] = [];\n\n /**\n * If `true`, every individual input field completed will emit an icTimeChange event.\n */\n @Prop() emitTimePartChange?: boolean = false;\n\n /**\n * The helper text that will be displayed for additional field guidance. This will default to the text \"Use format\" along with the `timeFormat` value.\n */\n @Prop({ mutable: true }) helperText: string | null;\n @Watch(\"helperText\")\n watchHelperTextHandler(useDefault = false): void {\n if (isEmptyString(this.helperText) || useDefault === true)\n this.helperText = this.defaultHelperText;\n }\n\n /**\n * If `true`, the helper text will be visually hidden, but still read out by screenreaders.\n */\n @Prop() hideHelperText: boolean = false;\n\n /**\n * If `true`, the label will be visually hidden, but will still be read out by screen readers.\n */\n @Prop() hideLabel?: boolean = false;\n\n /**\n * The ID for the input.\n */\n @Prop() inputId: string = `ic-time-input-${inputIds++}`;\n\n /**\n * The text to display as the validation message when an invalid time is entered.\n */\n @Prop() invalidTimeMessage: string = \"Please enter a valid time.\";\n\n /**\n * The label for the time input.\n */\n @Prop() label!: string;\n\n /**\n * The latest time that will be allowed. The value can be in any format supported as `timeFormat`, in ISO 8601 time string format (`HH:MM:SS`) or as a JavaScript `Date` object.\n */\n @Prop() max: string | Date = \"\";\n @Watch(\"max\")\n watchMaxHandler(): void {\n this.maxTime = parseTimeHelper(this.max).date;\n }\n\n /**\n * The earliest time that will be allowed. The value can be in any format supported as `timeFormat`, in ISO 8601 time string format (`HH:MM:SS`) or as a JavaScript `Date` object.\n */\n @Prop() min: string | Date = \"\";\n @Watch(\"min\")\n watchMinHandler(): void {\n this.minTime = parseTimeHelper(this.min).date;\n }\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 * If `true`, the input will require a value.\n */\n @Prop() required: boolean = false;\n @Watch(\"required\")\n watchRequiredHandler(): void {\n const labelEl = this.el.shadowRoot?.querySelector(\"label\");\n if (this.required) {\n const asteriskSpan = document.createElement(\"span\");\n asteriskSpan.setAttribute(\"id\", \"asterisk-span\");\n asteriskSpan.setAttribute(\"aria-hidden\", \"true\");\n asteriskSpan.textContent = \" *\";\n labelEl?.appendChild(asteriskSpan);\n } else {\n const asteriskSpan = this.el.shadowRoot?.querySelector(\"#asterisk-span\");\n if (asteriskSpan) {\n asteriskSpan.remove();\n }\n }\n }\n\n /**\n * If `true`, the time input will show an AM/PM toggle when in 12-hour time period.\n */\n @Prop({ mutable: true }) showAmPmToggle?: boolean = false;\n\n /**\n * If `true`, a button which clears the time input when clicked will be displayed.\n */\n @Prop() showClearButton?: boolean = true;\n\n /**\n * @internal If `true`, a button which displays the clock view when clicked will be displayed.\n */\n @Prop() showClockButton?: boolean = false;\n\n /**\n * The size of the time input to be displayed.\n */\n @Prop() size: IcSizes = \"medium\";\n\n /**\n * Sets the time picker to the dark or light theme colors. \"inherit\" will set the color based on the system settings or ic-theme component.\n */\n @Prop() theme?: IcThemeMode = \"inherit\";\n\n /**\n * The format in which the time will be displayed.\n */\n @Prop() timeFormat: IcTimeFormat = this.DEFAULT_TIME_FORMAT;\n @Watch(\"timeFormat\")\n watchTimeFormatHandler(): void {\n const oldDefaultHelperText = this.defaultHelperText;\n this.defaultHelperText = `Use format ${this.timeFormat}`;\n this.watchHelperTextHandler(this.helperText === oldDefaultHelperText);\n }\n\n /**\n * The time period format: \"12\" for 12-hour, \"24\" for 24-hour. Defaults to \"24\".\n */\n @Prop() timePeriod: \"12\" | \"24\" = \"24\";\n\n /**\n * The value of the time input. The value can be in any format supported as `timeFormat`, in ISO 8601 time string format (`HH:MM:SS`) or as a JavaScript `Date` object.\n */\n @Prop({ mutable: true }) value?: IcDateValueFormat = \"\";\n\n /**\n * The value of the `aria-live` attribute on the validation message.\n */\n @Prop() validationAriaLive: IcAriaLive = \"polite\";\n\n /**\n * The validation status - e.g. 'error' | 'warning' | 'success'. This will override the built-in time validation.\n */\n @Prop({ mutable: true }) validationStatus: IcInformationStatusOrEmpty = \"\";\n\n /**\n * The text to display as the validation message. This will override the built-in time validation.\n */\n @Prop() validationText?: string = \"\";\n\n /**\n * @internal Emitted when the clock is opened.\n */\n @Event() clockButtonClicked: EventEmitter<{ value: Date | null }>;\n\n /**\n * Emitted when the input loses focus.\n */\n @Event() icBlur: EventEmitter<{ value: Date | null }>;\n\n /**\n * Emitted when the value has changed.\n */\n @Event() icTimeChange: EventEmitter<{\n value: Date | null;\n timeObject: {\n hour: string | null;\n minute: string | null;\n second: string | null;\n millisecond: string | null;\n period: string | null;\n };\n }>;\n\n /**\n * Emitted when the input gains focus.\n */\n @Event() icFocus: EventEmitter<{ value: Date | null }>;\n\n disconnectedCallback(): void {\n removeFormResetListener(this.el, this.handleFormReset);\n }\n\n componentWillLoad(): void {\n this.watchTimeFormatHandler();\n this.watchHelperTextHandler();\n if (this.value) {\n this.externalSetTime = true;\n this.setTime(this.value);\n }\n this.screenReaderInfoId = `${this.inputId}-screen-reader-info`;\n this.assistiveHintId = `${this.inputId}-assistive-hint`;\n this.selectedTimeInfoId = `${this.inputId}-selected-time-info`;\n addFormResetListener(this.el, this.handleFormReset);\n removeDisabledFalse(this.disabled, this.el);\n }\n\n componentDidLoad(): void {\n this.setInputsInOrder();\n onComponentRequiredPropUndefined(\n [{ prop: this.label, propName: \"label\" }],\n \"Time Input\"\n );\n if (this.value) {\n this.updateInputValues(this.hour, this.minute, this.second);\n this.inputsInOrder.forEach((input) => {\n input.classList.add(this.FIT_TO_VALUE);\n });\n }\n this.setAriaInvalid(\n this.isValidHour,\n this.isValidMinute,\n this.isValidSecond,\n this.isValidMillisecond\n );\n if (this.value) {\n this.notifyScreenReaderSelectedTime();\n }\n this.inputsInOrder.forEach((input) => {\n input.addEventListener(\"input\", this.handleInput);\n input.addEventListener(\"focus\", this.handleFocus);\n input.addEventListener(\"blur\", this.handleBlur);\n });\n this.watchRequiredHandler();\n }\n\n componentWillUpdate(): void {\n if (!this.isTimeSetFromKeyboardEvent) this.setTime(this.value);\n this.setAriaInvalid(\n this.isValidHour,\n this.isValidMinute,\n this.isValidSecond,\n this.isValidMillisecond\n );\n this.handleTimeChange(false);\n this.isTimeSetFromKeyboardEvent = false;\n }\n\n componentDidRender(): void {\n if (this.removeLabelledBy) {\n this.removeAriaLabelledBy();\n return;\n }\n this.setAriaLabelledBy();\n }\n\n /**\n * Returns the value as a Date object\n * @returns Date\n */\n @Method()\n async getTime(): Promise<Date | null> {\n return this.selectedTime;\n }\n\n /**\n * @internal Used to enable other components to invoke an icTimeChange event from the input.\n */\n @Method()\n async triggerIcTimeChange(t: Date | null): Promise<void> {\n this.externalSetTime = true;\n this.setTime(t);\n this.emitIcTimeChange(t);\n this.externalSetTime = false;\n }\n\n private setInputPasteValue = (\n input: EventTarget | null,\n pastedValue: string\n ) => {\n if (input) {\n const inputEl = input as HTMLInputElement;\n inputEl.value = pastedValue;\n inputEl.classList.add(this.FIT_TO_VALUE);\n }\n };\n\n private isHHMMFormat = () => this.timeFormat === \"HH:MM\";\n\n private isKeyboardOrEvent = (event: Event) => {\n return (\n Object.prototype.toString.call(event) === this.EVENT_OBJECT_STRING ||\n Object.prototype.toString.call(event) === \"[object KeyboardEvent]\"\n );\n };\n\n private setTimeValidity = () => {\n const minHour = 0;\n const maxHour = this.timePeriod === \"12\" ? 12 : 23;\n if (!isEmptyString(this.hour)) {\n this.isValidHour = +this.hour >= minHour && +this.hour <= maxHour;\n } else {\n this.isValidHour = true;\n }\n if (!isEmptyString(this.minute)) {\n this.isValidMinute = +this.minute >= 0 && +this.minute <= 59;\n } else {\n this.isValidMinute = true;\n }\n if (!this.isHHMMFormat()) {\n if (!isEmptyString(this.second)) {\n this.isValidSecond = +this.second >= 0 && +this.second <= 59;\n } else {\n this.isValidSecond = true;\n }\n if (this.isSSSFormat()) {\n if (!isEmptyString(this.millisecond)) {\n this.isValidMillisecond =\n +this.millisecond >= 0 && +this.millisecond <= 999;\n } else {\n this.isValidMillisecond = true;\n }\n } else {\n this.isValidMillisecond = true;\n }\n } else {\n this.isValidSecond = true;\n this.isValidMillisecond = true;\n }\n };\n\n private setInputValue = (input: HTMLInputElement, clear = false) => {\n const newValue = clear ? \"\" : input.value;\n if (input === this.hourInputEl) {\n this.hour = newValue;\n } else if (input === this.minuteInputEl) {\n this.minute = newValue;\n } else if (input === this.secondInputEl && !this.isHHMMFormat()) {\n this.second = newValue;\n } else if (this.isSSSFormat() && input === this.millisecondInputEl) {\n this.millisecond = newValue;\n }\n this.setValidationMessage();\n };\n\n private setPreventInput = (input: HTMLInputElement, isPrevented: boolean) => {\n if (input === this.hourInputEl) {\n this.preventHourInput = isPrevented;\n } else if (input === this.minuteInputEl) {\n this.preventMinuteInput = isPrevented;\n } else if (input === this.secondInputEl) {\n this.preventSecondInput = isPrevented;\n } else if (this.isSSSFormat() && input === this.millisecondInputEl) {\n this.preventMillisecondInput = isPrevented;\n }\n };\n\n private setValidationMessage = () => {\n this.maxTime = parseTimeHelper(this.max).date;\n this.minTime = parseTimeHelper(this.min).date;\n this.setTimeValidity();\n let outOfBoundsMsg = \"\";\n let isDisabledTime = false;\n if (\n !isEmptyString(this.hour) &&\n !isEmptyString(this.minute) &&\n (this.isHHMMFormat() || !isEmptyString(this.second)) &&\n (!this.isSSSFormat() || !isEmptyString(this.millisecond))\n ) {\n this.selectedTime = this.convertToTime(\n this.hour,\n this.minute,\n this.isHHMMFormat() ? \"00\" : this.second,\n this.isSSSFormat() ? this.millisecond : \"000\"\n );\n const inputHour = +this.hour;\n const selectedHour = this.selectedTime\n ? this.selectedTime.getHours()\n : null;\n if (\n this.timePeriod === \"12\" &&\n this.showAmPmToggle &&\n selectedHour !== null\n ) {\n let selectedHour12 = selectedHour % 12;\n if (selectedHour12 === 0) selectedHour12 = 12;\n this.isValidTime =\n !!this.selectedTime &&\n selectedHour12 == inputHour &&\n this.selectedTime.getMinutes() == +this.minute &&\n (this.isHHMMFormat() ||\n this.selectedTime.getSeconds() == +this.second) &&\n (!this.isSSSFormat() ||\n this.selectedTime.getMilliseconds() == +this.millisecond);\n } else {\n this.isValidTime =\n !!this.selectedTime &&\n this.selectedTime.getHours() == inputHour &&\n this.selectedTime.getMinutes() == +this.minute &&\n (this.isHHMMFormat() ||\n this.selectedTime.getSeconds() == +this.second) &&\n (!this.isSSSFormat() ||\n this.selectedTime.getMilliseconds() == +this.millisecond);\n }\n\n if (\n this.selectedTime &&\n Array.isArray(this.disableTimes) &&\n this.disableTimes.length > 0\n ) {\n isDisabledTime = this.disableTimes.some((t) => {\n if (\n typeof t === \"object\" &&\n t !== null &&\n \"start\" in t &&\n \"end\" in t\n ) {\n const start = parseTimeHelper(t.start).date;\n const end = parseTimeHelper(t.end).date;\n if (start && end) {\n return this.selectedTime! >= start && this.selectedTime! <= end;\n }\n return false;\n }\n const parsed = parseTimeHelper(t as string | Date).parts;\n if (!parsed) return false;\n let selectedHour = this.selectedTime!.getHours();\n let parsedHour = parsed.hour;\n if (this.timePeriod === \"12\" && this.showAmPmToggle) {\n selectedHour = this.convertTo24Hour(selectedHour);\n parsedHour = this.convertTo24Hour(parsedHour);\n }\n return (\n parsedHour === selectedHour &&\n parsed.minute === this.selectedTime!.getMinutes() &&\n parsed.second === this.selectedTime!.getSeconds()\n );\n });\n if (isDisabledTime) {\n this.isValidTime = false;\n outOfBoundsMsg = this.invalidTimeMessage;\n }\n }\n\n if (this.selectedTime && !isDisabledTime) {\n if (this.minTime && this.selectedTime < this.minTime) {\n this.isValidTime = false;\n outOfBoundsMsg = `Please enter a time after ${this.formatTime(\n this.minTime\n )}.`;\n } else if (this.maxTime && this.selectedTime > this.maxTime) {\n this.isValidTime = false;\n outOfBoundsMsg = `Please enter a time before ${this.formatTime(\n this.maxTime\n )}.`;\n }\n }\n if (!this.isValidTime) {\n this.inputsInOrder.forEach((input) =>\n input.setAttribute(this.ARIA_INVALID, \"true\")\n );\n } else {\n this.inputsInOrder.forEach((input) =>\n input.removeAttribute(this.ARIA_INVALID)\n );\n }\n } else {\n this.selectedTime = null;\n }\n if (\n !(\n this.isValidHour &&\n this.isValidMinute &&\n this.isValidSecond &&\n this.isValidMillisecond &&\n this.isValidTime\n )\n ) {\n this.invalidTimeText = outOfBoundsMsg || this.invalidTimeMessage;\n } else {\n this.invalidTimeText = \"\";\n }\n };\n\n private formatTime = (time: Date): string => {\n const hh = time.getHours().toString().padStart(2, \"0\");\n const mm = time.getMinutes().toString().padStart(2, \"0\");\n const ss = time.getSeconds().toString().padStart(2, \"0\");\n const sss = time.getMilliseconds().toString().padStart(3, \"0\");\n if (this.isSSSFormat()) {\n return `${hh}:${mm}:${ss}.${sss}`;\n }\n return this.isHHMMFormat() ? `${hh}:${mm}` : `${hh}:${mm}:${ss}`;\n };\n\n private handleInput = (event: Event) => {\n const inputEvent = event as InputEvent;\n const input = event.target as HTMLInputElement;\n if (input === this.millisecondInputEl && this.isSSSFormat()) {\n this.setInputValue(input);\n this.setPreventInput(input, false);\n this.setFitToValueStyling(input);\n if (input.value.length === 3) {\n this.moveToNextInput(input);\n this.setPreventInput(input, true);\n } else {\n this.setPreventInput(input, false);\n }\n if (input.value.length === 0) {\n this.setInputValue(input, true);\n this.setValidationMessage();\n }\n this.notifyScreenReader(input);\n } else if (input !== this.hourInputEl) {\n if (\n inputEvent.inputType !== \"deleteContentBackward\" &&\n !this.preventAutoFormatting\n ) {\n if (\n input.value.length === 1 &&\n +input.value >= 6 &&\n +input.value <= 9\n ) {\n this.setInputValue(input);\n this.notifyScreenReader(input);\n this.moveToNextInput(input);\n }\n if (input.value.length === 2) {\n this.setInputValue(input);\n this.setPreventInput(input, true);\n this.notifyScreenReader(input);\n this.moveToNextInput(input);\n } else {\n this.setPreventInput(input, false);\n }\n } else if (this.preventAutoFormatting) {\n if (input.value.length === 2 && !this.isKeyboardOrEvent(event)) {\n this.setInputValue(input);\n this.setPreventInput(input, true);\n this.moveToNextInput(input);\n } else {\n this.setInputValue(input);\n }\n }\n if (input.value.length !== 2) {\n this.setPreventInput(input, false);\n }\n this.setFitToValueStyling(input);\n if (input.value.length === 0) {\n this.setInputValue(input, true);\n this.setValidationMessage();\n }\n this.notifyScreenReader(input);\n } else {\n if (input.value.length === 2) {\n this.setInputValue(input);\n if (\n Object.prototype.toString.call(event) !== this.EVENT_OBJECT_STRING\n ) {\n this.moveToNextInput(input);\n }\n this.setPreventInput(input, true);\n } else {\n this.setInputValue(input, true);\n this.setPreventInput(input, false);\n }\n this.setFitToValueStyling(input);\n if (input.value.length === 0) {\n this.setInputValue(input, true);\n this.setValidationMessage();\n }\n this.notifyScreenReader(input);\n }\n };\n\n private handleKeyDown = (event: KeyboardEvent, isInputPrevented: boolean) => {\n const navKeys =\n /arrowup|arrowdown|arrowleft|arrowright|shift|tab|backspace|delete/i;\n const input = event.target as HTMLInputElement;\n const eventKey = event.key?.toLowerCase();\n if (\n !/-?\\d*\\.?\\d+(e[-+]?\\d+)?|[:]|[.]/i.test(eventKey) &&\n !navKeys.test(eventKey) &&\n !(\n (event.ctrlKey || event.metaKey) &&\n (eventKey === \"v\" || eventKey === \"c\")\n )\n ) {\n event.preventDefault();\n }\n const regex =\n /-?\\d*\\.?\\d+(e[-+]?\\d+)?|[:]|arrowup|arrowdown|arrowleft|arrowright|shift|tab|backspace|delete/;\n if (\n !regex.test(eventKey) &&\n !(\n (event.ctrlKey || event.metaKey) &&\n (eventKey === \"v\" || eventKey === \"c\")\n )\n ) {\n event.preventDefault();\n }\n switch (eventKey) {\n case \":\":\n case \"arrowright\":\n event.preventDefault();\n this.moveToNextInput(input);\n break;\n case \"arrowleft\":\n event.preventDefault();\n this.moveToPreviousInput(input);\n break;\n case \"arrowup\":\n case \"arrowdown\":\n this.preventAutoFormatting = true;\n this.handleUpDownArrowKeyPress(input, event);\n break;\n case \"backspace\":\n if (input.value.length === 0) {\n event.preventDefault();\n this.moveToPreviousInput(input);\n }\n break;\n default:\n break;\n }\n this.preventInput(event, isInputPrevented);\n this.isTimeSetFromKeyboardEvent = true;\n };\n\n private handleFocus = (event: FocusEvent) => {\n const input = event.target as HTMLInputElement;\n input.select();\n };\n\n private handleBlur = (event: FocusEvent) => {\n const input = event.target as HTMLInputElement;\n if (input === this.millisecondInputEl && this.isSSSFormat()) {\n if (input.value.length === 1) {\n input.value = `00${input.value}`;\n this.setInputValue(input);\n } else if (input.value.length === 2) {\n input.value = `0${input.value}`;\n this.setInputValue(input);\n }\n this.setFitToValueStyling(input);\n } else if (input) {\n this.autocompleteInput(input);\n }\n };\n\n private handleUpDownArrowKeyPress = (\n input: HTMLInputElement,\n event: KeyboardEvent\n ) => {\n let minValue = 0;\n let maxValue = 59;\n if (input === this.hourInputEl) {\n minValue = this.timePeriod === \"12\" ? 1 : 0;\n maxValue = this.timePeriod === \"12\" ? 12 : 23;\n }\n let val = +input.value;\n if (event.key === \"ArrowUp\") {\n val = val + 1;\n if (val > maxValue) val = minValue;\n input.value = val.toString().padStart(2, \"0\");\n this.notifyScreenReader(input);\n }\n if (event.key === \"ArrowDown\") {\n val = val - 1;\n if (val < minValue) val = maxValue;\n input.value = val.toString().padStart(2, \"0\");\n this.notifyScreenReader(input);\n }\n this.setInputValue(input);\n this.setFitToValueStyling(input);\n };\n\n private handleTimeChange = (force: boolean) => {\n if (force || this.selectedTime !== this.previousSelectedTime) {\n if (this.value) {\n this.inputsInOrder.forEach((input) => {\n input.classList.add(this.FIT_TO_VALUE);\n });\n }\n if (\n this.hour &&\n this.minute &&\n (this.isHHMMFormat() || this.second) &&\n this.invalidTimeText === \"\"\n ) {\n this.setValueAndEmitChange(this.selectedTime);\n this.notifyScreenReaderSelectedTime();\n } else if (\n !(this.selectedTime === null && this.previousSelectedTime === null) &&\n this.selectedTimeInfoEl\n ) {\n this.setValueAndEmitChange(null, true);\n this.selectedTimeInfoEl.textContent = \"\";\n }\n this.previousSelectedTime = this.selectedTime;\n if (!this.isTimeSetFromKeyboardEvent) {\n this.updateInputValues(this.hour, this.minute, this.second);\n }\n }\n };\n\n private setValueAndEmitChange = (value: Date | null, force = false) => {\n if (this.value !== value || force) {\n this.emitIcTimeChange(value);\n this.value = value;\n }\n };\n\n private convertTo24Hour = (hour: number) => {\n let date24hours = hour;\n if (this.period === \"PM\" && hour < 12) date24hours = hour + 12;\n if (this.period === \"AM\" && hour === 12) date24hours = 0;\n\n return date24hours;\n };\n\n private emitIcTimeChange = (t: Date | null) => {\n const hour = parseInt(this.hour);\n const minute = parseInt(this.minute);\n const second = parseInt(this.second);\n const millisecond = parseInt(this.millisecond);\n const period = this.period;\n\n let allSelected = false;\n if (this.isSSSFormat()) {\n allSelected =\n this.hour !== \"\" &&\n this.minute !== \"\" &&\n this.second !== \"\" &&\n this.millisecond !== \"\";\n } else if (this.timeFormat === this.DEFAULT_TIME_FORMAT) {\n allSelected =\n this.hour !== \"\" && this.minute !== \"\" && this.second !== \"\";\n } else if (this.timeFormat === \"HH:MM\") {\n allSelected = this.hour !== \"\" && this.minute !== \"\";\n }\n\n let time = t;\n let date24hours = hour;\n if (\n hour != null &&\n period &&\n this.timePeriod === \"12\" &&\n this.showAmPmToggle\n ) {\n date24hours = this.convertTo24Hour(hour);\n time = new Date();\n time.setHours(date24hours ?? 0);\n time.setMinutes(minute ?? 0);\n time.setSeconds(second ?? 0);\n this.isSSSFormat() && time.setMilliseconds(millisecond ?? 0);\n }\n\n this.selectedTime = time;\n\n const allTimePartsEmpty =\n this.hour === \"\" &&\n this.minute === \"\" &&\n this.second === \"\" &&\n this.millisecond === \"\";\n\n const onlyPeriodChanged =\n allTimePartsEmpty &&\n this.period !== this.previousPeriod &&\n this.previousHour === \"\" &&\n this.previousMinute === \"\" &&\n this.previousSecond === \"\" &&\n this.previousMillisecond === \"\";\n\n if (!onlyPeriodChanged) {\n this.icTimeChange.emit({\n value: allSelected ? time : null,\n timeObject: {\n hour: this.hour === \"\" ? null : this.hour,\n minute: this.minute === \"\" ? null : this.minute,\n second: this.second === \"\" ? null : this.second,\n millisecond: this.millisecond === \"\" ? null : this.millisecond,\n period: this.period === \"\" ? null : this.period,\n },\n });\n }\n\n this.previousHour = this.hour;\n this.previousMinute = this.minute;\n this.previousSecond = this.second;\n this.previousMillisecond = this.millisecond;\n this.previousPeriod = this.period;\n };\n\n private setTime = (time?: string | Date | null) => {\n if (time === null || time === \"\" || time === undefined) {\n if (this.hour) this.hour = \"\";\n if (this.minute) this.minute = \"\";\n if (this.second) this.second = \"\";\n if (this.millisecond) this.millisecond = \"\";\n this.inputsInOrder.forEach((input) => {\n input.classList.remove(this.FIT_TO_VALUE);\n this.setPreventInput(input, false);\n });\n this.handleTimeChange(true);\n } else {\n if (typeof time === \"string\") {\n const zuluMatch = time.match(\n /^(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d{1,3}))?Z?$/\n );\n if (zuluMatch) {\n this.hour = zuluMatch[1];\n this.minute = zuluMatch[2];\n this.second = zuluMatch[3];\n } else {\n const parts = time.split(/[:.]/);\n this.hour = parts[0] || \"\";\n this.minute = parts[1] || \"\";\n this.second = parts[2] || \"\";\n this.millisecond = parts[3] || \"\";\n }\n } else if (time instanceof Date) {\n this.hour = time.getHours().toString().padStart(2, \"0\");\n this.minute = time.getMinutes().toString().padStart(2, \"0\");\n this.second = time.getSeconds().toString().padStart(2, \"0\");\n if (this.isSSSFormat()) {\n this.millisecond = time.getMilliseconds().toString().padStart(3, \"0\");\n }\n }\n }\n this.setValidationMessage();\n };\n\n private setAriaInvalid = (\n validHour: boolean,\n validMinute: boolean,\n validSecond: boolean,\n validMillisecond: boolean\n ) => {\n if (this.inputsInOrder.length) {\n this.inputsInOrder.forEach((input) => {\n input.removeAttribute(this.ARIA_INVALID);\n });\n if (!validHour) {\n this.hourInputEl?.setAttribute(this.ARIA_INVALID, \"true\");\n }\n if (!validMinute) {\n this.minuteInputEl?.setAttribute(this.ARIA_INVALID, \"true\");\n }\n if (!validSecond) {\n this.secondInputEl?.setAttribute(this.ARIA_INVALID, \"true\");\n }\n if (!validMillisecond) {\n this.millisecondInputEl?.setAttribute(this.ARIA_INVALID, \"true\");\n }\n if (!(validHour && validMinute && validSecond && validMillisecond)) {\n this.inputsInOrder.forEach((input) => {\n input.setAttribute(this.ARIA_INVALID, \"true\");\n });\n }\n }\n };\n\n private handleClear = () => {\n this.clearInput = true;\n if (this.hourInputEl) {\n this.hourInputEl.value = \"\";\n }\n if (this.minuteInputEl) {\n this.minuteInputEl.value = \"\";\n }\n if (!this.isHHMMFormat() && this.secondInputEl) {\n this.secondInputEl.value = \"\";\n }\n if (this.isSSSFormat() && this.millisecondInputEl) {\n this.millisecondInputEl.value = \"\";\n }\n this.hour = \"\";\n this.minute = \"\";\n this.second = \"\";\n this.millisecond = \"\";\n this.period = \"AM\";\n if (this.showAmPmToggle) {\n this.periodToggleEl\n ?.querySelectorAll(this.TOGGLE_BUTTON_SELECTOR)\n .forEach((btn) => {\n const toggleBtn = btn as HTMLIcToggleButtonElement;\n if (toggleBtn.label === \"AM\") {\n toggleBtn.checked = true;\n } else {\n toggleBtn.checked = false;\n }\n });\n }\n this.handleTimeChange(true);\n this.inputsInOrder.forEach((input) => {\n input.classList.remove(this.FIT_TO_VALUE);\n this.setPreventInput(input, false);\n });\n this.clearInput = false;\n this.isTimeSetFromKeyboardEvent = false;\n this.setValidationMessage();\n this.invalidTimeText = \"\";\n if (this.hourInputEl) {\n this.hourInputEl.focus();\n }\n };\n\n private notifyScreenReaderSelectedTime = () => {\n if (this.selectedTime && this.selectedTimeInfoEl) {\n let hours = this.selectedTime.getHours();\n if (this.timePeriod === \"12\" && this.showAmPmToggle) {\n hours = this.convertTo24Hour(hours);\n }\n const hoursStr = hours.toString().padStart(2, \"0\");\n const minutesStr = this.selectedTime\n .getMinutes()\n .toString()\n .padStart(2, \"0\");\n const secondsStr = this.selectedTime\n .getSeconds()\n .toString()\n .padStart(2, \"0\");\n const msStr = this.selectedTime\n .getMilliseconds()\n .toString()\n .padStart(3, \"0\");\n if (this.isHHMMFormat()) {\n this.selectedTimeInfoEl.textContent = `Selected time: ${hoursStr}:${minutesStr}`;\n } else if (!this.isSSSFormat()) {\n this.selectedTimeInfoEl.textContent = `Selected time: ${hoursStr}:${minutesStr}:${secondsStr}`;\n } else {\n this.selectedTimeInfoEl.textContent = `Selected time: ${hoursStr}:${minutesStr}:${secondsStr}.${msStr}`;\n }\n }\n };\n\n private setFitToValueStyling = (input: HTMLInputElement) => {\n if (input.value) {\n input.classList.add(this.FIT_TO_VALUE);\n } else {\n input.classList.remove(this.FIT_TO_VALUE);\n }\n };\n\n private handleHostBlur = () => {\n this.removeLabelledBy = false;\n this.icBlur.emit({ value: this.selectedTime });\n };\n\n private handleHostFocus = () => {\n if (\n this.el.shadowRoot?.activeElement?.id.match(\n /(hour|minute|second|millisecond)-input$/\n )\n ) {\n this.removeLabelledBy = false;\n } else {\n this.removeLabelledBy = true;\n }\n this.icFocus.emit({ value: this.selectedTime });\n };\n\n private handleFormReset = () => {\n this.setTime(this.initialValue);\n this.setValidationMessage();\n this.handleTimeChange(false);\n };\n\n private preventInput = (event: KeyboardEvent, isInputPrevented: boolean) => {\n const key = event.key;\n const input = event.target as HTMLInputElement;\n let selectedString;\n if (input) {\n selectedString = input.value.substring(\n input.selectionStart || 0,\n input.selectionEnd || undefined\n );\n }\n if (\n key === \"e\" ||\n key === \".\" ||\n key === \"-\" ||\n (event.key >= \"0\" &&\n event.key <= \"9\" &&\n isInputPrevented &&\n !selectedString)\n ) {\n event.preventDefault();\n }\n };\n\n private moveToNextInput = (currentInput: HTMLInputElement) => {\n this.preventAutoFormatting = false;\n this.inputsInOrder[\n this.inputsInOrder.findIndex((input) => input === currentInput) + 1\n ]?.focus();\n };\n\n private moveToPreviousInput = (currentInput: HTMLInputElement) => {\n this.preventAutoFormatting = false;\n this.inputsInOrder[\n this.inputsInOrder.findIndex((input) => input === currentInput) - 1\n ]?.focus();\n };\n\n private autocompleteInput = (input: HTMLInputElement) => {\n const inputValue = input.value;\n if (inputValue.length === 1) {\n input.value = `0${inputValue}`;\n }\n if (input.value) {\n this.setInputValue(input);\n }\n };\n\n private convertToTime = (\n hour: string,\n minute: string,\n second: string,\n millisecond: string | null = null\n ): Date | null => {\n if (\n !isEmptyString(hour) &&\n !isEmptyString(minute) &&\n (this.isHHMMFormat() || !isEmptyString(second)) &&\n (!this.isSSSFormat() ||\n (millisecond !== null && !isEmptyString(millisecond)))\n ) {\n const d = new Date();\n d.setHours(+hour, +minute, this.isHHMMFormat() ? 0 : +second, 0);\n if (this.isSSSFormat() && millisecond !== null) {\n d.setMilliseconds(+millisecond);\n }\n return d;\n } else {\n return null;\n }\n };\n\n private setInputsInOrder = () => {\n this.inputsInOrder = [];\n const shadowInputs = this.el.shadowRoot?.querySelectorAll(\"input\");\n if (shadowInputs) {\n shadowInputs.forEach((input) => this.inputsInOrder.push(input));\n }\n };\n\n private updateInputValues = (\n hour: string,\n minute: string,\n second: string\n ) => {\n this.hourInputEl && (this.hourInputEl.value = hour);\n this.minuteInputEl && (this.minuteInputEl.value = minute);\n this.secondInputEl && (this.secondInputEl.value = second);\n };\n\n private removeAriaLabelledBy = () => {\n this.inputCompContainerEl?.removeAttribute(this.ARIA_LABELLED_BY);\n };\n\n private setAriaLabelledBy = () => {\n if (\n this.disabled &&\n this.inputCompContainerEl?.getAttribute(this.ARIA_LABELLED_BY)\n ) {\n this.removeAriaLabelledBy();\n return;\n }\n if (this.disabled) {\n return;\n }\n const labelEl = this.el.shadowRoot?.querySelector(\"label\");\n const labelId = `${this.inputId}-label`;\n if (labelEl !== null && labelEl !== undefined) {\n labelEl.id = labelId;\n }\n const hasValidation =\n !isEmptyString(this.validationStatus) ||\n !isEmptyString(this.invalidTimeText);\n const labelledBy = `${labelEl?.id ?? \"\"} ${\n this.screenReaderInfoId\n } ${getInputDescribedByText(\n this.el,\n this.inputId,\n this.helperText !== \"\" && this.helperText !== this.defaultHelperText,\n hasValidation\n )} ${this.selectedTime ? this.selectedTimeInfoId : \"\"} ${\n this.assistiveHintId\n }`;\n this.inputCompContainerEl?.setAttribute(this.ARIA_LABELLED_BY, labelledBy);\n };\n\n private getInputsInOrder = () => {\n const timeParts = this.timeFormat.split(/[:.]/);\n return timeParts.map((part: string) => {\n switch (part) {\n case \"HH\":\n return (\n <input\n class=\"hour-input\"\n id=\"hour-input\"\n ref={(el) => (this.hourInputEl = el)}\n aria-label=\"hour\"\n placeholder=\"HH\"\n disabled={this.disabled}\n aria-required={`${this.required}`}\n inputmode=\"number\"\n pattern=\"[0-9]*\"\n onPaste={this.handlePaste}\n onKeyDown={(event) =>\n this.handleKeyDown(event, this.preventHourInput)\n }\n ></input>\n );\n case \"MM\":\n return (\n <input\n id=\"minute-input\"\n class=\"minute-input\"\n ref={(el) => (this.minuteInputEl = el)}\n aria-label=\"minute\"\n placeholder=\"MM\"\n disabled={this.disabled}\n aria-required={`${this.required}`}\n inputmode=\"number\"\n pattern=\"[0-9]*\"\n onPaste={this.handlePaste}\n onKeyDown={(event) =>\n this.handleKeyDown(event, this.preventMinuteInput)\n }\n ></input>\n );\n case \"SS\":\n if (!this.isHHMMFormat()) {\n return (\n <input\n id=\"second-input\"\n class=\"second-input\"\n ref={(el) => (this.secondInputEl = el)}\n aria-label=\"second\"\n placeholder=\"SS\"\n disabled={this.disabled}\n aria-required={`${this.required}`}\n inputmode=\"number\"\n pattern=\"[0-9]*\"\n onPaste={this.handlePaste}\n onKeyDown={(event) =>\n this.handleKeyDown(event, this.preventSecondInput)\n }\n ></input>\n );\n }\n break;\n case \"SSS\":\n if (this.isSSSFormat()) {\n return (\n <input\n id=\"millisecond-input\"\n class=\"millisecond-input\"\n ref={(el) => (this.millisecondInputEl = el)}\n aria-label=\"millisecond\"\n placeholder=\"SSS\"\n disabled={this.disabled}\n aria-required={`${this.required}`}\n inputmode=\"number\"\n pattern=\"[0-9]*\"\n onPaste={this.handlePaste}\n onKeyDown={(event) =>\n this.handleKeyDown(event, this.preventMillisecondInput)\n }\n ></input>\n );\n }\n return null;\n default:\n return null;\n }\n });\n };\n\n private getDescOfInputsOrder = () => {\n if (this.isSSSFormat()) {\n return \"hour, minute, second, and millisecond\";\n }\n return \"hour, minute, and second\";\n };\n\n private getScreenReaderInfo = (validationStatus: string) => {\n let inputDescriptors = \"\";\n if (this.required) {\n inputDescriptors += \"required\";\n }\n if (validationStatus === IcInformationStatus.Error) {\n inputDescriptors += \" invalid data\";\n }\n return inputDescriptors === \"\" ? \"\" : inputDescriptors + \", \";\n };\n\n private notifyScreenReader = (input: HTMLInputElement) => {\n const liveRegion = this.el.shadowRoot?.querySelector(\"#live-region\");\n if (liveRegion) {\n liveRegion.textContent = `${input.value}, ${input.getAttribute(\n this.ARIA_LABEL\n )}`;\n }\n };\n\n private handlePaste = (event: ClipboardEvent) => {\n event.preventDefault();\n const pastedValue = event.clipboardData?.getData(\"Text\") || \"\";\n const isValidTime = this.isPastedStringTimeValid(pastedValue);\n this.setPastedValueAndValidation(isValidTime, pastedValue, event);\n };\n\n private handleClearFocus = () => {\n this.removeLabelledBy = true;\n this.clearButtonFocused = true;\n this.isTimeSetFromKeyboardEvent = true;\n };\n\n private handleClearBlur = (ev: FocusEvent) => {\n this.clearButtonFocused = false;\n this.isTimeSetFromKeyboardEvent = true;\n const relatedTarget = ev.relatedTarget as HTMLElement | null;\n if (relatedTarget?.id === \"clock-button\") {\n this.removeLabelledBy = false;\n return;\n }\n if (relatedTarget?.id.match(/(minute|second|millisecond)-input$/)) {\n this.removeLabelledBy = false;\n return;\n }\n this.removeLabelledBy = true;\n };\n\n private handleClockFocus = () => {\n this.clockFocused = true;\n };\n\n private handleClockBlur = () => {\n this.clockFocused = false;\n };\n\n private isPastedStringTimeValid = (value: string): string | false => {\n if (this.isHHMMFormat()) {\n if (/^\\d{2}:\\d{2}$/.test(value)) {\n return value;\n }\n } else if (this.isSSSFormat()) {\n if (/^\\d{2}:\\d{2}:\\d{2}\\.\\d{1,3}$/.test(value)) {\n return value;\n }\n if (/^\\d{2}:\\d{2}:\\d{2}\\.\\d{1,3}Z$/.test(value)) {\n return value.replace(\"Z\", \"\");\n }\n const isoMatch = value.match(/T(\\d{2}:\\d{2}:\\d{2}\\.\\d{1,3})/);\n if (isoMatch) {\n return isoMatch[1];\n }\n } else {\n if (/^\\d{2}:\\d{2}:\\d{2}$/.test(value)) {\n return value;\n }\n if (/^\\d{2}:\\d{2}:\\d{2}Z$/.test(value)) {\n return value.replace(\"Z\", \"\");\n }\n const isoMatch = value.match(/T(\\d{2}:\\d{2}:\\d{2})/);\n if (isoMatch) {\n return isoMatch[1];\n }\n }\n return false;\n };\n\n private setPastedValueAndValidation = (\n isValidTime: string | false,\n pastedValue: string,\n event: ClipboardEvent\n ) => {\n if (isValidTime) {\n const timeParts = isValidTime.split(/[:.]/);\n this.inputsInOrder.forEach((input, index) => {\n input.classList.add(this.FIT_TO_VALUE);\n let timeValue = timeParts[index] || \"\";\n if (input === this.millisecondInputEl && this.isSSSFormat()) {\n timeValue = timeValue.slice(0, 3);\n } else {\n timeValue = timeValue.slice(0, 2);\n }\n if (input === this.hourInputEl) {\n let activeToggle: HTMLIcToggleButtonElement | undefined;\n if (this.timePeriod === \"12\" && this.showAmPmToggle) {\n if (parseInt(timeValue) > 12) {\n timeValue = (parseInt(timeValue) - 12)\n .toString()\n .padStart(2, \"0\");\n if (parseInt(timeValue) > 12) {\n return;\n } else {\n this.period = \"PM\";\n this.periodToggleEl\n ?.querySelectorAll(this.TOGGLE_BUTTON_SELECTOR)\n .forEach((btn) => {\n const toggleBtn = btn as HTMLIcToggleButtonElement;\n if (toggleBtn.label === \"PM\") {\n activeToggle = toggleBtn;\n } else {\n toggleBtn.checked = false;\n }\n });\n if (activeToggle) {\n this.periodToggleEl?.setActiveToggle(activeToggle);\n activeToggle.checked = true;\n }\n this.invalidTimeText = \"\";\n this.validationStatus = \"\";\n }\n } else {\n if (parseInt(timeValue) === 0) {\n timeValue = \"12\";\n }\n this.period = \"AM\";\n this.periodToggleEl\n ?.querySelectorAll(this.TOGGLE_BUTTON_SELECTOR)\n .forEach((btn) => {\n const toggleBtn = btn as HTMLIcToggleButtonElement;\n if (toggleBtn.label === \"AM\") {\n activeToggle = toggleBtn;\n } else {\n toggleBtn.checked = false;\n }\n });\n if (activeToggle) {\n this.periodToggleEl?.setActiveToggle(activeToggle);\n activeToggle.checked = true;\n }\n this.invalidTimeText = \"\";\n this.validationStatus = \"\";\n }\n }\n }\n input.value = timeValue;\n this.setInputValue(input);\n this.autocompleteInput(input);\n });\n if (\n this.isHHMMFormat() &&\n this.second !== \"\" &&\n this.millisecond !== \"\"\n ) {\n this.second = \"\";\n this.millisecond = \"\";\n }\n } else {\n const pasted = pastedValue.trim();\n if ((pasted.length === 1 || pasted.length === 2) && isNumeric(pasted)) {\n this.setInputPasteValue(event.target, pasted);\n this.setInputValue(event.target as HTMLInputElement);\n } else {\n this.invalidTimeText = `Please paste a valid ${(\n event.target as HTMLInputElement\n ).getAttribute(this.ARIA_LABEL)}`;\n this.validationStatus = IcInformationStatus.Error;\n }\n }\n };\n\n private handleAMPM = (selectedOption: HTMLIcToggleButtonElement) => {\n this.period = selectedOption.label!;\n this.periodToggleEl?.setActiveToggle(selectedOption);\n };\n\n render() {\n const {\n inputId,\n label,\n disabled,\n helperText,\n hideHelperText,\n hideLabel,\n showClearButton,\n showClockButton,\n size,\n theme,\n validationAriaLive,\n } = this;\n const hasCustomValidation = !isEmptyString(this.validationStatus);\n const validationStatus = hasCustomValidation\n ? this.validationStatus\n : !isEmptyString(this.invalidTimeText)\n ? IcInformationStatus.Error\n : \"\";\n const assistiveHint = `Type or use the up and down arrow keys to change the values for the ${this.getDescOfInputsOrder()}.`;\n renderHiddenInput(\n true,\n this.el,\n this.name,\n this.convertToTime(this.hour, this.minute, this.second),\n this.disabled\n );\n const showDivider = !!(\n showClearButton &&\n !(\n isEmptyString(this.hour) &&\n isEmptyString(this.minute) &&\n isEmptyString(this.second)\n )\n );\n\n if (this.showAmPmToggle && this.timePeriod !== \"12\") {\n this.showAmPmToggle = false;\n }\n\n return (\n <Host\n class={{\n [`ic-theme-${theme}`]: theme !== \"inherit\",\n [`ic-time-input-disabled`]: disabled,\n [`ic-time-input-${size}`]: true,\n }}\n onBlur={this.handleHostBlur}\n onFocus={this.handleHostFocus}\n >\n <ic-input-container disabled={disabled}>\n {!(hideLabel && hideHelperText) && (\n <ic-input-label\n for={inputId}\n label={label}\n hideLabel={hideLabel}\n helperText={!hideHelperText ? helperText : \"\"}\n disabled={disabled}\n >\n <slot name=\"helper-text\" slot=\"helper-text\"></slot>\n </ic-input-label>\n )}\n <span id={this.screenReaderInfoId} class=\"sr-only\" aria-hidden=\"true\">\n {this.getScreenReaderInfo(validationStatus)}\n {hideLabel && `${label}\\n`}\n {hideHelperText && `${helperText}\\n`}\n {`${this.defaultHelperText}.`}\n </span>\n <span id={this.assistiveHintId} class=\"sr-only\" aria-hidden=\"true\">\n {assistiveHint}\n </span>\n <span id=\"live-region\" aria-live=\"assertive\" class=\"sr-only\"></span>\n <div\n class={{\n \"with-am-pm-toggle\": this.showAmPmToggle === true,\n }}\n >\n <ic-input-component-container\n id={inputId}\n ref={(el: HTMLIcInputComponentContainerElement) =>\n (this.inputCompContainerEl = el)\n }\n disabled={disabled}\n validationStatus={validationStatus}\n size={size}\n role=\"group\"\n class={{ [`ic-theme-${theme}`]: theme !== \"inherit\" }}\n >\n <div class=\"input-container\">\n <div class=\"time-inputs\">\n {[\n this.getInputsInOrder()[0],\n \":\",\n this.getInputsInOrder()[1],\n !this.isHHMMFormat()\n ? [\":\", this.getInputsInOrder()[2]]\n : null,\n this.isSSSFormat()\n ? [\".\", this.getInputsInOrder()[3]]\n : null,\n ]}\n </div>\n <div class=\"action-buttons\">\n {showClearButton && (\n <ic-button\n id=\"clear-button\"\n aria-label=\"Clear input\"\n class={{\n [\"clear-button\"]: true,\n [\"hidden\"]:\n isEmptyString(this.hour) &&\n isEmptyString(this.minute) &&\n isEmptyString(this.second),\n }}\n disabled={this.disabled}\n innerHTML={Clear}\n onClick={this.handleClear}\n onFocus={this.handleClearFocus}\n onBlur={this.handleClearBlur}\n variant=\"icon-tertiary\"\n theme={this.clearButtonFocused ? \"light\" : \"dark\"}\n size={size}\n ></ic-button>\n )}\n {showClockButton && (\n <div class=\"show-clock-button-wrapper\">\n <div class={{ divider: showDivider, [size]: true }}></div>\n <ic-button\n id=\"clock-button\"\n aria-label=\"Display clock\"\n aria-haspopup=\"dialog\"\n class=\"clock-button\"\n disabled={this.disabled}\n innerHTML={Clock}\n variant=\"icon-tertiary\"\n size={size}\n onFocus={this.handleClockFocus}\n onBlur={this.handleClockBlur}\n theme={this.clockFocused ? \"light\" : \"dark\"}\n ></ic-button>\n </div>\n )}\n </div>\n </div>\n </ic-input-component-container>\n {this.showAmPmToggle && (\n <ic-toggle-button-group\n select-type=\"single\"\n accessible-label=\"AM PM Toggle\"\n ref={(el: HTMLIcToggleButtonGroupElement) =>\n (this.periodToggleEl = el)\n }\n disabled={disabled}\n class=\"am-pm-toggle\"\n select-method=\"auto\"\n onIcChange={(e: any) =>\n this.handleAMPM(e.detail.selectedOption)\n }\n onKeyDown={(e: KeyboardEvent) => {\n if (e.key === \"Tab\" && e.shiftKey) {\n e.preventDefault();\n if (this.inputsInOrder && this.inputsInOrder.length > 0) {\n const lastInput = this.inputsInOrder[\n this.inputsInOrder.length - 1\n ] as HTMLElement;\n lastInput?.focus();\n }\n }\n }}\n >\n <ic-toggle-button\n label=\"AM\"\n disabled={disabled}\n checked={true}\n ></ic-toggle-button>\n <ic-toggle-button\n label=\"PM\"\n disabled={disabled}\n ></ic-toggle-button>\n </ic-toggle-button-group>\n )}\n </div>\n <span id={this.selectedTimeInfoId} class=\"sr-only\" aria-live=\"polite\">\n <span\n ref={(el) => (this.selectedTimeInfoEl = el)}\n role=\"status\"\n ></span>\n </span>\n <ic-input-validation\n status={validationStatus}\n message={\n hasCustomValidation ? this.validationText : this.invalidTimeText\n }\n for={inputId}\n ariaLiveMode={validationAriaLive}\n ></ic-input-validation>\n </ic-input-container>\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|