cursedbelt 5.40.0 → 5.45.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 (499) hide show
  1. package/dist/react/Toast.d.ts +12 -2
  2. package/dist/react/Toast.d.ts.map +1 -1
  3. package/dist/react/Toast.js +32 -3
  4. package/dist/react/Toast.js.map +1 -1
  5. package/dist/react/analytics/MetricDrilldown.js +1 -1
  6. package/dist/react/charts/AreaChart.d.ts.map +1 -1
  7. package/dist/react/charts/AreaChart.js +5 -5
  8. package/dist/react/charts/AreaChart.js.map +1 -1
  9. package/dist/react/charts/BarChart.d.ts.map +1 -1
  10. package/dist/react/charts/BarChart.js +3 -3
  11. package/dist/react/charts/BarChart.js.map +1 -1
  12. package/dist/react/charts/ChartCard.d.ts +53 -0
  13. package/dist/react/charts/ChartCard.d.ts.map +1 -0
  14. package/dist/react/charts/ChartCard.js +46 -0
  15. package/dist/react/charts/ChartCard.js.map +1 -0
  16. package/dist/react/charts/ChartFrame.d.ts +12 -5
  17. package/dist/react/charts/ChartFrame.d.ts.map +1 -1
  18. package/dist/react/charts/ChartFrame.js +12 -5
  19. package/dist/react/charts/ChartFrame.js.map +1 -1
  20. package/dist/react/charts/ChartLegend.js +1 -1
  21. package/dist/react/charts/ChartLegend.js.map +1 -1
  22. package/dist/react/charts/HeatmapChart.js +3 -3
  23. package/dist/react/charts/HeatmapChart.js.map +1 -1
  24. package/dist/react/charts/IntervalTimeline.js +1 -1
  25. package/dist/react/charts/IntervalTimeline.js.map +1 -1
  26. package/dist/react/charts/LineChart.d.ts.map +1 -1
  27. package/dist/react/charts/LineChart.js +3 -3
  28. package/dist/react/charts/LineChart.js.map +1 -1
  29. package/dist/react/charts/TimeSeriesChart.d.ts.map +1 -1
  30. package/dist/react/charts/TimeSeriesChart.js +6 -6
  31. package/dist/react/charts/TimeSeriesChart.js.map +1 -1
  32. package/dist/react/charts/chartBox.d.ts +46 -0
  33. package/dist/react/charts/chartBox.d.ts.map +1 -0
  34. package/dist/react/charts/chartBox.js +45 -0
  35. package/dist/react/charts/chartBox.js.map +1 -0
  36. package/dist/react/charts/index.d.ts +2 -0
  37. package/dist/react/charts/index.d.ts.map +1 -1
  38. package/dist/react/charts/index.js +2 -0
  39. package/dist/react/charts/index.js.map +1 -1
  40. package/dist/react/charts/shared.d.ts +13 -2
  41. package/dist/react/charts/shared.d.ts.map +1 -1
  42. package/dist/react/charts/shared.js +14 -3
  43. package/dist/react/charts/shared.js.map +1 -1
  44. package/dist/react/chat/Bubble.js +4 -4
  45. package/dist/react/chat/Bubble.js.map +1 -1
  46. package/dist/react/chat/MessageScroller.js +1 -1
  47. package/dist/react/chat/MessageScroller.js.map +1 -1
  48. package/dist/react/components/ActionBar.d.ts.map +1 -1
  49. package/dist/react/components/ActionBar.js +63 -1
  50. package/dist/react/components/ActionBar.js.map +1 -1
  51. package/dist/react/components/AddItemsMenu.js +1 -1
  52. package/dist/react/components/AddItemsMenu.js.map +1 -1
  53. package/dist/react/components/Alert.d.ts +16 -2
  54. package/dist/react/components/Alert.d.ts.map +1 -1
  55. package/dist/react/components/Alert.js +35 -2
  56. package/dist/react/components/Alert.js.map +1 -1
  57. package/dist/react/components/AppShell.d.ts +55 -33
  58. package/dist/react/components/AppShell.d.ts.map +1 -1
  59. package/dist/react/components/AppShell.js +121 -31
  60. package/dist/react/components/AppShell.js.map +1 -1
  61. package/dist/react/components/AsyncPanel.d.ts +21 -3
  62. package/dist/react/components/AsyncPanel.d.ts.map +1 -1
  63. package/dist/react/components/AsyncPanel.js +49 -5
  64. package/dist/react/components/AsyncPanel.js.map +1 -1
  65. package/dist/react/components/BannerLane.d.ts +32 -0
  66. package/dist/react/components/BannerLane.d.ts.map +1 -0
  67. package/dist/react/components/BannerLane.js +41 -0
  68. package/dist/react/components/BannerLane.js.map +1 -0
  69. package/dist/react/components/Button.d.ts.map +1 -1
  70. package/dist/react/components/Button.js +2 -1
  71. package/dist/react/components/Button.js.map +1 -1
  72. package/dist/react/components/ChipFilterStrip.js +1 -1
  73. package/dist/react/components/ChipFilterStrip.js.map +1 -1
  74. package/dist/react/components/ComboboxField.d.ts.map +1 -1
  75. package/dist/react/components/ComboboxField.js +14 -4
  76. package/dist/react/components/ComboboxField.js.map +1 -1
  77. package/dist/react/components/CommentThread.js +2 -2
  78. package/dist/react/components/CommentThread.js.map +1 -1
  79. package/dist/react/components/ConfirmDialog.js +1 -1
  80. package/dist/react/components/ConfirmDialog.js.map +1 -1
  81. package/dist/react/components/DataTable/DataTable.d.ts +18 -2
  82. package/dist/react/components/DataTable/DataTable.d.ts.map +1 -1
  83. package/dist/react/components/DataTable/DataTable.js +51 -12
  84. package/dist/react/components/DataTable/DataTable.js.map +1 -1
  85. package/dist/react/components/DataTable/Pagination.js +1 -1
  86. package/dist/react/components/DataTable/Pagination.js.map +1 -1
  87. package/dist/react/components/DataTable/RowActions.d.ts +7 -1
  88. package/dist/react/components/DataTable/RowActions.d.ts.map +1 -1
  89. package/dist/react/components/DataTable/RowActions.js +10 -3
  90. package/dist/react/components/DataTable/RowActions.js.map +1 -1
  91. package/dist/react/components/DataTable/TableFilterBuilder.js +1 -1
  92. package/dist/react/components/DataTable/TableFilterBuilder.js.map +1 -1
  93. package/dist/react/components/DataTable/cells/CodeCell.js +1 -1
  94. package/dist/react/components/DataTable/cells/CodeCell.js.map +1 -1
  95. package/dist/react/components/DataTable/cells/LinkCell.js +1 -1
  96. package/dist/react/components/DataTable/cells/LinkCell.js.map +1 -1
  97. package/dist/react/components/DataTable/index.d.ts +1 -1
  98. package/dist/react/components/DataTable/index.d.ts.map +1 -1
  99. package/dist/react/components/DataTable/index.js.map +1 -1
  100. package/dist/react/components/DataTable/types.d.ts +20 -0
  101. package/dist/react/components/DataTable/types.d.ts.map +1 -1
  102. package/dist/react/components/DataTable/types.js +22 -0
  103. package/dist/react/components/DataTable/types.js.map +1 -1
  104. package/dist/react/components/DateTimeField.d.ts.map +1 -1
  105. package/dist/react/components/DateTimeField.js +4 -1
  106. package/dist/react/components/DateTimeField.js.map +1 -1
  107. package/dist/react/components/DeleteButton.js +2 -0
  108. package/dist/react/components/DeleteButton.js.map +1 -1
  109. package/dist/react/components/Drawer.js +3 -3
  110. package/dist/react/components/Drawer.js.map +1 -1
  111. package/dist/react/components/DropdownMenu.d.ts +16 -0
  112. package/dist/react/components/DropdownMenu.d.ts.map +1 -1
  113. package/dist/react/components/DropdownMenu.js +22 -6
  114. package/dist/react/components/DropdownMenu.js.map +1 -1
  115. package/dist/react/components/EmptyState.d.ts +10 -2
  116. package/dist/react/components/EmptyState.d.ts.map +1 -1
  117. package/dist/react/components/EmptyState.js +10 -5
  118. package/dist/react/components/EmptyState.js.map +1 -1
  119. package/dist/react/components/EventTimeline.js +1 -1
  120. package/dist/react/components/EventTimeline.js.map +1 -1
  121. package/dist/react/components/FileDropZone.js +1 -1
  122. package/dist/react/components/FileDropZone.js.map +1 -1
  123. package/dist/react/components/Grid.d.ts +9 -1
  124. package/dist/react/components/Grid.d.ts.map +1 -1
  125. package/dist/react/components/Grid.js +20 -2
  126. package/dist/react/components/Grid.js.map +1 -1
  127. package/dist/react/components/Guide.d.ts +31 -0
  128. package/dist/react/components/Guide.d.ts.map +1 -0
  129. package/dist/react/components/Guide.js +18 -0
  130. package/dist/react/components/Guide.js.map +1 -0
  131. package/dist/react/components/InfoHintImpl.d.ts +0 -13
  132. package/dist/react/components/InfoHintImpl.d.ts.map +1 -1
  133. package/dist/react/components/InfoHintImpl.js +17 -1
  134. package/dist/react/components/InfoHintImpl.js.map +1 -1
  135. package/dist/react/components/InlineEditableText.js +1 -1
  136. package/dist/react/components/InlineEditableText.js.map +1 -1
  137. package/dist/react/components/IsolatedFrame.js +1 -1
  138. package/dist/react/components/IsolatedFrame.js.map +1 -1
  139. package/dist/react/components/ListToolbar.d.ts.map +1 -1
  140. package/dist/react/components/ListToolbar.js +2 -2
  141. package/dist/react/components/ListToolbar.js.map +1 -1
  142. package/dist/react/components/LogViewer.d.ts +26 -2
  143. package/dist/react/components/LogViewer.d.ts.map +1 -1
  144. package/dist/react/components/LogViewer.js +41 -26
  145. package/dist/react/components/LogViewer.js.map +1 -1
  146. package/dist/react/components/Modal.d.ts +5 -1
  147. package/dist/react/components/Modal.d.ts.map +1 -1
  148. package/dist/react/components/Modal.js +18 -8
  149. package/dist/react/components/Modal.js.map +1 -1
  150. package/dist/react/components/Page.d.ts +51 -7
  151. package/dist/react/components/Page.d.ts.map +1 -1
  152. package/dist/react/components/Page.js +53 -8
  153. package/dist/react/components/Page.js.map +1 -1
  154. package/dist/react/components/PageGuideButton.d.ts +11 -0
  155. package/dist/react/components/PageGuideButton.d.ts.map +1 -0
  156. package/dist/react/components/PageGuideButton.js +13 -0
  157. package/dist/react/components/PageGuideButton.js.map +1 -0
  158. package/dist/react/components/PanelSeparator.js +1 -1
  159. package/dist/react/components/PanelSeparator.js.map +1 -1
  160. package/dist/react/components/Popover.d.ts.map +1 -1
  161. package/dist/react/components/Popover.js +2 -1
  162. package/dist/react/components/Popover.js.map +1 -1
  163. package/dist/react/components/PromptDialog.js +1 -1
  164. package/dist/react/components/PromptDialog.js.map +1 -1
  165. package/dist/react/components/ScrollArea.d.ts +9 -1
  166. package/dist/react/components/ScrollArea.d.ts.map +1 -1
  167. package/dist/react/components/ScrollArea.js +9 -3
  168. package/dist/react/components/ScrollArea.js.map +1 -1
  169. package/dist/react/components/Section.d.ts +5 -2
  170. package/dist/react/components/Section.d.ts.map +1 -1
  171. package/dist/react/components/Section.js +5 -2
  172. package/dist/react/components/Section.js.map +1 -1
  173. package/dist/react/components/Skeleton.d.ts +19 -1
  174. package/dist/react/components/Skeleton.d.ts.map +1 -1
  175. package/dist/react/components/Skeleton.js +24 -2
  176. package/dist/react/components/Skeleton.js.map +1 -1
  177. package/dist/react/components/StatStrip.js +1 -1
  178. package/dist/react/components/StatStrip.js.map +1 -1
  179. package/dist/react/components/StatTile.d.ts +30 -3
  180. package/dist/react/components/StatTile.d.ts.map +1 -1
  181. package/dist/react/components/StatTile.js +35 -9
  182. package/dist/react/components/StatTile.js.map +1 -1
  183. package/dist/react/components/StatTileGrid.d.ts +10 -1
  184. package/dist/react/components/StatTileGrid.d.ts.map +1 -1
  185. package/dist/react/components/StatTileGrid.js +50 -33
  186. package/dist/react/components/StatTileGrid.js.map +1 -1
  187. package/dist/react/components/StatusPill.d.ts.map +1 -1
  188. package/dist/react/components/StatusPill.js +26 -1
  189. package/dist/react/components/StatusPill.js.map +1 -1
  190. package/dist/react/components/Surface.d.ts +1 -1
  191. package/dist/react/components/Surface.d.ts.map +1 -1
  192. package/dist/react/components/Surface.js +20 -11
  193. package/dist/react/components/Surface.js.map +1 -1
  194. package/dist/react/components/SwatchPicker.d.ts.map +1 -1
  195. package/dist/react/components/SwatchPicker.js +5 -1
  196. package/dist/react/components/SwatchPicker.js.map +1 -1
  197. package/dist/react/components/Switch.js +1 -1
  198. package/dist/react/components/Switch.js.map +1 -1
  199. package/dist/react/components/WidgetHeader.js +1 -1
  200. package/dist/react/components/WidgetHeader.js.map +1 -1
  201. package/dist/react/components/calendar/CalendarLegend.js +1 -1
  202. package/dist/react/components/calendar/CalendarLegend.js.map +1 -1
  203. package/dist/react/components/calendar/DayAgenda.js +1 -1
  204. package/dist/react/components/calendar/DayAgenda.js.map +1 -1
  205. package/dist/react/components/calendar/EventChip.js +1 -1
  206. package/dist/react/components/calendar/EventChip.js.map +1 -1
  207. package/dist/react/components/calendar/MonthGrid.js +1 -1
  208. package/dist/react/components/calendar/MonthGrid.js.map +1 -1
  209. package/dist/react/components/calendar/WeekView.js +2 -2
  210. package/dist/react/components/calendar/WeekView.js.map +1 -1
  211. package/dist/react/components/cardFrame.d.ts +16 -0
  212. package/dist/react/components/cardFrame.d.ts.map +1 -0
  213. package/dist/react/components/cardFrame.js +24 -0
  214. package/dist/react/components/cardFrame.js.map +1 -0
  215. package/dist/react/components/dialog.d.ts.map +1 -1
  216. package/dist/react/components/dialog.js +2 -1
  217. package/dist/react/components/dialog.js.map +1 -1
  218. package/dist/react/dashboard-grid/WidgetFrame.js +2 -2
  219. package/dist/react/dashboard-grid/WidgetFrame.js.map +1 -1
  220. package/dist/react/emoji/EmojiPicker.js +1 -1
  221. package/dist/react/emoji/EmojiPicker.js.map +1 -1
  222. package/dist/react/file-tree/FileTree.d.ts +8 -1
  223. package/dist/react/file-tree/FileTree.d.ts.map +1 -1
  224. package/dist/react/file-tree/FileTree.js +29 -4
  225. package/dist/react/file-tree/FileTree.js.map +1 -1
  226. package/dist/react/filter-rail/FilterRail.js +1 -1
  227. package/dist/react/filter-rail/FilterRail.js.map +1 -1
  228. package/dist/react/icons.js +1 -1
  229. package/dist/react/icons.js.map +1 -1
  230. package/dist/react/index.d.ts +8 -5
  231. package/dist/react/index.d.ts.map +1 -1
  232. package/dist/react/index.js +5 -2
  233. package/dist/react/index.js.map +1 -1
  234. package/dist/react/lib/menuSections.d.ts +8 -0
  235. package/dist/react/lib/menuSections.d.ts.map +1 -0
  236. package/dist/react/lib/menuSections.js +37 -0
  237. package/dist/react/lib/menuSections.js.map +1 -0
  238. package/dist/react/markdown/Markdown.js +2 -2
  239. package/dist/react/markdown/Markdown.js.map +1 -1
  240. package/dist/react/media/HoverScrubVideoThumb.js +1 -1
  241. package/dist/react/media/HoverScrubVideoThumb.js.map +1 -1
  242. package/dist/react/media/MaskPainter.js +1 -1
  243. package/dist/react/media/MediaUploadControl.js +1 -1
  244. package/dist/react/media/MediaUploadControl.js.map +1 -1
  245. package/dist/react/media/VideoTrimmer.js +1 -1
  246. package/dist/react/media/VideoTrimmer.js.map +1 -1
  247. package/dist/react/media/denseGallery.css +5 -1
  248. package/dist/react/namespace/NamespaceTargetCapsule.js +1 -1
  249. package/dist/react/namespace/NamespaceTargetCapsule.js.map +1 -1
  250. package/dist/react/nav/BreadcrumbTrail.js +1 -1
  251. package/dist/react/nav/BreadcrumbTrail.js.map +1 -1
  252. package/dist/react/nav/CommandBar.d.ts +7 -1
  253. package/dist/react/nav/CommandBar.d.ts.map +1 -1
  254. package/dist/react/nav/CommandBar.js +5 -3
  255. package/dist/react/nav/CommandBar.js.map +1 -1
  256. package/dist/react/nav/PlaceBar.d.ts.map +1 -1
  257. package/dist/react/nav/PlaceBar.js +7 -9
  258. package/dist/react/nav/PlaceBar.js.map +1 -1
  259. package/dist/react/nav/SideNav.d.ts +12 -2
  260. package/dist/react/nav/SideNav.d.ts.map +1 -1
  261. package/dist/react/nav/SideNav.js +42 -22
  262. package/dist/react/nav/SideNav.js.map +1 -1
  263. package/dist/react/nav/TopBar.d.ts +65 -31
  264. package/dist/react/nav/TopBar.d.ts.map +1 -1
  265. package/dist/react/nav/TopBar.js +59 -24
  266. package/dist/react/nav/TopBar.js.map +1 -1
  267. package/dist/react/nav/index.d.ts +1 -1
  268. package/dist/react/nav/index.d.ts.map +1 -1
  269. package/dist/react/nav/index.js +1 -1
  270. package/dist/react/nav/index.js.map +1 -1
  271. package/dist/react/nav/navShared.d.ts +10 -1
  272. package/dist/react/nav/navShared.d.ts.map +1 -1
  273. package/dist/react/nav/navShared.js +23 -0
  274. package/dist/react/nav/navShared.js.map +1 -1
  275. package/dist/react/notifications/NotificationFeed.js +2 -2
  276. package/dist/react/notifications/NotificationFeed.js.map +1 -1
  277. package/dist/react/palette/Command.d.ts.map +1 -1
  278. package/dist/react/palette/Command.js +1 -1
  279. package/dist/react/palette/Command.js.map +1 -1
  280. package/dist/react/palette/CommandPalette.d.ts +13 -1
  281. package/dist/react/palette/CommandPalette.d.ts.map +1 -1
  282. package/dist/react/palette/CommandPalette.js +44 -8
  283. package/dist/react/palette/CommandPalette.js.map +1 -1
  284. package/dist/react/palette/commandSources.d.ts +57 -0
  285. package/dist/react/palette/commandSources.d.ts.map +1 -0
  286. package/dist/react/palette/commandSources.js +129 -0
  287. package/dist/react/palette/commandSources.js.map +1 -0
  288. package/dist/react/palette/index.d.ts +1 -0
  289. package/dist/react/palette/index.d.ts.map +1 -1
  290. package/dist/react/palette/index.js +1 -0
  291. package/dist/react/palette/index.js.map +1 -1
  292. package/dist/react/rich-text/RichTextEditor.js +1 -1
  293. package/dist/react/rich-text/RichTextEditor.js.map +1 -1
  294. package/dist/react/rich-text/RichTextToolbar.js +1 -1
  295. package/dist/react/rich-text/RichTextToolbar.js.map +1 -1
  296. package/dist/scripts/guardrailsEnforce.d.ts.map +1 -1
  297. package/dist/styles-areas/analytics.css +16 -16
  298. package/dist/styles-areas/auth.css +3 -3
  299. package/dist/styles-areas/calendar.css +6 -6
  300. package/dist/styles-areas/chart-table.css +1 -1
  301. package/dist/styles-areas/charts.css +3 -3
  302. package/dist/styles-areas/chat.css +7 -6
  303. package/dist/styles-areas/companion-link.css +2 -2
  304. package/dist/styles-areas/core.css +98 -89
  305. package/dist/styles-areas/dashboard-grid.css +4 -4
  306. package/dist/styles-areas/data-table.css +16 -16
  307. package/dist/styles-areas/disk-usage.css +5 -5
  308. package/dist/styles-areas/emoji.css +2 -2
  309. package/dist/styles-areas/fields.css +13 -14
  310. package/dist/styles-areas/filter-rail.css +4 -4
  311. package/dist/styles-areas/folder-tree.css +3 -3
  312. package/dist/styles-areas/markdown.css +2 -1
  313. package/dist/styles-areas/master-detail.css +3 -3
  314. package/dist/styles-areas/media-gallery.css +8 -8
  315. package/dist/styles-areas/media.css +12 -13
  316. package/dist/styles-areas/nav.css +28 -14
  317. package/dist/styles-areas/notifications.css +4 -4
  318. package/dist/styles-areas/overlays.css +4 -4
  319. package/dist/styles-areas/palette.css +4 -3
  320. package/dist/styles-areas/rich-text.css +3 -3
  321. package/dist/styles-areas/sharing.css +4 -3
  322. package/dist/styles-areas/stats.css +9 -8
  323. package/dist/styles-areas/test-report.css +3 -3
  324. package/dist/styles-areas/wizard.css +6 -5
  325. package/dist/styles-areas/workbench.css +10 -9
  326. package/dist/styles-areas/workbook-viewer.css +2 -2
  327. package/dist/styles-utilities.css +272 -187
  328. package/dist/testing/designAudit.d.ts.map +1 -1
  329. package/dist/testing/designAudit.js +4 -0
  330. package/dist/testing/designAudit.js.map +1 -1
  331. package/dist/testing/designBaseline.d.ts.map +1 -1
  332. package/dist/testing/designBaseline.js +4 -0
  333. package/dist/testing/designBaseline.js.map +1 -1
  334. package/dist/theme.css +103 -2
  335. package/package.json +3 -2
  336. package/scripts/guardrails-baseline.json +2 -1
  337. package/scripts/guardrailsEnforce.spec.ts +64 -0
  338. package/scripts/guardrailsEnforce.ts +65 -8
  339. package/scripts/styleAreas.ts +1 -0
  340. package/src/nodeTypesDeclared.spec.ts +47 -0
  341. package/src/react/Toast.spec.tsx +43 -0
  342. package/src/react/Toast.tsx +45 -2
  343. package/src/react/analytics/MetricDrilldown.tsx +1 -1
  344. package/src/react/charts/AreaChart.tsx +9 -8
  345. package/src/react/charts/BarChart.tsx +11 -10
  346. package/src/react/charts/ChartCard.tsx +146 -0
  347. package/src/react/charts/ChartFrame.tsx +28 -10
  348. package/src/react/charts/ChartLegend.tsx +1 -1
  349. package/src/react/charts/HeatmapChart.tsx +5 -5
  350. package/src/react/charts/IntervalTimeline.tsx +2 -2
  351. package/src/react/charts/LineChart.tsx +9 -8
  352. package/src/react/charts/TimeSeriesChart.tsx +11 -10
  353. package/src/react/charts/chartBox.spec.ts +40 -0
  354. package/src/react/charts/chartBox.ts +75 -0
  355. package/src/react/charts/index.ts +2 -0
  356. package/src/react/charts/shared.ts +16 -3
  357. package/src/react/chat/Bubble.tsx +5 -5
  358. package/src/react/chat/MessageScroller.tsx +1 -1
  359. package/src/react/components/ActionBar.spec.tsx +90 -0
  360. package/src/react/components/ActionBar.tsx +82 -2
  361. package/src/react/components/AddItemsMenu.tsx +1 -1
  362. package/src/react/components/Alert.spec.tsx +32 -2
  363. package/src/react/components/Alert.tsx +47 -3
  364. package/src/react/components/AppShell.spec.tsx +199 -13
  365. package/src/react/components/AppShell.tsx +235 -92
  366. package/src/react/components/AsyncPanel.spec.tsx +7 -1
  367. package/src/react/components/AsyncPanel.tsx +85 -5
  368. package/src/react/components/BannerLane.tsx +128 -0
  369. package/src/react/components/Button.tsx +2 -0
  370. package/src/react/components/ChipFilterStrip.tsx +1 -1
  371. package/src/react/components/ComboboxField.tsx +20 -3
  372. package/src/react/components/CommentThread.tsx +2 -2
  373. package/src/react/components/ConfirmDialog.tsx +1 -1
  374. package/src/react/components/DataTable/DataTable.tsx +80 -8
  375. package/src/react/components/DataTable/Pagination.tsx +1 -1
  376. package/src/react/components/DataTable/RowActions.tsx +55 -2
  377. package/src/react/components/DataTable/TableFilterBuilder.tsx +1 -1
  378. package/src/react/components/DataTable/cells/CodeCell.tsx +1 -1
  379. package/src/react/components/DataTable/cells/LinkCell.tsx +1 -1
  380. package/src/react/components/DataTable/index.ts +1 -0
  381. package/src/react/components/DataTable/numericColumn.spec.ts +19 -0
  382. package/src/react/components/DataTable/types.ts +36 -0
  383. package/src/react/components/DateTimeField.tsx +3 -1
  384. package/src/react/components/DeleteButton.tsx +3 -0
  385. package/src/react/components/Drawer.tsx +3 -3
  386. package/src/react/components/DropdownMenu.spec.tsx +55 -0
  387. package/src/react/components/DropdownMenu.tsx +73 -20
  388. package/src/react/components/EmptyState.tsx +26 -7
  389. package/src/react/components/EventTimeline.tsx +1 -1
  390. package/src/react/components/Field.width.spec.tsx +11 -0
  391. package/src/react/components/FileDropZone.tsx +1 -1
  392. package/src/react/components/Grid.spec.tsx +44 -0
  393. package/src/react/components/Grid.tsx +41 -11
  394. package/src/react/components/Guide.tsx +77 -0
  395. package/src/react/components/InfoHint.spec.tsx +21 -0
  396. package/src/react/components/InfoHintImpl.tsx +22 -1
  397. package/src/react/components/InlineEditableText.tsx +1 -1
  398. package/src/react/components/IsolatedFrame.tsx +1 -1
  399. package/src/react/components/ListToolbar.spec.tsx +12 -0
  400. package/src/react/components/ListToolbar.tsx +8 -5
  401. package/src/react/components/LogViewer.tsx +118 -18
  402. package/src/react/components/Modal.spec.tsx +17 -2
  403. package/src/react/components/Modal.tsx +25 -10
  404. package/src/react/components/MultiSelectField.spec.tsx +6 -0
  405. package/src/react/components/Page.spec.tsx +89 -5
  406. package/src/react/components/Page.tsx +100 -16
  407. package/src/react/components/PageGuideButton.tsx +42 -0
  408. package/src/react/components/PanelSeparator.tsx +1 -1
  409. package/src/react/components/Popover.tsx +3 -1
  410. package/src/react/components/PromptDialog.tsx +1 -1
  411. package/src/react/components/ScrollArea.spec.tsx +20 -0
  412. package/src/react/components/ScrollArea.tsx +19 -0
  413. package/src/react/components/Section.spec.tsx +82 -1
  414. package/src/react/components/Section.tsx +10 -4
  415. package/src/react/components/Skeleton.tsx +50 -2
  416. package/src/react/components/StatStrip.tsx +1 -1
  417. package/src/react/components/StatTile.tsx +84 -11
  418. package/src/react/components/StatTileGrid.spec.tsx +6 -1
  419. package/src/react/components/StatTileGrid.tsx +25 -0
  420. package/src/react/components/StatusPill.tsx +26 -1
  421. package/src/react/components/Surface.tsx +22 -14
  422. package/src/react/components/SwatchPicker.tsx +4 -0
  423. package/src/react/components/Switch.tsx +1 -1
  424. package/src/react/components/WidgetHeader.tsx +1 -1
  425. package/src/react/components/calendar/CalendarLegend.tsx +1 -1
  426. package/src/react/components/calendar/DayAgenda.tsx +1 -1
  427. package/src/react/components/calendar/EventChip.tsx +1 -1
  428. package/src/react/components/calendar/MonthGrid.tsx +1 -1
  429. package/src/react/components/calendar/WeekView.tsx +2 -2
  430. package/src/react/components/cardFrame.ts +28 -0
  431. package/src/react/components/dataDisplay.spec.tsx +176 -0
  432. package/src/react/components/dialog.tsx +4 -1
  433. package/src/react/dashboard-grid/WidgetFrame.tsx +2 -2
  434. package/src/react/emoji/EmojiPicker.tsx +1 -1
  435. package/src/react/file-tree/FileTree.spec.tsx +49 -0
  436. package/src/react/file-tree/FileTree.tsx +37 -4
  437. package/src/react/filter-rail/FilterRail.tsx +1 -1
  438. package/src/react/icons.tsx +1 -1
  439. package/src/react/index.ts +28 -3
  440. package/src/react/lib/menuSections.ts +33 -0
  441. package/src/react/markdown/Markdown.tsx +2 -2
  442. package/src/react/media/HoverScrubVideoThumb.tsx +2 -2
  443. package/src/react/media/MaskPainter.tsx +1 -1
  444. package/src/react/media/MediaUploadControl.tsx +1 -1
  445. package/src/react/media/VideoTrimmer.tsx +1 -1
  446. package/src/react/media/denseGallery.css +5 -1
  447. package/src/react/namespace/NamespaceTargetCapsule.tsx +1 -1
  448. package/src/react/nav/BreadcrumbTrail.tsx +2 -2
  449. package/src/react/nav/CommandBar.tsx +14 -3
  450. package/src/react/nav/PlaceBar.tsx +18 -8
  451. package/src/react/nav/SideNav.tsx +99 -17
  452. package/src/react/nav/TopBar.spec.tsx +78 -21
  453. package/src/react/nav/TopBar.tsx +270 -98
  454. package/src/react/nav/index.ts +8 -1
  455. package/src/react/nav/nav.spec.tsx +46 -2
  456. package/src/react/nav/navShared.tsx +23 -2
  457. package/src/react/notifications/NotificationFeed.tsx +2 -2
  458. package/src/react/palette/Command.tsx +1 -1
  459. package/src/react/palette/CommandPalette.spec.tsx +31 -0
  460. package/src/react/palette/CommandPalette.tsx +108 -11
  461. package/src/react/palette/commandSources.tsx +186 -0
  462. package/src/react/palette/index.ts +7 -0
  463. package/src/react/rich-text/RichTextEditor.tsx +1 -1
  464. package/src/react/rich-text/RichTextToolbar.tsx +1 -1
  465. package/src/styles-areas/analytics.css +16 -16
  466. package/src/styles-areas/auth.css +3 -3
  467. package/src/styles-areas/calendar.css +6 -6
  468. package/src/styles-areas/chart-table.css +1 -1
  469. package/src/styles-areas/charts.css +3 -3
  470. package/src/styles-areas/chat.css +7 -6
  471. package/src/styles-areas/companion-link.css +2 -2
  472. package/src/styles-areas/core.css +98 -89
  473. package/src/styles-areas/dashboard-grid.css +4 -4
  474. package/src/styles-areas/data-table.css +16 -16
  475. package/src/styles-areas/disk-usage.css +5 -5
  476. package/src/styles-areas/emoji.css +2 -2
  477. package/src/styles-areas/fields.css +13 -14
  478. package/src/styles-areas/filter-rail.css +4 -4
  479. package/src/styles-areas/folder-tree.css +3 -3
  480. package/src/styles-areas/markdown.css +2 -1
  481. package/src/styles-areas/master-detail.css +3 -3
  482. package/src/styles-areas/media-gallery.css +8 -8
  483. package/src/styles-areas/media.css +12 -13
  484. package/src/styles-areas/nav.css +28 -14
  485. package/src/styles-areas/notifications.css +4 -4
  486. package/src/styles-areas/overlays.css +4 -4
  487. package/src/styles-areas/palette.css +4 -3
  488. package/src/styles-areas/rich-text.css +3 -3
  489. package/src/styles-areas/sharing.css +4 -3
  490. package/src/styles-areas/stats.css +9 -8
  491. package/src/styles-areas/test-report.css +3 -3
  492. package/src/styles-areas/wizard.css +6 -5
  493. package/src/styles-areas/workbench.css +10 -9
  494. package/src/styles-areas/workbook-viewer.css +2 -2
  495. package/src/styles-utilities.css +272 -187
  496. package/src/testing/designAudit.ts +3 -0
  497. package/src/testing/designBaseline.ts +4 -0
  498. package/src/theme.css +103 -2
  499. package/src/themeDarkScopeAliases.spec.ts +65 -0
