@tamagui/menu 3.0.0-beta.924.1 → 3.0.1

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.
Files changed (36) hide show
  1. package/dist/cjs/Menu.cjs +1 -0
  2. package/dist/cjs/Menu.native.cjs +1 -0
  3. package/dist/cjs/Menu.native.js +1 -0
  4. package/dist/cjs/Menu.native.js.map +1 -1
  5. package/dist/cjs/createNonNativeMenu.cjs +185 -13
  6. package/dist/cjs/createNonNativeMenu.native.cjs +229 -22
  7. package/dist/cjs/createNonNativeMenu.native.js +229 -22
  8. package/dist/cjs/createNonNativeMenu.native.js.map +1 -1
  9. package/dist/esm/Menu.mjs +1 -0
  10. package/dist/esm/Menu.mjs.map +1 -1
  11. package/dist/esm/Menu.native.js +1 -0
  12. package/dist/esm/Menu.native.js.map +1 -1
  13. package/dist/esm/createNonNativeMenu.mjs +185 -13
  14. package/dist/esm/createNonNativeMenu.mjs.map +1 -1
  15. package/dist/esm/createNonNativeMenu.native.js +229 -22
  16. package/dist/esm/createNonNativeMenu.native.js.map +1 -1
  17. package/dist/jsx/Menu.mjs +1 -0
  18. package/dist/jsx/Menu.mjs.map +1 -1
  19. package/dist/jsx/Menu.native.cjs +1 -0
  20. package/dist/jsx/Menu.native.js +1 -0
  21. package/dist/jsx/Menu.native.js.map +1 -1
  22. package/dist/jsx/createNonNativeMenu.mjs +185 -13
  23. package/dist/jsx/createNonNativeMenu.mjs.map +1 -1
  24. package/dist/jsx/createNonNativeMenu.native.cjs +229 -22
  25. package/dist/jsx/createNonNativeMenu.native.js +229 -22
  26. package/dist/jsx/createNonNativeMenu.native.js.map +1 -1
  27. package/package.json +14 -12
  28. package/src/Menu.tsx +1 -0
  29. package/src/createNonNativeMenu.tsx +273 -18
  30. package/src/index.tsx +2 -0
  31. package/types/Menu.d.ts +31 -14
  32. package/types/Menu.d.ts.map +1 -1
  33. package/types/createNonNativeMenu.d.ts +33 -33
  34. package/types/createNonNativeMenu.d.ts.map +1 -1
  35. package/types/index.d.ts +32 -14
  36. 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,
@@ -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,
@@ -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
- activateSelf();
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
- activateSelf();
341
+ openSelf();
192
342
  }
193
343
  context.onOpenToggle();
194
344
  }
195
345
  if (event.key === "ArrowDown") {
196
- activateSelf();
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,