@ngstarter-ui/components 21.0.49 → 21.0.51

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.
Files changed (32) hide show
  1. package/ai/component-registry.json +92 -22
  2. package/fesm2022/ngstarter-ui-components-confirm.mjs +1 -1
  3. package/fesm2022/ngstarter-ui-components-confirm.mjs.map +1 -1
  4. package/fesm2022/ngstarter-ui-components-country-select.mjs +1 -1
  5. package/fesm2022/ngstarter-ui-components-country-select.mjs.map +1 -1
  6. package/fesm2022/ngstarter-ui-components-currency-select.mjs +1 -1
  7. package/fesm2022/ngstarter-ui-components-currency-select.mjs.map +1 -1
  8. package/fesm2022/ngstarter-ui-components-date-format-select.mjs +1 -1
  9. package/fesm2022/ngstarter-ui-components-date-format-select.mjs.map +1 -1
  10. package/fesm2022/ngstarter-ui-components-dialog.mjs +37 -10
  11. package/fesm2022/ngstarter-ui-components-dialog.mjs.map +1 -1
  12. package/fesm2022/ngstarter-ui-components-filter-builder.mjs +1 -1
  13. package/fesm2022/ngstarter-ui-components-filter-builder.mjs.map +1 -1
  14. package/fesm2022/ngstarter-ui-components-form-builder.mjs +218 -12
  15. package/fesm2022/ngstarter-ui-components-form-builder.mjs.map +1 -1
  16. package/fesm2022/ngstarter-ui-components-image-designer.mjs +1 -1
  17. package/fesm2022/ngstarter-ui-components-image-designer.mjs.map +1 -1
  18. package/fesm2022/ngstarter-ui-components-option.mjs +2 -2
  19. package/fesm2022/ngstarter-ui-components-option.mjs.map +1 -1
  20. package/fesm2022/ngstarter-ui-components-paginator.mjs +1 -1
  21. package/fesm2022/ngstarter-ui-components-paginator.mjs.map +1 -1
  22. package/fesm2022/ngstarter-ui-components-select.mjs +474 -27
  23. package/fesm2022/ngstarter-ui-components-select.mjs.map +1 -1
  24. package/fesm2022/ngstarter-ui-components-stepper.mjs +2 -2
  25. package/fesm2022/ngstarter-ui-components-stepper.mjs.map +1 -1
  26. package/fesm2022/ngstarter-ui-components-timezone-select.mjs +1 -1
  27. package/fesm2022/ngstarter-ui-components-timezone-select.mjs.map +1 -1
  28. package/package.json +1 -1
  29. package/styles/_tokens.scss +1 -1
  30. package/types/ngstarter-ui-components-dialog.d.ts +13 -4
  31. package/types/ngstarter-ui-components-form-builder.d.ts +50 -2
  32. package/types/ngstarter-ui-components-select.d.ts +112 -3
