UNPKG

@tapsellorg/angular-material-library

Version:

Angular library for Tapsell

1 lines 67.8 kB
{"version":3,"file":"tapsellorg-angular-material-library-src-lib-filter-chips.mjs","sources":["../../projects/pegah-library/src/lib/filter-chips/filter-chips.directive.ts","../../projects/pegah-library/src/lib/filter-chips/filter-chip-items-connector.ts","../../projects/pegah-library/src/lib/filter-chips/filter-chip-auto-complete/filter-chip-auto-complete.component.ts","../../projects/pegah-library/src/lib/filter-chips/filter-chip-auto-complete/filter-chip-auto-complete.component.html","../../projects/pegah-library/src/lib/filter-chips/models.ts","../../projects/pegah-library/src/lib/filter-chips/filter-chips-persist.service.ts","../../projects/pegah-library/src/lib/filter-chips/filter-chip-item/filter-chip-item.component.ts","../../projects/pegah-library/src/lib/filter-chips/filter-chip-item/filter-chip-item.component.html","../../projects/pegah-library/src/lib/filter-chips/filter-chips.component.ts","../../projects/pegah-library/src/lib/filter-chips/filter-chips.component.html","../../projects/pegah-library/src/lib/filter-chips/filter-chips.module.ts","../../projects/pegah-library/src/lib/filter-chips/filter-chip-auto-complete/filter-chip-auto-complete.module.ts","../../projects/pegah-library/src/lib/filter-chips/filter-chip-input/filter-chip-input.component.ts","../../projects/pegah-library/src/lib/filter-chips/filter-chip-input/filter-chip-input.component.html","../../projects/pegah-library/src/lib/filter-chips/filter-chip-input/filter-chip-input.module.ts","../../projects/pegah-library/src/lib/filter-chips/filter-chip-select/filter-chip-select.component.ts","../../projects/pegah-library/src/lib/filter-chips/filter-chip-select/filter-chip-select.component.html","../../projects/pegah-library/src/lib/filter-chips/filter-chip-select/filter-chip-select.module.ts","../../projects/pegah-library/src/lib/filter-chips/filter-chip-multi-select/model.ts","../../projects/pegah-library/src/lib/filter-chips/filter-chip-multi-select/filter-chip-multi-select.component.ts","../../projects/pegah-library/src/lib/filter-chips/filter-chip-multi-select/filter-chip-multi-select.component.html","../../projects/pegah-library/src/lib/filter-chips/filter-chip-multi-select/filter-chip-multi-select.module.ts","../../projects/pegah-library/src/lib/filter-chips/tapsellorg-angular-material-library-src-lib-filter-chips.ts"],"sourcesContent":["import { Directive, input, TemplateRef } from '@angular/core';\nimport { PghFilterChipConfig, PghFilterChipInitValue } from './models';\n\n@Directive({\n selector: '[pghFilterField]',\n exportAs: 'pghFilterField',\n standalone: false,\n})\nexport class PghFilterChipsMarkerDirective {\n filterField = input.required<PghFilterChipConfig>({\n alias: 'pghFilterField',\n });\n\n initValue = input<PghFilterChipInitValue | PghFilterChipInitValue[] | null | undefined>(\n undefined,\n {\n alias: 'pghFilterFieldInitValue',\n },\n );\n\n constructor(public template: TemplateRef<any>) {}\n}\n","import { InjectionToken } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { PghFilterChipItemsConnectorOptions } from './models';\n\nexport const PghFilterChipItemsConnector = new InjectionToken<PghFilterChipItemsConnectorOptions>(\n 'This observable allows filter chip items to connect themselves to their parent filter chips container',\n { factory: () => ({ directiveConnector$: new Subject() }) },\n);\n\nexport function filterMarkerConnectorFactory() {\n return { directiveConnector$: new Subject() } as PghFilterChipItemsConnectorOptions;\n}\n\nexport const PghFilterChipItemsConnectorProvider = {\n provide: PghFilterChipItemsConnector,\n useFactory: filterMarkerConnectorFactory,\n};\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n Inject,\n input,\n OnChanges,\n signal,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n PghFilterChipConfig,\n PghFilterChipInitValue,\n PghFilterChipItemsConnectorOptions,\n} from '../models';\nimport { map, startWith } from 'rxjs/operators';\nimport { UntypedFormControl } from '@angular/forms';\nimport { PghFilterChipsMarkerDirective } from '../filter-chips.directive';\nimport { PghFilterChipItemsConnector } from '../filter-chip-items-connector';\n\n@Component({\n selector: 'pgh-filter-chip-auto-complete',\n templateUrl: './filter-chip-auto-complete.component.html',\n styleUrls: ['./filter-chip-auto-complete.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class PghFilterChipAutoCompleteComponent implements OnChanges, AfterViewInit {\n filter = input.required<PghFilterChipConfig>();\n initialValue = input<PghFilterChipInitValue | null>();\n options = input<{ value: any; name: string; searchList?: string[] }[]>([]);\n isLoadingOptions = input<boolean>(false);\n @ContentChild(TemplateRef) templateRef?: TemplateRef<any>;\n\n filteredOptions = signal<any>([]);\n\n @ViewChild(PghFilterChipsMarkerDirective) filterMarker?: PghFilterChipsMarkerDirective;\n\n constructor(\n @Inject(PghFilterChipItemsConnector)\n private filterChipsMarkerConnector: PghFilterChipItemsConnectorOptions,\n ) {}\n\n ngAfterViewInit() {\n if (this.filterMarker) {\n this.filterChipsMarkerConnector.directiveConnector$.next(this.filterMarker);\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n this.filter().filterControl = this.filter().filterControl ?? new UntypedFormControl();\n if (changes.filter) {\n this.filteredOptions.set(\n this.filter().filterControl!.valueChanges.pipe(\n startWith(''),\n map(value => this._filter(value)),\n ),\n );\n }\n\n if (changes.options) {\n const filterControlValue = this.filter().filterControl!.value;\n this.filteredOptions.set(this._filter(filterControlValue));\n }\n }\n\n private _filter(value: string) {\n return this.options()?.filter(option => {\n if (option?.searchList) {\n return option.searchList.some(item => item.includes(value)) || option.name.includes(value);\n }\n return option?.name?.includes(value);\n });\n }\n}\n","<form\n *pghFilterField=\"\n filter();\n initValue: initialValue();\n let closeOverlay = closeOverlay;\n let setValue = setValue\n \"\n (ngSubmit)=\"closeOverlay()\"\n>\n <mat-form-field class=\"pgh-mat-form-field-no-space-bottom\">\n <mat-label>{{ filter().name }}</mat-label>\n <input\n matInput\n type=\"search\"\n [formControl]=\"$any(filter().filterControl)\"\n [matAutocomplete]=\"auto\"\n />\n <mat-autocomplete #auto=\"matAutocomplete\">\n @if (isLoadingOptions()) {\n <mat-option>در حال جست‌و‌جو...</mat-option>\n } @for (item of filteredOptions(); track item) {\n <mat-option\n [value]=\"item.value\"\n (click)=\"closeOverlay(); setValue(item.value, { displayedName: item.name })\"\n >\n @if (templateRef) {\n <ng-template\n [ngTemplateOutlet]=\"templateRef\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"\n ></ng-template>\n } @else {\n <span>{{ item.name }}</span>\n }\n </mat-option>\n }\n </mat-autocomplete>\n </mat-form-field>\n</form>\n","import { ReplaySubject, Subject } from 'rxjs';\nimport { AbstractControl } from '@angular/forms';\nimport { PghFilterChipsMarkerDirective } from './filter-chips.directive';\nimport { distinctUntilChanged } from 'rxjs/operators';\nimport { TemplateRef } from '@angular/core';\n\nexport interface PghFilterChipItemsConnectorOptions {\n directiveConnector$: Subject<PghFilterChipsMarkerDirective>;\n}\n\nexport class PghFilterChipsItem<T extends any = any> {\n private _value$ = new ReplaySubject<T | T[] | undefined>(1);\n readonly filterControl?: AbstractControl | null;\n\n value?: T | T[];\n updateOn: PghFilterFieldUpdateOn;\n valueDisplayedName?: string;\n private _isActive: boolean = false;\n private _isOverlayOpen = false;\n get isActive(): boolean {\n return this._isActive;\n }\n\n set isActive(value: boolean) {\n if (value === this._isActive) return;\n if (!value && this.config.alwaysActive) return;\n\n this._isActive = value;\n if (!value) {\n this.isOverlayOpen = false;\n }\n }\n get isOverlayOpen(): boolean {\n return this._isOverlayOpen;\n }\n\n set isOverlayOpen(value: boolean) {\n if (value === this._isOverlayOpen) return;\n this._isOverlayOpen = value;\n if (value) {\n this.isActive = true;\n }\n }\n\n /**\n * Used for submit\n * When a new value is emitted to this observable, The filters are submitted\n */\n value$ = this._value$.pipe(distinctUntilChanged());\n\n constructor(\n public markerDirective: PghFilterChipsMarkerDirective,\n public config: PghFilterChipConfig,\n initValue?: PghFilterChipInitValue<T> | PghFilterChipInitValue<T>[] | null,\n ) {\n this.markerDirective = markerDirective;\n this.filterControl = config.filterControl;\n this.updateOn = config.updateOn ?? 'closeOverlay';\n this.config.debounceValueChangeDelay = this.config.debounceValueChangeDelay ?? 500;\n this.isActive = !!config.alwaysActive;\n\n if (Array.isArray(initValue)) {\n if (initValue.length > 0) {\n this.setMultipleValue(initValue);\n }\n } else {\n if (initValue?.value) {\n this.setSingleValue(initValue);\n }\n }\n\n this.initFilterControlSetups();\n }\n\n private setSingleValue(initValue: PghFilterChipInitValue<T>) {\n setTimeout(() => {\n if (this.filterControl) {\n this.filterControl.setValue(initValue.value);\n } else {\n this.valueSetter(initValue.value, { displayedName: initValue.name });\n }\n this.isActive = true;\n });\n }\n\n private setMultipleValue(initValue: PghFilterChipInitValue<T>[]) {\n setTimeout(() => {\n if (this.filterControl) {\n this.filterControl.setValue(initValue.map(val => val.value));\n } else {\n this.valueSetter(\n initValue.map(val => val.value),\n { displayedName: initValue.map(val => val.name).join(',') },\n );\n }\n this.isActive = true;\n });\n }\n\n valueSetter = (\n value: T | T[],\n { closeOverlay, displayedName }: PghFilterChipValueSetterConfig = {},\n ) => {\n this.value = value === '' ? undefined : value;\n this.valueDisplayedName = displayedName;\n if (this.filterControl) {\n this.filterControl.setValue(value);\n }\n\n this.emitUpdatedValue();\n if (closeOverlay === true || this.updateOn === 'closeOverlay') {\n this.closeOverlay();\n }\n };\n\n closeOverlay = () => {\n setTimeout(() => {\n this.isOverlayOpen = false;\n if (this.updateOn === 'closeOverlay') {\n this.emitUpdatedValue();\n }\n });\n };\n\n private initFilterControlSetups() {\n if (!this.filterControl) return;\n\n this.filterControl.valueChanges.subscribe(value => {\n this.value = value;\n if (this.updateOn === 'valueChange') {\n this.emitUpdatedValue();\n }\n });\n }\n\n private emitUpdatedValue() {\n this._value$.next(this.value);\n }\n\n onDestroy() {\n this._value$.complete();\n }\n\n clear() {\n this.isActive = false;\n this.isOverlayOpen = false;\n }\n\n openOverlay() {\n this.isActive = true;\n this.isOverlayOpen = true;\n }\n}\n\nexport interface PghFilterChipConfig {\n field: string;\n name: string;\n filterControl?: AbstractControl | null;\n panelClass?: string | null;\n updateOn?: PghFilterFieldUpdateOn | null;\n debounceValueChangeDelay?: number | null;\n chipTemplate?: TemplateRef<any> | null;\n alwaysActive?: boolean | null;\n placeholder?: string | null;\n noClearButton?: boolean | null;\n}\nexport type PghFilterFieldUpdateOn = 'valueChange' | 'closeOverlay';\n\nexport interface PghFilterChipValueSetterConfig {\n closeOverlay?: boolean;\n displayedName?: string;\n}\n\nexport interface PghFilterChipInitValue<T = any> {\n value: T;\n name?: string;\n}\n\nexport type PghFilterChipsSearchEvent = Record<string, any>;\n","import { Injectable } from '@angular/core';\nimport { PghFilterChipsSearchEvent } from './models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PghFilterChipsPersistService {\n constructor() {}\n\n persist(persistId: string, filterValues: PghFilterChipsSearchEvent) {\n localStorage.setItem(this.getKey(persistId), JSON.stringify(filterValues));\n }\n\n private getKey(persistId: string) {\n return `pghFilter_${persistId}`;\n }\n\n getPersistData(persistId: string) {\n const data = localStorage.getItem(this.getKey(persistId));\n if (!data) return;\n\n try {\n return JSON.parse(data) as PghFilterChipsSearchEvent;\n } catch (e) {\n return;\n }\n }\n}\n","import {\n Component,\n model,\n OnChanges,\n output,\n signal,\n SimpleChanges,\n ViewEncapsulation,\n} from '@angular/core';\nimport { PghFilterChipsItem } from '../models';\nimport { withDestroy } from '@tapsellorg/angular-material-library/src/lib/common';\n\n@Component({\n selector: 'pgh-filter-chip-item',\n templateUrl: './filter-chip-item.component.html',\n styleUrls: ['./filter-chip-item.component.scss'],\n encapsulation: ViewEncapsulation.None,\n standalone: false,\n})\nexport class PghFilterChipItemComponent extends withDestroy() implements OnChanges {\n filterItem = model.required<PghFilterChipsItem>();\n remove = output();\n panelClasses = signal<string[]>([]);\n\n constructor() {\n super();\n }\n\n openOverlay() {\n this.filterItem().isOverlayOpen = true;\n }\n\n onRemoveClick() {\n this.filterItem().valueSetter(undefined);\n\n if (!this.filterItem().config.alwaysActive) {\n this.filterItem().clear();\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.filterItem) {\n this.handleFilterItemChanges();\n }\n }\n\n onClickOutside() {\n this.filterItem().closeOverlay();\n }\n\n private handleFilterItemChanges() {\n this.panelClasses.set([\n 'pgh-filter-chip-overlay',\n ...(this.filterItem().config.panelClass || '').split(' '),\n ]);\n }\n\n hasValue() {\n return (\n this.filterItem().valueDisplayedName != null ||\n (this.filterItem().value != null && this.filterItem().value !== '')\n );\n }\n}\n","<div\n class=\"pgh-filter-chip-item\"\n matRipple\n cdkOverlayOrigin\n #chipOverlayOrigin=\"cdkOverlayOrigin\"\n (click)=\"openOverlay()\"\n>\n <div class=\"d-flex align-items-center\">\n @if (!filterItem().config.chipTemplate) {\n <div class=\"pgh-filter-chip-preview\">\n <span class=\"pgh-filter-chip-name\">{{ filterItem().config.name }}</span>\n <span>:</span>\n @if (hasValue()) {\n <span class=\"pgh-filter-chip-value\">\n {{ filterItem().valueDisplayedName || filterItem().value }}\n </span>\n } @if (filterItem().config.alwaysActive && !hasValue()) {\n <span class=\"pgh-filter-chip-placeholder\">- هیچی -</span>\n }\n </div>\n } @if (filterItem().config.chipTemplate) {\n <ng-container\n *ngTemplateOutlet=\"filterItem().config.chipTemplate!; context: { value: filterItem().value }\"\n ></ng-container>\n } @if ( filterItem().config.noClearButton !== true && !(filterItem().config.alwaysActive &&\n !hasValue()) ) {\n <div\n class=\"pgh-filter-remove text-danger\"\n (click)=\"onRemoveClick(); $event.stopPropagation()\"\n matRipple\n >\n <mat-icon svgIcon=\"clear\" class=\"square-16\"></mat-icon>\n </div>\n }\n </div>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"chipOverlayOrigin\"\n [cdkConnectedOverlayOpen]=\"filterItem().isOverlayOpen\"\n [cdkConnectedOverlayPanelClass]=\"panelClasses()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayBackdropClass]=\"'cdk-overlay-transparent-backdrop'\"\n (backdropClick)=\"onClickOutside()\"\n>\n <ng-container\n *ngTemplateOutlet=\"\n filterItem().markerDirective.template;\n context: {\n name: filterItem().config.name,\n field: filterItem().config.field,\n value: filterItem().value,\n setValue: filterItem().valueSetter,\n closeOverlay: filterItem().closeOverlay\n }\n \"\n ></ng-container>\n</ng-template>\n","import {\n AfterContentInit,\n Component,\n ContentChildren,\n Inject,\n input,\n OnDestroy,\n output,\n QueryList,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { PghFilterChipsMarkerDirective } from './filter-chips.directive';\nimport {\n PghFilterChipItemsConnectorOptions,\n PghFilterChipsItem,\n PghFilterChipsSearchEvent,\n} from './models';\nimport { ObjectUtils, withDestroy } from '@tapsellorg/angular-material-library/src/lib/common';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { PghFilterChipsPersistService } from './filter-chips-persist.service';\nimport { merge } from 'rxjs';\nimport {\n PghFilterChipItemsConnector,\n PghFilterChipItemsConnectorProvider,\n} from './filter-chip-items-connector';\n\n@Component({\n selector: 'pgh-filter-chips',\n templateUrl: './filter-chips.component.html',\n styleUrls: ['./filter-chips.component.scss'],\n encapsulation: ViewEncapsulation.None,\n providers: [PghFilterChipItemsConnectorProvider],\n standalone: false,\n})\nexport class PghFilterChipsComponent extends withDestroy() implements AfterContentInit, OnDestroy {\n @ContentChildren(PghFilterChipsMarkerDirective)\n filterMarkers?: QueryList<PghFilterChipsMarkerDirective>;\n private connectedFilterMarkersViaConnectorProvider: PghFilterChipsMarkerDirective[] = [];\n showSearchButton = input<boolean>(false);\n persistId = input<string | null>(null);\n search = output<PghFilterChipsSearchEvent>();\n filterItems = signal<PghFilterChipsItem[]>([]);\n\n get allFilterMarkers() {\n return [...(this.filterMarkers ?? []), ...this.connectedFilterMarkersViaConnectorProvider];\n }\n\n constructor(\n private filterChipsPersistService: PghFilterChipsPersistService,\n @Inject(PghFilterChipItemsConnector)\n filterChipsMarkerConnector: PghFilterChipItemsConnectorOptions,\n ) {\n super();\n filterChipsMarkerConnector.directiveConnector$\n .pipe(takeUntil(this._destroyed$))\n .subscribe(data => {\n this.connectedFilterMarkersViaConnectorProvider.push(data);\n setTimeout(() => {\n this.handleFilterMarkersChange();\n });\n });\n }\n\n private getPersistedData() {\n return this.filterChipsPersistService.getPersistData(this.getPersistId());\n }\n\n ngAfterContentInit() {\n if (!this.filterMarkers?.length) return;\n this.handleFilterMarkersChange();\n\n this.filterMarkers.changes.subscribe(() => {\n this.handleFilterMarkersChange();\n });\n }\n\n get hasNoInactiveFilter() {\n return this.filterItems().every(f => f.isActive);\n }\n\n private handleFilterMarkersChange() {\n const persistedData = this.getPersistedData() ?? {};\n\n this.filterItems.set(\n this.allFilterMarkers.map(\n directive =>\n new PghFilterChipsItem(\n directive,\n { ...directive.filterField() },\n persistedData[directive.filterField().field] ?? directive.initValue(),\n ),\n ),\n );\n\n this.setupFilterValueChangesListener();\n }\n\n private setupFilterValueChangesListener() {\n if (this.showSearchButton()) {\n setTimeout(() => {\n this.emitFilterValues(); // Emit initial values event if SearchButton is displayed\n });\n return;\n }\n\n merge(...this.filterItems().map(f => f.value$))\n .pipe(takeUntil(this._destroyed$), debounceTime(5))\n .subscribe(() => {\n this.emitFilterValues();\n });\n }\n\n onSelectFilterItem(filterItem: PghFilterChipsItem) {\n if (filterItem.isActive) return;\n\n filterItem.openOverlay();\n }\n\n private emitFilterValues() {\n let filterValues = this.filterItems().reduce(\n (res, f) => ({ ...res, [f.config.field]: f.value }),\n {},\n );\n filterValues = ObjectUtils.removeNullKeysFromObject(filterValues);\n this.search.emit(filterValues);\n\n this.persistData();\n }\n\n private persistData() {\n let filterValueNames = this.filterItems().reduce(\n (res, f) => ({\n ...res,\n [f.config.field]: f.value ? { value: f.value, name: f.valueDisplayedName } : undefined,\n }),\n {},\n );\n filterValueNames = ObjectUtils.removeNullKeysFromObject(filterValueNames);\n\n this.filterChipsPersistService.persist(this.getPersistId(), filterValueNames);\n }\n\n onClickSearch() {\n this.emitFilterValues();\n }\n\n ngOnDestroy() {\n this.filterItems().forEach(f => f.onDestroy());\n }\n\n private getPersistId() {\n const persistId = this.persistId();\n if (persistId) return persistId;\n if (!this.allFilterMarkers?.length) {\n throw new Error('pgh-filter-chips must have at least one *pghFilterField');\n }\n\n return this.allFilterMarkers.map(directive => directive.filterField().field).join('-');\n }\n}\n","<div class=\"pgh-filter-chips\">\n <div\n class=\"pgh-filter-chips-icon\"\n (click)=\"!hasNoInactiveFilter && addFilterMenuTrigger?.openMenu()\"\n >\n <mat-icon svgIcon=\"filter_list\"></mat-icon>\n </div>\n\n <div class=\"pgh-filter-chips-list pgh-emulated-flex-gap\" style=\"--gap: 4px\">\n @for (f of filterItems(); track f) { @if (f.isActive) {\n <pgh-filter-chip-item [filterItem]=\"f\"></pgh-filter-chip-item>\n } }\n\n <div [hidden]=\"hasNoInactiveFilter\">\n <button\n mat-button\n color=\"primary\"\n [matMenuTriggerFor]=\"addFilterMenuRef\"\n #addFilterMenuTrigger=\"matMenuTrigger\"\n >\n <mat-icon svgIcon=\"add\" class=\"square-16 me-1\"></mat-icon>\n <span>{{ 'FILTER_CHIPS_NEW_FILTER_BUTTON' | translate }}</span>\n </button>\n <mat-menu #addFilterMenuRef=\"matMenu\" [overlapTrigger]=\"true\">\n @for (f of filterItems(); track f) { @if (!f.isActive) {\n <button mat-menu-item (click)=\"onSelectFilterItem(f)\">\n {{ f.config.name }}\n </button>\n } }\n </mat-menu>\n </div>\n\n @if (showSearchButton()) {\n <div class=\"pgh-filter-chips-submit\">\n <button mat-flat-button color=\"primary\" (click)=\"onClickSearch()\">\n <mat-icon svgIcon=\"search\" class=\"square-16\"></mat-icon>\n <span class=\"ms-1\">{{ 'FILTER_CHIPS_SEARCH_BUTTON' | translate }}</span>\n </button>\n </div>\n }\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatRippleModule } from '@angular/material/core';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { PghFilterChipsComponent } from './filter-chips.component';\nimport { PghFilterChipItemComponent } from './filter-chip-item/filter-chip-item.component';\nimport { PghFilterChipsMarkerDirective } from './filter-chips.directive';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslateModule } from '@tapsellorg/angular-material-library/src/lib/translate';\n\n@NgModule({\n declarations: [\n PghFilterChipsComponent,\n PghFilterChipItemComponent,\n PghFilterChipsMarkerDirective,\n ],\n imports: [\n CommonModule,\n MatMenuModule,\n MatButtonModule,\n MatRippleModule,\n OverlayModule,\n MatIconModule,\n TranslateModule,\n ],\n exports: [PghFilterChipsComponent, PghFilterChipItemComponent, PghFilterChipsMarkerDirective],\n})\nexport class PghFilterChipsModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PghFilterChipAutoCompleteComponent } from './filter-chip-auto-complete.component';\nimport { PghFilterChipsModule } from '../filter-chips.module';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\n\n@NgModule({\n declarations: [PghFilterChipAutoCompleteComponent],\n imports: [\n CommonModule,\n PghFilterChipsModule,\n MatFormFieldModule,\n MatInputModule,\n ReactiveFormsModule,\n MatAutocompleteModule,\n FormsModule,\n ],\n exports: [PghFilterChipAutoCompleteComponent],\n})\nexport class PghFilterChipAutoCompleteModule {}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n Inject,\n input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport { PghFilterChipConfig, PghFilterChipItemsConnectorOptions } from '../models';\nimport { UntypedFormControl } from '@angular/forms';\nimport { PghFilterChipItemsConnector } from '../filter-chip-items-connector';\nimport { PghFilterChipsMarkerDirective } from '../filter-chips.directive';\n\n@Component({\n selector: 'pgh-filter-chip-input',\n templateUrl: './filter-chip-input.component.html',\n styleUrls: ['./filter-chip-input.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class PghFilterChipInputComponent implements OnInit, OnChanges, AfterViewInit {\n filter = input.required<PghFilterChipConfig>();\n initialValue = input<string | null>();\n @ViewChild(PghFilterChipsMarkerDirective) filterMarker?: PghFilterChipsMarkerDirective;\n inputFormControl = new UntypedFormControl();\n\n get isLive(): boolean {\n return this.filter().updateOn !== 'valueChange';\n }\n\n constructor(\n @Inject(PghFilterChipItemsConnector)\n private filterChipsMarkerConnector: PghFilterChipItemsConnectorOptions,\n ) {}\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.filter && this.filter()) {\n this.filter().filterControl = this.filter().filterControl ?? new UntypedFormControl();\n }\n }\n\n ngAfterViewInit() {\n if (this.filterMarker) {\n this.filterChipsMarkerConnector.directiveConnector$.next(this.filterMarker);\n }\n }\n ngOnInit() {\n this.handleInputControlChanges();\n }\n handleInputControlChanges() {\n if (!this.isLive) return;\n this.inputFormControl.valueChanges.subscribe(change => {\n this.filter().filterControl?.setValue(change);\n });\n }\n onSubmit() {\n if (this.isLive) return;\n this.filter().filterControl?.setValue(this.inputFormControl.value.trim());\n }\n}\n","<form\n *pghFilterField=\"filter(); initValue: { value: initialValue() }; let closeOverlay = closeOverlay\"\n [class.d-flex]=\"!isLive\"\n (ngSubmit)=\"closeOverlay(); onSubmit()\"\n>\n <mat-form-field class=\"pgh-mat-form-field-no-space-bottom\">\n <mat-label>{{ filter().name }}</mat-label>\n <input matInput type=\"search\" [formControl]=\"inputFormControl\" />\n </mat-form-field>\n @if (!isLive) {\n <button mat-flat-button color=\"primary\" type=\"submit\" class=\"pgh-same-height-mat-form-field ms-2\">\n ثبت\n </button>\n }\n</form>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PghFilterChipInputComponent } from './filter-chip-input.component';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { PghFilterChipsModule } from '../filter-chips.module';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\n\n@NgModule({\n declarations: [PghFilterChipInputComponent],\n imports: [\n CommonModule,\n MatFormFieldModule,\n PghFilterChipsModule,\n FormsModule,\n MatButtonModule,\n MatInputModule,\n ReactiveFormsModule,\n ],\n exports: [PghFilterChipInputComponent],\n})\nexport class PghFilterChipInputModule {}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n Inject,\n input,\n OnChanges,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n PghFilterChipConfig,\n PghFilterChipInitValue,\n PghFilterChipItemsConnectorOptions,\n} from '../models';\nimport { PghFilterChipItemsConnector } from '../filter-chip-items-connector';\nimport { PghFilterChipsMarkerDirective } from '../filter-chips.directive';\n\n@Component({\n selector: 'pgh-filter-chip-select',\n templateUrl: './filter-chip-select.component.html',\n styleUrls: ['./filter-chip-select.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class PghFilterChipSelectComponent implements OnChanges, AfterViewInit {\n filter = input.required<PghFilterChipConfig>();\n options = input<{ value: any; name: string }[]>([]);\n initialValue = input<PghFilterChipInitValue | null>();\n @ViewChild(PghFilterChipsMarkerDirective) filterMarker?: PghFilterChipsMarkerDirective;\n\n constructor(\n @Inject(PghFilterChipItemsConnector)\n private filterChipsMarkerConnector: PghFilterChipItemsConnectorOptions,\n ) {}\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.filter) {\n this.filter().panelClass = `p-0 ${this.filter().panelClass ?? ''}`;\n }\n }\n\n ngAfterViewInit() {\n if (this.filterMarker) {\n this.filterChipsMarkerConnector.directiveConnector$.next(this.filterMarker);\n }\n }\n}\n","<div\n *pghFilterField=\"filter(); initValue: initialValue(); let setValue = setValue\"\n style=\"max-height: 300px; overflow: auto\"\n>\n @for (item of options(); track item) {\n <div role=\"menuitem\" mat-menu-item (click)=\"setValue(item.value, { displayedName: item.name })\">\n {{ item.name }}\n </div>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PghFilterChipSelectComponent } from './filter-chip-select.component';\nimport { PghFilterChipsModule } from '../filter-chips.module';\nimport { MatMenuModule } from '@angular/material/menu';\n\n@NgModule({\n declarations: [PghFilterChipSelectComponent],\n imports: [CommonModule, PghFilterChipsModule, MatMenuModule],\n exports: [PghFilterChipSelectComponent],\n})\nexport class PghFilterChipSelectModule {}\n","export interface PghFilterChipsMultiSelectOption {\n value: any;\n name: string;\n}\n\nexport const PghFilterChipsMultiSelectAllOptionItem: PghFilterChipsMultiSelectOption = {\n value: 'All',\n name: 'FILTER_CHIPS_SELECT_ALL_OPTIONS',\n};\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n Inject,\n input,\n OnChanges,\n signal,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewEncapsulation,\n} from '@angular/core';\nimport {\n PghFilterChipConfig,\n PghFilterChipInitValue,\n PghFilterChipItemsConnectorOptions,\n} from '../models';\nimport { PghFilterChipsMarkerDirective } from '../filter-chips.directive';\nimport { PghFilterChipItemsConnector } from '../filter-chip-items-connector';\nimport { PghFilterChipsMultiSelectAllOptionItem, PghFilterChipsMultiSelectOption } from './model';\n\n@Component({\n selector: 'pgh-filter-chip-multi-select',\n templateUrl: './filter-chip-multi-select.component.html',\n styleUrls: ['./filter-chip-multi-select.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class PghFilterChipMultiSelectComponent implements OnChanges, AfterViewInit {\n filter = input.required<PghFilterChipConfig>();\n initialValue = input<PghFilterChipInitValue[] | null>();\n options = input<PghFilterChipsMultiSelectOption[]>([]);\n\n @ViewChild('multiSelectChipTemplate') multiSelectChipTemplate?: TemplateRef<any>;\n\n @ViewChild(PghFilterChipsMarkerDirective) filterMarker?: PghFilterChipsMarkerDirective;\n\n valueForAll = signal(PghFilterChipsMultiSelectAllOptionItem);\n\n constructor(\n @Inject(PghFilterChipItemsConnector)\n private filterChipsMarkerConnector: PghFilterChipItemsConnectorOptions,\n ) {}\n\n ngAfterViewInit() {\n if (this.filterMarker) {\n this.filterChipsMarkerConnector.directiveConnector$.next(this.filterMarker);\n }\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.filter) {\n this.filter().updateOn = 'valueChange';\n this.filter().chipTemplate = this.multiSelectChipTemplate;\n }\n }\n\n getOptionsNames(filter: PghFilterChipConfig, values: any[]): string[] {\n if (!values) return [];\n return values.map(v => this.options().find(_o => v === _o.value)?.name ?? '');\n }\n\n filterItemWithChipTemplate(\n filter: PghFilterChipConfig,\n chipTemplate: TemplateRef<any>,\n ): PghFilterChipConfig {\n return { ...filter, chipTemplate };\n }\n}\n","<ng-template #multiSelectChipTemplate let-value=\"value\">\n {{ filter().name }}:\n {{ value === null ? 'همه' : (getOptionsNames(filter(), value) | pghArrayJoin) }}\n</ng-template>\n<mat-form-field\n class=\"pgh-mat-form-field-no-space-bottom\"\n *pghFilterField=\"filter(); initValue: initialValue(); let setValue = setValue; let value = value\"\n>\n <mat-label>{{ filter().name }}</mat-label>\n <mat-select\n multiple\n pghSelectAllOptions\n [pghValueForOptionAll]=\"valueForAll().value\"\n #allOption=\"allOption\"\n [value]=\"value\"\n (selectionChange)=\"\n setValue($event.value, { displayedName: getOptionsNames(filter(), $event.value) })\n \"\n >\n <mat-select-trigger>\n {{\n allOption.selected\n ? (valueForAll().name | translate)\n : (getOptionsNames(filter(), value) | pghArrayJoin)\n }}\n </mat-select-trigger>\n <mat-option [value]=\"valueForAll().value\">\n {{ valueForAll().name | translate }}\n </mat-option>\n @for (o of options(); track o) {\n <mat-option [value]=\"o.value\">\n {{ o.name }}\n </mat-option>\n }\n </mat-select>\n</mat-form-field>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PghFilterChipMultiSelectComponent } from './filter-chip-multi-select.component';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { PghFilterChipsModule } from '../filter-chips.module';\nimport { PghArrayJoinModule } from '@tapsellorg/angular-material-library/src/lib/common';\nimport { PghSelectAllOptionsModule } from '@tapsellorg/angular-material-library/src/lib/select-all-options';\nimport { MatSelectModule } from '@angular/material/select';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { TranslateModule } from '@tapsellorg/angular-material-library/src/lib/translate';\n\n@NgModule({\n declarations: [PghFilterChipMultiSelectComponent],\n imports: [\n CommonModule,\n MatFormFieldModule,\n PghFilterChipsModule,\n MatSelectModule,\n PghSelectAllOptionsModule,\n ReactiveFormsModule,\n PghArrayJoinModule,\n TranslateModule,\n ],\n exports: [PghFilterChipMultiSelectComponent],\n})\nexport class PghFilterChipMultiSelectModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.PghFilterChipsMarkerDirective","i3","i4","i2","i5.PghFilterChipItemComponent","i6","i1","i5","i1.PghFilterChipsMarkerDirective","i7"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAQa,6BAA6B,CAAA;AAYxC,IAAA,WAAA,CAAmB,QAA0B,EAAA;QAA1B,IAAA,CAAA,QAAQ,GAAR,QAAQ;AAX3B,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAsB;AAChD,YAAA,KAAK,EAAE,gBAAgB;AACxB,SAAA,CAAC;AAEF,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CACf,SAAS,EACT;AACE,YAAA,KAAK,EAAE,yBAAyB;AACjC,SAAA,CACF;IAE+C;+GAZrC,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAA7B,6BAA6B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBALzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,UAAU,EAAE,KAAK;AAClB,iBAAA;;;ACHM,MAAM,2BAA2B,GAAG,IAAI,cAAc,CAC3D,uGAAuG,EACvG,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,IAAI,OAAO,EAAE,EAAE,CAAC,EAAE,CAC5D;SAEe,4BAA4B,GAAA;AAC1C,IAAA,OAAO,EAAE,mBAAmB,EAAE,IAAI,OAAO,EAAE,EAAwC;AACrF;AAEO,MAAM,mCAAmC,GAAG;AACjD,IAAA,OAAO,EAAE,2BAA2B;AACpC,IAAA,UAAU,EAAE,4BAA4B;CACzC;;MCgBY,kCAAkC,CAAA;AAW7C,IAAA,WAAA,CAEU,0BAA8D,EAAA;QAA9D,IAAA,CAAA,0BAA0B,GAA1B,0BAA0B;AAZpC,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAuB;QAC9C,IAAA,CAAA,YAAY,GAAG,KAAK,EAAiC;AACrD,QAAA,IAAA,CAAA,OAAO,GAAG,KAAK,CAAwD,EAAE,CAAC;AAC1E,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAU,KAAK,CAAC;AAGxC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAM,EAAE,CAAC;IAO9B;IAEH,eAAe,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,IAAI,CAAC,0BAA0B,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;QAC7E;IACF;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,MAAM,EAAE,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,aAAa,IAAI,IAAI,kBAAkB,EAAE;AACrF,QAAA,IAAI,OAAO,CAAC,MAAM,EAAE;AAClB,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CACtB,IAAI,CAAC,MAAM,EAAE,CAAC,aAAc,CAAC,YAAY,CAAC,IAAI,CAC5C,SAAS,CAAC,EAAE,CAAC,EACb,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAClC,CACF;QACH;AAEA,QAAA,IAAI,OAAO,CAAC,OAAO,EAAE;YACnB,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,aAAc,CAAC,KAAK;AAC7D,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAC5D;IACF;AAEQ,IAAA,OAAO,CAAC,KAAa,EAAA;QAC3B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,MAAM,IAAG;AACrC,YAAA,IAAI,MAAM,EAAE,UAAU,EAAE;gBACtB,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC5F;YACA,OAAO,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC;AACtC,QAAA,CAAC,CAAC;IACJ;AA9CW,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,kBAYnC,2BAA2B,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAZ1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,kCAAkC,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAK/B,WAAW,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,cAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAId,6BAA6B,qECzC1C,mqCAsCA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,6BAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,wBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,eAAA,EAAA,OAAA,EAAA,8BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,mDAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,yBAAA,EAAA,4BAAA,EAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,wDAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FDNa,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAR9C,SAAS;+BACE,+BAA+B,EAAA,aAAA,EAG1B,iBAAiB,CAAC,IAAI,mBACpB,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,KAAK,EAAA,QAAA,EAAA,mqCAAA,EAAA;;0BAcd,MAAM;2BAAC,2BAA2B;yCAPV,WAAW,EAAA,CAAA;sBAArC,YAAY;uBAAC,WAAW;gBAIiB,YAAY,EAAA,CAAA;sBAArD,SAAS;uBAAC,6BAA6B;;;ME/B7B,kBAAkB,CAAA;AAS7B,IAAA,IAAI,QAAQ,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;IAEA,IAAI,QAAQ,CAAC,KAAc,EAAA;AACzB,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS;YAAE;AAC9B,QAAA,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY;YAAE;AAExC,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK;QACtB,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,IAAI,CAAC,aAAa,GAAG,KAAK;QAC5B;IACF;AACA,IAAA,IAAI,aAAa,GAAA;QACf,OAAO,IAAI,CAAC,cAAc;IAC5B;IAEA,IAAI,aAAa,CAAC,KAAc,EAAA;AAC9B,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,cAAc;YAAE;AACnC,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;QAC3B,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;QACtB;IACF;AAQA,IAAA,WAAA,CACS,eAA8C,EAC9C,MAA2B,EAClC,SAA0E,EAAA;QAFnE,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,MAAM,GAAN,MAAM;AAzCP,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,aAAa,CAAsB,CAAC,CAAC;QAMnD,IAAA,CAAA,SAAS,GAAY,KAAK;QAC1B,IAAA,CAAA,cAAc,GAAG,KAAK;AA0B9B;;;AAGG;QACH,IAAA,CAAA,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAmDlD,IAAA,CAAA,WAAW,GAAG,CACZ,KAAc,EACd,EAAE,YAAY,EAAE,aAAa,EAAA,GAAqC,EAAE,KAClE;AACF,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK,KAAK,EAAE,GAAG,SAAS,GAAG,KAAK;AAC7C,YAAA,IAAI,CAAC,kBAAkB,GAAG,aAAa;AACvC,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,gBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC;YACpC;YAEA,IAAI,CAAC,gBAAgB,EAAE;YACvB,IAAI,YAAY,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,cAAc,EAAE;gBAC7D,IAAI,CAAC,YAAY,EAAE;YACrB;AACF,QAAA,CAAC;QAED,IAAA,CAAA,YAAY,GAAG,MAAK;YAClB,UAAU,CAAC,MAAK;AACd,gBAAA,IAAI,CAAC,aAAa,GAAG,KAAK;AAC1B,gBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,cAAc,EAAE;oBACpC,IAAI,CAAC,gBAAgB,EAAE;gBACzB;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC;AAnEC,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe;AACtC,QAAA,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa;QACzC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,cAAc;AACjD,QAAA,IAAI,CAAC,MAAM,CAAC,wBAAwB,GAAG,IAAI,CAAC,MAAM,CAAC,wBAAwB,IAAI,GAAG;QAClF,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY;AAErC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAC5B,YAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;YAClC;QACF;aAAO;AACL,YAAA,IAAI,SAAS,EAAE,KAAK,EAAE;AACpB,gBAAA,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;YAChC;QACF;QAEA,IAAI,CAAC,uBAAuB,EAAE;IAChC;AAEQ,IAAA,cAAc,CAAC,SAAoC,EAAA;QACzD,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE;gBACtB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC;YAC9C;iBAAO;AACL,gBAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,aAAa,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;YACtE;AACA,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACtB,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,gBAAgB,CAAC,SAAsC,EAAA;QAC7D,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,gBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;YAC9D;iBAAO;AACL,gBAAA,IAAI,CAAC,WAAW,CACd,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,EAC/B,EAAE,aAAa,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAC5D;YACH;AACA,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACtB,QAAA,CAAC,CAAC;IACJ;IA2BQ,uBAAuB,GAAA;QAC7B,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE;QAEzB,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,IAAG;AAChD,YAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,YAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,aAAa,EAAE;gBACnC,IAAI,CAAC,gBAAgB,EAAE;YACzB;AACF,QAAA,CAAC,CAAC;IACJ;IAEQ,gBAAgB,GAAA;QACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;IACzB;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;AACrB,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;IAC5B;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI;IAC3B;AACD;;MClJY,4BAA4B,CAAA;AACvC,IAAA,WAAA,GAAA,EAAe;IAEf,OAAO,CAAC,SAAiB,EAAE,YAAuC,EAAA;AAChE,QAAA,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAC5E;AAEQ,IAAA,MAAM,CAAC,SAAiB,EAAA;QAC9B,OAAO,CAAA,UAAA,EAAa,SAAS,CAAA,CAAE;IACjC;AAEA,IAAA,cAAc,CAAC,SAAiB,EAAA;AAC9B,QAAA,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACzD,QAAA,IAAI,CAAC,IAAI;YAAE;AAEX,QAAA,IAAI;AACF,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAA8B;QACtD;QAAE,OAAO,CAAC,EAAE;YACV;QACF;IACF;+GApBW,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,cAF3B,MAAM,EAAA,CAAA,CAAA;;4FAEP,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBAHxC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACcK,MAAO,0BAA2B,SAAQ,WAAW,EAAE,CAAA;AAK3D,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;AALT,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,EAAsB;QACjD,IAAA,CAAA,MAAM,GAAG,MAAM,EAAE;AACjB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAW,EAAE,CAAC;IAInC;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,UAAU,EAAE,CAAC,aAAa,GAAG,IAAI;IACxC;IAEA,aAAa,GAAA;QACX,IAAI,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC;QAExC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE;AAC1C,YAAA,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE;QAC3B;IACF;AAEA,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,OAAO,CAAC,UAAU,EAAE;YACtB,IAAI,CAAC,uBAAuB,EAAE;QAChC;IACF;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,UAAU,EAAE,CAAC,YAAY,EAAE;IAClC;IAEQ,uBAAuB,GAAA;AAC7B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;YACpB,yBAAyB;AACzB,YAAA,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC;AAC1D,SAAA,CAAC;IACJ;IAEA,QAAQ,GAAA;QACN,QACE,IAAI,CAAC,UAAU,EAAE,CAAC,kBAAkB,IAAI,IAAI;AAC5C,aAAC,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;IAEvE;+GA3CW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,8UCnBvC,s+DA2DA,EAAA,MAAA,EAAA,CAAA,03BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,qEAAA,EAAA,MAAA,EAAA,CAAA,2BAAA,EAAA,8BAAA,EAAA,qCAAA,EAAA,4BAAA,EAAA,4BAAA,EAAA,0BAAA,EAAA,2BAAA,EAAA,6BAAA,EAAA,8BAAA,EAAA,kCAAA,EAAA,+BAAA,EAAA,mCAAA,EAAA,mCAAA,EAAA,yBAAA,EAAA,iCAAA,EAAA,sCAAA,EAAA,gCAAA,EAAA,iCAAA,EAAA,uCAAA,EAAA,kCAAA,EAAA,yBAAA,EAAA,wCAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,4DAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;4FDxCa,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAPtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAAA,aAAA,EAGjB,iBAAiB,CAAC,IAAI,cACzB,KAAK,EAAA,QAAA,EAAA,s+DAAA,EAAA,MAAA,EAAA,CAAA,03BAAA,CAAA,EAAA;;;AEkBb,MAAO,uBAAwB,SAAQ,WAAW,EAAE,CAAA;AASxD,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,CAAC,IAAI,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,0CAA0C,CAAC;IAC5F;IAEA,WAAA,CACU,yBAAuD,EAE/D,0BAA8D,EAAA;AAE9D,QAAA,KAAK,EAAE;QAJC,IAAA,CAAA,yBAAyB,GAAzB,yBAAyB;QAX3B,IAAA,CAAA,0CAA0C,GAAoC,EAAE;AACxF,QAAA,IAAA,CAAA,gBAAgB,GAAG,KAAK,CAAU,KAAK,CAAC;AACxC,QAAA,IAAA,CAAA,SAAS,GAAG,KAAK,CAAgB,IAAI,CAAC;QACtC,IAAA,CAAA,MAAM,GAAG,MAAM,EAA6B;AAC5C,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAuB,EAAE,CAAC;AAY5C,QAAA,0BAA0B,CAAC;AACxB,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC;aAChC,SAAS,CAAC,IAAI,IAAG;AAChB,YAAA,IAAI,CAAC,0CAA0C,CAAC,IAAI,CAAC,IAAI,CAAC;YAC1D,UAAU,CAAC,MAAK;gBACd,IAAI,CAAC,yBAAyB,EAAE;AAClC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACN;IAEQ,gBAAgB,GAAA;QACtB,OAAO,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;IAC3E;IAEA,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM;YAAE;QACjC,IAAI,CAAC,yBAAyB,EAAE;QAEhC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,MAAK;YACxC,IAAI,CAAC,yBAAyB,EAAE;AAClC,QAAA,CAAC,CAAC;IACJ;AAEA