@praxisui/charts 9.0.37 → 9.0.38

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-30T00:46:55.066Z",
3
+ "generatedAt": "2026-08-30T02:26:55.462Z",
4
4
  "packageName": "@praxisui/charts",
5
- "packageVersion": "9.0.37",
5
+ "packageVersion": "9.0.38",
6
6
  "sourceRegistry": "praxis-component-registry-ingestion",
7
7
  "sourceRegistryVersion": "1.0.0",
8
8
  "componentCount": 3,
@@ -1870,6 +1870,7 @@ class PraxisChartComponent {
1870
1870
  shellObserver = signal(null, ...(ngDevMode ? [{ debugName: "shellObserver" }] : /* istanbul ignore next */ []));
1871
1871
  themeObserver = signal(null, ...(ngDevMode ? [{ debugName: "themeObserver" }] : /* istanbul ignore next */ []));
1872
1872
  inheritedTheme = signal(null, ...(ngDevMode ? [{ debugName: "inheritedTheme" }] : /* istanbul ignore next */ []));
1873
+ inheritedHostTextColor = signal(undefined, ...(ngDevMode ? [{ debugName: "inheritedHostTextColor" }] : /* istanbul ignore next */ []));
1873
1874
  currentLoadState = signal('idle', ...(ngDevMode ? [{ debugName: "currentLoadState" }] : /* istanbul ignore next */ []));
1874
1875
  remoteResolvedData = signal(null, ...(ngDevMode ? [{ debugName: "remoteResolvedData" }] : /* istanbul ignore next */ []));
1875
1876
  remoteRuntimeState = signal('idle', ...(ngDevMode ? [{ debugName: "remoteRuntimeState" }] : /* istanbul ignore next */ []));
@@ -1892,7 +1893,7 @@ class PraxisChartComponent {
1892
1893
  remoteRequestSequence = 0;
1893
1894
  previousSelectionScopeSignature = null;
1894
1895
  effectiveConfig = computed(() => {
1895
- const base = this.applyInheritedTheme(this.mappedRuntimeConfig() ?? this.config(), this.inheritedTheme());
1896
+ const base = this.applyInheritedTheme(this.mappedRuntimeConfig() ?? this.config(), this.inheritedTheme(), this.inheritedHostTextColor());
1896
1897
  const runtimeQueryContext = normalizePraxisDataQueryContext(this.queryContext());
1897
1898
  const runtimeFilters = resolvePraxisFilterCriteria(this.filterCriteria(), runtimeQueryContext);
1898
1899
  if (!runtimeQueryContext
@@ -2594,6 +2595,7 @@ class PraxisChartComponent {
2594
2595
  ? this.cloneTheme(PRAXIS_CHART_THEME_VARIANTS[chartThemePresetId])
2595
2596
  : {};
2596
2597
  const hostTextColor = getComputedStyle(host).color.trim();
2598
+ this.inheritedHostTextColor.set(hostTextColor || undefined);
2597
2599
  const theme = {
2598
2600
  ...preset,
2599
2601
  textColor: preset.textColor || hostTextColor || undefined,
@@ -2611,17 +2613,22 @@ class PraxisChartComponent {
2611
2613
  isThemeVariant(value) {
2612
2614
  return Object.prototype.hasOwnProperty.call(PRAXIS_CHART_THEME_VARIANTS, value);
2613
2615
  }
2614
- applyInheritedTheme(config, inherited) {
2616
+ applyInheritedTheme(config, inherited, hostTextColor) {
2615
2617
  if (!inherited) {
2616
2618
  return config;
2617
2619
  }
2618
2620
  const explicit = config.theme;
2621
+ const explicitSurface = explicit?.surface;
2622
+ const usesHostSurface = explicitSurface?.mode === 'embedded'
2623
+ || explicitSurface?.background?.trim().toLowerCase() === 'transparent';
2619
2624
  return {
2620
2625
  ...config,
2621
2626
  theme: {
2622
2627
  palette: explicit?.palette ?? inherited.palette,
2623
- backgroundColor: explicit?.backgroundColor ?? inherited.backgroundColor,
2624
- textColor: explicit?.textColor ?? inherited.textColor,
2628
+ backgroundColor: explicit?.backgroundColor
2629
+ ?? (usesHostSurface ? undefined : inherited.backgroundColor),
2630
+ textColor: explicit?.textColor
2631
+ ?? (usesHostSurface ? hostTextColor : inherited.textColor),
2625
2632
  borderRadius: explicit?.borderRadius ?? inherited.borderRadius,
2626
2633
  legend: this.mergeOptionalThemeObject(inherited.legend, explicit?.legend),
2627
2634
  tooltip: this.mergeOptionalThemeObject(inherited.tooltip, explicit?.tooltip),
@@ -5263,17 +5270,19 @@ class EChartsEngineAdapter {
5263
5270
  });
5264
5271
  const zrender = chart?.getZr?.();
5265
5272
  this.zrenderClickHandler = (event) => {
5273
+ const occurredAt = Date.now();
5266
5274
  window.setTimeout(() => {
5267
- if (Date.now() - this.lastSeriesClickAt < 80) {
5275
+ if (this.isSeriesFallbackDuplicate(occurredAt)) {
5268
5276
  return;
5269
5277
  }
5270
- this.emitCategoryClickFromGrid(event, payload);
5278
+ this.emitCategoryClickFromGrid(event, payload, occurredAt);
5271
5279
  }, 0);
5272
5280
  };
5273
5281
  zrender?.on?.('click', this.zrenderClickHandler);
5274
5282
  this.domClickHandler = (event) => {
5283
+ const occurredAt = Date.now();
5275
5284
  window.setTimeout(() => {
5276
- if (Date.now() - this.lastSeriesClickAt < 80) {
5285
+ if (this.isSeriesFallbackDuplicate(occurredAt)) {
5277
5286
  return;
5278
5287
  }
5279
5288
  const rect = host.getBoundingClientRect();
@@ -5282,7 +5291,7 @@ class EChartsEngineAdapter {
5282
5291
  this.emitCategoryClickFromGrid({
5283
5292
  offsetX,
5284
5293
  offsetY,
5285
- }, payload);
5294
+ }, payload, occurredAt);
5286
5295
  }, 0);
5287
5296
  };
5288
5297
  host.addEventListener('click', this.domClickHandler, true);
@@ -5338,7 +5347,7 @@ class EChartsEngineAdapter {
5338
5347
  ? undefined
5339
5348
  : String(candidate);
5340
5349
  }
5341
- emitCategoryClickFromGrid(event, payload) {
5350
+ emitCategoryClickFromGrid(event, payload, occurredAt) {
5342
5351
  const chart = this.chart;
5343
5352
  if (!chart || typeof chart.containPixel !== 'function' || typeof chart.convertFromPixel !== 'function') {
5344
5353
  return;
@@ -5373,7 +5382,7 @@ class EChartsEngineAdapter {
5373
5382
  horizontal,
5374
5383
  categoryIndex,
5375
5384
  });
5376
- if (this.isDuplicateGridClick(signature)) {
5385
+ if (this.isDuplicateGridClick(signature, occurredAt)) {
5377
5386
  return;
5378
5387
  }
5379
5388
  const usesCanonicalStatsRows = payload.config.dataSource?.kind === 'remote'
@@ -5399,11 +5408,14 @@ class EChartsEngineAdapter {
5399
5408
  data,
5400
5409
  });
5401
5410
  }
5402
- isDuplicateGridClick(signature) {
5403
- const now = Date.now();
5411
+ isSeriesFallbackDuplicate(occurredAt) {
5412
+ return this.lastSeriesClickAt > 0
5413
+ && Math.abs(occurredAt - this.lastSeriesClickAt) < 80;
5414
+ }
5415
+ isDuplicateGridClick(signature, occurredAt) {
5404
5416
  const duplicate = this.lastGridClick?.signature === signature
5405
- && now - this.lastGridClick.at < 80;
5406
- this.lastGridClick = { signature, at: now };
5417
+ && Math.abs(occurredAt - this.lastGridClick.at) < 80;
5418
+ this.lastGridClick = { signature, at: occurredAt };
5407
5419
  return duplicate;
5408
5420
  }
5409
5421
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: EChartsEngineAdapter, deps: [{ token: EChartsOptionBuilderService }], target: i0.ɵɵFactoryTarget.Injectable });
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@praxisui/charts",
3
- "version": "9.0.37",
3
+ "version": "9.0.38",
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.37",
8
+ "@praxisui/core": "^9.0.38",
9
9
  "@angular/forms": "^21.0.0",
10
10
  "@angular/material": "^21.0.0",
11
- "@praxisui/table": "^9.0.37",
11
+ "@praxisui/table": "^9.0.38",
12
12
  "rxjs": "~7.8.0"
13
13
  },
14
14
  "dependencies": {
@@ -583,6 +583,7 @@ declare class PraxisChartComponent {
583
583
  private readonly shellObserver;
584
584
  private readonly themeObserver;
585
585
  private readonly inheritedTheme;
586
+ private readonly inheritedHostTextColor;
586
587
  private readonly currentLoadState;
587
588
  private readonly remoteResolvedData;
588
589
  private readonly remoteRuntimeState;