valtech-components 4.0.71 → 4.0.73

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.
Files changed (46) hide show
  1. package/esm2022/lib/components/molecules/chip-group/chip-group.component.mjs +2 -4
  2. package/esm2022/lib/components/molecules/command-display/command-display.component.mjs +2 -4
  3. package/esm2022/lib/components/molecules/comment/comment.component.mjs +2 -4
  4. package/esm2022/lib/components/molecules/content-reaction/content-reaction.component.mjs +2 -4
  5. package/esm2022/lib/components/molecules/date-input/date-input.component.mjs +2 -4
  6. package/esm2022/lib/components/molecules/date-picker/date-picker.component.mjs +2 -4
  7. package/esm2022/lib/components/molecules/features-list/features-list.component.mjs +2 -4
  8. package/esm2022/lib/components/molecules/font-size-selector/font-size-selector.component.mjs +2 -4
  9. package/esm2022/lib/components/molecules/pagination/pagination.component.mjs +2 -4
  10. package/esm2022/lib/components/molecules/password-input/password-input.component.mjs +2 -4
  11. package/esm2022/lib/components/molecules/permission-selector/permission-selector.component.mjs +2 -4
  12. package/esm2022/lib/components/molecules/rating/rating.component.mjs +2 -4
  13. package/esm2022/lib/components/molecules/ticket-card/ticket-card.component.mjs +2 -4
  14. package/esm2022/lib/components/organisms/about-view/about-view.component.mjs +2 -4
  15. package/esm2022/lib/components/organisms/account-view/account-view.component.mjs +14 -8
  16. package/esm2022/lib/components/organisms/api-key-create-modal/api-key-create-modal.component.mjs +3 -7
  17. package/esm2022/lib/components/organisms/api-keys-modal/api-keys-modal.component.mjs +3 -7
  18. package/esm2022/lib/components/organisms/api-keys-view/api-keys-view.component.mjs +2 -4
  19. package/esm2022/lib/components/organisms/auth-cta/auth-cta.component.mjs +2 -4
  20. package/esm2022/lib/components/organisms/create-org-modal/create-org-modal.component.mjs +2 -4
  21. package/esm2022/lib/components/organisms/delete-account-modal/delete-account-modal.component.mjs +2 -4
  22. package/esm2022/lib/components/organisms/edit-org-modal/edit-org-modal.component.mjs +2 -4
  23. package/esm2022/lib/components/organisms/field-list/field-list.component.mjs +2 -4
  24. package/esm2022/lib/components/organisms/invite-member-modal/invite-member-modal.component.mjs +2 -4
  25. package/esm2022/lib/components/organisms/member-detail-modal/member-detail-modal.component.mjs +3 -7
  26. package/esm2022/lib/components/organisms/member-import-modal/member-import-modal.component.mjs +3 -7
  27. package/esm2022/lib/components/organisms/notification-preferences-view/notification-preferences-view.component.mjs +2 -4
  28. package/esm2022/lib/components/organisms/notifications-view/notifications-view.component.mjs +2 -4
  29. package/esm2022/lib/components/organisms/org-info-sheet/org-info-sheet.component.mjs +2 -4
  30. package/esm2022/lib/components/organisms/organization-view/organization-view.component.mjs +4 -6
  31. package/esm2022/lib/components/organisms/permissions-view/permissions-view.component.mjs +2 -4
  32. package/esm2022/lib/components/organisms/preferences-view/preferences-view.component.mjs +2 -4
  33. package/esm2022/lib/components/organisms/profile-view/profile-view.component.mjs +2 -4
  34. package/esm2022/lib/components/organisms/qr-scanner/qr-scanner.component.mjs +2 -4
  35. package/esm2022/lib/components/organisms/security-view/security-view.component.mjs +2 -4
  36. package/esm2022/lib/components/organisms/settings-hub/settings-hub.component.mjs +3 -7
  37. package/esm2022/lib/components/organisms/share-profile-modal/share-profile-modal.component.mjs +2 -4
  38. package/esm2022/lib/components/organisms/switch-org-modal/switch-org-modal.component.mjs +2 -4
  39. package/esm2022/lib/components/organisms/transfer-ownership-modal/transfer-ownership-modal.component.mjs +3 -7
  40. package/esm2022/lib/services/i18n/i18n.service.mjs +21 -1
  41. package/esm2022/lib/version.mjs +2 -2
  42. package/fesm2022/valtech-components.mjs +80 -142
  43. package/fesm2022/valtech-components.mjs.map +1 -1
  44. package/lib/services/i18n/i18n.service.d.ts +7 -0
  45. package/lib/version.d.ts +1 -1
  46. package/package.json +1 -1
@@ -56,7 +56,7 @@ import { BrowserMultiFormatReader } from '@zxing/browser';
56
56
  * Current version of valtech-components.
57
57
  * This is automatically updated during the publish process.
58
58
  */
59
- const VERSION = '4.0.71';
59
+ const VERSION = '4.0.73';
60
60
 
61
61
  // Control de estado de refresco (singleton a nivel de módulo)
62
62
  let isRefreshing = false;
@@ -1664,6 +1664,26 @@ class I18nService {
1664
1664
  [namespace]: content,
1665
1665
  }));
1666
1666
  }
1667
+ /**
1668
+ * Registra defaults para un namespace, mezclando solo las keys ausentes por idioma.
1669
+ * A diferencia de `registerContent`, no sobreescribe keys que el consumer ya registró.
1670
+ * Úsalo en componentes de la lib para que sus defaults funcionen incluso cuando el
1671
+ * consumer registró el namespace de forma parcial.
1672
+ */
1673
+ registerDefaults(namespace, defaults) {
1674
+ this._content.update(store => {
1675
+ const existing = store[namespace];
1676
+ if (!existing)
1677
+ return { ...store, [namespace]: defaults };
1678
+ const merged = { ...existing };
1679
+ for (const lang of Object.keys(defaults)) {
1680
+ const defLang = defaults[lang] ?? {};
1681
+ const curLang = (existing[lang] ?? {});
1682
+ merged[lang] = { ...defLang, ...curLang };
1683
+ }
1684
+ return { ...store, [namespace]: merged };
1685
+ });
1686
+ }
1667
1687
  /**
1668
1688
  * Registra múltiples namespaces de una vez
1669
1689
  *
@@ -16046,9 +16066,7 @@ class DateInputComponent {
16046
16066
  */
16047
16067
  this.resolvedProps = {};
16048
16068
  // Auto-registro de defaults i18n (anti key-faltante → anti storm de CD).
16049
- if (!this.i18n.hasNamespace('DateInput')) {
16050
- this.i18n.registerContent('DateInput', DATE_INPUT_I18N);
16051
- }
16069
+ this.i18n.registerDefaults('DateInput', DATE_INPUT_I18N);
16052
16070
  }
16053
16071
  /** Done button text - from props or i18n default */
