import { FluentComponent } from '../core/fluent-component'
import { createUniversalComponent } from '../core/component-factory'
class FluentDropdownInternal extends FluentComponent {
static tag = 'fluent-dropdown'
static override get observedAttributes() {
return ['open']
}
override connectedCallback() {
super.connectedCallback()
this.addEventListener('click', (e) => {
const t = e.target as HTMLElement
if (t.matches('.trigger')) this.toggleAttribute('open')
})
document.addEventListener('click', (e) => {
if (!this.hasAttribute('open')) return
const path = e.composedPath() as unknown as Element[]
if (!path.includes(this)) this.removeAttribute('open')
})
}
render() {
const open = this.hasAttribute('open')
this.shadowRootRef.innerHTML = `
`
}
constructor() {
super()
this.recipe = {
base: { position: 'relative', display: 'inline-block' },
selectors: {
'.menu': { position: 'absolute', display: 'none', 'min-width': '160px', background: 'light-dark(white, var(--fluent-color-neutral-900))', border: '1px solid var(--fluent-color-neutral-300)', 'border-radius': '0.5rem', 'box-shadow': '0 12px 40px oklch(0% 0 0 / 0.2)', padding: '0.5rem' },
':host([open]) .menu': { display: 'block' }
}
}
}
}
export const FluentDropdown = createUniversalComponent({
tag: 'fluent-dropdown',
class: FluentDropdownInternal,
events: ['open-change']
})
if (typeof window !== 'undefined') {
if (!customElements.get(FluentDropdownInternal.tag)) {
customElements.define(FluentDropdownInternal.tag, FluentDropdownInternal)
}
}