@50arms/ui 0.0.0-stage → 35.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1256) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +193 -2
  3. package/dist/components/Accordion.js +68 -0
  4. package/dist/components/Accordion.js.map +1 -0
  5. package/dist/components/AgentWorkingSpinner.js +46 -0
  6. package/dist/components/AgentWorkingSpinner.js.map +1 -0
  7. package/dist/components/AppShell.js +228 -0
  8. package/dist/components/AppShell.js.map +1 -0
  9. package/dist/components/Attention.js +130 -0
  10. package/dist/components/Attention.js.map +1 -0
  11. package/dist/components/Avatar.js +99 -0
  12. package/dist/components/Avatar.js.map +1 -0
  13. package/dist/components/Badge.js +143 -0
  14. package/dist/components/Badge.js.map +1 -0
  15. package/dist/components/Board.js +292 -0
  16. package/dist/components/Board.js.map +1 -0
  17. package/dist/components/Button.js +327 -0
  18. package/dist/components/Button.js.map +1 -0
  19. package/dist/components/Callout.js +106 -0
  20. package/dist/components/Callout.js.map +1 -0
  21. package/dist/components/Card.js +140 -0
  22. package/dist/components/Card.js.map +1 -0
  23. package/dist/components/Choice.js +361 -0
  24. package/dist/components/Choice.js.map +1 -0
  25. package/dist/components/CodeEditor.js +384 -0
  26. package/dist/components/CodeEditor.js.map +1 -0
  27. package/dist/components/ColorPicker.js +174 -0
  28. package/dist/components/ColorPicker.js.map +1 -0
  29. package/dist/components/Combobox.js +212 -0
  30. package/dist/components/Combobox.js.map +1 -0
  31. package/dist/components/CommandPalette.js +163 -0
  32. package/dist/components/CommandPalette.js.map +1 -0
  33. package/dist/components/ConcentricRing.js +60 -0
  34. package/dist/components/ConcentricRing.js.map +1 -0
  35. package/dist/components/ConnectionCard.js +98 -0
  36. package/dist/components/ConnectionCard.js.map +1 -0
  37. package/dist/components/ContextItemRow.js +49 -0
  38. package/dist/components/ContextItemRow.js.map +1 -0
  39. package/dist/components/CopyValue.js +57 -0
  40. package/dist/components/CopyValue.js.map +1 -0
  41. package/dist/components/CountBadge.js +26 -0
  42. package/dist/components/CountBadge.js.map +1 -0
  43. package/dist/components/DateCalendar.js +156 -0
  44. package/dist/components/DateCalendar.js.map +1 -0
  45. package/dist/components/DateField.js +166 -0
  46. package/dist/components/DateField.js.map +1 -0
  47. package/dist/components/DatePicker.js +56 -0
  48. package/dist/components/DatePicker.js.map +1 -0
  49. package/dist/components/DateTimeText.js +19 -0
  50. package/dist/components/DateTimeText.js.map +1 -0
  51. package/dist/components/DescriptionList.js +25 -0
  52. package/dist/components/DescriptionList.js.map +1 -0
  53. package/dist/components/Dialog.js +332 -0
  54. package/dist/components/Dialog.js.map +1 -0
  55. package/dist/components/DragDrop.js +395 -0
  56. package/dist/components/DragDrop.js.map +1 -0
  57. package/dist/components/Drawer.js +100 -0
  58. package/dist/components/Drawer.js.map +1 -0
  59. package/dist/components/EditGutter.js +110 -0
  60. package/dist/components/EditGutter.js.map +1 -0
  61. package/dist/components/EmojiPicker.js +174 -0
  62. package/dist/components/EmojiPicker.js.map +1 -0
  63. package/dist/components/ErrorBoundary.js +47 -0
  64. package/dist/components/ErrorBoundary.js.map +1 -0
  65. package/dist/components/Field.js +115 -0
  66. package/dist/components/Field.js.map +1 -0
  67. package/dist/components/FileUpload.js +128 -0
  68. package/dist/components/FileUpload.js.map +1 -0
  69. package/dist/components/FilterMenu.js +256 -0
  70. package/dist/components/FilterMenu.js.map +1 -0
  71. package/dist/components/GatesSection.js +79 -0
  72. package/dist/components/GatesSection.js.map +1 -0
  73. package/dist/components/Icon.js +50 -0
  74. package/dist/components/Icon.js.map +1 -0
  75. package/dist/components/IconButton.js +59 -0
  76. package/dist/components/IconButton.js.map +1 -0
  77. package/dist/components/IconStack.js +69 -0
  78. package/dist/components/IconStack.js.map +1 -0
  79. package/dist/components/ImageUploadField.js +146 -0
  80. package/dist/components/ImageUploadField.js.map +1 -0
  81. package/dist/components/InlineEdit.js +432 -0
  82. package/dist/components/InlineEdit.js.map +1 -0
  83. package/dist/components/InlineMarkdownEdit.js +184 -0
  84. package/dist/components/InlineMarkdownEdit.js.map +1 -0
  85. package/dist/components/Input.js +156 -0
  86. package/dist/components/Input.js.map +1 -0
  87. package/dist/components/LegalDocument.js +155 -0
  88. package/dist/components/LegalDocument.js.map +1 -0
  89. package/dist/components/LineDiff.js +95 -0
  90. package/dist/components/LineDiff.js.map +1 -0
  91. package/dist/components/ListHeader.js +72 -0
  92. package/dist/components/ListHeader.js.map +1 -0
  93. package/dist/components/Loading.js +111 -0
  94. package/dist/components/Loading.js.map +1 -0
  95. package/dist/components/Markdown.js +28 -0
  96. package/dist/components/Markdown.js.map +1 -0
  97. package/dist/components/MarkdownEditor.js +467 -0
  98. package/dist/components/MarkdownEditor.js.map +1 -0
  99. package/dist/components/Menu.js +185 -0
  100. package/dist/components/Menu.js.map +1 -0
  101. package/dist/components/Navigation.js +87 -0
  102. package/dist/components/Navigation.js.map +1 -0
  103. package/dist/components/NumberInput.js +119 -0
  104. package/dist/components/NumberInput.js.map +1 -0
  105. package/dist/components/OTPInput.js +71 -0
  106. package/dist/components/OTPInput.js.map +1 -0
  107. package/dist/components/OrderedEntityManager.js +170 -0
  108. package/dist/components/OrderedEntityManager.js.map +1 -0
  109. package/dist/components/PagedWindowList.js +74 -0
  110. package/dist/components/PagedWindowList.js.map +1 -0
  111. package/dist/components/PaginationBar.js +95 -0
  112. package/dist/components/PaginationBar.js.map +1 -0
  113. package/dist/components/Panel.js +396 -0
  114. package/dist/components/Panel.js.map +1 -0
  115. package/dist/components/PasswordInput.js +32 -0
  116. package/dist/components/PasswordInput.js.map +1 -0
  117. package/dist/components/PasswordRequirements.js +25 -0
  118. package/dist/components/PasswordRequirements.js.map +1 -0
  119. package/dist/components/PatchDiff.js +96 -0
  120. package/dist/components/PatchDiff.js.map +1 -0
  121. package/dist/components/PendingVeil.js +18 -0
  122. package/dist/components/PendingVeil.js.map +1 -0
  123. package/dist/components/Popover.js +214 -0
  124. package/dist/components/Popover.js.map +1 -0
  125. package/dist/components/Progress.js +419 -0
  126. package/dist/components/Progress.js.map +1 -0
  127. package/dist/components/RatingScale.js +89 -0
  128. package/dist/components/RatingScale.js.map +1 -0
  129. package/dist/components/ReadMore.js +232 -0
  130. package/dist/components/ReadMore.js.map +1 -0
  131. package/dist/components/RecordCard.js +202 -0
  132. package/dist/components/RecordCard.js.map +1 -0
  133. package/dist/components/RelativeTime.js +29 -0
  134. package/dist/components/RelativeTime.js.map +1 -0
  135. package/dist/components/SandboxedFrame.js +135 -0
  136. package/dist/components/SandboxedFrame.js.map +1 -0
  137. package/dist/components/SearchInput.js +38 -0
  138. package/dist/components/SearchInput.js.map +1 -0
  139. package/dist/components/SecretField.js +228 -0
  140. package/dist/components/SecretField.js.map +1 -0
  141. package/dist/components/SectionNav.js +42 -0
  142. package/dist/components/SectionNav.js.map +1 -0
  143. package/dist/components/Select.js +172 -0
  144. package/dist/components/Select.js.map +1 -0
  145. package/dist/components/SequenceDiagram.js +109 -0
  146. package/dist/components/SequenceDiagram.js.map +1 -0
  147. package/dist/components/SettingRow.js +124 -0
  148. package/dist/components/SettingRow.js.map +1 -0
  149. package/dist/components/SignOffRings.js +36 -0
  150. package/dist/components/SignOffRings.js.map +1 -0
  151. package/dist/components/Slider.js +353 -0
  152. package/dist/components/Slider.js.map +1 -0
  153. package/dist/components/SolutionChoice.js +89 -0
  154. package/dist/components/SolutionChoice.js.map +1 -0
  155. package/dist/components/SortMenu.js +75 -0
  156. package/dist/components/SortMenu.js.map +1 -0
  157. package/dist/components/Spinner.js +42 -0
  158. package/dist/components/Spinner.js.map +1 -0
  159. package/dist/components/Stat.js +148 -0
  160. package/dist/components/Stat.js.map +1 -0
  161. package/dist/components/StatusSelect.js +119 -0
  162. package/dist/components/StatusSelect.js.map +1 -0
  163. package/dist/components/Surface.js +210 -0
  164. package/dist/components/Surface.js.map +1 -0
  165. package/dist/components/Table.js +300 -0
  166. package/dist/components/Table.js.map +1 -0
  167. package/dist/components/Tabs.js +288 -0
  168. package/dist/components/Tabs.js.map +1 -0
  169. package/dist/components/ThemeMenu.js +198 -0
  170. package/dist/components/ThemeMenu.js.map +1 -0
  171. package/dist/components/Toast.js +217 -0
  172. package/dist/components/Toast.js.map +1 -0
  173. package/dist/components/Toggle.js +147 -0
  174. package/dist/components/Toggle.js.map +1 -0
  175. package/dist/components/ToggleMatrix.js +157 -0
  176. package/dist/components/ToggleMatrix.js.map +1 -0
  177. package/dist/components/Tree.js +125 -0
  178. package/dist/components/Tree.js.map +1 -0
  179. package/dist/components/TriStateSwitch.js +111 -0
  180. package/dist/components/TriStateSwitch.js.map +1 -0
  181. package/dist/components/VideoPlayer.js +64 -0
  182. package/dist/components/VideoPlayer.js.map +1 -0
  183. package/dist/components/auth/AcceptInvitationCard.js +110 -0
  184. package/dist/components/auth/AcceptInvitationCard.js.map +1 -0
  185. package/dist/components/auth/AuthLayout.js +18 -0
  186. package/dist/components/auth/AuthLayout.js.map +1 -0
  187. package/dist/components/auth/ForgotPasswordForm.js +44 -0
  188. package/dist/components/auth/ForgotPasswordForm.js.map +1 -0
  189. package/dist/components/auth/LoginForm.js +76 -0
  190. package/dist/components/auth/LoginForm.js.map +1 -0
  191. package/dist/components/auth/ResetPasswordForm.js +69 -0
  192. package/dist/components/auth/ResetPasswordForm.js.map +1 -0
  193. package/dist/components/auth/SignInProviders.js +45 -0
  194. package/dist/components/auth/SignInProviders.js.map +1 -0
  195. package/dist/components/auth/SignupCard.js +204 -0
  196. package/dist/components/auth/SignupCard.js.map +1 -0
  197. package/dist/components/auth/TermsAcceptance.js +43 -0
  198. package/dist/components/auth/TermsAcceptance.js.map +1 -0
  199. package/dist/components/board/context.js +32 -0
  200. package/dist/components/board/context.js.map +1 -0
  201. package/dist/components/board/recipe.js +94 -0
  202. package/dist/components/board/recipe.js.map +1 -0
  203. package/dist/components/calendar/CalendarMonth.js +299 -0
  204. package/dist/components/calendar/CalendarMonth.js.map +1 -0
  205. package/dist/components/calendar/CalendarTimeGrid.js +430 -0
  206. package/dist/components/calendar/CalendarTimeGrid.js.map +1 -0
  207. package/dist/components/calendar/EventActions.js +101 -0
  208. package/dist/components/calendar/EventActions.js.map +1 -0
  209. package/dist/components/calendar/format.js +73 -0
  210. package/dist/components/calendar/format.js.map +1 -0
  211. package/dist/components/calendar/palette.js +31 -0
  212. package/dist/components/calendar/palette.js.map +1 -0
  213. package/dist/components/calendar/use-calendar-drag.js +149 -0
  214. package/dist/components/calendar/use-calendar-drag.js.map +1 -0
  215. package/dist/components/calendar/use-event-keyboard.js +87 -0
  216. package/dist/components/calendar/use-event-keyboard.js.map +1 -0
  217. package/dist/components/calendar/use-grid-navigation.js +79 -0
  218. package/dist/components/calendar/use-grid-navigation.js.map +1 -0
  219. package/dist/components/calendar/use-now.js +27 -0
  220. package/dist/components/calendar/use-now.js.map +1 -0
  221. package/dist/components/card-face/AcRingGlyph.js +39 -0
  222. package/dist/components/card-face/AcRingGlyph.js.map +1 -0
  223. package/dist/components/card-face/BoardCardAgentSlot.js +17 -0
  224. package/dist/components/card-face/BoardCardAgentSlot.js.map +1 -0
  225. package/dist/components/card-face/CardFace.js +109 -0
  226. package/dist/components/card-face/CardFace.js.map +1 -0
  227. package/dist/components/card-face/CardTypeBadge.js +17 -0
  228. package/dist/components/card-face/CardTypeBadge.js.map +1 -0
  229. package/dist/components/card-face/EffortBadge.js +11 -0
  230. package/dist/components/card-face/EffortBadge.js.map +1 -0
  231. package/dist/components/card-face/GateRingGlyph.js +31 -0
  232. package/dist/components/card-face/GateRingGlyph.js.map +1 -0
  233. package/dist/components/card-face/OverflowRow.js +70 -0
  234. package/dist/components/card-face/OverflowRow.js.map +1 -0
  235. package/dist/components/card-face/TapTip.js +32 -0
  236. package/dist/components/card-face/TapTip.js.map +1 -0
  237. package/dist/components/card-face/hit-area.js +6 -0
  238. package/dist/components/card-face/hit-area.js.map +1 -0
  239. package/dist/components/card-face/vocabulary.js +102 -0
  240. package/dist/components/card-face/vocabulary.js.map +1 -0
  241. package/dist/components/chart/BarList.js +78 -0
  242. package/dist/components/chart/BarList.js.map +1 -0
  243. package/dist/components/chart/LineChart.js +310 -0
  244. package/dist/components/chart/LineChart.js.map +1 -0
  245. package/dist/components/chart/ShareBar.js +141 -0
  246. package/dist/components/chart/ShareBar.js.map +1 -0
  247. package/dist/components/chart/TimeSeriesChart.js +305 -0
  248. package/dist/components/chart/TimeSeriesChart.js.map +1 -0
  249. package/dist/components/chart/label-metrics.js +17 -0
  250. package/dist/components/chart/label-metrics.js.map +1 -0
  251. package/dist/components/chart/line-chart-axis.js +38 -0
  252. package/dist/components/chart/line-chart-axis.js.map +1 -0
  253. package/dist/components/chart/line-chart-scale.js +132 -0
  254. package/dist/components/chart/line-chart-scale.js.map +1 -0
  255. package/dist/components/chart/line-series-style.js +22 -0
  256. package/dist/components/chart/line-series-style.js.map +1 -0
  257. package/dist/components/chart/share-bar-labels.js +14 -0
  258. package/dist/components/chart/share-bar-labels.js.map +1 -0
  259. package/dist/components/chart/shared.js +157 -0
  260. package/dist/components/chart/shared.js.map +1 -0
  261. package/dist/components/chart/time-series-scale.js +51 -0
  262. package/dist/components/chart/time-series-scale.js.map +1 -0
  263. package/dist/components/chat/Attachment.js +316 -0
  264. package/dist/components/chat/Attachment.js.map +1 -0
  265. package/dist/components/chat/Chat.js +171 -0
  266. package/dist/components/chat/Chat.js.map +1 -0
  267. package/dist/components/chat/Composer.js +274 -0
  268. package/dist/components/chat/Composer.js.map +1 -0
  269. package/dist/components/chat/ContextMeter.js +202 -0
  270. package/dist/components/chat/ContextMeter.js.map +1 -0
  271. package/dist/components/chat/EffortControl.js +116 -0
  272. package/dist/components/chat/EffortControl.js.map +1 -0
  273. package/dist/components/chat/FileCover.js +78 -0
  274. package/dist/components/chat/FileCover.js.map +1 -0
  275. package/dist/components/chat/Message.js +356 -0
  276. package/dist/components/chat/Message.js.map +1 -0
  277. package/dist/components/chat/MessageScroller.js +104 -0
  278. package/dist/components/chat/MessageScroller.js.map +1 -0
  279. package/dist/components/chat/ModelSelector.js +156 -0
  280. package/dist/components/chat/ModelSelector.js.map +1 -0
  281. package/dist/components/chat/StreamingMarkdown.js +42 -0
  282. package/dist/components/chat/StreamingMarkdown.js.map +1 -0
  283. package/dist/components/chat/download-file.js +9 -0
  284. package/dist/components/chat/download-file.js.map +1 -0
  285. package/dist/components/chat/file-icon.js +39 -0
  286. package/dist/components/chat/file-icon.js.map +1 -0
  287. package/dist/components/checklist/StatusChecklist.js +103 -0
  288. package/dist/components/checklist/StatusChecklist.js.map +1 -0
  289. package/dist/components/checklist/tally.js +29 -0
  290. package/dist/components/checklist/tally.js.map +1 -0
  291. package/dist/components/code-editor/context.js +13 -0
  292. package/dist/components/code-editor/context.js.map +1 -0
  293. package/dist/components/code-editor/editing.js +93 -0
  294. package/dist/components/code-editor/editing.js.map +1 -0
  295. package/dist/components/code-editor/highlight.js +27 -0
  296. package/dist/components/code-editor/highlight.js.map +1 -0
  297. package/dist/components/code-editor/recipe.js +75 -0
  298. package/dist/components/code-editor/recipe.js.map +1 -0
  299. package/dist/components/date-timeline/DateTimeline.js +358 -0
  300. package/dist/components/date-timeline/DateTimeline.js.map +1 -0
  301. package/dist/components/date-timeline/TimelineRow.js +100 -0
  302. package/dist/components/date-timeline/TimelineRow.js.map +1 -0
  303. package/dist/components/date-timeline/useBarDrag.js +44 -0
  304. package/dist/components/date-timeline/useBarDrag.js.map +1 -0
  305. package/dist/components/date-timeline/useMarkerDrag.js +40 -0
  306. package/dist/components/date-timeline/useMarkerDrag.js.map +1 -0
  307. package/dist/components/date-timeline/useTimelineZoom.js +44 -0
  308. package/dist/components/date-timeline/useTimelineZoom.js.map +1 -0
  309. package/dist/components/drag-drop/context.js +37 -0
  310. package/dist/components/drag-drop/context.js.map +1 -0
  311. package/dist/components/drag-drop/recipe.js +270 -0
  312. package/dist/components/drag-drop/recipe.js.map +1 -0
  313. package/dist/components/drag-drop/shift.js +157 -0
  314. package/dist/components/drag-drop/shift.js.map +1 -0
  315. package/dist/components/edit/activation.js +10 -0
  316. package/dist/components/edit/activation.js.map +1 -0
  317. package/dist/components/edit/outcome.js +47 -0
  318. package/dist/components/edit/outcome.js.map +1 -0
  319. package/dist/components/edit/use-edit-session.js +146 -0
  320. package/dist/components/edit/use-edit-session.js.map +1 -0
  321. package/dist/components/file-viewer/FileViewer.js +97 -0
  322. package/dist/components/file-viewer/FileViewer.js.map +1 -0
  323. package/dist/components/file-viewer/PageNumberJumpField.js +47 -0
  324. package/dist/components/file-viewer/PageNumberJumpField.js.map +1 -0
  325. package/dist/components/file-viewer/ViewerControls.js +122 -0
  326. package/dist/components/file-viewer/ViewerControls.js.map +1 -0
  327. package/dist/components/file-viewer/ViewerRail.js +57 -0
  328. package/dist/components/file-viewer/ViewerRail.js.map +1 -0
  329. package/dist/components/file-viewer/ViewerStage.js +112 -0
  330. package/dist/components/file-viewer/ViewerStage.js.map +1 -0
  331. package/dist/components/file-viewer/frames.js +37 -0
  332. package/dist/components/file-viewer/frames.js.map +1 -0
  333. package/dist/components/file-viewer/use-frame-cursor.js +32 -0
  334. package/dist/components/file-viewer/use-frame-cursor.js.map +1 -0
  335. package/dist/components/file-viewer/use-viewer-keys.js +50 -0
  336. package/dist/components/file-viewer/use-viewer-keys.js.map +1 -0
  337. package/dist/components/file-viewer/use-viewer-zoom.js +68 -0
  338. package/dist/components/file-viewer/use-viewer-zoom.js.map +1 -0
  339. package/dist/components/focus-web/FocusWeb.js +322 -0
  340. package/dist/components/focus-web/FocusWeb.js.map +1 -0
  341. package/dist/components/focus-web/layout.js +34 -0
  342. package/dist/components/focus-web/layout.js.map +1 -0
  343. package/dist/components/graph-explorer/GraphExplorer.js +441 -0
  344. package/dist/components/graph-explorer/GraphExplorer.js.map +1 -0
  345. package/dist/components/graph-explorer/camera-math.js +102 -0
  346. package/dist/components/graph-explorer/camera-math.js.map +1 -0
  347. package/dist/components/graph-explorer/tree-layout.js +103 -0
  348. package/dist/components/graph-explorer/tree-layout.js.map +1 -0
  349. package/dist/components/graph-explorer/use-camera.js +82 -0
  350. package/dist/components/graph-explorer/use-camera.js.map +1 -0
  351. package/dist/components/graph-explorer/viewport-gesture.js +107 -0
  352. package/dist/components/graph-explorer/viewport-gesture.js.map +1 -0
  353. package/dist/components/kanban/KanbanBoard.js +219 -0
  354. package/dist/components/kanban/KanbanBoard.js.map +1 -0
  355. package/dist/components/kanban/recipe.js +144 -0
  356. package/dist/components/kanban/recipe.js.map +1 -0
  357. package/dist/components/markdown/Affordances.js +398 -0
  358. package/dist/components/markdown/Affordances.js.map +1 -0
  359. package/dist/components/markdown/AttachmentStrip.js +128 -0
  360. package/dist/components/markdown/AttachmentStrip.js.map +1 -0
  361. package/dist/components/markdown/ImageUpload.js +45 -0
  362. package/dist/components/markdown/ImageUpload.js.map +1 -0
  363. package/dist/components/media-error.js +7 -0
  364. package/dist/components/media-error.js.map +1 -0
  365. package/dist/components/nav-sections.js +61 -0
  366. package/dist/components/nav-sections.js.map +1 -0
  367. package/dist/components/node-canvas/NodeCanvas.js +384 -0
  368. package/dist/components/node-canvas/NodeCanvas.js.map +1 -0
  369. package/dist/components/node-canvas/layout.js +237 -0
  370. package/dist/components/node-canvas/layout.js.map +1 -0
  371. package/dist/components/node-canvas/use-canvas-gestures.js +143 -0
  372. package/dist/components/node-canvas/use-canvas-gestures.js.map +1 -0
  373. package/dist/components/openapi/OpenApiViewer.js +137 -0
  374. package/dist/components/openapi/OpenApiViewer.js.map +1 -0
  375. package/dist/components/openapi/OperationCard.js +145 -0
  376. package/dist/components/openapi/OperationCard.js.map +1 -0
  377. package/dist/components/openapi/SchemaView.js +68 -0
  378. package/dist/components/openapi/SchemaView.js.map +1 -0
  379. package/dist/components/openapi/resolve.js +102 -0
  380. package/dist/components/openapi/resolve.js.map +1 -0
  381. package/dist/components/openapi/types.js +5 -0
  382. package/dist/components/openapi/types.js.map +1 -0
  383. package/dist/components/overlay-shell.js +29 -0
  384. package/dist/components/overlay-shell.js.map +1 -0
  385. package/dist/components/overlay-stack.js +27 -0
  386. package/dist/components/overlay-stack.js.map +1 -0
  387. package/dist/components/paged-window/PageBlock.js +50 -0
  388. package/dist/components/paged-window/PageBlock.js.map +1 -0
  389. package/dist/components/provenance/ConfidenceBar.js +60 -0
  390. package/dist/components/provenance/ConfidenceBar.js.map +1 -0
  391. package/dist/components/provenance/ConfidenceMeter.js +36 -0
  392. package/dist/components/provenance/ConfidenceMeter.js.map +1 -0
  393. package/dist/components/provenance/ConfidenceReadout.js +31 -0
  394. package/dist/components/provenance/ConfidenceReadout.js.map +1 -0
  395. package/dist/components/provenance/ProvenanceBadge.js +44 -0
  396. package/dist/components/provenance/ProvenanceBadge.js.map +1 -0
  397. package/dist/components/provenance/ProvenanceDetail.js +114 -0
  398. package/dist/components/provenance/ProvenanceDetail.js.map +1 -0
  399. package/dist/components/provenance/ProvenanceDisclosure.js +111 -0
  400. package/dist/components/provenance/ProvenanceDisclosure.js.map +1 -0
  401. package/dist/components/provenance/absence.js +31 -0
  402. package/dist/components/provenance/absence.js.map +1 -0
  403. package/dist/components/provenance/types.js +30 -0
  404. package/dist/components/provenance/types.js.map +1 -0
  405. package/dist/components/rbac/AccessRequestPanel.js +153 -0
  406. package/dist/components/rbac/AccessRequestPanel.js.map +1 -0
  407. package/dist/components/rbac/AccountMenu.js +118 -0
  408. package/dist/components/rbac/AccountMenu.js.map +1 -0
  409. package/dist/components/rbac/AgentKeysList.js +20 -0
  410. package/dist/components/rbac/AgentKeysList.js.map +1 -0
  411. package/dist/components/rbac/ApiKeysPanel.js +172 -0
  412. package/dist/components/rbac/ApiKeysPanel.js.map +1 -0
  413. package/dist/components/rbac/ApiKeysTable.js +169 -0
  414. package/dist/components/rbac/ApiKeysTable.js.map +1 -0
  415. package/dist/components/rbac/Brand.js +13 -0
  416. package/dist/components/rbac/Brand.js.map +1 -0
  417. package/dist/components/rbac/Can.js +18 -0
  418. package/dist/components/rbac/Can.js.map +1 -0
  419. package/dist/components/rbac/ChangePasswordForm.js +73 -0
  420. package/dist/components/rbac/ChangePasswordForm.js.map +1 -0
  421. package/dist/components/rbac/DangerZone.js +27 -0
  422. package/dist/components/rbac/DangerZone.js.map +1 -0
  423. package/dist/components/rbac/DevToolsPopover.js +140 -0
  424. package/dist/components/rbac/DevToolsPopover.js.map +1 -0
  425. package/dist/components/rbac/EndedLine.js +24 -0
  426. package/dist/components/rbac/EndedLine.js.map +1 -0
  427. package/dist/components/rbac/InvitationsList.js +148 -0
  428. package/dist/components/rbac/InvitationsList.js.map +1 -0
  429. package/dist/components/rbac/InviteMembersDialog.js +97 -0
  430. package/dist/components/rbac/InviteMembersDialog.js.map +1 -0
  431. package/dist/components/rbac/MembersPanel.js +138 -0
  432. package/dist/components/rbac/MembersPanel.js.map +1 -0
  433. package/dist/components/rbac/PermissionRequestPanel.js +141 -0
  434. package/dist/components/rbac/PermissionRequestPanel.js.map +1 -0
  435. package/dist/components/rbac/ProfileForm.js +86 -0
  436. package/dist/components/rbac/ProfileForm.js.map +1 -0
  437. package/dist/components/rbac/ProfilePage.js +58 -0
  438. package/dist/components/rbac/ProfilePage.js.map +1 -0
  439. package/dist/components/rbac/RBACProvider.js +82 -0
  440. package/dist/components/rbac/RBACProvider.js.map +1 -0
  441. package/dist/components/rbac/RoleEditorDialog.js +90 -0
  442. package/dist/components/rbac/RoleEditorDialog.js.map +1 -0
  443. package/dist/components/rbac/RoleKeyPicker.js +77 -0
  444. package/dist/components/rbac/RoleKeyPicker.js.map +1 -0
  445. package/dist/components/rbac/RolePermissionMatrix.js +37 -0
  446. package/dist/components/rbac/RolePermissionMatrix.js.map +1 -0
  447. package/dist/components/rbac/RolesPermissionsPage.js +142 -0
  448. package/dist/components/rbac/RolesPermissionsPage.js.map +1 -0
  449. package/dist/components/rbac/SessionsList.js +146 -0
  450. package/dist/components/rbac/SessionsList.js.map +1 -0
  451. package/dist/components/rbac/TeamSettingsForm.js +69 -0
  452. package/dist/components/rbac/TeamSettingsForm.js.map +1 -0
  453. package/dist/components/rbac/TeamSwitcher.js +66 -0
  454. package/dist/components/rbac/TeamSwitcher.js.map +1 -0
  455. package/dist/components/rbac/approvalPanelParts.js +130 -0
  456. package/dist/components/rbac/approvalPanelParts.js.map +1 -0
  457. package/dist/components/rbac/permissionSections.js +8 -0
  458. package/dist/components/rbac/permissionSections.js.map +1 -0
  459. package/dist/components/rbac/stagedForm.js +42 -0
  460. package/dist/components/rbac/stagedForm.js.map +1 -0
  461. package/dist/components/rbac/useStagedImage.js +21 -0
  462. package/dist/components/rbac/useStagedImage.js.map +1 -0
  463. package/dist/components/roadmap/PhaseManager.js +48 -0
  464. package/dist/components/roadmap/PhaseManager.js.map +1 -0
  465. package/dist/components/roadmap/RoadmapItemCard.js +96 -0
  466. package/dist/components/roadmap/RoadmapItemCard.js.map +1 -0
  467. package/dist/components/roadmap/RoadmapPage.js +34 -0
  468. package/dist/components/roadmap/RoadmapPage.js.map +1 -0
  469. package/dist/components/roadmap/RoadmapSwimlaneBoard.js +91 -0
  470. package/dist/components/roadmap/RoadmapSwimlaneBoard.js.map +1 -0
  471. package/dist/components/roadmap/TrackManager.js +58 -0
  472. package/dist/components/roadmap/TrackManager.js.map +1 -0
  473. package/dist/components/roadmap/UseCaseCard.js +93 -0
  474. package/dist/components/roadmap/UseCaseCard.js.map +1 -0
  475. package/dist/components/roadmap/UseCaseLedgerPage.js +98 -0
  476. package/dist/components/roadmap/UseCaseLedgerPage.js.map +1 -0
  477. package/dist/components/roadmap/chip-tones.js +9 -0
  478. package/dist/components/roadmap/chip-tones.js.map +1 -0
  479. package/dist/components/roadmap/derive.js +28 -0
  480. package/dist/components/roadmap/derive.js.map +1 -0
  481. package/dist/components/stepper/Stepper.js +276 -0
  482. package/dist/components/stepper/Stepper.js.map +1 -0
  483. package/dist/components/stepper/derive.js +53 -0
  484. package/dist/components/stepper/derive.js.map +1 -0
  485. package/dist/confidence.css +222 -0
  486. package/dist/fonts/bricolage-grotesque-0.woff2 +0 -0
  487. package/dist/fonts/bricolage-grotesque-1.woff2 +0 -0
  488. package/dist/fonts/bricolage-grotesque-2.woff2 +0 -0
  489. package/dist/fonts/figtree-0.woff2 +0 -0
  490. package/dist/fonts/figtree-1.woff2 +0 -0
  491. package/dist/fonts/figtree-2.woff2 +0 -0
  492. package/dist/fonts/figtree-3.woff2 +0 -0
  493. package/dist/fonts/jetbrains-mono-0.woff2 +0 -0
  494. package/dist/fonts/jetbrains-mono-1.woff2 +0 -0
  495. package/dist/fonts/jetbrains-mono-10.woff2 +0 -0
  496. package/dist/fonts/jetbrains-mono-11.woff2 +0 -0
  497. package/dist/fonts/jetbrains-mono-2.woff2 +0 -0
  498. package/dist/fonts/jetbrains-mono-3.woff2 +0 -0
  499. package/dist/fonts/jetbrains-mono-4.woff2 +0 -0
  500. package/dist/fonts/jetbrains-mono-5.woff2 +0 -0
  501. package/dist/fonts/jetbrains-mono-6.woff2 +0 -0
  502. package/dist/fonts/jetbrains-mono-7.woff2 +0 -0
  503. package/dist/fonts/jetbrains-mono-8.woff2 +0 -0
  504. package/dist/fonts/jetbrains-mono-9.woff2 +0 -0
  505. package/dist/fonts.css +187 -0
  506. package/dist/icons/data.js +233 -0
  507. package/dist/icons/data.js.map +1 -0
  508. package/dist/index.js +942 -0
  509. package/dist/index.js.map +1 -0
  510. package/dist/lib/attention.js +75 -0
  511. package/dist/lib/attention.js.map +1 -0
  512. package/dist/lib/board/anchor.js +14 -0
  513. package/dist/lib/board/anchor.js.map +1 -0
  514. package/dist/lib/board/model.js +41 -0
  515. package/dist/lib/board/model.js.map +1 -0
  516. package/dist/lib/board/move.js +161 -0
  517. package/dist/lib/board/move.js.map +1 -0
  518. package/dist/lib/board/position.js +11 -0
  519. package/dist/lib/board/position.js.map +1 -0
  520. package/dist/lib/board/rejection.js +22 -0
  521. package/dist/lib/board/rejection.js.map +1 -0
  522. package/dist/lib/board/use-board.js +43 -0
  523. package/dist/lib/board/use-board.js.map +1 -0
  524. package/dist/lib/calendar/band-packer.js +44 -0
  525. package/dist/lib/calendar/band-packer.js.map +1 -0
  526. package/dist/lib/calendar/drag.js +74 -0
  527. package/dist/lib/calendar/drag.js.map +1 -0
  528. package/dist/lib/calendar/lane-packer.js +67 -0
  529. package/dist/lib/calendar/lane-packer.js.map +1 -0
  530. package/dist/lib/calendar/segments.js +82 -0
  531. package/dist/lib/calendar/segments.js.map +1 -0
  532. package/dist/lib/calendar/types.js +7 -0
  533. package/dist/lib/calendar/types.js.map +1 -0
  534. package/dist/lib/chart-palette.js +27 -0
  535. package/dist/lib/chart-palette.js.map +1 -0
  536. package/dist/lib/clipboard.js +30 -0
  537. package/dist/lib/clipboard.js.map +1 -0
  538. package/dist/lib/cn.js +9 -0
  539. package/dist/lib/cn.js.map +1 -0
  540. package/dist/lib/color.js +24 -0
  541. package/dist/lib/color.js.map +1 -0
  542. package/dist/lib/component-guidance.js +297 -0
  543. package/dist/lib/component-guidance.js.map +1 -0
  544. package/dist/lib/confidence.js +22 -0
  545. package/dist/lib/confidence.js.map +1 -0
  546. package/dist/lib/date-timeline/scale.js +197 -0
  547. package/dist/lib/date-timeline/scale.js.map +1 -0
  548. package/dist/lib/design-frame/document.js +44 -0
  549. package/dist/lib/design-frame/document.js.map +1 -0
  550. package/dist/lib/design-frame/mini-app-script.js +107 -0
  551. package/dist/lib/design-frame/mini-app-script.js.map +1 -0
  552. package/dist/lib/design-frame/mini-app.js +12 -0
  553. package/dist/lib/design-frame/mini-app.js.map +1 -0
  554. package/dist/lib/design-frame/protocol.js +46 -0
  555. package/dist/lib/design-frame/protocol.js.map +1 -0
  556. package/dist/lib/dev-warn.js +17 -0
  557. package/dist/lib/dev-warn.js.map +1 -0
  558. package/dist/lib/dnd/announce.js +120 -0
  559. package/dist/lib/dnd/announce.js.map +1 -0
  560. package/dist/lib/dnd/autoscroll.js +123 -0
  561. package/dist/lib/dnd/autoscroll.js.map +1 -0
  562. package/dist/lib/dnd/cross-drop.js +11 -0
  563. package/dist/lib/dnd/cross-drop.js.map +1 -0
  564. package/dist/lib/dnd/geometry.js +99 -0
  565. package/dist/lib/dnd/geometry.js.map +1 -0
  566. package/dist/lib/dnd/sensors/gesture.js +86 -0
  567. package/dist/lib/dnd/sensors/gesture.js.map +1 -0
  568. package/dist/lib/dnd/sensors/keyboard.js +47 -0
  569. package/dist/lib/dnd/sensors/keyboard.js.map +1 -0
  570. package/dist/lib/dnd/sensors/pointer.js +32 -0
  571. package/dist/lib/dnd/sensors/pointer.js.map +1 -0
  572. package/dist/lib/dnd/session.js +256 -0
  573. package/dist/lib/dnd/session.js.map +1 -0
  574. package/dist/lib/dnd/use-drag.js +90 -0
  575. package/dist/lib/dnd/use-drag.js.map +1 -0
  576. package/dist/lib/dom/scroll-ancestor.js +18 -0
  577. package/dist/lib/dom/scroll-ancestor.js.map +1 -0
  578. package/dist/lib/format.js +23 -0
  579. package/dist/lib/format.js.map +1 -0
  580. package/dist/lib/group-in-order.js +13 -0
  581. package/dist/lib/group-in-order.js.map +1 -0
  582. package/dist/lib/header-fold.js +11 -0
  583. package/dist/lib/header-fold.js.map +1 -0
  584. package/dist/lib/i18n/areas/auth-provenance-flows.js +156 -0
  585. package/dist/lib/i18n/areas/auth-provenance-flows.js.map +1 -0
  586. package/dist/lib/i18n/areas/board.js +35 -0
  587. package/dist/lib/i18n/areas/board.js.map +1 -0
  588. package/dist/lib/i18n/areas/card-face.js +10 -0
  589. package/dist/lib/i18n/areas/card-face.js.map +1 -0
  590. package/dist/lib/i18n/areas/chat-chart.js +118 -0
  591. package/dist/lib/i18n/areas/chat-chart.js.map +1 -0
  592. package/dist/lib/i18n/areas/code-editor.js +24 -0
  593. package/dist/lib/i18n/areas/code-editor.js.map +1 -0
  594. package/dist/lib/i18n/areas/date-timeline.js +21 -0
  595. package/dist/lib/i18n/areas/date-timeline.js.map +1 -0
  596. package/dist/lib/i18n/areas/dates.js +71 -0
  597. package/dist/lib/i18n/areas/dates.js.map +1 -0
  598. package/dist/lib/i18n/areas/docs-views.js +183 -0
  599. package/dist/lib/i18n/areas/docs-views.js.map +1 -0
  600. package/dist/lib/i18n/areas/feedback.js +75 -0
  601. package/dist/lib/i18n/areas/feedback.js.map +1 -0
  602. package/dist/lib/i18n/areas/formats.js +24 -0
  603. package/dist/lib/i18n/areas/formats.js.map +1 -0
  604. package/dist/lib/i18n/areas/forms.js +110 -0
  605. package/dist/lib/i18n/areas/forms.js.map +1 -0
  606. package/dist/lib/i18n/areas/keys.js +25 -0
  607. package/dist/lib/i18n/areas/keys.js.map +1 -0
  608. package/dist/lib/i18n/areas/markdown.js +136 -0
  609. package/dist/lib/i18n/areas/markdown.js.map +1 -0
  610. package/dist/lib/i18n/areas/move-rejected.js +14 -0
  611. package/dist/lib/i18n/areas/move-rejected.js.map +1 -0
  612. package/dist/lib/i18n/areas/navigation.js +104 -0
  613. package/dist/lib/i18n/areas/navigation.js.map +1 -0
  614. package/dist/lib/i18n/areas/rbac.js +332 -0
  615. package/dist/lib/i18n/areas/rbac.js.map +1 -0
  616. package/dist/lib/i18n/emphasis.js +6 -0
  617. package/dist/lib/i18n/emphasis.js.map +1 -0
  618. package/dist/lib/i18n/number-format.js +9 -0
  619. package/dist/lib/i18n/number-format.js.map +1 -0
  620. package/dist/lib/i18n/plural.js +9 -0
  621. package/dist/lib/i18n/plural.js.map +1 -0
  622. package/dist/lib/i18n/provider.js +27 -0
  623. package/dist/lib/i18n/provider.js.map +1 -0
  624. package/dist/lib/i18n/strings.js +38 -0
  625. package/dist/lib/i18n/strings.js.map +1 -0
  626. package/dist/lib/icons.js +17 -0
  627. package/dist/lib/icons.js.map +1 -0
  628. package/dist/lib/interactive-target.js +9 -0
  629. package/dist/lib/interactive-target.js.map +1 -0
  630. package/dist/lib/intl-cache.js +69 -0
  631. package/dist/lib/intl-cache.js.map +1 -0
  632. package/dist/lib/legal-document.js +37 -0
  633. package/dist/lib/legal-document.js.map +1 -0
  634. package/dist/lib/line-diff-model.js +51 -0
  635. package/dist/lib/line-diff-model.js.map +1 -0
  636. package/dist/lib/markdown/attachments.js +71 -0
  637. package/dist/lib/markdown/attachments.js.map +1 -0
  638. package/dist/lib/markdown/caret-map.js +153 -0
  639. package/dist/lib/markdown/caret-map.js.map +1 -0
  640. package/dist/lib/markdown/caret.js +35 -0
  641. package/dist/lib/markdown/caret.js.map +1 -0
  642. package/dist/lib/markdown/commands.js +443 -0
  643. package/dist/lib/markdown/commands.js.map +1 -0
  644. package/dist/lib/markdown/convert.js +153 -0
  645. package/dist/lib/markdown/convert.js.map +1 -0
  646. package/dist/lib/markdown/dom.js +89 -0
  647. package/dist/lib/markdown/dom.js.map +1 -0
  648. package/dist/lib/markdown/edit.js +92 -0
  649. package/dist/lib/markdown/edit.js.map +1 -0
  650. package/dist/lib/markdown/history.js +79 -0
  651. package/dist/lib/markdown/history.js.map +1 -0
  652. package/dist/lib/markdown/hotkeys.js +63 -0
  653. package/dist/lib/markdown/hotkeys.js.map +1 -0
  654. package/dist/lib/markdown/image-pipeline.js +236 -0
  655. package/dist/lib/markdown/image-pipeline.js.map +1 -0
  656. package/dist/lib/markdown/images.js +85 -0
  657. package/dist/lib/markdown/images.js.map +1 -0
  658. package/dist/lib/markdown/input.js +210 -0
  659. package/dist/lib/markdown/input.js.map +1 -0
  660. package/dist/lib/markdown/keys.js +37 -0
  661. package/dist/lib/markdown/keys.js.map +1 -0
  662. package/dist/lib/markdown/paste.js +180 -0
  663. package/dist/lib/markdown/paste.js.map +1 -0
  664. package/dist/lib/markdown/position.js +111 -0
  665. package/dist/lib/markdown/position.js.map +1 -0
  666. package/dist/lib/markdown/project.js +108 -0
  667. package/dist/lib/markdown/project.js.map +1 -0
  668. package/dist/lib/markdown/reconcile.js +127 -0
  669. package/dist/lib/markdown/reconcile.js.map +1 -0
  670. package/dist/lib/markdown/surface.js +373 -0
  671. package/dist/lib/markdown/surface.js.map +1 -0
  672. package/dist/lib/motion.js +22 -0
  673. package/dist/lib/motion.js.map +1 -0
  674. package/dist/lib/pad.js +7 -0
  675. package/dist/lib/pad.js.map +1 -0
  676. package/dist/lib/paged-window/layout.js +15 -0
  677. package/dist/lib/paged-window/layout.js.map +1 -0
  678. package/dist/lib/paged-window/list-owner.js +21 -0
  679. package/dist/lib/paged-window/list-owner.js.map +1 -0
  680. package/dist/lib/paged-window/records-binding.js +239 -0
  681. package/dist/lib/paged-window/records-binding.js.map +1 -0
  682. package/dist/lib/paged-window/store.js +562 -0
  683. package/dist/lib/paged-window/store.js.map +1 -0
  684. package/dist/lib/paged-window/use-measured-pitch.js +38 -0
  685. package/dist/lib/paged-window/use-measured-pitch.js.map +1 -0
  686. package/dist/lib/paged-window/use-page-visibility.js +36 -0
  687. package/dist/lib/paged-window/use-page-visibility.js.map +1 -0
  688. package/dist/lib/paged-window/use-paged-window.js +43 -0
  689. package/dist/lib/paged-window/use-paged-window.js.map +1 -0
  690. package/dist/lib/paged-window/use-scroll-root.js +12 -0
  691. package/dist/lib/paged-window/use-scroll-root.js.map +1 -0
  692. package/dist/lib/persist.js +84 -0
  693. package/dist/lib/persist.js.map +1 -0
  694. package/dist/lib/preference-values.js +13 -0
  695. package/dist/lib/preference-values.js.map +1 -0
  696. package/dist/lib/preferences.js +86 -0
  697. package/dist/lib/preferences.js.map +1 -0
  698. package/dist/lib/reads/hooks.js +156 -0
  699. package/dist/lib/reads/hooks.js.map +1 -0
  700. package/dist/lib/reads/optimistic.js +169 -0
  701. package/dist/lib/reads/optimistic.js.map +1 -0
  702. package/dist/lib/reads/refetch.js +108 -0
  703. package/dist/lib/reads/refetch.js.map +1 -0
  704. package/dist/lib/reads/slots.js +215 -0
  705. package/dist/lib/reads/slots.js.map +1 -0
  706. package/dist/lib/realtime/hooks.js +40 -0
  707. package/dist/lib/realtime/hooks.js.map +1 -0
  708. package/dist/lib/realtime/provider.js +25 -0
  709. package/dist/lib/realtime/provider.js.map +1 -0
  710. package/dist/lib/realtime/registry.js +472 -0
  711. package/dist/lib/realtime/registry.js.map +1 -0
  712. package/dist/lib/records/define-record-type.js +33 -0
  713. package/dist/lib/records/define-record-type.js.map +1 -0
  714. package/dist/lib/records/hooks.js +39 -0
  715. package/dist/lib/records/hooks.js.map +1 -0
  716. package/dist/lib/records/store.js +572 -0
  717. package/dist/lib/records/store.js.map +1 -0
  718. package/dist/lib/records/wire.js +58 -0
  719. package/dist/lib/records/wire.js.map +1 -0
  720. package/dist/lib/reduced-motion-help.js +19 -0
  721. package/dist/lib/reduced-motion-help.js.map +1 -0
  722. package/dist/lib/scroll-caret.js +18 -0
  723. package/dist/lib/scroll-caret.js.map +1 -0
  724. package/dist/lib/sim/createSimStore.js +54 -0
  725. package/dist/lib/sim/createSimStore.js.map +1 -0
  726. package/dist/lib/sim/latency.js +28 -0
  727. package/dist/lib/sim/latency.js.map +1 -0
  728. package/dist/lib/sim/registry.js +13 -0
  729. package/dist/lib/sim/registry.js.map +1 -0
  730. package/dist/lib/sim/settings.js +41 -0
  731. package/dist/lib/sim/settings.js.map +1 -0
  732. package/dist/lib/submit-shortcut.js +25 -0
  733. package/dist/lib/submit-shortcut.js.map +1 -0
  734. package/dist/lib/syntax/index.js +33 -0
  735. package/dist/lib/syntax/index.js.map +1 -0
  736. package/dist/lib/syntax/languages/bash.js +77 -0
  737. package/dist/lib/syntax/languages/bash.js.map +1 -0
  738. package/dist/lib/syntax/languages/css.js +81 -0
  739. package/dist/lib/syntax/languages/css.js.map +1 -0
  740. package/dist/lib/syntax/languages/html.js +91 -0
  741. package/dist/lib/syntax/languages/html.js.map +1 -0
  742. package/dist/lib/syntax/languages/index.js +49 -0
  743. package/dist/lib/syntax/languages/index.js.map +1 -0
  744. package/dist/lib/syntax/languages/javascript.js +133 -0
  745. package/dist/lib/syntax/languages/javascript.js.map +1 -0
  746. package/dist/lib/syntax/languages/json.js +45 -0
  747. package/dist/lib/syntax/languages/json.js.map +1 -0
  748. package/dist/lib/syntax/languages/mongodb.js +24 -0
  749. package/dist/lib/syntax/languages/mongodb.js.map +1 -0
  750. package/dist/lib/syntax/languages/plain.js +10 -0
  751. package/dist/lib/syntax/languages/plain.js.map +1 -0
  752. package/dist/lib/syntax/languages/sql.js +113 -0
  753. package/dist/lib/syntax/languages/sql.js.map +1 -0
  754. package/dist/lib/syntax/languages/vue.js +31 -0
  755. package/dist/lib/syntax/languages/vue.js.map +1 -0
  756. package/dist/lib/syntax/languages/yaml.js +55 -0
  757. package/dist/lib/syntax/languages/yaml.js.map +1 -0
  758. package/dist/lib/syntax/markdown/grammar.js +52 -0
  759. package/dist/lib/syntax/markdown/grammar.js.map +1 -0
  760. package/dist/lib/syntax/markdown/inline.js +477 -0
  761. package/dist/lib/syntax/markdown/inline.js.map +1 -0
  762. package/dist/lib/syntax/markdown/parse.js +464 -0
  763. package/dist/lib/syntax/markdown/parse.js.map +1 -0
  764. package/dist/lib/syntax/markdown/refs.js +94 -0
  765. package/dist/lib/syntax/markdown/refs.js.map +1 -0
  766. package/dist/lib/syntax/markdown/render.js +230 -0
  767. package/dist/lib/syntax/markdown/render.js.map +1 -0
  768. package/dist/lib/syntax/markdown/spans.js +40 -0
  769. package/dist/lib/syntax/markdown/spans.js.map +1 -0
  770. package/dist/lib/syntax/registry.js +55 -0
  771. package/dist/lib/syntax/registry.js.map +1 -0
  772. package/dist/lib/syntax/tokenize.js +96 -0
  773. package/dist/lib/syntax/tokenize.js.map +1 -0
  774. package/dist/lib/time/instant.js +7 -0
  775. package/dist/lib/time/instant.js.map +1 -0
  776. package/dist/lib/time/plain.js +83 -0
  777. package/dist/lib/time/plain.js.map +1 -0
  778. package/dist/lib/time/relativeAge.js +20 -0
  779. package/dist/lib/time/relativeAge.js.map +1 -0
  780. package/dist/lib/time/relativeClock.js +59 -0
  781. package/dist/lib/time/relativeClock.js.map +1 -0
  782. package/dist/lib/time/types.js +23 -0
  783. package/dist/lib/time/types.js.map +1 -0
  784. package/dist/lib/time/zone.js +148 -0
  785. package/dist/lib/time/zone.js.map +1 -0
  786. package/dist/lib/use-controllable.js +16 -0
  787. package/dist/lib/use-controllable.js.map +1 -0
  788. package/dist/lib/use-fill-height.js +49 -0
  789. package/dist/lib/use-fill-height.js.map +1 -0
  790. package/dist/lib/use-hydrated.js +14 -0
  791. package/dist/lib/use-hydrated.js.map +1 -0
  792. package/dist/lib/use-media-query.js +30 -0
  793. package/dist/lib/use-media-query.js.map +1 -0
  794. package/dist/lib/use-relabel-base-ui-dismiss.js +26 -0
  795. package/dist/lib/use-relabel-base-ui-dismiss.js.map +1 -0
  796. package/dist/lib/use-release-snap-drag.js +29 -0
  797. package/dist/lib/use-release-snap-drag.js.map +1 -0
  798. package/dist/lib/use-roving-options.js +18 -0
  799. package/dist/lib/use-roving-options.js.map +1 -0
  800. package/dist/lib/values/absent.js +5 -0
  801. package/dist/lib/values/absent.js.map +1 -0
  802. package/dist/lib/values/boolean.js +13 -0
  803. package/dist/lib/values/boolean.js.map +1 -0
  804. package/dist/lib/values/currency.js +23 -0
  805. package/dist/lib/values/currency.js.map +1 -0
  806. package/dist/lib/values/date.js +35 -0
  807. package/dist/lib/values/date.js.map +1 -0
  808. package/dist/lib/values/datetime.js +54 -0
  809. package/dist/lib/values/datetime.js.map +1 -0
  810. package/dist/lib/values/locale-date.js +60 -0
  811. package/dist/lib/values/locale-date.js.map +1 -0
  812. package/dist/lib/values/number.js +16 -0
  813. package/dist/lib/values/number.js.map +1 -0
  814. package/dist/pure.js +379 -0
  815. package/dist/pure.js.map +1 -0
  816. package/dist/styles.css +190 -0
  817. package/dist/theme.css +360 -0
  818. package/dist/types/components/Accordion.d.ts +15 -0
  819. package/dist/types/components/AgentWorkingSpinner.d.ts +23 -0
  820. package/dist/types/components/AppShell.d.ts +164 -0
  821. package/dist/types/components/Attention.d.ts +87 -0
  822. package/dist/types/components/Avatar.d.ts +154 -0
  823. package/dist/types/components/Badge.d.ts +131 -0
  824. package/dist/types/components/Board.d.ts +239 -0
  825. package/dist/types/components/Button.d.ts +208 -0
  826. package/dist/types/components/Callout.d.ts +163 -0
  827. package/dist/types/components/Card.d.ts +219 -0
  828. package/dist/types/components/Choice.d.ts +127 -0
  829. package/dist/types/components/CodeEditor.d.ts +86 -0
  830. package/dist/types/components/ColorPicker.d.ts +14 -0
  831. package/dist/types/components/Combobox.d.ts +43 -0
  832. package/dist/types/components/CommandPalette.d.ts +35 -0
  833. package/dist/types/components/ConcentricRing.d.ts +61 -0
  834. package/dist/types/components/ConnectionCard.d.ts +64 -0
  835. package/dist/types/components/ContextItemRow.d.ts +35 -0
  836. package/dist/types/components/CopyValue.d.ts +14 -0
  837. package/dist/types/components/CountBadge.d.ts +14 -0
  838. package/dist/types/components/DateCalendar.d.ts +30 -0
  839. package/dist/types/components/DateField.d.ts +29 -0
  840. package/dist/types/components/DatePicker.d.ts +20 -0
  841. package/dist/types/components/DateTimeText.d.ts +9 -0
  842. package/dist/types/components/DescriptionList.d.ts +40 -0
  843. package/dist/types/components/Dialog.d.ts +269 -0
  844. package/dist/types/components/DragDrop.d.ts +196 -0
  845. package/dist/types/components/Drawer.d.ts +163 -0
  846. package/dist/types/components/EditGutter.d.ts +44 -0
  847. package/dist/types/components/EmojiPicker.d.ts +30 -0
  848. package/dist/types/components/ErrorBoundary.d.ts +43 -0
  849. package/dist/types/components/Field.d.ts +37 -0
  850. package/dist/types/components/FileUpload.d.ts +22 -0
  851. package/dist/types/components/FilterMenu.d.ts +120 -0
  852. package/dist/types/components/GatesSection.d.ts +79 -0
  853. package/dist/types/components/Icon.d.ts +40 -0
  854. package/dist/types/components/IconButton.d.ts +69 -0
  855. package/dist/types/components/IconStack.d.ts +28 -0
  856. package/dist/types/components/ImageUploadField.d.ts +38 -0
  857. package/dist/types/components/InlineEdit.d.ts +183 -0
  858. package/dist/types/components/InlineMarkdownEdit.d.ts +100 -0
  859. package/dist/types/components/Input.d.ts +128 -0
  860. package/dist/types/components/LegalDocument.d.ts +23 -0
  861. package/dist/types/components/LineDiff.d.ts +53 -0
  862. package/dist/types/components/ListHeader.d.ts +45 -0
  863. package/dist/types/components/Loading.d.ts +131 -0
  864. package/dist/types/components/Markdown.d.ts +35 -0
  865. package/dist/types/components/MarkdownEditor.d.ts +129 -0
  866. package/dist/types/components/Menu.d.ts +157 -0
  867. package/dist/types/components/Navigation.d.ts +67 -0
  868. package/dist/types/components/NumberInput.d.ts +177 -0
  869. package/dist/types/components/OTPInput.d.ts +13 -0
  870. package/dist/types/components/OrderedEntityManager.d.ts +64 -0
  871. package/dist/types/components/PagedWindowList.d.ts +23 -0
  872. package/dist/types/components/PaginationBar.d.ts +31 -0
  873. package/dist/types/components/Panel.d.ts +94 -0
  874. package/dist/types/components/PasswordInput.d.ts +7 -0
  875. package/dist/types/components/PasswordRequirements.d.ts +11 -0
  876. package/dist/types/components/PatchDiff.d.ts +38 -0
  877. package/dist/types/components/PendingVeil.d.ts +8 -0
  878. package/dist/types/components/Popover.d.ts +231 -0
  879. package/dist/types/components/Progress.d.ts +580 -0
  880. package/dist/types/components/RatingScale.d.ts +30 -0
  881. package/dist/types/components/ReadMore.d.ts +26 -0
  882. package/dist/types/components/RecordCard.d.ts +413 -0
  883. package/dist/types/components/RelativeTime.d.ts +17 -0
  884. package/dist/types/components/SandboxedFrame.d.ts +37 -0
  885. package/dist/types/components/SearchInput.d.ts +6 -0
  886. package/dist/types/components/SecretField.d.ts +90 -0
  887. package/dist/types/components/SectionNav.d.ts +15 -0
  888. package/dist/types/components/Select.d.ts +53 -0
  889. package/dist/types/components/SequenceDiagram.d.ts +15 -0
  890. package/dist/types/components/SettingRow.d.ts +144 -0
  891. package/dist/types/components/SignOffRings.d.ts +29 -0
  892. package/dist/types/components/Slider.d.ts +255 -0
  893. package/dist/types/components/SolutionChoice.d.ts +49 -0
  894. package/dist/types/components/SortMenu.d.ts +45 -0
  895. package/dist/types/components/Spinner.d.ts +29 -0
  896. package/dist/types/components/Stat.d.ts +136 -0
  897. package/dist/types/components/StatusSelect.d.ts +93 -0
  898. package/dist/types/components/Surface.d.ts +145 -0
  899. package/dist/types/components/Table.d.ts +164 -0
  900. package/dist/types/components/Tabs.d.ts +142 -0
  901. package/dist/types/components/ThemeMenu.d.ts +56 -0
  902. package/dist/types/components/Toast.d.ts +63 -0
  903. package/dist/types/components/Toggle.d.ts +168 -0
  904. package/dist/types/components/ToggleMatrix.d.ts +51 -0
  905. package/dist/types/components/Tree.d.ts +20 -0
  906. package/dist/types/components/TriStateSwitch.d.ts +63 -0
  907. package/dist/types/components/VideoPlayer.d.ts +26 -0
  908. package/dist/types/components/auth/AcceptInvitationCard.d.ts +54 -0
  909. package/dist/types/components/auth/AuthLayout.d.ts +12 -0
  910. package/dist/types/components/auth/ForgotPasswordForm.d.ts +6 -0
  911. package/dist/types/components/auth/LoginForm.d.ts +13 -0
  912. package/dist/types/components/auth/ResetPasswordForm.d.ts +9 -0
  913. package/dist/types/components/auth/SignInProviders.d.ts +56 -0
  914. package/dist/types/components/auth/SignupCard.d.ts +62 -0
  915. package/dist/types/components/auth/TermsAcceptance.d.ts +14 -0
  916. package/dist/types/components/auth/index.d.ts +8 -0
  917. package/dist/types/components/board/context.d.ts +65 -0
  918. package/dist/types/components/board/recipe.d.ts +97 -0
  919. package/dist/types/components/calendar/CalendarMonth.d.ts +32 -0
  920. package/dist/types/components/calendar/CalendarTimeGrid.d.ts +74 -0
  921. package/dist/types/components/calendar/EventActions.d.ts +16 -0
  922. package/dist/types/components/calendar/format.d.ts +42 -0
  923. package/dist/types/components/calendar/palette.d.ts +17 -0
  924. package/dist/types/components/calendar/use-calendar-drag.d.ts +53 -0
  925. package/dist/types/components/calendar/use-event-keyboard.d.ts +23 -0
  926. package/dist/types/components/calendar/use-grid-navigation.d.ts +47 -0
  927. package/dist/types/components/calendar/use-now.d.ts +20 -0
  928. package/dist/types/components/card-face/AcRingGlyph.d.ts +20 -0
  929. package/dist/types/components/card-face/BoardCardAgentSlot.d.ts +19 -0
  930. package/dist/types/components/card-face/CardFace.d.ts +106 -0
  931. package/dist/types/components/card-face/CardTypeBadge.d.ts +21 -0
  932. package/dist/types/components/card-face/EffortBadge.d.ts +9 -0
  933. package/dist/types/components/card-face/GateRingGlyph.d.ts +22 -0
  934. package/dist/types/components/card-face/OverflowRow.d.ts +40 -0
  935. package/dist/types/components/card-face/TapTip.d.ts +15 -0
  936. package/dist/types/components/card-face/hit-area.d.ts +20 -0
  937. package/dist/types/components/card-face/vocabulary.d.ts +83 -0
  938. package/dist/types/components/chart/BarList.d.ts +27 -0
  939. package/dist/types/components/chart/LineChart.d.ts +64 -0
  940. package/dist/types/components/chart/ShareBar.d.ts +26 -0
  941. package/dist/types/components/chart/TimeSeriesChart.d.ts +60 -0
  942. package/dist/types/components/chart/label-metrics.d.ts +9 -0
  943. package/dist/types/components/chart/line-chart-axis.d.ts +14 -0
  944. package/dist/types/components/chart/line-chart-scale.d.ts +55 -0
  945. package/dist/types/components/chart/line-series-style.d.ts +14 -0
  946. package/dist/types/components/chart/share-bar-labels.d.ts +17 -0
  947. package/dist/types/components/chart/shared.d.ts +122 -0
  948. package/dist/types/components/chart/time-series-scale.d.ts +29 -0
  949. package/dist/types/components/chat/Attachment.d.ts +125 -0
  950. package/dist/types/components/chat/Chat.d.ts +60 -0
  951. package/dist/types/components/chat/Composer.d.ts +62 -0
  952. package/dist/types/components/chat/ContextMeter.d.ts +45 -0
  953. package/dist/types/components/chat/EffortControl.d.ts +23 -0
  954. package/dist/types/components/chat/FileCover.d.ts +14 -0
  955. package/dist/types/components/chat/Message.d.ts +66 -0
  956. package/dist/types/components/chat/MessageScroller.d.ts +18 -0
  957. package/dist/types/components/chat/ModelSelector.d.ts +44 -0
  958. package/dist/types/components/chat/StreamingMarkdown.d.ts +11 -0
  959. package/dist/types/components/chat/download-file.d.ts +7 -0
  960. package/dist/types/components/chat/file-icon.d.ts +29 -0
  961. package/dist/types/components/chat/types.d.ts +165 -0
  962. package/dist/types/components/checklist/StatusChecklist.d.ts +37 -0
  963. package/dist/types/components/checklist/index.d.ts +3 -0
  964. package/dist/types/components/checklist/tally.d.ts +19 -0
  965. package/dist/types/components/checklist/types.d.ts +28 -0
  966. package/dist/types/components/code-editor/context.d.ts +32 -0
  967. package/dist/types/components/code-editor/editing.d.ts +39 -0
  968. package/dist/types/components/code-editor/highlight.d.ts +20 -0
  969. package/dist/types/components/code-editor/recipe.d.ts +109 -0
  970. package/dist/types/components/date-timeline/DateTimeline.d.ts +99 -0
  971. package/dist/types/components/date-timeline/TimelineRow.d.ts +22 -0
  972. package/dist/types/components/date-timeline/useBarDrag.d.ts +15 -0
  973. package/dist/types/components/date-timeline/useMarkerDrag.d.ts +14 -0
  974. package/dist/types/components/date-timeline/useTimelineZoom.d.ts +23 -0
  975. package/dist/types/components/drag-drop/context.d.ts +85 -0
  976. package/dist/types/components/drag-drop/recipe.d.ts +163 -0
  977. package/dist/types/components/drag-drop/shift.d.ts +153 -0
  978. package/dist/types/components/edit/activation.d.ts +21 -0
  979. package/dist/types/components/edit/outcome.d.ts +29 -0
  980. package/dist/types/components/edit/use-edit-session.d.ts +77 -0
  981. package/dist/types/components/file-viewer/FileViewer.d.ts +2 -0
  982. package/dist/types/components/file-viewer/PageNumberJumpField.d.ts +9 -0
  983. package/dist/types/components/file-viewer/ViewerControls.d.ts +20 -0
  984. package/dist/types/components/file-viewer/ViewerRail.d.ts +10 -0
  985. package/dist/types/components/file-viewer/ViewerStage.d.ts +22 -0
  986. package/dist/types/components/file-viewer/frames.d.ts +28 -0
  987. package/dist/types/components/file-viewer/index.d.ts +3 -0
  988. package/dist/types/components/file-viewer/types.d.ts +70 -0
  989. package/dist/types/components/file-viewer/use-frame-cursor.d.ts +13 -0
  990. package/dist/types/components/file-viewer/use-viewer-keys.d.ts +24 -0
  991. package/dist/types/components/file-viewer/use-viewer-zoom.d.ts +29 -0
  992. package/dist/types/components/focus-web/FocusWeb.d.ts +3 -0
  993. package/dist/types/components/focus-web/index.d.ts +4 -0
  994. package/dist/types/components/focus-web/layout.d.ts +55 -0
  995. package/dist/types/components/focus-web/types.d.ts +131 -0
  996. package/dist/types/components/graph-explorer/GraphExplorer.d.ts +42 -0
  997. package/dist/types/components/graph-explorer/camera-math.d.ts +119 -0
  998. package/dist/types/components/graph-explorer/index.d.ts +5 -0
  999. package/dist/types/components/graph-explorer/tree-layout.d.ts +67 -0
  1000. package/dist/types/components/graph-explorer/types.d.ts +62 -0
  1001. package/dist/types/components/graph-explorer/use-camera.d.ts +81 -0
  1002. package/dist/types/components/graph-explorer/viewport-gesture.d.ts +32 -0
  1003. package/dist/types/components/kanban/KanbanBoard.d.ts +72 -0
  1004. package/dist/types/components/kanban/recipe.d.ts +73 -0
  1005. package/dist/types/components/kanban/types.d.ts +55 -0
  1006. package/dist/types/components/markdown/Affordances.d.ts +105 -0
  1007. package/dist/types/components/markdown/AttachmentStrip.d.ts +25 -0
  1008. package/dist/types/components/markdown/ImageUpload.d.ts +56 -0
  1009. package/dist/types/components/media-error.d.ts +11 -0
  1010. package/dist/types/components/nav-sections.d.ts +10 -0
  1011. package/dist/types/components/node-canvas/NodeCanvas.d.ts +66 -0
  1012. package/dist/types/components/node-canvas/index.d.ts +3 -0
  1013. package/dist/types/components/node-canvas/layout.d.ts +29 -0
  1014. package/dist/types/components/node-canvas/types.d.ts +207 -0
  1015. package/dist/types/components/node-canvas/use-canvas-gestures.d.ts +39 -0
  1016. package/dist/types/components/openapi/OpenApiViewer.d.ts +14 -0
  1017. package/dist/types/components/openapi/OperationCard.d.ts +33 -0
  1018. package/dist/types/components/openapi/SchemaView.d.ts +14 -0
  1019. package/dist/types/components/openapi/index.d.ts +6 -0
  1020. package/dist/types/components/openapi/resolve.d.ts +72 -0
  1021. package/dist/types/components/openapi/types.d.ts +128 -0
  1022. package/dist/types/components/overlay-shell.d.ts +48 -0
  1023. package/dist/types/components/overlay-stack.d.ts +18 -0
  1024. package/dist/types/components/paged-window/PageBlock.d.ts +31 -0
  1025. package/dist/types/components/provenance/ConfidenceBar.d.ts +118 -0
  1026. package/dist/types/components/provenance/ConfidenceMeter.d.ts +21 -0
  1027. package/dist/types/components/provenance/ConfidenceReadout.d.ts +17 -0
  1028. package/dist/types/components/provenance/ProvenanceBadge.d.ts +23 -0
  1029. package/dist/types/components/provenance/ProvenanceDetail.d.ts +109 -0
  1030. package/dist/types/components/provenance/ProvenanceDisclosure.d.ts +107 -0
  1031. package/dist/types/components/provenance/absence.d.ts +37 -0
  1032. package/dist/types/components/provenance/index.d.ts +7 -0
  1033. package/dist/types/components/provenance/types.d.ts +137 -0
  1034. package/dist/types/components/rbac/AccessRequestPanel.d.ts +92 -0
  1035. package/dist/types/components/rbac/AccountMenu.d.ts +46 -0
  1036. package/dist/types/components/rbac/AgentKeysList.d.ts +22 -0
  1037. package/dist/types/components/rbac/ApiKeysPanel.d.ts +26 -0
  1038. package/dist/types/components/rbac/ApiKeysTable.d.ts +65 -0
  1039. package/dist/types/components/rbac/Brand.d.ts +8 -0
  1040. package/dist/types/components/rbac/Can.d.ts +19 -0
  1041. package/dist/types/components/rbac/ChangePasswordForm.d.ts +18 -0
  1042. package/dist/types/components/rbac/DangerZone.d.ts +8 -0
  1043. package/dist/types/components/rbac/DevToolsPopover.d.ts +36 -0
  1044. package/dist/types/components/rbac/EndedLine.d.ts +21 -0
  1045. package/dist/types/components/rbac/InvitationsList.d.ts +39 -0
  1046. package/dist/types/components/rbac/InviteMembersDialog.d.ts +21 -0
  1047. package/dist/types/components/rbac/MembersPanel.d.ts +31 -0
  1048. package/dist/types/components/rbac/PermissionRequestPanel.d.ts +36 -0
  1049. package/dist/types/components/rbac/ProfileForm.d.ts +27 -0
  1050. package/dist/types/components/rbac/ProfilePage.d.ts +16 -0
  1051. package/dist/types/components/rbac/RBACProvider.d.ts +69 -0
  1052. package/dist/types/components/rbac/RoleEditorDialog.d.ts +28 -0
  1053. package/dist/types/components/rbac/RoleKeyPicker.d.ts +24 -0
  1054. package/dist/types/components/rbac/RolePermissionMatrix.d.ts +21 -0
  1055. package/dist/types/components/rbac/RolesPermissionsPage.d.ts +24 -0
  1056. package/dist/types/components/rbac/SessionsList.d.ts +35 -0
  1057. package/dist/types/components/rbac/TeamSettingsForm.d.ts +22 -0
  1058. package/dist/types/components/rbac/TeamSwitcher.d.ts +5 -0
  1059. package/dist/types/components/rbac/approvalPanelParts.d.ts +69 -0
  1060. package/dist/types/components/rbac/index.d.ts +25 -0
  1061. package/dist/types/components/rbac/permissionSections.d.ts +8 -0
  1062. package/dist/types/components/rbac/stagedForm.d.ts +25 -0
  1063. package/dist/types/components/rbac/types.d.ts +65 -0
  1064. package/dist/types/components/rbac/useStagedImage.d.ts +15 -0
  1065. package/dist/types/components/roadmap/PhaseManager.d.ts +19 -0
  1066. package/dist/types/components/roadmap/RoadmapItemCard.d.ts +51 -0
  1067. package/dist/types/components/roadmap/RoadmapPage.d.ts +12 -0
  1068. package/dist/types/components/roadmap/RoadmapSwimlaneBoard.d.ts +15 -0
  1069. package/dist/types/components/roadmap/TrackManager.d.ts +19 -0
  1070. package/dist/types/components/roadmap/UseCaseCard.d.ts +30 -0
  1071. package/dist/types/components/roadmap/UseCaseLedgerPage.d.ts +29 -0
  1072. package/dist/types/components/roadmap/chip-tones.d.ts +2 -0
  1073. package/dist/types/components/roadmap/derive.d.ts +39 -0
  1074. package/dist/types/components/roadmap/index.d.ts +10 -0
  1075. package/dist/types/components/roadmap/types.d.ts +86 -0
  1076. package/dist/types/components/stepper/Stepper.d.ts +79 -0
  1077. package/dist/types/components/stepper/derive.d.ts +49 -0
  1078. package/dist/types/components/stepper/index.d.ts +3 -0
  1079. package/dist/types/components/stepper/types.d.ts +118 -0
  1080. package/dist/types/icons/data.d.ts +2054 -0
  1081. package/dist/types/index.d.ts +209 -0
  1082. package/dist/types/lib/attention.d.ts +62 -0
  1083. package/dist/types/lib/board/anchor.d.ts +69 -0
  1084. package/dist/types/lib/board/index.d.ts +17 -0
  1085. package/dist/types/lib/board/model.d.ts +43 -0
  1086. package/dist/types/lib/board/move.d.ts +181 -0
  1087. package/dist/types/lib/board/position.d.ts +22 -0
  1088. package/dist/types/lib/board/rejection.d.ts +8 -0
  1089. package/dist/types/lib/board/types.d.ts +294 -0
  1090. package/dist/types/lib/board/use-board.d.ts +47 -0
  1091. package/dist/types/lib/calendar/band-packer.d.ts +53 -0
  1092. package/dist/types/lib/calendar/drag.d.ts +125 -0
  1093. package/dist/types/lib/calendar/index.d.ts +4 -0
  1094. package/dist/types/lib/calendar/lane-packer.d.ts +88 -0
  1095. package/dist/types/lib/calendar/segments.d.ts +91 -0
  1096. package/dist/types/lib/calendar/types.d.ts +166 -0
  1097. package/dist/types/lib/chart-palette.d.ts +14 -0
  1098. package/dist/types/lib/clipboard.d.ts +12 -0
  1099. package/dist/types/lib/cn.d.ts +7 -0
  1100. package/dist/types/lib/color.d.ts +14 -0
  1101. package/dist/types/lib/component-guidance.d.ts +15 -0
  1102. package/dist/types/lib/confidence.d.ts +28 -0
  1103. package/dist/types/lib/date-timeline/scale.d.ts +143 -0
  1104. package/dist/types/lib/design-frame/document.d.ts +39 -0
  1105. package/dist/types/lib/design-frame/mini-app-script.d.ts +29 -0
  1106. package/dist/types/lib/design-frame/mini-app.d.ts +17 -0
  1107. package/dist/types/lib/design-frame/protocol.d.ts +78 -0
  1108. package/dist/types/lib/dev-warn.d.ts +10 -0
  1109. package/dist/types/lib/dnd/announce.d.ts +124 -0
  1110. package/dist/types/lib/dnd/autoscroll.d.ts +88 -0
  1111. package/dist/types/lib/dnd/cross-drop.d.ts +18 -0
  1112. package/dist/types/lib/dnd/geometry.d.ts +126 -0
  1113. package/dist/types/lib/dnd/index.d.ts +17 -0
  1114. package/dist/types/lib/dnd/sensors/gesture.d.ts +37 -0
  1115. package/dist/types/lib/dnd/sensors/keyboard.d.ts +54 -0
  1116. package/dist/types/lib/dnd/sensors/pointer.d.ts +59 -0
  1117. package/dist/types/lib/dnd/session.d.ts +124 -0
  1118. package/dist/types/lib/dnd/types.d.ts +226 -0
  1119. package/dist/types/lib/dnd/use-drag.d.ts +82 -0
  1120. package/dist/types/lib/dom/scroll-ancestor.d.ts +15 -0
  1121. package/dist/types/lib/format.d.ts +33 -0
  1122. package/dist/types/lib/group-in-order.d.ts +13 -0
  1123. package/dist/types/lib/header-fold.d.ts +10 -0
  1124. package/dist/types/lib/i18n/areas/auth-provenance-flows.d.ts +287 -0
  1125. package/dist/types/lib/i18n/areas/board.d.ts +51 -0
  1126. package/dist/types/lib/i18n/areas/card-face.d.ts +8 -0
  1127. package/dist/types/lib/i18n/areas/chat-chart.d.ts +202 -0
  1128. package/dist/types/lib/i18n/areas/code-editor.d.ts +40 -0
  1129. package/dist/types/lib/i18n/areas/date-timeline.d.ts +36 -0
  1130. package/dist/types/lib/i18n/areas/dates.d.ts +103 -0
  1131. package/dist/types/lib/i18n/areas/docs-views.d.ts +297 -0
  1132. package/dist/types/lib/i18n/areas/feedback.d.ts +132 -0
  1133. package/dist/types/lib/i18n/areas/formats.d.ts +30 -0
  1134. package/dist/types/lib/i18n/areas/forms.d.ts +182 -0
  1135. package/dist/types/lib/i18n/areas/keys.d.ts +15 -0
  1136. package/dist/types/lib/i18n/areas/markdown.d.ts +150 -0
  1137. package/dist/types/lib/i18n/areas/move-rejected.d.ts +16 -0
  1138. package/dist/types/lib/i18n/areas/navigation.d.ts +185 -0
  1139. package/dist/types/lib/i18n/areas/rbac.d.ts +635 -0
  1140. package/dist/types/lib/i18n/emphasis.d.ts +3 -0
  1141. package/dist/types/lib/i18n/index.d.ts +10 -0
  1142. package/dist/types/lib/i18n/number-format.d.ts +5 -0
  1143. package/dist/types/lib/i18n/plural.d.ts +7 -0
  1144. package/dist/types/lib/i18n/provider.d.ts +16 -0
  1145. package/dist/types/lib/i18n/strings.d.ts +18 -0
  1146. package/dist/types/lib/icons.d.ts +22 -0
  1147. package/dist/types/lib/interactive-target.d.ts +3 -0
  1148. package/dist/types/lib/intl-cache.d.ts +31 -0
  1149. package/dist/types/lib/legal-document.d.ts +82 -0
  1150. package/dist/types/lib/line-diff-model.d.ts +39 -0
  1151. package/dist/types/lib/markdown/attachments.d.ts +50 -0
  1152. package/dist/types/lib/markdown/caret-map.d.ts +69 -0
  1153. package/dist/types/lib/markdown/caret.d.ts +6 -0
  1154. package/dist/types/lib/markdown/commands.d.ts +186 -0
  1155. package/dist/types/lib/markdown/convert.d.ts +99 -0
  1156. package/dist/types/lib/markdown/dom.d.ts +30 -0
  1157. package/dist/types/lib/markdown/edit.d.ts +16 -0
  1158. package/dist/types/lib/markdown/history.d.ts +59 -0
  1159. package/dist/types/lib/markdown/hotkeys.d.ts +63 -0
  1160. package/dist/types/lib/markdown/image-pipeline.d.ts +173 -0
  1161. package/dist/types/lib/markdown/images.d.ts +138 -0
  1162. package/dist/types/lib/markdown/input.d.ts +38 -0
  1163. package/dist/types/lib/markdown/keys.d.ts +34 -0
  1164. package/dist/types/lib/markdown/paste.d.ts +9 -0
  1165. package/dist/types/lib/markdown/position.d.ts +43 -0
  1166. package/dist/types/lib/markdown/project.d.ts +88 -0
  1167. package/dist/types/lib/markdown/reconcile.d.ts +63 -0
  1168. package/dist/types/lib/markdown/surface.d.ts +236 -0
  1169. package/dist/types/lib/motion.d.ts +30 -0
  1170. package/dist/types/lib/pad.d.ts +6 -0
  1171. package/dist/types/lib/paged-window/index.d.ts +2 -0
  1172. package/dist/types/lib/paged-window/layout.d.ts +21 -0
  1173. package/dist/types/lib/paged-window/list-owner.d.ts +12 -0
  1174. package/dist/types/lib/paged-window/records-binding.d.ts +102 -0
  1175. package/dist/types/lib/paged-window/store.d.ts +307 -0
  1176. package/dist/types/lib/paged-window/use-measured-pitch.d.ts +34 -0
  1177. package/dist/types/lib/paged-window/use-page-visibility.d.ts +20 -0
  1178. package/dist/types/lib/paged-window/use-paged-window.d.ts +61 -0
  1179. package/dist/types/lib/paged-window/use-scroll-root.d.ts +18 -0
  1180. package/dist/types/lib/persist.d.ts +57 -0
  1181. package/dist/types/lib/preference-values.d.ts +72 -0
  1182. package/dist/types/lib/preferences.d.ts +26 -0
  1183. package/dist/types/lib/reads/hooks.d.ts +49 -0
  1184. package/dist/types/lib/reads/index.d.ts +5 -0
  1185. package/dist/types/lib/reads/optimistic.d.ts +119 -0
  1186. package/dist/types/lib/reads/refetch.d.ts +83 -0
  1187. package/dist/types/lib/reads/slots.d.ts +137 -0
  1188. package/dist/types/lib/reads/types.d.ts +155 -0
  1189. package/dist/types/lib/realtime/hooks.d.ts +38 -0
  1190. package/dist/types/lib/realtime/index.d.ts +4 -0
  1191. package/dist/types/lib/realtime/provider.d.ts +38 -0
  1192. package/dist/types/lib/realtime/registry.d.ts +225 -0
  1193. package/dist/types/lib/realtime/types.d.ts +242 -0
  1194. package/dist/types/lib/records/define-record-type.d.ts +29 -0
  1195. package/dist/types/lib/records/hooks.d.ts +46 -0
  1196. package/dist/types/lib/records/index.d.ts +5 -0
  1197. package/dist/types/lib/records/store.d.ts +289 -0
  1198. package/dist/types/lib/records/types.d.ts +195 -0
  1199. package/dist/types/lib/records/wire.d.ts +96 -0
  1200. package/dist/types/lib/reduced-motion-help.d.ts +23 -0
  1201. package/dist/types/lib/scroll-caret.d.ts +6 -0
  1202. package/dist/types/lib/sim/createSimStore.d.ts +18 -0
  1203. package/dist/types/lib/sim/index.d.ts +5 -0
  1204. package/dist/types/lib/sim/latency.d.ts +10 -0
  1205. package/dist/types/lib/sim/registry.d.ts +14 -0
  1206. package/dist/types/lib/sim/settings.d.ts +11 -0
  1207. package/dist/types/lib/sim/types.d.ts +3 -0
  1208. package/dist/types/lib/submit-shortcut.d.ts +24 -0
  1209. package/dist/types/lib/syntax/index.d.ts +16 -0
  1210. package/dist/types/lib/syntax/languages/bash.d.ts +1 -0
  1211. package/dist/types/lib/syntax/languages/css.d.ts +1 -0
  1212. package/dist/types/lib/syntax/languages/html.d.ts +17 -0
  1213. package/dist/types/lib/syntax/languages/index.d.ts +33 -0
  1214. package/dist/types/lib/syntax/languages/javascript.d.ts +22 -0
  1215. package/dist/types/lib/syntax/languages/json.d.ts +1 -0
  1216. package/dist/types/lib/syntax/languages/mongodb.d.ts +1 -0
  1217. package/dist/types/lib/syntax/languages/plain.d.ts +9 -0
  1218. package/dist/types/lib/syntax/languages/sql.d.ts +4 -0
  1219. package/dist/types/lib/syntax/languages/vue.d.ts +1 -0
  1220. package/dist/types/lib/syntax/languages/yaml.d.ts +1 -0
  1221. package/dist/types/lib/syntax/markdown/frames.d.ts +145 -0
  1222. package/dist/types/lib/syntax/markdown/grammar.d.ts +1 -0
  1223. package/dist/types/lib/syntax/markdown/index.d.ts +5 -0
  1224. package/dist/types/lib/syntax/markdown/inline.d.ts +21 -0
  1225. package/dist/types/lib/syntax/markdown/parse.d.ts +15 -0
  1226. package/dist/types/lib/syntax/markdown/refs.d.ts +47 -0
  1227. package/dist/types/lib/syntax/markdown/render.d.ts +25 -0
  1228. package/dist/types/lib/syntax/markdown/spans.d.ts +84 -0
  1229. package/dist/types/lib/syntax/markdown/types.d.ts +108 -0
  1230. package/dist/types/lib/syntax/registry.d.ts +37 -0
  1231. package/dist/types/lib/syntax/tokenize.d.ts +17 -0
  1232. package/dist/types/lib/syntax/types.d.ts +119 -0
  1233. package/dist/types/lib/time/index.d.ts +4 -0
  1234. package/dist/types/lib/time/instant.d.ts +2 -0
  1235. package/dist/types/lib/time/plain.d.ts +61 -0
  1236. package/dist/types/lib/time/relativeAge.d.ts +18 -0
  1237. package/dist/types/lib/time/relativeClock.d.ts +8 -0
  1238. package/dist/types/lib/time/types.d.ts +87 -0
  1239. package/dist/types/lib/time/zone.d.ts +106 -0
  1240. package/dist/types/lib/use-controllable.d.ts +14 -0
  1241. package/dist/types/lib/use-fill-height.d.ts +26 -0
  1242. package/dist/types/lib/use-hydrated.d.ts +8 -0
  1243. package/dist/types/lib/use-media-query.d.ts +29 -0
  1244. package/dist/types/lib/use-relabel-base-ui-dismiss.d.ts +6 -0
  1245. package/dist/types/lib/use-release-snap-drag.d.ts +25 -0
  1246. package/dist/types/lib/use-roving-options.d.ts +10 -0
  1247. package/dist/types/lib/values/absent.d.ts +7 -0
  1248. package/dist/types/lib/values/boolean.d.ts +29 -0
  1249. package/dist/types/lib/values/currency.d.ts +22 -0
  1250. package/dist/types/lib/values/date.d.ts +30 -0
  1251. package/dist/types/lib/values/datetime.d.ts +48 -0
  1252. package/dist/types/lib/values/index.d.ts +5 -0
  1253. package/dist/types/lib/values/locale-date.d.ts +34 -0
  1254. package/dist/types/lib/values/number.d.ts +27 -0
  1255. package/dist/types/pure.d.ts +48 -0
  1256. package/package.json +136 -4
