ui-ingredients
Version:
Headless component library for Svelte powered by zag
34 lines (33 loc) • 991 B
JavaScript
import { ariaAttr, dataAttr } from '@zag-js/dom-query';
import { reflect } from '@zag-js/svelte';
import { parts } from './toggle-anatomy.js';
export function createToggle(props) {
let pressed = $state(props.pressed ?? false);
function setPressed(value) {
props.onPressedChange?.({ pressed: value });
pressed = value;
}
function getRootProps() {
return {
disabled: props.disabled,
onclick() {
if (props.disabled)
return;
setPressed(!pressed);
},
'aria-pressed': ariaAttr(pressed),
'data-state': pressed ? 'on' : 'off',
'data-pressed': dataAttr(pressed),
'data-disabled': dataAttr(props.disabled),
...parts.root.attrs,
};
}
$effect(() => {
pressed = props.pressed ?? false;
});
return reflect(() => ({
pressed,
setPressed,
getRootProps,
}));
}