@masterteam/components 0.0.89 → 0.0.90
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 +2 -2
- package/fesm2022/masterteam-components-client-page.mjs +16 -5
- package/fesm2022/masterteam-components-client-page.mjs.map +1 -1
- package/fesm2022/masterteam-components-entities.mjs +427 -0
- package/fesm2022/masterteam-components-entities.mjs.map +1 -0
- package/fesm2022/masterteam-components-multi-select-field.mjs +95 -4
- package/fesm2022/masterteam-components-multi-select-field.mjs.map +1 -1
- package/fesm2022/masterteam-components-property-filter-builder.mjs +383 -0
- package/fesm2022/masterteam-components-property-filter-builder.mjs.map +1 -0
- package/fesm2022/masterteam-components-select-field.mjs +135 -4
- package/fesm2022/masterteam-components-select-field.mjs.map +1 -1
- package/fesm2022/masterteam-components-sidebar.mjs +2 -2
- package/fesm2022/masterteam-components-sidebar.mjs.map +1 -1
- package/fesm2022/masterteam-components-table.mjs +1 -1
- package/fesm2022/masterteam-components-table.mjs.map +1 -1
- package/fesm2022/masterteam-components-topbar.mjs +2 -2
- package/fesm2022/masterteam-components-topbar.mjs.map +1 -1
- package/package.json +9 -1
- package/types/masterteam-components-client-page.d.ts +3 -0
- package/types/masterteam-components-entities.d.ts +246 -0
- package/types/masterteam-components-multi-select-field.d.ts +25 -1
- package/types/masterteam-components-property-filter-builder.d.ts +90 -0
- package/types/masterteam-components-select-field.d.ts +31 -1
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { ElementRef, NgZone } from '@angular/core';
|
|
3
|
+
import { CdkDragDrop } from '@angular/cdk/drag-drop';
|
|
4
|
+
|
|
5
|
+
type EntityViewType = 'Text' | 'Date' | 'DateTime' | 'Percentage' | 'Status' | 'Currency' | 'Checkbox' | 'User';
|
|
6
|
+
/** Entity size – controls column span (1-12) inside a 12-column grid */
|
|
7
|
+
type EntitySize = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
|
|
8
|
+
interface EntityBaseConfig {
|
|
9
|
+
/** Column span of the entity card (1-12). Default: 4 */
|
|
10
|
+
size?: EntitySize;
|
|
11
|
+
/** Whether to show a dashed border around the entity card */
|
|
12
|
+
showBorder?: boolean;
|
|
13
|
+
}
|
|
14
|
+
interface EntityUserConfig extends EntityBaseConfig {
|
|
15
|
+
showDisplayName?: boolean;
|
|
16
|
+
showPhoneNumber?: boolean;
|
|
17
|
+
showEmail?: boolean;
|
|
18
|
+
}
|
|
19
|
+
interface EntityPercentageConfig extends EntityBaseConfig {
|
|
20
|
+
showName?: boolean;
|
|
21
|
+
}
|
|
22
|
+
type EntityConfiguration = EntityBaseConfig | EntityUserConfig | EntityPercentageConfig;
|
|
23
|
+
interface EntityStatusValue {
|
|
24
|
+
key: string;
|
|
25
|
+
display: string;
|
|
26
|
+
color: string;
|
|
27
|
+
description?: string;
|
|
28
|
+
}
|
|
29
|
+
interface EntityData {
|
|
30
|
+
id?: number;
|
|
31
|
+
propertyId?: number;
|
|
32
|
+
key?: string;
|
|
33
|
+
normalizedKey?: string;
|
|
34
|
+
name?: string;
|
|
35
|
+
rawValue?: string;
|
|
36
|
+
order?: number;
|
|
37
|
+
value: string | EntityStatusValue;
|
|
38
|
+
viewType: EntityViewType;
|
|
39
|
+
type?: string;
|
|
40
|
+
userName?: string;
|
|
41
|
+
displayName?: string;
|
|
42
|
+
photoUrl?: string;
|
|
43
|
+
phoneNumber?: string;
|
|
44
|
+
email?: string;
|
|
45
|
+
configuration?: EntityConfiguration;
|
|
46
|
+
}
|
|
47
|
+
/** Emitted when an entity is resized via the drag handle */
|
|
48
|
+
interface EntityResizeEvent {
|
|
49
|
+
entity: EntityData;
|
|
50
|
+
previousSize: EntitySize;
|
|
51
|
+
newSize: EntitySize;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
declare class EntityText {
|
|
55
|
+
/** Full entity data object */
|
|
56
|
+
readonly data: _angular_core.InputSignal<EntityData | undefined>;
|
|
57
|
+
/** Individual inputs (used when data is not provided) */
|
|
58
|
+
readonly name: _angular_core.InputSignal<string | undefined>;
|
|
59
|
+
readonly value: _angular_core.InputSignal<string | undefined>;
|
|
60
|
+
readonly displayName: _angular_core.Signal<string>;
|
|
61
|
+
readonly displayValue: _angular_core.Signal<string>;
|
|
62
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntityText, never>;
|
|
63
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntityText, "mt-entity-text", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
declare class EntityDate {
|
|
67
|
+
/** Full entity data object */
|
|
68
|
+
readonly data: _angular_core.InputSignal<EntityData | undefined>;
|
|
69
|
+
/** Individual inputs (used when data is not provided) */
|
|
70
|
+
readonly name: _angular_core.InputSignal<string | undefined>;
|
|
71
|
+
readonly value: _angular_core.InputSignal<string | undefined>;
|
|
72
|
+
readonly displayName: _angular_core.Signal<string>;
|
|
73
|
+
readonly displayValue: _angular_core.Signal<string>;
|
|
74
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntityDate, never>;
|
|
75
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntityDate, "mt-entity-date", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
declare class EntityStatus {
|
|
79
|
+
/** Full entity data object */
|
|
80
|
+
readonly data: _angular_core.InputSignal<EntityData | undefined>;
|
|
81
|
+
/** Individual inputs (used when data is not provided) */
|
|
82
|
+
readonly name: _angular_core.InputSignal<string | undefined>;
|
|
83
|
+
readonly value: _angular_core.InputSignal<EntityStatusValue | undefined>;
|
|
84
|
+
readonly displayName: _angular_core.Signal<string>;
|
|
85
|
+
readonly statusValue: _angular_core.Signal<EntityStatusValue | null>;
|
|
86
|
+
readonly badgeStyle: _angular_core.Signal<{
|
|
87
|
+
color?: undefined;
|
|
88
|
+
backgroundColor?: undefined;
|
|
89
|
+
} | {
|
|
90
|
+
color: string;
|
|
91
|
+
backgroundColor: string;
|
|
92
|
+
}>;
|
|
93
|
+
private hexToRgba;
|
|
94
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntityStatus, never>;
|
|
95
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntityStatus, "mt-entity-status", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
declare class EntityUser {
|
|
99
|
+
/** Full entity data object */
|
|
100
|
+
readonly data: _angular_core.InputSignal<EntityData | undefined>;
|
|
101
|
+
/** Individual inputs (used when data is not provided) */
|
|
102
|
+
readonly displayName: _angular_core.InputSignal<string | undefined>;
|
|
103
|
+
readonly photoUrl: _angular_core.InputSignal<string | undefined>;
|
|
104
|
+
readonly userName: _angular_core.Signal<string>;
|
|
105
|
+
readonly userPhoto: _angular_core.Signal<string>;
|
|
106
|
+
readonly labelText: _angular_core.Signal<string>;
|
|
107
|
+
readonly initials: _angular_core.Signal<string>;
|
|
108
|
+
private readonly config;
|
|
109
|
+
readonly showDisplayName: _angular_core.Signal<boolean>;
|
|
110
|
+
readonly showPhoneNumber: _angular_core.Signal<boolean>;
|
|
111
|
+
readonly showEmail: _angular_core.Signal<boolean>;
|
|
112
|
+
readonly phoneNumber: _angular_core.Signal<string>;
|
|
113
|
+
readonly email: _angular_core.Signal<string>;
|
|
114
|
+
readonly hasContactInfo: _angular_core.Signal<boolean>;
|
|
115
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntityUser, never>;
|
|
116
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntityUser, "mt-entity-user", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "displayName": { "alias": "displayName"; "required": false; "isSignal": true; }; "photoUrl": { "alias": "photoUrl"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
declare class EntityPercentage {
|
|
120
|
+
/** Full entity data object */
|
|
121
|
+
readonly data: _angular_core.InputSignal<EntityData | undefined>;
|
|
122
|
+
/** Individual inputs (used when data is not provided) */
|
|
123
|
+
readonly name: _angular_core.InputSignal<string | undefined>;
|
|
124
|
+
readonly value: _angular_core.InputSignal<string | undefined>;
|
|
125
|
+
readonly rawValue: _angular_core.InputSignal<string | undefined>;
|
|
126
|
+
readonly displayName: _angular_core.Signal<string>;
|
|
127
|
+
readonly displayValue: _angular_core.Signal<string>;
|
|
128
|
+
readonly numericValue: _angular_core.Signal<number>;
|
|
129
|
+
readonly maxValue: _angular_core.Signal<number>;
|
|
130
|
+
private readonly config;
|
|
131
|
+
readonly showName: _angular_core.Signal<boolean>;
|
|
132
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntityPercentage, never>;
|
|
133
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntityPercentage, "mt-entity-percentage", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "rawValue": { "alias": "rawValue"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
declare class EntityCurrency {
|
|
137
|
+
/** Full entity data object */
|
|
138
|
+
readonly data: _angular_core.InputSignal<EntityData | undefined>;
|
|
139
|
+
/** Individual inputs (used when data is not provided) */
|
|
140
|
+
readonly name: _angular_core.InputSignal<string | undefined>;
|
|
141
|
+
readonly value: _angular_core.InputSignal<string | undefined>;
|
|
142
|
+
readonly displayName: _angular_core.Signal<string>;
|
|
143
|
+
readonly displayValue: _angular_core.Signal<string>;
|
|
144
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntityCurrency, never>;
|
|
145
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntityCurrency, "mt-entity-currency", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
declare class EntityCheckbox {
|
|
149
|
+
/** Full entity data object */
|
|
150
|
+
readonly data: _angular_core.InputSignal<EntityData | undefined>;
|
|
151
|
+
/** Individual inputs (used when data is not provided) */
|
|
152
|
+
readonly name: _angular_core.InputSignal<string | undefined>;
|
|
153
|
+
readonly value: _angular_core.InputSignal<string | undefined>;
|
|
154
|
+
readonly rawValue: _angular_core.InputSignal<string | undefined>;
|
|
155
|
+
readonly displayName: _angular_core.Signal<string>;
|
|
156
|
+
readonly isChecked: _angular_core.Signal<boolean>;
|
|
157
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntityCheckbox, never>;
|
|
158
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntityCheckbox, "mt-entity-checkbox", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "rawValue": { "alias": "rawValue"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
declare class EntityPreview {
|
|
162
|
+
/** Single entity data to display */
|
|
163
|
+
readonly data: _angular_core.InputSignal<EntityData>;
|
|
164
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntityPreview, never>;
|
|
165
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntityPreview, "mt-entity-preview", never, { "data": { "alias": "data"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
declare class EntitiesPreview {
|
|
169
|
+
/** Array of entity data to display */
|
|
170
|
+
readonly entities: _angular_core.InputSignal<EntityData[]>;
|
|
171
|
+
/** Entities sorted by order */
|
|
172
|
+
readonly sortedEntities: _angular_core.Signal<EntityData[]>;
|
|
173
|
+
/** Returns the grid-column span for a given entity size (1-12) */
|
|
174
|
+
getColSpan(entity: EntityData): string;
|
|
175
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntitiesPreview, never>;
|
|
176
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntitiesPreview, "mt-entities-preview", never, { "entities": { "alias": "entities"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Base class that encapsulates all entity resize-via-drag logic.
|
|
181
|
+
*
|
|
182
|
+
* Extend this directive in any component that needs column-resize behaviour
|
|
183
|
+
* on a 12-column CSS grid. The subclass must:
|
|
184
|
+
* - Provide a `model.required<EntityData[]>()` (or equivalent) for the
|
|
185
|
+
* entity list so `updateEntitySize()` can be called after resize.
|
|
186
|
+
* - Contain a `.grid` element (or override `getGridElement()`).
|
|
187
|
+
*
|
|
188
|
+
* Resize flow:
|
|
189
|
+
* 1. `onResizeStart(event, entity)` — called from a mousedown on the handle
|
|
190
|
+
* 2. mousemove → snaps to nearest column, updates `resizePreviewSize`
|
|
191
|
+
* 3. mouseup → emits `entityResized` with previous & new size
|
|
192
|
+
*/
|
|
193
|
+
declare abstract class EntitiesResizeBase {
|
|
194
|
+
protected readonly elRef: ElementRef<any>;
|
|
195
|
+
protected readonly zone: NgZone;
|
|
196
|
+
protected readonly doc: Document;
|
|
197
|
+
/** Emits when an entity is resized via the drag handle */
|
|
198
|
+
readonly entityResized: _angular_core.OutputEmitterRef<EntityResizeEvent>;
|
|
199
|
+
/** The entity currently being resized (null when idle) */
|
|
200
|
+
readonly resizingEntity: _angular_core.WritableSignal<EntityData | null>;
|
|
201
|
+
/** Live preview size while dragging */
|
|
202
|
+
readonly resizePreviewSize: _angular_core.WritableSignal<EntitySize | null>;
|
|
203
|
+
/** Bound listeners kept for cleanup */
|
|
204
|
+
private _onMouseMove;
|
|
205
|
+
private _onMouseUp;
|
|
206
|
+
/**
|
|
207
|
+
* Returns the grid element used to compute column widths.
|
|
208
|
+
* Override if the grid selector differs.
|
|
209
|
+
*/
|
|
210
|
+
protected getGridElement(): HTMLElement | null;
|
|
211
|
+
/**
|
|
212
|
+
* Returns the grid-column span string for a given entity.
|
|
213
|
+
* While resizing the active entity, returns the preview size.
|
|
214
|
+
*/
|
|
215
|
+
getResizeColSpan(entity: EntityData): string;
|
|
216
|
+
/** Starts a resize operation from the right-edge handle */
|
|
217
|
+
onResizeStart(event: MouseEvent, entity: EntityData): void;
|
|
218
|
+
/**
|
|
219
|
+
* Called when a resize operation completes with a changed size.
|
|
220
|
+
* Subclasses should update the entity list and emit events here.
|
|
221
|
+
*/
|
|
222
|
+
protected abstract onResizeComplete(entity: EntityData, previousSize: EntitySize, newSize: EntitySize): void;
|
|
223
|
+
/** Removes global mouse listeners */
|
|
224
|
+
private _cleanupListeners;
|
|
225
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntitiesResizeBase, never>;
|
|
226
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<EntitiesResizeBase, never, never, {}, { "entityResized": "entityResized"; }, never, never, true, never>;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
declare class EntitiesManage extends EntitiesResizeBase {
|
|
230
|
+
/** Array of entity data – supports two-way binding to keep order in sync */
|
|
231
|
+
readonly entities: _angular_core.ModelSignal<EntityData[]>;
|
|
232
|
+
/** Emits the reordered entities array after each drag-drop */
|
|
233
|
+
readonly entitiesReordered: _angular_core.OutputEmitterRef<EntityData[]>;
|
|
234
|
+
/** Entities sorted by their order field */
|
|
235
|
+
readonly sortedEntities: _angular_core.Signal<EntityData[]>;
|
|
236
|
+
/** Returns the grid-column span for a given entity size (1-12) */
|
|
237
|
+
getColSpan(entity: EntityData): string;
|
|
238
|
+
/** Handle drag-drop reorder */
|
|
239
|
+
onDrop(event: CdkDragDrop<EntityData[]>): void;
|
|
240
|
+
protected onResizeComplete(entity: EntityData, previousSize: EntitySize, newSize: EntitySize): void;
|
|
241
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<EntitiesManage, never>;
|
|
242
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<EntitiesManage, "mt-entities-manage", never, { "entities": { "alias": "entities"; "required": true; "isSignal": true; }; }, { "entities": "entitiesChange"; "entitiesReordered": "entitiesReordered"; }, never, never, true, never>;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
export { EntitiesManage, EntitiesPreview, EntitiesResizeBase, EntityCheckbox, EntityCurrency, EntityDate, EntityPercentage, EntityPreview, EntityStatus, EntityText, EntityUser };
|
|
246
|
+
export type { EntityBaseConfig, EntityConfiguration, EntityData, EntityPercentageConfig, EntityResizeEvent, EntitySize, EntityStatusValue, EntityUserConfig, EntityViewType };
|
|
@@ -25,6 +25,14 @@ declare class MultiSelectField implements ControlValueAccessor, OnInit, OnChange
|
|
|
25
25
|
readonly group: _angular_core.InputSignal<boolean>;
|
|
26
26
|
readonly optionGroupLabel: _angular_core.InputSignal<string>;
|
|
27
27
|
readonly optionGroupChildren: _angular_core.InputSignal<string>;
|
|
28
|
+
readonly optionIcon: _angular_core.InputSignal<string>;
|
|
29
|
+
readonly optionIconColor: _angular_core.InputSignal<string>;
|
|
30
|
+
readonly optionIconShape: _angular_core.InputSignal<string>;
|
|
31
|
+
readonly optionAvatarShape: _angular_core.InputSignal<"circle" | "square">;
|
|
32
|
+
readonly optionGroupIcon: _angular_core.InputSignal<string>;
|
|
33
|
+
readonly optionGroupIconColor: _angular_core.InputSignal<string>;
|
|
34
|
+
readonly optionGroupIconShape: _angular_core.InputSignal<string>;
|
|
35
|
+
readonly optionGroupAvatarShape: _angular_core.InputSignal<"circle" | "square">;
|
|
28
36
|
onChange: EventEmitter<any>;
|
|
29
37
|
styleClass: string;
|
|
30
38
|
requiredValidator: typeof Validators.required;
|
|
@@ -43,8 +51,24 @@ declare class MultiSelectField implements ControlValueAccessor, OnInit, OnChange
|
|
|
43
51
|
registerOnChange(fn: any): void;
|
|
44
52
|
registerOnTouched(fn: any): void;
|
|
45
53
|
setDisabledState(disabled: boolean): void;
|
|
54
|
+
isGrouped(): boolean;
|
|
55
|
+
getOptionLabelValue(option: any): string;
|
|
56
|
+
getOptionIcon(option: any): string | undefined;
|
|
57
|
+
getOptionAvatarBackground(option: any): string | null;
|
|
58
|
+
getOptionAvatarColor(option: any): string | null;
|
|
59
|
+
getOptionAvatarShape(option: any): 'circle' | 'square';
|
|
60
|
+
getGroupLabelValue(group: any): string;
|
|
61
|
+
getGroupIcon(group: any): string | undefined;
|
|
62
|
+
getGroupAvatarBackground(group: any): string | null;
|
|
63
|
+
getGroupAvatarColor(group: any): string | null;
|
|
64
|
+
getGroupAvatarShape(group: any): 'circle' | 'square';
|
|
65
|
+
private getOptionColor;
|
|
66
|
+
private getGroupColor;
|
|
67
|
+
private getAvatarBackgroundByColor;
|
|
68
|
+
private getAvatarColorByColor;
|
|
69
|
+
private normalizeAvatarShape;
|
|
46
70
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MultiSelectField, never>;
|
|
47
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MultiSelectField, "mt-multi-select-field", never, { "field": { "alias": "field"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "pInputs": { "alias": "pInputs"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "optionValue": { "alias": "optionValue"; "required": false; "isSignal": true; }; "optionLabel": { "alias": "optionLabel"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "filterBy": { "alias": "filterBy"; "required": false; "isSignal": true; }; "dataKey": { "alias": "dataKey"; "required": false; "isSignal": true; }; "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; "display": { "alias": "display"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "maxSelectedLabels": { "alias": "maxSelectedLabels"; "required": false; "isSignal": true; }; "group": { "alias": "group"; "required": false; "isSignal": true; }; "optionGroupLabel": { "alias": "optionGroupLabel"; "required": false; "isSignal": true; }; "optionGroupChildren": { "alias": "optionGroupChildren"; "required": false; "isSignal": true; }; }, { "onChange": "onChange"; }, never, never, true, never>;
|
|
71
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MultiSelectField, "mt-multi-select-field", never, { "field": { "alias": "field"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "pInputs": { "alias": "pInputs"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "optionValue": { "alias": "optionValue"; "required": false; "isSignal": true; }; "optionLabel": { "alias": "optionLabel"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "filterBy": { "alias": "filterBy"; "required": false; "isSignal": true; }; "dataKey": { "alias": "dataKey"; "required": false; "isSignal": true; }; "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; "display": { "alias": "display"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "maxSelectedLabels": { "alias": "maxSelectedLabels"; "required": false; "isSignal": true; }; "group": { "alias": "group"; "required": false; "isSignal": true; }; "optionGroupLabel": { "alias": "optionGroupLabel"; "required": false; "isSignal": true; }; "optionGroupChildren": { "alias": "optionGroupChildren"; "required": false; "isSignal": true; }; "optionIcon": { "alias": "optionIcon"; "required": false; "isSignal": true; }; "optionIconColor": { "alias": "optionIconColor"; "required": false; "isSignal": true; }; "optionIconShape": { "alias": "optionIconShape"; "required": false; "isSignal": true; }; "optionAvatarShape": { "alias": "optionAvatarShape"; "required": false; "isSignal": true; }; "optionGroupIcon": { "alias": "optionGroupIcon"; "required": false; "isSignal": true; }; "optionGroupIconColor": { "alias": "optionGroupIconColor"; "required": false; "isSignal": true; }; "optionGroupIconShape": { "alias": "optionGroupIconShape"; "required": false; "isSignal": true; }; "optionGroupAvatarShape": { "alias": "optionGroupAvatarShape"; "required": false; "isSignal": true; }; }, { "onChange": "onChange"; }, never, never, true, never>;
|
|
48
72
|
}
|
|
49
73
|
|
|
50
74
|
export { MultiSelectField };
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
|
|
3
|
+
type PropertyFilterBuilderValueMode = 'single' | 'multi' | 'range' | 'none';
|
|
4
|
+
interface PropertyFilterBuilderFieldOption {
|
|
5
|
+
key: string;
|
|
6
|
+
label?: string;
|
|
7
|
+
viewType?: string;
|
|
8
|
+
}
|
|
9
|
+
interface PropertyFilterBuilderOperatorOption {
|
|
10
|
+
key: string;
|
|
11
|
+
label?: string;
|
|
12
|
+
valueMode?: PropertyFilterBuilderValueMode;
|
|
13
|
+
}
|
|
14
|
+
interface PropertyFilterBuilderSchema {
|
|
15
|
+
allowedFields: Array<string | PropertyFilterBuilderFieldOption>;
|
|
16
|
+
allowedOperators: Array<string | PropertyFilterBuilderOperatorOption>;
|
|
17
|
+
maxFilters?: number;
|
|
18
|
+
}
|
|
19
|
+
interface PropertyFilterBuilderRule {
|
|
20
|
+
field: string;
|
|
21
|
+
op: string;
|
|
22
|
+
value?: unknown;
|
|
23
|
+
values?: unknown[];
|
|
24
|
+
from?: unknown;
|
|
25
|
+
to?: unknown;
|
|
26
|
+
}
|
|
27
|
+
interface PropertyFilterBuilderDraft {
|
|
28
|
+
id: string;
|
|
29
|
+
field: string;
|
|
30
|
+
op: string;
|
|
31
|
+
value: unknown;
|
|
32
|
+
from: unknown;
|
|
33
|
+
to: unknown;
|
|
34
|
+
}
|
|
35
|
+
interface SelectOption {
|
|
36
|
+
key: string;
|
|
37
|
+
label: string;
|
|
38
|
+
viewType?: string;
|
|
39
|
+
}
|
|
40
|
+
declare class PropertyFilterBuilder {
|
|
41
|
+
readonly schema: _angular_core.InputSignal<PropertyFilterBuilderSchema | null>;
|
|
42
|
+
readonly filters: _angular_core.ModelSignal<PropertyFilterBuilderRule[]>;
|
|
43
|
+
readonly title: _angular_core.InputSignal<string>;
|
|
44
|
+
readonly buttonLabel: _angular_core.InputSignal<string>;
|
|
45
|
+
readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
46
|
+
readonly applied: _angular_core.OutputEmitterRef<PropertyFilterBuilderRule[]>;
|
|
47
|
+
readonly cleared: _angular_core.OutputEmitterRef<void>;
|
|
48
|
+
private readonly rowSeed;
|
|
49
|
+
private readonly syncedSignature;
|
|
50
|
+
protected readonly drafts: _angular_core.WritableSignal<PropertyFilterBuilderDraft[]>;
|
|
51
|
+
protected readonly fieldOptions: _angular_core.Signal<SelectOption[]>;
|
|
52
|
+
protected readonly operatorOptions: _angular_core.Signal<(SelectOption & {
|
|
53
|
+
valueMode: PropertyFilterBuilderValueMode;
|
|
54
|
+
})[]>;
|
|
55
|
+
protected readonly hasSchema: _angular_core.Signal<boolean>;
|
|
56
|
+
protected readonly maxFilters: _angular_core.Signal<number>;
|
|
57
|
+
protected readonly canAddFilter: _angular_core.Signal<boolean>;
|
|
58
|
+
protected readonly activeFilterCount: _angular_core.Signal<number>;
|
|
59
|
+
constructor();
|
|
60
|
+
onPopoverToggle(event: Event, popover: {
|
|
61
|
+
toggle: (event: Event) => void;
|
|
62
|
+
}): void;
|
|
63
|
+
addFilter(): void;
|
|
64
|
+
removeFilter(index: number): void;
|
|
65
|
+
clearAll(popover: {
|
|
66
|
+
hide: () => void;
|
|
67
|
+
}): void;
|
|
68
|
+
apply(popover: {
|
|
69
|
+
hide: () => void;
|
|
70
|
+
}): void;
|
|
71
|
+
onFieldChange(index: number, field: string): void;
|
|
72
|
+
onOperatorChange(index: number, op: string): void;
|
|
73
|
+
onValueChange(index: number, value: unknown): void;
|
|
74
|
+
onFromChange(index: number, from: unknown): void;
|
|
75
|
+
onToChange(index: number, to: unknown): void;
|
|
76
|
+
getValueMode(op: string): PropertyFilterBuilderValueMode;
|
|
77
|
+
getValueInputType(field: string, op: string): string;
|
|
78
|
+
isDateField(field: string): boolean;
|
|
79
|
+
isDateTimeField(field: string): boolean;
|
|
80
|
+
private buildRulesFromDrafts;
|
|
81
|
+
private getFieldViewType;
|
|
82
|
+
private patchDraft;
|
|
83
|
+
private createDraft;
|
|
84
|
+
private toDraftValue;
|
|
85
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PropertyFilterBuilder, never>;
|
|
86
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PropertyFilterBuilder, "mt-property-filter-builder", never, { "schema": { "alias": "schema"; "required": false; "isSignal": true; }; "filters": { "alias": "filters"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "buttonLabel": { "alias": "buttonLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, { "filters": "filtersChange"; "applied": "applied"; "cleared": "cleared"; }, never, never, true, never>;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export { PropertyFilterBuilder };
|
|
90
|
+
export type { PropertyFilterBuilderFieldOption, PropertyFilterBuilderOperatorOption, PropertyFilterBuilderRule, PropertyFilterBuilderSchema, PropertyFilterBuilderValueMode };
|
|
@@ -28,6 +28,14 @@ declare class SelectField implements ControlValueAccessor, OnInit, OnChanges {
|
|
|
28
28
|
readonly optionGroupLabel: _angular_core.InputSignal<string>;
|
|
29
29
|
readonly optionGroupChildren: _angular_core.InputSignal<string>;
|
|
30
30
|
readonly loading: _angular_core.InputSignal<boolean>;
|
|
31
|
+
readonly optionIcon: _angular_core.InputSignal<string>;
|
|
32
|
+
readonly optionIconColor: _angular_core.InputSignal<string>;
|
|
33
|
+
readonly optionIconShape: _angular_core.InputSignal<string>;
|
|
34
|
+
readonly optionAvatarShape: _angular_core.InputSignal<"circle" | "square">;
|
|
35
|
+
readonly optionGroupIcon: _angular_core.InputSignal<string>;
|
|
36
|
+
readonly optionGroupIconColor: _angular_core.InputSignal<string>;
|
|
37
|
+
readonly optionGroupIconShape: _angular_core.InputSignal<string>;
|
|
38
|
+
readonly optionGroupAvatarShape: _angular_core.InputSignal<"circle" | "square">;
|
|
31
39
|
onChange: EventEmitter<any>;
|
|
32
40
|
styleClass: string;
|
|
33
41
|
requiredValidator: typeof Validators.required;
|
|
@@ -46,9 +54,31 @@ declare class SelectField implements ControlValueAccessor, OnInit, OnChanges {
|
|
|
46
54
|
registerOnChange(fn: any): void;
|
|
47
55
|
registerOnTouched(fn: any): void;
|
|
48
56
|
setDisabledState(disabled: boolean): void;
|
|
57
|
+
isGrouped(): boolean;
|
|
49
58
|
clearSelection(): void;
|
|
59
|
+
getOptionLabelValue(option: any): string;
|
|
60
|
+
getOptionIcon(option: any): string | undefined;
|
|
61
|
+
getOptionAvatarBackground(option: any): string | null;
|
|
62
|
+
getOptionAvatarColor(option: any): string | null;
|
|
63
|
+
getOptionAvatarShape(option: any): 'circle' | 'square';
|
|
64
|
+
getGroupLabelValue(group: any): string;
|
|
65
|
+
getGroupIcon(group: any): string | undefined;
|
|
66
|
+
getGroupAvatarBackground(group: any): string | null;
|
|
67
|
+
getGroupAvatarColor(group: any): string | null;
|
|
68
|
+
getGroupAvatarShape(group: any): 'circle' | 'square';
|
|
69
|
+
private getOptionColor;
|
|
70
|
+
private getGroupColor;
|
|
71
|
+
private getAvatarBackgroundByColor;
|
|
72
|
+
private getAvatarColorByColor;
|
|
73
|
+
private normalizeAvatarShape;
|
|
74
|
+
/**
|
|
75
|
+
* Resolves a nested dot-notation path (e.g. "name.display") on an object.
|
|
76
|
+
* Falls back to direct property access for non-nested keys.
|
|
77
|
+
*/
|
|
78
|
+
private resolveNestedValue;
|
|
79
|
+
private resolveOption;
|
|
50
80
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectField, never>;
|
|
51
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectField, "mt-select-field", never, { "field": { "alias": "field"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "hasPlaceholderPrefix": { "alias": "hasPlaceholderPrefix"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "pInputs": { "alias": "pInputs"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "optionValue": { "alias": "optionValue"; "required": false; "isSignal": true; }; "optionLabel": { "alias": "optionLabel"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "filterBy": { "alias": "filterBy"; "required": false; "isSignal": true; }; "dataKey": { "alias": "dataKey"; "required": false; "isSignal": true; }; "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; "clearAfterSelect": { "alias": "clearAfterSelect"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "group": { "alias": "group"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "optionGroupLabel": { "alias": "optionGroupLabel"; "required": false; "isSignal": true; }; "optionGroupChildren": { "alias": "optionGroupChildren"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; }, { "onChange": "onChange"; }, never, never, true, never>;
|
|
81
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectField, "mt-select-field", never, { "field": { "alias": "field"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "hasPlaceholderPrefix": { "alias": "hasPlaceholderPrefix"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "pInputs": { "alias": "pInputs"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": false; "isSignal": true; }; "optionValue": { "alias": "optionValue"; "required": false; "isSignal": true; }; "optionLabel": { "alias": "optionLabel"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "filterBy": { "alias": "filterBy"; "required": false; "isSignal": true; }; "dataKey": { "alias": "dataKey"; "required": false; "isSignal": true; }; "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; "clearAfterSelect": { "alias": "clearAfterSelect"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "group": { "alias": "group"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "optionGroupLabel": { "alias": "optionGroupLabel"; "required": false; "isSignal": true; }; "optionGroupChildren": { "alias": "optionGroupChildren"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "optionIcon": { "alias": "optionIcon"; "required": false; "isSignal": true; }; "optionIconColor": { "alias": "optionIconColor"; "required": false; "isSignal": true; }; "optionIconShape": { "alias": "optionIconShape"; "required": false; "isSignal": true; }; "optionAvatarShape": { "alias": "optionAvatarShape"; "required": false; "isSignal": true; }; "optionGroupIcon": { "alias": "optionGroupIcon"; "required": false; "isSignal": true; }; "optionGroupIconColor": { "alias": "optionGroupIconColor"; "required": false; "isSignal": true; }; "optionGroupIconShape": { "alias": "optionGroupIconShape"; "required": false; "isSignal": true; }; "optionGroupAvatarShape": { "alias": "optionGroupAvatarShape"; "required": false; "isSignal": true; }; }, { "onChange": "onChange"; }, never, never, true, never>;
|
|
52
82
|
}
|
|
53
83
|
|
|
54
84
|
export { SelectField };
|