@praxisui/core 8.0.0-beta.0 → 8.0.0-beta.2

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
@@ -59,6 +59,15 @@ Exemplo completo (app de referência)
59
59
 
60
60
  ### 1) `PraxisIconDirective`
61
61
 
62
+ Hosts devem carregar Material Symbols para ícones `mso:*` e Material Icons classic quando usarem `mi:*`, componentes legados baseados em ligature classic, ou `mat-icon.material-icons`. Sem Material Icons classic, a ligature pode aparecer como texto visível, por exemplo `clear` dentro de um select.
63
+
64
+ Para alinhar tokens e superfícies Angular Material/Praxis, importe o asset canônico do pacote depois do tema Angular Material e do CSS do CDK Overlay:
65
+
66
+ ```scss
67
+ @import "@angular/cdk/overlay-prebuilt.css";
68
+ @import "@praxisui/core/theme-bridge.css";
69
+ ```
70
+
62
71
  ```ts
63
72
  import { Component } from '@angular/core';
64
73
  import { MatIconModule } from '@angular/material/icon';
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Component, InjectionToken, Injectable, inject, Inject, Optional, makeEnvironmentProviders, ENVIRONMENT_INITIALIZER, APP_INITIALIZER, ErrorHandler, EventEmitter, Output, Input, ChangeDetectionStrategy, Directive, SecurityContext, ViewContainerRef, ContentChild, signal, HostListener, ViewChild, computed } from '@angular/core';
2
+ import { Component, InjectionToken, Injectable, inject, Inject, Optional, makeEnvironmentProviders, ENVIRONMENT_INITIALIZER, APP_INITIALIZER, ErrorHandler, EventEmitter, Output, Input, ChangeDetectionStrategy, Directive, SecurityContext, ViewContainerRef, ContentChild, HostBinding, signal, HostListener, ViewChild, computed } 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, map as map$1 } from 'rxjs';
@@ -1549,6 +1549,7 @@ class ApiConfigStorage {
1549
1549
  http = inject(HttpClient);
1550
1550
  opts = inject(API_CONFIG_STORAGE_OPTIONS, { optional: true });
1551
1551
  baseUrl = (this.opts?.baseUrl || '/api/praxis/config/ui').replace(/\/$/, '');
1552
+ scope = this.opts?.scope?.trim();
1552
1553
  headersFactory = this.opts?.headersFactory || (() => ({}));
1553
1554
  defaultHeaders = this.opts?.defaultHeaders;
1554
1555
  componentTypeResolver = (key) => {
@@ -1739,11 +1740,15 @@ class ApiConfigStorage {
1739
1740
  return new HttpHeaders(merged);
1740
1741
  }
1741
1742
  buildParams(componentType, componentId) {
1743
+ const params = {
1744
+ componentType,
1745
+ componentId,
1746
+ };
1747
+ if (this.scope) {
1748
+ params['scope'] = this.scope;
1749
+ }
1742
1750
  return new HttpParams({
1743
- fromObject: {
1744
- componentType,
1745
- componentId,
1746
- },
1751
+ fromObject: params,
1747
1752
  });
1748
1753
  }
1749
1754
  resolveKey(key) {
@@ -2111,6 +2116,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
2111
2116
  args: [{ providedIn: 'root' }]
2112
2117
  }], ctorParameters: () => [] });
2113
2118
 
2119
+ const SCHEMA_CACHE_GLOBAL_CONFIG_READY_TIMEOUT_MS = 1200;
2114
2120
  /**
2115
2121
  * Serviço genérico para operações CRUD em APIs REST padronizadas.
2116
2122
  *
@@ -2180,7 +2186,10 @@ class GenericCrudService {
2180
2186
  if (!this.schemaCacheReady) {
2181
2187
  this.schemaCacheReady = (async () => {
2182
2188
  try {
2183
- await this.globalConfig.ready();
2189
+ await Promise.race([
2190
+ this.globalConfig.ready(),
2191
+ new Promise((resolve) => setTimeout(resolve, SCHEMA_CACHE_GLOBAL_CONFIG_READY_TIMEOUT_MS)),
2192
+ ]);
2184
2193
  }
2185
2194
  catch { }
2186
2195
  const disableCache = this.globalConfig.get('cache.disableSchemaCache');
@@ -8521,6 +8530,14 @@ function buildPraxisLayerScaleCss(scale = PRAXIS_LAYER_SCALE_DEFAULTS) {
8521
8530
  z-index: var(${PRAXIS_LAYER_SCALE_VARS.cdkOverlayBackdrop}, ${scale.cdkOverlayBackdrop}) !important;
8522
8531
  }
8523
8532
 
8533
+ .cdk-overlay-pane {
8534
+ z-index: var(${PRAXIS_LAYER_SCALE_VARS.cdkOverlayWrapper}, ${scale.cdkOverlayWrapper}) !important;
8535
+ }
8536
+
8537
+ .cdk-overlay-connected-position-bounding-box {
8538
+ z-index: var(${PRAXIS_LAYER_SCALE_VARS.cdkOverlayWrapper}, ${scale.cdkOverlayWrapper}) !important;
8539
+ }
8540
+
8524
8541
  .cdk-global-overlay-wrapper {
8525
8542
  z-index: var(${PRAXIS_LAYER_SCALE_VARS.cdkOverlayWrapper}, ${scale.cdkOverlayWrapper}) !important;
8526
8543
  }
@@ -9161,7 +9178,8 @@ class CrudOperationResolutionService {
9161
9178
  if (operation === 'delete') {
9162
9179
  return null;
9163
9180
  }
9164
- const { path, method, schemaType } = this.buildCanonicalSchemaParams(operation, resourcePath, preferredMethod);
9181
+ const schemaResourcePath = this.resolveSchemaResourcePath(resourcePath, options);
9182
+ const { path, method, schemaType } = this.buildCanonicalSchemaParams(operation, schemaResourcePath, preferredMethod);
9165
9183
  const query = new URLSearchParams({
9166
9184
  path,
9167
9185
  operation: method.toLowerCase(),
@@ -9314,7 +9332,21 @@ class CrudOperationResolutionService {
9314
9332
  if (!normalized) {
9315
9333
  return '';
9316
9334
  }
9317
- return normalized.startsWith('/') ? normalized : `/${normalized}`;
9335
+ return normalized.replace(/\/+$/, '');
9336
+ }
9337
+ resolveSchemaResourcePath(resourcePath, options) {
9338
+ const normalized = this.normalizeResourcePath(resourcePath);
9339
+ if (!normalized) {
9340
+ return '';
9341
+ }
9342
+ try {
9343
+ const resolved = this.discovery.resolveHref(normalized, options);
9344
+ const pathname = new URL(resolved).pathname.replace(/\/+/g, '/').replace(/\/+$/, '');
9345
+ return pathname || (normalized.startsWith('/') ? normalized : `/${normalized}`);
9346
+ }
9347
+ catch {
9348
+ return normalized.startsWith('/') ? normalized : `/${normalized}`;
9349
+ }
9318
9350
  }
9319
9351
  resolveCanonicalResourcePath(request, fallbackResourcePath) {
9320
9352
  const capabilityResourcePath = this.normalizeResourcePath(request.capabilities?.resourcePath || '');
@@ -9758,6 +9790,8 @@ class AnalyticsStatsRequestBuilderService {
9758
9790
  case 'count':
9759
9791
  case '':
9760
9792
  return 'COUNT';
9793
+ case 'distinct-count':
9794
+ return 'DISTINCT_COUNT';
9761
9795
  case 'sum':
9762
9796
  return 'SUM';
9763
9797
  default:
@@ -9783,18 +9817,14 @@ class AnalyticsStatsRequestBuilderService {
9783
9817
  }
9784
9818
  mapGranularityToBackend(granularity) {
9785
9819
  switch (granularity) {
9786
- case 'hour':
9787
- return 'HOUR';
9788
9820
  case 'day':
9789
9821
  return 'DAY';
9790
9822
  case 'week':
9791
9823
  return 'WEEK';
9792
9824
  case 'month':
9793
9825
  return 'MONTH';
9794
- case 'quarter':
9795
- return 'QUARTER';
9796
- case 'year':
9797
- return 'YEAR';
9826
+ default:
9827
+ throw new Error(`Analytics stats granularity "${granularity}" is not supported in praxis.stats execution.`);
9798
9828
  }
9799
9829
  }
9800
9830
  getExecutionMetrics(projection) {
@@ -11140,11 +11170,14 @@ function providePraxisGlobalConfigBootstrap(options) {
11140
11170
  }
11141
11171
 
11142
11172
  function providePraxisI18nConfig(config) {
11143
- return {
11144
- provide: PRAXIS_I18N_CONFIG,
11145
- useValue: config,
11146
- multi: true,
11147
- };
11173
+ return [
11174
+ {
11175
+ provide: PRAXIS_I18N_CONFIG,
11176
+ useValue: config,
11177
+ multi: true,
11178
+ },
11179
+ PraxisI18nService,
11180
+ ];
11148
11181
  }
11149
11182
  const providePraxisI18n = providePraxisI18nConfig;
11150
11183
  function providePraxisI18nTranslator(translator) {
@@ -12312,7 +12345,9 @@ function normalizeSelectLike(meta) {
12312
12345
  m.filterCriteria = m.filter;
12313
12346
  warnings.push('filter→filterCriteria');
12314
12347
  }
12315
- // Unificar endpoint/resourcePath (preferir resourcePath)
12348
+ // Unificar endpoint/resourcePath para metadados legados.
12349
+ // Quando ambos existem, endpoint representa a operacao concreta publicada pelo schema
12350
+ // (ex.: /options/filter) e resourcePath representa o recurso dono.
12316
12351
  if (m.resourcePath == null && m.endpoint != null) {
12317
12352
  m.resourcePath = m.endpoint;
12318
12353
  warnings.push('endpoint→resourcePath');
@@ -12385,8 +12420,6 @@ function normalizeSelectLike(meta) {
12385
12420
  delete m.valueField;
12386
12421
  if (m.filter !== undefined)
12387
12422
  delete m.filter;
12388
- if (m.endpoint !== undefined)
12389
- delete m.endpoint;
12390
12423
  return m;
12391
12424
  }
12392
12425
 
@@ -12498,6 +12531,16 @@ function getReferencedFieldMetadata(config, allFieldMetadata) {
12498
12531
  // Return only metadata for referenced fields
12499
12532
  return allFieldMetadata.filter((metadata) => referencedFieldNames.has(metadata.name));
12500
12533
  }
12534
+ function isLocalFieldMetadata(field) {
12535
+ return field.source === 'local';
12536
+ }
12537
+ function stripLocalSubmitSemantics$1(field) {
12538
+ const { source, transient, submitPolicy, ...rest } = field;
12539
+ void source;
12540
+ void transient;
12541
+ void submitPolicy;
12542
+ return rest;
12543
+ }
12501
12544
  /**
12502
12545
  * Synchronizes local config with server metadata
12503
12546
  * Detects additions, removals, and modifications
@@ -12511,7 +12554,7 @@ function syncWithServerMetadata(localConfig, serverMetadata) {
12511
12554
  // Detect additions/removals
12512
12555
  const addedFields = serverFields.filter((f) => !localFieldsMap.has(f.name));
12513
12556
  const removedFields = localFields
12514
- .filter((f) => !serverFieldsMap.has(f.name))
12557
+ .filter((f) => !serverFieldsMap.has(f.name) && !isLocalFieldMetadata(f))
12515
12558
  .map((f) => f.name);
12516
12559
  // Merge overlapping fields: prefer server as base, preserve local customizations
12517
12560
  const mergedOverlapping = [];
@@ -12522,7 +12565,7 @@ function syncWithServerMetadata(localConfig, serverMetadata) {
12522
12565
  return; // handled later
12523
12566
  // Deep-ish merge with special handling for validators/options
12524
12567
  const base = { ...serverField };
12525
- const loc = { ...localField };
12568
+ const loc = { ...stripLocalSubmitSemantics$1(localField) };
12526
12569
  const mergedValidators = { ...serverField.validators, ...localField.validators };
12527
12570
  // Options/nodes family: keep local options if provided, else server
12528
12571
  const pick = (k) => (loc[k] !== undefined ? loc[k] : base[k]);
@@ -15169,7 +15212,22 @@ function normalizeEndpoint(path) {
15169
15212
  }
15170
15213
  }
15171
15214
  // Remove leading slashes and any duplicated `api` segments
15172
- return path.replace(/^\/+/, '').replace(/^(?:api\/)+/, '');
15215
+ const normalized = path.replace(/^\/+/, '').replace(/^(?:api\/)+/, '');
15216
+ return normalized.replace(/\/options\/filter\/?$/i, '');
15217
+ }
15218
+ function isOptionsFilterEndpoint(path) {
15219
+ if (!path) {
15220
+ return false;
15221
+ }
15222
+ if (/^https?:\/\//i.test(path)) {
15223
+ try {
15224
+ path = new URL(path).pathname;
15225
+ }
15226
+ catch {
15227
+ // Keep the original string when it cannot be parsed as a URL.
15228
+ }
15229
+ }
15230
+ return /\/options\/filter\/?$/i.test(path);
15173
15231
  }
15174
15232
  function normalizeOptionSource(optionSource) {
15175
15233
  if (!optionSource?.key) {
@@ -15261,6 +15319,10 @@ function mapFieldDefinitionToMetadata(field) {
15261
15319
  if (normalizedOptionSource) {
15262
15320
  metadata.optionSource = normalizedOptionSource;
15263
15321
  }
15322
+ const hasOptionsFilterEndpoint = isOptionsFilterEndpoint(field.endpoint);
15323
+ if (field.endpoint) {
15324
+ metadata.endpoint = field.endpoint;
15325
+ }
15264
15326
  const endpointPath = normalizeEndpoint(normalizedOptionSource?.resourcePath ?? field.resourcePath ?? field.endpoint);
15265
15327
  if (endpointPath) {
15266
15328
  // Canonicalize: only expose resourcePath; do not write legacy alias
@@ -15303,13 +15365,13 @@ function mapFieldDefinitionToMetadata(field) {
15303
15365
  if (field.displayField) {
15304
15366
  metadata.optionLabelKey = field.displayField;
15305
15367
  }
15306
- else if (normalizedOptionSource) {
15368
+ else if (normalizedOptionSource || hasOptionsFilterEndpoint) {
15307
15369
  metadata.optionLabelKey = 'label';
15308
15370
  }
15309
15371
  if (field.valueField) {
15310
15372
  metadata.optionValueKey = field.valueField;
15311
15373
  }
15312
- else if (normalizedOptionSource) {
15374
+ else if (normalizedOptionSource || hasOptionsFilterEndpoint) {
15313
15375
  metadata.optionValueKey = 'id';
15314
15376
  }
15315
15377
  if (field.filter) {
@@ -17238,6 +17300,8 @@ const ENUMS$1 = {
17238
17300
  dependencyMergeStrategy: ['replace', 'merge'],
17239
17301
  dependencyLoadOnChange: ['respectLoadOn', 'immediate', 'manual'],
17240
17302
  textTransformApply: ['displayOnly', 'saveOnly', 'both'],
17303
+ fieldSource: ['schema', 'local'],
17304
+ fieldSubmitPolicy: ['include', 'omit', 'includeWhenDirty'],
17241
17305
  visibleIn: ['form', 'filter', 'table', 'dialog'],
17242
17306
  appearance: ['fill', 'outline'],
17243
17307
  color: ['primary', 'accent', 'warn'],
@@ -17248,7 +17312,7 @@ const ENUMS$1 = {
17248
17312
  sectionDescriptionStyle: ['bodyLarge', 'bodyMedium', 'bodySmall'],
17249
17313
  };
17250
17314
  const FIELD_METADATA_CAPABILITIES = {
17251
- version: 'v1.3',
17315
+ version: 'v1.4',
17252
17316
  enums: ENUMS$1,
17253
17317
  notes: [
17254
17318
  'Condições booleanas declarativas devem usar Json Logic canônico. Funções permanecem restritas a escapes host-level como transforms e validators customizados.',
@@ -17257,6 +17321,8 @@ const FIELD_METADATA_CAPABILITIES = {
17257
17321
  'Detalhes específicos de cada controle (ex: opções de datepicker, máscaras específicas) devem ser consultados nos catálogos de microcomponentes.',
17258
17322
  'POLICY: Arrays e objetos (ex: options, validators) devem sofrer merge/append, nunca substituição completa sem confirmação.',
17259
17323
  'Não gere função para conditionalDisplay/conditionalRequired. Use Json Logic serializável; funções ficam restritas a transforms e validators customizados.',
17324
+ 'POLICY: Campos auxiliares do host devem usar source=local ou transient=true em FieldMetadata; nao invente campos no DTO/backend quando eles nao devem participar do payload persistido.',
17325
+ 'POLICY: formSubmit.formData e o payload filtrado para backend; formSubmit.rawFormData preserva os valores completos da UI, incluindo campos locais/transient.',
17260
17326
  ],
17261
17327
  capabilities: [
17262
17328
  // =============================================================================
@@ -17451,6 +17517,32 @@ const FIELD_METADATA_CAPABILITIES = {
17451
17517
  description: 'Tipo de dado do campo (text, number, date, etc).',
17452
17518
  intentExamples: ['tipo de dado numero', 'campo de data'],
17453
17519
  },
17520
+ {
17521
+ path: 'source',
17522
+ category: 'data',
17523
+ valueKind: 'enum',
17524
+ allowedValues: ENUMS$1.fieldSource,
17525
+ description: 'Origem semantica do campo. Use local para campos do host que nao vem do schema backend.',
17526
+ intentExamples: ['campo local', 'campo auxiliar do host', 'campo que nao vem do schema'],
17527
+ safetyNotes: 'Nao marque como local um campo que exista no schema backend; remova a semantica local quando houver colisao com campo server-backed.',
17528
+ },
17529
+ {
17530
+ path: 'transient',
17531
+ category: 'data',
17532
+ valueKind: 'boolean',
17533
+ description: 'Marca o campo como temporario/local para preenchimento. O dynamic-form omite do submit por padrao.',
17534
+ intentExamples: ['campo temporario', 'campo transient', 'nao enviar no payload', 'usar apenas na UI'],
17535
+ safetyNotes: 'Campos transient continuam participando de UI, validacao, regras, visibilidade e valueChange; eles apenas saem do payload persistido por padrao.',
17536
+ },
17537
+ {
17538
+ path: 'submitPolicy',
17539
+ category: 'behavior',
17540
+ valueKind: 'enum',
17541
+ allowedValues: ENUMS$1.fieldSubmitPolicy,
17542
+ description: 'Politica de submit para sobrescrever o padrao de campos locais/transient.',
17543
+ intentExamples: ['omitir do submit', 'enviar mesmo sendo local', 'enviar apenas se alterado'],
17544
+ safetyNotes: 'Use omit para nunca persistir, include para enviar sempre e includeWhenDirty apenas quando o controle estiver dirty.',
17545
+ },
17454
17546
  // =============================================================================
17455
17547
  // MATERIAL DESIGN (APARÊNCIA GLOBAL)
17456
17548
  // =============================================================================
@@ -19855,9 +19947,7 @@ class DynamicWidgetLoaderDirective {
19855
19947
  }
19856
19948
  try {
19857
19949
  // Faz o binding com coerção de tipos quando possível
19858
- this.bindInputs(this.compRef, def.id, inputs, def.bindingOrder, meta || undefined, {
19859
- flushPerPrioritizedInput: !needsRecreate,
19860
- });
19950
+ this.bindInputs(this.compRef, def.id, inputs, def.bindingOrder, meta || undefined);
19861
19951
  this.bindOutputs(this.compRef.instance, def.id, outputs, meta || undefined);
19862
19952
  this.compRef.changeDetectorRef.detectChanges();
19863
19953
  this.widgetDiagnostic.emit({
@@ -19917,7 +20007,7 @@ class DynamicWidgetLoaderDirective {
19917
20007
  }
19918
20008
  this.vcRef.clear();
19919
20009
  }
19920
- bindInputs(compRef, id, inputs, bindingOrder, meta, options) {
20010
+ bindInputs(compRef, id, inputs, bindingOrder, meta) {
19921
20011
  // Derive priority order
19922
20012
  const defaultOrderMap = {
19923
20013
  'praxis-table': ['tableId', 'componentInstanceId', 'resourcePath', 'data', 'config'],
@@ -19964,17 +20054,10 @@ class DynamicWidgetLoaderDirective {
19964
20054
  console.warn(`[DynamicWidgetLoader] Failed to set input ${key}`, e);
19965
20055
  }
19966
20056
  };
19967
- const flushPerPrioritizedInput = options?.flushPerPrioritizedInput !== false;
19968
- // Apply prioritized inputs with eager flush only when updating an existing component.
19969
- // On the first bind, flushing after each input can fire ngOnInit before config/ids land together.
20057
+ // Apply every input before the final detectChanges so ngOnChanges never observes
20058
+ // a partial bindingOrder state, especially during existing component updates.
19970
20059
  for (const [key, raw] of prioritized) {
19971
20060
  apply(key, raw);
19972
- if (flushPerPrioritizedInput) {
19973
- try {
19974
- compRef.changeDetectorRef.detectChanges();
19975
- }
19976
- catch { }
19977
- }
19978
20061
  }
19979
20062
  // Apply remaining inputs
19980
20063
  for (const [key, raw] of others) {
@@ -20227,6 +20310,9 @@ const BUILTIN_SHELL_PRESETS = {
20227
20310
  };
20228
20311
  class WidgetShellComponent {
20229
20312
  i18n = inject(PraxisI18nService);
20313
+ get hostCollapsed() {
20314
+ return this.collapsed && !this.expanded && !this.fullscreen;
20315
+ }
20230
20316
  shell;
20231
20317
  context = null;
20232
20318
  dragSurfaceEnabled = false;
@@ -20408,7 +20494,7 @@ class WidgetShellComponent {
20408
20494
  return this.i18n.t(key, undefined, fallback, WIDGET_SHELL_I18N_NAMESPACE);
20409
20495
  }
20410
20496
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: WidgetShellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
20411
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: WidgetShellComponent, isStandalone: true, selector: "praxis-widget-shell", inputs: { shell: "shell", context: "context", dragSurfaceEnabled: "dragSurfaceEnabled", dragSurfaceLabel: "dragSurfaceLabel" }, outputs: { action: "action", dragSurfacePointerDown: "dragSurfacePointerDown", dragSurfaceKeydown: "dragSurfaceKeydown" }, providers: [providePraxisI18nConfig(WIDGET_SHELL_I18N_CONFIG)], queries: [{ propertyName: "loader", first: true, predicate: DynamicWidgetLoaderDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
20497
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: WidgetShellComponent, isStandalone: true, selector: "praxis-widget-shell", inputs: { shell: "shell", context: "context", dragSurfaceEnabled: "dragSurfaceEnabled", dragSurfaceLabel: "dragSurfaceLabel" }, outputs: { action: "action", dragSurfacePointerDown: "dragSurfacePointerDown", dragSurfaceKeydown: "dragSurfaceKeydown" }, host: { properties: { "class.pdx-widget-shell-collapsed": "this.hostCollapsed" } }, providers: [providePraxisI18nConfig(WIDGET_SHELL_I18N_CONFIG)], queries: [{ propertyName: "loader", first: true, predicate: DynamicWidgetLoaderDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: `
20412
20498
  <section