@@ -1 +1 @@
1
- {"version":3,"file":"ngstarter-ui-components-dialog.mjs","sources":["../../../projects/components/dialog/src/dialog-config.ts","../../../projects/components/dialog/src/dialog-ref.ts","../../../projects/components/dialog/src/dialog-container/dialog-container.ts","../../../projects/components/dialog/src/dialog-container/dialog-container.html","../../../projects/components/dialog/src/dialog.service.ts","../../../projects/components/dialog/src/dialog-title/dialog-title.ts","../../../projects/components/dialog/src/dialog-content/dialog-content.ts","../../../projects/components/dialog/src/dialog-actions/dialog-actions.ts","../../../projects/components/dialog/src/dialog-close.ts","../../../projects/components/dialog/ngstarter-ui-components-dialog.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport class DialogConfig<D = any> {\n data?: D | null = null;\n width?: string = '';\n height?: string = '';\n minWidth?: string | number;\n minHeight?: string | number;\n maxWidth?: string | number;\n maxHeight?: string | number;\n hasBackdrop?: boolean = true;\n backdropClass?: string | string[] = 'ngs-dialog-backdrop';\n panelClass?: string | string[] = '';\n disableClose?: boolean = false;\n autoFocus?: boolean | string = 'first-tabbable';\n restoreFocus?: boolean = true;\n ariaDescribedBy?: string | null = null;\n ariaLabelledBy?: string | null = null;\n ariaLabel?: string | null = null;\n role?: 'dialog' | 'alertdialog' = 'dialog';\n closeOnNavigation?: boolean = true;\n}\n\nexport const DIALOG_DATA = new InjectionToken<any>('DialogData');\nexport const DIALOG_DEFAULT_OPTIONS = new InjectionToken<DialogConfig>('DialogConfig');\n","import { Subject, Observable, filter, take } from 'rxjs';\nimport { DialogContainer } from './dialog-container/dialog-container';\n\nexport class DialogRef<T, R = any> {\n private readonly _afterClosed = new Subject<R | undefined>();\n private readonly _afterOpened = new Subject<void>();\n private readonly _backdropClick = new Subject<MouseEvent>();\n private readonly _keydownEvents = new Subject<KeyboardEvent>();\n\n componentInstance: T | null = null;\n disableClose: boolean | undefined;\n\n /** @internal */\n _cdkRef: any;\n\n /** @internal */\n _container: DialogContainer | undefined;\n\n private _isClosing = false;\n\n close(dialogResult?: R): void {\n if (this._isClosing) {\n return;\n }\n\n this._isClosing = true;\n\n if (this._container && this._cdkRef) {\n\n // Start exit animation for the container\n this._container._startExitAnimation();\n\n // Start exit animation for the backdrop\n const overlayRef = this._cdkRef.overlayRef;\n const backdropElement = overlayRef.backdropElement;\n if (backdropElement) {\n // Remove both classes that could be forcing opacity: 1\n backdropElement.classList.remove('ngs-dialog-backdrop-showing');\n backdropElement.classList.remove('cdk-overlay-backdrop-showing');\n }\n\n // Wait for the container animation to finish before destroying the overlay\n this._container._animationStateChanged\n .pipe(\n filter((event: any) => event.phaseName === 'done' && event.toState === 'exit'),\n take(1)\n )\n .subscribe(() => {\n this._finishClose(dialogResult);\n });\n\n // Fallback in case transitionend never fires (e.g. if opacity was already 0 or style didn't apply)\n setTimeout(() => {\n if (this._isClosing && this._cdkRef) {\n this._finishClose(dialogResult);\n }\n }, 250);\n\n return;\n }\n this._finishClose(dialogResult);\n }\n\n private _finishClose(dialogResult?: R): void {\n if (this._cdkRef) {\n const cdkRef = this._cdkRef;\n this._cdkRef = null;\n cdkRef.close(dialogResult);\n }\n this._afterClosed.next(dialogResult);\n this._afterClosed.complete();\n this._afterOpened.complete();\n this._backdropClick.complete();\n this._keydownEvents.complete();\n }\n\n afterClosed(): Observable<R | undefined> {\n return this._afterClosed.asObservable();\n }\n\n afterOpened(): Observable<void> {\n return this._afterOpened.asObservable();\n }\n\n backdropClick(): Observable<MouseEvent> {\n return this._backdropClick.asObservable();\n }\n\n keydownEvents(): Observable<KeyboardEvent> {\n return this._keydownEvents.asObservable();\n }\n\n __fireAfterOpened(): void {\n this._afterOpened.next();\n }\n\n __fireBackdropClick(event: MouseEvent): void {\n this._backdropClick.next(event);\n }\n\n __fireKeydownEvent(event: KeyboardEvent): void {\n this._keydownEvents.next(event);\n }\n}\n","import { ChangeDetectorRef, Component, EventEmitter, inject, viewChild, ElementRef, OnInit } from '@angular/core';\nimport { CdkDialogContainer, DialogModule } from '@angular/cdk/dialog';\nimport { CdkPortalOutlet } from '@angular/cdk/portal';\n\n@Component({\n selector: 'ngs-dialog-container',\n imports: [DialogModule],\n templateUrl: './dialog-container.html',\n styleUrls: ['./dialog-container.scss'],\n host: {\n 'class': 'ngs-dialog-container',\n '[class.ngs-dialog-container-enter]': '_animationState === \"enter\"',\n '[class.ngs-dialog-container-exit]': '_animationState === \"exit\"',\n '(transitionend)': '_onTransitionEnd($event)',\n },\n})\nexport class DialogContainer extends CdkDialogContainer implements OnInit {\n private readonly _cdr = inject(ChangeDetectorRef);\n\n override readonly _portalOutlet = viewChild(CdkPortalOutlet) as any;\n\n /** State of the dialog animation. */\n _animationState: 'void' | 'enter' | 'exit' = 'void';\n\n /** Emits when an animation state changes. */\n _animationStateChanged = new EventEmitter<any>();\n\n ngOnInit() {\n const config = this._config;\n if (config) {\n const element = (this as any)._elementRef.nativeElement;\n\n if (config.maxWidth) {\n element.style.setProperty('--ngs-dialog-container-max-width', this._formatValue(config.maxWidth));\n }\n\n if (config.minWidth) {\n element.style.setProperty('--ngs-dialog-container-min-width', this._formatValue(config.minWidth));\n }\n\n if (config.width) {\n element.style.setProperty('--ngs-dialog-container-max-width', 'none');\n }\n }\n }\n\n private _formatValue(value: string | number): string {\n return typeof value === 'number' ? `${value}px` : value;\n }\n\n _onTransitionEnd(event: TransitionEvent) {\n if (event.propertyName === 'opacity' && event.target === event.currentTarget) {\n this._animationStateChanged.emit({\n fromState: this._animationState === 'enter' ? 'void' : 'enter',\n toState: this._animationState,\n totalTime: 150,\n phaseName: 'done',\n } as any);\n }\n }\n\n /** Starts the dialog enter animation. */\n _startEnterAnimation(): void {\n this._animationState = 'enter';\n this._cdr.markForCheck();\n }\n\n /** Starts the dialog exit animation. */\n _startExitAnimation(): void {\n this._animationState = 'exit';\n this._cdr.markForCheck();\n }\n}\n","<ng-template cdkPortalOutlet />\n","import { Injectable, Injector, Type, TemplateRef, inject, StaticProvider } from '@angular/core';\nimport { Dialog as CdkDialog, DialogConfig as CdkDialogConfig, DialogRef as CdkDialogRef } from '@angular/cdk/dialog';\nimport { filter, take } from 'rxjs/operators';\nimport { DialogConfig, DIALOG_DATA, DIALOG_DEFAULT_OPTIONS } from './dialog-config';\nimport { DialogRef } from './dialog-ref';\nimport { DialogContainer } from './dialog-container/dialog-container';\nimport { ComponentType } from '@angular/cdk/portal';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class Dialog {\n private readonly _cdkDialog = inject(CdkDialog);\n private readonly _injector = inject(Injector);\n private readonly _defaultOptions = inject(DIALOG_DEFAULT_OPTIONS, { optional: true });\n\n open<T, D = any, R = any>(\n componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n config?: DialogConfig<D>\n ): DialogRef<T, R> {\n const dialogRef = new DialogRef<T, R>();\n const mergedConfig = { ...new DialogConfig(), ...this._defaultOptions, ...config };\n\n // Set default maxWidth if not specified and no width is set\n if (!mergedConfig.maxWidth && !mergedConfig.width) {\n mergedConfig.maxWidth = 560;\n }\n\n // Set default minWidth if not specified\n if (!mergedConfig.minWidth) {\n mergedConfig.minWidth = 280;\n }\n\n let container: DialogContainer | undefined;\n const cdkConfig: CdkDialogConfig<D, any, DialogContainer> = {\n ...mergedConfig,\n container: DialogContainer,\n panelClass: this._buildPanelClass(mergedConfig?.panelClass),\n backdropClass: this._buildBackdropClass(mergedConfig?.backdropClass),\n providers: (ref: any, config: any, _container: DialogContainer) => {\n container = _container;\n dialogRef._container = _container;\n return [\n { provide: DialogRef, useValue: dialogRef },\n { provide: DIALOG_DATA, useValue: config?.data }\n ];\n }\n };\n\n const cdkRef = this._cdkDialog.open(componentOrTemplateRef, cdkConfig as any);\n\n dialogRef.disableClose = mergedConfig?.disableClose;\n dialogRef._cdkRef = cdkRef;\n\n if (container) {\n container._animationStateChanged\n .pipe(\n filter((event: any) => event.phaseName === 'done' && event.toState === 'enter'),\n take(1)\n )\n .subscribe(() => {\n dialogRef.__fireAfterOpened();\n });\n\n // Use double rAF to ensure the browser has rendered the initial state (opacity: 0)\n // before we trigger the transition to opacity: 1.\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (container) {\n container._startEnterAnimation();\n }\n\n const overlayRef = cdkRef.overlayRef;\n if (overlayRef.backdropElement) {\n overlayRef.backdropElement.classList.add('ngs-dialog-backdrop-showing');\n }\n });\n });\n }\n\n cdkRef.closed.subscribe(result => {\n if (dialogRef._cdkRef) {\n dialogRef._cdkRef = null;\n dialogRef.close(result as R);\n }\n });\n\n cdkRef.backdropClick.subscribe(event => {\n dialogRef.__fireBackdropClick(event);\n if (!dialogRef.disableClose) {\n dialogRef.close();\n }\n });\n\n cdkRef.keydownEvents.subscribe(event => {\n dialogRef.__fireKeydownEvent(event);\n if (event.key === 'Escape' && !dialogRef.disableClose) {\n dialogRef.close();\n }\n });\n\n return dialogRef;\n }\n\n close<T, R>(dialogRef: DialogRef<T, R>, result?: R): void {\n dialogRef.close(result);\n }\n\n closeAll(): void {\n this._cdkDialog.closeAll();\n }\n\n private _buildPanelClass(panelClass: string | string[] | undefined): string[] {\n const classes = ['ngs-dialog-panel', 'overflow-hidden', 'flex', 'flex-col'];\n\n if (Array.isArray(panelClass)) {\n classes.push(...panelClass);\n } else if (panelClass) {\n classes.push(panelClass);\n }\n\n return classes;\n }\n\n private _buildBackdropClass(backdropClass: string | string[] | undefined): string[] {\n const classes: string[] = ['ngs-dialog-backdrop'];\n\n if (Array.isArray(backdropClass)) {\n classes.push(...backdropClass);\n } else if (backdropClass) {\n classes.push(backdropClass);\n }\n\n return classes;\n }\n}\n","import { Component, input, OnInit, inject } from '@angular/core';\nimport { DialogRef } from '../dialog-ref';\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: 'ngs-dialog-title, [ngs-dialog-title], [ngsDialogTitle]',\n exportAs: 'ngsDialogTitle',\n template: '<ng-content/>',\n styleUrl: './dialog-title.scss',\n host: {\n 'class': 'ngs-dialog-title',\n '[id]': 'id()',\n },\n})\nexport class DialogTitle implements OnInit {\n private _dialogRef = inject(DialogRef, { optional: true });\n\n id = input<string>(`ngs-dialog-title-${nextUniqueId++}`);\n\n ngOnInit() {\n if (this._dialogRef && !this._dialogRef.disableClose) {\n // Logic for ARIA if needed\n }\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-dialog-content,[ngs-dialog-content],[ngsDialogContent]',\n styleUrl: './dialog-content.scss',\n template: '<ng-content/>',\n host: {\n 'class': 'ngs-dialog-content'\n }\n})\nexport class DialogContent {}\n","import { Component, input } from '@angular/core';\n\n@Component({\n selector: 'ngs-dialog-actions, [ngs-dialog-actions], [ngsDialogActions]',\n styleUrl: './dialog-actions.scss',\n template: '<ng-content />',\n host: {\n 'class': 'ngs-dialog-actions',\n '[class.ngs-dialog-actions-align-center]': 'align() === \"center\"',\n '[class.ngs-dialog-actions-align-end]': 'align() === \"end\"',\n }\n})\nexport class DialogActions {\n align = input<'start' | 'center' | 'end'>('end');\n}\n","import { Directive, input, inject } from '@angular/core';\nimport { DialogRef } from './dialog-ref';\nimport { Dialog } from './dialog.service';\n\n@Directive({\n selector: '[ngs-dialog-close], [ngsDialogClose]',\n exportAs: 'ngsDialogClose',\n host: {\n '[attr.aria-label]': 'ariaLabel() || null',\n '[attr.type]': 'type()',\n '(click)': '_onClick()',\n }\n})\nexport class DialogClose {\n dialogResult = input<any>(undefined, {\n alias: 'ngs-dialog-close'\n });\n _dialogResult = input<any>(undefined, {\n alias: 'ngsDialogClose'\n });\n ariaLabel = input<string | null>(null);\n type = input<'submit' | 'button' | 'reset'>('button');\n\n private _dialogRef = inject(DialogRef, { optional: true });\n private _dialog = inject(Dialog);\n\n protected _onClick() {\n if (this._dialogRef) {\n this._dialog.close(this._dialogRef, this.dialogResult() || this._dialogResult());\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["CdkDialog","filter","take"],"mappings":"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"}
1
+ {"version":3,"file":"ngstarter-ui-components-dialog.mjs","sources":["../../../projects/components/dialog/src/dialog-config.ts","../../../projects/components/dialog/src/dialog-ref.ts","../../../projects/components/dialog/src/dialog-container/dialog-container.ts","../../../projects/components/dialog/src/dialog-container/dialog-container.html","../../../projects/components/dialog/src/dialog.service.ts","../../../projects/components/dialog/src/dialog-title/dialog-title.ts","../../../projects/components/dialog/src/dialog-content/dialog-content.ts","../../../projects/components/dialog/src/dialog-actions/dialog-actions.ts","../../../projects/components/dialog/src/dialog-close.ts","../../../projects/components/dialog/src/dialog-header/dialog-header.ts","../../../projects/components/dialog/src/dialog-header/dialog-header.html","../../../projects/components/dialog/ngstarter-ui-components-dialog.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport class DialogConfig<D = any> {\n data?: D | null = null;\n width?: string = '';\n height?: string = '';\n minWidth?: string | number;\n minHeight?: string | number;\n maxWidth?: string | number;\n maxHeight?: string | number;\n hasBackdrop?: boolean = true;\n backdropClass?: string | string[] = 'ngs-dialog-backdrop';\n panelClass?: string | string[] = '';\n disableClose?: boolean = false;\n autoFocus?: boolean | string = 'first-tabbable';\n restoreFocus?: boolean = true;\n ariaDescribedBy?: string | null = null;\n ariaLabelledBy?: string | null = null;\n ariaLabel?: string | null = null;\n role?: 'dialog' | 'alertdialog' = 'dialog';\n closeOnNavigation?: boolean = true;\n showCloseButton?: boolean = false;\n}\n\nexport const DIALOG_DATA = new InjectionToken<any>('DialogData');\nexport const DIALOG_DEFAULT_OPTIONS = new InjectionToken<DialogConfig>('DialogConfig');\n","import { Subject, Observable, filter, take } from 'rxjs';\nimport { DialogContainer } from './dialog-container/dialog-container';\n\nexport class DialogRef<T, R = any> {\n private readonly _afterClosed = new Subject<R | undefined>();\n private readonly _afterOpened = new Subject<void>();\n private readonly _backdropClick = new Subject<MouseEvent>();\n private readonly _keydownEvents = new Subject<KeyboardEvent>();\n\n componentInstance: T | null = null;\n disableClose: boolean | undefined;\n\n /** @internal */\n _cdkRef: any;\n\n /** @internal */\n _container: DialogContainer | undefined;\n\n private _isClosing = false;\n\n close(dialogResult?: R): void {\n if (this._isClosing) {\n return;\n }\n\n this._isClosing = true;\n\n if (this._container && this._cdkRef) {\n\n // Start exit animation for the container\n this._container._startExitAnimation();\n\n // Start exit animation for the backdrop\n const overlayRef = this._cdkRef.overlayRef;\n const backdropElement = overlayRef.backdropElement;\n if (backdropElement) {\n // Remove both classes that could be forcing opacity: 1\n backdropElement.classList.remove('ngs-dialog-backdrop-showing');\n backdropElement.classList.remove('cdk-overlay-backdrop-showing');\n }\n\n // Wait for the container animation to finish before destroying the overlay\n this._container._animationStateChanged\n .pipe(\n filter((event: any) => event.phaseName === 'done' && event.toState === 'exit'),\n take(1)\n )\n .subscribe(() => {\n this._finishClose(dialogResult);\n });\n\n // Fallback in case transitionend never fires (e.g. if opacity was already 0 or style didn't apply)\n setTimeout(() => {\n if (this._isClosing && this._cdkRef) {\n this._finishClose(dialogResult);\n }\n }, 250);\n\n return;\n }\n this._finishClose(dialogResult);\n }\n\n private _finishClose(dialogResult?: R): void {\n if (this._cdkRef) {\n const cdkRef = this._cdkRef;\n this._cdkRef = null;\n cdkRef.close(dialogResult);\n }\n this._afterClosed.next(dialogResult);\n this._afterClosed.complete();\n this._afterOpened.complete();\n this._backdropClick.complete();\n this._keydownEvents.complete();\n }\n\n afterClosed(): Observable<R | undefined> {\n return this._afterClosed.asObservable();\n }\n\n afterOpened(): Observable<void> {\n return this._afterOpened.asObservable();\n }\n\n backdropClick(): Observable<MouseEvent> {\n return this._backdropClick.asObservable();\n }\n\n keydownEvents(): Observable<KeyboardEvent> {\n return this._keydownEvents.asObservable();\n }\n\n __fireAfterOpened(): void {\n this._afterOpened.next();\n }\n\n __fireBackdropClick(event: MouseEvent): void {\n this._backdropClick.next(event);\n }\n\n __fireKeydownEvent(event: KeyboardEvent): void {\n this._keydownEvents.next(event);\n }\n}\n","import { ChangeDetectorRef, Component, EventEmitter, inject, OnInit } from '@angular/core';\nimport { CdkDialogContainer, DialogModule } from '@angular/cdk/dialog';\nimport { Button } from \"@ngstarter-ui/components/button\";\nimport { Icon } from \"@ngstarter-ui/components/icon\";\nimport type { DialogConfig } from \"../dialog-config\";\n\n@Component({\n selector: 'ngs-dialog-container',\n exportAs: 'ngsDialogContainer',\n imports: [\n DialogModule,\n Button,\n Icon,\n ],\n templateUrl: './dialog-container.html',\n styleUrl: './dialog-container.scss',\n host: {\n 'class': 'ngs-dialog-container',\n '[class.ngs-dialog-container-enter]': '_animationState === \"enter\"',\n '[class.ngs-dialog-container-exit]': '_animationState === \"exit\"',\n '(transitionend)': '_onTransitionEnd($event)',\n },\n})\nexport class DialogContainer extends CdkDialogContainer implements OnInit {\n private readonly _cdr = inject(ChangeDetectorRef);\n private _closeHandler?: () => void;\n\n get showCloseButton(): boolean {\n return Boolean((this._config as DialogConfig).showCloseButton);\n }\n\n /** State of the dialog animation. */\n _animationState: 'void' | 'enter' | 'exit' = 'void';\n\n /** Emits when an animation state changes. */\n _animationStateChanged = new EventEmitter<any>();\n\n ngOnInit() {\n const config = this._config;\n if (config) {\n const element = (this as any)._elementRef.nativeElement;\n\n if (config.maxWidth) {\n element.style.setProperty('--ngs-dialog-container-max-width', this._formatValue(config.maxWidth));\n }\n\n if (config.minWidth) {\n element.style.setProperty('--ngs-dialog-container-min-width', this._formatValue(config.minWidth));\n }\n\n if (config.width) {\n element.style.setProperty('--ngs-dialog-container-max-width', 'none');\n }\n }\n }\n\n private _formatValue(value: string | number): string {\n return typeof value === 'number' ? `${value}px` : value;\n }\n\n _onTransitionEnd(event: TransitionEvent) {\n if (event.propertyName === 'opacity' && event.target === event.currentTarget) {\n this._animationStateChanged.emit({\n fromState: this._animationState === 'enter' ? 'void' : 'enter',\n toState: this._animationState,\n totalTime: 150,\n phaseName: 'done',\n } as any);\n }\n }\n\n /** Starts the dialog enter animation. */\n _startEnterAnimation(): void {\n this._animationState = 'enter';\n this._cdr.markForCheck();\n }\n\n /** Starts the dialog exit animation. */\n _startExitAnimation(): void {\n this._animationState = 'exit';\n this._cdr.markForCheck();\n }\n\n _setCloseHandler(handler: () => void): void {\n this._closeHandler = handler;\n }\n\n protected close(): void {\n this._closeHandler?.();\n }\n}\n","@if (showCloseButton) {\n <span class=\"close\">\n <button type=\"button\" ngsIconButton aria-label=\"Close dialog\" (click)=\"close()\">\n <ngs-icon name=\"fluent:dismiss-24-regular\"/>\n </button>\n </span>\n}\n<ng-template cdkPortalOutlet />\n","import { Injectable, Injector, Type, TemplateRef, inject, StaticProvider } from '@angular/core';\nimport { Dialog as CdkDialog, DialogConfig as CdkDialogConfig, DialogRef as CdkDialogRef } from '@angular/cdk/dialog';\nimport { filter, take } from 'rxjs/operators';\nimport { DialogConfig, DIALOG_DATA, DIALOG_DEFAULT_OPTIONS } from './dialog-config';\nimport { DialogRef } from './dialog-ref';\nimport { DialogContainer } from './dialog-container/dialog-container';\nimport { ComponentType } from '@angular/cdk/portal';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class Dialog {\n private readonly _cdkDialog = inject(CdkDialog);\n private readonly _injector = inject(Injector);\n private readonly _defaultOptions = inject(DIALOG_DEFAULT_OPTIONS, { optional: true });\n\n open<T, D = any, R = any>(\n componentOrTemplateRef: ComponentType<T> | TemplateRef<T>,\n config?: DialogConfig<D>\n ): DialogRef<T, R> {\n const dialogRef = new DialogRef<T, R>();\n const mergedConfig = { ...new DialogConfig(), ...this._defaultOptions, ...config };\n\n // Set default maxWidth if not specified and no width is set\n if (!mergedConfig.maxWidth && !mergedConfig.width) {\n mergedConfig.maxWidth = 560;\n }\n\n // Set default minWidth if not specified\n if (!mergedConfig.minWidth) {\n mergedConfig.minWidth = 280;\n }\n\n let container: DialogContainer | undefined;\n const cdkConfig: CdkDialogConfig<D, any, DialogContainer> = {\n ...mergedConfig,\n container: DialogContainer,\n panelClass: this._buildPanelClass(mergedConfig?.panelClass),\n backdropClass: this._buildBackdropClass(mergedConfig?.backdropClass),\n providers: (ref: any, config: any, _container: DialogContainer) => {\n container = _container;\n dialogRef._container = _container;\n return [\n { provide: DialogRef, useValue: dialogRef },\n { provide: DIALOG_DATA, useValue: config?.data }\n ];\n }\n };\n\n const cdkRef = this._cdkDialog.open(componentOrTemplateRef, cdkConfig as any);\n\n dialogRef.disableClose = mergedConfig?.disableClose;\n dialogRef._cdkRef = cdkRef;\n\n if (container) {\n container._setCloseHandler(() => dialogRef.close());\n\n container._animationStateChanged\n .pipe(\n filter((event: any) => event.phaseName === 'done' && event.toState === 'enter'),\n take(1)\n )\n .subscribe(() => {\n dialogRef.__fireAfterOpened();\n });\n\n // Use double rAF to ensure the browser has rendered the initial state (opacity: 0)\n // before we trigger the transition to opacity: 1.\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (container) {\n container._startEnterAnimation();\n }\n\n const overlayRef = cdkRef.overlayRef;\n if (overlayRef.backdropElement) {\n overlayRef.backdropElement.classList.add('ngs-dialog-backdrop-showing');\n }\n });\n });\n }\n\n cdkRef.closed.subscribe(result => {\n if (dialogRef._cdkRef) {\n dialogRef._cdkRef = null;\n dialogRef.close(result as R);\n }\n });\n\n cdkRef.backdropClick.subscribe(event => {\n dialogRef.__fireBackdropClick(event);\n if (!dialogRef.disableClose) {\n dialogRef.close();\n }\n });\n\n cdkRef.keydownEvents.subscribe(event => {\n dialogRef.__fireKeydownEvent(event);\n if (event.key === 'Escape' && !dialogRef.disableClose) {\n dialogRef.close();\n }\n });\n\n return dialogRef;\n }\n\n close<T, R>(dialogRef: DialogRef<T, R>, result?: R): void {\n dialogRef.close(result);\n }\n\n closeAll(): void {\n this._cdkDialog.closeAll();\n }\n\n private _buildPanelClass(panelClass: string | string[] | undefined): string[] {\n const classes = ['ngs-dialog-panel', 'overflow-hidden', 'flex', 'flex-col'];\n\n if (Array.isArray(panelClass)) {\n classes.push(...panelClass);\n } else if (panelClass) {\n classes.push(panelClass);\n }\n\n return classes;\n }\n\n private _buildBackdropClass(backdropClass: string | string[] | undefined): string[] {\n const classes: string[] = ['ngs-dialog-backdrop'];\n\n if (Array.isArray(backdropClass)) {\n classes.push(...backdropClass);\n } else if (backdropClass) {\n classes.push(backdropClass);\n }\n\n return classes;\n }\n}\n","import { Component, input, OnInit, inject } from '@angular/core';\nimport { DialogRef } from '../dialog-ref';\n\nlet nextUniqueId = 0;\n\n@Component({\n selector: 'ngs-dialog-title, [ngs-dialog-title], [ngsDialogTitle]',\n exportAs: 'ngsDialogTitle',\n template: '<ng-content/>',\n styleUrl: './dialog-title.scss',\n host: {\n 'class': 'ngs-dialog-title',\n '[id]': 'id()',\n },\n})\nexport class DialogTitle implements OnInit {\n private _dialogRef = inject(DialogRef, { optional: true });\n\n id = input<string>(`ngs-dialog-title-${nextUniqueId++}`);\n\n ngOnInit() {\n if (this._dialogRef && !this._dialogRef.disableClose) {\n // Logic for ARIA if needed\n }\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-dialog-content,[ngs-dialog-content],[ngsDialogContent]',\n styleUrl: './dialog-content.scss',\n template: '<ng-content/>',\n host: {\n 'class': 'ngs-dialog-content'\n }\n})\nexport class DialogContent {}\n","import { Component, input } from '@angular/core';\n\n@Component({\n selector: 'ngs-dialog-actions, [ngs-dialog-actions], [ngsDialogActions]',\n styleUrl: './dialog-actions.scss',\n template: '<ng-content />',\n host: {\n 'class': 'ngs-dialog-actions',\n '[class.ngs-dialog-actions-align-center]': 'align() === \"center\"',\n '[class.ngs-dialog-actions-align-end]': 'align() === \"end\"',\n }\n})\nexport class DialogActions {\n align = input<'start' | 'center' | 'end'>('end');\n}\n","import { Directive, input, inject } from '@angular/core';\nimport { DialogRef } from './dialog-ref';\nimport { Dialog } from './dialog.service';\n\n@Directive({\n selector: '[ngs-dialog-close],[ngsDialogClose]',\n exportAs: 'ngsDialogClose',\n host: {\n '[attr.aria-label]': 'ariaLabel() || null',\n '[attr.type]': 'type()',\n '(click)': '_onClick()',\n }\n})\nexport class DialogClose {\n dialogResult = input<any>(undefined, {\n alias: 'ngs-dialog-close'\n });\n _dialogResult = input<any>(undefined, {\n alias: 'ngsDialogClose'\n });\n ariaLabel = input<string | null>(null);\n type = input<'submit' | 'button' | 'reset'>('button');\n\n private _dialogRef = inject(DialogRef, { optional: true });\n private _dialog = inject(Dialog);\n\n protected _onClick() {\n if (this._dialogRef) {\n this._dialog.close(this._dialogRef, this.dialogResult() || this._dialogResult());\n }\n }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n selector: 'ngs-dialog-header',\n exportAs: 'ngsDialogHeader',\n imports: [],\n templateUrl: './dialog-header.html',\n styleUrl: './dialog-header.scss',\n host: {\n 'class': 'ngs-dialog-header',\n }\n})\nexport class DialogHeader {\n\n}\n","<ng-content/>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["CdkDialog","filter","take"],"mappings":"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"}
@@ -309,7 +309,7 @@ class FilterBuilder {
309
309
  return result;
310
310
  }
311
311
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: FilterBuilder, deps: [], target: i0.ɵɵFactoryTarget.Component });
312
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: FilterBuilder, isStandalone: true, selector: "ngs-filter-builder", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, fieldDefs: { classPropertyName: "fieldDefs", publicName: "fieldDefs", isSignal: true, isRequired: false, transformFunction: null }, categories: { classPropertyName: "categories", publicName: "categories", isSignal: true, isRequired: false, transformFunction: null }, groupOperations: { classPropertyName: "groupOperations", publicName: "groupOperations", isSignal: true, isRequired: false, transformFunction: null }, customOperations: { classPropertyName: "customOperations", publicName: "customOperations", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChanged: "valueChanged" }, host: { classAttribute: "ngs-filter-builder" }, queries: [{ propertyName: "_customOperationDefs", predicate: FilterBuilderOperationDefDirective, isSignal: true }], viewQueries: [{ propertyName: "_prebuiltOperationDefs", predicate: FilterBuilderOperationDefDirective, descendants: true, isSignal: true }], exportAs: ["ngsFilterBuilder"], ngImport: i0, template: "@if (_isServer) {\n <ng-content/>\n}\n\n<ng-template #itemsTpl let-items>\n <div class=\"group\">\n @for (item of items; track item; let index = $index) {\n @if (_isGroup(item)) {\n <div class=\"flex items-center group-operations\">\n <div class=\"remove\" (click)=\"removeCondition(index, items)\">\n <ngs-icon name=\"fluent:dismiss-24-regular\" class=\"font-icon\"/>\n </div>\n <button [ngsMenuTriggerFor]=\"nestedGroupOperationsMenu\"\n #nestedGroupOperationsMenuTrigger=\"ngsMenuTrigger\"\n class=\"group-operation\">\n {{ getSelectedGroupOperationName(item) }}\n </button>\n <div [ngsMenuTriggerFor]=\"addGroupMenu\" class=\"add\">\n <ngs-icon name=\"fluent:add-24-regular\" class=\"font-icon\"/>\n </div>\n <ngs-menu #nestedGroupOperationsMenu=\"ngsMenu\">\n <div ngsMenuOptionGroup [(ngModel)]=\"item['logicalOperator']\">\n @for (groupOperation of groupOperations(); track groupOperation.id) {\n <ngs-option [value]=\"groupOperation.id\"\n (click)=\"nestedGroupOperationsMenuTrigger.closeMenu('click')\">{{ groupOperation.name }}\n </ngs-option>\n }\n </div>\n </ngs-menu>\n <ngs-menu #addGroupMenu=\"ngsMenu\">\n <button ngs-menu-item (click)=\"addCondition(item)\">Add Condition</button>\n <button ngs-menu-item (click)=\"addGroup(item)\">Add Group</button>\n </ngs-menu>\n </div>\n @if (item['value'].length > 0) {\n <ng-container [ngTemplateOutlet]=\"itemsTpl\" [ngTemplateOutletContext]=\"{ $implicit: item['value'] }\"/>\n }\n } @else if (_isCondition(item)) {\n <div class=\"condition\">\n <div class=\"remove\" (click)=\"removeCondition(index, items)\">\n <ngs-icon name=\"fluent:dismiss-24-regular\" class=\"font-icon\"/>\n </div>\n <button class=\"condition-field\"\n #fieldsMenuTrigger=\"ngsMenuTrigger\"\n [ngsMenuTriggerFor]=\"fieldsMenu\">{{ getConditionField(item['value'][0])?.name }}\n </button>\n <button class=\"condition-operation\"\n #operationsMenuTrigger=\"ngsMenuTrigger\"\n [ngsMenuTriggerFor]=\"operationsMenu\">\n <ng-template [ngTemplateOutlet]=\"getConditionOperation(item['value'][1])?.name\"/>\n </button>\n <div class=\"relative\">\n @if (editItem && editItem === item) {\n <div class=\"absolute start-0 top-0 -translate-y-1/2\">\n @switch (getFieldType(editItem)) {\n @case ('array') {\n @switch (editItem['value'][1]) {\n @case ('equals') {\n <ngs-form-field class=\"form-field\">\n <ngs-select placeholder=\"Select...\"\n ngsAutoFocus\n (blur)=\"selectBlur($event)\"\n [(ngModel)]=\"item['value'][2]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n @for (option of getOptions(editItem); track option.id) {\n <ngs-option [value]=\"option.id\">{{ option.name }}</ngs-option>\n }\n </ngs-select>\n </ngs-form-field>\n }\n @case ('isAnyOf') {\n <ngs-form-field class=\"form-field\">\n <ngs-select placeholder=\"Select...\" multiple\n ngsAutoFocus\n (blur)=\"selectBlur($event)\"\n [(ngModel)]=\"_tempMultipleValue\"\n (closed)=\"selectClosed()\">\n @for (option of getOptions(editItem); track option.id) {\n <ngs-option [value]=\"option.id\">{{ option.name }}</ngs-option>\n }\n </ngs-select>\n </ngs-form-field>\n }\n }\n }\n @case ('number') {\n @switch (editItem['value'][1]) {\n @case ('isBetween') {\n <div class=\"flex gap-2 items-center\"\n ngsFocusElement (elementBlurred)=\"cancelEdit()\">\n <ngs-form-field class=\"form-field-number\">\n <input type=\"number\" ngsInput ngsAutoFocus\n [(ngModel)]=\"item['value'][2][0]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n </ngs-form-field>\n <div class=\"text-neutral-500\">&ndash;</div>\n <ngs-form-field class=\"form-field-number\">\n <input type=\"number\" ngsInput\n [(ngModel)]=\"item['value'][2][1]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n </ngs-form-field>\n </div>\n }\n @default {\n <ngs-form-field class=\"form-field-number\">\n <input type=\"number\" ngsInput ngsAutoFocus\n (blur)=\"cancelEdit()\"\n [(ngModel)]=\"item['value'][2]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n </ngs-form-field>\n }\n }\n }\n @default {\n <ngs-form-field class=\"form-field\">\n <input type=\"text\" ngsInput ngsAutoFocus\n (blur)=\"cancelEdit()\"\n [(ngModel)]=\"item['value'][2]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n </ngs-form-field>\n }\n }\n </div>\n } @else {\n @if (item['value'][1] !== 'isBlank' && item['value'][1] !== 'isNotBlank') {\n @if (isValueNotEmpty(item)) {\n @if (getFieldType(item) === 'array') {\n @if (item['value'][1] === 'equals') {\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\n {{ getDataSourceItemNameById(item, item['value'][2]) }}\n </button>\n } @else {\n <button class=\"condition-value flex items-center gap-2\" (click)=\"modifyValue(item)\">\n @for (dataSourceItemId of item['value'][2]; track dataSourceItemId; let last = $last) {\n <span>{{ getDataSourceItemNameById(item, dataSourceItemId) }}</span>\n @if (!last) {\n <span class=\"text-neutral-500\">|</span>\n }\n }\n </button>\n }\n } @else {\n @if (item['value'][1] === 'isBetween') {\n <button class=\"condition-value flex items-center gap-2\" (click)=\"modifyValue(item)\">\n <span>{{ item['value'][2][0] }}</span>\n <span class=\"text-neutral-500\">&ndash;</span>\n <span>{{ item['value'][2][1] }}</span>\n </button>\n } @else {\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\n <span>{{ item['value'][2] }}</span>\n </button>\n }\n }\n } @else {\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\n <span i18n>&lt;enter a value&gt;</span>\n </button>\n }\n }\n }\n </div>\n </div>\n <ngs-menu #fieldsMenu=\"ngsMenu\">\n <ng-template ngsMenuContent>\n <div ngsMenuOptionGroup [ngModel]=\"item['value'][0]\">\n @for (fieldDef of fieldDefs(); track fieldDef) {\n <ngs-option [value]=\"fieldDef.dataField\"\n (click)=\"selectConditionField(item, fieldDef); fieldsMenuTrigger.closeMenu('click')\">{{ fieldDef.name }}\n </ngs-option>\n }\n </div>\n </ng-template>\n </ngs-menu>\n <ngs-menu #operationsMenu=\"ngsMenu\">\n <ng-template ngsMenuContent>\n <div ngsMenuOptionGroup [ngModel]=\"item['value'][1]\">\n @for (operation of _operationDefs; track operation.id()) {\n <div [hidden]=\"!isOperationAllowedForCondition(item['value'][0], operation.id())\">\n <ngs-option [value]=\"operation.id()\"\n (click)=\"operationChanged(item, operation.id()); operationsMenuTrigger.closeMenu('click')\">\n <div class=\"flex items-center gap-3\">\n @if (operation.operationIcon()) {\n <ng-template [ngTemplateOutlet]=\"operationIconTemplateRef(operation)\"/>\n }\n <div>\n <ng-template [ngTemplateOutlet]=\"operationNameTemplateRef(operation)\"/>\n </div>\n </div>\n </ngs-option>\n </div>\n }\n </div>\n </ng-template>\n </ngs-menu>\n }\n }\n </div>\n</ng-template>\n\n<div class=\"group\">\n <div class=\"flex items-center group-operations\">\n <button [ngsMenuTriggerFor]=\"groupOperationsMenu\"\n #groupOperationsMenuTrigger=\"ngsMenuTrigger\"\n class=\"group-operation\">\n {{ getSelectedGroupOperationName() }}\n </button>\n <div [ngsMenuTriggerFor]=\"addMenu\" class=\"add\">\n <ngs-icon name=\"fluent:add-24-regular\" class=\"font-icon\"/>\n </div>\n </div>\n <ng-container [ngTemplateOutlet]=\"itemsTpl\" [ngTemplateOutletContext]=\"{ $implicit: _value }\"/>\n</div>\n\n<ngs-menu #groupOperationsMenu=\"ngsMenu\">\n <ng-template ngsMenuContent>\n <div ngsMenuOptionGroup [(ngModel)]=\"_logicalOperator\" (ngModelChange)=\"_emitChangeEvent()\">\n @for (operation of groupOperations(); track operation.id) {\n <ngs-option [value]=\"operation.id\"\n (click)=\"groupOperationsMenuTrigger.closeMenu('click')\">{{ operation.name }}\n </ngs-option>\n }\n </div>\n </ng-template>\n</ngs-menu>\n<ngs-menu #addMenu=\"ngsMenu\">\n <ng-template ngsMenuContent>\n <button ngs-menu-item (click)=\"addCondition()\">Add Condition</button>\n <button ngs-menu-item (click)=\"addGroup()\">Add Group</button>\n </ng-template>\n</ngs-menu>\n\n<ng-container ngsFilterBuilderOperationDef=\"contains\" [allowedDataTypes]=\"['string']\">\n <ng-template ngsFilterBuilderOperationName>Contains</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"doesNotContain\" [allowedDataTypes]=\"['string']\">\n <ng-template ngsFilterBuilderOperationName>Does not contain</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"startsWith\" [allowedDataTypes]=\"['string']\">\n <ng-template ngsFilterBuilderOperationName>Starts with</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"endsWith\" [allowedDataTypes]=\"['string']\">\n <ng-template ngsFilterBuilderOperationName>Ends with</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"equals\" [allowedDataTypes]=\"['string', 'number', 'array', 'boolean']\">\n <ng-template ngsFilterBuilderOperationName>Equals</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"notEquals\" [allowedDataTypes]=\"['string', 'number', 'boolean']\">\n <ng-template ngsFilterBuilderOperationName>Not equals</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isLessThen\" [allowedDataTypes]=\"['number']\">\n <ng-template ngsFilterBuilderOperationName>Is less then</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isLessThenOrEqual\" [allowedDataTypes]=\"['number']\">\n <ng-template ngsFilterBuilderOperationName>Is less then or equal to</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isGreaterThen\" [allowedDataTypes]=\"['number']\">\n <ng-template ngsFilterBuilderOperationName>Is greater then</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isGreaterThenOrEqual\" [allowedDataTypes]=\"['number']\">\n <ng-template ngsFilterBuilderOperationName>Is greater then or equal to</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isBlank\" [allowedDataTypes]=\"['string']\">\n <ng-template ngsFilterBuilderOperationName>Is blank</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isNotBlank\" [allowedDataTypes]=\"['string']\">\n <ng-template ngsFilterBuilderOperationName>Is not blank</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isBetween\" [allowedDataTypes]=\"['number']\">\n <ng-template ngsFilterBuilderOperationName>Is between</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isAnyOf\" [allowedDataTypes]=\"['array']\">\n <ng-template ngsFilterBuilderOperationName>Is any of</ng-template>\n</ng-container>\n", styles: [":host{--ngs-filter-builder-group-operations-gap: calc(var(--spacing, .25rem) * 2);--ngs-filter-builder-group-operation-font-size: var(--text-tiny);--ngs-filter-builder-group-operation-color: var(--ngs-color-on-surface);--ngs-filter-builder-group-operation-bg: var(--ngs-color-surface-container);--ngs-filter-builder-group-operation-font-weight: 400;--ngs-filter-builder-group-operation-border-radius: var(--ngs-radius-lg);--ngs-filter-builder-group-operation-bpadding: 0 calc(var(--spacing, .25rem) * 2);--ngs-filter-builder-group-operation-height: calc(var(--spacing, .25rem) * 7);--ngs-filter-builder-group-operation-hover-color: var(--ngs-color-on-surface);--ngs-filter-builder-group-operation-hover-bg: var(--ngs-color-surface-container-high);--ngs-filter-builder-group-operation-active-color: var(--ngs-color-on-surface);--ngs-filter-builder-group-operation-active-bg: var(--ngs-color-surface-container-highest);--ngs-filter-builder-group-operation-border: 1px solid var(--ngs-color-border);--ngs-filter-builder-group-add-color: var(--ngs-color-primary);--ngs-filter-builder-group-add-hover-color: var(--ngs-color-primary);--ngs-filter-builder-group-margin: 0;--ngs-filter-builder-group-padding: 0;--ngs-filter-builder-group-gap: calc(var(--spacing, .25rem) * 4);--ngs-filter-builder-condition-gap: calc(var(--spacing, .25rem) * 2);--ngs-filter-builder-condition-field-height: calc(var(--spacing, .25rem) * 7);--ngs-filter-builder-condition-field-font-size: var(--text-tiny);--ngs-filter-builder-condition-field-color: var(--ngs-color-on-primary-container);--ngs-filter-builder-condition-field-bg: var(--ngs-color-primary-container);--ngs-filter-builder-condition-field-font-weight: 400;--ngs-filter-builder-condition-field-border-radius: var(--ngs-radius-lg);--ngs-filter-builder-condition-field-bpadding: calc(var(--spacing, .25rem) * .5) calc(var(--spacing, .25rem) * 2);--ngs-filter-builder-condition-field-hover-color: var(--ngs-color-on-primary-container);--ngs-filter-builder-condition-field-hover-bg: var(--ngs-color-primary-400);--ngs-filter-builder-condition-field-active-color: var(--ngs-color-on-primary);--ngs-filter-builder-condition-field-active-bg: var(--ngs-color-primary);--ngs-filter-builder-condition-operation-height: calc(var(--spacing, .25rem) * 7);--ngs-filter-builder-condition-operation-font-size: var(--text-tiny);--ngs-filter-builder-condition-operation-color: var(--ngs-color-on-secondary-container);--ngs-filter-builder-condition-operation-bg: var(--ngs-color-secondary-container);--ngs-filter-builder-condition-operation-font-weight: 400;--ngs-filter-builder-condition-operation-border-radius: var(--ngs-radius-lg);--ngs-filter-builder-condition-operation-bpadding: calc(var(--spacing, .25rem) * .5) calc(var(--spacing, .25rem) * 2);--ngs-filter-builder-condition-operation-hover-color: var(--ngs-color-on-secondary-container);--ngs-filter-builder-condition-operation-hover-bg: var(--ngs-color-secondary-400);--ngs-filter-builder-condition-operation-active-color: var(--ngs-color-on-secondary);--ngs-filter-builder-condition-operation-active-bg: var(--ngs-color-secondary);--ngs-filter-builder-condition-value-height: calc(var(--spacing, .25rem) * 7);--ngs-filter-builder-condition-value-font-size: var(--text-tiny);--ngs-filter-builder-condition-value-color: var(--ngs-color-on-surface);--ngs-filter-builder-condition-value-bg: var(--ngs-color-surface-container-high);--ngs-filter-builder-condition-value-font-weight: 400;--ngs-filter-builder-condition-value-border-radius: var(--ngs-radius-lg);--ngs-filter-builder-condition-value-bpadding: calc(var(--spacing, .25rem) * .5) calc(var(--spacing, .25rem) * 2);--ngs-filter-builder-condition-value-hover-color: var(--ngs-color-on-surface);--ngs-filter-builder-condition-value-hover-bg: var(--ngs-color-surface-container-highest);--ngs-filter-builder-condition-remove-color: var(--ngs-color-danger);--ngs-filter-builder-condition-remove-hover-color: var(--ngs-color-danger);display:block}:host ::ng-deep .ngs-form-field-infix{--ngs-form-field-container-height: 46px !important;--ngs-form-field-container-vertical-padding: 12px !important}:host ::ng-deep .subscript-wrapper{display:none}:host .form-field{width:200px}:host .form-field-number{width:140px}:host .group-operations{gap:var(--ngs-filter-builder-group-operations-gap)}:host .group{margin:var(--ngs-filter-builder-group-margin);padding:var(--ngs-filter-builder-group-padding);display:flex;flex-direction:column;gap:var(--ngs-filter-builder-group-gap)}:host .group .group{margin-left:calc(var(--spacing, .25rem) * 4)}:host .icon:empty{display:none}:host .group-operation{display:flex;align-items:center;width:max-content;-webkit-user-select:none;user-select:none;cursor:pointer;height:var(--ngs-filter-builder-group-operation-height);font-size:var(--ngs-filter-builder-group-operation-font-size);font-weight:var(--ngs-filter-builder-group-operation-font-weight);color:var(--ngs-filter-builder-group-operation-color);background:var(--ngs-filter-builder-group-operation-bg);border:var(--ngs-filter-builder-group-operation-border);border-radius:var(--ngs-filter-builder-group-operation-border-radius);padding:var(--ngs-filter-builder-group-operation-bpadding)}:host .group-operation:hover{color:var(--ngs-filter-builder-group-operation-hover-color);background:var(--ngs-filter-builder-group-operation-hover-bg)}:host .group-operation:active,:host .group-operation.active{color:var(--ngs-filter-builder-group-operation-active-color);background:var(--ngs-filter-builder-group-operation-active-bg)}:host .condition{display:flex;align-items:center;gap:var(--ngs-filter-builder-condition-gap)}:host .condition-field{display:flex;align-items:center;width:max-content;-webkit-user-select:none;user-select:none;cursor:pointer;height:var(--ngs-filter-builder-condition-field-height);font-size:var(--ngs-filter-builder-condition-field-font-size);font-weight:var(--ngs-filter-builder-condition-field-font-weight);color:var(--ngs-filter-builder-condition-field-color);background:var(--ngs-filter-builder-condition-field-bg);border-radius:var(--ngs-filter-builder-condition-field-border-radius);padding:var(--ngs-filter-builder-condition-field-bpadding)}:host .condition-field:hover{color:var(--ngs-filter-builder-condition-field-hover-color);background:var(--ngs-filter-builder-condition-field-hover-bg)}:host .add{line-height:0;color:var(--ngs-filter-builder-group-add-color);cursor:pointer}:host .add:hover{color:var(--ngs-filter-builder-group-add-hover-color)}:host .remove{line-height:0;color:var(--ngs-filter-builder-condition-remove-color);cursor:pointer}:host .remove:hover{color:var(--ngs-filter-builder-condition-remove-hover-color)}:host .condition-field:active,:host .condition-field.active{color:var(--ngs-filter-builder-condition-field-active-color);background:var(--ngs-filter-builder-condition-field-active-bg)}:host .condition-operation{display:flex;align-items:center;width:max-content;-webkit-user-select:none;user-select:none;cursor:pointer;height:var(--ngs-filter-builder-condition-operation-height);font-size:var(--ngs-filter-builder-condition-operation-font-size);font-weight:var(--ngs-filter-builder-condition-operation-font-weight);color:var(--ngs-filter-builder-condition-operation-color);background:var(--ngs-filter-builder-condition-operation-bg);border-radius:var(--ngs-filter-builder-condition-operation-border-radius);padding:var(--ngs-filter-builder-condition-operation-bpadding)}:host .condition-operation:hover{color:var(--ngs-filter-builder-condition-operation-hover-color);background:var(--ngs-filter-builder-condition-operation-hover-bg)}:host .condition-operation:active,:host .condition-operation.active{color:var(--ngs-filter-builder-condition-operation-active-color);background:var(--ngs-filter-builder-condition-operation-active-bg)}:host .condition-value{display:flex;align-items:center;width:max-content;-webkit-user-select:none;user-select:none;cursor:pointer;height:var(--ngs-filter-builder-condition-value-height);font-size:var(--ngs-filter-builder-condition-value-font-size);font-weight:var(--ngs-filter-builder-condition-value-font-weight);color:var(--ngs-filter-builder-condition-value-color);background:var(--ngs-filter-builder-condition-value-bg);border-radius:var(--ngs-filter-builder-condition-value-border-radius);padding:var(--ngs-filter-builder-condition-value-bpadding)}:host .condition-value:hover{color:var(--ngs-filter-builder-condition-value-hover-color);background:var(--ngs-filter-builder-condition-value-hover-bg)}:host-context(html.dark){--ngs-filter-builder-group-operation-color: var(--ngs-color-neutral-200);--ngs-filter-builder-group-operation-hover-bg: var(--ngs-color-neutral-600);--ngs-filter-builder-group-operation-active-bg: var(--ngs-color-neutral-650);--ngs-filter-builder-group-operation-hover-color: var(--ngs-color-neutral-100);--ngs-filter-builder-group-operation-active-color: var(--ngs-color-neutral-50)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: Icon, selector: "ngs-icon", inputs: ["name"], exportAs: ["ngsIcon"] }, { kind: "directive", type: MenuTrigger, selector: "[ngsMenuTriggerFor]", inputs: ["ngsMenuTriggerFor", "ngsMenuTriggerData", "ngsMenuDisabled", "xPosition", "yPosition", "ngsMenuTriggerRestoreFocus"], outputs: ["menuOpened", "menuClosed"], exportAs: ["ngsMenuTrigger"] }, { kind: "component", type: Menu, selector: "ngs-menu", inputs: ["role", "classList", "xPosition", "yPosition"], outputs: ["closed"], exportAs: ["ngsMenu"] }, { kind: "directive", type: MenuContent, selector: "[ngsMenuContent]" }, { kind: "directive", type: MenuOptionGroupDirective, selector: "[ngsMenuOptionGroup]", inputs: ["multiple"], outputs: ["valueChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: MenuItem, selector: "ngs-menu-item, [ngs-menu-item]", inputs: ["disabled", "role", "selected"], outputs: ["_triggered"], exportAs: ["ngsMenuItem"] }, { kind: "component", type: FormField, selector: "ngs-form-field", inputs: ["subscriptHiddenIfEmpty", "sameHeightAsButton"], exportAs: ["ngsFormField"] }, { kind: "component", type: Select, selector: "ngs-select", inputs: ["id", "placeholder", "disabled", "required", "multiple", "hideCheckIcon", "clearable", "aria-label", "tabIndex", "aria-describedby", "value"], outputs: ["selectionChange", "opened", "closed", "valueChange"], exportAs: ["ngsSelect"] }, { kind: "component", type: Option, selector: "ngs-option", inputs: ["value", "data", "disabled", "selected"], outputs: ["onSelectionChange"], exportAs: ["ngsOption"] }, { kind: "directive", type: AutoFocusDirective, selector: "[ngsAutoFocus]", inputs: ["ngsAutoFocus"], exportAs: ["ngsAutoFocus"] }, { kind: "directive", type: FocusElementDirective, selector: "[ngsFocusElement]", inputs: ["checkChildren"], outputs: ["elementFocused", "elementBlurred"], exportAs: ["ngsFocusElement"] }, { kind: "directive", type: Input, selector: "input[ngsInput], textarea[ngsInput]", inputs: ["id", "placeholder", "required", "disabled", "readonly", "errorStateMatcher"], exportAs: ["ngsInput"] }, { kind: "directive", type: FilterBuilderOperationDefDirective, selector: "[ngsFilterBuilderOperationDef]", inputs: ["ngsFilterBuilderOperationDef", "allowedDataTypes"] }, { kind: "directive", type: FilterBuilderOperationNameDirective, selector: "[ngsFilterBuilderOperationName]" }] });
312
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: FilterBuilder, isStandalone: true, selector: "ngs-filter-builder", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, fieldDefs: { classPropertyName: "fieldDefs", publicName: "fieldDefs", isSignal: true, isRequired: false, transformFunction: null }, categories: { classPropertyName: "categories", publicName: "categories", isSignal: true, isRequired: false, transformFunction: null }, groupOperations: { classPropertyName: "groupOperations", publicName: "groupOperations", isSignal: true, isRequired: false, transformFunction: null }, customOperations: { classPropertyName: "customOperations", publicName: "customOperations", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChanged: "valueChanged" }, host: { classAttribute: "ngs-filter-builder" }, queries: [{ propertyName: "_customOperationDefs", predicate: FilterBuilderOperationDefDirective, isSignal: true }], viewQueries: [{ propertyName: "_prebuiltOperationDefs", predicate: FilterBuilderOperationDefDirective, descendants: true, isSignal: true }], exportAs: ["ngsFilterBuilder"], ngImport: i0, template: "@if (_isServer) {\n <ng-content/>\n}\n\n<ng-template #itemsTpl let-items>\n <div class=\"group\">\n @for (item of items; track item; let index = $index) {\n @if (_isGroup(item)) {\n <div class=\"flex items-center group-operations\">\n <div class=\"remove\" (click)=\"removeCondition(index, items)\">\n <ngs-icon name=\"fluent:dismiss-24-regular\" class=\"font-icon\"/>\n </div>\n <button [ngsMenuTriggerFor]=\"nestedGroupOperationsMenu\"\n #nestedGroupOperationsMenuTrigger=\"ngsMenuTrigger\"\n class=\"group-operation\">\n {{ getSelectedGroupOperationName(item) }}\n </button>\n <div [ngsMenuTriggerFor]=\"addGroupMenu\" class=\"add\">\n <ngs-icon name=\"fluent:add-24-regular\" class=\"font-icon\"/>\n </div>\n <ngs-menu #nestedGroupOperationsMenu=\"ngsMenu\">\n <div ngsMenuOptionGroup [(ngModel)]=\"item['logicalOperator']\">\n @for (groupOperation of groupOperations(); track groupOperation.id) {\n <ngs-option [value]=\"groupOperation.id\"\n (click)=\"nestedGroupOperationsMenuTrigger.closeMenu('click')\">{{ groupOperation.name }}\n </ngs-option>\n }\n </div>\n </ngs-menu>\n <ngs-menu #addGroupMenu=\"ngsMenu\">\n <button ngs-menu-item (click)=\"addCondition(item)\">Add Condition</button>\n <button ngs-menu-item (click)=\"addGroup(item)\">Add Group</button>\n </ngs-menu>\n </div>\n @if (item['value'].length > 0) {\n <ng-container [ngTemplateOutlet]=\"itemsTpl\" [ngTemplateOutletContext]=\"{ $implicit: item['value'] }\"/>\n }\n } @else if (_isCondition(item)) {\n <div class=\"condition\">\n <div class=\"remove\" (click)=\"removeCondition(index, items)\">\n <ngs-icon name=\"fluent:dismiss-24-regular\" class=\"font-icon\"/>\n </div>\n <button class=\"condition-field\"\n #fieldsMenuTrigger=\"ngsMenuTrigger\"\n [ngsMenuTriggerFor]=\"fieldsMenu\">{{ getConditionField(item['value'][0])?.name }}\n </button>\n <button class=\"condition-operation\"\n #operationsMenuTrigger=\"ngsMenuTrigger\"\n [ngsMenuTriggerFor]=\"operationsMenu\">\n <ng-template [ngTemplateOutlet]=\"getConditionOperation(item['value'][1])?.name\"/>\n </button>\n <div class=\"relative\">\n @if (editItem && editItem === item) {\n <div class=\"absolute start-0 top-0 -translate-y-1/2\">\n @switch (getFieldType(editItem)) {\n @case ('array') {\n @switch (editItem['value'][1]) {\n @case ('equals') {\n <ngs-form-field class=\"form-field\">\n <ngs-select placeholder=\"Select...\"\n ngsAutoFocus\n (blur)=\"selectBlur($event)\"\n [(ngModel)]=\"item['value'][2]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n @for (option of getOptions(editItem); track option.id) {\n <ngs-option [value]=\"option.id\">{{ option.name }}</ngs-option>\n }\n </ngs-select>\n </ngs-form-field>\n }\n @case ('isAnyOf') {\n <ngs-form-field class=\"form-field\">\n <ngs-select placeholder=\"Select...\" multiple\n ngsAutoFocus\n (blur)=\"selectBlur($event)\"\n [(ngModel)]=\"_tempMultipleValue\"\n (closed)=\"selectClosed()\">\n @for (option of getOptions(editItem); track option.id) {\n <ngs-option [value]=\"option.id\">{{ option.name }}</ngs-option>\n }\n </ngs-select>\n </ngs-form-field>\n }\n }\n }\n @case ('number') {\n @switch (editItem['value'][1]) {\n @case ('isBetween') {\n <div class=\"flex gap-2 items-center\"\n ngsFocusElement (elementBlurred)=\"cancelEdit()\">\n <ngs-form-field class=\"form-field-number\">\n <input type=\"number\" ngsInput ngsAutoFocus\n [(ngModel)]=\"item['value'][2][0]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n </ngs-form-field>\n <div class=\"text-neutral-500\">&ndash;</div>\n <ngs-form-field class=\"form-field-number\">\n <input type=\"number\" ngsInput\n [(ngModel)]=\"item['value'][2][1]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n </ngs-form-field>\n </div>\n }\n @default {\n <ngs-form-field class=\"form-field-number\">\n <input type=\"number\" ngsInput ngsAutoFocus\n (blur)=\"cancelEdit()\"\n [(ngModel)]=\"item['value'][2]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n </ngs-form-field>\n }\n }\n }\n @default {\n <ngs-form-field class=\"form-field\">\n <input type=\"text\" ngsInput ngsAutoFocus\n (blur)=\"cancelEdit()\"\n [(ngModel)]=\"item['value'][2]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n </ngs-form-field>\n }\n }\n </div>\n } @else {\n @if (item['value'][1] !== 'isBlank' && item['value'][1] !== 'isNotBlank') {\n @if (isValueNotEmpty(item)) {\n @if (getFieldType(item) === 'array') {\n @if (item['value'][1] === 'equals') {\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\n {{ getDataSourceItemNameById(item, item['value'][2]) }}\n </button>\n } @else {\n <button class=\"condition-value flex items-center gap-2\" (click)=\"modifyValue(item)\">\n @for (dataSourceItemId of item['value'][2]; track dataSourceItemId; let last = $last) {\n <span>{{ getDataSourceItemNameById(item, dataSourceItemId) }}</span>\n @if (!last) {\n <span class=\"text-neutral-500\">|</span>\n }\n }\n </button>\n }\n } @else {\n @if (item['value'][1] === 'isBetween') {\n <button class=\"condition-value flex items-center gap-2\" (click)=\"modifyValue(item)\">\n <span>{{ item['value'][2][0] }}</span>\n <span class=\"text-neutral-500\">&ndash;</span>\n <span>{{ item['value'][2][1] }}</span>\n </button>\n } @else {\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\n <span>{{ item['value'][2] }}</span>\n </button>\n }\n }\n } @else {\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\n <span i18n>&lt;enter a value&gt;</span>\n </button>\n }\n }\n }\n </div>\n </div>\n <ngs-menu #fieldsMenu=\"ngsMenu\">\n <ng-template ngsMenuContent>\n <div ngsMenuOptionGroup [ngModel]=\"item['value'][0]\">\n @for (fieldDef of fieldDefs(); track fieldDef) {\n <ngs-option [value]=\"fieldDef.dataField\"\n (click)=\"selectConditionField(item, fieldDef); fieldsMenuTrigger.closeMenu('click')\">{{ fieldDef.name }}\n </ngs-option>\n }\n </div>\n </ng-template>\n </ngs-menu>\n <ngs-menu #operationsMenu=\"ngsMenu\">\n <ng-template ngsMenuContent>\n <div ngsMenuOptionGroup [ngModel]=\"item['value'][1]\">\n @for (operation of _operationDefs; track operation.id()) {\n <div [hidden]=\"!isOperationAllowedForCondition(item['value'][0], operation.id())\">\n <ngs-option [value]=\"operation.id()\"\n (click)=\"operationChanged(item, operation.id()); operationsMenuTrigger.closeMenu('click')\">\n <div class=\"flex items-center gap-3\">\n @if (operation.operationIcon()) {\n <ng-template [ngTemplateOutlet]=\"operationIconTemplateRef(operation)\"/>\n }\n <div>\n <ng-template [ngTemplateOutlet]=\"operationNameTemplateRef(operation)\"/>\n </div>\n </div>\n </ngs-option>\n </div>\n }\n </div>\n </ng-template>\n </ngs-menu>\n }\n }\n </div>\n</ng-template>\n\n<div class=\"group\">\n <div class=\"flex items-center group-operations\">\n <button [ngsMenuTriggerFor]=\"groupOperationsMenu\"\n #groupOperationsMenuTrigger=\"ngsMenuTrigger\"\n class=\"group-operation\">\n {{ getSelectedGroupOperationName() }}\n </button>\n <div [ngsMenuTriggerFor]=\"addMenu\" class=\"add\">\n <ngs-icon name=\"fluent:add-24-regular\" class=\"font-icon\"/>\n </div>\n </div>\n <ng-container [ngTemplateOutlet]=\"itemsTpl\" [ngTemplateOutletContext]=\"{ $implicit: _value }\"/>\n</div>\n\n<ngs-menu #groupOperationsMenu=\"ngsMenu\">\n <ng-template ngsMenuContent>\n <div ngsMenuOptionGroup [(ngModel)]=\"_logicalOperator\" (ngModelChange)=\"_emitChangeEvent()\">\n @for (operation of groupOperations(); track operation.id) {\n <ngs-option [value]=\"operation.id\"\n (click)=\"groupOperationsMenuTrigger.closeMenu('click')\">{{ operation.name }}\n </ngs-option>\n }\n </div>\n </ng-template>\n</ngs-menu>\n<ngs-menu #addMenu=\"ngsMenu\">\n <ng-template ngsMenuContent>\n <button ngs-menu-item (click)=\"addCondition()\">Add Condition</button>\n <button ngs-menu-item (click)=\"addGroup()\">Add Group</button>\n </ng-template>\n</ngs-menu>\n\n<ng-container ngsFilterBuilderOperationDef=\"contains\" [allowedDataTypes]=\"['string']\">\n <ng-template ngsFilterBuilderOperationName>Contains</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"doesNotContain\" [allowedDataTypes]=\"['string']\">\n <ng-template ngsFilterBuilderOperationName>Does not contain</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"startsWith\" [allowedDataTypes]=\"['string']\">\n <ng-template ngsFilterBuilderOperationName>Starts with</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"endsWith\" [allowedDataTypes]=\"['string']\">\n <ng-template ngsFilterBuilderOperationName>Ends with</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"equals\" [allowedDataTypes]=\"['string', 'number', 'array', 'boolean']\">\n <ng-template ngsFilterBuilderOperationName>Equals</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"notEquals\" [allowedDataTypes]=\"['string', 'number', 'boolean']\">\n <ng-template ngsFilterBuilderOperationName>Not equals</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isLessThen\" [allowedDataTypes]=\"['number']\">\n <ng-template ngsFilterBuilderOperationName>Is less then</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isLessThenOrEqual\" [allowedDataTypes]=\"['number']\">\n <ng-template ngsFilterBuilderOperationName>Is less then or equal to</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isGreaterThen\" [allowedDataTypes]=\"['number']\">\n <ng-template ngsFilterBuilderOperationName>Is greater then</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isGreaterThenOrEqual\" [allowedDataTypes]=\"['number']\">\n <ng-template ngsFilterBuilderOperationName>Is greater then or equal to</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isBlank\" [allowedDataTypes]=\"['string']\">\n <ng-template ngsFilterBuilderOperationName>Is blank</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isNotBlank\" [allowedDataTypes]=\"['string']\">\n <ng-template ngsFilterBuilderOperationName>Is not blank</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isBetween\" [allowedDataTypes]=\"['number']\">\n <ng-template ngsFilterBuilderOperationName>Is between</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isAnyOf\" [allowedDataTypes]=\"['array']\">\n <ng-template ngsFilterBuilderOperationName>Is any of</ng-template>\n</ng-container>\n", styles: [":host{--ngs-filter-builder-group-operations-gap: calc(var(--spacing, .25rem) * 2);--ngs-filter-builder-group-operation-font-size: var(--text-tiny);--ngs-filter-builder-group-operation-color: var(--ngs-color-on-surface);--ngs-filter-builder-group-operation-bg: var(--ngs-color-surface-container);--ngs-filter-builder-group-operation-font-weight: 400;--ngs-filter-builder-group-operation-border-radius: var(--ngs-radius-lg);--ngs-filter-builder-group-operation-bpadding: 0 calc(var(--spacing, .25rem) * 2);--ngs-filter-builder-group-operation-height: calc(var(--spacing, .25rem) * 7);--ngs-filter-builder-group-operation-hover-color: var(--ngs-color-on-surface);--ngs-filter-builder-group-operation-hover-bg: var(--ngs-color-surface-container-high);--ngs-filter-builder-group-operation-active-color: var(--ngs-color-on-surface);--ngs-filter-builder-group-operation-active-bg: var(--ngs-color-surface-container-highest);--ngs-filter-builder-group-operation-border: 1px solid var(--ngs-color-border);--ngs-filter-builder-group-add-color: var(--ngs-color-primary);--ngs-filter-builder-group-add-hover-color: var(--ngs-color-primary);--ngs-filter-builder-group-margin: 0;--ngs-filter-builder-group-padding: 0;--ngs-filter-builder-group-gap: calc(var(--spacing, .25rem) * 4);--ngs-filter-builder-condition-gap: calc(var(--spacing, .25rem) * 2);--ngs-filter-builder-condition-field-height: calc(var(--spacing, .25rem) * 7);--ngs-filter-builder-condition-field-font-size: var(--text-tiny);--ngs-filter-builder-condition-field-color: var(--ngs-color-on-primary-container);--ngs-filter-builder-condition-field-bg: var(--ngs-color-primary-container);--ngs-filter-builder-condition-field-font-weight: 400;--ngs-filter-builder-condition-field-border-radius: var(--ngs-radius-lg);--ngs-filter-builder-condition-field-bpadding: calc(var(--spacing, .25rem) * .5) calc(var(--spacing, .25rem) * 2);--ngs-filter-builder-condition-field-hover-color: var(--ngs-color-on-primary-container);--ngs-filter-builder-condition-field-hover-bg: var(--ngs-color-primary-400);--ngs-filter-builder-condition-field-active-color: var(--ngs-color-on-primary);--ngs-filter-builder-condition-field-active-bg: var(--ngs-color-primary);--ngs-filter-builder-condition-operation-height: calc(var(--spacing, .25rem) * 7);--ngs-filter-builder-condition-operation-font-size: var(--text-tiny);--ngs-filter-builder-condition-operation-color: var(--ngs-color-on-secondary-container);--ngs-filter-builder-condition-operation-bg: var(--ngs-color-secondary-container);--ngs-filter-builder-condition-operation-font-weight: 400;--ngs-filter-builder-condition-operation-border-radius: var(--ngs-radius-lg);--ngs-filter-builder-condition-operation-bpadding: calc(var(--spacing, .25rem) * .5) calc(var(--spacing, .25rem) * 2);--ngs-filter-builder-condition-operation-hover-color: var(--ngs-color-on-secondary-container);--ngs-filter-builder-condition-operation-hover-bg: var(--ngs-color-secondary-400);--ngs-filter-builder-condition-operation-active-color: var(--ngs-color-on-secondary);--ngs-filter-builder-condition-operation-active-bg: var(--ngs-color-secondary);--ngs-filter-builder-condition-value-height: calc(var(--spacing, .25rem) * 7);--ngs-filter-builder-condition-value-font-size: var(--text-tiny);--ngs-filter-builder-condition-value-color: var(--ngs-color-on-surface);--ngs-filter-builder-condition-value-bg: var(--ngs-color-surface-container-high);--ngs-filter-builder-condition-value-font-weight: 400;--ngs-filter-builder-condition-value-border-radius: var(--ngs-radius-lg);--ngs-filter-builder-condition-value-bpadding: calc(var(--spacing, .25rem) * .5) calc(var(--spacing, .25rem) * 2);--ngs-filter-builder-condition-value-hover-color: var(--ngs-color-on-surface);--ngs-filter-builder-condition-value-hover-bg: var(--ngs-color-surface-container-highest);--ngs-filter-builder-condition-remove-color: var(--ngs-color-danger);--ngs-filter-builder-condition-remove-hover-color: var(--ngs-color-danger);display:block}:host ::ng-deep .ngs-form-field-infix{--ngs-form-field-container-height: 46px !important;--ngs-form-field-container-vertical-padding: 12px !important}:host ::ng-deep .subscript-wrapper{display:none}:host .form-field{width:200px}:host .form-field-number{width:140px}:host .group-operations{gap:var(--ngs-filter-builder-group-operations-gap)}:host .group{margin:var(--ngs-filter-builder-group-margin);padding:var(--ngs-filter-builder-group-padding);display:flex;flex-direction:column;gap:var(--ngs-filter-builder-group-gap)}:host .group .group{margin-left:calc(var(--spacing, .25rem) * 4)}:host .icon:empty{display:none}:host .group-operation{display:flex;align-items:center;width:max-content;-webkit-user-select:none;user-select:none;cursor:pointer;height:var(--ngs-filter-builder-group-operation-height);font-size:var(--ngs-filter-builder-group-operation-font-size);font-weight:var(--ngs-filter-builder-group-operation-font-weight);color:var(--ngs-filter-builder-group-operation-color);background:var(--ngs-filter-builder-group-operation-bg);border:var(--ngs-filter-builder-group-operation-border);border-radius:var(--ngs-filter-builder-group-operation-border-radius);padding:var(--ngs-filter-builder-group-operation-bpadding)}:host .group-operation:hover{color:var(--ngs-filter-builder-group-operation-hover-color);background:var(--ngs-filter-builder-group-operation-hover-bg)}:host .group-operation:active,:host .group-operation.active{color:var(--ngs-filter-builder-group-operation-active-color);background:var(--ngs-filter-builder-group-operation-active-bg)}:host .condition{display:flex;align-items:center;gap:var(--ngs-filter-builder-condition-gap)}:host .condition-field{display:flex;align-items:center;width:max-content;-webkit-user-select:none;user-select:none;cursor:pointer;height:var(--ngs-filter-builder-condition-field-height);font-size:var(--ngs-filter-builder-condition-field-font-size);font-weight:var(--ngs-filter-builder-condition-field-font-weight);color:var(--ngs-filter-builder-condition-field-color);background:var(--ngs-filter-builder-condition-field-bg);border-radius:var(--ngs-filter-builder-condition-field-border-radius);padding:var(--ngs-filter-builder-condition-field-bpadding)}:host .condition-field:hover{color:var(--ngs-filter-builder-condition-field-hover-color);background:var(--ngs-filter-builder-condition-field-hover-bg)}:host .add{line-height:0;color:var(--ngs-filter-builder-group-add-color);cursor:pointer}:host .add:hover{color:var(--ngs-filter-builder-group-add-hover-color)}:host .remove{line-height:0;color:var(--ngs-filter-builder-condition-remove-color);cursor:pointer}:host .remove:hover{color:var(--ngs-filter-builder-condition-remove-hover-color)}:host .condition-field:active,:host .condition-field.active{color:var(--ngs-filter-builder-condition-field-active-color);background:var(--ngs-filter-builder-condition-field-active-bg)}:host .condition-operation{display:flex;align-items:center;width:max-content;-webkit-user-select:none;user-select:none;cursor:pointer;height:var(--ngs-filter-builder-condition-operation-height);font-size:var(--ngs-filter-builder-condition-operation-font-size);font-weight:var(--ngs-filter-builder-condition-operation-font-weight);color:var(--ngs-filter-builder-condition-operation-color);background:var(--ngs-filter-builder-condition-operation-bg);border-radius:var(--ngs-filter-builder-condition-operation-border-radius);padding:var(--ngs-filter-builder-condition-operation-bpadding)}:host .condition-operation:hover{color:var(--ngs-filter-builder-condition-operation-hover-color);background:var(--ngs-filter-builder-condition-operation-hover-bg)}:host .condition-operation:active,:host .condition-operation.active{color:var(--ngs-filter-builder-condition-operation-active-color);background:var(--ngs-filter-builder-condition-operation-active-bg)}:host .condition-value{display:flex;align-items:center;width:max-content;-webkit-user-select:none;user-select:none;cursor:pointer;height:var(--ngs-filter-builder-condition-value-height);font-size:var(--ngs-filter-builder-condition-value-font-size);font-weight:var(--ngs-filter-builder-condition-value-font-weight);color:var(--ngs-filter-builder-condition-value-color);background:var(--ngs-filter-builder-condition-value-bg);border-radius:var(--ngs-filter-builder-condition-value-border-radius);padding:var(--ngs-filter-builder-condition-value-bpadding)}:host .condition-value:hover{color:var(--ngs-filter-builder-condition-value-hover-color);background:var(--ngs-filter-builder-condition-value-hover-bg)}:host-context(html.dark){--ngs-filter-builder-group-operation-color: var(--ngs-color-neutral-200);--ngs-filter-builder-group-operation-hover-bg: var(--ngs-color-neutral-600);--ngs-filter-builder-group-operation-active-bg: var(--ngs-color-neutral-650);--ngs-filter-builder-group-operation-hover-color: var(--ngs-color-neutral-100);--ngs-filter-builder-group-operation-active-color: var(--ngs-color-neutral-50)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: Icon, selector: "ngs-icon", inputs: ["name"], exportAs: ["ngsIcon"] }, { kind: "directive", type: MenuTrigger, selector: "[ngsMenuTriggerFor]", inputs: ["ngsMenuTriggerFor", "ngsMenuTriggerData", "ngsMenuDisabled", "xPosition", "yPosition", "ngsMenuTriggerRestoreFocus"], outputs: ["menuOpened", "menuClosed"], exportAs: ["ngsMenuTrigger"] }, { kind: "component", type: Menu, selector: "ngs-menu", inputs: ["role", "classList", "xPosition", "yPosition"], outputs: ["closed"], exportAs: ["ngsMenu"] }, { kind: "directive", type: MenuContent, selector: "[ngsMenuContent]" }, { kind: "directive", type: MenuOptionGroupDirective, selector: "[ngsMenuOptionGroup]", inputs: ["multiple"], outputs: ["valueChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: MenuItem, selector: "ngs-menu-item, [ngs-menu-item]", inputs: ["disabled", "role", "selected"], outputs: ["_triggered"], exportAs: ["ngsMenuItem"] }, { kind: "component", type: FormField, selector: "ngs-form-field", inputs: ["subscriptHiddenIfEmpty", "sameHeightAsButton"], exportAs: ["ngsFormField"] }, { kind: "component", type: Select, selector: "ngs-select", inputs: ["id", "placeholder", "disabled", "required", "multiple", "hideCheckIcon", "clearable", "dataSource", "pageSize", "searchable", "searchDebounce", "minSearchLength", "loadOnOpen", "aria-label", "tabIndex", "aria-describedby", "value"], outputs: ["selectionChange", "opened", "closed", "valueChange"], exportAs: ["ngsSelect"] }, { kind: "component", type: Option, selector: "ngs-option", inputs: ["value", "data", "disabled", "selected"], outputs: ["onSelectionChange"], exportAs: ["ngsOption"] }, { kind: "directive", type: AutoFocusDirective, selector: "[ngsAutoFocus]", inputs: ["ngsAutoFocus"], exportAs: ["ngsAutoFocus"] }, { kind: "directive", type: FocusElementDirective, selector: "[ngsFocusElement]", inputs: ["checkChildren"], outputs: ["elementFocused", "elementBlurred"], exportAs: ["ngsFocusElement"] }, { kind: "directive", type: Input, selector: "input[ngsInput], textarea[ngsInput]", inputs: ["id", "placeholder", "required", "disabled", "readonly", "errorStateMatcher"], exportAs: ["ngsInput"] }, { kind: "directive", type: FilterBuilderOperationDefDirective, selector: "[ngsFilterBuilderOperationDef]", inputs: ["ngsFilterBuilderOperationDef", "allowedDataTypes"] }, { kind: "directive", type: FilterBuilderOperationNameDirective, selector: "[ngsFilterBuilderOperationName]" }] });
313
313
  }
