@svar-ui/react-menu 2.4.3 → 2.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),t=require("react"),O=require("@svar-ui/lib-dom"),E=require("@svar-ui/react-core");function L(r,u){return r.map(e=>{const s=u(e);return e.data&&e.data.length&&(s.data=L(e.data,u)),s})}function $(r,u){const e=[];return r.forEach(s=>{if(s.data){const c=$(s.data,u);c.length&&e.push({...s,data:c})}else u(s)&&e.push(s)}),e}let Z=1;function q(r){return L(r,u=>{const e={...u,id:u.id||Z++};return e.type&&(e.comp=e.type),e})}const H={};function F(r){return H[r]||r}function Q(r,u){H[r]=u}function X({onClick:r,onShow:u,option:e}){const s=t.useRef(null),c=t.useCallback(()=>{u(e.data?e.id:!1,s.current)},[u,e]),x=t.useMemo(()=>e&&e.comp?F(e.comp):null,[e]);return n.jsxs("div",{ref:s,className:`wx-cDCz9rZQ wx-option ${e.css||""} ${e.disabled?"wx-disabled":""}`,"data-id":e.id,onMouseEnter:c,onClick:r,children:[e.icon?n.jsx("i",{className:`wx-cDCz9rZQ wx-icon ${e.icon}`}):null,e.comp?x?n.jsx(x,{item:e,option:e}):null:n.jsxs("span",{className:"wx-cDCz9rZQ wx-value",children:[" ",e.text," "]}),e.subtext?n.jsx("span",{className:"wx-cDCz9rZQ wx-subtext",children:e.subtext}):null,e.data?n.jsx("i",{className:"wx-cDCz9rZQ wx-sub-icon wxi-angle-right"}):null]})}function R({options:r,left:u=0,top:e=0,at:s="bottom",parent:c=null,mount:x=null,context:w=null,css:f="",onClick:i}){const[m,C]=t.useState(-1e4),[h,M]=t.useState(-1e4),[b,l]=t.useState(20),[a,g]=t.useState(),S=t.useRef(null),[y,I]=t.useState(!1),[N,P]=t.useState(null),p=t.useCallback(()=>{const d=O.calculatePosition(S.current,c,s,u,e);d&&(C(d.x),M(d.y),l(d.z),g(d.width))},[c,s,u,e]);t.useEffect(()=>{x&&x(p)},[]);const o=t.useCallback(()=>{I(!1)},[]),k=t.useCallback(()=>{i&&i({action:null,option:null})},[i]),j=t.useCallback((d,D)=>{I(d),P(D)},[]),v=t.useMemo(()=>q(r),[r]);return t.useEffect(()=>{p()},[c,p]),t.useEffect(()=>{if(S.current)return O.clickOutside(S.current,{callback:k,modal:!0}).destroy},[k]),n.jsx("div",{ref:S,"data-wx-menu":"true",className:`wx-XMmAGqVx wx-menu ${f}`,style:{position:"absolute",top:h+"px",left:m+"px",width:a,zIndex:b},onMouseLeave:o,children:v.map(d=>n.jsxs(t.Fragment,{children:[d.comp==="separator"?n.jsx("div",{className:"wx-XMmAGqVx wx-separator"}):n.jsx(X,{option:d,onShow:j,onClick:D=>{if(!d.data&&!D.defaultPrevented){const z={context:w,action:d,option:d,event:D};d.handler&&d.handler(z),i&&i(z),D.stopPropagation()}}}),d.data&&y===d.id?n.jsx(R,{css:f,options:d.data,at:"right-overlap",parent:N,context:w,onClick:i}):null]},d.id))})}const A=t.forwardRef(function(u,e){const{options:s,at:c="bottom",resolver:x=null,dataKey:w="contextId",filter:f=null,css:i="",children:m,onClick:C}=u,[h,M]=t.useState(null),[b,l]=t.useState(null),[a,g]=t.useState(0),[S,y]=t.useState(0),I=t.useMemo(()=>h!==null&&f?$(s,o=>f(o,h)):s,[h,f,s]),N=t.useCallback(o=>{l(null),C&&C(o)},[C]),P=t.useCallback((o,k)=>{let j=null;for(;o&&o.dataset&&!j;)j=o.dataset[k],o=o.parentNode;return j?O.id(j):null},[]),p=t.useCallback((o,k)=>{if(!o){l(null);return}if(o.defaultPrevented)return;const j=o.target;if(j&&j.dataset&&j.dataset.menuIgnore)return;g(o.clientX+1),y(o.clientY+1);let v=typeof k<"u"?k:P(j,w);x&&(v=x(v,o),!v)||(M(v),l(j),o.preventDefault())},[w,P,x]);return t.useImperativeHandle(e,()=>({show:p}),[p]),n.jsxs(n.Fragment,{children:[m?n.jsx("span",{onClick:p,"data-menu-ignore":"true",children:typeof m=="function"?m():m}):null,b?n.jsx(E.Portal,{children:n.jsx(R,{css:i,at:c,top:S,left:a,parent:b,context:h,onClick:N,options:I},b)}):null]})});function K(r){const{css:u="",menuCss:e="",options:s,onClick:c}=r,x=t.useMemo(()=>q(s),[s]),[w,f]=t.useState(!1),[i,m]=t.useState([]),C=t.useRef(null);function h(l){f(null),c&&c(l)}function M(l,a,g){a.data&&a.data.length?w&&g?f(null):(m(a.data),f(a.id),C.current.show(l,a)):(C.current.show(null),g?(c&&c({action:a,option:a}),f(null)):f(-1))}function b(l,a){w&&M(l,a)}return n.jsxs(n.Fragment,{children:[n.jsx("div",{className:`wx-UfhPCLL4 wx-menubar ${u}`,children:x.map(l=>n.jsx("button",{className:`wx-UfhPCLL4 wx-option ${w===l.id?"wx-active":""} ${l.disabled?"wx-disabled":""}`,onMouseEnter:a=>b(a,l),onClick:a=>M(a,l,!0),children:l.text},l.id))}),n.jsx(A,{css:e,onClick:h,options:i,ref:C})]})}const B=t.forwardRef(function(u,e){const{options:s,at:c="bottom",css:x="",children:w,onClick:f}=u,[i,m]=t.useState(null);function C(a){m(null),f&&f(a)}const h=t.useCallback(a=>{m(a.target),a.preventDefault()},[]);t.useImperativeHandle(e,()=>({show:h}),[h]);function M(a){let g=a.target;for(;!g.dataset.menuIgnore;)m(g),g=g.parentNode}const b=t.useRef(0),l=t.useRef(i);return t.useEffect(()=>{l.current!==i&&(b.current+=1,l.current=i)},[i]),n.jsxs(n.Fragment,{children:[n.jsx("span",{onClick:M,"data-menu-ignore":"true",children:w}),i?n.jsx(E.Portal,{children:n.jsx(R,{css:x,at:c,parent:i,options:s,onClick:C},b.current)}):null]})}),G=t.forwardRef(function(u,e){const{options:s,at:c="bottom",resolver:x=null,dataKey:w="contextId",filter:f=null,css:i="",children:m,onClick:C}=u,h=t.useRef(null),M=t.useCallback((b,l)=>{h.current.show(b,l)},[]);return t.useImperativeHandle(e,()=>({show:M}),[M]),n.jsxs(n.Fragment,{children:[m?n.jsx("span",{onContextMenu:M,"data-menu-ignore":"true",children:m}):null,n.jsx(A,{css:i,at:c,options:s,resolver:x,dataKey:w,filter:f,ref:h,onClick:C})]})});exports.ActionMenu=A;exports.ContextMenu=G;exports.DropDownMenu=B;exports.Menu=R;exports.MenuBar=K;exports.registerMenuItem=Q;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react/jsx-runtime"),t=require("react"),E=require("@svar-ui/lib-dom"),L=require("@svar-ui/react-core");function Z(c,u){return c.map(e=>{const l=u(e);return e.data&&e.data.length&&(l.data=Z(e.data,u)),l})}function q(c,u){const e=[];return c.forEach(l=>{if(l.data){const i=q(l.data,u);i.length&&e.push({...l,data:i})}else u(l)&&e.push(l)}),e}function H(c){return Z(c,u=>{const e={...u,id:u.id||E.uid()};return e.type&&(e.comp=e.type),e})}const F={};function Q(c){return F[c]||c}function X(c,u){F[c]=u}function B({onClick:c,onShow:u,option:e}){const l=t.useRef(null),i=t.useCallback(()=>{u(e.data?e.id:!1,l.current)},[u,e]),C=t.useCallback(a=>{if(e.data){a.stopPropagation(),u(e.id,l.current);return}c(a)},[c,u,e]),x=t.useMemo(()=>e&&e.comp?Q(e.comp):null,[e]);return n.jsxs("div",{ref:l,className:`wx-cDCz9rZQ wx-option ${e.css||""} ${e.disabled?"wx-disabled":""}`,"data-id":E.setID(e.id),onMouseEnter:i,onClick:C,children:[e.icon?n.jsx("i",{className:`wx-cDCz9rZQ wx-icon ${e.icon}`}):null,e.comp?x?n.jsx(x,{item:e,option:e}):null:n.jsxs("span",{className:"wx-cDCz9rZQ wx-value",children:[" ",e.text," "]}),e.subtext?n.jsx("span",{className:"wx-cDCz9rZQ wx-subtext",children:e.subtext}):null,e.data?n.jsx("i",{className:"wx-cDCz9rZQ wx-sub-icon wxi-angle-right"}):null]})}function y({options:c,left:u=0,top:e=0,at:l="bottom",parent:i=null,mount:C=null,context:x=null,css:a="",onClick:h,onCancel:d}){const[m,M]=t.useState(-1e4),[b,w]=t.useState(-1e4),[r,s]=t.useState(20),[g,N]=t.useState(),v=t.useRef(null),[D,R]=t.useState(!1),[O,$]=t.useState(null),S=t.useCallback(()=>{const o=E.calculatePosition(v.current,i,l,u,e);o&&(M(o.x),w(o.y),s(o.z),N(o.width))},[i,l,u,e]);t.useEffect(()=>{C&&C(S)},[]);const I=t.useCallback(()=>{R(!1)},[]),f=t.useCallback((o,k)=>{R(o),$(k)},[]),P=t.useMemo(()=>H(c),[c]);t.useEffect(()=>{S()},[i,S]);const j=t.useRef(h),p=t.useRef(d);return t.useEffect(()=>void(j.current=h),[h]),t.useEffect(()=>void(p.current=d),[d]),t.useEffect(()=>{if(!v.current)return;function o(k){p.current?p.current(k):j.current&&j.current({action:null,option:null})}return E.clickOutside(v.current,{callback:o,modal:!0}).destroy},[]),n.jsx("div",{ref:v,"data-wx-menu":"true",className:`wx-XMmAGqVx wx-menu ${a}`,style:{position:"absolute",top:b+"px",left:m+"px",width:g,zIndex:r},onMouseLeave:I,children:P.map(o=>n.jsxs(t.Fragment,{children:[o.comp==="separator"?n.jsx("div",{className:"wx-XMmAGqVx wx-separator"}):n.jsx(B,{option:o,onShow:f,onClick:k=>{if(!o.data&&!k.defaultPrevented){const A={context:x,action:o,option:o,event:k};o.handler&&o.handler(A),h&&h(A),k.stopPropagation()}}}),o.data&&D===o.id?n.jsx(y,{css:a,options:o.data,at:"right-overlap",parent:O,context:x,onClick:h,onCancel:d}):null]},o.id))})}const z=t.forwardRef(function(u,e){const{options:l,at:i="bottom",resolver:C=null,dataKey:x="contextId",filter:a=null,css:h="",children:d,onClick:m}=u,[M,b]=t.useState(null),[w,r]=t.useState(null),[s,g]=t.useState(0),[N,v]=t.useState(0),D=t.useRef(null),R=t.useMemo(()=>`data-${x.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,[x]),O=t.useMemo(()=>M!==null&&a?q(l,f=>a(f,M)):l,[M,a,l]);function $(f){r(null),m&&m(f)}function S(f){if(D.current===f){D.current=null;return}r(null),m&&m({action:null,option:null})}const I=t.useCallback((f,P)=>{if(!f){r(null);return}if(f.defaultPrevented)return;const j=f.target;if(j&&j.dataset&&j.dataset.menuIgnore)return;if(w&&w===j){r(null),f.preventDefault();return}g(f.clientX+1),v(f.clientY+1);let p=typeof P<"u"?P:E.locateID(j,R);C&&(p=C(p,f),!p)||(b(p),r(j),D.current=f.nativeEvent||f,f.preventDefault())},[w,R,C]);return t.useImperativeHandle(e,()=>({show:I}),[I]),n.jsxs(n.Fragment,{children:[d?n.jsx("span",{onClick:I,"data-menu-ignore":"true",children:typeof d=="function"?d():d}):null,w?n.jsx(L.Portal,{children:n.jsx(y,{css:h,at:i,top:N,left:s,parent:w,context:M,onClick:$,onCancel:S,options:O},w)}):null]})});function G(c){const{css:u="",menuCss:e="",options:l,onClick:i}=c,C=t.useMemo(()=>H(l),[l]),[x,a]=t.useState(!1),[h,d]=t.useState([]),m=t.useRef(null);function M(r){a(null),i&&i(r)}function b(r,s,g){s.data&&s.data.length?x&&g?a(null):(d(s.data),a(s.id),m.current.show(r,s)):(m.current.show(null),g?(i&&i({action:s,option:s}),a(null)):a(-1))}function w(r,s){x&&b(r,s)}return n.jsxs(n.Fragment,{children:[n.jsx("div",{className:`wx-UfhPCLL4 wx-menubar ${u}`,children:C.map(r=>n.jsx("button",{className:`wx-UfhPCLL4 wx-option ${x===r.id?"wx-active":""} ${r.disabled?"wx-disabled":""}`,onMouseEnter:s=>w(s,r),onClick:s=>b(s,r,!0),children:r.text},r.id))}),n.jsx(z,{css:e,onClick:M,options:h,ref:m})]})}const K=t.forwardRef(function(u,e){const{options:l,at:i="bottom",css:C="",children:x,onClick:a}=u,[h,d]=t.useState(null),m=t.useRef(null);function M(s){d(null),a&&a(s)}function b(s){if(m.current===s){m.current=null;return}d(null),a&&a({action:null,option:null})}const w=t.useCallback(s=>{d(s.target),m.current=s.nativeEvent||s,s.preventDefault()},[]);t.useImperativeHandle(e,()=>({show:w}),[w]);function r(s){let g=s.target;for(;!g.dataset.menuIgnore;)d(g),g=g.parentNode}return n.jsxs(n.Fragment,{children:[n.jsx("span",{onClick:r,"data-menu-ignore":"true",children:x}),h?n.jsx(L.Portal,{children:n.jsx(y,{css:C,at:i,parent:h,options:l,onClick:M,onCancel:b})}):null]})}),T=t.forwardRef(function(u,e){const{options:l,at:i="bottom",resolver:C=null,dataKey:x="contextId",filter:a=null,css:h="",children:d,onClick:m}=u,M=t.useRef(null),b=t.useCallback((w,r)=>{M.current.show(w,r)},[]);return t.useImperativeHandle(e,()=>({show:b}),[b]),n.jsxs(n.Fragment,{children:[d?n.jsx("span",{onContextMenu:b,"data-menu-ignore":"true",children:d}):null,n.jsx(z,{css:h,at:i,options:l,resolver:C,dataKey:x,filter:a,ref:M,onClick:m})]})});exports.ActionMenu=z;exports.ContextMenu=T;exports.DropDownMenu=K;exports.Menu=y;exports.MenuBar=G;exports.registerMenuItem=X;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/helpers/index.js","../src/components/MenuOption.jsx","../src/components/Menu.jsx","../src/components/ActionMenu.jsx","../src/components/MenuBar.jsx","../src/components/DropDownMenu.jsx","../src/components/ContextMenu.jsx"],"sourcesContent":["export function walkData(data, cb) {\n data.forEach((a) => {\n cb(a);\n if (a.data && a.data.length) walkData(a.data, cb);\n });\n}\n\nexport function mapData(data, cb) {\n return data.map((a) => {\n const out = cb(a);\n if (a.data && a.data.length) out.data = mapData(a.data, cb);\n return out;\n });\n}\n\nexport function filterMenu(data, cb) {\n const out = [];\n data.forEach((a) => {\n if (a.data) {\n const sub = filterMenu(a.data, cb);\n if (sub.length) out.push({ ...a, data: sub });\n } else {\n if (cb(a)) out.push(a);\n }\n });\n\n return out;\n}\n\nlet uid = 1;\nexport function prepareMenuData(data) {\n return mapData(data, (a) => {\n // [deprecated] option.type to be deprecated in 3.0\n const opt = { ...a, id: a.id || uid++ };\n if (opt.type) opt.comp = opt.type;\n return opt;\n });\n}\n\nconst handlers = {};\nexport function getItemHandler(type) {\n return handlers[type] || type;\n}\nexport function registerMenuItem(type, handler) {\n handlers[type] = handler;\n}\n","import { useMemo, useRef, useCallback } from 'react';\nimport { getItemHandler } from '../helpers';\nimport './MenuOption.css';\n\nfunction MenuOption({ onClick, onShow, option }) {\n const element = useRef(null);\n\n const onHover = useCallback(() => {\n onShow(option.data ? option.id : false, element.current);\n }, [onShow, option]);\n\n const SubComponent = useMemo(() => {\n return option && option.comp ? getItemHandler(option.comp) : null;\n }, [option]);\n\n return (\n <div\n ref={element}\n className={`wx-cDCz9rZQ wx-option ${option.css || ''} ${option.disabled ? 'wx-disabled' : ''}`}\n data-id={option.id}\n onMouseEnter={onHover}\n onClick={onClick}\n >\n {option.icon ? (\n <i className={`wx-cDCz9rZQ wx-icon ${option.icon}`}></i>\n ) : null}\n {option.comp ? (\n SubComponent ? (\n <SubComponent item={option} option={option} />\n ) : null\n ) : (\n <span className=\"wx-cDCz9rZQ wx-value\"> {option.text} </span>\n )}\n {option.subtext ? (\n <span className=\"wx-cDCz9rZQ wx-subtext\">{option.subtext}</span>\n ) : null}\n {option.data ? (\n <i className=\"wx-cDCz9rZQ wx-sub-icon wxi-angle-right\"></i>\n ) : null}\n </div>\n );\n}\n\nexport default MenuOption;\n","import {\n Fragment,\n useState,\n useEffect,\n useMemo,\n useRef,\n useCallback,\n} from 'react';\nimport { clickOutside, calculatePosition } from '@svar-ui/lib-dom';\nimport MenuOption from './MenuOption.jsx';\nimport { prepareMenuData } from '../helpers';\nimport './Menu.css';\n\nfunction Menu({\n options,\n left = 0,\n top = 0,\n at = 'bottom',\n parent = null,\n mount = null,\n context = null,\n css = '',\n onClick,\n}) {\n const [x, setX] = useState(-10000);\n const [y, setY] = useState(-10000);\n const [z, setZ] = useState(20);\n const [width, setWidth] = useState();\n\n const selfRef = useRef(null);\n const [showSub, setShowSub] = useState(false);\n const [activeOption, setActiveOption] = useState(null);\n\n const updatePosition = useCallback(() => {\n const result = calculatePosition(selfRef.current, parent, at, left, top);\n if (result) {\n setX(result.x);\n setY(result.y);\n setZ(result.z);\n setWidth(result.width);\n }\n }, [parent, at, left, top]);\n\n useEffect(() => {\n if (mount) mount(updatePosition);\n }, []);\n\n const onLeave = useCallback(() => {\n setShowSub(false);\n }, []);\n\n const cancel = useCallback(() => {\n // [deprecated] action will be deprecated in 3.0\n onClick && onClick({ action: null, option: null });\n }, [onClick]);\n\n const onShow = useCallback((id, el) => {\n setShowSub(id);\n setActiveOption(el);\n }, []);\n\n const finalOptions = useMemo(() => prepareMenuData(options), [options]);\n\n useEffect(() => {\n updatePosition();\n }, [parent, updatePosition]);\n\n useEffect(() => {\n if (!selfRef.current) return;\n return clickOutside(selfRef.current, { callback: cancel, modal: true })\n .destroy;\n }, [cancel]);\n\n return (\n <div\n ref={selfRef}\n data-wx-menu=\"true\"\n className={`wx-XMmAGqVx wx-menu ${css}`}\n style={{\n position: 'absolute',\n top: y + 'px',\n left: x + 'px',\n width: width,\n zIndex: z,\n }}\n onMouseLeave={onLeave}\n >\n {finalOptions.map((option) => (\n <Fragment key={option.id}>\n {option.comp === 'separator' ? (\n <div className=\"wx-XMmAGqVx wx-separator\"></div>\n ) : (\n <MenuOption\n option={option}\n onShow={onShow}\n onClick={(ev) => {\n if (!option.data && !ev.defaultPrevented) {\n // [deprecated] action will be deprecated in 3.0\n const pack = { context, action: option, option, event: ev };\n if (option.handler) option.handler(pack);\n onClick && onClick(pack);\n ev.stopPropagation();\n }\n }}\n />\n )}\n {option.data && showSub === option.id ? (\n <Menu\n css={css}\n options={option.data}\n at=\"right-overlap\"\n parent={activeOption}\n context={context}\n onClick={onClick}\n />\n ) : null}\n </Fragment>\n ))}\n </div>\n );\n}\n\nexport default Menu;\n","import {\n forwardRef,\n useCallback,\n useImperativeHandle,\n useMemo,\n useState,\n} from 'react';\nimport { Portal } from '@svar-ui/react-core';\nimport { id } from '@svar-ui/lib-dom';\nimport Menu from './Menu.jsx';\nimport { filterMenu } from '../helpers';\n\nconst ActionMenu = forwardRef(function ActionMenu(props, ref) {\n const {\n options,\n at = 'bottom',\n resolver = null,\n dataKey = 'contextId',\n filter = null,\n css = '',\n children,\n onClick,\n } = props;\n\n const [item, setItem] = useState(null);\n const [parent, setParent] = useState(null);\n const [left, setLeft] = useState(0);\n const [top, setTop] = useState(0);\n\n const filteredOptions = useMemo(() => {\n if (item !== null && filter) {\n return filterMenu(options, (v) => filter(v, item));\n }\n return options;\n }, [item, filter, options]);\n\n const handleClick = useCallback(\n (ev) => {\n setParent(null);\n if (onClick) onClick(ev);\n },\n [onClick],\n );\n\n const getDataAttr = useCallback((node, name) => {\n let v = null;\n while (node && node.dataset && !v) {\n v = node.dataset[name];\n node = node.parentNode;\n }\n return v ? id(v) : null;\n }, []);\n\n const show = useCallback(\n (ev, obj) => {\n if (!ev) {\n setParent(null);\n return;\n }\n\n if (ev.defaultPrevented) return;\n\n const target = ev.target;\n if (target && target.dataset && target.dataset.menuIgnore) return;\n\n setLeft(ev.clientX + 1);\n setTop(ev.clientY + 1);\n\n let nextItem =\n typeof obj !== 'undefined' ? obj : getDataAttr(target, dataKey);\n if (resolver) {\n nextItem = resolver(nextItem, ev);\n if (!nextItem) return;\n }\n\n setItem(nextItem);\n setParent(target);\n\n ev.preventDefault();\n },\n [dataKey, getDataAttr, resolver],\n );\n\n useImperativeHandle(ref, () => ({ show }), [show]);\n\n return (\n <>\n {children ? (\n <span onClick={show} data-menu-ignore=\"true\">\n {typeof children === 'function' ? children() : children}\n </span>\n ) : null}\n\n {parent ? (\n <Portal>\n <Menu\n key={parent}\n css={css}\n at={at}\n top={top}\n left={left}\n parent={parent}\n context={item}\n onClick={handleClick}\n options={filteredOptions}\n />\n </Portal>\n ) : null}\n </>\n );\n});\n\nexport default ActionMenu;\n","import { useMemo, useState, useRef } from 'react';\nimport ActionMenu from './ActionMenu.jsx';\nimport { prepareMenuData } from '../helpers';\nimport './MenuBar.css';\n\nfunction MenuBar(props) {\n const { css = '', menuCss = '', options, onClick } = props;\n\n const finalOptions = useMemo(() => prepareMenuData(options), [options]);\n\n const [active, setActive] = useState(false);\n const [menuOptions, setMenuOptions] = useState([]);\n\n const menu = useRef(null);\n\n function doClick(ev) {\n setActive(null);\n onClick && onClick(ev);\n }\n\n function setMenu(ev, option, trigger) {\n // if the option has a submenu, show it and enable hover mode\n if (option.data && option.data.length) {\n if (active && trigger) {\n // second click on option with submenu disables hover mode\n setActive(null);\n } else {\n setMenuOptions(option.data);\n setActive(option.id);\n menu.current.show(ev, option);\n }\n } else {\n // hide the submenu\n menu.current.show(null);\n // if it was the click action, dispatch it and end hover mode\n if (trigger) {\n // [deprecated] action will be deprecated in 3.0\n onClick && onClick({ action: option, option });\n setActive(null);\n } else {\n // do not remove active flag, to preserve the hover mode\n setActive(-1);\n }\n }\n }\n\n function onHover(ev, option) {\n if (active) setMenu(ev, option);\n }\n\n return (\n <>\n <div className={`wx-UfhPCLL4 wx-menubar ${css}`}>\n {finalOptions.map((option) => (\n <button\n key={option.id}\n className={`wx-UfhPCLL4 wx-option ${active === option.id ? 'wx-active' : ''} ${option.disabled ? 'wx-disabled' : ''}`}\n onMouseEnter={(ev) => onHover(ev, option)}\n onClick={(ev) => setMenu(ev, option, true)}\n >\n {option.text}\n </button>\n ))}\n </div>\n\n <ActionMenu\n css={menuCss}\n onClick={doClick}\n options={menuOptions}\n ref={menu}\n />\n </>\n );\n}\n\nexport default MenuBar;\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\nimport { Portal } from '@svar-ui/react-core';\nimport Menu from './Menu.jsx';\n\nconst DropDownMenu = forwardRef(function DropDownMenu(props, ref) {\n const { options, at = 'bottom', css = '', children, onClick } = props;\n\n const [parent, setParent] = useState(null);\n\n function handleClick(ev) {\n setParent(null);\n onClick && onClick(ev);\n }\n\n const show = useCallback((ev) => {\n setParent(ev.target);\n ev.preventDefault();\n }, []);\n\n useImperativeHandle(ref, () => ({ show }), [show]);\n\n function showAt(ev) {\n let target = ev.target;\n while (!target.dataset.menuIgnore) {\n setParent(target);\n target = target.parentNode;\n }\n }\n\n const parentKeyRef = useRef(0);\n const lastParentRef = useRef(parent);\n useEffect(() => {\n if (lastParentRef.current !== parent) {\n parentKeyRef.current += 1;\n lastParentRef.current = parent;\n }\n }, [parent]);\n\n return (\n <>\n <span onClick={showAt} data-menu-ignore=\"true\">\n {children}\n </span>\n {parent ? (\n <Portal>\n <Menu\n key={parentKeyRef.current}\n css={css}\n at={at}\n parent={parent}\n options={options}\n onClick={handleClick}\n />\n </Portal>\n ) : null}\n </>\n );\n});\n\nexport default DropDownMenu;\n","import { forwardRef, useRef, useCallback, useImperativeHandle } from 'react';\nimport ActionMenu from './ActionMenu.jsx';\n\nconst ContextMenu = forwardRef(function ContextMenu(props, ref) {\n const {\n options,\n at = 'bottom',\n resolver = null,\n dataKey = 'contextId',\n filter = null,\n css = '',\n children,\n onClick,\n } = props;\n\n const menu = useRef(null);\n\n const show = useCallback((ev, obj) => {\n menu.current.show(ev, obj);\n }, []);\n\n useImperativeHandle(\n ref,\n () => ({\n show,\n }),\n [show],\n );\n\n return (\n <>\n {children ? (\n <span onContextMenu={show} data-menu-ignore=\"true\">\n {children}\n </span>\n ) : null}\n\n <ActionMenu\n css={css}\n at={at}\n options={options}\n resolver={resolver}\n dataKey={dataKey}\n filter={filter}\n ref={menu}\n onClick={onClick}\n />\n </>\n );\n});\n\nexport default ContextMenu;\n"],"names":["mapData","data","cb","a","out","filterMenu","sub","uid","prepareMenuData","opt","handlers","getItemHandler","type","registerMenuItem","handler","MenuOption","onClick","onShow","option","element","useRef","onHover","useCallback","SubComponent","useMemo","jsxs","jsx","Menu","options","left","top","at","parent","mount","context","css","x","setX","useState","y","setY","z","setZ","width","setWidth","selfRef","showSub","setShowSub","activeOption","setActiveOption","updatePosition","result","calculatePosition","useEffect","onLeave","cancel","id","el","finalOptions","clickOutside","Fragment","ev","pack","ActionMenu","forwardRef","props","ref","resolver","dataKey","filter","children","item","setItem","setParent","setLeft","setTop","filteredOptions","v","handleClick","getDataAttr","node","name","show","obj","target","nextItem","useImperativeHandle","Portal","MenuBar","menuCss","active","setActive","menuOptions","setMenuOptions","menu","doClick","setMenu","trigger","DropDownMenu","showAt","parentKeyRef","lastParentRef","ContextMenu"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/helpers/index.js","../src/components/MenuOption.jsx","../src/components/Menu.jsx","../src/components/ActionMenu.jsx","../src/components/MenuBar.jsx","../src/components/DropDownMenu.jsx","../src/components/ContextMenu.jsx"],"sourcesContent":["import { uid } from '@svar-ui/lib-dom';\n\nexport function walkData(data, cb) {\n data.forEach((a) => {\n cb(a);\n if (a.data && a.data.length) walkData(a.data, cb);\n });\n}\n\nexport function mapData(data, cb) {\n return data.map((a) => {\n const out = cb(a);\n if (a.data && a.data.length) out.data = mapData(a.data, cb);\n return out;\n });\n}\n\nexport function filterMenu(data, cb) {\n const out = [];\n data.forEach((a) => {\n if (a.data) {\n const sub = filterMenu(a.data, cb);\n if (sub.length) out.push({ ...a, data: sub });\n } else {\n if (cb(a)) out.push(a);\n }\n });\n\n return out;\n}\n\nexport function prepareMenuData(data) {\n return mapData(data, (a) => {\n // [deprecated] option.type to be deprecated in 3.0\n const opt = { ...a, id: a.id || uid() };\n if (opt.type) opt.comp = opt.type;\n return opt;\n });\n}\n\nconst handlers = {};\nexport function getItemHandler(type) {\n return handlers[type] || type;\n}\nexport function registerMenuItem(type, handler) {\n handlers[type] = handler;\n}\n","import { useMemo, useRef, useCallback } from 'react';\nimport { setID } from '@svar-ui/lib-dom';\nimport { getItemHandler } from '../helpers';\nimport './MenuOption.css';\n\nfunction MenuOption({ onClick: onClickProp, onShow, option }) {\n const element = useRef(null);\n\n const onHover = useCallback(() => {\n onShow(option.data ? option.id : false, element.current);\n }, [onShow, option]);\n\n const onClick = useCallback((ev) => {\n if (option.data) {\n ev.stopPropagation();\n onShow(option.id, element.current);\n return;\n }\n onClickProp(ev);\n }, [onClickProp, onShow, option]);\n\n const SubComponent = useMemo(() => {\n return option && option.comp ? getItemHandler(option.comp) : null;\n }, [option]);\n\n return (\n <div\n ref={element}\n className={`wx-cDCz9rZQ wx-option ${option.css || ''} ${option.disabled ? 'wx-disabled' : ''}`}\n data-id={setID(option.id)}\n onMouseEnter={onHover}\n onClick={onClick}\n >\n {option.icon ? (\n <i className={`wx-cDCz9rZQ wx-icon ${option.icon}`}></i>\n ) : null}\n {option.comp ? (\n SubComponent ? (\n <SubComponent item={option} option={option} />\n ) : null\n ) : (\n <span className=\"wx-cDCz9rZQ wx-value\"> {option.text} </span>\n )}\n {option.subtext ? (\n <span className=\"wx-cDCz9rZQ wx-subtext\">{option.subtext}</span>\n ) : null}\n {option.data ? (\n <i className=\"wx-cDCz9rZQ wx-sub-icon wxi-angle-right\"></i>\n ) : null}\n </div>\n );\n}\n\nexport default MenuOption;\n","import {\n Fragment,\n useState,\n useEffect,\n useMemo,\n useRef,\n useCallback,\n} from 'react';\nimport { clickOutside, calculatePosition } from '@svar-ui/lib-dom';\nimport MenuOption from './MenuOption.jsx';\nimport { prepareMenuData } from '../helpers';\nimport './Menu.css';\n\nfunction Menu({\n options,\n left = 0,\n top = 0,\n at = 'bottom',\n parent = null,\n mount = null,\n context = null,\n css = '',\n onClick,\n onCancel,\n}) {\n const [x, setX] = useState(-10000);\n const [y, setY] = useState(-10000);\n const [z, setZ] = useState(20);\n const [width, setWidth] = useState();\n\n const selfRef = useRef(null);\n const [showSub, setShowSub] = useState(false);\n const [activeOption, setActiveOption] = useState(null);\n\n const updatePosition = useCallback(() => {\n const result = calculatePosition(selfRef.current, parent, at, left, top);\n if (result) {\n setX(result.x);\n setY(result.y);\n setZ(result.z);\n setWidth(result.width);\n }\n }, [parent, at, left, top]);\n\n useEffect(() => {\n if (mount) mount(updatePosition);\n }, []);\n\n const onLeave = useCallback(() => {\n setShowSub(false);\n }, []);\n\n const onShow = useCallback((id, el) => {\n setShowSub(id);\n setActiveOption(el);\n }, []);\n\n const finalOptions = useMemo(() => prepareMenuData(options), [options]);\n\n useEffect(() => {\n updatePosition();\n }, [parent, updatePosition]);\n\n // Callbacks in ref to prevent clickOutside from re-registering in its useEffect\n const onClickRef = useRef(onClick);\n const onCancelRef = useRef(onCancel);\n useEffect(() => void (onClickRef.current = onClick), [onClick]);\n useEffect(() => void (onCancelRef.current = onCancel), [onCancel]);\n\n // Register click outside handler\n useEffect(() => {\n if (!selfRef.current) return;\n function callback(ev) {\n // Call onCancel if provided, otherwise call onClick\n if (onCancelRef.current) {\n onCancelRef.current(ev);\n } else if (onClickRef.current) {\n // [deprecated] action will be deprecated in 3.0\n onClickRef.current({ action: null, option: null });\n }\n }\n return clickOutside(selfRef.current, { callback, modal: true }).destroy;\n }, []);\n\n return (\n <div\n ref={selfRef}\n data-wx-menu=\"true\"\n className={`wx-XMmAGqVx wx-menu ${css}`}\n style={{\n position: 'absolute',\n top: y + 'px',\n left: x + 'px',\n width: width,\n zIndex: z,\n }}\n onMouseLeave={onLeave}\n >\n {finalOptions.map((option) => (\n <Fragment key={option.id}>\n {option.comp === 'separator' ? (\n <div className=\"wx-XMmAGqVx wx-separator\"></div>\n ) : (\n <MenuOption\n option={option}\n onShow={onShow}\n onClick={(ev) => {\n if (!option.data && !ev.defaultPrevented) {\n // [deprecated] action will be deprecated in 3.0\n const pack = { context, action: option, option, event: ev };\n if (option.handler) option.handler(pack);\n onClick && onClick(pack);\n ev.stopPropagation();\n }\n }}\n />\n )}\n {option.data && showSub === option.id ? (\n <Menu\n css={css}\n options={option.data}\n at=\"right-overlap\"\n parent={activeOption}\n context={context}\n onClick={onClick}\n onCancel={onCancel}\n />\n ) : null}\n </Fragment>\n ))}\n </div>\n );\n}\n\nexport default Menu;\n","import {\n forwardRef,\n useCallback,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { Portal } from '@svar-ui/react-core';\nimport { locateID } from '@svar-ui/lib-dom';\nimport Menu from './Menu.jsx';\nimport { filterMenu } from '../helpers';\n\nconst ActionMenu = forwardRef(function ActionMenu(props, ref) {\n const {\n options,\n at = 'bottom',\n resolver = null,\n dataKey = 'contextId',\n filter = null,\n css = '',\n children,\n onClick,\n } = props;\n\n const [item, setItem] = useState(null);\n const [parent, setParent] = useState(null);\n const [left, setLeft] = useState(0);\n const [top, setTop] = useState(0);\n\n // Ref to the event that triggered the menu, used to\n // prevent the menu from closing immediately after opening\n const showEventRef = useRef(null);\n\n const attrName = useMemo(\n () =>\n `data-${dataKey.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase()}`,\n [dataKey],\n );\n\n const filteredOptions = useMemo(() => {\n if (item !== null && filter) {\n return filterMenu(options, (v) => filter(v, item));\n }\n return options;\n }, [item, filter, options]);\n\n function handleClick(ev) {\n setParent(null);\n onClick && onClick(ev);\n }\n\n function handleCancel(ev) {\n // Prevent closing from the event that opened the menu\n if (showEventRef.current === ev) {\n showEventRef.current = null;\n return;\n }\n setParent(null);\n // [deprecated] action will be deprecated in 3.0\n onClick && onClick({ action: null, option: null });\n }\n\n const show = useCallback(\n (ev, obj) => {\n if (!ev) {\n setParent(null);\n return;\n }\n\n if (ev.defaultPrevented) return;\n\n const target = ev.target;\n if (target && target.dataset && target.dataset.menuIgnore) return;\n\n // Close if the same target is clicked again\n if (parent && parent === target) {\n setParent(null);\n // Prevent browser context menu\n ev.preventDefault();\n return;\n }\n\n setLeft(ev.clientX + 1);\n setTop(ev.clientY + 1);\n\n let nextItem =\n typeof obj !== 'undefined' ? obj : locateID(target, attrName);\n if (resolver) {\n nextItem = resolver(nextItem, ev);\n if (!nextItem) return;\n }\n\n setItem(nextItem);\n setParent(target);\n\n showEventRef.current = ev.nativeEvent || ev;\n ev.preventDefault();\n },\n [parent, attrName, resolver],\n );\n\n useImperativeHandle(ref, () => ({ show }), [show]);\n\n return (\n <>\n {children ? (\n <span onClick={show} data-menu-ignore=\"true\">\n {typeof children === 'function' ? children() : children}\n </span>\n ) : null}\n\n {parent ? (\n <Portal>\n <Menu\n key={parent}\n css={css}\n at={at}\n top={top}\n left={left}\n parent={parent}\n context={item}\n onClick={handleClick}\n onCancel={handleCancel}\n options={filteredOptions}\n />\n </Portal>\n ) : null}\n </>\n );\n});\n\nexport default ActionMenu;\n","import { useMemo, useState, useRef } from 'react';\nimport ActionMenu from './ActionMenu.jsx';\nimport { prepareMenuData } from '../helpers';\nimport './MenuBar.css';\n\nfunction MenuBar(props) {\n const { css = '', menuCss = '', options, onClick } = props;\n\n const finalOptions = useMemo(() => prepareMenuData(options), [options]);\n\n const [active, setActive] = useState(false);\n const [menuOptions, setMenuOptions] = useState([]);\n\n const menu = useRef(null);\n\n function doClick(ev) {\n setActive(null);\n onClick && onClick(ev);\n }\n\n function setMenu(ev, option, trigger) {\n // if the option has a submenu, show it and enable hover mode\n if (option.data && option.data.length) {\n if (active && trigger) {\n // second click on option with submenu disables hover mode\n setActive(null);\n } else {\n setMenuOptions(option.data);\n setActive(option.id);\n menu.current.show(ev, option);\n }\n } else {\n // hide the submenu\n menu.current.show(null);\n // if it was the click action, dispatch it and end hover mode\n if (trigger) {\n // [deprecated] action will be deprecated in 3.0\n onClick && onClick({ action: option, option });\n setActive(null);\n } else {\n // do not remove active flag, to preserve the hover mode\n setActive(-1);\n }\n }\n }\n\n function onHover(ev, option) {\n if (active) setMenu(ev, option);\n }\n\n return (\n <>\n <div className={`wx-UfhPCLL4 wx-menubar ${css}`}>\n {finalOptions.map((option) => (\n <button\n key={option.id}\n className={`wx-UfhPCLL4 wx-option ${active === option.id ? 'wx-active' : ''} ${option.disabled ? 'wx-disabled' : ''}`}\n onMouseEnter={(ev) => onHover(ev, option)}\n onClick={(ev) => setMenu(ev, option, true)}\n >\n {option.text}\n </button>\n ))}\n </div>\n\n <ActionMenu\n css={menuCss}\n onClick={doClick}\n options={menuOptions}\n ref={menu}\n />\n </>\n );\n}\n\nexport default MenuBar;\n","import {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'react';\nimport { Portal } from '@svar-ui/react-core';\nimport Menu from './Menu.jsx';\n\nconst DropDownMenu = forwardRef(function DropDownMenu(props, ref) {\n const { options, at = 'bottom', css = '', children, onClick } = props;\n\n const [parent, setParent] = useState(null);\n\n // Ref to the event that triggered the menu, used to\n // prevent the menu from closing immediately after opening\n const showEventRef = useRef(null);\n\n function handleClick(ev) {\n setParent(null);\n onClick && onClick(ev);\n }\n\n function handleCancel(ev) {\n // Prevent closing from the event that opened the menu\n if (showEventRef.current === ev) {\n showEventRef.current = null;\n return;\n }\n setParent(null);\n // [deprecated] action will be deprecated in 3.0\n onClick && onClick({ action: null, option: null });\n }\n\n const show = useCallback((ev) => {\n setParent(ev.target);\n showEventRef.current = ev.nativeEvent || ev;\n ev.preventDefault();\n }, []);\n\n useImperativeHandle(ref, () => ({ show }), [show]);\n\n function showAt(ev) {\n let target = ev.target;\n while (!target.dataset.menuIgnore) {\n setParent(target);\n target = target.parentNode;\n }\n }\n\n return (\n <>\n <span onClick={showAt} data-menu-ignore=\"true\">\n {children}\n </span>\n {parent ? (\n <Portal>\n <Menu\n css={css}\n at={at}\n parent={parent}\n options={options}\n onClick={handleClick}\n onCancel={handleCancel}\n />\n </Portal>\n ) : null}\n </>\n );\n});\n\nexport default DropDownMenu;\n","import { forwardRef, useRef, useCallback, useImperativeHandle } from 'react';\nimport ActionMenu from './ActionMenu.jsx';\n\nconst ContextMenu = forwardRef(function ContextMenu(props, ref) {\n const {\n options,\n at = 'bottom',\n resolver = null,\n dataKey = 'contextId',\n filter = null,\n css = '',\n children,\n onClick,\n } = props;\n\n const menu = useRef(null);\n\n const show = useCallback((ev, obj) => {\n menu.current.show(ev, obj);\n }, []);\n\n useImperativeHandle(\n ref,\n () => ({\n show,\n }),\n [show],\n );\n\n return (\n <>\n {children ? (\n <span onContextMenu={show} data-menu-ignore=\"true\">\n {children}\n </span>\n ) : null}\n\n <ActionMenu\n css={css}\n at={at}\n options={options}\n resolver={resolver}\n dataKey={dataKey}\n filter={filter}\n ref={menu}\n onClick={onClick}\n />\n </>\n );\n});\n\nexport default ContextMenu;\n"],"names":["mapData","data","cb","a","out","filterMenu","sub","prepareMenuData","opt","uid","handlers","getItemHandler","type","registerMenuItem","handler","MenuOption","onClickProp","onShow","option","element","useRef","onHover","useCallback","onClick","ev","SubComponent","useMemo","jsxs","setID","jsx","Menu","options","left","top","at","parent","mount","context","css","onCancel","x","setX","useState","y","setY","z","setZ","width","setWidth","selfRef","showSub","setShowSub","activeOption","setActiveOption","updatePosition","result","calculatePosition","useEffect","onLeave","id","el","finalOptions","onClickRef","onCancelRef","callback","clickOutside","Fragment","pack","ActionMenu","forwardRef","props","ref","resolver","dataKey","filter","children","item","setItem","setParent","setLeft","setTop","showEventRef","attrName","filteredOptions","v","handleClick","handleCancel","show","obj","target","nextItem","locateID","useImperativeHandle","Portal","MenuBar","menuCss","active","setActive","menuOptions","setMenuOptions","menu","doClick","setMenu","trigger","DropDownMenu","showAt","ContextMenu"],"mappings":"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"}