@@ -1 +1 @@
1
- {"version":3,"file":"Grid.d.ts","sourceRoot":"","sources":["../../../src/react/components/Grid.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,cAAc,EAAE,MAAM,OAAO,CAAC;AAE3D,OAAO,EAAO,KAAK,GAAG,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,SAAU,SAAQ,cAAc,CAAC,cAAc,CAAC;IAC/D;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,GAAG,CAAC;CACX;AAED;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,EAAE,GAAa,EAAE,GAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,+BAajF"}
1
+ {"version":3,"file":"Grid.d.ts","sourceRoot":"","sources":["../../../src/react/components/Grid.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,cAAc,EAAE,MAAM,OAAO,CAAC;AAE3D,OAAO,EAAO,KAAK,GAAG,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,SAAU,SAAQ,cAAc,CAAC,cAAc,CAAC;IAC/D;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,GAAG,CAAC;IACV;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAcD;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,EAAE,GAAa,EAAE,GAAO,EAAE,OAAe,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,+BAuB5G"}
@@ -1,6 +1,16 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { cn } from '../lib/cn.js';
3
3
  import { GAP } from './layout.js';
4
+ // The rule is each column's LEFT border, half a gutter out from its content. The inner
5
+ // grid is pulled out by half a gutter on both sides, so content still aligns with the
6
+ // edges, and the wrapper clips what hangs over — which is exactly the first column of
7
+ // every row's border, wherever the row wraps. The clip margin keeps a focus ring at the
8
+ // edge visible (it is far less than the half gutter the border sits out at).
9
+ const DIVIDED_WRAPPER = 'overflow-x-clip [overflow-clip-margin:calc(var(--spacing)*1)]';
10
+ // The extra 1px on the left is the clipped rule's own width: without it the first
11
+ // column's content would sit a pixel in from the edge every other block lines up on.
12
+ const DIVIDED_GRID = '-ml-[calc(var(--col-gap)/2+1px)] -mr-[calc(var(--col-gap)/2)] gap-x-0 gap-y-[var(--col-gap)] ' +
13
+ '*:border-l *:border-rule *:px-[calc(var(--col-gap)/2)]';
4
14
  /**
5
15
  * Responsive grid that reflows to its OWN width, not the viewport — so the same
6
16
  * markup is 3-up in a wide page, 2-up in a 640px modal, 1-up on a phone, with no
@@ -9,7 +19,15 @@ import { GAP } from './layout.js';
9
19
  * than `min`. Sets `@container` on itself so its children can use `@`-container
10
20
  * queries keyed to the grid's width (e.g. `<Grid className="@xl:grid-cols-2">`).
11
21
  */
12
- export function Grid({ min = '16rem', gap = 4, className, style, ...p }) {
13
- return (_jsx("div", { style: { ...style, '--cb-grid-min': min }, className: cn('@container', 'grid grid-cols-[repeat(auto-fit,minmax(min(var(--cb-grid-min),100%),1fr))]', GAP[gap], className), ...p }));
22
+ export function Grid({ min = '16rem', gap = 4, divided = false, className, style, children, ...p }) {
23
+ const gridStyle = { '--cb-grid-min': min };
24
+ const gridClass = cn('@container',
25
+ // Columns in a row stretch to one height (grid's default `stretch`) and a shorter
26
+ // column's spare space sits at its bottom — never padded to fill (LAY-3).
27
+ 'grid grid-cols-[repeat(auto-fit,minmax(min(var(--cb-grid-min),100%),1fr))]', divided ? DIVIDED_GRID : GAP[gap]);
28
+ if (divided) {
29
+ return (_jsx("div", { "data-cb-grid-divided": '', style: style, className: cn(DIVIDED_WRAPPER, className), ...p, children: _jsx("div", { style: gridStyle, className: gridClass, children: children }) }));
30
+ }
31
+ return (_jsx("div", { style: { ...style, ...gridStyle }, className: cn(gridClass, className), ...p, children: children }));
14
32
  }
15
33
  //# sourceMappingURL=Grid.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Grid.js","sourceRoot":"","sources":["../../../src/react/components/Grid.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,GAAG,EAAY,MAAM,aAAa,CAAC;AAW5C;;;;;;;GAOG;AACH,MAAM,UAAU,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,EAAE,GAAG,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,EAAa;IAChF,OAAO,CACL,cACE,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,eAAe,EAAE,GAAG,EAAmB,EAC1D,SAAS,EAAE,EAAE,CACX,YAAY,EACZ,4EAA4E,EAC5E,GAAG,CAAC,GAAG,CAAC,EACR,SAAS,CACV,KACG,CAAC,GACL,CACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"Grid.js","sourceRoot":"","sources":["../../../src/react/components/Grid.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,GAAG,EAAY,MAAM,aAAa,CAAC;AAmB5C,uFAAuF;AACvF,sFAAsF;AACtF,sFAAsF;AACtF,wFAAwF;AACxF,6EAA6E;AAC7E,MAAM,eAAe,GAAG,+DAA+D,CAAC;AACxF,kFAAkF;AAClF,qFAAqF;AACrF,MAAM,YAAY,GAChB,+FAA+F;IAC/F,wDAAwD,CAAC;AAE3D;;;;;;;GAOG;AACH,MAAM,UAAU,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,EAAE,GAAG,GAAG,CAAC,EAAE,OAAO,GAAG,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAa;IAC3G,MAAM,SAAS,GAAG,EAAE,eAAe,EAAE,GAAG,EAAmB,CAAC;IAC5D,MAAM,SAAS,GAAG,EAAE,CAClB,YAAY;IACZ,kFAAkF;IAClF,0EAA0E;IAC1E,4EAA4E,EAC5E,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAClC,CAAC;IACF,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CACL,sCAA0B,EAAE,EAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,eAAe,EAAE,SAAS,CAAC,KAAM,CAAC,YACzF,cAAK,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,YACxC,QAAQ,GACL,GACF,CACP,CAAC;IACJ,CAAC;IACD,OAAO,CACL,cAAK,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,GAAG,SAAS,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,KAAM,CAAC,YAC/E,QAAQ,GACL,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface GuideRouteProps {
3
+ /** What the guide explains — "How your Google connections work". */
4
+ title: ReactNode;
5
+ /** One line under the title. */
6
+ lede?: ReactNode;
7
+ /** Where "back" goes: the page this guide belongs to. */
8
+ backHref: string;
9
+ /** The name of that page, on the back button ("Connections"). */
10
+ backLabel: string;
11
+ /** Called on the back press — an app whose router is not a plain link navigates here. */
12
+ onBack?: () => void;
13
+ /** The guide: `GuideSection`s, alerts, live steps. */
14
+ children: ReactNode;
15
+ className?: string;
16
+ }
17
+ /**
18
+ * A guide as a page of its own: the back button, the title, then the sections in the reading
19
+ * column. Everything in it counts as prose for the design audit (CPY-1), because this is the
20
+ * place long text is supposed to go.
21
+ */
22
+ export declare function GuideRoute({ title, lede, backHref, backLabel, onBack, children, className }: GuideRouteProps): import("react").JSX.Element;
23
+ export interface GuideSectionProps {
24
+ title: ReactNode;
25
+ /** One line under the section title. */
26
+ lede?: ReactNode;
27
+ children: ReactNode;
28
+ }
29
+ /** One titled section of a {@link GuideRoute}. */
30
+ export declare function GuideSection({ title, lede, children }: GuideSectionProps): import("react").JSX.Element;
31
+ //# sourceMappingURL=Guide.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Guide.d.ts","sourceRoot":"","sources":["../../../src/react/components/Guide.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAmBvC,MAAM,WAAW,eAAe;IAC9B,oEAAoE;IACpE,KAAK,EAAE,SAAS,CAAC;IACjB,gCAAgC;IAChC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,yFAAyF;IACzF,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,sDAAsD;IACtD,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,eAAe,+BAe5G;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,SAAS,CAAC;IACjB,wCAAwC;IACxC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,kDAAkD;AAClD,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,iBAAiB,+BAUxE"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ArrowLeft } from 'lucide-react';
3
+ import { cn } from '../lib/cn.js';
4
+ import { ButtonLink } from './ButtonLink.js';
5
+ import { PageHeader, ReadableColumn } from './Page.js';
6
+ /**
7
+ * A guide as a page of its own: the back button, the title, then the sections in the reading
8
+ * column. Everything in it counts as prose for the design audit (CPY-1), because this is the
9
+ * place long text is supposed to go.
10
+ */
11
+ export function GuideRoute({ title, lede, backHref, backLabel, onBack, children, className }) {
12
+ return (_jsxs(ReadableColumn, { "data-cb-guide-route": '', className: cn('flex flex-col gap-8 px-4 py-6 sm:px-6', className), children: [_jsxs("div", { className: 'flex flex-col gap-3', children: [_jsx("div", { children: _jsxs(ButtonLink, { variant: 'ghost', size: 'sm', to: backHref, onClick: onBack, tooltip: `Back to ${backLabel}`, children: [_jsx(ArrowLeft, { "aria-hidden": true }), backLabel] }) }), _jsx(PageHeader, { title: title, subtitle: lede, className: 'border-b-0 pb-0' })] }), children] }));
13
+ }
14
+ /** One titled section of a {@link GuideRoute}. */
15
+ export function GuideSection({ title, lede, children }) {
16
+ return (_jsxs("section", { className: 'flex flex-col gap-3', children: [_jsxs("div", { children: [_jsx("h2", { className: 'text-h3 font-semibold tracking-tight text-foreground', children: title }), lede ? _jsx("p", { className: 'mt-0.5 text-sm text-muted-foreground', children: lede }) : null] }), _jsx("div", { className: 'flex flex-col gap-3 text-sm leading-relaxed text-foreground', children: children })] }));
17
+ }
18
+ //# sourceMappingURL=Guide.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Guide.js","sourceRoot":"","sources":["../../../src/react/components/Guide.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAgCvD;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAmB;IAC3G,OAAO,CACL,MAAC,cAAc,2BAAqB,EAAE,EAAC,SAAS,EAAE,EAAE,CAAC,uCAAuC,EAAE,SAAS,CAAC,aACtG,eAAK,SAAS,EAAC,qBAAqB,aAClC,wBACE,MAAC,UAAU,IAAC,OAAO,EAAC,OAAO,EAAC,IAAI,EAAC,IAAI,EAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,SAAS,EAAE,aAClG,KAAC,SAAS,0BAAe,EACxB,SAAS,IACC,GACT,EACN,KAAC,UAAU,IAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAC,iBAAiB,GAAG,IACpE,EACL,QAAQ,IACM,CAClB,CAAC;AACJ,CAAC;AASD,kDAAkD;AAClD,MAAM,UAAU,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAqB;IACvE,OAAO,CACL,mBAAS,SAAS,EAAC,qBAAqB,aACtC,0BACE,aAAI,SAAS,EAAC,sDAAsD,YAAE,KAAK,GAAM,EAChF,IAAI,CAAC,CAAC,CAAC,YAAG,SAAS,EAAC,sCAAsC,YAAE,IAAI,GAAK,CAAC,CAAC,CAAC,IAAI,IACzE,EACN,cAAK,SAAS,EAAC,6DAA6D,YAAE,QAAQ,GAAO,IACrF,CACX,CAAC;AACJ,CAAC"}
@@ -1,16 +1,3 @@
1
1
  import { type InfoHintImplProps } from '../lib/infoHint.js';
2
- /**
3
- * "ⓘ" field-help — the bespoke anchored composite on @floating-ui/react (portaled,
4
- * flips + shifts, never clipped by an overflow ancestor). The reference model for
5
- * any future bespoke anchored composite (color picker on a swatch, date picker on an
6
- * input); standard primitives (Tooltip/DropdownMenu/SelectField/Popover/HoverCard)
7
- * use Radix instead.
8
- *
9
- * Opens on hover + focus on pointer devices, and on click/tap everywhere — so it is
10
- * reachable on touch screens (which have no hover). `useHasHover` disables the hover
11
- * interaction on touch devices so the panel isn't left stuck open after a tap.
12
- *
13
- * Loaded by `InfoHint.tsx` with a dynamic `import()` — see that file for why.
14
- */
15
2
  export default function InfoHintImpl({ children, title, align, className, label, initialOpen, initialFocus, }: InfoHintImplProps): import("react").JSX.Element;
16
3
  //# sourceMappingURL=InfoHintImpl.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"InfoHintImpl.d.ts","sourceRoot":"","sources":["../../../src/react/components/InfoHintImpl.tsx"],"names":[],"mappings":"AAoBA,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE/E;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,QAAQ,EACR,KAAK,EACL,KAAc,EACd,SAAS,EACT,KAAmB,EACnB,WAAmB,EACnB,YAAoB,GACrB,EAAE,iBAAiB,+BAwEnB"}
1
+ {"version":3,"file":"InfoHintImpl.d.ts","sourceRoot":"","sources":["../../../src/react/components/InfoHintImpl.tsx"],"names":[],"mappings":"AAqBA,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAkB/E,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACnC,QAAQ,EACR,KAAK,EACL,KAAc,EACd,SAAS,EACT,KAAmB,EACnB,WAAmB,EACnB,YAAoB,GACrB,EAAE,iBAAiB,+BAyFnB"}
@@ -4,6 +4,7 @@ import { Info } from 'lucide-react';
4
4
  import { useEffect, useState } from 'react';
5
5
  import { useHasHover } from '../hooks/useHasHover.js';
6
6
  import { cn } from '../lib/cn.js';
7
+ import { devWarnOnce } from '../lib/devWarn.js';
7
8
  import { HOVER_HINT_DELAY_MS } from '../lib/hoverIntent.js';
8
9
  import { INFO_HINT_TRIGGER } from '../lib/infoHint.js';
9
10
  /**
@@ -19,6 +20,8 @@ import { INFO_HINT_TRIGGER } from '../lib/infoHint.js';
19
20
  *
20
21
  * Loaded by `InfoHint.tsx` with a dynamic `import()` — see that file for why.
21
22
  */
23
+ /** CPY-1's ceiling for a hint, with a little slack over "about 300". */
24
+ const INFO_HINT_MAX_CHARS = 320;
22
25
  export default function InfoHintImpl({ children, title, align = 'left', className, label = 'More info', initialOpen = false, initialFocus = false, }) {
23
26
  const [open, setOpen] = useState(initialOpen);
24
27
  const hasHover = useHasHover();
@@ -59,12 +62,25 @@ export default function InfoHintImpl({ children, title, align = 'left', classNam
59
62
  if (initialFocus)
60
63
  refs.domReference.current?.focus();
61
64
  }, []);
65
+ // CPY-1: a hint holds a definition or a rule — about 300 characters. Past that it is a
66
+ // procedure, and its home is a page's `guide` or a `GuideRoute`, not a bubble over the canvas.
67
+ // Measured when the panel attaches: `FloatingPortal` mounts its root a tick after `open`.
68
+ const measurePanel = (el) => {
69
+ const length = el?.textContent?.length ?? 0;
70
+ if (length > INFO_HINT_MAX_CHARS) {
71
+ devWarnOnce('InfoHint:too-long', `cursedbelt: an <InfoHint> holds ${length} characters; it is for a definition of about ${INFO_HINT_MAX_CHARS} (CPY-2). ` +
72
+ "Move a longer text to PageHeader's `guide` or a GuideRoute.");
73
+ }
74
+ };
62
75
  return (_jsxs(_Fragment, { children: [_jsx("button", {
63
76
  // guardrails-ignore no-raw-action-button: presentational hover/click disclosure
64
77
  // trigger for the floating help panel — no destructive/mutating intent, and the
65
78
  // floating-ui ref/interaction wiring here doesn't fit the Button primitive.
66
79
  type: 'button', ref: refs.setReference, "aria-label": label, className: cn(INFO_HINT_TRIGGER, className), ...getReferenceProps(), children: _jsx(Info, { className: 'size-4', "aria-hidden": true }) }), open ? (_jsx(FloatingPortal, { children: _jsxs("div", {
67
80
  // guardrails-ignore no-hand-rolled-surface: the hint's floating-ui bubble — a tooltip-class overlay with its own z-index and shadow, not a card
68
- ref: refs.setFloating, "data-cb-prose": '', style: floatingStyles, ...getFloatingProps(), className: 'z-50 max-w-xs rounded-md border border-border bg-popover px-3 py-2 text-xs text-popover-foreground shadow-[var(--shadow-overlay)]', children: [title ? _jsx("p", { className: 'mb-1 font-semibold', children: title }) : null, children] }) })) : null] }));
81
+ ref: (el) => {
82
+ refs.setFloating(el);
83
+ measurePanel(el);
84
+ }, "data-cb-prose": '', style: floatingStyles, ...getFloatingProps(), className: 'z-50 max-w-xs rounded-md border border-border bg-popover px-3 py-2 text-xs text-popover-foreground shadow-[var(--shadow-overlay)]', children: [title ? _jsx("p", { className: 'mb-1 font-semibold', children: title }) : null, children] }) })) : null] }));
69
85
  }