16054
16072
  get doneText() {
@@ -17097,9 +17115,7 @@ class FontSizeSelectorComponent {
17097
17115
  this.i18n = inject(I18nService);
17098
17116
  this.popoverId = `font-size-selector-${Math.random().toString(36).slice(2, 8)}`;
17099
17117
  this.currentSize = this.fontSizeService.size;
17100
- if (!this.i18n.hasNamespace('FontSizeSelector')) {
17101
- this.i18n.registerContent('FontSizeSelector', FONT_SIZE_SELECTOR_I18N);
17102
- }
17118
+ this.i18n.registerDefaults('FontSizeSelector', FONT_SIZE_SELECTOR_I18N);
17103
17119
  }
17104
17120
  get options() {
17105
17121
  return [
@@ -18036,9 +18052,7 @@ class PasswordInputComponent {
18036
18052
  */
18037
18053
  this.resolvedProps = {};
18038
18054
  this.hidePassword = true;
18039
- if (!this.i18n.hasNamespace('PasswordInput')) {
18040
- this.i18n.registerContent('PasswordInput', PASSWORD_INPUT_I18N);
18041
- }
18055
+ this.i18n.registerDefaults('PasswordInput', PASSWORD_INPUT_I18N);
18042
18056
  }
18043
18057
  /** Aria-label del botón mostrar/ocultar según el estado de visibilidad. */
18044
18058
  toggleLabel() {
@@ -20073,9 +20087,7 @@ class CommandDisplayComponent {
20073
20087
  this.i18n = inject(I18nService);
20074
20088
  /** Mensaje anunciado por el lector de pantalla al copiar. */
20075
20089
  this.copiedMessage = '';
20076
- if (!this.i18n.hasNamespace('CommandDisplay')) {
20077
- this.i18n.registerContent('CommandDisplay', COMMAND_DISPLAY_I18N);
20078
- }
20090
+ this.i18n.registerDefaults('CommandDisplay', COMMAND_DISPLAY_I18N);
20079
20091
  }
20080
20092
  copyLabel() {
20081
20093
  this.i18n.lang();
@@ -20665,9 +20677,7 @@ class PaginationComponent {
20665
20677
  this.pageChange = new EventEmitter();
20666
20678
  this.visiblePages = [];
20667
20679
  this.totalPages = 1;
20668
- if (!this.i18n.hasNamespace('Pagination')) {
20669
- this.i18n.registerContent('Pagination', PAGINATION_I18N);
20670
- }
20680
+ this.i18n.registerDefaults('Pagination', PAGINATION_I18N);
20671
20681
  }
20672
20682
  t(key) {
20673
20683
  this.i18n.lang();
@@ -21197,9 +21207,7 @@ class ChipGroupComponent {
21197
21207
  this.selectionChange = new EventEmitter();
21198
21208
  this.chipRemove = new EventEmitter();
21199
21209
  this.chipClick = new EventEmitter();
21200
- if (!this.i18n.hasNamespace('ChipGroup')) {
21201
- this.i18n.registerContent('ChipGroup', CHIP_GROUP_I18N);
21202
- }
21210
+ this.i18n.registerDefaults('ChipGroup', CHIP_GROUP_I18N);
21203
21211
  }
21204
21212
  ngOnInit() {
21205
21213
  this.resolveProps();
@@ -21395,9 +21403,7 @@ class RatingComponent {
21395
21403
  this.resolvedProps = {};
21396
21404
  this.ratingChange = new EventEmitter();
21397
21405
  this.hoverValue = null;
21398
- if (!this.i18n.hasNamespace('Rating')) {
21399
- this.i18n.registerContent('Rating', RATING_I18N);
21400
- }
21406
+ this.i18n.registerDefaults('Rating', RATING_I18N);
21401
21407
  }
21402
21408
  ngOnInit() {
21403
21409
  this.resolveProps();
@@ -22008,9 +22014,7 @@ class CommentComponent {
22008
22014
  this.loadMoreClick = new EventEmitter();
22009
22015
  this.collapseToggle = new EventEmitter();
22010
22016
  this.displayContent = '';
22011
- if (!this.i18n.hasNamespace('Comment')) {
22012
- this.i18n.registerContent('Comment', COMMENT_I18N);
22013
- }
22017
+ this.i18n.registerDefaults('Comment', COMMENT_I18N);
22014
22018
  }
22015
22019
  ngOnInit() {
22016
22020
  this.displayContent = this.props.content || this.props.contentFallback || '';
@@ -25953,9 +25957,7 @@ class FeaturesListComponent {
25953
25957
  }
25954
25958
  return color;
25955
25959
  });
25956
- if (!this.i18n.hasNamespace('FeaturesList')) {
25957
- this.i18n.registerContent('FeaturesList', FEATURES_LIST_I18N);
25958
- }
25960
+ this.i18n.registerDefaults('FeaturesList', FEATURES_LIST_I18N);
25959
25961
  }
25960
25962
  toggle() {
25961
25963
  this._expanded.set(!this._expanded());
@@ -29237,9 +29239,7 @@ class PermissionSelectorComponent {
29237
29239
  };
29238
29240
  });
29239
29241
  });
29240
- if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$l)) {
29241
- this.i18n.registerContent(DEFAULT_NAMESPACE$l, PERMISSION_SELECTOR_I18N);
29242
- }
29242
+ this.i18n.registerDefaults(DEFAULT_NAMESPACE$l, PERMISSION_SELECTOR_I18N);
29243
29243
  }
29244
29244
  toggleAction(code) {
29245
29245
  const sel = new Set(this.selected());
@@ -31896,9 +31896,7 @@ class DatePickerComponent {
31896
31896
  this.sheetOpen = signal(false);
31897
31897
  /** true cuando el calendario ya se construyó y es visible (fade-in). */
31898
31898
  this.calReady = signal(false);
31899
- if (!this.i18n.hasNamespace(I18N_NS$2)) {
31900
- this.i18n.registerContent(I18N_NS$2, DATE_PICKER_I18N);
31901
- }
31899
+ this.i18n.registerDefaults(I18N_NS$2, DATE_PICKER_I18N);
31902
31900
  }
31903
31901
  get triggerId() {
31904
31902
  if (!this.props.token) {
@@ -34546,9 +34544,7 @@ class ShareProfileModalComponent {
34546
34544
  }));
34547
34545
  this.displayName = computed(() => this.config().title || this.config().name || this.t('title'));
34548
34546
  this.caption = computed(() => this.config().caption || this.t('caption'));
34549
- if (!this.i18n.hasNamespace('ShareProfileModal')) {
34550
- this.i18n.registerContent('ShareProfileModal', SHARE_PROFILE_MODAL_I18N);
34551
- }
34547
+ this.i18n.registerDefaults('ShareProfileModal', SHARE_PROFILE_MODAL_I18N);
34552
34548
  }
34553
34549
  t(key) {
34554
34550
  this.i18n.lang();
@@ -44023,9 +44019,7 @@ class ProfileViewComponent {
44023
44019
  // Auto-registro i18n — respeta override del consumer. El namespace puede
44024
44020
  // venir de @Input.config o del route data; lo resolvemos acá.
44025
44021
  const ns = this.ns;
44026
- if (!this.i18n.hasNamespace(ns)) {
44027
- this.i18n.registerContent(ns, PROFILE_VIEW_I18N);
44028
- }
44022
+ this.i18n.registerDefaults(ns, PROFILE_VIEW_I18N);
44029
44023
  this.nav.setBackHeader('pageTitle', ns, { withMenu: true });
44030
44024
  connectPageRefresh(() => this.loadFromApi());
44031
44025
  effect(onCleanup => {
@@ -44901,9 +44895,7 @@ class PreferencesViewComponent {
44901
44895
  // Auto-registro i18n — respeta override del consumer. El namespace puede
44902
44896
  // venir de @Input.config o del route data; lo resolvemos acá.
44903
44897
  const ns = this.ns;
44904
- if (!this.i18n.hasNamespace(ns)) {
44905
- this.i18n.registerContent(ns, PREFERENCES_VIEW_I18N);
44906
- }
44898
+ this.i18n.registerDefaults(ns, PREFERENCES_VIEW_I18N);
44907
44899
  this.nav.setBackHeader('pageTitle', ns, { withMenu: true });
44908
44900
  }
44909
44901
  async onThemeChange(value) {
@@ -45439,13 +45431,9 @@ class SettingsHubComponent {
45439
45431
  // Auto-registro i18n — respeta override del consumer. Los namespaces pueden
45440
45432
  // venir de @Input.config o del route data; los resolvemos acá.
45441
45433
  const labelsNs = this.labelsNs;
45442
- if (!this.i18n.hasNamespace(labelsNs)) {
45443
- this.i18n.registerContent(labelsNs, SETTINGS_HUB_LABELS_I18N);
45444
- }
45434
+ this.i18n.registerDefaults(labelsNs, SETTINGS_HUB_LABELS_I18N);
45445
45435
  const pageNs = this.pageNs;
45446
- if (!this.i18n.hasNamespace(pageNs)) {
45447
- this.i18n.registerContent(pageNs, SETTINGS_HUB_PAGE_I18N);
45448
- }
45436
+ this.i18n.registerDefaults(pageNs, SETTINGS_HUB_PAGE_I18N);
45449
45437
  this.nav.setBackHeader('pageTitle', pageNs, { withMenu: true });
45450
45438
  }
45451
45439
  onActionClick(action) {
@@ -46689,9 +46677,7 @@ class SecurityViewComponent {
46689
46677
  },
46690
46678
  }));
46691
46679
  const ns = this.ns;
46692
- if (!this.i18n.hasNamespace(ns)) {
46693
- this.i18n.registerContent(ns, SECURITY_VIEW_I18N);
46694
- }
46680
+ this.i18n.registerDefaults(ns, SECURITY_VIEW_I18N);
46695
46681
  this.nav.setBackHeader('pageTitle', ns, { withMenu: true });
46696
46682
  // Carga inicial de sesiones - recarga reactiva a cambio de locale para
46697
46683
  // que los textos y metadatos se mantengan frescos. Los devices solo se
@@ -47493,9 +47479,7 @@ class CreateOrgModalComponent {
47493
47479
  this.dismissed = new EventEmitter();
47494
47480
  this.created = new EventEmitter();
47495
47481
  this._busy = signal(false);
47496
- if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$h)) {
47497
- this.i18n.registerContent(DEFAULT_NAMESPACE$h, CREATE_ORG_MODAL_I18N);
47498
- }
47482
+ this.i18n.registerDefaults(DEFAULT_NAMESPACE$h, CREATE_ORG_MODAL_I18N);
47499
47483
  this.formMeta = signal(this.buildFormMeta());
47500
47484
  effect(() => {
47501
47485
  this.i18n.lang();
@@ -47858,9 +47842,7 @@ class DeleteAccountModalComponent {
47858
47842
  ],
47859
47843
  actions: this.submitBtn('delete-code-submit', 'confirmCta'),
47860
47844
  }));
47861
- if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$g)) {
47862
- this.i18n.registerContent(DEFAULT_NAMESPACE$g, DELETE_ACCOUNT_MODAL_I18N);
47863
- }
47845
+ this.i18n.registerDefaults(DEFAULT_NAMESPACE$g, DELETE_ACCOUNT_MODAL_I18N);
47864
47846
  }
