@expcat/tigercat-react 1.3.3 → 1.4.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.
Files changed (248) hide show
  1. package/dist/{chunk-3SV6J7I5.mjs → chunk-2L7QEOFD.mjs} +34 -25
  2. package/dist/{chunk-FNJDBFKM.mjs → chunk-2LYV6NBJ.mjs} +6 -1
  3. package/dist/{chunk-EEWHWEYO.js → chunk-2RBHQBSG.js} +2 -2
  4. package/dist/{chunk-Y5RQN5BO.mjs → chunk-376X7SDZ.mjs} +2 -2
  5. package/dist/{chunk-UXUYCWQC.js → chunk-3EDASNTG.js} +5 -5
  6. package/dist/{chunk-NPTXXUXF.mjs → chunk-3RBRWBUG.mjs} +9 -7
  7. package/dist/{chunk-PUZDW7NR.js → chunk-4AMSYFYC.js} +134 -20
  8. package/dist/{chunk-IG75YSX3.mjs → chunk-4MONGWU5.mjs} +4 -6
  9. package/dist/{chunk-3CJFNG54.mjs → chunk-56CTXEJS.mjs} +1 -1
  10. package/dist/{chunk-TMON4MPO.js → chunk-5ALMTE35.js} +9 -7
  11. package/dist/{chunk-MSHCPJIJ.mjs → chunk-6BOSSZM3.mjs} +8 -9
  12. package/dist/{chunk-SIY6FDKJ.js → chunk-7CHTTM6D.js} +339 -314
  13. package/dist/{chunk-RF2BA2N6.js → chunk-7PXALKLM.js} +4 -4
  14. package/dist/{chunk-DLKUDB2R.js → chunk-AF2AEZKM.js} +15 -3
  15. package/dist/{chunk-FB34UWF7.mjs → chunk-AVLIUHOS.mjs} +101 -40
  16. package/dist/{chunk-TSJYAEFZ.js → chunk-B63GEB2Y.js} +358 -305
  17. package/dist/{chunk-CFPKK5WW.js → chunk-BA6TJQZL.js} +12 -12
  18. package/dist/{chunk-LMTUM3J3.js → chunk-BEM7XG2L.js} +2 -4
  19. package/dist/{chunk-MB6U72CI.js → chunk-BEZO5IE4.js} +2 -2
  20. package/dist/{chunk-5OHVTGHS.mjs → chunk-BN4ZKCAI.mjs} +368 -315
  21. package/dist/{chunk-UHFHOTNI.js → chunk-BRA3PO53.js} +6 -7
  22. package/dist/{chunk-M7HBWFQO.js → chunk-BROIZ266.js} +11 -1
  23. package/dist/{chunk-SDZOVRVR.mjs → chunk-CAQPYJFA.mjs} +350 -325
  24. package/dist/{chunk-BFAZZUD6.js → chunk-CC5GFX6F.js} +5 -22
  25. package/dist/{chunk-LQT6ZGME.mjs → chunk-CME2IFUT.mjs} +15 -3
  26. package/dist/{chunk-KQ5I7PRM.js → chunk-CNNEUJR2.js} +28 -14
  27. package/dist/{chunk-EF5ZTNHX.js → chunk-D5MQBUP2.js} +16 -4
  28. package/dist/{chunk-RQXY2MGX.mjs → chunk-D7UR526A.mjs} +231 -184
  29. package/dist/{chunk-CBYJXDW4.js → chunk-DBMC6FPU.js} +16 -4
  30. package/dist/{chunk-WQ4FOHOU.mjs → chunk-DEIVWO2D.mjs} +3 -5
  31. package/dist/{chunk-7QZ4XT2P.mjs → chunk-DVEK5SO6.mjs} +3 -8
  32. package/dist/{chunk-TC6JLEGZ.js → chunk-EJKOUI26.js} +24 -7
  33. package/dist/{chunk-4GITZKAH.mjs → chunk-EPJ6W4VI.mjs} +14 -2
  34. package/dist/{chunk-KYP7U6FK.js → chunk-FZHBVHQ6.js} +34 -25
  35. package/dist/{chunk-WVVXZKNI.js → chunk-GDPU5MYA.js} +3 -8
  36. package/dist/{chunk-2GQCFTD7.mjs → chunk-H4MPPCTB.mjs} +23 -4
  37. package/dist/{chunk-YOAYDEWW.mjs → chunk-HHMYERHY.mjs} +3 -20
  38. package/dist/{chunk-LRPPXU74.mjs → chunk-I7FEGKX2.mjs} +19 -5
  39. package/dist/{chunk-F6IXIH6B.mjs → chunk-IZGXDHPB.mjs} +24 -5
  40. package/dist/{chunk-GQFVVAEF.js → chunk-J6OZWT3P.js} +5 -5
  41. package/dist/{chunk-IGAMV6ML.mjs → chunk-KDXKF6B2.mjs} +1 -1
  42. package/dist/{chunk-A42OLED6.mjs → chunk-KED5S2WG.mjs} +13 -2
  43. package/dist/{chunk-BJQIYELW.mjs → chunk-KGMVRIYC.mjs} +5 -5
  44. package/dist/{chunk-6GYT3EZD.mjs → chunk-KXT2TP6A.mjs} +3 -4
  45. package/dist/{chunk-BBLVRLXT.js → chunk-KYNWNTGO.js} +230 -146
  46. package/dist/{chunk-M73NMNZX.js → chunk-L24PPXLV.js} +17 -5
  47. package/dist/chunk-L3WPA2RP.js +25 -0
  48. package/dist/{chunk-V4JIZN3E.mjs → chunk-L6KSO66F.mjs} +4 -12
  49. package/dist/{chunk-4LX5UGPQ.js → chunk-LJRCEB7F.js} +168 -121
  50. package/dist/{chunk-F7H4ALKN.js → chunk-LZG24TDB.js} +8 -9
  51. package/dist/{chunk-ZYJTHGQW.js → chunk-M3FVPPMM.js} +9 -13
  52. package/dist/{chunk-GN3TSQWW.mjs → chunk-M6YXUNOU.mjs} +2 -2
  53. package/dist/{chunk-I373B74W.js → chunk-MC26ORSN.js} +102 -41
  54. package/dist/{chunk-5HFHHFQS.mjs → chunk-MTIGGMHG.mjs} +17 -5
  55. package/dist/{chunk-DKT2EYVM.mjs → chunk-MV2JQ6XQ.mjs} +3 -6
  56. package/dist/{chunk-HR5GBE3P.js → chunk-NDGA3N6H.js} +19 -7
  57. package/dist/{chunk-BO6QGXMN.mjs → chunk-NEZ445D4.mjs} +9 -9
  58. package/dist/{chunk-4U5HSR2H.js → chunk-NVI2P7VH.js} +3 -4
  59. package/dist/{chunk-NVEIVIAW.mjs → chunk-OFRKYQOZ.mjs} +133 -19
  60. package/dist/{chunk-AW5M3EL4.js → chunk-OS6M3IZF.js} +62 -12
  61. package/dist/{chunk-3ZNZLGQO.mjs → chunk-OXQOKKTP.mjs} +6 -7
  62. package/dist/{chunk-NMEVQPOD.js → chunk-PHAJXRGE.js} +2 -4
  63. package/dist/{chunk-WG3YS2QV.js → chunk-PT5T5F4H.js} +13 -2
  64. package/dist/{chunk-WNLUUD5N.mjs → chunk-QIL24WZD.mjs} +8 -12
  65. package/dist/{chunk-ZFMMAYSX.js → chunk-QLATA4UB.js} +4 -6
  66. package/dist/{chunk-KIYNHQGW.mjs → chunk-RVLV63SI.mjs} +41 -20
  67. package/dist/{chunk-3QPCQH62.mjs → chunk-RYNLPRUM.mjs} +1 -1
  68. package/dist/{chunk-6GIJ7NFV.mjs → chunk-SDZKL3IB.mjs} +3 -5
  69. package/dist/{chunk-G5USITWF.js → chunk-SH4BZYXO.js} +27 -8
  70. package/dist/{chunk-L5AMVEQL.mjs → chunk-SLEXEH7R.mjs} +60 -10
  71. package/dist/{chunk-JLRRXRZO.js → chunk-SQONS5PH.js} +4 -7
  72. package/dist/chunk-SQTOVSDU.mjs +692 -0
  73. package/dist/{chunk-3ZQMHXRY.js → chunk-TEYL5X56.js} +39 -18
  74. package/dist/{chunk-KGSDDVRC.mjs → chunk-TNTOSFGN.mjs} +4 -4
  75. package/dist/{chunk-CY5GRTAX.js → chunk-UAM3RQY4.js} +24 -5
  76. package/dist/{chunk-XRNKHQTL.js → chunk-UEAXYZSE.js} +3 -2
  77. package/dist/{chunk-7ISEWLA3.js → chunk-UKQMF3JV.js} +21 -6
  78. package/dist/{chunk-ITVLIR7T.mjs → chunk-ULWT6W6M.mjs} +13 -20
  79. package/dist/{chunk-M5GSLKUX.mjs → chunk-VAIWWELW.mjs} +15 -3
  80. package/dist/{chunk-4SO4LANY.js → chunk-VC26SAXB.js} +340 -274
  81. package/dist/{chunk-SKMZTW3K.js → chunk-WCTNQYXO.js} +16 -23
  82. package/dist/{chunk-KXNWY2Q7.mjs → chunk-WFWEMXO7.mjs} +241 -157
  83. package/dist/chunk-WHYHLUXG.mjs +25 -0
  84. package/dist/{chunk-ONTRGV5T.js → chunk-WZUADPYB.js} +6 -14
  85. package/dist/{chunk-N4PP3ENO.js → chunk-XTQUPDRI.js} +2 -2
  86. package/dist/{chunk-XATXFVKR.mjs → chunk-Y7K27DVV.mjs} +4 -3
  87. package/dist/{chunk-WI4N5DD3.mjs → chunk-YH57D4AV.mjs} +16 -4
  88. package/dist/{chunk-3MRP3XYI.js → chunk-YRVAF2ID.js} +7 -2
  89. package/dist/{chunk-5XE5VBDS.mjs → chunk-YSGM22AH.mjs} +11 -1
  90. package/dist/{chunk-6TR7JB6C.js → chunk-ZDNQGS4O.js} +4 -4
  91. package/dist/{chunk-CHBUNQIJ.mjs → chunk-ZQSMJS2Q.mjs} +23 -6
  92. package/dist/{chunk-QQFLRNI3.mjs → chunk-ZRZB3C5J.mjs} +18 -3
  93. package/dist/components/ActivityFeed.js +4 -3
  94. package/dist/components/ActivityFeed.mjs +3 -2
  95. package/dist/components/Cascader.d.mts +3 -1
  96. package/dist/components/Cascader.d.ts +3 -1
  97. package/dist/components/Cascader.js +3 -2
  98. package/dist/components/Cascader.mjs +2 -1
  99. package/dist/components/ChatWindow.js +5 -5
  100. package/dist/components/ChatWindow.mjs +4 -4
  101. package/dist/components/Checkbox.js +4 -4
  102. package/dist/components/Checkbox.mjs +3 -3
  103. package/dist/components/CheckboxGroup.js +3 -3
  104. package/dist/components/CheckboxGroup.mjs +2 -2
  105. package/dist/components/CommentThread.js +4 -4
  106. package/dist/components/CommentThread.mjs +3 -3
  107. package/dist/components/CropUpload.js +4 -4
  108. package/dist/components/CropUpload.mjs +3 -3
  109. package/dist/components/DataTableWithToolbar.d.mts +2 -2
  110. package/dist/components/DataTableWithToolbar.d.ts +2 -2
  111. package/dist/components/DataTableWithToolbar.js +11 -11
  112. package/dist/components/DataTableWithToolbar.mjs +10 -10
  113. package/dist/components/DatePicker.d.mts +1 -0
  114. package/dist/components/DatePicker.d.ts +1 -0
  115. package/dist/components/DatePicker.js +3 -2
  116. package/dist/components/DatePicker.mjs +2 -1
  117. package/dist/components/Drawer.js +3 -3
  118. package/dist/components/Drawer.mjs +2 -2
  119. package/dist/components/FileManager.d.mts +2 -1
  120. package/dist/components/FileManager.d.ts +2 -1
  121. package/dist/components/FileManager.js +3 -2
  122. package/dist/components/FileManager.mjs +2 -1
  123. package/dist/components/Form.js +3 -2
  124. package/dist/components/Form.mjs +2 -1
  125. package/dist/components/FormItem.js +4 -3
  126. package/dist/components/FormItem.mjs +3 -2
  127. package/dist/components/FormWizard.js +4 -4
  128. package/dist/components/FormWizard.mjs +3 -3
  129. package/dist/components/Image.js +4 -4
  130. package/dist/components/Image.mjs +3 -3
  131. package/dist/components/ImageGroup.js +3 -3
  132. package/dist/components/ImageGroup.mjs +2 -2
  133. package/dist/components/ImagePreview.js +2 -2
  134. package/dist/components/ImagePreview.mjs +1 -1
  135. package/dist/components/ImageViewer.d.mts +1 -1
  136. package/dist/components/ImageViewer.d.ts +1 -1
  137. package/dist/components/ImageViewer.js +2 -2
  138. package/dist/components/ImageViewer.mjs +1 -1
  139. package/dist/components/InfiniteScroll.d.mts +2 -0
  140. package/dist/components/InfiniteScroll.d.ts +2 -0
  141. package/dist/components/InfiniteScroll.js +3 -2
  142. package/dist/components/InfiniteScroll.mjs +2 -1
  143. package/dist/components/Input.js +3 -2
  144. package/dist/components/Input.mjs +2 -1
  145. package/dist/components/InputNumber.js +3 -2
  146. package/dist/components/InputNumber.mjs +2 -1
  147. package/dist/components/List.d.mts +6 -2
  148. package/dist/components/List.d.ts +6 -2
  149. package/dist/components/List.js +3 -2
  150. package/dist/components/List.mjs +2 -1
  151. package/dist/components/Loading.js +3 -2
  152. package/dist/components/Loading.mjs +2 -1
  153. package/dist/components/MarkdownEditor.js +3 -3
  154. package/dist/components/MarkdownEditor.mjs +2 -2
  155. package/dist/components/Mentions.js +2 -2
  156. package/dist/components/Mentions.mjs +1 -1
  157. package/dist/components/Menu.d.mts +8 -80
  158. package/dist/components/Menu.d.ts +8 -80
  159. package/dist/components/Menu.js +2 -2
  160. package/dist/components/Menu.mjs +1 -1
  161. package/dist/components/MenuItem.d.mts +6 -2
  162. package/dist/components/MenuItem.d.ts +6 -2
  163. package/dist/components/MenuItem.js +2 -2
  164. package/dist/components/MenuItem.mjs +1 -1
  165. package/dist/components/MenuItemGroup.d.mts +6 -2
  166. package/dist/components/MenuItemGroup.d.ts +6 -2
  167. package/dist/components/MenuItemGroup.js +2 -2
  168. package/dist/components/MenuItemGroup.mjs +1 -1
  169. package/dist/components/Message.js +2 -2
  170. package/dist/components/Message.mjs +1 -1
  171. package/dist/components/Modal.js +3 -3
  172. package/dist/components/Modal.mjs +2 -2
  173. package/dist/components/Notification.js +2 -2
  174. package/dist/components/Notification.mjs +1 -1
  175. package/dist/components/NotificationCenter.js +5 -4
  176. package/dist/components/NotificationCenter.mjs +4 -3
  177. package/dist/components/NumberKeyboard.js +3 -2
  178. package/dist/components/NumberKeyboard.mjs +2 -1
  179. package/dist/components/Radio.js +4 -4
  180. package/dist/components/Radio.mjs +3 -3
  181. package/dist/components/RadioGroup.js +3 -3
  182. package/dist/components/RadioGroup.mjs +2 -2
  183. package/dist/components/RichTextEditor.js +3 -3
  184. package/dist/components/RichTextEditor.mjs +2 -2
  185. package/dist/components/Select.d.mts +3 -1
  186. package/dist/components/Select.d.ts +3 -1
  187. package/dist/components/Select.js +3 -2
  188. package/dist/components/Select.mjs +2 -1
  189. package/dist/components/Signature.d.mts +1 -0
  190. package/dist/components/Signature.d.ts +1 -0
  191. package/dist/components/Signature.js +3 -2
  192. package/dist/components/Signature.mjs +2 -1
  193. package/dist/components/Spotlight.js +4 -2
  194. package/dist/components/Spotlight.mjs +3 -1
  195. package/dist/components/Steps.js +2 -2
  196. package/dist/components/Steps.mjs +1 -1
  197. package/dist/components/StepsItem.js +2 -2
  198. package/dist/components/StepsItem.mjs +1 -1
  199. package/dist/components/SubMenu.d.mts +6 -2
  200. package/dist/components/SubMenu.d.ts +6 -2
  201. package/dist/components/SubMenu.js +2 -2
  202. package/dist/components/SubMenu.mjs +1 -1
  203. package/dist/components/Table.d.mts +2 -2
  204. package/dist/components/Table.d.ts +2 -2
  205. package/dist/components/Table.js +9 -9
  206. package/dist/components/Table.mjs +8 -8
  207. package/dist/components/Textarea.js +3 -3
  208. package/dist/components/Textarea.mjs +2 -2
  209. package/dist/components/TimePicker.d.mts +1 -0
  210. package/dist/components/TimePicker.d.ts +1 -0
  211. package/dist/components/TimePicker.js +4 -2
  212. package/dist/components/TimePicker.mjs +3 -1
  213. package/dist/components/Tour.js +3 -2
  214. package/dist/components/Tour.mjs +2 -1
  215. package/dist/components/Transfer.d.mts +3 -1
  216. package/dist/components/Transfer.d.ts +3 -1
  217. package/dist/components/Transfer.js +3 -2
  218. package/dist/components/Transfer.mjs +2 -1
  219. package/dist/components/Tree.d.mts +3 -1
  220. package/dist/components/Tree.d.ts +3 -1
  221. package/dist/components/Tree.js +3 -2
  222. package/dist/components/Tree.mjs +2 -1
  223. package/dist/components/TreeSelect.d.mts +3 -1
  224. package/dist/components/TreeSelect.d.ts +3 -1
  225. package/dist/components/TreeSelect.js +3 -2
  226. package/dist/components/TreeSelect.mjs +2 -1
  227. package/dist/components/Upload.js +3 -2
  228. package/dist/components/Upload.mjs +2 -1
  229. package/dist/components/VirtualTable.d.mts +3 -2
  230. package/dist/components/VirtualTable.d.ts +3 -2
  231. package/dist/components/VirtualTable.js +3 -2
  232. package/dist/components/VirtualTable.mjs +2 -1
  233. package/dist/index.d.mts +33 -7
  234. package/dist/index.d.ts +33 -7
  235. package/dist/index.js +54 -54
  236. package/dist/index.mjs +53 -53
  237. package/dist/{types-CHmCMNEM.d.ts → types-0oVwMXtR.d.mts} +1 -1
  238. package/dist/{types-CHmCMNEM.d.mts → types-0oVwMXtR.d.ts} +1 -1
  239. package/dist/types-DaC4a0Ny.d.mts +80 -0
  240. package/dist/types-DaC4a0Ny.d.ts +80 -0
  241. package/package.json +2 -2
  242. package/dist/chunk-UKGQ7256.js +0 -12
  243. package/dist/chunk-UQMPEMY7.mjs +0 -12
  244. package/dist/chunk-VNVGSPBI.mjs +0 -626
  245. package/dist/{chunk-OZD75CLT.js → chunk-ANBNSUSR.js} +3 -3
  246. package/dist/{chunk-I2AUOICV.mjs → chunk-M3MOSUZO.mjs} +3 -3
  247. package/dist/{chunk-UMZ3PMUJ.js → chunk-SXHCMZ6U.js} +2 -2
  248. package/dist/{chunk-BWDQZSAB.mjs → chunk-WTSG7QXK.mjs} +3 -3
