valtech-components 4.0.30 → 4.0.31
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/account-view/account-view.component.mjs +13 -21
- package/esm2022/lib/components/organisms/avatar-upload/avatar-upload.component.mjs +25 -12
- package/esm2022/lib/components/organisms/edit-org-modal/edit-org-modal.component.mjs +57 -5
- package/esm2022/lib/components/organisms/organization-view/organization-view.component.mjs +49 -38
- package/esm2022/lib/components/organisms/profile-view/profile-view.component.mjs +2 -2
- package/esm2022/lib/components/organisms/switch-org-modal/switch-org-modal.component.mjs +59 -6
- package/esm2022/lib/components/organisms/switch-org-modal/switch-org-modal.i18n.mjs +3 -1
- package/esm2022/lib/services/org/types.mjs +1 -1
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/valtech-components.mjs +196 -77
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +1 -1
- package/lib/components/atoms/text/text.component.d.ts +1 -1
- package/lib/components/atoms/user-avatar/user-avatar.component.d.ts +1 -1
- package/lib/components/molecules/cta-card/cta-card.component.d.ts +1 -1
- package/lib/components/molecules/features-list/features-list.component.d.ts +1 -1
- package/lib/components/molecules/metric-card/metric-card.component.d.ts +1 -1
- package/lib/components/organisms/article/article.component.d.ts +5 -5
- package/lib/components/organisms/auth-cta/auth-cta.component.d.ts +1 -1
- package/lib/components/organisms/avatar-upload/avatar-upload.component.d.ts +10 -1
- package/lib/components/organisms/edit-org-modal/edit-org-modal.component.d.ts +5 -1
- package/lib/components/organisms/member-import-modal/member-import-modal.component.d.ts +1 -1
- package/lib/components/organisms/switch-org-modal/switch-org-modal.component.d.ts +6 -1
- package/lib/services/org/types.d.ts +2 -0
- package/lib/version.d.ts +1 -1
- 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.
|
|
59
|
+
const VERSION = '4.0.31';
|
|
60
60
|
|
|
61
61
|
// Control de estado de refresco (singleton a nivel de módulo)
|
|
62
62
|
let isRefreshing = false;
|
|
@@ -42062,6 +42062,15 @@ class AvatarUploadComponent {
|
|
|
42062
42062
|
this.i18n = inject(I18nService);
|
|
42063
42063
|
/** Component configuration */
|
|
42064
42064
|
this.props = input({});
|
|
42065
|
+
/** Custom storage path for the full-size image (e.g. 'orgs/{orgId}/logo.jpg').
|
|
42066
|
+
* When provided, overrides the default 'users/{userId}/avatar.jpg' path. */
|
|
42067
|
+
this.customPath = input(null);
|
|
42068
|
+
/** Custom storage path for the thumbnail (e.g. 'orgs/{orgId}/thumb.jpg').
|
|
42069
|
+
* When provided, overrides the default 'users/{userId}/thumb.jpg' path. */
|
|
42070
|
+
this.customThumbPath = input(null);
|
|
42071
|
+
/** When true, skips the AuthService.updateAvatar() backend sync call after upload.
|
|
42072
|
+
* Use this when the caller will handle the backend update (e.g. via OrgService). */
|
|
42073
|
+
this.skipBackendSync = input(false);
|
|
42065
42074
|
/** Emitted after successful upload and backend sync */
|
|
42066
42075
|
this.uploaded = new EventEmitter();
|
|
42067
42076
|
/** Emitted on any error during the process */
|
|
@@ -42169,16 +42178,18 @@ class AvatarUploadComponent {
|
|
|
42169
42178
|
// 3. Set preview immediately
|
|
42170
42179
|
this.previewUrl.set(compressed.dataUrl);
|
|
42171
42180
|
this.imageLoadError.set(false);
|
|
42172
|
-
// 4. Get user ID for storage path
|
|
42181
|
+
// 4. Get user ID for storage path (only required when using default user paths)
|
|
42182
|
+
const customAvatarPath = this.customPath();
|
|
42173
42183
|
const userId = this.authService.user()?.userId;
|
|
42174
|
-
if (!userId) {
|
|
42184
|
+
if (!customAvatarPath && !userId) {
|
|
42175
42185
|
throw new Error('User not authenticated');
|
|
42176
42186
|
}
|
|
42177
42187
|
// 5. Upload to Firebase Storage with predictable paths
|
|
42178
|
-
//
|
|
42188
|
+
// When customPath is provided (e.g. orgs/{orgId}/logo.jpg), use it directly.
|
|
42189
|
+
// Otherwise fall back to the default user avatar path.
|
|
42179
42190
|
// skipPrefix: true - bypasses appId prefix for shared/cross-app paths
|
|
42180
|
-
const avatarPath =
|
|
42181
|
-
const thumbPath =
|
|
42191
|
+
const avatarPath = customAvatarPath ?? 'users/' + userId + '/avatar.jpg';
|
|
42192
|
+
const thumbPath = this.customThumbPath() ?? 'users/' + userId + '/thumb.jpg';
|
|
42182
42193
|
const uploadMetadata = { skipPrefix: true, contentType: 'image/jpeg' };
|
|
42183
42194
|
// Race against timeout to prevent infinite loading
|
|
42184
42195
|
const [avatarResult, thumbResult] = await Promise.race([
|
|
@@ -42188,11 +42199,13 @@ class AvatarUploadComponent {
|
|
|
42188
42199
|
]),
|
|
42189
42200
|
uploadTimeout,
|
|
42190
42201
|
]);
|
|
42191
|
-
// 6. Update backend with URLs
|
|
42192
|
-
|
|
42193
|
-
|
|
42194
|
-
|
|
42195
|
-
|
|
42202
|
+
// 6. Update backend with URLs (skipped when skipBackendSync is true)
|
|
42203
|
+
if (!this.skipBackendSync()) {
|
|
42204
|
+
await firstValueFrom(this.authService.updateAvatar({
|
|
42205
|
+
avatarUrl: avatarResult.downloadUrl,
|
|
42206
|
+
avatarThumbnail: thumbResult.downloadUrl,
|
|
42207
|
+
}));
|
|
42208
|
+
}
|
|
42196
42209
|
// 7. Update preview with cache-busting to force refresh
|
|
42197
42210
|
const cacheBuster = `?t=${Date.now()}`;
|
|
42198
42211
|
this.previewUrl.set(avatarResult.downloadUrl + cacheBuster);
|
|
@@ -42233,7 +42246,7 @@ class AvatarUploadComponent {
|
|
|
42233
42246
|
this.error.emit({ type, message, originalError });
|
|
42234
42247
|
}
|
|
42235
42248
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AvatarUploadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
42236
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AvatarUploadComponent, isStandalone: true, selector: "val-avatar-upload", inputs: { props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { uploaded: "uploaded", error: "error", uploadStart: "uploadStart" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: `
|
|
42249
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AvatarUploadComponent, isStandalone: true, selector: "val-avatar-upload", inputs: { props: { classPropertyName: "props", publicName: "props", isSignal: true, isRequired: false, transformFunction: null }, customPath: { classPropertyName: "customPath", publicName: "customPath", isSignal: true, isRequired: false, transformFunction: null }, customThumbPath: { classPropertyName: "customThumbPath", publicName: "customThumbPath", isSignal: true, isRequired: false, transformFunction: null }, skipBackendSync: { classPropertyName: "skipBackendSync", publicName: "skipBackendSync", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { uploaded: "uploaded", error: "error", uploadStart: "uploadStart" }, viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }], ngImport: i0, template: `
|
|
42237
42250
|
<div class="avatar-upload" [style.--avatar-size.px]="config().size" [class.avatar-upload--loading]="loading()">
|
|
42238
42251
|
<div class="avatar-container">
|
|
42239
42252
|
<!-- Avatar Image or Initials -->
|
|
@@ -43604,7 +43617,7 @@ class ProfileViewComponent {
|
|
|
43604
43617
|
}
|
|
43605
43618
|
}
|
|
43606
43619
|
</div>
|
|
43607
|
-
`, isInline: true, styles: [".page{padding:16px 0;max-width:720px;margin:0 auto}.page-header{margin-bottom:16px}.page-header h1{font-size:22px;font-weight:700;margin:0 0 4px}.hint{font-size:13px;opacity:.7;margin:0 0 12px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.avatar-section{display:flex;align-items:center;gap:16px}.avatar-meta{display:flex;flex-direction:column;gap:2px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: AvatarUploadComponent, selector: "val-avatar-upload", inputs: ["props"], outputs: ["uploaded", "error", "uploadStart"] }, { kind: "component", type: EmptyStateComponent, selector: "val-empty-state", inputs: ["props"] }, { kind: "component", type: FormComponent, selector: "val-form", inputs: ["props"], outputs: ["onSubmit", "onInvalid", "onSelectChange"] }, { 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"] }, { kind: "component", type: SkeletonLayoutComponent, selector: "val-skeleton-layout", inputs: ["props"] }] }); }
|
|
43620
|
+
`, isInline: true, styles: [".page{padding:16px 0;max-width:720px;margin:0 auto}.page-header{margin-bottom:16px}.page-header h1{font-size:22px;font-weight:700;margin:0 0 4px}.hint{font-size:13px;opacity:.7;margin:0 0 12px}.settings-section{padding:16px 0}.settings-section+.settings-section{border-top:1px solid var(--val-border-color, rgba(0, 0, 0, .08))}.avatar-section{display:flex;align-items:center;gap:16px}.avatar-meta{display:flex;flex-direction:column;gap:2px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: AvatarUploadComponent, selector: "val-avatar-upload", inputs: ["props", "customPath", "customThumbPath", "skipBackendSync"], outputs: ["uploaded", "error", "uploadStart"] }, { kind: "component", type: EmptyStateComponent, selector: "val-empty-state", inputs: ["props"] }, { kind: "component", type: FormComponent, selector: "val-form", inputs: ["props"], outputs: ["onSubmit", "onInvalid", "onSelectChange"] }, { 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"] }, { kind: "component", type: SkeletonLayoutComponent, selector: "val-skeleton-layout", inputs: ["props"] }] }); }
|
|
43608
43621
|
}
|
|
43609
43622
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProfileViewComponent, decorators: [{
|
|
43610
43623
|
type: Component,
|
|
@@ -47513,6 +47526,7 @@ const SWITCH_ORG_MODAL_I18N = {
|
|
|
47513
47526
|
current: 'Actual',
|
|
47514
47527
|
close: 'Cerrar',
|
|
47515
47528
|
switchError: 'No se pudo cambiar de organización.',
|
|
47529
|
+
profile: 'Mi perfil',
|
|
47516
47530
|
},
|
|
47517
47531
|
en: {
|
|
47518
47532
|
title: 'Switch account',
|
|
@@ -47522,6 +47536,7 @@ const SWITCH_ORG_MODAL_I18N = {
|
|
|
47522
47536
|
current: 'Active',
|
|
47523
47537
|
close: 'Close',
|
|
47524
47538
|
switchError: 'Could not switch organization.',
|
|
47539
|
+
profile: 'My profile',
|
|
47525
47540
|
},
|
|
47526
47541
|
};
|
|
47527
47542
|
|
|
@@ -47556,6 +47571,11 @@ class SwitchOrgModalComponent {
|
|
|
47556
47571
|
this.loading = signal(false);
|
|
47557
47572
|
this.query = signal('');
|
|
47558
47573
|
this.switchingId = signal(null);
|
|
47574
|
+
this.user = computed(() => this.auth.user());
|
|
47575
|
+
this.userInitials = computed(() => {
|
|
47576
|
+
const name = this.user()?.name ?? this.user()?.email ?? '?';
|
|
47577
|
+
return name.slice(0, 2).toUpperCase();
|
|
47578
|
+
});
|
|
47559
47579
|
this.activeOrgId = computed(() => {
|
|
47560
47580
|
const u = this.auth.user();
|
|
47561
47581
|
return u?.activeOrgId ?? u?.activeOrg ?? '';
|
|
@@ -47607,6 +47627,10 @@ class SwitchOrgModalComponent {
|
|
|
47607
47627
|
error: () => this.loading.set(false),
|
|
47608
47628
|
});
|
|
47609
47629
|
}
|
|
47630
|
+
onProfile() {
|
|
47631
|
+
this.dismiss();
|
|
47632
|
+
this.onProfileClick?.();
|
|
47633
|
+
}
|
|
47610
47634
|
dismiss() {
|
|
47611
47635
|
this._modalRef?.dismiss(null, 'cancel');
|
|
47612
47636
|
}
|
|
@@ -47614,7 +47638,7 @@ class SwitchOrgModalComponent {
|
|
|
47614
47638
|
return this.i18n.t(key, this.i18nNamespace);
|
|
47615
47639
|
}
|
|
47616
47640
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SwitchOrgModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
47617
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SwitchOrgModalComponent, isStandalone: true, selector: "val-switch-org-modal", inputs: { _modalRef: "_modalRef", onSuccess: "onSuccess", i18nNamespace: "i18nNamespace" }, ngImport: i0, template: `
|
|
47641
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SwitchOrgModalComponent, isStandalone: true, selector: "val-switch-org-modal", inputs: { _modalRef: "_modalRef", onSuccess: "onSuccess", onProfileClick: "onProfileClick", i18nNamespace: "i18nNamespace" }, ngImport: i0, template: `
|
|
47618
47642
|
<ion-header>
|
|
47619
47643
|
<ion-toolbar>
|
|
47620
47644
|
<ion-buttons slot="end">
|
|
@@ -47636,6 +47660,23 @@ class SwitchOrgModalComponent {
|
|
|
47636
47660
|
}"
|
|
47637
47661
|
/>
|
|
47638
47662
|
|
|
47663
|
+
<div class="user-strip">
|
|
47664
|
+
<div class="user-strip__avatar">
|
|
47665
|
+
@if (user()?.avatarUrl) {
|
|
47666
|
+
<img [src]="user()!.avatarUrl!" [alt]="user()?.name ?? ''" />
|
|
47667
|
+
} @else {
|
|
47668
|
+
<span>{{ userInitials() }}</span>
|
|
47669
|
+
}
|
|
47670
|
+
</div>
|
|
47671
|
+
<div class="user-strip__info">
|
|
47672
|
+
<span class="user-strip__name">{{ user()?.name || user()?.email || '' }}</span>
|
|
47673
|
+
<span class="user-strip__email">{{ user()?.email || '' }}</span>
|
|
47674
|
+
</div>
|
|
47675
|
+
<button class="user-strip__profile-btn" type="button" (click)="onProfile()">
|
|
47676
|
+
{{ t('profile') }}
|
|
47677
|
+
</button>
|
|
47678
|
+
</div>
|
|
47679
|
+
|
|
47639
47680
|
<div class="switch-section">
|
|
47640
47681
|
<val-searchbar
|
|
47641
47682
|
[props]="{
|
|
@@ -47669,7 +47710,11 @@ class SwitchOrgModalComponent {
|
|
|
47669
47710
|
(click)="onSelect(org)"
|
|
47670
47711
|
>
|
|
47671
47712
|
<div class="org-row__icon">
|
|
47672
|
-
|
|
47713
|
+
@if (org.logoUrl) {
|
|
47714
|
+
<img [src]="org.logoUrl" [alt]="org.name" />
|
|
47715
|
+
} @else {
|
|
47716
|
+
<ion-icon name="business-outline" />
|
|
47717
|
+
}
|
|
47673
47718
|
</div>
|
|
47674
47719
|
<div class="org-row__body">
|
|
47675
47720
|
<span class="org-row__name">{{ org.name }}</span>
|
|
@@ -47689,7 +47734,7 @@ class SwitchOrgModalComponent {
|
|
|
47689
47734
|
}
|
|
47690
47735
|
</div>
|
|
47691
47736
|
</ion-content>
|
|
47692
|
-
`, isInline: true, styles: [".switch-section{margin-top:16px;display:flex;flex-direction:column;gap:12px}.switch-state{display:flex;justify-content:center;padding:24px 0}.orgs-list{display:flex;flex-direction:column;gap:8px}.org-row{display:flex;align-items:center;gap:12px;width:100%;padding:12px 14px;border:1px solid rgba(var(--ion-color-dark-rgb),.14);border-radius:12px;background:var(--ion-card-background, var(--ion-background-color));cursor:pointer;text-align:left;transition:border-color .15s ease,opacity .15s ease}.org-row:not(:disabled):active{opacity:.7}.org-row:disabled{cursor:default}.org-row--active{border-color:var(--ion-color-dark)}.org-row__icon{width:36px;height:36px;border-radius:50%;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:18px;color:var(--ion-color-dark);background:rgba(var(--ion-color-dark-rgb),.08)}.org-row__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.org-row__name{font-weight:600;font-size:.95rem;color:var(--ion-color-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.org-row__type{font-size:.8rem;color:rgba(var(--ion-color-dark-rgb),.7)}.org-row__end{display:flex;align-items:center;gap:6px;flex-shrink:0}.org-row__current{font-size:.74rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:rgba(var(--ion-color-dark-rgb),.7)}.org-row__check{font-size:1.1rem;color:var(--ion-color-dark)}.org-row__spinner{width:18px;height:18px;color:var(--ion-color-dark)}\n"], dependencies: [{ 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: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: EmptyStateComponent, selector: "val-empty-state", inputs: ["props"] }, { kind: "component", type: SearchbarComponent, selector: "val-searchbar", inputs: ["preset", "props"], outputs: ["filterEvent", "focusEvent", "blurEvent"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }] }); }
|
|
47737
|
+
`, isInline: true, styles: [".switch-section{margin-top:16px;display:flex;flex-direction:column;gap:12px}.switch-state{display:flex;justify-content:center;padding:24px 0}.orgs-list{display:flex;flex-direction:column;gap:8px}.org-row{display:flex;align-items:center;gap:12px;width:100%;padding:12px 14px;border:1px solid rgba(var(--ion-color-dark-rgb),.14);border-radius:12px;background:var(--ion-card-background, var(--ion-background-color));cursor:pointer;text-align:left;transition:border-color .15s ease,opacity .15s ease}.org-row:not(:disabled):active{opacity:.7}.org-row:disabled{cursor:default}.org-row--active{border-color:var(--ion-color-dark)}.org-row__icon{width:36px;height:36px;border-radius:50%;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:18px;color:var(--ion-color-dark);background:rgba(var(--ion-color-dark-rgb),.08)}.org-row__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.org-row__name{font-weight:600;font-size:.95rem;color:var(--ion-color-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.org-row__type{font-size:.8rem;color:rgba(var(--ion-color-dark-rgb),.7)}.org-row__end{display:flex;align-items:center;gap:6px;flex-shrink:0}.org-row__current{font-size:.74rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:rgba(var(--ion-color-dark-rgb),.7)}.org-row__check{font-size:1.1rem;color:var(--ion-color-dark)}.org-row__spinner{width:18px;height:18px;color:var(--ion-color-dark)}.org-row__icon img{width:100%;height:100%;object-fit:cover;border-radius:50%}.user-strip{display:flex;align-items:center;gap:12px;padding:12px 0 4px;margin-bottom:8px;border-bottom:1px solid rgba(var(--ion-color-dark-rgb),.1)}.user-strip__avatar{width:44px;height:44px;border-radius:50%;flex-shrink:0;overflow:hidden;background:rgba(var(--ion-color-dark-rgb),.1);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:1rem;color:var(--ion-color-dark)}.user-strip__avatar img{width:100%;height:100%;object-fit:cover}.user-strip__info{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.user-strip__name{font-weight:600;font-size:.9rem;color:var(--ion-color-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-strip__email{font-size:.78rem;color:rgba(var(--ion-color-dark-rgb),.6);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-strip__profile-btn{background:none;border:none;padding:6px 0;font-size:.82rem;font-weight:600;color:var(--ion-color-dark);cursor:pointer;white-space:nowrap;text-decoration:underline;text-underline-offset:3px}\n"], dependencies: [{ 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: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: EmptyStateComponent, selector: "val-empty-state", inputs: ["props"] }, { kind: "component", type: SearchbarComponent, selector: "val-searchbar", inputs: ["preset", "props"], outputs: ["filterEvent", "focusEvent", "blurEvent"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }] }); }
|
|
47693
47738
|
}
|
|
47694
47739
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SwitchOrgModalComponent, decorators: [{
|
|
47695
47740
|
type: Component,
|
|
@@ -47727,6 +47772,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
47727
47772
|
}"
|
|
47728
47773
|
/>
|
|
47729
47774
|
|
|
47775
|
+
<div class="user-strip">
|
|
47776
|
+
<div class="user-strip__avatar">
|
|
47777
|
+
@if (user()?.avatarUrl) {
|
|
47778
|
+
<img [src]="user()!.avatarUrl!" [alt]="user()?.name ?? ''" />
|
|
47779
|
+
} @else {
|
|
47780
|
+
<span>{{ userInitials() }}</span>
|
|
47781
|
+
}
|
|
47782
|
+
</div>
|
|
47783
|
+
<div class="user-strip__info">
|
|
47784
|
+
<span class="user-strip__name">{{ user()?.name || user()?.email || '' }}</span>
|
|
47785
|
+
<span class="user-strip__email">{{ user()?.email || '' }}</span>
|
|
47786
|
+
</div>
|
|
47787
|
+
<button class="user-strip__profile-btn" type="button" (click)="onProfile()">
|
|
47788
|
+
{{ t('profile') }}
|
|
47789
|
+
</button>
|
|
47790
|
+
</div>
|
|
47791
|
+
|
|
47730
47792
|
<div class="switch-section">
|
|
47731
47793
|
<val-searchbar
|
|
47732
47794
|
[props]="{
|
|
@@ -47760,7 +47822,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
47760
47822
|
(click)="onSelect(org)"
|
|
47761
47823
|
>
|
|
47762
47824
|
<div class="org-row__icon">
|
|
47763
|
-
|
|
47825
|
+
@if (org.logoUrl) {
|
|
47826
|
+
<img [src]="org.logoUrl" [alt]="org.name" />
|
|
47827
|
+
} @else {
|
|
47828
|
+
<ion-icon name="business-outline" />
|
|
47829
|
+
}
|
|
47764
47830
|
</div>
|
|
47765
47831
|
<div class="org-row__body">
|
|
47766
47832
|
<span class="org-row__name">{{ org.name }}</span>
|
|
@@ -47780,11 +47846,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
47780
47846
|
}
|
|
47781
47847
|
</div>
|
|
47782
47848
|
</ion-content>
|
|
47783
|
-
`, styles: [".switch-section{margin-top:16px;display:flex;flex-direction:column;gap:12px}.switch-state{display:flex;justify-content:center;padding:24px 0}.orgs-list{display:flex;flex-direction:column;gap:8px}.org-row{display:flex;align-items:center;gap:12px;width:100%;padding:12px 14px;border:1px solid rgba(var(--ion-color-dark-rgb),.14);border-radius:12px;background:var(--ion-card-background, var(--ion-background-color));cursor:pointer;text-align:left;transition:border-color .15s ease,opacity .15s ease}.org-row:not(:disabled):active{opacity:.7}.org-row:disabled{cursor:default}.org-row--active{border-color:var(--ion-color-dark)}.org-row__icon{width:36px;height:36px;border-radius:50%;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:18px;color:var(--ion-color-dark);background:rgba(var(--ion-color-dark-rgb),.08)}.org-row__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.org-row__name{font-weight:600;font-size:.95rem;color:var(--ion-color-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.org-row__type{font-size:.8rem;color:rgba(var(--ion-color-dark-rgb),.7)}.org-row__end{display:flex;align-items:center;gap:6px;flex-shrink:0}.org-row__current{font-size:.74rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:rgba(var(--ion-color-dark-rgb),.7)}.org-row__check{font-size:1.1rem;color:var(--ion-color-dark)}.org-row__spinner{width:18px;height:18px;color:var(--ion-color-dark)}\n"] }]
|
|
47849
|
+
`, styles: [".switch-section{margin-top:16px;display:flex;flex-direction:column;gap:12px}.switch-state{display:flex;justify-content:center;padding:24px 0}.orgs-list{display:flex;flex-direction:column;gap:8px}.org-row{display:flex;align-items:center;gap:12px;width:100%;padding:12px 14px;border:1px solid rgba(var(--ion-color-dark-rgb),.14);border-radius:12px;background:var(--ion-card-background, var(--ion-background-color));cursor:pointer;text-align:left;transition:border-color .15s ease,opacity .15s ease}.org-row:not(:disabled):active{opacity:.7}.org-row:disabled{cursor:default}.org-row--active{border-color:var(--ion-color-dark)}.org-row__icon{width:36px;height:36px;border-radius:50%;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:18px;color:var(--ion-color-dark);background:rgba(var(--ion-color-dark-rgb),.08)}.org-row__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.org-row__name{font-weight:600;font-size:.95rem;color:var(--ion-color-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.org-row__type{font-size:.8rem;color:rgba(var(--ion-color-dark-rgb),.7)}.org-row__end{display:flex;align-items:center;gap:6px;flex-shrink:0}.org-row__current{font-size:.74rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:rgba(var(--ion-color-dark-rgb),.7)}.org-row__check{font-size:1.1rem;color:var(--ion-color-dark)}.org-row__spinner{width:18px;height:18px;color:var(--ion-color-dark)}.org-row__icon img{width:100%;height:100%;object-fit:cover;border-radius:50%}.user-strip{display:flex;align-items:center;gap:12px;padding:12px 0 4px;margin-bottom:8px;border-bottom:1px solid rgba(var(--ion-color-dark-rgb),.1)}.user-strip__avatar{width:44px;height:44px;border-radius:50%;flex-shrink:0;overflow:hidden;background:rgba(var(--ion-color-dark-rgb),.1);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:1rem;color:var(--ion-color-dark)}.user-strip__avatar img{width:100%;height:100%;object-fit:cover}.user-strip__info{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.user-strip__name{font-weight:600;font-size:.9rem;color:var(--ion-color-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-strip__email{font-size:.78rem;color:rgba(var(--ion-color-dark-rgb),.6);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-strip__profile-btn{background:none;border:none;padding:6px 0;font-size:.82rem;font-weight:600;color:var(--ion-color-dark);cursor:pointer;white-space:nowrap;text-decoration:underline;text-underline-offset:3px}\n"] }]
|
|
47784
47850
|
}], ctorParameters: () => [], propDecorators: { _modalRef: [{
|
|
47785
47851
|
type: Input
|
|
47786
47852
|
}], onSuccess: [{
|
|
47787
47853
|
type: Input
|
|
47854
|
+
}], onProfileClick: [{
|
|
47855
|
+
type: Input
|
|
47788
47856
|
}], i18nNamespace: [{
|
|
47789
47857
|
type: Input
|
|
47790
47858
|
}] } });
|
|
@@ -47885,7 +47953,7 @@ const ACCOUNT_VIEW_I18N = {
|
|
|
47885
47953
|
},
|
|
47886
47954
|
};
|
|
47887
47955
|
|
|
47888
|
-
addIcons({ peopleOutline, businessOutline, chevronForwardOutline, swapHorizontalOutline, mailOutline });
|
|
47956
|
+
addIcons({ peopleOutline, businessOutline, chevronForwardOutline, swapHorizontalOutline, mailOutline, warningOutline });
|
|
47889
47957
|
const DEFAULT_NAMESPACE$d = 'Settings.Account';
|
|
47890
47958
|
const DEFAULT_MANAGE_ORG_ROUTE = '/app/settings/organization';
|
|
47891
47959
|
/**
|
|
@@ -48350,14 +48418,10 @@ class AccountViewComponent {
|
|
|
48350
48418
|
@if (resolvedConfig().showDeleteAccount) {
|
|
48351
48419
|
<!-- Delete account -->
|
|
48352
48420
|
<section class="settings-section">
|
|
48353
|
-
<
|
|
48354
|
-
|
|
48355
|
-
|
|
48356
|
-
|
|
48357
|
-
bold: true,
|
|
48358
|
-
content: dangerDeleteTitle(),
|
|
48359
|
-
}"
|
|
48360
|
-
/>
|
|
48421
|
+
<div class="section-title-danger">
|
|
48422
|
+
<ion-icon name="warning-outline" class="danger-icon" aria-hidden="true"></ion-icon>
|
|
48423
|
+
<val-title [props]="{ size: 'medium', color: 'dark', bold: true, content: dangerDeleteTitle() }" />
|
|
48424
|
+
</div>
|
|
48361
48425
|
<div class="section-body">
|
|
48362
48426
|
<val-text
|
|
48363
48427
|
[props]="{
|
|
@@ -48385,7 +48449,7 @@ class AccountViewComponent {
|
|
|
48385
48449
|
(dismissed)="deleteAccountOpen.set(false)"
|
|
48386
48450
|
/>
|
|
48387
48451
|
</div>
|
|
48388
|
-
`, 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)}.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}\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" }] }); }
|
|
48452
|
+
`, 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)}.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}.danger-icon{font-size:1.15rem;color:var(--ion-color-warning-shade, #d4a017);flex-shrink:0}\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" }] }); }
|
|
48389
48453
|
}
|
|
48390
48454
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AccountViewComponent, decorators: [{
|
|
48391
48455
|
type: Component,
|
|
@@ -48550,14 +48614,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
48550
48614
|
@if (resolvedConfig().showDeleteAccount) {
|
|
48551
48615
|
<!-- Delete account -->
|
|
48552
48616
|
<section class="settings-section">
|
|
48553
|
-
<
|
|
48554
|
-
|
|
48555
|
-
|
|
48556
|
-
|
|
48557
|
-
bold: true,
|
|
48558
|
-
content: dangerDeleteTitle(),
|
|
48559
|
-
}"
|
|
48560
|
-
/>
|
|
48617
|
+
<div class="section-title-danger">
|
|
48618
|
+
<ion-icon name="warning-outline" class="danger-icon" aria-hidden="true"></ion-icon>
|
|
48619
|
+
<val-title [props]="{ size: 'medium', color: 'dark', bold: true, content: dangerDeleteTitle() }" />
|
|
48620
|
+
</div>
|
|
48561
48621
|
<div class="section-body">
|
|
48562
48622
|
<val-text
|
|
48563
48623
|
[props]="{
|
|
@@ -48585,7 +48645,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
48585
48645
|
(dismissed)="deleteAccountOpen.set(false)"
|
|
48586
48646
|
/>
|
|
48587
48647
|
</div>
|
|
48588
|
-
`, 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)}.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}\n"] }]
|
|
48648
|
+
`, 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)}.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}.danger-icon{font-size:1.15rem;color:var(--ion-color-warning-shade, #d4a017);flex-shrink:0}\n"] }]
|
|
48589
48649
|
}], ctorParameters: () => [], propDecorators: { config: [{
|
|
48590
48650
|
type: Input
|
|
48591
48651
|
}] } });
|
|
@@ -48755,6 +48815,11 @@ class EditOrgModalComponent {
|
|
|
48755
48815
|
/** Namespace i18n con que la vista resuelve sus textos. */
|
|
48756
48816
|
this.i18nNamespace = DEFAULT_NAMESPACE$c;
|
|
48757
48817
|
this.saving = signal(false);
|
|
48818
|
+
this.logoUrl = signal(null);
|
|
48819
|
+
this.orgInitials = computed(() => {
|
|
48820
|
+
const name = this.org?.name ?? '';
|
|
48821
|
+
return name.slice(0, 2).toUpperCase() || '?';
|
|
48822
|
+
});
|
|
48758
48823
|
if (!this.i18n.hasNamespace(DEFAULT_NAMESPACE$c)) {
|
|
48759
48824
|
this.i18n.registerContent(DEFAULT_NAMESPACE$c, EDIT_ORG_MODAL_I18N);
|
|
48760
48825
|
}
|
|
@@ -48776,6 +48841,7 @@ class EditOrgModalComponent {
|
|
|
48776
48841
|
}, { allowSignalWrites: true });
|
|
48777
48842
|
}
|
|
48778
48843
|
ngOnInit() {
|
|
48844
|
+
this.logoUrl.set(this.org?.logoUrl ?? null);
|
|
48779
48845
|
this.formMeta.set(this.buildFormMeta());
|
|
48780
48846
|
}
|
|
48781
48847
|
get activeOrgId() {
|
|
@@ -48869,6 +48935,23 @@ class EditOrgModalComponent {
|
|
|
48869
48935
|
this.saving.set(false);
|
|
48870
48936
|
}
|
|
48871
48937
|
}
|
|
48938
|
+
async onLogoUploaded(result) {
|
|
48939
|
+
const orgId = this.org?.id ?? this.activeOrgId;
|
|
48940
|
+
if (!orgId)
|
|
48941
|
+
return;
|
|
48942
|
+
this.logoUrl.set(result.avatarUrl);
|
|
48943
|
+
try {
|
|
48944
|
+
const updated = await firstValueFrom(this.orgService.updateOrg(orgId, { logoUrl: result.avatarUrl }));
|
|
48945
|
+
this.onSuccess?.(updated);
|
|
48946
|
+
}
|
|
48947
|
+
catch (err) {
|
|
48948
|
+
this.errors.handle(err, {
|
|
48949
|
+
context: 'editOrgModal.logo',
|
|
48950
|
+
fallbackKey: 'saveError',
|
|
48951
|
+
i18nNamespace: this.i18nNamespace,
|
|
48952
|
+
});
|
|
48953
|
+
}
|
|
48954
|
+
}
|
|
48872
48955
|
dismiss() {
|
|
48873
48956
|
this._modalRef?.dismiss(null, 'cancel');
|
|
48874
48957
|
}
|
|
@@ -48887,6 +48970,15 @@ class EditOrgModalComponent {
|
|
|
48887
48970
|
</ion-toolbar>
|
|
48888
48971
|
</ion-header>
|
|
48889
48972
|
<ion-content class="ion-padding">
|
|
48973
|
+
<div class="logo-upload-wrapper">
|
|
48974
|
+
<val-avatar-upload
|
|
48975
|
+
[props]="{ currentUrl: logoUrl(), initials: orgInitials(), size: 80, editable: true, showViewButton: false }"
|
|
48976
|
+
[customPath]="'orgs/' + (org?.id ?? activeOrgId) + '/logo.jpg'"
|
|
48977
|
+
[customThumbPath]="'orgs/' + (org?.id ?? activeOrgId) + '/thumb.jpg'"
|
|
48978
|
+
[skipBackendSync]="true"
|
|
48979
|
+
(uploaded)="onLogoUploaded($event)"
|
|
48980
|
+
/>
|
|
48981
|
+
</div>
|
|
48890
48982
|
<val-display [props]="{ content: t('title'), size: 'small', color: 'dark' }" />
|
|
48891
48983
|
<val-title
|
|
48892
48984
|
[props]="{
|
|
@@ -48903,11 +48995,21 @@ class EditOrgModalComponent {
|
|
|
48903
48995
|
</ion-button>
|
|
48904
48996
|
</div>
|
|
48905
48997
|
</ion-content>
|
|
48906
|
-
`, isInline: true, styles: [".modal-close-bottom{margin-top:16px}\n"], dependencies: [{ 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: FormComponent, selector: "val-form", inputs: ["props"], outputs: ["onSubmit", "onInvalid", "onSelectChange"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }] }); }
|
|
48998
|
+
`, isInline: true, styles: [".modal-close-bottom{margin-top:16px}.logo-upload-wrapper{display:flex;justify-content:center;padding:8px 0 16px}\n"], dependencies: [{ 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: FormComponent, selector: "val-form", inputs: ["props"], outputs: ["onSubmit", "onInvalid", "onSelectChange"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: AvatarUploadComponent, selector: "val-avatar-upload", inputs: ["props", "customPath", "customThumbPath", "skipBackendSync"], outputs: ["uploaded", "error", "uploadStart"] }] }); }
|
|
48907
48999
|
}
|
|
48908
49000
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EditOrgModalComponent, decorators: [{
|
|
48909
49001
|
type: Component,
|
|
48910
|
-
args: [{ selector: 'val-edit-org-modal', standalone: true, imports: [
|
|
49002
|
+
args: [{ selector: 'val-edit-org-modal', standalone: true, imports: [
|
|
49003
|
+
IonHeader,
|
|
49004
|
+
IonToolbar,
|
|
49005
|
+
IonButtons,
|
|
49006
|
+
IonButton,
|
|
49007
|
+
IonContent,
|
|
49008
|
+
FormComponent,
|
|
49009
|
+
DisplayComponent,
|
|
49010
|
+
TitleComponent,
|
|
49011
|
+
AvatarUploadComponent,
|
|
49012
|
+
], template: `
|
|
48911
49013
|
<ion-header>
|
|
48912
49014
|
<ion-toolbar>
|
|
48913
49015
|
<ion-buttons slot="end">
|
|
@@ -48918,6 +49020,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
48918
49020
|
</ion-toolbar>
|
|
48919
49021
|
</ion-header>
|
|
48920
49022
|
<ion-content class="ion-padding">
|
|
49023
|
+
<div class="logo-upload-wrapper">
|
|
49024
|
+
<val-avatar-upload
|
|
49025
|
+
[props]="{ currentUrl: logoUrl(), initials: orgInitials(), size: 80, editable: true, showViewButton: false }"
|
|
49026
|
+
[customPath]="'orgs/' + (org?.id ?? activeOrgId) + '/logo.jpg'"
|
|
49027
|
+
[customThumbPath]="'orgs/' + (org?.id ?? activeOrgId) + '/thumb.jpg'"
|
|
49028
|
+
[skipBackendSync]="true"
|
|
49029
|
+
(uploaded)="onLogoUploaded($event)"
|
|
49030
|
+
/>
|
|
49031
|
+
</div>
|
|
48921
49032
|
<val-display [props]="{ content: t('title'), size: 'small', color: 'dark' }" />
|
|
48922
49033
|
<val-title
|
|
48923
49034
|
[props]="{
|
|
@@ -48934,7 +49045,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
48934
49045
|
</ion-button>
|
|
48935
49046
|
</div>
|
|
48936
49047
|
</ion-content>
|
|
48937
|
-
`, styles: [".modal-close-bottom{margin-top:16px}\n"] }]
|
|
49048
|
+
`, styles: [".modal-close-bottom{margin-top:16px}.logo-upload-wrapper{display:flex;justify-content:center;padding:8px 0 16px}\n"] }]
|
|
48938
49049
|
}], ctorParameters: () => [], propDecorators: { _modalRef: [{
|
|
48939
49050
|
type: Input
|
|
48940
49051
|
}], org: [{
|
|
@@ -51771,6 +51882,7 @@ const ORGANIZATION_VIEW_I18N = {
|
|
|
51771
51882
|
},
|
|
51772
51883
|
};
|
|
51773
51884
|
|
|
51885
|
+
addIcons({ warningOutline });
|
|
51774
51886
|
const DEFAULT_NAMESPACE$6 = 'Settings.Organization';
|
|
51775
51887
|
const DEFAULT_VIEW_PERMISSIONS_ROUTE = '/app/settings/permissions';
|
|
51776
51888
|
const DEFAULT_API_KEYS_ROUTE = '/app/settings/api-keys';
|
|
@@ -52118,9 +52230,21 @@ class OrganizationViewComponent {
|
|
|
52118
52230
|
componentProps: {
|
|
52119
52231
|
showFeatures: false,
|
|
52120
52232
|
features: [
|
|
52121
|
-
{
|
|
52122
|
-
|
|
52123
|
-
|
|
52233
|
+
{
|
|
52234
|
+
icon: 'code-slash-outline',
|
|
52235
|
+
title: this.tt('apiKeysFeatureAutoTitle'),
|
|
52236
|
+
desc: this.tt('apiKeysFeatureAutoDesc'),
|
|
52237
|
+
},
|
|
52238
|
+
{
|
|
52239
|
+
icon: 'shield-checkmark-outline',
|
|
52240
|
+
title: this.tt('apiKeysFeaturePermsTitle'),
|
|
52241
|
+
desc: this.tt('apiKeysFeaturePermsDesc'),
|
|
52242
|
+
},
|
|
52243
|
+
{
|
|
52244
|
+
icon: 'warning-outline',
|
|
52245
|
+
title: this.tt('apiKeysFeatureSecretTitle'),
|
|
52246
|
+
desc: this.tt('apiKeysFeatureSecretDesc'),
|
|
52247
|
+
},
|
|
52124
52248
|
],
|
|
52125
52249
|
title: this.tt('apiKeysInfoTitle'),
|
|
52126
52250
|
subtitle: this.tt('apiKeysInfoSubtitle'),
|
|
@@ -52371,6 +52495,11 @@ class OrganizationViewComponent {
|
|
|
52371
52495
|
} @else {
|
|
52372
52496
|
@if (org(); as o) {
|
|
52373
52497
|
<div class="org-info-card">
|
|
52498
|
+
@if (o.logoUrl) {
|
|
52499
|
+
<div class="org-info-logo">
|
|
52500
|
+
<img class="org-logo-img" [src]="o.logoUrl" [alt]="o.name" />
|
|
52501
|
+
</div>
|
|
52502
|
+
}
|
|
52374
52503
|
<div class="org-info-field">
|
|
52375
52504
|
<span class="org-info-label">{{ tt('infoName') }}</span>
|
|
52376
52505
|
<span class="org-info-value">{{ o.name }}</span>
|
|
@@ -52528,14 +52657,10 @@ class OrganizationViewComponent {
|
|
|
52528
52657
|
@if (resolvedConfig().showTransferOwnership && isOwner()) {
|
|
52529
52658
|
<!-- Transfer ownership: solo owner (gating RBAC interno) -->
|
|
52530
52659
|
<section class="settings-section" data-testid="org-transfer-section">
|
|
52531
|
-
<
|
|
52532
|
-
|
|
52533
|
-
|
|
52534
|
-
|
|
52535
|
-
bold: true,
|
|
52536
|
-
content: tt('transferTitle'),
|
|
52537
|
-
}"
|
|
52538
|
-
/>
|
|
52660
|
+
<div class="section-title-danger">
|
|
52661
|
+
<ion-icon name="warning-outline" class="danger-icon" aria-hidden="true"></ion-icon>
|
|
52662
|
+
<val-title [props]="{ size: 'medium', color: 'dark', bold: true, content: tt('transferTitle') }" />
|
|
52663
|
+
</div>
|
|
52539
52664
|
<div class="section-body">
|
|
52540
52665
|
<val-text
|
|
52541
52666
|
[props]="{
|
|
@@ -52566,14 +52691,10 @@ class OrganizationViewComponent {
|
|
|
52566
52691
|
@if (resolvedConfig().showLeave) {
|
|
52567
52692
|
<!-- Leave org -->
|
|
52568
52693
|
<section class="settings-section">
|
|
52569
|
-
<
|
|
52570
|
-
|
|
52571
|
-
|
|
52572
|
-
|
|
52573
|
-
bold: true,
|
|
52574
|
-
content: tt('leaveTitle'),
|
|
52575
|
-
}"
|
|
52576
|
-
/>
|
|
52694
|
+
<div class="section-title-danger">
|
|
52695
|
+
<ion-icon name="warning-outline" class="danger-icon" aria-hidden="true"></ion-icon>
|
|
52696
|
+
<val-title [props]="{ size: 'medium', color: 'dark', bold: true, content: tt('leaveTitle') }" />
|
|
52697
|
+
</div>
|
|
52577
52698
|
<div class="section-body">
|
|
52578
52699
|
<val-text
|
|
52579
52700
|
[props]="{
|
|
@@ -52620,7 +52741,7 @@ class OrganizationViewComponent {
|
|
|
52620
52741
|
(dismissed)="permissionsOpen.set(false)"
|
|
52621
52742
|
/>
|
|
52622
52743
|
</div>
|
|
52623
|
-
`, 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}: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)}\n"], dependencies: [{ 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: 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"] }] }); }
|
|
52744
|
+
`, 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}.danger-icon{font-size:1.15rem;color:var(--ion-color-warning-shade, #d4a017);flex-shrink:0}\n"], dependencies: [{ 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"] }] }); }
|
|
52624
52745
|
}
|
|
52625
52746
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: OrganizationViewComponent, decorators: [{
|
|
52626
52747
|
type: Component,
|
|
@@ -52628,6 +52749,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
52628
52749
|
DisplayComponent,
|
|
52629
52750
|
EmptyStateComponent,
|
|
52630
52751
|
HasPermissionDirective,
|
|
52752
|
+
IonIcon,
|
|
52631
52753
|
SkeletonLayoutComponent,
|
|
52632
52754
|
TitleComponent,
|
|
52633
52755
|
TextComponent,
|
|
@@ -52681,6 +52803,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
52681
52803
|
} @else {
|
|
52682
52804
|
@if (org(); as o) {
|
|
52683
52805
|
<div class="org-info-card">
|
|
52806
|
+
@if (o.logoUrl) {
|
|
52807
|
+
<div class="org-info-logo">
|
|
52808
|
+
<img class="org-logo-img" [src]="o.logoUrl" [alt]="o.name" />
|
|
52809
|
+
</div>
|
|
52810
|
+
}
|
|
52684
52811
|
<div class="org-info-field">
|
|
52685
52812
|
<span class="org-info-label">{{ tt('infoName') }}</span>
|
|
52686
52813
|
<span class="org-info-value">{{ o.name }}</span>
|
|
@@ -52838,14 +52965,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
52838
52965
|
@if (resolvedConfig().showTransferOwnership && isOwner()) {
|
|
52839
52966
|
<!-- Transfer ownership: solo owner (gating RBAC interno) -->
|
|
52840
52967
|
<section class="settings-section" data-testid="org-transfer-section">
|
|
52841
|
-
<
|
|
52842
|
-
|
|
52843
|
-
|
|
52844
|
-
|
|
52845
|
-
bold: true,
|
|
52846
|
-
content: tt('transferTitle'),
|
|
52847
|
-
}"
|
|
52848
|
-
/>
|
|
52968
|
+
<div class="section-title-danger">
|
|
52969
|
+
<ion-icon name="warning-outline" class="danger-icon" aria-hidden="true"></ion-icon>
|
|
52970
|
+
<val-title [props]="{ size: 'medium', color: 'dark', bold: true, content: tt('transferTitle') }" />
|
|
52971
|
+
</div>
|
|
52849
52972
|
<div class="section-body">
|
|
52850
52973
|
<val-text
|
|
52851
52974
|
[props]="{
|
|
@@ -52876,14 +52999,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
52876
52999
|
@if (resolvedConfig().showLeave) {
|
|
52877
53000
|
<!-- Leave org -->
|
|
52878
53001
|
<section class="settings-section">
|
|
52879
|
-
<
|
|
52880
|
-
|
|
52881
|
-
|
|
52882
|
-
|
|
52883
|
-
bold: true,
|
|
52884
|
-
content: tt('leaveTitle'),
|
|
52885
|
-
}"
|
|
52886
|
-
/>
|
|
53002
|
+
<div class="section-title-danger">
|
|
53003
|
+
<ion-icon name="warning-outline" class="danger-icon" aria-hidden="true"></ion-icon>
|
|
53004
|
+
<val-title [props]="{ size: 'medium', color: 'dark', bold: true, content: tt('leaveTitle') }" />
|
|
53005
|
+
</div>
|
|
52887
53006
|
<div class="section-body">
|
|
52888
53007
|
<val-text
|
|
52889
53008
|
[props]="{
|
|
@@ -52930,7 +53049,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
52930
53049
|
(dismissed)="permissionsOpen.set(false)"
|
|
52931
53050
|
/>
|
|
52932
53051
|
</div>
|
|
52933
|
-
`, 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}: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)}\n"] }]
|
|
53052
|
+
`, 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}.danger-icon{font-size:1.15rem;color:var(--ion-color-warning-shade, #d4a017);flex-shrink:0}\n"] }]
|
|
52934
53053
|
}], ctorParameters: () => [], propDecorators: { config: [{
|
|
52935
53054
|
type: Input
|
|
52936
53055
|
}] } });
|