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

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;
@@ -739,6 +795,7 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
739
795
  private getExportFileExtension;
740
796
  private getExportMimeType;
741
797
  private cloneForExportEvent;
798
+ openQuickConnect(): void;
742
799
  openConfigEditor(): void;
743
800
  private openConfigEditorPanel;
744
801
  openAiAssistant(): void;
@@ -774,6 +831,7 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
774
831
  retryRemoteData(): void;
775
832
  private focusCollectionBeforeReload;
776
833
  onSearchInput(val: string): void;
834
+ clearSearch(): void;
777
835
  isRemoteDataMode(): boolean;
778
836
  activeSortValue(sort: string[] | undefined): string;
779
837
  hasSortOption(value: string): boolean;
@@ -798,6 +856,7 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
798
856
  private storageKey;
799
857
  private componentKeyId;
800
858
  private readonly crud;
859
+ private readonly resourceDiscovery;
801
860
  private executeSchemaInferenceForPlan;
802
861
  private evalSlot;
803
862
  private resolveSlotTemplate;
@@ -844,10 +903,16 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
844
903
  private toBoolean;
845
904
  private prettyLabel;
846
905
  private mapDateStyle;
906
+ private mapDateTimeStyle;
847
907
  starIcon(index: number, ratingValue: string | number): string;
848
908
  isThemeColor(color?: string): boolean;
909
+ private normalizeTemplatingMapKey;
910
+ private lookupTemplatingMapValue;
911
+ resolveSemanticTone(color?: string): 'info' | 'success' | 'warning' | 'danger' | 'neutral' | undefined;
912
+ private resolveSemanticBaseColor;
849
913
  chipStyle(color?: string, variant?: 'filled' | 'outlined'): string;
850
914
  iconStyle(color?: string): string;
915
+ leadingIconStyle(color?: string, extraStyle?: string): string;
851
916
  actionIconStyle(color?: string): string;
852
917
  buttonStyle(color?: string, variant?: 'stroked' | 'raised' | 'flat'): string;
853
918
  ratingMax(def?: any): number;
@@ -881,7 +946,7 @@ declare class PraxisList implements OnInit, OnChanges, AfterViewInit, OnDestroy
881
946
  private normalizeExpansionItems;
882
947
  private normalizeKeyValueItems;
883
948
  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>;
949
+ 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
950
  static ngAcceptInputType_enableCustomization: unknown;
886
951
  }
887
952
 
@@ -1184,9 +1249,12 @@ type NormalizedListConfig = Omit<PraxisListConfig, 'dataSource' | 'layout' | 'se
1184
1249
  lines: 1 | 2 | 3;
1185
1250
  dividers?: 'none' | 'between' | 'all';
1186
1251
  model?: 'standard' | 'media' | 'hotel';
1252
+ cardColumns?: ListCardColumns;
1253
+ cardMinWidth?: string;
1254
+ cardMinHeight?: string;
1187
1255
  groupBy?: string;
1188
1256
  stickySectionHeader?: boolean;
1189
- virtualScroll?: boolean;
1257
+ virtualScroll?: boolean | PraxisListVirtualScrollConfig;
1190
1258
  pageSize?: number;
1191
1259
  rowLayout?: NonNullable<PraxisListConfig['layout']>['rowLayout'];
1192
1260
  };
@@ -1210,6 +1278,7 @@ type NormalizedListConfig = Omit<PraxisListConfig, 'dataSource' | 'layout' | 'se
1210
1278
  formControlPath?: string;
1211
1279
  compareBy?: string;
1212
1280
  return?: 'value' | 'item' | 'id';
1281
+ showControl?: boolean;
1213
1282
  };
