dropdown
zard/dropdownFreeComponent
@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/dropdown.jsonSource
1import { Overlay, OverlayModule, OverlayPositionBuilder, type OverlayRef } from '@angular/cdk/overlay';2import { TemplatePortal } from '@angular/cdk/portal';3import { isPlatformBrowser } from '@angular/common';4import {5 booleanAttribute,6 ChangeDetectionStrategy,7 Component,8 computed,9 ElementRef,10 inject,11 input,12 type OnDestroy,13 output,14 PLATFORM_ID,15 signal,16 type TemplateRef,17 viewChild,18 ViewContainerRef,19 ViewEncapsulation,20} from '@angular/core';2122import type { ClassValue } from 'clsx';2324import { ZardIdDirective } from '@/shared/core/directives/id.directive';25import { mergeClasses } from '@/shared/utils/merge-classes';2627import { dropdownContentVariants } from './dropdown.variants';2829@Component({30 selector: 'z-dropdown-menu',31 imports: [OverlayModule, ZardIdDirective],32 template: `33 <!-- Dropdown Trigger -->34 <div35 #triggerContainer36 zardId="dropdown-trigger"37 #zId="zardId"38 [id]="zId.id()"39 data-slot="dropdown-menu-trigger"40 (click)="toggle()"41 (keydown.{enter,space}.prevent)="toggle()"42 [attr.aria-haspopup]="'menu'"43 [attr.aria-expanded]="isOpen()"44 [attr.aria-disabled]="isDisabled()"45 tabindex="0"46 >47 <ng-content select="[dropdown-trigger]" />48 </div>4950 <!-- Template for overlay content -->51 <ng-template #dropdownTemplate>52 <div53 [class]="contentClasses()"54 role="menu"55 data-slot="dropdown-menu-content"56 [attr.data-state]="'open'"57 (click)="onDropdownClick($event)"58 (keydown.{arrowdown,arrowup,enter,space,escape,home,end}.prevent)="onDropdownKeydown($event)"59 tabindex="-1"60 >61 <ng-content />62 </div>63 </ng-template>64 `,65 changeDetection: ChangeDetectionStrategy.OnPush,66 encapsulation: ViewEncapsulation.None,67 host: {68 class: 'relative inline-block text-left',69 'data-slot': 'dropdown-menu',70 '[attr.data-state]': 'isOpen() ? "open" : "closed"',71 '(document:click)': 'onDocumentClick($event)',72 },73 exportAs: 'zDropdownMenu',74})75export class ZardDropdownMenuComponent implements OnDestroy {76 private elementRef = inject(ElementRef);77 private overlay = inject(Overlay);78 private overlayPositionBuilder = inject(OverlayPositionBuilder);79 private viewContainerRef = inject(ViewContainerRef);80 private platformId = inject(PLATFORM_ID);8182 readonly dropdownTemplate = viewChild.required<TemplateRef<unknown>>('dropdownTemplate');83// … 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 | |
| avataravatar | @zard | Components | Free | no deps · 4 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 |
