@praxisui/core 10.0.0-rc.11 → 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;
@@ -6516,12 +6530,10 @@ function createDefaultTableConfig() {
6516
6530
  showPageInfo: true,
6517
6531
  position: 'bottom',
6518
6532
  style: 'default',
6519
- strategy: 'client',
6520
6533
  },
6521
6534
  sorting: {
6522
6535
  enabled: true,
6523
6536
  multiSort: false,
6524
- strategy: 'client',
6525
6537
  showSortIndicators: true,
6526
6538
  indicatorPosition: 'end',
6527
6539
  allowClearSort: true,
@@ -10968,15 +10980,26 @@ const DEFAULT_JSON_LOGIC_OPERATORS = [
10968
10980
  operator: 'round',
10969
10981
  namespace: 'praxis',
10970
10982
  minArgs: 1,
10971
- maxArgs: 1,
10983
+ maxArgs: 2,
10972
10984
  returnType: 'number',
10973
10985
  purity: 'pure',
10974
10986
  evaluate: (args, _context, helpers) => {
10975
- const [value] = helpers.requireArgs('round', args, 1, 1);
10987
+ const [value, precisionArg] = helpers.requireArgs('round', args, 1, 2);
10976
10988
  if (typeof value !== 'number' || !Number.isFinite(value)) {
10977
10989
  throw new PraxisJsonLogicError('RULE_ARGUMENT_TYPE_INVALID', '`round` requires a finite numeric argument.');
10978
10990
  }
10979
- 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;
10980
11003
  },
10981
11004
  },
10982
11005
  {
@@ -11487,7 +11510,7 @@ function hasPath(target, path) {
11487
11510
  return true;
11488
11511
  }
11489
11512
 
11490
- const DEFAULT_JSON_LOGIC$3 = new PraxisJsonLogicService(null);
11513
+ const DEFAULT_JSON_LOGIC$4 = new PraxisJsonLogicService(null);
11491
11514
  const FORM_RULE_OPTIONS = {
11492
11515
  availableRoots: ['form'],
11493
11516
  defaultRoot: 'form',
@@ -11675,7 +11698,7 @@ function matchesConditionalValidationRule(jsonLogic, condition, model) {
11675
11698
  throw error;
11676
11699
  }
11677
11700
  }
11678
- function composeConditionalValidators(rules, jsonLogic = DEFAULT_JSON_LOGIC$3) {
11701
+ function composeConditionalValidators(rules, jsonLogic = DEFAULT_JSON_LOGIC$4) {
11679
11702
  // Build per-rule validators once
11680
11703
  const built = rules.map((r) => buildValidatorsFromValidatorOptions(r.validators, jsonLogic));
11681
11704
  const sync = (control) => {
@@ -11920,7 +11943,7 @@ function buildAngularValidators(field) {
11920
11943
  av.push(uniqueAsyncValidator(field.uniqueValidator, field.uniqueMessage));
11921
11944
  // Conditional (canonical declarative array)
11922
11945
  if (Array.isArray(field.conditionalValidation)) {
11923
- const composed = composeConditionalValidators(field.conditionalValidation, DEFAULT_JSON_LOGIC$3);
11946
+ const composed = composeConditionalValidators(field.conditionalValidation, DEFAULT_JSON_LOGIC$4);
11924
11947
  if (composed.sync)
11925
11948
  v.push(composed.sync);
11926
11949
  if (composed.async)
@@ -11938,7 +11961,7 @@ function isBooleanRequiredField(field) {
11938
11961
  const type = String(field.type ?? field.dataType ?? '').toLowerCase();
11939
11962
  return type === 'boolean' || controlType === 'checkbox' || controlType === 'toggle';
11940
11963
  }
11941
- function buildValidatorsFromValidatorOptions(opts = {}, jsonLogic = DEFAULT_JSON_LOGIC$3) {
11964
+ function buildValidatorsFromValidatorOptions(opts = {}, jsonLogic = DEFAULT_JSON_LOGIC$4) {
11942
11965
  const v = [];
11943
11966
  let av = [];
11944
11967
  if (opts.required)
@@ -15593,6 +15616,70 @@ class PraxisBulkClientService {
15593
15616
  })
15594
15617
  .pipe(map((res) => this.unwrap(res)));
15595
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
+ }
15596
15683
  /**
15597
15684
  * Solicita cancelamento de uma execucao em andamento.
15598
15685
  */
@@ -15631,20 +15718,32 @@ class PraxisBulkClientService {
15631
15718
  return this.discovery.resolveHref(path, options);
15632
15719
  }
15633
15720
  interpolatePath(path, params) {
15721
+ const hadProposalPlaceholder = path.includes('{proposalId}');
15722
+ const hadExecutionPlaceholder = path.includes('{executionId}');
15634
15723
  let result = path;
15635
15724
  for (const [key, val] of Object.entries(params)) {
15636
15725
  const placeholder = `{${key}}`;
15637
15726
  if (result.includes(placeholder)) {
15638
- result = result.replace(placeholder, encodeURIComponent(String(val)));
15727
+ result = result.split(placeholder).join(encodeURIComponent(String(val)));
15639
15728
  }
15640
15729
  }
15641
15730
  const [basePath, query] = result.split('?');
15642
15731
  let updatedBase = basePath;
15643
- if (params['proposalId'] && !basePath.includes('{proposalId}') && !basePath.includes(String(params['proposalId']))) {
15644
- 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
+ }
15645
15741
  }
15646
- else if (params['executionId'] && !basePath.includes('{executionId}') && !basePath.includes(String(params['executionId']))) {
15647
- 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
+ }
15648
15747
  }
15649
15748
  return query != null ? `${updatedBase}?${query}` : updatedBase;
15650
15749
  }
@@ -39360,7 +39459,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
39360
39459
  args: [{ providedIn: 'root' }]
39361
39460
  }] });
39362
39461
 
39363
- const DEFAULT_JSON_LOGIC$2 = new PraxisJsonLogicService(null);
39462
+ const DEFAULT_JSON_LOGIC$3 = new PraxisJsonLogicService(null);
39364
39463
  class WidgetPageStateRuntimeService {
39365
39464
  jsonLogic;
39366
39465
  connections = new ConnectionManagerService();
@@ -39374,7 +39473,7 @@ class WidgetPageStateRuntimeService {
39374
39473
  defaultRoot: 'state',
39375
39474
  allowImplicitRoot: true,
39376
39475
  };
39377
- constructor(jsonLogic = DEFAULT_JSON_LOGIC$2) {
39476
+ constructor(jsonLogic = DEFAULT_JSON_LOGIC$3) {
39378
39477
  this.jsonLogic = jsonLogic;
39379
39478
  }
39380
39479
  normalizeState(state) {
@@ -39872,6 +39971,282 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
39872
39971
  args: [{ providedIn: 'root' }]
39873
39972
  }], ctorParameters: () => [{ type: PraxisJsonLogicService }] });
