@zag-js/accordion
Version:
Core logic for the accordion widget implemented as a state machine
30 lines (29 loc) • 1.27 kB
JavaScript
// 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
};