@basic-ui/core 0.0.47 → 0.0.48
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/build/cjs/index.js +52 -19
- package/build/cjs/index.js.map +1 -1
- package/build/esm/Menu/ContextMenuTrigger.js +14 -5
- package/build/esm/Menu/ContextMenuTrigger.js.map +1 -1
- package/build/esm/Menu/Menu.js +17 -9
- package/build/esm/Menu/Menu.js.map +1 -1
- package/build/esm/Menu/MenuButton.js +5 -3
- package/build/esm/Menu/MenuButton.js.map +1 -1
- package/build/esm/Menu/MenuItem.js +4 -2
- package/build/esm/Menu/MenuItem.js.map +1 -1
- package/build/esm/Menu/MenuList.js +25 -9
- package/build/esm/Menu/MenuList.js.map +1 -1
- package/build/esm/Menu/MenuPopover.js +3 -1
- package/build/esm/Menu/MenuPopover.js.map +1 -1
- package/build/esm/Menu/context.d.ts +4 -4
- package/build/esm/Menu/context.js.map +1 -1
- package/build/tsconfig-build.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/Menu/ContextMenuTrigger.tsx +21 -8
- package/src/Menu/Menu.tsx +15 -12
- package/src/Menu/MenuButton.tsx +4 -3
- package/src/Menu/MenuItem.tsx +3 -1
- package/src/Menu/MenuList.tsx +29 -12
- package/src/Menu/MenuPopover.tsx +2 -1
- package/src/Menu/context.ts +5 -3
package/build/cjs/index.js
CHANGED
|
@@ -1904,6 +1904,7 @@ const useMenuListContext = () => react.useContext(menuListContext);
|
|
|
1904
1904
|
const Menu = /*#__PURE__*/react.forwardRef(function Menu(props, forwardedRef) {
|
|
1905
1905
|
const {
|
|
1906
1906
|
as: Comp = react.Fragment,
|
|
1907
|
+
innerAs,
|
|
1907
1908
|
open: openProp,
|
|
1908
1909
|
defaultOpen = false,
|
|
1909
1910
|
onChange: onChangeProp,
|
|
@@ -1915,25 +1916,29 @@ const Menu = /*#__PURE__*/react.forwardRef(function Menu(props, forwardedRef) {
|
|
|
1915
1916
|
const [open, onChange] = useControlledState(openProp, onChangeProp, defaultOpen, setState => (e, isOpen) => {
|
|
1916
1917
|
setState(isOpen);
|
|
1917
1918
|
});
|
|
1919
|
+
const [offsetFn, setOffsetFn] = react.useState(undefined);
|
|
1918
1920
|
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
1921
|
const isContextMenu = react.useRef(false);
|
|
1922
|
+
|
|
1923
|
+
if (!open && offsetFn) {
|
|
1924
|
+
setOffsetFn(undefined);
|
|
1925
|
+
}
|
|
1926
|
+
|
|
1924
1927
|
const value = {
|
|
1925
1928
|
menuListIdRef,
|
|
1926
1929
|
openWithArrowKeyRef,
|
|
1927
1930
|
open,
|
|
1928
1931
|
onChange,
|
|
1929
1932
|
buttonRef,
|
|
1930
|
-
offset,
|
|
1931
1933
|
offsetFn,
|
|
1934
|
+
setOffsetFn,
|
|
1932
1935
|
isContextMenu
|
|
1933
1936
|
};
|
|
1934
1937
|
return /*#__PURE__*/jsxRuntime.jsx(MenuProvider, {
|
|
1935
1938
|
value: value,
|
|
1936
|
-
children: /*#__PURE__*/jsxRuntime.jsx(Comp, {
|
|
1939
|
+
children: /*#__PURE__*/jsxRuntime.jsx(Comp, { ...(Comp !== react.Fragment ? {
|
|
1940
|
+
as: innerAs
|
|
1941
|
+
} : {}),
|
|
1937
1942
|
ref: forwardedRef,
|
|
1938
1943
|
...otherProps
|
|
1939
1944
|
})
|
|
@@ -1943,6 +1948,7 @@ const Menu = /*#__PURE__*/react.forwardRef(function Menu(props, forwardedRef) {
|
|
|
1943
1948
|
const MenuButton = /*#__PURE__*/react.forwardRef(function MenuButton(props, forwardedRef) {
|
|
1944
1949
|
const {
|
|
1945
1950
|
as: Comp = 'button',
|
|
1951
|
+
innerAs,
|
|
1946
1952
|
id: preferredId,
|
|
1947
1953
|
onClick,
|
|
1948
1954
|
onKeyDown,
|
|
@@ -1978,7 +1984,7 @@ const MenuButton = /*#__PURE__*/react.forwardRef(function MenuButton(props, forw
|
|
|
1978
1984
|
openWithArrowKeyRef.current = e.key;
|
|
1979
1985
|
}
|
|
1980
1986
|
|
|
1981
|
-
onChange
|
|
1987
|
+
onChange(e, true);
|
|
1982
1988
|
e.preventDefault();
|
|
1983
1989
|
}
|
|
1984
1990
|
};
|
|
@@ -1989,11 +1995,12 @@ const MenuButton = /*#__PURE__*/react.forwardRef(function MenuButton(props, forw
|
|
|
1989
1995
|
}
|
|
1990
1996
|
|
|
1991
1997
|
buttonRef.current = e.currentTarget;
|
|
1992
|
-
onChange
|
|
1998
|
+
onChange(e, !open);
|
|
1993
1999
|
};
|
|
1994
2000
|
|
|
1995
2001
|
return /*#__PURE__*/jsxRuntime.jsx(Comp, {
|
|
1996
2002
|
ref: forwardedRef,
|
|
2003
|
+
as: innerAs,
|
|
1997
2004
|
id: buttonId,
|
|
1998
2005
|
role: "button",
|
|
1999
2006
|
type: "button",
|
|
@@ -2008,9 +2015,10 @@ const MenuButton = /*#__PURE__*/react.forwardRef(function MenuButton(props, forw
|
|
|
2008
2015
|
});
|
|
2009
2016
|
});
|
|
2010
2017
|
|
|
2011
|
-
const ContextMenuTrigger = /*#__PURE__*/react.forwardRef(function
|
|
2018
|
+
const ContextMenuTrigger = /*#__PURE__*/react.forwardRef(function ContextMenuTrigger(props, forwardedRef) {
|
|
2012
2019
|
const {
|
|
2013
2020
|
as: Comp = 'div',
|
|
2021
|
+
innerAs,
|
|
2014
2022
|
id: preferredId,
|
|
2015
2023
|
onContextMenu,
|
|
2016
2024
|
disabled,
|
|
@@ -2021,7 +2029,7 @@ const ContextMenuTrigger = /*#__PURE__*/react.forwardRef(function MenuButton(pro
|
|
|
2021
2029
|
open,
|
|
2022
2030
|
buttonRef,
|
|
2023
2031
|
onChange,
|
|
2024
|
-
|
|
2032
|
+
setOffsetFn,
|
|
2025
2033
|
isContextMenu
|
|
2026
2034
|
} = useMenuContext();
|
|
2027
2035
|
const idGenerated = react.useId();
|
|
@@ -2033,15 +2041,20 @@ const ContextMenuTrigger = /*#__PURE__*/react.forwardRef(function MenuButton(pro
|
|
|
2033
2041
|
}
|
|
2034
2042
|
|
|
2035
2043
|
const rect = e.currentTarget.getBoundingClientRect();
|
|
2036
|
-
offset.current = [e.nativeEvent.x - rect.x, e.nativeEvent.y - rect.y];
|
|
2037
2044
|
isContextMenu.current = true;
|
|
2038
2045
|
buttonRef.current = e.currentTarget;
|
|
2039
|
-
onChange
|
|
2046
|
+
onChange(e, true);
|
|
2047
|
+
const mouseX = e.nativeEvent.x;
|
|
2048
|
+
const mouseY = e.nativeEvent.y;
|
|
2049
|
+
setOffsetFn(() => ({
|
|
2050
|
+
reference
|
|
2051
|
+
}) => [mouseX - rect.x, mouseY - rect.y - reference.height]);
|
|
2040
2052
|
e.preventDefault();
|
|
2041
2053
|
};
|
|
2042
2054
|
|
|
2043
2055
|
return /*#__PURE__*/jsxRuntime.jsx(Comp, {
|
|
2044
2056
|
ref: forwardedRef,
|
|
2057
|
+
as: innerAs,
|
|
2045
2058
|
id: id,
|
|
2046
2059
|
"aria-haspopup": true,
|
|
2047
2060
|
"aria-controls": menuListIdRef.current,
|
|
@@ -2056,6 +2069,7 @@ const ContextMenuTrigger = /*#__PURE__*/react.forwardRef(function MenuButton(pro
|
|
|
2056
2069
|
const MenuItem = /*#__PURE__*/react.forwardRef(function MenuItem(props, forwardedRef) {
|
|
2057
2070
|
const {
|
|
2058
2071
|
as: Comp = 'li',
|
|
2072
|
+
innerAs,
|
|
2059
2073
|
disabled,
|
|
2060
2074
|
onSelect,
|
|
2061
2075
|
onClick,
|
|
@@ -2074,7 +2088,7 @@ const MenuItem = /*#__PURE__*/react.forwardRef(function MenuItem(props, forwarde
|
|
|
2074
2088
|
const itemId = react.useId();
|
|
2075
2089
|
const isActive = ref.current && ref.current === navigationItem;
|
|
2076
2090
|
const handleSelect = wrapEvent(onSelect, e => {
|
|
2077
|
-
onChange
|
|
2091
|
+
onChange(e, false);
|
|
2078
2092
|
buttonRef.current?.focus();
|
|
2079
2093
|
e.preventDefault();
|
|
2080
2094
|
});
|
|
@@ -2100,6 +2114,7 @@ const MenuItem = /*#__PURE__*/react.forwardRef(function MenuItem(props, forwarde
|
|
|
2100
2114
|
|
|
2101
2115
|
return /*#__PURE__*/jsxRuntime.jsx(Comp, {
|
|
2102
2116
|
ref: assignMultipleRefs(ref, forwardedRef),
|
|
2117
|
+
as: innerAs,
|
|
2103
2118
|
id: disabled ? undefined : itemId,
|
|
2104
2119
|
"data-menu-item": "",
|
|
2105
2120
|
"data-highlighted": isActive ? '' : undefined,
|
|
@@ -2122,11 +2137,13 @@ const useEnhancedEffect$1 = typeof window !== 'undefined' ? react.useLayoutEffec
|
|
|
2122
2137
|
const MenuList = /*#__PURE__*/react.forwardRef(function MenuList(props, forwardedRef) {
|
|
2123
2138
|
const {
|
|
2124
2139
|
as: Comp = 'ul',
|
|
2140
|
+
innerAs,
|
|
2125
2141
|
onKeyDown,
|
|
2126
2142
|
id: preferredId,
|
|
2127
2143
|
defaultActiveItemValue,
|
|
2128
2144
|
...otherProps
|
|
2129
2145
|
} = props;
|
|
2146
|
+
const interactedOutside = react.useRef(false);
|
|
2130
2147
|
const itemSearchStr = react.useRef('');
|
|
2131
2148
|
const itemSearchClearTimeout = react.useRef();
|
|
2132
2149
|
const {
|
|
@@ -2170,22 +2187,34 @@ const MenuList = /*#__PURE__*/react.forwardRef(function MenuList(props, forwarde
|
|
|
2170
2187
|
openWithArrowKeyRef.current = null;
|
|
2171
2188
|
setMounted(true);
|
|
2172
2189
|
}, [mounted, navigationItem, onNavigate, openWithArrowKeyRef, scope, defaultActiveItemValue]);
|
|
2173
|
-
|
|
2174
|
-
|
|
2190
|
+
const handleClickOutside = react.useCallback(e => {
|
|
2191
|
+
if (!interactedOutside.current) {
|
|
2192
|
+
// First interaction should be ignored, because
|
|
2193
|
+
// this is what triggered the context menu to open
|
|
2194
|
+
interactedOutside.current = true;
|
|
2195
|
+
return;
|
|
2196
|
+
}
|
|
2175
2197
|
|
|
2176
|
-
if (isContextMenu.current
|
|
2177
|
-
|
|
2198
|
+
if (isContextMenu.current) {
|
|
2199
|
+
if (e.button === 0) {
|
|
2200
|
+
onChange(e, false);
|
|
2201
|
+
}
|
|
2202
|
+
} else {
|
|
2203
|
+
if (e.target instanceof HTMLElement && e.target !== buttonRef.current && !buttonRef.current?.contains(e.target)) {
|
|
2204
|
+
onChange(e, false);
|
|
2205
|
+
}
|
|
2178
2206
|
}
|
|
2179
2207
|
|
|
2180
2208
|
e.preventDefault();
|
|
2181
|
-
},
|
|
2209
|
+
}, [buttonRef, isContextMenu, onChange]);
|
|
2210
|
+
useOnClickOutside(menuListRef, handleClickOutside, open);
|
|
2182
2211
|
|
|
2183
2212
|
function handleKeyDown(e) {
|
|
2184
2213
|
switch (e.key) {
|
|
2185
2214
|
case 'Escape':
|
|
2186
2215
|
case 'Tab':
|
|
2187
2216
|
{
|
|
2188
|
-
onChange
|
|
2217
|
+
onChange(e, false);
|
|
2189
2218
|
e.preventDefault(); // prevents focusing on next element, because we will be handling it
|
|
2190
2219
|
|
|
2191
2220
|
itemSearchStr.current = '';
|
|
@@ -2272,6 +2301,7 @@ const MenuList = /*#__PURE__*/react.forwardRef(function MenuList(props, forwarde
|
|
|
2272
2301
|
}
|
|
2273
2302
|
|
|
2274
2303
|
if (!open) {
|
|
2304
|
+
interactedOutside.current = false;
|
|
2275
2305
|
return null;
|
|
2276
2306
|
}
|
|
2277
2307
|
|
|
@@ -2282,6 +2312,7 @@ const MenuList = /*#__PURE__*/react.forwardRef(function MenuList(props, forwarde
|
|
|
2282
2312
|
},
|
|
2283
2313
|
children: /*#__PURE__*/jsxRuntime.jsx(Comp, {
|
|
2284
2314
|
ref: assignMultipleRefs(forwardedRef, menuListRef),
|
|
2315
|
+
as: innerAs,
|
|
2285
2316
|
id: menuListIdRef.current,
|
|
2286
2317
|
role: "menu",
|
|
2287
2318
|
"aria-labelledby": buttonRef.current?.id,
|
|
@@ -2426,6 +2457,7 @@ const PopperArrow = /*#__PURE__*/react.forwardRef(function PopperArrow({
|
|
|
2426
2457
|
const MenuPopover = /*#__PURE__*/react.forwardRef(function MenuPopover(props, forwardedRef) {
|
|
2427
2458
|
const {
|
|
2428
2459
|
as = 'div',
|
|
2460
|
+
innerAs,
|
|
2429
2461
|
...otherProps
|
|
2430
2462
|
} = props;
|
|
2431
2463
|
const {
|
|
@@ -2441,6 +2473,7 @@ const MenuPopover = /*#__PURE__*/react.forwardRef(function MenuPopover(props, fo
|
|
|
2441
2473
|
|
|
2442
2474
|
return /*#__PURE__*/jsxRuntime.jsx(Popper, {
|
|
2443
2475
|
as: as,
|
|
2476
|
+
innerAs: innerAs,
|
|
2444
2477
|
ref: forwardedRef,
|
|
2445
2478
|
anchorEl: buttonRef,
|
|
2446
2479
|
offsetFn: offsetFn,
|