@praxisui/core 9.0.5-rc.1 → 9.0.5-rc.11

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.
@@ -2,7 +2,7 @@ import * as i0 from '@angular/core';
2
2
  import { Component, InjectionToken, Injectable, inject, Inject, Optional, makeEnvironmentProviders, APP_INITIALIZER, signal, computed, DestroyRef, ENVIRONMENT_INITIALIZER, ErrorHandler, Input, Directive, input, booleanAttribute, ChangeDetectionStrategy, EventEmitter, Output, SecurityContext, ViewContainerRef, SimpleChange, ContentChild, HostBinding, HostListener, ViewChildren, ViewChild, Injector, output, effect } from '@angular/core';
3
3
  import * as i1 from '@angular/common/http';
4
4
  import { HttpHeaders, HttpClient, HttpParams, HttpResponse, HttpContextToken, HTTP_INTERCEPTORS, withInterceptors } from '@angular/common/http';
5
- import { of, defer, throwError, from, EMPTY, BehaviorSubject, firstValueFrom, Subject, map as map$1, switchMap as switchMap$1, catchError as catchError$1 } from 'rxjs';
5
+ import { of, defer, throwError, from, EMPTY, BehaviorSubject, firstValueFrom, Subject, finalize as finalize$1, shareReplay as shareReplay$1, map as map$1, switchMap as switchMap$1, catchError as catchError$1 } from 'rxjs';
6
6
  import { switchMap, take, map, catchError, concatMap, tap, shareReplay, takeUntil, toArray, finalize } from 'rxjs/operators';
7
7
  import * as i1$3 from '@angular/common';
8
8
  import { Location, DOCUMENT, CommonModule } from '@angular/common';
@@ -807,7 +807,7 @@ function resolveControlTypeAlias(value, fallback = FieldControlType.INPUT) {
807
807
  }
808
808
 
