UNPKG

@zag-js/radio-group

Version:

Core logic for the radio group widget implemented as a state machine

53 lines (52 loc) 2.08 kB
// src/radio-group.dom.ts import { queryAll } from "@zag-js/dom-query"; var getRootId = (ctx) => ctx.ids?.root ?? `radio-group:${ctx.id}`; var getLabelId = (ctx) => ctx.ids?.label ?? `radio-group:${ctx.id}:label`; var getItemId = (ctx, value) => ctx.ids?.item?.(value) ?? `radio-group:${ctx.id}:radio:${value}`; var getItemHiddenInputId = (ctx, value) => ctx.ids?.itemHiddenInput?.(value) ?? `radio-group:${ctx.id}:radio:input:${value}`; var getItemControlId = (ctx, value) => ctx.ids?.itemControl?.(value) ?? `radio-group:${ctx.id}:radio:control:${value}`; var getItemLabelId = (ctx, value) => ctx.ids?.itemLabel?.(value) ?? `radio-group:${ctx.id}:radio:label:${value}`; var getIndicatorId = (ctx) => ctx.ids?.indicator ?? `radio-group:${ctx.id}:indicator`; var getRootEl = (ctx) => ctx.getById(getRootId(ctx)); var getItemHiddenInputEl = (ctx, value) => ctx.getById(getItemHiddenInputId(ctx, value)); var getIndicatorEl = (ctx) => ctx.getById(getIndicatorId(ctx)); var getFirstEnabledInputEl = (ctx) => getRootEl(ctx)?.querySelector("input:not(:disabled)"); var getFirstEnabledAndCheckedInputEl = (ctx) => getRootEl(ctx)?.querySelector("input:not(:disabled):checked"); var getInputEls = (ctx) => { const ownerId = CSS.escape(getRootId(ctx)); const selector = `input[type=radio][data-ownedby='${ownerId}']:not([disabled])`; return queryAll(getRootEl(ctx), selector); }; var getRadioEl = (ctx, value) => { if (!value) return; return ctx.getById(getItemId(ctx, value)); }; var getOffsetRect = (el) => ({ x: el?.offsetLeft ?? 0, y: el?.offsetTop ?? 0, width: el?.offsetWidth ?? 0, height: el?.offsetHeight ?? 0 }); var getRectById = (ctx, id) => { const radioEl = ctx.getById(getItemId(ctx, id)); if (!radioEl) return; return getOffsetRect(radioEl); }; export { getFirstEnabledAndCheckedInputEl, getFirstEnabledInputEl, getIndicatorEl, getIndicatorId, getInputEls, getItemControlId, getItemHiddenInputEl, getItemHiddenInputId, getItemId, getItemLabelId, getLabelId, getOffsetRect, getRadioEl, getRectById, getRootEl, getRootId };