@lar-works/design-system 0.2.0 → 0.3.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 (433) hide show
  1. package/README.md +5 -1
  2. package/dist/actions/Button.d.ts +39 -1
  3. package/dist/actions/Button.js +39 -9
  4. package/dist/actions/Button.js.map +1 -1
  5. package/dist/actions/ButtonLink.d.ts +5 -1
  6. package/dist/actions/ButtonLink.js +28 -2
  7. package/dist/actions/ButtonLink.js.map +1 -1
  8. package/dist/actions/ButtonRecipes.js +7 -0
  9. package/dist/actions/ButtonRecipes.js.map +1 -0
  10. package/dist/actions/IconButton.d.ts +2 -2
  11. package/dist/actions/IconButton.js +1 -1
  12. package/dist/actions/IconButton.js.map +1 -1
  13. package/dist/actions/ThemeSwitch.js +1 -1
  14. package/dist/board/ActivityLine.d.ts +36 -0
  15. package/dist/board/ActivityLine.js +144 -0
  16. package/dist/board/ActivityLine.js.map +1 -0
  17. package/dist/board/ActivityTrack.d.ts +11 -0
  18. package/dist/board/ActivityTrack.js +25 -0
  19. package/dist/board/ActivityTrack.js.map +1 -0
  20. package/dist/board/AddItem.d.ts +82 -0
  21. package/dist/board/AddItem.js +185 -0
  22. package/dist/board/AddItem.js.map +1 -0
  23. package/dist/board/Archive.d.ts +21 -0
  24. package/dist/board/Archive.js +63 -0
  25. package/dist/board/Archive.js.map +1 -0
  26. package/dist/board/Attention.d.ts +66 -0
  27. package/dist/board/Attention.js +122 -0
  28. package/dist/board/Attention.js.map +1 -0
  29. package/dist/board/BoardShell.d.ts +16 -0
  30. package/dist/board/BoardShell.js +35 -0
  31. package/dist/board/BoardShell.js.map +1 -0
  32. package/dist/board/BoardTitleBar.d.ts +50 -0
  33. package/dist/board/BoardTitleBar.js +125 -0
  34. package/dist/board/BoardTitleBar.js.map +1 -0
  35. package/dist/board/ButtonKinds.d.ts +24 -0
  36. package/dist/board/ButtonKinds.js +19 -0
  37. package/dist/board/ButtonKinds.js.map +1 -0
  38. package/dist/board/Cleanup.d.ts +8 -0
  39. package/dist/board/Cleanup.js +15 -0
  40. package/dist/board/Cleanup.js.map +1 -0
  41. package/dist/board/Counters.d.ts +101 -0
  42. package/dist/board/Counters.js +202 -0
  43. package/dist/board/Counters.js.map +1 -0
  44. package/dist/board/DataAttributes.d.ts +6 -0
  45. package/dist/board/Dependencies.d.ts +17 -0
  46. package/dist/board/Dependencies.js +44 -0
  47. package/dist/board/Dependencies.js.map +1 -0
  48. package/dist/board/Desk.d.ts +52 -0
  49. package/dist/board/Desk.js +130 -0
  50. package/dist/board/Desk.js.map +1 -0
  51. package/dist/board/Dossier.d.ts +100 -0
  52. package/dist/board/Dossier.js +194 -0
  53. package/dist/board/Dossier.js.map +1 -0
  54. package/dist/board/Filters.d.ts +33 -0
  55. package/dist/board/Filters.js +64 -0
  56. package/dist/board/Filters.js.map +1 -0
  57. package/dist/board/ItemDetails.d.ts +167 -0
  58. package/dist/board/ItemDetails.js +339 -0
  59. package/dist/board/ItemDetails.js.map +1 -0
  60. package/dist/board/ItemDialog.d.ts +73 -0
  61. package/dist/board/ItemDialog.js +140 -0
  62. package/dist/board/ItemDialog.js.map +1 -0
  63. package/dist/board/ItemParts.d.ts +42 -0
  64. package/dist/board/ItemParts.js +82 -0
  65. package/dist/board/ItemParts.js.map +1 -0
  66. package/dist/board/ItemProgress.d.ts +56 -0
  67. package/dist/board/ItemProgress.js +138 -0
  68. package/dist/board/ItemProgress.js.map +1 -0
  69. package/dist/board/List.d.ts +65 -0
  70. package/dist/board/List.js +118 -0
  71. package/dist/board/List.js.map +1 -0
  72. package/dist/board/LoadingScreen.d.ts +38 -0
  73. package/dist/board/LoadingScreen.js +74 -0
  74. package/dist/board/LoadingScreen.js.map +1 -0
  75. package/dist/board/NeedsYou.d.ts +13 -0
  76. package/dist/board/NeedsYou.js +31 -0
  77. package/dist/board/NeedsYou.js.map +1 -0
  78. package/dist/board/Onboarding.d.ts +53 -0
  79. package/dist/board/Onboarding.js +122 -0
  80. package/dist/board/Onboarding.js.map +1 -0
  81. package/dist/board/PartsList.d.ts +60 -0
  82. package/dist/board/PartsList.js +115 -0
  83. package/dist/board/PartsList.js.map +1 -0
  84. package/dist/board/ProjectIcon.d.ts +51 -0
  85. package/dist/board/ProjectIcon.js +120 -0
  86. package/dist/board/ProjectIcon.js.map +1 -0
  87. package/dist/board/PullRequests.d.ts +43 -0
  88. package/dist/board/PullRequests.js +83 -0
  89. package/dist/board/PullRequests.js.map +1 -0
  90. package/dist/board/RowStyles.js +14 -0
  91. package/dist/board/RowStyles.js.map +1 -0
  92. package/dist/board/Settings.d.ts +54 -0
  93. package/dist/board/Settings.js +112 -0
  94. package/dist/board/Settings.js.map +1 -0
  95. package/dist/board/Slices.d.ts +32 -0
  96. package/dist/board/Slices.js +88 -0
  97. package/dist/board/Slices.js.map +1 -0
  98. package/dist/board/SourceIcon.d.ts +12 -0
  99. package/dist/board/SourceIcon.js +24 -0
  100. package/dist/board/SourceIcon.js.map +1 -0
  101. package/dist/board/StagePane.d.ts +43 -0
  102. package/dist/board/StagePane.js +97 -0
  103. package/dist/board/StagePane.js.map +1 -0
  104. package/dist/board/StageRow.d.ts +141 -0
  105. package/dist/board/StageRow.js +287 -0
  106. package/dist/board/StageRow.js.map +1 -0
  107. package/dist/board/StageTrack.d.ts +18 -0
  108. package/dist/board/StageTrack.js +38 -0
  109. package/dist/board/StageTrack.js.map +1 -0
  110. package/dist/board/StartControls.d.ts +30 -0
  111. package/dist/board/StartControls.js +51 -0
  112. package/dist/board/StartControls.js.map +1 -0
  113. package/dist/board/StatusColors.d.ts +5 -0
  114. package/dist/board/StatusColors.js +17 -0
  115. package/dist/board/StatusColors.js.map +1 -0
  116. package/dist/board/StatusGlyph.d.ts +18 -0
  117. package/dist/board/StatusGlyph.js +51 -0
  118. package/dist/board/StatusGlyph.js.map +1 -0
  119. package/dist/board/Threads.d.ts +13 -0
  120. package/dist/board/Threads.js +35 -0
  121. package/dist/board/Threads.js.map +1 -0
  122. package/dist/board/TrackerLabels.d.ts +27 -0
  123. package/dist/board/TrackerLabels.js +56 -0
  124. package/dist/board/TrackerLabels.js.map +1 -0
  125. package/dist/board/UpdatePill.d.ts +52 -0
  126. package/dist/board/UpdatePill.js +188 -0
  127. package/dist/board/UpdatePill.js.map +1 -0
  128. package/dist/board/Vocabulary.d.ts +56 -0
  129. package/dist/board/Vocabulary.js +104 -0
  130. package/dist/board/Vocabulary.js.map +1 -0
  131. package/dist/board/Warnings.d.ts +35 -0
  132. package/dist/board/Warnings.js +85 -0
  133. package/dist/board/Warnings.js.map +1 -0
  134. package/dist/board/WorkMap.d.ts +136 -0
  135. package/dist/board/WorkMap.js +274 -0
  136. package/dist/board/WorkMap.js.map +1 -0
  137. package/dist/board/index.d.ts +42 -0
  138. package/dist/collections/CollectionState.d.ts +10 -1
  139. package/dist/collections/CollectionState.js +12 -5
  140. package/dist/collections/CollectionState.js.map +1 -1
  141. package/dist/collections/ResultList.js +1 -1
  142. package/dist/collections/ScrollRow.js +1 -1
  143. package/dist/collections/VirtualList.js +1 -1
  144. package/dist/display/Avatar.d.ts +5 -2
  145. package/dist/display/Avatar.js +2 -2
  146. package/dist/display/Avatar.js.map +1 -1
  147. package/dist/display/Badge.d.ts +6 -1
  148. package/dist/display/Badge.js +9 -4
  149. package/dist/display/Badge.js.map +1 -1
  150. package/dist/display/CheckList.js +1 -1
  151. package/dist/display/Comment.d.ts +12 -0
  152. package/dist/display/Comment.js +39 -0
  153. package/dist/display/Comment.js.map +1 -0
  154. package/dist/display/CopyButton.d.ts +10 -2
  155. package/dist/display/CopyButton.js +29 -16
  156. package/dist/display/CopyButton.js.map +1 -1
  157. package/dist/display/Diagram.d.ts +17 -0
  158. package/dist/display/Diagram.js +49 -0
  159. package/dist/display/Diagram.js.map +1 -0
  160. package/dist/display/ImagePicker.js +1 -1
  161. package/dist/display/InfoBox.js +2 -2
  162. package/dist/display/InsetPanel.d.ts +3 -1
  163. package/dist/display/InsetPanel.js +7 -4
  164. package/dist/display/InsetPanel.js.map +1 -1
  165. package/dist/display/ItemAction.js +2 -2
  166. package/dist/display/LabelChip.d.ts +26 -0
  167. package/dist/display/LabelChip.js +41 -0
  168. package/dist/display/LabelChip.js.map +1 -0
  169. package/dist/display/LabelTint.js +60 -0
  170. package/dist/display/LabelTint.js.map +1 -0
  171. package/dist/display/Person.d.ts +5 -0
  172. package/dist/display/Person.js +19 -0
  173. package/dist/display/Person.js.map +1 -0
  174. package/dist/display/PropertySheet.js +1 -1
  175. package/dist/display/RadioChoice.d.ts +9 -2
  176. package/dist/display/RadioChoice.js +5 -1
  177. package/dist/display/RadioChoice.js.map +1 -1
  178. package/dist/display/RatingLink.js +1 -1
  179. package/dist/display/RichText.d.ts +12 -0
  180. package/dist/display/RichText.js +94 -0
  181. package/dist/display/RichText.js.map +1 -0
  182. package/dist/display/RowList.js +1 -1
  183. package/dist/display/index.d.ts +6 -1
  184. package/dist/feedback/Alert.js +1 -1
  185. package/dist/feedback/AsyncState.js +1 -1
  186. package/dist/feedback/DismissButton.d.ts +12 -0
  187. package/dist/feedback/DismissButton.js +20 -0
  188. package/dist/feedback/DismissButton.js.map +1 -0
  189. package/dist/feedback/ErrorNotification.js +2 -0
  190. package/dist/feedback/ErrorNotification.js.map +1 -1
  191. package/dist/feedback/FormResult.d.ts +16 -0
  192. package/dist/feedback/FormResult.js +30 -0
  193. package/dist/feedback/FormResult.js.map +1 -0
  194. package/dist/feedback/LiveRegion.d.ts +7 -0
  195. package/dist/feedback/LiveRegion.js +15 -0
  196. package/dist/feedback/LiveRegion.js.map +1 -0
  197. package/dist/feedback/Loading.d.ts +19 -0
  198. package/dist/feedback/Loading.js +63 -0
  199. package/dist/feedback/Loading.js.map +1 -0
  200. package/dist/feedback/Notifications.d.ts +35 -1
  201. package/dist/feedback/Notifications.js +196 -4
  202. package/dist/feedback/Notifications.js.map +1 -1
  203. package/dist/feedback/Progress.d.ts +15 -0
  204. package/dist/feedback/Progress.js +38 -0
  205. package/dist/feedback/Progress.js.map +1 -0
  206. package/dist/feedback/ProgressStatusRow.js +1 -1
  207. package/dist/feedback/StatusIndicator.d.ts +6 -1
  208. package/dist/feedback/StatusIndicator.js +19 -5
  209. package/dist/feedback/StatusIndicator.js.map +1 -1
  210. package/dist/feedback/index.d.ts +8 -4
  211. package/dist/forms/Checkbox.js +1 -1
  212. package/dist/forms/ColorSwatches.d.ts +21 -0
  213. package/dist/forms/ColorSwatches.js +26 -0
  214. package/dist/forms/ColorSwatches.js.map +1 -0
  215. package/dist/forms/FormSection.d.ts +68 -6
  216. package/dist/forms/FormSection.js +139 -8
  217. package/dist/forms/FormSection.js.map +1 -1
  218. package/dist/forms/HiddenField.d.ts +6 -0
  219. package/dist/forms/HiddenField.js +13 -0
  220. package/dist/forms/HiddenField.js.map +1 -0
  221. package/dist/forms/Input.d.ts +12 -2
  222. package/dist/forms/Input.js +10 -3
  223. package/dist/forms/Input.js.map +1 -1
  224. package/dist/forms/LabelPicker.d.ts +43 -0
  225. package/dist/forms/LabelPicker.js +107 -0
  226. package/dist/forms/LabelPicker.js.map +1 -0
  227. package/dist/forms/MarkdownEditor.d.ts +21 -0
  228. package/dist/forms/MarkdownEditor.js +175 -0
  229. package/dist/forms/MarkdownEditor.js.map +1 -0
  230. package/dist/forms/MarkdownToolbar.js +204 -0
  231. package/dist/forms/MarkdownToolbar.js.map +1 -0
  232. package/dist/forms/OptionSelect.d.ts +30 -9
  233. package/dist/forms/OptionSelect.js +53 -13
  234. package/dist/forms/OptionSelect.js.map +1 -1
  235. package/dist/forms/Select.d.ts +4 -1
  236. package/dist/forms/Select.js +3 -1
  237. package/dist/forms/Select.js.map +1 -1
  238. package/dist/forms/Switch.d.ts +4 -1
  239. package/dist/forms/Switch.js +5 -2
  240. package/dist/forms/Switch.js.map +1 -1
  241. package/dist/forms/TagInput.js +1 -1
  242. package/dist/forms/index.d.ts +7 -3
  243. package/dist/foundations/AmbientMotion.d.ts +2 -0
  244. package/dist/foundations/AmbientMotion.js +39 -0
  245. package/dist/foundations/AmbientMotion.js.map +1 -0
  246. package/dist/foundations/DesignSystemProvider.d.ts +34 -0
  247. package/dist/foundations/DesignSystemProvider.js +26 -1
  248. package/dist/foundations/DesignSystemProvider.js.map +1 -1
  249. package/dist/foundations/index.d.ts +2 -1
  250. package/dist/icons/BrandIcons.d.ts +8 -2
  251. package/dist/icons/BrandIcons.js +14 -3
  252. package/dist/icons/BrandIcons.js.map +1 -1
  253. package/dist/icons/dynamic.d.ts +2 -0
  254. package/dist/icons/dynamic.js +1 -0
  255. package/dist/icons/index.d.ts +2 -2
  256. package/dist/icons/index.js +1 -1
  257. package/dist/icons.d.ts +2 -2
  258. package/dist/icons.js +1 -1
  259. package/dist/index.d.ts +71 -10
  260. package/dist/index.js +78 -21
  261. package/dist/layout/Site.js +1 -1
  262. package/dist/layout/TitleBar.js +1 -1
  263. package/dist/layout/index.d.ts +2 -2
  264. package/dist/layout/index.js +3 -3
  265. package/dist/layout/toolbar/CommandPaletteTrigger.d.ts +17 -2
  266. package/dist/layout/toolbar/CommandPaletteTrigger.js +89 -6
  267. package/dist/layout/toolbar/CommandPaletteTrigger.js.map +1 -1
  268. package/dist/layout/toolbar/TriggerFit.js +56 -0
  269. package/dist/layout/toolbar/TriggerFit.js.map +1 -0
  270. package/dist/navigation/CollectionBrowseSelector.js +1 -1
  271. package/dist/navigation/CollectionViewToggle.d.ts +26 -0
  272. package/dist/navigation/CollectionViewToggle.js +54 -23
  273. package/dist/navigation/CollectionViewToggle.js.map +1 -1
  274. package/dist/navigation/DrilldownBrowseSelector.js +1 -1
  275. package/dist/navigation/FolderSelector.js +2 -2
  276. package/dist/navigation/SortMenu.d.ts +10 -0
  277. package/dist/navigation/SortMenu.js +33 -0
  278. package/dist/navigation/SortMenu.js.map +1 -0
  279. package/dist/navigation/index.d.ts +3 -2
  280. package/dist/overlays/CommandPalette.d.ts +38 -4
  281. package/dist/overlays/CommandPalette.js +140 -54
  282. package/dist/overlays/CommandPalette.js.map +1 -1
  283. package/dist/overlays/Drawer.js +1 -1
  284. package/dist/overlays/DropdownMenu.d.ts +7 -1
  285. package/dist/overlays/DropdownMenu.js +13 -2
  286. package/dist/overlays/DropdownMenu.js.map +1 -1
  287. package/dist/overlays/HelpTip.d.ts +8 -0
  288. package/dist/overlays/HelpTip.js +29 -0
  289. package/dist/overlays/HelpTip.js.map +1 -0
  290. package/dist/overlays/ImageViewer.js +2 -2
  291. package/dist/overlays/Modal.d.ts +5 -0
  292. package/dist/overlays/Modal.js +17 -2
  293. package/dist/overlays/Modal.js.map +1 -1
  294. package/dist/overlays/ModalExpandButton.d.ts +18 -0
  295. package/dist/overlays/ModalExpandButton.js +43 -0
  296. package/dist/overlays/ModalExpandButton.js.map +1 -0
  297. package/dist/overlays/Popover.d.ts +2 -1
  298. package/dist/overlays/Popover.js +1 -0
  299. package/dist/overlays/Popover.js.map +1 -1
  300. package/dist/overlays/index.d.ts +4 -2
  301. package/dist/showcase/Cards.js +1 -1
  302. package/dist/showcase/FeatureRow.js +1 -1
  303. package/dist/showcase/PhotoSearchConcept.js +1 -1
  304. package/dist/showcase/ProductBand.js +1 -1
  305. package/dist/showcase/Status.js +1 -1
  306. package/dist/typography/Code.d.ts +18 -0
  307. package/dist/typography/Code.js +24 -0
  308. package/dist/typography/Code.js.map +1 -0
  309. package/dist/typography/Link.d.ts +7 -2
  310. package/dist/typography/Link.js +15 -5
  311. package/dist/typography/Link.js.map +1 -1
  312. package/dist/typography/Typography.d.ts +19 -1
  313. package/dist/typography/Typography.js +11 -3
  314. package/dist/typography/Typography.js.map +1 -1
  315. package/dist/typography/index.d.ts +3 -3
  316. package/package.json +26 -3
  317. package/src/actions/Button.tsx +78 -11
  318. package/src/actions/ButtonLink.tsx +34 -0
  319. package/src/actions/ButtonRecipes.ts +10 -0
  320. package/src/actions/IconButton.tsx +7 -4
  321. package/src/board/ActivityLine.tsx +176 -0
  322. package/src/board/ActivityTrack.tsx +23 -0
  323. package/src/board/AddItem.tsx +259 -0
  324. package/src/board/Archive.tsx +75 -0
  325. package/src/board/Attention.tsx +135 -0
  326. package/src/board/BoardShell.tsx +30 -0
  327. package/src/board/BoardTitleBar.tsx +167 -0
  328. package/src/board/ButtonKinds.ts +32 -0
  329. package/src/board/Cleanup.tsx +19 -0
  330. package/src/board/Counters.tsx +224 -0
  331. package/src/board/DataAttributes.ts +3 -0
  332. package/src/board/Dependencies.tsx +49 -0
  333. package/src/board/Desk.tsx +155 -0
  334. package/src/board/Dossier.tsx +262 -0
  335. package/src/board/Filters.tsx +85 -0
  336. package/src/board/ItemDetails.tsx +435 -0
  337. package/src/board/ItemDialog.tsx +179 -0
  338. package/src/board/ItemParts.tsx +128 -0
  339. package/src/board/ItemProgress.tsx +164 -0
  340. package/src/board/List.tsx +154 -0
  341. package/src/board/LoadingScreen.tsx +78 -0
  342. package/src/board/NeedsYou.tsx +30 -0
  343. package/src/board/Onboarding.tsx +124 -0
  344. package/src/board/PartsList.tsx +160 -0
  345. package/src/board/ProjectIcon.tsx +172 -0
  346. package/src/board/PullRequests.tsx +106 -0
  347. package/src/board/RowStyles.ts +17 -0
  348. package/src/board/Settings.tsx +124 -0
  349. package/src/board/Slices.tsx +103 -0
  350. package/src/board/SourceIcon.tsx +33 -0
  351. package/src/board/StagePane.tsx +128 -0
  352. package/src/board/StageRow.tsx +320 -0
  353. package/src/board/StageTrack.tsx +61 -0
  354. package/src/board/StartControls.tsx +77 -0
  355. package/src/board/StatusColors.ts +28 -0
  356. package/src/board/StatusGlyph.tsx +70 -0
  357. package/src/board/Threads.tsx +38 -0
  358. package/src/board/TrackerLabels.tsx +75 -0
  359. package/src/board/UpdatePill.tsx +222 -0
  360. package/src/board/Vocabulary.tsx +155 -0
  361. package/src/board/Warnings.tsx +83 -0
  362. package/src/board/WorkMap.tsx +436 -0
  363. package/src/board/base.css +121 -0
  364. package/src/board/button-kinds.css +8 -0
  365. package/src/board/index.ts +224 -0
  366. package/src/board/items.css +75 -0
  367. package/src/board/loading-screen.css +171 -0
  368. package/src/board/rows.css +180 -0
  369. package/src/board/title-bar.css +56 -0
  370. package/src/board/tokens.css +52 -0
  371. package/src/board.css +19 -0
  372. package/src/collections/CollectionState.tsx +20 -7
  373. package/src/display/Avatar.tsx +6 -3
  374. package/src/display/Badge.tsx +25 -3
  375. package/src/display/Comment.tsx +26 -0
  376. package/src/display/CopyButton.tsx +48 -18
  377. package/src/display/Diagram.tsx +59 -0
  378. package/src/display/InsetPanel.tsx +4 -1
  379. package/src/display/LabelChip.tsx +73 -0
  380. package/src/display/LabelTint.ts +72 -0
  381. package/src/display/Person.tsx +11 -0
  382. package/src/display/RadioChoice.tsx +11 -2
  383. package/src/display/RichText.tsx +114 -0
  384. package/src/display/index.ts +5 -0
  385. package/src/feedback/DismissButton.tsx +28 -0
  386. package/src/feedback/ErrorNotification.ts +3 -0
  387. package/src/feedback/FormResult.tsx +50 -0
  388. package/src/feedback/LiveRegion.tsx +10 -0
  389. package/src/feedback/Loading.tsx +75 -0
  390. package/src/feedback/Notifications.tsx +267 -2
  391. package/src/feedback/Progress.tsx +44 -0
  392. package/src/feedback/StatusIndicator.tsx +34 -3
  393. package/src/feedback/index.ts +12 -2
  394. package/src/forms/ColorSwatches.tsx +50 -0
  395. package/src/forms/FormSection.tsx +245 -10
  396. package/src/forms/HiddenField.tsx +4 -0
  397. package/src/forms/Input.tsx +26 -4
  398. package/src/forms/LabelPicker.tsx +140 -0
  399. package/src/forms/MarkdownEditor.tsx +283 -0
  400. package/src/forms/MarkdownToolbar.tsx +267 -0
  401. package/src/forms/OptionSelect.tsx +110 -25
  402. package/src/forms/Select.tsx +20 -13
  403. package/src/forms/Switch.tsx +16 -2
  404. package/src/forms/index.ts +16 -2
  405. package/src/foundations/AmbientMotion.ts +51 -0
  406. package/src/foundations/DesignSystemProvider.tsx +19 -0
  407. package/src/foundations/index.ts +1 -0
  408. package/src/foundations/theme.css +64 -0
  409. package/src/icons/BrandIcons.tsx +12 -3
  410. package/src/icons/dynamic.ts +4 -0
  411. package/src/icons/index.ts +1 -1
  412. package/src/index.ts +2 -1
  413. package/src/layout/index.ts +1 -1
  414. package/src/layout/toolbar/CommandPaletteTrigger.tsx +187 -31
  415. package/src/layout/toolbar/TriggerFit.ts +84 -0
  416. package/src/navigation/CollectionViewToggle.tsx +94 -24
  417. package/src/navigation/SortMenu.tsx +41 -0
  418. package/src/navigation/index.ts +2 -1
  419. package/src/overlays/CommandPalette.tsx +190 -60
  420. package/src/overlays/DropdownMenu.tsx +12 -1
  421. package/src/overlays/HelpTip.tsx +29 -0
  422. package/src/overlays/Modal.tsx +23 -0
  423. package/src/overlays/ModalExpandButton.tsx +48 -0
  424. package/src/overlays/Popover.tsx +3 -1
  425. package/src/overlays/index.ts +9 -1
  426. package/src/showcase.css +6 -0
  427. package/src/styles.css +9 -1
  428. package/src/typography/Code.tsx +24 -0
  429. package/src/typography/Link.tsx +19 -10
  430. package/src/typography/Typography.tsx +25 -2
  431. package/src/typography/index.ts +1 -1
  432. package/dist/feedback/index.js +0 -11
  433. package/dist/typography/index.js +0 -4
