@jamsrui/menu 0.0.18 → 0.0.20

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.d.mts CHANGED
@@ -1,9 +1,11 @@
1
1
  import * as react from 'react';
2
2
  import * as react_jsx_runtime from 'react/jsx-runtime';
3
- import { M as Menu$1, a as MenuItem } from './menu-BpwPA3vD.mjs';
3
+ import { M as Menu$1, a as MenuItem } from './menu-BeY04YWG.mjs';
4
4
  import { MenuArrow } from './menu-arrow.mjs';
5
5
  import { MenuCheckboxItem } from './menu-checkbox-item.mjs';
6
- import { MenuContainer } from './menu-container.mjs';
6
+ import { MenuConfig } from './menu-config.mjs';
7
+ export { useMenuConfig } from './menu-config.mjs';
8
+ import { MenuContainerWithContent, MenuContainer } from './menu-container.mjs';
7
9
  import { MenuContent } from './menu-content.mjs';
8
10
  import { MenuGroup } from './menu-group.mjs';
9
11
  import { MenuGroupLabel } from './menu-group-label.mjs';
@@ -13,17 +15,15 @@ import { MenuRadioItem } from './menu-radio-item.mjs';
13
15
  import { MenuSeparator } from './menu-separator.mjs';
14
16
  import { SubmenuIndicator } from './menu-submenu-indicator.mjs';
15
17
  import { MenuTrigger } from './menu-trigger.mjs';
16
- export { MenuConfig, useMenuConfig } from './menu-config.mjs';
17
18
  import '@floating-ui/react';
18
19
  import '@jamsrui/utils';
19
20
  import './menu-floating-context.mjs';
20
21
  import './styles.mjs';
22
+ import '@jamsrui/core';
21
23
  import 'motion/react';
22
24
  import '@jamsrui/divider';
23
- import '@jamsrui/core';
24
25
 
