@praxisui/core 9.0.3 → 9.0.4-rc.10

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.
@@ -1121,6 +1121,31 @@ const TABLE_SAFE_KINDS = new Set([
1121
1121
  'delta',
1122
1122
  'processFlow',
1123
1123
  ]);
1124
+ const TABLE_CELL_RECOMMENDED_KINDS = new Set([
1125
+ 'delta',
1126
+ 'bullet',
1127
+ 'radial',
1128
+ 'harveyBall',
1129
+ 'stackedBar',
1130
+ ]);
1131
+ /**
1132
+ * Returns the compact-table suitability of a supported visualization kind.
1133
+ * Trend and workflow-heavy kinds are conditional because they require enough
1134
+ * column width and a clear decision-making purpose to remain legible.
1135
+ */
1136
+ function getPraxisTableCellVisualizationGuidance(kind) {
1137
+ return TABLE_CELL_RECOMMENDED_KINDS.has(kind) ? 'recommended' : 'conditional';
1138
+ }
1139
+ function getPraxisTableCellVisualizationConstraint(kind) {
1140
+ if (kind === 'comparison')
1141
+ return 'row-density';
1142
+ if (kind === 'processFlow')
1143
+ return 'step-labels';
1144
+ if (kind === 'line' || kind === 'area' || kind === 'column') {
1145
+ return 'horizontal-space';
1146
+ }
1147
+ return null;
1148
+ }
1124
1149
  function normalizePraxisPresentationVisualization(value) {
1125
1150
  if (!value || typeof value !== 'object') {
1126
1151
  return undefined;
@@ -1201,6 +1226,9 @@ function renderPraxisPresentationVisualizationHtml(value, options = {}) {
1201
1226
  }
1202
1227
  function renderComparisonVisualizationHtml(visualization, options) {
1203
1228
  const points = visualization.points ?? [];
1229
+ if (points.length === 0) {
1230
+ return renderFallbackVisualizationHtml(visualization, visualization.tone ?? 'neutral');
1231
+ }
1204
1232
  const max = Math.max(1, ...points.map((point) => Math.max(0, point.value)));
1205
1233
  const rows = points
1206
1234
  .map((point) => {
@@ -1219,6 +1247,9 @@ function renderComparisonVisualizationHtml(visualization, options) {
1219
1247
  }
1220
1248
  function renderStackedBarVisualizationHtml(visualization, options) {
1221
1249
  const segments = visualization.segments ?? [];
1250
+ if (segments.length === 0) {
1251
+ return renderFallbackVisualizationHtml(visualization, visualization.tone ?? 'neutral');
1252
+ }
1222
1253
  const total = visualization.total && visualization.total > 0
1223
1254
  ? visualization.total
1224
1255
  : Math.max(1, segments.reduce((sum, segment) => sum + Math.max(0, segment.value), 0));
@@ -1252,7 +1283,10 @@ function resolveBulletMax(visualization) {
1252
1283
  return Math.max(...values, 100);
1253
1284
  }
1254
1285
  function renderBulletVisualizationHtml(visualization, options) {
1255
- const currentValue = toFiniteNumber(visualization.value) ?? 0;
1286
+ const currentValue = toFiniteNumber(visualization.value);
1287
+ if (currentValue === undefined) {
1288
+ return renderFallbackVisualizationHtml(visualization, visualization.tone ?? 'neutral');
1289
+ }
1256
1290
  const max = resolveBulletMax(visualization);
1257
1291
  const target = toFiniteNumber(visualization.target);
1258
1292
  const targetLeft = target === undefined ? null : percent(target, max);
@@ -1432,7 +1466,10 @@ function normalizeText$1(value) {
1432
1466
  return trimmed.length ? trimmed : undefined;
1433
1467
  }
1434
1468
  function renderRadialVisualizationHtml(visualization, options) {
1435
- const value = toFiniteNumber(visualization.value) ?? 0;
1469
+ const value = toFiniteNumber(visualization.value);
1470
+ if (value === undefined) {
1471
+ return renderFallbackVisualizationHtml(visualization, visualization.tone ?? 'neutral');
1472
+ }
1436
1473
  const total = visualization.total && visualization.total > 0 ? visualization.total : 100;
1437
1474
  const pct = Math.max(0, Math.min(100, (value / total) * 100));
1438
1475
  const tone = visualization.tone ?? 'info';
@@ -1457,7 +1494,10 @@ function renderRadialVisualizationHtml(visualization, options) {
1457
1494
  </span>`;
1458
1495
  }
1459
1496
  function renderHarveyBallVisualizationHtml(visualization, options) {
1460
- const value = toFiniteNumber(visualization.value) ?? 0;
1497
+ const value = toFiniteNumber(visualization.value);
1498
+ if (value === undefined) {
1499
+ return renderFallbackVisualizationHtml(visualization, visualization.tone ?? 'neutral');
1500
+ }
1461
1501
  const total = visualization.total && visualization.total > 0 ? visualization.total : 100;
1462
1502
  const pct = Math.max(0, Math.min(100, (value / total) * 100));
1463
1503
  const tone = visualization.tone ?? 'info';
@@ -4254,6 +4294,7 @@ class GenericCrudService {
4254
4294
  _lastResourceIdentityDiagnostics = [];
4255
4295
  // Última informação do schema consumido (para auditoria/merge)
4256
4296
  _lastSchemaInfo = {};
4297
+ _resourceEtags = new Map();
4257
4298
  /**
4258
4299
  * Cria a instância do serviço genérico.
4259
4300
  *
@@ -4362,6 +4403,7 @@ class GenericCrudService {
4362
4403
  this._lastResourceCapabilityDigest = null;
4363
4404
  this._lastResourceIdentity = null;
4364
4405
  this._lastResourceIdentityDiagnostics = [];
4406
+ this._resourceEtags.clear();
4365
4407
  debugCrudService('[CRUD:Service] configure', {
4366
4408
  resourcePath, baseApiUrl: this.baseApiUrl,
4367
4409
  });
@@ -5071,13 +5113,15 @@ class GenericCrudService {
5071
5113
  this.ensureConfigured();
5072
5114
  const entry = this.resolveEndpointEntry(options?.endpointKey);
5073
5115
  const url = this.getEndpointUrl('getById', id, options?.parentPath, options?.endpointKey);
5116
+ const versionKey = this.resourceVersionKey(id, options);
5074
5117
  debugCrudService('[CRUD:Service] getById:url', { url });
5075
5118
  return this.http
5076
5119
  .get(url, {
5077
5120
  headers: composeHeadersWithVersion(entry),
5078
5121
  context: options?.httpContext,
5122
+ observe: 'response',
5079
5123
  })
5080
- .pipe(catchError(this.handleError));
5124
+ .pipe(map((response) => this.captureResourceVersion(versionKey, response)), catchError(this.handleError));
5081
5125
  }
5082
5126
  /**
5083
5127
  * Cria um novo registro.
@@ -5145,12 +5189,42 @@ class GenericCrudService {
5145
5189
  this.ensureConfigured();
5146
5190
  const entry = this.resolveEndpointEntry(options?.endpointKey);
5147
5191
  const url = this.getEndpointUrl('update', id, options?.parentPath, options?.endpointKey);
5192
+ const versionKey = this.resourceVersionKey(id, options);
5193
+ let headers = composeHeadersWithVersion(entry);
5194
+ const etag = this._resourceEtags.get(versionKey);
5195
+ if (etag) {
5196
+ headers = (headers instanceof HttpHeaders ? headers : new HttpHeaders(headers))
5197
+ .set('If-Match', etag);
5198
+ }
5148
5199
  return this.http
5149
5200
  .put(url, entity, {
5150
- headers: composeHeadersWithVersion(entry),
5201
+ headers,
5151
5202
  context: options?.httpContext,
5203
+ observe: 'response',
5152
5204
  })
5153
- .pipe(catchError(this.handleError));
5205
+ .pipe(map((response) => this.captureResourceVersion(versionKey, response)), catchError((error) => {
5206
+ if (error.status === 412 || error.status === 428) {
5207
+ this._resourceEtags.delete(versionKey);
5208
+ }
5209
+ return this.handleError(error);
5210
+ }));
5211
+ }
5212
+ resourceVersionKey(id, options) {
5213
+ const entry = this.resolveEndpointEntry(options?.endpointKey);
5214
+ const headers = composeHeadersWithVersion(entry);
5215
+ const tenant = headers?.get('X-Tenant-ID') ?? '';
5216
+ const environment = headers?.get('X-Env') ?? '';
5217
+ return [buildApiUrl(entry), tenant, environment, this.resourcePath, options?.parentPath ?? '', String(id)].join('|');
5218
+ }
5219
+ captureResourceVersion(key, response) {
5220
+ const etag = response.headers.get('ETag');
5221
+ if (etag) {
5222
+ this._resourceEtags.set(key, etag);
5223
+ }
5224
+ if (!response.body) {
5225
+ throw new Error('Resource response body is empty.');
5226
+ }
5227
+ return response.body;
5154
5228
  }
5155
5229
  /**
5156
5230
  * Remove um registro pelo ID.
@@ -8526,6 +8600,14 @@ class GlobalActionService {
8526
8600
  runtime.emitResult(this.toSurfaceResult(payload, 'result'));
8527
8601
  return { success: true };
8528
8602
  });
8603
+ this.register('surface.complete', async (payload, context) => {
8604
+ const runtime = this.resolveSurfaceRuntime(context);
8605
+ if (typeof runtime?.complete !== 'function') {
8606
+ return { success: false, error: 'Surface completion runtime not available' };
8607
+ }
8608
+ runtime.complete(this.toSurfaceOutcome(payload));
8609
+ return { success: true };
8610
+ });
8529
8611
  this.register('dynamicPage.composition.dispatch', async (payload, context) => this.handleCompositionDispatch(payload, context));
8530
8612
  this.register('toast.success', async (payload) => {
8531
8613
  const message = payload?.message || payload;
@@ -8811,6 +8893,21 @@ class GlobalActionService {
8811
8893
  });
8812
8894
  });
8813
8895
  }
8896
+ toSurfaceOutcome(payload) {
8897
+ const result = this.toSurfaceResult(payload, 'completed');
8898
+ const record = payload && typeof payload === 'object'
8899
+ ? payload
8900
+ : {};
8901
+ const requestedKind = String(record['kind'] || 'completed');
8902
+ const kind = requestedKind === 'notification' || requestedKind === 'dismissed' || requestedKind === 'failed'
8903
+ ? requestedKind
8904
+ : 'completed';
8905
+ return {
8906
+ ...result,
8907
+ kind,
8908
+ type: String(record['type'] || 'completed'),
8909
+ };
8910
+ }
8814
8911
  toSurfaceResult(payload, fallbackType) {
8815
8912
  if (payload && typeof payload === 'object' && ('type' in payload || 'data' in payload)) {
8816
8913
  return {
@@ -13810,6 +13907,36 @@ const SURFACE_OPEN_PRESETS = [
13810
13907
  description: 'Abre um formulário dinâmico com resourcePath, formId e resourceId.',
13811
13908
  payload: {
13812
13909
  presentation: 'drawer',
13910
+ lifecycle: {
13911
+ outcomes: [
13912
+ {
13913
+ output: 'formSubmit',
13914
+ when: [{ path: 'stage', equals: 'after' }],
13915
+ outcome: { kind: 'completed', type: 'save', dataPath: 'result' },
13916
+ },
13917
+ {
13918
+ output: 'formSubmit',
13919
+ when: [{ path: 'stage', equals: 'error' }],
13920
+ outcome: { kind: 'failed', type: 'submit-error', errorPath: 'error' },
13921
+ },
13922
+ {
13923
+ output: 'formCancel',
13924
+ outcome: { kind: 'dismissed', type: 'cancel' },
13925
+ },
13926
+ {
13927
+ output: 'formReset',
13928
+ outcome: { kind: 'notification', type: 'reset' },
13929
+ },
13930
+ {
13931
+ output: 'customAction',
13932
+ outcome: { kind: 'notification', type: 'custom-action' },
13933
+ },
13934
+ {
13935
+ output: 'initializationError',
13936
+ outcome: { kind: 'failed', type: 'initialization-error', errorPath: 'error' },
13937
+ },
13938
+ ],
13939
+ },
13813
13940
  widget: {
13814
13941
  id: 'praxis-dynamic-form',
13815
13942
  bindingOrder: [
@@ -14901,6 +15028,7 @@ class ResourceActionOpenAdapterService {
14901
15028
  availability: action.availability,
14902
15029
  successMessage: action.successMessage ?? null,
14903
15030
  tags: action.tags,
15031
+ execution: action.execution ?? null,
14904
15032
  },
14905
15033
  };
14906
15034
  payload.widget.inputs = {
@@ -14915,6 +15043,9 @@ class ResourceActionOpenAdapterService {
14915
15043
  submitUrl: resolvedSubmitUrl,
14916
15044
  responseSchemaUrl: resolvedResponseSchemaUrl,
14917
15045
  };
15046
+ if (options.initialValue) {
15047
+ payload.widget.inputs['initialValue'] = this.clone(options.initialValue);
15048
+ }
14918
15049
  if (action.scope === 'ITEM') {
14919
15050
  if (options.resourceId != null) {
14920
15051
  payload.widget.inputs['resourceId'] = options.resourceId;
@@ -14929,6 +15060,7 @@ class ResourceActionOpenAdapterService {
14929
15060
  throw new Error(`ResourceActionOpenAdapterService requires resourceId or idBindingPath for item action "${action.id}".`);
14930
15061
  }
14931
15062
  }
15063
+ this.applyExecutionInputs(payload, action, options);
14932
15064
  return payload;
14933
15065
  }
14934
15066
  resolveDynamicFormPreset() {
@@ -14941,6 +15073,49 @@ class ResourceActionOpenAdapterService {
14941
15073
  buildStableInstanceId(action) {
14942
15074
  return `${action.resourceKey}.action.${action.id}`.replace(/[^a-zA-Z0-9._-]+/g, '-');
14943
15075
  }
15076
+ applyExecutionInputs(payload, action, options) {
15077
+ const execution = action.execution;
15078
+ if (!execution) {
15079
+ payload.widget.inputs['submitIdempotencyKey'] = this.createCommandIdentity('idempotency');
15080
+ return;
15081
+ }
15082
+ const inputs = payload.widget.inputs;
15083
+ if (execution.preconditions.idempotencyKey !== 'NONE') {
15084
+ inputs['submitIdempotencyKey'] = this.createCommandIdentity('idempotency');
15085
+ }
15086
+ if (execution.preconditions.correlationId !== 'NONE') {
15087
+ inputs['submitCorrelationId'] =
15088
+ String(options.correlationId ?? '').trim() || this.createCommandIdentity('correlation');
15089
+ }
15090
+ if (execution.preconditions.resourceVersionTransport !== 'IF_MATCH') {
15091
+ return;
15092
+ }
15093
+ if (options.resourceVersion != null && String(options.resourceVersion).trim()) {
15094
+ inputs['submitResourceVersion'] = options.resourceVersion;
15095
+ return;
15096
+ }
15097
+ if (options.resourceVersionBindingPath) {
15098
+ payload.bindings = [
15099
+ ...(payload.bindings || []),
15100
+ {
15101
+ from: options.resourceVersionBindingPath,
15102
+ to: 'widget.inputs.submitResourceVersion',
15103
+ mode: 'path',
15104
+ },
15105
+ ];
15106
+ return;
15107
+ }
15108
+ if (execution.preconditions.resourceVersion === 'REQUIRED') {
15109
+ throw new Error(`ResourceActionOpenAdapterService requires resourceVersion or resourceVersionBindingPath for action "${action.id}".`);
15110
+ }
15111
+ }
15112
+ createIdempotencyKey() {
15113
+ const randomUuid = globalThis.crypto?.randomUUID?.bind(globalThis.crypto);
15114
+ return randomUuid ? randomUuid() : `praxis-action-${Date.now()}-${Math.random().toString(16).slice(2)}`;
15115
+ }
15116
+ createCommandIdentity(kind) {
15117
+ return `${kind}-${this.createIdempotencyKey()}`;
15118
+ }
14944
15119
  normalizeResourcePath(resourcePath) {
14945
15120
  return String(resourcePath || '').trim().replace(/^\/+/, '').replace(/\/+$/, '');
14946
15121
  }
@@ -15786,8 +15961,15 @@ class SurfaceOpenMaterializerService {
15786
15961
  const previousAi = this.objectRecord(previousConfig['ai']);
15787
15962
  const previousAssistant = this.objectRecord(previousAi['assistant']);
15788
15963
  const previousBehavior = this.objectRecord(previousConfig['behavior']);
15964
+ const previousColumns = Array.isArray(previousConfig['columns'])
15965
+ ? previousConfig['columns']
15966
+ : [];
15789
15967
  const generatedConfig = {
15790
- columns: schemaColumns.length ? schemaColumns : fallbackColumns,
15968
+ columns: previousColumns.length
15969
+ ? previousColumns
15970
+ : schemaColumns.length
15971
+ ? schemaColumns
15972
+ : fallbackColumns,
15791
15973
  toolbar: toolbarActions.length
15792
15974
  ? {
15793
15975
  ...previousToolbar,
@@ -18747,6 +18929,10 @@ const PRAXIS_GLOBAL_ACTION_CATALOG = [
18747
18929
  type: 'object',
18748
18930
  description: 'Ação estruturada executada quando a surface emite um resultado semântico via surface.result.',
18749
18931
  },
18932
+ lifecycle: {
18933
+ type: 'object',
18934
+ description: 'Política declarativa que converte outputs públicos do widget em outcomes de notificação, conclusão, cancelamento ou falha.',
18935
+ },
18750
18936
  },
18751
18937
  required: ['presentation', 'widget'],
18752
18938
  example: {
@@ -18795,6 +18981,22 @@ const PRAXIS_GLOBAL_ACTION_CATALOG = [
18795
18981
  example: { type: 'selection', data: { id: 42 } },
18796
18982
  },
18797
18983
  },
18984
+ {
18985
+ id: 'surface.complete',
18986
+ label: 'Concluir Surface',
18987
+ icon: 'task_alt',
18988
+ description: 'Publica um resultado terminal e fecha a surface atual atomicamente, garantindo uma única conclusão.',
18989
+ payloadSchema: {
18990
+ type: 'object',
18991
+ properties: {
18992
+ kind: { type: 'string', description: 'Tipo de outcome terminal; normalmente completed.' },
18993
+ type: { type: 'string', description: 'Tipo semântico da conclusão.' },
18994
+ data: { type: 'object', description: 'Dados devolvidos ao owner da surface.' },
18995
+ },
18996
+ required: ['type'],
18997
+ example: { kind: 'completed', type: 'save', data: { id: 42 } },
18998
+ },
18999
+ },
18798
19000
  {
18799
19001
  id: 'dynamicPage.composition.dispatch',
18800
19002
  label: 'Despachar Evento de Composição',
@@ -19068,6 +19270,14 @@ const DYNAMIC_PAGE_CONFIG_EDITOR = new InjectionToken('DYNAMIC_PAGE_CONFIG_EDITO
19068
19270
  const PRAXIS_TABLE_DETAIL_INLINE_RENDERERS = new InjectionToken('PRAXIS_TABLE_DETAIL_INLINE_RENDERERS');
19069
19271
  const PRAXIS_TABLE_DETAIL_INLINE_NODE_RESOLVERS = new InjectionToken('PRAXIS_TABLE_DETAIL_INLINE_NODE_RESOLVERS');
19070
19272
 
19273
+ /**
19274
+ * Canonical DI boundary for governed table expansion detail resources.
19275
+ *
19276
+ * Omit the provider when a host does not support `source.mode = 'resource'`;
19277
+ * PraxisTable then keeps the detail closed with its existing fail-closed state.
19278
+ */
19279
+ const PRAXIS_TABLE_DETAIL_RESOURCE_RESOLVER = new InjectionToken('PRAXIS_TABLE_DETAIL_RESOURCE_RESOLVER');
19280
+
19071
19281
  function providePraxisHttpCollectionExportProvider(options = {}) {
19072
19282
  return [
19073
19283
  { provide: PRAXIS_COLLECTION_EXPORT_HTTP_OPTIONS, useValue: options },
@@ -36225,7 +36435,6 @@ class DynamicWidgetPageComponent {
36225
36435
  }
36226
36436
  shouldRenderWidgetContextOverlay(widget) {
36227
36437
  return (this.enableCustomization &&
36228
- this.isWidgetSelected(widget.key) &&
36229
36438
  !this.hasVisibleWidgetShellHeader(widget));
36230
36439
  }
36231
36440
  widgetShellForRender(widget) {
@@ -36269,7 +36478,6 @@ class DynamicWidgetPageComponent {
36269
36478
  }
36270
36479
  shouldProjectWidgetHeaderActions(widget) {
36271
36480
  return (this.enableCustomization &&
36272
- this.isWidgetSelected(widget.key) &&
36273
36481
  this.hasVisibleWidgetShellHeader(widget));
36274
36482
  }
36275
36483
  hasVisibleWidgetShellHeader(widget) {
@@ -37343,15 +37551,10 @@ class DynamicWidgetPageComponent {
37343
37551
  }
37344
37552
  }
37345
37553
  selectWidgetFromHostEvent(widgetKey, event) {
37346
- if (this.shouldPreserveInnerWidgetInteraction(event)) {
37347
- return;
37348
- }
37349
37554
  if (event.type === 'focusin') {
37350
- setTimeout(() => {
37351
- if (!this.destroyed) {
37352
- this.selectWidget(widgetKey);
37353
- }
37354
- }, 0);
37555
+ if (event.target === event.currentTarget) {
37556
+ this.selectWidget(widgetKey);
37557
+ }
37355
37558
  return;
37356
37559
  }
37357
37560
  this.selectWidget(widgetKey);
@@ -37362,47 +37565,6 @@ class DynamicWidgetPageComponent {
37362
37565
  isWidgetSelected(widgetKey) {
37363
37566
  return this.selectedWidgetKeyState() === widgetKey;
37364
37567
  }
37365
- shouldPreserveInnerWidgetInteraction(event) {
37366
- if (!this.enableCustomization)
37367
- return false;
37368
- const target = event.target;
37369
- const currentTarget = event.currentTarget;
37370
- if (!(target instanceof HTMLElement) || !(currentTarget instanceof HTMLElement)) {
37371
- return false;
37372
- }
37373
- if (target === currentTarget) {
37374
- return false;
37375
- }
37376
- if (event.type === 'focusin') {
37377
- return true;
37378
- }
37379
- const shellHeader = target.closest('.pdx-shell-header');
37380
- if (shellHeader && currentTarget.contains(shellHeader)) {
37381
- return false;
37382
- }
37383
- return !!target.closest([
37384
- 'button',
37385
- 'a',
37386
- 'input',
37387
- 'select',
37388
- 'textarea',
37389
- '[contenteditable="true"]',
37390
- '[role="button"]',
37391
- '[role="tab"]',
37392
- '[role="menuitem"]',
37393
- '[role="option"]',
37394
- '[role="checkbox"]',
37395
- '[role="radio"]',
37396
- '[role="row"]',
37397
- '[role="gridcell"]',
37398
- '[mat-menu-trigger-for]',
37399
- '.mat-mdc-row',
37400
- '.mat-mdc-cell',
37401
- '.mat-mdc-header-cell',
37402
- '.pdx-widget-context-toolbar',
37403
- '.pdx-canvas-resize',
37404
- ].join(','));
37405
- }
37406
37568
  selectCanvasWidget(widgetKey) {
37407
37569
  this.selectWidget(widgetKey);
37408
37570
  }
@@ -38352,6 +38514,7 @@ class DynamicWidgetPageComponent {
38352
38514
  [style.gridColumn]="widgetGridColumn(w)"
38353
38515
  [style.gridRow]="widgetGridRow(w)"
38354
38516
  [style.zIndex]="widgetZIndex(w)"
38517
+ (pointerdown)="selectWidget(w.key)"
38355
38518
  (click)="selectWidgetFromHostEvent(w.key, $event)"
38356
38519
  (focusin)="selectWidgetFromHostEvent(w.key, $event)"
38357
38520
  >
@@ -38482,6 +38645,7 @@ class DynamicWidgetPageComponent {
38482
38645
  "
38483
38646
  [class]="w.renderClassName || w.className || ''"
38484
38647
  [style.gridColumn]="widgetGridColumn(w)"
38648
+ (pointerdown)="selectWidget(w.key)"
38485
38649
  (click)="selectWidgetFromHostEvent(w.key, $event)"
38486
38650
  (focusin)="selectWidgetFromHostEvent(w.key, $event)"
38487
38651
  >
@@ -38548,6 +38712,7 @@ class DynamicWidgetPageComponent {
38548
38712
  "
38549
38713
  [class]="widgetClassName(w)"
38550
38714
  [style.gridColumn]="widgetGridColumn(w)"
38715
+ (pointerdown)="selectWidget(w.key)"
38551
38716
  (click)="selectWidgetFromHostEvent(w.key, $event)"
38552
38717
  (focusin)="selectWidgetFromHostEvent(w.key, $event)"
38553
38718
  >
@@ -38606,6 +38771,7 @@ class DynamicWidgetPageComponent {
38606
38771
  "
38607
38772
  [class]="widgetClassName(w)"
38608
38773
  [style.gridColumn]="widgetGridColumn(w)"
38774
+ (pointerdown)="selectWidget(w.key)"
38609
38775
  (click)="selectWidgetFromHostEvent(w.key, $event)"
38610
38776
  (focusin)="selectWidgetFromHostEvent(w.key, $event)"
38611
38777
  >
@@ -38717,6 +38883,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
38717
38883
  [style.gridColumn]="widgetGridColumn(w)"
38718
38884
  [style.gridRow]="widgetGridRow(w)"
38719
38885
  [style.zIndex]="widgetZIndex(w)"
38886
+ (pointerdown)="selectWidget(w.key)"
38720
38887
  (click)="selectWidgetFromHostEvent(w.key, $event)"
38721
38888
  (focusin)="selectWidgetFromHostEvent(w.key, $event)"
38722
38889
  >
@@ -38847,6 +39014,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
38847
39014
  "
38848
39015
  [class]="w.renderClassName || w.className || ''"
38849
39016
  [style.gridColumn]="widgetGridColumn(w)"
39017
+ (pointerdown)="selectWidget(w.key)"
38850
39018
  (click)="selectWidgetFromHostEvent(w.key, $event)"
38851
39019
  (focusin)="selectWidgetFromHostEvent(w.key, $event)"
38852
39020
  >
@@ -38913,6 +39081,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
38913
39081
  "
38914
39082
  [class]="widgetClassName(w)"
38915
39083
  [style.gridColumn]="widgetGridColumn(w)"
39084
+ (pointerdown)="selectWidget(w.key)"
38916
39085
  (click)="selectWidgetFromHostEvent(w.key, $event)"
38917
39086
  (focusin)="selectWidgetFromHostEvent(w.key, $event)"
38918
39087
  >
@@ -38971,6 +39140,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
38971
39140
  "
38972
39141
  [class]="widgetClassName(w)"
38973
39142
  [style.gridColumn]="widgetGridColumn(w)"
39143
+ (pointerdown)="selectWidget(w.key)"
38974
39144
  (click)="selectWidgetFromHostEvent(w.key, $event)"
38975
39145
  (focusin)="selectWidgetFromHostEvent(w.key, $event)"
38976
39146
  >
@@ -39126,6 +39296,7 @@ class PraxisSurfaceHostComponent {
39126
39296
  widget;
39127
39297
  afterWidget;
39128
39298
  context = null;
39299
+ lifecycle;
39129
39300
  strictValidation = true;
39130
39301
  /**
39131
39302
  * Keep disabled by default to avoid duplicating the title already shown by
@@ -39249,6 +39420,7 @@ class PraxisSurfaceHostComponent {
39249
39420
  }
39250
39421
  }
39251
39422
  onSlotWidgetEvent(ownerWidgetKey, event) {
39423
+ this.materializeSurfaceOutcome(event);
39252
39424
  const resourceEvent = event.resourceEvent ?? this.toResourceEvent(ownerWidgetKey, event);
39253
39425
  if (event.output === 'rowClick') {
39254
39426
  this.rowClick.emit(event.payload);
@@ -39265,6 +39437,51 @@ class PraxisSurfaceHostComponent {
39265
39437
  ownerWidgetKey: event.ownerWidgetKey || ownerWidgetKey,
39266
39438
  });
39267
39439
  }
39440
+ materializeSurfaceOutcome(event) {
39441
+ const binding = this.lifecycle?.outcomes.find((candidate) => candidate.output === event.output && this.matchesLifecycleConditions(candidate, event.payload));
39442
+ if (!binding)
39443
+ return;
39444
+ const runtime = this.context?.['surfaceRuntime'];
39445
+ if (!runtime)
39446
+ return;
39447
+ const outcome = this.buildSurfaceOutcome(binding, event);
39448
+ if (outcome.kind === 'completed') {
39449
+ runtime.complete?.(outcome);
39450
+ return;
39451
+ }
39452
+ if (outcome.kind === 'dismissed') {
39453
+ runtime.close?.(outcome);
39454
+ return;
39455
+ }
39456
+ runtime.emitResult?.(outcome);
39457
+ }
39458
+ matchesLifecycleConditions(binding, payload) {
39459
+ return (binding.when || []).every((condition) => Object.is(this.readPath(payload, condition.path), condition.equals));
39460
+ }
39461
+ buildSurfaceOutcome(binding, event) {
39462
+ const data = binding.outcome.dataPath
39463
+ ? this.readPath(event.payload, binding.outcome.dataPath)
39464
+ : event.payload;
39465
+ const error = binding.outcome.errorPath
39466
+ ? this.readPath(event.payload, binding.outcome.errorPath)
39467
+ : undefined;
39468
+ return {
39469
+ kind: binding.outcome.kind,
39470
+ type: binding.outcome.type,
39471
+ ...(data !== undefined ? { data } : {}),
39472
+ ...(error !== undefined ? { error } : {}),
39473
+ output: event.output,
39474
+ payload: event.payload,
39475
+ };
39476
+ }
39477
+ readPath(value, path) {
39478
+ return String(path || '')
39479
+ .split('.')
39480
+ .filter(Boolean)
39481
+ .reduce((current, key) => current && typeof current === 'object'
39482
+ ? current[key]
39483
+ : undefined, value);
39484
+ }
39268
39485
  toResourceEvent(ownerWidgetKey, event) {
39269
39486
  const sourceOutput = String(event.output || '').trim();
39270
39487
  if (!sourceOutput) {
@@ -39345,7 +39562,7 @@ class PraxisSurfaceHostComponent {
39345
39562
  };
39346
39563
  }
39347
39564
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisSurfaceHostComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
39348
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: PraxisSurfaceHostComponent, isStandalone: true, selector: "praxis-surface-host", inputs: { title: "title", subtitle: "subtitle", icon: "icon", beforeWidget: "beforeWidget", widget: "widget", afterWidget: "afterWidget", context: "context", strictValidation: "strictValidation", renderTitleInsideBody: "renderTitleInsideBody" }, outputs: { widgetEvent: "widgetEvent", rowClick: "rowClick", selectionChange: "selectionChange", resourceEvent: "resourceEvent" }, viewQueries: [{ propertyName: "beforeWidgetLoader", first: true, predicate: ["beforeWidgetLoader"], descendants: true, read: DynamicWidgetLoaderDirective }, { propertyName: "mainWidgetLoader", first: true, predicate: ["mainWidgetLoader"], descendants: true, read: DynamicWidgetLoaderDirective }, { propertyName: "afterWidgetLoader", first: true, predicate: ["afterWidgetLoader"], descendants: true, read: DynamicWidgetLoaderDirective }], usesOnChanges: true, ngImport: i0, template: `
39565
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: PraxisSurfaceHostComponent, isStandalone: true, selector: "praxis-surface-host", inputs: { title: "title", subtitle: "subtitle", icon: "icon", beforeWidget: "beforeWidget", widget: "widget", afterWidget: "afterWidget", context: "context", lifecycle: "lifecycle", strictValidation: "strictValidation", renderTitleInsideBody: "renderTitleInsideBody" }, outputs: { widgetEvent: "widgetEvent", rowClick: "rowClick", selectionChange: "selectionChange", resourceEvent: "resourceEvent" }, viewQueries: [{ propertyName: "beforeWidgetLoader", first: true, predicate: ["beforeWidgetLoader"], descendants: true, read: DynamicWidgetLoaderDirective }, { propertyName: "mainWidgetLoader", first: true, predicate: ["mainWidgetLoader"], descendants: true, read: DynamicWidgetLoaderDirective }, { propertyName: "afterWidgetLoader", first: true, predicate: ["afterWidgetLoader"], descendants: true, read: DynamicWidgetLoaderDirective }], usesOnChanges: true, ngImport: i0, template: `
39349
39566
  <div class="pdx-surface-host">
39350
39567
  @if (subtitle || (title && renderTitleInsideBody)) {
39351
39568
  <header class="pdx-surface-host__header">
@@ -39484,6 +39701,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
39484
39701
  type: Input
39485
39702
  }], context: [{
39486
39703
  type: Input
39704
+ }], lifecycle: [{
39705
+ type: Input
39487
39706
  }], strictValidation: [{
39488
39707
  type: Input
39489
39708
  }], renderTitleInsideBody: [{
@@ -39910,6 +40129,76 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
39910
40129
  `, styles: [":host{display:block;min-width:0}.pdx-related-outlet{display:block;min-width:0;color:var(--md-sys-color-on-surface, currentColor)}.pdx-related-outlet__state{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--pdx-related-outlet-gap, 12px);min-height:var(--pdx-related-outlet-min-height, 64px);padding:var(--pdx-related-outlet-padding, 12px);border:1px solid var(--md-sys-color-outline-variant, rgba(0, 0, 0, .16));border-radius:var(--pdx-related-outlet-radius, 8px);background:var(--md-sys-color-surface-container-low, var(--md-sys-color-surface, transparent))}.pdx-related-outlet--compact .pdx-related-outlet__state{min-height:var(--pdx-related-outlet-compact-min-height, 48px);padding:var(--pdx-related-outlet-compact-padding, 8px 10px)}.pdx-related-outlet__state--ready{border-color:var(--md-sys-color-primary, currentColor)}.pdx-related-outlet__icon{display:inline-grid;place-items:center;width:32px;height:32px;color:var(--md-sys-color-primary, currentColor)}.pdx-related-outlet__state--busy .pdx-related-outlet__icon{color:var(--md-sys-color-secondary, currentColor)}.pdx-related-outlet__copy{display:grid;gap:2px;min-width:0}.pdx-related-outlet__copy h3,.pdx-related-outlet__copy p{margin:0}.pdx-related-outlet__copy h3{font:var(--md-sys-typescale-title-small, 600 .95rem/1.25rem system-ui);color:var(--md-sys-color-on-surface, currentColor)}.pdx-related-outlet__copy p{font:var(--md-sys-typescale-body-small, 400 .82rem/1.15rem system-ui);color:var(--md-sys-color-on-surface-variant, currentColor)}@media(max-width:600px){.pdx-related-outlet__state{grid-template-columns:auto minmax(0,1fr)}.pdx-related-outlet__state button{grid-column:1 / -1;justify-self:start}}\n"] }]
39911
40130
  }], ctorParameters: () => [], propDecorators: { surface: [{ type: i0.Input, args: [{ isSignal: true, alias: "surface", required: false }] }], surfaceId: [{ type: i0.Input, args: [{ isSignal: true, alias: "surfaceId", required: false }] }], surfaceCatalog: [{ type: i0.Input, args: [{ isSignal: true, alias: "surfaceCatalog", required: false }] }], discoverySource: [{ type: i0.Input, args: [{ isSignal: true, alias: "discoverySource", required: false }] }], parentLinks: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentLinks", required: false }] }], apiEndpointKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "apiEndpointKey", required: false }] }], apiUrlEntry: [{ type: i0.Input, args: [{ isSignal: true, alias: "apiUrlEntry", required: false }] }], parentRecord: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentRecord", required: false }] }], parentResourceId: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentResourceId", required: false }] }], parentResourcePath: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentResourcePath", required: false }] }], presentation: [{ type: i0.Input, args: [{ isSignal: true, alias: "presentation", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], subtitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "subtitle", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], tableId: [{ type: i0.Input, args: [{ isSignal: true, alias: "tableId", required: false }] }], tableConfig: [{ type: i0.Input, args: [{ isSignal: true, alias: "tableConfig", required: false }] }], enableCustomization: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableCustomization", required: false }] }], authoringCapability: [{ type: i0.Input, args: [{ isSignal: true, alias: "authoringCapability", required: false }] }], emptyState: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyState", required: false }] }], queryContext: [{ type: i0.Input, args: [{ isSignal: true, alias: "queryContext", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: false }] }], stateReason: [{ type: i0.Input, args: [{ isSignal: true, alias: "stateReason", required: false }] }], compact: [{ type: i0.Input, args: [{ isSignal: true, alias: "compact", required: false }] }], strictValidation: [{ type: i0.Input, args: [{ isSignal: true, alias: "strictValidation", required: false }] }], ownerWidgetKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "ownerWidgetKey", required: false }] }], surfaceOpen: [{ type: i0.Output, args: ["surfaceOpen"] }], widgetEvent: [{ type: i0.Output, args: ["widgetEvent"] }], resourceEvent: [{ type: i0.Output, args: ["resourceEvent"] }] } });