@@ -0,0 +1,85 @@
1
+ import { BrandMark } from "../display/BrandMark.js";
2
+ import { DismissButton } from "../feedback/DismissButton.js";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ // src/board/Warnings.tsx
5
+ /** The board's warnings, in a banner under the title bar: connection problems stay in a collapsed list, inline
6
+ * details that never open a notification or a dialog. */
7
+ function BoardWarnings({ lead, summary, children, action }) {
8
+ return /* @__PURE__ */ jsx("aside", {
9
+ "data-board-notices": true,
10
+ className: "shrink-0 border-b bg-(--warning-surface) px-6 py-2 text-(--foreground)",
11
+ children: /* @__PURE__ */ jsxs("div", {
12
+ className: "flex items-start justify-between gap-3",
13
+ children: [/* @__PURE__ */ jsxs("div", {
14
+ className: "min-w-0 flex-1",
15
+ children: [lead, summary ? /* @__PURE__ */ jsxs("details", { children: [/* @__PURE__ */ jsx("summary", {
16
+ className: "cursor-pointer text-xs font-medium",
17
+ children: summary
18
+ }), /* @__PURE__ */ jsx("div", {
19
+ className: "mt-2 max-h-48 overflow-auto",
20
+ children
21
+ })] }) : null]
22
+ }), action]
23
+ })
24
+ });
25
+ }
26
+ /** One warning in the banner: its title, what to do, and a close button. Commands in it wrap anywhere. */
27
+ function BoardWarning({ name, title, dismissLabel, onDismiss, action, children }) {
28
+ return /* @__PURE__ */ jsx("div", {
29
+ "data-slot": "notice",
30
+ className: "relative border-t py-3 pr-8 text-xs first:border-t-0 first:py-1",
31
+ children: /* @__PURE__ */ jsxs("div", {
32
+ "data-warning": name,
33
+ className: "[&_code]:wrap-anywhere",
34
+ children: [
35
+ /* @__PURE__ */ jsx(DismissButton, {
36
+ label: dismissLabel,
37
+ onClick: onDismiss
38
+ }),
39
+ /* @__PURE__ */ jsx("div", {
40
+ "data-slot": "title",
41
+ className: "font-medium",
42
+ children: title
43
+ }),
44
+ /* @__PURE__ */ jsx("div", {
45
+ "data-slot": "description",
46
+ className: "text-base-700 mt-1",
47
+ children
48
+ }),
49
+ action && /* @__PURE__ */ jsx("div", {
50
+ className: "mt-2",
51
+ children: action
52
+ })
53
+ ]
54
+ })
55
+ });
56
+ }
57
+ /** What fills the board's main area while a tool it can't work without is missing: the Lar mark, what's missing, why
58
+ * and how to fix it, and a way to look again. */
59
+ function ToolMissing({ title, children, action }) {
60
+ return /* @__PURE__ */ jsx("div", {
61
+ className: "tool-missing grid flex-1 place-items-center p-5",
62
+ children: /* @__PURE__ */ jsxs("div", {
63
+ className: "tool-missing-box max-w-130 rounded-(--radius) border bg-(--card) px-6 py-5 [&_code]:wrap-anywhere [&_code]:text-(--foreground)",
64
+ role: "alert",
65
+ children: [
66
+ /* @__PURE__ */ jsx(BrandMark, { label: "Lar" }),
67
+ /* @__PURE__ */ jsx("h1", {
68
+ className: "mt-3 mb-0 text-(length:--text-base) font-semibold tracking-[-0.01em]",
69
+ children: title
70
+ }),
71
+ /* @__PURE__ */ jsx("p", {
72
+ className: "mt-3 mb-0 text-(--muted-foreground)",
73
+ children
74
+ }),
75
+ /* @__PURE__ */ jsx("p", {
76
+ className: "mt-3 mb-0 text-(--muted-foreground)",
77
+ children: action
78
+ })
79
+ ]
80
+ })
81
+ });
82
+ }
83
+ export { BoardWarning, BoardWarnings, ToolMissing };
84
+
85
+ //# sourceMappingURL=Warnings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Warnings.js","names":[],"sources":["../../src/board/Warnings.tsx"],"sourcesContent":["import type { MouseEvent, ReactNode } from 'react';\n\nimport { BrandMark } from '../display/BrandMark';\nimport { DismissButton } from '../feedback/DismissButton';\n\ninterface BoardWarningsProps {\n /** A warning shown open above the rest, such as a lost board server, which every number on the page depends on. */\n lead?: ReactNode;\n /** The collapsed list's summary, such as \"2 connections need attention\"; without it, no list. */\n summary?: ReactNode;\n /** The warnings in the collapsed list. */\n children?: ReactNode;\n /** At the banner's right, such as Diagnostics. */\n action: ReactNode;\n}\n\n/** The board's warnings, in a banner under the title bar: connection problems stay in a collapsed list, inline\n * details that never open a notification or a dialog. */\nexport function BoardWarnings({ lead, summary, children, action }: BoardWarningsProps) {\n return (\n <aside data-board-notices className=\"shrink-0 border-b bg-(--warning-surface) px-6 py-2 text-(--foreground)\">\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"min-w-0 flex-1\">\n {lead}\n {summary ? (\n <details>\n <summary className=\"cursor-pointer text-xs font-medium\">{summary}</summary>\n <div className=\"mt-2 max-h-48 overflow-auto\">{children}</div>\n </details>\n ) : null}\n </div>\n {action}\n </div>\n </aside>\n );\n}\n\ninterface BoardWarningProps {\n /** What the warning is about, as `data-warning`. */\n name: string;\n title: string;\n dismissLabel: string;\n onDismiss: (event: MouseEvent<HTMLButtonElement>) => void;\n /** Under the text, such as a button that fixes it. */\n action?: ReactNode;\n children: ReactNode;\n}\n\n/** One warning in the banner: its title, what to do, and a close button. Commands in it wrap anywhere. */\nexport function BoardWarning({ name, title, dismissLabel, onDismiss, action, children }: BoardWarningProps) {\n return (\n <div data-slot=\"notice\" className=\"relative border-t py-3 pr-8 text-xs first:border-t-0 first:py-1\">\n <div data-warning={name} className=\"[&_code]:wrap-anywhere\">\n <DismissButton label={dismissLabel} onClick={onDismiss} />\n <div data-slot=\"title\" className=\"font-medium\">\n {title}\n </div>\n <div data-slot=\"description\" className=\"text-base-700 mt-1\">\n {children}\n </div>\n {action && <div className=\"mt-2\">{action}</div>}\n </div>\n </div>\n );\n}\n\n/** What fills the board's main area while a tool it can't work without is missing: the Lar mark, what's missing, why\n * and how to fix it, and a way to look again. */\nexport function ToolMissing({ title, children, action }: { title: string; children: ReactNode; action: ReactNode }) {\n return (\n <div className=\"tool-missing grid flex-1 place-items-center p-5\">\n <div\n className=\"tool-missing-box max-w-130 rounded-(--radius) border bg-(--card) px-6 py-5 [&_code]:wrap-anywhere [&_code]:text-(--foreground)\"\n role=\"alert\"\n >\n <BrandMark label=\"Lar\" />\n <h1 className=\"mt-3 mb-0 text-(length:--text-base) font-semibold tracking-[-0.01em]\">{title}</h1>\n <p className=\"mt-3 mb-0 text-(--muted-foreground)\">{children}</p>\n <p className=\"mt-3 mb-0 text-(--muted-foreground)\">{action}</p>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;AAkBA,SAAgB,cAAc,EAAE,MAAM,SAAS,UAAU,UAA8B;CACnF,OACI,oBAAC,SAAD;EAAO,sBAAA;EAAmB,WAAU;EAChC,UAAA,qBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACI,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACK,MACA,UACG,qBAAC,WAAD,EAAA,UAAA,CACI,oBAAC,WAAD;KAAS,WAAU;KAAsC,UAAA;IAAiB,CAAA,GAC1E,oBAAC,OAAD;KAAK,WAAU;KAA+B;IAAc,CAAA,CACvD,EAAA,CAAA,IACT,IACH;GACJ,CAAA,GAAA,MACA;;CACF,CAAA;AAEf;;AAcA,SAAgB,aAAa,EAAE,MAAM,OAAO,cAAc,WAAW,QAAQ,YAA+B;CACxG,OACI,oBAAC,OAAD;EAAK,aAAU;EAAS,WAAU;EAC9B,UAAA,qBAAC,OAAD;GAAK,gBAAc;GAAM,WAAU;GAAnC,UAAA;IACI,oBAAC,eAAD;KAAe,OAAO;KAAc,SAAS;IAAY,CAAA;IACzD,oBAAC,OAAD;KAAK,aAAU;KAAQ,WAAU;KAC5B,UAAA;IACA,CAAA;IACL,oBAAC,OAAD;KAAK,aAAU;KAAc,WAAU;KAClC;IACA,CAAA;IACJ,UAAU,oBAAC,OAAD;KAAK,WAAU;KAAQ,UAAA;IAAY,CAAA;GAC7C;;CACJ,CAAA;AAEb;;;AAIA,SAAgB,YAAY,EAAE,OAAO,UAAU,UAAqE;CAChH,OACI,oBAAC,OAAD;EAAK,WAAU;EACX,UAAA,qBAAC,OAAD;GACI,WAAU;GACV,MAAK;GAFT,UAAA;IAII,oBAAC,WAAD,EAAW,OAAM,MAAO,CAAA;IACxB,oBAAC,MAAD;KAAI,WAAU;KAAwE,UAAA;IAAU,CAAA;IAChG,oBAAC,KAAD;KAAG,WAAU;KAAuC;IAAY,CAAA;IAChE,oBAAC,KAAD;KAAG,WAAU;KAAuC,UAAA;IAAU,CAAA;GAC7D;;CACJ,CAAA;AAEb"}
@@ -0,0 +1,136 @@
1
+ import { ReactNode, Ref } from "react";
2
+ /** The map's frame, which scrolls sideways when the map is wider; `frameRef` measures its width. */
3
+ export declare function WorkMapFrame({ frameRef, children }: {
4
+ frameRef?: Ref<HTMLDivElement>;
5
+ children: ReactNode;
6
+ }): import("react").JSX.Element;
7
+ /** The map's drawing area, `width` by `height` pixels, which places what it holds absolutely. */
8
+ export declare function MapCanvas({ width, height, children }: {
9
+ width: number;
10
+ height: number;
11
+ children: ReactNode;
12
+ }): import("react").JSX.Element;
13
+ /** A lane's band across the map, banded on odd `index`es, with its `name` in a label that stays in view as the map
14
+ * scrolls. */
15
+ export declare function MapBand({ index, top, height, width, labelWidth, children }: {
16
+ index: number;
17
+ top: number;
18
+ height: number;
19
+ width: number;
20
+ labelWidth: number;
21
+ children: ReactNode;
22
+ }): import("react").JSX.Element;
23
+ /** A lane's name with its icon: the decisions' lane, or the dossier's own repository's builds. */
24
+ export declare function MapLaneName({ lane, children }: {
25
+ lane: 'decisions' | 'builds';
26
+ children: string;
27
+ }): import("react").JSX.Element;
28
+ /** An arrow from one part to another: `d` is its line; a `done` one is solid in the done colour. `lit` draws it bold
29
+ * while either end is hovered, and `dim` faint while another is. */
30
+ export interface MapEdge {
31
+ key: string;
32
+ d: string;
33
+ done: boolean;
34
+ lit: boolean;
35
+ dim: boolean;
36
+ }
37
+ /** The map's arrows, under its parts. `markerId` is unique to the map. */
38
+ export declare function MapEdges({ width, height, markerId, edges }: {
39
+ width: number;
40
+ height: number;
41
+ markerId: string;
42
+ edges: MapEdge[];
43
+ }): import("react").JSX.Element;
44
+ /** An arrow's label, at `left`/`top` and at most `maxWidth` wide: a button that opens what it stands for, its tooltip
45
+ * naming them (`names`). */
46
+ export declare function MapEdgeLabel({ edge, label, names, left, top, maxWidth, onOpen }: {
47
+ edge: string;
48
+ label: string;
49
+ names: string;
50
+ left: number;
51
+ top: number;
52
+ maxWidth: number;
53
+ onOpen: () => void;
54
+ }): import("react").JSX.Element;
55
+ /** A node's place on the map, faint while `dim`; hovering it lights its arrows. */
56
+ export declare function MapNode({ left, top, dim, onHover, children }: {
57
+ left: number;
58
+ top: number;
59
+ dim: boolean;
60
+ onHover: (hovered: boolean) => void;
61
+ children: ReactNode;
62
+ }): import("react").JSX.Element;
63
+ /** The group finished history folds into, across the map at `top`: a button with its `glyph` and `text` that shows or
64
+ * hides the finished parts, saying which it does. */
65
+ export declare function MapHistoryGroup({ open, top, height, dim, glyph, text, showLabel, hideLabel, onToggle, onHover }: {
66
+ open: boolean;
67
+ top: number;
68
+ height: number;
69
+ dim: boolean;
70
+ glyph: ReactNode;
71
+ text: string;
72
+ showLabel: string;
73
+ hideLabel: string;
74
+ onToggle: () => void;
75
+ onHover: (hovered: boolean) => void;
76
+ }): import("react").JSX.Element;
77
+ /** The finished parts under the map, `width` wide, one HistoryRow each. */
78
+ export declare function MapHistoryList({ width, children }: {
79
+ width: number;
80
+ children: ReactNode;
81
+ }): import("react").JSX.Element;
82
+ /** A finished part as one row of the history: its glyph, kind, title opening it, what it followed, and at its right its
83
+ * repository, pull requests and thread. */
84
+ export declare function HistoryRow({ id, glyph, kind, name, onOpen, title, after, afterTitle, side }: {
85
+ id: string;
86
+ glyph: ReactNode;
87
+ kind: ReactNode;
88
+ /** The part's full name, for its title's tooltip. */
89
+ name: string;
90
+ onOpen: () => void;
91
+ title: ReactNode;
92
+ after?: string | undefined;
93
+ afterTitle?: string | undefined;
94
+ side: ReactNode;
95
+ }): import("react").JSX.Element;
96
+ declare const NODE_TONE: {
97
+ readonly default: 'border-(--border)';
98
+ readonly asks: 'border-[color-mix(in_srgb,var(--warning)_45%,var(--border))] shadow-[inset_3px_0_0_var(--warning)]';
99
+ readonly waits: 'border-dashed border-(--input)';
100
+ };
101
+ /**
102
+ * A part on the map, `width` by `height`: a card that opens it (`openLabel` names the button, `title` says it all),
103
+ * with its `source` in the corner, a `head` line (kind, repository, fields) with its `action` at the right, its title,
104
+ * its `glyph` and `facts`, and its `slices` along the bottom. It `asks` (an answer from you) or `waits` (on other work)
105
+ * in its border's tone, and is ringed while `picked`.
106
+ */
107
+ export declare function MapPartNode({ id, width, height, tone, picked, openLabel, title, onOpen, source, head, action, name, glyph, facts, slices }: {
108
+ id: string;
109
+ width: number;
110
+ height: number;
111
+ tone?: keyof typeof NODE_TONE;
112
+ picked: boolean;
113
+ openLabel: string;
114
+ title: string;
115
+ onOpen: () => void;
116
+ source: ReactNode;
117
+ head: ReactNode;
118
+ action?: ReactNode;
119
+ name: ReactNode;
120
+ glyph: ReactNode;
121
+ facts: string;
122
+ slices?: ReactNode;
123
+ }): import("react").JSX.Element;
124
+ /** The end-to-end check at the end of the map, `width` by `height`: its `label`, title, then its `glyph` and `steps`
125
+ * (how many, and what it comes after), which `stepsTitle` says in full. */
126
+ export declare function MapCheckNode({ width, height, label, title, glyph, steps, stepsTitle }: {
127
+ width: number;
128
+ height: number;
129
+ label: string;
130
+ title: string;
131
+ glyph: ReactNode;
132
+ steps: string;
133
+ stepsTitle?: string | undefined;
134
+ }): import("react").JSX.Element;
135
+ export {};
136
+ //# sourceMappingURL=WorkMap.d.ts.map
@@ -0,0 +1,274 @@
1
+ import { Tooltip, TooltipPopup, TooltipTrigger } from "../overlays/Tooltip.js";
2
+ import { ChevronDownIcon, ChevronRightIcon, FlaskConicalIcon, HammerIcon, LightbulbIcon } from "lucide-react";
3
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
4
+ // src/board/WorkMap.tsx
5
+ /** The map's frame, which scrolls sideways when the map is wider; `frameRef` measures its width. */
6
+ function WorkMapFrame({ frameRef, children }) {
7
+ return /* @__PURE__ */ jsx("div", {
8
+ ref: frameRef,
9
+ className: "overflow-x-auto rounded-lg border border-(--border) bg-(--background)",
10
+ "data-work-map": true,
11
+ children
12
+ });
13
+ }
14
+ /** The map's drawing area, `width` by `height` pixels, which places what it holds absolutely. */
15
+ function MapCanvas({ width, height, children }) {
16
+ return /* @__PURE__ */ jsx("div", {
17
+ className: "relative",
18
+ style: {
19
+ width,
20
+ height
21
+ },
22
+ "data-map-canvas": true,
23
+ children
24
+ });
25
+ }
26
+ /** A lane's band across the map, banded on odd `index`es, with its `name` in a label that stays in view as the map
27
+ * scrolls. */
28
+ function MapBand({ index, top, height, width, labelWidth, children }) {
29
+ return /* @__PURE__ */ jsx("div", {
30
+ className: `absolute left-0 ${index ? "border-t border-(--border)" : ""} ${index % 2 ? "bg-[color-mix(in_srgb,var(--muted)_50%,transparent)]" : ""}`,
31
+ style: {
32
+ top,
33
+ height,
34
+ width
35
+ },
36
+ children: /* @__PURE__ */ jsx("div", {
37
+ className: "sticky left-0 flex h-full flex-col justify-center gap-0.5 bg-[color-mix(in_srgb,var(--background)_85%,transparent)] px-3",
38
+ style: { width: labelWidth },
39
+ children: /* @__PURE__ */ jsx("span", {
40
+ className: "flex min-w-0 items-center gap-1.5 text-xs font-medium",
41
+ children
42
+ })
43
+ })
44
+ });
45
+ }
46
+ /** A lane's name with its icon: the decisions' lane, or the dossier's own repository's builds. */
47
+ function MapLaneName({ lane, children }) {
48
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(lane === "decisions" ? LightbulbIcon : HammerIcon, { className: "size-3.5 text-(--muted-foreground)" }), children] });
49
+ }
50
+ /** The map's arrows, under its parts. `markerId` is unique to the map. */
51
+ function MapEdges({ width, height, markerId, edges }) {
52
+ return /* @__PURE__ */ jsxs("svg", {
53
+ className: "pointer-events-none absolute inset-0",
54
+ width,
55
+ height,
56
+ "aria-hidden": "true",
57
+ children: [/* @__PURE__ */ jsx("defs", { children: ["done", "open"].map((k) => /* @__PURE__ */ jsx("marker", {
58
+ id: `${markerId}-${k}`,
59
+ viewBox: "0 0 8 8",
60
+ refX: "7",
61
+ refY: "4",
62
+ markerWidth: "7",
63
+ markerHeight: "7",
64
+ orient: "auto",
65
+ children: /* @__PURE__ */ jsx("path", {
66
+ d: "M0 0 8 4 0 8z",
67
+ fill: k === "done" ? "var(--st-done)" : "var(--muted-foreground)"
68
+ })
69
+ }, k)) }), edges.map((e) => /* @__PURE__ */ jsx("path", {
70
+ d: e.d,
71
+ fill: "none",
72
+ "data-edge": e.key,
73
+ stroke: e.done ? "var(--st-done)" : "var(--muted-foreground)",
74
+ strokeWidth: e.lit ? 2.5 : 1.5,
75
+ strokeDasharray: e.done ? void 0 : "5 4",
76
+ opacity: e.dim ? .2 : e.done ? .7 : .9,
77
+ markerEnd: `url(#${markerId}-${e.done ? "done" : "open"})`
78
+ }, e.key))]
79
+ });
80
+ }
81
+ /** An arrow's label, at `left`/`top` and at most `maxWidth` wide: a button that opens what it stands for, its tooltip
82
+ * naming them (`names`). */
83
+ function MapEdgeLabel({ edge, label, names, left, top, maxWidth, onOpen }) {
84
+ return /* @__PURE__ */ jsxs(Tooltip, { children: [/* @__PURE__ */ jsx(TooltipTrigger, {
85
+ asChild: true,
86
+ children: /* @__PURE__ */ jsx("button", {
87
+ type: "button",
88
+ "aria-label": `${label}: ${names}`,
89
+ onClick: onOpen,
90
+ "data-edge-label": edge,
91
+ className: "absolute truncate rounded text-left text-[11px] leading-3.5 text-(--muted-foreground) hover:text-(--foreground) hover:underline focus-visible:outline-2 focus-visible:outline-(--primary)",
92
+ style: {
93
+ left,
94
+ top,
95
+ maxWidth
96
+ },
97
+ children: label
98
+ })
99
+ }), /* @__PURE__ */ jsx(TooltipPopup, {
100
+ side: "top",
101
+ children: names
102
+ })] });
103
+ }
104
+ /** A node's place on the map, faint while `dim`; hovering it lights its arrows. */
105
+ function MapNode({ left, top, dim, onHover, children }) {
106
+ return /* @__PURE__ */ jsx("div", {
107
+ className: `absolute transition-opacity ${dim ? "opacity-40" : ""}`,
108
+ style: {
109
+ left,
110
+ top
111
+ },
112
+ onMouseEnter: () => onHover(true),
113
+ onMouseLeave: () => onHover(false),
114
+ children
115
+ });
116
+ }
117
+ /** The group finished history folds into, across the map at `top`: a button with its `glyph` and `text` that shows or
118
+ * hides the finished parts, saying which it does. */
119
+ function MapHistoryGroup({ open, top, height, dim, glyph, text, showLabel, hideLabel, onToggle, onHover }) {
120
+ return /* @__PURE__ */ jsxs("button", {
121
+ type: "button",
122
+ "aria-expanded": open,
123
+ onClick: onToggle,
124
+ "data-map-history": true,
125
+ onMouseEnter: () => onHover(true),
126
+ onMouseLeave: () => onHover(false),
127
+ className: `absolute flex items-center gap-2 rounded-lg border border-(--border) bg-(--card) px-2.5 text-left text-xs shadow-xs transition-opacity hover:bg-(--accent) focus-visible:outline-2 focus-visible:outline-(--primary) ${dim ? "opacity-40" : ""}`,
128
+ style: {
129
+ left: 12,
130
+ right: 12,
131
+ top,
132
+ height
133
+ },
134
+ children: [
135
+ glyph,
136
+ /* @__PURE__ */ jsx("span", {
137
+ className: "min-w-0 truncate font-medium",
138
+ children: text
139
+ }),
140
+ /* @__PURE__ */ jsx("span", {
141
+ className: "inline-flex shrink-0 items-center gap-1 text-(--muted-foreground)",
142
+ children: open ? /* @__PURE__ */ jsxs(Fragment, { children: [hideLabel, /* @__PURE__ */ jsx(ChevronDownIcon, { className: "size-3.5" })] }) : /* @__PURE__ */ jsxs(Fragment, { children: [showLabel, /* @__PURE__ */ jsx(ChevronRightIcon, { className: "size-3.5" })] })
143
+ })
144
+ ]
145
+ });
146
+ }
147
+ /** The finished parts under the map, `width` wide, one HistoryRow each. */
148
+ function MapHistoryList({ width, children }) {
149
+ return /* @__PURE__ */ jsx("ol", {
150
+ className: "m-0 grid list-none grid-cols-[repeat(auto-fill,minmax(min(100%,28rem),1fr))] gap-x-4 gap-y-1 px-3 pb-3",
151
+ style: { width },
152
+ "data-map-history-parts": true,
153
+ children
154
+ });
155
+ }
156
+ /** A finished part as one row of the history: its glyph, kind, title opening it, what it followed, and at its right its
157
+ * repository, pull requests and thread. */
158
+ function HistoryRow({ id, glyph, kind, name, onOpen, title, after, afterTitle, side }) {
159
+ return /* @__PURE__ */ jsxs("li", {
160
+ className: "flex min-h-12 min-w-0 items-center gap-3 rounded-md px-3 text-[13px] hover:bg-(--soft)",
161
+ "data-history-part": id,
162
+ children: [
163
+ glyph,
164
+ /* @__PURE__ */ jsx("span", {
165
+ className: "w-22 shrink-0",
166
+ children: kind
167
+ }),
168
+ /* @__PURE__ */ jsx("button", {
169
+ type: "button",
170
+ onClick: onOpen,
171
+ title: name,
172
+ className: "min-w-0 truncate rounded text-left hover:underline focus-visible:outline-2 focus-visible:outline-(--primary)",
173
+ children: title
174
+ }),
175
+ after && /* @__PURE__ */ jsx("span", {
176
+ className: "min-w-0 shrink-[1000] truncate text-[11px] text-(--muted-foreground)",
177
+ title: afterTitle,
178
+ children: after
179
+ }),
180
+ /* @__PURE__ */ jsx("span", {
181
+ className: "ml-auto flex shrink-0 items-center gap-2 text-[11px] text-(--muted-foreground)",
182
+ children: side
183
+ })
184
+ ]
185
+ });
186
+ }
187
+ const NODE_TONE = {
188
+ default: "border-(--border)",
189
+ asks: "border-[color-mix(in_srgb,var(--warning)_45%,var(--border))] shadow-[inset_3px_0_0_var(--warning)]",
190
+ waits: "border-dashed border-(--input)"
191
+ };
192
+ /**
193
+ * A part on the map, `width` by `height`: a card that opens it (`openLabel` names the button, `title` says it all),
194
+ * with its `source` in the corner, a `head` line (kind, repository, fields) with its `action` at the right, its title,
195
+ * its `glyph` and `facts`, and its `slices` along the bottom. It `asks` (an answer from you) or `waits` (on other work)
196
+ * in its border's tone, and is ringed while `picked`.
197
+ */
198
+ function MapPartNode({ id, width, height, tone = "default", picked, openLabel, title, onOpen, source, head, action, name, glyph, facts, slices }) {
199
+ return /* @__PURE__ */ jsxs("div", {
200
+ style: {
201
+ width,
202
+ height
203
+ },
204
+ "data-map-part": id,
205
+ className: `relative flex flex-col gap-1 overflow-hidden rounded-lg border bg-(--card) px-2.5 py-2 text-left shadow-xs ${NODE_TONE[tone]} ${picked ? "ring-2 ring-(--primary) ring-offset-1 ring-offset-(--card)" : ""}`,
206
+ children: [
207
+ /* @__PURE__ */ jsx("button", {
208
+ type: "button",
209
+ "aria-label": openLabel,
210
+ title,
211
+ onClick: onOpen,
212
+ className: "absolute inset-0 rounded-lg hover:bg-[color-mix(in_srgb,var(--accent)_60%,transparent)] focus-visible:outline-2 focus-visible:outline-(--primary)"
213
+ }),
214
+ source,
215
+ /* @__PURE__ */ jsxs("span", {
216
+ className: "pointer-events-none relative flex min-h-6 min-w-0 items-center gap-1.5 pr-5 text-[11px] text-(--muted-foreground)",
217
+ "data-map-head": true,
218
+ children: [head, action && /* @__PURE__ */ jsx("span", {
219
+ className: "pointer-events-auto ml-auto shrink-0",
220
+ children: action
221
+ })]
222
+ }),
223
+ /* @__PURE__ */ jsx("span", {
224
+ className: "pointer-events-none relative line-clamp-2 text-[13px] leading-snug font-medium",
225
+ children: name
226
+ }),
227
+ /* @__PURE__ */ jsxs("span", {
228
+ className: "pointer-events-none relative mt-auto flex min-w-0 items-center gap-1.5 text-xs",
229
+ children: [glyph, /* @__PURE__ */ jsx("span", {
230
+ className: "min-w-0 flex-1 truncate",
231
+ "data-map-facts": true,
232
+ children: facts
233
+ })]
234
+ }),
235
+ slices && /* @__PURE__ */ jsx("span", {
236
+ className: "pointer-events-none absolute inset-x-2.5 bottom-0.5",
237
+ children: slices
238
+ })
239
+ ]
240
+ });
241
+ }
242
+ /** The end-to-end check at the end of the map, `width` by `height`: its `label`, title, then its `glyph` and `steps`
243
+ * (how many, and what it comes after), which `stepsTitle` says in full. */
244
+ function MapCheckNode({ width, height, label, title, glyph, steps, stepsTitle }) {
245
+ return /* @__PURE__ */ jsxs("div", {
246
+ style: {
247
+ width,
248
+ height
249
+ },
250
+ "data-map-check": true,
251
+ className: "flex flex-col gap-1 rounded-lg border-2 border-dashed border-(--input) bg-(--card) px-2.5 py-2 shadow-xs",
252
+ children: [
253
+ /* @__PURE__ */ jsxs("span", {
254
+ className: "flex items-center gap-1.5 text-[11px] text-(--muted-foreground)",
255
+ children: [/* @__PURE__ */ jsx(FlaskConicalIcon, { className: "size-3.5" }), label]
256
+ }),
257
+ /* @__PURE__ */ jsx("span", {
258
+ className: "line-clamp-2 text-[13px] leading-snug font-medium",
259
+ children: title
260
+ }),
261
+ /* @__PURE__ */ jsxs("span", {
262
+ className: "mt-auto flex min-w-0 items-center gap-1.5 text-xs",
263
+ children: [glyph, /* @__PURE__ */ jsx("span", {
264
+ className: "min-w-0 truncate",
265
+ title: stepsTitle,
266
+ children: steps
267
+ })]
268
+ })
269
+ ]
270
+ });
271
+ }
272
+ export { HistoryRow, MapBand, MapCanvas, MapCheckNode, MapEdgeLabel, MapEdges, MapHistoryGroup, MapHistoryList, MapLaneName, MapNode, MapPartNode, WorkMapFrame };
273
+
274
+ //# sourceMappingURL=WorkMap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WorkMap.js","names":[],"sources":["../../src/board/WorkMap.tsx"],"sourcesContent":["// A dossier's Work map: lanes of parts placed left to right by what they wait on, arrows between them, the end-to-end\n// check, and finished history folded into one group below. The board lays it out; these draw it at the given places.\n\nimport { ChevronDownIcon, ChevronRightIcon, FlaskConicalIcon, HammerIcon, LightbulbIcon } from 'lucide-react';\nimport type { ReactNode, Ref } from 'react';\n\nimport { Tooltip, TooltipPopup, TooltipTrigger } from '../overlays/Tooltip';\n\n/** The map's frame, which scrolls sideways when the map is wider; `frameRef` measures its width. */\nexport function WorkMapFrame({ frameRef, children }: { frameRef?: Ref<HTMLDivElement>; children: ReactNode }) {\n return (\n <div\n ref={frameRef}\n className=\"overflow-x-auto rounded-lg border border-(--border) bg-(--background)\"\n data-work-map\n >\n {children}\n </div>\n );\n}\n\n/** The map's drawing area, `width` by `height` pixels, which places what it holds absolutely. */\nexport function MapCanvas({ width, height, children }: { width: number; height: number; children: ReactNode }) {\n return (\n <div className=\"relative\" style={{ width, height }} data-map-canvas>\n {children}\n </div>\n );\n}\n\n/** A lane's band across the map, banded on odd `index`es, with its `name` in a label that stays in view as the map\n * scrolls. */\nexport function MapBand({\n index,\n top,\n height,\n width,\n labelWidth,\n children,\n}: {\n index: number;\n top: number;\n height: number;\n width: number;\n labelWidth: number;\n children: ReactNode;\n}) {\n return (\n <div\n className={`absolute left-0 ${index ? 'border-t border-(--border)' : ''} ${index % 2 ? 'bg-[color-mix(in_srgb,var(--muted)_50%,transparent)]' : ''}`}\n style={{ top, height, width }}\n >\n <div\n className=\"sticky left-0 flex h-full flex-col justify-center gap-0.5 bg-[color-mix(in_srgb,var(--background)_85%,transparent)] px-3\"\n style={{ width: labelWidth }}\n >\n <span className=\"flex min-w-0 items-center gap-1.5 text-xs font-medium\">{children}</span>\n </div>\n </div>\n );\n}\n\n/** A lane's name with its icon: the decisions' lane, or the dossier's own repository's builds. */\nexport function MapLaneName({ lane, children }: { lane: 'decisions' | 'builds'; children: string }) {\n const Icon = lane === 'decisions' ? LightbulbIcon : HammerIcon;\n\n return (\n <>\n <Icon className=\"size-3.5 text-(--muted-foreground)\" />\n {children}\n </>\n );\n}\n\n/** An arrow from one part to another: `d` is its line; a `done` one is solid in the done colour. `lit` draws it bold\n * while either end is hovered, and `dim` faint while another is. */\nexport interface MapEdge {\n key: string;\n d: string;\n done: boolean;\n lit: boolean;\n dim: boolean;\n}\n\n/** The map's arrows, under its parts. `markerId` is unique to the map. */\nexport function MapEdges({\n width,\n height,\n markerId,\n edges,\n}: {\n width: number;\n height: number;\n markerId: string;\n edges: MapEdge[];\n}) {\n return (\n <svg className=\"pointer-events-none absolute inset-0\" width={width} height={height} aria-hidden=\"true\">\n <defs>\n {['done', 'open'].map((k) => (\n <marker\n key={k}\n id={`${markerId}-${k}`}\n viewBox=\"0 0 8 8\"\n refX=\"7\"\n refY=\"4\"\n markerWidth=\"7\"\n markerHeight=\"7\"\n orient=\"auto\"\n >\n <path d=\"M0 0 8 4 0 8z\" fill={k === 'done' ? 'var(--st-done)' : 'var(--muted-foreground)'} />\n </marker>\n ))}\n </defs>\n {edges.map((e) => (\n <path\n key={e.key}\n d={e.d}\n fill=\"none\"\n data-edge={e.key}\n stroke={e.done ? 'var(--st-done)' : 'var(--muted-foreground)'}\n strokeWidth={e.lit ? 2.5 : 1.5}\n strokeDasharray={e.done ? undefined : '5 4'}\n opacity={e.dim ? 0.2 : e.done ? 0.7 : 0.9}\n markerEnd={`url(#${markerId}-${e.done ? 'done' : 'open'})`}\n />\n ))}\n </svg>\n );\n}\n\n/** An arrow's label, at `left`/`top` and at most `maxWidth` wide: a button that opens what it stands for, its tooltip\n * naming them (`names`). */\nexport function MapEdgeLabel({\n edge,\n label,\n names,\n left,\n top,\n maxWidth,\n onOpen,\n}: {\n edge: string;\n label: string;\n names: string;\n left: number;\n top: number;\n maxWidth: number;\n onOpen: () => void;\n}) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n aria-label={`${label}: ${names}`}\n onClick={onOpen}\n data-edge-label={edge}\n className=\"absolute truncate rounded text-left text-[11px] leading-3.5 text-(--muted-foreground) hover:text-(--foreground) hover:underline focus-visible:outline-2 focus-visible:outline-(--primary)\"\n style={{ left, top, maxWidth }}\n >\n {label}\n </button>\n </TooltipTrigger>\n <TooltipPopup side=\"top\">{names}</TooltipPopup>\n </Tooltip>\n );\n}\n\n/** A node's place on the map, faint while `dim`; hovering it lights its arrows. */\nexport function MapNode({\n left,\n top,\n dim,\n onHover,\n children,\n}: {\n left: number;\n top: number;\n dim: boolean;\n onHover: (hovered: boolean) => void;\n children: ReactNode;\n}) {\n return (\n <div\n className={`absolute transition-opacity ${dim ? 'opacity-40' : ''}`}\n style={{ left, top }}\n onMouseEnter={() => onHover(true)}\n onMouseLeave={() => onHover(false)}\n >\n {children}\n </div>\n );\n}\n\n/** The group finished history folds into, across the map at `top`: a button with its `glyph` and `text` that shows or\n * hides the finished parts, saying which it does. */\nexport function MapHistoryGroup({\n open,\n top,\n height,\n dim,\n glyph,\n text,\n showLabel,\n hideLabel,\n onToggle,\n onHover,\n}: {\n open: boolean;\n top: number;\n height: number;\n dim: boolean;\n glyph: ReactNode;\n text: string;\n showLabel: string;\n hideLabel: string;\n onToggle: () => void;\n onHover: (hovered: boolean) => void;\n}) {\n return (\n <button\n type=\"button\"\n aria-expanded={open}\n onClick={onToggle}\n data-map-history\n onMouseEnter={() => onHover(true)}\n onMouseLeave={() => onHover(false)}\n className={`absolute flex items-center gap-2 rounded-lg border border-(--border) bg-(--card) px-2.5 text-left text-xs shadow-xs transition-opacity hover:bg-(--accent) focus-visible:outline-2 focus-visible:outline-(--primary) ${dim ? 'opacity-40' : ''}`}\n style={{ left: 12, right: 12, top, height }}\n >\n {glyph}\n <span className=\"min-w-0 truncate font-medium\">{text}</span>\n <span className=\"inline-flex shrink-0 items-center gap-1 text-(--muted-foreground)\">\n {open ? (\n <>\n {hideLabel}\n <ChevronDownIcon className=\"size-3.5\" />\n </>\n ) : (\n <>\n {showLabel}\n <ChevronRightIcon className=\"size-3.5\" />\n </>\n )}\n </span>\n </button>\n );\n}\n\n/** The finished parts under the map, `width` wide, one HistoryRow each. */\nexport function MapHistoryList({ width, children }: { width: number; children: ReactNode }) {\n return (\n <ol\n className=\"m-0 grid list-none grid-cols-[repeat(auto-fill,minmax(min(100%,28rem),1fr))] gap-x-4 gap-y-1 px-3 pb-3\"\n style={{ width }}\n data-map-history-parts\n >\n {children}\n </ol>\n );\n}\n\n/** A finished part as one row of the history: its glyph, kind, title opening it, what it followed, and at its right its\n * repository, pull requests and thread. */\nexport function HistoryRow({\n id,\n glyph,\n kind,\n name,\n onOpen,\n title,\n after,\n afterTitle,\n side,\n}: {\n id: string;\n glyph: ReactNode;\n kind: ReactNode;\n /** The part's full name, for its title's tooltip. */\n name: string;\n onOpen: () => void;\n title: ReactNode;\n after?: string | undefined;\n afterTitle?: string | undefined;\n side: ReactNode;\n}) {\n return (\n <li\n className=\"flex min-h-12 min-w-0 items-center gap-3 rounded-md px-3 text-[13px] hover:bg-(--soft)\"\n data-history-part={id}\n >\n {glyph}\n <span className=\"w-22 shrink-0\">{kind}</span>\n <button\n type=\"button\"\n onClick={onOpen}\n title={name}\n className=\"min-w-0 truncate rounded text-left hover:underline focus-visible:outline-2 focus-visible:outline-(--primary)\"\n >\n {title}\n </button>\n {after && (\n <span\n className=\"min-w-0 shrink-[1000] truncate text-[11px] text-(--muted-foreground)\"\n title={afterTitle}\n >\n {after}\n </span>\n )}\n <span className=\"ml-auto flex shrink-0 items-center gap-2 text-[11px] text-(--muted-foreground)\">\n {side}\n </span>\n </li>\n );\n}\n\nconst NODE_TONE = {\n default: 'border-(--border)',\n asks: 'border-[color-mix(in_srgb,var(--warning)_45%,var(--border))] shadow-[inset_3px_0_0_var(--warning)]',\n waits: 'border-dashed border-(--input)',\n} as const;\n\n/**\n * A part on the map, `width` by `height`: a card that opens it (`openLabel` names the button, `title` says it all),\n * with its `source` in the corner, a `head` line (kind, repository, fields) with its `action` at the right, its title,\n * its `glyph` and `facts`, and its `slices` along the bottom. It `asks` (an answer from you) or `waits` (on other work)\n * in its border's tone, and is ringed while `picked`.\n */\nexport function MapPartNode({\n id,\n width,\n height,\n tone = 'default',\n picked,\n openLabel,\n title,\n onOpen,\n source,\n head,\n action,\n name,\n glyph,\n facts,\n slices,\n}: {\n id: string;\n width: number;\n height: number;\n tone?: keyof typeof NODE_TONE;\n picked: boolean;\n openLabel: string;\n title: string;\n onOpen: () => void;\n source: ReactNode;\n head: ReactNode;\n action?: ReactNode;\n name: ReactNode;\n glyph: ReactNode;\n facts: string;\n slices?: ReactNode;\n}) {\n return (\n <div\n style={{ width, height }}\n data-map-part={id}\n className={`relative flex flex-col gap-1 overflow-hidden rounded-lg border bg-(--card) px-2.5 py-2 text-left shadow-xs ${NODE_TONE[tone]} ${picked ? 'ring-2 ring-(--primary) ring-offset-1 ring-offset-(--card)' : ''}`}\n >\n <button\n type=\"button\"\n aria-label={openLabel}\n title={title}\n onClick={onOpen}\n className=\"absolute inset-0 rounded-lg hover:bg-[color-mix(in_srgb,var(--accent)_60%,transparent)] focus-visible:outline-2 focus-visible:outline-(--primary)\"\n />\n {source}\n <span\n className=\"pointer-events-none relative flex min-h-6 min-w-0 items-center gap-1.5 pr-5 text-[11px] text-(--muted-foreground)\"\n data-map-head\n >\n {head}\n {action && <span className=\"pointer-events-auto ml-auto shrink-0\">{action}</span>}\n </span>\n <span className=\"pointer-events-none relative line-clamp-2 text-[13px] leading-snug font-medium\">\n {name}\n </span>\n <span className=\"pointer-events-none relative mt-auto flex min-w-0 items-center gap-1.5 text-xs\">\n {glyph}\n <span className=\"min-w-0 flex-1 truncate\" data-map-facts>\n {facts}\n </span>\n </span>\n {slices && <span className=\"pointer-events-none absolute inset-x-2.5 bottom-0.5\">{slices}</span>}\n </div>\n );\n}\n\n/** The end-to-end check at the end of the map, `width` by `height`: its `label`, title, then its `glyph` and `steps`\n * (how many, and what it comes after), which `stepsTitle` says in full. */\nexport function MapCheckNode({\n width,\n height,\n label,\n title,\n glyph,\n steps,\n stepsTitle,\n}: {\n width: number;\n height: number;\n label: string;\n title: string;\n glyph: ReactNode;\n steps: string;\n stepsTitle?: string | undefined;\n}) {\n return (\n <div\n style={{ width, height }}\n data-map-check\n className=\"flex flex-col gap-1 rounded-lg border-2 border-dashed border-(--input) bg-(--card) px-2.5 py-2 shadow-xs\"\n >\n <span className=\"flex items-center gap-1.5 text-[11px] text-(--muted-foreground)\">\n <FlaskConicalIcon className=\"size-3.5\" />\n {label}\n </span>\n <span className=\"line-clamp-2 text-[13px] leading-snug font-medium\">{title}</span>\n <span className=\"mt-auto flex min-w-0 items-center gap-1.5 text-xs\">\n {glyph}\n <span className=\"min-w-0 truncate\" title={stepsTitle}>\n {steps}\n </span>\n </span>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { AddItemButton, CreateIssueChoice, DraftFields, DraftTicketPart, PanelField, TicketSearch, TicketSearchMatch, TicketSearchPane } from "./AddItem.js";
2
+ import { ActionStack, SettingConfirm, SettingLastRun } from "./Archive.js";
3
+ import { BoardContent, BoardShell, ReadingLine } from "./BoardShell.js";
4
+ import { BoardBrand, BoardTitleBar, RefreshHealth, RefreshIndicator, TitleBarDivider } from "./BoardTitleBar.js";
5
+ import { ButtonKind, buttonKind } from "./ButtonKinds.js";
6
+ import { BoardCounter, BoardCounters, CounterAge, CounterDash, CounterDivider, CounterEmpty, CounterFigure, CounterGroup, CounterGroups, CounterItem, CounterList, CounterOfLimit, CounterPartial, LimitBars } from "./Counters.js";
7
+ import { DeskCard, DeskHint, DeskMergeState, DeskSection, MergeState } from "./Desk.js";
8
+ import { FilterBar, FilterChip, FilterChoice, FilterChoices, FilterMenu } from "./Filters.js";
9
+ import { ListButton, ListGroupItem, ListHeader, ListItemRow, ListNote } from "./List.js";
10
+ import { LoadingLine, LoadingMark, LoadingScreen } from "./LoadingScreen.js";
11
+ import { ReleaseNote, ReleaseNotes, UpdateDownloading, UpdatePill, UpdateStatusIcon } from "./UpdatePill.js";
12
+ import { BoardWarning, BoardWarnings, ToolMissing } from "./Warnings.js";
13
+ import { ActivityLine, ActivityState, AgentAge, AgentList, AgentRow, WorkingAgents } from "./ActivityLine.js";
14
+ import { ActivityLabel, ActivityTrack } from "./ActivityTrack.js";
15
+ import { DataAttributes } from "./DataAttributes.js";
16
+ import { AttentionEntry, AttentionList, AttentionMark, AttentionNone, AttentionTone, EntryButton, PartLink, PartName, RefButton } from "./Attention.js";
17
+ import { LossList } from "./Cleanup.js";
18
+ import { DependencyItem, DependencyList } from "./Dependencies.js";
19
+ import { DossierBody, DossierChipTone, DossierChips, DossierFields, DossierLine, DossierList, DossierNext, DossierNote, DossierRepos, DossierRow, DossierTitle, DossierTitleCell, DossierToggle, DossierTools, PartSegment, PartsBar, PlanningNote } from "./Dossier.js";
20
+ import { ItemFields, ItemTitle, KindMarker, RepoIdentity, RepoTag, TitleLink } from "./ItemParts.js";
21
+ import { NeedsYouNotice, NeedsYouResult } from "./NeedsYou.js";
22
+ import { PartKind, PartKindLabel, PartRow, PartTrack, PartWaits, PartsList, ShowDoneToggle, ThreadLine } from "./PartsList.js";
23
+ import { ChecksState, PullRequestList, PullRequestReadiness, PullRequestRef, PullRequestRow, ReadinessDetails } from "./PullRequests.js";
24
+ import { SliceBar, SliceList, SliceMark, SliceProgress, SliceRow } from "./Slices.js";
25
+ import { ItemSource, SourceIcon } from "./SourceIcon.js";
26
+ import { BuildLimit, HeaderSwitch, StageList, StagePane, StagePaneEmpty, StageSections } from "./StagePane.js";
27
+ import { OnYourDesk, QueueAge, QueuePlace, RowBlocked, RowCells, RowCount, RowFirst, RowFoot, RowGlyph, RowIdentity, RowKindCell, RowOpen, RowPartOf, RowSecondLine, RowSide, RowSliceNote, RowSliceToggle, RowSlices, RowState, RowStateCell, RowTitle, RowTitleCell, StageRowItem, UsageFigures } from "./StageRow.js";
28
+ import { StageTrack } from "./StageTrack.js";
29
+ import { ActionError, StartGroup, StartLine, StartNote, StartTag } from "./StartControls.js";
30
+ import { BoardStatus, statusColor } from "./StatusColors.js";
31
+ import { StatusGlyph } from "./StatusGlyph.js";
32
+ import { EarlierThread, EarlierThreadList } from "./Threads.js";
33
+ import { HistoryRow, MapBand, MapCanvas, MapCheckNode, MapEdge, MapEdgeLabel, MapEdges, MapHistoryGroup, MapHistoryList, MapLaneName, MapNode, MapPartNode, WorkMapFrame } from "./WorkMap.js";
34
+ import { AccessNotice, DialogActions, ItemDialogAside, ItemDialogBody, ItemDialogColumns, ItemSummary, SummaryAge, SummaryBlocked, SummaryPanel, SummaryParent, SummaryStatus, WarningNote } from "./ItemDialog.js";
35
+ import { AttachmentLink, ChangeFailed, CheckRun, ChipGroup, DetailFact, DetailsHeading, DetailsSection, DetailsText, EditActions, EditorSlot, FactList, FocusPanel, HeaderStatus, InlineList, KindQuestion, LabelEditorPanel, MainColumnSlot, MainSection, MetaArea, OutgoingTicket, SectionHeader, SpecSync, SprintCount, TextSection, TicketLink, TicketLinkList, WaitsOnList } from "./ItemDetails.js";
36
+ import { ItemProgressPanel, PartsProgress, ProgressActivity, ProgressCount, SliceChip, SliceChips, WorkflowSteps } from "./ItemProgress.js";
37
+ import { ProjectIcon, ProjectIconColor, ProjectIconSize, ProjectIconSource } from "./ProjectIcon.js";
38
+ import { OpenSettingsButton, ProjectValueList, ReasonNote, SettingControl, SettingDetails, SettingsNav, SettingsNote } from "./Settings.js";
39
+ import { CreateLabelForm, TrackerLabelEditor, TrackerLabelList, TrackerLabelRow } from "./TrackerLabels.js";
40
+ import { LabelChooser, LabelChooserEmpty, LabelChooserFooter, LabelChooserList, LabelChooserOption, VocabularyMore, VocabularyRow, VocabularySuggestion } from "./Vocabulary.js";
41
+ import { AddFolderLine, ChoiceDetails, EmptyBoard, ProjectLine, ProjectList, ProjectListItem, SetupCardList, SetupHeader, SetupStep } from "./Onboarding.js";
42
+ export { AccessNotice, ActionError, ActionStack, ActivityLabel, ActivityLine, type ActivityState, ActivityTrack, AddFolderLine, AddItemButton, AgentAge, AgentList, AgentRow, AttachmentLink, AttentionEntry, AttentionList, AttentionMark, AttentionNone, type AttentionTone, BoardBrand, BoardContent, BoardCounter, BoardCounters, BoardShell, type BoardStatus, BoardTitleBar, BoardWarning, BoardWarnings, BuildLimit, type ButtonKind, ChangeFailed, CheckRun, ChecksState, ChipGroup, ChoiceDetails, CounterAge, CounterDash, CounterDivider, CounterEmpty, CounterFigure, CounterGroup, CounterGroups, CounterItem, CounterList, CounterOfLimit, CounterPartial, CreateIssueChoice, CreateLabelForm, type DataAttributes, DependencyItem, DependencyList, DeskCard, DeskHint, DeskMergeState, DeskSection, DetailFact, DetailsHeading, DetailsSection, DetailsText, DialogActions, DossierBody, type DossierChipTone, DossierChips, DossierFields, DossierLine, DossierList, DossierNext, DossierNote, DossierRepos, DossierRow, DossierTitle, DossierTitleCell, DossierToggle, DossierTools, DraftFields, DraftTicketPart, EarlierThread, EarlierThreadList, EditActions, EditorSlot, EmptyBoard, EntryButton, FactList, FilterBar, FilterChip, FilterChoice, FilterChoices, FilterMenu, FocusPanel, HeaderStatus, HeaderSwitch, HistoryRow, InlineList, ItemDialogAside, ItemDialogBody, ItemDialogColumns, ItemFields, ItemProgressPanel, type ItemSource, ItemSummary, ItemTitle, KindMarker, KindQuestion, LabelChooser, LabelChooserEmpty, LabelChooserFooter, LabelChooserList, LabelChooserOption, LabelEditorPanel, LimitBars, ListButton, ListGroupItem, ListHeader, ListItemRow, ListNote, type LoadingLine, type LoadingMark, LoadingScreen, LossList, MainColumnSlot, MainSection, MapBand, MapCanvas, MapCheckNode, type MapEdge, MapEdgeLabel, MapEdges, MapHistoryGroup, MapHistoryList, MapLaneName, MapNode, MapPartNode, type MergeState, MetaArea, NeedsYouNotice, NeedsYouResult, OnYourDesk, OpenSettingsButton, OutgoingTicket, PanelField, type PartKind, PartKindLabel, PartLink, PartName, PartRow, type PartSegment, PartTrack, PartWaits, PartsBar, PartsList, PartsProgress, PlanningNote, ProgressActivity, ProgressCount, ProjectIcon, type ProjectIconColor, type ProjectIconSize, type ProjectIconSource, ProjectLine, ProjectList, ProjectListItem, ProjectValueList, PullRequestList, PullRequestReadiness, PullRequestRef, PullRequestRow, QueueAge, QueuePlace, ReadinessDetails, ReadingLine, ReasonNote, RefButton, type RefreshHealth, RefreshIndicator, type ReleaseNote, ReleaseNotes, RepoIdentity, RepoTag, RowBlocked, RowCells, RowCount, RowFirst, RowFoot, RowGlyph, RowIdentity, RowKindCell, RowOpen, RowPartOf, RowSecondLine, RowSide, RowSliceNote, RowSliceToggle, RowSlices, RowState, RowStateCell, RowTitle, RowTitleCell, SectionHeader, SettingConfirm, SettingControl, SettingDetails, SettingLastRun, SettingsNav, SettingsNote, SetupCardList, SetupHeader, SetupStep, ShowDoneToggle, SliceBar, SliceChip, SliceChips, SliceList, SliceMark, type SliceProgress, SliceRow, SourceIcon, SpecSync, SprintCount, StageList, StagePane, StagePaneEmpty, StageRowItem, StageSections, StageTrack, StartGroup, StartLine, StartNote, StartTag, StatusGlyph, SummaryAge, SummaryBlocked, SummaryPanel, SummaryParent, SummaryStatus, TextSection, ThreadLine, TicketLink, TicketLinkList, TicketSearch, type TicketSearchMatch, TicketSearchPane, TitleBarDivider, TitleLink, ToolMissing, TrackerLabelEditor, TrackerLabelList, TrackerLabelRow, UpdateDownloading, UpdatePill, UpdateStatusIcon, UsageFigures, VocabularyMore, VocabularyRow, VocabularySuggestion, WaitsOnList, WarningNote, WorkMapFrame, WorkflowSteps, WorkingAgents, buttonKind, statusColor };
@@ -23,8 +23,17 @@ declare const variants: {
23
23
  readonly icon: '[&>svg]:size-6';
24
24
  readonly space: 'related';
25
25
  };
26
+ /** A first run's welcome in an app's empty main area: its `icon` (such as the brand mark) in its own colours over a
27
+ * section-sized title. */
28
+ readonly welcome: {
29
+ readonly layout: 'max-w-xl px-6 py-16';
30
+ readonly icon: '';
31
+ readonly space: 'group';
32
+ };
26
33
  };
27
34
  interface CollectionStateProps {
35
+ /** The action in place of `actionLabel` and `onAction`, for a caller whose button has its own look or markers. */
36
+ action?: ReactNode;
28
37
  actionLabel?: string;
29
38
  description: string;
30
39
  icon?: ReactNode;
@@ -32,6 +41,6 @@ interface CollectionStateProps {
32
41
  title: string;
33
42
  variant?: keyof typeof variants;
34
43
  }
35
- export declare function CollectionState({ actionLabel, description, icon, onAction, title, variant }: CollectionStateProps): import("react").JSX.Element;
44
+ export declare function CollectionState({ action, actionLabel, description, icon, onAction, title, variant }: CollectionStateProps): import("react").JSX.Element;
36
45
  export {};
37
46
  //# sourceMappingURL=CollectionState.d.ts.map