@@ -0,0 +1,68 @@
1
+ import { useState as h, useMemo as M, useRef as A, useLayoutEffect as I, useCallback as d } from "react";
2
+ import { zoomAtPoint as y, fitWidth as V, fitBox as _ } from "../graph-explorer/camera-math.js";
3
+ import { useViewportGesture as B } from "../graph-explorer/viewport-gesture.js";
4
+ const r = { minScale: 0.05, maxScale: 8 }, S = 1.25, b = 1e-3, F = { x: 0, y: 0, scale: 1 };
5
+ function f(o, n) {
6
+ return n !== null && Math.abs(o.scale - n.scale) < b;
7
+ }
8
+ function R(o, n, a) {
9
+ return o === "width" ? V(n, a, r) : _({ x: 0, y: 0, ...n }, a, { ...r, padding: 0, maxScale: 1 });
10
+ }
11
+ function D({ frameKey: o, fit: n }) {
12
+ const [a, l] = h(F), [e, C] = h(null), [g, E] = h(null), s = g?.key === o ? g.size : null, t = M(
13
+ () => n && s && e && e.width > 0 && e.height > 0 ? R(n, s, e) : null,
14
+ [n, s, e]
15
+ ), p = A({ key: "", fit: null }), m = s ? `${o}|${s.width}x${s.height}` : o;
16
+ I(() => {
17
+ if (!t) return;
18
+ const i = p.current, u = i.key === m;
19
+ p.current = { key: m, fit: t }, l(
20
+ (c) => !u || f(c, i.fit) ? t : c
21
+ );
22
+ }, [t, m]);
23
+ const z = B({
24
+ camera: a,
25
+ setCamera: l,
26
+ zoomBounds: r,
27
+ onResize: C,
28
+ disabled: n === null
29
+ }), w = d(
30
+ (i) => {
31
+ e && l(
32
+ (u) => y(u, { x: e.width / 2, y: e.height / 2 }, i, r)
33
+ );
34
+ },
35
+ [e]
36
+ ), O = d(() => {
37
+ t && l(t);
38
+ }, [t]), x = f(a, t), T = t !== null && !(x && Math.abs(t.scale - 1) < b), k = d(
39
+ (i) => {
40
+ if (!t) return;
41
+ const u = i ?? { x: (e?.width ?? 0) / 2, y: (e?.height ?? 0) / 2 };
42
+ l(
43
+ (c) => f(c, t) ? y(c, u, 1 / c.scale, r) : t
44
+ );
45
+ },
46
+ [t, e]
47
+ );
48
+ return {
49
+ camera: a,
50
+ /** Whole-number percent, null until the frame has been measured. */
51
+ percent: s ? Math.round(a.scale * 100) : null,
52
+ measured: s !== null,
53
+ atFit: x,
54
+ canToggle: T,
55
+ panning: z.panning,
56
+ bindViewport: z.bindViewport,
57
+ setContentSize: (i) => E({ key: o, size: i }),
58
+ zoomIn: () => w(S),
59
+ zoomOut: () => w(1 / S),
60
+ reset: O,
61
+ toggleActual: k
62
+ };
63
+ }
64
+ export {
65
+ r as VIEWER_ZOOM_BOUNDS,
66
+ D as useViewerZoom
67
+ };
68
+ //# sourceMappingURL=use-viewer-zoom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-viewer-zoom.js","sources":["../../../src/components/file-viewer/use-viewer-zoom.ts"],"sourcesContent":["import { useCallback, useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport {\n fitBox,\n fitWidth,\n zoomAtPoint,\n type CameraState,\n type ScaleBounds,\n type Size,\n} from \"../graph-explorer/camera-math\";\nimport { useViewportGesture } from \"../graph-explorer/viewport-gesture\";\n\n/* ============================================================================\n VIEWER ZOOM (DX-4398)\n\n The file viewer's zoom is a `CameraState` — the same camera the graph explorer\n moves — so the algebra is not written twice: zoom at the pointer is\n `zoomAtPoint`, the clamp is `clampScale`, fit-whole is `fitBox`, fit-width is\n `fitWidth`, and the wheel / drag / pinch session is `useViewportGesture`.\n What is left here is the DOCUMENT's own concerns: which fit a frame opens at,\n re-fitting on a new frame or a resized stage, \"am I at fit\", and\n double-click between 100% and fit.\n\n FIT DEPENDS ON THE FRAME. A page opens fit-width, top-aligned (a page of text\n read whole is unreadable; fit the width and scroll down). An image opens whole\n (fit-contain, centred) and is never scaled ABOVE 100%: fit-width alone would\n blow a 64px icon up thirty times and crop a tall screenshot.\n\n A MANUAL ZOOM SURVIVES A RESIZE, A NEW FRAME DOES NOT. Resizing the stage\n while at fit refits (the fit moved, the reader did not); while zoomed by hand\n the reader's zoom is kept. A different frame always refits.\n ========================================================================= */\n\n/** The zoom range of the viewer: far enough out to see a wide page whole, far\n enough in to read a signature. */\nexport const VIEWER_ZOOM_BOUNDS: ScaleBounds = { minScale: 0.05, maxScale: 8 };\n\n/** One key press or button click of zoom. */\nconst ZOOM_STEP = 1.25;\n\n/** Two scales this close are the same zoom. */\nconst AT_FIT_TOLERANCE = 0.001;\n\nexport type ViewerFit = \"width\" | \"contain\";\n\nconst IDENTITY: CameraState = { x: 0, y: 0, scale: 1 };\n\n/** Whether `camera` is at `fit`: the same zoom, wherever it has been panned to. */\nfunction isAtFit(camera: CameraState, fit: CameraState | null): boolean {\n return fit !== null && Math.abs(camera.scale - fit.scale) < AT_FIT_TOLERANCE;\n}\n\nfunction fitCameraFor(fit: ViewerFit, content: Size, stage: Size): CameraState {\n if (fit === \"width\") return fitWidth(content, stage, VIEWER_ZOOM_BOUNDS);\n return fitBox({ x: 0, y: 0, ...content }, stage, { ...VIEWER_ZOOM_BOUNDS, padding: 0, maxScale: 1 });\n}\n\nexport interface UseViewerZoomOptions {\n /** Changing this is a different frame: refit. */\n frameKey: string;\n /** How the frame opens. Null: the frame is not zoomable (video, a plain file). */\n fit: ViewerFit | null;\n}\n\nexport function useViewerZoom({ frameKey, fit }: UseViewerZoomOptions) {\n const [camera, setCamera] = useState<CameraState>(IDENTITY);\n const [stage, setStage] = useState<Size | null>(null);\n /* Keyed by frame, so a size measured for the previous frame is never read as\n this one's. */\n const [content, setContentState] = useState<{ key: string; size: Size } | null>(null);\n const size = content?.key === frameKey ? content.size : null;\n\n const fitCamera = useMemo(\n () => (fit && size && stage && stage.width > 0 && stage.height > 0 ? fitCameraFor(fit, size, stage) : null),\n [fit, size, stage],\n );\n\n /* Refit when the frame or its measured size changes, always; when only the\n stage changed, only if the reader was still at the previous fit. A layout\n effect, so the first paint of a frame is already fitted. */\n const applied = useRef<{ key: string; fit: CameraState | null }>({ key: \"\", fit: null });\n const sizeKey = size ? `${frameKey}|${size.width}x${size.height}` : frameKey;\n useLayoutEffect(() => {\n if (!fitCamera) return;\n const before = applied.current;\n const same = before.key === sizeKey;\n applied.current = { key: sizeKey, fit: fitCamera };\n setCamera((current) =>\n !same || isAtFit(current, before.fit) ? fitCamera : current,\n );\n }, [fitCamera, sizeKey]);\n\n const gesture = useViewportGesture({\n camera,\n setCamera,\n zoomBounds: VIEWER_ZOOM_BOUNDS,\n onResize: setStage,\n disabled: fit === null,\n });\n\n const zoomBy = useCallback(\n (factor: number) => {\n if (!stage) return;\n setCamera((current) =>\n zoomAtPoint(current, { x: stage.width / 2, y: stage.height / 2 }, factor, VIEWER_ZOOM_BOUNDS),\n );\n },\n [stage],\n );\n\n const reset = useCallback(() => {\n if (fitCamera) setCamera(fitCamera);\n }, [fitCamera]);\n\n const atFit = isAtFit(camera, fitCamera);\n /** At fit AND fit is 100% (an image smaller than the stage): there is nothing\n for fit <-> 100% to toggle, so the control is not offered. */\n const canToggle = fitCamera !== null && !(atFit && Math.abs(fitCamera.scale - 1) < AT_FIT_TOLERANCE);\n\n /** Fit <-> 100%, held where the reader pointed, else at the centre of the stage\n (what the buttons do, like zoom in and out). */\n const toggleActual = useCallback(\n (point?: { x: number; y: number }) => {\n if (!fitCamera) return;\n const about = point ?? { x: (stage?.width ?? 0) / 2, y: (stage?.height ?? 0) / 2 };\n setCamera((current) =>\n isAtFit(current, fitCamera) ? zoomAtPoint(current, about, 1 / current.scale, VIEWER_ZOOM_BOUNDS) : fitCamera,\n );\n },\n [fitCamera, stage],\n );\n\n return {\n camera,\n /** Whole-number percent, null until the frame has been measured. */\n percent: size ? Math.round(camera.scale * 100) : null,\n measured: size !== null,\n atFit,\n canToggle,\n panning: gesture.panning,\n bindViewport: gesture.bindViewport,\n setContentSize: (next: Size) => setContentState({ key: frameKey, size: next }),\n zoomIn: () => zoomBy(ZOOM_STEP),\n zoomOut: () => zoomBy(1 / ZOOM_STEP),\n reset,\n toggleActual,\n };\n}\n"],"names":["VIEWER_ZOOM_BOUNDS","ZOOM_STEP","AT_FIT_TOLERANCE","IDENTITY","isAtFit","camera","fit","fitCameraFor","content","stage","fitWidth","fitBox","useViewerZoom","frameKey","setCamera","useState","setStage","setContentState","size","fitCamera","useMemo","applied","useRef","sizeKey","useLayoutEffect","before","same","current","gesture","useViewportGesture","zoomBy","useCallback","factor","zoomAtPoint","reset","atFit","canToggle","toggleActual","point","about","next"],"mappings":"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"}
@@ -0,0 +1,322 @@
1
+ import { jsx as r, jsxs as I } from "react/jsx-runtime";
2
+ import { useId as ee, useMemo as j, useRef as te, useState as k, useCallback as ne, useLayoutEffect as oe } from "react";
3
+ import { cn as g } from "../../lib/cn.js";
4
+ import { useBelow as ae } from "../../lib/use-media-query.js";
5
+ import { isPaletteKey as se, paletteFor as ce } from "../calendar/palette.js";
6
+ import { Icon as C } from "../Icon.js";
7
+ import { layoutRing as re, PARENT_POSITION as M, CENTER_POSITION as S, WIDE_RING_THRESHOLD as ie, labelOverhang as le } from "./layout.js";
8
+ import { useUiStrings as de } from "../../lib/i18n/provider.js";
9
+ const fe = /* @__PURE__ */ new Set(["ArrowUp", "u", "U", "Backspace"]);
10
+ function G(o) {
11
+ if (!o || !se(o))
12
+ return {
13
+ "--fw-disc": "var(--color-accent)",
14
+ "--fw-on-disc": "var(--color-accent-contrast)",
15
+ "--fw-pill": "var(--color-accent)",
16
+ "--fw-pill-text": "var(--color-accent-contrast)",
17
+ "--fw-pill-edge": "var(--color-accent)"
18
+ };
19
+ const t = ce(o);
20
+ return {
21
+ "--fw-disc": t.edge,
22
+ "--fw-on-disc": t.fill,
23
+ "--fw-pill": t.fill,
24
+ "--fw-pill-text": t.text,
25
+ "--fw-pill-edge": t.edge
26
+ };
27
+ }
28
+ function ue({ node: o, context: t }) {
29
+ const { role: c, compact: l, active: x, selected: v, labelPlacement: h } = t, d = c === "center", b = c === "parent", E = d || x || v, y = d || v, _ = /* @__PURE__ */ r(
30
+ "span",
31
+ {
32
+ className: g(
33
+ "font-semibold",
34
+ b ? "whitespace-nowrap text-secondary group-hover:text-primary" : "w-max text-center text-balance break-words",
35
+ l ? "text-2xs" : "text-xs",
36
+ /* DX-4070: `w-max` + the role's `max-w` makes the label's own width its preferred one, capped, so a node near
37
+ the plane's edge (whose absolute slot has little room to its right) wraps at word breaks inside the cap instead
38
+ of squeezing to a letter per line. A pill label wraps to several lines at 72/32 max width. `rounded-full` on a tall box is a radius of
39
+ half its height, so the wrapped lines' corners poke through the curve; `rounded-xl` is the same full pill on a
40
+ one-line label (the radius clamps to half the height) and a fixed, text-safe corner on a multi-line one. */
41
+ y && "rounded-xl border border-(--fw-pill-edge) bg-(--fw-pill) px-3 py-1 text-(--fw-pill-text) shadow-sm",
42
+ d && (l ? "max-w-32" : "max-w-72"),
43
+ c === "ring" && (l ? "max-w-20" : "max-w-32"),
44
+ c === "ring" && !y && (x ? "text-primary" : "text-secondary")
45
+ ),
46
+ children: o.label
47
+ }
48
+ );
49
+ return /* @__PURE__ */ I(
50
+ "span",
51
+ {
52
+ className: g(
53
+ "flex items-center gap-1.5",
54
+ h === "beside" ? "flex-row" : h === "above" ? "flex-col-reverse" : "flex-col"
55
+ ),
56
+ children: [
57
+ /* @__PURE__ */ I(
58
+ "span",
59
+ {
60
+ "aria-hidden": "true",
61
+ className: g(
62
+ "dx-focus-web__disc relative flex shrink-0 items-center justify-center rounded-full",
63
+ /* One size source: `--fw-disc-size`, set on the slot by
64
+ `discSizeVar` — the slot's own anchor reads the same value. */
65
+ "size-(--fw-disc-size)",
66
+ E ? "bg-(--fw-disc) text-(--fw-on-disc) shadow-lg" : "bg-surface-raised text-secondary shadow-md ring-1 ring-border",
67
+ !d && "group-hover:scale-110"
68
+ ),
69
+ children: [
70
+ d && /* @__PURE__ */ r("span", { className: "dx-focus-web__ping absolute inset-0 rounded-full bg-(--fw-disc)" }),
71
+ o.badge && !b && /* DX-4041: a corner marker, drawn on the disc so it scales and glides with it. `left-[70%]` starts it
72
+ inside the disc's right edge and lets it run outward — the label sits below/above, never here. */
73
+ /* @__PURE__ */ r(
74
+ "span",
75
+ {
76
+ "data-slot": "focus-web-badge",
77
+ className: "absolute -top-1.5 left-[70%] z-10 flex flex-col items-start gap-0.5",
78
+ children: o.badge
79
+ }
80
+ ),
81
+ b ? /* @__PURE__ */ r(C, { name: "arrow-up", size: "sm", className: "relative" }) : o.icon ? /* @__PURE__ */ r(C, { name: o.icon, size: d ? "lg" : l ? "sm" : "md", className: "relative" }) : (
82
+ /* Decoration, like the icon it stands in for: the disc is
83
+ aria-hidden and the full label sits right beside it, so this
84
+ letter needs the 3:1 of a graphic, which the disc pair clears. */
85
+ /* @__PURE__ */ r("span", { className: "relative font-semibold", children: o.label.slice(0, 1).toUpperCase() })
86
+ )
87
+ ]
88
+ }
89
+ ),
90
+ o.badge && b ? /* @__PURE__ */ I("span", { className: "flex flex-col items-start gap-0.5", children: [
91
+ _,
92
+ /* @__PURE__ */ r("span", { "data-slot": "focus-web-badge", className: "flex items-center gap-0.5", children: o.badge })
93
+ ] }) : _,
94
+ o.badge && o.badgeLabel && /* @__PURE__ */ r("span", { className: "sr-only", children: o.badgeLabel })
95
+ ]
96
+ }
97
+ );
98
+ }
99
+ function pe(o, t) {
100
+ return `calc(var(--spacing) * ${o === "center" ? t ? 14 : 16 : o === "ring" ? t ? 10 : 12 : 8})`;
101
+ }
102
+ function be(o, t) {
103
+ return o === "beside" ? "0 -50%" : t ? "-50% -50%" : o === "above" ? "-50% calc(-100% + var(--fw-disc-size) / 2)" : "-50% calc(var(--fw-disc-size) / -2)";
104
+ }
105
+ function me(o) {
106
+ const t = /* @__PURE__ */ new Set();
107
+ for (const c of o) {
108
+ if (t.has(c))
109
+ throw new Error(`FocusWeb: node id "${c}" appears more than once across center, parent and ring — every id must be unique`);
110
+ t.add(c);
111
+ }
112
+ }
113
+ function we(o) {
114
+ return o.map((t) => t.node.id).join("\0");
115
+ }
116
+ function _e({
117
+ center: o,
118
+ ring: t,
119
+ parent: c,
120
+ onSelect: l,
121
+ onUp: x,
122
+ selectedId: v,
123
+ onSelectCenter: h,
124
+ renderNode: d,
125
+ label: b,
126
+ className: E
127
+ }) {
128
+ const y = ee(), _ = de().focusWeb, O = j(() => re(t.map((e) => e.id)), [t]), R = ae("sm"), $ = te(null), [H, Y] = k({ top: 0, bottom: 0 }), f = j(() => {
129
+ const e = [];
130
+ return c && e.push({ node: c, role: "parent", leftPct: M.leftPct, topPct: M.topPct, index: null, tier: null, placement: "beside" }), e.push({ node: o, role: "center", leftPct: S.leftPct, topPct: S.topPct, index: null, tier: null, placement: "below" }), t.forEach((n, a) => {
131
+ const s = O[a], m = s.topPct < S.topPct - 1 ? "above" : "below";
132
+ e.push({ node: n, role: "ring", leftPct: s.leftPct, topPct: s.topPct, index: a, tier: s.tier, placement: m });
133
+ }), me(e.map((n) => n.node.id)), e;
134
+ }, [o, c, t, O]), z = we(f), [K, P] = k(null), [D, J] = k(() => ({
135
+ key: z,
136
+ ids: new Set(f.map((e) => e.node.id)),
137
+ entering: new Set(f.map((e) => e.node.id))
138
+ }));
139
+ if (D.key !== z) {
140
+ const e = new Set(f.map((n) => n.node.id));
141
+ J({ key: z, ids: e, entering: new Set([...e].filter((n) => !D.ids.has(n))) }), P(null);
142
+ }
143
+ const [T, B] = k(null), q = T && t.some((e) => e.id === T) ? T : t[0]?.id ?? null, F = ne(
144
+ (e) => {
145
+ B(e), l(e);
146
+ },
147
+ [l]
148
+ );
149
+ function A(e) {
150
+ e && (B(e), document.getElementById(V(y, e))?.focus());
151
+ }
152
+ function U(e) {
153
+ if (t.length === 0) return;
154
+ const n = Math.max(
155
+ 0,
156
+ t.findIndex((a) => a.id === q)
157
+ );
158
+ A(t[(n + e + t.length) % t.length].id);
159
+ }
160
+ function Q(e, n) {
161
+ switch (e.key) {
162
+ case "ArrowLeft":
163
+ e.preventDefault(), U(-1);
164
+ return;
165
+ case "ArrowRight":
166
+ e.preventDefault(), U(1);
167
+ return;
168
+ case "Home":
169
+ e.preventDefault(), A(t[0]?.id);
170
+ return;
171
+ case "End":
172
+ e.preventDefault(), A(t[t.length - 1]?.id);
173
+ return;
174
+ case "Enter":
175
+ case " ":
176
+ e.preventDefault(), F(n);
177
+ return;
178
+ default:
179
+ c && fe.has(e.key) && (e.preventDefault(), x?.());
180
+ }
181
+ }
182
+ const L = !!d;
183
+ oe(() => {
184
+ const e = $.current;
185
+ if (!e) return;
186
+ const n = () => {
187
+ const s = e.clientHeight;
188
+ if (s === 0) return;
189
+ const m = new Map(f.map((i) => [i.node.id, i])), N = [];
190
+ for (const i of e.querySelectorAll("[data-focus-web-node]")) {
191
+ const w = m.get(i.dataset.focusWebNode ?? "");
192
+ w && N.push({
193
+ topPct: w.topPct,
194
+ height: i.offsetHeight,
195
+ disc: i.querySelector(".dx-focus-web__disc")?.offsetHeight ?? 0,
196
+ placement: w.placement,
197
+ custom: L
198
+ });
199
+ }
200
+ const u = le(N, s);
201
+ Y((i) => i.top === u.top && i.bottom === u.bottom ? i : u);
202
+ };
203
+ n();
204
+ const a = new ResizeObserver(n);
205
+ a.observe(e);
206
+ for (const s of e.querySelectorAll("[data-focus-web-node]")) a.observe(s);
207
+ return () => a.disconnect();
208
+ }, [f, L, R]);
209
+ const X = R ? "3 / 4" : t.length > ie ? "16 / 9" : "12 / 5";
210
+ return /* @__PURE__ */ r(
211
+ "div",
212
+ {
213
+ role: "group",
214
+ "aria-label": b,
215
+ className: g("focus-web w-full select-none", E),
216
+ style: { paddingTop: H.top, paddingBottom: H.bottom },
217
+ children: /* @__PURE__ */ I("div", { ref: $, "data-focus-web-plane": "", className: "relative w-full", style: { aspectRatio: X }, children: [
218
+ /* @__PURE__ */ r(
219
+ "svg",
220
+ {
221
+ "aria-hidden": "true",
222
+ viewBox: "0 0 100 100",
223
+ preserveAspectRatio: "none",
224
+ className: "pointer-events-none absolute inset-0 size-full overflow-visible",
225
+ children: f.filter((e) => e.role === "ring").map((e) => {
226
+ const n = e.node.id === K, a = e.node.id === v;
227
+ return /* @__PURE__ */ r(
228
+ "line",
229
+ {
230
+ x1: S.leftPct,
231
+ y1: S.topPct,
232
+ x2: e.leftPct,
233
+ y2: e.topPct,
234
+ vectorEffect: "non-scaling-stroke",
235
+ "data-active": n || a ? "" : void 0,
236
+ "data-selected": a ? "" : void 0,
237
+ className: "dx-focus-web__spoke",
238
+ style: { ...G(e.node.paletteKey), "--dx-fw-order": String(e.index ?? 0) }
239
+ },
240
+ `spoke-${o.id}-${e.node.id}`
241
+ );
242
+ })
243
+ }
244
+ ),
245
+ f.map((e) => {
246
+ const { node: n, role: a } = e, s = a === "ring", m = s && n.id === v, N = s && n.id === q, u = a !== "center" || !!h, i = a !== "center" && n.id === K, w = a === "center" ? "location" : m ? "page" : void 0, W = {
247
+ role: a,
248
+ index: e.index,
249
+ tier: e.tier,
250
+ isTabStop: N,
251
+ active: i,
252
+ selected: m,
253
+ labelPlacement: e.placement,
254
+ compact: R
255
+ }, Z = D.entering.has(n.id);
256
+ return /* @__PURE__ */ I(
257
+ "div",
258
+ {
259
+ "data-focus-web-node": n.id,
260
+ "data-focus-web-center": a === "center" ? "" : void 0,
261
+ "data-focus-web-ring": s ? n.id : void 0,
262
+ "data-focus-web-parent": a === "parent" ? "" : void 0,
263
+ "aria-current": u ? void 0 : w,
264
+ className: g(
265
+ "dx-focus-web__node group absolute",
266
+ a === "center" ? "z-20" : "z-10",
267
+ Z && (s ? "dx-focus-web__node--fan-out" : "dx-focus-web__node--appear")
268
+ ),
269
+ style: {
270
+ ...G(n.paletteKey),
271
+ left: `${e.leftPct}%`,
272
+ top: `${e.topPct}%`,
273
+ translate: be(e.placement, L),
274
+ "--fw-disc-size": pe(a, R),
275
+ "--dx-fw-order": String(e.index ?? 0)
276
+ },
277
+ children: [
278
+ /* @__PURE__ */ r("div", { "aria-hidden": u ? "true" : void 0, children: d ? d(n, W) : /* @__PURE__ */ r(ue, { node: n, context: W }) }),
279
+ u && /* @__PURE__ */ r(
280
+ "button",
281
+ {
282
+ type: "button",
283
+ id: s ? V(y, n.id) : void 0,
284
+ "aria-label": ge(a, n, _),
285
+ "aria-current": w,
286
+ tabIndex: s ? N ? 0 : -1 : 0,
287
+ onPointerEnter: () => {
288
+ a !== "center" && P(n.id);
289
+ },
290
+ onPointerLeave: () => P((p) => p === n.id ? null : p),
291
+ onFocus: () => {
292
+ a !== "center" && P(n.id), s && B(n.id);
293
+ },
294
+ onBlur: () => P((p) => p === n.id ? null : p),
295
+ onKeyDown: s ? (p) => Q(p, n.id) : void 0,
296
+ onClick: () => s ? F(n.id) : a === "parent" ? x?.() : h?.(),
297
+ className: g(
298
+ "absolute -inset-1.5 cursor-pointer rounded-xl outline-none",
299
+ "focus-visible:ring-2 focus-visible:ring-accent-border"
300
+ )
301
+ }
302
+ )
303
+ ]
304
+ },
305
+ n.id
306
+ );
307
+ })
308
+ ] })
309
+ }
310
+ );
311
+ }
312
+ function ge(o, t, c) {
313
+ const l = o === "parent" ? c.upTo(t.label) : t.label;
314
+ return t.badge && t.badgeLabel ? c.withBadge(l, t.badgeLabel) : l;
315
+ }
316
+ function V(o, t) {
317
+ return `focus-web${o}-ring-${t}`;
318
+ }
319
+ export {
320
+ _e as FocusWeb
321
+ };
322
+ //# sourceMappingURL=FocusWeb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FocusWeb.js","sources":["../../../src/components/focus-web/FocusWeb.tsx"],"sourcesContent":["import { useCallback, useId, useLayoutEffect, useMemo, useRef, useState, type CSSProperties } from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { useUiStrings, type UiStrings } from \"../../lib/i18n\";\nimport { useBelow } from \"../../lib/use-media-query\";\nimport { isPaletteKey, paletteFor } from \"../calendar/palette\";\nimport { Icon } from \"../Icon\";\nimport { CENTER_POSITION, PARENT_POSITION, WIDE_RING_THRESHOLD, labelOverhang, layoutRing, type SlotBox } from \"./layout\";\nimport type { FocusNodeRenderContext, FocusNodeRole, FocusWebNode, FocusWebProps } from \"./types\";\n\nexport type { FocusWebProps } from \"./types\";\n\n/* ============================================================================\n FOCUS WEB — the component. (DX-3431, rebuilt DX-3451)\n\n ONE SLOT PER NODE ID, WHATEVER ROLE IT PLAYS. Every node on screen — the\n centre, each ring node, the parent — is ONE absolutely-positioned slot,\n keyed by the node's own `id`, in ONE list. When the caller recentres (the\n clicked ring node becomes `center`, the old centre becomes `parent`), React\n keeps the very same DOM element for each id that survives, and only its\n role — and therefore its `left`/`top` and its size — changes. A CSS\n transition on those properties then carries it there:\n\n - the clicked node GLIDES from its ring slot to dead centre and grows;\n - the old centre glides to the corner and shrinks into the up button;\n - going up, the parent glides from the corner back to the centre and the\n old centre glides out into its own ring slot;\n - every node that was not on screen a moment ago FANS OUT from the centre\n (a staggered keyframe from `left/top: 50%`, see components.css), and its\n spoke grows out with it.\n\n DX-3451 is why this is one list. DX-3431 drew the centre in its own unkeyed\n `<div>` and the ring as keyed `<button>`s — so the clicked ring button was\n UNMOUNTED on recentre and the centre div merely swapped its text. No\n element ever travelled; the operator saw no animation at all, and was right.\n\n WHY THE BUTTON IS AN OVERLAY, NOT THE SLOT. A ring node is interactive and\n the centre is not (clicking the node you are already on has nothing to do).\n Were the slot itself a `<button>` for ring nodes and a `<div>` for the\n centre, the element TYPE would change on recentre and React would remount\n it — destroying exactly the element whose glide is the point. So the slot\n is always a `<div>`; the body inside it always has the same shape (disc,\n then label — the disc's own size transition is what makes it grow/shrink);\n and a transparent `<button>` is laid over the slot only while the node is a\n ring node or the parent. Adding or removing that sibling never touches the\n body before it.\n\n MOTION PREFERENCES — A DOCUMENTED EXCEPTION TO THE TRAVEL RULE. motion.css\n says that under reduced motion \"what goes to zero is TRAVEL\". FocusWeb\n keeps its travel and only shortens it (every duration is a motion token,\n halved by `--motion-scale`), because here the travel IS the information:\n the glide is what tells a reader that the node they clicked became the\n centre and the old centre became the way back up. Cut it, and a recentre\n is an unexplained swap of the whole widget — the \"no animation\" the\n operator rejected. PLN-12 §4 asks for exactly this: \"real animation,\n shorter under reduced motion but still visible\". The same argument\n `Choice.tsx` makes for its own carve-out. What reduced motion DOES remove\n here is the two LOOPING effects (the centre's ping, the marching spokes),\n in components.css: continuous motion is what that preference exists for.\n\n IDS MUST BE UNIQUE ACROSS centre, parent AND ring — one keyed list means a\n repeated id is a duplicate React key, a duplicate spoke key and a\n duplicate DOM id. FocusWeb throws on one rather than rendering a web\n whose glide silently attaches to the wrong element.\n ========================================================================= */\n\nconst UP_KEYS = new Set([\"ArrowUp\", \"u\", \"U\", \"Backspace\"]);\n\ntype SwatchVars = CSSProperties & Record<`--fw-${string}`, string>;\n\n/** The five colour roles a node body paints with, from its `paletteKey` —\n or the accent pair when it has none. Set as custom properties on the slot\n so the body, its ping and its spoke all read the SAME values. */\nfunction swatchVars(paletteKey: string | undefined): SwatchVars {\n /* An unknown key is treated like no key (the accent), not like the\n calendar's fallback swatch: a consumer validating its own data (the\n docs app's `check` does) never sends one, and an accent-coloured node is\n the honest \"no colour identity\" look rather than a borrowed one. */\n if (!paletteKey || !isPaletteKey(paletteKey)) {\n return {\n \"--fw-disc\": \"var(--color-accent)\",\n \"--fw-on-disc\": \"var(--color-accent-contrast)\",\n \"--fw-pill\": \"var(--color-accent)\",\n \"--fw-pill-text\": \"var(--color-accent-contrast)\",\n \"--fw-pill-edge\": \"var(--color-accent)\",\n };\n }\n const swatch = paletteFor(paletteKey);\n /* The disc is the swatch's EDGE colour with its FILL colour on top: the\n palette guarantees edge-on-fill clears 3:1 (a graphic), and edge is the\n saturated end of the pair — a solid, legible disc in both themes. The\n pill carries TEXT, so it uses the 4.5:1 text-on-fill pair instead. */\n return {\n \"--fw-disc\": swatch.edge,\n \"--fw-on-disc\": swatch.fill,\n \"--fw-pill\": swatch.fill,\n \"--fw-pill-text\": swatch.text,\n \"--fw-pill-edge\": swatch.edge,\n };\n}\n\nfunction DefaultFocusNodeBody({ node, context }: { node: FocusWebNode; context: FocusNodeRenderContext }) {\n const { role, compact, active, selected, labelPlacement } = context;\n const isCenter = role === \"center\";\n const isParent = role === \"parent\";\n const lit = isCenter || active || selected;\n const pill = isCenter || selected;\n\n const label = (\n <span\n className={cn(\n \"font-semibold\",\n isParent ? \"whitespace-nowrap text-secondary group-hover:text-primary\" : \"w-max text-center text-balance break-words\",\n compact ? \"text-2xs\" : \"text-xs\",\n /* DX-4070: `w-max` + the role's `max-w` makes the label's own width its preferred one, capped, so a node near\n the plane's edge (whose absolute slot has little room to its right) wraps at word breaks inside the cap instead\n of squeezing to a letter per line. A pill label wraps to several lines at 72/32 max width. `rounded-full` on a tall box is a radius of\n half its height, so the wrapped lines' corners poke through the curve; `rounded-xl` is the same full pill on a\n one-line label (the radius clamps to half the height) and a fixed, text-safe corner on a multi-line one. */\n pill && \"rounded-xl border border-(--fw-pill-edge) bg-(--fw-pill) px-3 py-1 text-(--fw-pill-text) shadow-sm\",\n isCenter && (compact ? \"max-w-32\" : \"max-w-72\"),\n role === \"ring\" && (compact ? \"max-w-20\" : \"max-w-32\"),\n role === \"ring\" && !pill && (active ? \"text-primary\" : \"text-secondary\"),\n )}\n >\n {node.label}\n </span>\n );\n\n return (\n <span\n className={cn(\n \"flex items-center gap-1.5\",\n labelPlacement === \"beside\" ? \"flex-row\" : labelPlacement === \"above\" ? \"flex-col-reverse\" : \"flex-col\",\n )}\n >\n <span\n aria-hidden=\"true\"\n className={cn(\n \"dx-focus-web__disc relative flex shrink-0 items-center justify-center rounded-full\",\n /* One size source: `--fw-disc-size`, set on the slot by\n `discSizeVar` — the slot's own anchor reads the same value. */\n \"size-(--fw-disc-size)\",\n lit ? \"bg-(--fw-disc) text-(--fw-on-disc) shadow-lg\" : \"bg-surface-raised text-secondary shadow-md ring-1 ring-border\",\n !isCenter && \"group-hover:scale-110\",\n )}\n >\n {isCenter && <span className=\"dx-focus-web__ping absolute inset-0 rounded-full bg-(--fw-disc)\" />}\n {node.badge && !isParent && (\n /* DX-4041: a corner marker, drawn on the disc so it scales and glides with it. `left-[70%]` starts it\n inside the disc's right edge and lets it run outward — the label sits below/above, never here. */\n <span\n data-slot=\"focus-web-badge\"\n className=\"absolute -top-1.5 left-[70%] z-10 flex flex-col items-start gap-0.5\"\n >\n {node.badge}\n </span>\n )}\n {isParent ? (\n <Icon name=\"arrow-up\" size=\"sm\" className=\"relative\" />\n ) : node.icon ? (\n <Icon name={node.icon} size={isCenter ? \"lg\" : compact ? \"sm\" : \"md\"} className=\"relative\" />\n ) : (\n /* Decoration, like the icon it stands in for: the disc is\n aria-hidden and the full label sits right beside it, so this\n letter needs the 3:1 of a graphic, which the disc pair clears. */\n <span className=\"relative font-semibold\">{node.label.slice(0, 1).toUpperCase()}</span>\n )}\n </span>\n {/* The up affordance's label sits beside its small disc, so a corner badge would land on the label (and, at\n 375px, on the ring node above it): its badge stacks UNDER the label instead. */}\n {node.badge && isParent ? (\n <span className=\"flex flex-col items-start gap-0.5\">\n {label}\n <span data-slot=\"focus-web-badge\" className=\"flex items-center gap-0.5\">\n {node.badge}\n </span>\n </span>\n ) : (\n label\n )}\n {node.badge && node.badgeLabel && <span className=\"sr-only\">{node.badgeLabel}</span>}\n </span>\n );\n}\n\n/** The default body's disc diameter per role, as a CSS length in the\n library's own spacing unit — so it follows the user's size setting\n (`--spacing` carries `--ui-scale`) instead of assuming 1rem = 16px. Set\n as `--fw-disc-size` on the slot: the disc sizes itself from it AND the\n slot anchors by it, so the two can never disagree. */\nfunction discSizeVar(role: FocusNodeRole, compact: boolean): string {\n const steps = role === \"center\" ? (compact ? 14 : 16) : role === \"ring\" ? (compact ? 10 : 12) : 8;\n return `calc(var(--spacing) * ${steps})`;\n}\n\n/** The slot's `translate`. For the default body, the DISC's centre — not the\n centre of disc-plus-label — sits exactly on the node's point, which is\n where its spoke ends. A custom body's layout is unknown, so the whole\n body is centred on the point instead; see `FocusWebProps.renderNode`. */\nfunction slotTranslate(placement: \"below\" | \"above\" | \"beside\", custom: boolean): string {\n if (placement === \"beside\") return \"0 -50%\";\n if (custom) return \"-50% -50%\";\n return placement === \"above\"\n ? \"-50% calc(-100% + var(--fw-disc-size) / 2)\"\n : \"-50% calc(var(--fw-disc-size) / -2)\";\n}\n\n/** Fails loud on an id that appears twice across centre, parent and ring —\n see the module doc. */\nfunction assertUniqueIds(ids: readonly string[]): void {\n const seen = new Set<string>();\n for (const id of ids) {\n if (seen.has(id)) {\n throw new Error(`FocusWeb: node id \"${id}\" appears more than once across center, parent and ring — every id must be unique`);\n }\n seen.add(id);\n }\n}\n\ninterface Slot<Extra> {\n node: FocusWebNode<Extra>;\n role: FocusNodeRole;\n leftPct: number;\n topPct: number;\n index: number | null;\n tier: 0 | 1 | null;\n placement: \"above\" | \"below\" | \"beside\";\n}\n\n/** \"Which ids are on screen\" as one comparable string, in slot order. */\nfunction slotSetKey(slots: readonly { node: { id: string } }[]): string {\n return slots.map((slot) => slot.node.id).join(\"\\u0000\");\n}\n\nexport function FocusWeb<Extra = unknown>({\n center,\n ring,\n parent,\n onSelect,\n onUp,\n selectedId,\n onSelectCenter,\n renderNode,\n label,\n className,\n}: FocusWebProps<Extra>) {\n const reactId = useId();\n const strings = useUiStrings().focusWeb;\n const placedRing = useMemo(() => layoutRing(ring.map((n) => n.id)), [ring]);\n const compact = useBelow(\"sm\");\n const planeRef = useRef<HTMLDivElement>(null);\n const [overhang, setOverhang] = useState({ top: 0, bottom: 0 });\n\n /* DOM ORDER IS PARENT, CENTRE, RING — i.e. by tree depth — and that is\n load-bearing, not cosmetic. React MOVES an element (remove + re-insert)\n when a surviving keyed child changes position relative to another\n survivor, and a re-inserted element has no \"before\" style, so its glide\n never starts. Ordered by depth, the nodes that survive any recentre in a\n tree (an ancestor and a descendant, or two siblings under one unchanged\n centre) keep their relative order, so nothing is ever moved. Stacking is\n `z-index`, never DOM order. */\n const slots = useMemo<Slot<Extra>[]>(() => {\n const list: Slot<Extra>[] = [];\n if (parent) {\n list.push({ node: parent, role: \"parent\", leftPct: PARENT_POSITION.leftPct, topPct: PARENT_POSITION.topPct, index: null, tier: null, placement: \"beside\" });\n }\n list.push({ node: center, role: \"center\", leftPct: CENTER_POSITION.leftPct, topPct: CENTER_POSITION.topPct, index: null, tier: null, placement: \"below\" });\n ring.forEach((node, index) => {\n const placed = placedRing[index]!;\n /* Top-half ring labels grow upward, so they stay clear of the centre's own label. */\n const placement = placed.topPct < CENTER_POSITION.topPct - 1 ? \"above\" : \"below\";\n list.push({ node, role: \"ring\", leftPct: placed.leftPct, topPct: placed.topPct, index, tier: placed.tier, placement });\n });\n assertUniqueIds(list.map((slot) => slot.node.id));\n return list;\n }, [center, parent, ring, placedRing]);\n\n /* WHICH SLOTS ARE NEW — \"adjusting state while rendering\", React's own\n pattern for deriving from the previous render. Only a node that was NOT\n on screen in the previous DIFFERENT id-set fans out; one that survives a\n recentre glides via its transition instead. Keyed on the id-set, not on\n every render, so a hover re-render mid-animation never strips the class\n (and so never cuts a fan-out short). On first mount everything is new, so\n the whole web fans out once. */\n const setKey = slotSetKey(slots);\n const [activeId, setActiveId] = useState<string | null>(null);\n const [generation, setGeneration] = useState(() => ({\n key: setKey,\n ids: new Set(slots.map((s) => s.node.id)),\n entering: new Set(slots.map((s) => s.node.id)),\n }));\n if (generation.key !== setKey) {\n const ids = new Set(slots.map((s) => s.node.id));\n setGeneration({ key: setKey, ids, entering: new Set([...ids].filter((id) => !generation.ids.has(id))) });\n /* A recentre sends no pointer-leave to the node whose button just\n unmounted, so a hover would otherwise outlive it and light that node\n again whenever it returns to the ring. */\n setActiveId(null);\n }\n\n /* --- roving tab stop, scoped to the ring only (matches `Tree`/`GraphExplorer`'s\n own \"exactly one row in the tab order\" convention) --- */\n const [internalTabStop, setInternalTabStop] = useState<string | null>(null);\n const tabStopId = internalTabStop && ring.some((n) => n.id === internalTabStop) ? internalTabStop : (ring[0]?.id ?? null);\n\n const activate = useCallback(\n (id: string) => {\n setInternalTabStop(id);\n onSelect(id);\n },\n [onSelect],\n );\n\n function focusRing(id: string | undefined) {\n if (!id) return;\n setInternalTabStop(id);\n document.getElementById(ringDomId(reactId, id))?.focus();\n }\n\n function moveTabStop(delta: number) {\n if (ring.length === 0) return;\n const currentIndex = Math.max(\n 0,\n ring.findIndex((n) => n.id === tabStopId),\n );\n focusRing(ring[(currentIndex + delta + ring.length) % ring.length]!.id);\n }\n\n function onRingKeyDown(event: React.KeyboardEvent, id: string) {\n switch (event.key) {\n case \"ArrowLeft\":\n event.preventDefault();\n moveTabStop(-1);\n return;\n case \"ArrowRight\":\n event.preventDefault();\n moveTabStop(1);\n return;\n case \"Home\":\n event.preventDefault();\n focusRing(ring[0]?.id);\n return;\n case \"End\":\n event.preventDefault();\n focusRing(ring[ring.length - 1]?.id);\n return;\n case \"Enter\":\n case \" \":\n event.preventDefault();\n activate(id);\n return;\n default:\n if (parent && UP_KEYS.has(event.key)) {\n event.preventDefault();\n onUp?.();\n }\n }\n }\n\n /* DX-4219: ROOM FOR THE LABELS THAT LEAVE THE PLANE. The plane is a fixed aspect ratio and a ring node sits at a fixed\n percentage of it, so a multi-line label on a top or bottom node (the top one grows up from its disc) runs out of the\n plane and over whatever is above or below the web. Measure every slot's own box and pad the web by what sticks out.\n Sizes are read untransformed (`offsetHeight`) and anchors come from the target percentages, so a glide's\n movement never skews them (its disc-size transition does, and the observer re-measures as it settles); a ResizeObserver re-measures on a width change (the labels re-wrap) and when a\n slot's body resizes. Padding the outer box never moves the plane, so this cannot feed back into itself. */\n const custom = Boolean(renderNode);\n useLayoutEffect(() => {\n const plane = planeRef.current;\n if (!plane) return;\n const measure = () => {\n const planeHeight = plane.clientHeight;\n if (planeHeight === 0) return;\n const slotById = new Map(slots.map((s) => [s.node.id, s]));\n const boxes: SlotBox[] = [];\n for (const el of plane.querySelectorAll<HTMLElement>(\"[data-focus-web-node]\")) {\n const slot = slotById.get(el.dataset.focusWebNode ?? \"\");\n if (!slot) continue;\n boxes.push({\n topPct: slot.topPct,\n height: el.offsetHeight,\n disc: el.querySelector<HTMLElement>(\".dx-focus-web__disc\")?.offsetHeight ?? 0,\n placement: slot.placement,\n custom,\n });\n }\n const next = labelOverhang(boxes, planeHeight);\n setOverhang((prev) => (prev.top === next.top && prev.bottom === next.bottom ? prev : next));\n };\n measure();\n const observer = new ResizeObserver(measure);\n observer.observe(plane);\n for (const el of plane.querySelectorAll(\"[data-focus-web-node]\")) observer.observe(el);\n return () => observer.disconnect();\n }, [slots, custom, compact]);\n\n /* 12/5 is the legacy page's own wide band for a single ring; a wide ring\n needs the extra height of 16/9. Crossing WIDE_RING_THRESHOLD on a\n recentre changes the plane's height at once (accepted: a docs tree's\n rings sit on one side of the threshold in practice). */\n const aspectRatio = compact ? \"3 / 4\" : ring.length > WIDE_RING_THRESHOLD ? \"16 / 9\" : \"12 / 5\";\n\n return (\n <div\n role=\"group\"\n aria-label={label}\n className={cn(\"focus-web w-full select-none\", className)}\n style={{ paddingTop: overhang.top, paddingBottom: overhang.bottom }}\n >\n <div ref={planeRef} data-focus-web-plane=\"\" className=\"relative w-full\" style={{ aspectRatio }}>\n {/* Spokes — one dashed line per ring node, in a 0-100 coordinate space\n stretched to the container (`preserveAspectRatio=\"none\"`), so a\n percentage here is exactly the percentage on a slot's `left`/`top`.\n `non-scaling-stroke` keeps the width and dashes in screen pixels\n despite that stretch. Keyed by centre AND child, so a recentre\n remounts every spoke and it grows out from the centre in step with\n its node's fan-out (components.css). */}\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 100 100\"\n preserveAspectRatio=\"none\"\n className=\"pointer-events-none absolute inset-0 size-full overflow-visible\"\n >\n {slots\n .filter((slot) => slot.role === \"ring\")\n .map((slot) => {\n const active = slot.node.id === activeId;\n const selected = slot.node.id === selectedId;\n return (\n <line\n key={`spoke-${center.id}-${slot.node.id}`}\n x1={CENTER_POSITION.leftPct}\n y1={CENTER_POSITION.topPct}\n x2={slot.leftPct}\n y2={slot.topPct}\n vectorEffect=\"non-scaling-stroke\"\n data-active={active || selected ? \"\" : undefined}\n data-selected={selected ? \"\" : undefined}\n className=\"dx-focus-web__spoke\"\n style={{ ...swatchVars(slot.node.paletteKey), \"--dx-fw-order\": String(slot.index ?? 0) } as CSSProperties}\n />\n );\n })}\n </svg>\n\n {slots.map((slot) => {\n const { node, role } = slot;\n const isRing = role === \"ring\";\n const selected = isRing && node.id === selectedId;\n const isTabStop = isRing && node.id === tabStopId;\n const clickable = role !== \"center\" || Boolean(onSelectCenter);\n const active = role !== \"center\" && node.id === activeId;\n // I18N-ALLOW: aria-current enumeration values\n const current = role === \"center\" ? \"location\" : selected ? \"page\" : undefined;\n const context: FocusNodeRenderContext = {\n role,\n index: slot.index,\n tier: slot.tier,\n isTabStop,\n active,\n selected,\n labelPlacement: slot.placement,\n compact,\n };\n const entering = generation.entering.has(node.id);\n\n return (\n <div\n key={node.id}\n data-focus-web-node={node.id}\n data-focus-web-center={role === \"center\" ? \"\" : undefined}\n data-focus-web-ring={isRing ? node.id : undefined}\n data-focus-web-parent={role === \"parent\" ? \"\" : undefined}\n aria-current={clickable ? undefined : current}\n className={cn(\n \"dx-focus-web__node group absolute\",\n role === \"center\" ? \"z-20\" : \"z-10\",\n entering && (isRing ? \"dx-focus-web__node--fan-out\" : \"dx-focus-web__node--appear\"),\n )}\n style={\n {\n ...swatchVars(node.paletteKey),\n left: `${slot.leftPct}%`,\n top: `${slot.topPct}%`,\n translate: slotTranslate(slot.placement, custom),\n \"--fw-disc-size\": discSizeVar(role, compact),\n \"--dx-fw-order\": String(slot.index ?? 0),\n } as CSSProperties\n }\n >\n <div aria-hidden={clickable ? \"true\" : undefined}>\n {renderNode ? renderNode(node, context) : <DefaultFocusNodeBody node={node as FocusWebNode} context={context} />}\n </div>\n\n {clickable && (\n <button\n type=\"button\"\n id={isRing ? ringDomId(reactId, node.id) : undefined}\n aria-label={buttonName(role, node, strings)}\n aria-current={current}\n tabIndex={isRing ? (isTabStop ? 0 : -1) : 0}\n onPointerEnter={() => {\n if (role !== \"center\") setActiveId(node.id);\n }}\n onPointerLeave={() => setActiveId((current) => (current === node.id ? null : current))}\n onFocus={() => {\n if (role !== \"center\") setActiveId(node.id);\n if (isRing) setInternalTabStop(node.id);\n }}\n onBlur={() => setActiveId((current) => (current === node.id ? null : current))}\n onKeyDown={isRing ? (event) => onRingKeyDown(event, node.id) : undefined}\n onClick={() => (isRing ? activate(node.id) : role === \"parent\" ? onUp?.() : onSelectCenter?.())}\n className={cn(\n \"absolute -inset-1.5 cursor-pointer rounded-xl outline-none\",\n \"focus-visible:ring-2 focus-visible:ring-accent-border\",\n )}\n />\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\n/** The clickable overlay's accessible name. The body beneath it is `aria-hidden`, so a node's\n `badgeLabel` (DX-4041) has to ride on the name or a screen reader never hears the marker. */\nfunction buttonName(role: FocusNodeRole, node: FocusWebNode<unknown>, strings: UiStrings[\"focusWeb\"]): string {\n const name = role === \"parent\" ? strings.upTo(node.label) : node.label;\n return node.badge && node.badgeLabel ? strings.withBadge(name, node.badgeLabel) : name;\n}\n\nfunction ringDomId(reactId: string, nodeId: string): string {\n return `focus-web${reactId}-ring-${nodeId}`;\n}\n"],"names":["UP_KEYS","swatchVars","paletteKey","isPaletteKey","swatch","paletteFor","DefaultFocusNodeBody","node","context","role","compact","active","selected","labelPlacement","isCenter","isParent","lit","pill","label","jsx","cn","jsxs","Icon","discSizeVar","slotTranslate","placement","custom","assertUniqueIds","ids","seen","id","slotSetKey","slots","slot","FocusWeb","center","ring","parent","onSelect","onUp","selectedId","onSelectCenter","renderNode","className","reactId","useId","strings","useUiStrings","placedRing","useMemo","layoutRing","n","useBelow","planeRef","useRef","overhang","setOverhang","useState","list","PARENT_POSITION","CENTER_POSITION","index","placed","setKey","activeId","setActiveId","generation","setGeneration","s","internalTabStop","setInternalTabStop","tabStopId","activate","useCallback","focusRing","ringDomId","moveTabStop","delta","currentIndex","onRingKeyDown","event","useLayoutEffect","plane","measure","planeHeight","slotById","boxes","el","next","labelOverhang","prev","observer","aspectRatio","WIDE_RING_THRESHOLD","isRing","isTabStop","clickable","current","entering","buttonName","name","nodeId"],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ const P = 10, r = { x: 38, y: 36 }, h = { x: 25, y: 23 }, p = { leftPct: 1, topPct: 9 }, l = { leftPct: 50, topPct: 50 };
2
+ function g(o) {
3
+ return o === 2 ? -180 : -90;
4
+ }
5
+ function i(o, c, n) {
6
+ const t = (g(c) + 360 / c * o) * Math.PI / 180;
7
+ return {
8
+ leftPct: l.leftPct + n.x * Math.cos(t),
9
+ topPct: l.topPct + n.y * Math.sin(t)
10
+ };
11
+ }
12
+ function I(o, c = 10) {
13
+ const n = o.length, e = n > c;
14
+ return o.map((t, s) => {
15
+ const a = e && s % 2 === 1 ? 1 : 0;
16
+ return { id: t, tier: a, ...i(s, n, a === 1 ? h : r) };
17
+ });
18
+ }
19
+ function f(o, c) {
20
+ let n = 0, e = 0;
21
+ for (const t of o) {
22
+ const s = t.topPct / 100 * c, a = t.placement === "beside" || t.custom ? s - t.height / 2 : t.placement === "above" ? s - t.height + t.disc / 2 : s - t.disc / 2;
23
+ n = Math.max(n, -a), e = Math.max(e, a + t.height - c);
24
+ }
25
+ return { top: Math.ceil(n), bottom: Math.ceil(e) };
26
+ }
27
+ export {
28
+ l as CENTER_POSITION,
29
+ p as PARENT_POSITION,
30
+ P as WIDE_RING_THRESHOLD,
31
+ f as labelOverhang,
32
+ I as layoutRing
33
+ };
34
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sources":["../../../src/components/focus-web/layout.ts"],"sourcesContent":["/* ============================================================================\n FOCUS WEB — pure ring geometry. (DX-3431)\n\n Kept framework-free and DOM-free (same reasoning `graph-view.ts` in the\n docs app gives for its own pure helpers) so ring placement is unit-testable\n without jsdom, and so `FocusWeb.tsx` never has to reconcile \"what the\n layout says\" with \"what actually rendered\" — it just reads this back.\n\n A SINGLE RING, ELLIPTICAL, EVENLY SPACED — the direct re-implementation of\n the legacy Vue page's own layout (`dashboard/src/components/docs/\n DocsPage.vue`, read-only reference, `RADIUS_X`/`RADIUS_Y`, `-90 + (360/n)*i`\n starting at 12 o'clock and going clockwise). Percentages, not pixels: the\n caller draws the ring inside a container of ITS OWN aspect ratio, and a\n percentage-based radius scales with it for free — including down to 375px\n (PLN-12 architecture §4 \"works at 375px\").\n\n TWO TIERS PAST `WIDE_RING_THRESHOLD`, STAGGERED — DX-3451. Past about ten\n nodes a single ring crowds its labels, because label WIDTH (not node\n spacing) is what collides. So a wide ring still gives EVERY node its own\n evenly-spaced angle, exactly like a narrow one, and alternates the radius\n (outer, inner, outer, ...) by ring position. Neighbouring labels are then\n separated radially as well as angularly, and — the reason it replaced\n DX-3431's two independent circles — no spoke ever passes through another\n node: every node sits on its own angle, so a spoke to an outer node runs\n between two inner ones instead of over them. (Two independently spaced\n circles put an inner node within a few degrees of an outer node's spoke\n for most counts — measured at 11 nodes: 4° apart.) Rejected alternatives:\n a scrolling/paginated ring (breaks \"one hop, all at once\"); shrinking label\n font at high counts (collides with \"full titles, never truncated\").\n ========================================================================= */\n\n/** Ids at or below this count get ONE ring; more get two concentric ones. */\nexport const WIDE_RING_THRESHOLD = 10;\n\ninterface Radius {\n x: number;\n y: number;\n}\n\n/** Percent-of-container radii, elliptical to fit a landscape box (matching\n the legacy page's own `RADIUS_X`/`RADIUS_Y` for the same reason: a\n consumer draws this inside a wide rectangle, not a square). */\nconst OUTER_RADIUS: Radius = { x: 38, y: 36 };\nconst INNER_RADIUS: Radius = { x: 25, y: 23 };\n\n/** Fixed corner slot for the \"up\" affordance, never part of the ring itself.\n DX-3451: this is the slot's LEFT edge (the parent node is anchored by its\n left side, not its centre — FocusWeb.tsx), so a long parent title grows\n rightward into the plane instead of hanging off the left edge the way the\n legacy page's centre-anchored `left: 7%` button did. */\nexport const PARENT_POSITION: { leftPct: number; topPct: number } = { leftPct: 1, topPct: 9 };\n\nexport const CENTER_POSITION: { leftPct: number; topPct: number } = { leftPct: 50, topPct: 50 };\n\nexport interface PlacedRingNode {\n id: string;\n leftPct: number;\n topPct: number;\n /** Which concentric ring this sits on. `0` (outer) for every node while the\n ring is at or below `WIDE_RING_THRESHOLD`. */\n tier: 0 | 1;\n}\n\n/** Where the first node sits. 12 o'clock, like the legacy page — except for\n exactly TWO nodes (DX-3451): 12 and 6 o'clock would stack them above and\n below the centre in a landscape web, crowding the centre's own label and\n leaving the wide sides empty, so a pair sits at 9 and 3 o'clock instead. */\nfunction startAngleDeg(total: number): number {\n return total === 2 ? -180 : -90;\n}\n\n/** A point on an ellipse of the given radius, `index` of `total` evenly\n spaced steps starting at `startAngleDeg` and proceeding clockwise — the same\n convention the legacy page used, kept so a reader who knows that page\n recognises this one immediately. */\nfunction pointOnEllipse(index: number, total: number, radius: Radius): { leftPct: number; topPct: number } {\n const angleDeg = startAngleDeg(total) + (360 / total) * index;\n const angle = (angleDeg * Math.PI) / 180;\n return {\n leftPct: CENTER_POSITION.leftPct + radius.x * Math.cos(angle),\n topPct: CENTER_POSITION.topPct + radius.y * Math.sin(angle),\n };\n}\n\n/**\n * Places `ids` (already in the caller's desired order — see `types.ts`'s\n * module doc) evenly around the centre: one ring at or below `threshold`,\n * otherwise the same even angles with the radius alternating outer/inner.\n * Pure and total: an empty array places nothing, and the result is always\n * the same length as `ids`, in the SAME order, so a caller can zip it back\n * against its own node array by index without a lookup.\n */\nexport function layoutRing(ids: readonly string[], threshold: number = WIDE_RING_THRESHOLD): PlacedRingNode[] {\n const n = ids.length;\n const staggered = n > threshold;\n return ids.map((id, index) => {\n const tier: 0 | 1 = staggered && index % 2 === 1 ? 1 : 0;\n return { id, tier, ...pointOnEllipse(index, n, tier === 1 ? INNER_RADIUS : OUTER_RADIUS) };\n });\n}\n\n/** One slot's measured vertical box, for `labelOverhang`. `height` is the slot body's own layout height (disc plus\n label), `disc` the disc's diameter: both in px, both read untransformed so a glide in flight cannot skew them. */\nexport interface SlotBox {\n topPct: number;\n height: number;\n disc: number;\n placement: \"above\" | \"below\" | \"beside\";\n /** A caller's own body: centred whole on its point (see `slotTranslate` in FocusWeb.tsx). */\n custom: boolean;\n}\n\n/**\n * DX-4219: how far the slots' boxes run above and below the plane's own `planeHeight`-px box. The plane is a fixed\n * aspect ratio and the ring sits at fixed percentages of it, so a top node's label (it grows UP from its disc) or a\n * bottom node's (it grows DOWN) leaves the plane by however many lines it wraps to — into whatever sits above or\n * below the web. The component pads the web by exactly this, so every label sits inside the web's own area.\n *\n * The vertical placement mirrors `slotTranslate` in FocusWeb.tsx: that function is the one place the slot's\n * `translate` is decided, and this is its arithmetic on measured sizes.\n */\nexport function labelOverhang(boxes: readonly SlotBox[], planeHeight: number): { top: number; bottom: number } {\n let top = 0;\n let bottom = 0;\n for (const box of boxes) {\n const anchor = (box.topPct / 100) * planeHeight;\n const first =\n box.placement === \"beside\" || box.custom\n ? anchor - box.height / 2\n : box.placement === \"above\"\n ? anchor - box.height + box.disc / 2\n : anchor - box.disc / 2;\n top = Math.max(top, -first);\n bottom = Math.max(bottom, first + box.height - planeHeight);\n }\n return { top: Math.ceil(top), bottom: Math.ceil(bottom) };\n}\n"],"names":["WIDE_RING_THRESHOLD","OUTER_RADIUS","INNER_RADIUS","PARENT_POSITION","CENTER_POSITION","startAngleDeg","total","pointOnEllipse","index","radius","angle","layoutRing","ids","threshold","staggered","id","tier","labelOverhang","boxes","planeHeight","top","bottom","box","anchor","first"],"mappings":"AAgCO,MAAMA,IAAsB,IAU7BC,IAAuB,EAAE,GAAG,IAAI,GAAG,GAAA,GACnCC,IAAuB,EAAE,GAAG,IAAI,GAAG,GAAA,GAO5BC,IAAuD,EAAE,SAAS,GAAG,QAAQ,EAAA,GAE7EC,IAAuD,EAAE,SAAS,IAAI,QAAQ,GAAA;AAe3F,SAASC,EAAcC,GAAuB;AAC5C,SAAOA,MAAU,IAAI,OAAO;AAC9B;AAMA,SAASC,EAAeC,GAAeF,GAAeG,GAAqD;AAEzG,QAAMC,KADWL,EAAcC,CAAK,IAAK,MAAMA,IAASE,KAC9B,KAAK,KAAM;AACrC,SAAO;AAAA,IACL,SAASJ,EAAgB,UAAUK,EAAO,IAAI,KAAK,IAAIC,CAAK;AAAA,IAC5D,QAAQN,EAAgB,SAASK,EAAO,IAAI,KAAK,IAAIC,CAAK;AAAA,EAAA;AAE9D;AAUO,SAASC,EAAWC,GAAwBC,IAAoB,IAAuC;AAC5G,QAAM,IAAID,EAAI,QACRE,IAAY,IAAID;AACtB,SAAOD,EAAI,IAAI,CAACG,GAAIP,MAAU;AAC5B,UAAMQ,IAAcF,KAAaN,IAAQ,MAAM,IAAI,IAAI;AACvD,WAAO,EAAE,IAAAO,GAAI,MAAAC,GAAM,GAAGT,EAAeC,GAAO,GAAGQ,MAAS,IAAId,IAAeD,CAAY,EAAA;AAAA,EACzF,CAAC;AACH;AAsBO,SAASgB,EAAcC,GAA2BC,GAAsD;AAC7G,MAAIC,IAAM,GACNC,IAAS;AACb,aAAWC,KAAOJ,GAAO;AACvB,UAAMK,IAAUD,EAAI,SAAS,MAAOH,GAC9BK,IACJF,EAAI,cAAc,YAAYA,EAAI,SAC9BC,IAASD,EAAI,SAAS,IACtBA,EAAI,cAAc,UAChBC,IAASD,EAAI,SAASA,EAAI,OAAO,IACjCC,IAASD,EAAI,OAAO;AAC5B,IAAAF,IAAM,KAAK,IAAIA,GAAK,CAACI,CAAK,GAC1BH,IAAS,KAAK,IAAIA,GAAQG,IAAQF,EAAI,SAASH,CAAW;AAAA,EAC5D;AACA,SAAO,EAAE,KAAK,KAAK,KAAKC,CAAG,GAAG,QAAQ,KAAK,KAAKC,CAAM,EAAA;AACxD;"}