{"version":3,"file":"usitsdasdesign-dds-ng-listbox.mjs","sources":["../../src/app/dds/listbox/constants.ts","../../src/app/dds/listbox/utils.ts","../../src/app/dds/listbox/listbox/listbox.component.ts","../../src/app/dds/listbox/listbox/listbox.component.html","../../src/app/dds/listbox/listbox.module.ts","../../src/app/dds/listbox/usitsdasdesign-dds-ng-listbox.ts"],"sourcesContent":["import { ThemeClassesMap, ThemeMapEnum } from '@usitsdasdesign/dds-ng/core/theme';\nimport { Size } from '@usitsdasdesign/dds-ng/shared';\n\nexport const DEFAULT_PROP_NAME = 'label';\nexport const DEFAULT_GROUP_NAME = 'group';\nexport const DEFAULT_DESTINATION_BTN_ICON = 'dds-icon_arrow-right';\nexport const DEFAULT_SOURCE_BTN_ICON = 'dds-icon_arrow-left';\n\nexport const themeClassesMap: ThemeClassesMap = {\n  [ThemeMapEnum.Size]: {\n    [Size.lg]: 'dds-listbox_lg',\n    [Size.md]: 'dds-listbox_md',\n    [Size.sm]: 'dds-listbox_sm',\n  },\n};\n\nexport enum Areas {\n  source = 'innerSource',\n  destination = 'innerDestination',\n}\n","import { ListboxGroup, ListboxItem } from \"./typings\";\n\n// Checks if the items are ungrouped.\nexport function checkIsUnGroupedItems(items): boolean {\n  return Array.isArray(items);\n}\n\n\n// Toggles the selection of an item in a list.\nexport function toggleAloneItem(currentItem: ListboxItem, area: ListboxGroup): void {\n  for (const key in area) {\n    if (area[key]) {\n      area[key].forEach((item) => {\n        item.selected = item === currentItem ? !currentItem.selected : false;\n      });\n    }\n  }\n}\n\n\n// Adds an item to an array of items.\nexport function getItemInArray(items: ListboxItem[], item: ListboxItem): ListboxItem[] {\n  return items ? [...items, item] : [item];\n}\n\n// Gets the unselected items from a list of items.\nexport function getUnselectedItems(items: ListboxGroup): ListboxGroup {\n  for (const key in items) {\n    if (items[key]) {\n      const unselectedItems = items[key].filter((item) => !item.selected);\n\n      if (unselectedItems.length) items[key] = unselectedItems;\n      else delete items[key];\n    }\n  }\n\n  return items;\n}\n\n// Gets the selected items from a list of items.\nexport function getSelectedItems(items: ListboxGroup): ListboxGroup {\n  const selectedItems = {};\n\n  for (const key in items) {\n    if (items[key]) {\n      const filteredItems = items[key].filter((item) => item.selected);\n\n      if (filteredItems.length) selectedItems[key] = filteredItems;\n    }\n  }\n\n  return Object.keys(selectedItems).length ? selectedItems : null;\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  HostBinding,\n  Input,\n  OnChanges,\n  Output,\n  Renderer2,\n  SimpleChanges,\n} from '@angular/core';\nimport { ButtonModule } from '@usitsdasdesign/dds-ng/button';\nimport { CheckboxModule } from '@usitsdasdesign/dds-ng/checkbox';\nimport { ContextMenuComponent, ContextMenuModule } from '@usitsdasdesign/dds-ng/context-menu';\nimport { DestroyCtor, DestroyMixin, I18nCtor, I18nMixin } from '@usitsdasdesign/dds-ng/core/common-behaviors';\nimport { FocusHandlerModule } from '@usitsdasdesign/dds-ng/core/focus-handler';\nimport { ThemeClassesMap, ThemeModule } from '@usitsdasdesign/dds-ng/core/theme';\nimport { AdditionalClass, ButtonKind, Size, Themes } from '@usitsdasdesign/dds-ng/shared';\nimport { DdsConfigService } from '@usitsdasdesign/dds-ng/shared/dds-config';\nimport { I18nModule, I18nService, ITranslation } from '@usitsdasdesign/dds-ng/shared/i18n';\nimport {\n  Areas,\n  DEFAULT_DESTINATION_BTN_ICON,\n  DEFAULT_GROUP_NAME,\n  DEFAULT_PROP_NAME,\n  DEFAULT_SOURCE_BTN_ICON,\n  themeClassesMap,\n} from '../constants';\nimport { ListboxGroup, ListboxItem } from '../typings';\nimport { checkIsUnGroupedItems, getItemInArray, getSelectedItems, getUnselectedItems, toggleAloneItem } from '../utils';\n\nconst ListboxBase: DestroyCtor & I18nCtor = DestroyMixin(I18nMixin());\n\n@Component({\n  selector: 'dds-listbox',\n  templateUrl: './listbox.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [CommonModule, ButtonModule, ContextMenuModule, CheckboxModule, I18nModule, FocusHandlerModule, ThemeModule],\n})\nexport class ListboxComponent extends ListboxBase implements OnChanges {\n  // The source list of items or groups.\n  @Input() source: ListboxItem[] | ListboxGroup | undefined;\n\n  // The destination list of items or groups.\n  @Input() destination: ListboxItem[] | ListboxGroup | undefined;\n\n  // The property name used for identifying items.\n  @Input() propName: string | undefined = DEFAULT_PROP_NAME;\n\n  // The theme of the listbox.\n  @Input() theme: Themes | string | undefined = this.ddsConfig.getConfig().theme;\n\n  // The size of the listbox.\n  @Input() size: Size | string | undefined = this.ddsConfig.getConfig().size;\n\n  // The kind of button used in the listbox.\n  @Input() kind: ButtonKind | string | undefined;\n\n  // Whether the listbox supports multi-select.\n  @Input() isMultiSelect: boolean | undefined;\n\n  // Whether the listbox is in inverse mode.\n  @Input() isInverse: boolean | undefined;\n\n  // The minimum height of the listbox.\n  @Input() minHeight: string | undefined;\n\n  // The maximum height of the listbox.\n  @Input() maxHeight: string | undefined;\n\n  // Custom CSS class for the listbox.\n  @Input() customClass: string | undefined;\n\n  // Icon for the destination button.\n  @Input() destinationBtnIcon: string | undefined = DEFAULT_DESTINATION_BTN_ICON;\n\n  // Icon for the source button.\n  @Input() sourceBtnIcon: string | undefined = DEFAULT_SOURCE_BTN_ICON;\n\n  // Event emitted when the source list changes.\n  @Output() sourceChanged = new EventEmitter<ListboxItem[] | ListboxGroup>();\n\n  // Event emitted when the destination list changes.\n  @Output() destinationChanged = new EventEmitter<ListboxItem[] | ListboxGroup>();\n\n  // Host binding for the full width class.\n  @HostBinding(`class.${AdditionalClass.fullWidth}`) fullWidth = true;\n\n  // Areas of the listbox.\n  public Areas = Areas;\n\n  // Selected items in the listbox.\n  public selectedItems: { [key: string]: ListboxGroup } = {};\n\n  // Inner source list of items or groups.\n  public innerSource: ListboxGroup;\n\n  // Inner destination list of items or groups.\n  public innerDestination: ListboxGroup;\n\n  // Text for the empty state of the listbox.\n  public emptyStateText: string;\n\n  // ARIA label for the add button.\n  public addBtnAriaLabel: string;\n\n  // ARIA label for the remove button.\n  public removeBtnAriaLabel: string;\n\n  // ARIA description for the menu.\n  public menuAriaDescription: string;\n\n  // ARIA label for items in the listbox.\n  public itemAriaLabel: string;\n\n  // Whether the items are ungrouped.\n  public isUnGroupedItems: boolean;\n\n  // Theme configuration for the listbox.\n  public themeConfig: ThemeClassesMap = themeClassesMap;\n\n  // Context menus in the listbox.\n  private contextMenus: ContextMenuComponent[] = [];\n\n  // ARIA label for the source area.\n  private sourceAriaLabel: string;\n\n  // ARIA label for the destination area.\n  private destinationAriaLabel: string;\n\n  constructor(public cdr: ChangeDetectorRef, public i18n: I18nService, private ddsConfig: DdsConfigService, private renderer: Renderer2) {\n    super();\n  }\n\n  public ngOnChanges(changes: SimpleChanges): void {\n    if (changes.source && changes.source.currentValue) {\n      this.innerSource = this.getDataItems(this.source);\n    }\n    if (changes.destination && changes.destination.currentValue) {\n      this.innerDestination = this.getDataItems(this.destination);\n    }\n  }\n\n  // Checks if the given items are empty.\n  public isEmpty(items: ListboxGroup): boolean {\n    return !items || !Object.keys(items).length;\n  }\n\n  // Selects an item in the listbox.\n  public selectedItem(currentItem: ListboxItem, area: Areas): void {\n    const oppositeArea = area === Areas.source ? Areas.destination : Areas.source;\n\n    if (this.isMultiSelect) {\n      currentItem.selected = !currentItem.selected;\n    } else {\n      toggleAloneItem(currentItem, this[area]);\n    }\n\n    this.unselectedItemsByArea(oppositeArea);\n    this.selectedItems[area] = getSelectedItems(this[area]);\n  }\n\n  // Adds selected items from the source to the destination.\n  public addItem(): void {\n    this.contextMenus.forEach((contextMenu) => (contextMenu.contextMenuItems = []));\n    this.innerDestination ||= {};\n\n    for (const key in this.innerSource) {\n      if (this.innerSource[key]) {\n        this.innerSource[key].forEach((item) => {\n          if (item.selected) {\n            this.innerDestination[key] = getItemInArray(this.innerDestination[key], item);\n          }\n        });\n      }\n    }\n    this.innerSource = getUnselectedItems(this.innerSource);\n    this.emitChanges();\n    this.unselectedAllItems();\n\n    // for accessibility\n    setTimeout(() => {\n      this.contextMenus.forEach((contextMenu) => {\n        contextMenu.keyManager.items = contextMenu.contextMenuItems;\n      });\n      this.contextMenus[0]?.focus();\n    });\n  }\n\n  // Removes selected items from the destination to the source.\n  public removeItem(): void {\n    this.contextMenus.forEach((contextMenu) => (contextMenu.contextMenuItems = []));\n    this.innerSource ||= {};\n\n    for (const key in this.innerDestination) {\n      if (this.innerDestination[key]) {\n        this.innerDestination[key].forEach((item) => {\n          if (item.selected) {\n            this.innerSource[key] = getItemInArray(this.innerSource[key], item);\n          }\n        });\n      }\n    }\n    this.innerDestination = getUnselectedItems(this.innerDestination);\n    this.emitChanges();\n    this.unselectedAllItems();\n\n    // for accessibility\n    setTimeout(() => {\n      this.contextMenus.forEach((contextMenu) => {\n        contextMenu.keyManager.items = contextMenu.contextMenuItems;\n      });\n      this.contextMenus[0]?.focus();\n    });\n  }\n\n  // Initializes a context menu.\n  public onInit(contextMenu: ContextMenuComponent): void {\n    contextMenu.isPreventTab = false;\n    this.contextMenus.push(contextMenu);\n  }\n\n  // Resets the focus item in a context menu.\n  public resetFocusItem(contextMenu: ContextMenuComponent): void {\n    contextMenu.keyManager.updateActiveItem(null);\n  }\n\n  // Gets the length of inner items in the specified area.\n  public getInnerItemsLength(area: Areas): boolean {\n    if (area === Areas.source) return true;\n    if (this.innerDestination && area === Areas.destination) return !!Object.values(this.innerDestination).length;\n  }\n\n  // Gets the ARIA label for the specified area.\n  public getAriaLabel(area: Areas): string {\n    return area === Areas.source ? this.sourceAriaLabel : this.destinationAriaLabel;\n  }\n\n  // Gets the ARIA label for an item.\n  public getItemAriaLabel(title: string): string {\n    return `${title} ${this.itemAriaLabel}`;\n  }\n\n  // Removes the focus wrap from an area.\n  public unFocusWrap(area: ContextMenuComponent): void {\n    this.renderer.removeClass(area.contextMenu.nativeElement, AdditionalClass.keyboardFocus);\n  }\n\n  // Gets the data items from a list of items or groups.\n  private getDataItems(data: ListboxGroup | ListboxItem[]): ListboxGroup {\n    let dataItems = JSON.parse(JSON.stringify(data));\n\n    this.isUnGroupedItems = checkIsUnGroupedItems(data);\n\n    if (this.isUnGroupedItems) dataItems = { [DEFAULT_GROUP_NAME]: dataItems as ListboxItem[] };\n\n    return dataItems;\n  }\n\n  // Unselects all items in the listbox.\n  private unselectedAllItems(): void {\n    this.unselectedItemsByArea(Areas.source);\n    this.unselectedItemsByArea(Areas.destination);\n  }\n\n  // Unselects items in the specified area.\n  private unselectedItemsByArea(area: Areas): void {\n    for (const key in this[area]) {\n      if (this[area][key]) {\n        this[area][key]?.forEach((item) => delete item.selected);\n      }\n    }\n    delete this.selectedItems[area];\n  }\n\n  // Emits changes to the source and destination lists.\n  private emitChanges(): void {\n    const sourceItems = this.getItemsForEmit(this.innerSource);\n    const destinationItems = this.getItemsForEmit(this.innerDestination);\n\n    this.sourceChanged.emit(sourceItems);\n    this.destinationChanged.emit(destinationItems);\n  }\n\n  // Gets the items for emitting changes.\n  private getItemsForEmit(items: ListboxItem[] | ListboxGroup): ListboxItem[] | ListboxGroup {\n    return this.isUnGroupedItems ? items[DEFAULT_GROUP_NAME] : items;\n  }\n\n  // Sets the internationalization texts for the listbox.\n  protected setI18nTexts(translation: ITranslation): void {\n    this.emptyStateText = translation.LISTBOX.EMPTY_STATE_TEXT;\n    this.sourceAriaLabel = translation.LISTBOX.A11Y.SOURCE_AREA_ARIA_LABEL;\n    this.destinationAriaLabel = translation.LISTBOX.A11Y.DESTINATION_AREA_ARIA_LABEL;\n    this.addBtnAriaLabel = translation.LISTBOX.A11Y.ADD_BTN_ARIA_LABEL;\n    this.removeBtnAriaLabel = translation.LISTBOX.A11Y.REMOVE_BTN_ARIA_LABEL;\n    this.menuAriaDescription = translation.LISTBOX.A11Y.MENU_ARIA_DESCRIPTION;\n    this.itemAriaLabel = translation.LISTBOX.A11Y.ITEM_ARIA_LABEL;\n    this.cdr.detectChanges();\n  }\n}\n","<div class=\"dds-listbox {{customClass}}\"\n     [ngClass]=\"{\n      'dds-listbox_multiselect': isMultiSelect,\n      'dds-listbox_inverse': isInverse\n     }\"\n     [ddsTheme]=\"themeConfig\"\n     [size]=\"size\">\n  <ng-container *ngTemplateOutlet=\"listboxArea; context: {items: innerSource, area: Areas.source}\"></ng-container>\n\n  <div class=\"dds-listbox__controls\"\n       role=\"toolbar\">\n    <dds-button [theme]=\"theme\"\n                [kind]=\"kind\"\n                [size]=\"size\"\n                [ariaLabel]=\"addBtnAriaLabel\"\n                [isInverse]=\"isInverse\"\n                [disabled]=\"!selectedItems[Areas.source]\"\n                [icon]=\"destinationBtnIcon\"\n                class=\"dds-listbox__btn dds-listbox__btn_add\"\n                (clicked)=\"addItem()\"></dds-button>\n\n    <dds-button [theme]=\"theme\"\n                [kind]=\"kind\"\n                [size]=\"size\"\n                [ariaLabel]=\"removeBtnAriaLabel\"\n                [isInverse]=\"isInverse\"\n                [disabled]=\"!selectedItems[Areas.destination]\"\n                [icon]=\"sourceBtnIcon\"\n                class=\"dds-listbox__btn dds-remove\"\n                (clicked)=\"removeItem()\"></dds-button>\n  </div>\n\n  <ng-container *ngTemplateOutlet=\"listboxArea; context: {items: innerDestination, area: Areas.destination}\"></ng-container>\n</div>\n\n<!-- Listbox area -->\n<ng-template let-items=\"items\"\n             let-area=\"area\"\n             #listboxArea>\n  <dds-context-menu [size]=\"size\"\n                    [maxHeight]=\"maxHeight\"\n                    [theme]=\"theme\"\n                    [isInverse]=\"isInverse\"\n                    [isInitialFocused]=\"false\"\n                    [ariaLabel]=\"getAriaLabel(area)\"\n                    [ariaDescription]=\"menuAriaDescription\"\n                    [ariaRole]=\"getInnerItemsLength(area) ? 'listbox' : null\"\n                    [ngStyle]=\"{minHeight: minHeight}\"\n                    class=\"dds-listbox__area\"\n                    (onInit)=\"onInit(contextMenu)\"\n                    (keyPressed)=\"unFocusWrap(contextMenu)\"\n                    (keyboardFocusOut)=\"resetFocusItem(contextMenu)\"\n                    #contextMenu>\n\n    <!-- Empty state -->\n    @if (isEmpty(items)) {\n      <dds-context-menu-item [template]=\"emptyState\">\n        <ng-template #emptyState>\n          <span class=\"dds-listbox__empty-state\">{{emptyStateText}}</span>\n        </ng-template>\n      </dds-context-menu-item>\n    } @else {\n      <!-- List item template -->\n      @for (itemGroup of items | keyvalue; track itemGroup; let last = $last) {\n        @for (item of $any(itemGroup).value; track item) {\n          <dds-context-menu-item [ngClass]=\"{'dds-listbox__item_selected': item.selected}\"\n                                 [ariaSelected]=\"item.selected || false\"\n                                 class=\"dds-listbox__item\"\n                                 [ariaLabel]=\"getItemAriaLabel(item[propName])\"\n                                 (selectedItem)=\"selectedItem(item, area)\">\n            @if (isMultiSelect) {\n              <dds-checkbox [value]=\"item.selected\"\n                            [theme]=\"theme\"\n                            [ariaLabel]=\"item[propName]\"\n                            [isInverse]=\"isInverse\"></dds-checkbox>\n            }\n            {{item[propName]}}\n          </dds-context-menu-item>\n        }\n        @if (!last) {\n          <hr role=\"none\">\n        }\n      }\n    }\n\n  </dds-context-menu>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { ListboxComponent } from './listbox/listbox.component';\n\n@NgModule({\n  declarations: [],\n  imports: [ListboxComponent],\n  exports: [ListboxComponent],\n})\nexport class ListboxModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}