@praxisui/list 9.0.68-rc.3 → 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": "9.0.68-rc.3",
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": "^9.0.68-rc.3",
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": "^9.0.68-rc.3",
14
- "@praxisui/core": "^9.0.68-rc.3",
15
- "@praxisui/rich-content": "^9.0.68-rc.3",
16
- "@praxisui/settings-panel": "^9.0.68-rc.3"
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>;
@@ -536,6 +560,7 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
536
560
  private appliedRuntimeConfig?;
537
561
  private readonly data;
538
562
  private readonly settings;
563
+ private readonly destroyRef;
539
564
  private readonly cdr;
540
565
  private readonly componentKeys;
541
566
  private readonly logger;
@@ -668,27 +693,17 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
668
693
  hasSkeleton(): boolean;
669
694
  skeletonCount(): number;
670
695
  skeletonItems(): any[];
671
- visibleActions(item: any, placement?: 'actions' | 'trailing'): {
672
- id: string;
673
- icon?: string;
674
- label?: string;
675
- color?: string;
676
- kind?: "icon" | "button";
677
- buttonVariant?: "stroked" | "raised" | "flat";
678
- showIf?: JsonLogicExpression | null;
679
- emitPayload?: "item" | "id" | "value";
680
- action?: "surface.open";
681
- recordOpen?: ResourceRecordOpenRef;
682
- globalAction?: GlobalActionRef;
683
- emitLocal?: boolean;
684
- showLoading?: boolean;
685
- placement?: "actions" | "trailing";
686
- confirmation?: {
687
- title?: string;
688
- message?: string;
689
- type?: "danger" | "warning" | "info";
690
- };
691
- }[];
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[];
692
707
  onItemClick(item: any, index: number, section?: string): void;
693
708
  onRowActivate(item: any, index: number, section?: string): void;
694
709
  onExpandToggle(event: Event, item: any, index: number): void;
@@ -843,6 +858,7 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
843
858
  private toBoolean;
844
859
  private prettyLabel;
845
860
  private mapDateStyle;
861
+ private mapDateTimeStyle;
846
862
  starIcon(index: number, ratingValue: string | number): string;
847
863
  isThemeColor(color?: string): boolean;
848
864
  chipStyle(color?: string, variant?: 'filled' | 'outlined'): string;
@@ -880,7 +896,7 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
880
896
  private normalizeExpansionItems;
881
897
  private normalizeKeyValueItems;
882
898
  static ɵfac: i0.ɵɵFactoryDeclaration<PraxisList, never>;
883
- 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>;
884
900
  static ngAcceptInputType_enableCustomization: unknown;
885
901
  }
886
902
 
@@ -1237,6 +1253,13 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
1237
1253
  isDirty$: BehaviorSubject<boolean>;
1238
1254
  isValid$: BehaviorSubject<boolean>;
1239
1255
  isBusy$: BehaviorSubject<boolean>;
1256
+ readonly saveError: i0.WritableSignal<string>;
1257
+ private readonly destroyRef;
1258
+ private saving;
1259
+ private editorBusy;
1260
+ private persistSettings?;
1261
+ private setEditorBusy;
1262
+ onBeforeClose(): boolean;
1240
1263
  private initialJson;
1241
1264
  private lastJson;
1242
1265
  fields: string[];
@@ -1424,6 +1447,7 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
1424
1447
  pickMetaPrefixIcon(): Promise<void>;
1425
1448
  getSettingsValue(): any;
1426
1449
  onSave(): any;
1450
+ private persistDraft;
1427
1451
  onJsonConfigChange(newValue: PraxisListConfig | ListAuthoringDocument): void;
1428
1452
  onJsonValidationChange(result: JsonValidationResult): void;
1429
1453
  onJsonEditorEvent(event: JsonEditorEvent): void;
@@ -1812,6 +1836,9 @@ declare function evaluateTemplate(def: TemplateDef | undefined, item: any, optio
1812
1836
  variant?: 'filled' | 'outlined';
1813
1837
  };
1814
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;
1815
1842
 
1816
1843
  type ListRichContentP0Node = RichPresenterNode | RichComposeNode;
1817
1844
  declare function isListTemplateSupportedByRichContentP0(template?: TemplateDef | null): boolean;
