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
@@ -35,7 +35,7 @@ export function StatStrip({ items, orientation = 'horizontal', flat = false, cla
35
35
  const fade = useScrollEdgeFade();
36
36
  const row = (_jsx("div", { className: cn(horizontal ? 'flex divide-x divide-border' : 'flex flex-col divide-y divide-border', className), children: items.map((item) => {
37
37
  const interactive = item.onClick !== undefined;
38
- const itemClass = cn('group/stat flex min-w-0 flex-col gap-0.5 text-left', horizontal ? 'min-w-[8.5rem] flex-1 shrink-0 px-3 py-2 first:pl-1 last:pr-1' : 'px-1 py-2.5', interactive &&
38
+ const itemClass = cn('group/stat flex min-w-0 flex-col gap-0.5 text-left', horizontal ? 'min-w-34 flex-1 shrink-0 px-3 py-2 first:pl-1 last:pr-1' : 'px-1 py-2.5', interactive &&
39
39
  'cursor-pointer rounded-sm transition-colors hover:bg-accent/10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring');
40
40
  const onKeyDown = interactive
41
41
  ? (e) => {
@@ -1 +1 @@
1
- {"version":3,"file":"StatStrip.js","sourceRoot":"","sources":["../../../src/react/components/StatStrip.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StatStrip.js","sourceRoot":"","sources":["../../../src/react/components/StatStrip.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { ReactNode } from 'react';
1
+ import { type ReactNode } from 'react';
2
2
  interface Progress {
3
3
  value: number;
4
4
  max: number;
@@ -11,6 +11,28 @@ interface Progress {
11
11
  * snippets in borders"). `neutral` renders a gray bar (an explicit "inert" reading,
12
12
  * distinct from omitting the prop, which renders no bar at all). */
13
13
  export type StatTileTone = 'success' | 'warning' | 'danger' | 'neutral';
14
+ /**
15
+ * A budget (DAT-9): a quota, a time window or money, drawn as the tile's big value with its
16
+ * meter DIRECTLY underneath and the window it covers at 12px. The color turns at the
17
+ * thresholds — warning, then critical — and the readout says in words what the color means
18
+ * ("60% used"), so the color is never the only signal.
19
+ */
20
+ export interface StatTileBudget {
21
+ /** Consumed, in the same unit as `max`. */
22
+ used: number;
23
+ max: number;
24
+ /** The window the budget covers — "Sep 30 21:01 → Oct 1 02:01". */
25
+ window?: ReactNode;
26
+ /** Fractions of `max` (0–1) where the color turns. Default 0.85 / 0.95, as `ThresholdMeter`. */
27
+ thresholds?: {
28
+ warning: number;
29
+ critical: number;
30
+ };
31
+ /** The words beside the percentage. Default `used`. */
32
+ verb?: string;
33
+ }
34
+ export type StatValueSize = 'sm' | 'md' | 'lg';
35
+ export declare const StatTileValueSizeProvider: import("react").Provider<StatValueSize | null>;
14
36
  export interface StatTileProps {
15
37
  label: string;
16
38
  value: ReactNode;
@@ -28,7 +50,9 @@ export interface StatTileProps {
28
50
  * status-word tiles ("Running" / "Executing" / "Off") must share ONE size — the
29
51
  * auto scale would render them at three different sizes purely by string length.
30
52
  */
31
- valueSize?: 'sm' | 'md' | 'lg';
53
+ valueSize?: StatValueSize;
54
+ /** Draw the tile as a budget — see {@link StatTileBudget}. Replaces `progress`. */
55
+ budget?: StatTileBudget;
32
56
  /**
33
57
  * Makes the WHOLE tile a click target — {@link StatTileGrid} reads this off its
34
58
  * child and turns that cell's card into the pressable surface (hover border
@@ -91,6 +115,9 @@ export interface StatTileProps {
91
115
  since?: ReactNode;
92
116
  };
93
117
  }
118
+ /** The size a value would pick ON ITS OWN — by length, so "Executing" never overflows a
119
+ * tile that "42" fits. {@link StatTileGrid} takes the smallest across its tiles. */
120
+ export declare function statValueSize(value: ReactNode): StatValueSize;
94
121
  /**
95
122
  * A compact dashboard stat: label + big value (auto-sized) + optional sub / spark / progress.
96
123
  *
@@ -99,6 +126,6 @@ export interface StatTileProps {
99
126
  * `h-full`: a percent height inside an auto-height `flex-wrap` row is circular, and
100
127
  * wrapped tiles end up painting over whatever renders below the row.
101
128
  */
102
- export declare function StatTile({ label, value, sub, spark, progress, color, icon, tone, valueSize, onPress, actionHint, help, copyValue, delta, }: StatTileProps): import("react").JSX.Element;
129
+ export declare function StatTile({ label, value, sub, spark, progress, color, icon, tone, valueSize, onPress, actionHint, help, copyValue, delta, budget, }: StatTileProps): import("react").JSX.Element;
103
130
  export {};
104
131
  //# sourceMappingURL=StatTile.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatTile.d.ts","sourceRoot":"","sources":["../../../src/react/components/StatTile.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQvC,UAAU,QAAQ;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;qEAIqE;AACrE,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AASxE,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,kEAAkE;IAClE,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB;;;;OAIG;IACH,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC/B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;qFACiF;IACjF,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB;;;;;;;;;;;;;;;;OAgBG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IAC3C;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE;QACN,KAAK,EAAE,SAAS,CAAC;QACjB;;;;;WAKG;QACH,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;QAC/B,4EAA4E;QAC5E,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;QACpC,4EAA4E;QAC5E,KAAK,CAAC,EAAE,SAAS,CAAC;KACnB,CAAC;CACH;AAgDD;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,KAAK,EACL,GAAG,EACH,KAAK,EACL,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,OAAO,EACP,UAAU,EACV,IAAI,EACJ,SAAS,EACT,KAAK,GACN,EAAE,aAAa,+BAmHf"}
1
+ {"version":3,"file":"StatTile.d.ts","sourceRoot":"","sources":["../../../src/react/components/StatTile.tsx"],"names":[],"mappings":"AACA,OAAO,EAAiB,KAAK,SAAS,EAAc,MAAM,OAAO,CAAC;AAUlE,UAAU,QAAQ;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;qEAIqE;AACrE,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AASxE;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,mEAAmE;IACnE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,gGAAgG;IAChG,UAAU,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAcD,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAO/C,eAAO,MAAM,yBAAyB,gDAAyB,CAAC;AAEhE,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,gCAAgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,kEAAkE;IAClE,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB;;;;OAIG;IACH,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,mFAAmF;IACnF,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;qFACiF;IACjF,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB;;;;;;;;;;;;;;;;OAgBG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IAC3C;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE;QACN,KAAK,EAAE,SAAS,CAAC;QACjB;;;;;WAKG;QACH,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC;QAC/B,4EAA4E;QAC5E,SAAS,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;QACpC,4EAA4E;QAC5E,KAAK,CAAC,EAAE,SAAS,CAAC;KACnB,CAAC;CACH;AAwCD;qFACqF;AACrF,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,aAAa,CAK7D;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,KAAK,EACL,GAAG,EACH,KAAK,EACL,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,OAAO,EACP,UAAU,EACV,IAAI,EACJ,SAAS,EACT,KAAK,EACL,MAAM,GACP,EAAE,aAAa,+BA+If"}
@@ -1,17 +1,36 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { Info } from 'lucide-react';
3
+ import { createContext, useContext } from 'react';
3
4
  import { cn } from '../lib/cn.js';
4
5
  import { CopyButton } from './CopyButton.js';
5
6
  import { Sparkline } from './Sparkline.js';
6
7
  import { TruncatedText } from './TruncatedText.js';
7
8
  import { Tooltip } from './Tooltip.js';
8
9
  import { TAP_TARGET_ALWAYS } from '../lib/tapTarget.js';
10
+ import { Progress as ProgressBar } from './Progress.js';
11
+ import { thresholdToneOf } from './ThresholdMeter.js';
9
12
  const TONE_BAR = {
10
13
  success: 'bg-success',
11
14
  warning: 'bg-warning',
12
15
  danger: 'bg-destructive',
13
16
  neutral: 'bg-border-strong',
14
17
  };
18
+ const BUDGET_BAR = {
19
+ ok: 'bg-accent-solid',
20
+ warning: 'bg-warning',
21
+ critical: 'bg-destructive',
22
+ };
23
+ const BUDGET_TEXT = {
24
+ ok: 'text-muted-foreground',
25
+ warning: 'text-warning',
26
+ critical: 'text-destructive',
27
+ };
28
+ /**
29
+ * The value size a {@link StatTileGrid} imposes on every tile in it (DAT-8: tiles in a row
30
+ * share ONE value size). `null` outside a grid — a lone tile sizes itself.
31
+ */
32
+ const GridValueSize = createContext(null);
33
+ export const StatTileValueSizeProvider = GridValueSize.Provider;
15
34
  const VALUE_SIZE = { sm: 'text-base', md: 'text-2xl', lg: 'text-3xl' };
16
35
  /**
17
36
  * Reveal on hover of THIS tile — `group/tile`, which {@link StatTileGrid} puts on
@@ -44,15 +63,15 @@ function defaultCopyText(label, value, sub) {
44
63
  const tail = text(sub);
45
64
  return tail.length > 0 ? `${head} (${tail})` : head;
46
65
  }
47
- function valueClass(value, valueSize) {
48
- if (valueSize)
49
- return VALUE_SIZE[valueSize];
66
+ /** The size a value would pick ON ITS OWN — by length, so "Executing" never overflows a
67
+ * tile that "42" fits. {@link StatTileGrid} takes the smallest across its tiles. */
68
+ export function statValueSize(value) {
50
69
  const s = typeof value === 'string' ? value : typeof value === 'number' ? String(value) : '';
51
70
  if (s.length > 12)
52
- return 'text-base';
71
+ return 'sm';
53
72
  if (s.length > 7)
54
- return 'text-2xl';
55
- return 'text-3xl';
73
+ return 'md';
74
+ return 'lg';
56
75
  }
57
76
  /**
58
77
  * A compact dashboard stat: label + big value (auto-sized) + optional sub / spark / progress.
@@ -62,13 +81,20 @@ function valueClass(value, valueSize) {
62
81
  * `h-full`: a percent height inside an auto-height `flex-wrap` row is circular, and
63
82
  * wrapped tiles end up painting over whatever renders below the row.
64
83
  */
65
- export function StatTile({ label, value, sub, spark, progress, color, icon, tone, valueSize, onPress, actionHint, help, copyValue, delta, }) {
84
+ export function StatTile({ label, value, sub, spark, progress, color, icon, tone, valueSize, onPress, actionHint, help, copyValue, delta, budget, }) {
85
+ const gridSize = useContext(GridValueSize);
86
+ const size = valueSize ?? gridSize ?? statValueSize(value);
87
+ const budgetRatio = budget && budget.max > 0 ? Math.min(1, Math.max(0, budget.used / budget.max)) : null;
88
+ const budgetTone = budgetRatio == null ? null : thresholdToneOf(budgetRatio, budget?.thresholds);
89
+ // The BAR stops at full; the words do not — 1.11M of a 1M allowance is "111% used", and a
90
+ // readout clamped to 100% would hide exactly the overrun the tile exists to show.
91
+ const budgetPercent = budget && budget.max > 0 ? Math.round((budget.used / budget.max) * 100) : 0;
66
92
  const pct = progress && progress.max > 0 ? Math.round((progress.value / progress.max) * 100) : null;
67
93
  const body = (_jsxs("div", { className: cn('flex min-w-0 flex-col justify-between gap-2', tone && 'flex-1'), children: [_jsxs("div", { className: 'flex items-center justify-between gap-2', children: [_jsxs("span", { className: 'flex min-w-0 items-center gap-1', children: [_jsx(TruncatedText, { className: 'cb-meta-label min-w-0', children: label }), help ? (_jsxs(_Fragment, { children: [_jsx(Tooltip, { content: help, multiline: true, maxWidth: 300, mobile: 'tap', children: _jsx("span", { "aria-hidden": true, className: 'inline-flex size-4 shrink-0 cursor-help items-center justify-center rounded-full text-muted-foreground', children: _jsx(Info, { className: 'size-3.5' }) }) }), _jsxs("span", { className: 'sr-only', "data-cb-stat-help": true, children: [`What "${label}" means: `, help] })] })) : null] }), onPress && actionHint ? (_jsx("span", { "aria-hidden": true, className: `text-caption font-medium text-muted-foreground opacity-0 transition-opacity group-hover/tile:opacity-100 group-focus-visible/tile:opacity-100 ${TAP_TARGET_ALWAYS}`, children: actionHint })) : null, copyValue ? (_jsx(CopyButton, { value: copyValue === true
68
94
  ? () => defaultCopyText(label, value, sub)
69
- : copyValue, label: `Copy ${label}`, confirmToast: false, iconSize: 13, stopPropagation: true, className: cn('size-6 shrink-0 p-0', REVEAL_ON_TILE_HOVER) })) : null, icon ? _jsx("span", { className: 'text-muted-foreground', children: icon }) : null] }), _jsx("div", { className: cn(valueClass(value, valueSize), 'min-w-0 break-words font-semibold leading-tight tabular-nums'), style: color ? { color } : undefined, children: value }), delta ? (_jsxs("div", { className: 'flex min-w-0 items-baseline gap-1.5 text-xs', children: [_jsxs("span", { className: cn('shrink-0 tabular-nums font-medium', DELTA_CLASS[delta.direction ?? 'flat']), children: [_jsx("span", { "aria-hidden": true, className: 'mr-0.5 text-[0.6rem]', children: TREND_GLYPH[delta.trend ?? 'flat'] }), delta.value] }), delta.since ? (_jsx("span", { className: 'truncate text-muted-foreground', children: delta.since })) : null] })) : null, sub ? (_jsx(Tooltip, { content: typeof sub === 'string' ? sub : undefined, children: _jsx("div", { className: 'truncate text-xs text-muted-foreground', children: sub }) })) : null, spark ? _jsx(Sparkline, { data: spark }) : null, progress && pct != null ? (_jsxs("div", { children: [_jsx("div", { className: 'h-1.5 w-full overflow-hidden rounded-full bg-muted', children: _jsx("div", { className: cn('h-full rounded-full bg-accent-solid', progress.barClassName), style: { width: `${Math.min(100, pct)}%` } }) }), progress.label ? (_jsx("div", { className: 'mt-1 text-xs text-muted-foreground', children: progress.label })) : null] })) : null] }));
95
+ : copyValue, label: `Copy ${label}`, confirmToast: false, iconSize: 13, stopPropagation: true, className: cn('size-6 shrink-0 p-0', REVEAL_ON_TILE_HOVER) })) : null, icon ? _jsx("span", { className: 'text-muted-foreground', children: icon }) : null] }), _jsx("div", { className: cn(VALUE_SIZE[size], 'min-w-0 break-words font-semibold leading-tight tabular-nums', budgetTone && budgetTone !== 'ok' && BUDGET_TEXT[budgetTone]), "data-cb-stat-size": size, style: color ? { color } : undefined, children: value }), delta ? (_jsxs("div", { className: 'flex min-w-0 items-baseline gap-1.5 text-xs', children: [_jsxs("span", { className: cn('shrink-0 tabular-nums font-medium', DELTA_CLASS[delta.direction ?? 'flat']), children: [_jsx("span", { "aria-hidden": true, className: 'mr-0.5 text-[length:var(--text-glyph)]', children: TREND_GLYPH[delta.trend ?? 'flat'] }), delta.value] }), delta.since ? (_jsx("span", { className: 'truncate text-muted-foreground', children: delta.since })) : null] })) : null, sub ? (_jsx(Tooltip, { content: typeof sub === 'string' ? sub : undefined, children: _jsx("div", { className: 'truncate text-xs text-muted-foreground', children: sub }) })) : null, budget && budgetRatio != null && budgetTone ? (_jsxs("div", { className: 'flex min-w-0 flex-col gap-1', "data-cb-stat-budget": budgetTone, children: [_jsx(ProgressBar, { value: budgetRatio * 100, max: 100, size: 'sm', indicatorClassName: BUDGET_BAR[budgetTone], "aria-label": `${label}: ${budgetPercent}% ${budget.verb ?? 'used'}` }), _jsxs("div", { className: 'flex min-w-0 items-baseline justify-between gap-2 text-xs', children: [_jsx("span", { className: cn('shrink-0 tabular-nums font-medium', BUDGET_TEXT[budgetTone]), children: `${budgetPercent}% ${budget.verb ?? 'used'}` }), budget.window ? (_jsx("span", { className: 'min-w-0 truncate text-muted-foreground tabular-nums', children: budget.window })) : null] })] })) : null, spark ? _jsx(Sparkline, { data: spark }) : null, !budget && progress && pct != null ? (_jsxs("div", { children: [_jsx("div", { className: 'h-1.5 w-full overflow-hidden rounded-full bg-muted', children: _jsx("div", { className: cn('h-full rounded-full bg-accent-solid', progress.barClassName), style: { width: `${Math.min(100, pct)}%` } }) }), progress.label ? (_jsx("div", { className: 'mt-1 text-xs text-muted-foreground', children: progress.label })) : null] })) : null] }));
70
96
  if (!tone)
71
97
  return body;
72
- return (_jsxs("div", { className: 'flex min-w-0 gap-2.5', "data-tone": tone, children: [_jsx("span", { "aria-hidden": true, className: cn('w-1 shrink-0 self-stretch rounded-full', TONE_BAR[tone]) }), body] }));
98
+ return (_jsxs("div", { className: 'flex min-w-0 gap-3', "data-tone": tone, children: [_jsx("span", { "aria-hidden": true, className: cn('w-1 shrink-0 self-stretch rounded-full', TONE_BAR[tone]) }), body] }));
73
99
  }
74
100
  //# sourceMappingURL=StatTile.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatTile.js","sourceRoot":"","sources":["../../../src/react/components/StatTile.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StatTile.js","sourceRoot":"","sources":["../../../src/react/components/StatTile.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { type ReactNode } from 'react';
2
+ import { type StatValueSize } from './StatTile.js';
2
3
  export interface StatTileGridProps {
3
4
  /** The tiles — normally {@link StatTile}s; each child gets its own cell. */
4
5
  children: ReactNode;
@@ -23,8 +24,16 @@ export interface StatTileGridProps {
23
24
  * provides a surface (a dashboard widget frame, a padded panel).
24
25
  */
25
26
  flat?: boolean;
27
+ /**
28
+ * The ONE value size every tile in the grid uses (DAT-8). Default: the smallest any tile's
29
+ * value would pick on its own, so "Executing" and "42" sit at the same size instead of
30
+ * three sizes by string length. A tile's own `valueSize` still wins for that tile.
31
+ */
32
+ valueSize?: StatValueSize;
26
33
  className?: string;
27
34
  }
35
+ /** The smallest auto size across the grid's tiles — exported for its spec. */
36
+ export declare function gridValueSize(children: ReactNode): StatValueSize;
28
37
  /**
29
38
  * THE layout for a strip of {@link StatTile}s: a responsive `auto-fill` grid with
30
39
  * equal-height cells, each tile on its own flat {@link Surface} card.
@@ -38,5 +47,5 @@ export interface StatTileGridProps {
38
47
  * border highlight, focus ring, Enter/Space activation — the whole card is the
39
48
  * target. Inner controls (copy buttons, links) must `stopPropagation()` on click.
40
49
  */
41
- export declare function StatTileGrid({ children, minTileWidth, fill, flat, className, }: StatTileGridProps): import("react").JSX.Element;
50
+ export declare function StatTileGrid({ children, minTileWidth, fill, flat, valueSize, className, }: StatTileGridProps): import("react").JSX.Element;
42
51
  //# sourceMappingURL=StatTileGrid.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatTileGrid.d.ts","sourceRoot":"","sources":["../../../src/react/components/StatTileGrid.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAKrF,MAAM,WAAW,iBAAiB;IAChC,4EAA4E;IAC5E,QAAQ,EAAE,SAAS,CAAC;IACpB,qFAAqF;IACrF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;;;OAYG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAUD;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,YAAwB,EACxB,IAAY,EACZ,IAAY,EACZ,SAAS,GACV,EAAE,iBAAiB,+BAmDnB"}
1
+ {"version":3,"file":"StatTileGrid.d.ts","sourceRoot":"","sources":["../../../src/react/components/StatTileGrid.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgD,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGrF,OAAO,EAAE,KAAK,aAAa,EAA4C,MAAM,eAAe,CAAC;AAG7F,MAAM,WAAW,iBAAiB;IAChC,4EAA4E;IAC5E,QAAQ,EAAE,SAAS,CAAC;IACpB,qFAAqF;IACrF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;;;OAYG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,QAAQ,EAAE,SAAS,GAAG,aAAa,CAShE;AAUD;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,YAAwB,EACxB,IAAY,EACZ,IAAY,EACZ,SAAS,EACT,SAAS,GACV,EAAE,iBAAiB,+BAsDnB"}
@@ -2,7 +2,23 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Children, isValidElement } from 'react';
3
3
  import { cn } from '../lib/cn.js';
4
4
  import { pressWithoutSelection } from '../lib/selection.js';
5
+ import { StatTileValueSizeProvider, statValueSize } from './StatTile.js';
5
6
  import { Surface } from './Surface.js';
7
+ const SIZE_RANK = { sm: 0, md: 1, lg: 2 };
8
+ /** The smallest auto size across the grid's tiles — exported for its spec. */
9
+ export function gridValueSize(children) {
10
+ let size = 'lg';
11
+ Children.forEach(children, (child) => {
12
+ if (!isValidElement(child))
13
+ return;
14
+ if (child.props.valueSize || !('value' in child.props))
15
+ return;
16
+ const own = statValueSize(child.props.value);
17
+ if (SIZE_RANK[own] < SIZE_RANK[size])
18
+ size = own;
19
+ });
20
+ return size;
21
+ }
6
22
  /**
7
23
  * THE layout for a strip of {@link StatTile}s: a responsive `auto-fill` grid with
8
24
  * equal-height cells, each tile on its own flat {@link Surface} card.
@@ -16,42 +32,43 @@ import { Surface } from './Surface.js';
16
32
  * border highlight, focus ring, Enter/Space activation — the whole card is the
17
33
  * target. Inner controls (copy buttons, links) must `stopPropagation()` on click.
18
34
  */
19
- export function StatTileGrid({ children, minTileWidth = '10.5rem', fill = false, flat = false, className, }) {
35
+ export function StatTileGrid({ children, minTileWidth = '10.5rem', fill = false, flat = false, valueSize, className, }) {
36
+ const size = valueSize ?? gridValueSize(children);
20
37
  // `min(<w>, 100%)` keeps a single narrow container from overflowing horizontally;
21
38
  // `auto-fill` (not `auto-fit`) holds cells near minTileWidth instead of ballooning
22
39
  // a short strip into comically wide tiles.
23
40
  const columns = `repeat(${fill ? 'auto-fit' : 'auto-fill'}, minmax(min(${minTileWidth}, 100%), 1fr))`;
24
- return (_jsx("div", { className: cn('grid gap-3', className), style: { gridTemplateColumns: columns }, children: Children.map(children, (child) => {
25
- if (child == null || child === false)
26
- return null;
27
- const onPress = isValidElement(child) ? child.props.onPress : undefined;
28
- const pressProps = onPress
29
- ? {
30
- role: 'button',
31
- tabIndex: 0,
32
- // 🔴 `pressWithoutSelection`, not a bare `onClick`. A pressable card is
33
- // still text the reader wants to copy (owner report 2026-08-23), and a
34
- // drag that ENDS inside the card fires `click` on it — so the naive
35
- // wiring navigates away the instant you finish highlighting the number.
36
- onClick: pressWithoutSelection(onPress),
37
- onKeyDown: (e) => {
38
- if (e.key === 'Enter' || e.key === ' ') {
39
- e.preventDefault();
40
- onPress();
41
- }
42
- },
43
- 'aria-label': isValidElement(child) ? child.props.label : undefined,
44
- }
45
- : {};
46
- // `group/tile` on EVERY cell, not only pressable ones: a tile's own
47
- // hover-revealed affordances (the copy button) must appear for the tile
48
- // the pointer is actually over, and a non-pressable tile has them too.
49
- const interactiveClass = cn('group/tile', onPress &&
50
- 'cursor-pointer transition-colors hover:border-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring');
51
- // A single-child `grid` cell stretches the tile to the row height without
52
- // percent heights, so StatTile's `justify-between` pins sub/progress to the
53
- // card bottom across equal-height siblings.
54
- return flat ? (_jsx("div", { className: cn('grid min-w-0', interactiveClass), ...pressProps, children: child })) : (_jsx(Surface, { level: 'flat', pad: 'sm', radius: 'lg', className: cn('grid min-w-0', interactiveClass), ...pressProps, children: child }));
55
- }) }));
41
+ return (_jsx(StatTileValueSizeProvider, { value: size, children: _jsx("div", { className: cn('grid gap-3', className), style: { gridTemplateColumns: columns }, children: Children.map(children, (child) => {
42
+ if (child == null || child === false)
43
+ return null;
44
+ const onPress = isValidElement(child) ? child.props.onPress : undefined;
45
+ const pressProps = onPress
46
+ ? {
47
+ role: 'button',
48
+ tabIndex: 0,
49
+ // 🔴 `pressWithoutSelection`, not a bare `onClick`. A pressable card is
50
+ // still text the reader wants to copy (owner report 2026-08-23), and a
51
+ // drag that ENDS inside the card fires `click` on it — so the naive
52
+ // wiring navigates away the instant you finish highlighting the number.
53
+ onClick: pressWithoutSelection(onPress),
54
+ onKeyDown: (e) => {
55
+ if (e.key === 'Enter' || e.key === ' ') {
56
+ e.preventDefault();
57
+ onPress();
58
+ }
59
+ },
60
+ 'aria-label': isValidElement(child) ? child.props.label : undefined,
61
+ }
62
+ : {};
63
+ // `group/tile` on EVERY cell, not only pressable ones: a tile's own
64
+ // hover-revealed affordances (the copy button) must appear for the tile
65
+ // the pointer is actually over, and a non-pressable tile has them too.
66
+ const interactiveClass = cn('group/tile', onPress &&
67
+ 'cursor-pointer transition-colors hover:border-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring');
68
+ // A single-child `grid` cell stretches the tile to the row height without
69
+ // percent heights, so StatTile's `justify-between` pins sub/progress to the
70
+ // card bottom across equal-height siblings.
71
+ return flat ? (_jsx("div", { className: cn('grid min-w-0', interactiveClass), ...pressProps, children: child })) : (_jsx(Surface, { level: 'flat', pad: 'sm', radius: 'lg', className: cn('grid min-w-0', interactiveClass), ...pressProps, children: child }));
72
+ }) }) }));
56
73
  }
57
74
  //# sourceMappingURL=StatTileGrid.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatTileGrid.js","sourceRoot":"","sources":["../../../src/react/components/StatTileGrid.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAsC,MAAM,OAAO,CAAC;AACrF,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAqCvC;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,QAAQ,EACR,YAAY,GAAG,SAAS,EACxB,IAAI,GAAG,KAAK,EACZ,IAAI,GAAG,KAAK,EACZ,SAAS,GACS;IAClB,kFAAkF;IAClF,mFAAmF;IACnF,2CAA2C;IAC3C,MAAM,OAAO,GAAG,UAAU,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,gBAAgB,YAAY,gBAAgB,CAAC;IACtG,OAAO,CACL,cAAK,SAAS,EAAE,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,mBAAmB,EAAE,OAAO,EAAE,YACjF,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;YAChC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK;gBAAE,OAAO,IAAI,CAAC;YAClD,MAAM,OAAO,GAAG,cAAc,CAAsB,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;YAC7F,MAAM,UAAU,GAAG,OAAO;gBACxB,CAAC,CAAC;oBACE,IAAI,EAAE,QAAiB;oBACvB,QAAQ,EAAE,CAAC;oBACX,wEAAwE;oBACxE,uEAAuE;oBACvE,oEAAoE;oBACpE,wEAAwE;oBACxE,OAAO,EAAE,qBAAqB,CAAC,OAAO,CAAC;oBACvC,SAAS,EAAE,CAAC,CAAgC,EAAE,EAAE;wBAC9C,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;4BACvC,CAAC,CAAC,cAAc,EAAE,CAAC;4BACnB,OAAO,EAAE,CAAC;wBACZ,CAAC;oBACH,CAAC;oBACD,YAAY,EAAE,cAAc,CAAsB,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;iBACzF;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,oEAAoE;YACpE,wEAAwE;YACxE,uEAAuE;YACvE,MAAM,gBAAgB,GAAG,EAAE,CACzB,YAAY,EACZ,OAAO;gBACL,8HAA8H,CACjI,CAAC;YACF,0EAA0E;YAC1E,4EAA4E;YAC5E,4CAA4C;YAC5C,OAAO,IAAI,CAAC,CAAC,CAAC,CACZ,cAAK,SAAS,EAAE,EAAE,CAAC,cAAc,EAAE,gBAAgB,CAAC,KAAM,UAAU,YACjE,KAAK,GACF,CACP,CAAC,CAAC,CAAC,CACF,KAAC,OAAO,IAAC,KAAK,EAAC,MAAM,EAAC,GAAG,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,SAAS,EAAE,EAAE,CAAC,cAAc,EAAE,gBAAgB,CAAC,KAAM,UAAU,YACvG,KAAK,GACE,CACX,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"StatTileGrid.js","sourceRoot":"","sources":["../../../src/react/components/StatTileGrid.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"StatusPill.d.ts","sourceRoot":"","sources":["../../../src/react/components/StatusPill.tsx"],"names":[],"mappings":"AACA,OAAO,EAAS,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAEpE;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCiB,CAAC;AAE/C,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,gBAAgB,CAAC;AAE7D;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAsB3D,CAAC;AAMF,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC;IAC/D;0EACsE;IACtE,MAAM,EAAE,gBAAgB,CAAC;IACzB;gEAC4D;IAC5D,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;yEACqE;IACrE,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,IAAI,EACJ,GAAU,EACV,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,eAAe,+BAiCjB"}
1
+ {"version":3,"file":"StatusPill.d.ts","sourceRoot":"","sources":["../../../src/react/components/StatusPill.tsx"],"names":[],"mappings":"AACA,OAAO,EAAS,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAEpE;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCiB,CAAC;AAE/C,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,gBAAgB,CAAC;AAE7D;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CA+C3D,CAAC;AAMF,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC;IAC/D;0EACsE;IACtE,MAAM,EAAE,gBAAgB,CAAC;IACzB;gEAC4D;IAC5D,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB;yEACqE;IACrE,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,IAAI,EACJ,GAAU,EACV,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,eAAe,+BAiCjB"}
@@ -62,6 +62,14 @@ export const STATUS_ATTENTION_TONE = {
62
62
  dispatched: 'success',
63
63
  claimed: 'success',
64
64
  active: 'success',
65
+ // The live states station's and roms' jobs report (forge task 2464, DAT-4): a copy, a
66
+ // cipher pass and a download are work in flight, the same reading as `running`.
67
+ downloading: 'success',
68
+ uploading: 'success',
69
+ encrypting: 'success',
70
+ transcoding: 'success',
71
+ deploying: 'success',
72
+ building: 'success',
65
73
  // Broken — demands the owner
66
74
  error: 'error',
67
75
  failed: 'error',
@@ -69,12 +77,29 @@ export const STATUS_ATTENTION_TONE = {
69
77
  offline: 'error',
70
78
  rejected: 'error',
71
79
  vanished: 'error',
80
+ // A job that stopped part-way and a record the reader cannot open are broken too — station's
81
+ // backup and cipher cards, its data audit (`failing`, `uncovered`, `unscheduled`) and its
82
+ // reach probe (`not-answering`, `looping`, `no-address`).
83
+ interrupted: 'error',
84
+ unreadable: 'error',
85
+ failing: 'error',
86
+ uncovered: 'error',
87
+ unscheduled: 'error',
88
+ 'not-answering': 'error',
89
+ looping: 'error',
90
+ 'no-address': 'error',
72
91
  // Held / degraded — waiting on a person or a recovery
73
92
  paused: 'warning',
74
93
  degraded: 'warning',
75
94
  unhealthy: 'warning',
76
95
  parked: 'warning',
77
96
  on_hold: 'warning',
97
+ blocked: 'warning',
98
+ // Stale and half-watched: it still works, and it has stopped being checked.
99
+ stale: 'warning',
100
+ unwatched: 'warning',
101
+ 'watchdog-stale': 'warning',
102
+ unauditable: 'warning',
78
103
  };
79
104
  /** Statuses whose dot breathes (a slow pulse): live processes, plus `crashed` —
80
105
  * the one inert state that demands attention rather than calm. */
@@ -96,6 +121,6 @@ export function StatusPill({ status, tone, dot = true, className, children, ...p
96
121
  // GEOMETRY — a warning triangle — alongside the hue, so degraded/broken
97
122
  // reads for color-blind users even when the label is truncated away.
98
123
  ((tone ?? STATUS_PILL_TONE[status]) === 'warning' ||
99
- (tone ?? STATUS_PILL_TONE[status]) === 'error' ? (_jsx("span", { "aria-hidden": true, className: cn('size-0 shrink-0 border-x-4 border-b-[7px] border-x-transparent border-b-current', LIVE_STATUSES.has(status) && 'animate-pulse motion-reduce:animate-none') })) : (_jsx("span", { "aria-hidden": true, className: cn('size-1.5 shrink-0 rounded-full bg-current', LIVE_STATUSES.has(status) && 'animate-pulse motion-reduce:animate-none') }))), children ?? _jsx("span", { className: 'capitalize', children: status })] }));
124
+ (tone ?? STATUS_PILL_TONE[status]) === 'error' ? (_jsx("span", { "aria-hidden": true, className: cn('size-0 shrink-0 border-x-4 border-b-[length:var(--status-glyph-h)] border-x-transparent border-b-current', LIVE_STATUSES.has(status) && 'animate-pulse motion-reduce:animate-none') })) : (_jsx("span", { "aria-hidden": true, className: cn('size-1.5 shrink-0 rounded-full bg-current', LIVE_STATUSES.has(status) && 'animate-pulse motion-reduce:animate-none') }))), children ?? _jsx("span", { className: 'capitalize', children: status })] }));
100
125
  }
101
126
  //# sourceMappingURL=StatusPill.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"StatusPill.js","sourceRoot":"","sources":["../../../src/react/components/StatusPill.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StatusPill.js","sourceRoot":"","sources":["../../../src/react/components/StatusPill.tsx"],"names":[],"mappings":"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"}
@@ -25,7 +25,7 @@ export interface SurfaceProps extends HTMLAttributes<HTMLDivElement> {
25
25
  pad?: keyof typeof PAD;
26
26
  /** Corner radius on the token scale (larger surface → larger radius). */
27
27
  radius?: keyof typeof RADIUS;
28
- /** Enable the hover-lift on a `raised` surface (clickable cards). No-op on flat/overlay. */
28
+ /** Enable hover feedback on a `raised` or `glass` surface (clickable cards). No-op on flat/overlay. */
29
29
  interactive?: boolean;
30
30
  /** Render as the child element (Radix Slot) — e.g. `<Surface asChild><Link …/></Surface>`. */
31
31
  asChild?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"Surface.d.ts","sourceRoot":"","sources":["../../../src/react/components/Surface.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAOjD,QAAA,MAAM,SAAS;;;;;CA0BL,CAAC;AAOX,QAAA,MAAM,GAAG;;;;;CAAwF,CAAC;AAClG,QAAA,MAAM,MAAM;;;;CAAoE,CAAC;AAEjF,MAAM,WAAW,YAAa,SAAQ,cAAc,CAAC,cAAc,CAAC;IAClE;;oCAEgC;IAChC,KAAK,CAAC,EAAE,MAAM,OAAO,SAAS,CAAC;IAC/B,sCAAsC;IACtC,GAAG,CAAC,EAAE,MAAM,OAAO,GAAG,CAAC;IACvB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,OAAO,MAAM,CAAC;IAC7B,4FAA4F;IAC5F,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8FAA8F;IAC9F,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;0EACsE;IACtE,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CAC3B;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,EACtB,KAAc,EACd,GAAU,EACV,MAAa,EACb,WAAW,EACX,OAAe,EACf,SAAS,EACT,GAAG,IAAI,EACR,EAAE,YAAY,+BASd"}
1
+ {"version":3,"file":"Surface.d.ts","sourceRoot":"","sources":["../../../src/react/components/Surface.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AASjD,QAAA,MAAM,SAAS;;;;;CA0BL,CAAC;AAOX,QAAA,MAAM,GAAG;;;;;CAAwF,CAAC;AAClG,QAAA,MAAM,MAAM;;;;CAAoE,CAAC;AAEjF,MAAM,WAAW,YAAa,SAAQ,cAAc,CAAC,cAAc,CAAC;IAClE;;oCAEgC;IAChC,KAAK,CAAC,EAAE,MAAM,OAAO,SAAS,CAAC;IAC/B,sCAAsC;IACtC,GAAG,CAAC,EAAE,MAAM,OAAO,GAAG,CAAC;IACvB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,OAAO,MAAM,CAAC;IAC7B,uGAAuG;IACvG,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,8FAA8F;IAC9F,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;0EACsE;IACtE,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;CAC3B;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,EACtB,KAAc,EACd,GAAU,EACV,MAAa,EACb,WAAW,EACX,OAAe,EACf,SAAS,EACT,GAAG,IAAI,EACR,EAAE,YAAY,+BAed"}
@@ -1,24 +1,27 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Slot } from '@radix-ui/react-slot';
3
3
  import { cn } from '../lib/cn.js';
4
- // Elevation is meaning (flat | raised | overlay), not decoration. Light mode reads
5
- // depth through the shadow; dark mode reads it through a lighter background +
6
- // stronger border (shadows are near-invisible on near-black) — both via tokens from
7
- // task 02, so the same class is correct in every theme with no `dark:` color literals.
4
+ import { CardFrameContext, useCardNestingWarning } from './cardFrame.js';
5
+ // Elevation is meaning (flat | raised | overlay), not decoration. FND-11 (task 2461):
6
+ // an IN-FLOW card is anchored by its 1px border and carries no drop shadow — shadows
7
+ // belong to floating layers only, so `overlay` is the one level with one. Dark mode
8
+ // still reads `raised` through a lighter background; all via tokens, so the same
9
+ // class is correct in every theme with no `dark:` color literals.
8
10
  const ELEVATION = {
9
11
  flat: 'bg-surface border border-border shadow-none',
10
- raised: cn('bg-card border border-border shadow-raised dark:bg-card-raised',
11
- // `interactive` opts a raised surface into the hover-lift (clickable cards):
12
- // stronger shadow + border and a 2px rise, transitioned at the motion token.
13
- 'data-[interactive=true]:transition-all data-[interactive=true]:duration-[var(--duration-base)]', 'data-[interactive=true]:ease-[var(--ease-out)]', 'data-[interactive=true]:hover:shadow-overlay data-[interactive=true]:hover:border-border-strong', 'data-[interactive=true]:hover:-translate-y-0.5'),
12
+ raised: cn('bg-card border border-border shadow-none dark:bg-card-raised',
13
+ // `interactive` opts a raised surface into hover feedback (clickable cards): the
14
+ // edge strengthens, transitioned at the motion token. No lift and no shadow — an
15
+ // in-flow card does not float (FND-11).
16
+ 'data-[interactive=true]:transition-colors data-[interactive=true]:duration-[var(--duration-base)]', 'data-[interactive=true]:ease-[var(--ease-out)]', 'data-[interactive=true]:hover:border-border-strong'),
14
17
  overlay: 'bg-popover border border-border shadow-overlay dark:bg-card-overlay',
15
18
  // `glass` is elevation with the ambient field showing THROUGH it — the panel
16
19
  // treatment the aurora theme is built around. Its fill, edge, blur and shadow all
17
20
  // come from the `--glass-*` tokens (theme.css), so it is a legitimate choice under
18
21
  // ANY theme: in the default light theme those resolve to a near-opaque white frost
19
22
  // (glass over white is white), which is why this is safe to reach for without
20
- // asking whether the app opted into a theme. The hover-lift is shared with
21
- // `raised`, minus the border swap — a glass edge that thickens on hover reads as a
23
+ // asking whether the app opted into a theme. Its hover feedback is a lift, not
24
+ // `raised`'s border swap — a glass edge that thickens on hover reads as a
22
25
  // rendering artifact rather than as feedback.
23
26
  glass: cn('cb-glass', 'data-[interactive=true]:transition-all data-[interactive=true]:duration-[var(--duration-base)]', 'data-[interactive=true]:ease-[var(--ease-out)]', 'data-[interactive=true]:hover:-translate-y-0.5'),
24
27
  };
@@ -36,6 +39,12 @@ const RADIUS = { md: 'rounded-md', lg: 'rounded-lg', xl: 'rounded-xl' };
36
39
  */
37
40
  export function Surface({ level = 'flat', pad = 'md', radius = 'lg', interactive, asChild = false, className, ...rest }) {
38
41
  const Comp = asChild ? Slot : 'div';
39
- return (_jsx(Comp, { "data-interactive": interactive || undefined, className: cn(ELEVATION[level], PAD[pad], RADIUS[radius], className), ...rest }));
42
+ // A sheet floats above the page and starts a fresh stack of levels (it provides
43
+ // `false`); every other Surface is an in-flow box, and a box inside it is the
44
+ // fourth level (LAY-5).
45
+ const isCard = level !== 'overlay';
46
+ useCardNestingWarning(isCard, 'Surface');
47
+ const el = (_jsx(Comp, { "data-interactive": interactive || undefined, className: cn(ELEVATION[level], PAD[pad], RADIUS[radius], className), ...rest }));
48
+ return _jsx(CardFrameContext.Provider, { value: isCard, children: el });
40
49
  }
41
50
  //# sourceMappingURL=Surface.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Surface.js","sourceRoot":"","sources":["../../../src/react/components/Surface.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC,mFAAmF;AACnF,8EAA8E;AAC9E,oFAAoF;AACpF,uFAAuF;AACvF,MAAM,SAAS,GAAG;IAChB,IAAI,EAAE,6CAA6C;IACnD,MAAM,EAAE,EAAE,CACR,gEAAgE;IAChE,6EAA6E;IAC7E,6EAA6E;IAC7E,gGAAgG,EAChG,gDAAgD,EAChD,iGAAiG,EACjG,gDAAgD,CACjD;IACD,OAAO,EAAE,qEAAqE;IAC9E,6EAA6E;IAC7E,kFAAkF;IAClF,mFAAmF;IACnF,mFAAmF;IACnF,8EAA8E;IAC9E,2EAA2E;IAC3E,mFAAmF;IACnF,8CAA8C;IAC9C,KAAK,EAAE,EAAE,CACP,UAAU,EACV,gGAAgG,EAChG,gDAAgD,EAChD,gDAAgD,CACjD;CACO,CAAC;AAEX,gFAAgF;AAChF,iFAAiF;AACjF,oFAAoF;AACpF,4EAA4E;AAC5E,6EAA6E;AAC7E,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,6BAA6B,EAAE,EAAE,EAAE,YAAY,EAAW,CAAC;AAClG,MAAM,MAAM,GAAG,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAW,CAAC;AAoBjF;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,EACtB,KAAK,GAAG,MAAM,EACd,GAAG,GAAG,IAAI,EACV,MAAM,GAAG,IAAI,EACb,WAAW,EACX,OAAO,GAAG,KAAK,EACf,SAAS,EACT,GAAG,IAAI,EACM;IACb,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IACpC,OAAO,CACL,KAAC,IAAI,wBACe,WAAW,IAAI,SAAS,EAC1C,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,KAChE,IAAI,GACR,CACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"Surface.js","sourceRoot":"","sources":["../../../src/react/components/Surface.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEzE,sFAAsF;AACtF,qFAAqF;AACrF,oFAAoF;AACpF,iFAAiF;AACjF,kEAAkE;AAClE,MAAM,SAAS,GAAG;IAChB,IAAI,EAAE,6CAA6C;IACnD,MAAM,EAAE,EAAE,CACR,8DAA8D;IAC9D,iFAAiF;IACjF,iFAAiF;IACjF,wCAAwC;IACxC,mGAAmG,EACnG,gDAAgD,EAChD,oDAAoD,CACrD;IACD,OAAO,EAAE,qEAAqE;IAC9E,6EAA6E;IAC7E,kFAAkF;IAClF,mFAAmF;IACnF,mFAAmF;IACnF,8EAA8E;IAC9E,+EAA+E;IAC/E,0EAA0E;IAC1E,8CAA8C;IAC9C,KAAK,EAAE,EAAE,CACP,UAAU,EACV,gGAAgG,EAChG,gDAAgD,EAChD,gDAAgD,CACjD;CACO,CAAC;AAEX,gFAAgF;AAChF,iFAAiF;AACjF,oFAAoF;AACpF,4EAA4E;AAC5E,6EAA6E;AAC7E,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,6BAA6B,EAAE,EAAE,EAAE,YAAY,EAAW,CAAC;AAClG,MAAM,MAAM,GAAG,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAW,CAAC;AAoBjF;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,EACtB,KAAK,GAAG,MAAM,EACd,GAAG,GAAG,IAAI,EACV,MAAM,GAAG,IAAI,EACb,WAAW,EACX,OAAO,GAAG,KAAK,EACf,SAAS,EACT,GAAG,IAAI,EACM;IACb,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IACpC,gFAAgF;IAChF,8EAA8E;IAC9E,wBAAwB;IACxB,MAAM,MAAM,GAAG,KAAK,KAAK,SAAS,CAAC;IACnC,qBAAqB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACzC,MAAM,EAAE,GAAG,CACT,KAAC,IAAI,wBACe,WAAW,IAAI,SAAS,EAC1C,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,KAChE,IAAI,GACR,CACH,CAAC;IACF,OAAO,KAAC,gBAAgB,CAAC,QAAQ,IAAC,KAAK,EAAE,MAAM,YAAG,EAAE,GAA6B,CAAC;AACpF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"SwatchPicker.d.ts","sourceRoot":"","sources":["../../../src/react/components/SwatchPicker.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IACrD,+EAA+E;IAC/E,KAAK,EAAE,CAAC,CAAC;IACT,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAC1D,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3B,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7B,0EAA0E;IAC1E,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,EACtD,OAAO,EACP,KAAK,EACL,QAAQ,EACR,IAAW,EACX,YAAY,EAAE,SAAmB,EACjC,SAAS,GACV,EAAE,iBAAiB,CAAC,CAAC,CAAC,+BA+BtB"}
1
+ {"version":3,"file":"SwatchPicker.d.ts","sourceRoot":"","sources":["../../../src/react/components/SwatchPicker.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IACrD,+EAA+E;IAC/E,KAAK,EAAE,CAAC,CAAC;IACT,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;IACd,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IAC1D,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3B,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC7B,0EAA0E;IAC1E,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAID;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,EACtD,OAAO,EACP,KAAK,EACL,QAAQ,EACR,IAAW,EACX,YAAY,EAAE,SAAmB,EACjC,SAAS,GACV,EAAE,iBAAiB,CAAC,CAAC,CAAC,+BAkCtB"}
@@ -2,6 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import * as RadioGroup from '@radix-ui/react-radio-group';
3
3
  import { Check } from 'lucide-react';
4
4
  import { cn } from '../lib/cn.js';
5
+ import { TAP_TARGET_SQUARE } from '../lib/tapTarget.js';
5
6
  const SIZE = { sm: 'size-6', md: 'size-7', lg: 'size-9' };
6
7
  /**
7
8
  * A discrete color-swatch radio group — pick ONE color from a fixed palette
@@ -14,6 +15,9 @@ const SIZE = { sm: 'size-6', md: 'size-7', lg: 'size-9' };
14
15
  * composes this with a native color input.
15
16
  */
16
17
  export function SwatchPicker({ options, value, onChange, size = 'md', 'aria-label': ariaLabel = 'Color', className, }) {
17
- return (_jsx(RadioGroup.Root, { "aria-label": ariaLabel, value: value ?? '', onValueChange: (v) => onChange(v), className: cn('flex flex-wrap items-center gap-1.5', className), children: options.map((opt) => (_jsx(RadioGroup.Item, { value: opt.value, disabled: opt.disabled, "aria-label": opt.label ?? opt.value, title: opt.label ?? opt.value, style: { backgroundColor: opt.color }, className: cn('inline-flex items-center justify-center rounded-full border border-border/40 transition-transform', SIZE[size], 'hover:scale-110 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1', 'data-[state=checked]:ring-2 data-[state=checked]:ring-foreground data-[state=checked]:ring-offset-1', 'disabled:cursor-not-allowed disabled:opacity-40 disabled:hover:scale-100'), children: _jsx(RadioGroup.Indicator, { asChild: true, children: _jsx(Check, { className: 'size-3.5 text-white mix-blend-difference', "aria-hidden": true }) }) }, opt.value))) }));
18
+ return (_jsx(RadioGroup.Root, { "aria-label": ariaLabel, value: value ?? '', onValueChange: (v) => onChange(v), className: cn('flex flex-wrap items-center gap-1.5', className), children: options.map((opt) => (_jsx(RadioGroup.Item, { value: opt.value, disabled: opt.disabled, "aria-label": opt.label ?? opt.value, title: opt.label ?? opt.value, style: { backgroundColor: opt.color }, className: cn('inline-flex items-center justify-center rounded-full border border-border/40 transition-transform', SIZE[size],
19
+ // A finger needs 44px (DESIGN.md §5): the swatch itself grows on a coarse pointer, since
20
+ // the colour IS the button. A 28px one failed e2e/touch-targets (forge task 2514).
21
+ TAP_TARGET_SQUARE, 'hover:scale-110 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1', 'data-[state=checked]:ring-2 data-[state=checked]:ring-foreground data-[state=checked]:ring-offset-1', 'disabled:cursor-not-allowed disabled:opacity-40 disabled:hover:scale-100'), children: _jsx(RadioGroup.Indicator, { asChild: true, children: _jsx(Check, { className: 'size-3.5 text-white mix-blend-difference', "aria-hidden": true }) }) }, opt.value))) }));
18
22
  }
19
23
  //# sourceMappingURL=SwatchPicker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SwatchPicker.js","sourceRoot":"","sources":["../../../src/react/components/SwatchPicker.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,UAAU,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAuBlC,MAAM,IAAI,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAW,CAAC;AAEnE;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAA4B,EACtD,OAAO,EACP,KAAK,EACL,QAAQ,EACR,IAAI,GAAG,IAAI,EACX,YAAY,EAAE,SAAS,GAAG,OAAO,EACjC,SAAS,GACY;IACrB,OAAO,CACL,KAAC,UAAU,CAAC,IAAI,kBACF,SAAS,EACrB,KAAK,EAAE,KAAK,IAAI,EAAE,EAClB,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAM,CAAC,EACtC,SAAS,EAAE,EAAE,CAAC,qCAAqC,EAAE,SAAS,CAAC,YAE9D,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACpB,KAAC,UAAU,CAAC,IAAI,IAEd,KAAK,EAAE,GAAG,CAAC,KAAK,EAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ,gBACV,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,EAClC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,EAC7B,KAAK,EAAE,EAAE,eAAe,EAAE,GAAG,CAAC,KAAK,EAAE,EACrC,SAAS,EAAE,EAAE,CACX,mGAAmG,EACnG,IAAI,CAAC,IAAI,CAAC,EACV,qHAAqH,EACrH,qGAAqG,EACrG,0EAA0E,CAC3E,YAED,KAAC,UAAU,CAAC,SAAS,IAAC,OAAO,kBAC3B,KAAC,KAAK,IAAC,SAAS,EAAC,0CAA0C,wBAAe,GACrD,IAhBlB,GAAG,CAAC,KAAK,CAiBE,CACnB,CAAC,GACc,CACnB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"SwatchPicker.js","sourceRoot":"","sources":["../../../src/react/components/SwatchPicker.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,UAAU,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAuBxD,MAAM,IAAI,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAW,CAAC;AAEnE;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAA4B,EACtD,OAAO,EACP,KAAK,EACL,QAAQ,EACR,IAAI,GAAG,IAAI,EACX,YAAY,EAAE,SAAS,GAAG,OAAO,EACjC,SAAS,GACY;IACrB,OAAO,CACL,KAAC,UAAU,CAAC,IAAI,kBACF,SAAS,EACrB,KAAK,EAAE,KAAK,IAAI,EAAE,EAClB,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAM,CAAC,EACtC,SAAS,EAAE,EAAE,CAAC,qCAAqC,EAAE,SAAS,CAAC,YAE9D,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CACpB,KAAC,UAAU,CAAC,IAAI,IAEd,KAAK,EAAE,GAAG,CAAC,KAAK,EAChB,QAAQ,EAAE,GAAG,CAAC,QAAQ,gBACV,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,EAClC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,EAC7B,KAAK,EAAE,EAAE,eAAe,EAAE,GAAG,CAAC,KAAK,EAAE,EACrC,SAAS,EAAE,EAAE,CACX,mGAAmG,EACnG,IAAI,CAAC,IAAI,CAAC;YACV,yFAAyF;YACzF,mFAAmF;YACnF,iBAAiB,EACjB,qHAAqH,EACrH,qGAAqG,EACrG,0EAA0E,CAC3E,YAED,KAAC,UAAU,CAAC,SAAS,IAAC,OAAO,kBAC3B,KAAC,KAAK,IAAC,SAAS,EAAC,0CAA0C,wBAAe,GACrD,IAnBlB,GAAG,CAAC,KAAK,CAoBE,CACnB,CAAC,GACc,CACnB,CAAC;AACJ,CAAC"}
@@ -21,7 +21,7 @@ export function Switch({ className, label, labelClassName, showState, id: idProp
21
21
  // never changes, so the previous hit-slop technique read as still-40×24 and
22
22
  // kept failing orch-host's task-sources mobile scan (owner teardown,
23
23
  // 2026-07-17 — the "cc"/"co"/etc. processing toggles all measured 40×24).
24
- 'pointer-coarse:h-11 pointer-coarse:w-[4.5rem]', className), ...props, children: _jsx(RadixSwitch.Thumb, { className: cn('pointer-events-none block size-5 rounded-full bg-white shadow transition-transform', 'data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0', 'pointer-coarse:size-9 pointer-coarse:data-[state=checked]:translate-x-8') }) }));
24
+ 'pointer-coarse:h-11 pointer-coarse:w-18', className), ...props, children: _jsx(RadixSwitch.Thumb, { className: cn('pointer-events-none block size-5 rounded-full bg-white shadow transition-transform', 'data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0', 'pointer-coarse:size-9 pointer-coarse:data-[state=checked]:translate-x-8') }) }));
25
25
  if (label == null && showState !== true)
26
26
  return root;
27
27
  return (_jsxs("label", { htmlFor: id, "data-cb-tap-target": '', className: cn('flex w-full cursor-pointer items-center justify-between gap-3 py-1.5', props.disabled && 'cursor-not-allowed', TAP_TARGET), children: [label == null ? null : (_jsx("span", { className: cn('min-w-0 text-sm text-foreground', labelClassName), children: label })), _jsxs("span", { className: 'flex shrink-0 items-center gap-2', children: [showState ? (_jsx("span", { className: 'w-7 text-xs text-muted-foreground', children: props.checked ? 'On' : 'Off' })) : null, root] })] }));