{"version":3,"file":"index.modern.mjs","sources":["../src/menu.tsx","../src/icons.tsx","../src/overflow-menu.tsx","../src/context-menu.tsx","../../../node_modules/@chakra-ui/react-utils/dist/chunk-ITIKTQWJ.mjs"],"sourcesContent":["import * as React from 'react'\nimport {\n  forwardRef,\n  MenuItem as ChakraMenuItem,\n  MenuItemProps as ChakraMenuItemProps,\n} from '@chakra-ui/react'\nimport { __DEV__ } from '@chakra-ui/utils'\nimport { useLink } from '@saas-ui/provider'\n\nexport interface MenuItemProps extends ChakraMenuItemProps {\n  /**\n   * MenuItem label\n   * Children always takes precedence over this prop.\n   */\n  label?: React.ReactNode\n  /**\n   * Wraps the item with the link wrapper configured in SaasProvider.\n   */\n  href?: string\n}\n\nexport const MenuItem = forwardRef<MenuItemProps, typeof ChakraMenuItem>(\n  ({ label, href, children, ...props }, ref) => {\n    const LinkWrapper = useLink()\n\n    const item = (\n      <ChakraMenuItem ref={ref} {...props}>\n        {children || label}\n      </ChakraMenuItem>\n    )\n\n    if (href) {\n      return <LinkWrapper href={href}>{item}</LinkWrapper>\n    }\n\n    return item\n  }\n)\n\nif (__DEV__) {\n  MenuItem.displayName = 'MenuItem'\n}\n","import * as React from 'react'\nimport { Icon, IconProps } from '@chakra-ui/icons'\n\nexport const MoreIcon = (props: IconProps) => {\n  return (\n    <Icon viewBox=\"0 0 24 24\" strokeWidth=\"2\" stroke=\"currentColor\" {...props}>\n      <circle cx=\"12\" cy=\"12\" r=\"1\"></circle>\n      <circle cx=\"12\" cy=\"5\" r=\"1\"></circle>\n      <circle cx=\"12\" cy=\"19\" r=\"1\"></circle>\n    </Icon>\n  )\n}\n","import * as React from 'react'\nimport {\n  Menu,\n  MenuProps,\n  MenuButton,\n  MenuList,\n  MenuListProps,\n  IconButton,\n  ThemeTypings,\n  SystemProps,\n} from '@chakra-ui/react'\nimport { __DEV__ } from '@chakra-ui/utils'\nimport { MoreIcon } from './icons'\n\nexport interface OverflowMenuProps extends MenuProps {\n  /**\n   * The button (aria) label.\n   */\n  label?: string\n  /**\n   * The MenuButton variant.\n   */\n  variant?: 'Button' extends keyof ThemeTypings['components']\n    ? ThemeTypings['components']['Button']['variants']\n    : string\n  /**\n   * The MenuButton size\n   */\n  size?: 'Button' extends keyof ThemeTypings['components']\n    ? ThemeTypings['components']['Button']['sizes']\n    : SystemProps['boxSize']\n  /**\n   * Props passed to the MenuList.\n   */\n  menuListProps?: MenuListProps\n  /**\n   * Render a custom icon.\n   */\n  icon?: React.ReactNode\n\n  children: React.ReactNode\n}\n\nexport const OverflowMenu: React.FC<OverflowMenuProps> = (props) => {\n  const {\n    variant = 'ghost',\n    size,\n    label = 'More',\n    icon = <MoreIcon />,\n    menuListProps,\n    children,\n    ...rest\n  } = props\n  return (\n    <Menu {...rest}>\n      <MenuButton\n        as={IconButton}\n        icon={icon}\n        aria-label={label}\n        variant={variant}\n        size={size}\n      ></MenuButton>\n      <MenuList {...menuListProps}>{children}</MenuList>\n    </Menu>\n  )\n}\n\nif (__DEV__) {\n  OverflowMenu.displayName = 'OverflowMenu'\n}\n","import * as React from 'react'\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport {\n  chakra,\n  Portal,\n  Menu,\n  MenuProps,\n  MenuList,\n  MenuListProps,\n  HTMLChakraProps,\n  useMenuContext,\n  useEventListener,\n} from '@chakra-ui/react'\n\nimport { createContext } from '@chakra-ui/react-utils'\nimport { runIfFn, __DEV__ } from '@chakra-ui/utils'\n\ntype Position = [number, number]\n\nexport interface UseContextMenuReturn {\n  isOpen: boolean\n  position: Position\n  triggerRef: React.RefObject<HTMLSpanElement>\n  onClose: () => void\n  onOpen: (event: React.MouseEvent) => void\n}\n\nexport const [ContextMenuProvider, useContextMenuContext] =\n  createContext<UseContextMenuReturn>({\n    name: 'UseContextMenuContext',\n    strict: false,\n  })\n\nexport interface UseContextMenuProps extends ContextMenuProps {\n  onClose?: () => void\n}\n\nexport const useContextMenu = (props: UseContextMenuProps) => {\n  const [isOpen, setIsOpen] = useState(false)\n  const [position, setPosition] = useState<Position>([0, 0])\n  const triggerRef = useRef<HTMLSpanElement>(null)\n\n  // useOutsideClick off menu doesn't catch contextmenu\n  useEventListener('contextmenu', (e) => {\n    if (\n      !triggerRef.current?.contains(e.target as any) &&\n      e.target !== triggerRef.current\n    ) {\n      setIsOpen(false)\n    }\n  })\n\n  const onOpen = useCallback((event: React.MouseEvent) => {\n    setIsOpen(true)\n    setPosition([event.pageX, event.pageY])\n  }, [])\n\n  const onClose = useCallback(() => {\n    props.onClose?.()\n    setIsOpen(false)\n  }, [props.onClose, setIsOpen])\n\n  return {\n    isOpen,\n    position,\n    triggerRef,\n    onClose,\n    onOpen,\n  }\n}\n\nexport interface ContextMenuProps extends MenuProps {}\nexport const ContextMenu: React.FC<ContextMenuProps> = (props) => {\n  const { children, ...rest } = props\n  const ctx = useContextMenu(props)\n\n  const context = React.useMemo(() => ctx, [ctx])\n\n  const { isOpen, onClose } = context\n\n  return (\n    <Menu gutter={0} {...rest} isOpen={isOpen} onClose={onClose}>\n      {(fnProps) => (\n        <ContextMenuProvider value={context}>\n          {runIfFn(children, fnProps)}\n        </ContextMenuProvider>\n      )}\n    </Menu>\n  )\n}\n\nif (__DEV__) {\n  ContextMenu.displayName = 'ContextMenu'\n}\n\nexport interface ContextMenuTriggerProps extends HTMLChakraProps<'span'> {}\n\nexport const ContextMenuTrigger: React.FC<ContextMenuTriggerProps> = (\n  props\n) => {\n  const { children, ...rest } = props\n  const { triggerRef, onOpen } = useContextMenuContext()\n\n  const menu = useMenuContext()\n\n  const { openAndFocusFirstItem } = menu\n\n  // @todo add long press support\n  return (\n    <chakra.span\n      {...rest}\n      sx={{ WebkitTouchCallout: 'none' }}\n      onContextMenu={(event) => {\n        event.preventDefault()\n        onOpen(event)\n        openAndFocusFirstItem()\n      }}\n      ref={triggerRef}\n    >\n      {children}\n    </chakra.span>\n  )\n}\n\nif (__DEV__) {\n  ContextMenuTrigger.displayName = 'ContextMenuTrigger'\n}\n\nexport interface ContextMenuListProps extends MenuListProps {}\n\nexport const ContextMenuList: React.FC<ContextMenuListProps> = (props) => {\n  const { children, ...rest } = props\n  const { position } = useContextMenuContext()\n\n  return (\n    <Portal>\n      <MenuList\n        {...rest}\n        style={{\n          position: 'absolute',\n          left: position[0],\n          top: position[1],\n        }}\n      >\n        {children}\n      </MenuList>\n    </Portal>\n  )\n}\n\nif (__DEV__) {\n  ContextMenuList.displayName = 'ContextMenuList'\n}\n","// src/context.ts\nimport {\n  createContext as createReactContext,\n  useContext as useReactContext\n} from \"react\";\nfunction createContext(options = {}) {\n  const {\n    strict = true,\n    errorMessage = \"useContext: `context` is undefined. Seems you forgot to wrap component within the Provider\",\n    name\n  } = options;\n  const Context = createReactContext(void 0);\n  Context.displayName = name;\n  function useContext() {\n    var _a;\n    const context = useReactContext(Context);\n    if (!context && strict) {\n      const error = new Error(errorMessage);\n      error.name = \"ContextError\";\n      (_a = Error.captureStackTrace) == null ? void 0 : _a.call(Error, error, useContext);\n      throw error;\n    }\n    return context;\n  }\n  return [\n    Context.Provider,\n    useContext,\n    Context\n  ];\n}\n\nexport {\n  createContext\n};\n"],"names":["MenuItem","forwardRef","_ref","ref","label","href","children","props","_objectWithoutPropertiesLoose","_excluded","LinkWrapper","useLink","item","React","ChakraMenuItem","_extends","__DEV__","displayName","MoreIcon","createElement","Icon","viewBox","strokeWidth","stroke","cx","cy","r","OverflowMenu","variant","size","icon","menuListProps","rest","Menu","MenuButton","as","IconButton","MenuList","ContextMenuProvider","useContextMenuContext","options","strict","errorMessage","name","Context","createReactContext","Provider","useContext","_a","context","useReactContext","error","Error","captureStackTrace","call","createContext","useContextMenu","isOpen","setIsOpen","useState","position","setPosition","triggerRef","useRef","useEventListener","e","_triggerRef$current","current","contains","target","onOpen","useCallback","event","pageX","pageY","onClose","ContextMenu","ctx","useMemo","gutter","fnProps","value","runIfFn","ContextMenuTrigger","_excluded2","menu","useMenuContext","openAndFocusFirstItem","chakra","span","sx","WebkitTouchCallout","onContextMenu","preventDefault","ContextMenuList","_excluded3","Portal","style","left","top"],"mappings":"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"}