{"version":3,"file":"usitsdasdesign-dds-ng-filter.mjs","sources":["../../src/app/dds/filter/constants.ts","../../src/app/dds/filter/filter/filter.component.ts","../../src/app/dds/filter/filter/filter.component.html","../../src/app/dds/filter/filter.module.ts","../../src/app/dds/filter/usitsdasdesign-dds-ng-filter.ts"],"sourcesContent":["export const FILTER_CHECKBOX = '.dds-filter__section_checkbox';\n","import { CommonModule } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  Renderer2,\n  TemplateRef,\n  ViewChild,\n} from '@angular/core';\nimport { ButtonComponent, ButtonModule, ButtonOptions } from '@usitsdasdesign/dds-ng/button';\nimport { CheckboxComponent, CheckboxModule } from '@usitsdasdesign/dds-ng/checkbox';\nimport { DestroyCtor, DestroyMixin, I18nCtor, I18nMixin } from '@usitsdasdesign/dds-ng/core/common-behaviors';\nimport { FocusHandlerModule } from '@usitsdasdesign/dds-ng/core/focus-handler';\nimport { SearchModule } from '@usitsdasdesign/dds-ng/search';\nimport { AdditionalClass, ButtonKind, KeyCodes, SortingStates, 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 { FILTER_CHECKBOX } from '../constants';\nimport { FilterItem } from '../typings';\n\nconst FilterBase: DestroyCtor & I18nCtor = DestroyMixin(I18nMixin());\n\n@Component({\n  selector: 'dds-filter',\n  templateUrl: './filter.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  standalone: true,\n  imports: [CommonModule, CheckboxModule, ButtonModule, SearchModule, FocusHandlerModule, I18nModule],\n})\nexport class FilterComponent extends FilterBase implements OnInit, OnChanges, AfterViewInit {\n  // ViewChild decorator to access the filter element\n  @ViewChild('filter') filter: ElementRef;\n\n  // ViewChild decorator to access the wrap element\n  @ViewChild('wrap') wrap: ElementRef;\n\n  // Input property for filter items\n  @Input() items: FilterItem[] | undefined;\n\n  // Input property for theme\n  @Input() theme: Themes | string | undefined = this.ddsConfig.getConfig().theme;\n\n  // Input property for property name\n  @Input() propName: string | undefined = 'title';\n\n  // Input property for item property name value\n  @Input() itemPropNameValue: string | undefined = 'deactivated';\n\n  // Input property for inverse state\n  @Input() isInverse: boolean | undefined;\n\n  // Input property for sorted state\n  @Input() sortedState: SortingStates | string | undefined;\n\n  // Input property for sorted flag\n  @Input() isSorted: boolean | undefined;\n\n  // Input property for template reference\n  @Input() template: TemplateRef<any> | undefined;\n\n  // Input property for aria label\n  @Input() ariaLabel: string | undefined = 'Filter';\n\n  @Output() sorted = new EventEmitter<string>();\n  @Output() apply = new EventEmitter<FilterItem[]>();\n  @Output() cancel = new EventEmitter<FilterItem[]>();\n\n  public sortingStates = SortingStates;\n  public resultItems: FilterItem[];\n  public isAllFilterSelected: boolean;\n  public selectedFilterCount: number;\n  public sortingTitle: string;\n  public sortingAscendingText: string;\n  public sortingDescendingText: string;\n  public filterTitle: string;\n  public cancelBtnText: string;\n  public applyBtnText: string;\n  public allBtnLabel: string;\n  firstFocusElement: HTMLElement;\n  lastFocusElement: HTMLElement;\n\n  public cancelBtnOptions: ButtonOptions = {\n    kind: ButtonKind.secondaryLoud,\n  };\n\n  constructor(public cdr: ChangeDetectorRef, private renderer: Renderer2, private ddsConfig: DdsConfigService, public i18n: I18nService) {\n    super();\n  }\n\n  public ngOnInit(): void {\n    this.updItems();\n    this.checkSelectedFilter();\n    this.setBtnOptions();\n    super.ngOnInit();\n  }\n\n  public ngOnChanges(): void {\n    this.setBtnOptions();\n  }\n\n  public ngAfterViewInit(): void {\n    this.firstFocusElement = this.filter.nativeElement.querySelectorAll('[ddsFocus]')[0];\n    this.lastFocusElement =\n      this.filter.nativeElement.querySelectorAll('[ddsFocus]')[this.filter.nativeElement.querySelectorAll('[ddsFocus]').length - 1];\n    this.firstFocusElement.focus();\n  }\n\n  // Method to handle tab out event for focus management\n  public tabOut(el: HTMLElement | ButtonComponent | CheckboxComponent, event: KeyboardEvent): void {\n    if (document.activeElement === this.firstFocusElement && event.keyCode === KeyCodes.TAB && event.shiftKey) {\n      event.preventDefault();\n      this.focus(this.lastFocusElement);\n    }\n\n    if (document.activeElement === this.lastFocusElement && event.keyCode === KeyCodes.TAB && !event.shiftKey) {\n      event.preventDefault();\n      this.focus(this.firstFocusElement);\n    }\n  }\n\n  // Method to set button options based on the inverse property\n  private setBtnOptions(): void {\n    this.cancelBtnOptions.kind = this.isInverse ? ButtonKind.primary : ButtonKind.secondaryLoud;\n  }\n\n  // Method to focus on a specific element\n  private focus(el: HTMLElement, index?: number): void {\n    this.focusReset();\n    this.renderer.addClass(el, AdditionalClass.keyboardFocus);\n    el.focus();\n\n    if (!this.wrap) return;\n    const checkboxHeight = this.wrap.nativeElement.querySelector(FILTER_CHECKBOX).offsetHeight;\n\n    if (index !== undefined) {\n      this.wrap.nativeElement.scroll({\n        top: index * checkboxHeight,\n        behavior: 'smooth',\n      });\n    }\n  }\n\n  // Method to reset focus styles\n  private focusReset(): void {\n    const focusedBtn = this.filter.nativeElement.querySelector(`.${AdditionalClass.keyboardFocus}`);\n\n    if (focusedBtn) {\n      this.renderer.removeClass(focusedBtn, AdditionalClass.keyboardFocus);\n    }\n  }\n\n  // Method to check if the current sorting state is active\n  public checkActiveSorted(state: SortingStates): boolean {\n    return this.isSorted && this.sortedState === state;\n  }\n\n  // Method to change the sorting state\n  public changeSorting(state: SortingStates): void {\n    this.sortedState = state;\n    this.sorted.emit(state);\n  }\n\n  // Method to apply the filter\n  public filterApply(): void {\n    this.resultItems.forEach((resultItem, index) => {\n      this.items[index][this.itemPropNameValue] = resultItem[this.itemPropNameValue];\n    });\n    this.apply.emit(this.items);\n  }\n\n  // Method to cancel the filter\n  public filterCancel(): void {\n    this.cancel.emit(this.items);\n  }\n\n  // Method to search within the filter items\n  public filterSearch(searchValue: string): void {\n    const regexp = new RegExp(searchValue, 'gi');\n\n    this.resultItems.forEach((item) => {\n      item.hidden = item[this.propName].search(regexp) < 0;\n    });\n  }\n\n  // Method to select a specific filter item\n  public selectFilterItem(status: boolean, filterItem: FilterItem): void {\n    filterItem[this.itemPropNameValue] = !status;\n    this.checkSelectedFilter();\n  }\n\n  // Method to select or deselect all filter items\n  public selectAllFilter(status: boolean): void {\n    this.resultItems.forEach((item) => (item[this.itemPropNameValue] = !status));\n    this.checkSelectedFilter();\n  }\n\n  // Method to update the filter items\n  public updItems() {\n    this.resultItems = JSON.parse(JSON.stringify(this.items));\n    this.checkSelectedFilter();\n  }\n\n  // Method to check the selected filter items\n  private checkSelectedFilter(): void {\n    this.selectedFilterCount = this.resultItems.filter((item) => !item[this.itemPropNameValue]).length;\n    this.isAllFilterSelected = this.items.length === this.selectedFilterCount;\n  }\n\n  // Method to set internationalization texts\n  protected setI18nTexts(translation: ITranslation): void {\n    this.sortingTitle = translation.FILTER.SORTING_TITLE;\n    this.sortingAscendingText = translation.FILTER.SORTING_ASCENDING_TEXT;\n    this.sortingDescendingText = translation.FILTER.SORTING_DESCENDING_TEXT;\n    this.filterTitle = translation.FILTER.FILTER_TITLE;\n    this.cancelBtnText = translation.FILTER.CANCEL_BTN_TEXT;\n    this.applyBtnText = translation.FILTER.APPLY_BTN_TEXT;\n    this.allBtnLabel = translation.FILTER.CHECKBOX_LABEL;\n    this.cdr.detectChanges();\n  }\n}\n","<div class=\"dds-filter\"\n     role=\"dialog\"\n     aria-modal=\"true\"\n     [attr.aria-label]=\"ariaLabel\"\n     [ngClass]=\"{'dds-filter_inverse': isInverse}\"\n     #filter>\n  <ng-container *ngTemplateOutlet=\"template || defaultTemplate; context: {ctx: this}\"></ng-container>\n  <ng-template #defaultTemplate>\n    <span class=\"dds-filter__title dds-filter__section\">{{sortingTitle}}</span>\n    <div class=\"dds-filter__container dds-filter__container_sorting\">\n      <button [ddsFocusCheck]=\"true\"\n              class=\"dds-filter__item dds-filter__section dds-filter__section_sorting\"\n              [ngClass]=\"{\n                'dds-filter__item_active': checkActiveSorted(sortingStates.ascending)\n              }\"\n              [attr.aria-pressed]=\"checkActiveSorted(sortingStates.ascending)\"\n              ddsFocus\n              (click)=\"changeSorting(sortingStates.ascending)\"\n              (keydown)=\"tabOut(firstBtn, $event)\"\n              #firstBtn>\n        <span class=\"dds-filter__icon dds-icon dds-icon_sort-up\"></span>\n        <span class=\"dds-filter__text\">{{sortingAscendingText}}</span>\n      </button>\n      <button [ddsFocusCheck]=\"true\"\n              class=\"dds-filter__item dds-filter__section dds-filter__section_sorting\"\n              [ngClass]=\"{\n                'dds-filter__item_active': checkActiveSorted(sortingStates.descending)\n              }\"\n              [attr.aria-pressed]=\"checkActiveSorted(sortingStates.descending)\"\n              ddsFocus\n              (click)=\"changeSorting(sortingStates.descending)\">\n        <span class=\"dds-filter__icon dds-icon dds-icon_sort-down\"></span>\n        <span class=\"dds-filter__text\">{{sortingDescendingText}}</span>\n      </button>\n    </div>\n\n    <span class=\"dds-filter__title dds-filter__section\">{{filterTitle}}</span>\n\n    <dds-search class=\"dds-filter__search dds-filter__section\"\n                [isInverse]=\"isInverse\"\n                [ariaLabel]=\"filterTitle\"\n                (valueChanged)=\"filterSearch($event)\"></dds-search>\n\n    <div class=\"dds-filter__container dds-filter__container_checkbox\"\n         #wrap>\n      <dds-checkbox class=\"dds-filter__section dds-filter__section_checkbox\"\n                    [label]=\"allBtnLabel\"\n                    [isIndeterminate]=\"selectedFilterCount && !isAllFilterSelected\"\n                    [value]=\"isAllFilterSelected\"\n                    [theme]=\"theme\"\n                    [isInverse]=\"isInverse\"\n                    (keydown)=\"tabOut(checkbox, $event);\"\n                    (stateChanged)=\"selectAllFilter($event)\"\n                    #checkbox></dds-checkbox>\n      @for (filterItem of resultItems; track filterItem; let index = $index) {\n        <dds-checkbox class=\"dds-filter__section dds-filter__section_checkbox\"\n                      [ngClass]=\"{\n                    'dds-filter__section_hidden': filterItem.hidden\n                  }\"\n                      [value]=\"!filterItem[itemPropNameValue]\"\n                      [label]=\"filterItem[propName]\"\n                      [theme]=\"theme\"\n                      [isInverse]=\"isInverse\"\n                      (keydown)=\"tabOut(checkbox, $event);\"\n                      (stateChanged)=\"selectFilterItem($event, filterItem)\"\n                      #checkbox></dds-checkbox>\n      }\n    </div>\n\n    <div class=\"dds-filter__footer dds-filter__section\">\n      <dds-button width=\"fixed\"\n                  [isInverse]=\"isInverse\"\n                  [kind]=\"cancelBtnOptions.kind\"\n                  [theme]=\"theme\"\n                  class=\"dds-filter__btn dds-filter__item\"\n                  (clicked)=\"filterCancel()\">{{cancelBtnText}}</dds-button>\n      <dds-button width=\"fixed\"\n                  [isInverse]=\"isInverse\"\n                  [theme]=\"theme\"\n                  class=\"dds-filter__btn dds-filter__item\"\n                  (clicked)=\"filterApply()\"\n                  (keydown)=\"tabOut(lastBtn, $event)\"\n                  #lastBtn>{{applyBtnText}}</dds-button>\n    </div>\n  </ng-template>\n</div>\n","import { NgModule } from '@angular/core';\nimport { FilterComponent } from './filter/filter.component';\n\n@NgModule({\n  declarations: [],\n  imports: [FilterComponent],\n  exports: [FilterComponent],\n})\nexport class FilterModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}