@praxisui/dynamic-fields 3.0.0-beta.3 → 3.0.0-beta.4

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.
@@ -197,7 +197,18 @@ const PRAXIS_DYNAMIC_FIELDS_EN_US = {
197
197
  'praxis.dynamicFields.inlineCurrencyRange.ariaSelection': '{{label}}: {{value}}',
198
198
  'praxis.dynamicFields.inlineCurrencyRange.value.from': '>= {{value}}',
199
199
  'praxis.dynamicFields.inlineCurrencyRange.value.upto': '<= {{value}}',
200
- 'praxis.dynamicFields.inlineSelect.placeholder': 'Filter',
200
+ 'praxis.dynamicFields.inlineSelect.placeholder': 'Select',
201
+ 'praxis.dynamicFields.inlinePipelineStatus.placeholder': 'Pipeline',
202
+ 'praxis.dynamicFields.inlinePipelineStatus.panelSubtitle': 'Configurable panel for stages, statuses, or priorities',
203
+ 'praxis.dynamicFields.inlinePipelineStatus.searchPlaceholder': 'Search stages...',
204
+ 'praxis.dynamicFields.inlinePipelineStatus.selectionActionsAriaLabel': 'Selection actions',
205
+ 'praxis.dynamicFields.inlinePipelineStatus.clearActionLabel': 'Clear',
206
+ 'praxis.dynamicFields.inlinePipelineStatus.selectionPillsAriaLabel': 'Selected items',
207
+ 'praxis.dynamicFields.inlinePipelineStatus.barAriaEmpty': '{{label}} with no selected items',
208
+ 'praxis.dynamicFields.inlinePipelineStatus.barAriaSelected': '{{label}} with {{count}} selected items',
209
+ 'praxis.dynamicFields.inlinePipelineStatus.optionsGroupAriaLabelMultiple': 'Multiple selection options',
210
+ 'praxis.dynamicFields.inlinePipelineStatus.optionsGroupAriaLabelSingle': 'Single selection options',
211
+ 'praxis.dynamicFields.inlinePipelineStatus.emptyStateText': 'No options found',
201
212
  'praxis.dynamicFields.inlineSelect.searchPlaceholder': 'Search...',
202
213
  'praxis.dynamicFields.inlineTreeSelect.placeholder': 'Tree',
203
214
  'praxis.dynamicFields.inlineTreeSelect.searchPlaceholder': 'Search tree...',
@@ -354,7 +365,18 @@ const PRAXIS_DYNAMIC_FIELDS_PT_BR = {
354
365
  'praxis.dynamicFields.inlineCurrencyRange.ariaSelection': '{{label}}: {{value}}',
355
366
  'praxis.dynamicFields.inlineCurrencyRange.value.from': '>= {{value}}',
356
367
  'praxis.dynamicFields.inlineCurrencyRange.value.upto': '<= {{value}}',
357
- 'praxis.dynamicFields.inlineSelect.placeholder': 'Filtro',
368
+ 'praxis.dynamicFields.inlineSelect.placeholder': 'Selecionar',
369
+ 'praxis.dynamicFields.inlinePipelineStatus.placeholder': 'Pipeline',
370
+ 'praxis.dynamicFields.inlinePipelineStatus.panelSubtitle': 'Painel de seleção configurável para estágios, status ou prioridades',
371
+ 'praxis.dynamicFields.inlinePipelineStatus.searchPlaceholder': 'Pesquisar estágios...',
372
+ 'praxis.dynamicFields.inlinePipelineStatus.selectionActionsAriaLabel': 'Ações da seleção',
373
+ 'praxis.dynamicFields.inlinePipelineStatus.clearActionLabel': 'Limpar',
374
+ 'praxis.dynamicFields.inlinePipelineStatus.selectionPillsAriaLabel': 'Itens selecionados',
375
+ 'praxis.dynamicFields.inlinePipelineStatus.barAriaEmpty': '{{label}} sem itens selecionados',
376
+ 'praxis.dynamicFields.inlinePipelineStatus.barAriaSelected': '{{label}} com {{count}} itens selecionados',
377
+ 'praxis.dynamicFields.inlinePipelineStatus.optionsGroupAriaLabelMultiple': 'Opções de seleção múltipla',
378
+ 'praxis.dynamicFields.inlinePipelineStatus.optionsGroupAriaLabelSingle': 'Opções de seleção única',
379
+ 'praxis.dynamicFields.inlinePipelineStatus.emptyStateText': 'Nenhuma opção encontrada',
358
380
  'praxis.dynamicFields.inlineSelect.searchPlaceholder': 'Pesquisar...',
359
381
  'praxis.dynamicFields.inlineTreeSelect.placeholder': 'Árvore',
360
382
  'praxis.dynamicFields.inlineTreeSelect.searchPlaceholder': 'Buscar na árvore...',
@@ -557,7 +579,7 @@ class SimpleBaseInputComponent {
557
579
  const enabled = typeof cfg === 'boolean' ? cfg : cfg.enabled !== false;
558
580
  if (!enabled)
559
581
  return false;
560
- if (this.disabledMode || this.isReadonlyEffective?.() || this.presentationMode) {
582
+ if (this.isInteractionBlockedByState()) {
561
583
  return false;
562
584
  }
563
585
  if (cfg !== true && cfg?.showOnlyWhenFilled) {
@@ -737,13 +759,18 @@ class SimpleBaseInputComponent {
737
759
  /**
738
760
  * Tooltip usado pelos campos inline:
739
761
  * 1) prioriza erro quando validators.errorPosition = tooltip
740
- * 2) fallback para contexto "Campo: valor" quando houver valor preenchido
762
+ * 2) materializa help text explícito do metadata (tooltip/hint)
763
+ * 3) fallback para contexto "Campo: valor" quando houver valor preenchido
741
764
  */
742
765
  inlineTooltipText() {
743
766
  const validationTooltip = this.tooltipEnabled() ? String(this.errorMessage() || '').trim() : '';
744
767
  if (validationTooltip.length) {
745
768
  return validationTooltip;
746
769
  }
770
+ const explicitHelpTooltip = this.resolveInlineHelpTooltipText();
771
+ if (explicitHelpTooltip.length) {
772
+ return explicitHelpTooltip;
773
+ }
747
774
  if (!this.isInlineContextTooltipEnabled()) {
748
775
  return '';
749
776
  }
@@ -774,6 +801,28 @@ class SimpleBaseInputComponent {
774
801
  resolveInlineContextTooltipValue() {
775
802
  return this.stringifyInlineContextValue(this.control().value);
776
803
  }
804
+ resolveInlineHelpTooltipText() {
805
+ const meta = this.metadata();
806
+ const candidates = [
807
+ meta?.inlineTooltip,
808
+ meta?.tooltip,
809
+ meta?.hint,
810
+ ];
811
+ for (const candidate of candidates) {
812
+ const text = String(candidate ?? '').trim();
813
+ if (text.length) {
814
+ return this.truncateInlineTooltipText(text);
815
+ }
816
+ }
817
+ return '';
818
+ }
819
+ isInteractionBlockedByState(options) {
820
+ const includeReadonly = options?.includeReadonly !== false;
821
+ const includePresentation = options?.includePresentation !== false;
822
+ const readonlyBlocked = includeReadonly && !!this.isReadonlyEffective?.();
823
+ const presentationBlocked = includePresentation && !!this.presentationMode;
824
+ return !!this.disabledMode || this.control().disabled || readonlyBlocked || presentationBlocked;
825
+ }
777
826
  resolveInlineContextTooltipLabel() {
778
827
  const meta = this.metadata();
779
828
  const candidates = [
@@ -1376,6 +1425,9 @@ class SimpleBaseInputComponent {
1376
1425
  this.nativeElement.setAttribute('aria-label', meta.ariaLabel);
1377
1426
  if (meta.ariaDescribedby)
1378
1427
  this.nativeElement.setAttribute('aria-describedby', meta.ariaDescribedby);
1428
+ else if (meta.hint) {
1429
+ this.nativeElement.setAttribute('aria-description', String(meta.hint));
1430
+ }
1379
1431
  if (meta.ariaLabelledby)
1380
1432
  this.nativeElement.setAttribute('aria-labelledby', meta.ariaLabelledby);
1381
1433
  if (meta.required !== undefined) {
@@ -3436,6 +3488,7 @@ class ComponentRegistryService {
3436
3488
  this.registry.forEach((registration) => {
3437
3489
  registration.cached = undefined;
3438
3490
  registration.cachedAt = undefined;
3491
+ registration.loadingPromise = undefined;
3439
3492
  registration.loadAttempts = 0;
3440
3493
  registration.lastError = undefined;
3441
3494
  });
@@ -3466,6 +3519,7 @@ class ComponentRegistryService {
3466
3519
  if (registration) {
3467
3520
  registration.cached = undefined;
3468
3521
  registration.cachedAt = undefined;
3522
+ registration.loadingPromise = undefined;
3469
3523
  registration.loadAttempts = 0;
3470
3524
  registration.lastError = undefined;
3471
3525
  this.logger.debug(`[ComponentRegistry] Cache limpo para ${type}`, this.buildLogOptions({ controlType: type }, {
@@ -3721,6 +3775,18 @@ class ComponentRegistryService {
3721
3775
  * Carrega componente com lógica de retry
3722
3776
  */
3723
3777
  async loadComponentWithRetry(registration, type) {
3778
+ if (registration.loadingPromise) {
3779
+ return registration.loadingPromise;
3780
+ }
3781
+ const loadPromise = this.performLoadWithRetry(registration, type).finally(() => {
3782
+ if (registration.loadingPromise === loadPromise) {
3783
+ registration.loadingPromise = undefined;
3784
+ }
3785
+ });
3786
+ registration.loadingPromise = loadPromise;
3787
+ return loadPromise;
3788
+ }
3789
+ async performLoadWithRetry(registration, type) {
3724
3790
  const attempts = registration.loadAttempts || 0;
3725
3791
  if (attempts >= MAX_LOAD_ATTEMPTS) {
3726
3792
  this.logger.error(`[ComponentRegistry] Máximo de tentativas atingido para '${type}'. Último erro:`, this.buildLogOptions({ controlType: type, lastError: registration.lastError }, { context: { actionId: 'component.load-with-retry' } }));
@@ -3745,6 +3811,7 @@ class ComponentRegistryService {
3745
3811
  registration.cached = component;
3746
3812
  registration.cachedAt = Date.now();
3747
3813
  registration.loadAttempts = 0;
3814
+ registration.loadingPromise = undefined;
3748
3815
  registration.lastError = undefined;
3749
3816
  // Log apenas na primeira vez que carrega (não em cache hits subsequentes)
3750
3817
  if (attempts === 0) {
@@ -3756,11 +3823,12 @@ class ComponentRegistryService {
3756
3823
  return component;
3757
3824
  }
3758
3825
  catch (error) {
3826
+ registration.loadingPromise = undefined;
3759
3827
  registration.lastError = error;
3760
3828
  this.logger.error(`[ComponentRegistry] Erro na tentativa ${attempts + 1} para '${type}':`, this.buildLogOptions({ controlType: type, attempt: attempts + 1, error }, { context: { actionId: 'component.load-with-retry' } }));
3761
3829
  // Se não é a última tentativa, tentar novamente
3762
3830
  if (attempts + 1 < MAX_LOAD_ATTEMPTS) {
3763
- return this.loadComponentWithRetry(registration, type);
3831
+ return this.performLoadWithRetry(registration, type);
3764
3832
  }
3765
3833
  return null;
3766
3834
  }
@@ -5197,17 +5265,62 @@ class DynamicFieldLoaderDirective {
5197
5265
  this.lastFieldsSnapshot = this.buildFieldSnapshot(fieldsSnapshot);
5198
5266
  this.dbg('[DFL] executeRendering: complete', { totalCreated: createdFieldNames.length, hadErrors });
5199
5267
  }
5200
- /** Builds a minimal snapshot capturing changes that matter for re-rendering. */
5268
+ /** Builds a semantic snapshot capturing metadata changes that affect runtime rendering. */
5201
5269
  buildFieldSnapshot(fields) {
5202
5270
  return (fields || []).map((f) => {
5203
- const readonly = f.readonly ?? f.readOnly ?? false;
5204
- const disabled = !!f.disabled;
5205
- const hidden = !!(f.hidden || f.formHidden);
5206
- const required = !!(f.required || f?.validators?.required);
5207
- const sig = JSON.stringify({ r: required, ro: !!readonly, d: disabled, h: hidden });
5208
- return { name: f.name, controlType: f.controlType, sig };
5271
+ return {
5272
+ name: f.name,
5273
+ controlType: f.controlType,
5274
+ sig: this.buildFieldSemanticSignature(f),
5275
+ };
5209
5276
  });
5210
5277
  }
5278
+ buildFieldSemanticSignature(field) {
5279
+ const seen = new WeakSet();
5280
+ const normalize = (value) => {
5281
+ if (value === null || value === undefined)
5282
+ return value;
5283
+ if (typeof value === 'string' ||
5284
+ typeof value === 'number' ||
5285
+ typeof value === 'boolean') {
5286
+ return value;
5287
+ }
5288
+ if (value instanceof Date) {
5289
+ return value.toISOString();
5290
+ }
5291
+ if (Array.isArray(value)) {
5292
+ return value.map((item) => normalize(item));
5293
+ }
5294
+ if (typeof value === 'function' || typeof value === 'symbol') {
5295
+ return undefined;
5296
+ }
5297
+ if (typeof value !== 'object') {
5298
+ return String(value);
5299
+ }
5300
+ if (seen.has(value)) {
5301
+ return '[Circular]';
5302
+ }
5303
+ seen.add(value);
5304
+ const source = value;
5305
+ const normalized = {};
5306
+ Object.keys(source)
5307
+ .sort()
5308
+ .forEach((key) => {
5309
+ if (key === 'control' ||
5310
+ key === 'formControl' ||
5311
+ key === 'formGroup' ||
5312
+ key === 'componentRef') {
5313
+ return;
5314
+ }
5315
+ const next = normalize(source[key]);
5316
+ if (next !== undefined) {
5317
+ normalized[key] = next;
5318
+ }
5319
+ });
5320
+ return normalized;
5321
+ };
5322
+ return JSON.stringify(normalize(field));
5323
+ }
5211
5324
  /**
5212
5325
  * Reatribui apenas os FormControls existentes aos componentes/shells sem refazer a renderização.
5213
5326
  */
@@ -14070,7 +14183,10 @@ class InlineSelectComponent extends SimpleBaseSelectComponent {
14070
14183
  }
14071
14184
  placeholderText() {
14072
14185
  const fromMeta = this.resolveFieldLabelFromMetadata(this.currentMetadata());
14073
- return fromMeta || this.fieldLabelText || this.tDynamicFields('inlineSelect.placeholder', 'Filtro');
14186
+ return (fromMeta ||
14187
+ this.fieldLabelText ||
14188
+ this.resolveHumanizedFieldName(this.currentMetadata().name) ||
14189
+ this.tDynamicFields('inlineSelect.placeholder', 'Selecionar'));
14074
14190
  }
14075
14191
  searchPlaceholderText() {
14076
14192
  const custom = String(this.currentMetadata().searchPlaceholder || '').trim();
@@ -14093,7 +14209,20 @@ class InlineSelectComponent extends SimpleBaseSelectComponent {
14093
14209
  return text;
14094
14210
  }
14095
14211
  }
14096
- return this.tDynamicFields('inlineSelect.placeholder', 'Filtro');
14212
+ return '';
14213
+ }
14214
+ resolveHumanizedFieldName(value) {
14215
+ const raw = String(value ?? '').trim();
14216
+ if (!raw)
14217
+ return '';
14218
+ const spaced = raw
14219
+ .replace(/([a-z0-9])([A-Z])/g, '$1 $2')
14220
+ .replace(/[_\-.]+/g, ' ')
14221
+ .replace(/\s+/g, ' ')
14222
+ .trim();
14223
+ if (!spaced)
14224
+ return '';
14225
+ return spaced.charAt(0).toUpperCase() + spaced.slice(1);
14097
14226
  }
14098
14227
  ariaLabel() {
14099
14228
  const custom = String(this.currentMetadata().ariaLabel || '').trim();
@@ -16159,7 +16288,10 @@ class InlineAsyncSelectComponent extends MaterialAsyncSelectComponent {
16159
16288
  }
16160
16289
  placeholderText() {
16161
16290
  const fromMeta = this.resolveFieldLabelFromMetadata(this.metadata() || {});
16162
- return fromMeta || this.fieldLabelText || this.tDynamicFields('inlineSelect.placeholder', 'Filtro');
16291
+ return (fromMeta ||
16292
+ this.fieldLabelText ||
16293
+ this.resolveHumanizedFieldName(this.currentMetadata().name) ||
16294
+ this.tDynamicFields('inlineSelect.placeholder', 'Selecionar'));
16163
16295
  }
16164
16296
  searchPlaceholderText() {
16165
16297
  const custom = String(this.currentMetadata().searchPlaceholder || '').trim();
@@ -16168,8 +16300,21 @@ class InlineAsyncSelectComponent extends MaterialAsyncSelectComponent {
16168
16300
  ariaLabel() {
16169
16301
  return (this.currentMetadata().ariaLabel ||
16170
16302
  this.label ||
16171
- this.metadata()?.name ||
16172
- 'Filtro');
16303
+ this.resolveHumanizedFieldName(this.metadata()?.name) ||
16304
+ this.placeholderText());
16305
+ }
16306
+ resolveHumanizedFieldName(value) {
16307
+ const raw = String(value ?? '').trim();
16308
+ if (!raw)
16309
+ return '';
16310
+ const spaced = raw
16311
+ .replace(/([a-z0-9])([A-Z])/g, '$1 $2')
16312
+ .replace(/[_\-.]+/g, ' ')
16313
+ .replace(/\s+/g, ' ')
16314
+ .trim();
16315
+ if (!spaced)
16316
+ return '';
16317
+ return spaced.charAt(0).toUpperCase() + spaced.slice(1);
16173
16318
  }
16174
16319
  resolveOptionLabel(value) {
16175
16320
  const option = this.options().find((item) => this.equalsOptionValue(item.value, value));
@@ -17888,6 +18033,9 @@ class InlineInputComponent extends SimpleBaseInputComponent {
17888
18033
  }
17889
18034
  ngAfterViewInit() {
17890
18035
  super.ngAfterViewInit();
18036
+ if (this.inputEl?.nativeElement) {
18037
+ this.registerInputElement(this.inputEl.nativeElement);
18038
+ }
17891
18039
  this.scheduleInlineResize();
17892
18040
  }
17893
18041
  onComponentDestroy() {
@@ -18114,6 +18262,7 @@ class InlineInputComponent extends SimpleBaseInputComponent {
18114
18262
  [placeholder]="placeholderText()"
18115
18263
  [required]="metadata()?.required || false"
18116
18264
  [readonly]="isReadonlyEffective()"
18265
+ [disabled]="disabledMode || control().disabled"
18117
18266
  [autocomplete]="metadata()?.autocomplete || 'off'"
18118
18267
  [spellcheck]="metadata()?.spellcheck ?? false"
18119
18268
  [maxlength]="metadata()?.maxLength || null"
@@ -18193,6 +18342,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
18193
18342
  [placeholder]="placeholderText()"
18194
18343
  [required]="metadata()?.required || false"
18195
18344
  [readonly]="isReadonlyEffective()"
18345
+ [disabled]="disabledMode || control().disabled"
18196
18346
  [autocomplete]="metadata()?.autocomplete || 'off'"
18197
18347
  [spellcheck]="metadata()?.spellcheck ?? false"
18198
18348
  [maxlength]="metadata()?.maxLength || null"
@@ -19383,6 +19533,9 @@ class InlineNumberComponent extends SimpleBaseInputComponent {
19383
19533
  }
19384
19534
  ngAfterViewInit() {
19385
19535
  super.ngAfterViewInit();
19536
+ if (this.inputEl?.nativeElement) {
19537
+ this.registerInputElement(this.inputEl.nativeElement);
19538
+ }
19386
19539
  this.scheduleInlineResize();
19387
19540
  }
19388
19541
  onComponentDestroy() {
@@ -19811,6 +19964,7 @@ class InlineNumberComponent extends SimpleBaseInputComponent {
19811
19964
  [placeholder]="placeholderText()"
19812
19965
  [required]="metadata()?.required || false"
19813
19966
  [readonly]="isReadonlyEffective()"
19967
+ [disabled]="disabledMode || control().disabled"
19814
19968
  [autocomplete]="metadata()?.autocomplete || 'off'"
19815
19969
  [spellcheck]="metadata()?.spellcheck ?? false"
19816
19970
  [min]="effectiveMinValue()"
@@ -19923,6 +20077,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
19923
20077
  [placeholder]="placeholderText()"
19924
20078
  [required]="metadata()?.required || false"
19925
20079
  [readonly]="isReadonlyEffective()"
20080
+ [disabled]="disabledMode || control().disabled"
19926
20081
  [autocomplete]="metadata()?.autocomplete || 'off'"
19927
20082
  [spellcheck]="metadata()?.spellcheck ?? false"
19928
20083
  [min]="effectiveMinValue()"
@@ -20995,7 +21150,7 @@ class InlineCurrencyRangeComponent extends SimpleBaseInputComponent {
20995
21150
  return this.distributionVisual().opacity;
20996
21151
  }
20997
21152
  isInteractionBlocked() {
20998
- return this.disabledMode || this.isReadonlyEffective();
21153
+ return this.isInteractionBlockedByState();
20999
21154
  }
21000
21155
  hasSelection() {
21001
21156
  return this.currentRangeValue() !== null;
@@ -22315,7 +22470,7 @@ class InlineRangeSliderComponent extends SimpleBaseInputComponent {
22315
22470
  return String(this.currentMetadata().mode || 'single').toLowerCase() === 'range';
22316
22471
  }
22317
22472
  isInteractionBlocked() {
22318
- return this.disabledMode || this.isReadonlyEffective();
22473
+ return this.isInteractionBlockedByState();
22319
22474
  }
22320
22475
  hasSelection() {
22321
22476
  if (this.isRangeMode()) {
@@ -25348,10 +25503,7 @@ class InlineDateRangeComponent extends MaterialDateRangeComponent {
25348
25503
  this.scheduleInlineResize();
25349
25504
  }
25350
25505
  isInteractionBlocked() {
25351
- return (this.disabledMode ||
25352
- this.presentationMode ||
25353
- this.isReadonlyEffective() ||
25354
- this.control().disabled);
25506
+ return this.isInteractionBlockedByState();
25355
25507
  }
25356
25508
  showQuickClear() {
25357
25509
  const clearCfg = this.currentMetadata().clearButton;
@@ -26698,7 +26850,7 @@ class InlineTimeComponent extends MaterialTimepickerComponent {
26698
26850
  return getErrorStateMatcherForField(this.metadata());
26699
26851
  }
26700
26852
  isInteractionBlocked() {
26701
- return this.disabledMode || this.isReadonlyEffective() || this.presentationMode;
26853
+ return this.isInteractionBlockedByState();
26702
26854
  }
26703
26855
  showQuickClear() {
26704
26856
  const clearCfg = this.currentMetadata().clearButton;
@@ -28683,10 +28835,7 @@ class InlineTimeRangeComponent extends PdxMaterialTimeRangeComponent {
28683
28835
  return ticks === true || ticks === 'auto';
28684
28836
  }
28685
28837
  isInteractionBlocked() {
28686
- return (this.disabledMode ||
28687
- this.presentationMode ||
28688
- this.isReadonlyEffective() ||
28689
- this.control().disabled);
28838
+ return this.isInteractionBlockedByState();
28690
28839
  }
28691
28840
  hasValue() {
28692
28841
  const value = this.timeRangeForm.value;
@@ -30336,7 +30485,7 @@ class InlineTreeSelectComponent extends SimpleBaseSelectComponent {
30336
30485
  <div
30337
30486
  class="pdx-chip-trigger"
30338
30487
  [class.is-active]="hasSelection()"
30339
- [class.is-disabled]="disabledMode || isReadonlyEffective() || presentationMode"
30488
+ [class.is-disabled]="disabledMode || control().disabled || isReadonlyEffective() || presentationMode"
30340
30489
  >
30341
30490
  <button
30342
30491
  #triggerEl
@@ -30344,7 +30493,7 @@ class InlineTreeSelectComponent extends SimpleBaseSelectComponent {
30344
30493
  class="pdx-chip-main"
30345
30494
  [matMenuTriggerFor]="treeMenu"
30346
30495
  [matMenuTriggerRestoreFocus]="false"
30347
- [disabled]="disabledMode || isReadonlyEffective() || presentationMode"
30496
+ [disabled]="disabledMode || control().disabled || isReadonlyEffective() || presentationMode"
30348
30497
  [attr.aria-label]="ariaLabel()"
30349
30498
  [matTooltip]="inlineTooltipText()"
30350
30499
  [matTooltipDisabled]="inlineTooltipDisabled()"
@@ -30524,7 +30673,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
30524
30673
  <div
30525
30674
  class="pdx-chip-trigger"
30526
30675
  [class.is-active]="hasSelection()"
30527
- [class.is-disabled]="disabledMode || isReadonlyEffective() || presentationMode"
30676
+ [class.is-disabled]="disabledMode || control().disabled || isReadonlyEffective() || presentationMode"
30528
30677
  >
30529
30678
  <button
30530
30679
  #triggerEl
@@ -30532,7 +30681,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
30532
30681
  class="pdx-chip-main"
30533
30682
  [matMenuTriggerFor]="treeMenu"
30534
30683
  [matMenuTriggerRestoreFocus]="false"
30535
- [disabled]="disabledMode || isReadonlyEffective() || presentationMode"
30684
+ [disabled]="disabledMode || control().disabled || isReadonlyEffective() || presentationMode"
30536
30685
  [attr.aria-label]="ariaLabel()"
30537
30686
  [matTooltip]="inlineTooltipText()"
30538
30687
  [matTooltipDisabled]="inlineTooltipDisabled()"
@@ -33030,10 +33179,10 @@ class InlinePipelineStatusComponent extends SimpleBaseSelectComponent {
33030
33179
  return this.placeholderText();
33031
33180
  }
33032
33181
  panelSubtitleText() {
33033
- return this.resolvePipelineText('panelSubtitle', this.tDynamicFields('inlinePipeline.panelSubtitle', ''), 'pipelineSubtitle', 'inlinePanelSubtitle', 'hint');
33182
+ return this.resolvePipelineText('panelSubtitle', this.tDynamicFields('inlinePipelineStatus.panelSubtitle', ''), 'pipelineSubtitle', 'inlinePanelSubtitle', 'hint');
33034
33183
  }
33035
33184
  searchPlaceholderText() {
33036
- return this.resolvePipelineText('searchPlaceholder', this.tDynamicFields('inlinePipeline.searchPlaceholder', ''), 'pipelineSearchPlaceholder', 'searchPlaceholder');
33185
+ return this.resolvePipelineText('searchPlaceholder', this.tDynamicFields('inlinePipelineStatus.searchPlaceholder', ''), 'pipelineSearchPlaceholder', 'searchPlaceholder');
33037
33186
  }
33038
33187
  panelSearchIconName(fallback = 'search') {
33039
33188
  return this.metadataIconName(['pipelineSearchIcon', 'panelSearchIcon', 'searchIcon', 'inlineSearchIcon'], fallback);
@@ -33065,16 +33214,16 @@ class InlinePipelineStatusComponent extends SimpleBaseSelectComponent {
33065
33214
  return this.showSelectAllAction() || this.showClearSelectionAction();
33066
33215
  }
33067
33216
  selectionActionsAriaLabel() {
33068
- return this.resolvePipelineText('selectionActionsAriaLabel', this.tDynamicFields('inlinePipeline.selectionActionsAriaLabel', ''), 'pipelineSelectionActionsAriaLabel');
33217
+ return this.resolvePipelineText('selectionActionsAriaLabel', this.tDynamicFields('inlinePipelineStatus.selectionActionsAriaLabel', ''), 'pipelineSelectionActionsAriaLabel');
33069
33218
  }
33070
33219
  selectAllActionText() {
33071
33220
  return this.resolvePipelineText('selectAllActionLabel', this.tDynamicFields('multiSelect.selectAllLabel', 'Select all'), 'pipelineSelectAllText');
33072
33221
  }
33073
33222
  clearSelectionActionText() {
33074
- return this.resolvePipelineText('clearActionLabel', this.tDynamicFields('inlinePipeline.clearActionLabel', ''), 'pipelineClearActionText');
33223
+ return this.resolvePipelineText('clearActionLabel', this.tDynamicFields('inlinePipelineStatus.clearActionLabel', ''), 'pipelineClearActionText');
33075
33224
  }
33076
33225
  selectionPillsAriaLabel() {
33077
- return this.resolvePipelineText('selectionPillsAriaLabel', this.tDynamicFields('inlinePipeline.selectionPillsAriaLabel', ''), 'pipelineSelectionPillsAriaLabel');
33226
+ return this.resolvePipelineText('selectionPillsAriaLabel', this.tDynamicFields('inlinePipelineStatus.selectionPillsAriaLabel', ''), 'pipelineSelectionPillsAriaLabel');
33078
33227
  }
33079
33228
  showSelectAllAction() {
33080
33229
  const md = this.currentMetadata();
@@ -33204,9 +33353,9 @@ class InlinePipelineStatusComponent extends SimpleBaseSelectComponent {
33204
33353
  }
33205
33354
  optionsGroupAriaLabel() {
33206
33355
  if (this.multipleMode()) {
33207
- return this.resolvePipelineText('optionsGroupAriaLabelMultiple', this.tDynamicFields('inlinePipeline.optionsGroupAriaLabelMultiple', ''), 'pipelineOptionsGroupAriaLabelMultiple');
33356
+ return this.resolvePipelineText('optionsGroupAriaLabelMultiple', this.tDynamicFields('inlinePipelineStatus.optionsGroupAriaLabelMultiple', ''), 'pipelineOptionsGroupAriaLabelMultiple');
33208
33357
  }
33209
- return this.resolvePipelineText('optionsGroupAriaLabelSingle', this.tDynamicFields('inlinePipeline.optionsGroupAriaLabelSingle', ''), 'pipelineOptionsGroupAriaLabelSingle');
33358
+ return this.resolvePipelineText('optionsGroupAriaLabelSingle', this.tDynamicFields('inlinePipelineStatus.optionsGroupAriaLabelSingle', ''), 'pipelineOptionsGroupAriaLabelSingle');
33210
33359
  }
33211
33360
  optionAriaLabel(option) {
33212
33361
  if (!option.subtitle) {
@@ -33260,7 +33409,7 @@ class InlinePipelineStatusComponent extends SimpleBaseSelectComponent {
33260
33409
  }
33261
33410
  placeholderText() {
33262
33411
  const fromMeta = this.resolveFieldLabelFromMetadata(this.currentMetadata());
33263
- return fromMeta || this.fieldLabelText || this.tDynamicFields('inlinePipeline.placeholder', '');
33412
+ return fromMeta || this.fieldLabelText || this.tDynamicFields('inlinePipelineStatus.placeholder', '');
33264
33413
  }
33265
33414
  ariaLabel() {
33266
33415
  const metadata = this.currentMetadata();
@@ -33270,7 +33419,7 @@ class InlinePipelineStatusComponent extends SimpleBaseSelectComponent {
33270
33419
  return `${this.nonEmptyText(metadata.ariaLabel) || this.placeholderText()}: ${this.displayText()}`;
33271
33420
  }
33272
33421
  emptyStateText() {
33273
- return this.resolvePipelineText('emptyStateText', this.tDynamicFields('inlinePipeline.emptyStateText', ''), 'pipelineEmptyStateText', 'emptyStateText');
33422
+ return this.resolvePipelineText('emptyStateText', this.tDynamicFields('inlinePipelineStatus.emptyStateText', ''), 'pipelineEmptyStateText', 'emptyStateText');
33274
33423
  }
33275
33424
  resolveMultipleMode(metadata) {
33276
33425
  if (typeof metadata.multiple === 'boolean')
@@ -33293,7 +33442,7 @@ class InlinePipelineStatusComponent extends SimpleBaseSelectComponent {
33293
33442
  return [value];
33294
33443
  }
33295
33444
  isInteractionBlocked() {
33296
- return this.disabledMode || this.isReadonlyEffective() || this.presentationMode;
33445
+ return this.isInteractionBlockedByState();
33297
33446
  }
33298
33447
  toVisualOption(option, index, totalOptions = 0) {
33299
33448
  const raw = option;
@@ -33521,7 +33670,7 @@ class InlinePipelineStatusComponent extends SimpleBaseSelectComponent {
33521
33670
  return text;
33522
33671
  }
33523
33672
  }
33524
- return this.tDynamicFields('inlinePipeline.placeholder', '');
33673
+ return this.tDynamicFields('inlinePipelineStatus.placeholder', '');
33525
33674
  }
33526
33675
  recalculateInlineSizeBounds() {
33527
33676
  const viewportWidth = typeof window !== 'undefined' ? window.innerWidth : 1280;
@@ -35509,7 +35658,7 @@ class InlineRelativePeriodComponent extends SimpleBaseSelectComponent {
35509
35658
  return this.resolveText('emptyStateText', this.tDynamicFields('inlineRelativePeriod.emptyStateText', ''), 'relativePeriodEmptyStateText', 'emptyStateText');
35510
35659
  }
35511
35660
  isInteractionBlocked() {
35512
- return this.disabledMode || this.isReadonlyEffective() || this.presentationMode;
35661
+ return this.isInteractionBlockedByState();
35513
35662
  }
35514
35663
  parseOptionsSource(source) {
35515
35664
  if (Array.isArray(source)) {
@@ -36421,7 +36570,7 @@ class InlineSentimentComponent extends SimpleBaseSelectComponent {
36421
36570
  return this.resolveText('emptyStateText', this.tDynamicFields('inlineSentiment.emptyStateText', ''), 'sentimentEmptyStateText', 'emptyStateText');
36422
36571
  }
36423
36572
  isInteractionBlocked() {
36424
- return this.disabledMode || this.isReadonlyEffective() || this.presentationMode;
36573
+ return this.isInteractionBlockedByState();
36425
36574
  }
36426
36575
  parseOptionsSource(source) {
36427
36576
  if (Array.isArray(source)) {
@@ -37430,7 +37579,7 @@ class InlineColorLabelComponent extends SimpleBaseSelectComponent {
37430
37579
  return this.resolveText('emptyStateText', this.tDynamicFields('inlineColorLabel.emptyStateText', ''), 'colorLabelEmptyStateText', 'emptyStateText');
37431
37580
  }
37432
37581
  isInteractionBlocked() {
37433
- return this.disabledMode || this.isReadonlyEffective() || this.presentationMode;
37582
+ return this.isInteractionBlockedByState();
37434
37583
  }
37435
37584
  parseOptionsSource(source) {
37436
37585
  if (Array.isArray(source)) {
@@ -39415,6 +39564,7 @@ class MaterialChipsComponent extends SimpleBaseSelectComponent {
39415
39564
  presentationMode = false;
39416
39565
  removable = signal(true, ...(ngDevMode ? [{ debugName: "removable" }] : []));
39417
39566
  addOnBlur = signal(false, ...(ngDevMode ? [{ debugName: "addOnBlur" }] : []));
39567
+ chipPlaceholder = signal(null, ...(ngDevMode ? [{ debugName: "chipPlaceholder" }] : []));
39418
39568
  separatorKeys = [ENTER, COMMA];
39419
39569
  asRecord(value) {
39420
39570
  if (value && typeof value === 'object' && !Array.isArray(value)) {
@@ -39457,6 +39607,9 @@ class MaterialChipsComponent extends SimpleBaseSelectComponent {
39457
39607
  const target = event.target;
39458
39608
  this.onSearch(target instanceof HTMLInputElement ? target.value : '');
39459
39609
  }
39610
+ setInputMetadata(metadata) {
39611
+ this.setSelectMetadata(metadata);
39612
+ }
39460
39613
  setSelectMetadata(metadata) {
39461
39614
  const matMetadata = metadata;
39462
39615
  this.devWarnSelectAliases(matMetadata, 'MaterialChipsComponent');
@@ -39478,6 +39631,9 @@ class MaterialChipsComponent extends SimpleBaseSelectComponent {
39478
39631
  });
39479
39632
  this.removable.set(matMetadata.removable ?? true);
39480
39633
  this.addOnBlur.set(matMetadata.addOnBlur ?? false);
39634
+ this.chipPlaceholder.set(typeof matMetadata.placeholder === 'string' && matMetadata.placeholder.trim().length
39635
+ ? matMetadata.placeholder
39636
+ : null);
39481
39637
  }
39482
39638
  errorStateMatcher() {
39483
39639
  return getErrorStateMatcherForField(this.metadata());
@@ -39518,6 +39674,7 @@ class MaterialChipsComponent extends SimpleBaseSelectComponent {
39518
39674
  [matChipInputSeparatorKeyCodes]="separatorKeys"
39519
39675
  [matAutocomplete]="auto"
39520
39676
  [required]="metadata()?.required || false"
39677
+ [attr.placeholder]="chipPlaceholder()"
39521
39678
  (input)="onSearchInputEvent($event)"
39522
39679
  (matChipInputTokenEnd)="onInputTokenEnd($event)"
39523
39680
  [matTooltip]="tooltipEnabled() ? errorMessage() : null"
@@ -39625,6 +39782,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
39625
39782
  [matChipInputSeparatorKeyCodes]="separatorKeys"
39626
39783
  [matAutocomplete]="auto"
39627
39784
  [required]="metadata()?.required || false"
39785
+ [attr.placeholder]="chipPlaceholder()"
39628
39786
  (input)="onSearchInputEvent($event)"
39629
39787
  (matChipInputTokenEnd)="onInputTokenEnd($event)"
39630
39788
  [matTooltip]="tooltipEnabled() ? errorMessage() : null"
@@ -40316,6 +40474,12 @@ class MaterialAvatarComponent {
40316
40474
  return `Avatar icon ${icon}`;
40317
40475
  return 'Avatar';
40318
40476
  }, ...(ngDevMode ? [{ debugName: "computedAriaLabel" }] : []));
40477
+ resolvedHint = computed(() => {
40478
+ const meta = this.metadata();
40479
+ const hint = meta?.hint;
40480
+ return typeof hint === 'string' && hint.trim().length ? hint.trim() : '';
40481
+ }, ...(ngDevMode ? [{ debugName: "resolvedHint" }] : []));
40482
+ hintId = computed(() => (this.resolvedHint() ? `${this.componentId()}-hint` : null), ...(ngDevMode ? [{ debugName: "hintId" }] : []));
40319
40483
  // Helpers for icon resolution
40320
40484
  resolveIconKind(i) {
40321
40485
  if (!i)
@@ -40552,7 +40716,7 @@ class MaterialAvatarComponent {
40552
40716
  }
40553
40717
  }
40554
40718
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: MaterialAvatarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
40555
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: MaterialAvatarComponent, isStandalone: true, selector: "pdx-material-avatar", inputs: { imageSrc: "imageSrc", imageAlt: "imageAlt", initials: "initials", name: "name", icon: "icon", defaultIcon: "defaultIcon", themeColor: "themeColor", rounded: "rounded", size: "size", fillMode: "fillMode", border: "border", sizePx: "sizePx", sizeCss: "sizeCss", tooltip: "tooltip", ariaLabel: "ariaLabel", readonlyMode: "readonlyMode", disabledMode: "disabledMode", visible: "visible", presentationMode: "presentationMode", class: "class", style: "style" }, outputs: { imageError: "imageError" }, host: { properties: { "class": "componentCssClasses()", "style.display": "visible === false ? \"none\" : null", "attr.aria-hidden": "visible ? null : \"true\"", "attr.role": "\"img\"", "attr.aria-label": "computedAriaLabel() || null", "attr.data-field-type": "\"avatar\"", "attr.data-field-name": "metadata()?.name", "attr.data-component-id": "componentId()", "class.praxis-disabled": "disabledMode === true", "class.praxis-readonly": "readonlyMode === true", "class.presentation-mode": "presentationMode === true" } }, ngImport: i0, template: `
40719
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: MaterialAvatarComponent, isStandalone: true, selector: "pdx-material-avatar", inputs: { imageSrc: "imageSrc", imageAlt: "imageAlt", initials: "initials", name: "name", icon: "icon", defaultIcon: "defaultIcon", themeColor: "themeColor", rounded: "rounded", size: "size", fillMode: "fillMode", border: "border", sizePx: "sizePx", sizeCss: "sizeCss", tooltip: "tooltip", ariaLabel: "ariaLabel", readonlyMode: "readonlyMode", disabledMode: "disabledMode", visible: "visible", presentationMode: "presentationMode", class: "class", style: "style" }, outputs: { imageError: "imageError" }, host: { properties: { "class": "componentCssClasses()", "style.display": "visible === false ? \"none\" : null", "attr.aria-hidden": "visible ? null : \"true\"", "attr.role": "\"img\"", "attr.aria-label": "computedAriaLabel() || null", "attr.aria-describedby": "hintId()", "attr.data-field-type": "\"avatar\"", "attr.data-field-name": "metadata()?.name", "attr.data-component-id": "componentId()", "class.praxis-disabled": "disabledMode === true", "class.praxis-readonly": "readonlyMode === true", "class.presentation-mode": "presentationMode === true" } }, ngImport: i0, template: `
40556
40720
  <span class="pfx-avatar__inner"
40557
40721
  [attr.aria-hidden]="presentationMode ? 'true' : null"
40558
40722
  [ngStyle]="resolvedStyle()"
@@ -40589,7 +40753,10 @@ class MaterialAvatarComponent {
40589
40753
  <span class="pfx-avatar__custom"><ng-content></ng-content></span>
40590
40754
  }
40591
40755
  </span>
40592
- `, isInline: true, styles: [":host{--pfx-avatar-size: 40px;--pfx-avatar-radius-full: 9999px;--pfx-avatar-radius-lg: 16px;--pfx-avatar-radius-md: 12px;--pfx-avatar-radius-sm: 8px;--pfx-avatar-border-w: 1px;--pfx-avatar-border-color: var(--md-sys-color-outline-variant);--pfx-avatar-bg: var(--md-sys-color-primary);--pfx-avatar-fg: var(--md-sys-color-on-primary);display:inline-flex;align-items:center;justify-content:center;vertical-align:middle}.pfx-avatar__inner{position:relative;box-sizing:border-box;width:var(--pfx-avatar-size);height:var(--pfx-avatar-size);border-radius:var(--_pfx-avatar-radius, var(--pfx-avatar-radius-full));display:inline-flex;align-items:center;justify-content:center;overflow:hidden;-webkit-user-select:none;user-select:none;line-height:1;background:var(--_pfx-avatar-bg, var(--pfx-avatar-bg));color:var(--_pfx-avatar-fg, var(--pfx-avatar-fg));border:var(--_pfx-avatar-border, 0)}:host(.fill-outline) .pfx-avatar__inner{background:transparent;color:var(--_pfx-avatar-fg, var(--pfx-avatar-fg));border:var(--pfx-avatar-border-w) solid var(--pfx-avatar-border-color)}:host(.has-border) .pfx-avatar__inner{border:var(--pfx-avatar-border-w) solid var(--pfx-avatar-border-color)}:host(.size-xsmall){--pfx-avatar-size: 20px}:host(.size-small){--pfx-avatar-size: 24px}:host(.size-medium){--pfx-avatar-size: 40px}:host(.size-large){--pfx-avatar-size: 56px}:host(.size-xlarge){--pfx-avatar-size: 72px}:host(.size-xxlarge){--pfx-avatar-size: 96px}:host(.size-none){--pfx-avatar-size: auto}:host(.rounded-full){--_pfx-avatar-radius: var(--pfx-avatar-radius-full)}:host(.rounded-large){--_pfx-avatar-radius: var(--pfx-avatar-radius-lg)}:host(.rounded-medium){--_pfx-avatar-radius: var(--pfx-avatar-radius-md)}:host(.rounded-small){--_pfx-avatar-radius: var(--pfx-avatar-radius-sm)}:host(.rounded-none){--_pfx-avatar-radius: 0}.pfx-avatar__img{width:100%;height:100%;object-fit:cover;display:block}.pfx-avatar__icon,.pfx-avatar__icon-svg,.pfx-avatar__icon-font{font-size:calc(var(--pfx-avatar-size) * .6);width:calc(var(--pfx-avatar-size) * .6);height:calc(var(--pfx-avatar-size) * .6);display:inline-flex;align-items:center;justify-content:center}.pfx-avatar__initials{font-weight:600;letter-spacing:.02em;font-size:calc(var(--pfx-avatar-size) * .4);line-height:1}.pfx-avatar__custom{display:inline-flex;align-items:center;justify-content:center;font-size:calc(var(--pfx-avatar-size) * .6);line-height:1;width:100%;height:100%}.pfx-avatar__custom img{width:100%;height:100%;object-fit:cover;display:block}:host-context(.pfx-field-shell){display:flex;width:100%;align-items:center;justify-content:flex-start;padding:6px 0;min-height:var( --pfx-field-shell-min-height, calc(var(--pfx-field-min-height, 56px) + var(--pfx-subscript-min-h, 22px)) )}:host-context(.pfx-field-shell) .pfx-avatar__inner{flex-shrink:0}:host(.theme-primary){--_pfx-avatar-bg: var(--md-sys-color-primary);--_pfx-avatar-fg: var(--md-sys-color-on-primary)}:host(.theme-secondary){--_pfx-avatar-bg: var(--md-sys-color-secondary);--_pfx-avatar-fg: var(--md-sys-color-on-secondary)}:host(.theme-tertiary){--_pfx-avatar-bg: var(--md-sys-color-tertiary);--_pfx-avatar-fg: var(--md-sys-color-on-tertiary)}:host(.theme-base){--_pfx-avatar-bg: var(--md-sys-color-surface-variant);--_pfx-avatar-fg: var(--md-sys-color-on-surface-variant)}:host(.theme-info){--_pfx-avatar-bg: var(--md-sys-color-primary-container);--_pfx-avatar-fg: var(--md-sys-color-on-primary-container)}:host(.theme-success){--_pfx-avatar-bg: var(--md-sys-color-secondary-container);--_pfx-avatar-fg: var(--md-sys-color-on-secondary-container)}:host(.theme-warning){--_pfx-avatar-bg: var(--md-sys-color-tertiary-container);--_pfx-avatar-fg: var(--md-sys-color-on-tertiary-container)}:host(.theme-error){--_pfx-avatar-bg: var(--md-sys-color-error-container);--_pfx-avatar-fg: var(--md-sys-color-on-error-container)}:host(.theme-dark){--_pfx-avatar-bg: var(--md-sys-color-surface);--_pfx-avatar-fg: var(--md-sys-color-on-surface)}:host(.theme-light){--_pfx-avatar-bg: var(--md-sys-color-surface);--_pfx-avatar-fg: var(--md-sys-color-on-surface)}:host(.theme-inverse){--_pfx-avatar-bg: var(--md-sys-color-on-surface);--_pfx-avatar-fg: var(--md-sys-color-surface)}:host(.theme-none){--_pfx-avatar-bg: transparent;--_pfx-avatar-fg: inherit}:host(.fill-none) .pfx-avatar__inner{background:none;color:inherit;border:0}:host(.size-none) .pfx-avatar__inner{width:auto;height:auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { 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"] }] });
40756
+ @if (resolvedHint()) {
40757
+ <span class="pfx-avatar__hint" [attr.id]="hintId()">{{ resolvedHint() }}</span>
40758
+ }
40759
+ `, isInline: true, styles: [":host{--pfx-avatar-size: 40px;--pfx-avatar-radius-full: 9999px;--pfx-avatar-radius-lg: 16px;--pfx-avatar-radius-md: 12px;--pfx-avatar-radius-sm: 8px;--pfx-avatar-border-w: 1px;--pfx-avatar-border-color: var(--md-sys-color-outline-variant);--pfx-avatar-bg: var(--md-sys-color-primary);--pfx-avatar-fg: var(--md-sys-color-on-primary);display:inline-flex;align-items:center;justify-content:center;vertical-align:middle}.pfx-avatar__inner{position:relative;box-sizing:border-box;width:var(--pfx-avatar-size);height:var(--pfx-avatar-size);border-radius:var(--_pfx-avatar-radius, var(--pfx-avatar-radius-full));display:inline-flex;align-items:center;justify-content:center;overflow:hidden;-webkit-user-select:none;user-select:none;line-height:1;background:var(--_pfx-avatar-bg, var(--pfx-avatar-bg));color:var(--_pfx-avatar-fg, var(--pfx-avatar-fg));border:var(--_pfx-avatar-border, 0)}:host(.fill-outline) .pfx-avatar__inner{background:transparent;color:var(--_pfx-avatar-fg, var(--pfx-avatar-fg));border:var(--pfx-avatar-border-w) solid var(--pfx-avatar-border-color)}:host(.has-border) .pfx-avatar__inner{border:var(--pfx-avatar-border-w) solid var(--pfx-avatar-border-color)}:host(.size-xsmall){--pfx-avatar-size: 20px}:host(.size-small){--pfx-avatar-size: 24px}:host(.size-medium){--pfx-avatar-size: 40px}:host(.size-large){--pfx-avatar-size: 56px}:host(.size-xlarge){--pfx-avatar-size: 72px}:host(.size-xxlarge){--pfx-avatar-size: 96px}:host(.size-none){--pfx-avatar-size: auto}:host(.rounded-full){--_pfx-avatar-radius: var(--pfx-avatar-radius-full)}:host(.rounded-large){--_pfx-avatar-radius: var(--pfx-avatar-radius-lg)}:host(.rounded-medium){--_pfx-avatar-radius: var(--pfx-avatar-radius-md)}:host(.rounded-small){--_pfx-avatar-radius: var(--pfx-avatar-radius-sm)}:host(.rounded-none){--_pfx-avatar-radius: 0}.pfx-avatar__img{width:100%;height:100%;object-fit:cover;display:block}.pfx-avatar__icon,.pfx-avatar__icon-svg,.pfx-avatar__icon-font{font-size:calc(var(--pfx-avatar-size) * .6);width:calc(var(--pfx-avatar-size) * .6);height:calc(var(--pfx-avatar-size) * .6);display:inline-flex;align-items:center;justify-content:center}.pfx-avatar__initials{font-weight:600;letter-spacing:.02em;font-size:calc(var(--pfx-avatar-size) * .4);line-height:1}.pfx-avatar__custom{display:inline-flex;align-items:center;justify-content:center;font-size:calc(var(--pfx-avatar-size) * .6);line-height:1;width:100%;height:100%}.pfx-avatar__custom img{width:100%;height:100%;object-fit:cover;display:block}.pfx-avatar__hint{display:block;margin-top:6px;color:var(--md-sys-color-on-surface-variant, rgba(0, 0, 0, .6));font-size:12px;line-height:1.4}:host-context(.pfx-field-shell){display:flex;flex-direction:column;width:100%;align-items:flex-start;justify-content:flex-start;padding:6px 0;min-height:var( --pfx-field-shell-min-height, calc(var(--pfx-field-min-height, 56px) + var(--pfx-subscript-min-h, 22px)) )}:host-context(.pfx-field-shell) .pfx-avatar__inner{flex-shrink:0}:host(.theme-primary){--_pfx-avatar-bg: var(--md-sys-color-primary);--_pfx-avatar-fg: var(--md-sys-color-on-primary)}:host(.theme-secondary){--_pfx-avatar-bg: var(--md-sys-color-secondary);--_pfx-avatar-fg: var(--md-sys-color-on-secondary)}:host(.theme-tertiary){--_pfx-avatar-bg: var(--md-sys-color-tertiary);--_pfx-avatar-fg: var(--md-sys-color-on-tertiary)}:host(.theme-base){--_pfx-avatar-bg: var(--md-sys-color-surface-variant);--_pfx-avatar-fg: var(--md-sys-color-on-surface-variant)}:host(.theme-info){--_pfx-avatar-bg: var(--md-sys-color-primary-container);--_pfx-avatar-fg: var(--md-sys-color-on-primary-container)}:host(.theme-success){--_pfx-avatar-bg: var(--md-sys-color-secondary-container);--_pfx-avatar-fg: var(--md-sys-color-on-secondary-container)}:host(.theme-warning){--_pfx-avatar-bg: var(--md-sys-color-tertiary-container);--_pfx-avatar-fg: var(--md-sys-color-on-tertiary-container)}:host(.theme-error){--_pfx-avatar-bg: var(--md-sys-color-error-container);--_pfx-avatar-fg: var(--md-sys-color-on-error-container)}:host(.theme-dark){--_pfx-avatar-bg: var(--md-sys-color-surface);--_pfx-avatar-fg: var(--md-sys-color-on-surface)}:host(.theme-light){--_pfx-avatar-bg: var(--md-sys-color-surface);--_pfx-avatar-fg: var(--md-sys-color-on-surface)}:host(.theme-inverse){--_pfx-avatar-bg: var(--md-sys-color-on-surface);--_pfx-avatar-fg: var(--md-sys-color-surface)}:host(.theme-none){--_pfx-avatar-bg: transparent;--_pfx-avatar-fg: inherit}:host(.fill-none) .pfx-avatar__inner{background:none;color:inherit;border:0}:host(.size-none) .pfx-avatar__inner{width:auto;height:auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { 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"] }] });
40593
40760
  }
40594
40761
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: MaterialAvatarComponent, decorators: [{
40595
40762
  type: Component,
@@ -40599,6 +40766,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
40599
40766
  '[attr.aria-hidden]': 'visible ? null : "true"',
40600
40767
  '[attr.role]': '"img"',
40601
40768
  '[attr.aria-label]': 'computedAriaLabel() || null',
40769
+ '[attr.aria-describedby]': 'hintId()',
40602
40770
  '[attr.data-field-type]': '"avatar"',
40603
40771
  '[attr.data-field-name]': 'metadata()?.name',
40604
40772
  '[attr.data-component-id]': 'componentId()',
@@ -40642,7 +40810,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
40642
40810
  <span class="pfx-avatar__custom"><ng-content></ng-content></span>
40643
40811
  }
40644
40812
  </span>
40645
- `, styles: [":host{--pfx-avatar-size: 40px;--pfx-avatar-radius-full: 9999px;--pfx-avatar-radius-lg: 16px;--pfx-avatar-radius-md: 12px;--pfx-avatar-radius-sm: 8px;--pfx-avatar-border-w: 1px;--pfx-avatar-border-color: var(--md-sys-color-outline-variant);--pfx-avatar-bg: var(--md-sys-color-primary);--pfx-avatar-fg: var(--md-sys-color-on-primary);display:inline-flex;align-items:center;justify-content:center;vertical-align:middle}.pfx-avatar__inner{position:relative;box-sizing:border-box;width:var(--pfx-avatar-size);height:var(--pfx-avatar-size);border-radius:var(--_pfx-avatar-radius, var(--pfx-avatar-radius-full));display:inline-flex;align-items:center;justify-content:center;overflow:hidden;-webkit-user-select:none;user-select:none;line-height:1;background:var(--_pfx-avatar-bg, var(--pfx-avatar-bg));color:var(--_pfx-avatar-fg, var(--pfx-avatar-fg));border:var(--_pfx-avatar-border, 0)}:host(.fill-outline) .pfx-avatar__inner{background:transparent;color:var(--_pfx-avatar-fg, var(--pfx-avatar-fg));border:var(--pfx-avatar-border-w) solid var(--pfx-avatar-border-color)}:host(.has-border) .pfx-avatar__inner{border:var(--pfx-avatar-border-w) solid var(--pfx-avatar-border-color)}:host(.size-xsmall){--pfx-avatar-size: 20px}:host(.size-small){--pfx-avatar-size: 24px}:host(.size-medium){--pfx-avatar-size: 40px}:host(.size-large){--pfx-avatar-size: 56px}:host(.size-xlarge){--pfx-avatar-size: 72px}:host(.size-xxlarge){--pfx-avatar-size: 96px}:host(.size-none){--pfx-avatar-size: auto}:host(.rounded-full){--_pfx-avatar-radius: var(--pfx-avatar-radius-full)}:host(.rounded-large){--_pfx-avatar-radius: var(--pfx-avatar-radius-lg)}:host(.rounded-medium){--_pfx-avatar-radius: var(--pfx-avatar-radius-md)}:host(.rounded-small){--_pfx-avatar-radius: var(--pfx-avatar-radius-sm)}:host(.rounded-none){--_pfx-avatar-radius: 0}.pfx-avatar__img{width:100%;height:100%;object-fit:cover;display:block}.pfx-avatar__icon,.pfx-avatar__icon-svg,.pfx-avatar__icon-font{font-size:calc(var(--pfx-avatar-size) * .6);width:calc(var(--pfx-avatar-size) * .6);height:calc(var(--pfx-avatar-size) * .6);display:inline-flex;align-items:center;justify-content:center}.pfx-avatar__initials{font-weight:600;letter-spacing:.02em;font-size:calc(var(--pfx-avatar-size) * .4);line-height:1}.pfx-avatar__custom{display:inline-flex;align-items:center;justify-content:center;font-size:calc(var(--pfx-avatar-size) * .6);line-height:1;width:100%;height:100%}.pfx-avatar__custom img{width:100%;height:100%;object-fit:cover;display:block}:host-context(.pfx-field-shell){display:flex;width:100%;align-items:center;justify-content:flex-start;padding:6px 0;min-height:var( --pfx-field-shell-min-height, calc(var(--pfx-field-min-height, 56px) + var(--pfx-subscript-min-h, 22px)) )}:host-context(.pfx-field-shell) .pfx-avatar__inner{flex-shrink:0}:host(.theme-primary){--_pfx-avatar-bg: var(--md-sys-color-primary);--_pfx-avatar-fg: var(--md-sys-color-on-primary)}:host(.theme-secondary){--_pfx-avatar-bg: var(--md-sys-color-secondary);--_pfx-avatar-fg: var(--md-sys-color-on-secondary)}:host(.theme-tertiary){--_pfx-avatar-bg: var(--md-sys-color-tertiary);--_pfx-avatar-fg: var(--md-sys-color-on-tertiary)}:host(.theme-base){--_pfx-avatar-bg: var(--md-sys-color-surface-variant);--_pfx-avatar-fg: var(--md-sys-color-on-surface-variant)}:host(.theme-info){--_pfx-avatar-bg: var(--md-sys-color-primary-container);--_pfx-avatar-fg: var(--md-sys-color-on-primary-container)}:host(.theme-success){--_pfx-avatar-bg: var(--md-sys-color-secondary-container);--_pfx-avatar-fg: var(--md-sys-color-on-secondary-container)}:host(.theme-warning){--_pfx-avatar-bg: var(--md-sys-color-tertiary-container);--_pfx-avatar-fg: var(--md-sys-color-on-tertiary-container)}:host(.theme-error){--_pfx-avatar-bg: var(--md-sys-color-error-container);--_pfx-avatar-fg: var(--md-sys-color-on-error-container)}:host(.theme-dark){--_pfx-avatar-bg: var(--md-sys-color-surface);--_pfx-avatar-fg: var(--md-sys-color-on-surface)}:host(.theme-light){--_pfx-avatar-bg: var(--md-sys-color-surface);--_pfx-avatar-fg: var(--md-sys-color-on-surface)}:host(.theme-inverse){--_pfx-avatar-bg: var(--md-sys-color-on-surface);--_pfx-avatar-fg: var(--md-sys-color-surface)}:host(.theme-none){--_pfx-avatar-bg: transparent;--_pfx-avatar-fg: inherit}:host(.fill-none) .pfx-avatar__inner{background:none;color:inherit;border:0}:host(.size-none) .pfx-avatar__inner{width:auto;height:auto}\n"] }]
40813
+ @if (resolvedHint()) {
40814
+ <span class="pfx-avatar__hint" [attr.id]="hintId()">{{ resolvedHint() }}</span>
40815
+ }
40816
+ `, styles: [":host{--pfx-avatar-size: 40px;--pfx-avatar-radius-full: 9999px;--pfx-avatar-radius-lg: 16px;--pfx-avatar-radius-md: 12px;--pfx-avatar-radius-sm: 8px;--pfx-avatar-border-w: 1px;--pfx-avatar-border-color: var(--md-sys-color-outline-variant);--pfx-avatar-bg: var(--md-sys-color-primary);--pfx-avatar-fg: var(--md-sys-color-on-primary);display:inline-flex;align-items:center;justify-content:center;vertical-align:middle}.pfx-avatar__inner{position:relative;box-sizing:border-box;width:var(--pfx-avatar-size);height:var(--pfx-avatar-size);border-radius:var(--_pfx-avatar-radius, var(--pfx-avatar-radius-full));display:inline-flex;align-items:center;justify-content:center;overflow:hidden;-webkit-user-select:none;user-select:none;line-height:1;background:var(--_pfx-avatar-bg, var(--pfx-avatar-bg));color:var(--_pfx-avatar-fg, var(--pfx-avatar-fg));border:var(--_pfx-avatar-border, 0)}:host(.fill-outline) .pfx-avatar__inner{background:transparent;color:var(--_pfx-avatar-fg, var(--pfx-avatar-fg));border:var(--pfx-avatar-border-w) solid var(--pfx-avatar-border-color)}:host(.has-border) .pfx-avatar__inner{border:var(--pfx-avatar-border-w) solid var(--pfx-avatar-border-color)}:host(.size-xsmall){--pfx-avatar-size: 20px}:host(.size-small){--pfx-avatar-size: 24px}:host(.size-medium){--pfx-avatar-size: 40px}:host(.size-large){--pfx-avatar-size: 56px}:host(.size-xlarge){--pfx-avatar-size: 72px}:host(.size-xxlarge){--pfx-avatar-size: 96px}:host(.size-none){--pfx-avatar-size: auto}:host(.rounded-full){--_pfx-avatar-radius: var(--pfx-avatar-radius-full)}:host(.rounded-large){--_pfx-avatar-radius: var(--pfx-avatar-radius-lg)}:host(.rounded-medium){--_pfx-avatar-radius: var(--pfx-avatar-radius-md)}:host(.rounded-small){--_pfx-avatar-radius: var(--pfx-avatar-radius-sm)}:host(.rounded-none){--_pfx-avatar-radius: 0}.pfx-avatar__img{width:100%;height:100%;object-fit:cover;display:block}.pfx-avatar__icon,.pfx-avatar__icon-svg,.pfx-avatar__icon-font{font-size:calc(var(--pfx-avatar-size) * .6);width:calc(var(--pfx-avatar-size) * .6);height:calc(var(--pfx-avatar-size) * .6);display:inline-flex;align-items:center;justify-content:center}.pfx-avatar__initials{font-weight:600;letter-spacing:.02em;font-size:calc(var(--pfx-avatar-size) * .4);line-height:1}.pfx-avatar__custom{display:inline-flex;align-items:center;justify-content:center;font-size:calc(var(--pfx-avatar-size) * .6);line-height:1;width:100%;height:100%}.pfx-avatar__custom img{width:100%;height:100%;object-fit:cover;display:block}.pfx-avatar__hint{display:block;margin-top:6px;color:var(--md-sys-color-on-surface-variant, rgba(0, 0, 0, .6));font-size:12px;line-height:1.4}:host-context(.pfx-field-shell){display:flex;flex-direction:column;width:100%;align-items:flex-start;justify-content:flex-start;padding:6px 0;min-height:var( --pfx-field-shell-min-height, calc(var(--pfx-field-min-height, 56px) + var(--pfx-subscript-min-h, 22px)) )}:host-context(.pfx-field-shell) .pfx-avatar__inner{flex-shrink:0}:host(.theme-primary){--_pfx-avatar-bg: var(--md-sys-color-primary);--_pfx-avatar-fg: var(--md-sys-color-on-primary)}:host(.theme-secondary){--_pfx-avatar-bg: var(--md-sys-color-secondary);--_pfx-avatar-fg: var(--md-sys-color-on-secondary)}:host(.theme-tertiary){--_pfx-avatar-bg: var(--md-sys-color-tertiary);--_pfx-avatar-fg: var(--md-sys-color-on-tertiary)}:host(.theme-base){--_pfx-avatar-bg: var(--md-sys-color-surface-variant);--_pfx-avatar-fg: var(--md-sys-color-on-surface-variant)}:host(.theme-info){--_pfx-avatar-bg: var(--md-sys-color-primary-container);--_pfx-avatar-fg: var(--md-sys-color-on-primary-container)}:host(.theme-success){--_pfx-avatar-bg: var(--md-sys-color-secondary-container);--_pfx-avatar-fg: var(--md-sys-color-on-secondary-container)}:host(.theme-warning){--_pfx-avatar-bg: var(--md-sys-color-tertiary-container);--_pfx-avatar-fg: var(--md-sys-color-on-tertiary-container)}:host(.theme-error){--_pfx-avatar-bg: var(--md-sys-color-error-container);--_pfx-avatar-fg: var(--md-sys-color-on-error-container)}:host(.theme-dark){--_pfx-avatar-bg: var(--md-sys-color-surface);--_pfx-avatar-fg: var(--md-sys-color-on-surface)}:host(.theme-light){--_pfx-avatar-bg: var(--md-sys-color-surface);--_pfx-avatar-fg: var(--md-sys-color-on-surface)}:host(.theme-inverse){--_pfx-avatar-bg: var(--md-sys-color-on-surface);--_pfx-avatar-fg: var(--md-sys-color-surface)}:host(.theme-none){--_pfx-avatar-bg: transparent;--_pfx-avatar-fg: inherit}:host(.fill-none) .pfx-avatar__inner{background:none;color:inherit;border:0}:host(.size-none) .pfx-avatar__inner{width:auto;height:auto}\n"] }]
40646
40817
  }], propDecorators: { imageSrc: [{
40647
40818
  type: Input
40648
40819
  }], imageAlt: [{
@@ -41690,12 +41861,28 @@ class MaterialFileUploadComponent extends SimpleBaseInputComponent {
41690
41861
  const { placeholder: _placeholder, ...rest } = metadata;
41691
41862
  this.setMetadata(rest);
41692
41863
  }
41864
+ fileAccept() {
41865
+ const accept = this.metadataRecord()?.['accept'];
41866
+ return typeof accept === 'string' && accept.trim().length ? accept.trim() : null;
41867
+ }
41868
+ allowsMultiple() {
41869
+ return this.metadataRecord()?.['multiple'] === true;
41870
+ }
41871
+ isInteractionDisabled() {
41872
+ return this.disabledMode || this.readonlyMode || this.presentationMode;
41873
+ }
41693
41874
  /**
41694
41875
  * CSS classes specific to the file upload wrapper.
41695
41876
  */
41696
41877
  getSpecificCssClasses() {
41697
41878
  return ['pdx-material-file-upload'];
41698
41879
  }
41880
+ metadataRecord() {
41881
+ const metadata = this.metadata();
41882
+ return metadata && typeof metadata === 'object'
41883
+ ? metadata
41884
+ : null;
41885
+ }
41699
41886
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: MaterialFileUploadComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
41700
41887
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: MaterialFileUploadComponent, isStandalone: true, selector: "pdx-material-file-upload", inputs: { readonlyMode: "readonlyMode", disabledMode: "disabledMode", visible: "visible", presentationMode: "presentationMode" }, host: { properties: { "class": "componentCssClasses()", "class.praxis-disabled": "disabledMode", "style.display": "visible ? null : \"none\"", "attr.aria-hidden": "visible ? null : \"true\"", "attr.data-field-type": "\"file-upload\"", "attr.data-field-name": "metadata()?.name", "attr.data-component-id": "componentId()" } }, providers: [
41701
41888
  {
@@ -41715,6 +41902,9 @@ class MaterialFileUploadComponent extends SimpleBaseInputComponent {
41715
41902
  [attr.id]="componentId()"
41716
41903
  type="file"
41717
41904
  (change)="onFileSelected($event)"
41905
+ [attr.accept]="fileAccept()"
41906
+ [attr.multiple]="allowsMultiple() ? '' : null"
41907
+ [disabled]="isInteractionDisabled()"
41718
41908
  [attr.aria-disabled]="disabledMode ? 'true' : null"
41719
41909
  />
41720
41910
  @if (hasValidationError()) {
@@ -41744,6 +41934,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
41744
41934
  [attr.id]="componentId()"
41745
41935
  type="file"
41746
41936
  (change)="onFileSelected($event)"
41937
+ [attr.accept]="fileAccept()"
41938
+ [attr.multiple]="allowsMultiple() ? '' : null"
41939
+ [disabled]="isInteractionDisabled()"
41747
41940
  [attr.aria-disabled]="disabledMode ? 'true' : null"
41748
41941
  />
41749
41942
  @if (hasValidationError()) {
@@ -45599,6 +45792,9 @@ class MaterialTransferListComponent extends SimpleBaseSelectComponent {
45599
45792
  this.updateListsFromValue();
45600
45793
  });
45601
45794
  }
45795
+ setInputMetadata(metadata) {
45796
+ this.setSelectMetadata(metadata);
45797
+ }
45602
45798
  setSelectMetadata(metadata) {
45603
45799
  const source = metadata.transferOptions ?? metadata.options;
45604
45800
  const mapped = source?.map((o) => ({
@@ -45861,7 +46057,11 @@ class MaterialTransferListComponent extends SimpleBaseSelectComponent {
45861
46057
  </mat-selection-list>
45862
46058
  </div>
45863
46059
  </div>
45864
- `, isInline: true, styles: [":host{display:block;width:100%}.pdx-transfer-list{width:100%;min-height:56px;padding:4px 0}.pdx-transfer-column{width:100%}.pdx-transfer-column mat-form-field{width:100%}.pdx-transfer-actions{display:flex;flex-direction:column;gap:4px;align-items:center;justify-content:center;padding:0 8px}@media(min-width:640px){.pdx-transfer-list{display:grid;grid-template-columns:1fr auto 1fr;gap:12px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i2$5.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i2$5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.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: MatButtonModule }, { kind: "component", type: i1$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i3$6.MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i3$6.MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "checkboxPosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] });
46060
+
46061
+ @if (metadata()?.hint) {
46062
+ <div class="pdx-transfer-hint">{{ metadata()!.hint }}</div>
46063
+ }
46064
+ `, isInline: true, styles: [":host{display:block;width:100%}.pdx-transfer-list{width:100%;min-height:56px;padding:4px 0}.pdx-transfer-column{width:100%}.pdx-transfer-column mat-form-field{width:100%}.pdx-transfer-actions{display:flex;flex-direction:column;gap:4px;align-items:center;justify-content:center;padding:0 8px}.pdx-transfer-hint{margin-top:4px;color:var(--md-sys-color-on-surface-variant, rgba(0, 0, 0, .6));font-size:12px;line-height:1.4}@media(min-width:640px){.pdx-transfer-list{display:grid;grid-template-columns:1fr auto 1fr;gap:12px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i2$5.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i2$5.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i2.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: MatButtonModule }, { kind: "component", type: i1$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i3$6.MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }, { kind: "component", type: i3$6.MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "checkboxPosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] });
45865
46065
  }
45866
46066
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: MaterialTransferListComponent, decorators: [{
45867
46067
  type: Component,
@@ -45993,6 +46193,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
45993
46193
  </mat-selection-list>
45994
46194
  </div>
45995
46195
  </div>
46196
+
46197
+ @if (metadata()?.hint) {
46198
+ <div class="pdx-transfer-hint">{{ metadata()!.hint }}</div>
46199
+ }
45996
46200
  `, providers: [
45997
46201
  {
45998
46202
  provide: NG_VALUE_ACCESSOR,
@@ -46007,7 +46211,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
46007
46211
  '[attr.data-field-type]': '"transfer-list"',
46008
46212
  '[attr.data-field-name]': 'metadata()?.name',
46009
46213
  '[attr.data-component-id]': 'componentId()',
46010
- }, styles: [":host{display:block;width:100%}.pdx-transfer-list{width:100%;min-height:56px;padding:4px 0}.pdx-transfer-column{width:100%}.pdx-transfer-column mat-form-field{width:100%}.pdx-transfer-actions{display:flex;flex-direction:column;gap:4px;align-items:center;justify-content:center;padding:0 8px}@media(min-width:640px){.pdx-transfer-list{display:grid;grid-template-columns:1fr auto 1fr;gap:12px}}\n"] }]
46214
+ }, styles: [":host{display:block;width:100%}.pdx-transfer-list{width:100%;min-height:56px;padding:4px 0}.pdx-transfer-column{width:100%}.pdx-transfer-column mat-form-field{width:100%}.pdx-transfer-actions{display:flex;flex-direction:column;gap:4px;align-items:center;justify-content:center;padding:0 8px}.pdx-transfer-hint{margin-top:4px;color:var(--md-sys-color-on-surface-variant, rgba(0, 0, 0, .6));font-size:12px;line-height:1.4}@media(min-width:640px){.pdx-transfer-list{display:grid;grid-template-columns:1fr auto 1fr;gap:12px}}\n"] }]
46011
46215
  }], ctorParameters: () => [], propDecorators: { readonlyMode: [{
46012
46216
  type: Input
46013
46217
  }], disabledMode: [{
@@ -48009,6 +48213,13 @@ const DYNAMIC_FIELD_READONLY_STATE_RECIPE = {
48009
48213
  supported: true,
48010
48214
  metadataPatch: { readonly: true },
48011
48215
  };
48216
+ const DYNAMIC_FIELD_PRESENTATION_STATE_RECIPE = {
48217
+ state: 'presentation',
48218
+ label: 'Presentation',
48219
+ supported: true,
48220
+ metadataPatch: { presentationMode: true },
48221
+ note: 'Uses the canonical presentation pipeline instead of a disabled or readonly input shell.',
48222
+ };
48012
48223
  const DYNAMIC_FIELD_ERROR_STATE_RECIPE = {
48013
48224
  state: 'error',
48014
48225
  label: 'Error',
@@ -48027,9 +48238,21 @@ const DYNAMIC_FIELD_BASE_STATE_RECIPES = [
48027
48238
  DYNAMIC_FIELD_FILLED_STATE_RECIPE,
48028
48239
  DYNAMIC_FIELD_DISABLED_STATE_RECIPE,
48029
48240
  DYNAMIC_FIELD_READONLY_STATE_RECIPE,
48241
+ DYNAMIC_FIELD_PRESENTATION_STATE_RECIPE,
48030
48242
  DYNAMIC_FIELD_ERROR_STATE_RECIPE,
48031
48243
  ];
48244
+ function mergeStateRecipes(overrides, supportedStates) {
48245
+ const overrideMap = new Map((overrides ?? []).map((state) => [state.state, state]));
48246
+ return DYNAMIC_FIELD_BASE_STATE_RECIPES
48247
+ .filter((state) => supportedStates.has(state.state))
48248
+ .map((state) => ({
48249
+ ...state,
48250
+ ...(overrideMap.get(state.state) ?? {}),
48251
+ }));
48252
+ }
48032
48253
  function createDynamicFieldPreviewRecipe(input) {
48254
+ const supportedStates = new Set(input.supportedStates ?? DYNAMIC_FIELD_BASE_STATE_RECIPES.map((state) => state.state));
48255
+ const states = mergeStateRecipes(input.states, supportedStates);
48033
48256
  return {
48034
48257
  recipeId: input.recipeId,
48035
48258
  fieldName: input.fieldName,
@@ -48041,7 +48264,7 @@ function createDynamicFieldPreviewRecipe(input) {
48041
48264
  controlType: input.controlType,
48042
48265
  ...(input.metadata ?? {}),
48043
48266
  },
48044
- states: input.states ? [...input.states] : [...DYNAMIC_FIELD_BASE_STATE_RECIPES],
48267
+ states,
48045
48268
  };
48046
48269
  }
48047
48270
 
@@ -48064,7 +48287,7 @@ function jsonApiPath(relativePath) {
48064
48287
  return `projects/praxis-dynamic-fields/src/lib/components/${relativePath}`;
48065
48288
  }
48066
48289
  function createEntry(input) {
48067
- const states = input.states ?? ['default', 'filled', 'disabled', 'readonly', 'error'];
48290
+ const states = input.states ?? ['default', 'filled', 'disabled', 'readonly', 'presentation', 'error'];
48068
48291
  return {
48069
48292
  id: input.id,
48070
48293
  controlType: input.controlType,
@@ -48095,6 +48318,7 @@ function createEntry(input) {
48095
48318
  description: input.description,
48096
48319
  metadata: input.metadata,
48097
48320
  states: input.stateRecipes,
48321
+ supportedStates: states,
48098
48322
  }),
48099
48323
  snippetRecipe: {
48100
48324
  language: input.snippetLanguage ?? 'json',
@@ -48106,6 +48330,15 @@ function createEntry(input) {
48106
48330
  themingNotes: input.themingNotes ?? DEFAULT_THEMING_NOTES,
48107
48331
  };
48108
48332
  }
48333
+ function createDefaultSeedRecipe(initialValue, note) {
48334
+ return {
48335
+ state: 'default',
48336
+ label: 'Default',
48337
+ supported: true,
48338
+ initialValue,
48339
+ note,
48340
+ };
48341
+ }
48109
48342
  const DYNAMIC_FIELDS_PLAYGROUND_CATALOG = [
48110
48343
  createEntry({
48111
48344
  id: 'text-input',
@@ -48121,6 +48354,9 @@ const DYNAMIC_FIELDS_PLAYGROUND_CATALOG = [
48121
48354
  dataSourceKind: 'local',
48122
48355
  apiPath: jsonApiPath('text-input/pdx-text-input.json-api.md'),
48123
48356
  metadata: { placeholder: 'Type here' },
48357
+ stateRecipes: [
48358
+ createDefaultSeedRecipe('Ana Souza', 'Seeded default preview to show immediate field affordance in the catalog.'),
48359
+ ],
48124
48360
  }),
48125
48361
  createEntry({
48126
48362
  id: 'email-input',
@@ -48255,6 +48491,9 @@ const DYNAMIC_FIELDS_PLAYGROUND_CATALOG = [
48255
48491
  dataSourceKind: 'local',
48256
48492
  apiPath: jsonApiPath('material-currency/pdx-material-currency.json-api.md'),
48257
48493
  metadata: { currency: 'BRL', locale: 'pt-BR' },
48494
+ stateRecipes: [
48495
+ createDefaultSeedRecipe(18450.75, 'Seeded default preview to expose formatted monetary rendering at first glance.'),
48496
+ ],
48258
48497
  }),
48259
48498
  createEntry({
48260
48499
  id: 'slider',
@@ -48359,6 +48598,9 @@ const DYNAMIC_FIELDS_PLAYGROUND_CATALOG = [
48359
48598
  avoidWhen: ['data unica'],
48360
48599
  dataSourceKind: 'local',
48361
48600
  apiPath: jsonApiPath('material-date-range/pdx-material-date-range.json-api.md'),
48601
+ stateRecipes: [
48602
+ createDefaultSeedRecipe({ startDate: '2026-03-01', endDate: '2026-03-23' }, 'Seeded default preview to demonstrate a complete temporal range without switching states.'),
48603
+ ],
48362
48604
  }),
48363
48605
  createEntry({
48364
48606
  id: 'datetime-local',
@@ -48482,6 +48724,9 @@ const DYNAMIC_FIELDS_PLAYGROUND_CATALOG = [
48482
48724
  { label: 'Paused', value: 'PAUSED' },
48483
48725
  ],
48484
48726
  },
48727
+ stateRecipes: [
48728
+ createDefaultSeedRecipe('ACTIVE', 'Seeded default preview to reveal selected-label rendering in the base card.'),
48729
+ ],
48485
48730
  }),
48486
48731
  createEntry({
48487
48732
  id: 'searchable-select',
@@ -48674,6 +48919,9 @@ const DYNAMIC_FIELDS_PLAYGROUND_CATALOG = [
48674
48919
  avoidWhen: ['mais de dois estados'],
48675
48920
  dataSourceKind: 'local',
48676
48921
  apiPath: jsonApiPath('material-slide-toggle/pdx-material-slide-toggle.json-api.md'),
48922
+ stateRecipes: [
48923
+ createDefaultSeedRecipe(true, 'Seeded default preview to show the canonical boolean-on state at a glance.'),
48924
+ ],
48677
48925
  }),
48678
48926
  createEntry({
48679
48927
  id: 'button-toggle',
@@ -48789,6 +49037,9 @@ const DYNAMIC_FIELDS_PLAYGROUND_CATALOG = [
48789
49037
  avoidWhen: ['texto longo', 'validacao complexa'],
48790
49038
  dataSourceKind: 'local',
48791
49039
  apiPath: jsonApiPath('inline-input/pdx-inline-input.json-api.md'),
49040
+ stateRecipes: [
49041
+ createDefaultSeedRecipe('Praxis', 'Seeded default preview to keep inline text examples informative from the first render.'),
49042
+ ],
48792
49043
  }),
48793
49044
  createEntry({
48794
49045
  id: 'inline-select',
@@ -48803,6 +49054,9 @@ const DYNAMIC_FIELDS_PLAYGROUND_CATALOG = [
48803
49054
  avoidWhen: ['lookup remoto grande'],
48804
49055
  dataSourceKind: 'mixed',
48805
49056
  apiPath: jsonApiPath('inline-select/pdx-inline-select.json-api.md'),
49057
+ stateRecipes: [
49058
+ createDefaultSeedRecipe('ALPHA', 'Seeded default preview to expose compact selected-pill rendering.'),
49059
+ ],
48806
49060
  }),
48807
49061
  createEntry({
48808
49062
  id: 'inline-searchable-select',
@@ -49000,6 +49254,9 @@ const DYNAMIC_FIELDS_PLAYGROUND_CATALOG = [
49000
49254
  avoidWhen: ['toolbar saturada ou data unica'],
49001
49255
  dataSourceKind: 'specialized',
49002
49256
  apiPath: jsonApiPath('inline-date-range/pdx-inline-date-range.json-api.md'),
49257
+ stateRecipes: [
49258
+ createDefaultSeedRecipe({ startDate: '2026-03-01', endDate: '2026-03-23' }, 'Seeded default preview to show a resolved inline range immediately.'),
49259
+ ],
49003
49260
  }),
49004
49261
  createEntry({
49005
49262
  id: 'inline-time',
@@ -49116,6 +49373,9 @@ const DYNAMIC_FIELDS_PLAYGROUND_CATALOG = [
49116
49373
  avoidWhen: ['false e null nao estao bem documentados no fluxo'],
49117
49374
  dataSourceKind: 'local',
49118
49375
  apiPath: jsonApiPath('inline-toggle/pdx-inline-toggle.json-api.md'),
49376
+ stateRecipes: [
49377
+ createDefaultSeedRecipe(true, 'Seeded default preview to show the compact boolean state in toolbar scenarios.'),
49378
+ ],
49119
49379
  }),
49120
49380
  ];
49121
49381
 
@@ -50952,5 +51212,5 @@ function supportsClearButtonControlType(controlType) {
50952
51212
  * Generated bundle index. Do not edit.
50953
51213
  */
50954
51214
 
50955
- export { ActionResolverService, 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, 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_READONLY_STATE_RECIPE, DateInputComponent, DateUtilsService, DatetimeLocalInputComponent, DynamicFieldLoaderDirective, EmailInputComponent, 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, OptionStore, PDX_COLOR_INPUT_COMPONENT_METADATA, PDX_COLOR_PICKER_COMPONENT_METADATA, PDX_DATETIME_LOCAL_INPUT_COMPONENT_METADATA, PDX_DATE_INPUT_COMPONENT_METADATA, PDX_EMAIL_INPUT_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_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_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_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_EN_US, PRAXIS_DYNAMIC_FIELDS_I18N, PRAXIS_DYNAMIC_FIELDS_LOGGER_BACKEND, PRAXIS_DYNAMIC_FIELDS_PT_BR, PRICE_RANGE_AI_CAPABILITIES, PasswordInputComponent, 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, bindDynamicFieldsLoggerBackendFromInjector, clearDynamicFieldsLoggerBackend, configureDynamicFieldsLogger, createDynamicFieldPreviewRecipe, createErrorStateMatcher, createPraxisDynamicFieldsI18nConfig, emitToDynamicFieldsLoggerBackend, enableDebugForComponent, getControlTypeCatalog, getErrorStateMatcherForField, inferErrorStateStrategy, initializeComponentSystem, initializeComponentSystemSync, isBaseDynamicFieldComponent, isLoadingCapableComponent, isValidJsonSchema, isValueBasedComponent, logger, mapJsonSchemaToFields, mapPropertyToFieldMetadata, normalizeFormMetadata, provideMaterialAvatarMetadata, providePraxisDynamicFields, providePraxisDynamicFieldsCore, providePraxisDynamicFieldsCoreNoDefaults, providePraxisDynamicFieldsI18n, providePraxisDynamicFieldsNoDefaults, resolvePraxisDynamicFieldsText, setDynamicFieldsLoggerBackend, silenceComponent, supportsClearButtonControlType };
51215
+ export { ActionResolverService, 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, 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, EmailInputComponent, 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, OptionStore, PDX_COLOR_INPUT_COMPONENT_METADATA, PDX_COLOR_PICKER_COMPONENT_METADATA, PDX_DATETIME_LOCAL_INPUT_COMPONENT_METADATA, PDX_DATE_INPUT_COMPONENT_METADATA, PDX_EMAIL_INPUT_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_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_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_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_EN_US, PRAXIS_DYNAMIC_FIELDS_I18N, PRAXIS_DYNAMIC_FIELDS_LOGGER_BACKEND, PRAXIS_DYNAMIC_FIELDS_PT_BR, PRICE_RANGE_AI_CAPABILITIES, PasswordInputComponent, 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, bindDynamicFieldsLoggerBackendFromInjector, clearDynamicFieldsLoggerBackend, configureDynamicFieldsLogger, createDynamicFieldPreviewRecipe, createErrorStateMatcher, createPraxisDynamicFieldsI18nConfig, emitToDynamicFieldsLoggerBackend, enableDebugForComponent, getControlTypeCatalog, getErrorStateMatcherForField, inferErrorStateStrategy, initializeComponentSystem, initializeComponentSystemSync, isBaseDynamicFieldComponent, isLoadingCapableComponent, isValidJsonSchema, isValueBasedComponent, logger, mapJsonSchemaToFields, mapPropertyToFieldMetadata, normalizeFormMetadata, provideMaterialAvatarMetadata, providePraxisDynamicFields, providePraxisDynamicFieldsCore, providePraxisDynamicFieldsCoreNoDefaults, providePraxisDynamicFieldsI18n, providePraxisDynamicFieldsNoDefaults, resolvePraxisDynamicFieldsText, setDynamicFieldsLoggerBackend, silenceComponent, supportsClearButtonControlType };
50956
51216
  //# sourceMappingURL=praxisui-dynamic-fields.mjs.map