@zag-js/toggle
Version:
Core logic for the toggle widget implemented as a state machine
42 lines (41 loc) • 1.15 kB
JavaScript
// src/toggle.connect.ts
import { dataAttr } from "@zag-js/dom-query";
import { parts } from "./toggle.anatomy.mjs";
function connect(service, normalize) {
const { context, prop, send } = service;
const pressed = context.get("pressed");
return {
pressed,
disabled: !!prop("disabled"),
setPressed(value) {
send({ type: "PRESS.SET", value });
},
getRootProps() {
return normalize.element({
type: "button",
...parts.root.attrs,
disabled: prop("disabled"),
"aria-pressed": pressed,
"data-state": pressed ? "on" : "off",
"data-pressed": dataAttr(pressed),
"data-disabled": dataAttr(prop("disabled")),
onClick(event) {
if (event.defaultPrevented) return;
if (prop("disabled")) return;
send({ type: "PRESS.TOGGLE" });
}
});
},
getIndicatorProps() {
return normalize.element({
...parts.indicator.attrs,
"data-disabled": dataAttr(prop("disabled")),
"data-pressed": dataAttr(pressed),
"data-state": pressed ? "on" : "off"
});
}
};
}
export {
connect
};