@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,44 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ // src/board/Dependencies.tsx
3
+ /** The Dependencies, one DependencyItem each. */
4
+ function DependencyList({ children }) {
5
+ return /* @__PURE__ */ jsx("ul", {
6
+ className: "m-0 grid list-none gap-3 p-0 text-sm",
7
+ children
8
+ });
9
+ }
10
+ /** A Dependency: who owns it and whether it's met, its need, its latest read and evidence, what the board asks about it,
11
+ * and its `action`. */
12
+ function DependencyItem({ id, owner, need, read, evidence, notice, action }) {
13
+ return /* @__PURE__ */ jsxs("li", {
14
+ className: "grid gap-1",
15
+ "data-dependency": id,
16
+ children: [
17
+ /* @__PURE__ */ jsx("span", {
18
+ className: "font-medium",
19
+ "data-dependency-owner": true,
20
+ children: owner
21
+ }),
22
+ /* @__PURE__ */ jsx("span", { children: need }),
23
+ /* @__PURE__ */ jsx("span", {
24
+ className: "text-xs text-(--muted-foreground)",
25
+ "data-dependency-read": true,
26
+ children: read
27
+ }),
28
+ /* @__PURE__ */ jsx("span", {
29
+ className: "text-xs text-(--muted-foreground)",
30
+ "data-dependency-evidence": true,
31
+ children: evidence
32
+ }),
33
+ notice && /* @__PURE__ */ jsx("p", {
34
+ className: "m-0 text-xs font-medium text-(--warning-foreground)",
35
+ "data-dependency-notice": true,
36
+ children: notice
37
+ }),
38
+ /* @__PURE__ */ jsx("span", { children: action })
39
+ ]
40
+ });
41
+ }
42
+ export { DependencyItem, DependencyList };
43
+
44
+ //# sourceMappingURL=Dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dependencies.js","names":[],"sources":["../../src/board/Dependencies.tsx"],"sourcesContent":["// The Dependencies holding a build, in the item dialog.\n\nimport type { ReactNode } from 'react';\n\n/** The Dependencies, one DependencyItem each. */\nexport function DependencyList({ children }: { children: ReactNode }) {\n return <ul className=\"m-0 grid list-none gap-3 p-0 text-sm\">{children}</ul>;\n}\n\n/** A Dependency: who owns it and whether it's met, its need, its latest read and evidence, what the board asks about it,\n * and its `action`. */\nexport function DependencyItem({\n id,\n owner,\n need,\n read,\n evidence,\n notice,\n action,\n}: {\n id: string;\n owner: ReactNode;\n need: ReactNode;\n read: ReactNode;\n evidence: ReactNode;\n notice?: ReactNode;\n action: ReactNode;\n}) {\n return (\n <li className=\"grid gap-1\" data-dependency={id}>\n <span className=\"font-medium\" data-dependency-owner>\n {owner}\n </span>\n <span>{need}</span>\n <span className=\"text-xs text-(--muted-foreground)\" data-dependency-read>\n {read}\n </span>\n <span className=\"text-xs text-(--muted-foreground)\" data-dependency-evidence>\n {evidence}\n </span>\n {notice && (\n <p className=\"m-0 text-xs font-medium text-(--warning-foreground)\" data-dependency-notice>\n {notice}\n </p>\n )}\n <span>{action}</span>\n </li>\n );\n}\n"],"mappings":";;;AAKA,SAAgB,eAAe,EAAE,YAAqC;CAClE,OAAO,oBAAC,MAAD;EAAI,WAAU;EAAwC;CAAa,CAAA;AAC9E;;;AAIA,SAAgB,eAAe,EAC3B,IACA,OACA,MACA,MACA,UACA,QACA,UASD;CACC,OACI,qBAAC,MAAD;EAAI,WAAU;EAAa,mBAAiB;EAA5C,UAAA;GACI,oBAAC,QAAD;IAAM,WAAU;IAAc,yBAAA;IACzB,UAAA;GACC,CAAA;GACN,oBAAC,QAAD,EAAA,UAAO,KAAW,CAAA;GAClB,oBAAC,QAAD;IAAM,WAAU;IAAoC,wBAAA;IAC/C,UAAA;GACC,CAAA;GACN,oBAAC,QAAD;IAAM,WAAU;IAAoC,4BAAA;IAC/C,UAAA;GACC,CAAA;GACL,UACG,oBAAC,KAAD;IAAG,WAAU;IAAsD,0BAAA;IAC9D,UAAA;GACF,CAAA;GAEP,oBAAC,QAAD,EAAA,UAAO,OAAa,CAAA;EACpB;;AAEZ"}
@@ -0,0 +1,52 @@
1
+ import { ReactNode } from "react";
2
+ interface DeskSectionProps {
3
+ title: string;
4
+ /** How many cards show; with none, `empty` says why in one small line. */
5
+ count: number;
6
+ empty?: ReactNode;
7
+ children?: ReactNode;
8
+ }
9
+ /** "Your desk": the items awaiting your action as small cards in one row that scrolls sideways under the page's padding
10
+ * to the window's edges. An empty desk is one small line. */
11
+ export declare function DeskSection({ title, count, empty, children }: DeskSectionProps): import("react").JSX.Element;
12
+ interface DeskCardProps {
13
+ /** The item's id, as `data-item`. */
14
+ item: string;
15
+ /** Whether the item dialog shows this item now. */
16
+ picked: boolean;
17
+ onOpen: () => void;
18
+ /** The first row: where the item comes from, its kind and its age. */
19
+ source: ReactNode;
20
+ kind: ReactNode;
21
+ age: ReactNode;
22
+ title: ReactNode;
23
+ /** The title's full text, for its tooltip. */
24
+ name: string;
25
+ /** More about the item under its title, such as a work item's fields. */
26
+ details?: ReactNode;
27
+ statusIcon: ReactNode;
28
+ status: string;
29
+ /** Beside the status: the next step, such as DeskMergeState or DeskHint. */
30
+ next?: ReactNode;
31
+ /** The card's actions, in its right corner, the board's button kinds drawn 32px tall there. A click beside them
32
+ * opens the item, as anywhere else on the card. */
33
+ actions: ReactNode;
34
+ }
35
+ /**
36
+ * An item on your desk, opening the item dialog. Every card has the same four rows at the same heights, so they line
37
+ * up across cards: source, kind and age; the title; the status and next step; and the card's actions. Its summary is a
38
+ * button too, so the keyboard can open it.
39
+ */
40
+ export declare function DeskCard({ item, picked, onOpen, source, kind, age, title, name, details, statusIcon, status, next, actions }: DeskCardProps): import("react").JSX.Element;
41
+ export type MergeState = 'can merge' | 'checking' | 'blocked' | 'conflicts';
42
+ /** A desk card's next step while its pull request is open: its merge state, then its checks. */
43
+ export declare function DeskMergeState({ state, checks }: {
44
+ state: MergeState;
45
+ checks: string;
46
+ }): import("react").JSX.Element;
47
+ /** A desk card's next step as a hint, such as what its status waits for. */
48
+ export declare function DeskHint({ children }: {
49
+ children?: string | undefined;
50
+ }): import("react").JSX.Element;
51
+ export {};
52
+ //# sourceMappingURL=Desk.d.ts.map
@@ -0,0 +1,130 @@
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ // src/board/Desk.tsx
3
+ /** "Your desk": the items awaiting your action as small cards in one row that scrolls sideways under the page's padding
4
+ * to the window's edges. An empty desk is one small line. */
5
+ function DeskSection({ title, count, empty, children }) {
6
+ if (!count) return /* @__PURE__ */ jsxs("section", {
7
+ className: "desk flex shrink-0 items-baseline gap-2 text-xs text-(--muted-foreground)",
8
+ "aria-labelledby": "desk-h",
9
+ children: [/* @__PURE__ */ jsx("h2", {
10
+ id: "desk-h",
11
+ className: "m-0 text-[13px] font-medium text-(--foreground)",
12
+ children: title
13
+ }), /* @__PURE__ */ jsx("p", {
14
+ className: "m-0",
15
+ children: empty
16
+ })]
17
+ });
18
+ return /* @__PURE__ */ jsxs("section", {
19
+ className: "desk grid shrink-0 gap-2",
20
+ "aria-labelledby": "desk-h",
21
+ children: [/* @__PURE__ */ jsxs("h2", {
22
+ id: "desk-h",
23
+ className: "m-0 text-[13px] font-medium",
24
+ children: [
25
+ title,
26
+ " ",
27
+ /* @__PURE__ */ jsx("span", {
28
+ className: "text-(--muted-foreground)",
29
+ children: count
30
+ })
31
+ ]
32
+ }), /* @__PURE__ */ jsx("div", {
33
+ className: "-mx-6 flex [scrollbar-width:none] items-start gap-3 overflow-x-auto px-6 py-1 [&::-webkit-scrollbar]:hidden",
34
+ children
35
+ })]
36
+ });
37
+ }
38
+ /**
39
+ * An item on your desk, opening the item dialog. Every card has the same four rows at the same heights, so they line
40
+ * up across cards: source, kind and age; the title; the status and next step; and the card's actions. Its summary is a
41
+ * button too, so the keyboard can open it.
42
+ */
43
+ function DeskCard({ item, picked, onOpen, source, kind, age, title, name, details, statusIcon, status, next, actions }) {
44
+ return /* @__PURE__ */ jsxs("div", {
45
+ onClick: onOpen,
46
+ "data-item": item,
47
+ className: `desk-card relative grid w-88 shrink-0 cursor-pointer content-start gap-2 rounded-xl border border-[color-mix(in_srgb,var(--warning)_45%,var(--border))] bg-(--card) py-3 pr-3 pl-4 shadow-[inset_3px_0_0_var(--warning)] hover:bg-(--accent) ${picked ? "ring-2 ring-(--primary) ring-offset-1 ring-offset-(--background)" : ""}`,
48
+ children: [
49
+ /* @__PURE__ */ jsxs("button", {
50
+ type: "button",
51
+ className: "grid min-w-0 gap-2 rounded text-left focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-(--primary)",
52
+ children: [
53
+ /* @__PURE__ */ jsxs("span", {
54
+ className: "desk-meta flex h-6 min-w-0 items-center gap-2 text-[11px]",
55
+ children: [
56
+ source,
57
+ kind,
58
+ /* @__PURE__ */ jsx("span", {
59
+ className: "ml-auto shrink-0 text-(--muted-foreground)",
60
+ children: age
61
+ })
62
+ ]
63
+ }),
64
+ /* @__PURE__ */ jsx("span", {
65
+ className: "desk-title h-5 truncate text-[13px]/5 font-medium",
66
+ title: name,
67
+ children: title
68
+ }),
69
+ details
70
+ ]
71
+ }),
72
+ /* @__PURE__ */ jsxs("span", {
73
+ className: "flex min-w-0 items-center gap-2",
74
+ children: [/* @__PURE__ */ jsxs("span", {
75
+ className: "flex shrink-0 items-center gap-1.5 text-[11px] [&_svg]:size-3",
76
+ children: [statusIcon, /* @__PURE__ */ jsx("span", {
77
+ className: "font-semibold text-(--warning-foreground)",
78
+ children: status
79
+ })]
80
+ }), /* @__PURE__ */ jsx("span", {
81
+ className: "desk-next flex h-5 min-w-0 flex-1 items-center gap-1.5 text-[11px] text-(--muted-foreground) tabular-nums",
82
+ children: next
83
+ })]
84
+ }),
85
+ /* @__PURE__ */ jsx("div", {
86
+ className: "desk-actions flex h-8 shrink-0 items-center justify-end gap-1.5 [&_[data-kind]:not([data-toggle])]:h-8 [&_[data-kind][data-icon-only]]:w-8!",
87
+ onClick: (event) => {
88
+ if (event.target !== event.currentTarget) event.stopPropagation();
89
+ },
90
+ children: actions
91
+ })
92
+ ]
93
+ });
94
+ }
95
+ const mergeDots = {
96
+ "can merge": "bg-(--build)",
97
+ checking: "bg-(--warning)",
98
+ blocked: "bg-(--muted-foreground)",
99
+ conflicts: "bg-(--error)"
100
+ };
101
+ /** A desk card's next step while its pull request is open: its merge state, then its checks. */
102
+ function DeskMergeState({ state, checks }) {
103
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
104
+ /* @__PURE__ */ jsx("span", { className: `size-2 shrink-0 rounded-full ${mergeDots[state]}` }),
105
+ /* @__PURE__ */ jsx("span", {
106
+ className: "shrink-0 font-medium text-(--foreground)",
107
+ children: state
108
+ }),
109
+ /* @__PURE__ */ jsxs("span", {
110
+ className: "truncate",
111
+ title: `${state} · ${checks}`,
112
+ children: [
113
+ " ",
114
+ "· ",
115
+ checks
116
+ ]
117
+ })
118
+ ] });
119
+ }
120
+ /** A desk card's next step as a hint, such as what its status waits for. */
121
+ function DeskHint({ children }) {
122
+ return /* @__PURE__ */ jsx("span", {
123
+ className: "truncate",
124
+ title: children,
125
+ children
126
+ });
127
+ }
128
+ export { DeskCard, DeskHint, DeskMergeState, DeskSection };
129
+
130
+ //# sourceMappingURL=Desk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Desk.js","names":[],"sources":["../../src/board/Desk.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\ninterface DeskSectionProps {\n title: string;\n /** How many cards show; with none, `empty` says why in one small line. */\n count: number;\n empty?: ReactNode;\n children?: ReactNode;\n}\n\n/** \"Your desk\": the items awaiting your action as small cards in one row that scrolls sideways under the page's padding\n * to the window's edges. An empty desk is one small line. */\nexport function DeskSection({ title, count, empty, children }: DeskSectionProps) {\n if (!count)\n return (\n <section\n className=\"desk flex shrink-0 items-baseline gap-2 text-xs text-(--muted-foreground)\"\n aria-labelledby=\"desk-h\"\n >\n <h2 id=\"desk-h\" className=\"m-0 text-[13px] font-medium text-(--foreground)\">\n {title}\n </h2>\n <p className=\"m-0\">{empty}</p>\n </section>\n );\n\n return (\n <section className=\"desk grid shrink-0 gap-2\" aria-labelledby=\"desk-h\">\n <h2 id=\"desk-h\" className=\"m-0 text-[13px] font-medium\">\n {title} <span className=\"text-(--muted-foreground)\">{count}</span>\n </h2>\n <div className=\"-mx-6 flex [scrollbar-width:none] items-start gap-3 overflow-x-auto px-6 py-1 [&::-webkit-scrollbar]:hidden\">\n {children}\n </div>\n </section>\n );\n}\n\ninterface DeskCardProps {\n /** The item's id, as `data-item`. */\n item: string;\n /** Whether the item dialog shows this item now. */\n picked: boolean;\n onOpen: () => void;\n /** The first row: where the item comes from, its kind and its age. */\n source: ReactNode;\n kind: ReactNode;\n age: ReactNode;\n title: ReactNode;\n /** The title's full text, for its tooltip. */\n name: string;\n /** More about the item under its title, such as a work item's fields. */\n details?: ReactNode;\n statusIcon: ReactNode;\n status: string;\n /** Beside the status: the next step, such as DeskMergeState or DeskHint. */\n next?: ReactNode;\n /** The card's actions, in its right corner, the board's button kinds drawn 32px tall there. A click beside them\n * opens the item, as anywhere else on the card. */\n actions: ReactNode;\n}\n\n/**\n * An item on your desk, opening the item dialog. Every card has the same four rows at the same heights, so they line\n * up across cards: source, kind and age; the title; the status and next step; and the card's actions. Its summary is a\n * button too, so the keyboard can open it.\n */\nexport function DeskCard({\n item,\n picked,\n onOpen,\n source,\n kind,\n age,\n title,\n name,\n details,\n statusIcon,\n status,\n next,\n actions,\n}: DeskCardProps) {\n return (\n <div\n onClick={onOpen}\n data-item={item}\n className={`desk-card relative grid w-88 shrink-0 cursor-pointer content-start gap-2 rounded-xl border border-[color-mix(in_srgb,var(--warning)_45%,var(--border))] bg-(--card) py-3 pr-3 pl-4 shadow-[inset_3px_0_0_var(--warning)] hover:bg-(--accent) ${picked ? 'ring-2 ring-(--primary) ring-offset-1 ring-offset-(--background)' : ''}`}\n >\n <button\n type=\"button\"\n className=\"grid min-w-0 gap-2 rounded text-left focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-(--primary)\"\n >\n <span className=\"desk-meta flex h-6 min-w-0 items-center gap-2 text-[11px]\">\n {source}\n {kind}\n <span className=\"ml-auto shrink-0 text-(--muted-foreground)\">{age}</span>\n </span>\n <span className=\"desk-title h-5 truncate text-[13px]/5 font-medium\" title={name}>\n {title}\n </span>\n {details}\n </button>\n <span className=\"flex min-w-0 items-center gap-2\">\n <span className=\"flex shrink-0 items-center gap-1.5 text-[11px] [&_svg]:size-3\">\n {statusIcon}\n <span className=\"font-semibold text-(--warning-foreground)\">{status}</span>\n </span>\n <span className=\"desk-next flex h-5 min-w-0 flex-1 items-center gap-1.5 text-[11px] text-(--muted-foreground) tabular-nums\">\n {next}\n </span>\n </span>\n <div\n className=\"desk-actions flex h-8 shrink-0 items-center justify-end gap-1.5 [&_[data-kind]:not([data-toggle])]:h-8 [&_[data-kind][data-icon-only]]:w-8!\"\n // The actions keep their clicks from the card; a click on the row's own empty space still opens it.\n onClick={(event) => {\n if (event.target !== event.currentTarget) event.stopPropagation();\n }}\n >\n {actions}\n </div>\n </div>\n );\n}\n\nexport type MergeState = 'can merge' | 'checking' | 'blocked' | 'conflicts';\n\nconst mergeDots: Record<MergeState, string> = {\n 'can merge': 'bg-(--build)',\n checking: 'bg-(--warning)',\n blocked: 'bg-(--muted-foreground)',\n conflicts: 'bg-(--error)',\n};\n\n/** A desk card's next step while its pull request is open: its merge state, then its checks. */\nexport function DeskMergeState({ state, checks }: { state: MergeState; checks: string }) {\n return (\n <>\n <span className={`size-2 shrink-0 rounded-full ${mergeDots[state]}`} />\n <span className=\"shrink-0 font-medium text-(--foreground)\">{state}</span>\n <span className=\"truncate\" title={`${state} · ${checks}`}>\n {' '}\n · {checks}\n </span>\n </>\n );\n}\n\n/** A desk card's next step as a hint, such as what its status waits for. */\nexport function DeskHint({ children }: { children?: string | undefined }) {\n return (\n <span className=\"truncate\" title={children}>\n {children}\n </span>\n );\n}\n"],"mappings":";;;;AAYA,SAAgB,YAAY,EAAE,OAAO,OAAO,OAAO,YAA8B;CAC7E,IAAI,CAAC,OACD,OACI,qBAAC,WAAD;EACI,WAAU;EACV,mBAAgB;EAFpB,UAAA,CAII,oBAAC,MAAD;GAAI,IAAG;GAAS,WAAU;GACrB,UAAA;EACD,CAAA,GACJ,oBAAC,KAAD;GAAG,WAAU;GAAO,UAAA;EAAS,CAAA,CACxB;;CAGjB,OACI,qBAAC,WAAD;EAAS,WAAU;EAA2B,mBAAgB;EAA9D,UAAA,CACI,qBAAC,MAAD;GAAI,IAAG;GAAS,WAAU;GAA1B,UAAA;IACK;IAAM;IAAC,oBAAC,QAAD;KAAM,WAAU;KAA6B,UAAA;IAAY,CAAA;GACjE;EACJ,CAAA,GAAA,oBAAC,OAAD;GAAK,WAAU;GACV;EACA,CAAA,CACA;;AAEjB;;;;;;AA+BA,SAAgB,SAAS,EACrB,MACA,QACA,QACA,QACA,MACA,KACA,OACA,MACA,SACA,YACA,QACA,MACA,WACc;CACd,OACI,qBAAC,OAAD;EACI,SAAS;EACT,aAAW;EACX,WAAW,gPAAgP,SAAS,qEAAqE;EAH7U,UAAA;GAKI,qBAAC,UAAD;IACI,MAAK;IACL,WAAU;IAFd,UAAA;KAII,qBAAC,QAAD;MAAM,WAAU;MAAhB,UAAA;OACK;OACA;OACD,oBAAC,QAAD;QAAM,WAAU;QAA8C,UAAA;OAAU,CAAA;MACtE;;KACN,oBAAC,QAAD;MAAM,WAAU;MAAoD,OAAO;MACtE,UAAA;KACC,CAAA;KACL;IACG;;GACR,qBAAC,QAAD;IAAM,WAAU;IAAhB,UAAA,CACI,qBAAC,QAAD;KAAM,WAAU;KAAhB,UAAA,CACK,YACD,oBAAC,QAAD;MAAM,WAAU;MAA6C,UAAA;KAAa,CAAA,CACxE;IACN,CAAA,GAAA,oBAAC,QAAD;KAAM,WAAU;KACX,UAAA;IACC,CAAA,CACJ;;GACN,oBAAC,OAAD;IACI,WAAU;IAEV,UAAU,UAAU;KAChB,IAAI,MAAM,WAAW,MAAM,eAAe,MAAM,gBAAgB;IACpE;IAEC,UAAA;GACA,CAAA;EACJ;;AAEb;AAIA,MAAM,YAAwC;CAC1C,aAAa;CACb,UAAU;CACV,SAAS;CACT,WAAW;AACf;;AAGA,SAAgB,eAAe,EAAE,OAAO,UAAiD;CACrF,OACI,qBAAA,UAAA,EAAA,UAAA;EACI,oBAAC,QAAD,EAAM,WAAW,gCAAgC,UAAU,SAAW,CAAA;EACtE,oBAAC,QAAD;GAAM,WAAU;GAA4C,UAAA;EAAY,CAAA;EACxE,qBAAC,QAAD;GAAM,WAAU;GAAW,OAAO,GAAG,MAAM,KAAK;GAAhD,UAAA;IACK;IAAI;IACF;GACD;;CACR,EAAA,CAAA;AAEV;;AAGA,SAAgB,SAAS,EAAE,YAA+C;CACtE,OACI,oBAAC,QAAD;EAAM,WAAU;EAAW,OAAO;EAC7B;CACC,CAAA;AAEd"}
@@ -0,0 +1,100 @@
1
+ import { MouseEvent, ReactNode } from "react";
2
+ /** A dossier, named by `label`; `id` names it as `data-dossier`. */
3
+ export declare function DossierRow({ id, label, children }: {
4
+ id: string;
5
+ label: string;
6
+ children: ReactNode;
7
+ }): import("react").JSX.Element;
8
+ /** The dossiers in the dock. */
9
+ export declare function DossierList({ children }: {
10
+ children: ReactNode;
11
+ }): import("react").JSX.Element;
12
+ /** The chevron that expands a dossier in place, named by what it does now. */
13
+ export declare function DossierToggle({ open, label, onToggle }: {
14
+ open: boolean;
15
+ label: string;
16
+ onToggle: () => void;
17
+ }): import("react").JSX.Element;
18
+ /** A dossier's line: a click anywhere on it but its controls goes to `onClick`; `title` gives what its chips and threads
19
+ * say. */
20
+ export declare function DossierLine({ item, picked, title, onClick, children }: {
21
+ item: string;
22
+ picked: boolean;
23
+ title?: string | undefined;
24
+ onClick?: (event: MouseEvent<HTMLDivElement>) => void;
25
+ children: ReactNode;
26
+ }): import("react").JSX.Element;
27
+ /** The dossier line's title cell: its title, tracker fields, note and other repositories, the title keeping its room. */
28
+ export declare function DossierTitleCell({ children }: {
29
+ children: ReactNode;
30
+ }): import("react").JSX.Element;
31
+ /** The dossier's title as the button that opens its item; `name` gives it whole. */
32
+ export declare function DossierTitle({ name, onOpen, children }: {
33
+ name: string;
34
+ onOpen: () => void;
35
+ children: ReactNode;
36
+ }): import("react").JSX.Element;
37
+ /** After the title: the tracker's fields, which give up their room before the title does, ending in an ellipsis. Below
38
+ * `lg` they may shrink to nothing, so a narrow line's title keeps its room. */
39
+ export declare function DossierFields({ children }: {
40
+ children: ReactNode;
41
+ }): import("react").JSX.Element;
42
+ /** After the fields: a note, such as where its planning is saved; its clicks stay there. */
43
+ export declare function DossierNote({ children }: {
44
+ children: ReactNode;
45
+ }): import("react").JSX.Element;
46
+ /** The repositories its parts work in beyond its own. */
47
+ export declare function DossierRepos({ children }: {
48
+ children: string;
49
+ }): import("react").JSX.Element;
50
+ /** A dossier chip's tone. */
51
+ export type DossierChipTone = 'warning' | 'danger' | 'neutral' | 'accent' | 'success';
52
+ /** The dossier's first chip whole, at its full width, and how many `more` its line's tooltip names. Its clicks stay
53
+ * there. */
54
+ export declare function DossierChips({ first, more }: {
55
+ first: {
56
+ words: string;
57
+ tone: DossierChipTone;
58
+ icon?: ReactNode;
59
+ refined?: boolean | undefined;
60
+ };
61
+ /** The other chips' words. */
62
+ more: string[];
63
+ }): import("react").JSX.Element;
64
+ /** An expanded dossier's view controls, in its action slot. */
65
+ export declare function DossierTools({ children }: {
66
+ children: ReactNode;
67
+ }): import("react").JSX.Element;
68
+ /** What's next, as a sentence in the second line's text slot: a `word` naming it, in the warning tone when it waits on
69
+ * you, screen-reader text alone when `unseen`, then the `text` that names it. */
70
+ export declare function DossierNext({ word, yours, unseen, text }: {
71
+ word?: string | undefined;
72
+ yours?: boolean;
73
+ unseen?: boolean;
74
+ text: string;
75
+ }): import("react").JSX.Element;
76
+ /** One part in PartsBar: its name and state, its colour, and whether it pulses while at work. */
77
+ export interface PartSegment {
78
+ key: string;
79
+ title: string;
80
+ color: string;
81
+ pulse?: boolean;
82
+ }
83
+ /** Every part as a segment in its colour, so the bar fills left to right, then a dashed one per part the board
84
+ * doesn't read. */
85
+ export declare function PartsBar({ title, parts, unread }: {
86
+ title: string;
87
+ parts: PartSegment[];
88
+ unread: number;
89
+ }): import("react").JSX.Element;
90
+ /** What an expanded dossier holds, under its line. */
91
+ export declare function DossierBody({ children }: {
92
+ children: ReactNode;
93
+ }): import("react").JSX.Element;
94
+ /** Where a dossier's planning is saved, as a quiet label; hovering or focusing it reads the whole `note`. */
95
+ export declare function PlanningNote({ note, role, children }: {
96
+ note: string;
97
+ role: 'status' | 'note';
98
+ children: ReactNode;
99
+ }): import("react").JSX.Element;
100
+ //# sourceMappingURL=Dossier.d.ts.map
@@ -0,0 +1,194 @@
1
+ import { Badge } from "../display/Badge.js";
2
+ import { ambientMotion } from "../foundations/AmbientMotion.js";
3
+ import { Tooltip, TooltipPopup, TooltipTrigger } from "../overlays/Tooltip.js";
4
+ import { ROW_OPENS, ROW_RULE, pickedRow } from "./RowStyles.js";
5
+ import { ChevronRightIcon } from "lucide-react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ // src/board/Dossier.tsx
8
+ const stop = (event) => event.stopPropagation();
9
+ /** A dossier, named by `label`; `id` names it as `data-dossier`. */
10
+ function DossierRow({ id, label, children }) {
11
+ return /* @__PURE__ */ jsx("article", {
12
+ className: `@container ${ROW_RULE}`,
13
+ "data-dossier": id,
14
+ "aria-label": label,
15
+ children
16
+ });
17
+ }
18
+ /** The dossiers in the dock. */
19
+ function DossierList({ children }) {
20
+ return /* @__PURE__ */ jsx("div", {
21
+ "data-dossiers": true,
22
+ children
23
+ });
24
+ }
25
+ /** The chevron that expands a dossier in place, named by what it does now. */
26
+ function DossierToggle({ open, label, onToggle }) {
27
+ return /* @__PURE__ */ jsx("button", {
28
+ type: "button",
29
+ "data-dossier-open": true,
30
+ "aria-expanded": open,
31
+ "aria-label": label,
32
+ onClick: (event) => {
33
+ stop(event);
34
+ onToggle();
35
+ },
36
+ className: `grid size-6 shrink-0 place-items-center rounded-md text-(--muted-foreground) hover:bg-(--soft) hover:text-(--foreground) ${ROW_OPENS}`,
37
+ children: /* @__PURE__ */ jsx(ChevronRightIcon, { className: `size-4 ${open ? "rotate-90" : ""}` })
38
+ });
39
+ }
40
+ /** A dossier's line: a click anywhere on it but its controls goes to `onClick`; `title` gives what its chips and threads
41
+ * say. */
42
+ function DossierLine({ item, picked, title, onClick, children }) {
43
+ return /* @__PURE__ */ jsx("div", {
44
+ onClick,
45
+ "data-item": item,
46
+ title,
47
+ className: `cursor-pointer py-2 hover:bg-(--accent) ${pickedRow(picked)}`,
48
+ children
49
+ });
50
+ }
51
+ /** The dossier line's title cell: its title, tracker fields, note and other repositories, the title keeping its room. */
52
+ function DossierTitleCell({ children }) {
53
+ return /* @__PURE__ */ jsx("span", {
54
+ className: "flex min-w-0 items-center gap-1.5",
55
+ "data-line": "1",
56
+ "data-title-cell": true,
57
+ children
58
+ });
59
+ }
60
+ /** The dossier's title as the button that opens its item; `name` gives it whole. */
61
+ function DossierTitle({ name, onOpen, children }) {
62
+ return /* @__PURE__ */ jsx("button", {
63
+ type: "button",
64
+ onClick: (event) => {
65
+ stop(event);
66
+ onOpen();
67
+ },
68
+ title: name,
69
+ "data-title": true,
70
+ className: `min-w-0 truncate rounded text-left text-sm leading-7 font-medium text-(--foreground) hover:underline ${ROW_OPENS}`,
71
+ children
72
+ });
73
+ }
74
+ /** After the title: the tracker's fields, which give up their room before the title does, ending in an ellipsis. Below
75
+ * `lg` they may shrink to nothing, so a narrow line's title keeps its room. */
76
+ function DossierFields({ children }) {
77
+ return /* @__PURE__ */ jsx("span", {
78
+ className: "min-w-0 shrink-[1000] truncate empty:hidden lg:min-w-10",
79
+ children
80
+ });
81
+ }
82
+ /** After the fields: a note, such as where its planning is saved; its clicks stay there. */
83
+ function DossierNote({ children }) {
84
+ return /* @__PURE__ */ jsx("span", {
85
+ onClick: stop,
86
+ className: "flex shrink-0 items-center pl-1 empty:hidden",
87
+ children
88
+ });
89
+ }
90
+ /** The repositories its parts work in beyond its own. */
91
+ function DossierRepos({ children }) {
92
+ return /* @__PURE__ */ jsx("span", {
93
+ "data-col": "repos",
94
+ className: "min-w-16 shrink-[100] truncate text-(--muted-foreground) empty:hidden",
95
+ title: children || void 0,
96
+ children
97
+ });
98
+ }
99
+ /** The dossier's first chip whole, at its full width, and how many `more` its line's tooltip names. Its clicks stay
100
+ * there. */
101
+ function DossierChips({ first, more }) {
102
+ return /* @__PURE__ */ jsxs("span", {
103
+ onClick: stop,
104
+ className: "flex shrink-0 items-center gap-1",
105
+ "data-chips": true,
106
+ children: [/* @__PURE__ */ jsxs(Badge, {
107
+ tone: first.tone,
108
+ className: "whitespace-nowrap tabular-nums",
109
+ "data-chip": true,
110
+ "data-refined": first.refined || void 0,
111
+ children: [first.icon, first.words]
112
+ }), more.length > 0 && /* @__PURE__ */ jsxs("span", {
113
+ className: "text-(--muted-foreground) tabular-nums",
114
+ "data-chips-more": true,
115
+ children: [/* @__PURE__ */ jsxs("span", {
116
+ "aria-hidden": "true",
117
+ children: ["+", more.length]
118
+ }), /* @__PURE__ */ jsx("span", {
119
+ className: "sr-only",
120
+ children: more.join(", ")
121
+ })]
122
+ })]
123
+ });
124
+ }
125
+ /** An expanded dossier's view controls, in its action slot. */
126
+ function DossierTools({ children }) {
127
+ return /* @__PURE__ */ jsx("span", {
128
+ className: "flex shrink-0 items-center",
129
+ "data-dossier-tools": true,
130
+ children
131
+ });
132
+ }
133
+ /** What's next, as a sentence in the second line's text slot: a `word` naming it, in the warning tone when it waits on
134
+ * you, screen-reader text alone when `unseen`, then the `text` that names it. */
135
+ function DossierNext({ word, yours = false, unseen = false, text }) {
136
+ return /* @__PURE__ */ jsx("span", {
137
+ className: "min-w-0",
138
+ "data-next": true,
139
+ children: /* @__PURE__ */ jsxs("span", {
140
+ className: "flex min-w-0 items-center gap-2",
141
+ children: [word && /* @__PURE__ */ jsx("span", {
142
+ className: `shrink-0 font-medium ${yours ? "text-(--warning-foreground)" : "text-(--muted-foreground)"} ${unseen ? "sr-only" : ""}`,
143
+ children: word
144
+ }), /* @__PURE__ */ jsx("span", {
145
+ className: "min-w-0 truncate",
146
+ title: text,
147
+ children: text
148
+ })]
149
+ })
150
+ });
151
+ }
152
+ /** Every part as a segment in its colour, so the bar fills left to right, then a dashed one per part the board
153
+ * doesn't read. */
154
+ function PartsBar({ title, parts, unread }) {
155
+ return /* @__PURE__ */ jsxs("ol", {
156
+ className: "m-0 flex min-w-0 list-none gap-[2px] overflow-hidden p-0",
157
+ title,
158
+ "data-part-bar": true,
159
+ children: [parts.map((p) => /* @__PURE__ */ jsx("li", {
160
+ ref: p.pulse ? ambientMotion : void 0,
161
+ title: p.title,
162
+ className: `h-1.5 min-w-[3px] flex-1 rounded-full ${p.pulse ? "status-pulse" : ""}`,
163
+ style: { background: p.color }
164
+ }, p.key)), Array.from({ length: Math.max(0, unread) }, (_, n) => /* @__PURE__ */ jsx("li", { className: "h-1.5 min-w-[3px] flex-1 rounded-full border border-dashed border-(--input)" }, `u${n}`))]
165
+ });
166
+ }
167
+ /** What an expanded dossier holds, under its line. */
168
+ function DossierBody({ children }) {
169
+ return /* @__PURE__ */ jsx("div", {
170
+ className: "grid gap-3 border-t border-(--border) p-3",
171
+ "data-dossier-body": true,
172
+ children
173
+ });
174
+ }
175
+ /** Where a dossier's planning is saved, as a quiet label; hovering or focusing it reads the whole `note`. */
176
+ function PlanningNote({ note, role, children }) {
177
+ return /* @__PURE__ */ jsxs(Tooltip, { children: [/* @__PURE__ */ jsx(TooltipTrigger, {
178
+ asChild: true,
179
+ children: /* @__PURE__ */ jsx("span", {
180
+ tabIndex: 0,
181
+ role,
182
+ "aria-label": note,
183
+ "data-structure-sync": true,
184
+ className: "rounded whitespace-nowrap text-(--muted-foreground) focus-visible:outline-2 focus-visible:outline-(--primary)",
185
+ children
186
+ })
187
+ }), /* @__PURE__ */ jsx(TooltipPopup, {
188
+ side: "bottom",
189
+ children: note
190
+ })] });
191
+ }
192
+ export { DossierBody, DossierChips, DossierFields, DossierLine, DossierList, DossierNext, DossierNote, DossierRepos, DossierRow, DossierTitle, DossierTitleCell, DossierToggle, DossierTools, PartsBar, PlanningNote };
193
+
194
+ //# sourceMappingURL=Dossier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Dossier.js","names":[],"sources":["../../src/board/Dossier.tsx"],"sourcesContent":["// A dossier in Lar Factory's board's dock (Concepts and linked work): its one line, on the stage rows' columns, which\n// expands in place to its body, and what the line holds: its toggle, title, chips, what's next and the bar of its parts.\n\nimport { ChevronRightIcon } from 'lucide-react';\nimport type { MouseEvent, ReactNode } from 'react';\n\nimport { Badge } from '../display/Badge';\nimport { ambientMotion } from '../foundations/AmbientMotion';\nimport { Tooltip, TooltipPopup, TooltipTrigger } from '../overlays/Tooltip';\nimport { pickedRow, ROW_OPENS, ROW_RULE } from './RowStyles';\n\nconst stop = (event: MouseEvent) => event.stopPropagation();\n\n/** A dossier, named by `label`; `id` names it as `data-dossier`. */\nexport function DossierRow({ id, label, children }: { id: string; label: string; children: ReactNode }) {\n return (\n <article className={`@container ${ROW_RULE}`} data-dossier={id} aria-label={label}>\n {children}\n </article>\n );\n}\n\n/** The dossiers in the dock. */\nexport function DossierList({ children }: { children: ReactNode }) {\n return <div data-dossiers>{children}</div>;\n}\n\n/** The chevron that expands a dossier in place, named by what it does now. */\nexport function DossierToggle({ open, label, onToggle }: { open: boolean; label: string; onToggle: () => void }) {\n return (\n <button\n type=\"button\"\n data-dossier-open\n aria-expanded={open}\n aria-label={label}\n onClick={(event) => {\n stop(event);\n onToggle();\n }}\n className={`grid size-6 shrink-0 place-items-center rounded-md text-(--muted-foreground) hover:bg-(--soft) hover:text-(--foreground) ${ROW_OPENS}`}\n >\n <ChevronRightIcon className={`size-4 ${open ? 'rotate-90' : ''}`} />\n </button>\n );\n}\n\n/** A dossier's line: a click anywhere on it but its controls goes to `onClick`; `title` gives what its chips and threads\n * say. */\nexport function DossierLine({\n item,\n picked,\n title,\n onClick,\n children,\n}: {\n item: string;\n picked: boolean;\n title?: string | undefined;\n onClick?: (event: MouseEvent<HTMLDivElement>) => void;\n children: ReactNode;\n}) {\n return (\n <div\n onClick={onClick}\n data-item={item}\n title={title}\n className={`cursor-pointer py-2 hover:bg-(--accent) ${pickedRow(picked)}`}\n >\n {children}\n </div>\n );\n}\n\n/** The dossier line's title cell: its title, tracker fields, note and other repositories, the title keeping its room. */\nexport function DossierTitleCell({ children }: { children: ReactNode }) {\n return (\n <span className=\"flex min-w-0 items-center gap-1.5\" data-line=\"1\" data-title-cell>\n {children}\n </span>\n );\n}\n\n/** The dossier's title as the button that opens its item; `name` gives it whole. */\nexport function DossierTitle({ name, onOpen, children }: { name: string; onOpen: () => void; children: ReactNode }) {\n return (\n <button\n type=\"button\"\n onClick={(event) => {\n stop(event);\n onOpen();\n }}\n title={name}\n data-title\n className={`min-w-0 truncate rounded text-left text-sm leading-7 font-medium text-(--foreground) hover:underline ${ROW_OPENS}`}\n >\n {children}\n </button>\n );\n}\n\n/** After the title: the tracker's fields, which give up their room before the title does, ending in an ellipsis. Below\n * `lg` they may shrink to nothing, so a narrow line's title keeps its room. */\nexport function DossierFields({ children }: { children: ReactNode }) {\n return <span className=\"min-w-0 shrink-[1000] truncate empty:hidden lg:min-w-10\">{children}</span>;\n}\n\n/** After the fields: a note, such as where its planning is saved; its clicks stay there. */\nexport function DossierNote({ children }: { children: ReactNode }) {\n return (\n <span onClick={stop} className=\"flex shrink-0 items-center pl-1 empty:hidden\">\n {children}\n </span>\n );\n}\n\n/** The repositories its parts work in beyond its own. */\nexport function DossierRepos({ children }: { children: string }) {\n return (\n <span\n data-col=\"repos\"\n className=\"min-w-16 shrink-[100] truncate text-(--muted-foreground) empty:hidden\"\n title={children || undefined}\n >\n {children}\n </span>\n );\n}\n\n/** A dossier chip's tone. */\nexport type DossierChipTone = 'warning' | 'danger' | 'neutral' | 'accent' | 'success';\n\n/** The dossier's first chip whole, at its full width, and how many `more` its line's tooltip names. Its clicks stay\n * there. */\nexport function DossierChips({\n first,\n more,\n}: {\n first: { words: string; tone: DossierChipTone; icon?: ReactNode; refined?: boolean | undefined };\n /** The other chips' words. */\n more: string[];\n}) {\n return (\n <span onClick={stop} className=\"flex shrink-0 items-center gap-1\" data-chips>\n <Badge\n tone={first.tone}\n className=\"whitespace-nowrap tabular-nums\"\n data-chip\n data-refined={first.refined || undefined}\n >\n {first.icon}\n {first.words}\n </Badge>\n {more.length > 0 && (\n <span className=\"text-(--muted-foreground) tabular-nums\" data-chips-more>\n <span aria-hidden=\"true\">+{more.length}</span>\n <span className=\"sr-only\">{more.join(', ')}</span>\n </span>\n )}\n </span>\n );\n}\n\n/** An expanded dossier's view controls, in its action slot. */\nexport function DossierTools({ children }: { children: ReactNode }) {\n return (\n <span className=\"flex shrink-0 items-center\" data-dossier-tools>\n {children}\n </span>\n );\n}\n\n/** What's next, as a sentence in the second line's text slot: a `word` naming it, in the warning tone when it waits on\n * you, screen-reader text alone when `unseen`, then the `text` that names it. */\nexport function DossierNext({\n word,\n yours = false,\n unseen = false,\n text,\n}: {\n word?: string | undefined;\n yours?: boolean;\n unseen?: boolean;\n text: string;\n}) {\n return (\n <span className=\"min-w-0\" data-next>\n <span className=\"flex min-w-0 items-center gap-2\">\n {word && (\n <span\n className={`shrink-0 font-medium ${yours ? 'text-(--warning-foreground)' : 'text-(--muted-foreground)'} ${unseen ? 'sr-only' : ''}`}\n >\n {word}\n </span>\n )}\n <span className=\"min-w-0 truncate\" title={text}>\n {text}\n </span>\n </span>\n </span>\n );\n}\n\n/** One part in PartsBar: its name and state, its colour, and whether it pulses while at work. */\nexport interface PartSegment {\n key: string;\n title: string;\n color: string;\n pulse?: boolean;\n}\n\n/** Every part as a segment in its colour, so the bar fills left to right, then a dashed one per part the board\n * doesn't read. */\nexport function PartsBar({ title, parts, unread }: { title: string; parts: PartSegment[]; unread: number }) {\n return (\n <ol className=\"m-0 flex min-w-0 list-none gap-[2px] overflow-hidden p-0\" title={title} data-part-bar>\n {parts.map((p) => (\n <li\n key={p.key}\n ref={p.pulse ? ambientMotion : undefined}\n title={p.title}\n className={`h-1.5 min-w-[3px] flex-1 rounded-full ${p.pulse ? 'status-pulse' : ''}`}\n style={{ background: p.color }}\n />\n ))}\n {Array.from({ length: Math.max(0, unread) }, (_, n) => (\n <li\n key={`u${n}`}\n className=\"h-1.5 min-w-[3px] flex-1 rounded-full border border-dashed border-(--input)\"\n />\n ))}\n </ol>\n );\n}\n\n/** What an expanded dossier holds, under its line. */\nexport function DossierBody({ children }: { children: ReactNode }) {\n return (\n <div className=\"grid gap-3 border-t border-(--border) p-3\" data-dossier-body>\n {children}\n </div>\n );\n}\n\n/** Where a dossier's planning is saved, as a quiet label; hovering or focusing it reads the whole `note`. */\nexport function PlanningNote({ note, role, children }: { note: string; role: 'status' | 'note'; children: ReactNode }) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n tabIndex={0}\n role={role}\n aria-label={note}\n data-structure-sync\n className=\"rounded whitespace-nowrap text-(--muted-foreground) focus-visible:outline-2 focus-visible:outline-(--primary)\"\n >\n {children}\n </span>\n </TooltipTrigger>\n <TooltipPopup side=\"bottom\">{note}</TooltipPopup>\n </Tooltip>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { ReactNode } from "react";
2
+ /** The List's filters: menus of checklists, then the active choices as chips that remove themselves, then Clear. */
3
+ export declare const FilterBar: import("react").ForwardRefExoticComponent<{
4
+ children: ReactNode;
5
+ } & import("react").RefAttributes<HTMLDivElement>>;
6
+ interface FilterMenuProps {
7
+ /** What the menu filters, as `data-filter`. */
8
+ which: string;
9
+ name: string;
10
+ /** How many of its choices are on, after its name. */
11
+ picked: number;
12
+ children: ReactNode;
13
+ }
14
+ /** A filter's button, its name and how many choices are on, opening its checklist. */
15
+ export declare function FilterMenu({ which, name, picked, children }: FilterMenuProps): import("react").JSX.Element;
16
+ /** A filter menu's checklist. */
17
+ export declare function FilterChoices({ children }: {
18
+ children: ReactNode;
19
+ }): import("react").JSX.Element;
20
+ /** One choice in a filter's checklist: its checkbox, then what it is, such as a badge. */
21
+ export declare function FilterChoice({ checked, onToggle, children }: {
22
+ checked: boolean;
23
+ onToggle: () => void;
24
+ children: ReactNode;
25
+ }): import("react").JSX.Element;
26
+ /** An active choice as a chip, such as a badge ending in ×, which removes the choice. */
27
+ export declare function FilterChip({ removeLabel, onRemove, children }: {
28
+ removeLabel: string;
29
+ onRemove: () => void;
30
+ children: ReactNode;
31
+ }): import("react").JSX.Element;
32
+ export {};
33
+ //# sourceMappingURL=Filters.d.ts.map