47865
47847
  submitBtn(token, textKey) {
47866
47848
  return {
@@ -48128,9 +48110,7 @@ class OrgInfoSheetComponent {
48128
48110
  ];
48129
48111
  });
48130
48112
  addIcons({ peopleOutline, swapHorizontalOutline, mailOutline, codeSlashOutline, shieldCheckmarkOutline, warningOutline });
48131
- if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$f)) {
48132
- this.i18n.registerContent(DEFAULT_NAMESPACE$f, ORG_INFO_SHEET_I18N);
48133
- }
48113
+ this.i18n.registerDefaults(DEFAULT_NAMESPACE$f, ORG_INFO_SHEET_I18N);
48134
48114
  }
48135
48115
  dismiss() {
48136
48116
  this._modalRef?.dismiss(null, 'cancel');
@@ -48347,9 +48327,7 @@ class SwitchOrgModalComponent {
48347
48327
  return list;
48348
48328
  return list.filter(o => o.name.toLowerCase().includes(q));
48349
48329
  });
48350
- if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$e)) {
48351
- this.i18n.registerContent(DEFAULT_NAMESPACE$e, SWITCH_ORG_MODAL_I18N);
48352
- }
48330
+ this.i18n.registerDefaults(DEFAULT_NAMESPACE$e, SWITCH_ORG_MODAL_I18N);
48353
48331
  this.loadOrgs();
48354
48332
  }
48355
48333
  onQueryChange(value) {
@@ -48889,9 +48867,7 @@ class AccountViewComponent {
48889
48867
  token: 'account-switch',
48890
48868
  }));
48891
48869
  const ns = this.ns;
48892
- if (!this.i18n.hasNamespace(ns)) {
48893
- this.i18n.registerContent(ns, ACCOUNT_VIEW_I18N);
48894
- }
48870
+ this.i18n.registerDefaults(ns, ACCOUNT_VIEW_I18N);
48895
48871
  this.nav.setBackHeader('pageTitle', ns, { withMenu: true });
48896
48872
  this.loadOrgs();
48897
48873
  this.loadPendingInvites();
