@praxisui/dynamic-fields 9.0.62 → 9.0.63

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.
@@ -1130,30 +1130,35 @@ function resolveInlineDisplayMask(metadata, currentValue) {
1130
1130
  rawMode: /[Xx]/.test(explicitMask) ? 'alphanumeric' : 'digits',
1131
1131
  };
1132
1132
  }
1133
- const documentType = normalizeComparableToken(metadata['documentType'] ??
1134
- metadata['documentKind'] ??
1135
- metadata['identifierType'] ??
1136
- metadata['identifierKind']);
1133
+ const documentType = normalizeComparableToken(metadata['documentType']);
1137
1134
  if (documentType === 'cpf') {
1138
1135
  return { mask: '000.000.000-00', rawMode: 'digits' };
1139
1136
  }
1140
1137
  if (documentType === 'cnpj') {
1141
- return { mask: '00.000.000/0000-00', rawMode: 'digits' };
1142
- }
1143
- const signals = buildComparableSignals(metadata);
1144
- if (hasSignal(signals, 'cpfcnpj')) {
1145
- const digits = digitsOnly(currentValue);
1138
+ const version = normalizeComparableToken(metadata['version']);
1139
+ const raw = String(currentValue ?? '').replace(/[^a-zA-Z0-9]/g, '');
1140
+ const usesAlphaMask = version === 'alpha' ||
1141
+ ((!version || version === 'auto') && /[a-zA-Z]/.test(raw));
1146
1142
  return {
1147
- mask: digits.length > 11 ? '00.000.000/0000-00' : '000.000.000-00',
1148
- rawMode: 'digits',
1143
+ mask: usesAlphaMask
1144
+ ? 'XX.XXX.XXX/XXXX-XX'
1145
+ : '00.000.000/0000-00',
1146
+ rawMode: usesAlphaMask ? 'alphanumeric' : 'digits',
1149
1147
  };
1150
1148
  }
