@50arms/ui 0.0.0-stage → 35.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1256) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +193 -2
  3. package/dist/components/Accordion.js +68 -0
  4. package/dist/components/Accordion.js.map +1 -0
  5. package/dist/components/AgentWorkingSpinner.js +46 -0
  6. package/dist/components/AgentWorkingSpinner.js.map +1 -0
  7. package/dist/components/AppShell.js +228 -0
  8. package/dist/components/AppShell.js.map +1 -0
  9. package/dist/components/Attention.js +130 -0
  10. package/dist/components/Attention.js.map +1 -0
  11. package/dist/components/Avatar.js +99 -0
  12. package/dist/components/Avatar.js.map +1 -0
  13. package/dist/components/Badge.js +143 -0
  14. package/dist/components/Badge.js.map +1 -0
  15. package/dist/components/Board.js +292 -0
  16. package/dist/components/Board.js.map +1 -0
  17. package/dist/components/Button.js +327 -0
  18. package/dist/components/Button.js.map +1 -0
  19. package/dist/components/Callout.js +106 -0
  20. package/dist/components/Callout.js.map +1 -0
  21. package/dist/components/Card.js +140 -0
  22. package/dist/components/Card.js.map +1 -0
  23. package/dist/components/Choice.js +361 -0
  24. package/dist/components/Choice.js.map +1 -0
  25. package/dist/components/CodeEditor.js +384 -0
  26. package/dist/components/CodeEditor.js.map +1 -0
  27. package/dist/components/ColorPicker.js +174 -0
  28. package/dist/components/ColorPicker.js.map +1 -0
  29. package/dist/components/Combobox.js +212 -0
  30. package/dist/components/Combobox.js.map +1 -0
  31. package/dist/components/CommandPalette.js +163 -0
  32. package/dist/components/CommandPalette.js.map +1 -0
  33. package/dist/components/ConcentricRing.js +60 -0
  34. package/dist/components/ConcentricRing.js.map +1 -0
  35. package/dist/components/ConnectionCard.js +98 -0
  36. package/dist/components/ConnectionCard.js.map +1 -0
  37. package/dist/components/ContextItemRow.js +49 -0
  38. package/dist/components/ContextItemRow.js.map +1 -0
  39. package/dist/components/CopyValue.js +57 -0
  40. package/dist/components/CopyValue.js.map +1 -0
  41. package/dist/components/CountBadge.js +26 -0
  42. package/dist/components/CountBadge.js.map +1 -0
  43. package/dist/components/DateCalendar.js +156 -0
  44. package/dist/components/DateCalendar.js.map +1 -0
  45. package/dist/components/DateField.js +166 -0
  46. package/dist/components/DateField.js.map +1 -0
  47. package/dist/components/DatePicker.js +56 -0
  48. package/dist/components/DatePicker.js.map +1 -0
  49. package/dist/components/DateTimeText.js +19 -0
  50. package/dist/components/DateTimeText.js.map +1 -0
  51. package/dist/components/DescriptionList.js +25 -0
  52. package/dist/components/DescriptionList.js.map +1 -0
  53. package/dist/components/Dialog.js +332 -0
  54. package/dist/components/Dialog.js.map +1 -0
  55. package/dist/components/DragDrop.js +395 -0
  56. package/dist/components/DragDrop.js.map +1 -0
  57. package/dist/components/Drawer.js +100 -0
  58. package/dist/components/Drawer.js.map +1 -0
  59. package/dist/components/EditGutter.js +110 -0
  60. package/dist/components/EditGutter.js.map +1 -0
  61. package/dist/components/EmojiPicker.js +174 -0
  62. package/dist/components/EmojiPicker.js.map +1 -0
  63. package/dist/components/ErrorBoundary.js +47 -0
  64. package/dist/components/ErrorBoundary.js.map +1 -0
  65. package/dist/components/Field.js +115 -0
  66. package/dist/components/Field.js.map +1 -0
  67. package/dist/components/FileUpload.js +128 -0
  68. package/dist/components/FileUpload.js.map +1 -0
  69. package/dist/components/FilterMenu.js +256 -0
  70. package/dist/components/FilterMenu.js.map +1 -0
  71. package/dist/components/GatesSection.js +79 -0
  72. package/dist/components/GatesSection.js.map +1 -0
  73. package/dist/components/Icon.js +50 -0
  74. package/dist/components/Icon.js.map +1 -0
  75. package/dist/components/IconButton.js +59 -0
  76. package/dist/components/IconButton.js.map +1 -0
  77. package/dist/components/IconStack.js +69 -0
  78. package/dist/components/IconStack.js.map +1 -0
  79. package/dist/components/ImageUploadField.js +146 -0
  80. package/dist/components/ImageUploadField.js.map +1 -0
  81. package/dist/components/InlineEdit.js +432 -0
  82. package/dist/components/InlineEdit.js.map +1 -0
  83. package/dist/components/InlineMarkdownEdit.js +184 -0
  84. package/dist/components/InlineMarkdownEdit.js.map +1 -0
  85. package/dist/components/Input.js +156 -0
  86. package/dist/components/Input.js.map +1 -0
  87. package/dist/components/LegalDocument.js +155 -0
  88. package/dist/components/LegalDocument.js.map +1 -0
  89. package/dist/components/LineDiff.js +95 -0
  90. package/dist/components/LineDiff.js.map +1 -0
  91. package/dist/components/ListHeader.js +72 -0
  92. package/dist/components/ListHeader.js.map +1 -0
  93. package/dist/components/Loading.js +111 -0
  94. package/dist/components/Loading.js.map +1 -0
  95. package/dist/components/Markdown.js +28 -0
  96. package/dist/components/Markdown.js.map +1 -0
  97. package/dist/components/MarkdownEditor.js +467 -0
  98. package/dist/components/MarkdownEditor.js.map +1 -0
  99. package/dist/components/Menu.js +185 -0
  100. package/dist/components/Menu.js.map +1 -0
  101. package/dist/components/Navigation.js +87 -0
  102. package/dist/components/Navigation.js.map +1 -0
  103. package/dist/components/NumberInput.js +119 -0
  104. package/dist/components/NumberInput.js.map +1 -0
  105. package/dist/components/OTPInput.js +71 -0
  106. package/dist/components/OTPInput.js.map +1 -0
  107. package/dist/components/OrderedEntityManager.js +170 -0
  108. package/dist/components/OrderedEntityManager.js.map +1 -0
  109. package/dist/components/PagedWindowList.js +74 -0
  110. package/dist/components/PagedWindowList.js.map +1 -0
  111. package/dist/components/PaginationBar.js +95 -0
  112. package/dist/components/PaginationBar.js.map +1 -0
  113. package/dist/components/Panel.js +396 -0
  114. package/dist/components/Panel.js.map +1 -0
  115. package/dist/components/PasswordInput.js +32 -0
  116. package/dist/components/PasswordInput.js.map +1 -0
  117. package/dist/components/PasswordRequirements.js +25 -0
  118. package/dist/components/PasswordRequirements.js.map +1 -0
  119. package/dist/components/PatchDiff.js +96 -0
  120. package/dist/components/PatchDiff.js.map +1 -0
  121. package/dist/components/PendingVeil.js +18 -0
  122. package/dist/components/PendingVeil.js.map +1 -0
  123. package/dist/components/Popover.js +214 -0
  124. package/dist/components/Popover.js.map +1 -0
  125. package/dist/components/Progress.js +419 -0
  126. package/dist/components/Progress.js.map +1 -0
  127. package/dist/components/RatingScale.js +89 -0
  128. package/dist/components/RatingScale.js.map +1 -0
  129. package/dist/components/ReadMore.js +232 -0
  130. package/dist/components/ReadMore.js.map +1 -0
  131. package/dist/components/RecordCard.js +202 -0
  132. package/dist/components/RecordCard.js.map +1 -0
  133. package/dist/components/RelativeTime.js +29 -0
  134. package/dist/components/RelativeTime.js.map +1 -0
  135. package/dist/components/SandboxedFrame.js +135 -0
  136. package/dist/components/SandboxedFrame.js.map +1 -0
  137. package/dist/components/SearchInput.js +38 -0
  138. package/dist/components/SearchInput.js.map +1 -0
  139. package/dist/components/SecretField.js +228 -0
  140. package/dist/components/SecretField.js.map +1 -0
  141. package/dist/components/SectionNav.js +42 -0
  142. package/dist/components/SectionNav.js.map +1 -0
  143. package/dist/components/Select.js +172 -0
  144. package/dist/components/Select.js.map +1 -0
  145. package/dist/components/SequenceDiagram.js +109 -0
  146. package/dist/components/SequenceDiagram.js.map +1 -0
  147. package/dist/components/SettingRow.js +124 -0
  148. package/dist/components/SettingRow.js.map +1 -0
  149. package/dist/components/SignOffRings.js +36 -0
  150. package/dist/components/SignOffRings.js.map +1 -0
  151. package/dist/components/Slider.js +353 -0
  152. package/dist/components/Slider.js.map +1 -0
  153. package/dist/components/SolutionChoice.js +89 -0
  154. package/dist/components/SolutionChoice.js.map +1 -0
  155. package/dist/components/SortMenu.js +75 -0
  156. package/dist/components/SortMenu.js.map +1 -0
  157. package/dist/components/Spinner.js +42 -0
  158. package/dist/components/Spinner.js.map +1 -0
  159. package/dist/components/Stat.js +148 -0
  160. package/dist/components/Stat.js.map +1 -0
  161. package/dist/components/StatusSelect.js +119 -0
  162. package/dist/components/StatusSelect.js.map +1 -0
  163. package/dist/components/Surface.js +210 -0
  164. package/dist/components/Surface.js.map +1 -0
  165. package/dist/components/Table.js +300 -0
  166. package/dist/components/Table.js.map +1 -0
  167. package/dist/components/Tabs.js +288 -0
  168. package/dist/components/Tabs.js.map +1 -0
  169. package/dist/components/ThemeMenu.js +198 -0
  170. package/dist/components/ThemeMenu.js.map +1 -0
  171. package/dist/components/Toast.js +217 -0
  172. package/dist/components/Toast.js.map +1 -0
  173. package/dist/components/Toggle.js +147 -0
  174. package/dist/components/Toggle.js.map +1 -0
  175. package/dist/components/ToggleMatrix.js +157 -0
  176. package/dist/components/ToggleMatrix.js.map +1 -0
  177. package/dist/components/Tree.js +125 -0
  178. package/dist/components/Tree.js.map +1 -0
  179. package/dist/components/TriStateSwitch.js +111 -0
  180. package/dist/components/TriStateSwitch.js.map +1 -0
  181. package/dist/components/VideoPlayer.js +64 -0
  182. package/dist/components/VideoPlayer.js.map +1 -0
  183. package/dist/components/auth/AcceptInvitationCard.js +110 -0
  184. package/dist/components/auth/AcceptInvitationCard.js.map +1 -0
  185. package/dist/components/auth/AuthLayout.js +18 -0
  186. package/dist/components/auth/AuthLayout.js.map +1 -0
  187. package/dist/components/auth/ForgotPasswordForm.js +44 -0
  188. package/dist/components/auth/ForgotPasswordForm.js.map +1 -0
  189. package/dist/components/auth/LoginForm.js +76 -0
  190. package/dist/components/auth/LoginForm.js.map +1 -0
  191. package/dist/components/auth/ResetPasswordForm.js +69 -0
  192. package/dist/components/auth/ResetPasswordForm.js.map +1 -0
  193. package/dist/components/auth/SignInProviders.js +45 -0
  194. package/dist/components/auth/SignInProviders.js.map +1 -0
  195. package/dist/components/auth/SignupCard.js +204 -0
  196. package/dist/components/auth/SignupCard.js.map +1 -0
  197. package/dist/components/auth/TermsAcceptance.js +43 -0
  198. package/dist/components/auth/TermsAcceptance.js.map +1 -0
  199. package/dist/components/board/context.js +32 -0
  200. package/dist/components/board/context.js.map +1 -0
  201. package/dist/components/board/recipe.js +94 -0
  202. package/dist/components/board/recipe.js.map +1 -0
  203. package/dist/components/calendar/CalendarMonth.js +299 -0
  204. package/dist/components/calendar/CalendarMonth.js.map +1 -0
  205. package/dist/components/calendar/CalendarTimeGrid.js +430 -0
  206. package/dist/components/calendar/CalendarTimeGrid.js.map +1 -0
  207. package/dist/components/calendar/EventActions.js +101 -0
  208. package/dist/components/calendar/EventActions.js.map +1 -0
  209. package/dist/components/calendar/format.js +73 -0
  210. package/dist/components/calendar/format.js.map +1 -0
  211. package/dist/components/calendar/palette.js +31 -0
  212. package/dist/components/calendar/palette.js.map +1 -0
  213. package/dist/components/calendar/use-calendar-drag.js +149 -0
  214. package/dist/components/calendar/use-calendar-drag.js.map +1 -0
  215. package/dist/components/calendar/use-event-keyboard.js +87 -0
  216. package/dist/components/calendar/use-event-keyboard.js.map +1 -0
  217. package/dist/components/calendar/use-grid-navigation.js +79 -0
  218. package/dist/components/calendar/use-grid-navigation.js.map +1 -0
  219. package/dist/components/calendar/use-now.js +27 -0
  220. package/dist/components/calendar/use-now.js.map +1 -0
  221. package/dist/components/card-face/AcRingGlyph.js +39 -0
  222. package/dist/components/card-face/AcRingGlyph.js.map +1 -0
  223. package/dist/components/card-face/BoardCardAgentSlot.js +17 -0
  224. package/dist/components/card-face/BoardCardAgentSlot.js.map +1 -0
  225. package/dist/components/card-face/CardFace.js +109 -0
  226. package/dist/components/card-face/CardFace.js.map +1 -0
  227. package/dist/components/card-face/CardTypeBadge.js +17 -0
  228. package/dist/components/card-face/CardTypeBadge.js.map +1 -0
  229. package/dist/components/card-face/EffortBadge.js +11 -0
  230. package/dist/components/card-face/EffortBadge.js.map +1 -0
  231. package/dist/components/card-face/GateRingGlyph.js +31 -0
  232. package/dist/components/card-face/GateRingGlyph.js.map +1 -0
  233. package/dist/components/card-face/OverflowRow.js +70 -0
  234. package/dist/components/card-face/OverflowRow.js.map +1 -0
  235. package/dist/components/card-face/TapTip.js +32 -0
  236. package/dist/components/card-face/TapTip.js.map +1 -0
  237. package/dist/components/card-face/hit-area.js +6 -0
  238. package/dist/components/card-face/hit-area.js.map +1 -0
  239. package/dist/components/card-face/vocabulary.js +102 -0
  240. package/dist/components/card-face/vocabulary.js.map +1 -0
  241. package/dist/components/chart/BarList.js +78 -0
  242. package/dist/components/chart/BarList.js.map +1 -0
  243. package/dist/components/chart/LineChart.js +310 -0
  244. package/dist/components/chart/LineChart.js.map +1 -0
  245. package/dist/components/chart/ShareBar.js +141 -0
  246. package/dist/components/chart/ShareBar.js.map +1 -0
  247. package/dist/components/chart/TimeSeriesChart.js +305 -0
  248. package/dist/components/chart/TimeSeriesChart.js.map +1 -0
  249. package/dist/components/chart/label-metrics.js +17 -0
  250. package/dist/components/chart/label-metrics.js.map +1 -0
  251. package/dist/components/chart/line-chart-axis.js +38 -0
  252. package/dist/components/chart/line-chart-axis.js.map +1 -0
  253. package/dist/components/chart/line-chart-scale.js +132 -0
  254. package/dist/components/chart/line-chart-scale.js.map +1 -0
  255. package/dist/components/chart/line-series-style.js +22 -0
  256. package/dist/components/chart/line-series-style.js.map +1 -0
  257. package/dist/components/chart/share-bar-labels.js +14 -0
  258. package/dist/components/chart/share-bar-labels.js.map +1 -0
  259. package/dist/components/chart/shared.js +157 -0
  260. package/dist/components/chart/shared.js.map +1 -0
  261. package/dist/components/chart/time-series-scale.js +51 -0
  262. package/dist/components/chart/time-series-scale.js.map +1 -0
  263. package/dist/components/chat/Attachment.js +316 -0
  264. package/dist/components/chat/Attachment.js.map +1 -0
  265. package/dist/components/chat/Chat.js +171 -0
  266. package/dist/components/chat/Chat.js.map +1 -0
  267. package/dist/components/chat/Composer.js +274 -0
  268. package/dist/components/chat/Composer.js.map +1 -0
  269. package/dist/components/chat/ContextMeter.js +202 -0
  270. package/dist/components/chat/ContextMeter.js.map +1 -0
  271. package/dist/components/chat/EffortControl.js +116 -0
  272. package/dist/components/chat/EffortControl.js.map +1 -0
  273. package/dist/components/chat/FileCover.js +78 -0
  274. package/dist/components/chat/FileCover.js.map +1 -0
  275. package/dist/components/chat/Message.js +356 -0
  276. package/dist/components/chat/Message.js.map +1 -0
  277. package/dist/components/chat/MessageScroller.js +104 -0
  278. package/dist/components/chat/MessageScroller.js.map +1 -0
  279. package/dist/components/chat/ModelSelector.js +156 -0
  280. package/dist/components/chat/ModelSelector.js.map +1 -0
  281. package/dist/components/chat/StreamingMarkdown.js +42 -0
  282. package/dist/components/chat/StreamingMarkdown.js.map +1 -0
  283. package/dist/components/chat/download-file.js +9 -0
  284. package/dist/components/chat/download-file.js.map +1 -0
  285. package/dist/components/chat/file-icon.js +39 -0
  286. package/dist/components/chat/file-icon.js.map +1 -0
  287. package/dist/components/checklist/StatusChecklist.js +103 -0
  288. package/dist/components/checklist/StatusChecklist.js.map +1 -0
  289. package/dist/components/checklist/tally.js +29 -0
  290. package/dist/components/checklist/tally.js.map +1 -0
  291. package/dist/components/code-editor/context.js +13 -0
  292. package/dist/components/code-editor/context.js.map +1 -0
  293. package/dist/components/code-editor/editing.js +93 -0
  294. package/dist/components/code-editor/editing.js.map +1 -0
  295. package/dist/components/code-editor/highlight.js +27 -0
  296. package/dist/components/code-editor/highlight.js.map +1 -0
  297. package/dist/components/code-editor/recipe.js +75 -0
  298. package/dist/components/code-editor/recipe.js.map +1 -0
  299. package/dist/components/date-timeline/DateTimeline.js +358 -0
  300. package/dist/components/date-timeline/DateTimeline.js.map +1 -0
  301. package/dist/components/date-timeline/TimelineRow.js +100 -0
  302. package/dist/components/date-timeline/TimelineRow.js.map +1 -0
  303. package/dist/components/date-timeline/useBarDrag.js +44 -0
  304. package/dist/components/date-timeline/useBarDrag.js.map +1 -0
  305. package/dist/components/date-timeline/useMarkerDrag.js +40 -0
  306. package/dist/components/date-timeline/useMarkerDrag.js.map +1 -0
  307. package/dist/components/date-timeline/useTimelineZoom.js +44 -0
  308. package/dist/components/date-timeline/useTimelineZoom.js.map +1 -0
  309. package/dist/components/drag-drop/context.js +37 -0
  310. package/dist/components/drag-drop/context.js.map +1 -0
  311. package/dist/components/drag-drop/recipe.js +270 -0
  312. package/dist/components/drag-drop/recipe.js.map +1 -0
  313. package/dist/components/drag-drop/shift.js +157 -0
  314. package/dist/components/drag-drop/shift.js.map +1 -0
  315. package/dist/components/edit/activation.js +10 -0
  316. package/dist/components/edit/activation.js.map +1 -0
  317. package/dist/components/edit/outcome.js +47 -0
  318. package/dist/components/edit/outcome.js.map +1 -0
  319. package/dist/components/edit/use-edit-session.js +146 -0
  320. package/dist/components/edit/use-edit-session.js.map +1 -0
  321. package/dist/components/file-viewer/FileViewer.js +97 -0
  322. package/dist/components/file-viewer/FileViewer.js.map +1 -0
  323. package/dist/components/file-viewer/PageNumberJumpField.js +47 -0
  324. package/dist/components/file-viewer/PageNumberJumpField.js.map +1 -0
  325. package/dist/components/file-viewer/ViewerControls.js +122 -0
  326. package/dist/components/file-viewer/ViewerControls.js.map +1 -0
  327. package/dist/components/file-viewer/ViewerRail.js +57 -0
  328. package/dist/components/file-viewer/ViewerRail.js.map +1 -0
  329. package/dist/components/file-viewer/ViewerStage.js +112 -0
  330. package/dist/components/file-viewer/ViewerStage.js.map +1 -0
  331. package/dist/components/file-viewer/frames.js +37 -0
  332. package/dist/components/file-viewer/frames.js.map +1 -0
  333. package/dist/components/file-viewer/use-frame-cursor.js +32 -0
  334. package/dist/components/file-viewer/use-frame-cursor.js.map +1 -0
  335. package/dist/components/file-viewer/use-viewer-keys.js +50 -0
  336. package/dist/components/file-viewer/use-viewer-keys.js.map +1 -0
  337. package/dist/components/file-viewer/use-viewer-zoom.js +68 -0
  338. package/dist/components/file-viewer/use-viewer-zoom.js.map +1 -0
  339. package/dist/components/focus-web/FocusWeb.js +322 -0
  340. package/dist/components/focus-web/FocusWeb.js.map +1 -0
  341. package/dist/components/focus-web/layout.js +34 -0
  342. package/dist/components/focus-web/layout.js.map +1 -0
  343. package/dist/components/graph-explorer/GraphExplorer.js +441 -0
  344. package/dist/components/graph-explorer/GraphExplorer.js.map +1 -0
  345. package/dist/components/graph-explorer/camera-math.js +102 -0
  346. package/dist/components/graph-explorer/camera-math.js.map +1 -0
  347. package/dist/components/graph-explorer/tree-layout.js +103 -0
  348. package/dist/components/graph-explorer/tree-layout.js.map +1 -0
  349. package/dist/components/graph-explorer/use-camera.js +82 -0
  350. package/dist/components/graph-explorer/use-camera.js.map +1 -0
  351. package/dist/components/graph-explorer/viewport-gesture.js +107 -0
  352. package/dist/components/graph-explorer/viewport-gesture.js.map +1 -0
  353. package/dist/components/kanban/KanbanBoard.js +219 -0
  354. package/dist/components/kanban/KanbanBoard.js.map +1 -0
  355. package/dist/components/kanban/recipe.js +144 -0
  356. package/dist/components/kanban/recipe.js.map +1 -0
  357. package/dist/components/markdown/Affordances.js +398 -0
  358. package/dist/components/markdown/Affordances.js.map +1 -0
  359. package/dist/components/markdown/AttachmentStrip.js +128 -0
  360. package/dist/components/markdown/AttachmentStrip.js.map +1 -0
  361. package/dist/components/markdown/ImageUpload.js +45 -0
  362. package/dist/components/markdown/ImageUpload.js.map +1 -0
  363. package/dist/components/media-error.js +7 -0
  364. package/dist/components/media-error.js.map +1 -0
  365. package/dist/components/nav-sections.js +61 -0
  366. package/dist/components/nav-sections.js.map +1 -0
  367. package/dist/components/node-canvas/NodeCanvas.js +384 -0
  368. package/dist/components/node-canvas/NodeCanvas.js.map +1 -0
  369. package/dist/components/node-canvas/layout.js +237 -0
  370. package/dist/components/node-canvas/layout.js.map +1 -0
  371. package/dist/components/node-canvas/use-canvas-gestures.js +143 -0
  372. package/dist/components/node-canvas/use-canvas-gestures.js.map +1 -0
  373. package/dist/components/openapi/OpenApiViewer.js +137 -0
  374. package/dist/components/openapi/OpenApiViewer.js.map +1 -0
  375. package/dist/components/openapi/OperationCard.js +145 -0
  376. package/dist/components/openapi/OperationCard.js.map +1 -0
  377. package/dist/components/openapi/SchemaView.js +68 -0
  378. package/dist/components/openapi/SchemaView.js.map +1 -0
  379. package/dist/components/openapi/resolve.js +102 -0
  380. package/dist/components/openapi/resolve.js.map +1 -0
  381. package/dist/components/openapi/types.js +5 -0
  382. package/dist/components/openapi/types.js.map +1 -0
  383. package/dist/components/overlay-shell.js +29 -0
  384. package/dist/components/overlay-shell.js.map +1 -0
  385. package/dist/components/overlay-stack.js +27 -0
  386. package/dist/components/overlay-stack.js.map +1 -0
  387. package/dist/components/paged-window/PageBlock.js +50 -0
  388. package/dist/components/paged-window/PageBlock.js.map +1 -0
  389. package/dist/components/provenance/ConfidenceBar.js +60 -0
  390. package/dist/components/provenance/ConfidenceBar.js.map +1 -0
  391. package/dist/components/provenance/ConfidenceMeter.js +36 -0
  392. package/dist/components/provenance/ConfidenceMeter.js.map +1 -0
  393. package/dist/components/provenance/ConfidenceReadout.js +31 -0
  394. package/dist/components/provenance/ConfidenceReadout.js.map +1 -0
  395. package/dist/components/provenance/ProvenanceBadge.js +44 -0
  396. package/dist/components/provenance/ProvenanceBadge.js.map +1 -0
  397. package/dist/components/provenance/ProvenanceDetail.js +114 -0
  398. package/dist/components/provenance/ProvenanceDetail.js.map +1 -0
  399. package/dist/components/provenance/ProvenanceDisclosure.js +111 -0
  400. package/dist/components/provenance/ProvenanceDisclosure.js.map +1 -0
  401. package/dist/components/provenance/absence.js +31 -0
  402. package/dist/components/provenance/absence.js.map +1 -0
  403. package/dist/components/provenance/types.js +30 -0
  404. package/dist/components/provenance/types.js.map +1 -0
  405. package/dist/components/rbac/AccessRequestPanel.js +153 -0
  406. package/dist/components/rbac/AccessRequestPanel.js.map +1 -0
  407. package/dist/components/rbac/AccountMenu.js +118 -0
  408. package/dist/components/rbac/AccountMenu.js.map +1 -0
  409. package/dist/components/rbac/AgentKeysList.js +20 -0
  410. package/dist/components/rbac/AgentKeysList.js.map +1 -0
  411. package/dist/components/rbac/ApiKeysPanel.js +172 -0
  412. package/dist/components/rbac/ApiKeysPanel.js.map +1 -0
  413. package/dist/components/rbac/ApiKeysTable.js +169 -0
  414. package/dist/components/rbac/ApiKeysTable.js.map +1 -0
  415. package/dist/components/rbac/Brand.js +13 -0
  416. package/dist/components/rbac/Brand.js.map +1 -0
  417. package/dist/components/rbac/Can.js +18 -0
  418. package/dist/components/rbac/Can.js.map +1 -0
  419. package/dist/components/rbac/ChangePasswordForm.js +73 -0
  420. package/dist/components/rbac/ChangePasswordForm.js.map +1 -0
  421. package/dist/components/rbac/DangerZone.js +27 -0
  422. package/dist/components/rbac/DangerZone.js.map +1 -0
  423. package/dist/components/rbac/DevToolsPopover.js +140 -0
  424. package/dist/components/rbac/DevToolsPopover.js.map +1 -0
  425. package/dist/components/rbac/EndedLine.js +24 -0
  426. package/dist/components/rbac/EndedLine.js.map +1 -0
  427. package/dist/components/rbac/InvitationsList.js +148 -0
  428. package/dist/components/rbac/InvitationsList.js.map +1 -0
  429. package/dist/components/rbac/InviteMembersDialog.js +97 -0
  430. package/dist/components/rbac/InviteMembersDialog.js.map +1 -0
  431. package/dist/components/rbac/MembersPanel.js +138 -0
  432. package/dist/components/rbac/MembersPanel.js.map +1 -0
  433. package/dist/components/rbac/PermissionRequestPanel.js +141 -0
  434. package/dist/components/rbac/PermissionRequestPanel.js.map +1 -0
  435. package/dist/components/rbac/ProfileForm.js +86 -0
  436. package/dist/components/rbac/ProfileForm.js.map +1 -0
  437. package/dist/components/rbac/ProfilePage.js +58 -0
  438. package/dist/components/rbac/ProfilePage.js.map +1 -0
  439. package/dist/components/rbac/RBACProvider.js +82 -0
  440. package/dist/components/rbac/RBACProvider.js.map +1 -0
  441. package/dist/components/rbac/RoleEditorDialog.js +90 -0
  442. package/dist/components/rbac/RoleEditorDialog.js.map +1 -0
  443. package/dist/components/rbac/RoleKeyPicker.js +77 -0
  444. package/dist/components/rbac/RoleKeyPicker.js.map +1 -0
  445. package/dist/components/rbac/RolePermissionMatrix.js +37 -0
  446. package/dist/components/rbac/RolePermissionMatrix.js.map +1 -0
  447. package/dist/components/rbac/RolesPermissionsPage.js +142 -0
  448. package/dist/components/rbac/RolesPermissionsPage.js.map +1 -0
  449. package/dist/components/rbac/SessionsList.js +146 -0
  450. package/dist/components/rbac/SessionsList.js.map +1 -0
  451. package/dist/components/rbac/TeamSettingsForm.js +69 -0
  452. package/dist/components/rbac/TeamSettingsForm.js.map +1 -0
  453. package/dist/components/rbac/TeamSwitcher.js +66 -0
  454. package/dist/components/rbac/TeamSwitcher.js.map +1 -0
  455. package/dist/components/rbac/approvalPanelParts.js +130 -0
  456. package/dist/components/rbac/approvalPanelParts.js.map +1 -0
  457. package/dist/components/rbac/permissionSections.js +8 -0
  458. package/dist/components/rbac/permissionSections.js.map +1 -0
  459. package/dist/components/rbac/stagedForm.js +42 -0
  460. package/dist/components/rbac/stagedForm.js.map +1 -0
  461. package/dist/components/rbac/useStagedImage.js +21 -0
  462. package/dist/components/rbac/useStagedImage.js.map +1 -0
  463. package/dist/components/roadmap/PhaseManager.js +48 -0
  464. package/dist/components/roadmap/PhaseManager.js.map +1 -0
  465. package/dist/components/roadmap/RoadmapItemCard.js +96 -0
  466. package/dist/components/roadmap/RoadmapItemCard.js.map +1 -0
  467. package/dist/components/roadmap/RoadmapPage.js +34 -0
  468. package/dist/components/roadmap/RoadmapPage.js.map +1 -0
  469. package/dist/components/roadmap/RoadmapSwimlaneBoard.js +91 -0
  470. package/dist/components/roadmap/RoadmapSwimlaneBoard.js.map +1 -0
  471. package/dist/components/roadmap/TrackManager.js +58 -0
  472. package/dist/components/roadmap/TrackManager.js.map +1 -0
  473. package/dist/components/roadmap/UseCaseCard.js +93 -0
  474. package/dist/components/roadmap/UseCaseCard.js.map +1 -0
  475. package/dist/components/roadmap/UseCaseLedgerPage.js +98 -0
  476. package/dist/components/roadmap/UseCaseLedgerPage.js.map +1 -0
  477. package/dist/components/roadmap/chip-tones.js +9 -0
  478. package/dist/components/roadmap/chip-tones.js.map +1 -0
  479. package/dist/components/roadmap/derive.js +28 -0
  480. package/dist/components/roadmap/derive.js.map +1 -0
  481. package/dist/components/stepper/Stepper.js +276 -0
  482. package/dist/components/stepper/Stepper.js.map +1 -0
  483. package/dist/components/stepper/derive.js +53 -0
  484. package/dist/components/stepper/derive.js.map +1 -0
  485. package/dist/confidence.css +222 -0
  486. package/dist/fonts/bricolage-grotesque-0.woff2 +0 -0
  487. package/dist/fonts/bricolage-grotesque-1.woff2 +0 -0
  488. package/dist/fonts/bricolage-grotesque-2.woff2 +0 -0
  489. package/dist/fonts/figtree-0.woff2 +0 -0
  490. package/dist/fonts/figtree-1.woff2 +0 -0
  491. package/dist/fonts/figtree-2.woff2 +0 -0
  492. package/dist/fonts/figtree-3.woff2 +0 -0
  493. package/dist/fonts/jetbrains-mono-0.woff2 +0 -0
  494. package/dist/fonts/jetbrains-mono-1.woff2 +0 -0
  495. package/dist/fonts/jetbrains-mono-10.woff2 +0 -0
  496. package/dist/fonts/jetbrains-mono-11.woff2 +0 -0
  497. package/dist/fonts/jetbrains-mono-2.woff2 +0 -0
  498. package/dist/fonts/jetbrains-mono-3.woff2 +0 -0
  499. package/dist/fonts/jetbrains-mono-4.woff2 +0 -0
  500. package/dist/fonts/jetbrains-mono-5.woff2 +0 -0
  501. package/dist/fonts/jetbrains-mono-6.woff2 +0 -0
  502. package/dist/fonts/jetbrains-mono-7.woff2 +0 -0
  503. package/dist/fonts/jetbrains-mono-8.woff2 +0 -0
  504. package/dist/fonts/jetbrains-mono-9.woff2 +0 -0
  505. package/dist/fonts.css +187 -0
  506. package/dist/icons/data.js +233 -0
  507. package/dist/icons/data.js.map +1 -0
  508. package/dist/index.js +942 -0
  509. package/dist/index.js.map +1 -0
  510. package/dist/lib/attention.js +75 -0
  511. package/dist/lib/attention.js.map +1 -0
  512. package/dist/lib/board/anchor.js +14 -0
  513. package/dist/lib/board/anchor.js.map +1 -0
  514. package/dist/lib/board/model.js +41 -0
  515. package/dist/lib/board/model.js.map +1 -0
  516. package/dist/lib/board/move.js +161 -0
  517. package/dist/lib/board/move.js.map +1 -0
  518. package/dist/lib/board/position.js +11 -0
  519. package/dist/lib/board/position.js.map +1 -0
  520. package/dist/lib/board/rejection.js +22 -0
  521. package/dist/lib/board/rejection.js.map +1 -0
  522. package/dist/lib/board/use-board.js +43 -0
  523. package/dist/lib/board/use-board.js.map +1 -0
  524. package/dist/lib/calendar/band-packer.js +44 -0
  525. package/dist/lib/calendar/band-packer.js.map +1 -0
  526. package/dist/lib/calendar/drag.js +74 -0
  527. package/dist/lib/calendar/drag.js.map +1 -0
  528. package/dist/lib/calendar/lane-packer.js +67 -0
  529. package/dist/lib/calendar/lane-packer.js.map +1 -0
  530. package/dist/lib/calendar/segments.js +82 -0
  531. package/dist/lib/calendar/segments.js.map +1 -0
  532. package/dist/lib/calendar/types.js +7 -0
  533. package/dist/lib/calendar/types.js.map +1 -0
  534. package/dist/lib/chart-palette.js +27 -0
  535. package/dist/lib/chart-palette.js.map +1 -0
  536. package/dist/lib/clipboard.js +30 -0
  537. package/dist/lib/clipboard.js.map +1 -0
  538. package/dist/lib/cn.js +9 -0
  539. package/dist/lib/cn.js.map +1 -0
  540. package/dist/lib/color.js +24 -0
  541. package/dist/lib/color.js.map +1 -0
  542. package/dist/lib/component-guidance.js +297 -0
  543. package/dist/lib/component-guidance.js.map +1 -0
  544. package/dist/lib/confidence.js +22 -0
  545. package/dist/lib/confidence.js.map +1 -0
  546. package/dist/lib/date-timeline/scale.js +197 -0
  547. package/dist/lib/date-timeline/scale.js.map +1 -0
  548. package/dist/lib/design-frame/document.js +44 -0
  549. package/dist/lib/design-frame/document.js.map +1 -0
  550. package/dist/lib/design-frame/mini-app-script.js +107 -0
  551. package/dist/lib/design-frame/mini-app-script.js.map +1 -0
  552. package/dist/lib/design-frame/mini-app.js +12 -0
  553. package/dist/lib/design-frame/mini-app.js.map +1 -0
  554. package/dist/lib/design-frame/protocol.js +46 -0
  555. package/dist/lib/design-frame/protocol.js.map +1 -0
  556. package/dist/lib/dev-warn.js +17 -0
  557. package/dist/lib/dev-warn.js.map +1 -0
  558. package/dist/lib/dnd/announce.js +120 -0
  559. package/dist/lib/dnd/announce.js.map +1 -0
  560. package/dist/lib/dnd/autoscroll.js +123 -0
  561. package/dist/lib/dnd/autoscroll.js.map +1 -0
  562. package/dist/lib/dnd/cross-drop.js +11 -0
  563. package/dist/lib/dnd/cross-drop.js.map +1 -0
  564. package/dist/lib/dnd/geometry.js +99 -0
  565. package/dist/lib/dnd/geometry.js.map +1 -0
  566. package/dist/lib/dnd/sensors/gesture.js +86 -0
  567. package/dist/lib/dnd/sensors/gesture.js.map +1 -0
  568. package/dist/lib/dnd/sensors/keyboard.js +47 -0
  569. package/dist/lib/dnd/sensors/keyboard.js.map +1 -0
  570. package/dist/lib/dnd/sensors/pointer.js +32 -0
  571. package/dist/lib/dnd/sensors/pointer.js.map +1 -0
  572. package/dist/lib/dnd/session.js +256 -0
  573. package/dist/lib/dnd/session.js.map +1 -0
  574. package/dist/lib/dnd/use-drag.js +90 -0
  575. package/dist/lib/dnd/use-drag.js.map +1 -0
  576. package/dist/lib/dom/scroll-ancestor.js +18 -0
  577. package/dist/lib/dom/scroll-ancestor.js.map +1 -0
  578. package/dist/lib/format.js +23 -0
  579. package/dist/lib/format.js.map +1 -0
  580. package/dist/lib/group-in-order.js +13 -0
  581. package/dist/lib/group-in-order.js.map +1 -0
  582. package/dist/lib/header-fold.js +11 -0
  583. package/dist/lib/header-fold.js.map +1 -0
  584. package/dist/lib/i18n/areas/auth-provenance-flows.js +156 -0
  585. package/dist/lib/i18n/areas/auth-provenance-flows.js.map +1 -0
  586. package/dist/lib/i18n/areas/board.js +35 -0
  587. package/dist/lib/i18n/areas/board.js.map +1 -0
  588. package/dist/lib/i18n/areas/card-face.js +10 -0
  589. package/dist/lib/i18n/areas/card-face.js.map +1 -0
  590. package/dist/lib/i18n/areas/chat-chart.js +118 -0
  591. package/dist/lib/i18n/areas/chat-chart.js.map +1 -0
  592. package/dist/lib/i18n/areas/code-editor.js +24 -0
  593. package/dist/lib/i18n/areas/code-editor.js.map +1 -0
  594. package/dist/lib/i18n/areas/date-timeline.js +21 -0
  595. package/dist/lib/i18n/areas/date-timeline.js.map +1 -0
  596. package/dist/lib/i18n/areas/dates.js +71 -0
  597. package/dist/lib/i18n/areas/dates.js.map +1 -0
  598. package/dist/lib/i18n/areas/docs-views.js +183 -0
  599. package/dist/lib/i18n/areas/docs-views.js.map +1 -0
  600. package/dist/lib/i18n/areas/feedback.js +75 -0
  601. package/dist/lib/i18n/areas/feedback.js.map +1 -0
  602. package/dist/lib/i18n/areas/formats.js +24 -0
  603. package/dist/lib/i18n/areas/formats.js.map +1 -0
  604. package/dist/lib/i18n/areas/forms.js +110 -0
  605. package/dist/lib/i18n/areas/forms.js.map +1 -0
  606. package/dist/lib/i18n/areas/keys.js +25 -0
  607. package/dist/lib/i18n/areas/keys.js.map +1 -0
  608. package/dist/lib/i18n/areas/markdown.js +136 -0
  609. package/dist/lib/i18n/areas/markdown.js.map +1 -0
  610. package/dist/lib/i18n/areas/move-rejected.js +14 -0
  611. package/dist/lib/i18n/areas/move-rejected.js.map +1 -0
  612. package/dist/lib/i18n/areas/navigation.js +104 -0
  613. package/dist/lib/i18n/areas/navigation.js.map +1 -0
  614. package/dist/lib/i18n/areas/rbac.js +332 -0
  615. package/dist/lib/i18n/areas/rbac.js.map +1 -0
  616. package/dist/lib/i18n/emphasis.js +6 -0
  617. package/dist/lib/i18n/emphasis.js.map +1 -0
  618. package/dist/lib/i18n/number-format.js +9 -0
  619. package/dist/lib/i18n/number-format.js.map +1 -0
  620. package/dist/lib/i18n/plural.js +9 -0
  621. package/dist/lib/i18n/plural.js.map +1 -0
  622. package/dist/lib/i18n/provider.js +27 -0
  623. package/dist/lib/i18n/provider.js.map +1 -0
  624. package/dist/lib/i18n/strings.js +38 -0
  625. package/dist/lib/i18n/strings.js.map +1 -0
  626. package/dist/lib/icons.js +17 -0
  627. package/dist/lib/icons.js.map +1 -0
  628. package/dist/lib/interactive-target.js +9 -0
  629. package/dist/lib/interactive-target.js.map +1 -0
  630. package/dist/lib/intl-cache.js +69 -0
  631. package/dist/lib/intl-cache.js.map +1 -0
  632. package/dist/lib/legal-document.js +37 -0
  633. package/dist/lib/legal-document.js.map +1 -0
  634. package/dist/lib/line-diff-model.js +51 -0
  635. package/dist/lib/line-diff-model.js.map +1 -0
  636. package/dist/lib/markdown/attachments.js +71 -0
  637. package/dist/lib/markdown/attachments.js.map +1 -0
  638. package/dist/lib/markdown/caret-map.js +153 -0
  639. package/dist/lib/markdown/caret-map.js.map +1 -0
  640. package/dist/lib/markdown/caret.js +35 -0
  641. package/dist/lib/markdown/caret.js.map +1 -0
  642. package/dist/lib/markdown/commands.js +443 -0
  643. package/dist/lib/markdown/commands.js.map +1 -0
  644. package/dist/lib/markdown/convert.js +153 -0
  645. package/dist/lib/markdown/convert.js.map +1 -0
  646. package/dist/lib/markdown/dom.js +89 -0
  647. package/dist/lib/markdown/dom.js.map +1 -0
  648. package/dist/lib/markdown/edit.js +92 -0
  649. package/dist/lib/markdown/edit.js.map +1 -0
  650. package/dist/lib/markdown/history.js +79 -0
  651. package/dist/lib/markdown/history.js.map +1 -0
  652. package/dist/lib/markdown/hotkeys.js +63 -0
  653. package/dist/lib/markdown/hotkeys.js.map +1 -0
  654. package/dist/lib/markdown/image-pipeline.js +236 -0
  655. package/dist/lib/markdown/image-pipeline.js.map +1 -0
  656. package/dist/lib/markdown/images.js +85 -0
  657. package/dist/lib/markdown/images.js.map +1 -0
  658. package/dist/lib/markdown/input.js +210 -0
  659. package/dist/lib/markdown/input.js.map +1 -0
  660. package/dist/lib/markdown/keys.js +37 -0
  661. package/dist/lib/markdown/keys.js.map +1 -0
  662. package/dist/lib/markdown/paste.js +180 -0
  663. package/dist/lib/markdown/paste.js.map +1 -0
  664. package/dist/lib/markdown/position.js +111 -0
  665. package/dist/lib/markdown/position.js.map +1 -0
  666. package/dist/lib/markdown/project.js +108 -0
  667. package/dist/lib/markdown/project.js.map +1 -0
  668. package/dist/lib/markdown/reconcile.js +127 -0
  669. package/dist/lib/markdown/reconcile.js.map +1 -0
  670. package/dist/lib/markdown/surface.js +373 -0
  671. package/dist/lib/markdown/surface.js.map +1 -0
  672. package/dist/lib/motion.js +22 -0
  673. package/dist/lib/motion.js.map +1 -0
  674. package/dist/lib/pad.js +7 -0
  675. package/dist/lib/pad.js.map +1 -0
  676. package/dist/lib/paged-window/layout.js +15 -0
  677. package/dist/lib/paged-window/layout.js.map +1 -0
  678. package/dist/lib/paged-window/list-owner.js +21 -0
  679. package/dist/lib/paged-window/list-owner.js.map +1 -0
  680. package/dist/lib/paged-window/records-binding.js +239 -0
  681. package/dist/lib/paged-window/records-binding.js.map +1 -0
  682. package/dist/lib/paged-window/store.js +562 -0
  683. package/dist/lib/paged-window/store.js.map +1 -0
  684. package/dist/lib/paged-window/use-measured-pitch.js +38 -0
  685. package/dist/lib/paged-window/use-measured-pitch.js.map +1 -0
  686. package/dist/lib/paged-window/use-page-visibility.js +36 -0
  687. package/dist/lib/paged-window/use-page-visibility.js.map +1 -0
  688. package/dist/lib/paged-window/use-paged-window.js +43 -0
  689. package/dist/lib/paged-window/use-paged-window.js.map +1 -0
  690. package/dist/lib/paged-window/use-scroll-root.js +12 -0
  691. package/dist/lib/paged-window/use-scroll-root.js.map +1 -0
  692. package/dist/lib/persist.js +84 -0
  693. package/dist/lib/persist.js.map +1 -0
  694. package/dist/lib/preference-values.js +13 -0
  695. package/dist/lib/preference-values.js.map +1 -0
  696. package/dist/lib/preferences.js +86 -0
  697. package/dist/lib/preferences.js.map +1 -0
  698. package/dist/lib/reads/hooks.js +156 -0
  699. package/dist/lib/reads/hooks.js.map +1 -0
  700. package/dist/lib/reads/optimistic.js +169 -0
  701. package/dist/lib/reads/optimistic.js.map +1 -0
  702. package/dist/lib/reads/refetch.js +108 -0
  703. package/dist/lib/reads/refetch.js.map +1 -0
  704. package/dist/lib/reads/slots.js +215 -0
  705. package/dist/lib/reads/slots.js.map +1 -0
  706. package/dist/lib/realtime/hooks.js +40 -0
  707. package/dist/lib/realtime/hooks.js.map +1 -0
  708. package/dist/lib/realtime/provider.js +25 -0
  709. package/dist/lib/realtime/provider.js.map +1 -0
  710. package/dist/lib/realtime/registry.js +472 -0
  711. package/dist/lib/realtime/registry.js.map +1 -0
  712. package/dist/lib/records/define-record-type.js +33 -0
  713. package/dist/lib/records/define-record-type.js.map +1 -0
  714. package/dist/lib/records/hooks.js +39 -0
  715. package/dist/lib/records/hooks.js.map +1 -0
  716. package/dist/lib/records/store.js +572 -0
  717. package/dist/lib/records/store.js.map +1 -0
  718. package/dist/lib/records/wire.js +58 -0
  719. package/dist/lib/records/wire.js.map +1 -0
  720. package/dist/lib/reduced-motion-help.js +19 -0
  721. package/dist/lib/reduced-motion-help.js.map +1 -0
  722. package/dist/lib/scroll-caret.js +18 -0
  723. package/dist/lib/scroll-caret.js.map +1 -0
  724. package/dist/lib/sim/createSimStore.js +54 -0
  725. package/dist/lib/sim/createSimStore.js.map +1 -0
  726. package/dist/lib/sim/latency.js +28 -0
  727. package/dist/lib/sim/latency.js.map +1 -0
  728. package/dist/lib/sim/registry.js +13 -0
  729. package/dist/lib/sim/registry.js.map +1 -0
  730. package/dist/lib/sim/settings.js +41 -0
  731. package/dist/lib/sim/settings.js.map +1 -0
  732. package/dist/lib/submit-shortcut.js +25 -0
  733. package/dist/lib/submit-shortcut.js.map +1 -0
  734. package/dist/lib/syntax/index.js +33 -0
  735. package/dist/lib/syntax/index.js.map +1 -0
  736. package/dist/lib/syntax/languages/bash.js +77 -0
  737. package/dist/lib/syntax/languages/bash.js.map +1 -0
  738. package/dist/lib/syntax/languages/css.js +81 -0
  739. package/dist/lib/syntax/languages/css.js.map +1 -0
  740. package/dist/lib/syntax/languages/html.js +91 -0
  741. package/dist/lib/syntax/languages/html.js.map +1 -0
  742. package/dist/lib/syntax/languages/index.js +49 -0
  743. package/dist/lib/syntax/languages/index.js.map +1 -0
  744. package/dist/lib/syntax/languages/javascript.js +133 -0
  745. package/dist/lib/syntax/languages/javascript.js.map +1 -0
  746. package/dist/lib/syntax/languages/json.js +45 -0
  747. package/dist/lib/syntax/languages/json.js.map +1 -0
  748. package/dist/lib/syntax/languages/mongodb.js +24 -0
  749. package/dist/lib/syntax/languages/mongodb.js.map +1 -0
  750. package/dist/lib/syntax/languages/plain.js +10 -0
  751. package/dist/lib/syntax/languages/plain.js.map +1 -0
  752. package/dist/lib/syntax/languages/sql.js +113 -0
  753. package/dist/lib/syntax/languages/sql.js.map +1 -0
  754. package/dist/lib/syntax/languages/vue.js +31 -0
  755. package/dist/lib/syntax/languages/vue.js.map +1 -0
  756. package/dist/lib/syntax/languages/yaml.js +55 -0
  757. package/dist/lib/syntax/languages/yaml.js.map +1 -0
  758. package/dist/lib/syntax/markdown/grammar.js +52 -0
  759. package/dist/lib/syntax/markdown/grammar.js.map +1 -0
  760. package/dist/lib/syntax/markdown/inline.js +477 -0
  761. package/dist/lib/syntax/markdown/inline.js.map +1 -0
  762. package/dist/lib/syntax/markdown/parse.js +464 -0
  763. package/dist/lib/syntax/markdown/parse.js.map +1 -0
  764. package/dist/lib/syntax/markdown/refs.js +94 -0
  765. package/dist/lib/syntax/markdown/refs.js.map +1 -0
  766. package/dist/lib/syntax/markdown/render.js +230 -0
  767. package/dist/lib/syntax/markdown/render.js.map +1 -0
  768. package/dist/lib/syntax/markdown/spans.js +40 -0
  769. package/dist/lib/syntax/markdown/spans.js.map +1 -0
  770. package/dist/lib/syntax/registry.js +55 -0
  771. package/dist/lib/syntax/registry.js.map +1 -0
  772. package/dist/lib/syntax/tokenize.js +96 -0
  773. package/dist/lib/syntax/tokenize.js.map +1 -0
  774. package/dist/lib/time/instant.js +7 -0
  775. package/dist/lib/time/instant.js.map +1 -0
  776. package/dist/lib/time/plain.js +83 -0
  777. package/dist/lib/time/plain.js.map +1 -0
  778. package/dist/lib/time/relativeAge.js +20 -0
  779. package/dist/lib/time/relativeAge.js.map +1 -0
  780. package/dist/lib/time/relativeClock.js +59 -0
  781. package/dist/lib/time/relativeClock.js.map +1 -0
  782. package/dist/lib/time/types.js +23 -0
  783. package/dist/lib/time/types.js.map +1 -0
  784. package/dist/lib/time/zone.js +148 -0
  785. package/dist/lib/time/zone.js.map +1 -0
  786. package/dist/lib/use-controllable.js +16 -0
  787. package/dist/lib/use-controllable.js.map +1 -0
  788. package/dist/lib/use-fill-height.js +49 -0
  789. package/dist/lib/use-fill-height.js.map +1 -0
  790. package/dist/lib/use-hydrated.js +14 -0
  791. package/dist/lib/use-hydrated.js.map +1 -0
  792. package/dist/lib/use-media-query.js +30 -0
  793. package/dist/lib/use-media-query.js.map +1 -0
  794. package/dist/lib/use-relabel-base-ui-dismiss.js +26 -0
  795. package/dist/lib/use-relabel-base-ui-dismiss.js.map +1 -0
  796. package/dist/lib/use-release-snap-drag.js +29 -0
  797. package/dist/lib/use-release-snap-drag.js.map +1 -0
  798. package/dist/lib/use-roving-options.js +18 -0
  799. package/dist/lib/use-roving-options.js.map +1 -0
  800. package/dist/lib/values/absent.js +5 -0
  801. package/dist/lib/values/absent.js.map +1 -0
  802. package/dist/lib/values/boolean.js +13 -0
  803. package/dist/lib/values/boolean.js.map +1 -0
  804. package/dist/lib/values/currency.js +23 -0
  805. package/dist/lib/values/currency.js.map +1 -0
  806. package/dist/lib/values/date.js +35 -0
  807. package/dist/lib/values/date.js.map +1 -0
  808. package/dist/lib/values/datetime.js +54 -0
  809. package/dist/lib/values/datetime.js.map +1 -0
  810. package/dist/lib/values/locale-date.js +60 -0
  811. package/dist/lib/values/locale-date.js.map +1 -0
  812. package/dist/lib/values/number.js +16 -0
  813. package/dist/lib/values/number.js.map +1 -0
  814. package/dist/pure.js +379 -0
  815. package/dist/pure.js.map +1 -0
  816. package/dist/styles.css +190 -0
  817. package/dist/theme.css +360 -0
  818. package/dist/types/components/Accordion.d.ts +15 -0
  819. package/dist/types/components/AgentWorkingSpinner.d.ts +23 -0
  820. package/dist/types/components/AppShell.d.ts +164 -0
  821. package/dist/types/components/Attention.d.ts +87 -0
  822. package/dist/types/components/Avatar.d.ts +154 -0
  823. package/dist/types/components/Badge.d.ts +131 -0
  824. package/dist/types/components/Board.d.ts +239 -0
  825. package/dist/types/components/Button.d.ts +208 -0
  826. package/dist/types/components/Callout.d.ts +163 -0
  827. package/dist/types/components/Card.d.ts +219 -0
  828. package/dist/types/components/Choice.d.ts +127 -0
  829. package/dist/types/components/CodeEditor.d.ts +86 -0
  830. package/dist/types/components/ColorPicker.d.ts +14 -0
  831. package/dist/types/components/Combobox.d.ts +43 -0
  832. package/dist/types/components/CommandPalette.d.ts +35 -0
  833. package/dist/types/components/ConcentricRing.d.ts +61 -0
  834. package/dist/types/components/ConnectionCard.d.ts +64 -0
  835. package/dist/types/components/ContextItemRow.d.ts +35 -0
  836. package/dist/types/components/CopyValue.d.ts +14 -0
  837. package/dist/types/components/CountBadge.d.ts +14 -0
  838. package/dist/types/components/DateCalendar.d.ts +30 -0
  839. package/dist/types/components/DateField.d.ts +29 -0
  840. package/dist/types/components/DatePicker.d.ts +20 -0
  841. package/dist/types/components/DateTimeText.d.ts +9 -0
  842. package/dist/types/components/DescriptionList.d.ts +40 -0
  843. package/dist/types/components/Dialog.d.ts +269 -0
  844. package/dist/types/components/DragDrop.d.ts +196 -0
  845. package/dist/types/components/Drawer.d.ts +163 -0
  846. package/dist/types/components/EditGutter.d.ts +44 -0
  847. package/dist/types/components/EmojiPicker.d.ts +30 -0
  848. package/dist/types/components/ErrorBoundary.d.ts +43 -0
  849. package/dist/types/components/Field.d.ts +37 -0
  850. package/dist/types/components/FileUpload.d.ts +22 -0
  851. package/dist/types/components/FilterMenu.d.ts +120 -0
  852. package/dist/types/components/GatesSection.d.ts +79 -0
  853. package/dist/types/components/Icon.d.ts +40 -0
  854. package/dist/types/components/IconButton.d.ts +69 -0
  855. package/dist/types/components/IconStack.d.ts +28 -0
  856. package/dist/types/components/ImageUploadField.d.ts +38 -0
  857. package/dist/types/components/InlineEdit.d.ts +183 -0
  858. package/dist/types/components/InlineMarkdownEdit.d.ts +100 -0
  859. package/dist/types/components/Input.d.ts +128 -0
  860. package/dist/types/components/LegalDocument.d.ts +23 -0
  861. package/dist/types/components/LineDiff.d.ts +53 -0
  862. package/dist/types/components/ListHeader.d.ts +45 -0
  863. package/dist/types/components/Loading.d.ts +131 -0
  864. package/dist/types/components/Markdown.d.ts +35 -0
  865. package/dist/types/components/MarkdownEditor.d.ts +129 -0
  866. package/dist/types/components/Menu.d.ts +157 -0
  867. package/dist/types/components/Navigation.d.ts +67 -0
  868. package/dist/types/components/NumberInput.d.ts +177 -0
  869. package/dist/types/components/OTPInput.d.ts +13 -0
  870. package/dist/types/components/OrderedEntityManager.d.ts +64 -0
  871. package/dist/types/components/PagedWindowList.d.ts +23 -0
  872. package/dist/types/components/PaginationBar.d.ts +31 -0
  873. package/dist/types/components/Panel.d.ts +94 -0
  874. package/dist/types/components/PasswordInput.d.ts +7 -0
  875. package/dist/types/components/PasswordRequirements.d.ts +11 -0
  876. package/dist/types/components/PatchDiff.d.ts +38 -0
  877. package/dist/types/components/PendingVeil.d.ts +8 -0
  878. package/dist/types/components/Popover.d.ts +231 -0
  879. package/dist/types/components/Progress.d.ts +580 -0
  880. package/dist/types/components/RatingScale.d.ts +30 -0
  881. package/dist/types/components/ReadMore.d.ts +26 -0
  882. package/dist/types/components/RecordCard.d.ts +413 -0
  883. package/dist/types/components/RelativeTime.d.ts +17 -0
  884. package/dist/types/components/SandboxedFrame.d.ts +37 -0
  885. package/dist/types/components/SearchInput.d.ts +6 -0
  886. package/dist/types/components/SecretField.d.ts +90 -0
  887. package/dist/types/components/SectionNav.d.ts +15 -0
  888. package/dist/types/components/Select.d.ts +53 -0
  889. package/dist/types/components/SequenceDiagram.d.ts +15 -0
  890. package/dist/types/components/SettingRow.d.ts +144 -0
  891. package/dist/types/components/SignOffRings.d.ts +29 -0
  892. package/dist/types/components/Slider.d.ts +255 -0
  893. package/dist/types/components/SolutionChoice.d.ts +49 -0
  894. package/dist/types/components/SortMenu.d.ts +45 -0
  895. package/dist/types/components/Spinner.d.ts +29 -0
  896. package/dist/types/components/Stat.d.ts +136 -0
  897. package/dist/types/components/StatusSelect.d.ts +93 -0
  898. package/dist/types/components/Surface.d.ts +145 -0
  899. package/dist/types/components/Table.d.ts +164 -0
  900. package/dist/types/components/Tabs.d.ts +142 -0
  901. package/dist/types/components/ThemeMenu.d.ts +56 -0
  902. package/dist/types/components/Toast.d.ts +63 -0
  903. package/dist/types/components/Toggle.d.ts +168 -0
  904. package/dist/types/components/ToggleMatrix.d.ts +51 -0
  905. package/dist/types/components/Tree.d.ts +20 -0
  906. package/dist/types/components/TriStateSwitch.d.ts +63 -0
  907. package/dist/types/components/VideoPlayer.d.ts +26 -0
  908. package/dist/types/components/auth/AcceptInvitationCard.d.ts +54 -0
  909. package/dist/types/components/auth/AuthLayout.d.ts +12 -0
  910. package/dist/types/components/auth/ForgotPasswordForm.d.ts +6 -0
  911. package/dist/types/components/auth/LoginForm.d.ts +13 -0
  912. package/dist/types/components/auth/ResetPasswordForm.d.ts +9 -0
  913. package/dist/types/components/auth/SignInProviders.d.ts +56 -0
  914. package/dist/types/components/auth/SignupCard.d.ts +62 -0
  915. package/dist/types/components/auth/TermsAcceptance.d.ts +14 -0
  916. package/dist/types/components/auth/index.d.ts +8 -0
  917. package/dist/types/components/board/context.d.ts +65 -0
  918. package/dist/types/components/board/recipe.d.ts +97 -0
  919. package/dist/types/components/calendar/CalendarMonth.d.ts +32 -0
  920. package/dist/types/components/calendar/CalendarTimeGrid.d.ts +74 -0
  921. package/dist/types/components/calendar/EventActions.d.ts +16 -0
  922. package/dist/types/components/calendar/format.d.ts +42 -0
  923. package/dist/types/components/calendar/palette.d.ts +17 -0
  924. package/dist/types/components/calendar/use-calendar-drag.d.ts +53 -0
  925. package/dist/types/components/calendar/use-event-keyboard.d.ts +23 -0
  926. package/dist/types/components/calendar/use-grid-navigation.d.ts +47 -0
  927. package/dist/types/components/calendar/use-now.d.ts +20 -0
  928. package/dist/types/components/card-face/AcRingGlyph.d.ts +20 -0
  929. package/dist/types/components/card-face/BoardCardAgentSlot.d.ts +19 -0
  930. package/dist/types/components/card-face/CardFace.d.ts +106 -0
  931. package/dist/types/components/card-face/CardTypeBadge.d.ts +21 -0
  932. package/dist/types/components/card-face/EffortBadge.d.ts +9 -0
  933. package/dist/types/components/card-face/GateRingGlyph.d.ts +22 -0
  934. package/dist/types/components/card-face/OverflowRow.d.ts +40 -0
  935. package/dist/types/components/card-face/TapTip.d.ts +15 -0
  936. package/dist/types/components/card-face/hit-area.d.ts +20 -0
  937. package/dist/types/components/card-face/vocabulary.d.ts +83 -0
  938. package/dist/types/components/chart/BarList.d.ts +27 -0
  939. package/dist/types/components/chart/LineChart.d.ts +64 -0
  940. package/dist/types/components/chart/ShareBar.d.ts +26 -0
  941. package/dist/types/components/chart/TimeSeriesChart.d.ts +60 -0
  942. package/dist/types/components/chart/label-metrics.d.ts +9 -0
  943. package/dist/types/components/chart/line-chart-axis.d.ts +14 -0
  944. package/dist/types/components/chart/line-chart-scale.d.ts +55 -0
  945. package/dist/types/components/chart/line-series-style.d.ts +14 -0
  946. package/dist/types/components/chart/share-bar-labels.d.ts +17 -0
  947. package/dist/types/components/chart/shared.d.ts +122 -0
  948. package/dist/types/components/chart/time-series-scale.d.ts +29 -0
  949. package/dist/types/components/chat/Attachment.d.ts +125 -0
  950. package/dist/types/components/chat/Chat.d.ts +60 -0
  951. package/dist/types/components/chat/Composer.d.ts +62 -0
  952. package/dist/types/components/chat/ContextMeter.d.ts +45 -0
  953. package/dist/types/components/chat/EffortControl.d.ts +23 -0
  954. package/dist/types/components/chat/FileCover.d.ts +14 -0
  955. package/dist/types/components/chat/Message.d.ts +66 -0
  956. package/dist/types/components/chat/MessageScroller.d.ts +18 -0
  957. package/dist/types/components/chat/ModelSelector.d.ts +44 -0
  958. package/dist/types/components/chat/StreamingMarkdown.d.ts +11 -0
  959. package/dist/types/components/chat/download-file.d.ts +7 -0
  960. package/dist/types/components/chat/file-icon.d.ts +29 -0
  961. package/dist/types/components/chat/types.d.ts +165 -0
  962. package/dist/types/components/checklist/StatusChecklist.d.ts +37 -0
  963. package/dist/types/components/checklist/index.d.ts +3 -0
  964. package/dist/types/components/checklist/tally.d.ts +19 -0
  965. package/dist/types/components/checklist/types.d.ts +28 -0
  966. package/dist/types/components/code-editor/context.d.ts +32 -0
  967. package/dist/types/components/code-editor/editing.d.ts +39 -0
  968. package/dist/types/components/code-editor/highlight.d.ts +20 -0
  969. package/dist/types/components/code-editor/recipe.d.ts +109 -0
  970. package/dist/types/components/date-timeline/DateTimeline.d.ts +99 -0
  971. package/dist/types/components/date-timeline/TimelineRow.d.ts +22 -0
  972. package/dist/types/components/date-timeline/useBarDrag.d.ts +15 -0
  973. package/dist/types/components/date-timeline/useMarkerDrag.d.ts +14 -0
  974. package/dist/types/components/date-timeline/useTimelineZoom.d.ts +23 -0
  975. package/dist/types/components/drag-drop/context.d.ts +85 -0
  976. package/dist/types/components/drag-drop/recipe.d.ts +163 -0
  977. package/dist/types/components/drag-drop/shift.d.ts +153 -0
  978. package/dist/types/components/edit/activation.d.ts +21 -0
  979. package/dist/types/components/edit/outcome.d.ts +29 -0
  980. package/dist/types/components/edit/use-edit-session.d.ts +77 -0
  981. package/dist/types/components/file-viewer/FileViewer.d.ts +2 -0
  982. package/dist/types/components/file-viewer/PageNumberJumpField.d.ts +9 -0
  983. package/dist/types/components/file-viewer/ViewerControls.d.ts +20 -0
  984. package/dist/types/components/file-viewer/ViewerRail.d.ts +10 -0
  985. package/dist/types/components/file-viewer/ViewerStage.d.ts +22 -0
  986. package/dist/types/components/file-viewer/frames.d.ts +28 -0
  987. package/dist/types/components/file-viewer/index.d.ts +3 -0
  988. package/dist/types/components/file-viewer/types.d.ts +70 -0
  989. package/dist/types/components/file-viewer/use-frame-cursor.d.ts +13 -0
  990. package/dist/types/components/file-viewer/use-viewer-keys.d.ts +24 -0
  991. package/dist/types/components/file-viewer/use-viewer-zoom.d.ts +29 -0
  992. package/dist/types/components/focus-web/FocusWeb.d.ts +3 -0
  993. package/dist/types/components/focus-web/index.d.ts +4 -0
  994. package/dist/types/components/focus-web/layout.d.ts +55 -0
  995. package/dist/types/components/focus-web/types.d.ts +131 -0
  996. package/dist/types/components/graph-explorer/GraphExplorer.d.ts +42 -0
  997. package/dist/types/components/graph-explorer/camera-math.d.ts +119 -0
  998. package/dist/types/components/graph-explorer/index.d.ts +5 -0
  999. package/dist/types/components/graph-explorer/tree-layout.d.ts +67 -0
  1000. package/dist/types/components/graph-explorer/types.d.ts +62 -0
  1001. package/dist/types/components/graph-explorer/use-camera.d.ts +81 -0
  1002. package/dist/types/components/graph-explorer/viewport-gesture.d.ts +32 -0
  1003. package/dist/types/components/kanban/KanbanBoard.d.ts +72 -0
  1004. package/dist/types/components/kanban/recipe.d.ts +73 -0
  1005. package/dist/types/components/kanban/types.d.ts +55 -0
  1006. package/dist/types/components/markdown/Affordances.d.ts +105 -0
  1007. package/dist/types/components/markdown/AttachmentStrip.d.ts +25 -0
  1008. package/dist/types/components/markdown/ImageUpload.d.ts +56 -0
  1009. package/dist/types/components/media-error.d.ts +11 -0
  1010. package/dist/types/components/nav-sections.d.ts +10 -0
  1011. package/dist/types/components/node-canvas/NodeCanvas.d.ts +66 -0
  1012. package/dist/types/components/node-canvas/index.d.ts +3 -0
  1013. package/dist/types/components/node-canvas/layout.d.ts +29 -0
  1014. package/dist/types/components/node-canvas/types.d.ts +207 -0
  1015. package/dist/types/components/node-canvas/use-canvas-gestures.d.ts +39 -0
  1016. package/dist/types/components/openapi/OpenApiViewer.d.ts +14 -0
  1017. package/dist/types/components/openapi/OperationCard.d.ts +33 -0
  1018. package/dist/types/components/openapi/SchemaView.d.ts +14 -0
  1019. package/dist/types/components/openapi/index.d.ts +6 -0
  1020. package/dist/types/components/openapi/resolve.d.ts +72 -0
  1021. package/dist/types/components/openapi/types.d.ts +128 -0
  1022. package/dist/types/components/overlay-shell.d.ts +48 -0
  1023. package/dist/types/components/overlay-stack.d.ts +18 -0
  1024. package/dist/types/components/paged-window/PageBlock.d.ts +31 -0
  1025. package/dist/types/components/provenance/ConfidenceBar.d.ts +118 -0
  1026. package/dist/types/components/provenance/ConfidenceMeter.d.ts +21 -0
  1027. package/dist/types/components/provenance/ConfidenceReadout.d.ts +17 -0
  1028. package/dist/types/components/provenance/ProvenanceBadge.d.ts +23 -0
  1029. package/dist/types/components/provenance/ProvenanceDetail.d.ts +109 -0
  1030. package/dist/types/components/provenance/ProvenanceDisclosure.d.ts +107 -0
  1031. package/dist/types/components/provenance/absence.d.ts +37 -0
  1032. package/dist/types/components/provenance/index.d.ts +7 -0
  1033. package/dist/types/components/provenance/types.d.ts +137 -0
  1034. package/dist/types/components/rbac/AccessRequestPanel.d.ts +92 -0
  1035. package/dist/types/components/rbac/AccountMenu.d.ts +46 -0
  1036. package/dist/types/components/rbac/AgentKeysList.d.ts +22 -0
  1037. package/dist/types/components/rbac/ApiKeysPanel.d.ts +26 -0
  1038. package/dist/types/components/rbac/ApiKeysTable.d.ts +65 -0
  1039. package/dist/types/components/rbac/Brand.d.ts +8 -0
  1040. package/dist/types/components/rbac/Can.d.ts +19 -0
  1041. package/dist/types/components/rbac/ChangePasswordForm.d.ts +18 -0
  1042. package/dist/types/components/rbac/DangerZone.d.ts +8 -0
  1043. package/dist/types/components/rbac/DevToolsPopover.d.ts +36 -0
  1044. package/dist/types/components/rbac/EndedLine.d.ts +21 -0
  1045. package/dist/types/components/rbac/InvitationsList.d.ts +39 -0
  1046. package/dist/types/components/rbac/InviteMembersDialog.d.ts +21 -0
  1047. package/dist/types/components/rbac/MembersPanel.d.ts +31 -0
  1048. package/dist/types/components/rbac/PermissionRequestPanel.d.ts +36 -0
  1049. package/dist/types/components/rbac/ProfileForm.d.ts +27 -0
  1050. package/dist/types/components/rbac/ProfilePage.d.ts +16 -0
  1051. package/dist/types/components/rbac/RBACProvider.d.ts +69 -0
  1052. package/dist/types/components/rbac/RoleEditorDialog.d.ts +28 -0
  1053. package/dist/types/components/rbac/RoleKeyPicker.d.ts +24 -0
  1054. package/dist/types/components/rbac/RolePermissionMatrix.d.ts +21 -0
  1055. package/dist/types/components/rbac/RolesPermissionsPage.d.ts +24 -0
  1056. package/dist/types/components/rbac/SessionsList.d.ts +35 -0
  1057. package/dist/types/components/rbac/TeamSettingsForm.d.ts +22 -0
  1058. package/dist/types/components/rbac/TeamSwitcher.d.ts +5 -0
  1059. package/dist/types/components/rbac/approvalPanelParts.d.ts +69 -0
  1060. package/dist/types/components/rbac/index.d.ts +25 -0
  1061. package/dist/types/components/rbac/permissionSections.d.ts +8 -0
  1062. package/dist/types/components/rbac/stagedForm.d.ts +25 -0
  1063. package/dist/types/components/rbac/types.d.ts +65 -0
  1064. package/dist/types/components/rbac/useStagedImage.d.ts +15 -0
  1065. package/dist/types/components/roadmap/PhaseManager.d.ts +19 -0
  1066. package/dist/types/components/roadmap/RoadmapItemCard.d.ts +51 -0
  1067. package/dist/types/components/roadmap/RoadmapPage.d.ts +12 -0
  1068. package/dist/types/components/roadmap/RoadmapSwimlaneBoard.d.ts +15 -0
  1069. package/dist/types/components/roadmap/TrackManager.d.ts +19 -0
  1070. package/dist/types/components/roadmap/UseCaseCard.d.ts +30 -0
  1071. package/dist/types/components/roadmap/UseCaseLedgerPage.d.ts +29 -0
  1072. package/dist/types/components/roadmap/chip-tones.d.ts +2 -0
  1073. package/dist/types/components/roadmap/derive.d.ts +39 -0
  1074. package/dist/types/components/roadmap/index.d.ts +10 -0
  1075. package/dist/types/components/roadmap/types.d.ts +86 -0
  1076. package/dist/types/components/stepper/Stepper.d.ts +79 -0
  1077. package/dist/types/components/stepper/derive.d.ts +49 -0
  1078. package/dist/types/components/stepper/index.d.ts +3 -0
  1079. package/dist/types/components/stepper/types.d.ts +118 -0
  1080. package/dist/types/icons/data.d.ts +2054 -0
  1081. package/dist/types/index.d.ts +209 -0
  1082. package/dist/types/lib/attention.d.ts +62 -0
  1083. package/dist/types/lib/board/anchor.d.ts +69 -0
  1084. package/dist/types/lib/board/index.d.ts +17 -0
  1085. package/dist/types/lib/board/model.d.ts +43 -0
  1086. package/dist/types/lib/board/move.d.ts +181 -0
  1087. package/dist/types/lib/board/position.d.ts +22 -0
  1088. package/dist/types/lib/board/rejection.d.ts +8 -0
  1089. package/dist/types/lib/board/types.d.ts +294 -0
  1090. package/dist/types/lib/board/use-board.d.ts +47 -0
  1091. package/dist/types/lib/calendar/band-packer.d.ts +53 -0
  1092. package/dist/types/lib/calendar/drag.d.ts +125 -0
  1093. package/dist/types/lib/calendar/index.d.ts +4 -0
  1094. package/dist/types/lib/calendar/lane-packer.d.ts +88 -0
  1095. package/dist/types/lib/calendar/segments.d.ts +91 -0
  1096. package/dist/types/lib/calendar/types.d.ts +166 -0
  1097. package/dist/types/lib/chart-palette.d.ts +14 -0
  1098. package/dist/types/lib/clipboard.d.ts +12 -0
  1099. package/dist/types/lib/cn.d.ts +7 -0
  1100. package/dist/types/lib/color.d.ts +14 -0
  1101. package/dist/types/lib/component-guidance.d.ts +15 -0
  1102. package/dist/types/lib/confidence.d.ts +28 -0
  1103. package/dist/types/lib/date-timeline/scale.d.ts +143 -0
  1104. package/dist/types/lib/design-frame/document.d.ts +39 -0
  1105. package/dist/types/lib/design-frame/mini-app-script.d.ts +29 -0
  1106. package/dist/types/lib/design-frame/mini-app.d.ts +17 -0
  1107. package/dist/types/lib/design-frame/protocol.d.ts +78 -0
  1108. package/dist/types/lib/dev-warn.d.ts +10 -0
  1109. package/dist/types/lib/dnd/announce.d.ts +124 -0
  1110. package/dist/types/lib/dnd/autoscroll.d.ts +88 -0
  1111. package/dist/types/lib/dnd/cross-drop.d.ts +18 -0
  1112. package/dist/types/lib/dnd/geometry.d.ts +126 -0
  1113. package/dist/types/lib/dnd/index.d.ts +17 -0
  1114. package/dist/types/lib/dnd/sensors/gesture.d.ts +37 -0
  1115. package/dist/types/lib/dnd/sensors/keyboard.d.ts +54 -0
  1116. package/dist/types/lib/dnd/sensors/pointer.d.ts +59 -0
  1117. package/dist/types/lib/dnd/session.d.ts +124 -0
  1118. package/dist/types/lib/dnd/types.d.ts +226 -0
  1119. package/dist/types/lib/dnd/use-drag.d.ts +82 -0
  1120. package/dist/types/lib/dom/scroll-ancestor.d.ts +15 -0
  1121. package/dist/types/lib/format.d.ts +33 -0
  1122. package/dist/types/lib/group-in-order.d.ts +13 -0
  1123. package/dist/types/lib/header-fold.d.ts +10 -0
  1124. package/dist/types/lib/i18n/areas/auth-provenance-flows.d.ts +287 -0
  1125. package/dist/types/lib/i18n/areas/board.d.ts +51 -0
  1126. package/dist/types/lib/i18n/areas/card-face.d.ts +8 -0
  1127. package/dist/types/lib/i18n/areas/chat-chart.d.ts +202 -0
  1128. package/dist/types/lib/i18n/areas/code-editor.d.ts +40 -0
  1129. package/dist/types/lib/i18n/areas/date-timeline.d.ts +36 -0
  1130. package/dist/types/lib/i18n/areas/dates.d.ts +103 -0
  1131. package/dist/types/lib/i18n/areas/docs-views.d.ts +297 -0
  1132. package/dist/types/lib/i18n/areas/feedback.d.ts +132 -0
  1133. package/dist/types/lib/i18n/areas/formats.d.ts +30 -0
  1134. package/dist/types/lib/i18n/areas/forms.d.ts +182 -0
  1135. package/dist/types/lib/i18n/areas/keys.d.ts +15 -0
  1136. package/dist/types/lib/i18n/areas/markdown.d.ts +150 -0
  1137. package/dist/types/lib/i18n/areas/move-rejected.d.ts +16 -0
  1138. package/dist/types/lib/i18n/areas/navigation.d.ts +185 -0
  1139. package/dist/types/lib/i18n/areas/rbac.d.ts +635 -0
  1140. package/dist/types/lib/i18n/emphasis.d.ts +3 -0
  1141. package/dist/types/lib/i18n/index.d.ts +10 -0
  1142. package/dist/types/lib/i18n/number-format.d.ts +5 -0
  1143. package/dist/types/lib/i18n/plural.d.ts +7 -0
  1144. package/dist/types/lib/i18n/provider.d.ts +16 -0
  1145. package/dist/types/lib/i18n/strings.d.ts +18 -0
  1146. package/dist/types/lib/icons.d.ts +22 -0
  1147. package/dist/types/lib/interactive-target.d.ts +3 -0
  1148. package/dist/types/lib/intl-cache.d.ts +31 -0
  1149. package/dist/types/lib/legal-document.d.ts +82 -0
  1150. package/dist/types/lib/line-diff-model.d.ts +39 -0
  1151. package/dist/types/lib/markdown/attachments.d.ts +50 -0
  1152. package/dist/types/lib/markdown/caret-map.d.ts +69 -0
  1153. package/dist/types/lib/markdown/caret.d.ts +6 -0
  1154. package/dist/types/lib/markdown/commands.d.ts +186 -0
  1155. package/dist/types/lib/markdown/convert.d.ts +99 -0
  1156. package/dist/types/lib/markdown/dom.d.ts +30 -0
  1157. package/dist/types/lib/markdown/edit.d.ts +16 -0
  1158. package/dist/types/lib/markdown/history.d.ts +59 -0
  1159. package/dist/types/lib/markdown/hotkeys.d.ts +63 -0
  1160. package/dist/types/lib/markdown/image-pipeline.d.ts +173 -0
  1161. package/dist/types/lib/markdown/images.d.ts +138 -0
  1162. package/dist/types/lib/markdown/input.d.ts +38 -0
  1163. package/dist/types/lib/markdown/keys.d.ts +34 -0
  1164. package/dist/types/lib/markdown/paste.d.ts +9 -0
  1165. package/dist/types/lib/markdown/position.d.ts +43 -0
  1166. package/dist/types/lib/markdown/project.d.ts +88 -0
  1167. package/dist/types/lib/markdown/reconcile.d.ts +63 -0
  1168. package/dist/types/lib/markdown/surface.d.ts +236 -0
  1169. package/dist/types/lib/motion.d.ts +30 -0
  1170. package/dist/types/lib/pad.d.ts +6 -0
  1171. package/dist/types/lib/paged-window/index.d.ts +2 -0
  1172. package/dist/types/lib/paged-window/layout.d.ts +21 -0
  1173. package/dist/types/lib/paged-window/list-owner.d.ts +12 -0
  1174. package/dist/types/lib/paged-window/records-binding.d.ts +102 -0
  1175. package/dist/types/lib/paged-window/store.d.ts +307 -0
  1176. package/dist/types/lib/paged-window/use-measured-pitch.d.ts +34 -0
  1177. package/dist/types/lib/paged-window/use-page-visibility.d.ts +20 -0
  1178. package/dist/types/lib/paged-window/use-paged-window.d.ts +61 -0
  1179. package/dist/types/lib/paged-window/use-scroll-root.d.ts +18 -0
  1180. package/dist/types/lib/persist.d.ts +57 -0
  1181. package/dist/types/lib/preference-values.d.ts +72 -0
  1182. package/dist/types/lib/preferences.d.ts +26 -0
  1183. package/dist/types/lib/reads/hooks.d.ts +49 -0
  1184. package/dist/types/lib/reads/index.d.ts +5 -0
  1185. package/dist/types/lib/reads/optimistic.d.ts +119 -0
  1186. package/dist/types/lib/reads/refetch.d.ts +83 -0
  1187. package/dist/types/lib/reads/slots.d.ts +137 -0
  1188. package/dist/types/lib/reads/types.d.ts +155 -0
  1189. package/dist/types/lib/realtime/hooks.d.ts +38 -0
  1190. package/dist/types/lib/realtime/index.d.ts +4 -0
  1191. package/dist/types/lib/realtime/provider.d.ts +38 -0
  1192. package/dist/types/lib/realtime/registry.d.ts +225 -0
  1193. package/dist/types/lib/realtime/types.d.ts +242 -0
  1194. package/dist/types/lib/records/define-record-type.d.ts +29 -0
  1195. package/dist/types/lib/records/hooks.d.ts +46 -0
  1196. package/dist/types/lib/records/index.d.ts +5 -0
  1197. package/dist/types/lib/records/store.d.ts +289 -0
  1198. package/dist/types/lib/records/types.d.ts +195 -0
  1199. package/dist/types/lib/records/wire.d.ts +96 -0
  1200. package/dist/types/lib/reduced-motion-help.d.ts +23 -0
  1201. package/dist/types/lib/scroll-caret.d.ts +6 -0
  1202. package/dist/types/lib/sim/createSimStore.d.ts +18 -0
  1203. package/dist/types/lib/sim/index.d.ts +5 -0
  1204. package/dist/types/lib/sim/latency.d.ts +10 -0
  1205. package/dist/types/lib/sim/registry.d.ts +14 -0
  1206. package/dist/types/lib/sim/settings.d.ts +11 -0
  1207. package/dist/types/lib/sim/types.d.ts +3 -0
  1208. package/dist/types/lib/submit-shortcut.d.ts +24 -0
  1209. package/dist/types/lib/syntax/index.d.ts +16 -0
  1210. package/dist/types/lib/syntax/languages/bash.d.ts +1 -0
  1211. package/dist/types/lib/syntax/languages/css.d.ts +1 -0
  1212. package/dist/types/lib/syntax/languages/html.d.ts +17 -0
  1213. package/dist/types/lib/syntax/languages/index.d.ts +33 -0
  1214. package/dist/types/lib/syntax/languages/javascript.d.ts +22 -0
  1215. package/dist/types/lib/syntax/languages/json.d.ts +1 -0
  1216. package/dist/types/lib/syntax/languages/mongodb.d.ts +1 -0
  1217. package/dist/types/lib/syntax/languages/plain.d.ts +9 -0
  1218. package/dist/types/lib/syntax/languages/sql.d.ts +4 -0
  1219. package/dist/types/lib/syntax/languages/vue.d.ts +1 -0
  1220. package/dist/types/lib/syntax/languages/yaml.d.ts +1 -0
  1221. package/dist/types/lib/syntax/markdown/frames.d.ts +145 -0
  1222. package/dist/types/lib/syntax/markdown/grammar.d.ts +1 -0
  1223. package/dist/types/lib/syntax/markdown/index.d.ts +5 -0
  1224. package/dist/types/lib/syntax/markdown/inline.d.ts +21 -0
  1225. package/dist/types/lib/syntax/markdown/parse.d.ts +15 -0
  1226. package/dist/types/lib/syntax/markdown/refs.d.ts +47 -0
  1227. package/dist/types/lib/syntax/markdown/render.d.ts +25 -0
  1228. package/dist/types/lib/syntax/markdown/spans.d.ts +84 -0
  1229. package/dist/types/lib/syntax/markdown/types.d.ts +108 -0
  1230. package/dist/types/lib/syntax/registry.d.ts +37 -0
  1231. package/dist/types/lib/syntax/tokenize.d.ts +17 -0
  1232. package/dist/types/lib/syntax/types.d.ts +119 -0
  1233. package/dist/types/lib/time/index.d.ts +4 -0
  1234. package/dist/types/lib/time/instant.d.ts +2 -0
  1235. package/dist/types/lib/time/plain.d.ts +61 -0
  1236. package/dist/types/lib/time/relativeAge.d.ts +18 -0
  1237. package/dist/types/lib/time/relativeClock.d.ts +8 -0
  1238. package/dist/types/lib/time/types.d.ts +87 -0
  1239. package/dist/types/lib/time/zone.d.ts +106 -0
  1240. package/dist/types/lib/use-controllable.d.ts +14 -0
  1241. package/dist/types/lib/use-fill-height.d.ts +26 -0
  1242. package/dist/types/lib/use-hydrated.d.ts +8 -0
  1243. package/dist/types/lib/use-media-query.d.ts +29 -0
  1244. package/dist/types/lib/use-relabel-base-ui-dismiss.d.ts +6 -0
  1245. package/dist/types/lib/use-release-snap-drag.d.ts +25 -0
  1246. package/dist/types/lib/use-roving-options.d.ts +10 -0
  1247. package/dist/types/lib/values/absent.d.ts +7 -0
  1248. package/dist/types/lib/values/boolean.d.ts +29 -0
  1249. package/dist/types/lib/values/currency.d.ts +22 -0
  1250. package/dist/types/lib/values/date.d.ts +30 -0
  1251. package/dist/types/lib/values/datetime.d.ts +48 -0
  1252. package/dist/types/lib/values/index.d.ts +5 -0
  1253. package/dist/types/lib/values/locale-date.d.ts +34 -0
  1254. package/dist/types/lib/values/number.d.ts +27 -0
  1255. package/dist/types/pure.d.ts +48 -0
  1256. package/package.json +136 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeCanvas.js","sources":["../../../src/components/node-canvas/NodeCanvas.tsx"],"sourcesContent":["import { useCallback, useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { useNumberFormat, useUiStrings, type UiStrings } from \"../../lib/i18n\";\nimport { Icon } from \"../Icon\";\nimport { IconButton } from \"../IconButton\";\nimport { Breadcrumb } from \"../Navigation\";\nimport { Tooltip } from \"../Popover\";\nimport { ToggleGroup, Toggle } from \"../Toggle\";\nimport { LAYOUT_DEFAULTS, edgePath, layoutGraph, neighbourhood } from \"./layout\";\nimport { useCanvasGestures } from \"./use-canvas-gestures\";\nimport type {\n CanvasGraph,\n CanvasGroup,\n CanvasNode,\n CanvasOrientation,\n CanvasPlacedEdge,\n NodeRenderer,\n PlacedNode,\n} from \"./types\";\n\n/* ============================================================================\n NODE CANVAS — a graph drawn as a chart you can pan, rearrange and drill into.\n (DX-3344 — generalised from a tree-only component; see `types.ts` and\n `layout.ts` for why the data model and the layout engine both changed\n completely rather than growing a second path beside the old ones.)\n\n IT IS NOT `Tree`, AND THE DIFFERENCE IS THE GEOMETRY. `Tree` is an indented\n list: every visible node is a row, rows stack, and expanding one pushes the\n rest down. This positions nodes in two dimensions and draws the edges, which\n is the right shape when what you are reading is the SHAPE of the graph — how\n a cluster connects to its neighbours, where the mass sits — rather than a\n path through it. If you want a file explorer, use `Tree`.\n\n GROUPS ARE THE ONE PROGRESSIVE-DISCLOSURE MECHANISM, replacing the old\n tree's `depth` prop entirely. A real graph worth drawing is unreadable at\n full detail (see `layout.ts`'s module doc for the measured numbers), and\n \"show N levels down from a root\" has no meaning once a node can have more\n than one parent or sit in a cycle. `groups` (declared) and cycles\n (auto-detected — see `layout.ts`) are BOTH collapsed to one box by default,\n and a click drills into whichever one is clicked — a graph-shaped version of\n exactly the re-root/breadcrumb mechanism the tree version had, narrowed from\n an arbitrarily deep trail to one level, because groups here are flat.\n\n WHAT CHANGED ABOUT CLICKING A NODE. The tree version's click always\n descended, because \"look inside this node\" and \"this node has children\" were\n the same fact. In a general graph they are not: an ordinary node's\n connections are edges to draw, not children to descend into, so clicking one\n now fires `onNodeClick` for the CONSUMER to act on (open a detail view,\n navigate elsewhere) and drilling in is reserved for the two things that are\n actually collapsed boxes standing in for other nodes — a group and a\n condensed cycle.\n\n KEYBOARD NAVIGATION GENERALISES THE SAME WAY THE TREE VERSION DID IT: ONE\n roving tab stop, and the arrows move STRUCTURALLY. \"Structural\" used to mean\n sibling / parent / child; in a graph without a single hierarchy those become\n PREDECESSOR (an edge pointing at this node), SUCCESSOR (an edge this node\n points to), and same-RANK neighbour (dagre already aligns every node on one\n rank to the same cross-axis coordinate, so \"the next box on this level\" is\n exactly as well-defined as \"next sibling\" was in a tree).\n ========================================================================= */\n\nexport interface NodeCanvasProps<Extra = unknown> {\n /** The whole graph — every node and edge, however many scopes it spans. Never mutated. */\n graph: CanvasGraph<Extra>;\n /** Named clusters nodes can belong to via `CanvasNode.groupId`. Flat — see `CanvasGroup`. */\n groups?: readonly CanvasGroup[];\n /**\n * What this canvas IS — \"Import graph for the docs map\", \"Service dependency graph\".\n *\n * Required for the same reason `StatusChecklist.label` and `KanbanBoard.label`\n * are: it is the accessible name of the whole structure, and somebody landing\n * on it by keyboard or in the list view has nothing else to tell them what\n * they are inside.\n */\n label: string;\n /**\n * The node body. Receives the consumer's own node type and a context of\n * purely structural facts — see `NodeRenderContext`.\n *\n * A RENDER PROP RATHER THAN CHILDREN-AS-A-FUNCTION, for the same reason\n * `ProvenanceDisclosure` takes `actions` and `Chat` takes a `components` map:\n * a canvas draws MANY nodes and `children` reads as one. Optional: the\n * default draws the label, and a member count when this box stands in for a\n * group or a condensed cycle.\n *\n * Called with a SYNTHETIC node for a collapsed group or cycle — `{id, label}`\n * only, `Extra`'s own fields absent — since no single real node's `Extra`\n * would be honest to hand back for a box standing in for several.\n */\n renderNode?: NodeRenderer<Extra>;\n /**\n * The hover summary's content. Defaults to the node's `label`. Return\n * `null`/`undefined` to suppress the tooltip for a particular node.\n */\n renderSummary?: (node: CanvasNode<Extra>) => React.ReactNode;\n /** A class name for one drawn edge, keyed on its (possibly aggregated) `kind`. */\n edgeClassName?: (edge: CanvasPlacedEdge) => string | undefined;\n /** Which way the chart grows. See `CanvasOrientation`. */\n orientation?: CanvasOrientation;\n /** Along-axis extent of a node that does not declare its own, in px. */\n nodeWidth?: number;\n /** Cross-axis extent of a node that does not declare its own, in px. */\n nodeHeight?: number;\n /** Height of the scrolling viewport. Any CSS length. */\n height?: string;\n /** Which group is currently drilled into. `null` is the top level. Controlled. */\n expandedGroupId?: string | null;\n /** Initial drilled-into group for uncontrolled use. Default `null` (top level). */\n defaultExpandedGroupId?: string | null;\n /** Fired whenever the drilled-into group changes, from either a click or the keyboard. */\n onExpandedGroupIdChange?: (groupId: string | null) => void;\n /** Fired when an ORDINARY node (not a group, not a cycle) is clicked. Navigation is the consumer's. */\n onNodeClick?: (node: CanvasNode<Extra>) => void;\n /** Fired when a node drag commits. The offset is from its laid-out position. */\n onNodeDragEnd?: (event: { id: string; offset: { x: number; y: number } }) => void;\n /** Nothing pans, drags or descends. Reading still works, including by keyboard. */\n disabled?: boolean;\n className?: string;\n}\n\n/* Clear space around the drawing inside the scrolled plane — what a node can\n be dragged INTO. Without it the layout extent is the plane extent and every\n node is already against a wall, so a drag clamps the instant it starts. */\nconst PLANE_PADDING = 96;\n\n/** How many hops out `NodeRenderContext.focusDistance` tracks. See `layout.ts#neighbourhood`. */\nconst FOCUS_HOPS = 2;\n\nfunction isGroupLike(placed: PlacedNode<unknown>): boolean {\n return placed.group !== null || placed.cycle;\n}\n\nfunction placedLabel(placed: PlacedNode<unknown>, strings: UiStrings[\"nodeCanvas\"], fmt: (n: number) => string): string {\n if (placed.node) return placed.node.label;\n if (placed.group) return placed.group.label;\n return strings.cyclicCluster(fmt(placed.memberCount));\n}\n\n/** The synthetic node `renderNode`/list rows receive for a group or a cycle box. */\nfunction syntheticNode<Extra>(placed: PlacedNode<Extra>, strings: UiStrings[\"nodeCanvas\"], fmt: (n: number) => string): CanvasNode<Extra> {\n if (placed.node) return placed.node;\n return { id: placed.id, label: placedLabel(placed, strings, fmt) } as CanvasNode<Extra>;\n}\n\n/** The default body. Renders the label, and a member count for a collapsed box. */\nfunction DefaultNodeBody({ label, memberCount, isGroup }: { label: string; memberCount: number; isGroup: boolean }) {\n const strings = useUiStrings().nodeCanvas;\n const fmt = useNumberFormat();\n return (\n <div className=\"flex h-full flex-col justify-center gap-1 px-3 py-2\">\n <span className=\"line-clamp-2 text-sm font-medium text-primary\">{label}</span>\n {isGroup && (\n <span className=\"tabular text-2xs text-tertiary\">\n {strings.itemCount(memberCount, fmt(memberCount))}\n </span>\n )}\n </div>\n );\n}\n\nexport function NodeCanvas<Extra = unknown>({\n graph,\n groups = [],\n label,\n renderNode,\n renderSummary,\n edgeClassName,\n orientation = LAYOUT_DEFAULTS.orientation,\n nodeWidth,\n nodeHeight,\n height = \"30rem\",\n expandedGroupId,\n defaultExpandedGroupId = null,\n onExpandedGroupIdChange,\n onNodeClick,\n onNodeDragEnd,\n disabled,\n className,\n}: NodeCanvasProps<Extra>) {\n const strings = useUiStrings().nodeCanvas;\n const fmt = useNumberFormat();\n const statusId = useId();\n\n const [uncontrolledScope, setUncontrolledScope] = useState<string | null>(defaultExpandedGroupId);\n const scopeGroupId = expandedGroupId !== undefined ? expandedGroupId : uncontrolledScope;\n const setScope = useCallback(\n (next: string | null) => {\n if (expandedGroupId === undefined) setUncontrolledScope(next);\n onExpandedGroupIdChange?.(next);\n },\n [expandedGroupId, onExpandedGroupIdChange],\n );\n\n /**\n * Drilled into a CONDENSED CYCLE, nested one level below `scopeGroupId` —\n * uncontrolled only, deliberately. A cycle has no stable, externally\n * declared id the way a `CanvasGroup` does (see `CanvasCycleScope` in\n * `types.ts`), so there is nothing sensible for a consumer to pass in;\n * captured straight off the `PlacedNode.memberIds` the click landed on.\n */\n const [cycleScope, setCycleScope] = useState<readonly string[] | null>(null);\n /* Memoised on `cycleScope`'s own identity, not recreated as a fresh object\n literal every render — `layoutGraph` is called from a `useMemo` keyed on\n this value, and a new object each render would recompute the whole\n layout on every unrelated re-render for as long as a cycle stays drilled into. */\n const layoutScope = useMemo(\n () => (cycleScope ? { cycleMemberIds: cycleScope } : scopeGroupId),\n [cycleScope, scopeGroupId],\n );\n\n const [focusedId, setFocusedId] = useState<string | null>(null);\n const [view, setView] = useState<\"canvas\" | \"list\">(\"canvas\");\n\n /* NARROW VIEWPORTS DEFAULT TO THE LIST — a positioned chart at 375px has no\n room to lay anything out in, and truncating every label to one letter (the\n spike's own finding) is not a real reading experience. This runs once, on\n mount, and never overrides an explicit later choice: a phone user who\n switches TO the canvas deliberately is not flipped back on the next\n re-render. */\n const viewInitialised = useRef(false);\n useEffect(() => {\n if (viewInitialised.current) return;\n viewInitialised.current = true;\n if (typeof window !== \"undefined\" && window.matchMedia(\"(max-width: 640px)\").matches) {\n setView(\"list\");\n }\n }, []);\n\n /* A DIFFERENT GRAPH RESETS THE SCOPE rather than trying to keep it — a scope\n naming a group that no longer exists is not recoverable in general, and\n landing back at the top with no explanation is less confusing than\n silently rendering nothing.\n\n COMPARED BY `graph.nodes`/`graph.edges`, NOT BY `graph` ITSELF. `graph`\n is near-always a `{ nodes, edges }` object literal written inline in\n JSX — this file's own demo does exactly that over module-level `const`\n arrays — so a fresh `graph` IDENTITY on every parent re-render is the\n ordinary case, not the exceptional one. Resetting on that would drop a\n consumer's drilled-in scope on every unrelated re-render of whatever\n renders this canvas. `nodes`/`edges` are the arrays a consumer actually\n controls the identity of (a `useMemo`, or a genuinely stable module\n constant), so THEIR identity is what \"the data changed\" means here. */\n const graphNodesRef = useRef(graph.nodes);\n const graphEdgesRef = useRef(graph.edges);\n if (graphNodesRef.current !== graph.nodes || graphEdgesRef.current !== graph.edges) {\n graphNodesRef.current = graph.nodes;\n graphEdgesRef.current = graph.edges;\n if (expandedGroupId === undefined) setUncontrolledScope(defaultExpandedGroupId);\n setCycleScope(null);\n setFocusedId(null);\n }\n\n const layout = useMemo(\n () => layoutGraph(graph, groups, layoutScope, { orientation, nodeWidth, nodeHeight }),\n [graph, groups, layoutScope, orientation, nodeWidth, nodeHeight],\n );\n\n const byId = useMemo(() => new Map(layout.nodes.map((n) => [n.id, n])), [layout.nodes]);\n const currentGroup = scopeGroupId ? groups.find((g) => g.id === scopeGroupId) ?? null : null;\n\n const plane = useMemo(\n () => ({ width: layout.width + PLANE_PADDING * 2, height: layout.height + PLANE_PADDING * 2 }),\n [layout],\n );\n\n const boxes = useMemo(() => {\n const map = new Map<string, PlacedNode<Extra>>();\n for (const node of layout.nodes) {\n map.set(node.id, { ...node, x: node.x + PLANE_PADDING, y: node.y + PLANE_PADDING });\n }\n return map;\n }, [layout]);\n\n const layoutBoxOf = useCallback(\n (id: string) => {\n const box = boxes.get(id);\n return box ? { x: box.x, y: box.y, width: box.width, height: box.height } : null;\n },\n [boxes],\n );\n\n const activate = useCallback(\n (id: string) => {\n const placed = byId.get(id);\n if (!placed) return;\n /* A DECLARED group drills via its own stable id (`setScope`, which the\n consumer can control); a CONDENSED CYCLE has no such id, so its\n membership is captured directly off THIS render's `PlacedNode` —\n see `CanvasCycleScope` in `types.ts` for why. */\n if (placed.group) {\n setScope(placed.group.id);\n setFocusedId(id);\n return;\n }\n if (placed.cycle) {\n setCycleScope(placed.memberIds);\n setFocusedId(null);\n return;\n }\n setFocusedId(id);\n if (placed.node) onNodeClick?.(placed.node);\n },\n [byId, onNodeClick, setScope],\n );\n\n const gestures = useCanvasGestures({\n layoutBoxOf,\n planeSize: plane,\n onNodeClick: activate,\n onNodeDragEnd,\n disabled,\n });\n\n const { clearOffsets } = gestures;\n /* Offsets are deltas from a layout that no longer exists the moment the\n canvas changes scope or orientation, so they are dropped with it. */\n const layoutKey = `${scopeGroupId ?? \"\"}:${cycleScope?.join(\",\") ?? \"\"}:${orientation}`;\n const layoutKeyRef = useRef(layoutKey);\n useEffect(() => {\n if (layoutKeyRef.current === layoutKey) return;\n layoutKeyRef.current = layoutKey;\n clearOffsets();\n }, [layoutKey, clearOffsets]);\n\n const positionOf = useCallback(\n (id: string) => {\n const box = boxes.get(id);\n if (!box) return null;\n const offset = gestures.offsets[id];\n return {\n x: box.x + (offset?.x ?? 0),\n y: box.y + (offset?.y ?? 0),\n width: box.width,\n height: box.height,\n };\n },\n [boxes, gestures.offsets],\n );\n\n /* --- focus neighbourhood ------------------------------------------------ */\n\n const neighbours = useMemo(\n () => (focusedId ? neighbourhood(focusedId, layout.edges, FOCUS_HOPS) : null),\n [focusedId, layout.edges],\n );\n\n /* --- keyboard ------------------------------------------------------------ */\n\n const treeRef = useRef<HTMLDivElement | null>(null);\n /**\n * The DEFAULT tab stop, when nothing has taken focus yet: the topmost,\n * then leftmost, SOURCE node — one with no incoming edge in this scope.\n *\n * `layout.nodes`' own order is an artefact of Tarjan's component order, not\n * a reading order, so picking its first entry would start the canvas\n * somewhere arbitrary on every render. A source node is this graph's closest\n * analogue to the tree version's \"always starts at the root\": deterministic,\n * and the natural place a reader's eye lands first in a ranked chart.\n */\n const defaultTabStopId = useMemo(() => {\n if (layout.nodes.length === 0) return null;\n const hasIncoming = new Set(layout.edges.map((edge) => edge.to));\n const sources = layout.nodes.filter((node) => !hasIncoming.has(node.id));\n const candidates = sources.length > 0 ? sources : layout.nodes;\n return [...candidates].sort((a, b) => a.y - b.y || a.x - b.x)[0]!.id;\n }, [layout.nodes, layout.edges]);\n const tabStopId = focusedId && boxes.has(focusedId) ? focusedId : defaultTabStopId;\n\n const focusNode = useCallback((id: string) => {\n setFocusedId(id);\n queueMicrotask(() => {\n /* SCOPED TO THIS CANVAS'S OWN TREE, never `document` — two canvases can\n legitimately draw the same node id, and a document-wide lookup would\n move focus into whichever one happens to render first. */\n const el = treeRef.current?.querySelector<HTMLElement>(\n `[data-canvas-node=\"${CSS.escape(id)}\"]`,\n );\n el?.focus();\n el?.scrollIntoView({ block: \"nearest\", inline: \"nearest\" });\n });\n }, []);\n\n const ascend = useCallback(() => {\n /* Pops the INNERMOST level first — a drilled-into cycle sits one level\n below whatever group scope (or the top level) it was entered from.\n Focus is cleared rather than aimed at the box just left: that box's id\n in the PARENT scope (`group:<id>` for a declared group, an entirely\n different `cycle:<id>` for a cycle — recomputed fresh, not the same\n string) is not the id `boxes` is keyed on here, so guessing it wrong\n silently focused an unrelated node with that literal id. Clearing lets\n `defaultTabStopId` pick a real, present node instead. */\n if (cycleScope) {\n setCycleScope(null);\n setFocusedId(null);\n return;\n }\n if (scopeGroupId === null) return;\n setScope(null);\n setFocusedId(null);\n }, [cycleScope, scopeGroupId, setScope]);\n\n const rankKey = useCallback(\n (placed: { x: number; y: number }) => (orientation === \"vertical\" ? Math.round(placed.y) : Math.round(placed.x)),\n [orientation],\n );\n\n function siblingOf(id: string, step: number): string | null {\n const box = boxes.get(id);\n if (!box) return null;\n const rank = rankKey(box);\n const rankMates = layout.nodes\n .filter((node) => rankKey(node) === rank)\n .sort((a, b) => (orientation === \"vertical\" ? a.x - b.x : a.y - b.y));\n const index = rankMates.findIndex((node) => node.id === id);\n return rankMates[index + step]?.id ?? null;\n }\n\n function predecessorOf(id: string): string | null {\n return layout.edges.find((edge) => edge.to === id)?.from ?? null;\n }\n function successorOf(id: string): string | null {\n return layout.edges.find((edge) => edge.from === id)?.to ?? null;\n }\n\n function onKeyDown(event: React.KeyboardEvent, id: string) {\n /* ARROWS FOLLOW THE DRAWING, NOT THE DATA — same rule the tree version\n used, generalised: in a vertical chart, rank-mates sit left and right of\n each other and predecessors/successors are above/below. */\n const vertical = orientation === \"vertical\";\n const prevRankMate = vertical ? \"ArrowLeft\" : \"ArrowUp\";\n const nextRankMate = vertical ? \"ArrowRight\" : \"ArrowDown\";\n const toPredecessor = vertical ? \"ArrowUp\" : \"ArrowLeft\";\n const toSuccessor = vertical ? \"ArrowDown\" : \"ArrowRight\";\n\n let target: string | null = null;\n switch (event.key) {\n case prevRankMate:\n target = siblingOf(id, -1);\n break;\n case nextRankMate:\n target = siblingOf(id, 1);\n break;\n case toPredecessor:\n target = predecessorOf(id);\n break;\n case toSuccessor:\n target = successorOf(id);\n break;\n case \"Enter\":\n case \" \":\n event.preventDefault();\n if (!disabled) activate(id);\n return;\n case \"Backspace\":\n /* Not Escape: Escape already means \"abandon the drag in flight\". */\n event.preventDefault();\n if (!disabled) ascend();\n return;\n default:\n return;\n }\n if (!target) return;\n event.preventDefault();\n focusNode(target);\n }\n\n /* --- initial position ---------------------------------------------------- */\n\n const viewportRef = useRef<HTMLDivElement | null>(null);\n const { bindViewport } = gestures;\n const setViewport = useCallback(\n (node: HTMLDivElement | null) => {\n viewportRef.current = node;\n bindViewport(node);\n },\n [bindViewport],\n );\n\n /* CENTRE ON ARRIVAL — the plane is wider than the viewport for any graph\n worth drawing, and opening scrolled to the top-left corner of the padding\n reads as an empty component. */\n useEffect(() => {\n const el = viewportRef.current;\n if (!el || layout.nodes.length === 0) return;\n el.scrollLeft = Math.max(0, plane.width / 2 - el.clientWidth / 2);\n el.scrollTop = Math.max(0, plane.height / 2 - el.clientHeight / 2);\n // eslint-disable-next-line react-hooks/exhaustive-deps -- re-centre on scope change, not every offset change\n }, [scopeGroupId, cycleScope, plane.width, plane.height]);\n\n const toTop = useCallback(() => {\n setScope(null);\n setCycleScope(null);\n }, [setScope]);\n\n const crumbs = [\n { label, onClick: scopeGroupId === null && !cycleScope ? undefined : toTop },\n ...(currentGroup\n ? [{ label: currentGroup.label, onClick: cycleScope ? () => setCycleScope(null) : undefined }]\n : []),\n ...(cycleScope ? [{ label: strings.cyclicCluster(fmt(cycleScope.length)), onClick: undefined }] : []),\n ];\n\n const connections = useCallback(\n (id: string) => {\n const out = layout.edges.filter((edge) => edge.from === id).map((edge) => byId.get(edge.to));\n return out.filter((n): n is PlacedNode<Extra> => Boolean(n));\n },\n [layout.edges, byId],\n );\n\n const body = (placed: PlacedNode<Extra>, isFocused: boolean, isDragging: boolean) => {\n const node = syntheticNode(placed, strings, fmt);\n const context = {\n isGroup: isGroupLike(placed),\n memberCount: placed.memberCount,\n isFocused,\n isDragging,\n focusDistance: neighbours?.get(placed.id) ?? null,\n };\n if (renderNode) return renderNode(node, context);\n return <DefaultNodeBody label={node.label} memberCount={placed.memberCount} isGroup={context.isGroup} />;\n };\n\n const summaryOf = (placed: PlacedNode<Extra>): React.ReactNode => {\n const node = syntheticNode(placed, strings, fmt);\n return renderSummary ? renderSummary(node) : node.label;\n };\n\n return (\n <div\n className={cn(\n \"relative flex min-w-0 flex-col overflow-hidden rounded-xl border border-border bg-surface\",\n className,\n )}\n >\n <div className=\"flex flex-wrap items-center gap-2 border-b border-border-subtle px-3 py-2\">\n <IconButton\n icon={<Icon name=\"arrow-up\" size=\"sm\" />}\n label={strings.goUp}\n size=\"sm\"\n onClick={ascend}\n disabledReason={\n disabled\n ? strings.readOnly\n : scopeGroupId === null && !cycleScope\n ? strings.atTop\n : undefined\n }\n />\n <Breadcrumb items={crumbs} className=\"min-w-0 flex-1\" />\n <ToggleGroup\n variant=\"segmented\"\n multiple={false}\n aria-label={strings.view}\n value={[view]}\n onValueChange={(value) => setView(value[0] === \"list\" ? \"list\" : \"canvas\")}\n >\n <Toggle value=\"canvas\" iconOnly aria-label={strings.chartView}>\n <Icon name=\"git-branch\" size=\"xs\" />\n </Toggle>\n <Toggle value=\"list\" iconOnly aria-label={strings.listView}>\n <Icon name=\"list\" size=\"xs\" />\n </Toggle>\n </ToggleGroup>\n </div>\n\n {view === \"list\" ? (\n <div\n role=\"list\"\n aria-label={label}\n aria-describedby={statusId}\n className=\"min-w-0 flex-1 divide-y divide-border-subtle overflow-auto\"\n style={{ height }}\n >\n {layout.nodes.map((placed) => {\n const outgoing = connections(placed.id);\n const groupLike = isGroupLike(placed);\n return (\n <div\n key={placed.id}\n role=\"listitem\"\n tabIndex={0}\n onClick={() => activate(placed.id)}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n activate(placed.id);\n }\n }}\n className={cn(\n \"flex flex-col gap-1 px-3 py-2 outline-none\",\n \"focus-visible:ring-2 focus-visible:ring-accent-border focus-visible:ring-inset\",\n groupLike && !disabled ? \"cursor-pointer hover:bg-surface-hover\" : \"cursor-default\",\n )}\n >\n <div className=\"flex min-w-0 items-center gap-2\">\n {body(placed, false, false)}\n {groupLike && <Icon name=\"chevron-right\" size=\"xs\" className=\"shrink-0 text-tertiary\" />}\n </div>\n {outgoing.length > 0 && (\n <p className=\"pl-3 text-2xs text-tertiary\">\n {strings.connectsTo(outgoing.map((n) => placedLabel(n, strings, fmt)))}\n </p>\n )}\n </div>\n );\n })}\n </div>\n ) : (\n <div\n ref={setViewport}\n data-canvas-viewport\n className={cn(\n \"relative min-w-0 overflow-auto overscroll-contain bg-canvas-subtle\",\n \"select-none\",\n disabled ? \"cursor-default\" : gestures.panning ? \"cursor-grabbing\" : \"cursor-grab\",\n )}\n style={{ height }}\n >\n <div className=\"relative\" style={{ width: plane.width, height: plane.height }}>\n <svg\n aria-hidden=\"true\"\n data-canvas-edges\n className=\"pointer-events-none absolute inset-0 text-border-strong\"\n width={plane.width}\n height={plane.height}\n >\n {layout.edges.map((edge) => {\n const shifted = {\n ...edge,\n points: edge.points.map((p) => ({ x: p.x + PLANE_PADDING, y: p.y + PLANE_PADDING })),\n };\n const highlighted =\n neighbours !== null &&\n neighbours.has(edge.from) &&\n neighbours.has(edge.to);\n return (\n <path\n key={`${edge.from}->${edge.to}`}\n d={edgePath(shifted)}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={neighbours ? (highlighted ? 2 : 1) : 1.5}\n opacity={neighbours ? (highlighted ? 1 : 0.35) : 1}\n className={edgeClassName?.(edge)}\n />\n );\n })}\n </svg>\n\n <div\n ref={treeRef}\n role=\"tree\"\n aria-label={label}\n aria-describedby={statusId}\n className=\"pointer-events-none absolute inset-0\"\n >\n {layout.nodes.map((placed) => {\n const position = positionOf(placed.id);\n if (!position) return null;\n const isDragging = gestures.draggingId === placed.id;\n const groupLike = isGroupLike(placed);\n const focusDistance = neighbours?.get(placed.id) ?? null;\n const dimmed = neighbours !== null && focusDistance === null;\n const summary = summaryOf(placed);\n\n const nodeEl = (\n <div\n key={placed.id}\n ref={gestures.bindNode(placed.id)}\n role=\"treeitem\"\n aria-label={placedLabel(placed, strings, fmt)}\n aria-expanded={groupLike ? false : undefined}\n data-canvas-node={placed.id}\n data-canvas-dragging={isDragging || undefined}\n tabIndex={placed.id === tabStopId ? 0 : -1}\n onFocus={() => setFocusedId(placed.id)}\n onKeyDown={(event) => onKeyDown(event, placed.id)}\n className={cn(\n \"pointer-events-auto absolute rounded-lg border bg-surface-raised outline-none\",\n \"transition-[var(--tx-colors),box-shadow,scale,opacity] duration-(--dur-fast) ease-snappy\",\n \"focus-visible:ring-2 focus-visible:ring-accent-border\",\n groupLike && !disabled\n ? \"cursor-pointer border-border hover:border-accent-border hover:bg-surface-hover\"\n : \"cursor-default border-border-subtle\",\n isDragging ? \"z-20 scale-[1.02] border-accent-border elevate-lg\" : \"elevate-sm\",\n !isDragging && gestures.offsets[placed.id] && \"z-10\",\n dimmed && \"opacity-40\",\n )}\n style={{\n left: position.x,\n top: position.y,\n width: position.width,\n height: position.height,\n touchAction: disabled ? undefined : \"pan-x pan-y\",\n }}\n >\n {body(placed, placed.id === tabStopId, isDragging)}\n </div>\n );\n\n return summary != null ? (\n <Tooltip key={placed.id} content={summary}>\n {nodeEl}\n </Tooltip>\n ) : (\n nodeEl\n );\n })}\n </div>\n </div>\n </div>\n )}\n\n <p id={statusId} role=\"status\" aria-live=\"polite\" className=\"sr-only\">\n {cycleScope\n ? strings.showingCycle(layout.nodes.length, fmt(layout.nodes.length), fmt(cycleScope.length))\n : strings.showing(layout.nodes.length, fmt(layout.nodes.length), currentGroup ? currentGroup.label : label)}\n </p>\n </div>\n );\n}\n"],"names":["PLANE_PADDING","FOCUS_HOPS","isGroupLike","placed","placedLabel","strings","fmt","syntheticNode","DefaultNodeBody","label","memberCount","isGroup","useUiStrings","useNumberFormat","jsxs","jsx","NodeCanvas","graph","groups","renderNode","renderSummary","edgeClassName","orientation","LAYOUT_DEFAULTS","nodeWidth","nodeHeight","height","expandedGroupId","defaultExpandedGroupId","onExpandedGroupIdChange","onNodeClick","onNodeDragEnd","disabled","className","statusId","useId","uncontrolledScope","setUncontrolledScope","useState","scopeGroupId","setScope","useCallback","next","cycleScope","setCycleScope","layoutScope","useMemo","focusedId","setFocusedId","view","setView","viewInitialised","useRef","useEffect","graphNodesRef","graphEdgesRef","layout","layoutGraph","byId","n","currentGroup","g","plane","boxes","map","node","layoutBoxOf","id","box","activate","gestures","useCanvasGestures","clearOffsets","layoutKey","layoutKeyRef","positionOf","offset","neighbours","neighbourhood","treeRef","defaultTabStopId","hasIncoming","edge","sources","a","b","tabStopId","focusNode","el","ascend","rankKey","siblingOf","step","rank","rankMates","index","predecessorOf","successorOf","onKeyDown","event","vertical","prevRankMate","nextRankMate","toPredecessor","toSuccessor","target","viewportRef","bindViewport","setViewport","toTop","crumbs","connections","body","isFocused","isDragging","context","summaryOf","cn","IconButton","Icon","Breadcrumb","ToggleGroup","value","Toggle","outgoing","groupLike","shifted","p","highlighted","edgePath","position","focusDistance","dimmed","summary","nodeEl","Tooltip"],"mappings":"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"}
