@praxisui/dynamic-fields 9.0.4-rc.33 → 9.0.4-rc.34

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.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": "1.0.0",
3
- "generatedAt": "2026-08-05T13:43:39.162Z",
3
+ "generatedAt": "2026-08-05T14:45:22.888Z",
4
4
  "packageName": "@praxisui/dynamic-fields",
5
- "packageVersion": "9.0.4-rc.33",
5
+ "packageVersion": "9.0.4-rc.34",
6
6
  "sourceRegistry": "praxis-component-registry-ingestion",
7
7
  "sourceRegistryVersion": "1.0.0",
8
8
  "componentCount": 76,
@@ -27,7 +27,7 @@ import { MatInputModule } from '@angular/material/input';
27
27
  import * as i1$2 from '@angular/material/button';
28
28
  import { MatIconButton, MatButtonModule } from '@angular/material/button';
29
29
  import * as i6 from '@angular/material/datepicker';
30
- import { MatDatepickerModule, DateRange } from '@angular/material/datepicker';
30
+ import { MatDatepickerIntl, MatDatepickerModule, DateRange } from '@angular/material/datepicker';
31
31
  import { NativeDateAdapter, DateAdapter, MatNativeDateModule, MAT_NATIVE_DATE_FORMATS, MAT_DATE_FORMATS } from '@angular/material/core';
32
32
  import * as i2$4 from '@angular/cdk/overlay';
33
33
  import { CdkOverlayOrigin, CdkConnectedOverlay, OverlayModule } from '@angular/cdk/overlay';
@@ -198,6 +198,20 @@ const PRAXIS_DYNAMIC_FIELDS_EN_US = {
198
198
  'praxis.dynamicFields.inlineDistance.display.upto': '<= {{value}}',
199
199
  'praxis.dynamicFields.inlineDistance.preset.from': '{{value}}+ {{unit}}',
200
200
  'praxis.dynamicFields.dateRange.shortcutsAriaLabel': 'Date range shortcuts',
201
+ 'praxis.dynamicFields.datepicker.calendarLabel': 'Calendar',
202
+ 'praxis.dynamicFields.datepicker.openCalendarLabel': 'Open calendar',
203
+ 'praxis.dynamicFields.datepicker.closeCalendarLabel': 'Close calendar',
204
+ 'praxis.dynamicFields.datepicker.previousMonthLabel': 'Previous month',
205
+ 'praxis.dynamicFields.datepicker.nextMonthLabel': 'Next month',
206
+ 'praxis.dynamicFields.datepicker.previousYearLabel': 'Previous year',
207
+ 'praxis.dynamicFields.datepicker.nextYearLabel': 'Next year',
208
+ 'praxis.dynamicFields.datepicker.previousMultiYearLabel': 'Previous 24 years',
209
+ 'praxis.dynamicFields.datepicker.nextMultiYearLabel': 'Next 24 years',
210
+ 'praxis.dynamicFields.datepicker.switchToMonthViewLabel': 'Choose date',
211
+ 'praxis.dynamicFields.datepicker.switchToMultiYearViewLabel': 'Choose month and year',
212
+ 'praxis.dynamicFields.datepicker.startDateLabel': 'Start date',
213
+ 'praxis.dynamicFields.datepicker.endDateLabel': 'End date',
214
+ 'praxis.dynamicFields.datepicker.comparisonDateLabel': 'Comparison date',
201
215
  'praxis.dynamicFields.dateRange.presets.today': 'Today',
202
216
  'praxis.dynamicFields.dateRange.presets.yesterday': 'Yesterday',
203
217
  'praxis.dynamicFields.dateRange.presets.thisWeek': 'This week',
@@ -618,6 +632,20 @@ const PRAXIS_DYNAMIC_FIELDS_PT_BR = {
618
632
  'praxis.dynamicFields.inlineDistance.display.upto': '<= {{value}}',
619
633
  'praxis.dynamicFields.inlineDistance.preset.from': '{{value}}+ {{unit}}',
620
634
  'praxis.dynamicFields.dateRange.shortcutsAriaLabel': 'Atalhos de período de datas',
635
+ 'praxis.dynamicFields.datepicker.calendarLabel': 'Calendário',
636
+ 'praxis.dynamicFields.datepicker.openCalendarLabel': 'Abrir calendário',
637
+ 'praxis.dynamicFields.datepicker.closeCalendarLabel': 'Fechar calendário',
638
+ 'praxis.dynamicFields.datepicker.previousMonthLabel': 'Mês anterior',
639
+ 'praxis.dynamicFields.datepicker.nextMonthLabel': 'Próximo mês',
640
+ 'praxis.dynamicFields.datepicker.previousYearLabel': 'Ano anterior',
641
+ 'praxis.dynamicFields.datepicker.nextYearLabel': 'Próximo ano',
642
+ 'praxis.dynamicFields.datepicker.previousMultiYearLabel': '24 anos anteriores',
643
+ 'praxis.dynamicFields.datepicker.nextMultiYearLabel': 'Próximos 24 anos',
644
+ 'praxis.dynamicFields.datepicker.switchToMonthViewLabel': 'Escolher data',
645
+ 'praxis.dynamicFields.datepicker.switchToMultiYearViewLabel': 'Escolher mês e ano',
646
+ 'praxis.dynamicFields.datepicker.startDateLabel': 'Data inicial',
647
+ 'praxis.dynamicFields.datepicker.endDateLabel': 'Data final',
648
+ 'praxis.dynamicFields.datepicker.comparisonDateLabel': 'Data de comparação',
621
649
  'praxis.dynamicFields.dateRange.presets.today': 'Hoje',
622
650
  'praxis.dynamicFields.dateRange.presets.yesterday': 'Ontem',
623
651
  'praxis.dynamicFields.dateRange.presets.thisWeek': 'Esta semana',
@@ -7004,6 +7032,53 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
7004
7032
  type: Injectable
7005
7033
  }], ctorParameters: () => [] });
