@50arms/ui 0.0.0-stage → 35.1.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 +167 -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 +331 -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 +20 -0
  1037. package/dist/types/components/rbac/ApiKeysPanel.d.ts +26 -0
  1038. package/dist/types/components/rbac/ApiKeysTable.d.ts +63 -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 +633 -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":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,75 @@
1
+ const u = ["glow", "pulse", "ripple", "beacon", "ring", "shimmer", "bounce", "wiggle"], a = ["bounce", "wiggle"];
2
+ function R(n) {
3
+ const e = typeof n == "string" ? [n] : [...n];
4
+ if (e.length === 0) throw new RangeError("Attention: `effect` must name at least one effect, got an empty list");
5
+ for (const t of e)
6
+ if (!u.includes(t)) throw new RangeError(`Attention: unknown effect "${t}"`);
7
+ const o = u.filter((t) => e.includes(t)), s = o.filter((t) => a.includes(t));
8
+ return s.length > 1 ? { effects: o.filter((t) => !a.includes(t)), conflict: s } : { effects: o, conflict: null };
9
+ }
10
+ const m = ["beacon", "shimmer", "bounce", "wiggle"];
11
+ function g(n) {
12
+ return m.includes(n);
13
+ }
14
+ const w = {
15
+ ripple: { slow: 6e3, normal: 4e3, fast: 2400 },
16
+ pulse: { slow: 4400, normal: 3e3, fast: 2e3 },
17
+ glow: { slow: 4400, normal: 3e3, fast: 2e3 },
18
+ ring: { slow: 6400, normal: 3800, fast: 2200 }
19
+ }, M = { slow: 7e3, normal: 4500, fast: 2800 };
20
+ function p(n, e, o) {
21
+ return g(n) ? o !== void 0 ? { cycleMs: i(o, "interval") } : typeof e == "number" ? { cycleMs: i(e, "speed") } : { cycleMs: M[e] } : typeof e == "number" ? { cycleMs: i(e, "speed") } : { cycleMs: w[n][e] };
22
+ }
23
+ function i(n, e) {
24
+ if (!Number.isFinite(n) || n <= 0)
25
+ throw new RangeError(`Attention: \`${e}\` must be a positive number of milliseconds, got ${n}`);
26
+ return n;
27
+ }
28
+ const f = { subtle: 0.75, medium: 1, strong: 1.25 };
29
+ function h(n, e, o) {
30
+ const s = Math.min(n, e);
31
+ if (!(s > 0)) return null;
32
+ const t = c(s * 0.9, 18, 42) * f[o], l = c(s * 0.28, 6, 12) * f[o];
33
+ return {
34
+ reachPx: r(t),
35
+ diagonal: r(Math.hypot(n, e)),
36
+ reachX: r(1 + t / n),
37
+ reachY: r(1 + t / e),
38
+ swellX: r(1 + l / n),
39
+ swellY: r(1 + l / e),
40
+ /* A turn that is right for an icon is a swinging door on a card: the angle
41
+ shrinks as the thing gets longer, so the corners sweep about the same
42
+ distance whatever is wrapped. */
43
+ tilt: r(c(432 / Math.max(n, e), 1.5, 9))
44
+ };
45
+ }
46
+ const E = [
47
+ [1, 0.62, 0.84],
48
+ [0.7, 0.95, 0.55],
49
+ [0.9, 0.66, 1],
50
+ [0.58, 1, 0.76],
51
+ [0.84, 0.72, 0.94]
52
+ ], b = E.length;
53
+ function y(n) {
54
+ if (!Number.isFinite(n)) throw new RangeError(`Attention: \`rings\` must be a number, got ${n}`);
55
+ return Math.min(b, Math.max(1, Math.round(n)));
56
+ }
57
+ function c(n, e, o) {
58
+ return Math.min(o, Math.max(e, n));
59
+ }
60
+ function r(n) {
61
+ return Math.round(n * 1e3) / 1e3;
62
+ }
63
+ export {
64
+ u as EFFECT_ORDER,
65
+ b as MAX_RINGS,
66
+ a as MOTION_EFFECTS,
67
+ m as PERIODIC_EFFECTS,
68
+ E as WAVE_REACH,
69
+ y as clampRings,
70
+ g as isPeriodic,
71
+ R as resolveEffects,
72
+ h as resolveReach,
73
+ p as resolveTiming
74
+ };
75
+ //# sourceMappingURL=attention.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attention.js","sources":["../../src/lib/attention.ts"],"sourcesContent":["/* ============================================================================\n ATTENTION — the pure half: which timings, which sizes, which radii.\n\n `Attention` draws everything with CSS, so the only decisions left for script\n are numbers: how long one cycle takes, how far a wave reaches for the size of\n the thing it surrounds, and how the ring radii vary. They live here, free of\n React and the DOM, so a test can pin them without rendering anything.\n ========================================================================= */\n\nexport type AttentionEffect =\n | \"ripple\"\n | \"pulse\"\n | \"glow\"\n | \"ring\"\n | \"beacon\"\n | \"shimmer\"\n | \"bounce\"\n | \"wiggle\";\n\nexport type AttentionSpeed = \"slow\" | \"normal\" | \"fast\" | number;\n\nexport type AttentionIntensity = \"subtle\" | \"medium\" | \"strong\";\n\n/* ----------------------------------------------------------------------------\n COMBINING EFFECTS (DX-4504). `effect` takes one effect or several. Every\n effect but two draws a layer of its own, and layers stack in ONE defined\n order whatever order they were asked for in, so `[\"glow\", \"ripple\"]` and\n `[\"ripple\", \"glow\"]` are the same picture. Bottom to top: the glow halo, the\n pulse, the ripple circles, the beacon ping and the ring's arc behind the\n control; the shimmer's glint over it.\n\n `bounce` and `wiggle` draw no layer: they move the control itself (the\n wrapper, so every layer moves with it, a glint included). A control cannot\n hop and shake at once, so asking for both is refused: a type error for a\n literal list, and at runtime a console error naming the conflict and neither\n of them drawn. Never one picked silently.\n -------------------------------------------------------------------------- */\n\n/** Bottom to top. The two that move the control come last: they are not layers, so they have no place in the stack. */\nexport const EFFECT_ORDER: readonly AttentionEffect[] = [\"glow\", \"pulse\", \"ripple\", \"beacon\", \"ring\", \"shimmer\", \"bounce\", \"wiggle\"];\n\n/** The effects that move the control itself, of which a wrapper can run one. */\nexport const MOTION_EFFECTS: readonly AttentionEffect[] = [\"bounce\", \"wiggle\"];\n\n/** One effect, or several to combine. */\nexport type AttentionEffects = AttentionEffect | readonly AttentionEffect[];\n\n/** What a literal list naming both `bounce` and `wiggle` becomes: an object whose one key is the reason, so the type error says it. */\nexport type AttentionEffectConflict = {\n \"Attention: bounce and wiggle both move the control itself, so they cannot be combined; pick one\": never;\n};\n\n/**\n * `E` itself, unless it is a literal list naming both `bounce` and `wiggle`. A list whose contents are only known\n * at runtime (`AttentionEffect[]`) passes here and is checked by `resolveEffects`.\n */\nexport type ValidAttentionEffects<E> = E extends readonly AttentionEffect[]\n ? number extends E[\"length\"]\n ? E\n : \"bounce\" extends E[number]\n ? \"wiggle\" extends E[number]\n ? AttentionEffectConflict\n : E\n : E\n : E;\n\nexport interface ResolvedEffects {\n /** The effects to draw, de-duplicated, in stacking order. */\n effects: AttentionEffect[];\n /** The motion effects that were asked for together and so are not drawn; `null` when there is no conflict. */\n conflict: AttentionEffect[] | null;\n}\n\nexport function resolveEffects(effect: AttentionEffects): ResolvedEffects {\n const asked = typeof effect === \"string\" ? [effect] : [...effect];\n if (asked.length === 0) throw new RangeError(\"Attention: `effect` must name at least one effect, got an empty list\");\n for (const one of asked) {\n if (!EFFECT_ORDER.includes(one)) throw new RangeError(`Attention: unknown effect \"${one}\"`);\n }\n const unique = EFFECT_ORDER.filter((one) => asked.includes(one));\n const motions = unique.filter((one) => MOTION_EFFECTS.includes(one));\n if (motions.length > 1) {\n return { effects: unique.filter((one) => !MOTION_EFFECTS.includes(one)), conflict: motions };\n }\n return { effects: unique, conflict: null };\n}\n\n/** Effects that rest between bursts. Their cycle is the gap between two bursts. */\nexport const PERIODIC_EFFECTS: readonly AttentionEffect[] = [\"beacon\", \"shimmer\", \"bounce\", \"wiggle\"];\n\nexport function isPeriodic(effect: AttentionEffect): boolean {\n return PERIODIC_EFFECTS.includes(effect);\n}\n\n/* The slowest preset is genuinely slow. A click ripple takes ~0.6s; the\n attention ripple takes ten times that to cross its distance, so it reads as\n something breathing rather than something that was just pressed.\n\n `ripple` is the time ONE wave takes to expand and fade. With three rings the\n staggering is that time divided by three, so `normal` starts a new wave every\n ~1.3s and `slow` every 2s: always two or three in flight, never a rhythm\n fast enough to read as a loading indicator. */\nconst CONTINUOUS_MS: Record<\"ripple\" | \"pulse\" | \"glow\" | \"ring\", Record<\"slow\" | \"normal\" | \"fast\", number>> = {\n ripple: { slow: 6000, normal: 4000, fast: 2400 },\n pulse: { slow: 4400, normal: 3000, fast: 2000 },\n glow: { slow: 4400, normal: 3000, fast: 2000 },\n ring: { slow: 6400, normal: 3800, fast: 2200 },\n};\n\n/* The gap between the START of one burst and the start of the next. The burst\n itself takes a fixed share of it (set in attention.css), so the rest between\n bursts is whatever is left. */\nconst PERIODIC_MS: Record<\"slow\" | \"normal\" | \"fast\", number> = { slow: 7000, normal: 4500, fast: 2800 };\n\nexport interface AttentionTiming {\n /** The effect's own cycle, in ms: one wave for `ripple`, one breath for `pulse`/`glow`, one turn for `ring`, the whole period for the periodic effects. */\n cycleMs: number;\n}\n\n/**\n * How long one cycle of `effect` takes.\n *\n * `interval` only means something to the periodic effects (it IS their cycle);\n * a continuous effect has no rest to size, so it ignores it, and `Attention`\n * warns once in development rather than ignoring it in silence.\n */\nexport function resolveTiming(\n effect: AttentionEffect,\n speed: AttentionSpeed,\n interval?: number,\n): AttentionTiming {\n if (isPeriodic(effect)) {\n if (interval !== undefined) return { cycleMs: positive(interval, \"interval\") };\n if (typeof speed === \"number\") return { cycleMs: positive(speed, \"speed\") };\n return { cycleMs: PERIODIC_MS[speed] };\n }\n if (typeof speed === \"number\") return { cycleMs: positive(speed, \"speed\") };\n return { cycleMs: CONTINUOUS_MS[effect as keyof typeof CONTINUOUS_MS][speed] };\n}\n\nfunction positive(value: number, name: string): number {\n if (!Number.isFinite(value) || value <= 0) {\n throw new RangeError(`Attention: \\`${name}\\` must be a positive number of milliseconds, got ${value}`);\n }\n return value;\n}\n\n/* Waves are sized from the thing they surround, and in PIXELS, not as a ratio.\n A fixed scale factor would make a 32px icon button send a 60px ring and a\n 400px card a 760px one, which is the card swallowing its neighbours. The\n reach is a distance, capped; the two scale factors are derived from it so a\n wave spreads the SAME distance on every side — a pill gets a pill-shaped\n wave that is the same few pixels bigger all round, not one stretched to\n twice its length. */\nconst REACH_FACTOR: Record<AttentionIntensity, number> = { subtle: 0.75, medium: 1, strong: 1.25 };\n\nexport interface AttentionReach {\n /** How far past the box's edge a wave that is not contained reaches, in px (`ripple` with `contain={false}`). */\n reachPx: number;\n /** The box's diagonal in px: the diameter a contained ripple circle needs to cover every corner. */\n diagonal: number;\n /** Scale the `beacon` ping grows to, across and down. */\n reachX: number;\n reachY: number;\n /** Scale the `pulse` breath swells to, across and down. */\n swellX: number;\n swellY: number;\n /** How far `wiggle` turns, in degrees. */\n tilt: number;\n}\n\n/**\n * The scale factors for a box of the given size. The shorter side decides how\n * far a wave spreads, so a long thin control does not send a wave across the page.\n */\nexport function resolveReach(width: number, height: number, intensity: AttentionIntensity): AttentionReach | null {\n const side = Math.min(width, height);\n if (!(side > 0)) return null;\n const reachPx = clamp(side * 0.9, 18, 42) * REACH_FACTOR[intensity];\n const swellPx = clamp(side * 0.28, 6, 12) * REACH_FACTOR[intensity];\n return {\n reachPx: round(reachPx),\n diagonal: round(Math.hypot(width, height)),\n reachX: round(1 + reachPx / width),\n reachY: round(1 + reachPx / height),\n swellX: round(1 + swellPx / width),\n swellY: round(1 + swellPx / height),\n /* A turn that is right for an icon is a swinging door on a card: the angle\n shrinks as the thing gets longer, so the corners sweep about the same\n distance whatever is wrapped. */\n tilt: round(clamp((9 * 48) / Math.max(width, height), 1.5, 9)),\n };\n}\n\n/* How far each ring of a ripple reaches, as a share of its full reach, for its\n first three waves. Every ring has its own sequence, so no two rings are ever\n at the same radius at the same moment and the radius keeps changing: the\n waves are different sizes, not copies of one. Five rows is the most rings.\n\n A contained circle's full reach is the box's diagonal (so the biggest covers\n every corner and the smallest fades out just inside the edge of a circle); a\n spilling one's is the box plus `reachPx` on every side. */\nexport const WAVE_REACH: readonly (readonly [number, number, number])[] = [\n [1, 0.62, 0.84],\n [0.7, 0.95, 0.55],\n [0.9, 0.66, 1],\n [0.58, 1, 0.76],\n [0.84, 0.72, 0.94],\n];\n\nexport const MAX_RINGS = WAVE_REACH.length;\n\nexport function clampRings(rings: number): number {\n if (!Number.isFinite(rings)) throw new RangeError(`Attention: \\`rings\\` must be a number, got ${rings}`);\n return Math.min(MAX_RINGS, Math.max(1, Math.round(rings)));\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, value));\n}\n\nfunction round(value: number): number {\n return Math.round(value * 1000) / 1000;\n}\n"],"names":["EFFECT_ORDER","MOTION_EFFECTS","resolveEffects","effect","asked","one","unique","motions","PERIODIC_EFFECTS","isPeriodic","CONTINUOUS_MS","PERIODIC_MS","resolveTiming","speed","interval","positive","value","name","REACH_FACTOR","resolveReach","width","height","intensity","side","reachPx","clamp","swellPx","round","WAVE_REACH","MAX_RINGS","clampRings","rings","min","max"],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ function i(o, r, n) {
2
+ if (r.to.lane) return { lane: !0 };
3
+ if (r.to.edge !== void 0) return { edge: r.to.edge };
4
+ const t = o.filter((d) => n(d) !== r.itemId), { index: e } = r.to;
5
+ if (!Number.isInteger(e) || e < 0 || e > t.length)
6
+ throw new Error(
7
+ `moveAnchor: to.index ${e} is outside the destination's ${t.length} loaded card(s) (the moved card excluded), so no neighbour can be named for "${r.itemId}".`
8
+ );
9
+ return e < t.length ? { beforeId: n(t[e]) } : e > 0 ? { afterId: n(t[e - 1]) } : {};
10
+ }
11
+ export {
12
+ i as moveAnchor
13
+ };
14
+ //# sourceMappingURL=anchor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anchor.js","sources":["../../../src/lib/board/anchor.ts"],"sourcesContent":["/**\n * ==== MOVE ANCHOR ====\n *\n * What a server needs to place a card the board moved, when the board holds\n * only a window of the column (DX-4540). A drop knows exactly one thing about\n * where it landed: which LOADED neighbours it is between. It never knows the\n * card's position in the whole column, and a client that tries to compute one\n * from `to.index` is wrong the moment the window does not start at the top.\n * So the request names the neighbours, and the server finds the place.\n *\n * `to.index` counts the destination's LOADED cards with the moved card already\n * removed (the board's one index rule), so the card lands before\n * `rest[to.index]`, where `rest` is the destination's loaded cards without the\n * moved one. ONE neighbour is named, because a server places a card relative to\n * one: the card it lands directly above (`beforeId`) whenever there is one, and\n * only at the end of the loaded run, where nothing is below, the card it lands\n * directly below (`afterId`). An empty destination names nothing.\n *\n * A LANE MOVE IS ITS OWN ANSWER (DX-4583). It carries no position, so there is\n * no neighbour to anchor to, and `{ lane: true }` says so: the server changes\n * the card's lane and keeps its own rank. That is not the empty anchor, which\n * says \"the destination has no cards, so this is the first\".\n *\n * AN EDGE INTENT TRUMPS THE NEIGHBOURS. \"Move to top\" in a window that starts\n * at card 221 means the top of the column, which no loaded neighbour can say,\n * so the anchor carries the edge and no ids.\n */\n\nimport type { BoardEdge, BoardItemId, BoardMove } from \"./types\";\n\n/**\n * EXACTLY ONE field is set — a server's lane-move takes one — or none for an\n * empty destination:\n * beforeId the moved card lands directly above this loaded card\n * afterId it lands directly below this one: only when it lands after the last\n * loaded card, where nothing is below to name\n * edge it goes to the very top or bottom of the whole column\n * lane a lane move: no position at all, the card keeps its rank\n * None is set for an empty destination.\n */\nexport type MoveAnchor =\n | { beforeId: BoardItemId; afterId?: never; edge?: never; lane?: never }\n | { afterId: BoardItemId; beforeId?: never; edge?: never; lane?: never }\n | { edge: BoardEdge; beforeId?: never; afterId?: never; lane?: never }\n | { lane: true; beforeId?: never; afterId?: never; edge?: never }\n | { beforeId?: never; afterId?: never; edge?: never; lane?: never };\n\n/**\n * @param destinationItems the destination column's LOADED cards (the moved card\n * may be among them, for a same-column move).\n */\nexport function moveAnchor<T>(\n destinationItems: readonly T[],\n move: BoardMove,\n getId: (item: T) => BoardItemId,\n): MoveAnchor {\n if (move.to.lane) return { lane: true };\n if (move.to.edge !== undefined) return { edge: move.to.edge };\n\n const rest = destinationItems.filter((item) => getId(item) !== move.itemId);\n const { index } = move.to;\n if (!Number.isInteger(index) || index < 0 || index > rest.length) {\n throw new Error(\n `moveAnchor: to.index ${index} is outside the destination's ${rest.length} loaded card(s) ` +\n `(the moved card excluded), so no neighbour can be named for \"${move.itemId}\".`,\n );\n }\n if (index < rest.length) return { beforeId: getId(rest[index]) };\n if (index > 0) return { afterId: getId(rest[index - 1]) };\n return {};\n}\n"],"names":["moveAnchor","destinationItems","move","getId","rest","item","index"],"mappings":"AAmDO,SAASA,EACdC,GACAC,GACAC,GACY;AACZ,MAAID,EAAK,GAAG,KAAM,QAAO,EAAE,MAAM,GAAA;AACjC,MAAIA,EAAK,GAAG,SAAS,eAAkB,EAAE,MAAMA,EAAK,GAAG,KAAA;AAEvD,QAAME,IAAOH,EAAiB,OAAO,CAACI,MAASF,EAAME,CAAI,MAAMH,EAAK,MAAM,GACpE,EAAE,OAAAI,MAAUJ,EAAK;AACvB,MAAI,CAAC,OAAO,UAAUI,CAAK,KAAKA,IAAQ,KAAKA,IAAQF,EAAK;AACxD,UAAM,IAAI;AAAA,MACR,wBAAwBE,CAAK,iCAAiCF,EAAK,MAAM,gFACPF,EAAK,MAAM;AAAA,IAAA;AAGjF,SAAII,IAAQF,EAAK,SAAe,EAAE,UAAUD,EAAMC,EAAKE,CAAK,CAAC,EAAA,IACzDA,IAAQ,IAAU,EAAE,SAASH,EAAMC,EAAKE,IAAQ,CAAC,CAAC,EAAA,IAC/C,CAAA;AACT;"}
@@ -0,0 +1,41 @@
1
+ import { columnLength as u, positionInColumn as m } from "./position.js";
2
+ function g(l, r, s) {
3
+ const i = /* @__PURE__ */ new Map();
4
+ for (const t of r) i.set(t.id, []);
5
+ const e = [];
6
+ for (const t of l) {
7
+ const o = s.getColumnId(t), n = i.get(o);
8
+ if (n) {
9
+ n.push(t);
10
+ continue;
11
+ }
12
+ e.push(t);
13
+ }
14
+ if (e.length > 0) {
15
+ const t = e.slice(0, 5).map((n) => String(s.getId(n))), o = e.length - t.length;
16
+ console.warn(
17
+ `[danxbot] board: ${e.length} item(s) reference a columnId matching no declared column — routed to \`unassigned\` rather than dropped: ${t.join(", ")}${o > 0 ? `, +${o} more` : ""}`
18
+ );
19
+ }
20
+ return { columns: r.map((t) => {
21
+ const o = i.get(t.id) ?? [], n = t.total === null, c = u(t, o.length);
22
+ return {
23
+ id: t.id,
24
+ label: t.label,
25
+ items: o,
26
+ count: c,
27
+ counting: n,
28
+ offset: m(t, 0),
29
+ wipLimit: t.wipLimit,
30
+ reorderLocked: t.reorderLocked,
31
+ reorderLabels: t.reorderLabels,
32
+ /* `wipLimit` undefined => always false, per the field's own doc on
33
+ `BoardColumnModel` — a column with no limit cannot be over one. */
34
+ overWip: t.wipLimit !== void 0 && !n && c > t.wipLimit
35
+ };
36
+ }), unassigned: e };
37
+ }
38
+ export {
39
+ g as buildBoardModel
40
+ };
41
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sources":["../../../src/lib/board/model.ts"],"sourcesContent":["/**\r\n * ==== BOARD MODEL ====\r\n *\r\n * Pure derivation: `items` + column defs + accessors -> one `BoardColumnModel`\r\n * per declared column, ready to render. No React, no mutation, no I/O other\r\n * than the diagnostic `console.warn` below — the same inputs always produce\r\n * the same output, which is what makes this testable without a browser and\r\n * safe to call on every render (`use-board.ts` wraps it in a `useMemo`, it\r\n * does not need to defend itself).\r\n *\r\n * WHY AN ITEM THAT MATCHES NO COLUMN IS NEVER DROPPED. GitHub Projects has a\r\n * live, cited bug (RES-GAME / tracker) where grouping by parent silently\r\n * drops sub-issues that carry a valid link — the item is real, the grouping\r\n * key is merely stale, and the user has no way to discover the card still\r\n * exists. A board built the same way inherits the identical bug the moment a\r\n * column is renamed or retired out from under live data, which is routine\r\n * here (a status gets retired, a card's derived status hasn't caught up to a\r\n * board's `columns` prop yet, a consumer passes a filtered `columns` list).\r\n * So an item whose `getColumnId` names no declared column is never\r\n * discarded — it is routed into `unassigned`, a structurally present field\r\n * of the model rather than a side channel a caller has to remember to check.\r\n * Every item that goes in comes out somewhere: either inside exactly one\r\n * `columns[].items`, or inside `unassigned`. That invariant is asserted by\r\n * the \"floor\" test in board-core.test.ts, so a future edit that starts\r\n * quietly filtering can't pass silently either.\r\n *\r\n * A single summarising `console.warn` also fires when any item orphans,\r\n * matching the `[danxbot] …` prefix `ErrorBoundary.tsx` already uses (and\r\n * unguarded, as that one is — this library has no dev-only convention). It is\r\n * a diagnostic ONLY, never the sole signal, since a console message is easy to\r\n * miss and impossible to act on from inside a pure function. The `data` itself\r\n * is what must never be lost; the warning just makes the gap visible before a\r\n * consumer has built an \"Unsorted\" affordance for `unassigned`.\r\n */\r\n\r\nimport { columnLength, positionInColumn } from \"./position\";\r\nimport type {\r\n BoardAccessors,\r\n BoardColumnDef,\r\n BoardColumnId,\r\n BoardColumnModel,\r\n} from \"./types\";\r\n\r\n/** The full derivation result. See the file header for why `unassigned` exists. */\r\nexport interface BoardModel<T> {\r\n /** One entry per declared column, in the SAME order as the `columns` input. */\r\n columns: readonly BoardColumnModel<T>[];\r\n /** Items whose `getColumnId` matched no entry in `columns`. Never dropped. */\r\n unassigned: readonly T[];\r\n}\r\n\r\nexport function buildBoardModel<T>(\r\n items: readonly T[],\r\n columns: readonly BoardColumnDef[],\r\n accessors: BoardAccessors<T>,\r\n): BoardModel<T> {\r\n /* Seeded from `columns` up front — including columns with zero items — so\r\n an empty column still renders its header rather than vanishing from the\r\n model entirely. A `Map` rather than a plain object because `BoardColumnId`\r\n is a consumer-supplied string with no guarantee against prototype-pollution\r\n keys like \"constructor\". */\r\n const buckets = new Map<BoardColumnId, T[]>();\r\n for (const def of columns) buckets.set(def.id, []);\r\n\r\n const unassigned: T[] = [];\r\n for (const item of items) {\r\n const columnId = accessors.getColumnId(item);\r\n const bucket = buckets.get(columnId);\r\n if (bucket) {\r\n bucket.push(item);\r\n continue;\r\n }\r\n unassigned.push(item);\r\n }\r\n\r\n /* ONE WARNING PER CALL, NOT ONE PER ITEM. The orphan case is not rare-and-\r\n isolated: retire a column out from under live data and EVERY card in it\r\n orphans at once, so a per-item warning emits hundreds of lines on every\r\n recompute of an unchanged board. That floods the console and buries the\r\n messages around it — the same alert-fatigue failure this project's own\r\n research documents for the UI, aimed at the developer instead. A bounded\r\n summary says the identical thing and stays readable, so it keeps being\r\n read. Ids are capped for the same reason; `unassigned` carries the\r\n complete set for anyone who needs it. */\r\n if (unassigned.length > 0) {\r\n const shown = unassigned.slice(0, 5).map((item) => String(accessors.getId(item)));\r\n const rest = unassigned.length - shown.length;\r\n console.warn(\r\n `[danxbot] board: ${unassigned.length} item(s) reference a columnId matching ` +\r\n `no declared column — routed to \\`unassigned\\` rather than dropped: ` +\r\n `${shown.join(\", \")}${rest > 0 ? `, +${rest} more` : \"\"}`,\r\n );\r\n }\r\n\r\n const result: BoardColumnModel<T>[] = columns.map((def) => {\r\n const columnItems = buckets.get(def.id) ?? [];\r\n /* DX-4540: THE ONE PLACE A COLUMN'S LENGTH AND ITS WIP VERDICT ARE\r\n DECIDED. A windowed column holds a few pages of a long list, so its\r\n length is the `total` the consumer reports, not what is loaded; `null` is\r\n a length still being read, which is neither empty nor over a limit. */\r\n const counting = def.total === null;\r\n const count = columnLength(def, columnItems.length);\r\n return {\r\n id: def.id,\r\n label: def.label,\r\n items: columnItems,\r\n count,\r\n counting,\r\n offset: positionInColumn(def, 0),\r\n wipLimit: def.wipLimit,\r\n reorderLocked: def.reorderLocked,\r\n reorderLabels: def.reorderLabels,\r\n /* `wipLimit` undefined => always false, per the field's own doc on\r\n `BoardColumnModel` — a column with no limit cannot be over one. */\r\n overWip: def.wipLimit !== undefined && !counting && count > def.wipLimit,\r\n };\r\n });\r\n\r\n return { columns: result, unassigned };\r\n}\r\n"],"names":["buildBoardModel","items","columns","accessors","buckets","def","unassigned","item","columnId","bucket","shown","rest","columnItems","counting","count","columnLength","positionInColumn"],"mappings":";AAmDO,SAASA,EACdC,GACAC,GACAC,GACe;AAMf,QAAMC,wBAAc,IAAA;AACpB,aAAWC,KAAOH,EAAS,CAAAE,EAAQ,IAAIC,EAAI,IAAI,EAAE;AAEjD,QAAMC,IAAkB,CAAA;AACxB,aAAWC,KAAQN,GAAO;AACxB,UAAMO,IAAWL,EAAU,YAAYI,CAAI,GACrCE,IAASL,EAAQ,IAAII,CAAQ;AACnC,QAAIC,GAAQ;AACV,MAAAA,EAAO,KAAKF,CAAI;AAChB;AAAA,IACF;AACA,IAAAD,EAAW,KAAKC,CAAI;AAAA,EACtB;AAWA,MAAID,EAAW,SAAS,GAAG;AACzB,UAAMI,IAAQJ,EAAW,MAAM,GAAG,CAAC,EAAE,IAAI,CAACC,MAAS,OAAOJ,EAAU,MAAMI,CAAI,CAAC,CAAC,GAC1EI,IAAOL,EAAW,SAASI,EAAM;AACvC,YAAQ;AAAA,MACN,oBAAoBJ,EAAW,MAAM,6GAEhCI,EAAM,KAAK,IAAI,CAAC,GAAGC,IAAO,IAAI,MAAMA,CAAI,UAAU,EAAE;AAAA,IAAA;AAAA,EAE7D;AA0BA,SAAO,EAAE,SAxB6BT,EAAQ,IAAI,CAACG,MAAQ;AACzD,UAAMO,IAAcR,EAAQ,IAAIC,EAAI,EAAE,KAAK,CAAA,GAKrCQ,IAAWR,EAAI,UAAU,MACzBS,IAAQC,EAAaV,GAAKO,EAAY,MAAM;AAClD,WAAO;AAAA,MACL,IAAIP,EAAI;AAAA,MACR,OAAOA,EAAI;AAAA,MACX,OAAOO;AAAA,MACP,OAAAE;AAAA,MACA,UAAAD;AAAA,MACA,QAAQG,EAAiBX,GAAK,CAAC;AAAA,MAC/B,UAAUA,EAAI;AAAA,MACd,eAAeA,EAAI;AAAA,MACnB,eAAeA,EAAI;AAAA;AAAA;AAAA,MAGnB,SAASA,EAAI,aAAa,UAAa,CAACQ,KAAYC,IAAQT,EAAI;AAAA,IAAA;AAAA,EAEpE,CAAC,GAEyB,YAAAC,EAAA;AAC5B;"}
@@ -0,0 +1,161 @@
1
+ import { positionInColumn as y, columnLength as B } from "./position.js";
2
+ import { applyMove as E, isNoOp as $ } from "../dnd/geometry.js";
3
+ function b(l, n, c) {
4
+ const { from: m, to: r } = l;
5
+ if (m.columnId !== r.columnId) return !1;
6
+ if (r.lane) return !0;
7
+ if (r.edge === void 0)
8
+ return $(
9
+ { container: m.columnId, index: m.index },
10
+ { container: r.columnId, index: r.index }
11
+ );
12
+ const i = y(n, m.index);
13
+ return r.edge === "top" ? i === 0 : i === B(n, c) - 1;
14
+ }
15
+ function N(l, n) {
16
+ const { items: c, columns: m, accessors: r, validateMove: i } = l;
17
+ if (n.moves.length === 0)
18
+ return { verdict: { ok: !0 }, commit: [] };
19
+ if (n.moves.length > 1 && n.source !== "bulk")
20
+ throw new Error(`resolveMove: a request with ${n.moves.length} moves must use source "bulk", got "${n.source}"`);
21
+ const a = new Set(m.map((o) => o.id)), I = new Map(c.map((o) => [r.getId(o), o])), u = /* @__PURE__ */ new Map();
22
+ for (const o of c) {
23
+ const g = r.getColumnId(o);
24
+ u.set(g, (u.get(g) ?? 0) + 1);
25
+ }
26
+ const e = new Map(m.map((o) => [o.id, o])), t = (o) => b(o, e.get(o.from.columnId), u.get(o.from.columnId) ?? 0), s = /* @__PURE__ */ new Map();
27
+ for (const o of n.moves)
28
+ t(o) || s.set(
29
+ o.from.columnId,
30
+ (s.get(o.from.columnId) ?? 0) + 1
31
+ );
32
+ const d = /* @__PURE__ */ new Set();
33
+ for (const o of n.moves) {
34
+ if (d.has(o.itemId))
35
+ throw new Error(`resolveMove: item "${o.itemId}" appears more than once in the same move request`);
36
+ d.add(o.itemId);
37
+ const g = I.get(o.itemId);
38
+ if (!g)
39
+ return { verdict: { ok: !1, reason: { code: "unknownItem", itemId: o.itemId } }, commit: [] };
40
+ for (const x of [o.from.columnId, o.to.columnId])
41
+ if (!a.has(x))
42
+ return { verdict: { ok: !1, reason: { code: "unknownColumn", columnId: x } }, commit: [] };
43
+ const p = r.getColumnId(g);
44
+ if (p !== o.from.columnId)
45
+ return {
46
+ verdict: {
47
+ ok: !1,
48
+ reason: {
49
+ code: "wrongColumn",
50
+ itemId: o.itemId,
51
+ actualColumnId: p,
52
+ claimedColumnId: o.from.columnId
53
+ }
54
+ },
55
+ commit: []
56
+ };
57
+ if (!Number.isInteger(o.from.index) || o.from.index < 0)
58
+ throw new Error(`resolveMove: item "${o.itemId}" has an invalid from.index`);
59
+ const v = u.get(o.from.columnId) ?? 0;
60
+ if (o.from.index >= v)
61
+ return {
62
+ verdict: {
63
+ ok: !1,
64
+ reason: {
65
+ code: "fromIndexPastEnd",
66
+ itemId: o.itemId,
67
+ index: o.from.index,
68
+ columnId: o.from.columnId,
69
+ count: v
70
+ }
71
+ },
72
+ commit: []
73
+ };
74
+ if (o.to.lane) continue;
75
+ if (!Number.isInteger(o.to.index) || o.to.index < 0)
76
+ throw new Error(`resolveMove: item "${o.itemId}" has an invalid to.index`);
77
+ const h = e.get(o.from.columnId)?.reorderLocked;
78
+ if (h !== void 0 && o.from.columnId === o.to.columnId && !t(o))
79
+ return { verdict: { ok: !1, reason: { code: "consumer", message: h } }, commit: [] };
80
+ const k = u.get(o.to.columnId) ?? 0, C = s.get(o.to.columnId) ?? 0, w = k - C;
81
+ if (o.to.index > w)
82
+ return {
83
+ verdict: {
84
+ ok: !1,
85
+ reason: {
86
+ code: "toIndexPastEnd",
87
+ itemId: o.itemId,
88
+ index: o.to.index,
89
+ columnId: o.to.columnId,
90
+ max: w
91
+ }
92
+ },
93
+ commit: []
94
+ };
95
+ }
96
+ if (i) {
97
+ const o = i(n);
98
+ if (!o.ok)
99
+ return { verdict: { ok: !1, reason: { code: "consumer", message: o.reason } }, commit: [] };
100
+ }
101
+ const f = n.moves.filter((o) => !t(o));
102
+ return { verdict: { ok: !0 }, commit: f };
103
+ }
104
+ function F(l, n, c) {
105
+ if (c.length === 0) return l.slice();
106
+ const m = c[0];
107
+ if (c.length === 1 && m.from.columnId === m.to.columnId && !m.to.lane) {
108
+ const e = m.from.columnId, t = /* @__PURE__ */ new Map();
109
+ for (const d of l) {
110
+ const f = n.getColumnId(d), o = t.get(f);
111
+ o ? o.push(d) : t.set(f, [d]);
112
+ }
113
+ const s = t.get(e) ?? [];
114
+ return t.set(e, E(s, m.from.index, m.to.index)), M(l, n, t);
115
+ }
116
+ const r = new Map(l.map((e) => [n.getId(e), e]));
117
+ for (const e of c) {
118
+ if (!e.to.lane) continue;
119
+ const t = r.get(e.itemId);
120
+ if (t !== void 0 && n.getColumnId(t) !== e.to.columnId)
121
+ throw new Error(
122
+ `applyBoardMoves: "${e.itemId}" moves to lane "${e.to.columnId}" but its own lane is still "${n.getColumnId(t)}"; write the lane on the item before applying a lane move.`
123
+ );
124
+ }
125
+ const i = c.filter((e) => !e.to.lane), a = new Set(i.map((e) => e.itemId)), I = /* @__PURE__ */ new Map();
126
+ for (const e of l) {
127
+ const t = n.getColumnId(e);
128
+ if (a.has(n.getId(e))) continue;
129
+ const s = I.get(t);
130
+ s ? s.push(e) : I.set(t, [e]);
131
+ }
132
+ const u = /* @__PURE__ */ new Map();
133
+ i.forEach((e, t) => {
134
+ const s = u.get(e.to.columnId), d = { move: e, requestOrder: t };
135
+ s ? s.push(d) : u.set(e.to.columnId, [d]);
136
+ });
137
+ for (const [e, t] of u) {
138
+ t.sort((d, f) => d.move.to.index - f.move.to.index || d.requestOrder - f.requestOrder);
139
+ const s = I.get(e) ?? [];
140
+ t.forEach(({ move: d }, f) => {
141
+ const o = r.get(d.itemId);
142
+ o && s.splice(d.to.index + f, 0, o);
143
+ }), I.set(e, s);
144
+ }
145
+ return M(l, n, I);
146
+ }
147
+ function M(l, n, c) {
148
+ const m = [], r = /* @__PURE__ */ new Set();
149
+ for (const i of l) {
150
+ const a = n.getColumnId(i);
151
+ c.has(a) && !r.has(a) && (r.add(a), m.push(a));
152
+ }
153
+ for (const i of c.keys())
154
+ r.has(i) || (r.add(i), m.push(i));
155
+ return m.flatMap((i) => c.get(i) ?? []);
156
+ }
157
+ export {
158
+ F as applyBoardMoves,
159
+ N as resolveMove
160
+ };
161
+ //# sourceMappingURL=move.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"move.js","sources":["../../../src/lib/board/move.ts"],"sourcesContent":["/**\n * ==== MOVE ====\n *\n * The one validated pipeline every `BoardMoveRequest` passes through, no\n * matter which of the four `BoardMoveSource` values produced it. `types.ts`\n * names this the load-bearing rule: pointer drag, keyboard, the mandatory\n * \"Move to…\" menu (WCAG 2.5.7) and bulk selection all construct a request\n * and call the SAME function here. A per-source branch that skips a step is\n * exactly how the accessible paths rot — the drag path gets exercised daily\n * and the menu path silently stops agreeing with it, taking the 2.5.7\n * alternative down with it and nobody notices until an audit.\n *\n * TWO RESPONSIBILITIES, DELIBERATELY SEPARATE FUNCTIONS:\n *\n * `resolveMove` decides WHETHER a request may commit. It is the only thing\n * `use-board.ts`'s `requestMove` calls, and it never touches `T[]` — it\n * returns a verdict plus the subset of moves worth writing.\n *\n * `applyBoardMoves` decides WHAT the resulting `items` array looks like,\n * given moves already known to be valid (typically `resolveMove(...).commit`).\n * It does no validation of its own — that would duplicate `resolveMove` — and\n * it is exported separately because `onMove` on `UseBoardOptions` returns\n * `void`: this module hands the consumer a verdict, not a next state, so a\n * consumer's own `onMove` needs a correct way to turn \"these moves are real\"\n * into \"here is my next `items` array.\" Without it, every consumer either\n * re-derives the exact index arithmetic `applyMove` exists to remove, or\n * worse, folds it over a bulk request and gets the trap below.\n *\n * WHY `resolveMove` DOES ITS OWN STRUCTURAL CHECKS BEFORE EVER CALLING THE\n * CALLER'S `validateMove`. `validateMove` is optional and, per `types.ts`,\n * \"Absent means every move is allowed\" — so nothing upstream is guaranteed to\n * have checked that `itemId` names a real item or that a `columnId` names a\n * declared column. A malformed request must never reach a consumer's domain\n * rule carrying numbers that don't correspond to reality, and a consumer's\n * `validateMove` should never have to re-derive checks this module can prove\n * from its own inputs for free. So structural validity runs FIRST, always on,\n * not configurable — before `validateMove`, before no-op filtering.\n *\n * WHY NO-OP FILTERING IS PER-MOVE BUT VALIDITY IS ALL-OR-NOTHING. These are\n * different questions. Atomicity (\"did the batch survive as one unit\")\n * governs whether the request is safe to commit AT ALL — RES-GAME names this\n * exactly: \"moving five selected cards should not accept the first two and\n * reject the remaining three.\" One bad move rejects the whole batch, full\n * stop. But once a batch is known-good, a card that happens to already be\n * exactly where it is going is not an error — it is nothing to write.\n * Dropping that ONE entry from the committed set changes nothing about the\n * other four having moved correctly, and `onMove`'s own doc on\n * `UseBoardOptions` names the cost of not doing this: \"the previous board\n * wrote its ordering field on every release that landed where it started.\"\n *\n * NO-OP IS A PER-MOVE, SYNTACTIC CHECK — REUSING `isNoOp` FROM `lib/dnd`,\n * NOT A FULL SIMULATION OF FINAL POSITION. `isNoOp(from, to)` says \"same\n * column, same index\" for exactly one move, taken at face value. For a bulk\n * request whose moves interact (two items landing in the same column), a\n * move's own `{column, index}` pair can be untouched while its ABSOLUTE final\n * position shifts because a sibling move inserted ahead of it. This module\n * does not attempt to detect that: `to.index` is the caller's stated INTENT,\n * so a move that literally says \"column A index 2 to column A index 2\" is\n * declaring no intended change regardless of what its bulk-mates do, and\n * that is the same per-item promise the drag engine's own `DragEndEvent.moved`\n * makes — it never reasoned about siblings either, because a single drag\n * gesture never has any.\n *\n * THE BULK INDEX CONVENTION, AND WHY IT HAS TO BE STATED EXPLICITLY. The\n * engine's single-item convention — `to.index` counts the destination list\n * WITH THE DRAGGED ITEM ALREADY REMOVED — has no obvious generalisation to N\n * items removed from possibly-different columns at once, and `types.ts`\n * does not pick one; that is this module's decision to make and document.\n * THE RULE: every positional move's `to.index`, bulk or not, counts its destination\n * column's items with EVERY item named ANYWHERE in the same request already\n * removed — not just itself. For a single-move request that is identical to\n * the engine's own rule (nothing else is being removed). For a bulk request\n * it means a UI constructing the request reasons about one shared reference\n * frame per target column (\"insert these three selected cards starting at\n * position two among the cards that are staying put\"), not about where its\n * OTHER selected cards will land — which is the only version of \"bulk move\n * to a position\" an operator selecting five cards can sensibly form an\n * intention about in the first place.\n *\n * THE TRAP THIS CONVENTION EXISTS TO AVOID: SEQUENTIAL applyMove FOLDING\n * SILENTLY CORRUPTS A BULK REORDER. Applying move 1 then move 2 via\n * `applyMove` one at a time is NOT equivalent to applying them together,\n * because move 1's splice shifts every index move 2 was computed against —\n * and worse, if move 2's stored index is blindly reused against the\n * ALREADY-SHIFTED array (rather than re-resolved), it can silently pick up\n * the wrong item's position entirely. `applyBoardMoves` never folds moves\n * sequentially over a mutating array for this reason. Instead it resolves\n * every move against ONE shared snapshot — the residual list per column with\n * every moved item already removed — and inserts all of a column's incoming\n * items in a single deterministic pass: sorted by `to.index` ascending\n * (ties broken by the item's original position in `moves`, i.e. request\n * order), each inserted at `to.index + (insertions already made into this\n * column)`. That running offset is exactly what accounts for earlier\n * insertions shifting the positions later ones land at, computed once\n * instead of re-derived per move. A LANE MOVE (`to.lane`, DX-4583) has no\n * index, so it takes no part in this pass: it neither leaves the residual nor\n * is inserted, and the card stays where the consumer's order already holds it\n * once the consumer has written its lane. board-core.test.ts pins a concrete bulk\n * case where the naive sequential-splice answer and this one visibly differ,\n * so the property is proven rather than incidentally true.\n *\n * WHY `applyBoardMoves` CALLS THE SHARED `applyMove` FOR THE ONE CASE WHERE\n * IT APPLIES, AND HAND-SPLICES EVERYWHERE ELSE. `applyMove(list, from, to)`\n * splices ONE array — it has no way to express \"remove from list A, insert\n * into list B,\" because a cross-column move is inherently a two-list\n * operation. The design system's own `DragDropPage` demo shows this exact\n * split already: `applyMove` for the same-container branch, a manual\n * remove-then-insert for the cross-container one. This module follows the\n * identical rule for the single-move, same-column case (delegates to\n * `applyMove` outright — see the equivalence test, which proves the general\n * residual-based path used for every other case produces byte-identical\n * output to `applyMove` when it degenerates to N=1, same column). Every\n * other shape — cross-column, or any bulk request — has no single shared\n * array to splice, so it goes through the residual-and-insert pass above.\n */\n\nimport { applyMove, isNoOp } from \"../dnd\";\nimport { columnLength, positionInColumn } from \"./position\";\nimport type {\n BoardAccessors,\n BoardColumnDef,\n BoardColumnId,\n BoardItemId,\n BoardMove,\n BoardMoveRequest,\n BoardMoveOutcome,\n BoardMoveVerdict,\n} from \"./types\";\n\n/** A move that names an index: everything but a lane move. */\ntype PositionalMove = BoardMove & { to: { index: number } };\n\n/** Everything `resolveMove` reads to prove a request is structurally real. */\nexport interface ResolveMoveContext<T> {\n items: readonly T[];\n columns: readonly BoardColumnDef[];\n accessors: BoardAccessors<T>;\n /** Consulted after structural validity holds. See the file header for order. */\n validateMove?: (request: BoardMoveRequest) => BoardMoveVerdict;\n}\n\n/**\n * A move that changes nothing. Same column and same index is one — unless the\n * move carries an edge intent (DX-4540): in a windowed column index 0 is the\n * first LOADED card, not the top of the column, so \"move to top\" of a card at\n * loaded index 0 changes something whenever the window does not start at the\n * top. An edge move is a no-op only when the card is already at that edge of\n * the WHOLE column.\n */\nfunction isNoOpMove(move: BoardMove, def: BoardColumnDef | undefined, loaded: number): boolean {\n const { from, to } = move;\n if (from.columnId !== to.columnId) return false;\n /* DX-4583: a lane move into the lane the card is already in changes nothing. */\n if (to.lane) return true;\n if (to.edge === undefined) {\n return isNoOp(\n { container: from.columnId, index: from.index },\n { container: to.columnId, index: to.index },\n );\n }\n const position = positionInColumn(def, from.index);\n return to.edge === \"top\" ? position === 0 : position === columnLength(def, loaded) - 1;\n}\n\nexport interface ResolvedMove {\n verdict: BoardMoveOutcome;\n /**\n * The subset of the request's moves worth committing, in original order.\n * Empty whenever there is nothing to write — either every move was a\n * no-op, or `verdict.ok` is false. Only ever meaningful when `verdict.ok`.\n */\n commit: readonly BoardMove[];\n}\n\nexport function resolveMove<T>(\n context: ResolveMoveContext<T>,\n request: BoardMoveRequest,\n): ResolvedMove {\n const { items, columns, accessors, validateMove } = context;\n\n if (request.moves.length === 0) {\n return { verdict: { ok: true }, commit: [] };\n }\n\n /* `moves.length > 1` only for `\"bulk\"` per types.ts's own doc on\n `BoardMoveRequest` — enforced here rather than left as an unchecked\n convention, because a caller that forgets to set `source: \"bulk\"` on a\n multi-move request would otherwise silently bypass whatever a consumer's\n telemetry or `validateMove` does to distinguish bulk moves from the\n other three sources. */\n if (request.moves.length > 1 && request.source !== \"bulk\") {\n throw new Error(`resolveMove: a request with ${request.moves.length} moves must use source \"bulk\", got \"${request.source}\"`);\n }\n\n const columnIds = new Set(columns.map((c) => c.id));\n const itemsById = new Map<BoardItemId, T>(items.map((item) => [accessors.getId(item), item]));\n\n const countByColumn = new Map<BoardColumnId, number>();\n for (const item of items) {\n const columnId = accessors.getColumnId(item);\n countByColumn.set(columnId, (countByColumn.get(columnId) ?? 0) + 1);\n }\n\n /* How many of THIS request's moves ACTUALLY leave a given column — the\n count `resolveMove` subtracts from that column's total to get the\n residual size a `to.index` is bounds-checked against. See the file\n header's \"bulk index convention\": every move's target frame excludes\n every item the whole request touches, not just itself.\n\n Built from NON-NO-OP moves only. A no-op (from and to identical) never\n actually leaves its column, so it must not shrink the residual its own\n bulk-mates are bounds-checked against — a real bulk request routinely\n contains a mix (e.g. \"send the checked cards to Done\" where a couple\n are already there), and counting a no-op as \"departing\" its own column\n would make an otherwise-valid sibling move fail bounds-checking for a\n reason that has nothing to do with it. */\n const defsById = new Map(columns.map((def) => [def.id, def]));\n const noOp = (move: BoardMove) =>\n isNoOpMove(move, defsById.get(move.from.columnId), countByColumn.get(move.from.columnId) ?? 0);\n\n const movesSourcedFrom = new Map<BoardColumnId, number>();\n for (const move of request.moves) {\n if (noOp(move)) continue;\n movesSourcedFrom.set(\n move.from.columnId,\n (movesSourcedFrom.get(move.from.columnId) ?? 0) + 1,\n );\n }\n\n const seenItemIds = new Set<BoardItemId>();\n\n for (const move of request.moves) {\n if (seenItemIds.has(move.itemId)) {\n throw new Error(`resolveMove: item \"${move.itemId}\" appears more than once in the same move request`);\n }\n seenItemIds.add(move.itemId);\n\n const item = itemsById.get(move.itemId);\n if (!item) {\n return { verdict: { ok: false, reason: { code: \"unknownItem\", itemId: move.itemId } }, commit: [] };\n }\n\n /* A live update during a drag can remove a column from under the person, so this is a refusal they can\n reach, not a caller's bug. */\n for (const columnId of [move.from.columnId, move.to.columnId]) {\n if (!columnIds.has(columnId)) {\n return { verdict: { ok: false, reason: { code: \"unknownColumn\", columnId } }, commit: [] };\n }\n }\n\n /* The move's OWN claim about where the item currently lives must match\n reality. A stale or fabricated `from.columnId` is precisely the class\n of silent corruption this whole tracker keeps naming — catching it\n here, with a reason, beats discovering it as an orphaned item in next\n render's `unassigned` bucket (model.ts) with no explanation attached. */\n const actualColumnId = accessors.getColumnId(item);\n if (actualColumnId !== move.from.columnId) {\n return {\n verdict: {\n ok: false,\n reason: {\n code: \"wrongColumn\",\n itemId: move.itemId,\n actualColumnId,\n claimedColumnId: move.from.columnId,\n },\n },\n commit: [],\n };\n }\n\n if (!Number.isInteger(move.from.index) || move.from.index < 0) {\n throw new Error(`resolveMove: item \"${move.itemId}\" has an invalid from.index`);\n }\n const fromCount = countByColumn.get(move.from.columnId) ?? 0;\n if (move.from.index >= fromCount) {\n return {\n verdict: {\n ok: false,\n reason: {\n code: \"fromIndexPastEnd\",\n itemId: move.itemId,\n index: move.from.index,\n columnId: move.from.columnId,\n count: fromCount,\n },\n },\n commit: [],\n };\n }\n\n /* DX-4583: a lane move names no position, so there is no index to bound. */\n if (move.to.lane) continue;\n if (!Number.isInteger(move.to.index) || move.to.index < 0) {\n throw new Error(`resolveMove: item \"${move.itemId}\" has an invalid to.index`);\n }\n /* DX-4575: a lane that turned reordering off still sends and receives\n cards; only a move that stays inside it is refused, with the lane's own\n sentence as the reason. Judged on the move's intent, so an edge move\n (menu) and a drag to a new index are refused alike, but a release that\n lands where it started is still the no-op it always was. */\n const lockedMessage = defsById.get(move.from.columnId)?.reorderLocked;\n if (lockedMessage !== undefined && move.from.columnId === move.to.columnId && !noOp(move)) {\n return { verdict: { ok: false, reason: { code: \"consumer\", message: lockedMessage } }, commit: [] };\n }\n\n const toCount = countByColumn.get(move.to.columnId) ?? 0;\n const removedFromTarget = movesSourcedFrom.get(move.to.columnId) ?? 0;\n const maxToIndex = toCount - removedFromTarget;\n if (move.to.index > maxToIndex) {\n return {\n verdict: {\n ok: false,\n reason: {\n code: \"toIndexPastEnd\",\n itemId: move.itemId,\n index: move.to.index,\n columnId: move.to.columnId,\n max: maxToIndex,\n },\n },\n commit: [],\n };\n }\n }\n\n if (validateMove) {\n const verdict = validateMove(request);\n if (!verdict.ok) {\n return { verdict: { ok: false, reason: { code: \"consumer\", message: verdict.reason } }, commit: [] };\n }\n }\n\n const commit = request.moves.filter((move) => !noOp(move));\n\n return { verdict: { ok: true }, commit };\n}\n\n/**\n * Turn a set of already-valid moves into the consumer's next `items` array.\n * Call this with moves already proven valid — typically `resolveMove(...).commit`\n * — never with raw, unvalidated input: this function does no checking of its\n * own, on purpose, so it stays a pure array transform with no notion of\n * \"reject.\" Handles N=1 and N>1 (same-column or cross-column, mixed) with the\n * one algorithm described in the file header.\n *\n * Reorders which COLUMN each item's block appears in within the returned\n * flat array (columns are emitted in first-seen order, any brand-new target\n * column appended after); WITHIN a column, order is always exactly what the\n * moves + original relative order produce. Between-column interleaving in\n * the input `items` array is not preserved because nothing in this module's\n * contract depends on it — `BoardAccessors.getColumnId` is what determines\n * column membership on every subsequent `buildBoardModel` call, and\n * `buildBoardModel` only ever reads WITHIN-column order.\n *\n * A LANE MOVE (`to.lane`, DX-4583) CHANGES MEMBERSHIP AND NOTHING ELSE. The\n * card stays at its place in `items`, so it lands among the destination's cards\n * where the consumer's own order puts it (its priority, its sort key). The\n * consumer's lane write must already be made, because this function cannot make\n * it: a lane move whose item still reports another lane throws, since the card\n * would otherwise stay in its old lane without a sound.\n *\n * `to.edge` IS NOT APPLIED HERE. This arranges the cards it was given, and in a\n * windowed column an edge move lands OUTSIDE the cards that are loaded — at the\n * top or bottom of a list this function cannot see — so the index it would\n * splice at is only the nearest loaded position, not the place the card is\n * going. A consumer of a windowed column sends the move to its server (see\n * `moveAnchor`) and re-reads the affected pages (`invalidateAll`); it does not\n * apply an edge move locally. In a column with every card loaded the edge IS\n * the index, and this function is exactly right.\n *\n * NEVER WRITES A FIELD ON ANY ITEM — ONLY REPOSITIONS. `BoardAccessors` has\n * no setter, on purpose (the file header on `types.ts` — items are opaque),\n * so this function CANNOT change what `getColumnId` reports for a moved\n * item; every returned item is the exact same reference it was given, just\n * possibly in a different slot. For a CROSS-column move this means the\n * repositioning alone does nothing observable until the caller ALSO updates\n * the moved item's own underlying field (a `status`, a `columnId`, whatever\n * the consumer's domain calls it) — that write is the consumer's, entirely\n * outside this module, because only the consumer's own accessor knows how to\n * produce it. The usual order is: update the field(s) first, THEN call this\n * to fix array position — see board-core.test.ts's \"what it does and does\n * not mutate\" tests, which pin both halves of this split.\n */\nexport function applyBoardMoves<T>(\n items: readonly T[],\n accessors: BoardAccessors<T>,\n moves: readonly BoardMove[],\n): T[] {\n if (moves.length === 0) return items.slice();\n\n /* The one-item, same-column case is exactly what `applyMove` computes —\n see the file header. Delegating here both reuses the shared utility\n directly (rather than merely reproducing its arithmetic) and gives the\n equivalence test in board-core.test.ts something concrete to pin. */\n const only = moves[0];\n if (moves.length === 1 && only.from.columnId === only.to.columnId && !only.to.lane) {\n const targetColumnId = only.from.columnId;\n /* Every column's bucket, untouched columns included — `applyMove` only\n ever replaces the ONE bucket it reorders below. Building every bucket\n here (rather than just the touched one) is what stops every other\n column's items from vanishing from the returned array. */\n const byColumn = new Map<BoardColumnId, T[]>();\n for (const item of items) {\n const columnId = accessors.getColumnId(item);\n const bucket = byColumn.get(columnId);\n if (bucket) bucket.push(item);\n else byColumn.set(columnId, [item]);\n }\n const columnItems = byColumn.get(targetColumnId) ?? [];\n byColumn.set(targetColumnId, applyMove(columnItems, only.from.index, only.to.index));\n return flattenByFirstSeenColumn(items, accessors, byColumn);\n }\n\n const itemsById = new Map(items.map((item) => [accessors.getId(item), item]));\n\n /* A lane move (DX-4583) repositions nothing: changing the lane is the\n consumer's own write, made before this call, and the card stays where the\n consumer's order puts it. A card whose lane was NOT written would silently\n stay in its old lane, so that is refused here. Only a move with an index\n takes its card out and inserts it again. */\n for (const move of moves) {\n if (!move.to.lane) continue;\n const item = itemsById.get(move.itemId);\n if (item !== undefined && accessors.getColumnId(item) !== move.to.columnId) {\n throw new Error(\n `applyBoardMoves: \"${move.itemId}\" moves to lane \"${move.to.columnId}\" but its own lane is still ` +\n `\"${accessors.getColumnId(item)}\"; write the lane on the item before applying a lane move.`,\n );\n }\n }\n const positional = moves.filter((m): m is PositionalMove => !m.to.lane);\n const movedIds = new Set(positional.map((m) => m.itemId));\n\n /* The residual per column: every item currently in that column MINUS every\n item this request moves out of it (from ANY source column — including\n ones the item is moving to, since a bulk request can move several items\n into and out of the same column at once). Building this once up front,\n rather than mutating a shared array as each move is \"applied,\" is what\n makes the result independent of the order `moves` happens to list them\n in — see the file header's bulk trap. */\n const residualByColumn = new Map<BoardColumnId, T[]>();\n for (const item of items) {\n const columnId = accessors.getColumnId(item);\n if (movedIds.has(accessors.getId(item))) continue;\n const bucket = residualByColumn.get(columnId);\n if (bucket) bucket.push(item);\n else residualByColumn.set(columnId, [item]);\n }\n\n /* Group incoming moves by target column, sorted by `to.index` ascending\n with a stable tie-break on original request order — the exact rule the\n file header spells out for why insertion is a single deterministic pass\n rather than N independent splices. */\n const incomingByColumn = new Map<BoardColumnId, { move: PositionalMove; requestOrder: number }[]>();\n positional.forEach((move, requestOrder) => {\n const list = incomingByColumn.get(move.to.columnId);\n const entry = { move, requestOrder };\n if (list) list.push(entry);\n else incomingByColumn.set(move.to.columnId, [entry]);\n });\n\n for (const [columnId, incoming] of incomingByColumn) {\n incoming.sort((a, b) => a.move.to.index - b.move.to.index || a.requestOrder - b.requestOrder);\n const base = residualByColumn.get(columnId) ?? [];\n incoming.forEach(({ move }, insertedSoFar) => {\n const item = itemsById.get(move.itemId);\n if (!item) return; // pre-validated input; defensive only, never expected.\n base.splice(move.to.index + insertedSoFar, 0, item);\n });\n residualByColumn.set(columnId, base);\n }\n\n return flattenByFirstSeenColumn(items, accessors, residualByColumn);\n}\n\n/** Concatenate every column's items, in the order columns first appear in\n * `original` — see `applyBoardMoves`'s doc for why between-column\n * interleaving is not preserved but within-column order always is. */\nfunction flattenByFirstSeenColumn<T>(\n original: readonly T[],\n accessors: BoardAccessors<T>,\n byColumn: ReadonlyMap<BoardColumnId, T[]>,\n): T[] {\n const order: BoardColumnId[] = [];\n const seen = new Set<BoardColumnId>();\n for (const item of original) {\n const columnId = accessors.getColumnId(item);\n if (byColumn.has(columnId) && !seen.has(columnId)) {\n seen.add(columnId);\n order.push(columnId);\n }\n }\n for (const columnId of byColumn.keys()) {\n if (!seen.has(columnId)) {\n seen.add(columnId);\n order.push(columnId);\n }\n }\n return order.flatMap((columnId) => byColumn.get(columnId) ?? []);\n}\n"],"names":["isNoOpMove","move","def","loaded","from","to","isNoOp","position","positionInColumn","columnLength","resolveMove","context","request","items","columns","accessors","validateMove","columnIds","c","itemsById","item","countByColumn","columnId","defsById","noOp","movesSourcedFrom","seenItemIds","actualColumnId","fromCount","lockedMessage","toCount","removedFromTarget","maxToIndex","verdict","commit","applyBoardMoves","moves","only","targetColumnId","byColumn","bucket","columnItems","applyMove","flattenByFirstSeenColumn","positional","m","movedIds","residualByColumn","incomingByColumn","requestOrder","list","entry","incoming","a","b","base","insertedSoFar","original","order","seen"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ function o(t, n) {
2
+ return typeof t?.total == "number" ? t.total : n;
3
+ }
4
+ function u(t, n) {
5
+ return (t?.offset ?? 0) + n;
6
+ }
7
+ export {
8
+ o as columnLength,
9
+ u as positionInColumn
10
+ };
11
+ //# sourceMappingURL=position.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"position.js","sources":["../../../src/lib/board/position.ts"],"sourcesContent":["/**\n * ==== COLUMN POSITION ====\n *\n * Two facts about a column that three callers each need and must not each work\n * out for themselves (DX-4540): how long the column really is, and where in the\n * whole column a loaded card sits. A windowed column holds only a few pages of\n * a longer list, so the cards loaded are not the column.\n *\n * `buildBoardModel` decides the length once (the model's `count`); `resolveMove`\n * works from the column DEFINITIONS before any model exists and must decide\n * \"is this card already at that edge\" with the same rule; and the move menu\n * decides what to offer from a card's place in the column. All three read these.\n */\n\nimport type { BoardColumnDef } from \"./types\";\n\n/**\n * The column's length: its `total` when the definition gave a number, otherwise\n * the cards loaded (`total` absent means every card is loaded; `null` means the\n * length is still being read, so the loaded cards are all that is known).\n */\nexport function columnLength(def: Pick<BoardColumnDef, \"total\"> | undefined, loaded: number): number {\n return typeof def?.total === \"number\" ? def.total : loaded;\n}\n\n/** The place in the whole column of the loaded card at `index`: the window's offset plus the index. */\nexport function positionInColumn(def: Pick<BoardColumnDef, \"offset\"> | undefined, index: number): number {\n return (def?.offset ?? 0) + index;\n}\n"],"names":["columnLength","def","loaded","positionInColumn","index"],"mappings":"AAqBO,SAASA,EAAaC,GAAgDC,GAAwB;AACnG,SAAO,OAAOD,GAAK,SAAU,WAAWA,EAAI,QAAQC;AACtD;AAGO,SAASC,EAAiBF,GAAiDG,GAAuB;AACvG,UAAQH,GAAK,UAAU,KAAKG;AAC9B;"}
@@ -0,0 +1,22 @@
1
+ import { numberFormat as e } from "../intl-cache.js";
2
+ function i(t, u, n) {
3
+ const m = (d) => e(u, {}).format(d);
4
+ switch (n.code) {
5
+ case "unknownItem":
6
+ return t.unknownItem(String(n.itemId));
7
+ case "wrongColumn":
8
+ return t.wrongColumn(String(n.itemId), String(n.actualColumnId), String(n.claimedColumnId));
9
+ case "unknownColumn":
10
+ return t.unknownColumn(String(n.columnId));
11
+ case "fromIndexPastEnd":
12
+ return t.fromIndexPastEnd(n.count, m(n.count), String(n.itemId), m(n.index), String(n.columnId));
13
+ case "toIndexPastEnd":
14
+ return t.toIndexPastEnd(String(n.itemId), m(n.index), String(n.columnId), m(n.max));
15
+ case "consumer":
16
+ return n.message;
17
+ }
18
+ }
19
+ export {
20
+ i as describeMoveRejection
21
+ };
22
+ //# sourceMappingURL=rejection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rejection.js","sources":["../../../src/lib/board/rejection.ts"],"sourcesContent":["import { numberFormat } from \"../intl-cache\";\nimport type { UiStrings } from \"../i18n\";\nimport type { BoardMoveRejection } from \"./types\";\n\n/**\n * DX-4740: the sentence a person reads for a refused move. The core answers with values\n * (`BoardMoveRejection`); the provider's `moveRejected` strings word them. A consumer's own\n * sentence passes through untouched.\n */\nexport function describeMoveRejection(\n strings: UiStrings[\"moveRejected\"],\n locale: string,\n reason: BoardMoveRejection,\n): string {\n const n = (value: number) => numberFormat(locale, {}).format(value);\n switch (reason.code) {\n case \"unknownItem\":\n return strings.unknownItem(String(reason.itemId));\n case \"wrongColumn\":\n return strings.wrongColumn(String(reason.itemId), String(reason.actualColumnId), String(reason.claimedColumnId));\n case \"unknownColumn\":\n return strings.unknownColumn(String(reason.columnId));\n case \"fromIndexPastEnd\":\n return strings.fromIndexPastEnd(reason.count, n(reason.count), String(reason.itemId), n(reason.index), String(reason.columnId));\n case \"toIndexPastEnd\":\n return strings.toIndexPastEnd(String(reason.itemId), n(reason.index), String(reason.columnId), n(reason.max));\n case \"consumer\":\n return reason.message;\n }\n}\n"],"names":["describeMoveRejection","strings","locale","reason","n","value","numberFormat"],"mappings":";AASO,SAASA,EACdC,GACAC,GACAC,GACQ;AACR,QAAMC,IAAI,CAACC,MAAkBC,EAAaJ,GAAQ,EAAE,EAAE,OAAOG,CAAK;AAClE,UAAQF,EAAO,MAAA;AAAA,IACb,KAAK;AACH,aAAOF,EAAQ,YAAY,OAAOE,EAAO,MAAM,CAAC;AAAA,IAClD,KAAK;AACH,aAAOF,EAAQ,YAAY,OAAOE,EAAO,MAAM,GAAG,OAAOA,EAAO,cAAc,GAAG,OAAOA,EAAO,eAAe,CAAC;AAAA,IACjH,KAAK;AACH,aAAOF,EAAQ,cAAc,OAAOE,EAAO,QAAQ,CAAC;AAAA,IACtD,KAAK;AACH,aAAOF,EAAQ,iBAAiBE,EAAO,OAAOC,EAAED,EAAO,KAAK,GAAG,OAAOA,EAAO,MAAM,GAAGC,EAAED,EAAO,KAAK,GAAG,OAAOA,EAAO,QAAQ,CAAC;AAAA,IAChI,KAAK;AACH,aAAOF,EAAQ,eAAe,OAAOE,EAAO,MAAM,GAAGC,EAAED,EAAO,KAAK,GAAG,OAAOA,EAAO,QAAQ,GAAGC,EAAED,EAAO,GAAG,CAAC;AAAA,IAC9G,KAAK;AACH,aAAOA,EAAO;AAAA,EAAA;AAEpB;"}
@@ -0,0 +1,43 @@
1
+ import { useMemo as p, useCallback as l } from "react";
2
+ import { buildBoardModel as C } from "./model.js";
3
+ import { resolveMove as E } from "./move.js";
4
+ const b = [];
5
+ function I(a) {
6
+ const { items: n, columns: c, accessors: r, validateMove: i, onMove: m, selection: u } = a, d = p(
7
+ () => C(n, c, r),
8
+ [n, c, r]
9
+ ), v = l(
10
+ (t) => {
11
+ const s = E({ items: n, columns: c, accessors: r, validateMove: i }, t);
12
+ return s.verdict.ok && s.commit.length > 0 && m({ moves: s.commit, source: t.source }), s.verdict;
13
+ },
14
+ [n, c, r, i, m]
15
+ ), e = u?.selected, o = u?.onChange, f = e ?? b, g = l(
16
+ (t) => {
17
+ o?.(t);
18
+ },
19
+ [o]
20
+ ), M = l(
21
+ (t) => {
22
+ if (!o || !e) return;
23
+ const s = e.includes(t) ? e.filter((h) => h !== t) : [...e, t];
24
+ o(s);
25
+ },
26
+ [e, o]
27
+ ), S = l(() => {
28
+ !o || !e || e.length === 0 || o([]);
29
+ }, [e, o]);
30
+ return {
31
+ columns: d.columns,
32
+ unassigned: d.unassigned,
33
+ selected: f,
34
+ toggleSelected: M,
35
+ setSelected: g,
36
+ clearSelection: S,
37
+ requestMove: v
38
+ };
39
+ }
40
+ export {
41
+ I as useBoard
42
+ };
43
+ //# sourceMappingURL=use-board.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-board.js","sources":["../../../src/lib/board/use-board.ts"],"sourcesContent":["/**\n * ==== USE BOARD ====\n *\n * The React binding over the two pure modules. Deliberately thin: every claim\n * this hook makes has already been proven in model.ts and move.ts without a\n * browser, so the only thing left for React-specific code to get wrong is\n * memoisation and the selection wiring — logic that lived INSIDE a hook\n * instead of a pure function would be logic no test in board-core.test.ts\n * could reach without mounting a component. `renderHook` here exists only to\n * prove the composition wires up, not to re-prove validation or bulk\n * atomicity, which are already pinned in the pure-module tests.\n *\n * `requestMove` IS THE SINGLE FUNNEL. Pointer drag's `onDragEnd`, a keyboard\n * handler, the mandatory \"Move to…\" menu (WCAG 2.5.7 — see `types.ts`), and a\n * bulk-selection action all construct a `BoardMoveRequest` and call this ONE\n * function. It never mutates `items` itself — `UseBoardOptions.onMove` returns\n * `void` by contract, so the actual next `items` array is the CONSUMER's to\n * produce, typically via `applyBoardMoves` from `./move`. `requestMove` only\n * decides whether that consumer callback fires at all, and returns the verdict\n * synchronously so the caller (e.g. the menu) can show a rejection reason\n * immediately rather than guessing from a UI that just didn't change.\n *\n * SELECTION IS FULLY CONTROLLED, NOT A SECOND SOURCE OF TRUTH. `selection` on\n * `UseBoardOptions` supplies BOTH `selected` and `onChange` — this hook never\n * keeps its own copy of which ids are selected, for the same reason `items`\n * is never copied: a second copy is a copy that can drift. What this hook\n * \"owns\" is the BEHAVIOUR built on top of that controlled pair (toggle one,\n * replace the set, clear) so every input source computes a selection change\n * the same way, mirroring why `requestMove` exists as a single funnel for\n * moves rather than one per source.\n */\n\nimport { useCallback, useMemo } from \"react\";\nimport { buildBoardModel } from \"./model\";\nimport { resolveMove } from \"./move\";\nimport type {\n BoardColumnModel,\n BoardItemId,\n BoardMoveRequest,\n BoardMoveOutcome,\n UseBoardOptions,\n} from \"./types\";\n\n/** Stable reference so a board with no `selection` option doesn't hand back a\n * new empty array — and therefore a new `selected` identity — every render. */\nconst EMPTY_SELECTION: readonly BoardItemId[] = [];\n\nexport interface UseBoardResult<T> {\n /** One entry per declared column, in `columns` order, ready to render. */\n columns: readonly BoardColumnModel<T>[];\n /** Items whose `getColumnId` matched no declared column. See model.ts. */\n unassigned: readonly T[];\n /** The current controlled selection, or `[]` when `selection` was not supplied. */\n selected: readonly BoardItemId[];\n /** No-ops when `selection` was not supplied — see the file header. */\n toggleSelected: (id: BoardItemId) => void;\n setSelected: (ids: readonly BoardItemId[]) => void;\n clearSelection: () => void;\n /** The single funnel every input source calls. See the file header. */\n requestMove: (request: BoardMoveRequest) => BoardMoveOutcome;\n}\n\nexport function useBoard<T>(options: UseBoardOptions<T>): UseBoardResult<T> {\n const { items, columns, accessors, validateMove, onMove, selection } = options;\n\n const model = useMemo(\n () => buildBoardModel(items, columns, accessors),\n [items, columns, accessors],\n );\n\n const requestMove = useCallback(\n (request: BoardMoveRequest): BoardMoveOutcome => {\n const resolved = resolveMove({ items, columns, accessors, validateMove }, request);\n /* `onMove` fires only for a request that is both valid AND leaves at\n least one real change — see move.ts's header for why those are\n checked as two separate questions. A verdict of `ok:true` with an\n empty `commit` (every move was a no-op) must not reach the consumer\n as a write. */\n if (resolved.verdict.ok && resolved.commit.length > 0) {\n onMove({ moves: resolved.commit, source: request.source });\n }\n return resolved.verdict;\n },\n [items, columns, accessors, validateMove, onMove],\n );\n\n /* DEPEND ON THE VALUES, NEVER ON THE `selection` OBJECT — the same rule\n `DragDrop.tsx` states for its `autoScroll` options, and for the same\n reason: `selection` is written inline by every realistic consumer\n (`selection={{ selected, onChange }}`), so a dependency on its IDENTITY\n changes on every render. There the cost was tearing down the auto-scroll\n loop mid-gesture; here it is quieter and therefore easier to ship — all\n three callbacks below get a new identity every render, so every memoised\n card receiving one re-renders, on a board the domain analysis says runs to\n hundreds of cards. Destructuring first makes the deps the actual array and\n the actual function, which a consumer CAN hold stable. */\n const selectedItems = selection?.selected;\n const onSelectionChange = selection?.onChange;\n const selected = selectedItems ?? EMPTY_SELECTION;\n\n const setSelected = useCallback(\n (ids: readonly BoardItemId[]) => {\n onSelectionChange?.(ids);\n },\n [onSelectionChange],\n );\n\n const toggleSelected = useCallback(\n (id: BoardItemId) => {\n if (!onSelectionChange || !selectedItems) return;\n const next = selectedItems.includes(id)\n ? selectedItems.filter((existing) => existing !== id)\n : [...selectedItems, id];\n onSelectionChange(next);\n },\n [selectedItems, onSelectionChange],\n );\n\n const clearSelection = useCallback(() => {\n /* Mirrors move.ts's no-op discipline: clearing an already-empty selection\n writes nothing rather than firing `onChange([])` for no reason. */\n if (!onSelectionChange || !selectedItems || selectedItems.length === 0) return;\n onSelectionChange([]);\n }, [selectedItems, onSelectionChange]);\n\n return {\n columns: model.columns,\n unassigned: model.unassigned,\n selected,\n toggleSelected,\n setSelected,\n clearSelection,\n requestMove,\n };\n}\n"],"names":["EMPTY_SELECTION","useBoard","options","items","columns","accessors","validateMove","onMove","selection","model","useMemo","buildBoardModel","requestMove","useCallback","request","resolved","resolveMove","selectedItems","onSelectionChange","selected","setSelected","ids","toggleSelected","id","next","existing","clearSelection"],"mappings":";;;AA6CA,MAAMA,IAA0C,CAAA;AAiBzC,SAASC,EAAYC,GAAgD;AAC1E,QAAM,EAAE,OAAAC,GAAO,SAAAC,GAAS,WAAAC,GAAW,cAAAC,GAAc,QAAAC,GAAQ,WAAAC,MAAcN,GAEjEO,IAAQC;AAAA,IACZ,MAAMC,EAAgBR,GAAOC,GAASC,CAAS;AAAA,IAC/C,CAACF,GAAOC,GAASC,CAAS;AAAA,EAAA,GAGtBO,IAAcC;AAAA,IAClB,CAACC,MAAgD;AAC/C,YAAMC,IAAWC,EAAY,EAAE,OAAAb,GAAO,SAAAC,GAAS,WAAAC,GAAW,cAAAC,EAAA,GAAgBQ,CAAO;AAMjF,aAAIC,EAAS,QAAQ,MAAMA,EAAS,OAAO,SAAS,KAClDR,EAAO,EAAE,OAAOQ,EAAS,QAAQ,QAAQD,EAAQ,QAAQ,GAEpDC,EAAS;AAAA,IAClB;AAAA,IACA,CAACZ,GAAOC,GAASC,GAAWC,GAAcC,CAAM;AAAA,EAAA,GAa5CU,IAAgBT,GAAW,UAC3BU,IAAoBV,GAAW,UAC/BW,IAAWF,KAAiBjB,GAE5BoB,IAAcP;AAAA,IAClB,CAACQ,MAAgC;AAC/B,MAAAH,IAAoBG,CAAG;AAAA,IACzB;AAAA,IACA,CAACH,CAAiB;AAAA,EAAA,GAGdI,IAAiBT;AAAA,IACrB,CAACU,MAAoB;AACnB,UAAI,CAACL,KAAqB,CAACD,EAAe;AAC1C,YAAMO,IAAOP,EAAc,SAASM,CAAE,IAClCN,EAAc,OAAO,CAACQ,MAAaA,MAAaF,CAAE,IAClD,CAAC,GAAGN,GAAeM,CAAE;AACzB,MAAAL,EAAkBM,CAAI;AAAA,IACxB;AAAA,IACA,CAACP,GAAeC,CAAiB;AAAA,EAAA,GAG7BQ,IAAiBb,EAAY,MAAM;AAGvC,IAAI,CAACK,KAAqB,CAACD,KAAiBA,EAAc,WAAW,KACrEC,EAAkB,CAAA,CAAE;AAAA,EACtB,GAAG,CAACD,GAAeC,CAAiB,CAAC;AAErC,SAAO;AAAA,IACL,SAAST,EAAM;AAAA,IACf,YAAYA,EAAM;AAAA,IAClB,UAAAU;AAAA,IACA,gBAAAG;AAAA,IACA,aAAAF;AAAA,IACA,gBAAAM;AAAA,IACA,aAAAd;AAAA,EAAA;AAEJ;"}
@@ -0,0 +1,44 @@
1
+ function h(n, r) {
2
+ const e = (n.priority ?? 0) - (r.priority ?? 0);
3
+ if (e !== 0) return e;
4
+ const s = r.endColumn - r.startColumn - (n.endColumn - n.startColumn);
5
+ return s !== 0 ? s : n.startColumn !== r.startColumn ? n.startColumn - r.startColumn : n.key < r.key ? -1 : n.key > r.key ? 1 : 0;
6
+ }
7
+ function k(n, r) {
8
+ const { columns: e, maxRows: s } = r, p = [...n].sort(h), l = [], u = [];
9
+ for (const t of p) {
10
+ const c = Math.max(0, t.startColumn), f = Math.min(e - 1, t.endColumn);
11
+ if (f < c) continue;
12
+ let o = 0;
13
+ for (; ; ) {
14
+ l[o] || (l[o] = new Array(e).fill(!1));
15
+ let i = !0;
16
+ for (let m = c; m <= f; m++)
17
+ if (l[o][m]) {
18
+ i = !1;
19
+ break;
20
+ }
21
+ if (i) break;
22
+ o++;
23
+ }
24
+ for (let i = c; i <= f; i++) l[o][i] = !0;
25
+ u.push({ ...t, row: o });
26
+ }
27
+ if (s === void 0)
28
+ return {
29
+ placed: u,
30
+ hidden: [],
31
+ overflow: new Array(e).fill(0),
32
+ rows: l.length
33
+ };
34
+ const d = l.length, a = d > s ? Math.max(0, s - 1) : d, y = u.filter((t) => t.row < a), w = u.filter((t) => t.row >= a), C = new Array(e).fill(0);
35
+ for (const t of w) {
36
+ const c = Math.max(0, t.startColumn), f = Math.min(e - 1, t.endColumn);
37
+ for (let o = c; o <= f; o++) C[o]++;
38
+ }
39
+ return { placed: y, hidden: w, overflow: C, rows: a };
40
+ }
41
+ export {
42
+ k as packBand
43
+ };
44
+ //# sourceMappingURL=band-packer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"band-packer.js","sources":["../../../src/lib/calendar/band-packer.ts"],"sourcesContent":["/* ============================================================================\n THE BAND PACKER — greedy first-fit rows for items that span COLUMNS.\n\n ONE PACKER SERVES BOTH THE MONTH ROW AND THE ALL-DAY BAND, deliberately.\n FullCalendar literally embeds a dayGrid row inside its timeGrid to get this,\n which is the same conclusion by a heavier route. Two implementations of one\n idea means two bug sets, and they will not be the same two.\n\n THE RULE THAT MAKES MULTI-DAY EVENTS WORK: rows are assigned across the WHOLE\n ROW-SEGMENT, and hiding is by row index, uniformly. Per-CELL decisions are\n exactly why a multi-day event truncated on day 1 vanishes from days 2-5 in\n react-big-calendar — three open issues. An item is shown across its entire\n span or hidden across its entire span; there is no state in between.\n ========================================================================= */\n\n/** A contiguous run of columns within one row of the grid. Both ends inclusive. */\nexport interface BandInput {\n readonly key: string;\n readonly startColumn: number;\n readonly endColumn: number;\n /**\n * Ordering weight. Lower sorts earlier, so pinned items keep their place as\n * neighbours come and go. Ties fall through to span length, then key.\n */\n readonly priority?: number;\n}\n\nexport interface BandPlacement extends BandInput {\n /** 0-based row within the band. */\n readonly row: number;\n}\n\nexport interface BandResult {\n /** Everything that fits, in row order. */\n readonly placed: readonly BandPlacement[];\n /** Everything pushed past the limit, in the same order it would have had. */\n readonly hidden: readonly BandInput[];\n /** Per column, how many hidden items cover it — the \"+N more\" count. */\n readonly overflow: readonly number[];\n /** Rows actually used by `placed`. */\n readonly rows: number;\n}\n\nexport interface BandOptions {\n /** How many columns the row has. Required — it sizes the overflow tally. */\n readonly columns: number;\n /**\n * Most rows the band may occupy, INCLUDING the row the \"+N more\" affordance\n * takes.\n *\n * Counting the affordance is what stops the classic off-by-one where the\n * overflow link is drawn on top of the last event. When items do not fit,\n * events get `maxRows - 1` rows and the last is reserved — which is\n * FullCalendar's `dayMaxEventRows` semantics, and the only version that\n * leaves room for the thing it just decided to draw.\n *\n * Omit for no limit. The all-day band MUST pass one: an uncapped band eats\n * the container and makes the time grid unreachable — an open FullCalendar\n * bug, and react-big-calendar's default is literally `Infinity`.\n */\n readonly maxRows?: number;\n}\n\nfunction compare(a: BandInput, b: BandInput): number {\n const priority = (a.priority ?? 0) - (b.priority ?? 0);\n if (priority !== 0) return priority;\n /* Longer spans first: a bar crossing the whole week claims a row before the\n single-day items that can slot around it. The reverse leaves the long bar\n hunting for a row with a gap in exactly the right place. */\n const bySpan = b.endColumn - b.startColumn - (a.endColumn - a.startColumn);\n if (bySpan !== 0) return bySpan;\n if (a.startColumn !== b.startColumn) return a.startColumn - b.startColumn;\n /* Total order — see the same note in `lane-packer.ts`. Without the key, the\n same events in a different array order produce a different layout. */\n return a.key < b.key ? -1 : a.key > b.key ? 1 : 0;\n}\n\n/**\n * Assign each item the first row where every column it covers is free.\n *\n * Greedy first-fit. Not optimal in the sense of minimising rows — that is\n * NP-hard and nobody wants it anyway, because the optimal packing reshuffles\n * every event's row whenever one is added, and a calendar whose events jump\n * rows as you type is worse than one that uses an extra row.\n */\nexport function packBand(inputs: readonly BandInput[], options: BandOptions): BandResult {\n const { columns, maxRows } = options;\n const sorted = [...inputs].sort(compare);\n\n /* One occupancy bitmap per row, indexed by column. */\n const occupied: boolean[][] = [];\n const assigned: BandPlacement[] = [];\n\n for (const item of sorted) {\n const from = Math.max(0, item.startColumn);\n const to = Math.min(columns - 1, item.endColumn);\n /* An item entirely outside the row contributes nothing — it belongs to a\n different row-segment and will be placed there. */\n if (to < from) continue;\n\n let row = 0;\n for (;;) {\n if (!occupied[row]) occupied[row] = new Array<boolean>(columns).fill(false);\n let free = true;\n for (let c = from; c <= to; c++) {\n if (occupied[row][c]) {\n free = false;\n break;\n }\n }\n if (free) break;\n row++;\n }\n for (let c = from; c <= to; c++) occupied[row][c] = true;\n assigned.push({ ...item, row });\n }\n\n if (maxRows === undefined) {\n return {\n placed: assigned,\n hidden: [],\n overflow: new Array<number>(columns).fill(0),\n rows: occupied.length,\n };\n }\n\n const needed = occupied.length;\n /* Only reserve a row for the affordance when something is actually going to\n overflow. Reserving unconditionally throws away a usable row on every\n ordinary week. */\n const visibleRows = needed > maxRows ? Math.max(0, maxRows - 1) : needed;\n\n const placed = assigned.filter((item) => item.row < visibleRows);\n const hidden = assigned.filter((item) => item.row >= visibleRows);\n\n const overflow = new Array<number>(columns).fill(0);\n for (const item of hidden) {\n const from = Math.max(0, item.startColumn);\n const to = Math.min(columns - 1, item.endColumn);\n /* Counted per COLUMN, because \"+2 more\" is a statement about one day's\n cell — but decided per ITEM above, so a hidden multi-day bar is hidden on\n every day it covers rather than dropping out of some of them. */\n for (let c = from; c <= to; c++) overflow[c]++;\n }\n\n return { placed, hidden, overflow, rows: visibleRows };\n}\n"],"names":["compare","a","b","priority","bySpan","packBand","inputs","options","columns","maxRows","sorted","occupied","assigned","item","from","to","row","free","c","needed","visibleRows","placed","hidden","overflow"],"mappings":"AA+DA,SAASA,EAAQC,GAAcC,GAAsB;AACnD,QAAMC,KAAYF,EAAE,YAAY,MAAMC,EAAE,YAAY;AACpD,MAAIC,MAAa,EAAG,QAAOA;AAI3B,QAAMC,IAASF,EAAE,YAAYA,EAAE,eAAeD,EAAE,YAAYA,EAAE;AAC9D,SAAIG,MAAW,IAAUA,IACrBH,EAAE,gBAAgBC,EAAE,cAAoBD,EAAE,cAAcC,EAAE,cAGvDD,EAAE,MAAMC,EAAE,MAAM,KAAKD,EAAE,MAAMC,EAAE,MAAM,IAAI;AAClD;AAUO,SAASG,EAASC,GAA8BC,GAAkC;AACvF,QAAM,EAAE,SAAAC,GAAS,SAAAC,EAAA,IAAYF,GACvBG,IAAS,CAAC,GAAGJ,CAAM,EAAE,KAAKN,CAAO,GAGjCW,IAAwB,CAAA,GACxBC,IAA4B,CAAA;AAElC,aAAWC,KAAQH,GAAQ;AACzB,UAAMI,IAAO,KAAK,IAAI,GAAGD,EAAK,WAAW,GACnCE,IAAK,KAAK,IAAIP,IAAU,GAAGK,EAAK,SAAS;AAG/C,QAAIE,IAAKD,EAAM;AAEf,QAAIE,IAAM;AACV,eAAS;AACP,MAAKL,EAASK,CAAG,MAAGL,EAASK,CAAG,IAAI,IAAI,MAAeR,CAAO,EAAE,KAAK,EAAK;AAC1E,UAAIS,IAAO;AACX,eAASC,IAAIJ,GAAMI,KAAKH,GAAIG;AAC1B,YAAIP,EAASK,CAAG,EAAEE,CAAC,GAAG;AACpB,UAAAD,IAAO;AACP;AAAA,QACF;AAEF,UAAIA,EAAM;AACV,MAAAD;AAAA,IACF;AACA,aAASE,IAAIJ,GAAMI,KAAKH,GAAIG,IAAK,CAAAP,EAASK,CAAG,EAAEE,CAAC,IAAI;AACpD,IAAAN,EAAS,KAAK,EAAE,GAAGC,GAAM,KAAAG,GAAK;AAAA,EAChC;AAEA,MAAIP,MAAY;AACd,WAAO;AAAA,MACL,QAAQG;AAAA,MACR,QAAQ,CAAA;AAAA,MACR,UAAU,IAAI,MAAcJ,CAAO,EAAE,KAAK,CAAC;AAAA,MAC3C,MAAMG,EAAS;AAAA,IAAA;AAInB,QAAMQ,IAASR,EAAS,QAIlBS,IAAcD,IAASV,IAAU,KAAK,IAAI,GAAGA,IAAU,CAAC,IAAIU,GAE5DE,IAAST,EAAS,OAAO,CAACC,MAASA,EAAK,MAAMO,CAAW,GACzDE,IAASV,EAAS,OAAO,CAACC,MAASA,EAAK,OAAOO,CAAW,GAE1DG,IAAW,IAAI,MAAcf,CAAO,EAAE,KAAK,CAAC;AAClD,aAAWK,KAAQS,GAAQ;AACzB,UAAMR,IAAO,KAAK,IAAI,GAAGD,EAAK,WAAW,GACnCE,IAAK,KAAK,IAAIP,IAAU,GAAGK,EAAK,SAAS;AAI/C,aAASK,IAAIJ,GAAMI,KAAKH,GAAIG,OAAcA,CAAC;AAAA,EAC7C;AAEA,SAAO,EAAE,QAAAG,GAAQ,QAAAC,GAAQ,UAAAC,GAAU,MAAMH,EAAA;AAC3C;"}