@praxisui/list 10.0.0-rc.0 → 10.0.0-rc.10

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/package.json CHANGED
@@ -1,19 +1,20 @@
1
1
  {
2
2
  "name": "@praxisui/list",
3
- "version": "10.0.0-rc.0",
3
+ "version": "10.0.0-rc.10",
4
4
  "description": "List components and helpers for Praxis UI.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0",
7
7
  "@angular/core": "^21.0.0",
8
+ "@angular/cdk": "^21.0.0",
8
9
  "@angular/material": "^21.0.0",
9
- "@praxisui/dynamic-fields": "^10.0.0-rc.0",
10
+ "@praxisui/dynamic-fields": "^10.0.0-rc.10",
10
11
  "rxjs": ">=7 <9",
11
12
  "@angular/forms": "^21.0.0",
12
13
  "@angular/router": "^21.0.0",
13
- "@praxisui/ai": "^10.0.0-rc.0",
14
- "@praxisui/core": "^10.0.0-rc.0",
15
- "@praxisui/rich-content": "^10.0.0-rc.0",
16
- "@praxisui/settings-panel": "^10.0.0-rc.0"
14
+ "@praxisui/ai": "^10.0.0-rc.10",
15
+ "@praxisui/core": "^10.0.0-rc.10",
16
+ "@praxisui/rich-content": "^10.0.0-rc.10",
17
+ "@praxisui/settings-panel": "^10.0.0-rc.10"
17
18
  },