70
86
  //# sourceMappingURL=InfoHintImpl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InfoHintImpl.js","sourceRoot":"","sources":["../../../src/react/components/InfoHintImpl.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"InfoHintImpl.js","sourceRoot":"","sources":["../../../src/react/components/InfoHintImpl.tsx"],"names":[],"mappings":"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"}
@@ -99,6 +99,6 @@ export function InlineEditableText({ value, onChange, canEdit = true, multiline
99
99
  // measuring gate (and any tool that reasons about layout) still sees 24px.
100
100
  // `DESIGN.md` §5's footprint is the floor and UX_STANDARDS §0 records that it
101
101
  // wins over the band — so the box grows too, and the band stays as the extra.
102
- TAP_TARGET_HEIGHT, 'pointer-coarse:before:absolute pointer-coarse:before:top-[-10px] pointer-coarse:before:bottom-[-10px] pointer-coarse:before:left-[-4px] pointer-coarse:before:right-[-4px] pointer-coarse:before:content-[""]', wrap ? 'whitespace-pre-wrap break-words' : 'block w-full truncate', !value && 'italic text-muted-foreground', className), children: value || placeholder }) }));
102
+ TAP_TARGET_HEIGHT, 'pointer-coarse:before:absolute pointer-coarse:before:top-[calc(var(--hit-slop-y)*-1)] pointer-coarse:before:bottom-[calc(var(--hit-slop-y)*-1)] pointer-coarse:before:-left-1 pointer-coarse:before:-right-1 pointer-coarse:before:content-[""]', wrap ? 'whitespace-pre-wrap break-words' : 'block w-full truncate', !value && 'italic text-muted-foreground', className), children: value || placeholder }) }));
103
103
  }