@@ -49130,7 +49106,11 @@ class AccountViewComponent {
49130
49106
  <div class="org-card org-card--active">
49131
49107
  <div class="org-card__icon">
49132
49108
  @if (activeOrg()?.logoUrl && !activeOrgLogoFailed()) {
49133
- <img [src]="activeOrg()!.logoUrl!" [alt]="activeOrg()?.name ?? ''" (error)="activeOrgLogoFailed.set(true)" />
49109
+ <img
49110
+ [src]="activeOrg()!.logoUrl!"
49111
+ [alt]="activeOrg()?.name ?? ''"
49112
+ (error)="activeOrgLogoFailed.set(true)"
49113
+ />
49134
49114
  } @else {
49135
49115
  <ion-icon name="business-outline" />
49136
49116
  }
@@ -49242,7 +49222,7 @@ class AccountViewComponent {
49242
49222
  (dismissed)="deleteAccountOpen.set(false)"
49243
49223
  />
49244
49224
  </div>
49245
- `, isInline: true, styles: [".page{padding:16px 0;max-width:720px;margin:0 auto}.page-header{margin-bottom:16px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.settings-section val-title{display:block;margin-bottom:12px}.section-body{display:flex;flex-direction:column;gap:10px}.row-actions{margin-top:12px}.row-actions--gap{display:flex;flex-wrap:wrap;gap:8px}.section-header-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.org-new-cta-card{display:block;margin-top:12px}.orgs-empty-card{background:var(--ion-color-secondary-tint, rgba(var(--ion-color-secondary-rgb, 130, 101, 208), .2));border-radius:18px;padding:18px 16px 12px;display:flex;flex-direction:column;gap:8px}.orgs-empty-card__main{display:flex;align-items:center;gap:10px}.orgs-empty-card__icon{font-size:20px;flex-shrink:0;color:var(--ion-color-dark)}.orgs-empty-card__text{font-size:.875rem;color:var(--ion-color-dark)}.orgs-empty-card__link{background:none;border:none;padding:0;cursor:pointer;font-size:.8125rem;color:var(--ion-color-primary);text-align:left;text-decoration:underline;text-underline-offset:2px;font-family:inherit}.orgs-list{display:flex;flex-direction:column;gap:8px}.org-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border-radius:12px;background:var(--ion-color-light, #f4f5f8);border:1.5px solid transparent;cursor:pointer;transition:background .15s,border-color .15s}.org-card:active{opacity:.75}.org-card--active{border-color:var(--ion-color-primary);background:color-mix(in srgb,var(--ion-color-primary) 8%,transparent)}:host-context(body.dark) .org-card,:host-context(html.ion-palette-dark) .org-card,:host-context([data-theme=\"dark\"]) .org-card{background:#ffffff0d}:host-context(body.dark) .org-card--active,:host-context(html.ion-palette-dark) .org-card--active,:host-context([data-theme=\"dark\"]) .org-card--active{background:color-mix(in srgb,var(--ion-color-primary) 15%,transparent)}.org-card__icon{width:40px;height:40px;border-radius:50%;background:color-mix(in srgb,var(--ion-color-primary) 15%,transparent);display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:20px;color:var(--ion-color-primary);overflow:hidden;img{width:100%;height:100%;object-fit:cover;border-radius:50%}}.org-card__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.org-card__name{font-weight:600;font-size:.95rem;color:var(--ion-color-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.org-card__meta{display:flex;flex-direction:column;gap:1px;margin-top:3px}.org-card__meta-item{font-size:.78rem;color:var(--ion-color-dark)}.org-card__meta-label{font-weight:600;color:var(--ion-color-dark);margin-right:4px}.org-card__end{display:flex;align-items:center;gap:8px;flex-shrink:0}.section-title-danger{display:flex;align-items:center;gap:8px}.section-title-danger val-title{display:block}.danger-icon{display:block;font-size:1.125rem;color:var(--ion-color-warning-shade, #d4a017);flex-shrink:0}.settings-section--danger{background:color-mix(in srgb,var(--ion-color-danger) 4%,transparent);border-radius:14px;padding:16px;margin:0 -4px}:host-context(body.dark) .settings-section--danger,:host-context(html.ion-palette-dark) .settings-section--danger,:host-context([data-theme=\"dark\"]) .settings-section--danger{background:color-mix(in srgb,var(--ion-color-danger) 8%,transparent)}\n"], dependencies: [{ kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: EmptyStateComponent, selector: "val-empty-state", inputs: ["props"] }, { kind: "component", type: SkeletonLayoutComponent, selector: "val-skeleton-layout", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: CtaCardComponent, selector: "val-cta-card", inputs: ["props"], outputs: ["onAction"] }, { kind: "component", type: InvitationCardComponent, selector: "val-invitation-card", inputs: ["props"], outputs: ["onAccept", "onDecline"] }, { kind: "component", type: CreateOrgModalComponent, selector: "val-create-org-modal", inputs: ["i18nNamespace", "isOpen"], outputs: ["dismissed", "created"] }, { kind: "component", type: DeleteAccountModalComponent, selector: "val-delete-account-modal", inputs: ["i18nNamespace", "isOpen"], outputs: ["dismissed"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] }); }
49225
+ `, isInline: true, styles: [".page{padding:16px 0;max-width:720px;margin:0 auto}.page-header{margin-bottom:16px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.settings-section val-title{display:block;margin-bottom:12px}.section-body{display:flex;flex-direction:column;gap:10px}.row-actions{margin-top:12px}.row-actions--gap{display:flex;flex-wrap:wrap;gap:8px}.section-header-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.org-new-cta-card{display:block;margin-top:12px}.orgs-empty-card{background:var(--ion-color-secondary-tint, rgba(var(--ion-color-secondary-rgb, 130, 101, 208), .2));border-radius:18px;padding:18px 16px 12px;display:flex;flex-direction:column;gap:8px}.orgs-empty-card__main{display:flex;align-items:center;gap:10px}.orgs-empty-card__icon{font-size:20px;flex-shrink:0;color:var(--ion-color-dark)}.orgs-empty-card__text{font-size:.875rem;color:var(--ion-color-dark)}.orgs-empty-card__link{background:none;border:none;padding:0;cursor:pointer;font-size:.8125rem;color:var(--ion-color-primary);text-align:left;text-decoration:underline;text-underline-offset:2px;font-family:inherit}.orgs-list{display:flex;flex-direction:column;gap:8px}.org-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border-radius:12px;background:var(--ion-color-light, #f4f5f8);border:1.5px solid transparent;cursor:pointer;transition:background .15s,border-color .15s}.org-card:active{opacity:.75}.org-card--active{border-color:var(--ion-color-primary);background:color-mix(in srgb,var(--ion-color-primary) 8%,transparent)}:host-context(body.dark) .org-card,:host-context(html.ion-palette-dark) .org-card,:host-context([data-theme=\"dark\"]) .org-card{background:#ffffff0d}:host-context(body.dark) .org-card--active,:host-context(html.ion-palette-dark) .org-card--active,:host-context([data-theme=\"dark\"]) .org-card--active{background:color-mix(in srgb,var(--ion-color-primary) 15%,transparent)}.org-card__icon{width:40px;height:40px;border-radius:50%;background:color-mix(in srgb,var(--ion-color-primary) 15%,transparent);display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:20px;color:var(--ion-color-primary);overflow:hidden;img{width:100%;height:100%;object-fit:cover;border-radius:50%}}.org-card__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.org-card__name{font-weight:600;font-size:.95rem;color:var(--ion-color-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.org-card__meta{display:flex;flex-direction:column;gap:1px;margin-top:3px}.org-card__meta-item{font-size:.78rem;color:var(--ion-color-dark)}.org-card__meta-label{font-weight:600;color:var(--ion-color-dark);margin-right:4px}.org-card__end{display:flex;align-items:center;gap:8px;flex-shrink:0}.section-title-danger{display:flex;align-items:center;gap:8px;margin-bottom:12px}.section-title-danger val-title{display:block;margin:0}.danger-icon{display:block;font-size:1.125rem;color:var(--ion-color-warning-shade, #d4a017);flex-shrink:0}.settings-section--danger{background:color-mix(in srgb,var(--ion-color-danger) 4%,transparent);border-radius:14px;padding:16px;margin:0 -4px}:host-context(body.dark) .settings-section--danger,:host-context(html.ion-palette-dark) .settings-section--danger,:host-context([data-theme=\"dark\"]) .settings-section--danger{background:color-mix(in srgb,var(--ion-color-danger) 8%,transparent)}\n"], dependencies: [{ kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: EmptyStateComponent, selector: "val-empty-state", inputs: ["props"] }, { kind: "component", type: SkeletonLayoutComponent, selector: "val-skeleton-layout", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: CtaCardComponent, selector: "val-cta-card", inputs: ["props"], outputs: ["onAction"] }, { kind: "component", type: InvitationCardComponent, selector: "val-invitation-card", inputs: ["props"], outputs: ["onAccept", "onDecline"] }, { kind: "component", type: CreateOrgModalComponent, selector: "val-create-org-modal", inputs: ["i18nNamespace", "isOpen"], outputs: ["dismissed", "created"] }, { kind: "component", type: DeleteAccountModalComponent, selector: "val-delete-account-modal", inputs: ["i18nNamespace", "isOpen"], outputs: ["dismissed"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "pipe", type: TitleCasePipe, name: "titlecase" }] }); }
49246
49226
  }