20413
20499
  class="pdx-shell"
20414
20500
  [class.no-shell]="!shellEnabled"
@@ -20542,7 +20628,7 @@ class WidgetShellComponent {
20542
20628
  @if (expanded || fullscreen) {
20543
20629
  <div class="pdx-shell-backdrop" (click)="closeOverlay()"></div>
20544
20630
  }
20545
- `, isInline: true, styles: [":host{display:block;height:100%}.pdx-shell{position:relative;height:100%;display:flex;flex-direction:column}.pdx-shell.no-shell{background:transparent;border:none;border-radius:0;box-shadow:none}.pdx-shell.dashboard{background:var(--pdx-shell-card-bg, var(--pdx-dashboard-card-bg, var(--md-sys-color-surface-container-low)));border:1px solid var(--pdx-shell-card-border, var(--pdx-dashboard-card-border, var(--md-sys-color-outline-variant)));border-radius:var(--pdx-shell-card-radius, 12px);box-shadow:var(--pdx-shell-card-shadow, 0 4px 12px rgba(15, 23, 42, .06));overflow:hidden}.pdx-shell-header{display:flex;align-items:center;gap:10px;padding:8px 10px 7px;border-bottom:1px solid var(--pdx-shell-header-border, var(--md-sys-color-outline-variant));background:var(--pdx-shell-header-bg, var(--md-sys-color-surface-container))}.pdx-shell-header--drag-enabled{cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.pdx-shell-header--drag-enabled:active{cursor:grabbing}.pdx-shell-header--drag-enabled:focus-visible{outline:2px solid color-mix(in srgb,var(--md-sys-color-primary) 72%,white 28%);outline-offset:-2px}.pdx-shell-title{display:flex;align-items:center;gap:8px;min-width:0;flex:1;color:var(--pdx-shell-title-color, inherit)}.pdx-shell-title mat-icon{color:var(--pdx-shell-icon-color, currentColor)}.pdx-shell-text{min-width:0}.pdx-shell-title-text{font-weight:var(--pdx-shell-title-weight, 600);font-size:var(--pdx-shell-title-size, 13px);line-height:1.15;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-shell-subtitle{font-size:var(--pdx-shell-subtitle-size, 11px);opacity:.75;color:var(--pdx-shell-subtitle-color, currentColor);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-shell-actions,.pdx-shell-window-actions{display:flex;align-items:center;gap:4px}.pdx-shell-window-actions{margin-left:auto}.pdx-action-outlined{border:1px solid var(--md-sys-color-outline-variant);border-radius:999px;padding:0 10px}.pdx-action-text{padding:0 8px}.pdx-action-label{font-size:12px;font-weight:500}.pdx-shell-body{flex:1;min-height:0;padding:var(--pdx-shell-body-padding, 8px 10px 10px 10px);background:var(--pdx-shell-body-bg, transparent);color:var(--pdx-shell-body-color, inherit)}.pdx-shell.no-shell .pdx-shell-body{padding:0}.pdx-shell-body.hidden{display:none}.pdx-shell.collapsed .pdx-shell-header{border-bottom-color:transparent}.pdx-shell.body-fill .pdx-shell-body,.pdx-shell.body-scroll .pdx-shell-body,.pdx-shell.expanded .pdx-shell-body,.pdx-shell.fullscreen .pdx-shell-body{overflow:auto;display:flex;flex-direction:column;min-height:0}.pdx-shell.body-fill .pdx-shell-body{overflow:hidden}.pdx-shell.body-scroll .pdx-shell-body{overflow:auto}.pdx-shell.body-fill .pdx-shell-body>*,.pdx-shell.body-scroll .pdx-shell-body>*,.pdx-shell.expanded .pdx-shell-body>*,.pdx-shell.fullscreen .pdx-shell-body>*{flex:1 1 auto;min-height:0;width:100%}.pdx-shell.expanded{position:fixed;top:10vh;left:50%;width:min(920px,92vw);height:min(640px,82vh);transform:translate(-50%);z-index:var(--praxis-layer-widget-shell-expanded, 1290);box-shadow:var(--mat-elevation-level8)}.pdx-shell.fullscreen{position:fixed;top:50%;left:50%;width:95vw;height:95vh;transform:translate(-50%,-50%);z-index:var(--praxis-layer-widget-shell-fullscreen, 1291);box-shadow:var(--mat-elevation-level8)}.pdx-shell-backdrop{position:fixed;inset:0;z-index:var(--praxis-layer-widget-shell-backdrop, 1280);background:#0000008c;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
20631
+ `, isInline: true, styles: [":host{display:block;height:100%}:host(.pdx-widget-shell-collapsed){height:auto}.pdx-shell{position:relative;height:100%;display:flex;flex-direction:column}.pdx-shell.no-shell{background:transparent;border:none;border-radius:0;box-shadow:none}.pdx-shell.dashboard{background:var(--pdx-shell-card-bg, var(--pdx-dashboard-card-bg, var(--md-sys-color-surface-container-low)));border:1px solid var(--pdx-shell-card-border, var(--pdx-dashboard-card-border, var(--md-sys-color-outline-variant)));border-radius:var(--pdx-shell-card-radius, 12px);box-shadow:var(--pdx-shell-card-shadow, 0 4px 12px rgba(15, 23, 42, .06));overflow:hidden}.pdx-shell-header{display:flex;align-items:center;gap:10px;padding:8px 10px 7px;border-bottom:1px solid var(--pdx-shell-header-border, var(--md-sys-color-outline-variant));background:var(--pdx-shell-header-bg, var(--md-sys-color-surface-container))}.pdx-shell-header--drag-enabled{cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.pdx-shell-header--drag-enabled:active{cursor:grabbing}.pdx-shell-header--drag-enabled:focus-visible{outline:2px solid color-mix(in srgb,var(--md-sys-color-primary) 72%,white 28%);outline-offset:-2px}.pdx-shell-title{display:flex;align-items:center;gap:8px;min-width:0;flex:1;color:var(--pdx-shell-title-color, inherit)}.pdx-shell-title mat-icon{color:var(--pdx-shell-icon-color, currentColor)}.pdx-shell-text{min-width:0}.pdx-shell-title-text{font-weight:var(--pdx-shell-title-weight, 600);font-size:var(--pdx-shell-title-size, 13px);line-height:1.15;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-shell-subtitle{font-size:var(--pdx-shell-subtitle-size, 11px);opacity:.75;color:var(--pdx-shell-subtitle-color, currentColor);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-shell-actions,.pdx-shell-window-actions{display:flex;align-items:center;gap:4px}.pdx-shell-window-actions{margin-left:auto}.pdx-action-outlined{border:1px solid var(--md-sys-color-outline-variant);border-radius:999px;padding:0 10px}.pdx-action-text{padding:0 8px}.pdx-action-label{font-size:12px;font-weight:500}.pdx-shell-body{flex:1;min-height:0;padding:var(--pdx-shell-body-padding, 8px 10px 10px 10px);background:var(--pdx-shell-body-bg, transparent);color:var(--pdx-shell-body-color, inherit)}.pdx-shell.no-shell .pdx-shell-body{padding:0}.pdx-shell-body.hidden{display:none}.pdx-shell.collapsed{height:auto}.pdx-shell.collapsed .pdx-shell-header{border-bottom-color:transparent}.pdx-shell.body-fill .pdx-shell-body,.pdx-shell.body-scroll .pdx-shell-body,.pdx-shell.expanded .pdx-shell-body,.pdx-shell.fullscreen .pdx-shell-body{overflow:auto;display:flex;flex-direction:column;min-height:0}.pdx-shell.collapsed .pdx-shell-body{display:none}.pdx-shell.body-fill .pdx-shell-body{overflow:hidden}.pdx-shell.body-scroll .pdx-shell-body{overflow:auto}.pdx-shell.body-fill .pdx-shell-body>*,.pdx-shell.body-scroll .pdx-shell-body>*,.pdx-shell.expanded .pdx-shell-body>*,.pdx-shell.fullscreen .pdx-shell-body>*{flex:1 1 auto;min-height:0;width:100%}.pdx-shell.expanded{position:fixed;top:10vh;left:50%;width:min(920px,92vw);height:min(640px,82vh);transform:translate(-50%);z-index:var(--praxis-layer-widget-shell-expanded, 1290);box-shadow:var(--mat-elevation-level8)}.pdx-shell.fullscreen{position:fixed;top:50%;left:50%;width:95vw;height:95vh;transform:translate(-50%,-50%);z-index:var(--praxis-layer-widget-shell-fullscreen, 1291);box-shadow:var(--mat-elevation-level8)}.pdx-shell-backdrop{position:fixed;inset:0;z-index:var(--praxis-layer-widget-shell-backdrop, 1280);background:#0000008c;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
20546
20632
  }
20547
20633
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: WidgetShellComponent, decorators: [{
20548
20634
  type: Component,
@@ -20680,8 +20766,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
20680
20766
  @if (expanded || fullscreen) {
20681
20767
  <div class="pdx-shell-backdrop" (click)="closeOverlay()"></div>
20682
20768
  }
20683
- `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;height:100%}.pdx-shell{position:relative;height:100%;display:flex;flex-direction:column}.pdx-shell.no-shell{background:transparent;border:none;border-radius:0;box-shadow:none}.pdx-shell.dashboard{background:var(--pdx-shell-card-bg, var(--pdx-dashboard-card-bg, var(--md-sys-color-surface-container-low)));border:1px solid var(--pdx-shell-card-border, var(--pdx-dashboard-card-border, var(--md-sys-color-outline-variant)));border-radius:var(--pdx-shell-card-radius, 12px);box-shadow:var(--pdx-shell-card-shadow, 0 4px 12px rgba(15, 23, 42, .06));overflow:hidden}.pdx-shell-header{display:flex;align-items:center;gap:10px;padding:8px 10px 7px;border-bottom:1px solid var(--pdx-shell-header-border, var(--md-sys-color-outline-variant));background:var(--pdx-shell-header-bg, var(--md-sys-color-surface-container))}.pdx-shell-header--drag-enabled{cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.pdx-shell-header--drag-enabled:active{cursor:grabbing}.pdx-shell-header--drag-enabled:focus-visible{outline:2px solid color-mix(in srgb,var(--md-sys-color-primary) 72%,white 28%);outline-offset:-2px}.pdx-shell-title{display:flex;align-items:center;gap:8px;min-width:0;flex:1;color:var(--pdx-shell-title-color, inherit)}.pdx-shell-title mat-icon{color:var(--pdx-shell-icon-color, currentColor)}.pdx-shell-text{min-width:0}.pdx-shell-title-text{font-weight:var(--pdx-shell-title-weight, 600);font-size:var(--pdx-shell-title-size, 13px);line-height:1.15;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-shell-subtitle{font-size:var(--pdx-shell-subtitle-size, 11px);opacity:.75;color:var(--pdx-shell-subtitle-color, currentColor);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-shell-actions,.pdx-shell-window-actions{display:flex;align-items:center;gap:4px}.pdx-shell-window-actions{margin-left:auto}.pdx-action-outlined{border:1px solid var(--md-sys-color-outline-variant);border-radius:999px;padding:0 10px}.pdx-action-text{padding:0 8px}.pdx-action-label{font-size:12px;font-weight:500}.pdx-shell-body{flex:1;min-height:0;padding:var(--pdx-shell-body-padding, 8px 10px 10px 10px);background:var(--pdx-shell-body-bg, transparent);color:var(--pdx-shell-body-color, inherit)}.pdx-shell.no-shell .pdx-shell-body{padding:0}.pdx-shell-body.hidden{display:none}.pdx-shell.collapsed .pdx-shell-header{border-bottom-color:transparent}.pdx-shell.body-fill .pdx-shell-body,.pdx-shell.body-scroll .pdx-shell-body,.pdx-shell.expanded .pdx-shell-body,.pdx-shell.fullscreen .pdx-shell-body{overflow:auto;display:flex;flex-direction:column;min-height:0}.pdx-shell.body-fill .pdx-shell-body{overflow:hidden}.pdx-shell.body-scroll .pdx-shell-body{overflow:auto}.pdx-shell.body-fill .pdx-shell-body>*,.pdx-shell.body-scroll .pdx-shell-body>*,.pdx-shell.expanded .pdx-shell-body>*,.pdx-shell.fullscreen .pdx-shell-body>*{flex:1 1 auto;min-height:0;width:100%}.pdx-shell.expanded{position:fixed;top:10vh;left:50%;width:min(920px,92vw);height:min(640px,82vh);transform:translate(-50%);z-index:var(--praxis-layer-widget-shell-expanded, 1290);box-shadow:var(--mat-elevation-level8)}.pdx-shell.fullscreen{position:fixed;top:50%;left:50%;width:95vw;height:95vh;transform:translate(-50%,-50%);z-index:var(--praxis-layer-widget-shell-fullscreen, 1291);box-shadow:var(--mat-elevation-level8)}.pdx-shell-backdrop{position:fixed;inset:0;z-index:var(--praxis-layer-widget-shell-backdrop, 1280);background:#0000008c;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}\n"] }]
20684
- }], propDecorators: { shell: [{
20769
+ `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;height:100%}:host(.pdx-widget-shell-collapsed){height:auto}.pdx-shell{position:relative;height:100%;display:flex;flex-direction:column}.pdx-shell.no-shell{background:transparent;border:none;border-radius:0;box-shadow:none}.pdx-shell.dashboard{background:var(--pdx-shell-card-bg, var(--pdx-dashboard-card-bg, var(--md-sys-color-surface-container-low)));border:1px solid var(--pdx-shell-card-border, var(--pdx-dashboard-card-border, var(--md-sys-color-outline-variant)));border-radius:var(--pdx-shell-card-radius, 12px);box-shadow:var(--pdx-shell-card-shadow, 0 4px 12px rgba(15, 23, 42, .06));overflow:hidden}.pdx-shell-header{display:flex;align-items:center;gap:10px;padding:8px 10px 7px;border-bottom:1px solid var(--pdx-shell-header-border, var(--md-sys-color-outline-variant));background:var(--pdx-shell-header-bg, var(--md-sys-color-surface-container))}.pdx-shell-header--drag-enabled{cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.pdx-shell-header--drag-enabled:active{cursor:grabbing}.pdx-shell-header--drag-enabled:focus-visible{outline:2px solid color-mix(in srgb,var(--md-sys-color-primary) 72%,white 28%);outline-offset:-2px}.pdx-shell-title{display:flex;align-items:center;gap:8px;min-width:0;flex:1;color:var(--pdx-shell-title-color, inherit)}.pdx-shell-title mat-icon{color:var(--pdx-shell-icon-color, currentColor)}.pdx-shell-text{min-width:0}.pdx-shell-title-text{font-weight:var(--pdx-shell-title-weight, 600);font-size:var(--pdx-shell-title-size, 13px);line-height:1.15;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-shell-subtitle{font-size:var(--pdx-shell-subtitle-size, 11px);opacity:.75;color:var(--pdx-shell-subtitle-color, currentColor);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-shell-actions,.pdx-shell-window-actions{display:flex;align-items:center;gap:4px}.pdx-shell-window-actions{margin-left:auto}.pdx-action-outlined{border:1px solid var(--md-sys-color-outline-variant);border-radius:999px;padding:0 10px}.pdx-action-text{padding:0 8px}.pdx-action-label{font-size:12px;font-weight:500}.pdx-shell-body{flex:1;min-height:0;padding:var(--pdx-shell-body-padding, 8px 10px 10px 10px);background:var(--pdx-shell-body-bg, transparent);color:var(--pdx-shell-body-color, inherit)}.pdx-shell.no-shell .pdx-shell-body{padding:0}.pdx-shell-body.hidden{display:none}.pdx-shell.collapsed{height:auto}.pdx-shell.collapsed .pdx-shell-header{border-bottom-color:transparent}.pdx-shell.body-fill .pdx-shell-body,.pdx-shell.body-scroll .pdx-shell-body,.pdx-shell.expanded .pdx-shell-body,.pdx-shell.fullscreen .pdx-shell-body{overflow:auto;display:flex;flex-direction:column;min-height:0}.pdx-shell.collapsed .pdx-shell-body{display:none}.pdx-shell.body-fill .pdx-shell-body{overflow:hidden}.pdx-shell.body-scroll .pdx-shell-body{overflow:auto}.pdx-shell.body-fill .pdx-shell-body>*,.pdx-shell.body-scroll .pdx-shell-body>*,.pdx-shell.expanded .pdx-shell-body>*,.pdx-shell.fullscreen .pdx-shell-body>*{flex:1 1 auto;min-height:0;width:100%}.pdx-shell.expanded{position:fixed;top:10vh;left:50%;width:min(920px,92vw);height:min(640px,82vh);transform:translate(-50%);z-index:var(--praxis-layer-widget-shell-expanded, 1290);box-shadow:var(--mat-elevation-level8)}.pdx-shell.fullscreen{position:fixed;top:50%;left:50%;width:95vw;height:95vh;transform:translate(-50%,-50%);z-index:var(--praxis-layer-widget-shell-fullscreen, 1291);box-shadow:var(--mat-elevation-level8)}.pdx-shell-backdrop{position:fixed;inset:0;z-index:var(--praxis-layer-widget-shell-backdrop, 1280);background:#0000008c;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}\n"] }]
20770
+ }], propDecorators: { hostCollapsed: [{
20771
+ type: HostBinding,
20772
+ args: ['class.pdx-widget-shell-collapsed']
20773
+ }], shell: [{
20685
20774
  type: Input
20686
20775
  }], context: [{
20687
20776
  type: Input
@@ -23828,6 +23917,7 @@ class DynamicWidgetPageComponent {
23828
23917
  /** Optional instance key for pages rendered multiple times. */
23829
23918
  componentInstanceId;
23830
23919
  pageChange = new EventEmitter();
23920
+ widgetEvent = new EventEmitter();
23831
23921
  widgetDiagnosticsChange = new EventEmitter();
23832
23922
  widgets = signal([], ...(ngDevMode ? [{ debugName: "widgets" }] : []));
23833
23923
  renderedGroups = signal([], ...(ngDevMode ? [{ debugName: "renderedGroups" }] : []));
@@ -23948,6 +24038,10 @@ class DynamicWidgetPageComponent {
23948
24038
  }
23949
24039
  }
23950
24040
  onWidgetEvent(fromKey, evt) {
24041
+ this.widgetEvent.emit({
24042
+ ...evt,
24043
+ ownerWidgetKey: evt.ownerWidgetKey || fromKey,
24044
+ });
23951
24045
  if (evt?.output && this.maybeExecuteMappedAction(fromKey, evt)) {
23952
24046
  return;
23953
24047
  }
@@ -25779,7 +25873,7 @@ class DynamicWidgetPageComponent {
25779
25873
  throw new Error('DynamicWidgetPageComponent no longer accepts `page.connections`. Use `composition.links` only.');
25780
25874
  }
25781
25875
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DynamicWidgetPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
25782
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: DynamicWidgetPageComponent, isStandalone: true, selector: "praxis-dynamic-page", inputs: { page: "page", context: "context", strictValidation: "strictValidation", enableCustomization: "enableCustomization", showPageSettingsButton: "showPageSettingsButton", shellEditorComponent: "shellEditorComponent", pageEditorComponent: "pageEditorComponent", autoPersist: "autoPersist", pageIdentity: "pageIdentity", componentInstanceId: "componentInstanceId" }, outputs: { pageChange: "pageChange", widgetDiagnosticsChange: "widgetDiagnosticsChange" }, host: { listeners: { "window:resize": "onWindowResize()", "window:pointermove": "onCanvasPointerMove($event)", "window:pointerup": "onCanvasPointerUp($event)", "window:pointercancel": "onCanvasPointerCancel($event)" } }, providers: [providePraxisI18nConfig(DYNAMIC_WIDGET_PAGE_I18N_CONFIG)], viewQueries: [{ propertyName: "pageCanvasHost", first: true, predicate: ["pageCanvasHost"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
25876
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: DynamicWidgetPageComponent, isStandalone: true, selector: "praxis-dynamic-page", inputs: { page: "page", context: "context", strictValidation: "strictValidation", enableCustomization: "enableCustomization", showPageSettingsButton: "showPageSettingsButton", shellEditorComponent: "shellEditorComponent", pageEditorComponent: "pageEditorComponent", autoPersist: "autoPersist", pageIdentity: "pageIdentity", componentInstanceId: "componentInstanceId" }, outputs: { pageChange: "pageChange", widgetEvent: "widgetEvent", widgetDiagnosticsChange: "widgetDiagnosticsChange" }, host: { listeners: { "window:resize": "onWindowResize()", "window:pointermove": "onCanvasPointerMove($event)", "window:pointerup": "onCanvasPointerUp($event)", "window:pointercancel": "onCanvasPointerCancel($event)" } }, providers: [providePraxisI18nConfig(DYNAMIC_WIDGET_PAGE_I18N_CONFIG)], viewQueries: [{ propertyName: "pageCanvasHost", first: true, predicate: ["pageCanvasHost"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
25783
25877
  <div class="pdx-page-wrapper" [class.editing]="enableCustomization">
25784
25878
  @if (enableCustomization && showPageSettingsButton) {
25785
25879
  <button
@@ -26276,6 +26370,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
26276
26370
  type: Input
26277
26371
  }], pageChange: [{
26278
26372
  type: Output
26373
+ }], widgetEvent: [{
26374
+ type: Output
26279
26375
  }], widgetDiagnosticsChange: [{
26280
26376
  type: Output
26281
26377
  }], onWindowResize: [{
@@ -26314,6 +26410,7 @@ const PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA = {
26314
26410
  ],
26315
26411
  outputs: [
26316
26412
  { name: 'pageChange', type: 'WidgetPageDefinition', description: 'Emitido ao alterar a definicao da pagina.' },
26413
+ { name: 'widgetEvent', type: 'WidgetEventEnvelope', description: 'Reemite eventos dos widgets filhos com ownerWidgetKey para integracoes do host.' },
26317
26414
  { name: 'widgetDiagnosticsChange', type: 'Record<string, WidgetResolutionDiagnostic>', description: 'Emitido quando o runtime detecta widgets resolvidos ou falhos durante o carregamento dinamico.' },
26318
26415
  ],
26319
26416
  tags: ['widget', 'page', 'dynamic', 'layout'],
@@ -27250,12 +27347,18 @@ function buildBaseFormField(def) {
27250
27347
  }
27251
27348
  function applyLocalCustomizations$1(base, local) {
27252
27349
  const typeChanged = (base.controlType || '') !== (local.controlType || '');
27350
+ const serverBackedLocal = stripLocalSubmitSemantics(local);
27253
27351
  // Server authority on identity/core props
27254
27352
  const authoritative = {
27255
27353
  name: base.name,
27256
27354
  label: base.label,
27257
27355
  controlType: base.controlType,
27258
27356
  required: base.required,
27357
+ endpoint: base.endpoint,
27358
+ resourcePath: base.resourcePath,
27359
+ optionSource: base.optionSource,
27360
+ optionLabelKey: base.optionLabelKey,
27361
+ optionValueKey: base.optionValueKey,
27259
27362
  // Validators: server overrides conflicting keys; keep local extras
27260
27363
  validators: {
27261
27364
  ...local?.validators,
@@ -27278,24 +27381,32 @@ function applyLocalCustomizations$1(base, local) {
27278
27381
  ...local.materialDesign,
27279
27382
  ...base.materialDesign,
27280
27383
  },
27281
- // Options-like families: keep local if explicitly provided, otherwise server
27384
+ // Static option lists can be local UI customization. Remote option source
27385
+ // semantics are owned by the server schema for server-backed fields.
27282
27386
  options: local.options !== undefined
27283
27387
  ? local.options
27284
27388
  : base.options,
27285
- endpoint: local.endpoint !== undefined
27286
- ? local.endpoint
27287
- : base.endpoint,
27288
- queryParams: local.queryParams !== undefined
27289
- ? local.queryParams
27389
+ queryParams: serverBackedLocal.queryParams !== undefined
27390
+ ? serverBackedLocal.queryParams
27290
27391
  : base.queryParams,
27291
27392
  };
27292
27393
  return {
27293
27394
  ...base,
27294
- ...local,
27395
+ ...serverBackedLocal,
27295
27396
  ...authoritative,
27296
27397
  ...preserved,
27297
27398
  };
27298
27399
  }
27400
+ function stripLocalSubmitSemantics(field) {
27401
+ const { source, transient, submitPolicy, ...rest } = field;
27402
+ void source;
27403
+ void transient;
27404
+ void submitPolicy;
27405
+ return rest;
27406
+ }
27407
+ function isLocalField(field) {
27408
+ return field.source === 'local';
27409
+ }
27299
27410
  function reconcileFormConfig(layout, serverDefs) {
27300
27411
  const serverMetas = mapFieldDefinitionsToMetadata(serverDefs);
27301
27412
  const localMetas = (layout.fieldMetadata || []);
@@ -27313,11 +27424,13 @@ function reconcileFormConfig(layout, serverDefs) {
27313
27424
  merged.push(buildBaseFormField(serverField));
27314
27425
  }
27315
27426
  }
27316
- // Orphans: keep but hide in form
27427
+ // Orphans: preserve explicit local fields; hide legacy schema fields that no
27428
+ // longer exist on the server.
27317
27429
  for (const [name, localField] of localByName) {
27318
27430
  if (!serverByName.has(name)) {
27319
- const hidden = { ...localField, formHidden: true };
27320
- merged.push(hidden);
27431
+ merged.push(isLocalField(localField)
27432
+ ? localField
27433
+ : { ...localField, formHidden: true });
27321
27434
  }
27322
27435
  }
27323
27436
  // Preserve layout (sections/rows/columns) order, only affect fieldMetadata
package/index.d.ts CHANGED
@@ -2673,6 +2673,8 @@ interface MaterialDesignConfig {
2673
2673
  * };
2674
2674
  * ```
2675
2675
  */
2676
+ type FieldSource = 'schema' | 'local';
2677
+ type FieldSubmitPolicy = 'include' | 'omit' | 'includeWhenDirty';
2676
2678
  interface FieldMetadata extends ComponentMetadata {
2677
2679
  /** Unique field identifier (required) */
2678
2680
  name: string;
@@ -2701,6 +2703,29 @@ interface FieldMetadata extends ComponentMetadata {
2701
2703
  group?: string;
2702
2704
  /** Detailed description for tooltips */
2703
2705
  description?: string;
2706
+ /**
2707
+ * Field origin for metadata-driven forms.
2708
+ *
2709
+ * Defaults to `schema` when omitted. Use `local` for host-authored fields that
2710
+ * support the form UX but do not belong to the backend DTO/schema.
2711
+ */
2712
+ source?: FieldSource;
2713
+ /**
2714
+ * Marks a field as form-local/transient.
2715
+ *
2716
+ * Transient fields participate in validation, rules, visibility, and value
2717
+ * changes, but are omitted from submit payloads unless `submitPolicy` is
2718
+ * explicitly set to `include`.
2719
+ */
2720
+ transient?: boolean;
2721
+ /**
2722
+ * Submit behavior for the field.
2723
+ *
2724
+ * Defaults to `omit` for local/transient fields and `include` for schema
2725
+ * fields. When provided, this value has priority over `source` and
2726
+ * `transient`.
2727
+ */
2728
+ submitPolicy?: FieldSubmitPolicy;
2704
2729
  /** Field is required */
2705
2730
  required?: boolean;
2706
2731
  /** Field is disabled */
@@ -4181,6 +4206,8 @@ declare const CONFIG_STORAGE: InjectionToken<ConfigStorage>;
4181
4206
  */
4182
4207
  interface ApiConfigStorageOptions {
4183
4208
  baseUrl?: string;
4209
+ /** Optional ui_user_config scope query param, e.g. "user" for user-owned configs. */
4210
+ scope?: string;
4184
4211
  /** Factory to supply headers (tenant/user/env/updatedBy) per request. */
4185
4212
  headersFactory?: () => Record<string, string | undefined>;
4186
4213
  /** Default headers applied when the headersFactory omits them. */
@@ -4199,6 +4226,7 @@ declare class ApiConfigStorage implements AsyncConfigStorage {
4199
4226
  private readonly http;
4200
4227
  private readonly opts;
4201
4228
  private readonly baseUrl;
4229
+ private readonly scope;
4202
4230
  private readonly headersFactory;
4203
4231
  private readonly defaultHeaders;
4204
4232
  private readonly componentTypeResolver;
@@ -7330,6 +7358,7 @@ declare class CrudOperationResolutionService {
7330
7358
  private defaultScope;
7331
7359
  private defaultMethod;
7332
7360
  private normalizeResourcePath;
7361
+ private resolveSchemaResourcePath;
7333
7362
  private resolveCanonicalResourcePath;
7334
7363
  private toDiscoveryOptions;
7335
7364
  static ɵfac: i0.ɵɵFactoryDeclaration<CrudOperationResolutionService, never>;
@@ -7339,8 +7368,8 @@ declare class CrudOperationResolutionService {
7339
7368
  type AnalyticsIntent = 'ranking' | 'trend' | 'distribution' | 'composition' | 'comparison' | 'correlation';
7340
7369
  type AnalyticsSourceKind = 'praxis.stats';
7341
7370
  type AnalyticsStatsOperation = 'group-by' | 'timeseries' | 'distribution';
7342
- type AnalyticsStatsGranularity = 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';
7343
- type AnalyticsStatsMetricOperation = 'COUNT' | 'SUM' | 'AVG' | 'MIN' | 'MAX';
7371
+ type AnalyticsStatsGranularity = 'day' | 'week' | 'month';
7372
+ type AnalyticsStatsMetricOperation = 'COUNT' | 'DISTINCT_COUNT' | 'SUM' | 'AVG' | 'MIN' | 'MAX';
7344
7373
  type AnalyticsStatsOrderBy = 'KEY_ASC' | 'KEY_DESC' | 'VALUE_ASC' | 'VALUE_DESC';
7345
7374
  type AnalyticsPresentationFamily = 'chart' | 'analytic-table' | 'kpi' | 'summary-list';
7346
7375
  interface PraxisXUiAnalytics {
@@ -7916,7 +7945,7 @@ declare function providePraxisGlobalConfigBootstrap(options?: PraxisGlobalConfig
7916
7945
  declare const PRAXIS_I18N_CONFIG: InjectionToken<Partial<PraxisI18nConfig>>;
7917
7946
  declare const PRAXIS_I18N_TRANSLATOR: InjectionToken<PraxisI18nTranslator>;
7918
7947
 
7919
- declare function providePraxisI18nConfig(config: Partial<PraxisI18nConfig>): Provider;
7948
+ declare function providePraxisI18nConfig(config: Partial<PraxisI18nConfig>): Provider[];
7920
7949
  declare const providePraxisI18n: typeof providePraxisI18nConfig;
7921
7950
  declare function providePraxisI18nTranslator(translator: PraxisI18nTranslator): Provider;
7922
7951
 
@@ -9060,7 +9089,15 @@ interface ValidationError {
9060
9089
  }
9061
9090
  interface FormSubmitEvent {
9062
9091
  stage: 'before' | 'after' | 'error';
9092
+ /** Payload that will be submitted to the backend. */
9063
9093
  formData: any;
9094
+ /**
9095
+ * Full form value before submit filtering.
9096
+ *
9097
+ * Includes local/transient fields for hosts that need UI context while
9098
+ * keeping `formData` aligned with the persistence payload.
9099
+ */
9100
+ rawFormData?: any;
9064
9101
  isValid: boolean;
9065
9102
  validationErrors?: ValidationError[];
9066
9103
  entityId?: string | number;
@@ -10924,6 +10961,7 @@ type Appearance = WidgetShellConfig['appearance'];
10924
10961
  declare const BUILTIN_SHELL_PRESETS: Record<string, NonNullable<Appearance>>;
10925
10962
  declare class WidgetShellComponent implements OnChanges {
10926
10963
  private readonly i18n;
10964
+ get hostCollapsed(): boolean;
10927
10965
  shell?: WidgetShellConfig | null;
10928
10966
  context?: Record<string, any> | null;
10929
10967
  dragSurfaceEnabled: boolean;
@@ -11293,6 +11331,7 @@ declare class DynamicWidgetPageComponent implements OnChanges, OnDestroy {
11293
11331
  /** Optional instance key for pages rendered multiple times. */
11294
11332
  componentInstanceId?: string;
11295
11333
  pageChange: EventEmitter<WidgetPageDefinition>;
11334
+ widgetEvent: EventEmitter<WidgetEventEnvelope>;
11296
11335
  widgetDiagnosticsChange: EventEmitter<Record<string, WidgetResolutionDiagnostic>>;
11297
11336
  widgets: i0.WritableSignal<WidgetInstance[]>;
11298
11337
  renderedGroups: i0.WritableSignal<RenderedWidgetGroup[]>;
@@ -11466,7 +11505,7 @@ declare class DynamicWidgetPageComponent implements OnChanges, OnDestroy {
11466
11505
  private sanitizeSegment;
11467
11506
  private assertNoLegacyConnections;
11468
11507
  static ɵfac: i0.ɵɵFactoryDeclaration<DynamicWidgetPageComponent, never>;
11469
- static ɵcmp: i0.ɵɵComponentDeclaration<DynamicWidgetPageComponent, "praxis-dynamic-page", never, { "page": { "alias": "page"; "required": false; }; "context": { "alias": "context"; "required": false; }; "strictValidation": { "alias": "strictValidation"; "required": false; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; }; "showPageSettingsButton": { "alias": "showPageSettingsButton"; "required": false; }; "shellEditorComponent": { "alias": "shellEditorComponent"; "required": false; }; "pageEditorComponent": { "alias": "pageEditorComponent"; "required": false; }; "autoPersist": { "alias": "autoPersist"; "required": false; }; "pageIdentity": { "alias": "pageIdentity"; "required": false; }; "componentInstanceId": { "alias": "componentInstanceId"; "required": false; }; }, { "pageChange": "pageChange"; "widgetDiagnosticsChange": "widgetDiagnosticsChange"; }, never, never, true, never>;
11508
+ static ɵcmp: i0.ɵɵComponentDeclaration<DynamicWidgetPageComponent, "praxis-dynamic-page", never, { "page": { "alias": "page"; "required": false; }; "context": { "alias": "context"; "required": false; }; "strictValidation": { "alias": "strictValidation"; "required": false; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; }; "showPageSettingsButton": { "alias": "showPageSettingsButton"; "required": false; }; "shellEditorComponent": { "alias": "shellEditorComponent"; "required": false; }; "pageEditorComponent": { "alias": "pageEditorComponent"; "required": false; }; "autoPersist": { "alias": "autoPersist"; "required": false; }; "pageIdentity": { "alias": "pageIdentity"; "required": false; }; "componentInstanceId": { "alias": "componentInstanceId"; "required": false; }; }, { "pageChange": "pageChange"; "widgetEvent": "widgetEvent"; "widgetDiagnosticsChange": "widgetDiagnosticsChange"; }, never, never, true, never>;
11470
11509
  }
11471
11510
 
11472
11511
  /** Metadata for Praxis Dynamic Page component */
@@ -11865,4 +11904,4 @@ declare function provideFormHookPresets(presets: Array<FormHookPreset>): Provide
11865
11904
  declare function provideHookWhitelist(allowed: Array<string | RegExp>): Provider[];
11866
11905
 
11867
11906
  export { API_CONFIG_STORAGE_OPTIONS, API_URL, ASYNC_CONFIG_STORAGE, AllowedFileTypes, AnalyticsPresentationResolver, AnalyticsSchemaContractService, AnalyticsStatsRequestBuilderService, ApiConfigStorage, ApiEndpoint, BUILTIN_PAGE_LAYOUT_PRESETS, BUILTIN_PAGE_THEME_PRESETS, BUILTIN_SHELL_PRESETS, CONFIG_STORAGE, CONNECTION_STORAGE, ComponentKeyService, ComponentMetadataRegistry, CompositionRuntimeFacade, ConsoleLoggerSink, CrudOperationResolutionService, DEFAULT_FIELD_SELECTOR_CONTROL_TYPE_MAP, DEFAULT_JSON_LOGIC_OPERATORS, DEFAULT_TABLE_CONFIG, DYNAMIC_PAGE_AI_CAPABILITIES, DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK, DYNAMIC_PAGE_CONFIG_EDITOR, DYNAMIC_PAGE_SHELL_EDITOR, DefaultLoadingRenderer, DeferredAsyncConfigStorage, DynamicFormService, DynamicWidgetLoaderDirective, DynamicWidgetPageComponent, EDITORIAL_ALLOWED_CONTENT_FORMATS, EDITORIAL_COMPLIANCE_PRESETS, EDITORIAL_EXTERNAL_LINK_REL, EDITORIAL_FORM_TEMPLATE_CATALOG, EDITORIAL_HTML_ENABLED, EDITORIAL_MARKDOWN_IMAGES_ENABLED, EDITORIAL_SOLUTION_CATALOG, EDITORIAL_SOLUTION_PRESETS, EDITORIAL_THEME_PRESETS, EDITORIAL_WIDGET_CONVENTION_INPUTS, EDITORIAL_WIDGET_TAG, EMPLOYEE_ONBOARDING_EDITORIAL_SOLUTION, EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE, EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_SOLUTION, EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_TEMPLATE, EVENT_REGISTRATION_EDITORIAL_SOLUTION, EVENT_REGISTRATION_EDITORIAL_TEMPLATE, EmptyStateCardComponent, ErrorMessageService, FIELD_METADATA_CAPABILITIES, FIELD_SELECTOR_REGISTRY_BASE, FIELD_SELECTOR_REGISTRY_DISABLE_DEFAULTS, FIELD_SELECTOR_REGISTRY_OVERRIDES, FORM_HOOKS, FORM_HOOKS_PRESETS, FORM_HOOKS_WHITELIST, FORM_HOOK_RESOLVERS, FieldControlType, FieldDataType, FieldSelectorRegistry, FormHooksRegistry, GLOBAL_ACTION_CATALOG$1 as GLOBAL_ACTION_CATALOG, GLOBAL_ACTION_HANDLERS, GLOBAL_ACTION_CATALOG as GLOBAL_ACTION_SPEC_CATALOG, GLOBAL_ACTION_UI_SCHEMAS, GLOBAL_ANALYTICS_SERVICE, GLOBAL_API_CLIENT, GLOBAL_CONFIG, GLOBAL_DIALOG_SERVICE, GLOBAL_ROUTE_GUARD_RESOLVER, GLOBAL_SURFACE_SERVICE, GLOBAL_TOAST_SERVICE, GenericCrudService, GlobalActionService, GlobalConfigService, INLINE_FILTER_ALIAS_TOKENS, INLINE_FILTER_CONTROL_TYPES, INLINE_FILTER_CONTROL_TYPE_SET, INLINE_FILTER_CONTROL_TYPE_VALUES, INLINE_FILTER_TOKEN_TO_BASE_CONTROL_TYPE, INLINE_FILTER_TOKEN_TO_CONTROL_TYPE, IconPickerService, IconPosition, IconSize, LOGGER_LEVEL_BY_ENV, LOGGER_LEVEL_PRIORITY, LoadingOrchestrator, LocalConnectionStorage, LocalStorageAsyncAdapter, LocalStorageCacheAdapter, LocalStorageConfigService, LoggerService, LoggerThrottleTracker, LoggerWarnOnceTracker, MemoryCacheAdapter, NumericFormat, OVERLAY_DECIDER_DEBUG, OVERLAY_DECISION_MATRIX, ObservabilityDashboardService, OverlayDeciderService, PRAXIS_CORPORATE_SENSITIVE_KEYS, PRAXIS_DEFAULT_OBSERVABILITY_ALERT_RULES, PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA, PRAXIS_FOOTER_LINKS_METADATA, PRAXIS_GLOBAL_ACTION_CATALOG, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_OPTIONS, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_READY, PRAXIS_GLOBAL_CONFIG_TENANT_RESOLVER, PRAXIS_HERO_BANNER_METADATA, PRAXIS_I18N_CONFIG, PRAXIS_I18N_TRANSLATOR, PRAXIS_JSON_LOGIC_OPERATORS, PRAXIS_LAYER_SCALE_DEFAULTS, PRAXIS_LAYER_SCALE_VARS, PRAXIS_LEGAL_NOTICE_METADATA, PRAXIS_LOADING_CTX, PRAXIS_LOADING_RENDERER, PRAXIS_LOGGER_CONFIG, PRAXIS_LOGGER_SINKS, PRAXIS_OBSERVABILITY_DASHBOARD_OPTIONS, PRAXIS_RICH_TEXT_BLOCK_METADATA, PRAXIS_TELEMETRY_TRANSPORT, PRAXIS_USER_CONTEXT_SUMMARY_METADATA, PRIVACY_CONSENT_EDITORIAL_SOLUTION, PRIVACY_CONSENT_EDITORIAL_TEMPLATE, PraxisCore, PraxisFooterLinksComponent, PraxisGlobalErrorHandler, PraxisHeroBannerComponent, PraxisI18nService, PraxisIconDirective, PraxisIconPickerComponent, PraxisJsonLogicError, PraxisJsonLogicService, PraxisLayerScaleStyleService, PraxisLegalNoticeComponent, PraxisLoadingInterceptor, PraxisRichTextBlockComponent, PraxisSurfaceHostComponent, PraxisUserContextSummaryComponent, RESOURCE_DISCOVERY_I18N_CONFIG, RESOURCE_DISCOVERY_I18N_NAMESPACE, RULE_PROPERTY_SCHEMA, RemoteConfigStorage, ResourceActionOpenAdapterService, ResourceDiscoveryService, ResourceQuickConnectComponent, ResourceSurfaceOpenAdapterService, SCHEMA_VIEWER_CONTEXT, SETTINGS_PANEL_BRIDGE, SETTINGS_PANEL_DATA, STEPPER_CONFIG_EDITOR, SURFACE_DRAWER_BRIDGE, SURFACE_OPEN_I18N_CONFIG, SURFACE_OPEN_I18N_NAMESPACE, SURFACE_OPEN_PRESETS, SchemaMetadataClient, SchemaNormalizerService, SchemaViewerComponent, SurfaceBindingRuntimeService, SurfaceOpenActionEditorComponent, TABLE_CONFIG_EDITOR, TableConfigService, TelemetryLoggerSink, TelemetryService, ValidationPattern, WidgetPageStateRuntimeService, WidgetShellComponent, applyLocalCustomizations$1 as applyLocalCustomizations, applyLocalCustomizations as applyLocalFormCustomizations, buildAngularValidators, buildApiUrl, buildBaseColumnFromDef, buildBaseFormField, buildFormConfigFromEditorialTemplate, buildHeaders, buildPageKey, buildPraxisLayerScaleCss, buildSchemaId, buildValidatorsFromValidatorOptions, cancelIfCpfInvalidHook, clampRange, cloneTableConfig, cnpjAlphaValidator, collapseWhitespace, composeHeadersWithVersion, conditionalAsyncValidator, convertFormLayoutToConfig, createCorporateLoggerConfig, createCorporateObservabilityOptions, createCpfCnpjValidator, createDefaultFormConfig, createDefaultTableConfig, createEmptyFormConfig, createEmptyRichContentDocument, createPersistedPage, customAsyncValidatorFn, customValidatorFn, debounceAsyncValidator, deepMerge, ensureIds, ensureNoConflictsHookFactory, ensurePageIds, extractNormalizedError, fetchWithETag, fileTypeValidator, fillUndefined, generateId, getDefaultFormHints, getEditorialCompliancePresetById, getEditorialFormTemplateById, getEditorialFormTemplateCatalog, getEditorialSolutionById, getEditorialSolutionCatalog, getEditorialSolutionPresetById, getEditorialThemePresetById, getEssentialConfig, getFieldMetadataCapabilities, getGlobalActionCatalog, getGlobalActionUiSchema, getReferencedFieldMetadata, getTextTransformer, interpolatePraxisTranslation, isAllowedEditorialContentFormat, isAllowedEditorialHref, isCssTextTransform, isEditorialComponentMeta, isInlineFilterControlType, isRangeValidForFilter, isTableConfigV2, isValidFormConfig, isValidTableConfig, legacyCnpjValidator, legacyCpfValidator, logOnErrorHook, mapFieldDefinitionToMetadata, mapFieldDefinitionsToMetadata, matchFieldValidator, maxFileSizeValidator, mergeFieldMetadata, mergePraxisI18nConfigs, mergeTableConfigs, migrateFormLayoutRule, migrateLegacyCompositionLink, migrateLegacyCompositionLinks, minWordsValidator, normalizeControlTypeKey, normalizeControlTypeToken, normalizeEditorialLink, normalizeEnd, normalizeFieldConstraints, normalizeFormConfig, normalizeFormMetadata, normalizePath, normalizePraxisDataQueryContext, normalizeResourceAvailabilityReasonCode, normalizeStart, normalizeUnknownError, notifySuccessHook, parseJsonResponseOrEmpty, praxisLoadingInterceptorFn, prefillFromContextHook, provideDefaultFormHooks, provideFieldSelectorRegistryBase, provideFieldSelectorRegistryOverride, provideFieldSelectorRegistryRuntime, provideFormHookPresets, provideFormHooks, provideGlobalActionCatalog, provideGlobalActionHandler, provideGlobalConfig, provideGlobalConfigReady, provideGlobalConfigSeed, provideGlobalConfigTenant, provideHookResolvers, provideHookWhitelist, provideOverlayDecisionMatrix, providePraxisAnalyticsGlobalActions, providePraxisDynamicPageMetadata, providePraxisFooterLinksMetadata, providePraxisGlobalActionCatalog, providePraxisGlobalActions, providePraxisGlobalConfigBootstrap, providePraxisHeroBannerMetadata, providePraxisHttpLoading, providePraxisI18n, providePraxisI18nConfig, providePraxisI18nTranslator, providePraxisIconDefaults, providePraxisJsonLogicOperator, providePraxisJsonLogicOperatorOverride, providePraxisLegalNoticeMetadata, providePraxisLoadingDefaults, providePraxisLogging, providePraxisRichTextBlockMetadata, providePraxisToastGlobalActions, providePraxisUserContextSummaryMetadata, provideRemoteGlobalConfig, reconcileFilterConfig, reconcileFormConfig, reconcileTableConfig, removeDiacritics, reportTelemetryHookFactory, requiredCheckedValidator, resolveBuiltinPresets, resolveControlTypeAlias, resolveDefaultValuePresentationFormat, resolveHidden, resolveInlineFilterControlType, resolveInlineFilterControlTypeToBaseControlType, resolveLoggerConfig, resolveObservabilityOptions, resolveOffset, resolveOrder, resolvePraxisFilterCriteria, resolveResourceAvailabilityReasonKey, resolveSpan, resolveValuePresentation, resolveValuePresentationLocale, slugify, stripMasksHook, supportsImplicitValuePresentation, syncWithServerMetadata, toCamel, toCapitalize, toKebab, toPascal, toSentenceCase, toSnake, toTitleCase, translateResourceAvailabilityReason, translateResourceDiscoveryText, translateUnavailableWorkflowMessage, trim, uniqueAsyncValidator, urlValidator, withMessage, withPraxisHttpLoading };
11868
- export type { AccessibilityConfig, ActionDefinition, ActionMessagesConfig, AiCapability, AiCapabilityCatalog, AiCapabilityCategory, AiCapabilityCategoryMap, AiConcept, AiConceptPack, AiValueKind, AnalyticsIntent, AnalyticsPresentationDecision, AnalyticsPresentationFamily, AnalyticsPresentationResolverOptions, AnalyticsSchemaContractRequest, AnalyticsSourceKind, AnalyticsStatsGranularity, AnalyticsStatsMetricOperation, AnalyticsStatsOperation, AnalyticsStatsOrderBy, AnimationConfig, AnnouncementConfig, ApiConfigStorageOptions, ApiUrlConfig, ApiUrlEntry, AsyncConfigStorage, BackConfig, BaseMaterialInputMetadata, BatchDeleteOptions, BatchDeleteProgress, BatchDeleteResult, BorderConfig, Breakpoint, BuiltValidators, BulkAction, BulkActionsConfig, CacheAdapter, CacheConfig, CacheEntry, Capability$1 as Capability, CapabilityCatalog$1 as CapabilityCatalog, CapabilityCategory$1 as CapabilityCategory, ColorConfig, ColumnAlign, ColumnDefinition, ColumnHidden, ColumnOffset, ColumnOrder, ColumnSpan, ComponentActionParam, ComponentContextAction, ComponentContextOption, ComponentContextOptionMode, ComponentContextOptionsByPathEntry, ComponentContextPack, ComponentDocMeta, ComponentEditorialResolveOptions, ComponentKeyParams, ComponentMergePatch, ComponentMetadata, ComponentMetadataEditorialBindingDescriptor, ComponentMetadataEditorialDescriptor, ComponentPortEndpointRef, CompositionLink, CompositionRuntimeFacadeOptions, ConditionalValidationRule, ConfigMetadata, ConfigStorage, ConfirmationConfig, ConnectionConfigV1, ConnectionStorage, ContextAction, ContextActionsConfig, BackConfig as CoreBackConfig, CoreFieldMetadata, CorePresetDescriptor, CorePresetDiscoveryRegistry, CorePresetKind, CorePresetRef, CrudConfigureOptions, CrudOperationOptions, CrudOperationResolutionContext, CsvExportConfig, CurrencyLocaleConfig, CursorPage, CursorRequest, CustomizationLog, DataConfig, DataTransformation, DataValidationConfig, DateRangePreset, DateRangeValue, DateTimeLocaleConfig, DebounceConfig, DeviceKind, DiagnosticPhase, DiagnosticRecord, DiagnosticSeverity, DiagnosticSource, DiagnosticSubjectKind, DiagnosticSubjectRef, DraggingConfig, Capability as DynamicPageCapability, CapabilityCatalog as DynamicPageCapabilityCatalog, CapabilityCategory as DynamicPageCapabilityCategory, ValueKind as DynamicPageValueKind, EditorialBlock, EditorialBlockBase, EditorialBlockKind, EditorialBlockOverride, EditorialBlockSurface, EditorialBlockTone, EditorialBlockVisibilityRule, EditorialCompliancePreset, EditorialComponentDocMeta, EditorialConnectorStyle, EditorialContentFormat, EditorialContextFieldContract, EditorialContextSummaryBlock, EditorialCustomWidgetBlock, EditorialDataCollectionBlock, EditorialDensity, EditorialFaqAccordionBlock, EditorialFaqItem, EditorialFormCompliancePreset, EditorialFormShellPreset, EditorialFormTemplate, EditorialFormTemplateBuildOptions, EditorialFormTemplateContextField, EditorialFormTemplateDefaults, EditorialFormTemplateLayoutPreset, EditorialFormTemplateMetadata, EditorialFormTemplateReference, EditorialHeroBlock, EditorialIconSpec, EditorialInfoCardItem, EditorialInfoCardsBlock, EditorialIntroHeroBlock, EditorialIntroHeroHighlightItem, EditorialJourney, EditorialJourneyOverride, EditorialJourneyStep, EditorialLayoutConfig, EditorialLayoutSpacing, EditorialLinkDefinition, EditorialLinkItem, EditorialMetaItem, EditorialMotionConfig, EditorialOrientation, EditorialPolicyItem, EditorialPolicyListBlock, EditorialPresentationShellVariant, EditorialPresentationalAction, EditorialPresentationalVisibilityRule, EditorialProblemType, EditorialResponsiveLayoutConfig, EditorialReviewField, EditorialReviewSection, EditorialReviewSectionField, EditorialReviewSectionsBlock, EditorialReviewSummaryBlock, EditorialRichTextBlock, EditorialSelectionCardItem, EditorialSelectionCardsBlock, EditorialShellVariant, EditorialSolutionDefinition, EditorialSolutionPreset, EditorialStepKind, EditorialStepVisualConfig, EditorialStepVisualVariant, EditorialStepperConfig, EditorialStepperVariant, EditorialSuccessPanelBlock, EditorialSurfaceVariant, EditorialTemplateInstance, EditorialTemplateInstanceOverrides, EditorialTemplateRef, EditorialTemplateSource, EditorialThemeBorderWidthTokens, EditorialThemeColorTokens, EditorialThemePreset, EditorialThemeRadiusTokens, EditorialThemeShadowTokens, EditorialThemeTokens, EditorialThemeTypographyTokens, EditorialTimelineStep, EditorialTimelineStepsBlock, EditorialWidgetAppearance, EditorialWidgetDefinition, EditorialWidgetInputs, EditorialWizardPresentation, ElevationConfig, EmptyAction, EmptyStateConfig, EndpointConfig, EndpointRef, EnhancedValidationConfig, ExcelExportConfig, ExcelStylingConfig, ExplicitCrudResolutionContract, ExportConfig, ExportFormat, ExportMessagesConfig, ExportTemplate, FetchWithEtagParams, FetchWithEtagResult, FieldConflict, FieldDefinition, FieldMetadata, FieldModification, FieldOption, FieldSelectorRegistryMap, FieldsetLayout, FilterOptions, FilteringConfig, FooterLinksAppearance, FooterLinksLayout, FormActionButton, FormActionConfirmationEvent, FormActionsLayout, FormApiLayout, FormBehaviorLayout, FormColumn, FormConfig, FormConfigMetadata, FormConfigState, FormCustomActionEvent, FormEntityEvent, FormHook, FormHookContext, FormHookDeclaration, FormHookDeclarationLite, FormHookOutcome, FormHookPreset, FormHookPresetMatch, FormHookStage, FormHookStatus, FormHooksLayout, FormInitializationError, FormLayout, FormLayoutRule, FormMessagesLayout, FormMetadataLayout, FormModeHints, FormOpenMode, FormReadyEvent, FormRow, FormRowLayout, FormRuleTargetType, FormSection, FormSectionHeaderAction, FormSectionHeaderConfig, FormSectionHeaderEmptyState, FormSectionHeaderMode, FormSectionHeaderSize, FormSubmitEvent, FormValidationEvent, FormValueChangeEvent, FormattingLocaleConfig, GeneralExportConfig, GetSchemaParams, GlobalActionCatalogEntry, GlobalActionContext, GlobalActionField, GlobalActionFieldOption, GlobalActionFieldType, GlobalActionHandler, GlobalActionHandlerEntry, GlobalActionId, GlobalActionParam, GlobalActionResult, GlobalActionSpec, GlobalActionUiSchema, GlobalAiConfig, GlobalAiEmbeddingConfig, GlobalAiProvider, GlobalAnalyticsService, GlobalApiClient, GlobalCacheConfig, GlobalConfig, GlobalCrudActionDefaults, GlobalCrudConfig, GlobalCrudDefaults, GlobalDialogAction, GlobalDialogAnimation, GlobalDialogAriaRole, GlobalDialogConfig, GlobalDialogConfigEntry, GlobalDialogPosition, GlobalDialogService, GlobalDialogStyles, GlobalDynamicFieldsAsyncSelectConfig, GlobalDynamicFieldsCascadeConfig, GlobalDynamicFieldsConfig, GlobalI18nConfig, GlobalRouteGuardResolver, GlobalSurfaceService, GlobalTableConfig, GlobalToastService, HateoasLink, HeroBadge, HeroBadgeTone, HeroBannerAppearance, HeroBannerVariant, HeroMetaItem, HookResolver, InlineFilterControlType, InlineMonthRangeMetadata, InlinePeriodRangeFiscalCalendar, InlinePeriodRangeGranularity, InlinePeriodRangeMetadata, InlinePeriodRangePreset, InlineRangeDistributionBin, InlineRangeDistributionConfig, InlineYearRangeMetadata, InteractionConfig, JsonExportConfig, JsonLogicArguments, JsonLogicArray, JsonLogicDataRecord, JsonLogicDerivedValueExpression, JsonLogicExpression, JsonLogicOperationExpression, JsonLogicPrimitive, JsonLogicRecord, JsonLogicValue, JsonLogicVarExpression, JsonLogicVarReference, KeyboardAccessibilityConfig, LazyLoadingConfig, LegacyCompositionLinkInput, LegacyLinkCondition, LegacyLinkMetaPolicy, LegacyTableConfig, LegalNoticeAppearance, LegalNoticeSeverity, LinkIntent, LinkMetadata, LinkPolicy, LoadingConfig, LoadingContext, LoadingPhase$1 as LoadingPhase, LoadingScope, LoadingState, LoadingPhase as LoadingStatePhase, LocalizationConfig, LocateRequest, LoggerConfig, LoggerContext, LoggerEvent, LoggerLevel, LoggerLogOptions, LoggerNormalizedError, LoggerPIIConfig, LoggerSink, LoggerTelemetryPayload, LoggerThrottleConfig, MarginConfig, MaterialAutocompleteMetadata, MaterialButtonMetadata, MaterialButtonToggleMetadata, MaterialCheckboxMetadata, MaterialChipsMetadata, MaterialColorInputMetadata, MaterialColorPickerMetadata, MaterialCpfCnpjMetadata, MaterialCurrencyMetadata, MaterialDateInputMetadata, MaterialDateRangeMetadata, MaterialDatepickerMetadata, MaterialDatetimeLocalInputMetadata, MaterialDesignConfig, MaterialEmailInputMetadata, MaterialEmailMetadata, MaterialInputMetadata, MaterialMonthInputMetadata, MaterialMultiSelectTreeMetadata, MaterialNumericMetadata, MaterialPasswordMetadata, MaterialPhoneMetadata, MaterialPriceRangeMetadata, MaterialRadioMetadata, MaterialRangeSliderMetadata, MaterialRatingMetadata, MaterialSearchInputMetadata, MaterialSelectMetadata, MaterialSelectionListMetadata, MaterialSliderMetadata, MaterialTextareaMetadata, MaterialTimeInputMetadata, MaterialTimeRangeMetadata, MaterialTimeTrackShift, MaterialTimepickerMetadata, MaterialToggleMetadata, MaterialTransferListMetadata, MaterialTreeNode, MaterialTreeSelectMetadata, MaterialUrlInputMetadata, MaterialWeekInputMetadata, MaterialYearInputMetadata, MemoryConfig, MessageTemplate, MessagesConfig, NestedFieldsetLayout, NormalizedError, NumberLocaleConfig, ObservabilityAlert, ObservabilityAlertGroupBy, ObservabilityAlertRule, ObservabilityAlertSeverity, ObservabilityCountBucket, ObservabilityDashboardOptions, ObservabilityIngestInput, ObservabilityMetricsSnapshot, OptionDTO, OptionSourceMetadata, OptionSourceRequestOptions, OverlayDecider, OverlayDecision, OverlayDecisionContext, OverlayDecisionMatrix, OverlayPattern, OverlayRange, OverlayRule, OverlayRuleMatch, OverlayThresholds, Page, PageIdentity, PageableRequest, PaginationConfig, PartialFieldMetadata, PdfExportConfig, PerformanceConfig, PersistedPageConfig, PersistedPageDefinitionWithIds, PersistedWidgetInstance, PlainObject, PluginConfig, PollingConfig, PortCardinality, PortCompatibilityRuleSet, PortContract, PortDirection, PortExposure, PortSchemaKind, PortSchemaMode, PortSchemaRef, PortSemanticKind, PraxisAnalyticsBindings, PraxisAnalyticsDefaults, PraxisAnalyticsDimensionBinding, PraxisAnalyticsDistributionStatsRequest, PraxisAnalyticsExecutionMetric, PraxisAnalyticsGroupByStatsRequest, PraxisAnalyticsInteractions, PraxisAnalyticsMetricBinding, PraxisAnalyticsOptions, PraxisAnalyticsPresentationHints, PraxisAnalyticsProjection, PraxisAnalyticsSortRule, PraxisAnalyticsSource, PraxisAnalyticsStatsExecutionPlan, PraxisAnalyticsStatsMetricRequest, PraxisAnalyticsStatsRequest, PraxisAnalyticsTimeSeriesStatsRequest, PraxisAuthContext, PraxisBuiltinCustomRuleOperator, PraxisConditionalRule, PraxisConditionalRuleMatchInput, PraxisCustomRuleOperator, PraxisDataQueryContext, PraxisGlobalActionsOptions, PraxisGlobalConfigBootstrapOptions, PraxisHostRuleOperator, PraxisHttpLoadingOptions, PraxisI18nConfig, PraxisI18nDictionary, PraxisI18nMessageDescriptor, PraxisI18nNamespaceConfig, PraxisI18nNamespaceDictionary, PraxisI18nTranslator, PraxisIconDefaultsOptions, PraxisJsonLogicEvaluationContext, PraxisJsonLogicEvaluationOptions, PraxisJsonLogicEvaluationResult, PraxisJsonLogicIssueCode, PraxisJsonLogicOperatorDefinition, PraxisJsonLogicOperatorDescriptor, PraxisJsonLogicOperatorHelpers, PraxisJsonLogicOperatorMetadata, PraxisJsonLogicOperatorPurity, PraxisJsonLogicOperatorReturnType, PraxisJsonLogicOperatorSource, PraxisJsonLogicRuntimeValue, PraxisJsonLogicValidationIssue, PraxisJsonLogicValidationOptions, PraxisJsonLogicValidationResult, PraxisLayerScale, PraxisLoadingRenderer, PraxisLocale, PraxisLoggingEnvironment, PraxisLoggingOptions, PraxisNativeJsonLogicOperator, PraxisRuleContextDescriptor, PraxisRuleOperator, PraxisTextValue, PraxisToastOptions, PraxisTranslationParams, PraxisXUiAnalytics, PriceRangeValue, RangeSliderInlineTexts, RangeSliderQuickPreset, RangeSliderQuickPresetLabels, RangeSliderValue, RenderingConfig, ResizingConfig, ResolveCrudOperationRequest, ResolvePresetOptions, ResolvedComponentMetadataEditorialBinding, ResolvedComponentMetadataEditorialMeta, ResolvedCrudOperation, ResolvedCrudOperationSource, ResolvedValuePresentation, ResourceActionCatalogItem, ResourceActionCatalogResponse, ResourceActionOpenAdapterOptions, ResourceActionScope, ResourceAvailabilityDecision, ResourceCapabilityOperation, ResourceCapabilitySnapshot, ResourceCrudOperationId, ResourceDiscoveryRel, ResourceDiscoveryRequestOptions, ResourceLinkSource, ResourceSurfaceCatalogItem, ResourceSurfaceCatalogResponse, ResourceSurfaceKind, ResourceSurfaceOpenAdapterOptions, ResourceSurfaceScope, ResponsiveConfig, RestApiLinks, RestApiResponse, RichAvatarNode, RichBadgeNode, RichBlockBaseNode, RichBlockContextConfig, RichBlockContextScope, RichBlockHostCapabilities, RichBlockNode, RichBlockRuleSet, RichCardNode, RichComposeNode, RichContentDocument, RichIconNode, RichImageNode, RichMediaBlockNode, RichMetricNode, RichPresenterNode, RichPresetReferenceNode, RichPrimitiveNode, RichProgressNode, RichTextAppearance, RichTextNode, RichTextVariant, RichTimelineItem, RichTimelineNode, RowAction, RowActionsConfig, RuleContextRoot, RulePropertyDefinition, RulePropertySchema, RulePropertyType, RunHooksResult, RuntimeLinkSnapshot, RuntimeLinkStatus, RuntimePayloadSummary, RuntimeSnapshot, RuntimeSnapshotStatus, RuntimeStateSnapshot, RuntimeTraceEntry, RuntimeTracePhase, SchemaIdParams, SchemaMetaInfo, SchemaViewerContext, SelectionConfig, SerializableFieldMetadata, SettingsPanelBridge, SettingsPanelOpenContent, SettingsPanelOpenOptions, SettingsPanelRef, SettingsValueProvider, SortingConfig, SpacingConfig, StateEndpointRef, StateMessagesConfig, SurfaceBinding, SurfaceBindingMode, SurfaceDrawerBridge, SurfaceDrawerOpenContent, SurfaceDrawerOpenOptions, SurfaceDrawerRef, SurfaceDrawerResult, SurfaceDrawerWidthPreset, SurfaceOpenPayload, SurfaceOpenPreset, SurfacePresentation, SurfaceSizeConfig, SyncConfig, SyncResult, TableActionsConfig, TableAppearanceConfig, TableBehaviorConfig, TableConfig, TableConfigV2 as TableConfigModern, TableConfigState, TableConfigV2, TableDetailActionBarAction, TableDetailActionBarNode, TableDetailActionNode, TableDetailAllowedNode, TableDetailBaseNode, TableDetailCardGridCardNode, TableDetailCardGridNode, TableDetailCardNode, TableDetailDiagramEmbedNode, TableDetailEmbedAction, TableDetailEmbedBaseNode, TableDetailInlineSchemaDocument, TableDetailLayoutNode, TableDetailListItemAction, TableDetailListItemContextConfig, TableDetailListItemSchema, TableDetailListNode, TableDetailMediaBlockNode, TableDetailRefNode, TableDetailRichListNode, TableDetailRichTextNode, TableDetailSchemaNode, TableDetailTabNode, TableDetailTabsNode, TableDetailTemplateRefNode, TableDetailTimelineItemSchema, TableDetailTimelineNode, TableDetailTimelineStaticItem, TableDetailValueNode, TableExpansionConfig, TableLocalDataModeConfig, TelemetryEvent, TelemetryLoggerSinkOptions, TelemetryTransport, TextTransformApply, TextTransformName, ThemeConfig, ToolbarAction, ToolbarConfig, ToolbarFilterConfig, ToolbarLayoutConfig, ToolbarSettingsConfig, TransformBinding, TransformBindingSource, TransformCatalogCategory, TransformCatalogEntry, TransformKind, TransformLegacyReplacement, TransformOutputHint, TransformPhase, TransformPipeline, TransformSemanticKind, TransformStep, TypographyConfig, UserContextSource, UserContextSummaryAppearance, UserContextSummaryField, ValidationContext, ValidationError, ValidationMessagesConfig, ValidationResult, ValidationRule, ValidatorFunction, ValidatorOptions, ValueKind$1 as ValueKind, ValuePresentationConfig, ValuePresentationResolutionContext, ValuePresentationStyle, ValuePresentationType, VirtualizationConfig, WidgetDefinition, WidgetDerivedStateNode, WidgetEventEnvelope, WidgetEventPathSegment, WidgetInstance, WidgetPageCanvasCollisionPolicy, WidgetPageCanvasConstraints, WidgetPageCanvasItem, WidgetPageCanvasItemOverride, WidgetPageCanvasLayout, WidgetPageCanvasLayoutVariant, WidgetPageCompositionDefinition, WidgetPageDefinition, WidgetPageDeviceKind, WidgetPageDeviceLayouts, WidgetPageDevicePolicy, WidgetPageGroupingDefinition, WidgetPageGroupingOverride, WidgetPageGroupingTabDefinition, WidgetPageLayout, WidgetPageLayoutPresetDefinition, WidgetPageLayoutVariant, WidgetPageOrientation, WidgetPageSlotAssignments, WidgetPageSlotDefinition, WidgetPageStateDefinition, WidgetPageStateInput, WidgetPageStateRuntimeSnapshot, WidgetPageThemePresetDefinition, WidgetPageWidgetLayoutOverride, WidgetPageWidgetSuggestion, WidgetResolutionDiagnostic, WidgetResolutionPhase, WidgetShellAction, WidgetShellActionEvent, WidgetShellActionPlacement, WidgetShellBodyLayout, WidgetShellConfig, WidgetShellWindowActions, WidgetStateNode };
11907
+ export type { AccessibilityConfig, ActionDefinition, ActionMessagesConfig, AiCapability, AiCapabilityCatalog, AiCapabilityCategory, AiCapabilityCategoryMap, AiConcept, AiConceptPack, AiValueKind, AnalyticsIntent, AnalyticsPresentationDecision, AnalyticsPresentationFamily, AnalyticsPresentationResolverOptions, AnalyticsSchemaContractRequest, AnalyticsSourceKind, AnalyticsStatsGranularity, AnalyticsStatsMetricOperation, AnalyticsStatsOperation, AnalyticsStatsOrderBy, AnimationConfig, AnnouncementConfig, ApiConfigStorageOptions, ApiUrlConfig, ApiUrlEntry, AsyncConfigStorage, BackConfig, BaseMaterialInputMetadata, BatchDeleteOptions, BatchDeleteProgress, BatchDeleteResult, BorderConfig, Breakpoint, BuiltValidators, BulkAction, BulkActionsConfig, CacheAdapter, CacheConfig, CacheEntry, Capability$1 as Capability, CapabilityCatalog$1 as CapabilityCatalog, CapabilityCategory$1 as CapabilityCategory, ColorConfig, ColumnAlign, ColumnDefinition, ColumnHidden, ColumnOffset, ColumnOrder, ColumnSpan, ComponentActionParam, ComponentContextAction, ComponentContextOption, ComponentContextOptionMode, ComponentContextOptionsByPathEntry, ComponentContextPack, ComponentDocMeta, ComponentEditorialResolveOptions, ComponentKeyParams, ComponentMergePatch, ComponentMetadata, ComponentMetadataEditorialBindingDescriptor, ComponentMetadataEditorialDescriptor, ComponentPortEndpointRef, CompositionLink, CompositionRuntimeFacadeOptions, ConditionalValidationRule, ConfigMetadata, ConfigStorage, ConfirmationConfig, ConnectionConfigV1, ConnectionStorage, ContextAction, ContextActionsConfig, BackConfig as CoreBackConfig, CoreFieldMetadata, CorePresetDescriptor, CorePresetDiscoveryRegistry, CorePresetKind, CorePresetRef, CrudConfigureOptions, CrudOperationOptions, CrudOperationResolutionContext, CsvExportConfig, CurrencyLocaleConfig, CursorPage, CursorRequest, CustomizationLog, DataConfig, DataTransformation, DataValidationConfig, DateRangePreset, DateRangeValue, DateTimeLocaleConfig, DebounceConfig, DeviceKind, DiagnosticPhase, DiagnosticRecord, DiagnosticSeverity, DiagnosticSource, DiagnosticSubjectKind, DiagnosticSubjectRef, DraggingConfig, Capability as DynamicPageCapability, CapabilityCatalog as DynamicPageCapabilityCatalog, CapabilityCategory as DynamicPageCapabilityCategory, ValueKind as DynamicPageValueKind, EditorialBlock, EditorialBlockBase, EditorialBlockKind, EditorialBlockOverride, EditorialBlockSurface, EditorialBlockTone, EditorialBlockVisibilityRule, EditorialCompliancePreset, EditorialComponentDocMeta, EditorialConnectorStyle, EditorialContentFormat, EditorialContextFieldContract, EditorialContextSummaryBlock, EditorialCustomWidgetBlock, EditorialDataCollectionBlock, EditorialDensity, EditorialFaqAccordionBlock, EditorialFaqItem, EditorialFormCompliancePreset, EditorialFormShellPreset, EditorialFormTemplate, EditorialFormTemplateBuildOptions, EditorialFormTemplateContextField, EditorialFormTemplateDefaults, EditorialFormTemplateLayoutPreset, EditorialFormTemplateMetadata, EditorialFormTemplateReference, EditorialHeroBlock, EditorialIconSpec, EditorialInfoCardItem, EditorialInfoCardsBlock, EditorialIntroHeroBlock, EditorialIntroHeroHighlightItem, EditorialJourney, EditorialJourneyOverride, EditorialJourneyStep, EditorialLayoutConfig, EditorialLayoutSpacing, EditorialLinkDefinition, EditorialLinkItem, EditorialMetaItem, EditorialMotionConfig, EditorialOrientation, EditorialPolicyItem, EditorialPolicyListBlock, EditorialPresentationShellVariant, EditorialPresentationalAction, EditorialPresentationalVisibilityRule, EditorialProblemType, EditorialResponsiveLayoutConfig, EditorialReviewField, EditorialReviewSection, EditorialReviewSectionField, EditorialReviewSectionsBlock, EditorialReviewSummaryBlock, EditorialRichTextBlock, EditorialSelectionCardItem, EditorialSelectionCardsBlock, EditorialShellVariant, EditorialSolutionDefinition, EditorialSolutionPreset, EditorialStepKind, EditorialStepVisualConfig, EditorialStepVisualVariant, EditorialStepperConfig, EditorialStepperVariant, EditorialSuccessPanelBlock, EditorialSurfaceVariant, EditorialTemplateInstance, EditorialTemplateInstanceOverrides, EditorialTemplateRef, EditorialTemplateSource, EditorialThemeBorderWidthTokens, EditorialThemeColorTokens, EditorialThemePreset, EditorialThemeRadiusTokens, EditorialThemeShadowTokens, EditorialThemeTokens, EditorialThemeTypographyTokens, EditorialTimelineStep, EditorialTimelineStepsBlock, EditorialWidgetAppearance, EditorialWidgetDefinition, EditorialWidgetInputs, EditorialWizardPresentation, ElevationConfig, EmptyAction, EmptyStateConfig, EndpointConfig, EndpointRef, EnhancedValidationConfig, ExcelExportConfig, ExcelStylingConfig, ExplicitCrudResolutionContract, ExportConfig, ExportFormat, ExportMessagesConfig, ExportTemplate, FetchWithEtagParams, FetchWithEtagResult, FieldConflict, FieldDefinition, FieldMetadata, FieldModification, FieldOption, FieldSelectorRegistryMap, FieldSource, FieldSubmitPolicy, FieldsetLayout, FilterOptions, FilteringConfig, FooterLinksAppearance, FooterLinksLayout, FormActionButton, FormActionConfirmationEvent, FormActionsLayout, FormApiLayout, FormBehaviorLayout, FormColumn, FormConfig, FormConfigMetadata, FormConfigState, FormCustomActionEvent, FormEntityEvent, FormHook, FormHookContext, FormHookDeclaration, FormHookDeclarationLite, FormHookOutcome, FormHookPreset, FormHookPresetMatch, FormHookStage, FormHookStatus, FormHooksLayout, FormInitializationError, FormLayout, FormLayoutRule, FormMessagesLayout, FormMetadataLayout, FormModeHints, FormOpenMode, FormReadyEvent, FormRow, FormRowLayout, FormRuleTargetType, FormSection, FormSectionHeaderAction, FormSectionHeaderConfig, FormSectionHeaderEmptyState, FormSectionHeaderMode, FormSectionHeaderSize, FormSubmitEvent, FormValidationEvent, FormValueChangeEvent, FormattingLocaleConfig, GeneralExportConfig, GetSchemaParams, GlobalActionCatalogEntry, GlobalActionContext, GlobalActionField, GlobalActionFieldOption, GlobalActionFieldType, GlobalActionHandler, GlobalActionHandlerEntry, GlobalActionId, GlobalActionParam, GlobalActionResult, GlobalActionSpec, GlobalActionUiSchema, GlobalAiConfig, GlobalAiEmbeddingConfig, GlobalAiProvider, GlobalAnalyticsService, GlobalApiClient, GlobalCacheConfig, GlobalConfig, GlobalCrudActionDefaults, GlobalCrudConfig, GlobalCrudDefaults, GlobalDialogAction, GlobalDialogAnimation, GlobalDialogAriaRole, GlobalDialogConfig, GlobalDialogConfigEntry, GlobalDialogPosition, GlobalDialogService, GlobalDialogStyles, GlobalDynamicFieldsAsyncSelectConfig, GlobalDynamicFieldsCascadeConfig, GlobalDynamicFieldsConfig, GlobalI18nConfig, GlobalRouteGuardResolver, GlobalSurfaceService, GlobalTableConfig, GlobalToastService, HateoasLink, HeroBadge, HeroBadgeTone, HeroBannerAppearance, HeroBannerVariant, HeroMetaItem, HookResolver, InlineFilterControlType, InlineMonthRangeMetadata, InlinePeriodRangeFiscalCalendar, InlinePeriodRangeGranularity, InlinePeriodRangeMetadata, InlinePeriodRangePreset, InlineRangeDistributionBin, InlineRangeDistributionConfig, InlineYearRangeMetadata, InteractionConfig, JsonExportConfig, JsonLogicArguments, JsonLogicArray, JsonLogicDataRecord, JsonLogicDerivedValueExpression, JsonLogicExpression, JsonLogicOperationExpression, JsonLogicPrimitive, JsonLogicRecord, JsonLogicValue, JsonLogicVarExpression, JsonLogicVarReference, KeyboardAccessibilityConfig, LazyLoadingConfig, LegacyCompositionLinkInput, LegacyLinkCondition, LegacyLinkMetaPolicy, LegacyTableConfig, LegalNoticeAppearance, LegalNoticeSeverity, LinkIntent, LinkMetadata, LinkPolicy, LoadingConfig, LoadingContext, LoadingPhase$1 as LoadingPhase, LoadingScope, LoadingState, LoadingPhase as LoadingStatePhase, LocalizationConfig, LocateRequest, LoggerConfig, LoggerContext, LoggerEvent, LoggerLevel, LoggerLogOptions, LoggerNormalizedError, LoggerPIIConfig, LoggerSink, LoggerTelemetryPayload, LoggerThrottleConfig, MarginConfig, MaterialAutocompleteMetadata, MaterialButtonMetadata, MaterialButtonToggleMetadata, MaterialCheckboxMetadata, MaterialChipsMetadata, MaterialColorInputMetadata, MaterialColorPickerMetadata, MaterialCpfCnpjMetadata, MaterialCurrencyMetadata, MaterialDateInputMetadata, MaterialDateRangeMetadata, MaterialDatepickerMetadata, MaterialDatetimeLocalInputMetadata, MaterialDesignConfig, MaterialEmailInputMetadata, MaterialEmailMetadata, MaterialInputMetadata, MaterialMonthInputMetadata, MaterialMultiSelectTreeMetadata, MaterialNumericMetadata, MaterialPasswordMetadata, MaterialPhoneMetadata, MaterialPriceRangeMetadata, MaterialRadioMetadata, MaterialRangeSliderMetadata, MaterialRatingMetadata, MaterialSearchInputMetadata, MaterialSelectMetadata, MaterialSelectionListMetadata, MaterialSliderMetadata, MaterialTextareaMetadata, MaterialTimeInputMetadata, MaterialTimeRangeMetadata, MaterialTimeTrackShift, MaterialTimepickerMetadata, MaterialToggleMetadata, MaterialTransferListMetadata, MaterialTreeNode, MaterialTreeSelectMetadata, MaterialUrlInputMetadata, MaterialWeekInputMetadata, MaterialYearInputMetadata, MemoryConfig, MessageTemplate, MessagesConfig, NestedFieldsetLayout, NormalizedError, NumberLocaleConfig, ObservabilityAlert, ObservabilityAlertGroupBy, ObservabilityAlertRule, ObservabilityAlertSeverity, ObservabilityCountBucket, ObservabilityDashboardOptions, ObservabilityIngestInput, ObservabilityMetricsSnapshot, OptionDTO, OptionSourceMetadata, OptionSourceRequestOptions, OverlayDecider, OverlayDecision, OverlayDecisionContext, OverlayDecisionMatrix, OverlayPattern, OverlayRange, OverlayRule, OverlayRuleMatch, OverlayThresholds, Page, PageIdentity, PageableRequest, PaginationConfig, PartialFieldMetadata, PdfExportConfig, PerformanceConfig, PersistedPageConfig, PersistedPageDefinitionWithIds, PersistedWidgetInstance, PlainObject, PluginConfig, PollingConfig, PortCardinality, PortCompatibilityRuleSet, PortContract, PortDirection, PortExposure, PortSchemaKind, PortSchemaMode, PortSchemaRef, PortSemanticKind, PraxisAnalyticsBindings, PraxisAnalyticsDefaults, PraxisAnalyticsDimensionBinding, PraxisAnalyticsDistributionStatsRequest, PraxisAnalyticsExecutionMetric, PraxisAnalyticsGroupByStatsRequest, PraxisAnalyticsInteractions, PraxisAnalyticsMetricBinding, PraxisAnalyticsOptions, PraxisAnalyticsPresentationHints, PraxisAnalyticsProjection, PraxisAnalyticsSortRule, PraxisAnalyticsSource, PraxisAnalyticsStatsExecutionPlan, PraxisAnalyticsStatsMetricRequest, PraxisAnalyticsStatsRequest, PraxisAnalyticsTimeSeriesStatsRequest, PraxisAuthContext, PraxisBuiltinCustomRuleOperator, PraxisConditionalRule, PraxisConditionalRuleMatchInput, PraxisCustomRuleOperator, PraxisDataQueryContext, PraxisGlobalActionsOptions, PraxisGlobalConfigBootstrapOptions, PraxisHostRuleOperator, PraxisHttpLoadingOptions, PraxisI18nConfig, PraxisI18nDictionary, PraxisI18nMessageDescriptor, PraxisI18nNamespaceConfig, PraxisI18nNamespaceDictionary, PraxisI18nTranslator, PraxisIconDefaultsOptions, PraxisJsonLogicEvaluationContext, PraxisJsonLogicEvaluationOptions, PraxisJsonLogicEvaluationResult, PraxisJsonLogicIssueCode, PraxisJsonLogicOperatorDefinition, PraxisJsonLogicOperatorDescriptor, PraxisJsonLogicOperatorHelpers, PraxisJsonLogicOperatorMetadata, PraxisJsonLogicOperatorPurity, PraxisJsonLogicOperatorReturnType, PraxisJsonLogicOperatorSource, PraxisJsonLogicRuntimeValue, PraxisJsonLogicValidationIssue, PraxisJsonLogicValidationOptions, PraxisJsonLogicValidationResult, PraxisLayerScale, PraxisLoadingRenderer, PraxisLocale, PraxisLoggingEnvironment, PraxisLoggingOptions, PraxisNativeJsonLogicOperator, PraxisRuleContextDescriptor, PraxisRuleOperator, PraxisTextValue, PraxisToastOptions, PraxisTranslationParams, PraxisXUiAnalytics, PriceRangeValue, RangeSliderInlineTexts, RangeSliderQuickPreset, RangeSliderQuickPresetLabels, RangeSliderValue, RenderingConfig, ResizingConfig, ResolveCrudOperationRequest, ResolvePresetOptions, ResolvedComponentMetadataEditorialBinding, ResolvedComponentMetadataEditorialMeta, ResolvedCrudOperation, ResolvedCrudOperationSource, ResolvedValuePresentation, ResourceActionCatalogItem, ResourceActionCatalogResponse, ResourceActionOpenAdapterOptions, ResourceActionScope, ResourceAvailabilityDecision, ResourceCapabilityOperation, ResourceCapabilitySnapshot, ResourceCrudOperationId, ResourceDiscoveryRel, ResourceDiscoveryRequestOptions, ResourceLinkSource, ResourceSurfaceCatalogItem, ResourceSurfaceCatalogResponse, ResourceSurfaceKind, ResourceSurfaceOpenAdapterOptions, ResourceSurfaceScope, ResponsiveConfig, RestApiLinks, RestApiResponse, RichAvatarNode, RichBadgeNode, RichBlockBaseNode, RichBlockContextConfig, RichBlockContextScope, RichBlockHostCapabilities, RichBlockNode, RichBlockRuleSet, RichCardNode, RichComposeNode, RichContentDocument, RichIconNode, RichImageNode, RichMediaBlockNode, RichMetricNode, RichPresenterNode, RichPresetReferenceNode, RichPrimitiveNode, RichProgressNode, RichTextAppearance, RichTextNode, RichTextVariant, RichTimelineItem, RichTimelineNode, RowAction, RowActionsConfig, RuleContextRoot, RulePropertyDefinition, RulePropertySchema, RulePropertyType, RunHooksResult, RuntimeLinkSnapshot, RuntimeLinkStatus, RuntimePayloadSummary, RuntimeSnapshot, RuntimeSnapshotStatus, RuntimeStateSnapshot, RuntimeTraceEntry, RuntimeTracePhase, SchemaIdParams, SchemaMetaInfo, SchemaViewerContext, SelectionConfig, SerializableFieldMetadata, SettingsPanelBridge, SettingsPanelOpenContent, SettingsPanelOpenOptions, SettingsPanelRef, SettingsValueProvider, SortingConfig, SpacingConfig, StateEndpointRef, StateMessagesConfig, SurfaceBinding, SurfaceBindingMode, SurfaceDrawerBridge, SurfaceDrawerOpenContent, SurfaceDrawerOpenOptions, SurfaceDrawerRef, SurfaceDrawerResult, SurfaceDrawerWidthPreset, SurfaceOpenPayload, SurfaceOpenPreset, SurfacePresentation, SurfaceSizeConfig, SyncConfig, SyncResult, TableActionsConfig, TableAppearanceConfig, TableBehaviorConfig, TableConfig, TableConfigV2 as TableConfigModern, TableConfigState, TableConfigV2, TableDetailActionBarAction, TableDetailActionBarNode, TableDetailActionNode, TableDetailAllowedNode, TableDetailBaseNode, TableDetailCardGridCardNode, TableDetailCardGridNode, TableDetailCardNode, TableDetailDiagramEmbedNode, TableDetailEmbedAction, TableDetailEmbedBaseNode, TableDetailInlineSchemaDocument, TableDetailLayoutNode, TableDetailListItemAction, TableDetailListItemContextConfig, TableDetailListItemSchema, TableDetailListNode, TableDetailMediaBlockNode, TableDetailRefNode, TableDetailRichListNode, TableDetailRichTextNode, TableDetailSchemaNode, TableDetailTabNode, TableDetailTabsNode, TableDetailTemplateRefNode, TableDetailTimelineItemSchema, TableDetailTimelineNode, TableDetailTimelineStaticItem, TableDetailValueNode, TableExpansionConfig, TableLocalDataModeConfig, TelemetryEvent, TelemetryLoggerSinkOptions, TelemetryTransport, TextTransformApply, TextTransformName, ThemeConfig, ToolbarAction, ToolbarConfig, ToolbarFilterConfig, ToolbarLayoutConfig, ToolbarSettingsConfig, TransformBinding, TransformBindingSource, TransformCatalogCategory, TransformCatalogEntry, TransformKind, TransformLegacyReplacement, TransformOutputHint, TransformPhase, TransformPipeline, TransformSemanticKind, TransformStep, TypographyConfig, UserContextSource, UserContextSummaryAppearance, UserContextSummaryField, ValidationContext, ValidationError, ValidationMessagesConfig, ValidationResult, ValidationRule, ValidatorFunction, ValidatorOptions, ValueKind$1 as ValueKind, ValuePresentationConfig, ValuePresentationResolutionContext, ValuePresentationStyle, ValuePresentationType, VirtualizationConfig, WidgetDefinition, WidgetDerivedStateNode, WidgetEventEnvelope, WidgetEventPathSegment, WidgetInstance, WidgetPageCanvasCollisionPolicy, WidgetPageCanvasConstraints, WidgetPageCanvasItem, WidgetPageCanvasItemOverride, WidgetPageCanvasLayout, WidgetPageCanvasLayoutVariant, WidgetPageCompositionDefinition, WidgetPageDefinition, WidgetPageDeviceKind, WidgetPageDeviceLayouts, WidgetPageDevicePolicy, WidgetPageGroupingDefinition, WidgetPageGroupingOverride, WidgetPageGroupingTabDefinition, WidgetPageLayout, WidgetPageLayoutPresetDefinition, WidgetPageLayoutVariant, WidgetPageOrientation, WidgetPageSlotAssignments, WidgetPageSlotDefinition, WidgetPageStateDefinition, WidgetPageStateInput, WidgetPageStateRuntimeSnapshot, WidgetPageThemePresetDefinition, WidgetPageWidgetLayoutOverride, WidgetPageWidgetSuggestion, WidgetResolutionDiagnostic, WidgetResolutionPhase, WidgetShellAction, WidgetShellActionEvent, WidgetShellActionPlacement, WidgetShellBodyLayout, WidgetShellConfig, WidgetShellWindowActions, WidgetStateNode };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@praxisui/core",
3
- "version": "8.0.0-beta.0",
3
+ "version": "8.0.0-beta.2",
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": "^20.0.0",
@@ -0,0 +1,174 @@
1
+ /*
2
+ * Praxis UI host theme bridge.
3
+ *
4
+ * Import this file after the Angular Material theme and the CDK overlay CSS.
5
+ * The bridge assumes Material Symbols and, when mi:* ligatures are used,
6
+ * Material Icons classic are loaded by the host HTML.
7
+ */
8
+
9
+ :root {
10
+ --md-sys-color-primary: var(--mat-sys-primary, #006a6a);
11
+ --md-sys-color-on-primary: var(--mat-sys-on-primary, #ffffff);
12
+ --md-sys-color-primary-container: var(--mat-sys-primary-container, #9cf1ef);
13
+ --md-sys-color-on-primary-container: var(--mat-sys-on-primary-container, #002020);
14
+ --md-sys-color-secondary: var(--mat-sys-secondary, #4a6363);
15
+ --md-sys-color-on-secondary: var(--mat-sys-on-secondary, #ffffff);
16
+ --md-sys-color-secondary-container: var(--mat-sys-secondary-container, #cce8e7);
17
+ --md-sys-color-on-secondary-container: var(--mat-sys-on-secondary-container, #051f20);
18
+ --md-sys-color-tertiary: var(--mat-sys-tertiary, #4b607c);
19
+ --md-sys-color-on-tertiary: var(--mat-sys-on-tertiary, #ffffff);
20
+ --md-sys-color-tertiary-container: var(--mat-sys-tertiary-container, #d3e4ff);
21
+ --md-sys-color-on-tertiary-container: var(--mat-sys-on-tertiary-container, #041c35);
22
+ --md-sys-color-error: var(--mat-sys-error, #ba1a1a);
23
+ --md-sys-color-on-error: var(--mat-sys-on-error, #ffffff);
24
+ --md-sys-color-error-container: var(--mat-sys-error-container, #ffdad6);
25
+ --md-sys-color-on-error-container: var(--mat-sys-on-error-container, #410002);
26
+ --md-sys-color-surface: var(--mat-sys-surface, #fbfcfc);
27
+ --md-sys-color-surface-container-lowest: var(--mat-sys-surface-container-lowest, #ffffff);
28
+ --md-sys-color-surface-container-low: var(--mat-sys-surface-container-low, #f2f6f5);
29
+ --md-sys-color-surface-container: var(--mat-sys-surface-container, #ecefed);
30
+ --md-sys-color-surface-container-high: var(--mat-sys-surface-container-high, #e6e9e8);
31
+ --md-sys-color-surface-container-highest: var(--mat-sys-surface-container-highest, #e0e3e2);
32
+ --md-sys-color-surface-variant: var(--mat-sys-surface-variant, #dae5e3);
33
+ --md-sys-color-on-surface: var(--mat-sys-on-surface, #191c1c);
34
+ --md-sys-color-on-surface-variant: var(--mat-sys-on-surface-variant, #3f4948);
35
+ --md-sys-color-outline: var(--mat-sys-outline, #6f7978);
36
+ --md-sys-color-outline-variant: var(--mat-sys-outline-variant, #bec9c7);
37
+ --md-sys-color-shadow: var(--mat-sys-shadow, #000000);
38
+ --md-sys-color-scrim: var(--mat-sys-scrim, #000000);
39
+ --md-sys-elevation-level1: var(--mat-app-elevation-shadow-level1, 0 1px 2px rgba(0, 0, 0, 0.14));
40
+ --md-sys-elevation-level2: var(--mat-app-elevation-shadow-level2, 0 2px 6px rgba(0, 0, 0, 0.16));
41
+ --md-sys-elevation-level3: var(--mat-app-elevation-shadow-level3, 0 4px 12px rgba(0, 0, 0, 0.18));
42
+
43
+ --pdx-material-surface: var(--md-sys-color-surface-container);
44
+ --pdx-material-surface-high: var(--md-sys-color-surface-container-high);
45
+ --pdx-material-on-surface: var(--md-sys-color-on-surface);
46
+ --pdx-material-on-surface-muted: var(--md-sys-color-on-surface-variant);
47
+ --pdx-material-outline: var(--md-sys-color-outline-variant);
48
+ --pdx-material-focus-outline: var(--md-sys-color-primary);
49
+ --pdx-overlay-surface: var(--pdx-material-surface);
50
+ --pdx-overlay-on-surface: var(--pdx-material-on-surface);
51
+ --pdx-overlay-on-surface-muted: var(--pdx-material-on-surface-muted);
52
+ --pdx-overlay-state-layer: var(--md-sys-color-surface-container-high);
53
+ }
54
+
55
+ .material-icons,
56
+ mat-icon.material-icons {
57
+ direction: ltr;
58
+ display: inline-block;
59
+ font-family: "Material Icons";
60
+ font-feature-settings: "liga";
61
+ font-size: 24px;
62
+ font-style: normal;
63
+ font-weight: normal;
64
+ letter-spacing: normal;
65
+ line-height: 1;
66
+ text-transform: none;
67
+ white-space: nowrap;
68
+ word-wrap: normal;
69
+ -webkit-font-feature-settings: "liga";
70
+ -webkit-font-smoothing: antialiased;
71
+ }
72
+
73
+ .material-symbols-outlined,
74
+ .material-symbols-rounded,
75
+ .material-symbols-sharp,
76
+ mat-icon.material-symbols-outlined,
77
+ mat-icon.material-symbols-rounded,
78
+ mat-icon.material-symbols-sharp {
79
+ direction: ltr;
80
+ display: inline-block;
81
+ font-feature-settings: "liga";
82
+ font-size: 24px;
83
+ font-style: normal;
84
+ font-weight: normal;
85
+ letter-spacing: normal;
86
+ line-height: 1;
87
+ text-transform: none;
88
+ white-space: nowrap;
89
+ word-wrap: normal;
90
+ -webkit-font-feature-settings: "liga";
91
+ -webkit-font-smoothing: antialiased;
92
+ }
93
+
94
+ .material-symbols-outlined,
95
+ mat-icon.material-symbols-outlined {
96
+ font-family: "Material Symbols Outlined";
97
+ }
98
+
99
+ .material-symbols-rounded,
100
+ mat-icon.material-symbols-rounded {
101
+ font-family: "Material Symbols Rounded";
102
+ }
103
+
104
+ .material-symbols-sharp,
105
+ mat-icon.material-symbols-sharp {
106
+ font-family: "Material Symbols Sharp";
107
+ }
108
+
109
+ .cdk-overlay-container {
110
+ color: var(--pdx-overlay-on-surface);
111
+ }
112
+
113
+ .cdk-overlay-container .mat-mdc-dialog-container {
114
+ --mdc-dialog-container-color: var(--pdx-overlay-surface);
115
+ --mdc-dialog-subhead-color: var(--pdx-overlay-on-surface);
116
+ --mdc-dialog-supporting-text-color: var(--pdx-overlay-on-surface-muted);
117
+ }
118
+
119
+ .cdk-overlay-container .mat-mdc-select-panel,
120
+ .cdk-overlay-container .mat-mdc-autocomplete-panel,
121
+ .cdk-overlay-container .mat-mdc-menu-panel {
122
+ background: var(--pdx-overlay-surface);
123
+ border: 1px solid var(--pdx-material-outline);
124
+ box-shadow: var(--md-sys-elevation-level2);
125
+ color: var(--pdx-overlay-on-surface);
126
+ }
127
+
128
+ .cdk-overlay-container .mat-mdc-option,
129
+ .cdk-overlay-container .mat-mdc-menu-item {
130
+ color: var(--pdx-overlay-on-surface);
131
+ }
132
+
133
+ .cdk-overlay-container .mat-mdc-option.mdc-list-item--selected,
134
+ .cdk-overlay-container .mat-mdc-option.mat-mdc-option-active,
135
+ .cdk-overlay-container .mat-mdc-menu-item:hover,
136
+ .cdk-overlay-container .mat-mdc-menu-item.cdk-program-focused,
137
+ .cdk-overlay-container .mat-mdc-menu-item.cdk-keyboard-focused {
138
+ background: var(--pdx-overlay-state-layer);
139
+ }
140
+
141
+ .cdk-overlay-container .mat-mdc-tooltip .mdc-tooltip__surface {
142
+ background: var(--md-sys-color-inverse-surface, #2d3131);
143
+ color: var(--md-sys-color-inverse-on-surface, #eff1f0);
144
+ }
145
+
146
+ .mat-mdc-form-field {
147
+ --mdc-filled-text-field-container-color: var(--md-sys-color-surface-container-low);
148
+ --mdc-filled-text-field-input-text-color: var(--pdx-material-on-surface);
149
+ --mdc-filled-text-field-label-text-color: var(--pdx-material-on-surface-muted);
150
+ --mdc-filled-text-field-focus-label-text-color: var(--pdx-material-focus-outline);
151
+ --mdc-filled-text-field-active-indicator-color: var(--pdx-material-outline);
152
+ --mdc-filled-text-field-focus-active-indicator-color: var(--pdx-material-focus-outline);
153
+ --mdc-outlined-text-field-input-text-color: var(--pdx-material-on-surface);
154
+ --mdc-outlined-text-field-label-text-color: var(--pdx-material-on-surface-muted);
155
+ --mdc-outlined-text-field-focus-label-text-color: var(--pdx-material-focus-outline);
156
+ --mdc-outlined-text-field-outline-color: var(--pdx-material-outline);
157
+ --mdc-outlined-text-field-hover-outline-color: var(--md-sys-color-outline);
158
+ --mdc-outlined-text-field-focus-outline-color: var(--pdx-material-focus-outline);
159
+ --mat-select-enabled-trigger-text-color: var(--pdx-material-on-surface);
160
+ --mat-select-panel-background-color: var(--pdx-material-surface);
161
+ }
162
+
163
+ .mat-mdc-button,
164
+ .mat-mdc-outlined-button,
165
+ .mat-mdc-raised-button,
166
+ .mat-mdc-unelevated-button {
167
+ --mdc-text-button-label-text-color: var(--md-sys-color-primary);
168
+ --mdc-outlined-button-label-text-color: var(--md-sys-color-primary);
169
+ --mdc-outlined-button-outline-color: var(--pdx-material-outline);
170
+ --mdc-protected-button-container-color: var(--md-sys-color-surface-container-low);
171
+ --mdc-protected-button-label-text-color: var(--md-sys-color-primary);
172
+ --mdc-filled-button-container-color: var(--md-sys-color-primary);
173
+ --mdc-filled-button-label-text-color: var(--md-sys-color-on-primary);
174
+ }