@@ -0,0 +1,237 @@
1
+ import w from "@dagrejs/dagre";
2
+ const u = {
3
+ /* A node wide enough for a short title and a line of detail at the library's
4
+ body size, and a height that clears two lines of it. Consumers with denser
5
+ content pass their own — per node, if they differ from each other. */
6
+ nodeWidth: 176,
7
+ nodeHeight: 76,
8
+ /* Wide enough that two adjacent boxes read as two things rather than a
9
+ segmented bar, narrow enough that a fan of six children still fits a
10
+ laptop viewport without panning. */
11
+ siblingGap: 28,
12
+ /* Larger than the sibling gap on purpose: the level gap is where the edges
13
+ live, and an edge shorter than it is thick reads as a join rather than a
14
+ link. */
15
+ levelGap: 64,
16
+ orientation: "vertical"
17
+ };
18
+ function M(o) {
19
+ return `group:${o}`;
20
+ }
21
+ function v(o, f, a) {
22
+ const g = new Map(f.map((e) => [e.id, e])), s = /* @__PURE__ */ new Map(), l = /* @__PURE__ */ new Map();
23
+ if (a === null)
24
+ for (const e of o.nodes) {
25
+ const n = e.groupId ? g.get(e.groupId) : void 0;
26
+ if (n) {
27
+ const h = M(n.id);
28
+ let c = s.get(h);
29
+ c || (c = {
30
+ id: h,
31
+ label: n.label,
32
+ width: n.width,
33
+ height: n.height,
34
+ isGroup: !0,
35
+ group: n,
36
+ node: null,
37
+ memberIds: []
38
+ }, s.set(h, c)), c.memberIds.push(e.id), l.set(e.id, c.id);
39
+ } else
40
+ s.set(e.id, {
41
+ id: e.id,
42
+ label: e.label,
43
+ width: e.width,
44
+ height: e.height,
45
+ isGroup: !1,
46
+ group: null,
47
+ node: e,
48
+ memberIds: [e.id]
49
+ }), l.set(e.id, e.id);
50
+ }
51
+ else
52
+ for (const e of o.nodes)
53
+ e.groupId === a && (s.set(e.id, {
54
+ id: e.id,
55
+ label: e.label,
56
+ width: e.width,
57
+ height: e.height,
58
+ isGroup: !1,
59
+ group: null,
60
+ node: e,
61
+ memberIds: [e.id]
62
+ }), l.set(e.id, e.id));
63
+ const t = /* @__PURE__ */ new Map();
64
+ for (const e of o.edges) {
65
+ const n = l.get(e.from), h = l.get(e.to);
66
+ if (!n || !h || n === h) continue;
67
+ const c = `${n}\0${h}`, r = t.get(c);
68
+ r ? r.weight += 1 : t.set(c, { from: n, to: h, kind: e.kind, weight: 1 });
69
+ }
70
+ return { entities: s, edges: [...t.values()] };
71
+ }
72
+ function $(o, f) {
73
+ const a = new Set(f), g = new Map(o.nodes.map((t) => [t.id, t])), s = /* @__PURE__ */ new Map();
74
+ for (const t of a) {
75
+ const e = g.get(t);
76
+ e && s.set(t, {
77
+ id: t,
78
+ entity: {
79
+ id: t,
80
+ label: e.label,
81
+ width: e.width,
82
+ height: e.height,
83
+ isGroup: !1,
84
+ group: null,
85
+ node: e,
86
+ memberIds: [t]
87
+ },
88
+ isCycle: !1,
89
+ memberIds: [t]
90
+ });
91
+ }
92
+ const l = /* @__PURE__ */ new Map();
93
+ for (const t of o.edges) {
94
+ if (!a.has(t.from) || !a.has(t.to) || t.from === t.to) continue;
95
+ const e = `${t.from}\0${t.to}`, n = l.get(e);
96
+ n ? n.weight += 1 : l.set(e, { from: t.from, to: t.to, kind: t.kind, weight: 1 });
97
+ }
98
+ return { condensed: s, edges: [...l.values()] };
99
+ }
100
+ function G(o, f) {
101
+ const a = new w.graphlib.Graph({ directed: !0 });
102
+ for (const e of o.keys()) a.setNode(e);
103
+ for (const e of f) a.setEdge(e.from, e.to);
104
+ const g = w.graphlib.alg.tarjan(a), s = /* @__PURE__ */ new Map(), l = /* @__PURE__ */ new Map();
105
+ for (const e of g) {
106
+ if (e.length === 1) {
107
+ const r = e[0];
108
+ l.set(r, r), s.set(r, {
109
+ id: r,
110
+ entity: o.get(r) ?? null,
111
+ isCycle: !1,
112
+ memberIds: o.get(r)?.memberIds ?? [r]
113
+ });
114
+ continue;
115
+ }
116
+ const n = [...e].sort(), h = `cycle:${n[0]}`, c = n.flatMap((r) => o.get(r)?.memberIds ?? [r]);
117
+ for (const r of n) l.set(r, h);
118
+ s.set(h, { id: h, entity: null, isCycle: !0, memberIds: c });
119
+ }
120
+ const t = /* @__PURE__ */ new Map();
121
+ for (const e of f) {
122
+ const n = l.get(e.from), h = l.get(e.to);
123
+ if (n === h) continue;
124
+ const c = `${n}\0${h}`, r = t.get(c);
125
+ r ? r.weight += e.weight : t.set(c, { from: n, to: h, kind: e.kind, weight: e.weight });
126
+ }
127
+ return { condensed: s, edges: [...t.values()] };
128
+ }
129
+ function k(o) {
130
+ if (o.length === 0) return "";
131
+ if (o.length === 1) return `M ${o[0].x} ${o[0].y}`;
132
+ let f = `M ${o[0].x} ${o[0].y}`;
133
+ for (let g = 1; g < o.length - 1; g++) {
134
+ const s = o[g], l = o[g + 1], t = { x: (s.x + l.x) / 2, y: (s.y + l.y) / 2 };
135
+ f += ` Q ${s.x} ${s.y}, ${t.x} ${t.y}`;
136
+ }
137
+ const a = o[o.length - 1];
138
+ return f += ` L ${a.x} ${a.y}`, f;
139
+ }
140
+ function E(o, f, a, g = {}) {
141
+ const s = {
142
+ nodeWidth: g.nodeWidth ?? u.nodeWidth,
143
+ nodeHeight: g.nodeHeight ?? u.nodeHeight,
144
+ siblingGap: g.siblingGap ?? u.siblingGap,
145
+ levelGap: g.levelGap ?? u.levelGap,
146
+ orientation: g.orientation ?? u.orientation
147
+ }, l = s.orientation === "vertical";
148
+ let t, e;
149
+ if (typeof a == "object" && a !== null)
150
+ ({ condensed: t, edges: e } = $(o, a.cycleMemberIds));
151
+ else {
152
+ const i = v(o, f, a);
153
+ ({ condensed: t, edges: e } = G(i.entities, i.edges));
154
+ }
155
+ const n = new w.graphlib.Graph({ directed: !0 });
156
+ if (n.setGraph({
157
+ // I18N-ALLOW: dagre rankdir option value
158
+ rankdir: l ? "TB" : "LR",
159
+ nodesep: s.siblingGap,
160
+ ranksep: s.levelGap,
161
+ marginx: 0,
162
+ marginy: 0
163
+ }), n.setDefaultEdgeLabel(() => ({})), t.size === 0)
164
+ return { nodes: [], edges: [], width: 0, height: 0 };
165
+ for (const i of t.values()) {
166
+ const d = i.entity?.width ?? s.nodeWidth, p = i.entity?.height ?? s.nodeHeight;
167
+ n.setNode(i.id, { width: d, height: p });
168
+ }
169
+ for (const i of e)
170
+ n.setEdge(i.from, i.to, { weight: i.weight });
171
+ w.layout(n);
172
+ const h = (i) => {
173
+ const d = n.node(i);
174
+ if (d.x === void 0 || d.y === void 0)
175
+ throw new Error(`layoutGraph: dagre did not place node "${i}"`);
176
+ return { x: d.x, y: d.y, width: d.width, height: d.height };
177
+ };
178
+ let c = 1 / 0, r = 1 / 0, m = -1 / 0, y = -1 / 0;
179
+ for (const i of t.keys()) {
180
+ const d = h(i);
181
+ c = Math.min(c, d.x - d.width / 2), r = Math.min(r, d.y - d.height / 2), m = Math.max(m, d.x + d.width / 2), y = Math.max(y, d.y + d.height / 2);
182
+ }
183
+ const b = [];
184
+ for (const i of t.values()) {
185
+ const d = h(i.id);
186
+ b.push({
187
+ id: i.id,
188
+ node: i.entity?.node ?? null,
189
+ group: i.entity?.group ?? null,
190
+ cycle: i.isCycle,
191
+ memberCount: i.memberIds.length,
192
+ memberIds: i.memberIds,
193
+ x: d.x - d.width / 2 - c,
194
+ y: d.y - d.height / 2 - r,
195
+ width: d.width,
196
+ height: d.height
197
+ });
198
+ }
199
+ const x = [];
200
+ for (const i of e) {
201
+ const p = (n.edge(i.from, i.to)?.points ?? []).map((I) => ({ x: I.x - c, y: I.y - r }));
202
+ x.push({ from: i.from, to: i.to, kind: i.kind, weight: i.weight, points: p });
203
+ }
204
+ return {
205
+ nodes: b,
206
+ edges: x,
207
+ width: Number.isFinite(m) ? m - c : 0,
208
+ height: Number.isFinite(y) ? y - r : 0
209
+ };
210
+ }
211
+ function H(o) {
212
+ return k(o.points);
213
+ }
214
+ function L(o, f, a) {
215
+ const g = /* @__PURE__ */ new Map(), s = (e, n) => {
216
+ g.has(e) || g.set(e, /* @__PURE__ */ new Set()), g.get(e).add(n);
217
+ };
218
+ for (const e of f)
219
+ s(e.from, e.to), s(e.to, e.from);
220
+ const l = /* @__PURE__ */ new Map([[o, 0]]);
221
+ let t = [o];
222
+ for (let e = 1; e <= a; e++) {
223
+ const n = [];
224
+ for (const h of t)
225
+ for (const c of g.get(h) ?? [])
226
+ l.has(c) || (l.set(c, e), n.push(c));
227
+ t = n;
228
+ }
229
+ return l;
230
+ }
231
+ export {
232
+ u as LAYOUT_DEFAULTS,
233
+ H as edgePath,
234
+ E as layoutGraph,
235
+ L as neighbourhood
236
+ };
237
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sources":["../../../src/components/node-canvas/layout.ts"],"sourcesContent":["import dagre from \"@dagrejs/dagre\";\nimport type { EdgeLabel, NodeLabel } from \"@dagrejs/dagre\";\nimport type {\n CanvasGraph,\n CanvasGroup,\n CanvasLayout,\n CanvasNode,\n CanvasPlacedEdge,\n CanvasScope,\n LayoutOptions,\n PlacedNode,\n} from \"./types\";\n\n/* ============================================================================\n GRAPH LAYOUT — dagre, ranked, with a condensing pre-pass for cycles. (DX-3344)\n\n WHY THIS REPLACES A HAND-ROLLED ALGORITHM RATHER THAN SITTING BESIDE IT. The\n previous version of this file was a from-scratch Reingold–Tilford tidy-tree\n implementation, argued for at length on the grounds that a tree has exactly\n one right answer and a dependency's coordinate system is more adapter than\n algorithm. That argument does not survive the move to a GENERAL graph: a\n node with two incoming edges, or a cycle, has no Reingold–Tilford answer at\n all — the algorithm is defined over trees. Keeping the tidy-tree code as a\n second, tree-only path alongside a new graph path is exactly the \"dual\n shape\" this repo's own principles forbid: two entry points, two things to\n keep in sync, and a consumer who cannot tell which one a change reaches.\n Dagre is the ONE layout engine now, for every graph this component draws,\n trees included — a tree is simply a graph where every node but one has\n exactly one incoming edge, and dagre's layered (Sugiyama-style) ranking\n draws that shape cleanly: one rank per depth, ordered to minimise crossings.\n\n WHY A CONDENSING PRE-PASS, MEASURED RATHER THAN ASSUMED (DX-3304 comment\n 6752). Dagre already has its own cycle handling — a greedy edge-reversal\n pass runs before ranking whenever the graph isn't already acyclic — so it\n does not crash on a cyclic graph. The spike measured what that pass\n actually produces on a real, densely cyclic import graph (402 nodes, 2,099\n edges): 9–13 seconds, and a layout that ranks most of the graph onto about\n two rows, roughly 37,800px wide. Greedy edge reversal treats a cycle as \"one\n edge is wrong\" and reverses it; on a graph where MANY edges participate in\n MANY overlapping cycles, that heuristic degrades badly and slowly. Finding\n every strongly connected component with Tarjan's algorithm and collapsing\n each one to a SINGLE node before handing the graph to dagre is different in\n kind, not degree: the condensation of a graph by its strongly connected\n components is a graph-theoretic guarantee, always a DAG, so dagre never\n sees a cycle to fight in the first place. The condensed node then reuses the\n EXACT mechanism this card already needs for domain grouping — a collapsed\n box standing in for its members, expandable by drilling in — because a\n cluster of mutually-dependent nodes has no more of a natural rank position\n than a cycle does. See `NodeCanvas.tsx` for how a \"cycle\" placed node is\n just a group with an id nobody typed in.\n\n PURE, AND THAT IS THE POINT — same discipline as the code this replaces.\n Nothing here touches the DOM, React, or a measurement; every number in and\n every number out, so layout, condensation and cycle-detection are each\n testable against their own guarantees rather than a screenshot.\n ========================================================================= */\n\nexport const LAYOUT_DEFAULTS: Required<LayoutOptions> = {\n /* A node wide enough for a short title and a line of detail at the library's\n body size, and a height that clears two lines of it. Consumers with denser\n content pass their own — per node, if they differ from each other. */\n nodeWidth: 176,\n nodeHeight: 76,\n /* Wide enough that two adjacent boxes read as two things rather than a\n segmented bar, narrow enough that a fan of six children still fits a\n laptop viewport without panning. */\n siblingGap: 28,\n /* Larger than the sibling gap on purpose: the level gap is where the edges\n live, and an edge shorter than it is thick reads as a join rather than a\n link. */\n levelGap: 64,\n orientation: \"vertical\",\n};\n\n/* --- scope resolution ------------------------------------------------------\n\n A canvas never lays out the WHOLE graph at once. It lays out one SCOPE: the\n top level (every ungrouped node, plus one aggregate box per declared\n group), or — once a consumer has drilled into a group — that group's own\n members. This is the same idea the tree version called \"the current root\",\n generalised from \"one node and the levels below it\" to \"one group and its\n members\", because groups here are flat (a group cannot itself belong to\n another group — see `CanvasGroup` in `types.ts`).\n -------------------------------------------------------------------------- */\n\n/** One thing the layout can draw as a single box: a real node, or a whole group. */\ninterface EffectiveEntity<Extra> {\n id: string;\n label: string;\n width?: number;\n height?: number;\n isGroup: boolean;\n group: CanvasGroup | null;\n node: CanvasNode<Extra> | null;\n /** The real graph node ids this entity ultimately stands for. */\n memberIds: string[];\n}\n\ninterface AggregatedEdge {\n from: string;\n to: string;\n kind?: string;\n weight: number;\n}\n\nfunction groupEntityId(groupId: string): string {\n return `group:${groupId}`;\n}\n\n/**\n * The entities and edges visible at one scope.\n *\n * `scopeGroupId === null` is the top level: every node with no `groupId` (or\n * one that names a group not present in `groups`, which is a data error this\n * treats as \"ungrouped\" rather than dropping the node) drawn as itself, plus\n * one aggregate entity per declared group. `scopeGroupId` set to a real\n * group's id descends into it: only that group's own members, as themselves.\n *\n * Edges are re-pointed onto whichever entity each endpoint resolves to,\n * self-loops this produces are dropped (an edge from a group to itself, once\n * both ends collapse onto the same aggregate box, carries no drawable\n * information), and the rest are aggregated by endpoint pair — several raw\n * edges between the same two entities draw as ONE edge with a `weight`.\n */\nfunction resolveScope<Extra>(\n graph: CanvasGraph<Extra>,\n groups: readonly CanvasGroup[],\n scopeGroupId: string | null,\n): { entities: Map<string, EffectiveEntity<Extra>>; edges: AggregatedEdge[] } {\n const groupById = new Map(groups.map((group) => [group.id, group]));\n const entities = new Map<string, EffectiveEntity<Extra>>();\n /** Real node id → the entity id it resolves to at this scope. */\n const resolution = new Map<string, string>();\n\n if (scopeGroupId === null) {\n /* A declared group's entity is created LAZILY, on its first member —\n never pre-seeded for every id in `groups` regardless of membership.\n An empty group renders nothing to expand into, so a box for it is\n clutter, not information; it also keeps this branch honest when a\n consumer's `groups` list runs ahead of `graph.nodes` (declared before\n any node opts in, or momentarily orphaned mid-edit). */\n for (const node of graph.nodes) {\n const group = node.groupId ? groupById.get(node.groupId) : undefined;\n if (group) {\n const groupId = groupEntityId(group.id);\n let entity = entities.get(groupId);\n if (!entity) {\n entity = {\n id: groupId,\n label: group.label,\n width: group.width,\n height: group.height,\n isGroup: true,\n group,\n node: null,\n memberIds: [],\n };\n entities.set(groupId, entity);\n }\n entity.memberIds.push(node.id);\n resolution.set(node.id, entity.id);\n } else {\n entities.set(node.id, {\n id: node.id,\n label: node.label,\n width: node.width,\n height: node.height,\n isGroup: false,\n group: null,\n node,\n memberIds: [node.id],\n });\n resolution.set(node.id, node.id);\n }\n }\n } else {\n for (const node of graph.nodes) {\n if (node.groupId !== scopeGroupId) continue;\n entities.set(node.id, {\n id: node.id,\n label: node.label,\n width: node.width,\n height: node.height,\n isGroup: false,\n group: null,\n node,\n memberIds: [node.id],\n });\n resolution.set(node.id, node.id);\n }\n }\n\n const aggregated = new Map<string, AggregatedEdge>();\n for (const edge of graph.edges) {\n const from = resolution.get(edge.from);\n const to = resolution.get(edge.to);\n /* An edge with an endpoint outside this scope (the other side of a group\n boundary, or a dangling id) carries nothing to draw here. */\n if (!from || !to || from === to) continue;\n const key = `${from}\\u0000${to}`;\n const existing = aggregated.get(key);\n if (existing) existing.weight += 1;\n else aggregated.set(key, { from, to, kind: edge.kind, weight: 1 });\n }\n\n return { entities, edges: [...aggregated.values()] };\n}\n\n/* --- cycle condensation ----------------------------------------------------\n\n Tarjan's algorithm, via the SAME `@dagrejs/graphlib` dagre itself depends\n on — not reimplemented, since a correct, already-tested implementation is\n sitting one import away. `alg.tarjan` partitions every node into disjoint\n strongly-connected components; a component of size 1 is an ordinary node\n (whether or not it has a self-loop — reachability from ANY OTHER node is\n what the algorithm asks, and a self-loop alone does not supply one, which\n is also why self-loops were already dropped in `resolveScope`).\n -------------------------------------------------------------------------- */\n\ninterface CondensedEntity<Extra> {\n id: string;\n entity: EffectiveEntity<Extra> | null;\n /** Set when this id condenses more than one effective entity — a cycle. */\n isCycle: boolean;\n memberIds: string[];\n}\n\n/**\n * The scope for having drilled into a CONDENSED CYCLE (see `CanvasCycleScope`\n * in `types.ts` for why this deliberately bypasses `condenseCycles` rather\n * than calling it on a narrower input): every real graph node named in\n * `memberIds`, drawn as itself, with only the edges strictly between them.\n *\n * Returns the SAME shape `condenseCycles` does — one map of already-resolved\n * \"condensed\" entities plus an edge list — so `layoutGraph`'s dagre-building\n * code below is identical regardless of which path produced it.\n */\nfunction resolveCycleScope<Extra>(\n graph: CanvasGraph<Extra>,\n memberIds: readonly string[],\n): { condensed: Map<string, CondensedEntity<Extra>>; edges: AggregatedEdge[] } {\n const members = new Set(memberIds);\n const nodeById = new Map(graph.nodes.map((node) => [node.id, node]));\n\n const condensed = new Map<string, CondensedEntity<Extra>>();\n for (const id of members) {\n const node = nodeById.get(id);\n /* A member id the caller captured off a PREVIOUS render's layout, for a\n `graph` that has since dropped that node — treated the same way a\n dangling `groupId` is in `resolveScope`: skipped, not thrown over. The\n component itself resets this scope on any `graph` identity change, so\n this only matters for a caller driving `layoutGraph` directly. */\n if (!node) continue;\n condensed.set(id, {\n id,\n entity: {\n id,\n label: node.label,\n width: node.width,\n height: node.height,\n isGroup: false,\n group: null,\n node,\n memberIds: [id],\n },\n isCycle: false,\n memberIds: [id],\n });\n }\n\n const aggregated = new Map<string, AggregatedEdge>();\n for (const edge of graph.edges) {\n if (!members.has(edge.from) || !members.has(edge.to) || edge.from === edge.to) continue;\n const key = `${edge.from}\\u0000${edge.to}`;\n const existing = aggregated.get(key);\n if (existing) existing.weight += 1;\n else aggregated.set(key, { from: edge.from, to: edge.to, kind: edge.kind, weight: 1 });\n }\n\n return { condensed, edges: [...aggregated.values()] };\n}\n\nfunction condenseCycles<Extra>(\n entities: Map<string, EffectiveEntity<Extra>>,\n edges: AggregatedEdge[],\n): { condensed: Map<string, CondensedEntity<Extra>>; edges: AggregatedEdge[] } {\n const g = new dagre.graphlib.Graph({ directed: true });\n for (const id of entities.keys()) g.setNode(id);\n for (const edge of edges) g.setEdge(edge.from, edge.to);\n\n const components = dagre.graphlib.alg.tarjan(g);\n\n const condensed = new Map<string, CondensedEntity<Extra>>();\n /** Effective entity id → the condensed id it resolves to. */\n const resolution = new Map<string, string>();\n\n for (const component of components) {\n if (component.length === 1) {\n const id = component[0]!;\n resolution.set(id, id);\n condensed.set(id, {\n id,\n entity: entities.get(id) ?? null,\n isCycle: false,\n memberIds: entities.get(id)?.memberIds ?? [id],\n });\n continue;\n }\n /* The smallest member id, deterministically — Tarjan's components are a\n PARTITION, so this id belongs to exactly one component and the\n condensed id it produces cannot collide with any other component's. */\n const sorted = [...component].sort();\n const id = `cycle:${sorted[0]}`;\n const memberIds = sorted.flatMap((memberId) => entities.get(memberId)?.memberIds ?? [memberId]);\n for (const memberId of sorted) resolution.set(memberId, id);\n condensed.set(id, { id, entity: null, isCycle: true, memberIds });\n }\n\n const aggregated = new Map<string, AggregatedEdge>();\n for (const edge of edges) {\n const from = resolution.get(edge.from)!;\n const to = resolution.get(edge.to)!;\n if (from === to) continue;\n const key = `${from}\\u0000${to}`;\n const existing = aggregated.get(key);\n if (existing) existing.weight += edge.weight;\n else aggregated.set(key, { from, to, kind: edge.kind, weight: edge.weight });\n }\n\n return { condensed, edges: [...aggregated.values()] };\n}\n\n/* --- dagre layout ----------------------------------------------------------\n\n The condensed graph is guaranteed acyclic, so dagre ranks and positions it\n with no cycle-breaking heuristic ever running. `rankdir` carries the\n orientation; `nodesep`/`ranksep` are this library's `siblingGap`/`levelGap`\n under dagre's own names.\n -------------------------------------------------------------------------- */\n\n/**\n * A smooth path through dagre's own routed waypoints.\n *\n * dagre already avoids overlapping nodes when it lays out an edge with more\n * than two points, so the right thing to do with those points is draw\n * through them — not discard them for a straight line between the two boxes,\n * which is the ONE case (two waypoints, a rank-adjacent edge) this reduces to\n * exactly a straight line anyway. Interior points get a quadratic curve to\n * their own midpoint, the standard smoothed-polyline construction: it rounds\n * every corner without needing the tangent information a true spline would.\n */\nfunction smoothPath(points: readonly { x: number; y: number }[]): string {\n if (points.length === 0) return \"\";\n if (points.length === 1) return `M ${points[0]!.x} ${points[0]!.y}`;\n let d = `M ${points[0]!.x} ${points[0]!.y}`;\n for (let i = 1; i < points.length - 1; i++) {\n const p = points[i]!;\n const next = points[i + 1]!;\n const mid = { x: (p.x + next.x) / 2, y: (p.y + next.y) / 2 };\n d += ` Q ${p.x} ${p.y}, ${mid.x} ${mid.y}`;\n }\n const last = points[points.length - 1]!;\n d += ` L ${last.x} ${last.y}`;\n return d;\n}\n\n/**\n * Lay out one scope of a graph.\n *\n * `scope` is `null` for the top level, a `CanvasGroup.id` to draw that\n * group's own members, or a `CanvasCycleScope` to draw a condensed cycle's\n * own members (see that type's doc for why it is not just \"another group\n * id\" — it skips this function's own condensing pre-pass on purpose).\n * Coordinates are plane-local and start at 0 on both axes: the caller\n * decides where the plane sits and how much padding surrounds it.\n */\nexport function layoutGraph<Extra>(\n graph: CanvasGraph<Extra>,\n groups: readonly CanvasGroup[],\n scope: CanvasScope,\n options: LayoutOptions = {},\n): CanvasLayout<Extra> {\n /* PER KEY, NOT A SPREAD — see `AutoScrollOptions` for why a key that is\n PRESENT AND UNDEFINED must not overwrite its default. */\n const opts: Required<LayoutOptions> = {\n nodeWidth: options.nodeWidth ?? LAYOUT_DEFAULTS.nodeWidth,\n nodeHeight: options.nodeHeight ?? LAYOUT_DEFAULTS.nodeHeight,\n siblingGap: options.siblingGap ?? LAYOUT_DEFAULTS.siblingGap,\n levelGap: options.levelGap ?? LAYOUT_DEFAULTS.levelGap,\n orientation: options.orientation ?? LAYOUT_DEFAULTS.orientation,\n };\n const vertical = opts.orientation === \"vertical\";\n\n let condensed: Map<string, CondensedEntity<Extra>>;\n let edges: AggregatedEdge[];\n if (typeof scope === \"object\" && scope !== null) {\n ({ condensed, edges } = resolveCycleScope(graph, scope.cycleMemberIds));\n } else {\n const resolved = resolveScope(graph, groups, scope);\n ({ condensed, edges } = condenseCycles(resolved.entities, resolved.edges));\n }\n\n const g = new dagre.graphlib.Graph<Record<string, unknown>, NodeLabel, EdgeLabel>({ directed: true });\n g.setGraph({\n // I18N-ALLOW: dagre rankdir option value\n rankdir: vertical ? \"TB\" : \"LR\",\n nodesep: opts.siblingGap,\n ranksep: opts.levelGap,\n marginx: 0,\n marginy: 0,\n });\n g.setDefaultEdgeLabel(() => ({}));\n\n if (condensed.size === 0) {\n return { nodes: [], edges: [], width: 0, height: 0 };\n }\n\n for (const item of condensed.values()) {\n const width = item.entity?.width ?? opts.nodeWidth;\n const height = item.entity?.height ?? opts.nodeHeight;\n g.setNode(item.id, { width, height });\n }\n for (const edge of edges) {\n g.setEdge(edge.from, edge.to, { weight: edge.weight });\n }\n\n dagre.layout(g);\n\n /* `NodeLabel.x`/`.y` are typed optional because the SAME interface also\n describes a node BEFORE layout runs; every node this function added to\n `g` gets both set by `dagre.layout` unconditionally, so a value missing\n here is dagre's own contract broken, not a case to degrade past. */\n const center = (id: string): { x: number; y: number; width: number; height: number } => {\n const box = g.node(id)!;\n if (box.x === undefined || box.y === undefined) {\n throw new Error(`layoutGraph: dagre did not place node \"${id}\"`);\n }\n return { x: box.x, y: box.y, width: box.width, height: box.height };\n };\n\n let minX = Infinity;\n let minY = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n for (const id of condensed.keys()) {\n const box = center(id);\n minX = Math.min(minX, box.x - box.width / 2);\n minY = Math.min(minY, box.y - box.height / 2);\n maxX = Math.max(maxX, box.x + box.width / 2);\n maxY = Math.max(maxY, box.y + box.height / 2);\n }\n\n const nodes: PlacedNode<Extra>[] = [];\n for (const item of condensed.values()) {\n const box = center(item.id);\n nodes.push({\n id: item.id,\n node: item.entity?.node ?? null,\n group: item.entity?.group ?? null,\n cycle: item.isCycle,\n memberCount: item.memberIds.length,\n memberIds: item.memberIds,\n x: box.x - box.width / 2 - minX,\n y: box.y - box.height / 2 - minY,\n width: box.width,\n height: box.height,\n });\n }\n\n const placedEdges: CanvasPlacedEdge[] = [];\n for (const edge of edges) {\n const label = g.edge(edge.from, edge.to);\n const points = (label?.points ?? []).map((p) => ({ x: p.x - minX, y: p.y - minY }));\n placedEdges.push({ from: edge.from, to: edge.to, kind: edge.kind, weight: edge.weight, points });\n }\n\n return {\n nodes,\n edges: placedEdges,\n width: Number.isFinite(maxX) ? maxX - minX : 0,\n height: Number.isFinite(maxY) ? maxY - minY : 0,\n };\n}\n\n/** The SVG `d` attribute for one drawn edge. See `smoothPath` above. */\nexport function edgePath(edge: CanvasPlacedEdge): string {\n return smoothPath(edge.points);\n}\n\n/**\n * Every real node id reachable from `id` within `hops` steps, along either\n * edge direction — the \"1–2-hop neighbourhood\" `NodeRenderContext.focusDistance`\n * reports. Undirected on purpose: a node's neighbourhood, for the purpose of\n * \"what should stay legible while I'm reading this one\", is what points at it\n * as much as what it points at.\n *\n * Keyed by the drawn (possibly condensed) ids, not raw graph node ids — the\n * canvas calls this with whatever `CanvasPlacedEdge` already uses.\n */\nexport function neighbourhood(\n id: string,\n edges: readonly { from: string; to: string }[],\n hops: number,\n): Map<string, number> {\n const adjacency = new Map<string, Set<string>>();\n const link = (a: string, b: string) => {\n if (!adjacency.has(a)) adjacency.set(a, new Set());\n adjacency.get(a)!.add(b);\n };\n for (const edge of edges) {\n link(edge.from, edge.to);\n link(edge.to, edge.from);\n }\n\n const distance = new Map<string, number>([[id, 0]]);\n let frontier = [id];\n for (let step = 1; step <= hops; step++) {\n const next: string[] = [];\n for (const current of frontier) {\n for (const neighbour of adjacency.get(current) ?? []) {\n if (distance.has(neighbour)) continue;\n distance.set(neighbour, step);\n next.push(neighbour);\n }\n }\n frontier = next;\n }\n return distance;\n}\n"],"names":["LAYOUT_DEFAULTS","groupEntityId","groupId","resolveScope","graph","groups","scopeGroupId","groupById","group","entities","resolution","node","entity","aggregated","edge","from","to","key","existing","resolveCycleScope","memberIds","members","nodeById","condensed","id","condenseCycles","edges","g","dagre","components","component","sorted","memberId","smoothPath","points","d","i","p","next","mid","last","layoutGraph","scope","options","opts","vertical","resolved","item","width","height","center","box","minX","minY","maxX","maxY","nodes","placedEdges","edgePath","neighbourhood","hops","adjacency","link","a","b","distance","frontier","step","current","neighbour"],"mappings":"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"}
@@ -0,0 +1,143 @@
1
+ import { useState as L, useRef as w, useCallback as a, useEffect as k } from "react";
2
+ import { attachPointerGesture as O } from "../../lib/dnd/sensors/gesture.js";
3
+ import { attachEdgeAutoScroll as V } from "../../lib/dnd/autoscroll.js";
4
+ import { isInteractiveTarget as j } from "../../lib/interactive-target.js";
5
+ const T = (v, d, g) => Math.min(Math.max(v, d), g);
6
+ function Q(v) {
7
+ const { layoutBoxOf: d, planeSize: g, onNodeClick: C, onNodeDragEnd: D, disabled: M } = v, [y, p] = L({}), [l, N] = L(null), [h, E] = L(!1), c = w({ layoutBoxOf: d, planeSize: g, onNodeClick: C, onNodeDragEnd: D, disabled: M, offsets: y });
8
+ c.current = { layoutBoxOf: d, planeSize: g, onNodeClick: C, onNodeDragEnd: D, disabled: M, offsets: y };
9
+ const b = w(null), s = w({ frame: null, drag: null, pan: null, point: null }), u = a(() => {
10
+ const e = b.current;
11
+ if (!e) return;
12
+ const r = e.getBoundingClientRect();
13
+ s.current.frame = { left: r.left, top: r.top };
14
+ }, []), x = a((e) => {
15
+ const r = b.current, t = s.current.frame;
16
+ return !r || !t ? null : {
17
+ x: e.x - t.left + r.scrollLeft,
18
+ y: e.y - t.top + r.scrollTop
19
+ };
20
+ }, []), m = a(
21
+ (e) => {
22
+ const r = s.current.drag;
23
+ if (!r) return;
24
+ const t = x(e), n = c.current.layoutBoxOf(r.id);
25
+ if (!t || !n) return;
26
+ const { width: o, height: i } = c.current.planeSize, _ = T(t.x - r.grab.x, 0, Math.max(0, o - n.width)), G = T(t.y - r.grab.y, 0, Math.max(0, i - n.height)), S = { x: _ - n.x, y: G - n.y };
27
+ r.latest = S, p((K) => ({ ...K, [r.id]: S }));
28
+ },
29
+ [x]
30
+ ), f = a(() => {
31
+ s.current.drag = null, s.current.point = null, N(null);
32
+ }, []);
33
+ k(() => {
34
+ if (!l) return;
35
+ const e = (r) => {
36
+ if (r.key !== "Escape") return;
37
+ const t = s.current.drag;
38
+ t && (r.preventDefault(), p((n) => {
39
+ const o = { ...n };
40
+ return t.restore ? o[t.id] = t.restore : delete o[t.id], o;
41
+ }), f());
42
+ };
43
+ return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
44
+ }, [l, f]), k(() => {
45
+ if (!l && !h) return;
46
+ const e = () => u();
47
+ return window.addEventListener("scroll", e, { capture: !0, passive: !0 }), window.addEventListener("resize", e), () => {
48
+ window.removeEventListener("scroll", e, { capture: !0 }), window.removeEventListener("resize", e);
49
+ };
50
+ }, [l, h, u]), k(() => {
51
+ if (l)
52
+ return V({
53
+ getPoint: () => s.current.point,
54
+ onScrolled: (e) => m(e)
55
+ });
56
+ }, [l, m]);
57
+ function z(e) {
58
+ const r = (t) => {
59
+ t.stopPropagation(), t.preventDefault();
60
+ };
61
+ e.addEventListener("click", r, { capture: !0, once: !0 }), setTimeout(() => e.removeEventListener("click", r, { capture: !0 }), 0);
62
+ }
63
+ const P = w(/* @__PURE__ */ new Map()), B = a(
64
+ (e) => (r) => {
65
+ if (r)
66
+ return O(r, {
67
+ onPress: (t, n) => {
68
+ if (c.current.disabled) return !1;
69
+ const o = n.target;
70
+ return !j(o);
71
+ },
72
+ onActivate: (t) => {
73
+ u(), s.current.point = t;
74
+ const n = x(t), o = c.current.layoutBoxOf(e);
75
+ if (!n || !o) return;
76
+ const i = c.current.offsets[e] ?? null;
77
+ s.current.drag = {
78
+ id: e,
79
+ /* Where inside the node it was grabbed, so it tracks the point that
80
+ was picked up rather than snapping a corner to the cursor. */
81
+ grab: {
82
+ x: n.x - (o.x + (i?.x ?? 0)),
83
+ y: n.y - (o.y + (i?.y ?? 0))
84
+ },
85
+ restore: i,
86
+ latest: i
87
+ }, N(e);
88
+ },
89
+ onMove: (t) => {
90
+ s.current.point = t, m(t);
91
+ },
92
+ onRelease: (t, n) => {
93
+ const o = s.current.drag;
94
+ if (f(), !n) {
95
+ c.current.disabled || c.current.onNodeClick(e);
96
+ return;
97
+ }
98
+ z(r), o?.latest && c.current.onNodeDragEnd?.({ id: e, offset: o.latest });
99
+ },
100
+ onCancel: () => {
101
+ const t = s.current.drag;
102
+ t && p((n) => {
103
+ const o = { ...n };
104
+ return t.restore ? o[t.id] = t.restore : delete o[t.id], o;
105
+ }), f();
106
+ }
107
+ });
108
+ },
109
+ [m, f, u, x]
110
+ ), R = a(
111
+ (e) => {
112
+ let r = P.current.get(e);
113
+ return r || (r = B(e), P.current.set(e, r)), r;
114
+ },
115
+ [B]
116
+ ), A = a(
117
+ (e) => (b.current = e, e ? O(e, {
118
+ onPress: (t, n) => c.current.disabled ? !1 : !n.target?.closest("[data-canvas-node]"),
119
+ onActivate: (t) => {
120
+ u(), s.current.pan = {
121
+ origin: t,
122
+ scroll: { left: e.scrollLeft, top: e.scrollTop }
123
+ }, E(!0);
124
+ },
125
+ onMove: (t) => {
126
+ const n = s.current.pan;
127
+ n && (e.scrollLeft = n.scroll.left - (t.x - n.origin.x), e.scrollTop = n.scroll.top - (t.y - n.origin.y));
128
+ },
129
+ onRelease: () => {
130
+ s.current.pan = null, E(!1);
131
+ },
132
+ onCancel: () => {
133
+ s.current.pan = null, E(!1);
134
+ }
135
+ }) : void 0),
136
+ [u]
137
+ ), I = a(() => p({}), []);
138
+ return { offsets: y, draggingId: l, panning: h, bindViewport: A, bindNode: R, clearOffsets: I };
139
+ }
140
+ export {
141
+ Q as useCanvasGestures
142
+ };
143
+ //# sourceMappingURL=use-canvas-gestures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-canvas-gestures.js","sources":["../../../src/components/node-canvas/use-canvas-gestures.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { attachPointerGesture } from \"@/lib/dnd/sensors/gesture\";\nimport { attachEdgeAutoScroll } from \"@/lib/dnd/autoscroll\";\nimport type { Point } from \"@/lib/dnd/types\";\nimport { isInteractiveTarget } from \"@/lib/interactive-target\";\n\n/* ============================================================================\n THE TWO GESTURES A CANVAS HAS, BOTH OVER THE EXISTING INPUT LAYER.\n\n NOTHING HERE IMPLEMENTS POINTER HANDLING. `attachPointerGesture` already\n owns pointer capture, the activation constraint (mouse travels, touch\n dwells) and the touch-scroll guard — the part of a drag that was expensive\n to get right and whose failures only appear on a device nobody was testing\n on. This file is the same adapter the calendar is: two target models over\n one input layer. See `lib/dnd/sensors/gesture.ts` for why that split exists.\n\n WHAT IS **NOT** REUSED, AND WHY. `DragSession` / `resolveTarget` /\n `attachPointerSensor` / `attachAutoScroll` are the LIST target model: a drop\n is `{container, index}` resolved from sibling midpoints, and the whole module\n is built around the invariant that `index` counts the container's items with\n the dragged one already removed. A canvas node does not land BETWEEN two\n other nodes — it lands at a POSITION — so there is no index to resolve, no\n container to be in, and no midpoint rule to run. Driving a `DragSession` here\n would mean inventing a fake single container and ignoring every answer it\n gave. `attachEdgeAutoScroll` IS reused directly: the barrel's `attachAutoScroll`\n is the session-shaped adapter over it, and the driver-shaped function beneath\n is exported for exactly this case (the calendar takes the same door).\n\n PANNING IS SCROLLING, DELIBERATELY. The obvious canvas pans by writing a\n transform on the content plane. This one is a real scroll container whose\n plane is real scrolled content, which buys four things a transform does not:\n the wheel and trackpad pan it with no code, a touch swipe pans it natively\n (so the touch dwell stays free to mean \"pick this node up\" rather than\n competing with the pan), scrollbars tell you how much canvas there is, and\n the edge auto-scroll loop above works unmodified because it scrolls\n scrollers. The cost is that the plane has a finite extent, which is why node\n positions are clamped to it.\n ========================================================================= */\n\n/** Plane-local box of a node, as the layout placed it. */\nexport interface NodeBox {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface CanvasGestureOptions {\n /** Where a node sits before any drag offset. Null for an id not on screen. */\n layoutBoxOf: (id: string) => NodeBox | null;\n /** Extent of the scrolled plane. Node positions are clamped inside it. */\n planeSize: { width: number; height: number };\n /** A press that released without activating — the click that descends. */\n onNodeClick: (id: string) => void;\n /** A drag that committed. Offsets stay owned here either way. */\n onNodeDragEnd?: (event: { id: string; offset: Point }) => void;\n disabled?: boolean;\n}\n\nexport interface CanvasGestures {\n /** Drag offsets from the layout position, by node id. */\n offsets: Readonly<Record<string, Point>>;\n /** The node a pointer is currently carrying, or null. */\n draggingId: string | null;\n panning: boolean;\n /** Ref callback for the scroll viewport. Stable — see the note at its use. */\n bindViewport: (node: HTMLDivElement | null) => void;\n /** Ref callback for one node's element. Stable per id. */\n bindNode: (id: string) => (node: HTMLElement | null) => void;\n /** Drop every offset — called when the layout underneath them changes. */\n clearOffsets: () => void;\n}\n\nconst clamp = (value: number, min: number, max: number): number =>\n Math.min(Math.max(value, min), max);\n\nexport function useCanvasGestures(options: CanvasGestureOptions): CanvasGestures {\n const { layoutBoxOf, planeSize, onNodeClick, onNodeDragEnd, disabled } = options;\n\n const [offsets, setOffsets] = useState<Record<string, Point>>({});\n const [draggingId, setDraggingId] = useState<string | null>(null);\n const [panning, setPanning] = useState(false);\n\n /* Live values every gesture callback reads. A gesture outlives several\n renders, so closing over props directly leaves it acting on whatever\n existed at pointer-down — the calendar's note, and the same fix. */\n const live = useRef({ layoutBoxOf, planeSize, onNodeClick, onNodeDragEnd, disabled, offsets });\n live.current = { layoutBoxOf, planeSize, onNodeClick, onNodeDragEnd, disabled, offsets };\n\n const viewport = useRef<HTMLDivElement | null>(null);\n\n const session = useRef<{\n /** Client-space box of the viewport. Snapshot; invalidated by scroll/resize. */\n frame: { left: number; top: number } | null;\n drag: { id: string; grab: Point; restore: Point | null; latest: Point | null } | null;\n pan: { origin: Point; scroll: { left: number; top: number } } | null;\n /** Live client point, for the auto-scroll driver. */\n point: Point | null;\n }>({ frame: null, drag: null, pan: null, point: null });\n\n /**\n * The viewport's own position on screen.\n *\n * MEASURED, THEN INVALIDATED — never per move. `getBoundingClientRect`\n * forces layout, and a drag reads it on every frame of the one gesture that\n * must not drop one. The viewport's box only moves when the PAGE scrolls or\n * the window resizes; its own scrolling does not move it, which is what makes\n * a snapshot safe here at all.\n */\n const remeasure = useCallback(() => {\n const el = viewport.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n session.current.frame = { left: rect.left, top: rect.top };\n }, []);\n\n /** Client point → plane coordinates. The plane IS the scrolled content. */\n const toPlane = useCallback((point: Point): Point | null => {\n const el = viewport.current;\n const frame = session.current.frame;\n if (!el || !frame) return null;\n return {\n x: point.x - frame.left + el.scrollLeft,\n y: point.y - frame.top + el.scrollTop,\n };\n }, []);\n\n /** Compute and store the offset the current drag implies for `point`. */\n const applyDrag = useCallback(\n (point: Point) => {\n const drag = session.current.drag;\n if (!drag) return;\n const plane = toPlane(point);\n const box = live.current.layoutBoxOf(drag.id);\n if (!plane || !box) return;\n\n /* CLAMPED TO THE PLANE, not to the viewport. A node dragged past the\n edge of the canvas would otherwise sit at a coordinate the scroll\n container cannot reach, so it would be permanently invisible with no\n way back — and the edge auto-scroll that carried it there would have\n nothing left to scroll toward. */\n const { width, height } = live.current.planeSize;\n const x = clamp(plane.x - drag.grab.x, 0, Math.max(0, width - box.width));\n const y = clamp(plane.y - drag.grab.y, 0, Math.max(0, height - box.height));\n\n /* Recorded on the session as well as in state. `onRelease` needs the\n offset the LAST move computed, and reading it back out of React state\n races the final `setOffsets` — a drop that landed a frame ahead of the\n re-render would report the second-to-last position. */\n const next = { x: x - box.x, y: y - box.y };\n drag.latest = next;\n setOffsets((current) => ({ ...current, [drag.id]: next }));\n },\n [toPlane],\n );\n\n const endDrag = useCallback(() => {\n session.current.drag = null;\n session.current.point = null;\n setDraggingId(null);\n }, []);\n\n /* ESCAPE ABANDONS THE DRAG, and restores the offset the node had when it was\n picked up rather than dropping it to the layout position — a node the user\n had already placed by hand must not jump home because they cancelled a\n SECOND move of it. Window-level: the node has pointer capture, not focus,\n so a keypress never reaches it. */\n useEffect(() => {\n if (!draggingId) return;\n const onKey = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\") return;\n const drag = session.current.drag;\n if (!drag) return;\n event.preventDefault();\n setOffsets((current) => {\n const next = { ...current };\n if (drag.restore) next[drag.id] = drag.restore;\n else delete next[drag.id];\n return next;\n });\n endDrag();\n };\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [draggingId, endDrag]);\n\n /* The snapshot's two invalidators, exactly as `attachSessionWindowListeners`\n names them. Capture phase, because a scroll inside an ancestor does not\n bubble to the window. */\n useEffect(() => {\n if (!draggingId && !panning) return;\n const onShift = () => remeasure();\n window.addEventListener(\"scroll\", onShift, { capture: true, passive: true });\n window.addEventListener(\"resize\", onShift);\n return () => {\n window.removeEventListener(\"scroll\", onShift, { capture: true });\n window.removeEventListener(\"resize\", onShift);\n };\n }, [draggingId, panning, remeasure]);\n\n /* EDGE AUTO-SCROLL, for the lifetime of a node drag only. `onScrolled`\n re-runs the MOVE with the unchanged point rather than merely remeasuring:\n the pointer has not moved and the content has, so nothing recomputes where\n the node should be unless the same point is fed back through. That is the\n whole reason `AutoScrollDriver` has a second method. */\n useEffect(() => {\n if (!draggingId) return;\n return attachEdgeAutoScroll({\n getPoint: () => session.current.point,\n onScrolled: (point) => applyDrag(point),\n });\n }, [draggingId, applyDrag]);\n\n /**\n * Swallow the click the browser fires after a completed drag.\n *\n * The browser dispatches `click` after `pointerup` no matter how far the\n * pointer travelled, so without this every finished drag ALSO descends into\n * the node it just moved. Capture phase and removed on the next tick: the\n * click arrives synchronously after `pointerup`, and a listener that outlived\n * the tick would eat the user's next real click.\n */\n function swallowNextClick(node: HTMLElement): void {\n const swallow = (event: Event) => {\n event.stopPropagation();\n event.preventDefault();\n };\n node.addEventListener(\"click\", swallow, { capture: true, once: true });\n setTimeout(() => node.removeEventListener(\"click\", swallow, { capture: true }), 0);\n }\n\n /* --- node drag ---------------------------------------------------------- */\n\n const nodeBindings = useRef(new Map<string, (node: HTMLElement | null) => void>());\n\n const makeNodeBinding = useCallback(\n (id: string) => (node: HTMLElement | null) => {\n if (!node) return;\n return attachPointerGesture(node, {\n onPress: (_point, event) => {\n if (live.current.disabled) return false;\n /* A press that landed on the consumer's own control belongs to that\n control. Without this a button inside a node body could never be\n clicked: the gesture would take pointer capture and the button\n would never see the release. */\n const target = event.target as HTMLElement | null;\n if (isInteractiveTarget(target)) {\n return false;\n }\n return true;\n },\n onActivate: (point) => {\n remeasure();\n session.current.point = point;\n const plane = toPlane(point);\n const box = live.current.layoutBoxOf(id);\n if (!plane || !box) return;\n const offset = live.current.offsets[id] ?? null;\n session.current.drag = {\n id,\n /* Where inside the node it was grabbed, so it tracks the point that\n was picked up rather than snapping a corner to the cursor. */\n grab: {\n x: plane.x - (box.x + (offset?.x ?? 0)),\n y: plane.y - (box.y + (offset?.y ?? 0)),\n },\n restore: offset,\n latest: offset,\n };\n setDraggingId(id);\n },\n onMove: (point) => {\n session.current.point = point;\n applyDrag(point);\n },\n onRelease: (_point, activated) => {\n const drag = session.current.drag;\n endDrag();\n if (!activated) {\n /* A press and release with no travel is a CLICK, and a click\n descends. The activation constraint is what keeps the two apart —\n it is also why a click cannot be handled with `onClick` on the\n node: the gesture has pointer capture by then. */\n if (!live.current.disabled) live.current.onNodeClick(id);\n return;\n }\n swallowNextClick(node);\n if (drag?.latest) live.current.onNodeDragEnd?.({ id, offset: drag.latest });\n },\n onCancel: () => {\n const drag = session.current.drag;\n if (drag) {\n setOffsets((current) => {\n const next = { ...current };\n if (drag.restore) next[drag.id] = drag.restore;\n else delete next[drag.id];\n return next;\n });\n }\n endDrag();\n },\n }) as unknown as void;\n },\n [applyDrag, endDrag, remeasure, toPlane],\n );\n\n /**\n * Ref callbacks cached by id.\n *\n * THE IDENTITY HAS TO BE STABLE, and this is not an optimisation — without\n * it the feature does not work at all. React tears down a ref whose function\n * identity changed and attaches the new one; the first thing a drag does is\n * set state, that re-renders, the re-render would hand React a fresh\n * callback, and the teardown releases pointer capture. The drag would kill\n * itself at the moment it started. The calendar learned this with a browser\n * probe reporting \"moved 0px while still held\".\n */\n const bindNode = useCallback(\n (id: string) => {\n let cached = nodeBindings.current.get(id);\n if (!cached) {\n cached = makeNodeBinding(id);\n nodeBindings.current.set(id, cached);\n }\n return cached;\n },\n [makeNodeBinding],\n );\n\n /* --- pan ---------------------------------------------------------------- */\n\n /* Stable by construction — `remeasure` is the only dependency and it has an\n empty one of its own. Same requirement as the node bindings below it: a\n viewport ref that re-attached on every render would drop the pan gesture\n the first time a pan set state. */\n const bindViewport = useCallback(\n (node: HTMLDivElement | null) => {\n viewport.current = node;\n if (!node) return;\n const detach = attachPointerGesture(node, {\n onPress: (_point, event) => {\n if (live.current.disabled) return false;\n /* A press that started on a node is that node's drag, not a pan.\n Both gestures see this `pointerdown` — the node's listener is on\n the node, this one is on the ancestor it bubbles to — and the\n second `setPointerCapture` would take the gesture away from the\n first. Refusing here is what keeps them from fighting. */\n const target = event.target as HTMLElement | null;\n return !target?.closest(\"[data-canvas-node]\");\n },\n onActivate: (point) => {\n remeasure();\n session.current.pan = {\n origin: point,\n scroll: { left: node.scrollLeft, top: node.scrollTop },\n };\n setPanning(true);\n },\n onMove: (point) => {\n const pan = session.current.pan;\n if (!pan) return;\n /* Content follows the hand: dragging right reveals what is to the\n LEFT, so the scroll offset moves against the pointer. */\n node.scrollLeft = pan.scroll.left - (point.x - pan.origin.x);\n node.scrollTop = pan.scroll.top - (point.y - pan.origin.y);\n },\n onRelease: () => {\n session.current.pan = null;\n setPanning(false);\n },\n onCancel: () => {\n session.current.pan = null;\n setPanning(false);\n },\n });\n return detach as unknown as void;\n },\n [remeasure],\n );\n\n /* The per-id binding cache is deliberately NOT cleared alongside these. Its\n entries are keyed on a node id and are correct for that id forever, and\n dropping them would hand React a fresh callback for every node that\n survived the re-root — which is a teardown and re-attach of a live pointer\n gesture, for nothing. */\n const clearOffsets = useCallback(() => setOffsets({}), []);\n\n return { offsets, draggingId, panning, bindViewport, bindNode, clearOffsets };\n}\n"],"names":["clamp","value","min","max","useCanvasGestures","options","layoutBoxOf","planeSize","onNodeClick","onNodeDragEnd","disabled","offsets","setOffsets","useState","draggingId","setDraggingId","panning","setPanning","live","useRef","viewport","session","remeasure","useCallback","el","rect","toPlane","point","frame","applyDrag","drag","plane","box","width","height","x","y","next","current","endDrag","useEffect","onKey","event","onShift","attachEdgeAutoScroll","swallowNextClick","node","swallow","nodeBindings","makeNodeBinding","id","attachPointerGesture","_point","target","isInteractiveTarget","offset","activated","bindNode","cached","bindViewport","pan","clearOffsets"],"mappings":"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"}