@praxisui/core 9.0.28 → 9.0.30

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-28T04:22:11.708Z",
3
+ "generatedAt": "2026-08-28T14:56:26.040Z",
4
4
  "packageName": "@praxisui/core",
5
- "packageVersion": "9.0.28",
5
+ "packageVersion": "9.0.30",
6
6
  "sourceRegistry": "praxis-component-registry-ingestion",
7
7
  "sourceRegistryVersion": "1.0.0",
8
8
  "componentCount": 4,
@@ -3248,9 +3248,9 @@
3248
3248
  {
3249
3249
  "chunkIndex": 26,
3250
3250
  "chunkKind": "recipe",
3251
- "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page.widgets\",\"page\":{\"widgets\":[{\"key\":\"payrollAreaTrend\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"area_chart\",\"title\":\"Massa líquida em área\",\"subtitle\":\"A tendência mensal remota com preenchimento de área\"},\"definition\":{\"id\":\"praxis-chart\",\"bindingOrder\":[\"chartDocument\",\"enableCustomization\"],\"inputs\":{\"chartDocument\":{\"version\":\"0.1.0\",\"chartId\":\"analytics-dashboard-payroll-area-trend\",\"kind\":\"area\",\"source\":{\"kind\":\"praxis.stats\",\"resource\":\"/api/human-resources/vw-analytics-folha-pagamento\",\"operation\":\"timeseries\",\"options\":{\"granularity\":\"month\",\"orderBy\":\"key-asc\"}},\"dimensions\":[{\"field\":\"competencia\",\"label\":\"Competência\",\"role\":\"time\"}],\"metrics\":[{\"field\":\"salarioLiquido\",\"label\":\"Salário líquido\",\"aggregation\":\"sum\"}],\"legend\":{\"enabled\":true},\"tooltip\":{\"enabled\":true}},\"enableCustomization\":true},\"outputs\":{\"pointClick\":\"emit\",\"selectionChange\":\"emit\",\"loadStateChange\":\"emit\"}}},{\"key\":\"payrollStackedArea\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"area_chart\",\"title\":\"Composição da folha\",\"subtitle\":\"Área empilhada com séries legítimas do mesmo endpoint\"},\"definition\":{\"id\":\"praxis-chart\",\"bindingOrder\":[\"chartDocument\",\"enableCustomization\"],\"inputs\":{\"chartDocument\":{\"version\":\"0.1.0\",\"chartId\":\"analytics-dashboard-payroll-stacked-area\",\"kind\":\"stacked-area\",\"source\":{\"kind\":\"praxis.stats\",\"resource\":\"/api/human-resources/vw-analytics-folha-pagamento\",\"operation\":\"timeseries\",\"options\":{\"granularity\":\"month\",\"orderBy\":\"key-asc\"}},\"dimensions\":[{\"field\":\"competencia\",\"label\":\"Competência\",\"role\":\"time\"}],\"metrics\":[{\"field\":\"salarioBruto\",\"label\":\"Massa bruta\",\"aggregation\":\"sum\"},{\"field\":\"totalDescontos\",\"label\":\"Descontos\",\"aggregation\":\"sum\"}],\"legend\":{\"enabled\":true},\"tooltip\":{\"enabled\":true}},\"enableCustomization\":true},\"outputs\":{\"pointClick\":\"emit\",\"selectionChange\":\"emit\",\"loadStateChange\":\"emit\"}}},{\"key\":\"payrollStackedBar\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"stacked_bar_chart\",\"title\":\"Composição em barras empilhadas\",\"subtitle\":\"As mesmas séries remotas em comparação mensal discreta\"},\"definition\":{\"id\":\"praxis-chart\",\"bindingOrder\":[\"chartDocument\",\"enableCustomization\"],\"inputs\":{\"chartDocument\":{\"version\":\"0.1.0\",\"chartId\":\"analytics-dashboard-payroll-stacked-bar\",\"kind\":\"stacked-bar\",\"source\":{\"kind\":\"praxis.stats\",\"resource\":\"/api/human-resources/vw-analytics-folha-pagamento\",\"operation\":\"timeseries\",\"options\":{\"granularity\":\"month\",\"orderBy\":\"key-asc\"}},\"dimensions\":[{\"field\":\"competencia\",\"label\":\"Competência\",\"role\":\"time\"}],\"metrics\":[{\"field\":\"salarioBruto\",\"label\":\"Massa bruta\",\"aggregation\":\"sum\"},{\"field\":\"totalDescontos\",\"label\":\"Descontos\",\"aggregation\":\"sum\"}],\"legend\":{\"enabled\":true},\"tooltip\":{\"enabled\":true}},\"enableCustomization\":true},\"outputs\":{\"pointClick\":\"emit\",\"selectionChange\":\"emit\",\"loadStateChange\":\"emit\"}}},{\"key\":\"payrollProfile\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"donut_large\",\"title\":\"Perfis da folha\",\"subtitle\":\"Rosca remota por perfil calculado\"},\"definition\":{\"id\":\"praxis-chart\",\"bindingOrder\":[\"chartDocument\",\"enableCustomization\"],\"inputs\":{\"chartDocument\":{\"version\":\"0.1.0\",\"chartId\":\"analytics-dashboard-payroll-profile\",\"kind\":\"donut\",\"source\":{\"kind\":\"praxis.stats\",\"resource\":\"/api/human-resources/vw-analytics-folha-pagamento\",\"operation\":\"group-by\",\"options\":{\"limit\":8,\"orderBy\":\"value-desc\"}},\"dimensions\":[{\"field\":\"payrollProfile\",\"label\":\"Perfil\",\"role\":\"category\"}],\"metrics\":[{\"field\":\"count\",\"label\":\"Registros\",\"aggregation\":\"count\"}],\"legend\":{\"enabled\":true},\"tooltip\":{\"enabled\":true}},\"enableCustomization\":true},\"outputs\":{\"pointClick\":\"emit\",\"selectionChange\":\"emit\",\"loadStateChange\":\"emit\"}}},{\"key\":\"payrollProfilePie\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"pie_chart\",\"title\":\"Perfis em pizza\",\"subtitle\":\"A mesma composição remota em setores preenchidos\"},\"definition\":{\"id\":\"praxis-chart\",\"bindingOrder\":[\"chartDocument\",\"enableCustomization\"],\"inputs\":{\"chartDocument\":{\"version\":\"0.1.0\",\"chartId\":\"analytics-dashboard-payroll-profile-pie\",\"kind\":\"pie\",\"source\":{\"kind\":\"praxis.stats\",\"resource\":\"/api/human-resources/vw-analytics-folha-pagamento\",\"operation\":\"group-by\",\"options\":{\"limit\":8,\"orderBy\":\"value-desc\"}},\"dimensions\":[{\"field\":\"payrollProfile\",\"label\":\"Perfil\",\"role\":\"category\"}],\"metrics\":[{\"field\":\"count\",\"label\":\"Registros\",\"aggregation\":\"count\"}],\"legend\":{\"enabled\":true},\"tooltip\":{\"enabled\":true}},\"enableCustomization\":true},\"outputs\":{\"pointClick\":\"emit\",\"selectionChange\":\"emit\",\"loadStateChange\":\"emit\"}}},{\"key\":\"payrollCombo\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"multiline_chart\",\"title\":\"Bruto × descontos\",\"subtitle\":\"Combo remoto com descontos no eixo secundário\"},\"definition\":{\"id\":\"praxis-chart\",\"bindingOrder\":[\"chartDocument\",\"enableCustomization\"],\"inputs\":{\"chartDocument\":{\"version\":\"0.1.0\",\"chartId\":\"analytics-dashboard-payroll-combo\",\"kind\":\"combo\",\"source\":{\"kind\":\"praxis.stats\",\"resource\":\"/api/human-resources/vw-analytics-folha-pagamento\",\"operation\":\"timeseries\",\"options\":{\"granularity\":\"month\",\"orderBy\":\"key-asc\"}},\"dimensions\":[{\"field\":\"competencia\",\"label\":\"Competência\",\"role\":\"time\"}],\"metrics\":[{\"field\":\"salarioBruto\",\"label\":\"Massa bruta\",\"aggregation\":\"sum\",\"seriesKind\":\"bar\",\"axis\":\"primary\"},{\"field\":\"totalDescontos\",\"label\":\"Descontos\",\"aggregation\":\"sum\",\"seriesKind\":\"line\",\"axis\":\"secondary\"}],\"legend\":{\"enabled\":true},\"tooltip\":{\"enabled\":true}},\"enableCustomization\":true},\"outputs\":{\"pointClick\":\"emit\",\"selectionChange\":\"emit\",\"loadStateChange\":\"emit\"}}},{\"key\":\"absenceCorrelation\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"scatter_plot\",\"title\":\"Pessoas × dias afastados\",\"subtitle\":\"Dispersão remota por departamento\"},\"definition\":{\"id\":\"praxis-chart\",\"bindingOrder\":[\"config\",\"enableCustomization\"],\"inputs\":{\"config\":{\"id\":\"analytics-dashboard-absence-correlation\",\"type\":\"scatter\",\"axes\":{\"x\":{\"field\":\"employees\",\"type\":\"value\",\"label\":\"Colaboradores\"},\"y\":{\"field\":\"days\",\"type\":\"value\",\"label\":\"Dias afastados\"}},\"series\":[{\"id\":\"absence-department-correlation\",\"name\":\"Departamentos\",\"metric\":{\"field\":\"days\",\"aggregation\":\"sum\"}}],\"dataSource\":{\"kind\":\"remote\",\"resourcePath\":\"/api/human-resources/vw-analytics-afastamentos\",\"schemaId\":\"/api/human-resources/vw-analytics-afastamentos\",\"query\":{\"sourceKind\":\"praxis.stats\",\"statsOperation\":\"group-by\",\"statsPath\":\"/api/human-resources/vw-analytics-afastamentos/stats/group-by\",\"statsRequest\":{\"filter\":{},\"field\":\"departamento\",\"metric\":{\"operation\":\"DISTINCT_COUNT\",\"field\":\"funcionarioId\",\"alias\":\"employees\"},\"metrics\":[{\"operation\":\"DISTINCT_COUNT\",\"field\":\"funcionarioId\",\"alias\":\"employees\"},{\"operation\":\"SUM\",\"field\":\"diasAfastado\",\"alias\":\"days\"}],\"limit\":20,\"orderBy\":\"VALUE_DESC\"},\"dimensions\":[{\"field\":\"departamento\"}],\"metrics\":[{\"field\":\"funcionarioId\",\"aggregation\":\"distinct-count\",\"alias\":\"employees\"},{\"field\":\"diasAfastado\",\"aggregation\":\"sum\",\"alias\":\"days\"}]}},\"interactions\":{\"pointClick\":true,\"selection\":true}},\"enableCustomization\":true},\"outputs\":{\"pointClick\":\"emit\",\"selectionChange\":\"emit\",\"loadStateChange\":\"emit\"}}}]}}",
3251
+ "content": "{\"componentId\":\"praxis-dynamic-page\",\"chunkSection\":\"page.widgets\",\"page\":{\"widgets\":[{\"key\":\"payrollAreaTrend\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"area_chart\",\"title\":\"Massa líquida em área\",\"subtitle\":\"A tendência mensal remota com preenchimento de área\"},\"definition\":{\"id\":\"praxis-chart\",\"bindingOrder\":[\"chartDocument\",\"enableCustomization\"],\"inputs\":{\"chartDocument\":{\"version\":\"0.1.0\",\"chartId\":\"analytics-dashboard-payroll-area-trend\",\"kind\":\"area\",\"source\":{\"kind\":\"praxis.stats\",\"resource\":\"/api/human-resources/vw-analytics-folha-pagamento\",\"operation\":\"timeseries\",\"options\":{\"granularity\":\"month\",\"orderBy\":\"key-asc\"}},\"dimensions\":[{\"field\":\"competencia\",\"label\":\"Competência\",\"role\":\"time\"}],\"metrics\":[{\"field\":\"salarioLiquido\",\"label\":\"Salário líquido\",\"aggregation\":\"sum\"}],\"legend\":{\"enabled\":true},\"tooltip\":{\"enabled\":true}},\"enableCustomization\":true},\"outputs\":{\"pointClick\":\"emit\",\"selectionChange\":\"emit\",\"loadStateChange\":\"emit\"}}},{\"key\":\"payrollStackedArea\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"area_chart\",\"title\":\"Composição da folha\",\"subtitle\":\"Área empilhada com séries legítimas do mesmo endpoint\"},\"definition\":{\"id\":\"praxis-chart\",\"bindingOrder\":[\"chartDocument\",\"enableCustomization\"],\"inputs\":{\"chartDocument\":{\"version\":\"0.1.0\",\"chartId\":\"analytics-dashboard-payroll-stacked-area\",\"kind\":\"stacked-area\",\"source\":{\"kind\":\"praxis.stats\",\"resource\":\"/api/human-resources/vw-analytics-folha-pagamento\",\"operation\":\"timeseries\",\"options\":{\"granularity\":\"month\",\"orderBy\":\"key-asc\"}},\"dimensions\":[{\"field\":\"competencia\",\"label\":\"Competência\",\"role\":\"time\"}],\"metrics\":[{\"field\":\"salarioBruto\",\"label\":\"Massa bruta\",\"aggregation\":\"sum\"},{\"field\":\"totalDescontos\",\"label\":\"Descontos\",\"aggregation\":\"sum\"}],\"legend\":{\"enabled\":true},\"tooltip\":{\"enabled\":true}},\"enableCustomization\":true},\"outputs\":{\"pointClick\":\"emit\",\"selectionChange\":\"emit\",\"loadStateChange\":\"emit\"}}},{\"key\":\"payrollStackedBar\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"stacked_bar_chart\",\"title\":\"Composição em barras empilhadas\",\"subtitle\":\"As mesmas séries remotas em comparação mensal discreta\"},\"definition\":{\"id\":\"praxis-chart\",\"bindingOrder\":[\"chartDocument\",\"enableCustomization\"],\"inputs\":{\"chartDocument\":{\"version\":\"0.1.0\",\"chartId\":\"analytics-dashboard-payroll-stacked-bar\",\"kind\":\"stacked-bar\",\"source\":{\"kind\":\"praxis.stats\",\"resource\":\"/api/human-resources/vw-analytics-folha-pagamento\",\"operation\":\"timeseries\",\"options\":{\"granularity\":\"month\",\"orderBy\":\"key-asc\"}},\"dimensions\":[{\"field\":\"competencia\",\"label\":\"Competência\",\"role\":\"time\"}],\"metrics\":[{\"field\":\"salarioBruto\",\"label\":\"Massa bruta\",\"aggregation\":\"sum\"},{\"field\":\"totalDescontos\",\"label\":\"Descontos\",\"aggregation\":\"sum\"}],\"legend\":{\"enabled\":true},\"tooltip\":{\"enabled\":true}},\"enableCustomization\":true},\"outputs\":{\"pointClick\":\"emit\",\"selectionChange\":\"emit\",\"loadStateChange\":\"emit\"}}},{\"key\":\"payrollProfile\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"donut_large\",\"title\":\"Perfis da folha\",\"subtitle\":\"Rosca remota por perfil calculado\"},\"definition\":{\"id\":\"praxis-chart\",\"bindingOrder\":[\"chartDocument\",\"enableCustomization\"],\"inputs\":{\"chartDocument\":{\"version\":\"0.1.0\",\"chartId\":\"analytics-dashboard-payroll-profile\",\"kind\":\"donut\",\"source\":{\"kind\":\"praxis.stats\",\"resource\":\"/api/human-resources/vw-analytics-folha-pagamento\",\"operation\":\"group-by\",\"options\":{\"limit\":8,\"orderBy\":\"value-desc\"}},\"dimensions\":[{\"field\":\"payrollProfile\",\"label\":\"Perfil\",\"role\":\"category\"}],\"metrics\":[{\"field\":\"count\",\"label\":\"Registros\",\"aggregation\":\"count\"}],\"legend\":{\"enabled\":true},\"tooltip\":{\"enabled\":true}},\"enableCustomization\":true},\"outputs\":{\"pointClick\":\"emit\",\"selectionChange\":\"emit\",\"loadStateChange\":\"emit\"}}},{\"key\":\"payrollProfilePie\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"pie_chart\",\"title\":\"Perfis em pizza\",\"subtitle\":\"A mesma composição remota em setores preenchidos\"},\"definition\":{\"id\":\"praxis-chart\",\"bindingOrder\":[\"chartDocument\",\"enableCustomization\"],\"inputs\":{\"chartDocument\":{\"version\":\"0.1.0\",\"chartId\":\"analytics-dashboard-payroll-profile-pie\",\"kind\":\"pie\",\"source\":{\"kind\":\"praxis.stats\",\"resource\":\"/api/human-resources/vw-analytics-folha-pagamento\",\"operation\":\"group-by\",\"options\":{\"limit\":8,\"orderBy\":\"value-desc\"}},\"dimensions\":[{\"field\":\"payrollProfile\",\"label\":\"Perfil\",\"role\":\"category\"}],\"metrics\":[{\"field\":\"count\",\"label\":\"Registros\",\"aggregation\":\"count\"}],\"legend\":{\"enabled\":true},\"tooltip\":{\"enabled\":true}},\"enableCustomization\":true},\"outputs\":{\"pointClick\":\"emit\",\"selectionChange\":\"emit\",\"loadStateChange\":\"emit\"}}},{\"key\":\"payrollCombo\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"multiline_chart\",\"title\":\"Bruto × descontos\",\"subtitle\":\"Combo remoto com descontos no eixo secundário\"},\"definition\":{\"id\":\"praxis-chart\",\"bindingOrder\":[\"chartDocument\",\"enableCustomization\"],\"inputs\":{\"chartDocument\":{\"version\":\"0.1.0\",\"chartId\":\"analytics-dashboard-payroll-combo\",\"kind\":\"combo\",\"source\":{\"kind\":\"praxis.stats\",\"resource\":\"/api/human-resources/vw-analytics-folha-pagamento\",\"operation\":\"timeseries\",\"options\":{\"granularity\":\"month\",\"orderBy\":\"key-asc\"}},\"dimensions\":[{\"field\":\"competencia\",\"label\":\"Competência\",\"role\":\"time\"}],\"metrics\":[{\"field\":\"salarioBruto\",\"label\":\"Massa bruta\",\"aggregation\":\"sum\",\"seriesKind\":\"bar\",\"axis\":\"primary\"},{\"field\":\"totalDescontos\",\"label\":\"Descontos\",\"aggregation\":\"sum\",\"seriesKind\":\"line\",\"axis\":\"secondary\"}],\"legend\":{\"enabled\":true},\"tooltip\":{\"enabled\":true}},\"enableCustomization\":true},\"outputs\":{\"pointClick\":\"emit\",\"selectionChange\":\"emit\",\"loadStateChange\":\"emit\"}}},{\"key\":\"absenceCorrelation\",\"shell\":{\"kind\":\"dashboard-card\",\"icon\":\"scatter_plot\",\"title\":\"Pessoas × dias afastados\",\"subtitle\":\"Dispersão remota por departamento\"},\"definition\":{\"id\":\"praxis-chart\",\"bindingOrder\":[\"chartDocument\",\"enableCustomization\"],\"inputs\":{\"chartDocument\":{\"version\":\"0.1.0\",\"chartId\":\"analytics-dashboard-absence-correlation\",\"kind\":\"scatter\",\"source\":{\"kind\":\"praxis.stats\",\"resource\":\"/api/human-resources/vw-analytics-afastamentos\",\"operation\":\"group-by\",\"options\":{\"limit\":20,\"orderBy\":\"value-desc\"}},\"dimensions\":[{\"field\":\"departamento\",\"label\":\"Departamento\",\"role\":\"category\"}],\"metrics\":[{\"field\":\"funcionarioId\",\"label\":\"Colaboradores\",\"aggregation\":\"distinct-count\"},{\"field\":\"diasAfastado\",\"label\":\"Dias afastados\",\"aggregation\":\"sum\"}],\"events\":{\"pointClick\":{\"action\":\"emit\"},\"selectionChange\":{\"action\":\"emit\"}},\"legend\":{\"enabled\":false},\"tooltip\":{\"enabled\":true}},\"enableCustomization\":true},\"outputs\":{\"pointClick\":\"emit\",\"selectionChange\":\"emit\",\"loadStateChange\":\"emit\"}}}]}}",
3252
3252
  "sourcePointer": "examples/ai-recipes/praxis-dynamic-page.analytics-dashboard-showcase.json",
3253
- "contentHash": "3b970d3e283c39a2917b69cf45133cef11dbaf3b23f6ae54c71b1f6803aaef21",
3253
+ "contentHash": "f731db2cc79cd469e2e7526fbd081975f28f345fa5fb4073f2872d8f8d46265b",
3254
3254
  "sourceKind": "component_definition",
3255
3255
  "sourceId": "praxis-dynamic-page",
3256
3256
  "corpusVersion": "1.0.0"
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Component, InjectionToken, Injectable, inject, Inject, Optional, SkipSelf, makeEnvironmentProviders, APP_INITIALIZER, signal, computed, DestroyRef, ENVIRONMENT_INITIALIZER, ErrorHandler, Input, Directive, input, booleanAttribute, ChangeDetectionStrategy, EventEmitter, Output, SecurityContext, ViewContainerRef, SimpleChange, ContentChild, HostBinding, Injector, ElementRef, ChangeDetectorRef, HostListener, ViewChildren, ViewChild, output, effect } from '@angular/core';
2
+ import { Component, InjectionToken, Injectable, inject, Inject, Optional, SkipSelf, makeEnvironmentProviders, APP_INITIALIZER, signal, computed, DestroyRef, ENVIRONMENT_INITIALIZER, ErrorHandler, Input, Directive, input, booleanAttribute, ChangeDetectionStrategy, EventEmitter, Output, SecurityContext, ViewContainerRef, SimpleChange, ContentChild, HostBinding, Injector, ElementRef, ChangeDetectorRef, afterNextRender, HostListener, ViewChildren, ViewChild, output, effect } from '@angular/core';
3
3
  import * as i1 from '@angular/common/http';
