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) • 2.33 kB
JavaScript
import*as e from"react";import{Ripple as n}from"primereact/ripple";import{Tooltip as t}from"primereact/tooltip";import{ObjectUtils as o,DomHandler as l,classNames as r,IconUtils as a}from"primereact/utils";function c(){return c=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o])}return e},c.apply(this,arguments)}var i={defaultProps:{__TYPE:"ToggleButton",id:null,onIcon:null,offIcon:null,onLabel:"Yes",offLabel:"No",iconPos:"left",style:null,className:null,checked:!1,tabIndex:0,tooltip:null,tooltipOptions:null,onChange:null,onFocus:null,onBlur:null,children:void 0},getProps:function(e){return o.getMergedProps(e,i.defaultProps)},getOtherProps:function(e){return o.getDiffProps(e,i.defaultProps)}},u=e.memo(e.forwardRef((function(u,p){var s=i.getProps(u),f=e.useRef(null),d=s.onLabel&&s.onLabel.length>0&&s.offLabel&&s.offLabel.length>0,g=s.onIcon&&s.onIcon.length>0&&s.offIcon&&s.offIcon.length>0,m=d?s.checked?s.onLabel:s.offLabel:" ",b=s.checked?s.onIcon:s.offIcon,h=function(e){!s.disabled&&s.onChange&&s.onChange({originalEvent:e,value:!s.checked,stopPropagation:function(){},preventDefault:function(){},target:{name:s.name,id:s.id,value:!s.checked}})};e.useImperativeHandle(p,(function(){return{props:s,focus:function(){return l.focusFirstElement(f.current)},getElement:function(){return f.current}}}));var v=o.isNotEmpty(s.tooltip),P=s.disabled?-1:s.tabIndex,I=i.getOtherProps(s),y=r("p-button p-togglebutton p-component",{"p-button-icon-only":g&&!d,"p-highlight":s.checked,"p-disabled":s.disabled},s.className),E=function(){if(g){var e=r("p-button-icon p-c",{"p-button-icon-left":"left"===s.iconPos&&m,"p-button-icon-right":"right"===s.iconPos&&m});return a.getJSXIcon(b,{className:e},{props:s})}return null}();return e.createElement(e.Fragment,null,e.createElement("div",c({ref:f,id:s.id,className:y,style:s.style},I,{onClick:h,onFocus:s.onFocus,onBlur:s.onBlur,onKeyDown:function(e){32===e.keyCode&&(h(e),e.preventDefault())},tabIndex:P,role:"button","aria-pressed":s.checked}),E,e.createElement("span",{className:"p-button-label"},m),e.createElement(n,null)),v&&e.createElement(t,c({target:f,content:s.tooltip},s.tooltipOptions)))})));u.displayName="ToggleButton";export{u as ToggleButton};