UNPKG

@navinc/base-react-components

Version:
33 lines 2.08 kB
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