valtech-components 2.0.994 → 2.0.995
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.
- package/esm2022/lib/components/organisms/member-import-modal/member-import-modal.component.mjs +313 -0
- package/esm2022/lib/components/organisms/member-import-modal/member-import-modal.i18n.mjs +63 -0
- package/esm2022/lib/components/organisms/organization-view/organization-view.component.mjs +53 -1
- package/esm2022/lib/components/organisms/organization-view/organization-view.i18n.mjs +3 -1
- package/esm2022/lib/services/org/org.service.mjs +8 -1
- package/esm2022/lib/services/org/types.mjs +1 -1
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/valtech-components.mjs +467 -42
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/organisms/member-import-modal/member-import-modal.component.d.ts +47 -0
- package/lib/components/organisms/member-import-modal/member-import-modal.i18n.d.ts +6 -0
- package/lib/components/organisms/organization-view/organization-view.component.d.ts +3 -0
- package/lib/services/org/org.service.d.ts +6 -1
- package/lib/services/org/types.d.ts +30 -0
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -54,7 +54,7 @@ import 'prismjs/components/prism-json';
|
|
|
54
54
|
* Current version of valtech-components.
|
|
55
55
|
* This is automatically updated during the publish process.
|
|
56
56
|
*/
|
|
57
|
-
const VERSION = '2.0.
|
|
57
|
+
const VERSION = '2.0.995';
|
|
58
58
|
|
|
59
59
|
// Control de estado de refresco (singleton a nivel de módulo)
|
|
60
60
|
let isRefreshing = false;
|
|
@@ -41750,7 +41750,7 @@ const PROFILE_VIEW_I18N = {
|
|
|
41750
41750
|
const HANDLE_PATTERN = /^[a-z_][a-z0-9_]*$/;
|
|
41751
41751
|
const HANDLE_MIN = 3;
|
|
41752
41752
|
const HANDLE_MAX = 20;
|
|
41753
|
-
const DEFAULT_NAMESPACE$
|
|
41753
|
+
const DEFAULT_NAMESPACE$e = 'Settings.Profile';
|
|
41754
41754
|
/**
|
|
41755
41755
|
* `val-profile-view` — vista Perfil full-feature autocontenida (organism).
|
|
41756
41756
|
*
|
|
@@ -41800,7 +41800,7 @@ class ProfileViewComponent {
|
|
|
41800
41800
|
showPhone: merged.showPhone ?? true,
|
|
41801
41801
|
showShareCta: merged.showShareCta ?? true,
|
|
41802
41802
|
profileBaseUrl: merged.profileBaseUrl ?? '',
|
|
41803
|
-
i18nNamespace: merged.i18nNamespace ?? DEFAULT_NAMESPACE$
|
|
41803
|
+
i18nNamespace: merged.i18nNamespace ?? DEFAULT_NAMESPACE$e,
|
|
41804
41804
|
onSaved: merged.onSaved,
|
|
41805
41805
|
onAvatarUploaded: merged.onAvatarUploaded,
|
|
41806
41806
|
};
|
|
@@ -42716,7 +42716,7 @@ const PREFERENCES_VIEW_I18N = {
|
|
|
42716
42716
|
},
|
|
42717
42717
|
};
|
|
42718
42718
|
|
|
42719
|
-
const DEFAULT_NAMESPACE$
|
|
42719
|
+
const DEFAULT_NAMESPACE$d = 'Settings.General';
|
|
42720
42720
|
const DEFAULT_LANGUAGES = ['es', 'en'];
|
|
42721
42721
|
/**
|
|
42722
42722
|
* `val-preferences-view` — vista de preferencias de UI cross-app (tema +
|
|
@@ -42753,7 +42753,7 @@ class PreferencesViewComponent {
|
|
|
42753
42753
|
showLanguage: merged.showLanguage ?? true,
|
|
42754
42754
|
showFontSize: merged.showFontSize ?? true,
|
|
42755
42755
|
supportedLanguages: merged.supportedLanguages ?? DEFAULT_LANGUAGES,
|
|
42756
|
-
i18nNamespace: merged.i18nNamespace ?? DEFAULT_NAMESPACE$
|
|
42756
|
+
i18nNamespace: merged.i18nNamespace ?? DEFAULT_NAMESPACE$d,
|
|
42757
42757
|
onThemeChanged: merged.onThemeChanged,
|
|
42758
42758
|
onLanguageChanged: merged.onLanguageChanged,
|
|
42759
42759
|
onFontSizeChanged: merged.onFontSizeChanged,
|
|
@@ -44565,7 +44565,7 @@ const SECURITY_VIEW_I18N = {
|
|
|
44565
44565
|
};
|
|
44566
44566
|
|
|
44567
44567
|
addIcons({ laptopOutline, phonePortraitOutline });
|
|
44568
|
-
const DEFAULT_NAMESPACE$
|
|
44568
|
+
const DEFAULT_NAMESPACE$c = 'Settings.Security';
|
|
44569
44569
|
/**
|
|
44570
44570
|
* `val-security-view` — vista Seguridad full-feature autocontenida (organism).
|
|
44571
44571
|
*
|
|
@@ -44614,7 +44614,7 @@ class SecurityViewComponent {
|
|
|
44614
44614
|
showChangeEmail: merged.showChangeEmail ?? true,
|
|
44615
44615
|
showMfa: merged.showMfa ?? true,
|
|
44616
44616
|
showPolicies: merged.showPolicies ?? true,
|
|
44617
|
-
i18nNamespace: merged.i18nNamespace ?? DEFAULT_NAMESPACE$
|
|
44617
|
+
i18nNamespace: merged.i18nNamespace ?? DEFAULT_NAMESPACE$c,
|
|
44618
44618
|
handleDeepLinks: merged.handleDeepLinks ?? true,
|
|
44619
44619
|
homeRoute: merged.homeRoute ?? '/app/home',
|
|
44620
44620
|
onMfaCompleted: merged.onMfaCompleted,
|
|
@@ -45416,6 +45416,13 @@ class OrgService {
|
|
|
45416
45416
|
inviteUser(orgId, req) {
|
|
45417
45417
|
return this.http.post(`${this.baseUrl}/${orgId}/invite`, req);
|
|
45418
45418
|
}
|
|
45419
|
+
/**
|
|
45420
|
+
* Crea/asigna miembros en masa (ADR-023). Resultado por-fila (partial success):
|
|
45421
|
+
* `created` (pre-aprovisionado), `assigned` (ya existía), `skipped`, `error`.
|
|
45422
|
+
*/
|
|
45423
|
+
importMembers(orgId, req) {
|
|
45424
|
+
return this.http.post(`${this.baseUrl}/${orgId}/members/import`, req);
|
|
45425
|
+
}
|
|
45419
45426
|
leaveOrg(orgId) {
|
|
45420
45427
|
return this.http.post(`${this.baseUrl}/${orgId}/leave`, {});
|
|
45421
45428
|
}
|
|
@@ -45520,7 +45527,7 @@ const CREATE_ORG_MODAL_I18N = {
|
|
|
45520
45527
|
},
|
|
45521
45528
|
};
|
|
45522
45529
|
|
|
45523
|
-
const DEFAULT_NAMESPACE$
|
|
45530
|
+
const DEFAULT_NAMESPACE$b = 'CreateOrgModal';
|
|
45524
45531
|
/**
|
|
45525
45532
|
* `val-create-org-modal` — modal de creación de organización (organism
|
|
45526
45533
|
* compartido). Promovido desde `showcase` bajo el proceso de ADR-021. Reusado por
|
|
@@ -45546,10 +45553,10 @@ class CreateOrgModalComponent {
|
|
|
45546
45553
|
this.toast = inject(ToastService);
|
|
45547
45554
|
this.errors = inject(ValtechErrorService);
|
|
45548
45555
|
/** Namespace i18n con que la vista resuelve sus textos. */
|
|
45549
|
-
this.i18nNamespace = DEFAULT_NAMESPACE$
|
|
45556
|
+
this.i18nNamespace = DEFAULT_NAMESPACE$b;
|
|
45550
45557
|
this._busy = signal(false);
|
|
45551
|
-
if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$
|
|
45552
|
-
this.i18n.registerContent(DEFAULT_NAMESPACE$
|
|
45558
|
+
if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$b)) {
|
|
45559
|
+
this.i18n.registerContent(DEFAULT_NAMESPACE$b, CREATE_ORG_MODAL_I18N);
|
|
45553
45560
|
}
|
|
45554
45561
|
this.formMeta = signal(this.buildFormMeta());
|
|
45555
45562
|
effect(() => {
|
|
@@ -45785,7 +45792,7 @@ const DELETE_ACCOUNT_MODAL_I18N = {
|
|
|
45785
45792
|
},
|
|
45786
45793
|
};
|
|
45787
45794
|
|
|
45788
|
-
const DEFAULT_NAMESPACE$
|
|
45795
|
+
const DEFAULT_NAMESPACE$a = 'Settings.DeleteAccount';
|
|
45789
45796
|
/**
|
|
45790
45797
|
* `val-delete-account-modal` — modal de eliminación de cuenta (organism,
|
|
45791
45798
|
* cuenta-específico). Promovido desde `showcase` bajo el proceso de ADR-021.
|
|
@@ -45811,7 +45818,7 @@ class DeleteAccountModalComponent {
|
|
|
45811
45818
|
this.i18n = inject(I18nService);
|
|
45812
45819
|
this.toast = inject(ToastService);
|
|
45813
45820
|
/** Namespace i18n con que la vista resuelve sus textos. */
|
|
45814
|
-
this.i18nNamespace = DEFAULT_NAMESPACE$
|
|
45821
|
+
this.i18nNamespace = DEFAULT_NAMESPACE$a;
|
|
45815
45822
|
this.hasPassword = signal(null);
|
|
45816
45823
|
this.codeSent = signal(false);
|
|
45817
45824
|
this.formState = signal(ComponentStates.ENABLED);
|
|
@@ -45878,8 +45885,8 @@ class DeleteAccountModalComponent {
|
|
|
45878
45885
|
],
|
|
45879
45886
|
actions: this.submitBtn('delete-code-submit', 'confirmCta'),
|
|
45880
45887
|
}));
|
|
45881
|
-
if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$
|
|
45882
|
-
this.i18n.registerContent(DEFAULT_NAMESPACE$
|
|
45888
|
+
if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$a)) {
|
|
45889
|
+
this.i18n.registerContent(DEFAULT_NAMESPACE$a, DELETE_ACCOUNT_MODAL_I18N);
|
|
45883
45890
|
}
|
|
45884
45891
|
}
|
|
45885
45892
|
ngOnInit() {
|
|
@@ -46080,7 +46087,7 @@ const ORG_INFO_SHEET_I18N = {
|
|
|
46080
46087
|
},
|
|
46081
46088
|
};
|
|
46082
46089
|
|
|
46083
|
-
const DEFAULT_NAMESPACE$
|
|
46090
|
+
const DEFAULT_NAMESPACE$9 = 'OrgInfoSheet';
|
|
46084
46091
|
/**
|
|
46085
46092
|
* `val-org-info-sheet` — sheet informativo "¿Qué son las organizaciones?".
|
|
46086
46093
|
* Extraído del `OrgInfoSheetComponent` inline de `AccountPage` bajo el proceso de
|
|
@@ -46125,15 +46132,15 @@ class OrgInfoSheetComponent {
|
|
|
46125
46132
|
text: this.closeProps.text || this.resolvedCloseLabel(),
|
|
46126
46133
|
}));
|
|
46127
46134
|
addIcons({ peopleOutline, swapHorizontalOutline, mailOutline });
|
|
46128
|
-
if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$
|
|
46129
|
-
this.i18n.registerContent(DEFAULT_NAMESPACE$
|
|
46135
|
+
if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$9)) {
|
|
46136
|
+
this.i18n.registerContent(DEFAULT_NAMESPACE$9, ORG_INFO_SHEET_I18N);
|
|
46130
46137
|
}
|
|
46131
46138
|
}
|
|
46132
46139
|
dismiss() {
|
|
46133
46140
|
this._modalRef?.dismiss(null, 'cancel');
|
|
46134
46141
|
}
|
|
46135
46142
|
tt(key) {
|
|
46136
|
-
return this.i18n.t(key, DEFAULT_NAMESPACE$
|
|
46143
|
+
return this.i18n.t(key, DEFAULT_NAMESPACE$9);
|
|
46137
46144
|
}
|
|
46138
46145
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: OrgInfoSheetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
46139
46146
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: OrgInfoSheetComponent, isStandalone: true, selector: "val-org-info-sheet", inputs: { title: "title", subtitle: "subtitle", body: "body", closeLabel: "closeLabel", closeProps: "closeProps", _modalRef: "_modalRef" }, ngImport: i0, template: `
|
|
@@ -46300,7 +46307,7 @@ const SWITCH_ORG_MODAL_I18N = {
|
|
|
46300
46307
|
},
|
|
46301
46308
|
};
|
|
46302
46309
|
|
|
46303
|
-
const DEFAULT_NAMESPACE$
|
|
46310
|
+
const DEFAULT_NAMESPACE$8 = 'Settings.SwitchOrg';
|
|
46304
46311
|
addIcons({ businessOutline, checkmarkCircleOutline });
|
|
46305
46312
|
/**
|
|
46306
46313
|
* `val-switch-org-modal` — modal de cambio de organización activa (organism
|
|
@@ -46326,7 +46333,7 @@ class SwitchOrgModalComponent {
|
|
|
46326
46333
|
this.orgSwitch = inject(OrgSwitchService);
|
|
46327
46334
|
this.errors = inject(ValtechErrorService);
|
|
46328
46335
|
/** Namespace i18n con que la vista resuelve sus textos. */
|
|
46329
|
-
this.i18nNamespace = DEFAULT_NAMESPACE$
|
|
46336
|
+
this.i18nNamespace = DEFAULT_NAMESPACE$8;
|
|
46330
46337
|
this.orgs = signal([]);
|
|
46331
46338
|
this.loading = signal(false);
|
|
46332
46339
|
this.query = signal('');
|
|
@@ -46342,8 +46349,8 @@ class SwitchOrgModalComponent {
|
|
|
46342
46349
|
return list;
|
|
46343
46350
|
return list.filter(o => o.name.toLowerCase().includes(q));
|
|
46344
46351
|
});
|
|
46345
|
-
if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$
|
|
46346
|
-
this.i18n.registerContent(DEFAULT_NAMESPACE$
|
|
46352
|
+
if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$8)) {
|
|
46353
|
+
this.i18n.registerContent(DEFAULT_NAMESPACE$8, SWITCH_ORG_MODAL_I18N);
|
|
46347
46354
|
}
|
|
46348
46355
|
this.loadOrgs();
|
|
46349
46356
|
}
|
|
@@ -46661,7 +46668,7 @@ const ACCOUNT_VIEW_I18N = {
|
|
|
46661
46668
|
};
|
|
46662
46669
|
|
|
46663
46670
|
addIcons({ peopleOutline, businessOutline, chevronForwardOutline, swapHorizontalOutline, mailOutline });
|
|
46664
|
-
const DEFAULT_NAMESPACE$
|
|
46671
|
+
const DEFAULT_NAMESPACE$7 = 'Settings.Account';
|
|
46665
46672
|
const DEFAULT_MANAGE_ORG_ROUTE = '/app/settings/organization';
|
|
46666
46673
|
/**
|
|
46667
46674
|
* `val-account-view` — vista Cuenta full-feature autocontenida (organism).
|
|
@@ -46702,7 +46709,7 @@ class AccountViewComponent {
|
|
|
46702
46709
|
showNewOrgCta: merged.showNewOrgCta ?? true,
|
|
46703
46710
|
showLogout: merged.showLogout ?? true,
|
|
46704
46711
|
showDeleteAccount: merged.showDeleteAccount ?? true,
|
|
46705
|
-
i18nNamespace: merged.i18nNamespace ?? DEFAULT_NAMESPACE$
|
|
46712
|
+
i18nNamespace: merged.i18nNamespace ?? DEFAULT_NAMESPACE$7,
|
|
46706
46713
|
manageOrgRoute: merged.manageOrgRoute ?? DEFAULT_MANAGE_ORG_ROUTE,
|
|
46707
46714
|
onOrgSwitched: merged.onOrgSwitched,
|
|
46708
46715
|
onOrgCreated: merged.onOrgCreated,
|
|
@@ -47427,7 +47434,7 @@ const EDIT_ORG_MODAL_I18N = {
|
|
|
47427
47434
|
},
|
|
47428
47435
|
};
|
|
47429
47436
|
|
|
47430
|
-
const DEFAULT_NAMESPACE$
|
|
47437
|
+
const DEFAULT_NAMESPACE$6 = 'EditOrgModal';
|
|
47431
47438
|
/**
|
|
47432
47439
|
* `val-edit-org-modal` — modal de edición de organización (nombre + descripción).
|
|
47433
47440
|
* Promovido desde `showcase` bajo el proceso de ADR-021. Reusado por la vista de
|
|
@@ -47454,10 +47461,10 @@ class EditOrgModalComponent {
|
|
|
47454
47461
|
/** Organización a editar (pasada por `componentProps`). */
|
|
47455
47462
|
this.org = null;
|
|
47456
47463
|
/** Namespace i18n con que la vista resuelve sus textos. */
|
|
47457
|
-
this.i18nNamespace = DEFAULT_NAMESPACE$
|
|
47464
|
+
this.i18nNamespace = DEFAULT_NAMESPACE$6;
|
|
47458
47465
|
this.saving = signal(false);
|
|
47459
|
-
if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$
|
|
47460
|
-
this.i18n.registerContent(DEFAULT_NAMESPACE$
|
|
47466
|
+
if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$6)) {
|
|
47467
|
+
this.i18n.registerContent(DEFAULT_NAMESPACE$6, EDIT_ORG_MODAL_I18N);
|
|
47461
47468
|
}
|
|
47462
47469
|
this.formMeta = signal(this.buildFormMeta());
|
|
47463
47470
|
effect(() => {
|
|
@@ -47695,7 +47702,7 @@ const INVITE_MEMBER_MODAL_I18N = {
|
|
|
47695
47702
|
},
|
|
47696
47703
|
};
|
|
47697
47704
|
|
|
47698
|
-
const DEFAULT_NAMESPACE$
|
|
47705
|
+
const DEFAULT_NAMESPACE$5 = 'InviteModal';
|
|
47699
47706
|
addIcons({ personOutline, mailOutline, closeOutline, checkmarkCircleOutline });
|
|
47700
47707
|
/**
|
|
47701
47708
|
* `val-invite-member-modal` — invitación de miembros a una organización.
|
|
@@ -47726,7 +47733,7 @@ class InviteMemberModalComponent {
|
|
|
47726
47733
|
/** Ids de miembros ya existentes (excluidos de los resultados). */
|
|
47727
47734
|
this.existingMemberIds = [];
|
|
47728
47735
|
/** Namespace i18n con que la vista resuelve sus textos. */
|
|
47729
|
-
this.i18nNamespace = DEFAULT_NAMESPACE$
|
|
47736
|
+
this.i18nNamespace = DEFAULT_NAMESPACE$5;
|
|
47730
47737
|
this.query = signal('');
|
|
47731
47738
|
this.searching = signal(false);
|
|
47732
47739
|
this.searchResults = signal([]);
|
|
@@ -47773,8 +47780,8 @@ class InviteMemberModalComponent {
|
|
|
47773
47780
|
state: this.sending() ? ComponentStates.WORKING : ComponentStates.ENABLED,
|
|
47774
47781
|
}));
|
|
47775
47782
|
this.searchSubject = new Subject();
|
|
47776
|
-
if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$
|
|
47777
|
-
this.i18n.registerContent(DEFAULT_NAMESPACE$
|
|
47783
|
+
if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$5)) {
|
|
47784
|
+
this.i18n.registerContent(DEFAULT_NAMESPACE$5, INVITE_MEMBER_MODAL_I18N);
|
|
47778
47785
|
}
|
|
47779
47786
|
this.loadRoles();
|
|
47780
47787
|
this.roleSub = this.roleControl.valueChanges.subscribe(v => {
|
|
@@ -48263,7 +48270,7 @@ const MEMBER_DETAIL_MODAL_I18N = {
|
|
|
48263
48270
|
},
|
|
48264
48271
|
};
|
|
48265
48272
|
|
|
48266
|
-
const DEFAULT_NAMESPACE$
|
|
48273
|
+
const DEFAULT_NAMESPACE$4 = 'Settings.MemberDetail';
|
|
48267
48274
|
/**
|
|
48268
48275
|
* `val-member-detail-modal` — detalle de miembro de organización: perfil, rol y
|
|
48269
48276
|
* permisos. Promovido desde `showcase` bajo el proceso de ADR-021.
|
|
@@ -48300,7 +48307,7 @@ class MemberDetailModalComponent {
|
|
|
48300
48307
|
{ id: 'admin', name: 'admin' },
|
|
48301
48308
|
];
|
|
48302
48309
|
/** Namespace i18n con que la vista resuelve sus textos. */
|
|
48303
|
-
this.i18nNamespace = DEFAULT_NAMESPACE$
|
|
48310
|
+
this.i18nNamespace = DEFAULT_NAMESPACE$4;
|
|
48304
48311
|
this.working = signal(false);
|
|
48305
48312
|
this.currentRole = signal('');
|
|
48306
48313
|
this.roleControl = new FormControl('');
|
|
@@ -48340,8 +48347,8 @@ class MemberDetailModalComponent {
|
|
|
48340
48347
|
type: 'button',
|
|
48341
48348
|
state: this.working() ? ComponentStates.WORKING : ComponentStates.ENABLED,
|
|
48342
48349
|
}));
|
|
48343
|
-
if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$
|
|
48344
|
-
this.i18n.registerContent(DEFAULT_NAMESPACE$
|
|
48350
|
+
if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$4)) {
|
|
48351
|
+
this.i18n.registerContent(DEFAULT_NAMESPACE$4, MEMBER_DETAIL_MODAL_I18N);
|
|
48345
48352
|
}
|
|
48346
48353
|
}
|
|
48347
48354
|
ngOnInit() {
|
|
@@ -48678,7 +48685,7 @@ const TRANSFER_OWNERSHIP_MODAL_I18N = {
|
|
|
48678
48685
|
},
|
|
48679
48686
|
};
|
|
48680
48687
|
|
|
48681
|
-
const DEFAULT_NAMESPACE$
|
|
48688
|
+
const DEFAULT_NAMESPACE$3 = 'Settings.TransferModal';
|
|
48682
48689
|
/**
|
|
48683
48690
|
* `val-transfer-ownership-modal` — selector de miembro para transferir la
|
|
48684
48691
|
* propiedad de la organización. Promovido desde `showcase` bajo el proceso de
|
|
@@ -48702,7 +48709,7 @@ class TransferOwnershipModalComponent {
|
|
|
48702
48709
|
/** Lista de miembros transferibles (todos excepto el owner actual). */
|
|
48703
48710
|
this.members = [];
|
|
48704
48711
|
/** Namespace i18n con que la vista resuelve sus textos. */
|
|
48705
|
-
this.i18nNamespace = DEFAULT_NAMESPACE$
|
|
48712
|
+
this.i18nNamespace = DEFAULT_NAMESPACE$3;
|
|
48706
48713
|
this.query = signal('');
|
|
48707
48714
|
this.selectedId = signal('');
|
|
48708
48715
|
this.filtered = computed(() => {
|
|
@@ -48714,8 +48721,8 @@ class TransferOwnershipModalComponent {
|
|
|
48714
48721
|
m.userId.toLowerCase().includes(q));
|
|
48715
48722
|
});
|
|
48716
48723
|
this.noResultsLabel = computed(() => `${this.t('noResults')} "${this.query()}"`);
|
|
48717
|
-
if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$
|
|
48718
|
-
this.i18n.registerContent(DEFAULT_NAMESPACE$
|
|
48724
|
+
if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$3)) {
|
|
48725
|
+
this.i18n.registerContent(DEFAULT_NAMESPACE$3, TRANSFER_OWNERSHIP_MODAL_I18N);
|
|
48719
48726
|
}
|
|
48720
48727
|
}
|
|
48721
48728
|
ngOnInit() {
|
|
@@ -48900,6 +48907,371 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
48900
48907
|
type: Input
|
|
48901
48908
|
}] } });
|
|
48902
48909
|
|
|
48910
|
+
/**
|
|
48911
|
+
* Defaults i18n (es/en) embebidos en `val-member-import-modal` (ADR-023).
|
|
48912
|
+
* Auto-registrados si el consumer no proveyó el namespace `Settings.ImportModal`.
|
|
48913
|
+
*/
|
|
48914
|
+
const MEMBER_IMPORT_MODAL_I18N = {
|
|
48915
|
+
es: {
|
|
48916
|
+
title: 'Importar miembros',
|
|
48917
|
+
hint: 'Pega un CSV con columnas: email, nombre, rol (una fila por persona).',
|
|
48918
|
+
csvPlaceholder: 'email,nombre,rol\nana@x.com,Ana,editor\nbeto@x.com,Beto,viewer',
|
|
48919
|
+
rolesAvailable: 'Roles disponibles:',
|
|
48920
|
+
onConflictLabel: 'Si el email ya existe',
|
|
48921
|
+
conflictAssign: 'Asignar el rol',
|
|
48922
|
+
conflictSkip: 'Omitir',
|
|
48923
|
+
conflictError: 'Marcar error',
|
|
48924
|
+
sendActivation: 'Enviar email de activación a las cuentas nuevas',
|
|
48925
|
+
submit: 'Importar',
|
|
48926
|
+
submitting: 'Importando...',
|
|
48927
|
+
parseError: 'No se pudo interpretar el CSV. Revisa el formato.',
|
|
48928
|
+
noRows: 'Pega al menos una fila válida (email y rol).',
|
|
48929
|
+
summary: 'Resumen',
|
|
48930
|
+
created: 'creados',
|
|
48931
|
+
assigned: 'asignados',
|
|
48932
|
+
skipped: 'omitidos',
|
|
48933
|
+
failed: 'con error',
|
|
48934
|
+
colEmail: 'Email',
|
|
48935
|
+
colStatus: 'Estado',
|
|
48936
|
+
colDetail: 'Detalle',
|
|
48937
|
+
activationSent: 'activación enviada',
|
|
48938
|
+
activationPending: 'activación pendiente',
|
|
48939
|
+
again: 'Importar otro lote',
|
|
48940
|
+
close: 'Cerrar',
|
|
48941
|
+
genericError: 'No se pudo completar la importación. Intenta de nuevo.',
|
|
48942
|
+
},
|
|
48943
|
+
en: {
|
|
48944
|
+
title: 'Import members',
|
|
48945
|
+
hint: 'Paste a CSV with columns: email, name, role (one row per person).',
|
|
48946
|
+
csvPlaceholder: 'email,name,role\nana@x.com,Ana,editor\nbeto@x.com,Beto,viewer',
|
|
48947
|
+
rolesAvailable: 'Available roles:',
|
|
48948
|
+
onConflictLabel: 'If the email already exists',
|
|
48949
|
+
conflictAssign: 'Assign the role',
|
|
48950
|
+
conflictSkip: 'Skip',
|
|
48951
|
+
conflictError: 'Mark as error',
|
|
48952
|
+
sendActivation: 'Send activation email to new accounts',
|
|
48953
|
+
submit: 'Import',
|
|
48954
|
+
submitting: 'Importing...',
|
|
48955
|
+
parseError: "Couldn't parse the CSV. Check the format.",
|
|
48956
|
+
noRows: 'Paste at least one valid row (email and role).',
|
|
48957
|
+
summary: 'Summary',
|
|
48958
|
+
created: 'created',
|
|
48959
|
+
assigned: 'assigned',
|
|
48960
|
+
skipped: 'skipped',
|
|
48961
|
+
failed: 'failed',
|
|
48962
|
+
colEmail: 'Email',
|
|
48963
|
+
colStatus: 'Status',
|
|
48964
|
+
colDetail: 'Detail',
|
|
48965
|
+
activationSent: 'activation sent',
|
|
48966
|
+
activationPending: 'activation pending',
|
|
48967
|
+
again: 'Import another batch',
|
|
48968
|
+
close: 'Close',
|
|
48969
|
+
genericError: "Couldn't complete the import. Try again.",
|
|
48970
|
+
},
|
|
48971
|
+
};
|
|
48972
|
+
|
|
48973
|
+
const DEFAULT_NAMESPACE$2 = 'Settings.ImportModal';
|
|
48974
|
+
/**
|
|
48975
|
+
* `val-member-import-modal` — panel de carga masiva de miembros (ADR-023 fase 6).
|
|
48976
|
+
*
|
|
48977
|
+
* El admin pega un CSV (`email,nombre,rol`); el modal lo parsea a filas y llama
|
|
48978
|
+
* `OrgService.importMembers`. Muestra el resultado por-fila (partial success):
|
|
48979
|
+
* `created` / `assigned` / `skipped` / `error`. Header canónico (Regla #5).
|
|
48980
|
+
*
|
|
48981
|
+
* Auto-registra defaults i18n (es/en) en `Settings.ImportModal`.
|
|
48982
|
+
*/
|
|
48983
|
+
class MemberImportModalComponent {
|
|
48984
|
+
constructor() {
|
|
48985
|
+
this.i18n = inject(I18nService);
|
|
48986
|
+
this.orgService = inject(OrgService);
|
|
48987
|
+
/** Org destino del import. */
|
|
48988
|
+
this.orgId = '';
|
|
48989
|
+
/** Nombres de roles disponibles (para el hint). Opcional. */
|
|
48990
|
+
this.availableRoles = [];
|
|
48991
|
+
/** Namespace i18n. */
|
|
48992
|
+
this.i18nNamespace = DEFAULT_NAMESPACE$2;
|
|
48993
|
+
this.csv = '';
|
|
48994
|
+
this.onConflict = 'assignRole';
|
|
48995
|
+
this.sendActivation = true;
|
|
48996
|
+
this.submitting = signal(false);
|
|
48997
|
+
this.errorMsg = signal('');
|
|
48998
|
+
this.results = signal(null);
|
|
48999
|
+
this.rolesHint = computed(() => this.availableRoles.length ? `${this.t('rolesAvailable')} ${this.availableRoles.join(', ')}` : '');
|
|
49000
|
+
this.summaryLabel = computed(() => {
|
|
49001
|
+
const s = this.results()?.summary;
|
|
49002
|
+
if (!s)
|
|
49003
|
+
return this.t('summary');
|
|
49004
|
+
return `${this.t('summary')}: ${s.created} ${this.t('created')} · ${s.assigned} ${this.t('assigned')} · ${s.skipped} ${this.t('skipped')} · ${s.failed} ${this.t('failed')}`;
|
|
49005
|
+
});
|
|
49006
|
+
if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$2)) {
|
|
49007
|
+
this.i18n.registerContent(DEFAULT_NAMESPACE$2, MEMBER_IMPORT_MODAL_I18N);
|
|
49008
|
+
}
|
|
49009
|
+
}
|
|
49010
|
+
ngOnInit() {
|
|
49011
|
+
if (!this.i18n.hasNamespace(this.i18nNamespace)) {
|
|
49012
|
+
this.i18n.registerContent(this.i18nNamespace, MEMBER_IMPORT_MODAL_I18N);
|
|
49013
|
+
}
|
|
49014
|
+
}
|
|
49015
|
+
/** Parsea el CSV pegado a filas {email,name,roleName}. Tolera header. */
|
|
49016
|
+
parseCsv() {
|
|
49017
|
+
const rows = [];
|
|
49018
|
+
for (const raw of this.csv.split(/\r?\n/)) {
|
|
49019
|
+
const line = raw.trim();
|
|
49020
|
+
if (!line)
|
|
49021
|
+
continue;
|
|
49022
|
+
const cols = line.split(',').map(c => c.trim());
|
|
49023
|
+
const email = (cols[0] ?? '').toLowerCase();
|
|
49024
|
+
// Saltar header (primera col "email") o líneas sin @.
|
|
49025
|
+
if (!email || !email.includes('@'))
|
|
49026
|
+
continue;
|
|
49027
|
+
rows.push({ email, name: cols[1] ?? '', roleName: cols[2] ?? '' });
|
|
49028
|
+
}
|
|
49029
|
+
return rows;
|
|
49030
|
+
}
|
|
49031
|
+
submit() {
|
|
49032
|
+
this.errorMsg.set('');
|
|
49033
|
+
const users = this.parseCsv();
|
|
49034
|
+
if (users.length === 0) {
|
|
49035
|
+
this.errorMsg.set(this.t('noRows'));
|
|
49036
|
+
return;
|
|
49037
|
+
}
|
|
49038
|
+
if (users.some(u => !u.roleName)) {
|
|
49039
|
+
this.errorMsg.set(this.t('parseError'));
|
|
49040
|
+
return;
|
|
49041
|
+
}
|
|
49042
|
+
this.submitting.set(true);
|
|
49043
|
+
this.orgService
|
|
49044
|
+
.importMembers(this.orgId, {
|
|
49045
|
+
users,
|
|
49046
|
+
onConflict: this.onConflict,
|
|
49047
|
+
sendActivation: this.sendActivation,
|
|
49048
|
+
})
|
|
49049
|
+
.subscribe({
|
|
49050
|
+
next: res => {
|
|
49051
|
+
this.submitting.set(false);
|
|
49052
|
+
this.results.set(res);
|
|
49053
|
+
// Refrescar lista del consumer si hubo altas/asignaciones efectivas.
|
|
49054
|
+
if (res.summary.created + res.summary.assigned > 0) {
|
|
49055
|
+
this.onSuccess?.();
|
|
49056
|
+
}
|
|
49057
|
+
},
|
|
49058
|
+
error: err => {
|
|
49059
|
+
this.submitting.set(false);
|
|
49060
|
+
this.errorMsg.set(err?.error?.message ?? this.t('genericError'));
|
|
49061
|
+
},
|
|
49062
|
+
});
|
|
49063
|
+
}
|
|
49064
|
+
statusLabel(r) {
|
|
49065
|
+
const base = this.t(r.status === 'error' ? 'failed' : r.status);
|
|
49066
|
+
if (r.status === 'created' && r.activation) {
|
|
49067
|
+
return `${base} · ${this.t(r.activation === 'sent' ? 'activationSent' : 'activationPending')}`;
|
|
49068
|
+
}
|
|
49069
|
+
return base;
|
|
49070
|
+
}
|
|
49071
|
+
reset() {
|
|
49072
|
+
this.csv = '';
|
|
49073
|
+
this.errorMsg.set('');
|
|
49074
|
+
this.results.set(null);
|
|
49075
|
+
}
|
|
49076
|
+
dismiss() {
|
|
49077
|
+
this._modalRef?.dismiss(null, 'cancel');
|
|
49078
|
+
}
|
|
49079
|
+
t(key) {
|
|
49080
|
+
return this.i18n.t(key, this.i18nNamespace);
|
|
49081
|
+
}
|
|
49082
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MemberImportModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
49083
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: MemberImportModalComponent, isStandalone: true, selector: "val-member-import-modal", inputs: { orgId: "orgId", availableRoles: "availableRoles", onSuccess: "onSuccess", _modalRef: "_modalRef", i18nNamespace: "i18nNamespace" }, ngImport: i0, template: `
|
|
49084
|
+
<ion-header>
|
|
49085
|
+
<ion-toolbar>
|
|
49086
|
+
<ion-buttons slot="end">
|
|
49087
|
+
<ion-button fill="clear" color="dark" (click)="dismiss()">
|
|
49088
|
+
<strong>{{ t('close') }}</strong>
|
|
49089
|
+
</ion-button>
|
|
49090
|
+
</ion-buttons>
|
|
49091
|
+
</ion-toolbar>
|
|
49092
|
+
</ion-header>
|
|
49093
|
+
|
|
49094
|
+
<ion-content class="ion-padding">
|
|
49095
|
+
<val-display [props]="{ content: t('title'), size: 'small', color: 'dark' }" />
|
|
49096
|
+
|
|
49097
|
+
@if (!results()) {
|
|
49098
|
+
<val-title [props]="{ content: t('hint'), size: 'large', color: '', bold: false }" />
|
|
49099
|
+
|
|
49100
|
+
@if (rolesHint()) {
|
|
49101
|
+
<val-text [props]="{ content: rolesHint(), size: 'small', color: 'medium', bold: false }" />
|
|
49102
|
+
}
|
|
49103
|
+
|
|
49104
|
+
<ion-textarea
|
|
49105
|
+
class="import-csv"
|
|
49106
|
+
[autoGrow]="true"
|
|
49107
|
+
[rows]="6"
|
|
49108
|
+
[placeholder]="t('csvPlaceholder')"
|
|
49109
|
+
[(ngModel)]="csv"
|
|
49110
|
+
/>
|
|
49111
|
+
|
|
49112
|
+
<ion-select
|
|
49113
|
+
class="import-conflict"
|
|
49114
|
+
label="{{ t('onConflictLabel') }}"
|
|
49115
|
+
labelPlacement="stacked"
|
|
49116
|
+
interface="popover"
|
|
49117
|
+
[(ngModel)]="onConflict"
|
|
49118
|
+
>
|
|
49119
|
+
<ion-select-option value="assignRole">{{ t('conflictAssign') }}</ion-select-option>
|
|
49120
|
+
<ion-select-option value="skip">{{ t('conflictSkip') }}</ion-select-option>
|
|
49121
|
+
<ion-select-option value="error">{{ t('conflictError') }}</ion-select-option>
|
|
49122
|
+
</ion-select>
|
|
49123
|
+
|
|
49124
|
+
<ion-checkbox class="import-activation" labelPlacement="end" [(ngModel)]="sendActivation">
|
|
49125
|
+
{{ t('sendActivation') }}
|
|
49126
|
+
</ion-checkbox>
|
|
49127
|
+
|
|
49128
|
+
@if (errorMsg()) {
|
|
49129
|
+
<p class="import-error">{{ errorMsg() }}</p>
|
|
49130
|
+
}
|
|
49131
|
+
|
|
49132
|
+
<div class="import-actions">
|
|
49133
|
+
<ion-button expand="block" color="dark" [disabled]="submitting()" (click)="submit()">
|
|
49134
|
+
@if (submitting()) {
|
|
49135
|
+
<ion-spinner name="dots" />
|
|
49136
|
+
{{ t('submitting') }}
|
|
49137
|
+
} @else {
|
|
49138
|
+
{{ t('submit') }}
|
|
49139
|
+
}
|
|
49140
|
+
</ion-button>
|
|
49141
|
+
</div>
|
|
49142
|
+
} @else {
|
|
49143
|
+
<!-- Resultados -->
|
|
49144
|
+
<val-title [props]="{ content: summaryLabel(), size: 'large', color: '', bold: true }" />
|
|
49145
|
+
<div class="import-results">
|
|
49146
|
+
@for (r of results()!.results; track r.email) {
|
|
49147
|
+
<div class="import-row import-row--{{ r.status }}">
|
|
49148
|
+
<span class="import-row__email">{{ r.email }}</span>
|
|
49149
|
+
<span class="import-row__status">{{ statusLabel(r) }}</span>
|
|
49150
|
+
@if (r.reason) {
|
|
49151
|
+
<span class="import-row__reason">{{ r.reason }}</span>
|
|
49152
|
+
}
|
|
49153
|
+
</div>
|
|
49154
|
+
}
|
|
49155
|
+
</div>
|
|
49156
|
+
<div class="import-actions">
|
|
49157
|
+
<ion-button expand="block" fill="outline" color="dark" (click)="reset()">
|
|
49158
|
+
{{ t('again') }}
|
|
49159
|
+
</ion-button>
|
|
49160
|
+
</div>
|
|
49161
|
+
}
|
|
49162
|
+
</ion-content>
|
|
49163
|
+
`, isInline: true, styles: ["val-display{display:block;margin-bottom:4px}val-title{display:block;margin-bottom:12px}.import-csv{--background: var(--ion-color-light);border-radius:10px;margin-bottom:16px;font-family:monospace;font-size:13px}.import-conflict{margin-bottom:12px}.import-activation{display:block;margin-bottom:16px;font-size:14px}.import-error{margin:0 0 12px;font-size:.875rem;color:var(--ion-color-danger, #c0392b)}.import-actions{margin-top:8px}.import-results{display:flex;flex-direction:column;gap:6px;margin:12px 0}.import-row{display:grid;grid-template-columns:1fr auto;grid-row-gap:2px;align-items:center;padding:10px 12px;border-radius:8px;border-left:3px solid var(--ion-color-medium);background:var(--ion-color-light);font-size:14px}.import-row--created{border-left-color:var(--ion-color-success, #2dd36f)}.import-row--assigned{border-left-color:var(--ion-color-primary, #7026df)}.import-row--skipped{border-left-color:var(--ion-color-medium, #92949c)}.import-row--error{border-left-color:var(--ion-color-danger, #c0392b)}.import-row__email{font-weight:600;color:var(--ion-color-dark)}.import-row__status{text-align:right;color:var(--ion-color-medium-shade, #6b6e76)}.import-row__reason{grid-column:1 / -1;font-size:12px;color:var(--ion-color-danger, #c0392b)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { 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: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonTextarea, selector: "ion-textarea", inputs: ["autoGrow", "autocapitalize", "autofocus", "clearOnEdit", "color", "cols", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "maxlength", "minlength", "mode", "name", "placeholder", "readonly", "required", "rows", "shape", "spellcheck", "value", "wrap"] }, { kind: "component", type: IonSelect, selector: "ion-select", inputs: ["cancelText", "color", "compareWith", "disabled", "errorText", "expandedIcon", "fill", "helperText", "interface", "interfaceOptions", "justify", "label", "labelPlacement", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "shape", "toggleIcon", "value"] }, { kind: "component", type: IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }, { kind: "component", type: IonCheckbox, selector: "ion-checkbox", inputs: ["checked", "color", "disabled", "errorText", "helperText", "indeterminate", "justify", "labelPlacement", "mode", "name", "value"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TextComponent, selector: "val-text", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }] }); }
|
|
49164
|
+
}
|
|
49165
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MemberImportModalComponent, decorators: [{
|
|
49166
|
+
type: Component,
|
|
49167
|
+
args: [{ selector: 'val-member-import-modal', standalone: true, imports: [
|
|
49168
|
+
FormsModule,
|
|
49169
|
+
IonHeader,
|
|
49170
|
+
IonToolbar,
|
|
49171
|
+
IonButtons,
|
|
49172
|
+
IonButton,
|
|
49173
|
+
IonContent,
|
|
49174
|
+
IonTextarea,
|
|
49175
|
+
IonSelect,
|
|
49176
|
+
IonSelectOption,
|
|
49177
|
+
IonCheckbox,
|
|
49178
|
+
IonSpinner,
|
|
49179
|
+
DisplayComponent,
|
|
49180
|
+
TextComponent,
|
|
49181
|
+
TitleComponent,
|
|
49182
|
+
], template: `
|
|
49183
|
+
<ion-header>
|
|
49184
|
+
<ion-toolbar>
|
|
49185
|
+
<ion-buttons slot="end">
|
|
49186
|
+
<ion-button fill="clear" color="dark" (click)="dismiss()">
|
|
49187
|
+
<strong>{{ t('close') }}</strong>
|
|
49188
|
+
</ion-button>
|
|
49189
|
+
</ion-buttons>
|
|
49190
|
+
</ion-toolbar>
|
|
49191
|
+
</ion-header>
|
|
49192
|
+
|
|
49193
|
+
<ion-content class="ion-padding">
|
|
49194
|
+
<val-display [props]="{ content: t('title'), size: 'small', color: 'dark' }" />
|
|
49195
|
+
|
|
49196
|
+
@if (!results()) {
|
|
49197
|
+
<val-title [props]="{ content: t('hint'), size: 'large', color: '', bold: false }" />
|
|
49198
|
+
|
|
49199
|
+
@if (rolesHint()) {
|
|
49200
|
+
<val-text [props]="{ content: rolesHint(), size: 'small', color: 'medium', bold: false }" />
|
|
49201
|
+
}
|
|
49202
|
+
|
|
49203
|
+
<ion-textarea
|
|
49204
|
+
class="import-csv"
|
|
49205
|
+
[autoGrow]="true"
|
|
49206
|
+
[rows]="6"
|
|
49207
|
+
[placeholder]="t('csvPlaceholder')"
|
|
49208
|
+
[(ngModel)]="csv"
|
|
49209
|
+
/>
|
|
49210
|
+
|
|
49211
|
+
<ion-select
|
|
49212
|
+
class="import-conflict"
|
|
49213
|
+
label="{{ t('onConflictLabel') }}"
|
|
49214
|
+
labelPlacement="stacked"
|
|
49215
|
+
interface="popover"
|
|
49216
|
+
[(ngModel)]="onConflict"
|
|
49217
|
+
>
|
|
49218
|
+
<ion-select-option value="assignRole">{{ t('conflictAssign') }}</ion-select-option>
|
|
49219
|
+
<ion-select-option value="skip">{{ t('conflictSkip') }}</ion-select-option>
|
|
49220
|
+
<ion-select-option value="error">{{ t('conflictError') }}</ion-select-option>
|
|
49221
|
+
</ion-select>
|
|
49222
|
+
|
|
49223
|
+
<ion-checkbox class="import-activation" labelPlacement="end" [(ngModel)]="sendActivation">
|
|
49224
|
+
{{ t('sendActivation') }}
|
|
49225
|
+
</ion-checkbox>
|
|
49226
|
+
|
|
49227
|
+
@if (errorMsg()) {
|
|
49228
|
+
<p class="import-error">{{ errorMsg() }}</p>
|
|
49229
|
+
}
|
|
49230
|
+
|
|
49231
|
+
<div class="import-actions">
|
|
49232
|
+
<ion-button expand="block" color="dark" [disabled]="submitting()" (click)="submit()">
|
|
49233
|
+
@if (submitting()) {
|
|
49234
|
+
<ion-spinner name="dots" />
|
|
49235
|
+
{{ t('submitting') }}
|
|
49236
|
+
} @else {
|
|
49237
|
+
{{ t('submit') }}
|
|
49238
|
+
}
|
|
49239
|
+
</ion-button>
|
|
49240
|
+
</div>
|
|
49241
|
+
} @else {
|
|
49242
|
+
<!-- Resultados -->
|
|
49243
|
+
<val-title [props]="{ content: summaryLabel(), size: 'large', color: '', bold: true }" />
|
|
49244
|
+
<div class="import-results">
|
|
49245
|
+
@for (r of results()!.results; track r.email) {
|
|
49246
|
+
<div class="import-row import-row--{{ r.status }}">
|
|
49247
|
+
<span class="import-row__email">{{ r.email }}</span>
|
|
49248
|
+
<span class="import-row__status">{{ statusLabel(r) }}</span>
|
|
49249
|
+
@if (r.reason) {
|
|
49250
|
+
<span class="import-row__reason">{{ r.reason }}</span>
|
|
49251
|
+
}
|
|
49252
|
+
</div>
|
|
49253
|
+
}
|
|
49254
|
+
</div>
|
|
49255
|
+
<div class="import-actions">
|
|
49256
|
+
<ion-button expand="block" fill="outline" color="dark" (click)="reset()">
|
|
49257
|
+
{{ t('again') }}
|
|
49258
|
+
</ion-button>
|
|
49259
|
+
</div>
|
|
49260
|
+
}
|
|
49261
|
+
</ion-content>
|
|
49262
|
+
`, styles: ["val-display{display:block;margin-bottom:4px}val-title{display:block;margin-bottom:12px}.import-csv{--background: var(--ion-color-light);border-radius:10px;margin-bottom:16px;font-family:monospace;font-size:13px}.import-conflict{margin-bottom:12px}.import-activation{display:block;margin-bottom:16px;font-size:14px}.import-error{margin:0 0 12px;font-size:.875rem;color:var(--ion-color-danger, #c0392b)}.import-actions{margin-top:8px}.import-results{display:flex;flex-direction:column;gap:6px;margin:12px 0}.import-row{display:grid;grid-template-columns:1fr auto;grid-row-gap:2px;align-items:center;padding:10px 12px;border-radius:8px;border-left:3px solid var(--ion-color-medium);background:var(--ion-color-light);font-size:14px}.import-row--created{border-left-color:var(--ion-color-success, #2dd36f)}.import-row--assigned{border-left-color:var(--ion-color-primary, #7026df)}.import-row--skipped{border-left-color:var(--ion-color-medium, #92949c)}.import-row--error{border-left-color:var(--ion-color-danger, #c0392b)}.import-row__email{font-weight:600;color:var(--ion-color-dark)}.import-row__status{text-align:right;color:var(--ion-color-medium-shade, #6b6e76)}.import-row__reason{grid-column:1 / -1;font-size:12px;color:var(--ion-color-danger, #c0392b)}\n"] }]
|
|
49263
|
+
}], ctorParameters: () => [], propDecorators: { orgId: [{
|
|
49264
|
+
type: Input
|
|
49265
|
+
}], availableRoles: [{
|
|
49266
|
+
type: Input
|
|
49267
|
+
}], onSuccess: [{
|
|
49268
|
+
type: Input
|
|
49269
|
+
}], _modalRef: [{
|
|
49270
|
+
type: Input
|
|
49271
|
+
}], i18nNamespace: [{
|
|
49272
|
+
type: Input
|
|
49273
|
+
}] } });
|
|
49274
|
+
|
|
48903
49275
|
/**
|
|
48904
49276
|
* Defaults i18n (es/en) embebidos en `val-organization-view`. Auto-registrados en
|
|
48905
49277
|
* el constructor del componente si el consumer no proveyó el namespace
|
|
@@ -48955,6 +49327,7 @@ const ORGANIZATION_VIEW_I18N = {
|
|
|
48955
49327
|
inviteCtaTitle: '¿Deseas agregar a alguien?',
|
|
48956
49328
|
inviteCtaHint: 'Invita a usuarios a unirse a tu organización.',
|
|
48957
49329
|
inviteOpen: 'Invitar',
|
|
49330
|
+
importOpen: 'Importar',
|
|
48958
49331
|
viewMemberCta: 'Ver miembro',
|
|
48959
49332
|
roleViewer: 'Visor',
|
|
48960
49333
|
roleEditor: 'Editor',
|
|
@@ -49024,6 +49397,7 @@ const ORGANIZATION_VIEW_I18N = {
|
|
|
49024
49397
|
inviteCtaTitle: 'Want to add someone?',
|
|
49025
49398
|
inviteCtaHint: 'Invite users to join your organization.',
|
|
49026
49399
|
inviteOpen: 'Invite',
|
|
49400
|
+
importOpen: 'Import',
|
|
49027
49401
|
viewMemberCta: 'View member',
|
|
49028
49402
|
roleViewer: 'Viewer',
|
|
49029
49403
|
roleEditor: 'Editor',
|
|
@@ -49137,6 +49511,22 @@ class OrganizationViewComponent {
|
|
|
49137
49511
|
this.members = signal([]);
|
|
49138
49512
|
this.membersLoading = signal(false);
|
|
49139
49513
|
this.membersLoadError = signal(null);
|
|
49514
|
+
this.membersErrorState = computed(() => {
|
|
49515
|
+
this.i18n.lang();
|
|
49516
|
+
const err = this.membersLoadError();
|
|
49517
|
+
if (!err)
|
|
49518
|
+
return null;
|
|
49519
|
+
return createErrorStateProps(err, {
|
|
49520
|
+
title: { offline: this.tt('offlineTitle'), error: this.tt('errorTitle') },
|
|
49521
|
+
description: {
|
|
49522
|
+
offline: this.tt('offlineHint'),
|
|
49523
|
+
error: interpretError(err).message,
|
|
49524
|
+
},
|
|
49525
|
+
retryLabel: this.tt('retry'),
|
|
49526
|
+
onRetry: () => this.loadMembers(),
|
|
49527
|
+
retrying: this.membersLoading(),
|
|
49528
|
+
});
|
|
49529
|
+
});
|
|
49140
49530
|
this.membersNextToken = signal(null);
|
|
49141
49531
|
this.loadingMoreMembers = signal(false);
|
|
49142
49532
|
this.showAllMembers = signal(false);
|
|
@@ -49223,6 +49613,14 @@ class OrganizationViewComponent {
|
|
|
49223
49613
|
shape: 'round',
|
|
49224
49614
|
type: 'button',
|
|
49225
49615
|
}));
|
|
49616
|
+
this.openImportButtonProps = computed(() => ({
|
|
49617
|
+
text: this.tt('importOpen'),
|
|
49618
|
+
color: 'dark',
|
|
49619
|
+
fill: 'outline',
|
|
49620
|
+
size: 'default',
|
|
49621
|
+
shape: 'round',
|
|
49622
|
+
type: 'button',
|
|
49623
|
+
}));
|
|
49226
49624
|
/** Guarda para detectar el primer disparo del effect (evita doble carga). */
|
|
49227
49625
|
this.lastLoadedOrgId = null;
|
|
49228
49626
|
const ns = this.ns;
|
|
@@ -49323,6 +49721,25 @@ class OrganizationViewComponent {
|
|
|
49323
49721
|
backdropDismiss: true,
|
|
49324
49722
|
});
|
|
49325
49723
|
}
|
|
49724
|
+
onOpenImport() {
|
|
49725
|
+
void this.modalService.open({
|
|
49726
|
+
component: MemberImportModalComponent,
|
|
49727
|
+
componentProps: {
|
|
49728
|
+
orgId: this.activeOrgId(),
|
|
49729
|
+
availableRoles: this.availableRoles().map(r => r.name),
|
|
49730
|
+
onSuccess: () => {
|
|
49731
|
+
this.loadMembers();
|
|
49732
|
+
this.resolvedConfig().onMemberInvited?.();
|
|
49733
|
+
},
|
|
49734
|
+
},
|
|
49735
|
+
breakpoints: {
|
|
49736
|
+
breakpoints: [0, 0.92],
|
|
49737
|
+
initialBreakpoint: 0.92,
|
|
49738
|
+
showHandle: true,
|
|
49739
|
+
},
|
|
49740
|
+
backdropDismiss: true,
|
|
49741
|
+
});
|
|
49742
|
+
}
|
|
49326
49743
|
onViewPermissions() {
|
|
49327
49744
|
this.nav.navigateByUrl(this.resolvedConfig().viewPermissionsRoute);
|
|
49328
49745
|
}
|
|
@@ -49404,6 +49821,7 @@ class OrganizationViewComponent {
|
|
|
49404
49821
|
if (!orgId)
|
|
49405
49822
|
return Promise.resolve();
|
|
49406
49823
|
this.membersLoading.set(true);
|
|
49824
|
+
this.membersLoadError.set(null);
|
|
49407
49825
|
this.membersNextToken.set(null);
|
|
49408
49826
|
this.showAllMembers.set(false);
|
|
49409
49827
|
return new Promise(resolve => {
|
|
@@ -49614,6 +50032,8 @@ class OrganizationViewComponent {
|
|
|
49614
50032
|
<div class="section-body">
|
|
49615
50033
|
@if (membersLoading()) {
|
|
49616
50034
|
<val-skeleton-layout [props]="{ preset: 'list', rows: 3 }" />
|
|
50035
|
+
} @else if (membersErrorState()) {
|
|
50036
|
+
<val-empty-state [props]="membersErrorState()!" />
|
|
49617
50037
|
} @else if (members().length === 0) {
|
|
49618
50038
|
<val-text
|
|
49619
50039
|
[props]="{
|
|
@@ -49706,6 +50126,7 @@ class OrganizationViewComponent {
|
|
|
49706
50126
|
/>
|
|
49707
50127
|
</div>
|
|
49708
50128
|
<val-button [props]="openInviteButtonProps()" (click)="onOpenInvite()" />
|
|
50129
|
+
<val-button [props]="openImportButtonProps()" (click)="onOpenImport()" />
|
|
49709
50130
|
</div>
|
|
49710
50131
|
</section>
|
|
49711
50132
|
}
|
|
@@ -49814,6 +50235,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
49814
50235
|
ButtonComponent,
|
|
49815
50236
|
MemberCardComponent,
|
|
49816
50237
|
TransferOwnershipModalComponent,
|
|
50238
|
+
MemberImportModalComponent,
|
|
49817
50239
|
], template: `
|
|
49818
50240
|
<div class="page">
|
|
49819
50241
|
<header class="page-header">
|
|
@@ -49892,6 +50314,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
49892
50314
|
<div class="section-body">
|
|
49893
50315
|
@if (membersLoading()) {
|
|
49894
50316
|
<val-skeleton-layout [props]="{ preset: 'list', rows: 3 }" />
|
|
50317
|
+
} @else if (membersErrorState()) {
|
|
50318
|
+
<val-empty-state [props]="membersErrorState()!" />
|
|
49895
50319
|
} @else if (members().length === 0) {
|
|
49896
50320
|
<val-text
|
|
49897
50321
|
[props]="{
|
|
@@ -49984,6 +50408,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
49984
50408
|
/>
|
|
49985
50409
|
</div>
|
|
49986
50410
|
<val-button [props]="openInviteButtonProps()" (click)="onOpenInvite()" />
|
|
50411
|
+
<val-button [props]="openImportButtonProps()" (click)="onOpenImport()" />
|
|
49987
50412
|
</div>
|
|
49988
50413
|
</section>
|
|
49989
50414
|
}
|
|
@@ -61254,5 +61679,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
61254
61679
|
* Generated bundle index. Do not edit.
|
|
61255
61680
|
*/
|
|
61256
61681
|
|
|
61257
|
-
export { ACTION_CARD_DEFAULTS, AD_SIZE_MAP, API_TABLE_COLUMN_LABELS, ARTICLE_CARD_DEFAULTS, ARTICLE_SPACING, ARTICLE_STRIP_DEFAULTS, AUTH_CTA_DEFAULTS, AVATAR_UPLOAD_DEFAULTS, AccordionComponent, AccountViewComponent, ActionCardComponent, ActionHeaderComponent, ActionType, AdSlotComponent, AdsLoaderService, AdsService, AlertBoxComponent, AnalyticsErrorHandler, AnalyticsRouterTracker, AnalyticsService, AnimatedTerminalComponent, AppConfigService, AppVersionService, ArticleBuilder, ArticleCardComponent, ArticleComponent, ArticleStripComponent, AttachmentUploaderComponent, AuthBackgroundComponent, AuthCtaComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, AvatarUploadComponent, BOTTOM_NAV_DEFAULTS, BannerComponent, BaseDefault, BlogPostBuilder, BottomNavComponent, BoxComponent, BreadcrumbComponent, ButtonComponent, ButtonGroupComponent, CALLOUT_LABELS, CHEV_KEYS, CIRCLE_KEYS, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CONTENT_CARD_DEFAULTS, CORNER_KEYS, CTA_CARD_DEFAULTS, CURRENCY_INFO, CardComponent, CardSection, CardType, CardsCarouselComponent, ChangeEmailModalComponent, ChangePasswordModalComponent, CheckInputComponent, CheckboxRadioInputComponent, ChipGroupComponent, ClearDefault, ClearDefaultBlock, ClearDefaultFull, ClearDefaultRound, ClearDefaultRoundBlock, ClearDefaultRoundFull, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContainerComponent, ContentCardComponent, ContentLoaderComponent, ContentReactionComponent, ContentService, ContentTransformer, CookieBannerComponent, CountdownComponent, CreateOrgModalComponent, CtaCardComponent, CurrencyInputComponent, DEFAULT_ADS_CONFIG, DEFAULT_APP_CONFIG_SERVICE_CONFIG, DEFAULT_APP_VERSION_SERVICE_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_BACK_HEADER, DEFAULT_CANCEL_BUTTON, DEFAULT_CHECK_INTERVAL_MS, DEFAULT_CONFIRM_BUTTON, DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LABELS_EN, DEFAULT_DEBUG_CONSOLE_CONFIG, DEFAULT_DONATION_CONFIG, DEFAULT_EMPTY_STATE, DEFAULT_EMULATOR_CONFIG, DEFAULT_FEEDBACK_CONFIG, DEFAULT_FEEDBACK_TYPE_OPTIONS, DEFAULT_HOME_HEADER, DEFAULT_INFINITE_LIST_METADATA, DEFAULT_MODAL_CANCEL_BUTTON, DEFAULT_MODAL_CONFIRM_BUTTON, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLATFORMS, DEFAULT_REFRESHER_METADATA, DEFAULT_SKELETON_CONFIG, DEFAULT_SPLASH_SCREEN_CONFIG, DataTableComponent, DateInputComponent, DateRangeInputComponent, DebugConsoleComponent, DeleteAccountModalComponent, DetailSkeletonComponent, DeviceService, DisplayComponent, DividerComponent, DocsApiTableComponent, DocsBreadcrumbComponent, DocsBuilder, DocsCalloutComponent, DocsCodeExampleComponent, DocsLayoutComponent, DocsNavLinksComponent, DocsNavigationService, DocsPageComponent, DocsSearchComponent, DocsSectionComponent, DocsShellComponent, DocsSidebarComponent, DocsTocComponent, DonationService, DownloadService, EditOrgModalComponent, EmailInputComponent, EmptyStateComponent, ExpandableTextComponent, FEATURES_LIST_DEFAULTS, FUN_MODAL_DEFAULTS, FabComponent, FaqComponent, FeaturesListComponent, FeedbackFormComponent, FeedbackService, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FontSizeOption, FontSizeService, FooterComponent, FooterLinksComponent, FormComponent, FormSkeletonComponent, FunHeaderComponent, FunModalComponent, GlassComponent, GlowCardComponent, GlowComponent, GridSkeletonComponent, HANDOFF_ROUTE_PARAM, HANDOFF_TOKEN_PARAM, HandoffService, HasPermissionDirective, HeaderComponent, HintComponent, HorizontalScrollComponent, HourInputComponent, HrefComponent, I18nService, IMAGE_DEFAULTS, INFO_CARD_DEFAULTS, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, INVITATION_CARD_DEFAULTS, Icon, IconComponent, IconService, ImageComponent, ImageCropComponent, ImageService, InAppBrowserService, InfiniteListComponent, InfoCardComponent, InfoComponent, InputI18nHelper, InputType, InvitationCardComponent, InviteMemberModalComponent, ItemListComponent, LANG_STORAGE_KEY$1 as LANG_STORAGE_KEY, LEGAL_CONTENT_CONFIG, LOGIN_DEFAULTS, LandingSplitComponent, LandingStepsComponent, LanguageSelectorComponent, LayeredCardComponent, LegalContentService, LegalLinkService, LinkComponent, LinkProcessorService, LinkedProvidersComponent, LinksAccordionComponent, LinksCakeComponent, ListSkeletonComponent, LoadingDirective, LocalStorageService, LocaleService, LoginAttemptModalComponent, LoginComponent, MEDIA_OBJECT_DEFAULTS, MEMBER_CARD_DEFAULTS, METRIC_CARD_DEFAULTS, MODAL_SIZES, MOTIF_KEYS, MOTION, MaintenancePageComponent, MarkdownArticleParserService, MediaObjectComponent, MemberCardComponent, MemberDetailModalComponent, MenuComponent, MessagingService, MetaService, MetricCardComponent, MfaModalComponent, ModalService, ModalShellComponent, MultiSelectSearchComponent, NUM_KEYS, NavigationService, NetworkBannerComponent, NetworkStatusService, NewsBuilder, NoContentComponent, NotesBoxComponent, NotificationActionService, NotificationsService, NotificationsViewComponent, NumberFromToComponent, NumberInputComponent, NumberStepperComponent, OAUTH_PROVIDERS_INFO, OAuthCallbackComponent, OAuthService, OrgInfoSheetComponent, OrgService, OrgSwitchService, OrganizationViewComponent, OutlineDefault, OutlineDefaultBlock, OutlineDefaultFull, OutlineDefaultRound, OutlineDefaultRoundBlock, OutlineDefaultRoundFull, PATTERN_MOTIFS, PATTERN_PALETTES, PATTERN_STYLE_CONFIGS, PLATFORM_CONFIGS, PageContentComponent, PageLinksComponent, PageRefreshService, PageTemplateComponent, PageWavesComponent, PageWrapperComponent, PaginationComponent, PaginationService, PasswordInputComponent, PatternComponent, PhoneInputComponent, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PreferencesService, PreferencesViewComponent, PresetService, PriceTagComponent, PrimarySolidBlockButton, PrimarySolidBlockHrefButton, PrimarySolidBlockIconButton, PrimarySolidBlockIconHrefButton, PrimarySolidDefaultRoundButton, PrimarySolidDefaultRoundHrefButton, PrimarySolidDefaultRoundIconButton, PrimarySolidDefaultRoundIconHrefButton, PrimarySolidFullButton, PrimarySolidFullHrefButton, PrimarySolidFullIconButton, PrimarySolidFullIconHrefButton, PrimarySolidLargeRoundButton, PrimarySolidLargeRoundHrefButton, PrimarySolidLargeRoundIconButton, PrimarySolidLargeRoundIconHrefButton, PrimarySolidSmallRoundButton, PrimarySolidSmallRoundHrefButton, PrimarySolidSmallRoundIconButton, PrimarySolidSmallRoundIconHrefButton, ProcessLinksPipe, ProfileSkeletonComponent, ProfileViewComponent, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrCodeComponent, QrGeneratorService, QueryBuilder, QuoteBoxComponent, REQUEST_STATUSES, RadioInputComponent, RangeInputComponent, RatingComponent, RefresherComponent, RequestFirestoreService, RequestFormBuilderService, RequestService, RightsFooterComponent, RotatingTextComponent, SEARCH_HEADER_DEFAULTS, SETTINGS_SECTIONS_CATALOG, SHAPE_KEYS, SHARE_PROFILE_MODAL_DEFAULTS, SKELETON_LAYOUT_DEFAULT_ROWS, SKELETON_PRESETS, SOLID_KEYS, STATS_BAR_DEFAULTS, STROKE_KEYS, SearchHeaderComponent, SearchSelectorComponent, SearchbarComponent, SecondarySolidBlockButton, SecondarySolidBlockHrefButton, SecondarySolidBlockIconButton, SecondarySolidBlockIconHrefButton, SecondarySolidDefaultRoundButton, SecondarySolidDefaultRoundHrefButton, SecondarySolidDefaultRoundIconButton, SecondarySolidDefaultRoundIconHrefButton, SecondarySolidFullButton, SecondarySolidFullHrefButton, SecondarySolidFullIconButton, SecondarySolidFullIconHrefButton, SecondarySolidLargeRoundButton, SecondarySolidLargeRoundHrefButton, SecondarySolidLargeRoundIconButton, SecondarySolidLargeRoundIconHrefButton, SecondarySolidSmallRoundButton, SecondarySolidSmallRoundHrefButton, SecondarySolidSmallRoundIconButton, SecondarySolidSmallRoundIconHrefButton, SecurityViewComponent, SegmentControlComponent, SelectSearchComponent, SessionListModalComponent, SessionService, SettingsHubComponent, ShareButtonsComponent, ShareProfileModalComponent, SimpleComponent, SkeletonComponent, SkeletonLayoutComponent, SkeletonService, SolidBlockButton, SolidDefault, SolidDefaultBlock, SolidDefaultButton, SolidDefaultFull, SolidDefaultRound, SolidDefaultRoundBlock, SolidDefaultRoundButton, SolidDefaultRoundFull, SolidFullButton, SolidLargeButton, SolidLargeRoundButton, SolidSmallButton, SolidSmallRoundButton, SplashScreenService, StatsBarComponent, StatsCardComponent, StepperComponent, StorageService, SwipeCarouselComponent, SwitchOrgModalComponent, TRI_KEYS, TabbedContentComponent, TableSkeletonComponent, TabsComponent, Terminal404Component, TestimonialCardComponent, TestimonialCarouselComponent, TextComponent, TextInputComponent, TextareaInputComponent, ThemeOption, ThemeService, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TransferOwnershipModalComponent, TranslatePipe, TypedCollection, UPDATE_BANNER_DEFAULT_CONTENT, UPDATE_BANNER_I18N_NAMESPACE, UpdateBannerComponent, UserAvatarComponent, UsernameInputComponent, VALTECH_ADS_CONFIG, VALTECH_APP_CONFIG, VALTECH_APP_VERSION, VALTECH_AUTH_CONFIG, VALTECH_COMPANY_LINKS, VALTECH_CONTENT_CONFIG, VALTECH_DEBUG_CONSOLE, VALTECH_DEFAULT_CONTENT, VALTECH_DONATION_CONFIG, VALTECH_FEEDBACK_CONFIG, VALTECH_FIREBASE_CONFIG, VALTECH_FOOTER_I18N, VALTECH_FOOTER_LOGO, VALTECH_LANGUAGE_SELECTOR, VALTECH_LEGAL_CONFIG, VALTECH_NETWORK_ERROR_KEY, VALTECH_SITE_PATHS, VALTECH_SOCIAL_LINKS, VALTECH_SPLASH_SCREEN, VALTECH_WEB_BASE_URLS, VERSION, ValtechErrorService, WizardComponent, WizardFooterComponent, applyDefaultValueToControl, authGuard, authInterceptor, authPasswordValidator, beautifyLegalArticle, blogPost, buildCompanyFooterProps, buildFooterLinks, buildLegalLinkResolver, buildPath, buildSettingsCards, collections, connectPageRefresh, createErrorStateProps, createFirebaseConfig, createGlowCardProps, createInitialPaginationState, createNumberFromToField, createRefreshableStream, createTitleProps, docs, errorLoggingInterceptor, extractPathParams, generatePatternTiles, generateRandomTile, getAppInfo, getAppVersion, getCollectionPath, getDocumentId, getTimeOfDayKey, goToTop, guestGuard, hasEmulators, interpretError, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isValidPath, joinPath, maxLength, mulberry32, news, parseMarkdownArticle, permissionGuard, permissionGuardFromRoute, provideLegalContent, provideSplashScreen, provideValtechAccountRoutes, provideValtechAds, provideValtechAppConfig, provideValtechAppVersion, provideValtechAuth, provideValtechAuthInterceptor, provideValtechContent, provideValtechDebugConsole, provideValtechDonations, provideValtechErrorHandling, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechLegal, provideValtechNotificationsRoutes, provideValtechOrganizationRoutes, provideValtechPreferencesRoutes, provideValtechPresets, provideValtechProfileRoutes, provideValtechSecurityRoutes, provideValtechSettingsRoutes, provideValtechSite, provideValtechSkeleton, query, renderPatternSvgInner, replaceSpecialChars, resolveColor$1 as resolveColor, resolveInputDefaultValue, resolveWebBaseUrl, roleGuard, storagePaths, superAdminGuard, toArticle };
|
|
61682
|
+
export { ACTION_CARD_DEFAULTS, AD_SIZE_MAP, API_TABLE_COLUMN_LABELS, ARTICLE_CARD_DEFAULTS, ARTICLE_SPACING, ARTICLE_STRIP_DEFAULTS, AUTH_CTA_DEFAULTS, AVATAR_UPLOAD_DEFAULTS, AccordionComponent, AccountViewComponent, ActionCardComponent, ActionHeaderComponent, ActionType, AdSlotComponent, AdsLoaderService, AdsService, AlertBoxComponent, AnalyticsErrorHandler, AnalyticsRouterTracker, AnalyticsService, AnimatedTerminalComponent, AppConfigService, AppVersionService, ArticleBuilder, ArticleCardComponent, ArticleComponent, ArticleStripComponent, AttachmentUploaderComponent, AuthBackgroundComponent, AuthCtaComponent, AuthService, AuthStateService, AuthStorageService, AuthSyncService, AvatarComponent, AvatarUploadComponent, BOTTOM_NAV_DEFAULTS, BannerComponent, BaseDefault, BlogPostBuilder, BottomNavComponent, BoxComponent, BreadcrumbComponent, ButtonComponent, ButtonGroupComponent, CALLOUT_LABELS, CHEV_KEYS, CIRCLE_KEYS, COMMON_COUNTRY_CODES, COMMON_CURRENCIES, CONTENT_CARD_DEFAULTS, CORNER_KEYS, CTA_CARD_DEFAULTS, CURRENCY_INFO, CardComponent, CardSection, CardType, CardsCarouselComponent, ChangeEmailModalComponent, ChangePasswordModalComponent, CheckInputComponent, CheckboxRadioInputComponent, ChipGroupComponent, ClearDefault, ClearDefaultBlock, ClearDefaultFull, ClearDefaultRound, ClearDefaultRoundBlock, ClearDefaultRoundFull, CodeDisplayComponent, CommandDisplayComponent, CommentComponent, CommentInputComponent, CommentSectionComponent, CompanyFooterComponent, ComponentStates, ConfirmationDialogService, ContainerComponent, ContentCardComponent, ContentLoaderComponent, ContentReactionComponent, ContentService, ContentTransformer, CookieBannerComponent, CountdownComponent, CreateOrgModalComponent, CtaCardComponent, CurrencyInputComponent, DEFAULT_ADS_CONFIG, DEFAULT_APP_CONFIG_SERVICE_CONFIG, DEFAULT_APP_VERSION_SERVICE_CONFIG, DEFAULT_AUTH_CONFIG, DEFAULT_BACK_HEADER, DEFAULT_CANCEL_BUTTON, DEFAULT_CHECK_INTERVAL_MS, DEFAULT_CONFIRM_BUTTON, DEFAULT_COUNTDOWN_LABELS, DEFAULT_COUNTDOWN_LABELS_EN, DEFAULT_DEBUG_CONSOLE_CONFIG, DEFAULT_DONATION_CONFIG, DEFAULT_EMPTY_STATE, DEFAULT_EMULATOR_CONFIG, DEFAULT_FEEDBACK_CONFIG, DEFAULT_FEEDBACK_TYPE_OPTIONS, DEFAULT_HOME_HEADER, DEFAULT_INFINITE_LIST_METADATA, DEFAULT_MODAL_CANCEL_BUTTON, DEFAULT_MODAL_CONFIRM_BUTTON, DEFAULT_PAGE_SIZE_OPTIONS, DEFAULT_PLATFORMS, DEFAULT_REFRESHER_METADATA, DEFAULT_SKELETON_CONFIG, DEFAULT_SPLASH_SCREEN_CONFIG, DataTableComponent, DateInputComponent, DateRangeInputComponent, DebugConsoleComponent, DeleteAccountModalComponent, DetailSkeletonComponent, DeviceService, DisplayComponent, DividerComponent, DocsApiTableComponent, DocsBreadcrumbComponent, DocsBuilder, DocsCalloutComponent, DocsCodeExampleComponent, DocsLayoutComponent, DocsNavLinksComponent, DocsNavigationService, DocsPageComponent, DocsSearchComponent, DocsSectionComponent, DocsShellComponent, DocsSidebarComponent, DocsTocComponent, DonationService, DownloadService, EditOrgModalComponent, EmailInputComponent, EmptyStateComponent, ExpandableTextComponent, FEATURES_LIST_DEFAULTS, FUN_MODAL_DEFAULTS, FabComponent, FaqComponent, FeaturesListComponent, FeedbackFormComponent, FeedbackService, FileInputComponent, FirebaseService, FirestoreCollectionFactory, FirestoreService, FontSizeOption, FontSizeService, FooterComponent, FooterLinksComponent, FormComponent, FormSkeletonComponent, FunHeaderComponent, FunModalComponent, GlassComponent, GlowCardComponent, GlowComponent, GridSkeletonComponent, HANDOFF_ROUTE_PARAM, HANDOFF_TOKEN_PARAM, HandoffService, HasPermissionDirective, HeaderComponent, HintComponent, HorizontalScrollComponent, HourInputComponent, HrefComponent, I18nService, IMAGE_DEFAULTS, INFO_CARD_DEFAULTS, INITIAL_AUTH_STATE, INITIAL_MFA_STATE, INVITATION_CARD_DEFAULTS, Icon, IconComponent, IconService, ImageComponent, ImageCropComponent, ImageService, InAppBrowserService, InfiniteListComponent, InfoCardComponent, InfoComponent, InputI18nHelper, InputType, InvitationCardComponent, InviteMemberModalComponent, ItemListComponent, LANG_STORAGE_KEY$1 as LANG_STORAGE_KEY, LEGAL_CONTENT_CONFIG, LOGIN_DEFAULTS, LandingSplitComponent, LandingStepsComponent, LanguageSelectorComponent, LayeredCardComponent, LegalContentService, LegalLinkService, LinkComponent, LinkProcessorService, LinkedProvidersComponent, LinksAccordionComponent, LinksCakeComponent, ListSkeletonComponent, LoadingDirective, LocalStorageService, LocaleService, LoginAttemptModalComponent, LoginComponent, MEDIA_OBJECT_DEFAULTS, MEMBER_CARD_DEFAULTS, METRIC_CARD_DEFAULTS, MODAL_SIZES, MOTIF_KEYS, MOTION, MaintenancePageComponent, MarkdownArticleParserService, MediaObjectComponent, MemberCardComponent, MemberDetailModalComponent, MemberImportModalComponent, MenuComponent, MessagingService, MetaService, MetricCardComponent, MfaModalComponent, ModalService, ModalShellComponent, MultiSelectSearchComponent, NUM_KEYS, NavigationService, NetworkBannerComponent, NetworkStatusService, NewsBuilder, NoContentComponent, NotesBoxComponent, NotificationActionService, NotificationsService, NotificationsViewComponent, NumberFromToComponent, NumberInputComponent, NumberStepperComponent, OAUTH_PROVIDERS_INFO, OAuthCallbackComponent, OAuthService, OrgInfoSheetComponent, OrgService, OrgSwitchService, OrganizationViewComponent, OutlineDefault, OutlineDefaultBlock, OutlineDefaultFull, OutlineDefaultRound, OutlineDefaultRoundBlock, OutlineDefaultRoundFull, PATTERN_MOTIFS, PATTERN_PALETTES, PATTERN_STYLE_CONFIGS, PLATFORM_CONFIGS, PageContentComponent, PageLinksComponent, PageRefreshService, PageTemplateComponent, PageWavesComponent, PageWrapperComponent, PaginationComponent, PaginationService, PasswordInputComponent, PatternComponent, PhoneInputComponent, PillComponent, PinInputComponent, PlainCodeBoxComponent, PopoverSelectorComponent, PreferencesService, PreferencesViewComponent, PresetService, PriceTagComponent, PrimarySolidBlockButton, PrimarySolidBlockHrefButton, PrimarySolidBlockIconButton, PrimarySolidBlockIconHrefButton, PrimarySolidDefaultRoundButton, PrimarySolidDefaultRoundHrefButton, PrimarySolidDefaultRoundIconButton, PrimarySolidDefaultRoundIconHrefButton, PrimarySolidFullButton, PrimarySolidFullHrefButton, PrimarySolidFullIconButton, PrimarySolidFullIconHrefButton, PrimarySolidLargeRoundButton, PrimarySolidLargeRoundHrefButton, PrimarySolidLargeRoundIconButton, PrimarySolidLargeRoundIconHrefButton, PrimarySolidSmallRoundButton, PrimarySolidSmallRoundHrefButton, PrimarySolidSmallRoundIconButton, PrimarySolidSmallRoundIconHrefButton, ProcessLinksPipe, ProfileSkeletonComponent, ProfileViewComponent, ProgressBarComponent, ProgressRingComponent, ProgressStatusComponent, PrompterComponent, QR_PRESETS, QrCodeComponent, QrGeneratorService, QueryBuilder, QuoteBoxComponent, REQUEST_STATUSES, RadioInputComponent, RangeInputComponent, RatingComponent, RefresherComponent, RequestFirestoreService, RequestFormBuilderService, RequestService, RightsFooterComponent, RotatingTextComponent, SEARCH_HEADER_DEFAULTS, SETTINGS_SECTIONS_CATALOG, SHAPE_KEYS, SHARE_PROFILE_MODAL_DEFAULTS, SKELETON_LAYOUT_DEFAULT_ROWS, SKELETON_PRESETS, SOLID_KEYS, STATS_BAR_DEFAULTS, STROKE_KEYS, SearchHeaderComponent, SearchSelectorComponent, SearchbarComponent, SecondarySolidBlockButton, SecondarySolidBlockHrefButton, SecondarySolidBlockIconButton, SecondarySolidBlockIconHrefButton, SecondarySolidDefaultRoundButton, SecondarySolidDefaultRoundHrefButton, SecondarySolidDefaultRoundIconButton, SecondarySolidDefaultRoundIconHrefButton, SecondarySolidFullButton, SecondarySolidFullHrefButton, SecondarySolidFullIconButton, SecondarySolidFullIconHrefButton, SecondarySolidLargeRoundButton, SecondarySolidLargeRoundHrefButton, SecondarySolidLargeRoundIconButton, SecondarySolidLargeRoundIconHrefButton, SecondarySolidSmallRoundButton, SecondarySolidSmallRoundHrefButton, SecondarySolidSmallRoundIconButton, SecondarySolidSmallRoundIconHrefButton, SecurityViewComponent, SegmentControlComponent, SelectSearchComponent, SessionListModalComponent, SessionService, SettingsHubComponent, ShareButtonsComponent, ShareProfileModalComponent, SimpleComponent, SkeletonComponent, SkeletonLayoutComponent, SkeletonService, SolidBlockButton, SolidDefault, SolidDefaultBlock, SolidDefaultButton, SolidDefaultFull, SolidDefaultRound, SolidDefaultRoundBlock, SolidDefaultRoundButton, SolidDefaultRoundFull, SolidFullButton, SolidLargeButton, SolidLargeRoundButton, SolidSmallButton, SolidSmallRoundButton, SplashScreenService, StatsBarComponent, StatsCardComponent, StepperComponent, StorageService, SwipeCarouselComponent, SwitchOrgModalComponent, TRI_KEYS, TabbedContentComponent, TableSkeletonComponent, TabsComponent, Terminal404Component, TestimonialCardComponent, TestimonialCarouselComponent, TextComponent, TextInputComponent, TextareaInputComponent, ThemeOption, ThemeService, TimelineComponent, TitleBlockComponent, TitleComponent, ToastService, ToggleInputComponent, TokenService, ToolbarActionType, ToolbarComponent, TransferOwnershipModalComponent, TranslatePipe, TypedCollection, UPDATE_BANNER_DEFAULT_CONTENT, UPDATE_BANNER_I18N_NAMESPACE, UpdateBannerComponent, UserAvatarComponent, UsernameInputComponent, VALTECH_ADS_CONFIG, VALTECH_APP_CONFIG, VALTECH_APP_VERSION, VALTECH_AUTH_CONFIG, VALTECH_COMPANY_LINKS, VALTECH_CONTENT_CONFIG, VALTECH_DEBUG_CONSOLE, VALTECH_DEFAULT_CONTENT, VALTECH_DONATION_CONFIG, VALTECH_FEEDBACK_CONFIG, VALTECH_FIREBASE_CONFIG, VALTECH_FOOTER_I18N, VALTECH_FOOTER_LOGO, VALTECH_LANGUAGE_SELECTOR, VALTECH_LEGAL_CONFIG, VALTECH_NETWORK_ERROR_KEY, VALTECH_SITE_PATHS, VALTECH_SOCIAL_LINKS, VALTECH_SPLASH_SCREEN, VALTECH_WEB_BASE_URLS, VERSION, ValtechErrorService, WizardComponent, WizardFooterComponent, applyDefaultValueToControl, authGuard, authInterceptor, authPasswordValidator, beautifyLegalArticle, blogPost, buildCompanyFooterProps, buildFooterLinks, buildLegalLinkResolver, buildPath, buildSettingsCards, collections, connectPageRefresh, createErrorStateProps, createFirebaseConfig, createGlowCardProps, createInitialPaginationState, createNumberFromToField, createRefreshableStream, createTitleProps, docs, errorLoggingInterceptor, extractPathParams, generatePatternTiles, generateRandomTile, getAppInfo, getAppVersion, getCollectionPath, getDocumentId, getTimeOfDayKey, goToTop, guestGuard, hasEmulators, interpretError, isAtEnd, isCollectionPath, isDocumentPath, isEmulatorMode, isValidPath, joinPath, maxLength, mulberry32, news, parseMarkdownArticle, permissionGuard, permissionGuardFromRoute, provideLegalContent, provideSplashScreen, provideValtechAccountRoutes, provideValtechAds, provideValtechAppConfig, provideValtechAppVersion, provideValtechAuth, provideValtechAuthInterceptor, provideValtechContent, provideValtechDebugConsole, provideValtechDonations, provideValtechErrorHandling, provideValtechFeedback, provideValtechFirebase, provideValtechI18n, provideValtechLegal, provideValtechNotificationsRoutes, provideValtechOrganizationRoutes, provideValtechPreferencesRoutes, provideValtechPresets, provideValtechProfileRoutes, provideValtechSecurityRoutes, provideValtechSettingsRoutes, provideValtechSite, provideValtechSkeleton, query, renderPatternSvgInner, replaceSpecialChars, resolveColor$1 as resolveColor, resolveInputDefaultValue, resolveWebBaseUrl, roleGuard, storagePaths, superAdminGuard, toArticle };
|
|
61258
61683
|
//# sourceMappingURL=valtech-components.mjs.map
|