UNPKG

@styleless-ui/react

Version:

Completely unstyled, headless and accessible React UI components.

1 lines 2.95 kB
var e=this&&this.__spreadArray||function(e,n,r){if(r||2===arguments.length)for(var t,u=0,o=n.length;u<o;u++)!t&&u in n||(t||(t=Array.prototype.slice.call(n,0,u)),t[u]=n[u]);return e.concat(t||Array.prototype.slice.call(n))};import*as n from"react";import{requestFormSubmit as r,useControlledProp as t,useEventCallback as u,useForkedRefs as o,useIsFocusVisible as l,useIsMounted as c,useIsomorphicLayoutEffect as i}from".";import{SystemKeys as a}from"../internals";export default function(f){var d=f.checked,s=f.value,v=void 0===s?"":s,h=f.groupCtx,y=f.defaultChecked,g=f.onBlur,k=f.onChange,p=f.onFocus,E=f.onKeyDown,m=f.onKeyUp,C=f.keyboardActivationBehavior,R=void 0===C?"automatic":C,T=f.enterKeyFunctionality,F=void 0===T?"request-form-submit":T,A=f.strategy,b=void 0===A?"check-control":A,D=f.autoFocus,S=void 0!==D&&D,K=f.toggle,N=void 0!==K&&K,P=f.disabled,w=void 0!==P&&P,B=c(),x=t(d,y,!1),I=x[0],U=x[1],q=h?"check-control"===b?h.value.includes(v):h.value===v:I,G=l(),H=G.isFocusVisibleRef,L=G.onBlur,V=G.onFocus,_=G.ref,O=n.useRef(),W=o(O,_),j=n.useRef(!1),z=n.useRef(!1),J=n.useState((function(){return!w&&S})),M=J[0],Q=J[1];n.useEffect((function(){w&&M&&Q(!1)})),n.useEffect((function(){H.current=M})),i((function(){var e;M&&(null===(e=O.current)||void 0===e||e.focus())}),[]);var X=function(e){!w&&B()&&("radio-control"===b&&q&&!N||(U(e),null==h||h.onChange(e,v),null==k||k(e)))},Y=u((function(e){e.preventDefault(),!w&&B()&&X(!q)})),Z=u((function(e){!w&&B()&&(O.current||(O.current=e.currentTarget),V(e),H.current&&Q(!0),null==p||p(e))})),$=u((function(e){!w&&B()&&(L(e),!1===H.current&&Q(!1),null==g||g(e))})),ee=u((function(n){var r,t,u;if(!w&&B()){if(M&&(!1===j.current&&n.key===a.SPACE&&(j.current=!0),!1===z.current&&n.key===a.ENTER&&(z.current=!0)),n.target===n.currentTarget&&([a.SPACE,a.ENTER].includes(n.key)&&n.preventDefault(),h&&M)){var o=h.items;if(!o)return;var l=o.findIndex((function(e){return e[0]===v})),c=null===(r=o[l])||void 0===r?void 0:r[1].current,i=c?window.getComputedStyle(c).direction:"ltr",f=[a.UP,"ltr"===i?a.LEFT:a.RIGHT].includes(n.key),d=[a.DOWN,"ltr"===i?a.RIGHT:a.LEFT].includes(n.key),s=null,y=function(n,r,t){void 0===t&&(t=[]);var u=o[n];if(t.includes(n))return null;if(!u||!u[1].current||u[1].current.disabled){var l=(r?n+1:n-1+o.length)%o.length;return y(l,r,e(e([],t,!0),[n],!1))}return u};f?s=y((l-1+o.length)%o.length,!1):d&&(s=y((l+1)%o.length,!0)),s&&(n.preventDefault(),null===(t=s[1].current)||void 0===t||t.focus(),"automatic"===R&&(null===(u=s[1].current)||void 0===u||u.click()))}null==E||E(n)}})),ne=u((function(e){!w&&B()&&(M&&(e.key===a.SPACE&&(j.current=!1),e.key===a.ENTER&&(z.current=!1)),null==m||m(e),e.target===e.currentTarget&&(e.key===a.SPACE?X(!q):e.key===a.ENTER&&("request-form-submit"===F?r(e.target):X(!q))))}));return{checked:q,isFocusedVisible:M,controllerRef:O,emitChange:X,handleBlur:$,handleClick:Y,handleFocus:Z,handleKeyDown:ee,handleKeyUp:ne,handleControllerRef:W}}