avatar
zard/avatarFreeComponent
@zard publishes no description for this item.
Live preview
live · rendered by the registry
Rendered by @zard on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://www.zardui.com/r/avatar.jsonSource
1import { NgOptimizedImage } from '@angular/common';2import {3 booleanAttribute,4 ChangeDetectionStrategy,5 Component,6 computed,7 effect,8 input,9 signal,10 ViewEncapsulation,11} from '@angular/core';12import type { SafeUrl } from '@angular/platform-browser';1314import { NgIcon } from '@ng-icons/core';15import type { ClassValue } from 'clsx';1617import { mergeClasses } from '@/shared/utils/merge-classes';1819import {20 avatarVariants,21 avatarBadgeVariants,22 fallbackVariants,23 imageVariants,24 type ZardAvatarSizeVariants,25} from './avatar.variants';2627@Component({28 selector: 'z-avatar, [z-avatar]',29 imports: [NgOptimizedImage, NgIcon],30 template: `31 @if (zFallback() && (!zSrc() || !imageLoaded())) {32 <span [class]="fallbackClasses()">33 {{ zFallback() }}34 </span>35 }3637 @if (zSrc() && !imageError()) {38 <img39 [width]="32"40 [height]="32"41 [alt]="zAlt()"42 [class]="imgClasses()"43 [ngSrc]="zSrc()"44 [priority]="zPriority()"45 (error)="onImageError()"46 (load)="onImageLoad()"47 />48 }4950 @if (zShowBadge()) {51 <div [class]="badgeClasses()">52 @if (zBadgeIcon()) {53 <ng-icon [name]="zBadgeIcon()" size="8" />54 }55 </div>56 }57 `,58 changeDetection: ChangeDetectionStrategy.OnPush,59 encapsulation: ViewEncapsulation.None,60 host: {61 '[class]': 'avatarClasses()',62 '[attr.data-slot]': '"avatar"',63 '[attr.data-size]': 'zSize()',64 },65 exportAs: 'zAvatar',66})67export class ZardAvatarComponent {68 readonly class = input<ClassValue>('');69 readonly zAlt = input<string>('');70 readonly zBadgeClass = input<ClassValue>('');71 readonly zBadgeIcon = input<string>('');72 readonly zFallback = input<string>('');73 readonly zPriority = input(false, { transform: booleanAttribute });74 readonly zSize = input<ZardAvatarSizeVariants>('default');75 readonly zSrc = input<string | SafeUrl>('');76 readonly zShowBadge = input(false, { transform: booleanAttribute });7778 protected readonly imageError = signal(false);79 protected readonly imageLoaded = signal(false);8081 constructor() {82 effect(() => {83 // Reset image state when zSrc changes84 this.zSrc();85 this.imageError.set(false);86 this.imageLoaded.set(false);87 });88 }8990 protected readonly avatarClasses = computed(() =>91 mergeClasses(avatarVariants({ zSize: this.zSize() }), this.class()),92 );9394 protected readonly fallbackClasses = computed(() => fallbackVariants());9596// … truncated
Files it writes
More from @zard
All 49 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| accordionaccordion | @zard | Components | Free | no deps · 5 files | |
| alertalert | @zard | Components | Free | no deps · 3 files | |
| alert-dialogalert-dialog | @zard | Components | Free | no deps · 5 files | |
| badgebadge | @zard | Components | Free | no deps · 3 files | |
| breadcrumbbreadcrumb | @zard | Components | Free | no deps · 4 files | |
| buttonbutton | @zard | Components | Free | no deps · 3 files | |
| button-groupbutton-group | @zard | Components | Free | no deps · 3 files | |
| calendarcalendar | @zard | Components | Free | no deps · 7 files |