39874
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
+
39875
40250
  const TRANSFORM_CATALOG = [
39876
40251
  {
39877
40252
  kind: 'format-value', phase: 'link-propagation', label: 'Format Value',
@@ -45335,6 +45710,12 @@ class DynamicWidgetPageComponent {
45335
45710
  })();
45336
45711
  conn = inject(ConnectionManagerService);
45337
45712
  stateRuntime = inject(WidgetPageStateRuntimeService);
45713
+ dataSourceRuntime = inject(WidgetPageDataSourceRuntimeService);
45714
+ dataSourceTeardown;
45715
+ currentDataSourcesSignature = null;
45716
+ pendingDataSourceUpdates = [];
45717
+ isCoalescingDataSourceUpdates = false;
45718
+ dataSourceRuntimeOverlay = new Map();
45338
45719
  nestedWidgetAccessor = new NestedWidgetConfigAccessor();
45339
45720
  settingsPanel = inject(SETTINGS_PANEL_BRIDGE, {
45340
45721
  optional: true,
@@ -45420,6 +45801,12 @@ class DynamicWidgetPageComponent {
45420
45801
  afterNextRender({ read: () => this.observeHostWidth() });
45421
45802
  }
45422
45803
  ngOnDestroy() {
45804
+ this.dataSourceTeardown?.();
45805
+ this.dataSourceTeardown = undefined;
45806
+ this.currentDataSourcesSignature = null;
45807
+ this.pendingDataSourceUpdates = [];
45808
+ this.isCoalescingDataSourceUpdates = false;
45809
+ this.dataSourceRuntimeOverlay.clear();
45423
45810
  this.persistenceGeneration++;
45424
45811
  this.persistenceLoad?.unsubscribe();
45425
45812
  this.persistenceMutation?.unsubscribe();
@@ -45500,12 +45887,17 @@ class DynamicWidgetPageComponent {
45500
45887
  state: this.stateRuntime.normalizeState(resolvedPage.state),
45501
45888
  }
45502
45889
  : resolvedPage;
45890
+ if (changes['pageIdentity'] ||
45891
+ this.getDataSourcesSignature(this.pageDefinition?.dataSources) !==
45892
+ this.currentDataSourcesSignature) {
45893
+ this.dataSourceRuntimeOverlay.clear();
45894
+ }
45503
45895
  this.pageRuntime = this.buildStateRuntime(this.pageDefinition?.state, this.pageDefinition?.context);
45504
45896
  this.pageState = this.pageRuntime.state;
45505
45897
  const bootstrapSnapshot = this.bootstrapCompositionAdapter(this.pageDefinition);
45506
45898
  const rawWidgets = this.pageDefinition?.widgets || [];
45507
45899
  let widgets = this.applyEditShellActions(rawWidgets);
45508
- widgets = this.applyBootstrapCompositionHydration(widgets, bootstrapSnapshot);
45900
+ widgets = this.applyBootstrapCompositionHydration(widgets, bootstrapSnapshot, this.pageRuntime);
45509
45901
  widgets = this.applyChildCustomizationProjection(widgets);
45510
45902
  this.pageDefinition = this.pageDefinition
45511
45903
  ? { ...this.pageDefinition, widgets }
@@ -45513,6 +45905,7 @@ class DynamicWidgetPageComponent {
45513
45905
  this.page = this.pageDefinition;
45514
45906
  this.applyResponsivePresentation(this.pageDefinition, widgets, this.pageRuntime);
45515
45907
  this.reportStateDiagnostics(this.pageRuntime.diagnostics);
45908
+ this.restartDataSources(this.pageDefinition);
45516
45909
  }
45517
45910
  if (!changes['page'] &&
45518
45911
  !changes['context'] &&
@@ -45792,7 +46185,38 @@ class DynamicWidgetPageComponent {
45792
46185
  return projected.length ? Object.fromEntries(projected) : null;
45793
46186
  }
45794
46187
  buildStateRuntime(state, pageContext) {
45795
- 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;
45796
46220
  }
45797
46221
  bootstrapCompositionAdapter(page) {
45798
46222
  if (!page) {
@@ -45842,13 +46266,20 @@ class DynamicWidgetPageComponent {
45842
46266
  };
45843
46267
  });
45844
46268
  }
45845
- applyBootstrapCompositionHydration(widgets, bootstrapSnapshot) {
46269
+ applyBootstrapCompositionHydration(widgets, bootstrapSnapshot, runtime) {
45846
46270
  if (!this.compositionDefinition || !bootstrapSnapshot) {
45847
46271
  return this.cloneWidgets(widgets);
45848
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;
45849
46280
  const projected = this.compositionRuntime.projectStateWidgetInputs(this.compositionDefinition, {
45850
46281
  widgets,
45851
- state: bootstrapSnapshot.state,
46282
+ state: effectiveState,
45852
46283
  now: bootstrapSnapshot.generatedAt,
45853
46284
  }).widgets;
45854
46285
  return this.applyRecordRelatedSurfaceAiContext(projected);
@@ -46734,13 +47165,19 @@ class DynamicWidgetPageComponent {
46734
47165
  if (widget.definition?.id !== 'praxis-rich-content') {
46735
47166
  return widget;
46736
47167
  }
47168
+ const authoredContext = (widget.definition.inputs?.['context'] || {});
47169
+ const mergedRichContext = {
47170
+ ...(runtime.effectiveValues || {}),
47171
+ ...authoredContext,
47172
+ };
46737
47173
  return {
46738
47174
  ...widget,
46739
47175
  definition: {
46740
47176
  ...widget.definition,
46741
47177
  inputs: {
46742
47178
  ...(widget.definition.inputs || {}),
46743
- hostCapabilities: this.buildRichContentHostCapabilities(widget.key, runtime, widget.definition.inputs?.['context']),
47179
+ context: mergedRichContext,
47180
+ hostCapabilities: this.buildRichContentHostCapabilities(widget.key, runtime, mergedRichContext),
46744
47181
  },
46745
47182
  },
46746
47183
  };
@@ -47342,7 +47779,27 @@ class DynamicWidgetPageComponent {
47342
47779
  return raw;
47343
47780
  }
47344
47781
  lookup(ctx, path) {
47345
- 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;
47346
47803
  }
47347
47804
  openWidgetShellSettings(key) {
47348
47805
  if (!this.canOpenWidgetShellSettings())
@@ -48182,7 +48639,7 @@ class DynamicWidgetPageComponent {
48182
48639
  const stateBoundWidgets = skipStateWidgetProjection
48183
48640
  ? normalizedWidgets
48184
48641
  : bootstrapSnapshot
48185
- ? this.applyBootstrapCompositionHydration(normalizedWidgets, bootstrapSnapshot)
48642
+ ? this.applyBootstrapCompositionHydration(normalizedWidgets, bootstrapSnapshot, runtime)
48186
48643
  : this.compositionDefinition
48187
48644
  ? this.compositionRuntime.projectStateWidgetInputs(this.compositionDefinition, {
48188
48645
  widgets: normalizedWidgets,
@@ -48204,6 +48661,7 @@ class DynamicWidgetPageComponent {
48204
48661
  this.pageState = runtime.state;
48205
48662
  this.pageRuntime = runtime;
48206
48663
  this.applyResponsivePresentation(hydrated, hydrated?.widgets || stateBoundWidgets, runtime);
48664
+ this.restartDataSources(hydrated);
48207
48665
  if (this.widgetEventBus) {
48208
48666
  this.wiringSubscription?.unsubscribe();
48209
48667
  if (hydrated?.wiring && hydrated.wiring.length > 0) {
@@ -48226,6 +48684,84 @@ class DynamicWidgetPageComponent {
48226
48684
  this.savePage(canonicalPage);
48227
48685
  }
48228
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
+ }
48229
48765
  applyLayout(layout, grouping, deviceLayoutColumnsSelected = false) {
48230
48766
  this.layout = layout;
48231
48767
  this.canvas = undefined;
@@ -48263,6 +48799,8 @@ class DynamicWidgetPageComponent {
48263
48799
  const merged = {
48264
48800
  ...baseContext,
48265
48801
  ...(inputContext || {}),
48802
+ ...this.cloneStateValues(runtime.effectiveValues),
48803
+ state: this.cloneStateValues(runtime.effectiveValues),
48266
48804
  pageDeviceKind: this.resolveDeviceKind(),
48267
48805
  pageLayoutPreset: layoutPreset || null,
48268
48806
  pageThemePreset: themePreset || null,
@@ -51214,7 +51752,26 @@ class DynamicWidgetPageComponent {
51214
51752
  if (stored !== null || defaultPage) {
51215
51753
  this.isHydrating = true;
51216
51754
  try {
51217
- 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);
51218
51775
  this.authoredPageDefinition = this.clonePageDefinition(loaded);
51219
51776
  this.applyPageUpdate(loaded, false);
51220
51777
  }
@@ -57268,4 +57825,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
57268
57825
  * Generated bundle index. Do not edit.
57269
57826
  */
57270
57827
 
57271
- 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 };