UNPKG

primereact

Version:

PrimeReact is an open source UI library for React featuring a rich set of 90+ components, a theme designer, various theme alternatives such as Material, Bootstrap, Tailwind, premium templates and professional support. In addition, it integrates with Prime

2 lines (1 loc) 4.67 kB
import*as e from"react";import{PrimeReactContext as t}from"primereact/api";import{ComponentBase as n,useHandleStyle as r}from"primereact/componentbase";import{useMergeProps as o,useMountEffect as i}from"primereact/hooks";import{Tooltip as u}from"primereact/tooltip";import{classNames as l,DomHandler as a,ObjectUtils as c}from"primereact/utils";function p(){return p=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},p.apply(null,arguments)}function s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}function d(e,t){if("object"!=s(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=s(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}function f(e){var t=d(e,"string");return"symbol"==s(t)?t:t+""}function m(e,t,n){return(t=f(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var b=n.extend({defaultProps:{__TYPE:"RadioButton",autoFocus:!1,checked:!1,className:null,disabled:!1,id:null,inputId:null,inputRef:null,invalid:!1,variant:null,name:null,onChange:null,onClick:null,required:!1,style:null,tabIndex:null,tooltip:null,tooltipOptions:null,value:null,children:void 0},css:{classes:{root:function(e){var t=e.props,n=e.context;return l("p-radiobutton p-component",{"p-highlight":t.checked,"p-disabled":t.disabled,"p-invalid":t.invalid,"p-variant-filled":t.variant?"filled"===t.variant:n&&"filled"===n.inputStyle})},box:"p-radiobutton-box",input:"p-radiobutton-input",icon:"p-radiobutton-icon"}}});function v(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function y(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?v(Object(n),!0).forEach((function(t){m(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):v(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}var g=e.memo(e.forwardRef((function(n,s){var d=o(),f=e.useContext(t),m=b.getProps(n,f),v=e.useRef(null),g=e.useRef(m.inputRef),h=b.setMetaData({props:m}),O=h.ptm,P=h.cx;r(b.css.styles,h.isUnstyled,{name:"radiobutton"});var k=function(e){j(e)},j=function(e){if(!m.disabled&&!m.readOnly&&m.onChange){var t=m.checked,n=e.target instanceof HTMLDivElement,r=e.target===g.current&&e.target.checked!==t,o=n&&a.hasClass(v.current,"p-radiobutton-checked")===t&&!t,i=!t;if(r||o){var u;if(null==m||null===(u=m.onChange)||void 0===u||u.call(m,{originalEvent:e,value:m.value,checked:i,stopPropagation:function(){null==e||e.stopPropagation()},preventDefault:function(){null==e||e.preventDefault()},target:{type:"radio",name:m.name,id:m.id,value:m.value,checked:i}}),e.defaultPrevented)return;o&&(g.current.checked=i)}a.focus(g.current)}},E=function(e){var t;null==m||null===(t=m.onFocus)||void 0===t||t.call(m,e)},x=function(e){var t;null==m||null===(t=m.onBlur)||void 0===t||t.call(m,e)};e.useImperativeHandle(s,(function(){return{props:m,select:k,focus:function(){return a.focus(g.current)},getElement:function(){return v.current},getInput:function(){return g.current}}})),e.useEffect((function(){g.current&&(g.current.checked=m.checked)}),[m.checked]),e.useEffect((function(){c.combinedRefs(g,m.inputRef)}),[g,m.inputRef]),i((function(){m.autoFocus&&a.focus(g.current,m.autoFocus)}));var R=c.isNotEmpty(m.tooltip),w=b.getOtherProps(m),S=d({id:m.id,className:l(m.className,P("root",{context:f})),style:m.style,"data-p-checked":m.checked},w,O("root"));delete S.input,delete S.box,delete S.icon;var N,C,D,I;return e.createElement(e.Fragment,null,e.createElement("div",p({ref:v},S),(D=c.reduceKeys(w,a.ARIA_PROPS),I=d(y({id:m.inputId,type:"radio",name:m.name,defaultChecked:m.checked,onFocus:E,onBlur:x,onChange:j,disabled:m.disabled,readOnly:m.readOnly,required:m.required,tabIndex:m.tabIndex,className:P("input")},D),n.input,O("input")),e.createElement("input",p({ref:g},I))),(N=d({className:P("box")},n.box,O("box")),C=d({className:P("icon")},n.icon,O("icon")),e.createElement("div",N,e.createElement("div",C)))),R&&e.createElement(u,p({target:v,content:m.tooltip,pt:O("tooltip")},m.tooltipOptions)))})));g.displayName="RadioButton";export{g as RadioButton};