@jamsrui/menu 0.0.13 → 0.0.14

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.
Files changed (45) hide show
  1. package/dist/index.d.mts +3 -2
  2. package/dist/index.mjs +1 -1
  3. package/dist/menu-arrow.mjs +1 -1
  4. package/dist/menu-checkbox-item.mjs +1 -1
  5. package/dist/menu-config.mjs +1 -1
  6. package/dist/menu-container.mjs +1 -1
  7. package/dist/menu-content.mjs +1 -1
  8. package/dist/menu-context.mjs +1 -1
  9. package/dist/menu-floating-context.mjs +1 -1
  10. package/dist/menu-group-label.mjs +1 -1
  11. package/dist/menu-group.mjs +1 -1
  12. package/dist/menu-item-indicator-context.mjs +1 -1
  13. package/dist/menu-item-indicator.mjs +1 -1
  14. package/dist/menu-item.mjs +1 -1
  15. package/dist/menu-radio-group-context.mjs +1 -1
  16. package/dist/menu-radio-group.mjs +1 -1
  17. package/dist/menu-radio-item.mjs +1 -1
  18. package/dist/menu-separator.mjs +1 -1
  19. package/dist/menu-submenu-indicator.mjs +1 -1
  20. package/dist/menu-trigger.mjs +1 -1
  21. package/dist/menu.mjs +1 -1
  22. package/dist/styles.mjs +1 -1
  23. package/dist/use-menu.mjs +1 -1
  24. package/package.json +6 -6
  25. package/dist/chunk-3TXNSYIT.mjs +0 -1
  26. package/dist/chunk-5GJHZWBN.mjs +0 -1
  27. package/dist/chunk-73ICREUJ.mjs +0 -1
  28. package/dist/chunk-7IUW47U3.mjs +0 -1
  29. package/dist/chunk-A4ENIW42.mjs +0 -1
  30. package/dist/chunk-AEYH7VXJ.mjs +0 -1
  31. package/dist/chunk-AQWDIQDM.mjs +0 -1
  32. package/dist/chunk-DHAF5YKZ.mjs +0 -1
  33. package/dist/chunk-E5KNVWWQ.mjs +0 -1
  34. package/dist/chunk-FJVOYNHF.mjs +0 -1
  35. package/dist/chunk-IGMCHKXT.mjs +0 -1
  36. package/dist/chunk-IP6JQ5TM.mjs +0 -1
  37. package/dist/chunk-JRUGEZXQ.mjs +0 -1
  38. package/dist/chunk-MCQCEY2U.mjs +0 -1
  39. package/dist/chunk-OJO3ZCS3.mjs +0 -1
  40. package/dist/chunk-TK6HMBAL.mjs +0 -1
  41. package/dist/chunk-V3CQJ2RS.mjs +0 -1
  42. package/dist/chunk-VGN4WMWX.mjs +0 -1
  43. package/dist/chunk-VU45CFXY.mjs +0 -1
  44. package/dist/chunk-WCI2HQ7Q.mjs +0 -1
  45. package/dist/chunk-YQVA5YDV.mjs +0 -1
package/dist/index.d.mts CHANGED
@@ -3,7 +3,7 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
3
3
  import { M as Menu$1, a as MenuItem } from './menu-BpwPA3vD.mjs';
4
4
  import { MenuArrow } from './menu-arrow.mjs';
5
5
  import { MenuCheckboxItem } from './menu-checkbox-item.mjs';
6
- export { MenuContainer } from './menu-container.mjs';
6
+ import { MenuContainer } from './menu-container.mjs';
7
7
  import { MenuContent } from './menu-content.mjs';
8
8
  import { MenuGroup } from './menu-group.mjs';
9
9
  import { MenuGroupLabel } from './menu-group-label.mjs';
@@ -37,6 +37,7 @@ declare const Menu: ((props: Menu$1.Props) => react_jsx_runtime.JSX.Element) & {
37
37
  SubmenuIndicator: (props: SubmenuIndicator.Props) => react.ReactElement<unknown, string | react.JSXElementConstructor<any>>;
38
38
  ItemIndicator: (props: MenuItemIndicator.Props) => react.ReactElement<unknown, string | react.JSXElementConstructor<any>>;
39
39
  Arrow: (props: MenuArrow.Props) => react_jsx_runtime.JSX.Element;
40
+ Container: (props: MenuContainer.Props) => react_jsx_runtime.JSX.Element;
40
41
  };
