@tamagui/menu 3.0.0-beta.924.1 → 3.0.0
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/cjs/Menu.cjs +1 -0
- package/dist/cjs/Menu.native.cjs +1 -0
- package/dist/cjs/Menu.native.js +1 -0
- package/dist/cjs/Menu.native.js.map +1 -1
- package/dist/cjs/createNonNativeMenu.cjs +185 -13
- package/dist/cjs/createNonNativeMenu.native.cjs +229 -22
- package/dist/cjs/createNonNativeMenu.native.js +229 -22
- package/dist/cjs/createNonNativeMenu.native.js.map +1 -1
- package/dist/esm/Menu.mjs +1 -0
- package/dist/esm/Menu.mjs.map +1 -1
- package/dist/esm/Menu.native.js +1 -0
- package/dist/esm/Menu.native.js.map +1 -1
- package/dist/esm/createNonNativeMenu.mjs +185 -13
- package/dist/esm/createNonNativeMenu.mjs.map +1 -1
- package/dist/esm/createNonNativeMenu.native.js +229 -22
- package/dist/esm/createNonNativeMenu.native.js.map +1 -1
- package/dist/jsx/Menu.mjs +1 -0
- package/dist/jsx/Menu.mjs.map +1 -1
- package/dist/jsx/Menu.native.cjs +1 -0
- package/dist/jsx/Menu.native.js +1 -0
- package/dist/jsx/Menu.native.js.map +1 -1
- package/dist/jsx/createNonNativeMenu.mjs +185 -13
- package/dist/jsx/createNonNativeMenu.mjs.map +1 -1
- package/dist/jsx/createNonNativeMenu.native.cjs +229 -22
- package/dist/jsx/createNonNativeMenu.native.js +229 -22
- package/dist/jsx/createNonNativeMenu.native.js.map +1 -1
- package/package.json +14 -12
- package/src/Menu.tsx +1 -0
- package/src/createNonNativeMenu.tsx +273 -18
- package/src/index.tsx +2 -0
- package/types/Menu.d.ts +31 -14
- package/types/Menu.d.ts.map +1 -1
- package/types/createNonNativeMenu.d.ts +33 -33
- package/types/createNonNativeMenu.d.ts.map +1 -1
- package/types/index.d.ts +32 -14
- package/types/index.d.ts.map +1 -1
package/dist/cjs/Menu.cjs
CHANGED
|
@@ -145,6 +145,7 @@ function createMenu() {
|
|
|
145
145
|
const ScrollView = import_web.isWeb ? NonNativeMenu.ScrollView : NativeScrollView;
|
|
146
146
|
const Menu = (0, import_web.withStaticProperties)(MenuComp, {
|
|
147
147
|
Trigger,
|
|
148
|
+
TriggerGroup: NonNativeMenu.TriggerGroup,
|
|
148
149
|
Portal,
|
|
149
150
|
Content,
|
|
150
151
|
Group,
|
package/dist/cjs/Menu.native.cjs
CHANGED
|
@@ -156,6 +156,7 @@ function createMenu() {
|
|
|
156
156
|
var ScrollView = import_web.isWeb ? NonNativeMenu.ScrollView : NativeScrollView;
|
|
157
157
|
var Menu = (0, import_web.withStaticProperties)(MenuComp, {
|
|
158
158
|
Trigger,
|
|
159
|
+
TriggerGroup: NonNativeMenu.TriggerGroup,
|
|
159
160
|
Portal,
|
|
160
161
|
Content,
|
|
161
162
|
Group,
|
package/dist/cjs/Menu.native.js
CHANGED
|
@@ -156,6 +156,7 @@ function createMenu() {
|
|
|
156
156
|
var ScrollView = import_web.isWeb ? NonNativeMenu.ScrollView : NativeScrollView;
|
|
157
157
|
var Menu = (0, import_web.withStaticProperties)(MenuComp, {
|
|
158
158
|
Trigger,
|
|
159
|
+
TriggerGroup: NonNativeMenu.TriggerGroup,
|
|
159
160
|
Portal,
|
|
160
161
|
Content,
|
|
161
162
|
Group,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.native.js","names":[],"sources":["cjs/Menu.native.js"],"sourcesContent":["\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar Menu_exports = {};\n__export(Menu_exports, {\n createMenu: () => createMenu\n});\nmodule.exports = __toCommonJS(Menu_exports);\nvar import_jsx_runtime = require(\"react/jsx-runtime\");\nvar import_create_menu = require(\"@tamagui/create-menu\");\nvar import_web = require(\"@tamagui/web\");\nvar import_react = __toESM(require(\"react\"), 1);\nvar import_createNonNativeMenu = require(\"./createNonNativeMenu\");\nfunction createMenu() {\n var { Menu: NativeMenuRoot } = (0, import_create_menu.createNativeMenu)(\"Menu\");\n var NonNativeMenu = (0, import_createNonNativeMenu.createNonNativeMenu)();\n var COMMON_PARAMS = {\n isRoot: false,\n scope: import_createNonNativeMenu.DROPDOWN_MENU_CONTEXT\n };\n var MenuComp = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.Root,\n NativeComponent: NativeMenuRoot,\n isRoot: true\n });\n var Trigger = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.Trigger,\n NativeComponent: NativeMenuRoot.Trigger\n });\n var Portal = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.Portal,\n NativeComponent: import_react.default.Fragment\n });\n var Content = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.Content,\n NativeComponent: NativeMenuRoot.Content\n });\n var Group = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.Group,\n NativeComponent: NativeMenuRoot.Group\n });\n var Label = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.Label,\n NativeComponent: NativeMenuRoot.Label\n });\n var Item = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.Item,\n NativeComponent: NativeMenuRoot.Item\n });\n var ItemTitle = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.ItemTitle,\n NativeComponent: NativeMenuRoot.ItemTitle\n });\n var ItemSubtitle = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.ItemSubtitle,\n NativeComponent: NativeMenuRoot.ItemSubtitle\n });\n var ItemIcon = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.ItemIcon,\n NativeComponent: NativeMenuRoot.ItemIcon\n });\n var ItemImage = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.ItemImage,\n NativeComponent: NativeMenuRoot.ItemImage\n });\n var CheckboxItem = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.CheckboxItem,\n NativeComponent: NativeMenuRoot.CheckboxItem\n });\n var RadioGroup = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.RadioGroup,\n NativeComponent: function(param) {\n var { children } = param;\n return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {\n children\n });\n }\n });\n var RadioItem = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.RadioItem,\n NativeComponent: function(param) {\n var { children } = param;\n return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {\n children\n });\n }\n });\n var ItemIndicator = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.ItemIndicator,\n NativeComponent: NativeMenuRoot.ItemIndicator\n });\n var Separator = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.Separator,\n NativeComponent: NativeMenuRoot.Separator\n });\n var Arrow = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.Arrow,\n NativeComponent: NativeMenuRoot.Arrow\n });\n var Sub = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.Sub,\n NativeComponent: NativeMenuRoot.Sub\n });\n var SubTrigger = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.SubTrigger,\n NativeComponent: NativeMenuRoot.SubTrigger\n });\n var SubContent = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.SubContent,\n NativeComponent: NativeMenuRoot.SubContent\n });\n var NativeScrollView = function(param) {\n var { children } = param;\n return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {\n children\n });\n };\n NativeScrollView.displayName = \"MenuScrollView\";\n var ScrollView = import_web.isWeb ? NonNativeMenu.ScrollView : NativeScrollView;\n var Menu = (0, import_web.withStaticProperties)(MenuComp, {\n Trigger,\n Portal,\n Content,\n Group,\n Label,\n Item,\n CheckboxItem,\n RadioGroup,\n RadioItem,\n ItemIndicator,\n Separator,\n Arrow,\n Sub,\n SubTrigger,\n SubContent,\n ItemTitle,\n ItemSubtitle,\n ItemIcon,\n ItemImage,\n ScrollView\n });\n return Menu;\n}\n//# sourceMappingURL=Menu.js.map\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Menu.native.js","names":[],"sources":["cjs/Menu.native.js"],"sourcesContent":["\"use strict\";\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar Menu_exports = {};\n__export(Menu_exports, {\n createMenu: () => createMenu\n});\nmodule.exports = __toCommonJS(Menu_exports);\nvar import_jsx_runtime = require(\"react/jsx-runtime\");\nvar import_create_menu = require(\"@tamagui/create-menu\");\nvar import_web = require(\"@tamagui/web\");\nvar import_react = __toESM(require(\"react\"), 1);\nvar import_createNonNativeMenu = require(\"./createNonNativeMenu\");\nfunction createMenu() {\n var { Menu: NativeMenuRoot } = (0, import_create_menu.createNativeMenu)(\"Menu\");\n var NonNativeMenu = (0, import_createNonNativeMenu.createNonNativeMenu)();\n var COMMON_PARAMS = {\n isRoot: false,\n scope: import_createNonNativeMenu.DROPDOWN_MENU_CONTEXT\n };\n var MenuComp = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.Root,\n NativeComponent: NativeMenuRoot,\n isRoot: true\n });\n var Trigger = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.Trigger,\n NativeComponent: NativeMenuRoot.Trigger\n });\n var Portal = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.Portal,\n NativeComponent: import_react.default.Fragment\n });\n var Content = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.Content,\n NativeComponent: NativeMenuRoot.Content\n });\n var Group = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.Group,\n NativeComponent: NativeMenuRoot.Group\n });\n var Label = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.Label,\n NativeComponent: NativeMenuRoot.Label\n });\n var Item = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.Item,\n NativeComponent: NativeMenuRoot.Item\n });\n var ItemTitle = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.ItemTitle,\n NativeComponent: NativeMenuRoot.ItemTitle\n });\n var ItemSubtitle = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.ItemSubtitle,\n NativeComponent: NativeMenuRoot.ItemSubtitle\n });\n var ItemIcon = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.ItemIcon,\n NativeComponent: NativeMenuRoot.ItemIcon\n });\n var ItemImage = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.ItemImage,\n NativeComponent: NativeMenuRoot.ItemImage\n });\n var CheckboxItem = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.CheckboxItem,\n NativeComponent: NativeMenuRoot.CheckboxItem\n });\n var RadioGroup = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.RadioGroup,\n NativeComponent: function(param) {\n var { children } = param;\n return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {\n children\n });\n }\n });\n var RadioItem = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.RadioItem,\n NativeComponent: function(param) {\n var { children } = param;\n return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {\n children\n });\n }\n });\n var ItemIndicator = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.ItemIndicator,\n NativeComponent: NativeMenuRoot.ItemIndicator\n });\n var Separator = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.Separator,\n NativeComponent: NativeMenuRoot.Separator\n });\n var Arrow = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.Arrow,\n NativeComponent: NativeMenuRoot.Arrow\n });\n var Sub = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.Sub,\n NativeComponent: NativeMenuRoot.Sub\n });\n var SubTrigger = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.SubTrigger,\n NativeComponent: NativeMenuRoot.SubTrigger\n });\n var SubContent = (0, import_create_menu.withNativeMenu)({\n ...COMMON_PARAMS,\n Component: NonNativeMenu.SubContent,\n NativeComponent: NativeMenuRoot.SubContent\n });\n var NativeScrollView = function(param) {\n var { children } = param;\n return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {\n children\n });\n };\n NativeScrollView.displayName = \"MenuScrollView\";\n var ScrollView = import_web.isWeb ? NonNativeMenu.ScrollView : NativeScrollView;\n var Menu = (0, import_web.withStaticProperties)(MenuComp, {\n Trigger,\n TriggerGroup: NonNativeMenu.TriggerGroup,\n Portal,\n Content,\n Group,\n Label,\n Item,\n CheckboxItem,\n RadioGroup,\n RadioItem,\n ItemIndicator,\n Separator,\n Arrow,\n Sub,\n SubTrigger,\n SubContent,\n ItemTitle,\n ItemSubtitle,\n ItemIcon,\n ItemImage,\n ScrollView\n });\n return Menu;\n}\n//# sourceMappingURL=Menu.js.map\n"],"mappings":"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"}
|
|
@@ -40,9 +40,90 @@ var React = __toESM(require("react"), 1);
|
|
|
40
40
|
var import_react = require("react");
|
|
41
41
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
42
42
|
const DROPDOWN_MENU_CONTEXT = "MenuContext";
|
|
43
|
+
const TriggerGroupContext = React.createContext(null);
|
|
44
|
+
const MenuTriggerGroup = (0, import_core.createStyledHOC)(import_web.View, ({ children, dir = "ltr", ...props }, forwardedRef) => {
|
|
45
|
+
const entries = React.useRef(/* @__PURE__ */ new Map());
|
|
46
|
+
const active = React.useRef(null);
|
|
47
|
+
const [tabStopId, setTabStopId] = React.useState(null);
|
|
48
|
+
const register = (0, import_web.useEvent)((entry) => {
|
|
49
|
+
entries.current.set(entry.id, entry);
|
|
50
|
+
if (!entry.disabled) setTabStopId((id) => id ?? entry.id);
|
|
51
|
+
return () => {
|
|
52
|
+
entries.current.delete(entry.id);
|
|
53
|
+
if (active.current === entry) active.current = null;
|
|
54
|
+
setTabStopId((id) => id === entry.id ? [...entries.current.values()].find((item) => !item.disabled)?.id ?? null : id);
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
const activate = (0, import_web.useEvent)((entry) => {
|
|
58
|
+
const previous = active.current;
|
|
59
|
+
active.current = entry;
|
|
60
|
+
setTabStopId(entry.id);
|
|
61
|
+
if (previous && previous.openRef !== entry.openRef && previous.openRef.current) {
|
|
62
|
+
previous.onOpenChange(false);
|
|
63
|
+
}
|
|
64
|
+
entry.activate();
|
|
65
|
+
});
|
|
66
|
+
const isOpen = (0, import_web.useEvent)(() => Boolean(active.current?.openRef.current));
|
|
67
|
+
const isActive = (0, import_web.useEvent)((openRef) => active.current?.openRef === openRef);
|
|
68
|
+
const contains = (0, import_web.useEvent)((target) => [...entries.current.values()].some((entry) => entry.ref.current?.contains(target)));
|
|
69
|
+
const move = (0, import_web.useEvent)((id, key, open) => {
|
|
70
|
+
const ordered = [...entries.current.values()].filter((entry) => !entry.disabled).sort((a, b) => {
|
|
71
|
+
const first = a.ref.current;
|
|
72
|
+
const second = b.ref.current;
|
|
73
|
+
return first && second && first.compareDocumentPosition(second) & 2 ? 1 : -1;
|
|
74
|
+
});
|
|
75
|
+
const index = ordered.findIndex((entry) => entry.id === id);
|
|
76
|
+
if (index === -1) return;
|
|
77
|
+
const step = key === "ArrowRight" === (dir === "ltr") ? 1 : -1;
|
|
78
|
+
const next = ordered[(index + step + ordered.length) % ordered.length];
|
|
79
|
+
next.ref.current?.focus?.();
|
|
80
|
+
if (open) {
|
|
81
|
+
activate(next);
|
|
82
|
+
next.onOpenChange(true);
|
|
83
|
+
requestAnimationFrame(() => next.focusContent());
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
const onFocus = (0, import_web.useEvent)((id) => setTabStopId(id));
|
|
87
|
+
const value = React.useMemo(() => ({
|
|
88
|
+
dir,
|
|
89
|
+
tabStopId,
|
|
90
|
+
register,
|
|
91
|
+
activate,
|
|
92
|
+
isOpen,
|
|
93
|
+
isActive,
|
|
94
|
+
contains,
|
|
95
|
+
move,
|
|
96
|
+
onFocus
|
|
97
|
+
}), [
|
|
98
|
+
dir,
|
|
99
|
+
tabStopId,
|
|
100
|
+
register,
|
|
101
|
+
activate,
|
|
102
|
+
isOpen,
|
|
103
|
+
isActive,
|
|
104
|
+
contains,
|
|
105
|
+
move,
|
|
106
|
+
onFocus
|
|
107
|
+
]);
|
|
108
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TriggerGroupContext.Provider, {
|
|
109
|
+
value,
|
|
110
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_web.View, {
|
|
111
|
+
flexDirection: "row",
|
|
112
|
+
role: "menubar",
|
|
113
|
+
...props,
|
|
114
|
+
...import_web.isWeb && { dir },
|
|
115
|
+
ref: forwardedRef,
|
|
116
|
+
children
|
|
117
|
+
})
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
MenuTriggerGroup.displayName = "MenuTriggerGroup";
|
|
43
121
|
function useMenuTriggerSetup(open) {
|
|
44
122
|
const triggerStateSettersRef = React.useRef(/* @__PURE__ */ new Map());
|
|
45
123
|
const activeTriggerIdRef = React.useRef(null);
|
|
124
|
+
const triggerGroupsRef = React.useRef(/* @__PURE__ */ new Map());
|
|
125
|
+
const activeGroupRef = React.useRef(null);
|
|
126
|
+
const [activeGroup, setActiveGroup] = React.useState(null);
|
|
46
127
|
const setActiveTrigger = (0, import_web.useEvent)((id) => {
|
|
47
128
|
const prevId = activeTriggerIdRef.current;
|
|
48
129
|
if (prevId === id) return;
|
|
@@ -50,18 +131,24 @@ function useMenuTriggerSetup(open) {
|
|
|
50
131
|
triggerStateSettersRef.current.get(prevId)?.(false);
|
|
51
132
|
}
|
|
52
133
|
activeTriggerIdRef.current = id;
|
|
134
|
+
activeGroupRef.current = id ? triggerGroupsRef.current.get(id) ?? null : null;
|
|
135
|
+
setActiveGroup(activeGroupRef.current);
|
|
53
136
|
if (id && open) {
|
|
54
137
|
triggerStateSettersRef.current.get(id)?.(true);
|
|
55
138
|
}
|
|
56
139
|
});
|
|
57
|
-
const registerTrigger = (0, import_web.useEvent)((id, setOpenState) => {
|
|
140
|
+
const registerTrigger = (0, import_web.useEvent)((id, setOpenState, group) => {
|
|
141
|
+
triggerGroupsRef.current.set(id, group);
|
|
58
142
|
triggerStateSettersRef.current.set(id, setOpenState);
|
|
59
143
|
setOpenState(activeTriggerIdRef.current === id && open);
|
|
60
144
|
});
|
|
61
145
|
const unregisterTrigger = (0, import_web.useEvent)((id) => {
|
|
62
146
|
triggerStateSettersRef.current.delete(id);
|
|
147
|
+
triggerGroupsRef.current.delete(id);
|
|
63
148
|
if (activeTriggerIdRef.current === id) {
|
|
64
149
|
activeTriggerIdRef.current = null;
|
|
150
|
+
activeGroupRef.current = null;
|
|
151
|
+
setActiveGroup(null);
|
|
65
152
|
}
|
|
66
153
|
});
|
|
67
154
|
React.useEffect(() => {
|
|
@@ -77,7 +164,10 @@ function useMenuTriggerSetup(open) {
|
|
|
77
164
|
return {
|
|
78
165
|
setActiveTrigger,
|
|
79
166
|
registerTrigger,
|
|
80
|
-
unregisterTrigger
|
|
167
|
+
unregisterTrigger,
|
|
168
|
+
activeTriggerIdRef,
|
|
169
|
+
activeGroupRef,
|
|
170
|
+
activeGroup
|
|
81
171
|
};
|
|
82
172
|
}
|
|
83
173
|
function createNonNativeMenu() {
|
|
@@ -86,6 +176,7 @@ function createNonNativeMenu() {
|
|
|
86
176
|
const { Provider: MenuProvider, useStyledContext: useMenuContext } = (0, import_web.createStyledContext)();
|
|
87
177
|
const MenuComp = (props) => {
|
|
88
178
|
const { scope, children, dir, open: openProp, defaultOpen, onOpenChange, modal = true, ...rest } = props;
|
|
179
|
+
const outerGroup = React.useContext(TriggerGroupContext);
|
|
89
180
|
const triggerRef = React.useRef(null);
|
|
90
181
|
const [open = false, setOpen] = (0, import_use_controllable_state.useControllableState)({
|
|
91
182
|
prop: openProp,
|
|
@@ -94,7 +185,8 @@ function createNonNativeMenu() {
|
|
|
94
185
|
});
|
|
95
186
|
const openRef = React.useRef(open);
|
|
96
187
|
openRef.current = open;
|
|
97
|
-
const { setActiveTrigger, registerTrigger, unregisterTrigger } = useMenuTriggerSetup(open);
|
|
188
|
+
const { setActiveTrigger, registerTrigger, unregisterTrigger, activeTriggerIdRef, activeGroupRef, activeGroup } = useMenuTriggerSetup(open);
|
|
189
|
+
const effectiveModal = outerGroup || activeGroup ? false : modal;
|
|
98
190
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MenuProvider, {
|
|
99
191
|
scope,
|
|
100
192
|
triggerId: (0, import_react.useId)(),
|
|
@@ -103,16 +195,18 @@ function createNonNativeMenu() {
|
|
|
103
195
|
openRef,
|
|
104
196
|
onOpenChange: React.useCallback((nextOpen) => setOpen(nextOpen), [setOpen]),
|
|
105
197
|
onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),
|
|
106
|
-
modal,
|
|
198
|
+
modal: effectiveModal,
|
|
107
199
|
setActiveTrigger,
|
|
108
200
|
registerTrigger,
|
|
109
201
|
unregisterTrigger,
|
|
202
|
+
activeTriggerIdRef,
|
|
203
|
+
activeGroupRef,
|
|
110
204
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Menu, {
|
|
111
205
|
scope: scope || DROPDOWN_MENU_CONTEXT,
|
|
112
206
|
open,
|
|
113
207
|
onOpenChange: setOpen,
|
|
114
|
-
dir,
|
|
115
|
-
modal,
|
|
208
|
+
dir: dir ?? outerGroup?.dir,
|
|
209
|
+
modal: effectiveModal,
|
|
116
210
|
...rest,
|
|
117
211
|
children
|
|
118
212
|
})
|
|
@@ -124,6 +218,7 @@ function createNonNativeMenu() {
|
|
|
124
218
|
const MenuTrigger = (0, import_core.createStyledHOC)(import_web.View, (props, forwardedRef) => {
|
|
125
219
|
const { scope, asChild, children, disabled = false, onKeydown, onKeyDown = onKeydown, ...triggerProps } = props;
|
|
126
220
|
const context = useMenuContext(scope);
|
|
221
|
+
const group = React.useContext(TriggerGroupContext);
|
|
127
222
|
const popperCtx = (0, import_popper.usePopperContextSlow)(scope || DROPDOWN_MENU_CONTEXT);
|
|
128
223
|
const Comp = asChild ? import_web.Slot : import_web.View;
|
|
129
224
|
const isTouchDevice = (0, import_web.useIsTouchDevice)();
|
|
@@ -132,12 +227,13 @@ function createNonNativeMenu() {
|
|
|
132
227
|
const [triggerOpen, setTriggerOpen] = React.useState(false);
|
|
133
228
|
const { registerTrigger, unregisterTrigger } = context;
|
|
134
229
|
React.useEffect(() => {
|
|
135
|
-
registerTrigger(triggerId, setTriggerOpen);
|
|
230
|
+
registerTrigger(triggerId, setTriggerOpen, group);
|
|
136
231
|
return () => unregisterTrigger(triggerId);
|
|
137
232
|
}, [
|
|
138
233
|
registerTrigger,
|
|
139
234
|
unregisterTrigger,
|
|
140
|
-
triggerId
|
|
235
|
+
triggerId,
|
|
236
|
+
group?.register
|
|
141
237
|
]);
|
|
142
238
|
const activateSelf = React.useCallback(() => {
|
|
143
239
|
context.setActiveTrigger(triggerId);
|
|
@@ -154,13 +250,39 @@ function createNonNativeMenu() {
|
|
|
154
250
|
triggerId,
|
|
155
251
|
popperCtx
|
|
156
252
|
]);
|
|
253
|
+
const activate = (0, import_web.useEvent)(activateSelf);
|
|
254
|
+
const focusContent = (0, import_web.useEvent)(() => {
|
|
255
|
+
document.getElementById(context.contentId)?.querySelector("[role^=\"menuitem\"]:not([data-disabled])")?.focus();
|
|
256
|
+
});
|
|
257
|
+
const entry = React.useRef(null);
|
|
258
|
+
if (!entry.current) {
|
|
259
|
+
entry.current = {
|
|
260
|
+
id: triggerId,
|
|
261
|
+
ref: triggerElRef,
|
|
262
|
+
openRef: context.openRef,
|
|
263
|
+
disabled,
|
|
264
|
+
activate,
|
|
265
|
+
focusContent,
|
|
266
|
+
onOpenChange: context.onOpenChange
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
entry.current.disabled = disabled;
|
|
270
|
+
entry.current.onOpenChange = context.onOpenChange;
|
|
271
|
+
const registerGroup = group?.register;
|
|
272
|
+
React.useEffect(() => registerGroup?.(entry.current), [registerGroup]);
|
|
273
|
+
const openSelf = () => {
|
|
274
|
+
if (group) group.activate(entry.current);
|
|
275
|
+
else activateSelf();
|
|
276
|
+
};
|
|
277
|
+
const shouldRejectHover = () => disabled || context.openRef.current && context.activeTriggerIdRef.current !== triggerId && !group?.isActive(context.openRef);
|
|
157
278
|
const pressEvent = import_web.isWeb ? isTouchDevice ? "onClick" : "onPointerDown" : "onPress";
|
|
158
279
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MenuTriggerFrame, {
|
|
159
280
|
asChild: true,
|
|
160
281
|
className: `is_${TRIGGER_NAME}`,
|
|
161
282
|
scope: scope || DROPDOWN_MENU_CONTEXT,
|
|
162
283
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Comp, {
|
|
163
|
-
role: "button",
|
|
284
|
+
role: group ? "menuitem" : "button",
|
|
285
|
+
tabIndex: group ? group.tabStopId === triggerId ? 0 : -1 : void 0,
|
|
164
286
|
id: context.triggerId,
|
|
165
287
|
"aria-haspopup": "menu",
|
|
166
288
|
"aria-expanded": triggerOpen,
|
|
@@ -168,15 +290,38 @@ function createNonNativeMenu() {
|
|
|
168
290
|
"data-state": triggerOpen ? "open" : "closed",
|
|
169
291
|
"data-disabled": disabled ? "" : void 0,
|
|
170
292
|
"aria-disabled": disabled || void 0,
|
|
171
|
-
ref: (0, import_web.composeRefs)(forwardedRef, context.triggerRef, triggerElRef),
|
|
293
|
+
ref: (0, import_web.composeRefs)(forwardedRef, group ? void 0 : context.triggerRef, triggerElRef),
|
|
172
294
|
...triggerProps,
|
|
295
|
+
onFocus: (0, import_web.composeEventHandlers)(props.onFocus, () => {
|
|
296
|
+
if (!disabled) group?.onFocus(triggerId);
|
|
297
|
+
}),
|
|
298
|
+
onPointerEnter: (event) => {
|
|
299
|
+
if (shouldRejectHover()) {
|
|
300
|
+
event.preventDefault();
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
props.onPointerEnter?.(event);
|
|
304
|
+
},
|
|
305
|
+
onMouseEnter: (event) => {
|
|
306
|
+
if (shouldRejectHover()) {
|
|
307
|
+
event.preventDefault();
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
(0, import_web.composeEventHandlers)(props.onMouseEnter, () => {
|
|
311
|
+
if (group?.isOpen() && !triggerOpen) {
|
|
312
|
+
triggerElRef.current?.focus?.();
|
|
313
|
+
openSelf();
|
|
314
|
+
context.onOpenChange(true);
|
|
315
|
+
}
|
|
316
|
+
})?.(event);
|
|
317
|
+
},
|
|
173
318
|
...{ [pressEvent]: (0, import_web.composeEventHandlers)(props[pressEvent], (event) => {
|
|
174
319
|
if (!disabled) {
|
|
175
320
|
if (import_web.isWeb && event instanceof PointerEvent && event.button !== 0 && event.ctrlKey === true) return;
|
|
176
321
|
if (context.openRef.current) {
|
|
177
322
|
context.setActiveTrigger(null);
|
|
178
323
|
} else {
|
|
179
|
-
|
|
324
|
+
openSelf();
|
|
180
325
|
}
|
|
181
326
|
context.onOpenToggle();
|
|
182
327
|
if (!context.openRef.current) event.preventDefault();
|
|
@@ -184,16 +329,21 @@ function createNonNativeMenu() {
|
|
|
184
329
|
}) },
|
|
185
330
|
...import_web.isWeb && { onKeyDown: (0, import_web.composeEventHandlers)(onKeyDown, (event) => {
|
|
186
331
|
if (disabled) return;
|
|
332
|
+
if (group && ["ArrowLeft", "ArrowRight"].includes(event.key)) {
|
|
333
|
+
group.move(triggerId, event.key, group.isOpen());
|
|
334
|
+
event.preventDefault();
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
187
337
|
if (["Enter", " "].includes(event.key)) {
|
|
188
338
|
if (context.openRef.current) {
|
|
189
339
|
context.setActiveTrigger(null);
|
|
190
340
|
} else {
|
|
191
|
-
|
|
341
|
+
openSelf();
|
|
192
342
|
}
|
|
193
343
|
context.onOpenToggle();
|
|
194
344
|
}
|
|
195
345
|
if (event.key === "ArrowDown") {
|
|
196
|
-
|
|
346
|
+
openSelf();
|
|
197
347
|
context.onOpenChange(true);
|
|
198
348
|
}
|
|
199
349
|
if ([
|
|
@@ -233,7 +383,24 @@ function createNonNativeMenu() {
|
|
|
233
383
|
scope: scope || DROPDOWN_MENU_CONTEXT,
|
|
234
384
|
...contentProps,
|
|
235
385
|
ref: forwardedRef,
|
|
386
|
+
onKeyDown: (0, import_web.composeEventHandlers)(props.onKeyDown, (event) => {
|
|
387
|
+
const group = context.activeGroupRef.current;
|
|
388
|
+
if (!group || !["ArrowLeft", "ArrowRight"].includes(event.key)) return;
|
|
389
|
+
const target = event.target;
|
|
390
|
+
if (target.closest("[data-tamagui-menu-content]") !== event.currentTarget) return;
|
|
391
|
+
if (target.closest("[aria-haspopup=\"menu\"]") && event.key === (group.dir === "rtl" ? "ArrowLeft" : "ArrowRight")) return;
|
|
392
|
+
const id = context.activeTriggerIdRef.current;
|
|
393
|
+
if (id) {
|
|
394
|
+
group.move(id, event.key, true);
|
|
395
|
+
event.preventDefault();
|
|
396
|
+
}
|
|
397
|
+
}),
|
|
236
398
|
onCloseAutoFocus: (0, import_web.composeEventHandlers)(props.onCloseAutoFocus, (event) => {
|
|
399
|
+
const group = context.activeGroupRef.current;
|
|
400
|
+
if (group && !group.isActive(context.openRef)) {
|
|
401
|
+
event.cancel();
|
|
402
|
+
return;
|
|
403
|
+
}
|
|
237
404
|
if (!hasInteractedOutsideRef.current) {
|
|
238
405
|
requestAnimationFrame(() => {
|
|
239
406
|
const activeEl = document.activeElement;
|
|
@@ -246,6 +413,10 @@ function createNonNativeMenu() {
|
|
|
246
413
|
event.cancel();
|
|
247
414
|
}),
|
|
248
415
|
onInteractOutside: (0, import_web.composeEventHandlers)(props.onInteractOutside, (event) => {
|
|
416
|
+
if (context.activeGroupRef.current?.contains(event.event?.target ?? null)) {
|
|
417
|
+
event.cancel();
|
|
418
|
+
return;
|
|
419
|
+
}
|
|
249
420
|
if (event.interaction !== "pointer" || !event.event) return;
|
|
250
421
|
const originalEvent = event.event;
|
|
251
422
|
const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;
|
|
@@ -326,6 +497,7 @@ function createNonNativeMenu() {
|
|
|
326
497
|
return (0, import_web.withStaticProperties)(MenuComp, {
|
|
327
498
|
Root: MenuComp,
|
|
328
499
|
Trigger: MenuTrigger,
|
|
500
|
+
TriggerGroup: MenuTriggerGroup,
|
|
329
501
|
Portal: MenuPortal,
|
|
330
502
|
Content: MenuContent,
|
|
331
503
|
Group,
|