@navinc/base-react-components
Version:
Nav's Pattern Library
33 lines • 2.08 kB
JavaScript
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { useEffect, useRef, useState } from 'react';
import { cn } from '../../cn.js';
import { RadioGroupInternal } from '../radio/radio.js';
export const RadioButton = (_a) => {
var { label, disabled, className, children } = _a, props = __rest(_a, ["label", "disabled", "className", "children"]);
const [isChecked, setIsChecked] = useState(false);
const ref = useRef(null);
useEffect(() => {
const target = ref.current;
if (!target)
return;
setIsChecked(target.dataset.state === 'checked');
const observer = new MutationObserver(() => {
setIsChecked(target.getAttribute('data-state') === 'checked');
});
observer.observe(target, { attributes: true, attributeFilter: ['data-state'] });
return () => observer.disconnect();
}, []);
return (_jsxs("label", { className: cn('group flex w-full gap-150 justify-between rounded-200 p-200 border border-transparent border-solid', !disabled && !isChecked && 'shadow-elevation1 hover:border-inversePrimary focus:inversePrimary', !disabled && isChecked && 'border-primary bg-primary-linear-gradient shadow-elevation1', disabled && 'ring-1 ring-outlineVariant', className), children: [_jsxs("div", { className: "flex", children: [_jsx(RadioGroupInternal.Radio, Object.assign({ disabled: disabled }, props, { ref: ref })), _jsx("span", { className: cn('body1 ml-150', disabled && 'text-onSurfaceDim'), children: label })] }), children] }));
};
//# sourceMappingURL=radio-button.js.map