carbon-react
Version:
A library of reusable React components for easily building user interfaces.
2 lines (1 loc) • 2.8 kB
JavaScript
import{jsx as e,jsxs as t}from"react/jsx-runtime";import{useRef as n,useContext as o}from"react";import r from"invariant";import{StyledButtonToggleWrapper as l,StyledButtonToggle as i}from"./button-toggle.style.js";import a from"../../__internal__/utils/helpers/guid/index.js";import{useButtonToggleGroupContext as u}from"./button-toggle-group/__internal__/button-toggle-group.context.js";import c from"./button-toggle-icon.component.js";import{InputGroupContext as s}from"../../__internal__/input-behaviour/input-group-behaviour.component.js";import b from"../../__internal__/utils/logger/index.js";function p(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function d(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},o=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(n).filter((function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})))),o.forEach((function(t){p(e,t,n[t])}))}return e}let m=!1;const f=({"aria-label":p,"aria-labelledby":f,buttonIcon:g,buttonIconSize:y="small",children:O,"data-component":j,"data-element":h,"data-role":_,disabled:v,onBlur:w,onFocus:I,onClick:P,pressed:D,size:x="medium",value:B})=>{r(!(!O&&!g),"Either prop `buttonIcon` must be defined, or this node must have children"),D&&!m&&(b.deprecate("The `pressed` prop is deprecated."),m=!0);const S=n(null),{onMouseEnter:k,onMouseLeave:C,onBlur:z,onFocus:E}=o(s),{onButtonClick:M,handleKeyDown:F,pressedButtonValue:T,onChange:K,allowDeselect:L,isInGroup:G,isDisabled:N,firstButton:R,childButtonCallbackRef:V,hintTextId:q}=u(),A=n(a()),H=G?T&&T===B:D,J=S.current===R,Q=!G||H||!T&&J;return e(l,{"data-component":j||"button-toggle","data-element":h,"data-role":_,children:t(i,(U=d({"aria-label":p,"aria-labelledby":f,"aria-describedby":q,"aria-pressed":!!H,buttonIcon:g,buttonIconSize:y,"data-element":"button-toggle-button",disabled:v||N,id:A.current,onMouseEnter:k,onMouseLeave:C,size:x,value:B,onFocus:function(e){null==I||I(e),null==E||E()},onBlur:function(e){null==w||w(e),null==z||z()},onClick:function(e){P&&P(e),null==K||K(e,L&&T&&T===B?void 0:B),B&&M(B)},onKeyDown:F},Q?{tabIndex:0}:{tabIndex:-1}),W={allowDeselect:L,ref:e=>{S.current=e,null==V||V(e)},children:[g&&e(c,{buttonIcon:g,buttonIconSize:y,disabled:v,hasContent:!!O}),O]},W=null!=W?W:{},Object.getOwnPropertyDescriptors?Object.defineProperties(U,Object.getOwnPropertyDescriptors(W)):function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t}(Object(W)).forEach((function(e){Object.defineProperty(U,e,Object.getOwnPropertyDescriptor(W,e))})),U))});var U,W};f.displayName="ButtonToggle";export{f as ButtonToggle,f as default};