@praxisui/list 10.0.0-rc.4 → 10.0.0-rc.41

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.
@@ -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
- 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';
7
+ import { PraxisExportFormat, PraxisExportScope, ResourceQuickViewBinding, PraxisRuntimeConditionalEffectRule, JsonLogicExpression, RichContentDocument, ResourceRecordOpenRef, GlobalActionRef, LocalizationConfig, AiCapability, PraxisDataQueryContext, RichBlockNode, EmptyAction, RichBlockHostCapabilities, ApiEndpoint, ApiUrlEntry, SurfaceOpenActionEditorComponent, DiscoveredResourceOption, 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;
@@ -79,6 +78,10 @@ interface TemplateDef {
79
78
  color?: string;
80
79
  variant?: 'filled' | 'outlined';
81
80
  };
81
+ /**
82
+ * Binding declarativo de Quick View transversal para slots/nós de item da lista.
83
+ */
84
+ quickView?: ResourceQuickViewBinding;
82
85
  }
83
86
  interface ListFeatureDef {
84
87
  icon?: string;
@@ -122,8 +125,11 @@ interface ListExpansionSectionDef {
122
125
  }
123
126
  type ListTemplatingSlot = 'leading' | 'primary' | 'secondary' | 'meta' | 'trailing' | 'identity' | 'balance' | 'limit' | 'risk' | 'alerts' | 'owner';
124
127
  type ListRowLayoutSlot = ListTemplatingSlot | 'actions' | 'expand';
128
+ type ListCardColumns = 'auto' | 1 | 2 | 3 | 4;
129
+ type ListItemStateTone = 'neutral' | 'primary' | 'success' | 'warning' | 'danger' | 'muted';
125
130
  interface ListItemStyleEffect {
126
131
  kind?: 'item-style';
132
+ tone?: ListItemStateTone;
127
133
  class?: string;
128
134
  style?: string;
129
135
  border?: string;
@@ -147,6 +153,49 @@ interface ListSlotOverrideRule extends Omit<PraxisRuntimeConditionalEffectRule<L
147
153
  condition?: JsonLogicExpression | null;
148
154
  effects?: ListSlotOverrideEffect[];
149
155
  }
156
+ interface PraxisListVirtualScrollConfig {
157
+ enabled: boolean;
158
+ itemSize?: number;
159
+ minBufferPx?: number;
160
+ maxBufferPx?: number;
161
+ viewportHeight?: string;
162
+ }
163
+ interface PraxisListItemAction {
164
+ id: string;
165
+ icon?: string;
166
+ label?: string;
167
+ color?: string;
168
+ tooltip?: string;
169
+ kind?: 'icon' | 'button' | 'menu-item';
170
+ buttonVariant?: 'stroked' | 'raised' | 'flat';
171
+ showIf?: JsonLogicExpression | null;
172
+ visibleWhen?: JsonLogicExpression | null;
173
+ disabledWhen?: JsonLogicExpression | null;
174
+ /**
175
+ * Condição HATEOAS canônica: se especificado, a ação só é exibida
176
+ * se o item possuir o link correspondente em `item._links[hateoasRel]` ou `item.links[hateoasRel]`.
177
+ */
178
+ hateoasRel?: string;
179
+ emitPayload?: 'item' | 'id' | 'value';
180
+ action?: 'surface.open' | 'quickView.open' | string;
181
+ recordOpen?: ResourceRecordOpenRef;
182
+ /**
183
+ * Binding declarativo de Quick View transversal para ação de item da lista.
184
+ */
185
+ quickView?: ResourceQuickViewBinding;
186
+ globalAction?: GlobalActionRef;
187
+ command?: string;
188
+ params?: Record<string, unknown>;
189
+ emitLocal?: boolean;
190
+ showLoading?: boolean;
191
+ placement?: 'actions' | 'trailing' | 'menu';
192
+ confirmation?: {
193
+ title?: string;
194
+ message?: string;
195
+ type?: 'danger' | 'warning' | 'info';
196
+ };
197
+ requiresConfirmation?: boolean;
198
+ }
150
199
  interface PraxisListConfig {
151
200
  id?: string;
152
201
  dataSource?: {
@@ -159,12 +208,25 @@ interface PraxisListConfig {
159
208
  variant?: 'list' | 'cards' | 'tiles';
160
209
  density?: 'default' | 'comfortable' | 'compact';
161
210
  itemSpacing?: 'none' | 'tight' | 'default' | 'relaxed';
211
+ itemAppearance?: 'flat' | 'card' | 'capsule';
162
212
  lines?: 1 | 2 | 3;
163
213
  dividers?: 'none' | 'between' | 'all';
164
214
  model?: 'standard' | 'media' | 'hotel';
215
+ /**
216
+ * Structured column count for cards/tiles grids without requiring raw CSS.
217
+ */
218
+ cardColumns?: ListCardColumns;
219
+ /**
220
+ * Minimum card/tile track width when cardColumns is 'auto' (e.g. '240px', '300px', '340px').
221
+ */
222
+ cardMinWidth?: string;
223
+ /**
224
+ * Minimum card surface height (e.g. 'auto', '148px', '188px', '220px').
225
+ */
226
+ cardMinHeight?: string;
165
227
  groupBy?: string;
166
228
  stickySectionHeader?: boolean;
167
- virtualScroll?: boolean;
229
+ virtualScroll?: boolean | PraxisListVirtualScrollConfig;
168
230
  pageSize?: number;
169
231
  rowLayout?: {
170
232
  type?: 'grid' | 'flex';
@@ -201,6 +263,12 @@ interface PraxisListConfig {
201
263
  };
202
264
  selection?: {
203
265
  mode?: 'none' | 'single' | 'multiple';
266
+ /**
267
+ * Controls whether the explicit checkbox/radio control is rendered on each row.
268
+ * Defaults to `true` when selection is enabled. Set to `false` to allow row-click
269
+ * selection without displaying a trailing radio/checkbox control.
270
+ */
271
+ showControl?: boolean;
204
272
  formControlName?: string;
205
273
  formControlPath?: string;
206
274
  compareBy?: string;
@@ -284,27 +352,10 @@ interface PraxisListConfig {
284
352
  errorTemplate?: TemplateDef;
285
353
  };
286
354
  };
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
- }>;
355
+ /** Ações declarativas de item governadas (compatível com itemActions) */
356
+ actions?: PraxisListItemAction[];
357
+ /** Ações declarativas de item com HATEOAS e despacho canônico */
358
+ itemActions?: PraxisListItemAction[];
308
359
  i18n?: PraxisListI18nConfig;
309
360
  ui?: {
310
361
  showSearch?: boolean;
@@ -478,6 +529,7 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
478
529
  private static nextSkinScopeId;
479
530
  private customizationEnabled;
480
531
  private readonly hostLocale;
532
+ private readonly quickViewService;
481
533
  config: PraxisListConfig;
482
534
  listId: string;
483
535
  componentInstanceId?: string;
@@ -488,6 +540,8 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
488
540
  form?: FormGroup | null;
489
541
  set enableCustomization(value: boolean);
490
542
  get enableCustomization(): boolean;
543
+ itemActions?: PraxisListItemAction[];
544
+ virtualScroll?: boolean | PraxisListVirtualScrollConfig;
491
545
  itemClick: EventEmitter<ListItemEvent>;
492
546
  actionClick: EventEmitter<ListActionEvent>;
493
547
  selectionChange: EventEmitter<ListSelectionEvent>;
@@ -510,6 +564,8 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
510
564
  private lastQuery;
511
565
  private lastRuntimeQueryContextSignature;
512
566
  private search$;
567
+ activeSearchTerm: string;
568
+ private searchInputRef?;
513
569
  get layoutLines(): number;
514
570
  boundControl: FormControl<unknown | unknown[] | null>;
515
571
  private selectionControlSubscription?;
@@ -585,6 +641,7 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
585
641
  isCardsVariant(): boolean;
586
642
  isTilesVariant(): boolean;
587
643
  isSelectionEnabled(): boolean;
644
+ shouldShowSelectionControl(): boolean;
588
645
  private setupSelectionBinding;
589
646
  private watchSelectionControl;
590
647
  leading: (item: any) => Record<string, any> | null;
@@ -669,27 +726,19 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
669
726
  hasSkeleton(): boolean;
670
727
  skeletonCount(): number;
671
728
  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
- }[];
729
+ private isVirtualScrollConfigured;
730
+ isVirtualScrollEnabled(): boolean;
731
+ hasBoundedScrollViewport(): boolean;
732
+ virtualScrollItemSize(): number;
733
+ virtualScrollMinBufferPx(): number;
734
+ virtualScrollMaxBufferPx(): number;
735
+ virtualScrollViewportHeight(): string;
736
+ virtualScrollItems(sections: ListSection<any>[] | null | undefined, items: any[] | null | undefined): any[];
737
+ trackByVirtualItem: (index: number, item: any) => any;
738
+ private warnOnIncompatibleVirtualScroll;
739
+ effectiveActions(): PraxisListItemAction[];
740
+ hasHateoasLink(item: any, rel: string): boolean;
741
+ visibleActions(item: any, placement?: 'actions' | 'trailing' | 'menu'): PraxisListItemAction[];
693
742
  onItemClick(item: any, index: number, section?: string): void;
694
743
  onRowActivate(item: any, index: number, section?: string): void;
695
744
  onExpandToggle(event: Event, item: any, index: number): void;
@@ -697,6 +746,13 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
697
746
  configEditorLabel(): string;
698
747
  expandToggleAriaLabel(item: any, index: number): string;
699
748
  expansionRegionAriaLabel(item: any): string;
749
+ hasCustomEmptyStateTemplate(): boolean;
750
+ hasActiveEmptyStateFilters(): boolean;
751
+ emptyStateIcon(): string;
752
+ emptyStateTitle(): string;
753
+ emptyStateDescription(): string;
754
+ emptyStatePrimaryAction(): EmptyAction | undefined;
755
+ emptyStateSecondaryActions(): EmptyAction[];
700
756
  emptyStateLabel(): string;
701
757
  selectionListAriaLabel(): string | null;
702
758
  selectionControlName(): string;
@@ -706,6 +762,7 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
706
762
  private selectionItemsEqual;
707
763
  isResourceConnectionMissing(): boolean;
708
764
  onActionClick(ev: MouseEvent, actionId: string, item: any, index: number): Promise<void>;
765
+ listQuickViewQueryContext(): Record<string, unknown> | null;
709
766
  private executeRecordOpenAction;
710
767
  private resolveRecordOpenService;
711
768
  private resolveActionFocusOrigin;
@@ -739,6 +796,7 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
739
796
  private getExportFileExtension;
740
797
  private getExportMimeType;
741
798
  private cloneForExportEvent;
799
+ openQuickConnect(): void;
742
800
  openConfigEditor(): void;
743
801
  private openConfigEditorPanel;
744
802
  openAiAssistant(): void;
@@ -774,6 +832,7 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
774
832
  retryRemoteData(): void;
775
833
  private focusCollectionBeforeReload;
776
834
  onSearchInput(val: string): void;
835
+ clearSearch(): void;
777
836
  isRemoteDataMode(): boolean;
778
837
  activeSortValue(sort: string[] | undefined): string;
779
838
  hasSortOption(value: string): boolean;
@@ -798,6 +857,7 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
798
857
  private storageKey;
799
858
  private componentKeyId;
800
859
  private readonly crud;
860
+ private readonly resourceDiscovery;
801
861
  private executeSchemaInferenceForPlan;
802
862
  private evalSlot;
803
863
  private resolveSlotTemplate;
@@ -844,10 +904,16 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
844
904
  private toBoolean;
845
905
  private prettyLabel;
846
906
  private mapDateStyle;
907
+ private mapDateTimeStyle;
847
908
  starIcon(index: number, ratingValue: string | number): string;
848
909
  isThemeColor(color?: string): boolean;
910
+ private normalizeTemplatingMapKey;
911
+ private lookupTemplatingMapValue;
912
+ resolveSemanticTone(color?: string): 'info' | 'success' | 'warning' | 'danger' | 'neutral' | undefined;
913
+ private resolveSemanticBaseColor;
849
914
  chipStyle(color?: string, variant?: 'filled' | 'outlined'): string;
850
915
  iconStyle(color?: string): string;
916
+ leadingIconStyle(color?: string, extraStyle?: string): string;
851
917
  actionIconStyle(color?: string): string;
852
918
  buttonStyle(color?: string, variant?: 'stroked' | 'raised' | 'flat'): string;
853
919
  ratingMax(def?: any): number;
@@ -881,7 +947,7 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
881
947
  private normalizeExpansionItems;
882
948
  private normalizeKeyValueItems;
883
949
  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>;
950
+ 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
951
  static ngAcceptInputType_enableCustomization: unknown;
886
952
  }
887
953
 
@@ -1184,9 +1250,12 @@ type NormalizedListConfig = Omit<PraxisListConfig, 'dataSource' | 'layout' | 'se
1184
1250
  lines: 1 | 2 | 3;
1185
1251
  dividers?: 'none' | 'between' | 'all';
1186
1252
  model?: 'standard' | 'media' | 'hotel';
1253
+ cardColumns?: ListCardColumns;
1254
+ cardMinWidth?: string;
1255
+ cardMinHeight?: string;
1187
1256
  groupBy?: string;
1188
1257
  stickySectionHeader?: boolean;
1189
- virtualScroll?: boolean;
1258
+ virtualScroll?: boolean | PraxisListVirtualScrollConfig;
1190
1259
  pageSize?: number;
1191
1260
  rowLayout?: NonNullable<PraxisListConfig['layout']>['rowLayout'];
1192
1261
  };
@@ -1210,6 +1279,7 @@ type NormalizedListConfig = Omit<PraxisListConfig, 'dataSource' | 'layout' | 'se
1210
1279
  formControlPath?: string;
1211
1280
  compareBy?: string;
1212
1281
  return?: 'value' | 'item' | 'id';
1282
+ showControl?: boolean;
1213
1283
  };
1214
1284
  i18n: {
1215
1285
  locale?: string;
@@ -1229,6 +1299,16 @@ type ExportPreviewRow = Record<string, string>;
1229
1299
  declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
1230
1300
  config: PraxisListConfig;
1231
1301
  listId?: string;
1302
+ /**
1303
+ * Logical endpoint key used to scope catalog discovery and schema resolution
1304
+ * in multi-module / multi-gateway hosts. Takes precedence over SETTINGS_PANEL_DATA when bound.
1305
+ */
1306
+ endpointKey?: ApiEndpoint;
1307
+ /**
1308
+ * Explicit API URL entry override used for catalog discovery and schema resolution.
1309
+ * Takes precedence over SETTINGS_PANEL_DATA when bound.
1310
+ */
1311
+ apiUrlEntry?: ApiUrlEntry | null;
1232
1312
  document: ListAuthoringDocument;
1233
1313
  working: NormalizedListConfig;
1234
1314
  private readonly invalidSurfaceDrafts;
@@ -1248,8 +1328,28 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
1248
1328
  private initialJson;
1249
1329
  private lastJson;
1250
1330
  fields: string[];
1331
+ fieldSearchQuery: string;
1332
+ fieldMetaByName: Record<string, {
1333
+ name: string;
1334
+ label?: string;
1335
+ type?: string;
1336
+ description?: string;
1337
+ enumValues?: string[];
1338
+ optionLabels?: Record<string, string>;
1339
+ }>;
1340
+ selectedResourceOption: DiscoveredResourceOption | null;
1341
+ schemaWarning: string;
1251
1342
  private lastResourcePath?;
1252
1343
  sortField?: string;
1344
+ private normalizeFieldSearch;
1345
+ onFieldSelectOpenedChange(_opened: boolean): void;
1346
+ getFilteredFields(selected?: string | string[] | null): string[];
1347
+ onDiscoveredResourceSelected(entry: DiscoveredResourceOption | null): void;
1348
+ private extractFieldDomainMeta;
1349
+ getFieldLabel(fieldName?: string | null): string;
1350
+ getFieldTypeBadge(fieldName?: string | null): string;
1351
+ getFieldDescription(fieldName?: string | null): string;
1352
+ getFieldTriggerLabel(fieldName?: string | null): string;
1253
1353
  sortDir: 'asc' | 'desc';
1254
1354
  mappingPrimary: {
1255
1355
  field?: string;
@@ -1413,7 +1513,10 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
1413
1513
  queryJson: string;
1414
1514
  queryError: string;
1415
1515
  actionShowIfDrafts: Record<number, string>;
1516
+ private stashedLocalData?;
1517
+ private stashedLocalTemplating?;
1416
1518
  private crud;
1519
+ private readonly resourceDiscovery;
1417
1520
  private readonly i18n;
1418
1521
  private resourcePathChanges;
1419
1522
  constructor(injected?: any);
@@ -1442,8 +1545,21 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
1442
1545
  private snapshotCurrentDocument;
1443
1546
  private syncSortStateFromWorking;
1444
1547
  private resetVisualMappingState;
1548
+ private buildDiscoveryOptions;
1445
1549
  private setupSchemaWatcher;
1550
+ private shouldAutoInferSlots;
1551
+ private pendingRemoteSlotInference;
1552
+ private lastNonEmptyResourcePath;
1553
+ syncSchemaFieldsFromWorking(immediate?: boolean): void;
1554
+ loadFieldsFromResource(resourcePath: string): void;
1446
1555
  onResourcePathChange(value: string): void;
1556
+ hasRemoteResourcePath(): boolean;
1557
+ getActiveDataSourceMode(): 'local' | 'remote' | 'empty';
1558
+ getActiveDataSourceLabel(): string;
1559
+ hasStashedLocalData(): boolean;
1560
+ useRemoteResource(): void;
1561
+ clearLocalData(): void;
1562
+ restoreLocalData(): void;
1447
1563
  getLocalDataRows(): any[];
1448
1564
  getLocalDataSummary(): string;
1449
1565
  getLocalDataPrecedenceWarning(): string;
@@ -1457,6 +1573,16 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
1457
1573
  applySalaryPreset(): void;
1458
1574
  applyPricePreset(): void;
1459
1575
  private applyCurrencyPreset;
1576
+ private resolveStatusDomainField;
1577
+ private inferSemanticStatusColor;
1578
+ resolveDomainColorMapEntries(explicitField?: string): Array<{
1579
+ key: string;
1580
+ color: string;
1581
+ }>;
1582
+ resolveDomainLabelMapEntries(explicitField?: string): Array<{
1583
+ key: string;
1584
+ label: string;
1585
+ }>;
1460
1586
  private defaultStatusColorMapEntries;
1461
1587
  previewData: {
1462
1588
  title: string;
@@ -1565,6 +1691,19 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
1565
1691
  ngDoCheck(): void;
1566
1692
  reset(): void;
1567
1693
  onLayoutChanged(): void;
1694
+ virtualScrollEnabled(): boolean;
1695
+ onVirtualScrollEnabledChange(enabled: boolean): void;
1696
+ getVirtualScrollViewportHeight(): string;
1697
+ onVirtualScrollViewportHeightChange(value: string): void;
1698
+ getVirtualScrollItemSize(): number | undefined;
1699
+ onVirtualScrollItemSizeChange(value: any): void;
1700
+ getVirtualScrollMinBufferPx(): number | undefined;
1701
+ onVirtualScrollMinBufferPxChange(value: any): void;
1702
+ getVirtualScrollMaxBufferPx(): number | undefined;
1703
+ onVirtualScrollMaxBufferPxChange(value: any): void;
1704
+ getVirtualScrollCompatibilityWarning(): string;
1705
+ private ensureVirtualScrollObjectDraft;
1706
+ private collapseVirtualScrollDraftIfDefault;
1568
1707
  rowLayoutEnabled(): boolean;
1569
1708
  onRowLayoutEnabledChange(enabled: boolean): void;
1570
1709
  applyCorporateRowLayoutPreset(): void;
@@ -1642,6 +1781,49 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
1642
1781
  onRuleConditionChanged(rule: {
1643
1782
  condition?: JsonLogicExpression | null;
1644
1783
  }, raw: string): void;
1784
+ readonly cardColumnsOptions: readonly ListCardColumns[];
1785
+ readonly ruleConditionOperators: readonly ["==", "!=", ">", ">=", "<", "<="];
1786
+ readonly itemStateToneOptions: ReadonlyArray<{
1787
+ value: ListItemStateTone;
1788
+ label: string;
1789
+ cssClass: string;
1790
+ border: string;
1791
+ background: string;
1792
+ }>;
1793
+ getCardColumnsModel(): ListCardColumns;
1794
+ onCardColumnsChange(value: ListCardColumns): void;
1795
+ applyCardWidthPreset(width: string): void;
1796
+ applyCardHeightPreset(height: string): void;
1797
+ onStatusPositionChange(position: 'inline' | 'top-right' | undefined): void;
1798
+ applyStandardStatusColorMap(): void;
1799
+ getSlotAnatomyItems(): Array<{
1800
+ slot: 'leading' | 'primary' | 'secondary' | 'meta' | 'trailing' | 'features';
1801
+ label: string;
1802
+ role: string;
1803
+ mapped: boolean;
1804
+ summary: string;
1805
+ }>;
1806
+ isSlotMapped(slot: 'leading' | 'primary' | 'secondary' | 'meta' | 'trailing' | 'features'): boolean;
1807
+ getSlotMappingSummary(slot: 'leading' | 'primary' | 'secondary' | 'meta' | 'trailing' | 'features'): string;
1808
+ applyDidacticSlotPreset(preset: 'operational-card' | 'executive-compact-card' | 'dense-list'): void;
1809
+ applyItemStyleTonePreset(rule: ListItemStyleRule, tone: ListItemStateTone): void;
1810
+ private parseSimpleRuleCondition;
1811
+ getGuidedRuleConditionField(rule: {
1812
+ condition?: JsonLogicExpression | null;
1813
+ }): string;
1814
+ getGuidedRuleConditionOperator(rule: {
1815
+ condition?: JsonLogicExpression | null;
1816
+ }): string;
1817
+ getGuidedRuleConditionValue(rule: {
1818
+ condition?: JsonLogicExpression | null;
1819
+ }): string;
1820
+ onGuidedRuleConditionChange(rule: {
1821
+ condition?: JsonLogicExpression | null;
1822
+ }, patch: {
1823
+ field?: string;
1824
+ operator?: string;
1825
+ value?: string;
1826
+ }): void;
1645
1827
  getItemStyleEffect(rule: ListItemStyleRule): ListItemStyleEffect | undefined;
1646
1828
  ensureItemStyleEffect(rule: ListItemStyleRule): void;
1647
1829
  clearItemStyleEffects(rule: ListItemStyleRule): void;
@@ -1694,6 +1876,7 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
1694
1876
  private insertIntoFeatureExpr;
1695
1877
  private updateFeatureExpr;
1696
1878
  private hydrateMappingFromTemplating;
1879
+ private syncDirtyStateNow;
1697
1880
  markDirty(): void;
1698
1881
  private getMappingSnapshot;
1699
1882
  private updateMappingDirty;
@@ -1708,6 +1891,8 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
1708
1891
  private looksLikeJsonPayload;
1709
1892
  private normalizeSurfaceOpenPayload;
1710
1893
  verify(): void;
1894
+ private isGenericInferredChipColorMap;
1895
+ private isGenericInferredChipLabelMap;
1711
1896
  inferFromFields(): void;
1712
1897
  generateFeaturesFromMetaComposition(): void;
1713
1898
  metaComposePreview(): string;
@@ -1720,13 +1905,15 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
1720
1905
  private suggestIcon;
1721
1906
  getTypeIcon(type: string): string;
1722
1907
  static ɵfac: i0.ɵɵFactoryDeclaration<PraxisListConfigEditor, [{ optional: true; }]>;
1723
- static ɵcmp: i0.ɵɵComponentDeclaration<PraxisListConfigEditor, "praxis-list-config-editor", never, { "config": { "alias": "config"; "required": false; }; "listId": { "alias": "listId"; "required": false; }; }, {}, never, never, true, never>;
1908
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisListConfigEditor, "praxis-list-config-editor", never, { "config": { "alias": "config"; "required": false; }; "listId": { "alias": "listId"; "required": false; }; "endpointKey": { "alias": "endpointKey"; "required": false; }; "apiUrlEntry": { "alias": "apiUrlEntry"; "required": false; }; }, {}, never, never, true, never>;
1724
1909
  }
1725
1910
 
1726
1911
  type PersistenceStrategy = 'input-first' | 'local-first' | 'volatile';
1727
1912
  interface PraxisListWidgetEditorInputs {
1728
1913
  config?: PraxisListConfig | null;
1729
1914
  listId?: string;
1915
+ endpointKey?: ApiEndpoint;
1916
+ apiUrlEntry?: ApiUrlEntry | null;
1730
1917
  [key: string]: unknown;
1731
1918
  }
1732
1919
  interface PraxisListWidgetEditorValue {
@@ -1735,6 +1922,7 @@ interface PraxisListWidgetEditorValue {
1735
1922
  declare class PraxisListWidgetConfigEditor implements SettingsValueProvider$1, AfterViewInit, OnDestroy {
1736
1923
  inputs: PraxisListWidgetEditorInputs | null;
1737
1924
  widgetKey?: string;
1925
+ context: Record<string, unknown>;
1738
1926
  listEditor?: PraxisListConfigEditor;
1739
1927
  readonly isDirty$: BehaviorSubject<boolean>;
1740
1928
  readonly isValid$: BehaviorSubject<boolean>;
@@ -1751,6 +1939,8 @@ declare class PraxisListWidgetConfigEditor implements SettingsValueProvider$1, A
1751
1939
  private publishDirty;
1752
1940
  get config(): PraxisListConfig;
1753
1941
  get listId(): string | undefined;
1942
+ get endpointKey(): ApiEndpoint | undefined;
1943
+ get apiUrlEntry(): ApiUrlEntry | null | undefined;
1754
1944
  ngAfterViewInit(): void;
1755
1945
  ngOnDestroy(): void;
1756
1946
  getSettingsValue(): PraxisListWidgetEditorValue;
@@ -1759,7 +1949,7 @@ declare class PraxisListWidgetConfigEditor implements SettingsValueProvider$1, A
1759
1949
  private initializeChildEditor;
1760
1950
  private buildValue;
1761
1951
  static ɵfac: i0.ɵɵFactoryDeclaration<PraxisListWidgetConfigEditor, never>;
1762
- static ɵcmp: i0.ɵɵComponentDeclaration<PraxisListWidgetConfigEditor, "praxis-list-widget-config-editor", never, { "inputs": { "alias": "inputs"; "required": false; }; "widgetKey": { "alias": "widgetKey"; "required": false; }; }, {}, never, never, true, never>;
1952
+ static ɵcmp: i0.ɵɵComponentDeclaration<PraxisListWidgetConfigEditor, "praxis-list-widget-config-editor", never, { "inputs": { "alias": "inputs"; "required": false; }; "widgetKey": { "alias": "widgetKey"; "required": false; }; "context": { "alias": "context"; "required": false; }; }, {}, never, never, true, never>;
1763
1953
  }
1764
1954
 
1765
1955
  declare function createListAuthoringDocument(source: {
@@ -1821,6 +2011,9 @@ declare function evaluateTemplate(def: TemplateDef | undefined, item: any, optio
1821
2011
  variant?: 'filled' | 'outlined';
1822
2012
  };
1823
2013
  } | null;
2014
+ declare function safeFormatDate(date: Date, format?: string, locale?: string, style?: string): string;
2015
+ declare function safeFormatDateTime(date: Date, format?: string, locale?: string, style?: string): string;
2016
+ declare function formatRelativeTime(date: Date, locale?: string, baseDate?: Date): string;
1824
2017
 
1825
2018
  type ListRichContentP0Node = RichPresenterNode | RichComposeNode;
1826
2019
  declare function isListTemplateSupportedByRichContentP0(template?: TemplateDef | null): boolean;
@@ -1828,6 +2021,7 @@ declare function mapListTemplateToRichContentP0(template?: TemplateDef | null):
1828
2021
 
1829
2022
  declare function adaptSelection(config: PraxisListConfig | undefined, items: any[]): ListSelectionEvent;
1830
2023
 
2024
+ declare const PRAXIS_LIST_INSERTION_PRESETS: NonNullable<ComponentDocMeta['insertionPresets']>;
1831
2025
  declare const PRAXIS_LIST_COMPONENT_METADATA: ComponentDocMeta;
1832
2026
  declare function providePraxisListMetadata(): Provider;
1833
2027
 
@@ -1947,6 +2141,20 @@ interface DemoItem {
1947
2141
  title: string;
1948
2142
  meta: string;
1949
2143
  description: string;
2144
+ badge?: string;
2145
+ badgeTone?: string;
2146
+ markerColor?: string;
2147
+ icon?: string;
2148
+ avatarText?: string;
2149
+ children?: Array<{
2150
+ label: string;
2151
+ description: string;
2152
+ meta?: string;
2153
+ badge?: string;
2154
+ badgeTone?: string;
2155
+ markerColor?: string;
2156
+ icon?: string;
2157
+ }>;
1950
2158
  }>;
1951
2159
  }
1952
2160
  declare class PraxisListDocPageComponent {
@@ -1986,9 +2194,13 @@ declare class PraxisListDocPageComponent {
1986
2194
  model: "hotel";
1987
2195
  groupBy: undefined;
1988
2196
  itemSpacing?: "none" | "tight" | "default" | "relaxed";
2197
+ itemAppearance?: "flat" | "card" | "capsule";
1989
2198
  dividers?: "none" | "between" | "all";
2199
+ cardColumns?: _praxisui_list.ListCardColumns;
2200
+ cardMinWidth?: string;
2201
+ cardMinHeight?: string;
1990
2202
  stickySectionHeader?: boolean;
1991
- virtualScroll?: boolean;
2203
+ virtualScroll?: boolean | _praxisui_list.PraxisListVirtualScrollConfig;
1992
2204
  pageSize?: number;
1993
2205
  rowLayout?: {
1994
2206
  type?: "grid" | "flex";
@@ -2108,27 +2320,8 @@ declare class PraxisListDocPageComponent {
2108
2320
  errorTemplate?: _praxisui_list.TemplateDef;
2109
2321
  };
2110
2322
  };
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
- }>;
2323
+ actions?: _praxisui_list.PraxisListItemAction[];
2324
+ itemActions?: _praxisui_list.PraxisListItemAction[];
2132
2325
  i18n?: _praxisui_list.PraxisListI18nConfig;
2133
2326
  ui?: {
2134
2327
  showSearch?: boolean;
@@ -2197,7 +2390,14 @@ declare const PRAXIS_LIST_EN_US: {
2197
2390
  readonly collapseDetails: "Collapse details";
2198
2391
  readonly itemDetails: "Item details";
2199
2392
  readonly emptyState: "No items available";
2393
+ readonly emptyStateDescription: "There are no items to display right now.";
2394
+ readonly emptyStateFilteredTitle: "No results found";
2395
+ readonly emptyStateFilteredDescription: "Review the active filters or adjust the search term.";
2396
+ readonly emptyStateClearSearchAction: "Clear search";
2397
+ readonly emptyStateConnectResourceTitle: "Choose the list resource";
2200
2398
  readonly emptyStateConnectResource: "Connect this list to a resource to load items.";
2399
+ readonly emptyStateConnectResourceAction: "Select resource";
2400
+ readonly emptyStateConfigureAction: "Configure list";
2201
2401
  readonly recordOpenUnavailable: "Unable to open details for this item.";
2202
2402
  readonly 'selection.ariaLabel': "Selectable list";
2203
2403
  readonly 'selection.selectItem': "Select item";
@@ -2224,6 +2424,14 @@ declare const PRAXIS_LIST_EN_US: {
2224
2424
  readonly Appearance: "Appearance";
2225
2425
  readonly 'Assistant-applied adjustments replace the entire configuration object.': "Assistant-applied adjustments replace the entire configuration object.";
2226
2426
  readonly 'applyConfigFromAdapter does not perform a deep merge. Make sure the adapter sends the full config.': "applyConfigFromAdapter does not perform a deep merge. Make sure the adapter sends the full config.";
2427
+ readonly 'Configure how the list loads records: connect a remote API resource or keep local/sample items.': "Configure how the list loads records: connect a remote API resource or keep local/sample items.";
2428
+ readonly 'When local/sample items (dataSource.data) are present, they take precedence over the remote API resource (resourcePath). Switch to the remote resource when you are ready to load live data.': "When local/sample items (dataSource.data) are present, they take precedence over the remote API resource (resourcePath). Switch to the remote resource when you are ready to load live data.";
2429
+ readonly 'Active data source': "Active data source";
2430
+ readonly 'Local / sample data': "Local / sample data";
2431
+ readonly 'Remote resource (API)': "Remote resource (API)";
2432
+ readonly 'No data source configured': "No data source configured";
2433
+ readonly 'Use remote resource (remove local data)': "Use remote resource (remove local data)";
2434
+ readonly 'Restore local data': "Restore local data";
2227
2435
  readonly 'Resource (API)': "Resource (API)";
2228
2436
  readonly 'List resource': "List resource";
2229
2437
  readonly 'Select resource': "Select resource";
@@ -2585,7 +2793,14 @@ declare const PRAXIS_LIST_PT_BR: {
2585
2793
  readonly collapseDetails: "Recolher detalhes";
2586
2794
  readonly itemDetails: "Detalhes do item";
2587
2795
  readonly emptyState: "Nenhum item disponível";
2796
+ readonly emptyStateDescription: "Não há itens para exibir neste momento.";
2797
+ readonly emptyStateFilteredTitle: "Nenhum resultado encontrado";
2798
+ readonly emptyStateFilteredDescription: "Revise os filtros ou ajuste o termo de busca.";
2799
+ readonly emptyStateClearSearchAction: "Limpar busca";
2800
+ readonly emptyStateConnectResourceTitle: "Escolha o recurso da lista";
2588
2801
  readonly emptyStateConnectResource: "Conecte a lista a um recurso para carregar os itens.";
2802
+ readonly emptyStateConnectResourceAction: "Selecionar recurso";
2803
+ readonly emptyStateConfigureAction: "Configurar lista";
2589
2804
  readonly recordOpenUnavailable: "Não foi possível abrir os detalhes deste item.";
2590
2805
  readonly 'selection.ariaLabel': "Lista selecionável";
2591
2806
  readonly 'selection.selectItem': "Selecionar item";
@@ -2612,6 +2827,14 @@ declare const PRAXIS_LIST_PT_BR: {
2612
2827
  readonly Appearance: "Aparência";
2613
2828
  readonly 'Assistant-applied adjustments replace the entire configuration object.': "Observação: ajustes aplicados pelo assistente substituem o objeto de configuração inteiro.";
2614
2829
  readonly 'applyConfigFromAdapter does not perform a deep merge. Make sure the adapter sends the full config.': "O applyConfigFromAdapter não faz merge profundo. Garanta que o adapter envie a configuração completa.";
2830
+ readonly 'Configure how the list loads records: connect a remote API resource or keep local/sample items.': "Defina como a lista carrega os registros: conecte um recurso remoto (API) ou mantenha itens locais/de exemplo.";
2831
+ readonly 'When local/sample items (dataSource.data) are present, they take precedence over the remote API resource (resourcePath). Switch to the remote resource when you are ready to load live data.': "Quando há itens locais/de exemplo (dataSource.data), eles têm precedência sobre o recurso remoto (resourcePath). Alterne para o recurso remoto quando quiser carregar dados reais da API.";
2832
+ readonly 'Active data source': "Fonte ativa";
2833
+ readonly 'Local / sample data': "Dados locais / de exemplo";
2834
+ readonly 'Remote resource (API)': "Recurso remoto (API)";
2835
+ readonly 'No data source configured': "Nenhuma fonte configurada";
2836
+ readonly 'Use remote resource (remove local data)': "Usar recurso remoto (remover dados locais)";
2837
+ readonly 'Restore local data': "Restaurar dados locais";
2615
2838
  readonly 'Resource (API)': "Recurso (API)";
2616
2839
  readonly 'List resource': "Recurso da lista";
2617
2840
  readonly 'Select resource': "Selecionar recurso";
@@ -2955,5 +3178,5 @@ declare const PRAXIS_LIST_PT_BR: {
2955
3178
  readonly 'Advanced row CSS': "CSS avançado da linha";
2956
3179
  };
2957
3180
 
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 };
3181
+ 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 };
3182
+ export type { Capability, CapabilityCatalog, CapabilityCategory, EditorDiagnostic, EditorDocument, ExecutiveAlert, JsonEditorEvent, JsonValidationResult, ListActionEvent, ListApplyPlan, ListAuthoringDocument, ListCardColumns, ListExpansionSectionDef, ListExpansionSectionType, ListFeatureDef, ListItemEvent, ListItemStateTone, 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 };