49247
49227
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AccountViewComponent, decorators: [{
49248
49228
  type: Component,
@@ -49330,7 +49310,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
49330
49310
  <div class="org-card org-card--active">
49331
49311
  <div class="org-card__icon">
49332
49312
  @if (activeOrg()?.logoUrl && !activeOrgLogoFailed()) {
49333
- <img [src]="activeOrg()!.logoUrl!" [alt]="activeOrg()?.name ?? ''" (error)="activeOrgLogoFailed.set(true)" />
49313
+ <img
49314
+ [src]="activeOrg()!.logoUrl!"
49315
+ [alt]="activeOrg()?.name ?? ''"
49316
+ (error)="activeOrgLogoFailed.set(true)"
49317
+ />
49334
49318
  } @else {
49335
49319
  <ion-icon name="business-outline" />
49336
49320
  }
@@ -49442,7 +49426,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
49442
49426
  (dismissed)="deleteAccountOpen.set(false)"
49443
49427
  />
49444
49428
  </div>
49445
- `, styles: [".page{padding:16px 0;max-width:720px;margin:0 auto}.page-header{margin-bottom:16px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.settings-section val-title{display:block;margin-bottom:12px}.section-body{display:flex;flex-direction:column;gap:10px}.row-actions{margin-top:12px}.row-actions--gap{display:flex;flex-wrap:wrap;gap:8px}.section-header-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.org-new-cta-card{display:block;margin-top:12px}.orgs-empty-card{background:var(--ion-color-secondary-tint, rgba(var(--ion-color-secondary-rgb, 130, 101, 208), .2));border-radius:18px;padding:18px 16px 12px;display:flex;flex-direction:column;gap:8px}.orgs-empty-card__main{display:flex;align-items:center;gap:10px}.orgs-empty-card__icon{font-size:20px;flex-shrink:0;color:var(--ion-color-dark)}.orgs-empty-card__text{font-size:.875rem;color:var(--ion-color-dark)}.orgs-empty-card__link{background:none;border:none;padding:0;cursor:pointer;font-size:.8125rem;color:var(--ion-color-primary);text-align:left;text-decoration:underline;text-underline-offset:2px;font-family:inherit}.orgs-list{display:flex;flex-direction:column;gap:8px}.org-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border-radius:12px;background:var(--ion-color-light, #f4f5f8);border:1.5px solid transparent;cursor:pointer;transition:background .15s,border-color .15s}.org-card:active{opacity:.75}.org-card--active{border-color:var(--ion-color-primary);background:color-mix(in srgb,var(--ion-color-primary) 8%,transparent)}:host-context(body.dark) .org-card,:host-context(html.ion-palette-dark) .org-card,:host-context([data-theme=\"dark\"]) .org-card{background:#ffffff0d}:host-context(body.dark) .org-card--active,:host-context(html.ion-palette-dark) .org-card--active,:host-context([data-theme=\"dark\"]) .org-card--active{background:color-mix(in srgb,var(--ion-color-primary) 15%,transparent)}.org-card__icon{width:40px;height:40px;border-radius:50%;background:color-mix(in srgb,var(--ion-color-primary) 15%,transparent);display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:20px;color:var(--ion-color-primary);overflow:hidden;img{width:100%;height:100%;object-fit:cover;border-radius:50%}}.org-card__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.org-card__name{font-weight:600;font-size:.95rem;color:var(--ion-color-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.org-card__meta{display:flex;flex-direction:column;gap:1px;margin-top:3px}.org-card__meta-item{font-size:.78rem;color:var(--ion-color-dark)}.org-card__meta-label{font-weight:600;color:var(--ion-color-dark);margin-right:4px}.org-card__end{display:flex;align-items:center;gap:8px;flex-shrink:0}.section-title-danger{display:flex;align-items:center;gap:8px}.section-title-danger val-title{display:block}.danger-icon{display:block;font-size:1.125rem;color:var(--ion-color-warning-shade, #d4a017);flex-shrink:0}.settings-section--danger{background:color-mix(in srgb,var(--ion-color-danger) 4%,transparent);border-radius:14px;padding:16px;margin:0 -4px}:host-context(body.dark) .settings-section--danger,:host-context(html.ion-palette-dark) .settings-section--danger,:host-context([data-theme=\"dark\"]) .settings-section--danger{background:color-mix(in srgb,var(--ion-color-danger) 8%,transparent)}\n"] }]
49429
+ `, styles: [".page{padding:16px 0;max-width:720px;margin:0 auto}.page-header{margin-bottom:16px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.settings-section val-title{display:block;margin-bottom:12px}.section-body{display:flex;flex-direction:column;gap:10px}.row-actions{margin-top:12px}.row-actions--gap{display:flex;flex-wrap:wrap;gap:8px}.section-header-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.org-new-cta-card{display:block;margin-top:12px}.orgs-empty-card{background:var(--ion-color-secondary-tint, rgba(var(--ion-color-secondary-rgb, 130, 101, 208), .2));border-radius:18px;padding:18px 16px 12px;display:flex;flex-direction:column;gap:8px}.orgs-empty-card__main{display:flex;align-items:center;gap:10px}.orgs-empty-card__icon{font-size:20px;flex-shrink:0;color:var(--ion-color-dark)}.orgs-empty-card__text{font-size:.875rem;color:var(--ion-color-dark)}.orgs-empty-card__link{background:none;border:none;padding:0;cursor:pointer;font-size:.8125rem;color:var(--ion-color-primary);text-align:left;text-decoration:underline;text-underline-offset:2px;font-family:inherit}.orgs-list{display:flex;flex-direction:column;gap:8px}.org-card{display:flex;align-items:center;gap:14px;padding:14px 16px;border-radius:12px;background:var(--ion-color-light, #f4f5f8);border:1.5px solid transparent;cursor:pointer;transition:background .15s,border-color .15s}.org-card:active{opacity:.75}.org-card--active{border-color:var(--ion-color-primary);background:color-mix(in srgb,var(--ion-color-primary) 8%,transparent)}:host-context(body.dark) .org-card,:host-context(html.ion-palette-dark) .org-card,:host-context([data-theme=\"dark\"]) .org-card{background:#ffffff0d}:host-context(body.dark) .org-card--active,:host-context(html.ion-palette-dark) .org-card--active,:host-context([data-theme=\"dark\"]) .org-card--active{background:color-mix(in srgb,var(--ion-color-primary) 15%,transparent)}.org-card__icon{width:40px;height:40px;border-radius:50%;background:color-mix(in srgb,var(--ion-color-primary) 15%,transparent);display:flex;align-items:center;justify-content:center;flex-shrink:0;font-size:20px;color:var(--ion-color-primary);overflow:hidden;img{width:100%;height:100%;object-fit:cover;border-radius:50%}}.org-card__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.org-card__name{font-weight:600;font-size:.95rem;color:var(--ion-color-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.org-card__meta{display:flex;flex-direction:column;gap:1px;margin-top:3px}.org-card__meta-item{font-size:.78rem;color:var(--ion-color-dark)}.org-card__meta-label{font-weight:600;color:var(--ion-color-dark);margin-right:4px}.org-card__end{display:flex;align-items:center;gap:8px;flex-shrink:0}.section-title-danger{display:flex;align-items:center;gap:8px;margin-bottom:12px}.section-title-danger val-title{display:block;margin:0}.danger-icon{display:block;font-size:1.125rem;color:var(--ion-color-warning-shade, #d4a017);flex-shrink:0}.settings-section--danger{background:color-mix(in srgb,var(--ion-color-danger) 4%,transparent);border-radius:14px;padding:16px;margin:0 -4px}:host-context(body.dark) .settings-section--danger,:host-context(html.ion-palette-dark) .settings-section--danger,:host-context([data-theme=\"dark\"]) .settings-section--danger{background:color-mix(in srgb,var(--ion-color-danger) 8%,transparent)}\n"] }]
49446
49430
  }], ctorParameters: () => [], propDecorators: { config: [{
49447
49431
  type: Input
49448
49432
  }] } });
@@ -49622,9 +49606,7 @@ class EditOrgModalComponent {
49622
49606
  const name = this.org?.name ?? '';
49623
49607
  return name.slice(0, 2).toUpperCase() || '?';
49624
49608
  });
49625
- if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$c)) {
49626
- this.i18n.registerContent(DEFAULT_NAMESPACE$c, EDIT_ORG_MODAL_I18N);
49627
- }
49609
+ this.i18n.registerDefaults(DEFAULT_NAMESPACE$c, EDIT_ORG_MODAL_I18N);
49628
49610
  this.formMeta = signal(this.buildFormMeta());
49629
49611
  effect(() => {
49630
49612
  this.i18n.lang();
@@ -50024,9 +50006,7 @@ class InviteMemberModalComponent {
50024
50006
  state: this.sending() ? ComponentStates.WORKING : ComponentStates.ENABLED,
50025
50007
  }));
50026
50008
  this.searchSubject = new Subject();
50027
- if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$b)) {
50028
- this.i18n.registerContent(DEFAULT_NAMESPACE$b, INVITE_MEMBER_MODAL_I18N);
50029
- }
50009
+ this.i18n.registerDefaults(DEFAULT_NAMESPACE$b, INVITE_MEMBER_MODAL_I18N);
50030
50010
  this.roleSub = this.roleControl.valueChanges.subscribe(v => {
50031
50011
  if (v)
50032
50012
  this.selectedRole.set(v);
@@ -50729,14 +50709,10 @@ class MemberDetailModalComponent {
50729
50709
  type: 'button',
50730
50710
  state: this.working() ? ComponentStates.WORKING : ComponentStates.ENABLED,
50731
50711
  }));
50732
- if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$a)) {
50733
- this.i18n.registerContent(DEFAULT_NAMESPACE$a, MEMBER_DETAIL_MODAL_I18N);
50734
- }
50712
+ this.i18n.registerDefaults(DEFAULT_NAMESPACE$a, MEMBER_DETAIL_MODAL_I18N);
50735
50713
  }
50736
50714
  ngOnInit() {
50737
- if (!this.i18n.hasNamespace(this.i18nNamespace)) {
50738
- this.i18n.registerContent(this.i18nNamespace, MEMBER_DETAIL_MODAL_I18N);
50739
- }
50715
+ this.i18n.registerDefaults(this.i18nNamespace, MEMBER_DETAIL_MODAL_I18N);
50740
50716
  const roleName = this.member?.roles?.[0] ?? '';
50741
50717
  // Resolve the role name to its UUID -- the select uses r.id (UUID) as value
50742
50718
  const matched = this.availableRoles.find(r => r.name === roleName);
@@ -51219,9 +51195,7 @@ class PermissionsViewComponent {
51219
51195
  state: this.loading() ? ComponentStates.DISABLED : ComponentStates.ENABLED,
51220
51196
  }));
51221
51197
  const ns = this.ns;
51222
- if (!this.i18n.hasNamespace(ns)) {
51223
- this.i18n.registerContent(ns, PERMISSIONS_VIEW_I18N);
51224
- }
51198
+ this.i18n.registerDefaults(ns, PERMISSIONS_VIEW_I18N);
51225
51199
  this.load();
51226
51200
  connectPageRefresh(() => this.load());
51227
51201
  }
@@ -51788,14 +51762,10 @@ class TransferOwnershipModalComponent {
51788
51762
  return this.members.filter(m => m.name?.toLowerCase().includes(q) || m.email?.toLowerCase().includes(q) || m.userId.toLowerCase().includes(q));
51789
51763
  });
51790
51764
  this.noResultsLabel = computed(() => `${this.t('noResults')} "${this.query()}"`);
