@powerhousedao/connect 4.1.0-dev.105 → 4.1.0-dev.107

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 (270) hide show
  1. package/dist/assets/AddDriveModal-C2fZqOQI.js +1 -0
  2. package/dist/assets/ClearStorageModal-DjjEBXBS.js +1 -0
  3. package/dist/assets/CookiesPolicyModal-BrOPPvzy.js +1 -0
  4. package/dist/assets/CreateDocumentModal-C09c_nGK.js +1 -0
  5. package/dist/assets/DebugSettingsModal-PbDxwRkN.js +1 -0
  6. package/dist/assets/DeleteDriveModal-x5WgUnZq.js +1 -0
  7. package/dist/assets/DeleteItemModal-BBYKOKsF.js +1 -0
  8. package/dist/assets/DisclaimerModal-CteySYvG.js +1 -0
  9. package/dist/assets/DriveSettingsModal-B18X9rkK.js +1 -0
  10. package/dist/assets/ExportDocumentWithErrorsModal-B7IfIoUE.js +1 -0
  11. package/dist/assets/SettingsModal-BrdAtrxz.js +1 -0
  12. package/dist/assets/UpgradeDriveModal-fqiiEuOr.js +1 -0
  13. package/dist/assets/common-8r_LaZs4.css +1 -0
  14. package/dist/assets/common-n2B-GsjO.js +1 -0
  15. package/dist/assets/config-CU-aFfVJ.js +1 -0
  16. package/dist/assets/design_system-CZfmC8Ij.js +45 -0
  17. package/dist/assets/design_system_connect-DHQbQvgv.js +53 -0
  18. package/dist/assets/document_drive-CP6paqKN.js +305 -0
  19. package/dist/assets/document_engineering-DojqH50p.js +1 -0
  20. package/dist/assets/document_model-DLxR7ZLO.js +230 -0
  21. package/dist/assets/document_model_editor-ButtI7kP.js +2 -0
  22. package/dist/assets/drive_explorer-IB_BS5Au.js +2 -0
  23. package/dist/assets/editor-CgH7LMsL.js +105 -0
  24. package/dist/assets/editor-ClAkqmdQ.js +1 -0
  25. package/dist/assets/graphql-BS4Brs_E.js +75 -0
  26. package/dist/assets/graphql_request-9RNJ00DB.js +3 -0
  27. package/dist/assets/hmr-LMNkvzP7.js +1 -0
  28. package/dist/assets/index-BSTajiPh.js +18 -0
  29. package/dist/assets/index-Br7E7qjt.css +1 -0
  30. package/dist/assets/reactor_browser-BbZdm6Aa.js +25 -0
  31. package/dist/assets/sentry_browser-BFJlXALZ.js +498 -0
  32. package/dist/assets/sentry_react-C4W8xEsl.js +3 -0
  33. package/dist/assets/virtual_ph_external-packages-CM1tCR4L.js +1 -0
  34. package/dist/assets/zod-C6yxFxyo.js +1 -0
  35. package/dist/index.html +17 -2
  36. package/heroku/config/nginx.conf.template +7 -18
  37. package/lib/package.copy.json +27 -57
  38. package/lib/src/components/analytics.js +1 -1
  39. package/lib/src/components/analytics.js.map +1 -1
  40. package/lib/src/components/app-loader.d.ts +1 -1
  41. package/lib/src/components/app-loader.d.ts.map +1 -1
  42. package/lib/src/components/app-loader.js +2 -5
  43. package/lib/src/components/app-loader.js.map +1 -1
  44. package/lib/src/components/app-skeleton.d.ts.map +1 -1
  45. package/lib/src/components/app-skeleton.js +1 -1
  46. package/lib/src/components/app-skeleton.js.map +1 -1
  47. package/lib/src/components/app.d.ts.map +1 -1
  48. package/lib/src/components/app.js +3 -4
  49. package/lib/src/components/app.js.map +1 -1
  50. package/lib/src/components/cookie-banner.d.ts.map +1 -1
  51. package/lib/src/components/cookie-banner.js +3 -4
  52. package/lib/src/components/cookie-banner.js.map +1 -1
  53. package/lib/src/components/document-editor-container.js +2 -2
  54. package/lib/src/components/document-editor-container.js.map +1 -1
  55. package/lib/src/components/drive-editor-container.js +2 -2
  56. package/lib/src/components/drive-editor-container.js.map +1 -1
  57. package/lib/src/components/editor-loader.d.ts +1 -1
  58. package/lib/src/components/editor-loader.d.ts.map +1 -1
  59. package/lib/src/components/editor-loader.js +1 -1
  60. package/lib/src/components/editor-loader.js.map +1 -1
  61. package/lib/src/components/editors.js +2 -2
  62. package/lib/src/components/editors.js.map +1 -1
  63. package/lib/src/components/footer.js +3 -2
  64. package/lib/src/components/footer.js.map +1 -1
  65. package/lib/src/components/index.d.ts +1 -2
  66. package/lib/src/components/index.d.ts.map +1 -1
  67. package/lib/src/components/index.js +1 -2
  68. package/lib/src/components/index.js.map +1 -1
  69. package/lib/src/components/login.js +1 -1
  70. package/lib/src/components/login.js.map +1 -1
  71. package/lib/src/components/modal/index.d.ts +17 -1
  72. package/lib/src/components/modal/index.d.ts.map +1 -1
  73. package/lib/src/components/modal/index.js +17 -1
  74. package/lib/src/components/modal/index.js.map +1 -1
  75. package/lib/src/components/modal/modals/AddDriveModal.d.ts.map +1 -1
  76. package/lib/src/components/modal/modals/AddDriveModal.js +2 -1
  77. package/lib/src/components/modal/modals/AddDriveModal.js.map +1 -1
  78. package/lib/src/components/modal/modals/ClearStorageModal.js +2 -2
  79. package/lib/src/components/modal/modals/ClearStorageModal.js.map +1 -1
  80. package/lib/src/components/modal/modals/CookiesPolicyModal.js +1 -1
  81. package/lib/src/components/modal/modals/CookiesPolicyModal.js.map +1 -1
  82. package/lib/src/components/modal/modals/CreateDocumentModal.js +1 -1
  83. package/lib/src/components/modal/modals/CreateDocumentModal.js.map +1 -1
  84. package/lib/src/components/modal/modals/DebugSettingsModal.d.ts.map +1 -1
  85. package/lib/src/components/modal/modals/DebugSettingsModal.js +3 -2
  86. package/lib/src/components/modal/modals/DebugSettingsModal.js.map +1 -1
  87. package/lib/src/components/modal/modals/DeleteDriveModal.d.ts.map +1 -1
  88. package/lib/src/components/modal/modals/DeleteDriveModal.js +2 -1
  89. package/lib/src/components/modal/modals/DeleteDriveModal.js.map +1 -1
  90. package/lib/src/components/modal/modals/DeleteItemModal.d.ts.map +1 -1
  91. package/lib/src/components/modal/modals/DeleteItemModal.js +2 -1
  92. package/lib/src/components/modal/modals/DeleteItemModal.js.map +1 -1
  93. package/lib/src/components/modal/modals/DisclaimerModal.js +1 -1
  94. package/lib/src/components/modal/modals/DisclaimerModal.js.map +1 -1
  95. package/lib/src/components/modal/modals/DriveSettingsModal.js +2 -2
  96. package/lib/src/components/modal/modals/DriveSettingsModal.js.map +1 -1
  97. package/lib/src/components/modal/modals/ExportDocumentWithErrorsModal.js +1 -1
  98. package/lib/src/components/modal/modals/ExportDocumentWithErrorsModal.js.map +1 -1
  99. package/lib/src/components/modal/modals/SettingsModal.d.ts.map +1 -1
  100. package/lib/src/components/modal/modals/SettingsModal.js +4 -6
  101. package/lib/src/components/modal/modals/SettingsModal.js.map +1 -1
  102. package/lib/src/components/modal/modals/UpgradeDriveModal.js +1 -1
  103. package/lib/src/components/modal/modals/UpgradeDriveModal.js.map +1 -1
  104. package/lib/src/components/modal/modals/settings/about.js +1 -1
  105. package/lib/src/components/modal/modals/settings/about.js.map +1 -1
  106. package/lib/src/components/modal/modals/settings/danger-zone.js +1 -1
  107. package/lib/src/components/modal/modals/settings/danger-zone.js.map +1 -1
  108. package/lib/src/components/modal/modals/settings/default-editor.js +1 -1
  109. package/lib/src/components/modal/modals/settings/default-editor.js.map +1 -1
  110. package/lib/src/components/modal/modals/settings/package-manager.d.ts +1 -1
  111. package/lib/src/components/modal/modals/settings/package-manager.d.ts.map +1 -1
  112. package/lib/src/components/modal/modals/settings/package-manager.js +4 -5
  113. package/lib/src/components/modal/modals/settings/package-manager.js.map +1 -1
  114. package/lib/src/components/ph-logo.js +1 -1
  115. package/lib/src/components/ph-logo.js.map +1 -1
  116. package/lib/src/components/reload-connect-toast.d.ts.map +1 -0
  117. package/lib/src/components/reload-connect-toast.js.map +1 -0
  118. package/lib/src/components/root.d.ts.map +1 -1
  119. package/lib/src/components/root.js +3 -4
  120. package/lib/src/components/root.js.map +1 -1
  121. package/lib/src/components/router.js +1 -1
  122. package/lib/src/components/router.js.map +1 -1
  123. package/lib/src/components/search-bar.d.ts.map +1 -1
  124. package/lib/src/components/search-bar.js +2 -1
  125. package/lib/src/components/search-bar.js.map +1 -1
  126. package/lib/src/components/sidebar.d.ts.map +1 -1
  127. package/lib/src/components/sidebar.js +3 -2
  128. package/lib/src/components/sidebar.js.map +1 -1
  129. package/lib/src/context/sentry-provider.js +1 -1
  130. package/lib/src/context/sentry-provider.js.map +1 -1
  131. package/lib/src/feature-flags.d.ts.map +1 -0
  132. package/lib/src/feature-flags.js.map +1 -0
  133. package/lib/src/globals.d.ts +1 -1
  134. package/lib/src/globals.d.ts.map +1 -1
  135. package/lib/src/hooks/useCheckLatestVersion.js +3 -3
  136. package/lib/src/hooks/useCheckLatestVersion.js.map +1 -1
  137. package/lib/src/index.d.ts +1 -8
  138. package/lib/src/index.d.ts.map +1 -1
  139. package/lib/src/index.js +1 -8
  140. package/lib/src/index.js.map +1 -1
  141. package/lib/src/main.js +1 -1
  142. package/lib/src/main.js.map +1 -1
  143. package/lib/src/pages/content.d.ts.map +1 -1
  144. package/lib/src/pages/content.js +2 -3
  145. package/lib/src/pages/content.js.map +1 -1
  146. package/lib/src/pages/index.d.ts +2 -1
  147. package/lib/src/pages/index.d.ts.map +1 -1
  148. package/lib/src/pages/index.js +2 -1
  149. package/lib/src/pages/index.js.map +1 -1
  150. package/lib/src/services/index.d.ts +6 -2
  151. package/lib/src/services/index.d.ts.map +1 -1
  152. package/lib/src/services/index.js +5 -2
  153. package/lib/src/services/index.js.map +1 -1
  154. package/lib/src/services/toast.d.ts +2 -2
  155. package/lib/src/services/toast.d.ts.map +1 -1
  156. package/lib/src/services/toast.js +1 -1
  157. package/lib/src/services/toast.js.map +1 -1
  158. package/lib/src/store/document-model.d.ts.map +1 -1
  159. package/lib/src/store/document-model.js +3 -3
  160. package/lib/src/store/document-model.js.map +1 -1
  161. package/lib/src/store/editor.d.ts +2 -2
  162. package/lib/src/store/editor.d.ts.map +1 -1
  163. package/lib/src/store/editor.js +6 -6
  164. package/lib/src/store/editor.js.map +1 -1
  165. package/lib/src/store/reactor.d.ts.map +1 -1
  166. package/lib/src/store/reactor.js +6 -21
  167. package/lib/src/store/reactor.js.map +1 -1
  168. package/lib/src/utils/drive-sections.d.ts +1 -1
  169. package/lib/src/utils/drive-sections.d.ts.map +1 -1
  170. package/lib/src/utils/drive-sections.js +1 -1
  171. package/lib/src/utils/drive-sections.js.map +1 -1
  172. package/lib/tsconfig.tsbuildinfo +1 -1
  173. package/lib/vite.config.d.ts.map +1 -1
  174. package/lib/vite.config.js +23 -0
  175. package/lib/vite.config.js.map +1 -1
  176. package/package.copy.json +27 -57
  177. package/package.json +34 -64
  178. package/dist/assets/AddDriveModal-07mDwuqC.js +0 -248
  179. package/dist/assets/AddDriveModal-07mDwuqC.js.map +0 -1
  180. package/dist/assets/ClearStorageModal-NS7l69ap.js +0 -46
  181. package/dist/assets/ClearStorageModal-NS7l69ap.js.map +0 -1
  182. package/dist/assets/CookiesPolicyModal-C6dI4RKZ.js +0 -34
  183. package/dist/assets/CookiesPolicyModal-C6dI4RKZ.js.map +0 -1
  184. package/dist/assets/CreateDocumentModal-KKbJcBSL.js +0 -65
  185. package/dist/assets/CreateDocumentModal-KKbJcBSL.js.map +0 -1
  186. package/dist/assets/DebugSettingsModal-DXtCp24I.js +0 -5134
  187. package/dist/assets/DebugSettingsModal-DXtCp24I.js.map +0 -1
  188. package/dist/assets/DeleteDriveModal-MSDNucFy.js +0 -55
  189. package/dist/assets/DeleteDriveModal-MSDNucFy.js.map +0 -1
  190. package/dist/assets/DeleteItemModal-DW8_baau.js +0 -47
  191. package/dist/assets/DeleteItemModal-DW8_baau.js.map +0 -1
  192. package/dist/assets/DisclaimerModal-C6UyAzGM.js +0 -21
  193. package/dist/assets/DisclaimerModal-C6UyAzGM.js.map +0 -1
  194. package/dist/assets/DriveSettingsModal-DfM8Gfc9.js +0 -103
  195. package/dist/assets/DriveSettingsModal-DfM8Gfc9.js.map +0 -1
  196. package/dist/assets/ExportDocumentWithErrorsModal-cWlxN3T_.js +0 -44
  197. package/dist/assets/ExportDocumentWithErrorsModal-cWlxN3T_.js.map +0 -1
  198. package/dist/assets/SettingsModal-BlWJfQsu.js +0 -1723
  199. package/dist/assets/SettingsModal-BlWJfQsu.js.map +0 -1
  200. package/dist/assets/UpgradeDriveModal-BL7i2apX.js +0 -40
  201. package/dist/assets/UpgradeDriveModal-BL7i2apX.js.map +0 -1
  202. package/dist/assets/ccip-DhNdZlh7.js +0 -168
  203. package/dist/assets/ccip-DhNdZlh7.js.map +0 -1
  204. package/dist/assets/confirmation-modal-DM5tMFeL.js +0 -16
  205. package/dist/assets/confirmation-modal-DM5tMFeL.js.map +0 -1
  206. package/dist/assets/disclosure-iERpR3s0.js +0 -9
  207. package/dist/assets/disclosure-iERpR3s0.js.map +0 -1
  208. package/dist/assets/drive-by-id-BanyjI1t.js +0 -14
  209. package/dist/assets/drive-by-id-BanyjI1t.js.map +0 -1
  210. package/dist/assets/dropdown-menu-CXmhaaui.js +0 -1026
  211. package/dist/assets/dropdown-menu-CXmhaaui.js.map +0 -1
  212. package/dist/assets/editor-BKLE2wdL.js +0 -416
  213. package/dist/assets/editor-BKLE2wdL.js.map +0 -1
  214. package/dist/assets/editor-DO3KuTx4.js +0 -47585
  215. package/dist/assets/editor-DO3KuTx4.js.map +0 -1
  216. package/dist/assets/form-input-DTWcBXOv.js +0 -11
  217. package/dist/assets/form-input-DTWcBXOv.js.map +0 -1
  218. package/dist/assets/hmr-DO4QUuY_.js +0 -5
  219. package/dist/assets/hmr-DO4QUuY_.js.map +0 -1
  220. package/dist/assets/hoist-non-react-statics.cjs-BXLrPRPo.js +0 -224
  221. package/dist/assets/hoist-non-react-statics.cjs-BXLrPRPo.js.map +0 -1
  222. package/dist/assets/index-BRK2SPwe.js +0 -92924
  223. package/dist/assets/index-BRK2SPwe.js.map +0 -1
  224. package/dist/assets/index-CwYYkw3b.js +0 -183
  225. package/dist/assets/index-CwYYkw3b.js.map +0 -1
  226. package/dist/assets/index-D9xz2aln.js +0 -25570
  227. package/dist/assets/index-D9xz2aln.js.map +0 -1
  228. package/dist/assets/index-DOrl22sv.css +0 -6263
  229. package/dist/assets/index-DrtoT5He.js +0 -45
  230. package/dist/assets/index-DrtoT5He.js.map +0 -1
  231. package/dist/assets/index-ZC6AHfIK.js +0 -285
  232. package/dist/assets/index-ZC6AHfIK.js.map +0 -1
  233. package/dist/assets/index.esm-BaENpqse.js +0 -1801
  234. package/dist/assets/index.esm-BaENpqse.js.map +0 -1
  235. package/dist/assets/options-x29vXcTw.js +0 -81
  236. package/dist/assets/options-x29vXcTw.js.map +0 -1
  237. package/dist/assets/read-required-modal-CywEDaia.js +0 -44
  238. package/dist/assets/read-required-modal-CywEDaia.js.map +0 -1
  239. package/dist/assets/toggle-CFuMlRt5.js +0 -33
  240. package/dist/assets/toggle-CFuMlRt5.js.map +0 -1
  241. package/dist/assets/virtual_ph_external-packages-DawtJ3DU.js +0 -8
  242. package/dist/assets/virtual_ph_external-packages-DawtJ3DU.js.map +0 -1
  243. package/lib/feature-flags.d.ts.map +0 -1
  244. package/lib/feature-flags.js.map +0 -1
  245. package/lib/src/components/modal/modals/settings/index.d.ts +0 -5
  246. package/lib/src/components/modal/modals/settings/index.d.ts.map +0 -1
  247. package/lib/src/components/modal/modals/settings/index.js +0 -5
  248. package/lib/src/components/modal/modals/settings/index.js.map +0 -1
  249. package/lib/src/components/toast/index.d.ts +0 -2
  250. package/lib/src/components/toast/index.d.ts.map +0 -1
  251. package/lib/src/components/toast/index.js +0 -2
  252. package/lib/src/components/toast/index.js.map +0 -1
  253. package/lib/src/components/toast/reload-connect-toast.d.ts.map +0 -1
  254. package/lib/src/components/toast/reload-connect-toast.js.map +0 -1
  255. package/lib/src/pages/demo/index.d.ts +0 -2
  256. package/lib/src/pages/demo/index.d.ts.map +0 -1
  257. package/lib/src/pages/demo/index.js +0 -2
  258. package/lib/src/pages/demo/index.js.map +0 -1
  259. package/lib/src/services/renown/index.d.ts +0 -4
  260. package/lib/src/services/renown/index.d.ts.map +0 -1
  261. package/lib/src/services/renown/index.js +0 -4
  262. package/lib/src/services/renown/index.js.map +0 -1
  263. package/lib/src/services/storage/index.d.ts +0 -4
  264. package/lib/src/services/storage/index.d.ts.map +0 -1
  265. package/lib/src/services/storage/index.js +0 -4
  266. package/lib/src/services/storage/index.js.map +0 -1
  267. /package/lib/src/components/{toast/reload-connect-toast.d.ts → reload-connect-toast.d.ts} +0 -0
  268. /package/lib/src/components/{toast/reload-connect-toast.js → reload-connect-toast.js} +0 -0
  269. /package/lib/{feature-flags.d.ts → src/feature-flags.d.ts} +0 -0
  270. /package/lib/{feature-flags.js → src/feature-flags.js} +0 -0
