@flanksource/clicky-ui 0.3.24 → 0.3.26

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 (491) hide show
  1. package/NOTICE.md +1 -0
  2. package/dist/ai.cjs +4 -0
  3. package/dist/ai.cjs.map +1 -1
  4. package/dist/ai.js +6 -2
  5. package/dist/ai.js.map +1 -1
  6. package/dist/chat.cjs +8 -0
  7. package/dist/chat.cjs.map +1 -1
  8. package/dist/chat.js +9 -1
  9. package/dist/chat.js.map +1 -1
  10. package/dist/comments/CommentCard.cjs +89 -14
  11. package/dist/comments/CommentCard.cjs.map +1 -1
  12. package/dist/comments/CommentCard.d.ts.map +1 -1
  13. package/dist/comments/CommentCard.js +90 -15
  14. package/dist/comments/CommentCard.js.map +1 -1
  15. package/dist/comments/CommentComposer.cjs +25 -2
  16. package/dist/comments/CommentComposer.cjs.map +1 -1
  17. package/dist/comments/CommentComposer.d.ts.map +1 -1
  18. package/dist/comments/CommentComposer.js +25 -2
  19. package/dist/comments/CommentComposer.js.map +1 -1
  20. package/dist/comments/CommentProvider.cjs +21 -14
  21. package/dist/comments/CommentProvider.cjs.map +1 -1
  22. package/dist/comments/CommentProvider.d.ts +1 -1
  23. package/dist/comments/CommentProvider.d.ts.map +1 -1
  24. package/dist/comments/CommentProvider.js +21 -14
  25. package/dist/comments/CommentProvider.js.map +1 -1
  26. package/dist/comments/CommentSidePanel.cjs +1 -1
  27. package/dist/comments/CommentSidePanel.cjs.map +1 -1
  28. package/dist/comments/CommentSidePanel.js +1 -1
  29. package/dist/comments/CommentSidePanel.js.map +1 -1
  30. package/dist/comments/comment-types.cjs.map +1 -1
  31. package/dist/comments/comment-types.d.ts +6 -0
  32. package/dist/comments/comment-types.d.ts.map +1 -1
  33. package/dist/comments/comment-types.js.map +1 -1
  34. package/dist/components/DimensionField.cjs +56 -0
  35. package/dist/components/DimensionField.cjs.map +1 -0
  36. package/dist/components/DimensionField.d.ts +17 -0
  37. package/dist/components/DimensionField.d.ts.map +1 -0
  38. package/dist/components/DimensionField.js +56 -0
  39. package/dist/components/DimensionField.js.map +1 -0
  40. package/dist/components.cjs +4 -0
  41. package/dist/components.cjs.map +1 -1
  42. package/dist/components.d.ts +2 -0
  43. package/dist/components.d.ts.map +1 -1
  44. package/dist/components.js +4 -0
  45. package/dist/components.js.map +1 -1
  46. package/dist/data/Clicky.cjs +4 -5
  47. package/dist/data/Clicky.cjs.map +1 -1
  48. package/dist/data/Clicky.d.ts.map +1 -1
  49. package/dist/data/Clicky.js +4 -5
  50. package/dist/data/Clicky.js.map +1 -1
  51. package/dist/data/TaskExecDetails.cjs +8 -3
  52. package/dist/data/TaskExecDetails.cjs.map +1 -1
  53. package/dist/data/TaskExecDetails.d.ts +4 -0
  54. package/dist/data/TaskExecDetails.d.ts.map +1 -1
  55. package/dist/data/TaskExecDetails.js +9 -4
  56. package/dist/data/TaskExecDetails.js.map +1 -1
  57. package/dist/data/TaskManagerButton.cjs +101 -7
  58. package/dist/data/TaskManagerButton.cjs.map +1 -1
  59. package/dist/data/TaskManagerButton.d.ts +6 -1
  60. package/dist/data/TaskManagerButton.d.ts.map +1 -1
  61. package/dist/data/TaskManagerButton.js +103 -9
  62. package/dist/data/TaskManagerButton.js.map +1 -1
  63. package/dist/data/TaskProcessDetails.cjs +2 -0
  64. package/dist/data/TaskProcessDetails.cjs.map +1 -1
  65. package/dist/data/TaskProcessDetails.d.ts.map +1 -1
  66. package/dist/data/TaskProcessDetails.js +2 -0
  67. package/dist/data/TaskProcessDetails.js.map +1 -1
  68. package/dist/data/TaskProgress.cjs +14 -4
  69. package/dist/data/TaskProgress.cjs.map +1 -1
  70. package/dist/data/TaskProgress.js +14 -4
  71. package/dist/data/TaskProgress.js.map +1 -1
  72. package/dist/data/TaskSnapshot.cjs.map +1 -1
  73. package/dist/data/TaskSnapshot.d.ts +1 -0
  74. package/dist/data/TaskSnapshot.d.ts.map +1 -1
  75. package/dist/data/TaskSnapshot.js.map +1 -1
  76. package/dist/data/ai/ChatWindow.cjs +18 -23
  77. package/dist/data/ai/ChatWindow.cjs.map +1 -1
  78. package/dist/data/ai/ChatWindow.d.ts +1 -1
  79. package/dist/data/ai/ChatWindow.d.ts.map +1 -1
  80. package/dist/data/ai/ChatWindow.js +19 -24
  81. package/dist/data/ai/ChatWindow.js.map +1 -1
  82. package/dist/data/ai/ChatWindow.preferences.cjs +12 -21
  83. package/dist/data/ai/ChatWindow.preferences.cjs.map +1 -1
  84. package/dist/data/ai/ChatWindow.preferences.d.ts +3 -2
  85. package/dist/data/ai/ChatWindow.preferences.d.ts.map +1 -1
  86. package/dist/data/ai/ChatWindow.preferences.js +12 -21
  87. package/dist/data/ai/ChatWindow.preferences.js.map +1 -1
  88. package/dist/data/ai/ChatWindow.tool-catalog.cjs +21 -38
  89. package/dist/data/ai/ChatWindow.tool-catalog.cjs.map +1 -1
  90. package/dist/data/ai/ChatWindow.tool-catalog.d.ts +5 -5
  91. package/dist/data/ai/ChatWindow.tool-catalog.d.ts.map +1 -1
  92. package/dist/data/ai/ChatWindow.tool-catalog.js +21 -38
  93. package/dist/data/ai/ChatWindow.tool-catalog.js.map +1 -1
  94. package/dist/data/ai/ChatWindow.types.d.ts +2 -2
  95. package/dist/data/ai/ChatWindow.types.d.ts.map +1 -1
  96. package/dist/data/ai/ChatWindowManager.cjs +2 -2
  97. package/dist/data/ai/ChatWindowManager.cjs.map +1 -1
  98. package/dist/data/ai/ChatWindowManager.js +2 -2
  99. package/dist/data/ai/ChatWindowManager.js.map +1 -1
  100. package/dist/data/ai/ChatWindowRequestBody.cjs +4 -2
  101. package/dist/data/ai/ChatWindowRequestBody.cjs.map +1 -1
  102. package/dist/data/ai/ChatWindowRequestBody.d.ts +15 -3
  103. package/dist/data/ai/ChatWindowRequestBody.d.ts.map +1 -1
  104. package/dist/data/ai/ChatWindowRequestBody.js +4 -2
  105. package/dist/data/ai/ChatWindowRequestBody.js.map +1 -1
  106. package/dist/data/ai/ToolPreferences.cjs +5 -5
  107. package/dist/data/ai/ToolPreferences.cjs.map +1 -1
  108. package/dist/data/ai/ToolPreferences.d.ts +6 -5
  109. package/dist/data/ai/ToolPreferences.d.ts.map +1 -1
  110. package/dist/data/ai/ToolPreferences.js +5 -5
  111. package/dist/data/ai/ToolPreferences.js.map +1 -1
  112. package/dist/data/ai/ToolPreferences.model.cjs +61 -37
  113. package/dist/data/ai/ToolPreferences.model.cjs.map +1 -1
  114. package/dist/data/ai/ToolPreferences.model.d.ts +32 -13
  115. package/dist/data/ai/ToolPreferences.model.d.ts.map +1 -1
  116. package/dist/data/ai/ToolPreferences.model.js +62 -38
  117. package/dist/data/ai/ToolPreferences.model.js.map +1 -1
  118. package/dist/data/ai/ToolPreferencesList.cjs +17 -20
  119. package/dist/data/ai/ToolPreferencesList.cjs.map +1 -1
  120. package/dist/data/ai/ToolPreferencesList.d.ts +16 -7
  121. package/dist/data/ai/ToolPreferencesList.d.ts.map +1 -1
  122. package/dist/data/ai/ToolPreferencesList.js +18 -21
  123. package/dist/data/ai/ToolPreferencesList.js.map +1 -1
  124. package/dist/data/ai/chat-window-context.cjs +1 -1
  125. package/dist/data/ai/chat-window-context.cjs.map +1 -1
  126. package/dist/data/ai/chat-window-context.d.ts +7 -7
  127. package/dist/data/ai/chat-window-context.d.ts.map +1 -1
  128. package/dist/data/ai/chat-window-context.js +1 -1
  129. package/dist/data/ai/chat-window-context.js.map +1 -1
  130. package/dist/data/ai/index.d.ts +3 -1
  131. package/dist/data/ai/index.d.ts.map +1 -1
  132. package/dist/data/chat/Chat.cjs +8 -4
  133. package/dist/data/chat/Chat.cjs.map +1 -1
  134. package/dist/data/chat/Chat.d.ts.map +1 -1
  135. package/dist/data/chat/Chat.js +8 -4
  136. package/dist/data/chat/Chat.js.map +1 -1
  137. package/dist/data/chat/ChatRuntimeToolbar.cjs +11 -7
  138. package/dist/data/chat/ChatRuntimeToolbar.cjs.map +1 -1
  139. package/dist/data/chat/ChatRuntimeToolbar.d.ts.map +1 -1
  140. package/dist/data/chat/ChatRuntimeToolbar.js +11 -7
  141. package/dist/data/chat/ChatRuntimeToolbar.js.map +1 -1
  142. package/dist/data/chat/ContextMeter.cjs +64 -27
  143. package/dist/data/chat/ContextMeter.cjs.map +1 -1
  144. package/dist/data/chat/ContextMeter.d.ts +11 -4
  145. package/dist/data/chat/ContextMeter.d.ts.map +1 -1
  146. package/dist/data/chat/ContextMeter.js +64 -27
  147. package/dist/data/chat/ContextMeter.js.map +1 -1
  148. package/dist/data/chat/clickyOperationsToTools.cjs +2 -1
  149. package/dist/data/chat/clickyOperationsToTools.cjs.map +1 -1
  150. package/dist/data/chat/clickyOperationsToTools.d.ts.map +1 -1
  151. package/dist/data/chat/clickyOperationsToTools.js +2 -1
  152. package/dist/data/chat/clickyOperationsToTools.js.map +1 -1
  153. package/dist/data/chat/index.d.ts +2 -1
  154. package/dist/data/chat/index.d.ts.map +1 -1
  155. package/dist/data/chat/tool-policy.cjs +132 -0
  156. package/dist/data/chat/tool-policy.cjs.map +1 -0
  157. package/dist/data/chat/tool-policy.d.ts +81 -0
  158. package/dist/data/chat/tool-policy.d.ts.map +1 -0
  159. package/dist/data/chat/tool-policy.js +132 -0
  160. package/dist/data/chat/tool-policy.js.map +1 -0
  161. package/dist/data/chat/types.cjs +20 -0
  162. package/dist/data/chat/types.cjs.map +1 -1
  163. package/dist/data/chat/types.d.ts +41 -2
  164. package/dist/data/chat/types.d.ts.map +1 -1
  165. package/dist/data/chat/types.js +20 -0
  166. package/dist/data/chat/types.js.map +1 -1
  167. package/dist/data/chat/usage-snapshot.cjs +10 -1
  168. package/dist/data/chat/usage-snapshot.cjs.map +1 -1
  169. package/dist/data/chat/usage-snapshot.d.ts.map +1 -1
  170. package/dist/data/chat/usage-snapshot.js +10 -1
  171. package/dist/data/chat/usage-snapshot.js.map +1 -1
  172. package/dist/data/debugConsoleSignal.cjs +64 -0
  173. package/dist/data/debugConsoleSignal.cjs.map +1 -0
  174. package/dist/data/debugConsoleSignal.d.ts +83 -0
  175. package/dist/data/debugConsoleSignal.d.ts.map +1 -0
  176. package/dist/data/debugConsoleSignal.js +64 -0
  177. package/dist/data/debugConsoleSignal.js.map +1 -0
  178. package/dist/data/har/HarPanel.cjs +20 -14
  179. package/dist/data/har/HarPanel.cjs.map +1 -1
  180. package/dist/data/har/HarPanel.d.ts.map +1 -1
  181. package/dist/data/har/HarPanel.js +20 -14
  182. package/dist/data/har/HarPanel.js.map +1 -1
  183. package/dist/data/har/types.d.ts +18 -0
  184. package/dist/data/har/types.d.ts.map +1 -1
  185. package/dist/data/query-browser/QueryBrowser.cjs +4 -42
  186. package/dist/data/query-browser/QueryBrowser.cjs.map +1 -1
  187. package/dist/data/query-browser/QueryBrowser.d.ts.map +1 -1
  188. package/dist/data/query-browser/QueryBrowser.js +5 -43
  189. package/dist/data/query-browser/QueryBrowser.js.map +1 -1
  190. package/dist/data/query-browser/QueryBrowser.types.cjs.map +1 -1
  191. package/dist/data/query-browser/QueryBrowser.types.d.ts +0 -1
  192. package/dist/data/query-browser/QueryBrowser.types.d.ts.map +1 -1
  193. package/dist/data/query-browser/QueryBrowser.types.js.map +1 -1
  194. package/dist/data/useDebugAction.cjs +29 -0
  195. package/dist/data/useDebugAction.cjs.map +1 -0
  196. package/dist/data/useDebugAction.d.ts +16 -0
  197. package/dist/data/useDebugAction.d.ts.map +1 -0
  198. package/dist/data/useDebugAction.js +29 -0
  199. package/dist/data/useDebugAction.js.map +1 -0
  200. package/dist/data/version-info.cjs +3 -3
  201. package/dist/data/version-info.js +3 -3
  202. package/dist/data.cjs +16 -8
  203. package/dist/data.cjs.map +1 -1
  204. package/dist/data.d.ts +3 -2
  205. package/dist/data.d.ts.map +1 -1
  206. package/dist/data.js +16 -8
  207. package/dist/devtools/DebugConsole.cjs +138 -0
  208. package/dist/devtools/DebugConsole.cjs.map +1 -0
  209. package/dist/devtools/DebugConsole.d.ts +23 -0
  210. package/dist/devtools/DebugConsole.d.ts.map +1 -0
  211. package/dist/devtools/DebugConsole.js +138 -0
  212. package/dist/devtools/DebugConsole.js.map +1 -0
  213. package/dist/devtools/DebugConsoleButton.cjs +59 -0
  214. package/dist/devtools/DebugConsoleButton.cjs.map +1 -0
  215. package/dist/devtools/DebugConsoleButton.d.ts +20 -0
  216. package/dist/devtools/DebugConsoleButton.d.ts.map +1 -0
  217. package/dist/devtools/DebugConsoleButton.js +59 -0
  218. package/dist/devtools/DebugConsoleButton.js.map +1 -0
  219. package/dist/devtools/DebugConsoleDock.cjs +112 -0
  220. package/dist/devtools/DebugConsoleDock.cjs.map +1 -0
  221. package/dist/devtools/DebugConsoleDock.d.ts +26 -0
  222. package/dist/devtools/DebugConsoleDock.d.ts.map +1 -0
  223. package/dist/devtools/DebugConsoleDock.js +112 -0
  224. package/dist/devtools/DebugConsoleDock.js.map +1 -0
  225. package/dist/devtools/ExecutionDetail.cjs +135 -0
  226. package/dist/devtools/ExecutionDetail.cjs.map +1 -0
  227. package/dist/devtools/ExecutionDetail.d.ts +19 -0
  228. package/dist/devtools/ExecutionDetail.d.ts.map +1 -0
  229. package/dist/devtools/ExecutionDetail.js +135 -0
  230. package/dist/devtools/ExecutionDetail.js.map +1 -0
  231. package/dist/devtools/debugClient.cjs +172 -0
  232. package/dist/devtools/debugClient.cjs.map +1 -0
  233. package/dist/devtools/debugClient.d.ts +98 -0
  234. package/dist/devtools/debugClient.d.ts.map +1 -0
  235. package/dist/devtools/debugClient.js +172 -0
  236. package/dist/devtools/debugClient.js.map +1 -0
  237. package/dist/devtools/debugStore.cjs +115 -0
  238. package/dist/devtools/debugStore.cjs.map +1 -0
  239. package/dist/devtools/debugStore.d.ts +83 -0
  240. package/dist/devtools/debugStore.d.ts.map +1 -0
  241. package/dist/devtools/debugStore.js +115 -0
  242. package/dist/devtools/debugStore.js.map +1 -0
  243. package/dist/devtools/dockState.cjs +51 -0
  244. package/dist/devtools/dockState.cjs.map +1 -0
  245. package/dist/devtools/dockState.d.ts +31 -0
  246. package/dist/devtools/dockState.d.ts.map +1 -0
  247. package/dist/devtools/dockState.js +51 -0
  248. package/dist/devtools/dockState.js.map +1 -0
  249. package/dist/devtools/tabs/ConsoleTab.cjs +36 -0
  250. package/dist/devtools/tabs/ConsoleTab.cjs.map +1 -0
  251. package/dist/devtools/tabs/ConsoleTab.d.ts +19 -0
  252. package/dist/devtools/tabs/ConsoleTab.d.ts.map +1 -0
  253. package/dist/devtools/tabs/ConsoleTab.js +36 -0
  254. package/dist/devtools/tabs/ConsoleTab.js.map +1 -0
  255. package/dist/devtools/tabs/InspectionCaches.cjs +150 -0
  256. package/dist/devtools/tabs/InspectionCaches.cjs.map +1 -0
  257. package/dist/devtools/tabs/InspectionCaches.d.ts +23 -0
  258. package/dist/devtools/tabs/InspectionCaches.d.ts.map +1 -0
  259. package/dist/devtools/tabs/InspectionCaches.js +150 -0
  260. package/dist/devtools/tabs/InspectionCaches.js.map +1 -0
  261. package/dist/devtools/tabs/InspectionTab.cjs +316 -0
  262. package/dist/devtools/tabs/InspectionTab.cjs.map +1 -0
  263. package/dist/devtools/tabs/InspectionTab.d.ts +27 -0
  264. package/dist/devtools/tabs/InspectionTab.d.ts.map +1 -0
  265. package/dist/devtools/tabs/InspectionTab.js +316 -0
  266. package/dist/devtools/tabs/InspectionTab.js.map +1 -0
  267. package/dist/devtools/tabs/NetworkTab.cjs +91 -0
  268. package/dist/devtools/tabs/NetworkTab.cjs.map +1 -0
  269. package/dist/devtools/tabs/NetworkTab.d.ts +20 -0
  270. package/dist/devtools/tabs/NetworkTab.d.ts.map +1 -0
  271. package/dist/devtools/tabs/NetworkTab.js +91 -0
  272. package/dist/devtools/tabs/NetworkTab.js.map +1 -0
  273. package/dist/devtools/tabs/QueriesTab.cjs +85 -0
  274. package/dist/devtools/tabs/QueriesTab.cjs.map +1 -0
  275. package/dist/devtools/tabs/QueriesTab.d.ts +24 -0
  276. package/dist/devtools/tabs/QueriesTab.d.ts.map +1 -0
  277. package/dist/devtools/tabs/QueriesTab.js +85 -0
  278. package/dist/devtools/tabs/QueriesTab.js.map +1 -0
  279. package/dist/devtools/types.cjs +26 -0
  280. package/dist/devtools/types.cjs.map +1 -0
  281. package/dist/devtools/types.d.ts +235 -0
  282. package/dist/devtools/types.d.ts.map +1 -0
  283. package/dist/devtools/types.js +26 -0
  284. package/dist/devtools/types.js.map +1 -0
  285. package/dist/devtools/useDebugStream.cjs +46 -0
  286. package/dist/devtools/useDebugStream.cjs.map +1 -0
  287. package/dist/devtools/useDebugStream.d.ts +23 -0
  288. package/dist/devtools/useDebugStream.d.ts.map +1 -0
  289. package/dist/devtools/useDebugStream.js +46 -0
  290. package/dist/devtools/useDebugStream.js.map +1 -0
  291. package/dist/devtools.cjs +51 -0
  292. package/dist/devtools.cjs.map +1 -0
  293. package/dist/devtools.d.ts +37 -0
  294. package/dist/devtools.d.ts.map +1 -0
  295. package/dist/devtools.js +51 -0
  296. package/dist/devtools.js.map +1 -0
  297. package/dist/icons/components/UiOpenScad.cjs +10 -0
  298. package/dist/icons/components/UiOpenScad.cjs.map +1 -0
  299. package/dist/icons/components/UiOpenScad.d.ts +9 -0
  300. package/dist/icons/components/UiOpenScad.d.ts.map +1 -0
  301. package/dist/icons/components/UiOpenScad.js +10 -0
  302. package/dist/icons/components/UiOpenScad.js.map +1 -0
  303. package/dist/icons/index.d.ts +1 -0
  304. package/dist/icons/index.d.ts.map +1 -1
  305. package/dist/icons/registry.cjs +2 -0
  306. package/dist/icons/registry.cjs.map +1 -1
  307. package/dist/icons/registry.d.ts.map +1 -1
  308. package/dist/icons/registry.js +2 -0
  309. package/dist/icons/registry.js.map +1 -1
  310. package/dist/icons.cjs +2 -0
  311. package/dist/icons.cjs.map +1 -1
  312. package/dist/icons.js +2 -0
  313. package/dist/icons.js.map +1 -1
  314. package/dist/index.cjs +20 -8
  315. package/dist/index.cjs.map +1 -1
  316. package/dist/index.js +20 -8
  317. package/dist/index.js.map +1 -1
  318. package/dist/layout/AppShell.cjs +15 -10
  319. package/dist/layout/AppShell.cjs.map +1 -1
  320. package/dist/layout/AppShell.d.ts +11 -0
  321. package/dist/layout/AppShell.d.ts.map +1 -1
  322. package/dist/layout/AppShell.js +15 -10
  323. package/dist/layout/AppShell.js.map +1 -1
  324. package/dist/layout/AppShell.nav.cjs +170 -49
  325. package/dist/layout/AppShell.nav.cjs.map +1 -1
  326. package/dist/layout/AppShell.nav.d.ts.map +1 -1
  327. package/dist/layout/AppShell.nav.js +170 -49
  328. package/dist/layout/AppShell.nav.js.map +1 -1
  329. package/dist/overlay/CellActions.cjs +18 -124
  330. package/dist/overlay/CellActions.cjs.map +1 -1
  331. package/dist/overlay/CellActions.d.ts +1 -1
  332. package/dist/overlay/CellActions.d.ts.map +1 -1
  333. package/dist/overlay/CellActions.js +18 -124
  334. package/dist/overlay/CellActions.js.map +1 -1
  335. package/dist/overlay/ContextMenu.cjs +144 -0
  336. package/dist/overlay/ContextMenu.cjs.map +1 -0
  337. package/dist/overlay/ContextMenu.d.ts +8 -0
  338. package/dist/overlay/ContextMenu.d.ts.map +1 -0
  339. package/dist/overlay/ContextMenu.js +144 -0
  340. package/dist/overlay/ContextMenu.js.map +1 -0
  341. package/dist/profiles/connections/connectionBrowserModel.cjs +14 -65
  342. package/dist/profiles/connections/connectionBrowserModel.cjs.map +1 -1
  343. package/dist/profiles/connections/connectionBrowserModel.d.ts +35 -35
  344. package/dist/profiles/connections/connectionBrowserModel.d.ts.map +1 -1
  345. package/dist/profiles/connections/connectionBrowserModel.js +14 -65
  346. package/dist/profiles/connections/connectionBrowserModel.js.map +1 -1
  347. package/dist/profiles/connections/connectionQueryWorkspace.cjs +29 -9
  348. package/dist/profiles/connections/connectionQueryWorkspace.cjs.map +1 -1
  349. package/dist/profiles/connections/connectionQueryWorkspace.d.ts +3 -2
  350. package/dist/profiles/connections/connectionQueryWorkspace.d.ts.map +1 -1
  351. package/dist/profiles/connections/connectionQueryWorkspace.js +30 -10
  352. package/dist/profiles/connections/connectionQueryWorkspace.js.map +1 -1
  353. package/dist/profiles/connections/connectionQueryWorkspaceModel.cjs +15 -0
  354. package/dist/profiles/connections/connectionQueryWorkspaceModel.cjs.map +1 -1
  355. package/dist/profiles/connections/connectionQueryWorkspaceModel.d.ts +22 -1
  356. package/dist/profiles/connections/connectionQueryWorkspaceModel.d.ts.map +1 -1
  357. package/dist/profiles/connections/connectionQueryWorkspaceModel.js +15 -0
  358. package/dist/profiles/connections/connectionQueryWorkspaceModel.js.map +1 -1
  359. package/dist/profiles/connections/index.d.ts +1 -0
  360. package/dist/profiles/connections/index.d.ts.map +1 -1
  361. package/dist/profiles/connections/inspectionStatus.cjs +44 -0
  362. package/dist/profiles/connections/inspectionStatus.cjs.map +1 -0
  363. package/dist/profiles/connections/inspectionStatus.d.ts +5 -0
  364. package/dist/profiles/connections/inspectionStatus.d.ts.map +1 -0
  365. package/dist/profiles/connections/inspectionStatus.js +44 -0
  366. package/dist/profiles/connections/inspectionStatus.js.map +1 -0
  367. package/dist/profiles/connections/useInspection.cjs +123 -0
  368. package/dist/profiles/connections/useInspection.cjs.map +1 -0
  369. package/dist/profiles/connections/useInspection.d.ts +35 -0
  370. package/dist/profiles/connections/useInspection.d.ts.map +1 -0
  371. package/dist/profiles/connections/useInspection.js +123 -0
  372. package/dist/profiles/connections/useInspection.js.map +1 -0
  373. package/dist/profiles/editor/profileBuilderWorkspace.cjs +55 -23
  374. package/dist/profiles/editor/profileBuilderWorkspace.cjs.map +1 -1
  375. package/dist/profiles/editor/profileBuilderWorkspace.d.ts.map +1 -1
  376. package/dist/profiles/editor/profileBuilderWorkspace.js +56 -24
  377. package/dist/profiles/editor/profileBuilderWorkspace.js.map +1 -1
  378. package/dist/profiles/elasticsearch/esQueryBuilder.cjs +12 -3
  379. package/dist/profiles/elasticsearch/esQueryBuilder.cjs.map +1 -1
  380. package/dist/profiles/elasticsearch/esQueryBuilder.d.ts +2 -2
  381. package/dist/profiles/elasticsearch/esQueryBuilder.d.ts.map +1 -1
  382. package/dist/profiles/elasticsearch/esQueryBuilder.js +12 -3
  383. package/dist/profiles/elasticsearch/esQueryBuilder.js.map +1 -1
  384. package/dist/profiles/fields/profileFieldEditor.cjs +137 -22
  385. package/dist/profiles/fields/profileFieldEditor.cjs.map +1 -1
  386. package/dist/profiles/fields/profileFieldEditor.d.ts.map +1 -1
  387. package/dist/profiles/fields/profileFieldEditor.js +137 -22
  388. package/dist/profiles/fields/profileFieldEditor.js.map +1 -1
  389. package/dist/profiles/fields/profileFieldFilterEditor.cjs +171 -82
  390. package/dist/profiles/fields/profileFieldFilterEditor.cjs.map +1 -1
  391. package/dist/profiles/fields/profileFieldFilterEditor.d.ts +0 -9
  392. package/dist/profiles/fields/profileFieldFilterEditor.d.ts.map +1 -1
  393. package/dist/profiles/fields/profileFieldFilterEditor.js +174 -85
  394. package/dist/profiles/fields/profileFieldFilterEditor.js.map +1 -1
  395. package/dist/profiles/fields/profileFieldIcons.cjs +6 -3
  396. package/dist/profiles/fields/profileFieldIcons.cjs.map +1 -1
  397. package/dist/profiles/fields/profileFieldIcons.js +6 -3
  398. package/dist/profiles/fields/profileFieldIcons.js.map +1 -1
  399. package/dist/profiles/query/profileSampleFilterLookup.cjs +34 -0
  400. package/dist/profiles/query/profileSampleFilterLookup.cjs.map +1 -0
  401. package/dist/profiles/query/profileSampleFilterLookup.d.ts +12 -0
  402. package/dist/profiles/query/profileSampleFilterLookup.d.ts.map +1 -0
  403. package/dist/profiles/query/profileSampleFilterLookup.js +34 -0
  404. package/dist/profiles/query/profileSampleFilterLookup.js.map +1 -0
  405. package/dist/profiles/query/profileSamplePayload.cjs +6 -4
  406. package/dist/profiles/query/profileSamplePayload.cjs.map +1 -1
  407. package/dist/profiles/query/profileSamplePayload.d.ts +11 -4
  408. package/dist/profiles/query/profileSamplePayload.d.ts.map +1 -1
  409. package/dist/profiles/query/profileSamplePayload.js +6 -4
  410. package/dist/profiles/query/profileSamplePayload.js.map +1 -1
  411. package/dist/profiles/query/profileSampleResult.cjs +26 -0
  412. package/dist/profiles/query/profileSampleResult.cjs.map +1 -0
  413. package/dist/profiles/query/profileSampleResult.d.ts +11 -0
  414. package/dist/profiles/query/profileSampleResult.d.ts.map +1 -0
  415. package/dist/profiles/query/profileSampleResult.js +26 -0
  416. package/dist/profiles/query/profileSampleResult.js.map +1 -0
  417. package/dist/profiles/query/queryTargetPicker.cjs +5 -3
  418. package/dist/profiles/query/queryTargetPicker.cjs.map +1 -1
  419. package/dist/profiles/query/queryTargetPicker.d.ts +3 -2
  420. package/dist/profiles/query/queryTargetPicker.d.ts.map +1 -1
  421. package/dist/profiles/query/queryTargetPicker.js +5 -3
  422. package/dist/profiles/query/queryTargetPicker.js.map +1 -1
  423. package/dist/profiles/wizard/profileWizard.cjs +14 -5
  424. package/dist/profiles/wizard/profileWizard.cjs.map +1 -1
  425. package/dist/profiles/wizard/profileWizard.d.ts.map +1 -1
  426. package/dist/profiles/wizard/profileWizard.js +15 -6
  427. package/dist/profiles/wizard/profileWizard.js.map +1 -1
  428. package/dist/profiles/wizard/profileWizardModel.cjs +35 -6
  429. package/dist/profiles/wizard/profileWizardModel.cjs.map +1 -1
  430. package/dist/profiles/wizard/profileWizardModel.d.ts +29 -4
  431. package/dist/profiles/wizard/profileWizardModel.d.ts.map +1 -1
  432. package/dist/profiles/wizard/profileWizardModel.js +35 -6
  433. package/dist/profiles/wizard/profileWizardModel.js.map +1 -1
  434. package/dist/profiles/wizard/profileWizardQueryStep.cjs +44 -11
  435. package/dist/profiles/wizard/profileWizardQueryStep.cjs.map +1 -1
  436. package/dist/profiles/wizard/profileWizardQueryStep.d.ts.map +1 -1
  437. package/dist/profiles/wizard/profileWizardQueryStep.js +46 -13
  438. package/dist/profiles/wizard/profileWizardQueryStep.js.map +1 -1
  439. package/dist/profiles/wizard/profileWizardSteps.cjs +33 -2
  440. package/dist/profiles/wizard/profileWizardSteps.cjs.map +1 -1
  441. package/dist/profiles/wizard/profileWizardSteps.d.ts +11 -2
  442. package/dist/profiles/wizard/profileWizardSteps.d.ts.map +1 -1
  443. package/dist/profiles/wizard/profileWizardSteps.js +33 -2
  444. package/dist/profiles/wizard/profileWizardSteps.js.map +1 -1
  445. package/dist/profiles.cjs +8 -2
  446. package/dist/profiles.cjs.map +1 -1
  447. package/dist/profiles.js +10 -4
  448. package/dist/profiles.js.map +1 -1
  449. package/dist/rpc/FilterForm.cjs +21 -237
  450. package/dist/rpc/FilterForm.cjs.map +1 -1
  451. package/dist/rpc/FilterForm.d.ts +3 -1
  452. package/dist/rpc/FilterForm.d.ts.map +1 -1
  453. package/dist/rpc/FilterForm.js +21 -237
  454. package/dist/rpc/FilterForm.js.map +1 -1
  455. package/dist/rpc/FilterFormFields.cjs +240 -0
  456. package/dist/rpc/FilterFormFields.cjs.map +1 -0
  457. package/dist/rpc/FilterFormFields.d.ts +12 -0
  458. package/dist/rpc/FilterFormFields.d.ts.map +1 -0
  459. package/dist/rpc/FilterFormFields.js +240 -0
  460. package/dist/rpc/FilterFormFields.js.map +1 -0
  461. package/dist/rpc/router.cjs +3 -2
  462. package/dist/rpc/router.cjs.map +1 -1
  463. package/dist/rpc/router.d.ts.map +1 -1
  464. package/dist/rpc/router.js +3 -2
  465. package/dist/rpc/router.js.map +1 -1
  466. package/dist/rpc/types.cjs.map +1 -1
  467. package/dist/rpc/types.d.ts +3 -1
  468. package/dist/rpc/types.d.ts.map +1 -1
  469. package/dist/rpc/types.js.map +1 -1
  470. package/dist/styles.css +1 -1
  471. package/package.json +6 -1
  472. package/dist/data/query-info/QueryInfoDialog.cjs +0 -106
  473. package/dist/data/query-info/QueryInfoDialog.cjs.map +0 -1
  474. package/dist/data/query-info/QueryInfoDialog.d.ts +0 -16
  475. package/dist/data/query-info/QueryInfoDialog.d.ts.map +0 -1
  476. package/dist/data/query-info/QueryInfoDialog.js +0 -106
  477. package/dist/data/query-info/QueryInfoDialog.js.map +0 -1
  478. package/dist/data/query-info/index.d.ts +0 -4
  479. package/dist/data/query-info/index.d.ts.map +0 -1
  480. package/dist/data/query-info/queryInfo.cjs +0 -42
  481. package/dist/data/query-info/queryInfo.cjs.map +0 -1
  482. package/dist/data/query-info/queryInfo.d.ts +0 -45
  483. package/dist/data/query-info/queryInfo.d.ts.map +0 -1
  484. package/dist/data/query-info/queryInfo.js +0 -42
  485. package/dist/data/query-info/queryInfo.js.map +0 -1
  486. package/dist/data/query-info/useQueryInfo.cjs +0 -48
  487. package/dist/data/query-info/useQueryInfo.cjs.map +0 -1
  488. package/dist/data/query-info/useQueryInfo.d.ts +0 -26
  489. package/dist/data/query-info/useQueryInfo.d.ts.map +0 -1
  490. package/dist/data/query-info/useQueryInfo.js +0 -48
  491. package/dist/data/query-info/useQueryInfo.js.map +0 -1