51791
- if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$8)) {
51792
- this.i18n.registerContent(DEFAULT_NAMESPACE$8, TRANSFER_OWNERSHIP_MODAL_I18N);
51793
- }
51765
+ this.i18n.registerDefaults(DEFAULT_NAMESPACE$8, TRANSFER_OWNERSHIP_MODAL_I18N);
51794
51766
  }
51795
51767
  ngOnInit() {
51796
- if (!this.i18n.hasNamespace(this.i18nNamespace)) {
51797
- this.i18n.registerContent(this.i18nNamespace, TRANSFER_OWNERSHIP_MODAL_I18N);
51798
- }
51768
+ this.i18n.registerDefaults(this.i18nNamespace, TRANSFER_OWNERSHIP_MODAL_I18N);
51799
51769
  }
51800
51770
  confirm() {
51801
51771
  const id = this.selectedId();
@@ -52127,14 +52097,10 @@ class MemberImportModalComponent {
52127
52097
  return this.t('summary');
52128
52098
  return `${this.t('summary')}: ${s.created} ${this.t('created')} · ${s.assigned} ${this.t('assigned')} · ${s.skipped} ${this.t('skipped')} · ${s.failed} ${this.t('failed')}`;
52129
52099
  });
52130
- if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$7)) {
52131
- this.i18n.registerContent(DEFAULT_NAMESPACE$7, MEMBER_IMPORT_MODAL_I18N);
52132
- }
52100
+ this.i18n.registerDefaults(DEFAULT_NAMESPACE$7, MEMBER_IMPORT_MODAL_I18N);
52133
52101
  }
52134
52102
  ngOnInit() {
52135
- if (!this.i18n.hasNamespace(this.i18nNamespace)) {
52136
- this.i18n.registerContent(this.i18nNamespace, MEMBER_IMPORT_MODAL_I18N);
52137
- }
52103
+ this.i18n.registerDefaults(this.i18nNamespace, MEMBER_IMPORT_MODAL_I18N);
52138
52104
  }
52139
52105
  /** Carga un archivo CSV seleccionado: lee su texto al textarea (`csv`). */
