@masterteam/components 0.0.123 → 0.0.125
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/common.css +1 -1
- package/assets/i18n/ar.json +94 -36
- package/assets/i18n/en.json +37 -0
- package/fesm2022/masterteam-components-client-page.mjs +72 -5
- package/fesm2022/masterteam-components-client-page.mjs.map +1 -1
- package/fesm2022/masterteam-components-date-field.mjs +1 -2
- package/fesm2022/masterteam-components-date-field.mjs.map +1 -1
- package/fesm2022/masterteam-components-entities.mjs +16 -11
- package/fesm2022/masterteam-components-entities.mjs.map +1 -1
- package/fesm2022/masterteam-components-formula.mjs +7 -10
- package/fesm2022/masterteam-components-formula.mjs.map +1 -1
- package/fesm2022/masterteam-components-menu.mjs +1 -2
- package/fesm2022/masterteam-components-menu.mjs.map +1 -1
- package/fesm2022/masterteam-components-page-header.mjs +2 -2
- package/fesm2022/masterteam-components-page-header.mjs.map +1 -1
- package/fesm2022/masterteam-components-property-filter-builder.mjs +7 -4
- package/fesm2022/masterteam-components-property-filter-builder.mjs.map +1 -1
- package/fesm2022/masterteam-components-radio-cards-field.mjs +65 -10
- package/fesm2022/masterteam-components-radio-cards-field.mjs.map +1 -1
- package/fesm2022/masterteam-components-table.mjs +180 -36
- package/fesm2022/masterteam-components-table.mjs.map +1 -1
- package/fesm2022/masterteam-components-text-field.mjs +9 -1
- package/fesm2022/masterteam-components-text-field.mjs.map +1 -1
- package/fesm2022/masterteam-components-textarea-field.mjs +9 -1
- package/fesm2022/masterteam-components-textarea-field.mjs.map +1 -1
- package/fesm2022/masterteam-components-topbar.mjs +2 -2
- package/fesm2022/masterteam-components-topbar.mjs.map +1 -1
- package/package.json +1 -1
- package/types/masterteam-components-client-page.d.ts +18 -4
- package/types/masterteam-components-entities.d.ts +2 -1
- package/types/masterteam-components-formula.d.ts +0 -4
- package/types/masterteam-components-property-filter-builder.d.ts +2 -2
- package/types/masterteam-components-radio-cards-field.d.ts +8 -4
- package/types/masterteam-components-table.d.ts +15 -1
|
@@ -3,7 +3,6 @@ import { viewChild, contentChild, TemplateRef, input, booleanAttribute, model, o
|
|
|
3
3
|
import { Menu as Menu$1 } from 'primeng/menu';
|
|
4
4
|
import * as i1 from 'primeng/api';
|
|
5
5
|
import { SharedModule } from 'primeng/api';
|
|
6
|
-
import { Icon } from '@masterteam/icons';
|
|
7
6
|
import { Avatar } from '@masterteam/components/avatar';
|
|
8
7
|
import { NgTemplateOutlet } from '@angular/common';
|
|
9
8
|
|
|
@@ -123,7 +122,7 @@ class Menu {
|
|
|
123
122
|
}
|
|
124
123
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: Menu, decorators: [{
|
|
125
124
|
type: Component,
|
|
126
|
-
args: [{ selector: 'mt-menu', standalone: true, imports: [Menu$1,
|
|
125
|
+
args: [{ selector: 'mt-menu', standalone: true, imports: [Menu$1, Avatar, SharedModule, NgTemplateOutlet], template: "<p-menu\r\n #menu\r\n [model]=\"transformedModel()\"\r\n [popup]=\"popup()\"\r\n [appendTo]=\"appendTo()\"\r\n [style]=\"style()\"\r\n [styleClass]=\"styleClass()\"\r\n [autoZIndex]=\"autoZIndex()\"\r\n [baseZIndex]=\"baseZIndex()\"\r\n [showTransitionOptions]=\"showTransitionOptions()\"\r\n [hideTransitionOptions]=\"hideTransitionOptions()\"\r\n [ariaLabel]=\"ariaLabel()\"\r\n [ariaLabelledBy]=\"ariaLabelledBy()\"\r\n [id]=\"id()\"\r\n [tabindex]=\"tabindex()\"\r\n (onShow)=\"onShow.emit($event)\"\r\n (onHide)=\"onHide.emit($event)\"\r\n (onBlur)=\"onBlur.emit($event)\"\r\n (onFocus)=\"onFocus.emit($event)\"\r\n>\r\n @if (startTemplate()) {\r\n <ng-template pTemplate=\"start\">\r\n <ng-container *ngTemplateOutlet=\"startTemplate()!\" />\r\n </ng-template>\r\n }\r\n\r\n @if (endTemplate()) {\r\n <ng-template pTemplate=\"end\">\r\n <ng-container *ngTemplateOutlet=\"endTemplate()!\" />\r\n </ng-template>\r\n }\r\n\r\n @if (headerTemplate()) {\r\n <ng-template pTemplate=\"header\">\r\n <ng-container *ngTemplateOutlet=\"headerTemplate()!\" />\r\n </ng-template>\r\n }\r\n\r\n @if (submenuHeaderTemplate()) {\r\n <ng-template pTemplate=\"submenuheader\" let-item>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n submenuHeaderTemplate()!;\r\n context: { $implicit: item }\r\n \"\r\n />\r\n </ng-template>\r\n }\r\n\r\n <ng-template pTemplate=\"item\" let-item>\r\n <div\r\n class=\"flex gap-2 align-middle items-center p-2 cursor-pointer rounded transition-colors\"\r\n [class]=\"item.computedClass\"\r\n >\r\n @if (getItemIcon(item)) {\r\n <mt-avatar\r\n [style]=\"getAvatarStyle(getItemColor(item) || 'gray')\"\r\n [icon]=\"getItemIcon(item)!\"\r\n shape=\"square\"\r\n size=\"normal\"\r\n />\r\n }\r\n @if (item.label) {\r\n <span class=\"p-menu-item-label\">{{ item.label }}</span>\r\n }\r\n @if (item.badge) {\r\n <span class=\"p-menu-item-badge\">{{ item.badge }}</span>\r\n }\r\n </div>\r\n </ng-template>\r\n</p-menu>\r\n", styles: [":host{display:contents}\n"] }]
|
|
127
126
|
}], propDecorators: { menuRef: [{ type: i0.ViewChild, args: ['menu', { ...{ read: Menu$1 }, isSignal: true }] }], startTemplate: [{ type: i0.ContentChild, args: ['start', { ...{ read: TemplateRef }, isSignal: true }] }], endTemplate: [{ type: i0.ContentChild, args: ['end', { ...{ read: TemplateRef }, isSignal: true }] }], headerTemplate: [{ type: i0.ContentChild, args: ['header', { ...{ read: TemplateRef }, isSignal: true }] }], submenuHeaderTemplate: [{ type: i0.ContentChild, args: ['submenuheader', { ...{
|
|
128
127
|
read: TemplateRef,
|
|
129
128
|
}, isSignal: true }] }], model: [{ type: i0.Input, args: [{ isSignal: true, alias: "model", required: false }] }], popup: [{ type: i0.Input, args: [{ isSignal: true, alias: "popup", required: false }] }], appendTo: [{ type: i0.Input, args: [{ isSignal: true, alias: "appendTo", required: false }] }], style: [{ type: i0.Input, args: [{ isSignal: true, alias: "style", required: false }] }], styleClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "styleClass", required: false }] }], autoZIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoZIndex", required: false }] }], baseZIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "baseZIndex", required: false }] }], showTransitionOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTransitionOptions", required: false }] }], hideTransitionOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideTransitionOptions", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], ariaLabelledBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabelledBy", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], tabindex: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabindex", required: false }] }], activeItemId: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeItemId", required: false }] }, { type: i0.Output, args: ["activeItemIdChange"] }], onShow: [{ type: i0.Output, args: ["onShow"] }], onHide: [{ type: i0.Output, args: ["onHide"] }], onBlur: [{ type: i0.Output, args: ["onBlur"] }], onFocus: [{ type: i0.Output, args: ["onFocus"] }], onItemSelect: [{ type: i0.Output, args: ["onItemSelect"] }] } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"masterteam-components-menu.mjs","sources":["../../../../packages/masterteam/components/menu/menu.ts","../../../../packages/masterteam/components/menu/menu.html","../../../../packages/masterteam/components/menu/masterteam-components-menu.ts"],"sourcesContent":["import {\r\n Component,\r\n input,\r\n output,\r\n booleanAttribute,\r\n computed,\r\n viewChild,\r\n contentChild,\r\n TemplateRef,\r\n model,\r\n} from '@angular/core';\r\nimport { Menu as PrimeMenu } from 'primeng/menu';\r\nimport { MenuItem, SharedModule } from 'primeng/api';\r\nimport { Icon, MTIcon } from '@masterteam/icons';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { ButtonSeverity } from 'primeng/button';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\n\r\nexport interface MTMenuItem extends Omit<MenuItem, 'icon'> {\r\n icon?: MTIcon;\r\n color?: string;\r\n severity?: ButtonSeverity | 'danger';\r\n styleClass?: string;\r\n id?: string | number;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-menu',\r\n standalone: true,\r\n imports: [PrimeMenu, Icon, Avatar, SharedModule, NgTemplateOutlet],\r\n templateUrl: './menu.html',\r\n styleUrls: ['./menu.scss'],\r\n})\r\nexport class Menu {\r\n menuRef = viewChild.required('menu', { read: PrimeMenu });\r\n\r\n readonly startTemplate = contentChild('start', { read: TemplateRef });\r\n readonly endTemplate = contentChild('end', { read: TemplateRef });\r\n readonly headerTemplate = contentChild('header', { read: TemplateRef });\r\n readonly submenuHeaderTemplate = contentChild('submenuheader', {\r\n read: TemplateRef,\r\n });\r\n\r\n readonly model = input<MTMenuItem[]>([]);\r\n readonly popup = input<boolean, unknown>(true, {\r\n transform: booleanAttribute,\r\n });\r\n readonly appendTo = input<any>('body');\r\n readonly style = input<Record<string, any> | null>();\r\n readonly styleClass = input<string>();\r\n readonly autoZIndex = input<boolean, unknown>(true, {\r\n transform: booleanAttribute,\r\n });\r\n readonly baseZIndex = input<number>(0);\r\n readonly showTransitionOptions = input<string>(\r\n '0.12s cubic-bezier(0, 0, 0.2, 1)',\r\n );\r\n readonly hideTransitionOptions = input<string>('0.1s linear');\r\n readonly ariaLabel = input<string>();\r\n readonly ariaLabelledBy = input<string>();\r\n readonly id = input<string>();\r\n readonly tabindex = input<number>(0);\r\n\r\n readonly activeItemId = model<string | number | undefined>();\r\n\r\n readonly onShow = output<any>();\r\n readonly onHide = output<any>();\r\n readonly onBlur = output<Event>();\r\n readonly onFocus = output<Event>();\r\n readonly onItemSelect = output<MTMenuItem>();\r\n\r\n transformedModel = computed(() => {\r\n return this.model().map((item) =>\r\n this.transformMenuItem(item, this.activeItemId()),\r\n );\r\n });\r\n\r\n toggle(event: Event): void {\r\n this.menuRef().toggle(event);\r\n }\r\n\r\n show(event: Event): void {\r\n this.menuRef().show(event);\r\n }\r\n\r\n hide(): void {\r\n this.menuRef().hide();\r\n }\r\n\r\n protected getItemIcon(item: any): MTIcon | undefined {\r\n return item?.mtIcon;\r\n }\r\n\r\n protected getItemColor(item: any): string | undefined {\r\n return item?.mtColor;\r\n }\r\n\r\n protected getAvatarStyle(color: string): Record<string, string> {\r\n if (color.startsWith('#')) {\r\n return {\r\n '--p-avatar-background': color + '1a',\r\n '--p-avatar-color': color,\r\n };\r\n }\r\n return {\r\n '--p-avatar-background': `var(--p-${color}-100)`,\r\n '--p-avatar-color': `var(--p-${color}-700)`,\r\n };\r\n }\r\n\r\n private transformMenuItem(item: MTMenuItem, activeId?: string | number): any {\r\n const transformed: any = { ...item };\r\n\r\n if (item.icon) {\r\n transformed.mtIcon = item.icon;\r\n delete transformed.icon;\r\n }\r\n\r\n if (item.color) {\r\n transformed.mtColor = item.color;\r\n }\r\n\r\n const classes: string[] = [];\r\n const isActive = activeId && item.id && item.id === activeId;\r\n\r\n if (isActive) {\r\n classes.push(\r\n 'bg-primary-50',\r\n 'text-primary-700',\r\n 'dark:bg-primary-900/20',\r\n 'dark:text-primary-300',\r\n );\r\n } else if (item.severity) {\r\n const severityClass = this.getSeverityClass(item.severity);\r\n if (severityClass) {\r\n classes.push(severityClass);\r\n }\r\n }\r\n\r\n if (item.styleClass) {\r\n classes.push(item.styleClass);\r\n }\r\n\r\n transformed.computedClass = classes.join(' ');\r\n\r\n if (item['items']) {\r\n transformed['items'] = item['items'].map((subItem: any) =>\r\n this.transformMenuItem(subItem as MTMenuItem, activeId),\r\n );\r\n }\r\n\r\n const originalCommand = transformed.command;\r\n transformed.command = (event: any) => {\r\n if (item.id) {\r\n this.handleItemSelect(item);\r\n }\r\n\r\n if (originalCommand) {\r\n originalCommand(event);\r\n }\r\n };\r\n\r\n return transformed;\r\n }\r\n\r\n private getSeverityClass(severity: string): string {\r\n const severityMap: Record<string, string> = {\r\n danger: 'text-red-600 hover:bg-red-50 hover:text-red-700',\r\n warn: 'text-yellow-600 hover:bg-yellow-50 hover:text-yellow-700',\r\n success: 'text-green-600 hover:bg-green-50 hover:text-green-700',\r\n info: 'text-blue-600 hover:bg-blue-50 hover:text-blue-700',\r\n help: 'text-purple-600 hover:bg-purple-50 hover:text-purple-700',\r\n secondary: 'text-gray-600 hover:bg-gray-50 hover:text-gray-700',\r\n contrast: 'text-gray-900 hover:bg-gray-100',\r\n };\r\n\r\n return severityMap[severity] || '';\r\n }\r\n\r\n private handleItemSelect(item: MTMenuItem): void {\r\n if (item.id) {\r\n this.activeItemId.set(item.id);\r\n }\r\n this.onItemSelect.emit(item);\r\n }\r\n}\r\n","<p-menu\r\n #menu\r\n [model]=\"transformedModel()\"\r\n [popup]=\"popup()\"\r\n [appendTo]=\"appendTo()\"\r\n [style]=\"style()\"\r\n [styleClass]=\"styleClass()\"\r\n [autoZIndex]=\"autoZIndex()\"\r\n [baseZIndex]=\"baseZIndex()\"\r\n [showTransitionOptions]=\"showTransitionOptions()\"\r\n [hideTransitionOptions]=\"hideTransitionOptions()\"\r\n [ariaLabel]=\"ariaLabel()\"\r\n [ariaLabelledBy]=\"ariaLabelledBy()\"\r\n [id]=\"id()\"\r\n [tabindex]=\"tabindex()\"\r\n (onShow)=\"onShow.emit($event)\"\r\n (onHide)=\"onHide.emit($event)\"\r\n (onBlur)=\"onBlur.emit($event)\"\r\n (onFocus)=\"onFocus.emit($event)\"\r\n>\r\n @if (startTemplate()) {\r\n <ng-template pTemplate=\"start\">\r\n <ng-container *ngTemplateOutlet=\"startTemplate()!\" />\r\n </ng-template>\r\n }\r\n\r\n @if (endTemplate()) {\r\n <ng-template pTemplate=\"end\">\r\n <ng-container *ngTemplateOutlet=\"endTemplate()!\" />\r\n </ng-template>\r\n }\r\n\r\n @if (headerTemplate()) {\r\n <ng-template pTemplate=\"header\">\r\n <ng-container *ngTemplateOutlet=\"headerTemplate()!\" />\r\n </ng-template>\r\n }\r\n\r\n @if (submenuHeaderTemplate()) {\r\n <ng-template pTemplate=\"submenuheader\" let-item>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n submenuHeaderTemplate()!;\r\n context: { $implicit: item }\r\n \"\r\n />\r\n </ng-template>\r\n }\r\n\r\n <ng-template pTemplate=\"item\" let-item>\r\n <div\r\n class=\"flex gap-2 align-middle items-center p-2 cursor-pointer rounded transition-colors\"\r\n [class]=\"item.computedClass\"\r\n >\r\n @if (getItemIcon(item)) {\r\n <mt-avatar\r\n [style]=\"getAvatarStyle(getItemColor(item) || 'gray')\"\r\n [icon]=\"getItemIcon(item)!\"\r\n shape=\"square\"\r\n size=\"normal\"\r\n />\r\n }\r\n @if (item.label) {\r\n <span class=\"p-menu-item-label\">{{ item.label }}</span>\r\n }\r\n @if (item.badge) {\r\n <span class=\"p-menu-item-badge\">{{ item.badge }}</span>\r\n }\r\n </div>\r\n </ng-template>\r\n</p-menu>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["PrimeMenu"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"masterteam-components-menu.mjs","sources":["../../../../packages/masterteam/components/menu/menu.ts","../../../../packages/masterteam/components/menu/menu.html","../../../../packages/masterteam/components/menu/masterteam-components-menu.ts"],"sourcesContent":["import {\r\n Component,\r\n input,\r\n output,\r\n booleanAttribute,\r\n computed,\r\n viewChild,\r\n contentChild,\r\n TemplateRef,\r\n model,\r\n} from '@angular/core';\r\nimport { Menu as PrimeMenu } from 'primeng/menu';\r\nimport { MenuItem, SharedModule } from 'primeng/api';\r\nimport { MTIcon } from '@masterteam/icons';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { ButtonSeverity } from 'primeng/button';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\n\r\nexport interface MTMenuItem extends Omit<MenuItem, 'icon'> {\r\n icon?: MTIcon;\r\n color?: string;\r\n severity?: ButtonSeverity | 'danger';\r\n styleClass?: string;\r\n id?: string | number;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-menu',\r\n standalone: true,\r\n imports: [PrimeMenu, Avatar, SharedModule, NgTemplateOutlet],\r\n templateUrl: './menu.html',\r\n styleUrls: ['./menu.scss'],\r\n})\r\nexport class Menu {\r\n menuRef = viewChild.required('menu', { read: PrimeMenu });\r\n\r\n readonly startTemplate = contentChild('start', { read: TemplateRef });\r\n readonly endTemplate = contentChild('end', { read: TemplateRef });\r\n readonly headerTemplate = contentChild('header', { read: TemplateRef });\r\n readonly submenuHeaderTemplate = contentChild('submenuheader', {\r\n read: TemplateRef,\r\n });\r\n\r\n readonly model = input<MTMenuItem[]>([]);\r\n readonly popup = input<boolean, unknown>(true, {\r\n transform: booleanAttribute,\r\n });\r\n readonly appendTo = input<any>('body');\r\n readonly style = input<Record<string, any> | null>();\r\n readonly styleClass = input<string>();\r\n readonly autoZIndex = input<boolean, unknown>(true, {\r\n transform: booleanAttribute,\r\n });\r\n readonly baseZIndex = input<number>(0);\r\n readonly showTransitionOptions = input<string>(\r\n '0.12s cubic-bezier(0, 0, 0.2, 1)',\r\n );\r\n readonly hideTransitionOptions = input<string>('0.1s linear');\r\n readonly ariaLabel = input<string>();\r\n readonly ariaLabelledBy = input<string>();\r\n readonly id = input<string>();\r\n readonly tabindex = input<number>(0);\r\n\r\n readonly activeItemId = model<string | number | undefined>();\r\n\r\n readonly onShow = output<any>();\r\n readonly onHide = output<any>();\r\n readonly onBlur = output<Event>();\r\n readonly onFocus = output<Event>();\r\n readonly onItemSelect = output<MTMenuItem>();\r\n\r\n transformedModel = computed(() => {\r\n return this.model().map((item) =>\r\n this.transformMenuItem(item, this.activeItemId()),\r\n );\r\n });\r\n\r\n toggle(event: Event): void {\r\n this.menuRef().toggle(event);\r\n }\r\n\r\n show(event: Event): void {\r\n this.menuRef().show(event);\r\n }\r\n\r\n hide(): void {\r\n this.menuRef().hide();\r\n }\r\n\r\n protected getItemIcon(item: any): MTIcon | undefined {\r\n return item?.mtIcon;\r\n }\r\n\r\n protected getItemColor(item: any): string | undefined {\r\n return item?.mtColor;\r\n }\r\n\r\n protected getAvatarStyle(color: string): Record<string, string> {\r\n if (color.startsWith('#')) {\r\n return {\r\n '--p-avatar-background': color + '1a',\r\n '--p-avatar-color': color,\r\n };\r\n }\r\n return {\r\n '--p-avatar-background': `var(--p-${color}-100)`,\r\n '--p-avatar-color': `var(--p-${color}-700)`,\r\n };\r\n }\r\n\r\n private transformMenuItem(item: MTMenuItem, activeId?: string | number): any {\r\n const transformed: any = { ...item };\r\n\r\n if (item.icon) {\r\n transformed.mtIcon = item.icon;\r\n delete transformed.icon;\r\n }\r\n\r\n if (item.color) {\r\n transformed.mtColor = item.color;\r\n }\r\n\r\n const classes: string[] = [];\r\n const isActive = activeId && item.id && item.id === activeId;\r\n\r\n if (isActive) {\r\n classes.push(\r\n 'bg-primary-50',\r\n 'text-primary-700',\r\n 'dark:bg-primary-900/20',\r\n 'dark:text-primary-300',\r\n );\r\n } else if (item.severity) {\r\n const severityClass = this.getSeverityClass(item.severity);\r\n if (severityClass) {\r\n classes.push(severityClass);\r\n }\r\n }\r\n\r\n if (item.styleClass) {\r\n classes.push(item.styleClass);\r\n }\r\n\r\n transformed.computedClass = classes.join(' ');\r\n\r\n if (item['items']) {\r\n transformed['items'] = item['items'].map((subItem: any) =>\r\n this.transformMenuItem(subItem as MTMenuItem, activeId),\r\n );\r\n }\r\n\r\n const originalCommand = transformed.command;\r\n transformed.command = (event: any) => {\r\n if (item.id) {\r\n this.handleItemSelect(item);\r\n }\r\n\r\n if (originalCommand) {\r\n originalCommand(event);\r\n }\r\n };\r\n\r\n return transformed;\r\n }\r\n\r\n private getSeverityClass(severity: string): string {\r\n const severityMap: Record<string, string> = {\r\n danger: 'text-red-600 hover:bg-red-50 hover:text-red-700',\r\n warn: 'text-yellow-600 hover:bg-yellow-50 hover:text-yellow-700',\r\n success: 'text-green-600 hover:bg-green-50 hover:text-green-700',\r\n info: 'text-blue-600 hover:bg-blue-50 hover:text-blue-700',\r\n help: 'text-purple-600 hover:bg-purple-50 hover:text-purple-700',\r\n secondary: 'text-gray-600 hover:bg-gray-50 hover:text-gray-700',\r\n contrast: 'text-gray-900 hover:bg-gray-100',\r\n };\r\n\r\n return severityMap[severity] || '';\r\n }\r\n\r\n private handleItemSelect(item: MTMenuItem): void {\r\n if (item.id) {\r\n this.activeItemId.set(item.id);\r\n }\r\n this.onItemSelect.emit(item);\r\n }\r\n}\r\n","<p-menu\r\n #menu\r\n [model]=\"transformedModel()\"\r\n [popup]=\"popup()\"\r\n [appendTo]=\"appendTo()\"\r\n [style]=\"style()\"\r\n [styleClass]=\"styleClass()\"\r\n [autoZIndex]=\"autoZIndex()\"\r\n [baseZIndex]=\"baseZIndex()\"\r\n [showTransitionOptions]=\"showTransitionOptions()\"\r\n [hideTransitionOptions]=\"hideTransitionOptions()\"\r\n [ariaLabel]=\"ariaLabel()\"\r\n [ariaLabelledBy]=\"ariaLabelledBy()\"\r\n [id]=\"id()\"\r\n [tabindex]=\"tabindex()\"\r\n (onShow)=\"onShow.emit($event)\"\r\n (onHide)=\"onHide.emit($event)\"\r\n (onBlur)=\"onBlur.emit($event)\"\r\n (onFocus)=\"onFocus.emit($event)\"\r\n>\r\n @if (startTemplate()) {\r\n <ng-template pTemplate=\"start\">\r\n <ng-container *ngTemplateOutlet=\"startTemplate()!\" />\r\n </ng-template>\r\n }\r\n\r\n @if (endTemplate()) {\r\n <ng-template pTemplate=\"end\">\r\n <ng-container *ngTemplateOutlet=\"endTemplate()!\" />\r\n </ng-template>\r\n }\r\n\r\n @if (headerTemplate()) {\r\n <ng-template pTemplate=\"header\">\r\n <ng-container *ngTemplateOutlet=\"headerTemplate()!\" />\r\n </ng-template>\r\n }\r\n\r\n @if (submenuHeaderTemplate()) {\r\n <ng-template pTemplate=\"submenuheader\" let-item>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n submenuHeaderTemplate()!;\r\n context: { $implicit: item }\r\n \"\r\n />\r\n </ng-template>\r\n }\r\n\r\n <ng-template pTemplate=\"item\" let-item>\r\n <div\r\n class=\"flex gap-2 align-middle items-center p-2 cursor-pointer rounded transition-colors\"\r\n [class]=\"item.computedClass\"\r\n >\r\n @if (getItemIcon(item)) {\r\n <mt-avatar\r\n [style]=\"getAvatarStyle(getItemColor(item) || 'gray')\"\r\n [icon]=\"getItemIcon(item)!\"\r\n shape=\"square\"\r\n size=\"normal\"\r\n />\r\n }\r\n @if (item.label) {\r\n <span class=\"p-menu-item-label\">{{ item.label }}</span>\r\n }\r\n @if (item.badge) {\r\n <span class=\"p-menu-item-badge\">{{ item.badge }}</span>\r\n }\r\n </div>\r\n </ng-template>\r\n</p-menu>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["PrimeMenu"],"mappings":"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"}
|
|
@@ -27,11 +27,11 @@ class PageHeader {
|
|
|
27
27
|
}, ...(ngDevMode ? [{ debugName: "backIcon" }] : []));
|
|
28
28
|
hasTabs = computed(() => this.tabs().length > 0, ...(ngDevMode ? [{ debugName: "hasTabs" }] : []));
|
|
29
29
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: PageHeader, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
30
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: PageHeader, isStandalone: true, selector: "mt-page-header", inputs: { backButton: { classPropertyName: "backButton", publicName: "backButton", isSignal: true, isRequired: false, transformFunction: null }, backButtonIcon: { classPropertyName: "backButtonIcon", publicName: "backButtonIcon", isSignal: true, isRequired: false, transformFunction: null }, avatarIcon: { classPropertyName: "avatarIcon", publicName: "avatarIcon", isSignal: true, isRequired: false, transformFunction: null }, avatarStyle: { classPropertyName: "avatarStyle", publicName: "avatarStyle", isSignal: true, isRequired: false, transformFunction: null }, avatarShape: { classPropertyName: "avatarShape", publicName: "avatarShape", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, tabs: { classPropertyName: "tabs", publicName: "tabs", isSignal: true, isRequired: false, transformFunction: null }, activeTab: { classPropertyName: "activeTab", publicName: "activeTab", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { backButtonClick: "backButtonClick", tabChange: "tabChange" }, queries: [{ propertyName: "titleEnd", first: true, predicate: ["titleEnd"], descendants: true, isSignal: true }, { propertyName: "headerEnd", first: true, predicate: ["headerEnd"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\r\n class=\"grid grid-cols-3 bg-content
|
|
30
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: PageHeader, isStandalone: true, selector: "mt-page-header", inputs: { backButton: { classPropertyName: "backButton", publicName: "backButton", isSignal: true, isRequired: false, transformFunction: null }, backButtonIcon: { classPropertyName: "backButtonIcon", publicName: "backButtonIcon", isSignal: true, isRequired: false, transformFunction: null }, avatarIcon: { classPropertyName: "avatarIcon", publicName: "avatarIcon", isSignal: true, isRequired: false, transformFunction: null }, avatarStyle: { classPropertyName: "avatarStyle", publicName: "avatarStyle", isSignal: true, isRequired: false, transformFunction: null }, avatarShape: { classPropertyName: "avatarShape", publicName: "avatarShape", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, tabs: { classPropertyName: "tabs", publicName: "tabs", isSignal: true, isRequired: false, transformFunction: null }, activeTab: { classPropertyName: "activeTab", publicName: "activeTab", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { backButtonClick: "backButtonClick", tabChange: "tabChange" }, queries: [{ propertyName: "titleEnd", first: true, predicate: ["titleEnd"], descendants: true, isSignal: true }, { propertyName: "headerEnd", first: true, predicate: ["headerEnd"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\r\n class=\"grid grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] items-center gap-3 bg-content p-3 border-b border-surface min-h-18.5 max-[1025px]:flex max-[1025px]:flex-wrap max-[1025px]:items-center\"\r\n>\r\n <div class=\"flex min-w-0 items-center gap-2 max-[1025px]:flex-wrap\">\r\n @if (backButton()) {\r\n <mt-button\r\n [text]=\"true\"\r\n [icon]=\"backIcon()\"\r\n size=\"large\"\r\n (click)=\"backButtonClick.emit()\"\r\n >\r\n </mt-button>\r\n }\r\n\r\n @if (avatarIcon()) {\r\n <mt-avatar\r\n [icon]=\"avatarIcon()\"\r\n [shape]=\"avatarShape()\"\r\n [style]=\"avatarStyle()\"\r\n >\r\n </mt-avatar>\r\n }\r\n\r\n <h3 class=\"min-w-0 truncate font-bold text-lg\">{{ title() }}</h3>\r\n\r\n @if (titleEnd(); as template) {\r\n <ng-container [ngTemplateOutlet]=\"template\" />\r\n }\r\n </div>\r\n\r\n @if (hasTabs()) {\r\n <div class=\"min-w-0 justify-self-center\">\r\n <div class=\"min-w-0 max-[1025px]:overflow-x-auto\">\r\n <mt-tabs\r\n class=\"max-[1025px]:min-w-max\"\r\n [options]=\"tabs()\"\r\n [active]=\"activeTab()\"\r\n size=\"large\"\r\n (onChange)=\"tabChange.emit($event)\"\r\n >\r\n </mt-tabs>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"min-w-0 justify-self-end min-[1025px]:col-start-3 min-[1025px]:col-end-4 max-[1025px]:ml-auto\"\r\n >\r\n @if (headerEnd(); as template) {\r\n <div class=\"flex gap-2 max-[1025px]:flex-wrap justify-end\">\r\n <ng-container [ngTemplateOutlet]=\"template\" />\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "component", type: Avatar, selector: "mt-avatar", inputs: ["label", "icon", "image", "styleClass", "size", "shape", "badge", "badgeSize", "badgeSeverity"], outputs: ["onImageError"] }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: Tabs, selector: "mt-tabs", inputs: ["options", "optionLabel", "optionValue", "active", "size", "fluid", "disabled"], outputs: ["activeChange", "onChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
|
|
31
31
|
}
|
|
32
32
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: PageHeader, decorators: [{
|
|
33
33
|
type: Component,
|
|
34
|
-
args: [{ selector: 'mt-page-header', standalone: true, imports: [Avatar, Button, Tabs, NgTemplateOutlet], template: "<div\r\n class=\"grid grid-cols-3 bg-content
|
|
34
|
+
args: [{ selector: 'mt-page-header', standalone: true, imports: [Avatar, Button, Tabs, NgTemplateOutlet], template: "<div\r\n class=\"grid grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] items-center gap-3 bg-content p-3 border-b border-surface min-h-18.5 max-[1025px]:flex max-[1025px]:flex-wrap max-[1025px]:items-center\"\r\n>\r\n <div class=\"flex min-w-0 items-center gap-2 max-[1025px]:flex-wrap\">\r\n @if (backButton()) {\r\n <mt-button\r\n [text]=\"true\"\r\n [icon]=\"backIcon()\"\r\n size=\"large\"\r\n (click)=\"backButtonClick.emit()\"\r\n >\r\n </mt-button>\r\n }\r\n\r\n @if (avatarIcon()) {\r\n <mt-avatar\r\n [icon]=\"avatarIcon()\"\r\n [shape]=\"avatarShape()\"\r\n [style]=\"avatarStyle()\"\r\n >\r\n </mt-avatar>\r\n }\r\n\r\n <h3 class=\"min-w-0 truncate font-bold text-lg\">{{ title() }}</h3>\r\n\r\n @if (titleEnd(); as template) {\r\n <ng-container [ngTemplateOutlet]=\"template\" />\r\n }\r\n </div>\r\n\r\n @if (hasTabs()) {\r\n <div class=\"min-w-0 justify-self-center\">\r\n <div class=\"min-w-0 max-[1025px]:overflow-x-auto\">\r\n <mt-tabs\r\n class=\"max-[1025px]:min-w-max\"\r\n [options]=\"tabs()\"\r\n [active]=\"activeTab()\"\r\n size=\"large\"\r\n (onChange)=\"tabChange.emit($event)\"\r\n >\r\n </mt-tabs>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"min-w-0 justify-self-end min-[1025px]:col-start-3 min-[1025px]:col-end-4 max-[1025px]:ml-auto\"\r\n >\r\n @if (headerEnd(); as template) {\r\n <div class=\"flex gap-2 max-[1025px]:flex-wrap justify-end\">\r\n <ng-container [ngTemplateOutlet]=\"template\" />\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n" }]
|
|
35
35
|
}], propDecorators: { backButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "backButton", required: false }] }], backButtonIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "backButtonIcon", required: false }] }], avatarIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatarIcon", required: false }] }], avatarStyle: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatarStyle", required: false }] }], avatarShape: [{ type: i0.Input, args: [{ isSignal: true, alias: "avatarShape", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: true }] }], tabs: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabs", required: false }] }], activeTab: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeTab", required: false }] }], titleEnd: [{ type: i0.ContentChild, args: ['titleEnd', { isSignal: true }] }], headerEnd: [{ type: i0.ContentChild, args: ['headerEnd', { isSignal: true }] }], backButtonClick: [{ type: i0.Output, args: ["backButtonClick"] }], tabChange: [{ type: i0.Output, args: ["tabChange"] }] } });
|
|
36
36
|
|
|
37
37
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"masterteam-components-page-header.mjs","sources":["../../../../packages/masterteam/components/page-header/page-header.ts","../../../../packages/masterteam/components/page-header/page-header.html","../../../../packages/masterteam/components/page-header/masterteam-components-page-header.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n Component,\r\n input,\r\n output,\r\n computed,\r\n contentChild,\r\n TemplateRef,\r\n signal,\r\n booleanAttribute,\r\n} from '@angular/core';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { MTIcon } from '@masterteam/icons';\r\n\r\nexport interface PageHeaderTab {\r\n label: string;\r\n value: string | number;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-page-header',\r\n standalone: true,\r\n imports: [Avatar, Button, Tabs, NgTemplateOutlet],\r\n templateUrl: './page-header.html',\r\n})\r\nexport class PageHeader {\r\n backButton = input<boolean, unknown>(false, { transform: booleanAttribute });\r\n backButtonIcon = input<'arrow' | 'close'>('arrow');\r\n avatarIcon = input<MTIcon>();\r\n avatarStyle = input<Record<string, string>>({});\r\n avatarShape = input<'circle' | 'square'>('square');\r\n title = input.required<string>();\r\n tabs = input<PageHeaderTab[]>([]);\r\n activeTab = input<string | number>();\r\n\r\n titleEnd = contentChild<TemplateRef<any>>('titleEnd');\r\n headerEnd = contentChild<TemplateRef<any>>('headerEnd');\r\n\r\n backButtonClick = output<void>();\r\n tabChange = output<string | number>();\r\n\r\n rtl = signal<boolean>(document.documentElement.dir === 'rtl');\r\n\r\n backIcon = computed(() => {\r\n if (this.backButtonIcon() === 'close') {\r\n return 'general.x-close';\r\n }\r\n return this.rtl() ? 'arrow.arrow-narrow-right' : 'arrow.arrow-narrow-left';\r\n });\r\n\r\n hasTabs = computed(() => this.tabs().length > 0);\r\n}\r\n","<div\r\n class=\"grid grid-cols-3 bg-content
|
|
1
|
+
{"version":3,"file":"masterteam-components-page-header.mjs","sources":["../../../../packages/masterteam/components/page-header/page-header.ts","../../../../packages/masterteam/components/page-header/page-header.html","../../../../packages/masterteam/components/page-header/masterteam-components-page-header.ts"],"sourcesContent":["import { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n Component,\r\n input,\r\n output,\r\n computed,\r\n contentChild,\r\n TemplateRef,\r\n signal,\r\n booleanAttribute,\r\n} from '@angular/core';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { MTIcon } from '@masterteam/icons';\r\n\r\nexport interface PageHeaderTab {\r\n label: string;\r\n value: string | number;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-page-header',\r\n standalone: true,\r\n imports: [Avatar, Button, Tabs, NgTemplateOutlet],\r\n templateUrl: './page-header.html',\r\n})\r\nexport class PageHeader {\r\n backButton = input<boolean, unknown>(false, { transform: booleanAttribute });\r\n backButtonIcon = input<'arrow' | 'close'>('arrow');\r\n avatarIcon = input<MTIcon>();\r\n avatarStyle = input<Record<string, string>>({});\r\n avatarShape = input<'circle' | 'square'>('square');\r\n title = input.required<string>();\r\n tabs = input<PageHeaderTab[]>([]);\r\n activeTab = input<string | number>();\r\n\r\n titleEnd = contentChild<TemplateRef<any>>('titleEnd');\r\n headerEnd = contentChild<TemplateRef<any>>('headerEnd');\r\n\r\n backButtonClick = output<void>();\r\n tabChange = output<string | number>();\r\n\r\n rtl = signal<boolean>(document.documentElement.dir === 'rtl');\r\n\r\n backIcon = computed(() => {\r\n if (this.backButtonIcon() === 'close') {\r\n return 'general.x-close';\r\n }\r\n return this.rtl() ? 'arrow.arrow-narrow-right' : 'arrow.arrow-narrow-left';\r\n });\r\n\r\n hasTabs = computed(() => this.tabs().length > 0);\r\n}\r\n","<div\r\n class=\"grid grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] items-center gap-3 bg-content p-3 border-b border-surface min-h-18.5 max-[1025px]:flex max-[1025px]:flex-wrap max-[1025px]:items-center\"\r\n>\r\n <div class=\"flex min-w-0 items-center gap-2 max-[1025px]:flex-wrap\">\r\n @if (backButton()) {\r\n <mt-button\r\n [text]=\"true\"\r\n [icon]=\"backIcon()\"\r\n size=\"large\"\r\n (click)=\"backButtonClick.emit()\"\r\n >\r\n </mt-button>\r\n }\r\n\r\n @if (avatarIcon()) {\r\n <mt-avatar\r\n [icon]=\"avatarIcon()\"\r\n [shape]=\"avatarShape()\"\r\n [style]=\"avatarStyle()\"\r\n >\r\n </mt-avatar>\r\n }\r\n\r\n <h3 class=\"min-w-0 truncate font-bold text-lg\">{{ title() }}</h3>\r\n\r\n @if (titleEnd(); as template) {\r\n <ng-container [ngTemplateOutlet]=\"template\" />\r\n }\r\n </div>\r\n\r\n @if (hasTabs()) {\r\n <div class=\"min-w-0 justify-self-center\">\r\n <div class=\"min-w-0 max-[1025px]:overflow-x-auto\">\r\n <mt-tabs\r\n class=\"max-[1025px]:min-w-max\"\r\n [options]=\"tabs()\"\r\n [active]=\"activeTab()\"\r\n size=\"large\"\r\n (onChange)=\"tabChange.emit($event)\"\r\n >\r\n </mt-tabs>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div\r\n class=\"min-w-0 justify-self-end min-[1025px]:col-start-3 min-[1025px]:col-end-4 max-[1025px]:ml-auto\"\r\n >\r\n @if (headerEnd(); as template) {\r\n <div class=\"flex gap-2 max-[1025px]:flex-wrap justify-end\">\r\n <ng-container [ngTemplateOutlet]=\"template\" />\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,8 @@ import * as i0 from '@angular/core';
|
|
|
2
2
|
import { input, model, booleanAttribute, output, signal, computed, effect, untracked, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/forms';
|
|
4
4
|
import { FormsModule } from '@angular/forms';
|
|
5
|
+
import * as i3 from '@jsverse/transloco';
|
|
6
|
+
import { TranslocoModule } from '@jsverse/transloco';
|
|
5
7
|
import { Button } from '@masterteam/components/button';
|
|
6
8
|
import { DateField } from '@masterteam/components/date-field';
|
|
7
9
|
import { SelectField } from '@masterteam/components/select-field';
|
|
@@ -139,8 +141,8 @@ function hasInputValue(rawValue) {
|
|
|
139
141
|
class PropertyFilterBuilder {
|
|
140
142
|
schema = input(null, ...(ngDevMode ? [{ debugName: "schema" }] : []));
|
|
141
143
|
filters = model([], ...(ngDevMode ? [{ debugName: "filters" }] : []));
|
|
142
|
-
title = input(
|
|
143
|
-
buttonLabel = input(
|
|
144
|
+
title = input(null, ...(ngDevMode ? [{ debugName: "title" }] : []));
|
|
145
|
+
buttonLabel = input(null, ...(ngDevMode ? [{ debugName: "buttonLabel" }] : []));
|
|
144
146
|
disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : {}), transform: booleanAttribute });
|
|
145
147
|
applied = output();
|
|
146
148
|
cleared = output();
|
|
@@ -359,12 +361,13 @@ class PropertyFilterBuilder {
|
|
|
359
361
|
return toStringValue(rule.value);
|
|
360
362
|
}
|
|
361
363
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: PropertyFilterBuilder, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
362
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: PropertyFilterBuilder, isStandalone: true, selector: "mt-property-filter-builder", inputs: { schema: { classPropertyName: "schema", publicName: "schema", isSignal: true, isRequired: false, transformFunction: null }, filters: { classPropertyName: "filters", publicName: "filters", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, buttonLabel: { classPropertyName: "buttonLabel", publicName: "buttonLabel", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filters: "filtersChange", applied: "applied", cleared: "cleared" }, host: { classAttribute: "block" }, ngImport: i0, template: "<mt-button\r\n [label]=\"buttonLabel()\"\r\n severity=\"secondary\"\r\n icon=\"general.filter-funnel-01\"\r\n [badge]=\"activeFilterCount() > 0 ? activeFilterCount().toString() : undefined\"\r\n [disabled]=\"disabled() || !hasSchema()\"\r\n (onClick)=\"onPopoverToggle($event, popover)\"\r\n/>\r\n\r\n<p-popover #popover [style]=\"{ width: 'min(980px, 92vw)' }\" appendTo=\"body\">\r\n <div class=\"flex flex-col gap-4\">\r\n <div\r\n class=\"flex items-center justify-between border-b border-surface-200 pb-3 px-3\"\r\n >\r\n <div class=\"flex flex-col\">\r\n <h3 class=\"m-0 text-lg font-semibold\">{{ title() }}</h3>\r\n </div>\r\n\r\n <mt-button\r\n variant=\"text\"\r\n severity=\"secondary\"\r\n label=\"Clear all\"\r\n (onClick)=\"clearAll(popover)\"\r\n />\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-3 px-3\">\r\n @for (draft of drafts(); track draft.id; let index = $index) {\r\n <div\r\n class=\"grid grid-cols-[80px_minmax(0,1fr)_auto] items-center gap-2 max-lg:grid-cols-1 max-lg:items-start\"\r\n >\r\n <div class=\"text-sm text-color\" [class.invisible]=\"index > 0\">\r\n Where\r\n </div>\r\n\r\n <div\r\n class=\"grid grid-cols-[minmax(170px,1fr)_minmax(170px,1fr)_minmax(220px,2fr)] gap-3 max-lg:grid-cols-1\"\r\n >\r\n <mt-select-field\r\n [hasPlaceholderPrefix]=\"false\"\r\n placeholder=\"Property\"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [options]=\"fieldOptions()\"\r\n [showClear]=\"false\"\r\n [ngModel]=\"draft.field\"\r\n (ngModelChange)=\"onFieldChange(index, $event)\"\r\n />\r\n\r\n <mt-select-field\r\n [hasPlaceholderPrefix]=\"false\"\r\n placeholder=\"Condition\"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [options]=\"operatorOptions()\"\r\n [showClear]=\"false\"\r\n [ngModel]=\"draft.op\"\r\n (ngModelChange)=\"onOperatorChange(index, $event)\"\r\n />\r\n\r\n @switch (getValueMode(draft.op)) {\r\n @case (\"none\") {\r\n <div\r\n class=\"flex min-h-10 items-center rounded-lg border border-dashed border-surface-300 px-3 text-sm text-color-secondary\"\r\n >\r\n No value required\r\n </div>\r\n }\r\n @case (\"range\") {\r\n <div class=\"grid grid-cols-2 gap-2 max-lg:grid-cols-1\">\r\n @if (isDateField(draft.field)) {\r\n <mt-date-field\r\n [placeholder]=\"'From'\"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.from\"\r\n (ngModelChange)=\"onFromChange(index, $event)\"\r\n />\r\n <mt-date-field\r\n [placeholder]=\"'To'\"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.to\"\r\n (ngModelChange)=\"onToChange(index, $event)\"\r\n />\r\n } @else {\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"'From'\"\r\n [ngModel]=\"draft.from\"\r\n (ngModelChange)=\"onFromChange(index, $event)\"\r\n />\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"'To'\"\r\n [ngModel]=\"draft.to\"\r\n (ngModelChange)=\"onToChange(index, $event)\"\r\n />\r\n }\r\n </div>\r\n }\r\n @default {\r\n @if (\r\n getValueMode(draft.op) !== \"multi\" && isDateField(draft.field)\r\n ) {\r\n <mt-date-field\r\n [placeholder]=\"'Value'\"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.value\"\r\n (ngModelChange)=\"onValueChange(index, $event)\"\r\n />\r\n } @else {\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"\r\n getValueMode(draft.op) === 'multi'\r\n ? 'Value (comma separated)'\r\n : 'Value'\r\n \"\r\n [ngModel]=\"draft.value\"\r\n (ngModelChange)=\"onValueChange(index, $event)\"\r\n />\r\n }\r\n }\r\n }\r\n </div>\r\n\r\n <mt-button\r\n icon=\"general.x-close\"\r\n severity=\"secondary\"\r\n variant=\"text\"\r\n [disabled]=\"drafts().length <= 1\"\r\n (onClick)=\"removeFilter(index)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex items-center justify-between p-2 max-lg:flex-col max-lg:items-stretch max-lg:gap-3\"\r\n >\r\n <mt-button\r\n label=\"Add Filter\"\r\n icon=\"general.plus\"\r\n variant=\"outlined\"\r\n [disabled]=\"!canAddFilter()\"\r\n (onClick)=\"addFilter()\"\r\n />\r\n\r\n <div class=\"flex gap-2 max-lg:w-full\">\r\n <mt-button\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n label=\"Cancel\"\r\n (onClick)=\"popover.hide()\"\r\n />\r\n <mt-button label=\"Apply\" (onClick)=\"apply(popover)\" />\r\n </div>\r\n </div>\r\n </div>\r\n</p-popover>\r\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: DateField, selector: "mt-date-field", inputs: ["field", "label", "placeholder", "class", "readonly", "showIcon", "showClear", "showTime", "pInputs", "required"] }, { kind: "ngmodule", type: PopoverModule }, { kind: "component", type: i2.Popover, selector: "p-popover", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions", "motionOptions"], outputs: ["onShow", "onHide"] }, { kind: "component", type: SelectField, selector: "mt-select-field", inputs: ["field", "label", "placeholder", "hasPlaceholderPrefix", "class", "readonly", "pInputs", "options", "optionValue", "optionLabel", "filter", "filterBy", "dataKey", "showClear", "clearAfterSelect", "required", "group", "size", "optionGroupLabel", "optionGroupChildren", "loading", "optionIcon", "optionIconColor", "optionIconShape", "optionAvatarShape", "optionGroupIcon", "optionGroupIconColor", "optionGroupIconShape", "optionGroupAvatarShape"], outputs: ["onChange"] }, { kind: "component", type: TextField, selector: "mt-text-field", inputs: ["field", "hint", "label", "placeholder", "class", "type", "readonly", "pInputs", "required", "icon", "iconPosition"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
364
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: PropertyFilterBuilder, isStandalone: true, selector: "mt-property-filter-builder", inputs: { schema: { classPropertyName: "schema", publicName: "schema", isSignal: true, isRequired: false, transformFunction: null }, filters: { classPropertyName: "filters", publicName: "filters", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, buttonLabel: { classPropertyName: "buttonLabel", publicName: "buttonLabel", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filters: "filtersChange", applied: "applied", cleared: "cleared" }, host: { classAttribute: "block" }, ngImport: i0, template: "<mt-button\r\n [label]=\"\r\n buttonLabel() || ('components.propertyFilterBuilder.filter' | transloco)\r\n \"\r\n severity=\"secondary\"\r\n icon=\"general.filter-funnel-01\"\r\n [badge]=\"activeFilterCount() > 0 ? activeFilterCount().toString() : undefined\"\r\n [disabled]=\"disabled() || !hasSchema()\"\r\n (onClick)=\"onPopoverToggle($event, popover)\"\r\n/>\r\n\r\n<p-popover #popover [style]=\"{ width: 'min(980px, 92vw)' }\" appendTo=\"body\">\r\n <div class=\"flex flex-col gap-4\">\r\n <div\r\n class=\"flex items-center justify-between border-b border-surface-200 pb-3 px-3\"\r\n >\r\n <div class=\"flex flex-col\">\r\n <h3 class=\"m-0 text-lg font-semibold\">\r\n {{\r\n title() ||\r\n (\"components.propertyFilterBuilder.advancedFilters\" | transloco)\r\n }}\r\n </h3>\r\n </div>\r\n\r\n <mt-button\r\n variant=\"text\"\r\n severity=\"secondary\"\r\n [label]=\"'components.propertyFilterBuilder.clearAll' | transloco\"\r\n (onClick)=\"clearAll(popover)\"\r\n />\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-3 px-3\">\r\n @for (draft of drafts(); track draft.id; let index = $index) {\r\n <div\r\n class=\"grid grid-cols-[80px_minmax(0,1fr)_auto] items-center gap-2 max-lg:grid-cols-1 max-lg:items-start\"\r\n >\r\n <div class=\"text-sm text-color\" [class.invisible]=\"index > 0\">\r\n {{ \"components.propertyFilterBuilder.where\" | transloco }}\r\n </div>\r\n\r\n <div\r\n class=\"grid grid-cols-[minmax(170px,1fr)_minmax(170px,1fr)_minmax(220px,2fr)] gap-3 max-lg:grid-cols-1\"\r\n >\r\n <mt-select-field\r\n [hasPlaceholderPrefix]=\"false\"\r\n [placeholder]=\"\r\n 'components.propertyFilterBuilder.property' | transloco\r\n \"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [options]=\"fieldOptions()\"\r\n [showClear]=\"false\"\r\n [ngModel]=\"draft.field\"\r\n (ngModelChange)=\"onFieldChange(index, $event)\"\r\n />\r\n\r\n <mt-select-field\r\n [hasPlaceholderPrefix]=\"false\"\r\n [placeholder]=\"\r\n 'components.propertyFilterBuilder.condition' | transloco\r\n \"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [options]=\"operatorOptions()\"\r\n [showClear]=\"false\"\r\n [ngModel]=\"draft.op\"\r\n (ngModelChange)=\"onOperatorChange(index, $event)\"\r\n />\r\n\r\n @switch (getValueMode(draft.op)) {\r\n @case (\"none\") {\r\n <div\r\n class=\"flex min-h-10 items-center rounded-lg border border-dashed border-surface-300 px-3 text-sm text-color-secondary\"\r\n >\r\n {{\r\n \"components.propertyFilterBuilder.noValueRequired\"\r\n | transloco\r\n }}\r\n </div>\r\n }\r\n @case (\"range\") {\r\n <div class=\"grid grid-cols-2 gap-2 max-lg:grid-cols-1\">\r\n @if (isDateField(draft.field)) {\r\n <mt-date-field\r\n [placeholder]=\"\r\n 'components.propertyFilterBuilder.from' | transloco\r\n \"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.from\"\r\n (ngModelChange)=\"onFromChange(index, $event)\"\r\n />\r\n <mt-date-field\r\n [placeholder]=\"\r\n 'components.propertyFilterBuilder.to' | transloco\r\n \"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.to\"\r\n (ngModelChange)=\"onToChange(index, $event)\"\r\n />\r\n } @else {\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"\r\n 'components.propertyFilterBuilder.from' | transloco\r\n \"\r\n [ngModel]=\"draft.from\"\r\n (ngModelChange)=\"onFromChange(index, $event)\"\r\n />\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"\r\n 'components.propertyFilterBuilder.to' | transloco\r\n \"\r\n [ngModel]=\"draft.to\"\r\n (ngModelChange)=\"onToChange(index, $event)\"\r\n />\r\n }\r\n </div>\r\n }\r\n @default {\r\n @if (\r\n getValueMode(draft.op) !== \"multi\" && isDateField(draft.field)\r\n ) {\r\n <mt-date-field\r\n [placeholder]=\"\r\n 'components.propertyFilterBuilder.value' | transloco\r\n \"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.value\"\r\n (ngModelChange)=\"onValueChange(index, $event)\"\r\n />\r\n } @else {\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"\r\n getValueMode(draft.op) === 'multi'\r\n ? ('components.propertyFilterBuilder.multiValue'\r\n | transloco)\r\n : ('components.propertyFilterBuilder.value' | transloco)\r\n \"\r\n [ngModel]=\"draft.value\"\r\n (ngModelChange)=\"onValueChange(index, $event)\"\r\n />\r\n }\r\n }\r\n }\r\n </div>\r\n\r\n <mt-button\r\n icon=\"general.x-close\"\r\n severity=\"secondary\"\r\n variant=\"text\"\r\n [disabled]=\"drafts().length <= 1\"\r\n (onClick)=\"removeFilter(index)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex items-center justify-between p-2 max-lg:flex-col max-lg:items-stretch max-lg:gap-3\"\r\n >\r\n <mt-button\r\n [label]=\"'components.propertyFilterBuilder.addFilter' | transloco\"\r\n icon=\"general.plus\"\r\n variant=\"outlined\"\r\n [disabled]=\"!canAddFilter()\"\r\n (onClick)=\"addFilter()\"\r\n />\r\n\r\n <div class=\"flex gap-2 max-lg:w-full\">\r\n <mt-button\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n [label]=\"'components.propertyFilterBuilder.cancel' | transloco\"\r\n (onClick)=\"popover.hide()\"\r\n />\r\n <mt-button\r\n [label]=\"'components.propertyFilterBuilder.apply' | transloco\"\r\n (onClick)=\"apply(popover)\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n</p-popover>\r\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: DateField, selector: "mt-date-field", inputs: ["field", "label", "placeholder", "class", "readonly", "showIcon", "showClear", "showTime", "pInputs", "required"] }, { kind: "ngmodule", type: PopoverModule }, { kind: "component", type: i2.Popover, selector: "p-popover", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions", "motionOptions"], outputs: ["onShow", "onHide"] }, { kind: "component", type: SelectField, selector: "mt-select-field", inputs: ["field", "label", "placeholder", "hasPlaceholderPrefix", "class", "readonly", "pInputs", "options", "optionValue", "optionLabel", "filter", "filterBy", "dataKey", "showClear", "clearAfterSelect", "required", "group", "size", "optionGroupLabel", "optionGroupChildren", "loading", "optionIcon", "optionIconColor", "optionIconShape", "optionAvatarShape", "optionGroupIcon", "optionGroupIconColor", "optionGroupIconShape", "optionGroupAvatarShape"], outputs: ["onChange"] }, { kind: "component", type: TextField, selector: "mt-text-field", inputs: ["field", "hint", "label", "placeholder", "class", "type", "readonly", "pInputs", "required", "icon", "iconPosition"] }, { kind: "pipe", type: i3.TranslocoPipe, name: "transloco" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
363
365
|
}
|
|
364
366
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: PropertyFilterBuilder, decorators: [{
|
|
365
367
|
type: Component,
|
|
366
368
|
args: [{ selector: 'mt-property-filter-builder', standalone: true, imports: [
|
|
367
369
|
FormsModule,
|
|
370
|
+
TranslocoModule,
|
|
368
371
|
Button,
|
|
369
372
|
DateField,
|
|
370
373
|
PopoverModule,
|
|
@@ -372,7 +375,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImpor
|
|
|
372
375
|
TextField,
|
|
373
376
|
], changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
374
377
|
class: 'block',
|
|
375
|
-
}, template: "<mt-button\r\n [label]=\"buttonLabel()\"\r\n severity=\"secondary\"\r\n icon=\"general.filter-funnel-01\"\r\n [badge]=\"activeFilterCount() > 0 ? activeFilterCount().toString() : undefined\"\r\n [disabled]=\"disabled() || !hasSchema()\"\r\n (onClick)=\"onPopoverToggle($event, popover)\"\r\n/>\r\n\r\n<p-popover #popover [style]=\"{ width: 'min(980px, 92vw)' }\" appendTo=\"body\">\r\n <div class=\"flex flex-col gap-4\">\r\n <div\r\n class=\"flex items-center justify-between border-b border-surface-200 pb-3 px-3\"\r\n >\r\n <div class=\"flex flex-col\">\r\n <h3 class=\"m-0 text-lg font-semibold\"
|
|
378
|
+
}, template: "<mt-button\r\n [label]=\"\r\n buttonLabel() || ('components.propertyFilterBuilder.filter' | transloco)\r\n \"\r\n severity=\"secondary\"\r\n icon=\"general.filter-funnel-01\"\r\n [badge]=\"activeFilterCount() > 0 ? activeFilterCount().toString() : undefined\"\r\n [disabled]=\"disabled() || !hasSchema()\"\r\n (onClick)=\"onPopoverToggle($event, popover)\"\r\n/>\r\n\r\n<p-popover #popover [style]=\"{ width: 'min(980px, 92vw)' }\" appendTo=\"body\">\r\n <div class=\"flex flex-col gap-4\">\r\n <div\r\n class=\"flex items-center justify-between border-b border-surface-200 pb-3 px-3\"\r\n >\r\n <div class=\"flex flex-col\">\r\n <h3 class=\"m-0 text-lg font-semibold\">\r\n {{\r\n title() ||\r\n (\"components.propertyFilterBuilder.advancedFilters\" | transloco)\r\n }}\r\n </h3>\r\n </div>\r\n\r\n <mt-button\r\n variant=\"text\"\r\n severity=\"secondary\"\r\n [label]=\"'components.propertyFilterBuilder.clearAll' | transloco\"\r\n (onClick)=\"clearAll(popover)\"\r\n />\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-3 px-3\">\r\n @for (draft of drafts(); track draft.id; let index = $index) {\r\n <div\r\n class=\"grid grid-cols-[80px_minmax(0,1fr)_auto] items-center gap-2 max-lg:grid-cols-1 max-lg:items-start\"\r\n >\r\n <div class=\"text-sm text-color\" [class.invisible]=\"index > 0\">\r\n {{ \"components.propertyFilterBuilder.where\" | transloco }}\r\n </div>\r\n\r\n <div\r\n class=\"grid grid-cols-[minmax(170px,1fr)_minmax(170px,1fr)_minmax(220px,2fr)] gap-3 max-lg:grid-cols-1\"\r\n >\r\n <mt-select-field\r\n [hasPlaceholderPrefix]=\"false\"\r\n [placeholder]=\"\r\n 'components.propertyFilterBuilder.property' | transloco\r\n \"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [options]=\"fieldOptions()\"\r\n [showClear]=\"false\"\r\n [ngModel]=\"draft.field\"\r\n (ngModelChange)=\"onFieldChange(index, $event)\"\r\n />\r\n\r\n <mt-select-field\r\n [hasPlaceholderPrefix]=\"false\"\r\n [placeholder]=\"\r\n 'components.propertyFilterBuilder.condition' | transloco\r\n \"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [options]=\"operatorOptions()\"\r\n [showClear]=\"false\"\r\n [ngModel]=\"draft.op\"\r\n (ngModelChange)=\"onOperatorChange(index, $event)\"\r\n />\r\n\r\n @switch (getValueMode(draft.op)) {\r\n @case (\"none\") {\r\n <div\r\n class=\"flex min-h-10 items-center rounded-lg border border-dashed border-surface-300 px-3 text-sm text-color-secondary\"\r\n >\r\n {{\r\n \"components.propertyFilterBuilder.noValueRequired\"\r\n | transloco\r\n }}\r\n </div>\r\n }\r\n @case (\"range\") {\r\n <div class=\"grid grid-cols-2 gap-2 max-lg:grid-cols-1\">\r\n @if (isDateField(draft.field)) {\r\n <mt-date-field\r\n [placeholder]=\"\r\n 'components.propertyFilterBuilder.from' | transloco\r\n \"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.from\"\r\n (ngModelChange)=\"onFromChange(index, $event)\"\r\n />\r\n <mt-date-field\r\n [placeholder]=\"\r\n 'components.propertyFilterBuilder.to' | transloco\r\n \"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.to\"\r\n (ngModelChange)=\"onToChange(index, $event)\"\r\n />\r\n } @else {\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"\r\n 'components.propertyFilterBuilder.from' | transloco\r\n \"\r\n [ngModel]=\"draft.from\"\r\n (ngModelChange)=\"onFromChange(index, $event)\"\r\n />\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"\r\n 'components.propertyFilterBuilder.to' | transloco\r\n \"\r\n [ngModel]=\"draft.to\"\r\n (ngModelChange)=\"onToChange(index, $event)\"\r\n />\r\n }\r\n </div>\r\n }\r\n @default {\r\n @if (\r\n getValueMode(draft.op) !== \"multi\" && isDateField(draft.field)\r\n ) {\r\n <mt-date-field\r\n [placeholder]=\"\r\n 'components.propertyFilterBuilder.value' | transloco\r\n \"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.value\"\r\n (ngModelChange)=\"onValueChange(index, $event)\"\r\n />\r\n } @else {\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"\r\n getValueMode(draft.op) === 'multi'\r\n ? ('components.propertyFilterBuilder.multiValue'\r\n | transloco)\r\n : ('components.propertyFilterBuilder.value' | transloco)\r\n \"\r\n [ngModel]=\"draft.value\"\r\n (ngModelChange)=\"onValueChange(index, $event)\"\r\n />\r\n }\r\n }\r\n }\r\n </div>\r\n\r\n <mt-button\r\n icon=\"general.x-close\"\r\n severity=\"secondary\"\r\n variant=\"text\"\r\n [disabled]=\"drafts().length <= 1\"\r\n (onClick)=\"removeFilter(index)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex items-center justify-between p-2 max-lg:flex-col max-lg:items-stretch max-lg:gap-3\"\r\n >\r\n <mt-button\r\n [label]=\"'components.propertyFilterBuilder.addFilter' | transloco\"\r\n icon=\"general.plus\"\r\n variant=\"outlined\"\r\n [disabled]=\"!canAddFilter()\"\r\n (onClick)=\"addFilter()\"\r\n />\r\n\r\n <div class=\"flex gap-2 max-lg:w-full\">\r\n <mt-button\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n [label]=\"'components.propertyFilterBuilder.cancel' | transloco\"\r\n (onClick)=\"popover.hide()\"\r\n />\r\n <mt-button\r\n [label]=\"'components.propertyFilterBuilder.apply' | transloco\"\r\n (onClick)=\"apply(popover)\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n</p-popover>\r\n" }]
|
|
376
379
|
}], ctorParameters: () => [], propDecorators: { schema: [{ type: i0.Input, args: [{ isSignal: true, alias: "schema", required: false }] }], filters: [{ type: i0.Input, args: [{ isSignal: true, alias: "filters", required: false }] }, { type: i0.Output, args: ["filtersChange"] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], buttonLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "buttonLabel", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], applied: [{ type: i0.Output, args: ["applied"] }], cleared: [{ type: i0.Output, args: ["cleared"] }] } });
|
|
377
380
|
|
|
378
381
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"masterteam-components-property-filter-builder.mjs","sources":["../../../../packages/masterteam/components/property-filter-builder/property-filter-builder.ts","../../../../packages/masterteam/components/property-filter-builder/property-filter-builder.html","../../../../packages/masterteam/components/property-filter-builder/masterteam-components-property-filter-builder.ts"],"sourcesContent":["import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n booleanAttribute,\r\n computed,\r\n effect,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n untracked,\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { DateField } from '@masterteam/components/date-field';\r\nimport { SelectField } from '@masterteam/components/select-field';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport { PopoverModule } from 'primeng/popover';\r\n\r\nexport type PropertyFilterBuilderValueMode =\r\n | 'single'\r\n | 'multi'\r\n | 'range'\r\n | 'none';\r\n\r\nexport interface PropertyFilterBuilderFieldOption {\r\n key: string;\r\n label?: string;\r\n viewType?: string;\r\n}\r\n\r\nexport interface PropertyFilterBuilderOperatorOption {\r\n key: string;\r\n label?: string;\r\n valueMode?: PropertyFilterBuilderValueMode;\r\n}\r\n\r\nexport interface PropertyFilterBuilderSchema {\r\n allowedFields: Array<string | PropertyFilterBuilderFieldOption>;\r\n allowedOperators: Array<string | PropertyFilterBuilderOperatorOption>;\r\n maxFilters?: number;\r\n}\r\n\r\nexport interface PropertyFilterBuilderRule {\r\n field: string;\r\n op: string;\r\n value?: unknown;\r\n values?: unknown[];\r\n from?: unknown;\r\n to?: unknown;\r\n}\r\n\r\ninterface PropertyFilterBuilderDraft {\r\n id: string;\r\n field: string;\r\n op: string;\r\n value: unknown;\r\n from: unknown;\r\n to: unknown;\r\n}\r\n\r\ninterface SelectOption {\r\n key: string;\r\n label: string;\r\n viewType?: string;\r\n}\r\n\r\nconst DEFAULT_MAX_FILTERS = 20;\r\n\r\nfunction toLabel(value: string): string {\r\n const normalized = value.split('.').pop() ?? value;\r\n return normalized\r\n .replace(/[_-]/g, ' ')\r\n .replace(/([a-z])([A-Z])/g, '$1 $2')\r\n .trim()\r\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\r\n}\r\n\r\nfunction normalizeFieldOption(\r\n value: string | PropertyFilterBuilderFieldOption,\r\n): SelectOption | null {\r\n if (typeof value === 'string') {\r\n return {\r\n key: value,\r\n label: toLabel(value),\r\n };\r\n }\r\n\r\n if (!value?.key) {\r\n return null;\r\n }\r\n\r\n return {\r\n key: value.key,\r\n label: value.label?.trim() || toLabel(value.key),\r\n viewType: value.viewType,\r\n };\r\n}\r\n\r\nfunction inferValueMode(operator: string): PropertyFilterBuilderValueMode {\r\n switch (operator) {\r\n case 'In':\r\n return 'multi';\r\n case 'Between':\r\n return 'range';\r\n case 'IsNull':\r\n case 'IsNotNull':\r\n return 'none';\r\n default:\r\n return 'single';\r\n }\r\n}\r\n\r\nfunction normalizeOperatorOption(\r\n value: string | PropertyFilterBuilderOperatorOption,\r\n): (SelectOption & { valueMode: PropertyFilterBuilderValueMode }) | null {\r\n if (typeof value === 'string') {\r\n return {\r\n key: value,\r\n label: toLabel(value),\r\n valueMode: inferValueMode(value),\r\n };\r\n }\r\n\r\n if (!value?.key) {\r\n return null;\r\n }\r\n\r\n return {\r\n key: value.key,\r\n label: value.label?.trim() || toLabel(value.key),\r\n valueMode: value.valueMode ?? inferValueMode(value.key),\r\n };\r\n}\r\n\r\nfunction toStringValue(value: unknown): string {\r\n if (value === null || value === undefined) return '';\r\n return String(value);\r\n}\r\n\r\ntype NormalizedFieldType = 'text' | 'number' | 'date' | 'datetime' | 'boolean';\r\n\r\nfunction normalizeFieldType(viewType: string | undefined): NormalizedFieldType {\r\n const normalized = viewType?.toLowerCase().trim() ?? '';\r\n\r\n if (\r\n normalized === 'number' ||\r\n normalized === 'decimal' ||\r\n normalized === 'integer' ||\r\n normalized === 'percentage' ||\r\n normalized === 'progress'\r\n ) {\r\n return 'number';\r\n }\r\n\r\n if (normalized === 'datetime' || normalized === 'datetimeoffset') {\r\n return 'datetime';\r\n }\r\n\r\n if (normalized === 'date') {\r\n return 'date';\r\n }\r\n\r\n if (normalized === 'boolean' || normalized === 'bool') {\r\n return 'boolean';\r\n }\r\n\r\n return 'text';\r\n}\r\n\r\nfunction toInputType(viewType: string | undefined): string {\r\n const normalized = normalizeFieldType(viewType);\r\n if (normalized === 'number') return 'number';\r\n if (normalized === 'date') return 'date';\r\n if (normalized === 'datetime') return 'datetime-local';\r\n return 'text';\r\n}\r\n\r\nfunction parseBoolean(value: string): boolean | string {\r\n const normalized = value.toLowerCase();\r\n if (normalized === 'true' || normalized === '1' || normalized === 'yes') {\r\n return true;\r\n }\r\n if (normalized === 'false' || normalized === '0' || normalized === 'no') {\r\n return false;\r\n }\r\n return value;\r\n}\r\n\r\nfunction parseValueByViewType(\r\n rawValue: unknown,\r\n viewType: string | undefined,\r\n): unknown {\r\n if (rawValue === null || rawValue === undefined) return '';\r\n if (rawValue instanceof Date) {\r\n return rawValue.toISOString();\r\n }\r\n\r\n const value = String(rawValue).trim();\r\n if (!value.length) return '';\r\n\r\n switch (normalizeFieldType(viewType)) {\r\n case 'number': {\r\n const parsed = Number(value);\r\n return Number.isFinite(parsed) ? parsed : value;\r\n }\r\n case 'boolean':\r\n return parseBoolean(value);\r\n default:\r\n return value;\r\n }\r\n}\r\n\r\nfunction hasInputValue(rawValue: unknown): boolean {\r\n if (rawValue === null || rawValue === undefined) return false;\r\n if (rawValue instanceof Date) return true;\r\n return String(rawValue).trim().length > 0;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-property-filter-builder',\r\n standalone: true,\r\n imports: [\r\n FormsModule,\r\n Button,\r\n DateField,\r\n PopoverModule,\r\n SelectField,\r\n TextField,\r\n ],\r\n templateUrl: './property-filter-builder.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'block',\r\n },\r\n})\r\nexport class PropertyFilterBuilder {\r\n readonly schema = input<PropertyFilterBuilderSchema | null>(null);\r\n readonly filters = model<PropertyFilterBuilderRule[]>([]);\r\n readonly title = input<string>('Advanced Filters');\r\n readonly buttonLabel = input<string>('Filter');\r\n readonly disabled = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n\r\n readonly applied = output<PropertyFilterBuilderRule[]>();\r\n readonly cleared = output<void>();\r\n\r\n private readonly rowSeed = signal(0);\r\n private readonly syncedSignature = signal('');\r\n protected readonly drafts = signal<PropertyFilterBuilderDraft[]>([]);\r\n\r\n protected readonly fieldOptions = computed(() =>\r\n (this.schema()?.allowedFields ?? [])\r\n .map(normalizeFieldOption)\r\n .filter((entry): entry is SelectOption => entry !== null),\r\n );\r\n\r\n protected readonly operatorOptions = computed(() =>\r\n (this.schema()?.allowedOperators ?? []).map(normalizeOperatorOption).filter(\r\n (\r\n entry,\r\n ): entry is SelectOption & {\r\n valueMode: PropertyFilterBuilderValueMode;\r\n } => entry !== null,\r\n ),\r\n );\r\n\r\n protected readonly hasSchema = computed(\r\n () => this.fieldOptions().length > 0 && this.operatorOptions().length > 0,\r\n );\r\n\r\n protected readonly maxFilters = computed(() =>\r\n Math.max(1, this.schema()?.maxFilters ?? DEFAULT_MAX_FILTERS),\r\n );\r\n\r\n protected readonly canAddFilter = computed(() => {\r\n return this.hasSchema() && this.drafts().length < this.maxFilters();\r\n });\r\n\r\n protected readonly activeFilterCount = computed(() => this.filters().length);\r\n\r\n constructor() {\r\n effect(() => {\r\n const fields = this.fieldOptions();\r\n const operators = this.operatorOptions();\r\n const appliedFilters = this.filters();\r\n const signature = JSON.stringify({\r\n fieldKeys: fields.map((field) => field.key),\r\n operatorKeys: operators.map((operator) => operator.key),\r\n filters: appliedFilters,\r\n });\r\n const hasDrafts = untracked(() => this.drafts().length > 0);\r\n const lastSyncedSignature = untracked(() => this.syncedSignature());\r\n\r\n if (!fields.length || !operators.length) {\r\n this.drafts.set([]);\r\n this.syncedSignature.set(signature);\r\n return;\r\n }\r\n\r\n if (hasDrafts && lastSyncedSignature === signature) {\r\n return;\r\n }\r\n\r\n if (!appliedFilters.length) {\r\n this.drafts.set([this.createDraft(fields[0].key, operators[0].key)]);\r\n this.syncedSignature.set(signature);\r\n return;\r\n }\r\n\r\n const nextDrafts = appliedFilters.map((rule) => {\r\n const operatorKey = operators.some((option) => option.key === rule.op)\r\n ? rule.op\r\n : operators[0].key;\r\n const fieldKey = fields.some((option) => option.key === rule.field)\r\n ? rule.field\r\n : fields[0].key;\r\n const mode = this.getValueMode(operatorKey);\r\n\r\n return this.createDraft(\r\n fieldKey,\r\n operatorKey,\r\n mode === 'range' ? '' : this.toDraftValue(rule),\r\n mode === 'range' ? toStringValue(rule.from) : '',\r\n mode === 'range' ? toStringValue(rule.to) : '',\r\n );\r\n });\r\n\r\n this.drafts.set(\r\n nextDrafts.length\r\n ? nextDrafts\r\n : [this.createDraft(fields[0].key, operators[0].key)],\r\n );\r\n this.syncedSignature.set(signature);\r\n });\r\n }\r\n\r\n onPopoverToggle(\r\n event: Event,\r\n popover: { toggle: (event: Event) => void },\r\n ): void {\r\n if (!this.hasSchema() || this.disabled()) {\r\n return;\r\n }\r\n popover.toggle(event);\r\n }\r\n\r\n addFilter(): void {\r\n const fields = this.fieldOptions();\r\n const operators = this.operatorOptions();\r\n if (!fields.length || !operators.length) return;\r\n\r\n this.drafts.update((current) => {\r\n if (current.length >= this.maxFilters()) {\r\n return current;\r\n }\r\n\r\n return [...current, this.createDraft(fields[0].key, operators[0].key)];\r\n });\r\n }\r\n\r\n removeFilter(index: number): void {\r\n this.drafts.update((current) => {\r\n if (current.length <= 1) {\r\n return current;\r\n }\r\n return current.filter((_, rowIndex) => rowIndex !== index);\r\n });\r\n }\r\n\r\n clearAll(popover: { hide: () => void }): void {\r\n const fields = this.fieldOptions();\r\n const operators = this.operatorOptions();\r\n\r\n if (fields.length && operators.length) {\r\n this.drafts.set([this.createDraft(fields[0].key, operators[0].key)]);\r\n } else {\r\n this.drafts.set([]);\r\n }\r\n\r\n this.filters.set([]);\r\n this.cleared.emit();\r\n popover.hide();\r\n }\r\n\r\n apply(popover: { hide: () => void }): void {\r\n const rules = this.buildRulesFromDrafts();\r\n this.filters.set(rules);\r\n this.applied.emit(rules);\r\n popover.hide();\r\n }\r\n\r\n onFieldChange(index: number, field: string): void {\r\n this.patchDraft(index, { field: field || '' });\r\n }\r\n\r\n onOperatorChange(index: number, op: string): void {\r\n const mode = this.getValueMode(op);\r\n this.patchDraft(index, {\r\n op: op || '',\r\n value: mode === 'range' ? '' : (this.drafts()[index]?.value ?? ''),\r\n from: mode === 'range' ? (this.drafts()[index]?.from ?? '') : '',\r\n to: mode === 'range' ? (this.drafts()[index]?.to ?? '') : '',\r\n });\r\n }\r\n\r\n onValueChange(index: number, value: unknown): void {\r\n this.patchDraft(index, { value: value ?? '' });\r\n }\r\n\r\n onFromChange(index: number, from: unknown): void {\r\n this.patchDraft(index, { from: from ?? '' });\r\n }\r\n\r\n onToChange(index: number, to: unknown): void {\r\n this.patchDraft(index, { to: to ?? '' });\r\n }\r\n\r\n getValueMode(op: string): PropertyFilterBuilderValueMode {\r\n return (\r\n this.operatorOptions().find((option) => option.key === op)?.valueMode ??\r\n inferValueMode(op)\r\n );\r\n }\r\n\r\n getValueInputType(field: string, op: string): string {\r\n if (this.getValueMode(op) === 'multi') {\r\n return 'text';\r\n }\r\n return toInputType(this.getFieldViewType(field));\r\n }\r\n\r\n isDateField(field: string): boolean {\r\n const normalized = normalizeFieldType(this.getFieldViewType(field));\r\n return normalized === 'date' || normalized === 'datetime';\r\n }\r\n\r\n isDateTimeField(field: string): boolean {\r\n return normalizeFieldType(this.getFieldViewType(field)) === 'datetime';\r\n }\r\n\r\n private buildRulesFromDrafts(): PropertyFilterBuilderRule[] {\r\n return this.drafts()\r\n .map((draft) => {\r\n if (!draft.field || !draft.op) {\r\n return null;\r\n }\r\n\r\n const mode = this.getValueMode(draft.op);\r\n const viewType = this.getFieldViewType(draft.field);\r\n const rule: PropertyFilterBuilderRule = {\r\n field: draft.field,\r\n op: draft.op,\r\n };\r\n\r\n if (mode === 'none') {\r\n return rule;\r\n }\r\n\r\n if (mode === 'range') {\r\n if (!hasInputValue(draft.from) && !hasInputValue(draft.to)) {\r\n return null;\r\n }\r\n if (hasInputValue(draft.from)) {\r\n rule.from = parseValueByViewType(draft.from, viewType);\r\n }\r\n if (hasInputValue(draft.to)) {\r\n rule.to = parseValueByViewType(draft.to, viewType);\r\n }\r\n return rule;\r\n }\r\n\r\n if (!hasInputValue(draft.value)) {\r\n return null;\r\n }\r\n\r\n if (mode === 'multi') {\r\n const values = String(draft.value)\r\n .split(',')\r\n .map((value) => value.trim())\r\n .filter((value) => value.length > 0)\r\n .map((value) => parseValueByViewType(value, viewType));\r\n\r\n if (!values.length) {\r\n return null;\r\n }\r\n\r\n rule.values = values;\r\n return rule;\r\n }\r\n\r\n rule.value = parseValueByViewType(draft.value, viewType);\r\n return rule;\r\n })\r\n .filter((rule): rule is PropertyFilterBuilderRule => rule !== null)\r\n .slice(0, this.maxFilters());\r\n }\r\n\r\n private getFieldViewType(fieldKey: string): string | undefined {\r\n return this.fieldOptions().find((option) => option.key === fieldKey)\r\n ?.viewType;\r\n }\r\n\r\n private patchDraft(\r\n index: number,\r\n patch: Partial<PropertyFilterBuilderDraft>,\r\n ): void {\r\n this.drafts.update((current) =>\r\n current.map((row, rowIndex) =>\r\n rowIndex === index\r\n ? {\r\n ...row,\r\n ...patch,\r\n }\r\n : row,\r\n ),\r\n );\r\n }\r\n\r\n private createDraft(\r\n field: string,\r\n op: string,\r\n value: unknown = '',\r\n from: unknown = '',\r\n to: unknown = '',\r\n ): PropertyFilterBuilderDraft {\r\n this.rowSeed.update((seed) => seed + 1);\r\n return {\r\n id: `pfb-${this.rowSeed()}`,\r\n field,\r\n op,\r\n value,\r\n from,\r\n to,\r\n };\r\n }\r\n\r\n private toDraftValue(rule: PropertyFilterBuilderRule): string {\r\n if (Array.isArray(rule.values)) {\r\n return rule.values.map((entry) => toStringValue(entry)).join(', ');\r\n }\r\n\r\n return toStringValue(rule.value);\r\n }\r\n}\r\n","<mt-button\r\n [label]=\"buttonLabel()\"\r\n severity=\"secondary\"\r\n icon=\"general.filter-funnel-01\"\r\n [badge]=\"activeFilterCount() > 0 ? activeFilterCount().toString() : undefined\"\r\n [disabled]=\"disabled() || !hasSchema()\"\r\n (onClick)=\"onPopoverToggle($event, popover)\"\r\n/>\r\n\r\n<p-popover #popover [style]=\"{ width: 'min(980px, 92vw)' }\" appendTo=\"body\">\r\n <div class=\"flex flex-col gap-4\">\r\n <div\r\n class=\"flex items-center justify-between border-b border-surface-200 pb-3 px-3\"\r\n >\r\n <div class=\"flex flex-col\">\r\n <h3 class=\"m-0 text-lg font-semibold\">{{ title() }}</h3>\r\n </div>\r\n\r\n <mt-button\r\n variant=\"text\"\r\n severity=\"secondary\"\r\n label=\"Clear all\"\r\n (onClick)=\"clearAll(popover)\"\r\n />\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-3 px-3\">\r\n @for (draft of drafts(); track draft.id; let index = $index) {\r\n <div\r\n class=\"grid grid-cols-[80px_minmax(0,1fr)_auto] items-center gap-2 max-lg:grid-cols-1 max-lg:items-start\"\r\n >\r\n <div class=\"text-sm text-color\" [class.invisible]=\"index > 0\">\r\n Where\r\n </div>\r\n\r\n <div\r\n class=\"grid grid-cols-[minmax(170px,1fr)_minmax(170px,1fr)_minmax(220px,2fr)] gap-3 max-lg:grid-cols-1\"\r\n >\r\n <mt-select-field\r\n [hasPlaceholderPrefix]=\"false\"\r\n placeholder=\"Property\"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [options]=\"fieldOptions()\"\r\n [showClear]=\"false\"\r\n [ngModel]=\"draft.field\"\r\n (ngModelChange)=\"onFieldChange(index, $event)\"\r\n />\r\n\r\n <mt-select-field\r\n [hasPlaceholderPrefix]=\"false\"\r\n placeholder=\"Condition\"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [options]=\"operatorOptions()\"\r\n [showClear]=\"false\"\r\n [ngModel]=\"draft.op\"\r\n (ngModelChange)=\"onOperatorChange(index, $event)\"\r\n />\r\n\r\n @switch (getValueMode(draft.op)) {\r\n @case (\"none\") {\r\n <div\r\n class=\"flex min-h-10 items-center rounded-lg border border-dashed border-surface-300 px-3 text-sm text-color-secondary\"\r\n >\r\n No value required\r\n </div>\r\n }\r\n @case (\"range\") {\r\n <div class=\"grid grid-cols-2 gap-2 max-lg:grid-cols-1\">\r\n @if (isDateField(draft.field)) {\r\n <mt-date-field\r\n [placeholder]=\"'From'\"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.from\"\r\n (ngModelChange)=\"onFromChange(index, $event)\"\r\n />\r\n <mt-date-field\r\n [placeholder]=\"'To'\"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.to\"\r\n (ngModelChange)=\"onToChange(index, $event)\"\r\n />\r\n } @else {\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"'From'\"\r\n [ngModel]=\"draft.from\"\r\n (ngModelChange)=\"onFromChange(index, $event)\"\r\n />\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"'To'\"\r\n [ngModel]=\"draft.to\"\r\n (ngModelChange)=\"onToChange(index, $event)\"\r\n />\r\n }\r\n </div>\r\n }\r\n @default {\r\n @if (\r\n getValueMode(draft.op) !== \"multi\" && isDateField(draft.field)\r\n ) {\r\n <mt-date-field\r\n [placeholder]=\"'Value'\"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.value\"\r\n (ngModelChange)=\"onValueChange(index, $event)\"\r\n />\r\n } @else {\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"\r\n getValueMode(draft.op) === 'multi'\r\n ? 'Value (comma separated)'\r\n : 'Value'\r\n \"\r\n [ngModel]=\"draft.value\"\r\n (ngModelChange)=\"onValueChange(index, $event)\"\r\n />\r\n }\r\n }\r\n }\r\n </div>\r\n\r\n <mt-button\r\n icon=\"general.x-close\"\r\n severity=\"secondary\"\r\n variant=\"text\"\r\n [disabled]=\"drafts().length <= 1\"\r\n (onClick)=\"removeFilter(index)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex items-center justify-between p-2 max-lg:flex-col max-lg:items-stretch max-lg:gap-3\"\r\n >\r\n <mt-button\r\n label=\"Add Filter\"\r\n icon=\"general.plus\"\r\n variant=\"outlined\"\r\n [disabled]=\"!canAddFilter()\"\r\n (onClick)=\"addFilter()\"\r\n />\r\n\r\n <div class=\"flex gap-2 max-lg:w-full\">\r\n <mt-button\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n label=\"Cancel\"\r\n (onClick)=\"popover.hide()\"\r\n />\r\n <mt-button label=\"Apply\" (onClick)=\"apply(popover)\" />\r\n </div>\r\n </div>\r\n </div>\r\n</p-popover>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;AAmEA,MAAM,mBAAmB,GAAG,EAAE;AAE9B,SAAS,OAAO,CAAC,KAAa,EAAA;AAC5B,IAAA,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK;AAClD,IAAA,OAAO;AACJ,SAAA,OAAO,CAAC,OAAO,EAAE,GAAG;AACpB,SAAA,OAAO,CAAC,iBAAiB,EAAE,OAAO;AAClC,SAAA,IAAI;AACJ,SAAA,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;AACnD;AAEA,SAAS,oBAAoB,CAC3B,KAAgD,EAAA;AAEhD,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,OAAO;AACL,YAAA,GAAG,EAAE,KAAK;AACV,YAAA,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC;SACtB;IACH;AAEA,IAAA,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE;AACf,QAAA,OAAO,IAAI;IACb;IAEA,OAAO;QACL,GAAG,EAAE,KAAK,CAAC,GAAG;AACd,QAAA,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;QAChD,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB;AACH;AAEA,SAAS,cAAc,CAAC,QAAgB,EAAA;IACtC,QAAQ,QAAQ;AACd,QAAA,KAAK,IAAI;AACP,YAAA,OAAO,OAAO;AAChB,QAAA,KAAK,SAAS;AACZ,YAAA,OAAO,OAAO;AAChB,QAAA,KAAK,QAAQ;AACb,QAAA,KAAK,WAAW;AACd,YAAA,OAAO,MAAM;AACf,QAAA;AACE,YAAA,OAAO,QAAQ;;AAErB;AAEA,SAAS,uBAAuB,CAC9B,KAAmD,EAAA;AAEnD,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,OAAO;AACL,YAAA,GAAG,EAAE,KAAK;AACV,YAAA,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC;AACrB,YAAA,SAAS,EAAE,cAAc,CAAC,KAAK,CAAC;SACjC;IACH;AAEA,IAAA,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE;AACf,QAAA,OAAO,IAAI;IACb;IAEA,OAAO;QACL,GAAG,EAAE,KAAK,CAAC,GAAG;AACd,QAAA,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;QAChD,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC;KACxD;AACH;AAEA,SAAS,aAAa,CAAC,KAAc,EAAA;AACnC,IAAA,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;AAAE,QAAA,OAAO,EAAE;AACpD,IAAA,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB;AAIA,SAAS,kBAAkB,CAAC,QAA4B,EAAA;IACtD,MAAM,UAAU,GAAG,QAAQ,EAAE,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE;IAEvD,IACE,UAAU,KAAK,QAAQ;AACvB,QAAA,UAAU,KAAK,SAAS;AACxB,QAAA,UAAU,KAAK,SAAS;AACxB,QAAA,UAAU,KAAK,YAAY;QAC3B,UAAU,KAAK,UAAU,EACzB;AACA,QAAA,OAAO,QAAQ;IACjB;IAEA,IAAI,UAAU,KAAK,UAAU,IAAI,UAAU,KAAK,gBAAgB,EAAE;AAChE,QAAA,OAAO,UAAU;IACnB;AAEA,IAAA,IAAI,UAAU,KAAK,MAAM,EAAE;AACzB,QAAA,OAAO,MAAM;IACf;IAEA,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,MAAM,EAAE;AACrD,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,OAAO,MAAM;AACf;AAEA,SAAS,WAAW,CAAC,QAA4B,EAAA;AAC/C,IAAA,MAAM,UAAU,GAAG,kBAAkB,CAAC,QAAQ,CAAC;IAC/C,IAAI,UAAU,KAAK,QAAQ;AAAE,QAAA,OAAO,QAAQ;IAC5C,IAAI,UAAU,KAAK,MAAM;AAAE,QAAA,OAAO,MAAM;IACxC,IAAI,UAAU,KAAK,UAAU;AAAE,QAAA,OAAO,gBAAgB;AACtD,IAAA,OAAO,MAAM;AACf;AAEA,SAAS,YAAY,CAAC,KAAa,EAAA;AACjC,IAAA,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE;AACtC,IAAA,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,KAAK,EAAE;AACvE,QAAA,OAAO,IAAI;IACb;AACA,IAAA,IAAI,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,IAAI,EAAE;AACvE,QAAA,OAAO,KAAK;IACd;AACA,IAAA,OAAO,KAAK;AACd;AAEA,SAAS,oBAAoB,CAC3B,QAAiB,EACjB,QAA4B,EAAA;AAE5B,IAAA,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS;AAAE,QAAA,OAAO,EAAE;AAC1D,IAAA,IAAI,QAAQ,YAAY,IAAI,EAAE;AAC5B,QAAA,OAAO,QAAQ,CAAC,WAAW,EAAE;IAC/B;IAEA,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE;IACrC,IAAI,CAAC,KAAK,CAAC,MAAM;AAAE,QAAA,OAAO,EAAE;AAE5B,IAAA,QAAQ,kBAAkB,CAAC,QAAQ,CAAC;QAClC,KAAK,QAAQ,EAAE;AACb,YAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC;AAC5B,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,KAAK;QACjD;AACA,QAAA,KAAK,SAAS;AACZ,YAAA,OAAO,YAAY,CAAC,KAAK,CAAC;AAC5B,QAAA;AACE,YAAA,OAAO,KAAK;;AAElB;AAEA,SAAS,aAAa,CAAC,QAAiB,EAAA;AACtC,IAAA,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS;AAAE,QAAA,OAAO,KAAK;IAC7D,IAAI,QAAQ,YAAY,IAAI;AAAE,QAAA,OAAO,IAAI;IACzC,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;AAC3C;MAmBa,qBAAqB,CAAA;AACvB,IAAA,MAAM,GAAG,KAAK,CAAqC,IAAI,kDAAC;AACxD,IAAA,OAAO,GAAG,KAAK,CAA8B,EAAE,mDAAC;AAChD,IAAA,KAAK,GAAG,KAAK,CAAS,kBAAkB,iDAAC;AACzC,IAAA,WAAW,GAAG,KAAK,CAAS,QAAQ,uDAAC;IACrC,QAAQ,GAAG,KAAK,CAAmB,KAAK,qDAC/C,SAAS,EAAE,gBAAgB,EAAA,CAC3B;IAEO,OAAO,GAAG,MAAM,EAA+B;IAC/C,OAAO,GAAG,MAAM,EAAQ;AAEhB,IAAA,OAAO,GAAG,MAAM,CAAC,CAAC,mDAAC;AACnB,IAAA,eAAe,GAAG,MAAM,CAAC,EAAE,2DAAC;AAC1B,IAAA,MAAM,GAAG,MAAM,CAA+B,EAAE,kDAAC;AAEjD,IAAA,YAAY,GAAG,QAAQ,CAAC,MACzC,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,aAAa,IAAI,EAAE;SAChC,GAAG,CAAC,oBAAoB;SACxB,MAAM,CAAC,CAAC,KAAK,KAA4B,KAAK,KAAK,IAAI,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAC5D;AAEkB,IAAA,eAAe,GAAG,QAAQ,CAAC,MAC5C,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,gBAAgB,IAAI,EAAE,EAAE,GAAG,CAAC,uBAAuB,CAAC,CAAC,MAAM,CACzE,CACE,KAAK,KAGF,KAAK,KAAK,IAAI,CACpB,2DACF;IAEkB,SAAS,GAAG,QAAQ,CACrC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC,MAAM,GAAG,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,WAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAC1E;IAEkB,UAAU,GAAG,QAAQ,CAAC,MACvC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,IAAI,mBAAmB,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAC9D;AAEkB,IAAA,YAAY,GAAG,QAAQ,CAAC,MAAK;AAC9C,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE;AACrE,IAAA,CAAC,wDAAC;AAEiB,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,6DAAC;AAE5E,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE;AAClC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE;AACxC,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE;AACrC,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AAC/B,gBAAA,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC;AAC3C,gBAAA,YAAY,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,GAAG,CAAC;AACvD,gBAAA,OAAO,EAAE,cAAc;AACxB,aAAA,CAAC;AACF,YAAA,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3D,YAAA,MAAM,mBAAmB,GAAG,SAAS,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAEnE,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE;AACvC,gBAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AACnB,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC;gBACnC;YACF;AAEA,YAAA,IAAI,SAAS,IAAI,mBAAmB,KAAK,SAAS,EAAE;gBAClD;YACF;AAEA,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;gBAC1B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACpE,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC;gBACnC;YACF;YAEA,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AAC7C,gBAAA,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE;sBACjE,IAAI,CAAC;AACP,sBAAE,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG;AACpB,gBAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,KAAK,IAAI,CAAC,KAAK;sBAC9D,IAAI,CAAC;AACP,sBAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG;gBACjB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;gBAE3C,OAAO,IAAI,CAAC,WAAW,CACrB,QAAQ,EACR,WAAW,EACX,IAAI,KAAK,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAC/C,IAAI,KAAK,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAChD,IAAI,KAAK,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAC/C;AACH,YAAA,CAAC,CAAC;AAEF,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CACb,UAAU,CAAC;AACT,kBAAE;kBACA,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CACxD;AACD,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC;AACrC,QAAA,CAAC,CAAC;IACJ;IAEA,eAAe,CACb,KAAY,EACZ,OAA2C,EAAA;QAE3C,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACxC;QACF;AACA,QAAA,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IACvB;IAEA,SAAS,GAAA;AACP,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE;AAClC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE;QACxC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM;YAAE;QAEzC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;YAC7B,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;AACvC,gBAAA,OAAO,OAAO;YAChB;YAEA,OAAO,CAAC,GAAG,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACxE,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,YAAY,CAAC,KAAa,EAAA;QACxB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AAC7B,YAAA,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE;AACvB,gBAAA,OAAO,OAAO;YAChB;AACA,YAAA,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,KAAK,QAAQ,KAAK,KAAK,CAAC;AAC5D,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,QAAQ,CAAC,OAA6B,EAAA;AACpC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE;AAClC,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE;QAExC,IAAI,MAAM,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE;YACrC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtE;aAAO;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;QACnB,OAAO,CAAC,IAAI,EAAE;IAChB;AAEA,IAAA,KAAK,CAAC,OAA6B,EAAA;AACjC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,EAAE;AACzC,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QACxB,OAAO,CAAC,IAAI,EAAE;IAChB;IAEA,aAAa,CAAC,KAAa,EAAE,KAAa,EAAA;AACxC,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;IAChD;IAEA,gBAAgB,CAAC,KAAa,EAAE,EAAU,EAAA;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;AAClC,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;YACrB,EAAE,EAAE,EAAE,IAAI,EAAE;YACZ,KAAK,EAAE,IAAI,KAAK,OAAO,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;YAClE,IAAI,EAAE,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,EAAE,IAAI,EAAE;YAChE,EAAE,EAAE,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;AAC7D,SAAA,CAAC;IACJ;IAEA,aAAa,CAAC,KAAa,EAAE,KAAc,EAAA;AACzC,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;IAChD;IAEA,YAAY,CAAC,KAAa,EAAE,IAAa,EAAA;AACvC,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;IAC9C;IAEA,UAAU,CAAC,KAAa,EAAE,EAAW,EAAA;AACnC,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC;IAC1C;AAEA,IAAA,YAAY,CAAC,EAAU,EAAA;QACrB,QACE,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,SAAS;AACrE,YAAA,cAAc,CAAC,EAAE,CAAC;IAEtB;IAEA,iBAAiB,CAAC,KAAa,EAAE,EAAU,EAAA;QACzC,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,KAAK,OAAO,EAAE;AACrC,YAAA,OAAO,MAAM;QACf;QACA,OAAO,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAClD;AAEA,IAAA,WAAW,CAAC,KAAa,EAAA;QACvB,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACnE,QAAA,OAAO,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,UAAU;IAC3D;AAEA,IAAA,eAAe,CAAC,KAAa,EAAA;QAC3B,OAAO,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,KAAK,UAAU;IACxE;IAEQ,oBAAoB,GAAA;QAC1B,OAAO,IAAI,CAAC,MAAM;AACf,aAAA,GAAG,CAAC,CAAC,KAAK,KAAI;YACb,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE;AAC7B,gBAAA,OAAO,IAAI;YACb;YAEA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC;AACnD,YAAA,MAAM,IAAI,GAA8B;gBACtC,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,EAAE,EAAE,KAAK,CAAC,EAAE;aACb;AAED,YAAA,IAAI,IAAI,KAAK,MAAM,EAAE;AACnB,gBAAA,OAAO,IAAI;YACb;AAEA,YAAA,IAAI,IAAI,KAAK,OAAO,EAAE;AACpB,gBAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;AAC1D,oBAAA,OAAO,IAAI;gBACb;AACA,gBAAA,IAAI,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;oBAC7B,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,CAAC;gBACxD;AACA,gBAAA,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;oBAC3B,IAAI,CAAC,EAAE,GAAG,oBAAoB,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC;gBACpD;AACA,gBAAA,OAAO,IAAI;YACb;YAEA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;AAC/B,gBAAA,OAAO,IAAI;YACb;AAEA,YAAA,IAAI,IAAI,KAAK,OAAO,EAAE;AACpB,gBAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK;qBAC9B,KAAK,CAAC,GAAG;qBACT,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE;qBAC3B,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC;AAClC,qBAAA,GAAG,CAAC,CAAC,KAAK,KAAK,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAExD,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAClB,oBAAA,OAAO,IAAI;gBACb;AAEA,gBAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,gBAAA,OAAO,IAAI;YACb;YAEA,IAAI,CAAC,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC;AACxD,YAAA,OAAO,IAAI;AACb,QAAA,CAAC;aACA,MAAM,CAAC,CAAC,IAAI,KAAwC,IAAI,KAAK,IAAI;aACjE,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;IAChC;AAEQ,IAAA,gBAAgB,CAAC,QAAgB,EAAA;AACvC,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,GAAG,KAAK,QAAQ;AACjE,cAAE,QAAQ;IACd;IAEQ,UAAU,CAChB,KAAa,EACb,KAA0C,EAAA;QAE1C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,KACzB,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,QAAQ,KACxB,QAAQ,KAAK;AACX,cAAE;AACE,gBAAA,GAAG,GAAG;AACN,gBAAA,GAAG,KAAK;AACT;AACH,cAAE,GAAG,CACR,CACF;IACH;AAEQ,IAAA,WAAW,CACjB,KAAa,EACb,EAAU,EACV,KAAA,GAAiB,EAAE,EACnB,IAAA,GAAgB,EAAE,EAClB,EAAA,GAAc,EAAE,EAAA;AAEhB,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,GAAG,CAAC,CAAC;QACvC,OAAO;AACL,YAAA,EAAE,EAAE,CAAA,IAAA,EAAO,IAAI,CAAC,OAAO,EAAE,CAAA,CAAE;YAC3B,KAAK;YACL,EAAE;YACF,KAAK;YACL,IAAI;YACJ,EAAE;SACH;IACH;AAEQ,IAAA,YAAY,CAAC,IAA+B,EAAA;QAClD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;YAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QACpE;AAEA,QAAA,OAAO,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;IAClC;uGApTW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5OlC,+nMAkKA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED6DI,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,SAAS,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACT,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,WAAW,0hBACX,SAAS,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,MAAA,EAAA,cAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAQA,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAjBjC,SAAS;+BACE,4BAA4B,EAAA,UAAA,EAC1B,IAAI,EAAA,OAAA,EACP;wBACP,WAAW;wBACX,MAAM;wBACN,SAAS;wBACT,aAAa;wBACb,WAAW;wBACX,SAAS;qBACV,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,KAAK,EAAE,OAAO;AACf,qBAAA,EAAA,QAAA,EAAA,+nMAAA,EAAA;;;AE1OH;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"masterteam-components-property-filter-builder.mjs","sources":["../../../../packages/masterteam/components/property-filter-builder/property-filter-builder.ts","../../../../packages/masterteam/components/property-filter-builder/property-filter-builder.html","../../../../packages/masterteam/components/property-filter-builder/masterteam-components-property-filter-builder.ts"],"sourcesContent":["import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n booleanAttribute,\r\n computed,\r\n effect,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n untracked,\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { DateField } from '@masterteam/components/date-field';\r\nimport { SelectField } from '@masterteam/components/select-field';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport { PopoverModule } from 'primeng/popover';\r\n\r\nexport type PropertyFilterBuilderValueMode =\r\n | 'single'\r\n | 'multi'\r\n | 'range'\r\n | 'none';\r\n\r\nexport interface PropertyFilterBuilderFieldOption {\r\n key: string;\r\n label?: string;\r\n viewType?: string;\r\n}\r\n\r\nexport interface PropertyFilterBuilderOperatorOption {\r\n key: string;\r\n label?: string;\r\n valueMode?: PropertyFilterBuilderValueMode;\r\n}\r\n\r\nexport interface PropertyFilterBuilderSchema {\r\n allowedFields: Array<string | PropertyFilterBuilderFieldOption>;\r\n allowedOperators: Array<string | PropertyFilterBuilderOperatorOption>;\r\n maxFilters?: number;\r\n}\r\n\r\nexport interface PropertyFilterBuilderRule {\r\n field: string;\r\n op: string;\r\n value?: unknown;\r\n values?: unknown[];\r\n from?: unknown;\r\n to?: unknown;\r\n}\r\n\r\ninterface PropertyFilterBuilderDraft {\r\n id: string;\r\n field: string;\r\n op: string;\r\n value: unknown;\r\n from: unknown;\r\n to: unknown;\r\n}\r\n\r\ninterface SelectOption {\r\n key: string;\r\n label: string;\r\n viewType?: string;\r\n}\r\n\r\nconst DEFAULT_MAX_FILTERS = 20;\r\n\r\nfunction toLabel(value: string): string {\r\n const normalized = value.split('.').pop() ?? value;\r\n return normalized\r\n .replace(/[_-]/g, ' ')\r\n .replace(/([a-z])([A-Z])/g, '$1 $2')\r\n .trim()\r\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\r\n}\r\n\r\nfunction normalizeFieldOption(\r\n value: string | PropertyFilterBuilderFieldOption,\r\n): SelectOption | null {\r\n if (typeof value === 'string') {\r\n return {\r\n key: value,\r\n label: toLabel(value),\r\n };\r\n }\r\n\r\n if (!value?.key) {\r\n return null;\r\n }\r\n\r\n return {\r\n key: value.key,\r\n label: value.label?.trim() || toLabel(value.key),\r\n viewType: value.viewType,\r\n };\r\n}\r\n\r\nfunction inferValueMode(operator: string): PropertyFilterBuilderValueMode {\r\n switch (operator) {\r\n case 'In':\r\n return 'multi';\r\n case 'Between':\r\n return 'range';\r\n case 'IsNull':\r\n case 'IsNotNull':\r\n return 'none';\r\n default:\r\n return 'single';\r\n }\r\n}\r\n\r\nfunction normalizeOperatorOption(\r\n value: string | PropertyFilterBuilderOperatorOption,\r\n): (SelectOption & { valueMode: PropertyFilterBuilderValueMode }) | null {\r\n if (typeof value === 'string') {\r\n return {\r\n key: value,\r\n label: toLabel(value),\r\n valueMode: inferValueMode(value),\r\n };\r\n }\r\n\r\n if (!value?.key) {\r\n return null;\r\n }\r\n\r\n return {\r\n key: value.key,\r\n label: value.label?.trim() || toLabel(value.key),\r\n valueMode: value.valueMode ?? inferValueMode(value.key),\r\n };\r\n}\r\n\r\nfunction toStringValue(value: unknown): string {\r\n if (value === null || value === undefined) return '';\r\n return String(value);\r\n}\r\n\r\ntype NormalizedFieldType = 'text' | 'number' | 'date' | 'datetime' | 'boolean';\r\n\r\nfunction normalizeFieldType(viewType: string | undefined): NormalizedFieldType {\r\n const normalized = viewType?.toLowerCase().trim() ?? '';\r\n\r\n if (\r\n normalized === 'number' ||\r\n normalized === 'decimal' ||\r\n normalized === 'integer' ||\r\n normalized === 'percentage' ||\r\n normalized === 'progress'\r\n ) {\r\n return 'number';\r\n }\r\n\r\n if (normalized === 'datetime' || normalized === 'datetimeoffset') {\r\n return 'datetime';\r\n }\r\n\r\n if (normalized === 'date') {\r\n return 'date';\r\n }\r\n\r\n if (normalized === 'boolean' || normalized === 'bool') {\r\n return 'boolean';\r\n }\r\n\r\n return 'text';\r\n}\r\n\r\nfunction toInputType(viewType: string | undefined): string {\r\n const normalized = normalizeFieldType(viewType);\r\n if (normalized === 'number') return 'number';\r\n if (normalized === 'date') return 'date';\r\n if (normalized === 'datetime') return 'datetime-local';\r\n return 'text';\r\n}\r\n\r\nfunction parseBoolean(value: string): boolean | string {\r\n const normalized = value.toLowerCase();\r\n if (normalized === 'true' || normalized === '1' || normalized === 'yes') {\r\n return true;\r\n }\r\n if (normalized === 'false' || normalized === '0' || normalized === 'no') {\r\n return false;\r\n }\r\n return value;\r\n}\r\n\r\nfunction parseValueByViewType(\r\n rawValue: unknown,\r\n viewType: string | undefined,\r\n): unknown {\r\n if (rawValue === null || rawValue === undefined) return '';\r\n if (rawValue instanceof Date) {\r\n return rawValue.toISOString();\r\n }\r\n\r\n const value = String(rawValue).trim();\r\n if (!value.length) return '';\r\n\r\n switch (normalizeFieldType(viewType)) {\r\n case 'number': {\r\n const parsed = Number(value);\r\n return Number.isFinite(parsed) ? parsed : value;\r\n }\r\n case 'boolean':\r\n return parseBoolean(value);\r\n default:\r\n return value;\r\n }\r\n}\r\n\r\nfunction hasInputValue(rawValue: unknown): boolean {\r\n if (rawValue === null || rawValue === undefined) return false;\r\n if (rawValue instanceof Date) return true;\r\n return String(rawValue).trim().length > 0;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-property-filter-builder',\r\n standalone: true,\r\n imports: [\r\n FormsModule,\r\n TranslocoModule,\r\n Button,\r\n DateField,\r\n PopoverModule,\r\n SelectField,\r\n TextField,\r\n ],\r\n templateUrl: './property-filter-builder.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'block',\r\n },\r\n})\r\nexport class PropertyFilterBuilder {\r\n readonly schema = input<PropertyFilterBuilderSchema | null>(null);\r\n readonly filters = model<PropertyFilterBuilderRule[]>([]);\r\n readonly title = input<string | null>(null);\r\n readonly buttonLabel = input<string | null>(null);\r\n readonly disabled = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n\r\n readonly applied = output<PropertyFilterBuilderRule[]>();\r\n readonly cleared = output<void>();\r\n\r\n private readonly rowSeed = signal(0);\r\n private readonly syncedSignature = signal('');\r\n protected readonly drafts = signal<PropertyFilterBuilderDraft[]>([]);\r\n\r\n protected readonly fieldOptions = computed(() =>\r\n (this.schema()?.allowedFields ?? [])\r\n .map(normalizeFieldOption)\r\n .filter((entry): entry is SelectOption => entry !== null),\r\n );\r\n\r\n protected readonly operatorOptions = computed(() =>\r\n (this.schema()?.allowedOperators ?? []).map(normalizeOperatorOption).filter(\r\n (\r\n entry,\r\n ): entry is SelectOption & {\r\n valueMode: PropertyFilterBuilderValueMode;\r\n } => entry !== null,\r\n ),\r\n );\r\n\r\n protected readonly hasSchema = computed(\r\n () => this.fieldOptions().length > 0 && this.operatorOptions().length > 0,\r\n );\r\n\r\n protected readonly maxFilters = computed(() =>\r\n Math.max(1, this.schema()?.maxFilters ?? DEFAULT_MAX_FILTERS),\r\n );\r\n\r\n protected readonly canAddFilter = computed(() => {\r\n return this.hasSchema() && this.drafts().length < this.maxFilters();\r\n });\r\n\r\n protected readonly activeFilterCount = computed(() => this.filters().length);\r\n\r\n constructor() {\r\n effect(() => {\r\n const fields = this.fieldOptions();\r\n const operators = this.operatorOptions();\r\n const appliedFilters = this.filters();\r\n const signature = JSON.stringify({\r\n fieldKeys: fields.map((field) => field.key),\r\n operatorKeys: operators.map((operator) => operator.key),\r\n filters: appliedFilters,\r\n });\r\n const hasDrafts = untracked(() => this.drafts().length > 0);\r\n const lastSyncedSignature = untracked(() => this.syncedSignature());\r\n\r\n if (!fields.length || !operators.length) {\r\n this.drafts.set([]);\r\n this.syncedSignature.set(signature);\r\n return;\r\n }\r\n\r\n if (hasDrafts && lastSyncedSignature === signature) {\r\n return;\r\n }\r\n\r\n if (!appliedFilters.length) {\r\n this.drafts.set([this.createDraft(fields[0].key, operators[0].key)]);\r\n this.syncedSignature.set(signature);\r\n return;\r\n }\r\n\r\n const nextDrafts = appliedFilters.map((rule) => {\r\n const operatorKey = operators.some((option) => option.key === rule.op)\r\n ? rule.op\r\n : operators[0].key;\r\n const fieldKey = fields.some((option) => option.key === rule.field)\r\n ? rule.field\r\n : fields[0].key;\r\n const mode = this.getValueMode(operatorKey);\r\n\r\n return this.createDraft(\r\n fieldKey,\r\n operatorKey,\r\n mode === 'range' ? '' : this.toDraftValue(rule),\r\n mode === 'range' ? toStringValue(rule.from) : '',\r\n mode === 'range' ? toStringValue(rule.to) : '',\r\n );\r\n });\r\n\r\n this.drafts.set(\r\n nextDrafts.length\r\n ? nextDrafts\r\n : [this.createDraft(fields[0].key, operators[0].key)],\r\n );\r\n this.syncedSignature.set(signature);\r\n });\r\n }\r\n\r\n onPopoverToggle(\r\n event: Event,\r\n popover: { toggle: (event: Event) => void },\r\n ): void {\r\n if (!this.hasSchema() || this.disabled()) {\r\n return;\r\n }\r\n popover.toggle(event);\r\n }\r\n\r\n addFilter(): void {\r\n const fields = this.fieldOptions();\r\n const operators = this.operatorOptions();\r\n if (!fields.length || !operators.length) return;\r\n\r\n this.drafts.update((current) => {\r\n if (current.length >= this.maxFilters()) {\r\n return current;\r\n }\r\n\r\n return [...current, this.createDraft(fields[0].key, operators[0].key)];\r\n });\r\n }\r\n\r\n removeFilter(index: number): void {\r\n this.drafts.update((current) => {\r\n if (current.length <= 1) {\r\n return current;\r\n }\r\n return current.filter((_, rowIndex) => rowIndex !== index);\r\n });\r\n }\r\n\r\n clearAll(popover: { hide: () => void }): void {\r\n const fields = this.fieldOptions();\r\n const operators = this.operatorOptions();\r\n\r\n if (fields.length && operators.length) {\r\n this.drafts.set([this.createDraft(fields[0].key, operators[0].key)]);\r\n } else {\r\n this.drafts.set([]);\r\n }\r\n\r\n this.filters.set([]);\r\n this.cleared.emit();\r\n popover.hide();\r\n }\r\n\r\n apply(popover: { hide: () => void }): void {\r\n const rules = this.buildRulesFromDrafts();\r\n this.filters.set(rules);\r\n this.applied.emit(rules);\r\n popover.hide();\r\n }\r\n\r\n onFieldChange(index: number, field: string): void {\r\n this.patchDraft(index, { field: field || '' });\r\n }\r\n\r\n onOperatorChange(index: number, op: string): void {\r\n const mode = this.getValueMode(op);\r\n this.patchDraft(index, {\r\n op: op || '',\r\n value: mode === 'range' ? '' : (this.drafts()[index]?.value ?? ''),\r\n from: mode === 'range' ? (this.drafts()[index]?.from ?? '') : '',\r\n to: mode === 'range' ? (this.drafts()[index]?.to ?? '') : '',\r\n });\r\n }\r\n\r\n onValueChange(index: number, value: unknown): void {\r\n this.patchDraft(index, { value: value ?? '' });\r\n }\r\n\r\n onFromChange(index: number, from: unknown): void {\r\n this.patchDraft(index, { from: from ?? '' });\r\n }\r\n\r\n onToChange(index: number, to: unknown): void {\r\n this.patchDraft(index, { to: to ?? '' });\r\n }\r\n\r\n getValueMode(op: string): PropertyFilterBuilderValueMode {\r\n return (\r\n this.operatorOptions().find((option) => option.key === op)?.valueMode ??\r\n inferValueMode(op)\r\n );\r\n }\r\n\r\n getValueInputType(field: string, op: string): string {\r\n if (this.getValueMode(op) === 'multi') {\r\n return 'text';\r\n }\r\n return toInputType(this.getFieldViewType(field));\r\n }\r\n\r\n isDateField(field: string): boolean {\r\n const normalized = normalizeFieldType(this.getFieldViewType(field));\r\n return normalized === 'date' || normalized === 'datetime';\r\n }\r\n\r\n isDateTimeField(field: string): boolean {\r\n return normalizeFieldType(this.getFieldViewType(field)) === 'datetime';\r\n }\r\n\r\n private buildRulesFromDrafts(): PropertyFilterBuilderRule[] {\r\n return this.drafts()\r\n .map((draft) => {\r\n if (!draft.field || !draft.op) {\r\n return null;\r\n }\r\n\r\n const mode = this.getValueMode(draft.op);\r\n const viewType = this.getFieldViewType(draft.field);\r\n const rule: PropertyFilterBuilderRule = {\r\n field: draft.field,\r\n op: draft.op,\r\n };\r\n\r\n if (mode === 'none') {\r\n return rule;\r\n }\r\n\r\n if (mode === 'range') {\r\n if (!hasInputValue(draft.from) && !hasInputValue(draft.to)) {\r\n return null;\r\n }\r\n if (hasInputValue(draft.from)) {\r\n rule.from = parseValueByViewType(draft.from, viewType);\r\n }\r\n if (hasInputValue(draft.to)) {\r\n rule.to = parseValueByViewType(draft.to, viewType);\r\n }\r\n return rule;\r\n }\r\n\r\n if (!hasInputValue(draft.value)) {\r\n return null;\r\n }\r\n\r\n if (mode === 'multi') {\r\n const values = String(draft.value)\r\n .split(',')\r\n .map((value) => value.trim())\r\n .filter((value) => value.length > 0)\r\n .map((value) => parseValueByViewType(value, viewType));\r\n\r\n if (!values.length) {\r\n return null;\r\n }\r\n\r\n rule.values = values;\r\n return rule;\r\n }\r\n\r\n rule.value = parseValueByViewType(draft.value, viewType);\r\n return rule;\r\n })\r\n .filter((rule): rule is PropertyFilterBuilderRule => rule !== null)\r\n .slice(0, this.maxFilters());\r\n }\r\n\r\n private getFieldViewType(fieldKey: string): string | undefined {\r\n return this.fieldOptions().find((option) => option.key === fieldKey)\r\n ?.viewType;\r\n }\r\n\r\n private patchDraft(\r\n index: number,\r\n patch: Partial<PropertyFilterBuilderDraft>,\r\n ): void {\r\n this.drafts.update((current) =>\r\n current.map((row, rowIndex) =>\r\n rowIndex === index\r\n ? {\r\n ...row,\r\n ...patch,\r\n }\r\n : row,\r\n ),\r\n );\r\n }\r\n\r\n private createDraft(\r\n field: string,\r\n op: string,\r\n value: unknown = '',\r\n from: unknown = '',\r\n to: unknown = '',\r\n ): PropertyFilterBuilderDraft {\r\n this.rowSeed.update((seed) => seed + 1);\r\n return {\r\n id: `pfb-${this.rowSeed()}`,\r\n field,\r\n op,\r\n value,\r\n from,\r\n to,\r\n };\r\n }\r\n\r\n private toDraftValue(rule: PropertyFilterBuilderRule): string {\r\n if (Array.isArray(rule.values)) {\r\n return rule.values.map((entry) => toStringValue(entry)).join(', ');\r\n }\r\n\r\n return toStringValue(rule.value);\r\n }\r\n}\r\n","<mt-button\r\n [label]=\"\r\n buttonLabel() || ('components.propertyFilterBuilder.filter' | transloco)\r\n \"\r\n severity=\"secondary\"\r\n icon=\"general.filter-funnel-01\"\r\n [badge]=\"activeFilterCount() > 0 ? activeFilterCount().toString() : undefined\"\r\n [disabled]=\"disabled() || !hasSchema()\"\r\n (onClick)=\"onPopoverToggle($event, popover)\"\r\n/>\r\n\r\n<p-popover #popover [style]=\"{ width: 'min(980px, 92vw)' }\" appendTo=\"body\">\r\n <div class=\"flex flex-col gap-4\">\r\n <div\r\n class=\"flex items-center justify-between border-b border-surface-200 pb-3 px-3\"\r\n >\r\n <div class=\"flex flex-col\">\r\n <h3 class=\"m-0 text-lg font-semibold\">\r\n {{\r\n title() ||\r\n (\"components.propertyFilterBuilder.advancedFilters\" | transloco)\r\n }}\r\n </h3>\r\n </div>\r\n\r\n <mt-button\r\n variant=\"text\"\r\n severity=\"secondary\"\r\n [label]=\"'components.propertyFilterBuilder.clearAll' | transloco\"\r\n (onClick)=\"clearAll(popover)\"\r\n />\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-3 px-3\">\r\n @for (draft of drafts(); track draft.id; let index = $index) {\r\n <div\r\n class=\"grid grid-cols-[80px_minmax(0,1fr)_auto] items-center gap-2 max-lg:grid-cols-1 max-lg:items-start\"\r\n >\r\n <div class=\"text-sm text-color\" [class.invisible]=\"index > 0\">\r\n {{ \"components.propertyFilterBuilder.where\" | transloco }}\r\n </div>\r\n\r\n <div\r\n class=\"grid grid-cols-[minmax(170px,1fr)_minmax(170px,1fr)_minmax(220px,2fr)] gap-3 max-lg:grid-cols-1\"\r\n >\r\n <mt-select-field\r\n [hasPlaceholderPrefix]=\"false\"\r\n [placeholder]=\"\r\n 'components.propertyFilterBuilder.property' | transloco\r\n \"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [options]=\"fieldOptions()\"\r\n [showClear]=\"false\"\r\n [ngModel]=\"draft.field\"\r\n (ngModelChange)=\"onFieldChange(index, $event)\"\r\n />\r\n\r\n <mt-select-field\r\n [hasPlaceholderPrefix]=\"false\"\r\n [placeholder]=\"\r\n 'components.propertyFilterBuilder.condition' | transloco\r\n \"\r\n optionLabel=\"label\"\r\n optionValue=\"key\"\r\n [options]=\"operatorOptions()\"\r\n [showClear]=\"false\"\r\n [ngModel]=\"draft.op\"\r\n (ngModelChange)=\"onOperatorChange(index, $event)\"\r\n />\r\n\r\n @switch (getValueMode(draft.op)) {\r\n @case (\"none\") {\r\n <div\r\n class=\"flex min-h-10 items-center rounded-lg border border-dashed border-surface-300 px-3 text-sm text-color-secondary\"\r\n >\r\n {{\r\n \"components.propertyFilterBuilder.noValueRequired\"\r\n | transloco\r\n }}\r\n </div>\r\n }\r\n @case (\"range\") {\r\n <div class=\"grid grid-cols-2 gap-2 max-lg:grid-cols-1\">\r\n @if (isDateField(draft.field)) {\r\n <mt-date-field\r\n [placeholder]=\"\r\n 'components.propertyFilterBuilder.from' | transloco\r\n \"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.from\"\r\n (ngModelChange)=\"onFromChange(index, $event)\"\r\n />\r\n <mt-date-field\r\n [placeholder]=\"\r\n 'components.propertyFilterBuilder.to' | transloco\r\n \"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.to\"\r\n (ngModelChange)=\"onToChange(index, $event)\"\r\n />\r\n } @else {\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"\r\n 'components.propertyFilterBuilder.from' | transloco\r\n \"\r\n [ngModel]=\"draft.from\"\r\n (ngModelChange)=\"onFromChange(index, $event)\"\r\n />\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"\r\n 'components.propertyFilterBuilder.to' | transloco\r\n \"\r\n [ngModel]=\"draft.to\"\r\n (ngModelChange)=\"onToChange(index, $event)\"\r\n />\r\n }\r\n </div>\r\n }\r\n @default {\r\n @if (\r\n getValueMode(draft.op) !== \"multi\" && isDateField(draft.field)\r\n ) {\r\n <mt-date-field\r\n [placeholder]=\"\r\n 'components.propertyFilterBuilder.value' | transloco\r\n \"\r\n [showTime]=\"isDateTimeField(draft.field)\"\r\n [showIcon]=\"false\"\r\n [ngModel]=\"draft.value\"\r\n (ngModelChange)=\"onValueChange(index, $event)\"\r\n />\r\n } @else {\r\n <mt-text-field\r\n [type]=\"getValueInputType(draft.field, draft.op)\"\r\n [placeholder]=\"\r\n getValueMode(draft.op) === 'multi'\r\n ? ('components.propertyFilterBuilder.multiValue'\r\n | transloco)\r\n : ('components.propertyFilterBuilder.value' | transloco)\r\n \"\r\n [ngModel]=\"draft.value\"\r\n (ngModelChange)=\"onValueChange(index, $event)\"\r\n />\r\n }\r\n }\r\n }\r\n </div>\r\n\r\n <mt-button\r\n icon=\"general.x-close\"\r\n severity=\"secondary\"\r\n variant=\"text\"\r\n [disabled]=\"drafts().length <= 1\"\r\n (onClick)=\"removeFilter(index)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex items-center justify-between p-2 max-lg:flex-col max-lg:items-stretch max-lg:gap-3\"\r\n >\r\n <mt-button\r\n [label]=\"'components.propertyFilterBuilder.addFilter' | transloco\"\r\n icon=\"general.plus\"\r\n variant=\"outlined\"\r\n [disabled]=\"!canAddFilter()\"\r\n (onClick)=\"addFilter()\"\r\n />\r\n\r\n <div class=\"flex gap-2 max-lg:w-full\">\r\n <mt-button\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n [label]=\"'components.propertyFilterBuilder.cancel' | transloco\"\r\n (onClick)=\"popover.hide()\"\r\n />\r\n <mt-button\r\n [label]=\"'components.propertyFilterBuilder.apply' | transloco\"\r\n (onClick)=\"apply(popover)\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n</p-popover>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|