41
42
  declare namespace Menu {
42
43
  interface Props extends Menu$1.Props {
@@ -59,4 +60,4 @@ declare namespace Menu {
59
60
  }
60
61
  }
61
62
 
62
- export { Menu, MenuCheckboxItem, MenuContent, MenuGroup, MenuGroupLabel, MenuItem, MenuRadioGroup, MenuRadioItem, MenuSeparator, MenuTrigger };
63
+ export { Menu, MenuCheckboxItem, MenuContainer, MenuContent, MenuGroup, MenuGroupLabel, MenuItem, MenuRadioGroup, MenuRadioItem, MenuSeparator, MenuTrigger };
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{a as c,c as m}from"./chunk-FJVOYNHF.mjs";import{a as i}from"./chunk-VU45CFXY.mjs";import"./chunk-AQWDIQDM.mjs";import{a as j}from"./chunk-A4ENIW42.mjs";import"./chunk-AEYH7VXJ.mjs";import"./chunk-JRUGEZXQ.mjs";import"./chunk-TK6HMBAL.mjs";import{a as f}from"./chunk-DHAF5YKZ.mjs";import{a as e}from"./chunk-3TXNSYIT.mjs";import"./chunk-E5KNVWWQ.mjs";import{a as g}from"./chunk-IGMCHKXT.mjs";import{a as h}from"./chunk-WCI2HQ7Q.mjs";import"./chunk-MCQCEY2U.mjs";import"./chunk-VGN4WMWX.mjs";import{a as b}from"./chunk-73ICREUJ.mjs";import"./chunk-V3CQJ2RS.mjs";import{a}from"./chunk-7IUW47U3.mjs";import{a as k,b as l}from"./chunk-OJO3ZCS3.mjs";import{a as d}from"./chunk-YQVA5YDV.mjs";import"./chunk-IP6JQ5TM.mjs";import"./chunk-5GJHZWBN.mjs";export{m as Menu,b as MenuCheckboxItem,k as MenuConfig,c as MenuContainer,d as MenuContent,e as MenuGroup,f as MenuGroupLabel,a as MenuItem,g as MenuRadioGroup,h as MenuRadioItem,i as MenuSeparator,j as MenuTrigger,l as useMenuConfig};
1
+ import{Menu as e}from"./menu.mjs";import{MenuArrow as f}from"./menu-arrow.mjs";import{MenuCheckboxItem as o}from"./menu-checkbox-item.mjs";import{MenuContainer as r,MenuContainerWithContent as x}from"./menu-container.mjs";import{MenuContent as t}from"./menu-content.mjs";import{MenuGroup as n}from"./menu-group.mjs";import{MenuGroupLabel as p}from"./menu-group-label.mjs";import{MenuItem as i}from"./menu-item.mjs";import{MenuItemIndicator as s}from"./menu-item-indicator.mjs";import{MenuRadioGroup as m}from"./menu-radio-group.mjs";import{MenuRadioItem as u}from"./menu-radio-item.mjs";import{MenuSeparator as a}from"./menu-separator.mjs";import{SubmenuIndicator as d}from"./menu-submenu-indicator.mjs";import{MenuTrigger as M}from"./menu-trigger.mjs";import{MenuConfig as O,useMenuConfig as W}from"./menu-config.mjs";const w=Object.assign(e,{Root:e,Group:n,Item:i,CheckboxItem:o,RadioItem:u,RadioGroup:m,Separator:a,Trigger:M,GroupLabel:p,Content:x,ContentRoot:t,SubmenuIndicator:d,ItemIndicator:s,Arrow:f,Container:r});export{w as Menu,o as MenuCheckboxItem,O as MenuConfig,r as MenuContainer,t as MenuContent,n as MenuGroup,p as MenuGroupLabel,i as MenuItem,m as MenuRadioGroup,u as MenuRadioItem,a as MenuSeparator,M as MenuTrigger,W as useMenuConfig};
@@ -1 +1 @@
1
- "use client";import{a}from"./chunk-VGN4WMWX.mjs";import"./chunk-IP6JQ5TM.mjs";export{a as MenuArrow};
1
+ "use client";import{jsx as n}from"react/jsx-runtime";import{FloatingArrow as t}from"@floating-ui/react";import{useMenuContext as e}from"./menu-context.mjs";const s=r=>{const{getArrowProps:o}=e();return n(t,{...o(r)})};export{s as MenuArrow};
@@ -1 +1 @@
1
- "use client";import{a}from"./chunk-73ICREUJ.mjs";import"./chunk-V3CQJ2RS.mjs";import"./chunk-7IUW47U3.mjs";import"./chunk-IP6JQ5TM.mjs";import"./chunk-5GJHZWBN.mjs";export{a as MenuCheckboxItem};
1
+ "use client";import{jsx as o}from"react/jsx-runtime";import{useCallback as l}from"react";import{useControlledState as h}from"@jamsrui/hooks";import{MenuItem as k}from"./menu-item.mjs";import{MenuItemIndicatorContext as p}from"./menu-item-indicator-context.mjs";const f=t=>{const{isChecked:n,onCheckedChange:c,defaultChecked:r,...C}=t,[s=!1,e]=h({defaultProp:r,onChange:c,prop:n}),a=l(()=>{e(d=>!d)},[e]);return o(p,{value:{isChecked:s},children:o(k,{preventCloseOnClick:!0,onClick:a,...C})})};export{f as MenuCheckboxItem};
@@ -1 +1 @@
1
- "use client";import{a,b}from"./chunk-OJO3ZCS3.mjs";export{a as MenuConfig,b as useMenuConfig};
1
+ "use client";import{createConfigContext as e}from"@jamsrui/utils";const[n,r]=e({displayName:"MenuConfigContext"});export{n as MenuConfig,r as useMenuConfig};
@@ -1 +1 @@
1
- "use client";import{a,b}from"./chunk-FJVOYNHF.mjs";import"./chunk-VU45CFXY.mjs";import"./chunk-AQWDIQDM.mjs";import"./chunk-A4ENIW42.mjs";import"./chunk-AEYH7VXJ.mjs";import"./chunk-JRUGEZXQ.mjs";import"./chunk-TK6HMBAL.mjs";import"./chunk-DHAF5YKZ.mjs";import"./chunk-3TXNSYIT.mjs";import"./chunk-E5KNVWWQ.mjs";import"./chunk-IGMCHKXT.mjs";import"./chunk-WCI2HQ7Q.mjs";import"./chunk-MCQCEY2U.mjs";import"./chunk-VGN4WMWX.mjs";import"./chunk-73ICREUJ.mjs";import"./chunk-V3CQJ2RS.mjs";import"./chunk-7IUW47U3.mjs";import"./chunk-OJO3ZCS3.mjs";import"./chunk-YQVA5YDV.mjs";import"./chunk-IP6JQ5TM.mjs";import"./chunk-5GJHZWBN.mjs";export{a as MenuContainer,b as MenuContainerWithContent};
1
+ "use client";import{jsx as e,jsxs as d}from"react/jsx-runtime";import{FloatingFocusManager as u,FloatingList as m,FloatingOverlay as g,FloatingPortal as C}from"@floating-ui/react";import{useRenderElement as F}from"@jamsrui/hooks";import{AnimatePresence as M}from"motion/react";import{MenuContent as P}from".";import{useMenuContext as c}from"./menu-context.mjs";import{MenuFloatingContext as f}from"./menu-floating-context.mjs";const x=n=>{const{getFloatingListProps:t,isOpen:o,getFocusManagerProps:r,getOverlayProps:i,floatingCtx:a,isNested:s,getContainerProps:p}=c(),l=F("div",{props:[p(n)]});return e(f,{value:a,children:e(m,{...t(),children:e(M,{children:o?d(C,{children:[s?null:e(g,{...i()}),e(u,{...r(),children:l})]}):null})})})},I=n=>e(x,{children:e(P,{...n})});export{x as MenuContainer,I as MenuContainerWithContent};
@@ -1 +1 @@
1
- "use client";import{a}from"./chunk-YQVA5YDV.mjs";import"./chunk-IP6JQ5TM.mjs";export{a as MenuContent};
1
+ "use client";import{jsx as p}from"react/jsx-runtime";import{motion as s}from"motion/react";import{useMenuContext as r}from"./menu-context.mjs";const m=t=>{const{children:o,...n}=t,{getContentProps:e,isNested:i}=r();return p(s.div,{...i?{}:{initial:{opacity:0,scale:.8},transition:{type:"spring",stiffness:300,damping:25},animate:{opacity:1,scale:1,x:0,y:0},exit:{opacity:0,scale:.8,transition:{duration:.2}}},...e(n),children:o})};export{m as MenuContent};
@@ -1 +1 @@
1
- "use client";import{a,b}from"./chunk-IP6JQ5TM.mjs";export{a as MenuContext,b as useMenuContext};
1
+ "use client";import{createContext as t,use as n}from"react";const o=t(null),r=()=>{const e=n(o);if(!e)throw new Error("useMenuContext must be used within MenuContext");return e};export{o as MenuContext,r as useMenuContext};
@@ -1 +1 @@
1
- "use client";import{a,b}from"./chunk-5GJHZWBN.mjs";export{a as MenuFloatingContext,b as useMenuFloatingContext};
1
+ "use client";import{createContext as e,use as t}from"react";const n=e({setHasFocusInside:()=>{},activeIndex:null,getItemProps:()=>({})}),s=()=>t(n);export{n as MenuFloatingContext,s as useMenuFloatingContext};
@@ -1 +1 @@
1
- "use client";import{a}from"./chunk-DHAF5YKZ.mjs";import"./chunk-IP6JQ5TM.mjs";export{a as MenuGroupLabel};
1
+ "use client";import{useRenderElement as o}from"@jamsrui/hooks";import{useMenuContext as t}from"./menu-context.mjs";const u=e=>{const{getMenuGroupLabelProps:r}=t();return o("div",{props:[r(e)]})};export{u as MenuGroupLabel};
@@ -1 +1 @@
1
- "use client";import{a}from"./chunk-3TXNSYIT.mjs";import"./chunk-IP6JQ5TM.mjs";export{a as MenuGroup};
1
+ "use client";import{useRenderElement as o}from"@jamsrui/hooks";import{useMenuContext as t}from"./menu-context.mjs";const u=e=>{const{getMenuGroupProps:r}=t();return o("div",{props:[r(e)]})};export{u as MenuGroup};
@@ -1 +1 @@
1
- import{a,b}from"./chunk-V3CQJ2RS.mjs";export{a as MenuItemIndicatorContext,b as useMenuItemIndicatorContext};
1
+ "use client";import{createContext as e,use as t}from"react";const o=e({isChecked:!1}),r=()=>t(o);export{o as MenuItemIndicatorContext,r as useMenuItemIndicatorContext};
@@ -1 +1 @@
1
- "use client";import{a}from"./chunk-E5KNVWWQ.mjs";import"./chunk-V3CQJ2RS.mjs";import"./chunk-IP6JQ5TM.mjs";export{a as MenuItemIndicator};
1
+ "use client";import{jsx as i}from"react/jsx-runtime";import{useRenderElement as s}from"@jamsrui/hooks";import{CheckIcon as m}from"@jamsrui/icons";import{useMenuContext as p}from"./menu-context.mjs";import{useMenuItemIndicatorContext as c}from"./menu-item-indicator-context.mjs";const f=e=>{const{children:t=i(m,{className:"size-full"}),...r}=e,{getMenuItemIndicatorProps:n}=p(),{isChecked:o}=c();return s("span",{props:[n(r),{children:o?t:null}]})};export{f as MenuItemIndicator};
@@ -1 +1 @@
1
- "use client";import{a}from"./chunk-7IUW47U3.mjs";import"./chunk-IP6JQ5TM.mjs";import"./chunk-5GJHZWBN.mjs";export{a as MenuItem};
1
+ "use client";import{useFloatingTree as p,useListItem as f}from"@floating-ui/react";import{useMergeRefs as b,useRenderElement as x}from"@jamsrui/hooks";import{useMenuContext as I}from"./menu-context.mjs";import{useMenuFloatingContext as M}from"./menu-floating-context.mjs";import{dataAttr as t}from"@jamsrui/utils";const F=s=>{const{getMenuItemProps:i}=I(),a=p(),{textValue:l,children:c,disabled:e=!1,preventCloseOnClick:m,...u}=s,n=M(),o=f({label:l}),r=o.index===n.activeIndex,d=b([o.ref]);return x("button",{props:[i(u),{children:c,disabled:e,"data-disabled":t(e),"data-active":t(r),"aria-disabled":t(e),ref:d,tabIndex:r?0:-1,onClick(){m||a?.events.emit("click")},onMouseEnter(){n.setHasFocusInside(!0)}}]})};export{F as MenuItem};
@@ -1 +1 @@
1
- "use client";import{a,b}from"./chunk-MCQCEY2U.mjs";export{a as MenuRadioGroupContext,b as useMenuRadioGroupContext};
1
+ "use client";import{createContext as t,use as o}from"react";const n=t(null),u=()=>{const e=o(n);if(!e)throw new Error("useMenuRadioGroupContext must be used within a MenuRadioGroup");return e};export{n as MenuRadioGroupContext,u as useMenuRadioGroupContext};
@@ -1 +1 @@
1
- "use client";import{a}from"./chunk-IGMCHKXT.mjs";import"./chunk-MCQCEY2U.mjs";export{a as MenuRadioGroup};
1
+ "use client";import{jsx as c}from"react/jsx-runtime";import{useMemo as p}from"react";import{useControlledState as s}from"@jamsrui/hooks";import{MenuRadioGroupContext as d}from"./menu-radio-group-context.mjs";const v=t=>{const{children:u,defaultValue:n,isDisabled:e,onValueChange:r,value:l}=t,[o="",a]=s({defaultProp:n,onChange:r,prop:l}),i=p(()=>({isDisabled:e,value:o,setValue:a}),[e,a,o]);return c(d,{value:i,children:u})};export{v as MenuRadioGroup};
@@ -1 +1 @@
1
- "use client";import{a}from"./chunk-WCI2HQ7Q.mjs";import"./chunk-MCQCEY2U.mjs";import"./chunk-V3CQJ2RS.mjs";import"./chunk-7IUW47U3.mjs";import"./chunk-IP6JQ5TM.mjs";import"./chunk-5GJHZWBN.mjs";export{a as MenuRadioItem};
1
+ "use client";import{jsx as n}from"react/jsx-runtime";import{useCallback as u}from"react";import{MenuItem as m}from"./menu-item.mjs";import{MenuItemIndicatorContext as l}from"./menu-item-indicator-context.mjs";import{useMenuRadioGroupContext as p}from"./menu-radio-group-context.mjs";const M=r=>{const{value:e,...i}=r,{value:s,isDisabled:t,setValue:o}=p(),a=u(()=>{t||o(e)},[t,e,o]);return n(l,{value:{isChecked:s===e},children:n(m,{preventCloseOnClick:!0,onClick:a,...i})})};export{M as MenuRadioItem};
@@ -1 +1 @@
1
- import{a}from"./chunk-VU45CFXY.mjs";export{a as MenuSeparator};
1
+ "use client";import{jsx as o}from"react/jsx-runtime";import{Divider as r}from"@jamsrui/divider";const a=e=>o(r,{...e,className:"my-1.5"});export{a as MenuSeparator};
@@ -1 +1 @@
1
- "use client";import{a}from"./chunk-AQWDIQDM.mjs";import"./chunk-IP6JQ5TM.mjs";export{a as SubmenuIndicator};
1
+ "use client";import{jsx as m}from"react/jsx-runtime";import{useRenderElement as t}from"@jamsrui/hooks";import{ChevronRightIcon as s}from"@jamsrui/icons";import{useMenuContext as p}from"./menu-context.mjs";const d=e=>{const{children:r=m(s,{className:"size-full"}),...n}=e,{getSubmenuIndicatorProps:o}=p();return t("span",{props:[o(n),{children:r}]})};export{d as SubmenuIndicator};
@@ -1 +1 @@
1
- "use client";import{a}from"./chunk-A4ENIW42.mjs";import"./chunk-IP6JQ5TM.mjs";export{a as MenuTrigger};
1
+ "use client";import{cloneElement as t,isValidElement as o}from"react";import{useMenuContext as i}from"./menu-context.mjs";const s=r=>{const{children:e}=r,{getTriggerProps:n}=i();return o(e)?t(e,n()):(console.warn("Invalid children passed to MenuTrigger"),null)};export{s as MenuTrigger};
package/dist/menu.mjs CHANGED
@@ -1 +1 @@
1
- "use client";import{a}from"./chunk-AEYH7VXJ.mjs";import"./chunk-JRUGEZXQ.mjs";import"./chunk-TK6HMBAL.mjs";import"./chunk-IP6JQ5TM.mjs";import"./chunk-5GJHZWBN.mjs";export{a as Menu};
1
+ "use client";import{jsx as n}from"react/jsx-runtime";import{FloatingNode as c,FloatingTree as s,useFloatingParentNodeId as i}from"@floating-ui/react";import{MenuContext as a}from"./menu-context.mjs";import{useMenu as l}from"./use-menu.mjs";const r=e=>{const t=l(e),{children:o}=e,{getNodeProps:u}=t;return n(a,{value:t,children:n(c,{...u(),children:o})})},g=e=>{const t=i(),{children:o}=e;return t===null?n(s,{children:n(r,{...e,children:o})}):n(r,{...e,children:o})};export{g as Menu};
package/dist/styles.mjs CHANGED
@@ -1 +1 @@
1
- import{a}from"./chunk-TK6HMBAL.mjs";export{a as menuVariants};
1
+ "use client";import{radiusVariant as e,tv as r}from"@jamsrui/utils";const t=r({slots:{arrow:"fill-background-secondary",backdrop:"z-backdrop",container:"min-w-[150px] z-popover outline-none outline-0",content:["relative z-popover box-border inline-flex w-full flex-col justify-center bg-surface p-1 text-sm shadow-md outline-none","shadow-lg border-[0.5px] border-divider-dark origin-(--transform-origin)"],menuItem:["relative box-border flex size-full select-none items-center gap-2 px-2 py-1.5 text-left outline-none data-disabled:cursor-not-allowed data-disabled:opacity-60","data-active:bg-surface-secondary"],menuGroup:[""],menuGroupLabel:"pl-2 text-foreground-secondary py-1",submenuIndicator:"ml-auto size-4",menuItemIndicator:"size-4"},variants:{radius:e(["content","menuItem"]),backdrop:{transparent:{backdrop:""},opaque:{backdrop:"bg-black/50"},blur:{backdrop:"bg-black/30 backdrop-blur-md backdrop-saturate-150"}},color:{default:{menuItem:"ui-hover:bg-surface-secondary ui-hover:text-foreground"},primary:{menuItem:"ui-hover:bg-primary ui-hover:text-primary-foreground"},secondary:{menuItem:"ui-hover:bg-secondary ui-hover:text-secondary-foreground"},success:{menuItem:"ui-hover:bg-success ui-hover:text-success-foreground"},warning:{menuItem:"ui-hover:bg-warning ui-hover:text-warning-foreground"},danger:{menuItem:"ui-hover:bg-danger ui-hover:text-danger-foreground"}}},defaultVariants:{backdrop:"transparent",radius:"md",color:"default"}});export{t as menuVariants};
package/dist/use-menu.mjs CHANGED
@@ -1 +1 @@
1
- import{a}from"./chunk-JRUGEZXQ.mjs";import"./chunk-TK6HMBAL.mjs";import"./chunk-5GJHZWBN.mjs";export{a as useMenu};
1
+ "use client";import{useCallback as n,useEffect as B,useMemo as J,useRef as Q,useState as I}from"react";import{arrow as Pe,autoUpdate as ye,flip as be,offset as Ie,safePolygon as Me,shift as ve,size as Fe,useClick as Ne,useDismiss as he,useFloating as Oe,useFloatingNodeId as Ce,useFloatingParentNodeId as xe,useFloatingTree as Ge,useHover as we,useInteractions as Ee,useListItem as ke,useListNavigation as Le,useRole as Re,useTypeahead as Se}from"@floating-ui/react";import{useControlledState as Ae,useMergeRefs as De}from"@jamsrui/hooks";import{dataAttrDev as l,mapPropsVariants as He}from"@jamsrui/utils";import{useMenuFloatingContext as Te}from"./menu-floating-context.mjs";import{menuVariants as W}from"./styles.mjs";const Be=X=>{const c=xe(),o=c!==null,[Y,Z]=He(X,W.variantKeys),{closeDelay:_=0,closeOnEscapeKey:ee=!0,closeOnOutsidePress:te=!0,isOpen:oe,lockScroll:M=!0,offset:ne=4,openDelay:se=75,placement:f=o?"right-start":"bottom",defaultOpen:re=!1,onOpenChange:ae,triggerOn:le="click"}=Y,a=Ge(),i=Ce(),P=ke(),[s=!1,p]=Ae({defaultProp:re,onChange:ae,prop:oe}),[ie,y]=I(!1),[m,v]=I(null),[F,N]=I(null),h=Q([]),O=Q([]),ue=F?7:0,{floatingStyles:C,refs:b,context:r}=Oe({nodeId:i,open:s,onOpenChange:p,placement:f,middleware:[Ie({mainAxis:ne+ue,alignmentAxis:o?-4:0}),be(),ve({padding:5}),Pe({element:F}),Fe({apply({availableHeight:e,elements:u,availableWidth:g}){u.floating.style.setProperty("--available-width",`${g}px`),u.floating.style.setProperty("--available-height",`${e}px`),u.floating.style.setProperty("--transform-origin","top left")}})],whileElementsMounted:ye}),ce=we(r,{enabled:le==="hover"||o,delay:{open:se,close:_},handleClose:Me({blockPointerEvents:!0})}),pe=Ne(r,{event:"mousedown",toggle:!o,ignoreMouse:o}),me=Re(r,{role:"menu"}),de=he(r,{bubbles:!0,escapeKey:ee,outsidePress:te}),ge=Le(r,{listRef:h,activeIndex:m,nested:o,onNavigate:v}),fe=Se(r,{enabled:s,listRef:O,onMatch:v,activeIndex:m}),{getReferenceProps:x,getFloatingProps:G,getItemProps:w}=Ee([ce,pe,me,de,ge,fe]);B(()=>{if(!a)return;function e(){p(!1)}function u(g){g.nodeId!==i&&g.parentId===c&&p(!1)}return a.events.on("click",e),a.events.on("menuopen",u),()=>{a.events.off("click",e),a.events.off("menuopen",u)}},[a,i,c,p,s]),B(()=>{s&&a&&a.events.emit("menuopen",{parentId:c,nodeId:i})},[a,s,i,c]);const t=W(Z),E=s&&ie&&o,k=De([b.setReference,P.ref]),d=Te(),L=n(()=>({ref:k,tabIndex:o?d.activeIndex===P.index?0:-1:void 0,"data-slot":l("trigger"),role:o?"menuitem":void 0,"data-active":E,"data-nested":o,"data-open":s,...x({...d.getItemProps({onMouseEnter(){y(!1),d.setHasFocusInside(!0)}})})}),[x,E,o,s,P.index,k,d]),R=n(()=>({lockScroll:M,"data-slot":l("overlay"),className:t.backdrop()}),[M,t]),S=n(()=>({context:r,modal:!0,initialFocus:1,returnFocus:!o,disabled:!1}),[r,o]),A=n(e=>({...e,"data-component":l("menu"),"data-slot":l("container"),className:t.container(),ref:b.setFloating,style:C,...G()}),[C,G,b.setFloating,t]),D=n(()=>({className:t.content()}),[t]),H=n(e=>({tipRadius:6,...e,context:r,ref:N,className:t.arrow({className:e.className})}),[r,N,t]),T=n(()=>({id:i}),[i]),V=n(()=>({elementsRef:h,labelsRef:O}),[]),K=J(()=>({activeIndex:m,getItemProps:w,setHasFocusInside:y}),[m,w,y]),U=n(e=>({...e,"data-slot":l("menu-item"),className:t.menuItem({className:e.className,color:e.color}),role:"menuitem"}),[t]),$=n(e=>({...e,"data-slot":l("submenu-indicator"),className:t.submenuIndicator({className:e.className})}),[t]),j=n(e=>({...e,"data-slot":l("menu-item-indicator"),className:t.menuItemIndicator({className:e.className})}),[t]),z=n(e=>({...e,"data-slot":l("menu-group"),className:t.menuGroup({className:e.className})}),[t]),q=n(e=>({...e,"data-slot":l("menu-group-label"),className:t.menuGroupLabel({className:e.className})}),[t]);return J(()=>({getOverlayProps:R,getFocusManagerProps:S,getContentProps:D,getArrowProps:H,getNodeProps:T,isOpen:s,getTriggerProps:L,getFloatingListProps:V,floatingCtx:K,getContainerProps:A,getMenuItemProps:U,isNested:o,getSubmenuIndicatorProps:$,getMenuGroupProps:z,getMenuGroupLabelProps:q,placement:f,getMenuItemIndicatorProps:j}),[j,R,S,D,H,T,s,L,V,K,A,U,o,$,z,q,f])};export{Be as useMenu};
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@jamsrui/menu",
3
- "version": "0.0.13",
3
+ "version": "0.0.14",
4
4
  "peerDependencies": {
5
5
  "motion": ">=12",
6
6
  "react": ">=19"
7
7
  },
8
8
  "dependencies": {
9
9
  "@floating-ui/react": ">=0.27",
10
- "@jamsrui/core": "^0.0.11",
11
- "@jamsrui/icons": "^0.0.11",
12
- "@jamsrui/divider": "^0.0.13",
13
- "@jamsrui/hooks": "^0.0.13",
14
- "@jamsrui/utils": "^0.0.13"
10
+ "@jamsrui/core": "^0.0.12",
11
+ "@jamsrui/icons": "^0.0.12",
12
+ "@jamsrui/utils": "^0.0.14",
13
+ "@jamsrui/divider": "^0.0.14",
14
+ "@jamsrui/hooks": "^0.0.14"
15
15
  },
16
16
  "exports": {
17
17
  ".": {
@@ -1 +0,0 @@
1
- import{b as e}from"./chunk-IP6JQ5TM.mjs";import{useRenderElement as t}from"@jamsrui/hooks";var u=r=>{let{getMenuGroupProps:o}=e();return t("div",{props:[o(r)]})};export{u as a};
@@ -1 +0,0 @@
1
- import{createContext as e,use as t}from"react";var n=e({setHasFocusInside:()=>{},activeIndex:null,getItemProps:()=>({})}),s=()=>t(n);export{n as a,s as b};
@@ -1 +0,0 @@
1
- import{a as t}from"./chunk-V3CQJ2RS.mjs";import{a as o}from"./chunk-7IUW47U3.mjs";import{useCallback as k}from"react";import{useControlledState as p}from"@jamsrui/hooks";import{jsx as n}from"react/jsx-runtime";var f=c=>{let{isChecked:r,onCheckedChange:C,defaultChecked:s,...a}=c,[d=!1,e]=p({defaultProp:s,onChange:C,prop:r}),l=k(()=>{e(h=>!h)},[e]);return n(t,{value:{isChecked:d},children:n(o,{preventCloseOnClick:!0,onClick:l,...a})})};export{f as a};
@@ -1 +0,0 @@
1
- import{b as s}from"./chunk-IP6JQ5TM.mjs";import{b as i}from"./chunk-5GJHZWBN.mjs";import{useFloatingTree as b,useListItem as x}from"@floating-ui/react";import{useMergeRefs as I,useRenderElement as M}from"@jamsrui/hooks";import{dataAttr as t}from"@jamsrui/utils";var F=a=>{let{getMenuItemProps:l}=s(),c=b(),{textValue:m,children:u,disabled:e=!1,preventCloseOnClick:d,...p}=a,n=i(),o=x({label:m}),r=o.index===n.activeIndex,f=I([o.ref]);return M("button",{props:[l(p),{children:u,disabled:e,"data-disabled":t(e),"data-active":t(r),"aria-disabled":t(e),ref:f,tabIndex:r?0:-1,onClick(){d||c?.events.emit("click")},onMouseEnter(){n.setHasFocusInside(!0)}}]})};export{F as a};
@@ -1 +0,0 @@
1
- import{b as r}from"./chunk-IP6JQ5TM.mjs";import{cloneElement as o,isValidElement as i}from"react";var s=n=>{let{children:e}=n,{getTriggerProps:t}=r();return i(e)?o(e,t()):(console.warn("Invalid children passed to MenuTrigger"),null)};export{s as a};
@@ -1 +0,0 @@
1
- import{a as u}from"./chunk-JRUGEZXQ.mjs";import{a as r}from"./chunk-IP6JQ5TM.mjs";import{FloatingNode as i,FloatingTree as a,useFloatingParentNodeId as l}from"@floating-ui/react";import{jsx as n}from"react/jsx-runtime";var c=e=>{let t=u(e),{children:o}=e,{getNodeProps:s}=t;return n(r,{value:t,children:n(i,{...s(),children:o})})},g=e=>{let t=l(),{children:o}=e;return t===null?n(a,{children:n(c,{...e,children:o})}):n(c,{...e,children:o})};export{g as a};
@@ -1 +0,0 @@
1
- import{b as e}from"./chunk-IP6JQ5TM.mjs";import{useRenderElement as s}from"@jamsrui/hooks";import{ChevronRightIcon as p}from"@jamsrui/icons";import{jsx as m}from"react/jsx-runtime";var d=r=>{let{children:n=m(p,{className:"size-full"}),...o}=r,{getSubmenuIndicatorProps:t}=e();return s("span",{props:[t(o),{children:n}]})};export{d as a};
@@ -1 +0,0 @@
1
- import{b as e}from"./chunk-IP6JQ5TM.mjs";import{useRenderElement as t}from"@jamsrui/hooks";var u=r=>{let{getMenuGroupLabelProps:o}=e();return t("div",{props:[o(r)]})};export{u as a};
@@ -1 +0,0 @@
1
- import{b as t}from"./chunk-V3CQJ2RS.mjs";import{b as e}from"./chunk-IP6JQ5TM.mjs";import{useRenderElement as p}from"@jamsrui/hooks";import{CheckIcon as c}from"@jamsrui/icons";import{jsx as i}from"react/jsx-runtime";var f=r=>{let{children:n=i(c,{className:"size-full"}),...o}=r,{getMenuItemIndicatorProps:s}=e(),{isChecked:m}=t();return p("span",{props:[s(o),{children:m?n:null}]})};export{f as a};
@@ -1 +0,0 @@
1
- import{a as c}from"./chunk-VU45CFXY.mjs";import{a as g}from"./chunk-AQWDIQDM.mjs";import{a as l}from"./chunk-A4ENIW42.mjs";import{a as t}from"./chunk-AEYH7VXJ.mjs";import{a as s}from"./chunk-DHAF5YKZ.mjs";import{a as m}from"./chunk-3TXNSYIT.mjs";import{a as M}from"./chunk-E5KNVWWQ.mjs";import{a as f}from"./chunk-IGMCHKXT.mjs";import{a as x}from"./chunk-WCI2HQ7Q.mjs";import{a as p}from"./chunk-VGN4WMWX.mjs";import{a as u}from"./chunk-73ICREUJ.mjs";import{a}from"./chunk-7IUW47U3.mjs";import{a as o}from"./chunk-YQVA5YDV.mjs";import{b as n}from"./chunk-IP6JQ5TM.mjs";import{a as i}from"./chunk-5GJHZWBN.mjs";import{FloatingFocusManager as S,FloatingList as v,FloatingOverlay as k,FloatingPortal as A}from"@floating-ui/react";import{useRenderElement as O}from"@jamsrui/hooks";import{AnimatePresence as T}from"motion/react";var Y=Object.assign(t,{Root:t,Group:m,Item:a,CheckboxItem:u,RadioItem:x,RadioGroup:f,Separator:c,Trigger:l,GroupLabel:s,Content:C,ContentRoot:o,SubmenuIndicator:g,ItemIndicator:M,Arrow:p});import{jsx as e,jsxs as y}from"react/jsx-runtime";var d=r=>{let{getFloatingListProps:P,isOpen:I,getFocusManagerProps:F,getOverlayProps:R,floatingCtx:G,isNested:b,getContainerProps:L}=n(),h=O("div",{props:[L(r)]});return e(i,{value:G,children:e(v,{...P(),children:e(T,{children:I?y(A,{children:[b?null:e(k,{...R()}),e(S,{...F(),children:h})]}):null})})})},C=r=>e(d,{children:e(o,{...r})});export{d as a,C as b,Y as c};
@@ -1 +0,0 @@
1
- import{a as t}from"./chunk-MCQCEY2U.mjs";import{useMemo as s}from"react";import{useControlledState as d}from"@jamsrui/hooks";import{jsx as c}from"react/jsx-runtime";var v=u=>{let{children:n,defaultValue:r,isDisabled:e,onValueChange:l,value:i}=u,[o="",a]=d({defaultProp:r,onChange:l,prop:i}),p=s(()=>({isDisabled:e,value:o,setValue:a}),[e,a,o]);return c(t,{value:p,children:n})};export{v as a};
@@ -1 +0,0 @@
1
- import{createContext as t,use as n}from"react";var o=t(null),r=()=>{let e=n(o);if(!e)throw new Error("useMenuContext must be used within MenuContext");return e};export{o as a,r as b};
@@ -1 +0,0 @@
1
- import{a as I}from"./chunk-TK6HMBAL.mjs";import{b as J}from"./chunk-5GJHZWBN.mjs";import{useCallback as n,useEffect as Q,useMemo as W,useRef as X,useState as M}from"react";import{arrow as ye,autoUpdate as be,flip as Ie,offset as Me,safePolygon as ve,shift as Fe,size as Ne,useClick as he,useDismiss as Oe,useFloating as Ce,useFloatingNodeId as xe,useFloatingParentNodeId as Ge,useFloatingTree as we,useHover as Ee,useInteractions as ke,useListItem as Le,useListNavigation as Re,useRole as Se,useTypeahead as Ae}from"@floating-ui/react";import{useControlledState as De,useMergeRefs as He}from"@jamsrui/hooks";import{dataAttrDev as l,mapPropsVariants as Te}from"@jamsrui/utils";var Be=Y=>{let c=Ge(),o=c!==null,[Z,_]=Te(Y,I.variantKeys),{closeDelay:ee=0,closeOnEscapeKey:te=!0,closeOnOutsidePress:oe=!0,isOpen:ne,lockScroll:v=!0,offset:se=4,openDelay:re=75,placement:f=o?"right-start":"bottom",defaultOpen:ae=!1,onOpenChange:le,triggerOn:ie="click"}=Z,a=we(),i=xe(),P=Le(),[s=!1,p]=De({defaultProp:ae,onChange:le,prop:ne}),[ue,y]=M(!1),[m,F]=M(null),[N,h]=M(null),O=X([]),C=X([]),ce=N?7:0,{floatingStyles:x,refs:b,context:r}=Ce({nodeId:i,open:s,onOpenChange:p,placement:f,middleware:[Me({mainAxis:se+ce,alignmentAxis:o?-4:0}),Ie(),Fe({padding:5}),ye({element:N}),Ne({apply({availableHeight:e,elements:u,availableWidth:g}){u.floating.style.setProperty("--available-width",`${g}px`),u.floating.style.setProperty("--available-height",`${e}px`),u.floating.style.setProperty("--transform-origin","top left")}})],whileElementsMounted:be}),pe=Ee(r,{enabled:ie==="hover"||o,delay:{open:re,close:ee},handleClose:ve({blockPointerEvents:!0})}),me=he(r,{event:"mousedown",toggle:!o,ignoreMouse:o}),de=Se(r,{role:"menu"}),ge=Oe(r,{bubbles:!0,escapeKey:te,outsidePress:oe}),fe=Re(r,{listRef:O,activeIndex:m,nested:o,onNavigate:F}),Pe=Ae(r,{enabled:s,listRef:C,onMatch:F,activeIndex:m}),{getReferenceProps:G,getFloatingProps:w,getItemProps:E}=ke([pe,me,de,ge,fe,Pe]);Q(()=>{if(!a)return;function e(){p(!1)}function u(g){g.nodeId!==i&&g.parentId===c&&p(!1)}return a.events.on("click",e),a.events.on("menuopen",u),()=>{a.events.off("click",e),a.events.off("menuopen",u)}},[a,i,c,p,s]),Q(()=>{s&&a&&a.events.emit("menuopen",{parentId:c,nodeId:i})},[a,s,i,c]);let t=I(_),k=s&&ue&&o,L=He([b.setReference,P.ref]),d=J(),R=n(()=>({ref:L,tabIndex:o?d.activeIndex===P.index?0:-1:void 0,"data-slot":l("trigger"),role:o?"menuitem":void 0,"data-active":k,"data-nested":o,"data-open":s,...G({...d.getItemProps({onMouseEnter(){y(!1),d.setHasFocusInside(!0)}})})}),[G,k,o,s,P.index,L,d]),S=n(()=>({lockScroll:v,"data-slot":l("overlay"),className:t.backdrop()}),[v,t]),A=n(()=>({context:r,modal:!0,initialFocus:1,returnFocus:!o,disabled:!1}),[r,o]),D=n(e=>({...e,"data-component":l("menu"),"data-slot":l("container"),className:t.container(),ref:b.setFloating,style:x,...w()}),[x,w,b.setFloating,t]),H=n(()=>({className:t.content()}),[t]),T=n(e=>({tipRadius:6,...e,context:r,ref:h,className:t.arrow({className:e.className})}),[r,h,t]),V=n(()=>({id:i}),[i]),K=n(()=>({elementsRef:O,labelsRef:C}),[]),U=W(()=>({activeIndex:m,getItemProps:E,setHasFocusInside:y}),[m,E,y]),$=n(e=>({...e,"data-slot":l("menu-item"),className:t.menuItem({className:e.className,color:e.color}),role:"menuitem"}),[t]),j=n(e=>({...e,"data-slot":l("submenu-indicator"),className:t.submenuIndicator({className:e.className})}),[t]),z=n(e=>({...e,"data-slot":l("menu-item-indicator"),className:t.menuItemIndicator({className:e.className})}),[t]),q=n(e=>({...e,"data-slot":l("menu-group"),className:t.menuGroup({className:e.className})}),[t]),B=n(e=>({...e,"data-slot":l("menu-group-label"),className:t.menuGroupLabel({className:e.className})}),[t]);return W(()=>({getOverlayProps:S,getFocusManagerProps:A,getContentProps:H,getArrowProps:T,getNodeProps:V,isOpen:s,getTriggerProps:R,getFloatingListProps:K,floatingCtx:U,getContainerProps:D,getMenuItemProps:$,isNested:o,getSubmenuIndicatorProps:j,getMenuGroupProps:q,getMenuGroupLabelProps:B,placement:f,getMenuItemIndicatorProps:z}),[z,S,A,H,T,V,s,R,K,U,D,$,o,j,q,B,f])};export{Be as a};
@@ -1 +0,0 @@
1
- import{createContext as t,use as o}from"react";var n=t(null),u=()=>{let e=o(n);if(!e)throw new Error("useMenuRadioGroupContext must be used within a MenuRadioGroup");return e};export{n as a,u as b};
@@ -1 +0,0 @@
1
- import{createConfigContext as e}from"@jamsrui/utils";var[n,r]=e({displayName:"MenuConfigContext"});export{n as a,r as b};
@@ -1 +0,0 @@
1
- import{radiusVariant as e,tv as r}from"@jamsrui/utils";var t=r({slots:{arrow:"fill-background-secondary",backdrop:"z-backdrop",container:"min-w-[150px] z-popover outline-none outline-0",content:["relative z-popover box-border inline-flex w-full flex-col justify-center bg-surface p-1 text-sm shadow-md outline-none","shadow-lg border-[0.5px] border-divider-dark origin-(--transform-origin)"],menuItem:["relative box-border flex size-full select-none items-center gap-2 px-2 py-1.5 text-left outline-none data-disabled:cursor-not-allowed data-disabled:opacity-60","ui-active:bg-surface-secondary"],menuGroup:[""],menuGroupLabel:"pl-2 text-foreground-secondary py-1",submenuIndicator:"ml-auto size-4",menuItemIndicator:"size-4"},variants:{radius:e(["content","menuItem"]),backdrop:{transparent:{backdrop:""},opaque:{backdrop:"bg-black/50"},blur:{backdrop:"bg-black/30 backdrop-blur-md backdrop-saturate-150"}},color:{default:{menuItem:"ui-hover:bg-surface-secondary ui-hover:text-foreground"},primary:{menuItem:"ui-hover:bg-primary ui-hover:text-primary-foreground"},secondary:{menuItem:"ui-hover:bg-secondary ui-hover:text-secondary-foreground"},success:{menuItem:"ui-hover:bg-success ui-hover:text-success-foreground"},warning:{menuItem:"ui-hover:bg-warning ui-hover:text-warning-foreground"},danger:{menuItem:"ui-hover:bg-danger ui-hover:text-danger-foreground"}}},defaultVariants:{backdrop:"transparent",radius:"md",color:"default"}});export{t as a};
@@ -1 +0,0 @@
1
- import{createContext as e,use as t}from"react";var o=e({isChecked:!1}),r=()=>t(o);export{o as a,r as b};
@@ -1 +0,0 @@
1
- import{b as r}from"./chunk-IP6JQ5TM.mjs";import{FloatingArrow as e}from"@floating-ui/react";import{jsx as n}from"react/jsx-runtime";var s=o=>{let{getArrowProps:t}=r();return n(e,{...t(o)})};export{s as a};
@@ -1 +0,0 @@
1
- import{Divider as r}from"@jamsrui/divider";import{jsx as o}from"react/jsx-runtime";var a=e=>o(r,{...e,className:"my-1.5"});export{a};
@@ -1 +0,0 @@
1
- import{b as i}from"./chunk-MCQCEY2U.mjs";import{a as r}from"./chunk-V3CQJ2RS.mjs";import{a as n}from"./chunk-7IUW47U3.mjs";import{useCallback as p}from"react";import{jsx as s}from"react/jsx-runtime";var M=a=>{let{value:e,...u}=a,{value:m,isDisabled:t,setValue:o}=i(),l=p(()=>{t||o(e)},[t,e,o]);return s(r,{value:{isChecked:m===e},children:s(n,{preventCloseOnClick:!0,onClick:l,...u})})};export{M as a};
@@ -1 +0,0 @@
1
- import{b as t}from"./chunk-IP6JQ5TM.mjs";import{motion as r}from"motion/react";import{jsx as p}from"react/jsx-runtime";var m=o=>{let{children:n,...e}=o,{getContentProps:i,isNested:s}=t();return p(r.div,{...s?{}:{initial:{opacity:0,scale:.8},transition:{type:"spring",stiffness:300,damping:25},animate:{opacity:1,scale:1,x:0,y:0},exit:{opacity:0,scale:.8,transition:{duration:.2}}},...i(e),children:n})};export{m as a};