@mathstack/ui 0.0.1-beta.1 → 0.0.1-beta.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/README.md +9 -0
- package/fesm2022/mathstack-ui.mjs +175 -176
- package/fesm2022/mathstack-ui.mjs.map +1 -1
- package/package.json +7 -7
- package/types/mathstack-ui.d.ts +618 -0
- package/index.d.ts +0 -5
- package/lib/combobox/combobox-label/combobox-label.component.d.ts +0 -11
- package/lib/combobox/combobox.component.d.ts +0 -20
- package/lib/combobox/combobox.module.d.ts +0 -15
- package/lib/combobox/combobox.service.d.ts +0 -124
- package/lib/combobox/editable-textbox/editable-textbox.component.d.ts +0 -39
- package/lib/combobox/index.d.ts +0 -11
- package/lib/combobox/listbox/active-index.service.d.ts +0 -32
- package/lib/combobox/listbox/listbox-filtering.service.d.ts +0 -12
- package/lib/combobox/listbox/listbox-scroll.service.d.ts +0 -11
- package/lib/combobox/listbox/listbox.component.d.ts +0 -58
- package/lib/combobox/listbox-group/listbox-group.component.d.ts +0 -16
- package/lib/combobox/listbox-label/listbox-label.component.d.ts +0 -12
- package/lib/combobox/listbox-option/listbox-option.component.d.ts +0 -52
- package/lib/combobox/select-all-listbox-option/select-all-listbox-option.component.d.ts +0 -24
- package/lib/combobox/textbox/textbox.component.d.ts +0 -41
- package/lib/directory/directory.component.d.ts +0 -44
- package/lib/directory/index.d.ts +0 -1
- package/lib/table/index.d.ts +0 -4
- package/lib/table/single-sort-header/single-sort-header.component.d.ts +0 -9
- package/lib/table/table-column.d.ts +0 -53
- package/lib/table/table.component.d.ts +0 -27
- package/lib/table/table.config.d.ts +0 -5
- package/lib/table/table.module.d.ts +0 -11
- package/lib/tabs/index.d.ts +0 -6
- package/lib/tabs/tab-body.component.d.ts +0 -8
- package/lib/tabs/tab-content.directive.d.ts +0 -15
- package/lib/tabs/tab-item.component.d.ts +0 -16
- package/lib/tabs/tab-label.component.d.ts +0 -10
- package/lib/tabs/tabs.component.d.ts +0 -24
- package/lib/tabs/tabs.module.d.ts +0 -11
- package/lib/tabs/tabs.service.d.ts +0 -9
- package/public-api.d.ts +0 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mathstack-ui.mjs","sources":["../../../libs/ui/src/lib/combobox/listbox-option/listbox-option.component.ts","../../../libs/ui/src/lib/combobox/listbox-option/listbox-option.component.html","../../../libs/ui/src/lib/combobox/listbox-label/listbox-label.component.ts","../../../libs/ui/src/lib/combobox/listbox-label/listbox-label.component.html","../../../libs/ui/src/lib/combobox/listbox-group/listbox-group.component.ts","../../../libs/ui/src/lib/combobox/listbox/listbox-filtering.service.ts","../../../libs/ui/src/lib/combobox/listbox/listbox-scroll.service.ts","../../../libs/ui/src/lib/combobox/listbox/active-index.service.ts","../../../libs/ui/src/lib/combobox/listbox/listbox.component.ts","../../../libs/ui/src/lib/combobox/listbox/listbox.component.html","../../../libs/ui/src/lib/combobox/select-all-listbox-option/select-all-listbox-option.component.ts","../../../libs/ui/src/lib/combobox/combobox.service.ts","../../../libs/ui/src/lib/combobox/combobox-label/combobox-label.component.ts","../../../libs/ui/src/lib/combobox/combobox.component.ts","../../../libs/ui/src/lib/combobox/combobox.component.html","../../../libs/ui/src/lib/combobox/textbox/textbox.component.ts","../../../libs/ui/src/lib/combobox/textbox/textbox.component.html","../../../libs/ui/src/lib/combobox/editable-textbox/editable-textbox.component.ts","../../../libs/ui/src/lib/combobox/editable-textbox/editable-textbox.component.html","../../../libs/ui/src/lib/combobox/combobox.module.ts","../../../libs/ui/src/lib/directory/directory.component.ts","../../../libs/ui/src/lib/directory/directory.component.html","../../../libs/ui/src/lib/table/table-column.ts","../../../libs/ui/src/lib/table/single-sort-header/single-sort-header.component.ts","../../../libs/ui/src/lib/table/single-sort-header/single-sort-header.component.html","../../../libs/ui/src/lib/table/table.component.ts","../../../libs/ui/src/lib/table/table.component.html","../../../libs/ui/src/lib/table/table.config.ts","../../../libs/ui/src/lib/table/table.module.ts","../../../libs/ui/src/lib/tabs/tab-content.directive.ts","../../../libs/ui/src/lib/tabs/tab-body.component.ts","../../../libs/ui/src/lib/tabs/tab-label.component.ts","../../../libs/ui/src/lib/tabs/tabs.service.ts","../../../libs/ui/src/lib/tabs/tab-item.component.ts","../../../libs/ui/src/lib/tabs/tabs.component.ts","../../../libs/ui/src/lib/tabs/tabs.component.html","../../../libs/ui/src/lib/tabs/tabs.module.ts","../../../libs/ui/src/public-api.ts","../../../libs/ui/src/mathstack-ui.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n Component,\n ElementRef,\n Input,\n OnChanges,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { ComboboxService } from '../combobox.service';\n\nexport interface ListboxOptionPropertyChange {\n property: 'selected' | 'disabled';\n value: boolean;\n comboboxId: string;\n id: number;\n optionValue: string | number | boolean;\n}\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: 'hsi-ui-listbox-option',\n imports: [CommonModule],\n templateUrl: './listbox-option.component.html',\n styleUrls: ['./listbox-option.component.scss'],\n})\nexport class ListboxOptionComponent implements OnChanges {\n @ViewChild('label') label: ElementRef<HTMLDivElement>;\n @ViewChild('option') template: TemplateRef<unknown>;\n @Input() boxDisplayLabel: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n @Input() value: any;\n /** Whether the option is selected.\n * If this property is changed during this component's lifecycle, no new value will be emitted from the listbox.\n * Box label and select all button will respond to changes.\n * @default false\n */\n @Input() selected = false;\n /** Whether the option is selected.\n * If this property is changed during this component's lifecycle, no new value will be emitted from the listbox.\n * Box label and select all button will respond to changes.\n * @default false\n */\n @Input() disabled = false;\n @Input() ariaLabel: string;\n id = nextUniqueId++;\n // Only used for to update styles on change in listbox.component.html\n protected _selected: BehaviorSubject<boolean> = new BehaviorSubject(false);\n selected$ = this._selected.asObservable();\n private _disabled: BehaviorSubject<boolean> = new BehaviorSubject(false);\n disabled$ = this._disabled.asObservable();\n private externalPropertyChanges: BehaviorSubject<ListboxOptionPropertyChange> =\n new BehaviorSubject(null);\n externalPropertyChanges$ = this.externalPropertyChanges.asObservable();\n\n constructor(protected service: ComboboxService) {}\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n get valueToEmit(): any | string {\n return this.value || this.label?.nativeElement?.innerText.trim();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['disabled']) {\n this.updateDisabled(this.disabled);\n\n if (!this.isFirstChangeAndValueIsFalse(changes, 'disabled')) {\n this.externalPropertyChanges.next(this.getPropertyChange('disabled'));\n }\n }\n\n if (changes['selected']) {\n if (changes['selected'].isFirstChange()) {\n this.updateSelected(this.selected);\n if (this.selected) {\n this.externalPropertyChanges.next(this.getPropertyChange('selected'));\n }\n } else if (!this.disabled && this.selected !== this._selected.value) {\n this.updateSelected(this.selected);\n this.externalPropertyChanges.next(this.getPropertyChange('selected'));\n }\n }\n }\n\n isFirstChangeAndValueIsFalse(\n change: SimpleChanges,\n property: 'selected' | 'disabled'\n ): boolean {\n return change[property].isFirstChange() && !this[property];\n }\n\n getPropertyChange(\n property: 'selected' | 'disabled'\n ): ListboxOptionPropertyChange {\n return {\n property,\n value: this[property],\n comboboxId: this.service.id,\n id: this.id,\n optionValue: this.valueToEmit,\n };\n }\n\n protected updateSelected(selected: boolean): void {\n this._selected.next(selected);\n }\n\n private updateDisabled(disabled: boolean): void {\n this._disabled.next(disabled);\n }\n\n select(): void {\n if (!this._disabled.value) {\n this.updateSelected(true);\n }\n }\n\n deselect(): void {\n if (!this._disabled.value) {\n this.updateSelected(false);\n }\n }\n\n toggleSelected(): void {\n this.updateSelected(!this._selected.value);\n }\n\n isSelected(): boolean {\n return this._selected.value;\n }\n\n isDisabled(): boolean {\n return this._disabled.value;\n }\n}\n","<ng-template #option>\n <div class=\"hsi-ui-listbox-option-container\">\n @if (isSelected()) {\n <ng-container *ngTemplateOutlet=\"selectedIcon\"></ng-container>\n } @else {\n <ng-container *ngTemplateOutlet=\"unselectedIcon\"></ng-container>\n }\n <div\n #label\n class=\"hsi-ui-listbox-option-label\"\n [attr.aria-label]=\"ariaLabel\"\n ><ng-content></ng-content\n ></div>\n </div>\n</ng-template>\n\n<ng-template #selectedIcon\n ><ng-content select=\"[selectedIcon]\"></ng-content>\n</ng-template>\n<ng-template #unselectedIcon\n ><ng-content select=\"[unselectedIcon]\"></ng-content>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, TemplateRef, ViewChild } from '@angular/core';\nimport { ComboboxService } from '../combobox.service';\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: 'hsi-ui-listbox-label',\n imports: [CommonModule],\n templateUrl: './listbox-label.component.html',\n styleUrls: ['./listbox-label.component.scss'],\n host: {\n class: 'hsi-ui-listbox-label',\n },\n})\nexport class ListboxLabelComponent {\n @ViewChild('label') labelContent: TemplateRef<unknown>;\n @ViewChild('text') label: ElementRef<HTMLParagraphElement>;\n id: string;\n\n constructor(private service: ComboboxService) {\n this.id = `${this.service.id}-listbox-label-${nextUniqueId++}`;\n }\n}\n","<ng-template #label let-hasWrapper=\"hasWrapper\">\n <p\n class=\"hsi-ui-listbox-label\"\n [attr.id]=\"hasWrapper ? null : id\"\n role=\"presentation\"\n #text\n >\n <ng-content></ng-content>\n </p>\n</ng-template>\n","import {\n AfterContentInit,\n Component,\n ContentChild,\n ContentChildren,\n QueryList,\n} from '@angular/core';\nimport { Observable, map, startWith } from 'rxjs';\nimport { ComboboxService } from '../combobox.service';\nimport { ListboxLabelComponent } from '../listbox-label/listbox-label.component';\nimport { ListboxOptionComponent } from '../listbox-option/listbox-option.component';\n\n@Component({\n selector: 'hsi-ui-listbox-group',\n template: `<ng-content></ng-content>`,\n host: {\n class: 'hsi-ui-listbox-group',\n },\n})\nexport class ListboxGroupComponent implements AfterContentInit {\n @ContentChild(ListboxLabelComponent)\n label: ListboxLabelComponent;\n @ContentChildren(ListboxOptionComponent)\n options: QueryList<ListboxOptionComponent>;\n options$: Observable<ListboxOptionComponent[]>;\n\n constructor(public service: ComboboxService) {}\n\n ngAfterContentInit(): void {\n this.options$ = this.options.changes.pipe(\n startWith(''),\n map(() => this.options.toArray())\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ListboxOptionComponent } from '../listbox-option/listbox-option.component';\n\n@Injectable()\nexport class ListboxFilteringService {\n searchTimeout: ReturnType<typeof setTimeout>;\n searchString: string;\n\n updateSearchString(char: string): void {\n if (typeof this.searchTimeout === 'number') {\n clearTimeout(this.searchTimeout);\n }\n\n this.searchTimeout = setTimeout(() => {\n this.searchString = '';\n }, 500);\n\n this.searchString += char;\n }\n\n resetSearch(): void {\n clearTimeout(this.searchTimeout);\n this.searchString = '';\n }\n\n getIndexByLetter(\n options: ListboxOptionComponent[],\n searchString: string,\n startIndex: number\n ): number {\n const orderedOptions = [\n ...options.slice(startIndex),\n ...options.slice(0, startIndex),\n ];\n const firstMatch = this.filterOptionsBySearchString(\n orderedOptions,\n searchString\n )[0];\n const allSameLetter = (array: string[]) =>\n array.every((letter) => letter === array[0]);\n\n if (firstMatch) {\n return options.indexOf(firstMatch);\n } else if (allSameLetter(searchString.split(''))) {\n const matches = this.filterOptionsBySearchString(\n orderedOptions,\n searchString[0]\n );\n return options.indexOf(matches[0]);\n } else {\n return -1;\n }\n }\n\n filterOptionsBySearchString(\n options: ListboxOptionComponent[] = [],\n searchString: string,\n exclude: ListboxOptionComponent[] = []\n ): ListboxOptionComponent[] {\n return options.filter((option) => {\n const matches =\n option.label?.nativeElement.innerText\n .toLowerCase()\n .indexOf(searchString.toLowerCase()) === 0;\n return (\n matches &&\n exclude\n .map((x) => x.label?.nativeElement.innerText)\n .indexOf(option.label?.nativeElement.innerText) < 0\n );\n });\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable } from '@angular/core';\n\n@Injectable()\nexport class ListboxScrollService {\n constructor(@Inject(DOCUMENT) private document: Document) {}\n\n isElementInView(element: HTMLElement): boolean {\n const bounding = element.getBoundingClientRect();\n\n return (\n bounding.top >= 0 &&\n bounding.left >= 0 &&\n bounding.bottom <=\n (window.innerHeight || this.document.documentElement.clientHeight) &&\n bounding.right <=\n (window.innerWidth || this.document.documentElement.clientWidth)\n );\n }\n\n isScrollable(element: HTMLElement): boolean {\n return element && element.parentElement.clientHeight < element.scrollHeight;\n }\n\n maintainElementVisibility(\n activeElement: HTMLElement,\n scrollParent: HTMLElement\n ): void {\n const { offsetHeight, offsetTop } = activeElement;\n const { offsetHeight: parentOffsetHeight, scrollTop } = scrollParent;\n\n const isAbove = offsetTop < scrollTop;\n const isBelow = offsetTop + offsetHeight > scrollTop + parentOffsetHeight;\n\n if (isAbove) {\n scrollParent.scrollTo(0, offsetTop);\n } else if (isBelow) {\n scrollParent.scrollTo(0, offsetTop - parentOffsetHeight + offsetHeight);\n }\n }\n\n scrollToTop(scrollParent: HTMLElement): void {\n scrollParent.scrollTo(0, 0);\n }\n}\n","import { DestroyRef, ElementRef, Injectable } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n BehaviorSubject,\n distinctUntilChanged,\n map,\n Observable,\n withLatestFrom,\n} from 'rxjs';\nimport {\n AutoComplete,\n ComboboxService,\n FocusTextbox,\n OptionAction,\n} from '../combobox.service';\nimport { ListboxOptionComponent } from '../listbox-option/listbox-option.component';\nimport { ListboxFilteringService } from './listbox-filtering.service';\nimport { ListboxScrollService } from './listbox-scroll.service';\n\n@Injectable()\nexport class ActiveIndexService {\n private activeIndex = new BehaviorSubject<number | null>(null);\n activeIndex$ = this.activeIndex.asObservable().pipe(distinctUntilChanged());\n scrollContentRef: ElementRef<HTMLDivElement>;\n\n constructor(\n private service: ComboboxService,\n private filtering: ListboxFilteringService,\n private scrolling: ListboxScrollService\n ) {}\n\n init(\n allOptions$: Observable<ListboxOptionComponent[]>,\n destroyRef: DestroyRef\n ): void {\n this.listenToActions(allOptions$, destroyRef);\n this.initActiveId();\n this.setActiveDescendant();\n }\n\n setScrollContentRef(scrollContentRef: ElementRef): void {\n this.scrollContentRef = scrollContentRef;\n }\n\n initActiveId(): void {\n if (!this.service.nullActiveIdOnClose) {\n this.activeIndex.next(0);\n }\n }\n\n listenToActions(\n allOptions$: Observable<ListboxOptionComponent[]>,\n destroyRef: DestroyRef\n ): void {\n this.service.optionAction$\n .pipe(\n takeUntilDestroyed(destroyRef),\n withLatestFrom(this.activeIndex$, allOptions$)\n )\n .subscribe(([action, activeIndex, options]) => {\n if (!this.actionIsTypingChar(action)) {\n if (\n action === OptionAction.last ||\n action === OptionAction.next ||\n action === OptionAction.pageDown\n ) {\n this.setNextActiveIndex(action, activeIndex, options);\n } else if (\n action === OptionAction.first ||\n action === OptionAction.pageUp ||\n action === OptionAction.previous\n ) {\n this.setPrevActiveIndex(action, activeIndex, options);\n } else if (action === OptionAction.zeroActiveIndex) {\n this.setActiveIndex(0, OptionAction.next, options);\n } else if (action === OptionAction.nullActiveIndex) {\n // should only be emitted from editable textboxes\n if (this.service.nullActiveIdOnClose) {\n this.setActiveIndex(null, OptionAction.next, options);\n }\n }\n } else if (action.length === 1) {\n this.updateActiveIndexFromKeyChar(action, options);\n }\n });\n }\n\n private setNextActiveIndex(\n action: OptionAction,\n activeIndex: number | null,\n options: ListboxOptionComponent[]\n ): void {\n const maxIndex = options.length - 1;\n if (activeIndex === null && action === OptionAction.next) {\n this.setActiveIndex(0, OptionAction.next, options);\n } else {\n this.setActiveIndex(\n this.getIndexForAction(activeIndex, maxIndex, action),\n OptionAction.next,\n options\n );\n }\n }\n\n private setPrevActiveIndex(\n action: OptionAction,\n activeIndex: number | null,\n options: ListboxOptionComponent[]\n ) {\n const maxIndex = options.length - 1;\n this.setActiveIndex(\n this.getIndexForAction(activeIndex, maxIndex, action),\n OptionAction.previous,\n options\n );\n }\n\n setActiveIndex(\n index: number | null,\n actionIfDisabled: OptionAction.next | OptionAction.previous | null,\n options: ListboxOptionComponent[],\n scrollToIndex = true\n ): void {\n if (index === this.activeIndex.value) return;\n if (index === null || options.every((x) => x.isDisabled())) {\n this.handleActiveIndexWhenCannotBeSet();\n } else {\n let attempt = index;\n while (actionIfDisabled && options[attempt]?.isDisabled()) {\n if (actionIfDisabled === OptionAction.next) {\n if (attempt === options.length - 1) {\n attempt = 0;\n } else {\n attempt++;\n }\n } else if (actionIfDisabled === OptionAction.previous) {\n if (attempt === 0) {\n attempt = options.length - 1;\n } else {\n attempt--;\n }\n }\n }\n if (\n attempt >= 0 &&\n attempt < options.length &&\n !options[attempt]?.isDisabled()\n ) {\n if (scrollToIndex) {\n this.handleScrollingForNewIndex(attempt, options);\n }\n this.activeIndex.next(attempt);\n } else {\n this.handleActiveIndexWhenCannotBeSet();\n }\n }\n }\n\n handleActiveIndexWhenCannotBeSet(): void {\n this.service.emitTextboxFocus(FocusTextbox.includeMobile);\n if (this.service.autoComplete !== AutoComplete.none) {\n this.activeIndex.next(null);\n }\n }\n\n private handleScrollingForNewIndex(\n index: number,\n options: ListboxOptionComponent[]\n ): void {\n const indexEl = options[index].label?.nativeElement.parentElement;\n if (indexEl && this.scrollContentRef.nativeElement) {\n if (this.scrolling.isScrollable(this.scrollContentRef.nativeElement)) {\n this.scrolling.maintainElementVisibility(\n indexEl,\n this.scrollContentRef.nativeElement\n );\n }\n if (!this.scrolling.isElementInView(indexEl)) {\n indexEl.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n }\n }\n\n private getIndexForAction(\n currentIndex: number | null,\n maxIndex: number,\n action: OptionAction | string\n ): number {\n const pageSize = 10; // used for pageup/pagedown\n const loop = this.service.autoComplete !== AutoComplete.none;\n const validIndex = currentIndex ?? 0;\n const previous = () => {\n if (loop) {\n return validIndex === 0 ? maxIndex : validIndex - 1;\n } else {\n return Math.max(0, validIndex - 1);\n }\n };\n const next = () => {\n if (loop) {\n return validIndex === maxIndex ? 0 : validIndex + 1;\n } else {\n return Math.min(maxIndex, validIndex + 1);\n }\n };\n\n switch (action) {\n case OptionAction.first:\n return 0;\n case OptionAction.last:\n return maxIndex;\n case OptionAction.previous:\n return previous();\n case OptionAction.next:\n return next();\n case OptionAction.pageUp:\n return Math.max(0, validIndex - pageSize);\n case OptionAction.pageDown:\n return Math.min(maxIndex, validIndex + pageSize);\n default:\n return validIndex;\n }\n }\n\n actionIsTypingChar(action: OptionAction | string): boolean {\n return !(Object.values(OptionAction) as string[]).includes(action);\n }\n\n updateActiveIndexFromKeyChar(\n char: string,\n options: ListboxOptionComponent[]\n ): void {\n this.filtering.updateSearchString(char);\n const searchIndex = this.filtering.getIndexByLetter(\n options,\n this.filtering.searchString,\n this.activeIndex.value + 1\n );\n\n if (searchIndex >= 0) {\n this.setActiveIndex(searchIndex, OptionAction.next, options);\n } else {\n this.filtering.resetSearch();\n }\n }\n\n private setActiveDescendant(): void {\n const activeDescendant$ = this.activeIndex$.pipe(\n map((i) => {\n if (i === null || i < 0) {\n return null;\n } else {\n return `${this.service.id}-listbox-option-${i}`;\n }\n })\n );\n this.service.initActiveDescendant(activeDescendant$);\n }\n\n setActiveIndexToFirstSelectedOrDefault(\n options: ListboxOptionComponent[]\n ): void {\n let firstSelected = options.findIndex((x) => x.isSelected());\n if (firstSelected === -1) {\n if (this.service.shouldAutoSelectOnListboxClose) {\n firstSelected = 0;\n } else {\n firstSelected = this.service.nullActiveIdOnClose ? null : 0;\n }\n }\n if (firstSelected > -1) {\n this.setActiveIndex(firstSelected, OptionAction.next, options);\n }\n if (firstSelected === null) {\n this.activeIndex.next(null);\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterContentInit,\n AfterViewInit,\n Component,\n ContentChild,\n ContentChildren,\n DestroyRef,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n QueryList,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl } from '@angular/forms';\nimport {\n combineLatest,\n delay,\n filter,\n map,\n pairwise,\n skip,\n take,\n withLatestFrom,\n} from 'rxjs';\nimport {\n ComboboxService,\n FocusTextbox,\n OptionAction,\n} from '../combobox.service';\nimport { ListboxGroupComponent } from '../listbox-group/listbox-group.component';\nimport { ListboxLabelComponent } from '../listbox-label/listbox-label.component';\nimport { ListboxOptionComponent } from '../listbox-option/listbox-option.component';\nimport { SelectAllListboxOptionComponent } from '../select-all-listbox-option/select-all-listbox-option.component';\nimport { ActiveIndexService } from './active-index.service';\nimport { ListboxFilteringService } from './listbox-filtering.service';\nimport { ListboxScrollService } from './listbox-scroll.service';\n\nexport type SelectedCountLabel = {\n singular: string;\n plural: string;\n};\n\n@Component({\n selector: 'hsi-ui-listbox',\n imports: [CommonModule],\n providers: [\n ListboxFilteringService,\n ListboxScrollService,\n ActiveIndexService,\n ],\n templateUrl: './listbox.component.html',\n styleUrls: ['./listbox.component.scss'],\n host: {\n class: 'hsi-ui-listbox-component',\n },\n})\nexport class ListboxComponent\n implements OnChanges, AfterContentInit, AfterViewInit\n{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n @Input() ngFormControl: FormControl<any | any[]>;\n @Input() findsOptionOnTyping = true;\n @Input() isMultiSelect = false;\n @Input() maxHeight = 300;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n @Output() valueChanges = new EventEmitter<any | any[]>();\n @ViewChild('scrollableContent')\n scrollableContentRef: ElementRef<HTMLDivElement>;\n @ContentChild(ListboxLabelComponent, { descendants: false })\n label: ListboxLabelComponent;\n @ContentChildren(ListboxOptionComponent, { descendants: false })\n options: QueryList<ListboxOptionComponent>;\n @ContentChildren(ListboxGroupComponent)\n groups: QueryList<ListboxGroupComponent>;\n\n constructor(\n public service: ComboboxService,\n public activeIndex: ActiveIndexService,\n protected filtering: ListboxFilteringService,\n protected scrolling: ListboxScrollService,\n protected destroyRef: DestroyRef\n ) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['isMultiSelect']) {\n this.service.isMultiSelect = this.isMultiSelect;\n }\n }\n\n ngAfterContentInit(): void {\n this.service.setProjectedContent(this.groups, this.options);\n this.options\n .toArray()\n .concat(\n this.groups.toArray().flatMap((group) => group.options?.toArray() ?? [])\n )\n .filter((option) => option instanceof SelectAllListboxOptionComponent)\n .forEach((option) => {\n option.setControlledOptions();\n option.listenForOptionSelections();\n });\n this.activeIndex.init(this.service.allOptions$, this.destroyRef);\n this.setSelectedEmitting();\n this.setOnBlurEvent();\n this.setOptionAction();\n setTimeout(() => {\n this.updateActiveIndexOnExternalChanges();\n }, 0);\n }\n\n ngAfterViewInit(): void {\n this.activeIndex.setScrollContentRef(this.scrollableContentRef);\n this.setResetOnClose();\n this.setOnOptionChanges();\n }\n\n setOnOptionChanges(): void {\n this.service.allOptions$.pipe(take(1), delay(0)).subscribe(() => {\n this.service.setProjectedContentIsInDOM();\n });\n\n // cannot pass allOptions$ to handleOptionClick through template because @if (allOptions | async; as allOptions) will delay rendering of option.template and option.label will not be defined when setBoxLabel is called. Thus subscribe and set allOptions in here.\n this.service.allOptions$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((options) => {\n this.service.allOptions = options;\n });\n }\n\n setSelectedEmitting(): void {\n this.service.selectedOptionsToEmit$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n skip(1),\n map((options) => {\n const selections = [];\n for (const option of options) {\n const value = option.valueToEmit;\n selections.push(value);\n }\n return selections;\n })\n )\n .subscribe((value) => {\n this.emitValue(value);\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n emitValue(selections: any[]): void {\n const value = this.isMultiSelect ? selections : selections[0];\n if (this.ngFormControl) {\n this.ngFormControl.setValue(value);\n } else {\n this.valueChanges.emit(value);\n }\n }\n\n setOnBlurEvent() {\n this.service.textboxBlur$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n withLatestFrom(\n combineLatest([this.service.isOpen$, this.activeIndex.activeIndex$]),\n this.service.allOptions$\n ),\n filter(([, [isOpen]]) => isOpen)\n )\n .subscribe(([, [isOpen, activeIndex], options]) => {\n if (isOpen) {\n if (this.shouldAutoSelectOptionOnBlur(activeIndex, options)) {\n const index = activeIndex ?? 0;\n this.selectOptionFromIndex(index, options);\n }\n this.service.closeListbox();\n }\n });\n }\n\n shouldAutoSelectOptionOnBlur(\n activeIndex: number,\n options: ListboxOptionComponent[]\n ): boolean {\n const activeIndexOptionIsSelected = options[activeIndex]?.isSelected();\n return (\n this.service.shouldAutoSelectOnListboxClose &&\n !activeIndexOptionIsSelected\n );\n }\n\n setOptionAction() {\n this.service.optionAction$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n withLatestFrom(this.activeIndex.activeIndex$, this.service.allOptions$)\n )\n .subscribe(([action, activeIndex, options]) => {\n if (options.length === 0) {\n this.service.emitTextboxFocus();\n return;\n }\n if (!this.actionIsTypingChar(action)) {\n if (action === OptionAction.select) {\n this.selectOptionFromIndex(activeIndex, options);\n }\n //double check because typesafety on this kind of sucks, could add && str.match(/\\S| /)\n } else if (action.length === 1) {\n this.activeIndex.updateActiveIndexFromKeyChar(action, options);\n } else {\n throw new Error(`Invalid action: ${action}`);\n }\n });\n }\n\n actionIsTypingChar(action: OptionAction | string): boolean {\n return !(Object.values(OptionAction) as string[]).includes(action);\n }\n\n setResetOnClose(): void {\n this.service.isOpen$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n skip(1),\n filter((isOpen) => !isOpen),\n withLatestFrom(this.service.allOptions$)\n )\n .subscribe(([, options]) => {\n this.activeIndex.setActiveIndexToFirstSelectedOrDefault(options);\n this.resetScroll();\n this.service.emitTextboxFocus(FocusTextbox.includeMobile);\n });\n }\n\n resetScroll(): void {\n if (this.scrolling.isScrollable(this.scrollableContentRef.nativeElement)) {\n this.scrolling.scrollToTop(\n this.scrollableContentRef.nativeElement.parentElement\n );\n }\n }\n\n getListboxLabelAsBoxPlaceholder(): string {\n return this.label?.label?.nativeElement.innerText || '';\n }\n\n selectOptionFromIndex(\n index: number,\n options: ListboxOptionComponent[]\n ): void {\n this.handleOptionSelect(index, options);\n }\n\n handleOptionClick(\n event: MouseEvent,\n optionIndex: number,\n groupIndex?: number\n ): void {\n event.stopPropagation();\n this.service.setIsKeyboardEvent(false);\n this.handleOptionSelect(optionIndex, this.service.allOptions, groupIndex);\n if (!this.isMultiSelect) {\n this.service.closeListbox();\n }\n this.service.emitTextboxFocus();\n }\n\n handleOptionSelect(\n optionIndex: number,\n options: ListboxOptionComponent[],\n groupIndex?: number\n ): void {\n const index = groupIndex\n ? this.getOptionIndexFromGroups(groupIndex, optionIndex)\n : optionIndex;\n const option = options[index];\n if (!option || option.isDisabled()) return;\n this.toggleOptionSelected(option, options);\n if (options[optionIndex].isSelected()) {\n this.activeIndex.setActiveIndex(index, null, options);\n } else {\n let nextSelectedIndex = options.findIndex(\n (o, i) => i > optionIndex && o.isSelected()\n );\n if (nextSelectedIndex === -1) {\n nextSelectedIndex = options.findIndex((o) => o.isSelected());\n }\n this.activeIndex.setActiveIndex(nextSelectedIndex, null, options);\n }\n }\n\n toggleOptionSelected(\n option: ListboxOptionComponent,\n options: ListboxOptionComponent[]\n ): void {\n if (!option || option.isDisabled()) {\n this.service.emitTextboxFocus();\n return;\n }\n if (this.isMultiSelect) {\n option.toggleSelected();\n this.updateSelectedOptionsToEmit(options);\n } else {\n this.selectSingleSelectOption(option, options);\n }\n }\n\n updateSelectedOptionsToEmit(options: ListboxOptionComponent[]): void {\n const selected = this.getSelectedOptions(options);\n this.service.setSelectedOptionsToEmit(selected);\n }\n\n selectSingleSelectOption(\n option: ListboxOptionComponent,\n options: ListboxOptionComponent[]\n ): void {\n if (option.isSelected()) return;\n options.forEach((o) => {\n if (o !== option) {\n o.deselect();\n }\n });\n option.select();\n this.updateSelectedOptionsToEmit(options);\n }\n\n isSelectAllListboxOption(\n option: ListboxOptionComponent\n ): option is SelectAllListboxOptionComponent {\n return option instanceof SelectAllListboxOptionComponent;\n }\n\n getOptionIndexFromGroups(groupIndex: number, optionIndex: number): number {\n return (\n this.groups\n .toArray()\n .slice(0, groupIndex)\n .reduce((acc, curr) => acc + curr.options.toArray().length, 0) +\n optionIndex\n );\n }\n\n getSelectedOptions(\n options: ListboxOptionComponent[]\n ): ListboxOptionComponent[] {\n return options?.filter(\n (option) => !this.isSelectAllListboxOption(option) && option.isSelected()\n );\n }\n\n updateActiveIndexOnExternalChanges(): void {\n this.service.optionPropertyChanges$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n pairwise(),\n filter(([prev, curr]) => {\n return !!prev && !!curr && prev.optionValue !== curr.optionValue;\n }),\n withLatestFrom(this.service.allOptions$, this.activeIndex.activeIndex$)\n )\n .subscribe(([, options]) => {\n this.activeIndex.setActiveIndexToFirstSelectedOrDefault(options);\n });\n }\n\n handleOptionMousedown(): void {\n this.service.ignoreBlur = true;\n }\n}\n","<div\n #scrollableContent\n role=\"listbox\"\n tabindex=\"-1\"\n [id]=\"service.id + '-listbox'\"\n class=\"hsi-ui-listbox\"\n [class.open]=\"service.isOpen$ | async\"\n [style.--hsi-ui-listbox-max-height.px]=\"maxHeight\"\n [attr.aria-labelledby]=\"\n (service.label$ | async) ? service.comboboxLabelId : label?.id\n \"\n [attr.aria-multiselectable]=\"isMultiSelect\"\n>\n <ng-container\n *ngTemplateOutlet=\"\n label?.labelContent || nullContent;\n context: { hasWrapper: false }\n \"\n ></ng-container>\n @if ((service.groups$ | async)?.length > 0) {\n <ng-container *ngTemplateOutlet=\"groupedOptions\"></ng-container>\n } @else {\n <ng-container *ngTemplateOutlet=\"options\"></ng-container>\n }\n</div>\n\n<ng-template #options>\n @for (\n option of service.allOptions$ | async;\n track option.id;\n let i = $index\n ) {\n <ng-container\n *ngTemplateOutlet=\"\n optionTemplate;\n context: {\n $implicit: option,\n index: i,\n groupIndex: null,\n }\n \"\n ></ng-container>\n }\n</ng-template>\n\n<ng-template #groupedOptions>\n @for (group of service.groups$ | async; track $index; let i = $index) {\n <div class=\"hsi-ui-listbox-group-container\">\n <div\n role=\"group\"\n tabIndex=\"-1\"\n class=\"hsi-ui-listbox-group\"\n [ngClass]=\"'listbox-group-' + i\"\n [attr.aria-labelledby]=\"group.label?.id\"\n >\n @if (group.label) {\n <div\n role=\"presentation\"\n [id]=\"group.label?.id\"\n class=\"hsi-ui-listbox-group-label\"\n [ngClass]=\"'hsi-ui-listbox-group-' + i + '-label'\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n group.label?.labelContent || nullContent;\n context: { hasWrapper: true }\n \"\n ></ng-container>\n </div>\n }\n @for (\n option of group.options$ | async;\n track option.id;\n let j = $index\n ) {\n <ng-container\n *ngTemplateOutlet=\"\n optionTemplate;\n context: {\n $implicit: option,\n index: j,\n groupIndex: i,\n }\n \"\n ></ng-container>\n }\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template\n #optionTemplate\n let-option\n let-index=\"index\"\n let-groupIndex=\"groupIndex\"\n>\n <div\n role=\"option\"\n tabindex=\"-1\"\n [id]=\"\n service.id +\n '-listbox-option-' +\n (groupIndex !== null\n ? getOptionIndexFromGroups(groupIndex, index)\n : index)\n \"\n class=\"hsi-ui-listbox-option\"\n [class.grouped-option]=\"groupIndex !== null\"\n [ngClass]=\"\n groupIndex !== null\n ? 'hsi-ui-listbox-option-' + getOptionIndexFromGroups(groupIndex, index)\n : 'hsi-ui-listbox-option-' + index\n \"\n [class.current]=\"\n (activeIndex.activeIndex$ | async) ===\n (groupIndex !== null\n ? getOptionIndexFromGroups(groupIndex, index)\n : index) && (option.disabled$ | async) !== true\n \"\n [class.disabled]=\"option.disabled$ | async\"\n [class.keyboard-current]=\"\n (service.isKeyboardEvent$ | async) &&\n (activeIndex.activeIndex$ | async) ===\n (groupIndex !== null\n ? getOptionIndexFromGroups(groupIndex, index)\n : index) &&\n (option.disabled$ | async) !== true\n \"\n [class.multi]=\"isMultiSelect\"\n [class.selected]=\"option.selected$ | async\"\n [attr.aria-checked]=\"isMultiSelect ? (option.selected$ | async) : null\"\n [attr.aria-selected]=\"!isMultiSelect ? (option.selected$ | async) : null\"\n [attr.aria-disabled]=\"option.disabled$ | async\"\n data-cy=\"listbox-option\"\n (click)=\"handleOptionClick($event, index, groupIndex)\"\n (mousedown)=\"handleOptionMousedown()\"\n >\n <ng-container *ngTemplateOutlet=\"option.template\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #nullContent></ng-template>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n DestroyRef,\n forwardRef,\n Input,\n OnChanges,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n debounceTime,\n map,\n merge,\n mergeAll,\n Observable,\n switchMap,\n withLatestFrom,\n} from 'rxjs';\nimport { ComboboxService } from '../combobox.service';\nimport { ListboxGroupComponent } from '../listbox-group/listbox-group.component';\nimport { ListboxOptionComponent } from '../listbox-option/listbox-option.component';\nimport { ListboxComponent } from '../listbox/listbox.component';\n\n@Component({\n selector: 'hsi-ui-select-all-listbox-option',\n imports: [CommonModule],\n providers: [\n {\n provide: ListboxOptionComponent,\n useExisting: forwardRef(() => SelectAllListboxOptionComponent),\n },\n ],\n templateUrl: '../listbox-option/listbox-option.component.html',\n styleUrls: ['../listbox-option/listbox-option.component.scss'],\n})\nexport class SelectAllListboxOptionComponent\n extends ListboxOptionComponent\n implements OnChanges\n{\n @Input() override boxDisplayLabel = 'Select all';\n controlledOptions$: Observable<ListboxOptionComponent[]>;\n controlledOptions: ListboxOptionComponent[];\n\n constructor(\n service: ComboboxService,\n private listboxComponent: ListboxComponent,\n private destroyRef: DestroyRef\n ) {\n super(service);\n }\n\n // select all will not respond to changes in selected or disabled properties\n // users should not attempt to change these properties\n // TODO: better architecture for this\n override ngOnChanges(): void {\n return;\n }\n\n protected override updateSelected(selected: boolean): void {\n this._selected.next(selected);\n }\n\n setControlledOptions(): void {\n this.controlledOptions$ = this.service.groups$.pipe(\n map((groups) => this.getControlledOptionsFromGroups(groups))\n );\n\n this.controlledOptions$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((controlledOptions) => {\n this.controlledOptions = controlledOptions;\n });\n }\n\n getControlledOptionsFromGroups(\n groups: ListboxGroupComponent[]\n ): ListboxOptionComponent[] {\n let controlledOptions: ListboxOptionComponent[] = [];\n if (groups.length > 0) {\n const groupId = groups.findIndex((group) => {\n return group.options.some((option) => option.id === this.id);\n });\n if (groupId > -1) {\n controlledOptions = groups[groupId].options.filter((o) => o !== this);\n }\n } else {\n controlledOptions = this.listboxComponent.options.filter(\n (option) => option !== this\n );\n }\n return controlledOptions;\n }\n\n listenForOptionSelections(): void {\n const optionSelectionChanges$ = this.controlledOptions$.pipe(\n switchMap((options) => merge(options.map((o) => o.selected$))),\n mergeAll()\n );\n\n optionSelectionChanges$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n debounceTime(0),\n withLatestFrom(this.controlledOptions$)\n )\n .subscribe(([, controlledOptions]) => {\n this.updateSelectAllSelected(controlledOptions);\n });\n }\n\n updateSelectAllSelected(controlledOptions: ListboxOptionComponent[]): void {\n const allControlledOptionsSelected = controlledOptions.every((option) =>\n option.isSelected()\n );\n this.updateSelected(allControlledOptionsSelected);\n }\n\n override toggleSelected(): void {\n this.updateSelected(!this._selected.value);\n if (this._selected.value) {\n this.controlledOptions.forEach((option) => option.select());\n } else {\n this.controlledOptions.forEach((option) => option.deselect());\n }\n }\n}\n","import { Platform } from '@angular/cdk/platform';\nimport { Injectable, QueryList } from '@angular/core';\nimport {\n BehaviorSubject,\n Observable,\n Subject,\n combineLatest,\n distinctUntilChanged,\n map,\n merge,\n mergeAll,\n of,\n shareReplay,\n startWith,\n switchMap,\n} from 'rxjs';\nimport { ComboboxLabelComponent } from './combobox-label/combobox-label.component';\nimport { ListboxGroupComponent } from './listbox-group/listbox-group.component';\nimport {\n ListboxOptionComponent,\n ListboxOptionPropertyChange,\n} from './listbox-option/listbox-option.component';\nimport { SelectAllListboxOptionComponent } from './select-all-listbox-option/select-all-listbox-option.component';\n\nlet nextUniqueId = 0;\n\nexport enum FocusTextbox {\n default = 'default',\n includeMobile = 'includeMobile',\n}\n\nexport interface KeyboardEventWithAutocomplete {\n event: KeyboardEvent;\n autoComplete: AutoComplete;\n inputHasText: boolean;\n}\n\nexport enum Key {\n ArrowDown = 'ArrowDown',\n ArrowUp = 'ArrowUp',\n End = 'End',\n Enter = 'Enter',\n Escape = 'Escape',\n Home = 'Home',\n LeftArrow = 'ArrowLeft',\n PageDown = 'PageDown',\n PageUp = 'PageUp',\n RightArrow = 'ArrowRight',\n Space = ' ',\n Tab = 'Tab',\n}\n\nexport enum OptionAction {\n first = 'first',\n last = 'last',\n next = 'next',\n nullActiveIndex = 'nullActiveIndex',\n pageDown = 'pageDown',\n pageUp = 'pageUp',\n previous = 'previous',\n select = 'select',\n zeroActiveIndex = 'zeroActiveIndex',\n}\n\nexport enum ListboxAction {\n close = 'close',\n open = 'open',\n closeSelect = 'closeSelect',\n}\n\nexport enum TextboxAction {\n focus = 'focus',\n setTextToValue = 'setTextToValue',\n cursorRight = 'cursorRight',\n cursorLeft = 'cursorLeft',\n cursorFirst = 'cursorFirst',\n cursorLast = 'cursorLast',\n addChar = 'addChar',\n type = 'type',\n}\n\nexport enum AutoComplete {\n none = 'none',\n list = 'list',\n both = 'both',\n inline = 'inline',\n}\n\nexport type ComboboxAction = OptionAction | ListboxAction | TextboxAction;\n\n@Injectable()\nexport class ComboboxService {\n id = `combobox-${nextUniqueId++}`;\n scrollContainerId = `${this.id}-scroll-container`;\n comboboxLabelId = `${this.id}-label`;\n autoComplete: AutoComplete = AutoComplete.none;\n hasEditableTextbox = false;\n ignoreBlur = false;\n isMultiSelect = false;\n nullActiveIdOnClose = false;\n scrollWhenOpened = false;\n shouldAutoSelectOnListboxClose = false;\n activeDescendant$: Observable<string>;\n allOptions: ListboxOptionComponent[];\n allOptions$: Observable<ListboxOptionComponent[]>;\n destroy$ = new Subject<void>();\n groups$: Observable<ListboxGroupComponent[]>;\n optionPropertyChanges$: Observable<ListboxOptionPropertyChange>;\n private focusTextbox: Subject<FocusTextbox> = new Subject<FocusTextbox>();\n focusTextbox$ = this.focusTextbox.asObservable();\n private isKeyboardEvent = new BehaviorSubject(false);\n isKeyboardEvent$ = this.isKeyboardEvent.asObservable();\n private _isOpen: BehaviorSubject<boolean> = new BehaviorSubject(false);\n isOpen$ = this._isOpen.asObservable().pipe(distinctUntilChanged());\n private label: BehaviorSubject<ComboboxLabelComponent> = new BehaviorSubject(\n null\n );\n label$ = this.label.asObservable();\n private optionAction: Subject<OptionAction | string> = new Subject();\n optionAction$ = this.optionAction.asObservable();\n private projectedContentIsInDOM: BehaviorSubject<boolean> =\n new BehaviorSubject(false);\n projectedContentIsInDOM$ = this.projectedContentIsInDOM.asObservable();\n private selectedOptionsToEmit: BehaviorSubject<ListboxOptionComponent[]> =\n new BehaviorSubject([]);\n selectedOptionsToEmit$ = this.selectedOptionsToEmit.asObservable();\n private textboxBlur: Subject<void> = new Subject();\n textboxBlur$ = this.textboxBlur.asObservable();\n private touched: BehaviorSubject<boolean> = new BehaviorSubject(false);\n touched$ = this.touched.asObservable();\n\n constructor(private platform: Platform) {}\n\n get isOpen(): boolean {\n return this._isOpen.value;\n }\n\n initActiveDescendant(source$?: Observable<string>): void {\n if (source$) {\n this.activeDescendant$ = source$;\n } else {\n this.activeDescendant$ = of(null);\n }\n }\n\n setLabel(label: ComboboxLabelComponent): void {\n this.label.next(label);\n }\n\n openListbox(): void {\n this._isOpen.next(true);\n }\n\n closeListbox(): void {\n this._isOpen.next(false);\n }\n\n toggleListbox(): void {\n this._isOpen.next(!this._isOpen.value);\n }\n\n setProjectedContentIsInDOM(): void {\n this.projectedContentIsInDOM.next(true);\n }\n\n emitTextboxBlur(): void {\n this.textboxBlur.next();\n }\n\n setTouched(): void {\n this.touched.next(true);\n }\n\n emitTextboxFocus(focus: FocusTextbox = FocusTextbox.default): void {\n this.focusTextbox.next(focus);\n }\n\n emitOptionAction(action: OptionAction | string): void {\n this.optionAction.next(action);\n }\n\n isMobile(): boolean {\n return this.platform.ANDROID || this.platform.IOS;\n }\n\n setProjectedContent(\n groups: QueryList<ListboxGroupComponent>,\n options: QueryList<ListboxOptionComponent>\n ): void {\n this.setGroups(groups);\n this.setAllOptions(groups, options);\n\n this.optionPropertyChanges$ = this.allOptions$.pipe(\n switchMap((options) =>\n merge(options.map((o) => o.externalPropertyChanges$))\n ),\n mergeAll()\n );\n }\n\n setGroups(groups: QueryList<ListboxGroupComponent>): void {\n this.groups$ = groups.changes.pipe(\n startWith(''),\n map(() => groups.toArray())\n );\n }\n\n setAllOptions(\n groups: QueryList<ListboxGroupComponent>,\n options: QueryList<ListboxOptionComponent>\n ): void {\n // will not track changes to properties, just if the list of options changes\n if (groups.length > 0) {\n this.allOptions$ = this.groups$.pipe(\n switchMap((groups) =>\n combineLatest(groups.map((group) => group.options$))\n ),\n map((optionArrays) => optionArrays.flat()),\n shareReplay(1)\n );\n } else {\n this.allOptions$ = options.changes.pipe(\n startWith(''),\n map(() => options.toArray()),\n shareReplay(1)\n );\n }\n }\n\n setSelectedOptionsToEmit(selected: ListboxOptionComponent[]): void {\n this.selectedOptionsToEmit.next(selected);\n }\n\n getSelectedOptions(\n options: ListboxOptionComponent[]\n ): ListboxOptionComponent[] {\n return options?.filter(\n (option) => !this.isSelectAllListboxOption(option) && option.isSelected()\n );\n }\n\n isSelectAllListboxOption(\n option: ListboxOptionComponent\n ): option is SelectAllListboxOptionComponent {\n return option instanceof SelectAllListboxOptionComponent;\n }\n\n setIsKeyboardEvent(isKeyboardEvent: boolean): void {\n this.isKeyboardEvent.next(isKeyboardEvent);\n }\n\n destroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n\n this.focusTextbox.complete();\n this.isKeyboardEvent.complete();\n this._isOpen.complete();\n this.label.complete();\n this.optionAction.complete();\n this.projectedContentIsInDOM.complete();\n this.selectedOptionsToEmit.complete();\n this.textboxBlur.complete();\n this.touched.complete();\n }\n}\n","import {\n AfterViewInit,\n Component,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\nimport { ComboboxService } from '../combobox.service';\n\n@Component({\n selector: 'hsi-ui-combobox-label',\n template: `<ng-template\n ><p class=\"combobox-label\" [id]=\"service.comboboxLabelId\"\n ><ng-content></ng-content></p\n ></ng-template>`,\n})\nexport class ComboboxLabelComponent implements AfterViewInit {\n @ViewChild(TemplateRef) labelContent: TemplateRef<unknown>;\n\n constructor(public service: ComboboxService) {}\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.service.setLabel(this);\n }, 0);\n }\n}\n","import { Platform } from '@angular/cdk/platform';\nimport { AsyncPipe, CommonModule, DOCUMENT } from '@angular/common';\nimport {\n Component,\n ContentChild,\n DestroyRef,\n ElementRef,\n Inject,\n NgZone,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter, fromEvent, merge, withLatestFrom } from 'rxjs';\nimport { ComboboxLabelComponent } from './combobox-label/combobox-label.component';\nimport { ComboboxService, FocusTextbox } from './combobox.service';\n\n@Component({\n selector: 'hsi-ui-combobox',\n imports: [CommonModule, AsyncPipe],\n providers: [ComboboxService],\n templateUrl: './combobox.component.html',\n styleUrls: ['./styles/styles.scss'],\n encapsulation: ViewEncapsulation.None,\n host: { class: 'hsi-ui-combobox' },\n})\nexport class ComboboxComponent implements OnInit, OnDestroy {\n @ContentChild(ComboboxLabelComponent) labelComponent: ComboboxLabelComponent;\n\n constructor(\n public service: ComboboxService,\n public platform: Platform,\n private zone: NgZone,\n @Inject(DOCUMENT) private document: Document,\n private elRef: ElementRef,\n private destroyRef: DestroyRef\n ) {}\n\n ngOnInit(): void {\n this.handleOutsideClick();\n }\n\n ngOnDestroy(): void {\n this.service.destroy();\n }\n\n handleOutsideClick(): void {\n if (!this.document) {\n return;\n }\n\n this.zone.runOutsideAngular(() => {\n merge(\n fromEvent(this.document, 'touchstart', { capture: true }),\n fromEvent(this.document, 'mousedown', { capture: true })\n )\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n withLatestFrom(this.service.isOpen$),\n filter(\n ([event, isOpen]) =>\n isOpen && !event.composedPath().includes(this.elRef.nativeElement)\n )\n )\n .subscribe(() => {\n if (this.platform.IOS || this.platform.ANDROID) {\n this.service.emitTextboxFocus(FocusTextbox.includeMobile);\n }\n this.service.emitTextboxBlur();\n });\n });\n }\n}\n","@if (service.label$ | async; as label) {\n <ng-template [ngTemplateOutlet]=\"label.labelContent\"></ng-template>\n}\n<ng-content></ng-content>\n","import { Platform } from '@angular/cdk/platform';\nimport { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n DestroyRef,\n ElementRef,\n inject,\n Input,\n NgZone,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { runNgChangeDetectionThen } from '@mathstack/app-kit';\nimport { BehaviorSubject, combineLatest, filter, startWith } from 'rxjs';\nimport {\n ComboboxAction,\n ComboboxService,\n FocusTextbox,\n Key,\n ListboxAction,\n OptionAction,\n TextboxAction,\n} from '../combobox.service';\nimport { ListboxOptionComponent } from '../listbox-option/listbox-option.component';\nimport { SelectedCountLabel } from '../listbox/listbox.component';\n\n@Component({\n selector: 'hsi-ui-textbox',\n imports: [CommonModule],\n styleUrls: ['./textbox.component.scss'],\n templateUrl: './textbox.component.html',\n host: {\n class: 'hsi-ui-textbox',\n },\n})\nexport class TextboxComponent implements OnInit, AfterViewInit {\n @Input() ariaLabel: string;\n @Input() selectedCountLabel?: SelectedCountLabel;\n @Input() customLabel: (selectedOptions: ListboxOptionComponent[]) => string;\n /*\n * Whether the textbox label responds to selections in any way.\n *\n * If true, the textbox label will display the selected option(s) if no other label properties are provided.\n *\n * @default true\n */\n @Input() dynamicLabel = true;\n @Input() findsOptionOnTyping = true;\n @ViewChild('box') box: ElementRef<HTMLDivElement>;\n @ViewChild('boxIcon') boxIcon: ElementRef<HTMLDivElement>;\n openKeys = ['ArrowDown', 'ArrowUp', 'Enter', ' '];\n label: BehaviorSubject<string> = new BehaviorSubject('');\n label$ = this.label.asObservable();\n protected destroyRef = inject(DestroyRef);\n public service = inject(ComboboxService);\n private platform = inject(Platform);\n protected zone = inject(NgZone);\n\n ngOnInit(): void {\n this.service.projectedContentIsInDOM$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter((x) => !!x),\n // Required because the label is projected into the ListboxOption via <ng-content>, and the\n // listbox options are <ng-template>s that are projected into the listbox via ngTemplateOutlet.\n // We need this to ensure that the option labels are in the DOM to read from before we set the box label.\n runNgChangeDetectionThen(this.zone)\n )\n .subscribe(() => {\n this.setLabel();\n });\n }\n\n ngAfterViewInit(): void {\n this.setFocusListener();\n }\n\n setFocusListener(): void {\n this.service.focusTextbox$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((focusType) => {\n if (!this.isMobile() || focusType === FocusTextbox.includeMobile) {\n this.focusBox();\n }\n });\n }\n\n focusBox(): void {\n this.box.nativeElement.focus();\n }\n\n handleBlur(event: FocusEvent): void {\n // DESCRIPTION OF HOW VARIOUS DEVICES/ASSISTIVE TECHNOLOGIES DO/NOT TRIGGER ANY BLUR EVENT (FocusEvent)\n // clicking (desktop) will trigger a blur event (item is focused, user clicks away, blur event fires)\n // keyboard navigation (desktop) will not trigger a blur event (item is focused, user navigates to another item, blur event does not fire)\n // tapping (mobile) will trigger a blur event (item is focused, user taps away, blur event fires)\n // swiping (VoiceOver) will trigger a blur event (item is focused, user swipes away, blur event fires)\n\n // The code below (lines 106 - 116) will refocus the textbox when the textbox receives blur event, and the\n // source of the blue event (related target) is something in the listbox.\n // We keep the focus on the textbox so that we can continue to listen for keyboard events to provide\n // keyboard navigation/interaction with the listbox options. The refocusing does not affect keyboard navigation,\n // and is unnoticable to the user.\n\n // However, VoiceOver (iOS assistive tech) will move the navigation back to the textbox when the textbox is focused,\n // which means the user will need to strt navigating the options from the top of the listbox every time they select\n // an option. (If we throw the focus). For this reason, we have decided that we will not support keyboard navigation\n // (which would need to happen on a connected external keybord) on mobile devices, as keyboard nav requires that the\n // focus stays on the textbox. Ostensibly it is standard practice to not support keyboard navigation on mobile devices.\n\n if (!this.isMobile()) {\n if (event.relatedTarget && this.isHtmlElement(event.relatedTarget)) {\n // when the blur happens because a listbox option was focused\n if (\n event.relatedTarget.id.includes('listbox') ||\n event.relatedTarget.classList.contains('listbox-group') ||\n event.relatedTarget.classList.contains('listbox-group-label')\n ) {\n this.service.emitTextboxFocus();\n return;\n }\n }\n this.service.emitTextboxBlur();\n }\n }\n\n isHtmlElement(target: EventTarget): target is HTMLElement {\n return 'id' in target;\n }\n\n isMobile(): boolean {\n return this.platform.IOS || this.platform.ANDROID;\n }\n\n handleClick(): void {\n this.service.setIsKeyboardEvent(false);\n if (this.service.isOpen) {\n this.service.closeListbox();\n } else {\n this.service.setTouched();\n this.service.openListbox();\n }\n this.focusBox();\n }\n\n handleKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n this.onEscape();\n } else {\n this.service.setTouched();\n const action = this.getActionFromKeydownEvent(event);\n if (action) {\n this.service.setIsKeyboardEvent(true);\n }\n this.handleKeyboardAction(action, event);\n }\n }\n\n onEscape(): void {\n this.service.closeListbox();\n this.service.emitTextboxFocus();\n }\n\n getActionFromKeydownEvent(event: KeyboardEvent): ComboboxAction {\n if (!this.service.isOpen && this.openKeys.includes(event.key)) {\n return ListboxAction.open;\n }\n if (event.key === Key.Home) {\n return OptionAction.first;\n }\n if (event.key === Key.End) {\n return OptionAction.last;\n }\n if (this.findsOptionOnTyping && this.isTypingCharacter(event)) {\n return TextboxAction.type;\n }\n if (this.service.isOpen) {\n return this.getActionFromKeyEventWhenOpen(event);\n } else {\n return null;\n }\n }\n\n isTypingCharacter(event: KeyboardEvent): boolean {\n const { key, altKey, ctrlKey, metaKey } = event;\n return (\n key === 'Backspace' ||\n key === 'Clear' ||\n (key.length === 1 && key !== ' ' && !altKey && !ctrlKey && !metaKey)\n );\n }\n\n getActionFromKeyEventWhenOpen(event: KeyboardEvent): ComboboxAction {\n const { key, altKey } = event;\n if (key === Key.ArrowUp && altKey) {\n return ListboxAction.closeSelect;\n } else if (key === Key.ArrowDown && !altKey) {\n return OptionAction.next;\n } else if (key === Key.ArrowUp) {\n return OptionAction.previous;\n } else if (key === Key.PageUp) {\n return OptionAction.pageUp;\n } else if (key === Key.PageDown) {\n return OptionAction.pageDown;\n } else if (key === Key.Enter || key === Key.Space) {\n return this.service.isMultiSelect\n ? OptionAction.select\n : ListboxAction.closeSelect;\n } else {\n return null;\n }\n }\n\n handleKeyboardAction(action: ComboboxAction, event: KeyboardEvent): void {\n switch (action) {\n case OptionAction.first:\n case OptionAction.last:\n this.service.openListbox();\n this.focusBox();\n event.preventDefault();\n this.service.emitOptionAction(action);\n break;\n\n case OptionAction.next:\n case OptionAction.pageDown:\n case OptionAction.previous:\n case OptionAction.pageUp:\n case OptionAction.select:\n event.preventDefault();\n this.service.emitOptionAction(action);\n break;\n\n case ListboxAction.closeSelect:\n event.preventDefault();\n this.service.emitOptionAction(OptionAction.select);\n this.service.closeListbox();\n this.focusBox();\n break;\n\n case ListboxAction.close:\n event.preventDefault();\n this.service.closeListbox();\n this.focusBox();\n break;\n\n case TextboxAction.type:\n this.service.openListbox();\n this.focusBox();\n this.service.emitOptionAction(event.key);\n break;\n\n case ListboxAction.open:\n event.preventDefault();\n this.service.openListbox();\n this.focusBox();\n }\n }\n\n setLabel(): void {\n if (this.dynamicLabel) {\n combineLatest([\n this.service.touched$,\n this.service.allOptions$, // when options (not properties) change\n this.service.selectedOptionsToEmit$, // when a user clicks\n this.service.optionPropertyChanges$.pipe(\n filter((x) => !!x),\n startWith(null)\n ), // on an outside change,\n ])\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(([touched, options]) => {\n const label = this.getComputedLabel(touched, options);\n this.label.next(label);\n });\n }\n }\n\n getComputedLabel(\n touched: boolean,\n options: ListboxOptionComponent[]\n ): string {\n const selectedOptions = this.service.getSelectedOptions(options);\n let label = '';\n const numSelected = selectedOptions?.length;\n if (touched || numSelected || this.customLabel || this.selectedCountLabel) {\n if (this.customLabel && !this.service.hasEditableTextbox) {\n label = this.customLabel(selectedOptions);\n } else if (this.selectedCountLabel && !this.service.hasEditableTextbox) {\n if (numSelected === 1) {\n label = `${numSelected} ${this.selectedCountLabel.singular} selected`;\n } else {\n label = `${numSelected} ${this.selectedCountLabel.plural} selected`;\n }\n } else {\n label = this.getDefaultLabel(selectedOptions);\n }\n }\n return label;\n }\n\n getDefaultLabel(selectedOptions: ListboxOptionComponent[]): string {\n let label = '';\n if (selectedOptions) {\n label = selectedOptions\n .reduce((acc, option) => {\n const value =\n option.boxDisplayLabel ??\n option.label?.nativeElement.innerText.trim();\n if (value) {\n acc.push(value);\n }\n return acc;\n }, [])\n .join(', ');\n }\n return label;\n }\n}\n","<div\n #box\n class=\"hsi-ui-textbox-container\"\n role=\"combobox\"\n tabindex=\"0\"\n [id]=\"service.id + '-textbox'\"\n data-cy=\"combobox-textbox\"\n (click)=\"handleClick()\"\n (blur)=\"handleBlur($event)\"\n (keydown)=\"handleKeydown($event)\"\n [attr.aria-label]=\"\n (service.label$ | async) === null\n ? ariaLabel || service.isMultiSelect\n ? 'Select options'\n : 'Select an option'\n : null\n \"\n [attr.aria-labelledby]=\"\n (service.label$ | async) !== null ? service.comboboxLabelId : null\n \"\n [attr.aria-activedescendant]=\"service.activeDescendant$ | async\"\n [attr.aria-expanded]=\"service.isOpen$ | async\"\n [attr.aria-controls]=\"service.id + '-listbox'\"\n aria-haspopup=\"listbox\"\n [class.open]=\"service.isOpen$ | async\"\n ><div\n *ngIf=\"dynamicLabel && !!(label$ | async); else staticLabel\"\n class=\"hsi-ui-textbox-label\"\n data-cy=\"textbox-label\"\n >{{ label$ | async }}</div\n ><div\n #boxIcon\n class=\"hsi-ui-textbox-icon\"\n [class.open]=\"service.isOpen$ | async\"\n ><ng-content select=\"[boxIcon]\"></ng-content></div\n></div>\n<ng-template #staticLabel\n ><div class=\"hsi-ui-textbox-label\" data-cy=\"textbox-label\"\n ><ng-content select=\"[boxLabel]\"></ng-content></div\n></ng-template>\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { FormControl, FormsModule } from '@angular/forms';\nimport { BehaviorSubject, skip } from 'rxjs';\nimport {\n AutoComplete,\n ComboboxAction,\n Key,\n ListboxAction,\n OptionAction,\n TextboxAction,\n} from '../combobox.service';\nimport { ListboxOptionComponent } from '../listbox-option/listbox-option.component';\nimport { TextboxComponent } from '../textbox/textbox.component';\n\n@Component({\n selector: 'hsi-ui-editable-textbox',\n imports: [CommonModule, FormsModule],\n templateUrl: './editable-textbox.component.html',\n styleUrls: ['./editable-textbox.component.scss'],\n host: {\n class: 'hsi-ui-editable-textbox',\n },\n})\nexport class EditableTextboxComponent\n extends TextboxComponent\n implements OnInit, AfterViewInit\n{\n @ViewChild('box') inputElRef: ElementRef<HTMLInputElement>;\n @Input() autoSelect = false;\n @Input() autoSelectTrigger: 'any' | 'character' = 'character';\n @Input() displaySelected = true;\n @Input() initialValue = '';\n @Input() inputType: 'text' | 'search' = 'text';\n @Input() ngFormControl: FormControl<string>;\n @Input() placeholder = '';\n @Output() valueChanges = new EventEmitter<string>();\n moveFocusToTextboxKeys = ['RightArrow', 'LeftArrow', 'Home', 'End'];\n value = new BehaviorSubject<string>('');\n value$ = this.value.asObservable();\n override openKeys = ['ArrowDown', 'ArrowUp'];\n\n override ngOnInit(): void {\n this.service.autoComplete = this.displaySelected\n ? AutoComplete.list\n : AutoComplete.none;\n this.service.shouldAutoSelectOnListboxClose =\n this.autoSelect && this.autoSelectTrigger === 'any';\n this.service.nullActiveIdOnClose = true;\n this.service.hasEditableTextbox = true;\n super.ngOnInit();\n }\n\n override ngAfterViewInit(): void {\n super.ngAfterViewInit();\n if (this.initialValue || this.ngFormControl?.value) {\n this.value.next(this.initialValue || this.ngFormControl.value);\n }\n }\n\n override setLabel(): void {\n this.service.selectedOptionsToEmit$ // when a user clicks\n .pipe(skip(1))\n .subscribe((selectedOptions) => this.onSelectionChange(selectedOptions));\n }\n\n onSelectionChange(selectedOptions: ListboxOptionComponent[]): void {\n if (this.service.isMultiSelect) {\n this.setAndEmitValue('');\n } else {\n const label = selectedOptions.length\n ? selectedOptions[0].label?.nativeElement.innerText.trim()\n : '';\n this.setAndEmitValue(label);\n }\n }\n\n onInputChange(value: string): void {\n if (value === '') {\n this.setAutoSelectWhenInputIsEmpty();\n } else {\n this.service.shouldAutoSelectOnListboxClose = this.autoSelect;\n }\n this.setAndEmitValue(value);\n }\n\n setAndEmitValue(value: string): void {\n this.setValue(value);\n this.emitValue(value);\n }\n\n setValue(value: string): void {\n this.value.next(value);\n }\n\n emitValue(value: string): void {\n if (this.ngFormControl) {\n this.ngFormControl.setValue(value);\n } else {\n this.valueChanges.emit(value);\n }\n }\n\n override handleClick(): void {\n this.service.setIsKeyboardEvent(false);\n if (this.service.isOpen) {\n this.service.closeListbox();\n } else {\n this.service.openListbox();\n if (this.autoSelect) {\n const inputValue = this.inputElRef.nativeElement.value;\n if (inputValue === '') {\n this.setAutoSelectWhenInputIsEmpty();\n } else {\n this.service.shouldAutoSelectOnListboxClose = this.autoSelect;\n }\n }\n }\n this.service.emitTextboxFocus();\n }\n\n protected setAutoSelectWhenInputIsEmpty(): void {\n this.service.shouldAutoSelectOnListboxClose = this.autoSelect\n ? this.autoSelectTrigger === 'any'\n : false;\n }\n\n override onEscape(): void {\n if (!this.service.isOpen) {\n this.setAndEmitValue('');\n this.service.emitOptionAction(OptionAction.nullActiveIndex);\n } else {\n this.service.closeListbox();\n this.service.emitTextboxFocus();\n }\n }\n\n override getActionFromKeydownEvent(event: KeyboardEvent): ComboboxAction {\n if (event.ctrlKey || event.key === 'Shift') {\n return null;\n }\n\n if (!this.service.isOpen && this.openKeys.includes(event.key)) {\n return ListboxAction.open;\n } else if (!this.service.isOpen && event.key === Key.Tab) {\n return null;\n } else if (\n event.key === Key.Enter &&\n (this.service.shouldAutoSelectOnListboxClose\n ? !this.service.isOpen\n : true)\n ) {\n return ListboxAction.close;\n } else {\n if (\n event.key === Key.RightArrow ||\n event.key === Key.LeftArrow ||\n event.key === Key.Space\n ) {\n this.service.emitTextboxFocus();\n return null;\n } else {\n return this.getActionFromKeydownEventWhenOpen(event);\n }\n }\n }\n\n getActionFromKeydownEventWhenOpen(event: KeyboardEvent): ComboboxAction {\n const { key } = event;\n if (key === Key.ArrowDown || key === 'Down') {\n return OptionAction.next;\n } else if (key === Key.ArrowUp) {\n return OptionAction.previous;\n } else if (key === Key.Enter || key === Key.Space) {\n return this.service.isMultiSelect\n ? OptionAction.select\n : ListboxAction.closeSelect;\n } else if (key === Key.Home) {\n return TextboxAction.cursorFirst;\n } else if (key === Key.End) {\n return TextboxAction.cursorLast;\n } else if (this.isPrintableCharacter(key) || key === 'Backspace') {\n return TextboxAction.addChar;\n } else if (key === Key.Tab) {\n return ListboxAction.closeSelect;\n } else {\n return null;\n }\n }\n\n override handleKeyboardAction(action: string, event: KeyboardEvent): void {\n if (action === ListboxAction.closeSelect) {\n event.stopPropagation();\n event.preventDefault();\n this.service.emitOptionAction(OptionAction.select);\n this.service.closeListbox();\n if (event.key !== Key.Tab) {\n this.service.emitTextboxFocus();\n }\n this.service.emitOptionAction(OptionAction.nullActiveIndex);\n } else if (\n action === OptionAction.next ||\n action === OptionAction.previous ||\n action === OptionAction.select\n ) {\n event.stopPropagation();\n event.preventDefault();\n this.service.emitOptionAction(action);\n } else if (action === ListboxAction.open) {\n event.stopPropagation();\n event.preventDefault();\n this.service.emitOptionAction(OptionAction.zeroActiveIndex);\n this.service.openListbox();\n this.service.emitTextboxFocus();\n } else if (action === ListboxAction.close) {\n event.stopPropagation();\n event.preventDefault();\n this.service.closeListbox();\n this.service.emitTextboxFocus();\n this.service.emitOptionAction(OptionAction.nullActiveIndex);\n } else if (\n action === TextboxAction.cursorFirst ||\n action === TextboxAction.cursorLast ||\n action === TextboxAction.addChar\n ) {\n this.service.emitTextboxFocus();\n if (!this.service.isOpen) {\n this.service.openListbox();\n }\n if (action === TextboxAction.cursorFirst) {\n this.inputElRef.nativeElement.setSelectionRange(0, 0);\n } else if (action === TextboxAction.cursorLast) {\n this.inputElRef.nativeElement.setSelectionRange(\n this.inputElRef.nativeElement.value.length,\n this.inputElRef.nativeElement.value.length\n );\n }\n if (this.autoSelect && action === TextboxAction.addChar) {\n this.service.emitOptionAction(OptionAction.zeroActiveIndex);\n } else {\n this.service.emitOptionAction(OptionAction.nullActiveIndex);\n }\n }\n }\n\n isPrintableCharacter(str: string) {\n return str.length === 1 && str.match(/\\S| /);\n }\n}\n","<div\n class=\"hsi-ui-editable-textbox-container\"\n [class.open]=\"service.isOpen$ | async\"\n #textInputTemplate\n>\n <input\n #box\n class=\"hsi-ui-editable-textbox-input\"\n [attr.type]=\"inputType\"\n role=\"combobox\"\n tabindex=\"0\"\n [id]=\"service.id + '-textbox'\"\n (click)=\"handleClick()\"\n (blur)=\"handleBlur($event)\"\n (keydown)=\"handleKeydown($event)\"\n autocomplete=\"off\"\n [attr.aria-label]=\"\n (service.label$ | async) === null\n ? ariaLabel || placeholder || service.isMultiSelect\n ? 'Search and select options'\n : 'Search and select an option'\n : null\n \"\n [attr.aria-labelledby]=\"\n (service.label$ | async) !== null ? service.comboboxLabelId : null\n \"\n [attr.aria-activedescendant]=\"service.activeDescendant$ | async\"\n [attr.aria-expanded]=\"service.isOpen$ | async\"\n [attr.aria-autocomplete]=\"service.autoComplete\"\n [attr.aria-controls]=\"service.id + '-listbox'\"\n aria-haspopup=\"listbox\"\n data-cy=\"editable-textbox-input\"\n [placeholder]=\"placeholder\"\n [ngModel]=\"value$ | async\"\n (ngModelChange)=\"onInputChange($event)\"\n />\n <div\n class=\"hsi-ui-textbox-icon hsi-ui-editable-textbox-icon\"\n [class.open]=\"service.isOpen$ | async\"\n >\n <ng-content select=\"[boxIcon]\"></ng-content\n ></div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { ComboboxLabelComponent } from './combobox-label/combobox-label.component';\nimport { ComboboxComponent } from './combobox.component';\nimport { EditableTextboxComponent } from './editable-textbox/editable-textbox.component';\nimport { ListboxGroupComponent } from './listbox-group/listbox-group.component';\nimport { ListboxLabelComponent } from './listbox-label/listbox-label.component';\nimport { ListboxOptionComponent } from './listbox-option/listbox-option.component';\nimport { ListboxComponent } from './listbox/listbox.component';\nimport { SelectAllListboxOptionComponent } from './select-all-listbox-option/select-all-listbox-option.component';\nimport { TextboxComponent } from './textbox/textbox.component';\n\n@NgModule({\n imports: [\n ComboboxComponent,\n ComboboxLabelComponent,\n TextboxComponent,\n ListboxComponent,\n ListboxGroupComponent,\n ListboxOptionComponent,\n ListboxLabelComponent,\n EditableTextboxComponent,\n SelectAllListboxOptionComponent,\n ],\n exports: [\n ComboboxComponent,\n ComboboxLabelComponent,\n TextboxComponent,\n ListboxComponent,\n ListboxGroupComponent,\n ListboxLabelComponent,\n ListboxOptionComponent,\n EditableTextboxComponent,\n SelectAllListboxOptionComponent,\n ],\n})\nexport class HsiUiComboboxModule {}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { NgOnChangesUtilities } from '@mathstack/app-kit';\nimport { BehaviorSubject } from 'rxjs';\n\nexport interface HsiUiDirectoryItem {\n name: string;\n value?: string;\n children?: HsiUiDirectoryItem[];\n}\n\nexport interface HsiUiDirectorySelection {\n activePath: string;\n selectedItem: string;\n}\n\n@Component({\n selector: 'hsi-ui-directory',\n imports: [CommonModule, MatIconModule],\n templateUrl: './directory.component.html',\n styleUrls: ['./directory.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HsiUiDirectoryComponent implements OnChanges {\n @Input() items: HsiUiDirectoryItem[];\n @Input() level: number = 0;\n @Input() path: string = '';\n @Input() terminalItemsAreSelectable: boolean = true;\n @Input() selectionElementRole: string = 'button';\n /**\n * Sets the activePath and selectedItem.\n */\n @Input() selection: HsiUiDirectorySelection;\n /**\n * Emits the activePath and selectedItem when a leaf item is selected.\n *\n * Constructed from the `value` of each item if provided, otherwise uses `name`.\n */\n @Output() selectionChanges = new EventEmitter<HsiUiDirectorySelection>();\n /**\n * @internal\n *\n * Internal, will have no effect if provided at root level.\n */\n @Output() stateChanges = new EventEmitter<HsiUiDirectorySelection>();\n state: BehaviorSubject<HsiUiDirectorySelection> =\n new BehaviorSubject<HsiUiDirectorySelection>({\n activePath: '',\n selectedItem: '',\n });\n state$ = this.state.asObservable();\n open = {};\n\n ngOnChanges(changes: SimpleChanges) {\n if (NgOnChangesUtilities.inputObjectChanged(changes, 'selection')) {\n this.state.next(this.selection);\n }\n }\n\n toggleOpen(key: string): void {\n if (this.open[key] === undefined) {\n this.open[key] = true;\n } else {\n this.open[key] = !this.open[key];\n }\n }\n\n // public events are emitted on leaf selection\n selectItem(item: HsiUiDirectoryItem): void {\n const itemValue = item.value || item.name;\n const activePath = this.path ? `${this.path}/${itemValue}` : itemValue;\n if (this.level === 0) {\n this.selectionChanges.emit({\n activePath: activePath,\n selectedItem: itemValue,\n });\n } else {\n this.stateChanges.emit({ activePath, selectedItem: itemValue });\n }\n }\n\n // called when child emits new _activePath value\n setState(state: HsiUiDirectorySelection): void {\n if (this.level === 0) {\n this.state.next(state);\n this.selectionChanges.emit({\n activePath: state.activePath,\n selectedItem: state.selectedItem,\n });\n } else {\n this.stateChanges.emit(state);\n }\n }\n}\n","@for (item of items; track $index) {\n @if (!!item.children && item.children.length > 0) {\n <!-- This is the template for expandable nodes -->\n <div [style.--level]=\"level\">\n <div\n class=\"item expandable\"\n [ngClass]=\"'level-' + level\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"toggleOpen(item.name)\"\n (enter)=\"toggleOpen(item.name)\"\n >\n <p class=\"name\">{{ item.name }}</p>\n @if (open[item.name]) {\n <span aria-hidden=\"true\" class=\"material-symbols-outlined arrow\"\n >expand_more</span\n >\n } @else {\n <span aria-hidden=\"true\" class=\"material-symbols-outlined arrow\"\n >chevron_right</span\n >\n }\n </div>\n <hsi-ui-directory\n [items]=\"item.children\"\n [level]=\"level + 1\"\n [terminalItemsAreSelectable]=\"terminalItemsAreSelectable\"\n [path]=\"\n path.concat(\n level !== 0\n ? '/' + (item.value || item.name)\n : item.value || item.name\n )\n \"\n [class.invisible]=\"!open[item.name]\"\n (stateChanges)=\"setState($event)\"\n [selection]=\"state$ | async\"\n ></hsi-ui-directory>\n </div>\n } @else {\n <!-- This is the template for leaf nodes -->\n @if (terminalItemsAreSelectable) {\n <div\n class=\"item selectable\"\n [ngClass]=\"'level-' + level\"\n [attr.role]=\"selectionElementRole\"\n tabindex=\"0\"\n [style.--level]=\"level\"\n [class.active]=\"\n (state$ | async).activePath ===\n (level > 0 ? path + '/' : '') + (item.value || item.name)\n \"\n (click)=\"selectItem(item)\"\n (enter)=\"selectItem(item)\"\n >\n <p class=\"name\">{{ item.name }}</p>\n </div>\n } @else {\n <div class=\"item\" [style.--level]=\"level\">\n <p class=\"name\">{{ item.name }}</p>\n </div>\n }\n }\n}\n","import { safeAssign } from '@mathstack/app-kit';\nimport { ascending } from 'd3';\n\nexport enum SortDirection {\n asc = 'asc',\n desc = 'desc',\n}\n\nexport type SortDirectionType = keyof typeof SortDirection;\nexport type TableValue = string | number | boolean | Date;\nexport type TableCellAlignment = 'left' | 'center' | 'right';\n\nexport class TableColumn<Datum> {\n /**\n * The label of the column. Used in the table header.\n * */\n label: string;\n /**\n * Function to extract the value to be sorted on from the datum.\n * If not provided, the formatted value will be used for sorting.\n */\n getSortValue: (x: Datum) => TableValue;\n /**\n * Function to format the value for display in the table.\n */\n getFormattedValue: (x: Datum) => string;\n /**\n * Function to determine the alignment of the cell content.\n */\n getAlignment: (x: Datum) => TableCellAlignment;\n /**\n * Width of the column. Can be a percentage or pixel value.\n */\n width: string;\n /**\n * Function to determine the sort order of the column.\n * If not provided, sort with use d3.ascending on the getSortValue or getFormattedValue.\n */\n ascendingSortFunction: (a: Datum, b: Datum) => number;\n sortDirection: SortDirectionType;\n /**\n * Whether the column is sortable.\n */\n sortable = false;\n activelySorted: boolean;\n /**\n * The sort order of the column. Used to determine the order of sorting when multiple columns are sorted.\n * Sorting tiebreaks are determined by increasing sortOrder number.\n **/\n sortOrder: number = Number.MAX_SAFE_INTEGER;\n /**\n * Whether the column is a row header.\n */\n isRowHeader = false;\n readonly initialSortDirection: SortDirectionType;\n\n constructor(init?: Partial<TableColumn<Datum>>) {\n this.sortDirection = SortDirection.asc;\n this.getAlignment = () => 'left';\n safeAssign(this, init);\n this.initialSortDirection = this.sortDirection;\n if (this.ascendingSortFunction === undefined) {\n this.ascendingSortFunction = this.defaultSort;\n }\n }\n\n defaultSort(a: Datum, b: Datum): number {\n const accessor = this.getSortValue || this.getFormattedValue;\n return ascending(accessor(a), accessor(b));\n }\n}\n","/* eslint-disable @angular-eslint/prefer-standalone */\nimport { Component, Input } from '@angular/core';\nimport { TableColumn } from '../table-column';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[hsi-ui-single-sort-header]',\n templateUrl: './single-sort-header.component.html',\n styleUrls: ['./single-sort-header.component.scss'],\n standalone: false,\n})\nexport class SingleSortHeaderComponent<Datum> {\n @Input() column: TableColumn<Datum>;\n @Input() sortIcon: string;\n\n getColumnSortClasses(): string[] {\n const baseClasses = [\n 'material-symbols-outlined',\n this.column.sortDirection,\n ];\n return this.column.activelySorted\n ? baseClasses.concat('actively-sorted')\n : baseClasses;\n }\n}\n","<div class=\"header-cell-sort\">\n <span>{{ column.label }}</span>\n <span\n aria-hidden=\"true\"\n class=\"material-symbols-outlined\"\n [ngClass]=\"getColumnSortClasses()\"\n >{{ sortIcon }}</span\n >\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n Input,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { min } from 'd3';\nimport { isEqual } from 'lodash-es';\nimport {\n BehaviorSubject,\n Observable,\n distinctUntilChanged,\n filter,\n map,\n merge,\n scan,\n shareReplay,\n withLatestFrom,\n} from 'rxjs';\nimport { SortDirection, TableColumn } from './table-column';\nimport { HsiUiTableConfig } from './table.config';\n\n@Component({\n selector: 'hsi-ui-table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n // eslint-disable-next-line @angular-eslint/prefer-standalone\n standalone: false,\n})\nexport class TableComponent<Datum> implements OnInit {\n @Input() config$: Observable<HsiUiTableConfig<Datum>>;\n @Input() sortIcon = 'arrow_upward';\n data$: Observable<Datum[]>;\n columns$: Observable<TableColumn<Datum>[]>;\n tableHeaders$: Observable<string[]>;\n sort: BehaviorSubject<TableColumn<Datum>> = new BehaviorSubject(null);\n sort$: Observable<TableColumn<Datum>> = this.sort.asObservable();\n\n constructor(private destroyRef: DestroyRef) {}\n\n ngOnInit(): void {\n this.setTableData();\n this.setTableHeaders();\n this.validateRowHeaders();\n }\n\n setTableData(): void {\n const config$ = this.config$.pipe(\n withLatestFrom(this.sort$),\n map(([config, sort]) => () => {\n const activeSortColumn =\n sort || this.getMinSortOrderColumn(config.columns);\n const columns = this.getColumnsWithNewSortApplied(\n activeSortColumn,\n config.columns,\n false\n );\n return {\n data: this.sortData(config.data, activeSortColumn, columns),\n columns,\n };\n })\n );\n\n const sort$ = this.sort$.pipe(\n filter((sort) => sort !== null),\n map((sort) => (sortedConfig: HsiUiTableConfig<Datum>) => {\n const columns = this.getColumnsWithNewSortApplied(\n sort,\n sortedConfig.columns\n );\n return {\n data: this.sortData(sortedConfig.data, sort, columns),\n columns,\n };\n })\n );\n const sortedConfig$ = merge(config$, sort$).pipe(\n scan((sortedConfig, changeFn) => changeFn(sortedConfig), {\n data: [],\n columns: [],\n }),\n shareReplay(1) // do not remove sort toggle will be called twice\n );\n\n this.data$ = sortedConfig$.pipe(\n map((x) => x.data),\n shareReplay(1)\n );\n this.columns$ = sortedConfig$.pipe(\n map((x) => x.columns),\n shareReplay(1)\n );\n }\n\n getMinSortOrderColumn(columns: TableColumn<Datum>[]): TableColumn<Datum> {\n const minSortOrder = min(columns, (x) => x.sortOrder);\n return columns.find((x) => x.sortOrder === minSortOrder);\n }\n\n getColumnsWithNewSortApplied(\n activeSortColumn: TableColumn<Datum>,\n columns: TableColumn<Datum>[],\n toggleSortDirection = true\n ): TableColumn<Datum>[] {\n const columnsWithSortDir = columns.map((x) => {\n if (x.label === activeSortColumn.label) {\n if (toggleSortDirection) {\n x.sortDirection =\n x.sortDirection === SortDirection.asc\n ? SortDirection.desc\n : SortDirection.asc;\n }\n x.activelySorted = true;\n } else {\n if (toggleSortDirection) {\n x.sortDirection = x.initialSortDirection;\n }\n x.activelySorted = false;\n }\n return x;\n });\n return columnsWithSortDir;\n }\n\n setTableHeaders(): void {\n this.tableHeaders$ = this.columns$.pipe(\n map((columns) => columns.map((x) => x.label)),\n distinctUntilChanged((a, b) => isEqual(a, b)),\n shareReplay(1)\n );\n }\n\n validateRowHeaders(): void {\n this.columns$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((columns) => {\n const rowHeaders = columns.filter((x) => x.isRowHeader);\n if (rowHeaders.length > 1) {\n throw new Error(\n 'Table can only have one row header column. Please update your column config.'\n );\n }\n });\n }\n\n sortTableByColumn(column: TableColumn<Datum>) {\n this.sort.next(column);\n }\n\n sortData(\n data: Datum[],\n primaryColumnSort: TableColumn<Datum>,\n columns: TableColumn<Datum>[]\n ): Datum[] {\n const sortedColumns = columns.slice().sort((columnA, columnB) => {\n return columnA.label === primaryColumnSort.label\n ? -1\n : columnB.label === primaryColumnSort.label\n ? 1\n : columnA.sortOrder - columnB.sortOrder;\n });\n\n const sortedData = data.slice().sort((a, b) => {\n for (const column of sortedColumns) {\n let returnValue = column.ascendingSortFunction(a, b);\n if (column.sortDirection === SortDirection.desc) {\n returnValue *= -1;\n }\n if (returnValue !== 0) return returnValue;\n }\n return 0;\n });\n return sortedData;\n }\n\n columnTrackingFunction(_: number, column: TableColumn<Datum>) {\n return column.label;\n }\n}\n","<table class=\"table-container\" cdk-table [dataSource]=\"data$\">\n <col\n *ngFor=\"let column of columns$ | async; trackBy: columnTrackingFunction\"\n span=\"1\"\n [style]=\"'width:' + column.width\"\n />\n\n <ng-container\n *ngFor=\"let column of columns$ | async; trackBy: columnTrackingFunction\"\n [cdkColumnDef]=\"column.label\"\n >\n <ng-container\n *ngIf=\"column.sortable; then sortIconCells; else basicCells\"\n ></ng-container>\n <ng-template #sortIconCells>\n <th\n hsi-ui-single-sort-header\n scope=\"col\"\n cdk-header-cell\n *cdkHeaderCellDef=\"let element\"\n [ngClass]=\"[column.getAlignment(element), 'sorted-header']\"\n [column]=\"column\"\n [sortIcon]=\"sortIcon\"\n (click)=\"sortTableByColumn(column)\"\n ></th>\n <td\n cdk-cell\n [ngClass]=\"[column.getAlignment(element), 'sorted-header']\"\n *cdkCellDef=\"let element\"\n [attr.scope]=\"column.isRowHeader ? 'row' : null\"\n data-cy=\"table-cell\"\n >\n {{ column.getFormattedValue(element) }}\n </td>\n </ng-template>\n <ng-template #basicCells>\n <th\n cdk-header-cell\n *cdkHeaderCellDef=\"let element\"\n [class]=\"column.getAlignment(element)\"\n scope=\"col\"\n >\n {{ column.label }}\n </th>\n <td\n cdk-cell\n [ngClass]=\"[column.getAlignment(element), 'sorted-cell']\"\n *cdkCellDef=\"let element\"\n [attr.scope]=\"column.isRowHeader ? 'row' : null\"\n data-cy=\"table-cell\"\n >\n {{ column.getFormattedValue(element) }}\n </td>\n </ng-template>\n </ng-container>\n\n <tr\n cdk-header-row\n class=\"header\"\n *cdkHeaderRowDef=\"tableHeaders$ | async\"\n ></tr>\n <tr\n cdk-row\n class=\"row\"\n data-cy=\"table-row\"\n *cdkRowDef=\"let row; columns: tableHeaders$ | async\"\n ></tr>\n <ng-template></ng-template>\n</table>\n","import { TableColumn } from './table-column';\n\nexport class HsiUiTableConfig<Datum> {\n data: Datum[];\n columns: TableColumn<Datum>[];\n}\n","import { CdkTableModule } from '@angular/cdk/table';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { SingleSortHeaderComponent } from './single-sort-header/single-sort-header.component';\nimport { TableComponent } from './table.component';\n\n@NgModule({\n declarations: [TableComponent, SingleSortHeaderComponent],\n imports: [CommonModule, CdkTableModule, MatIconModule],\n exports: [TableComponent],\n})\nexport class TableModule {}\n","import { Directive, InjectionToken, TemplateRef } from '@angular/core';\nimport { MatTabContent } from '@angular/material/tabs';\n\nexport const HSI_UI_TAB_CONTENT = new InjectionToken<MatTabContent>(\n 'TabContent'\n);\n\n/**\n * Allows a tab to be lazy-loaded when it is activated when used as a directive on an ng-template. It is recommended that this be used when the content of the tab requires calculations.\n *\n * Has the same functionality as https://material.angular.io/components/tabs/overview#lazy-loading\n */\n\n@Directive({\n selector: '[hsiUiTabContent]',\n providers: [\n { provide: HSI_UI_TAB_CONTENT, useExisting: TabContentDirective },\n ],\n})\nexport class TabContentDirective {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(/** Content for the tab. */ public template: TemplateRef<any>) {}\n}\n","import { Component, ContentChild, TemplateRef, ViewChild } from '@angular/core';\nimport { TabContentDirective } from './tab-content.directive';\n\n@Component({\n selector: 'hsi-ui-tab-body',\n template: '<ng-template><ng-content></ng-content></ng-template>',\n})\nexport class TabBodyComponent {\n @ViewChild(TemplateRef)\n bodyContent: TemplateRef<HTMLElement>;\n @ContentChild(TabContentDirective, { read: TemplateRef, static: true })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n lazyLoadedContent: TemplateRef<any>;\n}\n","import {\n Component,\n ElementRef,\n Input,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: 'hsi-ui-tab-label',\n template: `<ng-template\n ><div #label class=\"tab-label\" [id]=\"id\"><ng-content></ng-content></div\n ></ng-template>`,\n})\nexport class TabLabelComponent {\n @Input() value: string;\n @ViewChild('label')\n labelElement: ElementRef<HTMLDivElement>;\n @ViewChild(TemplateRef) labelContent: TemplateRef<unknown>;\n id = `tab-label-${nextUniqueId++}`;\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { TabItemComponent } from './tab-item.component';\n\n@Injectable()\nexport class TabsService<T> {\n activeTab: BehaviorSubject<TabItemComponent<T> | null> =\n new BehaviorSubject<TabItemComponent<T> | null>(null);\n activeTab$ = this.activeTab.asObservable();\n}\n","import { Component, ContentChild, Input, OnChanges } from '@angular/core';\nimport { TabBodyComponent } from './tab-body.component';\nimport { TabLabelComponent } from './tab-label.component';\nimport { TabsService } from './tabs.service';\n\n@Component({\n selector: 'hsi-ui-tab-item',\n template: '<ng-content></ng-content>',\n})\nexport class TabItemComponent<T> implements OnChanges {\n @Input() isActive = false;\n @Input() value: T;\n @ContentChild(TabBodyComponent) bodyComponent: TabBodyComponent;\n @ContentChild(TabLabelComponent) labelComponent: TabLabelComponent;\n\n constructor(private service: TabsService<T>) {}\n\n ngOnChanges(): void {\n if (this.isActive) {\n this.service.activeTab.next(this);\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterContentInit,\n Component,\n ContentChildren,\n DestroyRef,\n EventEmitter,\n Output,\n QueryList,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Observable, map, startWith } from 'rxjs';\nimport { TabItemComponent } from './tab-item.component';\nimport { TabsService } from './tabs.service';\n\n@Component({\n selector: 'hsi-ui-tabs',\n imports: [CommonModule],\n providers: [TabsService],\n templateUrl: './tabs.component.html',\n styleUrls: ['./tabs.component.scss'],\n})\nexport class TabsComponent<T> implements AfterContentInit {\n @ContentChildren(TabItemComponent) tabs: QueryList<TabItemComponent<T>>;\n @Output() tabChange = new EventEmitter<T | string>();\n tabItems$: Observable<TabItemComponent<T>[]>;\n tabChanges$: Observable<boolean[]>;\n\n constructor(\n public service: TabsService<T>,\n private destroyRef: DestroyRef\n ) {}\n\n ngAfterContentInit(): void {\n this.tabItems$ = this.tabs.changes.pipe(\n takeUntilDestroyed(this.destroyRef),\n startWith(''),\n map(() => this.tabs.toArray())\n );\n this.initializeActiveTab();\n }\n\n initializeActiveTab(): void {\n if (!this.service.activeTab.value) {\n this.service.activeTab.next(this.tabs.first);\n }\n }\n\n selectTab(tabItem: TabItemComponent<T>): void {\n if (this.service.activeTab.value !== tabItem) {\n this.service.activeTab.next(tabItem);\n this.emitNewActiveTab(tabItem);\n }\n }\n\n emitNewActiveTab(tabItem: TabItemComponent<T>): void {\n const value =\n tabItem.value ??\n tabItem.labelComponent.labelElement.nativeElement.innerText;\n this.tabChange.emit(value);\n }\n\n handleKeydown(event: KeyboardEvent, tabItem: TabItemComponent<T>): void {\n const tabIndex = this.tabs.toArray().indexOf(tabItem);\n let cancelOtherActions = false;\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n this.selectTab(tabItem);\n cancelOtherActions = true;\n break;\n\n case 'ArrowRight':\n case 'Right':\n this.focusNextTab(tabIndex);\n cancelOtherActions = true;\n break;\n\n case 'ArrowLeft':\n case 'Left':\n this.focusPreviousTab(tabIndex);\n cancelOtherActions = true;\n break;\n\n case 'Home':\n this.focusTab(this.tabs.first);\n cancelOtherActions = true;\n break;\n\n case 'End':\n this.focusTab(this.tabs.last);\n cancelOtherActions = true;\n break;\n\n default:\n break;\n }\n\n if (cancelOtherActions) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n focusTab(tabItem: TabItemComponent<T>): void {\n tabItem.labelComponent.labelElement.nativeElement.parentElement?.focus();\n }\n\n focusNextTab(tabIndex: number): void {\n if (tabIndex < this.tabs.length - 1) {\n this.focusTab(this.tabs.toArray()[tabIndex + 1]);\n } else {\n this.focusTab(this.tabs.first);\n }\n }\n\n focusPreviousTab(tabIndex: number): void {\n if (tabIndex > 0) {\n this.focusTab(this.tabs.toArray()[tabIndex - 1]);\n } else {\n this.focusTab(this.tabs.last);\n }\n }\n}\n","<ng-container *ngIf=\"service.activeTab$ | async as activeTab\">\n <div class=\"tab-list\" role=\"tablist\">\n <div\n *ngFor=\"let item of tabItems$ | async\"\n role=\"tab\"\n [tabindex]=\"activeTab === item ? 0 : -1\"\n class=\"tab-label-container\"\n (click)=\"selectTab(item)\"\n (keydown)=\"handleKeydown($event, item)\"\n [attr.aria-selected]=\"activeTab === item\"\n [class.active]=\"activeTab === item\"\n aria-controls=\"tabs-component-body\"\n data-cy=\"level\"\n >\n <ng-container *ngIf=\"item.labelComponent\">\n <ng-container *ngTemplateOutlet=\"item.labelComponent.labelContent\">\n </ng-container>\n </ng-container>\n </div>\n </div>\n <div\n class=\"tabs-body\"\n id=\"tabs-component-body\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"activeTab?.labelComponent?.id\"\n >\n @if (activeTab.bodyComponent) {\n @if (activeTab.bodyComponent?.lazyLoadedContent) {\n <ng-container\n *ngTemplateOutlet=\"activeTab.bodyComponent.lazyLoadedContent\"\n >\n </ng-container>\n } @else {\n <ng-container *ngTemplateOutlet=\"activeTab.bodyComponent.bodyContent\">\n </ng-container>\n }\n }\n </div>\n</ng-container>\n","import { NgModule } from '@angular/core';\nimport { TabBodyComponent } from './tab-body.component';\nimport { TabContentDirective } from './tab-content.directive';\nimport { TabItemComponent } from './tab-item.component';\nimport { TabLabelComponent } from './tab-label.component';\nimport { TabsComponent } from './tabs.component';\n\n@NgModule({\n declarations: [],\n imports: [\n TabsComponent,\n TabLabelComponent,\n TabItemComponent,\n TabBodyComponent,\n TabContentDirective,\n ],\n exports: [\n TabsComponent,\n TabLabelComponent,\n TabItemComponent,\n TabBodyComponent,\n TabContentDirective,\n ],\n})\nexport class TabsModule {}\n","/*\n * Public API Surface of ui\n */\n\nexport * from './lib/combobox/index';\nexport * from './lib/directory/index';\nexport * from './lib/table/index';\nexport * from './lib/tabs/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["nextUniqueId","i1.ComboboxService","i2","i2.ListboxFilteringService","i3.ListboxScrollService","i2.ActiveIndexService","i3.ListboxFilteringService","i4.ListboxScrollService","i5","i2.ListboxComponent","i3","i1","i3.SingleSortHeaderComponent","i1.TabsService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mathstack-ui.mjs","sources":["../../../libs/ui/src/lib/combobox/listbox-option/listbox-option.component.ts","../../../libs/ui/src/lib/combobox/listbox-option/listbox-option.component.html","../../../libs/ui/src/lib/combobox/listbox-label/listbox-label.component.ts","../../../libs/ui/src/lib/combobox/listbox-label/listbox-label.component.html","../../../libs/ui/src/lib/combobox/listbox-group/listbox-group.component.ts","../../../libs/ui/src/lib/combobox/listbox/listbox-filtering.service.ts","../../../libs/ui/src/lib/combobox/listbox/listbox-scroll.service.ts","../../../libs/ui/src/lib/combobox/listbox/active-index.service.ts","../../../libs/ui/src/lib/combobox/listbox/listbox.component.ts","../../../libs/ui/src/lib/combobox/listbox/listbox.component.html","../../../libs/ui/src/lib/combobox/select-all-listbox-option/select-all-listbox-option.component.ts","../../../libs/ui/src/lib/combobox/combobox.service.ts","../../../libs/ui/src/lib/combobox/combobox-label/combobox-label.component.ts","../../../libs/ui/src/lib/combobox/combobox.component.ts","../../../libs/ui/src/lib/combobox/combobox.component.html","../../../libs/ui/src/lib/combobox/textbox/textbox.component.ts","../../../libs/ui/src/lib/combobox/textbox/textbox.component.html","../../../libs/ui/src/lib/combobox/editable-textbox/editable-textbox.component.ts","../../../libs/ui/src/lib/combobox/editable-textbox/editable-textbox.component.html","../../../libs/ui/src/lib/combobox/combobox.module.ts","../../../libs/ui/src/lib/directory/directory.component.ts","../../../libs/ui/src/lib/directory/directory.component.html","../../../libs/ui/src/lib/table/single-sort-header/single-sort-header.component.ts","../../../libs/ui/src/lib/table/single-sort-header/single-sort-header.component.html","../../../libs/ui/src/lib/table/table-column.ts","../../../libs/ui/src/lib/table/table.component.ts","../../../libs/ui/src/lib/table/table.component.html","../../../libs/ui/src/lib/table/table.config.ts","../../../libs/ui/src/lib/table/table.module.ts","../../../libs/ui/src/lib/tabs/tab-content.directive.ts","../../../libs/ui/src/lib/tabs/tab-body.component.ts","../../../libs/ui/src/lib/tabs/tab-label.component.ts","../../../libs/ui/src/lib/tabs/tabs.service.ts","../../../libs/ui/src/lib/tabs/tab-item.component.ts","../../../libs/ui/src/lib/tabs/tabs.component.ts","../../../libs/ui/src/lib/tabs/tabs.component.html","../../../libs/ui/src/lib/tabs/tabs.module.ts","../../../libs/ui/src/public-api.ts","../../../libs/ui/src/mathstack-ui.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n Component,\n ElementRef,\n Input,\n OnChanges,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n inject,\n} from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { ComboboxService } from '../combobox.service';\n\nexport interface ListboxOptionPropertyChange {\n property: 'selected' | 'disabled';\n value: boolean;\n comboboxId: string;\n id: number;\n optionValue: string | number | boolean;\n}\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: 'hsi-ui-listbox-option',\n imports: [CommonModule],\n templateUrl: './listbox-option.component.html',\n styleUrls: ['./listbox-option.component.scss'],\n})\nexport class ListboxOptionComponent implements OnChanges {\n @ViewChild('label') label: ElementRef<HTMLDivElement>;\n @ViewChild('option') template: TemplateRef<unknown>;\n @Input() boxDisplayLabel: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n @Input() value: any;\n /** Whether the option is selected.\n * If this property is changed during this component's lifecycle, no new value will be emitted from the listbox.\n * Box label and select all button will respond to changes.\n * @default false\n */\n @Input() selected = false;\n /** Whether the option is selected.\n * If this property is changed during this component's lifecycle, no new value will be emitted from the listbox.\n * Box label and select all button will respond to changes.\n * @default false\n */\n @Input() disabled = false;\n @Input() ariaLabel: string;\n id = nextUniqueId++;\n // Only used for to update styles on change in listbox.component.html\n protected _selected: BehaviorSubject<boolean> = new BehaviorSubject(false);\n selected$ = this._selected.asObservable();\n private _disabled: BehaviorSubject<boolean> = new BehaviorSubject(false);\n disabled$ = this._disabled.asObservable();\n private externalPropertyChanges: BehaviorSubject<ListboxOptionPropertyChange> =\n new BehaviorSubject(null);\n externalPropertyChanges$ = this.externalPropertyChanges.asObservable();\n\n protected service = inject(ComboboxService);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n get valueToEmit(): any | string {\n return this.value || this.label?.nativeElement?.innerText.trim();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['disabled']) {\n this.updateDisabled(this.disabled);\n\n if (!this.isFirstChangeAndValueIsFalse(changes, 'disabled')) {\n this.externalPropertyChanges.next(this.getPropertyChange('disabled'));\n }\n }\n\n if (changes['selected']) {\n if (changes['selected'].isFirstChange()) {\n this.updateSelected(this.selected);\n if (this.selected) {\n this.externalPropertyChanges.next(this.getPropertyChange('selected'));\n }\n } else if (!this.disabled && this.selected !== this._selected.value) {\n this.updateSelected(this.selected);\n this.externalPropertyChanges.next(this.getPropertyChange('selected'));\n }\n }\n }\n\n isFirstChangeAndValueIsFalse(\n change: SimpleChanges,\n property: 'selected' | 'disabled'\n ): boolean {\n return change[property].isFirstChange() && !this[property];\n }\n\n getPropertyChange(\n property: 'selected' | 'disabled'\n ): ListboxOptionPropertyChange {\n return {\n property,\n value: this[property],\n comboboxId: this.service.id,\n id: this.id,\n optionValue: this.valueToEmit,\n };\n }\n\n protected updateSelected(selected: boolean): void {\n this._selected.next(selected);\n }\n\n private updateDisabled(disabled: boolean): void {\n this._disabled.next(disabled);\n }\n\n select(): void {\n if (!this._disabled.value) {\n this.updateSelected(true);\n }\n }\n\n deselect(): void {\n if (!this._disabled.value) {\n this.updateSelected(false);\n }\n }\n\n toggleSelected(): void {\n this.updateSelected(!this._selected.value);\n }\n\n isSelected(): boolean {\n return this._selected.value;\n }\n\n isDisabled(): boolean {\n return this._disabled.value;\n }\n}\n","<ng-template #option>\n <div class=\"hsi-ui-listbox-option-container\">\n @if (isSelected()) {\n <ng-container *ngTemplateOutlet=\"selectedIcon\"></ng-container>\n } @else {\n <ng-container *ngTemplateOutlet=\"unselectedIcon\"></ng-container>\n }\n <div\n #label\n class=\"hsi-ui-listbox-option-label\"\n [attr.aria-label]=\"ariaLabel\"\n ><ng-content></ng-content\n ></div>\n </div>\n</ng-template>\n\n<ng-template #selectedIcon\n ><ng-content select=\"[selectedIcon]\"></ng-content>\n</ng-template>\n<ng-template #unselectedIcon\n ><ng-content select=\"[unselectedIcon]\"></ng-content>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n ElementRef,\n TemplateRef,\n ViewChild,\n inject,\n} from '@angular/core';\nimport { ComboboxService } from '../combobox.service';\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: 'hsi-ui-listbox-label',\n imports: [CommonModule],\n templateUrl: './listbox-label.component.html',\n styleUrls: ['./listbox-label.component.scss'],\n host: {\n class: 'hsi-ui-listbox-label',\n },\n})\nexport class ListboxLabelComponent {\n @ViewChild('label') labelContent: TemplateRef<unknown>;\n @ViewChild('text') label: ElementRef<HTMLParagraphElement>;\n id: string;\n private service = inject(ComboboxService);\n\n constructor() {\n this.id = `${this.service.id}-listbox-label-${nextUniqueId++}`;\n }\n}\n","<ng-template #label let-wrapperHasId=\"wrapperHasId\">\n <p\n class=\"hsi-ui-listbox-label\"\n [attr.id]=\"wrapperHasId ? null : id\"\n role=\"presentation\"\n #text\n >\n <ng-content></ng-content>\n </p>\n</ng-template>\n","import {\n AfterContentInit,\n Component,\n ContentChild,\n ContentChildren,\n QueryList,\n inject,\n} from '@angular/core';\nimport { Observable, map, startWith } from 'rxjs';\nimport { ComboboxService } from '../combobox.service';\nimport { ListboxLabelComponent } from '../listbox-label/listbox-label.component';\nimport { ListboxOptionComponent } from '../listbox-option/listbox-option.component';\n\n@Component({\n selector: 'hsi-ui-listbox-group',\n template: `<ng-content></ng-content>`,\n host: {\n class: 'hsi-ui-listbox-group',\n },\n})\nexport class ListboxGroupComponent implements AfterContentInit {\n @ContentChild(ListboxLabelComponent)\n label: ListboxLabelComponent;\n @ContentChildren(ListboxOptionComponent)\n options: QueryList<ListboxOptionComponent>;\n options$: Observable<ListboxOptionComponent[]>;\n\n public service = inject(ComboboxService);\n\n ngAfterContentInit(): void {\n this.options$ = this.options.changes.pipe(\n startWith(''),\n map(() => this.options.toArray())\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ListboxOptionComponent } from '../listbox-option/listbox-option.component';\n\n@Injectable()\nexport class ListboxFilteringService {\n searchTimeout: ReturnType<typeof setTimeout>;\n searchString: string;\n\n updateSearchString(char: string): void {\n if (typeof this.searchTimeout === 'number') {\n clearTimeout(this.searchTimeout);\n }\n\n this.searchTimeout = setTimeout(() => {\n this.searchString = '';\n }, 500);\n\n this.searchString += char;\n }\n\n resetSearch(): void {\n clearTimeout(this.searchTimeout);\n this.searchString = '';\n }\n\n getIndexByLetter(\n options: ListboxOptionComponent[],\n searchString: string,\n startIndex: number\n ): number {\n const orderedOptions = [\n ...options.slice(startIndex),\n ...options.slice(0, startIndex),\n ];\n const firstMatch = this.filterOptionsBySearchString(\n orderedOptions,\n searchString\n )[0];\n const allSameLetter = (array: string[]) =>\n array.every((letter) => letter === array[0]);\n\n if (firstMatch) {\n return options.indexOf(firstMatch);\n } else if (allSameLetter(searchString.split(''))) {\n const matches = this.filterOptionsBySearchString(\n orderedOptions,\n searchString[0]\n );\n return options.indexOf(matches[0]);\n } else {\n return -1;\n }\n }\n\n filterOptionsBySearchString(\n options: ListboxOptionComponent[] = [],\n searchString: string,\n exclude: ListboxOptionComponent[] = []\n ): ListboxOptionComponent[] {\n return options.filter((option) => {\n const matches =\n option.label?.nativeElement.innerText\n .toLowerCase()\n .indexOf(searchString.toLowerCase()) === 0;\n return (\n matches &&\n exclude\n .map((x) => x.label?.nativeElement.innerText)\n .indexOf(option.label?.nativeElement.innerText) < 0\n );\n });\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\n\n@Injectable()\nexport class ListboxScrollService {\n private document = inject(DOCUMENT);\n\n isElementInView(element: HTMLElement): boolean {\n const bounding = element.getBoundingClientRect();\n\n return (\n bounding.top >= 0 &&\n bounding.left >= 0 &&\n bounding.bottom <=\n (window.innerHeight || this.document.documentElement.clientHeight) &&\n bounding.right <=\n (window.innerWidth || this.document.documentElement.clientWidth)\n );\n }\n\n isScrollable(element: HTMLElement): boolean {\n return element && element.parentElement.clientHeight < element.scrollHeight;\n }\n\n maintainElementVisibility(\n activeElement: HTMLElement,\n scrollParent: HTMLElement\n ): void {\n const { offsetHeight, offsetTop } = activeElement;\n const { offsetHeight: parentOffsetHeight, scrollTop } = scrollParent;\n\n const isAbove = offsetTop < scrollTop;\n const isBelow = offsetTop + offsetHeight > scrollTop + parentOffsetHeight;\n\n if (isAbove) {\n scrollParent.scrollTo(0, offsetTop);\n } else if (isBelow) {\n scrollParent.scrollTo(0, offsetTop - parentOffsetHeight + offsetHeight);\n }\n }\n\n scrollToTop(scrollParent: HTMLElement): void {\n scrollParent.scrollTo(0, 0);\n }\n}\n","import { DestroyRef, ElementRef, inject, Injectable } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n BehaviorSubject,\n distinctUntilChanged,\n map,\n Observable,\n withLatestFrom,\n} from 'rxjs';\nimport {\n AutoComplete,\n ComboboxService,\n FocusTextbox,\n OptionAction,\n} from '../combobox.service';\nimport { ListboxOptionComponent } from '../listbox-option/listbox-option.component';\nimport { ListboxFilteringService } from './listbox-filtering.service';\nimport { ListboxScrollService } from './listbox-scroll.service';\n\n@Injectable()\nexport class ActiveIndexService {\n private activeIndex = new BehaviorSubject<number | null>(null);\n activeIndex$ = this.activeIndex.asObservable().pipe(distinctUntilChanged());\n scrollContentRef: ElementRef<HTMLDivElement>;\n\n private service = inject(ComboboxService);\n private filtering = inject(ListboxFilteringService);\n private scrolling = inject(ListboxScrollService);\n\n init(\n allOptions$: Observable<ListboxOptionComponent[]>,\n destroyRef: DestroyRef\n ): void {\n this.listenToActions(allOptions$, destroyRef);\n this.initActiveId();\n this.setActiveDescendant();\n }\n\n setScrollContentRef(scrollContentRef: ElementRef): void {\n this.scrollContentRef = scrollContentRef;\n }\n\n initActiveId(): void {\n if (!this.service.nullActiveIdOnClose) {\n this.activeIndex.next(0);\n }\n }\n\n listenToActions(\n allOptions$: Observable<ListboxOptionComponent[]>,\n destroyRef: DestroyRef\n ): void {\n this.service.optionAction$\n .pipe(\n takeUntilDestroyed(destroyRef),\n withLatestFrom(this.activeIndex$, allOptions$)\n )\n .subscribe(([action, activeIndex, options]) => {\n if (!this.actionIsTypingChar(action)) {\n if (\n action === OptionAction.last ||\n action === OptionAction.next ||\n action === OptionAction.pageDown\n ) {\n this.setNextActiveIndex(action, activeIndex, options);\n } else if (\n action === OptionAction.first ||\n action === OptionAction.pageUp ||\n action === OptionAction.previous\n ) {\n this.setPrevActiveIndex(action, activeIndex, options);\n } else if (action === OptionAction.zeroActiveIndex) {\n this.setActiveIndex(0, OptionAction.next, options);\n } else if (action === OptionAction.nullActiveIndex) {\n // should only be emitted from editable textboxes\n if (this.service.nullActiveIdOnClose) {\n this.setActiveIndex(null, OptionAction.next, options);\n }\n }\n } else if (action.length === 1) {\n this.updateActiveIndexFromKeyChar(action, options);\n }\n });\n }\n\n private setNextActiveIndex(\n action: OptionAction,\n activeIndex: number | null,\n options: ListboxOptionComponent[]\n ): void {\n const maxIndex = options.length - 1;\n if (activeIndex === null && action === OptionAction.next) {\n this.setActiveIndex(0, OptionAction.next, options);\n } else {\n this.setActiveIndex(\n this.getIndexForAction(activeIndex, maxIndex, action),\n OptionAction.next,\n options\n );\n }\n }\n\n private setPrevActiveIndex(\n action: OptionAction,\n activeIndex: number | null,\n options: ListboxOptionComponent[]\n ) {\n const maxIndex = options.length - 1;\n this.setActiveIndex(\n this.getIndexForAction(activeIndex, maxIndex, action),\n OptionAction.previous,\n options\n );\n }\n\n setActiveIndex(\n index: number | null,\n actionIfDisabled: OptionAction.next | OptionAction.previous | null,\n options: ListboxOptionComponent[],\n scrollToIndex = true\n ): void {\n if (index === this.activeIndex.value) return;\n if (index === null || options.every((x) => x.isDisabled())) {\n this.handleActiveIndexWhenCannotBeSet();\n } else {\n let attempt = index;\n while (actionIfDisabled && options[attempt]?.isDisabled()) {\n if (actionIfDisabled === OptionAction.next) {\n if (attempt === options.length - 1) {\n attempt = 0;\n } else {\n attempt++;\n }\n } else if (actionIfDisabled === OptionAction.previous) {\n if (attempt === 0) {\n attempt = options.length - 1;\n } else {\n attempt--;\n }\n }\n }\n if (\n attempt >= 0 &&\n attempt < options.length &&\n !options[attempt]?.isDisabled()\n ) {\n if (scrollToIndex) {\n this.handleScrollingForNewIndex(attempt, options);\n }\n this.activeIndex.next(attempt);\n } else {\n this.handleActiveIndexWhenCannotBeSet();\n }\n }\n }\n\n handleActiveIndexWhenCannotBeSet(): void {\n this.service.emitTextboxFocus(FocusTextbox.includeMobile);\n if (this.service.autoComplete !== AutoComplete.none) {\n this.activeIndex.next(null);\n }\n }\n\n private handleScrollingForNewIndex(\n index: number,\n options: ListboxOptionComponent[]\n ): void {\n const indexEl = options[index].label?.nativeElement.parentElement;\n if (indexEl && this.scrollContentRef.nativeElement) {\n if (this.scrolling.isScrollable(this.scrollContentRef.nativeElement)) {\n this.scrolling.maintainElementVisibility(\n indexEl,\n this.scrollContentRef.nativeElement\n );\n }\n if (!this.scrolling.isElementInView(indexEl)) {\n indexEl.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n }\n }\n\n private getIndexForAction(\n currentIndex: number | null,\n maxIndex: number,\n action: OptionAction | string\n ): number {\n const pageSize = 10; // used for pageup/pagedown\n const loop = this.service.autoComplete !== AutoComplete.none;\n const validIndex = currentIndex ?? 0;\n const previous = () => {\n if (loop) {\n return validIndex === 0 ? maxIndex : validIndex - 1;\n } else {\n return Math.max(0, validIndex - 1);\n }\n };\n const next = () => {\n if (loop) {\n return validIndex === maxIndex ? 0 : validIndex + 1;\n } else {\n return Math.min(maxIndex, validIndex + 1);\n }\n };\n\n switch (action) {\n case OptionAction.first:\n return 0;\n case OptionAction.last:\n return maxIndex;\n case OptionAction.previous:\n return previous();\n case OptionAction.next:\n return next();\n case OptionAction.pageUp:\n return Math.max(0, validIndex - pageSize);\n case OptionAction.pageDown:\n return Math.min(maxIndex, validIndex + pageSize);\n default:\n return validIndex;\n }\n }\n\n actionIsTypingChar(action: OptionAction | string): boolean {\n return !(Object.values(OptionAction) as string[]).includes(action);\n }\n\n updateActiveIndexFromKeyChar(\n char: string,\n options: ListboxOptionComponent[]\n ): void {\n this.filtering.updateSearchString(char);\n const searchIndex = this.filtering.getIndexByLetter(\n options,\n this.filtering.searchString,\n this.activeIndex.value + 1\n );\n\n if (searchIndex >= 0) {\n this.setActiveIndex(searchIndex, OptionAction.next, options);\n } else {\n this.filtering.resetSearch();\n }\n }\n\n private setActiveDescendant(): void {\n const activeDescendant$ = this.activeIndex$.pipe(\n map((i) => {\n if (i === null || i < 0) {\n return null;\n } else {\n return `${this.service.id}-listbox-option-${i}`;\n }\n })\n );\n this.service.initActiveDescendant(activeDescendant$);\n }\n\n setActiveIndexToFirstSelectedOrDefault(\n options: ListboxOptionComponent[]\n ): void {\n let firstSelected = options.findIndex((x) => x.isSelected());\n if (firstSelected === -1) {\n if (this.service.shouldAutoSelectOnListboxClose) {\n firstSelected = 0;\n } else {\n firstSelected = this.service.nullActiveIdOnClose ? null : 0;\n }\n }\n if (firstSelected > -1) {\n this.setActiveIndex(firstSelected, OptionAction.next, options);\n }\n if (firstSelected === null) {\n this.activeIndex.next(null);\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterContentInit,\n AfterViewInit,\n Component,\n ContentChild,\n ContentChildren,\n DestroyRef,\n ElementRef,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n Output,\n QueryList,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl } from '@angular/forms';\nimport {\n combineLatest,\n delay,\n filter,\n map,\n pairwise,\n skip,\n take,\n withLatestFrom,\n} from 'rxjs';\nimport {\n ComboboxService,\n FocusTextbox,\n OptionAction,\n} from '../combobox.service';\nimport { ListboxGroupComponent } from '../listbox-group/listbox-group.component';\nimport { ListboxLabelComponent } from '../listbox-label/listbox-label.component';\nimport { ListboxOptionComponent } from '../listbox-option/listbox-option.component';\nimport { SelectAllListboxOptionComponent } from '../select-all-listbox-option/select-all-listbox-option.component';\nimport { ActiveIndexService } from './active-index.service';\nimport { ListboxFilteringService } from './listbox-filtering.service';\nimport { ListboxScrollService } from './listbox-scroll.service';\n\nexport type SelectedCountLabel = {\n singular: string;\n plural: string;\n};\n\n@Component({\n selector: 'hsi-ui-listbox',\n imports: [CommonModule],\n providers: [\n ListboxFilteringService,\n ListboxScrollService,\n ActiveIndexService,\n ],\n templateUrl: './listbox.component.html',\n styleUrls: ['./listbox.component.scss'],\n host: {\n class: 'hsi-ui-listbox-component',\n },\n})\nexport class ListboxComponent\n implements OnChanges, AfterContentInit, AfterViewInit\n{\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n @Input() ngFormControl: FormControl<any | any[]>;\n @Input() findsOptionOnTyping = true;\n @Input() isMultiSelect = false;\n @Input() maxHeight = 300;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n @Output() valueChanges = new EventEmitter<any | any[]>();\n @ViewChild('scrollableContent')\n scrollableContentRef: ElementRef<HTMLDivElement>;\n @ContentChild(ListboxLabelComponent, { descendants: false })\n label: ListboxLabelComponent;\n @ContentChildren(ListboxOptionComponent, { descendants: false })\n options: QueryList<ListboxOptionComponent>;\n @ContentChildren(ListboxGroupComponent)\n groups: QueryList<ListboxGroupComponent>;\n\n public service = inject(ComboboxService);\n public activeIndex = inject(ActiveIndexService);\n protected filtering = inject(ListboxFilteringService);\n protected scrolling = inject(ListboxScrollService);\n protected destroyRef = inject(DestroyRef);\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['isMultiSelect']) {\n this.service.isMultiSelect = this.isMultiSelect;\n }\n }\n\n ngAfterContentInit(): void {\n this.service.setProjectedContent(this.groups, this.options);\n this.options\n .toArray()\n .concat(\n this.groups.toArray().flatMap((group) => group.options?.toArray() ?? [])\n )\n .filter((option) => option instanceof SelectAllListboxOptionComponent)\n .forEach((option) => {\n option.setControlledOptions();\n option.listenForOptionSelections();\n });\n this.activeIndex.init(this.service.allOptions$, this.destroyRef);\n this.setSelectedEmitting();\n this.setOnBlurEvent();\n this.setOptionAction();\n setTimeout(() => {\n this.updateActiveIndexOnExternalChanges();\n }, 0);\n }\n\n ngAfterViewInit(): void {\n this.activeIndex.setScrollContentRef(this.scrollableContentRef);\n this.setResetOnClose();\n this.setOnOptionChanges();\n }\n\n setOnOptionChanges(): void {\n this.service.allOptions$.pipe(take(1), delay(0)).subscribe(() => {\n this.service.setProjectedContentIsInDOM();\n });\n\n // cannot pass allOptions$ to handleOptionClick through template because @if (allOptions | async; as allOptions) will delay rendering of option.template and option.label will not be defined when setBoxLabel is called. Thus subscribe and set allOptions in here.\n this.service.allOptions$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((options) => {\n this.service.allOptions = options;\n });\n }\n\n setSelectedEmitting(): void {\n this.service.selectedOptionsToEmit$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n skip(1),\n map((options) => {\n const selections = [];\n for (const option of options) {\n const value = option.valueToEmit;\n selections.push(value);\n }\n return selections;\n })\n )\n .subscribe((value) => {\n this.emitValue(value);\n });\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n emitValue(selections: any[]): void {\n const value = this.isMultiSelect ? selections : selections[0];\n if (this.ngFormControl) {\n this.ngFormControl.setValue(value);\n } else {\n this.valueChanges.emit(value);\n }\n }\n\n setOnBlurEvent() {\n this.service.textboxBlur$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n withLatestFrom(\n combineLatest([this.service.isOpen$, this.activeIndex.activeIndex$]),\n this.service.allOptions$\n ),\n filter(([, [isOpen]]) => isOpen)\n )\n .subscribe(([, [isOpen, activeIndex], options]) => {\n if (isOpen) {\n if (this.shouldAutoSelectOptionOnBlur(activeIndex, options)) {\n const index = activeIndex ?? 0;\n this.selectOptionFromIndex(index, options);\n }\n this.service.closeListbox();\n }\n });\n }\n\n shouldAutoSelectOptionOnBlur(\n activeIndex: number,\n options: ListboxOptionComponent[]\n ): boolean {\n const activeIndexOptionIsSelected = options[activeIndex]?.isSelected();\n return (\n this.service.shouldAutoSelectOnListboxClose &&\n !activeIndexOptionIsSelected\n );\n }\n\n setOptionAction() {\n this.service.optionAction$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n withLatestFrom(this.activeIndex.activeIndex$, this.service.allOptions$)\n )\n .subscribe(([action, activeIndex, options]) => {\n if (options.length === 0) {\n this.service.emitTextboxFocus();\n return;\n }\n if (!this.actionIsTypingChar(action)) {\n if (action === OptionAction.select) {\n this.selectOptionFromIndex(activeIndex, options);\n }\n //double check because typesafety on this kind of sucks, could add && str.match(/\\S| /)\n } else if (action.length === 1) {\n this.activeIndex.updateActiveIndexFromKeyChar(action, options);\n } else {\n throw new Error(`Invalid action: ${action}`);\n }\n });\n }\n\n actionIsTypingChar(action: OptionAction | string): boolean {\n return !(Object.values(OptionAction) as string[]).includes(action);\n }\n\n setResetOnClose(): void {\n this.service.isOpen$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n skip(1),\n filter((isOpen) => !isOpen),\n withLatestFrom(this.service.allOptions$)\n )\n .subscribe(([, options]) => {\n this.activeIndex.setActiveIndexToFirstSelectedOrDefault(options);\n this.resetScroll();\n this.service.emitTextboxFocus(FocusTextbox.includeMobile);\n });\n }\n\n resetScroll(): void {\n if (this.scrolling.isScrollable(this.scrollableContentRef.nativeElement)) {\n this.scrolling.scrollToTop(\n this.scrollableContentRef.nativeElement.parentElement\n );\n }\n }\n\n getListboxLabelAsBoxPlaceholder(): string {\n return this.label?.label?.nativeElement.innerText || '';\n }\n\n selectOptionFromIndex(\n index: number,\n options: ListboxOptionComponent[]\n ): void {\n this.handleOptionSelect(index, options);\n }\n\n handleOptionClick(\n event: MouseEvent,\n optionIndex: number,\n groupIndex?: number\n ): void {\n event.stopPropagation();\n this.service.setIsKeyboardEvent(false);\n this.handleOptionSelect(optionIndex, this.service.allOptions, groupIndex);\n if (!this.isMultiSelect) {\n this.service.closeListbox();\n }\n this.service.emitTextboxFocus();\n }\n\n handleOptionSelect(\n optionIndex: number,\n options: ListboxOptionComponent[],\n groupIndex?: number\n ): void {\n const index = groupIndex\n ? this.getOptionIndexFromGroups(groupIndex, optionIndex)\n : optionIndex;\n const option = options[index];\n if (!option || option.isDisabled()) return;\n this.toggleOptionSelected(option, options);\n if (options[optionIndex].isSelected()) {\n this.activeIndex.setActiveIndex(index, null, options);\n } else {\n let nextSelectedIndex = options.findIndex(\n (o, i) => i > optionIndex && o.isSelected()\n );\n if (nextSelectedIndex === -1) {\n nextSelectedIndex = options.findIndex((o) => o.isSelected());\n }\n this.activeIndex.setActiveIndex(nextSelectedIndex, null, options);\n }\n }\n\n toggleOptionSelected(\n option: ListboxOptionComponent,\n options: ListboxOptionComponent[]\n ): void {\n if (!option || option.isDisabled()) {\n this.service.emitTextboxFocus();\n return;\n }\n if (this.isMultiSelect) {\n option.toggleSelected();\n this.updateSelectedOptionsToEmit(options);\n } else {\n this.selectSingleSelectOption(option, options);\n }\n }\n\n updateSelectedOptionsToEmit(options: ListboxOptionComponent[]): void {\n const selected = this.getSelectedOptions(options);\n this.service.setSelectedOptionsToEmit(selected);\n }\n\n selectSingleSelectOption(\n option: ListboxOptionComponent,\n options: ListboxOptionComponent[]\n ): void {\n if (option.isSelected()) return;\n options.forEach((o) => {\n if (o !== option) {\n o.deselect();\n }\n });\n option.select();\n this.updateSelectedOptionsToEmit(options);\n }\n\n isSelectAllListboxOption(\n option: ListboxOptionComponent\n ): option is SelectAllListboxOptionComponent {\n return option instanceof SelectAllListboxOptionComponent;\n }\n\n getOptionIndexFromGroups(groupIndex: number, optionIndex: number): number {\n return (\n this.groups\n .toArray()\n .slice(0, groupIndex)\n .reduce((acc, curr) => acc + curr.options.toArray().length, 0) +\n optionIndex\n );\n }\n\n getSelectedOptions(\n options: ListboxOptionComponent[]\n ): ListboxOptionComponent[] {\n return options?.filter(\n (option) => !this.isSelectAllListboxOption(option) && option.isSelected()\n );\n }\n\n updateActiveIndexOnExternalChanges(): void {\n this.service.optionPropertyChanges$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n pairwise(),\n filter(([prev, curr]) => {\n return !!prev && !!curr && prev.optionValue !== curr.optionValue;\n }),\n withLatestFrom(this.service.allOptions$, this.activeIndex.activeIndex$)\n )\n .subscribe(([, options]) => {\n this.activeIndex.setActiveIndexToFirstSelectedOrDefault(options);\n });\n }\n\n handleOptionMousedown(): void {\n this.service.ignoreBlur = true;\n }\n}\n","<div\n #scrollableContent\n role=\"listbox\"\n tabindex=\"-1\"\n [id]=\"service.id + '-listbox'\"\n class=\"hsi-ui-listbox\"\n [class.open]=\"service.isOpen$ | async\"\n [style.--hsi-ui-listbox-max-height.px]=\"maxHeight\"\n [attr.aria-labelledby]=\"\n (service.label$ | async) ? service.comboboxLabelId : label?.id\n \"\n [attr.aria-multiselectable]=\"isMultiSelect\"\n>\n <ng-container\n *ngTemplateOutlet=\"\n label?.labelContent || nullContent;\n context: { wrapperHasId: false }\n \"\n ></ng-container>\n @if ((service.groups$ | async)?.length > 0) {\n <ng-container *ngTemplateOutlet=\"groupedOptions\"></ng-container>\n } @else {\n <ng-container *ngTemplateOutlet=\"options\"></ng-container>\n }\n</div>\n\n<ng-template #options>\n @for (\n option of service.allOptions$ | async;\n track option.id;\n let i = $index\n ) {\n <ng-container\n *ngTemplateOutlet=\"\n optionTemplate;\n context: {\n $implicit: option,\n index: i,\n groupIndex: null,\n }\n \"\n ></ng-container>\n }\n</ng-template>\n\n<ng-template #groupedOptions>\n @for (group of service.groups$ | async; track $index; let i = $index) {\n <div class=\"hsi-ui-listbox-group-container\">\n <div\n role=\"group\"\n tabIndex=\"-1\"\n class=\"hsi-ui-listbox-group\"\n [ngClass]=\"'listbox-group-' + i\"\n [attr.aria-labelledby]=\"group.label?.id\"\n >\n @if (group.label) {\n <div\n role=\"presentation\"\n [id]=\"group.label?.id\"\n class=\"hsi-ui-listbox-group-label\"\n [ngClass]=\"'hsi-ui-listbox-group-' + i + '-label'\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n group.label?.labelContent || nullContent;\n context: { wrapperHasId: true }\n \"\n ></ng-container>\n </div>\n }\n @for (\n option of group.options$ | async;\n track option.id;\n let j = $index\n ) {\n <ng-container\n *ngTemplateOutlet=\"\n optionTemplate;\n context: {\n $implicit: option,\n index: j,\n groupIndex: i,\n }\n \"\n ></ng-container>\n }\n </div>\n </div>\n }\n</ng-template>\n\n<ng-template\n #optionTemplate\n let-option\n let-index=\"index\"\n let-groupIndex=\"groupIndex\"\n>\n <div\n role=\"option\"\n tabindex=\"-1\"\n [id]=\"\n service.id +\n '-listbox-option-' +\n (groupIndex !== null\n ? getOptionIndexFromGroups(groupIndex, index)\n : index)\n \"\n class=\"hsi-ui-listbox-option\"\n [class.grouped-option]=\"groupIndex !== null\"\n [ngClass]=\"\n groupIndex !== null\n ? 'hsi-ui-listbox-option-' + getOptionIndexFromGroups(groupIndex, index)\n : 'hsi-ui-listbox-option-' + index\n \"\n [class.current]=\"\n (activeIndex.activeIndex$ | async) ===\n (groupIndex !== null\n ? getOptionIndexFromGroups(groupIndex, index)\n : index) && (option.disabled$ | async) !== true\n \"\n [class.disabled]=\"option.disabled$ | async\"\n [class.keyboard-current]=\"\n (service.isKeyboardEvent$ | async) &&\n (activeIndex.activeIndex$ | async) ===\n (groupIndex !== null\n ? getOptionIndexFromGroups(groupIndex, index)\n : index) &&\n (option.disabled$ | async) !== true\n \"\n [class.multi]=\"isMultiSelect\"\n [class.selected]=\"option.selected$ | async\"\n [attr.aria-checked]=\"isMultiSelect ? (option.selected$ | async) : null\"\n [attr.aria-selected]=\"!isMultiSelect ? (option.selected$ | async) : null\"\n [attr.aria-disabled]=\"option.disabled$ | async\"\n data-cy=\"listbox-option\"\n (click)=\"handleOptionClick($event, index, groupIndex)\"\n (mousedown)=\"handleOptionMousedown()\"\n >\n <ng-container *ngTemplateOutlet=\"option.template\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #nullContent></ng-template>\n","import { CommonModule } from '@angular/common';\nimport {\n Component,\n DestroyRef,\n forwardRef,\n inject,\n Input,\n OnChanges,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n debounceTime,\n map,\n merge,\n mergeAll,\n Observable,\n switchMap,\n withLatestFrom,\n} from 'rxjs';\nimport { ComboboxService } from '../combobox.service';\nimport { ListboxGroupComponent } from '../listbox-group/listbox-group.component';\nimport { ListboxOptionComponent } from '../listbox-option/listbox-option.component';\nimport { ListboxComponent } from '../listbox/listbox.component';\n\n@Component({\n selector: 'hsi-ui-select-all-listbox-option',\n imports: [CommonModule],\n providers: [\n {\n provide: ListboxOptionComponent,\n useExisting: forwardRef(() => SelectAllListboxOptionComponent),\n },\n ],\n templateUrl: '../listbox-option/listbox-option.component.html',\n styleUrls: ['../listbox-option/listbox-option.component.scss'],\n})\nexport class SelectAllListboxOptionComponent\n extends ListboxOptionComponent\n implements OnChanges\n{\n @Input() override boxDisplayLabel = 'Select all';\n controlledOptions$: Observable<ListboxOptionComponent[]>;\n controlledOptions: ListboxOptionComponent[];\n\n override service = inject(ComboboxService);\n private listboxComponent = inject(ListboxComponent);\n private destroyRef = inject(DestroyRef);\n\n constructor() {\n super();\n }\n\n // select all will not respond to changes in selected or disabled properties\n // users should not attempt to change these properties\n // TODO: better architecture for this\n override ngOnChanges(): void {\n return;\n }\n\n protected override updateSelected(selected: boolean): void {\n this._selected.next(selected);\n }\n\n setControlledOptions(): void {\n this.controlledOptions$ = this.service.groups$.pipe(\n map((groups) => this.getControlledOptionsFromGroups(groups))\n );\n\n this.controlledOptions$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((controlledOptions) => {\n this.controlledOptions = controlledOptions;\n });\n }\n\n getControlledOptionsFromGroups(\n groups: ListboxGroupComponent[]\n ): ListboxOptionComponent[] {\n let controlledOptions: ListboxOptionComponent[] = [];\n if (groups.length > 0) {\n const groupId = groups.findIndex((group) => {\n return group.options.some((option) => option.id === this.id);\n });\n if (groupId > -1) {\n controlledOptions = groups[groupId].options.filter((o) => o !== this);\n }\n } else {\n controlledOptions = this.listboxComponent.options.filter(\n (option) => option !== this\n );\n }\n return controlledOptions;\n }\n\n listenForOptionSelections(): void {\n const optionSelectionChanges$ = this.controlledOptions$.pipe(\n switchMap((options) => merge(options.map((o) => o.selected$))),\n mergeAll()\n );\n\n optionSelectionChanges$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n debounceTime(0),\n withLatestFrom(this.controlledOptions$)\n )\n .subscribe(([, controlledOptions]) => {\n this.updateSelectAllSelected(controlledOptions);\n });\n }\n\n updateSelectAllSelected(controlledOptions: ListboxOptionComponent[]): void {\n const allControlledOptionsSelected = controlledOptions.every((option) =>\n option.isSelected()\n );\n this.updateSelected(allControlledOptionsSelected);\n }\n\n override toggleSelected(): void {\n this.updateSelected(!this._selected.value);\n if (this._selected.value) {\n this.controlledOptions.forEach((option) => option.select());\n } else {\n this.controlledOptions.forEach((option) => option.deselect());\n }\n }\n}\n","import { Platform } from '@angular/cdk/platform';\nimport { inject, Injectable, QueryList } from '@angular/core';\nimport {\n BehaviorSubject,\n combineLatest,\n distinctUntilChanged,\n map,\n merge,\n mergeAll,\n Observable,\n of,\n shareReplay,\n startWith,\n Subject,\n switchMap,\n} from 'rxjs';\nimport { ComboboxLabelComponent } from './combobox-label/combobox-label.component';\nimport { ListboxGroupComponent } from './listbox-group/listbox-group.component';\nimport {\n ListboxOptionComponent,\n ListboxOptionPropertyChange,\n} from './listbox-option/listbox-option.component';\nimport { SelectAllListboxOptionComponent } from './select-all-listbox-option/select-all-listbox-option.component';\n\nlet nextUniqueId = 0;\n\nexport enum FocusTextbox {\n default = 'default',\n includeMobile = 'includeMobile',\n}\n\nexport interface KeyboardEventWithAutocomplete {\n event: KeyboardEvent;\n autoComplete: AutoComplete;\n inputHasText: boolean;\n}\n\nexport enum Key {\n ArrowDown = 'ArrowDown',\n ArrowUp = 'ArrowUp',\n End = 'End',\n Enter = 'Enter',\n Escape = 'Escape',\n Home = 'Home',\n LeftArrow = 'ArrowLeft',\n PageDown = 'PageDown',\n PageUp = 'PageUp',\n RightArrow = 'ArrowRight',\n Space = ' ',\n Tab = 'Tab',\n}\n\nexport enum OptionAction {\n first = 'first',\n last = 'last',\n next = 'next',\n nullActiveIndex = 'nullActiveIndex',\n pageDown = 'pageDown',\n pageUp = 'pageUp',\n previous = 'previous',\n select = 'select',\n zeroActiveIndex = 'zeroActiveIndex',\n}\n\nexport enum ListboxAction {\n close = 'close',\n open = 'open',\n closeSelect = 'closeSelect',\n}\n\nexport enum TextboxAction {\n focus = 'focus',\n setTextToValue = 'setTextToValue',\n cursorRight = 'cursorRight',\n cursorLeft = 'cursorLeft',\n cursorFirst = 'cursorFirst',\n cursorLast = 'cursorLast',\n addChar = 'addChar',\n type = 'type',\n}\n\nexport enum AutoComplete {\n none = 'none',\n list = 'list',\n both = 'both',\n inline = 'inline',\n}\n\nexport type ComboboxAction = OptionAction | ListboxAction | TextboxAction;\n\n@Injectable()\nexport class ComboboxService {\n id = `combobox-${nextUniqueId++}`;\n scrollContainerId = `${this.id}-scroll-container`;\n comboboxLabelId = `${this.id}-label`;\n autoComplete: AutoComplete = AutoComplete.none;\n hasEditableTextbox = false;\n ignoreBlur = false;\n isMultiSelect = false;\n nullActiveIdOnClose = false;\n scrollWhenOpened = false;\n shouldAutoSelectOnListboxClose = false;\n activeDescendant$: Observable<string>;\n allOptions: ListboxOptionComponent[];\n allOptions$: Observable<ListboxOptionComponent[]>;\n destroy$ = new Subject<void>();\n groups$: Observable<ListboxGroupComponent[]>;\n optionPropertyChanges$: Observable<ListboxOptionPropertyChange>;\n private focusTextbox: Subject<FocusTextbox> = new Subject<FocusTextbox>();\n focusTextbox$ = this.focusTextbox.asObservable();\n private isKeyboardEvent = new BehaviorSubject(false);\n isKeyboardEvent$ = this.isKeyboardEvent.asObservable();\n private _isOpen: BehaviorSubject<boolean> = new BehaviorSubject(false);\n isOpen$ = this._isOpen.asObservable().pipe(distinctUntilChanged());\n private label: BehaviorSubject<ComboboxLabelComponent> = new BehaviorSubject(\n null\n );\n label$ = this.label.asObservable();\n private optionAction: Subject<OptionAction | string> = new Subject();\n optionAction$ = this.optionAction.asObservable();\n private projectedContentIsInDOM: BehaviorSubject<boolean> =\n new BehaviorSubject(false);\n projectedContentIsInDOM$ = this.projectedContentIsInDOM.asObservable();\n private selectedOptionsToEmit: BehaviorSubject<ListboxOptionComponent[]> =\n new BehaviorSubject([]);\n selectedOptionsToEmit$ = this.selectedOptionsToEmit.asObservable();\n private textboxBlur: Subject<void> = new Subject();\n textboxBlur$ = this.textboxBlur.asObservable();\n private touched: BehaviorSubject<boolean> = new BehaviorSubject(false);\n touched$ = this.touched.asObservable();\n\n private platform = inject(Platform);\n\n get isOpen(): boolean {\n return this._isOpen.value;\n }\n\n initActiveDescendant(source$?: Observable<string>): void {\n if (source$) {\n this.activeDescendant$ = source$;\n } else {\n this.activeDescendant$ = of(null);\n }\n }\n\n setLabel(label: ComboboxLabelComponent): void {\n this.label.next(label);\n }\n\n openListbox(): void {\n this._isOpen.next(true);\n }\n\n closeListbox(): void {\n this._isOpen.next(false);\n }\n\n toggleListbox(): void {\n this._isOpen.next(!this._isOpen.value);\n }\n\n setProjectedContentIsInDOM(): void {\n this.projectedContentIsInDOM.next(true);\n }\n\n emitTextboxBlur(): void {\n this.textboxBlur.next();\n }\n\n setTouched(): void {\n this.touched.next(true);\n }\n\n emitTextboxFocus(focus: FocusTextbox = FocusTextbox.default): void {\n this.focusTextbox.next(focus);\n }\n\n emitOptionAction(action: OptionAction | string): void {\n this.optionAction.next(action);\n }\n\n isMobile(): boolean {\n return this.platform.ANDROID || this.platform.IOS;\n }\n\n setProjectedContent(\n groups: QueryList<ListboxGroupComponent>,\n options: QueryList<ListboxOptionComponent>\n ): void {\n this.setGroups(groups);\n this.setAllOptions(groups, options);\n\n this.optionPropertyChanges$ = this.allOptions$.pipe(\n switchMap((options) =>\n merge(options.map((o) => o.externalPropertyChanges$))\n ),\n mergeAll()\n );\n }\n\n setGroups(groups: QueryList<ListboxGroupComponent>): void {\n this.groups$ = groups.changes.pipe(\n startWith(''),\n map(() => groups.toArray())\n );\n }\n\n setAllOptions(\n groups: QueryList<ListboxGroupComponent>,\n options: QueryList<ListboxOptionComponent>\n ): void {\n // will not track changes to properties, just if the list of options changes\n if (groups.length > 0) {\n this.allOptions$ = this.groups$.pipe(\n switchMap((groups) =>\n combineLatest(groups.map((group) => group.options$))\n ),\n map((optionArrays) => optionArrays.flat()),\n shareReplay(1)\n );\n } else {\n this.allOptions$ = options.changes.pipe(\n startWith(''),\n map(() => options.toArray()),\n shareReplay(1)\n );\n }\n }\n\n setSelectedOptionsToEmit(selected: ListboxOptionComponent[]): void {\n this.selectedOptionsToEmit.next(selected);\n }\n\n getSelectedOptions(\n options: ListboxOptionComponent[]\n ): ListboxOptionComponent[] {\n return options?.filter(\n (option) => !this.isSelectAllListboxOption(option) && option.isSelected()\n );\n }\n\n isSelectAllListboxOption(\n option: ListboxOptionComponent\n ): option is SelectAllListboxOptionComponent {\n return option instanceof SelectAllListboxOptionComponent;\n }\n\n setIsKeyboardEvent(isKeyboardEvent: boolean): void {\n this.isKeyboardEvent.next(isKeyboardEvent);\n }\n\n destroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n\n this.focusTextbox.complete();\n this.isKeyboardEvent.complete();\n this._isOpen.complete();\n this.label.complete();\n this.optionAction.complete();\n this.projectedContentIsInDOM.complete();\n this.selectedOptionsToEmit.complete();\n this.textboxBlur.complete();\n this.touched.complete();\n }\n}\n","import {\n AfterViewInit,\n Component,\n TemplateRef,\n ViewChild,\n inject,\n} from '@angular/core';\nimport { ComboboxService } from '../combobox.service';\n\n@Component({\n selector: 'hsi-ui-combobox-label',\n template: `<ng-template\n ><p class=\"combobox-label\" [id]=\"service.comboboxLabelId\"\n ><ng-content></ng-content></p\n ></ng-template>`,\n})\nexport class ComboboxLabelComponent implements AfterViewInit {\n @ViewChild(TemplateRef) labelContent: TemplateRef<unknown>;\n\n public service = inject(ComboboxService);\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.service.setLabel(this);\n }, 0);\n }\n}\n","import { Platform } from '@angular/cdk/platform';\nimport { AsyncPipe, CommonModule, DOCUMENT } from '@angular/common';\nimport {\n Component,\n ContentChild,\n DestroyRef,\n ElementRef,\n inject,\n NgZone,\n OnDestroy,\n OnInit,\n ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { filter, fromEvent, merge, withLatestFrom } from 'rxjs';\nimport { ComboboxLabelComponent } from './combobox-label/combobox-label.component';\nimport { ComboboxService, FocusTextbox } from './combobox.service';\n\n@Component({\n selector: 'hsi-ui-combobox',\n imports: [CommonModule, AsyncPipe],\n providers: [ComboboxService],\n templateUrl: './combobox.component.html',\n styleUrls: ['./styles/styles.scss'],\n encapsulation: ViewEncapsulation.None,\n host: { class: 'hsi-ui-combobox' },\n})\nexport class ComboboxComponent implements OnInit, OnDestroy {\n @ContentChild(ComboboxLabelComponent) labelComponent: ComboboxLabelComponent;\n\n public service = inject(ComboboxService);\n public platform = inject(Platform);\n private zone = inject(NgZone);\n private document = inject(DOCUMENT);\n private elRef = inject(ElementRef);\n private destroyRef = inject(DestroyRef);\n\n ngOnInit(): void {\n this.handleOutsideClick();\n }\n\n ngOnDestroy(): void {\n this.service.destroy();\n }\n\n handleOutsideClick(): void {\n if (!this.document) {\n return;\n }\n\n this.zone.runOutsideAngular(() => {\n merge(\n fromEvent(this.document, 'touchstart', { capture: true }),\n fromEvent(this.document, 'mousedown', { capture: true })\n )\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n withLatestFrom(this.service.isOpen$),\n filter(\n ([event, isOpen]) =>\n isOpen && !event.composedPath().includes(this.elRef.nativeElement)\n )\n )\n .subscribe(() => {\n if (this.platform.IOS || this.platform.ANDROID) {\n this.service.emitTextboxFocus(FocusTextbox.includeMobile);\n }\n this.service.emitTextboxBlur();\n });\n });\n }\n}\n","@if (service.label$ | async; as label) {\n <ng-template [ngTemplateOutlet]=\"label.labelContent\"></ng-template>\n}\n<ng-content></ng-content>\n","import { Platform } from '@angular/cdk/platform';\nimport { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n DestroyRef,\n ElementRef,\n inject,\n Input,\n NgZone,\n OnInit,\n ViewChild,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { runNgChangeDetectionThen } from '@mathstack/app-kit';\nimport { BehaviorSubject, combineLatest, filter, startWith } from 'rxjs';\nimport {\n ComboboxAction,\n ComboboxService,\n FocusTextbox,\n Key,\n ListboxAction,\n OptionAction,\n TextboxAction,\n} from '../combobox.service';\nimport { ListboxOptionComponent } from '../listbox-option/listbox-option.component';\nimport { SelectedCountLabel } from '../listbox/listbox.component';\n\n@Component({\n selector: 'hsi-ui-textbox',\n imports: [CommonModule],\n styleUrls: ['./textbox.component.scss'],\n templateUrl: './textbox.component.html',\n host: {\n class: 'hsi-ui-textbox',\n },\n})\nexport class TextboxComponent implements OnInit, AfterViewInit {\n @Input() ariaLabel: string;\n @Input() selectedCountLabel?: SelectedCountLabel;\n @Input() customLabel: (selectedOptions: ListboxOptionComponent[]) => string;\n /*\n * Whether the textbox label responds to selections in any way.\n *\n * If true, the textbox label will display the selected option(s) if no other label properties are provided.\n *\n * @default true\n */\n @Input() dynamicLabel = true;\n @Input() findsOptionOnTyping = true;\n @ViewChild('box') box: ElementRef<HTMLDivElement>;\n @ViewChild('boxIcon') boxIcon: ElementRef<HTMLDivElement>;\n openKeys = ['ArrowDown', 'ArrowUp', 'Enter', ' '];\n label: BehaviorSubject<string> = new BehaviorSubject('');\n label$ = this.label.asObservable();\n protected destroyRef = inject(DestroyRef);\n public service = inject(ComboboxService);\n private platform = inject(Platform);\n protected zone = inject(NgZone);\n\n ngOnInit(): void {\n this.service.projectedContentIsInDOM$\n .pipe(\n takeUntilDestroyed(this.destroyRef),\n filter((x) => !!x),\n // Required because the label is projected into the ListboxOption via <ng-content>, and the\n // listbox options are <ng-template>s that are projected into the listbox via ngTemplateOutlet.\n // We need this to ensure that the option labels are in the DOM to read from before we set the box label.\n runNgChangeDetectionThen(this.zone)\n )\n .subscribe(() => {\n this.setLabel();\n });\n }\n\n ngAfterViewInit(): void {\n this.setFocusListener();\n }\n\n setFocusListener(): void {\n this.service.focusTextbox$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((focusType) => {\n if (!this.isMobile() || focusType === FocusTextbox.includeMobile) {\n this.focusBox();\n }\n });\n }\n\n focusBox(): void {\n this.box.nativeElement.focus();\n }\n\n handleBlur(event: FocusEvent): void {\n // DESCRIPTION OF HOW VARIOUS DEVICES/ASSISTIVE TECHNOLOGIES DO/NOT TRIGGER ANY BLUR EVENT (FocusEvent)\n // clicking (desktop) will trigger a blur event (item is focused, user clicks away, blur event fires)\n // keyboard navigation (desktop) will not trigger a blur event (item is focused, user navigates to another item, blur event does not fire)\n // tapping (mobile) will trigger a blur event (item is focused, user taps away, blur event fires)\n // swiping (VoiceOver) will trigger a blur event (item is focused, user swipes away, blur event fires)\n\n // The code below (lines 106 - 116) will refocus the textbox when the textbox receives blur event, and the\n // source of the blue event (related target) is something in the listbox.\n // We keep the focus on the textbox so that we can continue to listen for keyboard events to provide\n // keyboard navigation/interaction with the listbox options. The refocusing does not affect keyboard navigation,\n // and is unnoticable to the user.\n\n // However, VoiceOver (iOS assistive tech) will move the navigation back to the textbox when the textbox is focused,\n // which means the user will need to strt navigating the options from the top of the listbox every time they select\n // an option. (If we throw the focus). For this reason, we have decided that we will not support keyboard navigation\n // (which would need to happen on a connected external keybord) on mobile devices, as keyboard nav requires that the\n // focus stays on the textbox. Ostensibly it is standard practice to not support keyboard navigation on mobile devices.\n\n if (!this.isMobile()) {\n if (event.relatedTarget && this.isHtmlElement(event.relatedTarget)) {\n // when the blur happens because a listbox option was focused\n if (\n event.relatedTarget.id.includes('listbox') ||\n event.relatedTarget.classList.contains('listbox-group') ||\n event.relatedTarget.classList.contains('listbox-group-label')\n ) {\n this.service.emitTextboxFocus();\n return;\n }\n }\n this.service.emitTextboxBlur();\n }\n }\n\n isHtmlElement(target: EventTarget): target is HTMLElement {\n return 'id' in target;\n }\n\n isMobile(): boolean {\n return this.platform.IOS || this.platform.ANDROID;\n }\n\n handleClick(): void {\n this.service.setIsKeyboardEvent(false);\n if (this.service.isOpen) {\n this.service.closeListbox();\n } else {\n this.service.setTouched();\n this.service.openListbox();\n }\n this.focusBox();\n }\n\n handleKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n this.onEscape();\n } else {\n this.service.setTouched();\n const action = this.getActionFromKeydownEvent(event);\n if (action) {\n this.service.setIsKeyboardEvent(true);\n }\n this.handleKeyboardAction(action, event);\n }\n }\n\n onEscape(): void {\n this.service.closeListbox();\n this.service.emitTextboxFocus();\n }\n\n getActionFromKeydownEvent(event: KeyboardEvent): ComboboxAction {\n if (!this.service.isOpen && this.openKeys.includes(event.key)) {\n return ListboxAction.open;\n }\n if (event.key === Key.Home) {\n return OptionAction.first;\n }\n if (event.key === Key.End) {\n return OptionAction.last;\n }\n if (this.findsOptionOnTyping && this.isTypingCharacter(event)) {\n return TextboxAction.type;\n }\n if (this.service.isOpen) {\n return this.getActionFromKeyEventWhenOpen(event);\n } else {\n return null;\n }\n }\n\n isTypingCharacter(event: KeyboardEvent): boolean {\n const { key, altKey, ctrlKey, metaKey } = event;\n return (\n key === 'Backspace' ||\n key === 'Clear' ||\n (key.length === 1 && key !== ' ' && !altKey && !ctrlKey && !metaKey)\n );\n }\n\n getActionFromKeyEventWhenOpen(event: KeyboardEvent): ComboboxAction {\n const { key, altKey } = event;\n if (key === Key.ArrowUp && altKey) {\n return ListboxAction.closeSelect;\n } else if (key === Key.ArrowDown && !altKey) {\n return OptionAction.next;\n } else if (key === Key.ArrowUp) {\n return OptionAction.previous;\n } else if (key === Key.PageUp) {\n return OptionAction.pageUp;\n } else if (key === Key.PageDown) {\n return OptionAction.pageDown;\n } else if (key === Key.Enter || key === Key.Space) {\n return this.service.isMultiSelect\n ? OptionAction.select\n : ListboxAction.closeSelect;\n } else {\n return null;\n }\n }\n\n handleKeyboardAction(action: ComboboxAction, event: KeyboardEvent): void {\n switch (action) {\n case OptionAction.first:\n case OptionAction.last:\n this.service.openListbox();\n this.focusBox();\n event.preventDefault();\n this.service.emitOptionAction(action);\n break;\n\n case OptionAction.next:\n case OptionAction.pageDown:\n case OptionAction.previous:\n case OptionAction.pageUp:\n case OptionAction.select:\n event.preventDefault();\n this.service.emitOptionAction(action);\n break;\n\n case ListboxAction.closeSelect:\n event.preventDefault();\n this.service.emitOptionAction(OptionAction.select);\n this.service.closeListbox();\n this.focusBox();\n break;\n\n case ListboxAction.close:\n event.preventDefault();\n this.service.closeListbox();\n this.focusBox();\n break;\n\n case TextboxAction.type:\n this.service.openListbox();\n this.focusBox();\n this.service.emitOptionAction(event.key);\n break;\n\n case ListboxAction.open:\n event.preventDefault();\n this.service.openListbox();\n this.focusBox();\n }\n }\n\n setLabel(): void {\n if (this.dynamicLabel) {\n combineLatest([\n this.service.touched$,\n this.service.allOptions$, // when options (not properties) change\n this.service.selectedOptionsToEmit$, // when a user clicks\n this.service.optionPropertyChanges$.pipe(\n filter((x) => !!x),\n startWith(null)\n ), // on an outside change,\n ])\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(([touched, options]) => {\n const label = this.getComputedLabel(touched, options);\n this.label.next(label);\n });\n }\n }\n\n getComputedLabel(\n touched: boolean,\n options: ListboxOptionComponent[]\n ): string {\n const selectedOptions = this.service.getSelectedOptions(options);\n let label = '';\n const numSelected = selectedOptions?.length;\n if (touched || numSelected || this.customLabel || this.selectedCountLabel) {\n if (this.customLabel && !this.service.hasEditableTextbox) {\n label = this.customLabel(selectedOptions);\n } else if (this.selectedCountLabel && !this.service.hasEditableTextbox) {\n if (numSelected === 1) {\n label = `${numSelected} ${this.selectedCountLabel.singular} selected`;\n } else {\n label = `${numSelected} ${this.selectedCountLabel.plural} selected`;\n }\n } else {\n label = this.getDefaultLabel(selectedOptions);\n }\n }\n return label;\n }\n\n getDefaultLabel(selectedOptions: ListboxOptionComponent[]): string {\n let label = '';\n if (selectedOptions) {\n label = selectedOptions\n .reduce((acc, option) => {\n const value =\n option.boxDisplayLabel ??\n option.label?.nativeElement.innerText.trim();\n if (value) {\n acc.push(value);\n }\n return acc;\n }, [])\n .join(', ');\n }\n return label;\n }\n}\n","<div\n #box\n class=\"hsi-ui-textbox-container\"\n role=\"combobox\"\n tabindex=\"0\"\n [id]=\"service.id + '-textbox'\"\n data-cy=\"combobox-textbox\"\n (click)=\"handleClick()\"\n (blur)=\"handleBlur($event)\"\n (keydown)=\"handleKeydown($event)\"\n [attr.aria-label]=\"\n (service.label$ | async) === null\n ? ariaLabel || service.isMultiSelect\n ? 'Select options'\n : 'Select an option'\n : null\n \"\n [attr.aria-labelledby]=\"\n (service.label$ | async) !== null ? service.comboboxLabelId : null\n \"\n [attr.aria-activedescendant]=\"service.activeDescendant$ | async\"\n [attr.aria-expanded]=\"service.isOpen$ | async\"\n [attr.aria-controls]=\"service.id + '-listbox'\"\n aria-haspopup=\"listbox\"\n [class.open]=\"service.isOpen$ | async\"\n >@if (dynamicLabel && !!(label$ | async)) {\n <div\n class=\"hsi-ui-textbox-label\"\n data-cy=\"textbox-label\"\n >{{ label$ | async }}</div>\n } @else {\n <div class=\"hsi-ui-textbox-label\" data-cy=\"textbox-label\">\n <ng-content select=\"[boxLabel]\"></ng-content>\n </div>\n }\n <div\n #boxIcon\n class=\"hsi-ui-textbox-icon\"\n [class.open]=\"service.isOpen$ | async\"\n ><ng-content select=\"[boxIcon]\"></ng-content></div\n></div>\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport { FormControl, FormsModule } from '@angular/forms';\nimport { BehaviorSubject, skip } from 'rxjs';\nimport {\n AutoComplete,\n ComboboxAction,\n Key,\n ListboxAction,\n OptionAction,\n TextboxAction,\n} from '../combobox.service';\nimport { ListboxOptionComponent } from '../listbox-option/listbox-option.component';\nimport { TextboxComponent } from '../textbox/textbox.component';\n\n@Component({\n selector: 'hsi-ui-editable-textbox',\n imports: [CommonModule, FormsModule],\n templateUrl: './editable-textbox.component.html',\n styleUrls: ['./editable-textbox.component.scss'],\n host: {\n class: 'hsi-ui-editable-textbox',\n },\n})\nexport class EditableTextboxComponent\n extends TextboxComponent\n implements OnInit, AfterViewInit\n{\n @ViewChild('box') inputElRef: ElementRef<HTMLInputElement>;\n @Input() autoSelect = false;\n @Input() autoSelectTrigger: 'any' | 'character' = 'character';\n @Input() displaySelected = true;\n @Input() initialValue = '';\n @Input() inputType: 'text' | 'search' = 'text';\n @Input() ngFormControl: FormControl<string>;\n @Input() placeholder = '';\n @Input() clearOnClick = false;\n @Output() valueChanges = new EventEmitter<string>();\n moveFocusToTextboxKeys = ['RightArrow', 'LeftArrow', 'Home', 'End'];\n value = new BehaviorSubject<string>('');\n value$ = this.value.asObservable();\n override openKeys = ['ArrowDown', 'ArrowUp'];\n\n override ngOnInit(): void {\n this.service.autoComplete = this.displaySelected\n ? AutoComplete.list\n : AutoComplete.none;\n this.service.shouldAutoSelectOnListboxClose =\n this.autoSelect && this.autoSelectTrigger === 'any';\n this.service.nullActiveIdOnClose = true;\n this.service.hasEditableTextbox = true;\n super.ngOnInit();\n }\n\n override ngAfterViewInit(): void {\n super.ngAfterViewInit();\n if (this.initialValue || this.ngFormControl?.value) {\n this.value.next(this.initialValue || this.ngFormControl.value);\n }\n }\n\n override setLabel(): void {\n this.service.selectedOptionsToEmit$ // when a user clicks\n .pipe(skip(1))\n .subscribe((selectedOptions) => this.onSelectionChange(selectedOptions));\n }\n\n onSelectionChange(selectedOptions: ListboxOptionComponent[]): void {\n if (this.service.isMultiSelect) {\n this.setAndEmitValue('');\n } else {\n const label = selectedOptions.length\n ? selectedOptions[0].label?.nativeElement.innerText.trim()\n : '';\n this.setAndEmitValue(label);\n }\n }\n\n onInputChange(value: string): void {\n if (value === '') {\n this.setAutoSelectWhenInputIsEmpty();\n } else {\n this.service.shouldAutoSelectOnListboxClose = this.autoSelect;\n }\n this.setAndEmitValue(value);\n }\n\n setAndEmitValue(value: string): void {\n this.setValue(value);\n this.emitValue(value);\n }\n\n setValue(value: string): void {\n this.value.next(value);\n }\n\n emitValue(value: string): void {\n if (this.ngFormControl) {\n this.ngFormControl.setValue(value);\n } else {\n this.valueChanges.emit(value);\n }\n }\n\n override handleClick(): void {\n this.service.setIsKeyboardEvent(false);\n if (this.service.isOpen) {\n this.service.closeListbox();\n } else {\n if (this.clearOnClick) {\n this.setAndEmitValue('');\n }\n this.service.openListbox();\n if (this.autoSelect) {\n const inputValue = this.inputElRef.nativeElement.value;\n if (inputValue === '') {\n this.setAutoSelectWhenInputIsEmpty();\n } else {\n this.service.shouldAutoSelectOnListboxClose = this.autoSelect;\n }\n }\n }\n this.service.emitTextboxFocus();\n }\n\n protected setAutoSelectWhenInputIsEmpty(): void {\n this.service.shouldAutoSelectOnListboxClose = this.autoSelect\n ? this.autoSelectTrigger === 'any'\n : false;\n }\n\n override onEscape(): void {\n if (!this.service.isOpen) {\n this.setAndEmitValue('');\n this.service.emitOptionAction(OptionAction.nullActiveIndex);\n } else {\n this.service.closeListbox();\n this.service.emitTextboxFocus();\n }\n }\n\n override getActionFromKeydownEvent(event: KeyboardEvent): ComboboxAction {\n if (event.ctrlKey || event.key === 'Shift') {\n return null;\n }\n\n if (!this.service.isOpen && this.openKeys.includes(event.key)) {\n return ListboxAction.open;\n } else if (!this.service.isOpen && event.key === Key.Tab) {\n return null;\n } else if (\n event.key === Key.Enter &&\n (this.service.shouldAutoSelectOnListboxClose\n ? !this.service.isOpen\n : true)\n ) {\n return ListboxAction.close;\n } else {\n if (\n event.key === Key.RightArrow ||\n event.key === Key.LeftArrow ||\n event.key === Key.Space\n ) {\n this.service.emitTextboxFocus();\n return null;\n } else {\n return this.getActionFromKeydownEventWhenOpen(event);\n }\n }\n }\n\n getActionFromKeydownEventWhenOpen(event: KeyboardEvent): ComboboxAction {\n const { key } = event;\n if (key === Key.ArrowDown || key === 'Down') {\n return OptionAction.next;\n } else if (key === Key.ArrowUp) {\n return OptionAction.previous;\n } else if (key === Key.Enter || key === Key.Space) {\n return this.service.isMultiSelect\n ? OptionAction.select\n : ListboxAction.closeSelect;\n } else if (key === Key.Home) {\n return TextboxAction.cursorFirst;\n } else if (key === Key.End) {\n return TextboxAction.cursorLast;\n } else if (this.isPrintableCharacter(key) || key === 'Backspace') {\n return TextboxAction.addChar;\n } else if (key === Key.Tab) {\n return ListboxAction.closeSelect;\n } else {\n return null;\n }\n }\n\n override handleKeyboardAction(action: string, event: KeyboardEvent): void {\n if (action === ListboxAction.closeSelect) {\n event.stopPropagation();\n event.preventDefault();\n this.service.emitOptionAction(OptionAction.select);\n this.service.closeListbox();\n if (event.key !== Key.Tab) {\n this.service.emitTextboxFocus();\n }\n this.service.emitOptionAction(OptionAction.nullActiveIndex);\n } else if (\n action === OptionAction.next ||\n action === OptionAction.previous ||\n action === OptionAction.select\n ) {\n event.stopPropagation();\n event.preventDefault();\n this.service.emitOptionAction(action);\n } else if (action === ListboxAction.open) {\n event.stopPropagation();\n event.preventDefault();\n this.service.emitOptionAction(OptionAction.zeroActiveIndex);\n this.service.openListbox();\n this.service.emitTextboxFocus();\n } else if (action === ListboxAction.close) {\n event.stopPropagation();\n event.preventDefault();\n this.service.closeListbox();\n this.service.emitTextboxFocus();\n this.service.emitOptionAction(OptionAction.nullActiveIndex);\n } else if (\n action === TextboxAction.cursorFirst ||\n action === TextboxAction.cursorLast ||\n action === TextboxAction.addChar\n ) {\n this.service.emitTextboxFocus();\n if (!this.service.isOpen) {\n this.service.openListbox();\n }\n if (action === TextboxAction.cursorFirst) {\n this.inputElRef.nativeElement.setSelectionRange(0, 0);\n } else if (action === TextboxAction.cursorLast) {\n this.inputElRef.nativeElement.setSelectionRange(\n this.inputElRef.nativeElement.value.length,\n this.inputElRef.nativeElement.value.length\n );\n }\n if (this.autoSelect && action === TextboxAction.addChar) {\n this.service.emitOptionAction(OptionAction.zeroActiveIndex);\n } else {\n this.service.emitOptionAction(OptionAction.nullActiveIndex);\n }\n }\n }\n\n isPrintableCharacter(str: string) {\n return str.length === 1 && str.match(/\\S| /);\n }\n}\n","<div\n class=\"hsi-ui-editable-textbox-container\"\n [class.open]=\"service.isOpen$ | async\"\n #textInputTemplate\n>\n <input\n #box\n class=\"hsi-ui-editable-textbox-input\"\n [attr.type]=\"inputType\"\n role=\"combobox\"\n tabindex=\"0\"\n [id]=\"service.id + '-textbox'\"\n (click)=\"handleClick()\"\n (blur)=\"handleBlur($event)\"\n (keydown)=\"handleKeydown($event)\"\n autocomplete=\"off\"\n [attr.aria-label]=\"\n (service.label$ | async) === null\n ? ariaLabel || placeholder || service.isMultiSelect\n ? 'Search and select options'\n : 'Search and select an option'\n : null\n \"\n [attr.aria-labelledby]=\"\n (service.label$ | async) !== null ? service.comboboxLabelId : null\n \"\n [attr.aria-activedescendant]=\"service.activeDescendant$ | async\"\n [attr.aria-expanded]=\"service.isOpen$ | async\"\n [attr.aria-autocomplete]=\"service.autoComplete\"\n [attr.aria-controls]=\"service.id + '-listbox'\"\n aria-haspopup=\"listbox\"\n data-cy=\"editable-textbox-input\"\n [placeholder]=\"placeholder\"\n [ngModel]=\"value$ | async\"\n (ngModelChange)=\"onInputChange($event)\"\n />\n <div\n class=\"hsi-ui-textbox-icon hsi-ui-editable-textbox-icon\"\n [class.open]=\"service.isOpen$ | async\"\n >\n <ng-content select=\"[boxIcon]\"></ng-content\n ></div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { ComboboxLabelComponent } from './combobox-label/combobox-label.component';\nimport { ComboboxComponent } from './combobox.component';\nimport { EditableTextboxComponent } from './editable-textbox/editable-textbox.component';\nimport { ListboxGroupComponent } from './listbox-group/listbox-group.component';\nimport { ListboxLabelComponent } from './listbox-label/listbox-label.component';\nimport { ListboxOptionComponent } from './listbox-option/listbox-option.component';\nimport { ListboxComponent } from './listbox/listbox.component';\nimport { SelectAllListboxOptionComponent } from './select-all-listbox-option/select-all-listbox-option.component';\nimport { TextboxComponent } from './textbox/textbox.component';\n\n@NgModule({\n imports: [\n ComboboxComponent,\n ComboboxLabelComponent,\n TextboxComponent,\n ListboxComponent,\n ListboxGroupComponent,\n ListboxOptionComponent,\n ListboxLabelComponent,\n EditableTextboxComponent,\n SelectAllListboxOptionComponent,\n ],\n exports: [\n ComboboxComponent,\n ComboboxLabelComponent,\n TextboxComponent,\n ListboxComponent,\n ListboxGroupComponent,\n ListboxLabelComponent,\n ListboxOptionComponent,\n EditableTextboxComponent,\n SelectAllListboxOptionComponent,\n ],\n})\nexport class HsiUiComboboxModule {}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { NgOnChangesUtilities } from '@mathstack/app-kit';\nimport { BehaviorSubject } from 'rxjs';\n\nexport interface HsiUiDirectoryItem {\n name: string;\n value?: string;\n children?: HsiUiDirectoryItem[];\n}\n\nexport interface HsiUiDirectorySelection {\n activePath: string;\n selectedItem: string;\n}\n\n@Component({\n selector: 'hsi-ui-directory',\n imports: [CommonModule, MatIconModule],\n templateUrl: './directory.component.html',\n styleUrls: ['./directory.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class HsiUiDirectoryComponent implements OnChanges {\n @Input() items: HsiUiDirectoryItem[];\n @Input() level: number = 0;\n @Input() path: string = '';\n @Input() terminalItemsAreSelectable: boolean = true;\n @Input() selectionElementRole: string = 'button';\n /**\n * Sets the activePath and selectedItem.\n */\n @Input() selection: HsiUiDirectorySelection;\n /**\n * Emits the activePath and selectedItem when a leaf item is selected.\n *\n * Constructed from the `value` of each item if provided, otherwise uses `name`.\n */\n @Output() selectionChanges = new EventEmitter<HsiUiDirectorySelection>();\n /**\n * @internal\n *\n * Internal, will have no effect if provided at root level.\n */\n @Output() stateChanges = new EventEmitter<HsiUiDirectorySelection>();\n state: BehaviorSubject<HsiUiDirectorySelection> =\n new BehaviorSubject<HsiUiDirectorySelection>({\n activePath: '',\n selectedItem: '',\n });\n state$ = this.state.asObservable();\n open = {};\n\n ngOnChanges(changes: SimpleChanges) {\n if (NgOnChangesUtilities.inputObjectChanged(changes, 'selection')) {\n this.state.next(this.selection);\n }\n }\n\n toggleOpen(key: string): void {\n if (this.open[key] === undefined) {\n this.open[key] = true;\n } else {\n this.open[key] = !this.open[key];\n }\n }\n\n // public events are emitted on leaf selection\n selectItem(item: HsiUiDirectoryItem): void {\n const itemValue = item.value || item.name;\n const activePath = this.path ? `${this.path}/${itemValue}` : itemValue;\n if (this.level === 0) {\n this.selectionChanges.emit({\n activePath: activePath,\n selectedItem: itemValue,\n });\n } else {\n this.stateChanges.emit({ activePath, selectedItem: itemValue });\n }\n }\n\n // called when child emits new _activePath value\n setState(state: HsiUiDirectorySelection): void {\n if (this.level === 0) {\n this.state.next(state);\n this.selectionChanges.emit({\n activePath: state.activePath,\n selectedItem: state.selectedItem,\n });\n } else {\n this.stateChanges.emit(state);\n }\n }\n}\n","@for (item of items; track $index) {\n @if (!!item.children && item.children.length > 0) {\n <!-- This is the template for expandable nodes -->\n <div [style.--level]=\"level\">\n <div\n class=\"item expandable\"\n [ngClass]=\"'level-' + level\"\n role=\"button\"\n tabindex=\"0\"\n (click)=\"toggleOpen(item.name)\"\n (enter)=\"toggleOpen(item.name)\"\n >\n <p class=\"name\">{{ item.name }}</p>\n @if (open[item.name]) {\n <span aria-hidden=\"true\" class=\"material-symbols-outlined arrow\"\n >expand_more</span\n >\n } @else {\n <span aria-hidden=\"true\" class=\"material-symbols-outlined arrow\"\n >chevron_right</span\n >\n }\n </div>\n <hsi-ui-directory\n [items]=\"item.children\"\n [level]=\"level + 1\"\n [terminalItemsAreSelectable]=\"terminalItemsAreSelectable\"\n [path]=\"\n path.concat(\n level !== 0\n ? '/' + (item.value || item.name)\n : item.value || item.name\n )\n \"\n [class.invisible]=\"!open[item.name]\"\n (stateChanges)=\"setState($event)\"\n [selection]=\"state$ | async\"\n ></hsi-ui-directory>\n </div>\n } @else {\n <!-- This is the template for leaf nodes -->\n @if (terminalItemsAreSelectable) {\n <div\n class=\"item selectable\"\n [ngClass]=\"'level-' + level\"\n [attr.role]=\"selectionElementRole\"\n tabindex=\"0\"\n [style.--level]=\"level\"\n [class.active]=\"\n (state$ | async).activePath ===\n (level > 0 ? path + '/' : '') + (item.value || item.name)\n \"\n (click)=\"selectItem(item)\"\n (enter)=\"selectItem(item)\"\n >\n <p class=\"name\">{{ item.name }}</p>\n </div>\n } @else {\n <div class=\"item\" [style.--level]=\"level\">\n <p class=\"name\">{{ item.name }}</p>\n </div>\n }\n }\n}\n","/* eslint-disable @angular-eslint/prefer-standalone */\nimport { Component, Input } from '@angular/core';\nimport { TableColumn } from '../table-column';\n\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: '[hsi-ui-single-sort-header]',\n templateUrl: './single-sort-header.component.html',\n styleUrls: ['./single-sort-header.component.scss'],\n standalone: false,\n})\nexport class SingleSortHeaderComponent<Datum> {\n @Input() column: TableColumn<Datum>;\n @Input() sortIcon: string;\n\n getColumnSortClasses(): string[] {\n const baseClasses = [\n 'material-symbols-outlined',\n this.column.sortDirection,\n ];\n return this.column.activelySorted\n ? baseClasses.concat('actively-sorted')\n : baseClasses;\n }\n}\n","<div class=\"header-cell-sort\">\n <span>{{ column.label }}</span>\n <span\n aria-hidden=\"true\"\n class=\"material-symbols-outlined\"\n [ngClass]=\"getColumnSortClasses()\"\n >{{ sortIcon }}</span\n >\n</div>\n","import { safeAssign } from '@mathstack/app-kit';\nimport { ascending } from 'd3';\n\nexport enum SortDirection {\n asc = 'asc',\n desc = 'desc',\n}\n\nexport type SortDirectionType = keyof typeof SortDirection;\nexport type TableValue = string | number | boolean | Date;\nexport type TableCellAlignment = 'left' | 'center' | 'right';\n\nexport class TableColumn<Datum> {\n /**\n * The label of the column. Used in the table header.\n * */\n label: string;\n /**\n * Function to extract the value to be sorted on from the datum.\n * If not provided, the formatted value will be used for sorting.\n */\n getSortValue: (x: Datum) => TableValue;\n /**\n * Function to format the value for display in the table.\n */\n getFormattedValue: (x: Datum) => string;\n /**\n * Function to determine the alignment of the cell content.\n */\n getAlignment: (x: Datum) => TableCellAlignment;\n /**\n * Width of the column. Can be a percentage or pixel value.\n */\n width: string;\n /**\n * Function to determine the sort order of the column.\n * If not provided, sort with use d3.ascending on the getSortValue or getFormattedValue.\n */\n ascendingSortFunction: (a: Datum, b: Datum) => number;\n sortDirection: SortDirectionType;\n /**\n * Whether the column is sortable.\n */\n sortable = false;\n activelySorted: boolean;\n /**\n * The sort order of the column. Used to determine the order of sorting when multiple columns are sorted.\n * Sorting tiebreaks are determined by increasing sortOrder number.\n **/\n sortOrder: number = Number.MAX_SAFE_INTEGER;\n /**\n * Whether the column is a row header.\n */\n isRowHeader = false;\n readonly initialSortDirection: SortDirectionType;\n\n constructor(init?: Partial<TableColumn<Datum>>) {\n this.sortDirection = SortDirection.asc;\n this.getAlignment = () => 'left';\n safeAssign(this, init);\n this.initialSortDirection = this.sortDirection;\n if (this.ascendingSortFunction === undefined) {\n this.ascendingSortFunction = this.defaultSort;\n }\n }\n\n defaultSort(a: Datum, b: Datum): number {\n const accessor = this.getSortValue || this.getFormattedValue;\n return ascending(accessor(a), accessor(b));\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n Input,\n OnInit,\n ViewEncapsulation,\n inject,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { min } from 'd3';\nimport { isEqual } from 'lodash-es';\nimport {\n BehaviorSubject,\n Observable,\n distinctUntilChanged,\n filter,\n map,\n merge,\n scan,\n shareReplay,\n withLatestFrom,\n} from 'rxjs';\nimport { SortDirection, TableColumn } from './table-column';\nimport { HsiUiTableConfig } from './table.config';\n\n@Component({\n selector: 'hsi-ui-table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n // eslint-disable-next-line @angular-eslint/prefer-standalone\n standalone: false,\n})\nexport class TableComponent<Datum> implements OnInit {\n @Input() config$: Observable<HsiUiTableConfig<Datum>>;\n @Input() sortIcon = 'arrow_upward';\n data$: Observable<Datum[]>;\n columns$: Observable<TableColumn<Datum>[]>;\n tableHeaders$: Observable<string[]>;\n sort: BehaviorSubject<TableColumn<Datum>> = new BehaviorSubject(null);\n sort$: Observable<TableColumn<Datum>> = this.sort.asObservable();\n\n private destroyRef = inject(DestroyRef);\n\n ngOnInit(): void {\n this.setTableData();\n this.setTableHeaders();\n this.validateRowHeaders();\n }\n\n setTableData(): void {\n const config$ = this.config$.pipe(\n withLatestFrom(this.sort$),\n map(([config, sort]) => () => {\n const activeSortColumn =\n sort || this.getMinSortOrderColumn(config.columns);\n const columns = this.getColumnsWithNewSortApplied(\n activeSortColumn,\n config.columns,\n false\n );\n return {\n data: this.sortData(config.data, activeSortColumn, columns),\n columns,\n };\n })\n );\n\n const sort$ = this.sort$.pipe(\n filter((sort) => sort !== null),\n map((sort) => (sortedConfig: HsiUiTableConfig<Datum>) => {\n const columns = this.getColumnsWithNewSortApplied(\n sort,\n sortedConfig.columns\n );\n return {\n data: this.sortData(sortedConfig.data, sort, columns),\n columns,\n };\n })\n );\n const sortedConfig$ = merge(config$, sort$).pipe(\n scan((sortedConfig, changeFn) => changeFn(sortedConfig), {\n data: [],\n columns: [],\n }),\n shareReplay(1) // do not remove sort toggle will be called twice\n );\n\n this.data$ = sortedConfig$.pipe(\n map((x) => x.data),\n shareReplay(1)\n );\n this.columns$ = sortedConfig$.pipe(\n map((x) => x.columns),\n shareReplay(1)\n );\n }\n\n getMinSortOrderColumn(columns: TableColumn<Datum>[]): TableColumn<Datum> {\n const minSortOrder = min(columns, (x) => x.sortOrder);\n return columns.find((x) => x.sortOrder === minSortOrder);\n }\n\n getColumnsWithNewSortApplied(\n activeSortColumn: TableColumn<Datum>,\n columns: TableColumn<Datum>[],\n toggleSortDirection = true\n ): TableColumn<Datum>[] {\n const columnsWithSortDir = columns.map((x) => {\n if (x.label === activeSortColumn.label) {\n if (toggleSortDirection) {\n x.sortDirection =\n x.sortDirection === SortDirection.asc\n ? SortDirection.desc\n : SortDirection.asc;\n }\n x.activelySorted = true;\n } else {\n if (toggleSortDirection) {\n x.sortDirection = x.initialSortDirection;\n }\n x.activelySorted = false;\n }\n return x;\n });\n return columnsWithSortDir;\n }\n\n setTableHeaders(): void {\n this.tableHeaders$ = this.columns$.pipe(\n map((columns) => columns.map((x) => x.label)),\n distinctUntilChanged((a, b) => isEqual(a, b)),\n shareReplay(1)\n );\n }\n\n validateRowHeaders(): void {\n this.columns$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((columns) => {\n const rowHeaders = columns.filter((x) => x.isRowHeader);\n if (rowHeaders.length > 1) {\n throw new Error(\n 'Table can only have one row header column. Please update your column config.'\n );\n }\n });\n }\n\n sortTableByColumn(column: TableColumn<Datum>) {\n this.sort.next(column);\n }\n\n sortData(\n data: Datum[],\n primaryColumnSort: TableColumn<Datum>,\n columns: TableColumn<Datum>[]\n ): Datum[] {\n const sortedColumns = columns.slice().sort((columnA, columnB) => {\n return columnA.label === primaryColumnSort.label\n ? -1\n : columnB.label === primaryColumnSort.label\n ? 1\n : columnA.sortOrder - columnB.sortOrder;\n });\n\n const sortedData = data.slice().sort((a, b) => {\n for (const column of sortedColumns) {\n let returnValue = column.ascendingSortFunction(a, b);\n if (column.sortDirection === SortDirection.desc) {\n returnValue *= -1;\n }\n if (returnValue !== 0) return returnValue;\n }\n return 0;\n });\n return sortedData;\n }\n\n columnTrackingFunction(_: number, column: TableColumn<Datum>) {\n return column.label;\n }\n}\n","<table class=\"table-container\" cdk-table [dataSource]=\"data$\">\n @for (\n column of columns$ | async;\n track columnTrackingFunction($index, column)\n ) {\n <col span=\"1\" [style]=\"'width:' + column.width\" />\n }\n\n @for (\n column of columns$ | async;\n track columnTrackingFunction(i, column);\n let i = $index\n ) {\n <ng-container [cdkColumnDef]=\"column.label\">\n @if (column.sortable) {\n <th\n hsi-ui-single-sort-header\n scope=\"col\"\n cdk-header-cell\n *cdkHeaderCellDef=\"let element\"\n [ngClass]=\"[column.getAlignment(element), 'sorted-header']\"\n [column]=\"column\"\n [sortIcon]=\"sortIcon\"\n (click)=\"sortTableByColumn(column)\"\n ></th>\n <td\n cdk-cell\n [ngClass]=\"[column.getAlignment(element), 'sorted-header']\"\n *cdkCellDef=\"let element\"\n [attr.scope]=\"column.isRowHeader ? 'row' : null\"\n data-cy=\"table-cell\"\n >\n {{ column.getFormattedValue(element) }}\n </td>\n } @else {\n <th\n cdk-header-cell\n *cdkHeaderCellDef=\"let element\"\n [class]=\"column.getAlignment(element)\"\n scope=\"col\"\n >\n {{ column.label }}\n </th>\n <td\n cdk-cell\n [ngClass]=\"[column.getAlignment(element), 'sorted-cell']\"\n *cdkCellDef=\"let element\"\n [attr.scope]=\"column.isRowHeader ? 'row' : null\"\n data-cy=\"table-cell\"\n >\n {{ column.getFormattedValue(element) }}\n </td>\n }\n </ng-container>\n }\n\n <tr\n cdk-header-row\n class=\"header\"\n *cdkHeaderRowDef=\"tableHeaders$ | async\"\n ></tr>\n <tr\n cdk-row\n class=\"row\"\n data-cy=\"table-row\"\n *cdkRowDef=\"let row; columns: tableHeaders$ | async\"\n ></tr>\n <ng-template></ng-template>\n</table>\n","import { TableColumn } from './table-column';\n\nexport class HsiUiTableConfig<Datum> {\n data: Datum[];\n columns: TableColumn<Datum>[];\n}\n","import { CdkTableModule } from '@angular/cdk/table';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { SingleSortHeaderComponent } from './single-sort-header/single-sort-header.component';\nimport { TableComponent } from './table.component';\n\n@NgModule({\n declarations: [TableComponent, SingleSortHeaderComponent],\n imports: [CommonModule, CdkTableModule, MatIconModule],\n exports: [TableComponent],\n})\nexport class TableModule {}\n","import { Directive, inject, InjectionToken, TemplateRef } from '@angular/core';\nimport { MatTabContent } from '@angular/material/tabs';\n\nexport const HSI_UI_TAB_CONTENT = new InjectionToken<MatTabContent>(\n 'TabContent'\n);\n\n/**\n * Allows a tab to be lazy-loaded when it is activated when used as a directive on an ng-template. It is recommended that this be used when the content of the tab requires calculations.\n *\n * Has the same functionality as https://material.angular.io/components/tabs/overview#lazy-loading\n */\n\n@Directive({\n selector: '[hsiUiTabContent]',\n providers: [\n { provide: HSI_UI_TAB_CONTENT, useExisting: TabContentDirective },\n ],\n})\nexport class TabContentDirective {\n /** Content for the tab. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public template = inject(TemplateRef<any>);\n}\n","import { Component, ContentChild, TemplateRef, ViewChild } from '@angular/core';\nimport { TabContentDirective } from './tab-content.directive';\n\n@Component({\n selector: 'hsi-ui-tab-body',\n template: '<ng-template><ng-content></ng-content></ng-template>',\n})\nexport class TabBodyComponent {\n @ViewChild(TemplateRef)\n bodyContent: TemplateRef<HTMLElement>;\n @ContentChild(TabContentDirective, { read: TemplateRef, static: true })\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n lazyLoadedContent: TemplateRef<any>;\n}\n","import {\n Component,\n ElementRef,\n Input,\n TemplateRef,\n ViewChild,\n} from '@angular/core';\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: 'hsi-ui-tab-label',\n template: `<ng-template\n ><div #label class=\"tab-label\" [id]=\"id\"><ng-content></ng-content></div\n ></ng-template>`,\n})\nexport class TabLabelComponent {\n @Input() value: string;\n @ViewChild('label')\n labelElement: ElementRef<HTMLDivElement>;\n @ViewChild(TemplateRef) labelContent: TemplateRef<unknown>;\n id = `tab-label-${nextUniqueId++}`;\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { TabItemComponent } from './tab-item.component';\n\n@Injectable()\nexport class TabsService<T> {\n activeTab: BehaviorSubject<TabItemComponent<T> | null> =\n new BehaviorSubject<TabItemComponent<T> | null>(null);\n activeTab$ = this.activeTab.asObservable();\n}\n","import {\n Component,\n ContentChild,\n Input,\n OnChanges,\n inject,\n} from '@angular/core';\nimport { TabBodyComponent } from './tab-body.component';\nimport { TabLabelComponent } from './tab-label.component';\nimport { TabsService } from './tabs.service';\n\n@Component({\n selector: 'hsi-ui-tab-item',\n template: '<ng-content></ng-content>',\n})\nexport class TabItemComponent<T> implements OnChanges {\n @Input() isActive = false;\n @Input() value: T;\n @ContentChild(TabBodyComponent) bodyComponent: TabBodyComponent;\n @ContentChild(TabLabelComponent) labelComponent: TabLabelComponent;\n\n private service = inject(TabsService<T>);\n\n ngOnChanges(): void {\n if (this.isActive) {\n this.service.activeTab.next(this);\n }\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n AfterContentInit,\n Component,\n ContentChildren,\n DestroyRef,\n EventEmitter,\n Output,\n QueryList,\n inject,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Observable, map, startWith } from 'rxjs';\nimport { TabItemComponent } from './tab-item.component';\nimport { TabsService } from './tabs.service';\n\n@Component({\n selector: 'hsi-ui-tabs',\n imports: [CommonModule],\n providers: [TabsService],\n templateUrl: './tabs.component.html',\n styleUrls: ['./tabs.component.scss'],\n})\nexport class TabsComponent<T> implements AfterContentInit {\n @ContentChildren(TabItemComponent) tabs: QueryList<TabItemComponent<T>>;\n @Output() tabChange = new EventEmitter<T | string>();\n tabItems$: Observable<TabItemComponent<T>[]>;\n tabChanges$: Observable<boolean[]>;\n\n public readonly service: TabsService<T>;\n private destroyRef = inject(DestroyRef);\n\n constructor() {\n this.service = inject(TabsService<T>);\n }\n\n ngAfterContentInit(): void {\n this.tabItems$ = this.tabs.changes.pipe(\n takeUntilDestroyed(this.destroyRef),\n startWith(''),\n map(() => this.tabs.toArray())\n );\n this.initializeActiveTab();\n }\n\n initializeActiveTab(): void {\n if (!this.service.activeTab.value) {\n this.service.activeTab.next(this.tabs.first);\n }\n }\n\n selectTab(tabItem: TabItemComponent<T>): void {\n if (this.service.activeTab.value !== tabItem) {\n this.service.activeTab.next(tabItem);\n this.emitNewActiveTab(tabItem);\n }\n }\n\n emitNewActiveTab(tabItem: TabItemComponent<T>): void {\n const value =\n tabItem.value ??\n tabItem.labelComponent.labelElement.nativeElement.innerText;\n this.tabChange.emit(value);\n }\n\n handleKeydown(event: KeyboardEvent, tabItem: TabItemComponent<T>): void {\n const tabIndex = this.tabs.toArray().indexOf(tabItem);\n let cancelOtherActions = false;\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n this.selectTab(tabItem);\n cancelOtherActions = true;\n break;\n\n case 'ArrowRight':\n case 'Right':\n this.focusNextTab(tabIndex);\n cancelOtherActions = true;\n break;\n\n case 'ArrowLeft':\n case 'Left':\n this.focusPreviousTab(tabIndex);\n cancelOtherActions = true;\n break;\n\n case 'Home':\n this.focusTab(this.tabs.first);\n cancelOtherActions = true;\n break;\n\n case 'End':\n this.focusTab(this.tabs.last);\n cancelOtherActions = true;\n break;\n\n default:\n break;\n }\n\n if (cancelOtherActions) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n focusTab(tabItem: TabItemComponent<T>): void {\n tabItem.labelComponent.labelElement.nativeElement.parentElement?.focus();\n }\n\n focusNextTab(tabIndex: number): void {\n if (tabIndex < this.tabs.length - 1) {\n this.focusTab(this.tabs.toArray()[tabIndex + 1]);\n } else {\n this.focusTab(this.tabs.first);\n }\n }\n\n focusPreviousTab(tabIndex: number): void {\n if (tabIndex > 0) {\n this.focusTab(this.tabs.toArray()[tabIndex - 1]);\n } else {\n this.focusTab(this.tabs.last);\n }\n }\n}\n","@if (service.activeTab$ | async; as activeTab) {\n <div class=\"tab-list\" role=\"tablist\">\n @for (item of tabItems$ | async; track item) {\n <div\n role=\"tab\"\n [tabindex]=\"activeTab === item ? 0 : -1\"\n class=\"tab-label-container\"\n (click)=\"selectTab(item)\"\n (keydown)=\"handleKeydown($event, item)\"\n [attr.aria-selected]=\"activeTab === item\"\n [class.active]=\"activeTab === item\"\n aria-controls=\"tabs-component-body\"\n data-cy=\"level\"\n >\n @if (item.labelComponent) {\n <ng-container\n *ngTemplateOutlet=\"item.labelComponent.labelContent\"\n ></ng-container>\n }\n </div>\n }\n </div>\n <div\n class=\"tabs-body\"\n id=\"tabs-component-body\"\n role=\"tabpanel\"\n [attr.aria-labelledby]=\"activeTab?.labelComponent?.id\"\n >\n @if (activeTab.bodyComponent) {\n @if (activeTab.bodyComponent?.lazyLoadedContent) {\n <ng-container\n *ngTemplateOutlet=\"activeTab.bodyComponent.lazyLoadedContent\"\n >\n </ng-container>\n } @else {\n <ng-container *ngTemplateOutlet=\"activeTab.bodyComponent.bodyContent\">\n </ng-container>\n }\n }\n </div>\n}\n","import { NgModule } from '@angular/core';\nimport { TabBodyComponent } from './tab-body.component';\nimport { TabContentDirective } from './tab-content.directive';\nimport { TabItemComponent } from './tab-item.component';\nimport { TabLabelComponent } from './tab-label.component';\nimport { TabsComponent } from './tabs.component';\n\n@NgModule({\n declarations: [],\n imports: [\n TabsComponent,\n TabLabelComponent,\n TabItemComponent,\n TabBodyComponent,\n TabContentDirective,\n ],\n exports: [\n TabsComponent,\n TabLabelComponent,\n TabItemComponent,\n TabBodyComponent,\n TabContentDirective,\n ],\n})\nexport class TabsModule {}\n","/*\n * Public API Surface of ui\n */\n\nexport * from './lib/combobox/index';\nexport * from './lib/directory/index';\nexport * from './lib/table/index';\nexport * from './lib/tabs/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["nextUniqueId","i1","i2","i3.SingleSortHeaderComponent"],"mappings":"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"}
|