carbon-components-angular 5.28.2 → 5.28.3
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/docs/documentation/components/DropdownList.html +41 -27
- package/docs/documentation/js/search/search_index.js +2 -2
- package/docs/documentation/modules/TagModule/dependencies.svg +4 -4
- package/docs/documentation/modules/TagModule.html +4 -4
- package/docs/documentation/modules/ThemeModule/dependencies.svg +15 -15
- package/docs/documentation/modules/ThemeModule.html +15 -15
- package/docs/documentation/modules/TilesModule/dependencies.svg +101 -101
- package/docs/documentation/modules/TilesModule.html +101 -101
- package/docs/documentation/modules/TimePickerModule/dependencies.svg +17 -17
- package/docs/documentation/modules/TimePickerModule.html +17 -17
- package/docs/documentation/modules/TimePickerSelectModule/dependencies.svg +44 -48
- package/docs/documentation/modules/TimePickerSelectModule.html +44 -48
- package/docs/documentation/modules/ToggleModule/dependencies.svg +45 -41
- package/docs/documentation/modules/ToggleModule.html +45 -41
- package/docs/documentation/modules/ToggletipModule/dependencies.svg +37 -37
- package/docs/documentation/modules/ToggletipModule.html +37 -37
- package/docs/documentation/modules/TooltipModule/dependencies.svg +29 -29
- package/docs/documentation/modules/TooltipModule.html +29 -29
- package/docs/documentation/modules/TreeviewModule/dependencies.svg +28 -28
- package/docs/documentation/modules/TreeviewModule.html +28 -28
- package/docs/documentation.json +11 -11
- package/docs/storybook/{3224.a6cd0578.iframe.bundle.js → 3224.2942835b.iframe.bundle.js} +1 -1
- package/docs/storybook/iframe.html +2 -2
- package/docs/storybook/{main.7f1e6078.iframe.bundle.js → main.01f7c071.iframe.bundle.js} +1 -1
- package/docs/storybook/project.json +1 -1
- package/docs/storybook/{runtime~main.65e5750e.iframe.bundle.js → runtime~main.e288ebe6.iframe.bundle.js} +1 -1
- package/esm2020/dropdown/list/dropdown-list.component.mjs +22 -10
- package/fesm2015/carbon-components-angular-dropdown.mjs +21 -9
- package/fesm2015/carbon-components-angular-dropdown.mjs.map +1 -1
- package/fesm2020/carbon-components-angular-dropdown.mjs +21 -9
- package/fesm2020/carbon-components-angular-dropdown.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"carbon-components-angular-dropdown.mjs","sources":["../../src/dropdown/abstract-dropdown-view.class.ts","../../src/dropdown/dropdown.service.ts","../../src/dropdown/dropdown.component.ts","../../src/dropdown/dropdowntools.ts","../../src/dropdown/list/dropdown-list.component.ts","../../src/dropdown/scrollable-list.directive.ts","../../src/dropdown/dropdown.module.ts","../../src/dropdown/carbon-components-angular-dropdown.ts"],"sourcesContent":["import {\n\tInput,\n\tOutput,\n\tEventEmitter,\n\tDirective\n} from \"@angular/core\";\nimport { ListItem } from \"./list-item.interface\";\nimport { Observable } from \"rxjs\";\n\n\n/**\n * A component that intends to be used within `Dropdown` must provide an implementation that extends this base class.\n * It also must provide the base class in the `@Component` meta-data.\n * ex: `providers: [{provide: AbstractDropdownView, useExisting: forwardRef(() => MyDropdownView)}]`\n */\n@Directive({\n\tselector: \"[cdsAbstractDropdownView], [ibmAbstractDropdownView]\"\n})\nexport class AbstractDropdownView {\n\t/**\n\t * The items to be displayed in the list within the `AbstractDropDownView`.\n\t */\n\t@Input() set items(value: Array<ListItem> | Observable<Array<ListItem>>) { }\n\n\tget items(): Array<ListItem> | Observable<Array<ListItem>> { return; }\n\t/**\n\t * Emits selection events to controlling classes\n\t */\n\t@Output() select: EventEmitter<{item: ListItem } | ListItem[]>;\n\t/**\n\t * Event to suggest a blur on the view.\n\t * Emits _after_ the first/last item has been focused.\n\t * ex.\n\t * ArrowUp -> focus first item\n\t * ArrowUp -> emit event\n\t *\n\t * It's recommended that the implementing view include a specific type union of possible blurs\n\t * ex. `@Output() blurIntent = new EventEmitter<\"top\" | \"bottom\">();`\n\t */\n\t@Output() blurIntent: EventEmitter<any>;\n\t/**\n\t * Specifies whether or not the `DropdownList` supports selecting multiple items as opposed to single\n\t * item selection.\n\t */\n\tpublic type: \"single\" | \"multi\" = \"single\";\n\t/**\n\t * Specifies the render size of the items within the `AbstractDropdownView`.\n\t */\n\tpublic size: \"sm\" | \"md\" | \"lg\" = \"md\";\n\tpublic listId?: string;\n\t/**\n\t * Returns the `ListItem` that is subsequent to the selected item in the `DropdownList`.\n\t */\n\tgetNextItem(): ListItem { return; }\n\t/**\n\t * Returns a boolean if the currently selected item is preceded by another\n\t */\n\thasNextElement(): boolean { return; }\n\t/**\n\t * Returns the `HTMLElement` for the item that is subsequent to the selected item.\n\t */\n\tgetNextElement(): HTMLElement { return; }\n\t/**\n\t * Returns the `ListItem` that precedes the selected item within `DropdownList`.\n\t */\n\tgetPrevItem(): ListItem { return; }\n\t/**\n\t * Returns a boolean if the currently selected item is followed by another\n\t */\n\thasPrevElement(): boolean { return; }\n\t/**\n\t * Returns the `HTMLElement` for the item that precedes the selected item.\n\t */\n\tgetPrevElement(): HTMLElement { return; }\n\t/**\n\t * Returns the selected leaf level item(s) within the `DropdownList`.\n\t */\n\tgetSelected(): ListItem[] { return; }\n\t/**\n\t * Returns the `ListItem` that is selected within `DropdownList`.\n\t */\n\tgetCurrentItem(): ListItem { return; }\n\t/**\n\t * Returns the `HTMLElement` for the item that is selected within the `DropdownList`.\n\t */\n\tgetCurrentElement(): HTMLElement { return; }\n\t/**\n\t * Guaranteed to return the current items as an Array.\n\t */\n\tgetListItems(): Array<ListItem> { return; }\n\t/**\n\t * Transforms array input list of items to the correct state by updating the selected item(s).\n\t */\n\tpropagateSelected(value: Array<ListItem>): void {}\n\t/**\n\t *\n\t * @param value value to filter the list by\n\t */\n\tfilterBy(value: string): void {}\n\t/**\n\t * Initializes focus in the list\n\t * In most cases this just calls `getCurrentElement().focus()`\n\t */\n\tinitFocus(): void {}\n\t/**\n\t * Subscribe the function passed to an internal observable that will resolve once the items are ready\n\t */\n\tonItemsReady(subcription: () => void): void {}\n\t/**\n\t * Reorder selected items bringing them to the top of the list\n\t */\n\treorderSelected(moveFocus?: boolean): void {}\n}\n","import { Injectable, ElementRef, OnDestroy } from \"@angular/core\";\nimport { PlaceholderService } from \"carbon-components-angular/placeholder\";\nimport { Subscription } from \"rxjs\";\nimport { position } from \"@carbon/utils-position\";\nimport { AnimationFrameService } from \"carbon-components-angular/utils\";\nimport { closestAttr } from \"carbon-components-angular/utils\";\n\nconst defaultOffset = { top: 0, left: 0 };\n\n@Injectable()\nexport class DropdownService implements OnDestroy {\n\tpublic set offset(value: { top?: number, left?: number }) {\n\t\tthis._offset = Object.assign({}, defaultOffset, value);\n\t}\n\n\tpublic get offset() {\n\t\treturn this._offset;\n\t}\n\t/**\n\t * reference to the body appended menu\n\t */\n\tprotected menuInstance: HTMLElement;\n\n\t/**\n\t * Maintains an Event Observable Subscription for the global requestAnimationFrame.\n\t * requestAnimationFrame is tracked only if the `Dropdown` is appended to the body otherwise we don't need it\n\t */\n\tprotected animationFrameSubscription = new Subscription();\n\n\tprotected _offset = defaultOffset;\n\n\tconstructor(\n\t\tprotected placeholderService: PlaceholderService,\n\t\tprotected animationFrameService: AnimationFrameService\n\t) {}\n\n\t/**\n\t * Appends the menu to the body, or a `cds-placeholder` (if defined)\n\t *\n\t * @param parentRef container to position relative to\n\t * @param menuRef menu to be appended to body\n\t * @param classList any extra classes we should wrap the container with\n\t */\n\tappendToBody(parentRef: HTMLElement, menuRef: HTMLElement, classList): HTMLElement {\n\t\t// build the dropdown list container\n\t\tmenuRef.style.display = \"block\";\n\t\tconst dropdownWrapper = document.createElement(\"div\");\n\t\tdropdownWrapper.className = `dropdown ${classList}`;\n\t\tdropdownWrapper.style.width = parentRef.offsetWidth + \"px\";\n\t\tdropdownWrapper.style.position = \"absolute\";\n\t\tdropdownWrapper.appendChild(menuRef);\n\n\t\t// append it to the placeholder\n\t\tif (this.placeholderService.hasPlaceholderRef()) {\n\t\t\tthis.placeholderService.appendElement(dropdownWrapper);\n\t\t\t// or append it directly to the body\n\t\t} else {\n\t\t\tdocument.body.appendChild(dropdownWrapper);\n\t\t}\n\n\t\tthis.menuInstance = dropdownWrapper;\n\n\t\tthis.animationFrameSubscription = this.animationFrameService.tick.subscribe(() => {\n\t\t\tthis.positionDropdown(parentRef, dropdownWrapper);\n\t\t});\n\n\t\t// run one position in sync, so we're less likely to have the view \"jump\" as we focus\n\t\tthis.positionDropdown(parentRef, dropdownWrapper);\n\n\t\treturn dropdownWrapper;\n\t}\n\n\t/**\n\t * Reattach the dropdown menu to the parent container\n\t * @param hostRef container to append to\n\t */\n\tappendToDropdown(hostRef: HTMLElement): HTMLElement {\n\t\t// if the instance is already removed don't try and remove it again\n\t\tif (!this.menuInstance) { return; }\n\t\tconst instance = this.menuInstance;\n\t\tconst menu = instance.firstElementChild as HTMLElement;\n\t\t// clean up the instance\n\t\tthis.menuInstance = null;\n\t\tmenu.style.display = \"none\";\n\t\thostRef.appendChild(menu);\n\t\tthis.animationFrameSubscription.unsubscribe();\n\t\tif (this.placeholderService.hasPlaceholderRef() && this.placeholderService.hasElement(instance)) {\n\t\t\tthis.placeholderService.removeElement(instance);\n\t\t} else if (document.body.contains(instance)) {\n\t\t\tdocument.body.removeChild(instance);\n\t\t}\n\t\treturn instance;\n\t}\n\n\t/**\n\t * position an open dropdown relative to the given parentRef\n\t */\n\tupdatePosition(parentRef) {\n\t\tthis.positionDropdown(parentRef, this.menuInstance);\n\t}\n\n\tngOnDestroy() {\n\t\tthis.animationFrameSubscription.unsubscribe();\n\t}\n\n\tprotected positionDropdown(parentRef, menuRef) {\n\t\tif (!menuRef) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet leftOffset = 0;\n\n\t\tconst boxMenu = menuRef.querySelector(\".cds--list-box__menu\");\n\n\t\tif (boxMenu) {\n\t\t\t// If the parentRef and boxMenu are in a different left position relative to the\n\t\t\t// window, the the boxMenu position has already been flipped and a check needs to be done\n\t\t\t// to see if it needs to stay flipped.\n\t\t\tif (parentRef.getBoundingClientRect().left !== boxMenu.getBoundingClientRect().left) {\n\t\t\t\t// The getBoundingClientRect().right of the boxMenu if it were hypothetically flipped\n\t\t\t\t// back into the original position before the flip.\n\t\t\t\tconst testBoxMenuRightEdgePos =\n\t\t\t\t\tparentRef.getBoundingClientRect().left - boxMenu.getBoundingClientRect().left + boxMenu.getBoundingClientRect().right;\n\n\t\t\t\tif (testBoxMenuRightEdgePos > (window.innerWidth || document.documentElement.clientWidth)) {\n\t\t\t\t\tleftOffset = parentRef.offsetWidth - boxMenu.offsetWidth;\n\t\t\t\t}\n\t\t\t// If it has not already been flipped, check if it is necessary to flip, ie. if the\n\t\t\t// boxMenu is outside of the right viewPort.\n\t\t\t} else if (boxMenu.getBoundingClientRect().right > (window.innerWidth || document.documentElement.clientWidth)) {\n\t\t\t\tleftOffset = parentRef.offsetWidth - boxMenu.offsetWidth;\n\t\t\t}\n\t\t}\n\n\t\t// If cds-placeholder has a parent with a position(relative|fixed|absolute) account for the parent offset\n\t\tconst closestMenuWithPos = closestAttr(\"position\", [\"relative\", \"fixed\", \"absolute\"], menuRef.parentElement);\n\t\tconst topPos = closestMenuWithPos ? closestMenuWithPos.getBoundingClientRect().top * -1 : this.offset.top;\n\t\tconst leftPos = closestMenuWithPos ? closestMenuWithPos.getBoundingClientRect().left * -1 : this.offset.left + leftOffset;\n\n\t\tlet pos = position.findAbsolute(parentRef, menuRef, \"bottom\");\n\t\tpos = position.addOffset(pos, topPos, leftPos);\n\n\t\tposition.setElement(menuRef, pos);\n\t}\n}\n","import {\n\tComponent,\n\tInput,\n\tOutput,\n\tEventEmitter,\n\tElementRef,\n\tContentChild,\n\tOnInit,\n\tViewChild,\n\tAfterContentInit,\n\tHostListener,\n\tOnDestroy,\n\tHostBinding,\n\tTemplateRef,\n\tAfterViewInit\n} from \"@angular/core\";\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from \"@angular/forms\";\n\n// Observable import is required here so typescript can compile correctly\nimport {\n\tObservable,\n\tof,\n\tSubscription\n} from \"rxjs\";\n\nimport { AbstractDropdownView } from \"./abstract-dropdown-view.class\";\nimport { I18n } from \"carbon-components-angular/i18n\";\nimport { ListItem } from \"./list-item.interface\";\nimport { DropdownService } from \"./dropdown.service\";\nimport { ElementService, getScrollableParents } from \"carbon-components-angular/utils\";\nimport { hasScrollableParents } from \"carbon-components-angular/utils\";\n\n/**\n * Drop-down lists enable users to select one or more items from a list.\n *\n * #### Opening behavior/List DOM placement\n * By default the dropdown will try to figure out the best placement for the dropdown list.\n *\n * If it's not contained within any scrolling elements, it will open inline, if it _is_\n * contained within a scrolling container it will try to open in the body, or an `cds-placeholder`.\n *\n * To control this behavior you can use the `appendInline` input:\n * - `[appendInline]=\"null\"` is the default (auto detection)\n * - `[appendInline]=\"false\"` will always append to the body/`cds-placeholder`\n * - `[appendInline]=\"true\"` will always append inline (next to the dropdown button)\n *\n * Get started with importing the module:\n *\n * ```typescript\n * import { DropdownModule } from 'carbon-components-angular';\n * ```\n *\n * [See demo](../../?path=/story/components-dropdown--basic)\n */\n@Component({\n\tselector: \"cds-dropdown, ibm-dropdown\",\n\ttemplate: `\n\t<label\n\t\t*ngIf=\"label && !skeleton\"\n\t\t[for]=\"id\"\n\t\tclass=\"cds--label\"\n\t\t[ngClass]=\"{\n\t\t\t'cds--label--disabled': disabled,\n\t\t\t'cds--visually-hidden': hideLabel\n\t\t}\">\n\t\t<ng-container *ngIf=\"!isTemplate(label)\">{{label}}</ng-container>\n\t\t<ng-template *ngIf=\"isTemplate(label)\" [ngTemplateOutlet]=\"label\"></ng-template>\n\t</label>\n\t<div\n\t\tclass=\"cds--list-box\"\n\t\t[ngClass]=\"{\n\t\t\t'cds--dropdown': type !== 'multi',\n\t\t\t'cds--multiselect': type === 'multi',\n\t\t\t'cds--multi-select--selected': type === 'multi' && getSelectedCount() > 0,\n\t\t\t'cds--dropdown--light': theme === 'light',\n\t\t\t'cds--list-box--light': theme === 'light',\n\t\t\t'cds--list-box--inline': inline,\n\t\t\t'cds--skeleton': skeleton,\n\t\t\t'cds--dropdown--disabled cds--list-box--disabled': disabled,\n\t\t\t'cds--dropdown--invalid': invalid,\n\t\t\t'cds--dropdown--warning cds--list-box--warning': warn,\n\t\t\t'cds--dropdown--sm cds--list-box--sm': size === 'sm',\n\t\t\t'cds--dropdown--md cds--list-box--md': size === 'md',\n\t\t\t'cds--dropdown--lg cds--list-box--lg': size === 'lg',\n\t\t\t'cds--list-box--expanded': !menuIsClosed\n\t\t}\">\n\t\t<button\n\t\t\t#dropdownButton\n\t\t\t[id]=\"id\"\n\t\t\ttype=\"button\"\n\t\t\tclass=\"cds--list-box__field\"\n\t\t\t[ngClass]=\"{'a': !menuIsClosed}\"\n\t\t\t[attr.aria-expanded]=\"!menuIsClosed\"\n\t\t\t[attr.aria-disabled]=\"disabled\"\n\t\t\taria-haspopup=\"listbox\"\n\t\t\t(click)=\"disabled ? $event.stopPropagation() : toggleMenu()\"\n\t\t\t(blur)=\"onBlur()\"\n\t\t\t[attr.disabled]=\"disabled ? true : null\">\n\t\t\t<div\n\t\t\t\t(click)=\"clearSelected()\"\n\t\t\t\t(keydown.enter)=\"clearSelected()\"\n\t\t\t\t*ngIf=\"type === 'multi' && getSelectedCount() > 0\"\n\t\t\t\tclass=\"cds--list-box__selection cds--tag--filter cds--list-box__selection--multi\"\n\t\t\t\ttabindex=\"0\"\n\t\t\t\t[title]=\"clearText\">\n\t\t\t\t{{getSelectedCount()}}\n\t\t\t\t<svg\n\t\t\t\t\tfocusable=\"false\"\n\t\t\t\t\tpreserveAspectRatio=\"xMidYMid meet\"\n\t\t\t\t\tstyle=\"will-change: transform;\"\n\t\t\t\t\trole=\"img\"\n\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\twidth=\"16\"\n\t\t\t\t\theight=\"16\"\n\t\t\t\t\tviewBox=\"0 0 16 16\"\n\t\t\t\t\taria-hidden=\"true\">\n\t\t\t\t\t<path d=\"M12 4.7l-.7-.7L8 7.3 4.7 4l-.7.7L7.3 8 4 11.3l.7.7L8 8.7l3.3 3.3.7-.7L8.7 8z\"></path>\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t\t<span *ngIf=\"isRenderString()\" class=\"cds--list-box__label\">{{getDisplayStringValue() | async}}</span>\n\t\t\t<ng-template\n\t\t\t\t*ngIf=\"!isRenderString()\"\n\t\t\t\t[ngTemplateOutletContext]=\"getRenderTemplateContext()\"\n\t\t\t\t[ngTemplateOutlet]=\"displayValue\">\n\t\t\t</ng-template>\n\t\t\t<svg\n\t\t\t\t*ngIf=\"invalid\"\n\t\t\t\tclass=\"cds--dropdown__invalid-icon\"\n\t\t\t\tcdsIcon=\"warning--filled\"\n\t\t\t\tsize=\"16\">\n\t\t\t</svg>\n\t\t\t<svg\n\t\t\t\t*ngIf=\"!invalid && warn\"\n\t\t\t\tcdsIcon=\"warning--alt--filled\"\n\t\t\t\tsize=\"16\"\n\t\t\t\tclass=\"cds--list-box__invalid-icon cds--list-box__invalid-icon--warning\">\n\t\t\t</svg>\n\t\t\t<span class=\"cds--list-box__menu-icon\">\n\t\t\t\t<svg\n\t\t\t\t\t*ngIf=\"!skeleton\"\n\t\t\t\t\tcdsIcon=\"chevron--down\"\n\t\t\t\t\tsize=\"16\"\n\t\t\t\t\t[attr.aria-label]=\"menuButtonLabel\"\n\t\t\t\t\t[ngClass]=\"{'cds--list-box__menu-icon--open': !menuIsClosed }\">\n\t\t\t\t</svg>\n\t\t\t</span>\n\t\t</button>\n\t\t<div\n\t\t\t#dropdownMenu\n\t\t\t[ngClass]=\"{\n\t\t\t\t'cds--list-box--up': this.dropUp !== null && this.dropUp !== undefined ? dropUp : _dropUp\n\t\t\t}\">\n\t\t\t<ng-content *ngIf=\"!menuIsClosed\"></ng-content>\n\t\t</div>\n\t</div>\n\t<div\n\t\t*ngIf=\"helperText && !invalid && !warn && !skeleton\"\n\t\tclass=\"cds--form__helper-text\"\n\t\t[ngClass]=\"{\n\t\t\t'cds--form__helper-text--disabled': disabled\n\t\t}\">\n\t\t<ng-container *ngIf=\"!isTemplate(helperText)\">{{helperText}}</ng-container>\n\t\t<ng-template *ngIf=\"isTemplate(helperText)\" [ngTemplateOutlet]=\"helperText\"></ng-template>\n\t</div>\n\t<div *ngIf=\"invalid\" class=\"cds--form-requirement\">\n\t\t<ng-container *ngIf=\"!isTemplate(invalidText)\">{{ invalidText }}</ng-container>\n\t\t<ng-template *ngIf=\"isTemplate(invalidText)\" [ngTemplateOutlet]=\"invalidText\"></ng-template>\n\t</div>\n\t<div *ngIf=\"!invalid && warn\" class=\"cds--form-requirement\">\n\t\t<ng-container *ngIf=\"!isTemplate(warnText)\">{{warnText}}</ng-container>\n\t\t<ng-template *ngIf=\"isTemplate(warnText)\" [ngTemplateOutlet]=\"warnText\"></ng-template>\n\t</div>\n\t`,\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: Dropdown,\n\t\t\tmulti: true\n\t\t}\n\t]\n})\nexport class Dropdown implements OnInit, AfterContentInit, AfterViewInit, OnDestroy, ControlValueAccessor {\n\tstatic dropdownCount = 0;\n\t@Input() id = `dropdown-${Dropdown.dropdownCount++}`;\n\t/**\n\t * Label for the dropdown.\n\t */\n\t@Input() label: string | TemplateRef<any>;\n\t/**\n\t * Hide label while keeping it accessible for screen readers\n\t */\n\t@Input() hideLabel = false;\n\t/**\n\t * Sets the optional helper text.\n\t */\n\t@Input() helperText: string | TemplateRef<any>;\n\t/**\n\t * Value displayed if no item is selected.\n\t */\n\t@Input() placeholder = \"\";\n\t/**\n\t * The selected value from the `Dropdown`. Can be a string or template.\n\t */\n\t@Input() displayValue: string | TemplateRef<any> = \"\";\n\t/**\n\t * Sets the optional clear button tooltip text.\n\t */\n\t@Input() clearText: string = this.i18n.get().DROPDOWN.CLEAR;\n\t/**\n\t * Size to render the dropdown field.\n\t */\n\t@Input() size: \"sm\" | \"md\" | \"lg\" = \"md\";\n\t/**\n\t * Defines whether or not the `Dropdown` supports selecting multiple items as opposed to single\n\t * item selection.\n\t */\n\t@Input() type: \"single\" | \"multi\" = \"single\";\n\t/**\n\t * @deprecated since v5 - Use `cdsLayer` directive instead\n\t * `light` or `dark` dropdown theme\n\t */\n\t@Input() theme: \"light\" | \"dark\" = \"dark\";\n\t/**\n\t * Set to `true` to disable the dropdown.\n\t */\n\t@Input() disabled = false;\n\t/**\n\t * Set to `true` for a loading dropdown.\n\t */\n\t@Input() skeleton = false;\n\t/**\n\t * Set to `true` for an inline dropdown.\n\t */\n\t@Input() inline = false;\n\t/**\n\t * Set to `true` for a dropdown without arrow key activation.\n\t */\n\t@Input() disableArrowKeys = false;\n\t/**\n\t * Set to `true` for invalid state.\n\t */\n\t@Input() invalid = false;\n\t/**\n\t * Value displayed if dropdown is in invalid state.\n\t */\n\t@Input() invalidText: string | TemplateRef<any>;\n\t/**\n\t * Set to `true` to show a warning (contents set by warningText)\n\t */\n\t@Input() warn = false;\n\t/**\n\t * Sets the warning text\n\t */\n\t@Input() warnText: string | TemplateRef<any>;\n\t/**\n\t * set to `true` to place the dropdown view inline with the component\n\t */\n\t@Input() appendInline: boolean = null;\n\t/**\n\t * Query string for the element that contains the `Dropdown`.\n\t * Used to trigger closing the dropdown if it scrolls outside of the viewport of the `scrollableContainer`.\n\t */\n\t@Input() scrollableContainer: string;\n\t/**\n\t * Specifies the property to be used as the return value to `ngModel`\n\t */\n\t@Input() itemValueKey: string;\n\t/**\n\t * Specify feedback (mode) of the selection.\n\t * `top`: selected item jumps to top\n\t * `fixed`: selected item stays at it's position\n\t * `top-after-reopen`: selected item jump to top after reopen dropdown\n\t */\n\t@Input() selectionFeedback: \"top\" | \"fixed\" | \"top-after-reopen\" = \"top-after-reopen\";\n\t/**\n\t * Accessible label for the button that opens the dropdown list.\n\t * Defaults to the `DROPDOWN.OPEN` value from the i18n service.\n\t */\n\t@Input() menuButtonLabel = this.i18n.get().DROPDOWN.OPEN;\n\t/**\n\t * Provides the label for the \"# selected\" text.\n\t * Defaults to the `DROPDOWN.SELECTED` value from the i18n service.\n\t */\n\t@Input() selectedLabel = this.i18n.get().DROPDOWN.SELECTED;\n\t/**\n\t * Overrides the automatic dropUp.\n\t */\n\t@Input() dropUp: boolean;\n\t/**\n\t * Emits selection events.\n\t */\n\t@Output() selected: EventEmitter<Object> = new EventEmitter<Object>();\n\t/**\n\t * Emits event notifying to other classes that the `Dropdown` has been closed (collapsed).\n\t */\n\t@Output() onClose: EventEmitter<any> = new EventEmitter<any>();\n\t/**\n\t * Emits event notifying to other classes that the `Dropdown` has been closed (collapsed).\n\t */\n\t@Output() close: EventEmitter<any> = new EventEmitter<any>();\n\n\t/**\n\t * Maintains a reference to the `AbstractDropdownView` object within the content DOM.\n\t */\n\t@ContentChild(AbstractDropdownView, { static: true }) view: AbstractDropdownView;\n\t/**\n\t * Maintains a reference to the view DOM element of the `Dropdown` button.\n\t */\n\t@ViewChild(\"dropdownButton\", { static: true }) dropdownButton;\n\t/**\n\t * ViewChid of the dropdown view.\n\t */\n\t@ViewChild(\"dropdownMenu\", { static: true }) dropdownMenu;\n\n\t@HostBinding(\"class.cds--dropdown__wrapper\") hostClass = true;\n\t/**\n\t * Set to `true` if the dropdown is closed (not expanded).\n\t */\n\tmenuIsClosed = true;\n\n\t/**\n\t * controls whether the `drop-up` class is applied\n\t */\n\t_dropUp = false;\n\n\t// .bind creates a new function, so we declare the methods below\n\t// but .bind them up here\n\tnoop = this._noop.bind(this);\n\toutsideClick = this._outsideClick.bind(this);\n\toutsideKey = this._outsideKey.bind(this);\n\tkeyboardNav = this._keyboardNav.bind(this);\n\n\tprotected visibilitySubscription = new Subscription();\n\n\tprotected onTouchedCallback: () => void = this._noop;\n\n\t// primarily used to capture and propagate input to `writeValue` before the content is available\n\tprivate _writtenValue: any = [];\n\tprotected get writtenValue() {\n\t\treturn this._writtenValue;\n\t}\n\tprotected set writtenValue(val: any[]) {\n\t\tif (val && val.length === 0) {\n\t\t\tthis.clearSelected();\n\t\t}\n\t\tthis._writtenValue = val;\n\t}\n\n\t/**\n\t * Creates an instance of Dropdown.\n\t */\n\tconstructor(\n\t\tprotected elementRef: ElementRef,\n\t\tprotected i18n: I18n,\n\t\tprotected dropdownService: DropdownService,\n\t\tprotected elementService: ElementService) {}\n\n\t/**\n\t * Updates the `type` property in the `@ContentChild`.\n\t * The `type` property specifies whether the `Dropdown` allows single selection or multi selection.\n\t */\n\tngOnInit() {\n\t\tif (this.view) {\n\t\t\tthis.view.type = this.type;\n\t\t}\n\t}\n\n\t/**\n\t * Initializes classes and subscribes to events for single or multi selection.\n\t */\n\tngAfterContentInit() {\n\t\tif (!this.view) {\n\t\t\treturn;\n\t\t}\n\t\tif ((this.writtenValue && this.writtenValue.length) || typeof this.writtenValue === \"number\") {\n\t\t\tthis.writeValue(this.writtenValue);\n\t\t}\n\t\tthis.view.type = this.type;\n\t\tthis.view.size = this.size;\n\n\t\t// function to check if the event is organic (isUpdate === false) or programmatic\n\t\tconst isUpdate = event => event && event.isUpdate;\n\n\t\tthis.view.select.subscribe(event => {\n\t\t\tif (this.type === \"single\" && !isUpdate(event) && !Array.isArray(event)) {\n\t\t\t\tthis.closeMenu();\n\t\t\t\tif (event.item && event.item.selected) {\n\t\t\t\t\tif (this.itemValueKey) {\n\t\t\t\t\t\tthis.propagateChange(event.item[this.itemValueKey]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.propagateChange(event.item);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.propagateChange(null);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.type === \"multi\" && !isUpdate(event)) {\n\t\t\t\t// if we have a `value` selector and selected items map them appropriately\n\t\t\t\tif (this.itemValueKey && this.view.getSelected()) {\n\t\t\t\t\tconst values = this.view.getSelected().map(item => item[this.itemValueKey]);\n\t\t\t\t\tthis.propagateChange(values);\n\t\t\t\t\t// otherwise just pass up the values from `getSelected`\n\t\t\t\t} else {\n\t\t\t\t\tthis.propagateChange(this.view.getSelected());\n\t\t\t\t}\n\t\t\t}\n\t\t\t// only emit selected for \"organic\" selections\n\t\t\tif (!isUpdate(event)) {\n\t\t\t\tthis.checkForReorder();\n\t\t\t\tthis.selected.emit(event);\n\t\t\t}\n\t\t});\n\t}\n\n\tngAfterViewInit() {\n\t\t// if appendInline is default valued (null) we should:\n\t\t// 1. if there are scrollable parents (not including body) don't append inline\n\t\t// this should also cover the case where the dropdown is in a modal\n\t\t// (where we _do_ want to append to the placeholder)\n\t\tif (this.appendInline === null && hasScrollableParents(this.elementRef.nativeElement)) {\n\t\t\tthis.appendInline = false;\n\t\t\t// 2. otherwise we should append inline\n\t\t} else if (this.appendInline === null) {\n\t\t\tthis.appendInline = true;\n\t\t}\n\t\tthis.checkForReorder();\n\t}\n\n\t/**\n\t * Removing the `Dropdown` from the body if it is appended to the body.\n\t */\n\tngOnDestroy() {\n\t\tif (!this.appendInline) {\n\t\t\tthis._appendToDropdown();\n\t\t}\n\t}\n\n\t/**\n\t * Propagates the injected `value`.\n\t */\n\twriteValue(value: any) {\n\t\t// cache the written value so we can use it in `AfterContentInit`\n\t\tthis.writtenValue = value;\n\t\tthis.view.onItemsReady(() => {\n\t\t\t// propagate null/falsey as an array (deselect everything)\n\t\t\tif (!value) {\n\t\t\t\tthis.view.propagateSelected([value]);\n\t\t\t} else if (this.type === \"single\") {\n\t\t\t\tif (this.itemValueKey) {\n\t\t\t\t\t// clone the specified item and update its state\n\t\t\t\t\tconst newValue = Object.assign({}, this.view.getListItems().find(item => item[this.itemValueKey] === value));\n\t\t\t\t\tnewValue.selected = true;\n\t\t\t\t\tthis.view.propagateSelected([newValue]);\n\t\t\t\t} else {\n\t\t\t\t\t// pass the singular value as an array of ListItem\n\t\t\t\t\tthis.view.propagateSelected([value]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this.itemValueKey) {\n\t\t\t\t\t// clone the items and update their state based on the received value array\n\t\t\t\t\t// this way we don't lose any additional metadata that may be passed in via the `items` Input\n\t\t\t\t\tlet newValues = [];\n\t\t\t\t\tfor (const v of value) {\n\t\t\t\t\t\tfor (const item of this.view.getListItems()) {\n\t\t\t\t\t\t\tif (item[this.itemValueKey] === v) {\n\t\t\t\t\t\t\t\tnewValues.push(Object.assign({}, item, { selected: true }));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.view.propagateSelected(newValues);\n\t\t\t\t} else {\n\t\t\t\t\t// we can safely assume we're passing an array of `ListItem`s\n\t\t\t\t\tthis.view.propagateSelected(value);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.checkForReorder();\n\t\t});\n\t}\n\n\tonBlur() {\n\t\tthis.onTouchedCallback();\n\t}\n\n\tregisterOnChange(fn: any) {\n\t\tthis.propagateChange = fn;\n\t}\n\n\t/**\n\t * Registering the function injected to control the touch use of the `Dropdown`.\n\t */\n\tregisterOnTouched(fn: any) {\n\t\tthis.onTouchedCallback = fn;\n\t}\n\n\t/**\n\t * function passed in by `registerOnChange`\n\t */\n\tpropagateChange = (_: any) => { };\n\n\t/**\n\t * `ControlValueAccessor` method to programmatically disable the dropdown.\n\t *\n\t * ex: `this.formGroup.get(\"myDropdown\").disable();`\n\t *\n\t * @param isDisabled `true` to disable the input\n\t */\n\tsetDisabledState(isDisabled: boolean) {\n\t\tthis.disabled = isDisabled;\n\t}\n\n\t/**\n\t * Adds keyboard functionality for navigation, selection and closing of the `Dropdown`.\n\t */\n\t@HostListener(\"keydown\", [\"$event\"])\n\tonKeyDown(event: KeyboardEvent) {\n\t\tif ((event.key === \"Escape\") && !this.menuIsClosed) {\n\t\t\tevent.stopImmediatePropagation(); // don't unintentionally close other widgets that listen for Escape\n\t\t}\n\t\tif (event.key === \"Escape\") {\n\t\t\tevent.preventDefault();\n\t\t\tthis.closeMenu();\n\t\t\tthis.dropdownButton.nativeElement.focus();\n\t\t} else if (this.menuIsClosed && (event.key === \" \" || event.key === \"ArrowDown\" || event.key === \"ArrowUp\")) {\n\t\t\tif (this.disableArrowKeys && (event.key === \"ArrowDown\" || event.key === \"ArrowUp\")) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tthis.openMenu();\n\t\t}\n\n\t\tif (!this.menuIsClosed && event.key === \"Tab\" && this.dropdownMenu.nativeElement.contains(event.target as Node)) {\n\t\t\tthis.closeMenu();\n\t\t}\n\n\t\tif (!this.menuIsClosed && event.key === \"Tab\" && event.shiftKey) {\n\t\t\tthis.closeMenu();\n\t\t}\n\n\t\tif (this.type === \"multi\") { return; }\n\n\t\tif (this.menuIsClosed) {\n\t\t\tthis.closedDropdownNavigation(event);\n\t\t}\n\t}\n\n\tclosedDropdownNavigation(event) {\n\t\tif (event.key === \"ArrowDown\") {\n\t\t\tevent.preventDefault();\n\t\t\tthis.view.getCurrentItem().selected = false;\n\t\t\tlet item = this.view.getNextItem();\n\t\t\tif (item) { item.selected = true; }\n\t\t} else if (event.key === \"ArrowUp\") {\n\t\t\tevent.preventDefault();\n\t\t\tthis.view.getCurrentItem().selected = false;\n\t\t\tlet item = this.view.getPrevItem();\n\t\t\tif (item) { item.selected = true; }\n\t\t}\n\t}\n\n\t/**\n\t * Returns the display value if there is a selection and displayValue is set,\n\t * if there is just a selection the ListItem content property will be returned,\n\t * otherwise the placeholder will be returned.\n\t */\n\tgetDisplayStringValue(): Observable<string> {\n\t\tif (!this.view || this.skeleton) {\n\t\t\treturn;\n\t\t}\n\t\tlet selected = this.view.getSelected();\n\t\tif (selected.length && (!this.displayValue || !this.isRenderString())) {\n\t\t\tif (this.type === \"multi\") {\n\t\t\t\treturn of(this.placeholder);\n\t\t\t} else {\n\t\t\t\treturn of(selected[0].content);\n\t\t\t}\n\t\t} else if (selected.length && this.isRenderString()) {\n\t\t\treturn of(this.displayValue as string);\n\t\t}\n\t\treturn of(this.placeholder);\n\t}\n\n\tisRenderString(): boolean {\n\t\treturn typeof this.displayValue === \"string\";\n\t}\n\n\tgetRenderTemplateContext() {\n\t\tif (!this.view) {\n\t\t\treturn;\n\t\t}\n\t\tlet selected = this.view.getSelected();\n\t\tif (this.type === \"multi\") {\n\t\t\treturn { items: selected };\n\t\t} else if (selected && selected.length > 0) {\n\t\t\treturn { item: selected[0] }; // this is to be compatible with the dropdown-list template\n\t\t} else {\n\t\t\treturn {};\n\t\t}\n\t}\n\n\tgetSelectedCount(): number {\n\t\tif (this.view.getSelected()) {\n\t\t\treturn this.view.getSelected().length;\n\t\t}\n\t}\n\n\tclearSelected() {\n\t\tif (this.disabled || this.getSelectedCount() === 0) {\n\t\t\treturn;\n\t\t}\n\t\tfor (const item of this.view.getListItems()) {\n\t\t\titem.selected = false;\n\t\t}\n\t\tthis.selected.emit([]);\n\t\tthis.propagateChange([]);\n\t}\n\n\t/**\n\t * Returns `true` if there is a value selected.\n\t */\n\tvalueSelected(): boolean {\n\t\tif (this.view.getSelected()) { return true; }\n\t\treturn false;\n\t}\n\n\t_noop() { }\n\t/**\n\t * Handles clicks outside of the `Dropdown`.\n\t */\n\t_outsideClick(event) {\n\t\tif (!this.elementRef.nativeElement.contains(event.target) &&\n\t\t\t// if we're appendToBody the list isn't within the _elementRef,\n\t\t\t// so we've got to check if our target is possibly in there too.\n\t\t\t!this.dropdownMenu.nativeElement.contains(event.target)) {\n\t\t\tthis.closeMenu();\n\t\t}\n\t}\n\t_outsideKey(event) {\n\t\tif (!this.menuIsClosed && event.key === \"Tab\" && this.dropdownMenu.nativeElement.contains(event.target as Node)) {\n\t\t\tthis.closeMenu();\n\t\t}\n\t}\n\t/**\n\t * Handles keyboard events so users are controlling the `Dropdown` instead of unintentionally controlling outside elements.\n\t */\n\t_keyboardNav(event: KeyboardEvent) {\n\t\tif (event.key === \"Escape\" && !this.menuIsClosed) {\n\t\t\tevent.stopImmediatePropagation(); // don't unintentionally close modal if inside of it\n\t\t}\n\t\tif (event.key === \"Escape\") {\n\t\t\tevent.preventDefault();\n\t\t\tthis.closeMenu();\n\t\t\tthis.dropdownButton.nativeElement.focus();\n\t\t} else if (!this.menuIsClosed && event.key === \"Tab\") {\n\t\t\t// this way focus will start on the next focusable item from the dropdown\n\t\t\t// not the top of the body!\n\t\t\tthis.dropdownButton.nativeElement.focus();\n\t\t\tthis.dropdownButton.nativeElement.dispatchEvent(new KeyboardEvent(\"keydown\", { bubbles: true, cancelable: true, key: \"Tab\" }));\n\t\t\tthis.closeMenu();\n\t\t}\n\t}\n\n\t/**\n\t * Creates the `Dropdown` list appending it to the dropdown parent object instead of the body.\n\t */\n\t_appendToDropdown() {\n\t\tthis.dropdownService.appendToDropdown(this.elementRef.nativeElement);\n\t\tthis.dropdownMenu.nativeElement.removeEventListener(\"keydown\", this.keyboardNav, true);\n\t}\n\n\t/**\n\t * Creates the `Dropdown` list as an element that is appended to the DOM body.\n\t */\n\t_appendToBody() {\n\t\tconst lightClass = this.theme === \"light\" ? \" cds--list-box--light\" : \"\";\n\t\tconst expandedClass = !this.menuIsClosed ? \" cds--list-box--expanded\" : \"\";\n\t\tthis.dropdownService.appendToBody(\n\t\t\tthis.dropdownButton.nativeElement,\n\t\t\tthis.dropdownMenu.nativeElement,\n\t\t\t`${this.elementRef.nativeElement.className}${lightClass}${expandedClass}`);\n\t\tthis.dropdownMenu.nativeElement.addEventListener(\"keydown\", this.keyboardNav, true);\n\t}\n\n\t/**\n\t * Detects whether or not the `Dropdown` list is visible within all scrollable parents.\n\t * This can be overridden by passing in a value to the `dropUp` input.\n\t */\n\t_shouldDropUp() {\n\t\t// check if dropdownMenu exists first.\n\t\tconst menu = this.dropdownMenu && this.dropdownMenu.nativeElement.querySelector(\".cds--list-box__menu\");\n\t\t// check if menu exists first.\n\t\tconst menuRect = menu && menu.getBoundingClientRect();\n\t\tif (menu && menuRect) {\n\t\t\tconst scrollableParents = getScrollableParents(menu);\n\t\t\treturn scrollableParents.reduce((shouldDropUp: boolean, parent: HTMLElement) => {\n\t\t\t\tconst parentRect = parent.getBoundingClientRect();\n\t\t\t\tconst isBelowParent = !(menuRect.bottom <= parentRect.bottom);\n\t\t\t\treturn shouldDropUp || isBelowParent;\n\t\t\t}, false);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Expands the dropdown menu in the view.\n\t */\n\topenMenu() {\n\t\t// prevents the dropdown from opening when list of items is empty\n\t\tif (this.view.getListItems().length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._dropUp = false;\n\t\tthis.menuIsClosed = false;\n\n\t\t// move the dropdown list to the body if we're not appending inline\n\t\t// and position it relative to the dropdown wrapper\n\t\tif (!this.appendInline) {\n\t\t\tconst target = this.dropdownButton.nativeElement;\n\t\t\tconst parent = this.elementRef.nativeElement;\n\t\t\tthis.visibilitySubscription = this.elementService\n\t\t\t\t.visibility(target, parent)\n\t\t\t\t.subscribe(value => {\n\t\t\t\t\tif (!value.visible) {\n\t\t\t\t\t\tthis.closeMenu();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\tthis._appendToBody();\n\t\t}\n\n\t\t// set the dropdown menu to drop up if it's near the bottom of the screen\n\t\t// setTimeout lets us measure after it's visible in the DOM\n\t\tsetTimeout(() => {\n\t\t\tif (this.dropUp === null || this.dropUp === undefined) {\n\t\t\t\tthis._dropUp = this._shouldDropUp();\n\t\t\t}\n\t\t}, 0);\n\n\t\t// we bind noop to document.body.firstElementChild to allow safari to fire events\n\t\t// from document. Then we unbind everything later to keep things light.\n\t\tdocument.body.firstElementChild.addEventListener(\"click\", this.noop, true);\n\t\tdocument.body.firstElementChild.addEventListener(\"keydown\", this.noop, true);\n\t\tdocument.addEventListener(\"click\", this.outsideClick, true);\n\t\tdocument.addEventListener(\"keydown\", this.outsideKey, true);\n\t\tsetTimeout(() => this.view.initFocus(), 0);\n\t}\n\n\t/**\n\t * Collapsing the dropdown menu and removing unnecessary `EventListeners`.\n\t */\n\tcloseMenu() {\n\t\t// return early if the menu is already closed\n\t\tif (this.menuIsClosed) { return; }\n\t\tthis.menuIsClosed = true;\n\t\tthis.checkForReorder();\n\t\tthis.onClose.emit();\n\t\tthis.close.emit();\n\n\t\t// focus the trigger button when we close ...\n\t\tthis.dropdownButton.nativeElement.focus();\n\n\t\t// remove the conditional once this api is settled and part of abstract-dropdown-view.class\n\t\tif (this.view[\"disableScroll\"]) {\n\t\t\tthis.view[\"disableScroll\"]();\n\t\t}\n\n\t\t// move the list back in the component on close\n\t\tif (!this.appendInline) {\n\t\t\tthis.visibilitySubscription.unsubscribe();\n\t\t\tthis._appendToDropdown();\n\t\t}\n\t\tdocument.body.firstElementChild.removeEventListener(\"click\", this.noop, true);\n\t\tdocument.body.firstElementChild.removeEventListener(\"keydown\", this.noop, true);\n\t\tdocument.removeEventListener(\"click\", this.outsideClick, true);\n\t\tdocument.removeEventListener(\"keydown\", this.outsideKey, true);\n\t}\n\n\t/**\n\t * Controls toggling menu states between open/expanded and closed/collapsed.\n\t */\n\ttoggleMenu() {\n\t\tif (this.menuIsClosed) {\n\t\t\tthis.openMenu();\n\t\t} else {\n\t\t\tthis.closeMenu();\n\t\t}\n\t}\n\n\tpublic isTemplate(value) {\n\t\treturn value instanceof TemplateRef;\n\t}\n\n\t/**\n\t * Controls when it's needed to apply the selection feedback\n\t */\n\tprotected checkForReorder() {\n\t\tconst topAfterReopen = this.menuIsClosed && this.selectionFeedback === \"top-after-reopen\";\n\t\tif ((this.type === \"multi\") && (topAfterReopen || this.selectionFeedback === \"top\")) {\n\t\t\tthis.view.reorderSelected();\n\t\t}\n\t}\n}\n","import { Observable, fromEvent } from \"rxjs\";\nimport { debounceTime, map, filter } from \"rxjs/operators\";\n\n/**\n * returns an observable bound to keydown events that\n * filters to a single element where the first letter of\n * it's textContent matches the key pressed\n *\n * @param target element to watch\n * @param elements elements to search\n */\nexport function watchFocusJump(target: HTMLElement, elements): Observable<HTMLElement> {\n\treturn fromEvent(target, \"keydown\")\n\t\t.pipe(\n\t\t\tdebounceTime(150),\n\t\t\tmap((ev: KeyboardEvent) => {\n\t\t\t\tlet el = elements.find((itemEl) =>\n\t\t\t\t\titemEl.textContent.trim().toLowerCase().startsWith(ev.key));\n\t\t\t\tif (el) { return el; }\n\t\t\t}),\n\t\t\tfilter(el => !!el)\n\t\t);\n}\n\n/** bundle of functions to aid in manipulating tree structures */\nexport const treetools = {\n\t/** finds an item in a set of items and returns the item and path to the item as an array */\n\tfind: function(items, itemToFind, path = []) {\n\t\tlet found;\n\t\tfor (let i of items) {\n\t\t\tif (i === itemToFind) {\n\t\t\t\tpath.push(i);\n\t\t\t\tfound = i;\n\t\t\t}\n\t\t\tif (i.items && !found) {\n\t\t\t\tpath.push(i);\n\t\t\t\tfound = this.find(i.items, itemToFind, path).found;\n\t\t\t\tif (!found) { path = []; }\n\t\t\t}\n\t\t}\n\t\treturn {found, path};\n\t}\n};\n","import {\n\tComponent,\n\tInput,\n\tOutput,\n\tOnDestroy,\n\tEventEmitter,\n\tTemplateRef,\n\tAfterViewInit,\n\tViewChild,\n\tElementRef,\n\tViewChildren,\n\tQueryList,\n\tApplicationRef\n} from \"@angular/core\";\nimport { Observable, isObservable, Subscription, of } from \"rxjs\";\nimport { first } from \"rxjs/operators\";\n\nimport { I18n } from \"carbon-components-angular/i18n\";\nimport { AbstractDropdownView } from \"../abstract-dropdown-view.class\";\nimport { ListItem } from \"../list-item.interface\";\nimport { watchFocusJump } from \"../dropdowntools\";\nimport { ScrollCustomEvent } from \"./scroll-custom-event.interface\";\n\n\n/**\n * ```html\n * <cds-dropdown-list [items]=\"listItems\"></cds-dropdown-list>\n * ```\n * ```typescript\n * listItems = [\n * \t{\n * \t\tcontent: \"item one\",\n * \t\tselected: false\n * \t},\n * \t{\n * \t\tcontent: \"item two\",\n * \t\tselected: false,\n * \t},\n * \t{\n * \t\tcontent: \"item three\",\n * \t\tselected: false\n * \t},\n * \t{\n * \t\tcontent: \"item four\",\n * \t\tselected: false\n * \t}\n * ];\n * ```\n */\n@Component({\n\tselector: \"cds-dropdown-list, ibm-dropdown-list\",\n\ttemplate: `\n\t\t<ul\n\t\t\t#list\n\t\t\t[id]=\"listId\"\n\t\t\trole=\"listbox\"\n\t\t\tclass=\"cds--list-box__menu cds--multi-select\"\n\t\t\t(scroll)=\"emitScroll($event)\"\n\t\t\t(keydown)=\"navigateList($event)\"\n\t\t\ttabindex=\"-1\"\n\t\t\t[attr.aria-label]=\"ariaLabel\"\n\t\t\t[attr.aria-activedescendant]=\"highlightedItem\">\n\t\t\t<li\n\t\t\t\trole=\"option\"\n\t\t\t\t*ngFor=\"let item of displayItems; let i = index\"\n\t\t\t\t(click)=\"doClick($event, item)\"\n\t\t\t\tclass=\"cds--list-box__menu-item\"\n\t\t\t\t[attr.aria-selected]=\"item.selected\"\n\t\t\t\t[id]=\"getItemId(i)\"\n\t\t\t\t[attr.title]=\" showTitles ? item.content : null\"\n\t\t\t\t[attr.disabled]=\"item.disabled ? true : null\"\n\t\t\t\t[ngClass]=\"{\n\t\t\t\t\t'cds--list-box__menu-item--active': item.selected,\n\t\t\t\t\t'cds--list-box__menu-item--highlighted': highlightedItem === getItemId(i)\n\t\t\t\t}\">\n\t\t\t\t<div\n\t\t\t\t\t#listItem\n\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\tclass=\"cds--list-box__menu-item__option\">\n\t\t\t\t\t<div\n\t\t\t\t\t\t*ngIf=\"!listTpl && type === 'multi'\"\n\t\t\t\t\t\tclass=\"cds--form-item cds--checkbox-wrapper\">\n\t\t\t\t\t\t<label\n\t\t\t\t\t\t\t[attr.data-contained-checkbox-state]=\"item.selected\"\n\t\t\t\t\t\t\tclass=\"cds--checkbox-label\">\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\tclass=\"cds--checkbox\"\n\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t[checked]=\"item.selected\"\n\t\t\t\t\t\t\t\t[disabled]=\"item.disabled\"\n\t\t\t\t\t\t\t\ttabindex=\"-1\">\n\t\t\t\t\t\t\t<span class=\"cds--checkbox-appearance\"></span>\n\t\t\t\t\t\t\t<span class=\"cds--checkbox-label-text\">{{item.content}}</span>\n\t\t\t\t\t\t</label>\n\t\t\t\t\t</div>\n\t\t\t\t\t<ng-container *ngIf=\"!listTpl && type === 'single'\">{{item.content}}</ng-container>\n\t\t\t\t\t<svg\n\t\t\t\t\t\t*ngIf=\"!listTpl && type === 'single'\"\n\t\t\t\t\t\tcdsIcon=\"checkmark\"\n\t\t\t\t\t\tsize=\"16\"\n\t\t\t\t\t\tclass=\"cds--list-box__menu-item__selected-icon\">\n\t\t\t\t\t</svg>\n\t\t\t\t\t<ng-template\n\t\t\t\t\t\t*ngIf=\"listTpl\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{item: item}\"\n\t\t\t\t\t\t[ngTemplateOutlet]=\"listTpl\">\n\t\t\t\t\t</ng-template>\n\t\t\t\t</div>\n\t\t\t</li>\n\t\t</ul>`,\n\tproviders: [\n\t\t{\n\t\t\tprovide: AbstractDropdownView,\n\t\t\tuseExisting: DropdownList\n\t\t}\n\t]\n})\nexport class DropdownList implements AbstractDropdownView, AfterViewInit, OnDestroy {\n\tstatic listCount = 0;\n\t@Input() ariaLabel = this.i18n.get().DROPDOWN_LIST.LABEL;\n\t/**\n\t * The list items belonging to the `DropdownList`.\n\t */\n\t@Input() set items(value: Array<ListItem> | Observable<Array<ListItem>>) {\n\t\tif (isObservable(value)) {\n\t\t\tif (this._itemsSubscription) {\n\t\t\t\tthis._itemsSubscription.unsubscribe();\n\t\t\t}\n\t\t\tthis._itemsReady = new Observable<boolean>((observer) => {\n\t\t\t\tthis._itemsSubscription = value.subscribe(v => {\n\t\t\t\t\tthis.updateList(v);\n\t\t\t\t\tobserver.next(true);\n\t\t\t\t\tobserver.complete();\n\t\t\t\t});\n\t\t\t});\n\t\t\tthis.onItemsReady(null);\n\t\t} else {\n\t\t\tthis.updateList(value);\n\t\t}\n\t\tthis._originalItems = value;\n\t}\n\n\tget items(): Array<ListItem> | Observable<Array<ListItem>> {\n\t\treturn this._originalItems;\n\t}\n\t/**\n\t * Template to bind to items in the `DropdownList` (optional).\n\t */\n\t@Input() listTpl: string | TemplateRef<any> = null;\n\t/**\n\t * Event to emit selection of a list item within the `DropdownList`.\n\t */\n\t@Output() select: EventEmitter<{ item: ListItem, isUpdate?: boolean } | ListItem[]> = new EventEmitter();\n\t/**\n\t * Event to emit scroll event of a list within the `DropdownList`.\n\t */\n\t@Output() scroll: EventEmitter<ScrollCustomEvent> = new EventEmitter();\n\t/**\n\t * Event to suggest a blur on the view.\n\t * Emits _after_ the first/last item has been focused.\n\t * ex.\n\t * ArrowUp -> focus first item\n\t * ArrowUp -> emit event\n\t *\n\t * When this event fires focus should be placed on some element outside of the list - blurring the list as a result\n\t */\n\t@Output() blurIntent = new EventEmitter<\"top\" | \"bottom\">();\n\t/**\n\t * Maintains a reference to the view DOM element for the unordered list of items within the `DropdownList`.\n\t */\n\t@ViewChild(\"list\", { static: true }) list: ElementRef;\n\t/**\n\t * Defines whether or not the `DropdownList` supports selecting multiple items as opposed to single\n\t * item selection.\n\t */\n\t@Input() type: \"single\" | \"multi\" = \"single\";\n\n\t/**\n\t * Defines whether to show title attribute or not\n\t */\n\t@Input() showTitles = true;\n\n\t/**\n\t * Defines the rendering size of the `DropdownList` input component.\n\t */\n\tpublic size: \"sm\" | \"md\" | \"lg\" = \"md\";\n\tpublic listId = `listbox-${DropdownList.listCount++}`;\n\tpublic highlightedItem = null;\n\t/**\n\t * Holds the list of items that will be displayed in the `DropdownList`.\n\t * It differs from the the complete set of items when filtering is used (but\n\t * it is always a subset of the total items in `DropdownList`).\n\t */\n\tpublic displayItems: Array<ListItem> = [];\n\t/**\n\t * Maintains the index for the selected item within the `DropdownList`.\n\t */\n\tprotected index = -1;\n\t/**\n\t * An array holding the HTML list elements in the view.\n\t */\n\t@ViewChildren(\"listItem\") protected listElementList: QueryList<ElementRef>;\n\t/**\n\t * Observable bound to keydown events to control filtering.\n\t */\n\tprotected focusJump;\n\t/**\n\t * Tracks the current (if any) subscription to the items observable so we can clean up when the input is updated.\n\t */\n\tprotected _itemsSubscription: Subscription;\n\t/**\n\t * Used to retain the original items passed to the setter.\n\t */\n\tprotected _originalItems: Array<ListItem> | Observable<Array<ListItem>>;\n\t/**\n\t * Useful representation of the items, should be accessed via `getListItems`.\n\t */\n\tprotected _items: Array<ListItem> = [];\n\t/**\n\t * Used to wait for items in case they are passed through an observable.\n\t */\n\tprotected _itemsReady: Observable<boolean>;\n\n\t/**\n\t * Creates an instance of `DropdownList`.\n\t */\n\tconstructor(public elementRef: ElementRef, protected i18n: I18n, protected appRef: ApplicationRef) {}\n\n\t/**\n\t * Retrieves array of list items and index of the selected item after view has rendered.\n\t * Additionally, any Observables for the `DropdownList` are initialized.\n\t */\n\tngAfterViewInit() {\n\t\tthis.index = this.getListItems().findIndex(item => item.selected);\n\t\tthis.setupFocusObservable();\n\t\tsetTimeout(() => {\n\t\t\tthis.doEmitSelect(true);\n\t\t});\n\t}\n\n\t/**\n\t * Removes any Observables on destruction of the component.\n\t */\n\tngOnDestroy() {\n\t\tif (this.focusJump) {\n\t\t\tthis.focusJump.unsubscribe();\n\t\t}\n\t\tif (this._itemsSubscription) {\n\t\t\tthis._itemsSubscription.unsubscribe();\n\t\t}\n\t}\n\n\tdoEmitSelect(isUpdate = true) {\n\t\tif (this.type === \"single\") {\n\t\t\tthis.select.emit({ item: this._items.find(item => item.selected), isUpdate: isUpdate });\n\t\t} else {\n\t\t\t// abuse javascripts object mutability until we can break the API and switch to\n\t\t\t// { items: [], isUpdate: true }\n\t\t\tconst selected = this.getSelected() || [];\n\t\t\tselected[\"isUpdate\"] = isUpdate;\n\t\t\tthis.select.emit(selected);\n\t\t}\n\t}\n\n\tgetItemId(index: number) {\n\t\treturn `${this.listId}-${index}`;\n\t}\n\n\t/**\n\t * Updates the displayed list of items and then retrieves the most current properties for the `DropdownList` from the DOM.\n\t */\n\tupdateList(items) {\n\t\tthis._items = items.map(item => Object.assign({}, item));\n\t\tthis.displayItems = this._items;\n\t\tthis.updateIndex();\n\t\tthis.setupFocusObservable();\n\t\tthis.doEmitSelect();\n\t}\n\n\t/**\n\t * Filters the items being displayed in the DOM list.\n\t */\n\tfilterBy(query = \"\") {\n\t\tif (query) {\n\t\t\tthis.displayItems = this.getListItems().filter(item => item.content.toLowerCase().includes(query.toLowerCase()));\n\t\t\t// Reset index if items were found\n\t\t\t// Prevent selecting index in list that are undefined.\n\t\t\tif (this.displayItems) {\n\t\t\t\tthis.index = 0;\n\t\t\t}\n\t\t} else {\n\t\t\tthis.displayItems = this.getListItems();\n\t\t}\n\n\t\tthis.updateIndex();\n\t}\n\n\t/**\n\t * Initializes (or re-initializes) the Observable that handles switching focus to an element based on\n\t * key input matching the first letter of the item in the list.\n\t */\n\tsetupFocusObservable() {\n\t\tif (!this.list) { return; }\n\t\tif (this.focusJump) {\n\t\t\tthis.focusJump.unsubscribe();\n\t\t}\n\t\tlet elList = Array.from(this.list.nativeElement.querySelectorAll(\"li\"));\n\t\tthis.focusJump = watchFocusJump(this.list.nativeElement, elList)\n\t\t\t.subscribe(el => {\n\t\t\t\tel.focus();\n\t\t\t});\n\t}\n\n\t/**\n\t * Returns the `ListItem` that is subsequent to the selected item in the `DropdownList`.\n\t */\n\tgetNextItem(): ListItem {\n\t\tif (this.index < this.displayItems.length - 1) {\n\t\t\tthis.index++;\n\t\t}\n\t\treturn this.displayItems[this.index];\n\t}\n\n\t/**\n\t * Returns `true` if the selected item is not the last item in the `DropdownList`.\n\t */\n\thasNextElement(): boolean {\n\t\treturn this.index < this.displayItems.length - 1 &&\n\t\t\t(!(this.index === this.displayItems.length - 2) || !this.displayItems[this.index + 1].disabled);\n\t}\n\n\t/**\n\t * Returns the `HTMLElement` for the item that is subsequent to the selected item.\n\t */\n\tgetNextElement(): HTMLElement {\n\t\t// Only return native elements if they are rendered\n\t\tconst elemList = this.listElementList ? this.listElementList.toArray() : [];\n\t\tif (!elemList.length) {\n\t\t\treturn null;\n\t\t}\n\n\t\t/**\n\t\t * Start checking from next index\n\t\t * Continue looping through the list until a non disabeled element is found or\n\t\t * end of list is reached\n\t\t */\n\t\tfor (let i = this.index + 1; i < elemList.length; i++) {\n\t\t\t// If the values in the list are not disabled\n\t\t\tif (!this.displayItems[i].disabled) {\n\t\t\t\tthis.index = i;\n\t\t\t\treturn elemList[i].nativeElement;\n\t\t\t}\n\t\t}\n\n\t\treturn elemList[this.index]?.nativeElement;\n\t}\n\n\t/**\n\t * Returns the `ListItem` that precedes the selected item within `DropdownList`.\n\t */\n\tgetPrevItem(): ListItem {\n\t\tif (this.index > 0) {\n\t\t\tthis.index--;\n\t\t}\n\t\treturn this.displayItems[this.index];\n\t}\n\n\t/**\n\t * Returns `true` if the selected item is not the first in the list.\n\t */\n\thasPrevElement(): boolean {\n\t\treturn this.index > 0 && (!(this.index === 1) || !this.displayItems[0].disabled);\n\t}\n\n\t/**\n\t * Returns the `HTMLElement` for the item that precedes the selected item.\n\t */\n\tgetPrevElement(): HTMLElement {\n\t\t// Only return native elements if they are rendered\n\t\tconst elemList = this.listElementList ? this.listElementList.toArray() : [];\n\t\tif (!elemList.length) {\n\t\t\treturn null;\n\t\t}\n\n\t\t/**\n\t\t * Start checking from next index\n\t\t * Continue looping through the list until a non disabeled element is found or\n\t\t * end of list is reached\n\t\t */\n\t\tfor (let i = this.index - 1; i < this.index && i >= 0; i--) {\n\t\t\t// If the values in the list are not disabled\n\t\t\tif (!this.displayItems[i].disabled) {\n\t\t\t\tthis.index = i;\n\t\t\t\treturn elemList[i].nativeElement;\n\t\t\t}\n\t\t}\n\n\t\treturn elemList[this.index].nativeElement;\n\t}\n\n\t/**\n\t * Returns the `ListItem` that is selected within `DropdownList`.\n\t */\n\tgetCurrentItem(): ListItem {\n\t\tif (this.index < 0) {\n\t\t\treturn this.displayItems[0];\n\t\t}\n\t\treturn this.displayItems[this.index];\n\t}\n\n\t/**\n\t * Returns the `HTMLElement` for the item that is selected within the `DropdownList`.\n\t */\n\tgetCurrentElement(): HTMLElement {\n\t\tif (this.index < 0) {\n\t\t\treturn this.listElementList.first.nativeElement;\n\t\t}\n\t\treturn this.listElementList.toArray()[this.index].nativeElement;\n\t}\n\n\t/**\n\t * Returns the items as an Array\n\t */\n\tgetListItems(): Array<ListItem> {\n\t\treturn this._items;\n\t}\n\n\t/**\n\t * Returns a list containing the selected item(s) in the `DropdownList`.\n\t */\n\tgetSelected(): ListItem[] {\n\t\tlet selected = this.getListItems().filter(item => item.selected);\n\t\tif (selected.length === 0) {\n\t\t\treturn [];\n\t\t}\n\t\treturn selected;\n\t}\n\n\t/**\n\t * Transforms array input list of items to the correct state by updating the selected item(s).\n\t */\n\tpropagateSelected(value: Array<ListItem>): void {\n\t\t// if we get a non-array, log out an error (since it is one)\n\t\tif (!Array.isArray(value)) {\n\t\t\tconsole.error(`${this.constructor.name}.propagateSelected expects an Array<ListItem>, got ${JSON.stringify(value)}`);\n\t\t}\n\t\tthis.onItemsReady(() => {\n\t\t\t// loop through the list items and update the `selected` state for matching items in `value`\n\t\t\tfor (let oldItem of this.getListItems()) {\n\t\t\t\t// copy the item\n\t\t\t\tlet tempOldItem: string | ListItem = Object.assign({}, oldItem);\n\t\t\t\t// deleted selected because it's what we _want_ to change\n\t\t\t\tdelete tempOldItem.selected;\n\t\t\t\t// stringify for compare\n\t\t\t\ttempOldItem = JSON.stringify(tempOldItem);\n\t\t\t\tfor (let newItem of value) {\n\t\t\t\t\t// copy the item\n\t\t\t\t\tlet tempNewItem: string | ListItem = Object.assign({}, newItem);\n\t\t\t\t\t// deleted selected because it's what we _want_ to change\n\t\t\t\t\tdelete tempNewItem.selected;\n\t\t\t\t\t// stringify for compare\n\t\t\t\t\ttempNewItem = JSON.stringify(tempNewItem);\n\t\t\t\t\t// do the compare\n\t\t\t\t\tif (tempOldItem.includes(tempNewItem)) {\n\t\t\t\t\t\toldItem.selected = newItem.selected;\n\t\t\t\t\t\t// if we've found a matching item, we can stop looping\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toldItem.selected = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Initializes focus in the list, effectively a wrapper for `getCurrentElement().focus()`\n\t */\n\tinitFocus() {\n\t\tif (this.index < 0) {\n\t\t\tthis.updateIndex();\n\t\t}\n\n\t\tthis.list.nativeElement.focus();\n\t\tsetTimeout(() => {\n\t\t\tthis.highlightedItem = this.getItemId(this.index);\n\t\t});\n\t}\n\n\tupdateIndex() {\n\t\t// initialize index on the first selected item or\n\t\t// on the next non disabled item if no items are selected\n\t\t// in case, if all items are disabled, the index value will remain same\n\t\tconst selected = this.getSelected();\n\t\tif (selected.length) {\n\t\t\tthis.index = this.displayItems.indexOf(selected[0]);\n\t\t} else if (this.hasNextElement()) {\n\t\t\tthis.getNextElement();\n\t\t}\n\t}\n\n\t/**\n\t * Manages the keyboard accessibility for navigation and selection within a `DropdownList`.\n\t */\n\tnavigateList(event: KeyboardEvent) {\n\t\tif (event.key === \"Enter\" || event.key === \" \") {\n\t\t\tif (this.listElementList.some(option => option.nativeElement === event.target)) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t\tif (event.key === \"Enter\") {\n\t\t\t\tthis.doClick(event, this.getCurrentItem());\n\t\t\t}\n\t\t} else if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n\t\t\tevent.preventDefault();\n\t\t\tif (event.key === \"ArrowDown\") {\n\t\t\t\tif (this.hasNextElement()) {\n\t\t\t\t\tthis.getNextElement()?.scrollIntoView({ block: \"end\" });\n\t\t\t\t} else {\n\t\t\t\t\tthis.blurIntent.emit(\"bottom\");\n\t\t\t\t}\n\t\t\t} else if (event.key === \"ArrowUp\") {\n\t\t\t\tif (this.hasPrevElement()) {\n\t\t\t\t\tthis.getPrevElement().scrollIntoView({ block: \"nearest\" });\n\t\t\t\t} else {\n\t\t\t\t\tthis.blurIntent.emit(\"top\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.highlightedItem = this.getItemId(this.index);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Emits the selected item or items after a mouse click event has occurred.\n\t */\n\tdoClick(event, item) {\n\t\tevent.preventDefault();\n\t\tif (item && !item.disabled) {\n\t\t\tthis.list.nativeElement.focus();\n\t\t\tif (this.type === \"single\") {\n\t\t\t\titem.selected = true;\n\t\t\t\t// reset the selection\n\t\t\t\tfor (let otherItem of this.getListItems()) {\n\t\t\t\t\tif (item !== otherItem) { otherItem.selected = false; }\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\titem.selected = !item.selected;\n\t\t\t}\n\t\t\tthis.index = this.displayItems.indexOf(item);\n\t\t\tthis.highlightedItem = this.getItemId(this.index);\n\t\t\tthis.doEmitSelect(false);\n\t\t\tthis.appRef.tick();\n\t\t}\n\t}\n\n\tonItemFocus(index) {\n\t\tconst element = this.listElementList.toArray()[index].nativeElement;\n\t\telement.classList.add(\"cds--list-box__menu-item--highlighted\");\n\t\telement.tabIndex = 0;\n\t}\n\n\tonItemBlur(index) {\n\t\tconst element = this.listElementList.toArray()[index].nativeElement;\n\t\telement.classList.remove(\"cds--list-box__menu-item--highlighted\");\n\t\telement.tabIndex = -1;\n\t}\n\n\t/**\n\t * Emits the scroll event of the options list\n\t */\n\temitScroll(event) {\n\t\tconst atTop: boolean = event.srcElement.scrollTop === 0;\n\t\tconst atBottom: boolean = event.srcElement.scrollHeight - event.srcElement.scrollTop === event.srcElement.clientHeight;\n\t\tconst customScrollEvent = { atTop, atBottom, event };\n\t\tthis.scroll.emit(customScrollEvent);\n\t}\n\n\t/**\n\t * Subscribe the function passed to an internal observable that will resolve once the items are ready\n\t */\n\tonItemsReady(subcription: () => void): void {\n\t\t// this subscription will auto unsubscribe because of the `first()` pipe\n\t\t(this._itemsReady || of(true)).pipe(first()).subscribe(subcription);\n\t}\n\n\treorderSelected(moveFocus = true): void {\n\t\tthis.displayItems = [...this.getSelected(), ...this.getListItems().filter(item => !item.selected)];\n\t\tif (moveFocus) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.updateIndex();\n\t\t\t\tthis.highlightedItem = this.getItemId(this.index);\n\t\t\t});\n\t\t}\n\t}\n}\n","import {\n\tInput,\n\tDirective,\n\tElementRef,\n\tHostListener,\n\tOnChanges,\n\tSimpleChanges,\n\tAfterViewInit\n} from \"@angular/core\";\n\n@Directive({\n\tselector: \"[cdsScrollableList], [ibmScrollableList]\",\n\texportAs: \"scrollable-list\"\n})\nexport class ScrollableList implements OnChanges, AfterViewInit {\n\t/**\n\t * Optional target list to scroll\n\t */\n\t@Input() nScrollableList: string = null;\n\t/**\n\t * Enables or disables scrolling for the whole directive\n\t */\n\t@Input() scrollEnabled = true;\n\t/**\n\t * Sets the target used for hover scrolling up\n\t */\n\t@Input() scrollUpTarget: HTMLElement;\n\t/**\n\t * Sets the target used for hover scrolling down\n\t */\n\t@Input() scrollDownTarget: HTMLElement;\n\t/**\n\t * How many lines to scroll by each time `wheel` fires\n\t * Defaults to 10 - based on testing this isn't too fast or slow on any platform\n\t */\n\t@Input() scrollBy = 10;\n\n\t// keeps track of the setInterval for hover scrolling\n\tprotected hoverScrollInterval;\n\t// tracks the last touch event\n\tprotected lastTouch;\n\tprotected canScrollUp = false;\n\tprotected canScrollDown = false;\n\tprotected list = this.elementRef.nativeElement;\n\n\tconstructor(protected elementRef: ElementRef) {}\n\n\tngOnChanges(changes: SimpleChanges) {\n\t\tif (changes.scrollEnabled) {\n\t\t\tif (changes.scrollEnabled.currentValue) {\n\t\t\t\tthis.list.style.overflow = \"hidden\";\n\t\t\t\tthis.scrollUpTarget.style.display = \"flex\";\n\t\t\t\tthis.scrollDownTarget.style.display = \"flex\";\n\t\t\t\tthis.canScrollUp = true;\n\t\t\t\tthis.canScrollDown = true;\n\t\t\t\tthis.updateScrollHeight();\n\t\t\t\tthis.checkScrollArrows();\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.checkScrollArrows();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.scrollUpTarget.style.display = \"none\";\n\t\t\t\tthis.scrollDownTarget.style.display = \"none\";\n\t\t\t\tthis.canScrollUp = false;\n\t\t\t\tthis.canScrollDown = false;\n\t\t\t\tthis.list.style.height = null;\n\t\t\t\tthis.list.style.overflow = null;\n\t\t\t\tclearInterval(this.hoverScrollInterval);\n\t\t\t}\n\t\t}\n\t}\n\n\tngAfterViewInit() {\n\t\tif (this.nScrollableList) {\n\t\t\tthis.list = this.elementRef.nativeElement.querySelector(this.nScrollableList);\n\t\t}\n\t\tthis.scrollUpTarget.addEventListener(\"mouseover\", () => this.onHoverUp(true));\n\t\tthis.scrollUpTarget.addEventListener(\"mouseout\", () => this.onHoverUp(false));\n\t\tthis.scrollDownTarget.addEventListener(\"mouseover\", () => this.onHoverDown(true));\n\t\tthis.scrollDownTarget.addEventListener(\"mouseout\", () => this.onHoverDown(false));\n\t}\n\n\tpublic updateScrollHeight() {\n\t\tif (this.scrollEnabled) {\n\t\t\tconst container = this.elementRef.nativeElement.parentElement;\n\t\t\tconst containerRect = container.getBoundingClientRect();\n\t\t\tconst innerHeightDiff = this.list.getBoundingClientRect().top - containerRect.top;\n\t\t\tconst outerHeightDiff = containerRect.height - (containerRect.bottom - window.innerHeight);\n\t\t\t// 40 gives us some padding between the bottom of the list,\n\t\t\t// the bottom of the window, and the scroll down button\n\t\t\tconst height = outerHeightDiff - innerHeightDiff - 40;\n\t\t\tthis.list.style.height = `${height}px`;\n\t\t}\n\t}\n\n\tprotected checkScrollArrows() {\n\t\tconst scrollUpHeight = this.scrollUpTarget.offsetHeight;\n\t\tconst scrollDownHeight = this.scrollDownTarget.offsetHeight;\n\t\tif (this.list.scrollTop === 0) {\n\t\t\tif (this.canScrollUp) {\n\t\t\t\tthis.list.style.height = `${parseInt(this.list.style.height, 10) + scrollUpHeight}px`;\n\t\t\t}\n\t\t\tthis.scrollUpTarget.style.display = \"none\";\n\t\t\tthis.canScrollUp = false;\n\t\t} else if (this.list.scrollTop === this.list.scrollTopMax) {\n\t\t\tif (this.canScrollDown) {\n\t\t\t\tthis.list.style.height = `${parseInt(this.list.style.height, 10) + scrollDownHeight}px`;\n\t\t\t}\n\t\t\tthis.scrollDownTarget.style.display = \"none\";\n\t\t\tthis.canScrollDown = false;\n\t\t} else {\n\t\t\tif (!this.canScrollUp) {\n\t\t\t\tthis.list.style.height = `${parseInt(this.list.style.height, 10) - scrollUpHeight}px`;\n\t\t\t}\n\t\t\tif (!this.canScrollDown) {\n\t\t\t\tthis.list.style.height = `${parseInt(this.list.style.height, 10) - scrollDownHeight}px`;\n\t\t\t}\n\t\t\tthis.scrollUpTarget.style.display = \"flex\";\n\t\t\tthis.scrollDownTarget.style.display = \"flex\";\n\t\t\tthis.canScrollUp = true;\n\t\t\tthis.canScrollDown = true;\n\t\t}\n\t}\n\n\t@HostListener(\"wheel\", [\"$event\"])\n\tprotected onWheel(event) {\n\t\tif (event.deltaY < 0) {\n\t\t\tthis.list.scrollTop -= this.scrollBy;\n\t\t} else {\n\t\t\tthis.list.scrollTop += this.scrollBy;\n\t\t}\n\t\t// only prevent the parent/window from scrolling if we can scroll\n\t\tif (!(this.list.scrollTop === this.list.scrollTopMax || this.list.scrollTop === 0)) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\tthis.checkScrollArrows();\n\t}\n\n\t@HostListener(\"touchstart\", [\"$event\"])\n\tprotected onTouchStart(event) {\n\t\tif (event.touches[0]) {\n\t\t\tthis.lastTouch = event.touches[0].clientY;\n\t\t}\n\t}\n\n\t@HostListener(\"touchmove\", [\"$event\"])\n\tprotected onTouchMove(event) {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tif (event.touches[0]) {\n\t\t\tconst touch = event.touches[0];\n\t\t\tthis.list.scrollTop += this.lastTouch - touch.clientY;\n\t\t\tthis.lastTouch = touch.clientY;\n\t\t\tthis.checkScrollArrows();\n\t\t}\n\t}\n\n\tprotected hoverScrollBy(hovering, amount) {\n\t\tif (hovering) {\n\t\t\tthis.hoverScrollInterval = setInterval(() => {\n\t\t\t\tthis.list.scrollTop += amount;\n\t\t\t\tthis.checkScrollArrows();\n\t\t\t}, 1);\n\t\t} else {\n\t\t\tclearInterval(this.hoverScrollInterval);\n\t\t}\n\t}\n\n\tprotected onHoverUp(hovering) {\n\t\t// how many px/lines to scroll by on hover\n\t\t// 3 is just a random number that felt good\n\t\t// 1 and 2 are too slow, 4 works but it might be a tad fast\n\t\tthis.hoverScrollBy(hovering, -3);\n\t}\n\n\tprotected onHoverDown(hovering) {\n\t\tthis.hoverScrollBy(hovering, 3);\n\t}\n\n\t@HostListener(\"keydown\", [\"$event\"])\n\tprotected onKeyDown(event) {\n\t\tif (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n\t\t\tthis.checkScrollArrows();\n\t\t}\n\t}\n}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { FormsModule } from \"@angular/forms\";\n\nimport { Dropdown } from \"./dropdown.component\";\nimport { DropdownList } from \"./list/dropdown-list.component\";\nimport { AbstractDropdownView } from \"./abstract-dropdown-view.class\";\n\nimport { ScrollableList } from \"./scrollable-list.directive\";\nimport { I18nModule } from \"carbon-components-angular/i18n\";\nimport { PlaceholderModule } from \"carbon-components-angular/placeholder\";\nimport { DropdownService } from \"./dropdown.service\";\nimport { UtilsModule } from \"carbon-components-angular/utils\";\nimport { IconModule } from \"carbon-components-angular/icon\";\n\n@NgModule({\n\tdeclarations: [\n\t\tDropdown,\n\t\tDropdownList,\n\t\tScrollableList,\n\t\tAbstractDropdownView\n\t],\n\texports: [\n\t\tDropdown,\n\t\tDropdownList,\n\t\tScrollableList,\n\t\tAbstractDropdownView\n\t],\n\timports: [\n\t\tCommonModule,\n\t\tFormsModule,\n\t\tI18nModule,\n\t\tPlaceholderModule,\n\t\tUtilsModule,\n\t\tIconModule\n\t],\n\tproviders: [ DropdownService ]\n})\nexport class DropdownModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.DropdownService","i3","i2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"carbon-components-angular-dropdown.mjs","sources":["../../src/dropdown/abstract-dropdown-view.class.ts","../../src/dropdown/dropdown.service.ts","../../src/dropdown/dropdown.component.ts","../../src/dropdown/dropdowntools.ts","../../src/dropdown/list/dropdown-list.component.ts","../../src/dropdown/scrollable-list.directive.ts","../../src/dropdown/dropdown.module.ts","../../src/dropdown/carbon-components-angular-dropdown.ts"],"sourcesContent":["import {\n\tInput,\n\tOutput,\n\tEventEmitter,\n\tDirective\n} from \"@angular/core\";\nimport { ListItem } from \"./list-item.interface\";\nimport { Observable } from \"rxjs\";\n\n\n/**\n * A component that intends to be used within `Dropdown` must provide an implementation that extends this base class.\n * It also must provide the base class in the `@Component` meta-data.\n * ex: `providers: [{provide: AbstractDropdownView, useExisting: forwardRef(() => MyDropdownView)}]`\n */\n@Directive({\n\tselector: \"[cdsAbstractDropdownView], [ibmAbstractDropdownView]\"\n})\nexport class AbstractDropdownView {\n\t/**\n\t * The items to be displayed in the list within the `AbstractDropDownView`.\n\t */\n\t@Input() set items(value: Array<ListItem> | Observable<Array<ListItem>>) { }\n\n\tget items(): Array<ListItem> | Observable<Array<ListItem>> { return; }\n\t/**\n\t * Emits selection events to controlling classes\n\t */\n\t@Output() select: EventEmitter<{item: ListItem } | ListItem[]>;\n\t/**\n\t * Event to suggest a blur on the view.\n\t * Emits _after_ the first/last item has been focused.\n\t * ex.\n\t * ArrowUp -> focus first item\n\t * ArrowUp -> emit event\n\t *\n\t * It's recommended that the implementing view include a specific type union of possible blurs\n\t * ex. `@Output() blurIntent = new EventEmitter<\"top\" | \"bottom\">();`\n\t */\n\t@Output() blurIntent: EventEmitter<any>;\n\t/**\n\t * Specifies whether or not the `DropdownList` supports selecting multiple items as opposed to single\n\t * item selection.\n\t */\n\tpublic type: \"single\" | \"multi\" = \"single\";\n\t/**\n\t * Specifies the render size of the items within the `AbstractDropdownView`.\n\t */\n\tpublic size: \"sm\" | \"md\" | \"lg\" = \"md\";\n\tpublic listId?: string;\n\t/**\n\t * Returns the `ListItem` that is subsequent to the selected item in the `DropdownList`.\n\t */\n\tgetNextItem(): ListItem { return; }\n\t/**\n\t * Returns a boolean if the currently selected item is preceded by another\n\t */\n\thasNextElement(): boolean { return; }\n\t/**\n\t * Returns the `HTMLElement` for the item that is subsequent to the selected item.\n\t */\n\tgetNextElement(): HTMLElement { return; }\n\t/**\n\t * Returns the `ListItem` that precedes the selected item within `DropdownList`.\n\t */\n\tgetPrevItem(): ListItem { return; }\n\t/**\n\t * Returns a boolean if the currently selected item is followed by another\n\t */\n\thasPrevElement(): boolean { return; }\n\t/**\n\t * Returns the `HTMLElement` for the item that precedes the selected item.\n\t */\n\tgetPrevElement(): HTMLElement { return; }\n\t/**\n\t * Returns the selected leaf level item(s) within the `DropdownList`.\n\t */\n\tgetSelected(): ListItem[] { return; }\n\t/**\n\t * Returns the `ListItem` that is selected within `DropdownList`.\n\t */\n\tgetCurrentItem(): ListItem { return; }\n\t/**\n\t * Returns the `HTMLElement` for the item that is selected within the `DropdownList`.\n\t */\n\tgetCurrentElement(): HTMLElement { return; }\n\t/**\n\t * Guaranteed to return the current items as an Array.\n\t */\n\tgetListItems(): Array<ListItem> { return; }\n\t/**\n\t * Transforms array input list of items to the correct state by updating the selected item(s).\n\t */\n\tpropagateSelected(value: Array<ListItem>): void {}\n\t/**\n\t *\n\t * @param value value to filter the list by\n\t */\n\tfilterBy(value: string): void {}\n\t/**\n\t * Initializes focus in the list\n\t * In most cases this just calls `getCurrentElement().focus()`\n\t */\n\tinitFocus(): void {}\n\t/**\n\t * Subscribe the function passed to an internal observable that will resolve once the items are ready\n\t */\n\tonItemsReady(subcription: () => void): void {}\n\t/**\n\t * Reorder selected items bringing them to the top of the list\n\t */\n\treorderSelected(moveFocus?: boolean): void {}\n}\n","import { Injectable, ElementRef, OnDestroy } from \"@angular/core\";\nimport { PlaceholderService } from \"carbon-components-angular/placeholder\";\nimport { Subscription } from \"rxjs\";\nimport { position } from \"@carbon/utils-position\";\nimport { AnimationFrameService } from \"carbon-components-angular/utils\";\nimport { closestAttr } from \"carbon-components-angular/utils\";\n\nconst defaultOffset = { top: 0, left: 0 };\n\n@Injectable()\nexport class DropdownService implements OnDestroy {\n\tpublic set offset(value: { top?: number, left?: number }) {\n\t\tthis._offset = Object.assign({}, defaultOffset, value);\n\t}\n\n\tpublic get offset() {\n\t\treturn this._offset;\n\t}\n\t/**\n\t * reference to the body appended menu\n\t */\n\tprotected menuInstance: HTMLElement;\n\n\t/**\n\t * Maintains an Event Observable Subscription for the global requestAnimationFrame.\n\t * requestAnimationFrame is tracked only if the `Dropdown` is appended to the body otherwise we don't need it\n\t */\n\tprotected animationFrameSubscription = new Subscription();\n\n\tprotected _offset = defaultOffset;\n\n\tconstructor(\n\t\tprotected placeholderService: PlaceholderService,\n\t\tprotected animationFrameService: AnimationFrameService\n\t) {}\n\n\t/**\n\t * Appends the menu to the body, or a `cds-placeholder` (if defined)\n\t *\n\t * @param parentRef container to position relative to\n\t * @param menuRef menu to be appended to body\n\t * @param classList any extra classes we should wrap the container with\n\t */\n\tappendToBody(parentRef: HTMLElement, menuRef: HTMLElement, classList): HTMLElement {\n\t\t// build the dropdown list container\n\t\tmenuRef.style.display = \"block\";\n\t\tconst dropdownWrapper = document.createElement(\"div\");\n\t\tdropdownWrapper.className = `dropdown ${classList}`;\n\t\tdropdownWrapper.style.width = parentRef.offsetWidth + \"px\";\n\t\tdropdownWrapper.style.position = \"absolute\";\n\t\tdropdownWrapper.appendChild(menuRef);\n\n\t\t// append it to the placeholder\n\t\tif (this.placeholderService.hasPlaceholderRef()) {\n\t\t\tthis.placeholderService.appendElement(dropdownWrapper);\n\t\t\t// or append it directly to the body\n\t\t} else {\n\t\t\tdocument.body.appendChild(dropdownWrapper);\n\t\t}\n\n\t\tthis.menuInstance = dropdownWrapper;\n\n\t\tthis.animationFrameSubscription = this.animationFrameService.tick.subscribe(() => {\n\t\t\tthis.positionDropdown(parentRef, dropdownWrapper);\n\t\t});\n\n\t\t// run one position in sync, so we're less likely to have the view \"jump\" as we focus\n\t\tthis.positionDropdown(parentRef, dropdownWrapper);\n\n\t\treturn dropdownWrapper;\n\t}\n\n\t/**\n\t * Reattach the dropdown menu to the parent container\n\t * @param hostRef container to append to\n\t */\n\tappendToDropdown(hostRef: HTMLElement): HTMLElement {\n\t\t// if the instance is already removed don't try and remove it again\n\t\tif (!this.menuInstance) { return; }\n\t\tconst instance = this.menuInstance;\n\t\tconst menu = instance.firstElementChild as HTMLElement;\n\t\t// clean up the instance\n\t\tthis.menuInstance = null;\n\t\tmenu.style.display = \"none\";\n\t\thostRef.appendChild(menu);\n\t\tthis.animationFrameSubscription.unsubscribe();\n\t\tif (this.placeholderService.hasPlaceholderRef() && this.placeholderService.hasElement(instance)) {\n\t\t\tthis.placeholderService.removeElement(instance);\n\t\t} else if (document.body.contains(instance)) {\n\t\t\tdocument.body.removeChild(instance);\n\t\t}\n\t\treturn instance;\n\t}\n\n\t/**\n\t * position an open dropdown relative to the given parentRef\n\t */\n\tupdatePosition(parentRef) {\n\t\tthis.positionDropdown(parentRef, this.menuInstance);\n\t}\n\n\tngOnDestroy() {\n\t\tthis.animationFrameSubscription.unsubscribe();\n\t}\n\n\tprotected positionDropdown(parentRef, menuRef) {\n\t\tif (!menuRef) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet leftOffset = 0;\n\n\t\tconst boxMenu = menuRef.querySelector(\".cds--list-box__menu\");\n\n\t\tif (boxMenu) {\n\t\t\t// If the parentRef and boxMenu are in a different left position relative to the\n\t\t\t// window, the the boxMenu position has already been flipped and a check needs to be done\n\t\t\t// to see if it needs to stay flipped.\n\t\t\tif (parentRef.getBoundingClientRect().left !== boxMenu.getBoundingClientRect().left) {\n\t\t\t\t// The getBoundingClientRect().right of the boxMenu if it were hypothetically flipped\n\t\t\t\t// back into the original position before the flip.\n\t\t\t\tconst testBoxMenuRightEdgePos =\n\t\t\t\t\tparentRef.getBoundingClientRect().left - boxMenu.getBoundingClientRect().left + boxMenu.getBoundingClientRect().right;\n\n\t\t\t\tif (testBoxMenuRightEdgePos > (window.innerWidth || document.documentElement.clientWidth)) {\n\t\t\t\t\tleftOffset = parentRef.offsetWidth - boxMenu.offsetWidth;\n\t\t\t\t}\n\t\t\t// If it has not already been flipped, check if it is necessary to flip, ie. if the\n\t\t\t// boxMenu is outside of the right viewPort.\n\t\t\t} else if (boxMenu.getBoundingClientRect().right > (window.innerWidth || document.documentElement.clientWidth)) {\n\t\t\t\tleftOffset = parentRef.offsetWidth - boxMenu.offsetWidth;\n\t\t\t}\n\t\t}\n\n\t\t// If cds-placeholder has a parent with a position(relative|fixed|absolute) account for the parent offset\n\t\tconst closestMenuWithPos = closestAttr(\"position\", [\"relative\", \"fixed\", \"absolute\"], menuRef.parentElement);\n\t\tconst topPos = closestMenuWithPos ? closestMenuWithPos.getBoundingClientRect().top * -1 : this.offset.top;\n\t\tconst leftPos = closestMenuWithPos ? closestMenuWithPos.getBoundingClientRect().left * -1 : this.offset.left + leftOffset;\n\n\t\tlet pos = position.findAbsolute(parentRef, menuRef, \"bottom\");\n\t\tpos = position.addOffset(pos, topPos, leftPos);\n\n\t\tposition.setElement(menuRef, pos);\n\t}\n}\n","import {\n\tComponent,\n\tInput,\n\tOutput,\n\tEventEmitter,\n\tElementRef,\n\tContentChild,\n\tOnInit,\n\tViewChild,\n\tAfterContentInit,\n\tHostListener,\n\tOnDestroy,\n\tHostBinding,\n\tTemplateRef,\n\tAfterViewInit\n} from \"@angular/core\";\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from \"@angular/forms\";\n\n// Observable import is required here so typescript can compile correctly\nimport {\n\tObservable,\n\tof,\n\tSubscription\n} from \"rxjs\";\n\nimport { AbstractDropdownView } from \"./abstract-dropdown-view.class\";\nimport { I18n } from \"carbon-components-angular/i18n\";\nimport { ListItem } from \"./list-item.interface\";\nimport { DropdownService } from \"./dropdown.service\";\nimport { ElementService, getScrollableParents } from \"carbon-components-angular/utils\";\nimport { hasScrollableParents } from \"carbon-components-angular/utils\";\n\n/**\n * Drop-down lists enable users to select one or more items from a list.\n *\n * #### Opening behavior/List DOM placement\n * By default the dropdown will try to figure out the best placement for the dropdown list.\n *\n * If it's not contained within any scrolling elements, it will open inline, if it _is_\n * contained within a scrolling container it will try to open in the body, or an `cds-placeholder`.\n *\n * To control this behavior you can use the `appendInline` input:\n * - `[appendInline]=\"null\"` is the default (auto detection)\n * - `[appendInline]=\"false\"` will always append to the body/`cds-placeholder`\n * - `[appendInline]=\"true\"` will always append inline (next to the dropdown button)\n *\n * Get started with importing the module:\n *\n * ```typescript\n * import { DropdownModule } from 'carbon-components-angular';\n * ```\n *\n * [See demo](../../?path=/story/components-dropdown--basic)\n */\n@Component({\n\tselector: \"cds-dropdown, ibm-dropdown\",\n\ttemplate: `\n\t<label\n\t\t*ngIf=\"label && !skeleton\"\n\t\t[for]=\"id\"\n\t\tclass=\"cds--label\"\n\t\t[ngClass]=\"{\n\t\t\t'cds--label--disabled': disabled,\n\t\t\t'cds--visually-hidden': hideLabel\n\t\t}\">\n\t\t<ng-container *ngIf=\"!isTemplate(label)\">{{label}}</ng-container>\n\t\t<ng-template *ngIf=\"isTemplate(label)\" [ngTemplateOutlet]=\"label\"></ng-template>\n\t</label>\n\t<div\n\t\tclass=\"cds--list-box\"\n\t\t[ngClass]=\"{\n\t\t\t'cds--dropdown': type !== 'multi',\n\t\t\t'cds--multiselect': type === 'multi',\n\t\t\t'cds--multi-select--selected': type === 'multi' && getSelectedCount() > 0,\n\t\t\t'cds--dropdown--light': theme === 'light',\n\t\t\t'cds--list-box--light': theme === 'light',\n\t\t\t'cds--list-box--inline': inline,\n\t\t\t'cds--skeleton': skeleton,\n\t\t\t'cds--dropdown--disabled cds--list-box--disabled': disabled,\n\t\t\t'cds--dropdown--invalid': invalid,\n\t\t\t'cds--dropdown--warning cds--list-box--warning': warn,\n\t\t\t'cds--dropdown--sm cds--list-box--sm': size === 'sm',\n\t\t\t'cds--dropdown--md cds--list-box--md': size === 'md',\n\t\t\t'cds--dropdown--lg cds--list-box--lg': size === 'lg',\n\t\t\t'cds--list-box--expanded': !menuIsClosed\n\t\t}\">\n\t\t<button\n\t\t\t#dropdownButton\n\t\t\t[id]=\"id\"\n\t\t\ttype=\"button\"\n\t\t\tclass=\"cds--list-box__field\"\n\t\t\t[ngClass]=\"{'a': !menuIsClosed}\"\n\t\t\t[attr.aria-expanded]=\"!menuIsClosed\"\n\t\t\t[attr.aria-disabled]=\"disabled\"\n\t\t\taria-haspopup=\"listbox\"\n\t\t\t(click)=\"disabled ? $event.stopPropagation() : toggleMenu()\"\n\t\t\t(blur)=\"onBlur()\"\n\t\t\t[attr.disabled]=\"disabled ? true : null\">\n\t\t\t<div\n\t\t\t\t(click)=\"clearSelected()\"\n\t\t\t\t(keydown.enter)=\"clearSelected()\"\n\t\t\t\t*ngIf=\"type === 'multi' && getSelectedCount() > 0\"\n\t\t\t\tclass=\"cds--list-box__selection cds--tag--filter cds--list-box__selection--multi\"\n\t\t\t\ttabindex=\"0\"\n\t\t\t\t[title]=\"clearText\">\n\t\t\t\t{{getSelectedCount()}}\n\t\t\t\t<svg\n\t\t\t\t\tfocusable=\"false\"\n\t\t\t\t\tpreserveAspectRatio=\"xMidYMid meet\"\n\t\t\t\t\tstyle=\"will-change: transform;\"\n\t\t\t\t\trole=\"img\"\n\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\twidth=\"16\"\n\t\t\t\t\theight=\"16\"\n\t\t\t\t\tviewBox=\"0 0 16 16\"\n\t\t\t\t\taria-hidden=\"true\">\n\t\t\t\t\t<path d=\"M12 4.7l-.7-.7L8 7.3 4.7 4l-.7.7L7.3 8 4 11.3l.7.7L8 8.7l3.3 3.3.7-.7L8.7 8z\"></path>\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t\t<span *ngIf=\"isRenderString()\" class=\"cds--list-box__label\">{{getDisplayStringValue() | async}}</span>\n\t\t\t<ng-template\n\t\t\t\t*ngIf=\"!isRenderString()\"\n\t\t\t\t[ngTemplateOutletContext]=\"getRenderTemplateContext()\"\n\t\t\t\t[ngTemplateOutlet]=\"displayValue\">\n\t\t\t</ng-template>\n\t\t\t<svg\n\t\t\t\t*ngIf=\"invalid\"\n\t\t\t\tclass=\"cds--dropdown__invalid-icon\"\n\t\t\t\tcdsIcon=\"warning--filled\"\n\t\t\t\tsize=\"16\">\n\t\t\t</svg>\n\t\t\t<svg\n\t\t\t\t*ngIf=\"!invalid && warn\"\n\t\t\t\tcdsIcon=\"warning--alt--filled\"\n\t\t\t\tsize=\"16\"\n\t\t\t\tclass=\"cds--list-box__invalid-icon cds--list-box__invalid-icon--warning\">\n\t\t\t</svg>\n\t\t\t<span class=\"cds--list-box__menu-icon\">\n\t\t\t\t<svg\n\t\t\t\t\t*ngIf=\"!skeleton\"\n\t\t\t\t\tcdsIcon=\"chevron--down\"\n\t\t\t\t\tsize=\"16\"\n\t\t\t\t\t[attr.aria-label]=\"menuButtonLabel\"\n\t\t\t\t\t[ngClass]=\"{'cds--list-box__menu-icon--open': !menuIsClosed }\">\n\t\t\t\t</svg>\n\t\t\t</span>\n\t\t</button>\n\t\t<div\n\t\t\t#dropdownMenu\n\t\t\t[ngClass]=\"{\n\t\t\t\t'cds--list-box--up': this.dropUp !== null && this.dropUp !== undefined ? dropUp : _dropUp\n\t\t\t}\">\n\t\t\t<ng-content *ngIf=\"!menuIsClosed\"></ng-content>\n\t\t</div>\n\t</div>\n\t<div\n\t\t*ngIf=\"helperText && !invalid && !warn && !skeleton\"\n\t\tclass=\"cds--form__helper-text\"\n\t\t[ngClass]=\"{\n\t\t\t'cds--form__helper-text--disabled': disabled\n\t\t}\">\n\t\t<ng-container *ngIf=\"!isTemplate(helperText)\">{{helperText}}</ng-container>\n\t\t<ng-template *ngIf=\"isTemplate(helperText)\" [ngTemplateOutlet]=\"helperText\"></ng-template>\n\t</div>\n\t<div *ngIf=\"invalid\" class=\"cds--form-requirement\">\n\t\t<ng-container *ngIf=\"!isTemplate(invalidText)\">{{ invalidText }}</ng-container>\n\t\t<ng-template *ngIf=\"isTemplate(invalidText)\" [ngTemplateOutlet]=\"invalidText\"></ng-template>\n\t</div>\n\t<div *ngIf=\"!invalid && warn\" class=\"cds--form-requirement\">\n\t\t<ng-container *ngIf=\"!isTemplate(warnText)\">{{warnText}}</ng-container>\n\t\t<ng-template *ngIf=\"isTemplate(warnText)\" [ngTemplateOutlet]=\"warnText\"></ng-template>\n\t</div>\n\t`,\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: Dropdown,\n\t\t\tmulti: true\n\t\t}\n\t]\n})\nexport class Dropdown implements OnInit, AfterContentInit, AfterViewInit, OnDestroy, ControlValueAccessor {\n\tstatic dropdownCount = 0;\n\t@Input() id = `dropdown-${Dropdown.dropdownCount++}`;\n\t/**\n\t * Label for the dropdown.\n\t */\n\t@Input() label: string | TemplateRef<any>;\n\t/**\n\t * Hide label while keeping it accessible for screen readers\n\t */\n\t@Input() hideLabel = false;\n\t/**\n\t * Sets the optional helper text.\n\t */\n\t@Input() helperText: string | TemplateRef<any>;\n\t/**\n\t * Value displayed if no item is selected.\n\t */\n\t@Input() placeholder = \"\";\n\t/**\n\t * The selected value from the `Dropdown`. Can be a string or template.\n\t */\n\t@Input() displayValue: string | TemplateRef<any> = \"\";\n\t/**\n\t * Sets the optional clear button tooltip text.\n\t */\n\t@Input() clearText: string = this.i18n.get().DROPDOWN.CLEAR;\n\t/**\n\t * Size to render the dropdown field.\n\t */\n\t@Input() size: \"sm\" | \"md\" | \"lg\" = \"md\";\n\t/**\n\t * Defines whether or not the `Dropdown` supports selecting multiple items as opposed to single\n\t * item selection.\n\t */\n\t@Input() type: \"single\" | \"multi\" = \"single\";\n\t/**\n\t * @deprecated since v5 - Use `cdsLayer` directive instead\n\t * `light` or `dark` dropdown theme\n\t */\n\t@Input() theme: \"light\" | \"dark\" = \"dark\";\n\t/**\n\t * Set to `true` to disable the dropdown.\n\t */\n\t@Input() disabled = false;\n\t/**\n\t * Set to `true` for a loading dropdown.\n\t */\n\t@Input() skeleton = false;\n\t/**\n\t * Set to `true` for an inline dropdown.\n\t */\n\t@Input() inline = false;\n\t/**\n\t * Set to `true` for a dropdown without arrow key activation.\n\t */\n\t@Input() disableArrowKeys = false;\n\t/**\n\t * Set to `true` for invalid state.\n\t */\n\t@Input() invalid = false;\n\t/**\n\t * Value displayed if dropdown is in invalid state.\n\t */\n\t@Input() invalidText: string | TemplateRef<any>;\n\t/**\n\t * Set to `true` to show a warning (contents set by warningText)\n\t */\n\t@Input() warn = false;\n\t/**\n\t * Sets the warning text\n\t */\n\t@Input() warnText: string | TemplateRef<any>;\n\t/**\n\t * set to `true` to place the dropdown view inline with the component\n\t */\n\t@Input() appendInline: boolean = null;\n\t/**\n\t * Query string for the element that contains the `Dropdown`.\n\t * Used to trigger closing the dropdown if it scrolls outside of the viewport of the `scrollableContainer`.\n\t */\n\t@Input() scrollableContainer: string;\n\t/**\n\t * Specifies the property to be used as the return value to `ngModel`\n\t */\n\t@Input() itemValueKey: string;\n\t/**\n\t * Specify feedback (mode) of the selection.\n\t * `top`: selected item jumps to top\n\t * `fixed`: selected item stays at it's position\n\t * `top-after-reopen`: selected item jump to top after reopen dropdown\n\t */\n\t@Input() selectionFeedback: \"top\" | \"fixed\" | \"top-after-reopen\" = \"top-after-reopen\";\n\t/**\n\t * Accessible label for the button that opens the dropdown list.\n\t * Defaults to the `DROPDOWN.OPEN` value from the i18n service.\n\t */\n\t@Input() menuButtonLabel = this.i18n.get().DROPDOWN.OPEN;\n\t/**\n\t * Provides the label for the \"# selected\" text.\n\t * Defaults to the `DROPDOWN.SELECTED` value from the i18n service.\n\t */\n\t@Input() selectedLabel = this.i18n.get().DROPDOWN.SELECTED;\n\t/**\n\t * Overrides the automatic dropUp.\n\t */\n\t@Input() dropUp: boolean;\n\t/**\n\t * Emits selection events.\n\t */\n\t@Output() selected: EventEmitter<Object> = new EventEmitter<Object>();\n\t/**\n\t * Emits event notifying to other classes that the `Dropdown` has been closed (collapsed).\n\t */\n\t@Output() onClose: EventEmitter<any> = new EventEmitter<any>();\n\t/**\n\t * Emits event notifying to other classes that the `Dropdown` has been closed (collapsed).\n\t */\n\t@Output() close: EventEmitter<any> = new EventEmitter<any>();\n\n\t/**\n\t * Maintains a reference to the `AbstractDropdownView` object within the content DOM.\n\t */\n\t@ContentChild(AbstractDropdownView, { static: true }) view: AbstractDropdownView;\n\t/**\n\t * Maintains a reference to the view DOM element of the `Dropdown` button.\n\t */\n\t@ViewChild(\"dropdownButton\", { static: true }) dropdownButton;\n\t/**\n\t * ViewChid of the dropdown view.\n\t */\n\t@ViewChild(\"dropdownMenu\", { static: true }) dropdownMenu;\n\n\t@HostBinding(\"class.cds--dropdown__wrapper\") hostClass = true;\n\t/**\n\t * Set to `true` if the dropdown is closed (not expanded).\n\t */\n\tmenuIsClosed = true;\n\n\t/**\n\t * controls whether the `drop-up` class is applied\n\t */\n\t_dropUp = false;\n\n\t// .bind creates a new function, so we declare the methods below\n\t// but .bind them up here\n\tnoop = this._noop.bind(this);\n\toutsideClick = this._outsideClick.bind(this);\n\toutsideKey = this._outsideKey.bind(this);\n\tkeyboardNav = this._keyboardNav.bind(this);\n\n\tprotected visibilitySubscription = new Subscription();\n\n\tprotected onTouchedCallback: () => void = this._noop;\n\n\t// primarily used to capture and propagate input to `writeValue` before the content is available\n\tprivate _writtenValue: any = [];\n\tprotected get writtenValue() {\n\t\treturn this._writtenValue;\n\t}\n\tprotected set writtenValue(val: any[]) {\n\t\tif (val && val.length === 0) {\n\t\t\tthis.clearSelected();\n\t\t}\n\t\tthis._writtenValue = val;\n\t}\n\n\t/**\n\t * Creates an instance of Dropdown.\n\t */\n\tconstructor(\n\t\tprotected elementRef: ElementRef,\n\t\tprotected i18n: I18n,\n\t\tprotected dropdownService: DropdownService,\n\t\tprotected elementService: ElementService) {}\n\n\t/**\n\t * Updates the `type` property in the `@ContentChild`.\n\t * The `type` property specifies whether the `Dropdown` allows single selection or multi selection.\n\t */\n\tngOnInit() {\n\t\tif (this.view) {\n\t\t\tthis.view.type = this.type;\n\t\t}\n\t}\n\n\t/**\n\t * Initializes classes and subscribes to events for single or multi selection.\n\t */\n\tngAfterContentInit() {\n\t\tif (!this.view) {\n\t\t\treturn;\n\t\t}\n\t\tif ((this.writtenValue && this.writtenValue.length) || typeof this.writtenValue === \"number\") {\n\t\t\tthis.writeValue(this.writtenValue);\n\t\t}\n\t\tthis.view.type = this.type;\n\t\tthis.view.size = this.size;\n\n\t\t// function to check if the event is organic (isUpdate === false) or programmatic\n\t\tconst isUpdate = event => event && event.isUpdate;\n\n\t\tthis.view.select.subscribe(event => {\n\t\t\tif (this.type === \"single\" && !isUpdate(event) && !Array.isArray(event)) {\n\t\t\t\tthis.closeMenu();\n\t\t\t\tif (event.item && event.item.selected) {\n\t\t\t\t\tif (this.itemValueKey) {\n\t\t\t\t\t\tthis.propagateChange(event.item[this.itemValueKey]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.propagateChange(event.item);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.propagateChange(null);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.type === \"multi\" && !isUpdate(event)) {\n\t\t\t\t// if we have a `value` selector and selected items map them appropriately\n\t\t\t\tif (this.itemValueKey && this.view.getSelected()) {\n\t\t\t\t\tconst values = this.view.getSelected().map(item => item[this.itemValueKey]);\n\t\t\t\t\tthis.propagateChange(values);\n\t\t\t\t\t// otherwise just pass up the values from `getSelected`\n\t\t\t\t} else {\n\t\t\t\t\tthis.propagateChange(this.view.getSelected());\n\t\t\t\t}\n\t\t\t}\n\t\t\t// only emit selected for \"organic\" selections\n\t\t\tif (!isUpdate(event)) {\n\t\t\t\tthis.checkForReorder();\n\t\t\t\tthis.selected.emit(event);\n\t\t\t}\n\t\t});\n\t}\n\n\tngAfterViewInit() {\n\t\t// if appendInline is default valued (null) we should:\n\t\t// 1. if there are scrollable parents (not including body) don't append inline\n\t\t// this should also cover the case where the dropdown is in a modal\n\t\t// (where we _do_ want to append to the placeholder)\n\t\tif (this.appendInline === null && hasScrollableParents(this.elementRef.nativeElement)) {\n\t\t\tthis.appendInline = false;\n\t\t\t// 2. otherwise we should append inline\n\t\t} else if (this.appendInline === null) {\n\t\t\tthis.appendInline = true;\n\t\t}\n\t\tthis.checkForReorder();\n\t}\n\n\t/**\n\t * Removing the `Dropdown` from the body if it is appended to the body.\n\t */\n\tngOnDestroy() {\n\t\tif (!this.appendInline) {\n\t\t\tthis._appendToDropdown();\n\t\t}\n\t}\n\n\t/**\n\t * Propagates the injected `value`.\n\t */\n\twriteValue(value: any) {\n\t\t// cache the written value so we can use it in `AfterContentInit`\n\t\tthis.writtenValue = value;\n\t\tthis.view.onItemsReady(() => {\n\t\t\t// propagate null/falsey as an array (deselect everything)\n\t\t\tif (!value) {\n\t\t\t\tthis.view.propagateSelected([value]);\n\t\t\t} else if (this.type === \"single\") {\n\t\t\t\tif (this.itemValueKey) {\n\t\t\t\t\t// clone the specified item and update its state\n\t\t\t\t\tconst newValue = Object.assign({}, this.view.getListItems().find(item => item[this.itemValueKey] === value));\n\t\t\t\t\tnewValue.selected = true;\n\t\t\t\t\tthis.view.propagateSelected([newValue]);\n\t\t\t\t} else {\n\t\t\t\t\t// pass the singular value as an array of ListItem\n\t\t\t\t\tthis.view.propagateSelected([value]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this.itemValueKey) {\n\t\t\t\t\t// clone the items and update their state based on the received value array\n\t\t\t\t\t// this way we don't lose any additional metadata that may be passed in via the `items` Input\n\t\t\t\t\tlet newValues = [];\n\t\t\t\t\tfor (const v of value) {\n\t\t\t\t\t\tfor (const item of this.view.getListItems()) {\n\t\t\t\t\t\t\tif (item[this.itemValueKey] === v) {\n\t\t\t\t\t\t\t\tnewValues.push(Object.assign({}, item, { selected: true }));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.view.propagateSelected(newValues);\n\t\t\t\t} else {\n\t\t\t\t\t// we can safely assume we're passing an array of `ListItem`s\n\t\t\t\t\tthis.view.propagateSelected(value);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.checkForReorder();\n\t\t});\n\t}\n\n\tonBlur() {\n\t\tthis.onTouchedCallback();\n\t}\n\n\tregisterOnChange(fn: any) {\n\t\tthis.propagateChange = fn;\n\t}\n\n\t/**\n\t * Registering the function injected to control the touch use of the `Dropdown`.\n\t */\n\tregisterOnTouched(fn: any) {\n\t\tthis.onTouchedCallback = fn;\n\t}\n\n\t/**\n\t * function passed in by `registerOnChange`\n\t */\n\tpropagateChange = (_: any) => { };\n\n\t/**\n\t * `ControlValueAccessor` method to programmatically disable the dropdown.\n\t *\n\t * ex: `this.formGroup.get(\"myDropdown\").disable();`\n\t *\n\t * @param isDisabled `true` to disable the input\n\t */\n\tsetDisabledState(isDisabled: boolean) {\n\t\tthis.disabled = isDisabled;\n\t}\n\n\t/**\n\t * Adds keyboard functionality for navigation, selection and closing of the `Dropdown`.\n\t */\n\t@HostListener(\"keydown\", [\"$event\"])\n\tonKeyDown(event: KeyboardEvent) {\n\t\tif ((event.key === \"Escape\") && !this.menuIsClosed) {\n\t\t\tevent.stopImmediatePropagation(); // don't unintentionally close other widgets that listen for Escape\n\t\t}\n\t\tif (event.key === \"Escape\") {\n\t\t\tevent.preventDefault();\n\t\t\tthis.closeMenu();\n\t\t\tthis.dropdownButton.nativeElement.focus();\n\t\t} else if (this.menuIsClosed && (event.key === \" \" || event.key === \"ArrowDown\" || event.key === \"ArrowUp\")) {\n\t\t\tif (this.disableArrowKeys && (event.key === \"ArrowDown\" || event.key === \"ArrowUp\")) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tthis.openMenu();\n\t\t}\n\n\t\tif (!this.menuIsClosed && event.key === \"Tab\" && this.dropdownMenu.nativeElement.contains(event.target as Node)) {\n\t\t\tthis.closeMenu();\n\t\t}\n\n\t\tif (!this.menuIsClosed && event.key === \"Tab\" && event.shiftKey) {\n\t\t\tthis.closeMenu();\n\t\t}\n\n\t\tif (this.type === \"multi\") { return; }\n\n\t\tif (this.menuIsClosed) {\n\t\t\tthis.closedDropdownNavigation(event);\n\t\t}\n\t}\n\n\tclosedDropdownNavigation(event) {\n\t\tif (event.key === \"ArrowDown\") {\n\t\t\tevent.preventDefault();\n\t\t\tthis.view.getCurrentItem().selected = false;\n\t\t\tlet item = this.view.getNextItem();\n\t\t\tif (item) { item.selected = true; }\n\t\t} else if (event.key === \"ArrowUp\") {\n\t\t\tevent.preventDefault();\n\t\t\tthis.view.getCurrentItem().selected = false;\n\t\t\tlet item = this.view.getPrevItem();\n\t\t\tif (item) { item.selected = true; }\n\t\t}\n\t}\n\n\t/**\n\t * Returns the display value if there is a selection and displayValue is set,\n\t * if there is just a selection the ListItem content property will be returned,\n\t * otherwise the placeholder will be returned.\n\t */\n\tgetDisplayStringValue(): Observable<string> {\n\t\tif (!this.view || this.skeleton) {\n\t\t\treturn;\n\t\t}\n\t\tlet selected = this.view.getSelected();\n\t\tif (selected.length && (!this.displayValue || !this.isRenderString())) {\n\t\t\tif (this.type === \"multi\") {\n\t\t\t\treturn of(this.placeholder);\n\t\t\t} else {\n\t\t\t\treturn of(selected[0].content);\n\t\t\t}\n\t\t} else if (selected.length && this.isRenderString()) {\n\t\t\treturn of(this.displayValue as string);\n\t\t}\n\t\treturn of(this.placeholder);\n\t}\n\n\tisRenderString(): boolean {\n\t\treturn typeof this.displayValue === \"string\";\n\t}\n\n\tgetRenderTemplateContext() {\n\t\tif (!this.view) {\n\t\t\treturn;\n\t\t}\n\t\tlet selected = this.view.getSelected();\n\t\tif (this.type === \"multi\") {\n\t\t\treturn { items: selected };\n\t\t} else if (selected && selected.length > 0) {\n\t\t\treturn { item: selected[0] }; // this is to be compatible with the dropdown-list template\n\t\t} else {\n\t\t\treturn {};\n\t\t}\n\t}\n\n\tgetSelectedCount(): number {\n\t\tif (this.view.getSelected()) {\n\t\t\treturn this.view.getSelected().length;\n\t\t}\n\t}\n\n\tclearSelected() {\n\t\tif (this.disabled || this.getSelectedCount() === 0) {\n\t\t\treturn;\n\t\t}\n\t\tfor (const item of this.view.getListItems()) {\n\t\t\titem.selected = false;\n\t\t}\n\t\tthis.selected.emit([]);\n\t\tthis.propagateChange([]);\n\t}\n\n\t/**\n\t * Returns `true` if there is a value selected.\n\t */\n\tvalueSelected(): boolean {\n\t\tif (this.view.getSelected()) { return true; }\n\t\treturn false;\n\t}\n\n\t_noop() { }\n\t/**\n\t * Handles clicks outside of the `Dropdown`.\n\t */\n\t_outsideClick(event) {\n\t\tif (!this.elementRef.nativeElement.contains(event.target) &&\n\t\t\t// if we're appendToBody the list isn't within the _elementRef,\n\t\t\t// so we've got to check if our target is possibly in there too.\n\t\t\t!this.dropdownMenu.nativeElement.contains(event.target)) {\n\t\t\tthis.closeMenu();\n\t\t}\n\t}\n\t_outsideKey(event) {\n\t\tif (!this.menuIsClosed && event.key === \"Tab\" && this.dropdownMenu.nativeElement.contains(event.target as Node)) {\n\t\t\tthis.closeMenu();\n\t\t}\n\t}\n\t/**\n\t * Handles keyboard events so users are controlling the `Dropdown` instead of unintentionally controlling outside elements.\n\t */\n\t_keyboardNav(event: KeyboardEvent) {\n\t\tif (event.key === \"Escape\" && !this.menuIsClosed) {\n\t\t\tevent.stopImmediatePropagation(); // don't unintentionally close modal if inside of it\n\t\t}\n\t\tif (event.key === \"Escape\") {\n\t\t\tevent.preventDefault();\n\t\t\tthis.closeMenu();\n\t\t\tthis.dropdownButton.nativeElement.focus();\n\t\t} else if (!this.menuIsClosed && event.key === \"Tab\") {\n\t\t\t// this way focus will start on the next focusable item from the dropdown\n\t\t\t// not the top of the body!\n\t\t\tthis.dropdownButton.nativeElement.focus();\n\t\t\tthis.dropdownButton.nativeElement.dispatchEvent(new KeyboardEvent(\"keydown\", { bubbles: true, cancelable: true, key: \"Tab\" }));\n\t\t\tthis.closeMenu();\n\t\t}\n\t}\n\n\t/**\n\t * Creates the `Dropdown` list appending it to the dropdown parent object instead of the body.\n\t */\n\t_appendToDropdown() {\n\t\tthis.dropdownService.appendToDropdown(this.elementRef.nativeElement);\n\t\tthis.dropdownMenu.nativeElement.removeEventListener(\"keydown\", this.keyboardNav, true);\n\t}\n\n\t/**\n\t * Creates the `Dropdown` list as an element that is appended to the DOM body.\n\t */\n\t_appendToBody() {\n\t\tconst lightClass = this.theme === \"light\" ? \" cds--list-box--light\" : \"\";\n\t\tconst expandedClass = !this.menuIsClosed ? \" cds--list-box--expanded\" : \"\";\n\t\tthis.dropdownService.appendToBody(\n\t\t\tthis.dropdownButton.nativeElement,\n\t\t\tthis.dropdownMenu.nativeElement,\n\t\t\t`${this.elementRef.nativeElement.className}${lightClass}${expandedClass}`);\n\t\tthis.dropdownMenu.nativeElement.addEventListener(\"keydown\", this.keyboardNav, true);\n\t}\n\n\t/**\n\t * Detects whether or not the `Dropdown` list is visible within all scrollable parents.\n\t * This can be overridden by passing in a value to the `dropUp` input.\n\t */\n\t_shouldDropUp() {\n\t\t// check if dropdownMenu exists first.\n\t\tconst menu = this.dropdownMenu && this.dropdownMenu.nativeElement.querySelector(\".cds--list-box__menu\");\n\t\t// check if menu exists first.\n\t\tconst menuRect = menu && menu.getBoundingClientRect();\n\t\tif (menu && menuRect) {\n\t\t\tconst scrollableParents = getScrollableParents(menu);\n\t\t\treturn scrollableParents.reduce((shouldDropUp: boolean, parent: HTMLElement) => {\n\t\t\t\tconst parentRect = parent.getBoundingClientRect();\n\t\t\t\tconst isBelowParent = !(menuRect.bottom <= parentRect.bottom);\n\t\t\t\treturn shouldDropUp || isBelowParent;\n\t\t\t}, false);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Expands the dropdown menu in the view.\n\t */\n\topenMenu() {\n\t\t// prevents the dropdown from opening when list of items is empty\n\t\tif (this.view.getListItems().length === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._dropUp = false;\n\t\tthis.menuIsClosed = false;\n\n\t\t// move the dropdown list to the body if we're not appending inline\n\t\t// and position it relative to the dropdown wrapper\n\t\tif (!this.appendInline) {\n\t\t\tconst target = this.dropdownButton.nativeElement;\n\t\t\tconst parent = this.elementRef.nativeElement;\n\t\t\tthis.visibilitySubscription = this.elementService\n\t\t\t\t.visibility(target, parent)\n\t\t\t\t.subscribe(value => {\n\t\t\t\t\tif (!value.visible) {\n\t\t\t\t\t\tthis.closeMenu();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\tthis._appendToBody();\n\t\t}\n\n\t\t// set the dropdown menu to drop up if it's near the bottom of the screen\n\t\t// setTimeout lets us measure after it's visible in the DOM\n\t\tsetTimeout(() => {\n\t\t\tif (this.dropUp === null || this.dropUp === undefined) {\n\t\t\t\tthis._dropUp = this._shouldDropUp();\n\t\t\t}\n\t\t}, 0);\n\n\t\t// we bind noop to document.body.firstElementChild to allow safari to fire events\n\t\t// from document. Then we unbind everything later to keep things light.\n\t\tdocument.body.firstElementChild.addEventListener(\"click\", this.noop, true);\n\t\tdocument.body.firstElementChild.addEventListener(\"keydown\", this.noop, true);\n\t\tdocument.addEventListener(\"click\", this.outsideClick, true);\n\t\tdocument.addEventListener(\"keydown\", this.outsideKey, true);\n\t\tsetTimeout(() => this.view.initFocus(), 0);\n\t}\n\n\t/**\n\t * Collapsing the dropdown menu and removing unnecessary `EventListeners`.\n\t */\n\tcloseMenu() {\n\t\t// return early if the menu is already closed\n\t\tif (this.menuIsClosed) { return; }\n\t\tthis.menuIsClosed = true;\n\t\tthis.checkForReorder();\n\t\tthis.onClose.emit();\n\t\tthis.close.emit();\n\n\t\t// focus the trigger button when we close ...\n\t\tthis.dropdownButton.nativeElement.focus();\n\n\t\t// remove the conditional once this api is settled and part of abstract-dropdown-view.class\n\t\tif (this.view[\"disableScroll\"]) {\n\t\t\tthis.view[\"disableScroll\"]();\n\t\t}\n\n\t\t// move the list back in the component on close\n\t\tif (!this.appendInline) {\n\t\t\tthis.visibilitySubscription.unsubscribe();\n\t\t\tthis._appendToDropdown();\n\t\t}\n\t\tdocument.body.firstElementChild.removeEventListener(\"click\", this.noop, true);\n\t\tdocument.body.firstElementChild.removeEventListener(\"keydown\", this.noop, true);\n\t\tdocument.removeEventListener(\"click\", this.outsideClick, true);\n\t\tdocument.removeEventListener(\"keydown\", this.outsideKey, true);\n\t}\n\n\t/**\n\t * Controls toggling menu states between open/expanded and closed/collapsed.\n\t */\n\ttoggleMenu() {\n\t\tif (this.menuIsClosed) {\n\t\t\tthis.openMenu();\n\t\t} else {\n\t\t\tthis.closeMenu();\n\t\t}\n\t}\n\n\tpublic isTemplate(value) {\n\t\treturn value instanceof TemplateRef;\n\t}\n\n\t/**\n\t * Controls when it's needed to apply the selection feedback\n\t */\n\tprotected checkForReorder() {\n\t\tconst topAfterReopen = this.menuIsClosed && this.selectionFeedback === \"top-after-reopen\";\n\t\tif ((this.type === \"multi\") && (topAfterReopen || this.selectionFeedback === \"top\")) {\n\t\t\tthis.view.reorderSelected();\n\t\t}\n\t}\n}\n","import { Observable, fromEvent } from \"rxjs\";\nimport { debounceTime, map, filter } from \"rxjs/operators\";\n\n/**\n * returns an observable bound to keydown events that\n * filters to a single element where the first letter of\n * it's textContent matches the key pressed\n *\n * @param target element to watch\n * @param elements elements to search\n */\nexport function watchFocusJump(target: HTMLElement, elements): Observable<HTMLElement> {\n\treturn fromEvent(target, \"keydown\")\n\t\t.pipe(\n\t\t\tdebounceTime(150),\n\t\t\tmap((ev: KeyboardEvent) => {\n\t\t\t\tlet el = elements.find((itemEl) =>\n\t\t\t\t\titemEl.textContent.trim().toLowerCase().startsWith(ev.key));\n\t\t\t\tif (el) { return el; }\n\t\t\t}),\n\t\t\tfilter(el => !!el)\n\t\t);\n}\n\n/** bundle of functions to aid in manipulating tree structures */\nexport const treetools = {\n\t/** finds an item in a set of items and returns the item and path to the item as an array */\n\tfind: function(items, itemToFind, path = []) {\n\t\tlet found;\n\t\tfor (let i of items) {\n\t\t\tif (i === itemToFind) {\n\t\t\t\tpath.push(i);\n\t\t\t\tfound = i;\n\t\t\t}\n\t\t\tif (i.items && !found) {\n\t\t\t\tpath.push(i);\n\t\t\t\tfound = this.find(i.items, itemToFind, path).found;\n\t\t\t\tif (!found) { path = []; }\n\t\t\t}\n\t\t}\n\t\treturn {found, path};\n\t}\n};\n","import {\n\tComponent,\n\tInput,\n\tOutput,\n\tOnDestroy,\n\tEventEmitter,\n\tTemplateRef,\n\tAfterViewInit,\n\tViewChild,\n\tElementRef,\n\tViewChildren,\n\tQueryList,\n\tApplicationRef\n} from \"@angular/core\";\nimport { Observable, isObservable, Subscription, of } from \"rxjs\";\nimport { first } from \"rxjs/operators\";\n\nimport { I18n } from \"carbon-components-angular/i18n\";\nimport { AbstractDropdownView } from \"../abstract-dropdown-view.class\";\nimport { ListItem } from \"../list-item.interface\";\nimport { watchFocusJump } from \"../dropdowntools\";\nimport { ScrollCustomEvent } from \"./scroll-custom-event.interface\";\n\n\n/**\n * ```html\n * <cds-dropdown-list [items]=\"listItems\"></cds-dropdown-list>\n * ```\n * ```typescript\n * listItems = [\n * \t{\n * \t\tcontent: \"item one\",\n * \t\tselected: false\n * \t},\n * \t{\n * \t\tcontent: \"item two\",\n * \t\tselected: false,\n * \t},\n * \t{\n * \t\tcontent: \"item three\",\n * \t\tselected: false\n * \t},\n * \t{\n * \t\tcontent: \"item four\",\n * \t\tselected: false\n * \t}\n * ];\n * ```\n */\n@Component({\n\tselector: \"cds-dropdown-list, ibm-dropdown-list\",\n\ttemplate: `\n\t\t<ul\n\t\t\t#list\n\t\t\t[id]=\"listId\"\n\t\t\trole=\"listbox\"\n\t\t\tclass=\"cds--list-box__menu cds--multi-select\"\n\t\t\t(scroll)=\"emitScroll($event)\"\n\t\t\t(keydown)=\"navigateList($event)\"\n\t\t\ttabindex=\"-1\"\n\t\t\t[attr.aria-label]=\"ariaLabel\"\n\t\t\t[attr.aria-activedescendant]=\"highlightedItem\">\n\t\t\t<li\n\t\t\t\trole=\"option\"\n\t\t\t\t*ngFor=\"let item of displayItems; let i = index\"\n\t\t\t\t(click)=\"doClick($event, item)\"\n\t\t\t\tclass=\"cds--list-box__menu-item\"\n\t\t\t\t[attr.aria-selected]=\"item.selected\"\n\t\t\t\t[id]=\"getItemId(i)\"\n\t\t\t\t[attr.title]=\" showTitles ? item.content : null\"\n\t\t\t\t[attr.disabled]=\"item.disabled ? true : null\"\n\t\t\t\t[ngClass]=\"{\n\t\t\t\t\t'cds--list-box__menu-item--active': item.selected,\n\t\t\t\t\t'cds--list-box__menu-item--highlighted': highlightedItem === getItemId(i)\n\t\t\t\t}\">\n\t\t\t\t<div\n\t\t\t\t\t#listItem\n\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\tclass=\"cds--list-box__menu-item__option\">\n\t\t\t\t\t<div\n\t\t\t\t\t\t*ngIf=\"!listTpl && type === 'multi'\"\n\t\t\t\t\t\tclass=\"cds--form-item cds--checkbox-wrapper\">\n\t\t\t\t\t\t<label\n\t\t\t\t\t\t\t[attr.data-contained-checkbox-state]=\"item.selected\"\n\t\t\t\t\t\t\tclass=\"cds--checkbox-label\">\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\tclass=\"cds--checkbox\"\n\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t[checked]=\"item.selected\"\n\t\t\t\t\t\t\t\t[disabled]=\"item.disabled\"\n\t\t\t\t\t\t\t\ttabindex=\"-1\">\n\t\t\t\t\t\t\t<span class=\"cds--checkbox-appearance\"></span>\n\t\t\t\t\t\t\t<span class=\"cds--checkbox-label-text\">{{item.content}}</span>\n\t\t\t\t\t\t</label>\n\t\t\t\t\t</div>\n\t\t\t\t\t<ng-container *ngIf=\"!listTpl && type === 'single'\">{{item.content}}</ng-container>\n\t\t\t\t\t<svg\n\t\t\t\t\t\t*ngIf=\"!listTpl && type === 'single'\"\n\t\t\t\t\t\tcdsIcon=\"checkmark\"\n\t\t\t\t\t\tsize=\"16\"\n\t\t\t\t\t\tclass=\"cds--list-box__menu-item__selected-icon\">\n\t\t\t\t\t</svg>\n\t\t\t\t\t<ng-template\n\t\t\t\t\t\t*ngIf=\"listTpl\"\n\t\t\t\t\t\t[ngTemplateOutletContext]=\"{item: item}\"\n\t\t\t\t\t\t[ngTemplateOutlet]=\"listTpl\">\n\t\t\t\t\t</ng-template>\n\t\t\t\t</div>\n\t\t\t</li>\n\t\t</ul>`,\n\tproviders: [\n\t\t{\n\t\t\tprovide: AbstractDropdownView,\n\t\t\tuseExisting: DropdownList\n\t\t}\n\t]\n})\nexport class DropdownList implements AbstractDropdownView, AfterViewInit, OnDestroy {\n\tstatic listCount = 0;\n\t@Input() ariaLabel = this.i18n.get().DROPDOWN_LIST.LABEL;\n\t/**\n\t * The list items belonging to the `DropdownList`.\n\t */\n\t@Input() set items(value: Array<ListItem> | Observable<Array<ListItem>>) {\n\t\tif (isObservable(value)) {\n\t\t\tif (this._itemsSubscription) {\n\t\t\t\tthis._itemsSubscription.unsubscribe();\n\t\t\t}\n\t\t\tthis._itemsReady = new Observable<boolean>((observer) => {\n\t\t\t\tthis._itemsSubscription = value.subscribe(v => {\n\t\t\t\t\tthis.updateList(v);\n\t\t\t\t\tobserver.next(true);\n\t\t\t\t\tobserver.complete();\n\t\t\t\t});\n\t\t\t});\n\t\t\tthis.onItemsReady(null);\n\t\t} else {\n\t\t\tthis.updateList(value);\n\t\t}\n\t\tthis._originalItems = value;\n\t}\n\n\tget items(): Array<ListItem> | Observable<Array<ListItem>> {\n\t\treturn this._originalItems;\n\t}\n\t/**\n\t * Template to bind to items in the `DropdownList` (optional).\n\t */\n\t@Input() listTpl: string | TemplateRef<any> = null;\n\t/**\n\t * Event to emit selection of a list item within the `DropdownList`.\n\t */\n\t@Output() select: EventEmitter<{ item: ListItem, isUpdate?: boolean } | ListItem[]> = new EventEmitter();\n\t/**\n\t * Event to emit scroll event of a list within the `DropdownList`.\n\t */\n\t@Output() scroll: EventEmitter<ScrollCustomEvent> = new EventEmitter();\n\t/**\n\t * Event to suggest a blur on the view.\n\t * Emits _after_ the first/last item has been focused.\n\t * ex.\n\t * ArrowUp -> focus first item\n\t * ArrowUp -> emit event\n\t *\n\t * When this event fires focus should be placed on some element outside of the list - blurring the list as a result\n\t */\n\t@Output() blurIntent = new EventEmitter<\"top\" | \"bottom\">();\n\t/**\n\t * Maintains a reference to the view DOM element for the unordered list of items within the `DropdownList`.\n\t */\n\t@ViewChild(\"list\", { static: true }) list: ElementRef;\n\t/**\n\t * Defines whether or not the `DropdownList` supports selecting multiple items as opposed to single\n\t * item selection.\n\t */\n\t@Input() type: \"single\" | \"multi\" = \"single\";\n\n\t/**\n\t * Defines whether to show title attribute or not\n\t */\n\t@Input() showTitles = true;\n\n\t/**\n\t * Defines the rendering size of the `DropdownList` input component.\n\t */\n\tpublic size: \"sm\" | \"md\" | \"lg\" = \"md\";\n\tpublic listId = `listbox-${DropdownList.listCount++}`;\n\tpublic highlightedItem = null;\n\t/**\n\t * Holds the list of items that will be displayed in the `DropdownList`.\n\t * It differs from the the complete set of items when filtering is used (but\n\t * it is always a subset of the total items in `DropdownList`).\n\t */\n\tpublic displayItems: Array<ListItem> = [];\n\t/**\n\t * Maintains the index for the selected item within the `DropdownList`.\n\t */\n\tprotected index = -1;\n\t/**\n\t * An array holding the HTML list elements in the view.\n\t */\n\t@ViewChildren(\"listItem\") protected listElementList: QueryList<ElementRef>;\n\t/**\n\t * Observable bound to keydown events to control filtering.\n\t */\n\tprotected focusJump;\n\t/**\n\t * Tracks the current (if any) subscription to the items observable so we can clean up when the input is updated.\n\t */\n\tprotected _itemsSubscription: Subscription;\n\t/**\n\t * Used to retain the original items passed to the setter.\n\t */\n\tprotected _originalItems: Array<ListItem> | Observable<Array<ListItem>>;\n\t/**\n\t * Useful representation of the items, should be accessed via `getListItems`.\n\t */\n\tprotected _items: Array<ListItem> = [];\n\t/**\n\t * Used to wait for items in case they are passed through an observable.\n\t */\n\tprotected _itemsReady: Observable<boolean>;\n\n\t/**\n\t * Creates an instance of `DropdownList`.\n\t */\n\tconstructor(public elementRef: ElementRef, protected i18n: I18n, protected appRef: ApplicationRef) {}\n\n\t/**\n\t * Retrieves array of list items and index of the selected item after view has rendered.\n\t * Additionally, any Observables for the `DropdownList` are initialized.\n\t */\n\tngAfterViewInit() {\n\t\tthis.index = this.getListItems().findIndex(item => item.selected);\n\t\tthis.setupFocusObservable();\n\t\tsetTimeout(() => {\n\t\t\tthis.doEmitSelect(true);\n\t\t});\n\t}\n\n\t/**\n\t * Removes any Observables on destruction of the component.\n\t */\n\tngOnDestroy() {\n\t\tif (this.focusJump) {\n\t\t\tthis.focusJump.unsubscribe();\n\t\t}\n\t\tif (this._itemsSubscription) {\n\t\t\tthis._itemsSubscription.unsubscribe();\n\t\t}\n\t}\n\n\tdoEmitSelect(isUpdate = true) {\n\t\tif (this.type === \"single\") {\n\t\t\tthis.select.emit({ item: this._items.find(item => item.selected), isUpdate: isUpdate });\n\t\t} else {\n\t\t\t// abuse javascripts object mutability until we can break the API and switch to\n\t\t\t// { items: [], isUpdate: true }\n\t\t\tconst selected = this.getSelected() || [];\n\t\t\tselected[\"isUpdate\"] = isUpdate;\n\t\t\tthis.select.emit(selected);\n\t\t}\n\t}\n\n\tgetItemId(index: number) {\n\t\treturn `${this.listId}-${index}`;\n\t}\n\n\t/**\n\t * Updates the displayed list of items and then retrieves the most current properties for the `DropdownList` from the DOM.\n\t */\n\tupdateList(items) {\n\t\tthis._items = items.map(item => Object.assign({}, item));\n\t\tthis.displayItems = this._items;\n\t\tthis.updateIndex();\n\t\tthis.setupFocusObservable();\n\t\tthis.doEmitSelect();\n\t}\n\n\t/**\n\t * Filters the items being displayed in the DOM list.\n\t */\n\tfilterBy(query = \"\") {\n\t\tif (query) {\n\t\t\tthis.displayItems = this.getListItems().filter(item => item.content.toLowerCase().includes(query.toLowerCase()));\n\t\t\t// Reset index if items were found\n\t\t\t// Prevent selecting index in list that are undefined.\n\t\t\tif (this.displayItems) {\n\t\t\t\tthis.index = 0;\n\t\t\t}\n\t\t} else {\n\t\t\tthis.displayItems = this.getListItems();\n\t\t}\n\n\t\tthis.updateIndex();\n\t}\n\n\t/**\n\t * Initializes (or re-initializes) the Observable that handles switching focus to an element based on\n\t * key input matching the first letter of the item in the list.\n\t */\n\tsetupFocusObservable() {\n\t\tif (!this.list) { return; }\n\t\tif (this.focusJump) {\n\t\t\tthis.focusJump.unsubscribe();\n\t\t}\n\t\tlet elList = Array.from(this.list.nativeElement.querySelectorAll(\"li\"));\n\t\tthis.focusJump = watchFocusJump(this.list.nativeElement, elList)\n\t\t\t.subscribe(el => {\n\t\t\t\tel.focus();\n\t\t\t});\n\t}\n\n\t/**\n\t * Returns the `ListItem` that is subsequent to the selected item in the `DropdownList`.\n\t */\n\tgetNextItem(): ListItem {\n\t\tif (this.index < this.displayItems.length - 1) {\n\t\t\tthis.index++;\n\t\t}\n\t\treturn this.displayItems[this.index];\n\t}\n\n\t/**\n\t * Returns `true` if the selected item is not the last item in the `DropdownList`.\n\t */\n\thasNextElement(): boolean {\n\t\treturn this.index < this.displayItems.length - 1 &&\n\t\t\t(!(this.index === this.displayItems.length - 2) || !this.displayItems[this.index + 1].disabled);\n\t}\n\n\t/**\n\t * Returns the `HTMLElement` for the item that is subsequent to the selected item.\n\t */\n\tgetNextElement(): HTMLElement {\n\t\t// Only return native elements if they are rendered\n\t\tconst elemList = this.listElementList ? this.listElementList.toArray() : [];\n\t\tif (!elemList.length) {\n\t\t\treturn null;\n\t\t}\n\n\t\t/**\n\t\t * Start checking from next index\n\t\t * Continue looping through the list until a non disabeled element is found or\n\t\t * end of list is reached\n\t\t */\n\t\tfor (let i = this.index + 1; i < elemList.length; i++) {\n\t\t\t// If the values in the list are not disabled\n\t\t\tif (!this.displayItems[i].disabled) {\n\t\t\t\tthis.index = i;\n\t\t\t\treturn elemList[i].nativeElement;\n\t\t\t}\n\t\t}\n\n\t\treturn elemList[this.index]?.nativeElement;\n\t}\n\n\t/**\n\t * Returns the `ListItem` that precedes the selected item within `DropdownList`.\n\t */\n\tgetPrevItem(): ListItem {\n\t\tif (this.index > 0) {\n\t\t\tthis.index--;\n\t\t}\n\t\treturn this.displayItems[this.index];\n\t}\n\n\t/**\n\t * Returns `true` if the selected item is not the first in the list.\n\t */\n\thasPrevElement(): boolean {\n\t\treturn this.index > 0 && (!(this.index === 1) || !this.displayItems[0].disabled);\n\t}\n\n\t/**\n\t * Returns the `HTMLElement` for the item that precedes the selected item.\n\t */\n\tgetPrevElement(): HTMLElement {\n\t\t// Only return native elements if they are rendered\n\t\tconst elemList = this.listElementList ? this.listElementList.toArray() : [];\n\t\tif (!elemList.length) {\n\t\t\treturn null;\n\t\t}\n\n\t\t/**\n\t\t * Start checking from next index\n\t\t * Continue looping through the list until a non disabeled element is found or\n\t\t * end of list is reached\n\t\t */\n\t\tfor (let i = this.index - 1; i < this.index && i >= 0; i--) {\n\t\t\t// If the values in the list are not disabled\n\t\t\tif (!this.displayItems[i].disabled) {\n\t\t\t\tthis.index = i;\n\t\t\t\treturn elemList[i].nativeElement;\n\t\t\t}\n\t\t}\n\n\t\treturn elemList[this.index].nativeElement;\n\t}\n\n\t/**\n\t * Returns the `ListItem` that is selected within `DropdownList`.\n\t */\n\tgetCurrentItem(): ListItem {\n\t\tif (this.index < 0) {\n\t\t\treturn this.displayItems[0];\n\t\t}\n\t\treturn this.displayItems[this.index];\n\t}\n\n\t/**\n\t * Returns the `HTMLElement` for the item that is selected within the `DropdownList`.\n\t */\n\tgetCurrentElement(): HTMLElement {\n\t\tif (this.index < 0) {\n\t\t\treturn this.listElementList.first.nativeElement;\n\t\t}\n\t\treturn this.listElementList.toArray()[this.index].nativeElement;\n\t}\n\n\t/**\n\t * Returns the items as an Array\n\t */\n\tgetListItems(): Array<ListItem> {\n\t\treturn this._items;\n\t}\n\n\t/**\n\t * Returns a list containing the selected item(s) in the `DropdownList`.\n\t */\n\tgetSelected(): ListItem[] {\n\t\tlet selected = this.getListItems().filter(item => item.selected);\n\t\tif (selected.length === 0) {\n\t\t\treturn [];\n\t\t}\n\t\treturn selected;\n\t}\n\n\t/**\n\t * Transforms array input list of items to the correct state by updating the selected item(s).\n\t */\n\tpropagateSelected(value: Array<ListItem>): void {\n\t\t// if we get a non-array, log out an error (since it is one)\n\t\tif (!Array.isArray(value)) {\n\t\t\tconsole.error(`${this.constructor.name}.propagateSelected expects an Array<ListItem>, got ${JSON.stringify(value)}`);\n\t\t}\n\t\tthis.onItemsReady(() => {\n\t\t\tconst selectedNewItems = [];\n\t\t\tfor (let newItem of value) {\n\t\t\t\tif (newItem && newItem.selected) {\n\t\t\t\t\t// copy the item\n\t\t\t\t\tlet tempNewItem: string | ListItem = Object.assign({}, newItem);\n\t\t\t\t\t// deleted selected because it's what we _want_ to change\n\t\t\t\t\tdelete tempNewItem.selected;\n\t\t\t\t\t// stringify for compare later\n\t\t\t\t\ttempNewItem = JSON.stringify(tempNewItem);\n\t\t\t\t\t// add to the list of selected items\n\t\t\t\t\tselectedNewItems.push(tempNewItem);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// loop through the list items and update the `selected` state for matching items in `value`\n\t\t\tfor (let oldItem of this.getListItems()) {\n\t\t\t\t// fast path when no items are selected\n\t\t\t\tif (selectedNewItems.length === 0) {\n\t\t\t\t\toldItem.selected = false;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// copy the item\n\t\t\t\tlet tempOldItem: string | ListItem = Object.assign({}, oldItem);\n\t\t\t\t// deleted selected because it's what we _want_ to change\n\t\t\t\tdelete tempOldItem.selected;\n\t\t\t\t// stringify for compare\n\t\t\t\ttempOldItem = JSON.stringify(tempOldItem);\n\t\t\t\tfor (let selectedNewItem of selectedNewItems) {\n\t\t\t\t\t// do the compare\n\t\t\t\t\tif (tempOldItem.includes(selectedNewItem)) {\n\t\t\t\t\t\toldItem.selected = true;\n\t\t\t\t\t\t// if we've found a matching item, we can stop looping\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toldItem.selected = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Initializes focus in the list, effectively a wrapper for `getCurrentElement().focus()`\n\t */\n\tinitFocus() {\n\t\tif (this.index < 0) {\n\t\t\tthis.updateIndex();\n\t\t}\n\n\t\tthis.list.nativeElement.focus();\n\t\tsetTimeout(() => {\n\t\t\tthis.highlightedItem = this.getItemId(this.index);\n\t\t});\n\t}\n\n\tupdateIndex() {\n\t\t// initialize index on the first selected item or\n\t\t// on the next non disabled item if no items are selected\n\t\t// in case, if all items are disabled, the index value will remain same\n\t\tconst selected = this.getSelected();\n\t\tif (selected.length) {\n\t\t\tthis.index = this.displayItems.indexOf(selected[0]);\n\t\t} else if (this.hasNextElement()) {\n\t\t\tthis.getNextElement();\n\t\t}\n\t}\n\n\t/**\n\t * Manages the keyboard accessibility for navigation and selection within a `DropdownList`.\n\t */\n\tnavigateList(event: KeyboardEvent) {\n\t\tif (event.key === \"Enter\" || event.key === \" \") {\n\t\t\tif (this.listElementList.some(option => option.nativeElement === event.target)) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t\tif (event.key === \"Enter\") {\n\t\t\t\tthis.doClick(event, this.getCurrentItem());\n\t\t\t}\n\t\t} else if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n\t\t\tevent.preventDefault();\n\t\t\tif (event.key === \"ArrowDown\") {\n\t\t\t\tif (this.hasNextElement()) {\n\t\t\t\t\tthis.getNextElement()?.scrollIntoView({ block: \"end\" });\n\t\t\t\t} else {\n\t\t\t\t\tthis.blurIntent.emit(\"bottom\");\n\t\t\t\t}\n\t\t\t} else if (event.key === \"ArrowUp\") {\n\t\t\t\tif (this.hasPrevElement()) {\n\t\t\t\t\tthis.getPrevElement().scrollIntoView({ block: \"nearest\" });\n\t\t\t\t} else {\n\t\t\t\t\tthis.blurIntent.emit(\"top\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.highlightedItem = this.getItemId(this.index);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Emits the selected item or items after a mouse click event has occurred.\n\t */\n\tdoClick(event, item) {\n\t\tevent.preventDefault();\n\t\tif (item && !item.disabled) {\n\t\t\tthis.list.nativeElement.focus();\n\t\t\tif (this.type === \"single\") {\n\t\t\t\titem.selected = true;\n\t\t\t\t// reset the selection\n\t\t\t\tfor (let otherItem of this.getListItems()) {\n\t\t\t\t\tif (item !== otherItem) { otherItem.selected = false; }\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\titem.selected = !item.selected;\n\t\t\t}\n\t\t\tthis.index = this.displayItems.indexOf(item);\n\t\t\tthis.highlightedItem = this.getItemId(this.index);\n\t\t\tthis.doEmitSelect(false);\n\t\t\tthis.appRef.tick();\n\t\t}\n\t}\n\n\tonItemFocus(index) {\n\t\tconst element = this.listElementList.toArray()[index].nativeElement;\n\t\telement.classList.add(\"cds--list-box__menu-item--highlighted\");\n\t\telement.tabIndex = 0;\n\t}\n\n\tonItemBlur(index) {\n\t\tconst element = this.listElementList.toArray()[index].nativeElement;\n\t\telement.classList.remove(\"cds--list-box__menu-item--highlighted\");\n\t\telement.tabIndex = -1;\n\t}\n\n\t/**\n\t * Emits the scroll event of the options list\n\t */\n\temitScroll(event) {\n\t\tconst atTop: boolean = event.srcElement.scrollTop === 0;\n\t\tconst atBottom: boolean = event.srcElement.scrollHeight - event.srcElement.scrollTop === event.srcElement.clientHeight;\n\t\tconst customScrollEvent = { atTop, atBottom, event };\n\t\tthis.scroll.emit(customScrollEvent);\n\t}\n\n\t/**\n\t * Subscribe the function passed to an internal observable that will resolve once the items are ready\n\t */\n\tonItemsReady(subcription: () => void): void {\n\t\t// this subscription will auto unsubscribe because of the `first()` pipe\n\t\t(this._itemsReady || of(true)).pipe(first()).subscribe(subcription);\n\t}\n\n\treorderSelected(moveFocus = true): void {\n\t\tthis.displayItems = [...this.getSelected(), ...this.getListItems().filter(item => !item.selected)];\n\t\tif (moveFocus) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.updateIndex();\n\t\t\t\tthis.highlightedItem = this.getItemId(this.index);\n\t\t\t});\n\t\t}\n\t}\n}\n","import {\n\tInput,\n\tDirective,\n\tElementRef,\n\tHostListener,\n\tOnChanges,\n\tSimpleChanges,\n\tAfterViewInit\n} from \"@angular/core\";\n\n@Directive({\n\tselector: \"[cdsScrollableList], [ibmScrollableList]\",\n\texportAs: \"scrollable-list\"\n})\nexport class ScrollableList implements OnChanges, AfterViewInit {\n\t/**\n\t * Optional target list to scroll\n\t */\n\t@Input() nScrollableList: string = null;\n\t/**\n\t * Enables or disables scrolling for the whole directive\n\t */\n\t@Input() scrollEnabled = true;\n\t/**\n\t * Sets the target used for hover scrolling up\n\t */\n\t@Input() scrollUpTarget: HTMLElement;\n\t/**\n\t * Sets the target used for hover scrolling down\n\t */\n\t@Input() scrollDownTarget: HTMLElement;\n\t/**\n\t * How many lines to scroll by each time `wheel` fires\n\t * Defaults to 10 - based on testing this isn't too fast or slow on any platform\n\t */\n\t@Input() scrollBy = 10;\n\n\t// keeps track of the setInterval for hover scrolling\n\tprotected hoverScrollInterval;\n\t// tracks the last touch event\n\tprotected lastTouch;\n\tprotected canScrollUp = false;\n\tprotected canScrollDown = false;\n\tprotected list = this.elementRef.nativeElement;\n\n\tconstructor(protected elementRef: ElementRef) {}\n\n\tngOnChanges(changes: SimpleChanges) {\n\t\tif (changes.scrollEnabled) {\n\t\t\tif (changes.scrollEnabled.currentValue) {\n\t\t\t\tthis.list.style.overflow = \"hidden\";\n\t\t\t\tthis.scrollUpTarget.style.display = \"flex\";\n\t\t\t\tthis.scrollDownTarget.style.display = \"flex\";\n\t\t\t\tthis.canScrollUp = true;\n\t\t\t\tthis.canScrollDown = true;\n\t\t\t\tthis.updateScrollHeight();\n\t\t\t\tthis.checkScrollArrows();\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.checkScrollArrows();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tthis.scrollUpTarget.style.display = \"none\";\n\t\t\t\tthis.scrollDownTarget.style.display = \"none\";\n\t\t\t\tthis.canScrollUp = false;\n\t\t\t\tthis.canScrollDown = false;\n\t\t\t\tthis.list.style.height = null;\n\t\t\t\tthis.list.style.overflow = null;\n\t\t\t\tclearInterval(this.hoverScrollInterval);\n\t\t\t}\n\t\t}\n\t}\n\n\tngAfterViewInit() {\n\t\tif (this.nScrollableList) {\n\t\t\tthis.list = this.elementRef.nativeElement.querySelector(this.nScrollableList);\n\t\t}\n\t\tthis.scrollUpTarget.addEventListener(\"mouseover\", () => this.onHoverUp(true));\n\t\tthis.scrollUpTarget.addEventListener(\"mouseout\", () => this.onHoverUp(false));\n\t\tthis.scrollDownTarget.addEventListener(\"mouseover\", () => this.onHoverDown(true));\n\t\tthis.scrollDownTarget.addEventListener(\"mouseout\", () => this.onHoverDown(false));\n\t}\n\n\tpublic updateScrollHeight() {\n\t\tif (this.scrollEnabled) {\n\t\t\tconst container = this.elementRef.nativeElement.parentElement;\n\t\t\tconst containerRect = container.getBoundingClientRect();\n\t\t\tconst innerHeightDiff = this.list.getBoundingClientRect().top - containerRect.top;\n\t\t\tconst outerHeightDiff = containerRect.height - (containerRect.bottom - window.innerHeight);\n\t\t\t// 40 gives us some padding between the bottom of the list,\n\t\t\t// the bottom of the window, and the scroll down button\n\t\t\tconst height = outerHeightDiff - innerHeightDiff - 40;\n\t\t\tthis.list.style.height = `${height}px`;\n\t\t}\n\t}\n\n\tprotected checkScrollArrows() {\n\t\tconst scrollUpHeight = this.scrollUpTarget.offsetHeight;\n\t\tconst scrollDownHeight = this.scrollDownTarget.offsetHeight;\n\t\tif (this.list.scrollTop === 0) {\n\t\t\tif (this.canScrollUp) {\n\t\t\t\tthis.list.style.height = `${parseInt(this.list.style.height, 10) + scrollUpHeight}px`;\n\t\t\t}\n\t\t\tthis.scrollUpTarget.style.display = \"none\";\n\t\t\tthis.canScrollUp = false;\n\t\t} else if (this.list.scrollTop === this.list.scrollTopMax) {\n\t\t\tif (this.canScrollDown) {\n\t\t\t\tthis.list.style.height = `${parseInt(this.list.style.height, 10) + scrollDownHeight}px`;\n\t\t\t}\n\t\t\tthis.scrollDownTarget.style.display = \"none\";\n\t\t\tthis.canScrollDown = false;\n\t\t} else {\n\t\t\tif (!this.canScrollUp) {\n\t\t\t\tthis.list.style.height = `${parseInt(this.list.style.height, 10) - scrollUpHeight}px`;\n\t\t\t}\n\t\t\tif (!this.canScrollDown) {\n\t\t\t\tthis.list.style.height = `${parseInt(this.list.style.height, 10) - scrollDownHeight}px`;\n\t\t\t}\n\t\t\tthis.scrollUpTarget.style.display = \"flex\";\n\t\t\tthis.scrollDownTarget.style.display = \"flex\";\n\t\t\tthis.canScrollUp = true;\n\t\t\tthis.canScrollDown = true;\n\t\t}\n\t}\n\n\t@HostListener(\"wheel\", [\"$event\"])\n\tprotected onWheel(event) {\n\t\tif (event.deltaY < 0) {\n\t\t\tthis.list.scrollTop -= this.scrollBy;\n\t\t} else {\n\t\t\tthis.list.scrollTop += this.scrollBy;\n\t\t}\n\t\t// only prevent the parent/window from scrolling if we can scroll\n\t\tif (!(this.list.scrollTop === this.list.scrollTopMax || this.list.scrollTop === 0)) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\tthis.checkScrollArrows();\n\t}\n\n\t@HostListener(\"touchstart\", [\"$event\"])\n\tprotected onTouchStart(event) {\n\t\tif (event.touches[0]) {\n\t\t\tthis.lastTouch = event.touches[0].clientY;\n\t\t}\n\t}\n\n\t@HostListener(\"touchmove\", [\"$event\"])\n\tprotected onTouchMove(event) {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\tif (event.touches[0]) {\n\t\t\tconst touch = event.touches[0];\n\t\t\tthis.list.scrollTop += this.lastTouch - touch.clientY;\n\t\t\tthis.lastTouch = touch.clientY;\n\t\t\tthis.checkScrollArrows();\n\t\t}\n\t}\n\n\tprotected hoverScrollBy(hovering, amount) {\n\t\tif (hovering) {\n\t\t\tthis.hoverScrollInterval = setInterval(() => {\n\t\t\t\tthis.list.scrollTop += amount;\n\t\t\t\tthis.checkScrollArrows();\n\t\t\t}, 1);\n\t\t} else {\n\t\t\tclearInterval(this.hoverScrollInterval);\n\t\t}\n\t}\n\n\tprotected onHoverUp(hovering) {\n\t\t// how many px/lines to scroll by on hover\n\t\t// 3 is just a random number that felt good\n\t\t// 1 and 2 are too slow, 4 works but it might be a tad fast\n\t\tthis.hoverScrollBy(hovering, -3);\n\t}\n\n\tprotected onHoverDown(hovering) {\n\t\tthis.hoverScrollBy(hovering, 3);\n\t}\n\n\t@HostListener(\"keydown\", [\"$event\"])\n\tprotected onKeyDown(event) {\n\t\tif (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n\t\t\tthis.checkScrollArrows();\n\t\t}\n\t}\n}\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\nimport { FormsModule } from \"@angular/forms\";\n\nimport { Dropdown } from \"./dropdown.component\";\nimport { DropdownList } from \"./list/dropdown-list.component\";\nimport { AbstractDropdownView } from \"./abstract-dropdown-view.class\";\n\nimport { ScrollableList } from \"./scrollable-list.directive\";\nimport { I18nModule } from \"carbon-components-angular/i18n\";\nimport { PlaceholderModule } from \"carbon-components-angular/placeholder\";\nimport { DropdownService } from \"./dropdown.service\";\nimport { UtilsModule } from \"carbon-components-angular/utils\";\nimport { IconModule } from \"carbon-components-angular/icon\";\n\n@NgModule({\n\tdeclarations: [\n\t\tDropdown,\n\t\tDropdownList,\n\t\tScrollableList,\n\t\tAbstractDropdownView\n\t],\n\texports: [\n\t\tDropdown,\n\t\tDropdownList,\n\t\tScrollableList,\n\t\tAbstractDropdownView\n\t],\n\timports: [\n\t\tCommonModule,\n\t\tFormsModule,\n\t\tI18nModule,\n\t\tPlaceholderModule,\n\t\tUtilsModule,\n\t\tIconModule\n\t],\n\tproviders: [ DropdownService ]\n})\nexport class DropdownModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.DropdownService","i3","i2"],"mappings":";;;;;;;;;;;;;;;;;AAUA;;;;AAIG;MAIU,oBAAoB,CAAA;AAHjC,IAAA,WAAA,GAAA;AAyBC;;;AAGG;QACI,IAAI,CAAA,IAAA,GAAuB,QAAQ,CAAC;AAC3C;;AAEG;QACI,IAAI,CAAA,IAAA,GAAuB,IAAI,CAAC;AAgEvC,KAAA;AA7FA;;AAEG;AACH,IAAA,IAAa,KAAK,CAAC,KAAoD,EAAA,GAAK;AAE5E,IAAA,IAAI,KAAK,GAAA,EAAoD,OAAO,EAAE;AA0BtE;;AAEG;IACH,WAAW,GAAA,EAAe,OAAO,EAAE;AACnC;;AAEG;IACH,cAAc,GAAA,EAAc,OAAO,EAAE;AACrC;;AAEG;IACH,cAAc,GAAA,EAAkB,OAAO,EAAE;AACzC;;AAEG;IACH,WAAW,GAAA,EAAe,OAAO,EAAE;AACnC;;AAEG;IACH,cAAc,GAAA,EAAc,OAAO,EAAE;AACrC;;AAEG;IACH,cAAc,GAAA,EAAkB,OAAO,EAAE;AACzC;;AAEG;IACH,WAAW,GAAA,EAAiB,OAAO,EAAE;AACrC;;AAEG;IACH,cAAc,GAAA,EAAe,OAAO,EAAE;AACtC;;AAEG;IACH,iBAAiB,GAAA,EAAkB,OAAO,EAAE;AAC5C;;AAEG;IACH,YAAY,GAAA,EAAsB,OAAO,EAAE;AAC3C;;AAEG;IACH,iBAAiB,CAAC,KAAsB,EAAA,GAAU;AAClD;;;AAGG;IACH,QAAQ,CAAC,KAAa,EAAA,GAAU;AAChC;;;AAGG;AACH,IAAA,SAAS,MAAW;AACpB;;AAEG;IACH,YAAY,CAAC,WAAuB,EAAA,GAAU;AAC9C;;AAEG;IACH,eAAe,CAAC,SAAmB,EAAA,GAAU;;iHA7FjC,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qGAApB,oBAAoB,EAAA,QAAA,EAAA,sDAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,sDAAsD;AAChE,iBAAA,CAAA;8BAKa,KAAK,EAAA,CAAA;sBAAjB,KAAK;gBAMI,MAAM,EAAA,CAAA;sBAAf,MAAM;gBAWG,UAAU,EAAA,CAAA;sBAAnB,MAAM;;;AChCR,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;MAG7B,eAAe,CAAA;IAqB3B,WACW,CAAA,kBAAsC,EACtC,qBAA4C,EAAA;QAD5C,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB,CAAoB;QACtC,IAAqB,CAAA,qBAAA,GAArB,qBAAqB,CAAuB;AAVvD;;;AAGG;AACO,QAAA,IAAA,CAAA,0BAA0B,GAAG,IAAI,YAAY,EAAE,CAAC;QAEhD,IAAO,CAAA,OAAA,GAAG,aAAa,CAAC;KAK9B;IAvBJ,IAAW,MAAM,CAAC,KAAsC,EAAA;AACvD,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;KACvD;AAED,IAAA,IAAW,MAAM,GAAA;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC;KACpB;AAmBD;;;;;;AAMG;AACH,IAAA,YAAY,CAAC,SAAsB,EAAE,OAAoB,EAAE,SAAS,EAAA;;AAEnE,QAAA,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QAChC,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACtD,QAAA,eAAe,CAAC,SAAS,GAAG,CAAY,SAAA,EAAA,SAAS,EAAE,CAAC;QACpD,eAAe,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;AAC3D,QAAA,eAAe,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;AAC5C,QAAA,eAAe,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;;AAGrC,QAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,EAAE;AAChD,YAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;;AAEvD,SAAA;AAAM,aAAA;AACN,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;AAC3C,SAAA;AAED,QAAA,IAAI,CAAC,YAAY,GAAG,eAAe,CAAC;AAEpC,QAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,MAAK;AAChF,YAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AACnD,SAAC,CAAC,CAAC;;AAGH,QAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AAElD,QAAA,OAAO,eAAe,CAAC;KACvB;AAED;;;AAGG;AACH,IAAA,gBAAgB,CAAC,OAAoB,EAAA;;AAEpC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAAE,OAAO;AAAE,SAAA;AACnC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;AACnC,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,iBAAgC,CAAC;;AAEvD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AAC5B,QAAA,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,0BAA0B,CAAC,WAAW,EAAE,CAAC;AAC9C,QAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,IAAI,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;AAChG,YAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAChD,SAAA;aAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAC5C,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AACpC,SAAA;AACD,QAAA,OAAO,QAAQ,CAAC;KAChB;AAED;;AAEG;AACH,IAAA,cAAc,CAAC,SAAS,EAAA;QACvB,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;KACpD;IAED,WAAW,GAAA;AACV,QAAA,IAAI,CAAC,0BAA0B,CAAC,WAAW,EAAE,CAAC;KAC9C;IAES,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAA;QAC5C,IAAI,CAAC,OAAO,EAAE;YACb,OAAO;AACP,SAAA;QAED,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;AAE9D,QAAA,IAAI,OAAO,EAAE;;;;AAIZ,YAAA,IAAI,SAAS,CAAC,qBAAqB,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,qBAAqB,EAAE,CAAC,IAAI,EAAE;;;gBAGpF,MAAM,uBAAuB,GAC5B,SAAS,CAAC,qBAAqB,EAAE,CAAC,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;AAEvH,gBAAA,IAAI,uBAAuB,IAAI,MAAM,CAAC,UAAU,IAAI,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE;oBAC1F,UAAU,GAAG,SAAS,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;AACzD,iBAAA;;;AAGD,aAAA;AAAM,iBAAA,IAAI,OAAO,CAAC,qBAAqB,EAAE,CAAC,KAAK,IAAI,MAAM,CAAC,UAAU,IAAI,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC,EAAE;gBAC/G,UAAU,GAAG,SAAS,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;AACzD,aAAA;AACD,SAAA;;AAGD,QAAA,MAAM,kBAAkB,GAAG,WAAW,CAAC,UAAU,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QAC7G,MAAM,MAAM,GAAG,kBAAkB,GAAG,kBAAkB,CAAC,qBAAqB,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;QAC1G,MAAM,OAAO,GAAG,kBAAkB,GAAG,kBAAkB,CAAC,qBAAqB,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC;AAE1H,QAAA,IAAI,GAAG,GAAG,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC9D,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAE/C,QAAA,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;KAClC;;4GArIW,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;gHAAf,eAAe,EAAA,CAAA,CAAA;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;;;ACuBX;;;;;;;;;;;;;;;;;;;;;AAqBG;MAgIU,QAAQ,CAAA;AAuKpB;;AAEG;AACH,IAAA,WAAA,CACW,UAAsB,EACtB,IAAU,EACV,eAAgC,EAChC,cAA8B,EAAA;QAH9B,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QACtB,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAM;QACV,IAAe,CAAA,eAAA,GAAf,eAAe,CAAiB;QAChC,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;AA5KhC,QAAA,IAAA,CAAA,EAAE,GAAG,CAAY,SAAA,EAAA,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC;AAKrD;;AAEG;QACM,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;AAK3B;;AAEG;QACM,IAAW,CAAA,WAAA,GAAG,EAAE,CAAC;AAC1B;;AAEG;QACM,IAAY,CAAA,YAAA,GAA8B,EAAE,CAAC;AACtD;;AAEG;QACM,IAAS,CAAA,SAAA,GAAW,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC5D;;AAEG;QACM,IAAI,CAAA,IAAA,GAAuB,IAAI,CAAC;AACzC;;;AAGG;QACM,IAAI,CAAA,IAAA,GAAuB,QAAQ,CAAC;AAC7C;;;AAGG;QACM,IAAK,CAAA,KAAA,GAAqB,MAAM,CAAC;AAC1C;;AAEG;QACM,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AAC1B;;AAEG;QACM,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;AAC1B;;AAEG;QACM,IAAM,CAAA,MAAA,GAAG,KAAK,CAAC;AACxB;;AAEG;QACM,IAAgB,CAAA,gBAAA,GAAG,KAAK,CAAC;AAClC;;AAEG;QACM,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;AAKzB;;AAEI;QACK,IAAI,CAAA,IAAA,GAAG,KAAK,CAAC;AAKtB;;AAEG;QACM,IAAY,CAAA,YAAA,GAAY,IAAI,CAAC;AAUtC;;;;;AAKG;QACM,IAAiB,CAAA,iBAAA,GAAyC,kBAAkB,CAAC;AACtF;;;AAGG;QACM,IAAe,CAAA,eAAA,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;AACzD;;;AAGG;QACM,IAAa,CAAA,aAAA,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAK3D;;AAEG;AACO,QAAA,IAAA,CAAA,QAAQ,GAAyB,IAAI,YAAY,EAAU,CAAC;AACtE;;AAEG;AACO,QAAA,IAAA,CAAA,OAAO,GAAsB,IAAI,YAAY,EAAO,CAAC;AAC/D;;AAEG;AACO,QAAA,IAAA,CAAA,KAAK,GAAsB,IAAI,YAAY,EAAO,CAAC;QAehB,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC;AAC9D;;AAEG;QACH,IAAY,CAAA,YAAA,GAAG,IAAI,CAAC;AAEpB;;AAEG;QACH,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;;;QAIhB,IAAI,CAAA,IAAA,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAY,CAAA,YAAA,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAU,CAAA,UAAA,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,IAAW,CAAA,WAAA,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEjC,QAAA,IAAA,CAAA,sBAAsB,GAAG,IAAI,YAAY,EAAE,CAAC;AAE5C,QAAA,IAAA,CAAA,iBAAiB,GAAe,IAAI,CAAC,KAAK,CAAC;;QAG7C,IAAa,CAAA,aAAA,GAAQ,EAAE,CAAC;AA8JhC;;AAEG;AACH,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,CAAM,KAAI,GAAI,CAAC;KA/IW;AAjB7C,IAAA,IAAc,YAAY,GAAA;QACzB,OAAO,IAAI,CAAC,aAAa,CAAC;KAC1B;IACD,IAAc,YAAY,CAAC,GAAU,EAAA;AACpC,QAAA,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5B,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,SAAA;AACD,QAAA,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;KACzB;AAWD;;;AAGG;IACH,QAAQ,GAAA;QACP,IAAI,IAAI,CAAC,IAAI,EAAE;YACd,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;AAC3B,SAAA;KACD;AAED;;AAEG;IACH,kBAAkB,GAAA;AACjB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACf,OAAO;AACP,SAAA;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,EAAE;AAC7F,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACnC,SAAA;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;;QAG3B,MAAM,QAAQ,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC;QAElD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,IAAG;AAClC,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACxE,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;oBACtC,IAAI,IAAI,CAAC,YAAY,EAAE;AACtB,wBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AACpD,qBAAA;AAAM,yBAAA;AACN,wBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACjC,qBAAA;AACD,iBAAA;AAAM,qBAAA;AACN,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC3B,iBAAA;AACD,aAAA;YAED,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;;gBAE9C,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;oBACjD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AAC5E,oBAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;;AAE7B,iBAAA;AAAM,qBAAA;oBACN,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AAC9C,iBAAA;AACD,aAAA;;AAED,YAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACrB,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,aAAA;AACF,SAAC,CAAC,CAAC;KACH;IAED,eAAe,GAAA;;;;;AAKd,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,oBAAoB,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;AACtF,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;;AAE1B,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE;AACtC,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;AACzB,SAAA;QACD,IAAI,CAAC,eAAe,EAAE,CAAC;KACvB;AAED;;AAEG;IACH,WAAW,GAAA;AACV,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACvB,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,SAAA;KACD;AAED;;AAEG;AACH,IAAA,UAAU,CAAC,KAAU,EAAA;;AAEpB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;AAC1B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAK;;YAE3B,IAAI,CAAC,KAAK,EAAE;gBACX,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,aAAA;AAAM,iBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAClC,IAAI,IAAI,CAAC,YAAY,EAAE;;AAEtB,oBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;AAC7G,oBAAA,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC;oBACzB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACxC,iBAAA;AAAM,qBAAA;;oBAEN,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,iBAAA;AACD,aAAA;AAAM,iBAAA;gBACN,IAAI,IAAI,CAAC,YAAY,EAAE;;;oBAGtB,IAAI,SAAS,GAAG,EAAE,CAAC;AACnB,oBAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;wBACtB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;4BAC5C,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;AAClC,gCAAA,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC5D,6BAAA;AACD,yBAAA;AACD,qBAAA;AACD,oBAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;AACvC,iBAAA;AAAM,qBAAA;;AAEN,oBAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AACnC,iBAAA;AACD,aAAA;YACD,IAAI,CAAC,eAAe,EAAE,CAAC;AACxB,SAAC,CAAC,CAAC;KACH;IAED,MAAM,GAAA;QACL,IAAI,CAAC,iBAAiB,EAAE,CAAC;KACzB;AAED,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;KAC1B;AAED;;AAEG;AACH,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACxB,QAAA,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;KAC5B;AAOD;;;;;;AAMG;AACH,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AACnC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;KAC3B;AAED;;AAEG;AAEH,IAAA,SAAS,CAAC,KAAoB,EAAA;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,QAAQ,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE;AACnD,YAAA,KAAK,CAAC,wBAAwB,EAAE,CAAC;AACjC,SAAA;AACD,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;YAC3B,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;AAC1C,SAAA;aAAM,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,EAAE;AAC5G,YAAA,IAAI,IAAI,CAAC,gBAAgB,KAAK,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,EAAE;gBACpF,OAAO;AACP,aAAA;YACD,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChB,SAAA;QAED,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,EAAE;YAChH,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,IAAI,KAAK,CAAC,QAAQ,EAAE;YAChE,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;YAAE,OAAO;AAAE,SAAA;QAEtC,IAAI,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;AACrC,SAAA;KACD;AAED,IAAA,wBAAwB,CAAC,KAAK,EAAA;AAC7B,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;YAC9B,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC;YAC5C,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACnC,YAAA,IAAI,IAAI,EAAE;AAAE,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AAAE,aAAA;AACnC,SAAA;AAAM,aAAA,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;YACnC,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC;YAC5C,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACnC,YAAA,IAAI,IAAI,EAAE;AAAE,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AAAE,aAAA;AACnC,SAAA;KACD;AAED;;;;AAIG;IACH,qBAAqB,GAAA;QACpB,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;YAChC,OAAO;AACP,SAAA;QACD,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACvC,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE;AACtE,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AAC1B,gBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC5B,aAAA;AAAM,iBAAA;gBACN,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AAC/B,aAAA;AACD,SAAA;aAAM,IAAI,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;AACpD,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC,YAAsB,CAAC,CAAC;AACvC,SAAA;AACD,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KAC5B;IAED,cAAc,GAAA;AACb,QAAA,OAAO,OAAO,IAAI,CAAC,YAAY,KAAK,QAAQ,CAAC;KAC7C;IAED,wBAAwB,GAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACf,OAAO;AACP,SAAA;QACD,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;AACvC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE;AAC1B,YAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC3B,SAAA;AAAM,aAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3C,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7B,SAAA;AAAM,aAAA;AACN,YAAA,OAAO,EAAE,CAAC;AACV,SAAA;KACD;IAED,gBAAgB,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;YAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC;AACtC,SAAA;KACD;IAED,aAAa,GAAA;QACZ,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE;YACnD,OAAO;AACP,SAAA;QACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE;AAC5C,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACtB,SAAA;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;KACzB;AAED;;AAEG;IACH,aAAa,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AAAE,YAAA,OAAO,IAAI,CAAC;AAAE,SAAA;AAC7C,QAAA,OAAO,KAAK,CAAC;KACb;AAED,IAAA,KAAK,MAAM;AACX;;AAEG;AACH,IAAA,aAAa,CAAC,KAAK,EAAA;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;;;AAGxD,YAAA,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;YACzD,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,SAAA;KACD;AACD,IAAA,WAAW,CAAC,KAAK,EAAA;QAChB,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAc,CAAC,EAAE;YAChH,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,SAAA;KACD;AACD;;AAEG;AACH,IAAA,YAAY,CAAC,KAAoB,EAAA;QAChC,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACjD,YAAA,KAAK,CAAC,wBAAwB,EAAE,CAAC;AACjC,SAAA;AACD,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE;YAC3B,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;AAC1C,SAAA;aAAM,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;;;AAGrD,YAAA,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YAC1C,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAC/H,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,SAAA;KACD;AAED;;AAEG;IACH,iBAAiB,GAAA;QAChB,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AACrE,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;KACvF;AAED;;AAEG;IACH,aAAa,GAAA;AACZ,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,KAAK,OAAO,GAAG,uBAAuB,GAAG,EAAE,CAAC;AACzE,QAAA,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,YAAY,GAAG,0BAA0B,GAAG,EAAE,CAAC;AAC3E,QAAA,IAAI,CAAC,eAAe,CAAC,YAAY,CAChC,IAAI,CAAC,cAAc,CAAC,aAAa,EACjC,IAAI,CAAC,YAAY,CAAC,aAAa,EAC/B,CAAG,EAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,CAAA,EAAG,UAAU,CAAA,EAAG,aAAa,CAAA,CAAE,CAAC,CAAC;AAC5E,QAAA,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;KACpF;AAED;;;AAGG;IACH,aAAa,GAAA;;AAEZ,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;;QAExG,MAAM,QAAQ,GAAG,IAAI,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACtD,IAAI,IAAI,IAAI,QAAQ,EAAE;AACrB,YAAA,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;YACrD,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAC,YAAqB,EAAE,MAAmB,KAAI;AAC9E,gBAAA,MAAM,UAAU,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;AAClD,gBAAA,MAAM,aAAa,GAAG,EAAE,QAAQ,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;gBAC9D,OAAO,YAAY,IAAI,aAAa,CAAC;aACrC,EAAE,KAAK,CAAC,CAAC;AACV,SAAA;AAED,QAAA,OAAO,KAAK,CAAC;KACb;AAED;;AAEG;IACH,QAAQ,GAAA;;QAEP,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1C,OAAO;AACP,SAAA;AAED,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;;;AAI1B,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACvB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;AACjD,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;AAC7C,YAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,cAAc;AAC/C,iBAAA,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC;iBAC1B,SAAS,CAAC,KAAK,IAAG;AAClB,gBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;oBACnB,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,iBAAA;AACF,aAAC,CAAC,CAAC;YACJ,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,SAAA;;;QAID,UAAU,CAAC,MAAK;YACf,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE;AACtD,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACpC,aAAA;SACD,EAAE,CAAC,CAAC,CAAC;;;AAIN,QAAA,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC3E,QAAA,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7E,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC5D,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AAC5D,QAAA,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;KAC3C;AAED;;AAEG;IACH,SAAS,GAAA;;QAER,IAAI,IAAI,CAAC,YAAY,EAAE;YAAE,OAAO;AAAE,SAAA;AAClC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;;AAGlB,QAAA,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;;AAG1C,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;AAC/B,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;AAC7B,SAAA;;AAGD,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACvB,YAAA,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,CAAC;YAC1C,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,SAAA;AACD,QAAA,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC9E,QAAA,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChF,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC/D,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;KAC/D;AAED;;AAEG;IACH,UAAU,GAAA;QACT,IAAI,IAAI,CAAC,YAAY,EAAE;YACtB,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChB,SAAA;AAAM,aAAA;YACN,IAAI,CAAC,SAAS,EAAE,CAAC;AACjB,SAAA;KACD;AAEM,IAAA,UAAU,CAAC,KAAK,EAAA;QACtB,OAAO,KAAK,YAAY,WAAW,CAAC;KACpC;AAED;;AAEG;IACO,eAAe,GAAA;QACxB,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,iBAAiB,KAAK,kBAAkB,CAAC;AAC1F,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,MAAM,cAAc,IAAI,IAAI,CAAC,iBAAiB,KAAK,KAAK,CAAC,EAAE;AACpF,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;AAC5B,SAAA;KACD;;AA3mBM,QAAa,CAAA,aAAA,GAAG,CAAC,CAAC;qGADb,QAAQ,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,eAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAR,QAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAQ,EART,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,SAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,8BAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,SAAA,EAAA;AACV,QAAA;AACC,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,WAAW,EAAE,QAAQ;AACrB,YAAA,KAAK,EAAE,IAAI;AACX,SAAA;AACD,KAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EA6Ha,oBAAoB,EAxPxB,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,cAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoHT,CAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,OAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FASW,QAAQ,EAAA,UAAA,EAAA,CAAA;kBA/HpB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,4BAA4B;AACtC,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoHT,CAAA,CAAA;AACD,oBAAA,SAAS,EAAE;AACV,wBAAA;AACC,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAU,QAAA;AACrB,4BAAA,KAAK,EAAE,IAAI;AACX,yBAAA;AACD,qBAAA;AACD,iBAAA,CAAA;8KAGS,EAAE,EAAA,CAAA;sBAAV,KAAK;gBAIG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAIG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAIG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAIG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAIG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAIG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAIG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAKG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAKG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAIG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAIG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAIG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAIG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAIG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAIG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAIG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAIG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAIG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAKG,mBAAmB,EAAA,CAAA;sBAA3B,KAAK;gBAIG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAOG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBAKG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAKG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAIG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAII,QAAQ,EAAA,CAAA;sBAAjB,MAAM;gBAIG,OAAO,EAAA,CAAA;sBAAhB,MAAM;gBAIG,KAAK,EAAA,CAAA;sBAAd,MAAM;gBAK+C,IAAI,EAAA,CAAA;sBAAzD,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,oBAAoB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAIL,cAAc,EAAA,CAAA;sBAA5D,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,gBAAgB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAIA,YAAY,EAAA,CAAA;sBAAxD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAEE,SAAS,EAAA,CAAA;sBAArD,WAAW;uBAAC,8BAA8B,CAAA;gBAyM3C,SAAS,EAAA,CAAA;sBADR,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAA;;;AC/fpC;;;;;;;AAOG;AACa,SAAA,cAAc,CAAC,MAAmB,EAAE,QAAQ,EAAA;AAC3D,IAAA,OAAO,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC;SACjC,IAAI,CACJ,YAAY,CAAC,GAAG,CAAC,EACjB,GAAG,CAAC,CAAC,EAAiB,KAAI;AACzB,QAAA,IAAI,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,KAC7B,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7D,QAAA,IAAI,EAAE,EAAE;AAAE,YAAA,OAAO,EAAE,CAAC;AAAE,SAAA;AACvB,KAAC,CAAC,EACF,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAClB,CAAC;AACJ,CAAC;AAED;AACO,MAAM,SAAS,GAAG;;IAExB,IAAI,EAAE,UAAS,KAAK,EAAE,UAAU,EAAE,IAAI,GAAG,EAAE,EAAA;AAC1C,QAAA,IAAI,KAAK,CAAC;AACV,QAAA,KAAK,IAAI,CAAC,IAAI,KAAK,EAAE;YACpB,IAAI,CAAC,KAAK,UAAU,EAAE;AACrB,gBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACb,KAAK,GAAG,CAAC,CAAC;AACV,aAAA;AACD,YAAA,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE;AACtB,gBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACb,gBAAA,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC;gBACnD,IAAI,CAAC,KAAK,EAAE;oBAAE,IAAI,GAAG,EAAE,CAAC;AAAE,iBAAA;AAC1B,aAAA;AACD,SAAA;AACD,QAAA,OAAO,EAAC,KAAK,EAAE,IAAI,EAAC,CAAC;KACrB;CACD;;AClBD;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;MAqEU,YAAY,CAAA;AA0GxB;;AAEG;AACH,IAAA,WAAA,CAAmB,UAAsB,EAAY,IAAU,EAAY,MAAsB,EAAA;QAA9E,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QAAY,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAM;QAAY,IAAM,CAAA,MAAA,GAAN,MAAM,CAAgB;QA3GxF,IAAS,CAAA,SAAA,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC;AA0BzD;;AAEG;QACM,IAAO,CAAA,OAAA,GAA8B,IAAI,CAAC;AACnD;;AAEG;AACO,QAAA,IAAA,CAAA,MAAM,GAAsE,IAAI,YAAY,EAAE,CAAC;AACzG;;AAEG;AACO,QAAA,IAAA,CAAA,MAAM,GAAoC,IAAI,YAAY,EAAE,CAAC;AACvE;;;;;;;;AAQG;AACO,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,YAAY,EAAoB,CAAC;AAK5D;;;AAGG;QACM,IAAI,CAAA,IAAA,GAAuB,QAAQ,CAAC;AAE7C;;AAEG;QACM,IAAU,CAAA,UAAA,GAAG,IAAI,CAAC;AAE3B;;AAEG;QACI,IAAI,CAAA,IAAA,GAAuB,IAAI,CAAC;AAChC,QAAA,IAAA,CAAA,MAAM,GAAG,CAAW,QAAA,EAAA,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC;QAC/C,IAAe,CAAA,eAAA,GAAG,IAAI,CAAC;AAC9B;;;;AAIG;QACI,IAAY,CAAA,YAAA,GAAoB,EAAE,CAAC;AAC1C;;AAEG;QACO,IAAK,CAAA,KAAA,GAAG,CAAC,CAAC,CAAC;AAiBrB;;AAEG;QACO,IAAM,CAAA,MAAA,GAAoB,EAAE,CAAC;KAS8D;AA1GrG;;AAEG;IACH,IAAa,KAAK,CAAC,KAAoD,EAAA;AACtE,QAAA,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;YACxB,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC5B,gBAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC;AACtC,aAAA;YACD,IAAI,CAAC,WAAW,GAAG,IAAI,UAAU,CAAU,CAAC,QAAQ,KAAI;gBACvD,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAG;AAC7C,oBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACnB,oBAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACpB,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACrB,iBAAC,CAAC,CAAC;AACJ,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AACxB,SAAA;AAAM,aAAA;AACN,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACvB,SAAA;AACD,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;KAC5B;AAED,IAAA,IAAI,KAAK,GAAA;QACR,OAAO,IAAI,CAAC,cAAc,CAAC;KAC3B;AAoFD;;;AAGG;IACH,eAAe,GAAA;AACd,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClE,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,UAAU,CAAC,MAAK;AACf,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AACzB,SAAC,CAAC,CAAC;KACH;AAED;;AAEG;IACH,WAAW,GAAA;QACV,IAAI,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;AAC7B,SAAA;QACD,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAC5B,YAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC;AACtC,SAAA;KACD;IAED,YAAY,CAAC,QAAQ,GAAG,IAAI,EAAA;AAC3B,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC3B,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;AACxF,SAAA;AAAM,aAAA;;;YAGN,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;AAC1C,YAAA,QAAQ,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;AAChC,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC3B,SAAA;KACD;AAED,IAAA,SAAS,CAAC,KAAa,EAAA;AACtB,QAAA,OAAO,GAAG,IAAI,CAAC,MAAM,CAAI,CAAA,EAAA,KAAK,EAAE,CAAC;KACjC;AAED;;AAEG;AACH,IAAA,UAAU,CAAC,KAAK,EAAA;QACf,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;AACzD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,YAAY,EAAE,CAAC;KACpB;AAED;;AAEG;IACH,QAAQ,CAAC,KAAK,GAAG,EAAE,EAAA;AAClB,QAAA,IAAI,KAAK,EAAE;AACV,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;;;YAGjH,IAAI,IAAI,CAAC,YAAY,EAAE;AACtB,gBAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACf,aAAA;AACD,SAAA;AAAM,aAAA;AACN,YAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AACxC,SAAA;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;KACnB;AAED;;;AAGG;IACH,oBAAoB,GAAA;AACnB,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,OAAO;AAAE,SAAA;QAC3B,IAAI,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;AAC7B,SAAA;AACD,QAAA,IAAI,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;AACxE,QAAA,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;aAC9D,SAAS,CAAC,EAAE,IAAG;YACf,EAAE,CAAC,KAAK,EAAE,CAAC;AACZ,SAAC,CAAC,CAAC;KACJ;AAED;;AAEG;IACH,WAAW,GAAA;QACV,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;AACb,SAAA;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACrC;AAED;;AAEG;IACH,cAAc,GAAA;QACb,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC;AAC/C,aAAC,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;KACjG;AAED;;AAEG;IACH,cAAc,GAAA;;AAEb,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC;AAC5E,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACrB,YAAA,OAAO,IAAI,CAAC;AACZ,SAAA;AAED;;;;AAIG;AACH,QAAA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;;YAEtD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;AACnC,gBAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACf,gBAAA,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;AACjC,aAAA;AACD,SAAA;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;KAC3C;AAED;;AAEG;IACH,WAAW,GAAA;AACV,QAAA,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE;YACnB,IAAI,CAAC,KAAK,EAAE,CAAC;AACb,SAAA;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACrC;AAED;;AAEG;IACH,cAAc,GAAA;QACb,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;KACjF;AAED;;AAEG;IACH,cAAc,GAAA;;AAEb,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC;AAC5E,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACrB,YAAA,OAAO,IAAI,CAAC;AACZ,SAAA;AAED;;;;AAIG;QACH,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;;YAE3D,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;AACnC,gBAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACf,gBAAA,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;AACjC,aAAA;AACD,SAAA;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC;KAC1C;AAED;;AAEG;IACH,cAAc,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE;AACnB,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAC5B,SAAA;QACD,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACrC;AAED;;AAEG;IACH,iBAAiB,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE;AACnB,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,aAAa,CAAC;AAChD,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC;KAChE;AAED;;AAEG;IACH,YAAY,GAAA;QACX,OAAO,IAAI,CAAC,MAAM,CAAC;KACnB;AAED;;AAEG;IACH,WAAW,GAAA;AACV,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;AACjE,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,YAAA,OAAO,EAAE,CAAC;AACV,SAAA;AACD,QAAA,OAAO,QAAQ,CAAC;KAChB;AAED;;AAEG;AACH,IAAA,iBAAiB,CAAC,KAAsB,EAAA;;AAEvC,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC1B,YAAA,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAsD,mDAAA,EAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA,CAAE,CAAC,CAAC;AACrH,SAAA;AACD,QAAA,IAAI,CAAC,YAAY,CAAC,MAAK;YACtB,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAC5B,YAAA,KAAK,IAAI,OAAO,IAAI,KAAK,EAAE;AAC1B,gBAAA,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE;;oBAEhC,IAAI,WAAW,GAAsB,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;;oBAEhE,OAAO,WAAW,CAAC,QAAQ,CAAC;;AAE5B,oBAAA,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;;AAE1C,oBAAA,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACnC,iBAAA;AACD,aAAA;;AAGD,YAAA,KAAK,IAAI,OAAO,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;;AAExC,gBAAA,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;AAClC,oBAAA,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;oBACzB,SAAS;AACT,iBAAA;;gBAGD,IAAI,WAAW,GAAsB,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;;gBAEhE,OAAO,WAAW,CAAC,QAAQ,CAAC;;AAE5B,gBAAA,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AAC1C,gBAAA,KAAK,IAAI,eAAe,IAAI,gBAAgB,EAAE;;AAE7C,oBAAA,IAAI,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;AAC1C,wBAAA,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;;wBAExB,MAAM;AACN,qBAAA;AAAM,yBAAA;AACN,wBAAA,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC;AACzB,qBAAA;AACD,iBAAA;AACD,aAAA;AACF,SAAC,CAAC,CAAC;KACH;AAED;;AAEG;IACH,SAAS,GAAA;AACR,QAAA,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE;YACnB,IAAI,CAAC,WAAW,EAAE,CAAC;AACnB,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAChC,UAAU,CAAC,MAAK;YACf,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnD,SAAC,CAAC,CAAC;KACH;IAED,WAAW,GAAA;;;;AAIV,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,IAAI,QAAQ,CAAC,MAAM,EAAE;AACpB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,SAAA;AAAM,aAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;YACjC,IAAI,CAAC,cAAc,EAAE,CAAC;AACtB,SAAA;KACD;AAED;;AAEG;AACH,IAAA,YAAY,CAAC,KAAoB,EAAA;QAChC,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;AAC/C,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,aAAa,KAAK,KAAK,CAAC,MAAM,CAAC,EAAE;gBAC/E,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,aAAA;AACD,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE;gBAC1B,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AAC3C,aAAA;AACD,SAAA;aAAM,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;YAChE,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,YAAA,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,EAAE;AAC9B,gBAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;AAC1B,oBAAA,IAAI,CAAC,cAAc,EAAE,EAAE,cAAc,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AACxD,iBAAA;AAAM,qBAAA;AACN,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC/B,iBAAA;AACD,aAAA;AAAM,iBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;AACnC,gBAAA,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;AAC1B,oBAAA,IAAI,CAAC,cAAc,EAAE,CAAC,cAAc,CAAC,EAAG,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;AAC5D,iBAAA;AAAM,qBAAA;AACN,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5B,iBAAA;AACD,aAAA;YACD,UAAU,CAAC,MAAK;gBACf,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnD,aAAC,CAAC,CAAC;AACH,SAAA;KACD;AAED;;AAEG;IACH,OAAO,CAAC,KAAK,EAAE,IAAI,EAAA;QAClB,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,QAAA,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC3B,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;AAChC,YAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC3B,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;;AAErB,gBAAA,KAAK,IAAI,SAAS,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;oBAC1C,IAAI,IAAI,KAAK,SAAS,EAAE;AAAE,wBAAA,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC;AAAE,qBAAA;AACvD,iBAAA;AACD,aAAA;AAAM,iBAAA;AACN,gBAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC/B,aAAA;YACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClD,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACzB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AACnB,SAAA;KACD;AAED,IAAA,WAAW,CAAC,KAAK,EAAA;AAChB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC;AACpE,QAAA,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;AAC/D,QAAA,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;KACrB;AAED,IAAA,UAAU,CAAC,KAAK,EAAA;AACf,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC;AACpE,QAAA,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC;AAClE,QAAA,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;KACtB;AAED;;AAEG;AACH,IAAA,UAAU,CAAC,KAAK,EAAA;QACf,MAAM,KAAK,GAAY,KAAK,CAAC,UAAU,CAAC,SAAS,KAAK,CAAC,CAAC;AACxD,QAAA,MAAM,QAAQ,GAAY,KAAK,CAAC,UAAU,CAAC,YAAY,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,KAAK,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC;QACvH,MAAM,iBAAiB,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AACrD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;KACpC;AAED;;AAEG;AACH,IAAA,YAAY,CAAC,WAAuB,EAAA;;QAEnC,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;KACpE;IAED,eAAe,CAAC,SAAS,GAAG,IAAI,EAAA;AAC/B,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACnG,QAAA,IAAI,SAAS,EAAE;YACd,UAAU,CAAC,MAAK;gBACf,IAAI,CAAC,WAAW,EAAE,CAAC;gBACnB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnD,aAAC,CAAC,CAAC;AACH,SAAA;KACD;;AA1eM,YAAS,CAAA,SAAA,GAAG,CAAC,CAAC;yGADT,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAF,IAAA,CAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAZ,YAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EAPb,QAAA,EAAA,sCAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,MAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,SAAA,EAAA;AACV,QAAA;AACC,YAAA,OAAO,EAAE,oBAAoB;AAC7B,YAAA,WAAW,EAAE,YAAY;AACzB,SAAA;KACD,EAhES,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DH,OAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAG,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;2FAQK,YAAY,EAAA,UAAA,EAAA,CAAA;kBApExB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,sCAAsC;AAChD,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DH,OAAA,CAAA;AACP,oBAAA,SAAS,EAAE;AACV,wBAAA;AACC,4BAAA,OAAO,EAAE,oBAAoB;AAC7B,4BAAA,WAAW,EAAc,YAAA;AACzB,yBAAA;AACD,qBAAA;AACD,iBAAA,CAAA;mJAGS,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAIO,KAAK,EAAA,CAAA;sBAAjB,KAAK;gBAyBG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAII,MAAM,EAAA,CAAA;sBAAf,MAAM;gBAIG,MAAM,EAAA,CAAA;sBAAf,MAAM;gBAUG,UAAU,EAAA,CAAA;sBAAnB,MAAM;gBAI8B,IAAI,EAAA,CAAA;sBAAxC,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAK1B,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBAKG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAqB8B,eAAe,EAAA,CAAA;sBAAlD,YAAY;uBAAC,UAAU,CAAA;;;MC3LZ,cAAc,CAAA;AA+B1B,IAAA,WAAA,CAAsB,UAAsB,EAAA;QAAtB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;AA9B5C;;AAEG;QACM,IAAe,CAAA,eAAA,GAAW,IAAI,CAAC;AACxC;;AAEG;QACM,IAAa,CAAA,aAAA,GAAG,IAAI,CAAC;AAS9B;;;AAGG;QACM,IAAQ,CAAA,QAAA,GAAG,EAAE,CAAC;QAMb,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;QACpB,IAAa,CAAA,aAAA,GAAG,KAAK,CAAC;AACtB,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;KAEC;AAEhD,IAAA,WAAW,CAAC,OAAsB,EAAA;QACjC,IAAI,OAAO,CAAC,aAAa,EAAE;AAC1B,YAAA,IAAI,OAAO,CAAC,aAAa,CAAC,YAAY,EAAE;gBACvC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;gBACpC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;gBAC3C,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AAC7C,gBAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,gBAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC1B,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC1B,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzB,UAAU,CAAC,MAAK;oBACf,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC1B,iBAAC,CAAC,CAAC;AACH,aAAA;AAAM,iBAAA;gBACN,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;gBAC3C,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AAC7C,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;gBAC3B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;gBAC9B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;AAChC,gBAAA,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACxC,aAAA;AACD,SAAA;KACD;IAED,eAAe,GAAA;QACd,IAAI,IAAI,CAAC,eAAe,EAAE;AACzB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAC9E,SAAA;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9E,QAAA,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9E,QAAA,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;AAClF,QAAA,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;KAClF;IAEM,kBAAkB,GAAA;QACxB,IAAI,IAAI,CAAC,aAAa,EAAE;YACvB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa,CAAC;AAC9D,YAAA,MAAM,aAAa,GAAG,SAAS,CAAC,qBAAqB,EAAE,CAAC;AACxD,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC;AAClF,YAAA,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;;;AAG3F,YAAA,MAAM,MAAM,GAAG,eAAe,GAAG,eAAe,GAAG,EAAE,CAAC;YACtD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAA,EAAG,MAAM,CAAA,EAAA,CAAI,CAAC;AACvC,SAAA;KACD;IAES,iBAAiB,GAAA;AAC1B,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;AACxD,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC;AAC5D,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE;YAC9B,IAAI,IAAI,CAAC,WAAW,EAAE;gBACrB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAG,EAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,cAAc,CAAA,EAAA,CAAI,CAAC;AACtF,aAAA;YACD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AAC3C,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACzB,SAAA;aAAM,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YAC1D,IAAI,IAAI,CAAC,aAAa,EAAE;gBACvB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAG,EAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,gBAAgB,CAAA,EAAA,CAAI,CAAC;AACxF,aAAA;YACD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AAC7C,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;AAC3B,SAAA;AAAM,aAAA;AACN,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBACtB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAG,EAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,cAAc,CAAA,EAAA,CAAI,CAAC;AACtF,aAAA;AACD,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBACxB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAG,EAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,gBAAgB,CAAA,EAAA,CAAI,CAAC;AACxF,aAAA;YACD,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;YAC3C,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AAC7C,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;AACxB,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,SAAA;KACD;AAGS,IAAA,OAAO,CAAC,KAAK,EAAA;AACtB,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YACrB,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC;AACrC,SAAA;AAAM,aAAA;YACN,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC;AACrC,SAAA;;QAED,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,EAAE;YACnF,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,KAAK,CAAC,eAAe,EAAE,CAAC;AACxB,SAAA;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;KACzB;AAGS,IAAA,YAAY,CAAC,KAAK,EAAA;AAC3B,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACrB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAC1C,SAAA;KACD;AAGS,IAAA,WAAW,CAAC,KAAK,EAAA;QAC1B,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,KAAK,CAAC,eAAe,EAAE,CAAC;AACxB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACrB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC/B,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC;AACtD,YAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC;YAC/B,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,SAAA;KACD;IAES,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAA;AACvC,QAAA,IAAI,QAAQ,EAAE;AACb,YAAA,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC,MAAK;AAC3C,gBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC;gBAC9B,IAAI,CAAC,iBAAiB,EAAE,CAAC;aACzB,EAAE,CAAC,CAAC,CAAC;AACN,SAAA;AAAM,aAAA;AACN,YAAA,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AACxC,SAAA;KACD;AAES,IAAA,SAAS,CAAC,QAAQ,EAAA;;;;QAI3B,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;KACjC;AAES,IAAA,WAAW,CAAC,QAAQ,EAAA;AAC7B,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;KAChC;AAGS,IAAA,SAAS,CAAC,KAAK,EAAA;QACxB,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE;YACzD,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,SAAA;KACD;;2GA3KW,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;+FAAd,cAAc,EAAA,QAAA,EAAA,0CAAA,EAAA,MAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,eAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,0CAA0C;AACpD,oBAAA,QAAQ,EAAE,iBAAiB;AAC3B,iBAAA,CAAA;iGAKS,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBAIG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAIG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAIG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBAKG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBA0FI,OAAO,EAAA,CAAA;sBADhB,YAAY;uBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAgBvB,YAAY,EAAA,CAAA;sBADrB,YAAY;uBAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAQ5B,WAAW,EAAA,CAAA;sBADpB,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAA;gBAmC3B,SAAS,EAAA,CAAA;sBADlB,YAAY;uBAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,CAAA;;;MC9IvB,cAAc,CAAA;;2GAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAd,cAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,iBArBzB,QAAQ;QACR,YAAY;QACZ,cAAc;AACd,QAAA,oBAAoB,aASpB,YAAY;QACZ,WAAW;QACX,UAAU;QACV,iBAAiB;QACjB,WAAW;AACX,QAAA,UAAU,aAXV,QAAQ;QACR,YAAY;QACZ,cAAc;QACd,oBAAoB,CAAA,EAAA,CAAA,CAAA;AAYT,cAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,EAFf,SAAA,EAAA,CAAE,eAAe,CAAE,YAP7B,YAAY;QACZ,WAAW;QACX,UAAU;QACV,iBAAiB;QACjB,WAAW;QACX,UAAU,CAAA,EAAA,CAAA,CAAA;2FAIC,cAAc,EAAA,UAAA,EAAA,CAAA;kBAvB1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,YAAY,EAAE;wBACb,QAAQ;wBACR,YAAY;wBACZ,cAAc;wBACd,oBAAoB;AACpB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACR,QAAQ;wBACR,YAAY;wBACZ,cAAc;wBACd,oBAAoB;AACpB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACR,YAAY;wBACZ,WAAW;wBACX,UAAU;wBACV,iBAAiB;wBACjB,WAAW;wBACX,UAAU;AACV,qBAAA;oBACD,SAAS,EAAE,CAAE,eAAe,CAAE;AAC9B,iBAAA,CAAA;;;ACrCD;;AAEG;;;;"}
|