25
26
  declare const Menu: ((props: Menu$1.Props) => react_jsx_runtime.JSX.Element) & {
26
- Root: (props: Menu$1.Props) => react_jsx_runtime.JSX.Element;
27
27
  Group: (props: MenuGroup.Props) => react.ReactElement<unknown, string | react.JSXElementConstructor<any>>;
28
28
  Item: (props: MenuItem.Props) => react.ReactElement<unknown, string | react.JSXElementConstructor<any>>;
29
29
  CheckboxItem: (props: MenuCheckboxItem.Props) => react_jsx_runtime.JSX.Element;
@@ -32,7 +32,7 @@ declare const Menu: ((props: Menu$1.Props) => react_jsx_runtime.JSX.Element) & {
32
32
  Separator: (props: MenuSeparator.Props) => react_jsx_runtime.JSX.Element;
33
33
  Trigger: (props: MenuTrigger.Props) => react.ReactElement<unknown, string | react.JSXElementConstructor<any>> | null;
34
34
  GroupLabel: (props: MenuGroupLabel.Props) => react.ReactElement<unknown, string | react.JSXElementConstructor<any>>;
35
- Content: (props: MenuContent.Props) => react_jsx_runtime.JSX.Element;
35
+ Content: (props: MenuContainerWithContent.Props) => react_jsx_runtime.JSX.Element;
36
36
  ContentRoot: (props: MenuContent.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>>;
@@ -42,6 +42,8 @@ declare const Menu: ((props: Menu$1.Props) => react_jsx_runtime.JSX.Element) & {
42
42
  declare namespace Menu {
43
43
  interface Props extends Menu$1.Props {
44
44
  }
45
+ interface Config extends MenuConfig.Props {
46
+ }
45
47
  interface CheckboxItem extends MenuCheckboxItem.Props {
46
48
  }
47
49
  interface RadioItem extends MenuRadioItem.Props {
@@ -58,6 +60,12 @@ declare namespace Menu {
58
60
  }
59
61
  interface Trigger extends MenuTrigger.Props {
60
62
  }
63
+ interface Content extends MenuContainerWithContent.Props {
64
+ }
65
+ interface ItemIndicator extends MenuItemIndicator.Props {
66
+ }
67
+ interface Arrow extends MenuArrow.Props {
68
+ }
61
69
  }
62
70
 
63
- export { Menu, MenuCheckboxItem, MenuContainer, MenuContent, MenuGroup, MenuGroupLabel, MenuItem, MenuRadioGroup, MenuRadioItem, MenuSeparator, MenuTrigger };
71
+ export { Menu, MenuArrow, MenuCheckboxItem, MenuConfig, MenuContainer, MenuContainerWithContent, MenuContent, MenuGroup, MenuGroupLabel, MenuItem, MenuItemIndicator, MenuRadioGroup, MenuRadioItem, MenuSeparator, MenuTrigger, SubmenuIndicator };
package/dist/index.mjs CHANGED
@@ -1 +1 @@
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
+ import{Menu as d}from"./menu.mjs";import{MenuArrow as e}from"./menu-arrow.mjs";import{MenuCheckboxItem as o}from"./menu-checkbox-item.mjs";import{MenuConfig as c,useMenuConfig as I}from"./menu-config.mjs";import{MenuContainer as r,MenuContainerWithContent as t}from"./menu-container.mjs";import{MenuContent as n}from"./menu-content.mjs";import{MenuGroup as p}from"./menu-group.mjs";import{MenuGroupLabel as i}from"./menu-group-label.mjs";import{MenuItem as m}from"./menu-item.mjs";import{MenuItemIndicator as u}from"./menu-item-indicator.mjs";import{MenuRadioGroup as a}from"./menu-radio-group.mjs";import{MenuRadioItem as s}from"./menu-radio-item.mjs";import{MenuSeparator as x}from"./menu-separator.mjs";import{SubmenuIndicator as f}from"./menu-submenu-indicator.mjs";import{MenuTrigger as M}from"./menu-trigger.mjs";const j=Object.assign(d,{Group:p,Item:m,CheckboxItem:o,RadioItem:s,RadioGroup:a,Separator:x,Trigger:M,GroupLabel:i,Content:t,ContentRoot:n,SubmenuIndicator:f,ItemIndicator:u,Arrow:e,Container:r});export{j as Menu,e as MenuArrow,o as MenuCheckboxItem,c as MenuConfig,r as MenuContainer,t as MenuContainerWithContent,n as MenuContent,p as MenuGroup,i as MenuGroupLabel,m as MenuItem,u as MenuItemIndicator,a as MenuRadioGroup,s as MenuRadioItem,x as MenuSeparator,M as MenuTrigger,f as SubmenuIndicator,I as useMenuConfig};
@@ -22,6 +22,7 @@ declare namespace MenuItem {
22
22
  }
23
23
  }
24
24
 
25
+ declare function getTransformOrigin(placement: Placement): string;
25
26
  declare const useMenu: (props: useMenu.Props) => {
26
27
  getOverlayProps: () => FloatingOverlayProps & UIProps<"div">;
27
28
  getFocusManagerProps: () => Omit<FloatingFocusManagerProps, "children">;
@@ -64,4 +65,4 @@ declare namespace Menu {
64
65
  }
65
66
  }
66
67
 
67
- export { Menu as M, MenuItem as a, useMenu as u };
68
+ export { Menu as M, MenuItem as a, getTransformOrigin as g, useMenu as u };
@@ -1,5 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { a as MenuItem } from './menu-BpwPA3vD.mjs';
2
+ import { a as MenuItem } from './menu-BeY04YWG.mjs';
3
3
  import '@floating-ui/react';
4
4
  import '@jamsrui/utils';
5
5
  import 'react';
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { GlobalConfigProps } from '@jamsrui/core';
3
- import { M as Menu } from './menu-BpwPA3vD.mjs';
2
+ import { WithGlobalConfig } from '@jamsrui/core';
3
+ import { M as Menu } from './menu-BeY04YWG.mjs';
4
4
  import '@floating-ui/react';
5
5
  import '@jamsrui/utils';
6
6
  import 'react';
@@ -20,7 +20,7 @@ declare const MenuConfig: (props: Omit<Partial<MenuConfig.Props>, "children"> &
20
20
  children: React.ReactNode;
21
21
  }) => react_jsx_runtime.JSX.Element;
22
22
  declare namespace MenuConfig {
23
- interface Props extends Menu.Props, GlobalConfigProps<Menu.Props> {
23
+ interface Props extends WithGlobalConfig<Menu.Props> {
24
24
  }
25
25
  }
26
26
 
@@ -1 +1 @@
1
- "use client";import{createConfigContext as e}from"@jamsrui/utils";const[n,r]=e({displayName:"MenuConfigContext"});export{n as MenuConfig,r as useMenuConfig};
1
+ "use client";import{createConfigContext as e}from"@jamsrui/utils";const[n,t]=e({displayName:"MenuConfigContext"});export{n as MenuConfig,t as useMenuConfig};
@@ -8,6 +8,10 @@ declare namespace MenuContainer {
8
8
  interface Props extends UIProps<"div"> {
9
9
  }
10
10
  }
11
- declare const MenuContainerWithContent: (props: MenuContent.Props) => react_jsx_runtime.JSX.Element;
11
+ declare const MenuContainerWithContent: (props: MenuContainerWithContent.Props) => react_jsx_runtime.JSX.Element;
12
+ declare namespace MenuContainerWithContent {
13
+ interface Props extends MenuContent.Props {
14
+ }
15
+ }
12
16
 
13
17
  export { MenuContainer, MenuContainerWithContent };
@@ -1 +1 @@
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"./menu-content.mjs";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
+ "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 M}from"@jamsrui/hooks";import{AnimatePresence as P}from"motion/react";import{MenuContent as c}from"./menu-content.mjs";import{useMenuContext as F}from"./menu-context.mjs";import{MenuFloatingContext as x}from"./menu-floating-context.mjs";const f=n=>{const{getFloatingListProps:t,isOpen:o,getFocusManagerProps:r,getOverlayProps:i,floatingCtx:a,isNested:s,getContainerProps:p}=F(),l=M("div",{props:[p(n)]});return e(x,{value:a,children:e(m,{...t(),children:e(P,{children:o?d(C,{children:[s?null:e(g,{...i()}),e(u,{...r(),children:l})]}):null})})})},A=n=>e(f,{children:e(c,{...n})});export{f as MenuContainer,A as MenuContainerWithContent};
@@ -1,5 +1,5 @@
1
1
  import * as react from 'react';
2
- import { u as useMenu } from './menu-BpwPA3vD.mjs';
2
+ import { u as useMenu } from './menu-BeY04YWG.mjs';
3
3
  import 'react/jsx-runtime';
4
4
  import '@floating-ui/react';
5
5
  import '@jamsrui/utils';
@@ -1,6 +1,6 @@
1
1
  import 'react';
2
2
  import '@jamsrui/utils';
3
- export { a as MenuItem } from './menu-BpwPA3vD.mjs';
3
+ export { a as MenuItem } from './menu-BeY04YWG.mjs';
4
4
  import 'react/jsx-runtime';
5
5
  import '@floating-ui/react';
6
6
  import './menu-container.mjs';
@@ -1,5 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { a as MenuItem } from './menu-BpwPA3vD.mjs';
2
+ import { a as MenuItem } from './menu-BeY04YWG.mjs';
3
3
  import '@floating-ui/react';
4
4
  import '@jamsrui/utils';
5
5
  import 'react';
package/dist/menu.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import 'react/jsx-runtime';
2
- export { M as Menu } from './menu-BpwPA3vD.mjs';
2
+ export { M as Menu } from './menu-BeY04YWG.mjs';
3
3
  import '@floating-ui/react';
4
4
  import '@jamsrui/utils';
5
5
  import 'react';
package/dist/styles.mjs CHANGED
@@ -1 +1 @@
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};
1
+ 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};
@@ -6,7 +6,7 @@ import './menu-content.mjs';
6
6
  import './menu-floating-context.mjs';
7
7
  import './menu-group.mjs';
8
8
  import './menu-group-label.mjs';
9
- export { u as useMenu } from './menu-BpwPA3vD.mjs';
9
+ export { g as getTransformOrigin, u as useMenu } from './menu-BeY04YWG.mjs';
10
10
  import './menu-item-indicator.mjs';
11
11
  import './menu-submenu-indicator.mjs';
12
12
  import './styles.mjs';
package/dist/use-menu.mjs CHANGED
@@ -1 +1 @@
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 Ne,useClick as Fe,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 r,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:ae=!1,onOpenChange:re,triggerOn:le="click"}=Y,l=Ge(),i=Ce(),P=ke(),[s=!1,m]=Ae({defaultProp:ae,onChange:re,prop:oe}),[ie,y]=I(!1),[p,v]=I(null),[N,F]=I(null),h=Q([]),O=Q([]),ue=N?7:0,{floatingStyles:C,refs:b,context:a}=Oe({nodeId:i,open:s,onOpenChange:m,placement:f,middleware:[Ie({mainAxis:ne+ue,alignmentAxis:o?-4:0}),be(),ve({padding:5}),Pe({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:ye}),ce=we(a,{enabled:le==="hover"||o,delay:{open:se,close:_},handleClose:Me({blockPointerEvents:!0})}),me=Fe(a,{event:"mousedown",toggle:!o,ignoreMouse:o}),pe=Re(a,{role:"menu"}),de=he(a,{bubbles:!0,escapeKey:ee,outsidePress:te}),ge=Le(a,{listRef:h,activeIndex:p,nested:o,onNavigate:v}),fe=Se(a,{enabled:s,listRef:O,onMatch:v,activeIndex:p}),{getReferenceProps:x,getFloatingProps:G,getItemProps:w}=Ee([ce,me,pe,de,ge,fe]);B(()=>{if(!l)return;function e(){m(!1)}function u(g){g.nodeId!==i&&g.parentId===c&&m(!1)}return l.events.on("click",e),l.events.on("menuopen",u),()=>{l.events.off("click",e),l.events.off("menuopen",u)}},[l,i,c,m,s]),B(()=>{s&&l&&l.events.emit("menuopen",{parentId:c,nodeId:i})},[l,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":r("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":r("overlay"),className:t.backdrop()}),[M,t]),S=n(()=>({context:a,modal:!0,initialFocus:1,returnFocus:!o,disabled:!1}),[a,o]),A=n(e=>({...e,"data-component":r("menu"),"data-slot":r("menu-container"),className:t.container({className:e.className}),ref:b.setFloating,style:C,...G()}),[C,G,b.setFloating,t]),D=n(e=>({...e,className:t.content({className:e.className}),"data-slot":r("menu-content")}),[t]),H=n(e=>({tipRadius:6,...e,context:a,ref:F,className:t.arrow({className:e.className})}),[a,F,t]),T=n(()=>({id:i}),[i]),V=n(()=>({elementsRef:h,labelsRef:O}),[]),K=J(()=>({activeIndex:p,getItemProps:w,setHasFocusInside:y}),[p,w,y]),U=n(e=>({...e,"data-slot":r("menu-item"),className:t.menuItem({className:e.className,color:e.color}),role:"menuitem"}),[t]),$=n(e=>({...e,"data-slot":r("submenu-indicator"),className:t.submenuIndicator({className:e.className})}),[t]),j=n(e=>({...e,"data-slot":r("menu-item-indicator"),className:t.menuItemIndicator({className:e.className})}),[t]),z=n(e=>({...e,"data-slot":r("menu-group"),className:t.menuGroup({className:e.className})}),[t]),q=n(e=>({...e,"data-slot":r("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};
1
+ "use client";import{useCallback as n,useEffect as J,useMemo as Q,useRef as W,useState as M}from"react";import{arrow as ye,autoUpdate as Ie,flip as Me,offset as ve,safePolygon as Ne,shift as he,size as Fe,useClick as Oe,useDismiss as xe,useFloating as Ce,useFloatingNodeId as Ge,useFloatingParentNodeId as we,useFloatingTree as Ee,useHover as Se,useInteractions as ke,useListItem as Ae,useListNavigation as Le,useRole as Re,useTypeahead as De}from"@floating-ui/react";import{useControlledState as Te,useMergeRefs as He}from"@jamsrui/hooks";import{dataAttrDev as a,mapPropsVariants as Ve}from"@jamsrui/utils";import{useMenuFloatingContext as Ke}from"./menu-floating-context.mjs";import{menuVariants as X}from"./styles.mjs";function Ue(f){const[l,t]=f.split("-");switch(l){case"top":return t==="start"?"bottom left":t==="end"?"bottom right":"bottom center";case"bottom":return t==="start"?"top left":t==="end"?"top right":"top center";case"left":return t==="start"?"top right":t==="end"?"bottom right":"center right";case"right":return t==="start"?"top left":t==="end"?"bottom left":"center left"}}const We=f=>{const l=we(),t=l!==null,[Y,Z]=Ve(f,X.variantKeys),{closeDelay:_=0,closeOnEscapeKey:ee=!0,closeOnOutsidePress:te=!0,isOpen:oe,lockScroll:v=!0,offset:ne=4,openDelay:se=75,placement:P=t?"right-start":"bottom-end",defaultOpen:re=!1,onOpenChange:ae,triggerOn:ie="click"}=Y,i=Ee(),c=Ge(),b=Ae(),[s=!1,m]=Te({defaultProp:re,onChange:ae,prop:oe}),[le,y]=M(!1),[p,N]=M(null),[h,F]=M(null),O=W([]),x=W([]),ce=h?7:0,{floatingStyles:C,refs:I,context:r}=Ce({nodeId:c,open:s,onOpenChange:m,placement:P,middleware:[ve({mainAxis:ne+ce,alignmentAxis:t?-4:0}),Me(),he({padding:5}),ye({element:h}),Fe({apply({availableHeight:e,elements:u,availableWidth:g,placement:Pe}){u.floating.style.setProperty("--available-width",`${g}px`),u.floating.style.setProperty("--available-height",`${e}px`);const be=Ue(Pe);u.floating.style.setProperty("--transform-origin",be)}})],whileElementsMounted:Ie}),ue=Se(r,{enabled:ie==="hover"||t,delay:{open:se,close:_},handleClose:Ne({blockPointerEvents:!0})}),me=Oe(r,{event:"mousedown",toggle:!t,ignoreMouse:t}),pe=Re(r,{role:"menu"}),de=xe(r,{bubbles:!0,escapeKey:ee,outsidePress:te}),ge=Le(r,{listRef:O,activeIndex:p,nested:t,onNavigate:N}),fe=De(r,{enabled:s,listRef:x,onMatch:N,activeIndex:p}),{getReferenceProps:G,getFloatingProps:w,getItemProps:E}=ke([ue,me,pe,de,ge,fe]);J(()=>{if(!i)return;function e(){m(!1)}function u(g){g.nodeId!==c&&g.parentId===l&&m(!1)}return i.events.on("click",e),i.events.on("menuopen",u),()=>{i.events.off("click",e),i.events.off("menuopen",u)}},[i,c,l,m,s]),J(()=>{s&&i&&i.events.emit("menuopen",{parentId:l,nodeId:c})},[i,s,c,l]);const o=X(Z),S=s&&le&&t,k=He([I.setReference,b.ref]),d=Ke(),A=n(()=>({ref:k,tabIndex:t?d.activeIndex===b.index?0:-1:void 0,"data-slot":a("trigger"),role:t?"menuitem":void 0,"data-active":S,"data-nested":t,"data-open":s,...G({...d.getItemProps({onMouseEnter(){y(!1),d.setHasFocusInside(!0)}})})}),[G,S,t,s,b.index,k,d]),L=n(()=>({lockScroll:v,"data-slot":a("overlay"),className:o.backdrop()}),[v,o]),R=n(()=>({context:r,modal:!0,initialFocus:1,returnFocus:!t,disabled:!1}),[r,t]),D=n(e=>({...e,"data-component":a("menu"),"data-slot":a("menu-container"),className:o.container({className:e.className}),ref:I.setFloating,style:C,...w()}),[C,w,I.setFloating,o]),T=n(e=>({...e,className:o.content({className:e.className}),"data-slot":a("menu-content")}),[o]),H=n(e=>({tipRadius:6,...e,context:r,ref:F,className:o.arrow({className:e.className})}),[r,F,o]),V=n(()=>({id:c}),[c]),K=n(()=>({elementsRef:O,labelsRef:x}),[]),U=Q(()=>({activeIndex:p,getItemProps:E,setHasFocusInside:y}),[p,E,y]),$=n(e=>({...e,"data-slot":a("menu-item"),className:o.menuItem({className:e.className,color:e.color}),role:"menuitem"}),[o]),j=n(e=>({...e,"data-slot":a("submenu-indicator"),className:o.submenuIndicator({className:e.className})}),[o]),z=n(e=>({...e,"data-slot":a("menu-item-indicator"),className:o.menuItemIndicator({className:e.className})}),[o]),q=n(e=>({...e,"data-slot":a("menu-group"),className:o.menuGroup({className:e.className})}),[o]),B=n(e=>({...e,"data-slot":a("menu-group-label"),className:o.menuGroupLabel({className:e.className})}),[o]);return Q(()=>({getOverlayProps:L,getFocusManagerProps:R,getContentProps:T,getArrowProps:H,getNodeProps:V,isOpen:s,getTriggerProps:A,getFloatingListProps:K,floatingCtx:U,getContainerProps:D,getMenuItemProps:$,isNested:t,getSubmenuIndicatorProps:j,getMenuGroupProps:q,getMenuGroupLabelProps:B,placement:P,getMenuItemIndicatorProps:z}),[z,L,R,T,H,V,s,A,K,U,D,$,t,j,q,B,P])};export{Ue as getTransformOrigin,We as useMenu};
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@jamsrui/menu",
3
- "version": "0.0.18",
3
+ "version": "0.0.20",
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/divider": "^0.0.16",
11
- "@jamsrui/hooks": "^0.0.16",
12
- "@jamsrui/core": "^0.0.13",
13
- "@jamsrui/icons": "^0.0.13",
14
- "@jamsrui/utils": "^0.0.16"
10
+ "@jamsrui/core": "^0.0.14",
11
+ "@jamsrui/divider": "^0.0.18",
12
+ "@jamsrui/hooks": "^0.0.18",
13
+ "@jamsrui/utils": "^0.0.18",
14
+ "@jamsrui/icons": "^0.0.14"
15
15
  },
16
16
  "exports": {
17
17
  ".": {