@praxisui/charts 9.0.0-beta.72 → 9.0.0-beta.74

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.
@@ -1,10 +1,9 @@
1
1
  import * as _praxisui_charts from '@praxisui/charts';
2
2
  import * as _angular_core from '@angular/core';
3
- import { InjectionToken, Provider, AfterViewInit, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';
3
+ import { InjectionToken, Provider, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';
4
4
  import * as _praxisui_core from '@praxisui/core';
5
- import { PraxisTextValue, PraxisPresentationVisualizationConfig, PraxisPresentationVisualizationPoint, PraxisPresentationVisualizationSegment, PraxisPresentationVisualizationThreshold, WidgetDefinition, WidgetShellConfig, WidgetInstance, ComponentMetadataRegistry, ApiUrlConfig, PraxisI18nService, PraxisAnalyticsProjection, AnalyticsSchemaContractService, AnalyticsPresentationResolver, WidgetPageDefinition, SettingsValueProvider, PraxisI18nDictionary, PraxisI18nConfig, PraxisI18nMessageDescriptor, ComponentAuthoringManifest, ComponentDocMeta } from '@praxisui/core';
5
+ import { PraxisAnalyticsComparisonStatsRequest, PraxisDataQueryContext, PraxisTextValue, PraxisPresentationVisualizationConfig, PraxisPresentationVisualizationPoint, PraxisPresentationVisualizationSegment, PraxisPresentationVisualizationThreshold, WidgetDefinition, WidgetShellConfig, WidgetInstance, ApiUrlConfig, PraxisI18nService, PraxisAnalyticsProjection, AnalyticsSchemaContractService, AnalyticsPresentationResolver, WidgetPageDefinition, SettingsValueProvider, ComponentConfigEditorContextResult, ResourceCapabilitySnapshot, PraxisI18nDictionary, PraxisI18nConfig, PraxisI18nMessageDescriptor, ComponentAuthoringManifest, ComponentDocMeta } from '@praxisui/core';
6
6
  import { Observable, BehaviorSubject } from 'rxjs';
7
- import { EChartsCoreOption } from 'echarts';
8
7
  import { HttpClient } from '@angular/common/http';
9
8
 
10
9
  type PraxisChartAxisType = 'category' | 'value' | 'time';
@@ -31,7 +30,7 @@ interface PraxisChartQueryMetricConfig {
31
30
  aggregation?: 'sum' | 'count' | 'distinct-count' | 'avg' | 'min' | 'max';
32
31
  alias?: string;
33
32
  }
34
- type PraxisChartStatsOperation = 'group-by' | 'timeseries' | 'distribution';
33
+ type PraxisChartStatsOperation = 'group-by' | 'timeseries' | 'distribution' | 'comparison';
35
34
  type PraxisChartStatsDistributionMode = 'terms' | 'histogram';
36
35
  type PraxisChartStatsOrderBy = 'key-asc' | 'key-desc' | 'value-asc' | 'value-desc';
37
36
  type PraxisChartStatsGranularity = 'day' | 'week' | 'month';
@@ -69,7 +68,7 @@ interface PraxisChartDistributionStatsRequest {
69
68
  limit?: number;
70
69
  orderBy?: 'KEY_ASC' | 'KEY_DESC' | 'VALUE_ASC' | 'VALUE_DESC';
71
70
  }
72
- type PraxisChartStatsRequest = PraxisChartGroupByStatsRequest | PraxisChartTimeSeriesStatsRequest | PraxisChartDistributionStatsRequest;
71
+ type PraxisChartStatsRequest = PraxisChartGroupByStatsRequest | PraxisChartTimeSeriesStatsRequest | PraxisChartDistributionStatsRequest | PraxisAnalyticsComparisonStatsRequest;
73
72
  interface PraxisChartQueryConfig {
74
73
  sourceKind?: 'praxis.stats';
75
74
  statsOperation?: PraxisChartStatsOperation;
@@ -99,16 +98,7 @@ interface PraxisChartRemoteDataSource {
99
98
  }
100
99
  type PraxisChartDataSource = PraxisChartLocalDataSource | PraxisChartRemoteDataSource;
101
100
 
102
- interface PraxisChartQueryContext {
103
- filters?: Record<string, unknown> | null;
104
- sort?: string[] | null;
105
- limit?: number | null;
106
- page?: {
107
- index?: number | null;
108
- size?: number | null;
109
- } | null;
110
- meta?: Record<string, unknown> | null;
111
- }
101
+ type PraxisChartQueryContext = PraxisDataQueryContext;
112
102
  type PraxisChartLoadState = 'idle' | 'loading' | 'ready' | 'empty' | 'error';
113
103
  interface PraxisChartInteractionConfig {
114
104
  pointClick?: boolean;
@@ -130,8 +120,17 @@ interface PraxisChartDeclarativeEventAction {
130
120
  target?: string;
131
121
  mapping?: Record<string, string>;
132
122
  }
123
+ interface PraxisChartPointActionEvent {
124
+ chartId?: string;
125
+ event: 'pointClick';
126
+ point: PraxisChartPointEvent;
127
+ filters: Record<string, unknown>;
128
+ target?: string;
129
+ action: PraxisChartDeclarativeEventAction;
130
+ }
133
131
  interface PraxisChartSelectionEvent extends PraxisChartPointEvent {
134
132
  selected: boolean;
133
+ mode: 'single';
135
134
  filters: Record<string, unknown>;
136
135
  action?: PraxisChartDeclarativeEventAction;
137
136
  }
@@ -142,6 +141,14 @@ interface PraxisChartCrossFilterEvent {
142
141
  action?: PraxisChartDeclarativeEventAction;
143
142
  source: PraxisChartSelectionEvent;
144
143
  }
144
+ interface PraxisChartDrillDownEvent {
145
+ chartId?: string;
146
+ filters: Record<string, unknown>;
147
+ target?: string;
148
+ action: PraxisChartDeclarativeEventAction;
149
+ source: PraxisChartSelectionEvent;
150
+ point: PraxisChartPointEvent;
151
+ }
145
152
  interface PraxisChartQueryRequestEvent {
146
153
  chartId?: string;
147
154
  dataSource: Extract<PraxisChartDataSource, {
@@ -266,6 +273,7 @@ interface PraxisChartConfig {
266
273
  preferredLoadState?: Extract<PraxisChartLoadState, 'idle' | 'loading' | 'ready' | 'empty' | 'error'>;
267
274
  }
268
275
 
276
+ declare const PRAXIS_X_UI_CHART_AUTHORABLE_VERSION: "0.1.0";
269
277
  type PraxisXUiChartKind = 'bar' | 'combo' | 'horizontal-bar' | 'line' | 'pie' | 'donut' | 'area' | 'stacked-bar' | 'stacked-area' | 'scatter';
270
278
  type PraxisXUiChartPreset = 'kpi-trend' | 'comparison' | 'distribution' | 'ranking' | 'composition' | 'hierarchical-drill-down';
271
279
  type PraxisXUiChartTextValue = string | {
@@ -324,6 +332,7 @@ interface PraxisXUiChartRefresh {
324
332
  }
325
333
  interface PraxisXUiChartSource {
326
334
  kind: PraxisXUiChartSourceKind;
335
+ /** Canonical operational resource path. Resource keys are discovery identities and must be resolved before persistence. */
327
336
  resource?: string;
328
337
  operation?: PraxisXUiChartStatsOperation;
329
338
  options?: PraxisXUiChartStatsSourceOptions;
@@ -414,6 +423,7 @@ interface ChartEditorResourceOption {
414
423
  label: string;
415
424
  path: string;
416
425
  description?: string;
426
+ operations?: PraxisXUiChartStatsOperation[];
417
427
  }
418
428
  interface ChartEditorFieldOption {
419
429
  field: string;
@@ -422,36 +432,42 @@ interface ChartEditorFieldOption {
422
432
  aggregable?: boolean;
423
433
  filterable?: boolean;
424
434
  roles?: Array<'dimension' | 'metric' | 'time'>;
435
+ resourceIds?: string[];
436
+ resourcePaths?: string[];
437
+ operations?: PraxisXUiChartStatsOperation[];
438
+ distributionModes?: PraxisXUiChartStatsDistributionMode[];
439
+ aggregations?: PraxisXUiChartAggregation[];
425
440
  }
441
+ type ChartEditorEventKey = 'pointClick' | 'selectionChange' | 'drillDown' | 'crossFilter';
426
442
  interface ChartEditorTargetOption {
427
443
  id: string;
428
444
  label: string;
429
445
  kind?: 'widget' | 'route' | 'panel' | 'event';
446
+ actions?: Array<PraxisXUiChartEventAction['action']>;
447
+ /**
448
+ * Canonical chart events whose exact composition links govern this target.
449
+ *
450
+ * Omission is reserved for legacy/manual host catalogs. Context-resolved
451
+ * catalogs always declare at least one event and therefore fail closed.
452
+ */
453
+ events?: ChartEditorEventKey[];
430
454
  }
431
455
 
432
- type PraxisDataQueryContextBridge = {
433
- filters?: Record<string, unknown> | null;
434
- sort?: string[] | null;
435
- limit?: number | null;
436
- page?: {
437
- index?: number | null;
438
- size?: number | null;
439
- } | null;
440
- meta?: Record<string, unknown> | null;
441
- };
442
456
  declare class PraxisChartComponent {
443
457
  readonly config: _angular_core.InputSignal<PraxisChartConfig>;
444
458
  readonly data: _angular_core.InputSignal<PraxisChartDataRow[] | null>;
445
459
  readonly chartDocument: _angular_core.InputSignal<PraxisXUiChartContract | null>;
446
460
  readonly filterCriteria: _angular_core.InputSignal<Record<string, unknown> | null>;
447
- readonly queryContext: _angular_core.InputSignal<PraxisDataQueryContextBridge | null>;
461
+ readonly queryContext: _angular_core.InputSignal<PraxisDataQueryContext | null>;
448
462
  readonly remoteDataResolver: _angular_core.InputSignal<PraxisChartRemoteDataResolver | null>;
449
463
  readonly enableCustomization: _angular_core.InputSignalWithTransform<boolean, unknown>;
450
464
  readonly availableResources: _angular_core.InputSignal<readonly ChartEditorResourceOption[]>;
451
465
  readonly availableFields: _angular_core.InputSignal<readonly ChartEditorFieldOption[]>;
452
466
  readonly availableTargets: _angular_core.InputSignal<readonly ChartEditorTargetOption[]>;
453
467
  readonly pointClick: _angular_core.OutputEmitterRef<PraxisChartPointEvent>;
468
+ readonly pointAction: _angular_core.OutputEmitterRef<PraxisChartPointActionEvent>;
454
469
  readonly selectionChange: _angular_core.OutputEmitterRef<PraxisChartSelectionEvent>;
470
+ readonly drillDown: _angular_core.OutputEmitterRef<PraxisChartDrillDownEvent>;
455
471
  readonly crossFilter: _angular_core.OutputEmitterRef<PraxisChartCrossFilterEvent>;
456
472
  readonly queryRequest: _angular_core.OutputEmitterRef<PraxisChartQueryRequestEvent>;
457
473
  readonly loadStateChange: _angular_core.OutputEmitterRef<PraxisChartLoadState>;
@@ -468,7 +484,10 @@ declare class PraxisChartComponent {
468
484
  private readonly settingsPanel;
469
485
  private readonly destroyRef;
470
486
  private readonly resizeObserver;
487
+ private resizeObserverHost;
471
488
  private readonly shellObserver;
489
+ private readonly themeObserver;
490
+ private readonly inheritedTheme;
472
491
  private readonly currentLoadState;
473
492
  private readonly remoteResolvedData;
474
493
  private readonly remoteRuntimeState;
@@ -484,7 +503,10 @@ declare class PraxisChartComponent {
484
503
  private previousRemoteSignature;
485
504
  private previousRemoteDataResolver;
486
505
  private previousDocumentSignature;
506
+ private inheritedThemeSignature;
487
507
  private editorSessionSubscriptions;
508
+ private remoteRequestSubscription;
509
+ private remoteRequestSequence;
488
510
  readonly effectiveConfig: _angular_core.Signal<PraxisChartConfig>;
489
511
  readonly resolvedData: _angular_core.Signal<PraxisChartDataRow[]>;
490
512
  readonly resolvedHeight: _angular_core.Signal<string>;
@@ -515,12 +537,20 @@ declare class PraxisChartComponent {
515
537
  private extractPointMetricValue;
516
538
  private executeRemoteDataRequest;
517
539
  private ensureResizeObserver;
540
+ private destroyResizeObserver;
518
541
  private hasRenderableSize;
519
542
  private toCssSize;
520
543
  private toCssAspectRatio;
521
544
  private buildRemoteSignature;
545
+ private cancelRemoteDataRequest;
522
546
  private clearEditorSessionSubscriptions;
523
547
  private observeShellSizingContext;
548
+ private observeThemeContext;
549
+ private syncInheritedTheme;
550
+ private isThemeVariant;
551
+ private applyInheritedTheme;
552
+ private cloneTheme;
553
+ private mergeOptionalThemeObject;
524
554
  private shouldFillShellContainer;
525
555
  private scheduleResizeAfterShellModeChange;
526
556
  private scheduleEngineResize;
@@ -528,7 +558,7 @@ declare class PraxisChartComponent {
528
558
  private cancelScheduledRender;
529
559
  private cancelScheduledResize;
530
560
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<PraxisChartComponent, never>;
531
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<PraxisChartComponent, "praxis-chart", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "chartDocument": { "alias": "chartDocument"; "required": false; "isSignal": true; }; "filterCriteria": { "alias": "filterCriteria"; "required": false; "isSignal": true; }; "queryContext": { "alias": "queryContext"; "required": false; "isSignal": true; }; "remoteDataResolver": { "alias": "remoteDataResolver"; "required": false; "isSignal": true; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; "isSignal": true; }; "availableResources": { "alias": "availableResources"; "required": false; "isSignal": true; }; "availableFields": { "alias": "availableFields"; "required": false; "isSignal": true; }; "availableTargets": { "alias": "availableTargets"; "required": false; "isSignal": true; }; }, { "pointClick": "pointClick"; "selectionChange": "selectionChange"; "crossFilter": "crossFilter"; "queryRequest": "queryRequest"; "loadStateChange": "loadStateChange"; "chartDocumentApplied": "chartDocumentApplied"; "chartDocumentSaved": "chartDocumentSaved"; }, never, never, true, never>;
561
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PraxisChartComponent, "praxis-chart", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "chartDocument": { "alias": "chartDocument"; "required": false; "isSignal": true; }; "filterCriteria": { "alias": "filterCriteria"; "required": false; "isSignal": true; }; "queryContext": { "alias": "queryContext"; "required": false; "isSignal": true; }; "remoteDataResolver": { "alias": "remoteDataResolver"; "required": false; "isSignal": true; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; "isSignal": true; }; "availableResources": { "alias": "availableResources"; "required": false; "isSignal": true; }; "availableFields": { "alias": "availableFields"; "required": false; "isSignal": true; }; "availableTargets": { "alias": "availableTargets"; "required": false; "isSignal": true; }; }, { "pointClick": "pointClick"; "pointAction": "pointAction"; "selectionChange": "selectionChange"; "drillDown": "drillDown"; "crossFilter": "crossFilter"; "queryRequest": "queryRequest"; "loadStateChange": "loadStateChange"; "chartDocumentApplied": "chartDocumentApplied"; "chartDocumentSaved": "chartDocumentSaved"; }, never, never, true, never>;
532
562
  }
533
563
 
534
564
  interface BulletBand {
@@ -749,11 +779,13 @@ interface ChartContractValidationResult {
749
779
 
750
780
  declare class ChartContractValidationService {
751
781
  validate(document: PraxisXUiChartContract): ChartContractValidationResult;
782
+ private validateVersion;
752
783
  private validateSource;
753
784
  private validateTheme;
754
785
  private validateMetrics;
755
786
  private validateSizing;
756
787
  private validateKinds;
788
+ private validateDistribution;
757
789
  private validateEvents;
758
790
  private validateEventAction;
759
791
  private error;
@@ -834,6 +866,13 @@ declare class PraxisChartDataTransformerService {
834
866
  private transformCartesian;
835
867
  private transformPie;
836
868
  private buildCartesianSeries;
869
+ private buildCategoryBuckets;
870
+ private resolveCategoryIdentity;
871
+ private resolveCanonicalTimeCoordinate;
872
+ private usesCanonicalTimeCoordinates;
873
+ private extractTimeCoordinate;
874
+ private resolveTimePresentationLabel;
875
+ private typedIdentity;
837
876
  private buildPointData;
838
877
  private hasPointValue;
839
878
  private resolveCartesianSeriesType;
@@ -847,45 +886,9 @@ declare class PraxisChartDataTransformerService {
847
886
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<PraxisChartDataTransformerService>;
848
887
  }
849
888
 
850
- declare class PraxisChartOptionBuilderService {
851
- private readonly transformer;
852
- constructor(transformer: PraxisChartDataTransformerService);
853
- build(config: PraxisChartConfig, rows: PraxisChartDataRow[]): EChartsCoreOption;
854
- private resolveText;
855
- private resolveTextColor;
856
- private hasText;
857
- private buildTitle;
858
- private buildLegend;
859
- private buildGrid;
860
- private buildCartesianYAxis;
861
- private primaryValueFormat;
862
- private seriesLabelFormat;
863
- private axisLabelFormatter;
864
- private formatValue;
865
- private formatDateValue;
866
- private isDateFormat;
867
- private readDateParts;
868
- private parseCurrencyFormat;
869
- private normalizeCurrencyDisplay;
870
- private parseNumberFormat;
871
- private clampDecimals;
872
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<PraxisChartOptionBuilderService, never>;
873
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<PraxisChartOptionBuilderService>;
874
- }
875
-
876
- declare class PraxisChartMetadataRegistrationService {
877
- private readonly registry;
878
- private registered;
879
- constructor(registry: ComponentMetadataRegistry);
880
- ensureRegistered(): void;
881
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<PraxisChartMetadataRegistrationService, never>;
882
- static ɵprov: _angular_core.ɵɵInjectableDeclaration<PraxisChartMetadataRegistrationService>;
883
- }
884
-
885
889
  declare class PraxisChartSchemaMapperService {
886
- private readonly metadataRegistration;
887
890
  private readonly canonicalContractMapper;
888
- constructor(metadataRegistration: PraxisChartMetadataRegistrationService, canonicalContractMapper: PraxisChartCanonicalContractMapperService);
891
+ constructor(canonicalContractMapper: PraxisChartCanonicalContractMapperService);
889
892
  resolve(input: PraxisChartWidgetLike, defaults?: {
890
893
  key?: string;
891
894
  canvasItem?: PraxisChartCanvasItem;
@@ -930,6 +933,7 @@ declare class PraxisChartStatsApiService {
930
933
  private resolveCategoryField;
931
934
  private resolveMetricBindings;
932
935
  private projectMetricValues;
936
+ private projectComparisonMetricValues;
933
937
  private buildStatsUrl;
934
938
  private buildDefaultApiBase;
935
939
  private normalizePath;
@@ -946,7 +950,9 @@ interface AnalyticsChartConfigAdapterOptions {
946
950
  height?: number | string;
947
951
  }
948
952
  declare class AnalyticsChartConfigAdapterService {
953
+ private readonly i18n?;
949
954
  private readonly statsBuilder;
955
+ constructor(i18n?: PraxisI18nService | undefined);
950
956
  toPraxisChartConfig(projection: PraxisAnalyticsProjection, options?: AnalyticsChartConfigAdapterOptions): PraxisChartConfig;
951
957
  private buildAxes;
952
958
  private buildSeries;
@@ -955,7 +961,9 @@ declare class AnalyticsChartConfigAdapterService {
955
961
  private mapAggregation;
956
962
  private mapExecutionMetrics;
957
963
  private getDisplayMetrics;
958
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<AnalyticsChartConfigAdapterService, never>;
964
+ private comparisonMetricField;
965
+ private comparisonPeriodLabel;
966
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AnalyticsChartConfigAdapterService, [{ optional: true; }]>;
959
967
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<AnalyticsChartConfigAdapterService>;
960
968
  }
961
969
 
@@ -1033,9 +1041,9 @@ declare class PraxisChartCompositionShowcaseComponent {
1033
1041
  protected readonly widgetPage: _angular_core.Signal<{
1034
1042
  composition?: _praxisui_core.WidgetPageCompositionDefinition | undefined;
1035
1043
  state?: _praxisui_core.WidgetPageStateInput | undefined;
1036
- canvas?: _praxisui_core.WidgetPageCanvasLayout | undefined;
1037
- context?: Record<string, any> | undefined;
1038
1044
  widgets: _praxisui_core.WidgetInstance[];
1045
+ context?: Record<string, any> | undefined;
1046
+ canvas?: _praxisui_core.WidgetPageCanvasLayout | undefined;
1039
1047
  layout?: _praxisui_core.WidgetPageLayout | undefined;
1040
1048
  layoutPreset?: string | undefined;
1041
1049
  layoutPresetOptions?: Record<string, any> | undefined;
@@ -1047,9 +1055,9 @@ declare class PraxisChartCompositionShowcaseComponent {
1047
1055
  protected readonly canvasPage: _angular_core.Signal<({
1048
1056
  composition?: _praxisui_core.WidgetPageCompositionDefinition | undefined;
1049
1057
  state?: _praxisui_core.WidgetPageStateInput | undefined;
1050
- canvas?: _praxisui_core.WidgetPageCanvasLayout | undefined;
1051
- context?: Record<string, any> | undefined;
1052
1058
  widgets: _praxisui_core.WidgetInstance[];
1059
+ context?: Record<string, any> | undefined;
1060
+ canvas?: _praxisui_core.WidgetPageCanvasLayout | undefined;
1053
1061
  layout?: _praxisui_core.WidgetPageLayout | undefined;
1054
1062
  layoutPreset?: string | undefined;
1055
1063
  layoutPresetOptions?: Record<string, any> | undefined;
@@ -1092,9 +1100,9 @@ declare class PraxisChartCompositionShowcaseComponent {
1092
1100
  protected readonly resolvedPage: _angular_core.Signal<{
1093
1101
  composition?: _praxisui_core.WidgetPageCompositionDefinition | undefined;
1094
1102
  state?: _praxisui_core.WidgetPageStateInput | undefined;
1095
- canvas?: _praxisui_core.WidgetPageCanvasLayout | undefined;
1096
- context?: Record<string, any> | undefined;
1097
1103
  widgets: _praxisui_core.WidgetInstance[];
1104
+ context?: Record<string, any> | undefined;
1105
+ canvas?: _praxisui_core.WidgetPageCanvasLayout | undefined;
1098
1106
  layout?: _praxisui_core.WidgetPageLayout | undefined;
1099
1107
  layoutPreset?: string | undefined;
1100
1108
  layoutPresetOptions?: Record<string, any> | undefined;
@@ -1151,14 +1159,15 @@ interface ChartConfigEditorResetEvent {
1151
1159
  type ChartEditorSection = 'general' | 'data' | 'analytics' | 'appearance' | 'motion' | 'events' | 'preview';
1152
1160
  type ChartFeatureKey = 'legend' | 'labels' | 'tooltip';
1153
1161
  type ChartStateKey = 'empty' | 'loading' | 'error';
1154
- type ChartEventKey = 'pointClick' | 'selectionChange' | 'drillDown' | 'crossFilter';
1162
+ type ChartEventKey = ChartEditorEventKey;
1163
+ type ChartFieldRole = 'dimension' | 'metric';
1155
1164
  declare class PraxisChartConfigEditor implements SettingsValueProvider {
1156
1165
  readonly documentInput: _angular_core.InputSignal<PraxisXUiChartContract | null>;
1157
1166
  readonly modeInput: _angular_core.InputSignal<"create" | "edit">;
1158
1167
  readonly readonlyInput: _angular_core.InputSignal<boolean>;
1159
- readonly availableResourcesInput: _angular_core.InputSignal<ChartEditorResourceOption[]>;
1160
- readonly availableFieldsInput: _angular_core.InputSignal<ChartEditorFieldOption[]>;
1161
- readonly availableTargetsInput: _angular_core.InputSignal<ChartEditorTargetOption[]>;
1168
+ readonly availableResourcesInput: _angular_core.InputSignal<ChartEditorResourceOption[] | null>;
1169
+ readonly availableFieldsInput: _angular_core.InputSignal<ChartEditorFieldOption[] | null>;
1170
+ readonly availableTargetsInput: _angular_core.InputSignal<ChartEditorTargetOption[] | null>;
1162
1171
  readonly apply: _angular_core.OutputEmitterRef<ChartConfigEditorApplyEvent>;
1163
1172
  readonly save: _angular_core.OutputEmitterRef<ChartConfigEditorSaveEvent>;
1164
1173
  readonly resetChange: _angular_core.OutputEmitterRef<ChartConfigEditorResetEvent>;
@@ -1193,13 +1202,25 @@ declare class PraxisChartConfigEditor implements SettingsValueProvider {
1193
1202
  private readonly normalizer;
1194
1203
  private readonly validator;
1195
1204
  private readonly previewMapper;
1205
+ private readonly contextResolver;
1196
1206
  private readonly i18n;
1197
1207
  private readonly currentDocument;
1198
1208
  private readonly initialDocument;
1209
+ private readonly resolvedResources;
1210
+ private readonly resolvedFields;
1211
+ private readonly catalogResolutionDiagnostics;
1199
1212
  private lastExternalSignature;
1213
+ private lastCatalogInputSignature;
1214
+ private catalogResolutionRequestId;
1215
+ private readonly baseAvailableResources;
1216
+ private readonly baseAvailableFields;
1200
1217
  readonly normalizedDocument: _angular_core.Signal<PraxisXUiChartContract>;
1201
- readonly validation: _angular_core.Signal<_praxisui_charts.ChartContractValidationResult>;
1218
+ readonly validation: _angular_core.Signal<{
1219
+ valid: boolean;
1220
+ issues: ChartContractValidationIssue[];
1221
+ }>;
1202
1222
  readonly issues: _angular_core.Signal<ChartContractValidationIssue[]>;
1223
+ readonly catalogIssues: _angular_core.Signal<ChartContractValidationIssue[]>;
1203
1224
  readonly availableResources: _angular_core.Signal<ChartEditorResourceOption[]>;
1204
1225
  readonly availableFields: _angular_core.Signal<ChartEditorFieldOption[]>;
1205
1226
  readonly availableTargets: _angular_core.Signal<ChartEditorTargetOption[]>;
@@ -1258,6 +1279,10 @@ declare class PraxisChartConfigEditor implements SettingsValueProvider {
1258
1279
  subtitleValue(): string;
1259
1280
  resourceValue(): string;
1260
1281
  resourceOptions(): ChartEditorResourceOption[];
1282
+ selectedResourceOption(): ChartEditorResourceOption | undefined;
1283
+ operationOptions(): PraxisXUiChartStatsOperation[];
1284
+ resourceCatalogUnavailable(): boolean;
1285
+ operationCatalogUnavailable(): boolean;
1261
1286
  granularityValue(): typeof this.timeGranularities[number];
1262
1287
  fillGapsValue(): boolean;
1263
1288
  distributionModeValue(): PraxisXUiChartStatsDistributionMode;
@@ -1278,11 +1303,14 @@ declare class PraxisChartConfigEditor implements SettingsValueProvider {
1278
1303
  stateDescription(stateKey: ChartStateKey): string;
1279
1304
  eventAction(eventKey: ChartEventKey): PraxisXUiChartEventAction['action'] | '';
1280
1305
  eventTarget(eventKey: ChartEventKey): string;
1281
- targetOptions(): ChartEditorTargetOption[];
1306
+ targetOptions(action?: PraxisXUiChartEventAction['action'] | '', eventKey?: ChartEventKey): ChartEditorTargetOption[];
1307
+ targetCatalogUnavailable(action?: PraxisXUiChartEventAction['action'] | '', eventKey?: ChartEventKey): boolean;
1282
1308
  eventMappingText(eventKey: ChartEventKey): string;
1283
1309
  dimensions(): PraxisXUiChartDimension[];
1284
1310
  metrics(): PraxisXUiChartMetric[];
1285
- fieldOptions(role: 'dimension' | 'metric'): ChartEditorFieldOption[];
1311
+ fieldOptions(role: ChartFieldRole): ChartEditorFieldOption[];
1312
+ metricAggregationOptions(fieldName: string | undefined): PraxisXUiChartAggregation[];
1313
+ fieldOptionLabel(field: ChartEditorFieldOption): string;
1286
1314
  showMetricAxisControls(): boolean;
1287
1315
  showMetricSeriesKindControls(): boolean;
1288
1316
  showTimeseriesControls(): boolean;
@@ -1296,6 +1324,18 @@ declare class PraxisChartConfigEditor implements SettingsValueProvider {
1296
1324
  private patchStateDescriptor;
1297
1325
  private patchEvent;
1298
1326
  private parseMappingText;
1327
+ private validateCatalogContext;
1328
+ private fieldMatchesSelectedResource;
1329
+ private fieldMatchesResourceOption;
1330
+ private resolveSelectedResource;
1331
+ private resourceIdentityMatches;
1332
+ private normalizeResourcePath;
1333
+ private toCatalogIssue;
1334
+ private catalogDiagnosticMessage;
1335
+ private fieldMatchesOperation;
1336
+ private fieldMatchesDistributionMode;
1337
+ private fieldMatchesRole;
1338
+ private catalogError;
1299
1339
  private normalizeSizingSizeInput;
1300
1340
  private mergeTheme;
1301
1341
  private createApplyPayload;
@@ -1314,40 +1354,377 @@ interface PraxisChartWidgetEditorInputs {
1314
1354
  availableTargets?: ChartEditorTargetOption[];
1315
1355
  [key: string]: unknown;
1316
1356
  }
1357
+ interface PraxisChartWidgetEditorContext {
1358
+ availableResources?: ChartEditorResourceOption[];
1359
+ availableFields?: ChartEditorFieldOption[];
1360
+ availableTargets?: ChartEditorTargetOption[];
1361
+ [key: string]: unknown;
1362
+ }
1317
1363
  interface PraxisChartWidgetEditorValue {
1318
1364
  inputs: PraxisChartWidgetEditorInputs;
1319
1365
  }
1320
- declare class PraxisChartWidgetConfigEditor implements SettingsValueProvider, AfterViewInit, OnChanges, OnDestroy {
1366
+ type ChartWidgetContextDiagnostic = NonNullable<ComponentConfigEditorContextResult['diagnostics']>[number];
1367
+ declare class PraxisChartWidgetConfigEditor implements SettingsValueProvider, OnChanges, OnDestroy {
1368
+ private readonly i18n;
1321
1369
  inputs: PraxisChartWidgetEditorInputs | null;
1322
- chartEditor?: PraxisChartConfigEditor;
1370
+ context: PraxisChartWidgetEditorContext | null;
1371
+ contextDiagnostics: ChartWidgetContextDiagnostic[];
1372
+ private activeChartEditor?;
1373
+ private chartEditorSubscription;
1374
+ set chartEditor(value: PraxisChartConfigEditor | undefined);
1375
+ get chartEditor(): PraxisChartConfigEditor | undefined;
1323
1376
  readonly isDirty$: BehaviorSubject<boolean>;
1324
1377
  readonly isValid$: BehaviorSubject<boolean>;
1325
1378
  readonly isBusy$: BehaviorSubject<boolean>;
1326
- private readonly subscription;
1379
+ private chartEditorDirty;
1327
1380
  private chartEditorValid;
1328
1381
  private queryContextDirty;
1382
+ private baselineQueryContextText;
1329
1383
  queryContextText: string;
1330
1384
  queryContextError: string;
1331
1385
  get chartDocument(): PraxisXUiChartContract | null;
1332
1386
  get availableResources(): ChartEditorResourceOption[];
1333
1387
  get availableFields(): ChartEditorFieldOption[];
1334
1388
  get availableTargets(): ChartEditorTargetOption[];
1335
- ngAfterViewInit(): void;
1336
1389
  ngOnChanges(changes: SimpleChanges): void;
1337
1390
  ngOnDestroy(): void;
1338
1391
  setQueryContextText(value: string): void;
1339
1392
  getSettingsValue(): PraxisChartWidgetEditorValue;
1340
1393
  onSave(): PraxisChartWidgetEditorValue;
1341
1394
  reset(): void;
1395
+ t(key: string, fallback: string): string;
1396
+ contextDiagnosticText(diagnostic: ChartWidgetContextDiagnostic): string;
1342
1397
  private buildValue;
1398
+ private bindChartEditor;
1399
+ private getChartDocumentForApply;
1400
+ private getChartDocumentForSave;
1401
+ private rebaseQueryContext;
1402
+ private updateDirty;
1343
1403
  private updateValidity;
1344
1404
  private formatQueryContext;
1345
1405
  private validateQueryContextText;
1346
1406
  private parseQueryContextText;
1347
1407
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<PraxisChartWidgetConfigEditor, never>;
1348
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<PraxisChartWidgetConfigEditor, "praxis-chart-widget-config-editor", never, { "inputs": { "alias": "inputs"; "required": false; }; }, {}, never, never, true, never>;
1408
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PraxisChartWidgetConfigEditor, "praxis-chart-widget-config-editor", never, { "inputs": { "alias": "inputs"; "required": false; }; "context": { "alias": "context"; "required": false; }; "contextDiagnostics": { "alias": "contextDiagnostics"; "required": false; }; }, {}, never, never, true, never>;
1349
1409
  }
1350
1410
 
1411
+ type PraxisChartAuthoringCoverageMode = 'visual-editable' | 'preserved-only' | 'ai-authorable' | 'advanced-structured' | 'derived-readonly' | 'unsupported';
1412
+ type PraxisChartAuthoringCoverageOwner = 'chart-config-editor' | 'chart-widget-config-editor' | 'chart-contract-normalizer' | 'chart-runtime-mapper' | 'chart-ai-manifest' | 'settings-panel-host' | 'backend-capabilities';
1413
+ interface PraxisChartAuthoringCoverageRow {
1414
+ path: string;
1415
+ mode: PraxisChartAuthoringCoverageMode;
1416
+ owner: PraxisChartAuthoringCoverageOwner;
1417
+ rationale: string;
1418
+ proof: string[];
1419
+ }
1420
+ declare const PRAXIS_CHART_AUTHORING_COVERAGE: readonly [{
1421
+ readonly path: "chartDocument";
1422
+ readonly mode: "advanced-structured";
1423
+ readonly owner: "chart-ai-manifest";
1424
+ readonly rationale: "Whole-document authoring is allowed for AI and structured import, but the visual editor must not become a raw JSON primary path.";
1425
+ readonly proof: ["praxis-charts-authoring-manifest.spec.ts", "praxis-chart-config-editor.spec.ts"];
1426
+ }, {
1427
+ readonly path: "chartDocument.version";
1428
+ readonly mode: "derived-readonly";
1429
+ readonly owner: "chart-contract-normalizer";
1430
+ readonly rationale: "Version is canonical schema governance and is normalized to the authorable x-ui.chart version.";
1431
+ readonly proof: ["chart-authoring-coverage.matrix.spec.ts", "praxis-charts-authoring-manifest.spec.ts"];
1432
+ }, {
1433
+ readonly path: "chartDocument.kind";
1434
+ readonly mode: "visual-editable";
1435
+ readonly owner: "chart-config-editor";
1436
+ readonly rationale: "Chart kind is a first-class visual decision with runtime mapper and AI manifest parity.";
1437
+ readonly proof: ["praxis-chart-config-editor.spec.ts", "praxis-charts-authoring-manifest.spec.ts"];
1438
+ }, {
1439
+ readonly path: "chartDocument.preset";
1440
+ readonly mode: "preserved-only";
1441
+ readonly owner: "chart-contract-normalizer";
1442
+ readonly rationale: "Preset is semantic starter intent; the current editor preserves it instead of presenting it as a misleading post-hoc visual control.";
1443
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1444
+ }, {
1445
+ readonly path: "chartDocument.chartId";
1446
+ readonly mode: "visual-editable";
1447
+ readonly owner: "chart-config-editor";
1448
+ readonly rationale: "Stable chart identity is editable for host/runtime diagnostics and event correlation.";
1449
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1450
+ }, {
1451
+ readonly path: "chartDocument.orientation";
1452
+ readonly mode: "ai-authorable";
1453
+ readonly owner: "chart-ai-manifest";
1454
+ readonly rationale: "Orientation is compiled by chart type and axis decisions; the visual editor currently preserves it without a separate control.";
1455
+ readonly proof: ["praxis-charts-authoring-manifest.spec.ts", "praxis-chart-config-editor.spec.ts"];
1456
+ }, {
1457
+ readonly path: "chartDocument.title";
1458
+ readonly mode: "visual-editable";
1459
+ readonly owner: "chart-config-editor";
1460
+ readonly rationale: "Title is primary presentation copy in the editor and runtime preview.";
1461
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1462
+ }, {
1463
+ readonly path: "chartDocument.subtitle";
1464
+ readonly mode: "visual-editable";
1465
+ readonly owner: "chart-config-editor";
1466
+ readonly rationale: "Subtitle is presentation copy edited alongside title.";
1467
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1468
+ }, {
1469
+ readonly path: "chartDocument.sizing";
1470
+ readonly mode: "visual-editable";
1471
+ readonly owner: "chart-config-editor";
1472
+ readonly rationale: "Sizing controls are canonical runtime layout decisions; deprecated height is normalized into sizing.height.";
1473
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1474
+ }, {
1475
+ readonly path: "chartDocument.height";
1476
+ readonly mode: "derived-readonly";
1477
+ readonly owner: "chart-contract-normalizer";
1478
+ readonly rationale: "Deprecated compatibility input is consumed and cleared in favor of chartDocument.sizing.height.";
1479
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1480
+ }, {
1481
+ readonly path: "chartDocument.source.kind";
1482
+ readonly mode: "visual-editable";
1483
+ readonly owner: "chart-config-editor";
1484
+ readonly rationale: "Source kind selects local derived data versus governed praxis.stats binding.";
1485
+ readonly proof: ["praxis-chart-config-editor.spec.ts", "praxis-chart-widget-config-editor.spec.ts"];
1486
+ }, {
1487
+ readonly path: "chartDocument.source.resource";
1488
+ readonly mode: "visual-editable";
1489
+ readonly owner: "chart-config-editor";
1490
+ readonly rationale: "Resource selection is governed by catalog options and fails closed when unavailable.";
1491
+ readonly proof: ["praxis-chart-config-editor.spec.ts", "praxis-charts-settings-panel.smoke.playwright.spec.ts"];
1492
+ }, {
1493
+ readonly path: "chartDocument.source.operation";
1494
+ readonly mode: "visual-editable";
1495
+ readonly owner: "chart-config-editor";
1496
+ readonly rationale: "Stats operation drives field compatibility, runtime request semantics and specialized options.";
1497
+ readonly proof: ["praxis-chart-config-editor.spec.ts", "praxis-charts-settings-panel.smoke.playwright.spec.ts"];
1498
+ }, {
1499
+ readonly path: "chartDocument.source.options.granularity";
1500
+ readonly mode: "visual-editable";
1501
+ readonly owner: "chart-config-editor";
1502
+ readonly rationale: "Timeseries granularity is visually edited with backend-supported values only.";
1503
+ readonly proof: ["praxis-chart-config-editor.spec.ts", "praxis-charts-settings-panel.smoke.playwright.spec.ts"];
1504
+ }, {
1505
+ readonly path: "chartDocument.source.options.fillGaps";
1506
+ readonly mode: "visual-editable";
1507
+ readonly owner: "chart-config-editor";
1508
+ readonly rationale: "Timeseries gap filling is a supported runtime option surfaced in the editor.";
1509
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1510
+ }, {
1511
+ readonly path: "chartDocument.source.options.mode";
1512
+ readonly mode: "visual-editable";
1513
+ readonly owner: "chart-config-editor";
1514
+ readonly rationale: "Distribution mode is visually edited for terms versus histogram materialization.";
1515
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1516
+ }, {
1517
+ readonly path: "chartDocument.source.options.bucketSize";
1518
+ readonly mode: "visual-editable";
1519
+ readonly owner: "chart-config-editor";
1520
+ readonly rationale: "Histogram bucket size is a supported distribution option.";
1521
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1522
+ }, {
1523
+ readonly path: "chartDocument.source.options.bucketCount";
1524
+ readonly mode: "visual-editable";
1525
+ readonly owner: "chart-config-editor";
1526
+ readonly rationale: "Histogram bucket count is a supported distribution option.";
1527
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1528
+ }, {
1529
+ readonly path: "chartDocument.source.options.orderBy";
1530
+ readonly mode: "preserved-only";
1531
+ readonly owner: "chart-contract-normalizer";
1532
+ readonly rationale: "Ordering is runtime-supported but not yet exposed as a primary visual control; preserving avoids silent loss.";
1533
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1534
+ }, {
1535
+ readonly path: "chartDocument.source.options.limit";
1536
+ readonly mode: "preserved-only";
1537
+ readonly owner: "chart-contract-normalizer";
1538
+ readonly rationale: "Source-level result limit remains governed by document/runtime semantics until a ranked visual control exists.";
1539
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1540
+ }, {
1541
+ readonly path: "chartDocument.source.refresh";
1542
+ readonly mode: "preserved-only";
1543
+ readonly owner: "chart-contract-normalizer";
1544
+ readonly rationale: "Refresh policy belongs to runtime/backend cadence governance; current editor preserves it.";
1545
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1546
+ }, {
1547
+ readonly path: "chartDocument.dimensions[]";
1548
+ readonly mode: "visual-editable";
1549
+ readonly owner: "chart-config-editor";
1550
+ readonly rationale: "Dimension field and role are visually editable with catalog compatibility checks.";
1551
+ readonly proof: ["praxis-chart-config-editor.spec.ts", "praxis-charts-authoring-manifest.spec.ts"];
1552
+ }, {
1553
+ readonly path: "chartDocument.dimensions[].label";
1554
+ readonly mode: "preserved-only";
1555
+ readonly owner: "chart-contract-normalizer";
1556
+ readonly rationale: "Dimension labels can be authored by AI/imported contracts and must survive visual edits until a governed label control exists.";
1557
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1558
+ }, {
1559
+ readonly path: "chartDocument.dimensions[].format";
1560
+ readonly mode: "preserved-only";
1561
+ readonly owner: "chart-contract-normalizer";
1562
+ readonly rationale: "Dimension formatting is runtime metadata and is preserved while not yet visually edited.";
1563
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1564
+ }, {
1565
+ readonly path: "chartDocument.metrics[]";
1566
+ readonly mode: "visual-editable";
1567
+ readonly owner: "chart-config-editor";
1568
+ readonly rationale: "Metric field, label, aggregation, axis and series kind are core visual analytics controls.";
1569
+ readonly proof: ["praxis-chart-config-editor.spec.ts", "praxis-charts-authoring-manifest.spec.ts"];
1570
+ }, {
1571
+ readonly path: "chartDocument.metrics[].color";
1572
+ readonly mode: "preserved-only";
1573
+ readonly owner: "chart-contract-normalizer";
1574
+ readonly rationale: "Series color is renderer-neutral config but not yet a governed swatch control in the editor.";
1575
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1576
+ }, {
1577
+ readonly path: "chartDocument.metrics[].format";
1578
+ readonly mode: "preserved-only";
1579
+ readonly owner: "chart-contract-normalizer";
1580
+ readonly rationale: "Metric formatting is preserved as runtime presentation metadata until visual format presets are introduced.";
1581
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1582
+ }, {
1583
+ readonly path: "chartDocument.aggregations[]";
1584
+ readonly mode: "ai-authorable";
1585
+ readonly owner: "chart-ai-manifest";
1586
+ readonly rationale: "Aggregation config is a structured analytics contract; visual authoring currently edits metric aggregation instead.";
1587
+ readonly proof: ["chart-authoring-coverage.matrix.spec.ts", "praxis-chart-config-editor.spec.ts"];
1588
+ }, {
1589
+ readonly path: "chartDocument.groupBy[]";
1590
+ readonly mode: "ai-authorable";
1591
+ readonly owner: "chart-ai-manifest";
1592
+ readonly rationale: "Grouping is derivable from dimensions for current visual flows and remains preserved for structured authoring.";
1593
+ readonly proof: ["chart-authoring-coverage.matrix.spec.ts", "praxis-chart-config-editor.spec.ts"];
1594
+ }, {
1595
+ readonly path: "chartDocument.sort[]";
1596
+ readonly mode: "preserved-only";
1597
+ readonly owner: "chart-contract-normalizer";
1598
+ readonly rationale: "Document-level sort is runtime-supported but lacks a governed visual ordering editor.";
1599
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1600
+ }, {
1601
+ readonly path: "chartDocument.filters[]";
1602
+ readonly mode: "preserved-only";
1603
+ readonly owner: "chart-contract-normalizer";
1604
+ readonly rationale: "Static document filters are preserved; dynamic authoring should prefer queryContext and backend capabilities.";
1605
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1606
+ }, {
1607
+ readonly path: "chartDocument.limit";
1608
+ readonly mode: "preserved-only";
1609
+ readonly owner: "chart-contract-normalizer";
1610
+ readonly rationale: "Document-level limit remains a structured runtime constraint until a governed visual control is added.";
1611
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1612
+ }, {
1613
+ readonly path: "chartDocument.legend";
1614
+ readonly mode: "visual-editable";
1615
+ readonly owner: "chart-config-editor";
1616
+ readonly rationale: "Legend visibility is a visual feature toggle and AI manifest operation.";
1617
+ readonly proof: ["praxis-chart-config-editor.spec.ts", "praxis-charts-authoring-manifest.spec.ts"];
1618
+ }, {
1619
+ readonly path: "chartDocument.labels";
1620
+ readonly mode: "visual-editable";
1621
+ readonly owner: "chart-config-editor";
1622
+ readonly rationale: "Data labels are a visual feature toggle in the appearance section.";
1623
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1624
+ }, {
1625
+ readonly path: "chartDocument.tooltip";
1626
+ readonly mode: "visual-editable";
1627
+ readonly owner: "chart-config-editor";
1628
+ readonly rationale: "Tooltip visibility is a visual feature toggle and AI manifest operation.";
1629
+ readonly proof: ["praxis-chart-config-editor.spec.ts", "praxis-charts-authoring-manifest.spec.ts"];
1630
+ }, {
1631
+ readonly path: "chartDocument.theme.palette";
1632
+ readonly mode: "visual-editable";
1633
+ readonly owner: "chart-config-editor";
1634
+ readonly rationale: "Palette token/custom values are visually edited and preserved as renderer-neutral theme contract.";
1635
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1636
+ }, {
1637
+ readonly path: "chartDocument.theme.variant";
1638
+ readonly mode: "visual-editable";
1639
+ readonly owner: "chart-config-editor";
1640
+ readonly rationale: "Theme variant is a visual editor control and runtime presentation decision.";
1641
+ readonly proof: ["praxis-chart-config-editor.spec.ts", "praxis-charts-settings-panel.smoke.playwright.spec.ts"];
1642
+ }, {
1643
+ readonly path: "chartDocument.theme.surface.mode";
1644
+ readonly mode: "visual-editable";
1645
+ readonly owner: "chart-config-editor";
1646
+ readonly rationale: "Surface mode is visually edited to align chart containment with host context.";
1647
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1648
+ }, {
1649
+ readonly path: "chartDocument.theme.surface.background";
1650
+ readonly mode: "preserved-only";
1651
+ readonly owner: "chart-contract-normalizer";
1652
+ readonly rationale: "Surface color details are contract-supported but not yet governed by tokenized visual controls.";
1653
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1654
+ }, {
1655
+ readonly path: "chartDocument.theme.surface.borderColor";
1656
+ readonly mode: "preserved-only";
1657
+ readonly owner: "chart-contract-normalizer";
1658
+ readonly rationale: "Surface border color is preserved until a token-aware border editor exists.";
1659
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1660
+ }, {
1661
+ readonly path: "chartDocument.theme.surface.borderWidth";
1662
+ readonly mode: "preserved-only";
1663
+ readonly owner: "chart-contract-normalizer";
1664
+ readonly rationale: "Surface border width is preserved to avoid dropping host-authored surface detail.";
1665
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1666
+ }, {
1667
+ readonly path: "chartDocument.theme.surface.borderRadius";
1668
+ readonly mode: "preserved-only";
1669
+ readonly owner: "chart-contract-normalizer";
1670
+ readonly rationale: "Surface border radius is preserved to avoid dropping host-authored surface detail.";
1671
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1672
+ }, {
1673
+ readonly path: "chartDocument.state.empty";
1674
+ readonly mode: "visual-editable";
1675
+ readonly owner: "chart-config-editor";
1676
+ readonly rationale: "Empty-state title/description are visible runtime presentation copy.";
1677
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1678
+ }, {
1679
+ readonly path: "chartDocument.state.loading";
1680
+ readonly mode: "visual-editable";
1681
+ readonly owner: "chart-config-editor";
1682
+ readonly rationale: "Loading-state title/description are visible runtime presentation copy.";
1683
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1684
+ }, {
1685
+ readonly path: "chartDocument.state.error";
1686
+ readonly mode: "visual-editable";
1687
+ readonly owner: "chart-config-editor";
1688
+ readonly rationale: "Error-state title/description are visible runtime presentation copy.";
1689
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1690
+ }, {
1691
+ readonly path: "chartDocument.events.pointClick";
1692
+ readonly mode: "visual-editable";
1693
+ readonly owner: "chart-config-editor";
1694
+ readonly rationale: "Point click action is configured visually while raw point evidence remains a separate output.";
1695
+ readonly proof: ["praxis-chart-config-editor.spec.ts", "praxis-charts-authoring-manifest.spec.ts"];
1696
+ }, {
1697
+ readonly path: "chartDocument.events.selectionChange";
1698
+ readonly mode: "visual-editable";
1699
+ readonly owner: "chart-config-editor";
1700
+ readonly rationale: "Selection change supports the governed single-selection event contract.";
1701
+ readonly proof: ["praxis-chart-config-editor.spec.ts", "praxis-charts-authoring-manifest.spec.ts"];
1702
+ }, {
1703
+ readonly path: "chartDocument.events.drillDown";
1704
+ readonly mode: "visual-editable";
1705
+ readonly owner: "chart-config-editor";
1706
+ readonly rationale: "Drilldown target and mapping are visually authorable with governed target catalogs.";
1707
+ readonly proof: ["praxis-chart-config-editor.spec.ts", "praxis-charts-authoring-manifest.spec.ts"];
1708
+ }, {
1709
+ readonly path: "chartDocument.events.crossFilter";
1710
+ readonly mode: "visual-editable";
1711
+ readonly owner: "chart-config-editor";
1712
+ readonly rationale: "Cross-filter target and mapping are visually authorable with governed target catalogs.";
1713
+ readonly proof: ["praxis-chart-config-editor.spec.ts", "praxis-charts-authoring-manifest.spec.ts"];
1714
+ }, {
1715
+ readonly path: "chartDocument.motion";
1716
+ readonly mode: "visual-editable";
1717
+ readonly owner: "chart-config-editor";
1718
+ readonly rationale: "Motion enablement and preset are visual runtime behavior controls.";
1719
+ readonly proof: ["praxis-chart-config-editor.spec.ts"];
1720
+ }, {
1721
+ readonly path: "queryContext";
1722
+ readonly mode: "advanced-structured";
1723
+ readonly owner: "chart-widget-config-editor";
1724
+ readonly rationale: "Query context is a structured widget runtime input edited as an advanced JSON fallback and validated as object-only.";
1725
+ readonly proof: ["praxis-chart-widget-config-editor.spec.ts", "praxis-charts-authoring-manifest.spec.ts"];
1726
+ }];
1727
+
1351
1728
  interface PraxisChartConfigEditorData {
1352
1729
  chartDocument?: PraxisXUiChartContract;
1353
1730
  document?: PraxisXUiChartContract;
@@ -1379,6 +1756,19 @@ declare class ChartEditorPreviewMapperService {
1379
1756
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<ChartEditorPreviewMapperService>;
1380
1757
  }
1381
1758
 
1759
+ declare class ChartResourceCapabilityCatalogAdapter {
1760
+ toResourceOperations(capabilities: ResourceCapabilitySnapshot | null | undefined): PraxisXUiChartStatsOperation[];
1761
+ toFieldOptions(capabilities: ResourceCapabilitySnapshot | null | undefined, operation?: PraxisXUiChartStatsOperation | null): ChartEditorFieldOption[];
1762
+ private toFieldOptionsForRoles;
1763
+ private resolveDimensionOperations;
1764
+ private resolveAggregations;
1765
+ private resolveDistributionModes;
1766
+ private mapMetric;
1767
+ private toCountOption;
1768
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ChartResourceCapabilityCatalogAdapter, never>;
1769
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ChartResourceCapabilityCatalogAdapter>;
1770
+ }
1771
+
1382
1772
  type PraxisChartsText = PraxisTextValue;
1383
1773
  interface PraxisChartsI18nOptions {
1384
1774
  locale?: string;
@@ -1401,5 +1791,5 @@ declare function providePraxisChartDrilldownPanelMetadata(): Provider;
1401
1791
  declare const PRAXIS_CHART_STATE_PROBE_COMPONENT_METADATA: ComponentDocMeta;
1402
1792
  declare function providePraxisChartStateProbeMetadata(): Provider;
1403
1793
 
1404
- export { AnalyticsChartConfigAdapterService, AnalyticsChartContractService, ChartContractNormalizerService, ChartContractValidationService, ChartEditorDefaultsService, ChartEditorPreviewMapperService, PRAXIS_CHARTS_AUTHORING_MANIFEST, PRAXIS_CHARTS_I18N, PRAXIS_CHART_BACKEND_MOCK_BAR, PRAXIS_CHART_BACKEND_MOCK_COMBO, PRAXIS_CHART_BACKEND_MOCK_DONUT, PRAXIS_CHART_BACKEND_MOCK_HORIZONTAL_BAR, PRAXIS_CHART_BACKEND_MOCK_MULTI_METRIC_BAR, PRAXIS_CHART_BACKEND_MOCK_SCATTER, PRAXIS_CHART_BACKEND_MOCK_STACKED_AREA, PRAXIS_CHART_BACKEND_MOCK_TIMESERIES, PRAXIS_CHART_COMPONENT_METADATA, PRAXIS_CHART_DRILLDOWN_DATA_BY_MONTH, PRAXIS_CHART_DRILLDOWN_PANEL_METADATA, PRAXIS_CHART_ENGINE, PRAXIS_CHART_ENGINE_FACTORY, PRAXIS_CHART_PALETTE_TOKENS, PRAXIS_CHART_STATE_PROBE_COMPONENT_METADATA, PRAXIS_CHART_THEME_VARIANTS, PraxisChartBackendPayloadAdapterService, PraxisChartCanonicalContractMapperService, PraxisChartComponent, PraxisChartCompositionShowcaseComponent, PraxisChartConfigEditor, PraxisChartDataTransformerService, PraxisChartDrilldownPanelComponent, PraxisChartOptionBuilderService, PraxisChartSchemaMapperService, PraxisChartStateProbeComponent, PraxisChartStatsApiService, PraxisChartWidgetConfigEditor, PraxisMicroVisualizationComponent, buildPraxisChartInteractiveCanvasPage, buildPraxisChartInteractiveWidgetPage, buildPraxisChartMockCanvasPage, buildPraxisChartMockWidgetPage, createPraxisChartsI18nConfig, isPraxisChartPaletteToken, providePraxisChartDrilldownPanelMetadata, providePraxisChartStateProbeMetadata, providePraxisCharts, providePraxisChartsI18n, providePraxisChartsMetadata, resolvePraxisChartPaletteToken, resolvePraxisChartsText };
1405
- export type { AnalyticsChartConfigAdapterOptions, AnalyticsChartContractDefinition, AnalyticsChartContractLoadOptions, AnalyticsChartContractLoadResult, AnalyticsChartContractSource, ChartConfigEditorApplyEvent, ChartConfigEditorResetEvent, ChartConfigEditorSaveEvent, ChartContractIssueSeverity, ChartContractValidationIssue, ChartContractValidationResult, ChartEditorFieldOption, ChartEditorPreviewPayload, ChartEditorResourceOption, ChartEditorTargetOption, PraxisChartAggregation, PraxisChartAxisConfig, PraxisChartAxisLabelConfig, PraxisChartAxisPosition, PraxisChartAxisType, PraxisChartBackendPayload, PraxisChartBackendWidgetPayload, PraxisChartCanvasItem, PraxisChartCartesianSeries, PraxisChartConfig, PraxisChartConfigEditorData, PraxisChartCrossFilterEvent, PraxisChartDataRow, PraxisChartDataSource, PraxisChartDeclarativeEventAction, PraxisChartDistributionStatsRequest, PraxisChartEmptyStateConfig, PraxisChartEngineAdapter, PraxisChartEngineFactory, PraxisChartEngineRenderPayload, PraxisChartErrorStateConfig, PraxisChartGroupByStatsRequest, PraxisChartInteractionConfig, PraxisChartLegendConfig, PraxisChartLoadState, PraxisChartLocalDataSource, PraxisChartMetricConfig, PraxisChartMotionConfig, PraxisChartMotionPreset, PraxisChartPaletteToken, PraxisChartPieSlice, PraxisChartPointEvent, PraxisChartPrimitive, PraxisChartQueryConfig, PraxisChartQueryContext, PraxisChartQueryMetricConfig, PraxisChartQueryRequestEvent, PraxisChartRemoteDataResolver, PraxisChartRemoteDataResolverResult, PraxisChartRemoteDataSource, PraxisChartSchemaMeta, PraxisChartSelectionEvent, PraxisChartSeriesConfig, PraxisChartSeriesLabelConfig, PraxisChartSizingConfig, PraxisChartSizingMode, PraxisChartStateConfig, PraxisChartStatsDistributionMode, PraxisChartStatsGranularity, PraxisChartStatsMetricOperation, PraxisChartStatsMetricRequest, PraxisChartStatsOperation, PraxisChartStatsOrderBy, PraxisChartStatsRequest, PraxisChartSurfaceConfig, PraxisChartSurfaceMode, PraxisChartThemeConfig, PraxisChartThemeVariant, PraxisChartTimeSeriesStatsRequest, PraxisChartTooltipConfig, PraxisChartTransformedData, PraxisChartType, PraxisChartWidgetEditorInputs, PraxisChartWidgetEditorValue, PraxisChartWidgetInstance, PraxisChartWidgetLike, PraxisChartWidgetResolution, PraxisChartWidgetSchema, PraxisChartsI18nOptions, PraxisChartsProviderOptions, PraxisChartsText, PraxisXUiChartAggregation, PraxisXUiChartAggregationConfig, PraxisXUiChartContract, PraxisXUiChartDimension, PraxisXUiChartEventAction, PraxisXUiChartEvents, PraxisXUiChartFilter, PraxisXUiChartKind, PraxisXUiChartMetric, PraxisXUiChartMotion, PraxisXUiChartMotionPreset, PraxisXUiChartPreset, PraxisXUiChartRefresh, PraxisXUiChartRuntimeHints, PraxisXUiChartSizing, PraxisXUiChartSizingMode, PraxisXUiChartSort, PraxisXUiChartSource, PraxisXUiChartSourceKind, PraxisXUiChartState, PraxisXUiChartStateDescriptor, PraxisXUiChartStatsDistributionMode, PraxisXUiChartStatsOperation, PraxisXUiChartStatsOrderBy, PraxisXUiChartStatsSourceOptions, PraxisXUiChartSurface, PraxisXUiChartSurfaceMode, PraxisXUiChartTextValue, PraxisXUiChartTheme, PraxisXUiChartToggleableFeature };
1794
+ export { AnalyticsChartConfigAdapterService, AnalyticsChartContractService, ChartContractNormalizerService, ChartContractValidationService, ChartEditorDefaultsService, ChartEditorPreviewMapperService, ChartResourceCapabilityCatalogAdapter, PRAXIS_CHARTS_AUTHORING_MANIFEST, PRAXIS_CHARTS_I18N, PRAXIS_CHART_AUTHORING_COVERAGE, PRAXIS_CHART_BACKEND_MOCK_BAR, PRAXIS_CHART_BACKEND_MOCK_COMBO, PRAXIS_CHART_BACKEND_MOCK_DONUT, PRAXIS_CHART_BACKEND_MOCK_HORIZONTAL_BAR, PRAXIS_CHART_BACKEND_MOCK_MULTI_METRIC_BAR, PRAXIS_CHART_BACKEND_MOCK_SCATTER, PRAXIS_CHART_BACKEND_MOCK_STACKED_AREA, PRAXIS_CHART_BACKEND_MOCK_TIMESERIES, PRAXIS_CHART_COMPONENT_METADATA, PRAXIS_CHART_DRILLDOWN_DATA_BY_MONTH, PRAXIS_CHART_DRILLDOWN_PANEL_METADATA, PRAXIS_CHART_ENGINE, PRAXIS_CHART_ENGINE_FACTORY, PRAXIS_CHART_PALETTE_TOKENS, PRAXIS_CHART_STATE_PROBE_COMPONENT_METADATA, PRAXIS_CHART_THEME_VARIANTS, PRAXIS_X_UI_CHART_AUTHORABLE_VERSION, PraxisChartBackendPayloadAdapterService, PraxisChartCanonicalContractMapperService, PraxisChartComponent, PraxisChartCompositionShowcaseComponent, PraxisChartConfigEditor, PraxisChartDataTransformerService, PraxisChartDrilldownPanelComponent, PraxisChartSchemaMapperService, PraxisChartStateProbeComponent, PraxisChartStatsApiService, PraxisChartWidgetConfigEditor, PraxisMicroVisualizationComponent, buildPraxisChartInteractiveCanvasPage, buildPraxisChartInteractiveWidgetPage, buildPraxisChartMockCanvasPage, buildPraxisChartMockWidgetPage, createPraxisChartsI18nConfig, isPraxisChartPaletteToken, providePraxisChartDrilldownPanelMetadata, providePraxisChartStateProbeMetadata, providePraxisCharts, providePraxisChartsI18n, providePraxisChartsMetadata, resolvePraxisChartPaletteToken, resolvePraxisChartsText };
1795
+ export type { AnalyticsChartConfigAdapterOptions, AnalyticsChartContractDefinition, AnalyticsChartContractLoadOptions, AnalyticsChartContractLoadResult, AnalyticsChartContractSource, ChartConfigEditorApplyEvent, ChartConfigEditorResetEvent, ChartConfigEditorSaveEvent, ChartContractIssueSeverity, ChartContractValidationIssue, ChartContractValidationResult, ChartEditorEventKey, ChartEditorFieldOption, ChartEditorPreviewPayload, ChartEditorResourceOption, ChartEditorTargetOption, PraxisChartAggregation, PraxisChartAuthoringCoverageMode, PraxisChartAuthoringCoverageOwner, PraxisChartAuthoringCoverageRow, PraxisChartAxisConfig, PraxisChartAxisLabelConfig, PraxisChartAxisPosition, PraxisChartAxisType, PraxisChartBackendPayload, PraxisChartBackendWidgetPayload, PraxisChartCanvasItem, PraxisChartCartesianSeries, PraxisChartConfig, PraxisChartConfigEditorData, PraxisChartCrossFilterEvent, PraxisChartDataRow, PraxisChartDataSource, PraxisChartDeclarativeEventAction, PraxisChartDistributionStatsRequest, PraxisChartDrillDownEvent, PraxisChartEmptyStateConfig, PraxisChartEngineAdapter, PraxisChartEngineFactory, PraxisChartEngineRenderPayload, PraxisChartErrorStateConfig, PraxisChartGroupByStatsRequest, PraxisChartInteractionConfig, PraxisChartLegendConfig, PraxisChartLoadState, PraxisChartLocalDataSource, PraxisChartMetricConfig, PraxisChartMotionConfig, PraxisChartMotionPreset, PraxisChartPaletteToken, PraxisChartPieSlice, PraxisChartPointActionEvent, PraxisChartPointEvent, PraxisChartPrimitive, PraxisChartQueryConfig, PraxisChartQueryContext, PraxisChartQueryMetricConfig, PraxisChartQueryRequestEvent, PraxisChartRemoteDataResolver, PraxisChartRemoteDataResolverResult, PraxisChartRemoteDataSource, PraxisChartSchemaMeta, PraxisChartSelectionEvent, PraxisChartSeriesConfig, PraxisChartSeriesLabelConfig, PraxisChartSizingConfig, PraxisChartSizingMode, PraxisChartStateConfig, PraxisChartStatsDistributionMode, PraxisChartStatsGranularity, PraxisChartStatsMetricOperation, PraxisChartStatsMetricRequest, PraxisChartStatsOperation, PraxisChartStatsOrderBy, PraxisChartStatsRequest, PraxisChartSurfaceConfig, PraxisChartSurfaceMode, PraxisChartThemeConfig, PraxisChartThemeVariant, PraxisChartTimeSeriesStatsRequest, PraxisChartTooltipConfig, PraxisChartTransformedData, PraxisChartType, PraxisChartWidgetEditorContext, PraxisChartWidgetEditorInputs, PraxisChartWidgetEditorValue, PraxisChartWidgetInstance, PraxisChartWidgetLike, PraxisChartWidgetResolution, PraxisChartWidgetSchema, PraxisChartsI18nOptions, PraxisChartsProviderOptions, PraxisChartsText, PraxisXUiChartAggregation, PraxisXUiChartAggregationConfig, PraxisXUiChartContract, PraxisXUiChartDimension, PraxisXUiChartEventAction, PraxisXUiChartEvents, PraxisXUiChartFilter, PraxisXUiChartKind, PraxisXUiChartMetric, PraxisXUiChartMotion, PraxisXUiChartMotionPreset, PraxisXUiChartPreset, PraxisXUiChartRefresh, PraxisXUiChartRuntimeHints, PraxisXUiChartSizing, PraxisXUiChartSizingMode, PraxisXUiChartSort, PraxisXUiChartSource, PraxisXUiChartSourceKind, PraxisXUiChartState, PraxisXUiChartStateDescriptor, PraxisXUiChartStatsDistributionMode, PraxisXUiChartStatsOperation, PraxisXUiChartStatsOrderBy, PraxisXUiChartStatsSourceOptions, PraxisXUiChartSurface, PraxisXUiChartSurfaceMode, PraxisXUiChartTextValue, PraxisXUiChartTheme, PraxisXUiChartToggleableFeature };