@praxisui/charts 9.0.51 → 9.0.53
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 +2 -1
- package/ai/component-registry.json +2 -2
- package/fesm2022/praxisui-charts.mjs +45 -10
- package/package.json +3 -3
- package/types/praxisui-charts.d.ts +1 -0
package/README.md
CHANGED
|
@@ -150,7 +150,8 @@ The public contract is `PraxisChartConfig` or the canonical `PraxisXUiChartContr
|
|
|
150
150
|
- every ready chart offers a localized `Show chart data` / `Exibir dados do gráfico` control with a structured HTML table;
|
|
151
151
|
- each table point is a native button, so Enter and Space follow browser keyboard conventions and activate the same renderer-neutral `pointClick` path as the visual point;
|
|
152
152
|
- when single selection is configured, the point button publishes `aria-pressed` and preserves the existing select/deselect and cross-filter payloads;
|
|
153
|
-
- loading
|
|
153
|
+
- loading and empty are exposed as atomic status messages, error is exposed as an alert, and the chart shell reports `aria-busy` only while loading; empty uses localized runtime copy by default while an authored `emptyState` keeps precedence;
|
|
154
|
+
- all non-ready states remove the data controls, preventing stale chart values from remaining available to assistive technology.
|
|
154
155
|
|
|
155
156
|
The structured alternative is automatic. It does not add an accessibility field to `PraxisChartConfig` or `x-ui.chart`, and custom engines remain responsible for an accessible visual rendering while the component-level data alternative remains renderer-neutral.
|
|
156
157
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"generatedAt": "2026-08-
|
|
3
|
+
"generatedAt": "2026-08-31T21:15:24.814Z",
|
|
4
4
|
"packageName": "@praxisui/charts",
|
|
5
|
-
"packageVersion": "9.0.
|
|
5
|
+
"packageVersion": "9.0.53",
|
|
6
6
|
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
7
|
"sourceRegistryVersion": "1.0.0",
|
|
8
8
|
"componentCount": 3,
|
|
@@ -2040,6 +2040,7 @@ class PraxisChartComponent {
|
|
|
2040
2040
|
return config;
|
|
2041
2041
|
}, ...(ngDevMode ? [{ debugName: "renderConfig" }] : /* istanbul ignore next */ []));
|
|
2042
2042
|
loadingLabel = computed(() => this.i18n.resolve(this.renderConfig().state?.loadingLabel), ...(ngDevMode ? [{ debugName: "loadingLabel" }] : /* istanbul ignore next */ []));
|
|
2043
|
+
loadingDescription = computed(() => this.t('praxis.charts.runtime.loadingDescription', 'Publishing the analytics slice and preparing visual buckets.'), ...(ngDevMode ? [{ debugName: "loadingDescription" }] : /* istanbul ignore next */ []));
|
|
2043
2044
|
transformedData = computed(() => this.transformer.transform(this.renderConfig(), this.resolvedData()), ...(ngDevMode ? [{ debugName: "transformedData" }] : /* istanbul ignore next */ []));
|
|
2044
2045
|
accessiblePoints = computed(() => buildAccessibleChartPoints(this.renderConfig(), this.transformedData(), (value) => this.formatAccessibleValue(value), (index) => this.t('praxis.charts.runtime.accessibility.pointFallback', `Point ${index + 1}`, { index: index + 1 }), () => this.t('praxis.charts.runtime.accessibility.seriesFallback', 'Series')), ...(ngDevMode ? [{ debugName: "accessiblePoints" }] : /* istanbul ignore next */ []));
|
|
2045
2046
|
dataDiagnostic = computed(() => {
|
|
@@ -2052,8 +2053,10 @@ class PraxisChartComponent {
|
|
|
2052
2053
|
}
|
|
2053
2054
|
return this.transformedData().diagnostic ?? null;
|
|
2054
2055
|
}, ...(ngDevMode ? [{ debugName: "dataDiagnostic" }] : /* istanbul ignore next */ []));
|
|
2055
|
-
emptyTitle = computed(() => this.i18n.resolve(this.renderConfig().emptyState?.title)
|
|
2056
|
-
|
|
2056
|
+
emptyTitle = computed(() => this.i18n.resolve(this.renderConfig().emptyState?.title)
|
|
2057
|
+
|| this.t('praxis.charts.runtime.emptyTitle', 'No chart data available'), ...(ngDevMode ? [{ debugName: "emptyTitle" }] : /* istanbul ignore next */ []));
|
|
2058
|
+
emptyDescription = computed(() => this.i18n.resolve(this.renderConfig().emptyState?.description)
|
|
2059
|
+
|| this.t('praxis.charts.runtime.emptyDescription', 'The query completed but returned no buckets for this visualization.'), ...(ngDevMode ? [{ debugName: "emptyDescription" }] : /* istanbul ignore next */ []));
|
|
2057
2060
|
errorTitle = computed(() => this.chartDocumentMappingError()
|
|
2058
2061
|
? this.t('praxis.charts.runtime.invalidDocumentTitle', 'Chart configuration is invalid')
|
|
2059
2062
|
: this.dataDiagnostic()
|
|
@@ -2865,6 +2868,7 @@ class PraxisChartComponent {
|
|
|
2865
2868
|
[style.--praxis-chart-config-surface-border-width]="surfaceBorderWidth()"
|
|
2866
2869
|
[style.--praxis-chart-config-surface-radius]="surfaceBorderRadius()"
|
|
2867
2870
|
[style.--praxis-chart-config-text-color]="surfaceTextColor()"
|
|
2871
|
+
[attr.aria-busy]="loadState() === 'loading' ? 'true' : null"
|
|
2868
2872
|
>
|
|
2869
2873
|
@if (canOpenConfigEditor()) {
|
|
2870
2874
|
<button
|
|
@@ -2898,7 +2902,11 @@ class PraxisChartComponent {
|
|
|
2898
2902
|
}
|
|
2899
2903
|
|
|
2900
2904
|
@if (loadState() === 'loading') {
|
|
2901
|
-
<div
|
|
2905
|
+
<div
|
|
2906
|
+
class="praxis-chart-state praxis-chart-state-loading"
|
|
2907
|
+
role="status"
|
|
2908
|
+
aria-atomic="true"
|
|
2909
|
+
>
|
|
2902
2910
|
<div class="praxis-chart-loading-hero" aria-hidden="true">
|
|
2903
2911
|
<div class="praxis-chart-loading-summary">
|
|
2904
2912
|
<span class="praxis-chart-loading-chip"></span>
|
|
@@ -2917,12 +2925,16 @@ class PraxisChartComponent {
|
|
|
2917
2925
|
<div class="praxis-chart-state-title">{{ loadingLabel() }}</div>
|
|
2918
2926
|
}
|
|
2919
2927
|
<div class="praxis-chart-state-description">
|
|
2920
|
-
|
|
2928
|
+
{{ loadingDescription() }}
|
|
2921
2929
|
</div>
|
|
2922
2930
|
</div>
|
|
2923
2931
|
</div>
|
|
2924
2932
|
} @else if (loadState() === 'error') {
|
|
2925
|
-
<div
|
|
2933
|
+
<div
|
|
2934
|
+
class="praxis-chart-state praxis-chart-state-error"
|
|
2935
|
+
role="alert"
|
|
2936
|
+
aria-atomic="true"
|
|
2937
|
+
>
|
|
2926
2938
|
@if (errorTitle()) {
|
|
2927
2939
|
<div class="praxis-chart-state-title">{{ errorTitle() }}</div>
|
|
2928
2940
|
}
|
|
@@ -2931,7 +2943,11 @@ class PraxisChartComponent {
|
|
|
2931
2943
|
}
|
|
2932
2944
|
</div>
|
|
2933
2945
|
} @else if (loadState() === 'empty') {
|
|
2934
|
-
<div
|
|
2946
|
+
<div
|
|
2947
|
+
class="praxis-chart-state praxis-chart-state-empty"
|
|
2948
|
+
role="status"
|
|
2949
|
+
aria-atomic="true"
|
|
2950
|
+
>
|
|
2935
2951
|
@if (emptyTitle()) {
|
|
2936
2952
|
<div class="praxis-chart-state-title">{{ emptyTitle() }}</div>
|
|
2937
2953
|
}
|
|
@@ -3007,6 +3023,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
3007
3023
|
[style.--praxis-chart-config-surface-border-width]="surfaceBorderWidth()"
|
|
3008
3024
|
[style.--praxis-chart-config-surface-radius]="surfaceBorderRadius()"
|
|
3009
3025
|
[style.--praxis-chart-config-text-color]="surfaceTextColor()"
|
|
3026
|
+
[attr.aria-busy]="loadState() === 'loading' ? 'true' : null"
|
|
3010
3027
|
>
|
|
3011
3028
|
@if (canOpenConfigEditor()) {
|
|
3012
3029
|
<button
|
|
@@ -3040,7 +3057,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
3040
3057
|
}
|
|
3041
3058
|
|
|
3042
3059
|
@if (loadState() === 'loading') {
|
|
3043
|
-
<div
|
|
3060
|
+
<div
|
|
3061
|
+
class="praxis-chart-state praxis-chart-state-loading"
|
|
3062
|
+
role="status"
|
|
3063
|
+
aria-atomic="true"
|
|
3064
|
+
>
|
|
3044
3065
|
<div class="praxis-chart-loading-hero" aria-hidden="true">
|
|
3045
3066
|
<div class="praxis-chart-loading-summary">
|
|
3046
3067
|
<span class="praxis-chart-loading-chip"></span>
|
|
@@ -3059,12 +3080,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
3059
3080
|
<div class="praxis-chart-state-title">{{ loadingLabel() }}</div>
|
|
3060
3081
|
}
|
|
3061
3082
|
<div class="praxis-chart-state-description">
|
|
3062
|
-
|
|
3083
|
+
{{ loadingDescription() }}
|
|
3063
3084
|
</div>
|
|
3064
3085
|
</div>
|
|
3065
3086
|
</div>
|
|
3066
3087
|
} @else if (loadState() === 'error') {
|
|
3067
|
-
<div
|
|
3088
|
+
<div
|
|
3089
|
+
class="praxis-chart-state praxis-chart-state-error"
|
|
3090
|
+
role="alert"
|
|
3091
|
+
aria-atomic="true"
|
|
3092
|
+
>
|
|
3068
3093
|
@if (errorTitle()) {
|
|
3069
3094
|
<div class="praxis-chart-state-title">{{ errorTitle() }}</div>
|
|
3070
3095
|
}
|
|
@@ -3073,7 +3098,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
3073
3098
|
}
|
|
3074
3099
|
</div>
|
|
3075
3100
|
} @else if (loadState() === 'empty') {
|
|
3076
|
-
<div
|
|
3101
|
+
<div
|
|
3102
|
+
class="praxis-chart-state praxis-chart-state-empty"
|
|
3103
|
+
role="status"
|
|
3104
|
+
aria-atomic="true"
|
|
3105
|
+
>
|
|
3077
3106
|
@if (emptyTitle()) {
|
|
3078
3107
|
<div class="praxis-chart-state-title">{{ emptyTitle() }}</div>
|
|
3079
3108
|
}
|
|
@@ -5886,6 +5915,9 @@ function pointData(category, value) {
|
|
|
5886
5915
|
|
|
5887
5916
|
const PRAXIS_CHARTS_EN_US = {
|
|
5888
5917
|
'praxis.charts.runtime.editChart': 'Edit chart settings',
|
|
5918
|
+
'praxis.charts.runtime.loadingDescription': 'Publishing the analytics slice and preparing visual buckets.',
|
|
5919
|
+
'praxis.charts.runtime.emptyTitle': 'No chart data available',
|
|
5920
|
+
'praxis.charts.runtime.emptyDescription': 'The query completed but returned no buckets for this visualization.',
|
|
5889
5921
|
'praxis.charts.runtime.invalidDocumentTitle': 'Invalid canonical configuration',
|
|
5890
5922
|
'praxis.charts.runtime.invalidDocumentDescription': 'The canonical chart document could not be mapped by Praxis Charts. Review the chart contract before continuing.',
|
|
5891
5923
|
'praxis.charts.runtime.remoteErrorTitle': 'Chart data could not be loaded',
|
|
@@ -6148,6 +6180,9 @@ const PRAXIS_CHARTS_EN_US = {
|
|
|
6148
6180
|
|
|
6149
6181
|
const PRAXIS_CHARTS_PT_BR = {
|
|
6150
6182
|
'praxis.charts.runtime.editChart': 'Editar configurações do gráfico',
|
|
6183
|
+
'praxis.charts.runtime.loadingDescription': 'Publicando o recorte analítico e preparando os buckets visuais.',
|
|
6184
|
+
'praxis.charts.runtime.emptyTitle': 'Nenhum dado disponível para o gráfico',
|
|
6185
|
+
'praxis.charts.runtime.emptyDescription': 'A consulta foi concluída, mas não retornou buckets para esta visualização.',
|
|
6151
6186
|
'praxis.charts.runtime.invalidDocumentTitle': 'Configuração canônica inválida',
|
|
6152
6187
|
'praxis.charts.runtime.invalidDocumentDescription': 'O documento canônico do gráfico não pode ser mapeado pelo Praxis Charts. Revise o contrato do gráfico antes de continuar.',
|
|
6153
6188
|
'praxis.charts.runtime.remoteErrorTitle': 'Não foi possível carregar os dados do gráfico',
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/charts",
|
|
3
|
-
"version": "9.0.
|
|
3
|
+
"version": "9.0.53",
|
|
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": "^21.0.0",
|
|
7
7
|
"@angular/core": "^21.0.0",
|
|
8
|
-
"@praxisui/core": "^9.0.
|
|
8
|
+
"@praxisui/core": "^9.0.53",
|
|
9
9
|
"@angular/forms": "^21.0.0",
|
|
10
10
|
"@angular/material": "^21.0.0",
|
|
11
|
-
"@praxisui/table": "^9.0.
|
|
11
|
+
"@praxisui/table": "^9.0.53",
|
|
12
12
|
"rxjs": "~7.8.0"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
@@ -630,6 +630,7 @@ declare class PraxisChartComponent {
|
|
|
630
630
|
readonly surfaceTextColor: _angular_core.Signal<string | null>;
|
|
631
631
|
readonly renderConfig: _angular_core.Signal<PraxisChartConfig>;
|
|
632
632
|
readonly loadingLabel: _angular_core.Signal<string>;
|
|
633
|
+
readonly loadingDescription: _angular_core.Signal<string>;
|
|
633
634
|
readonly transformedData: _angular_core.Signal<PraxisChartTransformedData>;
|
|
634
635
|
readonly accessiblePoints: _angular_core.Signal<PraxisChartAccessiblePoint[]>;
|
|
635
636
|
readonly dataDiagnostic: _angular_core.Signal<PraxisChartDataDiagnostic | null>;
|