import { PktElementWithSlot } from '@/base-elements/element-with-slot' import { slotContent } from '@/directives/slot-content' import { consume } from '@lit/context' import { html, PropertyValues } from 'lit' import { customElement, property } from 'lit/decorators.js' import { createRef, Ref, ref } from 'lit/directives/ref.js' import { TPktAccordionSkin } from './accordion' import { accordionContext, type AccordionContext } from './accordion-context' import { classMap } from 'lit/directives/class-map.js' import { ifDefined } from 'lit/directives/if-defined.js' /** * @param toggleProps * * @description Send in an "isOpen" boolean and "onToggleClick" function * to override the automatic toggling */ export interface IPktAccordionItem { defaultOpen?: boolean id: string title: string skin?: TPktAccordionSkin compact?: boolean isOpen?: boolean name?: string | undefined } export class PktAccordionItem extends PktElementWithSlot implements IPktAccordionItem { @property({ type: Boolean }) defaultOpen: boolean = false @property({ type: String }) title: string = '' @property({ type: String, reflect: true }) skin: TPktAccordionSkin | undefined = undefined @property({ type: Boolean, reflect: true }) compact: boolean = false @property({ type: Boolean, reflect: true }) isOpen: boolean = false @property({ type: String, reflect: true }) name: string | undefined = undefined // Skin fra pkt-accordion-forelder; egen skin-property overstyrer @consume({ context: accordionContext, subscribe: true }) @property({ attribute: false }) private context?: AccordionContext accordionItemRef: Ref = createRef() constructor() { super() } protected firstUpdated(_changedProperties: PropertyValues): void { if (this.defaultOpen) { this.isOpen = true } } render() { const accordionItemClass = { 'pkt-accordion-item': true, 'pkt-accordion-item--compact': this.compact, [`pkt-accordion-item--${this.skin}`]: !!this.skin, } const actualSkin = this.skin ?? this.context?.skin const isPlusMinus = actualSkin === 'plus-minus' return html`
${this.title} ${isPlusMinus ? html` ` : html` `}
${slotContent(this)}
` } } export default PktAccordionItem try { customElement('pkt-accordion-item')(PktAccordionItem) } catch (e) { console.warn('Forsøker å definere , men den er allerede definert') }