@praxisui/charts 3.0.0-beta.9 → 5.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -279,3 +279,17 @@ The current runtime does not yet expose as stable public surface:
279
279
  - the package is designed for the Praxis platform model, where chart semantics live in canonical contracts and not in engine-specific payloads
280
280
  - if you are integrating charts into dynamic pages or widget shells, prefer the exported Praxis contracts and mappers over direct engine customization
281
281
  - if you need raw ECharts tuning, treat it as adapter-level implementation detail unless the contract is promoted to the public surface intentionally
282
+
283
+ ## Reusable `x-ui.analytics` Runtime Pattern
284
+
285
+ When the backend publishes `x-ui.analytics.projections[]`, the reusable platform path is now:
286
+
287
+ 1. `@praxisui/core` resolves the contract with `AnalyticsSchemaContractService`
288
+ 2. `AnalyticsPresentationResolver` chooses the presentation family
289
+ 3. `AnalyticsChartContractService` in `@praxisui/charts` materializes the selected projection into `PraxisChartConfig`
290
+
291
+ This keeps chart hosts out of the business of:
292
+ - calling `/schemas/filtered` manually
293
+ - parsing `x-ui.analytics` by hand
294
+ - selecting projections ad hoc
295
+ - rebuilding the chart contract pipeline inside each app
@@ -2,7 +2,7 @@ import { CommonModule } from '@angular/common';
2
2
  import * as i0 from '@angular/core';
3
3
  import { Injectable, Inject, InjectionToken, input, booleanAttribute, output, viewChild, inject, ElementRef, DestroyRef, signal, computed, afterNextRender, effect, ChangeDetectionStrategy, Component, ENVIRONMENT_INITIALIZER } from '@angular/core';
4
4
  import * as i1$2 from '@praxisui/core';
5
- import { buildApiUrl, API_URL, PraxisI18nService, SETTINGS_PANEL_BRIDGE, ComponentMetadataRegistry, createDefaultTableConfig, DynamicWidgetPageComponent, providePraxisI18n, SETTINGS_PANEL_DATA } from '@praxisui/core';
5
+ import { buildApiUrl, API_URL, PraxisI18nService, SETTINGS_PANEL_BRIDGE, ComponentMetadataRegistry, createDefaultTableConfig, AnalyticsStatsRequestBuilderService, DynamicWidgetPageComponent, providePraxisI18n, SETTINGS_PANEL_DATA } from '@praxisui/core';
6
6
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
7
7
  import * as i1$1 from '@angular/material/button';
8
8
  import { MatButtonModule } from '@angular/material/button';
@@ -2818,6 +2818,245 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
2818
2818
  args: [{ providedIn: 'root' }]
2819
2819
  }], ctorParameters: () => [{ type: PraxisChartSchemaMapperService }, { type: PraxisChartCanonicalContractMapperService }] });
2820
2820
 
