@praxisui/list 1.0.0-beta.7 → 2.0.0-beta.0
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/README.md +222 -8
- package/fesm2022/praxisui-list.mjs +9511 -2230
- package/fesm2022/praxisui-list.mjs.map +1 -1
- package/index.d.ts +1362 -33
- package/package.json +8 -5
package/index.d.ts
CHANGED
|
@@ -1,20 +1,76 @@
|
|
|
1
1
|
import * as rxjs from 'rxjs';
|
|
2
2
|
import { BehaviorSubject, Observable } from 'rxjs';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { OnInit, OnChanges, EventEmitter, SimpleChanges, DoCheck, Provider } from '@angular/core';
|
|
4
|
+
import { OnInit, OnChanges, OnDestroy, EventEmitter, SimpleChanges, ChangeDetectorRef, DoCheck, Provider } from '@angular/core';
|
|
5
5
|
import { MatSelectionListChange } from '@angular/material/list';
|
|
6
6
|
import { FormGroup, FormControl } from '@angular/forms';
|
|
7
|
+
import { BaseAiAdapter, Capability as Capability$1, PatchResult } from '@praxisui/ai';
|
|
7
8
|
import { SettingsValueProvider } from '@praxisui/settings-panel';
|
|
8
|
-
import { ComponentDocMeta } from '@praxisui/core';
|
|
9
|
+
import { GlobalActionCatalogEntry, ComponentDocMeta, AiCapabilityCategory, AiValueKind, AiCapability, AiCapabilityCatalog } from '@praxisui/core';
|
|
9
10
|
|
|
10
|
-
type TemplateType = 'text' | 'icon' | 'image' | 'chip' | 'rating' | 'currency' | 'date' | 'html' | 'slot';
|
|
11
|
+
type TemplateType = 'text' | 'icon' | 'image' | 'chip' | 'rating' | 'currency' | 'date' | 'html' | 'slot' | 'metric' | 'compose' | 'component';
|
|
11
12
|
interface TemplateDef {
|
|
12
13
|
type: TemplateType;
|
|
13
|
-
expr
|
|
14
|
+
expr?: string;
|
|
14
15
|
class?: string;
|
|
15
16
|
style?: string;
|
|
16
17
|
color?: string;
|
|
17
18
|
variant?: 'filled' | 'outlined';
|
|
19
|
+
props?: {
|
|
20
|
+
rating?: {
|
|
21
|
+
max?: number;
|
|
22
|
+
size?: number;
|
|
23
|
+
color?: string;
|
|
24
|
+
};
|
|
25
|
+
metric?: {
|
|
26
|
+
label?: string;
|
|
27
|
+
valueExpr?: string;
|
|
28
|
+
caption?: string;
|
|
29
|
+
subcaption?: string;
|
|
30
|
+
captionPosition?: 'below-value' | 'below-progress';
|
|
31
|
+
icon?: string;
|
|
32
|
+
iconExpr?: string;
|
|
33
|
+
tone?: string;
|
|
34
|
+
toneExpr?: string;
|
|
35
|
+
layout?: 'value-only' | 'value+caption' | 'icon+value+caption' | 'stacked-center';
|
|
36
|
+
align?: 'start' | 'center' | 'end';
|
|
37
|
+
progress?: {
|
|
38
|
+
valueExpr?: string;
|
|
39
|
+
max?: number;
|
|
40
|
+
mode?: 'determinate' | 'indeterminate';
|
|
41
|
+
color?: string;
|
|
42
|
+
colorExpr?: string;
|
|
43
|
+
trackColor?: string;
|
|
44
|
+
};
|
|
45
|
+
valueClass?: string;
|
|
46
|
+
valueStyle?: string;
|
|
47
|
+
showBar?: boolean;
|
|
48
|
+
barValueExpr?: string;
|
|
49
|
+
barColor?: string;
|
|
50
|
+
barVariant?: 'determinate' | 'indeterminate';
|
|
51
|
+
legendExpr?: string;
|
|
52
|
+
iconPosition?: 'left' | 'right' | 'top';
|
|
53
|
+
iconColorExpr?: string;
|
|
54
|
+
};
|
|
55
|
+
compose?: {
|
|
56
|
+
items?: TemplateDef[];
|
|
57
|
+
direction?: 'row' | 'column';
|
|
58
|
+
align?: 'start' | 'center' | 'end';
|
|
59
|
+
gap?: string;
|
|
60
|
+
wrap?: boolean;
|
|
61
|
+
class?: string;
|
|
62
|
+
style?: string;
|
|
63
|
+
nodes?: TemplateDef[];
|
|
64
|
+
separator?: string;
|
|
65
|
+
orientation?: 'horizontal' | 'vertical';
|
|
66
|
+
};
|
|
67
|
+
component?: {
|
|
68
|
+
id: string;
|
|
69
|
+
inputs?: Record<string, any>;
|
|
70
|
+
class?: string;
|
|
71
|
+
style?: string;
|
|
72
|
+
};
|
|
73
|
+
};
|
|
18
74
|
imageAlt?: string;
|
|
19
75
|
badge?: {
|
|
20
76
|
expr: string;
|
|
@@ -28,6 +84,38 @@ interface ListFeatureDef {
|
|
|
28
84
|
class?: string;
|
|
29
85
|
style?: string;
|
|
30
86
|
}
|
|
87
|
+
interface TemplateFeatureDef extends TemplateDef {
|
|
88
|
+
icon?: string;
|
|
89
|
+
}
|
|
90
|
+
type TemplatingFeatureDef = ListFeatureDef | TemplateFeatureDef;
|
|
91
|
+
type ListExpansionSectionType = 'info-list' | 'chip-list' | 'timeline' | 'key-value' | 'metadata' | 'component';
|
|
92
|
+
interface ListExpansionSectionDef {
|
|
93
|
+
id: string;
|
|
94
|
+
title?: string;
|
|
95
|
+
type: ListExpansionSectionType;
|
|
96
|
+
itemsExpr?: string;
|
|
97
|
+
emptyLabel?: string;
|
|
98
|
+
metadata?: {
|
|
99
|
+
orientation?: 'horizontal' | 'vertical';
|
|
100
|
+
columns?: 1 | 2 | 3;
|
|
101
|
+
gap?: string;
|
|
102
|
+
keyClass?: string;
|
|
103
|
+
valueClass?: string;
|
|
104
|
+
keyStyle?: string;
|
|
105
|
+
valueStyle?: string;
|
|
106
|
+
};
|
|
107
|
+
component?: {
|
|
108
|
+
id: string;
|
|
109
|
+
inputs?: Record<string, any>;
|
|
110
|
+
class?: string;
|
|
111
|
+
style?: string;
|
|
112
|
+
};
|
|
113
|
+
class?: string;
|
|
114
|
+
style?: string;
|
|
115
|
+
showIf?: string;
|
|
116
|
+
}
|
|
117
|
+
type ListTemplatingSlot = 'leading' | 'primary' | 'secondary' | 'meta' | 'trailing' | 'identity' | 'balance' | 'limit' | 'risk' | 'alerts' | 'owner';
|
|
118
|
+
type ListRowLayoutSlot = ListTemplatingSlot | 'actions' | 'expand';
|
|
31
119
|
interface PraxisListConfig {
|
|
32
120
|
id?: string;
|
|
33
121
|
dataSource?: {
|
|
@@ -37,8 +125,9 @@ interface PraxisListConfig {
|
|
|
37
125
|
sort?: string[];
|
|
38
126
|
};
|
|
39
127
|
layout?: {
|
|
40
|
-
variant?: 'list' | 'cards';
|
|
128
|
+
variant?: 'list' | 'cards' | 'tiles';
|
|
41
129
|
density?: 'default' | 'comfortable' | 'compact';
|
|
130
|
+
itemSpacing?: 'none' | 'tight' | 'default' | 'relaxed';
|
|
42
131
|
lines?: 1 | 2 | 3;
|
|
43
132
|
dividers?: 'none' | 'between' | 'all';
|
|
44
133
|
model?: 'standard' | 'media' | 'hotel';
|
|
@@ -46,9 +135,27 @@ interface PraxisListConfig {
|
|
|
46
135
|
stickySectionHeader?: boolean;
|
|
47
136
|
virtualScroll?: boolean;
|
|
48
137
|
pageSize?: number;
|
|
138
|
+
rowLayout?: {
|
|
139
|
+
type?: 'grid' | 'flex';
|
|
140
|
+
columns?: Array<{
|
|
141
|
+
slot: ListRowLayoutSlot;
|
|
142
|
+
width?: string;
|
|
143
|
+
minWidth?: string;
|
|
144
|
+
maxWidth?: string;
|
|
145
|
+
align?: 'start' | 'center' | 'end';
|
|
146
|
+
justify?: 'start' | 'center' | 'end' | 'stretch';
|
|
147
|
+
class?: string;
|
|
148
|
+
style?: string;
|
|
149
|
+
}>;
|
|
150
|
+
gap?: string;
|
|
151
|
+
align?: 'start' | 'center' | 'end' | 'stretch';
|
|
152
|
+
itemAlignY?: 'start' | 'center' | 'end' | 'stretch';
|
|
153
|
+
class?: string;
|
|
154
|
+
style?: string;
|
|
155
|
+
};
|
|
49
156
|
};
|
|
50
157
|
skin?: {
|
|
51
|
-
type?: 'pill-soft' | 'gradient-tile' | 'glass' | 'elevated' | 'custom';
|
|
158
|
+
type?: 'pill-soft' | 'gradient-tile' | 'glass' | 'elevated' | 'outline' | 'flat' | 'neumorphism' | 'custom';
|
|
52
159
|
gradient?: {
|
|
53
160
|
from: string;
|
|
54
161
|
to: string;
|
|
@@ -68,15 +175,31 @@ interface PraxisListConfig {
|
|
|
68
175
|
compareBy?: string;
|
|
69
176
|
return?: 'value' | 'item' | 'id';
|
|
70
177
|
};
|
|
178
|
+
interaction?: {
|
|
179
|
+
expandable?: boolean;
|
|
180
|
+
expandTrigger?: 'row' | 'icon' | 'row+icon';
|
|
181
|
+
expandMode?: 'single' | 'multiple';
|
|
182
|
+
expandPlacement?: 'expand' | 'trailing';
|
|
183
|
+
};
|
|
71
184
|
templating?: {
|
|
72
185
|
leading?: TemplateDef;
|
|
73
186
|
primary?: TemplateDef;
|
|
74
187
|
secondary?: TemplateDef;
|
|
75
188
|
meta?: TemplateDef;
|
|
76
189
|
trailing?: TemplateDef;
|
|
190
|
+
identity?: TemplateDef;
|
|
191
|
+
balance?: TemplateDef;
|
|
192
|
+
limit?: TemplateDef;
|
|
193
|
+
risk?: TemplateDef;
|
|
194
|
+
alerts?: TemplateDef;
|
|
195
|
+
owner?: TemplateDef;
|
|
77
196
|
metaPlacement?: 'side' | 'line';
|
|
78
197
|
metaPrefixIcon?: string;
|
|
79
|
-
|
|
198
|
+
statusPosition?: 'inline' | 'top-right';
|
|
199
|
+
chipColorMap?: Record<string, string>;
|
|
200
|
+
chipLabelMap?: Record<string, string>;
|
|
201
|
+
iconColorMap?: Record<string, string>;
|
|
202
|
+
features?: TemplatingFeatureDef[];
|
|
80
203
|
featuresVisible?: boolean;
|
|
81
204
|
featuresMode?: 'icons+labels' | 'icons-only' | 'labels-only';
|
|
82
205
|
sectionHeader?: TemplateDef;
|
|
@@ -85,6 +208,65 @@ interface PraxisListConfig {
|
|
|
85
208
|
count?: number;
|
|
86
209
|
};
|
|
87
210
|
};
|
|
211
|
+
rules?: {
|
|
212
|
+
itemStyles?: Array<{
|
|
213
|
+
id: string;
|
|
214
|
+
condition?: string;
|
|
215
|
+
class?: string;
|
|
216
|
+
style?: string;
|
|
217
|
+
border?: string;
|
|
218
|
+
background?: string;
|
|
219
|
+
}>;
|
|
220
|
+
slotOverrides?: Array<{
|
|
221
|
+
id: string;
|
|
222
|
+
slot: ListTemplatingSlot;
|
|
223
|
+
condition?: string;
|
|
224
|
+
template?: TemplateDef;
|
|
225
|
+
class?: string;
|
|
226
|
+
style?: string;
|
|
227
|
+
hide?: boolean;
|
|
228
|
+
}>;
|
|
229
|
+
};
|
|
230
|
+
expansion?: {
|
|
231
|
+
sections?: ListExpansionSectionDef[];
|
|
232
|
+
dataSource?: {
|
|
233
|
+
mode?: 'inline' | 'resource' | 'resourcePath';
|
|
234
|
+
resource?: {
|
|
235
|
+
kind: string;
|
|
236
|
+
id: string;
|
|
237
|
+
version: string;
|
|
238
|
+
};
|
|
239
|
+
resourcePath?: {
|
|
240
|
+
path: string;
|
|
241
|
+
method?: 'GET' | 'POST';
|
|
242
|
+
paramsMap?: Record<string, string>;
|
|
243
|
+
};
|
|
244
|
+
resourceAllowList?: string[];
|
|
245
|
+
fallbackMode?: 'none' | 'inline' | 'resource';
|
|
246
|
+
cache?: {
|
|
247
|
+
enabled?: boolean;
|
|
248
|
+
};
|
|
249
|
+
cancelOnCollapse?: boolean;
|
|
250
|
+
};
|
|
251
|
+
schemaContract?: {
|
|
252
|
+
kind: 'praxis.detail.schema';
|
|
253
|
+
version: string;
|
|
254
|
+
allowedNodes?: Array<'info-list' | 'chip-list' | 'timeline' | 'key-value' | 'metadata' | 'component'>;
|
|
255
|
+
maxSections?: number;
|
|
256
|
+
maxItemsPerSection?: number;
|
|
257
|
+
requireSectionIds?: boolean;
|
|
258
|
+
};
|
|
259
|
+
rendering?: {
|
|
260
|
+
shell?: 'attached' | 'detached' | 'modal';
|
|
261
|
+
columns?: 1 | 2 | 3;
|
|
262
|
+
gap?: string;
|
|
263
|
+
padding?: string;
|
|
264
|
+
class?: string;
|
|
265
|
+
style?: string;
|
|
266
|
+
loadingTemplate?: TemplateDef;
|
|
267
|
+
errorTemplate?: TemplateDef;
|
|
268
|
+
};
|
|
269
|
+
};
|
|
88
270
|
actions?: Array<{
|
|
89
271
|
id: string;
|
|
90
272
|
icon?: string;
|
|
@@ -94,8 +276,29 @@ interface PraxisListConfig {
|
|
|
94
276
|
buttonVariant?: 'stroked' | 'raised' | 'flat';
|
|
95
277
|
showIf?: string;
|
|
96
278
|
emitPayload?: 'item' | 'id' | 'value';
|
|
279
|
+
command?: string;
|
|
280
|
+
globalPayload?: any;
|
|
281
|
+
emitLocal?: boolean;
|
|
282
|
+
showLoading?: boolean;
|
|
283
|
+
placement?: 'actions' | 'trailing';
|
|
284
|
+
confirmation?: {
|
|
285
|
+
title?: string;
|
|
286
|
+
message?: string;
|
|
287
|
+
type?: 'danger' | 'warning' | 'info';
|
|
288
|
+
};
|
|
97
289
|
}>;
|
|
98
290
|
i18n?: Record<string, string>;
|
|
291
|
+
ui?: {
|
|
292
|
+
showSearch?: boolean;
|
|
293
|
+
searchField?: string;
|
|
294
|
+
searchPlaceholder?: string;
|
|
295
|
+
showSort?: boolean;
|
|
296
|
+
sortOptions?: Array<string | {
|
|
297
|
+
label: string;
|
|
298
|
+
value: string;
|
|
299
|
+
}>;
|
|
300
|
+
showRange?: boolean;
|
|
301
|
+
};
|
|
99
302
|
a11y?: {
|
|
100
303
|
ariaLabel?: string;
|
|
101
304
|
ariaLabelledBy?: string;
|
|
@@ -131,13 +334,23 @@ interface ListSection<T = any> {
|
|
|
131
334
|
items: T[];
|
|
132
335
|
}
|
|
133
336
|
declare class ListDataService<T = any> {
|
|
337
|
+
private readonly DEBUG;
|
|
134
338
|
private config$;
|
|
135
339
|
private refresh$;
|
|
136
340
|
private pageable$;
|
|
137
341
|
private query$;
|
|
138
342
|
readonly loading$: BehaviorSubject<boolean>;
|
|
139
343
|
readonly total$: BehaviorSubject<number>;
|
|
344
|
+
readonly pageState$: Observable<{
|
|
345
|
+
pageNumber: number;
|
|
346
|
+
pageSize: number;
|
|
347
|
+
sort?: string[];
|
|
348
|
+
}>;
|
|
140
349
|
private lastSig;
|
|
350
|
+
private nextObjectId;
|
|
351
|
+
private readonly objectIds;
|
|
352
|
+
private readonly logger;
|
|
353
|
+
private readonly logContext;
|
|
141
354
|
private readonly crud;
|
|
142
355
|
setConfig(config: PraxisListConfig): void;
|
|
143
356
|
refresh(): void;
|
|
@@ -149,13 +362,51 @@ declare class ListDataService<T = any> {
|
|
|
149
362
|
setSort(sort: string[]): void;
|
|
150
363
|
setQuery(q: Record<string, any>): void;
|
|
151
364
|
groupedStream(): Observable<ListSection<T>[]>;
|
|
365
|
+
private buildConfigSignature;
|
|
366
|
+
private buildLocalDataSignature;
|
|
367
|
+
private ensureObjectId;
|
|
368
|
+
private safeSerialize;
|
|
369
|
+
private warnFilterFallbackOnce;
|
|
370
|
+
private buildLogOptions;
|
|
152
371
|
static ɵfac: i0.ɵɵFactoryDeclaration<ListDataService<any>, never>;
|
|
153
372
|
static ɵprov: i0.ɵɵInjectableDeclaration<ListDataService<any>>;
|
|
154
373
|
}
|
|
155
374
|
|
|
156
|
-
declare class
|
|
375
|
+
declare class ListAiAdapter extends BaseAiAdapter<PraxisListConfig> {
|
|
376
|
+
private list;
|
|
377
|
+
componentName: string;
|
|
378
|
+
constructor(list: PraxisList);
|
|
379
|
+
getCurrentConfig(): PraxisListConfig;
|
|
380
|
+
getCapabilities(): Capability$1[];
|
|
381
|
+
getRuntimeState(): Record<string, any>;
|
|
382
|
+
createSnapshot(): PraxisListConfig;
|
|
383
|
+
restoreSnapshot(snapshot: PraxisListConfig): Promise<void>;
|
|
384
|
+
applyPatch(patch: Partial<PraxisListConfig>, _intent?: string): Promise<PatchResult>;
|
|
385
|
+
private applyConfig;
|
|
386
|
+
private smartMergeListConfig;
|
|
387
|
+
private sanitizePatch;
|
|
388
|
+
private cloneConfig;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
interface ListRowLayoutColumnViewModel {
|
|
392
|
+
slot: ListRowLayoutSlot;
|
|
393
|
+
width?: string;
|
|
394
|
+
minWidth?: string;
|
|
395
|
+
maxWidth?: string;
|
|
396
|
+
align?: 'start' | 'center' | 'end';
|
|
397
|
+
justify?: 'start' | 'center' | 'end' | 'stretch';
|
|
398
|
+
class?: string;
|
|
399
|
+
style?: string;
|
|
400
|
+
}
|
|
401
|
+
declare class PraxisList implements OnInit, OnChanges, OnDestroy {
|
|
402
|
+
private static nextSkinScopeId;
|
|
403
|
+
private customizationEnabled;
|
|
157
404
|
config: PraxisListConfig;
|
|
405
|
+
listId: string;
|
|
406
|
+
componentInstanceId?: string;
|
|
158
407
|
form?: FormGroup | null;
|
|
408
|
+
set enableCustomization(value: boolean);
|
|
409
|
+
get enableCustomization(): boolean;
|
|
159
410
|
itemClick: EventEmitter<ListItemEvent>;
|
|
160
411
|
actionClick: EventEmitter<ListActionEvent>;
|
|
161
412
|
selectionChange: EventEmitter<ListSelectionEvent>;
|
|
@@ -163,36 +414,124 @@ declare class PraxisList implements OnInit, OnChanges {
|
|
|
163
414
|
sections$: rxjs.Observable<ListSection<any>[]>;
|
|
164
415
|
loading$: rxjs.Observable<boolean>;
|
|
165
416
|
total$: rxjs.Observable<number>;
|
|
417
|
+
page$: rxjs.Observable<{
|
|
418
|
+
pageNumber: number;
|
|
419
|
+
pageSize: number;
|
|
420
|
+
sort?: string[];
|
|
421
|
+
}>;
|
|
422
|
+
private lastQuery;
|
|
423
|
+
private search$;
|
|
166
424
|
get layoutLines(): number;
|
|
167
425
|
boundControl: FormControl<unknown | unknown[] | null>;
|
|
426
|
+
readonly skinScopeId: string;
|
|
168
427
|
skinClasses: string;
|
|
169
428
|
inlineCss: string;
|
|
429
|
+
readonly cspNonce: string | null;
|
|
430
|
+
aiAdapter: ListAiAdapter;
|
|
170
431
|
private readonly storage;
|
|
171
432
|
private readonly skin;
|
|
172
433
|
private inferredForPath;
|
|
434
|
+
private schemaInferenceInFlight;
|
|
435
|
+
private readonly schemaFieldsByPath;
|
|
436
|
+
private appliedRuntimeConfig?;
|
|
173
437
|
private readonly data;
|
|
174
438
|
private readonly settings;
|
|
175
439
|
private readonly cdr;
|
|
440
|
+
private readonly componentKeys;
|
|
441
|
+
private readonly logger;
|
|
442
|
+
private readonly i18n;
|
|
443
|
+
private readonly logContext;
|
|
444
|
+
private readonly route;
|
|
445
|
+
private readonly globalActions;
|
|
446
|
+
private readonly dialog;
|
|
447
|
+
private warnedMissingId;
|
|
448
|
+
private hasHydratedPersistence;
|
|
449
|
+
private hydratedPersistenceKey;
|
|
450
|
+
private hydratingPersistenceKey;
|
|
451
|
+
private externalConfigRevision;
|
|
452
|
+
private nextActionItemObjectId;
|
|
453
|
+
private readonly actionItemObjectIds;
|
|
454
|
+
private nextExpansionItemObjectId;
|
|
455
|
+
private readonly expansionItemObjectIds;
|
|
456
|
+
private readonly destroy$;
|
|
457
|
+
actionLoadingState: Record<string, boolean>;
|
|
458
|
+
private expandedItemKeys;
|
|
176
459
|
ngOnInit(): void;
|
|
177
460
|
ngOnChanges(changes: SimpleChanges): void;
|
|
461
|
+
ngOnDestroy(): void;
|
|
178
462
|
private applyPersistence;
|
|
463
|
+
private initializeDataStreams;
|
|
464
|
+
private setupSearch;
|
|
465
|
+
private persistConfig;
|
|
179
466
|
private applySkins;
|
|
180
467
|
isListVariant(): boolean;
|
|
468
|
+
isCardsVariant(): boolean;
|
|
469
|
+
isTilesVariant(): boolean;
|
|
181
470
|
isSelectionEnabled(): boolean;
|
|
182
471
|
private setupSelectionBinding;
|
|
183
|
-
leading: (item: any) => any;
|
|
184
|
-
primary: (item: any) => any;
|
|
185
|
-
secondary: (item: any) => any;
|
|
186
|
-
meta: (item: any) => any;
|
|
187
|
-
trailing: (item: any) => any;
|
|
188
|
-
|
|
189
|
-
|
|
472
|
+
leading: (item: any) => Record<string, any> | null;
|
|
473
|
+
primary: (item: any) => Record<string, any> | null;
|
|
474
|
+
secondary: (item: any) => Record<string, any> | null;
|
|
475
|
+
meta: (item: any) => Record<string, any> | null;
|
|
476
|
+
trailing: (item: any) => Record<string, any> | null;
|
|
477
|
+
identity: (item: any) => Record<string, any> | null;
|
|
478
|
+
balance: (item: any) => Record<string, any> | null;
|
|
479
|
+
limit: (item: any) => Record<string, any> | null;
|
|
480
|
+
risk: (item: any) => Record<string, any> | null;
|
|
481
|
+
alerts: (item: any) => Record<string, any> | null;
|
|
482
|
+
owner: (item: any) => Record<string, any> | null;
|
|
483
|
+
sectionHeaderTemplate: (key: string) => Record<string, any>;
|
|
484
|
+
emptyStateTemplate: () => Record<string, any>;
|
|
485
|
+
itemRuleClass(item: any): string | undefined;
|
|
486
|
+
itemRuleStyle(item: any): string | undefined;
|
|
487
|
+
rowLayoutItemStyle(item: any): string | undefined;
|
|
488
|
+
rowLayoutItemClass(item: any): string | undefined;
|
|
489
|
+
hasRowLayoutGrid(): boolean;
|
|
490
|
+
rowLayoutColumns(): ListRowLayoutColumnViewModel[];
|
|
491
|
+
rowLayoutTrackColumn(index: number, column: ListRowLayoutColumnViewModel): string;
|
|
492
|
+
rowLayoutContentStyle(): string | undefined;
|
|
493
|
+
rowLayoutContentClass(): string | undefined;
|
|
494
|
+
rowLayoutColumnClass(column: ListRowLayoutColumnViewModel): string | undefined;
|
|
495
|
+
rowLayoutColumnStyle(column: ListRowLayoutColumnViewModel): string | undefined;
|
|
496
|
+
rowLayoutSlot(item: any, slot: string): Record<string, any> | null;
|
|
497
|
+
rowLayoutHasSlot(slot: ListRowLayoutSlot): boolean;
|
|
498
|
+
rowLayoutImageAlt(slot: string): string;
|
|
499
|
+
rowLayoutAlignItems(): 'start' | 'center' | 'end' | 'stretch';
|
|
500
|
+
private rowLayoutTemplateColumns;
|
|
501
|
+
private rowLayoutColumnWidth;
|
|
502
|
+
private rowLayoutTextAlign;
|
|
503
|
+
private cssVar;
|
|
504
|
+
private sanitizeCssToken;
|
|
505
|
+
featureLabel(item: any, expr?: string): string;
|
|
506
|
+
plainText(value: string | null | undefined): string | null;
|
|
507
|
+
itemAriaLabel(item: any): string | null;
|
|
508
|
+
private accessibleItemLabel;
|
|
509
|
+
private slotAriaLabel;
|
|
510
|
+
private nodeAriaLabel;
|
|
511
|
+
featureLabelLines(item: any, expr?: string): string[];
|
|
512
|
+
featureSemanticClass(item: any, expr?: string, featureClass?: string): string | null;
|
|
513
|
+
featureProgressPercent(item: any, expr?: string, featureClass?: string): number | null;
|
|
514
|
+
private metricText;
|
|
515
|
+
private metricToken;
|
|
516
|
+
private buildMetricView;
|
|
517
|
+
private buildComposeView;
|
|
518
|
+
private buildMetricProgress;
|
|
519
|
+
private metricLayout;
|
|
520
|
+
private metricAlign;
|
|
521
|
+
private metricIconPosition;
|
|
522
|
+
private metricToneClass;
|
|
523
|
+
private metricToneStyle;
|
|
524
|
+
private metricColorStyle;
|
|
525
|
+
private metricCssVar;
|
|
526
|
+
private resolveMetricColor;
|
|
527
|
+
private joinStyles;
|
|
528
|
+
private joinClasses;
|
|
190
529
|
featuresVisible(): boolean;
|
|
191
530
|
featuresMode(): 'icons+labels' | 'icons-only' | 'labels-only';
|
|
192
531
|
hasSkeleton(): boolean;
|
|
193
532
|
skeletonCount(): number;
|
|
194
533
|
skeletonItems(): any[];
|
|
195
|
-
visibleActions(item: any): {
|
|
534
|
+
visibleActions(item: any, placement?: 'actions' | 'trailing'): {
|
|
196
535
|
id: string;
|
|
197
536
|
icon?: string;
|
|
198
537
|
label?: string;
|
|
@@ -201,28 +540,422 @@ declare class PraxisList implements OnInit, OnChanges {
|
|
|
201
540
|
buttonVariant?: "stroked" | "raised" | "flat";
|
|
202
541
|
showIf?: string;
|
|
203
542
|
emitPayload?: "item" | "id" | "value";
|
|
543
|
+
command?: string;
|
|
544
|
+
globalPayload?: any;
|
|
545
|
+
emitLocal?: boolean;
|
|
546
|
+
showLoading?: boolean;
|
|
547
|
+
placement?: "actions" | "trailing";
|
|
548
|
+
confirmation?: {
|
|
549
|
+
title?: string;
|
|
550
|
+
message?: string;
|
|
551
|
+
type?: "danger" | "warning" | "info";
|
|
552
|
+
};
|
|
204
553
|
}[];
|
|
205
554
|
onItemClick(item: any, index: number, section?: string): void;
|
|
206
|
-
|
|
555
|
+
onRowActivate(item: any, index: number, section?: string): void;
|
|
556
|
+
onRowSpaceActivate(event: Event, clickable: boolean, item: any, index: number, section?: string): void;
|
|
557
|
+
onExpandToggle(event: Event, item: any, index: number): void;
|
|
558
|
+
onActionKeydown(ev: Event): void;
|
|
559
|
+
configEditorLabel(): string;
|
|
560
|
+
expandToggleAriaLabel(item: any, index: number): string;
|
|
561
|
+
expansionRegionAriaLabel(item: any): string;
|
|
562
|
+
emptyStateLabel(): string;
|
|
563
|
+
onActionClick(ev: MouseEvent, actionId: string, item: any, index: number): Promise<void>;
|
|
564
|
+
private isGlobalCommand;
|
|
565
|
+
private resolveActionPayload;
|
|
566
|
+
private resolveTemplate;
|
|
567
|
+
private resolveStringTemplate;
|
|
568
|
+
private lookup;
|
|
207
569
|
onSelectionChange(_change: MatSelectionListChange): void;
|
|
208
570
|
openConfigEditor(): void;
|
|
209
571
|
nextPage(): void;
|
|
210
572
|
prevPage(): void;
|
|
211
|
-
|
|
573
|
+
setPageSize(ps: number): void;
|
|
574
|
+
onSortChange(val: string): void;
|
|
575
|
+
onSearchInput(val: string): void;
|
|
576
|
+
sortOptionValue(op: any): string;
|
|
577
|
+
sortOptionLabel(op: any): string;
|
|
578
|
+
rangeStart(ps: {
|
|
579
|
+
pageNumber: number;
|
|
580
|
+
pageSize: number;
|
|
581
|
+
}): number;
|
|
582
|
+
rangeEnd(currLen: number, ps: {
|
|
583
|
+
pageNumber: number;
|
|
584
|
+
pageSize: number;
|
|
585
|
+
}, total: number): number;
|
|
586
|
+
applyConfigFromAdapter(newCfg: PraxisListConfig): void;
|
|
587
|
+
private applyAuthoringPayload;
|
|
588
|
+
private buildListEditorRuntimeContext;
|
|
589
|
+
private executeListEditorApplyPlan;
|
|
590
|
+
private storageKey;
|
|
591
|
+
private componentKeyId;
|
|
592
|
+
private warnMissingId;
|
|
212
593
|
private readonly crud;
|
|
213
|
-
private
|
|
594
|
+
private executeSchemaInferenceForPlan;
|
|
214
595
|
private evalSlot;
|
|
596
|
+
private resolveSlotTemplate;
|
|
597
|
+
private evaluateTemplateNode;
|
|
598
|
+
private buildUnsupportedComposeNode;
|
|
599
|
+
private buildRuntimeComponentView;
|
|
600
|
+
private resolveComponentInputs;
|
|
601
|
+
private resolveComponentInputValue;
|
|
602
|
+
private resolveComponentStringInput;
|
|
603
|
+
isExpandable(): boolean;
|
|
604
|
+
expandableByRow(): boolean;
|
|
605
|
+
expansionOwnedByRow(): boolean;
|
|
606
|
+
expansionOwnedByIcon(): boolean;
|
|
607
|
+
showExpandIcon(placement?: 'expand' | 'trailing'): boolean;
|
|
608
|
+
expandPlacement(): 'expand' | 'trailing';
|
|
609
|
+
private actionPlacement;
|
|
610
|
+
isExpanded(item: any, index: number): boolean;
|
|
611
|
+
expandRegionId(item: any, index: number): string;
|
|
612
|
+
expansionSections(): ListExpansionSectionDef[];
|
|
613
|
+
expansionSectionItems(item: any, section: ListExpansionSectionDef, index?: number): any[];
|
|
614
|
+
expansionSectionHasContent(item: any, section: ListExpansionSectionDef, index?: number): boolean;
|
|
615
|
+
expansionItemLabel(value: any): string;
|
|
616
|
+
expansionInfoTitle(value: any): string;
|
|
617
|
+
expansionInfoValue(value: any): string;
|
|
618
|
+
expansionTimelineTitle(value: any): string;
|
|
619
|
+
expansionTimelineMeta(value: any): string;
|
|
620
|
+
expansionTimelineDescription(value: any): string;
|
|
621
|
+
expansionKeyValueKey(value: any): string;
|
|
622
|
+
expansionKeyValueValue(value: any): string;
|
|
215
623
|
private splitPipe;
|
|
216
624
|
private splitPipeName;
|
|
217
625
|
private evalString;
|
|
218
626
|
private parseTwoParams;
|
|
219
627
|
private toBoolean;
|
|
628
|
+
private prettyLabel;
|
|
220
629
|
private mapDateStyle;
|
|
221
630
|
starIcon(index: number, ratingValue: string | number): string;
|
|
631
|
+
isThemeColor(color?: string): boolean;
|
|
632
|
+
chipStyle(color?: string, variant?: 'filled' | 'outlined'): string;
|
|
633
|
+
iconStyle(color?: string): string;
|
|
634
|
+
buttonStyle(color?: string, variant?: 'stroked' | 'raised' | 'flat'): string;
|
|
635
|
+
ratingMax(def?: any): number;
|
|
636
|
+
ratingThemeColor(def?: any): string | undefined;
|
|
637
|
+
ratingIconStyle(def?: any): string;
|
|
638
|
+
ratingRange(def?: any): number[];
|
|
222
639
|
trackBySection: (_: number, s: ListSection<any>) => string | number;
|
|
223
640
|
trackByItem: (i: number, it: any) => any;
|
|
641
|
+
isActionLoading(actionId: string, item: any, index: number): boolean;
|
|
642
|
+
private evaluateActionVisibility;
|
|
643
|
+
private evaluateRuntimeCondition;
|
|
644
|
+
private normalizeConditionExpression;
|
|
645
|
+
private resolveConditionOperand;
|
|
646
|
+
private looseEquals;
|
|
647
|
+
private warnInvalidConditionOnce;
|
|
648
|
+
private cloneTemplateDef;
|
|
649
|
+
private mergeTemplateDefs;
|
|
650
|
+
private mergePlainObjects;
|
|
651
|
+
private buildActionLoadingKey;
|
|
652
|
+
private ensureActionItemObjectId;
|
|
653
|
+
private warnGlobalCommandUnavailableOnce;
|
|
654
|
+
private buildLogOptions;
|
|
655
|
+
private toggleExpanded;
|
|
656
|
+
private syncExpansionState;
|
|
657
|
+
private itemExpansionKey;
|
|
658
|
+
private t;
|
|
659
|
+
private ensureExpansionItemObjectId;
|
|
660
|
+
private sanitizeDomId;
|
|
661
|
+
private evaluateExpansionExpr;
|
|
662
|
+
private normalizeExpansionItems;
|
|
663
|
+
private normalizeKeyValueItems;
|
|
224
664
|
static ɵfac: i0.ɵɵFactoryDeclaration<PraxisList, never>;
|
|
225
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<PraxisList, "praxis-list", never, { "config": { "alias": "config"; "required": false; }; "form": { "alias": "form"; "required": false; }; }, { "itemClick": "itemClick"; "actionClick": "actionClick"; "selectionChange": "selectionChange"; }, never, never, true, never>;
|
|
665
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PraxisList, "praxis-list", never, { "config": { "alias": "config"; "required": false; }; "listId": { "alias": "listId"; "required": true; }; "componentInstanceId": { "alias": "componentInstanceId"; "required": false; }; "form": { "alias": "form"; "required": false; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; }; }, { "itemClick": "itemClick"; "actionClick": "actionClick"; "selectionChange": "selectionChange"; }, never, never, true, never>;
|
|
666
|
+
static ngAcceptInputType_enableCustomization: unknown;
|
|
667
|
+
}
|
|
668
|
+
|
|
669
|
+
/**
|
|
670
|
+
* Executive badge component for displaying account segment classification.
|
|
671
|
+
*
|
|
672
|
+
* This component replaces legacy HTML string-based badges with a type-safe,
|
|
673
|
+
* encapsulated solution that bypasses Angular's DomSanitizer restrictions.
|
|
674
|
+
*
|
|
675
|
+
* @remarks
|
|
676
|
+
* - Fully WCAG 2.1 AA compliant with proper ARIA attributes
|
|
677
|
+
* - Uses OnPush change detection for optimal performance
|
|
678
|
+
* - Supports three segment variants: enterprise, corporate, middle
|
|
679
|
+
* - Colors follow corporate branding guidelines
|
|
680
|
+
* - Input validation prevents invalid runtime values
|
|
681
|
+
*
|
|
682
|
+
* @example Basic usage
|
|
683
|
+
* ```html
|
|
684
|
+
* <praxis-executive-badge variant="enterprise">
|
|
685
|
+
* Enterprise
|
|
686
|
+
* </praxis-executive-badge>
|
|
687
|
+
* ```
|
|
688
|
+
*
|
|
689
|
+
* @example Dynamic variant with custom label
|
|
690
|
+
* ```html
|
|
691
|
+
* <praxis-executive-badge
|
|
692
|
+
* [variant]="account.segmentType"
|
|
693
|
+
* [ariaLabel]="'Account segment: ' + account.segmentLabel">
|
|
694
|
+
* {{ account.segmentLabel }}
|
|
695
|
+
* </praxis-executive-badge>
|
|
696
|
+
* ```
|
|
697
|
+
*
|
|
698
|
+
* @see {@link ExecutiveAlertsComponent} for related alert component
|
|
699
|
+
* @see WCAG 2.1 Level AA - Guideline 4.1.2 (Name, Role, Value)
|
|
700
|
+
*
|
|
701
|
+
* @public
|
|
702
|
+
*/
|
|
703
|
+
declare class ExecutiveBadgeComponent {
|
|
704
|
+
/**
|
|
705
|
+
* Custom ARIA label for screen readers.
|
|
706
|
+
* If not provided, defaults to "Segment badge: {variant}"
|
|
707
|
+
*/
|
|
708
|
+
ariaLabel?: string;
|
|
709
|
+
private _variant;
|
|
710
|
+
/**
|
|
711
|
+
* Badge variant type with runtime validation.
|
|
712
|
+
* Valid values: 'enterprise', 'corporate', 'middle'
|
|
713
|
+
* Invalid values will default to 'enterprise' with console warning.
|
|
714
|
+
*/
|
|
715
|
+
set variant(value: 'enterprise' | 'corporate' | 'middle');
|
|
716
|
+
get variant(): 'enterprise' | 'corporate' | 'middle';
|
|
717
|
+
get variantClass(): string;
|
|
718
|
+
/**
|
|
719
|
+
* Computed ARIA label for accessibility.
|
|
720
|
+
* Uses custom ariaLabel if provided, otherwise generates default.
|
|
721
|
+
*/
|
|
722
|
+
get computedAriaLabel(): string;
|
|
723
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ExecutiveBadgeComponent, never>;
|
|
724
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ExecutiveBadgeComponent, "praxis-executive-badge", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; }, {}, never, ["*"], true, never>;
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
/**
|
|
728
|
+
* Alert data interface for executive alerts component.
|
|
729
|
+
*
|
|
730
|
+
* @property type - Alert severity level (warning or critical)
|
|
731
|
+
* @property count - Number of alerts of this type (must be >= 0)
|
|
732
|
+
*/
|
|
733
|
+
interface ExecutiveAlert {
|
|
734
|
+
type: 'warning' | 'critical';
|
|
735
|
+
count: number;
|
|
736
|
+
}
|
|
737
|
+
/**
|
|
738
|
+
* Executive alerts component for displaying warning and critical account flags.
|
|
739
|
+
*
|
|
740
|
+
* This component replaces legacy HTML string-based alerts with a fully
|
|
741
|
+
* accessible, WCAG 2.1 AA compliant solution.
|
|
742
|
+
*
|
|
743
|
+
* @remarks
|
|
744
|
+
* **Accessibility Features:**
|
|
745
|
+
* - WCAG 1.3.1: Semantic structure with proper roles
|
|
746
|
+
* - WCAG 1.4.1: Does not rely on color alone (uses icons + text)
|
|
747
|
+
* - WCAG 4.1.3: Status messages properly announced to screen readers
|
|
748
|
+
* - aria-live regions for dynamic updates
|
|
749
|
+
* - Screen-reader only text for full context
|
|
750
|
+
*
|
|
751
|
+
* **Performance:**
|
|
752
|
+
* - OnPush change detection strategy
|
|
753
|
+
* - Input validation prevents invalid data
|
|
754
|
+
* - Optimized trackBy function
|
|
755
|
+
*
|
|
756
|
+
* @example Basic usage
|
|
757
|
+
* ```html
|
|
758
|
+
* <praxis-executive-alerts [alerts]="[
|
|
759
|
+
* { type: 'warning', count: 1 },
|
|
760
|
+
* { type: 'critical', count: 2 }
|
|
761
|
+
* ]"></praxis-executive-alerts>
|
|
762
|
+
* ```
|
|
763
|
+
*
|
|
764
|
+
* @example Empty state (renders nothing)
|
|
765
|
+
* ```html
|
|
766
|
+
* <praxis-executive-alerts [alerts]="[]"></praxis-executive-alerts>
|
|
767
|
+
* ```
|
|
768
|
+
*
|
|
769
|
+
* @see WCAG 2.1 Level AA - Guidelines 1.3.1, 1.4.1, 4.1.3
|
|
770
|
+
* @public
|
|
771
|
+
*/
|
|
772
|
+
declare class ExecutiveAlertsComponent implements OnChanges {
|
|
773
|
+
alerts: ExecutiveAlert[];
|
|
774
|
+
/**
|
|
775
|
+
* Validated and filtered alerts.
|
|
776
|
+
* Only valid alerts (correct type and count >= 0) are included.
|
|
777
|
+
*/
|
|
778
|
+
validAlerts: ExecutiveAlert[];
|
|
779
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
780
|
+
/**
|
|
781
|
+
* Validates alerts array and filters out invalid entries.
|
|
782
|
+
* Logs warnings for invalid data in development mode.
|
|
783
|
+
*/
|
|
784
|
+
private validateAndFilterAlerts;
|
|
785
|
+
/**
|
|
786
|
+
* TrackBy function for optimal rendering performance.
|
|
787
|
+
* Uses combination of type and count for unique identification.
|
|
788
|
+
*/
|
|
789
|
+
trackByAlert(index: number, alert: ExecutiveAlert): string;
|
|
790
|
+
/**
|
|
791
|
+
* Generates ARIA label for alert badge.
|
|
792
|
+
* Provides concise description for screen readers.
|
|
793
|
+
*/
|
|
794
|
+
getAlertAriaLabel(alert: ExecutiveAlert): string;
|
|
795
|
+
/**
|
|
796
|
+
* Generates detailed description for screen readers.
|
|
797
|
+
* Provides full context including severity and actionability.
|
|
798
|
+
*/
|
|
799
|
+
getAlertDescription(alert: ExecutiveAlert): string;
|
|
800
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ExecutiveAlertsComponent, never>;
|
|
801
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ExecutiveAlertsComponent, "praxis-executive-alerts", never, { "alerts": { "alias": "alerts"; "required": false; }; }, {}, never, never, true, never>;
|
|
802
|
+
}
|
|
803
|
+
|
|
804
|
+
/**
|
|
805
|
+
* Executive owner component displaying account owner with accessible avatar.
|
|
806
|
+
*
|
|
807
|
+
* This component replaces legacy HTML string-based owner displays with a
|
|
808
|
+
* fully accessible, WCAG 2.1 AA compliant solution featuring an inline SVG avatar.
|
|
809
|
+
*
|
|
810
|
+
* @remarks
|
|
811
|
+
* **Accessibility Features:**
|
|
812
|
+
* - WCAG 1.1.1: Non-text content has text alternative (SVG with role and aria-label)
|
|
813
|
+
* - SVG includes <title> element for tooltips
|
|
814
|
+
* - Handles empty/undefined names gracefully
|
|
815
|
+
* - Screen reader announces owner information clearly
|
|
816
|
+
*
|
|
817
|
+
* **Performance:**
|
|
818
|
+
* - OnPush change detection strategy
|
|
819
|
+
* - Input validation for name
|
|
820
|
+
* - Lightweight inline SVG (no external dependencies)
|
|
821
|
+
*
|
|
822
|
+
* @example Basic usage
|
|
823
|
+
* ```html
|
|
824
|
+
* <praxis-executive-owner name="Ana Carolina"></praxis-executive-owner>
|
|
825
|
+
* ```
|
|
826
|
+
*
|
|
827
|
+
* @example With empty name (shows fallback)
|
|
828
|
+
* ```html
|
|
829
|
+
* <praxis-executive-owner name=""></praxis-executive-owner>
|
|
830
|
+
* <!-- Displays: "Unassigned" -->
|
|
831
|
+
* ```
|
|
832
|
+
*
|
|
833
|
+
* @see WCAG 2.1 Level AA - Guideline 1.1.1 (Non-text Content)
|
|
834
|
+
* @public
|
|
835
|
+
*/
|
|
836
|
+
declare class ExecutiveOwnerComponent {
|
|
837
|
+
private _name;
|
|
838
|
+
/**
|
|
839
|
+
* Owner name with automatic validation and sanitization.
|
|
840
|
+
* - Empty strings default to "Unassigned"
|
|
841
|
+
* - Trimmed and limited to 50 characters
|
|
842
|
+
* - Null/undefined converted to empty string
|
|
843
|
+
*/
|
|
844
|
+
set name(value: string);
|
|
845
|
+
get name(): string;
|
|
846
|
+
/**
|
|
847
|
+
* Display name with fallback for empty values.
|
|
848
|
+
* Returns "Unassigned" if name is empty.
|
|
849
|
+
*/
|
|
850
|
+
get displayName(): string;
|
|
851
|
+
/**
|
|
852
|
+
* ARIA label for SVG avatar.
|
|
853
|
+
* Provides context for screen readers.
|
|
854
|
+
*/
|
|
855
|
+
get avatarAriaLabel(): string;
|
|
856
|
+
/**
|
|
857
|
+
* SVG title element content for tooltip.
|
|
858
|
+
* Shows on hover in most browsers.
|
|
859
|
+
*/
|
|
860
|
+
get avatarTitle(): string;
|
|
861
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ExecutiveOwnerComponent, never>;
|
|
862
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ExecutiveOwnerComponent, "praxis-executive-owner", never, { "name": { "alias": "name"; "required": false; }; }, {}, never, never, true, never>;
|
|
863
|
+
}
|
|
864
|
+
|
|
865
|
+
interface EditorDocument<TConfig, TBindings = unknown> {
|
|
866
|
+
kind: string;
|
|
867
|
+
version: number;
|
|
868
|
+
config: TConfig;
|
|
869
|
+
bindings?: TBindings;
|
|
870
|
+
}
|
|
871
|
+
interface ListAuthoringDocument extends EditorDocument<PraxisListConfig, Record<string, never>> {
|
|
872
|
+
kind: 'praxis.list.editor';
|
|
873
|
+
version: 1;
|
|
874
|
+
}
|
|
875
|
+
interface EditorDiagnostic {
|
|
876
|
+
level: 'error' | 'warning' | 'info';
|
|
877
|
+
code: string;
|
|
878
|
+
message: string;
|
|
879
|
+
path?: string;
|
|
880
|
+
}
|
|
881
|
+
interface ListValidationContext {
|
|
882
|
+
schemaFieldNames?: string[];
|
|
883
|
+
}
|
|
884
|
+
interface ListProjectionContext {
|
|
885
|
+
schemaFieldNames?: string[];
|
|
886
|
+
}
|
|
887
|
+
interface ListSchemaInferencePlan {
|
|
888
|
+
resourcePath: string;
|
|
889
|
+
sourceDocument: ListAuthoringDocument;
|
|
890
|
+
targetDocument: ListAuthoringDocument;
|
|
891
|
+
}
|
|
892
|
+
interface ListRuntimeContext {
|
|
893
|
+
currentConfig?: PraxisListConfig;
|
|
894
|
+
schemaFieldNames?: string[];
|
|
895
|
+
}
|
|
896
|
+
interface ListApplyPlan {
|
|
897
|
+
canonicalConfig: PraxisListConfig;
|
|
898
|
+
canonicalDocument?: ListAuthoringDocument;
|
|
899
|
+
persistence?: {
|
|
900
|
+
saveConfig?: boolean;
|
|
901
|
+
};
|
|
902
|
+
runtime?: {
|
|
903
|
+
applyConfig?: boolean;
|
|
904
|
+
rebindSelection?: boolean;
|
|
905
|
+
reapplySkin?: boolean;
|
|
906
|
+
schemaInference?: ListSchemaInferencePlan;
|
|
907
|
+
markForCheck?: boolean;
|
|
908
|
+
};
|
|
909
|
+
diff?: {
|
|
910
|
+
configChanged?: boolean;
|
|
911
|
+
dataSourceChanged?: boolean;
|
|
912
|
+
selectionChanged?: boolean;
|
|
913
|
+
skinChanged?: boolean;
|
|
914
|
+
templatingChanged?: boolean;
|
|
915
|
+
schemaInferenceRequested?: boolean;
|
|
916
|
+
};
|
|
917
|
+
diagnostics: EditorDiagnostic[];
|
|
918
|
+
}
|
|
919
|
+
|
|
920
|
+
interface JsonValidationResult {
|
|
921
|
+
isValid: boolean;
|
|
922
|
+
error?: string;
|
|
923
|
+
document?: ListAuthoringDocument;
|
|
924
|
+
diagnostics?: EditorDiagnostic[];
|
|
925
|
+
}
|
|
926
|
+
interface JsonEditorEvent {
|
|
927
|
+
type: 'apply' | 'format' | 'validation';
|
|
928
|
+
payload: JsonValidationResult;
|
|
929
|
+
}
|
|
930
|
+
declare class PraxisListJsonConfigEditorComponent implements OnInit, OnChanges, OnDestroy {
|
|
931
|
+
private readonly cdr;
|
|
932
|
+
document: ListAuthoringDocument | null;
|
|
933
|
+
documentChange: EventEmitter<ListAuthoringDocument>;
|
|
934
|
+
validationChange: EventEmitter<JsonValidationResult>;
|
|
935
|
+
editorEvent: EventEmitter<JsonEditorEvent>;
|
|
936
|
+
jsonText: string;
|
|
937
|
+
isValidJson: boolean;
|
|
938
|
+
jsonError: string;
|
|
939
|
+
unknownTopKeys: string[];
|
|
940
|
+
hasPendingExternalUpdate: boolean;
|
|
941
|
+
private readonly destroy$;
|
|
942
|
+
private readonly jsonTextChanges$;
|
|
943
|
+
private lastSyncedJsonText;
|
|
944
|
+
constructor(cdr: ChangeDetectorRef);
|
|
945
|
+
ngOnInit(): void;
|
|
946
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
947
|
+
ngOnDestroy(): void;
|
|
948
|
+
onJsonTextChange(text: string): void;
|
|
949
|
+
applyJsonChanges(): void;
|
|
950
|
+
formatJson(): void;
|
|
951
|
+
updateJsonFromDocument(document: ListAuthoringDocument, force?: boolean): void;
|
|
952
|
+
reloadFromDocument(): void;
|
|
953
|
+
private validateJson;
|
|
954
|
+
private updateValidationState;
|
|
955
|
+
private syncJsonText;
|
|
956
|
+
private hasUnsavedLocalChanges;
|
|
957
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PraxisListJsonConfigEditorComponent, never>;
|
|
958
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PraxisListJsonConfigEditorComponent, "praxis-list-json-config-editor", never, { "document": { "alias": "document"; "required": false; }; }, { "documentChange": "documentChange"; "validationChange": "validationChange"; "editorEvent": "editorEvent"; }, never, never, true, never>;
|
|
226
959
|
}
|
|
227
960
|
|
|
228
961
|
type NormalizedListConfig = Omit<PraxisListConfig, 'dataSource' | 'layout' | 'selection' | 'skin' | 'i18n'> & {
|
|
@@ -233,8 +966,9 @@ type NormalizedListConfig = Omit<PraxisListConfig, 'dataSource' | 'layout' | 'se
|
|
|
233
966
|
sort?: string[];
|
|
234
967
|
};
|
|
235
968
|
layout: {
|
|
236
|
-
variant: 'list' | 'cards';
|
|
969
|
+
variant: 'list' | 'cards' | 'tiles';
|
|
237
970
|
density?: 'default' | 'comfortable' | 'compact';
|
|
971
|
+
itemSpacing?: 'none' | 'tight' | 'default' | 'relaxed';
|
|
238
972
|
lines: 1 | 2 | 3;
|
|
239
973
|
dividers?: 'none' | 'between' | 'all';
|
|
240
974
|
model?: 'standard' | 'media' | 'hotel';
|
|
@@ -244,7 +978,7 @@ type NormalizedListConfig = Omit<PraxisListConfig, 'dataSource' | 'layout' | 'se
|
|
|
244
978
|
pageSize?: number;
|
|
245
979
|
};
|
|
246
980
|
skin: {
|
|
247
|
-
type: 'pill-soft' | 'gradient-tile' | 'glass' | 'elevated' | 'custom';
|
|
981
|
+
type: 'pill-soft' | 'gradient-tile' | 'glass' | 'elevated' | 'outline' | 'flat' | 'neumorphism' | 'custom';
|
|
248
982
|
gradient: {
|
|
249
983
|
from: string;
|
|
250
984
|
to: string;
|
|
@@ -269,10 +1003,16 @@ type NormalizedListConfig = Omit<PraxisListConfig, 'dataSource' | 'layout' | 'se
|
|
|
269
1003
|
currency?: string;
|
|
270
1004
|
};
|
|
271
1005
|
actions?: PraxisListConfig['actions'];
|
|
1006
|
+
ui: NonNullable<PraxisListConfig['ui']>;
|
|
1007
|
+
a11y?: PraxisListConfig['a11y'];
|
|
1008
|
+
events?: PraxisListConfig['events'];
|
|
272
1009
|
};
|
|
1010
|
+
type SkinType = NormalizedListConfig['skin']['type'];
|
|
1011
|
+
type SkinPreset = Exclude<SkinType, 'custom'>;
|
|
273
1012
|
declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
|
|
274
1013
|
config: PraxisListConfig;
|
|
275
1014
|
listId?: string;
|
|
1015
|
+
document: ListAuthoringDocument;
|
|
276
1016
|
working: NormalizedListConfig;
|
|
277
1017
|
isDirty$: BehaviorSubject<boolean>;
|
|
278
1018
|
isValid$: BehaviorSubject<boolean>;
|
|
@@ -285,25 +1025,27 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
|
|
|
285
1025
|
sortDir: 'asc' | 'desc';
|
|
286
1026
|
mappingPrimary: {
|
|
287
1027
|
field?: string;
|
|
288
|
-
type: 'text' | 'currency' | 'date';
|
|
1028
|
+
type: 'text' | 'currency' | 'date' | 'html';
|
|
289
1029
|
currencyCode?: string;
|
|
290
1030
|
locale?: string;
|
|
291
1031
|
dateStyle?: 'short' | 'medium' | 'long' | 'full';
|
|
292
1032
|
class?: string;
|
|
293
1033
|
style?: string;
|
|
1034
|
+
extraPipe?: string;
|
|
294
1035
|
};
|
|
295
1036
|
mappingSecondary: {
|
|
296
1037
|
field?: string;
|
|
297
|
-
type: 'text' | 'currency' | 'date';
|
|
1038
|
+
type: 'text' | 'currency' | 'date' | 'html';
|
|
298
1039
|
currencyCode?: string;
|
|
299
1040
|
locale?: string;
|
|
300
1041
|
dateStyle?: 'short' | 'medium' | 'long' | 'full';
|
|
301
1042
|
class?: string;
|
|
302
1043
|
style?: string;
|
|
1044
|
+
extraPipe?: string;
|
|
303
1045
|
};
|
|
304
1046
|
mappingMeta: {
|
|
305
1047
|
field?: string;
|
|
306
|
-
type: 'text' | 'currency' | 'date' | 'chip' | 'rating';
|
|
1048
|
+
type: 'text' | 'currency' | 'date' | 'chip' | 'rating' | 'icon' | 'image' | 'html';
|
|
307
1049
|
currencyCode?: string;
|
|
308
1050
|
locale?: string;
|
|
309
1051
|
dateStyle?: 'short' | 'medium' | 'long' | 'full';
|
|
@@ -312,31 +1054,106 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
|
|
|
312
1054
|
placement?: 'side' | 'line';
|
|
313
1055
|
chipColor?: string;
|
|
314
1056
|
chipVariant?: 'filled' | 'outlined';
|
|
1057
|
+
ratingColor?: string;
|
|
1058
|
+
ratingSize?: number;
|
|
1059
|
+
ratingMax?: number;
|
|
1060
|
+
iconColor?: string;
|
|
1061
|
+
imageAlt?: string;
|
|
1062
|
+
extraPipe?: string;
|
|
315
1063
|
};
|
|
316
1064
|
mappingMetaPrefixIcon?: string;
|
|
317
1065
|
mappingTrailing: {
|
|
318
1066
|
field?: string;
|
|
319
|
-
type?: 'text' | 'currency' | 'date' | 'chip';
|
|
1067
|
+
type?: 'text' | 'currency' | 'date' | 'chip' | 'icon' | 'rating' | 'html' | 'image';
|
|
320
1068
|
class?: string;
|
|
321
1069
|
style?: string;
|
|
322
1070
|
chipColor?: string;
|
|
323
1071
|
chipVariant?: 'filled' | 'outlined';
|
|
1072
|
+
ratingColor?: string;
|
|
1073
|
+
ratingSize?: number;
|
|
1074
|
+
ratingMax?: number;
|
|
1075
|
+
iconColor?: string;
|
|
1076
|
+
imageUrl?: string;
|
|
1077
|
+
imageAlt?: string;
|
|
324
1078
|
currencyCode?: string;
|
|
325
1079
|
locale?: string;
|
|
326
1080
|
dateStyle?: 'short' | 'medium' | 'long' | 'full';
|
|
1081
|
+
extraPipe?: string;
|
|
327
1082
|
};
|
|
328
1083
|
mappingLeading: {
|
|
329
|
-
|
|
1084
|
+
field?: string;
|
|
1085
|
+
type: 'icon' | 'image' | 'text' | 'chip' | 'rating' | 'html';
|
|
330
1086
|
icon?: string;
|
|
331
1087
|
imageUrl?: string;
|
|
1088
|
+
imageAlt?: string;
|
|
332
1089
|
badgeText?: string;
|
|
333
1090
|
badgeColor?: string;
|
|
334
1091
|
badgeVariant?: 'filled' | 'outlined';
|
|
1092
|
+
class?: string;
|
|
1093
|
+
style?: string;
|
|
1094
|
+
chipColor?: string;
|
|
1095
|
+
chipVariant?: 'filled' | 'outlined';
|
|
1096
|
+
ratingColor?: string;
|
|
1097
|
+
ratingSize?: number;
|
|
1098
|
+
ratingMax?: number;
|
|
1099
|
+
iconColor?: string;
|
|
1100
|
+
extraPipe?: string;
|
|
1101
|
+
};
|
|
1102
|
+
mappingSectionHeader: {
|
|
1103
|
+
type: 'text' | 'chip' | 'icon' | 'image' | 'rating' | 'html';
|
|
1104
|
+
expr?: string;
|
|
1105
|
+
class?: string;
|
|
1106
|
+
style?: string;
|
|
1107
|
+
chipColor?: string;
|
|
1108
|
+
chipVariant?: 'filled' | 'outlined';
|
|
1109
|
+
ratingColor?: string;
|
|
1110
|
+
ratingSize?: number;
|
|
1111
|
+
ratingMax?: number;
|
|
1112
|
+
iconColor?: string;
|
|
1113
|
+
imageUrl?: string;
|
|
1114
|
+
imageAlt?: string;
|
|
1115
|
+
extraPipe?: string;
|
|
1116
|
+
};
|
|
1117
|
+
mappingEmptyState: {
|
|
1118
|
+
type: 'text' | 'chip' | 'icon' | 'image' | 'rating' | 'html';
|
|
1119
|
+
expr?: string;
|
|
1120
|
+
class?: string;
|
|
1121
|
+
style?: string;
|
|
1122
|
+
chipColor?: string;
|
|
1123
|
+
chipVariant?: 'filled' | 'outlined';
|
|
1124
|
+
ratingColor?: string;
|
|
1125
|
+
ratingSize?: number;
|
|
1126
|
+
ratingMax?: number;
|
|
1127
|
+
iconColor?: string;
|
|
1128
|
+
imageUrl?: string;
|
|
1129
|
+
imageAlt?: string;
|
|
1130
|
+
extraPipe?: string;
|
|
335
1131
|
};
|
|
336
1132
|
mapping: {
|
|
337
1133
|
leadingIcon?: string;
|
|
338
1134
|
};
|
|
339
1135
|
private mappingDirty;
|
|
1136
|
+
private appliedMappingSnapshot;
|
|
1137
|
+
statusPosition: 'inline' | 'top-right' | undefined;
|
|
1138
|
+
iconColorMapEntries: Array<{
|
|
1139
|
+
key: string;
|
|
1140
|
+
color?: string;
|
|
1141
|
+
}>;
|
|
1142
|
+
chipColorMapEntries: Array<{
|
|
1143
|
+
key: string;
|
|
1144
|
+
color?: string;
|
|
1145
|
+
}>;
|
|
1146
|
+
chipLabelMapEntries: Array<{
|
|
1147
|
+
key: string;
|
|
1148
|
+
label?: string;
|
|
1149
|
+
}>;
|
|
1150
|
+
globalActionCatalog: GlobalActionCatalogEntry[];
|
|
1151
|
+
selectedGlobalActionId?: string;
|
|
1152
|
+
uiSortRows: Array<{
|
|
1153
|
+
label?: string;
|
|
1154
|
+
field?: string;
|
|
1155
|
+
dir?: 'asc' | 'desc';
|
|
1156
|
+
}>;
|
|
340
1157
|
mappingMetaFields: string[];
|
|
341
1158
|
mappingMetaSeparator: string;
|
|
342
1159
|
mappingMetaWrapSecondInParens: boolean;
|
|
@@ -349,6 +1166,9 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
|
|
|
349
1166
|
}>;
|
|
350
1167
|
featuresVisible: boolean;
|
|
351
1168
|
featuresMode: 'icons+labels' | 'icons-only' | 'labels-only';
|
|
1169
|
+
skeletonCountInput: number;
|
|
1170
|
+
queryJson: string;
|
|
1171
|
+
queryError: string;
|
|
352
1172
|
private crud;
|
|
353
1173
|
private resourcePathChanges;
|
|
354
1174
|
constructor(injected?: any);
|
|
@@ -358,10 +1178,19 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
|
|
|
358
1178
|
pickMetaPrefixIcon(): Promise<void>;
|
|
359
1179
|
getSettingsValue(): any;
|
|
360
1180
|
onSave(): any;
|
|
361
|
-
|
|
1181
|
+
onJsonConfigChange(newValue: PraxisListConfig | ListAuthoringDocument): void;
|
|
1182
|
+
onJsonValidationChange(result: JsonValidationResult): void;
|
|
1183
|
+
onJsonEditorEvent(event: JsonEditorEvent): void;
|
|
1184
|
+
buildJsonAuthoringDocument(): ListAuthoringDocument;
|
|
1185
|
+
private applyIncomingDocument;
|
|
1186
|
+
private buildCurrentDocument;
|
|
1187
|
+
private snapshotCurrentDocument;
|
|
1188
|
+
private syncSortStateFromWorking;
|
|
1189
|
+
private resetVisualMappingState;
|
|
362
1190
|
private setupSchemaWatcher;
|
|
363
1191
|
onResourcePathChange(value: string): void;
|
|
364
|
-
applySkinPreset(preset:
|
|
1192
|
+
applySkinPreset(preset: SkinPreset): void;
|
|
1193
|
+
applyLayoutPreset(preset: 'tiles-modern'): void;
|
|
365
1194
|
previewData: {
|
|
366
1195
|
title: string;
|
|
367
1196
|
subtitle: string;
|
|
@@ -369,25 +1198,122 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
|
|
|
369
1198
|
salary: number;
|
|
370
1199
|
hireDate: string;
|
|
371
1200
|
rating: number;
|
|
1201
|
+
name: string;
|
|
1202
|
+
status: string;
|
|
1203
|
+
price: number;
|
|
1204
|
+
imageUrl: string;
|
|
372
1205
|
}[];
|
|
373
1206
|
skinPreviewTheme: 'light' | 'dark' | 'grid';
|
|
1207
|
+
readonly metaTypeConfigs: Array<{
|
|
1208
|
+
type: 'text' | 'chip' | 'rating' | 'currency' | 'date' | 'icon' | 'image' | 'html';
|
|
1209
|
+
label: string;
|
|
1210
|
+
icon: string;
|
|
1211
|
+
props?: string[];
|
|
1212
|
+
}>;
|
|
1213
|
+
readonly primaryTypeConfigs: {
|
|
1214
|
+
type: "text" | "chip" | "rating" | "currency" | "date" | "icon" | "image" | "html";
|
|
1215
|
+
label: string;
|
|
1216
|
+
icon: string;
|
|
1217
|
+
props?: string[];
|
|
1218
|
+
}[];
|
|
1219
|
+
readonly secondaryTypeConfigs: {
|
|
1220
|
+
type: "text" | "chip" | "rating" | "currency" | "date" | "icon" | "image" | "html";
|
|
1221
|
+
label: string;
|
|
1222
|
+
icon: string;
|
|
1223
|
+
props?: string[];
|
|
1224
|
+
}[];
|
|
1225
|
+
readonly leadingTypeConfigs: {
|
|
1226
|
+
type: "text" | "chip" | "rating" | "currency" | "date" | "icon" | "image" | "html";
|
|
1227
|
+
label: string;
|
|
1228
|
+
icon: string;
|
|
1229
|
+
props?: string[];
|
|
1230
|
+
}[];
|
|
1231
|
+
readonly trailingTypeConfigs: {
|
|
1232
|
+
type: "text" | "chip" | "rating" | "currency" | "date" | "icon" | "image" | "html";
|
|
1233
|
+
label: string;
|
|
1234
|
+
icon: string;
|
|
1235
|
+
props?: string[];
|
|
1236
|
+
}[];
|
|
1237
|
+
readonly sectionHeaderTypeConfigs: {
|
|
1238
|
+
type: "text" | "chip" | "rating" | "currency" | "date" | "icon" | "image" | "html";
|
|
1239
|
+
label: string;
|
|
1240
|
+
icon: string;
|
|
1241
|
+
props?: string[];
|
|
1242
|
+
}[];
|
|
1243
|
+
readonly emptyStateTypeConfigs: {
|
|
1244
|
+
type: "text" | "chip" | "rating" | "currency" | "date" | "icon" | "image" | "html";
|
|
1245
|
+
label: string;
|
|
1246
|
+
icon: string;
|
|
1247
|
+
props?: string[];
|
|
1248
|
+
}[];
|
|
1249
|
+
readonly paletteOptions: Array<{
|
|
1250
|
+
value?: string;
|
|
1251
|
+
label: string;
|
|
1252
|
+
}>;
|
|
1253
|
+
isThemeColor(value?: string): boolean;
|
|
1254
|
+
isM3Color(value?: string): boolean;
|
|
1255
|
+
isCustomColor(value?: string): boolean;
|
|
1256
|
+
iconStyle(color?: string): string;
|
|
1257
|
+
buttonStyle(color?: string, variant?: 'stroked' | 'raised' | 'flat'): string;
|
|
1258
|
+
colorDotBackground(value?: string): string;
|
|
1259
|
+
enableCustomColor(obj: any, prop: string, fallback?: string): void;
|
|
1260
|
+
enableCustomActionColor(action: any, fallback?: string): void;
|
|
374
1261
|
addAction(): void;
|
|
375
1262
|
removeAction(idx: number): void;
|
|
376
1263
|
onActionsChanged(): void;
|
|
1264
|
+
ensureConfirmation(action: any): void;
|
|
1265
|
+
setConfirmationField(action: any, field: 'title' | 'message', value: string): void;
|
|
1266
|
+
applyConfirmationPreset(action: any, type?: 'danger' | 'warning' | 'info' | ''): void;
|
|
1267
|
+
isGlobalPayloadInvalid(payload: any): boolean;
|
|
1268
|
+
applyGlobalPayloadExample(action: any): void;
|
|
1269
|
+
globalPayloadExampleHint(action: any): string;
|
|
1270
|
+
globalPayloadSchemaTooltip(action: any): string;
|
|
1271
|
+
onGlobalActionSelected(id?: string): void;
|
|
1272
|
+
private addGlobalActionFromCatalog;
|
|
1273
|
+
metaTypeConfig(type?: string): {
|
|
1274
|
+
type: "text" | "chip" | "rating" | "currency" | "date" | "icon" | "image" | "html";
|
|
1275
|
+
label: string;
|
|
1276
|
+
icon: string;
|
|
1277
|
+
props?: string[];
|
|
1278
|
+
} | undefined;
|
|
1279
|
+
metaSupports(prop: string): boolean;
|
|
377
1280
|
ngDoCheck(): void;
|
|
378
1281
|
reset(): void;
|
|
379
1282
|
onLayoutChanged(): void;
|
|
380
1283
|
onSelectionChanged(): void;
|
|
1284
|
+
onSkinGradientChanged(prop: 'from' | 'to' | 'angle', value: string | number): void;
|
|
1285
|
+
onSkinTypeChanged(type: SkinType): void;
|
|
381
1286
|
onSkinChanged(): void;
|
|
1287
|
+
private ensureSkinGradient;
|
|
1288
|
+
onQueryChanged(value: string): void;
|
|
382
1289
|
onPageSizeChange(value: any): void;
|
|
1290
|
+
onUiChanged(): void;
|
|
1291
|
+
onSkeletonChanged(value: any): void;
|
|
1292
|
+
addUiSortRow(): void;
|
|
1293
|
+
removeUiSortRow(i: number): void;
|
|
1294
|
+
onUiSortRowsChanged(): void;
|
|
1295
|
+
isUiSortRowDuplicate(index: number): boolean;
|
|
1296
|
+
isIconColorDuplicate(index: number): boolean;
|
|
1297
|
+
private hydrateUiEditorFromConfig;
|
|
383
1298
|
private loadFieldsIfNeeded;
|
|
384
1299
|
updateSortConfig(): void;
|
|
385
1300
|
applyTemplate(): void;
|
|
1301
|
+
private composeWorkingFromVisualState;
|
|
386
1302
|
private ensureMappingApplied;
|
|
387
1303
|
onMappingChanged(): void;
|
|
388
1304
|
addFeature(): void;
|
|
389
1305
|
removeFeature(idx: number): void;
|
|
390
1306
|
onFeaturesChanged(): void;
|
|
1307
|
+
addIconColorEntry(): void;
|
|
1308
|
+
removeIconColorEntry(i: number): void;
|
|
1309
|
+
onIconColorMapChanged(): void;
|
|
1310
|
+
addChipColorEntry(): void;
|
|
1311
|
+
removeChipColorEntry(i: number): void;
|
|
1312
|
+
onChipColorMapChanged(): void;
|
|
1313
|
+
addChipLabelEntry(): void;
|
|
1314
|
+
removeChipLabelEntry(i: number): void;
|
|
1315
|
+
onChipLabelMapChanged(): void;
|
|
1316
|
+
setPipe(target: any, spec: string): void;
|
|
391
1317
|
insertFeatureToken(index: number, inputEl: HTMLInputElement | HTMLTextAreaElement, field: string): void;
|
|
392
1318
|
insertLiteralAt(index: number, inputEl: HTMLInputElement | HTMLTextAreaElement, text: string): void;
|
|
393
1319
|
wrapSelectionAt(index: number, inputEl: HTMLInputElement | HTMLTextAreaElement, left: string, right: string): void;
|
|
@@ -395,15 +1321,41 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
|
|
|
395
1321
|
private updateFeatureExpr;
|
|
396
1322
|
private hydrateMappingFromTemplating;
|
|
397
1323
|
markDirty(): void;
|
|
1324
|
+
private getMappingSnapshot;
|
|
1325
|
+
private updateMappingDirty;
|
|
1326
|
+
private resolveGlobalActionCatalog;
|
|
398
1327
|
verify(): void;
|
|
399
1328
|
inferFromFields(): void;
|
|
400
1329
|
generateFeaturesFromMetaComposition(): void;
|
|
401
1330
|
metaComposePreview(): string;
|
|
1331
|
+
private splitTopLevelPipe;
|
|
1332
|
+
private validateImageUrl;
|
|
1333
|
+
isImageUrlInvalid(url?: string): boolean;
|
|
1334
|
+
isImageUrlRequiredInvalid(url?: string): boolean;
|
|
1335
|
+
isRatingSizeInvalid(value?: number): boolean;
|
|
1336
|
+
isRatingMaxInvalid(value?: number): boolean;
|
|
402
1337
|
private suggestIcon;
|
|
403
|
-
|
|
1338
|
+
getTypeIcon(type: string): string;
|
|
1339
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PraxisListConfigEditor, [{ optional: true; }]>;
|
|
404
1340
|
static ɵcmp: i0.ɵɵComponentDeclaration<PraxisListConfigEditor, "praxis-list-config-editor", never, { "config": { "alias": "config"; "required": false; }; "listId": { "alias": "listId"; "required": false; }; }, {}, never, never, true, never>;
|
|
405
1341
|
}
|
|
406
1342
|
|
|
1343
|
+
declare function createListAuthoringDocument(source: {
|
|
1344
|
+
config?: unknown;
|
|
1345
|
+
}): ListAuthoringDocument;
|
|
1346
|
+
declare function parseLegacyOrListDocument(raw: unknown): ListAuthoringDocument;
|
|
1347
|
+
declare function normalizeListAuthoringDocument(doc: ListAuthoringDocument): ListAuthoringDocument;
|
|
1348
|
+
declare function projectListAuthoringDocument(doc: ListAuthoringDocument, context?: ListProjectionContext): ListAuthoringDocument;
|
|
1349
|
+
declare function inferListAuthoringDocument(doc: ListAuthoringDocument, context?: ListProjectionContext): ListAuthoringDocument;
|
|
1350
|
+
declare function normalizeListConfig(config: PraxisListConfig | undefined): PraxisListConfig;
|
|
1351
|
+
declare function normalizeListActionPayloads(actions: PraxisListConfig['actions']): PraxisListConfig['actions'];
|
|
1352
|
+
declare function validateListAuthoringDocument(doc: ListAuthoringDocument, context?: ListValidationContext): EditorDiagnostic[];
|
|
1353
|
+
declare function toCanonicalListConfig(doc: ListAuthoringDocument, context?: ListProjectionContext): PraxisListConfig;
|
|
1354
|
+
declare function buildListApplyPlan(doc: ListAuthoringDocument, runtime?: ListRuntimeContext, options?: {
|
|
1355
|
+
saveConfig?: boolean;
|
|
1356
|
+
}): ListApplyPlan;
|
|
1357
|
+
declare function serializeListAuthoringDocument(doc: ListAuthoringDocument): unknown;
|
|
1358
|
+
|
|
407
1359
|
/**
|
|
408
1360
|
* Infer templating slots (primary/secondary/trailing) from field names.
|
|
409
1361
|
* - Does not override existing primary if already defined.
|
|
@@ -413,7 +1365,8 @@ declare function inferTemplatingFromSchema(cfg: PraxisListConfig, fieldNames: st
|
|
|
413
1365
|
|
|
414
1366
|
declare class ListSkinService {
|
|
415
1367
|
toHostClasses(config?: PraxisListConfig): string[];
|
|
416
|
-
|
|
1368
|
+
toCssVars(config?: PraxisListConfig): Record<string, string>;
|
|
1369
|
+
toInlineStyle(config?: PraxisListConfig, rootSelector?: string, includeVars?: boolean): string;
|
|
417
1370
|
static ɵfac: i0.ɵɵFactoryDeclaration<ListSkinService, never>;
|
|
418
1371
|
static ɵprov: i0.ɵɵInjectableDeclaration<ListSkinService>;
|
|
419
1372
|
}
|
|
@@ -447,5 +1400,381 @@ declare function adaptSelection(config: PraxisListConfig | undefined, items: any
|
|
|
447
1400
|
declare const PRAXIS_LIST_COMPONENT_METADATA: ComponentDocMeta;
|
|
448
1401
|
declare function providePraxisListMetadata(): Provider;
|
|
449
1402
|
|
|
450
|
-
|
|
451
|
-
|
|
1403
|
+
/**
|
|
1404
|
+
* Capabilities catalog for PraxisListConfig.
|
|
1405
|
+
* Uses paths compatible with AiConfigAgentService (patch is merged into config).
|
|
1406
|
+
*/
|
|
1407
|
+
|
|
1408
|
+
declare module '@praxisui/core' {
|
|
1409
|
+
interface AiCapabilityCategoryMap {
|
|
1410
|
+
meta: true;
|
|
1411
|
+
skin: true;
|
|
1412
|
+
selection: true;
|
|
1413
|
+
templating: true;
|
|
1414
|
+
actions: true;
|
|
1415
|
+
ui: true;
|
|
1416
|
+
i18n: true;
|
|
1417
|
+
a11y: true;
|
|
1418
|
+
}
|
|
1419
|
+
}
|
|
1420
|
+
type CapabilityCategory = AiCapabilityCategory;
|
|
1421
|
+
type ValueKind = AiValueKind;
|
|
1422
|
+
interface Capability extends AiCapability {
|
|
1423
|
+
category: CapabilityCategory;
|
|
1424
|
+
}
|
|
1425
|
+
interface CapabilityCatalog extends AiCapabilityCatalog {
|
|
1426
|
+
capabilities: Capability[];
|
|
1427
|
+
}
|
|
1428
|
+
declare const LIST_AI_CAPABILITIES: CapabilityCatalog;
|
|
1429
|
+
|
|
1430
|
+
type DemoScenario = 'operations' | 'executive-expansion' | 'catalog' | 'empty';
|
|
1431
|
+
type DemoVariant = 'list' | 'cards' | 'tiles';
|
|
1432
|
+
type DemoDensity = 'default' | 'comfortable' | 'compact';
|
|
1433
|
+
type DemoFeaturesMode = 'icons+labels' | 'icons-only' | 'labels-only';
|
|
1434
|
+
type DemoSelectionMode = 'none' | 'single' | 'multiple';
|
|
1435
|
+
type DemoSkin = 'elevated' | 'outline' | 'flat' | 'neumorphism' | 'pill-soft' | 'glass' | 'gradient-tile' | 'custom';
|
|
1436
|
+
type CodeTab = 'template' | 'ts' | 'config' | 'remote';
|
|
1437
|
+
interface ScenarioOption {
|
|
1438
|
+
id: DemoScenario;
|
|
1439
|
+
label: string;
|
|
1440
|
+
helper: string;
|
|
1441
|
+
}
|
|
1442
|
+
interface VariantOption {
|
|
1443
|
+
id: DemoVariant;
|
|
1444
|
+
label: string;
|
|
1445
|
+
}
|
|
1446
|
+
interface DensityOption {
|
|
1447
|
+
id: DemoDensity;
|
|
1448
|
+
label: string;
|
|
1449
|
+
}
|
|
1450
|
+
interface FeaturesModeOption {
|
|
1451
|
+
id: DemoFeaturesMode;
|
|
1452
|
+
label: string;
|
|
1453
|
+
}
|
|
1454
|
+
interface SelectionModeOption {
|
|
1455
|
+
id: DemoSelectionMode;
|
|
1456
|
+
label: string;
|
|
1457
|
+
}
|
|
1458
|
+
interface SkinOption {
|
|
1459
|
+
id: DemoSkin;
|
|
1460
|
+
label: string;
|
|
1461
|
+
}
|
|
1462
|
+
interface CodeTabOption {
|
|
1463
|
+
id: CodeTab;
|
|
1464
|
+
label: string;
|
|
1465
|
+
}
|
|
1466
|
+
interface CoverageTopic {
|
|
1467
|
+
title: string;
|
|
1468
|
+
details: string;
|
|
1469
|
+
}
|
|
1470
|
+
interface EventLogEntry {
|
|
1471
|
+
id: number;
|
|
1472
|
+
message: string;
|
|
1473
|
+
}
|
|
1474
|
+
interface DemoItem {
|
|
1475
|
+
id: number;
|
|
1476
|
+
title: string;
|
|
1477
|
+
subtitle: string;
|
|
1478
|
+
department: string;
|
|
1479
|
+
status: string;
|
|
1480
|
+
statusIcon: string;
|
|
1481
|
+
priority: string;
|
|
1482
|
+
budget: number;
|
|
1483
|
+
updatedAt: string;
|
|
1484
|
+
rating: number;
|
|
1485
|
+
owner: string;
|
|
1486
|
+
city: string;
|
|
1487
|
+
trend: string;
|
|
1488
|
+
cover: string;
|
|
1489
|
+
accountCode?: string;
|
|
1490
|
+
balanceDisplay?: string;
|
|
1491
|
+
limitDisplay?: string;
|
|
1492
|
+
usageLabel?: string;
|
|
1493
|
+
usagePercent?: number;
|
|
1494
|
+
riskDisplay?: string;
|
|
1495
|
+
riskLabel?: string;
|
|
1496
|
+
segmentVariant?: 'enterprise' | 'corporate' | 'middle';
|
|
1497
|
+
segmentLabel?: string;
|
|
1498
|
+
accountType?: string;
|
|
1499
|
+
since?: number;
|
|
1500
|
+
alertsData?: ExecutiveAlert[];
|
|
1501
|
+
ownerName?: string;
|
|
1502
|
+
executiveMarkerIcon?: string;
|
|
1503
|
+
riskIcon?: string;
|
|
1504
|
+
alerts?: Array<{
|
|
1505
|
+
title: string;
|
|
1506
|
+
value: string;
|
|
1507
|
+
}>;
|
|
1508
|
+
products?: string[];
|
|
1509
|
+
events?: Array<{
|
|
1510
|
+
title: string;
|
|
1511
|
+
meta: string;
|
|
1512
|
+
description: string;
|
|
1513
|
+
}>;
|
|
1514
|
+
}
|
|
1515
|
+
declare class PraxisListDocPageComponent {
|
|
1516
|
+
readonly form: FormGroup<{
|
|
1517
|
+
selectedItems: FormControl<unknown>;
|
|
1518
|
+
}>;
|
|
1519
|
+
readonly scenario: i0.WritableSignal<DemoScenario>;
|
|
1520
|
+
readonly variant: i0.WritableSignal<DemoVariant>;
|
|
1521
|
+
readonly density: i0.WritableSignal<DemoDensity>;
|
|
1522
|
+
readonly lines: i0.WritableSignal<1 | 2 | 3>;
|
|
1523
|
+
readonly skin: i0.WritableSignal<DemoSkin>;
|
|
1524
|
+
readonly featuresMode: i0.WritableSignal<DemoFeaturesMode>;
|
|
1525
|
+
readonly selectionMode: i0.WritableSignal<DemoSelectionMode>;
|
|
1526
|
+
readonly customizationEnabled: i0.WritableSignal<boolean>;
|
|
1527
|
+
readonly activeTab: i0.WritableSignal<CodeTab>;
|
|
1528
|
+
readonly eventLog: i0.WritableSignal<EventLogEntry[]>;
|
|
1529
|
+
private nextLogId;
|
|
1530
|
+
readonly scenarioOptions: ReadonlyArray<ScenarioOption>;
|
|
1531
|
+
readonly variantOptions: ReadonlyArray<VariantOption>;
|
|
1532
|
+
readonly densityOptions: ReadonlyArray<DensityOption>;
|
|
1533
|
+
readonly featuresModeOptions: ReadonlyArray<FeaturesModeOption>;
|
|
1534
|
+
readonly selectionOptions: ReadonlyArray<SelectionModeOption>;
|
|
1535
|
+
readonly skinOptions: ReadonlyArray<SkinOption>;
|
|
1536
|
+
readonly codeTabs: ReadonlyArray<CodeTabOption>;
|
|
1537
|
+
readonly featureCoverage: ReadonlyArray<CoverageTopic>;
|
|
1538
|
+
readonly liveItems: i0.Signal<DemoItem[]>;
|
|
1539
|
+
readonly activeScenarioMeta: i0.Signal<ScenarioOption | null>;
|
|
1540
|
+
readonly liveConfig: i0.Signal<PraxisListConfig>;
|
|
1541
|
+
readonly skinPreviewItems: DemoItem[];
|
|
1542
|
+
readonly skinPreviewConfigs: i0.Signal<{
|
|
1543
|
+
type: DemoSkin;
|
|
1544
|
+
config: {
|
|
1545
|
+
layout: {
|
|
1546
|
+
variant: "cards";
|
|
1547
|
+
lines: 2;
|
|
1548
|
+
density: "compact";
|
|
1549
|
+
model: "hotel";
|
|
1550
|
+
groupBy: undefined;
|
|
1551
|
+
itemSpacing?: "none" | "tight" | "default" | "relaxed";
|
|
1552
|
+
dividers?: "none" | "between" | "all";
|
|
1553
|
+
stickySectionHeader?: boolean;
|
|
1554
|
+
virtualScroll?: boolean;
|
|
1555
|
+
pageSize?: number;
|
|
1556
|
+
rowLayout?: {
|
|
1557
|
+
type?: "grid" | "flex";
|
|
1558
|
+
columns?: Array<{
|
|
1559
|
+
slot: ListRowLayoutSlot;
|
|
1560
|
+
width?: string;
|
|
1561
|
+
minWidth?: string;
|
|
1562
|
+
maxWidth?: string;
|
|
1563
|
+
align?: "start" | "center" | "end";
|
|
1564
|
+
justify?: "start" | "center" | "end" | "stretch";
|
|
1565
|
+
class?: string;
|
|
1566
|
+
style?: string;
|
|
1567
|
+
}>;
|
|
1568
|
+
gap?: string;
|
|
1569
|
+
align?: "start" | "center" | "end" | "stretch";
|
|
1570
|
+
itemAlignY?: "start" | "center" | "end" | "stretch";
|
|
1571
|
+
class?: string;
|
|
1572
|
+
style?: string;
|
|
1573
|
+
};
|
|
1574
|
+
};
|
|
1575
|
+
selection: {
|
|
1576
|
+
mode: "none";
|
|
1577
|
+
};
|
|
1578
|
+
dataSource: {
|
|
1579
|
+
data: DemoItem[];
|
|
1580
|
+
};
|
|
1581
|
+
skin: {
|
|
1582
|
+
type?: "pill-soft" | "gradient-tile" | "glass" | "elevated" | "outline" | "flat" | "neumorphism" | "custom";
|
|
1583
|
+
gradient?: {
|
|
1584
|
+
from: string;
|
|
1585
|
+
to: string;
|
|
1586
|
+
angle?: number;
|
|
1587
|
+
};
|
|
1588
|
+
radius?: string;
|
|
1589
|
+
shadow?: string;
|
|
1590
|
+
border?: string;
|
|
1591
|
+
backdropBlur?: string;
|
|
1592
|
+
class?: string;
|
|
1593
|
+
inlineStyle?: string;
|
|
1594
|
+
} | undefined;
|
|
1595
|
+
id?: string;
|
|
1596
|
+
interaction?: {
|
|
1597
|
+
expandable?: boolean;
|
|
1598
|
+
expandTrigger?: "row" | "icon" | "row+icon";
|
|
1599
|
+
expandMode?: "single" | "multiple";
|
|
1600
|
+
expandPlacement?: "expand" | "trailing";
|
|
1601
|
+
};
|
|
1602
|
+
templating?: {
|
|
1603
|
+
leading?: TemplateDef;
|
|
1604
|
+
primary?: TemplateDef;
|
|
1605
|
+
secondary?: TemplateDef;
|
|
1606
|
+
meta?: TemplateDef;
|
|
1607
|
+
trailing?: TemplateDef;
|
|
1608
|
+
identity?: TemplateDef;
|
|
1609
|
+
balance?: TemplateDef;
|
|
1610
|
+
limit?: TemplateDef;
|
|
1611
|
+
risk?: TemplateDef;
|
|
1612
|
+
alerts?: TemplateDef;
|
|
1613
|
+
owner?: TemplateDef;
|
|
1614
|
+
metaPlacement?: "side" | "line";
|
|
1615
|
+
metaPrefixIcon?: string;
|
|
1616
|
+
statusPosition?: "inline" | "top-right";
|
|
1617
|
+
chipColorMap?: Record<string, string>;
|
|
1618
|
+
chipLabelMap?: Record<string, string>;
|
|
1619
|
+
iconColorMap?: Record<string, string>;
|
|
1620
|
+
features?: TemplatingFeatureDef[];
|
|
1621
|
+
featuresVisible?: boolean;
|
|
1622
|
+
featuresMode?: "icons+labels" | "icons-only" | "labels-only";
|
|
1623
|
+
sectionHeader?: TemplateDef;
|
|
1624
|
+
emptyState?: TemplateDef;
|
|
1625
|
+
skeleton?: {
|
|
1626
|
+
count?: number;
|
|
1627
|
+
};
|
|
1628
|
+
};
|
|
1629
|
+
rules?: {
|
|
1630
|
+
itemStyles?: Array<{
|
|
1631
|
+
id: string;
|
|
1632
|
+
condition?: string;
|
|
1633
|
+
class?: string;
|
|
1634
|
+
style?: string;
|
|
1635
|
+
border?: string;
|
|
1636
|
+
background?: string;
|
|
1637
|
+
}>;
|
|
1638
|
+
slotOverrides?: Array<{
|
|
1639
|
+
id: string;
|
|
1640
|
+
slot: ListTemplatingSlot;
|
|
1641
|
+
condition?: string;
|
|
1642
|
+
template?: TemplateDef;
|
|
1643
|
+
class?: string;
|
|
1644
|
+
style?: string;
|
|
1645
|
+
hide?: boolean;
|
|
1646
|
+
}>;
|
|
1647
|
+
};
|
|
1648
|
+
expansion?: {
|
|
1649
|
+
sections?: ListExpansionSectionDef[];
|
|
1650
|
+
dataSource?: {
|
|
1651
|
+
mode?: "inline" | "resource" | "resourcePath";
|
|
1652
|
+
resource?: {
|
|
1653
|
+
kind: string;
|
|
1654
|
+
id: string;
|
|
1655
|
+
version: string;
|
|
1656
|
+
};
|
|
1657
|
+
resourcePath?: {
|
|
1658
|
+
path: string;
|
|
1659
|
+
method?: "GET" | "POST";
|
|
1660
|
+
paramsMap?: Record<string, string>;
|
|
1661
|
+
};
|
|
1662
|
+
resourceAllowList?: string[];
|
|
1663
|
+
fallbackMode?: "none" | "inline" | "resource";
|
|
1664
|
+
cache?: {
|
|
1665
|
+
enabled?: boolean;
|
|
1666
|
+
};
|
|
1667
|
+
cancelOnCollapse?: boolean;
|
|
1668
|
+
};
|
|
1669
|
+
schemaContract?: {
|
|
1670
|
+
kind: "praxis.detail.schema";
|
|
1671
|
+
version: string;
|
|
1672
|
+
allowedNodes?: Array<"info-list" | "chip-list" | "timeline" | "key-value" | "metadata" | "component">;
|
|
1673
|
+
maxSections?: number;
|
|
1674
|
+
maxItemsPerSection?: number;
|
|
1675
|
+
requireSectionIds?: boolean;
|
|
1676
|
+
};
|
|
1677
|
+
rendering?: {
|
|
1678
|
+
shell?: "attached" | "detached" | "modal";
|
|
1679
|
+
columns?: 1 | 2 | 3;
|
|
1680
|
+
gap?: string;
|
|
1681
|
+
padding?: string;
|
|
1682
|
+
class?: string;
|
|
1683
|
+
style?: string;
|
|
1684
|
+
loadingTemplate?: TemplateDef;
|
|
1685
|
+
errorTemplate?: TemplateDef;
|
|
1686
|
+
};
|
|
1687
|
+
};
|
|
1688
|
+
actions?: Array<{
|
|
1689
|
+
id: string;
|
|
1690
|
+
icon?: string;
|
|
1691
|
+
label?: string;
|
|
1692
|
+
color?: string;
|
|
1693
|
+
kind?: "icon" | "button";
|
|
1694
|
+
buttonVariant?: "stroked" | "raised" | "flat";
|
|
1695
|
+
showIf?: string;
|
|
1696
|
+
emitPayload?: "item" | "id" | "value";
|
|
1697
|
+
command?: string;
|
|
1698
|
+
globalPayload?: any;
|
|
1699
|
+
emitLocal?: boolean;
|
|
1700
|
+
showLoading?: boolean;
|
|
1701
|
+
placement?: "actions" | "trailing";
|
|
1702
|
+
confirmation?: {
|
|
1703
|
+
title?: string;
|
|
1704
|
+
message?: string;
|
|
1705
|
+
type?: "danger" | "warning" | "info";
|
|
1706
|
+
};
|
|
1707
|
+
}>;
|
|
1708
|
+
i18n?: Record<string, string>;
|
|
1709
|
+
ui?: {
|
|
1710
|
+
showSearch?: boolean;
|
|
1711
|
+
searchField?: string;
|
|
1712
|
+
searchPlaceholder?: string;
|
|
1713
|
+
showSort?: boolean;
|
|
1714
|
+
sortOptions?: Array<string | {
|
|
1715
|
+
label: string;
|
|
1716
|
+
value: string;
|
|
1717
|
+
}>;
|
|
1718
|
+
showRange?: boolean;
|
|
1719
|
+
};
|
|
1720
|
+
a11y?: {
|
|
1721
|
+
ariaLabel?: string;
|
|
1722
|
+
ariaLabelledBy?: string;
|
|
1723
|
+
highContrast?: boolean;
|
|
1724
|
+
reduceMotion?: boolean;
|
|
1725
|
+
};
|
|
1726
|
+
events?: {
|
|
1727
|
+
itemClick?: string;
|
|
1728
|
+
actionClick?: string;
|
|
1729
|
+
selectionChange?: string;
|
|
1730
|
+
loaded?: string;
|
|
1731
|
+
};
|
|
1732
|
+
};
|
|
1733
|
+
}[]>;
|
|
1734
|
+
readonly configPreview: i0.Signal<string>;
|
|
1735
|
+
readonly selectedSnippet: i0.Signal<string>;
|
|
1736
|
+
readonly templateSnippet = "<praxis-list-doc-page></praxis-list-doc-page>";
|
|
1737
|
+
readonly tsSnippet = "import { Component } from '@angular/core';\nimport { PraxisListDocPageComponent } from '@praxisui/list';\n\n@Component({\n selector: 'app-list-doc',\n standalone: true,\n imports: [PraxisListDocPageComponent],\n template: '<praxis-list-doc-page />',\n})\nexport class ListDocHostComponent {}";
|
|
1738
|
+
readonly remoteSnippet = "const config = {\n id: 'employees-remote',\n dataSource: {\n resourcePath: 'employees',\n query: { active: true },\n sort: ['updatedAt,desc']\n },\n layout: { variant: 'list', pageSize: 12, lines: 2 },\n templating: {\n primary: { type: 'text', expr: '${item.name}' },\n secondary: { type: 'text', expr: '${item.role}' },\n meta: { type: 'date', expr: '${item.updatedAt}|pt-BR:short' },\n trailing: { type: 'chip', expr: '${item.status}' }\n },\n ui: {\n showSearch: true,\n searchField: 'name',\n showSort: true,\n sortOptions: [{ label: 'Nome A-Z', value: 'name,asc' }]\n }\n} as const;";
|
|
1739
|
+
setScenario(next: DemoScenario): void;
|
|
1740
|
+
setVariant(next: DemoVariant): void;
|
|
1741
|
+
setDensity(next: DemoDensity): void;
|
|
1742
|
+
setLines(next: 1 | 2 | 3): void;
|
|
1743
|
+
setSkin(next: DemoSkin): void;
|
|
1744
|
+
setFeaturesMode(next: DemoFeaturesMode): void;
|
|
1745
|
+
setSelectionMode(next: DemoSelectionMode): void;
|
|
1746
|
+
setCodeTab(next: CodeTab): void;
|
|
1747
|
+
setCustomizationMode(enabled: boolean): void;
|
|
1748
|
+
clearLog(): void;
|
|
1749
|
+
handleItemClick(event: ListItemEvent): void;
|
|
1750
|
+
handleActionClick(event: ListActionEvent): void;
|
|
1751
|
+
handleSelectionChange(event: ListSelectionEvent): void;
|
|
1752
|
+
isExecutiveExpansionScenario(): boolean;
|
|
1753
|
+
private buildSkinConfig;
|
|
1754
|
+
private buildTemplatingConfig;
|
|
1755
|
+
private pushLog;
|
|
1756
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<PraxisListDocPageComponent, never>;
|
|
1757
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PraxisListDocPageComponent, "praxis-list-doc-page", never, {}, {}, never, never, true, never>;
|
|
1758
|
+
}
|
|
1759
|
+
|
|
1760
|
+
declare const PRAXIS_LIST_EN_US: {
|
|
1761
|
+
readonly configEdit: "Edit configuration";
|
|
1762
|
+
readonly expandDetails: "Expand details";
|
|
1763
|
+
readonly collapseDetails: "Collapse details";
|
|
1764
|
+
readonly itemDetails: "Item details";
|
|
1765
|
+
readonly emptyState: "No items available";
|
|
1766
|
+
};
|
|
1767
|
+
|
|
1768
|
+
declare const PRAXIS_LIST_I18N_NAMESPACE = "praxis-list";
|
|
1769
|
+
declare function providePraxisListI18n(): i0.Provider;
|
|
1770
|
+
|
|
1771
|
+
declare const PRAXIS_LIST_PT_BR: {
|
|
1772
|
+
readonly configEdit: "Editar configurações";
|
|
1773
|
+
readonly expandDetails: "Expandir detalhes";
|
|
1774
|
+
readonly collapseDetails: "Recolher detalhes";
|
|
1775
|
+
readonly itemDetails: "Detalhes do item";
|
|
1776
|
+
readonly emptyState: "Nenhum item disponível";
|
|
1777
|
+
};
|
|
1778
|
+
|
|
1779
|
+
export { ExecutiveAlertsComponent, ExecutiveBadgeComponent, ExecutiveOwnerComponent, LIST_AI_CAPABILITIES, ListDataService, ListSkinService, PRAXIS_LIST_COMPONENT_METADATA, PRAXIS_LIST_EN_US, PRAXIS_LIST_I18N_NAMESPACE, PRAXIS_LIST_PT_BR, PraxisList, PraxisListConfigEditor, PraxisListDocPageComponent, PraxisListJsonConfigEditorComponent, adaptSelection, buildListApplyPlan, createListAuthoringDocument, evalExpr, evaluateTemplate, inferListAuthoringDocument, inferTemplatingFromSchema, normalizeListActionPayloads, normalizeListAuthoringDocument, normalizeListConfig, parseLegacyOrListDocument, projectListAuthoringDocument, providePraxisListI18n, providePraxisListMetadata, serializeListAuthoringDocument, toCanonicalListConfig, validateListAuthoringDocument };
|
|
1780
|
+
export type { Capability, CapabilityCatalog, CapabilityCategory, EditorDiagnostic, EditorDocument, ExecutiveAlert, JsonEditorEvent, JsonValidationResult, ListActionEvent, ListApplyPlan, ListAuthoringDocument, ListExpansionSectionDef, ListExpansionSectionType, ListFeatureDef, ListItemEvent, ListProjectionContext, ListRowLayoutSlot, ListRuntimeContext, ListSchemaInferencePlan, ListSection, ListSelectionEvent, ListTemplatingSlot, ListValidationContext, PraxisListConfig, TemplateDef, TemplateFeatureDef, TemplateType, TemplatingFeatureDef, ValueKind };
|