7006
7034
 
7035
+ /**
7036
+ * Keeps Angular Material calendar accessibility labels aligned with the
7037
+ * canonical Praxis locale used by the field runtime.
7038
+ */
7039
+ class PraxisMatDatepickerIntl extends MatDatepickerIntl {
7040
+ i18n = inject(PraxisI18nService);
7041
+ currentLocale = '';
7042
+ constructor() {
7043
+ super();
7044
+ this.setLocale(this.i18n.getLocale());
7045
+ }
7046
+ setLocale(locale) {
7047
+ const normalizedLocale = locale.trim() || 'pt-BR';
7048
+ if (normalizedLocale === this.currentLocale) {
7049
+ return;
7050
+ }
7051
+ this.currentLocale = normalizedLocale;
7052
+ this.calendarLabel = this.translate(normalizedLocale, 'calendarLabel', 'Calendar');
7053
+ this.openCalendarLabel = this.translate(normalizedLocale, 'openCalendarLabel', 'Open calendar');
7054
+ this.closeCalendarLabel = this.translate(normalizedLocale, 'closeCalendarLabel', 'Close calendar');
7055
+ this.prevMonthLabel = this.translate(normalizedLocale, 'previousMonthLabel', 'Previous month');
7056
+ this.nextMonthLabel = this.translate(normalizedLocale, 'nextMonthLabel', 'Next month');
7057
+ this.prevYearLabel = this.translate(normalizedLocale, 'previousYearLabel', 'Previous year');
7058
+ this.nextYearLabel = this.translate(normalizedLocale, 'nextYearLabel', 'Next year');
7059
+ this.prevMultiYearLabel = this.translate(normalizedLocale, 'previousMultiYearLabel', 'Previous 24 years');
7060
+ this.nextMultiYearLabel = this.translate(normalizedLocale, 'nextMultiYearLabel', 'Next 24 years');
7061
+ this.switchToMonthViewLabel = this.translate(normalizedLocale, 'switchToMonthViewLabel', 'Choose date');
7062
+ this.switchToMultiYearViewLabel = this.translate(normalizedLocale, 'switchToMultiYearViewLabel', 'Choose month and year');
7063
+ this.startDateLabel = this.translate(normalizedLocale, 'startDateLabel', 'Start date');
7064
+ this.endDateLabel = this.translate(normalizedLocale, 'endDateLabel', 'End date');
7065
+ this.comparisonDateLabel = this.translate(normalizedLocale, 'comparisonDateLabel', 'Comparison date');
7066
+ this.changes.next();
7067
+ }
7068
+ translate(locale, key, fallback) {
7069
+ const translationKey = `praxis.dynamicFields.datepicker.${key}`;
7070
+ const builtInDictionary = locale.toLowerCase().startsWith('pt')
7071
+ ? PRAXIS_DYNAMIC_FIELDS_PT_BR
7072
+ : PRAXIS_DYNAMIC_FIELDS_EN_US;
7073
+ return this.i18n.tForLocale(locale, translationKey, undefined, builtInDictionary[translationKey] ?? fallback, 'dynamicFields');
7074
+ }
7075
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisMatDatepickerIntl, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
7076
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisMatDatepickerIntl });
7077
+ }
7078
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisMatDatepickerIntl, decorators: [{
7079
+ type: Injectable
7080
+ }], ctorParameters: () => [] });
7081
+
7007
7082
  class PraxisDateRangeShortcutsOverlayComponent {
7008
7083
  items = [];
7009
7084
  activeId = null;
@@ -7136,6 +7211,7 @@ class MaterialDateRangeComponent extends SimpleBaseInputComponent {
7136
7211
  shortcutOverlayViewportMargin = 12;
7137
7212
  pickerOpen = false;
7138
7213
  dateAdapter = inject(DateAdapter);
7214
+ datepickerIntl = inject(MatDatepickerIntl);
7139
7215
  picker;
7140
7216
  endDateInput;
7141
7217
  shouldShowShortcuts = () => !!(this.metadata()?.showShortcuts);
@@ -7537,6 +7613,7 @@ class MaterialDateRangeComponent extends SimpleBaseInputComponent {
7537
7613
  if (adapter.getLocale?.() !== locale) {
7538
7614
  this.dateAdapter.setLocale(locale);
7539
7615
  }
7616
+ this.datepickerIntl.setLocale(locale);
7540
7617
  }
7541
7618
  resolveBuiltinPresetLabel(id, fallback, overrides) {
7542
7619
  const ptBrFallbacks = {
@@ -7567,6 +7644,7 @@ class MaterialDateRangeComponent extends SimpleBaseInputComponent {
7567
7644
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: MaterialDateRangeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
7568
7645
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: MaterialDateRangeComponent, isStandalone: true, selector: "pdx-material-date-range", inputs: { readonlyMode: "readonlyMode", disabledMode: "disabledMode", visible: "visible", presentationMode: "presentationMode", metadataInput: ["metadata", "metadataInput"] }, outputs: { validationChange: "validationChange" }, host: { properties: { "class": "componentCssClasses()", "class.praxis-disabled": "disabledMode", "style.display": "visible ? \"block\" : \"none\"", "attr.aria-hidden": "visible ? null : \"true\"", "style.width": "\"100%\"", "attr.data-field-type": "\"dateRange\"", "attr.data-field-name": "metadata()?.name", "attr.data-component-id": "componentId()" } }, providers: [
7569
7646
  { provide: DateAdapter, useClass: PraxisNativeDateAdapter },
7647
+ { provide: MatDatepickerIntl, useClass: PraxisMatDatepickerIntl },
7570
7648
  { provide: MAT_DATE_FORMATS, useValue: MAT_NATIVE_DATE_FORMATS },
7571
7649
  {
7572
7650
  provide: NG_VALUE_ACCESSOR,
@@ -7884,6 +7962,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
7884
7962
  PraxisDateRangeShortcutsOverlayComponent
7885
7963
  ], providers: [
7886
7964
  { provide: DateAdapter, useClass: PraxisNativeDateAdapter },
7965
+ { provide: MatDatepickerIntl, useClass: PraxisMatDatepickerIntl },
7887
7966
  { provide: MAT_DATE_FORMATS, useValue: MAT_NATIVE_DATE_FORMATS },
7888
7967
  {
7889
7968
  provide: NG_VALUE_ACCESSOR,
@@ -7950,6 +8029,7 @@ class MaterialDatepickerComponent extends SimpleBaseInputComponent {
7950
8029
  /** Emits whenever validation state changes. */
7951
8030
  validationChange = output();
7952
8031
  dateAdapter = inject(DateAdapter);
8032
+ datepickerIntl = inject(MatDatepickerIntl);
7953
8033
  // Praxis Field States
7954
8034
  readonlyMode = false;
7955
8035
  disabledMode = false;
@@ -8069,13 +8149,13 @@ class MaterialDatepickerComponent extends SimpleBaseInputComponent {
8069
8149
  }
8070
8150
  applyDateLocale(metadata) {
8071
8151
  const locale = this.resolveMetadataLocale(metadata);
8152
+ const effectiveLocale = locale || this.i18n.getLocale().trim() || 'pt-BR';
8072
8153
  const dateOrder = this.resolveMetadataDateOrder(metadata);
8073
8154
  if (this.dateAdapter instanceof PraxisNativeDateAdapter) {
8074
8155
  this.dateAdapter.setDateOrder(dateOrder);
8075
8156
  }
8076
- if (locale) {
8077
- this.dateAdapter.setLocale(locale);
8078
- }
8157
+ this.dateAdapter.setLocale(effectiveLocale);
8158
+ this.datepickerIntl.setLocale(effectiveLocale);
8079
8159
  this.applyNativeDisplayMask();
8080
8160
  }
8081
8161
  resolveMetadataLocale(metadata) {
@@ -8125,6 +8205,7 @@ class MaterialDatepickerComponent extends SimpleBaseInputComponent {
8125
8205
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: MaterialDatepickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
8126
8206
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: MaterialDatepickerComponent, isStandalone: true, selector: "pdx-material-datepicker", inputs: { readonlyMode: "readonlyMode", disabledMode: "disabledMode", visible: "visible", presentationMode: "presentationMode" }, outputs: { validationChange: "validationChange" }, host: { properties: { "class": "componentCssClasses()", "class.praxis-disabled": "disabledMode", "style.display": "visible ? null : \"none\"", "attr.aria-hidden": "visible ? null : \"true\"", "attr.data-field-type": "\"date\"", "attr.data-field-name": "metadata()?.name", "attr.data-component-id": "componentId()" } }, providers: [
8127
8207
  { provide: DateAdapter, useClass: PraxisNativeDateAdapter },
8208
+ { provide: MatDatepickerIntl, useClass: PraxisMatDatepickerIntl },
8128
8209
  { provide: MAT_DATE_FORMATS, useValue: MAT_NATIVE_DATE_FORMATS },
8129
8210
  {
8130
8211
  provide: NG_VALUE_ACCESSOR,
@@ -8355,6 +8436,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
8355
8436
  ReactiveFormsModule
8356
8437
  ], providers: [
8357
8438
  { provide: DateAdapter, useClass: PraxisNativeDateAdapter },
8439
+ { provide: MatDatepickerIntl, useClass: PraxisMatDatepickerIntl },
8358
8440
  { provide: MAT_DATE_FORMATS, useValue: MAT_NATIVE_DATE_FORMATS },
8359
8441
  {
8360
8442
  provide: NG_VALUE_ACCESSOR,
@@ -40045,6 +40127,7 @@ class InlineDateRangeComponent extends MaterialDateRangeComponent {
40045
40127
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: InlineDateRangeComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
40046
40128
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: InlineDateRangeComponent, isStandalone: true, selector: "pdx-inline-date-range", host: { listeners: { "window:resize": "onViewportResize()" }, properties: { "class": "componentCssClasses()", "class.praxis-disabled": "disabledMode", "style.display": "visible ? \"inline-block\" : \"none\"", "attr.aria-hidden": "visible ? null : \"true\"", "style.width.px": "inlineWidthPx || null", "style.--pdx-inline-date-range-shell-width": "inlineWidthPx ? inlineWidthPx + \"px\" : null", "attr.data-field-type": "\"inlineDateRange\"", "attr.data-field-name": "metadata()?.name", "attr.data-component-id": "componentId()" } }, providers: [
40047
40129
  { provide: DateAdapter, useClass: PraxisNativeDateAdapter },
40130
+ { provide: MatDatepickerIntl, useClass: PraxisMatDatepickerIntl },
40048
40131
  { provide: MAT_DATE_FORMATS, useValue: MAT_NATIVE_DATE_FORMATS },
40049
40132
  {
40050
40133
  provide: NG_VALUE_ACCESSOR,
@@ -40544,6 +40627,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
40544
40627
  </div>
40545
40628
  `, providers: [
40546
40629
  { provide: DateAdapter, useClass: PraxisNativeDateAdapter },
40630
+ { provide: MatDatepickerIntl, useClass: PraxisMatDatepickerIntl },
40547
40631
  { provide: MAT_DATE_FORMATS, useValue: MAT_NATIVE_DATE_FORMATS },
40548
40632
  {
40549
40633
  provide: NG_VALUE_ACCESSOR,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@praxisui/dynamic-fields",
3
- "version": "9.0.4-rc.33",
3
+ "version": "9.0.4-rc.34",
4
4
  "description": "Angular Material-based dynamic form fields for Praxis UI with lazy loading and metadata-driven rendering.",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0",
@@ -11,8 +11,8 @@
11
11
  "@angular/platform-browser": "^21.0.0",
12
12
  "@angular/router": "^21.0.0",
13
13
  "rxjs": "^7.8.0",
14
- "@praxisui/core": "^9.0.4-rc.33",
15
- "@praxisui/cron-builder": "^9.0.4-rc.33"
14
+ "@praxisui/core": "^9.0.4-rc.34",
15
+ "@praxisui/cron-builder": "^9.0.4-rc.34"
16
16
  },
17
17
  "dependencies": {
18
18
  "libphonenumber-js": "^1.12.41",
@@ -170,6 +170,7 @@ Nao ha paths experimentais confirmados no contrato publico desta revisao.
170
170
  ### Manual date parsing
171
171
 
172
172
  - Digitacao manual usa `PraxisNativeDateAdapter` e respeita o `LOCALE_ID` do host.
173
+ - Rotulos acessiveis do calendario Material usam o locale canonico do `PraxisI18nService` via `PraxisMatDatepickerIntl`, mantendo navegacao, atalhos e leitores de tela no mesmo idioma.
173
174
  - Em locales nao ingleses, como `pt-BR`, datas numericas sao interpretadas como `dd/MM/yyyy`.
174
175
  - Em locales ingleses, datas numericas sao interpretadas como `MM/dd/yyyy`.
175
176
  - Strings ISO date-only (`YYYY-MM-DD`) sao tratadas como data local, sem deslocamento por timezone.
@@ -164,7 +164,8 @@ Nao ha paths experimentais confirmados no contrato publico desta revisao.
164
164
 
165
165
  ### Manual date parsing
166
166
 
167
- - Digitacao manual usa `PraxisNativeDateAdapter` e respeita `metadata.locale`; quando ausente, usa o `LOCALE_ID` do host.
167
+ - Digitacao manual usa `PraxisNativeDateAdapter` e respeita `metadata.locale`; quando ausente, usa o locale canonico do `PraxisI18nService`.
168
+ - Rotulos visiveis e acessiveis do calendario Material (abrir, fechar, navegacao entre meses/anos e alternancia de visao) usam o mesmo locale efetivo do campo via `PraxisMatDatepickerIntl`.
168
169
  - Em locales nao ingleses, como `pt-BR`, datas numericas sao interpretadas como `dd/MM/yyyy`.
169
170
  - Em locales ingleses, datas numericas sao interpretadas como `MM/dd/yyyy`.
170
171
  - `metadata.locale` e ordem de data sao independentes: `displayFormat`, `dateFormat` ou `mask` como `dd/MM/yyyy` habilitam apresentacao day-first; `MM/dd/yyyy` habilita month-first.
@@ -2004,6 +2004,7 @@ declare class MaterialDatepickerComponent extends SimpleBaseInputComponent {
2004
2004
  /** Emits whenever validation state changes. */
2005
2005
  readonly validationChange: _angular_core.OutputEmitterRef<ValidationErrors | null>;
2006
2006
  private readonly dateAdapter;
2007
+ private readonly datepickerIntl;
2007
2008
  readonlyMode: boolean;
2008
2009
  disabledMode: boolean;
2009
2010
  visible: boolean;
@@ -2077,6 +2078,7 @@ declare class MaterialDateRangeComponent extends SimpleBaseInputComponent implem
2077
2078
  readonly shortcutOverlayViewportMargin = 12;
2078
2079
  private pickerOpen;
2079
2080
  private readonly dateAdapter;
2081
+ private readonly datepickerIntl;
2080
2082
  picker: MatDateRangePicker<Date>;
2081
2083
  private endDateInput?;
2082
2084
  readonly shouldShowShortcuts: () => boolean;