@lar-works/design-system 0.2.1 → 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 (432) 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/styles.css +3 -1
  427. package/src/typography/Code.tsx +24 -0
  428. package/src/typography/Link.tsx +19 -10
  429. package/src/typography/Typography.tsx +25 -2
  430. package/src/typography/index.ts +1 -1
  431. package/dist/feedback/index.js +0 -11
  432. package/dist/typography/index.js +0 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Settings.js","names":[],"sources":["../../src/board/Settings.tsx"],"sourcesContent":["// Lar Factory's settings: the title bar's button that opens them, the sections' sidebar, the column of a page's groups,\n// the short reason a setting can't be changed, and the parts its rows show under and beside their controls.\n\nimport { SettingsIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { Button } from '../actions/Button';\nimport { SidebarPane } from '../layout/sidebar/SidebarPane';\nimport { HelpTip } from '../overlays/HelpTip';\nimport { buttonKind } from './ButtonKinds';\nimport type { DataAttributes } from './DataAttributes';\n\n/** The title bar's last button, which opens Settings: an icon-only App control named by its `label`, its 20px icon in\n * the text colour rather than the muted one, so it holds its own beside the labelled controls. */\nexport function OpenSettingsButton({ label, onOpen }: { label: string; onOpen: () => void }) {\n return (\n <Button\n {...buttonKind('control')}\n iconOnly\n className=\"open-settings text-base-content [&_svg]:size-5\"\n aria-label={label}\n title={label}\n onClick={onOpen}\n >\n <SettingsIcon />\n </Button>\n );\n}\n\n/**\n * Settings' sidebar: the `search` field over the sections' groups (SidebarNavigationGroup), and `empty`, announced,\n * when a search leaves none. `label` names the navigation.\n */\nexport function SettingsNav({\n label,\n search,\n empty,\n children,\n ...data\n}: {\n label: string;\n search: ReactNode;\n empty?: string | undefined;\n children: ReactNode;\n} & DataAttributes) {\n return (\n <div {...data} className=\"contents\">\n <SidebarPane label={label}>\n <div className=\"w-44 shrink-0 md:mb-3 md:w-auto\">{search}</div>\n {empty && (\n <p role=\"status\" data-no-match className=\"text-base-700 m-0 px-2 py-1 text-xs\">\n {empty}\n </p>\n )}\n {children}\n </SidebarPane>\n </div>\n );\n}\n\n/**\n * Why a setting can't be changed, in a short muted line that wraps: the `reason`, a help popover with the whole\n * `explanation` (`helpLabel` names its button), then the `action` that checks again, such as an InlineLink with `onClick`.\n */\nexport function ReasonNote({\n reason,\n explanation,\n helpLabel,\n action,\n}: {\n reason: string;\n explanation: ReactNode;\n helpLabel: string;\n action?: ReactNode;\n}) {\n return (\n <span className=\"inline-flex min-w-0 flex-wrap items-center gap-1 text-xs text-(--muted-foreground)\">\n <span>{reason}</span>\n <HelpTip label={helpLabel}>{explanation}</HelpTip>\n {action}\n </span>\n );\n}\n\n/** A settings group's note under its panel, such as what the group's last call did: small lines, stacked. `busy` marks\n * it as still loading for assistive technology. */\nexport function SettingsNote({ busy, children, ...data }: { busy?: boolean; children: ReactNode } & DataAttributes) {\n return (\n <div {...data} className=\"grid gap-2 px-1\" aria-busy={busy}>\n {children}\n </div>\n );\n}\n\n/** What a setting row shows under its control, such as an install's progress, in small stacked lines; `breaks` lets a\n * long path break anywhere. */\nexport function SettingDetails({ breaks = false, children }: { breaks?: boolean; children: ReactNode }) {\n return <div className={`grid gap-2 text-xs${breaks ? ' [overflow-wrap:anywhere]' : ''}`}>{children}</div>;\n}\n\n/** A setting's control with its error under it, at most 20rem wide. */\nexport function SettingControl({ children }: { children: ReactNode }) {\n return <div className=\"grid max-w-80 gap-2\">{children}</div>;\n}\n\n/** A small list of each Project's value for a setting, the Project left and its value muted right, wrapping. */\nexport function ProjectValueList({\n label,\n rows,\n}: {\n label: string;\n rows: readonly { key: string; name: string; value: string }[];\n}) {\n return (\n <ul className=\"m-0 grid list-none gap-1 p-0 text-xs\" aria-label={label}>\n {rows.map(({ key, name, value }) => (\n <li key={key} className=\"flex flex-wrap justify-between gap-x-3\">\n <span className=\"[overflow-wrap:anywhere]\">{name}</span>{' '}\n <span className=\"[overflow-wrap:anywhere] text-(--muted-foreground)\">{value}</span>\n </li>\n ))}\n </ul>\n );\n}\n"],"mappings":";;;;;;;;;AAcA,SAAgB,mBAAmB,EAAE,OAAO,UAAiD;CACzF,OACI,oBAAC,QAAD;EACI,GAAI,WAAW,SAAS;EACxB,UAAA;EACA,WAAU;EACV,cAAY;EACZ,OAAO;EACP,SAAS;EAET,UAAA,oBAAC,cAAD,CAAe,CAAA;CACX,CAAA;AAEhB;;;;;AAMA,SAAgB,YAAY,EACxB,OACA,QACA,OACA,UACA,GAAG,QAMa;CAChB,OACI,oBAAC,OAAD;EAAK,GAAI;EAAM,WAAU;EACrB,UAAA,qBAAC,aAAD;GAAoB;GAApB,UAAA;IACI,oBAAC,OAAD;KAAK,WAAU;KAAmC,UAAA;IAAY,CAAA;IAC7D,SACG,oBAAC,KAAD;KAAG,MAAK;KAAS,iBAAA;KAAc,WAAU;KACpC,UAAA;IACF,CAAA;IAEN;GACQ;;CACZ,CAAA;AAEb;;;;;AAMA,SAAgB,WAAW,EACvB,QACA,aACA,WACA,UAMD;CACC,OACI,qBAAC,QAAD;EAAM,WAAU;EAAhB,UAAA;GACI,oBAAC,QAAD,EAAA,UAAO,OAAa,CAAA;GACpB,oBAAC,SAAD;IAAS,OAAO;IAAY,UAAA;GAAqB,CAAA;GAChD;EACC;;AAEd;;;AAIA,SAAgB,aAAa,EAAE,MAAM,UAAU,GAAG,QAAkE;CAChH,OACI,oBAAC,OAAD;EAAK,GAAI;EAAM,WAAU;EAAkB,aAAW;EACjD;CACA,CAAA;AAEb;;;AAIA,SAAgB,eAAe,EAAE,SAAS,OAAO,YAAuD;CACpG,OAAO,oBAAC,OAAD;EAAK,WAAW,qBAAqB,SAAS,8BAA8B;EAAO;CAAc,CAAA;AAC5G;;AAGA,SAAgB,eAAe,EAAE,YAAqC;CAClE,OAAO,oBAAC,OAAD;EAAK,WAAU;EAAuB;CAAc,CAAA;AAC/D;;AAGA,SAAgB,iBAAiB,EAC7B,OACA,QAID;CACC,OACI,oBAAC,MAAD;EAAI,WAAU;EAAuC,cAAY;EAC5D,UAAA,KAAK,KAAK,EAAE,KAAK,MAAM,YACpB,qBAAC,MAAD;GAAc,WAAU;GAAxB,UAAA;IACI,oBAAC,QAAD;KAAM,WAAU;KAA4B,UAAA;IAAW,CAAA;IAAE;IACzD,oBAAC,QAAD;KAAM,WAAU;KAAsD,UAAA;IAAY,CAAA;GAClF;EAHK,GAAA,GAGL,CACP;CACD,CAAA;AAEZ"}
