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

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
  */
@@ -7337,9 +7450,33 @@ class MaterialButtonComponent extends SimpleBaseButtonComponent {
7337
7450
  // =============================================================================
7338
7451
  // LIFECYCLE
7339
7452
  // =============================================================================
7453
+ syncKeyboardShortcutEffect = effect((onCleanup) => {
7454
+ const shortcut = this.keyboardShortcut();
7455
+ if (!shortcut || !this.keyboardService) {
7456
+ return;
7457
+ }
7458
+ const unregister = this.keyboardService.registerShortcut(shortcut, {
7459
+ callback: () => { this.triggerAction(); },
7460
+ description: this.resolveDynamicFieldsMessage(null, 'button.shortcutDescription', 'Executar {{label}}', {
7461
+ label: this.metadata()?.label || this.tDynamicFields('button.defaultLabel', 'Button'),
7462
+ }),
7463
+ componentId: this.componentId(),
7464
+ priority: 10
7465
+ });
7466
+ this.unregisterShortcut = unregister;
7467
+ this.log('debug', 'Keyboard shortcut registered', { shortcut });
7468
+ onCleanup(() => {
7469
+ try {
7470
+ unregister?.();
7471
+ }
7472
+ catch { }
7473
+ if (this.unregisterShortcut === unregister) {
7474
+ this.unregisterShortcut = undefined;
7475
+ }
7476
+ });
7477
+ }, ...(ngDevMode ? [{ debugName: "syncKeyboardShortcutEffect" }] : []));
7340
7478
  ngOnInit() {
7341
7479
  super.ngOnInit();
7342
- this.setupKeyboardShortcuts();
7343
7480
  }
7344
7481
  ngOnDestroy() {
7345
7482
  super.ngOnDestroy();
@@ -7414,23 +7551,6 @@ class MaterialButtonComponent extends SimpleBaseButtonComponent {
7414
7551
  isIconOnly: this.isIconOnlyButton()
7415
7552
  };
7416
7553
  }
7417
- // =============================================================================
7418
- // MÉTODOS PRIVADOS
7419
- // =============================================================================
7420
- setupKeyboardShortcuts() {
7421
- const shortcut = this.keyboardShortcut();
7422
- if (shortcut && this.keyboardService) {
7423
- this.unregisterShortcut = this.keyboardService.registerShortcut(shortcut, {
7424
- callback: () => { this.triggerAction(); },
7425
- description: this.resolveDynamicFieldsMessage(null, 'button.shortcutDescription', 'Executar {{label}}', {
7426
- label: this.metadata()?.label || this.tDynamicFields('button.defaultLabel', 'Button'),
7427
- }),
7428
- componentId: this.componentId(),
7429
- priority: 10
7430
- });
7431
- this.log('debug', 'Keyboard shortcut registered', { shortcut });
7432
- }
7433
- }
7434
7554
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: MaterialButtonComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
7435
7555
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: MaterialButtonComponent, isStandalone: true, selector: "pdx-material-button", host: { properties: { "class": "componentCssClasses()", "attr.data-field-type": "\"button\"", "attr.data-field-name": "metadata()?.name", "attr.data-button-variant": "buttonVariant()", "attr.data-component-id": "componentId()" } }, usesInheritance: true, ngImport: i0, template: "<!-- Container principal do button -->\n<div class=\"pdx-button-container\" [class]=\"componentCssClasses()\">\n\n <!-- Button b\u00E1sico -->\n @if (buttonVariant() === 'basic') {\n <button\n mat-button\n [type]=\"buttonType()\"\n [color]=\"materialColor()\"\n [disabled]=\"isDisabled()\"\n [disableRipple]=\"shouldDisableRipple()\"\n [attr.aria-label]=\"metadata()?.label\"\n [attr.aria-describedby]=\"metadata()?.description ? componentId() + '-description' : null\"\n [matTooltip]=\"tooltipText()\"\n [matTooltipDisabled]=\"!tooltipText()\"\n matTooltipPosition=\"above\"\n (click)=\"handleClick($event)\"\n class=\"pdx-button-element\">\n \n @if (isLoading()) {\n <mat-spinner diameter=\"16\" class=\"pdx-button-spinner\"></mat-spinner>\n }\n \n @if (shouldShowIcon()) {\n <mat-icon class=\"pdx-button-icon\" [praxisIcon]=\"buttonIcon()\"></mat-icon>\n }\n \n <span class=\"pdx-button-text\">{{ buttonText() }}</span>\n </button>\n }\n\n <!-- Button raised -->\n @if (buttonVariant() === 'raised') {\n <button\n mat-raised-button\n [type]=\"buttonType()\"\n [color]=\"materialColor()\"\n [disabled]=\"isDisabled()\"\n [disableRipple]=\"shouldDisableRipple()\"\n [attr.aria-label]=\"metadata()?.label\"\n [attr.aria-describedby]=\"metadata()?.description ? componentId() + '-description' : null\"\n [matTooltip]=\"tooltipText()\"\n [matTooltipDisabled]=\"!tooltipText()\"\n matTooltipPosition=\"above\"\n (click)=\"handleClick($event)\"\n class=\"pdx-button-element\">\n \n @if (isLoading()) {\n <mat-spinner diameter=\"16\" class=\"pdx-button-spinner\"></mat-spinner>\n }\n \n @if (shouldShowIcon()) {\n <mat-icon class=\"pdx-button-icon\" [praxisIcon]=\"buttonIcon()\"></mat-icon>\n }\n \n <span class=\"pdx-button-text\">{{ buttonText() }}</span>\n </button>\n }\n\n <!-- Button stroked -->\n @if (buttonVariant() === 'stroked') {\n <button\n mat-stroked-button\n [type]=\"buttonType()\"\n [color]=\"materialColor()\"\n [disabled]=\"isDisabled()\"\n [disableRipple]=\"shouldDisableRipple()\"\n [attr.aria-label]=\"metadata()?.label\"\n [attr.aria-describedby]=\"metadata()?.description ? componentId() + '-description' : null\"\n [matTooltip]=\"tooltipText()\"\n [matTooltipDisabled]=\"!tooltipText()\"\n matTooltipPosition=\"above\"\n (click)=\"handleClick($event)\"\n class=\"pdx-button-element\">\n \n @if (isLoading()) {\n <mat-spinner diameter=\"16\" class=\"pdx-button-spinner\"></mat-spinner>\n }\n \n @if (shouldShowIcon()) {\n <mat-icon class=\"pdx-button-icon\" [praxisIcon]=\"buttonIcon()\"></mat-icon>\n }\n \n <span class=\"pdx-button-text\">{{ buttonText() }}</span>\n </button>\n }\n\n <!-- Button flat -->\n @if (buttonVariant() === 'flat') {\n <button\n mat-flat-button\n [type]=\"buttonType()\"\n [color]=\"materialColor()\"\n [disabled]=\"isDisabled()\"\n [disableRipple]=\"shouldDisableRipple()\"\n [attr.aria-label]=\"metadata()?.label\"\n [attr.aria-describedby]=\"metadata()?.description ? componentId() + '-description' : null\"\n [matTooltip]=\"tooltipText()\"\n [matTooltipDisabled]=\"!tooltipText()\"\n matTooltipPosition=\"above\"\n (click)=\"handleClick($event)\"\n class=\"pdx-button-element\">\n \n @if (isLoading()) {\n <mat-spinner diameter=\"16\" class=\"pdx-button-spinner\"></mat-spinner>\n }\n \n @if (shouldShowIcon()) {\n <mat-icon class=\"pdx-button-icon\" [praxisIcon]=\"buttonIcon()\"></mat-icon>\n }\n \n <span class=\"pdx-button-text\">{{ buttonText() }}</span>\n </button>\n }\n\n <!-- Button icon -->\n @if (buttonVariant() === 'icon') {\n <button\n mat-icon-button\n [type]=\"buttonType()\"\n [color]=\"materialColor()\"\n [disabled]=\"isDisabled()\"\n [disableRipple]=\"shouldDisableRipple()\"\n [attr.aria-label]=\"metadata()?.label || buttonIcon()\"\n [attr.aria-describedby]=\"metadata()?.description ? componentId() + '-description' : null\"\n [matTooltip]=\"tooltipText() || metadata()?.label\"\n [matTooltipDisabled]=\"!tooltipText() && !metadata()?.label\"\n matTooltipPosition=\"above\"\n (click)=\"handleClick($event)\"\n class=\"pdx-button-element\">\n \n @if (isLoading()) {\n <mat-spinner diameter=\"16\" class=\"pdx-button-spinner\"></mat-spinner>\n } @else {\n <mat-icon [praxisIcon]=\"buttonIcon() || 'mi:smart_button'\"></mat-icon>\n }\n </button>\n }\n\n <!-- Button FAB -->\n @if (buttonVariant() === 'fab') {\n <button\n mat-fab\n [type]=\"buttonType()\"\n [color]=\"materialColor()\"\n [disabled]=\"isDisabled()\"\n [disableRipple]=\"shouldDisableRipple()\"\n [attr.aria-label]=\"metadata()?.label || buttonIcon()\"\n [attr.aria-describedby]=\"metadata()?.description ? componentId() + '-description' : null\"\n [matTooltip]=\"tooltipText() || metadata()?.label\"\n [matTooltipDisabled]=\"!tooltipText() && !metadata()?.label\"\n matTooltipPosition=\"above\"\n (click)=\"handleClick($event)\"\n class=\"pdx-button-element\">\n \n @if (isLoading()) {\n <mat-spinner diameter=\"20\" class=\"pdx-button-spinner\"></mat-spinner>\n } @else {\n <mat-icon [praxisIcon]=\"buttonIcon() || 'add'\"></mat-icon>\n }\n </button>\n }\n\n <!-- Button Mini FAB -->\n @if (buttonVariant() === 'mini-fab') {\n <button\n mat-mini-fab\n [type]=\"buttonType()\"\n [color]=\"materialColor()\"\n [disabled]=\"isDisabled()\"\n [disableRipple]=\"shouldDisableRipple()\"\n [attr.aria-label]=\"metadata()?.label || buttonIcon()\"\n [attr.aria-describedby]=\"metadata()?.description ? componentId() + '-description' : null\"\n [matTooltip]=\"tooltipText() || metadata()?.label\"\n [matTooltipDisabled]=\"!tooltipText() && !metadata()?.label\"\n matTooltipPosition=\"above\"\n (click)=\"handleClick($event)\"\n class=\"pdx-button-element\">\n \n @if (isLoading()) {\n <mat-spinner diameter=\"16\" class=\"pdx-button-spinner\"></mat-spinner>\n } @else {\n <mat-icon [praxisIcon]=\"buttonIcon() || 'add'\"></mat-icon>\n }\n </button>\n }\n\n <!-- Descri\u00E7\u00E3o do bot\u00E3o (se dispon\u00EDvel) -->\n @if (metadata()?.description && !isIconOnlyButton()) {\n <div \n class=\"pdx-button-description\"\n [id]=\"componentId() + '-description'\">\n {{ metadata()?.description }}\n </div>\n }\n\n</div>\n\n<!-- Loading indicator para valida\u00E7\u00E3o ass\u00EDncrona -->\n@if (isLoading()) {\n <div class=\"pdx-validation-loading\" [attr.aria-label]=\"validationLoadingAriaLabel()\">\n <mat-icon class=\"pdx-loading-spinner\" [praxisIcon]=\"'mi:hourglass_empty'\"></mat-icon>\n <span class=\"pdx-sr-only\">{{ validationLoadingSrOnly() }}</span>\n </div>\n}\n\n<!-- Indicador de estado enterprise (debug) -->\n@if (false && metadata()?.security) {\n <div class=\"pdx-debug-info\">\n <small class=\"pdx-debug-security\">\n Security Level: {{ metadata()?.security?.securityLevel }}\n @if (metadata()?.security?.audit?.enabled) {\n | Audit: ON\n }\n | Clicks: {{ 0 }}\n @if (keyboardShortcut()) {\n | Shortcut: {{ keyboardShortcut() }}\n }\n </small>\n </div>\n}\n", styles: [".pdx-button-container{display:inline-block;position:relative}.pdx-button-container .pdx-button-element{position:relative;overflow:hidden;transition:all .2s ease}.pdx-button-container .pdx-button-element.pdx-button-with-icon .pdx-button-icon{margin-right:8px;font-size:18px;height:18px;width:18px}.pdx-button-container .pdx-button-element .pdx-button-spinner{margin-right:8px}.pdx-button-container .pdx-button-element .pdx-button-spinner:only-child{margin-right:0}.pdx-button-container .pdx-button-element .pdx-button-text{display:inline-block;vertical-align:middle}.pdx-button-container .pdx-button-element:disabled{cursor:not-allowed;opacity:.6}.pdx-button-container .pdx-button-element:focus{outline:2px solid var(--mat-focus-indicator-color, var(--md-sys-color-primary));outline-offset:2px}.pdx-button-container .pdx-button-description{margin-top:4px;font-size:12px;color:var(--mat-form-field-subscript-text-color);text-align:center;line-height:1.3}.pdx-button-container.pdx-button-loading .pdx-button-element{cursor:wait}.pdx-button-container.pdx-button-loading .pdx-button-element .pdx-button-text{opacity:.7}.pdx-button-container.pdx-button-pressed .pdx-button-element{transform:scale(.98);transition:transform .1s ease}.pdx-button-container.pdx-button-no-ripple .pdx-button-element .mat-ripple{display:none}.pdx-button-container.pdx-button-variant-raised .pdx-button-element{box-shadow:var(--md-sys-elevation-level1, var(--md-sys-elevation-level1))}.pdx-button-container.pdx-button-variant-raised .pdx-button-element:hover:not(:disabled){box-shadow:var(--md-sys-elevation-level2, var(--md-sys-elevation-level2))}.pdx-button-container.pdx-button-variant-stroked .pdx-button-element{border:1px solid var(--mat-stroked-button-outline-color)}.pdx-button-container.pdx-button-variant-icon .pdx-button-element{min-width:40px;width:40px;height:40px;border-radius:50%}.pdx-button-container.pdx-button-variant-icon .pdx-button-element .mat-icon{font-size:20px;height:20px;width:20px}.pdx-button-container.pdx-button-variant-fab .pdx-button-element{min-width:56px;width:56px;height:56px}.pdx-button-container.pdx-button-variant-fab .pdx-button-element .mat-icon{font-size:24px;height:24px;width:24px}.pdx-button-container.pdx-button-variant-mini-fab .pdx-button-element{min-width:40px;width:40px;height:40px}.pdx-button-container.pdx-button-variant-mini-fab .pdx-button-element .mat-icon{font-size:20px;height:20px;width:20px}.pdx-button-container.pdx-button-icon-only .pdx-button-description{max-width:120px;font-size:11px}.pdx-validation-loading{display:flex;align-items:center;gap:8px;margin-top:8px;color:var(--mat-form-field-subscript-text-color);font-size:12px}.pdx-validation-loading .pdx-loading-spinner{font-size:16px;height:16px;width:16px;animation:spin 1s linear infinite}.pdx-validation-loading .pdx-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.pdx-debug-info{margin-top:8px;padding:4px 8px;background-color:var(--mat-toolbar-container-background-color, var(--md-sys-color-surface-variant));border-radius:4px;max-width:200px}.pdx-debug-info .pdx-debug-security{font-family:monospace;font-size:10px;color:var(--mat-toolbar-container-text-color, var(--md-sys-color-on-surface-variant));word-break:break-all}@media(max-width:600px){.pdx-button-container.pdx-button-variant-fab .pdx-button-element{min-width:48px;width:48px;height:48px}.pdx-button-container.pdx-button-variant-fab .pdx-button-element .mat-icon{font-size:20px;height:20px;width:20px}.pdx-button-container .pdx-button-element.pdx-button-with-icon .pdx-button-icon{margin-right:6px;font-size:16px;height:16px;width:16px}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes buttonPulse{0%,to{transform:scale(1)}50%{transform:scale(1.02)}}.pdx-button-container .pdx-button-element:hover:not(:disabled){transform:translateY(-1px);transition:transform .2s ease}.pdx-button-container .pdx-button-element:active:not(:disabled){transform:translateY(0) scale(.98);transition:transform .1s ease}.pdx-button-container.pdx-button-loading .pdx-button-element{animation:buttonPulse 1.5s infinite ease-in-out}@media(prefers-reduced-motion:reduce){.pdx-button-container .pdx-button-element{transition:none;animation:none}.pdx-button-container .pdx-button-element:hover:not(:disabled){transform:none}.pdx-button-container .pdx-button-element:active:not(:disabled){transform:none}.pdx-loading-spinner,.pdx-button-loading .pdx-button-element{animation:none}}@media(prefers-contrast:high){.pdx-button-container .pdx-button-element:focus{outline:3px solid;outline-offset:2px}}@media(prefers-color-scheme:dark){.pdx-button-container.pdx-button-variant-raised .pdx-button-element{box-shadow:var(--md-sys-elevation-level2, var(--md-sys-elevation-level2))}.pdx-button-container.pdx-button-variant-raised .pdx-button-element:hover:not(:disabled){box-shadow:var(--md-sys-elevation-level3, var(--md-sys-elevation-level3))}}@media print{.pdx-button-container .pdx-button-element{box-shadow:none!important;border:1px solid var(--md-sys-color-outline);background:transparent!important;color:var(--md-sys-color-on-surface)!important}.pdx-button-container .pdx-button-element .pdx-button-spinner,.pdx-validation-loading,.pdx-debug-info{display:none}}.pdx-button-container .mat-primary.pdx-button-loading{background-color:var(--md-sys-color-primary)}.pdx-button-container .mat-accent.pdx-button-loading{background-color:var(--md-sys-color-secondary)}.pdx-button-container .mat-warn.pdx-button-loading{background-color:var(--md-sys-color-error)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$1.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i1$1.MatMiniFabButton, selector: "button[mat-mini-fab], a[mat-mini-fab], button[matMiniFab], a[matMiniFab]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i1$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i1$1.MatFabButton, selector: "button[mat-fab], a[mat-fab], button[matFab], a[matFab]", inputs: ["extended"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i7.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] });
7436
7556
  }