2821
+ class AnalyticsChartConfigAdapterService {
2822
+ statsBuilder = new AnalyticsStatsRequestBuilderService();
2823
+ toPraxisChartConfig(projection, options) {
2824
+ const chartType = this.resolveChartType(projection);
2825
+ const orientation = chartType === 'horizontal-bar' ? 'horizontal' : undefined;
2826
+ const dimension = projection.bindings.primaryDimension;
2827
+ const metrics = projection.bindings.primaryMetrics ?? [];
2828
+ if (!dimension?.field) {
2829
+ throw new Error(`AnalyticsChartConfigAdapterService requires primaryDimension for projection "${projection.id}".`);
2830
+ }
2831
+ if (!metrics.length) {
2832
+ throw new Error(`AnalyticsChartConfigAdapterService requires at least one metric for projection "${projection.id}".`);
2833
+ }
2834
+ return {
2835
+ id: projection.id,
2836
+ type: chartType,
2837
+ orientation,
2838
+ title: options?.title,
2839
+ subtitle: options?.subtitle,
2840
+ height: options?.height,
2841
+ axes: this.buildAxes(projection, chartType),
2842
+ series: this.buildSeries(projection, chartType),
2843
+ dataSource: this.buildDataSource(projection),
2844
+ interactions: {
2845
+ pointClick: Boolean(projection.interactions?.pointSelection || projection.interactions?.drillDown),
2846
+ drillDown: Boolean(projection.interactions?.drillDown),
2847
+ selection: Boolean(projection.interactions?.pointSelection),
2848
+ },
2849
+ };
2850
+ }
2851
+ buildAxes(projection, chartType) {
2852
+ const dimension = projection.bindings.primaryDimension;
2853
+ const metrics = this.getDisplayMetrics(projection);
2854
+ const firstMetric = metrics[0];
2855
+ if (chartType === 'pie' || chartType === 'donut') {
2856
+ return {
2857
+ x: {
2858
+ field: dimension.field,
2859
+ label: dimension.label ?? undefined,
2860
+ },
2861
+ };
2862
+ }
2863
+ return {
2864
+ x: {
2865
+ field: dimension.field,
2866
+ label: dimension.label ?? undefined,
2867
+ type: dimension.role === 'time' ? 'time' : 'category',
2868
+ },
2869
+ y: {
2870
+ label: metrics.length === 1
2871
+ ? firstMetric?.label ?? firstMetric?.field
2872
+ : undefined,
2873
+ type: 'value',
2874
+ },
2875
+ };
2876
+ }
2877
+ buildSeries(projection, chartType) {
2878
+ const dimension = projection.bindings.primaryDimension;
2879
+ return this.getDisplayMetrics(projection).map((metric, index) => ({
2880
+ id: `${projection.id}.${metric.field}.${index + 1}`,
2881
+ name: metric.label ?? metric.field,
2882
+ type: chartType,
2883
+ categoryField: chartType === 'pie' || chartType === 'donut' ? dimension.field : undefined,
2884
+ metric: {
2885
+ field: metric.field,
2886
+ aggregation: this.mapAggregation(metric.aggregation),
2887
+ label: metric.label ?? undefined,
2888
+ },
2889
+ smooth: chartType === 'line' || chartType === 'area',
2890
+ }));
2891
+ }
2892
+ buildDataSource(projection) {
2893
+ const executionPlan = this.statsBuilder.buildExecutionPlan(projection);
2894
+ return {
2895
+ kind: 'remote',
2896
+ resourcePath: executionPlan.resourcePath,
2897
+ schemaId: executionPlan.resourcePath,
2898
+ query: {
2899
+ sourceKind: 'praxis.stats',
2900
+ statsOperation: executionPlan.operation,
2901
+ statsPath: executionPlan.statsPath,
2902
+ statsRequest: executionPlan.statsRequest,
2903
+ dimensions: executionPlan.dimensions,
2904
+ metrics: this.mapExecutionMetrics(executionPlan),
2905
+ sort: executionPlan.sort,
2906
+ limit: executionPlan.limit,
2907
+ },
2908
+ };
2909
+ }
2910
+ resolveChartType(projection) {
2911
+ if (projection.intent === 'trend' && projection.source.operation === 'timeseries') {
2912
+ return 'line';
2913
+ }
2914
+ if (projection.intent === 'ranking' && projection.source.operation === 'group-by') {
2915
+ return 'horizontal-bar';
2916
+ }
2917
+ if (projection.intent === 'composition') {
2918
+ return 'pie';
2919
+ }
2920
+ if (projection.intent === 'distribution') {
2921
+ return 'bar';
2922
+ }
2923
+ return 'bar';
2924
+ }
2925
+ mapAggregation(aggregation) {
2926
+ const normalizedAggregation = (aggregation ?? '').toLowerCase();
2927
+ switch (normalizedAggregation) {
2928
+ case 'avg':
2929
+ case 'min':
2930
+ case 'max':
2931
+ case 'count':
2932
+ case 'sum':
2933
+ return normalizedAggregation;
2934
+ case '':
2935
+ return undefined;
2936
+ default:
2937
+ throw new Error(`Analytics aggregation "${aggregation}" is not supported in @praxisui/charts.`);
2938
+ }
2939
+ }
2940
+ mapExecutionMetrics(executionPlan) {
2941
+ return executionPlan.metrics.map((metric) => ({
2942
+ field: metric.field,
2943
+ aggregation: this.mapAggregation(metric.aggregation),
2944
+ alias: metric.alias,
2945
+ }));
2946
+ }
2947
+ getDisplayMetrics(projection) {
2948
+ return [
2949
+ ...(projection.bindings.primaryMetrics ?? []),
2950
+ ...(projection.bindings.secondaryMetrics ?? []),
2951
+ ];
2952
+ }
2953
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: AnalyticsChartConfigAdapterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
2954
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: AnalyticsChartConfigAdapterService, providedIn: 'root' });
2955
+ }
2956
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: AnalyticsChartConfigAdapterService, decorators: [{
2957
+ type: Injectable,
2958
+ args: [{ providedIn: 'root' }]
2959
+ }] });
2960
+
2961
+ class AnalyticsChartContractService {
2962
+ analyticsSchema;
2963
+ resolver;
2964
+ chartAdapter;
2965
+ constructor(analyticsSchema, resolver, chartAdapter) {
2966
+ this.analyticsSchema = analyticsSchema;
2967
+ this.resolver = resolver;
2968
+ this.chartAdapter = chartAdapter;
2969
+ }
2970
+ buildBootstrapChartConfigs(definitions) {
2971
+ return definitions.reduce((acc, definition) => {
2972
+ acc[definition.key] = this.buildChartConfig({
2973
+ projection: definition.fallbackProjection,
2974
+ title: definition.title,
2975
+ subtitle: definition.subtitle,
2976
+ });
2977
+ return acc;
2978
+ }, {});
2979
+ }
2980
+ async loadChartConfigs(definitions, options) {
2981
+ const results = await Promise.all(definitions.map((definition) => this.loadSingleChartConfig(definition, options)));
2982
+ return {
2983
+ configs: results.reduce((acc, result) => {
2984
+ acc[result.key] = result.config;
2985
+ return acc;
2986
+ }, {}),
2987
+ sources: results.reduce((acc, result) => {
2988
+ acc[result.key] = result.source;
2989
+ return acc;
2990
+ }, {}),
2991
+ errors: results.reduce((acc, result) => {
2992
+ if (result.error) {
2993
+ acc[result.key] = result.error;
2994
+ }
2995
+ return acc;
2996
+ }, {}),
2997
+ };
2998
+ }
2999
+ async loadSingleChartConfig(definition, options) {
3000
+ const fallbackConfig = this.buildChartConfig({
3001
+ projection: definition.fallbackProjection,
3002
+ title: definition.title,
3003
+ subtitle: definition.subtitle,
3004
+ });
3005
+ try {
3006
+ const analytics = await this.analyticsSchema.getAnalytics({
3007
+ path: definition.path,
3008
+ cacheNamespace: options?.cacheNamespace,
3009
+ });
3010
+ const projection = analytics.projections.find((candidate) => candidate.id === definition.projectionId);
3011
+ if (!projection) {
3012
+ throw new Error(`Projection "${definition.projectionId}" was not published for ${definition.path}.`);
3013
+ }
3014
+ return {
3015
+ key: definition.key,
3016
+ source: 'remote',
3017
+ config: this.buildChartConfig({
3018
+ projection,
3019
+ title: definition.title,
3020
+ subtitle: definition.subtitle,
3021
+ }),
3022
+ };
3023
+ }
3024
+ catch (error) {
3025
+ return {
3026
+ key: definition.key,
3027
+ source: 'fallback',
3028
+ config: fallbackConfig,
3029
+ error: normalizeError(error),
3030
+ };
3031
+ }
3032
+ }
3033
+ buildChartConfig(params) {
3034
+ const decision = this.resolver.resolve({ projections: [params.projection] }, {
3035
+ availableFamilies: ['chart', 'analytic-table'],
3036
+ preferFamily: 'chart',
3037
+ });
3038
+ if (decision.family !== 'chart') {
3039
+ throw new Error(`Projection "${params.projection.id}" did not resolve to the chart family.`);
3040
+ }
3041
+ return this.chartAdapter.toPraxisChartConfig(params.projection, {
3042
+ title: params.title,
3043
+ subtitle: params.subtitle,
3044
+ });
3045
+ }
3046
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: AnalyticsChartContractService, deps: [{ token: i1$2.AnalyticsSchemaContractService }, { token: i1$2.AnalyticsPresentationResolver }, { token: AnalyticsChartConfigAdapterService }], target: i0.ɵɵFactoryTarget.Injectable });
3047
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: AnalyticsChartContractService, providedIn: 'root' });
3048
+ }
3049
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: AnalyticsChartContractService, decorators: [{
3050
+ type: Injectable,
3051
+ args: [{ providedIn: 'root' }]
3052
+ }], ctorParameters: () => [{ type: i1$2.AnalyticsSchemaContractService }, { type: i1$2.AnalyticsPresentationResolver }, { type: AnalyticsChartConfigAdapterService }] });
3053
+ function normalizeError(error) {
3054
+ if (error instanceof Error && error.message.trim()) {
3055
+ return error.message.trim();
3056
+ }
3057
+ return 'Unknown analytics contract error.';
3058
+ }
3059
+
2821
3060
  const PRAXIS_CHART_BACKEND_MOCK_BAR = {
2822
3061
  schemaMeta: {
2823
3062
  schemaId: 'api/human-resources/vw-perfil-heroi|post|response|tenant:demo|locale:pt-BR',
@@ -3386,7 +3625,7 @@ function buildPraxisChartInteractiveWidgetPage(adapter) {
3386
3625
  },
3387
3626
  shell: {
3388
3627
  title: 'Runtime Probe',
3389
- subtitle: 'Conectado via WidgetDefinition.connections',
3628
+ subtitle: 'Conectado via composition.links',
3390
3629
  },
3391
3630
  },
3392
3631
  withShowcaseViewToggle(adapter.toWidgetInstance(PRAXIS_CHART_BACKEND_MOCK_DONUT)),
@@ -3395,16 +3634,10 @@ function buildPraxisChartInteractiveWidgetPage(adapter) {
3395
3634
  withShowcaseViewToggle(adapter.toWidgetInstance(PRAXIS_CHART_BACKEND_MOCK_SCATTER)),
3396
3635
  withShowcaseViewToggle(adapter.toWidgetInstance(PRAXIS_CHART_BACKEND_MOCK_COMBO)),
3397
3636
  ],
3398
- connections: [
3399
- {
3400
- from: { widget: 'monthly-revenue-chart', output: 'pointClick' },
3401
- to: { widget: 'chart-event-probe', input: 'value' },
3402
- },
3403
- {
3404
- from: { widget: 'monthly-revenue-chart', output: 'pointClick' },
3405
- to: { widget: 'chart-drilldown-panel', input: 'selection' },
3406
- },
3407
- ],
3637
+ composition: {
3638
+ version: '1.0.0',
3639
+ links: buildInteractiveCompositionLinks(),
3640
+ },
3408
3641
  layout: {
3409
3642
  orientation: 'columns',
3410
3643
  columns: 2,
@@ -3454,21 +3687,19 @@ function buildPraxisChartInteractiveCanvasPage(adapter) {
3454
3687
  widget: withShowcaseViewToggle(adapter.toWidgetInstance(PRAXIS_CHART_BACKEND_MOCK_COMBO)),
3455
3688
  canvasItem: { col: 1, row: 25, colSpan: 12, rowSpan: 4 },
3456
3689
  },
3457
- ], [
3458
- {
3459
- from: { widget: 'monthly-revenue-chart', output: 'pointClick' },
3460
- to: { widget: 'chart-event-probe', input: 'value' },
3461
- },
3462
- {
3463
- from: { widget: 'monthly-revenue-chart', output: 'pointClick' },
3464
- to: { widget: 'chart-drilldown-panel', input: 'selection' },
3465
- },
3466
- ]);
3690
+ ], buildInteractiveCompositionLinks());
3467
3691
  }