52140
52106
  onFileSelected(event) {
@@ -52988,9 +52954,7 @@ class OrganizationViewComponent {
52988
52954
  /** Guarda para detectar el primer disparo del effect (evita doble carga). */
52989
52955
  this.lastLoadedOrgId = null;
52990
52956
  const ns = this.ns;
52991
- if (!this.i18n.hasNamespace(ns)) {
52992
- this.i18n.registerContent(ns, ORGANIZATION_VIEW_I18N);
52993
- }
52957
+ this.i18n.registerDefaults(ns, ORGANIZATION_VIEW_I18N);
52994
52958
  this.nav.setBackHeader('pageTitle', ns, { withMenu: true });
52995
52959
  // Auto-reload en org-switch: reacciona a activeOrgId() y recarga org + miembros
52996
52960
  // cuando el usuario cambia de organización activa mientras la vista está
@@ -53706,7 +53670,7 @@ class OrganizationViewComponent {
53706
53670
  (created)="onOrgCreated($event)"
53707
53671
  />
53708
53672
  </div>
53709
- `, isInline: true, styles: [".page{padding:16px 0;max-width:720px;margin:0 auto}.org-more-info-link{background:none;border:none;padding:4px 0;margin-top:4px;font-size:13px;font-weight:600;color:var(--ion-color-primary, #7026df);cursor:pointer;text-align:left}.page-header{margin-bottom:16px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.section-header-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.section-body{display:flex;flex-direction:column;gap:10px}.row-actions{margin-top:12px}.row-actions--gap{display:flex;gap:8px}.invite-cta{display:flex;flex-direction:column;gap:16px}.invite-cta__text{display:flex;flex-direction:column;gap:4px}.invite-cta__actions{display:flex;gap:12px;flex-wrap:wrap}.org-info-card{border-radius:14px;background:var(--ion-color-light, #f4f5f8);overflow:hidden}.org-info-logo{display:flex;justify-content:center;padding:8px 0 16px}.org-logo-img{width:80px;height:80px;border-radius:50%;object-fit:cover;border:2px solid var(--ion-color-light)}:host-context(body.dark) .org-info-card,:host-context(html.ion-palette-dark) .org-info-card,:host-context([data-theme=\"dark\"]) .org-info-card{background:#ffffff0d}.org-info-field{padding:12px 16px;display:flex;flex-direction:column;gap:4px;border-bottom:1px solid var(--val-border-color, rgba(0, 0, 0, .06))}.org-info-field:last-child{border-bottom:none}.org-info-label{font-size:.74rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--ion-color-medium)}.org-info-value{font-size:.95rem;font-weight:500;color:var(--ion-color-dark)}.org-info-value--muted{color:var(--ion-color-medium);font-weight:400}.plan-badge{display:inline-block;font-size:.78rem;font-weight:700;padding:3px 10px;border-radius:20px;width:fit-content}.plan-badge--free{background:var(--ion-color-light-shade, #d7d8da);color:var(--ion-color-dark)}.plan-badge--pro{background:var(--ion-color-primary);color:#fff}.plan-badge--enterprise{background:#f5c542;color:#222}.members-list{display:flex;flex-direction:column;gap:8px}.members-show-more{background:none;border:none;color:var(--ion-color-primary);font-size:14px;font-weight:500;cursor:pointer;padding:8px 0}.rbac-debug{opacity:.7}.rbac-debug__body{display:flex;flex-direction:column;gap:6px;font-family:monospace;font-size:.78rem}.rbac-debug__row{display:flex;gap:8px;align-items:flex-start}.rbac-debug__label{color:var(--ion-color-medium);min-width:72px;flex-shrink:0}.rbac-debug__value{color:var(--ion-color-dark);word-break:break-all}.rbac-debug__value--perms{color:var(--ion-color-medium)}.section-title-danger{display:flex;align-items:center;gap:8px}.section-title-danger val-title{display:block}.danger-icon{display:block;font-size:1.125rem;color:var(--ion-color-warning-shade, #d4a017);flex-shrink:0}\n"], dependencies: [{ kind: "component", type: CreateOrgModalComponent, selector: "val-create-org-modal", inputs: ["i18nNamespace", "isOpen"], outputs: ["dismissed", "created"] }, { kind: "component", type: CtaCardComponent, selector: "val-cta-card", inputs: ["props"], outputs: ["onAction"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: EmptyStateComponent, selector: "val-empty-state", inputs: ["props"] }, { kind: "directive", type: HasPermissionDirective, selector: "[valHasPermission]", inputs: ["valHasPermission"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: SkeletonLayoutComponent, selector: "val-skeleton-layout", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: MemberCardComponent, selector: "val-member-card", inputs: ["props"], outputs: ["onAction"] }, { kind: "component", type: PermissionsModalComponent, selector: "val-permissions-modal", inputs: ["isOpen", "config"], outputs: ["dismissed"] }] }); }
53673
+ `, isInline: true, styles: [".page{padding:16px 0;max-width:720px;margin:0 auto}.org-more-info-link{background:none;border:none;padding:4px 0;margin-top:4px;font-size:13px;font-weight:600;color:var(--ion-color-primary, #7026df);cursor:pointer;text-align:left}.page-header{margin-bottom:16px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.section-header-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.section-body{display:flex;flex-direction:column;gap:10px}.row-actions{margin-top:12px}.row-actions--gap{display:flex;gap:8px}.invite-cta{display:flex;flex-direction:column;gap:16px}.invite-cta__text{display:flex;flex-direction:column;gap:4px}.invite-cta__actions{display:flex;gap:12px;flex-wrap:wrap}.org-info-card{border-radius:14px;background:var(--ion-color-light, #f4f5f8);overflow:hidden}.org-info-logo{display:flex;justify-content:center;padding:8px 0 16px}.org-logo-img{width:80px;height:80px;border-radius:50%;object-fit:cover;border:2px solid var(--ion-color-light)}:host-context(body.dark) .org-info-card,:host-context(html.ion-palette-dark) .org-info-card,:host-context([data-theme=\"dark\"]) .org-info-card{background:#ffffff0d}.org-info-field{padding:12px 16px;display:flex;flex-direction:column;gap:4px;border-bottom:1px solid var(--val-border-color, rgba(0, 0, 0, .06))}.org-info-field:last-child{border-bottom:none}.org-info-label{font-size:.74rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--ion-color-medium)}.org-info-value{font-size:.95rem;font-weight:500;color:var(--ion-color-dark)}.org-info-value--muted{color:var(--ion-color-medium);font-weight:400}.plan-badge{display:inline-block;font-size:.78rem;font-weight:700;padding:3px 10px;border-radius:20px;width:fit-content}.plan-badge--free{background:var(--ion-color-light-shade, #d7d8da);color:var(--ion-color-dark)}.plan-badge--pro{background:var(--ion-color-primary);color:#fff}.plan-badge--enterprise{background:#f5c542;color:#222}.members-list{display:flex;flex-direction:column;gap:8px}.members-show-more{background:none;border:none;color:var(--ion-color-primary);font-size:14px;font-weight:500;cursor:pointer;padding:8px 0}.rbac-debug{opacity:.7}.rbac-debug__body{display:flex;flex-direction:column;gap:6px;font-family:monospace;font-size:.78rem}.rbac-debug__row{display:flex;gap:8px;align-items:flex-start}.rbac-debug__label{color:var(--ion-color-medium);min-width:72px;flex-shrink:0}.rbac-debug__value{color:var(--ion-color-dark);word-break:break-all}.rbac-debug__value--perms{color:var(--ion-color-medium)}.section-title-danger{display:flex;align-items:center;gap:8px;margin-bottom:12px}.section-title-danger val-title{display:block;margin:0}.danger-icon{display:block;font-size:1.125rem;color:var(--ion-color-warning-shade, #d4a017);flex-shrink:0}\n"], dependencies: [{ kind: "component", type: CreateOrgModalComponent, selector: "val-create-org-modal", inputs: ["i18nNamespace", "isOpen"], outputs: ["dismissed", "created"] }, { kind: "component", type: CtaCardComponent, selector: "val-cta-card", inputs: ["props"], outputs: ["onAction"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: EmptyStateComponent, selector: "val-empty-state", inputs: ["props"] }, { kind: "directive", type: HasPermissionDirective, selector: "[valHasPermission]", inputs: ["valHasPermission"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: SkeletonLayoutComponent, selector: "val-skeleton-layout", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: MemberCardComponent, selector: "val-member-card", inputs: ["props"], outputs: ["onAction"] }, { kind: "component", type: PermissionsModalComponent, selector: "val-permissions-modal", inputs: ["isOpen", "config"], outputs: ["dismissed"] }] }); }
53710
53674
  }
53711
53675
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: OrganizationViewComponent, decorators: [{
53712
53676
  type: Component,
@@ -54044,7 +54008,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
54044
54008
  (created)="onOrgCreated($event)"
54045
54009
  />
54046
54010
  </div>
54047
- `, styles: [".page{padding:16px 0;max-width:720px;margin:0 auto}.org-more-info-link{background:none;border:none;padding:4px 0;margin-top:4px;font-size:13px;font-weight:600;color:var(--ion-color-primary, #7026df);cursor:pointer;text-align:left}.page-header{margin-bottom:16px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.section-header-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.section-body{display:flex;flex-direction:column;gap:10px}.row-actions{margin-top:12px}.row-actions--gap{display:flex;gap:8px}.invite-cta{display:flex;flex-direction:column;gap:16px}.invite-cta__text{display:flex;flex-direction:column;gap:4px}.invite-cta__actions{display:flex;gap:12px;flex-wrap:wrap}.org-info-card{border-radius:14px;background:var(--ion-color-light, #f4f5f8);overflow:hidden}.org-info-logo{display:flex;justify-content:center;padding:8px 0 16px}.org-logo-img{width:80px;height:80px;border-radius:50%;object-fit:cover;border:2px solid var(--ion-color-light)}:host-context(body.dark) .org-info-card,:host-context(html.ion-palette-dark) .org-info-card,:host-context([data-theme=\"dark\"]) .org-info-card{background:#ffffff0d}.org-info-field{padding:12px 16px;display:flex;flex-direction:column;gap:4px;border-bottom:1px solid var(--val-border-color, rgba(0, 0, 0, .06))}.org-info-field:last-child{border-bottom:none}.org-info-label{font-size:.74rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--ion-color-medium)}.org-info-value{font-size:.95rem;font-weight:500;color:var(--ion-color-dark)}.org-info-value--muted{color:var(--ion-color-medium);font-weight:400}.plan-badge{display:inline-block;font-size:.78rem;font-weight:700;padding:3px 10px;border-radius:20px;width:fit-content}.plan-badge--free{background:var(--ion-color-light-shade, #d7d8da);color:var(--ion-color-dark)}.plan-badge--pro{background:var(--ion-color-primary);color:#fff}.plan-badge--enterprise{background:#f5c542;color:#222}.members-list{display:flex;flex-direction:column;gap:8px}.members-show-more{background:none;border:none;color:var(--ion-color-primary);font-size:14px;font-weight:500;cursor:pointer;padding:8px 0}.rbac-debug{opacity:.7}.rbac-debug__body{display:flex;flex-direction:column;gap:6px;font-family:monospace;font-size:.78rem}.rbac-debug__row{display:flex;gap:8px;align-items:flex-start}.rbac-debug__label{color:var(--ion-color-medium);min-width:72px;flex-shrink:0}.rbac-debug__value{color:var(--ion-color-dark);word-break:break-all}.rbac-debug__value--perms{color:var(--ion-color-medium)}.section-title-danger{display:flex;align-items:center;gap:8px}.section-title-danger val-title{display:block}.danger-icon{display:block;font-size:1.125rem;color:var(--ion-color-warning-shade, #d4a017);flex-shrink:0}\n"] }]
54011
+ `, styles: [".page{padding:16px 0;max-width:720px;margin:0 auto}.org-more-info-link{background:none;border:none;padding:4px 0;margin-top:4px;font-size:13px;font-weight:600;color:var(--ion-color-primary, #7026df);cursor:pointer;text-align:left}.page-header{margin-bottom:16px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.section-header-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.section-body{display:flex;flex-direction:column;gap:10px}.row-actions{margin-top:12px}.row-actions--gap{display:flex;gap:8px}.invite-cta{display:flex;flex-direction:column;gap:16px}.invite-cta__text{display:flex;flex-direction:column;gap:4px}.invite-cta__actions{display:flex;gap:12px;flex-wrap:wrap}.org-info-card{border-radius:14px;background:var(--ion-color-light, #f4f5f8);overflow:hidden}.org-info-logo{display:flex;justify-content:center;padding:8px 0 16px}.org-logo-img{width:80px;height:80px;border-radius:50%;object-fit:cover;border:2px solid var(--ion-color-light)}:host-context(body.dark) .org-info-card,:host-context(html.ion-palette-dark) .org-info-card,:host-context([data-theme=\"dark\"]) .org-info-card{background:#ffffff0d}.org-info-field{padding:12px 16px;display:flex;flex-direction:column;gap:4px;border-bottom:1px solid var(--val-border-color, rgba(0, 0, 0, .06))}.org-info-field:last-child{border-bottom:none}.org-info-label{font-size:.74rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--ion-color-medium)}.org-info-value{font-size:.95rem;font-weight:500;color:var(--ion-color-dark)}.org-info-value--muted{color:var(--ion-color-medium);font-weight:400}.plan-badge{display:inline-block;font-size:.78rem;font-weight:700;padding:3px 10px;border-radius:20px;width:fit-content}.plan-badge--free{background:var(--ion-color-light-shade, #d7d8da);color:var(--ion-color-dark)}.plan-badge--pro{background:var(--ion-color-primary);color:#fff}.plan-badge--enterprise{background:#f5c542;color:#222}.members-list{display:flex;flex-direction:column;gap:8px}.members-show-more{background:none;border:none;color:var(--ion-color-primary);font-size:14px;font-weight:500;cursor:pointer;padding:8px 0}.rbac-debug{opacity:.7}.rbac-debug__body{display:flex;flex-direction:column;gap:6px;font-family:monospace;font-size:.78rem}.rbac-debug__row{display:flex;gap:8px;align-items:flex-start}.rbac-debug__label{color:var(--ion-color-medium);min-width:72px;flex-shrink:0}.rbac-debug__value{color:var(--ion-color-dark);word-break:break-all}.rbac-debug__value--perms{color:var(--ion-color-medium)}.section-title-danger{display:flex;align-items:center;gap:8px;margin-bottom:12px}.section-title-danger val-title{display:block;margin:0}.danger-icon{display:block;font-size:1.125rem;color:var(--ion-color-warning-shade, #d4a017);flex-shrink:0}\n"] }]
54048
54012
  }], ctorParameters: () => [], propDecorators: { config: [{
54049
54013
  type: Input
54050
54014
  }] } });