@@ -14070,7 +14190,10 @@ class InlineSelectComponent extends SimpleBaseSelectComponent {
14070
14190
  }
14071
14191
  placeholderText() {
14072
14192
  const fromMeta = this.resolveFieldLabelFromMetadata(this.currentMetadata());
14073
- return fromMeta || this.fieldLabelText || this.tDynamicFields('inlineSelect.placeholder', 'Filtro');
14193
+ return (fromMeta ||
14194
+ this.fieldLabelText ||
14195
+ this.resolveHumanizedFieldName(this.currentMetadata().name) ||
14196
+ this.tDynamicFields('inlineSelect.placeholder', 'Selecionar'));
14074
14197
  }
14075
14198
  searchPlaceholderText() {
14076
14199
  const custom = String(this.currentMetadata().searchPlaceholder || '').trim();
@@ -14093,7 +14216,20 @@ class InlineSelectComponent extends SimpleBaseSelectComponent {
14093
14216
  return text;
14094
14217
  }
14095
14218
  }
14096
- return this.tDynamicFields('inlineSelect.placeholder', 'Filtro');
14219
+ return '';
14220
+ }
14221
+ resolveHumanizedFieldName(value) {
14222
+ const raw = String(value ?? '').trim();
14223
+ if (!raw)
14224
+ return '';
14225
+ const spaced = raw
14226
+ .replace(/([a-z0-9])([A-Z])/g, '$1 $2')
14227
+ .replace(/[_\-.]+/g, ' ')
14228
+ .replace(/\s+/g, ' ')
14229
+ .trim();
14230
+ if (!spaced)
14231
+ return '';
14232
+ return spaced.charAt(0).toUpperCase() + spaced.slice(1);
14097
14233
  }