@@ -4,78 +4,55 @@ import {
4
4
  } from "./chunk-SEWNVIHH.mjs";
5
5
 
6
6
  // src/components/Menu.tsx
7
- import React, {
8
- createContext,
9
- useContext,
10
- useState,
11
- useMemo,
12
- useCallback,
13
- useEffect,
14
- useLayoutEffect,
15
- useRef
16
- } from "react";
7
+ import React5 from "react";
17
8
  import {
18
- classNames,
19
- getMenuClasses,
20
- getMenuItemClasses,
21
- getMenuItemIndent,
22
- getSubMenuTitleClasses,
23
- getSubMenuExpandIconClasses,
24
- getSubmenuPopupZIndex,
25
- getTransformOrigin,
26
- filterMenuItems,
27
- isKeySelected,
28
- isKeyOpen,
29
- menuItemIconClasses,
30
- menuCollapsedIconClasses,
31
- menuItemGroupTitleClasses,
32
9
  menuSearchFieldClasses,
33
- menuSearchEmptyClasses,
34
10
  menuSearchInputClasses,
35
- submenuContentHorizontalClasses,
36
- submenuContentHorizontalNestedClasses,
37
- submenuContentPopupClasses,
38
- submenuContentVerticalClasses,
39
- submenuContentInlineClasses,
40
- submenuHeightTransitionClasses,
41
- getInitialSubmenuHeightTransitionStyle,
42
- createSubmenuHeightTransitionController,
43
- moveFocusInMenu,
44
- focusMenuEdge,
45
- focusFirstChildItem,
46
- replaceKeys,
47
- toggleKey,
48
- initRovingTabIndex
11
+ menuSearchEmptyClasses
49
12
  } from "@expcat/tigercat-core";