104
104
  //# sourceMappingURL=InlineEditableText.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InlineEditableText.js","sourceRoot":"","sources":["../../../src/react/components/InlineEditableText.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"InlineEditableText.js","sourceRoot":"","sources":["../../../src/react/components/InlineEditableText.tsx"],"names":[],"mappings":"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"}
@@ -46,7 +46,7 @@ export function IsolatedFrame({ mode, src, srcDoc, title, error, onClose, sandbo
46
46
  // The bezel: a rounded, overflow-hidden device frame at a fixed logical
47
47
  // size, so the framed page sees a true phone viewport (its own media
48
48
  // queries fire) rather than a squeezed desktop column.
49
- className: 'shrink-0 overflow-hidden rounded-[2.5rem] border-8 border-border-strong bg-border-strong shadow-overlay', style: { width: MOBILE_WIDTH, height: MOBILE_HEIGHT }, children: frame }) }) }));
49
+ className: 'shrink-0 overflow-hidden rounded-[var(--radius-device)] border-8 border-border-strong bg-border-strong shadow-overlay', style: { width: MOBILE_WIDTH, height: MOBILE_HEIGHT }, children: frame }) }) }));
50
50
  }
51
51
  // desktop
52
52
  return _jsx("div", { className: cn('h-full w-full', className), children: frame });
