@styleless-ui/react
Version:
Completely unstyled, headless and accessible React UI components.
1 lines • 4.01 kB
JavaScript
;var __assign=this&&this.__assign||function(){return __assign=Object.assign||function(e){for(var t,r=1,i=arguments.length;r<i;r++)for(var n in t=arguments[r])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e},__assign.apply(this,arguments)},__createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var n=Object.getOwnPropertyDescriptor(t,r);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,n)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)"default"!==r&&Object.prototype.hasOwnProperty.call(e,r)&&__createBinding(t,e,r);return __setModuleDefault(t,e),t},__rest=this&&this.__rest||function(e,t){var r={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(r[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(i=Object.getOwnPropertySymbols(e);n<i.length;n++)t.indexOf(i[n])<0&&Object.prototype.propertyIsEnumerable.call(e,i[n])&&(r[i[n]]=e[i[n]])}return r},__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});var jsx_runtime_1=require("react/jsx-runtime"),React=__importStar(require("react")),utils_1=require("../utils"),context_1=__importDefault(require("./context")),Slots=__importStar(require("./slots")),getLabelInfo=function(e){var t={};if("string"==typeof e)t.visibleLabel=e;else if("screenReaderLabel"in e)t.srOnlyLabel=e.screenReaderLabel;else{if(!("labelledBy"in e))throw new Error(["[StylelessUI][RadioGroup]: Invalid `label` property.","The `label` property must be either a `string` or in shape of `{ screenReaderLabel: string; } | { labelledBy: string; }`"].join("\n"));t.labelledBy=e.labelledBy}return t},RadioGroupBase=function(e,t){var r=e.label,i=e.children,n=e.id,l=e.classes,a=e.defaultValue,o=e.value,s=e.onChange,u=e.orientation,d=void 0===u?"vertical":u,c=__rest(e,["label","children","id","classes","defaultValue","value","onChange","orientation"]),_=React.useRef(null),f=(0,utils_1.useForkedRefs)(t,_),b=(0,utils_1.useDeterministicId)(n,"styleless-ui__radio-group"),p=b?"".concat(b,"__label"):void 0,v=getLabelInfo(r),h=(0,utils_1.useControlledProp)(o,a,""),g=h[0],y=h[1],m=[];return React.useEffect((function(){var e,t;if(_.current){m.forEach((function(e){var t=e[0],r=e[1];if(r.current){var i=Array.isArray(g)?g.includes(t):g===t,n=r.current.hasAttribute("disabled");r.current.tabIndex=n?-1:i?0:-1}}));var r=m.filter((function(e){var t;e[0];return"0"!==(null===(t=e[1].current)||void 0===t?void 0:t.getAttribute("tabindex"))}));if(r.length===m.length){var i=null!==(e=m.find((function(e){var t;e[0];return!(null===(t=e[1].current)||void 0===t?void 0:t.hasAttribute("disabled"))})))&&void 0!==e?e:null;if(i){i[0];null===(t=i[1].current)||void 0===t||t.setAttribute("tabindex","0")}}}})),(0,jsx_runtime_1.jsx)("div",__assign({},c,{id:b,ref:f,className:null==l?void 0:l.root,"data-slot":Slots.Root},{children:(0,jsx_runtime_1.jsxs)(context_1.default.Provider,__assign({value:{value:g,onChange:function(e,t){e&&(y(t),null==s||s(t))},registerRadio:function(e,t){m.some((function(t){return t[0]===e}))||m.push([e,t])},radios:m}},{children:[v.visibleLabel&&(0,jsx_runtime_1.jsx)("span",__assign({id:p,"data-slot":Slots.Label,className:null==l?void 0:l.label},{children:v.visibleLabel})),(0,jsx_runtime_1.jsx)("div",__assign({role:"radiogroup","data-slot":Slots.Group,className:null==l?void 0:l.group,"aria-label":v.srOnlyLabel,"aria-orientation":d,"aria-labelledby":v.visibleLabel?p:v.labelledBy},{children:i}))]}))}))},RadioGroup=(0,utils_1.componentWithForwardedRef)(RadioGroupBase);exports.default=RadioGroup;