14098
14234
  ariaLabel() {
14099
14235
  const custom = String(this.currentMetadata().ariaLabel || '').trim();
@@ -16159,7 +16295,10 @@ class InlineAsyncSelectComponent extends MaterialAsyncSelectComponent {
16159
16295
  }
16160
16296
  placeholderText() {
16161
16297
  const fromMeta = this.resolveFieldLabelFromMetadata(this.metadata() || {});
16162
- return fromMeta || this.fieldLabelText || this.tDynamicFields('inlineSelect.placeholder', 'Filtro');
16298
+ return (fromMeta ||
16299
+ this.fieldLabelText ||
16300
+ this.resolveHumanizedFieldName(this.currentMetadata().name) ||
16301
+ this.tDynamicFields('inlineSelect.placeholder', 'Selecionar'));
16163
16302
  }
16164
16303
  searchPlaceholderText() {
16165
16304
  const custom = String(this.currentMetadata().searchPlaceholder || '').trim();
@@ -16168,8 +16307,21 @@ class InlineAsyncSelectComponent extends MaterialAsyncSelectComponent {
16168
16307
  ariaLabel() {
16169
16308
  return (this.currentMetadata().ariaLabel ||
16170
16309
  this.label ||
16171
- this.metadata()?.name ||
16172
- 'Filtro');
16310
+ this.resolveHumanizedFieldName(this.metadata()?.name) ||
16311
+ this.placeholderText());
16312
+ }
16313
+ resolveHumanizedFieldName(value) {
16314
+ const raw = String(value ?? '').trim();
16315
+ if (!raw)
16316
+ return '';
16317
+ const spaced = raw
16318
+ .replace(/([a-z0-9])([A-Z])/g, '$1 $2')
16319
+ .replace(/[_\-.]+/g, ' ')
16320
+ .replace(/\s+/g, ' ')
16321
+ .trim();
16322
+ if (!spaced)
16323
+ return '';
16324
+ return spaced.charAt(0).toUpperCase() + spaced.slice(1);
16173
16325
  }
16174
16326
  resolveOptionLabel(value) {
16175
16327
  const option = this.options().find((item) => this.equalsOptionValue(item.value, value));
@@ -17888,6 +18040,9 @@ class InlineInputComponent extends SimpleBaseInputComponent {
17888
18040
  }
17889
18041
  ngAfterViewInit() {
17890
18042
  super.ngAfterViewInit();
18043
+ if (this.inputEl?.nativeElement) {
18044
+ this.registerInputElement(this.inputEl.nativeElement);
18045
+ }
17891
18046
  this.scheduleInlineResize();
17892
18047
  }
17893
18048
  onComponentDestroy() {
@@ -18114,6 +18269,7 @@ class InlineInputComponent extends SimpleBaseInputComponent {
18114
18269
  [placeholder]="placeholderText()"
18115
18270
  [required]="metadata()?.required || false"
18116
18271
  [readonly]="isReadonlyEffective()"
18272
+ [disabled]="disabledMode || control().disabled"
18117
18273
  [autocomplete]="metadata()?.autocomplete || 'off'"
18118
18274
  [spellcheck]="metadata()?.spellcheck ?? false"
18119
18275
  [maxlength]="metadata()?.maxLength || null"
@@ -18193,6 +18349,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
18193
18349
  [placeholder]="placeholderText()"
18194
18350
  [required]="metadata()?.required || false"
18195
18351
  [readonly]="isReadonlyEffective()"
18352
+ [disabled]="disabledMode || control().disabled"
18196
18353
  [autocomplete]="metadata()?.autocomplete || 'off'"
18197
18354
  [spellcheck]="metadata()?.spellcheck ?? false"
18198
18355
  [maxlength]="metadata()?.maxLength || null"
@@ -19383,6 +19540,9 @@ class InlineNumberComponent extends SimpleBaseInputComponent {
19383
19540
  }
19384
19541
  ngAfterViewInit() {
19385
19542
  super.ngAfterViewInit();
19543
+ if (this.inputEl?.nativeElement) {
19544
+ this.registerInputElement(this.inputEl.nativeElement);
19545
+ }
19386
19546
  this.scheduleInlineResize();
19387
19547
  }
19388
19548
  onComponentDestroy() {
@@ -19811,6 +19971,7 @@ class InlineNumberComponent extends SimpleBaseInputComponent {
19811
19971
  [placeholder]="placeholderText()"
19812
19972
  [required]="metadata()?.required || false"
19813
19973
  [readonly]="isReadonlyEffective()"
19974
+ [disabled]="disabledMode || control().disabled"
19814
19975
  [autocomplete]="metadata()?.autocomplete || 'off'"
19815
19976
  [spellcheck]="metadata()?.spellcheck ?? false"
19816
19977
  [min]="effectiveMinValue()"
@@ -19923,6 +20084,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
19923
20084
  [placeholder]="placeholderText()"
19924
20085
  [required]="metadata()?.required || false"
19925
20086
  [readonly]="isReadonlyEffective()"
20087
+ [disabled]="disabledMode || control().disabled"
19926
20088
  [autocomplete]="metadata()?.autocomplete || 'off'"
19927
20089
  [spellcheck]="metadata()?.spellcheck ?? false"
19928
20090
  [min]="effectiveMinValue()"
@@ -20995,7 +21157,7 @@ class InlineCurrencyRangeComponent extends SimpleBaseInputComponent {
20995
21157
  return this.distributionVisual().opacity;
20996
21158
  }
20997
21159
  isInteractionBlocked() {
20998
- return this.disabledMode || this.isReadonlyEffective();
21160
+ return this.isInteractionBlockedByState();
20999
21161
  }
21000
21162
  hasSelection() {
21001
21163
  return this.currentRangeValue() !== null;
@@ -22315,7 +22477,7 @@ class InlineRangeSliderComponent extends SimpleBaseInputComponent {
22315
22477
  return String(this.currentMetadata().mode || 'single').toLowerCase() === 'range';
22316
22478
  }
22317
22479
  isInteractionBlocked() {
22318
- return this.disabledMode || this.isReadonlyEffective();
22480
+ return this.isInteractionBlockedByState();
22319
22481
  }
22320
22482
  hasSelection() {
22321
22483
  if (this.isRangeMode()) {
@@ -25348,10 +25510,7 @@ class InlineDateRangeComponent extends MaterialDateRangeComponent {
25348
25510
  this.scheduleInlineResize();
25349
25511
  }
25350
25512
  isInteractionBlocked() {
25351
- return (this.disabledMode ||
25352
- this.presentationMode ||
25353
- this.isReadonlyEffective() ||
25354
- this.control().disabled);
25513
+ return this.isInteractionBlockedByState();
25355
25514
  }
25356
25515
  showQuickClear() {
25357
25516
  const clearCfg = this.currentMetadata().clearButton;
@@ -26698,7 +26857,7 @@ class InlineTimeComponent extends MaterialTimepickerComponent {
26698
26857
  return getErrorStateMatcherForField(this.metadata());
26699
26858
  }
26700
26859
  isInteractionBlocked() {
26701
- return this.disabledMode || this.isReadonlyEffective() || this.presentationMode;
26860
+ return this.isInteractionBlockedByState();
26702
26861
  }
26703
26862
  showQuickClear() {
26704
26863
  const clearCfg = this.currentMetadata().clearButton;
@@ -28683,10 +28842,7 @@ class InlineTimeRangeComponent extends PdxMaterialTimeRangeComponent {
28683
28842
  return ticks === true || ticks === 'auto';
28684
28843
  }
28685
28844
  isInteractionBlocked() {
28686
- return (this.disabledMode ||
28687
- this.presentationMode ||
28688
- this.isReadonlyEffective() ||
28689
- this.control().disabled);
28845
+ return this.isInteractionBlockedByState();
28690
28846
  }
28691
28847
  hasValue() {
28692
28848
  const value = this.timeRangeForm.value;
@@ -30336,7 +30492,7 @@ class InlineTreeSelectComponent extends SimpleBaseSelectComponent {
30336
30492
  <div
30337
30493
  class="pdx-chip-trigger"
30338
30494
  [class.is-active]="hasSelection()"
30339
- [class.is-disabled]="disabledMode || isReadonlyEffective() || presentationMode"
30495
+ [class.is-disabled]="disabledMode || control().disabled || isReadonlyEffective() || presentationMode"
30340
30496
  >
30341
30497
  <button
30342
30498
  #triggerEl
@@ -30344,7 +30500,7 @@ class InlineTreeSelectComponent extends SimpleBaseSelectComponent {
30344
30500
  class="pdx-chip-main"
30345
30501
  [matMenuTriggerFor]="treeMenu"
30346
30502
  [matMenuTriggerRestoreFocus]="false"
30347
- [disabled]="disabledMode || isReadonlyEffective() || presentationMode"
30503
+ [disabled]="disabledMode || control().disabled || isReadonlyEffective() || presentationMode"
30348
30504
  [attr.aria-label]="ariaLabel()"
30349
30505
  [matTooltip]="inlineTooltipText()"
30350
30506
  [matTooltipDisabled]="inlineTooltipDisabled()"
@@ -30524,7 +30680,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
30524
30680
  <div
30525
30681
  class="pdx-chip-trigger"
30526
30682
  [class.is-active]="hasSelection()"
30527
- [class.is-disabled]="disabledMode || isReadonlyEffective() || presentationMode"
30683
+ [class.is-disabled]="disabledMode || control().disabled || isReadonlyEffective() || presentationMode"
30528
30684
  >
30529
30685
  <button
30530
30686
  #triggerEl
@@ -30532,7 +30688,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
30532
30688
  class="pdx-chip-main"
30533
30689
  [matMenuTriggerFor]="treeMenu"
30534
30690
  [matMenuTriggerRestoreFocus]="false"
30535
- [disabled]="disabledMode || isReadonlyEffective() || presentationMode"
30691
+ [disabled]="disabledMode || control().disabled || isReadonlyEffective() || presentationMode"
30536
30692
  [attr.aria-label]="ariaLabel()"
30537
30693
  [matTooltip]="inlineTooltipText()"
30538
30694
  [matTooltipDisabled]="inlineTooltipDisabled()"
@@ -33030,10 +33186,10 @@ class InlinePipelineStatusComponent extends SimpleBaseSelectComponent {
33030
33186
  return this.placeholderText();
33031
33187
  }
33032
33188
  panelSubtitleText() {
33033
- return this.resolvePipelineText('panelSubtitle', this.tDynamicFields('inlinePipeline.panelSubtitle', ''), 'pipelineSubtitle', 'inlinePanelSubtitle', 'hint');
33189
+ return this.resolvePipelineText('panelSubtitle', this.tDynamicFields('inlinePipelineStatus.panelSubtitle', ''), 'pipelineSubtitle', 'inlinePanelSubtitle', 'hint');
33034
33190
  }
33035
33191
  searchPlaceholderText() {
33036
- return this.resolvePipelineText('searchPlaceholder', this.tDynamicFields('inlinePipeline.searchPlaceholder', ''), 'pipelineSearchPlaceholder', 'searchPlaceholder');
33192
+ return this.resolvePipelineText('searchPlaceholder', this.tDynamicFields('inlinePipelineStatus.searchPlaceholder', ''), 'pipelineSearchPlaceholder', 'searchPlaceholder');
33037
33193
  }
33038
33194
  panelSearchIconName(fallback = 'search') {
33039
33195
  return this.metadataIconName(['pipelineSearchIcon', 'panelSearchIcon', 'searchIcon', 'inlineSearchIcon'], fallback);
@@ -33065,16 +33221,16 @@ class InlinePipelineStatusComponent extends SimpleBaseSelectComponent {
33065
33221
  return this.showSelectAllAction() || this.showClearSelectionAction();
33066
33222
  }
33067
33223
  selectionActionsAriaLabel() {
33068
- return this.resolvePipelineText('selectionActionsAriaLabel', this.tDynamicFields('inlinePipeline.selectionActionsAriaLabel', ''), 'pipelineSelectionActionsAriaLabel');
33224
+ return this.resolvePipelineText('selectionActionsAriaLabel', this.tDynamicFields('inlinePipelineStatus.selectionActionsAriaLabel', ''), 'pipelineSelectionActionsAriaLabel');
33069
33225
  }
33070
33226
  selectAllActionText() {
33071
33227
  return this.resolvePipelineText('selectAllActionLabel', this.tDynamicFields('multiSelect.selectAllLabel', 'Select all'), 'pipelineSelectAllText');
33072
33228
  }
33073
33229
  clearSelectionActionText() {
33074
- return this.resolvePipelineText('clearActionLabel', this.tDynamicFields('inlinePipeline.clearActionLabel', ''), 'pipelineClearActionText');
33230
+ return this.resolvePipelineText('clearActionLabel', this.tDynamicFields('inlinePipelineStatus.clearActionLabel', ''), 'pipelineClearActionText');
33075
33231
  }
33076
33232
  selectionPillsAriaLabel() {
33077
- return this.resolvePipelineText('selectionPillsAriaLabel', this.tDynamicFields('inlinePipeline.selectionPillsAriaLabel', ''), 'pipelineSelectionPillsAriaLabel');
33233
+ return this.resolvePipelineText('selectionPillsAriaLabel', this.tDynamicFields('inlinePipelineStatus.selectionPillsAriaLabel', ''), 'pipelineSelectionPillsAriaLabel');
33078
33234
  }
33079
33235
  showSelectAllAction() {
33080
33236
  const md = this.currentMetadata();
@@ -33204,9 +33360,9 @@ class InlinePipelineStatusComponent extends SimpleBaseSelectComponent {
33204
33360
  }
33205
33361
  optionsGroupAriaLabel() {
33206
33362
  if (this.multipleMode()) {
33207
- return this.resolvePipelineText('optionsGroupAriaLabelMultiple', this.tDynamicFields('inlinePipeline.optionsGroupAriaLabelMultiple', ''), 'pipelineOptionsGroupAriaLabelMultiple');
33363
+ return this.resolvePipelineText('optionsGroupAriaLabelMultiple', this.tDynamicFields('inlinePipelineStatus.optionsGroupAriaLabelMultiple', ''), 'pipelineOptionsGroupAriaLabelMultiple');
33208
33364
  }
33209
- return this.resolvePipelineText('optionsGroupAriaLabelSingle', this.tDynamicFields('inlinePipeline.optionsGroupAriaLabelSingle', ''), 'pipelineOptionsGroupAriaLabelSingle');
33365
+ return this.resolvePipelineText('optionsGroupAriaLabelSingle', this.tDynamicFields('inlinePipelineStatus.optionsGroupAriaLabelSingle', ''), 'pipelineOptionsGroupAriaLabelSingle');
33210
33366
  }
33211
33367
  optionAriaLabel(option) {
33212
33368
  if (!option.subtitle) {
@@ -33260,7 +33416,7 @@ class InlinePipelineStatusComponent extends SimpleBaseSelectComponent {
33260
33416
  }
33261
33417
  placeholderText() {
33262
33418
  const fromMeta = this.resolveFieldLabelFromMetadata(this.currentMetadata());
33263
- return fromMeta || this.fieldLabelText || this.tDynamicFields('inlinePipeline.placeholder', '');
33419
+ return fromMeta || this.fieldLabelText || this.tDynamicFields('inlinePipelineStatus.placeholder', '');
33264
33420
  }
33265
33421
  ariaLabel() {
33266
33422
  const metadata = this.currentMetadata();
@@ -33270,7 +33426,7 @@ class InlinePipelineStatusComponent extends SimpleBaseSelectComponent {
33270
33426
  return `${this.nonEmptyText(metadata.ariaLabel) || this.placeholderText()}: ${this.displayText()}`;
33271
33427
  }
33272
33428
  emptyStateText() {
33273
- return this.resolvePipelineText('emptyStateText', this.tDynamicFields('inlinePipeline.emptyStateText', ''), 'pipelineEmptyStateText', 'emptyStateText');
33429
+ return this.resolvePipelineText('emptyStateText', this.tDynamicFields('inlinePipelineStatus.emptyStateText', ''), 'pipelineEmptyStateText', 'emptyStateText');
33274
33430
  }
33275
33431
  resolveMultipleMode(metadata) {
33276
33432
  if (typeof metadata.multiple === 'boolean')
@@ -33293,7 +33449,7 @@ class InlinePipelineStatusComponent extends SimpleBaseSelectComponent {
33293
33449
  return [value];
33294
33450
  }
33295
33451
  isInteractionBlocked() {
33296
- return this.disabledMode || this.isReadonlyEffective() || this.presentationMode;
33452
+ return this.isInteractionBlockedByState();
33297
33453
  }
33298
33454
  toVisualOption(option, index, totalOptions = 0) {
33299
33455
  const raw = option;
@@ -33521,7 +33677,7 @@ class InlinePipelineStatusComponent extends SimpleBaseSelectComponent {
33521
33677
  return text;
33522
33678
  }
33523
33679
  }
33524
- return this.tDynamicFields('inlinePipeline.placeholder', '');
33680
+ return this.tDynamicFields('inlinePipelineStatus.placeholder', '');
33525
33681
  }
33526
33682
  recalculateInlineSizeBounds() {
33527
33683
  const viewportWidth = typeof window !== 'undefined' ? window.innerWidth : 1280;
@@ -35509,7 +35665,7 @@ class InlineRelativePeriodComponent extends SimpleBaseSelectComponent {
35509
35665
  return this.resolveText('emptyStateText', this.tDynamicFields('inlineRelativePeriod.emptyStateText', ''), 'relativePeriodEmptyStateText', 'emptyStateText');
35510
35666
  }
35511
35667
  isInteractionBlocked() {
35512
- return this.disabledMode || this.isReadonlyEffective() || this.presentationMode;
35668
+ return this.isInteractionBlockedByState();
35513
35669
  }
35514
35670
  parseOptionsSource(source) {
35515
35671
  if (Array.isArray(source)) {
@@ -36421,7 +36577,7 @@ class InlineSentimentComponent extends SimpleBaseSelectComponent {
36421
36577
  return this.resolveText('emptyStateText', this.tDynamicFields('inlineSentiment.emptyStateText', ''), 'sentimentEmptyStateText', 'emptyStateText');
36422
36578
  }
36423
36579
  isInteractionBlocked() {
36424
- return this.disabledMode || this.isReadonlyEffective() || this.presentationMode;
36580
+ return this.isInteractionBlockedByState();
36425
36581
  }
36426
36582
  parseOptionsSource(source) {
36427
36583
  if (Array.isArray(source)) {
@@ -37430,7 +37586,7 @@ class InlineColorLabelComponent extends SimpleBaseSelectComponent {
37430
37586
  return this.resolveText('emptyStateText', this.tDynamicFields('inlineColorLabel.emptyStateText', ''), 'colorLabelEmptyStateText', 'emptyStateText');
37431
37587
  }
37432
37588
  isInteractionBlocked() {
37433
- return this.disabledMode || this.isReadonlyEffective() || this.presentationMode;
37589
+ return this.isInteractionBlockedByState();
37434
37590
  }
37435
37591
  parseOptionsSource(source) {
37436
37592
  if (Array.isArray(source)) {
@@ -39415,6 +39571,7 @@ class MaterialChipsComponent extends SimpleBaseSelectComponent {
39415
39571
  presentationMode = false;
39416
39572
  removable = signal(true, ...(ngDevMode ? [{ debugName: "removable" }] : []));
39417
39573
  addOnBlur = signal(false, ...(ngDevMode ? [{ debugName: "addOnBlur" }] : []));
39574
+ chipPlaceholder = signal(null, ...(ngDevMode ? [{ debugName: "chipPlaceholder" }] : []));
39418
39575
  separatorKeys = [ENTER, COMMA];
39419
39576
  asRecord(value) {
39420
39577
  if (value && typeof value === 'object' && !Array.isArray(value)) {
@@ -39457,6 +39614,9 @@ class MaterialChipsComponent extends SimpleBaseSelectComponent {
39457
39614
  const target = event.target;
39458
39615
  this.onSearch(target instanceof HTMLInputElement ? target.value : '');
39459
39616
  }
39617
+ setInputMetadata(metadata) {
39618
+ this.setSelectMetadata(metadata);
39619
+ }
39460
39620
  setSelectMetadata(metadata) {
39461
39621
  const matMetadata = metadata;
39462
39622
  this.devWarnSelectAliases(matMetadata, 'MaterialChipsComponent');
@@ -39478,6 +39638,9 @@ class MaterialChipsComponent extends SimpleBaseSelectComponent {
39478
39638
  });
39479
39639
  this.removable.set(matMetadata.removable ?? true);
39480
39640
  this.addOnBlur.set(matMetadata.addOnBlur ?? false);
39641
+ this.chipPlaceholder.set(typeof matMetadata.placeholder === 'string' && matMetadata.placeholder.trim().length
39642
+ ? matMetadata.placeholder
39643
+ : null);
39481
39644
  }
39482
39645
  errorStateMatcher() {
39483
39646
  return getErrorStateMatcherForField(this.metadata());
@@ -39518,6 +39681,7 @@ class MaterialChipsComponent extends SimpleBaseSelectComponent {
39518
39681
  [matChipInputSeparatorKeyCodes]="separatorKeys"
39519
39682
  [matAutocomplete]="auto"
39520
39683
  [required]="metadata()?.required || false"
39684
+ [attr.placeholder]="chipPlaceholder()"
39521
39685
  (input)="onSearchInputEvent($event)"
39522
39686
  (matChipInputTokenEnd)="onInputTokenEnd($event)"
39523
39687
  [matTooltip]="tooltipEnabled() ? errorMessage() : null"
@@ -39625,6 +39789,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
39625
39789
  [matChipInputSeparatorKeyCodes]="separatorKeys"
39626
39790
  [matAutocomplete]="auto"
39627
39791
  [required]="metadata()?.required || false"
39792
+ [attr.placeholder]="chipPlaceholder()"
39628
39793
  (input)="onSearchInputEvent($event)"
39629
39794
  (matChipInputTokenEnd)="onInputTokenEnd($event)"
39630
39795
  [matTooltip]="tooltipEnabled() ? errorMessage() : null"
@@ -40127,6 +40292,7 @@ class MaterialAvatarComponent {
40127
40292
  defaultIcon;
40128
40293
  // Visual props
40129
40294
  appearanceTick = signal(0, ...(ngDevMode ? [{ debugName: "appearanceTick" }] : []));
40295
+ contentTick = signal(0, ...(ngDevMode ? [{ debugName: "contentTick" }] : []));
40130
40296
  _themeColor = 'primary';
40131
40297
  _rounded = 'full';
40132
40298
  _size = 'medium';
@@ -40224,6 +40390,7 @@ class MaterialAvatarComponent {
40224
40390
  }, ...(ngDevMode ? [{ debugName: "_syncControlValue" }] : []));
40225
40391
  // Resolved sources
40226
40392
  resolvedImageSrc = computed(() => {
40393
+ this.contentTick();
40227
40394
  // Priority: explicit input > form control value > metadata.defaultValue
40228
40395
  const byInput = this.normalizeImageUrl(this.imageSrc);
40229
40396
  if (byInput)
@@ -40261,6 +40428,7 @@ class MaterialAvatarComponent {
40261
40428
  // Host classes
40262
40429
  componentCssClasses = computed(() => {
40263
40430
  this.appearanceTick();
40431
+ this.contentTick();
40264
40432
  const classes = ['pfx-avatar'];
40265
40433
  classes.push(`theme-${this.themeColor || 'primary'}`);
40266
40434
  classes.push(`rounded-${this.rounded || 'full'}`);
@@ -40298,6 +40466,7 @@ class MaterialAvatarComponent {
40298
40466
  }, ...(ngDevMode ? [{ debugName: "resolvedStyle" }] : []));
40299
40467
  // Accessible label fallback
40300
40468
  computedAriaLabel = computed(() => {
40469
+ this.contentTick();
40301
40470
  const explicit = (this.ariaLabel || '').trim();
40302
40471
  if (explicit)
40303
40472
  return explicit;
@@ -40316,6 +40485,12 @@ class MaterialAvatarComponent {
40316
40485
  return `Avatar icon ${icon}`;
40317
40486
  return 'Avatar';
40318
40487
  }, ...(ngDevMode ? [{ debugName: "computedAriaLabel" }] : []));
40488
+ resolvedHint = computed(() => {
40489
+ const meta = this.metadata();
40490
+ const hint = meta?.hint;
40491
+ return typeof hint === 'string' && hint.trim().length ? hint.trim() : '';
40492
+ }, ...(ngDevMode ? [{ debugName: "resolvedHint" }] : []));
40493
+ hintId = computed(() => (this.resolvedHint() ? `${this.componentId()}-hint` : null), ...(ngDevMode ? [{ debugName: "hintId" }] : []));
40319
40494
  // Helpers for icon resolution
40320
40495
  resolveIconKind(i) {
40321
40496
  if (!i)
@@ -40398,9 +40573,16 @@ class MaterialAvatarComponent {
40398
40573
  shouldShowDefaultIcon() {
40399
40574
  return !this.hasImage() && !this.hasExplicitIcon() && !this.hasInitials() && this.hasDefaultIcon();
40400
40575
  }
40401
- hasExplicitIcon = computed(() => this.resolveIconKind(this.icon) !== null, ...(ngDevMode ? [{ debugName: "hasExplicitIcon" }] : []));
40402
- hasDefaultIcon = computed(() => this.resolveIconKind(this.defaultIcon) !== null, ...(ngDevMode ? [{ debugName: "hasDefaultIcon" }] : []));
40576
+ hasExplicitIcon = computed(() => {
40577
+ this.contentTick();
40578
+ return this.resolveIconKind(this.icon) !== null;
40579
+ }, ...(ngDevMode ? [{ debugName: "hasExplicitIcon" }] : []));
40580
+ hasDefaultIcon = computed(() => {
40581
+ this.contentTick();
40582
+ return this.resolveIconKind(this.defaultIcon) !== null;
40583
+ }, ...(ngDevMode ? [{ debugName: "hasDefaultIcon" }] : []));
40403
40584
  normalizedInitials() {
40585
+ this.contentTick();
40404
40586
  // Prioritize explicit initials
40405
40587
  const explicitInitials = (this.initials || '').trim();
40406
40588
  if (explicitInitials) {
@@ -40440,6 +40622,7 @@ class MaterialAvatarComponent {
40440
40622
  }
40441
40623
  // ... (rest of methods)
40442
40624
  iconName() {
40625
+ this.contentTick();
40443
40626
  // Used in template inside specific blocks.
40444
40627
  // If showIcon() is true => icon is explicit.
40445
40628
  // If showDefaultIcon() is true => icon is default.
@@ -40463,6 +40646,7 @@ class MaterialAvatarComponent {
40463
40646
  return null;
40464
40647
  }
40465
40648
  iconSvgSafe() {
40649
+ this.contentTick();
40466
40650
  // Similar logic for SVG
40467
40651
  const source = this.hasExplicitIcon() ? this.icon : this.defaultIcon;
40468
40652
  const kind = this.resolveIconKind(source);
@@ -40486,6 +40670,7 @@ class MaterialAvatarComponent {
40486
40670
  return null;
40487
40671
  }
40488
40672
  iconFontClass() {
40673
+ this.contentTick();
40489
40674
  const source = this.hasExplicitIcon() ? this.icon : this.defaultIcon;
40490
40675
  const kind = this.resolveIconKind(source);
40491
40676
  if (kind === 'font') {
@@ -40493,66 +40678,78 @@ class MaterialAvatarComponent {
40493
40678
  }
40494
40679
  return null;
40495
40680
  }
40681
+ ngOnChanges(_changes) {
40682
+ this.contentTick.update((value) => value + 1);
40683
+ }
40496
40684
  // Allow DynamicFieldLoader to apply metadata extras
40497
40685
  setInputMetadata(meta) {
40686
+ const previousMeta = this.metadata();
40498
40687
  const typedMeta = meta;
40499
40688
  this.metadata.set(typedMeta);
40500
40689
  const extras = typedMeta?.extra || {};
40690
+ const hadPrevExtra = (key) => !!previousMeta?.extra &&
40691
+ Object.prototype.hasOwnProperty.call(previousMeta.extra, key);
40692
+ const hadPrevRoot = (key) => !!previousMeta &&
40693
+ Object.prototype.hasOwnProperty.call(previousMeta, key);
40694
+ const resolveExtra = (key, rootValue) => {
40695
+ if (extras[key] !== undefined) {
40696
+ return extras[key];
40697
+ }
40698
+ if (rootValue !== undefined) {
40699
+ return rootValue;
40700
+ }
40701
+ if (hadPrevExtra(String(key)) || hadPrevRoot(String(key))) {
40702
+ return undefined;
40703
+ }
40704
+ return undefined;
40705
+ };
40501
40706
  // Known keys: imageSrc, imageAlt, initials, name, icon, themeColor, rounded, size, fillMode, border, tooltip, ariaLabel
40502
- if (extras.imageSrc !== undefined)
40503
- this.imageSrc = extras.imageSrc;
40504
- else if (typedMeta?.imageSrc !== undefined)
40505
- this.imageSrc = String(typedMeta.imageSrc);
40506
- if (extras.imageAlt !== undefined)
40507
- this.imageAlt = extras.imageAlt;
40508
- else if (typedMeta?.imageAlt !== undefined)
40509
- this.imageAlt = typedMeta.imageAlt;
40510
- if (extras.initials !== undefined)
40511
- this.initials = extras.initials;
40512
- if (extras.name !== undefined)
40513
- this.name = extras.name;
40514
- if (extras.icon !== undefined)
40515
- this.icon = extras.icon;
40516
- if (extras.defaultIcon !== undefined)
40517
- this.defaultIcon = extras.defaultIcon;
40518
- if (extras.themeColor !== undefined)
40519
- this.themeColor = extras.themeColor;
40520
- if (extras.rounded !== undefined)
40521
- this.rounded = extras.rounded;
40522
- if (extras.size !== undefined)
40523
- this.size = extras.size;
40524
- if (extras.fillMode !== undefined)
40525
- this.fillMode = extras.fillMode;
40526
- if (extras.border !== undefined)
40527
- this.border = !!extras.border;
40528
- if (extras.sizePx !== undefined)
40529
- this.sizePx = typeof extras.sizePx === 'number' ? extras.sizePx : Number(extras.sizePx);
40530
- if (extras.sizeCss !== undefined)
40531
- this.sizeCss = extras.sizeCss;
40532
- if (extras.tooltip !== undefined)
40533
- this.tooltip = extras.tooltip;
40534
- if (extras.ariaLabel !== undefined)
40535
- this.ariaLabel = extras.ariaLabel;
40536
- if (extras.class !== undefined)
40537
- this.class = extras.class;
40538
- if (extras.style !== undefined) {
40539
- if (typeof extras.style === 'string') {
40707
+ this.imageSrc = resolveExtra('imageSrc', typedMeta?.imageSrc !== undefined ? String(typedMeta.imageSrc) : undefined);
40708
+ this.imageAlt = resolveExtra('imageAlt', typedMeta?.imageAlt);
40709
+ this.initials = resolveExtra('initials');
40710
+ this.name = resolveExtra('name');
40711
+ this.icon = resolveExtra('icon');
40712
+ this.defaultIcon = resolveExtra('defaultIcon');
40713
+ this.themeColor = resolveExtra('themeColor');
40714
+ this.rounded = resolveExtra('rounded');
40715
+ this.size = resolveExtra('size');
40716
+ this.fillMode = resolveExtra('fillMode');
40717
+ this.border = !!resolveExtra('border');
40718
+ const sizePxValue = resolveExtra('sizePx');
40719
+ this.sizePx =
40720
+ sizePxValue === undefined
40721
+ ? undefined
40722
+ : typeof sizePxValue === 'number'
40723
+ ? sizePxValue
40724
+ : Number(sizePxValue);
40725
+ this.sizeCss = resolveExtra('sizeCss');
40726
+ this.tooltip = resolveExtra('tooltip');
40727
+ this.ariaLabel = resolveExtra('ariaLabel');
40728
+ this.class = resolveExtra('class');
40729
+ const styleValue = resolveExtra('style');
40730
+ if (styleValue !== undefined) {
40731
+ if (typeof styleValue === 'string') {
40540
40732
  try {
40541
- const obj = JSON.parse(extras.style);
40733
+ const obj = JSON.parse(styleValue);
40542
40734
  if (obj && typeof obj === 'object')
40543
40735
  this.style = obj;
40544
40736
  }
40545
40737
  catch {
40546
40738
  // ignore invalid JSON
40739
+ this.style = undefined;
40547
40740
  }
40548
40741
  }
40549
- else if (typeof extras.style === 'object') {
40550
- this.style = extras.style;
40742
+ else if (typeof styleValue === 'object') {
40743
+ this.style = styleValue;
40551
40744
  }
40552
40745
  }
40746
+ else if (hadPrevExtra('style')) {
40747
+ this.style = undefined;
40748
+ }
40749
+ this.contentTick.update((value) => value + 1);
40553
40750
  }
40554
40751
  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: `
40752
+ 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" } }, usesOnChanges: true, ngImport: i0, template: `
40556
40753
  <span class="pfx-avatar__inner"
40557
40754
  [attr.aria-hidden]="presentationMode ? 'true' : null"
40558
40755
  [ngStyle]="resolvedStyle()"
@@ -40589,7 +40786,10 @@ class MaterialAvatarComponent {
40589
40786
  <span class="pfx-avatar__custom"><ng-content></ng-content></span>
40590
40787
  }
40591
40788
  </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"] }] });
40789
+ @if (resolvedHint()) {
40790
+ <span class="pfx-avatar__hint" [attr.id]="hintId()">{{ resolvedHint() }}</span>
40791
+ }
40792
+ `, 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
40793
  }
40594
40794
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: MaterialAvatarComponent, decorators: [{
40595
40795
  type: Component,
@@ -40599,6 +40799,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
40599
40799
  '[attr.aria-hidden]': 'visible ? null : "true"',
40600
40800
  '[attr.role]': '"img"',
40601
40801
  '[attr.aria-label]': 'computedAriaLabel() || null',
40802
+ '[attr.aria-describedby]': 'hintId()',
40602
40803
  '[attr.data-field-type]': '"avatar"',
40603
40804
  '[attr.data-field-name]': 'metadata()?.name',
40604
40805
  '[attr.data-component-id]': 'componentId()',
@@ -40642,7 +40843,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
40642
40843
  <span class="pfx-avatar__custom"><ng-content></ng-content></span>
40643
40844
  }
40644
40845
  </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"] }]
40846
+ @if (resolvedHint()) {
40847
+ <span class="pfx-avatar__hint" [attr.id]="hintId()">{{ resolvedHint() }}</span>
40848
+ }
40849
+ `, 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
40850
  }], propDecorators: { imageSrc: [{
40647
40851
  type: Input
40648
40852
  }], imageAlt: [{
@@ -41690,12 +41894,28 @@ class MaterialFileUploadComponent extends SimpleBaseInputComponent {
41690
41894
  const { placeholder: _placeholder, ...rest } = metadata;
41691
41895
  this.setMetadata(rest);
41692
41896
  }
41897
+ fileAccept() {
41898
+ const accept = this.metadataRecord()?.['accept'];
41899
+ return typeof accept === 'string' && accept.trim().length ? accept.trim() : null;
41900
+ }
41901
+ allowsMultiple() {
41902
+ return this.metadataRecord()?.['multiple'] === true;
41903
+ }
41904
+ isInteractionDisabled() {
41905
+ return this.disabledMode || this.readonlyMode || this.presentationMode;
41906
+ }
41693
41907
  /**
41694
41908
  * CSS classes specific to the file upload wrapper.
41695
41909
  */
41696
41910
  getSpecificCssClasses() {
41697
41911
  return ['pdx-material-file-upload'];
41698
41912
  }
41913
+ metadataRecord() {
41914
+ const metadata = this.metadata();
41915
+ return metadata && typeof metadata === 'object'
41916
+ ? metadata
41917
+ : null;
41918
+ }
41699
41919
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: MaterialFileUploadComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
41700
41920
  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
41921
  {
@@ -41715,6 +41935,9 @@ class MaterialFileUploadComponent extends SimpleBaseInputComponent {
41715
41935
  [attr.id]="componentId()"
41716
41936
  type="file"
41717
41937
  (change)="onFileSelected($event)"
41938
+ [attr.accept]="fileAccept()"
41939
+ [attr.multiple]="allowsMultiple() ? '' : null"
41940
+ [disabled]="isInteractionDisabled()"
41718
41941
  [attr.aria-disabled]="disabledMode ? 'true' : null"
41719
41942
  />
41720
41943
  @if (hasValidationError()) {
@@ -41744,6 +41967,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
41744
41967
  [attr.id]="componentId()"
41745
41968
  type="file"
41746
41969
  (change)="onFileSelected($event)"
41970
+ [attr.accept]="fileAccept()"
41971
+ [attr.multiple]="allowsMultiple() ? '' : null"
41972
+ [disabled]="isInteractionDisabled()"
41747
41973
  [attr.aria-disabled]="disabledMode ? 'true' : null"
41748
41974
  />
41749
41975
  @if (hasValidationError()) {
@@ -44335,11 +44561,13 @@ class PdxColorPickerComponent extends SimpleBaseInputComponent {
44335
44561
  current = signal(null, ...(ngDevMode ? [{ debugName: "current" }] : []));
44336
44562
  draft = signal(null, ...(ngDevMode ? [{ debugName: "draft" }] : []));
44337
44563
  draftAlpha = signal(1, ...(ngDevMode ? [{ debugName: "draftAlpha" }] : []));
44564
+ configTick = signal(0, ...(ngDevMode ? [{ debugName: "configTick" }] : []));
44338
44565
  panelWidthPx = 340;
44339
44566
  constructor(bottomSheet) {
44340
44567
  super();
44341
44568
  this.bottomSheet = bottomSheet;
44342
44569
  effect(() => {
44570
+ this.configTick();
44343
44571
  this.panelWidthPx = this.coerceWidth(this.popupSettings?.width ?? 340);
44344
44572
  });
44345
44573
  // React to metadata changes to keep inputs in sync
@@ -44418,8 +44646,12 @@ class PdxColorPickerComponent extends SimpleBaseInputComponent {
44418
44646
  this.visible = !!md.visible;
44419
44647
  if (typeof md.presentationMode === 'boolean')
44420
44648
  this.presentationMode = !!md.presentationMode;
44649
+ this.configTick.update((value) => value + 1);
44421
44650
  });
44422
44651
  }
44652
+ ngOnChanges(_changes) {
44653
+ this.configTick.update((value) => value + 1);
44654
+ }
44423
44655
  resolveClearButtonConfig(md) {
44424
44656
  const metadata = md && typeof md === 'object' && !Array.isArray(md) ? md : {};
44425
44657
  const cfg = metadata.clearButton;
@@ -44534,8 +44766,14 @@ class PdxColorPickerComponent extends SimpleBaseInputComponent {
44534
44766
  onClose() { this.close.emit(); }
44535
44767
  // Views logic
44536
44768
  selectedTabIndex = signal(0, ...(ngDevMode ? [{ debugName: "selectedTabIndex" }] : []));
44537
- showGradient = computed(() => this.views.includes('gradient'), ...(ngDevMode ? [{ debugName: "showGradient" }] : []));
44538
- showPalette = computed(() => this.views.includes('palette'), ...(ngDevMode ? [{ debugName: "showPalette" }] : []));
44769
+ showGradient = computed(() => {
44770
+ this.configTick();
44771
+ return this.views.includes('gradient');
44772
+ }, ...(ngDevMode ? [{ debugName: "showGradient" }] : []));
44773
+ showPalette = computed(() => {
44774
+ this.configTick();
44775
+ return this.views.includes('palette');
44776
+ }, ...(ngDevMode ? [{ debugName: "showPalette" }] : []));
44539
44777
  onTabIndexChange(i) {
44540
44778
  this.selectedTabIndex.set(i);
44541
44779
  const v = this.views[i] || 'gradient';
@@ -44543,7 +44781,10 @@ class PdxColorPickerComponent extends SimpleBaseInputComponent {
44543
44781
  this.activeViewChange.emit(v);
44544
44782
  }
44545
44783
  // Draft preview strings
44546
- draftPreview = computed(() => this.toFormat(this.draft(), this.format, this.draftAlpha()), ...(ngDevMode ? [{ debugName: "draftPreview" }] : []));
44784
+ draftPreview = computed(() => {
44785
+ this.configTick();
44786
+ return this.toFormat(this.draft(), this.format, this.draftAlpha());
44787
+ }, ...(ngDevMode ? [{ debugName: "draftPreview" }] : []));
44547
44788
  draftSolidHex = computed(() => this.toHex(this.draft()) || this.defaultHex(), ...(ngDevMode ? [{ debugName: "draftSolidHex" }] : []));
44548
44789
  draftOpacity = computed(() => this.draftAlpha(), ...(ngDevMode ? [{ debugName: "draftOpacity" }] : []));
44549
44790
  // Preview swatch background for input prefix
@@ -44566,6 +44807,7 @@ class PdxColorPickerComponent extends SimpleBaseInputComponent {
44566
44807
  customColors = signal([], ...(ngDevMode ? [{ debugName: "customColors" }] : []));
44567
44808
  recentColors = signal([], ...(ngDevMode ? [{ debugName: "recentColors" }] : []));
44568
44809
  paletteColors = computed(() => {
44810
+ this.configTick();
44569
44811
  const base = this.buildPaletteColors(this.paletteSettings);
44570
44812
  const extra = this.customColors();
44571
44813
  // dedupe (case-insensitive)
@@ -44932,7 +45174,7 @@ class PdxColorPickerComponent extends SimpleBaseInputComponent {
44932
45174
  useExisting: forwardRef(() => PdxColorPickerComponent),
44933
45175
  multi: true,
44934
45176
  },
44935
- ], viewQueries: [{ propertyName: "toggleBtn", first: true, predicate: ["toggleBtn"], descendants: true }, { propertyName: "menuTrigger", first: true, predicate: MatMenuTrigger, descendants: true }], usesInheritance: true, ngImport: i0, template: `
45177
+ ], viewQueries: [{ propertyName: "toggleBtn", first: true, predicate: ["toggleBtn"], descendants: true }, { propertyName: "menuTrigger", first: true, predicate: MatMenuTrigger, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: `
44936
45178
  <mat-form-field
44937
45179
  [appearance]="materialAppearance()"
44938
45180
  [color]="materialColor()"
@@ -45599,6 +45841,9 @@ class MaterialTransferListComponent extends SimpleBaseSelectComponent {
45599
45841
  this.updateListsFromValue();
45600
45842
  });
45601
45843
  }
45844
+ setInputMetadata(metadata) {
45845
+ this.setSelectMetadata(metadata);
45846
+ }
45602
45847
  setSelectMetadata(metadata) {
45603
45848
  const source = metadata.transferOptions ?? metadata.options;
45604
45849
  const mapped = source?.map((o) => ({
@@ -45861,7 +46106,11 @@ class MaterialTransferListComponent extends SimpleBaseSelectComponent {
45861
46106
  </mat-selection-list>
45862
46107
  </div>
45863
46108
  </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"] }] });
46109
+
46110
+ @if (metadata()?.hint) {
46111
+ <div class="pdx-transfer-hint">{{ metadata()!.hint }}</div>
46112
+ }
46113
+ `, 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
46114
  }
45866
46115
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: MaterialTransferListComponent, decorators: [{
45867
46116
  type: Component,
@@ -45993,6 +46242,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
45993
46242
  </mat-selection-list>
45994
46243
  </div>
45995
46244
  </div>
46245
+
46246
+ @if (metadata()?.hint) {
46247
+ <div class="pdx-transfer-hint">{{ metadata()!.hint }}</div>
46248
+ }
45996
46249
  `, providers: [
45997
46250
  {
45998
46251
  provide: NG_VALUE_ACCESSOR,
@@ -46007,7 +46260,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
46007
46260
  '[attr.data-field-type]': '"transfer-list"',
46008
46261
  '[attr.data-field-name]': 'metadata()?.name',
46009
46262
  '[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"] }]
46263
+ }, 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
46264
  }], ctorParameters: () => [], propDecorators: { readonlyMode: [{
46012
46265
  type: Input
46013
46266
  }], disabledMode: [{
@@ -48009,6 +48262,13 @@ const DYNAMIC_FIELD_READONLY_STATE_RECIPE = {
48009
48262
  supported: true,
48010
48263
  metadataPatch: { readonly: true },
48011
48264
  };
48265
+ const DYNAMIC_FIELD_PRESENTATION_STATE_RECIPE = {
48266
+ state: 'presentation',
48267
+ label: 'Presentation',
48268
+ supported: true,
48269
+ metadataPatch: { presentationMode: true },
48270
+ note: 'Uses the canonical presentation pipeline instead of a disabled or readonly input shell.',
48271
+ };
48012
48272
  const DYNAMIC_FIELD_ERROR_STATE_RECIPE = {
48013
48273
  state: 'error',
48014
48274
  label: 'Error',
@@ -48027,9 +48287,21 @@ const DYNAMIC_FIELD_BASE_STATE_RECIPES = [
48027
48287
  DYNAMIC_FIELD_FILLED_STATE_RECIPE,
48028
48288
  DYNAMIC_FIELD_DISABLED_STATE_RECIPE,
48029
48289
  DYNAMIC_FIELD_READONLY_STATE_RECIPE,
48290
+ DYNAMIC_FIELD_PRESENTATION_STATE_RECIPE,
48030
48291
  DYNAMIC_FIELD_ERROR_STATE_RECIPE,
48031
48292
  ];
48293
+ function mergeStateRecipes(overrides, supportedStates) {
48294
+ const overrideMap = new Map((overrides ?? []).map((state) => [state.state, state]));
48295
+ return DYNAMIC_FIELD_BASE_STATE_RECIPES
48296
+ .filter((state) => supportedStates.has(state.state))
48297
+ .map((state) => ({
48298
+ ...state,
48299
+ ...(overrideMap.get(state.state) ?? {}),
48300
+ }));
48301
+ }
48032
48302
  function createDynamicFieldPreviewRecipe(input) {
48303
+ const supportedStates = new Set(input.supportedStates ?? DYNAMIC_FIELD_BASE_STATE_RECIPES.map((state) => state.state));
48304
+ const states = mergeStateRecipes(input.states, supportedStates);
48033
48305
  return {
48034
48306
  recipeId: input.recipeId,
48035
48307
  fieldName: input.fieldName,
@@ -48041,7 +48313,7 @@ function createDynamicFieldPreviewRecipe(input) {
48041
48313
  controlType: input.controlType,
48042
48314
  ...(input.metadata ?? {}),
48043
48315
  },
48044
- states: input.states ? [...input.states] : [...DYNAMIC_FIELD_BASE_STATE_RECIPES],
48316
+ states,
48045
48317
  };
48046
48318
  }
48047
48319
 
@@ -48064,7 +48336,7 @@ function jsonApiPath(relativePath) {
48064
48336
  return `projects/praxis-dynamic-fields/src/lib/components/${relativePath}`;
48065
48337
  }
48066
48338
  function createEntry(input) {
48067
- const states = input.states ?? ['default', 'filled', 'disabled', 'readonly', 'error'];
48339
+ const states = input.states ?? ['default', 'filled', 'disabled', 'readonly', 'presentation', 'error'];
48068
48340
  return {
48069
48341
  id: input.id,
48070
48342
  controlType: input.controlType,
@@ -48095,6 +48367,7 @@ function createEntry(input) {
48095
48367
  description: input.description,
48096
48368
  metadata: input.metadata,
48097
48369
  states: input.stateRecipes,
48370
+ supportedStates: states,
48098
48371
  }),
48099
48372
  snippetRecipe: {
48100
48373
  language: input.snippetLanguage ?? 'json',
@@ -48106,6 +48379,15 @@ function createEntry(input) {
48106
48379
  themingNotes: input.themingNotes ?? DEFAULT_THEMING_NOTES,
48107
48380
  };
48108
48381
  }
48382
+ function createDefaultSeedRecipe(initialValue, note) {
48383
+ return {
48384
+ state: 'default',
48385
+ label: 'Default',
48386
+ supported: true,
48387
+ initialValue,
48388
+ note,
48389
+ };
48390
+ }
48109
48391
  const DYNAMIC_FIELDS_PLAYGROUND_CATALOG = [
48110
48392
  createEntry({
48111
48393
  id: 'text-input',
@@ -48121,6 +48403,9 @@ const DYNAMIC_FIELDS_PLAYGROUND_CATALOG = [
48121
48403
  dataSourceKind: 'local',
48122
48404
  apiPath: jsonApiPath('text-input/pdx-text-input.json-api.md'),
48123
48405
  metadata: { placeholder: 'Type here' },
48406
+ stateRecipes: [
48407
+ createDefaultSeedRecipe('Ana Souza', 'Seeded default preview to show immediate field affordance in the catalog.'),
48408
+ ],
48124
48409
  }),
48125
48410
  createEntry({
48126
48411
  id: 'email-input',
@@ -48255,6 +48540,9 @@ const DYNAMIC_FIELDS_PLAYGROUND_CATALOG = [
48255
48540
  dataSourceKind: 'local',
48256
48541
  apiPath: jsonApiPath('material-currency/pdx-material-currency.json-api.md'),
48257
48542
  metadata: { currency: 'BRL', locale: 'pt-BR' },
48543
+ stateRecipes: [
48544
+ createDefaultSeedRecipe(18450.75, 'Seeded default preview to expose formatted monetary rendering at first glance.'),
48545
+ ],
48258
48546
  }),
48259
48547
  createEntry({
48260
48548
  id: 'slider',
@@ -48359,6 +48647,9 @@ const DYNAMIC_FIELDS_PLAYGROUND_CATALOG = [
48359
48647
  avoidWhen: ['data unica'],
48360
48648
  dataSourceKind: 'local',
48361
48649
  apiPath: jsonApiPath('material-date-range/pdx-material-date-range.json-api.md'),
48650
+ stateRecipes: [
48651
+ createDefaultSeedRecipe({ startDate: '2026-03-01', endDate: '2026-03-23' }, 'Seeded default preview to demonstrate a complete temporal range without switching states.'),
48652
+ ],
48362
48653
  }),
48363
48654
  createEntry({
48364
48655
  id: 'datetime-local',
@@ -48482,6 +48773,9 @@ const DYNAMIC_FIELDS_PLAYGROUND_CATALOG = [
48482
48773
  { label: 'Paused', value: 'PAUSED' },
48483
48774
  ],
48484
48775
  },
48776
+ stateRecipes: [
48777
+ createDefaultSeedRecipe('ACTIVE', 'Seeded default preview to reveal selected-label rendering in the base card.'),
48778
+ ],
48485
48779
  }),
48486
48780
  createEntry({
48487
48781
  id: 'searchable-select',
@@ -48674,6 +48968,9 @@ const DYNAMIC_FIELDS_PLAYGROUND_CATALOG = [
48674
48968
  avoidWhen: ['mais de dois estados'],
48675
48969
  dataSourceKind: 'local',
48676
48970
  apiPath: jsonApiPath('material-slide-toggle/pdx-material-slide-toggle.json-api.md'),
48971
+ stateRecipes: [
48972
+ createDefaultSeedRecipe(true, 'Seeded default preview to show the canonical boolean-on state at a glance.'),
48973
+ ],
48677
48974
  }),
48678
48975
  createEntry({
48679
48976
  id: 'button-toggle',
@@ -48789,6 +49086,9 @@ const DYNAMIC_FIELDS_PLAYGROUND_CATALOG = [
48789
49086
  avoidWhen: ['texto longo', 'validacao complexa'],
48790
49087
  dataSourceKind: 'local',
48791
49088
  apiPath: jsonApiPath('inline-input/pdx-inline-input.json-api.md'),
49089
+ stateRecipes: [
49090
+ createDefaultSeedRecipe('Praxis', 'Seeded default preview to keep inline text examples informative from the first render.'),
49091
+ ],
48792
49092
  }),
48793
49093
  createEntry({
48794
49094
  id: 'inline-select',
@@ -48803,6 +49103,9 @@ const DYNAMIC_FIELDS_PLAYGROUND_CATALOG = [
48803
49103
  avoidWhen: ['lookup remoto grande'],
48804
49104
  dataSourceKind: 'mixed',
48805
49105
  apiPath: jsonApiPath('inline-select/pdx-inline-select.json-api.md'),
49106
+ stateRecipes: [
49107
+ createDefaultSeedRecipe('ALPHA', 'Seeded default preview to expose compact selected-pill rendering.'),
49108
+ ],
48806
49109
  }),
48807
49110
  createEntry({
48808
49111
  id: 'inline-searchable-select',
@@ -49000,6 +49303,9 @@ const DYNAMIC_FIELDS_PLAYGROUND_CATALOG = [
49000
49303
  avoidWhen: ['toolbar saturada ou data unica'],
49001
49304
  dataSourceKind: 'specialized',
49002
49305
  apiPath: jsonApiPath('inline-date-range/pdx-inline-date-range.json-api.md'),
49306
+ stateRecipes: [
49307
+ createDefaultSeedRecipe({ startDate: '2026-03-01', endDate: '2026-03-23' }, 'Seeded default preview to show a resolved inline range immediately.'),
49308
+ ],
49003
49309
  }),
49004
49310
  createEntry({
49005
49311
  id: 'inline-time',
@@ -49116,6 +49422,9 @@ const DYNAMIC_FIELDS_PLAYGROUND_CATALOG = [
49116
49422
  avoidWhen: ['false e null nao estao bem documentados no fluxo'],
49117
49423
  dataSourceKind: 'local',
49118
49424
  apiPath: jsonApiPath('inline-toggle/pdx-inline-toggle.json-api.md'),
49425
+ stateRecipes: [
49426
+ createDefaultSeedRecipe(true, 'Seeded default preview to show the compact boolean state in toolbar scenarios.'),
49427
+ ],
49119
49428
  }),
49120
49429
  ];
49121
49430
 
@@ -50952,5 +51261,5 @@ function supportsClearButtonControlType(controlType) {
50952
51261
  * Generated bundle index. Do not edit.
50953
51262
  */
50954
51263
 
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 };
51264
+ 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
51265
  //# sourceMappingURL=praxisui-dynamic-fields.mjs.map