@@ -1,1026 +0,0 @@
1
- import { j as jsxRuntimeExports, t as twMerge, eC as createContextScope, r as reactExports, eX as createPopperScope, eY as useCallbackRef, eZ as Root2$1, e_ as Anchor, e$ as useComposedRefs, eE as composeEventHandlers, eF as Presence, f0 as Portal$1, eD as Primitive, f1 as dispatchDiscreteCustomEvent, f2 as hideOthers, f3 as useFocusGuards, f4 as ReactRemoveScroll, f5 as createSlot, f6 as FocusScope, f7 as DismissableLayer, f8 as Content, f9 as Arrow, ad as composeRefs, eB as useControllableState, a7 as useId } from "./index-BRK2SPwe.js";
2
- import { a as createCollection, c as createRovingFocusGroupScope, u as useDirection, I as Item, R as Root } from "./index-ZC6AHfIK.js";
3
- function ConnectDropdownMenu(props) {
4
- const { children, items, open, onItemClick, onOpenChange, menuClassName } = props;
5
- return jsxRuntimeExports.jsxs(DropdownMenu, { onOpenChange, open, children: [jsxRuntimeExports.jsx(DropdownMenuTrigger, { asChild: true, className: "outline-none", children }), jsxRuntimeExports.jsx(DropdownMenuContent, { className: twMerge("modal-shadow cursor-pointer rounded-2xl bg-white text-sm font-medium text-slate-500", menuClassName), children: items.map(({ id, label, icon, className }) => jsxRuntimeExports.jsxs(DropdownMenuItem, { className: twMerge("flex items-center px-5 py-2 outline-none first-of-type:rounded-t-2xl first-of-type:pt-3 last-of-type:rounded-b-2xl last-of-type:pb-3 hover:bg-slate-50", className), onClick: (e) => e.stopPropagation(), onSelect: () => onItemClick(id), children: [icon ? jsxRuntimeExports.jsx("span", { className: "mr-2 inline-block", children: icon }) : null, label] }, id)) })] });
6
- }
7
- var SELECTION_KEYS = ["Enter", " "];
8
- var FIRST_KEYS = ["ArrowDown", "PageUp", "Home"];
9
- var LAST_KEYS = ["ArrowUp", "PageDown", "End"];
10
- var FIRST_LAST_KEYS = [...FIRST_KEYS, ...LAST_KEYS];
11
- var SUB_OPEN_KEYS = {
12
- ltr: [...SELECTION_KEYS, "ArrowRight"],
13
- rtl: [...SELECTION_KEYS, "ArrowLeft"]
14
- };
15
- var SUB_CLOSE_KEYS = {
16
- ltr: ["ArrowLeft"],
17
- rtl: ["ArrowRight"]
18
- };
19
- var MENU_NAME = "Menu";
20
- var [Collection, useCollection, createCollectionScope] = createCollection(MENU_NAME);
21
- var [createMenuContext, createMenuScope] = createContextScope(MENU_NAME, [
22
- createCollectionScope,
23
- createPopperScope,
24
- createRovingFocusGroupScope
25
- ]);
26
- var usePopperScope = createPopperScope();
27
- var useRovingFocusGroupScope = createRovingFocusGroupScope();
28
- var [MenuProvider, useMenuContext] = createMenuContext(MENU_NAME);
29
- var [MenuRootProvider, useMenuRootContext] = createMenuContext(MENU_NAME);
30
- var Menu = (props) => {
31
- const { __scopeMenu, open = false, children, dir, onOpenChange, modal = true } = props;
32
- const popperScope = usePopperScope(__scopeMenu);
33
- const [content, setContent] = reactExports.useState(null);
34
- const isUsingKeyboardRef = reactExports.useRef(false);
35
- const handleOpenChange = useCallbackRef(onOpenChange);
36
- const direction = useDirection(dir);
37
- reactExports.useEffect(() => {
38
- const handleKeyDown = () => {
39
- isUsingKeyboardRef.current = true;
40
- document.addEventListener("pointerdown", handlePointer, { capture: true, once: true });
41
- document.addEventListener("pointermove", handlePointer, { capture: true, once: true });
42
- };
43
- const handlePointer = () => isUsingKeyboardRef.current = false;
44
- document.addEventListener("keydown", handleKeyDown, { capture: true });
45
- return () => {
46
- document.removeEventListener("keydown", handleKeyDown, { capture: true });
47
- document.removeEventListener("pointerdown", handlePointer, { capture: true });
48
- document.removeEventListener("pointermove", handlePointer, { capture: true });
49
- };
50
- }, []);
51
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Root2$1, { ...popperScope, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
52
- MenuProvider,
53
- {
54
- scope: __scopeMenu,
55
- open,
56
- onOpenChange: handleOpenChange,
57
- content,
58
- onContentChange: setContent,
59
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(
60
- MenuRootProvider,
61
- {
62
- scope: __scopeMenu,
63
- onClose: reactExports.useCallback(() => handleOpenChange(false), [handleOpenChange]),
64
- isUsingKeyboardRef,
65
- dir: direction,
66
- modal,
67
- children
68
- }
69
- )
70
- }
71
- ) });
72
- };
73
- Menu.displayName = MENU_NAME;
74
- var ANCHOR_NAME = "MenuAnchor";
75
- var MenuAnchor = reactExports.forwardRef(
76
- (props, forwardedRef) => {
77
- const { __scopeMenu, ...anchorProps } = props;
78
- const popperScope = usePopperScope(__scopeMenu);
79
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Anchor, { ...popperScope, ...anchorProps, ref: forwardedRef });
80
- }
81
- );
82
- MenuAnchor.displayName = ANCHOR_NAME;
83
- var PORTAL_NAME$1 = "MenuPortal";
84
- var [PortalProvider, usePortalContext] = createMenuContext(PORTAL_NAME$1, {
85
- forceMount: void 0
86
- });
87
- var MenuPortal = (props) => {
88
- const { __scopeMenu, forceMount, children, container } = props;
89
- const context = useMenuContext(PORTAL_NAME$1, __scopeMenu);
90
- return /* @__PURE__ */ jsxRuntimeExports.jsx(PortalProvider, { scope: __scopeMenu, forceMount, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Portal$1, { asChild: true, container, children }) }) });
91
- };
92
- MenuPortal.displayName = PORTAL_NAME$1;
93
- var CONTENT_NAME$1 = "MenuContent";
94
- var [MenuContentProvider, useMenuContentContext] = createMenuContext(CONTENT_NAME$1);
95
- var MenuContent = reactExports.forwardRef(
96
- (props, forwardedRef) => {
97
- const portalContext = usePortalContext(CONTENT_NAME$1, props.__scopeMenu);
98
- const { forceMount = portalContext.forceMount, ...contentProps } = props;
99
- const context = useMenuContext(CONTENT_NAME$1, props.__scopeMenu);
100
- const rootContext = useMenuRootContext(CONTENT_NAME$1, props.__scopeMenu);
101
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Collection.Provider, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Collection.Slot, { scope: props.__scopeMenu, children: rootContext.modal ? /* @__PURE__ */ jsxRuntimeExports.jsx(MenuRootContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsxRuntimeExports.jsx(MenuRootContentNonModal, { ...contentProps, ref: forwardedRef }) }) }) });
102
- }
103
- );
104
- var MenuRootContentModal = reactExports.forwardRef(
105
- (props, forwardedRef) => {
106
- const context = useMenuContext(CONTENT_NAME$1, props.__scopeMenu);
107
- const ref = reactExports.useRef(null);
108
- const composedRefs = useComposedRefs(forwardedRef, ref);
109
- reactExports.useEffect(() => {
110
- const content = ref.current;
111
- if (content) return hideOthers(content);
112
- }, []);
113
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
114
- MenuContentImpl,
115
- {
116
- ...props,
117
- ref: composedRefs,
118
- trapFocus: context.open,
119
- disableOutsidePointerEvents: context.open,
120
- disableOutsideScroll: true,
121
- onFocusOutside: composeEventHandlers(
122
- props.onFocusOutside,
123
- (event) => event.preventDefault(),
124
- { checkForDefaultPrevented: false }
125
- ),
126
- onDismiss: () => context.onOpenChange(false)
127
- }
128
- );
129
- }
130
- );
131
- var MenuRootContentNonModal = reactExports.forwardRef((props, forwardedRef) => {
132
- const context = useMenuContext(CONTENT_NAME$1, props.__scopeMenu);
133
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
134
- MenuContentImpl,
135
- {
136
- ...props,
137
- ref: forwardedRef,
138
- trapFocus: false,
139
- disableOutsidePointerEvents: false,
140
- disableOutsideScroll: false,
141
- onDismiss: () => context.onOpenChange(false)
142
- }
143
- );
144
- });
145
- var Slot = createSlot("MenuContent.ScrollLock");
146
- var MenuContentImpl = reactExports.forwardRef(
147
- (props, forwardedRef) => {
148
- const {
149
- __scopeMenu,
150
- loop = false,
151
- trapFocus,
152
- onOpenAutoFocus,
153
- onCloseAutoFocus,
154
- disableOutsidePointerEvents,
155
- onEntryFocus,
156
- onEscapeKeyDown,
157
- onPointerDownOutside,
158
- onFocusOutside,
159
- onInteractOutside,
160
- onDismiss,
161
- disableOutsideScroll,
162
- ...contentProps
163
- } = props;
164
- const context = useMenuContext(CONTENT_NAME$1, __scopeMenu);
165
- const rootContext = useMenuRootContext(CONTENT_NAME$1, __scopeMenu);
166
- const popperScope = usePopperScope(__scopeMenu);
167
- const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);
168
- const getItems = useCollection(__scopeMenu);
169
- const [currentItemId, setCurrentItemId] = reactExports.useState(null);
170
- const contentRef = reactExports.useRef(null);
171
- const composedRefs = useComposedRefs(forwardedRef, contentRef, context.onContentChange);
172
- const timerRef = reactExports.useRef(0);
173
- const searchRef = reactExports.useRef("");
174
- const pointerGraceTimerRef = reactExports.useRef(0);
175
- const pointerGraceIntentRef = reactExports.useRef(null);
176
- const pointerDirRef = reactExports.useRef("right");
177
- const lastPointerXRef = reactExports.useRef(0);
178
- const ScrollLockWrapper = disableOutsideScroll ? ReactRemoveScroll : reactExports.Fragment;
179
- const scrollLockWrapperProps = disableOutsideScroll ? { as: Slot, allowPinchZoom: true } : void 0;
180
- const handleTypeaheadSearch = (key) => {
181
- const search = searchRef.current + key;
182
- const items = getItems().filter((item) => !item.disabled);
183
- const currentItem = document.activeElement;
184
- const currentMatch = items.find((item) => item.ref.current === currentItem)?.textValue;
185
- const values = items.map((item) => item.textValue);
186
- const nextMatch = getNextMatch(values, search, currentMatch);
187
- const newItem = items.find((item) => item.textValue === nextMatch)?.ref.current;
188
- (function updateSearch(value) {
189
- searchRef.current = value;
190
- window.clearTimeout(timerRef.current);
191
- if (value !== "") timerRef.current = window.setTimeout(() => updateSearch(""), 1e3);
192
- })(search);
193
- if (newItem) {
194
- setTimeout(() => newItem.focus());
195
- }
196
- };
197
- reactExports.useEffect(() => {
198
- return () => window.clearTimeout(timerRef.current);
199
- }, []);
200
- useFocusGuards();
201
- const isPointerMovingToSubmenu = reactExports.useCallback((event) => {
202
- const isMovingTowards = pointerDirRef.current === pointerGraceIntentRef.current?.side;
203
- return isMovingTowards && isPointerInGraceArea(event, pointerGraceIntentRef.current?.area);
204
- }, []);
205
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
206
- MenuContentProvider,
207
- {
208
- scope: __scopeMenu,
209
- searchRef,
210
- onItemEnter: reactExports.useCallback(
211
- (event) => {
212
- if (isPointerMovingToSubmenu(event)) event.preventDefault();
213
- },
214
- [isPointerMovingToSubmenu]
215
- ),
216
- onItemLeave: reactExports.useCallback(
217
- (event) => {
218
- if (isPointerMovingToSubmenu(event)) return;
219
- contentRef.current?.focus();
220
- setCurrentItemId(null);
221
- },
222
- [isPointerMovingToSubmenu]
223
- ),
224
- onTriggerLeave: reactExports.useCallback(
225
- (event) => {
226
- if (isPointerMovingToSubmenu(event)) event.preventDefault();
227
- },
228
- [isPointerMovingToSubmenu]
229
- ),
230
- pointerGraceTimerRef,
231
- onPointerGraceIntentChange: reactExports.useCallback((intent) => {
232
- pointerGraceIntentRef.current = intent;
233
- }, []),
234
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(ScrollLockWrapper, { ...scrollLockWrapperProps, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
235
- FocusScope,
236
- {
237
- asChild: true,
238
- trapped: trapFocus,
239
- onMountAutoFocus: composeEventHandlers(onOpenAutoFocus, (event) => {
240
- event.preventDefault();
241
- contentRef.current?.focus({ preventScroll: true });
242
- }),
243
- onUnmountAutoFocus: onCloseAutoFocus,
244
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(
245
- DismissableLayer,
246
- {
247
- asChild: true,
248
- disableOutsidePointerEvents,
249
- onEscapeKeyDown,
250
- onPointerDownOutside,
251
- onFocusOutside,
252
- onInteractOutside,
253
- onDismiss,
254
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(
255
- Root,
256
- {
257
- asChild: true,
258
- ...rovingFocusGroupScope,
259
- dir: rootContext.dir,
260
- orientation: "vertical",
261
- loop,
262
- currentTabStopId: currentItemId,
263
- onCurrentTabStopIdChange: setCurrentItemId,
264
- onEntryFocus: composeEventHandlers(onEntryFocus, (event) => {
265
- if (!rootContext.isUsingKeyboardRef.current) event.preventDefault();
266
- }),
267
- preventScrollOnEntryFocus: true,
268
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(
269
- Content,
270
- {
271
- role: "menu",
272
- "aria-orientation": "vertical",
273
- "data-state": getOpenState(context.open),
274
- "data-radix-menu-content": "",
275
- dir: rootContext.dir,
276
- ...popperScope,
277
- ...contentProps,
278
- ref: composedRefs,
279
- style: { outline: "none", ...contentProps.style },
280
- onKeyDown: composeEventHandlers(contentProps.onKeyDown, (event) => {
281
- const target = event.target;
282
- const isKeyDownInside = target.closest("[data-radix-menu-content]") === event.currentTarget;
283
- const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;
284
- const isCharacterKey = event.key.length === 1;
285
- if (isKeyDownInside) {
286
- if (event.key === "Tab") event.preventDefault();
287
- if (!isModifierKey && isCharacterKey) handleTypeaheadSearch(event.key);
288
- }
289
- const content = contentRef.current;
290
- if (event.target !== content) return;
291
- if (!FIRST_LAST_KEYS.includes(event.key)) return;
292
- event.preventDefault();
293
- const items = getItems().filter((item) => !item.disabled);
294
- const candidateNodes = items.map((item) => item.ref.current);
295
- if (LAST_KEYS.includes(event.key)) candidateNodes.reverse();
296
- focusFirst(candidateNodes);
297
- }),
298
- onBlur: composeEventHandlers(props.onBlur, (event) => {
299
- if (!event.currentTarget.contains(event.target)) {
300
- window.clearTimeout(timerRef.current);
301
- searchRef.current = "";
302
- }
303
- }),
304
- onPointerMove: composeEventHandlers(
305
- props.onPointerMove,
306
- whenMouse((event) => {
307
- const target = event.target;
308
- const pointerXHasChanged = lastPointerXRef.current !== event.clientX;
309
- if (event.currentTarget.contains(target) && pointerXHasChanged) {
310
- const newDir = event.clientX > lastPointerXRef.current ? "right" : "left";
311
- pointerDirRef.current = newDir;
312
- lastPointerXRef.current = event.clientX;
313
- }
314
- })
315
- )
316
- }
317
- )
318
- }
319
- )
320
- }
321
- )
322
- }
323
- ) })
324
- }
325
- );
326
- }
327
- );
328
- MenuContent.displayName = CONTENT_NAME$1;
329
- var GROUP_NAME$1 = "MenuGroup";
330
- var MenuGroup = reactExports.forwardRef(
331
- (props, forwardedRef) => {
332
- const { __scopeMenu, ...groupProps } = props;
333
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Primitive.div, { role: "group", ...groupProps, ref: forwardedRef });
334
- }
335
- );
336
- MenuGroup.displayName = GROUP_NAME$1;
337
- var LABEL_NAME$1 = "MenuLabel";
338
- var MenuLabel = reactExports.forwardRef(
339
- (props, forwardedRef) => {
340
- const { __scopeMenu, ...labelProps } = props;
341
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Primitive.div, { ...labelProps, ref: forwardedRef });
342
- }
343
- );
344
- MenuLabel.displayName = LABEL_NAME$1;
345
- var ITEM_NAME$1 = "MenuItem";
346
- var ITEM_SELECT = "menu.itemSelect";
347
- var MenuItem = reactExports.forwardRef(
348
- (props, forwardedRef) => {
349
- const { disabled = false, onSelect, ...itemProps } = props;
350
- const ref = reactExports.useRef(null);
351
- const rootContext = useMenuRootContext(ITEM_NAME$1, props.__scopeMenu);
352
- const contentContext = useMenuContentContext(ITEM_NAME$1, props.__scopeMenu);
353
- const composedRefs = useComposedRefs(forwardedRef, ref);
354
- const isPointerDownRef = reactExports.useRef(false);
355
- const handleSelect = () => {
356
- const menuItem = ref.current;
357
- if (!disabled && menuItem) {
358
- const itemSelectEvent = new CustomEvent(ITEM_SELECT, { bubbles: true, cancelable: true });
359
- menuItem.addEventListener(ITEM_SELECT, (event) => onSelect?.(event), { once: true });
360
- dispatchDiscreteCustomEvent(menuItem, itemSelectEvent);
361
- if (itemSelectEvent.defaultPrevented) {
362
- isPointerDownRef.current = false;
363
- } else {
364
- rootContext.onClose();
365
- }
366
- }
367
- };
368
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
369
- MenuItemImpl,
370
- {
371
- ...itemProps,
372
- ref: composedRefs,
373
- disabled,
374
- onClick: composeEventHandlers(props.onClick, handleSelect),
375
- onPointerDown: (event) => {
376
- props.onPointerDown?.(event);
377
- isPointerDownRef.current = true;
378
- },
379
- onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {
380
- if (!isPointerDownRef.current) event.currentTarget?.click();
381
- }),
382
- onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {
383
- const isTypingAhead = contentContext.searchRef.current !== "";
384
- if (disabled || isTypingAhead && event.key === " ") return;
385
- if (SELECTION_KEYS.includes(event.key)) {
386
- event.currentTarget.click();
387
- event.preventDefault();
388
- }
389
- })
390
- }
391
- );
392
- }
393
- );
394
- MenuItem.displayName = ITEM_NAME$1;
395
- var MenuItemImpl = reactExports.forwardRef(
396
- (props, forwardedRef) => {
397
- const { __scopeMenu, disabled = false, textValue, ...itemProps } = props;
398
- const contentContext = useMenuContentContext(ITEM_NAME$1, __scopeMenu);
399
- const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeMenu);
400
- const ref = reactExports.useRef(null);
401
- const composedRefs = useComposedRefs(forwardedRef, ref);
402
- const [isFocused, setIsFocused] = reactExports.useState(false);
403
- const [textContent, setTextContent] = reactExports.useState("");
404
- reactExports.useEffect(() => {
405
- const menuItem = ref.current;
406
- if (menuItem) {
407
- setTextContent((menuItem.textContent ?? "").trim());
408
- }
409
- }, [itemProps.children]);
410
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
411
- Collection.ItemSlot,
412
- {
413
- scope: __scopeMenu,
414
- disabled,
415
- textValue: textValue ?? textContent,
416
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(Item, { asChild: true, ...rovingFocusGroupScope, focusable: !disabled, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
417
- Primitive.div,
418
- {
419
- role: "menuitem",
420
- "data-highlighted": isFocused ? "" : void 0,
421
- "aria-disabled": disabled || void 0,
422
- "data-disabled": disabled ? "" : void 0,
423
- ...itemProps,
424
- ref: composedRefs,
425
- onPointerMove: composeEventHandlers(
426
- props.onPointerMove,
427
- whenMouse((event) => {
428
- if (disabled) {
429
- contentContext.onItemLeave(event);
430
- } else {
431
- contentContext.onItemEnter(event);
432
- if (!event.defaultPrevented) {
433
- const item = event.currentTarget;
434
- item.focus({ preventScroll: true });
435
- }
436
- }
437
- })
438
- ),
439
- onPointerLeave: composeEventHandlers(
440
- props.onPointerLeave,
441
- whenMouse((event) => contentContext.onItemLeave(event))
442
- ),
443
- onFocus: composeEventHandlers(props.onFocus, () => setIsFocused(true)),
444
- onBlur: composeEventHandlers(props.onBlur, () => setIsFocused(false))
445
- }
446
- ) })
447
- }
448
- );
449
- }
450
- );
451
- var CHECKBOX_ITEM_NAME$1 = "MenuCheckboxItem";
452
- var MenuCheckboxItem = reactExports.forwardRef(
453
- (props, forwardedRef) => {
454
- const { checked = false, onCheckedChange, ...checkboxItemProps } = props;
455
- return /* @__PURE__ */ jsxRuntimeExports.jsx(ItemIndicatorProvider, { scope: props.__scopeMenu, checked, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
456
- MenuItem,
457
- {
458
- role: "menuitemcheckbox",
459
- "aria-checked": isIndeterminate(checked) ? "mixed" : checked,
460
- ...checkboxItemProps,
461
- ref: forwardedRef,
462
- "data-state": getCheckedState(checked),
463
- onSelect: composeEventHandlers(
464
- checkboxItemProps.onSelect,
465
- () => onCheckedChange?.(isIndeterminate(checked) ? true : !checked),
466
- { checkForDefaultPrevented: false }
467
- )
468
- }
469
- ) });
470
- }
471
- );
472
- MenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME$1;
473
- var RADIO_GROUP_NAME$1 = "MenuRadioGroup";
474
- var [RadioGroupProvider, useRadioGroupContext] = createMenuContext(
475
- RADIO_GROUP_NAME$1,
476
- { value: void 0, onValueChange: () => {
477
- } }
478
- );
479
- var MenuRadioGroup = reactExports.forwardRef(
480
- (props, forwardedRef) => {
481
- const { value, onValueChange, ...groupProps } = props;
482
- const handleValueChange = useCallbackRef(onValueChange);
483
- return /* @__PURE__ */ jsxRuntimeExports.jsx(RadioGroupProvider, { scope: props.__scopeMenu, value, onValueChange: handleValueChange, children: /* @__PURE__ */ jsxRuntimeExports.jsx(MenuGroup, { ...groupProps, ref: forwardedRef }) });
484
- }
485
- );
486
- MenuRadioGroup.displayName = RADIO_GROUP_NAME$1;
487
- var RADIO_ITEM_NAME$1 = "MenuRadioItem";
488
- var MenuRadioItem = reactExports.forwardRef(
489
- (props, forwardedRef) => {
490
- const { value, ...radioItemProps } = props;
491
- const context = useRadioGroupContext(RADIO_ITEM_NAME$1, props.__scopeMenu);
492
- const checked = value === context.value;
493
- return /* @__PURE__ */ jsxRuntimeExports.jsx(ItemIndicatorProvider, { scope: props.__scopeMenu, checked, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
494
- MenuItem,
495
- {
496
- role: "menuitemradio",
497
- "aria-checked": checked,
498
- ...radioItemProps,
499
- ref: forwardedRef,
500
- "data-state": getCheckedState(checked),
501
- onSelect: composeEventHandlers(
502
- radioItemProps.onSelect,
503
- () => context.onValueChange?.(value),
504
- { checkForDefaultPrevented: false }
505
- )
506
- }
507
- ) });
508
- }
509
- );
510
- MenuRadioItem.displayName = RADIO_ITEM_NAME$1;
511
- var ITEM_INDICATOR_NAME = "MenuItemIndicator";
512
- var [ItemIndicatorProvider, useItemIndicatorContext] = createMenuContext(
513
- ITEM_INDICATOR_NAME,
514
- { checked: false }
515
- );
516
- var MenuItemIndicator = reactExports.forwardRef(
517
- (props, forwardedRef) => {
518
- const { __scopeMenu, forceMount, ...itemIndicatorProps } = props;
519
- const indicatorContext = useItemIndicatorContext(ITEM_INDICATOR_NAME, __scopeMenu);
520
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
521
- Presence,
522
- {
523
- present: forceMount || isIndeterminate(indicatorContext.checked) || indicatorContext.checked === true,
524
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(
525
- Primitive.span,
526
- {
527
- ...itemIndicatorProps,
528
- ref: forwardedRef,
529
- "data-state": getCheckedState(indicatorContext.checked)
530
- }
531
- )
532
- }
533
- );
534
- }
535
- );
536
- MenuItemIndicator.displayName = ITEM_INDICATOR_NAME;
537
- var SEPARATOR_NAME$1 = "MenuSeparator";
538
- var MenuSeparator = reactExports.forwardRef(
539
- (props, forwardedRef) => {
540
- const { __scopeMenu, ...separatorProps } = props;
541
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
542
- Primitive.div,
543
- {
544
- role: "separator",
545
- "aria-orientation": "horizontal",
546
- ...separatorProps,
547
- ref: forwardedRef
548
- }
549
- );
550
- }
551
- );
552
- MenuSeparator.displayName = SEPARATOR_NAME$1;
553
- var ARROW_NAME$1 = "MenuArrow";
554
- var MenuArrow = reactExports.forwardRef(
555
- (props, forwardedRef) => {
556
- const { __scopeMenu, ...arrowProps } = props;
557
- const popperScope = usePopperScope(__scopeMenu);
558
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });
559
- }
560
- );
561
- MenuArrow.displayName = ARROW_NAME$1;
562
- var SUB_NAME = "MenuSub";
563
- var [MenuSubProvider, useMenuSubContext] = createMenuContext(SUB_NAME);
564
- var SUB_TRIGGER_NAME$1 = "MenuSubTrigger";
565
- var MenuSubTrigger = reactExports.forwardRef(
566
- (props, forwardedRef) => {
567
- const context = useMenuContext(SUB_TRIGGER_NAME$1, props.__scopeMenu);
568
- const rootContext = useMenuRootContext(SUB_TRIGGER_NAME$1, props.__scopeMenu);
569
- const subContext = useMenuSubContext(SUB_TRIGGER_NAME$1, props.__scopeMenu);
570
- const contentContext = useMenuContentContext(SUB_TRIGGER_NAME$1, props.__scopeMenu);
571
- const openTimerRef = reactExports.useRef(null);
572
- const { pointerGraceTimerRef, onPointerGraceIntentChange } = contentContext;
573
- const scope = { __scopeMenu: props.__scopeMenu };
574
- const clearOpenTimer = reactExports.useCallback(() => {
575
- if (openTimerRef.current) window.clearTimeout(openTimerRef.current);
576
- openTimerRef.current = null;
577
- }, []);
578
- reactExports.useEffect(() => clearOpenTimer, [clearOpenTimer]);
579
- reactExports.useEffect(() => {
580
- const pointerGraceTimer = pointerGraceTimerRef.current;
581
- return () => {
582
- window.clearTimeout(pointerGraceTimer);
583
- onPointerGraceIntentChange(null);
584
- };
585
- }, [pointerGraceTimerRef, onPointerGraceIntentChange]);
586
- return /* @__PURE__ */ jsxRuntimeExports.jsx(MenuAnchor, { asChild: true, ...scope, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
587
- MenuItemImpl,
588
- {
589
- id: subContext.triggerId,
590
- "aria-haspopup": "menu",
591
- "aria-expanded": context.open,
592
- "aria-controls": subContext.contentId,
593
- "data-state": getOpenState(context.open),
594
- ...props,
595
- ref: composeRefs(forwardedRef, subContext.onTriggerChange),
596
- onClick: (event) => {
597
- props.onClick?.(event);
598
- if (props.disabled || event.defaultPrevented) return;
599
- event.currentTarget.focus();
600
- if (!context.open) context.onOpenChange(true);
601
- },
602
- onPointerMove: composeEventHandlers(
603
- props.onPointerMove,
604
- whenMouse((event) => {
605
- contentContext.onItemEnter(event);
606
- if (event.defaultPrevented) return;
607
- if (!props.disabled && !context.open && !openTimerRef.current) {
608
- contentContext.onPointerGraceIntentChange(null);
609
- openTimerRef.current = window.setTimeout(() => {
610
- context.onOpenChange(true);
611
- clearOpenTimer();
612
- }, 100);
613
- }
614
- })
615
- ),
616
- onPointerLeave: composeEventHandlers(
617
- props.onPointerLeave,
618
- whenMouse((event) => {
619
- clearOpenTimer();
620
- const contentRect = context.content?.getBoundingClientRect();
621
- if (contentRect) {
622
- const side = context.content?.dataset.side;
623
- const rightSide = side === "right";
624
- const bleed = rightSide ? -5 : 5;
625
- const contentNearEdge = contentRect[rightSide ? "left" : "right"];
626
- const contentFarEdge = contentRect[rightSide ? "right" : "left"];
627
- contentContext.onPointerGraceIntentChange({
628
- area: [
629
- // Apply a bleed on clientX to ensure that our exit point is
630
- // consistently within polygon bounds
631
- { x: event.clientX + bleed, y: event.clientY },
632
- { x: contentNearEdge, y: contentRect.top },
633
- { x: contentFarEdge, y: contentRect.top },
634
- { x: contentFarEdge, y: contentRect.bottom },
635
- { x: contentNearEdge, y: contentRect.bottom }
636
- ],
637
- side
638
- });
639
- window.clearTimeout(pointerGraceTimerRef.current);
640
- pointerGraceTimerRef.current = window.setTimeout(
641
- () => contentContext.onPointerGraceIntentChange(null),
642
- 300
643
- );
644
- } else {
645
- contentContext.onTriggerLeave(event);
646
- if (event.defaultPrevented) return;
647
- contentContext.onPointerGraceIntentChange(null);
648
- }
649
- })
650
- ),
651
- onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {
652
- const isTypingAhead = contentContext.searchRef.current !== "";
653
- if (props.disabled || isTypingAhead && event.key === " ") return;
654
- if (SUB_OPEN_KEYS[rootContext.dir].includes(event.key)) {
655
- context.onOpenChange(true);
656
- context.content?.focus();
657
- event.preventDefault();
658
- }
659
- })
660
- }
661
- ) });
662
- }
663
- );
664
- MenuSubTrigger.displayName = SUB_TRIGGER_NAME$1;
665
- var SUB_CONTENT_NAME$1 = "MenuSubContent";
666
- var MenuSubContent = reactExports.forwardRef(
667
- (props, forwardedRef) => {
668
- const portalContext = usePortalContext(CONTENT_NAME$1, props.__scopeMenu);
669
- const { forceMount = portalContext.forceMount, ...subContentProps } = props;
670
- const context = useMenuContext(CONTENT_NAME$1, props.__scopeMenu);
671
- const rootContext = useMenuRootContext(CONTENT_NAME$1, props.__scopeMenu);
672
- const subContext = useMenuSubContext(SUB_CONTENT_NAME$1, props.__scopeMenu);
673
- const ref = reactExports.useRef(null);
674
- const composedRefs = useComposedRefs(forwardedRef, ref);
675
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Collection.Provider, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsxRuntimeExports.jsx(Collection.Slot, { scope: props.__scopeMenu, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
676
- MenuContentImpl,
677
- {
678
- id: subContext.contentId,
679
- "aria-labelledby": subContext.triggerId,
680
- ...subContentProps,
681
- ref: composedRefs,
682
- align: "start",
683
- side: rootContext.dir === "rtl" ? "left" : "right",
684
- disableOutsidePointerEvents: false,
685
- disableOutsideScroll: false,
686
- trapFocus: false,
687
- onOpenAutoFocus: (event) => {
688
- if (rootContext.isUsingKeyboardRef.current) ref.current?.focus();
689
- event.preventDefault();
690
- },
691
- onCloseAutoFocus: (event) => event.preventDefault(),
692
- onFocusOutside: composeEventHandlers(props.onFocusOutside, (event) => {
693
- if (event.target !== subContext.trigger) context.onOpenChange(false);
694
- }),
695
- onEscapeKeyDown: composeEventHandlers(props.onEscapeKeyDown, (event) => {
696
- rootContext.onClose();
697
- event.preventDefault();
698
- }),
699
- onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {
700
- const isKeyDownInside = event.currentTarget.contains(event.target);
701
- const isCloseKey = SUB_CLOSE_KEYS[rootContext.dir].includes(event.key);
702
- if (isKeyDownInside && isCloseKey) {
703
- context.onOpenChange(false);
704
- subContext.trigger?.focus();
705
- event.preventDefault();
706
- }
707
- })
708
- }
709
- ) }) }) });
710
- }
711
- );
712
- MenuSubContent.displayName = SUB_CONTENT_NAME$1;
713
- function getOpenState(open) {
714
- return open ? "open" : "closed";
715
- }
716
- function isIndeterminate(checked) {
717
- return checked === "indeterminate";
718
- }
719
- function getCheckedState(checked) {
720
- return isIndeterminate(checked) ? "indeterminate" : checked ? "checked" : "unchecked";
721
- }
722
- function focusFirst(candidates) {
723
- const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;
724
- for (const candidate of candidates) {
725
- if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;
726
- candidate.focus();
727
- if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;
728
- }
729
- }
730
- function wrapArray(array, startIndex) {
731
- return array.map((_, index) => array[(startIndex + index) % array.length]);
732
- }
733
- function getNextMatch(values, search, currentMatch) {
734
- const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);
735
- const normalizedSearch = isRepeated ? search[0] : search;
736
- const currentMatchIndex = currentMatch ? values.indexOf(currentMatch) : -1;
737
- let wrappedValues = wrapArray(values, Math.max(currentMatchIndex, 0));
738
- const excludeCurrentMatch = normalizedSearch.length === 1;
739
- if (excludeCurrentMatch) wrappedValues = wrappedValues.filter((v) => v !== currentMatch);
740
- const nextMatch = wrappedValues.find(
741
- (value) => value.toLowerCase().startsWith(normalizedSearch.toLowerCase())
742
- );
743
- return nextMatch !== currentMatch ? nextMatch : void 0;
744
- }
745
- function isPointInPolygon(point, polygon) {
746
- const { x, y } = point;
747
- let inside = false;
748
- for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
749
- const ii = polygon[i];
750
- const jj = polygon[j];
751
- const xi = ii.x;
752
- const yi = ii.y;
753
- const xj = jj.x;
754
- const yj = jj.y;
755
- const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;
756
- if (intersect) inside = !inside;
757
- }
758
- return inside;
759
- }
760
- function isPointerInGraceArea(event, area) {
761
- if (!area) return false;
762
- const cursorPos = { x: event.clientX, y: event.clientY };
763
- return isPointInPolygon(cursorPos, area);
764
- }
765
- function whenMouse(handler) {
766
- return (event) => event.pointerType === "mouse" ? handler(event) : void 0;
767
- }
768
- var Root3 = Menu;
769
- var Anchor2 = MenuAnchor;
770
- var Portal = MenuPortal;
771
- var Content2$1 = MenuContent;
772
- var Group = MenuGroup;
773
- var Label = MenuLabel;
774
- var Item2$1 = MenuItem;
775
- var CheckboxItem = MenuCheckboxItem;
776
- var RadioGroup = MenuRadioGroup;
777
- var RadioItem = MenuRadioItem;
778
- var ItemIndicator = MenuItemIndicator;
779
- var Separator = MenuSeparator;
780
- var Arrow2 = MenuArrow;
781
- var SubTrigger = MenuSubTrigger;
782
- var SubContent = MenuSubContent;
783
- var DROPDOWN_MENU_NAME = "DropdownMenu";
784
- var [createDropdownMenuContext] = createContextScope(
785
- DROPDOWN_MENU_NAME,
786
- [createMenuScope]
787
- );
788
- var useMenuScope = createMenuScope();
789
- var [DropdownMenuProvider, useDropdownMenuContext] = createDropdownMenuContext(DROPDOWN_MENU_NAME);
790
- var DropdownMenu$1 = (props) => {
791
- const {
792
- __scopeDropdownMenu,
793
- children,
794
- dir,
795
- open: openProp,
796
- defaultOpen,
797
- onOpenChange,
798
- modal = true
799
- } = props;
800
- const menuScope = useMenuScope(__scopeDropdownMenu);
801
- const triggerRef = reactExports.useRef(null);
802
- const [open, setOpen] = useControllableState({
803
- prop: openProp,
804
- defaultProp: defaultOpen ?? false,
805
- onChange: onOpenChange,
806
- caller: DROPDOWN_MENU_NAME
807
- });
808
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
809
- DropdownMenuProvider,
810
- {
811
- scope: __scopeDropdownMenu,
812
- triggerId: useId(),
813
- triggerRef,
814
- contentId: useId(),
815
- open,
816
- onOpenChange: setOpen,
817
- onOpenToggle: reactExports.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),
818
- modal,
819
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(Root3, { ...menuScope, open, onOpenChange: setOpen, dir, modal, children })
820
- }
821
- );
822
- };
823
- DropdownMenu$1.displayName = DROPDOWN_MENU_NAME;
824
- var TRIGGER_NAME = "DropdownMenuTrigger";
825
- var DropdownMenuTrigger$1 = reactExports.forwardRef(
826
- (props, forwardedRef) => {
827
- const { __scopeDropdownMenu, disabled = false, ...triggerProps } = props;
828
- const context = useDropdownMenuContext(TRIGGER_NAME, __scopeDropdownMenu);
829
- const menuScope = useMenuScope(__scopeDropdownMenu);
830
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Anchor2, { asChild: true, ...menuScope, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
831
- Primitive.button,
832
- {
833
- type: "button",
834
- id: context.triggerId,
835
- "aria-haspopup": "menu",
836
- "aria-expanded": context.open,
837
- "aria-controls": context.open ? context.contentId : void 0,
838
- "data-state": context.open ? "open" : "closed",
839
- "data-disabled": disabled ? "" : void 0,
840
- disabled,
841
- ...triggerProps,
842
- ref: composeRefs(forwardedRef, context.triggerRef),
843
- onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {
844
- if (!disabled && event.button === 0 && event.ctrlKey === false) {
845
- context.onOpenToggle();
846
- if (!context.open) event.preventDefault();
847
- }
848
- }),
849
- onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {
850
- if (disabled) return;
851
- if (["Enter", " "].includes(event.key)) context.onOpenToggle();
852
- if (event.key === "ArrowDown") context.onOpenChange(true);
853
- if (["Enter", " ", "ArrowDown"].includes(event.key)) event.preventDefault();
854
- })
855
- }
856
- ) });
857
- }
858
- );
859
- DropdownMenuTrigger$1.displayName = TRIGGER_NAME;
860
- var PORTAL_NAME = "DropdownMenuPortal";
861
- var DropdownMenuPortal = (props) => {
862
- const { __scopeDropdownMenu, ...portalProps } = props;
863
- const menuScope = useMenuScope(__scopeDropdownMenu);
864
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Portal, { ...menuScope, ...portalProps });
865
- };
866
- DropdownMenuPortal.displayName = PORTAL_NAME;
867
- var CONTENT_NAME = "DropdownMenuContent";
868
- var DropdownMenuContent$1 = reactExports.forwardRef(
869
- (props, forwardedRef) => {
870
- const { __scopeDropdownMenu, ...contentProps } = props;
871
- const context = useDropdownMenuContext(CONTENT_NAME, __scopeDropdownMenu);
872
- const menuScope = useMenuScope(__scopeDropdownMenu);
873
- const hasInteractedOutsideRef = reactExports.useRef(false);
874
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
875
- Content2$1,
876
- {
877
- id: context.contentId,
878
- "aria-labelledby": context.triggerId,
879
- ...menuScope,
880
- ...contentProps,
881
- ref: forwardedRef,
882
- onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {
883
- if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();
884
- hasInteractedOutsideRef.current = false;
885
- event.preventDefault();
886
- }),
887
- onInteractOutside: composeEventHandlers(props.onInteractOutside, (event) => {
888
- const originalEvent = event.detail.originalEvent;
889
- const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;
890
- const isRightClick = originalEvent.button === 2 || ctrlLeftClick;
891
- if (!context.modal || isRightClick) hasInteractedOutsideRef.current = true;
892
- }),
893
- style: {
894
- ...props.style,
895
- // re-namespace exposed content custom properties
896
- ...{
897
- "--radix-dropdown-menu-content-transform-origin": "var(--radix-popper-transform-origin)",
898
- "--radix-dropdown-menu-content-available-width": "var(--radix-popper-available-width)",
899
- "--radix-dropdown-menu-content-available-height": "var(--radix-popper-available-height)",
900
- "--radix-dropdown-menu-trigger-width": "var(--radix-popper-anchor-width)",
901
- "--radix-dropdown-menu-trigger-height": "var(--radix-popper-anchor-height)"
902
- }
903
- }
904
- }
905
- );
906
- }
907
- );
908
- DropdownMenuContent$1.displayName = CONTENT_NAME;
909
- var GROUP_NAME = "DropdownMenuGroup";
910
- var DropdownMenuGroup = reactExports.forwardRef(
911
- (props, forwardedRef) => {
912
- const { __scopeDropdownMenu, ...groupProps } = props;
913
- const menuScope = useMenuScope(__scopeDropdownMenu);
914
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Group, { ...menuScope, ...groupProps, ref: forwardedRef });
915
- }
916
- );
917
- DropdownMenuGroup.displayName = GROUP_NAME;
918
- var LABEL_NAME = "DropdownMenuLabel";
919
- var DropdownMenuLabel = reactExports.forwardRef(
920
- (props, forwardedRef) => {
921
- const { __scopeDropdownMenu, ...labelProps } = props;
922
- const menuScope = useMenuScope(__scopeDropdownMenu);
923
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Label, { ...menuScope, ...labelProps, ref: forwardedRef });
924
- }
925
- );
926
- DropdownMenuLabel.displayName = LABEL_NAME;
927
- var ITEM_NAME = "DropdownMenuItem";
928
- var DropdownMenuItem$1 = reactExports.forwardRef(
929
- (props, forwardedRef) => {
930
- const { __scopeDropdownMenu, ...itemProps } = props;
931
- const menuScope = useMenuScope(__scopeDropdownMenu);
932
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Item2$1, { ...menuScope, ...itemProps, ref: forwardedRef });
933
- }
934
- );
935
- DropdownMenuItem$1.displayName = ITEM_NAME;
936
- var CHECKBOX_ITEM_NAME = "DropdownMenuCheckboxItem";
937
- var DropdownMenuCheckboxItem = reactExports.forwardRef((props, forwardedRef) => {
938
- const { __scopeDropdownMenu, ...checkboxItemProps } = props;
939
- const menuScope = useMenuScope(__scopeDropdownMenu);
940
- return /* @__PURE__ */ jsxRuntimeExports.jsx(CheckboxItem, { ...menuScope, ...checkboxItemProps, ref: forwardedRef });
941
- });
942
- DropdownMenuCheckboxItem.displayName = CHECKBOX_ITEM_NAME;
943
- var RADIO_GROUP_NAME = "DropdownMenuRadioGroup";
944
- var DropdownMenuRadioGroup = reactExports.forwardRef((props, forwardedRef) => {
945
- const { __scopeDropdownMenu, ...radioGroupProps } = props;
946
- const menuScope = useMenuScope(__scopeDropdownMenu);
947
- return /* @__PURE__ */ jsxRuntimeExports.jsx(RadioGroup, { ...menuScope, ...radioGroupProps, ref: forwardedRef });
948
- });
949
- DropdownMenuRadioGroup.displayName = RADIO_GROUP_NAME;
950
- var RADIO_ITEM_NAME = "DropdownMenuRadioItem";
951
- var DropdownMenuRadioItem = reactExports.forwardRef((props, forwardedRef) => {
952
- const { __scopeDropdownMenu, ...radioItemProps } = props;
953
- const menuScope = useMenuScope(__scopeDropdownMenu);
954
- return /* @__PURE__ */ jsxRuntimeExports.jsx(RadioItem, { ...menuScope, ...radioItemProps, ref: forwardedRef });
955
- });
956
- DropdownMenuRadioItem.displayName = RADIO_ITEM_NAME;
957
- var INDICATOR_NAME = "DropdownMenuItemIndicator";
958
- var DropdownMenuItemIndicator = reactExports.forwardRef((props, forwardedRef) => {
959
- const { __scopeDropdownMenu, ...itemIndicatorProps } = props;
960
- const menuScope = useMenuScope(__scopeDropdownMenu);
961
- return /* @__PURE__ */ jsxRuntimeExports.jsx(ItemIndicator, { ...menuScope, ...itemIndicatorProps, ref: forwardedRef });
962
- });
963
- DropdownMenuItemIndicator.displayName = INDICATOR_NAME;
964
- var SEPARATOR_NAME = "DropdownMenuSeparator";
965
- var DropdownMenuSeparator = reactExports.forwardRef((props, forwardedRef) => {
966
- const { __scopeDropdownMenu, ...separatorProps } = props;
967
- const menuScope = useMenuScope(__scopeDropdownMenu);
968
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Separator, { ...menuScope, ...separatorProps, ref: forwardedRef });
969
- });
970
- DropdownMenuSeparator.displayName = SEPARATOR_NAME;
971
- var ARROW_NAME = "DropdownMenuArrow";
972
- var DropdownMenuArrow = reactExports.forwardRef(
973
- (props, forwardedRef) => {
974
- const { __scopeDropdownMenu, ...arrowProps } = props;
975
- const menuScope = useMenuScope(__scopeDropdownMenu);
976
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Arrow2, { ...menuScope, ...arrowProps, ref: forwardedRef });
977
- }
978
- );
979
- DropdownMenuArrow.displayName = ARROW_NAME;
980
- var SUB_TRIGGER_NAME = "DropdownMenuSubTrigger";
981
- var DropdownMenuSubTrigger = reactExports.forwardRef((props, forwardedRef) => {
982
- const { __scopeDropdownMenu, ...subTriggerProps } = props;
983
- const menuScope = useMenuScope(__scopeDropdownMenu);
984
- return /* @__PURE__ */ jsxRuntimeExports.jsx(SubTrigger, { ...menuScope, ...subTriggerProps, ref: forwardedRef });
985
- });
986
- DropdownMenuSubTrigger.displayName = SUB_TRIGGER_NAME;
987
- var SUB_CONTENT_NAME = "DropdownMenuSubContent";
988
- var DropdownMenuSubContent = reactExports.forwardRef((props, forwardedRef) => {
989
- const { __scopeDropdownMenu, ...subContentProps } = props;
990
- const menuScope = useMenuScope(__scopeDropdownMenu);
991
- return /* @__PURE__ */ jsxRuntimeExports.jsx(
992
- SubContent,
993
- {
994
- ...menuScope,
995
- ...subContentProps,
996
- ref: forwardedRef,
997
- style: {
998
- ...props.style,
999
- // re-namespace exposed content custom properties
1000
- ...{
1001
- "--radix-dropdown-menu-content-transform-origin": "var(--radix-popper-transform-origin)",
1002
- "--radix-dropdown-menu-content-available-width": "var(--radix-popper-available-width)",
1003
- "--radix-dropdown-menu-content-available-height": "var(--radix-popper-available-height)",
1004
- "--radix-dropdown-menu-trigger-width": "var(--radix-popper-anchor-width)",
1005
- "--radix-dropdown-menu-trigger-height": "var(--radix-popper-anchor-height)"
1006
- }
1007
- }
1008
- }
1009
- );
1010
- });
1011
- DropdownMenuSubContent.displayName = SUB_CONTENT_NAME;
1012
- var Root2 = DropdownMenu$1;
1013
- var Trigger = DropdownMenuTrigger$1;
1014
- var Portal2 = DropdownMenuPortal;
1015
- var Content2 = DropdownMenuContent$1;
1016
- var Item2 = DropdownMenuItem$1;
1017
- const DropdownMenu = Root2;
1018
- const DropdownMenuTrigger = Trigger;
1019
- const DropdownMenuContent = reactExports.forwardRef(function DropdownMenuContent2({ children, ...delegatedProps }, forwardedRef) {
1020
- return jsxRuntimeExports.jsx(Portal2, { children: jsxRuntimeExports.jsx(Content2, { ...delegatedProps, ref: forwardedRef, children }) });
1021
- });
1022
- const DropdownMenuItem = Item2;
1023
- export {
1024
- ConnectDropdownMenu as C
1025
- };
1026
- //# sourceMappingURL=dropdown-menu-CXmhaaui.js.map