@basic-ui/core 0.0.60 → 0.0.62
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.map +1 -1
- package/build/esm/Accordion/AccordionBody.d.ts.map +1 -1
- package/build/esm/Accordion/AccordionBody.js +6 -26
- package/build/esm/Accordion/AccordionBody.js.map +1 -1
- package/build/esm/Accordion/AccordionHeader.d.ts.map +1 -1
- package/build/esm/Accordion/AccordionHeader.js +21 -69
- package/build/esm/Accordion/AccordionHeader.js.map +1 -1
- package/build/esm/Accordion/AccordionItem.d.ts.map +1 -1
- package/build/esm/Accordion/AccordionItem.js +31 -18
- package/build/esm/Accordion/AccordionItem.js.map +1 -1
- package/build/esm/Accordion/context.d.ts +0 -8
- package/build/esm/Accordion/context.d.ts.map +1 -1
- package/build/esm/Accordion/context.js +0 -11
- package/build/esm/Accordion/context.js.map +1 -1
- package/build/esm/Accordion/scopeQuery.d.ts +1 -0
- package/build/esm/Accordion/scopeQuery.d.ts.map +1 -1
- package/build/esm/Accordion/scopeQuery.js +3 -0
- package/build/esm/Accordion/scopeQuery.js.map +1 -1
- package/build/esm/Collapsible/Collapsible.d.ts +13 -0
- package/build/esm/Collapsible/Collapsible.d.ts.map +1 -0
- package/build/esm/Collapsible/Collapsible.js +53 -0
- package/build/esm/Collapsible/Collapsible.js.map +1 -0
- package/build/esm/Collapsible/CollapsiblePanel.d.ts +10 -0
- package/build/esm/Collapsible/CollapsiblePanel.d.ts.map +1 -0
- package/build/esm/Collapsible/CollapsiblePanel.js +85 -0
- package/build/esm/Collapsible/CollapsiblePanel.js.map +1 -0
- package/build/esm/Collapsible/CollapsibleTrigger.d.ts +11 -0
- package/build/esm/Collapsible/CollapsibleTrigger.d.ts.map +1 -0
- package/build/esm/Collapsible/CollapsibleTrigger.js +51 -0
- package/build/esm/Collapsible/CollapsibleTrigger.js.map +1 -0
- package/build/esm/Collapsible/context.d.ts +16 -0
- package/build/esm/Collapsible/context.d.ts.map +1 -0
- package/build/esm/Collapsible/context.js +11 -0
- package/build/esm/Collapsible/context.js.map +1 -0
- package/build/esm/Collapsible/index.d.ts +4 -0
- package/build/esm/Collapsible/index.d.ts.map +1 -0
- package/build/esm/Collapsible/index.js +4 -0
- package/build/esm/Collapsible/index.js.map +1 -0
- package/build/esm/Menu/Menu.d.ts +3 -2
- package/build/esm/Menu/Menu.d.ts.map +1 -1
- package/build/esm/Menu/Menu.js +64 -4
- package/build/esm/Menu/Menu.js.map +1 -1
- package/build/esm/Menu/MenuButton.d.ts.map +1 -1
- package/build/esm/Menu/MenuButton.js +85 -8
- package/build/esm/Menu/MenuButton.js.map +1 -1
- package/build/esm/Menu/MenuItem.d.ts.map +1 -1
- package/build/esm/Menu/MenuItem.js +16 -4
- package/build/esm/Menu/MenuItem.js.map +1 -1
- package/build/esm/Menu/MenuList.d.ts.map +1 -1
- package/build/esm/Menu/MenuList.js +47 -12
- package/build/esm/Menu/MenuList.js.map +1 -1
- package/build/esm/Menu/MenuPopover.d.ts.map +1 -1
- package/build/esm/Menu/MenuPopover.js +12 -1
- package/build/esm/Menu/MenuPopover.js.map +1 -1
- package/build/esm/Menu/MenuSubmenuTrigger.d.ts +8 -0
- package/build/esm/Menu/MenuSubmenuTrigger.d.ts.map +1 -0
- package/build/esm/Menu/MenuSubmenuTrigger.js +131 -0
- package/build/esm/Menu/MenuSubmenuTrigger.js.map +1 -0
- package/build/esm/Menu/context.d.ts +13 -3
- package/build/esm/Menu/context.d.ts.map +1 -1
- package/build/esm/Menu/context.js +1 -0
- package/build/esm/Menu/context.js.map +1 -1
- package/build/esm/Menu/index.d.ts +3 -0
- package/build/esm/Menu/index.d.ts.map +1 -1
- package/build/esm/Menu/index.js +2 -0
- package/build/esm/Menu/index.js.map +1 -1
- package/build/esm/Menu/scope.d.ts +1 -0
- package/build/esm/Menu/scope.d.ts.map +1 -1
- package/build/esm/Menu/scope.js +2 -1
- package/build/esm/Menu/scope.js.map +1 -1
- package/build/esm/MenuBar/MenuBar.d.ts +11 -0
- package/build/esm/MenuBar/MenuBar.d.ts.map +1 -0
- package/build/esm/MenuBar/MenuBar.js +153 -0
- package/build/esm/MenuBar/MenuBar.js.map +1 -0
- package/build/esm/MenuBar/context.d.ts +29 -0
- package/build/esm/MenuBar/context.d.ts.map +1 -0
- package/build/esm/MenuBar/context.js +7 -0
- package/build/esm/MenuBar/context.js.map +1 -0
- package/build/esm/MenuBar/index.d.ts +2 -0
- package/build/esm/MenuBar/index.d.ts.map +1 -0
- package/build/esm/MenuBar/index.js +2 -0
- package/build/esm/MenuBar/index.js.map +1 -0
- package/build/esm/Slider/Slider.d.ts +47 -1
- package/build/esm/Slider/Slider.d.ts.map +1 -1
- package/build/esm/Slider/Slider.js +91 -5
- package/build/esm/Slider/Slider.js.map +1 -1
- package/build/esm/ToggleGroup/ToggleGroup.d.ts +40 -0
- package/build/esm/ToggleGroup/ToggleGroup.d.ts.map +1 -0
- package/build/esm/ToggleGroup/ToggleGroup.js +113 -0
- package/build/esm/ToggleGroup/ToggleGroup.js.map +1 -0
- package/build/esm/ToggleGroup/ToggleGroupContext.d.ts +10 -0
- package/build/esm/ToggleGroup/ToggleGroupContext.d.ts.map +1 -0
- package/build/esm/ToggleGroup/ToggleGroupContext.js +6 -0
- package/build/esm/ToggleGroup/ToggleGroupContext.js.map +1 -0
- package/build/esm/ToggleGroup/index.d.ts +3 -0
- package/build/esm/ToggleGroup/index.d.ts.map +1 -0
- package/build/esm/ToggleGroup/index.js +3 -0
- package/build/esm/ToggleGroup/index.js.map +1 -0
- package/build/esm/Tree/Tree.d.ts +3 -0
- package/build/esm/Tree/Tree.d.ts.map +1 -0
- package/build/esm/Tree/Tree.js +730 -0
- package/build/esm/Tree/Tree.js.map +1 -0
- package/build/esm/Tree/TreeHeader.d.ts +3 -0
- package/build/esm/Tree/TreeHeader.d.ts.map +1 -0
- package/build/esm/Tree/TreeHeader.js +5 -0
- package/build/esm/Tree/TreeHeader.js.map +1 -0
- package/build/esm/Tree/TreeItem.d.ts +3 -0
- package/build/esm/Tree/TreeItem.d.ts.map +1 -0
- package/build/esm/Tree/TreeItem.js +5 -0
- package/build/esm/Tree/TreeItem.js.map +1 -0
- package/build/esm/Tree/TreeItemContent.d.ts +3 -0
- package/build/esm/Tree/TreeItemContent.d.ts.map +1 -0
- package/build/esm/Tree/TreeItemContent.js +69 -0
- package/build/esm/Tree/TreeItemContent.js.map +1 -0
- package/build/esm/Tree/TreeSection.d.ts +3 -0
- package/build/esm/Tree/TreeSection.d.ts.map +1 -0
- package/build/esm/Tree/TreeSection.js +5 -0
- package/build/esm/Tree/TreeSection.js.map +1 -0
- package/build/esm/Tree/collection.d.ts +18 -0
- package/build/esm/Tree/collection.d.ts.map +1 -0
- package/build/esm/Tree/collection.js +252 -0
- package/build/esm/Tree/collection.js.map +1 -0
- package/build/esm/Tree/context.d.ts +3 -0
- package/build/esm/Tree/context.d.ts.map +1 -0
- package/build/esm/Tree/context.js +3 -0
- package/build/esm/Tree/context.js.map +1 -0
- package/build/esm/Tree/index.d.ts +8 -0
- package/build/esm/Tree/index.d.ts.map +1 -0
- package/build/esm/Tree/index.js +7 -0
- package/build/esm/Tree/index.js.map +1 -0
- package/build/esm/Tree/types.d.ts +128 -0
- package/build/esm/Tree/types.d.ts.map +1 -0
- package/build/esm/Tree/types.js +2 -0
- package/build/esm/Tree/types.js.map +1 -0
- package/build/esm/hooks/index.d.ts +1 -0
- package/build/esm/hooks/index.d.ts.map +1 -1
- package/build/esm/hooks/index.js +1 -0
- package/build/esm/hooks/index.js.map +1 -1
- package/build/esm/hooks/useTransitionStatus.d.ts +7 -0
- package/build/esm/hooks/useTransitionStatus.d.ts.map +1 -0
- package/build/esm/hooks/useTransitionStatus.js +48 -0
- package/build/esm/hooks/useTransitionStatus.js.map +1 -0
- package/build/esm/index.d.ts +5 -0
- package/build/esm/index.d.ts.map +1 -1
- package/build/esm/index.js +5 -0
- package/build/esm/index.js.map +1 -1
- package/build/esm/toggle/Toggle.d.ts +28 -0
- package/build/esm/toggle/Toggle.d.ts.map +1 -0
- package/build/esm/toggle/Toggle.js +55 -0
- package/build/esm/toggle/Toggle.js.map +1 -0
- package/build/esm/toggle/index.d.ts +2 -0
- package/build/esm/toggle/index.d.ts.map +1 -0
- package/build/esm/toggle/index.js +2 -0
- package/build/esm/toggle/index.js.map +1 -0
- package/build/esm/utils/assign-ref.d.ts +3 -3
- package/build/esm/utils/assign-ref.d.ts.map +1 -1
- package/build/esm/utils/assign-ref.js +1 -1
- package/build/esm/utils/assign-ref.js.map +1 -1
- package/build/tsconfig-build.tsbuildinfo +1 -1
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -4
- package/src/Accordion/AccordionBody.tsx +6 -35
- package/src/Accordion/AccordionHeader.tsx +29 -103
- package/src/Accordion/AccordionItem.tsx +40 -29
- package/src/Accordion/context.ts +0 -18
- package/src/Accordion/scopeQuery.ts +4 -0
- package/src/Collapsible/Collapsible.story.tsx +153 -0
- package/src/Collapsible/Collapsible.tsx +79 -0
- package/src/Collapsible/CollapsiblePanel.tsx +103 -0
- package/src/Collapsible/CollapsibleTrigger.tsx +60 -0
- package/src/Collapsible/context.ts +28 -0
- package/src/Collapsible/index.ts +3 -0
- package/src/Menu/Menu.story.tsx +70 -1
- package/src/Menu/Menu.tsx +141 -65
- package/src/Menu/MenuButton.tsx +115 -9
- package/src/Menu/MenuItem.tsx +20 -3
- package/src/Menu/MenuList.tsx +50 -13
- package/src/Menu/MenuPopover.tsx +12 -2
- package/src/Menu/MenuSubmenuTrigger.tsx +167 -0
- package/src/Menu/context.ts +20 -10
- package/src/Menu/index.ts +3 -0
- package/src/Menu/scope.ts +4 -1
- package/src/Menu/styles.css +57 -22
- package/src/MenuBar/MenuBar.story.tsx +92 -0
- package/src/MenuBar/MenuBar.tsx +236 -0
- package/src/MenuBar/context.ts +46 -0
- package/src/MenuBar/index.ts +1 -0
- package/src/MenuBar/styles.css +78 -0
- package/src/Slider/Slider.story.tsx +1 -1
- package/src/Slider/Slider.tsx +145 -8
- package/src/Toggle/Toggle.story.tsx +42 -0
- package/src/Toggle/Toggle.tsx +95 -0
- package/src/Toggle/index.ts +1 -0
- package/src/Toggle/styles.css +39 -0
- package/src/ToggleGroup/ToggleGroup.story.tsx +86 -0
- package/src/ToggleGroup/ToggleGroup.tsx +185 -0
- package/src/ToggleGroup/ToggleGroupContext.ts +17 -0
- package/src/ToggleGroup/index.ts +2 -0
- package/src/ToggleGroup/styles.css +66 -0
- package/src/Tree/Tree.story.tsx +221 -0
- package/src/Tree/Tree.tsx +1081 -0
- package/src/Tree/TreeHeader.tsx +9 -0
- package/src/Tree/TreeItem.tsx +9 -0
- package/src/Tree/TreeItemContent.tsx +91 -0
- package/src/Tree/TreeSection.tsx +9 -0
- package/src/Tree/collection.tsx +371 -0
- package/src/Tree/context.ts +6 -0
- package/src/Tree/index.ts +7 -0
- package/src/Tree/styles.css +135 -0
- package/src/Tree/types.ts +161 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useTransitionStatus.ts +65 -0
- package/src/index.ts +5 -0
- package/src/utils/assign-ref.ts +4 -4
|
@@ -11,11 +11,12 @@ export const MenuItem = /*#__PURE__*/forwardRef(function MenuItem(props, forward
|
|
|
11
11
|
onSelect,
|
|
12
12
|
onClick,
|
|
13
13
|
onKeyDown,
|
|
14
|
+
onFocus,
|
|
15
|
+
onMouseMove,
|
|
14
16
|
...otherProps
|
|
15
17
|
} = props;
|
|
16
18
|
const {
|
|
17
|
-
|
|
18
|
-
buttonRef
|
|
19
|
+
closeAllMenus
|
|
19
20
|
} = useMenuContext();
|
|
20
21
|
const {
|
|
21
22
|
navigationItem,
|
|
@@ -25,8 +26,7 @@ export const MenuItem = /*#__PURE__*/forwardRef(function MenuItem(props, forward
|
|
|
25
26
|
const itemId = useId();
|
|
26
27
|
const isActive = ref.current && ref.current === navigationItem;
|
|
27
28
|
const handleSelect = wrapEvent(onSelect, e => {
|
|
28
|
-
|
|
29
|
-
buttonRef.current?.focus();
|
|
29
|
+
closeAllMenus(e);
|
|
30
30
|
e.preventDefault();
|
|
31
31
|
});
|
|
32
32
|
const handleClick = e => {
|
|
@@ -45,6 +45,16 @@ export const MenuItem = /*#__PURE__*/forwardRef(function MenuItem(props, forward
|
|
|
45
45
|
break;
|
|
46
46
|
}
|
|
47
47
|
};
|
|
48
|
+
const handleFocus = () => {
|
|
49
|
+
if (!disabled && ref.current && ref.current !== navigationItem) {
|
|
50
|
+
onNavigate && onNavigate(ref.current);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
const handleMouseMove = () => {
|
|
54
|
+
if (!disabled && ref.current && ref.current !== navigationItem) {
|
|
55
|
+
onNavigate && onNavigate(ref.current);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
48
58
|
return /*#__PURE__*/_jsx(Comp, {
|
|
49
59
|
ref: assignMultipleRefs(ref, forwardedRef),
|
|
50
60
|
as: innerAs,
|
|
@@ -55,6 +65,8 @@ export const MenuItem = /*#__PURE__*/forwardRef(function MenuItem(props, forward
|
|
|
55
65
|
onClick: wrapEvent(onClick, handleClick),
|
|
56
66
|
tabIndex: disabled ? -1 : 0,
|
|
57
67
|
onKeyDown: wrapEvent(onKeyDown, handleKeyDown),
|
|
68
|
+
onFocus: wrapEvent(onFocus, handleFocus),
|
|
69
|
+
onMouseMove: wrapEvent(onMouseMove, handleMouseMove),
|
|
58
70
|
"data-disabled": disabled ? '' : undefined,
|
|
59
71
|
"aria-disabled": disabled ? '' : undefined,
|
|
60
72
|
disabled: disabled,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuItem.js","names":["forwardRef","useRef","useId","useMenuContext","useMenuListContext","assignMultipleRefs","wrapEvent","jsx","_jsx","MenuItem","props","forwardedRef","as","Comp","innerAs","disabled","onSelect","onClick","onKeyDown","
|
|
1
|
+
{"version":3,"file":"MenuItem.js","names":["forwardRef","useRef","useId","useMenuContext","useMenuListContext","assignMultipleRefs","wrapEvent","jsx","_jsx","MenuItem","props","forwardedRef","as","Comp","innerAs","disabled","onSelect","onClick","onKeyDown","onFocus","onMouseMove","otherProps","closeAllMenus","navigationItem","onNavigate","ref","itemId","isActive","current","handleSelect","e","preventDefault","handleClick","handleKeyDown","key","handleFocus","handleMouseMove","id","undefined","role","tabIndex"],"sources":["../../../src/Menu/MenuItem.tsx"],"sourcesContent":["import type {\n FocusEventHandler,\n LiHTMLAttributes,\n ElementType,\n MouseEvent,\n KeyboardEvent,\n KeyboardEventHandler,\n MouseEventHandler,\n} from 'react';\nimport { forwardRef, useRef, useId } from 'react';\n\nimport { useMenuContext, useMenuListContext } from './context';\nimport { assignMultipleRefs } from '../utils/assign-ref';\nimport { wrapEvent } from '../utils';\n\nexport interface MenuItemProps extends LiHTMLAttributes<HTMLLIElement> {\n as?: ElementType<any>;\n innerAs?: ElementType<any>;\n onSelect?: (\n e: MouseEvent<HTMLLIElement> | KeyboardEvent<HTMLLIElement>\n ) => void;\n disabled?: boolean;\n}\n\nexport const MenuItem = forwardRef<any, MenuItemProps>(function MenuItem(\n props,\n forwardedRef\n) {\n const {\n as: Comp = 'li',\n innerAs,\n disabled,\n onSelect,\n onClick,\n onKeyDown,\n onFocus,\n onMouseMove,\n ...otherProps\n } = props;\n const { closeAllMenus } = useMenuContext();\n const { navigationItem, onNavigate } = useMenuListContext();\n const ref = useRef<HTMLLIElement | null>(null);\n const itemId = useId();\n\n const isActive = ref.current && ref.current === navigationItem;\n\n const handleSelect = wrapEvent(\n onSelect,\n (e: KeyboardEvent<HTMLLIElement> | MouseEvent<HTMLLIElement>) => {\n closeAllMenus(e);\n e.preventDefault();\n }\n );\n\n const handleClick = (e: MouseEvent<HTMLLIElement>) => {\n if (!disabled) {\n onNavigate && onNavigate(ref.current!);\n handleSelect(e);\n }\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLLIElement> = (e) => {\n switch (e.key) {\n case ' ':\n case 'Enter':\n if (!disabled) {\n handleSelect(e);\n }\n break;\n }\n };\n\n const handleFocus: FocusEventHandler<HTMLLIElement> = () => {\n if (!disabled && ref.current && ref.current !== navigationItem) {\n onNavigate && onNavigate(ref.current);\n }\n };\n\n const handleMouseMove: MouseEventHandler<HTMLLIElement> = () => {\n if (!disabled && ref.current && ref.current !== navigationItem) {\n onNavigate && onNavigate(ref.current);\n }\n };\n\n return (\n <Comp\n ref={assignMultipleRefs(ref, forwardedRef)}\n as={innerAs}\n id={disabled ? undefined : itemId}\n data-menu-item=\"\"\n data-highlighted={isActive ? '' : undefined}\n role=\"menuitem\"\n onClick={wrapEvent(onClick, handleClick)}\n tabIndex={disabled ? -1 : 0}\n onKeyDown={wrapEvent(onKeyDown, handleKeyDown)}\n onFocus={wrapEvent(onFocus, handleFocus)}\n onMouseMove={wrapEvent(onMouseMove, handleMouseMove)}\n data-disabled={disabled ? '' : undefined}\n aria-disabled={disabled ? '' : undefined}\n disabled={disabled}\n {...otherProps}\n />\n );\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuList.d.ts","sourceRoot":"","sources":["../../../src/Menu/MenuList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAiB,MAAM,OAAO,CAAC;AAoBxE,MAAM,WAAW,aAAc,SAAQ,cAAc,CAAC,gBAAgB,CAAC;IACrE,EAAE,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAC3B,sBAAsB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC5C;AAED,eAAO,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"MenuList.d.ts","sourceRoot":"","sources":["../../../src/Menu/MenuList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAiB,MAAM,OAAO,CAAC;AAoBxE,MAAM,WAAW,aAAc,SAAQ,cAAc,CAAC,gBAAgB,CAAC;IACrE,EAAE,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAC3B,sBAAsB,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC5C;AAED,eAAO,MAAM,QAAQ,4GAwQpB,CAAC"}
|
|
@@ -3,7 +3,7 @@ import { useMenuContext, MenuListProvider } from './context';
|
|
|
3
3
|
import { assignMultipleRefs } from '../utils/assign-ref';
|
|
4
4
|
import { useOnClickOutside } from '../hooks/useOnClickOutside';
|
|
5
5
|
import { useScope } from '../hooks';
|
|
6
|
-
import { queryScope } from './scope';
|
|
6
|
+
import { MENU_SUBMENU_TRIGGER_ATTR, queryScope } from './scope';
|
|
7
7
|
import { getCircularIndex, wrapEvent } from '../utils';
|
|
8
8
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
9
|
const useEnhancedEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;
|
|
@@ -22,15 +22,18 @@ export const MenuList = /*#__PURE__*/forwardRef(function MenuList(props, forward
|
|
|
22
22
|
const {
|
|
23
23
|
menuListIdRef,
|
|
24
24
|
buttonRef,
|
|
25
|
-
|
|
25
|
+
closeMenu,
|
|
26
26
|
openWithArrowKeyRef,
|
|
27
27
|
open,
|
|
28
|
-
isContextMenu
|
|
28
|
+
isContextMenu,
|
|
29
|
+
menuBar,
|
|
30
|
+
menuBarMenuId
|
|
29
31
|
} = useMenuContext();
|
|
30
32
|
const [navigationItem, setNavigationItem] = useState();
|
|
31
33
|
const [mounted, setMounted] = useState(false);
|
|
32
34
|
const menuListRef = useRef(null);
|
|
33
35
|
const scope = useScope(menuListRef);
|
|
36
|
+
const getAllItems = useCallback(() => scope.current.queryAllNodes((type, props, instance) => queryScope(type, props) && instance.closest('[data-menu-list]') === menuListRef.current), [scope]);
|
|
34
37
|
const onNavigate = el => {
|
|
35
38
|
el.focus({
|
|
36
39
|
preventScroll: true
|
|
@@ -40,7 +43,7 @@ export const MenuList = /*#__PURE__*/forwardRef(function MenuList(props, forward
|
|
|
40
43
|
menuListIdRef.current = preferredId || menuListIdRef.current;
|
|
41
44
|
useEnhancedEffect(() => {
|
|
42
45
|
if (!mounted) {
|
|
43
|
-
const allItems =
|
|
46
|
+
const allItems = getAllItems();
|
|
44
47
|
let index = getCircularIndex(openWithArrowKeyRef.current === 'ArrowUp' ? -1 : 0, allItems.length);
|
|
45
48
|
if (defaultActiveItemValue) {
|
|
46
49
|
if (typeof defaultActiveItemValue === 'string') {
|
|
@@ -67,7 +70,7 @@ export const MenuList = /*#__PURE__*/forwardRef(function MenuList(props, forward
|
|
|
67
70
|
}
|
|
68
71
|
openWithArrowKeyRef.current = null;
|
|
69
72
|
setMounted(true);
|
|
70
|
-
}, [mounted, navigationItem, onNavigate, openWithArrowKeyRef,
|
|
73
|
+
}, [mounted, navigationItem, onNavigate, openWithArrowKeyRef, getAllItems, defaultActiveItemValue]);
|
|
71
74
|
const handleClickOutside = useCallback(e => {
|
|
72
75
|
if (isContextMenu.current) {
|
|
73
76
|
if (!interactedOutside.current && e.pointerType === 'touch') {
|
|
@@ -77,25 +80,57 @@ export const MenuList = /*#__PURE__*/forwardRef(function MenuList(props, forward
|
|
|
77
80
|
return;
|
|
78
81
|
}
|
|
79
82
|
if (e.button === 0) {
|
|
80
|
-
|
|
83
|
+
closeMenu(e);
|
|
81
84
|
}
|
|
82
85
|
} else {
|
|
83
86
|
if (e.target instanceof HTMLElement && e.target !== buttonRef.current && !buttonRef.current?.contains(e.target)) {
|
|
84
|
-
|
|
87
|
+
closeMenu(e);
|
|
85
88
|
}
|
|
86
89
|
}
|
|
87
90
|
e.preventDefault();
|
|
88
|
-
}, [buttonRef, isContextMenu,
|
|
91
|
+
}, [buttonRef, isContextMenu, closeMenu]);
|
|
89
92
|
useOnClickOutside(menuListRef, handleClickOutside, open);
|
|
90
93
|
function handleKeyDown(e) {
|
|
94
|
+
const isHorizontalMenuBarMenu = menuBar && menuBarMenuId && menuBar.orientation === 'horizontal';
|
|
91
95
|
switch (e.key) {
|
|
92
96
|
case 'Escape':
|
|
93
97
|
case 'Tab':
|
|
94
98
|
{
|
|
95
|
-
|
|
99
|
+
closeMenu(e, {
|
|
100
|
+
focusTrigger: true
|
|
101
|
+
});
|
|
96
102
|
e.preventDefault(); // prevents focusing on next element, because we will be handling it
|
|
97
103
|
itemSearchStr.current = '';
|
|
98
|
-
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
case 'ArrowRight':
|
|
107
|
+
{
|
|
108
|
+
if (isHorizontalMenuBarMenu) {
|
|
109
|
+
menuBar.moveFocus(menuBarMenuId, 1, e, {
|
|
110
|
+
open: true,
|
|
111
|
+
focusKey: 'ArrowDown'
|
|
112
|
+
});
|
|
113
|
+
e.preventDefault();
|
|
114
|
+
itemSearchStr.current = '';
|
|
115
|
+
}
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
case 'ArrowLeft':
|
|
119
|
+
{
|
|
120
|
+
if (buttonRef.current?.hasAttribute(MENU_SUBMENU_TRIGGER_ATTR)) {
|
|
121
|
+
closeMenu(e, {
|
|
122
|
+
focusTrigger: true
|
|
123
|
+
});
|
|
124
|
+
e.preventDefault();
|
|
125
|
+
itemSearchStr.current = '';
|
|
126
|
+
} else if (isHorizontalMenuBarMenu) {
|
|
127
|
+
menuBar.moveFocus(menuBarMenuId, -1, e, {
|
|
128
|
+
open: true,
|
|
129
|
+
focusKey: 'ArrowDown'
|
|
130
|
+
});
|
|
131
|
+
e.preventDefault();
|
|
132
|
+
itemSearchStr.current = '';
|
|
133
|
+
}
|
|
99
134
|
break;
|
|
100
135
|
}
|
|
101
136
|
case 'Home':
|
|
@@ -104,7 +139,7 @@ export const MenuList = /*#__PURE__*/forwardRef(function MenuList(props, forward
|
|
|
104
139
|
case 'ArrowUp':
|
|
105
140
|
e.preventDefault();
|
|
106
141
|
itemSearchStr.current = '';
|
|
107
|
-
const allItems =
|
|
142
|
+
const allItems = getAllItems();
|
|
108
143
|
const currentIndex = allItems.findIndex(e => e === navigationItem);
|
|
109
144
|
if (allItems.length === 0) {
|
|
110
145
|
return;
|
|
@@ -140,7 +175,7 @@ export const MenuList = /*#__PURE__*/forwardRef(function MenuList(props, forward
|
|
|
140
175
|
itemSearchClearTimeout.current = setTimeout(() => {
|
|
141
176
|
itemSearchStr.current = '';
|
|
142
177
|
}, 500);
|
|
143
|
-
const allItems =
|
|
178
|
+
const allItems = getAllItems();
|
|
144
179
|
const currentIndex = allItems.findIndex(e => e === navigationItem);
|
|
145
180
|
const searchStr = itemSearchStr.current;
|
|
146
181
|
let nextIndex = -1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuList.js","names":["useCallback","forwardRef","useEffect","useRef","useState","useLayoutEffect","useMenuContext","MenuListProvider","assignMultipleRefs","useOnClickOutside","useScope","queryScope","getCircularIndex","wrapEvent","jsx","_jsx","useEnhancedEffect","window","MenuList","props","forwardedRef","as","Comp","innerAs","onKeyDown","id","preferredId","defaultActiveItemValue","otherProps","interactedOutside","itemSearchStr","itemSearchClearTimeout","undefined","menuListIdRef","buttonRef","onChange","openWithArrowKeyRef","open","isContextMenu","navigationItem","setNavigationItem","mounted","setMounted","menuListRef","scope","onNavigate","el","focus","preventScroll","current","allItems","queryAllNodes","index","length","i","dataset","value","Array","isArray","set","Set","val","has","handleClickOutside","e","pointerType","button","target","HTMLElement","contains","preventDefault","handleKeyDown","key","currentIndex","findIndex","nextIndex","ctrlKey","altKey","slice","clearTimeout","setTimeout","searchStr","idx","dom","domText","innerText","toLowerCase","startsWith","children","ref","role","tabIndex"],"sources":["../../../src/Menu/MenuList.tsx"],"sourcesContent":["import type { HTMLAttributes, ElementType, KeyboardEvent } from 'react';\nimport {\n useCallback,\n forwardRef,\n useEffect,\n useRef,\n useState,\n useLayoutEffect,\n} from 'react';\n\nimport { useMenuContext, MenuListProvider } from './context';\nimport { assignMultipleRefs } from '../utils/assign-ref';\nimport { useOnClickOutside } from '../hooks/useOnClickOutside';\nimport { useScope } from '../hooks';\nimport { queryScope } from './scope';\nimport { getCircularIndex, wrapEvent } from '../utils';\n\nconst useEnhancedEffect =\n typeof window !== 'undefined' ? useLayoutEffect : useEffect;\n\nexport interface MenuListProps extends HTMLAttributes<HTMLUListElement> {\n as?: ElementType<any>;\n innerAs?: ElementType<any>;\n defaultActiveItemValue?: string | string[];\n}\n\nexport const MenuList = forwardRef<HTMLUListElement, MenuListProps>(\n function MenuList(props, forwardedRef) {\n const {\n as: Comp = 'ul',\n innerAs,\n onKeyDown,\n id: preferredId,\n defaultActiveItemValue,\n ...otherProps\n } = props;\n\n const interactedOutside = useRef(false);\n const itemSearchStr = useRef('');\n const itemSearchClearTimeout = useRef<\n ReturnType<typeof setTimeout> | undefined\n >(undefined);\n\n const {\n menuListIdRef,\n buttonRef,\n onChange,\n openWithArrowKeyRef,\n open,\n isContextMenu,\n } = useMenuContext();\n\n const [navigationItem, setNavigationItem] = useState<\n HTMLElement | undefined\n >();\n\n const [mounted, setMounted] = useState(false);\n\n const menuListRef = useRef<HTMLUListElement | null>(null);\n\n const scope = useScope<HTMLLIElement, HTMLUListElement>(menuListRef);\n\n const onNavigate = (el: HTMLElement) => {\n el.focus({ preventScroll: true });\n setNavigationItem(el);\n };\n\n menuListIdRef.current = preferredId || menuListIdRef.current;\n\n useEnhancedEffect(() => {\n if (!mounted) {\n const allItems = scope.current.queryAllNodes(queryScope);\n let index = getCircularIndex(\n openWithArrowKeyRef.current === 'ArrowUp' ? -1 : 0,\n allItems.length\n );\n\n if (defaultActiveItemValue) {\n if (typeof defaultActiveItemValue === 'string') {\n for (let i = 0; i < allItems.length; i++) {\n if (allItems[i].dataset.value === defaultActiveItemValue) {\n index = i;\n break;\n }\n }\n } else if (Array.isArray(defaultActiveItemValue)) {\n const set = new Set(defaultActiveItemValue);\n for (let i = 0; i < allItems.length; i++) {\n const val = allItems[i].dataset.value;\n if (val && set.has(val)) {\n index = i;\n break;\n }\n }\n }\n }\n\n if (index !== null) {\n onNavigate && onNavigate(allItems[index]);\n }\n }\n\n openWithArrowKeyRef.current = null;\n setMounted(true);\n }, [\n mounted,\n navigationItem,\n onNavigate,\n openWithArrowKeyRef,\n scope,\n defaultActiveItemValue,\n ]);\n\n const handleClickOutside = useCallback(\n (e: PointerEvent) => {\n if (isContextMenu.current) {\n if (!interactedOutside.current && e.pointerType === 'touch') {\n // First interaction should be ignored, because\n // this is what triggered the context menu to open\n interactedOutside.current = true;\n return;\n }\n\n if (e.button === 0) {\n onChange(e as any, false);\n }\n } else {\n if (\n e.target instanceof HTMLElement &&\n e.target !== buttonRef.current &&\n !buttonRef.current?.contains(e.target)\n ) {\n onChange(e as any, false);\n }\n }\n e.preventDefault();\n },\n [buttonRef, isContextMenu, onChange]\n );\n\n useOnClickOutside(menuListRef, handleClickOutside, open);\n\n function handleKeyDown(e: KeyboardEvent<HTMLUListElement>) {\n switch (e.key) {\n case 'Escape':\n case 'Tab': {\n onChange(e, false);\n e.preventDefault(); // prevents focusing on next element, because we will be handling it\n itemSearchStr.current = '';\n buttonRef.current?.focus();\n break;\n }\n case 'Home':\n case 'End':\n case 'ArrowDown':\n case 'ArrowUp':\n e.preventDefault();\n itemSearchStr.current = '';\n const allItems = scope ? scope.current.queryAllNodes(queryScope) : [];\n const currentIndex = allItems.findIndex((e) => e === navigationItem);\n if (allItems.length === 0) {\n return;\n }\n let nextIndex: number = currentIndex;\n switch (e.key) {\n case 'ArrowUp':\n nextIndex += -1;\n break;\n case 'ArrowDown':\n nextIndex += 1;\n break;\n case 'Home':\n nextIndex = 0;\n break;\n case 'End':\n nextIndex = -1;\n break;\n }\n // We already checked if allItems.length = 0 above\n nextIndex = getCircularIndex(nextIndex, allItems.length)!;\n onNavigate && onNavigate(allItems[nextIndex]);\n break;\n default: {\n if (e.key.length === 1 && !e.ctrlKey && !e.altKey) {\n // A-Z\n e.preventDefault();\n\n if (\n itemSearchStr.current.length === 0 ||\n itemSearchStr.current.slice(-1) !== e.key\n ) {\n itemSearchStr.current = itemSearchStr.current + e.key;\n }\n clearTimeout(itemSearchClearTimeout.current as any);\n itemSearchClearTimeout.current = setTimeout(() => {\n itemSearchStr.current = '';\n }, 500);\n\n const allItems = scope\n ? scope.current.queryAllNodes(queryScope)\n : [];\n const currentIndex = allItems.findIndex(\n (e) => e === navigationItem\n );\n const searchStr = itemSearchStr.current;\n let nextIndex = -1;\n for (\n let i = searchStr.length === 1 ? 1 : 0;\n i < allItems.length;\n i++\n ) {\n const idx = getCircularIndex(currentIndex + i, allItems.length)!;\n const dom = allItems[idx];\n const domText = dom.innerText.toLowerCase();\n if (domText.length > 0 && domText.startsWith(searchStr)) {\n nextIndex = idx;\n break;\n }\n }\n if (nextIndex >= 0 && nextIndex < allItems.length) {\n onNavigate && onNavigate(allItems[nextIndex]);\n }\n }\n }\n }\n }\n\n if (!open) {\n interactedOutside.current = false;\n return null;\n }\n\n return (\n <MenuListProvider\n value={{\n navigationItem,\n onNavigate,\n }}\n >\n <Comp\n ref={assignMultipleRefs(forwardedRef, menuListRef)}\n as={innerAs}\n id={menuListIdRef.current}\n role=\"menu\"\n aria-labelledby={buttonRef.current?.id}\n data-menu-list=\"\"\n tabIndex=\"-1\"\n onKeyDown={wrapEvent(onKeyDown, handleKeyDown)}\n {...otherProps}\n />\n </MenuListProvider>\n );\n }\n);\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"MenuList.js","names":["useCallback","forwardRef","useEffect","useRef","useState","useLayoutEffect","useMenuContext","MenuListProvider","assignMultipleRefs","useOnClickOutside","useScope","MENU_SUBMENU_TRIGGER_ATTR","queryScope","getCircularIndex","wrapEvent","jsx","_jsx","useEnhancedEffect","window","MenuList","props","forwardedRef","as","Comp","innerAs","onKeyDown","id","preferredId","defaultActiveItemValue","otherProps","interactedOutside","itemSearchStr","itemSearchClearTimeout","undefined","menuListIdRef","buttonRef","closeMenu","openWithArrowKeyRef","open","isContextMenu","menuBar","menuBarMenuId","navigationItem","setNavigationItem","mounted","setMounted","menuListRef","scope","getAllItems","current","queryAllNodes","type","instance","closest","onNavigate","el","focus","preventScroll","allItems","index","length","i","dataset","value","Array","isArray","set","Set","val","has","handleClickOutside","e","pointerType","button","target","HTMLElement","contains","preventDefault","handleKeyDown","isHorizontalMenuBarMenu","orientation","key","focusTrigger","moveFocus","focusKey","hasAttribute","currentIndex","findIndex","nextIndex","ctrlKey","altKey","slice","clearTimeout","setTimeout","searchStr","idx","dom","domText","innerText","toLowerCase","startsWith","children","ref","role","tabIndex"],"sources":["../../../src/Menu/MenuList.tsx"],"sourcesContent":["import type { HTMLAttributes, ElementType, KeyboardEvent } from 'react';\nimport {\n useCallback,\n forwardRef,\n useEffect,\n useRef,\n useState,\n useLayoutEffect,\n} from 'react';\n\nimport { useMenuContext, MenuListProvider } from './context';\nimport { assignMultipleRefs } from '../utils/assign-ref';\nimport { useOnClickOutside } from '../hooks/useOnClickOutside';\nimport { useScope } from '../hooks';\nimport { MENU_SUBMENU_TRIGGER_ATTR, queryScope } from './scope';\nimport { getCircularIndex, wrapEvent } from '../utils';\n\nconst useEnhancedEffect =\n typeof window !== 'undefined' ? useLayoutEffect : useEffect;\n\nexport interface MenuListProps extends HTMLAttributes<HTMLUListElement> {\n as?: ElementType<any>;\n innerAs?: ElementType<any>;\n defaultActiveItemValue?: string | string[];\n}\n\nexport const MenuList = forwardRef<HTMLUListElement, MenuListProps>(\n function MenuList(props, forwardedRef) {\n const {\n as: Comp = 'ul',\n innerAs,\n onKeyDown,\n id: preferredId,\n defaultActiveItemValue,\n ...otherProps\n } = props;\n\n const interactedOutside = useRef(false);\n const itemSearchStr = useRef('');\n const itemSearchClearTimeout = useRef<\n ReturnType<typeof setTimeout> | undefined\n >(undefined);\n\n const {\n menuListIdRef,\n buttonRef,\n closeMenu,\n openWithArrowKeyRef,\n open,\n isContextMenu,\n menuBar,\n menuBarMenuId,\n } = useMenuContext();\n\n const [navigationItem, setNavigationItem] = useState<\n HTMLElement | undefined\n >();\n\n const [mounted, setMounted] = useState(false);\n\n const menuListRef = useRef<HTMLUListElement | null>(null);\n\n const scope = useScope<HTMLLIElement, HTMLUListElement>(menuListRef);\n const getAllItems = useCallback(\n () =>\n scope.current.queryAllNodes(\n (type, props, instance) =>\n queryScope(type, props) &&\n instance.closest('[data-menu-list]') === menuListRef.current\n ),\n [scope]\n );\n\n const onNavigate = (el: HTMLElement) => {\n el.focus({ preventScroll: true });\n setNavigationItem(el);\n };\n\n menuListIdRef.current = preferredId || menuListIdRef.current;\n\n useEnhancedEffect(() => {\n if (!mounted) {\n const allItems = getAllItems();\n let index = getCircularIndex(\n openWithArrowKeyRef.current === 'ArrowUp' ? -1 : 0,\n allItems.length\n );\n\n if (defaultActiveItemValue) {\n if (typeof defaultActiveItemValue === 'string') {\n for (let i = 0; i < allItems.length; i++) {\n if (allItems[i].dataset.value === defaultActiveItemValue) {\n index = i;\n break;\n }\n }\n } else if (Array.isArray(defaultActiveItemValue)) {\n const set = new Set(defaultActiveItemValue);\n for (let i = 0; i < allItems.length; i++) {\n const val = allItems[i].dataset.value;\n if (val && set.has(val)) {\n index = i;\n break;\n }\n }\n }\n }\n\n if (index !== null) {\n onNavigate && onNavigate(allItems[index]);\n }\n }\n\n openWithArrowKeyRef.current = null;\n setMounted(true);\n }, [\n mounted,\n navigationItem,\n onNavigate,\n openWithArrowKeyRef,\n getAllItems,\n defaultActiveItemValue,\n ]);\n\n const handleClickOutside = useCallback(\n (e: PointerEvent) => {\n if (isContextMenu.current) {\n if (!interactedOutside.current && e.pointerType === 'touch') {\n // First interaction should be ignored, because\n // this is what triggered the context menu to open\n interactedOutside.current = true;\n return;\n }\n\n if (e.button === 0) {\n closeMenu(e);\n }\n } else {\n if (\n e.target instanceof HTMLElement &&\n e.target !== buttonRef.current &&\n !buttonRef.current?.contains(e.target)\n ) {\n closeMenu(e);\n }\n }\n e.preventDefault();\n },\n [buttonRef, isContextMenu, closeMenu]\n );\n\n useOnClickOutside(menuListRef, handleClickOutside, open);\n\n function handleKeyDown(e: KeyboardEvent<HTMLUListElement>) {\n const isHorizontalMenuBarMenu =\n menuBar && menuBarMenuId && menuBar.orientation === 'horizontal';\n\n switch (e.key) {\n case 'Escape':\n case 'Tab': {\n closeMenu(e, { focusTrigger: true });\n e.preventDefault(); // prevents focusing on next element, because we will be handling it\n itemSearchStr.current = '';\n break;\n }\n case 'ArrowRight': {\n if (isHorizontalMenuBarMenu) {\n menuBar!.moveFocus(menuBarMenuId!, 1, e, {\n open: true,\n focusKey: 'ArrowDown',\n });\n e.preventDefault();\n itemSearchStr.current = '';\n }\n break;\n }\n case 'ArrowLeft': {\n if (buttonRef.current?.hasAttribute(MENU_SUBMENU_TRIGGER_ATTR)) {\n closeMenu(e, { focusTrigger: true });\n e.preventDefault();\n itemSearchStr.current = '';\n } else if (isHorizontalMenuBarMenu) {\n menuBar!.moveFocus(menuBarMenuId!, -1, e, {\n open: true,\n focusKey: 'ArrowDown',\n });\n e.preventDefault();\n itemSearchStr.current = '';\n }\n break;\n }\n case 'Home':\n case 'End':\n case 'ArrowDown':\n case 'ArrowUp':\n e.preventDefault();\n itemSearchStr.current = '';\n const allItems = getAllItems();\n const currentIndex = allItems.findIndex((e) => e === navigationItem);\n if (allItems.length === 0) {\n return;\n }\n let nextIndex: number = currentIndex;\n switch (e.key) {\n case 'ArrowUp':\n nextIndex += -1;\n break;\n case 'ArrowDown':\n nextIndex += 1;\n break;\n case 'Home':\n nextIndex = 0;\n break;\n case 'End':\n nextIndex = -1;\n break;\n }\n // We already checked if allItems.length = 0 above\n nextIndex = getCircularIndex(nextIndex, allItems.length)!;\n onNavigate && onNavigate(allItems[nextIndex]);\n break;\n default: {\n if (e.key.length === 1 && !e.ctrlKey && !e.altKey) {\n // A-Z\n e.preventDefault();\n\n if (\n itemSearchStr.current.length === 0 ||\n itemSearchStr.current.slice(-1) !== e.key\n ) {\n itemSearchStr.current = itemSearchStr.current + e.key;\n }\n clearTimeout(itemSearchClearTimeout.current as any);\n itemSearchClearTimeout.current = setTimeout(() => {\n itemSearchStr.current = '';\n }, 500);\n\n const allItems = getAllItems();\n const currentIndex = allItems.findIndex(\n (e) => e === navigationItem\n );\n const searchStr = itemSearchStr.current;\n let nextIndex = -1;\n for (\n let i = searchStr.length === 1 ? 1 : 0;\n i < allItems.length;\n i++\n ) {\n const idx = getCircularIndex(currentIndex + i, allItems.length)!;\n const dom = allItems[idx];\n const domText = dom.innerText.toLowerCase();\n if (domText.length > 0 && domText.startsWith(searchStr)) {\n nextIndex = idx;\n break;\n }\n }\n if (nextIndex >= 0 && nextIndex < allItems.length) {\n onNavigate && onNavigate(allItems[nextIndex]);\n }\n }\n }\n }\n }\n\n if (!open) {\n interactedOutside.current = false;\n return null;\n }\n\n return (\n <MenuListProvider\n value={{\n navigationItem,\n onNavigate,\n }}\n >\n <Comp\n ref={assignMultipleRefs(forwardedRef, menuListRef)}\n as={innerAs}\n id={menuListIdRef.current}\n role=\"menu\"\n aria-labelledby={buttonRef.current?.id}\n data-menu-list=\"\"\n tabIndex=\"-1\"\n onKeyDown={wrapEvent(onKeyDown, handleKeyDown)}\n {...otherProps}\n />\n </MenuListProvider>\n );\n }\n);\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuPopover.d.ts","sourceRoot":"","sources":["../../../src/Menu/MenuPopover.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"MenuPopover.d.ts","sourceRoot":"","sources":["../../../src/Menu/MenuPopover.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAK7C,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;IACrE,EAAE,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAC3B,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,eAAO,MAAM,WAAW,6GA8BvB,CAAC"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { forwardRef } from 'react';
|
|
2
2
|
import { Popper } from '../Popper';
|
|
3
3
|
import { useMenuContext } from './context';
|
|
4
|
+
import { MENU_SUBMENU_TRIGGER_ATTR } from './scope';
|
|
4
5
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
6
|
export const MenuPopover = /*#__PURE__*/forwardRef(function MenuPopover(props, forwardedRef) {
|
|
6
7
|
const {
|
|
7
8
|
as = 'div',
|
|
8
9
|
innerAs,
|
|
10
|
+
placement,
|
|
9
11
|
...otherProps
|
|
10
12
|
} = props;
|
|
11
13
|
const {
|
|
@@ -14,6 +16,15 @@ export const MenuPopover = /*#__PURE__*/forwardRef(function MenuPopover(props, f
|
|
|
14
16
|
offsetFn,
|
|
15
17
|
isContextMenu
|
|
16
18
|
} = useMenuContext();
|
|
19
|
+
const getDefaultPlacement = () => {
|
|
20
|
+
if (buttonRef.current?.hasAttribute(MENU_SUBMENU_TRIGGER_ATTR)) {
|
|
21
|
+
return 'right-start';
|
|
22
|
+
}
|
|
23
|
+
if (isContextMenu.current) {
|
|
24
|
+
return 'bottom-start';
|
|
25
|
+
}
|
|
26
|
+
return undefined;
|
|
27
|
+
};
|
|
17
28
|
if (!open) {
|
|
18
29
|
return null;
|
|
19
30
|
}
|
|
@@ -23,7 +34,7 @@ export const MenuPopover = /*#__PURE__*/forwardRef(function MenuPopover(props, f
|
|
|
23
34
|
ref: forwardedRef,
|
|
24
35
|
anchorEl: buttonRef,
|
|
25
36
|
offsetFn: offsetFn,
|
|
26
|
-
placement:
|
|
37
|
+
placement: placement ?? getDefaultPlacement(),
|
|
27
38
|
...otherProps
|
|
28
39
|
});
|
|
29
40
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MenuPopover.js","names":["forwardRef","Popper","useMenuContext","jsx","_jsx","MenuPopover","props","forwardedRef","as","innerAs","otherProps","buttonRef","open","offsetFn","isContextMenu","
|
|
1
|
+
{"version":3,"file":"MenuPopover.js","names":["forwardRef","Popper","useMenuContext","MENU_SUBMENU_TRIGGER_ATTR","jsx","_jsx","MenuPopover","props","forwardedRef","as","innerAs","placement","otherProps","buttonRef","open","offsetFn","isContextMenu","getDefaultPlacement","current","hasAttribute","undefined","ref","anchorEl"],"sources":["../../../src/Menu/MenuPopover.tsx"],"sourcesContent":["import type { ElementType, ReactNode } from 'react';\nimport { forwardRef } from 'react';\n\nimport type { PopperProps } from '../Popper';\nimport { Popper } from '../Popper';\nimport { useMenuContext } from './context';\nimport { MENU_SUBMENU_TRIGGER_ATTR } from './scope';\n\nexport interface MenuPopoverProps extends Omit<PopperProps, 'anchorEl'> {\n as?: ElementType<any>;\n innerAs?: ElementType<any>;\n children?: ReactNode;\n}\n\nexport const MenuPopover = forwardRef<HTMLDivElement, MenuPopoverProps>(\n function MenuPopover(props, forwardedRef) {\n const { as = 'div', innerAs, placement, ...otherProps } = props;\n const { buttonRef, open, offsetFn, isContextMenu } = useMenuContext();\n const getDefaultPlacement = () => {\n if (buttonRef.current?.hasAttribute(MENU_SUBMENU_TRIGGER_ATTR)) {\n return 'right-start';\n }\n if (isContextMenu.current) {\n return 'bottom-start';\n }\n return undefined;\n };\n\n if (!open) {\n return null;\n }\n\n return (\n <Popper\n as={as}\n innerAs={innerAs}\n ref={forwardedRef}\n anchorEl={buttonRef}\n offsetFn={offsetFn}\n placement={placement ?? getDefaultPlacement()}\n {...otherProps}\n />\n );\n }\n);\n"],"mappings":"AACA,SAASA,UAAU,QAAQ,OAAO;AAGlC,SAASC,MAAM,QAAQ,WAAW;AAClC,SAASC,cAAc,QAAQ,WAAW;AAC1C,SAASC,yBAAyB,QAAQ,SAAS;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAQpD,OAAO,MAAMC,WAAW,gBAAGN,UAAU,CACnC,SAASM,WAAWA,CAACC,KAAK,EAAEC,YAAY,EAAE;EACxC,MAAM;IAAEC,EAAE,GAAG,KAAK;IAAEC,OAAO;IAAEC,SAAS;IAAE,GAAGC;EAAW,CAAC,GAAGL,KAAK;EAC/D,MAAM;IAAEM,SAAS;IAAEC,IAAI;IAAEC,QAAQ;IAAEC;EAAc,CAAC,GAAGd,cAAc,CAAC,CAAC;EACrE,MAAMe,mBAAmB,GAAGA,CAAA,KAAM;IAChC,IAAIJ,SAAS,CAACK,OAAO,EAAEC,YAAY,CAAChB,yBAAyB,CAAC,EAAE;MAC9D,OAAO,aAAa;IACtB;IACA,IAAIa,aAAa,CAACE,OAAO,EAAE;MACzB,OAAO,cAAc;IACvB;IACA,OAAOE,SAAS;EAClB,CAAC;EAED,IAAI,CAACN,IAAI,EAAE;IACT,OAAO,IAAI;EACb;EAEA,oBACET,IAAA,CAACJ,MAAM;IACLQ,EAAE,EAAEA,EAAG;IACPC,OAAO,EAAEA,OAAQ;IACjBW,GAAG,EAAEb,YAAa;IAClBc,QAAQ,EAAET,SAAU;IACpBE,QAAQ,EAAEA,QAAS;IACnBJ,SAAS,EAAEA,SAAS,IAAIM,mBAAmB,CAAC,CAAE;IAAA,GAC1CL;EAAU,CACf,CAAC;AAEN,CACF,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { LiHTMLAttributes, ElementType } from 'react';
|
|
2
|
+
export interface MenuSubmenuTriggerProps extends LiHTMLAttributes<HTMLLIElement> {
|
|
3
|
+
as?: ElementType<any>;
|
|
4
|
+
innerAs?: ElementType<any>;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare const MenuSubmenuTrigger: import("react").ForwardRefExoticComponent<MenuSubmenuTriggerProps & import("react").RefAttributes<any>>;
|
|
8
|
+
//# sourceMappingURL=MenuSubmenuTrigger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MenuSubmenuTrigger.d.ts","sourceRoot":"","sources":["../../../src/Menu/MenuSubmenuTrigger.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,gBAAgB,EAChB,WAAW,EAKZ,MAAM,OAAO,CAAC;AAQf,MAAM,WAAW,uBACf,SAAQ,gBAAgB,CAAC,aAAa,CAAC;IACvC,EAAE,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IACtB,OAAO,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,eAAO,MAAM,kBAAkB,yGA6I9B,CAAC"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { forwardRef, useEffect, useId, useRef } from 'react';
|
|
2
|
+
import { useMenuContext, useMenuListContext } from './context';
|
|
3
|
+
import { MENU_SUBMENU_TRIGGER_ATTR } from './scope';
|
|
4
|
+
import { assignMultipleRefs } from '../utils/assign-ref';
|
|
5
|
+
import { wrapEvent } from '../utils';
|
|
6
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
+
export const MenuSubmenuTrigger = /*#__PURE__*/forwardRef(function MenuSubmenuTrigger(props, forwardedRef) {
|
|
8
|
+
const {
|
|
9
|
+
as: Comp = 'li',
|
|
10
|
+
innerAs,
|
|
11
|
+
disabled,
|
|
12
|
+
onClick,
|
|
13
|
+
onFocus,
|
|
14
|
+
onKeyDown,
|
|
15
|
+
onMouseMove,
|
|
16
|
+
onPointerUp,
|
|
17
|
+
...otherProps
|
|
18
|
+
} = props;
|
|
19
|
+
const {
|
|
20
|
+
buttonRef,
|
|
21
|
+
menuListIdRef,
|
|
22
|
+
open,
|
|
23
|
+
onChange,
|
|
24
|
+
openWithArrowKeyRef
|
|
25
|
+
} = useMenuContext();
|
|
26
|
+
const {
|
|
27
|
+
navigationItem,
|
|
28
|
+
onNavigate
|
|
29
|
+
} = useMenuListContext();
|
|
30
|
+
const ref = useRef(null);
|
|
31
|
+
const itemId = useId();
|
|
32
|
+
const isActive = ref.current && ref.current === navigationItem;
|
|
33
|
+
const setTrigger = () => {
|
|
34
|
+
if (ref.current) {
|
|
35
|
+
buttonRef.current = ref.current;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const createMenuTriggerEvent = () => ({
|
|
39
|
+
// This close path is only used when roving focus leaves the trigger.
|
|
40
|
+
// Internal state transitions only need currentTarget/target plus
|
|
41
|
+
// preventDefault/defaultPrevented for wrapEvent compatibility.
|
|
42
|
+
currentTarget: ref.current,
|
|
43
|
+
target: ref.current,
|
|
44
|
+
preventDefault() {},
|
|
45
|
+
defaultPrevented: false
|
|
46
|
+
});
|
|
47
|
+
const openSubmenu = function (e) {
|
|
48
|
+
let focusFirstItem = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
49
|
+
if (disabled || !ref.current) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
setTrigger();
|
|
53
|
+
onNavigate && onNavigate(ref.current);
|
|
54
|
+
if (focusFirstItem) {
|
|
55
|
+
openWithArrowKeyRef.current = 'ArrowDown';
|
|
56
|
+
}
|
|
57
|
+
onChange(e, true);
|
|
58
|
+
};
|
|
59
|
+
useEffect(() => {
|
|
60
|
+
if (!open || !ref.current) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if (navigationItem && navigationItem !== ref.current) {
|
|
64
|
+
onChange(createMenuTriggerEvent(), false);
|
|
65
|
+
}
|
|
66
|
+
}, [navigationItem, onChange, open]);
|
|
67
|
+
const handleClick = e => {
|
|
68
|
+
openSubmenu(e);
|
|
69
|
+
e.preventDefault();
|
|
70
|
+
};
|
|
71
|
+
const handleFocus = () => {
|
|
72
|
+
if (!disabled && ref.current && ref.current !== navigationItem) {
|
|
73
|
+
onNavigate && onNavigate(ref.current);
|
|
74
|
+
}
|
|
75
|
+
setTrigger();
|
|
76
|
+
};
|
|
77
|
+
const handleKeyDown = e => {
|
|
78
|
+
switch (e.key) {
|
|
79
|
+
case ' ':
|
|
80
|
+
case 'Enter':
|
|
81
|
+
openSubmenu(e, true);
|
|
82
|
+
e.preventDefault();
|
|
83
|
+
break;
|
|
84
|
+
case 'ArrowRight':
|
|
85
|
+
if (!open) {
|
|
86
|
+
openSubmenu(e, true);
|
|
87
|
+
e.preventDefault();
|
|
88
|
+
}
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
const handleMouseMove = e => {
|
|
93
|
+
if (!disabled && ref.current && ref.current !== navigationItem) {
|
|
94
|
+
onNavigate && onNavigate(ref.current);
|
|
95
|
+
}
|
|
96
|
+
if (!disabled && !open) {
|
|
97
|
+
openSubmenu(e);
|
|
98
|
+
} else {
|
|
99
|
+
setTrigger();
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
const handlePointerUp = e => {
|
|
103
|
+
if (e.pointerType === 'touch') {
|
|
104
|
+
openSubmenu(e);
|
|
105
|
+
e.preventDefault();
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
return /*#__PURE__*/_jsx(Comp, {
|
|
109
|
+
ref: assignMultipleRefs(ref, forwardedRef),
|
|
110
|
+
as: innerAs,
|
|
111
|
+
id: disabled ? undefined : itemId,
|
|
112
|
+
[MENU_SUBMENU_TRIGGER_ATTR]: '',
|
|
113
|
+
"data-menu-submenu-trigger": "",
|
|
114
|
+
"data-highlighted": isActive ? '' : undefined,
|
|
115
|
+
role: "menuitem",
|
|
116
|
+
"aria-haspopup": "menu",
|
|
117
|
+
"aria-controls": menuListIdRef.current,
|
|
118
|
+
"aria-expanded": open ? true : undefined,
|
|
119
|
+
onClick: wrapEvent(onClick, handleClick),
|
|
120
|
+
tabIndex: disabled ? -1 : 0,
|
|
121
|
+
onFocus: wrapEvent(onFocus, handleFocus),
|
|
122
|
+
onKeyDown: wrapEvent(onKeyDown, handleKeyDown),
|
|
123
|
+
onMouseMove: wrapEvent(onMouseMove, handleMouseMove),
|
|
124
|
+
onPointerUp: wrapEvent(onPointerUp, handlePointerUp),
|
|
125
|
+
"data-disabled": disabled ? '' : undefined,
|
|
126
|
+
"aria-disabled": disabled ? '' : undefined,
|
|
127
|
+
disabled: disabled,
|
|
128
|
+
...otherProps
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
//# sourceMappingURL=MenuSubmenuTrigger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MenuSubmenuTrigger.js","names":["forwardRef","useEffect","useId","useRef","useMenuContext","useMenuListContext","MENU_SUBMENU_TRIGGER_ATTR","assignMultipleRefs","wrapEvent","jsx","_jsx","MenuSubmenuTrigger","props","forwardedRef","as","Comp","innerAs","disabled","onClick","onFocus","onKeyDown","onMouseMove","onPointerUp","otherProps","buttonRef","menuListIdRef","open","onChange","openWithArrowKeyRef","navigationItem","onNavigate","ref","itemId","isActive","current","setTrigger","createMenuTriggerEvent","currentTarget","target","preventDefault","defaultPrevented","openSubmenu","e","focusFirstItem","arguments","length","undefined","handleClick","handleFocus","handleKeyDown","key","handleMouseMove","handlePointerUp","pointerType","id","role","tabIndex"],"sources":["../../../src/Menu/MenuSubmenuTrigger.tsx"],"sourcesContent":["import type {\n FocusEventHandler,\n KeyboardEvent,\n KeyboardEventHandler,\n LiHTMLAttributes,\n ElementType,\n MouseEvent,\n MouseEventHandler,\n PointerEvent,\n PointerEventHandler,\n} from 'react';\nimport { forwardRef, useEffect, useId, useRef } from 'react';\n\nimport { useMenuContext, useMenuListContext } from './context';\nimport { MENU_SUBMENU_TRIGGER_ATTR } from './scope';\nimport { assignMultipleRefs } from '../utils/assign-ref';\nimport { wrapEvent } from '../utils';\n\nexport interface MenuSubmenuTriggerProps\n extends LiHTMLAttributes<HTMLLIElement> {\n as?: ElementType<any>;\n innerAs?: ElementType<any>;\n disabled?: boolean;\n}\n\nexport const MenuSubmenuTrigger = forwardRef<any, MenuSubmenuTriggerProps>(\n function MenuSubmenuTrigger(props, forwardedRef) {\n const {\n as: Comp = 'li',\n innerAs,\n disabled,\n onClick,\n onFocus,\n onKeyDown,\n onMouseMove,\n onPointerUp,\n ...otherProps\n } = props;\n const {\n buttonRef,\n menuListIdRef,\n open,\n onChange,\n openWithArrowKeyRef,\n } = useMenuContext();\n const { navigationItem, onNavigate } = useMenuListContext();\n const ref = useRef<HTMLLIElement | null>(null);\n const itemId = useId();\n\n const isActive = ref.current && ref.current === navigationItem;\n\n const setTrigger = () => {\n if (ref.current) {\n buttonRef.current = ref.current;\n }\n };\n\n const createMenuTriggerEvent = () =>\n ({\n // This close path is only used when roving focus leaves the trigger.\n // Internal state transitions only need currentTarget/target plus\n // preventDefault/defaultPrevented for wrapEvent compatibility.\n currentTarget: ref.current,\n target: ref.current,\n preventDefault() {},\n defaultPrevented: false,\n }) as unknown as Parameters<typeof onChange>[0];\n\n const openSubmenu = (\n e:\n | MouseEvent<HTMLLIElement>\n | KeyboardEvent<HTMLLIElement>\n | PointerEvent<HTMLLIElement>,\n focusFirstItem = false\n ) => {\n if (disabled || !ref.current) {\n return;\n }\n setTrigger();\n onNavigate && onNavigate(ref.current);\n if (focusFirstItem) {\n openWithArrowKeyRef.current = 'ArrowDown';\n }\n onChange(e, true);\n };\n\n useEffect(() => {\n if (!open || !ref.current) {\n return;\n }\n if (navigationItem && navigationItem !== ref.current) {\n onChange(createMenuTriggerEvent(), false);\n }\n }, [navigationItem, onChange, open]);\n\n const handleClick = (e: MouseEvent<HTMLLIElement>) => {\n openSubmenu(e);\n e.preventDefault();\n };\n\n const handleFocus: FocusEventHandler<HTMLLIElement> = () => {\n if (!disabled && ref.current && ref.current !== navigationItem) {\n onNavigate && onNavigate(ref.current);\n }\n setTrigger();\n };\n\n const handleKeyDown: KeyboardEventHandler<HTMLLIElement> = (e) => {\n switch (e.key) {\n case ' ':\n case 'Enter':\n openSubmenu(e, true);\n e.preventDefault();\n break;\n case 'ArrowRight':\n if (!open) {\n openSubmenu(e, true);\n e.preventDefault();\n }\n break;\n }\n };\n\n const handleMouseMove: MouseEventHandler<HTMLLIElement> = (e) => {\n if (!disabled && ref.current && ref.current !== navigationItem) {\n onNavigate && onNavigate(ref.current);\n }\n if (!disabled && !open) {\n openSubmenu(e);\n } else {\n setTrigger();\n }\n };\n\n const handlePointerUp: PointerEventHandler<HTMLLIElement> = (e) => {\n if (e.pointerType === 'touch') {\n openSubmenu(e);\n e.preventDefault();\n }\n };\n\n return (\n <Comp\n ref={assignMultipleRefs(ref, forwardedRef)}\n as={innerAs}\n id={disabled ? undefined : itemId}\n {...{ [MENU_SUBMENU_TRIGGER_ATTR]: '' }}\n data-menu-submenu-trigger=\"\"\n data-highlighted={isActive ? '' : undefined}\n role=\"menuitem\"\n aria-haspopup=\"menu\"\n aria-controls={menuListIdRef.current}\n aria-expanded={open ? true : undefined}\n onClick={wrapEvent(onClick, handleClick)}\n tabIndex={disabled ? -1 : 0}\n onFocus={wrapEvent(onFocus, handleFocus)}\n onKeyDown={wrapEvent(onKeyDown, handleKeyDown)}\n onMouseMove={wrapEvent(onMouseMove, handleMouseMove)}\n onPointerUp={wrapEvent(onPointerUp, handlePointerUp)}\n data-disabled={disabled ? '' : undefined}\n aria-disabled={disabled ? '' : undefined}\n disabled={disabled}\n {...otherProps}\n />\n );\n }\n);\n"],"mappings":"AAWA,SAASA,UAAU,EAAEC,SAAS,EAAEC,KAAK,EAAEC,MAAM,QAAQ,OAAO;AAE5D,SAASC,cAAc,EAAEC,kBAAkB,QAAQ,WAAW;AAC9D,SAASC,yBAAyB,QAAQ,SAAS;AACnD,SAASC,kBAAkB,QAAQ,qBAAqB;AACxD,SAASC,SAAS,QAAQ,UAAU;AAAC,SAAAC,GAAA,IAAAC,IAAA;AASrC,OAAO,MAAMC,kBAAkB,gBAAGX,UAAU,CAC1C,SAASW,kBAAkBA,CAACC,KAAK,EAAEC,YAAY,EAAE;EAC/C,MAAM;IACJC,EAAE,EAAEC,IAAI,GAAG,IAAI;IACfC,OAAO;IACPC,QAAQ;IACRC,OAAO;IACPC,OAAO;IACPC,SAAS;IACTC,WAAW;IACXC,WAAW;IACX,GAAGC;EACL,CAAC,GAAGX,KAAK;EACT,MAAM;IACJY,SAAS;IACTC,aAAa;IACbC,IAAI;IACJC,QAAQ;IACRC;EACF,CAAC,GAAGxB,cAAc,CAAC,CAAC;EACpB,MAAM;IAAEyB,cAAc;IAAEC;EAAW,CAAC,GAAGzB,kBAAkB,CAAC,CAAC;EAC3D,MAAM0B,GAAG,GAAG5B,MAAM,CAAuB,IAAI,CAAC;EAC9C,MAAM6B,MAAM,GAAG9B,KAAK,CAAC,CAAC;EAEtB,MAAM+B,QAAQ,GAAGF,GAAG,CAACG,OAAO,IAAIH,GAAG,CAACG,OAAO,KAAKL,cAAc;EAE9D,MAAMM,UAAU,GAAGA,CAAA,KAAM;IACvB,IAAIJ,GAAG,CAACG,OAAO,EAAE;MACfV,SAAS,CAACU,OAAO,GAAGH,GAAG,CAACG,OAAO;IACjC;EACF,CAAC;EAED,MAAME,sBAAsB,GAAGA,CAAA,MAC5B;IACC;IACA;IACA;IACAC,aAAa,EAAEN,GAAG,CAACG,OAAO;IAC1BI,MAAM,EAAEP,GAAG,CAACG,OAAO;IACnBK,cAAcA,CAAA,EAAG,CAAC,CAAC;IACnBC,gBAAgB,EAAE;EACpB,CAAC,CAA8C;EAEjD,MAAMC,WAAW,GAAG,SAAAA,CAClBC,CAG+B,EAE5B;IAAA,IADHC,cAAc,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,KAAK;IAEtB,IAAI3B,QAAQ,IAAI,CAACc,GAAG,CAACG,OAAO,EAAE;MAC5B;IACF;IACAC,UAAU,CAAC,CAAC;IACZL,UAAU,IAAIA,UAAU,CAACC,GAAG,CAACG,OAAO,CAAC;IACrC,IAAIS,cAAc,EAAE;MAClBf,mBAAmB,CAACM,OAAO,GAAG,WAAW;IAC3C;IACAP,QAAQ,CAACe,CAAC,EAAE,IAAI,CAAC;EACnB,CAAC;EAEDzC,SAAS,CAAC,MAAM;IACd,IAAI,CAACyB,IAAI,IAAI,CAACK,GAAG,CAACG,OAAO,EAAE;MACzB;IACF;IACA,IAAIL,cAAc,IAAIA,cAAc,KAAKE,GAAG,CAACG,OAAO,EAAE;MACpDP,QAAQ,CAACS,sBAAsB,CAAC,CAAC,EAAE,KAAK,CAAC;IAC3C;EACF,CAAC,EAAE,CAACP,cAAc,EAAEF,QAAQ,EAAED,IAAI,CAAC,CAAC;EAEpC,MAAMqB,WAAW,GAAIL,CAA4B,IAAK;IACpDD,WAAW,CAACC,CAAC,CAAC;IACdA,CAAC,CAACH,cAAc,CAAC,CAAC;EACpB,CAAC;EAED,MAAMS,WAA6C,GAAGA,CAAA,KAAM;IAC1D,IAAI,CAAC/B,QAAQ,IAAIc,GAAG,CAACG,OAAO,IAAIH,GAAG,CAACG,OAAO,KAAKL,cAAc,EAAE;MAC9DC,UAAU,IAAIA,UAAU,CAACC,GAAG,CAACG,OAAO,CAAC;IACvC;IACAC,UAAU,CAAC,CAAC;EACd,CAAC;EAED,MAAMc,aAAkD,GAAIP,CAAC,IAAK;IAChE,QAAQA,CAAC,CAACQ,GAAG;MACX,KAAK,GAAG;MACR,KAAK,OAAO;QACVT,WAAW,CAACC,CAAC,EAAE,IAAI,CAAC;QACpBA,CAAC,CAACH,cAAc,CAAC,CAAC;QAClB;MACF,KAAK,YAAY;QACf,IAAI,CAACb,IAAI,EAAE;UACTe,WAAW,CAACC,CAAC,EAAE,IAAI,CAAC;UACpBA,CAAC,CAACH,cAAc,CAAC,CAAC;QACpB;QACA;IACJ;EACF,CAAC;EAED,MAAMY,eAAiD,GAAIT,CAAC,IAAK;IAC/D,IAAI,CAACzB,QAAQ,IAAIc,GAAG,CAACG,OAAO,IAAIH,GAAG,CAACG,OAAO,KAAKL,cAAc,EAAE;MAC9DC,UAAU,IAAIA,UAAU,CAACC,GAAG,CAACG,OAAO,CAAC;IACvC;IACA,IAAI,CAACjB,QAAQ,IAAI,CAACS,IAAI,EAAE;MACtBe,WAAW,CAACC,CAAC,CAAC;IAChB,CAAC,MAAM;MACLP,UAAU,CAAC,CAAC;IACd;EACF,CAAC;EAED,MAAMiB,eAAmD,GAAIV,CAAC,IAAK;IACjE,IAAIA,CAAC,CAACW,WAAW,KAAK,OAAO,EAAE;MAC7BZ,WAAW,CAACC,CAAC,CAAC;MACdA,CAAC,CAACH,cAAc,CAAC,CAAC;IACpB;EACF,CAAC;EAED,oBACE7B,IAAA,CAACK,IAAI;IACHgB,GAAG,EAAExB,kBAAkB,CAACwB,GAAG,EAAElB,YAAY,CAAE;IAC3CC,EAAE,EAAEE,OAAQ;IACZsC,EAAE,EAAErC,QAAQ,GAAG6B,SAAS,GAAGd,MAAO;IAC5B,CAAC1B,yBAAyB,GAAG,EAAE;IACrC,6BAA0B,EAAE;IAC5B,oBAAkB2B,QAAQ,GAAG,EAAE,GAAGa,SAAU;IAC5CS,IAAI,EAAC,UAAU;IACf,iBAAc,MAAM;IACpB,iBAAe9B,aAAa,CAACS,OAAQ;IACrC,iBAAeR,IAAI,GAAG,IAAI,GAAGoB,SAAU;IACvC5B,OAAO,EAAEV,SAAS,CAACU,OAAO,EAAE6B,WAAW,CAAE;IACzCS,QAAQ,EAAEvC,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAE;IAC5BE,OAAO,EAAEX,SAAS,CAACW,OAAO,EAAE6B,WAAW,CAAE;IACzC5B,SAAS,EAAEZ,SAAS,CAACY,SAAS,EAAE6B,aAAa,CAAE;IAC/C5B,WAAW,EAAEb,SAAS,CAACa,WAAW,EAAE8B,eAAe,CAAE;IACrD7B,WAAW,EAAEd,SAAS,CAACc,WAAW,EAAE8B,eAAe,CAAE;IACrD,iBAAenC,QAAQ,GAAG,EAAE,GAAG6B,SAAU;IACzC,iBAAe7B,QAAQ,GAAG,EAAE,GAAG6B,SAAU;IACzC7B,QAAQ,EAAEA,QAAS;IAAA,GACfM;EAAU,CACf,CAAC;AAEN,CACF,CAAC","ignoreList":[]}
|
|
@@ -1,22 +1,32 @@
|
|
|
1
1
|
import type { OffsetsFunction } from '@popperjs/core/lib/modifiers/offset';
|
|
2
|
-
import type { Dispatch, KeyboardEvent, MouseEvent, MutableRefObject, PointerEvent, SetStateAction } from 'react';
|
|
2
|
+
import type { Dispatch, KeyboardEvent, MouseEvent, MutableRefObject, PointerEvent as ReactPointerEvent, SetStateAction } from 'react';
|
|
3
|
+
import type { MenuBarContextProps } from '../MenuBar/context';
|
|
3
4
|
export type ItemObject = {
|
|
4
5
|
text: string;
|
|
5
6
|
value: any;
|
|
6
7
|
id: string | undefined;
|
|
7
8
|
};
|
|
9
|
+
export type MenuTriggerEvent = KeyboardEvent<any> | MouseEvent<any> | ReactPointerEvent<any> | PointerEvent;
|
|
8
10
|
export interface MenuContextProps {
|
|
9
11
|
buttonRef: MutableRefObject<HTMLElement | null>;
|
|
10
12
|
menuListIdRef: MutableRefObject<undefined | string>;
|
|
11
13
|
openWithArrowKeyRef: MutableRefObject<string | null>;
|
|
12
|
-
onChange: (e:
|
|
14
|
+
onChange: (e: MenuTriggerEvent, isOpen: boolean) => void;
|
|
13
15
|
open: boolean;
|
|
14
16
|
offsetFn: OffsetsFunction | undefined;
|
|
15
17
|
setOffsetFn: Dispatch<SetStateAction<OffsetsFunction | undefined>>;
|
|
16
18
|
isContextMenu: MutableRefObject<boolean>;
|
|
19
|
+
parentMenu: MenuContextProps | null;
|
|
20
|
+
menuBar: MenuBarContextProps | null;
|
|
21
|
+
menuBarMenuId: string | null;
|
|
22
|
+
closeMenu: (e: MenuTriggerEvent, options?: {
|
|
23
|
+
focusTrigger?: boolean;
|
|
24
|
+
}) => void;
|
|
25
|
+
closeAllMenus: (e: MenuTriggerEvent) => void;
|
|
17
26
|
}
|
|
18
|
-
export declare const MenuProvider: import("react").Provider<MenuContextProps>;
|
|
27
|
+
export declare const MenuProvider: import("react").Provider<MenuContextProps | null>;
|
|
19
28
|
export declare const useMenuContext: () => MenuContextProps;
|
|
29
|
+
export declare const useOptionalMenuContext: () => MenuContextProps | null;
|
|
20
30
|
export interface MenuListContextProps {
|
|
21
31
|
navigationItem: HTMLElement | undefined;
|
|
22
32
|
onNavigate: undefined | ((idx: HTMLElement) => void);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/Menu/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,YAAY,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/Menu/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,YAAY,IAAI,iBAAiB,EACjC,cAAc,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,GAAG,CAAC;IAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAC9E,MAAM,MAAM,gBAAgB,GACxB,aAAa,CAAC,GAAG,CAAC,GAClB,UAAU,CAAC,GAAG,CAAC,GACf,iBAAiB,CAAC,GAAG,CAAC,GACtB,YAAY,CAAC;AAGjB,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,gBAAgB,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAChD,aAAa,EAAE,gBAAgB,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;IACpD,mBAAmB,EAAE,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACrD,QAAQ,EAAE,CAAC,CAAC,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACzD,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,eAAe,GAAG,SAAS,CAAC;IACtC,WAAW,EAAE,QAAQ,CAAC,cAAc,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC;IACnE,aAAa,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACzC,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACpC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,CACT,CAAC,EAAE,gBAAgB,EACnB,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,KACjC,IAAI,CAAC;IACV,aAAa,EAAE,CAAC,CAAC,EAAE,gBAAgB,KAAK,IAAI,CAAC;CAC9C;AAGD,eAAO,MAAkB,YAAY,mDAAgB,CAAC;AACtD,eAAO,MAAM,cAAc,QAAoC,gBAAgB,CAAC;AAChF,eAAO,MAAM,sBAAsB,+BAAgC,CAAC;AAGpE,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,WAAW,GAAG,SAAS,CAAC;IACxC,UAAU,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,CAAC,CAAC;CACtD;AAGD,eAAO,MAAM,gBAAgB,gDAA2B,CAAC;AACzD,eAAO,MAAM,kBAAkB,4BAAoC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":["createContext","useContext","menuContext","Provider","MenuProvider","useMenuContext","menuListContext","MenuListProvider","useMenuListContext"],"sources":["../../../src/Menu/context.ts"],"sourcesContent":["import type { OffsetsFunction } from '@popperjs/core/lib/modifiers/offset';\nimport type {\n Dispatch,\n KeyboardEvent,\n MouseEvent,\n MutableRefObject,\n PointerEvent,\n SetStateAction,\n} from 'react';\nimport { createContext, useContext } from 'react';\n\nexport type ItemObject = { text: string; value: any; id: string | undefined };\n\n// MenuRoot\nexport interface MenuContextProps {\n buttonRef: MutableRefObject<HTMLElement | null>;\n menuListIdRef: MutableRefObject<undefined | string>;\n openWithArrowKeyRef: MutableRefObject<string | null>;\n onChange: (
|
|
1
|
+
{"version":3,"file":"context.js","names":["createContext","useContext","menuContext","Provider","MenuProvider","useMenuContext","useOptionalMenuContext","menuListContext","MenuListProvider","useMenuListContext"],"sources":["../../../src/Menu/context.ts"],"sourcesContent":["import type { OffsetsFunction } from '@popperjs/core/lib/modifiers/offset';\nimport type {\n Dispatch,\n KeyboardEvent,\n MouseEvent,\n MutableRefObject,\n PointerEvent as ReactPointerEvent,\n SetStateAction,\n} from 'react';\nimport { createContext, useContext } from 'react';\n\nimport type { MenuBarContextProps } from '../MenuBar/context';\n\nexport type ItemObject = { text: string; value: any; id: string | undefined };\nexport type MenuTriggerEvent =\n | KeyboardEvent<any>\n | MouseEvent<any>\n | ReactPointerEvent<any>\n | PointerEvent;\n\n// MenuRoot\nexport interface MenuContextProps {\n buttonRef: MutableRefObject<HTMLElement | null>;\n menuListIdRef: MutableRefObject<undefined | string>;\n openWithArrowKeyRef: MutableRefObject<string | null>;\n onChange: (e: MenuTriggerEvent, isOpen: boolean) => void;\n open: boolean;\n offsetFn: OffsetsFunction | undefined;\n setOffsetFn: Dispatch<SetStateAction<OffsetsFunction | undefined>>;\n isContextMenu: MutableRefObject<boolean>;\n parentMenu: MenuContextProps | null;\n menuBar: MenuBarContextProps | null;\n menuBarMenuId: string | null;\n closeMenu: (\n e: MenuTriggerEvent,\n options?: { focusTrigger?: boolean }\n ) => void;\n closeAllMenus: (e: MenuTriggerEvent) => void;\n}\n\nconst menuContext = createContext<MenuContextProps | null>(null);\nexport const { Provider: MenuProvider } = menuContext;\nexport const useMenuContext = () => useContext(menuContext) as MenuContextProps;\nexport const useOptionalMenuContext = () => useContext(menuContext);\n\n// MenuList\nexport interface MenuListContextProps {\n navigationItem: HTMLElement | undefined;\n onNavigate: undefined | ((idx: HTMLElement) => void);\n}\n\nconst menuListContext = createContext<MenuListContextProps>(null as any);\nexport const MenuListProvider = menuListContext.Provider;\nexport const useMenuListContext = () => useContext(menuListContext);\n"],"mappings":"AASA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;;AAWjD;;AAoBA,MAAMC,WAAW,gBAAGF,aAAa,CAA0B,IAAI,CAAC;AAChE,OAAO,MAAM;EAAEG,QAAQ,EAAEC;AAAa,CAAC,GAAGF,WAAW;AACrD,OAAO,MAAMG,cAAc,GAAGA,CAAA,KAAMJ,UAAU,CAACC,WAAW,CAAqB;AAC/E,OAAO,MAAMI,sBAAsB,GAAGA,CAAA,KAAML,UAAU,CAACC,WAAW,CAAC;;AAEnE;;AAMA,MAAMK,eAAe,gBAAGP,aAAa,CAAuB,IAAW,CAAC;AACxE,OAAO,MAAMQ,gBAAgB,GAAGD,eAAe,CAACJ,QAAQ;AACxD,OAAO,MAAMM,kBAAkB,GAAGA,CAAA,KAAMR,UAAU,CAACM,eAAe,CAAC","ignoreList":[]}
|
|
@@ -4,4 +4,7 @@ export * from './ContextMenuTrigger';
|
|
|
4
4
|
export * from './MenuItem';
|
|
5
5
|
export * from './MenuList';
|
|
6
6
|
export * from './MenuPopover';
|
|
7
|
+
export { Menu as MenuSubmenu } from './Menu';
|
|
8
|
+
export type { MenuProps as MenuSubmenuProps } from './Menu';
|
|
9
|
+
export * from './MenuSubmenuTrigger';
|
|
7
10
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Menu/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Menu/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC7C,YAAY,EAAE,SAAS,IAAI,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAC5D,cAAc,sBAAsB,CAAC"}
|
package/build/esm/Menu/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/Menu/index.ts"],"sourcesContent":["export * from './Menu';\nexport * from './MenuButton';\nexport * from './ContextMenuTrigger';\nexport * from './MenuItem';\nexport * from './MenuList';\nexport * from './MenuPopover';\n"],"mappings":"AAAA,cAAc,QAAQ;AACtB,cAAc,cAAc;AAC5B,cAAc,sBAAsB;AACpC,cAAc,YAAY;AAC1B,cAAc,YAAY;AAC1B,cAAc,eAAe","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["Menu","MenuSubmenu"],"sources":["../../../src/Menu/index.ts"],"sourcesContent":["export * from './Menu';\nexport * from './MenuButton';\nexport * from './ContextMenuTrigger';\nexport * from './MenuItem';\nexport * from './MenuList';\nexport * from './MenuPopover';\nexport { Menu as MenuSubmenu } from './Menu';\nexport type { MenuProps as MenuSubmenuProps } from './Menu';\nexport * from './MenuSubmenuTrigger';\n"],"mappings":"AAAA,cAAc,QAAQ;AACtB,cAAc,cAAc;AAC5B,cAAc,sBAAsB;AACpC,cAAc,YAAY;AAC1B,cAAc,YAAY;AAC1B,cAAc,eAAe;AAC7B,SAASA,IAAI,IAAIC,WAAW,QAAQ,QAAQ;AAE5C,cAAc,sBAAsB","ignoreList":[]}
|