carbon-react
Version:
A library of reusable React components for easily building user interfaces.
2 lines (1 loc) • 806 B
JavaScript
import{jsx as e,Fragment as o}from"react/jsx-runtime";import n,{useMemo as r,useState as t,useCallback as a}from"react";const l=({children:l,name:u,onBlur:p,onChange:d,onMouseDown:c,onKeyDown:i,value:s})=>{const m=r((()=>n.Children.toArray(l)),[l]),h=r((()=>{let e=!1;return m.forEach((o=>{n.isValidElement(o)&&Object.prototype.hasOwnProperty.call(o.props,"defaultChecked")&&(e=!0)})),e}),[m]),f=void 0!==s,[v,y]=t(""),C=a((e=>{null==d||d(e),f||y(e.target.value)}),[d,y,f]),w=m.map((e=>{let o;if(!n.isValidElement(e))return e;o=f?s===e.props.value:!v&&h?e.props.defaultChecked||!1:v===e.props.value;const r={defaultChecked:void 0,checked:o,name:u,onBlur:p,onMouseDown:c,onChange:C,onKeyDown:i};return n.cloneElement(e,r)}));return e(o,{children:w})};l.displayName="RadioButtonMapper";export{l as default};