@50arms/ui 0.0.0-stage → 35.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1256) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +193 -2
  3. package/dist/components/Accordion.js +68 -0
  4. package/dist/components/Accordion.js.map +1 -0
  5. package/dist/components/AgentWorkingSpinner.js +46 -0
  6. package/dist/components/AgentWorkingSpinner.js.map +1 -0
  7. package/dist/components/AppShell.js +228 -0
  8. package/dist/components/AppShell.js.map +1 -0
  9. package/dist/components/Attention.js +130 -0
  10. package/dist/components/Attention.js.map +1 -0
  11. package/dist/components/Avatar.js +99 -0
  12. package/dist/components/Avatar.js.map +1 -0
  13. package/dist/components/Badge.js +143 -0
  14. package/dist/components/Badge.js.map +1 -0
  15. package/dist/components/Board.js +292 -0
  16. package/dist/components/Board.js.map +1 -0
  17. package/dist/components/Button.js +327 -0
  18. package/dist/components/Button.js.map +1 -0
  19. package/dist/components/Callout.js +106 -0
  20. package/dist/components/Callout.js.map +1 -0
  21. package/dist/components/Card.js +140 -0
  22. package/dist/components/Card.js.map +1 -0
  23. package/dist/components/Choice.js +361 -0
  24. package/dist/components/Choice.js.map +1 -0
  25. package/dist/components/CodeEditor.js +384 -0
  26. package/dist/components/CodeEditor.js.map +1 -0
  27. package/dist/components/ColorPicker.js +174 -0
  28. package/dist/components/ColorPicker.js.map +1 -0
  29. package/dist/components/Combobox.js +212 -0
  30. package/dist/components/Combobox.js.map +1 -0
  31. package/dist/components/CommandPalette.js +163 -0
  32. package/dist/components/CommandPalette.js.map +1 -0
  33. package/dist/components/ConcentricRing.js +60 -0
  34. package/dist/components/ConcentricRing.js.map +1 -0
  35. package/dist/components/ConnectionCard.js +98 -0
  36. package/dist/components/ConnectionCard.js.map +1 -0
  37. package/dist/components/ContextItemRow.js +49 -0
  38. package/dist/components/ContextItemRow.js.map +1 -0
  39. package/dist/components/CopyValue.js +57 -0
  40. package/dist/components/CopyValue.js.map +1 -0
  41. package/dist/components/CountBadge.js +26 -0
  42. package/dist/components/CountBadge.js.map +1 -0
  43. package/dist/components/DateCalendar.js +156 -0
  44. package/dist/components/DateCalendar.js.map +1 -0
  45. package/dist/components/DateField.js +166 -0
  46. package/dist/components/DateField.js.map +1 -0
  47. package/dist/components/DatePicker.js +56 -0
  48. package/dist/components/DatePicker.js.map +1 -0
  49. package/dist/components/DateTimeText.js +19 -0
  50. package/dist/components/DateTimeText.js.map +1 -0
  51. package/dist/components/DescriptionList.js +25 -0
  52. package/dist/components/DescriptionList.js.map +1 -0
  53. package/dist/components/Dialog.js +332 -0
  54. package/dist/components/Dialog.js.map +1 -0
  55. package/dist/components/DragDrop.js +395 -0
  56. package/dist/components/DragDrop.js.map +1 -0
  57. package/dist/components/Drawer.js +100 -0
  58. package/dist/components/Drawer.js.map +1 -0
  59. package/dist/components/EditGutter.js +110 -0
  60. package/dist/components/EditGutter.js.map +1 -0
  61. package/dist/components/EmojiPicker.js +174 -0
  62. package/dist/components/EmojiPicker.js.map +1 -0
  63. package/dist/components/ErrorBoundary.js +47 -0
  64. package/dist/components/ErrorBoundary.js.map +1 -0
  65. package/dist/components/Field.js +115 -0
  66. package/dist/components/Field.js.map +1 -0
  67. package/dist/components/FileUpload.js +128 -0
  68. package/dist/components/FileUpload.js.map +1 -0
  69. package/dist/components/FilterMenu.js +256 -0
  70. package/dist/components/FilterMenu.js.map +1 -0
  71. package/dist/components/GatesSection.js +79 -0
  72. package/dist/components/GatesSection.js.map +1 -0
  73. package/dist/components/Icon.js +50 -0
  74. package/dist/components/Icon.js.map +1 -0
  75. package/dist/components/IconButton.js +59 -0
  76. package/dist/components/IconButton.js.map +1 -0
  77. package/dist/components/IconStack.js +69 -0
  78. package/dist/components/IconStack.js.map +1 -0
  79. package/dist/components/ImageUploadField.js +146 -0
  80. package/dist/components/ImageUploadField.js.map +1 -0
  81. package/dist/components/InlineEdit.js +432 -0
  82. package/dist/components/InlineEdit.js.map +1 -0
  83. package/dist/components/InlineMarkdownEdit.js +184 -0
  84. package/dist/components/InlineMarkdownEdit.js.map +1 -0
  85. package/dist/components/Input.js +156 -0
  86. package/dist/components/Input.js.map +1 -0
  87. package/dist/components/LegalDocument.js +155 -0
  88. package/dist/components/LegalDocument.js.map +1 -0
  89. package/dist/components/LineDiff.js +95 -0
  90. package/dist/components/LineDiff.js.map +1 -0
  91. package/dist/components/ListHeader.js +72 -0
  92. package/dist/components/ListHeader.js.map +1 -0
  93. package/dist/components/Loading.js +111 -0
  94. package/dist/components/Loading.js.map +1 -0
  95. package/dist/components/Markdown.js +28 -0
  96. package/dist/components/Markdown.js.map +1 -0
  97. package/dist/components/MarkdownEditor.js +467 -0
  98. package/dist/components/MarkdownEditor.js.map +1 -0
  99. package/dist/components/Menu.js +185 -0
  100. package/dist/components/Menu.js.map +1 -0
  101. package/dist/components/Navigation.js +87 -0
  102. package/dist/components/Navigation.js.map +1 -0
  103. package/dist/components/NumberInput.js +119 -0
  104. package/dist/components/NumberInput.js.map +1 -0
  105. package/dist/components/OTPInput.js +71 -0
  106. package/dist/components/OTPInput.js.map +1 -0
  107. package/dist/components/OrderedEntityManager.js +170 -0
  108. package/dist/components/OrderedEntityManager.js.map +1 -0
  109. package/dist/components/PagedWindowList.js +74 -0
  110. package/dist/components/PagedWindowList.js.map +1 -0
  111. package/dist/components/PaginationBar.js +95 -0
  112. package/dist/components/PaginationBar.js.map +1 -0
  113. package/dist/components/Panel.js +396 -0
  114. package/dist/components/Panel.js.map +1 -0
  115. package/dist/components/PasswordInput.js +32 -0
  116. package/dist/components/PasswordInput.js.map +1 -0
  117. package/dist/components/PasswordRequirements.js +25 -0
  118. package/dist/components/PasswordRequirements.js.map +1 -0
  119. package/dist/components/PatchDiff.js +96 -0
  120. package/dist/components/PatchDiff.js.map +1 -0
  121. package/dist/components/PendingVeil.js +18 -0
  122. package/dist/components/PendingVeil.js.map +1 -0
  123. package/dist/components/Popover.js +214 -0
  124. package/dist/components/Popover.js.map +1 -0
  125. package/dist/components/Progress.js +419 -0
  126. package/dist/components/Progress.js.map +1 -0
  127. package/dist/components/RatingScale.js +89 -0
  128. package/dist/components/RatingScale.js.map +1 -0
  129. package/dist/components/ReadMore.js +232 -0
  130. package/dist/components/ReadMore.js.map +1 -0
  131. package/dist/components/RecordCard.js +202 -0
  132. package/dist/components/RecordCard.js.map +1 -0
  133. package/dist/components/RelativeTime.js +29 -0
  134. package/dist/components/RelativeTime.js.map +1 -0
  135. package/dist/components/SandboxedFrame.js +135 -0
  136. package/dist/components/SandboxedFrame.js.map +1 -0
  137. package/dist/components/SearchInput.js +38 -0
  138. package/dist/components/SearchInput.js.map +1 -0
  139. package/dist/components/SecretField.js +228 -0
  140. package/dist/components/SecretField.js.map +1 -0
  141. package/dist/components/SectionNav.js +42 -0
  142. package/dist/components/SectionNav.js.map +1 -0
  143. package/dist/components/Select.js +172 -0
  144. package/dist/components/Select.js.map +1 -0
  145. package/dist/components/SequenceDiagram.js +109 -0
  146. package/dist/components/SequenceDiagram.js.map +1 -0
  147. package/dist/components/SettingRow.js +124 -0
  148. package/dist/components/SettingRow.js.map +1 -0
  149. package/dist/components/SignOffRings.js +36 -0
  150. package/dist/components/SignOffRings.js.map +1 -0
  151. package/dist/components/Slider.js +353 -0
  152. package/dist/components/Slider.js.map +1 -0
  153. package/dist/components/SolutionChoice.js +89 -0
  154. package/dist/components/SolutionChoice.js.map +1 -0
  155. package/dist/components/SortMenu.js +75 -0
  156. package/dist/components/SortMenu.js.map +1 -0
  157. package/dist/components/Spinner.js +42 -0
  158. package/dist/components/Spinner.js.map +1 -0
  159. package/dist/components/Stat.js +148 -0
  160. package/dist/components/Stat.js.map +1 -0
  161. package/dist/components/StatusSelect.js +119 -0
  162. package/dist/components/StatusSelect.js.map +1 -0
  163. package/dist/components/Surface.js +210 -0
  164. package/dist/components/Surface.js.map +1 -0
  165. package/dist/components/Table.js +300 -0
  166. package/dist/components/Table.js.map +1 -0
  167. package/dist/components/Tabs.js +288 -0
  168. package/dist/components/Tabs.js.map +1 -0
  169. package/dist/components/ThemeMenu.js +198 -0
  170. package/dist/components/ThemeMenu.js.map +1 -0
  171. package/dist/components/Toast.js +217 -0
  172. package/dist/components/Toast.js.map +1 -0
  173. package/dist/components/Toggle.js +147 -0
  174. package/dist/components/Toggle.js.map +1 -0
  175. package/dist/components/ToggleMatrix.js +157 -0
  176. package/dist/components/ToggleMatrix.js.map +1 -0
  177. package/dist/components/Tree.js +125 -0
  178. package/dist/components/Tree.js.map +1 -0
  179. package/dist/components/TriStateSwitch.js +111 -0
  180. package/dist/components/TriStateSwitch.js.map +1 -0
  181. package/dist/components/VideoPlayer.js +64 -0
  182. package/dist/components/VideoPlayer.js.map +1 -0
  183. package/dist/components/auth/AcceptInvitationCard.js +110 -0
  184. package/dist/components/auth/AcceptInvitationCard.js.map +1 -0
  185. package/dist/components/auth/AuthLayout.js +18 -0
  186. package/dist/components/auth/AuthLayout.js.map +1 -0
  187. package/dist/components/auth/ForgotPasswordForm.js +44 -0
  188. package/dist/components/auth/ForgotPasswordForm.js.map +1 -0
  189. package/dist/components/auth/LoginForm.js +76 -0
  190. package/dist/components/auth/LoginForm.js.map +1 -0
  191. package/dist/components/auth/ResetPasswordForm.js +69 -0
  192. package/dist/components/auth/ResetPasswordForm.js.map +1 -0
  193. package/dist/components/auth/SignInProviders.js +45 -0
  194. package/dist/components/auth/SignInProviders.js.map +1 -0
  195. package/dist/components/auth/SignupCard.js +204 -0
  196. package/dist/components/auth/SignupCard.js.map +1 -0
  197. package/dist/components/auth/TermsAcceptance.js +43 -0
  198. package/dist/components/auth/TermsAcceptance.js.map +1 -0
  199. package/dist/components/board/context.js +32 -0
  200. package/dist/components/board/context.js.map +1 -0
  201. package/dist/components/board/recipe.js +94 -0
  202. package/dist/components/board/recipe.js.map +1 -0
  203. package/dist/components/calendar/CalendarMonth.js +299 -0
  204. package/dist/components/calendar/CalendarMonth.js.map +1 -0
  205. package/dist/components/calendar/CalendarTimeGrid.js +430 -0
  206. package/dist/components/calendar/CalendarTimeGrid.js.map +1 -0
  207. package/dist/components/calendar/EventActions.js +101 -0
  208. package/dist/components/calendar/EventActions.js.map +1 -0
  209. package/dist/components/calendar/format.js +73 -0
  210. package/dist/components/calendar/format.js.map +1 -0
  211. package/dist/components/calendar/palette.js +31 -0
  212. package/dist/components/calendar/palette.js.map +1 -0
  213. package/dist/components/calendar/use-calendar-drag.js +149 -0
  214. package/dist/components/calendar/use-calendar-drag.js.map +1 -0
  215. package/dist/components/calendar/use-event-keyboard.js +87 -0
  216. package/dist/components/calendar/use-event-keyboard.js.map +1 -0
  217. package/dist/components/calendar/use-grid-navigation.js +79 -0
  218. package/dist/components/calendar/use-grid-navigation.js.map +1 -0
  219. package/dist/components/calendar/use-now.js +27 -0
  220. package/dist/components/calendar/use-now.js.map +1 -0
  221. package/dist/components/card-face/AcRingGlyph.js +39 -0
  222. package/dist/components/card-face/AcRingGlyph.js.map +1 -0
  223. package/dist/components/card-face/BoardCardAgentSlot.js +17 -0
  224. package/dist/components/card-face/BoardCardAgentSlot.js.map +1 -0
  225. package/dist/components/card-face/CardFace.js +109 -0
  226. package/dist/components/card-face/CardFace.js.map +1 -0
  227. package/dist/components/card-face/CardTypeBadge.js +17 -0
  228. package/dist/components/card-face/CardTypeBadge.js.map +1 -0
  229. package/dist/components/card-face/EffortBadge.js +11 -0
  230. package/dist/components/card-face/EffortBadge.js.map +1 -0
  231. package/dist/components/card-face/GateRingGlyph.js +31 -0
  232. package/dist/components/card-face/GateRingGlyph.js.map +1 -0
  233. package/dist/components/card-face/OverflowRow.js +70 -0
  234. package/dist/components/card-face/OverflowRow.js.map +1 -0
  235. package/dist/components/card-face/TapTip.js +32 -0
  236. package/dist/components/card-face/TapTip.js.map +1 -0
  237. package/dist/components/card-face/hit-area.js +6 -0
  238. package/dist/components/card-face/hit-area.js.map +1 -0
  239. package/dist/components/card-face/vocabulary.js +102 -0
  240. package/dist/components/card-face/vocabulary.js.map +1 -0
  241. package/dist/components/chart/BarList.js +78 -0
  242. package/dist/components/chart/BarList.js.map +1 -0
  243. package/dist/components/chart/LineChart.js +310 -0
  244. package/dist/components/chart/LineChart.js.map +1 -0
  245. package/dist/components/chart/ShareBar.js +141 -0
  246. package/dist/components/chart/ShareBar.js.map +1 -0
  247. package/dist/components/chart/TimeSeriesChart.js +305 -0
  248. package/dist/components/chart/TimeSeriesChart.js.map +1 -0
  249. package/dist/components/chart/label-metrics.js +17 -0
  250. package/dist/components/chart/label-metrics.js.map +1 -0
  251. package/dist/components/chart/line-chart-axis.js +38 -0
  252. package/dist/components/chart/line-chart-axis.js.map +1 -0
  253. package/dist/components/chart/line-chart-scale.js +132 -0
  254. package/dist/components/chart/line-chart-scale.js.map +1 -0
  255. package/dist/components/chart/line-series-style.js +22 -0
  256. package/dist/components/chart/line-series-style.js.map +1 -0
  257. package/dist/components/chart/share-bar-labels.js +14 -0
  258. package/dist/components/chart/share-bar-labels.js.map +1 -0
  259. package/dist/components/chart/shared.js +157 -0
  260. package/dist/components/chart/shared.js.map +1 -0
  261. package/dist/components/chart/time-series-scale.js +51 -0
  262. package/dist/components/chart/time-series-scale.js.map +1 -0
  263. package/dist/components/chat/Attachment.js +316 -0
  264. package/dist/components/chat/Attachment.js.map +1 -0
  265. package/dist/components/chat/Chat.js +171 -0
  266. package/dist/components/chat/Chat.js.map +1 -0
  267. package/dist/components/chat/Composer.js +274 -0
  268. package/dist/components/chat/Composer.js.map +1 -0
  269. package/dist/components/chat/ContextMeter.js +202 -0
  270. package/dist/components/chat/ContextMeter.js.map +1 -0
  271. package/dist/components/chat/EffortControl.js +116 -0
  272. package/dist/components/chat/EffortControl.js.map +1 -0
  273. package/dist/components/chat/FileCover.js +78 -0
  274. package/dist/components/chat/FileCover.js.map +1 -0
  275. package/dist/components/chat/Message.js +356 -0
  276. package/dist/components/chat/Message.js.map +1 -0
  277. package/dist/components/chat/MessageScroller.js +104 -0
  278. package/dist/components/chat/MessageScroller.js.map +1 -0
  279. package/dist/components/chat/ModelSelector.js +156 -0
  280. package/dist/components/chat/ModelSelector.js.map +1 -0
  281. package/dist/components/chat/StreamingMarkdown.js +42 -0
  282. package/dist/components/chat/StreamingMarkdown.js.map +1 -0
  283. package/dist/components/chat/download-file.js +9 -0
  284. package/dist/components/chat/download-file.js.map +1 -0
  285. package/dist/components/chat/file-icon.js +39 -0
  286. package/dist/components/chat/file-icon.js.map +1 -0
  287. package/dist/components/checklist/StatusChecklist.js +103 -0
  288. package/dist/components/checklist/StatusChecklist.js.map +1 -0
  289. package/dist/components/checklist/tally.js +29 -0
  290. package/dist/components/checklist/tally.js.map +1 -0
  291. package/dist/components/code-editor/context.js +13 -0
  292. package/dist/components/code-editor/context.js.map +1 -0
  293. package/dist/components/code-editor/editing.js +93 -0
  294. package/dist/components/code-editor/editing.js.map +1 -0
  295. package/dist/components/code-editor/highlight.js +27 -0
  296. package/dist/components/code-editor/highlight.js.map +1 -0
  297. package/dist/components/code-editor/recipe.js +75 -0
  298. package/dist/components/code-editor/recipe.js.map +1 -0
  299. package/dist/components/date-timeline/DateTimeline.js +358 -0
  300. package/dist/components/date-timeline/DateTimeline.js.map +1 -0
  301. package/dist/components/date-timeline/TimelineRow.js +100 -0
  302. package/dist/components/date-timeline/TimelineRow.js.map +1 -0
  303. package/dist/components/date-timeline/useBarDrag.js +44 -0
  304. package/dist/components/date-timeline/useBarDrag.js.map +1 -0
  305. package/dist/components/date-timeline/useMarkerDrag.js +40 -0
  306. package/dist/components/date-timeline/useMarkerDrag.js.map +1 -0
  307. package/dist/components/date-timeline/useTimelineZoom.js +44 -0
  308. package/dist/components/date-timeline/useTimelineZoom.js.map +1 -0
  309. package/dist/components/drag-drop/context.js +37 -0
  310. package/dist/components/drag-drop/context.js.map +1 -0
  311. package/dist/components/drag-drop/recipe.js +270 -0
  312. package/dist/components/drag-drop/recipe.js.map +1 -0
  313. package/dist/components/drag-drop/shift.js +157 -0
  314. package/dist/components/drag-drop/shift.js.map +1 -0
  315. package/dist/components/edit/activation.js +10 -0
  316. package/dist/components/edit/activation.js.map +1 -0
  317. package/dist/components/edit/outcome.js +47 -0
  318. package/dist/components/edit/outcome.js.map +1 -0
  319. package/dist/components/edit/use-edit-session.js +146 -0
  320. package/dist/components/edit/use-edit-session.js.map +1 -0
  321. package/dist/components/file-viewer/FileViewer.js +97 -0
  322. package/dist/components/file-viewer/FileViewer.js.map +1 -0
  323. package/dist/components/file-viewer/PageNumberJumpField.js +47 -0
  324. package/dist/components/file-viewer/PageNumberJumpField.js.map +1 -0
  325. package/dist/components/file-viewer/ViewerControls.js +122 -0
  326. package/dist/components/file-viewer/ViewerControls.js.map +1 -0
  327. package/dist/components/file-viewer/ViewerRail.js +57 -0
  328. package/dist/components/file-viewer/ViewerRail.js.map +1 -0
  329. package/dist/components/file-viewer/ViewerStage.js +112 -0
  330. package/dist/components/file-viewer/ViewerStage.js.map +1 -0
  331. package/dist/components/file-viewer/frames.js +37 -0
  332. package/dist/components/file-viewer/frames.js.map +1 -0
  333. package/dist/components/file-viewer/use-frame-cursor.js +32 -0
  334. package/dist/components/file-viewer/use-frame-cursor.js.map +1 -0
  335. package/dist/components/file-viewer/use-viewer-keys.js +50 -0
  336. package/dist/components/file-viewer/use-viewer-keys.js.map +1 -0
  337. package/dist/components/file-viewer/use-viewer-zoom.js +68 -0
  338. package/dist/components/file-viewer/use-viewer-zoom.js.map +1 -0
  339. package/dist/components/focus-web/FocusWeb.js +322 -0
  340. package/dist/components/focus-web/FocusWeb.js.map +1 -0
  341. package/dist/components/focus-web/layout.js +34 -0
  342. package/dist/components/focus-web/layout.js.map +1 -0
  343. package/dist/components/graph-explorer/GraphExplorer.js +441 -0
  344. package/dist/components/graph-explorer/GraphExplorer.js.map +1 -0
  345. package/dist/components/graph-explorer/camera-math.js +102 -0
  346. package/dist/components/graph-explorer/camera-math.js.map +1 -0
  347. package/dist/components/graph-explorer/tree-layout.js +103 -0
  348. package/dist/components/graph-explorer/tree-layout.js.map +1 -0
  349. package/dist/components/graph-explorer/use-camera.js +82 -0
  350. package/dist/components/graph-explorer/use-camera.js.map +1 -0
  351. package/dist/components/graph-explorer/viewport-gesture.js +107 -0
  352. package/dist/components/graph-explorer/viewport-gesture.js.map +1 -0
  353. package/dist/components/kanban/KanbanBoard.js +219 -0
  354. package/dist/components/kanban/KanbanBoard.js.map +1 -0
  355. package/dist/components/kanban/recipe.js +144 -0
  356. package/dist/components/kanban/recipe.js.map +1 -0
  357. package/dist/components/markdown/Affordances.js +398 -0
  358. package/dist/components/markdown/Affordances.js.map +1 -0
  359. package/dist/components/markdown/AttachmentStrip.js +128 -0
  360. package/dist/components/markdown/AttachmentStrip.js.map +1 -0
  361. package/dist/components/markdown/ImageUpload.js +45 -0
  362. package/dist/components/markdown/ImageUpload.js.map +1 -0
  363. package/dist/components/media-error.js +7 -0
  364. package/dist/components/media-error.js.map +1 -0
  365. package/dist/components/nav-sections.js +61 -0
  366. package/dist/components/nav-sections.js.map +1 -0
  367. package/dist/components/node-canvas/NodeCanvas.js +384 -0
  368. package/dist/components/node-canvas/NodeCanvas.js.map +1 -0
  369. package/dist/components/node-canvas/layout.js +237 -0
  370. package/dist/components/node-canvas/layout.js.map +1 -0
  371. package/dist/components/node-canvas/use-canvas-gestures.js +143 -0
  372. package/dist/components/node-canvas/use-canvas-gestures.js.map +1 -0
  373. package/dist/components/openapi/OpenApiViewer.js +137 -0
  374. package/dist/components/openapi/OpenApiViewer.js.map +1 -0
  375. package/dist/components/openapi/OperationCard.js +145 -0
  376. package/dist/components/openapi/OperationCard.js.map +1 -0
  377. package/dist/components/openapi/SchemaView.js +68 -0
  378. package/dist/components/openapi/SchemaView.js.map +1 -0
  379. package/dist/components/openapi/resolve.js +102 -0
  380. package/dist/components/openapi/resolve.js.map +1 -0
  381. package/dist/components/openapi/types.js +5 -0
  382. package/dist/components/openapi/types.js.map +1 -0
  383. package/dist/components/overlay-shell.js +29 -0
  384. package/dist/components/overlay-shell.js.map +1 -0
  385. package/dist/components/overlay-stack.js +27 -0
  386. package/dist/components/overlay-stack.js.map +1 -0
  387. package/dist/components/paged-window/PageBlock.js +50 -0
  388. package/dist/components/paged-window/PageBlock.js.map +1 -0
  389. package/dist/components/provenance/ConfidenceBar.js +60 -0
  390. package/dist/components/provenance/ConfidenceBar.js.map +1 -0
  391. package/dist/components/provenance/ConfidenceMeter.js +36 -0
  392. package/dist/components/provenance/ConfidenceMeter.js.map +1 -0
  393. package/dist/components/provenance/ConfidenceReadout.js +31 -0
  394. package/dist/components/provenance/ConfidenceReadout.js.map +1 -0
  395. package/dist/components/provenance/ProvenanceBadge.js +44 -0
  396. package/dist/components/provenance/ProvenanceBadge.js.map +1 -0
  397. package/dist/components/provenance/ProvenanceDetail.js +114 -0
  398. package/dist/components/provenance/ProvenanceDetail.js.map +1 -0
  399. package/dist/components/provenance/ProvenanceDisclosure.js +111 -0
  400. package/dist/components/provenance/ProvenanceDisclosure.js.map +1 -0
  401. package/dist/components/provenance/absence.js +31 -0
  402. package/dist/components/provenance/absence.js.map +1 -0
  403. package/dist/components/provenance/types.js +30 -0
  404. package/dist/components/provenance/types.js.map +1 -0
  405. package/dist/components/rbac/AccessRequestPanel.js +153 -0
  406. package/dist/components/rbac/AccessRequestPanel.js.map +1 -0
  407. package/dist/components/rbac/AccountMenu.js +118 -0
  408. package/dist/components/rbac/AccountMenu.js.map +1 -0
  409. package/dist/components/rbac/AgentKeysList.js +20 -0
  410. package/dist/components/rbac/AgentKeysList.js.map +1 -0
  411. package/dist/components/rbac/ApiKeysPanel.js +172 -0
  412. package/dist/components/rbac/ApiKeysPanel.js.map +1 -0
  413. package/dist/components/rbac/ApiKeysTable.js +167 -0
  414. package/dist/components/rbac/ApiKeysTable.js.map +1 -0
  415. package/dist/components/rbac/Brand.js +13 -0
  416. package/dist/components/rbac/Brand.js.map +1 -0
  417. package/dist/components/rbac/Can.js +18 -0
  418. package/dist/components/rbac/Can.js.map +1 -0
  419. package/dist/components/rbac/ChangePasswordForm.js +73 -0
  420. package/dist/components/rbac/ChangePasswordForm.js.map +1 -0
  421. package/dist/components/rbac/DangerZone.js +27 -0
  422. package/dist/components/rbac/DangerZone.js.map +1 -0
  423. package/dist/components/rbac/DevToolsPopover.js +140 -0
  424. package/dist/components/rbac/DevToolsPopover.js.map +1 -0
  425. package/dist/components/rbac/EndedLine.js +24 -0
  426. package/dist/components/rbac/EndedLine.js.map +1 -0
  427. package/dist/components/rbac/InvitationsList.js +148 -0
  428. package/dist/components/rbac/InvitationsList.js.map +1 -0
  429. package/dist/components/rbac/InviteMembersDialog.js +97 -0
  430. package/dist/components/rbac/InviteMembersDialog.js.map +1 -0
  431. package/dist/components/rbac/MembersPanel.js +138 -0
  432. package/dist/components/rbac/MembersPanel.js.map +1 -0
  433. package/dist/components/rbac/PermissionRequestPanel.js +141 -0
  434. package/dist/components/rbac/PermissionRequestPanel.js.map +1 -0
  435. package/dist/components/rbac/ProfileForm.js +86 -0
  436. package/dist/components/rbac/ProfileForm.js.map +1 -0
  437. package/dist/components/rbac/ProfilePage.js +58 -0
  438. package/dist/components/rbac/ProfilePage.js.map +1 -0
  439. package/dist/components/rbac/RBACProvider.js +82 -0
  440. package/dist/components/rbac/RBACProvider.js.map +1 -0
  441. package/dist/components/rbac/RoleEditorDialog.js +90 -0
  442. package/dist/components/rbac/RoleEditorDialog.js.map +1 -0
  443. package/dist/components/rbac/RoleKeyPicker.js +77 -0
  444. package/dist/components/rbac/RoleKeyPicker.js.map +1 -0
  445. package/dist/components/rbac/RolePermissionMatrix.js +37 -0
  446. package/dist/components/rbac/RolePermissionMatrix.js.map +1 -0
  447. package/dist/components/rbac/RolesPermissionsPage.js +142 -0
  448. package/dist/components/rbac/RolesPermissionsPage.js.map +1 -0
  449. package/dist/components/rbac/SessionsList.js +146 -0
  450. package/dist/components/rbac/SessionsList.js.map +1 -0
  451. package/dist/components/rbac/TeamSettingsForm.js +69 -0
  452. package/dist/components/rbac/TeamSettingsForm.js.map +1 -0
  453. package/dist/components/rbac/TeamSwitcher.js +66 -0
  454. package/dist/components/rbac/TeamSwitcher.js.map +1 -0
  455. package/dist/components/rbac/approvalPanelParts.js +130 -0
  456. package/dist/components/rbac/approvalPanelParts.js.map +1 -0
  457. package/dist/components/rbac/permissionSections.js +8 -0
  458. package/dist/components/rbac/permissionSections.js.map +1 -0
  459. package/dist/components/rbac/stagedForm.js +42 -0
  460. package/dist/components/rbac/stagedForm.js.map +1 -0
  461. package/dist/components/rbac/useStagedImage.js +21 -0
  462. package/dist/components/rbac/useStagedImage.js.map +1 -0
  463. package/dist/components/roadmap/PhaseManager.js +48 -0
  464. package/dist/components/roadmap/PhaseManager.js.map +1 -0
  465. package/dist/components/roadmap/RoadmapItemCard.js +96 -0
  466. package/dist/components/roadmap/RoadmapItemCard.js.map +1 -0
  467. package/dist/components/roadmap/RoadmapPage.js +34 -0
  468. package/dist/components/roadmap/RoadmapPage.js.map +1 -0
  469. package/dist/components/roadmap/RoadmapSwimlaneBoard.js +91 -0
  470. package/dist/components/roadmap/RoadmapSwimlaneBoard.js.map +1 -0
  471. package/dist/components/roadmap/TrackManager.js +58 -0
  472. package/dist/components/roadmap/TrackManager.js.map +1 -0
  473. package/dist/components/roadmap/UseCaseCard.js +93 -0
  474. package/dist/components/roadmap/UseCaseCard.js.map +1 -0
  475. package/dist/components/roadmap/UseCaseLedgerPage.js +98 -0
  476. package/dist/components/roadmap/UseCaseLedgerPage.js.map +1 -0
  477. package/dist/components/roadmap/chip-tones.js +9 -0
  478. package/dist/components/roadmap/chip-tones.js.map +1 -0
  479. package/dist/components/roadmap/derive.js +28 -0
  480. package/dist/components/roadmap/derive.js.map +1 -0
  481. package/dist/components/stepper/Stepper.js +276 -0
  482. package/dist/components/stepper/Stepper.js.map +1 -0
  483. package/dist/components/stepper/derive.js +53 -0
  484. package/dist/components/stepper/derive.js.map +1 -0
  485. package/dist/confidence.css +222 -0
  486. package/dist/fonts/bricolage-grotesque-0.woff2 +0 -0
  487. package/dist/fonts/bricolage-grotesque-1.woff2 +0 -0
  488. package/dist/fonts/bricolage-grotesque-2.woff2 +0 -0
  489. package/dist/fonts/figtree-0.woff2 +0 -0
  490. package/dist/fonts/figtree-1.woff2 +0 -0
  491. package/dist/fonts/figtree-2.woff2 +0 -0
  492. package/dist/fonts/figtree-3.woff2 +0 -0
  493. package/dist/fonts/jetbrains-mono-0.woff2 +0 -0
  494. package/dist/fonts/jetbrains-mono-1.woff2 +0 -0
  495. package/dist/fonts/jetbrains-mono-10.woff2 +0 -0
  496. package/dist/fonts/jetbrains-mono-11.woff2 +0 -0
  497. package/dist/fonts/jetbrains-mono-2.woff2 +0 -0
  498. package/dist/fonts/jetbrains-mono-3.woff2 +0 -0
  499. package/dist/fonts/jetbrains-mono-4.woff2 +0 -0
  500. package/dist/fonts/jetbrains-mono-5.woff2 +0 -0
  501. package/dist/fonts/jetbrains-mono-6.woff2 +0 -0
  502. package/dist/fonts/jetbrains-mono-7.woff2 +0 -0
  503. package/dist/fonts/jetbrains-mono-8.woff2 +0 -0
  504. package/dist/fonts/jetbrains-mono-9.woff2 +0 -0
  505. package/dist/fonts.css +187 -0
  506. package/dist/icons/data.js +233 -0
  507. package/dist/icons/data.js.map +1 -0
  508. package/dist/index.js +942 -0
  509. package/dist/index.js.map +1 -0
  510. package/dist/lib/attention.js +75 -0
  511. package/dist/lib/attention.js.map +1 -0
  512. package/dist/lib/board/anchor.js +14 -0
  513. package/dist/lib/board/anchor.js.map +1 -0
  514. package/dist/lib/board/model.js +41 -0
  515. package/dist/lib/board/model.js.map +1 -0
  516. package/dist/lib/board/move.js +161 -0
  517. package/dist/lib/board/move.js.map +1 -0
  518. package/dist/lib/board/position.js +11 -0
  519. package/dist/lib/board/position.js.map +1 -0
  520. package/dist/lib/board/rejection.js +22 -0
  521. package/dist/lib/board/rejection.js.map +1 -0
  522. package/dist/lib/board/use-board.js +43 -0
  523. package/dist/lib/board/use-board.js.map +1 -0
  524. package/dist/lib/calendar/band-packer.js +44 -0
  525. package/dist/lib/calendar/band-packer.js.map +1 -0
  526. package/dist/lib/calendar/drag.js +74 -0
  527. package/dist/lib/calendar/drag.js.map +1 -0
  528. package/dist/lib/calendar/lane-packer.js +67 -0
  529. package/dist/lib/calendar/lane-packer.js.map +1 -0
  530. package/dist/lib/calendar/segments.js +82 -0
  531. package/dist/lib/calendar/segments.js.map +1 -0
  532. package/dist/lib/calendar/types.js +7 -0
  533. package/dist/lib/calendar/types.js.map +1 -0
  534. package/dist/lib/chart-palette.js +27 -0
  535. package/dist/lib/chart-palette.js.map +1 -0
  536. package/dist/lib/clipboard.js +30 -0
  537. package/dist/lib/clipboard.js.map +1 -0
  538. package/dist/lib/cn.js +9 -0
  539. package/dist/lib/cn.js.map +1 -0
  540. package/dist/lib/color.js +24 -0
  541. package/dist/lib/color.js.map +1 -0
  542. package/dist/lib/component-guidance.js +297 -0
  543. package/dist/lib/component-guidance.js.map +1 -0
  544. package/dist/lib/confidence.js +22 -0
  545. package/dist/lib/confidence.js.map +1 -0
  546. package/dist/lib/date-timeline/scale.js +197 -0
  547. package/dist/lib/date-timeline/scale.js.map +1 -0
  548. package/dist/lib/design-frame/document.js +44 -0
  549. package/dist/lib/design-frame/document.js.map +1 -0
  550. package/dist/lib/design-frame/mini-app-script.js +107 -0
  551. package/dist/lib/design-frame/mini-app-script.js.map +1 -0
  552. package/dist/lib/design-frame/mini-app.js +12 -0
  553. package/dist/lib/design-frame/mini-app.js.map +1 -0
  554. package/dist/lib/design-frame/protocol.js +46 -0
  555. package/dist/lib/design-frame/protocol.js.map +1 -0
  556. package/dist/lib/dev-warn.js +17 -0
  557. package/dist/lib/dev-warn.js.map +1 -0
  558. package/dist/lib/dnd/announce.js +120 -0
  559. package/dist/lib/dnd/announce.js.map +1 -0
  560. package/dist/lib/dnd/autoscroll.js +123 -0
  561. package/dist/lib/dnd/autoscroll.js.map +1 -0
  562. package/dist/lib/dnd/cross-drop.js +11 -0
  563. package/dist/lib/dnd/cross-drop.js.map +1 -0
  564. package/dist/lib/dnd/geometry.js +99 -0
  565. package/dist/lib/dnd/geometry.js.map +1 -0
  566. package/dist/lib/dnd/sensors/gesture.js +86 -0
  567. package/dist/lib/dnd/sensors/gesture.js.map +1 -0
  568. package/dist/lib/dnd/sensors/keyboard.js +47 -0
  569. package/dist/lib/dnd/sensors/keyboard.js.map +1 -0
  570. package/dist/lib/dnd/sensors/pointer.js +32 -0
  571. package/dist/lib/dnd/sensors/pointer.js.map +1 -0
  572. package/dist/lib/dnd/session.js +256 -0
  573. package/dist/lib/dnd/session.js.map +1 -0
  574. package/dist/lib/dnd/use-drag.js +90 -0
  575. package/dist/lib/dnd/use-drag.js.map +1 -0
  576. package/dist/lib/dom/scroll-ancestor.js +18 -0
  577. package/dist/lib/dom/scroll-ancestor.js.map +1 -0
  578. package/dist/lib/format.js +23 -0
  579. package/dist/lib/format.js.map +1 -0
  580. package/dist/lib/group-in-order.js +13 -0
  581. package/dist/lib/group-in-order.js.map +1 -0
  582. package/dist/lib/header-fold.js +11 -0
  583. package/dist/lib/header-fold.js.map +1 -0
  584. package/dist/lib/i18n/areas/auth-provenance-flows.js +156 -0
  585. package/dist/lib/i18n/areas/auth-provenance-flows.js.map +1 -0
  586. package/dist/lib/i18n/areas/board.js +35 -0
  587. package/dist/lib/i18n/areas/board.js.map +1 -0
  588. package/dist/lib/i18n/areas/card-face.js +10 -0
  589. package/dist/lib/i18n/areas/card-face.js.map +1 -0
  590. package/dist/lib/i18n/areas/chat-chart.js +118 -0
  591. package/dist/lib/i18n/areas/chat-chart.js.map +1 -0
  592. package/dist/lib/i18n/areas/code-editor.js +24 -0
  593. package/dist/lib/i18n/areas/code-editor.js.map +1 -0
  594. package/dist/lib/i18n/areas/date-timeline.js +21 -0
  595. package/dist/lib/i18n/areas/date-timeline.js.map +1 -0
  596. package/dist/lib/i18n/areas/dates.js +71 -0
  597. package/dist/lib/i18n/areas/dates.js.map +1 -0
  598. package/dist/lib/i18n/areas/docs-views.js +183 -0
  599. package/dist/lib/i18n/areas/docs-views.js.map +1 -0
  600. package/dist/lib/i18n/areas/feedback.js +75 -0
  601. package/dist/lib/i18n/areas/feedback.js.map +1 -0
  602. package/dist/lib/i18n/areas/formats.js +24 -0
  603. package/dist/lib/i18n/areas/formats.js.map +1 -0
  604. package/dist/lib/i18n/areas/forms.js +110 -0
  605. package/dist/lib/i18n/areas/forms.js.map +1 -0
  606. package/dist/lib/i18n/areas/keys.js +25 -0
  607. package/dist/lib/i18n/areas/keys.js.map +1 -0
  608. package/dist/lib/i18n/areas/markdown.js +136 -0
  609. package/dist/lib/i18n/areas/markdown.js.map +1 -0
  610. package/dist/lib/i18n/areas/move-rejected.js +14 -0
  611. package/dist/lib/i18n/areas/move-rejected.js.map +1 -0
  612. package/dist/lib/i18n/areas/navigation.js +104 -0
  613. package/dist/lib/i18n/areas/navigation.js.map +1 -0
  614. package/dist/lib/i18n/areas/rbac.js +331 -0
  615. package/dist/lib/i18n/areas/rbac.js.map +1 -0
  616. package/dist/lib/i18n/emphasis.js +6 -0
  617. package/dist/lib/i18n/emphasis.js.map +1 -0
  618. package/dist/lib/i18n/number-format.js +9 -0
  619. package/dist/lib/i18n/number-format.js.map +1 -0
  620. package/dist/lib/i18n/plural.js +9 -0
  621. package/dist/lib/i18n/plural.js.map +1 -0
  622. package/dist/lib/i18n/provider.js +27 -0
  623. package/dist/lib/i18n/provider.js.map +1 -0
  624. package/dist/lib/i18n/strings.js +38 -0
  625. package/dist/lib/i18n/strings.js.map +1 -0
  626. package/dist/lib/icons.js +17 -0
  627. package/dist/lib/icons.js.map +1 -0
  628. package/dist/lib/interactive-target.js +9 -0
  629. package/dist/lib/interactive-target.js.map +1 -0
  630. package/dist/lib/intl-cache.js +69 -0
  631. package/dist/lib/intl-cache.js.map +1 -0
  632. package/dist/lib/legal-document.js +37 -0
  633. package/dist/lib/legal-document.js.map +1 -0
  634. package/dist/lib/line-diff-model.js +51 -0
  635. package/dist/lib/line-diff-model.js.map +1 -0
  636. package/dist/lib/markdown/attachments.js +71 -0
  637. package/dist/lib/markdown/attachments.js.map +1 -0
  638. package/dist/lib/markdown/caret-map.js +153 -0
  639. package/dist/lib/markdown/caret-map.js.map +1 -0
  640. package/dist/lib/markdown/caret.js +35 -0
  641. package/dist/lib/markdown/caret.js.map +1 -0
  642. package/dist/lib/markdown/commands.js +443 -0
  643. package/dist/lib/markdown/commands.js.map +1 -0
  644. package/dist/lib/markdown/convert.js +153 -0
  645. package/dist/lib/markdown/convert.js.map +1 -0
  646. package/dist/lib/markdown/dom.js +89 -0
  647. package/dist/lib/markdown/dom.js.map +1 -0
  648. package/dist/lib/markdown/edit.js +92 -0
  649. package/dist/lib/markdown/edit.js.map +1 -0
  650. package/dist/lib/markdown/history.js +79 -0
  651. package/dist/lib/markdown/history.js.map +1 -0
  652. package/dist/lib/markdown/hotkeys.js +63 -0
  653. package/dist/lib/markdown/hotkeys.js.map +1 -0
  654. package/dist/lib/markdown/image-pipeline.js +236 -0
  655. package/dist/lib/markdown/image-pipeline.js.map +1 -0
  656. package/dist/lib/markdown/images.js +85 -0
  657. package/dist/lib/markdown/images.js.map +1 -0
  658. package/dist/lib/markdown/input.js +210 -0
  659. package/dist/lib/markdown/input.js.map +1 -0
  660. package/dist/lib/markdown/keys.js +37 -0
  661. package/dist/lib/markdown/keys.js.map +1 -0
  662. package/dist/lib/markdown/paste.js +180 -0
  663. package/dist/lib/markdown/paste.js.map +1 -0
  664. package/dist/lib/markdown/position.js +111 -0
  665. package/dist/lib/markdown/position.js.map +1 -0
  666. package/dist/lib/markdown/project.js +108 -0
  667. package/dist/lib/markdown/project.js.map +1 -0
  668. package/dist/lib/markdown/reconcile.js +127 -0
  669. package/dist/lib/markdown/reconcile.js.map +1 -0
  670. package/dist/lib/markdown/surface.js +373 -0
  671. package/dist/lib/markdown/surface.js.map +1 -0
  672. package/dist/lib/motion.js +22 -0
  673. package/dist/lib/motion.js.map +1 -0
  674. package/dist/lib/pad.js +7 -0
  675. package/dist/lib/pad.js.map +1 -0
  676. package/dist/lib/paged-window/layout.js +15 -0
  677. package/dist/lib/paged-window/layout.js.map +1 -0
  678. package/dist/lib/paged-window/list-owner.js +21 -0
  679. package/dist/lib/paged-window/list-owner.js.map +1 -0
  680. package/dist/lib/paged-window/records-binding.js +239 -0
  681. package/dist/lib/paged-window/records-binding.js.map +1 -0
  682. package/dist/lib/paged-window/store.js +562 -0
  683. package/dist/lib/paged-window/store.js.map +1 -0
  684. package/dist/lib/paged-window/use-measured-pitch.js +38 -0
  685. package/dist/lib/paged-window/use-measured-pitch.js.map +1 -0
  686. package/dist/lib/paged-window/use-page-visibility.js +36 -0
  687. package/dist/lib/paged-window/use-page-visibility.js.map +1 -0
  688. package/dist/lib/paged-window/use-paged-window.js +43 -0
  689. package/dist/lib/paged-window/use-paged-window.js.map +1 -0
  690. package/dist/lib/paged-window/use-scroll-root.js +12 -0
  691. package/dist/lib/paged-window/use-scroll-root.js.map +1 -0
  692. package/dist/lib/persist.js +84 -0
  693. package/dist/lib/persist.js.map +1 -0
  694. package/dist/lib/preference-values.js +13 -0
  695. package/dist/lib/preference-values.js.map +1 -0
  696. package/dist/lib/preferences.js +86 -0
  697. package/dist/lib/preferences.js.map +1 -0
  698. package/dist/lib/reads/hooks.js +156 -0
  699. package/dist/lib/reads/hooks.js.map +1 -0
  700. package/dist/lib/reads/optimistic.js +169 -0
  701. package/dist/lib/reads/optimistic.js.map +1 -0
  702. package/dist/lib/reads/refetch.js +108 -0
  703. package/dist/lib/reads/refetch.js.map +1 -0
  704. package/dist/lib/reads/slots.js +215 -0
  705. package/dist/lib/reads/slots.js.map +1 -0
  706. package/dist/lib/realtime/hooks.js +40 -0
  707. package/dist/lib/realtime/hooks.js.map +1 -0
  708. package/dist/lib/realtime/provider.js +25 -0
  709. package/dist/lib/realtime/provider.js.map +1 -0
  710. package/dist/lib/realtime/registry.js +472 -0
  711. package/dist/lib/realtime/registry.js.map +1 -0
  712. package/dist/lib/records/define-record-type.js +33 -0
  713. package/dist/lib/records/define-record-type.js.map +1 -0
  714. package/dist/lib/records/hooks.js +39 -0
  715. package/dist/lib/records/hooks.js.map +1 -0
  716. package/dist/lib/records/store.js +572 -0
  717. package/dist/lib/records/store.js.map +1 -0
  718. package/dist/lib/records/wire.js +58 -0
  719. package/dist/lib/records/wire.js.map +1 -0
  720. package/dist/lib/reduced-motion-help.js +19 -0
  721. package/dist/lib/reduced-motion-help.js.map +1 -0
  722. package/dist/lib/scroll-caret.js +18 -0
  723. package/dist/lib/scroll-caret.js.map +1 -0
  724. package/dist/lib/sim/createSimStore.js +54 -0
  725. package/dist/lib/sim/createSimStore.js.map +1 -0
  726. package/dist/lib/sim/latency.js +28 -0
  727. package/dist/lib/sim/latency.js.map +1 -0
  728. package/dist/lib/sim/registry.js +13 -0
  729. package/dist/lib/sim/registry.js.map +1 -0
  730. package/dist/lib/sim/settings.js +41 -0
  731. package/dist/lib/sim/settings.js.map +1 -0
  732. package/dist/lib/submit-shortcut.js +25 -0
  733. package/dist/lib/submit-shortcut.js.map +1 -0
  734. package/dist/lib/syntax/index.js +33 -0
  735. package/dist/lib/syntax/index.js.map +1 -0
  736. package/dist/lib/syntax/languages/bash.js +77 -0
  737. package/dist/lib/syntax/languages/bash.js.map +1 -0
  738. package/dist/lib/syntax/languages/css.js +81 -0
  739. package/dist/lib/syntax/languages/css.js.map +1 -0
  740. package/dist/lib/syntax/languages/html.js +91 -0
  741. package/dist/lib/syntax/languages/html.js.map +1 -0
  742. package/dist/lib/syntax/languages/index.js +49 -0
  743. package/dist/lib/syntax/languages/index.js.map +1 -0
  744. package/dist/lib/syntax/languages/javascript.js +133 -0
  745. package/dist/lib/syntax/languages/javascript.js.map +1 -0
  746. package/dist/lib/syntax/languages/json.js +45 -0
  747. package/dist/lib/syntax/languages/json.js.map +1 -0
  748. package/dist/lib/syntax/languages/mongodb.js +24 -0
  749. package/dist/lib/syntax/languages/mongodb.js.map +1 -0
  750. package/dist/lib/syntax/languages/plain.js +10 -0
  751. package/dist/lib/syntax/languages/plain.js.map +1 -0
  752. package/dist/lib/syntax/languages/sql.js +113 -0
  753. package/dist/lib/syntax/languages/sql.js.map +1 -0
  754. package/dist/lib/syntax/languages/vue.js +31 -0
  755. package/dist/lib/syntax/languages/vue.js.map +1 -0
  756. package/dist/lib/syntax/languages/yaml.js +55 -0
  757. package/dist/lib/syntax/languages/yaml.js.map +1 -0
  758. package/dist/lib/syntax/markdown/grammar.js +52 -0
  759. package/dist/lib/syntax/markdown/grammar.js.map +1 -0
  760. package/dist/lib/syntax/markdown/inline.js +477 -0
  761. package/dist/lib/syntax/markdown/inline.js.map +1 -0
  762. package/dist/lib/syntax/markdown/parse.js +464 -0
  763. package/dist/lib/syntax/markdown/parse.js.map +1 -0
  764. package/dist/lib/syntax/markdown/refs.js +94 -0
  765. package/dist/lib/syntax/markdown/refs.js.map +1 -0
  766. package/dist/lib/syntax/markdown/render.js +230 -0
  767. package/dist/lib/syntax/markdown/render.js.map +1 -0
  768. package/dist/lib/syntax/markdown/spans.js +40 -0
  769. package/dist/lib/syntax/markdown/spans.js.map +1 -0
  770. package/dist/lib/syntax/registry.js +55 -0
  771. package/dist/lib/syntax/registry.js.map +1 -0
  772. package/dist/lib/syntax/tokenize.js +96 -0
  773. package/dist/lib/syntax/tokenize.js.map +1 -0
  774. package/dist/lib/time/instant.js +7 -0
  775. package/dist/lib/time/instant.js.map +1 -0
  776. package/dist/lib/time/plain.js +83 -0
  777. package/dist/lib/time/plain.js.map +1 -0
  778. package/dist/lib/time/relativeAge.js +20 -0
  779. package/dist/lib/time/relativeAge.js.map +1 -0
  780. package/dist/lib/time/relativeClock.js +59 -0
  781. package/dist/lib/time/relativeClock.js.map +1 -0
  782. package/dist/lib/time/types.js +23 -0
  783. package/dist/lib/time/types.js.map +1 -0
  784. package/dist/lib/time/zone.js +148 -0
  785. package/dist/lib/time/zone.js.map +1 -0
  786. package/dist/lib/use-controllable.js +16 -0
  787. package/dist/lib/use-controllable.js.map +1 -0
  788. package/dist/lib/use-fill-height.js +49 -0
  789. package/dist/lib/use-fill-height.js.map +1 -0
  790. package/dist/lib/use-hydrated.js +14 -0
  791. package/dist/lib/use-hydrated.js.map +1 -0
  792. package/dist/lib/use-media-query.js +30 -0
  793. package/dist/lib/use-media-query.js.map +1 -0
  794. package/dist/lib/use-relabel-base-ui-dismiss.js +26 -0
  795. package/dist/lib/use-relabel-base-ui-dismiss.js.map +1 -0
  796. package/dist/lib/use-release-snap-drag.js +29 -0
  797. package/dist/lib/use-release-snap-drag.js.map +1 -0
  798. package/dist/lib/use-roving-options.js +18 -0
  799. package/dist/lib/use-roving-options.js.map +1 -0
  800. package/dist/lib/values/absent.js +5 -0
  801. package/dist/lib/values/absent.js.map +1 -0
  802. package/dist/lib/values/boolean.js +13 -0
  803. package/dist/lib/values/boolean.js.map +1 -0
  804. package/dist/lib/values/currency.js +23 -0
  805. package/dist/lib/values/currency.js.map +1 -0
  806. package/dist/lib/values/date.js +35 -0
  807. package/dist/lib/values/date.js.map +1 -0
  808. package/dist/lib/values/datetime.js +54 -0
  809. package/dist/lib/values/datetime.js.map +1 -0
  810. package/dist/lib/values/locale-date.js +60 -0
  811. package/dist/lib/values/locale-date.js.map +1 -0
  812. package/dist/lib/values/number.js +16 -0
  813. package/dist/lib/values/number.js.map +1 -0
  814. package/dist/pure.js +379 -0
  815. package/dist/pure.js.map +1 -0
  816. package/dist/styles.css +190 -0
  817. package/dist/theme.css +360 -0
  818. package/dist/types/components/Accordion.d.ts +15 -0
  819. package/dist/types/components/AgentWorkingSpinner.d.ts +23 -0
  820. package/dist/types/components/AppShell.d.ts +164 -0
  821. package/dist/types/components/Attention.d.ts +87 -0
  822. package/dist/types/components/Avatar.d.ts +154 -0
  823. package/dist/types/components/Badge.d.ts +131 -0
  824. package/dist/types/components/Board.d.ts +239 -0
  825. package/dist/types/components/Button.d.ts +208 -0
  826. package/dist/types/components/Callout.d.ts +163 -0
  827. package/dist/types/components/Card.d.ts +219 -0
  828. package/dist/types/components/Choice.d.ts +127 -0
  829. package/dist/types/components/CodeEditor.d.ts +86 -0
  830. package/dist/types/components/ColorPicker.d.ts +14 -0
  831. package/dist/types/components/Combobox.d.ts +43 -0
  832. package/dist/types/components/CommandPalette.d.ts +35 -0
  833. package/dist/types/components/ConcentricRing.d.ts +61 -0
  834. package/dist/types/components/ConnectionCard.d.ts +64 -0
  835. package/dist/types/components/ContextItemRow.d.ts +35 -0
  836. package/dist/types/components/CopyValue.d.ts +14 -0
  837. package/dist/types/components/CountBadge.d.ts +14 -0
  838. package/dist/types/components/DateCalendar.d.ts +30 -0
  839. package/dist/types/components/DateField.d.ts +29 -0
  840. package/dist/types/components/DatePicker.d.ts +20 -0
  841. package/dist/types/components/DateTimeText.d.ts +9 -0
  842. package/dist/types/components/DescriptionList.d.ts +40 -0
  843. package/dist/types/components/Dialog.d.ts +269 -0
  844. package/dist/types/components/DragDrop.d.ts +196 -0
  845. package/dist/types/components/Drawer.d.ts +163 -0
  846. package/dist/types/components/EditGutter.d.ts +44 -0
  847. package/dist/types/components/EmojiPicker.d.ts +30 -0
  848. package/dist/types/components/ErrorBoundary.d.ts +43 -0
  849. package/dist/types/components/Field.d.ts +37 -0
  850. package/dist/types/components/FileUpload.d.ts +22 -0
  851. package/dist/types/components/FilterMenu.d.ts +120 -0
  852. package/dist/types/components/GatesSection.d.ts +79 -0
  853. package/dist/types/components/Icon.d.ts +40 -0
  854. package/dist/types/components/IconButton.d.ts +69 -0
  855. package/dist/types/components/IconStack.d.ts +28 -0
  856. package/dist/types/components/ImageUploadField.d.ts +38 -0
  857. package/dist/types/components/InlineEdit.d.ts +183 -0
  858. package/dist/types/components/InlineMarkdownEdit.d.ts +100 -0
  859. package/dist/types/components/Input.d.ts +128 -0
  860. package/dist/types/components/LegalDocument.d.ts +23 -0
  861. package/dist/types/components/LineDiff.d.ts +53 -0
  862. package/dist/types/components/ListHeader.d.ts +45 -0
  863. package/dist/types/components/Loading.d.ts +131 -0
  864. package/dist/types/components/Markdown.d.ts +35 -0
  865. package/dist/types/components/MarkdownEditor.d.ts +129 -0
  866. package/dist/types/components/Menu.d.ts +157 -0
  867. package/dist/types/components/Navigation.d.ts +67 -0
  868. package/dist/types/components/NumberInput.d.ts +177 -0
  869. package/dist/types/components/OTPInput.d.ts +13 -0
  870. package/dist/types/components/OrderedEntityManager.d.ts +64 -0
  871. package/dist/types/components/PagedWindowList.d.ts +23 -0
  872. package/dist/types/components/PaginationBar.d.ts +31 -0
  873. package/dist/types/components/Panel.d.ts +94 -0
  874. package/dist/types/components/PasswordInput.d.ts +7 -0
  875. package/dist/types/components/PasswordRequirements.d.ts +11 -0
  876. package/dist/types/components/PatchDiff.d.ts +38 -0
  877. package/dist/types/components/PendingVeil.d.ts +8 -0
  878. package/dist/types/components/Popover.d.ts +231 -0
  879. package/dist/types/components/Progress.d.ts +580 -0
  880. package/dist/types/components/RatingScale.d.ts +30 -0
  881. package/dist/types/components/ReadMore.d.ts +26 -0
  882. package/dist/types/components/RecordCard.d.ts +413 -0
  883. package/dist/types/components/RelativeTime.d.ts +17 -0
  884. package/dist/types/components/SandboxedFrame.d.ts +37 -0
  885. package/dist/types/components/SearchInput.d.ts +6 -0
  886. package/dist/types/components/SecretField.d.ts +90 -0
  887. package/dist/types/components/SectionNav.d.ts +15 -0
  888. package/dist/types/components/Select.d.ts +53 -0
  889. package/dist/types/components/SequenceDiagram.d.ts +15 -0
  890. package/dist/types/components/SettingRow.d.ts +144 -0
  891. package/dist/types/components/SignOffRings.d.ts +29 -0
  892. package/dist/types/components/Slider.d.ts +255 -0
  893. package/dist/types/components/SolutionChoice.d.ts +49 -0
  894. package/dist/types/components/SortMenu.d.ts +45 -0
  895. package/dist/types/components/Spinner.d.ts +29 -0
  896. package/dist/types/components/Stat.d.ts +136 -0
  897. package/dist/types/components/StatusSelect.d.ts +93 -0
  898. package/dist/types/components/Surface.d.ts +145 -0
  899. package/dist/types/components/Table.d.ts +164 -0
  900. package/dist/types/components/Tabs.d.ts +142 -0
  901. package/dist/types/components/ThemeMenu.d.ts +56 -0
  902. package/dist/types/components/Toast.d.ts +63 -0
  903. package/dist/types/components/Toggle.d.ts +168 -0
  904. package/dist/types/components/ToggleMatrix.d.ts +51 -0
  905. package/dist/types/components/Tree.d.ts +20 -0
  906. package/dist/types/components/TriStateSwitch.d.ts +63 -0
  907. package/dist/types/components/VideoPlayer.d.ts +26 -0
  908. package/dist/types/components/auth/AcceptInvitationCard.d.ts +54 -0
  909. package/dist/types/components/auth/AuthLayout.d.ts +12 -0
  910. package/dist/types/components/auth/ForgotPasswordForm.d.ts +6 -0
  911. package/dist/types/components/auth/LoginForm.d.ts +13 -0
  912. package/dist/types/components/auth/ResetPasswordForm.d.ts +9 -0
  913. package/dist/types/components/auth/SignInProviders.d.ts +56 -0
  914. package/dist/types/components/auth/SignupCard.d.ts +62 -0
  915. package/dist/types/components/auth/TermsAcceptance.d.ts +14 -0
  916. package/dist/types/components/auth/index.d.ts +8 -0
  917. package/dist/types/components/board/context.d.ts +65 -0
  918. package/dist/types/components/board/recipe.d.ts +97 -0
  919. package/dist/types/components/calendar/CalendarMonth.d.ts +32 -0
  920. package/dist/types/components/calendar/CalendarTimeGrid.d.ts +74 -0
  921. package/dist/types/components/calendar/EventActions.d.ts +16 -0
  922. package/dist/types/components/calendar/format.d.ts +42 -0
  923. package/dist/types/components/calendar/palette.d.ts +17 -0
  924. package/dist/types/components/calendar/use-calendar-drag.d.ts +53 -0
  925. package/dist/types/components/calendar/use-event-keyboard.d.ts +23 -0
  926. package/dist/types/components/calendar/use-grid-navigation.d.ts +47 -0
  927. package/dist/types/components/calendar/use-now.d.ts +20 -0
  928. package/dist/types/components/card-face/AcRingGlyph.d.ts +20 -0
  929. package/dist/types/components/card-face/BoardCardAgentSlot.d.ts +19 -0
  930. package/dist/types/components/card-face/CardFace.d.ts +106 -0
  931. package/dist/types/components/card-face/CardTypeBadge.d.ts +21 -0
  932. package/dist/types/components/card-face/EffortBadge.d.ts +9 -0
  933. package/dist/types/components/card-face/GateRingGlyph.d.ts +22 -0
  934. package/dist/types/components/card-face/OverflowRow.d.ts +40 -0
  935. package/dist/types/components/card-face/TapTip.d.ts +15 -0
  936. package/dist/types/components/card-face/hit-area.d.ts +20 -0
  937. package/dist/types/components/card-face/vocabulary.d.ts +83 -0
  938. package/dist/types/components/chart/BarList.d.ts +27 -0
  939. package/dist/types/components/chart/LineChart.d.ts +64 -0
  940. package/dist/types/components/chart/ShareBar.d.ts +26 -0
  941. package/dist/types/components/chart/TimeSeriesChart.d.ts +60 -0
  942. package/dist/types/components/chart/label-metrics.d.ts +9 -0
  943. package/dist/types/components/chart/line-chart-axis.d.ts +14 -0
  944. package/dist/types/components/chart/line-chart-scale.d.ts +55 -0
  945. package/dist/types/components/chart/line-series-style.d.ts +14 -0
  946. package/dist/types/components/chart/share-bar-labels.d.ts +17 -0
  947. package/dist/types/components/chart/shared.d.ts +122 -0
  948. package/dist/types/components/chart/time-series-scale.d.ts +29 -0
  949. package/dist/types/components/chat/Attachment.d.ts +125 -0
  950. package/dist/types/components/chat/Chat.d.ts +60 -0
  951. package/dist/types/components/chat/Composer.d.ts +62 -0
  952. package/dist/types/components/chat/ContextMeter.d.ts +45 -0
  953. package/dist/types/components/chat/EffortControl.d.ts +23 -0
  954. package/dist/types/components/chat/FileCover.d.ts +14 -0
  955. package/dist/types/components/chat/Message.d.ts +66 -0
  956. package/dist/types/components/chat/MessageScroller.d.ts +18 -0
  957. package/dist/types/components/chat/ModelSelector.d.ts +44 -0
  958. package/dist/types/components/chat/StreamingMarkdown.d.ts +11 -0
  959. package/dist/types/components/chat/download-file.d.ts +7 -0
  960. package/dist/types/components/chat/file-icon.d.ts +29 -0
  961. package/dist/types/components/chat/types.d.ts +165 -0
  962. package/dist/types/components/checklist/StatusChecklist.d.ts +37 -0
  963. package/dist/types/components/checklist/index.d.ts +3 -0
  964. package/dist/types/components/checklist/tally.d.ts +19 -0
  965. package/dist/types/components/checklist/types.d.ts +28 -0
  966. package/dist/types/components/code-editor/context.d.ts +32 -0
  967. package/dist/types/components/code-editor/editing.d.ts +39 -0
  968. package/dist/types/components/code-editor/highlight.d.ts +20 -0
  969. package/dist/types/components/code-editor/recipe.d.ts +109 -0
  970. package/dist/types/components/date-timeline/DateTimeline.d.ts +99 -0
  971. package/dist/types/components/date-timeline/TimelineRow.d.ts +22 -0
  972. package/dist/types/components/date-timeline/useBarDrag.d.ts +15 -0
  973. package/dist/types/components/date-timeline/useMarkerDrag.d.ts +14 -0
  974. package/dist/types/components/date-timeline/useTimelineZoom.d.ts +23 -0
  975. package/dist/types/components/drag-drop/context.d.ts +85 -0
  976. package/dist/types/components/drag-drop/recipe.d.ts +163 -0
  977. package/dist/types/components/drag-drop/shift.d.ts +153 -0
  978. package/dist/types/components/edit/activation.d.ts +21 -0
  979. package/dist/types/components/edit/outcome.d.ts +29 -0
  980. package/dist/types/components/edit/use-edit-session.d.ts +77 -0
  981. package/dist/types/components/file-viewer/FileViewer.d.ts +2 -0
  982. package/dist/types/components/file-viewer/PageNumberJumpField.d.ts +9 -0
  983. package/dist/types/components/file-viewer/ViewerControls.d.ts +20 -0
  984. package/dist/types/components/file-viewer/ViewerRail.d.ts +10 -0
  985. package/dist/types/components/file-viewer/ViewerStage.d.ts +22 -0
  986. package/dist/types/components/file-viewer/frames.d.ts +28 -0
  987. package/dist/types/components/file-viewer/index.d.ts +3 -0
  988. package/dist/types/components/file-viewer/types.d.ts +70 -0
  989. package/dist/types/components/file-viewer/use-frame-cursor.d.ts +13 -0
  990. package/dist/types/components/file-viewer/use-viewer-keys.d.ts +24 -0
  991. package/dist/types/components/file-viewer/use-viewer-zoom.d.ts +29 -0
  992. package/dist/types/components/focus-web/FocusWeb.d.ts +3 -0
  993. package/dist/types/components/focus-web/index.d.ts +4 -0
  994. package/dist/types/components/focus-web/layout.d.ts +55 -0
  995. package/dist/types/components/focus-web/types.d.ts +131 -0
  996. package/dist/types/components/graph-explorer/GraphExplorer.d.ts +42 -0
  997. package/dist/types/components/graph-explorer/camera-math.d.ts +119 -0
  998. package/dist/types/components/graph-explorer/index.d.ts +5 -0
  999. package/dist/types/components/graph-explorer/tree-layout.d.ts +67 -0
  1000. package/dist/types/components/graph-explorer/types.d.ts +62 -0
  1001. package/dist/types/components/graph-explorer/use-camera.d.ts +81 -0
  1002. package/dist/types/components/graph-explorer/viewport-gesture.d.ts +32 -0
  1003. package/dist/types/components/kanban/KanbanBoard.d.ts +72 -0
  1004. package/dist/types/components/kanban/recipe.d.ts +73 -0
  1005. package/dist/types/components/kanban/types.d.ts +55 -0
  1006. package/dist/types/components/markdown/Affordances.d.ts +105 -0
  1007. package/dist/types/components/markdown/AttachmentStrip.d.ts +25 -0
  1008. package/dist/types/components/markdown/ImageUpload.d.ts +56 -0
  1009. package/dist/types/components/media-error.d.ts +11 -0
  1010. package/dist/types/components/nav-sections.d.ts +10 -0
  1011. package/dist/types/components/node-canvas/NodeCanvas.d.ts +66 -0
  1012. package/dist/types/components/node-canvas/index.d.ts +3 -0
  1013. package/dist/types/components/node-canvas/layout.d.ts +29 -0
  1014. package/dist/types/components/node-canvas/types.d.ts +207 -0
  1015. package/dist/types/components/node-canvas/use-canvas-gestures.d.ts +39 -0
  1016. package/dist/types/components/openapi/OpenApiViewer.d.ts +14 -0
  1017. package/dist/types/components/openapi/OperationCard.d.ts +33 -0
  1018. package/dist/types/components/openapi/SchemaView.d.ts +14 -0
  1019. package/dist/types/components/openapi/index.d.ts +6 -0
  1020. package/dist/types/components/openapi/resolve.d.ts +72 -0
  1021. package/dist/types/components/openapi/types.d.ts +128 -0
  1022. package/dist/types/components/overlay-shell.d.ts +48 -0
  1023. package/dist/types/components/overlay-stack.d.ts +18 -0
  1024. package/dist/types/components/paged-window/PageBlock.d.ts +31 -0
  1025. package/dist/types/components/provenance/ConfidenceBar.d.ts +118 -0
  1026. package/dist/types/components/provenance/ConfidenceMeter.d.ts +21 -0
  1027. package/dist/types/components/provenance/ConfidenceReadout.d.ts +17 -0
  1028. package/dist/types/components/provenance/ProvenanceBadge.d.ts +23 -0
  1029. package/dist/types/components/provenance/ProvenanceDetail.d.ts +109 -0
  1030. package/dist/types/components/provenance/ProvenanceDisclosure.d.ts +107 -0
  1031. package/dist/types/components/provenance/absence.d.ts +37 -0
  1032. package/dist/types/components/provenance/index.d.ts +7 -0
  1033. package/dist/types/components/provenance/types.d.ts +137 -0
  1034. package/dist/types/components/rbac/AccessRequestPanel.d.ts +92 -0
  1035. package/dist/types/components/rbac/AccountMenu.d.ts +46 -0
  1036. package/dist/types/components/rbac/AgentKeysList.d.ts +20 -0
  1037. package/dist/types/components/rbac/ApiKeysPanel.d.ts +26 -0
  1038. package/dist/types/components/rbac/ApiKeysTable.d.ts +63 -0
  1039. package/dist/types/components/rbac/Brand.d.ts +8 -0
  1040. package/dist/types/components/rbac/Can.d.ts +19 -0
  1041. package/dist/types/components/rbac/ChangePasswordForm.d.ts +18 -0
  1042. package/dist/types/components/rbac/DangerZone.d.ts +8 -0
  1043. package/dist/types/components/rbac/DevToolsPopover.d.ts +36 -0
  1044. package/dist/types/components/rbac/EndedLine.d.ts +21 -0
  1045. package/dist/types/components/rbac/InvitationsList.d.ts +39 -0
  1046. package/dist/types/components/rbac/InviteMembersDialog.d.ts +21 -0
  1047. package/dist/types/components/rbac/MembersPanel.d.ts +31 -0
  1048. package/dist/types/components/rbac/PermissionRequestPanel.d.ts +36 -0
  1049. package/dist/types/components/rbac/ProfileForm.d.ts +27 -0
  1050. package/dist/types/components/rbac/ProfilePage.d.ts +16 -0
  1051. package/dist/types/components/rbac/RBACProvider.d.ts +69 -0
  1052. package/dist/types/components/rbac/RoleEditorDialog.d.ts +28 -0
  1053. package/dist/types/components/rbac/RoleKeyPicker.d.ts +24 -0
  1054. package/dist/types/components/rbac/RolePermissionMatrix.d.ts +21 -0
  1055. package/dist/types/components/rbac/RolesPermissionsPage.d.ts +24 -0
  1056. package/dist/types/components/rbac/SessionsList.d.ts +35 -0
  1057. package/dist/types/components/rbac/TeamSettingsForm.d.ts +22 -0
  1058. package/dist/types/components/rbac/TeamSwitcher.d.ts +5 -0
  1059. package/dist/types/components/rbac/approvalPanelParts.d.ts +69 -0
  1060. package/dist/types/components/rbac/index.d.ts +25 -0
  1061. package/dist/types/components/rbac/permissionSections.d.ts +8 -0
  1062. package/dist/types/components/rbac/stagedForm.d.ts +25 -0
  1063. package/dist/types/components/rbac/types.d.ts +65 -0
  1064. package/dist/types/components/rbac/useStagedImage.d.ts +15 -0
  1065. package/dist/types/components/roadmap/PhaseManager.d.ts +19 -0
  1066. package/dist/types/components/roadmap/RoadmapItemCard.d.ts +51 -0
  1067. package/dist/types/components/roadmap/RoadmapPage.d.ts +12 -0
  1068. package/dist/types/components/roadmap/RoadmapSwimlaneBoard.d.ts +15 -0
  1069. package/dist/types/components/roadmap/TrackManager.d.ts +19 -0
  1070. package/dist/types/components/roadmap/UseCaseCard.d.ts +30 -0
  1071. package/dist/types/components/roadmap/UseCaseLedgerPage.d.ts +29 -0
  1072. package/dist/types/components/roadmap/chip-tones.d.ts +2 -0
  1073. package/dist/types/components/roadmap/derive.d.ts +39 -0
  1074. package/dist/types/components/roadmap/index.d.ts +10 -0
  1075. package/dist/types/components/roadmap/types.d.ts +86 -0
  1076. package/dist/types/components/stepper/Stepper.d.ts +79 -0
  1077. package/dist/types/components/stepper/derive.d.ts +49 -0
  1078. package/dist/types/components/stepper/index.d.ts +3 -0
  1079. package/dist/types/components/stepper/types.d.ts +118 -0
  1080. package/dist/types/icons/data.d.ts +2054 -0
  1081. package/dist/types/index.d.ts +209 -0
  1082. package/dist/types/lib/attention.d.ts +62 -0
  1083. package/dist/types/lib/board/anchor.d.ts +69 -0
  1084. package/dist/types/lib/board/index.d.ts +17 -0
  1085. package/dist/types/lib/board/model.d.ts +43 -0
  1086. package/dist/types/lib/board/move.d.ts +181 -0
  1087. package/dist/types/lib/board/position.d.ts +22 -0
  1088. package/dist/types/lib/board/rejection.d.ts +8 -0
  1089. package/dist/types/lib/board/types.d.ts +294 -0
  1090. package/dist/types/lib/board/use-board.d.ts +47 -0
  1091. package/dist/types/lib/calendar/band-packer.d.ts +53 -0
  1092. package/dist/types/lib/calendar/drag.d.ts +125 -0
  1093. package/dist/types/lib/calendar/index.d.ts +4 -0
  1094. package/dist/types/lib/calendar/lane-packer.d.ts +88 -0
  1095. package/dist/types/lib/calendar/segments.d.ts +91 -0
  1096. package/dist/types/lib/calendar/types.d.ts +166 -0
  1097. package/dist/types/lib/chart-palette.d.ts +14 -0
  1098. package/dist/types/lib/clipboard.d.ts +12 -0
  1099. package/dist/types/lib/cn.d.ts +7 -0
  1100. package/dist/types/lib/color.d.ts +14 -0
  1101. package/dist/types/lib/component-guidance.d.ts +15 -0
  1102. package/dist/types/lib/confidence.d.ts +28 -0
  1103. package/dist/types/lib/date-timeline/scale.d.ts +143 -0
  1104. package/dist/types/lib/design-frame/document.d.ts +39 -0
  1105. package/dist/types/lib/design-frame/mini-app-script.d.ts +29 -0
  1106. package/dist/types/lib/design-frame/mini-app.d.ts +17 -0
  1107. package/dist/types/lib/design-frame/protocol.d.ts +78 -0
  1108. package/dist/types/lib/dev-warn.d.ts +10 -0
  1109. package/dist/types/lib/dnd/announce.d.ts +124 -0
  1110. package/dist/types/lib/dnd/autoscroll.d.ts +88 -0
  1111. package/dist/types/lib/dnd/cross-drop.d.ts +18 -0
  1112. package/dist/types/lib/dnd/geometry.d.ts +126 -0
  1113. package/dist/types/lib/dnd/index.d.ts +17 -0
  1114. package/dist/types/lib/dnd/sensors/gesture.d.ts +37 -0
  1115. package/dist/types/lib/dnd/sensors/keyboard.d.ts +54 -0
  1116. package/dist/types/lib/dnd/sensors/pointer.d.ts +59 -0
  1117. package/dist/types/lib/dnd/session.d.ts +124 -0
  1118. package/dist/types/lib/dnd/types.d.ts +226 -0
  1119. package/dist/types/lib/dnd/use-drag.d.ts +82 -0
  1120. package/dist/types/lib/dom/scroll-ancestor.d.ts +15 -0
  1121. package/dist/types/lib/format.d.ts +33 -0
  1122. package/dist/types/lib/group-in-order.d.ts +13 -0
  1123. package/dist/types/lib/header-fold.d.ts +10 -0
  1124. package/dist/types/lib/i18n/areas/auth-provenance-flows.d.ts +287 -0
  1125. package/dist/types/lib/i18n/areas/board.d.ts +51 -0
  1126. package/dist/types/lib/i18n/areas/card-face.d.ts +8 -0
  1127. package/dist/types/lib/i18n/areas/chat-chart.d.ts +202 -0
  1128. package/dist/types/lib/i18n/areas/code-editor.d.ts +40 -0
  1129. package/dist/types/lib/i18n/areas/date-timeline.d.ts +36 -0
  1130. package/dist/types/lib/i18n/areas/dates.d.ts +103 -0
  1131. package/dist/types/lib/i18n/areas/docs-views.d.ts +297 -0
  1132. package/dist/types/lib/i18n/areas/feedback.d.ts +132 -0
  1133. package/dist/types/lib/i18n/areas/formats.d.ts +30 -0
  1134. package/dist/types/lib/i18n/areas/forms.d.ts +182 -0
  1135. package/dist/types/lib/i18n/areas/keys.d.ts +15 -0
  1136. package/dist/types/lib/i18n/areas/markdown.d.ts +150 -0
  1137. package/dist/types/lib/i18n/areas/move-rejected.d.ts +16 -0
  1138. package/dist/types/lib/i18n/areas/navigation.d.ts +185 -0
  1139. package/dist/types/lib/i18n/areas/rbac.d.ts +633 -0
  1140. package/dist/types/lib/i18n/emphasis.d.ts +3 -0
  1141. package/dist/types/lib/i18n/index.d.ts +10 -0
  1142. package/dist/types/lib/i18n/number-format.d.ts +5 -0
  1143. package/dist/types/lib/i18n/plural.d.ts +7 -0
  1144. package/dist/types/lib/i18n/provider.d.ts +16 -0
  1145. package/dist/types/lib/i18n/strings.d.ts +18 -0
  1146. package/dist/types/lib/icons.d.ts +22 -0
  1147. package/dist/types/lib/interactive-target.d.ts +3 -0
  1148. package/dist/types/lib/intl-cache.d.ts +31 -0
  1149. package/dist/types/lib/legal-document.d.ts +82 -0
  1150. package/dist/types/lib/line-diff-model.d.ts +39 -0
  1151. package/dist/types/lib/markdown/attachments.d.ts +50 -0
  1152. package/dist/types/lib/markdown/caret-map.d.ts +69 -0
  1153. package/dist/types/lib/markdown/caret.d.ts +6 -0
  1154. package/dist/types/lib/markdown/commands.d.ts +186 -0
  1155. package/dist/types/lib/markdown/convert.d.ts +99 -0
  1156. package/dist/types/lib/markdown/dom.d.ts +30 -0
  1157. package/dist/types/lib/markdown/edit.d.ts +16 -0
  1158. package/dist/types/lib/markdown/history.d.ts +59 -0
  1159. package/dist/types/lib/markdown/hotkeys.d.ts +63 -0
  1160. package/dist/types/lib/markdown/image-pipeline.d.ts +173 -0
  1161. package/dist/types/lib/markdown/images.d.ts +138 -0
  1162. package/dist/types/lib/markdown/input.d.ts +38 -0
  1163. package/dist/types/lib/markdown/keys.d.ts +34 -0
  1164. package/dist/types/lib/markdown/paste.d.ts +9 -0
  1165. package/dist/types/lib/markdown/position.d.ts +43 -0
  1166. package/dist/types/lib/markdown/project.d.ts +88 -0
  1167. package/dist/types/lib/markdown/reconcile.d.ts +63 -0
  1168. package/dist/types/lib/markdown/surface.d.ts +236 -0
  1169. package/dist/types/lib/motion.d.ts +30 -0
  1170. package/dist/types/lib/pad.d.ts +6 -0
  1171. package/dist/types/lib/paged-window/index.d.ts +2 -0
  1172. package/dist/types/lib/paged-window/layout.d.ts +21 -0
  1173. package/dist/types/lib/paged-window/list-owner.d.ts +12 -0
  1174. package/dist/types/lib/paged-window/records-binding.d.ts +102 -0
  1175. package/dist/types/lib/paged-window/store.d.ts +307 -0
  1176. package/dist/types/lib/paged-window/use-measured-pitch.d.ts +34 -0
  1177. package/dist/types/lib/paged-window/use-page-visibility.d.ts +20 -0
  1178. package/dist/types/lib/paged-window/use-paged-window.d.ts +61 -0
  1179. package/dist/types/lib/paged-window/use-scroll-root.d.ts +18 -0
  1180. package/dist/types/lib/persist.d.ts +57 -0
  1181. package/dist/types/lib/preference-values.d.ts +72 -0
  1182. package/dist/types/lib/preferences.d.ts +26 -0
  1183. package/dist/types/lib/reads/hooks.d.ts +49 -0
  1184. package/dist/types/lib/reads/index.d.ts +5 -0
  1185. package/dist/types/lib/reads/optimistic.d.ts +119 -0
  1186. package/dist/types/lib/reads/refetch.d.ts +83 -0
  1187. package/dist/types/lib/reads/slots.d.ts +137 -0
  1188. package/dist/types/lib/reads/types.d.ts +155 -0
  1189. package/dist/types/lib/realtime/hooks.d.ts +38 -0
  1190. package/dist/types/lib/realtime/index.d.ts +4 -0
  1191. package/dist/types/lib/realtime/provider.d.ts +38 -0
  1192. package/dist/types/lib/realtime/registry.d.ts +225 -0
  1193. package/dist/types/lib/realtime/types.d.ts +242 -0
  1194. package/dist/types/lib/records/define-record-type.d.ts +29 -0
  1195. package/dist/types/lib/records/hooks.d.ts +46 -0
  1196. package/dist/types/lib/records/index.d.ts +5 -0
  1197. package/dist/types/lib/records/store.d.ts +289 -0
  1198. package/dist/types/lib/records/types.d.ts +195 -0
  1199. package/dist/types/lib/records/wire.d.ts +96 -0
  1200. package/dist/types/lib/reduced-motion-help.d.ts +23 -0
  1201. package/dist/types/lib/scroll-caret.d.ts +6 -0
  1202. package/dist/types/lib/sim/createSimStore.d.ts +18 -0
  1203. package/dist/types/lib/sim/index.d.ts +5 -0
  1204. package/dist/types/lib/sim/latency.d.ts +10 -0
  1205. package/dist/types/lib/sim/registry.d.ts +14 -0
  1206. package/dist/types/lib/sim/settings.d.ts +11 -0
  1207. package/dist/types/lib/sim/types.d.ts +3 -0
  1208. package/dist/types/lib/submit-shortcut.d.ts +24 -0
  1209. package/dist/types/lib/syntax/index.d.ts +16 -0
  1210. package/dist/types/lib/syntax/languages/bash.d.ts +1 -0
  1211. package/dist/types/lib/syntax/languages/css.d.ts +1 -0
  1212. package/dist/types/lib/syntax/languages/html.d.ts +17 -0
  1213. package/dist/types/lib/syntax/languages/index.d.ts +33 -0
  1214. package/dist/types/lib/syntax/languages/javascript.d.ts +22 -0
  1215. package/dist/types/lib/syntax/languages/json.d.ts +1 -0
  1216. package/dist/types/lib/syntax/languages/mongodb.d.ts +1 -0
  1217. package/dist/types/lib/syntax/languages/plain.d.ts +9 -0
  1218. package/dist/types/lib/syntax/languages/sql.d.ts +4 -0
  1219. package/dist/types/lib/syntax/languages/vue.d.ts +1 -0
  1220. package/dist/types/lib/syntax/languages/yaml.d.ts +1 -0
  1221. package/dist/types/lib/syntax/markdown/frames.d.ts +145 -0
  1222. package/dist/types/lib/syntax/markdown/grammar.d.ts +1 -0
  1223. package/dist/types/lib/syntax/markdown/index.d.ts +5 -0
  1224. package/dist/types/lib/syntax/markdown/inline.d.ts +21 -0
  1225. package/dist/types/lib/syntax/markdown/parse.d.ts +15 -0
  1226. package/dist/types/lib/syntax/markdown/refs.d.ts +47 -0
  1227. package/dist/types/lib/syntax/markdown/render.d.ts +25 -0
  1228. package/dist/types/lib/syntax/markdown/spans.d.ts +84 -0
  1229. package/dist/types/lib/syntax/markdown/types.d.ts +108 -0
  1230. package/dist/types/lib/syntax/registry.d.ts +37 -0
  1231. package/dist/types/lib/syntax/tokenize.d.ts +17 -0
  1232. package/dist/types/lib/syntax/types.d.ts +119 -0
  1233. package/dist/types/lib/time/index.d.ts +4 -0
  1234. package/dist/types/lib/time/instant.d.ts +2 -0
  1235. package/dist/types/lib/time/plain.d.ts +61 -0
  1236. package/dist/types/lib/time/relativeAge.d.ts +18 -0
  1237. package/dist/types/lib/time/relativeClock.d.ts +8 -0
  1238. package/dist/types/lib/time/types.d.ts +87 -0
  1239. package/dist/types/lib/time/zone.d.ts +106 -0
  1240. package/dist/types/lib/use-controllable.d.ts +14 -0
  1241. package/dist/types/lib/use-fill-height.d.ts +26 -0
  1242. package/dist/types/lib/use-hydrated.d.ts +8 -0
  1243. package/dist/types/lib/use-media-query.d.ts +29 -0
  1244. package/dist/types/lib/use-relabel-base-ui-dismiss.d.ts +6 -0
  1245. package/dist/types/lib/use-release-snap-drag.d.ts +25 -0
  1246. package/dist/types/lib/use-roving-options.d.ts +10 -0
  1247. package/dist/types/lib/values/absent.d.ts +7 -0
  1248. package/dist/types/lib/values/boolean.d.ts +29 -0
  1249. package/dist/types/lib/values/currency.d.ts +22 -0
  1250. package/dist/types/lib/values/date.d.ts +30 -0
  1251. package/dist/types/lib/values/datetime.d.ts +48 -0
  1252. package/dist/types/lib/values/index.d.ts +5 -0
  1253. package/dist/types/lib/values/locale-date.d.ts +34 -0
  1254. package/dist/types/lib/values/number.d.ts +27 -0
  1255. package/dist/types/pure.d.ts +48 -0
  1256. package/package.json +136 -4