50
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
13
+
14
+ // src/components/Menu/context.ts
15
+ import { createContext, useContext } from "react";
51
16
  var MenuContext = createContext(null);
52
17
  function useMenuContext() {
53
18
  return useContext(MenuContext);
54
19
  }
55
- var Menu = ({
56
- items,
57
- mode = "vertical",
58
- theme = "light",
59
- selectedKeys: controlledSelectedKeys,
60
- defaultSelectedKeys = [],
61
- openKeys: controlledOpenKeys,
62
- defaultOpenKeys = [],
63
- collapsed = false,
64
- multiple = true,
65
- inlineIndent = 24,
66
- popupPortal = false,
67
- className,
68
- style,
69
- onSelect,
70
- onOpenChange,
71
- onSearch,
72
- searchable = false,
73
- searchValue: controlledSearchValue,
74
- defaultSearchValue = "",
75
- searchPlaceholder = "Search menu",
76
- emptyText = "No menu items found",
77
- children
78
- }) => {
20
+
21
+ // src/components/Menu/state.ts
22
+ import { useState, useMemo, useCallback, useEffect, useRef } from "react";
23
+ import {
24
+ classNames,
25
+ getMenuClasses,
26
+ filterMenuItems,
27
+ replaceKeys,
28
+ toggleKey,
29
+ initRovingTabIndex
30
+ } from "@expcat/tigercat-core";
31
+ function useMenuRootState(props) {
32
+ const {
33
+ items,
34
+ mode = "vertical",
35
+ theme = "light",
36
+ selectedKeys: controlledSelectedKeys,
37
+ defaultSelectedKeys = [],
38
+ openKeys: controlledOpenKeys,
39
+ defaultOpenKeys = [],
40
+ collapsed = false,
41
+ multiple = true,
42
+ inlineIndent = 24,
43
+ popupPortal = false,
44
+ className,
45
+ style,
46
+ onSelect,
47
+ onOpenChange,
48
+ onSearch,
49
+ searchable = false,
50
+ searchValue: controlledSearchValue,
51
+ defaultSearchValue = "",
52
+ searchPlaceholder = "Search menu",
53
+ emptyText = "No menu items found"
54
+ } = props;
55
+ const children = props.children;
79
56
  const menuRef = useRef(null);
80
57
  const resolvedMode = collapsed && mode === "inline" ? "vertical" : mode;
81
58
  const [internalSelectedKeys, setInternalSelectedKeys] = useState(defaultSelectedKeys);
@@ -146,57 +123,41 @@ var Menu = ({
146
123
  () => filterMenuItems(items ?? [], searchValue),
147
124
  [items, searchValue]
148
125
  );
149
- function renderDataItem(item) {
150
- if (item.children && item.children.length > 0) {
151
- return /* @__PURE__ */ jsx(
152
- SubMenu,
153
- {
154
- itemKey: item.key,
155
- title: item.label,
156
- icon: item.icon,
157
- disabled: item.disabled,
158
- children: item.children.map(renderDataItem)
159
- },
160
- item.key
161
- );
162
- }
163
- return /* @__PURE__ */ jsx(MenuItem, { itemKey: item.key, icon: item.icon, disabled: item.disabled, children: item.label }, item.key);
164
- }
165
- const dataChildren = filteredItems.map(renderDataItem);
166
- const hasSlotChildren = React.Children.count(children) > 0;
167
- const emptyChild = items && items.length > 0 && dataChildren.length === 0 && !hasSlotChildren ? /* @__PURE__ */ jsx("li", { role: "none", children: /* @__PURE__ */ jsx("div", { className: menuSearchEmptyClasses, children: emptyText }) }) : null;
168
126
  useEffect(() => {
169
127
  if (menuRef.current) initRovingTabIndex(menuRef.current);
170
128
  }, [resolvedMode, collapsed, selectedKeys, openKeys, filteredItems]);
171
- return /* @__PURE__ */ jsx(MenuContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxs(
172
- "ul",
173
- {
174
- ref: menuRef,
175
- className: menuClasses,
176
- style,
177
- role: "menu",
178
- "data-tiger-menu-root": "true",
179
- "data-tiger-menu-mode": resolvedMode,
180
- "data-tiger-menu-requested-mode": mode,
181
- children: [
182
- searchable && /* @__PURE__ */ jsx("li", { role: "none", className: menuSearchFieldClasses, children: /* @__PURE__ */ jsx(
183
- "input",
184
- {
185
- type: "search",
186
- value: searchValue,
187
- placeholder: searchPlaceholder,
188
- "aria-label": searchPlaceholder,
189
- className: menuSearchInputClasses,
190
- onChange: handleSearchInput
191
- }
192
- ) }),
193
- dataChildren,
194
- children,
195
- emptyChild
196
- ]
197
- }
198
- ) });
199
- };
129
+ return {
130
+ menuRef,
131
+ menuClasses,
132
+ style,
133
+ resolvedMode,
134
+ mode,
135
+ contextValue,
136
+ searchable,
137
+ searchValue,
138
+ searchPlaceholder,
139
+ emptyText,
140
+ handleSearchInput,
141
+ filteredItems,
142
+ items,
143
+ children
144
+ };
145
+ }
146
+
147
+ // src/components/Menu/menu-item.tsx
148
+ import { useCallback as useCallback2 } from "react";
149
+ import {
150
+ classNames as classNames2,
151
+ getMenuItemClasses,
152
+ getMenuItemIndent,
153
+ isKeySelected,
154
+ menuItemIconClasses,
155
+ menuCollapsedIconClasses,
156
+ moveFocusInMenu,
157
+ focusMenuEdge,
158
+ getMenuNavigationKeys
159
+ } from "@expcat/tigercat-core";
160
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
200
161
  var MenuItem = ({
201
162
  itemKey,
202
163
  disabled = false,
@@ -212,25 +173,23 @@ var MenuItem = ({
212
173
  }
213
174
  const isSelected = !!menuContext && isKeySelected(itemKey, menuContext.selectedKeys);
214
175
  const effectiveCollapsed = collapsedOverride ?? (menuContext ? menuContext.collapsed : false);
215
- const itemClasses = classNames(
176
+ const itemClasses = classNames2(
216
177
  menuContext ? getMenuItemClasses(isSelected, disabled, menuContext.theme, effectiveCollapsed) : "flex items-center px-4 py-2 cursor-pointer transition-colors duration-200",
217
178
  className
218
179
  );
219
180
  const indentStyle = menuContext && menuContext.mode === "inline" && level > 0 ? getMenuItemIndent(level, menuContext.inlineIndent) : {};
220
- const handleClick = useCallback(() => {
181
+ const handleClick = useCallback2(() => {
221
182
  if (!disabled && menuContext) {
222
183
  menuContext.handleSelect(itemKey);
223
184
  }
224
185
  }, [disabled, menuContext, itemKey]);
225
- const handleKeyDown = useCallback(
186
+ const handleKeyDown = useCallback2(
226
187
  (event) => {
227
188
  if (!menuContext) return;
228
189
  const current = event.currentTarget;
229
190
  const rootMenu = current.closest('ul[role="menu"]');
230
191
  const isRoot = rootMenu?.dataset.tigerMenuRoot === "true";
231
- const isHorizontalRoot = isRoot && menuContext.mode === "horizontal";
232
- const nextKey = isHorizontalRoot ? "ArrowRight" : "ArrowDown";
233
- const prevKey = isHorizontalRoot ? "ArrowLeft" : "ArrowUp";
192
+ const { nextKey, prevKey } = getMenuNavigationKeys(menuContext.mode, isRoot);
234
193
  if (event.key === nextKey) {
235
194
  event.preventDefault();
236
195
  moveFocusInMenu(current, 1);
@@ -299,6 +258,51 @@ var MenuItem = ({
299
258
  }
300
259
  ) });
301
260
  };
261
+
262
+ // src/components/Menu/submenu.tsx
263
+ import React4, { useState as useState2, useMemo as useMemo2, useCallback as useCallback3, useEffect as useEffect2, useLayoutEffect, useRef as useRef2 } from "react";
264
+ import {
265
+ classNames as classNames3,
266
+ getSubMenuTitleClasses,
267
+ getSubmenuPopupZIndex,
268
+ getTransformOrigin,
269
+ getMenuItemIndent as getMenuItemIndent2,
270
+ isKeyOpen,
271
+ menuItemIconClasses as menuItemIconClasses2,
272
+ menuCollapsedIconClasses as menuCollapsedIconClasses2,
273
+ submenuContentHorizontalClasses,
274
+ submenuContentHorizontalNestedClasses,
275
+ submenuContentPopupClasses,
276
+ submenuContentVerticalClasses,
277
+ submenuContentInlineClasses,
278
+ submenuHeightTransitionClasses,
279
+ getInitialSubmenuHeightTransitionStyle,
280
+ createSubmenuHeightTransitionController,
281
+ moveFocusInMenu as moveFocusInMenu2,
282
+ focusMenuEdge as focusMenuEdge2,
283
+ focusFirstChildItem,
284
+ getMenuNavigationKeys as getMenuNavigationKeys2
285
+ } from "@expcat/tigercat-core";
286
+
287
+ // src/components/Menu/icons.tsx
288
+ import { getSubMenuExpandIconClasses } from "@expcat/tigercat-core";
289
+ import { jsx as jsx2 } from "react/jsx-runtime";
290
+ var ExpandIcon = ({ expanded }) => /* @__PURE__ */ jsx2(
291
+ "svg",
292
+ {
293
+ className: getSubMenuExpandIconClasses(expanded),
294
+ width: "12",
295
+ height: "12",
296
+ viewBox: "0 0 12 12",
297
+ fill: "currentColor",
298
+ children: /* @__PURE__ */ jsx2("path", { d: "M6 9L1.5 4.5L2.205 3.795L6 7.59L9.795 3.795L10.5 4.5L6 9Z" })
299
+ }
300
+ );
301
+
302
+ // src/components/Menu/menu-item-group.tsx
303
+ import React3 from "react";
304
+ import { menuItemGroupTitleClasses } from "@expcat/tigercat-core";
305
+ import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
302
306
  function isComponentNamed(elementType, name) {
303
307
  if (typeof elementType !== "function" && typeof elementType !== "object") return false;
304
308
  const maybeFn = elementType;
@@ -311,10 +315,10 @@ var MenuItemGroup = ({
311
315
  level = 0,
312
316
  collapsed
313
317
  }) => {
314
- const enhancedChildren = React.Children.map(children, (child) => {
315
- if (!React.isValidElement(child)) return child;
318
+ const enhancedChildren = React3.Children.map(children, (child) => {
319
+ if (!React3.isValidElement(child)) return child;
316
320
  if (child.type === MenuItem || isComponentNamed(child.type, "SubMenu")) {
317
- return React.cloneElement(
321
+ return React3.cloneElement(
318
322
  child,
319
323
  {
320
324
  level,
@@ -324,22 +328,14 @@ var MenuItemGroup = ({
324
328
  }
325
329
  return child;
326
330
  });
327
- return /* @__PURE__ */ jsxs("li", { className: "list-none", children: [
328
- title && /* @__PURE__ */ jsx("div", { className: menuItemGroupTitleClasses, children: title }),
329
- /* @__PURE__ */ jsx("ul", { role: "group", className, children: enhancedChildren })
331
+ return /* @__PURE__ */ jsxs2("li", { className: "list-none", children: [
332
+ title && /* @__PURE__ */ jsx3("div", { className: menuItemGroupTitleClasses, children: title }),
333
+ /* @__PURE__ */ jsx3("ul", { role: "group", className, children: enhancedChildren })
330
334
  ] });
331
335
  };
332
- var ExpandIcon = ({ expanded }) => /* @__PURE__ */ jsx(
333
- "svg",
334
- {
335
- className: getSubMenuExpandIconClasses(expanded),
336
- width: "12",
337
- height: "12",
338
- viewBox: "0 0 12 12",
339
- fill: "currentColor",
340
- children: /* @__PURE__ */ jsx("path", { d: "M6 9L1.5 4.5L2.205 3.795L6 7.59L9.795 3.795L10.5 4.5L6 9Z" })
341
- }
342
- );
336
+
337
+ // src/components/Menu/submenu.tsx
338
+ import { Fragment as Fragment2, jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
343
339
  var SubMenu = ({
344
340
  itemKey,
345
341
  title = "",
@@ -354,13 +350,13 @@ var SubMenu = ({
354
350
  if (!menuContext) {
355
351
  console.warn("SubMenu must be used within Menu component");
356
352
  }
357
- const [isHovered, setIsHovered] = useState(false);
358
- const [isOpenByKeyboard, setIsOpenByKeyboard] = useState(false);
359
- const popupCloseTimerRef = useRef(null);
360
- const titleRef = useRef(null);
361
- const popupRef = useRef(null);
362
- const submenuContentRef = useRef(null);
363
- const heightTransitionRef = useRef(null);
353
+ const [isHovered, setIsHovered] = useState2(false);
354
+ const [isOpenByKeyboard, setIsOpenByKeyboard] = useState2(false);
355
+ const popupCloseTimerRef = useRef2(null);
356
+ const titleRef = useRef2(null);
357
+ const popupRef = useRef2(null);
358
+ const submenuContentRef = useRef2(null);
359
+ const heightTransitionRef = useRef2(null);
364
360
  const effectiveCollapsed = collapsedOverride ?? (menuContext ? menuContext.collapsed : false);
365
361
  const isPopup = !!menuContext && (menuContext.mode === "horizontal" || menuContext.mode === "vertical" && effectiveCollapsed);
366
362
  const isOpen = !!menuContext && isKeyOpen(itemKey, menuContext.openKeys);
@@ -379,18 +375,18 @@ var SubMenu = ({
379
375
  offset: 4
380
376
  });
381
377
  const isInlineOrVertical = menuContext?.mode !== "horizontal" && !isPopup;
382
- const [hasRenderedInline, setHasRenderedInline] = useState(
378
+ const [hasRenderedInline, setHasRenderedInline] = useState2(
383
379
  () => isInlineOrVertical ? isExpanded : false
384
380
  );
385
- useEffect(() => {
381
+ useEffect2(() => {
386
382
  if (!isInlineOrVertical || !isExpanded || hasRenderedInline) return;
387
383
  setHasRenderedInline(true);
388
384
  }, [hasRenderedInline, isExpanded, isInlineOrVertical]);
389
- const disposeHeightTransition = useCallback(() => {
385
+ const disposeHeightTransition = useCallback3(() => {
390
386
  heightTransitionRef.current?.dispose();
391
387
  heightTransitionRef.current = null;
392
388
  }, []);
393
- useEffect(() => {
389
+ useEffect2(() => {
394
390
  return () => {
395
391
  disposeHeightTransition();
396
392
  if (popupCloseTimerRef.current) {
@@ -412,11 +408,11 @@ var SubMenu = ({
412
408
  }
413
409
  heightTransitionRef.current.update(isExpanded);
414
410
  }, [disposeHeightTransition, hasRenderedInline, isExpanded, isInlineOrVertical]);
415
- const titleClasses = useMemo(() => {
411
+ const titleClasses = useMemo2(() => {
416
412
  if (!menuContext) return "";
417
- return classNames(getSubMenuTitleClasses(menuContext.theme, disabled), className);
413
+ return classNames3(getSubMenuTitleClasses(menuContext.theme, disabled), className);
418
414
  }, [menuContext, disabled, className]);
419
- const contentClasses = useMemo(() => {
415
+ const contentClasses = useMemo2(() => {
420
416
  if (!menuContext) return "";
421
417
  if (menuContext.mode === "horizontal") {
422
418
  return level === 0 ? submenuContentHorizontalClasses : submenuContentHorizontalNestedClasses;
@@ -425,7 +421,7 @@ var SubMenu = ({
425
421
  if (menuContext.mode === "inline") return submenuContentInlineClasses;
426
422
  return submenuContentVerticalClasses;
427
423
  }, [menuContext, isPopup, level]);
428
- const handleTitleClick = useCallback(() => {
424
+ const handleTitleClick = useCallback3(() => {
429
425
  if (!menuContext || disabled) return;
430
426
  if (menuContext.mode === "horizontal") return;
431
427
  if (isPopup) {
@@ -436,14 +432,14 @@ var SubMenu = ({
436
432
  setHasRenderedInline(true);
437
433
  menuContext.handleOpenChange(itemKey);
438
434
  }, [disabled, menuContext, itemKey, isPopup]);
439
- const handleMouseEnter = useCallback(() => {
435
+ const handleMouseEnter = useCallback3(() => {
440
436
  if (popupCloseTimerRef.current) {
441
437
  clearTimeout(popupCloseTimerRef.current);
442
438
  popupCloseTimerRef.current = null;
443
439
  }
444
440
  if (menuContext?.mode === "horizontal" || isPopup) setIsHovered(true);
445
441
  }, [menuContext, isPopup]);
446
- const handleMouseLeave = useCallback(() => {
442
+ const handleMouseLeave = useCallback3(() => {
447
443
  if (menuContext?.mode === "horizontal" || isPopup) {
448
444
  const close = () => {
449
445
  setIsHovered(false);
@@ -456,7 +452,7 @@ var SubMenu = ({
456
452
  close();
457
453
  }
458
454
  }, [menuContext, isPopup, popupPortal]);
459
- const openInline = useCallback(
455
+ const openInline = useCallback3(
460
456
  (titleEl) => {
461
457
  if (!menuContext) return;
462
458
  setHasRenderedInline(true);
@@ -465,33 +461,31 @@ var SubMenu = ({
465
461
  },
466
462
  [menuContext, itemKey]
467
463
  );
468
- const handleTitleKeyDown = useCallback(
464
+ const handleTitleKeyDown = useCallback3(
469
465
  (event) => {
470
466
  if (!menuContext || disabled) return;
471
467
  const current = event.currentTarget;
472
468
  const rootMenu = current.closest('ul[role="menu"]');
473
469
  const isRoot = rootMenu?.dataset.tigerMenuRoot === "true";
474
- const isHorizontalRoot = isRoot && menuContext.mode === "horizontal";
475
- const nextKey = isHorizontalRoot ? "ArrowRight" : "ArrowDown";
476
- const prevKey = isHorizontalRoot ? "ArrowLeft" : "ArrowUp";
470
+ const { nextKey, prevKey } = getMenuNavigationKeys2(menuContext.mode, isRoot);
477
471
  if (event.key === nextKey) {
478
472
  event.preventDefault();
479
- moveFocusInMenu(current, 1);
473
+ moveFocusInMenu2(current, 1);
480
474
  return;
481
475
  }
482
476
  if (event.key === prevKey) {
483
477
  event.preventDefault();
484
- moveFocusInMenu(current, -1);
478
+ moveFocusInMenu2(current, -1);
485
479
  return;
486
480
  }
487
481
  if (event.key === "Home") {
488
482
  event.preventDefault();
489
- focusMenuEdge(current, "start");
483
+ focusMenuEdge2(current, "start");
490
484
  return;
491
485
  }
492
486
  if (event.key === "End") {
493
487
  event.preventDefault();
494
- focusMenuEdge(current, "end");
488
+ focusMenuEdge2(current, "end");
495
489
  return;
496
490
  }
497
491
  if (event.key === "Escape" || event.key === "ArrowLeft") {
@@ -530,41 +524,41 @@ var SubMenu = ({
530
524
  },
531
525
  [menuContext, disabled, isOpen, isPopup, itemKey, openInline]
532
526
  );
533
- const indentStyle = !menuContext || menuContext.mode === "horizontal" || level === 0 ? {} : getMenuItemIndent(level, menuContext.inlineIndent);
527
+ const indentStyle = !menuContext || menuContext.mode === "horizontal" || level === 0 ? {} : getMenuItemIndent2(level, menuContext.inlineIndent);
534
528
  if (!menuContext) return null;
535
529
  const renderIcon = () => {
536
530
  if (!icon) return null;
537
- const iconClasses = effectiveCollapsed ? menuCollapsedIconClasses : menuItemIconClasses;
531
+ const iconClasses = effectiveCollapsed ? menuCollapsedIconClasses2 : menuItemIconClasses2;
538
532
  if (typeof icon === "string") {
539
- return /* @__PURE__ */ jsx("span", { className: iconClasses, dangerouslySetInnerHTML: { __html: icon } });
533
+ return /* @__PURE__ */ jsx4("span", { className: iconClasses, dangerouslySetInnerHTML: { __html: icon } });
540
534
  }
541
- return /* @__PURE__ */ jsx("span", { className: iconClasses, children: icon });
535
+ return /* @__PURE__ */ jsx4("span", { className: iconClasses, children: icon });
542
536
  };
543
537
  const renderTitle = () => {
544
538
  if (!effectiveCollapsed) {
545
- return /* @__PURE__ */ jsxs(Fragment, { children: [
539
+ return /* @__PURE__ */ jsxs3(Fragment2, { children: [
546
540
  renderIcon(),
547
- /* @__PURE__ */ jsx("span", { className: "flex-1", children: title }),
548
- menuContext.mode !== "horizontal" && !isPopup && /* @__PURE__ */ jsx(ExpandIcon, { expanded: isExpanded })
541
+ /* @__PURE__ */ jsx4("span", { className: "flex-1", children: title }),
542
+ menuContext.mode !== "horizontal" && !isPopup && /* @__PURE__ */ jsx4(ExpandIcon, { expanded: isExpanded })
549
543
  ] });
550
544
  } else if (!icon) {
551
- return /* @__PURE__ */ jsxs(Fragment, { children: [
552
- /* @__PURE__ */ jsx("span", { className: "flex-1 text-center", "aria-hidden": "true", children: title.charAt(0).toUpperCase() }),
553
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: title })
545
+ return /* @__PURE__ */ jsxs3(Fragment2, { children: [
546
+ /* @__PURE__ */ jsx4("span", { className: "flex-1 text-center", "aria-hidden": "true", children: title.charAt(0).toUpperCase() }),
547
+ /* @__PURE__ */ jsx4("span", { className: "sr-only", children: title })
554
548
  ] });
555
549
  } else {
556
- return /* @__PURE__ */ jsxs(Fragment, { children: [
550
+ return /* @__PURE__ */ jsxs3(Fragment2, { children: [
557
551
  renderIcon(),
558
- /* @__PURE__ */ jsx("span", { className: "sr-only", children: title })
552
+ /* @__PURE__ */ jsx4("span", { className: "sr-only", children: title })
559
553
  ] });
560
554
  }
561
555
  };
562
556
  const renderContent = () => {
563
557
  const nextLevel = level + 1;
564
- const enhancedChildren = React.Children.map(children, (child) => {
565
- if (!React.isValidElement(child)) return child;
558
+ const enhancedChildren = React4.Children.map(children, (child) => {
559
+ if (!React4.isValidElement(child)) return child;
566
560
  if (child.type === MenuItem || child.type === SubMenu || child.type === MenuItemGroup) {
567
- return React.cloneElement(
561
+ return React4.cloneElement(
568
562
  child,
569
563
  {
570
564
  level: nextLevel,
@@ -584,7 +578,7 @@ var SubMenu = ({
584
578
  transformOrigin: getTransformOrigin(currentPopupPlacement),
585
579
  ...popupZIndex
586
580
  } : { display: isExpanded ? "block" : "none", ...popupZIndex };
587
- const popup = /* @__PURE__ */ jsx(
581
+ const popup = /* @__PURE__ */ jsx4(
588
582
  "ul",
589
583
  {
590
584
  ref: popupPortal ? popupRef : void 0,
@@ -601,7 +595,7 @@ var SubMenu = ({
601
595
  if (popupPortal) {
602
596
  return renderBodyPortal(popup);
603
597
  }
604
- return /* @__PURE__ */ jsx(
598
+ return /* @__PURE__ */ jsx4(
605
599
  "ul",
606
600
  {
607
601
  className: contentClasses,
@@ -615,7 +609,7 @@ var SubMenu = ({
615
609
  }
616
610
  if (!hasRenderedInline) return null;
617
611
  const isHidden = !isExpanded;
618
- return /* @__PURE__ */ jsx(
612
+ return /* @__PURE__ */ jsx4(
619
613
  "div",
620
614
  {
621
615
  ref: submenuContentRef,
@@ -624,11 +618,11 @@ var SubMenu = ({
624
618
  "aria-hidden": isHidden ? "true" : void 0,
625
619
  "data-tiger-menu-hidden": isHidden ? "true" : void 0,
626
620
  "data-tiger-submenu-motion": "height",
627
- children: /* @__PURE__ */ jsx("ul", { className: contentClasses, role: "menu", children: enhancedChildren })
621
+ children: /* @__PURE__ */ jsx4("ul", { className: contentClasses, role: "menu", children: enhancedChildren })
628
622
  }
629
623
  );
630
624
  };
631
- return /* @__PURE__ */ jsxs(
625
+ return /* @__PURE__ */ jsxs3(
632
626
  "li",
633
627
  {
634
628
  className: isPopup && !popupPortal ? "relative" : "",
@@ -636,7 +630,7 @@ var SubMenu = ({
636
630
  onMouseLeave: handleMouseLeave,
637
631
  role: "none",
638
632
  children: [
639
- /* @__PURE__ */ jsx(
633
+ /* @__PURE__ */ jsx4(
640
634
  "button",
641
635
  {
642
636
  ref: titleRef,
@@ -662,10 +656,63 @@ var SubMenu = ({
662
656
  );
663
657
  };
664
658
 
659
+ // src/components/Menu.tsx
660
+ import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
661
+ var Menu = (props) => {
662
+ const ctx = useMenuRootState(props);
663
+ function renderDataItem(item) {
664
+ if (item.children && item.children.length > 0) {
665
+ return /* @__PURE__ */ jsx5(
666
+ SubMenu,
667
+ {
668
+ itemKey: item.key,
669
+ title: item.label,
670
+ icon: item.icon,
671
+ disabled: item.disabled,
672
+ children: item.children.map(renderDataItem)
673
+ },
674
+ item.key
675
+ );
676
+ }
677
+ return /* @__PURE__ */ jsx5(MenuItem, { itemKey: item.key, icon: item.icon, disabled: item.disabled, children: item.label }, item.key);
678
+ }
679
+ const dataChildren = ctx.filteredItems.map(renderDataItem);
680
+ const hasSlotChildren = React5.Children.count(ctx.children) > 0;
681
+ const emptyChild = ctx.items && ctx.items.length > 0 && dataChildren.length === 0 && !hasSlotChildren ? /* @__PURE__ */ jsx5("li", { role: "none", children: /* @__PURE__ */ jsx5("div", { className: menuSearchEmptyClasses, children: ctx.emptyText }) }) : null;
682
+ return /* @__PURE__ */ jsx5(MenuContext.Provider, { value: ctx.contextValue, children: /* @__PURE__ */ jsxs4(
683
+ "ul",
684
+ {
685
+ ref: ctx.menuRef,
686
+ className: ctx.menuClasses,
687
+ style: ctx.style,
688
+ role: "menu",
689
+ "data-tiger-menu-root": "true",
690
+ "data-tiger-menu-mode": ctx.resolvedMode,
691
+ "data-tiger-menu-requested-mode": ctx.mode,
692
+ children: [
693
+ ctx.searchable && /* @__PURE__ */ jsx5("li", { role: "none", className: menuSearchFieldClasses, children: /* @__PURE__ */ jsx5(
694
+ "input",
695
+ {
696
+ type: "search",
697
+ value: ctx.searchValue,
698
+ placeholder: ctx.searchPlaceholder,
699
+ "aria-label": ctx.searchPlaceholder,
700
+ className: menuSearchInputClasses,
701
+ onChange: ctx.handleSearchInput
702
+ }
703
+ ) }),
704
+ dataChildren,
705
+ ctx.children,
706
+ emptyChild
707
+ ]
708
+ }
709
+ ) });
710
+ };
711
+
665
712
  export {
666
713
  useMenuContext,
667
- Menu,
668
714
  MenuItem,
669
715
  MenuItemGroup,
670
- SubMenu
716
+ SubMenu,
717
+ Menu
671
718
  };