{"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' && !(skeleton && fluid),\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--readonly': readonly,\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\t'cds--list-box--invalid': invalid\n\t\t}\"\n\t\t[attr.data-invalid]=\"invalid ? true : null\">\n\t\t<div *ngIf=\"skeleton && fluid\" class=\"cds--list-box__label\"></div>\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 || readonly ? $event.stopPropagation() : toggleMenu()\"\n\t\t\t(focus)=\"fluid ? handleFocus($event) : null\"\n\t\t\t(blur)=\"fluid ? handleFocus($event) : 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<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<svg\n\t\t\t*ngIf=\"invalid\"\n\t\t\tclass=\"cds--list-box__invalid-icon\"\n\t\t\tcdsIcon=\"warning--filled\"\n\t\t\tsize=\"16\">\n\t\t</svg>\n\t\t<svg\n\t\t\t*ngIf=\"!invalid && warn\"\n\t\t\tcdsIcon=\"warning--alt--filled\"\n\t\t\tsize=\"16\"\n\t\t\tclass=\"cds--list-box__invalid-icon cds--list-box__invalid-icon--warning\">\n\t\t</svg>\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<hr *ngIf=\"fluid\" class=\"cds--list-box__divider\" />\n\t<div\n\t\t*ngIf=\"helperText && !invalid && !warn && !skeleton && !fluid\"\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@HostBinding(\"class.cds--list-box__wrapper--fluid--invalid\") get fluidInvalidClass() {\n\t\treturn this.invalid && this.fluid;\n\t}\n\n\t@HostBinding(\"class.cds--list-box__wrapper--fluid--focus\") get fluidFocusClass() {\n\t\treturn this.fluid && this._isFocused && this.menuIsClosed;\n\t}\n\n\tprotected get writtenValue() {\n\t\treturn this._writtenValue;\n\t}\n\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@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 readonly state.\n\t */\n\t@Input() readonly = 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\n\t@HostBinding(\"class.cds--list-box__wrapper\") hostWrapperClass = true;\n\t/**\n\t * Experimental: enable fluid state\n\t */\n\t@HostBinding(\"class.cds--list-box__wrapper--fluid\") @Input() fluid = false;\n\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\tprotected _isFocused = false;\n\n\t// primarily used to capture and propagate input to `writeValue` before the content is available\n\tprivate _writtenValue: any = [];\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 (this.readonly) {\n\t\t\treturn;\n\t\t}\n\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\thandleFocus(event: FocusEvent) {\n\t\tthis._isFocused = event.type === \"focus\";\n\t\tif (event.type === \"blur\") {\n\t\t\tthis.onBlur();\n\t\t}\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=\"0\"\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.tabindex]=\"highlightedItem === getItemId(i) ? 0 : null\"\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.index < 0 && 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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"}