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.
Files changed (26) hide show
  1. package/esm2022/lib/components/organisms/account-view/account-view.component.mjs +13 -21
  2. package/esm2022/lib/components/organisms/avatar-upload/avatar-upload.component.mjs +25 -12
  3. package/esm2022/lib/components/organisms/edit-org-modal/edit-org-modal.component.mjs +57 -5
  4. package/esm2022/lib/components/organisms/organization-view/organization-view.component.mjs +49 -38
  5. package/esm2022/lib/components/organisms/profile-view/profile-view.component.mjs +2 -2
  6. package/esm2022/lib/components/organisms/switch-org-modal/switch-org-modal.component.mjs +59 -6
  7. package/esm2022/lib/components/organisms/switch-org-modal/switch-org-modal.i18n.mjs +3 -1
  8. package/esm2022/lib/services/org/types.mjs +1 -1
  9. package/esm2022/lib/version.mjs +2 -2
  10. package/fesm2022/valtech-components.mjs +196 -77
  11. package/fesm2022/valtech-components.mjs.map +1 -1
  12. package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +1 -1
  13. package/lib/components/atoms/text/text.component.d.ts +1 -1
  14. package/lib/components/atoms/user-avatar/user-avatar.component.d.ts +1 -1
  15. package/lib/components/molecules/cta-card/cta-card.component.d.ts +1 -1
  16. package/lib/components/molecules/features-list/features-list.component.d.ts +1 -1
  17. package/lib/components/molecules/metric-card/metric-card.component.d.ts +1 -1
  18. package/lib/components/organisms/article/article.component.d.ts +5 -5
  19. package/lib/components/organisms/auth-cta/auth-cta.component.d.ts +1 -1
  20. package/lib/components/organisms/avatar-upload/avatar-upload.component.d.ts +10 -1
  21. package/lib/components/organisms/edit-org-modal/edit-org-modal.component.d.ts +5 -1
  22. package/lib/components/organisms/member-import-modal/member-import-modal.component.d.ts +1 -1
  23. package/lib/components/organisms/switch-org-modal/switch-org-modal.component.d.ts +6 -1
  24. package/lib/services/org/types.d.ts +2 -0
  25. package/lib/version.d.ts +1 -1
  26. 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.30';
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
- // Path: users/{userId}/avatar.jpg - allows any app to construct URL with just userId
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 = `users/${userId}/avatar.jpg`;
42181
- const thumbPath = `users/${userId}/thumb.jpg`;
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
- await firstValueFrom(this.authService.updateAvatar({
42193
- avatarUrl: avatarResult.downloadUrl,
42194
- avatarThumbnail: thumbResult.downloadUrl,
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
- <ion-icon name="business-outline" />
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
- <ion-icon name="business-outline" />
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
- <val-title
48354
- [props]="{
48355
- size: 'medium',
48356
- color: 'dark',
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
- <val-title
48554
- [props]="{
48555
- size: 'medium',
48556
- color: 'dark',
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: [IonHeader, IonToolbar, IonButtons, IonButton, IonContent, FormComponent, DisplayComponent, TitleComponent], template: `
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
- { icon: 'code-slash-outline', title: this.tt('apiKeysFeatureAutoTitle'), desc: this.tt('apiKeysFeatureAutoDesc') },
52122
- { icon: 'shield-checkmark-outline', title: this.tt('apiKeysFeaturePermsTitle'), desc: this.tt('apiKeysFeaturePermsDesc') },
52123
- { icon: 'warning-outline', title: this.tt('apiKeysFeatureSecretTitle'), desc: this.tt('apiKeysFeatureSecretDesc') },
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
- <val-title
52532
- [props]="{
52533
- size: 'medium',
52534
- color: 'dark',
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
- <val-title
52570
- [props]="{
52571
- size: 'medium',
52572
- color: 'dark',
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
- <val-title
52842
- [props]="{
52843
- size: 'medium',
52844
- color: 'dark',
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
- <val-title
52880
- [props]="{
52881
- size: 'medium',
52882
- color: 'dark',
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
  }] } });