314
314
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: FilterBuilder, decorators: [{
315
315
  type: Component,
@@ -1 +1 @@
1
- {"version":3,"file":"ngstarter-ui-components-filter-builder.mjs","sources":["../../../projects/components/filter-builder/src/filter-builder-operation-name.directive.ts","../../../projects/components/filter-builder/src/filter-builder-operation-icon.directive.ts","../../../projects/components/filter-builder/src/filter-builder-operation-def.directive.ts","../../../projects/components/filter-builder/src/filter-builder/filter-builder.ts","../../../projects/components/filter-builder/src/filter-builder/filter-builder.html","../../../projects/components/filter-builder/ngstarter-ui-components-filter-builder.ts"],"sourcesContent":["import { Directive, inject, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[ngsFilterBuilderOperationName]',\n})\nexport class FilterBuilderOperationNameDirective {\n readonly templateRef = inject(TemplateRef);\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[ngsFilterBuilderOperationIcon]',\n})\nexport class FilterBuilderOperationIconDirective {\n readonly templateRef = inject(TemplateRef);\n}\n","import { Directive, contentChild, input } from '@angular/core';\nimport { FilterBuilderOperationNameDirective } from './filter-builder-operation-name.directive';\nimport { FilterBuilderOperationIconDirective } from './filter-builder-operation-icon.directive';\n\n@Directive({\n selector: '[ngsFilterBuilderOperationDef]',\n})\nexport class FilterBuilderOperationDefDirective {\n id = input('', {\n alias: 'ngsFilterBuilderOperationDef'\n });\n allowedDataTypes = input<string[]>([]);\n readonly operationName = contentChild(FilterBuilderOperationNameDirective);\n readonly operationIcon = contentChild(FilterBuilderOperationIconDirective);\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n inject,\n OnInit,\n output,\n PLATFORM_ID,\n viewChildren,\n contentChildren, TemplateRef, input\n} from '@angular/core';\nimport { CommonModule, isPlatformServer, NgTemplateOutlet } from '@angular/common';\nimport { FilterBuilderOperationDefDirective } from '../filter-builder-operation-def.directive';\nimport {\n FilterBuilderCondition,\n FilterBuilderFieldDataSourceItem,\n FilterBuilderFieldDef,\n FilterBuilderGroup,\n FilterBuilderItemType\n} from '../types';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport { MenuTrigger, Menu, MenuItem, MenuContent, MenuOptionGroupDirective } from '@ngstarter-ui/components/menu';\nimport { FormsModule } from '@angular/forms';\nimport { Select, Option } from '@ngstarter-ui/components/select';\nimport { FilterBuilderOperationNameDirective } from '../filter-builder-operation-name.directive';\nimport { AutoFocusDirective, FocusElementDirective } from '@ngstarter-ui/components/core';\nimport { Input } from '@ngstarter-ui/components/input';\nimport { FormField } from '@ngstarter-ui/components/form-field';\n\n@Component({\n selector: 'ngs-filter-builder',\n exportAs: 'ngsFilterBuilder',\n imports: [\n CommonModule,\n Icon,\n MenuTrigger,\n Menu,\n MenuContent,\n MenuOptionGroupDirective,\n FormsModule,\n MenuItem,\n FormField,\n Select,\n Option,\n AutoFocusDirective,\n FocusElementDirective,\n Input,\n FilterBuilderOperationDefDirective,\n FilterBuilderOperationNameDirective\n ],\n templateUrl: './filter-builder.html',\n styleUrl: './filter-builder.scss',\n host: {\n 'class': 'ngs-filter-builder'\n },\n})\nexport class FilterBuilder implements OnInit, AfterViewInit {\n protected _cdr = inject(ChangeDetectorRef);\n protected _isServer = isPlatformServer(inject(PLATFORM_ID));\n protected _operationAllowedTypesMap: Map<string, string[]> = new Map();\n private _resetMethodMap: { [prop: string]: (condition: FilterBuilderCondition) => void } = {\n '_resetStringValue': this._resetStringValue,\n '_resetBooleanValue': this._resetBooleanValue,\n '_resetArrayValue': this._resetArrayValue,\n '_resetNumberValue': this._resetNumberValue,\n };\n\n value = input<FilterBuilderGroup[]>([]);\n fieldDefs = input<FilterBuilderFieldDef[]>([]);\n categories = input([]);\n groupOperations = input([\n {\n id: 'and',\n name: 'And'\n },\n {\n id: 'or',\n name: 'Or'\n }\n ]);\n customOperations = input([]);\n\n protected _logicalOperator = this.groupOperations()[0].id;\n readonly _prebuiltOperationDefs = viewChildren(FilterBuilderOperationDefDirective);\n readonly _customOperationDefs = contentChildren(FilterBuilderOperationDefDirective);\n protected _operationDefs: FilterBuilderOperationDefDirective[] = [];\n\n readonly valueChanged = output<FilterBuilderGroup[]>();\n\n protected _value: FilterBuilderGroup[] = [];\n protected _operations: any[] = [];\n protected editItem: FilterBuilderCondition | undefined;\n protected _tempMultipleValue: any[] = [];\n\n ngOnInit() {\n if (this.value().length) {\n if (!this._isGroup(this.value()[0])) {\n throw new Error('Invalid filter value, first element should be a filter group');\n }\n\n this._logicalOperator = this.value()[0]['logicalOperator'] as string;\n this._value = JSON.parse(JSON.stringify(this.value()[0]['value']));\n }\n }\n\n ngAfterViewInit(): void {\n this._operationDefs = [...this._prebuiltOperationDefs(), ...this._customOperationDefs()];\n this._operationDefs.forEach(operationDef => {\n this._operations.push({\n id: operationDef.id(),\n name: operationDef.operationName()?.templateRef\n });\n operationDef.allowedDataTypes().forEach((allowedType: string) => {\n if (!this._operationAllowedTypesMap.has(allowedType)) {\n this._operationAllowedTypesMap.set(allowedType, []);\n }\n\n const allowedTypeValue = this._operationAllowedTypesMap.get(allowedType) as string[];\n allowedTypeValue.push(operationDef.id());\n this._operationAllowedTypesMap.set(allowedType, allowedTypeValue);\n });\n });\n this._cdr.detectChanges();\n }\n\n addCondition(targetGroup?: FilterBuilderGroup) {\n const value = !targetGroup ? this._value : targetGroup.value;\n value.push(\n {\n value: [this.fieldDefs()[0].dataField, this._operations[0].id, '']\n }\n );\n }\n\n addGroup(targetGroup?: FilterBuilderGroup) {\n const value = !targetGroup ? this._value : targetGroup.value;\n value.push(\n {\n logicalOperator: this.groupOperations()[0].id,\n value: []\n }\n );\n }\n\n getConditionField(dataField: string): FilterBuilderFieldDef | undefined {\n return this.fieldDefs().find(field => field.dataField === dataField);\n }\n\n getConditionOperation(id: string) {\n return this._operations.find(operation => operation.id === id);\n }\n\n getSelectedGroupOperationName(targetGroup?: FilterBuilderGroup): string {\n const groupLogicalOperatorId = targetGroup ? targetGroup.logicalOperator : this._logicalOperator\n return this.groupOperations().find(groupOperator => groupOperator.id === groupLogicalOperatorId)?.name || '';\n }\n\n selectConditionField(item: FilterBuilderCondition, field: FilterBuilderFieldDef): void {\n let allowedTypes = this._operationAllowedTypesMap.get(field.dataType) as string[];\n item['value'][0] = field.dataField;\n item['value'][1] = allowedTypes[0];\n this._resetValue(field, item);\n this.editItem = undefined;\n this._emitChangeEvent();\n }\n\n operationChanged(item: FilterBuilderCondition, operation: string): void {\n const oldOperation = item['value'][1];\n\n if (oldOperation === 'equals' && operation === 'isAnyOf') {\n item['value'][2] = [];\n } else if (oldOperation === 'isAnyOf' && operation === 'equals') {\n item['value'][2] = null;\n }\n\n if (oldOperation === 'isBetween' && operation !== 'isBetween') {\n item['value'][2] = null;\n } else if (oldOperation !== 'isBetween' && operation === 'isBetween') {\n item['value'][2] = [];\n }\n\n if (['isNotBlank', 'isBlank'].includes(operation)) {\n item['value'][2] = null;\n }\n\n item['value'][1] = operation;\n this.editItem = undefined;\n this._emitChangeEvent();\n }\n\n removeCondition(index: number, items: FilterBuilderItemType[]): void {\n items.splice(index, 1);\n this._emitChangeEvent();\n }\n\n isOperationAllowedForCondition(dataField: string, operationId: string): boolean {\n const fieldDef = this.fieldDefs().find(f =>\n f.dataField === dataField\n ) as FilterBuilderFieldDef;\n\n let allowedTypes = this._operationAllowedTypesMap.get(fieldDef.dataType);\n\n if (!allowedTypes) {\n throw new Error('There are not operations for the datatype: ' + fieldDef.dataType);\n }\n\n return allowedTypes.includes(operationId);\n }\n\n modifyValue(item: FilterBuilderCondition): void {\n this.editItem = item;\n if (this.getFieldType(item) === 'array' && item['value'][1] === 'isAnyOf') {\n this._tempMultipleValue = [...(item['value'][2] || [])];\n }\n }\n\n getFieldType(item: FilterBuilderCondition): string {\n return (this.fieldDefs().find(f =>\n f.dataField === item['value'][0]\n ) as FilterBuilderFieldDef).dataType;\n }\n\n isValueNotEmpty(item: FilterBuilderCondition): boolean {\n if (this.getFieldType(item) === 'array') {\n if (item['value'][1] === 'equals') {\n return item['value'][2] !== null && item['value'][2] !== '';\n } else {\n return item['value'][2].length > 0;\n }\n }\n\n if (item['value'][1] === 'isBetween') {\n return item['value'][2].length === 2 && item['value'][2][0] !== null && item['value'][2][1] !== null;\n }\n\n return item['value'][2] !== null && item['value'][2] !== '';\n }\n\n cancelEdit(delay = 0): void {\n setTimeout(() => {\n this.editItem = undefined;\n this._cdr.detectChanges();\n }, delay);\n }\n\n getOptions(item: FilterBuilderCondition): FilterBuilderFieldDataSourceItem[] {\n const fieldDef = this._getFieldDef(item);\n return fieldDef.lookup?.dataSource as FilterBuilderFieldDataSourceItem[];\n }\n\n getDataSourceItemNameById(item: FilterBuilderCondition, dataSourceItemId: string): string {\n const fieldDef = this._getFieldDef(item);\n return (fieldDef.lookup?.dataSource as FilterBuilderFieldDataSourceItem[]).find(\n item => item.id === dataSourceItemId\n )?.name || '';\n }\n\n selectBlur(event: FocusEvent): void {\n if (this.editItem && this.getFieldType(this.editItem) === 'array' && this.editItem['value'][1] === 'isAnyOf') {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n const select = event.target as HTMLElement;\n\n setTimeout(() => {\n const formField = select.closest('.ngs-form-field');\n\n if (formField) {\n this.cancelEdit();\n }\n }, 200);\n }\n\n selectClosed(): void {\n if (this.editItem && this.getFieldType(this.editItem) === 'array' && this.editItem['value'][1] === 'isAnyOf') {\n this.editItem['value'][2] = [...this._tempMultipleValue];\n }\n this.cancelEdit();\n setTimeout(() => {\n this._emitChangeEvent();\n });\n }\n\n protected operationIconTemplateRef(operation: FilterBuilderOperationDefDirective): TemplateRef<any> {\n return operation.operationIcon()?.templateRef as TemplateRef<any>;\n }\n\n protected operationNameTemplateRef(operation: FilterBuilderOperationDefDirective): TemplateRef<any> {\n return operation.operationName()?.templateRef as TemplateRef<any>;\n }\n\n protected _isGroup(item: FilterBuilderItemType): item is FilterBuilderGroup {\n return 'logicalOperator' in item;\n }\n\n protected _isCondition(item: FilterBuilderItemType): item is FilterBuilderCondition {\n return !('logicalOperator' in item);\n }\n\n protected _emitChangeEvent(): void {\n const value = this._normalizeValue(this._value);\n\n if (value.length > 0) {\n this.valueChanged.emit([\n {\n logicalOperator: this._logicalOperator,\n value: value\n }\n ]);\n } else {\n this.valueChanged.emit([]);\n }\n }\n\n private _getFieldDef(condition: FilterBuilderCondition): FilterBuilderFieldDef {\n return this.fieldDefs().find(f =>\n f.dataField === condition['value'][0]\n ) as FilterBuilderFieldDef;\n }\n\n private _resetValue(field: FilterBuilderFieldDef, condition: FilterBuilderCondition): void {\n const fieldDef = this.fieldDefs().find(f =>\n f.dataField === field.dataField\n ) as FilterBuilderFieldDef;\n const resetMethod = '_reset' + this._capitalizeFirstLetter(fieldDef.dataType) + 'Value';\n this._resetMethodMap[resetMethod](condition);\n }\n\n private _resetStringValue(condition: FilterBuilderCondition): void {\n condition['value'][2] = '';\n }\n\n private _resetNumberValue(condition: FilterBuilderCondition): void {\n condition['value'][2] = null;\n }\n\n private _resetArrayValue(condition: FilterBuilderCondition): void {\n if (condition['value'][1] === 'equals') {\n condition['value'][2] = null;\n } else {\n condition['value'][2] = [];\n }\n }\n\n private _resetBooleanValue(condition: FilterBuilderCondition): void {\n condition['value'][2] = false;\n }\n\n private _capitalizeFirstLetter(value: string) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n }\n\n private _normalizeValue(value: FilterBuilderItemType[]): FilterBuilderItemType[] {\n let result: FilterBuilderItemType[] = [];\n value.forEach(item => {\n if (this._isGroup(item)) {\n const groupValue = this._normalizeValue(item.value);\n\n if (groupValue.length > 0) {\n result = [...result, {\n logicalOperator: item.logicalOperator,\n value: groupValue\n }];\n }\n } else {\n if (this.isValueNotEmpty(item)) {\n result.push(item);\n }\n }\n });\n return result;\n }\n}\n","@if (_isServer) {\n <ng-content/>\n}\n\n<ng-template #itemsTpl let-items>\n <div class=\"group\">\n @for (item of items; track item; let index = $index) {\n @if (_isGroup(item)) {\n <div class=\"flex items-center group-operations\">\n <div class=\"remove\" (click)=\"removeCondition(index, items)\">\n <ngs-icon name=\"fluent:dismiss-24-regular\" class=\"font-icon\"/>\n </div>\n <button [ngsMenuTriggerFor]=\"nestedGroupOperationsMenu\"\n #nestedGroupOperationsMenuTrigger=\"ngsMenuTrigger\"\n class=\"group-operation\">\n {{ getSelectedGroupOperationName(item) }}\n </button>\n <div [ngsMenuTriggerFor]=\"addGroupMenu\" class=\"add\">\n <ngs-icon name=\"fluent:add-24-regular\" class=\"font-icon\"/>\n </div>\n <ngs-menu #nestedGroupOperationsMenu=\"ngsMenu\">\n <div ngsMenuOptionGroup [(ngModel)]=\"item['logicalOperator']\">\n @for (groupOperation of groupOperations(); track groupOperation.id) {\n <ngs-option [value]=\"groupOperation.id\"\n (click)=\"nestedGroupOperationsMenuTrigger.closeMenu('click')\">{{ groupOperation.name }}\n </ngs-option>\n }\n </div>\n </ngs-menu>\n <ngs-menu #addGroupMenu=\"ngsMenu\">\n <button ngs-menu-item (click)=\"addCondition(item)\">Add Condition</button>\n <button ngs-menu-item (click)=\"addGroup(item)\">Add Group</button>\n </ngs-menu>\n </div>\n @if (item['value'].length > 0) {\n <ng-container [ngTemplateOutlet]=\"itemsTpl\" [ngTemplateOutletContext]=\"{ $implicit: item['value'] }\"/>\n }\n } @else if (_isCondition(item)) {\n <div class=\"condition\">\n <div class=\"remove\" (click)=\"removeCondition(index, items)\">\n <ngs-icon name=\"fluent:dismiss-24-regular\" class=\"font-icon\"/>\n </div>\n <button class=\"condition-field\"\n #fieldsMenuTrigger=\"ngsMenuTrigger\"\n [ngsMenuTriggerFor]=\"fieldsMenu\">{{ getConditionField(item['value'][0])?.name }}\n </button>\n <button class=\"condition-operation\"\n #operationsMenuTrigger=\"ngsMenuTrigger\"\n [ngsMenuTriggerFor]=\"operationsMenu\">\n <ng-template [ngTemplateOutlet]=\"getConditionOperation(item['value'][1])?.name\"/>\n </button>\n <div class=\"relative\">\n @if (editItem && editItem === item) {\n <div class=\"absolute start-0 top-0 -translate-y-1/2\">\n @switch (getFieldType(editItem)) {\n @case ('array') {\n @switch (editItem['value'][1]) {\n @case ('equals') {\n <ngs-form-field class=\"form-field\">\n <ngs-select placeholder=\"Select...\"\n ngsAutoFocus\n (blur)=\"selectBlur($event)\"\n [(ngModel)]=\"item['value'][2]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n @for (option of getOptions(editItem); track option.id) {\n <ngs-option [value]=\"option.id\">{{ option.name }}</ngs-option>\n }\n </ngs-select>\n </ngs-form-field>\n }\n @case ('isAnyOf') {\n <ngs-form-field class=\"form-field\">\n <ngs-select placeholder=\"Select...\" multiple\n ngsAutoFocus\n (blur)=\"selectBlur($event)\"\n [(ngModel)]=\"_tempMultipleValue\"\n (closed)=\"selectClosed()\">\n @for (option of getOptions(editItem); track option.id) {\n <ngs-option [value]=\"option.id\">{{ option.name }}</ngs-option>\n }\n </ngs-select>\n </ngs-form-field>\n }\n }\n }\n @case ('number') {\n @switch (editItem['value'][1]) {\n @case ('isBetween') {\n <div class=\"flex gap-2 items-center\"\n ngsFocusElement (elementBlurred)=\"cancelEdit()\">\n <ngs-form-field class=\"form-field-number\">\n <input type=\"number\" ngsInput ngsAutoFocus\n [(ngModel)]=\"item['value'][2][0]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n </ngs-form-field>\n <div class=\"text-neutral-500\">&ndash;</div>\n <ngs-form-field class=\"form-field-number\">\n <input type=\"number\" ngsInput\n [(ngModel)]=\"item['value'][2][1]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n </ngs-form-field>\n </div>\n }\n @default {\n <ngs-form-field class=\"form-field-number\">\n <input type=\"number\" ngsInput ngsAutoFocus\n (blur)=\"cancelEdit()\"\n [(ngModel)]=\"item['value'][2]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n </ngs-form-field>\n }\n }\n }\n @default {\n <ngs-form-field class=\"form-field\">\n <input type=\"text\" ngsInput ngsAutoFocus\n (blur)=\"cancelEdit()\"\n [(ngModel)]=\"item['value'][2]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n </ngs-form-field>\n }\n }\n </div>\n } @else {\n @if (item['value'][1] !== 'isBlank' && item['value'][1] !== 'isNotBlank') {\n @if (isValueNotEmpty(item)) {\n @if (getFieldType(item) === 'array') {\n @if (item['value'][1] === 'equals') {\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\n {{ getDataSourceItemNameById(item, item['value'][2]) }}\n </button>\n } @else {\n <button class=\"condition-value flex items-center gap-2\" (click)=\"modifyValue(item)\">\n @for (dataSourceItemId of item['value'][2]; track dataSourceItemId; let last = $last) {\n <span>{{ getDataSourceItemNameById(item, dataSourceItemId) }}</span>\n @if (!last) {\n <span class=\"text-neutral-500\">|</span>\n }\n }\n </button>\n }\n } @else {\n @if (item['value'][1] === 'isBetween') {\n <button class=\"condition-value flex items-center gap-2\" (click)=\"modifyValue(item)\">\n <span>{{ item['value'][2][0] }}</span>\n <span class=\"text-neutral-500\">&ndash;</span>\n <span>{{ item['value'][2][1] }}</span>\n </button>\n } @else {\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\n <span>{{ item['value'][2] }}</span>\n </button>\n }\n }\n } @else {\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\n <span i18n>&lt;enter a value&gt;</span>\n </button>\n }\n }\n }\n </div>\n </div>\n <ngs-menu #fieldsMenu=\"ngsMenu\">\n <ng-template ngsMenuContent>\n <div ngsMenuOptionGroup [ngModel]=\"item['value'][0]\">\n @for (fieldDef of fieldDefs(); track fieldDef) {\n <ngs-option [value]=\"fieldDef.dataField\"\n (click)=\"selectConditionField(item, fieldDef); fieldsMenuTrigger.closeMenu('click')\">{{ fieldDef.name }}\n </ngs-option>\n }\n </div>\n </ng-template>\n </ngs-menu>\n <ngs-menu #operationsMenu=\"ngsMenu\">\n <ng-template ngsMenuContent>\n <div ngsMenuOptionGroup [ngModel]=\"item['value'][1]\">\n @for (operation of _operationDefs; track operation.id()) {\n <div [hidden]=\"!isOperationAllowedForCondition(item['value'][0], operation.id())\">\n <ngs-option [value]=\"operation.id()\"\n (click)=\"operationChanged(item, operation.id()); operationsMenuTrigger.closeMenu('click')\">\n <div class=\"flex items-center gap-3\">\n @if (operation.operationIcon()) {\n <ng-template [ngTemplateOutlet]=\"operationIconTemplateRef(operation)\"/>\n }\n <div>\n <ng-template [ngTemplateOutlet]=\"operationNameTemplateRef(operation)\"/>\n </div>\n </div>\n </ngs-option>\n </div>\n }\n </div>\n </ng-template>\n </ngs-menu>\n }\n }\n </div>\n</ng-template>\n\n<div class=\"group\">\n <div class=\"flex items-center group-operations\">\n <button [ngsMenuTriggerFor]=\"groupOperationsMenu\"\n #groupOperationsMenuTrigger=\"ngsMenuTrigger\"\n class=\"group-operation\">\n {{ getSelectedGroupOperationName() }}\n </button>\n <div [ngsMenuTriggerFor]=\"addMenu\" class=\"add\">\n <ngs-icon name=\"fluent:add-24-regular\" class=\"font-icon\"/>\n </div>\n </div>\n <ng-container [ngTemplateOutlet]=\"itemsTpl\" [ngTemplateOutletContext]=\"{ $implicit: _value }\"/>\n</div>\n\n<ngs-menu #groupOperationsMenu=\"ngsMenu\">\n <ng-template ngsMenuContent>\n <div ngsMenuOptionGroup [(ngModel)]=\"_logicalOperator\" (ngModelChange)=\"_emitChangeEvent()\">\n @for (operation of groupOperations(); track operation.id) {\n <ngs-option [value]=\"operation.id\"\n (click)=\"groupOperationsMenuTrigger.closeMenu('click')\">{{ operation.name }}\n </ngs-option>\n }\n </div>\n </ng-template>\n</ngs-menu>\n<ngs-menu #addMenu=\"ngsMenu\">\n <ng-template ngsMenuContent>\n <button ngs-menu-item (click)=\"addCondition()\">Add Condition</button>\n <button ngs-menu-item (click)=\"addGroup()\">Add Group</button>\n </ng-template>\n</ngs-menu>\n\n<ng-container ngsFilterBuilderOperationDef=\"contains\" [allowedDataTypes]=\"['string']\">\n <ng-template ngsFilterBuilderOperationName>Contains</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"doesNotContain\" [allowedDataTypes]=\"['string']\">\n <ng-template ngsFilterBuilderOperationName>Does not contain</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"startsWith\" [allowedDataTypes]=\"['string']\">\n <ng-template ngsFilterBuilderOperationName>Starts with</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"endsWith\" [allowedDataTypes]=\"['string']\">\n <ng-template ngsFilterBuilderOperationName>Ends with</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"equals\" [allowedDataTypes]=\"['string', 'number', 'array', 'boolean']\">\n <ng-template ngsFilterBuilderOperationName>Equals</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"notEquals\" [allowedDataTypes]=\"['string', 'number', 'boolean']\">\n <ng-template ngsFilterBuilderOperationName>Not equals</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isLessThen\" [allowedDataTypes]=\"['number']\">\n <ng-template ngsFilterBuilderOperationName>Is less then</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isLessThenOrEqual\" [allowedDataTypes]=\"['number']\">\n <ng-template ngsFilterBuilderOperationName>Is less then or equal to</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isGreaterThen\" [allowedDataTypes]=\"['number']\">\n <ng-template ngsFilterBuilderOperationName>Is greater then</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isGreaterThenOrEqual\" [allowedDataTypes]=\"['number']\">\n <ng-template ngsFilterBuilderOperationName>Is greater then or equal to</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isBlank\" [allowedDataTypes]=\"['string']\">\n <ng-template ngsFilterBuilderOperationName>Is blank</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isNotBlank\" [allowedDataTypes]=\"['string']\">\n <ng-template ngsFilterBuilderOperationName>Is not blank</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isBetween\" [allowedDataTypes]=\"['number']\">\n <ng-template ngsFilterBuilderOperationName>Is between</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isAnyOf\" [allowedDataTypes]=\"['array']\">\n <ng-template ngsFilterBuilderOperationName>Is any of</ng-template>\n</ng-container>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngstarter-ui-components-filter-builder.mjs","sources":["../../../projects/components/filter-builder/src/filter-builder-operation-name.directive.ts","../../../projects/components/filter-builder/src/filter-builder-operation-icon.directive.ts","../../../projects/components/filter-builder/src/filter-builder-operation-def.directive.ts","../../../projects/components/filter-builder/src/filter-builder/filter-builder.ts","../../../projects/components/filter-builder/src/filter-builder/filter-builder.html","../../../projects/components/filter-builder/ngstarter-ui-components-filter-builder.ts"],"sourcesContent":["import { Directive, inject, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[ngsFilterBuilderOperationName]',\n})\nexport class FilterBuilderOperationNameDirective {\n readonly templateRef = inject(TemplateRef);\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\n\n@Directive({\n selector: '[ngsFilterBuilderOperationIcon]',\n})\nexport class FilterBuilderOperationIconDirective {\n readonly templateRef = inject(TemplateRef);\n}\n","import { Directive, contentChild, input } from '@angular/core';\nimport { FilterBuilderOperationNameDirective } from './filter-builder-operation-name.directive';\nimport { FilterBuilderOperationIconDirective } from './filter-builder-operation-icon.directive';\n\n@Directive({\n selector: '[ngsFilterBuilderOperationDef]',\n})\nexport class FilterBuilderOperationDefDirective {\n id = input('', {\n alias: 'ngsFilterBuilderOperationDef'\n });\n allowedDataTypes = input<string[]>([]);\n readonly operationName = contentChild(FilterBuilderOperationNameDirective);\n readonly operationIcon = contentChild(FilterBuilderOperationIconDirective);\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n inject,\n OnInit,\n output,\n PLATFORM_ID,\n viewChildren,\n contentChildren, TemplateRef, input\n} from '@angular/core';\nimport { CommonModule, isPlatformServer, NgTemplateOutlet } from '@angular/common';\nimport { FilterBuilderOperationDefDirective } from '../filter-builder-operation-def.directive';\nimport {\n FilterBuilderCondition,\n FilterBuilderFieldDataSourceItem,\n FilterBuilderFieldDef,\n FilterBuilderGroup,\n FilterBuilderItemType\n} from '../types';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport { MenuTrigger, Menu, MenuItem, MenuContent, MenuOptionGroupDirective } from '@ngstarter-ui/components/menu';\nimport { FormsModule } from '@angular/forms';\nimport { Select, Option } from '@ngstarter-ui/components/select';\nimport { FilterBuilderOperationNameDirective } from '../filter-builder-operation-name.directive';\nimport { AutoFocusDirective, FocusElementDirective } from '@ngstarter-ui/components/core';\nimport { Input } from '@ngstarter-ui/components/input';\nimport { FormField } from '@ngstarter-ui/components/form-field';\n\n@Component({\n selector: 'ngs-filter-builder',\n exportAs: 'ngsFilterBuilder',\n imports: [\n CommonModule,\n Icon,\n MenuTrigger,\n Menu,\n MenuContent,\n MenuOptionGroupDirective,\n FormsModule,\n MenuItem,\n FormField,\n Select,\n Option,\n AutoFocusDirective,\n FocusElementDirective,\n Input,\n FilterBuilderOperationDefDirective,\n FilterBuilderOperationNameDirective\n ],\n templateUrl: './filter-builder.html',\n styleUrl: './filter-builder.scss',\n host: {\n 'class': 'ngs-filter-builder'\n },\n})\nexport class FilterBuilder implements OnInit, AfterViewInit {\n protected _cdr = inject(ChangeDetectorRef);\n protected _isServer = isPlatformServer(inject(PLATFORM_ID));\n protected _operationAllowedTypesMap: Map<string, string[]> = new Map();\n private _resetMethodMap: { [prop: string]: (condition: FilterBuilderCondition) => void } = {\n '_resetStringValue': this._resetStringValue,\n '_resetBooleanValue': this._resetBooleanValue,\n '_resetArrayValue': this._resetArrayValue,\n '_resetNumberValue': this._resetNumberValue,\n };\n\n value = input<FilterBuilderGroup[]>([]);\n fieldDefs = input<FilterBuilderFieldDef[]>([]);\n categories = input([]);\n groupOperations = input([\n {\n id: 'and',\n name: 'And'\n },\n {\n id: 'or',\n name: 'Or'\n }\n ]);\n customOperations = input([]);\n\n protected _logicalOperator = this.groupOperations()[0].id;\n readonly _prebuiltOperationDefs = viewChildren(FilterBuilderOperationDefDirective);\n readonly _customOperationDefs = contentChildren(FilterBuilderOperationDefDirective);\n protected _operationDefs: FilterBuilderOperationDefDirective[] = [];\n\n readonly valueChanged = output<FilterBuilderGroup[]>();\n\n protected _value: FilterBuilderGroup[] = [];\n protected _operations: any[] = [];\n protected editItem: FilterBuilderCondition | undefined;\n protected _tempMultipleValue: any[] = [];\n\n ngOnInit() {\n if (this.value().length) {\n if (!this._isGroup(this.value()[0])) {\n throw new Error('Invalid filter value, first element should be a filter group');\n }\n\n this._logicalOperator = this.value()[0]['logicalOperator'] as string;\n this._value = JSON.parse(JSON.stringify(this.value()[0]['value']));\n }\n }\n\n ngAfterViewInit(): void {\n this._operationDefs = [...this._prebuiltOperationDefs(), ...this._customOperationDefs()];\n this._operationDefs.forEach(operationDef => {\n this._operations.push({\n id: operationDef.id(),\n name: operationDef.operationName()?.templateRef\n });\n operationDef.allowedDataTypes().forEach((allowedType: string) => {\n if (!this._operationAllowedTypesMap.has(allowedType)) {\n this._operationAllowedTypesMap.set(allowedType, []);\n }\n\n const allowedTypeValue = this._operationAllowedTypesMap.get(allowedType) as string[];\n allowedTypeValue.push(operationDef.id());\n this._operationAllowedTypesMap.set(allowedType, allowedTypeValue);\n });\n });\n this._cdr.detectChanges();\n }\n\n addCondition(targetGroup?: FilterBuilderGroup) {\n const value = !targetGroup ? this._value : targetGroup.value;\n value.push(\n {\n value: [this.fieldDefs()[0].dataField, this._operations[0].id, '']\n }\n );\n }\n\n addGroup(targetGroup?: FilterBuilderGroup) {\n const value = !targetGroup ? this._value : targetGroup.value;\n value.push(\n {\n logicalOperator: this.groupOperations()[0].id,\n value: []\n }\n );\n }\n\n getConditionField(dataField: string): FilterBuilderFieldDef | undefined {\n return this.fieldDefs().find(field => field.dataField === dataField);\n }\n\n getConditionOperation(id: string) {\n return this._operations.find(operation => operation.id === id);\n }\n\n getSelectedGroupOperationName(targetGroup?: FilterBuilderGroup): string {\n const groupLogicalOperatorId = targetGroup ? targetGroup.logicalOperator : this._logicalOperator\n return this.groupOperations().find(groupOperator => groupOperator.id === groupLogicalOperatorId)?.name || '';\n }\n\n selectConditionField(item: FilterBuilderCondition, field: FilterBuilderFieldDef): void {\n let allowedTypes = this._operationAllowedTypesMap.get(field.dataType) as string[];\n item['value'][0] = field.dataField;\n item['value'][1] = allowedTypes[0];\n this._resetValue(field, item);\n this.editItem = undefined;\n this._emitChangeEvent();\n }\n\n operationChanged(item: FilterBuilderCondition, operation: string): void {\n const oldOperation = item['value'][1];\n\n if (oldOperation === 'equals' && operation === 'isAnyOf') {\n item['value'][2] = [];\n } else if (oldOperation === 'isAnyOf' && operation === 'equals') {\n item['value'][2] = null;\n }\n\n if (oldOperation === 'isBetween' && operation !== 'isBetween') {\n item['value'][2] = null;\n } else if (oldOperation !== 'isBetween' && operation === 'isBetween') {\n item['value'][2] = [];\n }\n\n if (['isNotBlank', 'isBlank'].includes(operation)) {\n item['value'][2] = null;\n }\n\n item['value'][1] = operation;\n this.editItem = undefined;\n this._emitChangeEvent();\n }\n\n removeCondition(index: number, items: FilterBuilderItemType[]): void {\n items.splice(index, 1);\n this._emitChangeEvent();\n }\n\n isOperationAllowedForCondition(dataField: string, operationId: string): boolean {\n const fieldDef = this.fieldDefs().find(f =>\n f.dataField === dataField\n ) as FilterBuilderFieldDef;\n\n let allowedTypes = this._operationAllowedTypesMap.get(fieldDef.dataType);\n\n if (!allowedTypes) {\n throw new Error('There are not operations for the datatype: ' + fieldDef.dataType);\n }\n\n return allowedTypes.includes(operationId);\n }\n\n modifyValue(item: FilterBuilderCondition): void {\n this.editItem = item;\n if (this.getFieldType(item) === 'array' && item['value'][1] === 'isAnyOf') {\n this._tempMultipleValue = [...(item['value'][2] || [])];\n }\n }\n\n getFieldType(item: FilterBuilderCondition): string {\n return (this.fieldDefs().find(f =>\n f.dataField === item['value'][0]\n ) as FilterBuilderFieldDef).dataType;\n }\n\n isValueNotEmpty(item: FilterBuilderCondition): boolean {\n if (this.getFieldType(item) === 'array') {\n if (item['value'][1] === 'equals') {\n return item['value'][2] !== null && item['value'][2] !== '';\n } else {\n return item['value'][2].length > 0;\n }\n }\n\n if (item['value'][1] === 'isBetween') {\n return item['value'][2].length === 2 && item['value'][2][0] !== null && item['value'][2][1] !== null;\n }\n\n return item['value'][2] !== null && item['value'][2] !== '';\n }\n\n cancelEdit(delay = 0): void {\n setTimeout(() => {\n this.editItem = undefined;\n this._cdr.detectChanges();\n }, delay);\n }\n\n getOptions(item: FilterBuilderCondition): FilterBuilderFieldDataSourceItem[] {\n const fieldDef = this._getFieldDef(item);\n return fieldDef.lookup?.dataSource as FilterBuilderFieldDataSourceItem[];\n }\n\n getDataSourceItemNameById(item: FilterBuilderCondition, dataSourceItemId: string): string {\n const fieldDef = this._getFieldDef(item);\n return (fieldDef.lookup?.dataSource as FilterBuilderFieldDataSourceItem[]).find(\n item => item.id === dataSourceItemId\n )?.name || '';\n }\n\n selectBlur(event: FocusEvent): void {\n if (this.editItem && this.getFieldType(this.editItem) === 'array' && this.editItem['value'][1] === 'isAnyOf') {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n const select = event.target as HTMLElement;\n\n setTimeout(() => {\n const formField = select.closest('.ngs-form-field');\n\n if (formField) {\n this.cancelEdit();\n }\n }, 200);\n }\n\n selectClosed(): void {\n if (this.editItem && this.getFieldType(this.editItem) === 'array' && this.editItem['value'][1] === 'isAnyOf') {\n this.editItem['value'][2] = [...this._tempMultipleValue];\n }\n this.cancelEdit();\n setTimeout(() => {\n this._emitChangeEvent();\n });\n }\n\n protected operationIconTemplateRef(operation: FilterBuilderOperationDefDirective): TemplateRef<any> {\n return operation.operationIcon()?.templateRef as TemplateRef<any>;\n }\n\n protected operationNameTemplateRef(operation: FilterBuilderOperationDefDirective): TemplateRef<any> {\n return operation.operationName()?.templateRef as TemplateRef<any>;\n }\n\n protected _isGroup(item: FilterBuilderItemType): item is FilterBuilderGroup {\n return 'logicalOperator' in item;\n }\n\n protected _isCondition(item: FilterBuilderItemType): item is FilterBuilderCondition {\n return !('logicalOperator' in item);\n }\n\n protected _emitChangeEvent(): void {\n const value = this._normalizeValue(this._value);\n\n if (value.length > 0) {\n this.valueChanged.emit([\n {\n logicalOperator: this._logicalOperator,\n value: value\n }\n ]);\n } else {\n this.valueChanged.emit([]);\n }\n }\n\n private _getFieldDef(condition: FilterBuilderCondition): FilterBuilderFieldDef {\n return this.fieldDefs().find(f =>\n f.dataField === condition['value'][0]\n ) as FilterBuilderFieldDef;\n }\n\n private _resetValue(field: FilterBuilderFieldDef, condition: FilterBuilderCondition): void {\n const fieldDef = this.fieldDefs().find(f =>\n f.dataField === field.dataField\n ) as FilterBuilderFieldDef;\n const resetMethod = '_reset' + this._capitalizeFirstLetter(fieldDef.dataType) + 'Value';\n this._resetMethodMap[resetMethod](condition);\n }\n\n private _resetStringValue(condition: FilterBuilderCondition): void {\n condition['value'][2] = '';\n }\n\n private _resetNumberValue(condition: FilterBuilderCondition): void {\n condition['value'][2] = null;\n }\n\n private _resetArrayValue(condition: FilterBuilderCondition): void {\n if (condition['value'][1] === 'equals') {\n condition['value'][2] = null;\n } else {\n condition['value'][2] = [];\n }\n }\n\n private _resetBooleanValue(condition: FilterBuilderCondition): void {\n condition['value'][2] = false;\n }\n\n private _capitalizeFirstLetter(value: string) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n }\n\n private _normalizeValue(value: FilterBuilderItemType[]): FilterBuilderItemType[] {\n let result: FilterBuilderItemType[] = [];\n value.forEach(item => {\n if (this._isGroup(item)) {\n const groupValue = this._normalizeValue(item.value);\n\n if (groupValue.length > 0) {\n result = [...result, {\n logicalOperator: item.logicalOperator,\n value: groupValue\n }];\n }\n } else {\n if (this.isValueNotEmpty(item)) {\n result.push(item);\n }\n }\n });\n return result;\n }\n}\n","@if (_isServer) {\n <ng-content/>\n}\n\n<ng-template #itemsTpl let-items>\n <div class=\"group\">\n @for (item of items; track item; let index = $index) {\n @if (_isGroup(item)) {\n <div class=\"flex items-center group-operations\">\n <div class=\"remove\" (click)=\"removeCondition(index, items)\">\n <ngs-icon name=\"fluent:dismiss-24-regular\" class=\"font-icon\"/>\n </div>\n <button [ngsMenuTriggerFor]=\"nestedGroupOperationsMenu\"\n #nestedGroupOperationsMenuTrigger=\"ngsMenuTrigger\"\n class=\"group-operation\">\n {{ getSelectedGroupOperationName(item) }}\n </button>\n <div [ngsMenuTriggerFor]=\"addGroupMenu\" class=\"add\">\n <ngs-icon name=\"fluent:add-24-regular\" class=\"font-icon\"/>\n </div>\n <ngs-menu #nestedGroupOperationsMenu=\"ngsMenu\">\n <div ngsMenuOptionGroup [(ngModel)]=\"item['logicalOperator']\">\n @for (groupOperation of groupOperations(); track groupOperation.id) {\n <ngs-option [value]=\"groupOperation.id\"\n (click)=\"nestedGroupOperationsMenuTrigger.closeMenu('click')\">{{ groupOperation.name }}\n </ngs-option>\n }\n </div>\n </ngs-menu>\n <ngs-menu #addGroupMenu=\"ngsMenu\">\n <button ngs-menu-item (click)=\"addCondition(item)\">Add Condition</button>\n <button ngs-menu-item (click)=\"addGroup(item)\">Add Group</button>\n </ngs-menu>\n </div>\n @if (item['value'].length > 0) {\n <ng-container [ngTemplateOutlet]=\"itemsTpl\" [ngTemplateOutletContext]=\"{ $implicit: item['value'] }\"/>\n }\n } @else if (_isCondition(item)) {\n <div class=\"condition\">\n <div class=\"remove\" (click)=\"removeCondition(index, items)\">\n <ngs-icon name=\"fluent:dismiss-24-regular\" class=\"font-icon\"/>\n </div>\n <button class=\"condition-field\"\n #fieldsMenuTrigger=\"ngsMenuTrigger\"\n [ngsMenuTriggerFor]=\"fieldsMenu\">{{ getConditionField(item['value'][0])?.name }}\n </button>\n <button class=\"condition-operation\"\n #operationsMenuTrigger=\"ngsMenuTrigger\"\n [ngsMenuTriggerFor]=\"operationsMenu\">\n <ng-template [ngTemplateOutlet]=\"getConditionOperation(item['value'][1])?.name\"/>\n </button>\n <div class=\"relative\">\n @if (editItem && editItem === item) {\n <div class=\"absolute start-0 top-0 -translate-y-1/2\">\n @switch (getFieldType(editItem)) {\n @case ('array') {\n @switch (editItem['value'][1]) {\n @case ('equals') {\n <ngs-form-field class=\"form-field\">\n <ngs-select placeholder=\"Select...\"\n ngsAutoFocus\n (blur)=\"selectBlur($event)\"\n [(ngModel)]=\"item['value'][2]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n @for (option of getOptions(editItem); track option.id) {\n <ngs-option [value]=\"option.id\">{{ option.name }}</ngs-option>\n }\n </ngs-select>\n </ngs-form-field>\n }\n @case ('isAnyOf') {\n <ngs-form-field class=\"form-field\">\n <ngs-select placeholder=\"Select...\" multiple\n ngsAutoFocus\n (blur)=\"selectBlur($event)\"\n [(ngModel)]=\"_tempMultipleValue\"\n (closed)=\"selectClosed()\">\n @for (option of getOptions(editItem); track option.id) {\n <ngs-option [value]=\"option.id\">{{ option.name }}</ngs-option>\n }\n </ngs-select>\n </ngs-form-field>\n }\n }\n }\n @case ('number') {\n @switch (editItem['value'][1]) {\n @case ('isBetween') {\n <div class=\"flex gap-2 items-center\"\n ngsFocusElement (elementBlurred)=\"cancelEdit()\">\n <ngs-form-field class=\"form-field-number\">\n <input type=\"number\" ngsInput ngsAutoFocus\n [(ngModel)]=\"item['value'][2][0]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n </ngs-form-field>\n <div class=\"text-neutral-500\">&ndash;</div>\n <ngs-form-field class=\"form-field-number\">\n <input type=\"number\" ngsInput\n [(ngModel)]=\"item['value'][2][1]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n </ngs-form-field>\n </div>\n }\n @default {\n <ngs-form-field class=\"form-field-number\">\n <input type=\"number\" ngsInput ngsAutoFocus\n (blur)=\"cancelEdit()\"\n [(ngModel)]=\"item['value'][2]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n </ngs-form-field>\n }\n }\n }\n @default {\n <ngs-form-field class=\"form-field\">\n <input type=\"text\" ngsInput ngsAutoFocus\n (blur)=\"cancelEdit()\"\n [(ngModel)]=\"item['value'][2]\"\n (ngModelChange)=\"_emitChangeEvent()\">\n </ngs-form-field>\n }\n }\n </div>\n } @else {\n @if (item['value'][1] !== 'isBlank' && item['value'][1] !== 'isNotBlank') {\n @if (isValueNotEmpty(item)) {\n @if (getFieldType(item) === 'array') {\n @if (item['value'][1] === 'equals') {\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\n {{ getDataSourceItemNameById(item, item['value'][2]) }}\n </button>\n } @else {\n <button class=\"condition-value flex items-center gap-2\" (click)=\"modifyValue(item)\">\n @for (dataSourceItemId of item['value'][2]; track dataSourceItemId; let last = $last) {\n <span>{{ getDataSourceItemNameById(item, dataSourceItemId) }}</span>\n @if (!last) {\n <span class=\"text-neutral-500\">|</span>\n }\n }\n </button>\n }\n } @else {\n @if (item['value'][1] === 'isBetween') {\n <button class=\"condition-value flex items-center gap-2\" (click)=\"modifyValue(item)\">\n <span>{{ item['value'][2][0] }}</span>\n <span class=\"text-neutral-500\">&ndash;</span>\n <span>{{ item['value'][2][1] }}</span>\n </button>\n } @else {\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\n <span>{{ item['value'][2] }}</span>\n </button>\n }\n }\n } @else {\n <button class=\"condition-value\" (click)=\"modifyValue(item)\">\n <span i18n>&lt;enter a value&gt;</span>\n </button>\n }\n }\n }\n </div>\n </div>\n <ngs-menu #fieldsMenu=\"ngsMenu\">\n <ng-template ngsMenuContent>\n <div ngsMenuOptionGroup [ngModel]=\"item['value'][0]\">\n @for (fieldDef of fieldDefs(); track fieldDef) {\n <ngs-option [value]=\"fieldDef.dataField\"\n (click)=\"selectConditionField(item, fieldDef); fieldsMenuTrigger.closeMenu('click')\">{{ fieldDef.name }}\n </ngs-option>\n }\n </div>\n </ng-template>\n </ngs-menu>\n <ngs-menu #operationsMenu=\"ngsMenu\">\n <ng-template ngsMenuContent>\n <div ngsMenuOptionGroup [ngModel]=\"item['value'][1]\">\n @for (operation of _operationDefs; track operation.id()) {\n <div [hidden]=\"!isOperationAllowedForCondition(item['value'][0], operation.id())\">\n <ngs-option [value]=\"operation.id()\"\n (click)=\"operationChanged(item, operation.id()); operationsMenuTrigger.closeMenu('click')\">\n <div class=\"flex items-center gap-3\">\n @if (operation.operationIcon()) {\n <ng-template [ngTemplateOutlet]=\"operationIconTemplateRef(operation)\"/>\n }\n <div>\n <ng-template [ngTemplateOutlet]=\"operationNameTemplateRef(operation)\"/>\n </div>\n </div>\n </ngs-option>\n </div>\n }\n </div>\n </ng-template>\n </ngs-menu>\n }\n }\n </div>\n</ng-template>\n\n<div class=\"group\">\n <div class=\"flex items-center group-operations\">\n <button [ngsMenuTriggerFor]=\"groupOperationsMenu\"\n #groupOperationsMenuTrigger=\"ngsMenuTrigger\"\n class=\"group-operation\">\n {{ getSelectedGroupOperationName() }}\n </button>\n <div [ngsMenuTriggerFor]=\"addMenu\" class=\"add\">\n <ngs-icon name=\"fluent:add-24-regular\" class=\"font-icon\"/>\n </div>\n </div>\n <ng-container [ngTemplateOutlet]=\"itemsTpl\" [ngTemplateOutletContext]=\"{ $implicit: _value }\"/>\n</div>\n\n<ngs-menu #groupOperationsMenu=\"ngsMenu\">\n <ng-template ngsMenuContent>\n <div ngsMenuOptionGroup [(ngModel)]=\"_logicalOperator\" (ngModelChange)=\"_emitChangeEvent()\">\n @for (operation of groupOperations(); track operation.id) {\n <ngs-option [value]=\"operation.id\"\n (click)=\"groupOperationsMenuTrigger.closeMenu('click')\">{{ operation.name }}\n </ngs-option>\n }\n </div>\n </ng-template>\n</ngs-menu>\n<ngs-menu #addMenu=\"ngsMenu\">\n <ng-template ngsMenuContent>\n <button ngs-menu-item (click)=\"addCondition()\">Add Condition</button>\n <button ngs-menu-item (click)=\"addGroup()\">Add Group</button>\n </ng-template>\n</ngs-menu>\n\n<ng-container ngsFilterBuilderOperationDef=\"contains\" [allowedDataTypes]=\"['string']\">\n <ng-template ngsFilterBuilderOperationName>Contains</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"doesNotContain\" [allowedDataTypes]=\"['string']\">\n <ng-template ngsFilterBuilderOperationName>Does not contain</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"startsWith\" [allowedDataTypes]=\"['string']\">\n <ng-template ngsFilterBuilderOperationName>Starts with</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"endsWith\" [allowedDataTypes]=\"['string']\">\n <ng-template ngsFilterBuilderOperationName>Ends with</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"equals\" [allowedDataTypes]=\"['string', 'number', 'array', 'boolean']\">\n <ng-template ngsFilterBuilderOperationName>Equals</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"notEquals\" [allowedDataTypes]=\"['string', 'number', 'boolean']\">\n <ng-template ngsFilterBuilderOperationName>Not equals</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isLessThen\" [allowedDataTypes]=\"['number']\">\n <ng-template ngsFilterBuilderOperationName>Is less then</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isLessThenOrEqual\" [allowedDataTypes]=\"['number']\">\n <ng-template ngsFilterBuilderOperationName>Is less then or equal to</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isGreaterThen\" [allowedDataTypes]=\"['number']\">\n <ng-template ngsFilterBuilderOperationName>Is greater then</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isGreaterThenOrEqual\" [allowedDataTypes]=\"['number']\">\n <ng-template ngsFilterBuilderOperationName>Is greater then or equal to</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isBlank\" [allowedDataTypes]=\"['string']\">\n <ng-template ngsFilterBuilderOperationName>Is blank</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isNotBlank\" [allowedDataTypes]=\"['string']\">\n <ng-template ngsFilterBuilderOperationName>Is not blank</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isBetween\" [allowedDataTypes]=\"['number']\">\n <ng-template ngsFilterBuilderOperationName>Is between</ng-template>\n</ng-container>\n<ng-container ngsFilterBuilderOperationDef=\"isAnyOf\" [allowedDataTypes]=\"['array']\">\n <ng-template ngsFilterBuilderOperationName>Is any of</ng-template>\n</ng-container>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;MAKa,mCAAmC,CAAA;AACrC,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;uGAD/B,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnC,mCAAmC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAnC,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAH/C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iCAAiC;AAC5C,iBAAA;;;MCCY,mCAAmC,CAAA;AACrC,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;uGAD/B,mCAAmC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnC,mCAAmC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAnC,mCAAmC,EAAA,UAAA,EAAA,CAAA;kBAH/C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iCAAiC;AAC5C,iBAAA;;;MCGY,kCAAkC,CAAA;IAC7C,EAAE,GAAG,KAAK,CAAC,EAAE,0EACX,KAAK,EAAE,8BAA8B,EAAA,CACrC;AACF,IAAA,gBAAgB,GAAG,KAAK,CAAW,EAAE,uFAAC;AAC7B,IAAA,aAAa,GAAG,YAAY,CAAC,mCAAmC,oFAAC;AACjE,IAAA,aAAa,GAAG,YAAY,CAAC,mCAAmC,oFAAC;uGAN/D,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlC,kCAAkC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,8BAAA,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,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAKP,mCAAmC,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,eAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EACnC,mCAAmC,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAN9D,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAH9C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gCAAgC;AAC3C,iBAAA;AAMuC,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,EAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,8BAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,mCAAmC,+FACnC,mCAAmC,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;MC2C9D,aAAa,CAAA;AACd,IAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAChC,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACjD,IAAA,yBAAyB,GAA0B,IAAI,GAAG,EAAE;AAC9D,IAAA,eAAe,GAAoE;QACzF,mBAAmB,EAAE,IAAI,CAAC,iBAAiB;QAC3C,oBAAoB,EAAE,IAAI,CAAC,kBAAkB;QAC7C,kBAAkB,EAAE,IAAI,CAAC,gBAAgB;QACzC,mBAAmB,EAAE,IAAI,CAAC,iBAAiB;KAC5C;AAED,IAAA,KAAK,GAAG,KAAK,CAAuB,EAAE,4EAAC;AACvC,IAAA,SAAS,GAAG,KAAK,CAA0B,EAAE,gFAAC;AAC9C,IAAA,UAAU,GAAG,KAAK,CAAC,EAAE,iFAAC;IACtB,eAAe,GAAG,KAAK,CAAC;AACtB,QAAA;AACE,YAAA,EAAE,EAAE,KAAK;AACT,YAAA,IAAI,EAAE;AACP,SAAA;AACD,QAAA;AACE,YAAA,EAAE,EAAE,IAAI;AACR,YAAA,IAAI,EAAE;AACP;AACF,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AACF,IAAA,gBAAgB,GAAG,KAAK,CAAC,EAAE,uFAAC;IAElB,gBAAgB,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;AAChD,IAAA,sBAAsB,GAAG,YAAY,CAAC,kCAAkC,6FAAC;AACzE,IAAA,oBAAoB,GAAG,eAAe,CAAC,kCAAkC,2FAAC;IACzE,cAAc,GAAyC,EAAE;IAE1D,YAAY,GAAG,MAAM,EAAwB;IAE5C,MAAM,GAAyB,EAAE;IACjC,WAAW,GAAU,EAAE;AACvB,IAAA,QAAQ;IACR,kBAAkB,GAAU,EAAE;IAExC,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE;AACvB,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;AACnC,gBAAA,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC;YACjF;AAEA,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAW;YACpE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACpE;IACF;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,sBAAsB,EAAE,EAAE,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;AACxF,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,IAAG;AACzC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACpB,gBAAA,EAAE,EAAE,YAAY,CAAC,EAAE,EAAE;AACrB,gBAAA,IAAI,EAAE,YAAY,CAAC,aAAa,EAAE,EAAE;AACrC,aAAA,CAAC;YACF,YAAY,CAAC,gBAAgB,EAAE,CAAC,OAAO,CAAC,CAAC,WAAmB,KAAI;gBAC9D,IAAI,CAAC,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;oBACpD,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;gBACrD;gBAEA,MAAM,gBAAgB,GAAG,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,WAAW,CAAa;gBACpF,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;gBACxC,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,WAAW,EAAE,gBAAgB,CAAC;AACnE,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;IAC3B;AAEA,IAAA,YAAY,CAAC,WAAgC,EAAA;AAC3C,QAAA,MAAM,KAAK,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,KAAK;QAC5D,KAAK,CAAC,IAAI,CACR;YACE,KAAK,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE;AAClE,SAAA,CACF;IACH;AAEA,IAAA,QAAQ,CAAC,WAAgC,EAAA;AACvC,QAAA,MAAM,KAAK,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,KAAK;QAC5D,KAAK,CAAC,IAAI,CACR;YACE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;AAC7C,YAAA,KAAK,EAAE;AACR,SAAA,CACF;IACH;AAEA,IAAA,iBAAiB,CAAC,SAAiB,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC;IACtE;AAEA,IAAA,qBAAqB,CAAC,EAAU,EAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;IAChE;AAEA,IAAA,6BAA6B,CAAC,WAAgC,EAAA;AAC5D,QAAA,MAAM,sBAAsB,GAAG,WAAW,GAAG,WAAW,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB;QAChG,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,aAAa,IAAI,aAAa,CAAC,EAAE,KAAK,sBAAsB,CAAC,EAAE,IAAI,IAAI,EAAE;IAC9G;IAEA,oBAAoB,CAAC,IAA4B,EAAE,KAA4B,EAAA;AAC7E,QAAA,IAAI,YAAY,GAAG,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAa;QACjF,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS;QAClC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;QACzB,IAAI,CAAC,gBAAgB,EAAE;IACzB;IAEA,gBAAgB,CAAC,IAA4B,EAAE,SAAiB,EAAA;QAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAErC,IAAI,YAAY,KAAK,QAAQ,IAAI,SAAS,KAAK,SAAS,EAAE;YACxD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;QACvB;aAAO,IAAI,YAAY,KAAK,SAAS,IAAI,SAAS,KAAK,QAAQ,EAAE;YAC/D,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;QACzB;QAEA,IAAI,YAAY,KAAK,WAAW,IAAI,SAAS,KAAK,WAAW,EAAE;YAC7D,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;QACzB;aAAO,IAAI,YAAY,KAAK,WAAW,IAAI,SAAS,KAAK,WAAW,EAAE;YACpE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;QACvB;QAEA,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;YACjD,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;QACzB;QAEA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;AAC5B,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;QACzB,IAAI,CAAC,gBAAgB,EAAE;IACzB;IAEA,eAAe,CAAC,KAAa,EAAE,KAA8B,EAAA;AAC3D,QAAA,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QACtB,IAAI,CAAC,gBAAgB,EAAE;IACzB;IAEA,8BAA8B,CAAC,SAAiB,EAAE,WAAmB,EAAA;AACnE,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,IACtC,CAAC,CAAC,SAAS,KAAK,SAAS,CACD;AAE1B,QAAA,IAAI,YAAY,GAAG,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAExE,IAAI,CAAC,YAAY,EAAE;YACjB,MAAM,IAAI,KAAK,CAAC,6CAA6C,GAAG,QAAQ,CAAC,QAAQ,CAAC;QACpF;AAEA,QAAA,OAAO,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC3C;AAEA,IAAA,WAAW,CAAC,IAA4B,EAAA;AACtC,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;AACzE,YAAA,IAAI,CAAC,kBAAkB,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACzD;IACF;AAEA,IAAA,YAAY,CAAC,IAA4B,EAAA;QACvC,OAAQ,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,IAC7B,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CACP,CAAC,QAAQ;IACtC;AAEA,IAAA,eAAe,CAAC,IAA4B,EAAA;QAC1C,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE;YACvC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;AACjC,gBAAA,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;YAC7D;iBAAO;gBACL,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;YACpC;QACF;QAEA,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE;AACpC,YAAA,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI;QACtG;AAEA,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;IAC7D;IAEA,UAAU,CAAC,KAAK,GAAG,CAAC,EAAA;QAClB,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;AACzB,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;QAC3B,CAAC,EAAE,KAAK,CAAC;IACX;AAEA,IAAA,UAAU,CAAC,IAA4B,EAAA;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACxC,QAAA,OAAO,QAAQ,CAAC,MAAM,EAAE,UAAgD;IAC1E;IAEA,yBAAyB,CAAC,IAA4B,EAAE,gBAAwB,EAAA;QAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;QACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAiD,EAAC,IAAI,CAC7E,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,gBAAgB,CACrC,EAAE,IAAI,IAAI,EAAE;IACf;AAEA,IAAA,UAAU,CAAC,KAAiB,EAAA;QAC1B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;YAC5G;QACF;QACA,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB;QAE1C,UAAU,CAAC,MAAK;YACd,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC;YAEnD,IAAI,SAAS,EAAE;gBACb,IAAI,CAAC,UAAU,EAAE;YACnB;QACF,CAAC,EAAE,GAAG,CAAC;IACT;IAEA,YAAY,GAAA;QACV,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;AAC5G,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAC1D;QACA,IAAI,CAAC,UAAU,EAAE;QACjB,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,gBAAgB,EAAE;AACzB,QAAA,CAAC,CAAC;IACJ;AAEU,IAAA,wBAAwB,CAAC,SAA6C,EAAA;AAC9E,QAAA,OAAO,SAAS,CAAC,aAAa,EAAE,EAAE,WAA+B;IACnE;AAEU,IAAA,wBAAwB,CAAC,SAA6C,EAAA;AAC9E,QAAA,OAAO,SAAS,CAAC,aAAa,EAAE,EAAE,WAA+B;IACnE;AAEU,IAAA,QAAQ,CAAC,IAA2B,EAAA;QAC5C,OAAO,iBAAiB,IAAI,IAAI;IAClC;AAEU,IAAA,YAAY,CAAC,IAA2B,EAAA;AAChD,QAAA,OAAO,EAAE,iBAAiB,IAAI,IAAI,CAAC;IACrC;IAEU,gBAAgB,GAAA;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;AAE/C,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AACpB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,gBAAA;oBACE,eAAe,EAAE,IAAI,CAAC,gBAAgB;AACtC,oBAAA,KAAK,EAAE;AACR;AACF,aAAA,CAAC;QACJ;aAAO;AACL,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B;IACF;AAEQ,IAAA,YAAY,CAAC,SAAiC,EAAA;QACpD,OAAQ,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,IAC7B,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CACb;IAC5B;IAEQ,WAAW,CAAC,KAA4B,EAAE,SAAiC,EAAA;QACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,IACtC,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,CACP;AAC1B,QAAA,MAAM,WAAW,GAAG,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,OAAO;QACvF,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC;IAC9C;AAEQ,IAAA,iBAAiB,CAAC,SAAiC,EAAA;QACzD,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;IAC5B;AAEQ,IAAA,iBAAiB,CAAC,SAAiC,EAAA;QACzD,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAC9B;AAEQ,IAAA,gBAAgB,CAAC,SAAiC,EAAA;QACxD,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;YACtC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;QAC9B;aAAO;YACL,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;QAC5B;IACF;AAEQ,IAAA,kBAAkB,CAAC,SAAiC,EAAA;QAC1D,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;IAC/B;AAEQ,IAAA,sBAAsB,CAAC,KAAa,EAAA;AAC1C,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD;AAEQ,IAAA,eAAe,CAAC,KAA8B,EAAA;QACpD,IAAI,MAAM,GAA4B,EAAE;AACxC,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;AACnB,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;gBACvB,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;AAEnD,gBAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,oBAAA,MAAM,GAAG,CAAC,GAAG,MAAM,EAAE;4BACnB,eAAe,EAAE,IAAI,CAAC,eAAe;AACrC,4BAAA,KAAK,EAAE;AACR,yBAAA,CAAC;gBACJ;YACF;iBAAO;AACL,gBAAA,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE;AAC9B,oBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;gBACnB;YACF;AACF,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,MAAM;IACf;uGA5TW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,44BA4BwB,kCAAkC,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,SAAA,EADnC,kCAAkC,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnFnF,msbAkRA,EAAA,MAAA,EAAA,CAAA,yxRAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDjPI,YAAY,EAAA,EAAA,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,EACZ,IAAI,8FACJ,WAAW,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,mBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,4BAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,IAAI,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,WAAW,EAAA,QAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,wBAAwB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACxB,WAAW,ixBACX,QAAQ,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,MAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACR,SAAS,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,EAAA,oBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACT,MAAM,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,eAAA,EAAA,WAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,QAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,MAAM,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,kBAAkB,iHAClB,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,gBAAA,EAAA,gBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACrB,KAAK,EAAA,QAAA,EAAA,qCAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,aAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACL,kCAAkC,yIAClC,mCAAmC,EAAA,QAAA,EAAA,iCAAA,EAAA,CAAA,EAAA,CAAA;;2FAQ1B,aAAa,EAAA,UAAA,EAAA,CAAA;kBA3BzB,SAAS;+BACE,oBAAoB,EAAA,QAAA,EACpB,kBAAkB,EAAA,OAAA,EACnB;wBACP,YAAY;wBACZ,IAAI;wBACJ,WAAW;wBACX,IAAI;wBACJ,WAAW;wBACX,wBAAwB;wBACxB,WAAW;wBACX,QAAQ;wBACR,SAAS;wBACT,MAAM;wBACN,MAAM;wBACN,kBAAkB;wBAClB,qBAAqB;wBACrB,KAAK;wBACL,kCAAkC;wBAClC;qBACD,EAAA,IAAA,EAGK;AACJ,wBAAA,OAAO,EAAE;AACV,qBAAA,EAAA,QAAA,EAAA,msbAAA,EAAA,MAAA,EAAA,CAAA,yxRAAA,CAAA,EAAA;AA6B8C,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,kCAAkC,yGACjC,kCAAkC,CAAA,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEpFpF;;AAEG;;;;"}