18
19
  "dependencies": {
19
20
  "tslib": "^2.3.0",
@@ -534,18 +534,19 @@ interface PraxisListConfig {
534
534
 
535
535
  #### Layout API
536
536
 
537
- | Caminho | Status | Observacao |
538
- | ---------------------------- | ------------- | ---------------------------------- |
539
- | `layout.variant` | Active | `list/cards/tiles` |
540
- | `layout.density` | Active | classe `density-*` |
541
- | `layout.itemSpacing` | Active | classe `item-spacing-*` |
542
- | `layout.lines` | Active | linhas de texto + classe `lines-*` |
543
- | `layout.dividers` | Active | divisores no modo `list` |
544
- | `layout.model` | Active | classe `model-*` |
545
- | `layout.groupBy` | Active | agrupamento em `sections$` |
546
- | `layout.pageSize` | Active | page size inicial |
547
- | `layout.stickySectionHeader` | Declared-only | sem sticky runtime |
548
- | `layout.virtualScroll` | Declared-only | sem virtual scroll runtime |
537
+ | Caminho | Status | Observacao |
538
+ | ---------------------------- | ------------- | ---------------------------------------------------------- |
539
+ | `layout.variant` | Active | `list/cards/tiles` |
540
+ | `layout.density` | Active | classe `density-*` |
541
+ | `layout.itemSpacing` | Active | classe `item-spacing-*` |
542
+ | `layout.itemAppearance` | Active | `flat/card` (isola itens em cartões sob `variant: 'list'`) |
543
+ | `layout.lines` | Active | linhas de texto + classe `lines-*` |
544
+ | `layout.dividers` | Active | divisores no modo `list` |
545
+ | `layout.model` | Active | classe `model-*` |
546
+ | `layout.groupBy` | Active | agrupamento em `sections$` |
547
+ | `layout.pageSize` | Active | page size inicial |
548
+ | `layout.stickySectionHeader` | Declared-only | sem sticky runtime |
549
+ | `layout.virtualScroll` | Declared-only | sem virtual scroll runtime |
549
550
 
550
551
  #### Skin API
551
552
 
@@ -634,7 +635,7 @@ Slots suportados:
634
635
 
635
636
  Tipos funcionais no runtime:
636
637
 
637
- - `text`, `icon`, `image`, `chip`, `rating`, `currency`, `date`, `html`, `metric`, `compose`, `component`.
638
+ - `text`, `icon`, `image`, `chip`, `rating`, `currency`, `date`, `datetime`, `relative`, `html`, `metric`, `compose`, `component`.
638
639
 
639
640
  Inferencia opcional:
640
641
 
@@ -765,15 +766,21 @@ Semantica de execucao:
765
766
  Suporte principal:
766
767
 
767
768
  - placeholders: `${item.campo}`;
768
- - pipes em placeholder: `bool`, `date`, `map`, `number`;
769
- - pipe top-level `bool` no expr completo.
769
+ - coalescência em placeholders: `${item.displayName ?? item.name ?? item.id}`;
770
+ - pipes em placeholder: `bool`, `date`, `datetime`, `relative`, `map`, `number`, `currency`;
771
+ - pipes top-level pós-expressão: `|bool:True:False`, `|map:k=v`, `|relative:locale`, `|datetime:locale:style`, `|date:locale:style`.
770
772
 
771
773
  Exemplos validos:
772
774
 
773
775
  - `${item.active|bool:Ativo:Inativo}`
774
776
  - `${item.createdAt|date:pt-BR:short}`
777
+ - `${item.occurredAt|datetime:pt-BR:short}`
778
+ - `${item.occurredAt|relative:pt-BR}` (exibe *"há 5 minutos"*)
775
779
  - `${item.status|map:done=Concluido;pending=Pendente}`
776
780
  - `${item.total|number:pt-BR:compact}`
781
+ - `${item.amount|currency:BRL:pt-BR}`
782
+ - `${item.occurredAt}|relative:pt-BR` (pipe top-level)
783
+ - `${item.createdAt}|datetime:pt-BR:short` (pipe top-level)
777
784
 
778
785
  ##### `actions[].showIf`
779
786
 
@@ -958,25 +965,142 @@ Recomendacao corporativa:
958
965
  ### Minimal valid
959
966
 
960
967
  ```json
961
- {}
968
+ {
969
+ "layout": {
970
+ "variant": "list"
971
+ },
972
+ "templating": {
973
+ "primary": {
974
+ "type": "text",
975
+ "expr": "${item.name}"
976
+ }
977
+ }
978
+ }
962
979
  ```
963
980
 
964
981
  ### Typical/common
965
982
 
966
983
  ```json
967
- {}
984
+ {
985
+ "layout": {
986
+ "variant": "list",
987
+ "density": "comfortable",
988
+ "itemSpacing": "default"
989
+ },
990
+ "templating": {
991
+ "leading": {
992
+ "type": "icon",
993
+ "expr": "person"
994
+ },
995
+ "primary": {
996
+ "type": "text",
997
+ "expr": "${item.nomeCompleto}"
998
+ },
999
+ "secondary": {
1000
+ "type": "text",
1001
+ "expr": "${item.cargo} · ${item.departamento}"
1002
+ },
1003
+ "meta": {
1004
+ "type": "date",
1005
+ "expr": "${item.dataAdmissao}"
1006
+ }
1007
+ }
1008
+ }
968
1009
  ```
969
1010
 
970
1011
  ### Advanced
971
1012
 
972
1013
  ```json
973
- {}
1014
+ {
1015
+ "layout": {
1016
+ "variant": "list",
1017
+ "itemAppearance": "card",
1018
+ "itemSpacing": "compact"
1019
+ },
1020
+ "skin": {
1021
+ "type": "glass"
1022
+ },
1023
+ "templating": {
1024
+ "leading": {
1025
+ "type": "icon",
1026
+ "expr": "${item.severidade|map:CRITICA=warning,ALTA=error_outline,MEDIA=info}",
1027
+ "color": "${item.severidade|map:CRITICA=warn,ALTA=warn,MEDIA=primary}"
1028
+ },
1029
+ "primary": {
1030
+ "type": "text",
1031
+ "expr": "${item.titulo}"
1032
+ },
1033
+ "secondary": {
1034
+ "type": "text",
1035
+ "expr": "${item.localizacao} · Protocolo ${item.protocolo}"
1036
+ },
1037
+ "meta": {
1038
+ "type": "relative",
1039
+ "expr": "${item.abertoEm}"
1040
+ },
1041
+ "metaPlacement": "side"
1042
+ },
1043
+ "actions": [
1044
+ {
1045
+ "id": "dispatch",
1046
+ "label": "Despachar",
1047
+ "icon": "send",
1048
+ "kind": "icon"
1049
+ }
1050
+ ]
1051
+ }
974
1052
  ```
975
1053
 
976
1054
  ### Enterprise scenario
977
1055
 
978
1056
  ```json
979
- {}
1057
+ {
1058
+ "dataSource": {
1059
+ "resourcePath": "incidentes",
1060
+ "sort": {
1061
+ "field": "abertoEm",
1062
+ "direction": "desc"
1063
+ }
1064
+ },
1065
+ "layout": {
1066
+ "variant": "list",
1067
+ "itemAppearance": "card",
1068
+ "pageSize": 20
1069
+ },
1070
+ "i18n": {
1071
+ "locale": "pt-BR",
1072
+ "currency": "BRL"
1073
+ },
1074
+ "selection": {
1075
+ "mode": "multiple",
1076
+ "compareBy": "id",
1077
+ "return": "id"
1078
+ },
1079
+ "templating": {
1080
+ "leading": {
1081
+ "type": "chip",
1082
+ "expr": "${item.codigo}",
1083
+ "variant": "outlined"
1084
+ },
1085
+ "primary": {
1086
+ "type": "text",
1087
+ "expr": "${item.nome ?? item.titulo}"
1088
+ },
1089
+ "secondary": {
1090
+ "type": "text",
1091
+ "expr": "${item.resumo}"
1092
+ },
1093
+ "meta": {
1094
+ "type": "datetime",
1095
+ "expr": "${item.dataCriacao}|pt-BR:short"
1096
+ }
1097
+ },
1098
+ "ui": {
1099
+ "showSearch": true,
1100
+ "searchField": "titulo",
1101
+ "showSort": true
1102
+ }
1103
+ }
980
1104
  ```
981
1105
 
982
1106
  ## Known limitations and mismatches
@@ -4,13 +4,12 @@ import * as i0 from '@angular/core';
4
4
  import { OnInit, OnChanges, AfterViewInit, OnDestroy, EventEmitter, SimpleChanges, ChangeDetectorRef, DoCheck, Provider } from '@angular/core';
5
5
  import { MatPaginatorSelectConfig, PageEvent } from '@angular/material/paginator';
6
6
  import { FormGroup, FormControl } from '@angular/forms';
7
- import * as _praxisui_core from '@praxisui/core';
8
7
  import { PraxisExportFormat, PraxisExportScope, PraxisRuntimeConditionalEffectRule, JsonLogicExpression, RichContentDocument, ResourceRecordOpenRef, GlobalActionRef, LocalizationConfig, AiCapability, PraxisDataQueryContext, RichBlockNode, RichBlockHostCapabilities, SurfaceOpenActionEditorComponent, GlobalActionCatalogEntry, SurfaceOpenPayload, SettingsValueProvider as SettingsValueProvider$1, RichPresenterNode, RichComposeNode, ComponentDocMeta, AiCapabilityCategory, AiCapabilityCatalog, AiValueKind, ComponentAuthoringManifest } from '@praxisui/core';
9
8
  import { BaseAiAdapter, AiResponseCompileResult, PatchResult, PraxisAssistantTurnViewState, PraxisAssistantShellLayout, PraxisAssistantShellLabels, PraxisAssistantSessionSnapshot, PraxisAssistantShellQuickReply, PraxisAssistantShellMessage } from '@praxisui/ai';
10
9
  import { SettingsValueProvider } from '@praxisui/settings-panel';
11
10
  import * as _praxisui_list from '@praxisui/list';
12
11
 
13
- type TemplateType = 'text' | 'icon' | 'image' | 'chip' | 'rating' | 'currency' | 'date' | 'html' | 'slot' | 'metric' | 'compose' | 'component';
12
+ type TemplateType = 'text' | 'icon' | 'image' | 'chip' | 'rating' | 'currency' | 'date' | 'datetime' | 'relative' | 'html' | 'slot' | 'metric' | 'compose' | 'component';
14
13
  interface TemplateDef {
15
14
  type: TemplateType;
16
15
  expr?: string;
@@ -147,6 +146,45 @@ interface ListSlotOverrideRule extends Omit<PraxisRuntimeConditionalEffectRule<L
147
146
  condition?: JsonLogicExpression | null;
148
147
  effects?: ListSlotOverrideEffect[];
149
148
  }
149
+ interface PraxisListVirtualScrollConfig {
150
+ enabled: boolean;
151
+ itemSize?: number;
152
+ minBufferPx?: number;
153
+ maxBufferPx?: number;
154
+ viewportHeight?: string;
155
+ }
156
+ interface PraxisListItemAction {
157
+ id: string;
158
+ icon?: string;
159
+ label?: string;
160
+ color?: string;
161
+ tooltip?: string;
162
+ kind?: 'icon' | 'button' | 'menu-item';
163
+ buttonVariant?: 'stroked' | 'raised' | 'flat';
164
+ showIf?: JsonLogicExpression | null;
165
+ visibleWhen?: JsonLogicExpression | null;
166
+ disabledWhen?: JsonLogicExpression | null;
167
+ /**
168
+ * Condição HATEOAS canônica: se especificado, a ação só é exibida
169
+ * se o item possuir o link correspondente em `item._links[hateoasRel]` ou `item.links[hateoasRel]`.
170
+ */
171
+ hateoasRel?: string;
172
+ emitPayload?: 'item' | 'id' | 'value';
173
+ action?: 'surface.open' | string;
174
+ recordOpen?: ResourceRecordOpenRef;
175
+ globalAction?: GlobalActionRef;
176
+ command?: string;
177
+ params?: Record<string, unknown>;
178
+ emitLocal?: boolean;
179
+ showLoading?: boolean;
180
+ placement?: 'actions' | 'trailing' | 'menu';
181
+ confirmation?: {
182
+ title?: string;
183
+ message?: string;
184
+ type?: 'danger' | 'warning' | 'info';
185
+ };
186
+ requiresConfirmation?: boolean;
187
+ }
150
188
  interface PraxisListConfig {
151
189
  id?: string;
152
190
  dataSource?: {
@@ -159,12 +197,13 @@ interface PraxisListConfig {
159
197
  variant?: 'list' | 'cards' | 'tiles';
160
198
  density?: 'default' | 'comfortable' | 'compact';
161
199
  itemSpacing?: 'none' | 'tight' | 'default' | 'relaxed';
200
+ itemAppearance?: 'flat' | 'card' | 'capsule';
162
201
  lines?: 1 | 2 | 3;
163
202
  dividers?: 'none' | 'between' | 'all';
164
203
  model?: 'standard' | 'media' | 'hotel';
165
204
  groupBy?: string;
166
205
  stickySectionHeader?: boolean;
167
- virtualScroll?: boolean;
206
+ virtualScroll?: boolean | PraxisListVirtualScrollConfig;
168
207
  pageSize?: number;
169
208
  rowLayout?: {
170
209
  type?: 'grid' | 'flex';
@@ -284,27 +323,10 @@ interface PraxisListConfig {
284
323
  errorTemplate?: TemplateDef;
285
324
  };
286
325
  };
287
- actions?: Array<{
288
- id: string;
289
- icon?: string;
290
- label?: string;
291
- color?: string;
292
- kind?: 'icon' | 'button';
293
- buttonVariant?: 'stroked' | 'raised' | 'flat';
294
- showIf?: JsonLogicExpression | null;
295
- emitPayload?: 'item' | 'id' | 'value';
296
- action?: 'surface.open';
297
- recordOpen?: ResourceRecordOpenRef;
298
- globalAction?: GlobalActionRef;
299
- emitLocal?: boolean;
300
- showLoading?: boolean;
301
- placement?: 'actions' | 'trailing';
302
- confirmation?: {
303
- title?: string;
304
- message?: string;
305
- type?: 'danger' | 'warning' | 'info';
306
- };
307
- }>;
326
+ /** Ações declarativas de item governadas (compatível com itemActions) */
327
+ actions?: PraxisListItemAction[];
328
+ /** Ações declarativas de item com HATEOAS e despacho canônico */
329
+ itemActions?: PraxisListItemAction[];
308
330
  i18n?: PraxisListI18nConfig;
309
331
  ui?: {
310
332
  showSearch?: boolean;
@@ -488,6 +510,8 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
488
510
  form?: FormGroup | null;
489
511
  set enableCustomization(value: boolean);
490
512
  get enableCustomization(): boolean;
513
+ itemActions?: PraxisListItemAction[];
514
+ virtualScroll?: boolean | PraxisListVirtualScrollConfig;
491
515
  itemClick: EventEmitter<ListItemEvent>;
492
516
  actionClick: EventEmitter<ListActionEvent>;
493
517
  selectionChange: EventEmitter<ListSelectionEvent>;
@@ -669,27 +693,17 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
669
693
  hasSkeleton(): boolean;
670
694
  skeletonCount(): number;
671
695
  skeletonItems(): any[];
672
- visibleActions(item: any, placement?: 'actions' | 'trailing'): {
673
- id: string;
674
- icon?: string;
675
- label?: string;
676
- color?: string;
677
- kind?: "icon" | "button";
678
- buttonVariant?: "stroked" | "raised" | "flat";
679
- showIf?: JsonLogicExpression | null;
680
- emitPayload?: "item" | "id" | "value";
681
- action?: "surface.open";
682
- recordOpen?: ResourceRecordOpenRef;
683
- globalAction?: GlobalActionRef;
684
- emitLocal?: boolean;
685
- showLoading?: boolean;
686
- placement?: "actions" | "trailing";
687
- confirmation?: {
688
- title?: string;
689
- message?: string;
690
- type?: "danger" | "warning" | "info";
691
- };
692
- }[];
696
+ isVirtualScrollEnabled(): boolean;
697
+ virtualScrollItemSize(): number;
698
+ virtualScrollMinBufferPx(): number;
699
+ virtualScrollMaxBufferPx(): number;
700
+ virtualScrollViewportHeight(): string;
701
+ virtualScrollItems(sections: ListSection<any>[] | null | undefined, items: any[] | null | undefined): any[];
702
+ trackByVirtualItem: (index: number, item: any) => any;
703
+ private warnOnIncompatibleVirtualScroll;
704
+ effectiveActions(): PraxisListItemAction[];
705
+ hasHateoasLink(item: any, rel: string): boolean;
706
+ visibleActions(item: any, placement?: 'actions' | 'trailing' | 'menu'): PraxisListItemAction[];
693
707
  onItemClick(item: any, index: number, section?: string): void;
694
708
  onRowActivate(item: any, index: number, section?: string): void;
695
709
  onExpandToggle(event: Event, item: any, index: number): void;
@@ -844,6 +858,7 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
844
858
  private toBoolean;
845
859
  private prettyLabel;
846
860
  private mapDateStyle;
861
+ private mapDateTimeStyle;
847
862
  starIcon(index: number, ratingValue: string | number): string;
848
863
  isThemeColor(color?: string): boolean;
849
864
  chipStyle(color?: string, variant?: 'filled' | 'outlined'): string;
@@ -881,7 +896,7 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
881
896
  private normalizeExpansionItems;
882
897
  private normalizeKeyValueItems;
883
898
  static ɵfac: i0.ɵɵFactoryDeclaration<PraxisList, never>;
884
- static ɵcmp: i0.ɵɵComponentDeclaration<PraxisList, "praxis-list", never, { "config": { "alias": "config"; "required": false; }; "listId": { "alias": "listId"; "required": true; }; "componentInstanceId": { "alias": "componentInstanceId"; "required": false; }; "configPersistenceStrategy": { "alias": "configPersistenceStrategy"; "required": false; }; "queryContext": { "alias": "queryContext"; "required": false; }; "form": { "alias": "form"; "required": false; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; }; }, { "itemClick": "itemClick"; "actionClick": "actionClick"; "selectionChange": "selectionChange"; "exportAction": "exportAction"; "configPatchChange": "configPatchChange"; }, never, never, true, never>;
899
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisList, "praxis-list", never, { "config": { "alias": "config"; "required": false; }; "listId": { "alias": "listId"; "required": true; }; "componentInstanceId": { "alias": "componentInstanceId"; "required": false; }; "configPersistenceStrategy": { "alias": "configPersistenceStrategy"; "required": false; }; "queryContext": { "alias": "queryContext"; "required": false; }; "form": { "alias": "form"; "required": false; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; }; "itemActions": { "alias": "itemActions"; "required": false; }; "virtualScroll": { "alias": "virtualScroll"; "required": false; }; }, { "itemClick": "itemClick"; "actionClick": "actionClick"; "selectionChange": "selectionChange"; "exportAction": "exportAction"; "configPatchChange": "configPatchChange"; }, never, never, true, never>;
885
900
  static ngAcceptInputType_enableCustomization: unknown;
886
901
  }
887
902
 
@@ -1821,6 +1836,9 @@ declare function evaluateTemplate(def: TemplateDef | undefined, item: any, optio
1821
1836
  variant?: 'filled' | 'outlined';
1822
1837
  };
1823
1838
  } | null;
1839
+ declare function safeFormatDate(date: Date, format?: string, locale?: string, style?: string): string;
1840
+ declare function safeFormatDateTime(date: Date, format?: string, locale?: string, style?: string): string;
1841
+ declare function formatRelativeTime(date: Date, locale?: string, baseDate?: Date): string;
1824
1842
 
1825
1843
  type ListRichContentP0Node = RichPresenterNode | RichComposeNode;
1826
1844
  declare function isListTemplateSupportedByRichContentP0(template?: TemplateDef | null): boolean;
@@ -1828,6 +1846,7 @@ declare function mapListTemplateToRichContentP0(template?: TemplateDef | null):
1828
1846
 
1829
1847
  declare function adaptSelection(config: PraxisListConfig | undefined, items: any[]): ListSelectionEvent;
1830
1848
 
1849
+ declare const PRAXIS_LIST_INSERTION_PRESETS: NonNullable<ComponentDocMeta['insertionPresets']>;
1831
1850
  declare const PRAXIS_LIST_COMPONENT_METADATA: ComponentDocMeta;
1832
1851
  declare function providePraxisListMetadata(): Provider;
1833
1852
 
@@ -1986,9 +2005,10 @@ declare class PraxisListDocPageComponent {
1986
2005
  model: "hotel";
1987
2006
  groupBy: undefined;
1988
2007
  itemSpacing?: "none" | "tight" | "default" | "relaxed";
2008
+ itemAppearance?: "flat" | "card" | "capsule";
1989
2009
  dividers?: "none" | "between" | "all";
1990
2010
  stickySectionHeader?: boolean;
1991
- virtualScroll?: boolean;
2011
+ virtualScroll?: boolean | _praxisui_list.PraxisListVirtualScrollConfig;
1992
2012
  pageSize?: number;
1993
2013
  rowLayout?: {
1994
2014
  type?: "grid" | "flex";
@@ -2108,27 +2128,8 @@ declare class PraxisListDocPageComponent {
2108
2128
  errorTemplate?: _praxisui_list.TemplateDef;
2109
2129
  };
2110
2130
  };
2111
- actions?: Array<{
2112
- id: string;
2113
- icon?: string;
2114
- label?: string;
2115
- color?: string;
2116
- kind?: "icon" | "button";
2117
- buttonVariant?: "stroked" | "raised" | "flat";
2118
- showIf?: _praxisui_core.JsonLogicExpression | null;
2119
- emitPayload?: "item" | "id" | "value";
2120
- action?: "surface.open";
2121
- recordOpen?: _praxisui_core.ResourceRecordOpenRef;
2122
- globalAction?: _praxisui_core.GlobalActionRef;
2123
- emitLocal?: boolean;
2124
- showLoading?: boolean;
2125
- placement?: "actions" | "trailing";
2126
- confirmation?: {
2127
- title?: string;
2128
- message?: string;
2129
- type?: "danger" | "warning" | "info";
2130
- };
2131
- }>;
2131
+ actions?: _praxisui_list.PraxisListItemAction[];
2132
+ itemActions?: _praxisui_list.PraxisListItemAction[];
2132
2133
  i18n?: _praxisui_list.PraxisListI18nConfig;
2133
2134
  ui?: {
2134
2135
  showSearch?: boolean;
@@ -2955,5 +2956,5 @@ declare const PRAXIS_LIST_PT_BR: {
2955
2956
  readonly 'Advanced row CSS': "CSS avançado da linha";
2956
2957
  };
2957
2958
 
2958
- export { ExecutiveAlertsComponent, ExecutiveBadgeComponent, ExecutiveOwnerComponent, LIST_AI_CAPABILITIES, ListDataService, ListSkinService, PRAXIS_LIST_AUTHORING_MANIFEST, PRAXIS_LIST_COMPONENT_METADATA, PRAXIS_LIST_EN_US, PRAXIS_LIST_I18N_NAMESPACE, PRAXIS_LIST_PT_BR, PraxisList, PraxisListConfigEditor, PraxisListDocPageComponent, PraxisListJsonConfigEditorComponent, PraxisListWidgetConfigEditor, adaptSelection, buildListApplyPlan, createListAuthoringDocument, evalExpr, evaluateTemplate, inferListAuthoringDocument, inferTemplatingFromSchema, isListTemplateSupportedByRichContentP0, mapListTemplateToRichContentP0, normalizeListActionPayloads, normalizeListAuthoringDocument, normalizeListConfig, parseLegacyOrListDocument, projectListAuthoringDocument, providePraxisListI18n, providePraxisListMetadata, serializeListAuthoringDocument, toCanonicalListConfig, validateListAuthoringDocument };
2959
- export type { Capability, CapabilityCatalog, CapabilityCategory, EditorDiagnostic, EditorDocument, ExecutiveAlert, JsonEditorEvent, JsonValidationResult, ListActionEvent, ListApplyPlan, ListAuthoringDocument, ListExpansionSectionDef, ListExpansionSectionType, ListFeatureDef, ListItemEvent, ListItemStyleEffect, ListItemStyleRule, ListProjectionContext, ListRemoteLoadError, ListRichContentP0Node, ListRowLayoutSlot, ListRuntimeContext, ListSchemaInferencePlan, ListSection, ListSelectionEvent, ListSlotOverrideEffect, ListSlotOverrideRule, ListTemplatingSlot, ListValidationContext, PraxisListConfig, PraxisListExportConfig, PraxisListI18nConfig, PraxisListWidgetEditorInputs, PraxisListWidgetEditorValue, TemplateDef, TemplateEvaluatorOptions, TemplateFeatureDef, TemplateType, TemplatingFeatureDef, ValueKind };
2959
+ export { ExecutiveAlertsComponent, ExecutiveBadgeComponent, ExecutiveOwnerComponent, LIST_AI_CAPABILITIES, ListDataService, ListSkinService, PRAXIS_LIST_AUTHORING_MANIFEST, PRAXIS_LIST_COMPONENT_METADATA, PRAXIS_LIST_EN_US, PRAXIS_LIST_I18N_NAMESPACE, PRAXIS_LIST_INSERTION_PRESETS, PRAXIS_LIST_PT_BR, PraxisList, PraxisListConfigEditor, PraxisListDocPageComponent, PraxisListJsonConfigEditorComponent, PraxisListWidgetConfigEditor, adaptSelection, buildListApplyPlan, createListAuthoringDocument, evalExpr, evaluateTemplate, formatRelativeTime, inferListAuthoringDocument, inferTemplatingFromSchema, isListTemplateSupportedByRichContentP0, mapListTemplateToRichContentP0, normalizeListActionPayloads, normalizeListAuthoringDocument, normalizeListConfig, parseLegacyOrListDocument, projectListAuthoringDocument, providePraxisListI18n, providePraxisListMetadata, safeFormatDate, safeFormatDateTime, serializeListAuthoringDocument, toCanonicalListConfig, validateListAuthoringDocument };
2960
+ export type { Capability, CapabilityCatalog, CapabilityCategory, EditorDiagnostic, EditorDocument, ExecutiveAlert, JsonEditorEvent, JsonValidationResult, ListActionEvent, ListApplyPlan, ListAuthoringDocument, ListExpansionSectionDef, ListExpansionSectionType, ListFeatureDef, ListItemEvent, ListItemStyleEffect, ListItemStyleRule, ListProjectionContext, ListRemoteLoadError, ListRichContentP0Node, ListRowLayoutSlot, ListRuntimeContext, ListSchemaInferencePlan, ListSection, ListSelectionEvent, ListSlotOverrideEffect, ListSlotOverrideRule, ListTemplatingSlot, ListValidationContext, PraxisListConfig, PraxisListExportConfig, PraxisListI18nConfig, PraxisListItemAction, PraxisListVirtualScrollConfig, PraxisListWidgetEditorInputs, PraxisListWidgetEditorValue, TemplateDef, TemplateEvaluatorOptions, TemplateFeatureDef, TemplateType, TemplatingFeatureDef, ValueKind };