@@ -1819,6 +1846,7 @@ declare function mapListTemplateToRichContentP0(template?: TemplateDef | null):
1819
1846
 
1820
1847
  declare function adaptSelection(config: PraxisListConfig | undefined, items: any[]): ListSelectionEvent;
1821
1848
 
1849
+ declare const PRAXIS_LIST_INSERTION_PRESETS: NonNullable<ComponentDocMeta['insertionPresets']>;
1822
1850
  declare const PRAXIS_LIST_COMPONENT_METADATA: ComponentDocMeta;
1823
1851
  declare function providePraxisListMetadata(): Provider;
1824
1852
 
@@ -1977,9 +2005,10 @@ declare class PraxisListDocPageComponent {
1977
2005
  model: "hotel";
1978
2006
  groupBy: undefined;
1979
2007
  itemSpacing?: "none" | "tight" | "default" | "relaxed";
2008
+ itemAppearance?: "flat" | "card" | "capsule";
1980
2009
  dividers?: "none" | "between" | "all";
1981
2010
  stickySectionHeader?: boolean;
1982
- virtualScroll?: boolean;
2011
+ virtualScroll?: boolean | _praxisui_list.PraxisListVirtualScrollConfig;
1983
2012
  pageSize?: number;
1984
2013
  rowLayout?: {
1985
2014
  type?: "grid" | "flex";
@@ -2099,27 +2128,8 @@ declare class PraxisListDocPageComponent {
2099
2128
  errorTemplate?: _praxisui_list.TemplateDef;
2100
2129
  };
2101
2130
  };
2102
- actions?: Array<{
2103
- id: string;
2104
- icon?: string;
2105
- label?: string;
2106
- color?: string;
2107
- kind?: "icon" | "button";
2108
- buttonVariant?: "stroked" | "raised" | "flat";
2109
- showIf?: _praxisui_core.JsonLogicExpression | null;
2110
- emitPayload?: "item" | "id" | "value";
2111
- action?: "surface.open";
2112
- recordOpen?: _praxisui_core.ResourceRecordOpenRef;
2113
- globalAction?: _praxisui_core.GlobalActionRef;
2114
- emitLocal?: boolean;
2115
- showLoading?: boolean;
2116
- placement?: "actions" | "trailing";
2117
- confirmation?: {
2118
- title?: string;
2119
- message?: string;
2120
- type?: "danger" | "warning" | "info";
2121
- };
2122
- }>;
2131
+ actions?: _praxisui_list.PraxisListItemAction[];
2132
+ itemActions?: _praxisui_list.PraxisListItemAction[];
2123
2133
  i18n?: _praxisui_list.PraxisListI18nConfig;
2124
2134
  ui?: {
2125
2135
  showSearch?: boolean;
@@ -2175,6 +2185,7 @@ declare class PraxisListDocPageComponent {
2175
2185
 
2176
2186
  declare const PRAXIS_LIST_EN_US: {
2177
2187
  readonly loading: "Loading items…";
2188
+ readonly 'editor.saveFailed': "Unable to save the list settings. Your draft was kept. Try again.";
2178
2189
  readonly "configurationSource.label": "Configuration source";
2179
2190
  readonly "configurationSource.page": "Page configuration";
2180
2191
  readonly "configurationSource.individual": "Individual list preferences";
@@ -2562,6 +2573,7 @@ declare function providePraxisListI18n(): i0.Provider[];
2562
2573
 
2563
2574
  declare const PRAXIS_LIST_PT_BR: {
2564
2575
  readonly loading: "Carregando itens…";
2576
+ readonly 'editor.saveFailed': "Não foi possível salvar as configurações da lista. O rascunho foi preservado. Tente novamente.";
2565
2577
  readonly "configurationSource.label": "Origem da configuração";
2566
2578
  readonly "configurationSource.page": "Configuração da página";
2567
2579
  readonly "configurationSource.individual": "Preferências individuais da lista";
@@ -2944,5 +2956,5 @@ declare const PRAXIS_LIST_PT_BR: {
2944
2956
  readonly 'Advanced row CSS': "CSS avançado da linha";
2945
2957
  };
2946
2958
 
2947
- 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 };
2948
- 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 };