@praxisui/charts 9.0.49 → 9.0.50

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,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-08-31T13:56:05.891Z",
3
+ "generatedAt": "2026-08-31T15:53:16.439Z",
4
4
  "packageName": "@praxisui/charts",
5
- "packageVersion": "9.0.49",
5
+ "packageVersion": "9.0.50",
6
6
  "sourceRegistry": "praxis-component-registry-ingestion",
7
7
  "sourceRegistryVersion": "1.0.0",
8
8
  "componentCount": 3,
@@ -1914,6 +1914,7 @@ class PraxisChartComponent {
1914
1914
  mappedRuntimeConfig = signal(null, ...(ngDevMode ? [{ debugName: "mappedRuntimeConfig" }] : /* istanbul ignore next */ []));
1915
1915
  chartDocumentMappingError = signal(null, ...(ngDevMode ? [{ debugName: "chartDocumentMappingError" }] : /* istanbul ignore next */ []));
1916
1916
  activeSelectionSignature = signal(null, ...(ngDevMode ? [{ debugName: "activeSelectionSignature" }] : /* istanbul ignore next */ []));
1917
+ configEditorContextPending = signal(false, ...(ngDevMode ? [{ debugName: "configEditorContextPending" }] : /* istanbul ignore next */ []));
1917
1918
  showAccessibleData = signal(false, ...(ngDevMode ? [{ debugName: "showAccessibleData" }] : /* istanbul ignore next */ []));
1918
1919
  accessibilityPanelId = `praxis-chart-data-${++chartAccessibilityPanelSequence}`;
1919
1920
  accessibilityPanelTitleId = `${this.accessibilityPanelId}-title`;
@@ -2307,51 +2308,57 @@ class PraxisChartComponent {
2307
2308
  return this.enableCustomization() && !!this.settingsPanel && !!this.runtimeChartDocument();
2308
2309
  }
2309
2310
  async openConfigEditor() {
2310
- if (!this.settingsPanel) {
2311
+ if (!this.settingsPanel || this.configEditorContextPending()) {
2311
2312
  return;
2312
2313
  }
2313
2314
  const document = this.runtimeChartDocument();
2314
2315
  if (!document) {
2315
2316
  return;
2316
2317
  }
2317
- const resolvedContext = await this.resolveConfigEditorContext(document);
2318
- const { PraxisChartConfigEditor } = await Promise.resolve().then(function () { return praxisChartConfigEditor; });
2319
- this.clearEditorSessionSubscriptions();
2320
- const ref = this.settingsPanel.open({
2321
- id: `chart.${document.chartId || this.effectiveConfig().id || 'praxis-chart'}`,
2322
- title: this.editChartLabel(),
2323
- content: {
2324
- component: PraxisChartConfigEditor,
2325
- inputs: {
2326
- chartDocument: document,
2327
- document,
2328
- mode: 'edit',
2329
- readonly: false,
2330
- availableResources: this.resolveEditorOptions(this.availableResources(), resolvedContext['availableResources']),
2331
- availableFields: this.resolveEditorOptions(this.availableFields(), resolvedContext['availableFields']),
2332
- availableTargets: this.resolveEditorOptions(this.availableTargets(), resolvedContext['availableTargets']),
2318
+ this.configEditorContextPending.set(true);
2319
+ try {
2320
+ const resolvedContext = await this.resolveConfigEditorContext(document);
2321
+ const { PraxisChartConfigEditor } = await Promise.resolve().then(function () { return praxisChartConfigEditor; });
2322
+ this.clearEditorSessionSubscriptions();
2323
+ const ref = this.settingsPanel.open({
2324
+ id: `chart.${document.chartId || this.effectiveConfig().id || 'praxis-chart'}`,
2325
+ title: this.editChartLabel(),
2326
+ content: {
2327
+ component: PraxisChartConfigEditor,
2328
+ inputs: {
2329
+ chartDocument: document,
2330
+ document,
2331
+ mode: 'edit',
2332
+ readonly: false,
2333
+ availableResources: this.resolveEditorOptions(this.availableResources(), resolvedContext['availableResources']),
2334
+ availableFields: this.resolveEditorOptions(this.availableFields(), resolvedContext['availableFields']),
2335
+ availableTargets: this.resolveEditorOptions(this.availableTargets(), resolvedContext['availableTargets']),
2336
+ },
2333
2337
  },
2334
- },
2335
- });
2336
- const appliedSubscription = ref.applied$
2337
- .subscribe((nextDocument) => {
2338
- if (!nextDocument) {
2339
- return;
2340
- }
2341
- const clone = structuredClone(nextDocument);
2342
- this.runtimeChartDocument.set(clone);
2343
- this.chartDocumentApplied.emit(clone);
2344
- });
2345
- const savedSubscription = ref.saved$
2346
- .subscribe((nextDocument) => {
2347
- if (!nextDocument) {
2348
- return;
2349
- }
2350
- const clone = structuredClone(nextDocument);
2351
- this.runtimeChartDocument.set(clone);
2352
- this.chartDocumentSaved.emit(clone);
2353
- });
2354
- this.editorSessionSubscriptions = [appliedSubscription, savedSubscription];
2338
+ });
2339
+ const appliedSubscription = ref.applied$
2340
+ .subscribe((nextDocument) => {
2341
+ if (!nextDocument) {
2342
+ return;
2343
+ }
2344
+ const clone = structuredClone(nextDocument);
2345
+ this.runtimeChartDocument.set(clone);
2346
+ this.chartDocumentApplied.emit(clone);
2347
+ });
2348
+ const savedSubscription = ref.saved$
2349
+ .subscribe((nextDocument) => {
2350
+ if (!nextDocument) {
2351
+ return;
2352
+ }
2353
+ const clone = structuredClone(nextDocument);
2354
+ this.runtimeChartDocument.set(clone);
2355
+ this.chartDocumentSaved.emit(clone);
2356
+ });
2357
+ this.editorSessionSubscriptions = [appliedSubscription, savedSubscription];
2358
+ }
2359
+ finally {
2360
+ this.configEditorContextPending.set(false);
2361
+ }
2355
2362
  }
2356
2363
  async resolveConfigEditorContext(document) {
2357
2364
  const metadata = this.componentMetadataRegistry.get('praxis-chart');
@@ -2840,6 +2847,8 @@ class PraxisChartComponent {
2840
2847
  size="compact"
2841
2848
  appearance="filled"
2842
2849
  type="button"
2850
+ [busy]="configEditorContextPending()"
2851
+ [disabled]="configEditorContextPending()"
2843
2852
  [attr.aria-label]="editChartLabel()"
2844
2853
  [matTooltip]="editChartLabel()"
2845
2854
  (click)="openConfigEditor()"
@@ -2980,6 +2989,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
2980
2989
  size="compact"
2981
2990
  appearance="filled"
2982
2991
  type="button"
2992
+ [busy]="configEditorContextPending()"
2993
+ [disabled]="configEditorContextPending()"
2983
2994
  [attr.aria-label]="editChartLabel()"
2984
2995
  [matTooltip]="editChartLabel()"
2985
2996
  (click)="openConfigEditor()"
@@ -7076,7 +7087,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
7076
7087
  }] });
7077
7088
 
7078
7089
  class PraxisChartConfigEditorContextResolverService {
7079
- static REQUEST_TIMEOUT_MS = 10_000;
7090
+ static CATALOG_REQUEST_TIMEOUT_MS = 30_000;
7091
+ static CAPABILITY_REQUEST_TIMEOUT_MS = 10_000;
7080
7092
  discovery = inject(ResourceDiscoveryService);
7081
7093
  capabilityAdapter = inject(ChartResourceCapabilityCatalogAdapter);
7082
7094
  targetAdapter = inject(ChartCompositionTargetCatalogAdapter);
@@ -7249,7 +7261,7 @@ class PraxisChartConfigEditorContextResolverService {
7249
7261
  return cached.promise;
7250
7262
  }
7251
7263
  let request;
7252
- const promise = firstValueFrom(this.discovery.getSchemaCatalog().pipe(timeout(PraxisChartConfigEditorContextResolverService.REQUEST_TIMEOUT_MS)))
7264
+ const promise = firstValueFrom(this.discovery.getSchemaCatalog().pipe(timeout(PraxisChartConfigEditorContextResolverService.CATALOG_REQUEST_TIMEOUT_MS)))
7253
7265
  .then((catalog) => this.projectCatalog(catalog))
7254
7266
  .finally(() => {
7255
7267
  if (this.catalogProjectionRequest === request) {
@@ -7348,7 +7360,7 @@ class PraxisChartConfigEditorContextResolverService {
7348
7360
  return cached.promise;
7349
7361
  }
7350
7362
  let request;
7351
- const promise = firstValueFrom(this.discovery.getCapabilitiesByUrl(candidate.capabilitiesHref).pipe(timeout(PraxisChartConfigEditorContextResolverService.REQUEST_TIMEOUT_MS)))
7363
+ const promise = firstValueFrom(this.discovery.getCapabilitiesByUrl(candidate.capabilitiesHref).pipe(timeout(PraxisChartConfigEditorContextResolverService.CAPABILITY_REQUEST_TIMEOUT_MS)))
7352
7364
  .finally(() => {
7353
7365
  if (this.capabilityRequests.get(key) === request) {
7354
7366
  this.capabilityRequests.delete(key);
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@praxisui/charts",
3
- "version": "9.0.49",
3
+ "version": "9.0.50",
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.49",
8
+ "@praxisui/core": "^9.0.50",
9
9
  "@angular/forms": "^21.0.0",
10
10
  "@angular/material": "^21.0.0",
11
- "@praxisui/table": "^9.0.49",
11
+ "@praxisui/table": "^9.0.50",
12
12
  "rxjs": "~7.8.0"
13
13
  },
14
14
  "dependencies": {
@@ -598,6 +598,7 @@ declare class PraxisChartComponent {
598
598
  private readonly mappedRuntimeConfig;
599
599
  private readonly chartDocumentMappingError;
600
600
  private readonly activeSelectionSignature;
601
+ protected readonly configEditorContextPending: _angular_core.WritableSignal<boolean>;
601
602
  readonly showAccessibleData: _angular_core.WritableSignal<boolean>;
602
603
  readonly accessibilityPanelId: string;
603
604
  readonly accessibilityPanelTitleId: string;