@basic-ui/core 0.0.46 → 0.0.47

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.
@@ -1916,12 +1916,20 @@ const Menu = /*#__PURE__*/react.forwardRef(function Menu(props, forwardedRef) {
1916
1916
  setState(isOpen);
1917
1917
  });
1918
1918
  menuListIdRef.current = react.useId();
1919
+ const offset = react.useRef([0, 0]);
1920
+ const offsetFn = react.useCallback(({
1921
+ reference
1922
+ }) => [offset.current[0], offset.current[1] - reference.height], []);
1923
+ const isContextMenu = react.useRef(false);
1919
1924
  const value = {
1920
1925
  menuListIdRef,
1921
1926
  openWithArrowKeyRef,
1922
1927
  open,
1923
1928
  onChange,
1924
- buttonRef
1929
+ buttonRef,
1930
+ offset,
1931
+ offsetFn,
1932
+ isContextMenu
1925
1933
  };
1926
1934
  return /*#__PURE__*/jsxRuntime.jsx(MenuProvider, {
1927
1935
  value: value,
@@ -2000,6 +2008,51 @@ const MenuButton = /*#__PURE__*/react.forwardRef(function MenuButton(props, forw
2000
2008
  });
2001
2009
  });
2002
2010
 
2011
+ const ContextMenuTrigger = /*#__PURE__*/react.forwardRef(function MenuButton(props, forwardedRef) {
2012
+ const {
2013
+ as: Comp = 'div',
2014
+ id: preferredId,
2015
+ onContextMenu,
2016
+ disabled,
2017
+ ...otherProps
2018
+ } = props;
2019
+ const {
2020
+ menuListIdRef,
2021
+ open,
2022
+ buttonRef,
2023
+ onChange,
2024
+ offset,
2025
+ isContextMenu
2026
+ } = useMenuContext();
2027
+ const idGenerated = react.useId();
2028
+ const id = preferredId || idGenerated;
2029
+
2030
+ const handleContextMenu = e => {
2031
+ if (disabled) {
2032
+ return;
2033
+ }
2034
+
2035
+ const rect = e.currentTarget.getBoundingClientRect();
2036
+ offset.current = [e.nativeEvent.x - rect.x, e.nativeEvent.y - rect.y];
2037
+ isContextMenu.current = true;
2038
+ buttonRef.current = e.currentTarget;
2039
+ onChange && onChange(e, !open);
2040
+ e.preventDefault();
2041
+ };
2042
+
2043
+ return /*#__PURE__*/jsxRuntime.jsx(Comp, {
2044
+ ref: forwardedRef,
2045
+ id: id,
2046
+ "aria-haspopup": true,
2047
+ "aria-controls": menuListIdRef.current,
2048
+ "aria-expanded": open ? true : undefined,
2049
+ "data-menu-trigger": "",
2050
+ onContextMenu: wrapEvent(onContextMenu, handleContextMenu),
2051
+ disabled: disabled,
2052
+ ...otherProps
2053
+ });
2054
+ });
2055
+
2003
2056
  const MenuItem = /*#__PURE__*/react.forwardRef(function MenuItem(props, forwardedRef) {
2004
2057
  const {
2005
2058
  as: Comp = 'li',
@@ -2081,7 +2134,8 @@ const MenuList = /*#__PURE__*/react.forwardRef(function MenuList(props, forwarde
2081
2134
  buttonRef,
2082
2135
  onChange,
2083
2136
  openWithArrowKeyRef,
2084
- open
2137
+ open,
2138
+ isContextMenu
2085
2139
  } = useMenuContext();
2086
2140
  const [navigationItem, setNavigationItem] = react.useState();
2087
2141
  const [mounted, setMounted] = react.useState(false);
@@ -2117,7 +2171,9 @@ const MenuList = /*#__PURE__*/react.forwardRef(function MenuList(props, forwarde
2117
2171
  setMounted(true);
2118
2172
  }, [mounted, navigationItem, onNavigate, openWithArrowKeyRef, scope, defaultActiveItemValue]);
2119
2173
  useOnClickOutside(menuListRef, e => {
2120
- if (e.target instanceof HTMLElement && e.target !== buttonRef.current && !buttonRef.current?.contains(e.target)) {
2174
+ console.log(isContextMenu.current);
2175
+
2176
+ if (isContextMenu.current || e.target instanceof HTMLElement && e.target !== buttonRef.current && !buttonRef.current?.contains(e.target)) {
2121
2177
  onChange && onChange(e, false);
2122
2178
  }
2123
2179
 
@@ -2374,7 +2430,9 @@ const MenuPopover = /*#__PURE__*/react.forwardRef(function MenuPopover(props, fo
2374
2430
  } = props;
2375
2431
  const {
2376
2432
  buttonRef,
2377
- open
2433
+ open,
2434
+ offsetFn,
2435
+ isContextMenu
2378
2436
  } = useMenuContext();
2379
2437
 
2380
2438
  if (!open) {
@@ -2385,6 +2443,8 @@ const MenuPopover = /*#__PURE__*/react.forwardRef(function MenuPopover(props, fo
2385
2443
  as: as,
2386
2444
  ref: forwardedRef,
2387
2445
  anchorEl: buttonRef,
2446
+ offsetFn: offsetFn,
2447
+ placement: isContextMenu.current ? 'bottom-start' : undefined,
2388
2448
  ...otherProps
2389
2449
  });
2390
2450
  });
@@ -3977,6 +4037,7 @@ exports.ComboboxLabel = ComboboxLabel;
3977
4037
  exports.ComboboxList = ComboboxList;
3978
4038
  exports.ComboboxOption = ComboboxOption;
3979
4039
  exports.ComboboxPopover = ComboboxPopover;
4040
+ exports.ContextMenuTrigger = ContextMenuTrigger;
3980
4041
  exports.FocusLock = FocusLock;
3981
4042
  exports.Menu = Menu;
3982
4043
  exports.MenuButton = MenuButton;