@agent-native/toolkit 0.0.0-beta-20260819143124

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 (1070) hide show
  1. package/README.md +151 -0
  2. package/agent-native.eject.json +588 -0
  3. package/dist/app-shell/header-actions.d.ts +18 -0
  4. package/dist/app-shell/header-actions.d.ts.map +1 -0
  5. package/dist/app-shell/header-actions.js +52 -0
  6. package/dist/app-shell/header-actions.js.map +1 -0
  7. package/dist/app-shell/index.d.ts +3 -0
  8. package/dist/app-shell/index.d.ts.map +1 -0
  9. package/dist/app-shell/index.js +3 -0
  10. package/dist/app-shell/index.js.map +1 -0
  11. package/dist/app-shell/sidebar-footer-actions.d.ts +14 -0
  12. package/dist/app-shell/sidebar-footer-actions.d.ts.map +1 -0
  13. package/dist/app-shell/sidebar-footer-actions.js +10 -0
  14. package/dist/app-shell/sidebar-footer-actions.js.map +1 -0
  15. package/dist/app-shell/sidebar-footer-actions.spec.d.ts +2 -0
  16. package/dist/app-shell/sidebar-footer-actions.spec.d.ts.map +1 -0
  17. package/dist/app-shell/sidebar-footer-actions.spec.js +43 -0
  18. package/dist/app-shell/sidebar-footer-actions.spec.js.map +1 -0
  19. package/dist/canvas-annotations/CanvasCommentPins.d.ts +68 -0
  20. package/dist/canvas-annotations/CanvasCommentPins.d.ts.map +1 -0
  21. package/dist/canvas-annotations/CanvasCommentPins.js +513 -0
  22. package/dist/canvas-annotations/CanvasCommentPins.js.map +1 -0
  23. package/dist/canvas-annotations/DrawOverlay.d.ts +108 -0
  24. package/dist/canvas-annotations/DrawOverlay.d.ts.map +1 -0
  25. package/dist/canvas-annotations/DrawOverlay.js +746 -0
  26. package/dist/canvas-annotations/DrawOverlay.js.map +1 -0
  27. package/dist/canvas-annotations/DrawOverlay.spec.d.ts +2 -0
  28. package/dist/canvas-annotations/DrawOverlay.spec.d.ts.map +1 -0
  29. package/dist/canvas-annotations/DrawOverlay.spec.js +111 -0
  30. package/dist/canvas-annotations/DrawOverlay.spec.js.map +1 -0
  31. package/dist/canvas-annotations/index.d.ts +4 -0
  32. package/dist/canvas-annotations/index.d.ts.map +1 -0
  33. package/dist/canvas-annotations/index.js +3 -0
  34. package/dist/canvas-annotations/index.js.map +1 -0
  35. package/dist/canvas-annotations/types.d.ts +8 -0
  36. package/dist/canvas-annotations/types.d.ts.map +1 -0
  37. package/dist/canvas-annotations/types.js +2 -0
  38. package/dist/canvas-annotations/types.js.map +1 -0
  39. package/dist/canvas-interactions/canvas-interactions.d.ts +334 -0
  40. package/dist/canvas-interactions/canvas-interactions.d.ts.map +1 -0
  41. package/dist/canvas-interactions/canvas-interactions.js +486 -0
  42. package/dist/canvas-interactions/canvas-interactions.js.map +1 -0
  43. package/dist/canvas-interactions/canvas-interactions.spec.d.ts +2 -0
  44. package/dist/canvas-interactions/canvas-interactions.spec.d.ts.map +1 -0
  45. package/dist/canvas-interactions/canvas-interactions.spec.js +593 -0
  46. package/dist/canvas-interactions/canvas-interactions.spec.js.map +1 -0
  47. package/dist/canvas-interactions/index.d.ts +2 -0
  48. package/dist/canvas-interactions/index.d.ts.map +1 -0
  49. package/dist/canvas-interactions/index.js +2 -0
  50. package/dist/canvas-interactions/index.js.map +1 -0
  51. package/dist/chat-history/ChatHistoryList.d.ts +103 -0
  52. package/dist/chat-history/ChatHistoryList.d.ts.map +1 -0
  53. package/dist/chat-history/ChatHistoryList.js +102 -0
  54. package/dist/chat-history/ChatHistoryList.js.map +1 -0
  55. package/dist/chat-history/ChatHistoryList.spec.d.ts +2 -0
  56. package/dist/chat-history/ChatHistoryList.spec.d.ts.map +1 -0
  57. package/dist/chat-history/ChatHistoryList.spec.js +293 -0
  58. package/dist/chat-history/ChatHistoryList.spec.js.map +1 -0
  59. package/dist/chat-history/ChatHistoryRail.d.ts +33 -0
  60. package/dist/chat-history/ChatHistoryRail.d.ts.map +1 -0
  61. package/dist/chat-history/ChatHistoryRail.js +35 -0
  62. package/dist/chat-history/ChatHistoryRail.js.map +1 -0
  63. package/dist/chat-history/ChatHistoryRail.spec.d.ts +2 -0
  64. package/dist/chat-history/ChatHistoryRail.spec.d.ts.map +1 -0
  65. package/dist/chat-history/ChatHistoryRail.spec.js +157 -0
  66. package/dist/chat-history/ChatHistoryRail.spec.js.map +1 -0
  67. package/dist/chat-history/index.d.ts +4 -0
  68. package/dist/chat-history/index.d.ts.map +1 -0
  69. package/dist/chat-history/index.js +4 -0
  70. package/dist/chat-history/index.js.map +1 -0
  71. package/dist/chat-history/useChatHistoryRailController.d.ts +26 -0
  72. package/dist/chat-history/useChatHistoryRailController.d.ts.map +1 -0
  73. package/dist/chat-history/useChatHistoryRailController.js +36 -0
  74. package/dist/chat-history/useChatHistoryRailController.js.map +1 -0
  75. package/dist/chat-history/useChatHistoryRailController.spec.d.ts +2 -0
  76. package/dist/chat-history/useChatHistoryRailController.spec.d.ts.map +1 -0
  77. package/dist/chat-history/useChatHistoryRailController.spec.js +101 -0
  78. package/dist/chat-history/useChatHistoryRailController.spec.js.map +1 -0
  79. package/dist/chat-history.css +469 -0
  80. package/dist/collab-ui/AgentPresenceChip.d.ts +12 -0
  81. package/dist/collab-ui/AgentPresenceChip.d.ts.map +1 -0
  82. package/dist/collab-ui/AgentPresenceChip.js +42 -0
  83. package/dist/collab-ui/AgentPresenceChip.js.map +1 -0
  84. package/dist/collab-ui/LiveCursorOverlay.d.ts +46 -0
  85. package/dist/collab-ui/LiveCursorOverlay.d.ts.map +1 -0
  86. package/dist/collab-ui/LiveCursorOverlay.js +125 -0
  87. package/dist/collab-ui/LiveCursorOverlay.js.map +1 -0
  88. package/dist/collab-ui/PresenceBar.d.ts +30 -0
  89. package/dist/collab-ui/PresenceBar.d.ts.map +1 -0
  90. package/dist/collab-ui/PresenceBar.js +172 -0
  91. package/dist/collab-ui/PresenceBar.js.map +1 -0
  92. package/dist/collab-ui/PresenceBar.spec.d.ts +2 -0
  93. package/dist/collab-ui/PresenceBar.spec.d.ts.map +1 -0
  94. package/dist/collab-ui/PresenceBar.spec.js +30 -0
  95. package/dist/collab-ui/PresenceBar.spec.js.map +1 -0
  96. package/dist/collab-ui/RecentEditHighlights.d.ts +46 -0
  97. package/dist/collab-ui/RecentEditHighlights.d.ts.map +1 -0
  98. package/dist/collab-ui/RecentEditHighlights.js +154 -0
  99. package/dist/collab-ui/RecentEditHighlights.js.map +1 -0
  100. package/dist/collab-ui/RemoteSelectionRings.d.ts +53 -0
  101. package/dist/collab-ui/RemoteSelectionRings.d.ts.map +1 -0
  102. package/dist/collab-ui/RemoteSelectionRings.js +130 -0
  103. package/dist/collab-ui/RemoteSelectionRings.js.map +1 -0
  104. package/dist/collab-ui/agent-identity.d.ts +9 -0
  105. package/dist/collab-ui/agent-identity.d.ts.map +1 -0
  106. package/dist/collab-ui/agent-identity.js +9 -0
  107. package/dist/collab-ui/agent-identity.js.map +1 -0
  108. package/dist/collab-ui/index.d.ts +9 -0
  109. package/dist/collab-ui/index.d.ts.map +1 -0
  110. package/dist/collab-ui/index.js +9 -0
  111. package/dist/collab-ui/index.js.map +1 -0
  112. package/dist/collab-ui/lead-client.d.ts +3 -0
  113. package/dist/collab-ui/lead-client.d.ts.map +1 -0
  114. package/dist/collab-ui/lead-client.js +29 -0
  115. package/dist/collab-ui/lead-client.js.map +1 -0
  116. package/dist/collab-ui/types.d.ts +48 -0
  117. package/dist/collab-ui/types.d.ts.map +1 -0
  118. package/dist/collab-ui/types.js +52 -0
  119. package/dist/collab-ui/types.js.map +1 -0
  120. package/dist/collab-ui/types.spec.d.ts +2 -0
  121. package/dist/collab-ui/types.spec.d.ts.map +1 -0
  122. package/dist/collab-ui/types.spec.js +15 -0
  123. package/dist/collab-ui/types.spec.js.map +1 -0
  124. package/dist/composer/AgentComposerFrame.d.ts +19 -0
  125. package/dist/composer/AgentComposerFrame.d.ts.map +1 -0
  126. package/dist/composer/AgentComposerFrame.js +17 -0
  127. package/dist/composer/AgentComposerFrame.js.map +1 -0
  128. package/dist/composer/ComposerPlusMenu.d.ts +30 -0
  129. package/dist/composer/ComposerPlusMenu.d.ts.map +1 -0
  130. package/dist/composer/ComposerPlusMenu.js +635 -0
  131. package/dist/composer/ComposerPlusMenu.js.map +1 -0
  132. package/dist/composer/ComposerPlusMenu.spec.d.ts +2 -0
  133. package/dist/composer/ComposerPlusMenu.spec.d.ts.map +1 -0
  134. package/dist/composer/ComposerPlusMenu.spec.js +12 -0
  135. package/dist/composer/ComposerPlusMenu.spec.js.map +1 -0
  136. package/dist/composer/MentionPopover.d.ts +29 -0
  137. package/dist/composer/MentionPopover.d.ts.map +1 -0
  138. package/dist/composer/MentionPopover.js +221 -0
  139. package/dist/composer/MentionPopover.js.map +1 -0
  140. package/dist/composer/PastedTextChip.d.ts +9 -0
  141. package/dist/composer/PastedTextChip.d.ts.map +1 -0
  142. package/dist/composer/PastedTextChip.js +71 -0
  143. package/dist/composer/PastedTextChip.js.map +1 -0
  144. package/dist/composer/PastedTextChip.spec.d.ts +2 -0
  145. package/dist/composer/PastedTextChip.spec.d.ts.map +1 -0
  146. package/dist/composer/PastedTextChip.spec.js +42 -0
  147. package/dist/composer/PastedTextChip.spec.js.map +1 -0
  148. package/dist/composer/PromptComposer.d.ts +151 -0
  149. package/dist/composer/PromptComposer.d.ts.map +1 -0
  150. package/dist/composer/PromptComposer.js +322 -0
  151. package/dist/composer/PromptComposer.js.map +1 -0
  152. package/dist/composer/PromptComposer.spec.d.ts +2 -0
  153. package/dist/composer/PromptComposer.spec.d.ts.map +1 -0
  154. package/dist/composer/PromptComposer.spec.js +87 -0
  155. package/dist/composer/PromptComposer.spec.js.map +1 -0
  156. package/dist/composer/RealtimeVoiceMode.d.ts +108 -0
  157. package/dist/composer/RealtimeVoiceMode.d.ts.map +1 -0
  158. package/dist/composer/RealtimeVoiceMode.js +312 -0
  159. package/dist/composer/RealtimeVoiceMode.js.map +1 -0
  160. package/dist/composer/RealtimeVoiceMode.spec.d.ts +2 -0
  161. package/dist/composer/RealtimeVoiceMode.spec.d.ts.map +1 -0
  162. package/dist/composer/RealtimeVoiceMode.spec.js +540 -0
  163. package/dist/composer/RealtimeVoiceMode.spec.js.map +1 -0
  164. package/dist/composer/TiptapComposer.d.ts +288 -0
  165. package/dist/composer/TiptapComposer.d.ts.map +1 -0
  166. package/dist/composer/TiptapComposer.js +2233 -0
  167. package/dist/composer/TiptapComposer.js.map +1 -0
  168. package/dist/composer/TiptapComposer.spec.d.ts +2 -0
  169. package/dist/composer/TiptapComposer.spec.d.ts.map +1 -0
  170. package/dist/composer/TiptapComposer.spec.js +415 -0
  171. package/dist/composer/TiptapComposer.spec.js.map +1 -0
  172. package/dist/composer/VoiceButton.d.ts +27 -0
  173. package/dist/composer/VoiceButton.d.ts.map +1 -0
  174. package/dist/composer/VoiceButton.js +151 -0
  175. package/dist/composer/VoiceButton.js.map +1 -0
  176. package/dist/composer/VoiceButton.spec.d.ts +2 -0
  177. package/dist/composer/VoiceButton.spec.d.ts.map +1 -0
  178. package/dist/composer/VoiceButton.spec.js +27 -0
  179. package/dist/composer/VoiceButton.spec.js.map +1 -0
  180. package/dist/composer/asset-picker-url.d.ts +16 -0
  181. package/dist/composer/asset-picker-url.d.ts.map +1 -0
  182. package/dist/composer/asset-picker-url.js +64 -0
  183. package/dist/composer/asset-picker-url.js.map +1 -0
  184. package/dist/composer/asset-picker-url.spec.d.ts +2 -0
  185. package/dist/composer/asset-picker-url.spec.d.ts.map +1 -0
  186. package/dist/composer/asset-picker-url.spec.js +23 -0
  187. package/dist/composer/asset-picker-url.spec.js.map +1 -0
  188. package/dist/composer/attachment-accept.d.ts +9 -0
  189. package/dist/composer/attachment-accept.d.ts.map +1 -0
  190. package/dist/composer/attachment-accept.js +69 -0
  191. package/dist/composer/attachment-accept.js.map +1 -0
  192. package/dist/composer/attachment-accept.spec.d.ts +2 -0
  193. package/dist/composer/attachment-accept.spec.d.ts.map +1 -0
  194. package/dist/composer/attachment-accept.spec.js +24 -0
  195. package/dist/composer/attachment-accept.spec.js.map +1 -0
  196. package/dist/composer/draft-key.d.ts +2 -0
  197. package/dist/composer/draft-key.d.ts.map +1 -0
  198. package/dist/composer/draft-key.js +8 -0
  199. package/dist/composer/draft-key.js.map +1 -0
  200. package/dist/composer/draft-key.spec.d.ts +2 -0
  201. package/dist/composer/draft-key.spec.d.ts.map +1 -0
  202. package/dist/composer/draft-key.spec.js +13 -0
  203. package/dist/composer/draft-key.spec.js.map +1 -0
  204. package/dist/composer/extensions/FileReference.d.ts +3 -0
  205. package/dist/composer/extensions/FileReference.d.ts.map +1 -0
  206. package/dist/composer/extensions/FileReference.js +36 -0
  207. package/dist/composer/extensions/FileReference.js.map +1 -0
  208. package/dist/composer/extensions/MentionReference.d.ts +3 -0
  209. package/dist/composer/extensions/MentionReference.d.ts.map +1 -0
  210. package/dist/composer/extensions/MentionReference.js +66 -0
  211. package/dist/composer/extensions/MentionReference.js.map +1 -0
  212. package/dist/composer/extensions/SkillReference.d.ts +3 -0
  213. package/dist/composer/extensions/SkillReference.d.ts.map +1 -0
  214. package/dist/composer/extensions/SkillReference.js +40 -0
  215. package/dist/composer/extensions/SkillReference.js.map +1 -0
  216. package/dist/composer/index.d.ts +16 -0
  217. package/dist/composer/index.d.ts.map +1 -0
  218. package/dist/composer/index.js +14 -0
  219. package/dist/composer/index.js.map +1 -0
  220. package/dist/composer/model-selection.d.ts +12 -0
  221. package/dist/composer/model-selection.d.ts.map +1 -0
  222. package/dist/composer/model-selection.js +31 -0
  223. package/dist/composer/model-selection.js.map +1 -0
  224. package/dist/composer/model-selection.spec.d.ts +2 -0
  225. package/dist/composer/model-selection.spec.d.ts.map +1 -0
  226. package/dist/composer/model-selection.spec.js +38 -0
  227. package/dist/composer/model-selection.spec.js.map +1 -0
  228. package/dist/composer/pasted-text.d.ts +31 -0
  229. package/dist/composer/pasted-text.d.ts.map +1 -0
  230. package/dist/composer/pasted-text.js +130 -0
  231. package/dist/composer/pasted-text.js.map +1 -0
  232. package/dist/composer/pasted-text.spec.d.ts +2 -0
  233. package/dist/composer/pasted-text.spec.d.ts.map +1 -0
  234. package/dist/composer/pasted-text.spec.js +107 -0
  235. package/dist/composer/pasted-text.spec.js.map +1 -0
  236. package/dist/composer/prompt-attachments.d.ts +18 -0
  237. package/dist/composer/prompt-attachments.d.ts.map +1 -0
  238. package/dist/composer/prompt-attachments.js +65 -0
  239. package/dist/composer/prompt-attachments.js.map +1 -0
  240. package/dist/composer/prompt-attachments.spec.d.ts +2 -0
  241. package/dist/composer/prompt-attachments.spec.d.ts.map +1 -0
  242. package/dist/composer/prompt-attachments.spec.js +63 -0
  243. package/dist/composer/prompt-attachments.spec.js.map +1 -0
  244. package/dist/composer/realtime-voice-audio-level.d.ts +14 -0
  245. package/dist/composer/realtime-voice-audio-level.d.ts.map +1 -0
  246. package/dist/composer/realtime-voice-audio-level.js +48 -0
  247. package/dist/composer/realtime-voice-audio-level.js.map +1 -0
  248. package/dist/composer/realtime-voice-audio-level.spec.d.ts +2 -0
  249. package/dist/composer/realtime-voice-audio-level.spec.d.ts.map +1 -0
  250. package/dist/composer/realtime-voice-audio-level.spec.js +32 -0
  251. package/dist/composer/realtime-voice-audio-level.spec.js.map +1 -0
  252. package/dist/composer/realtime-voice-transcript.d.ts +26 -0
  253. package/dist/composer/realtime-voice-transcript.d.ts.map +1 -0
  254. package/dist/composer/realtime-voice-transcript.js +103 -0
  255. package/dist/composer/realtime-voice-transcript.js.map +1 -0
  256. package/dist/composer/realtime-voice-transcript.spec.d.ts +2 -0
  257. package/dist/composer/realtime-voice-transcript.spec.d.ts.map +1 -0
  258. package/dist/composer/realtime-voice-transcript.spec.js +76 -0
  259. package/dist/composer/realtime-voice-transcript.spec.js.map +1 -0
  260. package/dist/composer/runtime-adapters.d.ts +169 -0
  261. package/dist/composer/runtime-adapters.d.ts.map +1 -0
  262. package/dist/composer/runtime-adapters.js +141 -0
  263. package/dist/composer/runtime-adapters.js.map +1 -0
  264. package/dist/composer/runtime-adapters.spec.d.ts +2 -0
  265. package/dist/composer/runtime-adapters.spec.d.ts.map +1 -0
  266. package/dist/composer/runtime-adapters.spec.js +69 -0
  267. package/dist/composer/runtime-adapters.spec.js.map +1 -0
  268. package/dist/composer/types.d.ts +60 -0
  269. package/dist/composer/types.d.ts.map +1 -0
  270. package/dist/composer/types.js +2 -0
  271. package/dist/composer/types.js.map +1 -0
  272. package/dist/composer/use-file-search.d.ts +6 -0
  273. package/dist/composer/use-file-search.d.ts.map +1 -0
  274. package/dist/composer/use-file-search.js +53 -0
  275. package/dist/composer/use-file-search.js.map +1 -0
  276. package/dist/composer/use-mention-search.d.ts +6 -0
  277. package/dist/composer/use-mention-search.d.ts.map +1 -0
  278. package/dist/composer/use-mention-search.js +75 -0
  279. package/dist/composer/use-mention-search.js.map +1 -0
  280. package/dist/composer/use-skills.d.ts +7 -0
  281. package/dist/composer/use-skills.d.ts.map +1 -0
  282. package/dist/composer/use-skills.js +40 -0
  283. package/dist/composer/use-skills.js.map +1 -0
  284. package/dist/composer/useRealtimeVoiceMode.d.ts +189 -0
  285. package/dist/composer/useRealtimeVoiceMode.d.ts.map +1 -0
  286. package/dist/composer/useRealtimeVoiceMode.js +1899 -0
  287. package/dist/composer/useRealtimeVoiceMode.js.map +1 -0
  288. package/dist/composer/useRealtimeVoiceMode.spec.d.ts +2 -0
  289. package/dist/composer/useRealtimeVoiceMode.spec.d.ts.map +1 -0
  290. package/dist/composer/useRealtimeVoiceMode.spec.js +716 -0
  291. package/dist/composer/useRealtimeVoiceMode.spec.js.map +1 -0
  292. package/dist/composer/useVoiceDictation.browser.spec.d.ts +2 -0
  293. package/dist/composer/useVoiceDictation.browser.spec.d.ts.map +1 -0
  294. package/dist/composer/useVoiceDictation.browser.spec.js +220 -0
  295. package/dist/composer/useVoiceDictation.browser.spec.js.map +1 -0
  296. package/dist/composer/useVoiceDictation.d.ts +58 -0
  297. package/dist/composer/useVoiceDictation.d.ts.map +1 -0
  298. package/dist/composer/useVoiceDictation.js +1058 -0
  299. package/dist/composer/useVoiceDictation.js.map +1 -0
  300. package/dist/composer/useVoiceDictation.spec.d.ts +2 -0
  301. package/dist/composer/useVoiceDictation.spec.d.ts.map +1 -0
  302. package/dist/composer/useVoiceDictation.spec.js +32 -0
  303. package/dist/composer/useVoiceDictation.spec.js.map +1 -0
  304. package/dist/conformance/__fixtures__/css-in-js-adapter.d.ts +7 -0
  305. package/dist/conformance/__fixtures__/css-in-js-adapter.d.ts.map +1 -0
  306. package/dist/conformance/__fixtures__/css-in-js-adapter.js +84 -0
  307. package/dist/conformance/__fixtures__/css-in-js-adapter.js.map +1 -0
  308. package/dist/conformance/conformance.spec.d.ts +2 -0
  309. package/dist/conformance/conformance.spec.d.ts.map +1 -0
  310. package/dist/conformance/conformance.spec.js +87 -0
  311. package/dist/conformance/conformance.spec.js.map +1 -0
  312. package/dist/conformance/index.d.ts +4 -0
  313. package/dist/conformance/index.d.ts.map +1 -0
  314. package/dist/conformance/index.js +4 -0
  315. package/dist/conformance/index.js.map +1 -0
  316. package/dist/conformance/runner.d.ts +12 -0
  317. package/dist/conformance/runner.d.ts.map +1 -0
  318. package/dist/conformance/runner.js +515 -0
  319. package/dist/conformance/runner.js.map +1 -0
  320. package/dist/conformance/types.d.ts +26 -0
  321. package/dist/conformance/types.d.ts.map +1 -0
  322. package/dist/conformance/types.js +13 -0
  323. package/dist/conformance/types.js.map +1 -0
  324. package/dist/conformance/version.d.ts +6 -0
  325. package/dist/conformance/version.d.ts.map +1 -0
  326. package/dist/conformance/version.js +14 -0
  327. package/dist/conformance/version.js.map +1 -0
  328. package/dist/context-ui/ContextMeter.d.ts +11 -0
  329. package/dist/context-ui/ContextMeter.d.ts.map +1 -0
  330. package/dist/context-ui/ContextMeter.js +40 -0
  331. package/dist/context-ui/ContextMeter.js.map +1 -0
  332. package/dist/context-ui/ContextMeter.spec.d.ts +2 -0
  333. package/dist/context-ui/ContextMeter.spec.d.ts.map +1 -0
  334. package/dist/context-ui/ContextMeter.spec.js +52 -0
  335. package/dist/context-ui/ContextMeter.spec.js.map +1 -0
  336. package/dist/context-ui/ContextSegmentRow.d.ts +16 -0
  337. package/dist/context-ui/ContextSegmentRow.d.ts.map +1 -0
  338. package/dist/context-ui/ContextSegmentRow.js +92 -0
  339. package/dist/context-ui/ContextSegmentRow.js.map +1 -0
  340. package/dist/context-ui/ContextTreemap.d.ts +8 -0
  341. package/dist/context-ui/ContextTreemap.d.ts.map +1 -0
  342. package/dist/context-ui/ContextTreemap.js +58 -0
  343. package/dist/context-ui/ContextTreemap.js.map +1 -0
  344. package/dist/context-ui/ContextXRayPanel.d.ts +14 -0
  345. package/dist/context-ui/ContextXRayPanel.d.ts.map +1 -0
  346. package/dist/context-ui/ContextXRayPanel.js +209 -0
  347. package/dist/context-ui/ContextXRayPanel.js.map +1 -0
  348. package/dist/context-ui/format.d.ts +6 -0
  349. package/dist/context-ui/format.d.ts.map +1 -0
  350. package/dist/context-ui/format.js +58 -0
  351. package/dist/context-ui/format.js.map +1 -0
  352. package/dist/context-ui/index.d.ts +7 -0
  353. package/dist/context-ui/index.d.ts.map +1 -0
  354. package/dist/context-ui/index.js +6 -0
  355. package/dist/context-ui/index.js.map +1 -0
  356. package/dist/context-ui/types.d.ts +41 -0
  357. package/dist/context-ui/types.d.ts.map +1 -0
  358. package/dist/context-ui/types.js +8 -0
  359. package/dist/context-ui/types.js.map +1 -0
  360. package/dist/dashboard/DataTable.d.ts +20 -0
  361. package/dist/dashboard/DataTable.d.ts.map +1 -0
  362. package/dist/dashboard/DataTable.js +87 -0
  363. package/dist/dashboard/DataTable.js.map +1 -0
  364. package/dist/dashboard/DateRangePicker.d.ts +15 -0
  365. package/dist/dashboard/DateRangePicker.d.ts.map +1 -0
  366. package/dist/dashboard/DateRangePicker.js +15 -0
  367. package/dist/dashboard/DateRangePicker.js.map +1 -0
  368. package/dist/dashboard/GenericChartPanel.d.ts +57 -0
  369. package/dist/dashboard/GenericChartPanel.d.ts.map +1 -0
  370. package/dist/dashboard/GenericChartPanel.js +119 -0
  371. package/dist/dashboard/GenericChartPanel.js.map +1 -0
  372. package/dist/dashboard/GenericChartPanel.spec.d.ts +2 -0
  373. package/dist/dashboard/GenericChartPanel.spec.d.ts.map +1 -0
  374. package/dist/dashboard/GenericChartPanel.spec.js +41 -0
  375. package/dist/dashboard/GenericChartPanel.spec.js.map +1 -0
  376. package/dist/dashboard/MetricCard.d.ts +14 -0
  377. package/dist/dashboard/MetricCard.d.ts.map +1 -0
  378. package/dist/dashboard/MetricCard.js +10 -0
  379. package/dist/dashboard/MetricCard.js.map +1 -0
  380. package/dist/dashboard/StatsCard.d.ts +16 -0
  381. package/dist/dashboard/StatsCard.d.ts.map +1 -0
  382. package/dist/dashboard/StatsCard.js +8 -0
  383. package/dist/dashboard/StatsCard.js.map +1 -0
  384. package/dist/dashboard/dashboard-layout.d.ts +49 -0
  385. package/dist/dashboard/dashboard-layout.d.ts.map +1 -0
  386. package/dist/dashboard/dashboard-layout.js +231 -0
  387. package/dist/dashboard/dashboard-layout.js.map +1 -0
  388. package/dist/dashboard/dashboard-layout.spec.d.ts +2 -0
  389. package/dist/dashboard/dashboard-layout.spec.d.ts.map +1 -0
  390. package/dist/dashboard/dashboard-layout.spec.js +52 -0
  391. package/dist/dashboard/dashboard-layout.spec.js.map +1 -0
  392. package/dist/dashboard/index.d.ts +7 -0
  393. package/dist/dashboard/index.d.ts.map +1 -0
  394. package/dist/dashboard/index.js +7 -0
  395. package/dist/dashboard/index.js.map +1 -0
  396. package/dist/data-grid/DataGrid.d.ts +92 -0
  397. package/dist/data-grid/DataGrid.d.ts.map +1 -0
  398. package/dist/data-grid/DataGrid.js +315 -0
  399. package/dist/data-grid/DataGrid.js.map +1 -0
  400. package/dist/data-grid/DataGrid.spec.d.ts +2 -0
  401. package/dist/data-grid/DataGrid.spec.d.ts.map +1 -0
  402. package/dist/data-grid/DataGrid.spec.js +134 -0
  403. package/dist/data-grid/DataGrid.spec.js.map +1 -0
  404. package/dist/data-grid/index.d.ts +2 -0
  405. package/dist/data-grid/index.d.ts.map +1 -0
  406. package/dist/data-grid/index.js +2 -0
  407. package/dist/data-grid/index.js.map +1 -0
  408. package/dist/design-system/components.d.ts +58 -0
  409. package/dist/design-system/components.d.ts.map +1 -0
  410. package/dist/design-system/components.js +88 -0
  411. package/dist/design-system/components.js.map +1 -0
  412. package/dist/design-system/context.d.ts +11 -0
  413. package/dist/design-system/context.d.ts.map +1 -0
  414. package/dist/design-system/context.js +17 -0
  415. package/dist/design-system/context.js.map +1 -0
  416. package/dist/design-system/default-adapter.d.ts +3 -0
  417. package/dist/design-system/default-adapter.d.ts.map +1 -0
  418. package/dist/design-system/default-adapter.js +172 -0
  419. package/dist/design-system/default-adapter.js.map +1 -0
  420. package/dist/design-system/default-adapter.spec.d.ts +2 -0
  421. package/dist/design-system/default-adapter.spec.d.ts.map +1 -0
  422. package/dist/design-system/default-adapter.spec.js +108 -0
  423. package/dist/design-system/default-adapter.spec.js.map +1 -0
  424. package/dist/design-system/definition.d.ts +9 -0
  425. package/dist/design-system/definition.d.ts.map +1 -0
  426. package/dist/design-system/definition.js +4 -0
  427. package/dist/design-system/definition.js.map +1 -0
  428. package/dist/design-system/design-system.spec.d.ts +2 -0
  429. package/dist/design-system/design-system.spec.d.ts.map +1 -0
  430. package/dist/design-system/design-system.spec.js +208 -0
  431. package/dist/design-system/design-system.spec.js.map +1 -0
  432. package/dist/design-system/error-boundary.d.ts +18 -0
  433. package/dist/design-system/error-boundary.d.ts.map +1 -0
  434. package/dist/design-system/error-boundary.js +16 -0
  435. package/dist/design-system/error-boundary.js.map +1 -0
  436. package/dist/design-system/index.d.ts +8 -0
  437. package/dist/design-system/index.d.ts.map +1 -0
  438. package/dist/design-system/index.js +8 -0
  439. package/dist/design-system/index.js.map +1 -0
  440. package/dist/design-system/theme.d.ts +30 -0
  441. package/dist/design-system/theme.d.ts.map +1 -0
  442. package/dist/design-system/theme.js +95 -0
  443. package/dist/design-system/theme.js.map +1 -0
  444. package/dist/design-system/theme.spec.d.ts +2 -0
  445. package/dist/design-system/theme.spec.d.ts.map +1 -0
  446. package/dist/design-system/theme.spec.js +43 -0
  447. package/dist/design-system/theme.spec.js.map +1 -0
  448. package/dist/design-system/types.d.ts +292 -0
  449. package/dist/design-system/types.d.ts.map +1 -0
  450. package/dist/design-system/types.js +2 -0
  451. package/dist/design-system/types.js.map +1 -0
  452. package/dist/design-tweaks/index.d.ts +2 -0
  453. package/dist/design-tweaks/index.d.ts.map +1 -0
  454. package/dist/design-tweaks/index.js +2 -0
  455. package/dist/design-tweaks/index.js.map +1 -0
  456. package/dist/design-tweaks/scrub-input-utils.d.ts +61 -0
  457. package/dist/design-tweaks/scrub-input-utils.d.ts.map +1 -0
  458. package/dist/design-tweaks/scrub-input-utils.js +235 -0
  459. package/dist/design-tweaks/scrub-input-utils.js.map +1 -0
  460. package/dist/design-tweaks/scrub-input.d.ts +70 -0
  461. package/dist/design-tweaks/scrub-input.d.ts.map +1 -0
  462. package/dist/design-tweaks/scrub-input.js +319 -0
  463. package/dist/design-tweaks/scrub-input.js.map +1 -0
  464. package/dist/design-tweaks/visual-style-controls.d.ts +90 -0
  465. package/dist/design-tweaks/visual-style-controls.d.ts.map +1 -0
  466. package/dist/design-tweaks/visual-style-controls.js +423 -0
  467. package/dist/design-tweaks/visual-style-controls.js.map +1 -0
  468. package/dist/design-tweaks/visual-style-controls.spec.d.ts +2 -0
  469. package/dist/design-tweaks/visual-style-controls.spec.d.ts.map +1 -0
  470. package/dist/design-tweaks/visual-style-controls.spec.js +84 -0
  471. package/dist/design-tweaks/visual-style-controls.spec.js.map +1 -0
  472. package/dist/editor/BubbleToolbar.d.ts +37 -0
  473. package/dist/editor/BubbleToolbar.d.ts.map +1 -0
  474. package/dist/editor/BubbleToolbar.js +171 -0
  475. package/dist/editor/BubbleToolbar.js.map +1 -0
  476. package/dist/editor/CodeBlockNode.d.ts +49 -0
  477. package/dist/editor/CodeBlockNode.d.ts.map +1 -0
  478. package/dist/editor/CodeBlockNode.js +127 -0
  479. package/dist/editor/CodeBlockNode.js.map +1 -0
  480. package/dist/editor/DragHandle.d.ts +103 -0
  481. package/dist/editor/DragHandle.d.ts.map +1 -0
  482. package/dist/editor/DragHandle.js +1101 -0
  483. package/dist/editor/DragHandle.js.map +1 -0
  484. package/dist/editor/DragHandle.spec.d.ts +2 -0
  485. package/dist/editor/DragHandle.spec.d.ts.map +1 -0
  486. package/dist/editor/DragHandle.spec.js +495 -0
  487. package/dist/editor/DragHandle.spec.js.map +1 -0
  488. package/dist/editor/ImageExtension.d.ts +63 -0
  489. package/dist/editor/ImageExtension.d.ts.map +1 -0
  490. package/dist/editor/ImageExtension.js +243 -0
  491. package/dist/editor/ImageExtension.js.map +1 -0
  492. package/dist/editor/ImageExtension.roundtrip.spec.d.ts +2 -0
  493. package/dist/editor/ImageExtension.roundtrip.spec.d.ts.map +1 -0
  494. package/dist/editor/ImageExtension.roundtrip.spec.js +103 -0
  495. package/dist/editor/ImageExtension.roundtrip.spec.js.map +1 -0
  496. package/dist/editor/RegistryBlockContext.d.ts +68 -0
  497. package/dist/editor/RegistryBlockContext.d.ts.map +1 -0
  498. package/dist/editor/RegistryBlockContext.js +10 -0
  499. package/dist/editor/RegistryBlockContext.js.map +1 -0
  500. package/dist/editor/RegistryBlockNode.d.ts +66 -0
  501. package/dist/editor/RegistryBlockNode.d.ts.map +1 -0
  502. package/dist/editor/RegistryBlockNode.js +406 -0
  503. package/dist/editor/RegistryBlockNode.js.map +1 -0
  504. package/dist/editor/RegistryBlockNode.spec.d.ts +2 -0
  505. package/dist/editor/RegistryBlockNode.spec.d.ts.map +1 -0
  506. package/dist/editor/RegistryBlockNode.spec.js +215 -0
  507. package/dist/editor/RegistryBlockNode.spec.js.map +1 -0
  508. package/dist/editor/RichMarkdownEditor.collab.spec.d.ts +2 -0
  509. package/dist/editor/RichMarkdownEditor.collab.spec.d.ts.map +1 -0
  510. package/dist/editor/RichMarkdownEditor.collab.spec.js +65 -0
  511. package/dist/editor/RichMarkdownEditor.collab.spec.js.map +1 -0
  512. package/dist/editor/RichMarkdownEditor.d.ts +52 -0
  513. package/dist/editor/RichMarkdownEditor.d.ts.map +1 -0
  514. package/dist/editor/RichMarkdownEditor.js +38 -0
  515. package/dist/editor/RichMarkdownEditor.js.map +1 -0
  516. package/dist/editor/RichMarkdownEditor.roundtrip.spec.d.ts +2 -0
  517. package/dist/editor/RichMarkdownEditor.roundtrip.spec.d.ts.map +1 -0
  518. package/dist/editor/RichMarkdownEditor.roundtrip.spec.js +186 -0
  519. package/dist/editor/RichMarkdownEditor.roundtrip.spec.js.map +1 -0
  520. package/dist/editor/RunId.d.ts +28 -0
  521. package/dist/editor/RunId.d.ts.map +1 -0
  522. package/dist/editor/RunId.js +60 -0
  523. package/dist/editor/RunId.js.map +1 -0
  524. package/dist/editor/SharedRichEditor.d.ts +112 -0
  525. package/dist/editor/SharedRichEditor.d.ts.map +1 -0
  526. package/dist/editor/SharedRichEditor.js +159 -0
  527. package/dist/editor/SharedRichEditor.js.map +1 -0
  528. package/dist/editor/SharedRichEditor.spec.d.ts +2 -0
  529. package/dist/editor/SharedRichEditor.spec.d.ts.map +1 -0
  530. package/dist/editor/SharedRichEditor.spec.js +63 -0
  531. package/dist/editor/SharedRichEditor.spec.js.map +1 -0
  532. package/dist/editor/SlashCommandMenu.d.ts +59 -0
  533. package/dist/editor/SlashCommandMenu.d.ts.map +1 -0
  534. package/dist/editor/SlashCommandMenu.js +279 -0
  535. package/dist/editor/SlashCommandMenu.js.map +1 -0
  536. package/dist/editor/SlashCommandMenu.spec.d.ts +2 -0
  537. package/dist/editor/SlashCommandMenu.spec.d.ts.map +1 -0
  538. package/dist/editor/SlashCommandMenu.spec.js +67 -0
  539. package/dist/editor/SlashCommandMenu.spec.js.map +1 -0
  540. package/dist/editor/disableHistory.spec.d.ts +2 -0
  541. package/dist/editor/disableHistory.spec.d.ts.map +1 -0
  542. package/dist/editor/disableHistory.spec.js +73 -0
  543. package/dist/editor/disableHistory.spec.js.map +1 -0
  544. package/dist/editor/extensions.d.ts +178 -0
  545. package/dist/editor/extensions.d.ts.map +1 -0
  546. package/dist/editor/extensions.js +264 -0
  547. package/dist/editor/extensions.js.map +1 -0
  548. package/dist/editor/gfmDoc.d.ts +24 -0
  549. package/dist/editor/gfmDoc.d.ts.map +1 -0
  550. package/dist/editor/gfmDoc.js +83 -0
  551. package/dist/editor/gfmDoc.js.map +1 -0
  552. package/dist/editor/gfmDoc.spec.d.ts +2 -0
  553. package/dist/editor/gfmDoc.spec.d.ts.map +1 -0
  554. package/dist/editor/gfmDoc.spec.js +194 -0
  555. package/dist/editor/gfmDoc.spec.js.map +1 -0
  556. package/dist/editor/index.d.ts +16 -0
  557. package/dist/editor/index.d.ts.map +1 -0
  558. package/dist/editor/index.js +15 -0
  559. package/dist/editor/index.js.map +1 -0
  560. package/dist/editor/registrySlashCommands.d.ts +68 -0
  561. package/dist/editor/registrySlashCommands.d.ts.map +1 -0
  562. package/dist/editor/registrySlashCommands.js +51 -0
  563. package/dist/editor/registrySlashCommands.js.map +1 -0
  564. package/dist/editor/structuralReorderUndo.spec.d.ts +2 -0
  565. package/dist/editor/structuralReorderUndo.spec.d.ts.map +1 -0
  566. package/dist/editor/structuralReorderUndo.spec.js +120 -0
  567. package/dist/editor/structuralReorderUndo.spec.js.map +1 -0
  568. package/dist/editor/surgical-apply.d.ts +66 -0
  569. package/dist/editor/surgical-apply.d.ts.map +1 -0
  570. package/dist/editor/surgical-apply.js +147 -0
  571. package/dist/editor/surgical-apply.js.map +1 -0
  572. package/dist/editor/surgical-apply.spec.d.ts +2 -0
  573. package/dist/editor/surgical-apply.spec.d.ts.map +1 -0
  574. package/dist/editor/surgical-apply.spec.js +257 -0
  575. package/dist/editor/surgical-apply.spec.js.map +1 -0
  576. package/dist/editor/useCollabReconcile.concurrent.spec.d.ts +2 -0
  577. package/dist/editor/useCollabReconcile.concurrent.spec.d.ts.map +1 -0
  578. package/dist/editor/useCollabReconcile.concurrent.spec.js +641 -0
  579. package/dist/editor/useCollabReconcile.concurrent.spec.js.map +1 -0
  580. package/dist/editor/useCollabReconcile.d.ts +117 -0
  581. package/dist/editor/useCollabReconcile.d.ts.map +1 -0
  582. package/dist/editor/useCollabReconcile.idempotent.spec.d.ts +2 -0
  583. package/dist/editor/useCollabReconcile.idempotent.spec.d.ts.map +1 -0
  584. package/dist/editor/useCollabReconcile.idempotent.spec.js +248 -0
  585. package/dist/editor/useCollabReconcile.idempotent.spec.js.map +1 -0
  586. package/dist/editor/useCollabReconcile.js +521 -0
  587. package/dist/editor/useCollabReconcile.js.map +1 -0
  588. package/dist/editor.css +587 -0
  589. package/dist/hooks/index.d.ts +3 -0
  590. package/dist/hooks/index.d.ts.map +1 -0
  591. package/dist/hooks/index.js +3 -0
  592. package/dist/hooks/index.js.map +1 -0
  593. package/dist/hooks/use-mobile.d.ts +2 -0
  594. package/dist/hooks/use-mobile.d.ts.map +1 -0
  595. package/dist/hooks/use-mobile.js +16 -0
  596. package/dist/hooks/use-mobile.js.map +1 -0
  597. package/dist/hooks/use-toast.d.ts +45 -0
  598. package/dist/hooks/use-toast.d.ts.map +1 -0
  599. package/dist/hooks/use-toast.js +127 -0
  600. package/dist/hooks/use-toast.js.map +1 -0
  601. package/dist/index.d.ts +11 -0
  602. package/dist/index.d.ts.map +1 -0
  603. package/dist/index.js +11 -0
  604. package/dist/index.js.map +1 -0
  605. package/dist/onboarding/index.d.ts +2 -0
  606. package/dist/onboarding/index.d.ts.map +1 -0
  607. package/dist/onboarding/index.js +2 -0
  608. package/dist/onboarding/index.js.map +1 -0
  609. package/dist/provider.d.ts +15 -0
  610. package/dist/provider.d.ts.map +1 -0
  611. package/dist/provider.js +60 -0
  612. package/dist/provider.js.map +1 -0
  613. package/dist/sharing/SharePrimitives.d.ts +42 -0
  614. package/dist/sharing/SharePrimitives.d.ts.map +1 -0
  615. package/dist/sharing/SharePrimitives.js +53 -0
  616. package/dist/sharing/SharePrimitives.js.map +1 -0
  617. package/dist/sharing/VisibilityBadge.d.ts +11 -0
  618. package/dist/sharing/VisibilityBadge.d.ts.map +1 -0
  619. package/dist/sharing/VisibilityBadge.js +19 -0
  620. package/dist/sharing/VisibilityBadge.js.map +1 -0
  621. package/dist/sharing/VisibilityBadge.spec.d.ts +2 -0
  622. package/dist/sharing/VisibilityBadge.spec.d.ts.map +1 -0
  623. package/dist/sharing/VisibilityBadge.spec.js +60 -0
  624. package/dist/sharing/VisibilityBadge.spec.js.map +1 -0
  625. package/dist/sharing/index.d.ts +3 -0
  626. package/dist/sharing/index.d.ts.map +1 -0
  627. package/dist/sharing/index.js +3 -0
  628. package/dist/sharing/index.js.map +1 -0
  629. package/dist/styles.css +232 -0
  630. package/dist/ui/accordion.d.ts +8 -0
  631. package/dist/ui/accordion.d.ts.map +1 -0
  632. package/dist/ui/accordion.js +14 -0
  633. package/dist/ui/accordion.js.map +1 -0
  634. package/dist/ui/alert-dialog.d.ts +21 -0
  635. package/dist/ui/alert-dialog.d.ts.map +1 -0
  636. package/dist/ui/alert-dialog.js +27 -0
  637. package/dist/ui/alert-dialog.js.map +1 -0
  638. package/dist/ui/alert.d.ts +9 -0
  639. package/dist/ui/alert.d.ts.map +1 -0
  640. package/dist/ui/alert.js +23 -0
  641. package/dist/ui/alert.js.map +1 -0
  642. package/dist/ui/aspect-ratio.d.ts +4 -0
  643. package/dist/ui/aspect-ratio.d.ts.map +1 -0
  644. package/dist/ui/aspect-ratio.js +4 -0
  645. package/dist/ui/aspect-ratio.js.map +1 -0
  646. package/dist/ui/avatar.d.ts +7 -0
  647. package/dist/ui/avatar.d.ts.map +1 -0
  648. package/dist/ui/avatar.js +12 -0
  649. package/dist/ui/avatar.js.map +1 -0
  650. package/dist/ui/badge.d.ts +10 -0
  651. package/dist/ui/badge.d.ts.map +1 -0
  652. package/dist/ui/badge.js +21 -0
  653. package/dist/ui/badge.js.map +1 -0
  654. package/dist/ui/breadcrumb.d.ts +20 -0
  655. package/dist/ui/breadcrumb.d.ts.map +1 -0
  656. package/dist/ui/breadcrumb.js +24 -0
  657. package/dist/ui/breadcrumb.js.map +1 -0
  658. package/dist/ui/button.d.ts +18 -0
  659. package/dist/ui/button.d.ts.map +1 -0
  660. package/dist/ui/button.js +67 -0
  661. package/dist/ui/button.js.map +1 -0
  662. package/dist/ui/calendar.d.ts +9 -0
  663. package/dist/ui/calendar.d.ts.map +1 -0
  664. package/dist/ui/calendar.js +74 -0
  665. package/dist/ui/calendar.js.map +1 -0
  666. package/dist/ui/card.d.ts +9 -0
  667. package/dist/ui/card.d.ts.map +1 -0
  668. package/dist/ui/card.js +17 -0
  669. package/dist/ui/card.js.map +1 -0
  670. package/dist/ui/carousel.d.ts +19 -0
  671. package/dist/ui/carousel.d.ts.map +1 -0
  672. package/dist/ui/carousel.js +99 -0
  673. package/dist/ui/carousel.js.map +1 -0
  674. package/dist/ui/chart.d.ts +80 -0
  675. package/dist/ui/chart.d.ts.map +1 -0
  676. package/dist/ui/chart.js +131 -0
  677. package/dist/ui/chart.js.map +1 -0
  678. package/dist/ui/checkbox.d.ts +5 -0
  679. package/dist/ui/checkbox.d.ts.map +1 -0
  680. package/dist/ui/checkbox.js +9 -0
  681. package/dist/ui/checkbox.js.map +1 -0
  682. package/dist/ui/collapsible.d.ts +6 -0
  683. package/dist/ui/collapsible.d.ts.map +1 -0
  684. package/dist/ui/collapsible.js +6 -0
  685. package/dist/ui/collapsible.js.map +1 -0
  686. package/dist/ui/command.d.ts +85 -0
  687. package/dist/ui/command.d.ts.map +1 -0
  688. package/dist/ui/command.js +29 -0
  689. package/dist/ui/command.js.map +1 -0
  690. package/dist/ui/command.spec.d.ts +2 -0
  691. package/dist/ui/command.spec.d.ts.map +1 -0
  692. package/dist/ui/command.spec.js +29 -0
  693. package/dist/ui/command.spec.js.map +1 -0
  694. package/dist/ui/context-menu.d.ts +28 -0
  695. package/dist/ui/context-menu.d.ts.map +1 -0
  696. package/dist/ui/context-menu.js +34 -0
  697. package/dist/ui/context-menu.js.map +1 -0
  698. package/dist/ui/date-picker.d.ts +10 -0
  699. package/dist/ui/date-picker.d.ts.map +1 -0
  700. package/dist/ui/date-picker.js +20 -0
  701. package/dist/ui/date-picker.js.map +1 -0
  702. package/dist/ui/dialog.d.ts +32 -0
  703. package/dist/ui/dialog.d.ts.map +1 -0
  704. package/dist/ui/dialog.js +26 -0
  705. package/dist/ui/dialog.js.map +1 -0
  706. package/dist/ui/dialog.spec.d.ts +2 -0
  707. package/dist/ui/dialog.spec.d.ts.map +1 -0
  708. package/dist/ui/dialog.spec.js +21 -0
  709. package/dist/ui/dialog.spec.js.map +1 -0
  710. package/dist/ui/drawer.d.ts +35 -0
  711. package/dist/ui/drawer.d.ts.map +1 -0
  712. package/dist/ui/drawer.js +25 -0
  713. package/dist/ui/drawer.js.map +1 -0
  714. package/dist/ui/dropdown-menu.d.ts +32 -0
  715. package/dist/ui/dropdown-menu.d.ts.map +1 -0
  716. package/dist/ui/dropdown-menu.js +42 -0
  717. package/dist/ui/dropdown-menu.js.map +1 -0
  718. package/dist/ui/form.d.ts +26 -0
  719. package/dist/ui/form.d.ts.map +1 -0
  720. package/dist/ui/form.js +63 -0
  721. package/dist/ui/form.js.map +1 -0
  722. package/dist/ui/hover-card.d.ts +7 -0
  723. package/dist/ui/hover-card.d.ts.map +1 -0
  724. package/dist/ui/hover-card.js +10 -0
  725. package/dist/ui/hover-card.js.map +1 -0
  726. package/dist/ui/index.d.ts +53 -0
  727. package/dist/ui/index.d.ts.map +1 -0
  728. package/dist/ui/index.js +53 -0
  729. package/dist/ui/index.js.map +1 -0
  730. package/dist/ui/input-otp.d.ts +35 -0
  731. package/dist/ui/input-otp.d.ts.map +1 -0
  732. package/dist/ui/input-otp.js +19 -0
  733. package/dist/ui/input-otp.js.map +1 -0
  734. package/dist/ui/input.d.ts +4 -0
  735. package/dist/ui/input.d.ts.map +1 -0
  736. package/dist/ui/input.js +9 -0
  737. package/dist/ui/input.js.map +1 -0
  738. package/dist/ui/label.d.ts +6 -0
  739. package/dist/ui/label.d.ts.map +1 -0
  740. package/dist/ui/label.js +10 -0
  741. package/dist/ui/label.js.map +1 -0
  742. package/dist/ui/logo.d.ts +7 -0
  743. package/dist/ui/logo.d.ts.map +1 -0
  744. package/dist/ui/logo.js +10 -0
  745. package/dist/ui/logo.js.map +1 -0
  746. package/dist/ui/menubar.d.ts +29 -0
  747. package/dist/ui/menubar.d.ts.map +1 -0
  748. package/dist/ui/menubar.js +36 -0
  749. package/dist/ui/menubar.js.map +1 -0
  750. package/dist/ui/navigation-menu.d.ts +13 -0
  751. package/dist/ui/navigation-menu.d.ts.map +1 -0
  752. package/dist/ui/navigation-menu.js +25 -0
  753. package/dist/ui/navigation-menu.js.map +1 -0
  754. package/dist/ui/pagination.d.ts +29 -0
  755. package/dist/ui/pagination.d.ts.map +1 -0
  756. package/dist/ui/pagination.js +24 -0
  757. package/dist/ui/pagination.js.map +1 -0
  758. package/dist/ui/popover.d.ts +11 -0
  759. package/dist/ui/popover.d.ts.map +1 -0
  760. package/dist/ui/popover.js +16 -0
  761. package/dist/ui/popover.js.map +1 -0
  762. package/dist/ui/progress.d.ts +5 -0
  763. package/dist/ui/progress.d.ts.map +1 -0
  764. package/dist/ui/progress.js +8 -0
  765. package/dist/ui/progress.js.map +1 -0
  766. package/dist/ui/radio-group.d.ts +6 -0
  767. package/dist/ui/radio-group.d.ts.map +1 -0
  768. package/dist/ui/radio-group.js +15 -0
  769. package/dist/ui/radio-group.js.map +1 -0
  770. package/dist/ui/resizable.d.ts +8 -0
  771. package/dist/ui/resizable.d.ts.map +1 -0
  772. package/dist/ui/resizable.js +9 -0
  773. package/dist/ui/resizable.js.map +1 -0
  774. package/dist/ui/scroll-area.d.ts +6 -0
  775. package/dist/ui/scroll-area.d.ts.map +1 -0
  776. package/dist/ui/scroll-area.js +12 -0
  777. package/dist/ui/scroll-area.js.map +1 -0
  778. package/dist/ui/select.d.ts +16 -0
  779. package/dist/ui/select.d.ts.map +1 -0
  780. package/dist/ui/select.js +27 -0
  781. package/dist/ui/select.js.map +1 -0
  782. package/dist/ui/separator.d.ts +5 -0
  783. package/dist/ui/separator.d.ts.map +1 -0
  784. package/dist/ui/separator.js +8 -0
  785. package/dist/ui/separator.js.map +1 -0
  786. package/dist/ui/sheet.d.ts +29 -0
  787. package/dist/ui/sheet.d.ts.map +1 -0
  788. package/dist/ui/sheet.js +37 -0
  789. package/dist/ui/sheet.js.map +1 -0
  790. package/dist/ui/sidebar.d.ts +71 -0
  791. package/dist/ui/sidebar.d.ts.map +1 -0
  792. package/dist/ui/sidebar.js +230 -0
  793. package/dist/ui/sidebar.js.map +1 -0
  794. package/dist/ui/skeleton.d.ts +3 -0
  795. package/dist/ui/skeleton.d.ts.map +1 -0
  796. package/dist/ui/skeleton.js +7 -0
  797. package/dist/ui/skeleton.js.map +1 -0
  798. package/dist/ui/slider.d.ts +5 -0
  799. package/dist/ui/slider.d.ts.map +1 -0
  800. package/dist/ui/slider.js +8 -0
  801. package/dist/ui/slider.js.map +1 -0
  802. package/dist/ui/sonner.d.ts +5 -0
  803. package/dist/ui/sonner.d.ts.map +1 -0
  804. package/dist/ui/sonner.js +25 -0
  805. package/dist/ui/sonner.js.map +1 -0
  806. package/dist/ui/spinner.d.ts +3 -0
  807. package/dist/ui/spinner.d.ts.map +1 -0
  808. package/dist/ui/spinner.js +7 -0
  809. package/dist/ui/spinner.js.map +1 -0
  810. package/dist/ui/switch.d.ts +5 -0
  811. package/dist/ui/switch.d.ts.map +1 -0
  812. package/dist/ui/switch.js +8 -0
  813. package/dist/ui/switch.js.map +1 -0
  814. package/dist/ui/table.d.ts +11 -0
  815. package/dist/ui/table.d.ts.map +1 -0
  816. package/dist/ui/table.js +21 -0
  817. package/dist/ui/table.js.map +1 -0
  818. package/dist/ui/tabs.d.ts +8 -0
  819. package/dist/ui/tabs.d.ts.map +1 -0
  820. package/dist/ui/tabs.js +13 -0
  821. package/dist/ui/tabs.js.map +1 -0
  822. package/dist/ui/textarea.d.ts +6 -0
  823. package/dist/ui/textarea.d.ts.map +1 -0
  824. package/dist/ui/textarea.js +9 -0
  825. package/dist/ui/textarea.js.map +1 -0
  826. package/dist/ui/toast.d.ts +16 -0
  827. package/dist/ui/toast.d.ts.map +1 -0
  828. package/dist/ui/toast.js +34 -0
  829. package/dist/ui/toast.js.map +1 -0
  830. package/dist/ui/toaster.d.ts +2 -0
  831. package/dist/ui/toaster.d.ts.map +1 -0
  832. package/dist/ui/toaster.js +10 -0
  833. package/dist/ui/toaster.js.map +1 -0
  834. package/dist/ui/toggle-group.d.ts +13 -0
  835. package/dist/ui/toggle-group.d.ts.map +1 -0
  836. package/dist/ui/toggle-group.js +21 -0
  837. package/dist/ui/toggle-group.js.map +1 -0
  838. package/dist/ui/toggle.d.ts +13 -0
  839. package/dist/ui/toggle.d.ts.map +1 -0
  840. package/dist/ui/toggle.js +26 -0
  841. package/dist/ui/toggle.js.map +1 -0
  842. package/dist/ui/tooltip.d.ts +11 -0
  843. package/dist/ui/tooltip.d.ts.map +1 -0
  844. package/dist/ui/tooltip.js +18 -0
  845. package/dist/ui/tooltip.js.map +1 -0
  846. package/dist/ui/use-toast.d.ts +3 -0
  847. package/dist/ui/use-toast.d.ts.map +1 -0
  848. package/dist/ui/use-toast.js +3 -0
  849. package/dist/ui/use-toast.js.map +1 -0
  850. package/dist/utils.d.ts +4 -0
  851. package/dist/utils.d.ts.map +1 -0
  852. package/dist/utils.js +7 -0
  853. package/dist/utils.js.map +1 -0
  854. package/migration-manifest.json +4 -0
  855. package/package.json +369 -0
  856. package/src/app-shell/header-actions.tsx +84 -0
  857. package/src/app-shell/index.ts +2 -0
  858. package/src/app-shell/sidebar-footer-actions.spec.tsx +81 -0
  859. package/src/app-shell/sidebar-footer-actions.tsx +45 -0
  860. package/src/canvas-annotations/CanvasCommentPins.tsx +861 -0
  861. package/src/canvas-annotations/DrawOverlay.spec.tsx +145 -0
  862. package/src/canvas-annotations/DrawOverlay.tsx +1233 -0
  863. package/src/canvas-annotations/index.ts +15 -0
  864. package/src/canvas-annotations/types.ts +14 -0
  865. package/src/canvas-interactions/canvas-interactions.spec.ts +765 -0
  866. package/src/canvas-interactions/canvas-interactions.ts +965 -0
  867. package/src/canvas-interactions/index.ts +67 -0
  868. package/src/chat-history/ChatHistoryList.spec.tsx +485 -0
  869. package/src/chat-history/ChatHistoryList.tsx +481 -0
  870. package/src/chat-history/ChatHistoryRail.spec.tsx +312 -0
  871. package/src/chat-history/ChatHistoryRail.tsx +150 -0
  872. package/src/chat-history/index.ts +21 -0
  873. package/src/chat-history/useChatHistoryRailController.spec.tsx +131 -0
  874. package/src/chat-history/useChatHistoryRailController.ts +76 -0
  875. package/src/chat-history.css +469 -0
  876. package/src/collab-ui/AgentPresenceChip.tsx +69 -0
  877. package/src/collab-ui/LiveCursorOverlay.tsx +241 -0
  878. package/src/collab-ui/PresenceBar.spec.tsx +44 -0
  879. package/src/collab-ui/PresenceBar.tsx +373 -0
  880. package/src/collab-ui/RecentEditHighlights.tsx +239 -0
  881. package/src/collab-ui/RemoteSelectionRings.tsx +227 -0
  882. package/src/collab-ui/agent-identity.ts +16 -0
  883. package/src/collab-ui/index.ts +39 -0
  884. package/src/collab-ui/lead-client.ts +32 -0
  885. package/src/collab-ui/types.spec.ts +18 -0
  886. package/src/collab-ui/types.ts +96 -0
  887. package/src/composer/AgentComposerFrame.tsx +62 -0
  888. package/src/composer/ComposerPlusMenu.spec.ts +14 -0
  889. package/src/composer/ComposerPlusMenu.tsx +1266 -0
  890. package/src/composer/MentionPopover.tsx +483 -0
  891. package/src/composer/PastedTextChip.spec.tsx +58 -0
  892. package/src/composer/PastedTextChip.tsx +178 -0
  893. package/src/composer/PromptComposer.spec.ts +110 -0
  894. package/src/composer/PromptComposer.tsx +796 -0
  895. package/src/composer/RealtimeVoiceMode.spec.tsx +998 -0
  896. package/src/composer/RealtimeVoiceMode.tsx +1019 -0
  897. package/src/composer/TiptapComposer.spec.ts +592 -0
  898. package/src/composer/TiptapComposer.tsx +3746 -0
  899. package/src/composer/VoiceButton.spec.ts +49 -0
  900. package/src/composer/VoiceButton.tsx +329 -0
  901. package/src/composer/asset-picker-url.spec.ts +56 -0
  902. package/src/composer/asset-picker-url.ts +80 -0
  903. package/src/composer/attachment-accept.spec.ts +32 -0
  904. package/src/composer/attachment-accept.ts +75 -0
  905. package/src/composer/draft-key.spec.ts +19 -0
  906. package/src/composer/draft-key.ts +7 -0
  907. package/src/composer/extensions/FileReference.tsx +55 -0
  908. package/src/composer/extensions/MentionReference.tsx +93 -0
  909. package/src/composer/extensions/SkillReference.tsx +56 -0
  910. package/src/composer/index.ts +86 -0
  911. package/src/composer/model-selection.spec.ts +45 -0
  912. package/src/composer/model-selection.ts +51 -0
  913. package/src/composer/pasted-text.spec.ts +162 -0
  914. package/src/composer/pasted-text.ts +160 -0
  915. package/src/composer/prompt-attachments.spec.ts +80 -0
  916. package/src/composer/prompt-attachments.ts +93 -0
  917. package/src/composer/realtime-voice-audio-level.spec.ts +47 -0
  918. package/src/composer/realtime-voice-audio-level.ts +65 -0
  919. package/src/composer/realtime-voice-transcript.spec.ts +95 -0
  920. package/src/composer/realtime-voice-transcript.ts +134 -0
  921. package/src/composer/runtime-adapters.spec.tsx +102 -0
  922. package/src/composer/runtime-adapters.tsx +364 -0
  923. package/src/composer/types.ts +66 -0
  924. package/src/composer/use-file-search.ts +64 -0
  925. package/src/composer/use-mention-search.ts +90 -0
  926. package/src/composer/use-skills.ts +45 -0
  927. package/src/composer/useRealtimeVoiceMode.spec.ts +952 -0
  928. package/src/composer/useRealtimeVoiceMode.tsx +2388 -0
  929. package/src/composer/useVoiceDictation.browser.spec.tsx +265 -0
  930. package/src/composer/useVoiceDictation.spec.ts +45 -0
  931. package/src/composer/useVoiceDictation.ts +1256 -0
  932. package/src/conformance/__fixtures__/css-in-js-adapter.tsx +401 -0
  933. package/src/conformance/conformance.spec.tsx +143 -0
  934. package/src/conformance/index.ts +3 -0
  935. package/src/conformance/runner.tsx +862 -0
  936. package/src/conformance/types.ts +45 -0
  937. package/src/conformance/version.ts +22 -0
  938. package/src/context-ui/ContextMeter.spec.tsx +73 -0
  939. package/src/context-ui/ContextMeter.tsx +131 -0
  940. package/src/context-ui/ContextSegmentRow.tsx +273 -0
  941. package/src/context-ui/ContextTreemap.tsx +131 -0
  942. package/src/context-ui/ContextXRayPanel.tsx +491 -0
  943. package/src/context-ui/format.ts +42 -0
  944. package/src/context-ui/index.ts +15 -0
  945. package/src/context-ui/types.ts +57 -0
  946. package/src/dashboard/DataTable.tsx +273 -0
  947. package/src/dashboard/DateRangePicker.tsx +57 -0
  948. package/src/dashboard/GenericChartPanel.spec.tsx +53 -0
  949. package/src/dashboard/GenericChartPanel.tsx +461 -0
  950. package/src/dashboard/MetricCard.tsx +54 -0
  951. package/src/dashboard/StatsCard.tsx +49 -0
  952. package/src/dashboard/dashboard-layout.spec.ts +79 -0
  953. package/src/dashboard/dashboard-layout.ts +329 -0
  954. package/src/dashboard/index.ts +6 -0
  955. package/src/data-grid/DataGrid.spec.tsx +243 -0
  956. package/src/data-grid/DataGrid.tsx +754 -0
  957. package/src/data-grid/index.ts +15 -0
  958. package/src/design-system/components.tsx +196 -0
  959. package/src/design-system/context.tsx +31 -0
  960. package/src/design-system/default-adapter.spec.tsx +158 -0
  961. package/src/design-system/default-adapter.tsx +923 -0
  962. package/src/design-system/definition.ts +14 -0
  963. package/src/design-system/design-system.spec.tsx +356 -0
  964. package/src/design-system/error-boundary.tsx +37 -0
  965. package/src/design-system/index.ts +7 -0
  966. package/src/design-system/theme.spec.ts +61 -0
  967. package/src/design-system/theme.ts +145 -0
  968. package/src/design-system/types.ts +367 -0
  969. package/src/design-tweaks/index.ts +1 -0
  970. package/src/design-tweaks/scrub-input-utils.ts +311 -0
  971. package/src/design-tweaks/scrub-input.tsx +525 -0
  972. package/src/design-tweaks/visual-style-controls.spec.tsx +172 -0
  973. package/src/design-tweaks/visual-style-controls.tsx +1043 -0
  974. package/src/editor/BubbleToolbar.tsx +253 -0
  975. package/src/editor/CodeBlockNode.tsx +254 -0
  976. package/src/editor/DragHandle.spec.ts +694 -0
  977. package/src/editor/DragHandle.ts +1491 -0
  978. package/src/editor/ImageExtension.roundtrip.spec.ts +117 -0
  979. package/src/editor/ImageExtension.ts +306 -0
  980. package/src/editor/RegistryBlockContext.tsx +107 -0
  981. package/src/editor/RegistryBlockNode.spec.ts +279 -0
  982. package/src/editor/RegistryBlockNode.tsx +652 -0
  983. package/src/editor/RichMarkdownEditor.collab.spec.ts +79 -0
  984. package/src/editor/RichMarkdownEditor.roundtrip.spec.ts +226 -0
  985. package/src/editor/RichMarkdownEditor.tsx +81 -0
  986. package/src/editor/RunId.ts +61 -0
  987. package/src/editor/SharedRichEditor.spec.tsx +82 -0
  988. package/src/editor/SharedRichEditor.tsx +353 -0
  989. package/src/editor/SlashCommandMenu.spec.ts +90 -0
  990. package/src/editor/SlashCommandMenu.tsx +396 -0
  991. package/src/editor/disableHistory.spec.ts +85 -0
  992. package/src/editor/extensions.ts +454 -0
  993. package/src/editor/gfmDoc.spec.ts +230 -0
  994. package/src/editor/gfmDoc.ts +92 -0
  995. package/src/editor/index.ts +96 -0
  996. package/src/editor/registrySlashCommands.ts +131 -0
  997. package/src/editor/structuralReorderUndo.spec.ts +144 -0
  998. package/src/editor/surgical-apply.spec.ts +279 -0
  999. package/src/editor/surgical-apply.ts +192 -0
  1000. package/src/editor/useCollabReconcile.concurrent.spec.ts +781 -0
  1001. package/src/editor/useCollabReconcile.idempotent.spec.ts +324 -0
  1002. package/src/editor/useCollabReconcile.ts +684 -0
  1003. package/src/editor.css +587 -0
  1004. package/src/hooks/index.ts +2 -0
  1005. package/src/hooks/use-mobile.tsx +21 -0
  1006. package/src/hooks/use-toast.ts +188 -0
  1007. package/src/index.ts +10 -0
  1008. package/src/onboarding/index.ts +1 -0
  1009. package/src/provider.tsx +148 -0
  1010. package/src/sharing/SharePrimitives.tsx +224 -0
  1011. package/src/sharing/VisibilityBadge.spec.ts +96 -0
  1012. package/src/sharing/VisibilityBadge.tsx +37 -0
  1013. package/src/sharing/index.ts +16 -0
  1014. package/src/styles.css +232 -0
  1015. package/src/ui/accordion.tsx +56 -0
  1016. package/src/ui/alert-dialog.tsx +141 -0
  1017. package/src/ui/alert.tsx +59 -0
  1018. package/src/ui/aspect-ratio.tsx +5 -0
  1019. package/src/ui/avatar.tsx +48 -0
  1020. package/src/ui/badge.tsx +37 -0
  1021. package/src/ui/breadcrumb.tsx +115 -0
  1022. package/src/ui/button.tsx +167 -0
  1023. package/src/ui/calendar.tsx +214 -0
  1024. package/src/ui/card.tsx +86 -0
  1025. package/src/ui/carousel.tsx +260 -0
  1026. package/src/ui/chart.tsx +375 -0
  1027. package/src/ui/checkbox.tsx +28 -0
  1028. package/src/ui/collapsible.tsx +9 -0
  1029. package/src/ui/command.spec.tsx +51 -0
  1030. package/src/ui/command.tsx +174 -0
  1031. package/src/ui/context-menu.tsx +202 -0
  1032. package/src/ui/date-picker.tsx +67 -0
  1033. package/src/ui/dialog.spec.tsx +43 -0
  1034. package/src/ui/dialog.tsx +171 -0
  1035. package/src/ui/drawer.tsx +126 -0
  1036. package/src/ui/dropdown-menu.tsx +222 -0
  1037. package/src/ui/form.tsx +177 -0
  1038. package/src/ui/hover-card.tsx +27 -0
  1039. package/src/ui/index.ts +52 -0
  1040. package/src/ui/input-otp.tsx +69 -0
  1041. package/src/ui/input.tsx +22 -0
  1042. package/src/ui/label.tsx +24 -0
  1043. package/src/ui/logo.tsx +36 -0
  1044. package/src/ui/menubar.tsx +235 -0
  1045. package/src/ui/navigation-menu.tsx +128 -0
  1046. package/src/ui/pagination.tsx +121 -0
  1047. package/src/ui/popover.tsx +58 -0
  1048. package/src/ui/progress.tsx +27 -0
  1049. package/src/ui/radio-group.tsx +42 -0
  1050. package/src/ui/resizable.tsx +43 -0
  1051. package/src/ui/scroll-area.tsx +46 -0
  1052. package/src/ui/select.tsx +162 -0
  1053. package/src/ui/separator.tsx +29 -0
  1054. package/src/ui/sheet.tsx +160 -0
  1055. package/src/ui/sidebar.tsx +776 -0
  1056. package/src/ui/skeleton.tsx +18 -0
  1057. package/src/ui/slider.tsx +26 -0
  1058. package/src/ui/sonner.tsx +58 -0
  1059. package/src/ui/spinner.tsx +17 -0
  1060. package/src/ui/switch.tsx +27 -0
  1061. package/src/ui/table.tsx +110 -0
  1062. package/src/ui/tabs.tsx +53 -0
  1063. package/src/ui/textarea.tsx +23 -0
  1064. package/src/ui/toast.tsx +127 -0
  1065. package/src/ui/toaster.tsx +33 -0
  1066. package/src/ui/toggle-group.tsx +59 -0
  1067. package/src/ui/toggle.tsx +43 -0
  1068. package/src/ui/tooltip.tsx +57 -0
  1069. package/src/ui/use-toast.ts +3 -0
  1070. package/src/utils.ts +8 -0