3468
- function buildCanvasPage(entries, connections) {
3692
+ function buildCanvasPage(entries, compositionLinks) {
3469
3693
  return {
3470
3694
  widgets: entries.map((entry) => entry.widget),
3471
- connections,
3695
+ ...(compositionLinks?.length
3696
+ ? {
3697
+ composition: {
3698
+ version: '1.0.0',
3699
+ links: compositionLinks,
3700
+ },
3701
+ }
3702
+ : {}),
3472
3703
  canvas: {
3473
3704
  mode: 'grid',
3474
3705
  columns: 12,
@@ -3506,10 +3737,60 @@ function buildProbeWidget() {
3506
3737
  },
3507
3738
  shell: {
3508
3739
  title: 'Runtime Probe',
3509
- subtitle: 'Conectado via WidgetDefinition.connections',
3740
+ subtitle: 'Conectado via composition.links',
3510
3741
  },
3511
3742
  };
3512
3743
  }
3744
+ function buildInteractiveCompositionLinks() {
3745
+ return [
3746
+ {
3747
+ id: 'persisted:monthly-revenue-chart.pointClick->chart-event-probe.value',
3748
+ from: {
3749
+ kind: 'component-port',
3750
+ ref: {
3751
+ widget: 'monthly-revenue-chart',
3752
+ port: 'pointClick',
3753
+ direction: 'output',
3754
+ },
3755
+ },
3756
+ to: {
3757
+ kind: 'component-port',
3758
+ ref: {
3759
+ widget: 'chart-event-probe',
3760
+ port: 'value',
3761
+ direction: 'input',
3762
+ },
3763
+ },
3764
+ intent: 'event-propagation',
3765
+ metadata: {
3766
+ source: 'persisted-composition-link',
3767
+ },
3768
+ },
3769
+ {
3770
+ id: 'persisted:monthly-revenue-chart.pointClick->chart-drilldown-panel.selection',
3771
+ from: {
3772
+ kind: 'component-port',
3773
+ ref: {
3774
+ widget: 'monthly-revenue-chart',
3775
+ port: 'pointClick',
3776
+ direction: 'output',
3777
+ },
3778
+ },
3779
+ to: {
3780
+ kind: 'component-port',
3781
+ ref: {
3782
+ widget: 'chart-drilldown-panel',
3783
+ port: 'selection',
3784
+ direction: 'input',
3785
+ },
3786
+ },
3787
+ intent: 'event-propagation',
3788
+ metadata: {
3789
+ source: 'persisted-composition-link',
3790
+ },
3791
+ },
3792
+ ];
3793
+ }
3513
3794
  function withShowcaseViewToggle(widget, initialViewMode = 'chart') {
3514
3795
  return {
3515
3796
  ...widget,
@@ -4072,123 +4353,123 @@ const PRAXIS_CHARTS_EN_US = {
4072
4353
  };
4073
4354
 
4074
4355
  const PRAXIS_CHARTS_PT_BR = {
4075
- 'praxis.charts.runtime.editChart': 'Editar configuracoes do chart',
4076
- 'praxis.charts.runtime.invalidDocumentTitle': 'Configuracao canonica invalida',
4077
- 'praxis.charts.runtime.invalidDocumentDescription': 'O documento canonico do chart nao pode ser mapeado para o runtime atual do Praxis Charts. Revise o contrato do chart antes de continuar.',
4356
+ 'praxis.charts.runtime.editChart': 'Editar configurações do gráfico',
4357
+ 'praxis.charts.runtime.invalidDocumentTitle': 'Configuração canônica inválida',
4358
+ 'praxis.charts.runtime.invalidDocumentDescription': 'O documento canônico do gráfico não pode ser mapeado para o runtime atual do Praxis Charts. Revise o contrato do gráfico antes de continuar.',
4078
4359
  'praxis.charts.editor.section.general': 'Geral',
4079
4360
  'praxis.charts.editor.section.data': 'Dados',
4080
4361
  'praxis.charts.editor.section.analytics': 'Estrutura',
4081
- 'praxis.charts.editor.section.appearance': 'Aparencia',
4082
- 'praxis.charts.editor.section.motion': 'Motion',
4362
+ 'praxis.charts.editor.section.appearance': 'Aparência',
4363
+ 'praxis.charts.editor.section.motion': 'Movimento',
4083
4364
  'praxis.charts.editor.section.events': 'Eventos',
4084
- 'praxis.charts.editor.section.preview': 'Preview',
4085
- 'praxis.charts.editor.field.chartId': 'Chart ID',
4365
+ 'praxis.charts.editor.section.preview': 'Visualização',
4366
+ 'praxis.charts.editor.field.chartId': 'ID do Gráfico',
4086
4367
  'praxis.charts.editor.field.kind': 'Tipo',
4087
- 'praxis.charts.editor.field.title': 'Titulo',
4088
- 'praxis.charts.editor.field.subtitle': 'Subtitulo',
4368
+ 'praxis.charts.editor.field.title': 'Título',
4369
+ 'praxis.charts.editor.field.subtitle': 'Subtítulo',
4089
4370
  'praxis.charts.editor.field.height': 'Altura',
4090
4371
  'praxis.charts.editor.field.sourceKind': 'Fonte',
4091
4372
  'praxis.charts.editor.field.resource': 'Recurso',
4092
- 'praxis.charts.editor.field.operation': 'Operacao',
4373
+ 'praxis.charts.editor.field.operation': 'Operação',
4093
4374
  'praxis.charts.editor.field.granularity': 'Granularidade',
4094
4375
  'praxis.charts.editor.field.fillGaps': 'Preencher intervalos sem dados',
4095
- 'praxis.charts.editor.field.distributionMode': 'Modo da distribuicao',
4376
+ 'praxis.charts.editor.field.distributionMode': 'Modo de distribuição',
4096
4377
  'praxis.charts.editor.field.bucketSize': 'Tamanho do bucket',
4097
4378
  'praxis.charts.editor.field.bucketCount': 'Quantidade de buckets',
4098
- 'praxis.charts.editor.field.dimension': 'Dimensao',
4099
- 'praxis.charts.editor.field.dimensionRole': 'Papel da dimensao',
4100
- 'praxis.charts.editor.field.metric': 'Metrica',
4101
- 'praxis.charts.editor.field.metricLabel': 'Label da metrica',
4102
- 'praxis.charts.editor.field.metricAggregation': 'Agregacao',
4379
+ 'praxis.charts.editor.field.dimension': 'Dimensão',
4380
+ 'praxis.charts.editor.field.dimensionRole': 'Papel da dimensão',
4381
+ 'praxis.charts.editor.field.metric': 'Métrica',
4382
+ 'praxis.charts.editor.field.metricLabel': 'Rótulo da métrica',
4383
+ 'praxis.charts.editor.field.metricAggregation': 'Agregação',
4103
4384
  'praxis.charts.editor.field.metricAxis': 'Eixo',
4104
- 'praxis.charts.editor.field.metricSeriesKind': 'Tipo da serie',
4385
+ 'praxis.charts.editor.field.metricSeriesKind': 'Tipo da série',
4105
4386
  'praxis.charts.editor.field.legendEnabled': 'Exibir legenda',
4106
- 'praxis.charts.editor.field.labelsEnabled': 'Exibir labels',
4107
- 'praxis.charts.editor.field.tooltipEnabled': 'Exibir tooltip',
4387
+ 'praxis.charts.editor.field.labelsEnabled': 'Exibir rótulos',
4388
+ 'praxis.charts.editor.field.tooltipEnabled': 'Exibir dica de ferramenta (tooltip)',
4108
4389
  'praxis.charts.editor.field.palette': 'Cores da paleta',
4109
- 'praxis.charts.editor.field.emptyTitle': 'Titulo do estado vazio',
4110
- 'praxis.charts.editor.field.emptyDescription': 'Descricao do estado vazio',
4111
- 'praxis.charts.editor.field.loadingTitle': 'Titulo do loading',
4112
- 'praxis.charts.editor.field.loadingDescription': 'Descricao do loading',
4113
- 'praxis.charts.editor.field.errorTitle': 'Titulo do erro',
4114
- 'praxis.charts.editor.field.errorDescription': 'Descricao do erro',
4115
- 'praxis.charts.editor.field.motionEnabled': 'Ativar animacoes',
4116
- 'praxis.charts.editor.field.motionPreset': 'Preset de motion',
4117
- 'praxis.charts.editor.field.eventAction': 'Acao',
4390
+ 'praxis.charts.editor.field.emptyTitle': 'Título do estado vazio',
4391
+ 'praxis.charts.editor.field.emptyDescription': 'Descrição do estado vazio',
4392
+ 'praxis.charts.editor.field.loadingTitle': 'Título de carregamento',
4393
+ 'praxis.charts.editor.field.loadingDescription': 'Descrição de carregamento',
4394
+ 'praxis.charts.editor.field.errorTitle': 'Título do erro',
4395
+ 'praxis.charts.editor.field.errorDescription': 'Descrição do erro',
4396
+ 'praxis.charts.editor.field.motionEnabled': 'Ativar animações',
4397
+ 'praxis.charts.editor.field.motionPreset': 'Predefinição de movimento',
4398
+ 'praxis.charts.editor.field.eventAction': 'Ação',
4118
4399
  'praxis.charts.editor.field.eventTarget': 'Destino',
4119
4400
  'praxis.charts.editor.field.eventMapping': 'Mapeamento',
4120
- 'praxis.charts.editor.preview.title': 'Preview do chart',
4121
- 'praxis.charts.editor.preview.caption': 'Preview local derivado do contrato canonico, sem chamadas remotas.',
4122
- 'praxis.charts.editor.preview.invalid': 'O preview fica indisponivel enquanto houver erro bloqueante no contrato.',
4123
- 'praxis.charts.editor.issues.title': 'Issues de validacao',
4124
- 'praxis.charts.editor.issues.empty': 'Nenhum issue identificado.',
4401
+ 'praxis.charts.editor.preview.title': 'Visualização do gráfico',
4402
+ 'praxis.charts.editor.preview.caption': 'Visualização local derivada do contrato canônico, sem chamadas remotas.',
4403
+ 'praxis.charts.editor.preview.invalid': 'A visualização fica indisponível enquanto houver erro bloqueante no contrato.',
4404
+ 'praxis.charts.editor.issues.title': 'Problemas de validação',
4405
+ 'praxis.charts.editor.issues.empty': 'Nenhum problema identificado.',
4125
4406
  'praxis.charts.editor.appearance.featuresTitle': 'Recursos visuais',
4126
4407
  'praxis.charts.editor.appearance.paletteTitle': 'Paleta',
4127
- 'praxis.charts.editor.appearance.paletteHint': 'Use cores separadas por virgula ou linha para persistir `theme.palette` como array canonico.',
4408
+ 'praxis.charts.editor.appearance.paletteHint': 'Use cores separadas por vírgula ou linha para persistir `theme.palette` como array canônico.',
4128
4409
  'praxis.charts.editor.appearance.statesTitle': 'Mensagens de estado',
4129
- 'praxis.charts.editor.analytics.dimensionsTitle': 'Dimensoes',
4130
- 'praxis.charts.editor.analytics.metricsTitle': 'Metricas',
4131
- 'praxis.charts.editor.analytics.addDimension': 'Adicionar dimensao',
4132
- 'praxis.charts.editor.analytics.addMetric': 'Adicionar metrica',
4133
- 'praxis.charts.editor.analytics.removeDimension': 'Remover dimensao',
4134
- 'praxis.charts.editor.analytics.removeMetric': 'Remover metrica',
4135
- 'praxis.charts.editor.specialization.timeseriesTitle': 'Opcoes de series temporais',
4136
- 'praxis.charts.editor.specialization.distributionTitle': 'Opcoes de distribuicao',
4410
+ 'praxis.charts.editor.analytics.dimensionsTitle': 'Dimensões',
4411
+ 'praxis.charts.editor.analytics.metricsTitle': 'Métricas',
4412
+ 'praxis.charts.editor.analytics.addDimension': 'Adicionar dimensão',
4413
+ 'praxis.charts.editor.analytics.addMetric': 'Adicionar métrica',
4414
+ 'praxis.charts.editor.analytics.removeDimension': 'Remover dimensão',
4415
+ 'praxis.charts.editor.analytics.removeMetric': 'Remover métrica',
4416
+ 'praxis.charts.editor.specialization.timeseriesTitle': 'Opções de séries temporais',
4417
+ 'praxis.charts.editor.specialization.distributionTitle': 'Opções de distribuição',
4137
4418
  'praxis.charts.editor.specialization.comboTitle': 'Guia de combo',
4138
- 'praxis.charts.editor.specialization.comboHint': 'Charts combo exigem pelo menos duas metricas e permitem configurar eixo e tipo de serie por metrica.',
4139
- 'praxis.charts.editor.specialization.pieDonutTitle': 'Guia de composicao',
4140
- 'praxis.charts.editor.specialization.pieDonutHint': 'Charts pie e donut mantem apenas a primeira metrica e usam a primeira dimensao como segmento categorico.',
4141
- 'praxis.charts.editor.specialization.scatterTitle': 'Guia de scatter',
4142
- 'praxis.charts.editor.specialization.scatterHint': 'Charts scatter usam a primeira dimensao como eixo X e a primeira metrica como eixo Y.',
4419
+ 'praxis.charts.editor.specialization.comboHint': 'Gráficos combo exigem pelo menos duas métricas e permitem configurar eixo e tipo de série por métrica.',
4420
+ 'praxis.charts.editor.specialization.pieDonutTitle': 'Guia de composição',
4421
+ 'praxis.charts.editor.specialization.pieDonutHint': 'Gráficos de pizza (pie) e rosca (donut) mantêm apenas a primeira métrica e usam a primeira dimensão como segmento categórico.',
4422
+ 'praxis.charts.editor.specialization.scatterTitle': 'Guia de dispersão (scatter)',
4423
+ 'praxis.charts.editor.specialization.scatterHint': 'Gráficos de dispersão usam a primeira dimensão como eixo X e a primeira métrica como eixo Y.',
4143
4424
  'praxis.charts.editor.events.pointClickTitle': 'Clique no ponto',
4144
4425
  'praxis.charts.editor.events.drillDownTitle': 'Drill down',
4145
4426
  'praxis.charts.editor.events.none': 'Nenhuma',
4146
4427
  'praxis.charts.editor.sourceKind.praxisStats': 'praxis.stats',
4147
- 'praxis.charts.editor.sourceKind.derived': 'derived',
4148
- 'praxis.charts.editor.operation.groupBy': 'group-by',
4149
- 'praxis.charts.editor.operation.timeseries': 'timeseries',
4150
- 'praxis.charts.editor.operation.distribution': 'distribution',
4151
- 'praxis.charts.editor.granularity.hour': 'hour',
4152
- 'praxis.charts.editor.granularity.day': 'day',
4153
- 'praxis.charts.editor.granularity.week': 'week',
4154
- 'praxis.charts.editor.granularity.month': 'month',
4155
- 'praxis.charts.editor.granularity.quarter': 'quarter',
4156
- 'praxis.charts.editor.granularity.year': 'year',
4157
- 'praxis.charts.editor.distributionMode.terms': 'terms',
4158
- 'praxis.charts.editor.distributionMode.histogram': 'histogram',
4428
+ 'praxis.charts.editor.sourceKind.derived': 'derivado',
4429
+ 'praxis.charts.editor.operation.groupBy': 'agrupar por',
4430
+ 'praxis.charts.editor.operation.timeseries': 'série temporal',
4431
+ 'praxis.charts.editor.operation.distribution': 'distribuição',
4432
+ 'praxis.charts.editor.granularity.hour': 'hora',
4433
+ 'praxis.charts.editor.granularity.day': 'dia',
4434
+ 'praxis.charts.editor.granularity.week': 'semana',
4435
+ 'praxis.charts.editor.granularity.month': 'mês',
4436
+ 'praxis.charts.editor.granularity.quarter': 'trimestre',
4437
+ 'praxis.charts.editor.granularity.year': 'ano',
4438
+ 'praxis.charts.editor.distributionMode.terms': 'termos',
4439
+ 'praxis.charts.editor.distributionMode.histogram': 'histograma',
4159
4440
  'praxis.charts.editor.motionPreset.subtle': 'sutil',
4160
- 'praxis.charts.editor.motionPreset.standard': 'padrao',
4441
+ 'praxis.charts.editor.motionPreset.standard': 'padrão',
4161
4442
  'praxis.charts.editor.motionPreset.expressive': 'expressivo',
4162
- 'praxis.charts.editor.dimensionRole.category': 'category',
4163
- 'praxis.charts.editor.dimensionRole.series': 'series',
4164
- 'praxis.charts.editor.dimensionRole.segment': 'segment',
4165
- 'praxis.charts.editor.dimensionRole.time': 'time',
4166
- 'praxis.charts.editor.dimensionRole.value': 'value',
4167
- 'praxis.charts.editor.metricAggregation.sum': 'sum',
4168
- 'praxis.charts.editor.metricAggregation.count': 'count',
4169
- 'praxis.charts.editor.metricAggregation.avg': 'avg',
4170
- 'praxis.charts.editor.metricAggregation.min': 'min',
4171
- 'praxis.charts.editor.metricAggregation.max': 'max',
4172
- 'praxis.charts.editor.metricAxis.primary': 'primary',
4173
- 'praxis.charts.editor.metricAxis.secondary': 'secondary',
4174
- 'praxis.charts.editor.metricSeriesKind.bar': 'bar',
4175
- 'praxis.charts.editor.metricSeriesKind.line': 'line',
4176
- 'praxis.charts.editor.metricSeriesKind.area': 'area',
4177
- 'praxis.charts.editor.eventAction.filter-widget': 'filter-widget',
4178
- 'praxis.charts.editor.eventAction.open-detail': 'open-detail',
4179
- 'praxis.charts.editor.eventAction.navigate': 'navigate',
4180
- 'praxis.charts.editor.eventAction.update-context': 'update-context',
4181
- 'praxis.charts.editor.eventAction.emit': 'emit',
4182
- 'praxis.charts.editor.kind.bar': 'Bar',
4183
- 'praxis.charts.editor.kind.horizontal-bar': 'Horizontal Bar',
4184
- 'praxis.charts.editor.kind.line': 'Line',
4185
- 'praxis.charts.editor.kind.area': 'Area',
4186
- 'praxis.charts.editor.kind.stacked-bar': 'Stacked Bar',
4187
- 'praxis.charts.editor.kind.stacked-area': 'Stacked Area',
4188
- 'praxis.charts.editor.kind.combo': 'Combo',
4189
- 'praxis.charts.editor.kind.pie': 'Pie',
4190
- 'praxis.charts.editor.kind.donut': 'Donut',
4191
- 'praxis.charts.editor.kind.scatter': 'Scatter',
4443
+ 'praxis.charts.editor.dimensionRole.category': 'categoria',
4444
+ 'praxis.charts.editor.dimensionRole.series': 'série',
4445
+ 'praxis.charts.editor.dimensionRole.segment': 'segmento',
4446
+ 'praxis.charts.editor.dimensionRole.time': 'tempo',
4447
+ 'praxis.charts.editor.dimensionRole.value': 'valor',
4448
+ 'praxis.charts.editor.metricAggregation.sum': 'soma',
4449
+ 'praxis.charts.editor.metricAggregation.count': 'contagem',
4450
+ 'praxis.charts.editor.metricAggregation.avg': 'média',
4451
+ 'praxis.charts.editor.metricAggregation.min': 'mínimo',
4452
+ 'praxis.charts.editor.metricAggregation.max': 'máximo',
4453
+ 'praxis.charts.editor.metricAxis.primary': 'primário',
4454
+ 'praxis.charts.editor.metricAxis.secondary': 'secundário',
4455
+ 'praxis.charts.editor.metricSeriesKind.bar': 'barra',
4456
+ 'praxis.charts.editor.metricSeriesKind.line': 'linha',
4457
+ 'praxis.charts.editor.metricSeriesKind.area': 'área',
4458
+ 'praxis.charts.editor.eventAction.filter-widget': 'filtrar widget',
4459
+ 'praxis.charts.editor.eventAction.open-detail': 'abrir detalhes',
4460
+ 'praxis.charts.editor.eventAction.navigate': 'navegar',
4461
+ 'praxis.charts.editor.eventAction.update-context': 'atualizar contexto',
4462
+ 'praxis.charts.editor.eventAction.emit': 'emitir',
4463
+ 'praxis.charts.editor.kind.bar': 'Barra',
4464
+ 'praxis.charts.editor.kind.horizontal-bar': 'Barra Horizontal',
4465
+ 'praxis.charts.editor.kind.line': 'Linha',
4466
+ 'praxis.charts.editor.kind.area': 'Área',
4467
+ 'praxis.charts.editor.kind.stacked-bar': 'Barra Empilhada',
4468
+ 'praxis.charts.editor.kind.stacked-area': 'Área Empilhada',
4469
+ 'praxis.charts.editor.kind.combo': 'Combinado (Combo)',
4470
+ 'praxis.charts.editor.kind.pie': 'Pizza (Pie)',
4471
+ 'praxis.charts.editor.kind.donut': 'Rosca (Donut)',
4472
+ 'praxis.charts.editor.kind.scatter': 'Dispersão (Scatter)',
4192
4473
  };
4193
4474
 
4194
4475
  const PRAXIS_CHARTS_I18N = new InjectionToken('PRAXIS_CHARTS_I18N', {
@@ -4999,4 +5280,4 @@ var praxisChartConfigEditor = /*#__PURE__*/Object.freeze({
4999
5280
  * Generated bundle index. Do not edit.
5000
5281
  */
5001
5282
 
5002
- export { ChartContractNormalizerService, ChartContractValidationService, ChartEditorDefaultsService, ChartEditorPreviewMapperService, 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_STATE_PROBE_COMPONENT_METADATA, PraxisChartBackendPayloadAdapterService, PraxisChartCanonicalContractMapperService, PraxisChartComponent, PraxisChartCompositionShowcaseComponent, PraxisChartConfigEditor, PraxisChartDataTransformerService, PraxisChartDrilldownPanelComponent, PraxisChartOptionBuilderService, PraxisChartSchemaMapperService, PraxisChartStateProbeComponent, PraxisChartStatsApiService, buildPraxisChartInteractiveCanvasPage, buildPraxisChartInteractiveWidgetPage, buildPraxisChartMockCanvasPage, buildPraxisChartMockWidgetPage, createPraxisChartsI18nConfig, providePraxisChartDrilldownPanelMetadata, providePraxisChartStateProbeMetadata, providePraxisCharts, providePraxisChartsI18n, providePraxisChartsMetadata, resolvePraxisChartsText };
5283
+ export { AnalyticsChartConfigAdapterService, AnalyticsChartContractService, ChartContractNormalizerService, ChartContractValidationService, ChartEditorDefaultsService, ChartEditorPreviewMapperService, 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_STATE_PROBE_COMPONENT_METADATA, PraxisChartBackendPayloadAdapterService, PraxisChartCanonicalContractMapperService, PraxisChartComponent, PraxisChartCompositionShowcaseComponent, PraxisChartConfigEditor, PraxisChartDataTransformerService, PraxisChartDrilldownPanelComponent, PraxisChartOptionBuilderService, PraxisChartSchemaMapperService, PraxisChartStateProbeComponent, PraxisChartStatsApiService, buildPraxisChartInteractiveCanvasPage, buildPraxisChartInteractiveWidgetPage, buildPraxisChartMockCanvasPage, buildPraxisChartMockWidgetPage, createPraxisChartsI18nConfig, providePraxisChartDrilldownPanelMetadata, providePraxisChartStateProbeMetadata, providePraxisCharts, providePraxisChartsI18n, providePraxisChartsMetadata, resolvePraxisChartsText };
package/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { InjectionToken, Provider } from '@angular/core';
3
3
  import * as _praxisui_core from '@praxisui/core';
4
- import { PraxisTextValue, WidgetDefinition, WidgetShellConfig, WidgetInstance, ComponentMetadataRegistry, ApiUrlConfig, WidgetPageDefinition, SettingsValueProvider, PraxisI18nDictionary, PraxisI18nConfig, PraxisI18nMessageDescriptor, ComponentDocMeta } from '@praxisui/core';
4
+ import { PraxisTextValue, WidgetDefinition, WidgetShellConfig, WidgetInstance, ComponentMetadataRegistry, ApiUrlConfig, PraxisAnalyticsProjection, AnalyticsSchemaContractService, AnalyticsPresentationResolver, WidgetPageDefinition, SettingsValueProvider, PraxisI18nDictionary, PraxisI18nConfig, PraxisI18nMessageDescriptor, ComponentDocMeta } from '@praxisui/core';
5
5
  import * as _praxisui_charts from '@praxisui/charts';
6
6
  import { EChartsCoreOption } from 'echarts';
7
7
  import { HttpClient } from '@angular/common/http';
@@ -735,6 +735,55 @@ declare class PraxisChartStatsApiService {
735
735
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<PraxisChartStatsApiService>;
736
736
  }
737
737
 
738
+ interface AnalyticsChartConfigAdapterOptions {
739
+ title?: PraxisTextValue;
740
+ subtitle?: PraxisTextValue;
741
+ height?: number | string;
742
+ }
743
+ declare class AnalyticsChartConfigAdapterService {
744
+ private readonly statsBuilder;
745
+ toPraxisChartConfig(projection: PraxisAnalyticsProjection, options?: AnalyticsChartConfigAdapterOptions): PraxisChartConfig;
746
+ private buildAxes;
747
+ private buildSeries;
748
+ private buildDataSource;
749
+ private resolveChartType;
750
+ private mapAggregation;
751
+ private mapExecutionMetrics;
752
+ private getDisplayMetrics;
753
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AnalyticsChartConfigAdapterService, never>;
754
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AnalyticsChartConfigAdapterService>;
755
+ }
756
+
757
+ type AnalyticsChartContractSource = 'remote' | 'fallback';
758
+ interface AnalyticsChartContractDefinition<TKey extends string = string> {
759
+ key: TKey;
760
+ projectionId: string;
761
+ path: string;
762
+ title: PraxisTextValue;
763
+ subtitle?: PraxisTextValue;
764
+ fallbackProjection: PraxisAnalyticsProjection;
765
+ }
766
+ interface AnalyticsChartContractLoadOptions {
767
+ cacheNamespace?: string;
768
+ }
769
+ interface AnalyticsChartContractLoadResult<TKey extends string = string> {
770
+ configs: Record<TKey, PraxisChartConfig>;
771
+ sources: Record<TKey, AnalyticsChartContractSource>;
772
+ errors: Partial<Record<TKey, string>>;
773
+ }
774
+ declare class AnalyticsChartContractService {
775
+ private readonly analyticsSchema;
776
+ private readonly resolver;
777
+ private readonly chartAdapter;
778
+ constructor(analyticsSchema: AnalyticsSchemaContractService, resolver: AnalyticsPresentationResolver, chartAdapter: AnalyticsChartConfigAdapterService);
779
+ buildBootstrapChartConfigs<TKey extends string>(definitions: readonly AnalyticsChartContractDefinition<TKey>[]): Record<TKey, PraxisChartConfig>;
780
+ loadChartConfigs<TKey extends string>(definitions: readonly AnalyticsChartContractDefinition<TKey>[], options?: AnalyticsChartContractLoadOptions): Promise<AnalyticsChartContractLoadResult<TKey>>;
781
+ private loadSingleChartConfig;
782
+ private buildChartConfig;
783
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AnalyticsChartContractService, never>;
784
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<AnalyticsChartContractService>;
785
+ }
786
+
738
787
  declare const PRAXIS_CHART_BACKEND_MOCK_BAR: PraxisChartBackendPayload;
739
788
  declare const PRAXIS_CHART_BACKEND_MOCK_TIMESERIES: PraxisChartBackendPayload;
740
789
  declare const PRAXIS_CHART_BACKEND_MOCK_DONUT: PraxisChartBackendPayload;
@@ -746,7 +795,8 @@ declare const PRAXIS_CHART_BACKEND_MOCK_COMBO: PraxisChartBackendPayload;
746
795
 
747
796
  declare const PRAXIS_CHART_DRILLDOWN_DATA_BY_MONTH: Record<string, PraxisChartDataRow[]>;
748
797
 
749
- type CanvasWidgetPageDefinition = WidgetPageDefinition & {
798
+ type CanonicalChartPageDefinition = Omit<WidgetPageDefinition, 'connections'>;
799
+ type CanvasWidgetPageDefinition = CanonicalChartPageDefinition & {
750
800
  canvas?: {
751
801
  mode: 'grid';
752
802
  columns: number;
@@ -755,9 +805,9 @@ type CanvasWidgetPageDefinition = WidgetPageDefinition & {
755
805
  items: Record<string, PraxisChartCanvasItem>;
756
806
  };
757
807
  };
758
- declare function buildPraxisChartMockWidgetPage(adapter: PraxisChartBackendPayloadAdapterService): WidgetPageDefinition;
808
+ declare function buildPraxisChartMockWidgetPage(adapter: PraxisChartBackendPayloadAdapterService): CanonicalChartPageDefinition;
759
809
  declare function buildPraxisChartMockCanvasPage(adapter: PraxisChartBackendPayloadAdapterService): CanvasWidgetPageDefinition;
760
- declare function buildPraxisChartInteractiveWidgetPage(adapter: PraxisChartBackendPayloadAdapterService): WidgetPageDefinition;
810
+ declare function buildPraxisChartInteractiveWidgetPage(adapter: PraxisChartBackendPayloadAdapterService): CanonicalChartPageDefinition;
761
811
  declare function buildPraxisChartInteractiveCanvasPage(adapter: PraxisChartBackendPayloadAdapterService): CanvasWidgetPageDefinition;
762
812
 
763
813
  type ShowcaseLayoutMode = 'widget' | 'canvas';
@@ -775,8 +825,34 @@ declare class PraxisChartCompositionShowcaseComponent {
775
825
  environment: string;
776
826
  enableCustomization: boolean;
777
827
  }>;
778
- protected readonly widgetPage: _angular_core.Signal<_praxisui_core.WidgetPageDefinition>;
779
- protected readonly canvasPage: _angular_core.Signal<(_praxisui_core.WidgetPageDefinition & {
828
+ protected readonly widgetPage: _angular_core.Signal<{
829
+ composition?: _praxisui_core.WidgetPageCompositionDefinition | undefined;
830
+ canvas?: _praxisui_core.WidgetPageCanvasLayout | undefined;
831
+ context?: Record<string, any> | undefined;
832
+ state?: _praxisui_core.WidgetPageStateInput | undefined;
833
+ widgets: _praxisui_core.WidgetInstance[];
834
+ layout?: _praxisui_core.WidgetPageLayout | undefined;
835
+ layoutPreset?: string | undefined;
836
+ layoutPresetOptions?: Record<string, any> | undefined;
837
+ grouping?: _praxisui_core.WidgetPageGroupingDefinition[] | undefined;
838
+ slotAssignments?: _praxisui_core.WidgetPageSlotAssignments | undefined;
839
+ deviceLayouts?: _praxisui_core.WidgetPageDeviceLayouts | undefined;
840
+ themePreset?: string | undefined;
841
+ }>;
842
+ protected readonly canvasPage: _angular_core.Signal<({
843
+ composition?: _praxisui_core.WidgetPageCompositionDefinition | undefined;
844
+ canvas?: _praxisui_core.WidgetPageCanvasLayout | undefined;
845
+ context?: Record<string, any> | undefined;
846
+ state?: _praxisui_core.WidgetPageStateInput | undefined;
847
+ widgets: _praxisui_core.WidgetInstance[];
848
+ layout?: _praxisui_core.WidgetPageLayout | undefined;
849
+ layoutPreset?: string | undefined;
850
+ layoutPresetOptions?: Record<string, any> | undefined;
851
+ grouping?: _praxisui_core.WidgetPageGroupingDefinition[] | undefined;
852
+ slotAssignments?: _praxisui_core.WidgetPageSlotAssignments | undefined;
853
+ deviceLayouts?: _praxisui_core.WidgetPageDeviceLayouts | undefined;
854
+ themePreset?: string | undefined;
855
+ } & {
780
856
  canvas?: {
781
857
  mode: "grid";
782
858
  columns: number;
@@ -797,18 +873,31 @@ declare class PraxisChartCompositionShowcaseComponent {
797
873
  autoRows?: "fixed" | "content";
798
874
  collisionPolicy?: _praxisui_core.WidgetPageCanvasCollisionPolicy;
799
875
  };
800
- connections?: _praxisui_core.WidgetConnection[];
801
- state?: _praxisui_core.WidgetPageStateInput;
802
- context?: Record<string, any>;
803
- layout?: _praxisui_core.WidgetPageLayout;
804
- layoutPreset?: string;
805
- layoutPresetOptions?: Record<string, any>;
806
- grouping?: _praxisui_core.WidgetPageGroupingDefinition[];
807
- slotAssignments?: _praxisui_core.WidgetPageSlotAssignments;
808
- deviceLayouts?: _praxisui_core.WidgetPageDeviceLayouts;
809
- themePreset?: string;
876
+ composition?: _praxisui_core.WidgetPageCompositionDefinition | undefined;
877
+ context?: Record<string, any> | undefined;
878
+ state?: _praxisui_core.WidgetPageStateInput | undefined;
879
+ layout?: _praxisui_core.WidgetPageLayout | undefined;
880
+ layoutPreset?: string | undefined;
881
+ layoutPresetOptions?: Record<string, any> | undefined;
882
+ grouping?: _praxisui_core.WidgetPageGroupingDefinition[] | undefined;
883
+ slotAssignments?: _praxisui_core.WidgetPageSlotAssignments | undefined;
884
+ deviceLayouts?: _praxisui_core.WidgetPageDeviceLayouts | undefined;
885
+ themePreset?: string | undefined;
810
886
  }>;
811
- protected readonly resolvedPage: _angular_core.Signal<_praxisui_core.WidgetPageDefinition | {
887
+ protected readonly resolvedPage: _angular_core.Signal<{
888
+ composition?: _praxisui_core.WidgetPageCompositionDefinition | undefined;
889
+ canvas?: _praxisui_core.WidgetPageCanvasLayout | undefined;
890
+ context?: Record<string, any> | undefined;
891
+ state?: _praxisui_core.WidgetPageStateInput | undefined;
892
+ widgets: _praxisui_core.WidgetInstance[];
893
+ layout?: _praxisui_core.WidgetPageLayout | undefined;
894
+ layoutPreset?: string | undefined;
895
+ layoutPresetOptions?: Record<string, any> | undefined;
896
+ grouping?: _praxisui_core.WidgetPageGroupingDefinition[] | undefined;
897
+ slotAssignments?: _praxisui_core.WidgetPageSlotAssignments | undefined;
898
+ deviceLayouts?: _praxisui_core.WidgetPageDeviceLayouts | undefined;
899
+ themePreset?: string | undefined;
900
+ } | {
812
901
  widgets: _praxisui_core.WidgetInstance[];
813
902
  canvas: {
814
903
  items: {
@@ -821,16 +910,16 @@ declare class PraxisChartCompositionShowcaseComponent {
821
910
  autoRows?: "fixed" | "content";
822
911
  collisionPolicy?: _praxisui_core.WidgetPageCanvasCollisionPolicy;
823
912
  };
824
- connections?: _praxisui_core.WidgetConnection[];
825
- state?: _praxisui_core.WidgetPageStateInput;
826
- context?: Record<string, any>;
827
- layout?: _praxisui_core.WidgetPageLayout;
828
- layoutPreset?: string;
829
- layoutPresetOptions?: Record<string, any>;
830
- grouping?: _praxisui_core.WidgetPageGroupingDefinition[];
831
- slotAssignments?: _praxisui_core.WidgetPageSlotAssignments;
832
- deviceLayouts?: _praxisui_core.WidgetPageDeviceLayouts;
833
- themePreset?: string;
913
+ composition?: _praxisui_core.WidgetPageCompositionDefinition | undefined;
914
+ context?: Record<string, any> | undefined;
915
+ state?: _praxisui_core.WidgetPageStateInput | undefined;
916
+ layout?: _praxisui_core.WidgetPageLayout | undefined;
917
+ layoutPreset?: string | undefined;
918
+ layoutPresetOptions?: Record<string, any> | undefined;
919
+ grouping?: _praxisui_core.WidgetPageGroupingDefinition[] | undefined;
920
+ slotAssignments?: _praxisui_core.WidgetPageSlotAssignments | undefined;
921
+ deviceLayouts?: _praxisui_core.WidgetPageDeviceLayouts | undefined;
922
+ themePreset?: string | undefined;
834
923
  }>;
835
924
  protected readonly payloadTitle: _angular_core.Signal<"Envelope timeseries" | "Envelope distribution" | "Envelope horizontal-bar" | "Envelope stacked-area" | "Envelope multi-metric bar" | "Envelope scatter" | "Envelope combo" | "Envelope group-by">;
836
925
  protected readonly selectedPayloadJson: _angular_core.Signal<string>;
@@ -1039,5 +1128,5 @@ declare function providePraxisChartDrilldownPanelMetadata(): Provider;
1039
1128
  declare const PRAXIS_CHART_STATE_PROBE_COMPONENT_METADATA: ComponentDocMeta;
1040
1129
  declare function providePraxisChartStateProbeMetadata(): Provider;
1041
1130
 
1042
- export { ChartContractNormalizerService, ChartContractValidationService, ChartEditorDefaultsService, ChartEditorPreviewMapperService, 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_STATE_PROBE_COMPONENT_METADATA, PraxisChartBackendPayloadAdapterService, PraxisChartCanonicalContractMapperService, PraxisChartComponent, PraxisChartCompositionShowcaseComponent, PraxisChartConfigEditor, PraxisChartDataTransformerService, PraxisChartDrilldownPanelComponent, PraxisChartOptionBuilderService, PraxisChartSchemaMapperService, PraxisChartStateProbeComponent, PraxisChartStatsApiService, buildPraxisChartInteractiveCanvasPage, buildPraxisChartInteractiveWidgetPage, buildPraxisChartMockCanvasPage, buildPraxisChartMockWidgetPage, createPraxisChartsI18nConfig, providePraxisChartDrilldownPanelMetadata, providePraxisChartStateProbeMetadata, providePraxisCharts, providePraxisChartsI18n, providePraxisChartsMetadata, resolvePraxisChartsText };
1043
- export type { ChartConfigEditorApplyEvent, ChartConfigEditorResetEvent, ChartConfigEditorSaveEvent, ChartContractIssueSeverity, ChartContractValidationIssue, ChartContractValidationResult, ChartEditorFieldOption, ChartEditorPreviewPayload, ChartEditorResourceOption, ChartEditorTargetOption, PraxisChartAggregation, PraxisChartAxisConfig, PraxisChartAxisLabelConfig, PraxisChartAxisPosition, PraxisChartAxisType, PraxisChartBackendPayload, PraxisChartBackendWidgetPayload, PraxisChartCanvasItem, PraxisChartCartesianSeries, PraxisChartConfig, PraxisChartConfigEditorData, PraxisChartDataRow, PraxisChartDataSource, PraxisChartDistributionStatsRequest, PraxisChartEmptyStateConfig, PraxisChartEngineAdapter, PraxisChartEngineRenderPayload, PraxisChartErrorStateConfig, PraxisChartGroupByStatsRequest, PraxisChartInteractionConfig, PraxisChartLegendConfig, PraxisChartLoadState, PraxisChartLocalDataSource, PraxisChartMetricConfig, PraxisChartMotionConfig, PraxisChartMotionPreset, PraxisChartPieSlice, PraxisChartPointEvent, PraxisChartPrimitive, PraxisChartQueryConfig, PraxisChartQueryContext, PraxisChartQueryMetricConfig, PraxisChartQueryRequestEvent, PraxisChartRemoteDataSource, PraxisChartSchemaMeta, PraxisChartSeriesConfig, PraxisChartSeriesLabelConfig, PraxisChartStateConfig, PraxisChartStatsDistributionMode, PraxisChartStatsGranularity, PraxisChartStatsMetricOperation, PraxisChartStatsMetricRequest, PraxisChartStatsOperation, PraxisChartStatsOrderBy, PraxisChartStatsRequest, PraxisChartThemeConfig, PraxisChartTimeSeriesStatsRequest, PraxisChartTooltipConfig, PraxisChartTransformedData, PraxisChartType, PraxisChartWidgetInstance, PraxisChartWidgetLike, PraxisChartWidgetResolution, PraxisChartWidgetSchema, PraxisChartsI18nOptions, PraxisChartsText, PraxisXUiChartAggregation, PraxisXUiChartAggregationConfig, PraxisXUiChartContract, PraxisXUiChartDimension, PraxisXUiChartEventAction, PraxisXUiChartEvents, PraxisXUiChartFilter, PraxisXUiChartKind, PraxisXUiChartMetric, PraxisXUiChartMotion, PraxisXUiChartMotionPreset, PraxisXUiChartPreset, PraxisXUiChartRefresh, PraxisXUiChartRuntimeHints, PraxisXUiChartSort, PraxisXUiChartSource, PraxisXUiChartSourceKind, PraxisXUiChartState, PraxisXUiChartStateDescriptor, PraxisXUiChartStatsDistributionMode, PraxisXUiChartStatsOperation, PraxisXUiChartStatsOrderBy, PraxisXUiChartStatsSourceOptions, PraxisXUiChartTextValue, PraxisXUiChartTheme, PraxisXUiChartToggleableFeature };
1131
+ export { AnalyticsChartConfigAdapterService, AnalyticsChartContractService, ChartContractNormalizerService, ChartContractValidationService, ChartEditorDefaultsService, ChartEditorPreviewMapperService, 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_STATE_PROBE_COMPONENT_METADATA, PraxisChartBackendPayloadAdapterService, PraxisChartCanonicalContractMapperService, PraxisChartComponent, PraxisChartCompositionShowcaseComponent, PraxisChartConfigEditor, PraxisChartDataTransformerService, PraxisChartDrilldownPanelComponent, PraxisChartOptionBuilderService, PraxisChartSchemaMapperService, PraxisChartStateProbeComponent, PraxisChartStatsApiService, buildPraxisChartInteractiveCanvasPage, buildPraxisChartInteractiveWidgetPage, buildPraxisChartMockCanvasPage, buildPraxisChartMockWidgetPage, createPraxisChartsI18nConfig, providePraxisChartDrilldownPanelMetadata, providePraxisChartStateProbeMetadata, providePraxisCharts, providePraxisChartsI18n, providePraxisChartsMetadata, resolvePraxisChartsText };
1132
+ 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, PraxisChartDataRow, PraxisChartDataSource, PraxisChartDistributionStatsRequest, PraxisChartEmptyStateConfig, PraxisChartEngineAdapter, PraxisChartEngineRenderPayload, PraxisChartErrorStateConfig, PraxisChartGroupByStatsRequest, PraxisChartInteractionConfig, PraxisChartLegendConfig, PraxisChartLoadState, PraxisChartLocalDataSource, PraxisChartMetricConfig, PraxisChartMotionConfig, PraxisChartMotionPreset, PraxisChartPieSlice, PraxisChartPointEvent, PraxisChartPrimitive, PraxisChartQueryConfig, PraxisChartQueryContext, PraxisChartQueryMetricConfig, PraxisChartQueryRequestEvent, PraxisChartRemoteDataSource, PraxisChartSchemaMeta, PraxisChartSeriesConfig, PraxisChartSeriesLabelConfig, PraxisChartStateConfig, PraxisChartStatsDistributionMode, PraxisChartStatsGranularity, PraxisChartStatsMetricOperation, PraxisChartStatsMetricRequest, PraxisChartStatsOperation, PraxisChartStatsOrderBy, PraxisChartStatsRequest, PraxisChartThemeConfig, PraxisChartTimeSeriesStatsRequest, PraxisChartTooltipConfig, PraxisChartTransformedData, PraxisChartType, PraxisChartWidgetInstance, PraxisChartWidgetLike, PraxisChartWidgetResolution, PraxisChartWidgetSchema, PraxisChartsI18nOptions, PraxisChartsText, PraxisXUiChartAggregation, PraxisXUiChartAggregationConfig, PraxisXUiChartContract, PraxisXUiChartDimension, PraxisXUiChartEventAction, PraxisXUiChartEvents, PraxisXUiChartFilter, PraxisXUiChartKind, PraxisXUiChartMetric, PraxisXUiChartMotion, PraxisXUiChartMotionPreset, PraxisXUiChartPreset, PraxisXUiChartRefresh, PraxisXUiChartRuntimeHints, PraxisXUiChartSort, PraxisXUiChartSource, PraxisXUiChartSourceKind, PraxisXUiChartState, PraxisXUiChartStateDescriptor, PraxisXUiChartStatsDistributionMode, PraxisXUiChartStatsOperation, PraxisXUiChartStatsOrderBy, PraxisXUiChartStatsSourceOptions, PraxisXUiChartTextValue, PraxisXUiChartTheme, PraxisXUiChartToggleableFeature };
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@praxisui/charts",
3
- "version": "3.0.0-beta.9",
3
+ "version": "5.0.0-beta.0",
4
4
  "description": "Metadata-driven charts library for Praxis UI Angular with engine adapters and Apache ECharts as the initial renderer.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^20.0.0",
7
7
  "@angular/core": "^20.0.0",
8
- "@praxisui/core": "^3.0.0-beta.9"
8
+ "@praxisui/core": "^5.0.0-beta.0"
9
9
  },
10
10
  "dependencies": {
11
11
  "echarts": "^6.0.0",