@@ -54324,9 +54288,7 @@ class NotificationPreferencesViewComponent {
54324
54288
  return `${t.slice(0, 22)}…${t.slice(-6)}`;
54325
54289
  });
54326
54290
  const ns = this.ns;
54327
- if (!this.i18n.hasNamespace(ns)) {
54328
- this.i18n.registerContent(ns, NOTIFICATION_PREFERENCES_VIEW_I18N);
54329
- }
54291
+ this.i18n.registerDefaults(ns, NOTIFICATION_PREFERENCES_VIEW_I18N);
54330
54292
  this.nav.setBackHeader('pageTitle', ns, { withMenu: true });
54331
54293
  void this.refreshBrowserState();
54332
54294
  // Re-aplicar header en cambio de idioma.
@@ -55034,14 +54996,10 @@ class ApiKeyCreateModalComponent {
55034
54996
  actions: submitButton,
55035
54997
  };
55036
54998
  });
55037
- if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$4)) {
55038
- this.i18n.registerContent(DEFAULT_NAMESPACE$4, API_KEYS_MODAL_I18N);
55039
- }
54999
+ this.i18n.registerDefaults(DEFAULT_NAMESPACE$4, API_KEYS_MODAL_I18N);
55040
55000
  }
55041
55001
  ngOnInit() {
55042
- if (!this.i18n.hasNamespace(this.i18nNamespace)) {
55043
- this.i18n.registerContent(this.i18nNamespace, API_KEYS_MODAL_I18N);
55044
- }
55002
+ this.i18n.registerDefaults(this.i18nNamespace, API_KEYS_MODAL_I18N);
55045
55003
  this.loadCatalog();
55046
55004
  }
55047
55005
  /**
@@ -55357,9 +55315,7 @@ class ApiKeysViewComponent {
55357
55315
  this.i18n.lang();
55358
55316
  return { variant: 'empty', title: this.tt('empty'), description: this.tt('emptyHint') };
55359
55317
  });
55360
- if (!this.i18n.hasNamespace(this.ns)) {
55361
- this.i18n.registerContent(this.ns, API_KEYS_VIEW_I18N);
55362
- }
55318
+ this.i18n.registerDefaults(this.ns, API_KEYS_VIEW_I18N);
55363
55319
  this.nav.setBackHeader('pageTitle', this.ns, { withMenu: true });
55364
55320
  this.load();
55365
55321
  connectPageRefresh(() => this.load());
@@ -56108,9 +56064,7 @@ class NotificationsViewComponent {
56108
56064
  state: this._loadingMore() ? ComponentStates.WORKING : ComponentStates.ENABLED,
56109
56065
  }));
56110
56066
  const ns = this.ns;
56111
- if (!this.i18n.hasNamespace(ns)) {
56112
- this.i18n.registerContent(ns, NOTIFICATIONS_VIEW_I18N);
56113
- }
56067
+ this.i18n.registerDefaults(ns, NOTIFICATIONS_VIEW_I18N);
56114
56068
  this.nav.setBackHeader('pageTitle', ns, { withMenu: true });
56115
56069
  // Re-aplicar header en cambio de idioma.
56116
56070
  effect(() => {
@@ -56730,9 +56684,7 @@ class ContentReactionComponent {
56730
56684
  // Auto-registro de defaults i18n (es/en) si el consumer no proveyó el
56731
56685
  // namespace. Garantiza que `t()` nunca caiga en key faltante. Ver
56732
56686
  // CONTENT_REACTION_I18N. Idempotente: solo la 1ª instancia registra.
56733
- if (!this.i18n.hasNamespace('ContentReaction')) {
56734
- this.i18n.registerContent('ContentReaction', CONTENT_REACTION_I18N);
56735
- }
56687
+ this.i18n.registerDefaults('ContentReaction', CONTENT_REACTION_I18N);
56736
56688
  }
56737
56689
  /** Cierra el modal/sheet contenedor (si el componente se abrió vía ModalService). */
56738
56690
  close() {
@@ -57072,9 +57024,7 @@ class AboutViewComponent {
57072
57024
  };
57073
57025
  });
57074
57026
  const ns = this.ns;
57075
- if (!this.i18n.hasNamespace(ns)) {
57076
- this.i18n.registerContent(ns, ABOUT_VIEW_I18N);
57077
- }
57027
+ this.i18n.registerDefaults(ns, ABOUT_VIEW_I18N);
57078
57028
  this.nav.setBackHeader('pageTitle', ns, { withMenu: true });
57079
57029
  }
57080
57030
  /** Helper i18n bound al namespace resuelto. Reactivo vía `lang()`. */
@@ -57536,9 +57486,7 @@ class FieldListComponent {
57536
57486
  const max = this.props.max;
57537
57487
  return max == null || this.rowsSig().length < max;
57538
57488
  });
57539
- if (!this.i18n.hasNamespace(I18N_NS$1)) {
57540
- this.i18n.registerContent(I18N_NS$1, FIELD_LIST_I18N);
57541
- }
57489
+ this.i18n.registerDefaults(I18N_NS$1, FIELD_LIST_I18N);
57542
57490
  }
57543
57491
  ngOnChanges(changes) {
57544
57492
  // Re-siembra solo si cambió la referencia de items entrante (evita pisar lo
@@ -57785,14 +57733,10 @@ class ApiKeysModalComponent {
57785
57733
  actions: submitButton,
57786
57734
  };
57787
57735
  });
57788
- if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE)) {
57789
- this.i18n.registerContent(DEFAULT_NAMESPACE, API_KEYS_MODAL_I18N);
57790
- }
57736
+ this.i18n.registerDefaults(DEFAULT_NAMESPACE, API_KEYS_MODAL_I18N);
57791
57737
  }
57792
57738
  ngOnInit() {
57793
- if (!this.i18n.hasNamespace(this.i18nNamespace)) {
57794
- this.i18n.registerContent(this.i18nNamespace, API_KEYS_MODAL_I18N);
57795
- }
57739
+ this.i18n.registerDefaults(this.i18nNamespace, API_KEYS_MODAL_I18N);
57796
57740
  this.refresh();
57797
57741
  this.loadCatalog();
57798
57742
  }
@@ -67980,9 +67924,7 @@ class AuthCtaComponent {
67980
67924
  return undefined;
67981
67925
  return IONIC_COLORS.includes(bg) ? `var(--ion-color-${bg})` : bg;
67982
67926
  });
67983
- if (!this.i18n.hasNamespace('AuthCta')) {
67984
- this.i18n.registerContent('AuthCta', AUTH_CTA_I18N);
67985
- }
67927
+ this.i18n.registerDefaults('AuthCta', AUTH_CTA_I18N);
67986
67928
  }
67987
67929
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AuthCtaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
67988
67930
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AuthCtaComponent, isStandalone: true, selector: "val-auth-cta", inputs: { props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onLogin: "onLogin", onRegister: "onRegister" }, ngImport: i0, template: `
@@ -68193,9 +68135,7 @@ class TicketCardComponent {
68193
68135
  }
68194
68136
  return '';
68195
68137
  });
68196
- if (!this.i18n.hasNamespace('TicketCard')) {
68197
- this.i18n.registerContent('TicketCard', TICKET_CARD_I18N);
68198
- }
68138
+ this.i18n.registerDefaults('TicketCard', TICKET_CARD_I18N);
68199
68139
  // Regenera el QR cuando cambia el token o el tamaño.
68200
68140
  effect(() => {
68201
68141
  const token = this.props().qrToken;
@@ -68383,9 +68323,7 @@ class QrScannerComponent {
68383
68323
  this.lastValue = '';
68384
68324
  this.lastAt = 0;
68385
68325
  this.viewReady = false;
68386
- if (!this.i18n.hasNamespace('QrScanner')) {
68387
- this.i18n.registerContent('QrScanner', QR_SCANNER_I18N);
68388
- }
68326
+ this.i18n.registerDefaults('QrScanner', QR_SCANNER_I18N);
68389
68327
  }
68390
68328
  ngAfterViewInit() {
68391
68329
  this.viewReady = true;