import { FluentComponent } from '../core/fluent-component' import { createUniversalComponent } from '../core/component-factory' class FluentPopoverInternal extends FluentComponent { static tag = 'fluent-popover' static override get observedAttributes() { return ['open', 'position'] } render() { const open = this.hasAttribute('open') this.shadowRootRef.innerHTML = `
` } constructor() { super() this.recipe = { base: { position: 'relative', display: 'inline-block' }, selectors: { '.fluent-popover': { position: 'absolute', 'min-width': '200px', background: 'light-dark(white, var(--fluent-color-neutral-900))', color: 'light-dark(var(--fluent-color-neutral-900), var(--fluent-color-neutral-50))', 'border-radius': '0.5rem', padding: '0.75rem', 'box-shadow': '0 12px 40px oklch(0% 0 0 / 0.2)', display: 'none' }, ':host([position="top"]) .fluent-popover': { bottom: '100%', left: '50%', transform: 'translateX(-50%)' }, ':host([position="bottom"]) .fluent-popover': { top: '100%', left: '50%', transform: 'translateX(-50%)' }, ':host([position="left"]) .fluent-popover': { right: '100%', top: '50%', transform: 'translateY(-50%)' }, ':host([position="right"]) .fluent-popover': { left: '100%', top: '50%', transform: 'translateY(-50%)' }, ':host([open]) .fluent-popover': { display: 'block' } } } } override attributeChangedCallback(name: string, oldValue: string, newValue: string): void { super.attributeChangedCallback(name, oldValue, newValue) const el = this.shadowRootRef.querySelector('.fluent-popover') as HTMLElement | null if (!el) return if (this.hasAttribute('open')) el.classList.add('open') else el.classList.remove('open') } } export const FluentPopover = createUniversalComponent({ tag: 'fluent-popover', class: FluentPopoverInternal }) if (typeof window !== 'undefined') { if (!customElements.get(FluentPopoverInternal.tag)) { customElements.define(FluentPopoverInternal.tag, FluentPopoverInternal) } }