@@ -1,148 +1,42 @@
1
- import { jsx, jsxs } from "react/jsx-runtime";
2
- import { FloatingTree, useFloatingTree, useFloatingNodeId, useFloating, autoUpdate, offset, flip, shift, useDismiss, useRole, useListNavigation, useInteractions, FloatingNode, FloatingPortal, FloatingFocusManager, FloatingList } from "@floating-ui/react";
3
- import { useState, useRef, useCallback, useEffect } from "react";
1
+ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
+ import { useEffect } from "react";
4
3
  import { Icon } from "../data/Icon.js";
5
4
  import { cn } from "../lib/utils.js";
6
- import { MenuItemList } from "./DropdownMenuSubmenu.js";
7
- import { MENU_POPOVER_CLASS, MenuContext } from "./dropdownMenuContext.js";
8
- import { useFloatingZIndex, useEscapeLayer } from "./modalStack.js";
9
- function pointReference(x, y, contextElement) {
10
- return {
11
- contextElement,
12
- getBoundingClientRect: () => ({
13
- x,
14
- y,
15
- top: y,
16
- left: x,
17
- right: x,
18
- bottom: y,
19
- width: 0,
20
- height: 0,
21
- toJSON: () => ({})
22
- })
23
- };
24
- }
25
- function CellActionsRoot({
5
+ import { ContextMenu } from "./ContextMenu.js";
6
+ function CellActions({
26
7
  contextTarget,
27
8
  menuLabel,
28
9
  menuItems,
29
10
  children,
30
11
  className
31
12
  }) {
32
- const [open, setOpen] = useState(false);
33
- const [activeIndex, setActiveIndex] = useState(null);
34
- const returnFocusRef = useRef(null);
35
- const elementsRef = useRef([]);
36
- const floatingZ = useFloatingZIndex();
37
- const tree = useFloatingTree();
38
- const nodeId = useFloatingNodeId();
39
- const closeMenu = useCallback(() => {
40
- setOpen(false);
41
- queueMicrotask(() => {
42
- var _a;
43
- return (_a = returnFocusRef.current) == null ? void 0 : _a.focus({ preventScroll: true });
44
- });
45
- }, []);
46
- const { refs, floatingStyles, context } = useFloating({
47
- ...nodeId ? { nodeId } : {},
48
- open,
49
- onOpenChange: (next) => next ? setOpen(true) : closeMenu(),
50
- placement: "right-start",
51
- middleware: [offset(4), flip({ padding: 8 }), shift({ padding: 8 })],
52
- whileElementsMounted: autoUpdate
53
- });
54
- const dismiss = useDismiss(context, { escapeKey: false });
55
- const role = useRole(context, { role: "menu" });
56
- const listNavigation = useListNavigation(context, {
57
- listRef: elementsRef,
58
- activeIndex,
59
- onNavigate: setActiveIndex,
60
- loop: true
61
- });
62
- const { getFloatingProps, getItemProps } = useInteractions([
63
- dismiss,
64
- role,
65
- listNavigation
66
- ]);
67
- const openAt = useCallback(
68
- (x, y) => {
69
- if (!contextTarget || menuItems.length === 0) return;
70
- const active = document.activeElement;
71
- returnFocusRef.current = active instanceof HTMLElement ? active : contextTarget;
72
- refs.setPositionReference(pointReference(x, y, contextTarget));
73
- setActiveIndex(null);
74
- setOpen(true);
75
- },
76
- [contextTarget, menuItems.length, refs]
77
- );
78
13
  useEffect(() => {
79
- if (!contextTarget || menuItems.length === 0) return;
14
+ if (!contextTarget) return;
80
15
  contextTarget.classList.add("group/cell-actions");
81
- const onContextMenu = (event) => {
82
- event.preventDefault();
83
- event.stopPropagation();
84
- openAt(event.clientX, event.clientY);
85
- };
86
- const onKeyDown = (event) => {
87
- if (event.key !== "ContextMenu" && !(event.key === "F10" && event.shiftKey)) return;
88
- event.preventDefault();
89
- event.stopPropagation();
90
- const rect = contextTarget.getBoundingClientRect();
91
- openAt(rect.left + 8, rect.top + Math.min(rect.height, 24));
92
- };
93
- contextTarget.addEventListener("contextmenu", onContextMenu);
94
- contextTarget.addEventListener("keydown", onKeyDown);
95
- return () => {
96
- contextTarget.classList.remove("group/cell-actions");
97
- contextTarget.removeEventListener("contextmenu", onContextMenu);
98
- contextTarget.removeEventListener("keydown", onKeyDown);
99
- };
100
- }, [contextTarget, menuItems.length, openAt]);
101
- useEffect(() => {
102
- if (!tree) return;
103
- tree.events.on("click", closeMenu);
104
- return () => tree.events.off("click", closeMenu);
105
- }, [closeMenu, tree]);
106
- useEscapeLayer(open, closeMenu);
107
- return /* @__PURE__ */ jsxs(FloatingNode, { id: nodeId, children: [
16
+ return () => contextTarget.classList.remove("group/cell-actions");
17
+ }, [contextTarget]);
18
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
108
19
  /* @__PURE__ */ jsx(
109
20
  "span",
110
21
  {
111
- className: cn("ms-1 inline-flex items-center gap-0.5 align-middle", className),
22
+ className: cn(
23
+ "ms-1 inline-flex items-center gap-0.5 align-middle",
24
+ className
25
+ ),
112
26
  contentEditable: false,
113
27
  children
114
28
  }
115
29
  ),
116
- open && /* @__PURE__ */ jsx(FloatingPortal, { children: /* @__PURE__ */ jsx(FloatingFocusManager, { context, modal: false, returnFocus: false, children: /* @__PURE__ */ jsx(
117
- "div",
30
+ /* @__PURE__ */ jsx(
31
+ ContextMenu,
118
32
  {
119
- ref: refs.setFloating,
120
- role: "menu",
121
- "aria-label": menuLabel,
122
- style: { ...floatingStyles, zIndex: floatingZ },
123
- className: MENU_POPOVER_CLASS,
124
- ...getFloatingProps(),
125
- children: /* @__PURE__ */ jsx(
126
- MenuContext.Provider,
127
- {
128
- value: {
129
- getItemProps,
130
- activeIndex,
131
- setActiveIndex,
132
- setHasFocusInside: () => {
133
- },
134
- isOpen: open
135
- },
136
- children: /* @__PURE__ */ jsx(FloatingList, { elementsRef, children: /* @__PURE__ */ jsx(MenuItemList, { items: menuItems }) })
137
- }
138
- )
33
+ contextTarget,
34
+ menuLabel,
35
+ menuItems
139
36
  }
140
- ) }) })
37
+ )
141
38
  ] });
142
39
  }