@@ -0,0 +1,135 @@
1
+ import { jsx as E } from "react/jsx-runtime";
2
+ import { useRef as r, useState as H, useMemo as W, useLayoutEffect as b } from "react";
3
+ import { cn as A } from "../lib/cn.js";
4
+ import { prepareDesignDocument as $ } from "../lib/design-frame/document.js";
5
+ import { readAppearance as O, parseInboundMessage as z, DESIGN_FRAME_READY as U, DESIGN_FRAME_ERROR as Y, DESIGN_FRAME_ERROR_MAX_LENGTH as V, DESIGN_FRAME_HEIGHT as X, DESIGN_FRAME_APPEARANCE as q, APPEARANCE_ATTRIBUTES as J } from "../lib/design-frame/protocol.js";
6
+ const F = { colorScheme: "normal" }, G = 150;
7
+ let K = 0;
8
+ const Q = () => `doc-${++K}`;
9
+ function Z(n, l, o) {
10
+ return l !== null && n.viewport !== l && n.height !== o;
11
+ }
12
+ const ee = Object.values(J).map((n) => `data-${n}`);
13
+ function se({
14
+ html: n,
15
+ title: l,
16
+ fit: o,
17
+ viewportWidth: h,
18
+ onReady: _,
19
+ onError: I,
20
+ className: T
21
+ }) {
22
+ const s = r(null), p = r(null), R = r({ onReady: _, onError: I });
23
+ R.current = { onReady: _, onError: I };
24
+ const M = r(o);
25
+ M.current = o;
26
+ const [C, P] = H(G), N = r(G), d = r(null), x = r(null), f = r(!1), y = r(""), w = W(() => {
27
+ const e = Q();
28
+ return { id: e, srcdoc: $(n, O(document.documentElement), e) };
29
+ }, [n]), { srcdoc: L } = w;
30
+ y.current = L;
31
+ const v = () => {
32
+ const e = s.current?.contentWindow;
33
+ if (!e) return;
34
+ const c = {
35
+ type: q,
36
+ ...O(document.documentElement)
37
+ };
38
+ e.postMessage(c, "*");
39
+ };
40
+ b(() => {
41
+ const e = s.current;
42
+ if (!e) return;
43
+ const c = (D) => {
44
+ if (D.source !== e.contentWindow) return;
45
+ const t = z(D.data);
46
+ if (t) {
47
+ if (t.type === U)
48
+ v(), R.current.onReady?.();
49
+ else if (t.type === Y)
50
+ R.current.onError?.(t.message.slice(0, V));
51
+ else if (t.type === X) {
52
+ if (t.doc !== x.current || M.current !== "content") return;
53
+ const B = Z(t, d.current, N.current);
54
+ if (d.current = t.viewport, B) return;
55
+ N.current = t.height, P(t.height);
56
+ }
57
+ }
58
+ };
59
+ f.current = !1;
60
+ const a = () => {
61
+ if (!f.current) {
62
+ f.current = !0, e.removeAttribute("src"), e.srcdoc = y.current;
63
+ return;
64
+ }
65
+ v();
66
+ };
67
+ window.addEventListener("message", c), e.addEventListener("load", a), e.src = "about:blank";
68
+ const S = new MutationObserver(v);
69
+ return S.observe(document.documentElement, { attributes: !0, attributeFilter: ee }), () => {
70
+ window.removeEventListener("message", c), e.removeEventListener("load", a), S.disconnect();
71
+ };
72
+ }, []), b(() => {
73
+ s.current && f.current && (s.current.srcdoc = L), x.current = w.id, d.current = null;
74
+ }, [w]);
75
+ const g = o === "content";
76
+ b(() => {
77
+ g && (d.current = null);
78
+ }, [g]);
79
+ const u = typeof o == "object" ? o.scaleToWidth : null, [i, k] = H(null);
80
+ if (b(() => {
81
+ if (u === null) return;
82
+ const e = p.current;
83
+ if (!e) return;
84
+ const c = () => k({ width: e.clientWidth, height: e.clientHeight });
85
+ c();
86
+ const a = new ResizeObserver(c);
87
+ return a.observe(e), () => a.disconnect();
88
+ }, [u]), u !== null) {
89
+ const e = i && i.width > 0 ? i.width / u : null;
90
+ return /* @__PURE__ */ E("div", { ref: p, className: A("relative size-full overflow-hidden", T), children: /* @__PURE__ */ E(
91
+ "iframe",
92
+ {
93
+ ref: s,
94
+ "aria-label": l,
95
+ sandbox: "allow-scripts",
96
+ referrerPolicy: "no-referrer",
97
+ allow: "",
98
+ "aria-hidden": "true",
99
+ tabIndex: -1,
100
+ className: "absolute left-0 top-0 border-0 bg-transparent",
101
+ style: {
102
+ ...F,
103
+ width: u,
104
+ height: i && e ? i.height / e : "100%",
105
+ transform: e ? `scale(${e})` : void 0,
106
+ transformOrigin: "top left",
107
+ pointerEvents: "none",
108
+ visibility: e ? void 0 : "hidden"
109
+ }
110
+ }
111
+ ) });
112
+ }
113
+ const m = g, j = h === void 0 ? "w-full" : m ? "mx-auto max-w-full" : "absolute inset-y-0 left-1/2 max-w-full -translate-x-1/2";
114
+ return /* @__PURE__ */ E("div", { ref: p, className: A("relative w-full", !m && "h-full", T), children: /* @__PURE__ */ E(
115
+ "iframe",
116
+ {
117
+ ref: s,
118
+ "aria-label": l,
119
+ sandbox: "allow-scripts",
120
+ referrerPolicy: "no-referrer",
121
+ allow: "",
122
+ className: A("border-0 bg-transparent", m ? "block" : "h-full", j),
123
+ style: {
124
+ ...F,
125
+ ...h === void 0 ? null : { width: h },
126
+ ...m ? { height: C } : null
127
+ }
128
+ }
129
+ ) });
130
+ }
131
+ export {
132
+ se as SandboxedFrame,
133
+ Z as followsOwnViewport
134
+ };
135
+ //# sourceMappingURL=SandboxedFrame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SandboxedFrame.js","sources":["../../src/components/SandboxedFrame.tsx"],"sourcesContent":["import { useLayoutEffect, useMemo, useRef, useState } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { prepareDesignDocument } from \"../lib/design-frame/document\";\nimport {\n APPEARANCE_ATTRIBUTES,\n DESIGN_FRAME_APPEARANCE,\n DESIGN_FRAME_ERROR,\n DESIGN_FRAME_ERROR_MAX_LENGTH,\n DESIGN_FRAME_HEIGHT,\n DESIGN_FRAME_READY,\n parseInboundMessage,\n readAppearance,\n type DesignFrameAppearanceMessage,\n} from \"../lib/design-frame/protocol\";\n\n/* ============================================================================\n SANDBOXED FRAME — renders an UNTRUSTED single-file HTML document, isolated,\n in the viewer's Appearance (DX-4075).\n\n WHY THE LIBRARY OWNS IT. An application that shows a document an agent wrote\n has nothing it can safely reuse: the only frame in a typical app is its own\n same-origin one. Hand-rolling this per screen is how an `allow-same-origin`\n gets added \"just to make fonts work\", and that single token hands the document\n the viewer's session.\n\n ISOLATION IS THE POINT, AND IT IS FOUR INDEPENDENT LAYERS:\n 1. `sandbox=\"allow-scripts\"` and NOTHING else. No `allow-same-origin`, so the\n frame's origin is opaque (\"null\"): no cookies, no storage, no parent DOM.\n No top navigation, popups, forms or modals.\n 2. `srcdoc`, never `src`. A `src` navigation carries the host's cookie on\n the request and serves the design as a page on the host's origin; `srcdoc`\n makes no request at all.\n 3. A Content-Security-Policy `<meta>` as the FIRST child of the document's\n head, inserted by parsing and self-verified (`prepareDesignDocument`), so\n the document cannot fetch, beacon or submit anywhere.\n 4. `referrerpolicy=\"no-referrer\"` and an empty `allow` (no camera, mic,\n geolocation, ...).\n\n A `srcdoc` document INHERITS its embedder's CSP. If the host ever sends one\n whose `script-src` lacks inline script, every design stops running: check any\n such change against this frame.\n\n THE MESSAGE CHANNEL. The frame's origin is the string \"null\", so an origin\n check on an inbound message proves nothing. What proves it is `event.source`:\n only the iframe's own `contentWindow` is believed. Outbound, the host posts the\n four Appearance values to targetOrigin \"*\", which is safe because the message\n carries no secret.\n\n THE FRAMED DOCUMENT INSTALLS NOTHING (DXUI-6). `prepareDesignDocument` injects one dependency-free\n script that defines `window.danxMiniApp`: it applies the Appearance, says the page is ready,\n reports errors and reports the document's height, so a page built on any version of this\n library, or on another framework, needs no client code.\n ========================================================================= */\n\n/* DX-4693: the iframe ELEMENT's color-scheme is always `normal`, never the host page's. Measured in the\n desktop app's Chromium 152 on a design with no colours of its own: an element whose used scheme is `dark`\n does not paint its out-of-process srcdoc content at all (blank, even after a real wheel scroll), while\n `light` and `normal` paint, and toggling `light` back to `dark` blanks it again. `normal` isolates the\n element from the host's scheme; the framed document picks its own canvas through the scheme it declares\n (`prepareDesignDocument`). */\nconst FRAME_ELEMENT_STYLE = { colorScheme: \"normal\" } as const;\n\nexport type SandboxedFrameFit = \"fill\" | \"content\" | { scaleToWidth: number };\n\n/**\n * DXUI-6: the height a `fit=\"content\"` frame has before the page reports one. Never 0: a page whose\n * root is `100vh` takes its height from the frame, so a frame that started at 0 would report 0 and\n * stay there.\n */\nconst CONTENT_INITIAL_HEIGHT = 150;\n\n/**\n * DXUI-6: a fresh id for every document the host sets. A counter is enough: the id only tells this frame's\n * successive documents apart (a framed page can send any id it likes, so it is never a secret).\n */\nlet documentCounter = 0;\nconst nextDocumentId = () => `doc-${++documentCounter}`;\n\n/**\n * DXUI-6: true when a height report is the page answering the host's own resize rather than a change to the\n * page. A page's height changes together with its viewport height only when it is laid out against that\n * viewport (`min-height: 100vh` plus a margin, `110vh`, `calc(100vh + 2%)`, a shrinking one), and following it\n * resizes the frame, which changes the viewport, which changes the height again, without end. A real content\n * change arrives with the viewport unchanged. So: the viewport moved since the last report (any report, applied\n * or not; the first report has nothing to compare with and always applies) and the height is not the one the\n * frame already has.\n */\nexport function followsOwnViewport(\n message: { height: number; viewport: number },\n lastViewport: number | null,\n currentHeight: number,\n): boolean {\n return lastViewport !== null && message.viewport !== lastViewport && message.height !== currentHeight;\n}\n\nexport interface SandboxedFrameProps {\n /** A complete HTML document. Empty or non-string throws, and so does a document the policy cannot be proven first in. */\n html: string;\n /** The accessible name of the frame. */\n title: string;\n /**\n * `\"fill\"` fills its box. `\"content\"` is as tall as the document reports itself (the page's `<html>` element), so\n * the frame grows and shrinks with the page and the surrounding layout scrolls; a page whose root is `100vh` stays at\n * the frame's own height. `{ scaleToWidth }` is a thumbnail: the document lays out at that viewport width and is\n * scaled by a CSS transform to fit the box; it is not interactive, not focusable and hidden from assistive tech.\n */\n fit: SandboxedFrameFit;\n /** Fill and content modes: lay the document out at this device width (px), centred in the box. */\n viewportWidth?: number;\n /** The framed document has mounted. */\n onReady?: () => void;\n /** The framed document reported a failure. The message is capped at 500 characters and is text, never markup. */\n onError?: (message: string) => void;\n className?: string;\n}\n\n/** The four attributes the host mirrors. `data-motion-suspend` is deliberately absent: it is transient and never posts. */\nconst MIRRORED_ATTRIBUTES = Object.values(APPEARANCE_ATTRIBUTES).map((name) => `data-${name}`);\n\ntype BoxSize = { width: number; height: number };\n\nexport function SandboxedFrame({\n html,\n title,\n fit,\n viewportWidth,\n onReady,\n onError,\n className,\n}: SandboxedFrameProps) {\n /* The accessible name is `aria-label`, not `title`: a native `title` is the banned browser tooltip\n (`no-native-tooltip.test.ts`), and on an iframe it would also pop over the document. */\n const frameRef = useRef<HTMLIFrameElement>(null);\n const boxRef = useRef<HTMLDivElement>(null);\n const callbacks = useRef({ onReady, onError });\n callbacks.current = { onReady, onError };\n /* DXUI-6: the message handler is attached once, so it reads the fit mode through a ref, like `callbacks`. */\n const fitRef = useRef(fit);\n fitRef.current = fit;\n const [contentHeight, setContentHeight] = useState(CONTENT_INITIAL_HEIGHT);\n const contentHeightRef = useRef(CONTENT_INITIAL_HEIGHT);\n const lastViewportRef = useRef<number | null>(null);\n const docIdRef = useRef<string | null>(null);\n /* DX-5652: false until the frame's own `about:blank` load has fired; `srcdocRef` is the document waiting for it. */\n const blankLoadedRef = useRef(false);\n const srcdocRef = useRef(\"\");\n\n /* Prepared in render so a document that cannot be made safe throws to the\n caller's ErrorBoundary rather than rendering. Keyed on `html` alone: the\n Appearance it stamps is only the first paint; the mirror below keeps the\n frame current after that. */\n const prepared = useMemo(() => {\n const id = nextDocumentId();\n return { id, srcdoc: prepareDesignDocument(html, readAppearance(document.documentElement), id) };\n }, [html]);\n const { srcdoc } = prepared;\n srcdocRef.current = srcdoc;\n\n const postAppearance = () => {\n const target = frameRef.current?.contentWindow;\n if (!target) return;\n const message: DesignFrameAppearanceMessage = {\n type: DESIGN_FRAME_APPEARANCE,\n ...readAppearance(document.documentElement),\n };\n target.postMessage(message, \"*\");\n };\n\n /* A LAYOUT effect declared BEFORE the srcdoc layout effect below. Layout effects run in declaration order,\n so the listeners exist before `srcdoc` starts the navigation and neither the frame's first `ready`, an early\n `error` nor its `load` can be missed. A passive `useEffect` would not do: React runs every layout effect of a\n commit before any passive one, so it would attach after the srcdoc assignment. */\n useLayoutEffect(() => {\n const frame = frameRef.current;\n if (!frame) return;\n\n const onMessage = (event: MessageEvent) => {\n if (event.source !== frame.contentWindow) return;\n const message = parseInboundMessage(event.data);\n if (!message) return;\n if (message.type === DESIGN_FRAME_READY) {\n /* The host's Appearance may have moved between the stamp and now. */\n postAppearance();\n callbacks.current.onReady?.();\n } else if (message.type === DESIGN_FRAME_ERROR) {\n callbacks.current.onError?.(message.message.slice(0, DESIGN_FRAME_ERROR_MAX_LENGTH));\n } else if (message.type === DESIGN_FRAME_HEIGHT) {\n /* DXUI-6: setting `srcdoc` only starts a navigation. The old document stays live, in the same window object,\n until the new one commits, so a late report from it (answering a resize, with its own height and\n viewport) can arrive after the swap and look like the new document's feedback loop. Only the document the\n host set last is believed. */\n if (message.doc !== docIdRef.current) return;\n if (fitRef.current !== \"content\") return;\n /* DXUI-6: the viewport is recorded on every report, applied or not, so a refused report still moves the\n baseline and a later real content change (same viewport, new height) applies. */\n const follows = followsOwnViewport(message, lastViewportRef.current, contentHeightRef.current);\n lastViewportRef.current = message.viewport;\n if (follows) return;\n contentHeightRef.current = message.height;\n setContentHeight(message.height);\n }\n };\n /* DX-5652: `srcdoc` must never be the iframe's FIRST navigation. Measured in headless Chrome with a 2 MB\n design: a frame whose first navigation was the `srcdoc` assignment right after attach stayed unlaid-out\n (every rect 0x0, the iframe element itself correctly sized) in 8 of 9 tries, while `about:blank` first and\n `srcdoc` set from that load event laid out 9 of 9. So the frame is sent to `about:blank` here, after the\n listeners exist, and the document is assigned when that load fires (the srcdoc effect below covers every\n later document, once the blank load has happened). The blank load posts no Appearance: nothing is there. */\n blankLoadedRef.current = false;\n const onLoad = () => {\n if (!blankLoadedRef.current) {\n blankLoadedRef.current = true;\n frame.removeAttribute(\"src\");\n frame.srcdoc = srcdocRef.current;\n return;\n }\n postAppearance();\n };\n window.addEventListener(\"message\", onMessage);\n frame.addEventListener(\"load\", onLoad);\n frame.src = \"about:blank\";\n\n const observer = new MutationObserver(postAppearance);\n observer.observe(document.documentElement, { attributes: true, attributeFilter: MIRRORED_ATTRIBUTES });\n\n return () => {\n window.removeEventListener(\"message\", onMessage);\n frame.removeEventListener(\"load\", onLoad);\n observer.disconnect();\n };\n }, []);\n\n /* THE DOM PROPERTY, never markup assembled around the document. */\n useLayoutEffect(() => {\n /* DX-5652: before the blank load the document waits in `srcdocRef`; the load handler above assigns it. */\n if (frameRef.current && blankLoadedRef.current) frameRef.current.srcdoc = srcdoc;\n /* DXUI-6: a new document starts with no viewport memory, so its first report always applies. The frame keeps\n its current height across the swap (shrinking it would resize the old document, which is still live). */\n docIdRef.current = prepared.id;\n lastViewportRef.current = null;\n }, [prepared]);\n\n /* DXUI-6: viewports are recorded only in content mode, so one recorded before a switch to fill mode is stale\n when the frame returns to content. */\n const contentMode = fit === \"content\";\n useLayoutEffect(() => {\n if (contentMode) lastViewportRef.current = null;\n }, [contentMode]);\n\n const scaleToWidth = typeof fit === \"object\" ? fit.scaleToWidth : null;\n const [box, setBox] = useState<BoxSize | null>(null);\n useLayoutEffect(() => {\n if (scaleToWidth === null) return;\n const el = boxRef.current;\n if (!el) return;\n const measure = () => setBox({ width: el.clientWidth, height: el.clientHeight });\n measure();\n const observer = new ResizeObserver(measure);\n observer.observe(el);\n return () => observer.disconnect();\n }, [scaleToWidth]);\n\n if (scaleToWidth !== null) {\n const scale = box && box.width > 0 ? box.width / scaleToWidth : null;\n return (\n <div ref={boxRef} className={cn(\"relative size-full overflow-hidden\", className)}>\n <iframe\n ref={frameRef}\n aria-label={title}\n sandbox=\"allow-scripts\"\n referrerPolicy=\"no-referrer\"\n allow=\"\"\n aria-hidden=\"true\"\n tabIndex={-1}\n className=\"absolute left-0 top-0 border-0 bg-transparent\"\n style={{\n ...FRAME_ELEMENT_STYLE,\n width: scaleToWidth,\n height: box && scale ? box.height / scale : \"100%\",\n transform: scale ? `scale(${scale})` : undefined,\n transformOrigin: \"top left\",\n pointerEvents: \"none\",\n visibility: scale ? undefined : \"hidden\",\n }}\n />\n </div>\n );\n }\n\n const content = contentMode;\n /* DXUI-6: content mode keeps the iframe in normal flow so the wrapper takes its height; only fill mode centres a\n narrower frame with absolute positioning (an absolute child gives its parent no height). */\n const widthClass =\n viewportWidth === undefined\n ? \"w-full\"\n : content\n ? \"mx-auto max-w-full\"\n : \"absolute inset-y-0 left-1/2 max-w-full -translate-x-1/2\";\n return (\n <div ref={boxRef} className={cn(\"relative w-full\", !content && \"h-full\", className)}>\n <iframe\n ref={frameRef}\n aria-label={title}\n sandbox=\"allow-scripts\"\n referrerPolicy=\"no-referrer\"\n allow=\"\"\n className={cn(\"border-0 bg-transparent\", content ? \"block\" : \"h-full\", widthClass)}\n style={{\n ...FRAME_ELEMENT_STYLE,\n ...(viewportWidth === undefined ? null : { width: viewportWidth }),\n ...(content ? { height: contentHeight } : null),\n }}\n />\n </div>\n );\n}\n"],"names":["FRAME_ELEMENT_STYLE","CONTENT_INITIAL_HEIGHT","documentCounter","nextDocumentId","followsOwnViewport","message","lastViewport","currentHeight","MIRRORED_ATTRIBUTES","APPEARANCE_ATTRIBUTES","name","SandboxedFrame","html","title","fit","viewportWidth","onReady","onError","className","frameRef","useRef","boxRef","callbacks","fitRef","contentHeight","setContentHeight","useState","contentHeightRef","lastViewportRef","docIdRef","blankLoadedRef","srcdocRef","prepared","useMemo","id","prepareDesignDocument","readAppearance","srcdoc","postAppearance","target","DESIGN_FRAME_APPEARANCE","useLayoutEffect","frame","onMessage","event","parseInboundMessage","DESIGN_FRAME_READY","DESIGN_FRAME_ERROR","DESIGN_FRAME_ERROR_MAX_LENGTH","DESIGN_FRAME_HEIGHT","follows","onLoad","observer","contentMode","scaleToWidth","box","setBox","el","measure","scale","jsx","cn","content","widthClass"],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { jsx as n } from "react/jsx-runtime";
2
+ import { useRef as a } from "react";
3
+ import { Icon as c } from "./Icon.js";
4
+ import { IconButton as u } from "./IconButton.js";
5
+ import { Input as p } from "./Input.js";
6
+ import { useUiStrings as f } from "../lib/i18n/provider.js";
7
+ function y({ value: o, onValueChange: i, ref: r, ...e }) {
8
+ const m = f().searchInput, s = a(null);
9
+ return /* @__PURE__ */ n(
10
+ p,
11
+ {
12
+ ...e,
13
+ ref: (t) => {
14
+ s.current = t, typeof r == "function" ? r(t) : r && (r.current = t);
15
+ },
16
+ type: "search",
17
+ value: o,
18
+ onChange: (t) => i(t.target.value),
19
+ leading: /* @__PURE__ */ n(c, { name: "search", size: "sm" }),
20
+ trailing: o === "" ? void 0 : /* @__PURE__ */ n(
21
+ u,
22
+ {
23
+ icon: /* @__PURE__ */ n(c, { name: "x", size: "sm" }),
24
+ label: m.clear,
25
+ variant: "ghost",
26
+ size: "sm",
27
+ onClick: () => {
28
+ i(""), s.current?.focus();
29
+ }
30
+ }
31
+ )
32
+ }
33
+ );
34
+ }
35
+ export {
36
+ y as SearchInput
37
+ };
38
+ //# sourceMappingURL=SearchInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchInput.js","sources":["../../src/components/SearchInput.tsx"],"sourcesContent":["import { useRef } from \"react\";\nimport { useUiStrings } from \"../lib/i18n\";\nimport { Icon } from \"./Icon\";\nimport { IconButton } from \"./IconButton\";\nimport { Input, type InputProps } from \"./Input\";\n\n/* ----------------------------------------------------------------------------\n SEARCH INPUT (DX-5567)\n\n A keyword search box: the search icon at the leading edge and, only while the\n box holds text, a clear (x) button at the trailing edge. Clearing empties the\n value and puts focus back in the box so the next word can be typed at once.\n\n CONTROLLED, WITH THE VALUE ITSELF. `onValueChange` gets the string (typing and\n clearing alike), so a host never reads `event.target.value` and clearing is the\n same call as typing an empty box. The field is `type=\"search\"`; `dx-field`\n (Input) suppresses the browser's own clear glyph so only this one shows.\n ---------------------------------------------------------------------------- */\n\nexport interface SearchInputProps extends Omit<InputProps, \"type\" | \"leading\" | \"trailing\" | \"value\" | \"defaultValue\" | \"onChange\"> {\n value: string;\n onValueChange: (value: string) => void;\n}\n\nexport function SearchInput({ value, onValueChange, ref, ...props }: SearchInputProps) {\n const strings = useUiStrings().searchInput;\n const own = useRef<HTMLInputElement | null>(null);\n const attach = (node: HTMLInputElement | null) => {\n own.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n };\n\n return (\n <Input\n {...props}\n ref={attach}\n type=\"search\"\n value={value}\n onChange={(event) => onValueChange(event.target.value)}\n leading={<Icon name=\"search\" size=\"sm\" />}\n trailing={\n value === \"\" ? undefined : (\n <IconButton\n icon={<Icon name=\"x\" size=\"sm\" />}\n label={strings.clear}\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => {\n onValueChange(\"\");\n own.current?.focus();\n }}\n />\n )\n }\n />\n );\n}\n"],"names":["SearchInput","value","onValueChange","ref","props","strings","useUiStrings","own","useRef","jsx","Input","node","event","Icon","IconButton"],"mappings":";;;;;;AAwBO,SAASA,EAAY,EAAE,OAAAC,GAAO,eAAAC,GAAe,KAAAC,GAAK,GAAGC,KAA2B;AACrF,QAAMC,IAAUC,IAAe,aACzBC,IAAMC,EAAgC,IAAI;AAOhD,SACE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACE,GAAGN;AAAA,MACJ,KATW,CAACO,MAAkC;AAChD,QAAAJ,EAAI,UAAUI,GACV,OAAOR,KAAQ,aAAYA,EAAIQ,CAAI,IAC9BR,QAAS,UAAUQ;AAAA,MAC9B;AAAA,MAMI,MAAK;AAAA,MACL,OAAAV;AAAA,MACA,UAAU,CAACW,MAAUV,EAAcU,EAAM,OAAO,KAAK;AAAA,MACrD,SAAS,gBAAAH,EAACI,GAAA,EAAK,MAAK,UAAS,MAAK,MAAK;AAAA,MACvC,UACEZ,MAAU,KAAK,SACb,gBAAAQ;AAAA,QAACK;AAAA,QAAA;AAAA,UACC,MAAM,gBAAAL,EAACI,GAAA,EAAK,MAAK,KAAI,MAAK,MAAK;AAAA,UAC/B,OAAOR,EAAQ;AAAA,UACf,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,SAAS,MAAM;AACb,YAAAH,EAAc,EAAE,GAChBK,EAAI,SAAS,MAAA;AAAA,UACf;AAAA,QAAA;AAAA,MAAA;AAAA,IACF;AAAA,EAAA;AAKV;"}
@@ -0,0 +1,228 @@
1
+ import { jsx as e, jsxs as o } from "react/jsx-runtime";
2
+ import { useId as R, useState as $ } from "react";
3
+ import { tv as te } from "tailwind-variants";
4
+ import { dateFormat as ne } from "../lib/intl-cache.js";
5
+ import { AlertDialog as re } from "./Dialog.js";
6
+ import { cn as ie } from "../lib/cn.js";
7
+ import { Badge as ae } from "./Badge.js";
8
+ import { Button as k } from "./Button.js";
9
+ import { Field as se } from "./Field.js";
10
+ import { Icon as m } from "./Icon.js";
11
+ import { IconButton as oe } from "./IconButton.js";
12
+ import { Input as ce } from "./Input.js";
13
+ import { useUiStrings as le, useUiLocale as de } from "../lib/i18n/provider.js";
14
+ const A = "••••••••", me = {
15
+ verified: { tone: "success", icon: "circle-check" },
16
+ failed: { tone: "danger", icon: "circle-x" },
17
+ unverifiable: { tone: "neutral", icon: "circle-help" },
18
+ unchecked: { tone: "neutral", icon: "circle-dashed" },
19
+ checking: { tone: "neutral", icon: "loader-circle" }
20
+ }, fe = te({
21
+ slots: {
22
+ root: "flex w-full min-w-0 flex-col gap-2",
23
+ group: "flex w-full min-w-0 flex-col gap-1.5",
24
+ groupLabel: "select-none font-sans text-xs font-medium text-secondary",
25
+ description: "text-2xs text-tertiary text-balance",
26
+ error: "flex items-start gap-1.5 text-2xs font-medium text-danger-text",
27
+ record: "flex min-w-0 flex-col gap-2.5 rounded-md border bg-surface p-3",
28
+ top: "flex min-w-0 flex-wrap items-center justify-between gap-x-3 gap-y-2",
29
+ masked: "min-w-0 font-mono text-sm text-primary [overflow-wrap:anywhere]",
30
+ status: "flex min-w-0 max-w-full flex-col items-start gap-1",
31
+ statusReason: "text-xs text-danger-text [overflow-wrap:anywhere]",
32
+ statusNote: "text-xs text-secondary [overflow-wrap:anywhere]",
33
+ meta: "flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-secondary",
34
+ footer: "flex flex-wrap items-center gap-2 border-t border-border-subtle pt-2",
35
+ pendingBanner: [
36
+ "flex items-center gap-2 rounded-md border border-warning-border bg-warning-subtle",
37
+ "px-2.5 py-1.5 text-2xs font-medium text-warning-text"
38
+ ]
39
+ },
40
+ variants: {
41
+ /* A status that carries a sentence (the provider's reason, the caller's words) takes its own line under the mask so the sentence
42
+ wraps at the card's width instead of squeezing the masked value. */
43
+ wide: { true: { status: "w-full" }, false: {} },
44
+ failed: {
45
+ true: { record: "border-danger-border" },
46
+ false: { record: "border-border" }
47
+ }
48
+ },
49
+ defaultVariants: { failed: !1, wide: !1 }
50
+ });
51
+ function Fe({
52
+ value: r,
53
+ onChange: a,
54
+ configured: l,
55
+ hint: s,
56
+ status: L,
57
+ onVerify: w,
58
+ clear: j = "staged",
59
+ updatedAt: E,
60
+ updatedBy: W,
61
+ revealable: v = !0,
62
+ clearConfirmLabel: M,
63
+ label: b,
64
+ description: f,
65
+ error: x,
66
+ required: y,
67
+ disabled: c,
68
+ name: N,
69
+ placeholder: V,
70
+ size: K,
71
+ className: C,
72
+ ref: P
73
+ }) {
74
+ const i = fe(), t = le().secretField, S = de(), z = R(), I = R(), [h, F] = $(!1), [_, T] = $(!1), g = j === "staged", G = g && r.kind === "cleared", H = l && r.kind !== "set" && !G, J = r.kind === "set" ? r.value : "", U = v && r.kind === "set", Q = s ? `${s.prefix}${A}${s.suffix}` : A, X = (g ? t.clearDescription : t.clearNowDescription)(s ? `${s.prefix}…${s.suffix}` : null);
75
+ function Y(n) {
76
+ const d = n.target.value;
77
+ a(d === "" ? { kind: l ? "cleared" : "unchanged" } : { kind: "set", value: d });
78
+ }
79
+ function Z() {
80
+ a({ kind: "cleared" }), F(!1), T(!1);
81
+ }
82
+ const q = /* @__PURE__ */ e(
83
+ re,
84
+ {
85
+ open: _,
86
+ onOpenChange: T,
87
+ trigger: /* @__PURE__ */ e(k, { variant: "outline-danger", size: "sm", disabled: c, leadingIcon: /* @__PURE__ */ e(m, { name: "trash-2", size: "xs" }), children: t.clearStored }),
88
+ destructive: !0,
89
+ title: t.clearTitle,
90
+ description: X,
91
+ confirmLabel: M ?? t.clearConfirm,
92
+ onConfirm: Z
93
+ }
94
+ );
95
+ if (H) {
96
+ const n = L ?? { kind: "unchecked" };
97
+ ue(n);
98
+ const d = me[n.kind], u = n.kind === "checking", D = n.kind === "verified" || n.kind === "failed" ? n.checkedAt : void 0, O = [
99
+ pe(E, W, S, t.updated),
100
+ D ? t.checked(B(D, S)) : null
101
+ ].filter((p) => p !== null), ee = {
102
+ verified: t.statusVerified,
103
+ failed: t.statusFailed,
104
+ unverifiable: t.statusUnverifiable,
105
+ unchecked: t.statusUnchecked,
106
+ checking: t.statusChecking
107
+ }[n.kind];
108
+ return /* @__PURE__ */ o(
109
+ "div",
110
+ {
111
+ role: "group",
112
+ "aria-labelledby": z,
113
+ "aria-describedby": f ? I : void 0,
114
+ className: ie(i.group(), C),
115
+ children: [
116
+ /* @__PURE__ */ e("span", { id: z, className: i.groupLabel(), children: b }),
117
+ f && /* @__PURE__ */ e("span", { id: I, className: i.description(), children: f }),
118
+ /* @__PURE__ */ o("div", { className: i.record({ failed: n.kind === "failed" }), children: [
119
+ /* @__PURE__ */ o("div", { className: i.top(), children: [
120
+ /* @__PURE__ */ e("span", { className: i.masked(), children: Q }),
121
+ /* @__PURE__ */ o("div", { role: "status", "data-status": n.kind, className: i.status({ wide: n.kind === "failed" || n.kind === "unverifiable" }), children: [
122
+ /* @__PURE__ */ e(ae, { tone: d.tone, size: "md", icon: /* @__PURE__ */ e(m, { name: d.icon, size: "xs", className: u ? "animate-spin" : void 0 }), children: ee }),
123
+ n.kind === "failed" && /* @__PURE__ */ e("span", { className: i.statusReason(), children: n.reason }),
124
+ n.kind === "unverifiable" && /* @__PURE__ */ e("span", { className: i.statusNote(), children: n.message })
125
+ ] })
126
+ ] }),
127
+ O.length > 0 && /* @__PURE__ */ e("div", { className: i.meta(), children: O.map((p) => /* @__PURE__ */ e("span", { children: p }, p)) }),
128
+ /* @__PURE__ */ o("div", { className: i.footer(), children: [
129
+ w && n.kind !== "unverifiable" && /* @__PURE__ */ e(
130
+ k,
131
+ {
132
+ variant: "outline",
133
+ size: "sm",
134
+ disabled: c || u,
135
+ leadingIcon: /* @__PURE__ */ e(m, { name: u ? "loader-circle" : "refresh-cw", size: "xs", className: u ? "animate-spin" : void 0 }),
136
+ onClick: w,
137
+ children: t.reverify
138
+ }
139
+ ),
140
+ q
141
+ ] })
142
+ ] }),
143
+ x && /* @__PURE__ */ e("p", { role: "alert", className: i.error(), children: x })
144
+ ]
145
+ }
146
+ );
147
+ }
148
+ return /* @__PURE__ */ e(se, { label: b, description: f, error: x, required: y, disabled: c, name: N, className: C, children: /* @__PURE__ */ o("div", { className: i.root(), children: [
149
+ /* @__PURE__ */ e(
150
+ ce,
151
+ {
152
+ ref: P,
153
+ type: U && h ? "text" : "password",
154
+ value: J,
155
+ onChange: Y,
156
+ placeholder: V ?? t.notSet,
157
+ disabled: c,
158
+ required: y,
159
+ name: N,
160
+ size: K,
161
+ autoComplete: "new-password",
162
+ autoCapitalize: "off",
163
+ autoCorrect: "off",
164
+ spellCheck: !1,
165
+ trailing: (
166
+ /* `revealable ? … : undefined` decides whether the slot EXISTS at
167
+ all, once, for the component's lifetime — but whether the icon
168
+ inside it is a real button `canReveal` decides on every render,
169
+ and that half is deliberately NOT expressed as `trailing =
170
+ canReveal ? <IconButton/> : undefined`.
171
+
172
+ `Input.tsx` derives `hasTrailing = Boolean(trailingContent)` and
173
+ branches its OWN returned root on it — a bare `<input>` when
174
+ false, a wrapping `<div>` when true. Flipping that boolean
175
+ therefore changes the element type at the position `Input`
176
+ occupies in its parent's tree, and React's reconciler unmounts
177
+ and remounts everything at a position whose type changed — the
178
+ real `<input>` DOM node included. `canReveal` flips on the FIRST
179
+ keystroke that turns `unchanged` into `set`, which is exactly
180
+ when the operator is mid-type: a naive `canReveal ? …
181
+ : undefined` here was measured to destroy and recreate the input
182
+ on that keystroke, dropping focus and the caret out from under
183
+ the operator's own typing. (Caught by this component's own
184
+ test suite going red on exactly that keystroke, not by
185
+ inspection.)
186
+
187
+ Keeping the slot itself always truthy when `revealable` is on —
188
+ a real icon button, or an equally-truthy empty placeholder —
189
+ keeps `hasTrailing` CONSTANT across every render this component
190
+ produces, so only the icon inside the slot mounts and unmounts,
191
+ never the input that owns focus. */
192
+ v ? U ? /* @__PURE__ */ e(
193
+ oe,
194
+ {
195
+ icon: /* @__PURE__ */ e(m, { name: h ? "eye-off" : "eye", size: "sm" }),
196
+ label: h ? t.hideTyped : t.showTyped,
197
+ variant: "ghost",
198
+ size: "sm",
199
+ disabledReason: c ? t.disabled : void 0,
200
+ onClick: () => F((n) => !n)
201
+ }
202
+ ) : /* @__PURE__ */ e("span", { "aria-hidden": !0, className: "size-4" }) : void 0
203
+ )
204
+ }
205
+ ),
206
+ g && l && /* @__PURE__ */ o("div", { className: i.pendingBanner(), children: [
207
+ /* @__PURE__ */ e(m, { name: "triangle-alert", size: "xs" }),
208
+ /* @__PURE__ */ e("span", { className: "flex-1", children: r.kind === "set" ? t.replacedOnSave : t.removedOnSave }),
209
+ /* @__PURE__ */ e(k, { variant: "link", size: "xs", disabled: c, onClick: () => a({ kind: "unchanged" }), children: t.undo })
210
+ ] })
211
+ ] }) });
212
+ }
213
+ function ue(r) {
214
+ if (r.kind === "failed" && r.reason.trim() === "")
215
+ throw new Error("SecretField: status.reason must be the provider's reason for the failure, not an empty string");
216
+ if (r.kind === "unverifiable" && r.message.trim() === "")
217
+ throw new Error("SecretField: status.message must say why the secret cannot be tested, not an empty string");
218
+ }
219
+ function B(r, a) {
220
+ return ne(a, { year: "numeric", month: "numeric", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric" }).format(new Date(r));
221
+ }
222
+ function pe(r, a, l, s) {
223
+ return !r && !a ? null : s(r ? B(r, l) : null, a);
224
+ }
225
+ export {
226
+ Fe as SecretField
227
+ };
228
+ //# sourceMappingURL=SecretField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecretField.js","sources":["../../src/components/SecretField.tsx"],"sourcesContent":["import type { ChangeEvent, Ref } from \"react\";\nimport { useId, useState } from \"react\";\nimport { tv } from \"tailwind-variants\";\nimport { useUiLocale, useUiStrings } from \"../lib/i18n\";\nimport { dateFormat } from \"../lib/intl-cache\";\nimport { AlertDialog } from \"./Dialog\";\nimport { cn } from \"../lib/cn\";\nimport { Badge } from \"./Badge\";\nimport { Button } from \"./Button\";\nimport { Field, type FieldProps } from \"./Field\";\nimport { Icon } from \"./Icon\";\nimport { IconButton } from \"./IconButton\";\nimport { Input, type InputProps } from \"./Input\";\n\n/* ============================================================================\n SECRET FIELD\n\n A STORED SECRET HAS THREE STATES, NOT TWO — AND THE TYPE IS WHAT ENFORCES IT.\n\n Every hand-rolled version of this control in the consuming app modelled its\n pending edit as a plain `string`, and every one of them carried the same\n latent bug: an operator opens a settings panel, sees a masked field (because\n a key IS configured), makes an unrelated change elsewhere on the form, and\n submits. If \"the field is empty\" and \"the operator asked to remove the key\"\n are the same value, that submit just deleted a working credential that\n nobody touched — because a masked field can never render the real secret,\n so its starting text is ALWAYS empty, and empty-string is indistinguishable\n from empty-on-purpose.\n\n The fix is not a smarter default. It is removing the ability to express the\n ambiguous case at all:\n\n type SecretValue =\n | { kind: \"unchanged\" } // no edit — keep whatever is stored\n | { kind: \"set\"; value: string } // operator typed a new value\n | { kind: \"cleared\" }; // operator explicitly asked to remove it\n\n A consumer's save handler is forced to switch on `kind` — there is no branch\n where \"the text box reads empty\" and \"please delete this\" resolve to the\n same code path, because they are not the same VALUE. This is the same\n argument `Field`'s doc comment makes for delegating label association to\n Base UI rather than a convention every caller has to remember: a class of\n bug is not fixed by writing the correct code once, it is fixed by making the\n incorrect code impossible to write.\n\n Three consequences fall out of that model:\n\n 1. TYPING THEN DELETING BACK TO EMPTY RETURNS TO `unchanged`, NEVER\n `cleared`. Backspacing to nothing is \"I changed my mind\", not \"delete\n this credential\" — those are different operator intents that happen to\n look identical in an empty text box, so the component reads them apart\n at the one point it still can (the keystroke that produced the empty\n string) rather than asking a save handler to guess later.\n\n 2. `cleared` IS REACHABLE ONLY THROUGH A NAMED, CONFIRMED ACTION — never a\n side effect of the text control. See the confirmation gate below.\n\n 3. THE COMPONENT NEVER HOLDS THE STORED SECRET. `configured` says \"one\n exists\"; `hint` optionally says \"and it looks like this\" (a prefix/suffix\n the consumer's own API already returns); neither is the value. Revealing\n TYPED text is offered because the operator already knows what they just\n typed and may want to proof it before submitting — revealing the STORED\n text is not offered because this component was never given it to reveal.\n\n A STORED SECRET IS SHOWN, NEVER AN INPUT (DX-4985, the operator's rule).\n\n The version above still drew the password box over a stored value, with a\n dotted placeholder, and the operator's reading of it was: it invites pasting\n over a working credential and says nothing about whether that credential\n works. So the component now has two faces:\n\n STORED (`configured`, and not cleared): NO input element at all. The\n masked value with its first and last characters (`hint`), a\n status from a real test of the secret, who saved it and when, a\n Re-verify button and Clear. Replacing is Clear, then paste.\n ENTRY (nothing stored, or Cleared): the input, plus — after a staged\n Clear — a banner with Undo.\n\n THE STATUS IS THE CALLER'S, NEVER INFERRED. `status` is a server result:\n verified, failed (with the provider's reason), unverifiable (nothing can\n test this secret; the caller says why), unchecked, or checking. A filled\n value is not a verified one, so an absent `status` reads \"Not checked\", and\n only `{ kind: \"verified\" }` can ever print \"Verified\" or draw green.\n\n TWO SAVE MODELS, ONE VALUE TYPE. `clear=\"staged\"` (default) is a field in a\n batch-save form: Clear only reports `cleared`, the form's Save removes it,\n and Undo is offered until then. `clear=\"immediate\"` is a row that acts by\n itself: confirming Clear reports `cleared` and the caller deletes at once;\n the row stays in its stored face until the caller reports `configured`\n false (so the caller's `disabled` covers the request), and the dialog says\n \"removed now\", not \"once you save\".\n\n One edit rule changed with this: emptying the box after a Clear returns to\n `cleared` (the operator already confirmed the removal), not to\n `unchanged`, which would bring the stored face back and silently undo it.\n With nothing stored, emptying the box is still `unchanged`.\n ========================================================================= */\n\n\n\nexport type SecretValue = { kind: \"unchanged\" } | { kind: \"set\"; value: string } | { kind: \"cleared\" };\n\n/**\n * The result of testing the stored secret, supplied by the caller from a server answer. Never inferred\n * from the value being filled: only `verified` is green.\n */\nexport type SecretStatus =\n /** The provider accepted it. `checkedAt` is when. */\n | { kind: \"verified\"; checkedAt?: string | Date }\n /** The provider refused it or could not be reached; `reason` is its words, printed as text. Never empty. */\n | { kind: \"failed\"; reason: string; checkedAt?: string | Date }\n /** Nothing can test this secret (an OAuth client secret); `message` is the caller's words saying so. Never empty. */\n | { kind: \"unverifiable\"; message: string }\n /** Never tested. What an absent `status` reads as. */\n | { kind: \"unchecked\" }\n /** A test is running. */\n | { kind: \"checking\" };\n\n/** How Clear acts: `staged` waits for the surrounding form's Save; `immediate` is a row the caller deletes at once. */\nexport type SecretClearMode = \"staged\" | \"immediate\";\n\n/** A fixed run of dots between the visible ends, so the mask never reveals the secret's length. */\nconst MASK = \"••••••••\";\n\nconst STATUS_VIEW = {\n verified: { tone: \"success\", icon: \"circle-check\" },\n failed: { tone: \"danger\", icon: \"circle-x\" },\n unverifiable: { tone: \"neutral\", icon: \"circle-help\" },\n unchecked: { tone: \"neutral\", icon: \"circle-dashed\" },\n checking: { tone: \"neutral\", icon: \"loader-circle\" },\n} as const;\n\nconst secretField = tv({\n slots: {\n root: \"flex w-full min-w-0 flex-col gap-2\",\n group: \"flex w-full min-w-0 flex-col gap-1.5\",\n groupLabel: \"select-none font-sans text-xs font-medium text-secondary\",\n description: \"text-2xs text-tertiary text-balance\",\n error: \"flex items-start gap-1.5 text-2xs font-medium text-danger-text\",\n record: \"flex min-w-0 flex-col gap-2.5 rounded-md border bg-surface p-3\",\n top: \"flex min-w-0 flex-wrap items-center justify-between gap-x-3 gap-y-2\",\n masked: \"min-w-0 font-mono text-sm text-primary [overflow-wrap:anywhere]\",\n status: \"flex min-w-0 max-w-full flex-col items-start gap-1\",\n statusReason: \"text-xs text-danger-text [overflow-wrap:anywhere]\",\n statusNote: \"text-xs text-secondary [overflow-wrap:anywhere]\",\n meta: \"flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-secondary\",\n footer: \"flex flex-wrap items-center gap-2 border-t border-border-subtle pt-2\",\n pendingBanner: [\n \"flex items-center gap-2 rounded-md border border-warning-border bg-warning-subtle\",\n \"px-2.5 py-1.5 text-2xs font-medium text-warning-text\",\n ],\n },\n variants: {\n /* A status that carries a sentence (the provider's reason, the caller's words) takes its own line under the mask so the sentence\n wraps at the card's width instead of squeezing the masked value. */\n wide: { true: { status: \"w-full\" }, false: {} },\n failed: {\n true: { record: \"border-danger-border\" },\n false: { record: \"border-border\" },\n },\n },\n defaultVariants: { failed: false, wide: false },\n});\n\nexport interface SecretFieldProps\n extends Pick<FieldProps, \"label\" | \"description\" | \"error\" | \"required\" | \"disabled\" | \"name\" | \"className\">,\n Pick<InputProps, \"size\" | \"placeholder\"> {\n /** The pending edit. See the module doc comment for why this is not a `string`. */\n value: SecretValue;\n onChange: (value: SecretValue) => void;\n /**\n * Whether a secret is CURRENTLY stored server-side, independent of `value`.\n * While one is (and it is not marked cleared) the component draws the stored\n * face and NO input; Clear is offered only then.\n */\n configured: boolean;\n /**\n * A partial, already-safe rendering of the stored value — e.g. `{ prefix:\n * \"sk-ab\", suffix: \"9f4c\" }` for a key the consuming app's own API already\n * truncates before it ever reaches the client. This is NOT the secret; it\n * is a frame of reference (\"is this the key I think it is?\"). Absent, the\n * stored face shows dots only.\n */\n hint?: { prefix: string; suffix: string };\n /**\n * The result of the last test of the stored secret, from the server. Absent\n * reads \"Not checked\" — a value being filled is never \"Verified\".\n */\n status?: SecretStatus;\n /**\n * Tests the stored secret again. Absent, or `status` is `unverifiable`, the\n * Re-verify button is not drawn. While `status` is `checking` it is busy.\n */\n onVerify?: () => void;\n /** `staged` (default): Clear waits for the form's Save and offers Undo. `immediate`: a row that saves by itself. */\n clear?: SecretClearMode;\n /** When the stored value was last written, for the same frame of reference as `hint`. */\n updatedAt?: string | Date;\n /** Who wrote it, if the caller's system tracks that. */\n updatedBy?: string;\n /**\n * Offers a show/hide toggle for text the operator just TYPED. Default true.\n * Never offered for the stored value — see the module doc comment — and\n * never rendered while there is no typed text to reveal.\n */\n revealable?: boolean;\n /** Label on the destructive confirm button. Absent, the built-in \"Clear\" word of the active `UiLocaleProvider`. */\n clearConfirmLabel?: string;\n ref?: Ref<HTMLInputElement>;\n}\n\nexport function SecretField({\n value,\n onChange,\n configured,\n hint,\n status,\n onVerify,\n clear = \"staged\",\n updatedAt,\n updatedBy,\n revealable = true,\n clearConfirmLabel,\n label,\n description,\n error,\n required,\n disabled,\n name,\n placeholder,\n size,\n className,\n ref,\n}: SecretFieldProps) {\n const s = secretField();\n const strings = useUiStrings().secretField;\n const locale = useUiLocale();\n const labelId = useId();\n const descriptionId = useId();\n const [revealed, setRevealed] = useState(false);\n const [confirmOpen, setConfirmOpen] = useState(false);\n\n const staged = clear === \"staged\";\n const pendingClear = staged && value.kind === \"cleared\";\n /* DX-4985: a stored secret is never an input. The input exists only when nothing is stored, or once Clear has been\n confirmed (staged) or a new value was typed after it. */\n const showStored = configured && value.kind !== \"set\" && !pendingClear;\n const typedText = value.kind === \"set\" ? value.value : \"\";\n const canReveal = revealable && value.kind === \"set\";\n const maskedText = hint ? `${hint.prefix}${MASK}${hint.suffix}` : MASK;\n const clearDescription = (staged ? strings.clearDescription : strings.clearNowDescription)(hint ? `${hint.prefix}…${hint.suffix}` : null);\n\n function handleInputChange(event: ChangeEvent<HTMLInputElement>) {\n const next = event.target.value;\n /* Emptying the box is never a new intent. With nothing stored it is \"I changed my mind\" (`unchanged`). After a\n confirmed Clear it is still the Clear (`cleared`): `unchanged` would bring the stored face back and undo the\n operator's confirmed removal because they backspaced a replacement away. */\n onChange(next === \"\" ? { kind: configured ? \"cleared\" : \"unchanged\" } : { kind: \"set\", value: next });\n }\n\n function handleConfirmClear() {\n onChange({ kind: \"cleared\" });\n setRevealed(false);\n setConfirmOpen(false);\n }\n\n const clearAction = (\n <AlertDialog\n open={confirmOpen}\n onOpenChange={setConfirmOpen}\n trigger={\n <Button variant=\"outline-danger\" size=\"sm\" disabled={disabled} leadingIcon={<Icon name=\"trash-2\" size=\"xs\" />}>\n {strings.clearStored}\n </Button>\n }\n destructive\n title={strings.clearTitle}\n description={clearDescription}\n confirmLabel={clearConfirmLabel ?? strings.clearConfirm}\n onConfirm={handleConfirmClear}\n />\n );\n\n if (showStored) {\n const current = status ?? { kind: \"unchecked\" as const };\n assertStatusWords(current);\n const view = STATUS_VIEW[current.kind];\n const checking = current.kind === \"checking\";\n const checkedAt = current.kind === \"verified\" || current.kind === \"failed\" ? current.checkedAt : undefined;\n const metaParts = [\n formatUpdatedMeta(updatedAt, updatedBy, locale, strings.updated),\n checkedAt ? strings.checked(formatInstant(checkedAt, locale)) : null,\n ].filter((part): part is string => part !== null);\n const statusWord = {\n verified: strings.statusVerified,\n failed: strings.statusFailed,\n unverifiable: strings.statusUnverifiable,\n unchecked: strings.statusUnchecked,\n checking: strings.statusChecking,\n }[current.kind];\n\n return (\n <div\n role=\"group\"\n aria-labelledby={labelId}\n aria-describedby={description ? descriptionId : undefined}\n className={cn(s.group(), className)}\n >\n <span id={labelId} className={s.groupLabel()}>\n {label}\n </span>\n {description && (\n <span id={descriptionId} className={s.description()}>\n {description}\n </span>\n )}\n <div className={s.record({ failed: current.kind === \"failed\" })}>\n <div className={s.top()}>\n <span className={s.masked()}>{maskedText}</span>\n {/* A live region: the result of a Re-verify is announced, not only coloured. */}\n <div role=\"status\" data-status={current.kind} className={s.status({ wide: current.kind === \"failed\" || current.kind === \"unverifiable\" })}>\n <Badge tone={view.tone} size=\"md\" icon={<Icon name={view.icon} size=\"xs\" className={checking ? \"animate-spin\" : undefined} />}>\n {statusWord}\n </Badge>\n {current.kind === \"failed\" && <span className={s.statusReason()}>{current.reason}</span>}\n {current.kind === \"unverifiable\" && <span className={s.statusNote()}>{current.message}</span>}\n </div>\n </div>\n {metaParts.length > 0 && (\n <div className={s.meta()}>\n {metaParts.map((part) => (\n <span key={part}>{part}</span>\n ))}\n </div>\n )}\n <div className={s.footer()}>\n {onVerify && current.kind !== \"unverifiable\" && (\n <Button\n variant=\"outline\"\n size=\"sm\"\n disabled={disabled || checking}\n leadingIcon={<Icon name={checking ? \"loader-circle\" : \"refresh-cw\"} size=\"xs\" className={checking ? \"animate-spin\" : undefined} />}\n onClick={onVerify}\n >\n {strings.reverify}\n </Button>\n )}\n {clearAction}\n </div>\n </div>\n {error && (\n <p role=\"alert\" className={s.error()}>\n {error}\n </p>\n )}\n </div>\n );\n }\n\n return (\n <Field label={label} description={description} error={error} required={required} disabled={disabled} name={name} className={className}>\n <div className={s.root()}>\n <Input\n ref={ref}\n type={canReveal && revealed ? \"text\" : \"password\"}\n value={typedText}\n onChange={handleInputChange}\n placeholder={placeholder ?? strings.notSet}\n disabled={disabled}\n required={required}\n name={name}\n size={size}\n autoComplete=\"new-password\"\n autoCapitalize=\"off\"\n autoCorrect=\"off\"\n spellCheck={false}\n trailing={\n /* `revealable ? … : undefined` decides whether the slot EXISTS at\n all, once, for the component's lifetime — but whether the icon\n inside it is a real button `canReveal` decides on every render,\n and that half is deliberately NOT expressed as `trailing =\n canReveal ? <IconButton/> : undefined`.\n\n `Input.tsx` derives `hasTrailing = Boolean(trailingContent)` and\n branches its OWN returned root on it — a bare `<input>` when\n false, a wrapping `<div>` when true. Flipping that boolean\n therefore changes the element type at the position `Input`\n occupies in its parent's tree, and React's reconciler unmounts\n and remounts everything at a position whose type changed — the\n real `<input>` DOM node included. `canReveal` flips on the FIRST\n keystroke that turns `unchanged` into `set`, which is exactly\n when the operator is mid-type: a naive `canReveal ? …\n : undefined` here was measured to destroy and recreate the input\n on that keystroke, dropping focus and the caret out from under\n the operator's own typing. (Caught by this component's own\n test suite going red on exactly that keystroke, not by\n inspection.)\n\n Keeping the slot itself always truthy when `revealable` is on —\n a real icon button, or an equally-truthy empty placeholder —\n keeps `hasTrailing` CONSTANT across every render this component\n produces, so only the icon inside the slot mounts and unmounts,\n never the input that owns focus. */\n revealable ? (\n canReveal ? (\n <IconButton\n icon={<Icon name={revealed ? \"eye-off\" : \"eye\"} size=\"sm\" />}\n label={revealed ? strings.hideTyped : strings.showTyped}\n variant=\"ghost\"\n size=\"sm\"\n /* `IconButton` has no boolean `disabled` — see its own doc\n comment — so the field's `disabled` is threaded through as\n a reason rather than dropped on the floor. */\n disabledReason={disabled ? strings.disabled : undefined}\n onClick={() => setRevealed((r) => !r)}\n />\n ) : (\n <span aria-hidden className=\"size-4\" />\n )\n ) : undefined\n }\n />\n\n {staged && configured && (\n <div className={s.pendingBanner()}>\n <Icon name=\"triangle-alert\" size=\"xs\" />\n <span className=\"flex-1\">{value.kind === \"set\" ? strings.replacedOnSave : strings.removedOnSave}</span>\n <Button variant=\"link\" size=\"xs\" disabled={disabled} onClick={() => onChange({ kind: \"unchanged\" })}>\n {strings.undo}\n </Button>\n </div>\n )}\n </div>\n </Field>\n );\n}\n\n/** A failed or unverifiable status without its words would draw a state nobody can act on. */\nfunction assertStatusWords(status: SecretStatus): void {\n if (status.kind === \"failed\" && status.reason.trim() === \"\") {\n throw new Error(\"SecretField: status.reason must be the provider's reason for the failure, not an empty string\");\n }\n if (status.kind === \"unverifiable\" && status.message.trim() === \"\") {\n throw new Error(\"SecretField: status.message must say why the secret cannot be tested, not an empty string\");\n }\n}\n\n/**\n * A full date-and-time format of the active locale, not the calendar-safe local-y/m/d construction `DatePicker`\n * insists on — that rule exists to stop a parsed-as-UTC date from silently\n * shifting to the wrong CALENDAR DAY. This is a point-in-time instant (\"last\n * written at\"), not a calendar date being reasoned about, so the ambiguity\n * that rule guards against does not apply here.\n */\nfunction formatInstant(at: string | Date, locale: string): string {\n return dateFormat(locale, { year: \"numeric\", month: \"numeric\", day: \"numeric\", hour: \"numeric\", minute: \"numeric\", second: \"numeric\" }).format(new Date(at));\n}\n\nfunction formatUpdatedMeta(\n updatedAt: string | Date | undefined,\n updatedBy: string | undefined,\n locale: string,\n updated: (when: string | null, by: string | undefined) => string,\n): string | null {\n if (!updatedAt && !updatedBy) return null;\n return updated(updatedAt ? formatInstant(updatedAt, locale) : null, updatedBy);\n}\n"],"names":["MASK","STATUS_VIEW","secretField","tv","SecretField","value","onChange","configured","hint","status","onVerify","clear","updatedAt","updatedBy","revealable","clearConfirmLabel","label","description","error","required","disabled","name","placeholder","size","className","ref","s","strings","useUiStrings","locale","useUiLocale","labelId","useId","descriptionId","revealed","setRevealed","useState","confirmOpen","setConfirmOpen","staged","pendingClear","showStored","typedText","canReveal","maskedText","clearDescription","handleInputChange","event","next","handleConfirmClear","clearAction","jsx","AlertDialog","Button","Icon","current","assertStatusWords","view","checking","checkedAt","metaParts","formatUpdatedMeta","formatInstant","part","statusWord","jsxs","cn","Badge","Field","Input","IconButton","r","at","dateFormat","updated"],"mappings":";;;;;;;;;;;;;AA0HA,MAAMA,IAAO,YAEPC,KAAc;AAAA,EAClB,UAAU,EAAE,MAAM,WAAW,MAAM,eAAA;AAAA,EACnC,QAAQ,EAAE,MAAM,UAAU,MAAM,WAAA;AAAA,EAChC,cAAc,EAAE,MAAM,WAAW,MAAM,cAAA;AAAA,EACvC,WAAW,EAAE,MAAM,WAAW,MAAM,gBAAA;AAAA,EACpC,UAAU,EAAE,MAAM,WAAW,MAAM,gBAAA;AACrC,GAEMC,KAAcC,GAAG;AAAA,EACrB,OAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,eAAe;AAAA,MACb;AAAA,MACA;AAAA,IAAA;AAAA,EACF;AAAA,EAEF,UAAU;AAAA;AAAA;AAAA,IAGR,MAAM,EAAE,MAAM,EAAE,QAAQ,SAAA,GAAY,OAAO,GAAC;AAAA,IAC5C,QAAQ;AAAA,MACN,MAAM,EAAE,QAAQ,uBAAA;AAAA,MAChB,OAAO,EAAE,QAAQ,gBAAA;AAAA,IAAgB;AAAA,EACnC;AAAA,EAEF,iBAAiB,EAAE,QAAQ,IAAO,MAAM,GAAA;AAC1C,CAAC;AAiDM,SAASC,GAAY;AAAA,EAC1B,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,YAAAC;AAAA,EACA,MAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,WAAAC;AAAA,EACA,WAAAC;AAAA,EACA,YAAAC,IAAa;AAAA,EACb,mBAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,MAAAC;AAAA,EACA,aAAAC;AAAA,EACA,MAAAC;AAAA,EACA,WAAAC;AAAA,EACA,KAAAC;AACF,GAAqB;AACnB,QAAMC,IAAIxB,GAAA,GACJyB,IAAUC,KAAe,aACzBC,IAASC,GAAA,GACTC,IAAUC,EAAA,GACVC,IAAgBD,EAAA,GAChB,CAACE,GAAUC,CAAW,IAAIC,EAAS,EAAK,GACxC,CAACC,GAAaC,CAAc,IAAIF,EAAS,EAAK,GAE9CG,IAAS5B,MAAU,UACnB6B,IAAeD,KAAUlC,EAAM,SAAS,WAGxCoC,IAAalC,KAAcF,EAAM,SAAS,SAAS,CAACmC,GACpDE,IAAYrC,EAAM,SAAS,QAAQA,EAAM,QAAQ,IACjDsC,IAAY7B,KAAcT,EAAM,SAAS,OACzCuC,IAAapC,IAAO,GAAGA,EAAK,MAAM,GAAGR,CAAI,GAAGQ,EAAK,MAAM,KAAKR,GAC5D6C,KAAoBN,IAASZ,EAAQ,mBAAmBA,EAAQ,qBAAqBnB,IAAO,GAAGA,EAAK,MAAM,IAAIA,EAAK,MAAM,KAAK,IAAI;AAExI,WAASsC,EAAkBC,GAAsC;AAC/D,UAAMC,IAAOD,EAAM,OAAO;AAI1B,IAAAzC,EAAS0C,MAAS,KAAK,EAAE,MAAMzC,IAAa,YAAY,YAAA,IAAgB,EAAE,MAAM,OAAO,OAAOyC,GAAM;AAAA,EACtG;AAEA,WAASC,IAAqB;AAC5B,IAAA3C,EAAS,EAAE,MAAM,WAAW,GAC5B6B,EAAY,EAAK,GACjBG,EAAe,EAAK;AAAA,EACtB;AAEA,QAAMY,IACJ,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAMf;AAAA,MACN,cAAcC;AAAA,MACd,SACE,gBAAAa,EAACE,GAAA,EAAO,SAAQ,kBAAiB,MAAK,MAAK,UAAAjC,GAAoB,aAAa,gBAAA+B,EAACG,KAAK,MAAK,WAAU,MAAK,KAAA,CAAK,GACxG,YAAQ,aACX;AAAA,MAEF,aAAW;AAAA,MACX,OAAO3B,EAAQ;AAAA,MACf,aAAakB;AAAA,MACb,cAAc9B,KAAqBY,EAAQ;AAAA,MAC3C,WAAWsB;AAAA,IAAA;AAAA,EAAA;AAIf,MAAIR,GAAY;AACd,UAAMc,IAAU9C,KAAU,EAAE,MAAM,YAAA;AAClC,IAAA+C,GAAkBD,CAAO;AACzB,UAAME,IAAOxD,GAAYsD,EAAQ,IAAI,GAC/BG,IAAWH,EAAQ,SAAS,YAC5BI,IAAYJ,EAAQ,SAAS,cAAcA,EAAQ,SAAS,WAAWA,EAAQ,YAAY,QAC3FK,IAAY;AAAA,MAChBC,GAAkBjD,GAAWC,GAAWgB,GAAQF,EAAQ,OAAO;AAAA,MAC/DgC,IAAYhC,EAAQ,QAAQmC,EAAcH,GAAW9B,CAAM,CAAC,IAAI;AAAA,IAAA,EAChE,OAAO,CAACkC,MAAyBA,MAAS,IAAI,GAC1CC,KAAa;AAAA,MACjB,UAAUrC,EAAQ;AAAA,MAClB,QAAQA,EAAQ;AAAA,MAChB,cAAcA,EAAQ;AAAA,MACtB,WAAWA,EAAQ;AAAA,MACnB,UAAUA,EAAQ;AAAA,IAAA,EAClB4B,EAAQ,IAAI;AAEd,WACE,gBAAAU;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,mBAAiBlC;AAAA,QACjB,oBAAkBd,IAAcgB,IAAgB;AAAA,QAChD,WAAWiC,GAAGxC,EAAE,MAAA,GAASF,CAAS;AAAA,QAElC,UAAA;AAAA,UAAA,gBAAA2B,EAAC,UAAK,IAAIpB,GAAS,WAAWL,EAAE,WAAA,GAC7B,UAAAV,GACH;AAAA,UACCC,uBACE,QAAA,EAAK,IAAIgB,GAAe,WAAWP,EAAE,YAAA,GACnC,UAAAT,EAAA,CACH;AAAA,UAEF,gBAAAgD,EAAC,OAAA,EAAI,WAAWvC,EAAE,OAAO,EAAE,QAAQ6B,EAAQ,SAAS,SAAA,CAAU,GAC5D,UAAA;AAAA,YAAA,gBAAAU,EAAC,OAAA,EAAI,WAAWvC,EAAE,IAAA,GAChB,UAAA;AAAA,cAAA,gBAAAyB,EAAC,QAAA,EAAK,WAAWzB,EAAE,UAAW,UAAAkB,GAAW;AAAA,gCAExC,OAAA,EAAI,MAAK,UAAS,eAAaW,EAAQ,MAAM,WAAW7B,EAAE,OAAO,EAAE,MAAM6B,EAAQ,SAAS,YAAYA,EAAQ,SAAS,gBAAgB,GACtI,UAAA;AAAA,gBAAA,gBAAAJ,EAACgB,MAAM,MAAMV,EAAK,MAAM,MAAK,MAAK,MAAM,gBAAAN,EAACG,GAAA,EAAK,MAAMG,EAAK,MAAM,MAAK,MAAK,WAAWC,IAAW,iBAAiB,OAAA,CAAW,GACxH,UAAAM,GAAA,CACH;AAAA,gBACCT,EAAQ,SAAS,YAAY,gBAAAJ,EAAC,QAAA,EAAK,WAAWzB,EAAE,aAAA,GAAiB,UAAA6B,EAAQ,OAAA,CAAO;AAAA,gBAChFA,EAAQ,SAAS,kBAAkB,gBAAAJ,EAAC,QAAA,EAAK,WAAWzB,EAAE,WAAA,GAAe,UAAA6B,EAAQ,QAAA,CAAQ;AAAA,cAAA,EAAA,CACxF;AAAA,YAAA,GACF;AAAA,YACCK,EAAU,SAAS,uBACjB,OAAA,EAAI,WAAWlC,EAAE,KAAA,GACf,UAAAkC,EAAU,IAAI,CAACG,MACd,gBAAAZ,EAAC,UAAiB,UAAAY,EAAA,GAAPA,CAAY,CACxB,GACH;AAAA,YAEF,gBAAAE,EAAC,OAAA,EAAI,WAAWvC,EAAE,UACf,UAAA;AAAA,cAAAhB,KAAY6C,EAAQ,SAAS,kBAC5B,gBAAAJ;AAAA,gBAACE;AAAA,gBAAA;AAAA,kBACC,SAAQ;AAAA,kBACR,MAAK;AAAA,kBACL,UAAUjC,KAAYsC;AAAA,kBACtB,aAAa,gBAAAP,EAACG,GAAA,EAAK,MAAMI,IAAW,kBAAkB,cAAc,MAAK,MAAK,WAAWA,IAAW,iBAAiB,OAAA,CAAW;AAAA,kBAChI,SAAShD;AAAA,kBAER,UAAAiB,EAAQ;AAAA,gBAAA;AAAA,cAAA;AAAA,cAGZuB;AAAA,YAAA,EAAA,CACH;AAAA,UAAA,GACF;AAAA,UACChC,uBACE,KAAA,EAAE,MAAK,SAAQ,WAAWQ,EAAE,SAC1B,UAAAR,EAAA,CACH;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAIR;AAEA,SACE,gBAAAiC,EAACiB,IAAA,EAAM,OAAApD,GAAc,aAAAC,GAA0B,OAAAC,GAAc,UAAAC,GAAoB,UAAAC,GAAoB,MAAAC,GAAY,WAAAG,GAC/G,UAAA,gBAAAyC,EAAC,OAAA,EAAI,WAAWvC,EAAE,QAChB,UAAA;AAAA,IAAA,gBAAAyB;AAAA,MAACkB;AAAA,MAAA;AAAA,QACC,KAAA5C;AAAA,QACA,MAAMkB,KAAaT,IAAW,SAAS;AAAA,QACvC,OAAOQ;AAAA,QACP,UAAUI;AAAA,QACV,aAAaxB,KAAeK,EAAQ;AAAA,QACpC,UAAAP;AAAA,QACA,UAAAD;AAAA,QACA,MAAAE;AAAA,QACA,MAAAE;AAAA,QACA,cAAa;AAAA,QACb,gBAAe;AAAA,QACf,aAAY;AAAA,QACZ,YAAY;AAAA,QACZ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UA2BET,IACE6B,IACE,gBAAAQ;AAAA,YAACmB;AAAA,YAAA;AAAA,cACC,wBAAOhB,GAAA,EAAK,MAAMpB,IAAW,YAAY,OAAO,MAAK,MAAK;AAAA,cAC1D,OAAOA,IAAWP,EAAQ,YAAYA,EAAQ;AAAA,cAC9C,SAAQ;AAAA,cACR,MAAK;AAAA,cAIL,gBAAgBP,IAAWO,EAAQ,WAAW;AAAA,cAC9C,SAAS,MAAMQ,EAAY,CAACoC,MAAM,CAACA,CAAC;AAAA,YAAA;AAAA,UAAA,IAGtC,gBAAApB,EAAC,QAAA,EAAK,eAAW,IAAC,WAAU,UAAS,IAErC;AAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAIPZ,KAAUhC,KACT,gBAAA0D,EAAC,SAAI,WAAWvC,EAAE,iBAChB,UAAA;AAAA,MAAA,gBAAAyB,EAACG,GAAA,EAAK,MAAK,kBAAiB,MAAK,MAAK;AAAA,MACtC,gBAAAH,EAAC,QAAA,EAAK,WAAU,UAAU,UAAA9C,EAAM,SAAS,QAAQsB,EAAQ,iBAAiBA,EAAQ,cAAA,CAAc;AAAA,wBAC/F0B,GAAA,EAAO,SAAQ,QAAO,MAAK,MAAK,UAAAjC,GAAoB,SAAS,MAAMd,EAAS,EAAE,MAAM,YAAA,CAAa,GAC/F,YAAQ,KAAA,CACX;AAAA,IAAA,EAAA,CACF;AAAA,EAAA,EAAA,CAEJ,EAAA,CACF;AAEJ;AAGA,SAASkD,GAAkB/C,GAA4B;AACrD,MAAIA,EAAO,SAAS,YAAYA,EAAO,OAAO,KAAA,MAAW;AACvD,UAAM,IAAI,MAAM,+FAA+F;AAEjH,MAAIA,EAAO,SAAS,kBAAkBA,EAAO,QAAQ,KAAA,MAAW;AAC9D,UAAM,IAAI,MAAM,2FAA2F;AAE/G;AASA,SAASqD,EAAcU,GAAmB3C,GAAwB;AAChE,SAAO4C,GAAW5C,GAAQ,EAAE,MAAM,WAAW,OAAO,WAAW,KAAK,WAAW,MAAM,WAAW,QAAQ,WAAW,QAAQ,UAAA,CAAW,EAAE,OAAO,IAAI,KAAK2C,CAAE,CAAC;AAC7J;AAEA,SAASX,GACPjD,GACAC,GACAgB,GACA6C,GACe;AACf,SAAI,CAAC9D,KAAa,CAACC,IAAkB,OAC9B6D,EAAQ9D,IAAYkD,EAAclD,GAAWiB,CAAM,IAAI,MAAMhB,CAAS;AAC/E;"}
@@ -0,0 +1,42 @@
1
+ import { jsxs as d, Fragment as p, jsx as e } from "react/jsx-runtime";
2
+ import { useState as h } from "react";
3
+ import { cn as m } from "../lib/cn.js";
4
+ import { Button as g } from "./Button.js";
5
+ import { Icon as s } from "./Icon.js";
6
+ import { NavSections as c } from "./nav-sections.js";
7
+ import { Popover as u } from "./Popover.js";
8
+ function z({ sections: a, activeId: i, label: t, className: l }) {
9
+ const [f, o] = h(!1);
10
+ if (a.every((n) => n.items.length === 0)) return null;
11
+ const r = a.flatMap((n) => n.items).find((n) => n.id === i);
12
+ return /* @__PURE__ */ d(p, { children: [
13
+ /* @__PURE__ */ e("nav", { "aria-label": t, "data-section-nav": "list", className: m("hidden flex-col gap-4 lg:flex", l), children: /* @__PURE__ */ e(c, { sections: a, activeId: i }) }),
14
+ /* @__PURE__ */ e("nav", { "aria-label": t, "data-section-nav": "menu", className: m("min-w-0 lg:hidden", l), children: /* @__PURE__ */ e(
15
+ u,
16
+ {
17
+ open: f,
18
+ onOpenChange: o,
19
+ "aria-label": t,
20
+ align: "start",
21
+ width: "20rem",
22
+ className: "p-2",
23
+ trigger: /* @__PURE__ */ e(
24
+ g,
25
+ {
26
+ variant: "outline",
27
+ fullWidth: !0,
28
+ className: "justify-start [&>span]:w-full",
29
+ leadingIcon: r && /* @__PURE__ */ e(s, { name: r.icon, size: "sm" }),
30
+ trailingIcon: /* @__PURE__ */ e(s, { name: "chevron-down", size: "sm" }),
31
+ children: /* @__PURE__ */ e("span", { className: "min-w-0 flex-1 truncate text-left", children: r?.label ?? t })
32
+ }
33
+ ),
34
+ children: /* @__PURE__ */ e("div", { className: "flex flex-col gap-4", children: /* @__PURE__ */ e(c, { sections: a, activeId: i, onNavigate: () => o(!1) }) })
35
+ }
36
+ ) })
37
+ ] });
38
+ }
39
+ export {
40
+ z as SectionNav
41
+ };
42
+ //# sourceMappingURL=SectionNav.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SectionNav.js","sources":["../../src/components/SectionNav.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport { cn } from \"../lib/cn\";\nimport type { NavSection } from \"./AppShell\";\nimport { Button } from \"./Button\";\nimport { Icon } from \"./Icon\";\nimport { NavSections } from \"./nav-sections\";\nimport { Popover } from \"./Popover\";\n\n/* ============================================================================\n SECTION NAV — a page's OWN grouped sub-navigation. DX-4001.\n\n `AppShell` owns the app's eight flat areas. A settings area, a docs\n sidebar or an account page needs a second list inside the page, grouped by\n scope, and `AppShell` cannot host it (its items have no children, and its\n row renderer is private). This renders the same `NavSection[]` the shell\n takes, through the SAME row piece (`nav-sections.tsx`), so a consumer's one\n data model feeds both and the two cannot drift.\n\n BOTH FORMS ARE IN THE HTML, CSS PICKS ONE BY BREAKPOINT (DX-5411). The form\n used to be chosen in JS (`useBelow(\"lg\")`), whose server answer is \"wide\": a\n prerendered page held the open list, and a phone swapped it for the dropdown\n button on its first client render, so the text column jumped (a layout shift\n of 0.751 on a live legal page). A server has no screen size, so the markup\n carries both and `lg:` utilities show exactly one. The hidden one is\n `display: none`, which removes it from the accessibility tree, so there is\n still one nav landmark and one set of links at every width. Apps and tests\n select a form by `data-section-nav=\"list\"` (wide) or `\"menu\"` (phone), never\n by a Tailwind class.\n\n BELOW `lg` IT IS ONE CONTROL, not a wall of links above the page. The list\n opens in a `Popover` and its rows are the shared real `<a href>` links —\n deliberately NOT `Menu`, whose items are `role=\"menuitem\"` divs: that drops\n link semantics (hover URL, ctrl-click to a new tab, `aria-current`), which\n is the whole reason this component exists next to a router.\n ========================================================================= */\n\nexport interface SectionNavProps {\n /** The AppShell data model, reused: a group `label` is optional per section. */\n sections: NavSection[];\n /** The `id` of the current item. Matches nothing → nothing is marked current. */\n activeId?: string;\n /**\n * Names the `<nav>` landmark, the collapsed popup, and is the collapsed\n * control's text while `activeId` matches no item. Make it say what the list\n * is (\"Settings\"), not that it is a list.\n */\n label: string;\n className?: string;\n}\n\nexport function SectionNav({ sections, activeId, label, className }: SectionNavProps) {\n const [open, setOpen] = useState(false);\n\n if (sections.every((s) => s.items.length === 0)) return null;\n\n const active = sections.flatMap((s) => s.items).find((item) => item.id === activeId);\n\n /* The landmark wraps the trigger and stays in the tree while the list is\n shut, so it is still found by landmark navigation. The links themselves\n render in the popover's portal, which is its own labelled dialog; a second\n `nav` with the same name there would be a duplicate landmark (axe\n `landmark-unique`) while open. */\n return (\n <>\n <nav aria-label={label} data-section-nav=\"list\" className={cn(\"hidden flex-col gap-4 lg:flex\", className)}>\n <NavSections sections={sections} activeId={activeId} />\n </nav>\n <nav aria-label={label} data-section-nav=\"menu\" className={cn(\"min-w-0 lg:hidden\", className)}>\n <Popover\n open={open}\n onOpenChange={setOpen}\n aria-label={label}\n align=\"start\"\n width=\"20rem\"\n className=\"p-2\"\n trigger={\n <Button\n variant=\"outline\"\n fullWidth\n /* The button's content wrapper is an inline-flex that shrinks to its\n content, which centres the label; stretching it is what lets the\n label take the room and push the chevron to the trailing edge, as\n a select does. */\n className=\"justify-start [&>span]:w-full\"\n leadingIcon={active && <Icon name={active.icon} size=\"sm\" />}\n trailingIcon={<Icon name=\"chevron-down\" size=\"sm\" />}\n >\n <span className=\"min-w-0 flex-1 truncate text-left\">{active?.label ?? label}</span>\n </Button>\n }\n >\n <div className=\"flex flex-col gap-4\">\n <NavSections sections={sections} activeId={activeId} onNavigate={() => setOpen(false)} />\n </div>\n </Popover>\n </nav>\n </>\n );\n}\n"],"names":["SectionNav","sections","activeId","label","className","open","setOpen","useState","s","active","item","jsxs","Fragment","jsx","cn","NavSections","Popover","Button","Icon"],"mappings":";;;;;;;AAkDO,SAASA,EAAW,EAAE,UAAAC,GAAU,UAAAC,GAAU,OAAAC,GAAO,WAAAC,KAA8B;AACpF,QAAM,CAACC,GAAMC,CAAO,IAAIC,EAAS,EAAK;AAEtC,MAAIN,EAAS,MAAM,CAACO,MAAMA,EAAE,MAAM,WAAW,CAAC,EAAG,QAAO;AAExD,QAAMC,IAASR,EAAS,QAAQ,CAACO,MAAMA,EAAE,KAAK,EAAE,KAAK,CAACE,MAASA,EAAK,OAAOR,CAAQ;AAOnF,SACE,gBAAAS,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAC,EAAC,OAAA,EAAI,cAAYV,GAAO,oBAAiB,QAAO,WAAWW,EAAG,iCAAiCV,CAAS,GACtG,UAAA,gBAAAS,EAACE,GAAA,EAAY,UAAAd,GAAoB,UAAAC,GAAoB,GACvD;AAAA,IACA,gBAAAW,EAAC,OAAA,EAAI,cAAYV,GAAO,oBAAiB,QAAO,WAAWW,EAAG,qBAAqBV,CAAS,GAC1F,UAAA,gBAAAS;AAAA,MAACG;AAAA,MAAA;AAAA,QACC,MAAAX;AAAA,QACA,cAAcC;AAAA,QACd,cAAYH;AAAA,QACZ,OAAM;AAAA,QACN,OAAM;AAAA,QACN,WAAU;AAAA,QACV,SACE,gBAAAU;AAAA,UAACI;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,WAAS;AAAA,YAKT,WAAU;AAAA,YACV,aAAaR,KAAU,gBAAAI,EAACK,GAAA,EAAK,MAAMT,EAAO,MAAM,MAAK,MAAK;AAAA,YAC1D,cAAc,gBAAAI,EAACK,GAAA,EAAK,MAAK,gBAAe,MAAK,MAAK;AAAA,YAElD,4BAAC,QAAA,EAAK,WAAU,qCAAqC,UAAAT,GAAQ,SAASN,EAAA,CAAM;AAAA,UAAA;AAAA,QAAA;AAAA,QAIhF,UAAA,gBAAAU,EAAC,OAAA,EAAI,WAAU,uBACb,UAAA,gBAAAA,EAACE,GAAA,EAAY,UAAAd,GAAoB,UAAAC,GAAoB,YAAY,MAAMI,EAAQ,EAAK,GAAG,EAAA,CACzF;AAAA,MAAA;AAAA,IAAA,EACF,CACF;AAAA,EAAA,GACF;AAEJ;"}