@praxisui/core 10.0.0-rc.12 → 10.0.0-rc.13

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.
@@ -3551,6 +3551,20 @@ class SchemaNormalizationKernel {
3551
3551
  }
3552
3552
  fields.push(field);
3553
3553
  }
3554
+ if (fields.length === 0 &&
3555
+ properties['parameters'] &&
3556
+ typeof properties['parameters'] === 'object' &&
3557
+ !Array.isArray(properties['parameters'])) {
3558
+ const parametersProp = properties['parameters'];
3559
+ const resolvedParametersSchema = this.resolveSchemaRef(parametersProp.$ref, rootSchema) ?? parametersProp;
3560
+ if (resolvedParametersSchema &&
3561
+ typeof resolvedParametersSchema === 'object' &&
3562
+ resolvedParametersSchema !== schema &&
3563
+ resolvedParametersSchema.properties &&
3564
+ typeof resolvedParametersSchema.properties === 'object') {
3565
+ return this.normalizeObjectSchema(resolvedParametersSchema, rootSchema);
3566
+ }
3567
+ }
3554
3568
  // Order by the optional 'order' property when present
3555
3569
  fields.sort((a, b) => {
3556
3570
  const orderA = a.order ?? Number.MAX_SAFE_INTEGER;
@@ -10966,15 +10980,26 @@ const DEFAULT_JSON_LOGIC_OPERATORS = [
10966
10980
  operator: 'round',
10967
10981
  namespace: 'praxis',
10968
10982
  minArgs: 1,
10969
- maxArgs: 1,
10983
+ maxArgs: 2,
10970
10984
  returnType: 'number',
10971
10985
  purity: 'pure',
10972
10986
  evaluate: (args, _context, helpers) => {
10973
- const [value] = helpers.requireArgs('round', args, 1, 1);
10987
+ const [value, precisionArg] = helpers.requireArgs('round', args, 1, 2);
10974
10988
  if (typeof value !== 'number' || !Number.isFinite(value)) {
10975
10989
  throw new PraxisJsonLogicError('RULE_ARGUMENT_TYPE_INVALID', '`round` requires a finite numeric argument.');
10976
10990
  }
10977
- return Math.round(value);
10991
+ if (precisionArg === undefined || precisionArg === null) {
10992
+ return Math.round(value);
10993
+ }
10994
+ if (typeof precisionArg !== 'number' || !Number.isFinite(precisionArg)) {
10995
+ throw new PraxisJsonLogicError('RULE_ARGUMENT_TYPE_INVALID', '`round` precision must be a finite numeric argument.');
10996
+ }
10997
+ const decimals = Math.max(0, Math.min(10, Math.trunc(precisionArg)));
10998
+ if (decimals === 0) {
10999
+ return Math.round(value);
11000
+ }
11001
+ const factor = Math.pow(10, decimals);
11002
+ return Math.round((value + Number.EPSILON) * factor) / factor;
10978
11003
  },
10979
11004
  },
10980
11005
  {
@@ -11485,7 +11510,7 @@ function hasPath(target, path) {
11485
11510
  return true;
11486
11511
  }
11487
11512
 
11488
- const DEFAULT_JSON_LOGIC$3 = new PraxisJsonLogicService(null);
11513
+ const DEFAULT_JSON_LOGIC$4 = new PraxisJsonLogicService(null);
11489
11514
  const FORM_RULE_OPTIONS = {
11490
11515
  availableRoots: ['form'],
11491
11516
  defaultRoot: 'form',
@@ -11673,7 +11698,7 @@ function matchesConditionalValidationRule(jsonLogic, condition, model) {
11673
11698
  throw error;
11674
11699
  }
11675
11700
  }
11676
- function composeConditionalValidators(rules, jsonLogic = DEFAULT_JSON_LOGIC$3) {
11701
+ function composeConditionalValidators(rules, jsonLogic = DEFAULT_JSON_LOGIC$4) {
11677
11702
  // Build per-rule validators once
11678
11703
  const built = rules.map((r) => buildValidatorsFromValidatorOptions(r.validators, jsonLogic));
11679
11704
  const sync = (control) => {
@@ -11918,7 +11943,7 @@ function buildAngularValidators(field) {
11918
11943
  av.push(uniqueAsyncValidator(field.uniqueValidator, field.uniqueMessage));
11919
11944
  // Conditional (canonical declarative array)
11920
11945
  if (Array.isArray(field.conditionalValidation)) {
11921
- const composed = composeConditionalValidators(field.conditionalValidation, DEFAULT_JSON_LOGIC$3);
11946
+ const composed = composeConditionalValidators(field.conditionalValidation, DEFAULT_JSON_LOGIC$4);
11922
11947
  if (composed.sync)
11923
11948
  v.push(composed.sync);
11924
11949
  if (composed.async)
@@ -11936,7 +11961,7 @@ function isBooleanRequiredField(field) {
11936
11961
  const type = String(field.type ?? field.dataType ?? '').toLowerCase();
11937
11962
  return type === 'boolean' || controlType === 'checkbox' || controlType === 'toggle';
11938
11963
  }
11939
- function buildValidatorsFromValidatorOptions(opts = {}, jsonLogic = DEFAULT_JSON_LOGIC$3) {
11964
+ function buildValidatorsFromValidatorOptions(opts = {}, jsonLogic = DEFAULT_JSON_LOGIC$4) {
11940
11965
  const v = [];
11941
11966
  let av = [];
11942
11967
  if (opts.required)
@@ -15591,6 +15616,70 @@ class PraxisBulkClientService {
15591
15616
  })
15592
15617
  .pipe(map((res) => this.unwrap(res)));
15593
15618
  }
15619
+ /**
15620
+ * Consulta a pagina de resultados por item de uma proposta (cursor-based pagination).
15621
+ */
15622
+ getProposalResults(proposalResultsOp, proposalId, size = 100, after, options) {
15623
+ const path = this.interpolatePath(this.extractOpPath(proposalResultsOp), { proposalId });
15624
+ const baseUrl = this.resolveUrl(path, options);
15625
+ const sep = baseUrl.includes('?') ? '&' : '?';
15626
+ const cursorParam = after ? `&after=${encodeURIComponent(after)}` : '';
15627
+ const url = `${baseUrl}${sep}size=${encodeURIComponent(String(size))}${cursorParam}`;
15628
+ const headers = this.buildHeaders(options);
15629
+ const method = this.extractOpMethod(proposalResultsOp, 'GET');
15630
+ return this.http
15631
+ .request(method, url, { headers })
15632
+ .pipe(map((res) => {
15633
+ const raw = this.unwrap(res);
15634
+ const items = Array.isArray(raw?.items)
15635
+ ? raw.items
15636
+ : Array.isArray(raw?.content)
15637
+ ? raw.content
15638
+ : [];
15639
+ const nextCursor = raw?.nextCursor ?? raw?.next ?? null;
15640
+ return {
15641
+ ...raw,
15642
+ items,
15643
+ nextCursor,
15644
+ hasMore: Boolean(raw?.hasMore ?? nextCursor),
15645
+ };
15646
+ }));
15647
+ }
15648
+ /**
15649
+ * Consulta a pagina de resultados por item de uma execucao (cursor-based pagination).
15650
+ */
15651
+ getExecutionResults(resultsOp, executionId, size = 100, after, options) {
15652
+ const path = this.interpolatePath(this.extractOpPath(resultsOp), { executionId });
15653
+ const baseUrl = this.resolveUrl(path, options);
15654
+ const sep = baseUrl.includes('?') ? '&' : '?';
15655
+ const cursorParam = after ? `&after=${encodeURIComponent(after)}` : '';
15656
+ const url = `${baseUrl}${sep}size=${encodeURIComponent(String(size))}${cursorParam}`;
15657
+ const headers = this.buildHeaders(options);
15658
+ const method = this.extractOpMethod(resultsOp, 'GET');
15659
+ return this.http
15660
+ .request(method, url, { headers })
15661
+ .pipe(map((res) => {
15662
+ const raw = this.unwrap(res);
15663
+ const items = Array.isArray(raw?.items)
15664
+ ? raw.items
15665
+ : Array.isArray(raw?.content)
15666
+ ? raw.content
15667
+ : [];
15668
+ const nextCursor = raw?.nextCursor ?? raw?.next ?? null;
15669
+ return {
15670
+ ...raw,
15671
+ items,
15672
+ nextCursor,
15673
+ hasMore: Boolean(raw?.hasMore ?? nextCursor),
15674
+ };
15675
+ }));
15676
+ }
15677
+ /**
15678
+ * Busca o schema canonico referenciado por uma operacao ou contrato de campos editaveis.
15679
+ */
15680
+ fetchSchema(schemaUrl, options) {
15681
+ return this.discovery.getSchemaByUrl(schemaUrl, options);
15682
+ }
15594
15683
  /**
15595
15684
  * Solicita cancelamento de uma execucao em andamento.
15596
15685
  */
@@ -15629,20 +15718,32 @@ class PraxisBulkClientService {
15629
15718
  return this.discovery.resolveHref(path, options);
15630
15719
  }
15631
15720
  interpolatePath(path, params) {
15721
+ const hadProposalPlaceholder = path.includes('{proposalId}');
15722
+ const hadExecutionPlaceholder = path.includes('{executionId}');
15632
15723
  let result = path;
15633
15724
  for (const [key, val] of Object.entries(params)) {
15634
15725
  const placeholder = `{${key}}`;
15635
15726
  if (result.includes(placeholder)) {
15636
- result = result.replace(placeholder, encodeURIComponent(String(val)));
15727
+ result = result.split(placeholder).join(encodeURIComponent(String(val)));
15637
15728
  }
15638
15729
  }
15639
15730
  const [basePath, query] = result.split('?');
15640
15731
  let updatedBase = basePath;
15641
- if (params['proposalId'] && !basePath.includes('{proposalId}') && !basePath.includes(String(params['proposalId']))) {
15642
- updatedBase = `${updatedBase.replace(/\/+$/, '')}/${encodeURIComponent(String(params['proposalId']))}`;
15732
+ const hasPathSegment = (targetPath, encodedSegment) => {
15733
+ const escaped = encodedSegment.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
15734
+ return new RegExp(`(^|/)${escaped}(/|$)`).test(targetPath);
15735
+ };
15736
+ if (params['proposalId'] != null && !hadProposalPlaceholder) {
15737
+ const encodedProposalId = encodeURIComponent(String(params['proposalId']));
15738
+ if (!hasPathSegment(updatedBase, encodedProposalId)) {
15739
+ updatedBase = `${updatedBase.replace(/\/+$/, '')}/${encodedProposalId}`;
15740
+ }
15643
15741
  }
15644
- else if (params['executionId'] && !basePath.includes('{executionId}') && !basePath.includes(String(params['executionId']))) {
15645
- updatedBase = `${updatedBase.replace(/\/+$/, '')}/${encodeURIComponent(String(params['executionId']))}`;
15742
+ else if (params['executionId'] != null && !hadExecutionPlaceholder) {
15743
+ const encodedExecutionId = encodeURIComponent(String(params['executionId']));
15744
+ if (!hasPathSegment(updatedBase, encodedExecutionId)) {
15745
+ updatedBase = `${updatedBase.replace(/\/+$/, '')}/${encodedExecutionId}`;
15746
+ }
15646
15747
  }
15647
15748
  return query != null ? `${updatedBase}?${query}` : updatedBase;
15648
15749
  }
@@ -39358,7 +39459,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
39358
39459
  args: [{ providedIn: 'root' }]
39359
39460
  }] });
39360
39461
 
39361
- const DEFAULT_JSON_LOGIC$2 = new PraxisJsonLogicService(null);
39462
+ const DEFAULT_JSON_LOGIC$3 = new PraxisJsonLogicService(null);
39362
39463
  class WidgetPageStateRuntimeService {
39363
39464
  jsonLogic;
39364
39465
  connections = new ConnectionManagerService();
@@ -39372,7 +39473,7 @@ class WidgetPageStateRuntimeService {
39372
39473
  defaultRoot: 'state',
39373
39474
  allowImplicitRoot: true,
39374
39475
  };
39375
- constructor(jsonLogic = DEFAULT_JSON_LOGIC$2) {
39476
+ constructor(jsonLogic = DEFAULT_JSON_LOGIC$3) {
39376
39477
  this.jsonLogic = jsonLogic;
39377
39478
  }
39378
39479
  normalizeState(state) {
@@ -39870,6 +39971,282 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
39870
39971
  args: [{ providedIn: 'root' }]
39871
39972
  }], ctorParameters: () => [{ type: PraxisJsonLogicService }] });
39872
39973
 
39974
+ const DEFAULT_JSON_LOGIC$2 = new PraxisJsonLogicService(null);
39975
+ class WidgetPageDataSourceRuntimeService {
39976
+ http = inject(HttpClient, { optional: true });
39977
+ apiUrlConfig = inject(API_URL, { optional: true });
39978
+ jsonLogic = inject(PraxisJsonLogicService, { optional: true }) || DEFAULT_JSON_LOGIC$2;
39979
+ connections = inject(ConnectionManagerService);
39980
+ /**
39981
+ * Constrói a URL canônica completa para o resourcePath declarado no dataSource.
39982
+ */
39983
+ resolveUrl(resourcePath) {
39984
+ const trimmed = (resourcePath || '').trim();
39985
+ if (!trimmed)
39986
+ return '';
39987
+ if (trimmed.startsWith('http://') || trimmed.startsWith('https://')) {
39988
+ return trimmed;
39989
+ }
39990
+ let base = '';
39991
+ if (this.apiUrlConfig) {
39992
+ const entry = this.apiUrlConfig['default'] || Object.values(this.apiUrlConfig)[0];
39993
+ if (entry) {
39994
+ base = buildApiUrl(entry);
39995
+ }
39996
+ }
39997
+ if (!base) {
39998
+ return trimmed.startsWith('/') ? trimmed : `/${trimmed}`;
39999
+ }
40000
+ const cleanBase = base.replace(/\/+$/, '');
40001
+ const cleanPath = trimmed.replace(/^\/+/, '');
40002
+ return `${cleanBase}/${cleanPath}`;
40003
+ }
40004
+ /**
40005
+ * Executa uma única consulta para um DataSource e retorna o resultado transformado.
40006
+ */
40007
+ fetchDataSource(dataSource) {
40008
+ if (!this.http) {
40009
+ return of(dataSource.fallbackValue ?? null);
40010
+ }
40011
+ const url = this.resolveUrl(dataSource.resourcePath);
40012
+ if (!url) {
40013
+ return of(dataSource.fallbackValue ?? null);
40014
+ }
40015
+ return this.executeRawRequest(dataSource, url).pipe(catchError((error) => {
40016
+ if (dataSource.errorPolicy === 'fallback' && dataSource.fallbackValue !== undefined) {
40017
+ return of(this.clone(dataSource.fallbackValue));
40018
+ }
40019
+ if (dataSource.errorPolicy === 'silent') {
40020
+ return EMPTY;
40021
+ }
40022
+ if (dataSource.errorPolicy === 'propagate') {
40023
+ return throwError(() => error);
40024
+ }
40025
+ if (dataSource.fallbackValue !== undefined) {
40026
+ return of(this.clone(dataSource.fallbackValue));
40027
+ }
40028
+ return throwError(() => error);
40029
+ }));
40030
+ }
40031
+ executeRawRequest(dataSource, resolvedUrl) {
40032
+ if (!this.http) {
40033
+ return of(dataSource.fallbackValue ?? null);
40034
+ }
40035
+ const url = resolvedUrl ?? this.resolveUrl(dataSource.resourcePath);
40036
+ if (!url) {
40037
+ return of(dataSource.fallbackValue ?? null);
40038
+ }
40039
+ const method = dataSource.method ??
40040
+ (dataSource.kind === 'stats-query' || dataSource.resourcePath.includes('/stats/')
40041
+ ? 'POST'
40042
+ : 'GET');
40043
+ let request$;
40044
+ if (method === 'POST') {
40045
+ request$ = this.http.post(url, dataSource.query || {});
40046
+ }
40047
+ else {
40048
+ let params = new HttpParams();
40049
+ if (dataSource.query && typeof dataSource.query === 'object') {
40050
+ for (const [key, val] of Object.entries(dataSource.query)) {
40051
+ if (Array.isArray(val)) {
40052
+ for (const item of val) {
40053
+ if (item !== undefined && item !== null) {
40054
+ params = params.append(key, String(item));
40055
+ }
40056
+ }
40057
+ }
40058
+ else if (val !== undefined && val !== null) {
40059
+ params = params.set(key, String(val));
40060
+ }
40061
+ }
40062
+ }
40063
+ request$ = this.http.get(url, { params });
40064
+ }
40065
+ return request$.pipe(map((res) => this.transformPayload(res, dataSource)));
40066
+ }
40067
+ /**
40068
+ * Inicia a orquestração reativa de todos os DataSources declarados em uma página dinâmica.
40069
+ * Retorna uma função de teardown que cancela todas as requisições em voo e timers de polling.
40070
+ */
40071
+ startDataSources(dataSources, onUpdate, onDiagnostic) {
40072
+ if (!dataSources || !dataSources.length) {
40073
+ return () => { };
40074
+ }
40075
+ const destroy$ = new Subject();
40076
+ for (const ds of dataSources) {
40077
+ if (ds.autoFetch === false) {
40078
+ continue;
40079
+ }
40080
+ const targetPath = ds.targetStatePath || ds.id;
40081
+ const intervalMs = ds.refreshIntervalMs ?? 0;
40082
+ let hasSucceededOnce = false;
40083
+ onDiagnostic?.({
40084
+ dataSourceId: ds.id,
40085
+ status: 'loading',
40086
+ });
40087
+ const runSingleFetch$ = () => this.executeRawRequest(ds).pipe(map((value) => {
40088
+ hasSucceededOnce = true;
40089
+ const now = new Date().toISOString();
40090
+ onDiagnostic?.({
40091
+ dataSourceId: ds.id,
40092
+ status: 'success',
40093
+ lastUpdated: now,
40094
+ });
40095
+ onUpdate({
40096
+ dataSourceId: ds.id,
40097
+ targetStatePath: targetPath,
40098
+ value,
40099
+ fetchedAt: now,
40100
+ });
40101
+ return value;
40102
+ }), catchError((err) => {
40103
+ onDiagnostic?.({
40104
+ dataSourceId: ds.id,
40105
+ status: 'error',
40106
+ error: err?.message || String(err),
40107
+ });
40108
+ if (!hasSucceededOnce &&
40109
+ ds.errorPolicy !== 'silent' &&
40110
+ ds.errorPolicy !== 'propagate' &&
40111
+ ds.fallbackValue !== undefined) {
40112
+ onUpdate({
40113
+ dataSourceId: ds.id,
40114
+ targetStatePath: targetPath,
40115
+ value: this.clone(ds.fallbackValue),
40116
+ fetchedAt: new Date().toISOString(),
40117
+ });
40118
+ }
40119
+ return EMPTY;
40120
+ }));
40121
+ const stream$ = intervalMs > 0
40122
+ ? timer(0, intervalMs).pipe(takeUntil(destroy$), switchMap(() => {
40123
+ if (typeof document !== 'undefined' &&
40124
+ document.visibilityState === 'hidden') {
40125
+ return EMPTY;
40126
+ }
40127
+ return runSingleFetch$();
40128
+ }))
40129
+ : runSingleFetch$().pipe(takeUntil(destroy$));
40130
+ stream$.subscribe();
40131
+ }
40132
+ return () => {
40133
+ destroy$.next();
40134
+ destroy$.complete();
40135
+ };
40136
+ }
40137
+ /**
40138
+ * Transforma a resposta bruta do backend aplicando envelope canônico ou JsonLogic.
40139
+ */
40140
+ transformPayload(raw, dataSource) {
40141
+ if (raw == null)
40142
+ return raw;
40143
+ let payload = raw;
40144
+ // Se a resposta vier no envelope padrão REST { data: ... } e não for um array puro
40145
+ if (typeof raw === 'object' &&
40146
+ !Array.isArray(raw) &&
40147
+ 'data' in raw &&
40148
+ raw.data !== undefined) {
40149
+ payload = raw.data;
40150
+ }
40151
+ const transform = dataSource.transform;
40152
+ if (!transform) {
40153
+ return payload;
40154
+ }
40155
+ if (typeof transform === 'object' &&
40156
+ transform !== null &&
40157
+ 'kind' in transform) {
40158
+ const transformObj = transform;
40159
+ const kind = transformObj['kind'];
40160
+ if (kind === 'path' && typeof transformObj['path'] === 'string') {
40161
+ const extracted = this.connections.extractByPath(payload, transformObj['path']);
40162
+ return extracted !== undefined
40163
+ ? extracted
40164
+ : this.connections.extractByPath(raw, transformObj['path']);
40165
+ }
40166
+ if (kind === 'group-by-map') {
40167
+ const rawBuckets = raw?.buckets ??
40168
+ payload?.buckets ??
40169
+ (Array.isArray(raw) ? raw : Array.isArray(payload) ? payload : []);
40170
+ const buckets = Array.isArray(rawBuckets) ? rawBuckets : [];
40171
+ const mappings = transformObj['mappings'] || {};
40172
+ const totalField = transformObj['totalField'];
40173
+ const result = {};
40174
+ for (const targetField of Object.values(mappings)) {
40175
+ if (typeof targetField === 'string' && targetField.trim()) {
40176
+ result[targetField] = 0;
40177
+ }
40178
+ }
40179
+ let total = 0;
40180
+ for (const bucket of buckets) {
40181
+ const keyStr = String(bucket?.key ?? '');
40182
+ const val = Number(bucket?.value ?? bucket?.count ?? 0);
40183
+ const safeVal = Number.isFinite(val) ? val : 0;
40184
+ total += safeVal;
40185
+ const mappedField = mappings[keyStr];
40186
+ if (mappedField) {
40187
+ result[mappedField] = (result[mappedField] || 0) + safeVal;
40188
+ }
40189
+ }
40190
+ if (totalField) {
40191
+ result[totalField] = total;
40192
+ }
40193
+ return result;
40194
+ }
40195
+ if (kind === 'timeseries-last') {
40196
+ const rawPoints = raw?.points ??
40197
+ payload?.points ??
40198
+ (Array.isArray(raw) ? raw : Array.isArray(payload) ? payload : []);
40199
+ const points = Array.isArray(rawPoints) ? rawPoints : [];
40200
+ if (!points.length) {
40201
+ return {};
40202
+ }
40203
+ const lastPoint = points[points.length - 1];
40204
+ const mappings = transformObj['mappings'] || {};
40205
+ const result = {};
40206
+ for (const [sourcePath, targetKey] of Object.entries(mappings)) {
40207
+ let extracted = this.connections.extractByPath(lastPoint, sourcePath);
40208
+ if (extracted === undefined && sourcePath.startsWith('values.')) {
40209
+ extracted = lastPoint?.value;
40210
+ }
40211
+ if (extracted === undefined && sourcePath === 'label') {
40212
+ extracted = lastPoint?.period ?? lastPoint?.start ?? lastPoint?.bucket;
40213
+ }
40214
+ if (extracted !== undefined) {
40215
+ result[String(targetKey)] = extracted;
40216
+ }
40217
+ }
40218
+ return result;
40219
+ }
40220
+ }
40221
+ try {
40222
+ return this.jsonLogic.evaluate(transform, {
40223
+ data: payload,
40224
+ response: raw,
40225
+ result: payload,
40226
+ });
40227
+ }
40228
+ catch {
40229
+ return payload;
40230
+ }
40231
+ }
40232
+ clone(val) {
40233
+ if (val == null || typeof val !== 'object')
40234
+ return val;
40235
+ try {
40236
+ return JSON.parse(JSON.stringify(val));
40237
+ }
40238
+ catch {
40239
+ return val;
40240
+ }
40241
+ }
40242
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: WidgetPageDataSourceRuntimeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
40243
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: WidgetPageDataSourceRuntimeService, providedIn: 'root' });
40244
+ }
40245
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: WidgetPageDataSourceRuntimeService, decorators: [{
40246
+ type: Injectable,
40247
+ args: [{ providedIn: 'root' }]
40248
+ }] });
40249
+
39873
40250
  const TRANSFORM_CATALOG = [
39874
40251
  {
39875
40252
  kind: 'format-value', phase: 'link-propagation', label: 'Format Value',
@@ -45333,6 +45710,12 @@ class DynamicWidgetPageComponent {
45333
45710
  })();
45334
45711
  conn = inject(ConnectionManagerService);
45335
45712
  stateRuntime = inject(WidgetPageStateRuntimeService);
45713
+ dataSourceRuntime = inject(WidgetPageDataSourceRuntimeService);
45714
+ dataSourceTeardown;
45715
+ currentDataSourcesSignature = null;
45716
+ pendingDataSourceUpdates = [];
45717
+ isCoalescingDataSourceUpdates = false;
45718
+ dataSourceRuntimeOverlay = new Map();
45336
45719
  nestedWidgetAccessor = new NestedWidgetConfigAccessor();
45337
45720
  settingsPanel = inject(SETTINGS_PANEL_BRIDGE, {
45338
45721
  optional: true,
@@ -45418,6 +45801,12 @@ class DynamicWidgetPageComponent {
45418
45801
  afterNextRender({ read: () => this.observeHostWidth() });
45419
45802
  }
45420
45803
  ngOnDestroy() {
45804
+ this.dataSourceTeardown?.();
45805
+ this.dataSourceTeardown = undefined;
45806
+ this.currentDataSourcesSignature = null;
45807
+ this.pendingDataSourceUpdates = [];
45808
+ this.isCoalescingDataSourceUpdates = false;
45809
+ this.dataSourceRuntimeOverlay.clear();
45421
45810
  this.persistenceGeneration++;
45422
45811
  this.persistenceLoad?.unsubscribe();
45423
45812
  this.persistenceMutation?.unsubscribe();
@@ -45498,12 +45887,17 @@ class DynamicWidgetPageComponent {
45498
45887
  state: this.stateRuntime.normalizeState(resolvedPage.state),
45499
45888
  }
45500
45889
  : resolvedPage;
45890
+ if (changes['pageIdentity'] ||
45891
+ this.getDataSourcesSignature(this.pageDefinition?.dataSources) !==
45892
+ this.currentDataSourcesSignature) {
45893
+ this.dataSourceRuntimeOverlay.clear();
45894
+ }
45501
45895
  this.pageRuntime = this.buildStateRuntime(this.pageDefinition?.state, this.pageDefinition?.context);
45502
45896
  this.pageState = this.pageRuntime.state;
45503
45897
  const bootstrapSnapshot = this.bootstrapCompositionAdapter(this.pageDefinition);
45504
45898
  const rawWidgets = this.pageDefinition?.widgets || [];
45505
45899
  let widgets = this.applyEditShellActions(rawWidgets);
45506
- widgets = this.applyBootstrapCompositionHydration(widgets, bootstrapSnapshot);
45900
+ widgets = this.applyBootstrapCompositionHydration(widgets, bootstrapSnapshot, this.pageRuntime);
45507
45901
  widgets = this.applyChildCustomizationProjection(widgets);
45508
45902
  this.pageDefinition = this.pageDefinition
45509
45903
  ? { ...this.pageDefinition, widgets }
@@ -45511,6 +45905,7 @@ class DynamicWidgetPageComponent {
45511
45905
  this.page = this.pageDefinition;
45512
45906
  this.applyResponsivePresentation(this.pageDefinition, widgets, this.pageRuntime);
45513
45907
  this.reportStateDiagnostics(this.pageRuntime.diagnostics);
45908
+ this.restartDataSources(this.pageDefinition);
45514
45909
  }
45515
45910
  if (!changes['page'] &&
45516
45911
  !changes['context'] &&
@@ -45790,7 +46185,38 @@ class DynamicWidgetPageComponent {
45790
46185
  return projected.length ? Object.fromEntries(projected) : null;
45791
46186
  }
45792
46187
  buildStateRuntime(state, pageContext) {
45793
- return this.stateRuntime.buildRuntimeSnapshot(state, this.buildStateContext(pageContext));
46188
+ const normalizedAuthoredState = this.stateRuntime.normalizeState(state);
46189
+ if (this.dataSourceRuntimeOverlay.size === 0) {
46190
+ return this.stateRuntime.buildRuntimeSnapshot(normalizedAuthoredState, this.buildStateContext(pageContext));
46191
+ }
46192
+ let mergedValues = this.cloneStateValues(normalizedAuthoredState.values || {});
46193
+ for (const [targetPath, rawValue] of this.dataSourceRuntimeOverlay.entries()) {
46194
+ const existingAtTarget = this.conn.extractByPath(mergedValues, targetPath);
46195
+ let incomingValue = this.cloneStateValues(rawValue);
46196
+ if (existingAtTarget != null &&
46197
+ typeof existingAtTarget === 'object' &&
46198
+ !Array.isArray(existingAtTarget) &&
46199
+ incomingValue != null &&
46200
+ typeof incomingValue === 'object' &&
46201
+ !Array.isArray(incomingValue)) {
46202
+ incomingValue = { ...existingAtTarget, ...incomingValue };
46203
+ }
46204
+ mergedValues = this.conn.setValueAtPath(mergedValues, targetPath, incomingValue);
46205
+ }
46206
+ const effectiveStateInput = {
46207
+ ...normalizedAuthoredState,
46208
+ values: mergedValues,
46209
+ };
46210
+ const snapshot = this.stateRuntime.buildRuntimeSnapshot(effectiveStateInput, this.buildStateContext(pageContext));
46211
+ return {
46212
+ ...snapshot,
46213
+ state: normalizedAuthoredState,
46214
+ };
46215
+ }
46216
+ getDataSourcesSignature(dataSources) {
46217
+ return dataSources && dataSources.length > 0
46218
+ ? JSON.stringify(dataSources)
46219
+ : null;
45794
46220
  }
45795
46221
  bootstrapCompositionAdapter(page) {
45796
46222
  if (!page) {
@@ -45840,13 +46266,20 @@ class DynamicWidgetPageComponent {
45840
46266
  };
45841
46267
  });
45842
46268
  }
45843
- applyBootstrapCompositionHydration(widgets, bootstrapSnapshot) {
46269
+ applyBootstrapCompositionHydration(widgets, bootstrapSnapshot, runtime) {
45844
46270
  if (!this.compositionDefinition || !bootstrapSnapshot) {
45845
46271
  return this.cloneWidgets(widgets);
45846
46272
  }
46273
+ const effectiveState = runtime
46274
+ ? {
46275
+ ...bootstrapSnapshot.state,
46276
+ primaryValues: this.cloneStateValues(runtime.primaryValues),
46277
+ derivedValues: this.cloneStateValues(runtime.derivedValues),
46278
+ }
46279
+ : bootstrapSnapshot.state;
45847
46280
  const projected = this.compositionRuntime.projectStateWidgetInputs(this.compositionDefinition, {
45848
46281
  widgets,
45849
- state: bootstrapSnapshot.state,
46282
+ state: effectiveState,
45850
46283
  now: bootstrapSnapshot.generatedAt,
45851
46284
  }).widgets;
45852
46285
  return this.applyRecordRelatedSurfaceAiContext(projected);
@@ -46732,13 +47165,19 @@ class DynamicWidgetPageComponent {
46732
47165
  if (widget.definition?.id !== 'praxis-rich-content') {
46733
47166
  return widget;
46734
47167
  }
47168
+ const authoredContext = (widget.definition.inputs?.['context'] || {});
47169
+ const mergedRichContext = {
47170
+ ...(runtime.effectiveValues || {}),
47171
+ ...authoredContext,
47172
+ };
46735
47173
  return {
46736
47174
  ...widget,
46737
47175
  definition: {
46738
47176
  ...widget.definition,
46739
47177
  inputs: {
46740
47178
  ...(widget.definition.inputs || {}),
46741
- hostCapabilities: this.buildRichContentHostCapabilities(widget.key, runtime, widget.definition.inputs?.['context']),
47179
+ context: mergedRichContext,
47180
+ hostCapabilities: this.buildRichContentHostCapabilities(widget.key, runtime, mergedRichContext),
46742
47181
  },
46743
47182
  },
46744
47183
  };
@@ -47340,7 +47779,27 @@ class DynamicWidgetPageComponent {
47340
47779
  return raw;
47341
47780
  }
47342
47781
  lookup(ctx, path) {
47343
- return path.split('.').reduce((acc, key) => acc?.[key], ctx);
47782
+ if (ctx == null || !path)
47783
+ return undefined;
47784
+ const direct = path.split('.').reduce((acc, key) => acc?.[key], ctx);
47785
+ if (direct !== undefined)
47786
+ return direct;
47787
+ if (ctx.state) {
47788
+ const fromState = path.split('.').reduce((acc, key) => acc?.[key], ctx.state);
47789
+ if (fromState !== undefined)
47790
+ return fromState;
47791
+ }
47792
+ if (ctx.values) {
47793
+ const fromValues = path.split('.').reduce((acc, key) => acc?.[key], ctx.values);
47794
+ if (fromValues !== undefined)
47795
+ return fromValues;
47796
+ }
47797
+ if (ctx.context) {
47798
+ const fromContext = path.split('.').reduce((acc, key) => acc?.[key], ctx.context);
47799
+ if (fromContext !== undefined)
47800
+ return fromContext;
47801
+ }
47802
+ return undefined;
47344
47803
  }
47345
47804
  openWidgetShellSettings(key) {
47346
47805
  if (!this.canOpenWidgetShellSettings())
@@ -48180,7 +48639,7 @@ class DynamicWidgetPageComponent {
48180
48639
  const stateBoundWidgets = skipStateWidgetProjection
48181
48640
  ? normalizedWidgets
48182
48641
  : bootstrapSnapshot
48183
- ? this.applyBootstrapCompositionHydration(normalizedWidgets, bootstrapSnapshot)
48642
+ ? this.applyBootstrapCompositionHydration(normalizedWidgets, bootstrapSnapshot, runtime)
48184
48643
  : this.compositionDefinition
48185
48644
  ? this.compositionRuntime.projectStateWidgetInputs(this.compositionDefinition, {
48186
48645
  widgets: normalizedWidgets,
@@ -48202,6 +48661,7 @@ class DynamicWidgetPageComponent {
48202
48661
  this.pageState = runtime.state;
48203
48662
  this.pageRuntime = runtime;
48204
48663
  this.applyResponsivePresentation(hydrated, hydrated?.widgets || stateBoundWidgets, runtime);
48664
+ this.restartDataSources(hydrated);
48205
48665
  if (this.widgetEventBus) {
48206
48666
  this.wiringSubscription?.unsubscribe();
48207
48667
  if (hydrated?.wiring && hydrated.wiring.length > 0) {
@@ -48224,6 +48684,84 @@ class DynamicWidgetPageComponent {
48224
48684
  this.savePage(canonicalPage);
48225
48685
  }
48226
48686
  }
48687
+ handleDataSourceUpdate(update) {
48688
+ if (this.destroyed || !this.pageDefinition) {
48689
+ return;
48690
+ }
48691
+ this.pendingDataSourceUpdates.push(update);
48692
+ if (this.isCoalescingDataSourceUpdates) {
48693
+ return;
48694
+ }
48695
+ this.isCoalescingDataSourceUpdates = true;
48696
+ queueMicrotask(() => this.flushPendingDataSourceUpdates());
48697
+ }
48698
+ flushPendingDataSourceUpdates() {
48699
+ this.isCoalescingDataSourceUpdates = false;
48700
+ if (this.destroyed || !this.pageDefinition || this.pendingDataSourceUpdates.length === 0) {
48701
+ this.pendingDataSourceUpdates = [];
48702
+ return;
48703
+ }
48704
+ const updates = [...this.pendingDataSourceUpdates];
48705
+ this.pendingDataSourceUpdates = [];
48706
+ for (const update of updates) {
48707
+ const existingAtTarget = this.dataSourceRuntimeOverlay.get(update.targetStatePath);
48708
+ let incomingValue = this.cloneStateValues(update.value);
48709
+ if (existingAtTarget != null &&
48710
+ typeof existingAtTarget === 'object' &&
48711
+ !Array.isArray(existingAtTarget) &&
48712
+ incomingValue != null &&
48713
+ typeof incomingValue === 'object' &&
48714
+ !Array.isArray(incomingValue)) {
48715
+ incomingValue = { ...existingAtTarget, ...incomingValue };
48716
+ }
48717
+ this.dataSourceRuntimeOverlay.set(update.targetStatePath, incomingValue);
48718
+ }
48719
+ const previousEffective = this.cloneStateValues(this.pageRuntime.effectiveValues);
48720
+ const nextRuntime = this.buildStateRuntime(this.pageDefinition.state, this.pageDefinition.context);
48721
+ if (this.areStateValuesEqual(previousEffective, nextRuntime.effectiveValues)) {
48722
+ return;
48723
+ }
48724
+ this.pageRuntime = nextRuntime;
48725
+ this.pageState = nextRuntime.state;
48726
+ let widgets = this.pageDefinition.widgets || [];
48727
+ if (this.compositionDefinition) {
48728
+ const projected = this.compositionRuntime.projectStateWidgetInputs(this.compositionDefinition, {
48729
+ widgets: this.applyEditShellActions(widgets),
48730
+ state: {
48731
+ primaryValues: this.cloneStateValues(nextRuntime.primaryValues),
48732
+ derivedValues: this.cloneStateValues(nextRuntime.derivedValues),
48733
+ transientValues: {},
48734
+ changedPaths: updates.map((u) => u.targetStatePath),
48735
+ diagnostics: [],
48736
+ },
48737
+ }).widgets;
48738
+ const hydrated = this.resolvePagePresets({
48739
+ ...this.pageDefinition,
48740
+ widgets: this.applyChildCustomizationProjection(this.applyRecordRelatedSurfaceAiContext(projected)),
48741
+ });
48742
+ this.pageDefinition = hydrated;
48743
+ this.page = hydrated;
48744
+ widgets = hydrated?.widgets || projected;
48745
+ }
48746
+ this.applyResponsivePresentation(this.pageDefinition, widgets, nextRuntime);
48747
+ this.reportStateDiagnostics(nextRuntime.diagnostics);
48748
+ this.changeDetector.markForCheck();
48749
+ }
48750
+ restartDataSources(page) {
48751
+ const dataSources = page?.dataSources;
48752
+ const signature = this.getDataSourcesSignature(dataSources);
48753
+ if (signature === this.currentDataSourcesSignature) {
48754
+ return;
48755
+ }
48756
+ this.currentDataSourcesSignature = signature;
48757
+ this.dataSourceRuntimeOverlay.clear();
48758
+ this.dataSourceTeardown?.();
48759
+ this.dataSourceTeardown = undefined;
48760
+ if (!dataSources || dataSources.length === 0) {
48761
+ return;
48762
+ }
48763
+ this.dataSourceTeardown = this.dataSourceRuntime.startDataSources(dataSources, (update) => this.handleDataSourceUpdate(update));
48764
+ }
48227
48765
  applyLayout(layout, grouping, deviceLayoutColumnsSelected = false) {
48228
48766
  this.layout = layout;
48229
48767
  this.canvas = undefined;
@@ -48261,6 +48799,8 @@ class DynamicWidgetPageComponent {
48261
48799
  const merged = {
48262
48800
  ...baseContext,
48263
48801
  ...(inputContext || {}),
48802
+ ...this.cloneStateValues(runtime.effectiveValues),
48803
+ state: this.cloneStateValues(runtime.effectiveValues),
48264
48804
  pageDeviceKind: this.resolveDeviceKind(),
48265
48805
  pageLayoutPreset: layoutPreset || null,
48266
48806
  pageThemePreset: themePreset || null,
@@ -51212,7 +51752,26 @@ class DynamicWidgetPageComponent {
51212
51752
  if (stored !== null || defaultPage) {
51213
51753
  this.isHydrating = true;
51214
51754
  try {
51215
- const loaded = stored ?? defaultPage;
51755
+ const baseline = defaultPage ?? this.authoredPageDefinition ?? this.pageDefinition;
51756
+ const loaded = stored && baseline
51757
+ ? {
51758
+ ...baseline,
51759
+ ...stored,
51760
+ state: {
51761
+ ...(baseline.state || {}),
51762
+ ...(stored.state || {}),
51763
+ values: {
51764
+ ...(baseline.state?.values || {}),
51765
+ ...(stored.state?.values || {}),
51766
+ },
51767
+ derived: {
51768
+ ...(baseline.state?.derived || {}),
51769
+ ...(stored.state?.derived || {}),
51770
+ },
51771
+ },
51772
+ dataSources: stored.dataSources ?? baseline.dataSources,
51773
+ }
51774
+ : (stored ?? defaultPage);
51216
51775
  this.authoredPageDefinition = this.clonePageDefinition(loaded);
51217
51776
  this.applyPageUpdate(loaded, false);
51218
51777
  }
@@ -57266,4 +57825,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
57266
57825
  * Generated bundle index. Do not edit.
57267
57826
  */
57268
57827
 
57269
- 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, BUILTIN_WIDGET_SHELL_PRESETS, BulkOperationClientService, BulkSyncSession, BulkSyncStateService, COMPONENT_METADATA_REGISTRY_I18N_CONFIG, COMPONENT_METADATA_REGISTRY_I18N_NAMESPACE, CONFIG_STORAGE, CONNECTION_STORAGE, ComponentAuthoringManifestProjectionError, ComponentKeyService, ComponentMetadataRegistry, ComponentRuntimeProfileService, CompositionRuntimeFacade, CompositionValidatorService, ConsoleLoggerSink, CrudOperationResolutionService, DEFAULT_DYNAMIC_FORM_SCHEMA_CACHE_MAX_ENTRIES, DEFAULT_DYNAMIC_FORM_SCHEMA_CACHE_TTL_MS, DEFAULT_FIELD_SELECTOR_CONTROL_TYPE_MAP, DEFAULT_JSON_LOGIC_OPERATORS, DEFAULT_SCHEMA_REQUEST_TIMEOUT_MS, 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, EFFECTIVE_UI_LAYOUT_COMPOSITION_SCHEMA_VERSION, 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, EffectiveUiLayoutContractError, EffectiveUiLayoutHttpError, EffectiveUiLayoutService, EmptyStateCardComponent, EnterpriseRuntimeContextObsoleteError, 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, GOVERNED_COLOR_PALETTE_OPTIONS, GenericCrudService, GlobalActionService, GlobalConfigService, GovernedColorPaletteService, 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_ACTION_CONTROL_DEFAULTS, PRAXIS_ACTION_CONTROL_VARS, PRAXIS_COLLECTION_EXPORT_HTTP_OPTIONS, PRAXIS_COLLECTION_EXPORT_PROVIDER, PRAXIS_COLLECTION_SEARCH_DEFAULTS, PRAXIS_COLLECTION_SEARCH_VARS, PRAXIS_CORPORATE_SENSITIVE_KEYS, PRAXIS_DEFAULT_EXPORT_SECURITY_POLICY, PRAXIS_DEFAULT_OBSERVABILITY_ALERT_RULES, PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA, PRAXIS_EFFECTIVE_UI_LAYOUT_OPTIONS, 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_AUTHORING_MANIFEST, 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, PraxisAppShellComponent, PraxisBulkClientService, PraxisCollectionExportService, PraxisCore, PraxisFooterLinksComponent, PraxisGlobalErrorHandler, PraxisHeroBannerComponent, PraxisHttpCollectionExportProvider, PraxisI18nService, PraxisIconButtonComponent, PraxisIconDirective, PraxisIconPickerComponent, PraxisJsonLogicError, PraxisJsonLogicService, PraxisKeepAliveTabDirective, PraxisLayerScaleStyleService, PraxisLegalNoticeComponent, PraxisLoadingInterceptor, PraxisRelatedResourceOutletComponent, PraxisRelatedResourceOutletConfigEditorComponent, PraxisResourceIdentityComponent, PraxisRichTextBlockComponent, PraxisRuntimeComponentObservationRegistryService, PraxisSurfaceHostComponent, PraxisUserContextSummaryComponent, PraxisWidgetEventBus, RESOURCE_DISCOVERY_I18N_CONFIG, RESOURCE_DISCOVERY_I18N_NAMESPACE, RULE_PROPERTY_SCHEMA, RelatedResourceSurfaceResolverService, RemoteConfigStorage, ResourceActionOpenAdapterService, ResourceDiscoveryService, ResourceQuickConnectComponent, ResourceRecordOpenError, ResourceRecordOpenService, ResourceSurfaceOpenAdapterService, SCHEMA_METADATA_CLIENT_OPTIONS, SCHEMA_VIEWER_CONTEXT, SETTINGS_EDITOR_SECTIONS_HOSTED, SETTINGS_PANEL_BRIDGE, SETTINGS_PANEL_DATA, STEPPER_CONFIG_EDITOR, SURFACE_DRAWER_BRIDGE, SURFACE_DRAWER_CONTENT_DATA, SURFACE_DRAWER_REF, SURFACE_NAVIGATION_I18N_CONFIG, SURFACE_NAVIGATION_I18N_NAMESPACE, SURFACE_OPEN_I18N_CONFIG, SURFACE_OPEN_I18N_NAMESPACE, SURFACE_OPEN_PRESETS, SafeExpressionEvaluator, SchemaMetadataClient, SchemaNormalizerService, SchemaViewerComponent, SettingsSectionTabsComponent, SurfaceBindingRuntimeService, SurfaceNavigationError, SurfaceOpenActionEditorComponent, SurfaceOpenMaterializerService, SurfaceOutletRegistryService, TABLE_CONFIG_EDITOR, TableConfigService, TelemetryLoggerSink, TelemetryService, UiLayoutLifecycleContractError, UiLayoutLifecycleHttpError, UiLayoutLifecycleService, ValidationPattern, WidgetPageCompositionFactory, WidgetPageStateRuntimeService, WidgetShellComponent, applyLocalCustomizations$2 as applyLocalCustomizations, applyLocalCustomizations$1 as applyLocalFormCustomizations, assertPraxisCollectionExportArtifact, assertPraxisRuntimeComponentObservationSerializable, buildAngularValidators, buildApiUrl, buildBaseColumnFromDef, buildBaseFormField, buildFormConfigFromEditorialTemplate, buildHeaders, buildPageKey, buildPraxisActionControlCss, buildPraxisCollectionSearchCss, buildPraxisEffectDistinctKey, buildPraxisLayerScaleCss, buildPraxisThemeSurfaceCss, buildSchemaId, buildSchemaIdStorageKeySegment, buildValidatorsFromValidatorOptions, cancelIfCpfInvalidHook, canonicalJsonSha256, canonicalJsonStringify, clampRange, classifyEntityLookupResult, clonePraxisRuntimeComponentObservation, cloneTableConfig, cloneUiLayoutJsonDocument, cnpjAlphaValidator, collapseWhitespace, composeHeadersWithVersion, conditionalAsyncValidator, convertFormLayoutToConfig, createCorporateLoggerConfig, createCorporateObservabilityOptions, createCpfCnpjValidator, createDefaultFormConfig, createDefaultTableConfig, createDynamicRecord, createEmptyFormConfig, createEmptyRichContentDocument, createFieldLayoutItem, createPersistedPage, customAsyncValidatorFn, customValidatorFn, debounceAsyncValidator, deepMerge, domainKnowledgeTimelineToRichContentDocument, domainRuleTimelineToRichContentDocument, ensureIds, ensureNoConflictsHookFactory, ensurePageIds, escapePraxisExportCell, evaluateFieldAccess, extractNormalizedError, extractRecordId, fetchWithETag, fileTypeValidator, fillUndefined, findBuiltinWidgetShellPreset, formIdentityIssues, generateBulkIdempotencyKey, generateId, getDefaultFormHints, getEditorialCompliancePresetById, getEditorialFormTemplateById, getEditorialFormTemplateCatalog, getEditorialSolutionById, getEditorialSolutionCatalog, getEditorialSolutionPresetById, getEditorialThemePresetById, getEssentialConfig, getFieldMetadataCapabilities, getFormColumnFieldNames, getFormLayoutFieldNames, getGlobalActionCatalog, getGlobalActionPayloadActualType, getGlobalActionPayloadTypeIssue, getGlobalActionProviderEvidence, getGlobalActionUiSchema, getMissingGlobalActionPayloadKeys, getPraxisTableCellVisualizationConstraint, getPraxisTableCellVisualizationGuidance, getReferencedFieldMetadata, getRequiredGlobalActionPayloadKeys, getTextTransformer, getWidgetShellActionIdError, hasMeaningfulGlobalActionPayloadValue, hasPraxisCollectionExportArtifact, interpolatePraxisTranslation, isAllowedEditorialContentFormat, isAllowedEditorialHref, isBulkExecutionTerminal, isCssTextTransform, isDomainRuleSnapshotProblemResponse, isDynamicDataRecord, isEditorialComponentMeta, isEntityLookupMultiplePayloadMode, isEntityLookupPayloadMode, isEntityLookupPayloadModeCompatible, isEntityLookupResultSelectable, isEntityLookupSinglePayloadMode, isFormLayoutItem, isGlobalActionProviderOperational, isGlobalActionRef, isInlineFilterControlType, isLookupDialogSize, isLookupFilterFieldType, isLookupFilterOperator, isPraxisI18nMessageDescriptor, isPraxisPresentationVisualizationTableSafe, isPraxisRuntimeGlobalActionEffect, isProgrammaticDateRangePreset, isRangeValidForFilter, isRequiredGlobalActionParamPayloadMissing, isRequiredGlobalActionPayloadMissing, isStaticDateRangePreset, isSurfaceNavigationError, isTableConfigV2, isValidFormConfig, isValidTableConfig, legacyCnpjValidator, legacyCpfValidator, logOnErrorHook, mapFieldDefinitionToMetadata, mapFieldDefinitionsToMetadata, markGlobalActionProviderOperational, matchFieldValidator, materializeFormLayoutFromMetadata, materializeGovernedPaletteColors, materializeGovernedPaletteEntries, materializeResourceIdentity, maxFileSizeValidator, mergeFieldMetadata, mergePraxisI18nConfigs, mergeTableConfigs, migrateFormLayoutRule, migrateLegacyCompositionLink, migrateLegacyCompositionLinks, minWordsValidator, nestedPortPathIdentity, normalizeCardMediaAspectRatio, normalizeControlTypeKey, normalizeControlTypeToken, normalizeEditorialLink, normalizeEnd, normalizeFieldAccessMetadata, normalizeFieldConstraints, normalizeFieldPresentation, normalizeFormConfig, normalizeFormLayoutItems, normalizeFormMetadata, normalizeGlobalActionRef$1 as normalizeGlobalActionRef, normalizeLayoutPolicy, normalizeLookupFilterRequest, normalizePath, normalizePraxisDataQueryContext, normalizePraxisEffectPolicy, normalizePraxisPresentationVisualization, normalizePraxisQueryFilterExpression, normalizePraxisQueryFilterNode, normalizeReactiveDeterminations, normalizeResourceAvailabilityReasonCode, normalizeResourceIdentityContract, normalizeStart, normalizeSurfaceOperationContext, normalizeUnknownError, normalizeWidgetEventPath, notifySuccessHook, parseJsonResponseOrEmpty, praxisLoadingInterceptorFn, prefillFromContextHook, prepareCanvasArrangement, projectComponentAuthoringManifest, projectGroupedCommandPartialRows, 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, providePraxisTelemetry, providePraxisToastGlobalActions, providePraxisUserContextSummaryMetadata, provideRemoteGlobalConfig, readPraxisExportValue, reconcileFilterConfig, reconcileFormConfig, reconcileTableConfig, registerPraxisRuntimeComponentObservation, removeDiacritics, renderPraxisPresentationVisualizationHtml, reportTelemetryHookFactory, requiredCheckedValidator, requiredPresenceValidator, resolveBuiltinPresets, resolveBuiltinWidgetShellAppearance, resolveColumnTypeFromFieldDefinition, resolveControlTypeAlias, resolveDataField, resolveDateRangeShortcutPreset, resolveDateRangeShortcutPresets, resolveDefaultValuePresentationFormat, resolveEntityLookupPayloadMode, resolveFieldPresentation, resolveGroupedCommandPartialRowSpans, resolveHidden, resolveInlineFilterControlType, resolveInlineFilterControlTypeToBaseControlType, resolveLoggerConfig, resolveObservabilityOptions, resolveOffset, resolveOrder, resolvePraxisCollectionExportItems, resolvePraxisExportFields, resolvePraxisExportScope, resolvePraxisFilterCriteria, resolvePraxisI18nDocument, resolvePraxisMicroVisualizationTone, resolveResourceAvailabilityReasonKey, resolveResourceIdentityContract, resolveSpan, resolveTextMaskFormat, resolveTextMaskFormatFromFieldDefinition, resolveValuePresentation, resolveValuePresentationLocale, resolveWidgetPageLayoutPreset, serializeEntityLookupValueForPayload, serializeOptionSourceFilterRequest, serializePraxisCollectionToCsv, serializePraxisCollectionToExcel, serializePraxisCollectionToJson, slugify, staticDateRangePresetToPreset, stripMasksHook, supportsConfigDocuments, supportsImplicitValuePresentation, syncWithServerMetadata, textSha256, toCamel, toCapitalize, toKebab, toPascal, toSentenceCase, toSnake, toTitleCase, translateResourceAvailabilityReason, translateResourceDiscoveryText, translateSurfaceNavigationRejected, translateSurfaceOpenFailed, translateUnavailableWorkflowMessage, trim, uiLayoutJsonIdentity, uniqueAsyncValidator, urlValidator, validateCanvasArrangement, validateGlobalActionRef, validateGlobalActionRefs, withFormConfigSections, withMessage, withPraxisHttpLoading };
57828
+ 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, BUILTIN_WIDGET_SHELL_PRESETS, BulkOperationClientService, BulkSyncSession, BulkSyncStateService, COMPONENT_METADATA_REGISTRY_I18N_CONFIG, COMPONENT_METADATA_REGISTRY_I18N_NAMESPACE, CONFIG_STORAGE, CONNECTION_STORAGE, ComponentAuthoringManifestProjectionError, ComponentKeyService, ComponentMetadataRegistry, ComponentRuntimeProfileService, CompositionRuntimeFacade, CompositionValidatorService, ConsoleLoggerSink, CrudOperationResolutionService, DEFAULT_DYNAMIC_FORM_SCHEMA_CACHE_MAX_ENTRIES, DEFAULT_DYNAMIC_FORM_SCHEMA_CACHE_TTL_MS, DEFAULT_FIELD_SELECTOR_CONTROL_TYPE_MAP, DEFAULT_JSON_LOGIC_OPERATORS, DEFAULT_SCHEMA_REQUEST_TIMEOUT_MS, 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, EFFECTIVE_UI_LAYOUT_COMPOSITION_SCHEMA_VERSION, 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, EffectiveUiLayoutContractError, EffectiveUiLayoutHttpError, EffectiveUiLayoutService, EmptyStateCardComponent, EnterpriseRuntimeContextObsoleteError, 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, GOVERNED_COLOR_PALETTE_OPTIONS, GenericCrudService, GlobalActionService, GlobalConfigService, GovernedColorPaletteService, 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_ACTION_CONTROL_DEFAULTS, PRAXIS_ACTION_CONTROL_VARS, PRAXIS_COLLECTION_EXPORT_HTTP_OPTIONS, PRAXIS_COLLECTION_EXPORT_PROVIDER, PRAXIS_COLLECTION_SEARCH_DEFAULTS, PRAXIS_COLLECTION_SEARCH_VARS, PRAXIS_CORPORATE_SENSITIVE_KEYS, PRAXIS_DEFAULT_EXPORT_SECURITY_POLICY, PRAXIS_DEFAULT_OBSERVABILITY_ALERT_RULES, PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA, PRAXIS_EFFECTIVE_UI_LAYOUT_OPTIONS, 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_AUTHORING_MANIFEST, 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, PraxisAppShellComponent, PraxisBulkClientService, PraxisCollectionExportService, PraxisCore, PraxisFooterLinksComponent, PraxisGlobalErrorHandler, PraxisHeroBannerComponent, PraxisHttpCollectionExportProvider, PraxisI18nService, PraxisIconButtonComponent, PraxisIconDirective, PraxisIconPickerComponent, PraxisJsonLogicError, PraxisJsonLogicService, PraxisKeepAliveTabDirective, PraxisLayerScaleStyleService, PraxisLegalNoticeComponent, PraxisLoadingInterceptor, PraxisRelatedResourceOutletComponent, PraxisRelatedResourceOutletConfigEditorComponent, PraxisResourceIdentityComponent, PraxisRichTextBlockComponent, PraxisRuntimeComponentObservationRegistryService, PraxisSurfaceHostComponent, PraxisUserContextSummaryComponent, PraxisWidgetEventBus, RESOURCE_DISCOVERY_I18N_CONFIG, RESOURCE_DISCOVERY_I18N_NAMESPACE, RULE_PROPERTY_SCHEMA, RelatedResourceSurfaceResolverService, RemoteConfigStorage, ResourceActionOpenAdapterService, ResourceDiscoveryService, ResourceQuickConnectComponent, ResourceRecordOpenError, ResourceRecordOpenService, ResourceSurfaceOpenAdapterService, SCHEMA_METADATA_CLIENT_OPTIONS, SCHEMA_VIEWER_CONTEXT, SETTINGS_EDITOR_SECTIONS_HOSTED, SETTINGS_PANEL_BRIDGE, SETTINGS_PANEL_DATA, STEPPER_CONFIG_EDITOR, SURFACE_DRAWER_BRIDGE, SURFACE_DRAWER_CONTENT_DATA, SURFACE_DRAWER_REF, SURFACE_NAVIGATION_I18N_CONFIG, SURFACE_NAVIGATION_I18N_NAMESPACE, SURFACE_OPEN_I18N_CONFIG, SURFACE_OPEN_I18N_NAMESPACE, SURFACE_OPEN_PRESETS, SafeExpressionEvaluator, SchemaMetadataClient, SchemaNormalizerService, SchemaViewerComponent, SettingsSectionTabsComponent, SurfaceBindingRuntimeService, SurfaceNavigationError, SurfaceOpenActionEditorComponent, SurfaceOpenMaterializerService, SurfaceOutletRegistryService, TABLE_CONFIG_EDITOR, TableConfigService, TelemetryLoggerSink, TelemetryService, UiLayoutLifecycleContractError, UiLayoutLifecycleHttpError, UiLayoutLifecycleService, ValidationPattern, WidgetPageCompositionFactory, WidgetPageDataSourceRuntimeService, WidgetPageStateRuntimeService, WidgetShellComponent, applyLocalCustomizations$2 as applyLocalCustomizations, applyLocalCustomizations$1 as applyLocalFormCustomizations, assertPraxisCollectionExportArtifact, assertPraxisRuntimeComponentObservationSerializable, buildAngularValidators, buildApiUrl, buildBaseColumnFromDef, buildBaseFormField, buildFormConfigFromEditorialTemplate, buildHeaders, buildPageKey, buildPraxisActionControlCss, buildPraxisCollectionSearchCss, buildPraxisEffectDistinctKey, buildPraxisLayerScaleCss, buildPraxisThemeSurfaceCss, buildSchemaId, buildSchemaIdStorageKeySegment, buildValidatorsFromValidatorOptions, cancelIfCpfInvalidHook, canonicalJsonSha256, canonicalJsonStringify, clampRange, classifyEntityLookupResult, clonePraxisRuntimeComponentObservation, cloneTableConfig, cloneUiLayoutJsonDocument, cnpjAlphaValidator, collapseWhitespace, composeHeadersWithVersion, conditionalAsyncValidator, convertFormLayoutToConfig, createCorporateLoggerConfig, createCorporateObservabilityOptions, createCpfCnpjValidator, createDefaultFormConfig, createDefaultTableConfig, createDynamicRecord, createEmptyFormConfig, createEmptyRichContentDocument, createFieldLayoutItem, createPersistedPage, customAsyncValidatorFn, customValidatorFn, debounceAsyncValidator, deepMerge, domainKnowledgeTimelineToRichContentDocument, domainRuleTimelineToRichContentDocument, ensureIds, ensureNoConflictsHookFactory, ensurePageIds, escapePraxisExportCell, evaluateFieldAccess, extractNormalizedError, extractRecordId, fetchWithETag, fileTypeValidator, fillUndefined, findBuiltinWidgetShellPreset, formIdentityIssues, generateBulkIdempotencyKey, generateId, getDefaultFormHints, getEditorialCompliancePresetById, getEditorialFormTemplateById, getEditorialFormTemplateCatalog, getEditorialSolutionById, getEditorialSolutionCatalog, getEditorialSolutionPresetById, getEditorialThemePresetById, getEssentialConfig, getFieldMetadataCapabilities, getFormColumnFieldNames, getFormLayoutFieldNames, getGlobalActionCatalog, getGlobalActionPayloadActualType, getGlobalActionPayloadTypeIssue, getGlobalActionProviderEvidence, getGlobalActionUiSchema, getMissingGlobalActionPayloadKeys, getPraxisTableCellVisualizationConstraint, getPraxisTableCellVisualizationGuidance, getReferencedFieldMetadata, getRequiredGlobalActionPayloadKeys, getTextTransformer, getWidgetShellActionIdError, hasMeaningfulGlobalActionPayloadValue, hasPraxisCollectionExportArtifact, interpolatePraxisTranslation, isAllowedEditorialContentFormat, isAllowedEditorialHref, isBulkExecutionTerminal, isCssTextTransform, isDomainRuleSnapshotProblemResponse, isDynamicDataRecord, isEditorialComponentMeta, isEntityLookupMultiplePayloadMode, isEntityLookupPayloadMode, isEntityLookupPayloadModeCompatible, isEntityLookupResultSelectable, isEntityLookupSinglePayloadMode, isFormLayoutItem, isGlobalActionProviderOperational, isGlobalActionRef, isInlineFilterControlType, isLookupDialogSize, isLookupFilterFieldType, isLookupFilterOperator, isPraxisI18nMessageDescriptor, isPraxisPresentationVisualizationTableSafe, isPraxisRuntimeGlobalActionEffect, isProgrammaticDateRangePreset, isRangeValidForFilter, isRequiredGlobalActionParamPayloadMissing, isRequiredGlobalActionPayloadMissing, isStaticDateRangePreset, isSurfaceNavigationError, isTableConfigV2, isValidFormConfig, isValidTableConfig, legacyCnpjValidator, legacyCpfValidator, logOnErrorHook, mapFieldDefinitionToMetadata, mapFieldDefinitionsToMetadata, markGlobalActionProviderOperational, matchFieldValidator, materializeFormLayoutFromMetadata, materializeGovernedPaletteColors, materializeGovernedPaletteEntries, materializeResourceIdentity, maxFileSizeValidator, mergeFieldMetadata, mergePraxisI18nConfigs, mergeTableConfigs, migrateFormLayoutRule, migrateLegacyCompositionLink, migrateLegacyCompositionLinks, minWordsValidator, nestedPortPathIdentity, normalizeCardMediaAspectRatio, normalizeControlTypeKey, normalizeControlTypeToken, normalizeEditorialLink, normalizeEnd, normalizeFieldAccessMetadata, normalizeFieldConstraints, normalizeFieldPresentation, normalizeFormConfig, normalizeFormLayoutItems, normalizeFormMetadata, normalizeGlobalActionRef$1 as normalizeGlobalActionRef, normalizeLayoutPolicy, normalizeLookupFilterRequest, normalizePath, normalizePraxisDataQueryContext, normalizePraxisEffectPolicy, normalizePraxisPresentationVisualization, normalizePraxisQueryFilterExpression, normalizePraxisQueryFilterNode, normalizeReactiveDeterminations, normalizeResourceAvailabilityReasonCode, normalizeResourceIdentityContract, normalizeStart, normalizeSurfaceOperationContext, normalizeUnknownError, normalizeWidgetEventPath, notifySuccessHook, parseJsonResponseOrEmpty, praxisLoadingInterceptorFn, prefillFromContextHook, prepareCanvasArrangement, projectComponentAuthoringManifest, projectGroupedCommandPartialRows, 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, providePraxisTelemetry, providePraxisToastGlobalActions, providePraxisUserContextSummaryMetadata, provideRemoteGlobalConfig, readPraxisExportValue, reconcileFilterConfig, reconcileFormConfig, reconcileTableConfig, registerPraxisRuntimeComponentObservation, removeDiacritics, renderPraxisPresentationVisualizationHtml, reportTelemetryHookFactory, requiredCheckedValidator, requiredPresenceValidator, resolveBuiltinPresets, resolveBuiltinWidgetShellAppearance, resolveColumnTypeFromFieldDefinition, resolveControlTypeAlias, resolveDataField, resolveDateRangeShortcutPreset, resolveDateRangeShortcutPresets, resolveDefaultValuePresentationFormat, resolveEntityLookupPayloadMode, resolveFieldPresentation, resolveGroupedCommandPartialRowSpans, resolveHidden, resolveInlineFilterControlType, resolveInlineFilterControlTypeToBaseControlType, resolveLoggerConfig, resolveObservabilityOptions, resolveOffset, resolveOrder, resolvePraxisCollectionExportItems, resolvePraxisExportFields, resolvePraxisExportScope, resolvePraxisFilterCriteria, resolvePraxisI18nDocument, resolvePraxisMicroVisualizationTone, resolveResourceAvailabilityReasonKey, resolveResourceIdentityContract, resolveSpan, resolveTextMaskFormat, resolveTextMaskFormatFromFieldDefinition, resolveValuePresentation, resolveValuePresentationLocale, resolveWidgetPageLayoutPreset, serializeEntityLookupValueForPayload, serializeOptionSourceFilterRequest, serializePraxisCollectionToCsv, serializePraxisCollectionToExcel, serializePraxisCollectionToJson, slugify, staticDateRangePresetToPreset, stripMasksHook, supportsConfigDocuments, supportsImplicitValuePresentation, syncWithServerMetadata, textSha256, toCamel, toCapitalize, toKebab, toPascal, toSentenceCase, toSnake, toTitleCase, translateResourceAvailabilityReason, translateResourceDiscoveryText, translateSurfaceNavigationRejected, translateSurfaceOpenFailed, translateUnavailableWorkflowMessage, trim, uiLayoutJsonIdentity, uniqueAsyncValidator, urlValidator, validateCanvasArrangement, validateGlobalActionRef, validateGlobalActionRefs, withFormConfigSections, withMessage, withPraxisHttpLoading };