1151
- if (hasSignal(signals, 'cpf')) {
1149
+ if (documentType === 'auto') {
1150
+ const raw = String(currentValue ?? '').replace(/[^a-zA-Z0-9]/g, '');
1151
+ if (/[a-zA-Z]/.test(raw) || raw.length > 11) {
1152
+ return {
1153
+ mask: /[a-zA-Z]/.test(raw)
1154
+ ? 'XX.XXX.XXX/XXXX-XX'
1155
+ : '00.000.000/0000-00',
1156
+ rawMode: /[a-zA-Z]/.test(raw) ? 'alphanumeric' : 'digits',
1157
+ };
1158
+ }
1152
1159
  return { mask: '000.000.000-00', rawMode: 'digits' };
1153
1160
  }
1154
- if (hasSignal(signals, 'cnpj')) {
1155
- return { mask: '00.000.000/0000-00', rawMode: 'digits' };
1156
- }
1161
+ const signals = buildComparableSignals(metadata);
1157
1162
  if (hasPhoneSignal(metadata, signals)) {
1158
1163
  return {
1159
1164
  mask: resolveBrazilianPhoneMask(currentValue),
@@ -1166,20 +1171,21 @@ function resolveInlineDisplayMask(metadata, currentValue) {
1166
1171
  return null;
1167
1172
  }
1168
1173
  function hasMaskPlaceholder(mask) {
1169
- return /[0Xx]/.test(mask);
1174
+ return /[09#Xx]/.test(mask);
1170
1175
  }
1171
1176
  function applyInlineDisplayMask(value, mask) {
1172
1177
  if (!value) {
1173
1178
  return '';
1174
1179
  }
1180
+ const boundedValue = value.slice(0, inlineDisplayMaskCapacity(mask));
1175
1181
  let valueIndex = 0;
1176
1182
  let output = '';
1177
1183
  for (const token of mask.mask) {
1178
- if (valueIndex >= value.length) {
1184
+ if (valueIndex >= boundedValue.length) {
1179
1185
  break;
1180
1186
  }
1181
1187
  if (isMaskPlaceholder(token)) {
1182
- output += value[valueIndex++] ?? '';
1188
+ output += boundedValue[valueIndex++] ?? '';
1183
1189
  }
1184
1190
  else {
1185
1191
  output += token;
@@ -1187,10 +1193,27 @@ function applyInlineDisplayMask(value, mask) {
1187
1193
  }
1188
1194
  return output;
1189
1195
  }
1196
+ function inlineDisplayMaskCapacity(mask) {
1197
+ return Array.from(mask.mask).filter(isMaskPlaceholder).length;
1198
+ }
1199
+ function normalizeInlineMaskedInput(value, mask, selectionStart) {
1200
+ const text = String(value ?? '');
1201
+ const capacity = inlineDisplayMaskCapacity(mask);
1202
+ const rawValue = unmaskInlineDisplayValue(text, mask).slice(0, capacity);
1203
+ const displayValue = applyInlineDisplayMask(rawValue, mask);
1204
+ const logicalSelection = selectionStart == null
1205
+ ? rawValue.length
1206
+ : Math.min(rawValue.length, unmaskInlineDisplayValue(text.slice(0, selectionStart), mask).length);
1207
+ return {
1208
+ rawValue,
1209
+ displayValue,
1210
+ selectionStart: displayPositionForRawCount(mask, rawValue, logicalSelection),
1211
+ };
1212
+ }
1190
1213
  function unmaskInlineDisplayValue(value, mask) {
1191
1214
  const text = String(value ?? '');
1192
1215
  return mask.rawMode === 'alphanumeric'
1193
- ? text.replace(/[^a-zA-Z0-9]/g, '')
1216
+ ? text.replace(/[^a-zA-Z0-9]/g, '').toUpperCase()
1194
1217
  : digitsOnly(text);
1195
1218
  }
1196
1219
  function resolveBrazilianPhoneMask(value) {
@@ -1267,6 +1290,27 @@ function digitsOnly(value) {
1267
1290
  function isMaskPlaceholder(token) {
1268
1291
  return token === '0' || token === '9' || token === '#' || token === 'X' || token === 'x';
1269
1292
  }
1293
+ function displayPositionForRawCount(mask, rawValue, rawCount) {
1294
+ if (rawCount <= 0) {
1295
+ return 0;
1296
+ }
1297
+ let consumed = 0;
1298
+ let displayPosition = 0;
1299
+ for (const token of mask.mask) {
1300
+ if (consumed >= rawValue.length) {
1301
+ break;
1302
+ }
1303
+ displayPosition += 1;
1304
+ if (!isMaskPlaceholder(token)) {
1305
+ continue;
1306
+ }
1307
+ consumed += 1;
1308
+ if (consumed >= rawCount) {
1309
+ return displayPosition;
1310
+ }
1311
+ }
1312
+ return displayPosition;
1313
+ }
1270
1314
 
1271
1315
  /**
1272
1316
  * @fileoverview Simple base component for input fields with basic ControlValueAccessor functionality
@@ -1978,7 +2022,10 @@ class SimpleBaseInputComponent {
1978
2022
  try {
1979
2023
  control.setValue(value, { emitEvent: false });
1980
2024
  this.fieldState.update((state) => ({ ...state, value }));
1981
- this.log('debug', 'Value written from parent', { value });
2025
+ this.log('debug', 'Value written from parent', {
2026
+ hasValue: value !== null && value !== undefined && String(value) !== '',
2027
+ valueType: value === null ? 'null' : typeof value,
2028
+ });
1982
2029
  }
1983
2030
  finally {
1984
2031
  this.syncInProgress = false;
@@ -2583,8 +2630,8 @@ class SimpleBaseInputComponent {
2583
2630
  if (!mask) {
2584
2631
  return false;
2585
2632
  }
2586
- const rawValue = unmaskInlineDisplayValue(input.value, mask);
2587
- const displayValue = applyInlineDisplayMask(rawValue, mask);
2633
+ const normalized = normalizeInlineMaskedInput(input.value, mask, input.selectionStart);
2634
+ const { rawValue, displayValue } = normalized;
2588
2635
  if (!this.syncInProgress) {
2589
2636
  this.syncInProgress = true;
2590
2637
  try {
@@ -2604,6 +2651,9 @@ class SimpleBaseInputComponent {
2604
2651
  if (input.value !== displayValue) {
2605
2652
  input.value = displayValue;
2606
2653
  }
2654
+ if (typeof document !== 'undefined' && document.activeElement === input) {
2655
+ input.setSelectionRange(normalized.selectionStart, normalized.selectionStart);
2656
+ }
2607
2657
  });
2608
2658
  return true;
2609
2659
  }
@@ -2616,8 +2666,7 @@ class SimpleBaseInputComponent {
2616
2666
  if (!mask) {
2617
2667
  return;
2618
2668
  }
2619
- const rawValue = unmaskInlineDisplayValue(value, mask);
2620
- const displayValue = applyInlineDisplayMask(rawValue, mask);
2669
+ const { displayValue } = normalizeInlineMaskedInput(value, mask);
2621
2670
  if (input.value !== displayValue) {
2622
2671
  input.value = displayValue;
2623
2672
  }
@@ -2864,7 +2913,9 @@ class SimpleBaseInputComponent {
2864
2913
  return;
2865
2914
  const val = this.control().value;
2866
2915
  this.nativeElement.value = val == null ? '' : transformer(val);
2867
- this.log('debug', `applyFunctionalDisplayTransformImmediately: name='${name}', domValue='${this.nativeElement.value}'`);
2916
+ this.log('debug', `applyFunctionalDisplayTransformImmediately: name='${name}'`, {
2917
+ hasDisplayValue: String(this.nativeElement.value ?? '') !== '',
2918
+ });
2868
2919
  }
2869
2920
  /**
2870
2921
  * Sistema de logging básico
@@ -9124,8 +9175,8 @@ class ComponentRegistryService {
9124
9175
  this.register(INLINE_CURRENCY_CONTROL_TYPE, lazyComponent(() => import('./praxisui-dynamic-fields-index-CR5-JQ4D.mjs'), 'InlineCurrencyComponent'));
9125
9176
  this.register(INLINE_CURRENCY_RANGE_CONTROL_TYPE, lazyComponent(() => import('./praxisui-dynamic-fields-index-CTSix-em.mjs'), 'InlineCurrencyRangeComponent'));
9126
9177
  this.register(INLINE_MULTI_SELECT_CONTROL_TYPE, lazyComponent(() => import('./praxisui-dynamic-fields-index-CWLmblmT.mjs'), 'InlineMultiSelectComponent'));
9127
- this.register(INLINE_INPUT_CONTROL_TYPE, lazyComponent(() => import('./praxisui-dynamic-fields-index-BYVmv78m.mjs'), 'InlineInputComponent'));
9128
- this.register(INLINE_PHONE_CONTROL_TYPE, lazyComponent(() => import('./praxisui-dynamic-fields-index-BYVmv78m.mjs'), 'InlineInputComponent'));
9178
+ this.register(INLINE_INPUT_CONTROL_TYPE, lazyComponent(() => import('./praxisui-dynamic-fields-index-FvyF__fJ.mjs'), 'InlineInputComponent'));
9179
+ this.register(INLINE_PHONE_CONTROL_TYPE, lazyComponent(() => import('./praxisui-dynamic-fields-index-FvyF__fJ.mjs'), 'InlineInputComponent'));
9129
9180
  this.register(INLINE_TOGGLE_CONTROL_TYPE, lazyComponent(() => import('./praxisui-dynamic-fields-index-BMHfcV1t.mjs'), 'InlineToggleComponent'));
9130
9181
  this.register(INLINE_RANGE_CONTROL_TYPE, lazyComponent(() => import('./praxisui-dynamic-fields-index-DYV54GUZ.mjs'), 'InlineRangeSliderComponent'));
9131
9182
  this.register(INLINE_PERIOD_RANGE_CONTROL_TYPE, lazyComponent(() => import('./praxisui-dynamic-fields-index-CsBUpYPm.mjs'), 'InlinePeriodRangeComponent'));
@@ -20043,6 +20094,83 @@ function createEntityLookupComponentMetadata(locale = 'en-US') {
20043
20094
  return createWave1ComponentDocMeta(PDX_ENTITY_LOOKUP_EDITORIAL_DESCRIPTOR, locale);
20044
20095
  }
20045
20096
 
20097
+ class InlineMaskedValueAccessorDirective {
20098
+ elementRef;
20099
+ metadata;
20100
+ onChange = () => undefined;
20101
+ onTouched = () => undefined;
20102
+ constructor(elementRef) {
20103
+ this.elementRef = elementRef;
20104
+ }
20105
+ writeValue(value) {
20106
+ const input = this.elementRef.nativeElement;
20107
+ const mask = this.resolveMask(value);
20108
+ input.value = mask
20109
+ ? normalizeInlineMaskedInput(value, mask).displayValue
20110
+ : String(value ?? '');
20111
+ }
20112
+ registerOnChange(fn) {
20113
+ this.onChange = fn;
20114
+ }
20115
+ registerOnTouched(fn) {
20116
+ this.onTouched = fn;
20117
+ }
20118
+ setDisabledState(isDisabled) {
20119
+ this.elementRef.nativeElement.disabled = isDisabled;
20120
+ }
20121
+ handleInput(event) {
20122
+ const input = event.target;
20123
+ const mask = this.resolveMask(input.value);
20124
+ if (!mask) {
20125
+ this.onChange(input.value);
20126
+ return;
20127
+ }
20128
+ const normalized = normalizeInlineMaskedInput(input.value, mask, input.selectionStart);
20129
+ input.value = normalized.displayValue;
20130
+ input.setSelectionRange(normalized.selectionStart, normalized.selectionStart);
20131
+ this.onChange(normalized.rawValue);
20132
+ }
20133
+ handleBlur() {
20134
+ this.onTouched();
20135
+ }
20136
+ resolveMask(value) {
20137
+ if (!this.metadata || typeof this.metadata !== 'object') {
20138
+ return null;
20139
+ }
20140
+ return resolveInlineDisplayMask(this.metadata, value);
20141
+ }
20142
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: InlineMaskedValueAccessorDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
20143
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.14", type: InlineMaskedValueAccessorDirective, isStandalone: true, selector: "input[pdxInlineMaskedValueAccessor]", inputs: { metadata: ["pdxInlineMaskedValueAccessor", "metadata"] }, host: { listeners: { "input": "handleInput($event)", "blur": "handleBlur()" } }, providers: [
20144
+ {
20145
+ provide: NG_VALUE_ACCESSOR,
20146
+ useExisting: forwardRef(() => InlineMaskedValueAccessorDirective),
20147
+ multi: true,
20148
+ },
20149
+ ], ngImport: i0 });
20150
+ }
20151
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: InlineMaskedValueAccessorDirective, decorators: [{
20152
+ type: Directive,
20153
+ args: [{
20154
+ selector: 'input[pdxInlineMaskedValueAccessor]',
20155
+ standalone: true,
20156
+ providers: [
20157
+ {
20158
+ provide: NG_VALUE_ACCESSOR,
20159
+ useExisting: forwardRef(() => InlineMaskedValueAccessorDirective),
20160
+ multi: true,
20161
+ },
20162
+ ],
20163
+ }]
20164
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { metadata: [{
20165
+ type: Input,
20166
+ args: ['pdxInlineMaskedValueAccessor']
20167
+ }], handleInput: [{
20168
+ type: HostListener,
20169
+ args: ['input', ['$event']]
20170
+ }], handleBlur: [{
20171
+ type: HostListener,
20172
+ args: ['blur']
20173
+ }] } });
20046
20174
  class InlineInputComponent extends SimpleBaseInputComponent {
20047
20175
  readonlyMode = false;
20048
20176
  disabledMode = false;
@@ -20055,6 +20183,7 @@ class InlineInputComponent extends SimpleBaseInputComponent {
20055
20183
  inlineMaxWidthPx = 360;
20056
20184
  resizeRafId = null;
20057
20185
  maskSyncRafId = null;
20186
+ pendingMaskSelection = null;
20058
20187
  currentMetadata() {
20059
20188
  return (this.metadata() ?? {});
20060
20189
  }
@@ -20080,7 +20209,15 @@ class InlineInputComponent extends SimpleBaseInputComponent {
20080
20209
  super.onComponentInit?.();
20081
20210
  this.control()
20082
20211
  .valueChanges.pipe(takeUntilDestroyed(this.destroyRef))
20083
- .subscribe(() => {
20212
+ .subscribe((value) => {
20213
+ const mask = this.resolveDisplayMask(value);
20214
+ if (mask && value !== null && value !== undefined && value !== '') {
20215
+ const normalized = normalizeInlineMaskedInput(value, mask);
20216
+ if (String(value) !== normalized.rawValue) {
20217
+ this.setValue(normalized.rawValue, { emitEvent: true });
20218
+ return;
20219
+ }
20220
+ }
20084
20221
  this.syncMaskedDisplayValue();
20085
20222
  this.scheduleMaskedDisplaySync();
20086
20223
  this.scheduleInlineResize();
@@ -20091,9 +20228,6 @@ class InlineInputComponent extends SimpleBaseInputComponent {
20091
20228
  }
20092
20229
  ngAfterViewInit() {
20093
20230
  super.ngAfterViewInit();
20094
- if (this.inputEl?.nativeElement) {
20095
- this.registerInputElement(this.inputEl.nativeElement);
20096
- }
20097
20231
  this.scheduleMaskedDisplaySync();
20098
20232
  this.scheduleInlineResize();
20099
20233
  }
@@ -20123,6 +20257,16 @@ class InlineInputComponent extends SimpleBaseInputComponent {
20123
20257
  inputMode() {
20124
20258
  if (this.isInlinePhone())
20125
20259
  return 'tel';
20260
+ const documentType = String(this.metadataRecord().documentType ?? '').toLowerCase();
20261
+ const documentVersion = String(this.metadataRecord().version ?? '').toLowerCase();
20262
+ if (documentType === 'auto' ||
20263
+ (documentType === 'cnpj' && documentVersion !== 'legacy')) {
20264
+ return 'text';
20265
+ }
20266
+ const displayMask = this.resolveDisplayMask();
20267
+ if (displayMask) {
20268
+ return displayMask.rawMode === 'digits' ? 'numeric' : 'text';
20269
+ }
20126
20270
  const metadata = this.metadataRecord();
20127
20271
  return metadata.inputMode || metadata.inputmode || null;
20128
20272
  }
@@ -20182,14 +20326,20 @@ class InlineInputComponent extends SimpleBaseInputComponent {
20182
20326
  const mask = this.resolveDisplayMask();
20183
20327
  if (input && mask) {
20184
20328
  event?.stopImmediatePropagation();
20185
- const raw = unmaskInlineDisplayValue(input.value, mask);
20186
- const masked = applyInlineDisplayMask(raw, mask);
20187
- if (this.control().value !== raw) {
20188
- this.setValue(raw, { emitEvent: true });
20329
+ const normalized = normalizeInlineMaskedInput(input.value, mask, input.selectionStart);
20330
+ if (this.control().value !== normalized.rawValue) {
20331
+ this.setValue(normalized.rawValue, { emitEvent: true });
20189
20332
  }
20190
- if (input.value !== masked) {
20191
- input.value = masked;
20333
+ if (input.value !== normalized.displayValue) {
20334
+ input.value = normalized.displayValue;
20192
20335
  }
20336
+ input.setSelectionRange(normalized.selectionStart, normalized.selectionStart);
20337
+ // Angular's reactive-form listener can write the canonical raw value back
20338
+ // to the native input later in the same turn. Reassert the display-only
20339
+ // mask before the next paint and keep the animation-frame pass as a
20340
+ // controlled-host safety net.
20341
+ queueMicrotask(() => this.syncMaskedDisplayValue(normalized.selectionStart));
20342
+ this.scheduleMaskedDisplaySync(normalized.selectionStart);
20193
20343
  }
20194
20344
  this.scheduleInlineResize();
20195
20345
  }
@@ -20212,6 +20362,26 @@ class InlineInputComponent extends SimpleBaseInputComponent {
20212
20362
  errorStateMatcher() {
20213
20363
  return getErrorStateMatcherForField(this.metadata());
20214
20364
  }
20365
+ nativeMaxLength() {
20366
+ const mask = this.resolveDisplayMask();
20367
+ if (mask) {
20368
+ const documentType = String(this.metadataRecord().documentType ?? '').toLowerCase();
20369
+ if (documentType === 'auto' && !this.hasExplicitDisplayMask()) {
20370
+ return 18;
20371
+ }
20372
+ return mask.mask.length;
20373
+ }
20374
+ return this.metadata()?.maxLength || null;
20375
+ }
20376
+ writeValue(value) {
20377
+ const mask = this.resolveDisplayMask(value);
20378
+ const normalizedValue = mask
20379
+ ? normalizeInlineMaskedInput(value, mask).rawValue
20380
+ : value;
20381
+ super.writeValue(normalizedValue);
20382
+ this.scheduleMaskedDisplaySync();
20383
+ this.scheduleInlineResize();
20384
+ }
20215
20385
  scheduleInlineResize() {
20216
20386
  if (typeof window === 'undefined') {
20217
20387
  return;
@@ -20224,9 +20394,13 @@ class InlineInputComponent extends SimpleBaseInputComponent {
20224
20394
  this.recalculateInlineWidth();
20225
20395
  });
20226
20396
  }
20227
- scheduleMaskedDisplaySync() {
20397
+ scheduleMaskedDisplaySync(selectionStart) {
20398
+ if (selectionStart != null) {
20399
+ this.pendingMaskSelection = selectionStart;
20400
+ }
20228
20401
  if (typeof window === 'undefined') {
20229
- this.syncMaskedDisplayValue();
20402
+ this.syncMaskedDisplayValue(this.pendingMaskSelection);
20403
+ this.pendingMaskSelection = null;
20230
20404
  return;
20231
20405
  }
20232
20406
  if (this.maskSyncRafId !== null) {
@@ -20234,7 +20408,8 @@ class InlineInputComponent extends SimpleBaseInputComponent {
20234
20408
  }
20235
20409
  this.maskSyncRafId = window.requestAnimationFrame(() => {
20236
20410
  this.maskSyncRafId = null;
20237
- this.syncMaskedDisplayValue();
20411
+ this.syncMaskedDisplayValue(this.pendingMaskSelection);
20412
+ this.pendingMaskSelection = null;
20238
20413
  });
20239
20414
  }
20240
20415
  recalculateInlineWidth() {
@@ -20322,7 +20497,7 @@ class InlineInputComponent extends SimpleBaseInputComponent {
20322
20497
  const parsed = Number.parseFloat(String(value ?? '0'));
20323
20498
  return Number.isFinite(parsed) ? parsed : 0;
20324
20499
  }
20325
- syncMaskedDisplayValue() {
20500
+ syncMaskedDisplayValue(selectionStart) {
20326
20501
  const input = this.inputEl?.nativeElement;
20327
20502
  if (!input) {
20328
20503
  return;
@@ -20333,16 +20508,24 @@ class InlineInputComponent extends SimpleBaseInputComponent {
20333
20508
  if (input.value !== display) {
20334
20509
  input.value = display;
20335
20510
  }
20511
+ if (selectionStart != null) {
20512
+ const boundedSelection = Math.min(selectionStart, display.length);
20513
+ input.setSelectionRange(boundedSelection, boundedSelection);
20514
+ }
20336
20515
  }
20337
20516
  formatInlineDisplayValue(value) {
20338
20517
  const mask = this.resolveDisplayMask();
20339
20518
  if (!mask || !value.trim()) {
20340
20519
  return value;
20341
20520
  }
20342
- return applyInlineDisplayMask(unmaskInlineDisplayValue(value, mask), mask);
20521
+ return normalizeInlineMaskedInput(value, mask).displayValue;
20343
20522
  }
20344
- resolveDisplayMask() {
20345
- return resolveInlineDisplayMask(this.metadataRecord(), this.control().value);
20523
+ resolveDisplayMask(value = this.control().value) {
20524
+ return resolveInlineDisplayMask(this.metadataRecord(), value);
20525
+ }
20526
+ hasExplicitDisplayMask() {
20527
+ const metadata = this.metadataRecord();
20528
+ return ['displayMask', 'mask', 'inputMask', 'format'].some((key) => /[09#Xx]/.test(String(metadata[key] ?? '')));
20346
20529
  }
20347
20530
  isInlinePhone() {
20348
20531
  const controlType = String(this.metadataRecord().controlType || '')
@@ -20379,7 +20562,7 @@ class InlineInputComponent extends SimpleBaseInputComponent {
20379
20562
  .replace(/^./, (char) => char.toUpperCase());
20380
20563
  }
20381
20564
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: InlineInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
20382
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: InlineInputComponent, isStandalone: true, selector: "pdx-inline-input", inputs: { readonlyMode: "readonlyMode", disabledMode: "disabledMode", visible: "visible", presentationMode: "presentationMode" }, host: { listeners: { "window:resize": "onViewportResize()" }, properties: { "class": "componentCssClasses()", "class.praxis-disabled": "disabledMode", "style.display": "visible ? \"inline-block\" : \"none\"", "attr.aria-hidden": "visible ? null : \"true\"", "style.width": "\"auto\"", "style.maxWidth": "\"100%\"", "attr.data-field-type": "inlineFieldType()", "attr.data-field-name": "metadata()?.name", "attr.data-component-id": "componentId()" } }, providers: [
20565
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: InlineInputComponent, isStandalone: true, selector: "pdx-inline-input", inputs: { readonlyMode: "readonlyMode", disabledMode: "disabledMode", visible: "visible", presentationMode: "presentationMode" }, host: { listeners: { "window:resize": "onViewportResize()" }, properties: { "class": "componentCssClasses()", "class.praxis-disabled": "disabledMode", "style.display": "visible ? \"inline-block\" : \"none\"", "attr.aria-hidden": "visible ? null : \"true\"", "style.width": "\"auto\"", "style.maxWidth": "\"100%\"", "style.--pdx-inline-input-width.px": "inlineWidthPx || null", "attr.data-field-type": "inlineFieldType()", "attr.data-field-name": "metadata()?.name", "attr.data-component-id": "componentId()" } }, providers: [
20383
20566
  {
20384
20567
  provide: NG_VALUE_ACCESSOR,
20385
20568
  useExisting: forwardRef(() => InlineInputComponent),
@@ -20408,6 +20591,7 @@ class InlineInputComponent extends SimpleBaseInputComponent {
20408
20591
  #inputEl
20409
20592
  matInput
20410
20593
  [formControl]="control()"
20594
+ [pdxInlineMaskedValueAccessor]="metadata()"
20411
20595
  [errorStateMatcher]="errorStateMatcher()"
20412
20596
  [placeholder]="placeholderText()"
20413
20597
  [required]="metadata()?.required || false"
@@ -20417,7 +20601,7 @@ class InlineInputComponent extends SimpleBaseInputComponent {
20417
20601
  [attr.disabled]="disabledMode || control().disabled ? '' : null"
20418
20602
  [autocomplete]="metadata()?.autocomplete || 'off'"
20419
20603
  [spellcheck]="metadata()?.spellcheck ?? false"
20420
- [maxlength]="metadata()?.maxLength || null"
20604
+ [maxlength]="nativeMaxLength()"
20421
20605
  [minlength]="metadata()?.minLength || null"
20422
20606
  [attr.aria-label]="ariaLabel()"
20423
20607
  [matTooltip]="inlineTooltipText()"
@@ -20465,7 +20649,7 @@ class InlineInputComponent extends SimpleBaseInputComponent {
20465
20649
  </button>
20466
20650
  }
20467
20651
  </mat-form-field>
20468
- `, isInline: true, styles: [":host{--pdx-inline-field-surface: var(--md-sys-color-surface-container-high);--pdx-inline-field-on-surface: var(--md-sys-color-on-surface);--pdx-inline-field-on-surface-muted: var( --md-sys-color-on-surface-variant );--pdx-inline-field-outline: var(--md-sys-color-outline-variant);--pdx-inline-field-focus-outline: var(--md-sys-color-primary);display:inline-flex;width:auto;min-width:0;max-width:100%}:host ::ng-deep .pdx-inline-input .mat-mdc-form-field{width:auto;min-width:0;margin-bottom:0;transition:width .12s ease}:host ::ng-deep .pdx-inline-input .mat-mdc-form-field-subscript-wrapper{display:none}:host ::ng-deep .pdx-inline-input .mdc-notched-outline{display:none}:host ::ng-deep .pdx-inline-input .mat-mdc-form-field-flex,:host ::ng-deep .pdx-inline-input .mat-mdc-text-field-wrapper{padding:0;width:100%;min-width:0;background:transparent!important;background-color:transparent!important}:host ::ng-deep .pdx-inline-input .mat-mdc-form-field-focus-overlay{display:none}:host ::ng-deep .pdx-inline-input .mat-mdc-form-field-infix{min-height:0;width:100%;flex:1 1 auto;min-width:0;padding:0;position:relative}:host ::ng-deep .pdx-inline-input .mat-mdc-text-field-wrapper.mdc-text-field--outlined{display:flex;align-items:center;min-height:var(--pdx-inline-control-height, 42px);min-width:0;max-width:min(var(--pdx-inline-max-w, 360px),calc(100vw - 48px));padding-inline:var(--pdx-inline-control-padding-x, 14px);border-radius:999px;border:1px solid var(--pdx-inline-field-outline);background:var(--pdx-inline-field-surface)!important;background-color:var(--pdx-inline-field-surface)!important;box-sizing:border-box;transition:border-color .12s ease,box-shadow .12s ease}:host ::ng-deep .pdx-inline-input .mat-mdc-text-field-wrapper.mdc-text-field--outlined:after{display:none!important;content:none!important}:host ::ng-deep .pdx-inline-input .mat-mdc-text-field-wrapper.mdc-text-field--focused{border-color:var(--pdx-inline-field-focus-outline);box-shadow:0 0 0 2px color-mix(in srgb,var(--pdx-inline-field-focus-outline) 22%,transparent)}:host ::ng-deep .pdx-inline-input.pdx-has-value .mat-mdc-text-field-wrapper.mdc-text-field--outlined{border-color:var(--pdx-inline-field-focus-outline);background:var(--md-sys-color-primary)!important;background-color:var(--md-sys-color-primary)!important;color:var(--md-sys-color-on-primary)}:host ::ng-deep .pdx-inline-input.pdx-has-value input.mat-mdc-input-element,:host ::ng-deep .pdx-inline-input.pdx-has-value .mat-mdc-form-field-icon-prefix mat-icon{color:var(--md-sys-color-on-primary)!important}:host ::ng-deep .pdx-inline-input input.mat-mdc-input-element{color:var(--pdx-inline-field-on-surface)!important;font-family:var(--md-sys-typescale-body-large-font, inherit);font-size:var(--md-sys-typescale-body-large-size, 1rem);line-height:1.2;width:100%!important;min-width:1ch;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host ::ng-deep .pdx-inline-input .mdc-text-field__input::placeholder,:host ::ng-deep .pdx-inline-input input.mat-mdc-input-element::placeholder{color:var(--pdx-inline-field-on-surface-muted)!important;opacity:0!important}:host ::ng-deep .pdx-inline-input .pdx-inline-placeholder{position:absolute;left:0;top:50%;transform:translateY(-50%);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;color:var(--pdx-inline-field-on-surface-muted);font-family:var(--md-sys-typescale-body-large-font, inherit);font-size:var(--md-sys-typescale-body-large-size, 1rem);line-height:1.2}:host ::ng-deep .pdx-inline-input .pdx-inline-measure{position:absolute;visibility:hidden;pointer-events:none;white-space:pre;font-size:1.05rem;line-height:1.2;font-weight:400;left:-9999px;top:-9999px}:host ::ng-deep .pdx-inline-input .mat-mdc-form-field-icon-prefix{flex:0 0 auto;padding:0;margin-right:10px}:host ::ng-deep .pdx-inline-input .mat-mdc-form-field-icon-prefix mat-icon{width:18px;height:18px;font-size:18px;color:var(--md-sys-color-primary)}:host ::ng-deep .pdx-inline-input .pdx-inline-static-suffix{width:18px;height:18px;font-size:18px}:host ::ng-deep .pdx-inline-input .mat-mdc-form-field-icon-suffix{display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;align-self:center;margin-left:10px;padding:0}:host ::ng-deep .pdx-inline-input .pdx-inline-clear{--clear-ring-color: var(--md-sys-color-primary);flex:0 0 var(--pdx-inline-clear-size, 24px);width:var(--pdx-inline-clear-size, 24px);height:var(--pdx-inline-clear-size, 24px);min-width:var(--pdx-inline-clear-size, 24px);border:0;border-radius:50%;appearance:none;-webkit-appearance:none;outline:none;padding:0;display:grid;place-items:center;background:color-mix(in srgb,var(--md-sys-color-on-surface) 12%,transparent);color:var(--md-sys-color-on-surface-variant);cursor:pointer;line-height:0;font-size:0;transition:background-color .12s ease,box-shadow .12s ease,color .12s ease}:host ::ng-deep .pdx-inline-input .pdx-inline-clear:hover{background:color-mix(in srgb,var(--md-sys-color-on-surface) 18%,transparent)}:host ::ng-deep .pdx-inline-input.pdx-has-value .pdx-inline-clear{--clear-ring-color: var(--md-sys-color-on-primary);background:color-mix(in srgb,var(--md-sys-color-on-primary) 24%,transparent);color:var(--md-sys-color-on-primary)}:host ::ng-deep .pdx-inline-input .pdx-inline-clear:focus-visible{background:color-mix(in srgb,var(--md-sys-color-on-surface) 20%,transparent);box-shadow:0 0 0 2px color-mix(in srgb,var(--clear-ring-color) 34%,transparent)}:host ::ng-deep .pdx-inline-input .pdx-inline-clear mat-icon{flex:none;display:block;width:16px;height:16px;font-size:16px;line-height:1;margin:0;transform:translateY(-.5px)}@media(max-width:768px){:host ::ng-deep .pdx-inline-input .mat-mdc-text-field-wrapper.mdc-text-field--outlined{min-height:var(--pdx-inline-control-height-mobile, 40px);padding-inline:var(--pdx-inline-control-padding-x-mobile, 12px)}}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i1$1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$3.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i1$3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] });
20652
+ `, isInline: true, styles: [":host{--pdx-inline-field-surface: var(--md-sys-color-surface-container-high);--pdx-inline-field-on-surface: var(--md-sys-color-on-surface);--pdx-inline-field-on-surface-muted: var( --md-sys-color-on-surface-variant );--pdx-inline-field-outline: var(--md-sys-color-outline-variant);--pdx-inline-field-focus-outline: var(--md-sys-color-primary);display:inline-flex;width:auto;min-width:0;max-width:100%}:host ::ng-deep .pdx-inline-input .mat-mdc-form-field{width:auto;min-width:0;margin-bottom:0;transition:width .12s ease}:host ::ng-deep .pdx-inline-input .mat-mdc-form-field-subscript-wrapper{display:none}:host ::ng-deep .pdx-inline-input .mdc-notched-outline{display:none}:host ::ng-deep .pdx-inline-input .mat-mdc-form-field-flex,:host ::ng-deep .pdx-inline-input .mat-mdc-text-field-wrapper{padding:0;width:100%;min-width:0;background:transparent!important;background-color:transparent!important}:host ::ng-deep .pdx-inline-input .mat-mdc-form-field-focus-overlay{display:none}:host ::ng-deep .pdx-inline-input .mat-mdc-form-field-infix{min-height:0;width:100%;flex:1 1 auto;min-width:0;padding:0;position:relative}:host ::ng-deep .pdx-inline-input .mat-mdc-text-field-wrapper.mdc-text-field--outlined{display:flex;align-items:center;min-height:var(--pdx-inline-control-height, 42px);min-width:0;max-width:min(var(--pdx-inline-max-w, 360px),calc(100vw - 48px));padding-inline:var(--pdx-inline-control-padding-x, 14px);border-radius:999px;border:1px solid var(--pdx-inline-field-outline);background:var(--pdx-inline-field-surface)!important;background-color:var(--pdx-inline-field-surface)!important;box-sizing:border-box;transition:border-color .12s ease,box-shadow .12s ease}:host ::ng-deep .pdx-inline-input .mat-mdc-text-field-wrapper.mdc-text-field--outlined:after{display:none!important;content:none!important}:host ::ng-deep .pdx-inline-input .mat-mdc-text-field-wrapper.mdc-text-field--focused{border-color:var(--pdx-inline-field-focus-outline);box-shadow:0 0 0 2px color-mix(in srgb,var(--pdx-inline-field-focus-outline) 22%,transparent)}:host ::ng-deep .pdx-inline-input.pdx-has-value .mat-mdc-text-field-wrapper.mdc-text-field--outlined{border-color:var(--pdx-inline-field-focus-outline);background:var(--md-sys-color-primary)!important;background-color:var(--md-sys-color-primary)!important;color:var(--md-sys-color-on-primary)}:host ::ng-deep .pdx-inline-input.pdx-has-value input.mat-mdc-input-element,:host ::ng-deep .pdx-inline-input.pdx-has-value .mat-mdc-form-field-icon-prefix mat-icon{color:var(--md-sys-color-on-primary)!important}:host ::ng-deep .pdx-inline-input input.mat-mdc-input-element{color:var(--pdx-inline-field-on-surface)!important;font-family:var(--md-sys-typescale-body-large-font, inherit);font-size:var(--md-sys-typescale-body-large-size, 1rem);line-height:1.2;width:100%!important;min-width:1ch;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}:host ::ng-deep .pdx-inline-input .mdc-text-field__input::placeholder,:host ::ng-deep .pdx-inline-input input.mat-mdc-input-element::placeholder{color:var(--pdx-inline-field-on-surface-muted)!important;opacity:0!important}:host ::ng-deep .pdx-inline-input .pdx-inline-placeholder{position:absolute;left:0;top:50%;transform:translateY(-50%);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;color:var(--pdx-inline-field-on-surface-muted);font-family:var(--md-sys-typescale-body-large-font, inherit);font-size:var(--md-sys-typescale-body-large-size, 1rem);line-height:1.2}:host ::ng-deep .pdx-inline-input .pdx-inline-measure{position:absolute;visibility:hidden;pointer-events:none;white-space:pre;font-size:1.05rem;line-height:1.2;font-weight:400;left:-9999px;top:-9999px}:host ::ng-deep .pdx-inline-input .mat-mdc-form-field-icon-prefix{flex:0 0 auto;padding:0;margin-right:10px}:host ::ng-deep .pdx-inline-input .mat-mdc-form-field-icon-prefix mat-icon{width:18px;height:18px;font-size:18px;color:var(--md-sys-color-primary)}:host ::ng-deep .pdx-inline-input .pdx-inline-static-suffix{width:18px;height:18px;font-size:18px}:host ::ng-deep .pdx-inline-input .mat-mdc-form-field-icon-suffix{display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;align-self:center;margin-left:10px;padding:0}:host ::ng-deep .pdx-inline-input .pdx-inline-clear{--clear-ring-color: var(--md-sys-color-primary);flex:0 0 var(--pdx-inline-clear-size, 24px);width:var(--pdx-inline-clear-size, 24px);height:var(--pdx-inline-clear-size, 24px);min-width:var(--pdx-inline-clear-size, 24px);border:0;border-radius:50%;appearance:none;-webkit-appearance:none;outline:none;padding:0;display:grid;place-items:center;background:color-mix(in srgb,var(--md-sys-color-on-surface) 12%,transparent);color:var(--md-sys-color-on-surface-variant);cursor:pointer;line-height:0;font-size:0;transition:background-color .12s ease,box-shadow .12s ease,color .12s ease}:host ::ng-deep .pdx-inline-input .pdx-inline-clear:hover{background:color-mix(in srgb,var(--md-sys-color-on-surface) 18%,transparent)}:host ::ng-deep .pdx-inline-input.pdx-has-value .pdx-inline-clear{--clear-ring-color: var(--md-sys-color-on-primary);background:color-mix(in srgb,var(--md-sys-color-on-primary) 24%,transparent);color:var(--md-sys-color-on-primary)}:host ::ng-deep .pdx-inline-input .pdx-inline-clear:focus-visible{background:color-mix(in srgb,var(--md-sys-color-on-surface) 20%,transparent);box-shadow:0 0 0 2px color-mix(in srgb,var(--clear-ring-color) 34%,transparent)}:host ::ng-deep .pdx-inline-input .pdx-inline-clear mat-icon{flex:none;display:block;width:16px;height:16px;font-size:16px;line-height:1;margin:0;transform:translateY(-.5px)}@media(max-width:768px){:host ::ng-deep .pdx-inline-input .mat-mdc-text-field-wrapper.mdc-text-field--outlined{min-height:var(--pdx-inline-control-height-mobile, 40px);padding-inline:var(--pdx-inline-control-padding-x-mobile, 12px)}}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i1$1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$3.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i1$3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: InlineMaskedValueAccessorDirective, selector: "input[pdxInlineMaskedValueAccessor]", inputs: ["pdxInlineMaskedValueAccessor"] }] });
20469
20653
  }
20470
20654
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: InlineInputComponent, decorators: [{
20471
20655
  type: Component,
@@ -20475,6 +20659,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
20475
20659
  MatInputModule,
20476
20660
  MatIconModule,
20477
20661
  MatTooltipModule,
20662
+ InlineMaskedValueAccessorDirective,
20478
20663
  ], template: `
20479
20664
  <mat-form-field
20480
20665
  [appearance]="'outline'"
@@ -20498,6 +20683,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
20498
20683
  #inputEl
20499
20684
  matInput
20500
20685
  [formControl]="control()"
20686
+ [pdxInlineMaskedValueAccessor]="metadata()"
20501
20687
  [errorStateMatcher]="errorStateMatcher()"
20502
20688
  [placeholder]="placeholderText()"
20503
20689
  [required]="metadata()?.required || false"
@@ -20507,7 +20693,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
20507
20693
  [attr.disabled]="disabledMode || control().disabled ? '' : null"
20508
20694
  [autocomplete]="metadata()?.autocomplete || 'off'"
20509
20695
  [spellcheck]="metadata()?.spellcheck ?? false"
20510
- [maxlength]="metadata()?.maxLength || null"
20696
+ [maxlength]="nativeMaxLength()"
20511
20697
  [minlength]="metadata()?.minLength || null"
20512
20698
  [attr.aria-label]="ariaLabel()"
20513
20699
  [matTooltip]="inlineTooltipText()"
@@ -20568,6 +20754,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
20568
20754
  '[attr.aria-hidden]': 'visible ? null : "true"',
20569
20755
  '[style.width]': '"auto"',
20570
20756
  '[style.maxWidth]': '"100%"',
20757
+ '[style.--pdx-inline-input-width.px]': 'inlineWidthPx || null',
20571
20758
  '[attr.data-field-type]': 'inlineFieldType()',
20572
20759
  '[attr.data-field-name]': 'metadata()?.name',
20573
20760
  '[attr.data-component-id]': 'componentId()',
@@ -27083,12 +27270,7 @@ class MaterialCpfCnpjInputComponent extends SimpleBaseInputComponent {
27083
27270
  }
27084
27271
  }
27085
27272
  shouldApplySemanticDocumentValidator(meta) {
27086
- const validators = (meta.validators || {});
27087
- return (validators['cpfCnpj'] === true ||
27088
- validators['cpf'] === true ||
27089
- validators['cnpj'] === true ||
27090
- meta.validateDocument === true ||
27091
- meta.validateCpfCnpj === true);
27273
+ return meta.validators?.cpfCnpj === true;
27092
27274
  }
27093
27275
  isReadonlyEffective() {
27094
27276
  const st = computeEffectiveState(this.metadataAsField(), {
@@ -27098,132 +27280,111 @@ class MaterialCpfCnpjInputComponent extends SimpleBaseInputComponent {
27098
27280
  return st.readonly;
27099
27281
  }
27100
27282
  writeValue(value) {
27101
- const stringValue = typeof value === 'string'
27102
- ? value
27103
- : value == null
27104
- ? null
27105
- : String(value);
27106
- const formatted = this.formatValue(stringValue);
27107
- super.writeValue(formatted);
27283
+ const source = String(value ?? '').toUpperCase();
27284
+ const normalized = this.normalizeDocumentValue(source);
27285
+ super.writeValue(this.resolvePresentedDocumentValue(source, normalized).value);
27108
27286
  }
27109
27287
  applyNativeDisplayMask(value = this.control().value) {
27110
27288
  const input = this.nativeElement;
27111
27289
  if (!input || input.tagName.toLowerCase() !== 'input') {
27112
27290
  return;
27113
27291
  }
27114
- const formatted = this.formatValue(typeof value === 'string'
27115
- ? value
27116
- : value == null
27117
- ? null
27118
- : String(value));
27119
- if (input.value !== formatted) {
27120
- input.value = formatted;
27292
+ const source = String(value ?? '').toUpperCase();
27293
+ const normalized = this.normalizeDocumentValue(source);
27294
+ const presented = this.resolvePresentedDocumentValue(source, normalized);
27295
+ if (input.value !== presented.value) {
27296
+ input.value = presented.value;
27121
27297
  }
27122
27298
  }
27123
27299
  handleInput(event) {
27124
27300
  const input = event.target;
27125
- const value = input.value;
27126
- const cursorPos = input.selectionStart || 0;
27127
- // Limpa e formata
27128
- const cleaned = this.cleanValue(value);
27129
- const formatted = this.formatValue(cleaned);
27130
- // Atualiza o controle sem emitir evento (evita loop)
27301
+ const source = input.value.toUpperCase();
27302
+ const normalized = this.normalizeDocumentValue(source, input.selectionStart);
27303
+ const presented = this.resolvePresentedDocumentValue(source, normalized, input.selectionStart);
27131
27304
  const ctrl = this.control();
27132
- ctrl.setValue(formatted, { emitEvent: false });
27133
- // Ajusta cursor: conta caracteres não-máscara até a posição original
27134
- const originalCleanedLength = this.cleanValue(value.substring(0, cursorPos)).length;
27135
- let newPos = 0;
27136
- let cleanCount = 0;
27137
- while (newPos < formatted.length && cleanCount < originalCleanedLength) {
27138
- if (/[A-Z0-9]/.test(formatted[newPos])) {
27139
- cleanCount++;
27140
- }
27141
- newPos++;
27142
- }
27143
- input.setSelectionRange(newPos, newPos);
27144
- // Propaga valor (unmask se configurado)
27305
+ ctrl.setValue(presented.value, { emitEvent: false });
27306
+ if (input.value !== presented.value) {
27307
+ input.value = presented.value;
27308
+ }
27309
+ input.setSelectionRange(presented.selectionStart, presented.selectionStart);
27145
27310
  const unmask = this.cpfCnpjMetadata()?.unmaskOnSubmit ?? true;
27146
- const modelValue = unmask ? cleaned : formatted;
27311
+ const modelValue = unmask
27312
+ ? normalized.rawValue
27313
+ : normalized.displayValue;
27147
27314
  this.onChange(modelValue);
27148
27315
  this.valueChange.emit(modelValue);
27149
27316
  this.markAsDirty();
27150
- // Validação imediata (opcional: pode ser debounce se necessário)
27151
27317
  ctrl.updateValueAndValidity();
27152
27318
  }
27153
- // Método de limpeza aprimorado: respeita 'version' do metadata
27154
- cleanValue(value) {
27319
+ documentInputMode() {
27155
27320
  const meta = this.cpfCnpjMetadata();
27321
+ const documentType = meta?.documentType ?? 'auto';
27156
27322
  const version = meta?.version ?? 'auto';
27157
- const docType = meta?.documentType ?? 'auto';
27158
- this.log('debug', 'CpfCnpj cleanValue', { value, version, docType });
27159
- let cleaned = (value || '').toUpperCase();
27160
- // Se permitir input formatado, remova máscara primeiro
27161
- if (meta?.allowFormattedInput ?? true) {
27162
- cleaned = cleaned.replace(/[^A-Z0-9]/g, ''); // Remove máscara existente
27163
- }
27164
- // Aplique restrições baseadas em version e docType
27165
- if (docType === 'cpf' || version === 'legacy') {
27166
- return cleaned.replace(/[^0-9]/g, ''); // Apenas dígitos para CPF ou legacy
27167
- }
27168
- else if (version === 'alpha') {
27169
- return cleaned.replace(/[^A-Z0-9]/g, ''); // Alfanumérico
27170
- }
27171
- else {
27172
- // 'auto': detecta baseado em caracteres
27173
- return cleaned.match(/[A-Z]/)
27174
- ? cleaned.replace(/[^A-Z0-9]/g, '')
27175
- : cleaned.replace(/[^0-9]/g, '');
27323
+ if (documentType === 'auto' ||
27324
+ (documentType === 'cnpj' && version !== 'legacy')) {
27325
+ return 'text';
27176
27326
  }
27327
+ const mask = this.resolveDocumentMask(String(this.control().value ?? ''));
27328
+ return mask.rawMode === 'digits' ? 'numeric' : 'text';
27177
27329
  }
27178
- // Método de formatação (atualizado para respeitar documentType e version)
27179
- formatValue(value) {
27180
- const cleaned = this.cleanValue(value);
27181
- if (!cleaned)
27182
- return '';
27330
+ documentDisplayMaxLength() {
27183
27331
  const meta = this.cpfCnpjMetadata();
27184
- const docType = meta?.documentType ?? 'auto';
27185
- const version = meta?.version ?? 'auto';
27186
- // Decida tipo: CPF (numérico, 11 chars) ou CNPJ (14 chars, alfanumérico em 'alpha')
27187
- let isCpf = docType === 'cpf' || (docType === 'auto' && cleaned.length <= 11);
27188
- if (version === 'alpha' && cleaned.match(/[A-Z]/)) {
27189
- isCpf = false; // Força CNPJ se houver letras em 'alpha'
27190
- }
27191
- return isCpf ? this.applyCpfMask(cleaned) : this.applyCnpjMask(cleaned);
27192
- }
27193
- // Máscara CPF (apenas numérico, limite 11)
27194
- applyCpfMask(value) {
27195
- const v = value.substring(0, 11);
27196
- if (v.length <= 3) {
27197
- return v;
27198
- }
27199
- else if (v.length <= 6) {
27200
- return v.replace(/^(\d{3})(\d{1,3})/, '$1.$2');
27201
- }
27202
- else if (v.length <= 9) {
27203
- return v.replace(/^(\d{3})(\d{3})(\d{1,3})/, '$1.$2.$3');
27204
- }
27205
- else {
27206
- return v.replace(/^(\d{3})(\d{3})(\d{3})(\d{1,2})/, '$1.$2.$3-$4');
27332
+ const explicitMask = [
27333
+ meta?.displayMask,
27334
+ meta?.mask,
27335
+ meta?.inputMask,
27336
+ ].find((candidate) => /[09#Xx]/.test(String(candidate ?? '')));
27337
+ if (explicitMask) {
27338
+ return meta?.allowFormattedInput === false
27339
+ ? inlineDisplayMaskCapacity({
27340
+ mask: String(explicitMask),
27341
+ rawMode: this.resolveDocumentMask(String(this.control().value ?? '')).rawMode,
27342
+ })
27343
+ : String(explicitMask).length;
27344
+ }
27345
+ if (meta?.allowFormattedInput === false) {
27346
+ return meta?.documentType === 'cpf' ? 11 : 14;
27347
+ }
27348
+ return meta?.documentType === 'cpf' ? 14 : 18;
27349
+ }
27350
+ normalizeDocumentValue(value, selectionStart) {
27351
+ const normalizedText = String(value ?? '').toUpperCase();
27352
+ return normalizeInlineMaskedInput(normalizedText, this.resolveDocumentMask(normalizedText), selectionStart);
27353
+ }
27354
+ resolvePresentedDocumentValue(source, normalized, selectionStart) {
27355
+ if (this.cpfCnpjMetadata()?.allowFormattedInput !== false) {
27356
+ return {
27357
+ value: normalized.displayValue,
27358
+ selectionStart: normalized.selectionStart,
27359
+ };
27207
27360
  }
27361
+ const sourceBeforeCaret = source.slice(0, selectionStart ?? source.length);
27362
+ const rawCaret = normalizeInlineMaskedInput(sourceBeforeCaret, this.resolveDocumentMask(source)).rawValue.length;
27363
+ return {
27364
+ value: normalized.rawValue,
27365
+ selectionStart: Math.min(rawCaret, normalized.rawValue.length),
27366
+ };
27208
27367
  }
27209
- // Máscara CNPJ (alfanumérico, limite 14)
27210
- applyCnpjMask(value) {
27211
- const v = value.substring(0, 14);
27212
- if (v.length <= 2) {
27213
- return v;
27214
- }
27215
- else if (v.length <= 5) {
27216
- return v.replace(/^([A-Z0-9]{2})([A-Z0-9]{1,3})/, '$1.$2');
27217
- }
27218
- else if (v.length <= 8) {
27219
- return v.replace(/^([A-Z0-9]{2})([A-Z0-9]{3})([A-Z0-9]{1,3})/, '$1.$2.$3');
27220
- }
27221
- else if (v.length <= 12) {
27222
- return v.replace(/^([A-Z0-9]{2})([A-Z0-9]{3})([A-Z0-9]{3})([A-Z0-9]{1,4})/, '$1.$2.$3/$4');
27223
- }
27224
- else {
27225
- return v.replace(/^([A-Z0-9]{2})([A-Z0-9]{3})([A-Z0-9]{3})([A-Z0-9]{4})([A-Z0-9]{1,2})/, '$1.$2.$3/$4-$5');
27368
+ resolveDocumentMask(value) {
27369
+ const meta = this.cpfCnpjMetadata();
27370
+ const configuredMask = resolveInlineDisplayMask((meta ?? {}), value);
27371
+ if (configuredMask) {
27372
+ return configuredMask;
27226
27373
  }
27374
+ const documentType = meta?.documentType ?? 'auto';
27375
+ const version = meta?.version ?? 'auto';
27376
+ const rawCandidate = value.replace(/[^A-Z0-9]/g, '');
27377
+ const hasLetters = /[A-Z]/.test(rawCandidate);
27378
+ const isCpf = documentType === 'cpf' ||
27379
+ (documentType === 'auto' && !hasLetters && rawCandidate.length <= 11);
27380
+ if (isCpf) {
27381
+ return { mask: '000.000.000-00', rawMode: 'digits' };
27382
+ }
27383
+ const isAlpha = version === 'alpha' || (version === 'auto' && hasLetters);
27384
+ return {
27385
+ mask: isAlpha ? 'XX.XXX.XXX/XXXX-XX' : '00.000.000/0000-00',
27386
+ rawMode: isAlpha ? 'alphanumeric' : 'digits',
27387
+ };
27227
27388
  }
27228
27389
  metadataAsField() {
27229
27390
  const metadata = this.metadata();
@@ -27266,6 +27427,8 @@ class MaterialCpfCnpjInputComponent extends SimpleBaseInputComponent {
27266
27427
  [placeholder]="placeholder || ''"
27267
27428
  [required]="cpfCnpjMetadata()?.required || false"
27268
27429
  type="text"
27430
+ [attr.inputmode]="documentInputMode()"
27431
+ [maxlength]="documentDisplayMaxLength()"
27269
27432
  [autocomplete]="cpfCnpjMetadata()?.autocomplete || 'off'"
27270
27433
  [readonly]="isReadonlyEffective()"
27271
27434
  [attr.aria-disabled]="disabledMode ? 'true' : null"
@@ -27282,8 +27445,6 @@ class MaterialCpfCnpjInputComponent extends SimpleBaseInputComponent {
27282
27445
  [praxisIcon]="cpfCnpjMetadata()!.suffixIcon"
27283
27446
  ></mat-icon>
27284
27447
  }
27285
-
27286
-
27287
27448
  @if (showClear()) {
27288
27449
  <button
27289
27450
  mat-icon-button
@@ -27312,7 +27473,7 @@ class MaterialCpfCnpjInputComponent extends SimpleBaseInputComponent {
27312
27473
  }}</mat-hint>
27313
27474
  }
27314
27475
  </mat-form-field>
27315
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i1$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i1$3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i1$3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i1$3.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i1$3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
27476
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i1$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i1$3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i1$3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i1$3.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i1$3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }] });
27316
27477
  }
27317
27478
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: MaterialCpfCnpjInputComponent, decorators: [{
27318
27479
  type: Component,
@@ -27346,6 +27507,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
27346
27507
  [placeholder]="placeholder || ''"
27347
27508
  [required]="cpfCnpjMetadata()?.required || false"
27348
27509
  type="text"
27510
+ [attr.inputmode]="documentInputMode()"
27511
+ [maxlength]="documentDisplayMaxLength()"
27349
27512
  [autocomplete]="cpfCnpjMetadata()?.autocomplete || 'off'"
27350
27513
  [readonly]="isReadonlyEffective()"
27351
27514
  [attr.aria-disabled]="disabledMode ? 'true' : null"
@@ -27362,8 +27525,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
27362
27525
  [praxisIcon]="cpfCnpjMetadata()!.suffixIcon"
27363
27526
  ></mat-icon>
27364
27527
  }
27365
-
27366
-
27367
27528
  @if (showClear()) {
27368
27529
  <button
27369
27530
  mat-icon-button
@@ -27400,7 +27561,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
27400
27561
  MatIconModule,
27401
27562
  MatTooltipModule,
27402
27563
  PraxisIconDirective,
27403
- ReactiveFormsModule
27564
+ ReactiveFormsModule,
27404
27565
  ],
27405
27566
  providers: [
27406
27567
  {
@@ -70082,7 +70243,8 @@ const DYNAMIC_FIELDS_PLAYGROUND_CATALOG = [
70082
70243
  const BRAZIL_INPUTS_AI_CAPABILITIES = {
70083
70244
  version: 'v2.0',
70084
70245
  enums: {
70085
- maskType: ['cpf', 'cnpj', 'cpf-cnpj', 'phone', 'cep'],
70246
+ documentType: ['cpf', 'cnpj', 'auto'],
70247
+ version: ['legacy', 'alpha', 'auto'],
70086
70248
  },
70087
70249
  notes: [
70088
70250
  'Capabilities for Brazilian localized inputs: CPF, CNPJ, Phone (BR), CEP.',
@@ -70090,12 +70252,25 @@ const BRAZIL_INPUTS_AI_CAPABILITIES = {
70090
70252
  ],
70091
70253
  capabilities: [
70092
70254
  {
70093
- path: 'maskType',
70255
+ path: 'documentType',
70094
70256
  category: 'behavior',
70095
70257
  valueKind: 'enum',
70096
- allowedValues: ['cpf', 'cnpj', 'cpf-cnpj', 'phone', 'cep'],
70097
- description: 'Tipo específico da máscara brasileira.',
70098
- intentExamples: ['campo de CPF', 'máscara de CEP'],
70258
+ allowedValues: ['cpf', 'cnpj', 'auto'],
70259
+ description: 'Tipo canônico do documento brasileiro.',
70260
+ intentExamples: ['campo de CPF', 'aceitar CPF ou CNPJ'],
70261
+ },
70262
+ {
70263
+ path: 'version',
70264
+ category: 'behavior',
70265
+ valueKind: 'enum',
70266
+ allowedValues: ['legacy', 'alpha', 'auto'],
70267
+ description: 'Versão numérica legada ou alfanumérica do documento.',
70268
+ },
70269
+ {
70270
+ path: 'mask',
70271
+ category: 'appearance',
70272
+ valueKind: 'string',
70273
+ description: 'Máscara de exibição; 0 representa dígito e X representa caractere alfanumérico.',
70099
70274
  },
70100
70275
  {
70101
70276
  path: 'unmaskOnSubmit',
@@ -70106,16 +70281,10 @@ const BRAZIL_INPUTS_AI_CAPABILITIES = {
70106
70281
  intentExamples: ['salvar sem máscara', 'enviar apenas números'],
70107
70282
  },
70108
70283
  {
70109
- path: 'validators.cpf',
70110
- category: 'validation',
70111
- valueKind: 'boolean',
70112
- description: 'Valida dígito verificador do CPF.',
70113
- },
70114
- {
70115
- path: 'validators.cnpj',
70284
+ path: 'validators.cpfCnpj',
70116
70285
  category: 'validation',
70117
70286
  valueKind: 'boolean',
70118
- description: 'Valida dígito verificador do CNPJ.',
70287
+ description: 'Valida os dígitos verificadores de CPF ou CNPJ completo.',
70119
70288
  },
70120
70289
  ],
70121
70290
  };
@@ -72092,15 +72261,23 @@ const PRAXIS_DYNAMIC_FIELDS_AUTHORING_PROFILES = [
72092
72261
  profileId: 'regional-document',
72093
72262
  title: 'Regional document controls',
72094
72263
  description: 'Profile for Brazilian CPF/CNPJ document input controls.',
72095
- componentIds: ['pdx-material-cpf-cnpj-input'],
72096
- targetDescription: 'Regional document metadata paths such as document type, mask and validation mode.',
72264
+ componentIds: ['pdx-material-cpf-cnpj-input', 'pdx-inline-input'],
72265
+ targetDescription: 'Canonical Brazilian document metadata paths for full inputs and explicitly semantic partial-search filters.',
72097
72266
  operationId: 'field.regionalDocument.configure',
72098
72267
  operationTitle: 'Configure regional document field metadata',
72099
- properties: { documentType: { enum: ['cpf', 'cnpj', 'cpfOrCnpj'] }, mask: { type: 'string' }, validateChecksum: { type: 'boolean' } },
72100
- validators: [{ validatorId: 'regional-document-valid', level: 'error', code: 'PDFP017', description: 'Regional document controls must preserve document type, mask and checksum validation semantics.' }],
72268
+ properties: {
72269
+ documentType: { enum: ['cpf', 'cnpj', 'auto'] },
72270
+ version: { enum: ['legacy', 'alpha', 'auto'] },
72271
+ mask: { type: 'string' },
72272
+ validators: {
72273
+ type: 'object',
72274
+ properties: { cpfCnpj: { type: 'boolean' } },
72275
+ },
72276
+ },
72277
+ validators: [{ validatorId: 'regional-document-valid', level: 'error', code: 'PDFP017', description: 'Regional document controls must preserve canonical document type, version, display mask and optional full-document validation semantics.' }],
72101
72278
  operationValidators: ['regional-document-valid'],
72102
- affectedPaths: ['fieldMetadata.documentType', 'fieldMetadata.mask', 'fieldMetadata.validateChecksum'],
72103
- example: { id: 'configure-cpf-cnpj-document', request: 'Accept CPF or CNPJ and validate the document checksum.', operationId: 'field.regionalDocument.configure', params: { documentType: 'cpfOrCnpj', validateChecksum: true }, isPositive: true },
72279
+ affectedPaths: ['fieldMetadata.documentType', 'fieldMetadata.version', 'fieldMetadata.mask', 'fieldMetadata.validators.cpfCnpj'],
72280
+ example: { id: 'configure-cpf-cnpj-document', request: 'Accept CPF or CNPJ and validate the complete document.', operationId: 'field.regionalDocument.configure', params: { documentType: 'auto', version: 'auto', validators: { cpfCnpj: true } }, isPositive: true },
72104
72281
  }),
72105
72282
  fieldMetadataProfile({
72106
72283
  profileId: 'file-upload',
@@ -73229,4 +73406,4 @@ function supportsClearButtonControlType(controlType) {
73229
73406
  * Generated bundle index. Do not edit.
73230
73407
  */
73231
73408
 
73232
- export { BRAZIL_INPUTS_AI_CAPABILITIES, CACHE_TTL, CHIPS_CONTROLS_AI_CAPABILITIES, CLEAR_BUTTON_CONTROL_TYPES, COLOR_CONTROLS_AI_CAPABILITIES, CONTROL_TYPE_AI_CATALOGS, ColorInputComponent, ComponentPreloaderService, ComponentRegistryService, ConfirmDialogComponent, DATE_CONTROLS_AI_CAPABILITIES, DISPLAY_ACTION_AI_CAPABILITIES, DISTANCE_RADIUS_AI_CAPABILITIES, DYNAMIC_FIELDS_PLAYGROUND_CATALOG, DYNAMIC_FIELD_BASE_STATE_RECIPES, DYNAMIC_FIELD_DEFAULT_STATE_RECIPE, DYNAMIC_FIELD_DISABLED_STATE_RECIPE, DYNAMIC_FIELD_ERROR_STATE_RECIPE, DYNAMIC_FIELD_FILLED_STATE_RECIPE, DYNAMIC_FIELD_PRESENTATION_STATE_RECIPE, DYNAMIC_FIELD_READONLY_STATE_RECIPE, DateInputComponent, DateUtilsService, DatetimeLocalInputComponent, DynamicFieldLoaderDirective, EditableCollectionComponent, EmailInputComponent, EntityLookupDialogComponent, FILE_UPLOAD_AI_CAPABILITIES, InlineAsyncSelectComponent, InlineAutocompleteComponent, InlineColorLabelComponent, InlineCurrencyComponent, InlineCurrencyRangeComponent, InlineDateComponent, InlineDateRangeComponent, InlineDistanceRadiusComponent, InlineEntityLookupComponent, InlineInputComponent, InlineMonthRangeComponent, InlineMultiSelectComponent, InlineNumberComponent, InlinePeriodRangeComponent, InlinePipelineStatusComponent, InlineRangeSliderComponent, InlineRatingComponent, InlineRelativePeriodComponent, InlineScorePriorityComponent, InlineSearchableSelectComponent, InlineSelectComponent, InlineSentimentComponent, InlineTimeComponent, InlineTimeRangeComponent, InlineToggleComponent, InlineTreeSelectComponent, InlineYearRangeComponent, KeyboardShortcutService, LIST_CONTROLS_AI_CAPABILITIES, LoggerPresets, MAX_LOAD_ATTEMPTS, MaterialAsyncSelectComponent, MaterialAutocompleteComponent, MaterialAvatarComponent, MaterialButtonComponent, MaterialButtonToggleComponent, MaterialCheckboxGroupComponent, MaterialChipsComponent, MaterialColorPickerComponent, MaterialCpfCnpjInputComponent, MaterialCurrencyComponent, MaterialDateRangeComponent, MaterialDatepickerComponent, MaterialFileUploadComponent, MaterialMultiSelectComponent, MaterialMultiSelectTreeComponent, MaterialPriceRangeComponent, MaterialRadioGroupComponent, MaterialRatingComponent, MaterialSearchableSelectComponent, MaterialSelectComponent, MaterialSelectionListComponent, MaterialSlideToggleComponent, MaterialSliderComponent, MaterialTextareaComponent, MaterialTimepickerComponent, MaterialTransferListComponent, MaterialTreeSelectComponent, MonthInputComponent, NUMERIC_INPUTS_AI_CAPABILITIES, NumberInputComponent, OptionDisplayResolverService, OptionStore, PDX_COLOR_INPUT_COMPONENT_METADATA, PDX_COLOR_PICKER_COMPONENT_METADATA, PDX_DATETIME_LOCAL_INPUT_COMPONENT_METADATA, PDX_DATE_INPUT_COMPONENT_METADATA, PDX_EDITABLE_COLLECTION_COMPONENT_METADATA, PDX_EMAIL_INPUT_COMPONENT_METADATA, PDX_ENTITY_LOOKUP_COMPONENT_METADATA, PDX_FIELD_SHELL_COMPONENT_METADATA, PDX_INLINE_ASYNC_SELECT_COMPONENT_METADATA, PDX_INLINE_AUTOCOMPLETE_COMPONENT_METADATA, PDX_INLINE_COLOR_LABEL_COMPONENT_METADATA, PDX_INLINE_CURRENCY_COMPONENT_METADATA, PDX_INLINE_CURRENCY_RANGE_COMPONENT_METADATA, PDX_INLINE_DATE_COMPONENT_METADATA, PDX_INLINE_DATE_RANGE_COMPONENT_METADATA, PDX_INLINE_DISTANCE_RADIUS_COMPONENT_METADATA, PDX_INLINE_ENTITY_LOOKUP_COMPONENT_METADATA, PDX_INLINE_INPUT_COMPONENT_METADATA, PDX_INLINE_MONTH_RANGE_COMPONENT_METADATA, PDX_INLINE_MULTI_SELECT_COMPONENT_METADATA, PDX_INLINE_NUMBER_COMPONENT_METADATA, PDX_INLINE_PERIOD_RANGE_COMPONENT_METADATA, PDX_INLINE_PHONE_COMPONENT_METADATA, PDX_INLINE_PIPELINE_STATUS_COMPONENT_METADATA, PDX_INLINE_RANGE_SLIDER_COMPONENT_METADATA, PDX_INLINE_RATING_COMPONENT_METADATA, PDX_INLINE_RELATIVE_PERIOD_COMPONENT_METADATA, PDX_INLINE_SCORE_PRIORITY_COMPONENT_METADATA, PDX_INLINE_SEARCHABLE_SELECT_COMPONENT_METADATA, PDX_INLINE_SELECT_COMPONENT_METADATA, PDX_INLINE_SENTIMENT_COMPONENT_METADATA, PDX_INLINE_TIME_COMPONENT_METADATA, PDX_INLINE_TIME_RANGE_COMPONENT_METADATA, PDX_INLINE_TOGGLE_COMPONENT_METADATA, PDX_INLINE_TREE_SELECT_COMPONENT_METADATA, PDX_INLINE_YEAR_RANGE_COMPONENT_METADATA, PDX_MATERIAL_ASYNC_SELECT_COMPONENT_METADATA, PDX_MATERIAL_AUTOCOMPLETE_COMPONENT_METADATA, PDX_MATERIAL_AVATAR_COMPONENT_METADATA, PDX_MATERIAL_BUTTON_COMPONENT_METADATA, PDX_MATERIAL_BUTTON_TOGGLE_COMPONENT_METADATA, PDX_MATERIAL_CHECKBOX_GROUP_COMPONENT_METADATA, PDX_MATERIAL_CHIPS_COMPONENT_METADATA, PDX_MATERIAL_COLORPICKER_COMPONENT_METADATA, PDX_MATERIAL_CPF_CNPJ_INPUT_COMPONENT_METADATA, PDX_MATERIAL_CURRENCY_COMPONENT_METADATA, PDX_MATERIAL_DATEPICKER_COMPONENT_METADATA, PDX_MATERIAL_DATE_RANGE_COMPONENT_METADATA, PDX_MATERIAL_FILE_UPLOAD_COMPONENT_METADATA, PDX_MATERIAL_MULTI_SELECT_COMPONENT_METADATA, PDX_MATERIAL_MULTI_SELECT_TREE_COMPONENT_METADATA, PDX_MATERIAL_PRICE_RANGE_COMPONENT_METADATA, PDX_MATERIAL_RADIO_GROUP_COMPONENT_METADATA, PDX_MATERIAL_RANGE_SLIDER_COMPONENT_METADATA, PDX_MATERIAL_RATING_COMPONENT_METADATA, PDX_MATERIAL_SEARCHABLE_SELECT_COMPONENT_METADATA, PDX_MATERIAL_SELECTION_LIST_COMPONENT_METADATA, PDX_MATERIAL_SELECT_COMPONENT_METADATA, PDX_MATERIAL_SLIDER_COMPONENT_METADATA, PDX_MATERIAL_SLIDE_TOGGLE_COMPONENT_METADATA, PDX_MATERIAL_TEXTAREA_COMPONENT_METADATA, PDX_MATERIAL_TIMEPICKER_COMPONENT_METADATA, PDX_MATERIAL_TIME_RANGE_COMPONENT_METADATA, PDX_MATERIAL_TRANSFER_LIST_COMPONENT_METADATA, PDX_MATERIAL_TREE_SELECT_COMPONENT_METADATA, PDX_MONTH_INPUT_COMPONENT_METADATA, PDX_NUMBER_INPUT_COMPONENT_METADATA, PDX_PASSWORD_INPUT_COMPONENT_METADATA, PDX_PHONE_INPUT_COMPONENT_METADATA, PDX_PRELOAD_STATUS_COMPONENT_METADATA, PDX_SEARCH_INPUT_COMPONENT_METADATA, PDX_TEXT_INPUT_COMPONENT_METADATA, PDX_TIME_INPUT_COMPONENT_METADATA, PDX_URL_INPUT_COMPONENT_METADATA, PDX_WEEK_INPUT_COMPONENT_METADATA, PDX_YEAR_INPUT_COMPONENT_METADATA, PRAXIS_DYNAMIC_FIELDS_AUTHORING_MANIFEST, PRAXIS_DYNAMIC_FIELDS_AUTHORING_PROFILES, PRAXIS_DYNAMIC_FIELDS_EDITORIAL_WAVE_1, PRAXIS_DYNAMIC_FIELDS_EN_US, PRAXIS_DYNAMIC_FIELDS_I18N, PRAXIS_DYNAMIC_FIELDS_LOGGER_BACKEND, PRAXIS_DYNAMIC_FIELDS_PT_BR, PRAXIS_DYNAMIC_FIELDS_WAVE_1_COMPONENT_METADATA, PRICE_RANGE_AI_CAPABILITIES, PasswordInputComponent, PdxCollectionOverlayComponent, PdxCollectionOverlayTriggerDirective, PdxCollectionSearchComponent, PdxColorPickerComponent, PdxMaterialRangeSliderComponent, PdxMaterialTimeRangeComponent, PdxYearInputComponent, PhoneInputComponent, PraxisErrorStateMatcher, PreloadStatusComponent, RETRY_DELAY, SELECT_CONTROLS_AI_CAPABILITIES, SearchInputComponent, SimpleBaseButtonComponent, SimpleBaseInputComponent, SimpleBaseSelectComponent, TEXT_INPUTS_AI_CAPABILITIES, TIME_RANGE_AI_CAPABILITIES, TOGGLE_CONTROLS_AI_CAPABILITIES, TREE_CONTROLS_AI_CAPABILITIES, TextInputComponent, TimeInputComponent, UrlInputComponent, WeekInputComponent, YEAR_INPUT_AI_CAPABILITIES, applyAlphaToColor, bindDynamicFieldsLoggerBackendFromInjector, clearDynamicFieldsLoggerBackend, configureDynamicFieldsLogger, createDynamicFieldPreviewRecipe, createErrorStateMatcher, createPraxisDynamicFieldsI18nConfig, emitToDynamicFieldsLoggerBackend, enableDebugForComponent, getControlTypeCatalog, getErrorStateMatcherForField, inferErrorStateStrategy, initializeComponentSystem, initializeComponentSystemSync, interpolateThreeStopGradientColor, isBaseDynamicFieldComponent, isLoadingCapableComponent, isValidCssColor, isValidJsonSchema, isValueBasedComponent, logger, mapJsonSchemaToFields, mapPropertyToFieldMetadata, normalizeCssColorToRgb, normalizeFormMetadata, provideMaterialAvatarMetadata, providePraxisDynamicFields, providePraxisDynamicFieldsCore, providePraxisDynamicFieldsCoreNoDefaults, providePraxisDynamicFieldsI18n, providePraxisDynamicFieldsNoDefaults, providePraxisDynamicFieldsWave1EditorialRegistry, registerPraxisDynamicFieldsWave1EditorialDescriptors, resolvePraxisDynamicFieldsText, setDynamicFieldsLoggerBackend, silenceComponent, supportsClearButtonControlType };
73409
+ export { BRAZIL_INPUTS_AI_CAPABILITIES, CACHE_TTL, CHIPS_CONTROLS_AI_CAPABILITIES, CLEAR_BUTTON_CONTROL_TYPES, COLOR_CONTROLS_AI_CAPABILITIES, CONTROL_TYPE_AI_CATALOGS, ColorInputComponent, ComponentPreloaderService, ComponentRegistryService, ConfirmDialogComponent, DATE_CONTROLS_AI_CAPABILITIES, DISPLAY_ACTION_AI_CAPABILITIES, DISTANCE_RADIUS_AI_CAPABILITIES, DYNAMIC_FIELDS_PLAYGROUND_CATALOG, DYNAMIC_FIELD_BASE_STATE_RECIPES, DYNAMIC_FIELD_DEFAULT_STATE_RECIPE, DYNAMIC_FIELD_DISABLED_STATE_RECIPE, DYNAMIC_FIELD_ERROR_STATE_RECIPE, DYNAMIC_FIELD_FILLED_STATE_RECIPE, DYNAMIC_FIELD_PRESENTATION_STATE_RECIPE, DYNAMIC_FIELD_READONLY_STATE_RECIPE, DateInputComponent, DateUtilsService, DatetimeLocalInputComponent, DynamicFieldLoaderDirective, EditableCollectionComponent, EmailInputComponent, EntityLookupDialogComponent, FILE_UPLOAD_AI_CAPABILITIES, InlineAsyncSelectComponent, InlineAutocompleteComponent, InlineColorLabelComponent, InlineCurrencyComponent, InlineCurrencyRangeComponent, InlineDateComponent, InlineDateRangeComponent, InlineDistanceRadiusComponent, InlineEntityLookupComponent, InlineInputComponent, InlineMaskedValueAccessorDirective, InlineMonthRangeComponent, InlineMultiSelectComponent, InlineNumberComponent, InlinePeriodRangeComponent, InlinePipelineStatusComponent, InlineRangeSliderComponent, InlineRatingComponent, InlineRelativePeriodComponent, InlineScorePriorityComponent, InlineSearchableSelectComponent, InlineSelectComponent, InlineSentimentComponent, InlineTimeComponent, InlineTimeRangeComponent, InlineToggleComponent, InlineTreeSelectComponent, InlineYearRangeComponent, KeyboardShortcutService, LIST_CONTROLS_AI_CAPABILITIES, LoggerPresets, MAX_LOAD_ATTEMPTS, MaterialAsyncSelectComponent, MaterialAutocompleteComponent, MaterialAvatarComponent, MaterialButtonComponent, MaterialButtonToggleComponent, MaterialCheckboxGroupComponent, MaterialChipsComponent, MaterialColorPickerComponent, MaterialCpfCnpjInputComponent, MaterialCurrencyComponent, MaterialDateRangeComponent, MaterialDatepickerComponent, MaterialFileUploadComponent, MaterialMultiSelectComponent, MaterialMultiSelectTreeComponent, MaterialPriceRangeComponent, MaterialRadioGroupComponent, MaterialRatingComponent, MaterialSearchableSelectComponent, MaterialSelectComponent, MaterialSelectionListComponent, MaterialSlideToggleComponent, MaterialSliderComponent, MaterialTextareaComponent, MaterialTimepickerComponent, MaterialTransferListComponent, MaterialTreeSelectComponent, MonthInputComponent, NUMERIC_INPUTS_AI_CAPABILITIES, NumberInputComponent, OptionDisplayResolverService, OptionStore, PDX_COLOR_INPUT_COMPONENT_METADATA, PDX_COLOR_PICKER_COMPONENT_METADATA, PDX_DATETIME_LOCAL_INPUT_COMPONENT_METADATA, PDX_DATE_INPUT_COMPONENT_METADATA, PDX_EDITABLE_COLLECTION_COMPONENT_METADATA, PDX_EMAIL_INPUT_COMPONENT_METADATA, PDX_ENTITY_LOOKUP_COMPONENT_METADATA, PDX_FIELD_SHELL_COMPONENT_METADATA, PDX_INLINE_ASYNC_SELECT_COMPONENT_METADATA, PDX_INLINE_AUTOCOMPLETE_COMPONENT_METADATA, PDX_INLINE_COLOR_LABEL_COMPONENT_METADATA, PDX_INLINE_CURRENCY_COMPONENT_METADATA, PDX_INLINE_CURRENCY_RANGE_COMPONENT_METADATA, PDX_INLINE_DATE_COMPONENT_METADATA, PDX_INLINE_DATE_RANGE_COMPONENT_METADATA, PDX_INLINE_DISTANCE_RADIUS_COMPONENT_METADATA, PDX_INLINE_ENTITY_LOOKUP_COMPONENT_METADATA, PDX_INLINE_INPUT_COMPONENT_METADATA, PDX_INLINE_MONTH_RANGE_COMPONENT_METADATA, PDX_INLINE_MULTI_SELECT_COMPONENT_METADATA, PDX_INLINE_NUMBER_COMPONENT_METADATA, PDX_INLINE_PERIOD_RANGE_COMPONENT_METADATA, PDX_INLINE_PHONE_COMPONENT_METADATA, PDX_INLINE_PIPELINE_STATUS_COMPONENT_METADATA, PDX_INLINE_RANGE_SLIDER_COMPONENT_METADATA, PDX_INLINE_RATING_COMPONENT_METADATA, PDX_INLINE_RELATIVE_PERIOD_COMPONENT_METADATA, PDX_INLINE_SCORE_PRIORITY_COMPONENT_METADATA, PDX_INLINE_SEARCHABLE_SELECT_COMPONENT_METADATA, PDX_INLINE_SELECT_COMPONENT_METADATA, PDX_INLINE_SENTIMENT_COMPONENT_METADATA, PDX_INLINE_TIME_COMPONENT_METADATA, PDX_INLINE_TIME_RANGE_COMPONENT_METADATA, PDX_INLINE_TOGGLE_COMPONENT_METADATA, PDX_INLINE_TREE_SELECT_COMPONENT_METADATA, PDX_INLINE_YEAR_RANGE_COMPONENT_METADATA, PDX_MATERIAL_ASYNC_SELECT_COMPONENT_METADATA, PDX_MATERIAL_AUTOCOMPLETE_COMPONENT_METADATA, PDX_MATERIAL_AVATAR_COMPONENT_METADATA, PDX_MATERIAL_BUTTON_COMPONENT_METADATA, PDX_MATERIAL_BUTTON_TOGGLE_COMPONENT_METADATA, PDX_MATERIAL_CHECKBOX_GROUP_COMPONENT_METADATA, PDX_MATERIAL_CHIPS_COMPONENT_METADATA, PDX_MATERIAL_COLORPICKER_COMPONENT_METADATA, PDX_MATERIAL_CPF_CNPJ_INPUT_COMPONENT_METADATA, PDX_MATERIAL_CURRENCY_COMPONENT_METADATA, PDX_MATERIAL_DATEPICKER_COMPONENT_METADATA, PDX_MATERIAL_DATE_RANGE_COMPONENT_METADATA, PDX_MATERIAL_FILE_UPLOAD_COMPONENT_METADATA, PDX_MATERIAL_MULTI_SELECT_COMPONENT_METADATA, PDX_MATERIAL_MULTI_SELECT_TREE_COMPONENT_METADATA, PDX_MATERIAL_PRICE_RANGE_COMPONENT_METADATA, PDX_MATERIAL_RADIO_GROUP_COMPONENT_METADATA, PDX_MATERIAL_RANGE_SLIDER_COMPONENT_METADATA, PDX_MATERIAL_RATING_COMPONENT_METADATA, PDX_MATERIAL_SEARCHABLE_SELECT_COMPONENT_METADATA, PDX_MATERIAL_SELECTION_LIST_COMPONENT_METADATA, PDX_MATERIAL_SELECT_COMPONENT_METADATA, PDX_MATERIAL_SLIDER_COMPONENT_METADATA, PDX_MATERIAL_SLIDE_TOGGLE_COMPONENT_METADATA, PDX_MATERIAL_TEXTAREA_COMPONENT_METADATA, PDX_MATERIAL_TIMEPICKER_COMPONENT_METADATA, PDX_MATERIAL_TIME_RANGE_COMPONENT_METADATA, PDX_MATERIAL_TRANSFER_LIST_COMPONENT_METADATA, PDX_MATERIAL_TREE_SELECT_COMPONENT_METADATA, PDX_MONTH_INPUT_COMPONENT_METADATA, PDX_NUMBER_INPUT_COMPONENT_METADATA, PDX_PASSWORD_INPUT_COMPONENT_METADATA, PDX_PHONE_INPUT_COMPONENT_METADATA, PDX_PRELOAD_STATUS_COMPONENT_METADATA, PDX_SEARCH_INPUT_COMPONENT_METADATA, PDX_TEXT_INPUT_COMPONENT_METADATA, PDX_TIME_INPUT_COMPONENT_METADATA, PDX_URL_INPUT_COMPONENT_METADATA, PDX_WEEK_INPUT_COMPONENT_METADATA, PDX_YEAR_INPUT_COMPONENT_METADATA, PRAXIS_DYNAMIC_FIELDS_AUTHORING_MANIFEST, PRAXIS_DYNAMIC_FIELDS_AUTHORING_PROFILES, PRAXIS_DYNAMIC_FIELDS_EDITORIAL_WAVE_1, PRAXIS_DYNAMIC_FIELDS_EN_US, PRAXIS_DYNAMIC_FIELDS_I18N, PRAXIS_DYNAMIC_FIELDS_LOGGER_BACKEND, PRAXIS_DYNAMIC_FIELDS_PT_BR, PRAXIS_DYNAMIC_FIELDS_WAVE_1_COMPONENT_METADATA, PRICE_RANGE_AI_CAPABILITIES, PasswordInputComponent, PdxCollectionOverlayComponent, PdxCollectionOverlayTriggerDirective, PdxCollectionSearchComponent, PdxColorPickerComponent, PdxMaterialRangeSliderComponent, PdxMaterialTimeRangeComponent, PdxYearInputComponent, PhoneInputComponent, PraxisErrorStateMatcher, PreloadStatusComponent, RETRY_DELAY, SELECT_CONTROLS_AI_CAPABILITIES, SearchInputComponent, SimpleBaseButtonComponent, SimpleBaseInputComponent, SimpleBaseSelectComponent, TEXT_INPUTS_AI_CAPABILITIES, TIME_RANGE_AI_CAPABILITIES, TOGGLE_CONTROLS_AI_CAPABILITIES, TREE_CONTROLS_AI_CAPABILITIES, TextInputComponent, TimeInputComponent, UrlInputComponent, WeekInputComponent, YEAR_INPUT_AI_CAPABILITIES, applyAlphaToColor, bindDynamicFieldsLoggerBackendFromInjector, clearDynamicFieldsLoggerBackend, configureDynamicFieldsLogger, createDynamicFieldPreviewRecipe, createErrorStateMatcher, createPraxisDynamicFieldsI18nConfig, emitToDynamicFieldsLoggerBackend, enableDebugForComponent, getControlTypeCatalog, getErrorStateMatcherForField, inferErrorStateStrategy, initializeComponentSystem, initializeComponentSystemSync, interpolateThreeStopGradientColor, isBaseDynamicFieldComponent, isLoadingCapableComponent, isValidCssColor, isValidJsonSchema, isValueBasedComponent, logger, mapJsonSchemaToFields, mapPropertyToFieldMetadata, normalizeCssColorToRgb, normalizeFormMetadata, provideMaterialAvatarMetadata, providePraxisDynamicFields, providePraxisDynamicFieldsCore, providePraxisDynamicFieldsCoreNoDefaults, providePraxisDynamicFieldsI18n, providePraxisDynamicFieldsNoDefaults, providePraxisDynamicFieldsWave1EditorialRegistry, registerPraxisDynamicFieldsWave1EditorialDescriptors, resolvePraxisDynamicFieldsText, setDynamicFieldsLoggerBackend, silenceComponent, supportsClearButtonControlType };