{"version":3,"names":["AdsDropdownDivider","h","class","AdsDropdownItem","item","dropdownBlur","dropdownChange","dropdownFocus","dropdownBlurHandler","dropdownChangeHandler","dropdownFocusHandler","onBlurHandler","evt","disabled","emit","value","isNullOrUndefined","preventDefault","onFocusHandler","onClickHandler","linkObj","onClick","onKeyDownHandler","key","svgIconObj","getSVGIconObject","icon","iconObj","getIconObject","getHyperLinkObject","link","classes","svgIcon","undefined","classIcon","active","push","TagType","attributes","id","String","role","tabindex","onBlur","onFocus","onKeyDown","href","hreflang","rel","target","isNullOrUndefinedOrEmpty","text","toString","Object","assign","join","generateSVGImage","data","height","width","AdsDropdownGroup","group","groupClasses","part","items","Array","isArray","map","option","type","DropdownItemTypes","DIVIDER","ACTION","defineProperty","exports","prefix","iconName","aliases","unicode","svgPathData","definition","faCaretDown","ligatures","faCaretUp","DropdownTrigger","ariaLabel","modifiers","open","hasTriggerLabel","clickHandler","length","iconPath","iconUpPath","iconDownPath","iconHeight","iconUpHeight","iconDownHeight","iconWidth","iconUpWidth","iconDownWidth","name","adsDropdownCss","AdsDropdownStyle0","AdsDropdown","constructor","hostRef","this","_highlightedDropdownItemIndex","updateIsOpenInternal","newValue","isOpen","openChange","openChangeHandler","focusTrigger","trigger","getTriggerElement","focus","customTriggerEl","el","shadowRoot","querySelector","getContentEl","sanitizeHighlightedDropdownItemIndex","max","_value","handleArrowUpDownKeyDownEvent","dropdownItemsList","dropdownItems","from","querySelectorAll","$dropdownItem","isHighlighted","indexOf","handleTriggerClick","getContentPosition","content","triggerBounds","getBoundingClientRect","contentParentBounds","parentElement","contentBounds","triggerOriginX","x","triggerOriginY","y","contentOriginsX","contentOriginsY","rtl","getIsElementRTL","contentOriginXOffset","alignment","Positions","RIGHT","Math","min","getPixelsFromRem","document","body","clientWidth","expandUpward","window","pageYOffset","clientHeight","upwardOffset","parseInt","getComputedStyle","marginTop","yOffset","contentOriginYAdjusted","triggerOriginX_Ltr","contentOriginX_Ltr","newOriginX","xor","newOriginY","rem","parseFloat","documentElement","fontSize","positionContent","style","setProperty","position","addConfigurationFromTriggerEl","addEventListener","setAttribute","getAttribute","cursor","tabIndex","srLabel","removeConfigurationFromTriggerEl","removeEventListener","removeAttribute","removeProperty","updateConfigurationForTriggerElOnChange","componentDidLoad","Pipeline.addComponent","ro","ResizeObserver","clearTimeout","timeout","setTimeout","observe","disconnectedCallback","Pipeline.removeComponent","renderGroup","optionsGroup","renderOption","renderDivider","renderDropdownTrigger","triggerClasses","getClassFromLevel","level","getClassFromSize","size","identifier","isNil","getAllElementsWithSlotAttribute","render","renderDropdownItems","LEFT","ButtonLevels","TERTIARY","ButtonSizes","DEFAULT","component","handleClick","bind","generateId","handleIdentifierChange","handleBodyClick","composedPath","getIsElementDescendantOfElement","isChild","handleFocusOutEvent","stopPropagation","relatedTarget","contains","handleDropdownChange","onCustomTriggerElChanged","newEl","oldEl","handleCurrentData","newData","showErrorMessage","DropdownErrors","INVALID_DATA","Promise","resolve","close","componentWillLoad","componentDidRender","setFocusOnArea","_a","ACTIONGROUP"],"sources":["src/components/ads-dropdown/components/ads-dropdown-divider/ads-dropdown-divider.tsx","src/components/ads-dropdown/components/ads-dropdown-item/ads-dropdown-item.tsx","src/components/ads-dropdown/components/ads-dropdown-group/ads-dropdown-group.tsx","node_modules/@fortawesome/pro-solid-svg-icons/faCaretDown.js","node_modules/@fortawesome/pro-solid-svg-icons/faCaretUp.js","src/components/ads-dropdown/components/ads-dropdown-trigger/ads-dropdown-trigger.tsx","src/components/ads-dropdown/ads-dropdown.scss?tag=ads-dropdown&encapsulation=shadow","src/components/ads-dropdown/ads-dropdown.tsx"],"sourcesContent":["import { FunctionalComponent, VNode, h } from '@stencil/core';\n\nexport const AdsDropdownDivider: FunctionalComponent = () => (
) as VNode;\n","import { EventEmitter, FunctionalComponent, VNode, h } from '@stencil/core';\nimport { Icon, SVGIcon, SVGIconData, getIconObject, getSVGIconObject } from '../../../core/interfaces/Icon';\nimport { generateSVGImage, isNullOrUndefined, isNullOrUndefinedOrEmpty } from 'utils/index';\nimport { getHyperLinkObject } from '../../../core/interfaces/Hyperlink';\n\nimport {\n DropdownBlurEvent,\n DropdownBlurHandler,\n DropdownChangeEvent,\n DropdownChangeHandler,\n DropdownFocusEvent,\n DropdownFocusHandler,\n DropdownOption,\n} from './../../ads-dropdown.types';\n\ninterface AdsDropdownItemProps {\n item: DropdownOption;\n dropdownBlur?: EventEmitter;\n dropdownChange?: EventEmitter;\n dropdownFocus?: EventEmitter;\n dropdownBlurHandler?: DropdownBlurHandler;\n dropdownChangeHandler?: DropdownChangeHandler;\n dropdownFocusHandler?: DropdownFocusHandler;\n}\n\nexport const AdsDropdownItem: FunctionalComponent = ({\n item,\n dropdownBlur,\n dropdownChange,\n dropdownFocus,\n dropdownBlurHandler,\n dropdownChangeHandler,\n dropdownFocusHandler,\n}) => {\n const onBlurHandler = (evt: FocusEvent): void => {\n if (!item.disabled) {\n dropdownBlur.emit({ evt: evt, value: item.value });\n !isNullOrUndefined(dropdownBlurHandler) ? dropdownBlurHandler({ evt: evt, value: item.value }) : null;\n } else {\n evt.preventDefault();\n }\n };\n\n const onFocusHandler = (evt: FocusEvent): void => {\n if (!item.disabled) {\n dropdownFocus.emit({ evt: evt, value: item.value });\n !isNullOrUndefined(dropdownFocusHandler) ? dropdownFocusHandler({ evt: evt, value: item.value }) : null;\n } else {\n evt.preventDefault();\n }\n };\n\n const onClickHandler = (evt: MouseEvent) => {\n if (!item.disabled) {\n dropdownChange.emit({ evt: evt, value: item.value });\n !isNullOrUndefined(dropdownChangeHandler) ? dropdownChangeHandler({ evt: evt, value: item.value }) : null;\n !isNullOrUndefined(linkObj) && linkObj.onClick(evt);\n } else {\n evt.preventDefault();\n }\n };\n\n const onKeyDownHandler = (evt: KeyboardEvent) => {\n if (!item.disabled) {\n if (evt.key === 'Enter') {\n dropdownChange.emit({ evt: evt, value: item.value });\n !isNullOrUndefined(dropdownChangeHandler) ? dropdownChangeHandler({ evt: evt, value: item.value }) : null;\n !isNullOrUndefined(linkObj) ? linkObj.onClick : evt.preventDefault();\n }\n }\n };\n\n const svgIconObj = getSVGIconObject(item.icon as SVGIcon);\n const iconObj = getIconObject(item.icon as Icon);\n const linkObj = getHyperLinkObject(item.link);\n const classes = ['c-dropdown__item'];\n let svgIcon: SVGIconData = undefined;\n let classIcon: string = undefined;\n\n svgIcon = svgIconObj?.active;\n classIcon = iconObj?.active;\n\n if (item.disabled) {\n classes.push('is-disabled');\n }\n\n const TagType = !isNullOrUndefined(item.link) && !item.disabled ? 'a' : 'span';\n\n const attributes: {\n id: string;\n role: string;\n tabindex: number;\n href?: string;\n hreflang?: string;\n rel?: string;\n target?: string;\n disabled: boolean;\n onBlur: (evt: FocusEvent) => void;\n onClick: (evt: MouseEvent) => void;\n onFocus: (evt: FocusEvent) => void;\n onKeyDown: (evt: KeyboardEvent) => void;\n 'data-track'?: string;\n 'data-track-value'?: string;\n } = {\n id: String(item.value),\n role: 'option',\n tabindex: item.disabled ? null : 0,\n disabled: item.disabled || null,\n onBlur: onBlurHandler,\n onClick: onClickHandler,\n onFocus: onFocusHandler,\n onKeyDown: isNullOrUndefined(item.link) ? onKeyDownHandler : null,\n };\n\n if (TagType === 'a') {\n attributes.href = linkObj?.href;\n attributes.hreflang = linkObj?.hreflang || null;\n attributes.rel = linkObj?.rel || null;\n attributes.target = linkObj?.target || null;\n attributes['data-track'] = 'true';\n attributes['data-track-value'] = !isNullOrUndefinedOrEmpty(item.text) ? item.text : item.value.toString();\n }\n\n return (\n \n {(classIcon || svgIcon) && (\n \n \n {!isNullOrUndefined(svgIcon) && generateSVGImage({ data: svgIcon.data, height: svgIcon.height, width: svgIcon.width })}\n \n \n )}\n {!isNullOrUndefinedOrEmpty(item.text) ? item.text : item.value}\n \n ) as VNode;\n};\n","import { AdsDropdownDivider } from '../ads-dropdown-divider/ads-dropdown-divider';\nimport { AdsDropdownItem } from '../ads-dropdown-item/ads-dropdown-item';\nimport {\n DropdownBlurEvent,\n DropdownBlurHandler,\n DropdownChangeEvent,\n DropdownChangeHandler,\n DropdownFocusEvent,\n DropdownFocusHandler,\n DropdownItemTypes,\n DropdownOption,\n DropdownOptionGroup,\n} from './../../ads-dropdown.types';\nimport { EventEmitter, FunctionalComponent, VNode, h } from '@stencil/core';\nimport { Icon, SVGIcon, SVGIconData, getIconObject, getSVGIconObject } from '../../../core/interfaces/Icon';\nimport { generateSVGImage, isNullOrUndefined } from 'utils/index';\n\ninterface AdsDropdownGroupProps {\n group: DropdownOptionGroup;\n dropdownBlur?: EventEmitter;\n dropdownChange?: EventEmitter;\n dropdownFocus?: EventEmitter;\n dropdownBlurHandler?: DropdownBlurHandler;\n dropdownChangeHandler?: DropdownChangeHandler;\n dropdownFocusHandler?: DropdownFocusHandler;\n}\n\nexport const AdsDropdownGroup: FunctionalComponent = ({\n group,\n dropdownBlur,\n dropdownBlurHandler,\n dropdownChange,\n dropdownChangeHandler,\n dropdownFocus,\n dropdownFocusHandler,\n}) => {\n const attributes = {\n disabled: group.disabled ? true : null,\n };\n\n let svgIcon: SVGIconData = undefined;\n let classIcon: string = undefined;\n const svgIconObj = getSVGIconObject(group.icon as SVGIcon);\n svgIcon = svgIconObj?.active;\n const iconObj = getIconObject(group.icon as Icon);\n classIcon = iconObj?.active;\n\n const groupClasses = ['c-dropdown__group'];\n\n if (group.disabled) {\n groupClasses.push('is-disabled');\n }\n\n return (\n
\n \n {(classIcon || svgIcon) && (\n \n \n {!isNullOrUndefined(svgIcon) && generateSVGImage({ data: svgIcon.data, height: svgIcon.height, width: svgIcon.width })}\n \n \n )}\n \n {group.text}\n \n \n {!isNullOrUndefined(group.items) && Array.isArray(group.items)\n ? group.items.map((option) => {\n switch (option.type) {\n case DropdownItemTypes.DIVIDER:\n return () as VNode;\n case DropdownItemTypes.ACTION:\n default: {\n return (\n \n ) as VNode;\n }\n }\n })\n : null}\n
\n ) as VNode;\n};\n","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar prefix = 'fas';\nvar iconName = 'caret-down';\nvar width = 320;\nvar height = 512;\nvar aliases = [];\nvar unicode = 'f0d7';\nvar svgPathData = 'M137.4 374.6c12.5 12.5 32.8 12.5 45.3 0l128-128c9.2-9.2 11.9-22.9 6.9-34.9s-16.6-19.8-29.6-19.8L32 192c-12.9 0-24.6 7.8-29.6 19.8s-2.2 25.7 6.9 34.9l128 128z';\n\nexports.definition = {\n prefix: prefix,\n iconName: iconName,\n icon: [\n width,\n height,\n aliases,\n unicode,\n svgPathData\n ]};\n\nexports.faCaretDown = exports.definition;\nexports.prefix = prefix;\nexports.iconName = iconName;\nexports.width = width;\nexports.height = height;\nexports.ligatures = aliases;\nexports.unicode = unicode;\nexports.svgPathData = svgPathData;\nexports.aliases = aliases;","'use strict';\nObject.defineProperty(exports, '__esModule', { value: true });\nvar prefix = 'fas';\nvar iconName = 'caret-up';\nvar width = 320;\nvar height = 512;\nvar aliases = [];\nvar unicode = 'f0d8';\nvar svgPathData = 'M182.6 137.4c-12.5-12.5-32.8-12.5-45.3 0l-128 128c-9.2 9.2-11.9 22.9-6.9 34.9s16.6 19.8 29.6 19.8l256 0c12.9 0 24.6-7.8 29.6-19.8s2.2-25.7-6.9-34.9l-128-128z';\n\nexports.definition = {\n prefix: prefix,\n iconName: iconName,\n icon: [\n width,\n height,\n aliases,\n unicode,\n svgPathData\n ]};\n\nexports.faCaretUp = exports.definition;\nexports.prefix = prefix;\nexports.iconName = iconName;\nexports.width = width;\nexports.height = height;\nexports.ligatures = aliases;\nexports.unicode = unicode;\nexports.svgPathData = svgPathData;\nexports.aliases = aliases;","import { FunctionalComponent, VNode, h } from '@stencil/core';\nimport { generateSVGImage } from 'utils/imageHelper';\nimport { height as iconDownHeight, svgPathData as iconDownPath, width as iconDownWidth } from '@fortawesome/pro-solid-svg-icons/faCaretDown';\nimport { height as iconUpHeight, svgPathData as iconUpPath, width as iconUpWidth } from '@fortawesome/pro-solid-svg-icons/faCaretUp';\n\n/**\n * Interface for a dropdown component\n * @hidden\n */\ninterface DropdownTriggerProps {\n ariaLabel: string;\n id: string;\n modifiers: string[];\n open: boolean;\n hasTriggerLabel?: boolean;\n clickHandler: (evt: Event) => void;\n}\n\nexport const DropdownTrigger: FunctionalComponent = ({\n ariaLabel,\n id,\n modifiers,\n open,\n hasTriggerLabel,\n clickHandler,\n}: DropdownTriggerProps) => {\n const classes = ['c-dropdown__selector'];\n if (modifiers.length > 0) {\n classes.push(modifiers.join(' '));\n }\n\n const attributes = {\n id: `${id}:button`,\n part: 'selector',\n onClick: clickHandler,\n 'aria-labelledby': `${id}:list:${id}:button`,\n 'aria-haspopup': 'listbox',\n 'aria-expanded': open.toString(),\n 'aria-label': ariaLabel,\n 'data-track': 'true',\n 'data-track-value': ariaLabel,\n };\n\n const iconPath = open ? iconUpPath : iconDownPath;\n const iconHeight = open ? iconUpHeight : iconDownHeight;\n const iconWidth = open ? iconUpWidth : iconDownWidth;\n\n return (\n \n ) as VNode;\n};\n","@import './components/ads-dropdown-item/ads-dropdown-item.scss';\n@import './components/ads-dropdown-group/ads-dropdown-group.scss';\n@import './components/ads-dropdown-divider/ads-dropdown-divider.scss';\n\n@import 'core';\n\n@import '@fortawesome/fontawesome-pro/scss/fontawesome.scss';\n@import '@fortawesome/fontawesome-pro/scss/brands.scss';\n@import '@fortawesome/fontawesome-pro/scss/light.scss';\n@import '@fortawesome/fontawesome-pro/scss/regular.scss';\n@import '@fortawesome/fontawesome-pro/scss/solid.scss';\n\n/**\n * @prop --ads-dropdown-background-color: Background color\n * @prop --ads-dropdown-background-color-focus: Focused background color\n * @prop --ads-dropdown-background-color-hover: Hovered background color\n *\n * @prop --ads-dropdown-border-color: Border color\n * @prop --ads-dropdown-caret-color: Caret Color\n * @prop --ads-dropdown-caret-margin-left: Caret margin left\n * @prop --ads-dropdown-caret-margin-right: Caret margin right\n *\n * @prop --ads-dropdown-color: Text color\n * @prop --ads-dropdown-icon-color: Icon color\n *\n * @prop --ads-dropdown-item-background-color: Item background color\n * @prop --ads-dropdown-item-label-margin-left: Item label margin left\n * @prop --ads-dropdown-item-label-margin-right: Item label margin right\n *\n * @prop --ads-dropdown-items-z-index: Z-index layer height\n */\n\n$ads-dropdown-items-box-shadow: none;\n\n:host {\n --ads-dropdown-items-box-shadow: #{$ads-dropdown-items-box-shadow};\n\n box-sizing: border-box;\n display: inline-block;\n}\n\n:host([theme='default']) {\n @include ads-vars-component-button;\n @include ads-vars-component-dropdown-default;\n}\n\n:host([theme='dark']) {\n @include ads-vars-component-button-dark;\n @include ads-vars-component-dropdown-dark;\n}\n\n:host * {\n box-sizing: inherit;\n}\n\n:host([theme='default']) {\n @include ads-vars-component-button;\n @include ads-vars-component-dropdown-default;\n}\n\n:host([theme='dark']) {\n @include ads-vars-component-button-dark;\n @include ads-vars-component-dropdown-dark;\n}\n\n:host([dir='ltr']) {\n @include ads-vars-component-dropdown-ltr;\n}\n\n:host([dir='rtl']) {\n @include ads-vars-component-dropdown-rtl;\n}\n\n.c-dropdown {\n font-size: 1rem;\n position: static;\n\n /***************/\n /* DESCENDANTS */\n /***************/\n\n &__selector {\n @include ads-button;\n @include ads-button-tertiary;\n align-items: center;\n display: flex;\n font-family: var(--ads-font-family);\n justify-content: space-between;\n letter-spacing: inherit;\n margin: 0;\n width: 100%;\n word-spacing: inherit;\n z-index: $layer-2;\n\n &.is-primary {\n @include ads-button-primary;\n }\n\n &.is-secondary {\n @include ads-button-secondary;\n }\n\n &.is-tertiary {\n @include ads-button-tertiary;\n }\n\n &.is-medium {\n @include ads-button-medium;\n }\n\n &.is-small {\n @include ads-button-small;\n }\n }\n\n &__icon {\n margin-right: 9px;\n }\n\n &__label + &__caret {\n margin-left: var(--ads-dropdown-caret-margin-left, $ads-dropdown-caret-margin-left-ltr);\n margin-right: var(--ads-dropdown-caret-margin-right, $ads-dropdown-caret-margin-right-ltr);\n }\n\n &__items {\n border-color: var(--ads-dropdown-border-color, $ads-dropdown-border-color);\n border-style: solid;\n border-width: 1px;\n color: var(--ads-dropdown-color, $ads-dropdown-color);\n display: inline-block;\n font-size: 1rem;\n max-height: 0;\n min-width: 100%;\n overflow: hidden;\n position: absolute;\n }\n\n /*************/\n /* MODIFIERS */\n /*************/\n\n &.is-small {\n .c-dropdown__group,\n .c-dropdown__items {\n font-size: 0.8rem;\n }\n\n .c-dropdown__group__item {\n padding: 0.25rem;\n }\n\n .c-dropdown__item {\n padding: 0.25rem 0.5rem;\n }\n\n .c-dropdown__group .c-dropdown__item {\n padding: 0.25rem 0.25rem 0.25rem 0.75rem;\n }\n }\n\n &.is-open {\n .c-dropdown__items {\n background-color: var(--ads-dropdown-background-color, $ads-dropdown-background-color);\n border-color: var(--ads-dropdown-border-color, $ads-dropdown-border-color);\n border-style: solid;\n border-width: 1px;\n border-radius: var(--ads-dropdown-border-radius, $ads-dropdown-border-radius);\n box-shadow: var(--ads-dropdown-items-box-shadow, $ads-dropdown-items-box-shadow);\n cursor: pointer;\n display: block;\n margin-top: 4px;\n max-height: 400px;\n overflow: auto;\n position: absolute;\n z-index: var(--ads-dropdown-items-z-index, $ads-dropdown-items-z-index);\n }\n }\n}\n","import * as Pipeline from '../core/utils/pipeline';\nimport { AdsDropdownDivider } from './components/ads-dropdown-divider/ads-dropdown-divider';\nimport { AdsDropdownGroup } from './components/ads-dropdown-group/ads-dropdown-group';\nimport { AdsDropdownItem } from './components/ads-dropdown-item/ads-dropdown-item';\nimport { BaseComponent } from '../core/interfaces/BaseComponent';\nimport { ButtonLevel, ButtonLevels, ButtonSize, ButtonSizes, Positions, Theme } from '../core/types/globalTypes';\nimport { Component, Element, Event, EventEmitter, Listen, Method, Prop, State, VNode, Watch, h } from '@stencil/core';\nimport {\n DropdownAlignment,\n DropdownBlurEvent,\n DropdownBlurHandler,\n DropdownChangeEvent,\n DropdownChangeHandler,\n DropdownErrors,\n DropdownFocusEvent,\n DropdownFocusHandler,\n DropdownItem,\n DropdownItemTypes,\n DropdownOption,\n DropdownOptionGroup,\n OpenChangeEvent,\n OpenChangeHandler,\n} from './ads-dropdown.types';\nimport { DropdownTrigger } from './components/ads-dropdown-trigger/ads-dropdown-trigger';\nimport { ResizeObserver } from '@juggle/resize-observer';\nimport { generateId, getClassFromLevel, getClassFromSize, showErrorMessage } from '../core/utils/components';\nimport {\n getAllElementsWithSlotAttribute,\n getIsElementDescendantOfElement,\n getIsElementRTL,\n isNil,\n isNullOrUndefined,\n isNullOrUndefinedOrEmpty,\n setFocusOnArea,\n xor,\n} from 'utils/index';\n\n/**\n * Dropdown boxes represent mutually exclusive options in a list of text. A minimum of 6 options should be shown in the pull-down before a scroll bar is shown.\n * The contents of a dropdown box should consist of text; icons and text can be also be used. The text should be as short and concise as possible and be sentence case capitalized.\n * @example\n * \n * \n */\n@Component({\n tag: 'ads-dropdown',\n styleUrl: 'ads-dropdown.scss',\n shadow: true,\n})\nexport class AdsDropdown implements BaseComponent {\n public component: string;\n\n private timeout: NodeJS.Timeout;\n\n private ro: ResizeObserver;\n\n private _highlightedDropdownItemIndex: number | undefined = 0;\n\n constructor() {\n this.component = 'ads-dropdown';\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n this.handleClick = this.handleClick.bind(this);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n this.handleTriggerClick = this.handleTriggerClick.bind(this);\n this.el.setAttribute('id', this.identifier || generateId('ads-dropdown'));\n }\n\n /**\n * The component element\n */\n @Element() el: HTMLAdsDropdownElement;\n\n /**\n * Stores the internal isOpenInternal state\n * @hidden\n */\n @State() isOpen = false;\n\n /**\n * The unique identifier (optional)\n */\n @Prop({ attribute: 'id' }) identifier?: string;\n\n /**\n * The theme for this component instance (optional)\n * Values: \"default\", \"dark\"\n */\n @Prop({ reflect: true }) theme?: Theme;\n\n /**\n * The alignment of the dropdown list items (optional)\n * @default \"left\"\n */\n @Prop({ reflect: true }) alignment: DropdownAlignment = Positions.LEFT;\n\n /**\n * The dropdown items\n */\n @Prop() data: DropdownItem[];\n\n /**\n * An element that will be used as a trigger for the dropdown\n * If not specified, the default trigger will be used\n */\n @Prop() customTriggerEl?: HTMLElement;\n\n /**\n * The value for the aria-label, to describe the purpose of the dropdown (optional)\n */\n @Prop({ reflect: true }) srLabel?: string;\n\n /**\n * The level of the dropdown button: primary | secondary | tertiary (optional)\n * @default \"tertiary\"\n */\n @Prop({ reflect: true }) level: ButtonLevel = ButtonLevels.TERTIARY;\n\n /**\n * The size of the button (optional)\n * @default \"default\"\n */\n @Prop({ reflect: true }) size: ButtonSize = ButtonSizes.DEFAULT;\n\n /**\n * The dropdown blur callback function (optional)\n */\n @Prop() dropdownBlurHandler?: DropdownBlurHandler;\n\n /**\n * The dropdown change callback function (optional)\n */\n @Prop() dropdownChangeHandler?: DropdownChangeHandler;\n\n /**\n * The dropdown focus callback function (optional)\n */\n @Prop() dropdownFocusHandler?: DropdownFocusHandler;\n\n /**\n * Callback function for the open state of the dropdown (optional)\n */\n @Prop() openChangeHandler?: OpenChangeHandler;\n\n /**\n * Emits the 'dropdownBlur' custom event.\n * Usage: `document.querySelector('ads-dropdown').addEventListener('dropdownBlur', function(evt) {});`\n */\n @Event({ bubbles: false }) dropdownBlur: EventEmitter;\n\n /**\n * Emits the 'dropdownChange' custom event.\n * Usage: `document.querySelector('ads-dropdown').addEventListener('dropdownChange', function(evt) {});`\n */\n @Event({ bubbles: false }) dropdownChange: EventEmitter;\n\n /**\n * Emits the 'dropdownFocus' custom event.\n * Usage: `document.querySelector('ads-dropdown').addEventListener('dropdownFocus', function(evt) {});`\n */\n @Event({ bubbles: false }) dropdownFocus: EventEmitter;\n\n /**\n * Emits 'openChange' custom event.\n * Usage: `document.querySelector('ads-dropdown').addEventListener('openChange', function(evt) {});`\n */\n @Event({ bubbles: false }) openChange: EventEmitter;\n\n /**\n * Handle identifier property changes\n * @param {string} newValue The new value for \"identifier\"\n * @hidden\n */\n @Watch('identifier')\n handleIdentifierChange(newValue: string): void {\n this.el.setAttribute('id', newValue || generateId('ads-dropdown'));\n }\n\n /**\n * Listens for the click event on 'window' to handle colapsing when clicking outside\n * @param {Event} evt The click event\n * @hidden\n */\n @Listen('click', { capture: true, target: 'window' })\n handleBodyClick(evt: Event): void {\n if (\n this.el === evt.target ||\n evt.target === this.customTriggerEl ||\n evt.composedPath()[0] === this.customTriggerEl ||\n getIsElementDescendantOfElement(evt.composedPath()[0] as Element, this.customTriggerEl)\n ) {\n return;\n }\n const isChild = getIsElementDescendantOfElement(evt.target as Element, this.el);\n\n if (!isChild && this.isOpen) {\n this.updateIsOpenInternal(false);\n }\n }\n\n /**\n * Listen to global focusout events\n * @param {Event} evt The focusout event\n */\n @Listen('focusout', { capture: true })\n handleFocusOutEvent(evt: FocusEvent): void {\n if (this.isOpen) {\n if (evt.target === this.el) {\n evt.stopPropagation();\n }\n if (\n !isNullOrUndefined(evt.relatedTarget) &&\n evt.relatedTarget !== this.el &&\n !this.el.shadowRoot.contains(evt.relatedTarget as Node) &&\n !this.el.contains(evt.relatedTarget as Node) &&\n evt.relatedTarget !== this.customTriggerEl\n ) {\n this.updateIsOpenInternal(false);\n }\n }\n }\n\n /**\n * Listens to 'keydown' event to handle changes in the dropdown\n * @param {Event} evt The event\n * @hidden\n */\n @Listen('keydown')\n handleClick(evt: KeyboardEvent): void {\n if (this.isOpen) {\n switch (evt.key) {\n case 'Escape':\n this.updateIsOpenInternal(false);\n break;\n case 'ArrowUp':\n evt.preventDefault();\n this.handleArrowUpDownKeyDownEvent(-1);\n break;\n case 'ArrowDown':\n evt.preventDefault();\n this.handleArrowUpDownKeyDownEvent(1);\n break;\n default:\n break;\n }\n }\n }\n\n /**\n * Listen to the custom 'dropdownChange' to handle closing the dropdown on selection\n * @hidden\n */\n @Listen('dropdownChange')\n handleDropdownChange(): void {\n // Close the dropdown as a result of an item being selected\n this.updateIsOpenInternal(false);\n }\n\n /**\n * Watch for changes on custom trigger El. Add/remove event listener for \"click\"\n * @param {HTMLElement} newEl The new trigger element\n * @param {HTMLElement} oldEl The old trigger element\n */\n @Watch('customTriggerEl')\n onCustomTriggerElChanged(newEl: HTMLElement, oldEl: HTMLElement): void {\n if (!isNullOrUndefined(newEl)) {\n this.addConfigurationFromTriggerEl(newEl);\n }\n if (!isNullOrUndefined(oldEl)) {\n this.removeConfigurationFromTriggerEl(oldEl);\n }\n }\n\n /**\n * Handle data property changes\n * @param {DropdownItem[]} newData New value for dropdown data\n */\n @Watch('data')\n handleCurrentData(newData: DropdownItem[]): void {\n if (isNullOrUndefined(newData) || isNil(newData.length)) {\n showErrorMessage(DropdownErrors.INVALID_DATA, this.el);\n return;\n }\n }\n\n /**\n * Opens the dropdown\n * @return {Promise} Opens the dropdown\n */\n @Method()\n open(): Promise {\n !this.isOpen ? this.updateIsOpenInternal(true) : null;\n return Promise.resolve();\n }\n\n /**\n * Closes the dropdown\n * @return {Promise} Closes dropdown\n */\n @Method()\n close(): Promise {\n this.isOpen ? this.updateIsOpenInternal(false) : null;\n return Promise.resolve();\n }\n\n /**\n * Update the isOpenInternal state with the value provided\n * @param {boolean} newValue the new value of isOpenInternal\n */\n private updateIsOpenInternal = (newValue: boolean): void => {\n this.isOpen = newValue;\n\n this.openChange.emit({ isOpen: newValue });\n !isNullOrUndefined(this.openChangeHandler) ? this.openChangeHandler({ isOpen: newValue }) : null;\n // focus the trigger on close\n\n if (!this.isOpen) {\n this._highlightedDropdownItemIndex = 0;\n this.focusTrigger();\n }\n };\n\n /**\n * Focus onto the trigger of the dropdown\n */\n private focusTrigger = (): void => {\n const trigger: HTMLElement = this.getTriggerElement();\n if (!isNullOrUndefined(trigger)) {\n trigger.focus();\n }\n };\n\n /**\n * Returns the current trigger element\n * @returns {HTMLElement} The trigger element\n */\n private getTriggerElement = (): HTMLElement => this.customTriggerEl || this.el.shadowRoot.querySelector('.c-dropdown__selector');\n\n /**\n * Returns the content container element\n * @returns {HTMLElement} The content of the dropdown (container)\n */\n private getContentEl = (): HTMLElement => {\n return this.el.shadowRoot.querySelector('.c-dropdown__items');\n };\n\n /**\n * Sanitize the proposed index value to ensure it is valid\n * @param {number} value The proposed index value\n * @param {number} max The maximum possible index\n * @returns {number} The sanitized index value\n */\n private sanitizeHighlightedDropdownItemIndex = (value: number, max: number): number => {\n let _value = value;\n if (value < 0) {\n _value = 0;\n }\n if (value > max - 1) {\n _value = max - 1;\n }\n return _value;\n };\n\n /**\n * Handle the focusing of the next element within the dropdown list\n * @param {number} value The value indicating whether the index should increase or decrease\n */\n private handleArrowUpDownKeyDownEvent = (value: number) => {\n const dropdownItemsList = this.getContentEl();\n const dropdownItems = !isNullOrUndefined(dropdownItemsList)\n ? Array.from(dropdownItemsList.querySelectorAll('.c-dropdown__item:not(.is-disabled)'))\n : null;\n\n // Store the highlighted dropdown item index\n this._highlightedDropdownItemIndex =\n this._highlightedDropdownItemIndex !== undefined\n ? this.sanitizeHighlightedDropdownItemIndex((this._highlightedDropdownItemIndex += value), dropdownItems.length)\n : 0;\n\n // Focus the highlighted dropdown item\n dropdownItems.map(($dropdownItem: HTMLElement) => {\n const isHighlighted = this._highlightedDropdownItemIndex === dropdownItems.indexOf($dropdownItem);\n if (isHighlighted) {\n $dropdownItem.focus();\n }\n });\n };\n\n /**\n * Handle dropdown click events\n */\n private handleTriggerClick = (): void => {\n this.updateIsOpenInternal(!this.isOpen);\n };\n\n /**\n * Get the coordinates to move an element with a given height and width\n * @param {HTMLElement} content The content element\n * @return {number[]} The coordinates of where the content should be placed\n */\n private getContentPosition = (content: HTMLElement): number[] => {\n const trigger = this.getTriggerElement();\n const triggerBounds = trigger.getBoundingClientRect();\n const contentParentBounds = content.parentElement.getBoundingClientRect();\n const contentBounds = content.getBoundingClientRect();\n const triggerOriginX = triggerBounds.x;\n const triggerOriginY = triggerBounds.y;\n const contentOriginsX = contentParentBounds.x;\n const contentOriginsY = contentParentBounds.y;\n const rtl = getIsElementRTL(this.el);\n\n // --- X OFFSET --- //\n // adjustments to the X dimension so the content fits in the screen\n const contentOriginXOffset =\n this.alignment === Positions.RIGHT\n ? -Math.min(0, triggerOriginX + triggerBounds.width - (contentBounds.width + this.getPixelsFromRem(1)))\n : Math.min(0, document.body.clientWidth - (triggerOriginX + contentBounds.width + this.getPixelsFromRem(1)));\n\n // --- Y OFFSET --- //\n // check if it's to low\n const expandUpward = triggerOriginY + contentBounds.height + window.pageYOffset > document.body.clientHeight;\n // calculate Y offsets\n const upwardOffset = contentBounds.height + parseInt(window.getComputedStyle(content).marginTop, 10) * 2 + triggerBounds.height;\n const yOffset = !isNullOrUndefined(this.customTriggerEl) ? triggerBounds.height : 0;\n // adjustments to the Y dimension so the content fits in the screen\n const contentOriginYAdjusted = yOffset + (expandUpward ? -upwardOffset : 0);\n\n // --- LTR ORIGINS --- //\n // calculations for the new X origin (before offset) are done in ltr values, then translated to rtl.\n // reason for this confusion is the conflict between rtl and alignment=right, since rtl simulates a right alignment in terms of positioning\n const triggerOriginX_Ltr = !rtl ? triggerOriginX : document.body.clientWidth - (triggerOriginX + triggerBounds.width);\n const contentOriginX_Ltr = !rtl ? contentOriginsX : document.body.clientWidth - (contentOriginsX + contentParentBounds.width);\n\n // match trigger X and add adjustments if any\n const newOriginX =\n // find the difference between the trigger and the content (for custom trigger)\n (triggerOriginX_Ltr -\n contentOriginX_Ltr +\n // add offset. invert for rtl\n (!rtl ? contentOriginXOffset : -contentOriginXOffset) -\n // move content left to adjust for right alignment (for custom triggers)\n (xor(this.alignment === Positions.RIGHT, rtl) ? contentBounds.width - triggerBounds.width : 0)) *\n // invert the value for rtl\n (rtl ? -1 : 1);\n // match trigger Y and add trigger height if custom trigger\n const newOriginY = triggerOriginY - contentOriginsY + contentOriginYAdjusted;\n return [newOriginX, newOriginY];\n };\n\n private getPixelsFromRem = (rem: number): number => rem * parseFloat(getComputedStyle(document.documentElement).fontSize);\n\n /**\n * Position content when dropdown is open\n * Only when a custom trigger is provided. Built-in trigger doesn't need positioning\n */\n private positionContent = () => {\n if (this.isOpen) {\n const content: HTMLElement = this.getContentEl();\n if (!isNullOrUndefined(content)) {\n content.style.setProperty('min-width', `${this.getTriggerElement().getBoundingClientRect().width}px`);\n const position = this.getContentPosition(content);\n content.style.setProperty('transform', `translate(${position[0]}px, ${position[1]}px)`);\n }\n }\n };\n\n /**\n * Add trigger properties to element\n * @param {HTMLElement} el The trigger element\n */\n private addConfigurationFromTriggerEl = (el: HTMLElement) => {\n el.addEventListener('click', this.handleTriggerClick);\n el.addEventListener('keydown', this.handleTriggerClick);\n el.setAttribute('aria-describedby', this.el.getAttribute('id'));\n el.setAttribute('aria-controls', this.el.getAttribute('id'));\n el.setAttribute('aria-haspopup', 'listbox');\n el.setAttribute('aria-expanded', this.isOpen.toString());\n el.style.cursor = 'pointer';\n el.tabIndex = 0;\n if (!isNullOrUndefined(this.srLabel)) {\n el.setAttribute('aria-label', this.srLabel);\n }\n };\n\n /**\n * Remove trigger properties to element\n * @param {HTMLElement} el The trigger element\n */\n private removeConfigurationFromTriggerEl = (el: HTMLElement) => {\n el.removeEventListener('click', this.handleTriggerClick);\n el.removeEventListener('keydown', this.handleTriggerClick);\n el.removeAttribute('aria-describedby');\n el.removeAttribute('aria-controls');\n el.removeAttribute('aria-haspopup');\n el.removeAttribute('aria-label');\n el.removeAttribute('aria-expanded');\n el.style.removeProperty('cursor');\n el.tabIndex = -1;\n };\n\n /**\n * Update trigger properties to element\n * @param {HTMLElement} el The trigger element\n */\n private updateConfigurationForTriggerElOnChange = (el: HTMLElement) => {\n el.setAttribute('aria-expanded', this.isOpen.toString());\n };\n\n protected componentWillLoad(): void {\n if (!isNullOrUndefined(this.customTriggerEl)) {\n this.addConfigurationFromTriggerEl(this.customTriggerEl);\n }\n }\n\n protected componentDidLoad = (): void => {\n Pipeline.addComponent(this.el);\n this.ro = new ResizeObserver(() => {\n clearTimeout(this.timeout);\n this.timeout = setTimeout(() => {\n this.positionContent();\n }, 100);\n });\n this.ro.observe(document.body);\n };\n\n protected componentDidRender(): void {\n this.positionContent();\n if (!isNullOrUndefined(this.customTriggerEl)) {\n this.updateConfigurationForTriggerElOnChange(this.customTriggerEl);\n }\n if (this.isOpen) {\n const content: HTMLElement = this.getContentEl();\n if (!isNullOrUndefined(content)) {\n setFocusOnArea(content);\n }\n }\n }\n\n protected disconnectedCallback = (): void => {\n Pipeline.removeComponent(this.el);\n if (!isNullOrUndefined(this.customTriggerEl)) {\n this.removeConfigurationFromTriggerEl(this.customTriggerEl);\n }\n };\n\n /**\n * Renders the items sub-components\n * @returns {FunctionalComponent} The item elements\n */\n private renderDropdownItems(): VNode {\n return this.data?.length > 0\n ? ((\n
\n {this.data.map((item: DropdownItem) => {\n switch (item.type) {\n case DropdownItemTypes.ACTIONGROUP:\n return this.renderGroup(item);\n case DropdownItemTypes.DIVIDER:\n return this.renderDivider();\n case DropdownItemTypes.ACTION:\n default:\n return this.renderOption(item as DropdownOption);\n }\n })}\n
\n ) as VNode)\n : null;\n }\n\n /**\n * Renders a group of options\n * @param {DropdownOptionGroup} optionsGroup The group of options to render\n * @returns {VNode} renders group items\n */\n private renderGroup = (optionsGroup: DropdownOptionGroup) => {\n return (\n \n ) as VNode;\n };\n\n /**\n * Renders an option\n * @param {DropdownOption} option The option to render\n * @returns {VNode} renders an option\n */\n private renderOption = (option: DropdownOption) =>\n (\n \n ) as VNode;\n\n /**\n * Renders a dividing line\n * @returns {VNode} The divider\n */\n private renderDivider = (): VNode => () as VNode;\n\n /**\n * Generate the dropdown trigger component\n * @returns {FunctionalComponent} The dropdown trigger\n */\n private renderDropdownTrigger = (): VNode => {\n const triggerClasses: string[] = [];\n triggerClasses.push(getClassFromLevel(this.level));\n triggerClasses.push(getClassFromSize(this.size));\n\n return (\n \n ) as VNode;\n };\n\n protected render = (): VNode => {\n const classes = ['c-dropdown'];\n classes.push(!isNullOrUndefinedOrEmpty(this.size) ? getClassFromSize(this.size) : null);\n classes.push(this.isOpen ? 'is-open' : null);\n\n return (\n
\n {isNullOrUndefined(this.customTriggerEl) ? this.renderDropdownTrigger() : null}\n {this.isOpen && this.renderDropdownItems()}\n
\n ) as VNode;\n };\n}\n"],"mappings":"shBAEO,MAAMA,EAA0C,IAAOC,EAAA,MAAIC,MAAM,wBCuBjE,MAAMC,EAA6D,EACxEC,OACAC,eACAC,iBACAC,gBACAC,sBACAC,wBACAC,2BAEA,MAAMC,EAAiBC,IACrB,IAAKR,EAAKS,SAAU,CAClBR,EAAaS,KAAK,CAAEF,IAAKA,EAAKG,MAAOX,EAAKW,SACzCC,EAAkBR,GAAuBA,EAAoB,CAAEI,IAAKA,EAAKG,MAAOX,EAAKW,QAAW,I,KAC5F,CACLH,EAAIK,gB,GAIR,MAAMC,EAAkBN,IACtB,IAAKR,EAAKS,SAAU,CAClBN,EAAcO,KAAK,CAAEF,IAAKA,EAAKG,MAAOX,EAAKW,SAC1CC,EAAkBN,GAAwBA,EAAqB,CAAEE,IAAKA,EAAKG,MAAOX,EAAKW,QAAW,I,KAC9F,CACLH,EAAIK,gB,GAIR,MAAME,EAAkBP,IACtB,IAAKR,EAAKS,SAAU,CAClBP,EAAeQ,KAAK,CAAEF,IAAKA,EAAKG,MAAOX,EAAKW,SAC3CC,EAAkBP,GAAyBA,EAAsB,CAAEG,IAAKA,EAAKG,MAAOX,EAAKW,QAAW,MACpGC,EAAkBI,IAAYA,EAAQC,QAAQT,E,KAC1C,CACLA,EAAIK,gB,GAIR,MAAMK,EAAoBV,IACxB,IAAKR,EAAKS,SAAU,CAClB,GAAID,EAAIW,MAAQ,QAAS,CACvBjB,EAAeQ,KAAK,CAAEF,IAAKA,EAAKG,MAAOX,EAAKW,SAC3CC,EAAkBP,GAAyBA,EAAsB,CAAEG,IAAKA,EAAKG,MAAOX,EAAKW,QAAW,MACpGC,EAAkBI,GAAWA,EAAQC,QAAUT,EAAIK,gB,IAK1D,MAAMO,EAAaC,EAAiBrB,EAAKsB,MACzC,MAAMC,EAAUC,EAAcxB,EAAKsB,MACnC,MAAMN,EAAUS,EAAmBzB,EAAK0B,MACxC,MAAMC,EAAU,CAAC,oBACjB,IAAIC,EAAuBC,UAC3B,IAAIC,EAAoBD,UAExBD,EAAUR,IAAU,MAAVA,SAAU,SAAVA,EAAYW,OACtBD,EAAYP,IAAO,MAAPA,SAAO,SAAPA,EAASQ,OAErB,GAAI/B,EAAKS,SAAU,CACjBkB,EAAQK,KAAK,c,CAGf,MAAMC,GAAWrB,EAAkBZ,EAAK0B,QAAU1B,EAAKS,SAAW,IAAM,OAExE,MAAMyB,EAeF,CACFC,GAAIC,OAAOpC,EAAKW,OAChB0B,KAAM,SACNC,SAAUtC,EAAKS,SAAW,KAAO,EACjCA,SAAUT,EAAKS,UAAY,KAC3B8B,OAAQhC,EACRU,QAASF,EACTyB,QAAS1B,EACT2B,UAAW7B,EAAkBZ,EAAK0B,MAAQR,EAAmB,MAG/D,GAAIe,IAAY,IAAK,CACnBC,EAAWQ,KAAO1B,IAAO,MAAPA,SAAO,SAAPA,EAAS0B,KAC3BR,EAAWS,UAAW3B,IAAO,MAAPA,SAAO,SAAPA,EAAS2B,WAAY,KAC3CT,EAAWU,KAAM5B,IAAO,MAAPA,SAAO,SAAPA,EAAS4B,MAAO,KACjCV,EAAWW,QAAS7B,IAAO,MAAPA,SAAO,SAAPA,EAAS6B,SAAU,KACvCX,EAAW,cAAgB,OAC3BA,EAAW,qBAAuBY,EAAyB9C,EAAK+C,MAAQ/C,EAAK+C,KAAO/C,EAAKW,MAAMqC,U,CAGjG,OACEnD,EAACoC,EAAOgB,OAAAC,OAAA,CAACpD,MAAO6B,EAAQwB,KAAK,MAAUjB,IACnCJ,GAAaF,IACb/B,EAAA,QAAMC,MAAM,0BACVD,EAAA,QAAMC,MAAOgC,GAAaA,IACtBlB,EAAkBgB,IAAYwB,EAAiB,CAAEC,KAAMzB,EAAQyB,KAAMC,OAAQ1B,EAAQ0B,OAAQC,MAAO3B,EAAQ2B,UAIpH1D,EAAA,QAAMC,MAAM,4BAA4BgD,EAAyB9C,EAAK+C,MAAQ/C,EAAK+C,KAAO/C,EAAKW,OACvF,EC1GP,MAAM6C,EAA+D,EAC1EC,QACAxD,eACAG,sBACAF,iBACAG,wBACAF,gBACAG,2BAEA,MAAM4B,EAAa,CACjBzB,SAAUgD,EAAMhD,SAAW,KAAO,MAGpC,IAAImB,EAAuBC,UAC3B,IAAIC,EAAoBD,UACxB,MAAMT,EAAaC,EAAiBoC,EAAMnC,MAC1CM,EAAUR,IAAU,MAAVA,SAAU,SAAVA,EAAYW,OACtB,MAAMR,EAAUC,EAAciC,EAAMnC,MACpCQ,EAAYP,IAAO,MAAPA,SAAO,SAAPA,EAASQ,OAErB,MAAM2B,EAAe,CAAC,qBAEtB,GAAID,EAAMhD,SAAU,CAClBiD,EAAa1B,KAAK,c,CAGpB,OACEnC,EAAA,OAAK8D,KAAK,QAAQ7D,MAAO4D,EAAaP,KAAK,MACzCtD,EAAA,OAAAoD,OAAAC,OAAA,CAAMpD,MAAM,2BAA8BoC,IACtCJ,GAAaF,IACb/B,EAAA,QAAMC,MAAM,iCACVD,EAAA,QAAMC,MAAOgC,GAAaA,IACtBlB,EAAkBgB,IAAYwB,EAAiB,CAAEC,KAAMzB,EAAQyB,KAAMC,OAAQ1B,EAAQ0B,OAAQC,MAAO3B,EAAQ2B,UAIpH1D,EAAA,QAAM8D,KAAK,cAAc7D,MAAM,kCAC5B2D,EAAMV,QAGTnC,EAAkB6C,EAAMG,QAAUC,MAAMC,QAAQL,EAAMG,OACpDH,EAAMG,MAAMG,KAAKC,IACf,OAAQA,EAAOC,MACb,KAAKC,EAAkBC,QACrB,OAAQtE,EAACD,EAAkB,MAC7B,KAAKsE,EAAkBE,OACvB,QAAS,CACP,OACEvE,EAACE,EAAe,CACdC,KAAMiD,OAAAC,OAAAD,OAAAC,OAAA,GAAKc,GAAM,CAAEvD,SAAUgD,EAAMhD,SAAW,KAAQuD,EAA0BvD,WAChFR,aAAcA,EACdC,eAAgBA,EAChBC,cAAeA,EACfC,oBAAqBA,EACrBC,sBAAuBA,EACvBC,qBAAsBA,G,MAMhC,KACA,E,sBCxFV2C,OAAOoB,eAAcC,EAAU,aAAc,CAAE3D,MAAO,OACtD,IAAI4D,EAAS,MACb,IAAIC,EAAW,aACf,IAAIjB,EAAQ,IACZ,IAAID,EAAS,IACb,IAAImB,EAAU,GACd,IAAIC,EAAU,OACd,IAAIC,EAAc,gKAElBL,EAAAM,WAAqB,CACnBL,OAAQA,EACRC,SAAUA,EACVlD,KAAM,CACJiC,EACAD,EACAmB,EACAC,EACAC,IAGJL,EAAAO,YAAsBP,EAAQM,WAC9BN,EAAAC,OAAiBA,EACjBD,EAAAE,SAAmBA,EACnBF,EAAAf,MAAgBA,EAChBe,EAAAhB,OAAiBA,EACjBgB,EAAAQ,UAAoBL,EACpBH,EAAAI,QAAkBA,EAClBJ,EAAAK,YAAsBA,EACtBL,EAAAG,QAAkBA,C,4BC5BlBxB,OAAOoB,eAAcC,EAAU,aAAc,CAAE3D,MAAO,OACtD,IAAI4D,EAAS,MACb,IAAIC,EAAW,WACf,IAAIjB,EAAQ,IACZ,IAAID,EAAS,IACb,IAAImB,EAAU,GACd,IAAIC,EAAU,OACd,IAAIC,EAAc,gKAElBL,EAAAM,WAAqB,CACnBL,OAAQA,EACRC,SAAUA,EACVlD,KAAM,CACJiC,EACAD,EACAmB,EACAC,EACAC,IAGJL,EAAAS,UAAoBT,EAAQM,WAC5BN,EAAAC,OAAiBA,EACjBD,EAAAE,SAAmBA,EACnBF,EAAAf,MAAgBA,EAChBe,EAAAhB,OAAiBA,EACjBgB,EAAAQ,UAAoBL,EACpBH,EAAAI,QAAkBA,EAClBJ,EAAAK,YAAsBA,EACtBL,EAAAG,QAAkBA,C,MCXX,MAAMO,EAA6D,EACxEC,YACA9C,KACA+C,YACAC,OACAC,kBACAC,mBAEA,MAAM1D,EAAU,CAAC,wBACjB,GAAIuD,EAAUI,OAAS,EAAG,CACxB3D,EAAQK,KAAKkD,EAAU/B,KAAK,K,CAG9B,MAAMjB,EAAa,CACjBC,GAAI,GAAGA,WACPwB,KAAM,WACN1C,QAASoE,EACT,kBAAmB,GAAGlD,UAAWA,WACjC,gBAAiB,UACjB,gBAAiBgD,EAAKnC,WACtB,aAAciC,EACd,aAAc,OACd,mBAAoBA,GAGtB,MAAMM,EAAWJ,EAAOK,cAAaC,cACrC,MAAMC,EAAaP,EAAOQ,SAAeC,SACzC,MAAMC,EAAYV,EAAOW,QAAcC,QAEvC,OACElG,EAAA,SAAAoD,OAAAC,OAAA,CAAQpD,MAAO6B,EAAQwB,KAAK,MAAUjB,GACnCkD,EACCvF,EAAA,QAAM8D,KAAK,QAAQ7D,MAAM,qBACvBD,EAAA,QAAMmG,KAAK,WAEX,KACH5C,EAAiB,CAAEC,KAAMkC,EAAUjC,OAAQoC,EAAYnC,MAAOsC,GAAa,qBACrE,ECvDb,MAAMI,EAAiB,8usPACvB,MAAAC,EAAeD,E,MCgDFE,EAAW,MAStB,WAAAC,CAAAC,G,wLAFQC,KAAAC,8BAAoD,EA4PpDD,KAAAE,qBAAwBC,IAC9BH,KAAKI,OAASD,EAEdH,KAAKK,WAAWjG,KAAK,CAAEgG,OAAQD,KAC9B7F,EAAkB0F,KAAKM,mBAAqBN,KAAKM,kBAAkB,CAAEF,OAAQD,IAAc,KAG5F,IAAKH,KAAKI,OAAQ,CAChBJ,KAAKC,8BAAgC,EACrCD,KAAKO,c,GAODP,KAAAO,aAAe,KACrB,MAAMC,EAAuBR,KAAKS,oBAClC,IAAKnG,EAAkBkG,GAAU,CAC/BA,EAAQE,O,GAQJV,KAAAS,kBAAoB,IAAmBT,KAAKW,iBAAmBX,KAAKY,GAAGC,WAAWC,cAAc,yBAMhGd,KAAAe,aAAe,IACdf,KAAKY,GAAGC,WAAWC,cAAc,sBASlCd,KAAAgB,qCAAuC,CAAC3G,EAAe4G,KAC7D,IAAIC,EAAS7G,EACb,GAAIA,EAAQ,EAAG,CACb6G,EAAS,C,CAEX,GAAI7G,EAAQ4G,EAAM,EAAG,CACnBC,EAASD,EAAM,C,CAEjB,OAAOC,CAAM,EAOPlB,KAAAmB,8BAAiC9G,IACvC,MAAM+G,EAAoBpB,KAAKe,eAC/B,MAAMM,GAAiB/G,EAAkB8G,GACrC7D,MAAM+D,KAAKF,EAAkBG,iBAAiB,wCAC9C,KAGJvB,KAAKC,8BACHD,KAAKC,gCAAkC1E,UACnCyE,KAAKgB,qCAAsChB,KAAKC,+BAAiC5F,EAAQgH,EAAcrC,QACvG,EAGNqC,EAAc5D,KAAK+D,IACjB,MAAMC,EAAgBzB,KAAKC,gCAAkCoB,EAAcK,QAAQF,GACnF,GAAIC,EAAe,CACjBD,EAAcd,O,IAEhB,EAMIV,KAAA2B,mBAAqB,KAC3B3B,KAAKE,sBAAsBF,KAAKI,OAAO,EAQjCJ,KAAA4B,mBAAsBC,IAC5B,MAAMrB,EAAUR,KAAKS,oBACrB,MAAMqB,EAAgBtB,EAAQuB,wBAC9B,MAAMC,EAAsBH,EAAQI,cAAcF,wBAClD,MAAMG,EAAgBL,EAAQE,wBAC9B,MAAMI,EAAiBL,EAAcM,EACrC,MAAMC,EAAiBP,EAAcQ,EACrC,MAAMC,EAAkBP,EAAoBI,EAC5C,MAAMI,EAAkBR,EAAoBM,EAC5C,MAAMG,EAAMC,EAAgB1C,KAAKY,IAIjC,MAAM+B,EACJ3C,KAAK4C,YAAcC,EAAUC,OACxBC,KAAKC,IAAI,EAAGb,EAAiBL,EAAc7E,OAASiF,EAAcjF,MAAQ+C,KAAKiD,iBAAiB,KACjGF,KAAKC,IAAI,EAAGE,SAASC,KAAKC,aAAejB,EAAiBD,EAAcjF,MAAQ+C,KAAKiD,iBAAiB,KAI5G,MAAMI,EAAehB,EAAiBH,EAAclF,OAASsG,OAAOC,YAAcL,SAASC,KAAKK,aAEhG,MAAMC,EAAevB,EAAclF,OAAS0G,SAASJ,OAAOK,iBAAiB9B,GAAS+B,UAAW,IAAM,EAAI9B,EAAc9E,OACzH,MAAM6G,GAAWvJ,EAAkB0F,KAAKW,iBAAmBmB,EAAc9E,OAAS,EAElF,MAAM8G,EAAyBD,GAAWR,GAAgBI,EAAe,GAKzE,MAAMM,GAAsBtB,EAAMN,EAAiBe,SAASC,KAAKC,aAAejB,EAAiBL,EAAc7E,OAC/G,MAAM+G,GAAsBvB,EAAMF,EAAkBW,SAASC,KAAKC,aAAeb,EAAkBP,EAAoB/E,OAGvH,MAAMgH,GAEHF,EACCC,IAEEvB,EAAME,GAAwBA,IAE/BuB,EAAIlE,KAAK4C,YAAcC,EAAUC,MAAOL,GAAOP,EAAcjF,MAAQ6E,EAAc7E,MAAQ,KAE7FwF,GAAO,EAAI,GAEd,MAAM0B,EAAa9B,EAAiBG,EAAkBsB,EACtD,MAAO,CAACG,EAAYE,EAAW,EAGzBnE,KAAAiD,iBAAoBmB,GAAwBA,EAAMC,WAAWV,iBAAiBT,SAASoB,iBAAiBC,UAMxGvE,KAAAwE,gBAAkB,KACxB,GAAIxE,KAAKI,OAAQ,CACf,MAAMyB,EAAuB7B,KAAKe,eAClC,IAAKzG,EAAkBuH,GAAU,CAC/BA,EAAQ4C,MAAMC,YAAY,YAAa,GAAG1E,KAAKS,oBAAoBsB,wBAAwB9E,WAC3F,MAAM0H,EAAW3E,KAAK4B,mBAAmBC,GACzCA,EAAQ4C,MAAMC,YAAY,YAAa,aAAaC,EAAS,SAASA,EAAS,Q,IAS7E3E,KAAA4E,8BAAiChE,IACvCA,EAAGiE,iBAAiB,QAAS7E,KAAK2B,oBAClCf,EAAGiE,iBAAiB,UAAW7E,KAAK2B,oBACpCf,EAAGkE,aAAa,mBAAoB9E,KAAKY,GAAGmE,aAAa,OACzDnE,EAAGkE,aAAa,gBAAiB9E,KAAKY,GAAGmE,aAAa,OACtDnE,EAAGkE,aAAa,gBAAiB,WACjClE,EAAGkE,aAAa,gBAAiB9E,KAAKI,OAAO1D,YAC7CkE,EAAG6D,MAAMO,OAAS,UAClBpE,EAAGqE,SAAW,EACd,IAAK3K,EAAkB0F,KAAKkF,SAAU,CACpCtE,EAAGkE,aAAa,aAAc9E,KAAKkF,Q,GAQ/BlF,KAAAmF,iCAAoCvE,IAC1CA,EAAGwE,oBAAoB,QAASpF,KAAK2B,oBACrCf,EAAGwE,oBAAoB,UAAWpF,KAAK2B,oBACvCf,EAAGyE,gBAAgB,oBACnBzE,EAAGyE,gBAAgB,iBACnBzE,EAAGyE,gBAAgB,iBACnBzE,EAAGyE,gBAAgB,cACnBzE,EAAGyE,gBAAgB,iBACnBzE,EAAG6D,MAAMa,eAAe,UACxB1E,EAAGqE,UAAY,CAAC,EAOVjF,KAAAuF,wCAA2C3E,IACjDA,EAAGkE,aAAa,gBAAiB9E,KAAKI,OAAO1D,WAAW,EAShDsD,KAAAwF,iBAAmB,KAC3BC,EAAsBzF,KAAKY,IAC3BZ,KAAK0F,GAAK,IAAIC,GAAe,KAC3BC,aAAa5F,KAAK6F,SAClB7F,KAAK6F,QAAUC,YAAW,KACxB9F,KAAKwE,iBAAiB,GACrB,IAAI,IAETxE,KAAK0F,GAAGK,QAAQ7C,SAASC,KAAK,EAgBtBnD,KAAAgG,qBAAuB,KAC/BC,EAAyBjG,KAAKY,IAC9B,IAAKtG,EAAkB0F,KAAKW,iBAAkB,CAC5CX,KAAKmF,iCAAiCnF,KAAKW,gB,GAiCvCX,KAAAkG,YAAeC,GAEnB5M,EAAC2D,EAAgB,CACfC,MAAOgJ,EACPxM,aAAcqG,KAAKrG,aACnBC,eAAgBoG,KAAKpG,eACrBC,cAAemG,KAAKnG,cACpBC,oBAAqBkG,KAAKlG,oBAC1BC,sBAAuBiG,KAAKjG,sBAC5BC,qBAAsBgG,KAAKhG,uBAUzBgG,KAAAoG,aAAgB1I,GAEpBnE,EAACE,EAAe,CACdC,KAAMgE,EACN/D,aAAcqG,KAAKrG,aACnBC,eAAgBoG,KAAKpG,eACrBC,cAAemG,KAAKnG,cACpBC,oBAAqBkG,KAAKlG,oBAC1BC,sBAAuBiG,KAAKjG,sBAC5BC,qBAAsBgG,KAAKhG,uBAQzBgG,KAAAqG,cAAgB,IAAc9M,EAACD,EAAkB,MAMjD0G,KAAAsG,sBAAwB,KAC9B,MAAMC,EAA2B,GACjCA,EAAe7K,KAAK8K,EAAkBxG,KAAKyG,QAC3CF,EAAe7K,KAAKgL,EAAiB1G,KAAK2G,OAE1C,OACEpN,EAACmF,EAAe,CACdC,UAAWqB,KAAKkF,QAChBrJ,GAAImE,KAAK4G,WACThI,UAAW2H,EACX1H,KAAMmB,KAAKI,OACXtB,iBAAkB+H,EAAMC,EAAgC9G,KAAKY,GAAI,SAAS5B,QAC1ED,aAAciB,KAAK2B,oBACnB,EAII3B,KAAA+G,OAAS,KACjB,MAAM1L,EAAU,CAAC,cACjBA,EAAQK,MAAMc,EAAyBwD,KAAK2G,MAAQD,EAAiB1G,KAAK2G,MAAQ,MAClFtL,EAAQK,KAAKsE,KAAKI,OAAS,UAAY,MAEvC,OACE7G,EAAA,OAAKC,MAAO6B,EAAQwB,KAAK,KAAMhB,GAAImE,KAAK4G,YACrCtM,EAAkB0F,KAAKW,iBAAmBX,KAAKsG,wBAA0B,KACzEtG,KAAKI,QAAUJ,KAAKgH,sBACjB,E,YArjBQ,M,8DAiBsCnE,EAAUoE,K,qFAsBpBC,EAAaC,S,UAMfC,EAAYC,Q,6IA9DtDrH,KAAKsH,UAAY,eAEjBtH,KAAKuH,YAAcvH,KAAKuH,YAAYC,KAAKxH,MAEzCA,KAAK2B,mBAAqB3B,KAAK2B,mBAAmB6F,KAAKxH,MACvDA,KAAKY,GAAGkE,aAAa,KAAM9E,KAAK4G,YAAca,EAAW,gB,CA6G3D,sBAAAC,CAAuBvH,GACrBH,KAAKY,GAAGkE,aAAa,KAAM3E,GAAYsH,EAAW,gB,CASpD,eAAAE,CAAgBzN,GACd,GACE8F,KAAKY,KAAO1G,EAAIqC,QAChBrC,EAAIqC,SAAWyD,KAAKW,iBACpBzG,EAAI0N,eAAe,KAAO5H,KAAKW,iBAC/BkH,EAAgC3N,EAAI0N,eAAe,GAAe5H,KAAKW,iBACvE,CACA,M,CAEF,MAAMmH,EAAUD,EAAgC3N,EAAIqC,OAAmByD,KAAKY,IAE5E,IAAKkH,GAAW9H,KAAKI,OAAQ,CAC3BJ,KAAKE,qBAAqB,M,EAS9B,mBAAA6H,CAAoB7N,GAClB,GAAI8F,KAAKI,OAAQ,CACf,GAAIlG,EAAIqC,SAAWyD,KAAKY,GAAI,CAC1B1G,EAAI8N,iB,CAEN,IACG1N,EAAkBJ,EAAI+N,gBACvB/N,EAAI+N,gBAAkBjI,KAAKY,KAC1BZ,KAAKY,GAAGC,WAAWqH,SAAShO,EAAI+N,iBAChCjI,KAAKY,GAAGsH,SAAShO,EAAI+N,gBACtB/N,EAAI+N,gBAAkBjI,KAAKW,gBAC3B,CACAX,KAAKE,qBAAqB,M,GAWhC,WAAAqH,CAAYrN,GACV,GAAI8F,KAAKI,OAAQ,CACf,OAAQlG,EAAIW,KACV,IAAK,SACHmF,KAAKE,qBAAqB,OAC1B,MACF,IAAK,UACHhG,EAAIK,iBACJyF,KAAKmB,+BAA+B,GACpC,MACF,IAAK,YACHjH,EAAIK,iBACJyF,KAAKmB,8BAA8B,GACnC,M,EAYR,oBAAAgH,GAEEnI,KAAKE,qBAAqB,M,CAS5B,wBAAAkI,CAAyBC,EAAoBC,GAC3C,IAAKhO,EAAkB+N,GAAQ,CAC7BrI,KAAK4E,8BAA8ByD,E,CAErC,IAAK/N,EAAkBgO,GAAQ,CAC7BtI,KAAKmF,iCAAiCmD,E,EAS1C,iBAAAC,CAAkBC,GAChB,GAAIlO,EAAkBkO,IAAY3B,EAAM2B,EAAQxJ,QAAS,CACvDyJ,EAAiBC,EAAeC,aAAc3I,KAAKY,IACnD,M,EASJ,IAAA/B,IACGmB,KAAKI,OAASJ,KAAKE,qBAAqB,MAAQ,KACjD,OAAO0I,QAAQC,S,CAQjB,KAAAC,GACE9I,KAAKI,OAASJ,KAAKE,qBAAqB,OAAS,KACjD,OAAO0I,QAAQC,S,CA8MP,iBAAAE,GACR,IAAKzO,EAAkB0F,KAAKW,iBAAkB,CAC5CX,KAAK4E,8BAA8B5E,KAAKW,gB,EAelC,kBAAAqI,GACRhJ,KAAKwE,kBACL,IAAKlK,EAAkB0F,KAAKW,iBAAkB,CAC5CX,KAAKuF,wCAAwCvF,KAAKW,gB,CAEpD,GAAIX,KAAKI,OAAQ,CACf,MAAMyB,EAAuB7B,KAAKe,eAClC,IAAKzG,EAAkBuH,GAAU,CAC/BoH,EAAepH,E,GAgBb,mBAAAmF,G,MACN,QAAOkC,EAAAlJ,KAAKjD,QAAI,MAAAmM,SAAA,SAAAA,EAAElK,QAAS,EAErBzF,EAAA,OAAKC,MAAM,oBAAoBuC,KAAK,UAAUsB,KAAK,QAAQxB,GAAI,GAAGmE,KAAK4G,kBAAiB,YAAa,aAClG5G,KAAKjD,KAAKU,KAAK/D,IACd,OAAQA,EAAKiE,MACX,KAAKC,EAAkBuL,YACrB,OAAOnJ,KAAKkG,YAAYxM,GAC1B,KAAKkE,EAAkBC,QACrB,OAAOmC,KAAKqG,gBACd,KAAKzI,EAAkBE,OACvB,QACE,OAAOkC,KAAKoG,aAAa1M,G,KAKnC,I","ignoreList":[]}