import { Directive, ElementRef, Renderer2, effect, inject, signal } from '@angular/core'; import { injectExposesStateProvider } from '@spartan-ng/brain/core'; import { classes } from '@spartan-ng/styles/utils'; @Directive({ selector: '[hlmPopoverContent],hlm-popover-content', host: { 'data-slot': 'popover-content' }, }) export class HlmPopoverContent { private readonly _stateProvider = injectExposesStateProvider({ host: true }); public state = this._stateProvider.state ?? signal('closed'); private readonly _renderer = inject(Renderer2); private readonly _element = inject(ElementRef); constructor() { effect(() => { this._renderer.setAttribute(this._element.nativeElement, 'data-state', this.state()); }); classes( () => 'bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 gap-2.5 rounded-lg p-2.5 text-sm shadow-md ring-1 duration-100 relative flex w-72 flex-col outline-none', ); } }