39912
40131
 
40132
+ const PRAXIS_RELATED_RESOURCE_OUTLET_PORTS = [
40133
+ {
40134
+ id: 'parentResourceId',
40135
+ label: 'Identificador do recurso pai',
40136
+ direction: 'input',
40137
+ semanticKind: 'value',
40138
+ schema: {
40139
+ id: 'string | number | null',
40140
+ kind: 'ts-type',
40141
+ ref: 'string | number | null',
40142
+ },
40143
+ description: 'Seleção canônica que governa a resolução da coleção filha.',
40144
+ exposure: { public: true, group: 'context' },
40145
+ },
40146
+ {
40147
+ id: 'queryContext',
40148
+ label: 'Contexto de consulta',
40149
+ direction: 'input',
40150
+ semanticKind: 'query-context',
40151
+ schema: {
40152
+ id: 'RelatedResourceQueryContext',
40153
+ kind: 'ts-type',
40154
+ ref: 'RelatedResourceQueryContext',
40155
+ },
40156
+ description: 'Contexto adicional mesclado ao filtro pai-filho publicado pela surface.',
40157
+ exposure: { public: true, advanced: true, group: 'context' },
40158
+ },
40159
+ {
40160
+ id: 'surfaceOpen',
40161
+ label: 'Abertura da superfície relacionada',
40162
+ direction: 'output',
40163
+ semanticKind: 'event',
40164
+ schema: {
40165
+ id: 'SurfaceOpenPayload',
40166
+ kind: 'ts-type',
40167
+ ref: 'SurfaceOpenPayload',
40168
+ },
40169
+ cardinality: 'stream',
40170
+ description: 'Solicita ao host a abertura mediada da superfície no modo open-action.',
40171
+ exposure: { public: true, group: 'events' },
40172
+ },
40173
+ {
40174
+ id: 'widgetEvent',
40175
+ label: 'Evento do widget relacionado',
40176
+ direction: 'output',
40177
+ semanticKind: 'event',
40178
+ schema: {
40179
+ id: 'WidgetEventEnvelope',
40180
+ kind: 'ts-type',
40181
+ ref: 'WidgetEventEnvelope',
40182
+ },
40183
+ cardinality: 'stream',
40184
+ description: 'Reemite eventos do widget filho com identidade de ownership.',
40185
+ exposure: { public: true, advanced: true, group: 'events' },
40186
+ },
40187
+ {
40188
+ id: 'resourceEvent',
40189
+ label: 'Evento canônico do recurso relacionado',
40190
+ direction: 'output',
40191
+ semanticKind: 'event',
40192
+ schema: {
40193
+ id: 'PraxisResourceEvent',
40194
+ kind: 'ts-type',
40195
+ ref: 'PraxisResourceEvent',
40196
+ },
40197
+ cardinality: 'stream',
40198
+ description: 'Promove seleção, mutação e lifecycle do recurso filho para a composição.',
40199
+ exposure: { public: true, group: 'events' },
40200
+ },
40201
+ ];
39913
40202
  const PRAXIS_RELATED_RESOURCE_OUTLET_COMPONENT_METADATA = {
39914
40203
  id: 'praxis-related-resource-outlet',
39915
40204
  selector: 'praxis-related-resource-outlet',
@@ -39928,21 +40217,29 @@ const PRAXIS_RELATED_RESOURCE_OUTLET_COMPONENT_METADATA = {
39928
40217
  { name: 'parentRecord', type: 'Record<string, unknown> | null', description: 'Registro pai usado para resolver parentIdPathVariable.' },
39929
40218
  { name: 'parentResourceId', type: 'string | number | null', description: 'Identificador explícito do registro pai quando não vem do record.' },
39930
40219
  { name: 'parentResourcePath', type: 'string | null', description: 'ResourcePath do recurso pai para contexto da surface.' },
40220
+ { name: 'presentation', type: 'SurfacePresentation', description: 'Apresentação usada no payload de abertura host-mediated.', default: 'drawer' },
40221
+ { name: 'title', type: 'string | null', description: 'Título opcional que substitui o título publicado pela surface.' },
40222
+ { name: 'subtitle', type: 'string | null', description: 'Subtítulo opcional que substitui a descrição publicada pela surface.' },
40223
+ { name: 'icon', type: 'string | null', description: 'Ícone opcional da superfície relacionada.' },
39931
40224
  { name: 'queryContext', type: 'RelatedResourceQueryContext | null', description: 'QueryContext base mesclado com o filtro canônico da relação filha.' },
40225
+ { name: 'tableId', type: 'string | null', description: 'Identidade estável da tabela filha para persistência, observabilidade e testes.' },
39932
40226
  { name: 'tableConfig', type: 'Record<string, unknown> | null', description: 'Configuracao parcial da tabela filha materializada, mesclada ao preset canonico.' },
39933
40227
  { name: 'emptyState', type: 'Record<string, unknown> | null', description: 'Override opcional para behavior.emptyState da tabela filha. Quando omitido, o outlet deriva texto, icone, layout e ação create a partir de surface.relatedResource e dos metadados da surface.' },
39934
40228
  { name: 'enableCustomization', type: 'boolean', description: 'Opt-in explicito para authoring governado da tabela filha.', default: false },
39935
40229
  { name: 'authoringCapability', type: 'string | null', description: 'Capability publica do EnterpriseRuntimeContext exigida quando o authoring da tabela filha estiver habilitado.' },
39936
40230
  { name: 'mode', type: "'inline' | 'open-action'", description: 'Renderiza a tabela filha inline ou emite payload para abertura host-mediated.', default: 'inline' },
39937
40231
  { name: 'state', type: 'RelatedResourceResolutionState | null', description: 'Override de estado para hosts/outlets que estejam carregando discovery remoto.' },
40232
+ { name: 'stateReason', type: 'string | null', description: 'Motivo governado associado ao override de estado.' },
39938
40233
  { name: 'compact', type: 'boolean', description: 'Reduz densidade visual dos estados não materializados.', default: false },
39939
40234
  { name: 'strictValidation', type: 'boolean', description: 'Validação estrita do widget materializado pelo DynamicWidgetLoader.', default: false },
40235
+ { name: 'ownerWidgetKey', type: 'string', description: 'Identidade do owner usada para correlacionar eventos do widget filho.', default: 'related-resource.outlet' },
39940
40236
  ],
39941
40237
  outputs: [
39942
40238
  { name: 'surfaceOpen', type: 'SurfaceOpenPayload', description: 'Emitido em modo open-action com o payload pronto de surface.open.' },
39943
40239
  { name: 'widgetEvent', type: 'WidgetEventEnvelope', description: 'Reemite eventos do widget filho materializado.' },
39944
40240
  { name: 'resourceEvent', type: 'PraxisResourceEvent', description: 'Promove eventos canonicos emitidos pelo widget filho materializado.' },
39945
40241
  ],
40242
+ ports: PRAXIS_RELATED_RESOURCE_OUTLET_PORTS,
39946
40243
  tags: ['resource', 'surface', 'related-resource', 'runtime', 'metadata-driven'],
39947
40244
  lib: '@praxisui/core',
39948
40245
  };