143
- function CellActions(props) {
144
- return /* @__PURE__ */ jsx(FloatingTree, { children: /* @__PURE__ */ jsx(CellActionsRoot, { ...props }) });
145
- }
146
40
  function CellActionButton({
147
41
  label,
148
42
  icon,
@@ -1 +1 @@
1
- {"version":3,"file":"CellActions.js","sources":["../../src/overlay/CellActions.tsx"],"sourcesContent":["import {\n autoUpdate,\n flip,\n FloatingFocusManager,\n FloatingList,\n FloatingNode,\n FloatingPortal,\n FloatingTree,\n offset,\n shift,\n useDismiss,\n useFloating,\n useFloatingNodeId,\n useFloatingTree,\n useInteractions,\n useListNavigation,\n useRole,\n type VirtualElement,\n} from \"@floating-ui/react\";\nimport {\n useCallback,\n useEffect,\n useRef,\n useState,\n type ButtonHTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { Icon, type StaticIconComponent } from \"../data/Icon\";\nimport { cn } from \"../lib/utils\";\nimport type { DropdownMenuItem } from \"./DropdownMenu\";\nimport { MenuItemList } from \"./DropdownMenuSubmenu\";\nimport { MENU_POPOVER_CLASS, MenuContext } from \"./dropdownMenuContext\";\nimport { useEscapeLayer, useFloatingZIndex } from \"./modalStack\";\n\nexport type CellActionsProps = {\n contextTarget: HTMLElement | null;\n menuLabel: string;\n menuItems: DropdownMenuItem[];\n children: ReactNode;\n className?: string;\n};\n\nexport type CellActionButtonProps = Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"children\" | \"onClick\"\n> & {\n label: string;\n icon: StaticIconComponent;\n onSelect: () => void;\n};\n\nfunction pointReference(\n x: number,\n y: number,\n contextElement: HTMLElement,\n): VirtualElement {\n return {\n contextElement,\n getBoundingClientRect: () => ({\n x,\n y,\n top: y,\n left: x,\n right: x,\n bottom: y,\n width: 0,\n height: 0,\n toJSON: () => ({}),\n }),\n };\n}\n\nfunction CellActionsRoot({\n contextTarget,\n menuLabel,\n menuItems,\n children,\n className,\n}: CellActionsProps) {\n const [open, setOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState<number | null>(null);\n const returnFocusRef = useRef<HTMLElement | null>(null);\n const elementsRef = useRef<Array<HTMLElement | null>>([]);\n const floatingZ = useFloatingZIndex();\n const tree = useFloatingTree();\n const nodeId = useFloatingNodeId();\n\n const closeMenu = useCallback(() => {\n setOpen(false);\n queueMicrotask(() => returnFocusRef.current?.focus({ preventScroll: true }));\n }, []);\n\n const { refs, floatingStyles, context } = useFloating<HTMLDivElement>({\n ...(nodeId ? { nodeId } : {}),\n open,\n onOpenChange: (next) => (next ? setOpen(true) : closeMenu()),\n placement: \"right-start\",\n middleware: [offset(4), flip({ padding: 8 }), shift({ padding: 8 })],\n whileElementsMounted: autoUpdate,\n });\n\n const dismiss = useDismiss(context, { escapeKey: false });\n const role = useRole(context, { role: \"menu\" });\n const listNavigation = useListNavigation(context, {\n listRef: elementsRef,\n activeIndex,\n onNavigate: setActiveIndex,\n loop: true,\n });\n const { getFloatingProps, getItemProps } = useInteractions([\n dismiss,\n role,\n listNavigation,\n ]);\n\n const openAt = useCallback(\n (x: number, y: number) => {\n if (!contextTarget || menuItems.length === 0) return;\n const active = document.activeElement;\n returnFocusRef.current = active instanceof HTMLElement ? active : contextTarget;\n refs.setPositionReference(pointReference(x, y, contextTarget));\n setActiveIndex(null);\n setOpen(true);\n },\n [contextTarget, menuItems.length, refs],\n );\n\n useEffect(() => {\n if (!contextTarget || menuItems.length === 0) return;\n contextTarget.classList.add(\"group/cell-actions\");\n\n const onContextMenu = (event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n openAt(event.clientX, event.clientY);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"ContextMenu\" && !(event.key === \"F10\" && event.shiftKey)) return;\n event.preventDefault();\n event.stopPropagation();\n const rect = contextTarget.getBoundingClientRect();\n openAt(rect.left + 8, rect.top + Math.min(rect.height, 24));\n };\n\n contextTarget.addEventListener(\"contextmenu\", onContextMenu);\n contextTarget.addEventListener(\"keydown\", onKeyDown);\n return () => {\n contextTarget.classList.remove(\"group/cell-actions\");\n contextTarget.removeEventListener(\"contextmenu\", onContextMenu);\n contextTarget.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [contextTarget, menuItems.length, openAt]);\n\n useEffect(() => {\n if (!tree) return;\n tree.events.on(\"click\", closeMenu);\n return () => tree.events.off(\"click\", closeMenu);\n }, [closeMenu, tree]);\n\n useEscapeLayer(open, closeMenu);\n\n return (\n <FloatingNode id={nodeId}>\n <span\n className={cn(\"ms-1 inline-flex items-center gap-0.5 align-middle\", className)}\n contentEditable={false}\n >\n {children}\n </span>\n {open && (\n <FloatingPortal>\n <FloatingFocusManager context={context} modal={false} returnFocus={false}>\n <div\n ref={refs.setFloating}\n role=\"menu\"\n aria-label={menuLabel}\n style={{ ...floatingStyles, zIndex: floatingZ }}\n className={MENU_POPOVER_CLASS}\n {...getFloatingProps()}\n >\n <MenuContext.Provider\n value={{\n getItemProps,\n activeIndex,\n setActiveIndex,\n setHasFocusInside: () => {},\n isOpen: open,\n }}\n >\n <FloatingList elementsRef={elementsRef}>\n <MenuItemList items={menuItems} />\n </FloatingList>\n </MenuContext.Provider>\n </div>\n </FloatingFocusManager>\n </FloatingPortal>\n )}\n </FloatingNode>\n );\n}\n\nexport function CellActions(props: CellActionsProps) {\n return (\n <FloatingTree>\n <CellActionsRoot {...props} />\n </FloatingTree>\n );\n}\n\nexport function CellActionButton({\n label,\n icon,\n onSelect,\n className,\n title = label,\n onMouseDown,\n ...props\n}: CellActionButtonProps) {\n return (\n <button\n {...props}\n type=\"button\"\n title={title}\n aria-label={label}\n className={cn(\n \"inline-flex size-5 items-center justify-center rounded-full p-1 text-muted-foreground opacity-70 transition-colors transition-opacity hover:bg-primary/10 hover:text-primary hover:opacity-100 focus-visible:bg-primary/10 focus-visible:text-primary focus-visible:opacity-100 focus-visible:outline-none group-hover/cell-actions:opacity-95\",\n className,\n )}\n onMouseDown={(event) => {\n event.preventDefault();\n onMouseDown?.(event);\n }}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n onSelect();\n }}\n >\n <Icon icon={icon} className=\"text-sm\" />\n </button>\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAmDA,SAAS,eACP,GACA,GACA,gBACgB;AAChB,SAAO;AAAA,IACL;AAAA,IACA,uBAAuB,OAAO;AAAA,MAC5B;AAAA,MACA;AAAA,MACA,KAAK;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,QAAQ,OAAO,CAAA;AAAA,IAAC;AAAA,EAClB;AAEJ;AAEA,SAAS,gBAAgB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAqB;AACnB,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,KAAK;AACtC,QAAM,CAAC,aAAa,cAAc,IAAI,SAAwB,IAAI;AAClE,QAAM,iBAAiB,OAA2B,IAAI;AACtD,QAAM,cAAc,OAAkC,EAAE;AACxD,QAAM,YAAY,kBAAA;AAClB,QAAM,OAAO,gBAAA;AACb,QAAM,SAAS,kBAAA;AAEf,QAAM,YAAY,YAAY,MAAM;AAClC,YAAQ,KAAK;AACb,mBAAe,MAAA;;AAAM,kCAAe,YAAf,mBAAwB,MAAM,EAAE,eAAe,KAAA;AAAA,KAAO;AAAA,EAC7E,GAAG,CAAA,CAAE;AAEL,QAAM,EAAE,MAAM,gBAAgB,QAAA,IAAY,YAA4B;AAAA,IACpE,GAAI,SAAS,EAAE,OAAA,IAAW,CAAA;AAAA,IAC1B;AAAA,IACA,cAAc,CAAC,SAAU,OAAO,QAAQ,IAAI,IAAI,UAAA;AAAA,IAChD,WAAW;AAAA,IACX,YAAY,CAAC,OAAO,CAAC,GAAG,KAAK,EAAE,SAAS,EAAA,CAAG,GAAG,MAAM,EAAE,SAAS,EAAA,CAAG,CAAC;AAAA,IACnE,sBAAsB;AAAA,EAAA,CACvB;AAED,QAAM,UAAU,WAAW,SAAS,EAAE,WAAW,OAAO;AACxD,QAAM,OAAO,QAAQ,SAAS,EAAE,MAAM,QAAQ;AAC9C,QAAM,iBAAiB,kBAAkB,SAAS;AAAA,IAChD,SAAS;AAAA,IACT;AAAA,IACA,YAAY;AAAA,IACZ,MAAM;AAAA,EAAA,CACP;AACD,QAAM,EAAE,kBAAkB,aAAA,IAAiB,gBAAgB;AAAA,IACzD;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAED,QAAM,SAAS;AAAA,IACb,CAAC,GAAW,MAAc;AACxB,UAAI,CAAC,iBAAiB,UAAU,WAAW,EAAG;AAC9C,YAAM,SAAS,SAAS;AACxB,qBAAe,UAAU,kBAAkB,cAAc,SAAS;AAClE,WAAK,qBAAqB,eAAe,GAAG,GAAG,aAAa,CAAC;AAC7D,qBAAe,IAAI;AACnB,cAAQ,IAAI;AAAA,IACd;AAAA,IACA,CAAC,eAAe,UAAU,QAAQ,IAAI;AAAA,EAAA;AAGxC,YAAU,MAAM;AACd,QAAI,CAAC,iBAAiB,UAAU,WAAW,EAAG;AAC9C,kBAAc,UAAU,IAAI,oBAAoB;AAEhD,UAAM,gBAAgB,CAAC,UAAsB;AAC3C,YAAM,eAAA;AACN,YAAM,gBAAA;AACN,aAAO,MAAM,SAAS,MAAM,OAAO;AAAA,IACrC;AACA,UAAM,YAAY,CAAC,UAAyB;AAC1C,UAAI,MAAM,QAAQ,iBAAiB,EAAE,MAAM,QAAQ,SAAS,MAAM,UAAW;AAC7E,YAAM,eAAA;AACN,YAAM,gBAAA;AACN,YAAM,OAAO,cAAc,sBAAA;AAC3B,aAAO,KAAK,OAAO,GAAG,KAAK,MAAM,KAAK,IAAI,KAAK,QAAQ,EAAE,CAAC;AAAA,IAC5D;AAEA,kBAAc,iBAAiB,eAAe,aAAa;AAC3D,kBAAc,iBAAiB,WAAW,SAAS;AACnD,WAAO,MAAM;AACX,oBAAc,UAAU,OAAO,oBAAoB;AACnD,oBAAc,oBAAoB,eAAe,aAAa;AAC9D,oBAAc,oBAAoB,WAAW,SAAS;AAAA,IACxD;AAAA,EACF,GAAG,CAAC,eAAe,UAAU,QAAQ,MAAM,CAAC;AAE5C,YAAU,MAAM;AACd,QAAI,CAAC,KAAM;AACX,SAAK,OAAO,GAAG,SAAS,SAAS;AACjC,WAAO,MAAM,KAAK,OAAO,IAAI,SAAS,SAAS;AAAA,EACjD,GAAG,CAAC,WAAW,IAAI,CAAC;AAEpB,iBAAe,MAAM,SAAS;AAE9B,SACE,qBAAC,cAAA,EAAa,IAAI,QAChB,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,GAAG,sDAAsD,SAAS;AAAA,QAC7E,iBAAiB;AAAA,QAEhB;AAAA,MAAA;AAAA,IAAA;AAAA,IAEF,4BACE,gBAAA,EACC,UAAA,oBAAC,wBAAqB,SAAkB,OAAO,OAAO,aAAa,OACjE,UAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAK,KAAK;AAAA,QACV,MAAK;AAAA,QACL,cAAY;AAAA,QACZ,OAAO,EAAE,GAAG,gBAAgB,QAAQ,UAAA;AAAA,QACpC,WAAW;AAAA,QACV,GAAG,iBAAA;AAAA,QAEJ,UAAA;AAAA,UAAC,YAAY;AAAA,UAAZ;AAAA,YACC,OAAO;AAAA,cACL;AAAA,cACA;AAAA,cACA;AAAA,cACA,mBAAmB,MAAM;AAAA,cAAC;AAAA,cAC1B,QAAQ;AAAA,YAAA;AAAA,YAGV,8BAAC,cAAA,EAAa,aACZ,8BAAC,cAAA,EAAa,OAAO,WAAW,EAAA,CAClC;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA,GAEJ,EAAA,CACF;AAAA,EAAA,GAEJ;AAEJ;AAEO,SAAS,YAAY,OAAyB;AACnD,6BACG,cAAA,EACC,UAAA,oBAAC,iBAAA,EAAiB,GAAG,OAAO,GAC9B;AAEJ;AAEO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,GAAG;AACL,GAA0B;AACxB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACJ,MAAK;AAAA,MACL;AAAA,MACA,cAAY;AAAA,MACZ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAEF,aAAa,CAAC,UAAU;AACtB,cAAM,eAAA;AACN,mDAAc;AAAA,MAChB;AAAA,MACA,SAAS,CAAC,UAAU;AAClB,cAAM,eAAA;AACN,cAAM,gBAAA;AACN,iBAAA;AAAA,MACF;AAAA,MAEA,UAAA,oBAAC,MAAA,EAAK,MAAY,WAAU,UAAA,CAAU;AAAA,IAAA;AAAA,EAAA;AAG5C;"}
1
+ {"version":3,"file":"CellActions.js","sources":["../../src/overlay/CellActions.tsx"],"sourcesContent":["import { useEffect, type ButtonHTMLAttributes, type ReactNode } from \"react\";\nimport { Icon, type StaticIconComponent } from \"../data/Icon\";\nimport { cn } from \"../lib/utils\";\nimport type { DropdownMenuItem } from \"./DropdownMenu\";\nimport { ContextMenu } from \"./ContextMenu\";\n\nexport type CellActionsProps = {\n contextTarget: HTMLElement | null;\n menuLabel: string;\n menuItems: DropdownMenuItem[];\n children: ReactNode;\n className?: string;\n};\n\nexport type CellActionButtonProps = Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n \"children\" | \"onClick\"\n> & {\n label: string;\n icon: StaticIconComponent;\n onSelect: () => void;\n};\n\nexport function CellActions({\n contextTarget,\n menuLabel,\n menuItems,\n children,\n className,\n}: CellActionsProps) {\n useEffect(() => {\n if (!contextTarget) return;\n contextTarget.classList.add(\"group/cell-actions\");\n return () => contextTarget.classList.remove(\"group/cell-actions\");\n }, [contextTarget]);\n\n return (\n <>\n <span\n className={cn(\n \"ms-1 inline-flex items-center gap-0.5 align-middle\",\n className,\n )}\n contentEditable={false}\n >\n {children}\n </span>\n <ContextMenu\n contextTarget={contextTarget}\n menuLabel={menuLabel}\n menuItems={menuItems}\n />\n </>\n );\n}\n\nexport function CellActionButton({\n label,\n icon,\n onSelect,\n className,\n title = label,\n onMouseDown,\n ...props\n}: CellActionButtonProps) {\n return (\n <button\n {...props}\n type=\"button\"\n title={title}\n aria-label={label}\n className={cn(\n \"inline-flex size-5 items-center justify-center rounded-full p-1 text-muted-foreground opacity-70 transition-colors transition-opacity hover:bg-primary/10 hover:text-primary hover:opacity-100 focus-visible:bg-primary/10 focus-visible:text-primary focus-visible:opacity-100 focus-visible:outline-none group-hover/cell-actions:opacity-95\",\n className,\n )}\n onMouseDown={(event) => {\n event.preventDefault();\n onMouseDown?.(event);\n }}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n onSelect();\n }}\n >\n <Icon icon={icon} className=\"text-sm\" />\n </button>\n );\n}\n"],"names":[],"mappings":";;;;;AAuBO,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAqB;AACnB,YAAU,MAAM;AACd,QAAI,CAAC,cAAe;AACpB,kBAAc,UAAU,IAAI,oBAAoB;AAChD,WAAO,MAAM,cAAc,UAAU,OAAO,oBAAoB;AAAA,EAClE,GAAG,CAAC,aAAa,CAAC;AAElB,SACE,qBAAA,UAAA,EACE,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW;AAAA,UACT;AAAA,UACA;AAAA,QAAA;AAAA,QAEF,iBAAiB;AAAA,QAEhB;AAAA,MAAA;AAAA,IAAA;AAAA,IAEH;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;AAEO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,GAAG;AACL,GAA0B;AACxB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACE,GAAG;AAAA,MACJ,MAAK;AAAA,MACL;AAAA,MACA,cAAY;AAAA,MACZ,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAEF,aAAa,CAAC,UAAU;AACtB,cAAM,eAAA;AACN,mDAAc;AAAA,MAChB;AAAA,MACA,SAAS,CAAC,UAAU;AAClB,cAAM,eAAA;AACN,cAAM,gBAAA;AACN,iBAAA;AAAA,MACF;AAAA,MAEA,UAAA,oBAAC,MAAA,EAAK,MAAY,WAAU,UAAA,CAAU;AAAA,IAAA;AAAA,EAAA;AAG5C;"}
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const react = require("@floating-ui/react");
5
+ const react$1 = require("react");
6
+ const DropdownMenuSubmenu = require("./DropdownMenuSubmenu.cjs");
7
+ const dropdownMenuContext = require("./dropdownMenuContext.cjs");
8
+ const modalStack = require("./modalStack.cjs");
9
+ function pointReference(x, y, contextElement) {
10
+ return {
11
+ contextElement,
12
+ getBoundingClientRect: () => ({
13
+ x,
14
+ y,
15
+ top: y,
16
+ left: x,
17
+ right: x,
18
+ bottom: y,
19
+ width: 0,
20
+ height: 0,
21
+ toJSON: () => ({})
22
+ })
23
+ };
24
+ }
25
+ function ContextMenuRoot({
26
+ contextTarget,
27
+ menuLabel,
28
+ menuItems
29
+ }) {
30
+ const [open, setOpen] = react$1.useState(false);
31
+ const [activeIndex, setActiveIndex] = react$1.useState(null);
32
+ const returnFocusRef = react$1.useRef(null);
33
+ const elementsRef = react$1.useRef([]);
34
+ const floatingZ = modalStack.useFloatingZIndex();
35
+ const tree = react.useFloatingTree();
36
+ const nodeId = react.useFloatingNodeId();
37
+ const closeMenu = react$1.useCallback(() => {
38
+ setOpen(false);
39
+ queueMicrotask(
40
+ () => {
41
+ var _a;
42
+ return (_a = returnFocusRef.current) == null ? void 0 : _a.focus({ preventScroll: true });
43
+ }
44
+ );
45
+ }, []);
46
+ const { refs, floatingStyles, context } = react.useFloating({
47
+ ...nodeId ? { nodeId } : {},
48
+ open,
49
+ onOpenChange: (next) => next ? setOpen(true) : closeMenu(),
50
+ placement: "right-start",
51
+ middleware: [react.offset(4), react.flip({ padding: 8 }), react.shift({ padding: 8 })],
52
+ whileElementsMounted: react.autoUpdate
53
+ });
54
+ const dismiss = react.useDismiss(context, { escapeKey: false });
55
+ const role = react.useRole(context, { role: "menu" });
56
+ const listNavigation = react.useListNavigation(context, {
57
+ listRef: elementsRef,
58
+ activeIndex,
59
+ onNavigate: setActiveIndex,
60
+ loop: true
61
+ });
62
+ const { getFloatingProps, getItemProps } = react.useInteractions([
63
+ dismiss,
64
+ role,
65
+ listNavigation
66
+ ]);
67
+ const openAt = react$1.useCallback(
68
+ (x, y) => {
69
+ if (!contextTarget || menuItems.length === 0) return;
70
+ const active = document.activeElement;
71
+ returnFocusRef.current = active instanceof HTMLElement ? active : contextTarget;
72
+ refs.setPositionReference(pointReference(x, y, contextTarget));
73
+ setActiveIndex(null);
74
+ setOpen(true);
75
+ },
76
+ [contextTarget, menuItems.length, refs]
77
+ );
78
+ react$1.useEffect(() => {
79
+ if (!contextTarget || menuItems.length === 0) return;
80
+ const onContextMenu = (event) => {
81
+ event.preventDefault();
82
+ event.stopPropagation();
83
+ openAt(event.clientX, event.clientY);
84
+ };
85
+ const onKeyDown = (event) => {
86
+ if (event.key !== "ContextMenu" && !(event.key === "F10" && event.shiftKey))
87
+ return;
88
+ event.preventDefault();
89
+ event.stopPropagation();
90
+ const rect = contextTarget.getBoundingClientRect();
91
+ openAt(rect.left + 8, rect.top + Math.min(rect.height, 24));
92
+ };
93
+ contextTarget.addEventListener("contextmenu", onContextMenu);
94
+ contextTarget.addEventListener("keydown", onKeyDown);
95
+ return () => {
96
+ contextTarget.removeEventListener("contextmenu", onContextMenu);
97
+ contextTarget.removeEventListener("keydown", onKeyDown);
98
+ };
99
+ }, [contextTarget, menuItems.length, openAt]);
100
+ react$1.useEffect(() => {
101
+ if (!tree) return;
102
+ tree.events.on("click", closeMenu);
103
+ return () => tree.events.off("click", closeMenu);
104
+ }, [closeMenu, tree]);
105
+ modalStack.useEscapeLayer(open, closeMenu);
106
+ return /* @__PURE__ */ jsxRuntime.jsx(react.FloatingNode, { id: nodeId, children: open && /* @__PURE__ */ jsxRuntime.jsx(react.FloatingPortal, { children: /* @__PURE__ */ jsxRuntime.jsx(
107
+ react.FloatingFocusManager,
108
+ {
109
+ context,
110
+ modal: false,
111
+ returnFocus: false,
112
+ children: /* @__PURE__ */ jsxRuntime.jsx(
113
+ "div",
114
+ {
115
+ ref: refs.setFloating,
116
+ role: "menu",
117
+ "aria-label": menuLabel,
118
+ style: { ...floatingStyles, zIndex: floatingZ },
119
+ className: dropdownMenuContext.MENU_POPOVER_CLASS,
120
+ ...getFloatingProps(),
121
+ children: /* @__PURE__ */ jsxRuntime.jsx(
122
+ dropdownMenuContext.MenuContext.Provider,
123
+ {
124
+ value: {
125
+ getItemProps,
126
+ activeIndex,
127
+ setActiveIndex,
128
+ setHasFocusInside: () => {
129
+ },
130
+ isOpen: open
131
+ },
132
+ children: /* @__PURE__ */ jsxRuntime.jsx(react.FloatingList, { elementsRef, children: /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuSubmenu.MenuItemList, { items: menuItems }) })
133
+ }
134
+ )
135
+ }
136
+ )
137
+ }
138
+ ) }) });
139
+ }
140
+ function ContextMenu(props) {
141
+ return /* @__PURE__ */ jsxRuntime.jsx(react.FloatingTree, { children: /* @__PURE__ */ jsxRuntime.jsx(ContextMenuRoot, { ...props }) });
142
+ }
143
+ exports.ContextMenu = ContextMenu;
144
+ //# sourceMappingURL=ContextMenu.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextMenu.cjs","sources":["../../src/overlay/ContextMenu.tsx"],"sourcesContent":["import {\n autoUpdate,\n flip,\n FloatingFocusManager,\n FloatingList,\n FloatingNode,\n FloatingPortal,\n FloatingTree,\n offset,\n shift,\n useDismiss,\n useFloating,\n useFloatingNodeId,\n useFloatingTree,\n useInteractions,\n useListNavigation,\n useRole,\n type VirtualElement,\n} from \"@floating-ui/react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { DropdownMenuItem } from \"./DropdownMenu\";\nimport { MenuItemList } from \"./DropdownMenuSubmenu\";\nimport { MENU_POPOVER_CLASS, MenuContext } from \"./dropdownMenuContext\";\nimport { useEscapeLayer, useFloatingZIndex } from \"./modalStack\";\n\nexport type ContextMenuProps = {\n contextTarget: HTMLElement | null;\n menuLabel: string;\n menuItems: DropdownMenuItem[];\n};\n\nfunction pointReference(\n x: number,\n y: number,\n contextElement: HTMLElement,\n): VirtualElement {\n return {\n contextElement,\n getBoundingClientRect: () => ({\n x,\n y,\n top: y,\n left: x,\n right: x,\n bottom: y,\n width: 0,\n height: 0,\n toJSON: () => ({}),\n }),\n };\n}\n\nfunction ContextMenuRoot({\n contextTarget,\n menuLabel,\n menuItems,\n}: ContextMenuProps) {\n const [open, setOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState<number | null>(null);\n const returnFocusRef = useRef<HTMLElement | null>(null);\n const elementsRef = useRef<Array<HTMLElement | null>>([]);\n const floatingZ = useFloatingZIndex();\n const tree = useFloatingTree();\n const nodeId = useFloatingNodeId();\n\n const closeMenu = useCallback(() => {\n setOpen(false);\n queueMicrotask(() =>\n returnFocusRef.current?.focus({ preventScroll: true }),\n );\n }, []);\n\n const { refs, floatingStyles, context } = useFloating<HTMLDivElement>({\n ...(nodeId ? { nodeId } : {}),\n open,\n onOpenChange: (next) => (next ? setOpen(true) : closeMenu()),\n placement: \"right-start\",\n middleware: [offset(4), flip({ padding: 8 }), shift({ padding: 8 })],\n whileElementsMounted: autoUpdate,\n });\n\n const dismiss = useDismiss(context, { escapeKey: false });\n const role = useRole(context, { role: \"menu\" });\n const listNavigation = useListNavigation(context, {\n listRef: elementsRef,\n activeIndex,\n onNavigate: setActiveIndex,\n loop: true,\n });\n const { getFloatingProps, getItemProps } = useInteractions([\n dismiss,\n role,\n listNavigation,\n ]);\n\n const openAt = useCallback(\n (x: number, y: number) => {\n if (!contextTarget || menuItems.length === 0) return;\n const active = document.activeElement;\n returnFocusRef.current =\n active instanceof HTMLElement ? active : contextTarget;\n refs.setPositionReference(pointReference(x, y, contextTarget));\n setActiveIndex(null);\n setOpen(true);\n },\n [contextTarget, menuItems.length, refs],\n );\n\n useEffect(() => {\n if (!contextTarget || menuItems.length === 0) return;\n const onContextMenu = (event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n openAt(event.clientX, event.clientY);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (\n event.key !== \"ContextMenu\" &&\n !(event.key === \"F10\" && event.shiftKey)\n )\n return;\n event.preventDefault();\n event.stopPropagation();\n const rect = contextTarget.getBoundingClientRect();\n openAt(rect.left + 8, rect.top + Math.min(rect.height, 24));\n };\n\n contextTarget.addEventListener(\"contextmenu\", onContextMenu);\n contextTarget.addEventListener(\"keydown\", onKeyDown);\n return () => {\n contextTarget.removeEventListener(\"contextmenu\", onContextMenu);\n contextTarget.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [contextTarget, menuItems.length, openAt]);\n\n useEffect(() => {\n if (!tree) return;\n tree.events.on(\"click\", closeMenu);\n return () => tree.events.off(\"click\", closeMenu);\n }, [closeMenu, tree]);\n\n useEscapeLayer(open, closeMenu);\n\n return (\n <FloatingNode id={nodeId}>\n {open && (\n <FloatingPortal>\n <FloatingFocusManager\n context={context}\n modal={false}\n returnFocus={false}\n >\n <div\n ref={refs.setFloating}\n role=\"menu\"\n aria-label={menuLabel}\n style={{ ...floatingStyles, zIndex: floatingZ }}\n className={MENU_POPOVER_CLASS}\n {...getFloatingProps()}\n >\n <MenuContext.Provider\n value={{\n getItemProps,\n activeIndex,\n setActiveIndex,\n setHasFocusInside: () => {},\n isOpen: open,\n }}\n >\n <FloatingList elementsRef={elementsRef}>\n <MenuItemList items={menuItems} />\n </FloatingList>\n </MenuContext.Provider>\n </div>\n </FloatingFocusManager>\n </FloatingPortal>\n )}\n </FloatingNode>\n );\n}\n\nexport function ContextMenu(props: ContextMenuProps) {\n return (\n <FloatingTree>\n <ContextMenuRoot {...props} />\n </FloatingTree>\n );\n}\n"],"names":["useState","useRef","useFloatingZIndex","useFloatingTree","useFloatingNodeId","useCallback","useFloating","offset","flip","shift","autoUpdate","useDismiss","useRole","useListNavigation","useInteractions","useEffect","useEscapeLayer","FloatingNode","FloatingPortal","jsx","FloatingFocusManager","MENU_POPOVER_CLASS","MenuContext","FloatingList","MenuItemList","FloatingTree"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { DropdownMenuItem } from './DropdownMenu';
2
+ export type ContextMenuProps = {
3
+ contextTarget: HTMLElement | null;
4
+ menuLabel: string;
5
+ menuItems: DropdownMenuItem[];
6
+ };
7
+ export declare function ContextMenu(props: ContextMenuProps): import("react/jsx-runtime").JSX.Element;
8
+ //# sourceMappingURL=ContextMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextMenu.d.ts","sourceRoot":"","sources":["../../src/overlay/ContextMenu.tsx"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAKvD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,aAAa,EAAE,WAAW,GAAG,IAAI,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,gBAAgB,EAAE,CAAC;CAC/B,CAAC;AAwJF,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,2CAMlD"}
@@ -0,0 +1,144 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { FloatingTree, useFloatingTree, useFloatingNodeId, useFloating, autoUpdate, offset, flip, shift, useDismiss, useRole, useListNavigation, useInteractions, FloatingNode, FloatingPortal, FloatingFocusManager, FloatingList } from "@floating-ui/react";
3
+ import { useState, useRef, useCallback, useEffect } from "react";
4
+ import { MenuItemList } from "./DropdownMenuSubmenu.js";
5
+ import { MENU_POPOVER_CLASS, MenuContext } from "./dropdownMenuContext.js";
6
+ import { useFloatingZIndex, useEscapeLayer } from "./modalStack.js";
7
+ function pointReference(x, y, contextElement) {
8
+ return {
9
+ contextElement,
10
+ getBoundingClientRect: () => ({
11
+ x,
12
+ y,
13
+ top: y,
14
+ left: x,
15
+ right: x,
16
+ bottom: y,
17
+ width: 0,
18
+ height: 0,
19
+ toJSON: () => ({})
20
+ })
21
+ };
22
+ }
23
+ function ContextMenuRoot({
24
+ contextTarget,
25
+ menuLabel,
26
+ menuItems
27
+ }) {
28
+ const [open, setOpen] = useState(false);
29
+ const [activeIndex, setActiveIndex] = useState(null);
30
+ const returnFocusRef = useRef(null);
31
+ const elementsRef = useRef([]);
32
+ const floatingZ = useFloatingZIndex();
33
+ const tree = useFloatingTree();
34
+ const nodeId = useFloatingNodeId();
35
+ const closeMenu = useCallback(() => {
36
+ setOpen(false);
37
+ queueMicrotask(
38
+ () => {
39
+ var _a;
40
+ return (_a = returnFocusRef.current) == null ? void 0 : _a.focus({ preventScroll: true });
41
+ }
42
+ );
43
+ }, []);
44
+ const { refs, floatingStyles, context } = useFloating({
45
+ ...nodeId ? { nodeId } : {},
46
+ open,
47
+ onOpenChange: (next) => next ? setOpen(true) : closeMenu(),
48
+ placement: "right-start",
49
+ middleware: [offset(4), flip({ padding: 8 }), shift({ padding: 8 })],
50
+ whileElementsMounted: autoUpdate
51
+ });
52
+ const dismiss = useDismiss(context, { escapeKey: false });
53
+ const role = useRole(context, { role: "menu" });
54
+ const listNavigation = useListNavigation(context, {
55
+ listRef: elementsRef,
56
+ activeIndex,
57
+ onNavigate: setActiveIndex,
58
+ loop: true
59
+ });
60
+ const { getFloatingProps, getItemProps } = useInteractions([
61
+ dismiss,
62
+ role,
63
+ listNavigation
64
+ ]);
65
+ const openAt = useCallback(
66
+ (x, y) => {
67
+ if (!contextTarget || menuItems.length === 0) return;
68
+ const active = document.activeElement;
69
+ returnFocusRef.current = active instanceof HTMLElement ? active : contextTarget;
70
+ refs.setPositionReference(pointReference(x, y, contextTarget));
71
+ setActiveIndex(null);
72
+ setOpen(true);
73
+ },
74
+ [contextTarget, menuItems.length, refs]
75
+ );
76
+ useEffect(() => {
77
+ if (!contextTarget || menuItems.length === 0) return;
78
+ const onContextMenu = (event) => {
79
+ event.preventDefault();
80
+ event.stopPropagation();
81
+ openAt(event.clientX, event.clientY);
82
+ };
83
+ const onKeyDown = (event) => {
84
+ if (event.key !== "ContextMenu" && !(event.key === "F10" && event.shiftKey))
85
+ return;
86
+ event.preventDefault();
87
+ event.stopPropagation();
88
+ const rect = contextTarget.getBoundingClientRect();
89
+ openAt(rect.left + 8, rect.top + Math.min(rect.height, 24));
90
+ };
91
+ contextTarget.addEventListener("contextmenu", onContextMenu);
92
+ contextTarget.addEventListener("keydown", onKeyDown);
93
+ return () => {
94
+ contextTarget.removeEventListener("contextmenu", onContextMenu);
95
+ contextTarget.removeEventListener("keydown", onKeyDown);
96
+ };
97
+ }, [contextTarget, menuItems.length, openAt]);
98
+ useEffect(() => {
99
+ if (!tree) return;
100
+ tree.events.on("click", closeMenu);
101
+ return () => tree.events.off("click", closeMenu);
102
+ }, [closeMenu, tree]);
103
+ useEscapeLayer(open, closeMenu);
104
+ return /* @__PURE__ */ jsx(FloatingNode, { id: nodeId, children: open && /* @__PURE__ */ jsx(FloatingPortal, { children: /* @__PURE__ */ jsx(
105
+ FloatingFocusManager,
106
+ {
107
+ context,
108
+ modal: false,
109
+ returnFocus: false,
110
+ children: /* @__PURE__ */ jsx(
111
+ "div",
112
+ {
113
+ ref: refs.setFloating,
114
+ role: "menu",
115
+ "aria-label": menuLabel,
116
+ style: { ...floatingStyles, zIndex: floatingZ },
117
+ className: MENU_POPOVER_CLASS,
118
+ ...getFloatingProps(),
119
+ children: /* @__PURE__ */ jsx(
120
+ MenuContext.Provider,
121
+ {
122
+ value: {
123
+ getItemProps,
124
+ activeIndex,
125
+ setActiveIndex,
126
+ setHasFocusInside: () => {
127
+ },
128
+ isOpen: open
129
+ },
130
+ children: /* @__PURE__ */ jsx(FloatingList, { elementsRef, children: /* @__PURE__ */ jsx(MenuItemList, { items: menuItems }) })
131
+ }
132
+ )
133
+ }
134
+ )
135
+ }
136
+ ) }) });
137
+ }
138
+ function ContextMenu(props) {
139
+ return /* @__PURE__ */ jsx(FloatingTree, { children: /* @__PURE__ */ jsx(ContextMenuRoot, { ...props }) });
140
+ }
141
+ export {
142
+ ContextMenu
143
+ };
144
+ //# sourceMappingURL=ContextMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextMenu.js","sources":["../../src/overlay/ContextMenu.tsx"],"sourcesContent":["import {\n autoUpdate,\n flip,\n FloatingFocusManager,\n FloatingList,\n FloatingNode,\n FloatingPortal,\n FloatingTree,\n offset,\n shift,\n useDismiss,\n useFloating,\n useFloatingNodeId,\n useFloatingTree,\n useInteractions,\n useListNavigation,\n useRole,\n type VirtualElement,\n} from \"@floating-ui/react\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { DropdownMenuItem } from \"./DropdownMenu\";\nimport { MenuItemList } from \"./DropdownMenuSubmenu\";\nimport { MENU_POPOVER_CLASS, MenuContext } from \"./dropdownMenuContext\";\nimport { useEscapeLayer, useFloatingZIndex } from \"./modalStack\";\n\nexport type ContextMenuProps = {\n contextTarget: HTMLElement | null;\n menuLabel: string;\n menuItems: DropdownMenuItem[];\n};\n\nfunction pointReference(\n x: number,\n y: number,\n contextElement: HTMLElement,\n): VirtualElement {\n return {\n contextElement,\n getBoundingClientRect: () => ({\n x,\n y,\n top: y,\n left: x,\n right: x,\n bottom: y,\n width: 0,\n height: 0,\n toJSON: () => ({}),\n }),\n };\n}\n\nfunction ContextMenuRoot({\n contextTarget,\n menuLabel,\n menuItems,\n}: ContextMenuProps) {\n const [open, setOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState<number | null>(null);\n const returnFocusRef = useRef<HTMLElement | null>(null);\n const elementsRef = useRef<Array<HTMLElement | null>>([]);\n const floatingZ = useFloatingZIndex();\n const tree = useFloatingTree();\n const nodeId = useFloatingNodeId();\n\n const closeMenu = useCallback(() => {\n setOpen(false);\n queueMicrotask(() =>\n returnFocusRef.current?.focus({ preventScroll: true }),\n );\n }, []);\n\n const { refs, floatingStyles, context } = useFloating<HTMLDivElement>({\n ...(nodeId ? { nodeId } : {}),\n open,\n onOpenChange: (next) => (next ? setOpen(true) : closeMenu()),\n placement: \"right-start\",\n middleware: [offset(4), flip({ padding: 8 }), shift({ padding: 8 })],\n whileElementsMounted: autoUpdate,\n });\n\n const dismiss = useDismiss(context, { escapeKey: false });\n const role = useRole(context, { role: \"menu\" });\n const listNavigation = useListNavigation(context, {\n listRef: elementsRef,\n activeIndex,\n onNavigate: setActiveIndex,\n loop: true,\n });\n const { getFloatingProps, getItemProps } = useInteractions([\n dismiss,\n role,\n listNavigation,\n ]);\n\n const openAt = useCallback(\n (x: number, y: number) => {\n if (!contextTarget || menuItems.length === 0) return;\n const active = document.activeElement;\n returnFocusRef.current =\n active instanceof HTMLElement ? active : contextTarget;\n refs.setPositionReference(pointReference(x, y, contextTarget));\n setActiveIndex(null);\n setOpen(true);\n },\n [contextTarget, menuItems.length, refs],\n );\n\n useEffect(() => {\n if (!contextTarget || menuItems.length === 0) return;\n const onContextMenu = (event: MouseEvent) => {\n event.preventDefault();\n event.stopPropagation();\n openAt(event.clientX, event.clientY);\n };\n const onKeyDown = (event: KeyboardEvent) => {\n if (\n event.key !== \"ContextMenu\" &&\n !(event.key === \"F10\" && event.shiftKey)\n )\n return;\n event.preventDefault();\n event.stopPropagation();\n const rect = contextTarget.getBoundingClientRect();\n openAt(rect.left + 8, rect.top + Math.min(rect.height, 24));\n };\n\n contextTarget.addEventListener(\"contextmenu\", onContextMenu);\n contextTarget.addEventListener(\"keydown\", onKeyDown);\n return () => {\n contextTarget.removeEventListener(\"contextmenu\", onContextMenu);\n contextTarget.removeEventListener(\"keydown\", onKeyDown);\n };\n }, [contextTarget, menuItems.length, openAt]);\n\n useEffect(() => {\n if (!tree) return;\n tree.events.on(\"click\", closeMenu);\n return () => tree.events.off(\"click\", closeMenu);\n }, [closeMenu, tree]);\n\n useEscapeLayer(open, closeMenu);\n\n return (\n <FloatingNode id={nodeId}>\n {open && (\n <FloatingPortal>\n <FloatingFocusManager\n context={context}\n modal={false}\n returnFocus={false}\n >\n <div\n ref={refs.setFloating}\n role=\"menu\"\n aria-label={menuLabel}\n style={{ ...floatingStyles, zIndex: floatingZ }}\n className={MENU_POPOVER_CLASS}\n {...getFloatingProps()}\n >\n <MenuContext.Provider\n value={{\n getItemProps,\n activeIndex,\n setActiveIndex,\n setHasFocusInside: () => {},\n isOpen: open,\n }}\n >\n <FloatingList elementsRef={elementsRef}>\n <MenuItemList items={menuItems} />\n </FloatingList>\n </MenuContext.Provider>\n </div>\n </FloatingFocusManager>\n </FloatingPortal>\n )}\n </FloatingNode>\n );\n}\n\nexport function ContextMenu(props: ContextMenuProps) {\n return (\n <FloatingTree>\n <ContextMenuRoot {...props} />\n </FloatingTree>\n );\n}\n"],"names":[],"mappings":"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"}