@@ -0,0 +1,32 @@
1
+ import { ReactNode } from "react";
2
+ /** Where a slice stands. */
3
+ export type SliceProgress = 'done' | 'active' | 'blocked' | 'unknown' | 'waiting';
4
+ /** A 6px segment for each slice, named by its tooltip; waiting segments are faint, and an active one pulses unless
5
+ * `still`. */
6
+ export declare function SliceBar({ slices, still }: {
7
+ slices: {
8
+ name: string;
9
+ progress: SliceProgress;
10
+ }[];
11
+ still?: boolean;
12
+ }): import("react").JSX.Element | null;
13
+ /** A slice's state as a ring: ticked when done, a question mark when unknown, a dot pulsing unless `still` while
14
+ * active. */
15
+ export declare function SliceMark({ progress, still }: {
16
+ progress: SliceProgress;
17
+ still?: boolean;
18
+ }): import("react").JSX.Element;
19
+ /** The slices of a piece of work, one SliceRow each. */
20
+ export declare function SliceList({ children }: {
21
+ children: ReactNode;
22
+ }): import("react").JSX.Element;
23
+ /** A slice in SliceList: where its ticket is saved, its mark, number, title (struck through when done) and state. */
24
+ export declare function SliceRow({ source, progress, still, number, title }: {
25
+ source: ReactNode;
26
+ progress: SliceProgress;
27
+ still?: boolean;
28
+ /** The slice's ticket number; a slice with none shows none. */
29
+ number?: number | undefined;
30
+ title: string;
31
+ }): import("react").JSX.Element;
32
+ //# sourceMappingURL=Slices.d.ts.map
@@ -0,0 +1,88 @@
1
+ import { ambientMotion } from "../foundations/AmbientMotion.js";
2
+ import { CheckIcon } from "lucide-react";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ // src/board/Slices.tsx
5
+ const SLICE_COLOR = {
6
+ done: "var(--st-done)",
7
+ active: "var(--st-now)",
8
+ blocked: "var(--st-review)",
9
+ unknown: "var(--muted-foreground)",
10
+ waiting: "var(--input)"
11
+ };
12
+ /** A 6px segment for each slice, named by its tooltip; waiting segments are faint, and an active one pulses unless
13
+ * `still`. */
14
+ function SliceBar({ slices, still = false }) {
15
+ if (!slices.length) return null;
16
+ return /* @__PURE__ */ jsx("ol", {
17
+ className: "m-0 flex list-none gap-[2px] p-0",
18
+ children: slices.map((s, i) => /* @__PURE__ */ jsx("li", {
19
+ ref: s.progress === "active" && !still ? ambientMotion : void 0,
20
+ title: s.name,
21
+ className: `h-1.5 flex-1 rounded-full ${s.progress === "active" && !still ? "status-pulse" : ""}`,
22
+ style: { background: s.progress === "waiting" ? "var(--soft)" : SLICE_COLOR[s.progress] }
23
+ }, i))
24
+ });
25
+ }
26
+ /** A slice's state as a ring: ticked when done, a question mark when unknown, a dot pulsing unless `still` while
27
+ * active. */
28
+ function SliceMark({ progress, still = false }) {
29
+ return /* @__PURE__ */ jsxs("span", {
30
+ className: "grid size-4 shrink-0 place-items-center rounded-full border-[1.5px]",
31
+ style: {
32
+ borderColor: SLICE_COLOR[progress],
33
+ background: progress === "done" ? "var(--st-done)" : "transparent"
34
+ },
35
+ children: [
36
+ progress === "unknown" && /* @__PURE__ */ jsx("span", {
37
+ className: "text-[9px] leading-none",
38
+ children: "?"
39
+ }),
40
+ progress === "done" && /* @__PURE__ */ jsx(CheckIcon, {
41
+ className: "size-2.5 text-white",
42
+ strokeWidth: 3
43
+ }),
44
+ progress === "active" && /* @__PURE__ */ jsx("span", {
45
+ ref: still ? void 0 : ambientMotion,
46
+ className: `${still ? "" : "status-pulse "}size-1.5 rounded-full bg-(--st-now)`
47
+ })
48
+ ]
49
+ });
50
+ }
51
+ /** The slices of a piece of work, one SliceRow each. */
52
+ function SliceList({ children }) {
53
+ return /* @__PURE__ */ jsx("ul", {
54
+ className: "m-0 grid list-none grid-cols-[minmax(0,1fr)] gap-0.5 p-0",
55
+ children
56
+ });
57
+ }
58
+ /** A slice in SliceList: where its ticket is saved, its mark, number, title (struck through when done) and state. */
59
+ function SliceRow({ source, progress, still = false, number, title }) {
60
+ return /* @__PURE__ */ jsxs("li", {
61
+ className: "flex items-start gap-2 rounded-md px-2 py-1 text-[13px] hover:bg-(--soft)",
62
+ children: [
63
+ source,
64
+ /* @__PURE__ */ jsx("span", {
65
+ className: "mt-0.5",
66
+ children: /* @__PURE__ */ jsx(SliceMark, {
67
+ progress,
68
+ still
69
+ })
70
+ }),
71
+ !!number && /* @__PURE__ */ jsxs("span", {
72
+ className: "shrink-0 text-(--muted-foreground) tabular-nums",
73
+ children: ["#", number]
74
+ }),
75
+ /* @__PURE__ */ jsx("span", {
76
+ className: `min-w-0 flex-1 wrap-anywhere ${progress === "done" ? "text-(--muted-foreground) line-through" : progress === "active" ? "font-medium" : ""}`,
77
+ children: title
78
+ }),
79
+ /* @__PURE__ */ jsx("span", {
80
+ className: "mt-px shrink-0 text-[11px] text-(--muted-foreground)",
81
+ children: progress
82
+ })
83
+ ]
84
+ });
85
+ }
86
+ export { SliceBar, SliceList, SliceMark, SliceRow };
87
+
88
+ //# sourceMappingURL=Slices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Slices.js","names":[],"sources":["../../src/board/Slices.tsx"],"sourcesContent":["// A piece of work's slices: the bar every view of the board draws, and a list with each slice's mark.\n\nimport { CheckIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { ambientMotion } from '../foundations/AmbientMotion';\n\n/** Where a slice stands. */\nexport type SliceProgress = 'done' | 'active' | 'blocked' | 'unknown' | 'waiting';\n\nconst SLICE_COLOR: Record<SliceProgress, string> = {\n done: 'var(--st-done)',\n active: 'var(--st-now)',\n blocked: 'var(--st-review)',\n unknown: 'var(--muted-foreground)',\n waiting: 'var(--input)',\n};\n\n/** A 6px segment for each slice, named by its tooltip; waiting segments are faint, and an active one pulses unless\n * `still`. */\nexport function SliceBar({\n slices,\n still = false,\n}: {\n slices: { name: string; progress: SliceProgress }[];\n still?: boolean;\n}) {\n if (!slices.length) return null;\n\n return (\n <ol className=\"m-0 flex list-none gap-[2px] p-0\">\n {slices.map((s, i) => (\n <li\n key={i}\n ref={s.progress === 'active' && !still ? ambientMotion : undefined}\n title={s.name}\n className={`h-1.5 flex-1 rounded-full ${s.progress === 'active' && !still ? 'status-pulse' : ''}`}\n style={{ background: s.progress === 'waiting' ? 'var(--soft)' : SLICE_COLOR[s.progress] }}\n />\n ))}\n </ol>\n );\n}\n\n/** A slice's state as a ring: ticked when done, a question mark when unknown, a dot pulsing unless `still` while\n * active. */\nexport function SliceMark({ progress, still = false }: { progress: SliceProgress; still?: boolean }) {\n return (\n <span\n className=\"grid size-4 shrink-0 place-items-center rounded-full border-[1.5px]\"\n style={{\n borderColor: SLICE_COLOR[progress],\n background: progress === 'done' ? 'var(--st-done)' : 'transparent',\n }}\n >\n {progress === 'unknown' && <span className=\"text-[9px] leading-none\">?</span>}\n {progress === 'done' && <CheckIcon className=\"size-2.5 text-white\" strokeWidth={3} />}\n {progress === 'active' && (\n <span\n ref={still ? undefined : ambientMotion}\n className={`${still ? '' : 'status-pulse '}size-1.5 rounded-full bg-(--st-now)`}\n />\n )}\n </span>\n );\n}\n\n/** The slices of a piece of work, one SliceRow each. */\nexport function SliceList({ children }: { children: ReactNode }) {\n return <ul className=\"m-0 grid list-none grid-cols-[minmax(0,1fr)] gap-0.5 p-0\">{children}</ul>;\n}\n\n/** A slice in SliceList: where its ticket is saved, its mark, number, title (struck through when done) and state. */\nexport function SliceRow({\n source,\n progress,\n still = false,\n number,\n title,\n}: {\n source: ReactNode;\n progress: SliceProgress;\n still?: boolean;\n /** The slice's ticket number; a slice with none shows none. */\n number?: number | undefined;\n title: string;\n}) {\n return (\n <li className=\"flex items-start gap-2 rounded-md px-2 py-1 text-[13px] hover:bg-(--soft)\">\n {source}\n <span className=\"mt-0.5\">\n <SliceMark progress={progress} still={still} />\n </span>\n {!!number && <span className=\"shrink-0 text-(--muted-foreground) tabular-nums\">#{number}</span>}\n <span\n className={`min-w-0 flex-1 wrap-anywhere ${progress === 'done' ? 'text-(--muted-foreground) line-through' : progress === 'active' ? 'font-medium' : ''}`}\n >\n {title}\n </span>\n <span className=\"mt-px shrink-0 text-[11px] text-(--muted-foreground)\">{progress}</span>\n </li>\n );\n}\n"],"mappings":";;;;AAUA,MAAM,cAA6C;CAC/C,MAAM;CACN,QAAQ;CACR,SAAS;CACT,SAAS;CACT,SAAS;AACb;;;AAIA,SAAgB,SAAS,EACrB,QACA,QAAQ,SAIT;CACC,IAAI,CAAC,OAAO,QAAQ,OAAO;CAE3B,OACI,oBAAC,MAAD;EAAI,WAAU;EACT,UAAA,OAAO,KAAK,GAAG,MACZ,oBAAC,MAAD;GAEI,KAAK,EAAE,aAAa,YAAY,CAAC,QAAQ,gBAAgB,KAAA;GACzD,OAAO,EAAE;GACT,WAAW,6BAA6B,EAAE,aAAa,YAAY,CAAC,QAAQ,iBAAiB;GAC7F,OAAO,EAAE,YAAY,EAAE,aAAa,YAAY,gBAAgB,YAAY,EAAE,UAAU;EAC3F,GALQ,CAKR,CACJ;CACD,CAAA;AAEZ;;;AAIA,SAAgB,UAAU,EAAE,UAAU,QAAQ,SAAuD;CACjG,OACI,qBAAC,QAAD;EACI,WAAU;EACV,OAAO;GACH,aAAa,YAAY;GACzB,YAAY,aAAa,SAAS,mBAAmB;EACzD;EALJ,UAAA;GAOK,aAAa,aAAa,oBAAC,QAAD;IAAM,WAAU;IAA0B,UAAA;GAAO,CAAA;GAC3E,aAAa,UAAU,oBAAC,WAAD;IAAW,WAAU;IAAsB,aAAa;GAAI,CAAA;GACnF,aAAa,YACV,oBAAC,QAAD;IACI,KAAK,QAAQ,KAAA,IAAY;IACzB,WAAW,GAAG,QAAQ,KAAK,gBAAgB;GAC9C,CAAA;EAEH;;AAEd;;AAGA,SAAgB,UAAU,EAAE,YAAqC;CAC7D,OAAO,oBAAC,MAAD;EAAI,WAAU;EAA4D;CAAa,CAAA;AAClG;;AAGA,SAAgB,SAAS,EACrB,QACA,UACA,QAAQ,OACR,QACA,SAQD;CACC,OACI,qBAAC,MAAD;EAAI,WAAU;EAAd,UAAA;GACK;GACD,oBAAC,QAAD;IAAM,WAAU;IACZ,UAAA,oBAAC,WAAD;KAAqB;KAAiB;IAAQ,CAAA;GAC5C,CAAA;GACL,CAAC,CAAC,UAAU,qBAAC,QAAD;IAAM,WAAU;IAAhB,UAAA,CAAkE,KAAE,MAAa;;GAC9F,oBAAC,QAAD;IACI,WAAW,gCAAgC,aAAa,SAAS,2CAA2C,aAAa,WAAW,gBAAgB;IAEnJ,UAAA;GACC,CAAA;GACN,oBAAC,QAAD;IAAM,WAAU;IAAwD,UAAA;GAAe,CAAA;EACvF;;AAEZ"}
@@ -0,0 +1,12 @@
1
+ /** Where a piece of work's ticket is saved: a GitHub issue, an Azure DevOps work item, or only on this machine. */
2
+ export type ItemSource = 'github' | 'azure' | 'local';
3
+ /**
4
+ * Where an item's ticket is saved, as a small muted mark named by `label`: a bordered square in rows and details, or
5
+ * with `corner` a tab in a card's top right corner, which lets clicks through to the card.
6
+ */
7
+ export declare function SourceIcon({ source, label, corner }: {
8
+ source: ItemSource;
9
+ label: string;
10
+ corner?: boolean;
11
+ }): import("react").JSX.Element;
12
+ //# sourceMappingURL=SourceIcon.d.ts.map
@@ -0,0 +1,24 @@
1
+ import { AzureDevOpsIcon, GitHubIcon } from "../icons/BrandIcons.js";
2
+ import { LaptopIcon } from "lucide-react";
3
+ import { jsx } from "react/jsx-runtime";
4
+ // src/board/SourceIcon.tsx
5
+ /**
6
+ * Where an item's ticket is saved, as a small muted mark named by `label`: a bordered square in rows and details, or
7
+ * with `corner` a tab in a card's top right corner, which lets clicks through to the card.
8
+ */
9
+ function SourceIcon({ source, label, corner = false }) {
10
+ return /* @__PURE__ */ jsx("span", {
11
+ role: "img",
12
+ "aria-label": label,
13
+ title: label,
14
+ className: `grid place-items-center border-(--border) bg-(--soft) text-(--muted-foreground) ${corner ? "absolute right-0 top-0 z-10 size-6 rounded-bl-lg rounded-tr-[inherit] border-b border-l pointer-events-none" : "size-5 shrink-0 rounded-md border"}`,
15
+ children: source === "local" ? /* @__PURE__ */ jsx(LaptopIcon, {
16
+ className: "size-3",
17
+ strokeWidth: 1.75,
18
+ "aria-hidden": "true"
19
+ }) : source === "github" ? /* @__PURE__ */ jsx(GitHubIcon, { className: "size-3" }) : /* @__PURE__ */ jsx(AzureDevOpsIcon, { className: "size-3" })
20
+ });
21
+ }
22
+ export { SourceIcon };
23
+
24
+ //# sourceMappingURL=SourceIcon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SourceIcon.js","names":[],"sources":["../../src/board/SourceIcon.tsx"],"sourcesContent":["import { LaptopIcon } from 'lucide-react';\n\nimport { AzureDevOpsIcon, GitHubIcon } from '../icons/BrandIcons';\n\n/** Where a piece of work's ticket is saved: a GitHub issue, an Azure DevOps work item, or only on this machine. */\nexport type ItemSource = 'github' | 'azure' | 'local';\n\n/**\n * Where an item's ticket is saved, as a small muted mark named by `label`: a bordered square in rows and details, or\n * with `corner` a tab in a card's top right corner, which lets clicks through to the card.\n */\nexport function SourceIcon({ source, label, corner = false }: { source: ItemSource; label: string; corner?: boolean }) {\n const shape = corner\n ? 'absolute right-0 top-0 z-10 size-6 rounded-bl-lg rounded-tr-[inherit] border-b border-l pointer-events-none'\n : 'size-5 shrink-0 rounded-md border';\n\n return (\n <span\n role=\"img\"\n aria-label={label}\n title={label}\n className={`grid place-items-center border-(--border) bg-(--soft) text-(--muted-foreground) ${shape}`}\n >\n {source === 'local' ? (\n <LaptopIcon className=\"size-3\" strokeWidth={1.75} aria-hidden=\"true\" />\n ) : source === 'github' ? (\n <GitHubIcon className=\"size-3\" />\n ) : (\n <AzureDevOpsIcon className=\"size-3\" />\n )}\n </span>\n );\n}\n"],"mappings":";;;;;;;;AAWA,SAAgB,WAAW,EAAE,QAAQ,OAAO,SAAS,SAAkE;CAKnH,OACI,oBAAC,QAAD;EACI,MAAK;EACL,cAAY;EACZ,OAAO;EACP,WAAW,mFATL,SACR,gHACA;EASG,UAAA,WAAW,UACR,oBAAC,YAAD;GAAY,WAAU;GAAS,aAAa;GAAM,eAAY;EAAQ,CAAA,IACtE,WAAW,WACX,oBAAC,YAAD,EAAY,WAAU,SAAU,CAAA,IAEhC,oBAAC,iBAAD,EAAiB,WAAU,SAAU,CAAA;CAEvC,CAAA;AAEd"}
@@ -0,0 +1,43 @@
1
+ import { ReactNode } from "react";
2
+ /** A stage's section: its status glyph, title and count, anything at the header's `right`, then its rows. */
3
+ export declare function StagePane({ id, title, glyph, count, right, children }: {
4
+ /** Names the section, as `data-stage`, and its heading's id. */
5
+ id: string;
6
+ title: string;
7
+ glyph?: ReactNode;
8
+ count: number;
9
+ right?: ReactNode;
10
+ children: ReactNode;
11
+ }): import("react").JSX.Element;
12
+ /** The rows of a stage's section. */
13
+ export declare function StageList({ children }: {
14
+ children: ReactNode;
15
+ }): import("react").JSX.Element;
16
+ /** What a section says with no row: that it's loading, that nothing is in it, or that the filters hide every row. */
17
+ export declare function StagePaneEmpty({ children }: {
18
+ children: ReactNode;
19
+ }): import("react").JSX.Element;
20
+ /** Builds at work against the build limit, in a section's header: one bar per build the `limit` allows, more when
21
+ * they're over it, the bars at work in `color`, then the count in words. */
22
+ export declare function BuildLimit({ building, limit, color, title, children }: {
23
+ building: number;
24
+ limit?: number | undefined;
25
+ color: string;
26
+ title: string;
27
+ children: ReactNode;
28
+ }): import("react").JSX.Element;
29
+ /** A switch in a section's header with its visible `label` before it, and before that any `hold` that keeps it from
30
+ * acting, truncating; `title` says what it would do. */
31
+ export declare function HeaderSwitch({ label, title, hold, control }: {
32
+ label: string;
33
+ title: string;
34
+ hold?: string | undefined;
35
+ /** The Switch, named by `label` for assistive technology. */
36
+ control: ReactNode;
37
+ }): import("react").JSX.Element;
38
+ /** The stages' sections, one under another, named by `label`. */
39
+ export declare function StageSections({ label, children }: {
40
+ label: string;
41
+ children: ReactNode;
42
+ }): import("react").JSX.Element;
43
+ //# sourceMappingURL=StagePane.d.ts.map
@@ -0,0 +1,97 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ // src/board/StagePane.tsx
3
+ /** A stage's section: its status glyph, title and count, anything at the header's `right`, then its rows. */
4
+ function StagePane({ id, title, glyph, count, right, children }) {
5
+ return /* @__PURE__ */ jsxs("section", {
6
+ "data-stage": id,
7
+ "aria-labelledby": `${id}-h`,
8
+ className: "min-w-0 overflow-hidden rounded-xl border border-(--border) bg-(--card) shadow-xs",
9
+ children: [/* @__PURE__ */ jsxs("header", {
10
+ className: "flex min-h-10 flex-wrap items-center gap-x-2 gap-y-1 border-b border-(--border) px-3 py-1",
11
+ children: [
12
+ glyph,
13
+ /* @__PURE__ */ jsxs("h3", {
14
+ id: `${id}-h`,
15
+ className: "m-0 text-[13px] font-medium whitespace-nowrap",
16
+ children: [
17
+ title,
18
+ " ",
19
+ /* @__PURE__ */ jsx("span", {
20
+ className: "font-normal text-(--muted-foreground) tabular-nums",
21
+ children: count
22
+ })
23
+ ]
24
+ }),
25
+ right && /* @__PURE__ */ jsx("span", {
26
+ className: "ml-auto flex max-w-full min-w-0 items-center",
27
+ children: right
28
+ })
29
+ ]
30
+ }), /* @__PURE__ */ jsx("div", {
31
+ className: "@container",
32
+ children
33
+ })]
34
+ });
35
+ }
36
+ /** The rows of a stage's section. */
37
+ function StageList({ children }) {
38
+ return /* @__PURE__ */ jsx("ol", {
39
+ className: "m-0 grid list-none p-0",
40
+ children
41
+ });
42
+ }
43
+ /** What a section says with no row: that it's loading, that nothing is in it, or that the filters hide every row. */
44
+ function StagePaneEmpty({ children }) {
45
+ return /* @__PURE__ */ jsx("p", {
46
+ "data-pane-empty": true,
47
+ className: "m-0 px-3 py-3 text-[12px] text-(--muted-foreground)",
48
+ children
49
+ });
50
+ }
51
+ /** Builds at work against the build limit, in a section's header: one bar per build the `limit` allows, more when
52
+ * they're over it, the bars at work in `color`, then the count in words. */
53
+ function BuildLimit({ building, limit, color, title, children }) {
54
+ return /* @__PURE__ */ jsxs("span", {
55
+ className: "build-limit inline-flex items-center gap-1.5 text-[11px] whitespace-nowrap text-(--muted-foreground) tabular-nums",
56
+ title,
57
+ children: [limit !== void 0 && /* @__PURE__ */ jsx("span", {
58
+ className: "inline-flex gap-[3px]",
59
+ children: Array.from({ length: Math.max(limit, building) }, (_, n) => /* @__PURE__ */ jsx("span", {
60
+ className: "bar h-1.5 w-3 rounded-full",
61
+ style: { background: n < building ? color : "var(--border)" }
62
+ }, n))
63
+ }), children]
64
+ });
65
+ }
66
+ /** A switch in a section's header with its visible `label` before it, and before that any `hold` that keeps it from
67
+ * acting, truncating; `title` says what it would do. */
68
+ function HeaderSwitch({ label, title, hold, control }) {
69
+ return /* @__PURE__ */ jsxs("span", {
70
+ className: "auto-build inline-flex min-w-0 items-center gap-1.5 text-[11px] whitespace-nowrap text-(--muted-foreground)",
71
+ title,
72
+ children: [
73
+ hold && /* @__PURE__ */ jsx("span", {
74
+ className: "min-w-0 truncate",
75
+ title: hold,
76
+ "data-auto-build-hold": true,
77
+ children: hold
78
+ }),
79
+ /* @__PURE__ */ jsx("span", {
80
+ "aria-hidden": "true",
81
+ children: label
82
+ }),
83
+ control
84
+ ]
85
+ });
86
+ }
87
+ /** The stages' sections, one under another, named by `label`. */
88
+ function StageSections({ label, children }) {
89
+ return /* @__PURE__ */ jsx("section", {
90
+ className: "stages flex flex-col gap-3",
91
+ "aria-label": label,
92
+ children
93
+ });
94
+ }
95
+ export { BuildLimit, HeaderSwitch, StageList, StagePane, StagePaneEmpty, StageSections };
96
+
97
+ //# sourceMappingURL=StagePane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StagePane.js","names":[],"sources":["../../src/board/StagePane.tsx"],"sourcesContent":["// A section of Lar Factory's board's work by stage (Queue, Shaping, Ready to build, Build, Concepts and linked work): a\n// titled list that takes the height of its rows, so a section with none stays small and the page scrolls past them all.\n\nimport type { ReactNode } from 'react';\n\n/** A stage's section: its status glyph, title and count, anything at the header's `right`, then its rows. */\nexport function StagePane({\n id,\n title,\n glyph,\n count,\n right,\n children,\n}: {\n /** Names the section, as `data-stage`, and its heading's id. */\n id: string;\n title: string;\n glyph?: ReactNode;\n count: number;\n right?: ReactNode;\n children: ReactNode;\n}) {\n return (\n <section\n data-stage={id}\n aria-labelledby={`${id}-h`}\n className=\"min-w-0 overflow-hidden rounded-xl border border-(--border) bg-(--card) shadow-xs\"\n >\n <header className=\"flex min-h-10 flex-wrap items-center gap-x-2 gap-y-1 border-b border-(--border) px-3 py-1\">\n {glyph}\n <h3 id={`${id}-h`} className=\"m-0 text-[13px] font-medium whitespace-nowrap\">\n {title} <span className=\"font-normal text-(--muted-foreground) tabular-nums\">{count}</span>\n </h3>\n {right && <span className=\"ml-auto flex max-w-full min-w-0 items-center\">{right}</span>}\n </header>\n <div className=\"@container\">{children}</div>\n </section>\n );\n}\n\n/** The rows of a stage's section. */\nexport function StageList({ children }: { children: ReactNode }) {\n return <ol className=\"m-0 grid list-none p-0\">{children}</ol>;\n}\n\n/** What a section says with no row: that it's loading, that nothing is in it, or that the filters hide every row. */\nexport function StagePaneEmpty({ children }: { children: ReactNode }) {\n return (\n <p data-pane-empty className=\"m-0 px-3 py-3 text-[12px] text-(--muted-foreground)\">\n {children}\n </p>\n );\n}\n\n/** Builds at work against the build limit, in a section's header: one bar per build the `limit` allows, more when\n * they're over it, the bars at work in `color`, then the count in words. */\nexport function BuildLimit({\n building,\n limit,\n color,\n title,\n children,\n}: {\n building: number;\n limit?: number | undefined;\n color: string;\n title: string;\n children: ReactNode;\n}) {\n return (\n <span\n className=\"build-limit inline-flex items-center gap-1.5 text-[11px] whitespace-nowrap text-(--muted-foreground) tabular-nums\"\n title={title}\n >\n {limit !== undefined && (\n <span className=\"inline-flex gap-[3px]\">\n {Array.from({ length: Math.max(limit, building) }, (_, n) => (\n <span\n key={n}\n className=\"bar h-1.5 w-3 rounded-full\"\n style={{ background: n < building ? color : 'var(--border)' }}\n />\n ))}\n </span>\n )}\n {children}\n </span>\n );\n}\n\n/** A switch in a section's header with its visible `label` before it, and before that any `hold` that keeps it from\n * acting, truncating; `title` says what it would do. */\nexport function HeaderSwitch({\n label,\n title,\n hold,\n control,\n}: {\n label: string;\n title: string;\n hold?: string | undefined;\n /** The Switch, named by `label` for assistive technology. */\n control: ReactNode;\n}) {\n return (\n <span\n className=\"auto-build inline-flex min-w-0 items-center gap-1.5 text-[11px] whitespace-nowrap text-(--muted-foreground)\"\n title={title}\n >\n {hold && (\n <span className=\"min-w-0 truncate\" title={hold} data-auto-build-hold>\n {hold}\n </span>\n )}\n <span aria-hidden=\"true\">{label}</span>\n {control}\n </span>\n );\n}\n\n/** The stages' sections, one under another, named by `label`. */\nexport function StageSections({ label, children }: { label: string; children: ReactNode }) {\n return (\n <section className=\"stages flex flex-col gap-3\" aria-label={label}>\n {children}\n </section>\n );\n}\n"],"mappings":";;;AAMA,SAAgB,UAAU,EACtB,IACA,OACA,OACA,OACA,OACA,YASD;CACC,OACI,qBAAC,WAAD;EACI,cAAY;EACZ,mBAAiB,GAAG,GAAG;EACvB,WAAU;EAHd,UAAA,CAKI,qBAAC,UAAD;GAAQ,WAAU;GAAlB,UAAA;IACK;IACD,qBAAC,MAAD;KAAI,IAAI,GAAG,GAAG;KAAK,WAAU;KAA7B,UAAA;MACK;MAAM;MAAC,oBAAC,QAAD;OAAM,WAAU;OAAsD,UAAA;MAAY,CAAA;KAC1F;;IACH,SAAS,oBAAC,QAAD;KAAM,WAAU;KAAgD,UAAA;IAAY,CAAA;GAClF;EACR,CAAA,GAAA,oBAAC,OAAD;GAAK,WAAU;GAAc;EAAc,CAAA,CACtC;;AAEjB;;AAGA,SAAgB,UAAU,EAAE,YAAqC;CAC7D,OAAO,oBAAC,MAAD;EAAI,WAAU;EAA0B;CAAa,CAAA;AAChE;;AAGA,SAAgB,eAAe,EAAE,YAAqC;CAClE,OACI,oBAAC,KAAD;EAAG,mBAAA;EAAgB,WAAU;EACxB;CACF,CAAA;AAEX;;;AAIA,SAAgB,WAAW,EACvB,UACA,OACA,OACA,OACA,YAOD;CACC,OACI,qBAAC,QAAD;EACI,WAAU;EACH;EAFX,UAAA,CAIK,UAAU,KAAA,KACP,oBAAC,QAAD;GAAM,WAAU;GACX,UAAA,MAAM,KAAK,EAAE,QAAQ,KAAK,IAAI,OAAO,QAAQ,EAAE,IAAI,GAAG,MACnD,oBAAC,QAAD;IAEI,WAAU;IACV,OAAO,EAAE,YAAY,IAAI,WAAW,QAAQ,gBAAgB;GAC/D,GAHQ,CAGR,CACJ;EACC,CAAA,GAET,QACC;;AAEd;;;AAIA,SAAgB,aAAa,EACzB,OACA,OACA,MACA,WAOD;CACC,OACI,qBAAC,QAAD;EACI,WAAU;EACH;EAFX,UAAA;GAIK,QACG,oBAAC,QAAD;IAAM,WAAU;IAAmB,OAAO;IAAM,wBAAA;IAC3C,UAAA;GACC,CAAA;GAEV,oBAAC,QAAD;IAAM,eAAY;IAAQ,UAAA;GAAY,CAAA;GACrC;EACC;;AAEd;;AAGA,SAAgB,cAAc,EAAE,OAAO,YAAoD;CACvF,OACI,oBAAC,WAAD;EAAS,WAAU;EAA6B,cAAY;EACvD;CACI,CAAA;AAEjB"}
@@ -0,0 +1,141 @@
1
+ import { MouseEvent, ReactNode } from "react";
2
+ /** A stage row: `item` names it as `data-item`, and `picked` marks the item the dialog shows. */
3
+ export declare function StageRowItem({ item, picked, children }: {
4
+ item: string;
5
+ picked: boolean;
6
+ children: ReactNode;
7
+ }): import("react").JSX.Element;
8
+ /** A row's first line: its cells, then its side. */
9
+ export declare function RowFirst({ children }: {
10
+ children: ReactNode;
11
+ }): import("react").JSX.Element;
12
+ /** A row's first line's cells as the one button that opens its item. */
13
+ export declare function RowOpen({ onOpen, children }: {
14
+ onOpen: () => void;
15
+ children: ReactNode;
16
+ }): import("react").JSX.Element;
17
+ /** A row's first line's cells, when its title opens the item and the rest of the line does something else. */
18
+ export declare function RowCells({ children }: {
19
+ children: ReactNode;
20
+ }): import("react").JSX.Element;
21
+ /** The first cell: the item's status glyph. */
22
+ export declare function RowGlyph({ children }: {
23
+ children: ReactNode;
24
+ }): import("react").JSX.Element;
25
+ /** The first cell of a Queue row: its place in the Queue. */
26
+ export declare function QueuePlace({ children }: {
27
+ children: ReactNode;
28
+ }): import("react").JSX.Element;
29
+ /** Where the item's ticket is saved and its repository, in the source cell. */
30
+ export declare function RowIdentity({ children }: {
31
+ children: ReactNode;
32
+ }): import("react").JSX.Element;
33
+ /** The kind cell. */
34
+ export declare function RowKindCell({ children }: {
35
+ children: ReactNode;
36
+ }): import("react").JSX.Element;
37
+ /** The title cell: the RowTitle and what it is part of. */
38
+ export declare function RowTitleCell({ children }: {
39
+ children: ReactNode;
40
+ }): import("react").JSX.Element;
41
+ /** The row's title, truncating; `name` gives it whole. */
42
+ export declare function RowTitle({ name, children }: {
43
+ name: string;
44
+ children: ReactNode;
45
+ }): import("react").JSX.Element;
46
+ /** After the title: which concept or parent the row's work belongs to, giving its room up first. */
47
+ export declare function RowPartOf({ children }: {
48
+ children: string;
49
+ }): import("react").JSX.Element;
50
+ /** The state cell, which `clips` what overflows it unless what it holds keeps its own width. */
51
+ export declare function RowStateCell({ clips, children }: {
52
+ clips?: boolean;
53
+ children: ReactNode;
54
+ }): import("react").JSX.Element;
55
+ /** The row's state in words; `title` says more. */
56
+ export declare function RowState({ title, children }: {
57
+ title?: string;
58
+ children: ReactNode;
59
+ }): import("react").JSX.Element;
60
+ /** A Queue row's state: how long it has waited. */
61
+ export declare function QueueAge({ children }: {
62
+ children: ReactNode;
63
+ }): import("react").JSX.Element;
64
+ /** The row's action slot, at its right. With `passEmpty`, clicks on its controls stay there, and a click beside them
65
+ * reaches the row. */
66
+ export declare function RowSide({ passEmpty, children }: {
67
+ passEmpty?: boolean;
68
+ children: ReactNode;
69
+ }): import("react").JSX.Element;
70
+ /** Where to act on an item that waits on you, in its action slot. */
71
+ export declare function OnYourDesk({ children }: {
72
+ children: ReactNode;
73
+ }): import("react").JSX.Element;
74
+ /** A row's second line: `bar` and `count` on the left, `children` in its text slot, then its pull requests and
75
+ * figures. A click on it beside its controls goes to `onClick`. */
76
+ export declare function RowSecondLine({ bar, count, prs, figures, onClick, children }: {
77
+ bar?: ReactNode;
78
+ /** A RowCount or RowSliceToggle; with none, its cell stays empty. */
79
+ count?: ReactNode;
80
+ /** The pull requests, as PullRequestRefs. */
81
+ prs?: ReactNode;
82
+ figures?: ReactNode;
83
+ onClick?: ((event: MouseEvent<HTMLElement>) => void) | undefined;
84
+ children?: ReactNode;
85
+ }): import("react").JSX.Element;
86
+ /** The second line's count, such as `2/5 parts`. */
87
+ export declare function RowCount({ title, children }: {
88
+ title?: string;
89
+ children: ReactNode;
90
+ }): import("react").JSX.Element;
91
+ /** The second line's slice count as a button that unfolds the row's slices under it. */
92
+ export declare function RowSliceToggle({ open, label, onToggle, children }: {
93
+ open: boolean;
94
+ /** Names the button, as what it does now. */
95
+ label: string;
96
+ onToggle: () => void;
97
+ children: ReactNode;
98
+ }): import("react").JSX.Element;
99
+ /** Why the row is blocked, as a danger badge in its second line that truncates. */
100
+ export declare function RowBlocked({ children }: {
101
+ children: string;
102
+ }): import("react").JSX.Element;
103
+ declare const SLICE_TONE: {
104
+ readonly blocked: 'text-(--st-review)';
105
+ readonly active: 'text-(--st-now)';
106
+ };
107
+ /** The second line's word on the row's slices: its first blocked or active slice, `more` after it, and anything `after`
108
+ * that (such as that every slice is implemented); `title` lists them all. */
109
+ export declare function RowSliceNote({ title, first, more, after }: {
110
+ title?: string | undefined;
111
+ first?: {
112
+ word: string;
113
+ tone: keyof typeof SLICE_TONE;
114
+ title: string;
115
+ } | undefined;
116
+ more?: string | undefined;
117
+ after?: string | undefined;
118
+ }): import("react").JSX.Element;
119
+ /** Under a row: Start's message or error and what Auto-build says of it, taking no room when empty. */
120
+ export declare function RowFoot({ children }: {
121
+ children: ReactNode;
122
+ }): import("react").JSX.Element;
123
+ /** Under a row: its unfolded slices. */
124
+ export declare function RowSlices({ children }: {
125
+ children: ReactNode;
126
+ }): import("react").JSX.Element;
127
+ /** The agent figures on one line, at the row's right: `text`, ending in a + when `partial`, or `incomplete` when there
128
+ * are no figures to show; while `updating`, a spinner named by it leads them. A row that stops animating keeps its
129
+ * spinner `still`. */
130
+ export declare function UsageFigures({ title, text, updating, still, partial, incomplete }: {
131
+ title: string;
132
+ text?: string | null | undefined;
133
+ updating?: string | undefined;
134
+ still?: boolean;
135
+ /** Screen-reader words for the +. */
136
+ partial?: string | undefined;
137
+ /** The words in place of figures for an incomplete total with none to show. */
138
+ incomplete?: string | undefined;
139
+ }): import("react").JSX.Element;
140
+ export {};
141
+ //# sourceMappingURL=StageRow.d.ts.map