@@ -1 +1 @@
1
- {"version":3,"file":"IsolatedFrame.js","sourceRoot":"","sources":["../../../src/react/components/IsolatedFrame.tsx"],"names":[],"mappings":";AAAA,OAAO,EAA4B,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAkDzC,+EAA+E;AAC/E,MAAM,YAAY,GAAG,GAAG,CAAC;AACzB,MAAM,aAAa,GAAG,GAAG,CAAC;AAE1B;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,IAAI,EACJ,GAAG,EACH,MAAM,EACN,KAAK,EACL,KAAK,EACL,OAAO,EACP,OAAO,EACP,SAAS,EACT,QAAQ,EACR,WAAW,GACQ;IACnB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,GAAG,IAAI,MAAM,CAAC;IAEhC,6EAA6E;IAC7E,6EAA6E;IAC7E,4EAA4E;IAC5E,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAqB,SAAS,CAAC,CAAC;IAChF,MAAM,MAAM,GAAG,UAAU,IAAI,YAAY,KAAK,SAAS,CAAC;IAExD,MAAM,SAAS,GAAG,UAAU;QAC1B,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,KAAK,KAAK,SAAS;YACnB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ;gBACzB,CAAC,CAAC,KAAC,UAAU,IAAC,KAAK,EAAE,KAAK,EAAE,IAAI,SAAG;gBACnC,CAAC,CAAC,KAAK,CAAC;IAEd,MAAM,KAAK,GAAG,CACZ,eAAK,SAAS,EAAC,sCAAsC,aAClD,SAAS;gBACR,CAAC,UAAU,CAAC,CAAC,CAAC,CACZ,iBACE,GAAG,EAAE,QAAQ,EACb,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAChC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,GAAG,EAAE;wBACX,eAAe,CAAC,SAAS,CAAC,CAAC;wBAC3B,WAAW,EAAE,EAAE,CAAC;oBAClB,CAAC,EACD,SAAS,EAAC,sCAAsC,GAChD,CACH,CAAC,CAAC,CAAC,CACF,KAAC,UAAU,IAAC,KAAK,EAAC,oBAAoB,EAAC,IAAI,SAAG,CAC/C,CAAC,EAGH,UAAU,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,IAAI,CACtC,eAAK,SAAS,EAAC,wDAAwD,kCACrE,KAAC,QAAQ,IAAC,SAAS,EAAC,WAAW,GAAG,EAClC,KAAC,QAAQ,IAAC,SAAS,EAAC,WAAW,GAAG,EAClC,KAAC,QAAQ,IAAC,SAAS,EAAC,aAAa,GAAG,EACpC,KAAC,QAAQ,IAAC,SAAS,EAAC,WAAW,GAAG,IAC9B,CACP,IACG,CACP,CAAC;IAEF,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,OAAO,CACL,KAAC,KAAK,IAAC,IAAI,QAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAC,MAAM,EAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,YACjF,cAAK,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,SAAS,CAAC,YAAG,KAAK,GAAO,GACxD,CACT,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,CACL,KAAC,UAAU,IAAC,SAAS,EAAE,EAAE,CAAC,eAAe,EAAE,SAAS,CAAC,YACnD,cAAK,SAAS,EAAC,uDAAuD,YACpE;oBACE,wEAAwE;oBACxE,qEAAqE;oBACrE,uDAAuD;oBACvD,SAAS,EAAC,yGAAyG,EACnH,KAAK,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,YAEpD,KAAK,GACF,GACF,GACK,CACd,CAAC;IACJ,CAAC;IAED,UAAU;IACV,OAAO,cAAK,SAAS,EAAE,EAAE,CAAC,eAAe,EAAE,SAAS,CAAC,YAAG,KAAK,GAAO,CAAC;AACvE,CAAC"}
1
+ {"version":3,"file":"IsolatedFrame.js","sourceRoot":"","sources":["../../../src/react/components/IsolatedFrame.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ListToolbar.d.ts","sourceRoot":"","sources":["../../../src/react/components/ListToolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGxE,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,sFAAsF;IACtF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9B,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IACrC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IACzD,iEAAiE;IACjE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,kFAAkF;IAClF,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,wFAAwF;IACxF,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,mDAAmD;IACnD,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,KAAK,EACL,SAAgB,EAChB,YAAY,EACZ,UAAkB,EAClB,aAAa,EACb,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,SAAS,GACV,EAAE,gBAAgB,+BAuClB"}
1
+ {"version":3,"file":"ListToolbar.d.ts","sourceRoot":"","sources":["../../../src/react/components/ListToolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGxE,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,sFAAsF;IACtF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9B,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IACrC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IACzD,iEAAiE;IACjE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,kFAAkF;IAClF,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,wFAAwF;IACxF,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,mDAAmD;IACnD,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,KAAK,EACL,SAAgB,EAChB,YAAY,EACZ,UAAkB,EAClB,aAAa,EACb,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,SAAS,GACV,EAAE,gBAAgB,+BA0ClB"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { cn } from '../lib/cn.js';
3
3
  import { ChipFilterStrip } from './ChipFilterStrip.js';
4
- import { Input } from './Input.js';
4
+ import { SearchInput } from './SearchInput.js';
5
5
  /**
6
6
  * The toolbar above a list: ONE line, filters left, view controls and actions right.
7
7
  *
@@ -57,7 +57,7 @@ export function ListToolbar({ search, onSearchChange, searchPlaceholder, searchL
57
57
  const showSearch = search !== undefined && onSearchChange !== undefined;
58
58
  const showChips = chips !== undefined && chips.length > 0 && onChipChange !== undefined;
59
59
  const showRight = Boolean(sort) || Boolean(view) || Boolean(actions);
60
- return (_jsxs("div", { className: cn('flex flex-wrap items-center gap-x-3 gap-y-2', className), children: [showSearch ? (_jsx(Input, { type: 'search', value: search, onChange: (e) => onSearchChange(e.currentTarget.value), placeholder: searchPlaceholder, "aria-label": searchLabel ?? searchPlaceholder ?? 'Search',
60
+ return (_jsxs("div", { className: cn('flex flex-wrap items-center gap-x-3 gap-y-2', className), children: [showSearch ? (_jsx(SearchInput, { syntax: false, value: search, onChange: onSearchChange, placeholder: searchPlaceholder ?? 'Search', "aria-label": searchLabel ?? searchPlaceholder ?? 'Search',
61
61
  // Full width on a phone (the chips then wrap beneath it, still tappable);
62
62
  // a fixed, modest column from `sm:` so the chips share the line rather than
63
63
  // being pushed off it by a box that grows with the container.
@@ -1 +1 @@
1
- {"version":3,"file":"ListToolbar.js","sourceRoot":"","sources":["../../../src/react/components/ListToolbar.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,eAAe,EAAmB,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AA0CnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,MAAM,EACN,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,KAAK,EACL,SAAS,GAAG,IAAI,EAChB,YAAY,EACZ,UAAU,GAAG,KAAK,EAClB,aAAa,EACb,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,SAAS,GACQ;IACjB,MAAM,UAAU,GAAG,MAAM,KAAK,SAAS,IAAI,cAAc,KAAK,SAAS,CAAC;IACxE,MAAM,SAAS,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,KAAK,SAAS,CAAC;IACxF,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAErE,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,6CAA6C,EAAE,SAAS,CAAC,aACzE,UAAU,CAAC,CAAC,CAAC,CACZ,KAAC,KAAK,IACJ,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,EACtD,WAAW,EAAE,iBAAiB,gBAClB,WAAW,IAAI,iBAAiB,IAAI,QAAQ;gBACxD,0EAA0E;gBAC1E,4EAA4E;gBAC5E,8DAA8D;gBAC9D,SAAS,EAAC,yBAAyB,GACnC,CACH,CAAC,CAAC,CAAC,IAAI,EACP,SAAS,CAAC,CAAC,CAAC,CACX,KAAC,eAAe,IACd,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,EACnB,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,UAAU,KACb,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,GACpE,CACH,CAAC,CAAC,CAAC,IAAI,EACP,OAAO,EACP,SAAS,CAAC,CAAC,CAAC,CACX,gBAAM,SAAS,EAAC,2CAA2C,aACxD,IAAI,EACJ,IAAI,EACJ,OAAO,IACH,CACR,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"ListToolbar.js","sourceRoot":"","sources":["../../../src/react/components/ListToolbar.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,eAAe,EAAmB,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AA0C/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,MAAM,EACN,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,KAAK,EACL,SAAS,GAAG,IAAI,EAChB,YAAY,EACZ,UAAU,GAAG,KAAK,EAClB,aAAa,EACb,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,SAAS,GACQ;IACjB,MAAM,UAAU,GAAG,MAAM,KAAK,SAAS,IAAI,cAAc,KAAK,SAAS,CAAC;IACxE,MAAM,SAAS,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,KAAK,SAAS,CAAC;IACxF,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAErE,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,6CAA6C,EAAE,SAAS,CAAC,aACzE,UAAU,CAAC,CAAC,CAAC,CAIZ,KAAC,WAAW,IACV,MAAM,EAAE,KAAK,EACb,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,cAAc,EACxB,WAAW,EAAE,iBAAiB,IAAI,QAAQ,gBAC9B,WAAW,IAAI,iBAAiB,IAAI,QAAQ;gBACxD,0EAA0E;gBAC1E,4EAA4E;gBAC5E,8DAA8D;gBAC9D,SAAS,EAAC,yBAAyB,GACnC,CACH,CAAC,CAAC,CAAC,IAAI,EACP,SAAS,CAAC,CAAC,CAAC,CACX,KAAC,eAAe,IACd,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,EACnB,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,UAAU,KACb,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,GACpE,CACH,CAAC,CAAC,CAAC,IAAI,EACP,OAAO,EACP,SAAS,CAAC,CAAC,CAAC,CACX,gBAAM,SAAS,EAAC,2CAA2C,aACxD,IAAI,EACJ,IAAI,EACJ,OAAO,IACH,CACR,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { type ScrollAreaHeight } from './ScrollArea.js';
1
2
  /**
2
3
  * A log output pane — monospace, virtualization-free, and honest about what it
3
4
  * is showing.
@@ -45,8 +46,31 @@ export interface LogViewerProps {
45
46
  loading?: boolean;
46
47
  /** Start with newest-at-the-bottom following. Default true. */
47
48
  follow?: boolean;
48
- /** Visible height in rows. Default 24. */
49
+ /** Visible height in rows. Default 24. Ignored when `height` is set. */
49
50
  rows?: number;
51
+ /**
52
+ * Bound the pane to a token height (DAT-13, LAY-8) — `sm` 12rem · `md` 20rem · `lg` 28rem,
53
+ * never more than 60dvh on a phone. A live log is a terminal viewport of a fixed size,
54
+ * not a box that grows with its output and pushes the page down. Prefer this to `rows`.
55
+ */
56
+ height?: ScrollAreaHeight;
57
+ /**
58
+ * The terminal's header strip (DAT-13): the stream's name ("Batch B2026-10-01"), its age
59
+ * ("18m in flight") and a badge (a `StatusPill`). Any of them draws the strip, attached to
60
+ * the top of the pane, so the reader knows WHICH output this is before reading a line.
61
+ */
62
+ stream?: React.ReactNode;
63
+ age?: React.ReactNode;
64
+ badge?: React.ReactNode;
65
+ /**
66
+ * "Open full log →" in the header strip — the way out of a bounded tail into the whole
67
+ * transcript. An `href` renders a link; `onClick` a button.
68
+ */
69
+ openFullLog?: {
70
+ href?: string;
71
+ onClick?: () => void;
72
+ label?: string;
73
+ };
50
74
  /** Hide the filter box for a short, fixed output (`df -h`). */
51
75
  filterable?: boolean;
52
76
  /**
@@ -67,5 +91,5 @@ export interface LogViewerProps {
67
91
  export declare function severityOf(line: string): LogSeverity;
68
92
  /** Split, dropping a single trailing newline so a log does not end in a blank row. */
69
93
  export declare function toLines(text: string): string[];
70
- export declare function LogViewer({ text, title, command, truncated, exitCode, stderr, durationMs, loading, follow: followDefault, rows, filterable, onSelectLine, selectedLine, className, }: LogViewerProps): import("react").JSX.Element;
94
+ export declare function LogViewer({ text, title, command, truncated, exitCode, stderr, durationMs, loading, follow: followDefault, rows, height, stream, age, badge, openFullLog, filterable, onSelectLine, selectedLine, className, }: LogViewerProps): import("react").JSX.Element;
71
95
  //# sourceMappingURL=LogViewer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"LogViewer.d.ts","sourceRoot":"","sources":["../../../src/react/components/LogViewer.tsx"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE9D,MAAM,WAAW,cAAc;IAC7B,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0CAA0C;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAYD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAKpD;AAUD,sFAAsF;AACtF,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAI9C;AAED,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,KAAK,EACL,OAAO,EACP,SAAiB,EACjB,QAAe,EACf,MAAW,EACX,UAAU,EACV,OAAe,EACf,MAAM,EAAE,aAAoB,EAC5B,IAAS,EACT,UAAiB,EACjB,YAAY,EACZ,YAAmB,EACnB,SAAS,GACV,EAAE,cAAc,+BAuLhB"}
1
+ {"version":3,"file":"LogViewer.d.ts","sourceRoot":"","sources":["../../../src/react/components/LogViewer.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAc,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEpE;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE9D,MAAM,WAAW,cAAc;IAC7B,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B;;;;OAIG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,GAAG,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACtB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB;;;OAGG;IACH,WAAW,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,+DAA+D;IAC/D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrD,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAYD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAKpD;AAUD,sFAAsF;AACtF,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAI9C;AAED,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,KAAK,EACL,OAAO,EACP,SAAiB,EACjB,QAAe,EACf,MAAW,EACX,UAAU,EACV,OAAe,EACf,MAAM,EAAE,aAAoB,EAC5B,IAAS,EACT,MAAM,EACN,MAAM,EACN,GAAG,EACH,KAAK,EACL,WAAW,EACX,UAAiB,EACjB,YAAY,EACZ,YAAmB,EACnB,SAAS,GACV,EAAE,cAAc,+BAmQhB"}
@@ -35,7 +35,7 @@ export function toLines(text) {
35
35
  const trimmed = text.endsWith('\n') ? text.slice(0, -1) : text;
36
36
  return trimmed.split('\n');
37
37
  }
38
- export function LogViewer({ text, title, command, truncated = false, exitCode = null, stderr = '', durationMs, loading = false, follow: followDefault = true, rows = 24, filterable = true, onSelectLine, selectedLine = null, className, }) {
38
+ export function LogViewer({ text, title, command, truncated = false, exitCode = null, stderr = '', durationMs, loading = false, follow: followDefault = true, rows = 24, height, stream, age, badge, openFullLog, filterable = true, onSelectLine, selectedLine = null, className, }) {
39
39
  const [filter, setFilter] = useState('');
40
40
  const [following, setFollowing] = useState(followDefault);
41
41
  const paneRef = useRef(null);
@@ -74,31 +74,46 @@ export function LogViewer({ text, title, command, truncated = false, exitCode =
74
74
  setFollowing(followDefault);
75
75
  }, [followDefault]);
76
76
  const hidden = lines.length - visible.length;
77
- return (_jsxs("div", { className: cn('flex flex-col gap-2', className), children: [_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [title && _jsx("span", { className: "cb-meta-label", children: title }), exitCode !== null && exitCode !== 0 && (_jsx(Badge, { tone: "error", children: `exit ${exitCode}` })), typeof durationMs === 'number' && (_jsx("span", { className: "text-xs tabular-nums text-muted-foreground", children: `${Math.round(durationMs)} ms` })), _jsx("span", { className: "flex-1" }), filterable && (_jsx(Input, { value: filter, onChange: (e) => setFilter(e.target.value), placeholder: "Filter lines\u2026", "aria-label": "Filter log lines", className: "w-48" })), _jsx(Button, { variant: following ? 'primary' : 'secondary', size: "sm", onClick: () => setFollowing((f) => !f), "aria-pressed": following, tooltip: following
78
- ? 'Following the tail — scroll up to stop'
79
- : 'Jump to the newest line and follow it', children: "Follow" })] }), command && (_jsx(ScrollArea, { axis: "x", space: "none", safeArea: false, className: "rounded-md bg-muted px-3 py-2", children: _jsx("code", { className: "block whitespace-pre font-mono text-xs text-muted-foreground", children: command }) })), truncated && (_jsx("p", { className: "text-xs text-warning", children: "Output was truncated \u2014 this is not the whole log. Narrow the range or read it on the box." })), _jsx("div", { className: "flex min-h-0 flex-col", style: { maxHeight: `${rows * 1.5}rem` }, children: _jsx(ScrollArea, { scrollRef: paneRef, onScroll: onScroll,
80
- // `both`: a log line is arbitrarily long and must scroll inside its own
81
- // box, never widen the page. `space="none"` + no safe-area padding —
82
- // the sticky-follow reads "am I at the bottom", and a comfort gap below
83
- // the last line is exactly the thing that makes that read wrong.
84
- axis: "both", space: "none", safeArea: false, className: "rounded-md border border-border bg-background font-mono text-xs leading-relaxed", role: "log", "aria-live": "off", "aria-busy": loading || undefined, children: visible.length === 0 ? (_jsx("p", { className: "p-6 text-center text-sm text-muted-foreground", children: loading
85
- ? 'Reading…'
86
- : lines.length === 0
87
- ? 'No output.'
88
- : `No line matches “${filter}”.` })) : (_jsx("ol", { className: "min-w-full", children: visible.map((line, i) => (_jsxs("li", { className: cn('flex gap-3 whitespace-pre px-3 hover:bg-muted/50', SEVERITY_CLASS[severityOf(line)], onSelectLine && 'cursor-pointer', selectedLine !== null && line === selectedLine && 'bg-accent/40'), ...(onSelectLine
89
- ? {
90
- role: 'button',
91
- tabIndex: 0,
92
- 'aria-pressed': line === selectedLine,
93
- onClick: () => onSelectLine(line, i),
94
- onKeyDown: (e) => {
95
- if (e.key === 'Enter' || e.key === ' ') {
96
- e.preventDefault();
97
- onSelectLine(line, i);
98
- }
99
- },
100
- }
101
- : {}), children: [_jsx("span", { className: "select-none tabular-nums text-muted-foreground/60", children: String(i + 1).padStart(4, ' ') }), _jsx("span", { children: line || ' ' })] }, `${i}-${line.slice(0, 24)}`))) })) }) }), _jsx("p", { className: "text-xs tabular-nums text-muted-foreground", children: hidden > 0
77
+ const hasStrip = stream != null || age != null || badge != null || openFullLog != null;
78
+ const jumpToLive = useCallback(() => {
79
+ const el = paneRef.current;
80
+ if (el)
81
+ el.scrollTop = el.scrollHeight;
82
+ setFollowing(true);
83
+ }, []);
84
+ const followButton = (_jsx(Button, { variant: following ? 'primary' : 'secondary', size: "sm", onClick: () => setFollowing((f) => !f), "aria-pressed": following, tooltip: following
85
+ ? 'Following the tail — scroll up to stop'
86
+ : 'Jump to the newest line and follow it', children: "Follow" }));
87
+ // With the strip drawn, Follow lives in it beside "Open full log" — the toolbar row above the
88
+ // pane is then only for what the strip does not carry, and is not drawn empty.
89
+ const toolbarRow = !hasStrip || title != null || (exitCode !== null && exitCode !== 0) || typeof durationMs === 'number' || filterable;
90
+ return (_jsxs("div", { className: cn('flex flex-col gap-2', className), children: [toolbarRow && (_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [title && _jsx("span", { className: "cb-meta-label", children: title }), exitCode !== null && exitCode !== 0 && (_jsx(Badge, { tone: "error", children: `exit ${exitCode}` })), typeof durationMs === 'number' && (_jsx("span", { className: "text-xs tabular-nums text-muted-foreground", children: `${Math.round(durationMs)} ms` })), _jsx("span", { className: "flex-1" }), filterable && (_jsx(Input, { value: filter, onChange: (e) => setFilter(e.target.value), placeholder: "Filter lines\u2026", "aria-label": "Filter log lines", className: "w-48" })), !hasStrip && followButton] })), command && (_jsx(ScrollArea, { axis: "x", space: "none", safeArea: false, className: "rounded-md bg-muted px-3 py-2", children: _jsx("code", { className: "block whitespace-pre font-mono text-xs text-muted-foreground", children: command }) })), truncated && (_jsx("p", { className: "text-xs text-warning", children: "Output was truncated \u2014 this is not the whole log. Narrow the range or read it on the box." })), _jsxs("div", { className: "relative flex min-h-0 flex-col", style: height ? undefined : { maxHeight: `${rows * 1.5}rem` }, "data-cb-log-following": following ? 'true' : 'false', children: [hasStrip && (_jsxs("div", { "data-cb-log-header": "",
91
+ // Wraps as two groups — what the stream is, then its controls — so a phone gets two
92
+ // clean lines instead of a name squeezed to "B…" and a link broken over three.
93
+ className: "flex min-h-9 min-w-0 flex-wrap items-center gap-x-2 gap-y-1 rounded-t-md border border-b-0 border-border bg-muted px-3 py-1 text-xs", children: [_jsxs("span", { className: "flex min-w-0 max-w-full items-center gap-2", children: [stream != null && _jsx("span", { className: "min-w-0 truncate font-mono font-medium text-foreground", children: stream }), age != null && _jsx("span", { className: "shrink-0 whitespace-nowrap tabular-nums text-muted-foreground", children: age }), badge != null && _jsx("span", { className: "shrink-0", children: badge })] }), _jsxs("span", { className: "ml-auto flex shrink-0 items-center gap-1 whitespace-nowrap", children: [followButton, openFullLog &&
94
+ (openFullLog.href ? (_jsx(Button, { asChild: true, variant: "ghost", size: "sm", tooltip: "Open the whole log", tooltipMobile: "off", children: _jsx("a", { href: openFullLog.href, children: openFullLog.label ?? 'Open full log →' }) })) : (_jsx(Button, { variant: "ghost", size: "sm", tooltip: "Open the whole log", tooltipMobile: "off", onClick: openFullLog.onClick, children: openFullLog.label ?? 'Open full log →' })))] })] })), _jsx(ScrollArea, { scrollRef: paneRef, onScroll: onScroll, height: height,
95
+ // `both`: a log line is arbitrarily long and must scroll inside its own
96
+ // box, never widen the page. `space="none"` + no safe-area padding —
97
+ // the sticky-follow reads "am I at the bottom", and a comfort gap below
98
+ // the last line is exactly the thing that makes that read wrong.
99
+ axis: "both", space: "none", safeArea: false, className: cn('border border-border bg-background font-mono text-xs leading-relaxed', hasStrip ? 'rounded-b-md' : 'rounded-md'), role: "log", "aria-live": "off", "aria-busy": loading || undefined, children: visible.length === 0 ? (_jsx("p", { className: "p-6 text-center text-sm text-muted-foreground", children: loading
100
+ ? 'Reading…'
101
+ : lines.length === 0
102
+ ? 'No output.'
103
+ : `No line matches “${filter}”.` })) : (_jsx("ol", { className: "min-w-full", children: visible.map((line, i) => (_jsxs("li", { className: cn('flex gap-3 whitespace-pre px-3 hover:bg-muted/50', SEVERITY_CLASS[severityOf(line)], onSelectLine && 'cursor-pointer', selectedLine !== null && line === selectedLine && 'bg-accent/40'), ...(onSelectLine
104
+ ? {
105
+ role: 'button',
106
+ tabIndex: 0,
107
+ 'aria-pressed': line === selectedLine,
108
+ onClick: () => onSelectLine(line, i),
109
+ onKeyDown: (e) => {
110
+ if (e.key === 'Enter' || e.key === ' ') {
111
+ e.preventDefault();
112
+ onSelectLine(line, i);
113
+ }
114
+ },
115
+ }
116
+ : {}), children: [_jsx("span", { className: "select-none tabular-nums text-muted-foreground/60", children: String(i + 1).padStart(4, ' ') }), _jsx("span", { children: line || ' ' })] }, `${i}-${line.slice(0, 24)}`))) })) }), followDefault && !following && visible.length > 0 && (_jsx("div", { className: "pointer-events-none absolute inset-x-0 bottom-3 flex justify-center", children: _jsx(Button, { variant: "secondary", size: "sm", className: "pointer-events-auto rounded-full shadow-md", tooltip: "Scroll to the newest line and follow it", tooltipMobile: "off", onClick: jumpToLive, "data-cb-log-jump": "", children: "Jump to live \u2193" }) }))] }), _jsx("p", { className: "text-xs tabular-nums text-muted-foreground", children: hidden > 0
102
117
  ? `${visible.length} of ${lines.length} lines (${hidden} filtered out)`
103
118
  : `${lines.length} lines` }), stderr.trim() && (_jsxs("details", { className: "rounded-md border border-border", children: [_jsx("summary", { className: "cursor-pointer px-3 py-2 text-xs text-muted-foreground", children: "stderr" }), _jsx(ScrollArea, { axis: "x", space: "none", safeArea: false, className: "px-3 pb-3", children: _jsx("pre", { className: "font-mono text-xs text-destructive", children: stderr }) })] }))] }));
104
119
  }
@@ -1 +1 @@
1
- {"version":3,"file":"LogViewer.js","sourceRoot":"","sources":["../../../src/react/components/LogViewer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LogViewer.js","sourceRoot":"","sources":["../../../src/react/components/LogViewer.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,10 @@
1
1
  import type { ReactNode } from 'react';
2
2
  export { useDialogOpen } from '../lib/openDialogs.js';
3
- export type ModalSize = 'sm' | 'md' | 'lg' | 'xl' | 'full';
3
+ /**
4
+ * OVL-1's three widths plus `full`. `xl` is the pre-2465 name for a wide modal, kept so the
5
+ * apps that pass it still compile; it renders `lg` (the old `xl` was 896px, `lg` is 900px).
6
+ */
7
+ export type ModalSize = 'sm' | 'md' | 'lg' | 'full' | /** @deprecated use `lg` */ 'xl';
4
8
  export interface ModalProps {
5
9
  open: boolean;
6
10
  onClose: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../../src/react/components/Modal.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAUvC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;AAkC3D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,mFAAmF;IACnF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6FAA6F;IAC7F,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,gFAAgF;IAChF,UAAU,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CAAC,EACpB,IAAI,EACJ,OAAO,EACP,IAAW,EACX,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,OAAO,EACP,OAAO,EACP,MAAM,EACN,UAAiB,EACjB,aAAoB,EACpB,KAAK,EACL,UAAiB,EACjB,SAAS,GACV,EAAE,UAAU,+BAgJZ"}
1
+ {"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../../src/react/components/Modal.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAWvC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,2BAA2B,CAAC,IAAI,CAAC;AA4CvF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,mFAAmF;IACnF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,6FAA6F;IAC7F,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,gFAAgF;IAChF,UAAU,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,KAAK,CAAC,EACpB,IAAI,EACJ,OAAO,EACP,IAAW,EACX,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,OAAO,EACP,OAAO,EACP,MAAM,EACN,UAAiB,EACjB,aAAoB,EACpB,KAAK,EACL,UAAiB,EACjB,SAAS,GACV,EAAE,UAAU,+BAgJZ"}
@@ -4,23 +4,33 @@ import { useDiscardGuard } from '../hooks/useDiscardGuard.js';
4
4
  import { useMediaQuery } from '../hooks/useMediaQuery.js';
5
5
  import { useSwipeToDismiss } from '../hooks/useSwipeToDismiss.js';
6
6
  import { cn } from '../lib/cn.js';
7
+ import { devWarnOnce } from '../lib/devWarn.js';
7
8
  import { FooterSlot } from './ActionBar.js';
8
9
  import { Dialog, DialogContent, DialogTitle, focusPanelOnOpen } from './dialog.js';
9
10
  import { IconButton } from './IconButton.js';
10
11
  import { ScrollArea } from './ScrollArea.js';
11
12
  export { useDialogOpen } from '../lib/openDialogs.js';
12
13
  // ONE sizing scale replaces the ad-hoc `max-w-xl`/`max-w-2xl`/`max-h-[80vh]` classNames
13
- // scattered across the apps' modals. `full` is a near-fullscreen sheet with a 1rem margin
14
- // on every side; `cn`'s twMerge dedupes its `max-h` against the base below (last wins).
14
+ // scattered across the apps' modals. OVL-1: three widths, each a theme.css token —
15
+ // `sm` 400px (a confirmation, one field), `md` 600px (an ordinary form), `lg` 900px (heavy
16
+ // entry, a wizard, a form beside its preview). `full` is a near-fullscreen sheet with a 1rem
17
+ // margin on every side; `cn`'s twMerge dedupes its `max-h` against the base below (last wins).
15
18
  // Every size is `sm:`-scoped: under `sm` a modal is a bottom sheet the width of the screen,
16
19
  // whatever size it asked for on a desktop — see `SHEET` below.
17
20
  const SIZE = {
18
- sm: 'sm:max-w-sm',
19
- md: 'sm:max-w-lg',
20
- lg: 'sm:max-w-2xl',
21
- xl: 'sm:max-w-4xl',
21
+ sm: 'sm:max-w-[var(--modal-w-sm)]',
22
+ md: 'sm:max-w-[var(--modal-w-md)]',
23
+ lg: 'sm:max-w-[var(--modal-w-lg)]',
22
24
  full: 'sm:max-w-[calc(100vw-2rem)] sm:max-h-[calc(100dvh-2rem)] max-sm:h-dvh max-sm:max-h-dvh max-sm:rounded-none',
23
25
  };
26
+ /** The width a size renders — `xl` is `lg` under its old name. */
27
+ function sizeClass(size) {
28
+ if (size === 'xl') {
29
+ devWarnOnce('Modal:size-xl', "cursedbelt: <Modal size='xl'> is `lg` now (OVL-1 has three widths: sm 400, md 600, lg 900). Pass size='lg'.");
30
+ return SIZE.lg;
31
+ }
32
+ return SIZE[size];
33
+ }
24
34
  /** Below `sm` (640px), where a centred card becomes a bottom sheet. */
25
35
  const PHONE_QUERY = '(max-width: 639px)';
26
36
  /**
@@ -32,7 +42,7 @@ const PHONE_QUERY = '(max-width: 639px)';
32
42
  * puts the footer's actions where the thumb already is, and comes down with the same swipe
33
43
  * every native sheet does.
34
44
  */
35
- const SHEET = 'max-sm:inset-x-0 max-sm:bottom-0 max-sm:w-full max-sm:max-w-none max-sm:max-h-[92dvh] max-sm:rounded-t-2xl max-sm:rounded-b-none max-sm:border-x-0 max-sm:border-b-0 max-sm:data-[state=open]:slide-in-from-bottom max-sm:data-[state=closed]:slide-out-to-bottom';
45
+ const SHEET = 'max-sm:inset-x-0 max-sm:bottom-0 max-sm:w-full max-sm:max-w-none max-sm:max-h-[var(--sheet-h-phone)] max-sm:rounded-t-2xl max-sm:rounded-b-none max-sm:border-x-0 max-sm:border-b-0 max-sm:data-[state=open]:slide-in-from-bottom max-sm:data-[state=closed]:slide-out-to-bottom';
36
46
  /** From `sm` up: the centred card, capped to the viewport, zooming in. */
37
47
  const CARD = 'sm:top-1/2 sm:left-1/2 sm:w-[calc(100vw-2rem)] sm:-translate-x-1/2 sm:-translate-y-1/2 sm:rounded-xl sm:max-h-[min(90dvh,calc(100dvh-2rem))] sm:data-[state=open]:zoom-in-95 sm:data-[state=closed]:zoom-out-95';
38
48
  /**
@@ -68,7 +78,7 @@ export function Modal({ open, onClose, size = 'md', title, subtitle, children, f
68
78
  'fixed flex flex-col gap-0 overflow-hidden',
69
79
  // The body scrolls with `py-4`: a form kit preview pinned inside it sits flush with
70
80
  // the body's top edge rather than a padding's height below it (formKit.css).
71
- '[--cbfk-sticky-top:-1rem]', 'border border-border bg-popover text-popover-foreground shadow-overlay', 'data-[state=open]:animate-in data-[state=open]:fade-in-0', 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0', SHEET, CARD, SIZE[size], className),
81
+ '[--cbfk-sticky-top:-1rem]', 'border border-border bg-popover text-popover-foreground shadow-overlay', 'data-[state=open]:animate-in data-[state=open]:fade-in-0', 'data-[state=closed]:animate-out data-[state=closed]:fade-out-0', SHEET, CARD, sizeClass(size), className),
72
82
  // Intercept Radix's default close so a dirty form gets the discard prompt; while
73
83
  // the prompt is up, Escape cancels it (keep editing) instead of re-prompting.
74
84
  // backdropClose={false} turns the backdrop into a no-op — critical dialogs that