@@ -0,0 +1,1101 @@
1
+ import { Extension } from "@tiptap/core";
2
+ import { Plugin, PluginKey, NodeSelection, TextSelection, } from "@tiptap/pm/state";
3
+ /**
4
+ * Default editor-wrapper CSS selector the drag handle scopes itself to.
5
+ *
6
+ * The handle, the drop indicator, and the `position: relative` anchor are all
7
+ * appended to / measured against the closest ancestor matching this selector.
8
+ * Content's editor wraps its ProseMirror DOM in a `.visual-editor-wrapper`
9
+ * element, so that is the historical default. Other apps (e.g. the plan editor)
10
+ * pass their own wrapper selector via {@link DragHandleOptions.wrapperSelector}.
11
+ */
12
+ export const DEFAULT_DRAG_HANDLE_WRAPPER_SELECTOR = ".visual-editor-wrapper";
13
+ const dragHandleKey = new PluginKey("dragHandle");
14
+ const HOVER_SIDE_OUTSET_REM = 8;
15
+ // Notion-style side drop: drag a block to a neighbour's LEFT/RIGHT region and it
16
+ // builds (or joins) a column layout instead of reordering. The activation region
17
+ // has to be GENEROUS or the gesture is dead for a real human — a natural drag
18
+ // releases somewhere over the block's body, nowhere near a thin edge sliver. The
19
+ // old values (28% of width, capped at 140px, AND only the vertical middle 60%)
20
+ // left a wide ~820px plan block with two ~17%-of-width edge slivers in a 35px-tall
21
+ // band as the ONLY column targets — ~66% of the block (the whole centre) plus the
22
+ // top/bottom only ever reordered, so "drag side by side" essentially never made
23
+ // columns. Now each side claims ~a third of the width across the FULL block
24
+ // height, with a middle band always preserved for before/after reorder.
25
+ const SIDE_DROP_ZONE_RATIO = 0.33;
26
+ const SIDE_DROP_ZONE_MIN_PX = 56;
27
+ const SIDE_DROP_ZONE_MAX_PX = 320;
28
+ // Never let the two side zones swallow the whole block: keep at least the middle
29
+ // ~10% of the width as the before/after reorder band so dropping over the centre
30
+ // still moves the block above/below the target (Notion keeps reorder reachable).
31
+ const SIDE_DROP_ZONE_MAX_WIDTH_FRACTION = 0.45;
32
+ const DRAG_HANDLE_MENU_STYLE_ID = "an-rich-md-drag-menu-styles";
33
+ const DRAG_HANDLE_MENU_WIDTH = 220;
34
+ const DRAG_HANDLE_MENU_GAP = 6;
35
+ const DRAG_HANDLE_MENU_VIEWPORT_PADDING = 8;
36
+ /**
37
+ * Wraps Tabler outline icon path data in the standard 24×24 stroke SVG so the
38
+ * DOM-based block menu renders the same icons the React UI uses (Tabler is the
39
+ * framework-wide icon set). The editor is plain DOM, not React, so we inline the
40
+ * markup instead of importing `@tabler/icons-react` components.
41
+ */
42
+ const tablerIconSvg = (paths) => `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">${paths}</svg>`;
43
+ // Tabler `copy`, `trash`, and `plus` (outline). Path data copied verbatim from
44
+ // @tabler/icons so the glyphs stay pixel-identical to the React icon set.
45
+ const DRAG_HANDLE_MENU_ICON_DUPLICATE = tablerIconSvg('<path d="M7 9.667a2.667 2.667 0 0 1 2.667 -2.667h8.666a2.667 2.667 0 0 1 2.667 2.667v8.666a2.667 2.667 0 0 1 -2.667 2.667h-8.666a2.667 2.667 0 0 1 -2.667 -2.667l0 -8.666" /><path d="M4.012 16.737a2.005 2.005 0 0 1 -1.012 -1.737v-10c0 -1.1 .9 -2 2 -2h10c.75 0 1.158 .385 1.5 1" />');
46
+ const DRAG_HANDLE_MENU_ICON_DELETE = tablerIconSvg('<path d="M4 7l16 0" /><path d="M10 11l0 6" /><path d="M14 11l0 6" /><path d="M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12" /><path d="M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3" />');
47
+ const DRAG_HANDLE_MENU_ICON_INSERT = tablerIconSvg('<path d="M12 5l0 14" /><path d="M5 12l14 0" />');
48
+ // Tabler `grip-vertical` (outline) for the left-margin drag grip.
49
+ const DRAG_HANDLE_GRIP_ICON = tablerIconSvg('<path d="M8 5a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M8 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M8 19a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M14 5a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M14 12a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" /><path d="M14 19a1 1 0 1 0 2 0a1 1 0 1 0 -2 0" />');
50
+ const dragHandleRegistrations = new Set();
51
+ let dragHandleGlobalHoverListeners = 0;
52
+ let activeDragRegistration = null;
53
+ // The registration whose grip is currently shown. Used to keep that grip alive
54
+ // while the cursor travels from a block's body to its grip, even when the grip
55
+ // sits in a contested gap (an inter-column gap or a tab body's left offset)
56
+ // where another editor's wide forgiving zone would otherwise re-win the hover
57
+ // and hide the grip out from under the approaching cursor.
58
+ let activeHoverRegistration = null;
59
+ const clamp = (value, min, max) => Math.min(Math.max(value, min), max);
60
+ export const dragPreviewTransform = ({ clientX, clientY, pointerOffsetX, pointerOffsetY, }) => `translate3d(${clientX - pointerOffsetX}px, ${clientY - pointerOffsetY}px, 0)`;
61
+ const collapseAndBlurEditorAfterDrop = (view, preferredPos) => {
62
+ const pos = clamp(preferredPos, 0, view.state.doc.content.size);
63
+ const selection = TextSelection.near(view.state.doc.resolve(pos), 1);
64
+ if (!view.state.selection.eq(selection)) {
65
+ view.dispatch(view.state.tr.setSelection(selection));
66
+ }
67
+ const nativeSelection = window.getSelection();
68
+ const selectionBelongsToEditor = [
69
+ nativeSelection?.anchorNode,
70
+ nativeSelection?.focusNode,
71
+ ].some((node) => node && (node === view.dom || view.dom.contains(node)));
72
+ if (selectionBelongsToEditor) {
73
+ nativeSelection?.removeAllRanges();
74
+ }
75
+ const activeElement = document.activeElement;
76
+ if (activeElement instanceof HTMLElement &&
77
+ (activeElement === view.dom || view.dom.contains(activeElement))) {
78
+ activeElement.blur();
79
+ }
80
+ view.dom.blur();
81
+ };
82
+ const editorArea = (registration) => {
83
+ const rect = registration.view.dom.getBoundingClientRect();
84
+ return rect.width * rect.height;
85
+ };
86
+ const updateRegisteredHover = (clientX, clientY) => {
87
+ if (activeDragRegistration) {
88
+ for (const registration of dragHandleRegistrations) {
89
+ registration.hideHover?.();
90
+ }
91
+ activeHoverRegistration = null;
92
+ return;
93
+ }
94
+ const candidates = [];
95
+ for (const registration of dragHandleRegistrations) {
96
+ if (!registration.view.dom.isConnected || !registration.canHover?.()) {
97
+ registration.hideHover?.();
98
+ continue;
99
+ }
100
+ const block = registration.findHoverBlock?.(clientX, clientY);
101
+ if (block) {
102
+ candidates.push({ registration, block });
103
+ }
104
+ else {
105
+ registration.hideHover?.();
106
+ }
107
+ }
108
+ // Grip keepalive. Once a block's grip is showing, hold it while the cursor
109
+ // travels LEFT of that block's content toward its grip glyph — within the
110
+ // block's own vertical row and no further left than the glyph itself. This is
111
+ // what makes grips grabbable for blocks that are NOT flush with the page's
112
+ // left gutter (a right column, a tab body): their grip sits in a gap that the
113
+ // neighbour's wide forgiving zone also claims, so the normal picker would flip
114
+ // hover to the neighbour mid-approach and the grip would vanish before the
115
+ // cursor reaches it. The keepalive only bridges the body→grip gap — it does
116
+ // NOT fire while the cursor is over content (so the innermost/nested picking
117
+ // and gutter-grab rules below still decide there) and the row guard stops it
118
+ // from sticking the grip across vertical moves to another block's row.
119
+ if (activeHoverRegistration) {
120
+ const held = candidates.find((candidate) => candidate.registration === activeHoverRegistration);
121
+ const grip = activeHoverRegistration.gripRect?.();
122
+ if (held &&
123
+ grip &&
124
+ clientY >= held.block.rect.top &&
125
+ clientY < held.block.rect.bottom &&
126
+ clientX >= grip.left - 4 &&
127
+ clientX < held.block.rect.left) {
128
+ for (const registration of dragHandleRegistrations) {
129
+ if (registration !== held.registration)
130
+ registration.hideHover?.();
131
+ }
132
+ held.registration.showHoverBlock?.(held.block);
133
+ return;
134
+ }
135
+ }
136
+ // Pick which editor owns the grip when several register a hover block at this
137
+ // point. Nested region editors (e.g. each column inside a `columns` block) tile
138
+ // their container's whole footprint AND extend a wide forgiving zone
139
+ // (HOVER_SIDE_OUTSET_REM) into its left-margin gutter, so a pure
140
+ // "smallest editor wins" rule lets an inner block beat the container everywhere
141
+ // and leaves the container itself impossible to grab. Split candidates by where
142
+ // the cursor sits relative to each block:
143
+ // - Over a block's body (clientX at/after its left edge) the innermost
144
+ // (smallest) editor wins, so nested blocks stay grabbable from their content.
145
+ // - In the shared left-margin gutter (clientX left of every candidate's
146
+ // content, where the grip lives) the outermost (largest) editor wins, so the
147
+ // container block can be picked up and reordered.
148
+ // Prefer the candidate whose block actually sits UNDER the cursor
149
+ // horizontally. Without this, a left column's forgiving side zone reaches
150
+ // across the inter-column gap, ties the right column's editor on area, and
151
+ // wins — so hovering a right-column block shows the grip for the LEFT block
152
+ // (and right-column blocks appear to have no grip at all). `overContent`
153
+ // restricts to blocks the cursor is genuinely within; `rightOfLeftEdge` keeps
154
+ // the gutter-grab behaviour; fully left of every block → the container wins.
155
+ const overContent = candidates.filter((candidate) => clientX >= candidate.block.rect.left &&
156
+ clientX <= candidate.block.rect.right);
157
+ // The grip renders in a narrow band just LEFT of each block (≈24px). A block
158
+ // must OWN that band so moving the cursor onto its grip keeps showing (and
159
+ // lets you press) that block's grip — otherwise, for a column block whose grip
160
+ // sits in the gutter/inter-column gap, the "gutter → largest editor" rule
161
+ // below would flip the hover to the columns container and the grip would
162
+ // vanish out from under the cursor, making inner column blocks impossible to
163
+ // drag. The band is narrow, so it does not collide with the neighbouring
164
+ // column's content (the right column's grip lives in the inter-column gap,
165
+ // left of its own content but right of the left column's content).
166
+ const GRIP_HOVER_ZONE_PX = 28;
167
+ const overGrip = candidates.filter((candidate) => clientX >= candidate.block.rect.left - GRIP_HOVER_ZONE_PX &&
168
+ clientX < candidate.block.rect.left);
169
+ const rightOfLeftEdge = candidates.filter((candidate) => clientX >= candidate.block.rect.left);
170
+ let active;
171
+ const innerPool = overContent.length > 0
172
+ ? overContent
173
+ : overGrip.length > 0
174
+ ? overGrip
175
+ : rightOfLeftEdge;
176
+ if (innerPool.length > 0) {
177
+ innerPool.sort((a, b) => editorArea(a.registration) - editorArea(b.registration));
178
+ active = innerPool[0];
179
+ }
180
+ else {
181
+ candidates.sort((a, b) => editorArea(b.registration) - editorArea(a.registration));
182
+ active = candidates[0] ?? null;
183
+ }
184
+ for (const registration of dragHandleRegistrations) {
185
+ if (registration !== active?.registration)
186
+ registration.hideHover?.();
187
+ }
188
+ active?.registration.showHoverBlock?.(active.block);
189
+ activeHoverRegistration = active?.registration ?? null;
190
+ };
191
+ const handleGlobalHoverMove = (event) => {
192
+ updateRegisteredHover(event.clientX, event.clientY);
193
+ };
194
+ const retainGlobalHoverListener = () => {
195
+ dragHandleGlobalHoverListeners += 1;
196
+ if (dragHandleGlobalHoverListeners === 1) {
197
+ document.addEventListener("mousemove", handleGlobalHoverMove);
198
+ }
199
+ };
200
+ const releaseGlobalHoverListener = () => {
201
+ dragHandleGlobalHoverListeners = Math.max(0, dragHandleGlobalHoverListeners - 1);
202
+ if (dragHandleGlobalHoverListeners === 0) {
203
+ document.removeEventListener("mousemove", handleGlobalHoverMove);
204
+ }
205
+ };
206
+ const ensureDragHandleMenuStyles = () => {
207
+ if (document.getElementById(DRAG_HANDLE_MENU_STYLE_ID))
208
+ return;
209
+ const style = document.createElement("style");
210
+ style.id = DRAG_HANDLE_MENU_STYLE_ID;
211
+ style.textContent = `
212
+ .an-rich-md-drag-menu {
213
+ position: fixed;
214
+ z-index: 9999;
215
+ width: ${DRAG_HANDLE_MENU_WIDTH}px;
216
+ padding: 4px;
217
+ border: 1px solid hsl(var(--border, 214.3 31.8% 91.4%));
218
+ border-radius: 7px;
219
+ background: hsl(var(--popover, 0 0% 100%));
220
+ color: hsl(var(--popover-foreground, var(--foreground, 222.2 84% 4.9%)));
221
+ box-shadow:
222
+ 0 12px 32px rgb(15 23 42 / 0.16),
223
+ 0 2px 8px rgb(15 23 42 / 0.08);
224
+ font-family: inherit;
225
+ font-size: 13px;
226
+ line-height: 1.35;
227
+ }
228
+
229
+ .an-rich-md-drag-menu__item {
230
+ display: flex;
231
+ width: 100%;
232
+ align-items: center;
233
+ gap: 9px;
234
+ border: 0;
235
+ border-radius: 5px;
236
+ background: transparent;
237
+ color: inherit;
238
+ cursor: pointer;
239
+ font: inherit;
240
+ letter-spacing: 0;
241
+ padding: 7px 8px;
242
+ text-align: left;
243
+ }
244
+
245
+ .an-rich-md-drag-menu__item:hover,
246
+ .an-rich-md-drag-menu__item:focus-visible {
247
+ background: hsl(var(--accent, 210 40% 96.1%));
248
+ color: hsl(var(--accent-foreground, var(--foreground, 222.2 84% 4.9%)));
249
+ outline: none;
250
+ }
251
+
252
+ .an-rich-md-drag-menu__item[data-danger="true"] {
253
+ color: hsl(var(--destructive, 0 84.2% 60.2%));
254
+ }
255
+
256
+ .an-rich-md-drag-menu__item[data-danger="true"]:hover,
257
+ .an-rich-md-drag-menu__item[data-danger="true"]:focus-visible {
258
+ background: hsl(var(--destructive, 0 84.2% 60.2%) / 0.1);
259
+ }
260
+
261
+ .an-rich-md-drag-menu__icon {
262
+ display: flex;
263
+ flex: 0 0 auto;
264
+ align-items: center;
265
+ justify-content: center;
266
+ width: 18px;
267
+ height: 18px;
268
+ color: hsl(var(--muted-foreground, 215.4 16.3% 46.9%));
269
+ }
270
+
271
+ .an-rich-md-drag-menu__item[data-danger="true"] .an-rich-md-drag-menu__icon {
272
+ color: currentColor;
273
+ }
274
+
275
+ .an-rich-md-drag-menu__icon svg {
276
+ width: 17px;
277
+ height: 17px;
278
+ }
279
+
280
+ .an-rich-md-drag-menu__label {
281
+ min-width: 0;
282
+ overflow: hidden;
283
+ text-overflow: ellipsis;
284
+ white-space: nowrap;
285
+ }
286
+ `;
287
+ document.head.appendChild(style);
288
+ };
289
+ /**
290
+ * App-agnostic Tiptap extension providing a Notion-style left-margin drag grip
291
+ * (the `::` handle), block selection, and drag-to-reorder over top-level block
292
+ * nodes.
293
+ *
294
+ * Behavior:
295
+ * - On hover over any top-level block, a `.drag-handle` grip appears in the left
296
+ * margin (forgiving hit zone extends {@link HOVER_SIDE_OUTSET_REM}rem to the
297
+ * sides and into the gap above/between blocks).
298
+ * - Single-clicking the grip selects the block and opens a block action menu.
299
+ * Dragging past a small threshold starts a reorder, showing a floating clone
300
+ * preview (`.notion-drag-preview`) and a `.notion-drop-indicator` line.
301
+ * `Escape` cancels.
302
+ * - While dragging, the source block carries `.notion-block--dragging` and the
303
+ * document element carries `.notion-editor-is-dragging` so apps can style the
304
+ * in-flight state. Apps own all of these CSS class names.
305
+ * - Works for ANY top-level node ProseMirror renders as a direct child of the
306
+ * editor — including `group: "block"`, `draggable: true` atoms such as the
307
+ * plan editor's `planBlock`.
308
+ *
309
+ * The only app-specific coupling — the editor wrapper element the handle and
310
+ * drop indicator are anchored to — is configurable via
311
+ * {@link DragHandleOptions.wrapperSelector}, defaulting to
312
+ * {@link DEFAULT_DRAG_HANDLE_WRAPPER_SELECTOR} (`.visual-editor-wrapper`) so the
313
+ * Content editor keeps working byte-identically. The plan editor passes its own
314
+ * wrapper selector via `DragHandle.configure({ wrapperSelector })`.
315
+ */
316
+ export const DragHandle = Extension.create({
317
+ name: "dragHandle",
318
+ addOptions() {
319
+ return {
320
+ wrapperSelector: DEFAULT_DRAG_HANDLE_WRAPPER_SELECTOR,
321
+ getDragTransferData: undefined,
322
+ receiveDragTransferData: undefined,
323
+ };
324
+ },
325
+ addProseMirrorPlugins() {
326
+ const editor = this.editor;
327
+ const wrapperSelector = this.options.wrapperSelector;
328
+ const getDragTransferData = this.options.getDragTransferData;
329
+ const receiveDragTransferData = this.options.receiveDragTransferData;
330
+ const handleDrop = this.options.handleDrop;
331
+ let handle = null;
332
+ let menu = null;
333
+ let menuContext = null;
334
+ let currentBlock = null;
335
+ let dragStartPos = null;
336
+ let dragSession = null;
337
+ let currentRegistration = null;
338
+ const getHoverSideOutset = () => {
339
+ const rootFontSize = Number.parseFloat(getComputedStyle(document.documentElement).fontSize);
340
+ return ((Number.isFinite(rootFontSize) ? rootFontSize : 16) *
341
+ HOVER_SIDE_OUTSET_REM);
342
+ };
343
+ const getTopLevelBlocks = (editorView) => {
344
+ const blocks = [];
345
+ editorView.state.doc.forEach((_node, offset) => {
346
+ const dom = editorView.nodeDOM(offset);
347
+ if (!(dom instanceof HTMLElement))
348
+ return;
349
+ blocks.push({
350
+ node: dom,
351
+ pmPos: offset,
352
+ rect: dom.getBoundingClientRect(),
353
+ });
354
+ });
355
+ return blocks;
356
+ };
357
+ const registrationForView = (editorView) => {
358
+ for (const registration of dragHandleRegistrations) {
359
+ if (registration.view === editorView)
360
+ return registration;
361
+ }
362
+ return null;
363
+ };
364
+ const findForgivingBlock = (editorView, clientX, clientY) => {
365
+ const blocks = getTopLevelBlocks(editorView);
366
+ if (blocks.length === 0)
367
+ return null;
368
+ const sideOutset = getHoverSideOutset();
369
+ const pageLeft = 0;
370
+ const pageRight = window.visualViewport?.width ?? window.innerWidth;
371
+ for (let index = 0; index < blocks.length; index++) {
372
+ const block = blocks[index];
373
+ const nextBlock = blocks[index + 1];
374
+ const blockBottomGap = nextBlock
375
+ ? Math.max(0, nextBlock.rect.top - block.rect.bottom)
376
+ : 0;
377
+ const zoneLeft = Math.max(pageLeft, block.rect.left - sideOutset);
378
+ const zoneRight = Math.min(pageRight, block.rect.right + sideOutset);
379
+ const zoneTop = index === 0
380
+ ? Math.max(0, block.rect.top - blockBottomGap)
381
+ : block.rect.top;
382
+ const zoneBottom = nextBlock ? nextBlock.rect.top : block.rect.bottom;
383
+ if (clientX >= zoneLeft &&
384
+ clientX <= zoneRight &&
385
+ clientY >= zoneTop &&
386
+ clientY < zoneBottom) {
387
+ return block;
388
+ }
389
+ }
390
+ return null;
391
+ };
392
+ const showHandleForBlock = (editorView, block) => {
393
+ if (!handle)
394
+ return;
395
+ currentBlock = block.node;
396
+ dragStartPos = block.pmPos;
397
+ const wrapper = editorView.dom.closest(wrapperSelector);
398
+ if (!wrapper)
399
+ return;
400
+ // Lazily (re)attach the grip the first time a wrapper is actually
401
+ // available. At plugin `view()` init the editor DOM may not yet be mounted
402
+ // inside the wrapper (React mounts `EditorContent` after the EditorView is
403
+ // constructed), so the init-time append can silently no-op and leave the
404
+ // grip orphaned. Re-home it here once the wrapper exists.
405
+ if (handle.parentElement !== wrapper) {
406
+ wrapper.style.position = "relative";
407
+ wrapper.appendChild(handle);
408
+ }
409
+ const wrapperRect = wrapper.getBoundingClientRect();
410
+ const handleLeft = block.rect.left - wrapperRect.left - 24;
411
+ handle.style.display = "flex";
412
+ handle.style.top = `${block.rect.top - wrapperRect.top + 2}px`;
413
+ handle.style.left = `${handleLeft}px`;
414
+ };
415
+ const selectBlockAt = (editorView, pos) => {
416
+ try {
417
+ const sel = NodeSelection.create(editorView.state.doc, pos);
418
+ editorView.dispatch(editorView.state.tr.setSelection(sel));
419
+ editorView.focus();
420
+ return sel;
421
+ }
422
+ catch {
423
+ return null;
424
+ }
425
+ };
426
+ const cleanupDragVisuals = () => {
427
+ dragSession?.preview?.remove();
428
+ dragSession?.dropLine?.remove();
429
+ dragSession?.sourceBlock.classList.remove("notion-block--dragging");
430
+ document.documentElement.classList.remove("notion-editor-is-dragging");
431
+ };
432
+ const createDragPreview = (block) => {
433
+ const blockRect = block.getBoundingClientRect();
434
+ const preview = document.createElement("div");
435
+ const clone = block.cloneNode(true);
436
+ clone.classList.remove("ProseMirror-selectednode", "notion-block--dragging");
437
+ clone.removeAttribute("contenteditable");
438
+ clone.style.background = "transparent";
439
+ clone.style.backgroundColor = "transparent";
440
+ clone.querySelectorAll("[contenteditable]").forEach((node) => {
441
+ node.removeAttribute("contenteditable");
442
+ });
443
+ clone.querySelectorAll("*").forEach((node) => {
444
+ node.style.background = "transparent";
445
+ node.style.backgroundColor = "transparent";
446
+ });
447
+ preview.className = "notion-drag-preview";
448
+ preview.style.width = `${blockRect.width}px`;
449
+ preview.appendChild(clone);
450
+ document.body.appendChild(preview);
451
+ return preview;
452
+ };
453
+ const createDropLine = (registration) => {
454
+ const wrapper = registration.view.dom.closest(registration.wrapperSelector);
455
+ if (!wrapper)
456
+ return null;
457
+ const line = document.createElement("div");
458
+ line.className = "notion-drop-indicator";
459
+ wrapper.appendChild(line);
460
+ return line;
461
+ };
462
+ const forceHideHandle = () => {
463
+ if (handle) {
464
+ handle.style.display = "none";
465
+ handle.setAttribute("aria-expanded", "false");
466
+ }
467
+ currentBlock = null;
468
+ dragStartPos = null;
469
+ };
470
+ const closeMenu = ({ hideGrip = false } = {}) => {
471
+ menu?.remove();
472
+ menu = null;
473
+ menuContext = null;
474
+ handle?.setAttribute("aria-expanded", "false");
475
+ document.removeEventListener("mousedown", handleMenuDocumentMouseDown, {
476
+ capture: true,
477
+ });
478
+ document.removeEventListener("keydown", handleMenuKeyDown, {
479
+ capture: true,
480
+ });
481
+ window.removeEventListener("resize", handleMenuViewportChange);
482
+ window.removeEventListener("scroll", handleMenuViewportChange, {
483
+ capture: true,
484
+ });
485
+ if (hideGrip)
486
+ forceHideHandle();
487
+ };
488
+ const resolveMenuContext = (context) => {
489
+ const latestBlock = getTopLevelBlocks(context.view).find((block) => block.node === context.sourceBlock);
490
+ const sourcePos = latestBlock?.pmPos ?? context.sourcePos;
491
+ const sourceNode = context.view.state.doc.nodeAt(sourcePos);
492
+ if (!sourceNode)
493
+ return null;
494
+ return {
495
+ ...context,
496
+ sourcePos,
497
+ sourceNode,
498
+ sourceNodeSize: sourceNode.nodeSize,
499
+ };
500
+ };
501
+ const focusSelectionNear = (view, tr, pos, bias) => {
502
+ tr.setSelection(TextSelection.near(tr.doc.resolve(clamp(pos, 0, tr.doc.content.size)), bias));
503
+ view.dispatch(tr.scrollIntoView());
504
+ view.focus();
505
+ };
506
+ const duplicateBlock = (context) => {
507
+ const resolved = resolveMenuContext(context);
508
+ if (!resolved)
509
+ return;
510
+ const insertPos = resolved.sourcePos + resolved.sourceNodeSize;
511
+ const tr = resolved.view.state.tr.insert(insertPos, resolved.sourceNode);
512
+ try {
513
+ tr.setSelection(NodeSelection.create(tr.doc, insertPos));
514
+ resolved.view.dispatch(tr.scrollIntoView());
515
+ resolved.view.focus();
516
+ }
517
+ catch {
518
+ focusSelectionNear(resolved.view, tr, insertPos, 1);
519
+ }
520
+ };
521
+ const deleteBlock = (context) => {
522
+ const resolved = resolveMenuContext(context);
523
+ if (!resolved)
524
+ return;
525
+ const { view, sourcePos, sourceNodeSize } = resolved;
526
+ const paragraph = view.state.schema.nodes.paragraph;
527
+ const sourceEnd = sourcePos + sourceNodeSize;
528
+ if (view.state.doc.childCount <= 1 && paragraph) {
529
+ const replacement = paragraph.createAndFill() ?? paragraph.create();
530
+ const tr = view.state.tr.replaceWith(sourcePos, sourceEnd, replacement);
531
+ focusSelectionNear(view, tr, sourcePos + 1, 1);
532
+ return;
533
+ }
534
+ const tr = view.state.tr.delete(sourcePos, sourceEnd);
535
+ const selectionBias = sourcePos >= tr.doc.content.size ? -1 : 1;
536
+ focusSelectionNear(view, tr, sourcePos, selectionBias);
537
+ };
538
+ const insertParagraphBelow = (context) => {
539
+ const resolved = resolveMenuContext(context);
540
+ const paragraph = resolved?.view.state.schema.nodes.paragraph;
541
+ if (!resolved || !paragraph)
542
+ return;
543
+ const insertPos = resolved.sourcePos + resolved.sourceNodeSize;
544
+ const paragraphNode = paragraph.createAndFill() ?? paragraph.create();
545
+ const tr = resolved.view.state.tr.insert(insertPos, paragraphNode);
546
+ tr.setSelection(TextSelection.create(tr.doc, insertPos + 1));
547
+ resolved.view.dispatch(tr.scrollIntoView());
548
+ resolved.view.focus();
549
+ };
550
+ const positionMenu = (anchorRect) => {
551
+ if (!menu)
552
+ return;
553
+ const viewportWidth = window.visualViewport?.width ?? window.innerWidth;
554
+ const viewportHeight = window.visualViewport?.height ?? window.innerHeight;
555
+ const menuHeight = menu.offsetHeight || 118;
556
+ const preferredLeft = anchorRect.right + DRAG_HANDLE_MENU_GAP;
557
+ const alternateLeft = anchorRect.left - DRAG_HANDLE_MENU_WIDTH - DRAG_HANDLE_MENU_GAP;
558
+ const left = preferredLeft +
559
+ DRAG_HANDLE_MENU_WIDTH +
560
+ DRAG_HANDLE_MENU_VIEWPORT_PADDING <=
561
+ viewportWidth
562
+ ? preferredLeft
563
+ : alternateLeft;
564
+ menu.style.left = `${clamp(left, DRAG_HANDLE_MENU_VIEWPORT_PADDING, viewportWidth -
565
+ DRAG_HANDLE_MENU_WIDTH -
566
+ DRAG_HANDLE_MENU_VIEWPORT_PADDING)}px`;
567
+ menu.style.top = `${clamp(anchorRect.top - 4, DRAG_HANDLE_MENU_VIEWPORT_PADDING, viewportHeight - menuHeight - DRAG_HANDLE_MENU_VIEWPORT_PADDING)}px`;
568
+ };
569
+ const createMenuItem = (label, iconSvg, action, options = {}) => {
570
+ const button = document.createElement("button");
571
+ button.type = "button";
572
+ button.className = "an-rich-md-drag-menu__item";
573
+ button.setAttribute("role", "menuitem");
574
+ button.setAttribute("data-plan-interactive", "true");
575
+ if (options.danger)
576
+ button.setAttribute("data-danger", "true");
577
+ const icon = document.createElement("span");
578
+ icon.className = "an-rich-md-drag-menu__icon";
579
+ icon.setAttribute("aria-hidden", "true");
580
+ icon.innerHTML = iconSvg;
581
+ const labelElement = document.createElement("span");
582
+ labelElement.className = "an-rich-md-drag-menu__label";
583
+ labelElement.textContent = label;
584
+ button.append(icon, labelElement);
585
+ button.addEventListener("mousedown", (event) => {
586
+ event.preventDefault();
587
+ });
588
+ button.addEventListener("click", (event) => {
589
+ event.preventDefault();
590
+ event.stopPropagation();
591
+ const context = menuContext;
592
+ if (!context)
593
+ return;
594
+ closeMenu({ hideGrip: true });
595
+ action(context);
596
+ });
597
+ return button;
598
+ };
599
+ const openMenu = (context, anchorRect) => {
600
+ const resolved = resolveMenuContext(context);
601
+ if (!resolved)
602
+ return;
603
+ closeMenu();
604
+ selectBlockAt(resolved.view, resolved.sourcePos);
605
+ ensureDragHandleMenuStyles();
606
+ const el = document.createElement("div");
607
+ el.className = "an-rich-md-drag-menu";
608
+ el.setAttribute("role", "menu");
609
+ el.setAttribute("aria-label", "Block actions");
610
+ el.setAttribute("data-plan-interactive", "true");
611
+ el.append(createMenuItem("Duplicate", DRAG_HANDLE_MENU_ICON_DUPLICATE, duplicateBlock), createMenuItem("Delete", DRAG_HANDLE_MENU_ICON_DELETE, deleteBlock, {
612
+ danger: true,
613
+ }), createMenuItem("Insert block below", DRAG_HANDLE_MENU_ICON_INSERT, insertParagraphBelow));
614
+ menu = el;
615
+ menuContext = {
616
+ view: resolved.view,
617
+ sourceBlock: resolved.sourceBlock,
618
+ sourcePos: resolved.sourcePos,
619
+ sourceNodeSize: resolved.sourceNodeSize,
620
+ };
621
+ document.body.appendChild(el);
622
+ positionMenu(anchorRect);
623
+ handle?.setAttribute("aria-expanded", "true");
624
+ document.addEventListener("mousedown", handleMenuDocumentMouseDown, {
625
+ capture: true,
626
+ });
627
+ document.addEventListener("keydown", handleMenuKeyDown, {
628
+ capture: true,
629
+ });
630
+ window.addEventListener("resize", handleMenuViewportChange);
631
+ window.addEventListener("scroll", handleMenuViewportChange, {
632
+ capture: true,
633
+ });
634
+ el.querySelector("button")?.focus({
635
+ preventScroll: true,
636
+ });
637
+ };
638
+ const findDropTarget = (registration, clientX, clientY) => {
639
+ const view = registration.view;
640
+ const block = findForgivingBlock(view, clientX, clientY);
641
+ if (!block)
642
+ return null;
643
+ const node = view.state.doc.nodeAt(block.pmPos);
644
+ if (!node)
645
+ return null;
646
+ let placement;
647
+ const withinBlockY = clientY >= block.rect.top && clientY <= block.rect.bottom;
648
+ // Side (column) zones span the FULL block height — only the horizontal
649
+ // position decides column-vs-reorder. Restricting to the vertical middle
650
+ // (the old 0.2 band) made the already-tiny edge slivers nearly unhittable.
651
+ const sideZoneWidth = Math.min(clamp(block.rect.width * SIDE_DROP_ZONE_RATIO, SIDE_DROP_ZONE_MIN_PX, SIDE_DROP_ZONE_MAX_PX), block.rect.width * SIDE_DROP_ZONE_MAX_WIDTH_FRACTION);
652
+ if (registration.handleDrop &&
653
+ withinBlockY &&
654
+ clientX <= block.rect.left + sideZoneWidth) {
655
+ placement = "left";
656
+ }
657
+ else if (registration.handleDrop &&
658
+ withinBlockY &&
659
+ clientX >= block.rect.right - sideZoneWidth) {
660
+ placement = "right";
661
+ }
662
+ else {
663
+ placement =
664
+ clientY < block.rect.top ||
665
+ (clientY <= block.rect.bottom &&
666
+ clientY < block.rect.top + block.rect.height / 2)
667
+ ? "before"
668
+ : "after";
669
+ }
670
+ const before = placement === "before" || placement === "left";
671
+ return {
672
+ registration,
673
+ view,
674
+ block: block.node,
675
+ placement,
676
+ pos: before ? block.pmPos : block.pmPos + node.nodeSize,
677
+ targetPos: block.pmPos,
678
+ targetNodeSize: node.nodeSize,
679
+ rect: block.rect,
680
+ };
681
+ };
682
+ const findAnyDropTarget = (session, clientX, clientY) => {
683
+ const candidates = [];
684
+ for (const registration of dragHandleRegistrations) {
685
+ if (!registration.view.dom.isConnected)
686
+ continue;
687
+ if (registration.view !== session.view &&
688
+ session.sourceBlock.contains(registration.view.dom)) {
689
+ continue;
690
+ }
691
+ const target = findDropTarget(registration, clientX, clientY);
692
+ if (target)
693
+ candidates.push(target);
694
+ }
695
+ candidates.sort((a, b) => {
696
+ const aRect = a.view.dom.getBoundingClientRect();
697
+ const bRect = b.view.dom.getBoundingClientRect();
698
+ return aRect.width * aRect.height - bRect.width * bRect.height;
699
+ });
700
+ return candidates[0] ?? null;
701
+ };
702
+ const positionDragPreview = (session, clientX, clientY) => {
703
+ if (!session.preview)
704
+ return;
705
+ session.preview.style.transform = dragPreviewTransform({
706
+ clientX,
707
+ clientY,
708
+ pointerOffsetX: session.pointerOffsetX,
709
+ pointerOffsetY: session.pointerOffsetY,
710
+ });
711
+ };
712
+ const updateDropLine = (session, target) => {
713
+ const sourceEnd = session.sourcePos + session.sourceNodeSize;
714
+ const isSideDrop = target?.placement === "left" || target?.placement === "right";
715
+ if (!target ||
716
+ (target.view === session.view &&
717
+ (isSideDrop
718
+ ? // A side drop only ever builds columns; the ProseMirror seam
719
+ // position is irrelevant. The only no-op is dropping a block on
720
+ // ITS OWN side — adjacent *different* blocks must still form
721
+ // columns (otherwise dropping onto an immediate neighbour's
722
+ // facing edge silently does nothing, which reads as "side drop
723
+ // works sometimes").
724
+ target.targetPos === session.sourcePos
725
+ : target.pos === session.sourcePos ||
726
+ target.pos === sourceEnd ||
727
+ (target.pos > session.sourcePos && target.pos < sourceEnd)))) {
728
+ session.dropTarget = null;
729
+ session.dropLine?.remove();
730
+ session.dropLine = null;
731
+ return;
732
+ }
733
+ const wrapper = target.view.dom.closest(target.registration.wrapperSelector);
734
+ if (!wrapper)
735
+ return;
736
+ if (!session.dropLine || session.dropLine.parentElement !== wrapper) {
737
+ session.dropLine?.remove();
738
+ session.dropLine = createDropLine(target.registration);
739
+ }
740
+ if (!session.dropLine)
741
+ return;
742
+ const wrapperRect = wrapper.getBoundingClientRect();
743
+ const editorRect = target.view.dom.getBoundingClientRect();
744
+ session.dropTarget = target;
745
+ // A column (side) drop and a reorder (before/after) drop both draw the
746
+ // `.notion-drop-indicator`, but they mean very different things, so the
747
+ // column case carries a modifier class apps style distinctly (a bolder,
748
+ // glowing vertical bar) — without a clear cue a human can't tell they've
749
+ // entered column-build mode before releasing.
750
+ const isColumnDrop = target.placement === "left" || target.placement === "right";
751
+ session.dropLine.classList.toggle("notion-drop-indicator--column", isColumnDrop);
752
+ if (isColumnDrop) {
753
+ // A vertical bar centred on the seam at the target's left/right edge,
754
+ // spanning the block's full height.
755
+ const SIDE_BAR_WIDTH = 4;
756
+ const seam = target.placement === "left" ? target.rect.left : target.rect.right;
757
+ session.dropLine.style.left = `${seam - wrapperRect.left - SIDE_BAR_WIDTH / 2}px`;
758
+ session.dropLine.style.top = `${target.rect.top - wrapperRect.top}px`;
759
+ session.dropLine.style.width = `${SIDE_BAR_WIDTH}px`;
760
+ session.dropLine.style.height = `${target.rect.height}px`;
761
+ return;
762
+ }
763
+ const top = target.placement === "before" ? target.rect.top : target.rect.bottom;
764
+ session.dropLine.style.left = `${editorRect.left - wrapperRect.left}px`;
765
+ session.dropLine.style.top = `${top - wrapperRect.top}px`;
766
+ session.dropLine.style.width = `${editorRect.width}px`;
767
+ session.dropLine.style.height = "3px";
768
+ };
769
+ const createHandle = () => {
770
+ const el = document.createElement("div");
771
+ el.className = "drag-handle";
772
+ el.contentEditable = "false";
773
+ el.draggable = false;
774
+ el.tabIndex = 0;
775
+ el.setAttribute("role", "button");
776
+ el.setAttribute("aria-label", "Open block menu or drag to reorder");
777
+ el.setAttribute("aria-haspopup", "menu");
778
+ el.setAttribute("aria-expanded", "false");
779
+ el.title = "Open block menu or drag to reorder";
780
+ // The icon must not be its own hit target: a real mouse-down inside a
781
+ // nested editor (a column) lands on the SVG, and a container block's
782
+ // capture-phase block-select handler (RegistryBlockNode) only spares the
783
+ // grip DIV — so a press on the icon gets swallowed and the block can't be
784
+ // dragged out of / between columns. `pointer-events:none` makes every
785
+ // press in the grip area resolve to the DIV instead.
786
+ // Tabler `grip-vertical` (the framework-wide icon set). `pointer-events:none`
787
+ // keeps every press in the grip area resolving to the DIV, not the SVG.
788
+ el.innerHTML = DRAG_HANDLE_GRIP_ICON;
789
+ const gripSvg = el.querySelector("svg");
790
+ if (gripSvg) {
791
+ gripSvg.setAttribute("width", "16");
792
+ gripSvg.setAttribute("height", "16");
793
+ gripSvg.style.pointerEvents = "none";
794
+ }
795
+ return el;
796
+ };
797
+ const hideHandle = () => {
798
+ if (menu)
799
+ return;
800
+ forceHideHandle();
801
+ };
802
+ const removeDragListeners = () => {
803
+ document.removeEventListener("mousemove", handleDocumentMouseMove);
804
+ document.removeEventListener("mouseup", handleDocumentMouseUp);
805
+ document.removeEventListener("keydown", handleDocumentKeyDown);
806
+ };
807
+ function handleMenuDocumentMouseDown(event) {
808
+ const target = event.target;
809
+ if (!(target instanceof Node))
810
+ return;
811
+ if (menu?.contains(target) || handle?.contains(target))
812
+ return;
813
+ closeMenu({ hideGrip: true });
814
+ }
815
+ function handleMenuKeyDown(event) {
816
+ if (!menu)
817
+ return;
818
+ if (event.key === "Escape") {
819
+ event.preventDefault();
820
+ closeMenu({ hideGrip: true });
821
+ return;
822
+ }
823
+ if (event.key !== "ArrowDown" &&
824
+ event.key !== "ArrowUp" &&
825
+ event.key !== "Home" &&
826
+ event.key !== "End") {
827
+ return;
828
+ }
829
+ const buttons = Array.from(menu.querySelectorAll("button"));
830
+ if (buttons.length === 0)
831
+ return;
832
+ event.preventDefault();
833
+ const activeIndex = buttons.indexOf(document.activeElement);
834
+ let nextIndex = activeIndex < 0 ? 0 : activeIndex;
835
+ if (event.key === "ArrowDown") {
836
+ nextIndex = (nextIndex + 1) % buttons.length;
837
+ }
838
+ else if (event.key === "ArrowUp") {
839
+ nextIndex = (nextIndex - 1 + buttons.length) % buttons.length;
840
+ }
841
+ else if (event.key === "Home") {
842
+ nextIndex = 0;
843
+ }
844
+ else if (event.key === "End") {
845
+ nextIndex = buttons.length - 1;
846
+ }
847
+ buttons[nextIndex]?.focus({ preventScroll: true });
848
+ }
849
+ function handleMenuViewportChange() {
850
+ closeMenu({ hideGrip: true });
851
+ }
852
+ const finishDragSession = (commit, event) => {
853
+ const session = dragSession;
854
+ if (!session)
855
+ return;
856
+ removeDragListeners();
857
+ if (commit && session.dragging && session.dropTarget) {
858
+ const sourceStart = session.sourcePos;
859
+ const sourceEnd = session.sourcePos + session.sourceNodeSize;
860
+ const target = session.dropTarget;
861
+ const dropPos = target.pos;
862
+ const isSideDrop = target.placement === "left" || target.placement === "right";
863
+ if (target.view !== session.view ||
864
+ (isSideDrop
865
+ ? // Side drop (column build): proceed for any block that isn't the
866
+ // source itself, including the source's immediate neighbour.
867
+ target.targetPos !== sourceStart
868
+ : dropPos !== sourceStart &&
869
+ dropPos !== sourceEnd &&
870
+ !(dropPos > sourceStart && dropPos < sourceEnd))) {
871
+ const sourceNode = session.view.state.doc.nodeAt(sourceStart);
872
+ if (sourceNode) {
873
+ let dropCommitted = false;
874
+ const sourceRegistration = registrationForView(session.view);
875
+ const transferData = sourceRegistration?.getDragTransferData?.({
876
+ view: session.view,
877
+ node: sourceNode,
878
+ pos: sourceStart,
879
+ });
880
+ const targetNode = target.view.state.doc.nodeAt(target.targetPos);
881
+ const handled = !!targetNode &&
882
+ (target.registration.handleDrop?.(transferData, {
883
+ view: target.view,
884
+ sourceView: session.view,
885
+ sourceNode,
886
+ sourcePos: sourceStart,
887
+ sourceNodeSize: sourceNode.nodeSize,
888
+ targetNode,
889
+ targetPos: target.targetPos,
890
+ targetNodeSize: target.targetNodeSize,
891
+ insertPos: dropPos,
892
+ placement: target.placement,
893
+ }) ??
894
+ false);
895
+ if (handled) {
896
+ dropCommitted = true;
897
+ }
898
+ else if (target.view === session.view) {
899
+ const insertPos = dropPos > sourceStart ? dropPos - sourceNode.nodeSize : dropPos;
900
+ const tr = session.view.state.tr
901
+ .delete(sourceStart, sourceEnd)
902
+ .insert(insertPos, sourceNode);
903
+ session.view.dispatch(tr.scrollIntoView());
904
+ dropCommitted = true;
905
+ }
906
+ else {
907
+ try {
908
+ const targetNode = target.view.state.schema.nodeFromJSON(sourceNode.toJSON());
909
+ target.registration.receiveDragTransferData?.(transferData, {
910
+ view: target.view,
911
+ node: targetNode,
912
+ pos: dropPos,
913
+ sourceView: session.view,
914
+ });
915
+ const insertTr = target.view.state.tr.insert(dropPos, targetNode);
916
+ target.view.dispatch(insertTr.scrollIntoView());
917
+ const deleteTr = session.view.state.tr.delete(sourceStart, sourceEnd);
918
+ session.view.dispatch(deleteTr);
919
+ dropCommitted = true;
920
+ }
921
+ catch {
922
+ // If the target schema cannot accept this node, leave the
923
+ // source document untouched.
924
+ }
925
+ }
926
+ if (dropCommitted) {
927
+ collapseAndBlurEditorAfterDrop(target.view, dropPos);
928
+ if (target.view !== session.view) {
929
+ collapseAndBlurEditorAfterDrop(session.view, sourceStart);
930
+ }
931
+ }
932
+ }
933
+ }
934
+ }
935
+ else if (commit && !session.dragging && event) {
936
+ openMenu({
937
+ view: session.view,
938
+ sourceBlock: session.sourceBlock,
939
+ sourcePos: session.sourcePos,
940
+ sourceNodeSize: session.sourceNodeSize,
941
+ }, handle?.getBoundingClientRect() ??
942
+ session.sourceBlock.getBoundingClientRect());
943
+ }
944
+ cleanupDragVisuals();
945
+ dragSession = null;
946
+ if (activeDragRegistration === currentRegistration) {
947
+ activeDragRegistration = null;
948
+ }
949
+ if (session.dragging || !commit)
950
+ hideHandle();
951
+ };
952
+ const beginDragSession = (session, event) => {
953
+ session.dragging = true;
954
+ session.preview = createDragPreview(session.sourceBlock);
955
+ session.sourceBlock.classList.add("notion-block--dragging");
956
+ document.documentElement.classList.add("notion-editor-is-dragging");
957
+ positionDragPreview(session, event.clientX, event.clientY);
958
+ updateDropLine(session, findAnyDropTarget(session, event.clientX, event.clientY));
959
+ };
960
+ function handleDocumentMouseMove(event) {
961
+ if (!dragSession)
962
+ return;
963
+ event.preventDefault();
964
+ const movedEnough = Math.hypot(event.clientX - dragSession.startX, event.clientY - dragSession.startY) > 4;
965
+ if (!dragSession.dragging && movedEnough) {
966
+ beginDragSession(dragSession, event);
967
+ }
968
+ if (!dragSession.dragging)
969
+ return;
970
+ positionDragPreview(dragSession, event.clientX, event.clientY);
971
+ updateDropLine(dragSession, findAnyDropTarget(dragSession, event.clientX, event.clientY));
972
+ }
973
+ function handleDocumentMouseUp(event) {
974
+ event.preventDefault();
975
+ finishDragSession(true, event);
976
+ }
977
+ function handleDocumentKeyDown(event) {
978
+ if (event.key !== "Escape")
979
+ return;
980
+ event.preventDefault();
981
+ finishDragSession(false);
982
+ }
983
+ return [
984
+ new Plugin({
985
+ key: dragHandleKey,
986
+ view(editorView) {
987
+ const registration = {
988
+ view: editorView,
989
+ wrapperSelector,
990
+ getDragTransferData,
991
+ receiveDragTransferData,
992
+ handleDrop,
993
+ canHover: () => !!handle && !menu && !dragSession && editor.isEditable,
994
+ findHoverBlock: (clientX, clientY) => findForgivingBlock(editorView, clientX, clientY),
995
+ showHoverBlock: (block) => showHandleForBlock(editorView, block),
996
+ hideHover: () => hideHandle(),
997
+ gripRect: () => handle && handle.style.display !== "none"
998
+ ? handle.getBoundingClientRect()
999
+ : null,
1000
+ };
1001
+ currentRegistration = registration;
1002
+ dragHandleRegistrations.add(registration);
1003
+ retainGlobalHoverListener();
1004
+ handle = createHandle();
1005
+ const wrapper = editorView.dom.closest(wrapperSelector);
1006
+ if (wrapper) {
1007
+ wrapper.style.position = "relative";
1008
+ wrapper.appendChild(handle);
1009
+ }
1010
+ handle.addEventListener("mousedown", (e) => {
1011
+ e.stopPropagation();
1012
+ if (e.button !== 0)
1013
+ return;
1014
+ closeMenu();
1015
+ if (!editor.isEditable) {
1016
+ e.preventDefault();
1017
+ return;
1018
+ }
1019
+ if (!currentBlock || dragStartPos === null)
1020
+ return;
1021
+ const sourceNode = editorView.state.doc.nodeAt(dragStartPos);
1022
+ if (!sourceNode)
1023
+ return;
1024
+ e.preventDefault();
1025
+ const sourceRect = currentBlock.getBoundingClientRect();
1026
+ dragSession = {
1027
+ view: editorView,
1028
+ sourceBlock: currentBlock,
1029
+ sourcePos: dragStartPos,
1030
+ sourceNodeSize: sourceNode.nodeSize,
1031
+ startX: e.clientX,
1032
+ startY: e.clientY,
1033
+ pointerOffsetX: e.clientX - sourceRect.left,
1034
+ pointerOffsetY: e.clientY - sourceRect.top,
1035
+ dragging: false,
1036
+ preview: null,
1037
+ dropLine: null,
1038
+ dropTarget: null,
1039
+ };
1040
+ activeDragRegistration = registration;
1041
+ document.addEventListener("mousemove", handleDocumentMouseMove);
1042
+ document.addEventListener("mouseup", handleDocumentMouseUp);
1043
+ document.addEventListener("keydown", handleDocumentKeyDown);
1044
+ });
1045
+ handle.addEventListener("keydown", (e) => {
1046
+ if (e.key !== "Enter" && e.key !== " ")
1047
+ return;
1048
+ e.preventDefault();
1049
+ e.stopPropagation();
1050
+ closeMenu();
1051
+ if (!editor.isEditable || !currentBlock || dragStartPos === null) {
1052
+ return;
1053
+ }
1054
+ const sourceNode = editorView.state.doc.nodeAt(dragStartPos);
1055
+ if (!sourceNode)
1056
+ return;
1057
+ openMenu({
1058
+ view: editorView,
1059
+ sourceBlock: currentBlock,
1060
+ sourcePos: dragStartPos,
1061
+ sourceNodeSize: sourceNode.nodeSize,
1062
+ }, handle?.getBoundingClientRect() ??
1063
+ currentBlock.getBoundingClientRect());
1064
+ });
1065
+ return {
1066
+ destroy() {
1067
+ closeMenu({ hideGrip: true });
1068
+ finishDragSession(false);
1069
+ releaseGlobalHoverListener();
1070
+ dragHandleRegistrations.delete(registration);
1071
+ if (activeDragRegistration === registration) {
1072
+ activeDragRegistration = null;
1073
+ }
1074
+ if (activeHoverRegistration === registration) {
1075
+ activeHoverRegistration = null;
1076
+ }
1077
+ handle?.remove();
1078
+ handle = null;
1079
+ currentRegistration = null;
1080
+ },
1081
+ };
1082
+ },
1083
+ props: {
1084
+ handleDOMEvents: {
1085
+ mousemove(_view, event) {
1086
+ updateRegisteredHover(event.clientX, event.clientY);
1087
+ return false;
1088
+ },
1089
+ drop() {
1090
+ closeMenu({ hideGrip: true });
1091
+ finishDragSession(false);
1092
+ hideHandle();
1093
+ return false;
1094
+ },
1095
+ },
1096
+ },
1097
+ }),
1098
+ ];
1099
+ },
1100
+ });
1101
+ //# sourceMappingURL=DragHandle.js.map