UNPKG

@zag-js/accordion

Version:

Core logic for the accordion widget implemented as a state machine

30 lines (29 loc) 1.27 kB
// src/accordion.dom.ts import { nextById, prevById, queryAll } from "@zag-js/dom-query"; import { first, last } from "@zag-js/utils"; var getRootId = (ctx) => ctx.ids?.root ?? `accordion:${ctx.id}`; var getItemId = (ctx, value) => ctx.ids?.item?.(value) ?? `accordion:${ctx.id}:item:${value}`; var getItemContentId = (ctx, value) => ctx.ids?.itemContent?.(value) ?? `accordion:${ctx.id}:content:${value}`; var getItemTriggerId = (ctx, value) => ctx.ids?.itemTrigger?.(value) ?? `accordion:${ctx.id}:trigger:${value}`; var getRootEl = (ctx) => ctx.getById(getRootId(ctx)); var getTriggerEls = (ctx) => { const ownerId = CSS.escape(getRootId(ctx)); const selector = `[data-controls][data-ownedby='${ownerId}']:not([disabled])`; return queryAll(getRootEl(ctx), selector); }; var getFirstTriggerEl = (ctx) => first(getTriggerEls(ctx)); var getLastTriggerEl = (ctx) => last(getTriggerEls(ctx)); var getNextTriggerEl = (ctx, id) => nextById(getTriggerEls(ctx), getItemTriggerId(ctx, id)); var getPrevTriggerEl = (ctx, id) => prevById(getTriggerEls(ctx), getItemTriggerId(ctx, id)); export { getFirstTriggerEl, getItemContentId, getItemId, getItemTriggerId, getLastTriggerEl, getNextTriggerEl, getPrevTriggerEl, getRootEl, getRootId, getTriggerEls };