import { inject, injectable } from '@joist/di';
import { attr, css, element, html, query } from '@joist/element';
import { COMBO_BOX_CTX } from '../context.js';
declare global {
interface HTMLElementTagNameMap {
'usa-combo-box-option': USAComboBoxOptionElement;
}
}
const listTemplate = html`
`;
@injectable({
name: 'usa-combo-box-option-ctx',
})
@element({
tagName: 'usa-combo-box-option',
dependsOn: ['usa-combo-box'],
shadowDom: [
css`
:host {
display: flex;
align-items: center;
gap: 0.5rem;
padding: 0.5rem;
}
`,
html``,
],
})
export class USAComboBoxOptionElement extends HTMLElement {
@attr()
accessor value = '';
#listItem = listTemplate.createNode() as HTMLElement;
#li = query('li', this.#listItem);
#slot = query('slot', this.#listItem);
#ctx = inject(COMBO_BOX_CTX);
attributeChangedCallback() {
const value = this.value.split(' ').join('-').toLocaleLowerCase();
this.#li().dataset.value = this.value;
this.#slot({ name: value });
this.slot = value;
}
connectedCallback() {
const ctx = this.#ctx();
ctx.addOption(this.#li());
}
disconnectedCallback() {
const ctx = this.#ctx();
ctx.removeOption(this.#li());
this.#li().remove();
}
}