mantine-contextmenu 7.1.12 → 7.3.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.d.ts CHANGED
@@ -214,4 +214,4 @@ declare function useContextMenu(): {
214
214
  */
215
215
  declare function humanize(value: string): string;
216
216
 
217
- export { ContextMenuContent, ContextMenuCtx, ContextMenuDivider, ContextMenuDividerProps, ContextMenuItem, ContextMenuItemOptions, ContextMenuOptions, ContextMenuPortal, ContextMenuPortalProps, ContextMenuProvider, ContextMenuProviderProps, ContextMenuSettings, ContextMenuSettingsCtx, HideContextMenuFunction, ShowContextMenuFunction, WithOptionalProperty, WithRequiredProperty, humanize, useContextMenu };
217
+ export { type ContextMenuContent, ContextMenuCtx, ContextMenuDivider, type ContextMenuDividerProps, ContextMenuItem, type ContextMenuItemOptions, type ContextMenuOptions, ContextMenuPortal, type ContextMenuPortalProps, ContextMenuProvider, type ContextMenuProviderProps, type ContextMenuSettings, ContextMenuSettingsCtx, type HideContextMenuFunction, type ShowContextMenuFunction, type WithOptionalProperty, type WithRequiredProperty, humanize, useContextMenu };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";"use client";var ne=Object.create;var z=Object.defineProperty;var oe=Object.getOwnPropertyDescriptor;var re=Object.getOwnPropertyNames;var ie=Object.getPrototypeOf,ue=Object.prototype.hasOwnProperty;var se=(e,t)=>{for(var n in t)z(e,n,{get:t[n],enumerable:!0})},_=(e,t,n,u)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of re(t))!ue.call(e,r)&&r!==n&&z(e,r,{get:()=>t[r],enumerable:!(u=oe(t,r))||u.enumerable});return e};var A=(e,t,n)=>(n=e!=null?ne(ie(e)):{},_(t||!e||!e.__esModule?z(n,"default",{value:e,enumerable:!0}):n,e)),me=e=>_(z({},"__esModule",{value:!0}),e);var ae={};se(ae,{ContextMenuCtx:()=>q,ContextMenuDivider:()=>F,ContextMenuItem:()=>$,ContextMenuPortal:()=>L,ContextMenuProvider:()=>xe,ContextMenuSettingsCtx:()=>P,humanize:()=>U,useContextMenu:()=>pe});module.exports=me(ae);var G=require("@mantine/core"),X=A(require("clsx")),Y=require("react/jsx-runtime");function F({className:e,style:t}){return(0,Y.jsx)(G.Box,{className:(0,X.default)("mantine-contextmenu-divider",e),style:t})}var o=require("@mantine/core"),V=require("@mantine/hooks"),ee=A(require("clsx")),w=require("react");var g=require("@mantine/core"),Q=require("@mantine/hooks"),k=A(require("clsx")),j=require("react");var h=require("react");var K=require("@mantine/core"),I=require("@mantine/hooks");var J=require("react/jsx-runtime");function Z({zIndex:e,children:t,onHide:n}){let u=r=>{r.preventDefault(),n()};return(0,J.jsx)("div",{className:"mantine-contextmenu-overlay",style:{zIndex:e},onClick:u,onContextMenu:u,children:t})}var E=require("react/jsx-runtime");function L({onHide:e,zIndex:t,...n}){return(0,I.useWindowEvent)("resize",e),(0,I.useWindowEvent)("scroll",e),(0,I.useHotkeys)([["Escape",e]]),(0,E.jsx)(K.Portal,{children:(0,E.jsx)(Z,{zIndex:t,onHide:e,children:(0,E.jsx)(N,{...n,onHide:e})})})}var D=require("react/jsx-runtime"),B={shadow:"sm",borderRadius:"xs",submenuDelay:500},P=(0,h.createContext)(B),q=(0,h.createContext)({showContextMenu:()=>()=>{},hideContextMenu:()=>{},isContextMenuVisible:!1});function xe({zIndex:e=9999,shadow:t=B.shadow,borderRadius:n=B.borderRadius,submenuDelay:u=B.submenuDelay,children:r}){let[C,M]=(0,h.useState)(null),p=()=>{M(null)},a=(v,m)=>x=>{x.preventDefault(),x.stopPropagation(),M({x:x.clientX,y:x.clientY,content:v,zIndex:m?.zIndex||e,className:m?.className,style:m?.style,classNames:m?.classNames,styles:m?.styles})};return(0,D.jsx)(P.Provider,{value:{shadow:t,borderRadius:n,submenuDelay:u},children:(0,D.jsxs)(q.Provider,{value:{showContextMenu:a,hideContextMenu:p,isContextMenuVisible:!!C},children:[r,C&&(0,D.jsx)(L,{onHide:p,...C})]})})}function pe(){return(0,h.useContext)(q)}function U(e){let t=e.replace(/([a-z\d])([A-Z]+)/g,"$1 $2").replace(/\W|_/g," ").trim().toLowerCase();return`${t.charAt(0).toUpperCase()}${t.slice(1)}`}var W=require("react/jsx-runtime");function N({x:e,y:t,content:n,zIndex:u,onHide:r,className:C,style:M,classNames:p,styles:a}){let{shadow:v,borderRadius:m}=(0,j.useContext)(P),[x]=(0,Q.useResizeObserver)(),{width:f,height:H}=x.current?.getBoundingClientRect()||{width:0,height:0},b=0,S=0;typeof window<"u"&&({innerWidth:b,innerHeight:S}=window);let{dir:T}=(0,g.useDirection)();return(0,W.jsx)(g.Paper,{ref:x,shadow:v,radius:m,className:(0,k.default)("mantine-contextmenu",C,p?.root),style:[({spacing:{md:y}})=>{let s=(0,g.px)(y);return{zIndex:u,top:t+H+s>S?S-H-s:t,left:T==="ltr"?e+f+s>b?b-f-s:e:b-s-(e-f-s<0?f+s:e)}},M,a?.root],children:Array.isArray(n)?n.map(({key:y,hidden:s,className:R,style:O,onClick:d,items:l,title:i,...te})=>s?null:d||l?(0,W.jsx)($,{className:(0,k.default)(p?.item,R),style:[a?.item,O],title:i??U(y),onClick:d,onHide:r,items:l,...te},y):(0,W.jsx)(F,{className:(0,k.default)(p?.divider,R),style:[a?.divider,O]},y)):n(r)})}var c=require("react/jsx-runtime");function $({className:e,style:t,icon:n,title:u,color:r,disabled:C,onClick:M,onHide:p,items:a}){let v=(0,w.useRef)(null),{submenuDelay:m}=(0,w.useContext)(P),[x,f]=(0,w.useState)(null),H=M?d=>{p(),M(d)}:void 0,{start:b,clear:S}=(0,V.useTimeout)(()=>{let{top:d,right:l}=v.current.getBoundingClientRect();f({x:l,y:d})},m),{start:T,clear:y}=(0,V.useTimeout)(()=>{f(null)},m),s=()=>{y(),b()},R=()=>{S(),T()},O=a&&!C;return(0,c.jsxs)("div",{onMouseEnter:O?s:void 0,onMouseLeave:O?R:void 0,children:[(0,c.jsxs)(o.UnstyledButton,{ref:v,style:[d=>{let{colors:l}=d,i=r?(0,o.parseThemeColor)({color:r,theme:d}).value:void 0;return{"--mantine-contextmenu-item-button-color":i||"var(--mantine-color-text)","--mantine-contextmenu-item-button-hover-bg-color-light":i?(0,o.rgba)(i,.08):(0,o.rgba)(l.gray[4],.25),"--mantine-contextmenu-item-button-hover-bg-color-dark":i?(0,o.rgba)(i,.15):(0,o.rgba)(l.dark[3],.25),"--mantine-contextmenu-item-button-pressed-bg-color-light":i?(0,o.rgba)(i,.2):(0,o.rgba)(l.gray[4],.5),"--mantine-contextmenu-item-button-pressed-bg-color-dark":i?(0,o.rgba)(i,.3):(0,o.rgba)(l.dark[3],.5)}},t],className:(0,ee.default)("mantine-contextmenu-item-button",e),disabled:C,onClick:H,children:[n&&(0,c.jsx)(o.Box,{fz:0,mr:"xs",mt:-2,children:n}),(0,c.jsx)("div",{className:"mantine-contextmenu-item-button-title",children:u}),a&&(0,c.jsx)(o.Box,{fz:10,mt:-2,ml:"xs",children:"\u25B6"})]}),x&&(0,c.jsx)(N,{content:a,onHide:p,...x})]})}0&&(module.exports={ContextMenuCtx,ContextMenuDivider,ContextMenuItem,ContextMenuPortal,ContextMenuProvider,ContextMenuSettingsCtx,humanize,useContextMenu});
1
+ "use strict";"use client";var ue=Object.create;var k=Object.defineProperty;var ie=Object.getOwnPropertyDescriptor;var se=Object.getOwnPropertyNames;var me=Object.getPrototypeOf,xe=Object.prototype.hasOwnProperty;var ae=(e,t)=>{for(var n in t)k(e,n,{get:t[n],enumerable:!0})},Y=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of se(t))!xe.call(e,r)&&r!==n&&k(e,r,{get:()=>t[r],enumerable:!(i=ie(t,r))||i.enumerable});return e};var $=(e,t,n)=>(n=e!=null?ue(me(e)):{},Y(t||!e||!e.__esModule?k(n,"default",{value:e,enumerable:!0}):n,e)),pe=e=>Y(k({},"__esModule",{value:!0}),e);var ce={};ae(ce,{ContextMenuCtx:()=>G,ContextMenuDivider:()=>V,ContextMenuItem:()=>X,ContextMenuPortal:()=>_,ContextMenuProvider:()=>de,ContextMenuSettingsCtx:()=>P,humanize:()=>Q,useContextMenu:()=>le});module.exports=pe(ce);var Z=require("@mantine/core"),J=$(require("clsx")),K=require("react/jsx-runtime");function V({className:e,style:t}){return(0,K.jsx)(Z.Box,{className:(0,J.default)("mantine-contextmenu-divider",e),style:t})}var o=require("@mantine/core"),D=require("@mantine/hooks"),re=$(require("clsx")),w=require("react");var g=require("@mantine/core"),ne=require("@mantine/hooks"),F=$(require("clsx")),oe=require("react");var h=require("react");var te=require("@mantine/core"),I=require("@mantine/hooks");var ee=require("react/jsx-runtime");function j({zIndex:e,children:t,onHide:n}){let i=r=>{r.preventDefault(),n()};return(0,ee.jsx)("div",{className:"mantine-contextmenu-overlay",style:{zIndex:e},onClick:i,onContextMenu:i,children:t})}var W=require("react/jsx-runtime");function _({onHide:e,zIndex:t,...n}){return(0,I.useWindowEvent)("resize",e),(0,I.useWindowEvent)("scroll",e),(0,I.useHotkeys)([["Escape",e]]),(0,W.jsx)(te.Portal,{children:(0,W.jsx)(j,{zIndex:t,onHide:e,children:(0,W.jsx)(T,{...n,onHide:e})})})}var R=require("react/jsx-runtime"),A={shadow:"sm",borderRadius:"xs",submenuDelay:500},P=(0,h.createContext)(A),G=(0,h.createContext)({showContextMenu:()=>()=>{},hideContextMenu:()=>{},isContextMenuVisible:!1});function de({zIndex:e=9999,shadow:t=A.shadow,borderRadius:n=A.borderRadius,submenuDelay:i=A.submenuDelay,children:r}){let[d,C]=(0,h.useState)(null),a=()=>{C(null)},p=(v,s)=>m=>{m.preventDefault(),m.stopPropagation(),C({x:m.clientX,y:m.clientY,content:v,zIndex:s?.zIndex||e,className:s?.className,style:s?.style,classNames:s?.classNames,styles:s?.styles})};return(0,R.jsx)(P.Provider,{value:{shadow:t,borderRadius:n,submenuDelay:i},children:(0,R.jsxs)(G.Provider,{value:{showContextMenu:p,hideContextMenu:a,isContextMenuVisible:!!d},children:[r,d&&(0,R.jsx)(_,{onHide:a,...d})]})})}function le(){return(0,h.useContext)(G)}function Q(e){let t=e.replace(/([a-z\d])([A-Z]+)/g,"$1 $2").replace(/\W|_/g," ").trim().toLowerCase();return`${t.charAt(0).toUpperCase()}${t.slice(1)}`}var L=require("react/jsx-runtime");function T({x:e,y:t,content:n,zIndex:i,onHide:r,className:d,style:C,classNames:a,styles:p}){let{shadow:v,borderRadius:s}=(0,oe.useContext)(P),[m]=(0,ne.useResizeObserver)(),{width:M,height:S}=m.current?.getBoundingClientRect()||{width:0,height:0},f=0,O=0;typeof window<"u"&&({innerWidth:f,innerHeight:O}=window);let{dir:q}=(0,g.useDirection)();return(0,L.jsx)(g.Paper,{ref:m,shadow:v,radius:s,className:(0,F.default)("mantine-contextmenu",d,a?.root),style:[({spacing:{md:y}})=>{let u=(0,g.px)(y);return{zIndex:i,top:t+S+u>O?O-S-u:t,left:q==="ltr"?e+M+u>f?f-M-u:e:f-u-(e-M-u<0?M+u:e)}},C,p?.root],children:Array.isArray(n)?n.map(({key:y,hidden:u,className:z,style:E,onClick:B,items:H,title:N,...U})=>u?null:B||H?(0,L.jsx)(X,{className:(0,F.default)(a?.item,z),style:[p?.item,E],title:N??Q(y),onClick:B,onHide:r,items:H,...U},y):(0,L.jsx)(V,{className:(0,F.default)(a?.divider,z),style:[p?.divider,E]},y)):n(r)})}var c=require("react/jsx-runtime");function X({className:e,style:t,icon:n,title:i,color:r,disabled:d,onClick:C,onHide:a,items:p}){let v=(0,w.useRef)(null),{submenuDelay:s}=(0,w.useContext)(P),m=(0,D.useMediaQuery)("(hover: hover)"),[M,S]=(0,w.useState)(null),f=()=>{let{top:l,right:b}=v.current.getBoundingClientRect();S({x:b,y:l})},{start:O,clear:q}=(0,D.useTimeout)(f,s),{start:y,clear:u}=(0,D.useTimeout)(()=>{S(null)},s),z=()=>{u(),O()},E=()=>{u(),f()},B=()=>{q(),y()},H=p&&!d,N=H&&m,U=C?l=>{a(),C(l)}:H&&!m?l=>{l.stopPropagation(),E()}:void 0;return(0,c.jsxs)("div",{onMouseEnter:N?z:void 0,onMouseLeave:N?B:void 0,children:[(0,c.jsxs)(o.UnstyledButton,{ref:v,style:[l=>{let{colors:b}=l,x=r?(0,o.parseThemeColor)({color:r,theme:l}).value:void 0;return{"--mantine-contextmenu-item-button-color":x||"var(--mantine-color-text)","--mantine-contextmenu-item-button-hover-bg-color-light":x?(0,o.rgba)(x,.08):(0,o.rgba)(b.gray[4],.25),"--mantine-contextmenu-item-button-hover-bg-color-dark":x?(0,o.rgba)(x,.15):(0,o.rgba)(b.dark[3],.25),"--mantine-contextmenu-item-button-pressed-bg-color-light":x?(0,o.rgba)(x,.2):(0,o.rgba)(b.gray[4],.5),"--mantine-contextmenu-item-button-pressed-bg-color-dark":x?(0,o.rgba)(x,.3):(0,o.rgba)(b.dark[3],.5)}},t],className:(0,re.default)("mantine-contextmenu-item-button",e),disabled:d,onClick:U,children:[n&&(0,c.jsx)(o.Box,{fz:0,mr:"xs",mt:-2,children:n}),(0,c.jsx)("div",{className:"mantine-contextmenu-item-button-title",children:i}),p&&(0,c.jsx)(o.Box,{fz:10,mt:-2,ml:"xs",children:"\u25B6"})]}),M&&(0,c.jsx)(T,{content:p,onHide:a,...M})]})}0&&(module.exports={ContextMenuCtx,ContextMenuDivider,ContextMenuItem,ContextMenuPortal,ContextMenuProvider,ContextMenuSettingsCtx,humanize,useContextMenu});
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../package/index.ts","../package/ContextMenuDivider.tsx","../package/ContextMenuItem.tsx","../package/ContextMenu.tsx","../package/ContextMenuProvider.tsx","../package/ContextMenuPortal.tsx","../package/ContextMenuOverlay.tsx","../package/utils.ts"],"sourcesContent":["'use client';\n\nexport * from './ContextMenuDivider';\nexport * from './ContextMenuItem';\nexport * from './ContextMenuPortal';\nexport * from './ContextMenuProvider';\nexport * from './types';\nexport * from './utils';\n","import { Box } from '@mantine/core';\nimport clsx from 'clsx';\nimport type { ContextMenuItemOptions } from './types';\n\nexport type ContextMenuDividerProps = Pick<ContextMenuItemOptions, 'className' | 'style'>;\n\nexport function ContextMenuDivider({ className, style }: ContextMenuDividerProps) {\n return <Box className={clsx('mantine-contextmenu-divider', className)} style={style} />;\n}\n","import { Box, UnstyledButton, parseThemeColor, rgba } from '@mantine/core';\nimport { useTimeout } from '@mantine/hooks';\nimport clsx from 'clsx';\nimport { useContext, useRef, useState, type MouseEventHandler } from 'react';\nimport { ContextMenu } from './ContextMenu';\nimport { ContextMenuSettingsCtx } from './ContextMenuProvider';\nimport type { ContextMenuContent, ContextMenuItemOptions, WithRequiredProperty } from './types';\n\nexport function ContextMenuItem({\n className,\n style,\n icon,\n title,\n color,\n disabled,\n onClick,\n onHide,\n items,\n}: WithRequiredProperty<Omit<ContextMenuItemOptions, 'key'>, 'title'> & { onHide: () => void }) {\n const ref = useRef<HTMLButtonElement>(null);\n const { submenuDelay } = useContext(ContextMenuSettingsCtx);\n\n const [submenuPosition, setSubmenuPosition] = useState<{ x: number; y: number } | null>(null);\n\n const handleClick: MouseEventHandler<HTMLButtonElement> | undefined = onClick\n ? (e) => {\n onHide();\n onClick!(e);\n }\n : undefined;\n\n const { start: startShowingSubmenu, clear: stopShowingSubmenu } = useTimeout(() => {\n const { top: y, right: x } = ref.current!.getBoundingClientRect();\n setSubmenuPosition({ x, y });\n }, submenuDelay);\n\n const { start: startHidingSubmenu, clear: stopHidingSubmenu } = useTimeout(() => {\n setSubmenuPosition(null);\n }, submenuDelay);\n\n const showSubmenu = () => {\n stopHidingSubmenu();\n startShowingSubmenu();\n };\n\n const hideSubmenu = () => {\n stopShowingSubmenu();\n startHidingSubmenu();\n };\n\n const hasItemsAndIsNotDisabled = items && !disabled;\n\n return (\n <div\n onMouseEnter={hasItemsAndIsNotDisabled ? showSubmenu : undefined}\n onMouseLeave={hasItemsAndIsNotDisabled ? hideSubmenu : undefined}\n >\n <UnstyledButton\n ref={ref}\n style={[\n (theme) => {\n const { colors } = theme;\n const parsedColor = color ? parseThemeColor({ color, theme }).value : undefined;\n return {\n '--mantine-contextmenu-item-button-color': parsedColor ? parsedColor : 'var(--mantine-color-text)',\n '--mantine-contextmenu-item-button-hover-bg-color-light': parsedColor\n ? rgba(parsedColor, 0.08)\n : rgba(colors.gray[4], 0.25),\n '--mantine-contextmenu-item-button-hover-bg-color-dark': parsedColor\n ? rgba(parsedColor, 0.15)\n : rgba(colors.dark[3], 0.25),\n '--mantine-contextmenu-item-button-pressed-bg-color-light': parsedColor\n ? rgba(parsedColor, 0.2)\n : rgba(colors.gray[4], 0.5),\n '--mantine-contextmenu-item-button-pressed-bg-color-dark': parsedColor\n ? rgba(parsedColor, 0.3)\n : rgba(colors.dark[3], 0.5),\n };\n },\n style,\n ]}\n className={clsx('mantine-contextmenu-item-button', className)}\n disabled={disabled}\n onClick={handleClick}\n >\n {icon && (\n <Box fz={0} mr=\"xs\" mt={-2}>\n {icon}\n </Box>\n )}\n <div className=\"mantine-contextmenu-item-button-title\">{title}</div>\n {items && (\n <Box fz={10} mt={-2} ml=\"xs\">\n ▶\n </Box>\n )}\n </UnstyledButton>\n {submenuPosition && <ContextMenu content={items as ContextMenuContent} onHide={onHide} {...submenuPosition} />}\n </div>\n );\n}\n","import { Paper, px, useDirection } from '@mantine/core';\nimport { useResizeObserver } from '@mantine/hooks';\nimport clsx from 'clsx';\nimport { useContext } from 'react';\nimport { ContextMenuDivider } from './ContextMenuDivider';\nimport { ContextMenuItem } from './ContextMenuItem';\nimport { ContextMenuSettingsCtx } from './ContextMenuProvider';\nimport type { ContextMenuContent, ContextMenuOptions } from './types';\nimport { humanize } from './utils';\n\nexport type ContextMenuInstanceOptions = {\n x: number;\n y: number;\n content: ContextMenuContent;\n};\n\nexport type ContextMenuProps = ContextMenuOptions &\n ContextMenuInstanceOptions & {\n onHide: () => void;\n };\n\nexport function ContextMenu({ x, y, content, zIndex, onHide, className, style, classNames, styles }: ContextMenuProps) {\n const { shadow, borderRadius } = useContext(ContextMenuSettingsCtx);\n const [paperRef] = useResizeObserver<HTMLDivElement>();\n const { width, height } = paperRef.current?.getBoundingClientRect() || { width: 0, height: 0 };\n\n let windowWidth = 0;\n let windowHeight = 0;\n if (typeof window !== 'undefined') ({ innerWidth: windowWidth, innerHeight: windowHeight } = window);\n\n const { dir } = useDirection();\n\n return (\n <Paper\n ref={paperRef}\n shadow={shadow}\n radius={borderRadius}\n className={clsx('mantine-contextmenu', className, classNames?.root)}\n style={[\n ({ spacing: { md } }) => {\n const mdSpacing = px(md) as number;\n return {\n zIndex,\n top: y + height + mdSpacing > windowHeight ? windowHeight - height - mdSpacing : y,\n left:\n dir === 'ltr'\n ? x + width + mdSpacing > windowWidth\n ? windowWidth - width - mdSpacing\n : x\n : windowWidth - mdSpacing - (x - width - mdSpacing < 0 ? width + mdSpacing : x),\n };\n },\n style,\n styles?.root,\n ]}\n >\n {Array.isArray(content)\n ? content.map(({ key, hidden, className, style, onClick, items, title, ...otherOptions }) =>\n hidden ? null : onClick || items ? (\n <ContextMenuItem\n key={key}\n className={clsx(classNames?.item, className)}\n style={[styles?.item, style]}\n title={title ?? humanize(key)}\n onClick={onClick}\n onHide={onHide}\n items={items}\n {...otherOptions}\n />\n ) : (\n <ContextMenuDivider\n key={key}\n className={clsx(classNames?.divider, className)}\n style={[styles?.divider, style]}\n />\n )\n )\n : content(onHide)}\n </Paper>\n );\n}\n","import { createContext, useContext, useState } from 'react';\nimport type { ContextMenuInstanceOptions } from './ContextMenu';\nimport { ContextMenuPortal } from './ContextMenuPortal';\nimport type {\n ContextMenuOptions,\n ContextMenuProviderProps,\n ContextMenuSettings,\n HideContextMenuFunction,\n ShowContextMenuFunction,\n WithRequiredProperty,\n} from './types';\n\nconst DEFAULT_SETTINGS: WithRequiredProperty<ContextMenuSettings, 'shadow' | 'borderRadius' | 'submenuDelay'> = {\n shadow: 'sm',\n borderRadius: 'xs',\n submenuDelay: 500,\n};\n\nexport const ContextMenuSettingsCtx = createContext(DEFAULT_SETTINGS);\nexport const ContextMenuCtx = createContext<{\n /**\n * Function that shows the context menu.\n */\n showContextMenu: ShowContextMenuFunction;\n\n /**\n * Function that hides the context menu.\n */\n hideContextMenu: HideContextMenuFunction;\n\n /**\n * Boolean indicating whether the context menu is currently visible.\n */\n isContextMenuVisible: boolean;\n}>({ showContextMenu: () => () => undefined, hideContextMenu: () => undefined, isContextMenuVisible: false });\n\n/**\n * Provider that allows to show a context menu anywhere in your application.\n * If you wrap your application with this provider, you can use the `useContextMenu` hook\n * anywhere in the component tree to access a function that shows the context menu.\n */\nexport function ContextMenuProvider({\n zIndex = 9999,\n shadow = DEFAULT_SETTINGS.shadow,\n borderRadius = DEFAULT_SETTINGS.borderRadius,\n submenuDelay = DEFAULT_SETTINGS.submenuDelay,\n children,\n}: ContextMenuProviderProps) {\n const [data, setData] = useState<(ContextMenuInstanceOptions & ContextMenuOptions) | null>(null);\n\n const hideContextMenu = () => {\n setData(null);\n };\n\n const showContextMenu: ShowContextMenuFunction = (content, options) => (e) => {\n e.preventDefault();\n e.stopPropagation();\n setData({\n x: e.clientX,\n y: e.clientY,\n content,\n zIndex: options?.zIndex || zIndex,\n className: options?.className,\n style: options?.style,\n classNames: options?.classNames,\n styles: options?.styles,\n });\n };\n\n return (\n <ContextMenuSettingsCtx.Provider value={{ shadow, borderRadius, submenuDelay }}>\n <ContextMenuCtx.Provider value={{ showContextMenu, hideContextMenu, isContextMenuVisible: !!data }}>\n {children}\n {data && <ContextMenuPortal onHide={hideContextMenu} {...data} />}\n </ContextMenuCtx.Provider>\n </ContextMenuSettingsCtx.Provider>\n );\n}\n\n/**\n * Hook returning functions that show and hide the context menu.\n */\nexport function useContextMenu() {\n return useContext(ContextMenuCtx);\n}\n","import { Portal } from '@mantine/core';\nimport { useHotkeys, useWindowEvent } from '@mantine/hooks';\nimport { ContextMenu, type ContextMenuProps } from './ContextMenu';\nimport { ContextMenuOverlay } from './ContextMenuOverlay';\n\nexport type ContextMenuPortalProps = ContextMenuProps & {\n zIndex?: number;\n};\n\nexport function ContextMenuPortal({ onHide, zIndex, ...otherProps }: ContextMenuPortalProps) {\n useWindowEvent('resize', onHide);\n useWindowEvent('scroll', onHide);\n useHotkeys([['Escape', onHide]]);\n\n return (\n <Portal>\n <ContextMenuOverlay zIndex={zIndex} onHide={onHide}>\n <ContextMenu {...otherProps} onHide={onHide} />\n </ContextMenuOverlay>\n </Portal>\n );\n}\n","export type ContextMenuOverlayProps = React.PropsWithChildren<{\n zIndex: number | undefined;\n onHide: () => void;\n}>;\n\nexport function ContextMenuOverlay({ zIndex, children, onHide }: ContextMenuOverlayProps) {\n const handleHide = (e: React.MouseEvent) => {\n e.preventDefault();\n onHide();\n };\n return (\n <div className=\"mantine-contextmenu-overlay\" style={{ zIndex }} onClick={handleHide} onContextMenu={handleHide}>\n {children}\n </div>\n );\n}\n","/**\n * Utility function that returns a humanized version of a string, e.g. \"camelCase\" -> \"Camel Case\"\n */\nexport function humanize(value: string) {\n const str = value\n .replace(/([a-z\\d])([A-Z]+)/g, '$1 $2')\n .replace(/\\W|_/g, ' ')\n .trim()\n .toLowerCase();\n return `${str.charAt(0).toUpperCase()}${str.slice(1)}`;\n}\n"],"mappings":"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","names":["package_exports","__export","ContextMenuCtx","ContextMenuDivider","ContextMenuItem","ContextMenuPortal","ContextMenuProvider","ContextMenuSettingsCtx","humanize","useContextMenu","__toCommonJS","import_core","import_clsx","import_jsx_runtime","ContextMenuDivider","className","style","clsx","import_core","import_hooks","import_clsx","import_react","import_core","import_hooks","import_clsx","import_react","import_react","import_core","import_hooks","import_jsx_runtime","ContextMenuOverlay","zIndex","children","onHide","handleHide","e","import_jsx_runtime","ContextMenuPortal","onHide","zIndex","otherProps","ContextMenuOverlay","ContextMenu","import_jsx_runtime","DEFAULT_SETTINGS","ContextMenuSettingsCtx","ContextMenuCtx","ContextMenuProvider","zIndex","shadow","borderRadius","submenuDelay","children","data","setData","hideContextMenu","showContextMenu","content","options","e","ContextMenuPortal","useContextMenu","humanize","value","str","import_jsx_runtime","ContextMenu","x","y","content","zIndex","onHide","className","style","classNames","styles","shadow","borderRadius","ContextMenuSettingsCtx","paperRef","width","height","windowWidth","windowHeight","dir","clsx","md","mdSpacing","key","hidden","onClick","items","title","otherOptions","ContextMenuItem","humanize","ContextMenuDivider","import_jsx_runtime","ContextMenuItem","className","style","icon","title","color","disabled","onClick","onHide","items","ref","submenuDelay","ContextMenuSettingsCtx","submenuPosition","setSubmenuPosition","handleClick","e","startShowingSubmenu","stopShowingSubmenu","y","x","startHidingSubmenu","stopHidingSubmenu","showSubmenu","hideSubmenu","hasItemsAndIsNotDisabled","theme","colors","parsedColor","clsx","ContextMenu"]}
1
+ {"version":3,"sources":["../package/index.ts","../package/ContextMenuDivider.tsx","../package/ContextMenuItem.tsx","../package/ContextMenu.tsx","../package/ContextMenuProvider.tsx","../package/ContextMenuPortal.tsx","../package/ContextMenuOverlay.tsx","../package/utils.ts"],"sourcesContent":["'use client';\n\nexport * from './ContextMenuDivider';\nexport * from './ContextMenuItem';\nexport * from './ContextMenuPortal';\nexport * from './ContextMenuProvider';\nexport * from './types';\nexport * from './utils';\n","import { Box } from '@mantine/core';\nimport clsx from 'clsx';\nimport type { ContextMenuItemOptions } from './types';\n\nexport type ContextMenuDividerProps = Pick<ContextMenuItemOptions, 'className' | 'style'>;\n\nexport function ContextMenuDivider({ className, style }: ContextMenuDividerProps) {\n return <Box className={clsx('mantine-contextmenu-divider', className)} style={style} />;\n}\n","import { Box, UnstyledButton, parseThemeColor, rgba } from '@mantine/core';\nimport { useMediaQuery, useTimeout } from '@mantine/hooks';\nimport clsx from 'clsx';\nimport { useContext, useRef, useState, type MouseEventHandler } from 'react';\nimport { ContextMenu } from './ContextMenu';\nimport { ContextMenuSettingsCtx } from './ContextMenuProvider';\nimport type { ContextMenuContent, ContextMenuItemOptions, WithRequiredProperty } from './types';\n\nexport function ContextMenuItem({\n className,\n style,\n icon,\n title,\n color,\n disabled,\n onClick,\n onHide,\n items,\n}: WithRequiredProperty<Omit<ContextMenuItemOptions, 'key'>, 'title'> & { onHide: () => void }) {\n const ref = useRef<HTMLButtonElement>(null);\n const { submenuDelay } = useContext(ContextMenuSettingsCtx);\n\n const hoverAvailable = useMediaQuery(`(hover: hover)`);\n\n const [submenuPosition, setSubmenuPosition] = useState<{ x: number; y: number } | null>(null);\n\n const doShowSubmenu = () => {\n const { top: y, right: x } = ref.current!.getBoundingClientRect();\n setSubmenuPosition({ x, y });\n };\n\n const { start: startShowingSubmenu, clear: stopShowingSubmenu } = useTimeout(doShowSubmenu, submenuDelay);\n\n const { start: startHidingSubmenu, clear: stopHidingSubmenu } = useTimeout(() => {\n setSubmenuPosition(null);\n }, submenuDelay);\n\n const showSubmenu = () => {\n stopHidingSubmenu();\n startShowingSubmenu();\n };\n\n const instantlyShowSubmenu = () => {\n stopHidingSubmenu();\n doShowSubmenu();\n };\n\n const hideSubmenu = () => {\n stopShowingSubmenu();\n startHidingSubmenu();\n };\n\n const hasSubmenu = items && !disabled;\n const showSubmenuOnHover = hasSubmenu && hoverAvailable;\n\n const handleClick: MouseEventHandler<HTMLButtonElement> | undefined = onClick\n ? (e) => {\n onHide();\n onClick!(e);\n }\n : hasSubmenu && !hoverAvailable\n ? (e) => {\n e.stopPropagation();\n instantlyShowSubmenu();\n }\n : undefined;\n\n return (\n <div\n onMouseEnter={showSubmenuOnHover ? showSubmenu : undefined}\n onMouseLeave={showSubmenuOnHover ? hideSubmenu : undefined}\n >\n <UnstyledButton\n ref={ref}\n style={[\n (theme) => {\n const { colors } = theme;\n const parsedColor = color ? parseThemeColor({ color, theme }).value : undefined;\n return {\n '--mantine-contextmenu-item-button-color': parsedColor ? parsedColor : 'var(--mantine-color-text)',\n '--mantine-contextmenu-item-button-hover-bg-color-light': parsedColor\n ? rgba(parsedColor, 0.08)\n : rgba(colors.gray[4], 0.25),\n '--mantine-contextmenu-item-button-hover-bg-color-dark': parsedColor\n ? rgba(parsedColor, 0.15)\n : rgba(colors.dark[3], 0.25),\n '--mantine-contextmenu-item-button-pressed-bg-color-light': parsedColor\n ? rgba(parsedColor, 0.2)\n : rgba(colors.gray[4], 0.5),\n '--mantine-contextmenu-item-button-pressed-bg-color-dark': parsedColor\n ? rgba(parsedColor, 0.3)\n : rgba(colors.dark[3], 0.5),\n };\n },\n style,\n ]}\n className={clsx('mantine-contextmenu-item-button', className)}\n disabled={disabled}\n onClick={handleClick}\n >\n {icon && (\n <Box fz={0} mr=\"xs\" mt={-2}>\n {icon}\n </Box>\n )}\n <div className=\"mantine-contextmenu-item-button-title\">{title}</div>\n {items && (\n <Box fz={10} mt={-2} ml=\"xs\">\n ▶\n </Box>\n )}\n </UnstyledButton>\n {submenuPosition && <ContextMenu content={items as ContextMenuContent} onHide={onHide} {...submenuPosition} />}\n </div>\n );\n}\n","import { Paper, px, useDirection } from '@mantine/core';\nimport { useResizeObserver } from '@mantine/hooks';\nimport clsx from 'clsx';\nimport { useContext } from 'react';\nimport { ContextMenuDivider } from './ContextMenuDivider';\nimport { ContextMenuItem } from './ContextMenuItem';\nimport { ContextMenuSettingsCtx } from './ContextMenuProvider';\nimport type { ContextMenuContent, ContextMenuOptions } from './types';\nimport { humanize } from './utils';\n\nexport type ContextMenuInstanceOptions = {\n x: number;\n y: number;\n content: ContextMenuContent;\n};\n\nexport type ContextMenuProps = ContextMenuOptions &\n ContextMenuInstanceOptions & {\n onHide: () => void;\n };\n\nexport function ContextMenu({ x, y, content, zIndex, onHide, className, style, classNames, styles }: ContextMenuProps) {\n const { shadow, borderRadius } = useContext(ContextMenuSettingsCtx);\n const [paperRef] = useResizeObserver<HTMLDivElement>();\n const { width, height } = paperRef.current?.getBoundingClientRect() || { width: 0, height: 0 };\n\n let windowWidth = 0;\n let windowHeight = 0;\n if (typeof window !== 'undefined') ({ innerWidth: windowWidth, innerHeight: windowHeight } = window);\n\n const { dir } = useDirection();\n\n return (\n <Paper\n ref={paperRef}\n shadow={shadow}\n radius={borderRadius}\n className={clsx('mantine-contextmenu', className, classNames?.root)}\n style={[\n ({ spacing: { md } }) => {\n const mdSpacing = px(md) as number;\n return {\n zIndex,\n top: y + height + mdSpacing > windowHeight ? windowHeight - height - mdSpacing : y,\n left:\n dir === 'ltr'\n ? x + width + mdSpacing > windowWidth\n ? windowWidth - width - mdSpacing\n : x\n : windowWidth - mdSpacing - (x - width - mdSpacing < 0 ? width + mdSpacing : x),\n };\n },\n style,\n styles?.root,\n ]}\n >\n {Array.isArray(content)\n ? content.map(({ key, hidden, className, style, onClick, items, title, ...otherOptions }) =>\n hidden ? null : onClick || items ? (\n <ContextMenuItem\n key={key}\n className={clsx(classNames?.item, className)}\n style={[styles?.item, style]}\n title={title ?? humanize(key)}\n onClick={onClick}\n onHide={onHide}\n items={items}\n {...otherOptions}\n />\n ) : (\n <ContextMenuDivider\n key={key}\n className={clsx(classNames?.divider, className)}\n style={[styles?.divider, style]}\n />\n )\n )\n : content(onHide)}\n </Paper>\n );\n}\n","import { createContext, useContext, useState } from 'react';\nimport type { ContextMenuInstanceOptions } from './ContextMenu';\nimport { ContextMenuPortal } from './ContextMenuPortal';\nimport type {\n ContextMenuOptions,\n ContextMenuProviderProps,\n ContextMenuSettings,\n HideContextMenuFunction,\n ShowContextMenuFunction,\n WithRequiredProperty,\n} from './types';\n\nconst DEFAULT_SETTINGS: WithRequiredProperty<ContextMenuSettings, 'shadow' | 'borderRadius' | 'submenuDelay'> = {\n shadow: 'sm',\n borderRadius: 'xs',\n submenuDelay: 500,\n};\n\nexport const ContextMenuSettingsCtx = createContext(DEFAULT_SETTINGS);\nexport const ContextMenuCtx = createContext<{\n /**\n * Function that shows the context menu.\n */\n showContextMenu: ShowContextMenuFunction;\n\n /**\n * Function that hides the context menu.\n */\n hideContextMenu: HideContextMenuFunction;\n\n /**\n * Boolean indicating whether the context menu is currently visible.\n */\n isContextMenuVisible: boolean;\n}>({ showContextMenu: () => () => undefined, hideContextMenu: () => undefined, isContextMenuVisible: false });\n\n/**\n * Provider that allows to show a context menu anywhere in your application.\n * If you wrap your application with this provider, you can use the `useContextMenu` hook\n * anywhere in the component tree to access a function that shows the context menu.\n */\nexport function ContextMenuProvider({\n zIndex = 9999,\n shadow = DEFAULT_SETTINGS.shadow,\n borderRadius = DEFAULT_SETTINGS.borderRadius,\n submenuDelay = DEFAULT_SETTINGS.submenuDelay,\n children,\n}: ContextMenuProviderProps) {\n const [data, setData] = useState<(ContextMenuInstanceOptions & ContextMenuOptions) | null>(null);\n\n const hideContextMenu = () => {\n setData(null);\n };\n\n const showContextMenu: ShowContextMenuFunction = (content, options) => (e) => {\n e.preventDefault();\n e.stopPropagation();\n setData({\n x: e.clientX,\n y: e.clientY,\n content,\n zIndex: options?.zIndex || zIndex,\n className: options?.className,\n style: options?.style,\n classNames: options?.classNames,\n styles: options?.styles,\n });\n };\n\n return (\n <ContextMenuSettingsCtx.Provider value={{ shadow, borderRadius, submenuDelay }}>\n <ContextMenuCtx.Provider value={{ showContextMenu, hideContextMenu, isContextMenuVisible: !!data }}>\n {children}\n {data && <ContextMenuPortal onHide={hideContextMenu} {...data} />}\n </ContextMenuCtx.Provider>\n </ContextMenuSettingsCtx.Provider>\n );\n}\n\n/**\n * Hook returning functions that show and hide the context menu.\n */\nexport function useContextMenu() {\n return useContext(ContextMenuCtx);\n}\n","import { Portal } from '@mantine/core';\nimport { useHotkeys, useWindowEvent } from '@mantine/hooks';\nimport { ContextMenu, type ContextMenuProps } from './ContextMenu';\nimport { ContextMenuOverlay } from './ContextMenuOverlay';\n\nexport type ContextMenuPortalProps = ContextMenuProps & {\n zIndex?: number;\n};\n\nexport function ContextMenuPortal({ onHide, zIndex, ...otherProps }: ContextMenuPortalProps) {\n useWindowEvent('resize', onHide);\n useWindowEvent('scroll', onHide);\n useHotkeys([['Escape', onHide]]);\n\n return (\n <Portal>\n <ContextMenuOverlay zIndex={zIndex} onHide={onHide}>\n <ContextMenu {...otherProps} onHide={onHide} />\n </ContextMenuOverlay>\n </Portal>\n );\n}\n","export type ContextMenuOverlayProps = React.PropsWithChildren<{\n zIndex: number | undefined;\n onHide: () => void;\n}>;\n\nexport function ContextMenuOverlay({ zIndex, children, onHide }: ContextMenuOverlayProps) {\n const handleHide = (e: React.MouseEvent) => {\n e.preventDefault();\n onHide();\n };\n return (\n <div className=\"mantine-contextmenu-overlay\" style={{ zIndex }} onClick={handleHide} onContextMenu={handleHide}>\n {children}\n </div>\n );\n}\n","/**\n * Utility function that returns a humanized version of a string, e.g. \"camelCase\" -> \"Camel Case\"\n */\nexport function humanize(value: string) {\n const str = value\n .replace(/([a-z\\d])([A-Z]+)/g, '$1 $2')\n .replace(/\\W|_/g, ' ')\n .trim()\n .toLowerCase();\n return `${str.charAt(0).toUpperCase()}${str.slice(1)}`;\n}\n"],"mappings":"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","names":["package_exports","__export","ContextMenuCtx","ContextMenuDivider","ContextMenuItem","ContextMenuPortal","ContextMenuProvider","ContextMenuSettingsCtx","humanize","useContextMenu","__toCommonJS","import_core","import_clsx","import_jsx_runtime","ContextMenuDivider","className","style","clsx","import_core","import_hooks","import_clsx","import_react","import_core","import_hooks","import_clsx","import_react","import_react","import_core","import_hooks","import_jsx_runtime","ContextMenuOverlay","zIndex","children","onHide","handleHide","e","import_jsx_runtime","ContextMenuPortal","onHide","zIndex","otherProps","ContextMenuOverlay","ContextMenu","import_jsx_runtime","DEFAULT_SETTINGS","ContextMenuSettingsCtx","ContextMenuCtx","ContextMenuProvider","zIndex","shadow","borderRadius","submenuDelay","children","data","setData","hideContextMenu","showContextMenu","content","options","e","ContextMenuPortal","useContextMenu","humanize","value","str","import_jsx_runtime","ContextMenu","x","y","content","zIndex","onHide","className","style","classNames","styles","shadow","borderRadius","ContextMenuSettingsCtx","paperRef","width","height","windowWidth","windowHeight","dir","clsx","md","mdSpacing","key","hidden","onClick","items","title","otherOptions","ContextMenuItem","humanize","ContextMenuDivider","import_jsx_runtime","ContextMenuItem","className","style","icon","title","color","disabled","onClick","onHide","items","ref","submenuDelay","ContextMenuSettingsCtx","hoverAvailable","submenuPosition","setSubmenuPosition","doShowSubmenu","y","x","startShowingSubmenu","stopShowingSubmenu","startHidingSubmenu","stopHidingSubmenu","showSubmenu","instantlyShowSubmenu","hideSubmenu","hasSubmenu","showSubmenuOnHover","handleClick","e","theme","colors","parsedColor","clsx","ContextMenu"]}
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- "use client";import{Box as _}from"@mantine/core";import G from"clsx";import{jsx as X}from"react/jsx-runtime";function E({className:e,style:t}){return X(_,{className:G("mantine-contextmenu-divider",e),style:t})}import{Box as q,UnstyledButton as ie,parseThemeColor as ue,rgba as C}from"@mantine/core";import{useTimeout as U}from"@mantine/hooks";import se from"clsx";import{useContext as me,useRef as xe,useState as pe}from"react";import{Paper as ee,px as te,useDirection as ne}from"@mantine/core";import{useResizeObserver as oe}from"@mantine/hooks";import R from"clsx";import{useContext as re}from"react";import{createContext as T,useContext as K,useState as Q}from"react";import{Portal as Z}from"@mantine/core";import{useHotkeys as J,useWindowEvent as B}from"@mantine/hooks";import{jsx as Y}from"react/jsx-runtime";function N({zIndex:e,children:t,onHide:n}){let d=s=>{s.preventDefault(),n()};return Y("div",{className:"mantine-contextmenu-overlay",style:{zIndex:e},onClick:d,onContextMenu:d,children:t})}import{jsx as H}from"react/jsx-runtime";function k({onHide:e,zIndex:t,...n}){return B("resize",e),B("scroll",e),J([["Escape",e]]),H(Z,{children:H(N,{zIndex:t,onHide:e,children:H(S,{...n,onHide:e})})})}import{jsx as W,jsxs as j}from"react/jsx-runtime";var O={shadow:"sm",borderRadius:"xs",submenuDelay:500},P=T(O),A=T({showContextMenu:()=>()=>{},hideContextMenu:()=>{},isContextMenuVisible:!1});function Se({zIndex:e=9999,shadow:t=O.shadow,borderRadius:n=O.borderRadius,submenuDelay:d=O.submenuDelay,children:s}){let[l,c]=Q(null),m=()=>{c(null)},x=(y,i)=>u=>{u.preventDefault(),u.stopPropagation(),c({x:u.clientX,y:u.clientY,content:y,zIndex:i?.zIndex||e,className:i?.className,style:i?.style,classNames:i?.classNames,styles:i?.styles})};return W(P.Provider,{value:{shadow:t,borderRadius:n,submenuDelay:d},children:j(A.Provider,{value:{showContextMenu:x,hideContextMenu:m,isContextMenuVisible:!!l},children:[s,l&&W(k,{onHide:m,...l})]})})}function Oe(){return K(A)}function F(e){let t=e.replace(/([a-z\d])([A-Z]+)/g,"$1 $2").replace(/\W|_/g," ").trim().toLowerCase();return`${t.charAt(0).toUpperCase()}${t.slice(1)}`}import{jsx as z}from"react/jsx-runtime";function S({x:e,y:t,content:n,zIndex:d,onHide:s,className:l,style:c,classNames:m,styles:x}){let{shadow:y,borderRadius:i}=re(P),[u]=oe(),{width:M,height:g}=u.current?.getBoundingClientRect()||{width:0,height:0},h=0,v=0;typeof window<"u"&&({innerWidth:h,innerHeight:v}=window);let{dir:D}=ne();return z(ee,{ref:u,shadow:y,radius:i,className:R("mantine-contextmenu",l,m?.root),style:[({spacing:{md:f}})=>{let r=te(f);return{zIndex:d,top:t+g+r>v?v-g-r:t,left:D==="ltr"?e+M+r>h?h-M-r:e:h-r-(e-M-r<0?M+r:e)}},c,x?.root],children:Array.isArray(n)?n.map(({key:f,hidden:r,className:w,style:b,onClick:p,items:a,title:o,...V})=>r?null:p||a?z(L,{className:R(m?.item,w),style:[x?.item,b],title:o??F(f),onClick:p,onHide:s,items:a,...V},f):z(E,{className:R(m?.divider,w),style:[x?.divider,b]},f)):n(s)})}import{jsx as I,jsxs as $}from"react/jsx-runtime";function L({className:e,style:t,icon:n,title:d,color:s,disabled:l,onClick:c,onHide:m,items:x}){let y=xe(null),{submenuDelay:i}=me(P),[u,M]=pe(null),g=c?p=>{m(),c(p)}:void 0,{start:h,clear:v}=U(()=>{let{top:p,right:a}=y.current.getBoundingClientRect();M({x:a,y:p})},i),{start:D,clear:f}=U(()=>{M(null)},i),r=()=>{f(),h()},w=()=>{v(),D()},b=x&&!l;return $("div",{onMouseEnter:b?r:void 0,onMouseLeave:b?w:void 0,children:[$(ie,{ref:y,style:[p=>{let{colors:a}=p,o=s?ue({color:s,theme:p}).value:void 0;return{"--mantine-contextmenu-item-button-color":o||"var(--mantine-color-text)","--mantine-contextmenu-item-button-hover-bg-color-light":o?C(o,.08):C(a.gray[4],.25),"--mantine-contextmenu-item-button-hover-bg-color-dark":o?C(o,.15):C(a.dark[3],.25),"--mantine-contextmenu-item-button-pressed-bg-color-light":o?C(o,.2):C(a.gray[4],.5),"--mantine-contextmenu-item-button-pressed-bg-color-dark":o?C(o,.3):C(a.dark[3],.5)}},t],className:se("mantine-contextmenu-item-button",e),disabled:l,onClick:g,children:[n&&I(q,{fz:0,mr:"xs",mt:-2,children:n}),I("div",{className:"mantine-contextmenu-item-button-title",children:d}),x&&I(q,{fz:10,mt:-2,ml:"xs",children:"\u25B6"})]}),u&&I(S,{content:x,onHide:m,...u})]})}export{A as ContextMenuCtx,E as ContextMenuDivider,L as ContextMenuItem,k as ContextMenuPortal,Se as ContextMenuProvider,P as ContextMenuSettingsCtx,F as humanize,Oe as useContextMenu};
1
+ "use client";import{Box as X}from"@mantine/core";import Y from"clsx";import{jsx as Z}from"react/jsx-runtime";function W({className:e,style:t}){return Z(X,{className:Y("mantine-contextmenu-divider",e),style:t})}import{Box as _,UnstyledButton as me,parseThemeColor as xe,rgba as l}from"@mantine/core";import{useMediaQuery as ae,useTimeout as G}from"@mantine/hooks";import pe from"clsx";import{useContext as de,useRef as le,useState as ce}from"react";import{Paper as oe,px as re,useDirection as ue}from"@mantine/core";import{useResizeObserver as ie}from"@mantine/hooks";import N from"clsx";import{useContext as se}from"react";import{createContext as q,useContext as ee,useState as te}from"react";import{Portal as K}from"@mantine/core";import{useHotkeys as j,useWindowEvent as A}from"@mantine/hooks";import{jsx as J}from"react/jsx-runtime";function T({zIndex:e,children:t,onHide:n}){let a=s=>{s.preventDefault(),n()};return J("div",{className:"mantine-contextmenu-overlay",style:{zIndex:e},onClick:a,onContextMenu:a,children:t})}import{jsx as B}from"react/jsx-runtime";function F({onHide:e,zIndex:t,...n}){return A("resize",e),A("scroll",e),j([["Escape",e]]),B(K,{children:B(T,{zIndex:t,onHide:e,children:B(I,{...n,onHide:e})})})}import{jsx as L,jsxs as ne}from"react/jsx-runtime";var R={shadow:"sm",borderRadius:"xs",submenuDelay:500},g=q(R),U=q({showContextMenu:()=>()=>{},hideContextMenu:()=>{},isContextMenuVisible:!1});function Re({zIndex:e=9999,shadow:t=R.shadow,borderRadius:n=R.borderRadius,submenuDelay:a=R.submenuDelay,children:s}){let[p,c]=te(null),m=()=>{c(null)},x=(y,r)=>u=>{u.preventDefault(),u.stopPropagation(),c({x:u.clientX,y:u.clientY,content:y,zIndex:r?.zIndex||e,className:r?.className,style:r?.style,classNames:r?.classNames,styles:r?.styles})};return L(g.Provider,{value:{shadow:t,borderRadius:n,submenuDelay:a},children:ne(U.Provider,{value:{showContextMenu:x,hideContextMenu:m,isContextMenuVisible:!!p},children:[s,p&&L(F,{onHide:m,...p})]})})}function De(){return ee(U)}function $(e){let t=e.replace(/([a-z\d])([A-Z]+)/g,"$1 $2").replace(/\W|_/g," ").trim().toLowerCase();return`${t.charAt(0).toUpperCase()}${t.slice(1)}`}import{jsx as k}from"react/jsx-runtime";function I({x:e,y:t,content:n,zIndex:a,onHide:s,className:p,style:c,classNames:m,styles:x}){let{shadow:y,borderRadius:r}=se(g),[u]=ie(),{width:C,height:v}=u.current?.getBoundingClientRect()||{width:0,height:0},M=0,b=0;typeof window<"u"&&({innerWidth:M,innerHeight:b}=window);let{dir:z}=ue();return k(oe,{ref:u,shadow:y,radius:r,className:N("mantine-contextmenu",p,m?.root),style:[({spacing:{md:f}})=>{let o=re(f);return{zIndex:a,top:t+v+o>b?b-v-o:t,left:z==="ltr"?e+C+o>M?M-C-o:e:M-o-(e-C-o<0?C+o:e)}},c,x?.root],children:Array.isArray(n)?n.map(({key:f,hidden:o,className:w,style:S,onClick:O,items:P,title:H,...E})=>o?null:O||P?k(V,{className:N(m?.item,w),style:[x?.item,S],title:H??$(f),onClick:O,onHide:s,items:P,...E},f):k(W,{className:N(m?.divider,w),style:[x?.divider,S]},f)):n(s)})}import{jsx as D,jsxs as Q}from"react/jsx-runtime";function V({className:e,style:t,icon:n,title:a,color:s,disabled:p,onClick:c,onHide:m,items:x}){let y=le(null),{submenuDelay:r}=de(g),u=ae("(hover: hover)"),[C,v]=ce(null),M=()=>{let{top:d,right:h}=y.current.getBoundingClientRect();v({x:h,y:d})},{start:b,clear:z}=G(M,r),{start:f,clear:o}=G(()=>{v(null)},r),w=()=>{o(),b()},S=()=>{o(),M()},O=()=>{z(),f()},P=x&&!p,H=P&&u,E=c?d=>{m(),c(d)}:P&&!u?d=>{d.stopPropagation(),S()}:void 0;return Q("div",{onMouseEnter:H?w:void 0,onMouseLeave:H?O:void 0,children:[Q(me,{ref:y,style:[d=>{let{colors:h}=d,i=s?xe({color:s,theme:d}).value:void 0;return{"--mantine-contextmenu-item-button-color":i||"var(--mantine-color-text)","--mantine-contextmenu-item-button-hover-bg-color-light":i?l(i,.08):l(h.gray[4],.25),"--mantine-contextmenu-item-button-hover-bg-color-dark":i?l(i,.15):l(h.dark[3],.25),"--mantine-contextmenu-item-button-pressed-bg-color-light":i?l(i,.2):l(h.gray[4],.5),"--mantine-contextmenu-item-button-pressed-bg-color-dark":i?l(i,.3):l(h.dark[3],.5)}},t],className:pe("mantine-contextmenu-item-button",e),disabled:p,onClick:E,children:[n&&D(_,{fz:0,mr:"xs",mt:-2,children:n}),D("div",{className:"mantine-contextmenu-item-button-title",children:a}),x&&D(_,{fz:10,mt:-2,ml:"xs",children:"\u25B6"})]}),C&&D(I,{content:x,onHide:m,...C})]})}export{U as ContextMenuCtx,W as ContextMenuDivider,V as ContextMenuItem,F as ContextMenuPortal,Re as ContextMenuProvider,g as ContextMenuSettingsCtx,$ as humanize,De as useContextMenu};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../package/ContextMenuDivider.tsx","../package/ContextMenuItem.tsx","../package/ContextMenu.tsx","../package/ContextMenuProvider.tsx","../package/ContextMenuPortal.tsx","../package/ContextMenuOverlay.tsx","../package/utils.ts"],"sourcesContent":["import { Box } from '@mantine/core';\nimport clsx from 'clsx';\nimport type { ContextMenuItemOptions } from './types';\n\nexport type ContextMenuDividerProps = Pick<ContextMenuItemOptions, 'className' | 'style'>;\n\nexport function ContextMenuDivider({ className, style }: ContextMenuDividerProps) {\n return <Box className={clsx('mantine-contextmenu-divider', className)} style={style} />;\n}\n","import { Box, UnstyledButton, parseThemeColor, rgba } from '@mantine/core';\nimport { useTimeout } from '@mantine/hooks';\nimport clsx from 'clsx';\nimport { useContext, useRef, useState, type MouseEventHandler } from 'react';\nimport { ContextMenu } from './ContextMenu';\nimport { ContextMenuSettingsCtx } from './ContextMenuProvider';\nimport type { ContextMenuContent, ContextMenuItemOptions, WithRequiredProperty } from './types';\n\nexport function ContextMenuItem({\n className,\n style,\n icon,\n title,\n color,\n disabled,\n onClick,\n onHide,\n items,\n}: WithRequiredProperty<Omit<ContextMenuItemOptions, 'key'>, 'title'> & { onHide: () => void }) {\n const ref = useRef<HTMLButtonElement>(null);\n const { submenuDelay } = useContext(ContextMenuSettingsCtx);\n\n const [submenuPosition, setSubmenuPosition] = useState<{ x: number; y: number } | null>(null);\n\n const handleClick: MouseEventHandler<HTMLButtonElement> | undefined = onClick\n ? (e) => {\n onHide();\n onClick!(e);\n }\n : undefined;\n\n const { start: startShowingSubmenu, clear: stopShowingSubmenu } = useTimeout(() => {\n const { top: y, right: x } = ref.current!.getBoundingClientRect();\n setSubmenuPosition({ x, y });\n }, submenuDelay);\n\n const { start: startHidingSubmenu, clear: stopHidingSubmenu } = useTimeout(() => {\n setSubmenuPosition(null);\n }, submenuDelay);\n\n const showSubmenu = () => {\n stopHidingSubmenu();\n startShowingSubmenu();\n };\n\n const hideSubmenu = () => {\n stopShowingSubmenu();\n startHidingSubmenu();\n };\n\n const hasItemsAndIsNotDisabled = items && !disabled;\n\n return (\n <div\n onMouseEnter={hasItemsAndIsNotDisabled ? showSubmenu : undefined}\n onMouseLeave={hasItemsAndIsNotDisabled ? hideSubmenu : undefined}\n >\n <UnstyledButton\n ref={ref}\n style={[\n (theme) => {\n const { colors } = theme;\n const parsedColor = color ? parseThemeColor({ color, theme }).value : undefined;\n return {\n '--mantine-contextmenu-item-button-color': parsedColor ? parsedColor : 'var(--mantine-color-text)',\n '--mantine-contextmenu-item-button-hover-bg-color-light': parsedColor\n ? rgba(parsedColor, 0.08)\n : rgba(colors.gray[4], 0.25),\n '--mantine-contextmenu-item-button-hover-bg-color-dark': parsedColor\n ? rgba(parsedColor, 0.15)\n : rgba(colors.dark[3], 0.25),\n '--mantine-contextmenu-item-button-pressed-bg-color-light': parsedColor\n ? rgba(parsedColor, 0.2)\n : rgba(colors.gray[4], 0.5),\n '--mantine-contextmenu-item-button-pressed-bg-color-dark': parsedColor\n ? rgba(parsedColor, 0.3)\n : rgba(colors.dark[3], 0.5),\n };\n },\n style,\n ]}\n className={clsx('mantine-contextmenu-item-button', className)}\n disabled={disabled}\n onClick={handleClick}\n >\n {icon && (\n <Box fz={0} mr=\"xs\" mt={-2}>\n {icon}\n </Box>\n )}\n <div className=\"mantine-contextmenu-item-button-title\">{title}</div>\n {items && (\n <Box fz={10} mt={-2} ml=\"xs\">\n ▶\n </Box>\n )}\n </UnstyledButton>\n {submenuPosition && <ContextMenu content={items as ContextMenuContent} onHide={onHide} {...submenuPosition} />}\n </div>\n );\n}\n","import { Paper, px, useDirection } from '@mantine/core';\nimport { useResizeObserver } from '@mantine/hooks';\nimport clsx from 'clsx';\nimport { useContext } from 'react';\nimport { ContextMenuDivider } from './ContextMenuDivider';\nimport { ContextMenuItem } from './ContextMenuItem';\nimport { ContextMenuSettingsCtx } from './ContextMenuProvider';\nimport type { ContextMenuContent, ContextMenuOptions } from './types';\nimport { humanize } from './utils';\n\nexport type ContextMenuInstanceOptions = {\n x: number;\n y: number;\n content: ContextMenuContent;\n};\n\nexport type ContextMenuProps = ContextMenuOptions &\n ContextMenuInstanceOptions & {\n onHide: () => void;\n };\n\nexport function ContextMenu({ x, y, content, zIndex, onHide, className, style, classNames, styles }: ContextMenuProps) {\n const { shadow, borderRadius } = useContext(ContextMenuSettingsCtx);\n const [paperRef] = useResizeObserver<HTMLDivElement>();\n const { width, height } = paperRef.current?.getBoundingClientRect() || { width: 0, height: 0 };\n\n let windowWidth = 0;\n let windowHeight = 0;\n if (typeof window !== 'undefined') ({ innerWidth: windowWidth, innerHeight: windowHeight } = window);\n\n const { dir } = useDirection();\n\n return (\n <Paper\n ref={paperRef}\n shadow={shadow}\n radius={borderRadius}\n className={clsx('mantine-contextmenu', className, classNames?.root)}\n style={[\n ({ spacing: { md } }) => {\n const mdSpacing = px(md) as number;\n return {\n zIndex,\n top: y + height + mdSpacing > windowHeight ? windowHeight - height - mdSpacing : y,\n left:\n dir === 'ltr'\n ? x + width + mdSpacing > windowWidth\n ? windowWidth - width - mdSpacing\n : x\n : windowWidth - mdSpacing - (x - width - mdSpacing < 0 ? width + mdSpacing : x),\n };\n },\n style,\n styles?.root,\n ]}\n >\n {Array.isArray(content)\n ? content.map(({ key, hidden, className, style, onClick, items, title, ...otherOptions }) =>\n hidden ? null : onClick || items ? (\n <ContextMenuItem\n key={key}\n className={clsx(classNames?.item, className)}\n style={[styles?.item, style]}\n title={title ?? humanize(key)}\n onClick={onClick}\n onHide={onHide}\n items={items}\n {...otherOptions}\n />\n ) : (\n <ContextMenuDivider\n key={key}\n className={clsx(classNames?.divider, className)}\n style={[styles?.divider, style]}\n />\n )\n )\n : content(onHide)}\n </Paper>\n );\n}\n","import { createContext, useContext, useState } from 'react';\nimport type { ContextMenuInstanceOptions } from './ContextMenu';\nimport { ContextMenuPortal } from './ContextMenuPortal';\nimport type {\n ContextMenuOptions,\n ContextMenuProviderProps,\n ContextMenuSettings,\n HideContextMenuFunction,\n ShowContextMenuFunction,\n WithRequiredProperty,\n} from './types';\n\nconst DEFAULT_SETTINGS: WithRequiredProperty<ContextMenuSettings, 'shadow' | 'borderRadius' | 'submenuDelay'> = {\n shadow: 'sm',\n borderRadius: 'xs',\n submenuDelay: 500,\n};\n\nexport const ContextMenuSettingsCtx = createContext(DEFAULT_SETTINGS);\nexport const ContextMenuCtx = createContext<{\n /**\n * Function that shows the context menu.\n */\n showContextMenu: ShowContextMenuFunction;\n\n /**\n * Function that hides the context menu.\n */\n hideContextMenu: HideContextMenuFunction;\n\n /**\n * Boolean indicating whether the context menu is currently visible.\n */\n isContextMenuVisible: boolean;\n}>({ showContextMenu: () => () => undefined, hideContextMenu: () => undefined, isContextMenuVisible: false });\n\n/**\n * Provider that allows to show a context menu anywhere in your application.\n * If you wrap your application with this provider, you can use the `useContextMenu` hook\n * anywhere in the component tree to access a function that shows the context menu.\n */\nexport function ContextMenuProvider({\n zIndex = 9999,\n shadow = DEFAULT_SETTINGS.shadow,\n borderRadius = DEFAULT_SETTINGS.borderRadius,\n submenuDelay = DEFAULT_SETTINGS.submenuDelay,\n children,\n}: ContextMenuProviderProps) {\n const [data, setData] = useState<(ContextMenuInstanceOptions & ContextMenuOptions) | null>(null);\n\n const hideContextMenu = () => {\n setData(null);\n };\n\n const showContextMenu: ShowContextMenuFunction = (content, options) => (e) => {\n e.preventDefault();\n e.stopPropagation();\n setData({\n x: e.clientX,\n y: e.clientY,\n content,\n zIndex: options?.zIndex || zIndex,\n className: options?.className,\n style: options?.style,\n classNames: options?.classNames,\n styles: options?.styles,\n });\n };\n\n return (\n <ContextMenuSettingsCtx.Provider value={{ shadow, borderRadius, submenuDelay }}>\n <ContextMenuCtx.Provider value={{ showContextMenu, hideContextMenu, isContextMenuVisible: !!data }}>\n {children}\n {data && <ContextMenuPortal onHide={hideContextMenu} {...data} />}\n </ContextMenuCtx.Provider>\n </ContextMenuSettingsCtx.Provider>\n );\n}\n\n/**\n * Hook returning functions that show and hide the context menu.\n */\nexport function useContextMenu() {\n return useContext(ContextMenuCtx);\n}\n","import { Portal } from '@mantine/core';\nimport { useHotkeys, useWindowEvent } from '@mantine/hooks';\nimport { ContextMenu, type ContextMenuProps } from './ContextMenu';\nimport { ContextMenuOverlay } from './ContextMenuOverlay';\n\nexport type ContextMenuPortalProps = ContextMenuProps & {\n zIndex?: number;\n};\n\nexport function ContextMenuPortal({ onHide, zIndex, ...otherProps }: ContextMenuPortalProps) {\n useWindowEvent('resize', onHide);\n useWindowEvent('scroll', onHide);\n useHotkeys([['Escape', onHide]]);\n\n return (\n <Portal>\n <ContextMenuOverlay zIndex={zIndex} onHide={onHide}>\n <ContextMenu {...otherProps} onHide={onHide} />\n </ContextMenuOverlay>\n </Portal>\n );\n}\n","export type ContextMenuOverlayProps = React.PropsWithChildren<{\n zIndex: number | undefined;\n onHide: () => void;\n}>;\n\nexport function ContextMenuOverlay({ zIndex, children, onHide }: ContextMenuOverlayProps) {\n const handleHide = (e: React.MouseEvent) => {\n e.preventDefault();\n onHide();\n };\n return (\n <div className=\"mantine-contextmenu-overlay\" style={{ zIndex }} onClick={handleHide} onContextMenu={handleHide}>\n {children}\n </div>\n );\n}\n","/**\n * Utility function that returns a humanized version of a string, e.g. \"camelCase\" -> \"Camel Case\"\n */\nexport function humanize(value: string) {\n const str = value\n .replace(/([a-z\\d])([A-Z]+)/g, '$1 $2')\n .replace(/\\W|_/g, ' ')\n .trim()\n .toLowerCase();\n return `${str.charAt(0).toUpperCase()}${str.slice(1)}`;\n}\n"],"mappings":"aAAA,OAAS,OAAAA,MAAW,gBACpB,OAAOC,MAAU,OAMR,cAAAC,MAAA,oBADF,SAASC,EAAmB,CAAE,UAAAC,EAAW,MAAAC,CAAM,EAA4B,CAChF,OAAOH,EAACF,EAAA,CAAI,UAAWC,EAAK,8BAA+BG,CAAS,EAAG,MAAOC,EAAO,CACvF,CCRA,OAAS,OAAAC,EAAK,kBAAAC,GAAgB,mBAAAC,GAAiB,QAAAC,MAAY,gBAC3D,OAAS,cAAAC,MAAkB,iBAC3B,OAAOC,OAAU,OACjB,OAAS,cAAAC,GAAY,UAAAC,GAAQ,YAAAC,OAAwC,QCHrE,OAAS,SAAAC,GAAO,MAAAC,GAAI,gBAAAC,OAAoB,gBACxC,OAAS,qBAAAC,OAAyB,iBAClC,OAAOC,MAAU,OACjB,OAAS,cAAAC,OAAkB,QCH3B,OAAS,iBAAAC,EAAe,cAAAC,EAAY,YAAAC,MAAgB,QCApD,OAAS,UAAAC,MAAc,gBACvB,OAAS,cAAAC,EAAY,kBAAAC,MAAsB,iBCUvC,cAAAC,MAAA,oBANG,SAASC,EAAmB,CAAE,OAAAC,EAAQ,SAAAC,EAAU,OAAAC,CAAO,EAA4B,CACxF,IAAMC,EAAcC,GAAwB,CAC1CA,EAAE,eAAe,EACjBF,EAAO,CACT,EACA,OACEJ,EAAC,OAAI,UAAU,8BAA8B,MAAO,CAAE,OAAAE,CAAO,EAAG,QAASG,EAAY,cAAeA,EACjG,SAAAF,EACH,CAEJ,CDEQ,cAAAI,MAAA,oBARD,SAASC,EAAkB,CAAE,OAAAC,EAAQ,OAAAC,EAAQ,GAAGC,CAAW,EAA2B,CAC3F,OAAAC,EAAe,SAAUH,CAAM,EAC/BG,EAAe,SAAUH,CAAM,EAC/BI,EAAW,CAAC,CAAC,SAAUJ,CAAM,CAAC,CAAC,EAG7BF,EAACO,EAAA,CACC,SAAAP,EAACQ,EAAA,CAAmB,OAAQL,EAAQ,OAAQD,EAC1C,SAAAF,EAACS,EAAA,CAAa,GAAGL,EAAY,OAAQF,EAAQ,EAC/C,EACF,CAEJ,CDkDM,OAEW,OAAAQ,EAFX,QAAAC,MAAA,oBA3DN,IAAMC,EAA0G,CAC9G,OAAQ,KACR,aAAc,KACd,aAAc,GAChB,EAEaC,EAAyBC,EAAcF,CAAgB,EACvDG,EAAiBD,EAe3B,CAAE,gBAAiB,IAAM,IAAG,GAAc,gBAAiB,IAAG,GAAc,qBAAsB,EAAM,CAAC,EAOrG,SAASE,GAAoB,CAClC,OAAAC,EAAS,KACT,OAAAC,EAASN,EAAiB,OAC1B,aAAAO,EAAeP,EAAiB,aAChC,aAAAQ,EAAeR,EAAiB,aAChC,SAAAS,CACF,EAA6B,CAC3B,GAAM,CAACC,EAAMC,CAAO,EAAIC,EAAmE,IAAI,EAEzFC,EAAkB,IAAM,CAC5BF,EAAQ,IAAI,CACd,EAEMG,EAA2C,CAACC,EAASC,IAAaC,GAAM,CAC5EA,EAAE,eAAe,EACjBA,EAAE,gBAAgB,EAClBN,EAAQ,CACN,EAAGM,EAAE,QACL,EAAGA,EAAE,QACL,QAAAF,EACA,OAAQC,GAAS,QAAUX,EAC3B,UAAWW,GAAS,UACpB,MAAOA,GAAS,MAChB,WAAYA,GAAS,WACrB,OAAQA,GAAS,MACnB,CAAC,CACH,EAEA,OACElB,EAACG,EAAuB,SAAvB,CAAgC,MAAO,CAAE,OAAAK,EAAQ,aAAAC,EAAc,aAAAC,CAAa,EAC3E,SAAAT,EAACI,EAAe,SAAf,CAAwB,MAAO,CAAE,gBAAAW,EAAiB,gBAAAD,EAAiB,qBAAsB,CAAC,CAACH,CAAK,EAC9F,UAAAD,EACAC,GAAQZ,EAACoB,EAAA,CAAkB,OAAQL,EAAkB,GAAGH,EAAM,GACjE,EACF,CAEJ,CAKO,SAASS,IAAiB,CAC/B,OAAOC,EAAWjB,CAAc,CAClC,CGjFO,SAASkB,EAASC,EAAe,CACtC,IAAMC,EAAMD,EACT,QAAQ,qBAAsB,OAAO,EACrC,QAAQ,QAAS,GAAG,EACpB,KAAK,EACL,YAAY,EACf,MAAO,GAAGC,EAAI,OAAO,CAAC,EAAE,YAAY,CAAC,GAAGA,EAAI,MAAM,CAAC,CAAC,EACtD,CJiDc,cAAAC,MAAA,oBAtCP,SAASC,EAAY,CAAE,EAAAC,EAAG,EAAAC,EAAG,QAAAC,EAAS,OAAAC,EAAQ,OAAAC,EAAQ,UAAAC,EAAW,MAAAC,EAAO,WAAAC,EAAY,OAAAC,CAAO,EAAqB,CACrH,GAAM,CAAE,OAAAC,EAAQ,aAAAC,CAAa,EAAIC,GAAWC,CAAsB,EAC5D,CAACC,CAAQ,EAAIC,GAAkC,EAC/C,CAAE,MAAAC,EAAO,OAAAC,CAAO,EAAIH,EAAS,SAAS,sBAAsB,GAAK,CAAE,MAAO,EAAG,OAAQ,CAAE,EAEzFI,EAAc,EACdC,EAAe,EACf,OAAO,OAAW,MAAc,CAAE,WAAYD,EAAa,YAAaC,CAAa,EAAI,QAE7F,GAAM,CAAE,IAAAC,CAAI,EAAIC,GAAa,EAE7B,OACEtB,EAACuB,GAAA,CACC,IAAKR,EACL,OAAQJ,EACR,OAAQC,EACR,UAAWY,EAAK,sBAAuBjB,EAAWE,GAAY,IAAI,EAClE,MAAO,CACL,CAAC,CAAE,QAAS,CAAE,GAAAgB,CAAG,CAAE,IAAM,CACvB,IAAMC,EAAYC,GAAGF,CAAE,EACvB,MAAO,CACL,OAAApB,EACA,IAAKF,EAAIe,EAASQ,EAAYN,EAAeA,EAAeF,EAASQ,EAAYvB,EACjF,KACEkB,IAAQ,MACJnB,EAAIe,EAAQS,EAAYP,EACtBA,EAAcF,EAAQS,EACtBxB,EACFiB,EAAcO,GAAaxB,EAAIe,EAAQS,EAAY,EAAIT,EAAQS,EAAYxB,EACnF,CACF,EACAM,EACAE,GAAQ,IACV,EAEC,eAAM,QAAQN,CAAO,EAClBA,EAAQ,IAAI,CAAC,CAAE,IAAAwB,EAAK,OAAAC,EAAQ,UAAAtB,EAAW,MAAAC,EAAO,QAAAsB,EAAS,MAAAC,EAAO,MAAAC,EAAO,GAAGC,CAAa,IACnFJ,EAAS,KAAOC,GAAWC,EACzB/B,EAACkC,EAAA,CAEC,UAAWV,EAAKf,GAAY,KAAMF,CAAS,EAC3C,MAAO,CAACG,GAAQ,KAAMF,CAAK,EAC3B,MAAOwB,GAASG,EAASP,CAAG,EAC5B,QAASE,EACT,OAAQxB,EACR,MAAOyB,EACN,GAAGE,GAPCL,CAQP,EAEA5B,EAACoC,EAAA,CAEC,UAAWZ,EAAKf,GAAY,QAASF,CAAS,EAC9C,MAAO,CAACG,GAAQ,QAASF,CAAK,GAFzBoB,CAGP,CAEJ,EACAxB,EAAQE,CAAM,EACpB,CAEJ,CDvBM,OA6BI,OAAA+B,EA7BJ,QAAAC,MAAA,oBAjDC,SAASC,EAAgB,CAC9B,UAAAC,EACA,MAAAC,EACA,KAAAC,EACA,MAAAC,EACA,MAAAC,EACA,SAAAC,EACA,QAAAC,EACA,OAAAC,EACA,MAAAC,CACF,EAAgG,CAC9F,IAAMC,EAAMC,GAA0B,IAAI,EACpC,CAAE,aAAAC,CAAa,EAAIC,GAAWC,CAAsB,EAEpD,CAACC,EAAiBC,CAAkB,EAAIC,GAA0C,IAAI,EAEtFC,EAAgEX,EACjEY,GAAM,CACLX,EAAO,EACPD,EAASY,CAAC,CACZ,EACA,OAEE,CAAE,MAAOC,EAAqB,MAAOC,CAAmB,EAAIC,EAAW,IAAM,CACjF,GAAM,CAAE,IAAKC,EAAG,MAAOC,CAAE,EAAId,EAAI,QAAS,sBAAsB,EAChEM,EAAmB,CAAE,EAAAQ,EAAG,EAAAD,CAAE,CAAC,CAC7B,EAAGX,CAAY,EAET,CAAE,MAAOa,EAAoB,MAAOC,CAAkB,EAAIJ,EAAW,IAAM,CAC/EN,EAAmB,IAAI,CACzB,EAAGJ,CAAY,EAETe,EAAc,IAAM,CACxBD,EAAkB,EAClBN,EAAoB,CACtB,EAEMQ,EAAc,IAAM,CACxBP,EAAmB,EACnBI,EAAmB,CACrB,EAEMI,EAA2BpB,GAAS,CAACH,EAE3C,OACEP,EAAC,OACC,aAAc8B,EAA2BF,EAAc,OACvD,aAAcE,EAA2BD,EAAc,OAEvD,UAAA7B,EAAC+B,GAAA,CACC,IAAKpB,EACL,MAAO,CACJqB,GAAU,CACT,GAAM,CAAE,OAAAC,CAAO,EAAID,EACbE,EAAc5B,EAAQ6B,GAAgB,CAAE,MAAA7B,EAAO,MAAA0B,CAAM,CAAC,EAAE,MAAQ,OACtE,MAAO,CACL,0CAA2CE,GAA4B,4BACvE,yDAA0DA,EACtDE,EAAKF,EAAa,GAAI,EACtBE,EAAKH,EAAO,KAAK,CAAC,EAAG,GAAI,EAC7B,wDAAyDC,EACrDE,EAAKF,EAAa,GAAI,EACtBE,EAAKH,EAAO,KAAK,CAAC,EAAG,GAAI,EAC7B,2DAA4DC,EACxDE,EAAKF,EAAa,EAAG,EACrBE,EAAKH,EAAO,KAAK,CAAC,EAAG,EAAG,EAC5B,0DAA2DC,EACvDE,EAAKF,EAAa,EAAG,EACrBE,EAAKH,EAAO,KAAK,CAAC,EAAG,EAAG,CAC9B,CACF,EACA9B,CACF,EACA,UAAWkC,GAAK,kCAAmCnC,CAAS,EAC5D,SAAUK,EACV,QAASY,EAER,UAAAf,GACCL,EAACuC,EAAA,CAAI,GAAI,EAAG,GAAG,KAAK,GAAI,GACrB,SAAAlC,EACH,EAEFL,EAAC,OAAI,UAAU,wCAAyC,SAAAM,EAAM,EAC7DK,GACCX,EAACuC,EAAA,CAAI,GAAI,GAAI,GAAI,GAAI,GAAG,KAAK,kBAE7B,GAEJ,EACCtB,GAAmBjB,EAACwC,EAAA,CAAY,QAAS7B,EAA6B,OAAQD,EAAS,GAAGO,EAAiB,GAC9G,CAEJ","names":["Box","clsx","jsx","ContextMenuDivider","className","style","Box","UnstyledButton","parseThemeColor","rgba","useTimeout","clsx","useContext","useRef","useState","Paper","px","useDirection","useResizeObserver","clsx","useContext","createContext","useContext","useState","Portal","useHotkeys","useWindowEvent","jsx","ContextMenuOverlay","zIndex","children","onHide","handleHide","e","jsx","ContextMenuPortal","onHide","zIndex","otherProps","useWindowEvent","useHotkeys","Portal","ContextMenuOverlay","ContextMenu","jsx","jsxs","DEFAULT_SETTINGS","ContextMenuSettingsCtx","createContext","ContextMenuCtx","ContextMenuProvider","zIndex","shadow","borderRadius","submenuDelay","children","data","setData","useState","hideContextMenu","showContextMenu","content","options","e","ContextMenuPortal","useContextMenu","useContext","humanize","value","str","jsx","ContextMenu","x","y","content","zIndex","onHide","className","style","classNames","styles","shadow","borderRadius","useContext","ContextMenuSettingsCtx","paperRef","useResizeObserver","width","height","windowWidth","windowHeight","dir","useDirection","Paper","clsx","md","mdSpacing","px","key","hidden","onClick","items","title","otherOptions","ContextMenuItem","humanize","ContextMenuDivider","jsx","jsxs","ContextMenuItem","className","style","icon","title","color","disabled","onClick","onHide","items","ref","useRef","submenuDelay","useContext","ContextMenuSettingsCtx","submenuPosition","setSubmenuPosition","useState","handleClick","e","startShowingSubmenu","stopShowingSubmenu","useTimeout","y","x","startHidingSubmenu","stopHidingSubmenu","showSubmenu","hideSubmenu","hasItemsAndIsNotDisabled","UnstyledButton","theme","colors","parsedColor","parseThemeColor","rgba","clsx","Box","ContextMenu"]}
1
+ {"version":3,"sources":["../package/ContextMenuDivider.tsx","../package/ContextMenuItem.tsx","../package/ContextMenu.tsx","../package/ContextMenuProvider.tsx","../package/ContextMenuPortal.tsx","../package/ContextMenuOverlay.tsx","../package/utils.ts"],"sourcesContent":["import { Box } from '@mantine/core';\nimport clsx from 'clsx';\nimport type { ContextMenuItemOptions } from './types';\n\nexport type ContextMenuDividerProps = Pick<ContextMenuItemOptions, 'className' | 'style'>;\n\nexport function ContextMenuDivider({ className, style }: ContextMenuDividerProps) {\n return <Box className={clsx('mantine-contextmenu-divider', className)} style={style} />;\n}\n","import { Box, UnstyledButton, parseThemeColor, rgba } from '@mantine/core';\nimport { useMediaQuery, useTimeout } from '@mantine/hooks';\nimport clsx from 'clsx';\nimport { useContext, useRef, useState, type MouseEventHandler } from 'react';\nimport { ContextMenu } from './ContextMenu';\nimport { ContextMenuSettingsCtx } from './ContextMenuProvider';\nimport type { ContextMenuContent, ContextMenuItemOptions, WithRequiredProperty } from './types';\n\nexport function ContextMenuItem({\n className,\n style,\n icon,\n title,\n color,\n disabled,\n onClick,\n onHide,\n items,\n}: WithRequiredProperty<Omit<ContextMenuItemOptions, 'key'>, 'title'> & { onHide: () => void }) {\n const ref = useRef<HTMLButtonElement>(null);\n const { submenuDelay } = useContext(ContextMenuSettingsCtx);\n\n const hoverAvailable = useMediaQuery(`(hover: hover)`);\n\n const [submenuPosition, setSubmenuPosition] = useState<{ x: number; y: number } | null>(null);\n\n const doShowSubmenu = () => {\n const { top: y, right: x } = ref.current!.getBoundingClientRect();\n setSubmenuPosition({ x, y });\n };\n\n const { start: startShowingSubmenu, clear: stopShowingSubmenu } = useTimeout(doShowSubmenu, submenuDelay);\n\n const { start: startHidingSubmenu, clear: stopHidingSubmenu } = useTimeout(() => {\n setSubmenuPosition(null);\n }, submenuDelay);\n\n const showSubmenu = () => {\n stopHidingSubmenu();\n startShowingSubmenu();\n };\n\n const instantlyShowSubmenu = () => {\n stopHidingSubmenu();\n doShowSubmenu();\n };\n\n const hideSubmenu = () => {\n stopShowingSubmenu();\n startHidingSubmenu();\n };\n\n const hasSubmenu = items && !disabled;\n const showSubmenuOnHover = hasSubmenu && hoverAvailable;\n\n const handleClick: MouseEventHandler<HTMLButtonElement> | undefined = onClick\n ? (e) => {\n onHide();\n onClick!(e);\n }\n : hasSubmenu && !hoverAvailable\n ? (e) => {\n e.stopPropagation();\n instantlyShowSubmenu();\n }\n : undefined;\n\n return (\n <div\n onMouseEnter={showSubmenuOnHover ? showSubmenu : undefined}\n onMouseLeave={showSubmenuOnHover ? hideSubmenu : undefined}\n >\n <UnstyledButton\n ref={ref}\n style={[\n (theme) => {\n const { colors } = theme;\n const parsedColor = color ? parseThemeColor({ color, theme }).value : undefined;\n return {\n '--mantine-contextmenu-item-button-color': parsedColor ? parsedColor : 'var(--mantine-color-text)',\n '--mantine-contextmenu-item-button-hover-bg-color-light': parsedColor\n ? rgba(parsedColor, 0.08)\n : rgba(colors.gray[4], 0.25),\n '--mantine-contextmenu-item-button-hover-bg-color-dark': parsedColor\n ? rgba(parsedColor, 0.15)\n : rgba(colors.dark[3], 0.25),\n '--mantine-contextmenu-item-button-pressed-bg-color-light': parsedColor\n ? rgba(parsedColor, 0.2)\n : rgba(colors.gray[4], 0.5),\n '--mantine-contextmenu-item-button-pressed-bg-color-dark': parsedColor\n ? rgba(parsedColor, 0.3)\n : rgba(colors.dark[3], 0.5),\n };\n },\n style,\n ]}\n className={clsx('mantine-contextmenu-item-button', className)}\n disabled={disabled}\n onClick={handleClick}\n >\n {icon && (\n <Box fz={0} mr=\"xs\" mt={-2}>\n {icon}\n </Box>\n )}\n <div className=\"mantine-contextmenu-item-button-title\">{title}</div>\n {items && (\n <Box fz={10} mt={-2} ml=\"xs\">\n ▶\n </Box>\n )}\n </UnstyledButton>\n {submenuPosition && <ContextMenu content={items as ContextMenuContent} onHide={onHide} {...submenuPosition} />}\n </div>\n );\n}\n","import { Paper, px, useDirection } from '@mantine/core';\nimport { useResizeObserver } from '@mantine/hooks';\nimport clsx from 'clsx';\nimport { useContext } from 'react';\nimport { ContextMenuDivider } from './ContextMenuDivider';\nimport { ContextMenuItem } from './ContextMenuItem';\nimport { ContextMenuSettingsCtx } from './ContextMenuProvider';\nimport type { ContextMenuContent, ContextMenuOptions } from './types';\nimport { humanize } from './utils';\n\nexport type ContextMenuInstanceOptions = {\n x: number;\n y: number;\n content: ContextMenuContent;\n};\n\nexport type ContextMenuProps = ContextMenuOptions &\n ContextMenuInstanceOptions & {\n onHide: () => void;\n };\n\nexport function ContextMenu({ x, y, content, zIndex, onHide, className, style, classNames, styles }: ContextMenuProps) {\n const { shadow, borderRadius } = useContext(ContextMenuSettingsCtx);\n const [paperRef] = useResizeObserver<HTMLDivElement>();\n const { width, height } = paperRef.current?.getBoundingClientRect() || { width: 0, height: 0 };\n\n let windowWidth = 0;\n let windowHeight = 0;\n if (typeof window !== 'undefined') ({ innerWidth: windowWidth, innerHeight: windowHeight } = window);\n\n const { dir } = useDirection();\n\n return (\n <Paper\n ref={paperRef}\n shadow={shadow}\n radius={borderRadius}\n className={clsx('mantine-contextmenu', className, classNames?.root)}\n style={[\n ({ spacing: { md } }) => {\n const mdSpacing = px(md) as number;\n return {\n zIndex,\n top: y + height + mdSpacing > windowHeight ? windowHeight - height - mdSpacing : y,\n left:\n dir === 'ltr'\n ? x + width + mdSpacing > windowWidth\n ? windowWidth - width - mdSpacing\n : x\n : windowWidth - mdSpacing - (x - width - mdSpacing < 0 ? width + mdSpacing : x),\n };\n },\n style,\n styles?.root,\n ]}\n >\n {Array.isArray(content)\n ? content.map(({ key, hidden, className, style, onClick, items, title, ...otherOptions }) =>\n hidden ? null : onClick || items ? (\n <ContextMenuItem\n key={key}\n className={clsx(classNames?.item, className)}\n style={[styles?.item, style]}\n title={title ?? humanize(key)}\n onClick={onClick}\n onHide={onHide}\n items={items}\n {...otherOptions}\n />\n ) : (\n <ContextMenuDivider\n key={key}\n className={clsx(classNames?.divider, className)}\n style={[styles?.divider, style]}\n />\n )\n )\n : content(onHide)}\n </Paper>\n );\n}\n","import { createContext, useContext, useState } from 'react';\nimport type { ContextMenuInstanceOptions } from './ContextMenu';\nimport { ContextMenuPortal } from './ContextMenuPortal';\nimport type {\n ContextMenuOptions,\n ContextMenuProviderProps,\n ContextMenuSettings,\n HideContextMenuFunction,\n ShowContextMenuFunction,\n WithRequiredProperty,\n} from './types';\n\nconst DEFAULT_SETTINGS: WithRequiredProperty<ContextMenuSettings, 'shadow' | 'borderRadius' | 'submenuDelay'> = {\n shadow: 'sm',\n borderRadius: 'xs',\n submenuDelay: 500,\n};\n\nexport const ContextMenuSettingsCtx = createContext(DEFAULT_SETTINGS);\nexport const ContextMenuCtx = createContext<{\n /**\n * Function that shows the context menu.\n */\n showContextMenu: ShowContextMenuFunction;\n\n /**\n * Function that hides the context menu.\n */\n hideContextMenu: HideContextMenuFunction;\n\n /**\n * Boolean indicating whether the context menu is currently visible.\n */\n isContextMenuVisible: boolean;\n}>({ showContextMenu: () => () => undefined, hideContextMenu: () => undefined, isContextMenuVisible: false });\n\n/**\n * Provider that allows to show a context menu anywhere in your application.\n * If you wrap your application with this provider, you can use the `useContextMenu` hook\n * anywhere in the component tree to access a function that shows the context menu.\n */\nexport function ContextMenuProvider({\n zIndex = 9999,\n shadow = DEFAULT_SETTINGS.shadow,\n borderRadius = DEFAULT_SETTINGS.borderRadius,\n submenuDelay = DEFAULT_SETTINGS.submenuDelay,\n children,\n}: ContextMenuProviderProps) {\n const [data, setData] = useState<(ContextMenuInstanceOptions & ContextMenuOptions) | null>(null);\n\n const hideContextMenu = () => {\n setData(null);\n };\n\n const showContextMenu: ShowContextMenuFunction = (content, options) => (e) => {\n e.preventDefault();\n e.stopPropagation();\n setData({\n x: e.clientX,\n y: e.clientY,\n content,\n zIndex: options?.zIndex || zIndex,\n className: options?.className,\n style: options?.style,\n classNames: options?.classNames,\n styles: options?.styles,\n });\n };\n\n return (\n <ContextMenuSettingsCtx.Provider value={{ shadow, borderRadius, submenuDelay }}>\n <ContextMenuCtx.Provider value={{ showContextMenu, hideContextMenu, isContextMenuVisible: !!data }}>\n {children}\n {data && <ContextMenuPortal onHide={hideContextMenu} {...data} />}\n </ContextMenuCtx.Provider>\n </ContextMenuSettingsCtx.Provider>\n );\n}\n\n/**\n * Hook returning functions that show and hide the context menu.\n */\nexport function useContextMenu() {\n return useContext(ContextMenuCtx);\n}\n","import { Portal } from '@mantine/core';\nimport { useHotkeys, useWindowEvent } from '@mantine/hooks';\nimport { ContextMenu, type ContextMenuProps } from './ContextMenu';\nimport { ContextMenuOverlay } from './ContextMenuOverlay';\n\nexport type ContextMenuPortalProps = ContextMenuProps & {\n zIndex?: number;\n};\n\nexport function ContextMenuPortal({ onHide, zIndex, ...otherProps }: ContextMenuPortalProps) {\n useWindowEvent('resize', onHide);\n useWindowEvent('scroll', onHide);\n useHotkeys([['Escape', onHide]]);\n\n return (\n <Portal>\n <ContextMenuOverlay zIndex={zIndex} onHide={onHide}>\n <ContextMenu {...otherProps} onHide={onHide} />\n </ContextMenuOverlay>\n </Portal>\n );\n}\n","export type ContextMenuOverlayProps = React.PropsWithChildren<{\n zIndex: number | undefined;\n onHide: () => void;\n}>;\n\nexport function ContextMenuOverlay({ zIndex, children, onHide }: ContextMenuOverlayProps) {\n const handleHide = (e: React.MouseEvent) => {\n e.preventDefault();\n onHide();\n };\n return (\n <div className=\"mantine-contextmenu-overlay\" style={{ zIndex }} onClick={handleHide} onContextMenu={handleHide}>\n {children}\n </div>\n );\n}\n","/**\n * Utility function that returns a humanized version of a string, e.g. \"camelCase\" -> \"Camel Case\"\n */\nexport function humanize(value: string) {\n const str = value\n .replace(/([a-z\\d])([A-Z]+)/g, '$1 $2')\n .replace(/\\W|_/g, ' ')\n .trim()\n .toLowerCase();\n return `${str.charAt(0).toUpperCase()}${str.slice(1)}`;\n}\n"],"mappings":"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","names":["Box","clsx","jsx","ContextMenuDivider","className","style","Box","UnstyledButton","parseThemeColor","rgba","useMediaQuery","useTimeout","clsx","useContext","useRef","useState","Paper","px","useDirection","useResizeObserver","clsx","useContext","createContext","useContext","useState","Portal","useHotkeys","useWindowEvent","jsx","ContextMenuOverlay","zIndex","children","onHide","handleHide","e","jsx","ContextMenuPortal","onHide","zIndex","otherProps","useWindowEvent","useHotkeys","Portal","ContextMenuOverlay","ContextMenu","jsx","jsxs","DEFAULT_SETTINGS","ContextMenuSettingsCtx","createContext","ContextMenuCtx","ContextMenuProvider","zIndex","shadow","borderRadius","submenuDelay","children","data","setData","useState","hideContextMenu","showContextMenu","content","options","e","ContextMenuPortal","useContextMenu","useContext","humanize","value","str","jsx","ContextMenu","x","y","content","zIndex","onHide","className","style","classNames","styles","shadow","borderRadius","useContext","ContextMenuSettingsCtx","paperRef","useResizeObserver","width","height","windowWidth","windowHeight","dir","useDirection","Paper","clsx","md","mdSpacing","px","key","hidden","onClick","items","title","otherOptions","ContextMenuItem","humanize","ContextMenuDivider","jsx","jsxs","ContextMenuItem","className","style","icon","title","color","disabled","onClick","onHide","items","ref","useRef","submenuDelay","useContext","ContextMenuSettingsCtx","hoverAvailable","useMediaQuery","submenuPosition","setSubmenuPosition","useState","doShowSubmenu","y","x","startShowingSubmenu","stopShowingSubmenu","useTimeout","startHidingSubmenu","stopHidingSubmenu","showSubmenu","instantlyShowSubmenu","hideSubmenu","hasSubmenu","showSubmenuOnHover","handleClick","e","UnstyledButton","theme","colors","parsedColor","parseThemeColor","rgba","clsx","Box","ContextMenu"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mantine-contextmenu",
3
- "version": "7.1.12",
3
+ "version": "7.3.1",
4
4
  "description": "Craft your applications for productivity and meet your users’ expectations by enhancing your Mantine-based UIs with a desktop-grade, lightweight yet fully-featured, dark-theme aware context-menu component, built by the creator of Mantine DataTable",
5
5
  "keywords": [
6
6
  "ui",
@@ -73,36 +73,36 @@
73
73
  },
74
74
  "devDependencies": {
75
75
  "@ducanh2912/next-pwa": "^9.7.2",
76
- "@mantine/code-highlight": "^7.2.1",
77
- "@mantine/core": "^7.2.1",
78
- "@mantine/hooks": "^7.2.1",
79
- "@mantine/notifications": "^7.2.1",
80
- "@tabler/icons-react": "^2.40.0",
81
- "@types/lodash": "^4.14.201",
82
- "@types/node": "^20.9.0",
83
- "@types/react": "^18.2.37",
84
- "@types/react-dom": "^18.2.15",
85
- "@typescript-eslint/eslint-plugin": "^6.10.0",
86
- "@typescript-eslint/parser": "^6.10.0",
76
+ "@mantine/code-highlight": "^7.3.1",
77
+ "@mantine/core": "^7.3.1",
78
+ "@mantine/hooks": "^7.3.1",
79
+ "@mantine/notifications": "^7.3.1",
80
+ "@tabler/icons-react": "^2.42.0",
81
+ "@types/lodash": "^4.14.202",
82
+ "@types/node": "^20.10.4",
83
+ "@types/react": "^18.2.42",
84
+ "@types/react-dom": "^18.2.17",
85
+ "@typescript-eslint/eslint-plugin": "^6.13.2",
86
+ "@typescript-eslint/parser": "^6.13.2",
87
87
  "clsx": "^2.0.0",
88
88
  "cssnano": "^6.0.1",
89
- "eslint": "^8.53.0",
90
- "eslint-config-next": "^14.0.2",
91
- "eslint-config-prettier": "^9.0.0",
89
+ "eslint": "^8.55.0",
90
+ "eslint-config-next": "^14.0.3",
91
+ "eslint-config-prettier": "^9.1.0",
92
92
  "lodash": "^4.17.21",
93
- "next": "14.0.2",
94
- "postcss": "^8.4.31",
95
- "postcss-cli": "^10.1.0",
93
+ "next": "14.0.3",
94
+ "postcss": "^8.4.32",
95
+ "postcss-cli": "^11.0.0",
96
96
  "postcss-import": "^15.1.0",
97
- "postcss-preset-mantine": "^1.10.0",
97
+ "postcss-preset-mantine": "^1.11.1",
98
98
  "postcss-simple-vars": "^7.0.1",
99
- "prettier": "^3.0.3",
99
+ "prettier": "^3.1.0",
100
100
  "react": "^18.2.0",
101
101
  "react-dom": "^18.2.0",
102
- "sharp": "^0.32.6",
102
+ "sharp": "^0.33.0",
103
103
  "swr": "^2.2.4",
104
- "tsup": "^7.2.0",
105
- "typescript": "^5.2.2",
104
+ "tsup": "^8.0.1",
105
+ "typescript": "^5.3.3",
106
106
  "webpack": "^5.89.0"
107
107
  },
108
108
  "peerDependencies": {