@praxisui/list 1.0.0-beta.64 → 1.0.0-beta.65

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/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as rxjs from 'rxjs';
2
2
  import { BehaviorSubject, Observable } from 'rxjs';
3
- import * as _angular_core from '@angular/core';
3
+ import * as i0 from '@angular/core';
4
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';
@@ -8,10 +8,10 @@ import { BaseAiAdapter, Capability as Capability$1, PatchResult } from '@praxisu
8
8
  import { SettingsValueProvider } from '@praxisui/settings-panel';
9
9
  import { GlobalActionCatalogEntry, ComponentDocMeta, AiCapabilityCategory, AiValueKind, AiCapability, AiCapabilityCatalog } from '@praxisui/core';
10
10
 
11
- 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';
12
12
  interface TemplateDef {
13
13
  type: TemplateType;
14
- expr: string;
14
+ expr?: string;
15
15
  class?: string;
16
16
  style?: string;
17
17
  color?: string;
@@ -22,6 +22,54 @@ interface TemplateDef {
22
22
  size?: number;
23
23
  color?: string;
24
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
+ };
25
73
  };
26
74
  imageAlt?: string;
27
75
  badge?: {
@@ -36,6 +84,38 @@ interface ListFeatureDef {
36
84
  class?: string;
37
85
  style?: string;
38
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';
39
119
  interface PraxisListConfig {
40
120
  id?: string;
41
121
  dataSource?: {
@@ -47,6 +127,7 @@ interface PraxisListConfig {
47
127
  layout?: {
48
128
  variant?: 'list' | 'cards' | 'tiles';
49
129
  density?: 'default' | 'comfortable' | 'compact';
130
+ itemSpacing?: 'none' | 'tight' | 'default' | 'relaxed';
50
131
  lines?: 1 | 2 | 3;
51
132
  dividers?: 'none' | 'between' | 'all';
52
133
  model?: 'standard' | 'media' | 'hotel';
@@ -54,6 +135,24 @@ interface PraxisListConfig {
54
135
  stickySectionHeader?: boolean;
55
136
  virtualScroll?: boolean;
56
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
+ };
57
156
  };
58
157
  skin?: {
59
158
  type?: 'pill-soft' | 'gradient-tile' | 'glass' | 'elevated' | 'outline' | 'flat' | 'neumorphism' | 'custom';
@@ -76,19 +175,31 @@ interface PraxisListConfig {
76
175
  compareBy?: string;
77
176
  return?: 'value' | 'item' | 'id';
78
177
  };
178
+ interaction?: {
179
+ expandable?: boolean;
180
+ expandTrigger?: 'row' | 'icon' | 'row+icon';
181
+ expandMode?: 'single' | 'multiple';
182
+ expandPlacement?: 'expand' | 'trailing';
183
+ };
79
184
  templating?: {
80
185
  leading?: TemplateDef;
81
186
  primary?: TemplateDef;
82
187
  secondary?: TemplateDef;
83
188
  meta?: TemplateDef;
84
189
  trailing?: TemplateDef;
190
+ identity?: TemplateDef;
191
+ balance?: TemplateDef;
192
+ limit?: TemplateDef;
193
+ risk?: TemplateDef;
194
+ alerts?: TemplateDef;
195
+ owner?: TemplateDef;
85
196
  metaPlacement?: 'side' | 'line';
86
197
  metaPrefixIcon?: string;
87
198
  statusPosition?: 'inline' | 'top-right';
88
199
  chipColorMap?: Record<string, string>;
89
200
  chipLabelMap?: Record<string, string>;
90
201
  iconColorMap?: Record<string, string>;
91
- features?: ListFeatureDef[];
202
+ features?: TemplatingFeatureDef[];
92
203
  featuresVisible?: boolean;
93
204
  featuresMode?: 'icons+labels' | 'icons-only' | 'labels-only';
94
205
  sectionHeader?: TemplateDef;
@@ -97,6 +208,65 @@ interface PraxisListConfig {
97
208
  count?: number;
98
209
  };
99
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
+ };
100
270
  actions?: Array<{
101
271
  id: string;
102
272
  icon?: string;
@@ -110,6 +280,7 @@ interface PraxisListConfig {
110
280
  globalPayload?: any;
111
281
  emitLocal?: boolean;
112
282
  showLoading?: boolean;
283
+ placement?: 'actions' | 'trailing';
113
284
  confirmation?: {
114
285
  title?: string;
115
286
  message?: string;
@@ -197,8 +368,8 @@ declare class ListDataService<T = any> {
197
368
  private safeSerialize;
198
369
  private warnFilterFallbackOnce;
199
370
  private buildLogOptions;
200
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ListDataService<any>, never>;
201
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<ListDataService<any>>;
371
+ static ɵfac: i0.ɵɵFactoryDeclaration<ListDataService<any>, never>;
372
+ static ɵprov: i0.ɵɵInjectableDeclaration<ListDataService<any>>;
202
373
  }
203
374
 
204
375
  declare class ListAiAdapter extends BaseAiAdapter<PraxisListConfig> {
@@ -217,6 +388,16 @@ declare class ListAiAdapter extends BaseAiAdapter<PraxisListConfig> {
217
388
  private cloneConfig;
218
389
  }
219
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
+ }
220
401
  declare class PraxisList implements OnInit, OnChanges, OnDestroy {
221
402
  private static nextSkinScopeId;
222
403
  config: PraxisListConfig;
@@ -256,6 +437,7 @@ declare class PraxisList implements OnInit, OnChanges, OnDestroy {
256
437
  private readonly cdr;
257
438
  private readonly componentKeys;
258
439
  private readonly logger;
440
+ private readonly i18n;
259
441
  private readonly logContext;
260
442
  private readonly route;
261
443
  private readonly globalActions;
@@ -267,8 +449,11 @@ declare class PraxisList implements OnInit, OnChanges, OnDestroy {
267
449
  private externalConfigRevision;
268
450
  private nextActionItemObjectId;
269
451
  private readonly actionItemObjectIds;
452
+ private nextExpansionItemObjectId;
453
+ private readonly expansionItemObjectIds;
270
454
  private readonly destroy$;
271
455
  actionLoadingState: Record<string, boolean>;
456
+ private expandedItemKeys;
272
457
  ngOnInit(): void;
273
458
  ngOnChanges(changes: SimpleChanges): void;
274
459
  ngOnDestroy(): void;
@@ -282,20 +467,69 @@ declare class PraxisList implements OnInit, OnChanges, OnDestroy {
282
467
  isTilesVariant(): boolean;
283
468
  isSelectionEnabled(): boolean;
284
469
  private setupSelectionBinding;
285
- leading: (item: any) => any;
286
- primary: (item: any) => any;
287
- secondary: (item: any) => any;
288
- meta: (item: any) => any;
289
- trailing: (item: any) => any;
290
- sectionHeaderTemplate: (key: string) => any;
291
- emptyStateTemplate: () => any;
292
- featureLabel(item: any, expr: string): string;
470
+ leading: (item: any) => Record<string, any> | null;
471
+ primary: (item: any) => Record<string, any> | null;
472
+ secondary: (item: any) => Record<string, any> | null;
473
+ meta: (item: any) => Record<string, any> | null;
474
+ trailing: (item: any) => Record<string, any> | null;
475
+ identity: (item: any) => Record<string, any> | null;
476
+ balance: (item: any) => Record<string, any> | null;
477
+ limit: (item: any) => Record<string, any> | null;
478
+ risk: (item: any) => Record<string, any> | null;
479
+ alerts: (item: any) => Record<string, any> | null;
480
+ owner: (item: any) => Record<string, any> | null;
481
+ sectionHeaderTemplate: (key: string) => Record<string, any>;
482
+ emptyStateTemplate: () => Record<string, any>;
483
+ itemRuleClass(item: any): string | undefined;
484
+ itemRuleStyle(item: any): string | undefined;
485
+ rowLayoutItemStyle(item: any): string | undefined;
486
+ rowLayoutItemClass(item: any): string | undefined;
487
+ hasRowLayoutGrid(): boolean;
488
+ rowLayoutColumns(): ListRowLayoutColumnViewModel[];
489
+ rowLayoutTrackColumn(index: number, column: ListRowLayoutColumnViewModel): string;
490
+ rowLayoutContentStyle(): string | undefined;
491
+ rowLayoutContentClass(): string | undefined;
492
+ rowLayoutColumnClass(column: ListRowLayoutColumnViewModel): string | undefined;
493
+ rowLayoutColumnStyle(column: ListRowLayoutColumnViewModel): string | undefined;
494
+ rowLayoutSlot(item: any, slot: string): Record<string, any> | null;
495
+ rowLayoutHasSlot(slot: ListRowLayoutSlot): boolean;
496
+ rowLayoutImageAlt(slot: string): string;
497
+ rowLayoutAlignItems(): 'start' | 'center' | 'end' | 'stretch';
498
+ private rowLayoutTemplateColumns;
499
+ private rowLayoutColumnWidth;
500
+ private rowLayoutTextAlign;
501
+ private cssVar;
502
+ private sanitizeCssToken;
503
+ featureLabel(item: any, expr?: string): string;
504
+ plainText(value: string | null | undefined): string | null;
505
+ itemAriaLabel(item: any): string | null;
506
+ private accessibleItemLabel;
507
+ private slotAriaLabel;
508
+ private nodeAriaLabel;
509
+ featureLabelLines(item: any, expr?: string): string[];
510
+ featureSemanticClass(item: any, expr?: string, featureClass?: string): string | null;
511
+ featureProgressPercent(item: any, expr?: string, featureClass?: string): number | null;
512
+ private metricText;
513
+ private metricToken;
514
+ private buildMetricView;
515
+ private buildComposeView;
516
+ private buildMetricProgress;
517
+ private metricLayout;
518
+ private metricAlign;
519
+ private metricIconPosition;
520
+ private metricToneClass;
521
+ private metricToneStyle;
522
+ private metricColorStyle;
523
+ private metricCssVar;
524
+ private resolveMetricColor;
525
+ private joinStyles;
526
+ private joinClasses;
293
527
  featuresVisible(): boolean;
294
528
  featuresMode(): 'icons+labels' | 'icons-only' | 'labels-only';
295
529
  hasSkeleton(): boolean;
296
530
  skeletonCount(): number;
297
531
  skeletonItems(): any[];
298
- visibleActions(item: any): {
532
+ visibleActions(item: any, placement?: 'actions' | 'trailing'): {
299
533
  id: string;
300
534
  icon?: string;
301
535
  label?: string;
@@ -308,6 +542,7 @@ declare class PraxisList implements OnInit, OnChanges, OnDestroy {
308
542
  globalPayload?: any;
309
543
  emitLocal?: boolean;
310
544
  showLoading?: boolean;
545
+ placement?: "actions" | "trailing";
311
546
  confirmation?: {
312
547
  title?: string;
313
548
  message?: string;
@@ -315,7 +550,14 @@ declare class PraxisList implements OnInit, OnChanges, OnDestroy {
315
550
  };
316
551
  }[];
317
552
  onItemClick(item: any, index: number, section?: string): void;
553
+ onRowActivate(item: any, index: number, section?: string): void;
554
+ onRowSpaceActivate(event: Event, clickable: boolean, item: any, index: number, section?: string): void;
555
+ onExpandToggle(event: Event, item: any, index: number): void;
318
556
  onActionKeydown(ev: Event): void;
557
+ configEditorLabel(): string;
558
+ expandToggleAriaLabel(item: any, index: number): string;
559
+ expansionRegionAriaLabel(item: any): string;
560
+ emptyStateLabel(): string;
319
561
  onActionClick(ev: MouseEvent, actionId: string, item: any, index: number): Promise<void>;
320
562
  private isGlobalCommand;
321
563
  private resolveActionPayload;
@@ -349,6 +591,33 @@ declare class PraxisList implements OnInit, OnChanges, OnDestroy {
349
591
  private readonly crud;
350
592
  private executeSchemaInferenceForPlan;
351
593
  private evalSlot;
594
+ private resolveSlotTemplate;
595
+ private evaluateTemplateNode;
596
+ private buildUnsupportedComposeNode;
597
+ private buildRuntimeComponentView;
598
+ private resolveComponentInputs;
599
+ private resolveComponentInputValue;
600
+ private resolveComponentStringInput;
601
+ isExpandable(): boolean;
602
+ expandableByRow(): boolean;
603
+ expansionOwnedByRow(): boolean;
604
+ expansionOwnedByIcon(): boolean;
605
+ showExpandIcon(placement?: 'expand' | 'trailing'): boolean;
606
+ expandPlacement(): 'expand' | 'trailing';
607
+ private actionPlacement;
608
+ isExpanded(item: any, index: number): boolean;
609
+ expandRegionId(item: any, index: number): string;
610
+ expansionSections(): ListExpansionSectionDef[];
611
+ expansionSectionItems(item: any, section: ListExpansionSectionDef, index?: number): any[];
612
+ expansionSectionHasContent(item: any, section: ListExpansionSectionDef, index?: number): boolean;
613
+ expansionItemLabel(value: any): string;
614
+ expansionInfoTitle(value: any): string;
615
+ expansionInfoValue(value: any): string;
616
+ expansionTimelineTitle(value: any): string;
617
+ expansionTimelineMeta(value: any): string;
618
+ expansionTimelineDescription(value: any): string;
619
+ expansionKeyValueKey(value: any): string;
620
+ expansionKeyValueValue(value: any): string;
352
621
  private splitPipe;
353
622
  private splitPipeName;
354
623
  private evalString;
@@ -369,15 +638,225 @@ declare class PraxisList implements OnInit, OnChanges, OnDestroy {
369
638
  trackByItem: (i: number, it: any) => any;
370
639
  isActionLoading(actionId: string, item: any, index: number): boolean;
371
640
  private evaluateActionVisibility;
372
- private resolveShowIfOperand;
641
+ private evaluateRuntimeCondition;
642
+ private normalizeConditionExpression;
643
+ private resolveConditionOperand;
373
644
  private looseEquals;
374
- private warnInvalidShowIfOnce;
645
+ private warnInvalidConditionOnce;
646
+ private cloneTemplateDef;
647
+ private mergeTemplateDefs;
648
+ private mergePlainObjects;
375
649
  private buildActionLoadingKey;
376
650
  private ensureActionItemObjectId;
377
651
  private warnGlobalCommandUnavailableOnce;
378
652
  private buildLogOptions;
379
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<PraxisList, never>;
380
- static ɵcmp: _angular_core.ɵɵ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>;
653
+ private toggleExpanded;
654
+ private syncExpansionState;
655
+ private itemExpansionKey;
656
+ private t;
657
+ private ensureExpansionItemObjectId;
658
+ private sanitizeDomId;
659
+ private evaluateExpansionExpr;
660
+ private normalizeExpansionItems;
661
+ private normalizeKeyValueItems;
662
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisList, never>;
663
+ 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>;
664
+ }
665
+
666
+ /**
667
+ * Executive badge component for displaying account segment classification.
668
+ *
669
+ * This component replaces legacy HTML string-based badges with a type-safe,
670
+ * encapsulated solution that bypasses Angular's DomSanitizer restrictions.
671
+ *
672
+ * @remarks
673
+ * - Fully WCAG 2.1 AA compliant with proper ARIA attributes
674
+ * - Uses OnPush change detection for optimal performance
675
+ * - Supports three segment variants: enterprise, corporate, middle
676
+ * - Colors follow corporate branding guidelines
677
+ * - Input validation prevents invalid runtime values
678
+ *
679
+ * @example Basic usage
680
+ * ```html
681
+ * <praxis-executive-badge variant="enterprise">
682
+ * Enterprise
683
+ * </praxis-executive-badge>
684
+ * ```
685
+ *
686
+ * @example Dynamic variant with custom label
687
+ * ```html
688
+ * <praxis-executive-badge
689
+ * [variant]="account.segmentType"
690
+ * [ariaLabel]="'Account segment: ' + account.segmentLabel">
691
+ * {{ account.segmentLabel }}
692
+ * </praxis-executive-badge>
693
+ * ```
694
+ *
695
+ * @see {@link ExecutiveAlertsComponent} for related alert component
696
+ * @see WCAG 2.1 Level AA - Guideline 4.1.2 (Name, Role, Value)
697
+ *
698
+ * @public
699
+ */
700
+ declare class ExecutiveBadgeComponent {
701
+ /**
702
+ * Custom ARIA label for screen readers.
703
+ * If not provided, defaults to "Segment badge: {variant}"
704
+ */
705
+ ariaLabel?: string;
706
+ private _variant;
707
+ /**
708
+ * Badge variant type with runtime validation.
709
+ * Valid values: 'enterprise', 'corporate', 'middle'
710
+ * Invalid values will default to 'enterprise' with console warning.
711
+ */
712
+ set variant(value: 'enterprise' | 'corporate' | 'middle');
713
+ get variant(): 'enterprise' | 'corporate' | 'middle';
714
+ get variantClass(): string;
715
+ /**
716
+ * Computed ARIA label for accessibility.
717
+ * Uses custom ariaLabel if provided, otherwise generates default.
718
+ */
719
+ get computedAriaLabel(): string;
720
+ static ɵfac: i0.ɵɵFactoryDeclaration<ExecutiveBadgeComponent, never>;
721
+ static ɵcmp: i0.ɵɵComponentDeclaration<ExecutiveBadgeComponent, "praxis-executive-badge", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; }, {}, never, ["*"], true, never>;
722
+ }
723
+
724
+ /**
725
+ * Alert data interface for executive alerts component.
726
+ *
727
+ * @property type - Alert severity level (warning or critical)
728
+ * @property count - Number of alerts of this type (must be >= 0)
729
+ */
730
+ interface ExecutiveAlert {
731
+ type: 'warning' | 'critical';
732
+ count: number;
733
+ }
734
+ /**
735
+ * Executive alerts component for displaying warning and critical account flags.
736
+ *
737
+ * This component replaces legacy HTML string-based alerts with a fully
738
+ * accessible, WCAG 2.1 AA compliant solution.
739
+ *
740
+ * @remarks
741
+ * **Accessibility Features:**
742
+ * - WCAG 1.3.1: Semantic structure with proper roles
743
+ * - WCAG 1.4.1: Does not rely on color alone (uses icons + text)
744
+ * - WCAG 4.1.3: Status messages properly announced to screen readers
745
+ * - aria-live regions for dynamic updates
746
+ * - Screen-reader only text for full context
747
+ *
748
+ * **Performance:**
749
+ * - OnPush change detection strategy
750
+ * - Input validation prevents invalid data
751
+ * - Optimized trackBy function
752
+ *
753
+ * @example Basic usage
754
+ * ```html
755
+ * <praxis-executive-alerts [alerts]="[
756
+ * { type: 'warning', count: 1 },
757
+ * { type: 'critical', count: 2 }
758
+ * ]"></praxis-executive-alerts>
759
+ * ```
760
+ *
761
+ * @example Empty state (renders nothing)
762
+ * ```html
763
+ * <praxis-executive-alerts [alerts]="[]"></praxis-executive-alerts>
764
+ * ```
765
+ *
766
+ * @see WCAG 2.1 Level AA - Guidelines 1.3.1, 1.4.1, 4.1.3
767
+ * @public
768
+ */
769
+ declare class ExecutiveAlertsComponent implements OnChanges {
770
+ alerts: ExecutiveAlert[];
771
+ /**
772
+ * Validated and filtered alerts.
773
+ * Only valid alerts (correct type and count >= 0) are included.
774
+ */
775
+ validAlerts: ExecutiveAlert[];
776
+ ngOnChanges(changes: SimpleChanges): void;
777
+ /**
778
+ * Validates alerts array and filters out invalid entries.
779
+ * Logs warnings for invalid data in development mode.
780
+ */
781
+ private validateAndFilterAlerts;
782
+ /**
783
+ * TrackBy function for optimal rendering performance.
784
+ * Uses combination of type and count for unique identification.
785
+ */
786
+ trackByAlert(index: number, alert: ExecutiveAlert): string;
787
+ /**
788
+ * Generates ARIA label for alert badge.
789
+ * Provides concise description for screen readers.
790
+ */
791
+ getAlertAriaLabel(alert: ExecutiveAlert): string;
792
+ /**
793
+ * Generates detailed description for screen readers.
794
+ * Provides full context including severity and actionability.
795
+ */
796
+ getAlertDescription(alert: ExecutiveAlert): string;
797
+ static ɵfac: i0.ɵɵFactoryDeclaration<ExecutiveAlertsComponent, never>;
798
+ static ɵcmp: i0.ɵɵComponentDeclaration<ExecutiveAlertsComponent, "praxis-executive-alerts", never, { "alerts": { "alias": "alerts"; "required": false; }; }, {}, never, never, true, never>;
799
+ }
800
+
801
+ /**
802
+ * Executive owner component displaying account owner with accessible avatar.
803
+ *
804
+ * This component replaces legacy HTML string-based owner displays with a
805
+ * fully accessible, WCAG 2.1 AA compliant solution featuring an inline SVG avatar.
806
+ *
807
+ * @remarks
808
+ * **Accessibility Features:**
809
+ * - WCAG 1.1.1: Non-text content has text alternative (SVG with role and aria-label)
810
+ * - SVG includes <title> element for tooltips
811
+ * - Handles empty/undefined names gracefully
812
+ * - Screen reader announces owner information clearly
813
+ *
814
+ * **Performance:**
815
+ * - OnPush change detection strategy
816
+ * - Input validation for name
817
+ * - Lightweight inline SVG (no external dependencies)
818
+ *
819
+ * @example Basic usage
820
+ * ```html
821
+ * <praxis-executive-owner name="Ana Carolina"></praxis-executive-owner>
822
+ * ```
823
+ *
824
+ * @example With empty name (shows fallback)
825
+ * ```html
826
+ * <praxis-executive-owner name=""></praxis-executive-owner>
827
+ * <!-- Displays: "Unassigned" -->
828
+ * ```
829
+ *
830
+ * @see WCAG 2.1 Level AA - Guideline 1.1.1 (Non-text Content)
831
+ * @public
832
+ */
833
+ declare class ExecutiveOwnerComponent {
834
+ private _name;
835
+ /**
836
+ * Owner name with automatic validation and sanitization.
837
+ * - Empty strings default to "Unassigned"
838
+ * - Trimmed and limited to 50 characters
839
+ * - Null/undefined converted to empty string
840
+ */
841
+ set name(value: string);
842
+ get name(): string;
843
+ /**
844
+ * Display name with fallback for empty values.
845
+ * Returns "Unassigned" if name is empty.
846
+ */
847
+ get displayName(): string;
848
+ /**
849
+ * ARIA label for SVG avatar.
850
+ * Provides context for screen readers.
851
+ */
852
+ get avatarAriaLabel(): string;
853
+ /**
854
+ * SVG title element content for tooltip.
855
+ * Shows on hover in most browsers.
856
+ */
857
+ get avatarTitle(): string;
858
+ static ɵfac: i0.ɵɵFactoryDeclaration<ExecutiveOwnerComponent, never>;
859
+ static ɵcmp: i0.ɵɵComponentDeclaration<ExecutiveOwnerComponent, "praxis-executive-owner", never, { "name": { "alias": "name"; "required": false; }; }, {}, never, never, true, never>;
381
860
  }
382
861
 
383
862
  interface EditorDocument<TConfig, TBindings = unknown> {
@@ -472,8 +951,8 @@ declare class PraxisListJsonConfigEditorComponent implements OnInit, OnChanges,
472
951
  private updateValidationState;
473
952
  private syncJsonText;
474
953
  private hasUnsavedLocalChanges;
475
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<PraxisListJsonConfigEditorComponent, never>;
476
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<PraxisListJsonConfigEditorComponent, "praxis-list-json-config-editor", never, { "document": { "alias": "document"; "required": false; }; }, { "documentChange": "documentChange"; "validationChange": "validationChange"; "editorEvent": "editorEvent"; }, never, never, true, never>;
954
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisListJsonConfigEditorComponent, never>;
955
+ 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>;
477
956
  }
478
957
 
479
958
  type NormalizedListConfig = Omit<PraxisListConfig, 'dataSource' | 'layout' | 'selection' | 'skin' | 'i18n'> & {
@@ -486,6 +965,7 @@ type NormalizedListConfig = Omit<PraxisListConfig, 'dataSource' | 'layout' | 'se
486
965
  layout: {
487
966
  variant: 'list' | 'cards' | 'tiles';
488
967
  density?: 'default' | 'comfortable' | 'compact';
968
+ itemSpacing?: 'none' | 'tight' | 'default' | 'relaxed';
489
969
  lines: 1 | 2 | 3;
490
970
  dividers?: 'none' | 'between' | 'all';
491
971
  model?: 'standard' | 'media' | 'hotel';
@@ -853,8 +1333,8 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
853
1333
  isRatingMaxInvalid(value?: number): boolean;
854
1334
  private suggestIcon;
855
1335
  getTypeIcon(type: string): string;
856
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<PraxisListConfigEditor, [{ optional: true; }]>;
857
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<PraxisListConfigEditor, "praxis-list-config-editor", never, { "config": { "alias": "config"; "required": false; }; "listId": { "alias": "listId"; "required": false; }; }, {}, never, never, true, never>;
1336
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisListConfigEditor, [{ optional: true; }]>;
1337
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisListConfigEditor, "praxis-list-config-editor", never, { "config": { "alias": "config"; "required": false; }; "listId": { "alias": "listId"; "required": false; }; }, {}, never, never, true, never>;
858
1338
  }
859
1339
 
860
1340
  declare function createListAuthoringDocument(source: {
@@ -884,8 +1364,8 @@ declare class ListSkinService {
884
1364
  toHostClasses(config?: PraxisListConfig): string[];
885
1365
  toCssVars(config?: PraxisListConfig): Record<string, string>;
886
1366
  toInlineStyle(config?: PraxisListConfig, rootSelector?: string, includeVars?: boolean): string;
887
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<ListSkinService, never>;
888
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<ListSkinService>;
1367
+ static ɵfac: i0.ɵɵFactoryDeclaration<ListSkinService, never>;
1368
+ static ɵprov: i0.ɵɵInjectableDeclaration<ListSkinService>;
889
1369
  }
890
1370
 
891
1371
  /**
@@ -944,7 +1424,7 @@ interface CapabilityCatalog extends AiCapabilityCatalog {
944
1424
  }
945
1425
  declare const LIST_AI_CAPABILITIES: CapabilityCatalog;
946
1426
 
947
- type DemoScenario = 'operations' | 'catalog' | 'empty';
1427
+ type DemoScenario = 'operations' | 'executive-expansion' | 'catalog' | 'empty';
948
1428
  type DemoVariant = 'list' | 'cards' | 'tiles';
949
1429
  type DemoDensity = 'default' | 'comfortable' | 'compact';
950
1430
  type DemoFeaturesMode = 'icons+labels' | 'icons-only' | 'labels-only';
@@ -1003,21 +1483,46 @@ interface DemoItem {
1003
1483
  city: string;
1004
1484
  trend: string;
1005
1485
  cover: string;
1486
+ accountCode?: string;
1487
+ balanceDisplay?: string;
1488
+ limitDisplay?: string;
1489
+ usageLabel?: string;
1490
+ usagePercent?: number;
1491
+ riskDisplay?: string;
1492
+ riskLabel?: string;
1493
+ segmentVariant?: 'enterprise' | 'corporate' | 'middle';
1494
+ segmentLabel?: string;
1495
+ accountType?: string;
1496
+ since?: number;
1497
+ alertsData?: ExecutiveAlert[];
1498
+ ownerName?: string;
1499
+ executiveMarkerIcon?: string;
1500
+ riskIcon?: string;
1501
+ alerts?: Array<{
1502
+ title: string;
1503
+ value: string;
1504
+ }>;
1505
+ products?: string[];
1506
+ events?: Array<{
1507
+ title: string;
1508
+ meta: string;
1509
+ description: string;
1510
+ }>;
1006
1511
  }
1007
1512
  declare class PraxisListDocPageComponent {
1008
1513
  readonly form: FormGroup<{
1009
1514
  selectedItems: FormControl<unknown>;
1010
1515
  }>;
1011
- readonly scenario: _angular_core.WritableSignal<DemoScenario>;
1012
- readonly variant: _angular_core.WritableSignal<DemoVariant>;
1013
- readonly density: _angular_core.WritableSignal<DemoDensity>;
1014
- readonly lines: _angular_core.WritableSignal<1 | 2 | 3>;
1015
- readonly skin: _angular_core.WritableSignal<DemoSkin>;
1016
- readonly featuresMode: _angular_core.WritableSignal<DemoFeaturesMode>;
1017
- readonly selectionMode: _angular_core.WritableSignal<DemoSelectionMode>;
1018
- readonly customizationEnabled: _angular_core.WritableSignal<boolean>;
1019
- readonly activeTab: _angular_core.WritableSignal<CodeTab>;
1020
- readonly eventLog: _angular_core.WritableSignal<EventLogEntry[]>;
1516
+ readonly scenario: i0.WritableSignal<DemoScenario>;
1517
+ readonly variant: i0.WritableSignal<DemoVariant>;
1518
+ readonly density: i0.WritableSignal<DemoDensity>;
1519
+ readonly lines: i0.WritableSignal<1 | 2 | 3>;
1520
+ readonly skin: i0.WritableSignal<DemoSkin>;
1521
+ readonly featuresMode: i0.WritableSignal<DemoFeaturesMode>;
1522
+ readonly selectionMode: i0.WritableSignal<DemoSelectionMode>;
1523
+ readonly customizationEnabled: i0.WritableSignal<boolean>;
1524
+ readonly activeTab: i0.WritableSignal<CodeTab>;
1525
+ readonly eventLog: i0.WritableSignal<EventLogEntry[]>;
1021
1526
  private nextLogId;
1022
1527
  readonly scenarioOptions: ReadonlyArray<ScenarioOption>;
1023
1528
  readonly variantOptions: ReadonlyArray<VariantOption>;
@@ -1027,11 +1532,11 @@ declare class PraxisListDocPageComponent {
1027
1532
  readonly skinOptions: ReadonlyArray<SkinOption>;
1028
1533
  readonly codeTabs: ReadonlyArray<CodeTabOption>;
1029
1534
  readonly featureCoverage: ReadonlyArray<CoverageTopic>;
1030
- readonly liveItems: _angular_core.Signal<DemoItem[]>;
1031
- readonly activeScenarioMeta: _angular_core.Signal<ScenarioOption | null>;
1032
- readonly liveConfig: _angular_core.Signal<PraxisListConfig>;
1535
+ readonly liveItems: i0.Signal<DemoItem[]>;
1536
+ readonly activeScenarioMeta: i0.Signal<ScenarioOption | null>;
1537
+ readonly liveConfig: i0.Signal<PraxisListConfig>;
1033
1538
  readonly skinPreviewItems: DemoItem[];
1034
- readonly skinPreviewConfigs: _angular_core.Signal<{
1539
+ readonly skinPreviewConfigs: i0.Signal<{
1035
1540
  type: DemoSkin;
1036
1541
  config: {
1037
1542
  layout: {
@@ -1040,10 +1545,29 @@ declare class PraxisListDocPageComponent {
1040
1545
  density: "compact";
1041
1546
  model: "hotel";
1042
1547
  groupBy: undefined;
1548
+ itemSpacing?: "none" | "tight" | "default" | "relaxed";
1043
1549
  dividers?: "none" | "between" | "all";
1044
1550
  stickySectionHeader?: boolean;
1045
1551
  virtualScroll?: boolean;
1046
1552
  pageSize?: number;
1553
+ rowLayout?: {
1554
+ type?: "grid" | "flex";
1555
+ columns?: Array<{
1556
+ slot: ListRowLayoutSlot;
1557
+ width?: string;
1558
+ minWidth?: string;
1559
+ maxWidth?: string;
1560
+ align?: "start" | "center" | "end";
1561
+ justify?: "start" | "center" | "end" | "stretch";
1562
+ class?: string;
1563
+ style?: string;
1564
+ }>;
1565
+ gap?: string;
1566
+ align?: "start" | "center" | "end" | "stretch";
1567
+ itemAlignY?: "start" | "center" | "end" | "stretch";
1568
+ class?: string;
1569
+ style?: string;
1570
+ };
1047
1571
  };
1048
1572
  selection: {
1049
1573
  mode: "none";
@@ -1066,19 +1590,31 @@ declare class PraxisListDocPageComponent {
1066
1590
  inlineStyle?: string;
1067
1591
  } | undefined;
1068
1592
  id?: string;
1593
+ interaction?: {
1594
+ expandable?: boolean;
1595
+ expandTrigger?: "row" | "icon" | "row+icon";
1596
+ expandMode?: "single" | "multiple";
1597
+ expandPlacement?: "expand" | "trailing";
1598
+ };
1069
1599
  templating?: {
1070
1600
  leading?: TemplateDef;
1071
1601
  primary?: TemplateDef;
1072
1602
  secondary?: TemplateDef;
1073
1603
  meta?: TemplateDef;
1074
1604
  trailing?: TemplateDef;
1605
+ identity?: TemplateDef;
1606
+ balance?: TemplateDef;
1607
+ limit?: TemplateDef;
1608
+ risk?: TemplateDef;
1609
+ alerts?: TemplateDef;
1610
+ owner?: TemplateDef;
1075
1611
  metaPlacement?: "side" | "line";
1076
1612
  metaPrefixIcon?: string;
1077
1613
  statusPosition?: "inline" | "top-right";
1078
1614
  chipColorMap?: Record<string, string>;
1079
1615
  chipLabelMap?: Record<string, string>;
1080
1616
  iconColorMap?: Record<string, string>;
1081
- features?: ListFeatureDef[];
1617
+ features?: TemplatingFeatureDef[];
1082
1618
  featuresVisible?: boolean;
1083
1619
  featuresMode?: "icons+labels" | "icons-only" | "labels-only";
1084
1620
  sectionHeader?: TemplateDef;
@@ -1087,6 +1623,65 @@ declare class PraxisListDocPageComponent {
1087
1623
  count?: number;
1088
1624
  };
1089
1625
  };
1626
+ rules?: {
1627
+ itemStyles?: Array<{
1628
+ id: string;
1629
+ condition?: string;
1630
+ class?: string;
1631
+ style?: string;
1632
+ border?: string;
1633
+ background?: string;
1634
+ }>;
1635
+ slotOverrides?: Array<{
1636
+ id: string;
1637
+ slot: ListTemplatingSlot;
1638
+ condition?: string;
1639
+ template?: TemplateDef;
1640
+ class?: string;
1641
+ style?: string;
1642
+ hide?: boolean;
1643
+ }>;
1644
+ };
1645
+ expansion?: {
1646
+ sections?: ListExpansionSectionDef[];
1647
+ dataSource?: {
1648
+ mode?: "inline" | "resource" | "resourcePath";
1649
+ resource?: {
1650
+ kind: string;
1651
+ id: string;
1652
+ version: string;
1653
+ };
1654
+ resourcePath?: {
1655
+ path: string;
1656
+ method?: "GET" | "POST";
1657
+ paramsMap?: Record<string, string>;
1658
+ };
1659
+ resourceAllowList?: string[];
1660
+ fallbackMode?: "none" | "inline" | "resource";
1661
+ cache?: {
1662
+ enabled?: boolean;
1663
+ };
1664
+ cancelOnCollapse?: boolean;
1665
+ };
1666
+ schemaContract?: {
1667
+ kind: "praxis.detail.schema";
1668
+ version: string;
1669
+ allowedNodes?: Array<"info-list" | "chip-list" | "timeline" | "key-value" | "metadata" | "component">;
1670
+ maxSections?: number;
1671
+ maxItemsPerSection?: number;
1672
+ requireSectionIds?: boolean;
1673
+ };
1674
+ rendering?: {
1675
+ shell?: "attached" | "detached" | "modal";
1676
+ columns?: 1 | 2 | 3;
1677
+ gap?: string;
1678
+ padding?: string;
1679
+ class?: string;
1680
+ style?: string;
1681
+ loadingTemplate?: TemplateDef;
1682
+ errorTemplate?: TemplateDef;
1683
+ };
1684
+ };
1090
1685
  actions?: Array<{
1091
1686
  id: string;
1092
1687
  icon?: string;
@@ -1100,6 +1695,7 @@ declare class PraxisListDocPageComponent {
1100
1695
  globalPayload?: any;
1101
1696
  emitLocal?: boolean;
1102
1697
  showLoading?: boolean;
1698
+ placement?: "actions" | "trailing";
1103
1699
  confirmation?: {
1104
1700
  title?: string;
1105
1701
  message?: string;
@@ -1132,8 +1728,8 @@ declare class PraxisListDocPageComponent {
1132
1728
  };
1133
1729
  };
1134
1730
  }[]>;
1135
- readonly configPreview: _angular_core.Signal<string>;
1136
- readonly selectedSnippet: _angular_core.Signal<string>;
1731
+ readonly configPreview: i0.Signal<string>;
1732
+ readonly selectedSnippet: i0.Signal<string>;
1137
1733
  readonly templateSnippet = "<praxis-list-doc-page></praxis-list-doc-page>";
1138
1734
  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 {}";
1139
1735
  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;";
@@ -1150,12 +1746,32 @@ declare class PraxisListDocPageComponent {
1150
1746
  handleItemClick(event: ListItemEvent): void;
1151
1747
  handleActionClick(event: ListActionEvent): void;
1152
1748
  handleSelectionChange(event: ListSelectionEvent): void;
1749
+ isExecutiveExpansionScenario(): boolean;
1153
1750
  private buildSkinConfig;
1154
1751
  private buildTemplatingConfig;
1155
1752
  private pushLog;
1156
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<PraxisListDocPageComponent, never>;
1157
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<PraxisListDocPageComponent, "praxis-list-doc-page", never, {}, {}, never, never, true, never>;
1753
+ static ɵfac: i0.ɵɵFactoryDeclaration<PraxisListDocPageComponent, never>;
1754
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisListDocPageComponent, "praxis-list-doc-page", never, {}, {}, never, never, true, never>;
1158
1755
  }
1159
1756
 
1160
- export { LIST_AI_CAPABILITIES, ListDataService, ListSkinService, PRAXIS_LIST_COMPONENT_METADATA, PraxisList, PraxisListConfigEditor, PraxisListDocPageComponent, PraxisListJsonConfigEditorComponent, adaptSelection, buildListApplyPlan, createListAuthoringDocument, evalExpr, evaluateTemplate, inferListAuthoringDocument, inferTemplatingFromSchema, normalizeListActionPayloads, normalizeListAuthoringDocument, normalizeListConfig, parseLegacyOrListDocument, projectListAuthoringDocument, providePraxisListMetadata, serializeListAuthoringDocument, toCanonicalListConfig, validateListAuthoringDocument };
1161
- export type { Capability, CapabilityCatalog, CapabilityCategory, EditorDiagnostic, EditorDocument, JsonEditorEvent, JsonValidationResult, ListActionEvent, ListApplyPlan, ListAuthoringDocument, ListFeatureDef, ListItemEvent, ListProjectionContext, ListRuntimeContext, ListSchemaInferencePlan, ListSection, ListSelectionEvent, ListValidationContext, PraxisListConfig, TemplateDef, TemplateType, ValueKind };
1757
+ declare const PRAXIS_LIST_EN_US: {
1758
+ readonly configEdit: "Edit configuration";
1759
+ readonly expandDetails: "Expand details";
1760
+ readonly collapseDetails: "Collapse details";
1761
+ readonly itemDetails: "Item details";
1762
+ readonly emptyState: "No items available";
1763
+ };
1764
+
1765
+ declare const PRAXIS_LIST_I18N_NAMESPACE = "praxis-list";
1766
+ declare function providePraxisListI18n(): i0.Provider;
1767
+
1768
+ declare const PRAXIS_LIST_PT_BR: {
1769
+ readonly configEdit: "Editar configurações";
1770
+ readonly expandDetails: "Expandir detalhes";
1771
+ readonly collapseDetails: "Recolher detalhes";
1772
+ readonly itemDetails: "Detalhes do item";
1773
+ readonly emptyState: "Nenhum item disponível";
1774
+ };
1775
+
1776
+ 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 };
1777
+ 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 };