码桶
发现社区成员的开源项目
index-CfWZ9ycl.js4.4 KB
import{Z as O,a2 as S,Y as i,ac as D,R as l,a5 as T,M as x,a8 as t,a9 as L,aa as u}from"./index-GWuvg2UH.js";class A extends O{constructor(e){super(Object.assign({},e)),this.handleFocusVisible=s=>{const{target:a}=s;try{a.matches(":focus-visible")&&this._adapter.setFocusVisible(!0)}catch{S(!0,"Warning: [Semi Switch] The current browser does not support the focus-visible")}},this.handleBlur=()=>{this._adapter.setFocusVisible(!1)}}init(){const{disabled:e}=this.getProps();this.setDisabled(e)}setChecked(e){this._adapter.setNativeControlChecked(e)}setDisabled(e){this._adapter.setNativeControlDisabled(e)}handleChange(e,s){typeof this.getProps().checked<"u"?this._adapter.notifyChange(e,s):(this._adapter.setNativeControlChecked(e),this._adapter.notifyChange(e,s))}destroy(){}}const o={PREFIX:`${i}-switch`,FOCUS:`${i}-switch-focus`,LARGE:`${i}-switch-large`,SMALL:`${i}-switch-small`,CHECKED:`${i}-switch-checked`,DISABLED:`${i}-switch-disabled`,KNOB:`${i}-switch-knob`,NATIVE_CONTROL:`${i}-switch-native-control`,CHECKED_TEXT:`${i}-switch-checked-text`,UNCHECKED_TEXT:`${i}-switch-unchecked-text`,LOADING_SPIN:`${i}-switch-loading-spin`,LOADING:`${i}-switch-loading`},F={SIZE_MAP:["default","small","large"]};var I=function(r,e){var s={};for(var a in r)Object.prototype.hasOwnProperty.call(r,a)&&e.indexOf(a)<0&&(s[a]=r[a]);if(r!=null&&typeof Object.getOwnPropertySymbols=="function")for(var n=0,a=Object.getOwnPropertySymbols(r);n<a.length;n++)e.indexOf(a[n])<0&&Object.prototype.propertyIsEnumerable.call(r,a[n])&&(s[a[n]]=r[a[n]]);return s};class h extends D{constructor(e){super(e),this.handleFocusVisible=s=>{this.foundation.handleFocusVisible(s)},this.handleBlur=s=>{this.foundation.handleBlur()},this.state={nativeControlChecked:e.defaultChecked||e.checked,nativeControlDisabled:!1,focusVisible:!1},this.switchRef=l.createRef(),this.foundation=new A(this.adapter)}componentDidMount(){this.foundation.init()}componentDidUpdate(e){this.props.checked!==e.checked&&this.foundation.setChecked(this.props.checked),this.props.disabled!==e.disabled&&this.foundation.setDisabled(this.props.disabled)}componentWillUnmount(){this.foundation.destroy()}get adapter(){return Object.assign(Object.assign({},super.adapter),{setNativeControlChecked:e=>{this.setState({nativeControlChecked:e})},setNativeControlDisabled:e=>{this.setState({nativeControlDisabled:e})},setFocusVisible:e=>{this.setState({focusVisible:e})},notifyChange:(e,s)=>{this.props.onChange(e,s)}})}render(){const{nativeControlChecked:e,nativeControlDisabled:s,focusVisible:a}=this.state,n=this.props,{className:f,style:m,onMouseEnter:g,onMouseLeave:E,size:c,checkedText:b,uncheckedText:C,loading:p,id:k}=n,_=I(n,["className","style","onMouseEnter","onMouseLeave","size","checkedText","uncheckedText","loading","id"]),N=T(f,{[o.PREFIX]:!0,[o.CHECKED]:e,[o.DISABLED]:s,[o.LARGE]:c==="large",[o.SMALL]:c==="small",[o.LOADING]:p,[o.FOCUS]:a}),w={type:"checkbox",className:o.NATIVE_CONTROL,disabled:s||p,checked:e||!1},y=b&&e&&c!=="small",v=C&&!e&&c!=="small";return l.createElement("div",Object.assign({className:N,style:m,onMouseEnter:g,onMouseLeave:E},this.getDataAttr(_)),p?l.createElement(x,{wrapperClassName:o.LOADING_SPIN,size:c==="default"?"middle":c}):l.createElement("div",{className:o.KNOB,"aria-hidden":!0}),y?l.createElement("div",{className:o.CHECKED_TEXT,"x-semi-prop":"checkedText"},b):null,v?l.createElement("div",{className:o.UNCHECKED_TEXT,"x-semi-prop":"uncheckedText"},C):null,l.createElement("input",Object.assign({},w,{ref:this.switchRef,id:k,role:"switch","aria-checked":e,"aria-invalid":this.props["aria-invalid"],"aria-errormessage":this.props["aria-errormessage"],"aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"],"aria-describedby":this.props["aria-describedby"],"aria-disabled":this.props.disabled,onChange:d=>this.foundation.handleChange(d.target.checked,d),onFocus:d=>this.handleFocusVisible(d),onBlur:d=>this.handleBlur(d)})))}}h.__SemiComponentName__="Switch";h.propTypes={"aria-label":t.string,"aria-labelledby":t.string,"aria-invalid":t.bool,"aria-errormessage":t.string,"aria-describedby":t.string,className:t.string,checked:t.bool,checkedText:t.node,defaultChecked:t.bool,disabled:t.bool,loading:t.bool,onChange:t.func,onMouseEnter:t.func,onMouseLeave:t.func,style:t.object,size:t.oneOf(F.SIZE_MAP),uncheckedText:t.node,id:t.string};h.defaultProps=L(h.__SemiComponentName__,{disabled:!1,className:"",onChange:u,loading:!1,onMouseEnter:u,onMouseLeave:u,size:"default"});export{h as S};