@@ -41453,4 +41750,4 @@ function provideHookWhitelist(allowed) {
41453
41750
  * Generated bundle index. Do not edit.
41454
41751
  */
41455
41752
 
41456
- 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, COMPONENT_METADATA_REGISTRY_I18N_CONFIG, COMPONENT_METADATA_REGISTRY_I18N_NAMESPACE, CONFIG_STORAGE, CONNECTION_STORAGE, ComponentKeyService, ComponentMetadataRegistry, CompositionRuntimeFacade, ConsoleLoggerSink, CrudOperationResolutionService, DEFAULT_FIELD_SELECTOR_CONTROL_TYPE_MAP, DEFAULT_JSON_LOGIC_OPERATORS, DEFAULT_TABLE_CONFIG, DOMAIN_CATALOG_COMPONENT_CONTEXT_PACK, DOMAIN_CATALOG_CONTEXT_HINT_SCHEMA_VERSION, DYNAMIC_PAGE_AI_CAPABILITIES, DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK, DYNAMIC_PAGE_CONFIG_EDITOR, DYNAMIC_PAGE_SHELL_EDITOR, DefaultLoadingRenderer, DeferredAsyncConfigStorage, DomainCatalogService, DomainKnowledgeService, DomainRuleService, 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, EnterpriseRuntimeContextService, 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, GLOBAL_ACTION_HANDLERS, 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, NestedPortCatalogService, NestedWidgetConfigAccessor, NumericFormat, OVERLAY_DECIDER_DEBUG, OVERLAY_DECISION_MATRIX, ObservabilityDashboardService, OverlayDeciderService, PRAXIS_COLLECTION_EXPORT_HTTP_OPTIONS, PRAXIS_COLLECTION_EXPORT_PROVIDER, PRAXIS_CORPORATE_SENSITIVE_KEYS, PRAXIS_DEFAULT_EXPORT_SECURITY_POLICY, PRAXIS_DEFAULT_OBSERVABILITY_ALERT_RULES, PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA, PRAXIS_ENTERPRISE_RUNTIME_CONTEXT_OPTIONS, PRAXIS_ENTERPRISE_RUNTIME_CONTEXT_READY, PRAXIS_EXPORT_FORMULA_PREFIXES, PRAXIS_EXPORT_SECURITY_POLICY, 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_QUERY_FILTER_EXPRESSION_SCHEMA_VERSION, PRAXIS_RELATED_RESOURCE_OUTLET_COMPONENT_METADATA, PRAXIS_RICH_TEXT_BLOCK_METADATA, PRAXIS_TABLE_DETAIL_INLINE_NODE_RESOLVERS, PRAXIS_TABLE_DETAIL_INLINE_RENDERERS, PRAXIS_TELEMETRY_TRANSPORT, PRAXIS_THEME_SURFACE_DEFAULTS, PRAXIS_THEME_SURFACE_VARS, PRAXIS_USER_CONTEXT_SUMMARY_METADATA, PRIVACY_CONSENT_EDITORIAL_SOLUTION, PRIVACY_CONSENT_EDITORIAL_TEMPLATE, PraxisCollectionExportService, PraxisCore, PraxisFooterLinksComponent, PraxisGlobalErrorHandler, PraxisHeroBannerComponent, PraxisHttpCollectionExportProvider, PraxisI18nService, PraxisIconButtonComponent, PraxisIconDirective, PraxisIconPickerComponent, PraxisJsonLogicError, PraxisJsonLogicService, PraxisLayerScaleStyleService, PraxisLegalNoticeComponent, PraxisLoadingInterceptor, PraxisRelatedResourceOutletComponent, PraxisResourceIdentityComponent, PraxisRichTextBlockComponent, PraxisRuntimeComponentObservationRegistryService, PraxisSurfaceHostComponent, PraxisUserContextSummaryComponent, RESOURCE_DISCOVERY_I18N_CONFIG, RESOURCE_DISCOVERY_I18N_NAMESPACE, RULE_PROPERTY_SCHEMA, RelatedResourceSurfaceResolverService, RemoteConfigStorage, ResourceActionOpenAdapterService, ResourceDiscoveryService, ResourceQuickConnectComponent, ResourceRecordOpenError, ResourceRecordOpenService, 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, SurfaceOpenMaterializerService, SurfaceOutletRegistryService, TABLE_CONFIG_EDITOR, TableConfigService, TelemetryLoggerSink, TelemetryService, ValidationPattern, WidgetPageStateRuntimeService, WidgetShellComponent, applyLocalCustomizations$2 as applyLocalCustomizations, applyLocalCustomizations$1 as applyLocalFormCustomizations, assertPraxisCollectionExportArtifact, assertPraxisRuntimeComponentObservationSerializable, buildAngularValidators, buildApiUrl, buildBaseColumnFromDef, buildBaseFormField, buildFormConfigFromEditorialTemplate, buildHeaders, buildPageKey, buildPraxisEffectDistinctKey, buildPraxisLayerScaleCss, buildPraxisThemeSurfaceCss, buildSchemaId, buildSchemaIdStorageKeySegment, buildValidatorsFromValidatorOptions, cancelIfCpfInvalidHook, clampRange, classifyEntityLookupResult, clonePraxisRuntimeComponentObservation, cloneTableConfig, cnpjAlphaValidator, collapseWhitespace, composeHeadersWithVersion, conditionalAsyncValidator, convertFormLayoutToConfig, createCorporateLoggerConfig, createCorporateObservabilityOptions, createCpfCnpjValidator, createDefaultFormConfig, createDefaultTableConfig, createEmptyFormConfig, createEmptyRichContentDocument, createFieldLayoutItem, createPersistedPage, customAsyncValidatorFn, customValidatorFn, debounceAsyncValidator, deepMerge, domainKnowledgeTimelineToRichContentDocument, domainRuleTimelineToRichContentDocument, ensureIds, ensureNoConflictsHookFactory, ensurePageIds, escapePraxisExportCell, evaluateFieldAccess, extractNormalizedError, fetchWithETag, fileTypeValidator, fillUndefined, generateId, getDefaultFormHints, getEditorialCompliancePresetById, getEditorialFormTemplateById, getEditorialFormTemplateCatalog, getEditorialSolutionById, getEditorialSolutionCatalog, getEditorialSolutionPresetById, getEditorialThemePresetById, getEssentialConfig, getFieldMetadataCapabilities, getFormColumnFieldNames, getFormLayoutFieldNames, getGlobalActionCatalog, getGlobalActionPayloadActualType, getGlobalActionPayloadTypeIssue, getGlobalActionUiSchema, getMissingGlobalActionPayloadKeys, getReferencedFieldMetadata, getRequiredGlobalActionPayloadKeys, getTextTransformer, hasMeaningfulGlobalActionPayloadValue, hasPraxisCollectionExportArtifact, interpolatePraxisTranslation, isAllowedEditorialContentFormat, isAllowedEditorialHref, isCssTextTransform, isEditorialComponentMeta, isEntityLookupMultiplePayloadMode, isEntityLookupPayloadMode, isEntityLookupPayloadModeCompatible, isEntityLookupResultSelectable, isEntityLookupSinglePayloadMode, isFormLayoutItem, isGlobalActionRef, isInlineFilterControlType, isLookupDialogSize, isLookupFilterFieldType, isLookupFilterOperator, isPraxisPresentationVisualizationTableSafe, isPraxisRuntimeGlobalActionEffect, isProgrammaticDateRangePreset, isRangeValidForFilter, isRequiredGlobalActionParamPayloadMissing, isRequiredGlobalActionPayloadMissing, isStaticDateRangePreset, isTableConfigV2, isValidFormConfig, isValidTableConfig, legacyCnpjValidator, legacyCpfValidator, logOnErrorHook, mapFieldDefinitionToMetadata, mapFieldDefinitionsToMetadata, matchFieldValidator, materializeFormLayoutFromMetadata, materializeResourceIdentity, maxFileSizeValidator, mergeFieldMetadata, mergePraxisI18nConfigs, mergeTableConfigs, migrateFormLayoutRule, migrateLegacyCompositionLink, migrateLegacyCompositionLinks, minWordsValidator, normalizeControlTypeKey, normalizeControlTypeToken, normalizeEditorialLink, normalizeEnd, normalizeFieldAccessMetadata, normalizeFieldConstraints, normalizeFieldPresentation, normalizeFormConfig, normalizeFormLayoutItems, normalizeFormMetadata, normalizeGlobalActionRef$1 as normalizeGlobalActionRef, normalizeLayoutPolicy, normalizeLookupFilterRequest, normalizePath, normalizePraxisDataQueryContext, normalizePraxisEffectPolicy, normalizePraxisPresentationVisualization, normalizePraxisQueryFilterExpression, normalizePraxisQueryFilterNode, normalizeResourceAvailabilityReasonCode, normalizeResourceIdentityContract, normalizeStart, normalizeUnknownError, normalizeWidgetEventPath, notifySuccessHook, parseJsonResponseOrEmpty, praxisLoadingInterceptorFn, prefillFromContextHook, provideDefaultFormHooks, provideFieldSelectorRegistryBase, provideFieldSelectorRegistryOverride, provideFieldSelectorRegistryRuntime, provideFormHookPresets, provideFormHooks, provideGlobalActionCatalog, provideGlobalActionHandler, provideGlobalConfig, provideGlobalConfigReady, provideGlobalConfigSeed, provideGlobalConfigTenant, provideHookResolvers, provideHookWhitelist, provideOverlayDecisionMatrix, providePraxisAnalyticsGlobalActions, providePraxisCollectionExportProvider, providePraxisDynamicPageMetadata, providePraxisEnterpriseRuntimeContext, providePraxisFooterLinksMetadata, providePraxisGlobalActionCatalog, providePraxisGlobalActions, providePraxisGlobalConfigBootstrap, providePraxisHeroBannerMetadata, providePraxisHttpCollectionExportProvider, providePraxisHttpLoading, providePraxisI18n, providePraxisI18nConfig, providePraxisI18nTranslator, providePraxisIconDefaults, providePraxisJsonLogicOperator, providePraxisJsonLogicOperatorOverride, providePraxisLegalNoticeMetadata, providePraxisLoadingDefaults, providePraxisLogging, providePraxisRelatedResourceOutletMetadata, providePraxisRichTextBlockMetadata, providePraxisToastGlobalActions, providePraxisUserContextSummaryMetadata, provideRemoteGlobalConfig, readPraxisExportValue, reconcileFilterConfig, reconcileFormConfig, reconcileTableConfig, registerPraxisRuntimeComponentObservation, removeDiacritics, renderPraxisPresentationVisualizationHtml, reportTelemetryHookFactory, requiredCheckedValidator, requiredPresenceValidator, resolveBuiltinPresets, resolveColumnTypeFromFieldDefinition, resolveControlTypeAlias, resolveDateRangeShortcutPreset, resolveDateRangeShortcutPresets, resolveDefaultValuePresentationFormat, resolveEntityLookupPayloadMode, resolveFieldPresentation, resolveHidden, resolveInlineFilterControlType, resolveInlineFilterControlTypeToBaseControlType, resolveLoggerConfig, resolveObservabilityOptions, resolveOffset, resolveOrder, resolvePraxisCollectionExportItems, resolvePraxisExportFields, resolvePraxisExportScope, resolvePraxisFilterCriteria, resolveResourceAvailabilityReasonKey, resolveResourceIdentityContract, resolveSpan, resolveTextMaskFormat, resolveTextMaskFormatFromFieldDefinition, resolveValuePresentation, resolveValuePresentationLocale, serializeEntityLookupValueForPayload, serializeOptionSourceFilterRequest, serializePraxisCollectionToCsv, serializePraxisCollectionToExcel, serializePraxisCollectionToJson, slugify, staticDateRangePresetToPreset, stripMasksHook, supportsImplicitValuePresentation, syncWithServerMetadata, toCamel, toCapitalize, toKebab, toPascal, toSentenceCase, toSnake, toTitleCase, translateResourceAvailabilityReason, translateResourceDiscoveryText, translateUnavailableWorkflowMessage, trim, uniqueAsyncValidator, urlValidator, validateGlobalActionRef, validateGlobalActionRefs, withFormConfigSections, withMessage, withPraxisHttpLoading };
41753
+ 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, COMPONENT_METADATA_REGISTRY_I18N_CONFIG, COMPONENT_METADATA_REGISTRY_I18N_NAMESPACE, CONFIG_STORAGE, CONNECTION_STORAGE, ComponentKeyService, ComponentMetadataRegistry, CompositionRuntimeFacade, ConsoleLoggerSink, CrudOperationResolutionService, DEFAULT_FIELD_SELECTOR_CONTROL_TYPE_MAP, DEFAULT_JSON_LOGIC_OPERATORS, DEFAULT_TABLE_CONFIG, DOMAIN_CATALOG_COMPONENT_CONTEXT_PACK, DOMAIN_CATALOG_CONTEXT_HINT_SCHEMA_VERSION, DYNAMIC_PAGE_AI_CAPABILITIES, DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK, DYNAMIC_PAGE_CONFIG_EDITOR, DYNAMIC_PAGE_SHELL_EDITOR, DefaultLoadingRenderer, DeferredAsyncConfigStorage, DomainCatalogService, DomainKnowledgeService, DomainRuleService, 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, EnterpriseRuntimeContextService, 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, GLOBAL_ACTION_HANDLERS, 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, NestedPortCatalogService, NestedWidgetConfigAccessor, NumericFormat, OVERLAY_DECIDER_DEBUG, OVERLAY_DECISION_MATRIX, ObservabilityDashboardService, OverlayDeciderService, PRAXIS_COLLECTION_EXPORT_HTTP_OPTIONS, PRAXIS_COLLECTION_EXPORT_PROVIDER, PRAXIS_CORPORATE_SENSITIVE_KEYS, PRAXIS_DEFAULT_EXPORT_SECURITY_POLICY, PRAXIS_DEFAULT_OBSERVABILITY_ALERT_RULES, PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA, PRAXIS_ENTERPRISE_RUNTIME_CONTEXT_OPTIONS, PRAXIS_ENTERPRISE_RUNTIME_CONTEXT_READY, PRAXIS_EXPORT_FORMULA_PREFIXES, PRAXIS_EXPORT_SECURITY_POLICY, 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_QUERY_FILTER_EXPRESSION_SCHEMA_VERSION, PRAXIS_RELATED_RESOURCE_OUTLET_COMPONENT_METADATA, PRAXIS_RELATED_RESOURCE_OUTLET_PORTS, PRAXIS_RICH_TEXT_BLOCK_METADATA, PRAXIS_TABLE_DETAIL_INLINE_NODE_RESOLVERS, PRAXIS_TABLE_DETAIL_INLINE_RENDERERS, PRAXIS_TABLE_DETAIL_RESOURCE_RESOLVER, PRAXIS_TELEMETRY_TRANSPORT, PRAXIS_THEME_SURFACE_DEFAULTS, PRAXIS_THEME_SURFACE_VARS, PRAXIS_USER_CONTEXT_SUMMARY_METADATA, PRIVACY_CONSENT_EDITORIAL_SOLUTION, PRIVACY_CONSENT_EDITORIAL_TEMPLATE, PraxisCollectionExportService, PraxisCore, PraxisFooterLinksComponent, PraxisGlobalErrorHandler, PraxisHeroBannerComponent, PraxisHttpCollectionExportProvider, PraxisI18nService, PraxisIconButtonComponent, PraxisIconDirective, PraxisIconPickerComponent, PraxisJsonLogicError, PraxisJsonLogicService, PraxisLayerScaleStyleService, PraxisLegalNoticeComponent, PraxisLoadingInterceptor, PraxisRelatedResourceOutletComponent, PraxisResourceIdentityComponent, PraxisRichTextBlockComponent, PraxisRuntimeComponentObservationRegistryService, PraxisSurfaceHostComponent, PraxisUserContextSummaryComponent, RESOURCE_DISCOVERY_I18N_CONFIG, RESOURCE_DISCOVERY_I18N_NAMESPACE, RULE_PROPERTY_SCHEMA, RelatedResourceSurfaceResolverService, RemoteConfigStorage, ResourceActionOpenAdapterService, ResourceDiscoveryService, ResourceQuickConnectComponent, ResourceRecordOpenError, ResourceRecordOpenService, 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, SurfaceOpenMaterializerService, SurfaceOutletRegistryService, TABLE_CONFIG_EDITOR, TableConfigService, TelemetryLoggerSink, TelemetryService, ValidationPattern, WidgetPageStateRuntimeService, WidgetShellComponent, applyLocalCustomizations$2 as applyLocalCustomizations, applyLocalCustomizations$1 as applyLocalFormCustomizations, assertPraxisCollectionExportArtifact, assertPraxisRuntimeComponentObservationSerializable, buildAngularValidators, buildApiUrl, buildBaseColumnFromDef, buildBaseFormField, buildFormConfigFromEditorialTemplate, buildHeaders, buildPageKey, buildPraxisEffectDistinctKey, buildPraxisLayerScaleCss, buildPraxisThemeSurfaceCss, buildSchemaId, buildSchemaIdStorageKeySegment, buildValidatorsFromValidatorOptions, cancelIfCpfInvalidHook, clampRange, classifyEntityLookupResult, clonePraxisRuntimeComponentObservation, cloneTableConfig, cnpjAlphaValidator, collapseWhitespace, composeHeadersWithVersion, conditionalAsyncValidator, convertFormLayoutToConfig, createCorporateLoggerConfig, createCorporateObservabilityOptions, createCpfCnpjValidator, createDefaultFormConfig, createDefaultTableConfig, createEmptyFormConfig, createEmptyRichContentDocument, createFieldLayoutItem, createPersistedPage, customAsyncValidatorFn, customValidatorFn, debounceAsyncValidator, deepMerge, domainKnowledgeTimelineToRichContentDocument, domainRuleTimelineToRichContentDocument, ensureIds, ensureNoConflictsHookFactory, ensurePageIds, escapePraxisExportCell, evaluateFieldAccess, extractNormalizedError, fetchWithETag, fileTypeValidator, fillUndefined, generateId, getDefaultFormHints, getEditorialCompliancePresetById, getEditorialFormTemplateById, getEditorialFormTemplateCatalog, getEditorialSolutionById, getEditorialSolutionCatalog, getEditorialSolutionPresetById, getEditorialThemePresetById, getEssentialConfig, getFieldMetadataCapabilities, getFormColumnFieldNames, getFormLayoutFieldNames, getGlobalActionCatalog, getGlobalActionPayloadActualType, getGlobalActionPayloadTypeIssue, getGlobalActionUiSchema, getMissingGlobalActionPayloadKeys, getPraxisTableCellVisualizationConstraint, getPraxisTableCellVisualizationGuidance, getReferencedFieldMetadata, getRequiredGlobalActionPayloadKeys, getTextTransformer, hasMeaningfulGlobalActionPayloadValue, hasPraxisCollectionExportArtifact, interpolatePraxisTranslation, isAllowedEditorialContentFormat, isAllowedEditorialHref, isCssTextTransform, isEditorialComponentMeta, isEntityLookupMultiplePayloadMode, isEntityLookupPayloadMode, isEntityLookupPayloadModeCompatible, isEntityLookupResultSelectable, isEntityLookupSinglePayloadMode, isFormLayoutItem, isGlobalActionRef, isInlineFilterControlType, isLookupDialogSize, isLookupFilterFieldType, isLookupFilterOperator, isPraxisPresentationVisualizationTableSafe, isPraxisRuntimeGlobalActionEffect, isProgrammaticDateRangePreset, isRangeValidForFilter, isRequiredGlobalActionParamPayloadMissing, isRequiredGlobalActionPayloadMissing, isStaticDateRangePreset, isTableConfigV2, isValidFormConfig, isValidTableConfig, legacyCnpjValidator, legacyCpfValidator, logOnErrorHook, mapFieldDefinitionToMetadata, mapFieldDefinitionsToMetadata, matchFieldValidator, materializeFormLayoutFromMetadata, materializeResourceIdentity, maxFileSizeValidator, mergeFieldMetadata, mergePraxisI18nConfigs, mergeTableConfigs, migrateFormLayoutRule, migrateLegacyCompositionLink, migrateLegacyCompositionLinks, minWordsValidator, normalizeControlTypeKey, normalizeControlTypeToken, normalizeEditorialLink, normalizeEnd, normalizeFieldAccessMetadata, normalizeFieldConstraints, normalizeFieldPresentation, normalizeFormConfig, normalizeFormLayoutItems, normalizeFormMetadata, normalizeGlobalActionRef$1 as normalizeGlobalActionRef, normalizeLayoutPolicy, normalizeLookupFilterRequest, normalizePath, normalizePraxisDataQueryContext, normalizePraxisEffectPolicy, normalizePraxisPresentationVisualization, normalizePraxisQueryFilterExpression, normalizePraxisQueryFilterNode, normalizeResourceAvailabilityReasonCode, normalizeResourceIdentityContract, normalizeStart, normalizeUnknownError, normalizeWidgetEventPath, notifySuccessHook, parseJsonResponseOrEmpty, praxisLoadingInterceptorFn, prefillFromContextHook, provideDefaultFormHooks, provideFieldSelectorRegistryBase, provideFieldSelectorRegistryOverride, provideFieldSelectorRegistryRuntime, provideFormHookPresets, provideFormHooks, provideGlobalActionCatalog, provideGlobalActionHandler, provideGlobalConfig, provideGlobalConfigReady, provideGlobalConfigSeed, provideGlobalConfigTenant, provideHookResolvers, provideHookWhitelist, provideOverlayDecisionMatrix, providePraxisAnalyticsGlobalActions, providePraxisCollectionExportProvider, providePraxisDynamicPageMetadata, providePraxisEnterpriseRuntimeContext, providePraxisFooterLinksMetadata, providePraxisGlobalActionCatalog, providePraxisGlobalActions, providePraxisGlobalConfigBootstrap, providePraxisHeroBannerMetadata, providePraxisHttpCollectionExportProvider, providePraxisHttpLoading, providePraxisI18n, providePraxisI18nConfig, providePraxisI18nTranslator, providePraxisIconDefaults, providePraxisJsonLogicOperator, providePraxisJsonLogicOperatorOverride, providePraxisLegalNoticeMetadata, providePraxisLoadingDefaults, providePraxisLogging, providePraxisRelatedResourceOutletMetadata, providePraxisRichTextBlockMetadata, providePraxisToastGlobalActions, providePraxisUserContextSummaryMetadata, provideRemoteGlobalConfig, readPraxisExportValue, reconcileFilterConfig, reconcileFormConfig, reconcileTableConfig, registerPraxisRuntimeComponentObservation, removeDiacritics, renderPraxisPresentationVisualizationHtml, reportTelemetryHookFactory, requiredCheckedValidator, requiredPresenceValidator, resolveBuiltinPresets, resolveColumnTypeFromFieldDefinition, resolveControlTypeAlias, resolveDateRangeShortcutPreset, resolveDateRangeShortcutPresets, resolveDefaultValuePresentationFormat, resolveEntityLookupPayloadMode, resolveFieldPresentation, resolveHidden, resolveInlineFilterControlType, resolveInlineFilterControlTypeToBaseControlType, resolveLoggerConfig, resolveObservabilityOptions, resolveOffset, resolveOrder, resolvePraxisCollectionExportItems, resolvePraxisExportFields, resolvePraxisExportScope, resolvePraxisFilterCriteria, resolveResourceAvailabilityReasonKey, resolveResourceIdentityContract, resolveSpan, resolveTextMaskFormat, resolveTextMaskFormatFromFieldDefinition, resolveValuePresentation, resolveValuePresentationLocale, serializeEntityLookupValueForPayload, serializeOptionSourceFilterRequest, serializePraxisCollectionToCsv, serializePraxisCollectionToExcel, serializePraxisCollectionToJson, slugify, staticDateRangePresetToPreset, stripMasksHook, supportsImplicitValuePresentation, syncWithServerMetadata, toCamel, toCapitalize, toKebab, toPascal, toSentenceCase, toSnake, toTitleCase, translateResourceAvailabilityReason, translateResourceDiscoveryText, translateUnavailableWorkflowMessage, trim, uniqueAsyncValidator, urlValidator, validateGlobalActionRef, validateGlobalActionRefs, withFormConfigSections, withMessage, withPraxisHttpLoading };