1214
1283
  i18n: {
1215
1284
  locale?: string;
@@ -1229,6 +1298,16 @@ type ExportPreviewRow = Record<string, string>;
1229
1298
  declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
1230
1299
  config: PraxisListConfig;
1231
1300
  listId?: string;
1301
+ /**
1302
+ * Logical endpoint key used to scope catalog discovery and schema resolution
1303
+ * in multi-module / multi-gateway hosts. Takes precedence over SETTINGS_PANEL_DATA when bound.
1304
+ */
1305
+ endpointKey?: ApiEndpoint;
1306
+ /**
1307
+ * Explicit API URL entry override used for catalog discovery and schema resolution.
1308
+ * Takes precedence over SETTINGS_PANEL_DATA when bound.
1309
+ */
1310
+ apiUrlEntry?: ApiUrlEntry | null;
1232
1311
  document: ListAuthoringDocument;
1233
1312
  working: NormalizedListConfig;
1234
1313
  private readonly invalidSurfaceDrafts;
@@ -1248,8 +1327,28 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
1248
1327
  private initialJson;
1249
1328
  private lastJson;
1250
1329
  fields: string[];
1330
+ fieldSearchQuery: string;
1331
+ fieldMetaByName: Record<string, {
1332
+ name: string;
1333
+ label?: string;
1334
+ type?: string;
1335
+ description?: string;
1336
+ enumValues?: string[];
1337
+ optionLabels?: Record<string, string>;
1338
+ }>;
1339
+ selectedResourceOption: DiscoveredResourceOption | null;
1340
+ schemaWarning: string;
1251
1341
  private lastResourcePath?;
1252
1342
  sortField?: string;
1343
+ private normalizeFieldSearch;
1344
+ onFieldSelectOpenedChange(_opened: boolean): void;
1345
+ getFilteredFields(selected?: string | string[] | null): string[];
1346
+ onDiscoveredResourceSelected(entry: DiscoveredResourceOption | null): void;
1347
+ private extractFieldDomainMeta;
1348
+ getFieldLabel(fieldName?: string | null): string;
1349
+ getFieldTypeBadge(fieldName?: string | null): string;
1350
+ getFieldDescription(fieldName?: string | null): string;
1351
+ getFieldTriggerLabel(fieldName?: string | null): string;
1253
1352
  sortDir: 'asc' | 'desc';
1254
1353
  mappingPrimary: {
1255
1354
  field?: string;
@@ -1413,7 +1512,10 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
1413
1512
  queryJson: string;
1414
1513
  queryError: string;
1415
1514
  actionShowIfDrafts: Record<number, string>;
1515
+ private stashedLocalData?;
1516
+ private stashedLocalTemplating?;
1416
1517
  private crud;
1518
+ private readonly resourceDiscovery;
1417
1519
  private readonly i18n;
1418
1520
  private resourcePathChanges;
1419
1521
  constructor(injected?: any);
@@ -1442,8 +1544,21 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
1442
1544
  private snapshotCurrentDocument;
1443
1545
  private syncSortStateFromWorking;
1444
1546
  private resetVisualMappingState;
1547
+ private buildDiscoveryOptions;
1445
1548
  private setupSchemaWatcher;
1549
+ private shouldAutoInferSlots;
1550
+ private pendingRemoteSlotInference;
1551
+ private lastNonEmptyResourcePath;
1552
+ syncSchemaFieldsFromWorking(immediate?: boolean): void;
1553
+ loadFieldsFromResource(resourcePath: string): void;
1446
1554
  onResourcePathChange(value: string): void;
1555
+ hasRemoteResourcePath(): boolean;
1556
+ getActiveDataSourceMode(): 'local' | 'remote' | 'empty';
1557
+ getActiveDataSourceLabel(): string;
1558
+ hasStashedLocalData(): boolean;
1559
+ useRemoteResource(): void;
1560
+ clearLocalData(): void;
1561
+ restoreLocalData(): void;
1447
1562
  getLocalDataRows(): any[];
1448
1563
  getLocalDataSummary(): string;
1449
1564
  getLocalDataPrecedenceWarning(): string;
@@ -1457,6 +1572,16 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
1457
1572
  applySalaryPreset(): void;
1458
1573
  applyPricePreset(): void;
1459
1574
  private applyCurrencyPreset;
1575
+ private resolveStatusDomainField;
1576
+ private inferSemanticStatusColor;
1577
+ resolveDomainColorMapEntries(explicitField?: string): Array<{
1578
+ key: string;
1579
+ color: string;
1580
+ }>;
1581
+ resolveDomainLabelMapEntries(explicitField?: string): Array<{
1582
+ key: string;
1583
+ label: string;
1584
+ }>;
1460
1585
  private defaultStatusColorMapEntries;
1461
1586
  previewData: {
1462
1587
  title: string;
@@ -1565,6 +1690,19 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
1565
1690
  ngDoCheck(): void;
1566
1691
  reset(): void;
1567
1692
  onLayoutChanged(): void;
1693
+ virtualScrollEnabled(): boolean;
1694
+ onVirtualScrollEnabledChange(enabled: boolean): void;
1695
+ getVirtualScrollViewportHeight(): string;
1696
+ onVirtualScrollViewportHeightChange(value: string): void;
1697
+ getVirtualScrollItemSize(): number | undefined;
1698
+ onVirtualScrollItemSizeChange(value: any): void;
1699
+ getVirtualScrollMinBufferPx(): number | undefined;
1700
+ onVirtualScrollMinBufferPxChange(value: any): void;
1701
+ getVirtualScrollMaxBufferPx(): number | undefined;
1702
+ onVirtualScrollMaxBufferPxChange(value: any): void;
1703
+ getVirtualScrollCompatibilityWarning(): string;
1704
+ private ensureVirtualScrollObjectDraft;
1705
+ private collapseVirtualScrollDraftIfDefault;
1568
1706
  rowLayoutEnabled(): boolean;
1569
1707
  onRowLayoutEnabledChange(enabled: boolean): void;
1570
1708
  applyCorporateRowLayoutPreset(): void;
@@ -1642,6 +1780,49 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
1642
1780
  onRuleConditionChanged(rule: {
1643
1781
  condition?: JsonLogicExpression | null;
1644
1782
  }, raw: string): void;
1783
+ readonly cardColumnsOptions: readonly ListCardColumns[];
1784
+ readonly ruleConditionOperators: readonly ["==", "!=", ">", ">=", "<", "<="];
1785
+ readonly itemStateToneOptions: ReadonlyArray<{
1786
+ value: ListItemStateTone;
1787
+ label: string;
1788
+ cssClass: string;
1789
+ border: string;
1790
+ background: string;
1791
+ }>;
1792
+ getCardColumnsModel(): ListCardColumns;
1793
+ onCardColumnsChange(value: ListCardColumns): void;
1794
+ applyCardWidthPreset(width: string): void;
1795
+ applyCardHeightPreset(height: string): void;
1796
+ onStatusPositionChange(position: 'inline' | 'top-right' | undefined): void;
1797
+ applyStandardStatusColorMap(): void;
1798
+ getSlotAnatomyItems(): Array<{
1799
+ slot: 'leading' | 'primary' | 'secondary' | 'meta' | 'trailing' | 'features';
1800
+ label: string;
1801
+ role: string;
1802
+ mapped: boolean;
1803
+ summary: string;
1804
+ }>;
1805
+ isSlotMapped(slot: 'leading' | 'primary' | 'secondary' | 'meta' | 'trailing' | 'features'): boolean;
1806
+ getSlotMappingSummary(slot: 'leading' | 'primary' | 'secondary' | 'meta' | 'trailing' | 'features'): string;
1807
+ applyDidacticSlotPreset(preset: 'operational-card' | 'executive-compact-card' | 'dense-list'): void;
1808
+ applyItemStyleTonePreset(rule: ListItemStyleRule, tone: ListItemStateTone): void;
1809
+ private parseSimpleRuleCondition;
1810
+ getGuidedRuleConditionField(rule: {
1811
+ condition?: JsonLogicExpression | null;
1812
+ }): string;
1813
+ getGuidedRuleConditionOperator(rule: {
1814
+ condition?: JsonLogicExpression | null;
1815
+ }): string;
1816
+ getGuidedRuleConditionValue(rule: {
1817
+ condition?: JsonLogicExpression | null;
1818
+ }): string;
1819
+ onGuidedRuleConditionChange(rule: {
1820
+ condition?: JsonLogicExpression | null;
1821
+ }, patch: {
1822
+ field?: string;
1823
+ operator?: string;
1824
+ value?: string;
1825
+ }): void;
1645
1826
  getItemStyleEffect(rule: ListItemStyleRule): ListItemStyleEffect | undefined;
1646
1827
  ensureItemStyleEffect(rule: ListItemStyleRule): void;
1647
1828
  clearItemStyleEffects(rule: ListItemStyleRule): void;
@@ -1694,6 +1875,7 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
1694
1875
  private insertIntoFeatureExpr;
1695
1876
  private updateFeatureExpr;
1696
1877
  private hydrateMappingFromTemplating;
1878
+ private syncDirtyStateNow;
1697
1879
  markDirty(): void;
1698
1880
  private getMappingSnapshot;
1699
1881
  private updateMappingDirty;
@@ -1708,6 +1890,8 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
1708
1890
  private looksLikeJsonPayload;
1709
1891
  private normalizeSurfaceOpenPayload;
1710
1892
  verify(): void;
1893
+ private isGenericInferredChipColorMap;
1894
+ private isGenericInferredChipLabelMap;
1711
1895
  inferFromFields(): void;
1712
1896
  generateFeaturesFromMetaComposition(): void;
1713
1897
  metaComposePreview(): string;
@@ -1720,13 +1904,15 @@ declare class PraxisListConfigEditor implements SettingsValueProvider, DoCheck {
1720
1904
  private suggestIcon;
1721
1905
  getTypeIcon(type: string): string;
1722
1906
  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>;
1907
+ 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
1908
  }
1725
1909
 
1726
1910
  type PersistenceStrategy = 'input-first' | 'local-first' | 'volatile';
1727
1911
  interface PraxisListWidgetEditorInputs {
1728
1912
  config?: PraxisListConfig | null;
1729
1913
  listId?: string;
1914
+ endpointKey?: ApiEndpoint;
1915
+ apiUrlEntry?: ApiUrlEntry | null;
1730
1916
  [key: string]: unknown;
1731
1917
  }
1732
1918
  interface PraxisListWidgetEditorValue {
@@ -1735,6 +1921,7 @@ interface PraxisListWidgetEditorValue {
1735
1921
  declare class PraxisListWidgetConfigEditor implements SettingsValueProvider$1, AfterViewInit, OnDestroy {
1736
1922
  inputs: PraxisListWidgetEditorInputs | null;
1737
1923
  widgetKey?: string;
1924
+ context: Record<string, unknown>;
1738
1925
  listEditor?: PraxisListConfigEditor;
1739
1926
  readonly isDirty$: BehaviorSubject<boolean>;
1740
1927
  readonly isValid$: BehaviorSubject<boolean>;
@@ -1751,6 +1938,8 @@ declare class PraxisListWidgetConfigEditor implements SettingsValueProvider$1, A
1751
1938
  private publishDirty;
1752
1939
  get config(): PraxisListConfig;
1753
1940
  get listId(): string | undefined;
1941
+ get endpointKey(): ApiEndpoint | undefined;
1942
+ get apiUrlEntry(): ApiUrlEntry | null | undefined;
1754
1943
  ngAfterViewInit(): void;
1755
1944
  ngOnDestroy(): void;
1756
1945
  getSettingsValue(): PraxisListWidgetEditorValue;
@@ -1759,7 +1948,7 @@ declare class PraxisListWidgetConfigEditor implements SettingsValueProvider$1, A
1759
1948
  private initializeChildEditor;
1760
1949
  private buildValue;
1761
1950
  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>;
1951
+ 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
1952
  }
1764
1953
 
1765
1954
  declare function createListAuthoringDocument(source: {
@@ -1821,6 +2010,9 @@ declare function evaluateTemplate(def: TemplateDef | undefined, item: any, optio
1821
2010
  variant?: 'filled' | 'outlined';
1822
2011
  };
1823
2012
  } | null;
2013
+ declare function safeFormatDate(date: Date, format?: string, locale?: string, style?: string): string;
2014
+ declare function safeFormatDateTime(date: Date, format?: string, locale?: string, style?: string): string;
2015
+ declare function formatRelativeTime(date: Date, locale?: string, baseDate?: Date): string;
1824
2016
 
1825
2017
  type ListRichContentP0Node = RichPresenterNode | RichComposeNode;
1826
2018
  declare function isListTemplateSupportedByRichContentP0(template?: TemplateDef | null): boolean;
@@ -1828,6 +2020,7 @@ declare function mapListTemplateToRichContentP0(template?: TemplateDef | null):
1828
2020
 
1829
2021
  declare function adaptSelection(config: PraxisListConfig | undefined, items: any[]): ListSelectionEvent;
1830
2022
 
2023
+ declare const PRAXIS_LIST_INSERTION_PRESETS: NonNullable<ComponentDocMeta['insertionPresets']>;
1831
2024
  declare const PRAXIS_LIST_COMPONENT_METADATA: ComponentDocMeta;
1832
2025
  declare function providePraxisListMetadata(): Provider;
1833
2026
 
@@ -1947,6 +2140,20 @@ interface DemoItem {
1947
2140
  title: string;
1948
2141
  meta: string;
1949
2142
  description: string;
2143
+ badge?: string;
2144
+ badgeTone?: string;
2145
+ markerColor?: string;
2146
+ icon?: string;
2147
+ avatarText?: string;
2148
+ children?: Array<{
2149
+ label: string;
2150
+ description: string;
2151
+ meta?: string;
2152
+ badge?: string;
2153
+ badgeTone?: string;
2154
+ markerColor?: string;
2155
+ icon?: string;
2156
+ }>;
1950
2157
  }>;
1951
2158
  }
1952
2159
  declare class PraxisListDocPageComponent {
@@ -1986,9 +2193,13 @@ declare class PraxisListDocPageComponent {
1986
2193
  model: "hotel";
1987
2194
  groupBy: undefined;
1988
2195
  itemSpacing?: "none" | "tight" | "default" | "relaxed";
2196
+ itemAppearance?: "flat" | "card" | "capsule";
1989
2197
  dividers?: "none" | "between" | "all";
2198
+ cardColumns?: _praxisui_list.ListCardColumns;
2199
+ cardMinWidth?: string;
2200
+ cardMinHeight?: string;
1990
2201
  stickySectionHeader?: boolean;
1991
- virtualScroll?: boolean;
2202
+ virtualScroll?: boolean | _praxisui_list.PraxisListVirtualScrollConfig;
1992
2203
  pageSize?: number;
1993
2204
  rowLayout?: {
1994
2205
  type?: "grid" | "flex";
@@ -2108,27 +2319,8 @@ declare class PraxisListDocPageComponent {
2108
2319
  errorTemplate?: _praxisui_list.TemplateDef;
2109
2320
  };
2110
2321
  };
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
- }>;
2322
+ actions?: _praxisui_list.PraxisListItemAction[];
2323
+ itemActions?: _praxisui_list.PraxisListItemAction[];
2132
2324
  i18n?: _praxisui_list.PraxisListI18nConfig;
2133
2325
  ui?: {
2134
2326
  showSearch?: boolean;
@@ -2197,7 +2389,14 @@ declare const PRAXIS_LIST_EN_US: {
2197
2389
  readonly collapseDetails: "Collapse details";
2198
2390
  readonly itemDetails: "Item details";
2199
2391
  readonly emptyState: "No items available";
2392
+ readonly emptyStateDescription: "There are no items to display right now.";
2393
+ readonly emptyStateFilteredTitle: "No results found";
2394
+ readonly emptyStateFilteredDescription: "Review the active filters or adjust the search term.";
2395
+ readonly emptyStateClearSearchAction: "Clear search";
2396
+ readonly emptyStateConnectResourceTitle: "Choose the list resource";
2200
2397
  readonly emptyStateConnectResource: "Connect this list to a resource to load items.";
2398
+ readonly emptyStateConnectResourceAction: "Select resource";
2399
+ readonly emptyStateConfigureAction: "Configure list";
2201
2400
  readonly recordOpenUnavailable: "Unable to open details for this item.";
2202
2401
  readonly 'selection.ariaLabel': "Selectable list";
2203
2402
  readonly 'selection.selectItem': "Select item";
@@ -2224,6 +2423,14 @@ declare const PRAXIS_LIST_EN_US: {
2224
2423
  readonly Appearance: "Appearance";
2225
2424
  readonly 'Assistant-applied adjustments replace the entire configuration object.': "Assistant-applied adjustments replace the entire configuration object.";
2226
2425
  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.";
2426
+ 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.";
2427
+ 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.";
2428
+ readonly 'Active data source': "Active data source";
2429
+ readonly 'Local / sample data': "Local / sample data";
2430
+ readonly 'Remote resource (API)': "Remote resource (API)";
2431
+ readonly 'No data source configured': "No data source configured";
2432
+ readonly 'Use remote resource (remove local data)': "Use remote resource (remove local data)";
2433
+ readonly 'Restore local data': "Restore local data";
2227
2434
  readonly 'Resource (API)': "Resource (API)";
2228
2435
  readonly 'List resource': "List resource";
2229
2436
  readonly 'Select resource': "Select resource";
@@ -2585,7 +2792,14 @@ declare const PRAXIS_LIST_PT_BR: {
2585
2792
  readonly collapseDetails: "Recolher detalhes";
2586
2793
  readonly itemDetails: "Detalhes do item";
2587
2794
  readonly emptyState: "Nenhum item disponível";
2795
+ readonly emptyStateDescription: "Não há itens para exibir neste momento.";
2796
+ readonly emptyStateFilteredTitle: "Nenhum resultado encontrado";
2797
+ readonly emptyStateFilteredDescription: "Revise os filtros ou ajuste o termo de busca.";
2798
+ readonly emptyStateClearSearchAction: "Limpar busca";
2799
+ readonly emptyStateConnectResourceTitle: "Escolha o recurso da lista";
2588
2800
  readonly emptyStateConnectResource: "Conecte a lista a um recurso para carregar os itens.";
2801
+ readonly emptyStateConnectResourceAction: "Selecionar recurso";
2802
+ readonly emptyStateConfigureAction: "Configurar lista";
2589
2803
  readonly recordOpenUnavailable: "Não foi possível abrir os detalhes deste item.";
2590
2804
  readonly 'selection.ariaLabel': "Lista selecionável";
2591
2805
  readonly 'selection.selectItem': "Selecionar item";
@@ -2612,6 +2826,14 @@ declare const PRAXIS_LIST_PT_BR: {
2612
2826
  readonly Appearance: "Aparência";
2613
2827
  readonly 'Assistant-applied adjustments replace the entire configuration object.': "Observação: ajustes aplicados pelo assistente substituem o objeto de configuração inteiro.";
2614
2828
  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.";
2829
+ 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.";
2830
+ 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.";
2831
+ readonly 'Active data source': "Fonte ativa";
2832
+ readonly 'Local / sample data': "Dados locais / de exemplo";
2833
+ readonly 'Remote resource (API)': "Recurso remoto (API)";
2834
+ readonly 'No data source configured': "Nenhuma fonte configurada";
2835
+ readonly 'Use remote resource (remove local data)': "Usar recurso remoto (remover dados locais)";
2836
+ readonly 'Restore local data': "Restaurar dados locais";
2615
2837
  readonly 'Resource (API)': "Recurso (API)";
2616
2838
  readonly 'List resource': "Recurso da lista";
2617
2839
  readonly 'Select resource': "Selecionar recurso";
@@ -2955,5 +3177,5 @@ declare const PRAXIS_LIST_PT_BR: {
2955
3177
  readonly 'Advanced row CSS': "CSS avançado da linha";
2956
3178
  };
2957
3179
 
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 };
3180
+ 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 };
3181
+ 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 };