4
4
  import { HttpHeaders, HttpClient, HttpParams, HttpResponse, HttpContextToken, HTTP_INTERCEPTORS, withInterceptors } from '@angular/common/http';
5
5
  import { of, defer, throwError, from, EMPTY, BehaviorSubject, firstValueFrom, Subject, finalize as finalize$1, shareReplay as shareReplay$1, map as map$1, switchMap as switchMap$1, catchError as catchError$1, forkJoin } from 'rxjs';
@@ -37593,7 +37593,7 @@ class DynamicWidgetPageComponent {
37593
37593
  widgetLoaders;
37594
37594
  constructor() {
37595
37595
  this.registerRuntimeComponentObservationProvider();
37596
- this.observeHostWidth();
37596
+ afterNextRender({ read: () => this.observeHostWidth() });
37597
37597
  }
37598
37598
  ngOnDestroy() {
37599
37599
  this.destroyed = true;
@@ -39875,6 +39875,11 @@ class DynamicWidgetPageComponent {
39875
39875
  onWindowResize() {
39876
39876
  if (!this.pageDefinition)
39877
39877
  return;
39878
+ const measuredWidth = this.measureHostWidth();
39879
+ if (this.updateContainerWidth(measuredWidth))
39880
+ return;
39881
+ if (this.containerWidth)
39882
+ return;
39878
39883
  this.applyResponsivePresentation(this.pageDefinition, this.pageDefinition.widgets || [], this.pageRuntime);
39879
39884
  }
39880
39885
  onCanvasPointerMove(event) {
@@ -40160,25 +40165,35 @@ class DynamicWidgetPageComponent {
40160
40165
  : fallback;
40161
40166
  }
40162
40167
  observeHostWidth() {
40168
+ if (this.destroyed)
40169
+ return;
40170
+ this.updateContainerWidth(this.measureHostWidth());
40163
40171
  const ResizeObserverCtor = globalThis.ResizeObserver;
40164
40172
  if (typeof ResizeObserverCtor !== 'function') {
40165
40173
  return;
40166
40174
  }
40167
40175
  this.hostResizeObserver = new ResizeObserverCtor((entries) => {
40168
- const width = entries[0]?.contentRect.width;
40169
- if (!Number.isFinite(width)
40170
- || width <= 0
40171
- || Math.abs(width - (this.containerWidth || 0)) < 0.5) {
40172
- return;
40173
- }
40174
- this.containerWidth = width;
40175
- if (this.pageDefinition) {
40176
- this.applyResponsivePresentation(this.pageDefinition, this.pageDefinition.widgets || [], this.pageRuntime);
40177
- this.changeDetector.markForCheck();
40178
- }
40176
+ this.updateContainerWidth(entries[0]?.contentRect.width);
40179
40177
  });
40180
40178
  this.hostResizeObserver.observe(this.hostElement.nativeElement);
40181
40179
  }
40180
+ measureHostWidth() {
40181
+ return this.hostElement.nativeElement.getBoundingClientRect().width;
40182
+ }
40183
+ updateContainerWidth(width) {
40184
+ if (!Number.isFinite(width)
40185
+ || !width
40186
+ || width <= 0
40187
+ || Math.abs(width - (this.containerWidth || 0)) < 0.5) {
40188
+ return false;
40189
+ }
40190
+ this.containerWidth = width;
40191
+ if (this.pageDefinition) {
40192
+ this.applyResponsivePresentation(this.pageDefinition, this.pageDefinition.widgets || [], this.pageRuntime);
40193
+ this.changeDetector.markForCheck();
40194
+ }
40195
+ return true;
40196
+ }
40182
40197
  isCanvasMode() {
40183
40198
  return !!this.canvas;
40184
40199
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@praxisui/core",
3
- "version": "9.0.28",
3
+ "version": "9.0.30",
4
4
  "description": "Core library for Praxis UI Workspace: types, tokens, services and utilities shared across @praxisui/* packages.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0",
@@ -16621,6 +16621,8 @@ declare class DynamicWidgetPageComponent implements OnChanges, OnDestroy {
16621
16621
  private resolveDeviceKind;
16622
16622
  private resolveViewportWidth;
16623
16623
  private observeHostWidth;
16624
+ private measureHostWidth;
16625
+ private updateContainerWidth;
16624
16626
  isCanvasMode(): boolean;
16625
16627
  shouldAutoWireOutputs(widget: WidgetInstance | RenderedWidgetInstance): boolean;
16626
16628
  private hasCompositionOutputLinks;