UNPKG

@styleless-ui/react

Version:

Completely unstyled, headless and accessible React UI components.

1 lines 4.04 kB
"use strict";var __assign=this&&this.__assign||function(){return __assign=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var u in t=arguments[r])Object.prototype.hasOwnProperty.call(t,u)&&(e[u]=t[u]);return e},__assign.apply(this,arguments)},__createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,n){void 0===n&&(n=r);var u=Object.getOwnPropertyDescriptor(t,r);u&&!("get"in u?!t.__esModule:u.writable||u.configurable)||(u={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,u)}:function(e,t,r,n){void 0===n&&(n=r),e[n]=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 n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var u=0;for(n=Object.getOwnPropertySymbols(e);u<n.length;u++)t.indexOf(n[u])<0&&Object.prototype.propertyIsEnumerable.call(e,n[u])&&(r[n[u]]=e[n[u]])}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")),internals_1=require("../../internals"),utils_1=require("../../utils"),context_1=__importDefault(require("../context")),slots_1=require("../slots"),useMenuItem_1=__importDefault(require("../useMenuItem")),context_2=__importDefault(require("./context")),makeRegisterSubMenu=function(e){return function(t,r){e.current={ref:t,id:r}}},MenuItemBase=function(e,t){var r=e.children,n=e.className,u=e.disabled,i=void 0!==u&&u,s=e.onClick,l=e.onMouseEnter,a=e.onMouseLeave,o=e.onSelect,c=e.style,_=__rest(e,["children","className","disabled","onClick","onMouseEnter","onMouseLeave","onSelect","style"]),f=React.useContext(context_1.default),d=React.useRef(null),v=(0,utils_1.useForkedRefs)(t,d),p=function(){return null!=d.current&&(null==f?void 0:f.activeSubTrigger)===d.current},b=!(!f||!d.current)&&f.activeElement===d.current,m={disabled:i,active:b,isSubMenuOpen:p()},g="function"==typeof r?r(m):r,M="function"==typeof n?n(m):n,h=React.useRef(),y=makeRegisterSubMenu(h),O=(0,useMenuItem_1.default)({disabled:i,isActive:b,onClick:s,onMouseEnter:(0,utils_1.useEventCallback)((function(e){var t;if(e.currentTarget!==d.current||!f)return null==l?void 0:l(e);f.setActiveElement(d.current),f.shouldActivateFirstSubItemRef.current=!1,f.setIsMenuActive(!0),h.current&&(f.setActiveSubTrigger(d.current),null===(t=h.current.ctx)||void 0===t||t.setIsMenuActive(!1)),null==l||l(e)})),onMouseLeave:(0,utils_1.useEventCallback)((function(e){var t;null==f||f.setActiveElement(null),h.current&&(null==f||f.setActiveSubTrigger(null),null===(t=h.current.ctx)||void 0===t||t.setIsMenuActive(!0)),null==a||a(e)})),changeEmitter:(0,utils_1.useEventCallback)((function(e){null==o||o(e)}))});return(0,jsx_runtime_1.jsx)("div",__assign({},_,{ref:function(e){if(v(e),e&&(null==f||f.registerItem(d),h.current)){var t=h.current.id;e.setAttribute("aria-haspopup","menu"),e.setAttribute("aria-expanded",String(p())),t&&e.setAttribute("aria-controls",t)}},className:M,onClick:O.handleClick,onMouseEnter:O.handleMouseEnter,onMouseLeave:O.handleMouseLeave,style:c?__assign(__assign({},c),internals_1.disableUserSelectCSSProperties):internals_1.disableUserSelectCSSProperties,tabIndex:-1,role:"menuitem","data-slot":slots_1.ItemRoot,"data-active":b?"":void 0,"aria-disabled":i},{children:(0,jsx_runtime_1.jsx)(context_2.default.Provider,__assign({value:{ref:d,isSubMenuOpen:p,registerSubMenu:y}},{children:g}))}))},MenuItem=(0,utils_1.componentWithForwardedRef)(MenuItemBase);exports.default=MenuItem;