@zag-js/radio-group
Version:
Core logic for the radio group widget implemented as a state machine
53 lines (52 loc) • 2.08 kB
JavaScript
// 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
};