809
809
  function normalizeResourceIdentityContract(value) {
810
- if (!isRecord$3(value))
810
+ if (!isRecord$4(value))
811
811
  return null;
812
812
  const keyField = normalizeText$3(value['keyField']);
813
813
  const titleField = normalizeText$3(value['titleField']);
@@ -835,7 +835,7 @@ function normalizeResourceIdentityContract(value) {
835
835
  function resolveResourceIdentityContract(options) {
836
836
  const diagnostics = [];
837
837
  const explicit = normalizeResourceIdentityContract(options.explicitIdentity);
838
- const hasExplicitDeclaration = isRecord$3(options.explicitIdentity);
838
+ const hasExplicitDeclaration = isRecord$4(options.explicitIdentity);
839
839
  if (explicit && explicit.valid !== false) {
840
840
  return {
841
841
  contract: { ...explicit, source: 'explicit' },
@@ -963,7 +963,7 @@ function normalizeResourceIdentityDiagnostics(value) {
963
963
  if (!Array.isArray(value))
964
964
  return [];
965
965
  return value.filter((item) => {
966
- return isRecord$3(item)
966
+ return isRecord$4(item)
967
967
  && isResourceIdentityDiagnosticCode(item['code'])
968
968
  && (item['severity'] === 'info' || item['severity'] === 'warning')
969
969
  && typeof item['message'] === 'string';
@@ -992,7 +992,7 @@ function normalizeStringList(value) {
992
992
  return [];
993
993
  return [...new Set(value.map(normalizeText$3).filter((item) => !!item))];
994
994
  }
995
- function isRecord$3(value) {
995
+ function isRecord$4(value) {
996
996
  return !!value && typeof value === 'object' && !Array.isArray(value);
997
997
  }
998
998
 
@@ -2556,15 +2556,22 @@ class SchemaNormalizerService {
2556
2556
  const key = String(raw.key ?? '').trim();
2557
2557
  const kind = String(raw.kind ?? '').trim();
2558
2558
  const minSearchChars = Number(raw.minSearchChars);
2559
+ const inputFormat = String(raw.inputFormat ?? 'text').trim();
2559
2560
  if (!key ||
2560
2561
  seenKeys.has(key) ||
2561
2562
  !LOOKUP_SEARCH_STRATEGY_KINDS.has(kind) ||
2563
+ !['text', 'digits'].includes(inputFormat) ||
2562
2564
  !Number.isInteger(minSearchChars) ||
2563
2565
  minSearchChars < 1) {
2564
2566
  return undefined;
2565
2567
  }
2566
2568
  seenKeys.add(key);
2567
- return { key, kind, minSearchChars };
2569
+ return {
2570
+ key,
2571
+ kind,
2572
+ minSearchChars,
2573
+ ...(inputFormat === 'digits' ? { inputFormat } : {}),
2574
+ };
2568
2575
  })
2569
2576
  .filter((item) => !!item);
2570
2577
  if (searchStrategies.length) {
@@ -13805,6 +13812,7 @@ class ResourceDiscoveryService {
13805
13812
  http = inject(HttpClient);
13806
13813
  schemaNormalizer = inject(SchemaNormalizerService);
13807
13814
  apiUrlConfig = inject(API_URL);
13815
+ surfaceCatalogInFlightByHref = new Map();
13808
13816
  getLinks(source, rel) {
13809
13817
  const candidate = this.extractLinks(source)?.[rel];
13810
13818
  if (!candidate) {
@@ -13826,7 +13834,19 @@ class ResourceDiscoveryService {
13826
13834
  return this.fetchJson(this.requireLinkHref(source, rel, options), options);
13827
13835
  }
13828
13836
  getSurfaces(source, options) {
13829
- return this.followLink(source, 'surfaces', options);
13837
+ const href = this.requireLinkHref(source, 'surfaces', options);
13838
+ const existing = this.surfaceCatalogInFlightByHref.get(href);
13839
+ if (existing) {
13840
+ return existing;
13841
+ }
13842
+ let request;
13843
+ request = this.fetchJson(href, options).pipe(finalize$1(() => {
13844
+ if (this.surfaceCatalogInFlightByHref.get(href) === request) {
13845
+ this.surfaceCatalogInFlightByHref.delete(href);
13846
+ }
13847
+ }), shareReplay$1({ bufferSize: 1, refCount: true }));
13848
+ this.surfaceCatalogInFlightByHref.set(href, request);
13849
+ return request;
13830
13850
  }
13831
13851
  getActions(source, options) {
13832
13852
  return this.followLink(source, 'actions', options);
@@ -14149,7 +14169,7 @@ const SURFACE_OPEN_PRESETS = [
14149
14169
  * Invalid roles are omitted and a completely empty context resolves to `null`.
14150
14170
  */
14151
14171
  function normalizeSurfaceOperationContext(value) {
14152
- if (!isRecord$2(value))
14172
+ if (!isRecord$3(value))
14153
14173
  return null;
14154
14174
  const taskScope = normalizeResourceRef(value['taskScope']);
14155
14175
  const subject = normalizeResourceRef(value['subject']);
@@ -14163,7 +14183,7 @@ function normalizeSurfaceOperationContext(value) {
14163
14183
  };
14164
14184
  }
14165
14185
  function normalizeResourceRef(value) {
14166
- if (!isRecord$2(value))
14186
+ if (!isRecord$3(value))
14167
14187
  return undefined;
14168
14188
  const resourceKey = normalizeText(value['resourceKey']);
14169
14189
  const resourceId = normalizeResourceId(value['resourceId']);
@@ -14177,7 +14197,7 @@ function normalizeResourceRef(value) {
14177
14197
  };
14178
14198
  }
14179
14199
  function normalizeRelationship(value) {
14180
- if (!isRecord$2(value))
14200
+ if (!isRecord$3(value))
14181
14201
  return undefined;
14182
14202
  const surfaceId = normalizeText(value['surfaceId']);
14183
14203
  const childResourceKey = normalizeText(value['childResourceKey']);
@@ -14191,7 +14211,7 @@ function normalizeRelationship(value) {
14191
14211
  };
14192
14212
  }
14193
14213
  function normalizeIdentity(value) {
14194
- if (!isRecord$2(value) || !Array.isArray(value['metadata']))
14214
+ if (!isRecord$3(value) || !Array.isArray(value['metadata']))
14195
14215
  return undefined;
14196
14216
  const key = normalizeIdentityPart(value['key']);
14197
14217
  const title = normalizeIdentityPart(value['title']);
@@ -14214,7 +14234,7 @@ function normalizeIdentity(value) {
14214
14234
  };
14215
14235
  }
14216
14236
  function normalizeIdentityPart(value) {
14217
- if (!isRecord$2(value))
14237
+ if (!isRecord$3(value))
14218
14238
  return undefined;
14219
14239
  const field = normalizeText(value['field']);
14220
14240
  const partValue = normalizeDisplayValue(value['value']);
@@ -14237,11 +14257,11 @@ function normalizeDisplayValue(value) {
14237
14257
  return typeof value === 'boolean' ? value : undefined;
14238
14258
  }
14239
14259
  function cloneJsonRecord(value) {
14240
- if (!isRecord$2(value))
14260
+ if (!isRecord$3(value))
14241
14261
  return undefined;
14242
14262
  try {
14243
14263
  const cloned = JSON.parse(JSON.stringify(value));
14244
- return isRecord$2(cloned) ? cloned : undefined;
14264
+ return isRecord$3(cloned) ? cloned : undefined;
14245
14265
  }
14246
14266
  catch {
14247
14267
  return undefined;
@@ -14261,7 +14281,7 @@ function normalizeText(value) {
14261
14281
  const normalized = value.trim();
14262
14282
  return normalized || undefined;
14263
14283
  }
14264
- function isRecord$2(value) {
14284
+ function isRecord$3(value) {
14265
14285
  return !!value && typeof value === 'object' && !Array.isArray(value);
14266
14286
  }
14267
14287
 
@@ -15222,6 +15242,7 @@ const INTAKE_HREF = '/api/praxis/config/domain-rules/intake';
15222
15242
  const SIMULATIONS_HREF = '/api/praxis/config/domain-rules/simulations';
15223
15243
  const PUBLICATIONS_HREF = '/api/praxis/config/domain-rules/publications';
15224
15244
  const MATERIALIZATIONS_HREF = '/api/praxis/config/domain-rules/materializations';
15245
+ const SNAPSHOTS_HREF = '/api/praxis/config/domain-rules/snapshots';
15225
15246
  class DomainRuleService {
15226
15247
  http = inject(HttpClient);
15227
15248
  discovery = inject(ResourceDiscoveryService);
@@ -15261,6 +15282,47 @@ class DomainRuleService {
15261
15282
  transitionMaterializationStatus(materializationId, request, options = {}) {
15262
15283
  return this.http.patch(this.discovery.resolveHref(`${MATERIALIZATIONS_HREF}/${encodeURIComponent(materializationId)}/status`, options), request, { headers: this.resolveHeaders(options) });
15263
15284
  }
15285
+ listSnapshotVersions(ruleSetKey, limit = 50, options = {}) {
15286
+ return this.http.get(this.discovery.resolveHref(SNAPSHOTS_HREF, options), {
15287
+ params: new HttpParams()
15288
+ .set('ruleSetKey', ruleSetKey)
15289
+ .set('limit', String(limit)),
15290
+ headers: this.resolveHeaders(options),
15291
+ });
15292
+ }
15293
+ getSnapshotHeadStatus(ruleSetKey, options = {}) {
15294
+ return this.http.get(this.discovery.resolveHref(`${SNAPSHOTS_HREF}/head/status`, options), {
15295
+ params: new HttpParams().set('ruleSetKey', ruleSetKey),
15296
+ headers: this.resolveHeaders(options),
15297
+ });
15298
+ }
15299
+ getSnapshotHead(ruleSetKey, options = {}) {
15300
+ return this.http.get(this.discovery.resolveHref(`${SNAPSHOTS_HREF}/head`, options), {
15301
+ params: new HttpParams().set('ruleSetKey', ruleSetKey),
15302
+ headers: this.resolveHeaders(options),
15303
+ });
15304
+ }
15305
+ prepareSnapshotComposition(request, options = {}) {
15306
+ return this.http.post(this.discovery.resolveHref(`${SNAPSHOTS_HREF}/composition-manifest`, options), request, { headers: this.resolveHeaders(options) });
15307
+ }
15308
+ approveSnapshotComposition(request, options = {}) {
15309
+ return this.http.post(this.discovery.resolveHref(`${SNAPSHOTS_HREF}/composition-approvals`, options), request, { headers: this.resolveHeaders(options) });
15310
+ }
15311
+ publishSnapshot(request, currentHeadEtag, options = {}) {
15312
+ let headers = this.resolveHeaders(options) ?? new HttpHeaders();
15313
+ headers = currentHeadEtag
15314
+ ? headers.set('If-Match', this.strongEntityTag(currentHeadEtag))
15315
+ : headers.set('If-None-Match', '*');
15316
+ return this.http.post(this.discovery.resolveHref(SNAPSHOTS_HREF, options), request, { headers });
15317
+ }
15318
+ activateSnapshot(snapshotKey, headEtag, options = {}) {
15319
+ const resolved = this.resolveHeaders(options) ?? new HttpHeaders();
15320
+ return this.http.post(this.discovery.resolveHref(`${SNAPSHOTS_HREF}/${encodeURIComponent(snapshotKey)}/activate`, options), null, { headers: resolved.set('If-Match', this.strongEntityTag(headEtag)) });
15321
+ }
15322
+ rollbackSnapshot(snapshotKey, headEtag, options = {}) {
15323
+ const resolved = this.resolveHeaders(options) ?? new HttpHeaders();
15324
+ return this.http.post(this.discovery.resolveHref(`${SNAPSHOTS_HREF}/${encodeURIComponent(snapshotKey)}/rollback`, options), null, { headers: resolved.set('If-Match', this.strongEntityTag(headEtag)) });
15325
+ }
15264
15326
  buildParams(filters) {
15265
15327
  let params = new HttpParams();
15266
15328
  Object.entries(filters).forEach(([key, value]) => {
@@ -15270,6 +15332,15 @@ class DomainRuleService {
15270
15332
  });
15271
15333
  return params;
15272
15334
  }
15335
+ strongEntityTag(value) {
15336
+ const trimmed = value.trim();
15337
+ if (/^"[^"\r\n]*"$/.test(trimmed))
15338
+ return trimmed;
15339
+ if (!trimmed || /["\r\n,]/.test(trimmed) || /^W\//i.test(trimmed)) {
15340
+ throw new Error('The mutable-head ETag is not a valid strong entity tag.');
15341
+ }
15342
+ return `"${trimmed}"`;
15343
+ }
15273
15344
  resolveHeaders(options) {
15274
15345
  if (options.headers instanceof HttpHeaders) {
15275
15346
  return options.headers;
@@ -17840,7 +17911,7 @@ function normalizeUnknownError(rawError) {
17840
17911
  if (typeof candidate === 'string') {
17841
17912
  return normalizeFromParts('Error', candidate);
17842
17913
  }
17843
- if (isRecord$1(candidate)) {
17914
+ if (isRecord$2(candidate)) {
17844
17915
  const name = toText(candidate['name'], 'Error');
17845
17916
  const message = toText(candidate['message'], safeStringify(candidate));
17846
17917
  const stack = toStack(candidate['stack']);
@@ -17859,7 +17930,7 @@ function extractErrorCandidate(data) {
17859
17930
  if (data instanceof Error || typeof data === 'string') {
17860
17931
  return data;
17861
17932
  }
17862
- if (!isRecord$1(data)) {
17933
+ if (!isRecord$2(data)) {
17863
17934
  return undefined;
17864
17935
  }
17865
17936
  if ('error' in data) {
@@ -17877,7 +17948,7 @@ function extractErrorCandidate(data) {
17877
17948
  return undefined;
17878
17949
  }
17879
17950
  function unwrapRejection(error) {
17880
- if (!isRecord$1(error)) {
17951
+ if (!isRecord$2(error)) {
17881
17952
  return error;
17882
17953
  }
17883
17954
  if ('rejection' in error) {
@@ -17937,7 +18008,7 @@ function safeStringify(value) {
17937
18008
  return UNKNOWN_ERROR_MESSAGE;
17938
18009
  }
17939
18010
  }
17940
- function isRecord$1(value) {
18011
+ function isRecord$2(value) {
17941
18012
  return !!value && typeof value === 'object';
17942
18013
  }
17943
18014
 
@@ -20864,6 +20935,127 @@ function convertFormLayoutToConfig(formLayout) {
20864
20935
  return ensureIds({ sections });
20865
20936
  }
20866
20937
 
20938
+ /** Strictly normalizes the closed x-ui.formEffects payload. Invalid entries are ignored. */
20939
+ function normalizeFormEffects(value) {
20940
+ if (!Array.isArray(value)) {
20941
+ return [];
20942
+ }
20943
+ return value
20944
+ .map((candidate) => normalizeFormEffect(candidate))
20945
+ .filter((candidate) => candidate !== null);
20946
+ }
20947
+ function normalizeFormEffect(value) {
20948
+ if (!isRecord$1(value) || !hasOnlyKeys(value, ['id', 'trigger', 'operation', 'inputs', 'outputs'])) {
20949
+ return null;
20950
+ }
20951
+ const id = nonBlank(value['id']);
20952
+ const trigger = normalizeTrigger(value['trigger']);
20953
+ const operation = normalizeOperation(value['operation']);
20954
+ const inputs = normalizeInputs(value['inputs']);
20955
+ const outputs = normalizeOutputs(value['outputs']);
20956
+ if (!id || !trigger || !operation || !inputs.length || !outputs.length) {
20957
+ return null;
20958
+ }
20959
+ return { id, trigger, operation, inputs, outputs };
20960
+ }
20961
+ function normalizeTrigger(value) {
20962
+ if (!isRecord$1(value) || !hasOnlyKeys(value, ['event', 'fields', 'debounceMs', 'requiresValidSources'])) {
20963
+ return null;
20964
+ }
20965
+ const fields = stringArray(value['fields']);
20966
+ const debounceMs = value['debounceMs'];
20967
+ if (value['event'] !== 'value-change' ||
20968
+ !fields.length ||
20969
+ typeof debounceMs !== 'number' ||
20970
+ !Number.isInteger(debounceMs) ||
20971
+ debounceMs < 0 ||
20972
+ debounceMs > 60_000 ||
20973
+ typeof value['requiresValidSources'] !== 'boolean') {
20974
+ return null;
20975
+ }
20976
+ return {
20977
+ event: 'value-change',
20978
+ fields,
20979
+ debounceMs,
20980
+ requiresValidSources: value['requiresValidSources'],
20981
+ };
20982
+ }
20983
+ function normalizeOperation(value) {
20984
+ if (!isRecord$1(value) ||
20985
+ !hasOnlyKeys(value, ['operationId', 'path', 'method', 'requestSchemaUrl', 'responseSchemaUrl'])) {
20986
+ return null;
20987
+ }
20988
+ const operationId = nonBlank(value['operationId']);
20989
+ const path = nonBlank(value['path']);
20990
+ const requestSchemaUrl = nonBlank(value['requestSchemaUrl']);
20991
+ const responseSchemaUrl = nonBlank(value['responseSchemaUrl']);
20992
+ if (!operationId ||
20993
+ !path?.startsWith('/') ||
20994
+ value['method'] !== 'POST' ||
20995
+ !requestSchemaUrl?.startsWith('/schemas/filtered?') ||
20996
+ !responseSchemaUrl?.startsWith('/schemas/filtered?')) {
20997
+ return null;
20998
+ }
20999
+ return { operationId, path, method: 'POST', requestSchemaUrl, responseSchemaUrl };
21000
+ }
21001
+ function normalizeInputs(value) {
21002
+ if (!Array.isArray(value))
21003
+ return [];
21004
+ const result = [];
21005
+ const operationFields = new Set();
21006
+ for (const item of value) {
21007
+ if (!isRecord$1(item) || !hasOnlyKeys(item, ['formField', 'operationField']))
21008
+ return [];
21009
+ const formField = nonBlank(item['formField']);
21010
+ const operationField = nonBlank(item['operationField']);
21011
+ if (!formField || !operationField || operationFields.has(operationField))
21012
+ return [];
21013
+ operationFields.add(operationField);
21014
+ result.push({ formField, operationField });
21015
+ }
21016
+ return result;
21017
+ }
21018
+ function normalizeOutputs(value) {
21019
+ if (!Array.isArray(value))
21020
+ return [];
21021
+ const result = [];
21022
+ const formFields = new Set();
21023
+ for (const item of value) {
21024
+ if (!isRecord$1(item) || !hasOnlyKeys(item, ['operationField', 'formField', 'writePolicy']))
21025
+ return [];
21026
+ const operationField = nonBlank(item['operationField']);
21027
+ const formField = nonBlank(item['formField']);
21028
+ const writePolicy = item['writePolicy'];
21029
+ if (!operationField ||
21030
+ !formField ||
21031
+ formFields.has(formField) ||
21032
+ (writePolicy !== 'if-pristine' && writePolicy !== 'if-empty' && writePolicy !== 'replace')) {
21033
+ return [];
21034
+ }
21035
+ formFields.add(formField);
21036
+ result.push({ operationField, formField, writePolicy });
21037
+ }
21038
+ return result;
21039
+ }
21040
+ function stringArray(value) {
21041
+ if (!Array.isArray(value))
21042
+ return [];
21043
+ const values = value.map(nonBlank);
21044
+ if (values.some((item) => !item))
21045
+ return [];
21046
+ return [...new Set(values)];
21047
+ }
21048
+ function nonBlank(value) {
21049
+ return typeof value === 'string' && value.trim() ? value.trim() : null;
21050
+ }
21051
+ function isRecord$1(value) {
21052
+ return !!value && typeof value === 'object' && !Array.isArray(value);
21053
+ }
21054
+ function hasOnlyKeys(value, allowed) {
21055
+ const allowedSet = new Set(allowed);
21056
+ return Object.keys(value).every((key) => allowedSet.has(key));
21057
+ }
21058
+
20867
21059
  /**
20868
21060
  * Materializes a concrete FormConfig from a reusable editorial template.
20869
21061
  *
@@ -24284,14 +24476,62 @@ const GROUPED_COMMAND_FIXED_CONTROLS = new Set([
24284
24476
  ]);
24285
24477
  const KNOWN_FIELD_CONTROL_TYPES = new Set(Object.values(FieldControlType));
24286
24478
  /**
24287
- * Distributes the remainder of a generated grouped-command row without
24288
- * inventing arbitrary spans. The input order is the deterministic tie-breaker.
24289
- * Unknown, compact, upload and action controls remain unchanged.
24479
+ * Projects every visual row produced by responsive wrapping and distributes
24480
+ * its remainder without inventing arbitrary spans. Effective CSS `order` is
24481
+ * respected and the input order is the deterministic tie-breaker. Unknown,
24482
+ * compact, upload and action controls remain unchanged.
24290
24483
  */
24484
+ function projectGroupedCommandPartialRows(candidates, strategy = 'preserve') {
24485
+ const visualCandidates = candidates
24486
+ .map((candidate, index) => ({
24487
+ candidate,
24488
+ index,
24489
+ span: clampGridSpan(candidate.span),
24490
+ order: normalizeCandidateOrder(candidate.order),
24491
+ }))
24492
+ .sort((left, right) => left.order - right.order || left.index - right.index);
24493
+ const projected = candidates.map((candidate) => clampGridSpan(candidate.span));
24494
+ const visualRows = [];
24495
+ let visualRowStart = 0;
24496
+ let visualRowSpan = 0;
24497
+ const projectVisualRow = (endExclusive) => {
24498
+ const row = visualCandidates.slice(visualRowStart, endExclusive);
24499
+ if (!row.length)
24500
+ return;
24501
+ const rowCandidates = row.map((entry) => entry.candidate);
24502
+ const rowSpans = row.map((entry) => entry.span);
24503
+ const rowProjection = strategy === 'fill-compatible' && candidates.length >= 2
24504
+ ? fillGroupedCommandVisualRow(rowCandidates, rowSpans)
24505
+ : [...rowSpans];
24506
+ rowProjection.forEach((span, rowIndex) => {
24507
+ projected[row[rowIndex].index] = span;
24508
+ });
24509
+ visualRows.push({
24510
+ candidateIndexes: row.map((entry) => entry.index),
24511
+ canonicalSpans: rowSpans,
24512
+ projectedSpans: rowProjection,
24513
+ });
24514
+ };
24515
+ for (let index = 0; index < visualCandidates.length; index += 1) {
24516
+ const span = visualCandidates[index].span;
24517
+ if (visualRowSpan > 0 && visualRowSpan + span > 12) {
24518
+ projectVisualRow(index);
24519
+ visualRowStart = index;
24520
+ visualRowSpan = 0;
24521
+ }
24522
+ visualRowSpan += span;
24523
+ }
24524
+ projectVisualRow(visualCandidates.length);
24525
+ return { spans: projected, visualRows };
24526
+ }
24291
24527
  function resolveGroupedCommandPartialRowSpans(candidates, strategy = 'preserve') {
24292
- const resolved = candidates.map((candidate) => clampGridSpan(candidate.span));
24293
- if (strategy !== 'fill-compatible' || resolved.length < 2)
24294
- return resolved;
24528
+ return projectGroupedCommandPartialRows(candidates, strategy).spans;
24529
+ }
24530
+ function fillGroupedCommandVisualRow(candidates, rowSpans) {
24531
+ const resolved = [...rowSpans];
24532
+ if (resolved.length === 1) {
24533
+ return [isGroupedCommandExpansionEligible(candidates[0]) ? 12 : resolved[0]];
24534
+ }
24295
24535
  let remaining = 12 - resolved.reduce((total, span) => total + span, 0);
24296
24536
  if (remaining <= 0)
24297
24537
  return resolved;
@@ -24319,6 +24559,9 @@ function clampGridSpan(value) {
24319
24559
  return 12;
24320
24560
  return Math.max(1, Math.min(12, Math.round(value)));
24321
24561
  }
24562
+ function normalizeCandidateOrder(value) {
24563
+ return typeof value === 'number' && Number.isFinite(value) ? Math.round(value) : 0;
24564
+ }
24322
24565
  function nextCanonicalGroupedCommandSpan(span) {
24323
24566
  return GROUPED_COMMAND_CANONICAL_SPANS.find((candidate) => candidate > span) ?? null;
24324
24567
  }
@@ -41673,7 +41916,7 @@ class PraxisRelatedResourceOutletComponent {
41673
41916
  const discovery = this.injector.get(ResourceDiscoveryService);
41674
41917
  const catalog$ = discoverySource
41675
41918
  ? discovery.getSurfaces(discoverySource, options)
41676
- : discovery.fetchJson(href, options);
41919
+ : discovery.getSurfaces({ surfaces: { href: href } }, options);
41677
41920
  this.discoverySubscription = catalog$.subscribe({
41678
41921
  next: (response) => {
41679
41922
  if (this.discoveryRequestKey !== requestKey) {
@@ -43585,4 +43828,4 @@ function provideHookWhitelist(allowed) {
43585
43828
  * Generated bundle index. Do not edit.
43586
43829
  */
43587
43830
 
43588
- export { API_CONFIG_STORAGE_OPTIONS, API_URL, ASYNC_CONFIG_STORAGE, AllowedFileTypes, AnalyticsPresentationResolver, AnalyticsSchemaContractService, AnalyticsStatsRequestBuilderService, ApiConfigStorage, ApiEndpoint, BUILTIN_PAGE_LAYOUT_PRESETS, BUILTIN_PAGE_THEME_PRESETS, BUILTIN_SHELL_PRESETS, COMPONENT_METADATA_REGISTRY_I18N_CONFIG, COMPONENT_METADATA_REGISTRY_I18N_NAMESPACE, CONFIG_STORAGE, CONNECTION_STORAGE, ComponentKeyService, ComponentMetadataRegistry, CompositionRuntimeFacade, ConsoleLoggerSink, CrudOperationResolutionService, DEFAULT_FIELD_SELECTOR_CONTROL_TYPE_MAP, DEFAULT_JSON_LOGIC_OPERATORS, DEFAULT_TABLE_CONFIG, DOMAIN_CATALOG_COMPONENT_CONTEXT_PACK, DOMAIN_CATALOG_CONTEXT_HINT_SCHEMA_VERSION, DYNAMIC_PAGE_AI_CAPABILITIES, DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK, DYNAMIC_PAGE_CONFIG_EDITOR, DYNAMIC_PAGE_SHELL_EDITOR, DefaultLoadingRenderer, DeferredAsyncConfigStorage, DomainCatalogService, DomainKnowledgeService, DomainRuleService, DynamicFormService, DynamicWidgetLoaderDirective, DynamicWidgetPageComponent, EDITORIAL_ALLOWED_CONTENT_FORMATS, EDITORIAL_COMPLIANCE_PRESETS, EDITORIAL_EXTERNAL_LINK_REL, EDITORIAL_FORM_TEMPLATE_CATALOG, EDITORIAL_HTML_ENABLED, EDITORIAL_MARKDOWN_IMAGES_ENABLED, EDITORIAL_SOLUTION_CATALOG, EDITORIAL_SOLUTION_PRESETS, EDITORIAL_THEME_PRESETS, EDITORIAL_WIDGET_CONVENTION_INPUTS, EDITORIAL_WIDGET_TAG, EMPLOYEE_ONBOARDING_EDITORIAL_SOLUTION, EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE, EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_SOLUTION, EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_TEMPLATE, EVENT_REGISTRATION_EDITORIAL_SOLUTION, EVENT_REGISTRATION_EDITORIAL_TEMPLATE, EmptyStateCardComponent, EnterpriseRuntimeContextService, ErrorMessageService, FIELD_METADATA_CAPABILITIES, FIELD_SELECTOR_REGISTRY_BASE, FIELD_SELECTOR_REGISTRY_DISABLE_DEFAULTS, FIELD_SELECTOR_REGISTRY_OVERRIDES, FORM_HOOKS, FORM_HOOKS_PRESETS, FORM_HOOKS_WHITELIST, FORM_HOOK_RESOLVERS, FieldControlType, FieldDataType, FieldSelectorRegistry, FormHooksRegistry, GLOBAL_ACTION_CATALOG, GLOBAL_ACTION_HANDLERS, GLOBAL_ACTION_UI_SCHEMAS, GLOBAL_ANALYTICS_SERVICE, GLOBAL_API_CLIENT, GLOBAL_CONFIG, GLOBAL_DIALOG_SERVICE, GLOBAL_ROUTE_GUARD_RESOLVER, GLOBAL_SURFACE_SERVICE, GLOBAL_TOAST_SERVICE, GenericCrudService, GlobalActionService, GlobalConfigService, INLINE_FILTER_ALIAS_TOKENS, INLINE_FILTER_CONTROL_TYPES, INLINE_FILTER_CONTROL_TYPE_SET, INLINE_FILTER_CONTROL_TYPE_VALUES, INLINE_FILTER_TOKEN_TO_BASE_CONTROL_TYPE, INLINE_FILTER_TOKEN_TO_CONTROL_TYPE, IconPickerService, IconPosition, IconSize, LOGGER_LEVEL_BY_ENV, LOGGER_LEVEL_PRIORITY, LoadingOrchestrator, LocalConnectionStorage, LocalStorageAsyncAdapter, LocalStorageCacheAdapter, LocalStorageConfigService, LoggerService, LoggerThrottleTracker, LoggerWarnOnceTracker, MemoryCacheAdapter, NestedPortCatalogService, NestedWidgetConfigAccessor, NumericFormat, OVERLAY_DECIDER_DEBUG, OVERLAY_DECISION_MATRIX, ObservabilityDashboardService, OverlayDeciderService, PRAXIS_COLLECTION_EXPORT_HTTP_OPTIONS, PRAXIS_COLLECTION_EXPORT_PROVIDER, PRAXIS_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_ENTERPRISE_RUNTIME_CONTEXT_OPTIONS, PRAXIS_ENTERPRISE_RUNTIME_CONTEXT_READY, PRAXIS_EXPORT_FORMULA_PREFIXES, PRAXIS_EXPORT_SECURITY_POLICY, PRAXIS_FOOTER_LINKS_METADATA, PRAXIS_GLOBAL_ACTION_CATALOG, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_OPTIONS, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_READY, PRAXIS_GLOBAL_CONFIG_TENANT_RESOLVER, PRAXIS_HERO_BANNER_METADATA, PRAXIS_I18N_CONFIG, PRAXIS_I18N_TRANSLATOR, PRAXIS_JSON_LOGIC_OPERATORS, PRAXIS_LAYER_SCALE_DEFAULTS, PRAXIS_LAYER_SCALE_VARS, PRAXIS_LEGAL_NOTICE_METADATA, PRAXIS_LOADING_CTX, PRAXIS_LOADING_RENDERER, PRAXIS_LOGGER_CONFIG, PRAXIS_LOGGER_SINKS, PRAXIS_OBSERVABILITY_DASHBOARD_OPTIONS, PRAXIS_QUERY_FILTER_EXPRESSION_SCHEMA_VERSION, PRAXIS_RELATED_RESOURCE_OUTLET_COMPONENT_METADATA, PRAXIS_RELATED_RESOURCE_OUTLET_PORTS, PRAXIS_RICH_TEXT_BLOCK_METADATA, PRAXIS_TABLE_DETAIL_INLINE_NODE_RESOLVERS, PRAXIS_TABLE_DETAIL_INLINE_RENDERERS, PRAXIS_TABLE_DETAIL_RESOURCE_RESOLVER, PRAXIS_TELEMETRY_TRANSPORT, PRAXIS_THEME_SURFACE_DEFAULTS, PRAXIS_THEME_SURFACE_VARS, PRAXIS_USER_CONTEXT_SUMMARY_METADATA, PRIVACY_CONSENT_EDITORIAL_SOLUTION, PRIVACY_CONSENT_EDITORIAL_TEMPLATE, PraxisCollectionExportService, PraxisCore, PraxisFooterLinksComponent, PraxisGlobalErrorHandler, PraxisHeroBannerComponent, PraxisHttpCollectionExportProvider, PraxisI18nService, PraxisIconButtonComponent, PraxisIconDirective, PraxisIconPickerComponent, PraxisJsonLogicError, PraxisJsonLogicService, PraxisLayerScaleStyleService, PraxisLegalNoticeComponent, PraxisLoadingInterceptor, PraxisRelatedResourceOutletComponent, PraxisResourceIdentityComponent, PraxisRichTextBlockComponent, PraxisRuntimeComponentObservationRegistryService, PraxisSurfaceHostComponent, PraxisUserContextSummaryComponent, RESOURCE_DISCOVERY_I18N_CONFIG, RESOURCE_DISCOVERY_I18N_NAMESPACE, RULE_PROPERTY_SCHEMA, RelatedResourceSurfaceResolverService, RemoteConfigStorage, ResourceActionOpenAdapterService, ResourceDiscoveryService, ResourceQuickConnectComponent, ResourceRecordOpenError, ResourceRecordOpenService, ResourceSurfaceOpenAdapterService, SCHEMA_VIEWER_CONTEXT, SETTINGS_PANEL_BRIDGE, SETTINGS_PANEL_DATA, STEPPER_CONFIG_EDITOR, SURFACE_DRAWER_BRIDGE, SURFACE_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, SchemaMetadataClient, SchemaNormalizerService, SchemaViewerComponent, SurfaceBindingRuntimeService, SurfaceNavigationError, SurfaceOpenActionEditorComponent, SurfaceOpenMaterializerService, SurfaceOutletRegistryService, TABLE_CONFIG_EDITOR, TableConfigService, TelemetryLoggerSink, TelemetryService, ValidationPattern, WidgetPageStateRuntimeService, WidgetShellComponent, applyLocalCustomizations$2 as applyLocalCustomizations, applyLocalCustomizations$1 as applyLocalFormCustomizations, assertPraxisCollectionExportArtifact, assertPraxisRuntimeComponentObservationSerializable, buildAngularValidators, buildApiUrl, buildBaseColumnFromDef, buildBaseFormField, buildFormConfigFromEditorialTemplate, buildHeaders, buildPageKey, buildPraxisCollectionSearchCss, buildPraxisEffectDistinctKey, buildPraxisLayerScaleCss, buildPraxisThemeSurfaceCss, buildSchemaId, buildSchemaIdStorageKeySegment, buildValidatorsFromValidatorOptions, cancelIfCpfInvalidHook, clampRange, classifyEntityLookupResult, clonePraxisRuntimeComponentObservation, cloneTableConfig, cnpjAlphaValidator, collapseWhitespace, composeHeadersWithVersion, conditionalAsyncValidator, convertFormLayoutToConfig, createCorporateLoggerConfig, createCorporateObservabilityOptions, createCpfCnpjValidator, createDefaultFormConfig, createDefaultTableConfig, createEmptyFormConfig, createEmptyRichContentDocument, createFieldLayoutItem, createPersistedPage, customAsyncValidatorFn, customValidatorFn, debounceAsyncValidator, deepMerge, domainKnowledgeTimelineToRichContentDocument, domainRuleTimelineToRichContentDocument, ensureIds, ensureNoConflictsHookFactory, ensurePageIds, escapePraxisExportCell, evaluateFieldAccess, extractNormalizedError, fetchWithETag, fileTypeValidator, fillUndefined, generateId, getDefaultFormHints, getEditorialCompliancePresetById, getEditorialFormTemplateById, getEditorialFormTemplateCatalog, getEditorialSolutionById, getEditorialSolutionCatalog, getEditorialSolutionPresetById, getEditorialThemePresetById, getEssentialConfig, getFieldMetadataCapabilities, getFormColumnFieldNames, getFormLayoutFieldNames, getGlobalActionCatalog, getGlobalActionPayloadActualType, getGlobalActionPayloadTypeIssue, getGlobalActionUiSchema, getMissingGlobalActionPayloadKeys, getPraxisTableCellVisualizationConstraint, getPraxisTableCellVisualizationGuidance, getReferencedFieldMetadata, getRequiredGlobalActionPayloadKeys, getTextTransformer, hasMeaningfulGlobalActionPayloadValue, hasPraxisCollectionExportArtifact, interpolatePraxisTranslation, isAllowedEditorialContentFormat, isAllowedEditorialHref, isCssTextTransform, isEditorialComponentMeta, isEntityLookupMultiplePayloadMode, isEntityLookupPayloadMode, isEntityLookupPayloadModeCompatible, isEntityLookupResultSelectable, isEntityLookupSinglePayloadMode, isFormLayoutItem, isGlobalActionRef, isInlineFilterControlType, isLookupDialogSize, isLookupFilterFieldType, isLookupFilterOperator, isPraxisI18nMessageDescriptor, isPraxisPresentationVisualizationTableSafe, isPraxisRuntimeGlobalActionEffect, isProgrammaticDateRangePreset, isRangeValidForFilter, isRequiredGlobalActionParamPayloadMissing, isRequiredGlobalActionPayloadMissing, isStaticDateRangePreset, isSurfaceNavigationError, isTableConfigV2, isValidFormConfig, isValidTableConfig, legacyCnpjValidator, legacyCpfValidator, logOnErrorHook, mapFieldDefinitionToMetadata, mapFieldDefinitionsToMetadata, matchFieldValidator, materializeFormLayoutFromMetadata, materializeResourceIdentity, maxFileSizeValidator, mergeFieldMetadata, mergePraxisI18nConfigs, mergeTableConfigs, migrateFormLayoutRule, migrateLegacyCompositionLink, migrateLegacyCompositionLinks, minWordsValidator, normalizeControlTypeKey, normalizeControlTypeToken, normalizeEditorialLink, normalizeEnd, normalizeFieldAccessMetadata, normalizeFieldConstraints, normalizeFieldPresentation, normalizeFormConfig, normalizeFormLayoutItems, normalizeFormMetadata, normalizeGlobalActionRef$1 as normalizeGlobalActionRef, normalizeLayoutPolicy, normalizeLookupFilterRequest, normalizePath, normalizePraxisDataQueryContext, normalizePraxisEffectPolicy, normalizePraxisPresentationVisualization, normalizePraxisQueryFilterExpression, normalizePraxisQueryFilterNode, normalizeResourceAvailabilityReasonCode, normalizeResourceIdentityContract, normalizeStart, normalizeSurfaceOperationContext, normalizeUnknownError, normalizeWidgetEventPath, notifySuccessHook, parseJsonResponseOrEmpty, praxisLoadingInterceptorFn, prefillFromContextHook, provideDefaultFormHooks, provideFieldSelectorRegistryBase, provideFieldSelectorRegistryOverride, provideFieldSelectorRegistryRuntime, provideFormHookPresets, provideFormHooks, provideGlobalActionCatalog, provideGlobalActionHandler, provideGlobalConfig, provideGlobalConfigReady, provideGlobalConfigSeed, provideGlobalConfigTenant, provideHookResolvers, provideHookWhitelist, provideOverlayDecisionMatrix, providePraxisAnalyticsGlobalActions, providePraxisCollectionExportProvider, providePraxisDynamicPageMetadata, providePraxisEnterpriseRuntimeContext, providePraxisFooterLinksMetadata, providePraxisGlobalActionCatalog, providePraxisGlobalActions, providePraxisGlobalConfigBootstrap, providePraxisHeroBannerMetadata, providePraxisHttpCollectionExportProvider, providePraxisHttpLoading, providePraxisI18n, providePraxisI18nConfig, providePraxisI18nTranslator, providePraxisIconDefaults, providePraxisJsonLogicOperator, providePraxisJsonLogicOperatorOverride, providePraxisLegalNoticeMetadata, providePraxisLoadingDefaults, providePraxisLogging, providePraxisRelatedResourceOutletMetadata, providePraxisRichTextBlockMetadata, providePraxisToastGlobalActions, providePraxisUserContextSummaryMetadata, provideRemoteGlobalConfig, readPraxisExportValue, reconcileFilterConfig, reconcileFormConfig, reconcileTableConfig, registerPraxisRuntimeComponentObservation, removeDiacritics, renderPraxisPresentationVisualizationHtml, reportTelemetryHookFactory, requiredCheckedValidator, requiredPresenceValidator, resolveBuiltinPresets, resolveColumnTypeFromFieldDefinition, resolveControlTypeAlias, resolveDateRangeShortcutPreset, resolveDateRangeShortcutPresets, resolveDefaultValuePresentationFormat, resolveEntityLookupPayloadMode, resolveFieldPresentation, resolveGroupedCommandPartialRowSpans, resolveHidden, resolveInlineFilterControlType, resolveInlineFilterControlTypeToBaseControlType, resolveLoggerConfig, resolveObservabilityOptions, resolveOffset, resolveOrder, resolvePraxisCollectionExportItems, resolvePraxisExportFields, resolvePraxisExportScope, resolvePraxisFilterCriteria, resolvePraxisI18nDocument, resolveResourceAvailabilityReasonKey, resolveResourceIdentityContract, resolveSpan, resolveTextMaskFormat, resolveTextMaskFormatFromFieldDefinition, resolveValuePresentation, resolveValuePresentationLocale, serializeEntityLookupValueForPayload, serializeOptionSourceFilterRequest, serializePraxisCollectionToCsv, serializePraxisCollectionToExcel, serializePraxisCollectionToJson, slugify, staticDateRangePresetToPreset, stripMasksHook, supportsImplicitValuePresentation, syncWithServerMetadata, toCamel, toCapitalize, toKebab, toPascal, toSentenceCase, toSnake, toTitleCase, translateResourceAvailabilityReason, translateResourceDiscoveryText, translateSurfaceNavigationRejected, translateUnavailableWorkflowMessage, trim, uniqueAsyncValidator, urlValidator, validateGlobalActionRef, validateGlobalActionRefs, withFormConfigSections, withMessage, withPraxisHttpLoading };
43831
+ export { API_CONFIG_STORAGE_OPTIONS, API_URL, ASYNC_CONFIG_STORAGE, AllowedFileTypes, AnalyticsPresentationResolver, AnalyticsSchemaContractService, AnalyticsStatsRequestBuilderService, ApiConfigStorage, ApiEndpoint, BUILTIN_PAGE_LAYOUT_PRESETS, BUILTIN_PAGE_THEME_PRESETS, BUILTIN_SHELL_PRESETS, COMPONENT_METADATA_REGISTRY_I18N_CONFIG, COMPONENT_METADATA_REGISTRY_I18N_NAMESPACE, CONFIG_STORAGE, CONNECTION_STORAGE, ComponentKeyService, ComponentMetadataRegistry, CompositionRuntimeFacade, ConsoleLoggerSink, CrudOperationResolutionService, DEFAULT_FIELD_SELECTOR_CONTROL_TYPE_MAP, DEFAULT_JSON_LOGIC_OPERATORS, DEFAULT_TABLE_CONFIG, DOMAIN_CATALOG_COMPONENT_CONTEXT_PACK, DOMAIN_CATALOG_CONTEXT_HINT_SCHEMA_VERSION, DYNAMIC_PAGE_AI_CAPABILITIES, DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK, DYNAMIC_PAGE_CONFIG_EDITOR, DYNAMIC_PAGE_SHELL_EDITOR, DefaultLoadingRenderer, DeferredAsyncConfigStorage, DomainCatalogService, DomainKnowledgeService, DomainRuleService, DynamicFormService, DynamicWidgetLoaderDirective, DynamicWidgetPageComponent, EDITORIAL_ALLOWED_CONTENT_FORMATS, EDITORIAL_COMPLIANCE_PRESETS, EDITORIAL_EXTERNAL_LINK_REL, EDITORIAL_FORM_TEMPLATE_CATALOG, EDITORIAL_HTML_ENABLED, EDITORIAL_MARKDOWN_IMAGES_ENABLED, EDITORIAL_SOLUTION_CATALOG, EDITORIAL_SOLUTION_PRESETS, EDITORIAL_THEME_PRESETS, EDITORIAL_WIDGET_CONVENTION_INPUTS, EDITORIAL_WIDGET_TAG, EMPLOYEE_ONBOARDING_EDITORIAL_SOLUTION, EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE, EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_SOLUTION, EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_TEMPLATE, EVENT_REGISTRATION_EDITORIAL_SOLUTION, EVENT_REGISTRATION_EDITORIAL_TEMPLATE, EmptyStateCardComponent, EnterpriseRuntimeContextService, ErrorMessageService, FIELD_METADATA_CAPABILITIES, FIELD_SELECTOR_REGISTRY_BASE, FIELD_SELECTOR_REGISTRY_DISABLE_DEFAULTS, FIELD_SELECTOR_REGISTRY_OVERRIDES, FORM_HOOKS, FORM_HOOKS_PRESETS, FORM_HOOKS_WHITELIST, FORM_HOOK_RESOLVERS, FieldControlType, FieldDataType, FieldSelectorRegistry, FormHooksRegistry, GLOBAL_ACTION_CATALOG, GLOBAL_ACTION_HANDLERS, GLOBAL_ACTION_UI_SCHEMAS, GLOBAL_ANALYTICS_SERVICE, GLOBAL_API_CLIENT, GLOBAL_CONFIG, GLOBAL_DIALOG_SERVICE, GLOBAL_ROUTE_GUARD_RESOLVER, GLOBAL_SURFACE_SERVICE, GLOBAL_TOAST_SERVICE, GenericCrudService, GlobalActionService, GlobalConfigService, INLINE_FILTER_ALIAS_TOKENS, INLINE_FILTER_CONTROL_TYPES, INLINE_FILTER_CONTROL_TYPE_SET, INLINE_FILTER_CONTROL_TYPE_VALUES, INLINE_FILTER_TOKEN_TO_BASE_CONTROL_TYPE, INLINE_FILTER_TOKEN_TO_CONTROL_TYPE, IconPickerService, IconPosition, IconSize, LOGGER_LEVEL_BY_ENV, LOGGER_LEVEL_PRIORITY, LoadingOrchestrator, LocalConnectionStorage, LocalStorageAsyncAdapter, LocalStorageCacheAdapter, LocalStorageConfigService, LoggerService, LoggerThrottleTracker, LoggerWarnOnceTracker, MemoryCacheAdapter, NestedPortCatalogService, NestedWidgetConfigAccessor, NumericFormat, OVERLAY_DECIDER_DEBUG, OVERLAY_DECISION_MATRIX, ObservabilityDashboardService, OverlayDeciderService, PRAXIS_COLLECTION_EXPORT_HTTP_OPTIONS, PRAXIS_COLLECTION_EXPORT_PROVIDER, PRAXIS_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_ENTERPRISE_RUNTIME_CONTEXT_OPTIONS, PRAXIS_ENTERPRISE_RUNTIME_CONTEXT_READY, PRAXIS_EXPORT_FORMULA_PREFIXES, PRAXIS_EXPORT_SECURITY_POLICY, PRAXIS_FOOTER_LINKS_METADATA, PRAXIS_GLOBAL_ACTION_CATALOG, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_OPTIONS, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_READY, PRAXIS_GLOBAL_CONFIG_TENANT_RESOLVER, PRAXIS_HERO_BANNER_METADATA, PRAXIS_I18N_CONFIG, PRAXIS_I18N_TRANSLATOR, PRAXIS_JSON_LOGIC_OPERATORS, PRAXIS_LAYER_SCALE_DEFAULTS, PRAXIS_LAYER_SCALE_VARS, PRAXIS_LEGAL_NOTICE_METADATA, PRAXIS_LOADING_CTX, PRAXIS_LOADING_RENDERER, PRAXIS_LOGGER_CONFIG, PRAXIS_LOGGER_SINKS, PRAXIS_OBSERVABILITY_DASHBOARD_OPTIONS, PRAXIS_QUERY_FILTER_EXPRESSION_SCHEMA_VERSION, PRAXIS_RELATED_RESOURCE_OUTLET_COMPONENT_METADATA, PRAXIS_RELATED_RESOURCE_OUTLET_PORTS, PRAXIS_RICH_TEXT_BLOCK_METADATA, PRAXIS_TABLE_DETAIL_INLINE_NODE_RESOLVERS, PRAXIS_TABLE_DETAIL_INLINE_RENDERERS, PRAXIS_TABLE_DETAIL_RESOURCE_RESOLVER, PRAXIS_TELEMETRY_TRANSPORT, PRAXIS_THEME_SURFACE_DEFAULTS, PRAXIS_THEME_SURFACE_VARS, PRAXIS_USER_CONTEXT_SUMMARY_METADATA, PRIVACY_CONSENT_EDITORIAL_SOLUTION, PRIVACY_CONSENT_EDITORIAL_TEMPLATE, PraxisCollectionExportService, PraxisCore, PraxisFooterLinksComponent, PraxisGlobalErrorHandler, PraxisHeroBannerComponent, PraxisHttpCollectionExportProvider, PraxisI18nService, PraxisIconButtonComponent, PraxisIconDirective, PraxisIconPickerComponent, PraxisJsonLogicError, PraxisJsonLogicService, PraxisLayerScaleStyleService, PraxisLegalNoticeComponent, PraxisLoadingInterceptor, PraxisRelatedResourceOutletComponent, PraxisResourceIdentityComponent, PraxisRichTextBlockComponent, PraxisRuntimeComponentObservationRegistryService, PraxisSurfaceHostComponent, PraxisUserContextSummaryComponent, RESOURCE_DISCOVERY_I18N_CONFIG, RESOURCE_DISCOVERY_I18N_NAMESPACE, RULE_PROPERTY_SCHEMA, RelatedResourceSurfaceResolverService, RemoteConfigStorage, ResourceActionOpenAdapterService, ResourceDiscoveryService, ResourceQuickConnectComponent, ResourceRecordOpenError, ResourceRecordOpenService, ResourceSurfaceOpenAdapterService, SCHEMA_VIEWER_CONTEXT, SETTINGS_PANEL_BRIDGE, SETTINGS_PANEL_DATA, STEPPER_CONFIG_EDITOR, SURFACE_DRAWER_BRIDGE, SURFACE_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, SchemaMetadataClient, SchemaNormalizerService, SchemaViewerComponent, SurfaceBindingRuntimeService, SurfaceNavigationError, SurfaceOpenActionEditorComponent, SurfaceOpenMaterializerService, SurfaceOutletRegistryService, TABLE_CONFIG_EDITOR, TableConfigService, TelemetryLoggerSink, TelemetryService, ValidationPattern, WidgetPageStateRuntimeService, WidgetShellComponent, applyLocalCustomizations$2 as applyLocalCustomizations, applyLocalCustomizations$1 as applyLocalFormCustomizations, assertPraxisCollectionExportArtifact, assertPraxisRuntimeComponentObservationSerializable, buildAngularValidators, buildApiUrl, buildBaseColumnFromDef, buildBaseFormField, buildFormConfigFromEditorialTemplate, buildHeaders, buildPageKey, buildPraxisCollectionSearchCss, buildPraxisEffectDistinctKey, buildPraxisLayerScaleCss, buildPraxisThemeSurfaceCss, buildSchemaId, buildSchemaIdStorageKeySegment, buildValidatorsFromValidatorOptions, cancelIfCpfInvalidHook, clampRange, classifyEntityLookupResult, clonePraxisRuntimeComponentObservation, cloneTableConfig, cnpjAlphaValidator, collapseWhitespace, composeHeadersWithVersion, conditionalAsyncValidator, convertFormLayoutToConfig, createCorporateLoggerConfig, createCorporateObservabilityOptions, createCpfCnpjValidator, createDefaultFormConfig, createDefaultTableConfig, createEmptyFormConfig, createEmptyRichContentDocument, createFieldLayoutItem, createPersistedPage, customAsyncValidatorFn, customValidatorFn, debounceAsyncValidator, deepMerge, domainKnowledgeTimelineToRichContentDocument, domainRuleTimelineToRichContentDocument, ensureIds, ensureNoConflictsHookFactory, ensurePageIds, escapePraxisExportCell, evaluateFieldAccess, extractNormalizedError, fetchWithETag, fileTypeValidator, fillUndefined, generateId, getDefaultFormHints, getEditorialCompliancePresetById, getEditorialFormTemplateById, getEditorialFormTemplateCatalog, getEditorialSolutionById, getEditorialSolutionCatalog, getEditorialSolutionPresetById, getEditorialThemePresetById, getEssentialConfig, getFieldMetadataCapabilities, getFormColumnFieldNames, getFormLayoutFieldNames, getGlobalActionCatalog, getGlobalActionPayloadActualType, getGlobalActionPayloadTypeIssue, getGlobalActionUiSchema, getMissingGlobalActionPayloadKeys, getPraxisTableCellVisualizationConstraint, getPraxisTableCellVisualizationGuidance, getReferencedFieldMetadata, getRequiredGlobalActionPayloadKeys, getTextTransformer, hasMeaningfulGlobalActionPayloadValue, hasPraxisCollectionExportArtifact, interpolatePraxisTranslation, isAllowedEditorialContentFormat, isAllowedEditorialHref, isCssTextTransform, isEditorialComponentMeta, isEntityLookupMultiplePayloadMode, isEntityLookupPayloadMode, isEntityLookupPayloadModeCompatible, isEntityLookupResultSelectable, isEntityLookupSinglePayloadMode, isFormLayoutItem, isGlobalActionRef, isInlineFilterControlType, isLookupDialogSize, isLookupFilterFieldType, isLookupFilterOperator, isPraxisI18nMessageDescriptor, isPraxisPresentationVisualizationTableSafe, isPraxisRuntimeGlobalActionEffect, isProgrammaticDateRangePreset, isRangeValidForFilter, isRequiredGlobalActionParamPayloadMissing, isRequiredGlobalActionPayloadMissing, isStaticDateRangePreset, isSurfaceNavigationError, isTableConfigV2, isValidFormConfig, isValidTableConfig, legacyCnpjValidator, legacyCpfValidator, logOnErrorHook, mapFieldDefinitionToMetadata, mapFieldDefinitionsToMetadata, matchFieldValidator, materializeFormLayoutFromMetadata, materializeResourceIdentity, maxFileSizeValidator, mergeFieldMetadata, mergePraxisI18nConfigs, mergeTableConfigs, migrateFormLayoutRule, migrateLegacyCompositionLink, migrateLegacyCompositionLinks, minWordsValidator, normalizeControlTypeKey, normalizeControlTypeToken, normalizeEditorialLink, normalizeEnd, normalizeFieldAccessMetadata, normalizeFieldConstraints, normalizeFieldPresentation, normalizeFormConfig, normalizeFormEffects, normalizeFormLayoutItems, normalizeFormMetadata, normalizeGlobalActionRef$1 as normalizeGlobalActionRef, normalizeLayoutPolicy, normalizeLookupFilterRequest, normalizePath, normalizePraxisDataQueryContext, normalizePraxisEffectPolicy, normalizePraxisPresentationVisualization, normalizePraxisQueryFilterExpression, normalizePraxisQueryFilterNode, normalizeResourceAvailabilityReasonCode, normalizeResourceIdentityContract, normalizeStart, normalizeSurfaceOperationContext, normalizeUnknownError, normalizeWidgetEventPath, notifySuccessHook, parseJsonResponseOrEmpty, praxisLoadingInterceptorFn, prefillFromContextHook, 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, providePraxisToastGlobalActions, providePraxisUserContextSummaryMetadata, provideRemoteGlobalConfig, readPraxisExportValue, reconcileFilterConfig, reconcileFormConfig, reconcileTableConfig, registerPraxisRuntimeComponentObservation, removeDiacritics, renderPraxisPresentationVisualizationHtml, reportTelemetryHookFactory, requiredCheckedValidator, requiredPresenceValidator, resolveBuiltinPresets, resolveColumnTypeFromFieldDefinition, resolveControlTypeAlias, resolveDateRangeShortcutPreset, resolveDateRangeShortcutPresets, resolveDefaultValuePresentationFormat, resolveEntityLookupPayloadMode, resolveFieldPresentation, resolveGroupedCommandPartialRowSpans, resolveHidden, resolveInlineFilterControlType, resolveInlineFilterControlTypeToBaseControlType, resolveLoggerConfig, resolveObservabilityOptions, resolveOffset, resolveOrder, resolvePraxisCollectionExportItems, resolvePraxisExportFields, resolvePraxisExportScope, resolvePraxisFilterCriteria, resolvePraxisI18nDocument, resolveResourceAvailabilityReasonKey, resolveResourceIdentityContract, resolveSpan, resolveTextMaskFormat, resolveTextMaskFormatFromFieldDefinition, resolveValuePresentation, resolveValuePresentationLocale, serializeEntityLookupValueForPayload, serializeOptionSourceFilterRequest, serializePraxisCollectionToCsv, serializePraxisCollectionToExcel, serializePraxisCollectionToJson, slugify, staticDateRangePresetToPreset, stripMasksHook, supportsImplicitValuePresentation, syncWithServerMetadata, toCamel, toCapitalize, toKebab, toPascal, toSentenceCase, toSnake, toTitleCase, translateResourceAvailabilityReason, translateResourceDiscoveryText, translateSurfaceNavigationRejected, translateUnavailableWorkflowMessage, trim, uniqueAsyncValidator, urlValidator, validateGlobalActionRef, validateGlobalActionRefs, withFormConfigSections, withMessage, withPraxisHttpLoading };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@praxisui/core",
3
- "version": "9.0.5-rc.1",
3
+ "version": "9.0.5-rc.11",
4
4
  "description": "Core library for Praxis UI Workspace: types, tokens, services and utilities shared across @praxisui/* packages.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0",