@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
package/dist/index.js CHANGED
@@ -1,3 +1,5 @@
1
+ import { ambientMotion } from "./foundations/AmbientMotion.js";
2
+ import { Loading } from "./feedback/Loading.js";
1
3
  import { tabbable } from "./foundations/KeyboardFocus.js";
2
4
  import { Button } from "./actions/Button.js";
3
5
  import { StatusIndicator } from "./feedback/StatusIndicator.js";
@@ -5,10 +7,66 @@ import { IconButton } from "./actions/IconButton.js";
5
7
  import { ButtonLink } from "./actions/ButtonLink.js";
6
8
  import { DesignSystemProvider, defaultDesignSystemLabels, useDesignSystemLabels } from "./foundations/DesignSystemProvider.js";
7
9
  import { ThemeSwitch } from "./actions/ThemeSwitch.js";
10
+ import { Alert } from "./feedback/Alert.js";
11
+ import { FormResult } from "./feedback/FormResult.js";
12
+ import { Badge } from "./display/Badge.js";
13
+ import { Grid, Inline, Stack } from "./layout/Flow.js";
14
+ import { InsetPanel } from "./display/InsetPanel.js";
8
15
  import { SkeletonLoader } from "./feedback/SkeletonLoader.js";
16
+ import { Popover } from "./overlays/Popover.js";
17
+ import { HelpTip } from "./overlays/HelpTip.js";
9
18
  import { Heading, Text } from "./typography/Typography.js";
19
+ import { Field } from "./forms/Field.js";
20
+ import { Disclosure, FormAction, FormContent, FormField, FormFieldset, FormRow, FormSection, FormStack, FormUnit } from "./forms/FormSection.js";
21
+ import { Input } from "./forms/Input.js";
22
+ import { buttonKind } from "./board/ButtonKinds.js";
23
+ import { AttachmentLink, ChangeFailed, CheckRun, ChipGroup, DetailFact, DetailsHeading, DetailsSection, DetailsText, EditActions, EditorSlot, FactList, FocusPanel, HeaderStatus, InlineList, KindQuestion, LabelEditorPanel, MainColumnSlot, MainSection, MetaArea, OutgoingTicket, SectionHeader, SpecSync, SprintCount, TextSection, TicketLink, TicketLinkList, WaitsOnList } from "./board/ItemDetails.js";
24
+ import { AddItemButton, CreateIssueChoice, DraftFields, DraftTicketPart, PanelField, TicketSearch, TicketSearchPane } from "./board/AddItem.js";
25
+ import { ActionStack, SettingConfirm, SettingLastRun } from "./board/Archive.js";
26
+ import { BoardContent, BoardShell, ReadingLine } from "./board/BoardShell.js";
27
+ import { BrandLink, BrandMark } from "./display/BrandMark.js";
28
+ import { TitleBar, TitleBarTrail } from "./layout/TitleBar.js";
29
+ import { Tooltip, TooltipPopup, TooltipProvider, TooltipTrigger } from "./overlays/Tooltip.js";
30
+ import { BoardBrand, BoardTitleBar, RefreshIndicator, TitleBarDivider } from "./board/BoardTitleBar.js";
31
+ import { BoardCounter, BoardCounters, CounterAge, CounterDash, CounterDivider, CounterEmpty, CounterFigure, CounterGroup, CounterGroups, CounterItem, CounterList, CounterOfLimit, CounterPartial, LimitBars } from "./board/Counters.js";
32
+ import { DeskCard, DeskHint, DeskMergeState, DeskSection } from "./board/Desk.js";
33
+ import { Checkbox } from "./forms/Checkbox.js";
34
+ import { FilterBar, FilterChip, FilterChoice, FilterChoices, FilterMenu } from "./board/Filters.js";
35
+ import { SidebarNavigationItem } from "./layout/sidebar/SidebarNavigationItem.js";
36
+ import { ListButton, ListGroupItem, ListHeader, ListItemRow, ListNote } from "./board/List.js";
37
+ import { LoadingScreen } from "./board/LoadingScreen.js";
38
+ import { ReleaseNotes, UpdateDownloading, UpdatePill, UpdateStatusIcon } from "./board/UpdatePill.js";
39
+ import { DismissButton } from "./feedback/DismissButton.js";
40
+ import { BoardWarning, BoardWarnings, ToolMissing } from "./board/Warnings.js";
41
+ import { ActivityLine, AgentAge, AgentList, AgentRow, WorkingAgents } from "./board/ActivityLine.js";
42
+ import { ActivityLabel, ActivityTrack } from "./board/ActivityTrack.js";
43
+ import { AttentionEntry, AttentionList, AttentionMark, AttentionNone, EntryButton, PartLink, PartName, RefButton } from "./board/Attention.js";
44
+ import { LossList } from "./board/Cleanup.js";
45
+ import { DependencyItem, DependencyList } from "./board/Dependencies.js";
46
+ import { DossierBody, DossierChips, DossierFields, DossierLine, DossierList, DossierNext, DossierNote, DossierRepos, DossierRow, DossierTitle, DossierTitleCell, DossierToggle, DossierTools, PartsBar, PlanningNote } from "./board/Dossier.js";
47
+ import { ItemFields, ItemTitle, KindMarker, RepoIdentity, RepoTag, TitleLink } from "./board/ItemParts.js";
48
+ import { NeedsYouNotice, NeedsYouResult } from "./board/NeedsYou.js";
49
+ import { PartKindLabel, PartRow, PartTrack, PartWaits, PartsList, ShowDoneToggle, ThreadLine } from "./board/PartsList.js";
50
+ import { ChecksState, PullRequestList, PullRequestReadiness, PullRequestRef, PullRequestRow, ReadinessDetails } from "./board/PullRequests.js";
51
+ import { SliceBar, SliceList, SliceMark, SliceRow } from "./board/Slices.js";
52
+ import { SourceIcon } from "./board/SourceIcon.js";
53
+ import { BuildLimit, HeaderSwitch, StageList, StagePane, StagePaneEmpty, StageSections } from "./board/StagePane.js";
54
+ import { OnYourDesk, QueueAge, QueuePlace, RowBlocked, RowCells, RowCount, RowFirst, RowFoot, RowGlyph, RowIdentity, RowKindCell, RowOpen, RowPartOf, RowSecondLine, RowSide, RowSliceNote, RowSliceToggle, RowSlices, RowState, RowStateCell, RowTitle, RowTitleCell, StageRowItem, UsageFigures } from "./board/StageRow.js";
55
+ import { StageTrack } from "./board/StageTrack.js";
56
+ import { ActionError, StartGroup, StartLine, StartNote, StartTag } from "./board/StartControls.js";
57
+ import { statusColor } from "./board/StatusColors.js";
58
+ import { StatusGlyph } from "./board/StatusGlyph.js";
59
+ import { EarlierThread, EarlierThreadList } from "./board/Threads.js";
60
+ import { HistoryRow, MapBand, MapCanvas, MapCheckNode, MapEdgeLabel, MapEdges, MapHistoryGroup, MapHistoryList, MapLaneName, MapNode, MapPartNode, WorkMapFrame } from "./board/WorkMap.js";
61
+ import { AccessNotice, DialogActions, ItemDialogAside, ItemDialogBody, ItemDialogColumns, ItemSummary, SummaryAge, SummaryBlocked, SummaryPanel, SummaryParent, SummaryStatus, WarningNote } from "./board/ItemDialog.js";
62
+ import { ItemProgressPanel, PartsProgress, ProgressActivity, ProgressCount, SliceChip, SliceChips, WorkflowSteps } from "./board/ItemProgress.js";
63
+ import { ProjectIcon } from "./board/ProjectIcon.js";
64
+ import { SidebarNavigationGroup, SidebarPane } from "./layout/sidebar/SidebarPane.js";
65
+ import { OpenSettingsButton, ProjectValueList, ReasonNote, SettingControl, SettingDetails, SettingsNav, SettingsNote } from "./board/Settings.js";
66
+ import { CreateLabelForm, TrackerLabelEditor, TrackerLabelList, TrackerLabelRow } from "./board/TrackerLabels.js";
67
+ import { LabelChooser, LabelChooserEmpty, LabelChooserFooter, LabelChooserList, LabelChooserOption, VocabularyMore, VocabularyRow, VocabularySuggestion } from "./board/Vocabulary.js";
68
+ import { AddFolderLine, ChoiceDetails, EmptyBoard, ProjectLine, ProjectList, ProjectListItem, SetupCardList, SetupHeader, SetupStep } from "./board/Onboarding.js";
10
69
  import { CollectionSectionHeader } from "./collections/CollectionSectionHeader.js";
11
- import { Grid, Inline, Stack } from "./layout/Flow.js";
12
70
  import { CollectionState } from "./collections/CollectionState.js";
13
71
  import { InlineLink, Link, LinkBox, LinkOverlay } from "./typography/Link.js";
14
72
  import { DataRow } from "./collections/DataRow.js";
@@ -22,61 +80,62 @@ import { ActivityCard, ActivityCardSkeleton } from "./display/ActivityCard.js";
22
80
  import { ItemAction } from "./display/ItemAction.js";
23
81
  import { Artwork } from "./display/Artwork.js";
24
82
  import { Avatar } from "./display/Avatar.js";
25
- import { Badge } from "./display/Badge.js";
26
83
  import { BadgeList } from "./display/BadgeList.js";
27
- import { BrandLink, BrandMark } from "./display/BrandMark.js";
28
84
  import { ChangeList } from "./display/ChangeList.js";
29
85
  import { CheckList } from "./display/CheckList.js";
30
86
  import { CodeBlock } from "./display/CodeBlock.js";
87
+ import { Comment, CommentList } from "./display/Comment.js";
31
88
  import { CopyButton } from "./display/CopyButton.js";
32
89
  import { DataTable } from "./display/DataTable.js";
33
- import { Popover } from "./overlays/Popover.js";
34
90
  import { Modal } from "./overlays/Modal.js";
35
91
  import { TextPreview } from "./display/TextPreview.js";
36
92
  import { DetailHero, DetailHeroDetail, DetailHeroDetails, DetailHeroTags } from "./display/DetailHero.js";
37
93
  import { DetailList } from "./display/DetailList.js";
38
94
  import { DeviceCard } from "./display/DeviceCard.js";
95
+ import { Diagram } from "./display/Diagram.js";
39
96
  import { Identity } from "./display/Identity.js";
40
97
  import { ImageCard } from "./display/ImageCard.js";
41
98
  import { ImagePicker, ImagePickerGrid, ImagePickerOption, ImageUpload } from "./display/ImagePicker.js";
42
99
  import { InfoBox } from "./display/InfoBox.js";
43
- import { InsetPanel } from "./display/InsetPanel.js";
44
100
  import { Kbd } from "./display/Kbd.js";
45
101
  import { KindIcon } from "./display/KindIcon.js";
102
+ import { LabelChip } from "./display/LabelChip.js";
46
103
  import { NoticeCard } from "./display/NoticeCard.js";
47
104
  import { PairingList } from "./display/PairingList.js";
48
105
  import { PathList } from "./display/PathList.js";
49
106
  import { PeoplePreview } from "./display/PeoplePreview.js";
107
+ import { Person } from "./display/Person.js";
50
108
  import { PropertySheet } from "./display/PropertySheet.js";
51
109
  import { QrCode } from "./display/QrCode.js";
52
110
  import { RadioChoice } from "./display/RadioChoice.js";
53
111
  import { RatingLink } from "./display/RatingLink.js";
54
112
  import { ResourceCard, ResourceCardSkeleton } from "./display/ResourceCard.js";
113
+ import { RichText } from "./display/RichText.js";
55
114
  import { RowList, RowListItem } from "./display/RowList.js";
56
115
  import { MeterLegend, StackedMeter } from "./display/StackedMeter.js";
57
116
  import { StatTile } from "./display/StatTile.js";
58
117
  import { StepList } from "./display/StepList.js";
59
118
  import { TimeSeriesChart, TimeSeriesChartSkeleton } from "./display/TimeSeriesChart.js";
60
- import { Alert } from "./feedback/Alert.js";
61
119
  import { AsyncState } from "./feedback/AsyncState.js";
120
+ import { Notifications, clearNotification, showNotification, useNotificationControls } from "./feedback/Notifications.js";
62
121
  import { dismissAllNotifications, showErrorNotification, showSuccessNotification } from "./feedback/ErrorNotification.js";
63
- import { Notifications } from "./feedback/Notifications.js";
122
+ import { LiveRegion } from "./feedback/LiveRegion.js";
123
+ import { Progress } from "./feedback/Progress.js";
64
124
  import { ProgressStatusRow } from "./feedback/ProgressStatusRow.js";
65
125
  import { StatusPopoverContent } from "./feedback/StatusPopoverContent.js";
66
126
  import { StatusRow } from "./feedback/StatusRow.js";
67
- import { Loading } from "./feedback/index.js";
68
- import { Checkbox } from "./forms/Checkbox.js";
69
- import { Field } from "./forms/Field.js";
70
- import { Disclosure, FormAction, FormContent, FormField, FormRow, FormSection, FormStack } from "./forms/FormSection.js";
127
+ import { ColorSwatches } from "./forms/ColorSwatches.js";
128
+ import { HiddenField } from "./forms/HiddenField.js";
71
129
  import { InlineFields } from "./forms/InlineFields.js";
72
- import { Input } from "./forms/Input.js";
130
+ import { LabelPicker } from "./forms/LabelPicker.js";
131
+ import { applePlatform, isShortcut } from "./foundations/KeyboardShortcut.js";
132
+ import { MarkdownEditor } from "./forms/MarkdownEditor.js";
73
133
  import { Select, SelectItem } from "./forms/Select.js";
74
134
  import { OptionSelect } from "./forms/OptionSelect.js";
75
135
  import { RadioGroup, RadioGroupItem } from "./forms/RadioGroup.js";
76
136
  import { Switch } from "./forms/Switch.js";
77
137
  import { TagInput } from "./forms/TagInput.js";
78
138
  import { Textarea } from "./forms/Textarea.js";
79
- import { applePlatform, isShortcut } from "./foundations/KeyboardShortcut.js";
80
139
  import { createThemeController, isThemePreference } from "./foundations/Theme.js";
81
140
  import { AppShell } from "./layout/AppShell.js";
82
141
  import { AuthLayout } from "./layout/AuthLayout.js";
@@ -84,9 +143,6 @@ import { ContentContainer } from "./layout/ContentContainer.js";
84
143
  import { PageLayout } from "./layout/PageLayout.js";
85
144
  import { ScrollArea } from "./layout/ScrollArea.js";
86
145
  import { Section } from "./layout/Section.js";
87
- import { SidebarNavigationItem } from "./layout/sidebar/SidebarNavigationItem.js";
88
- import { SidebarNavigationGroup, SidebarPane } from "./layout/sidebar/SidebarPane.js";
89
- import { TitleBar, TitleBarTrail } from "./layout/TitleBar.js";
90
146
  import { CommandPaletteTrigger } from "./layout/toolbar/CommandPaletteTrigger.js";
91
147
  import { ToolbarStatusGroup } from "./layout/toolbar/ToolbarStatusGroup.js";
92
148
  import { ToolbarStatusItem } from "./layout/toolbar/ToolbarStatusItem.js";
@@ -98,15 +154,16 @@ import { ArtworkTabs } from "./navigation/ArtworkTabs.js";
98
154
  import { Breadcrumbs } from "./navigation/Breadcrumbs.js";
99
155
  import { DropdownMenu } from "./overlays/DropdownMenu.js";
100
156
  import { CollectionBrowseControls, CollectionBrowseSelector, CollectionBrowseTrigger } from "./navigation/CollectionBrowseSelector.js";
101
- import { CollectionViewToggle } from "./navigation/CollectionViewToggle.js";
157
+ import { CollectionViewToggle, ViewToggle } from "./navigation/CollectionViewToggle.js";
102
158
  import { DrilldownBrowseSelector } from "./navigation/DrilldownBrowseSelector.js";
103
159
  import { FolderSelector } from "./navigation/FolderSelector.js";
160
+ import { SortMenu } from "./navigation/SortMenu.js";
104
161
  import { ViewTabs } from "./navigation/ViewTabs.js";
105
162
  import { ActionModal } from "./overlays/ActionModal.js";
106
- import { CommandPalette, CommandPaletteGroup, useCommandPaletteOption } from "./overlays/CommandPalette.js";
163
+ import { CommandPalette, CommandPaletteGroup, CommandPaletteOption, useCommandPaletteOption } from "./overlays/CommandPalette.js";
107
164
  import { Drawer } from "./overlays/Drawer.js";
108
165
  import { ImageViewer } from "./overlays/ImageViewer.js";
109
- import { Tooltip, TooltipPopup, TooltipProvider, TooltipTrigger } from "./overlays/Tooltip.js";
166
+ import { ModalExpandButton } from "./overlays/ModalExpandButton.js";
110
167
  import { CallToAction } from "./showcase/CallToAction.js";
111
168
  import { FeatureGrid, FeatureTile, ProductCard, ProductGrid } from "./showcase/Cards.js";
112
169
  import { AppWindow, BrowserFrame, Callout, CalloutPair, CalloutStack, GuidedMedia, LaptopFrame, PhoneFrame, Screenshot, TabletFrame, TvFrame } from "./showcase/Devices.js";
@@ -121,5 +178,5 @@ import { Roadmap } from "./showcase/Roadmap.js";
121
178
  import { RouteDiagram } from "./showcase/RouteDiagram.js";
122
179
  import { ReadinessLegend, ReadinessPanel, ServerUnit } from "./showcase/ServerUnit.js";
123
180
  import { StepFlow } from "./showcase/StepFlow.js";
124
- import { Code } from "./typography/index.js";
125
- export { ActionModal, ActivityCard, ActivityCardSkeleton, Alert, AngledDevice, Announcement, AppIcon, AppShell, AppWindow, Artwork, ArtworkTabs, AsyncState, AuthLayout, Avatar, Backdrop, Badge, BadgeList, Box, BrandLink, BrandMark, Breadcrumbs, BrowserFrame, Button, ButtonLink, CallToAction, Callout, CalloutPair, CalloutStack, ChangeList, CheckList, Checkbox, Code, CodeBlock, CollectionBrowseControls, CollectionBrowseSelector, CollectionBrowseTrigger, CollectionSectionHeader, CollectionState, CollectionViewToggle, CommandPalette, CommandPaletteGroup, CommandPaletteTrigger, ContentContainer, CopyButton, DataRow, DataTable, DesignSystemProvider, DetailHero, DetailHeroDetail, DetailHeroDetails, DetailHeroTags, DetailList, DeviceCard, DeviceStage, Disclosure, Divider, Drawer, DrilldownBrowseSelector, DropdownMenu, Eyebrow, FeatureGrid, FeatureRow, FeatureRows, FeatureTile, Field, FolderSelector, FormAction, FormContent, FormField, FormRow, FormSection, FormStack, Grid, GuidedMedia, Heading, Hero, IconButton, Identity, ImageCard, ImagePicker, ImagePickerGrid, ImagePickerOption, ImageUpload, ImageViewer, InfoBox, Inline, InlineFields, InlineLink, Input, InsetPanel, ItemAction, Kbd, KindIcon, LaptopFrame, Link, LinkBox, LinkOverlay, Loading, MeterLegend, Modal, NoticeCard, Notifications, OptionSelect, PageLayout, PageSection, PairingList, PathList, PeoplePreview, PhoneFrame, PhotoSearchConcept, PlatformGrid, PointList, Popover, ProductBand, ProductBands, ProductCard, ProductGrid, ProductIndex, ProgressStatusRow, PropertySheet, QrCode, RadioChoice, RadioGroup, RadioGroupItem, RatingLink, ReadinessLegend, ReadinessPanel, ResourceCard, ResourceCardSkeleton, ResponsiveMedia, ResultEmpty, ResultList, ResultRow, Reveal, Roadmap, RouteDiagram, RowList, RowListItem, Screenshot, ScrollArea, ScrollRow, ScrollRowArrows, ScrollRowItem, Section, SectionHeading, Select, SelectItem, ServerUnit, SidebarNavigationGroup, SidebarNavigationItem, SidebarPane, SiteFooter, SiteHeader, SiteShell, SkeletonLoader, Stack, StackedMeter, StatTile, StatusIndicator, StatusLight, StatusPill, StatusPopoverContent, StatusRow, StepFlow, StepList, Switch, TabletFrame, TagInput, Text, TextPreview, Textarea, ThemeSwitch, TimeSeriesChart, TimeSeriesChartSkeleton, TitleBar, TitleBarTrail, ToolbarStatusGroup, ToolbarStatusItem, Tooltip, TooltipPopup, TooltipProvider, TooltipTrigger, TvFrame, ViewTabs, VirtualGrid, VirtualList, WorkspaceActionsHeader, applePlatform, createThemeController, defaultDesignSystemLabels, dismissAllNotifications, isShortcut, isThemePreference, revealInRow, showErrorNotification, showSuccessNotification, tabbable, useCollectionMotion, useCommandPaletteOption, useDesignSystemLabels, useScrollRow };
181
+ import { Code } from "./typography/Code.js";
182
+ export { AccessNotice, ActionError, ActionModal, ActionStack, ActivityCard, ActivityCardSkeleton, ActivityLabel, ActivityLine, ActivityTrack, AddFolderLine, AddItemButton, AgentAge, AgentList, AgentRow, Alert, AngledDevice, Announcement, AppIcon, AppShell, AppWindow, Artwork, ArtworkTabs, AsyncState, AttachmentLink, AttentionEntry, AttentionList, AttentionMark, AttentionNone, AuthLayout, Avatar, Backdrop, Badge, BadgeList, BoardBrand, BoardContent, BoardCounter, BoardCounters, BoardShell, BoardTitleBar, BoardWarning, BoardWarnings, Box, BrandLink, BrandMark, Breadcrumbs, BrowserFrame, BuildLimit, Button, ButtonLink, CallToAction, Callout, CalloutPair, CalloutStack, ChangeFailed, ChangeList, CheckList, CheckRun, Checkbox, ChecksState, ChipGroup, ChoiceDetails, Code, CodeBlock, CollectionBrowseControls, CollectionBrowseSelector, CollectionBrowseTrigger, CollectionSectionHeader, CollectionState, CollectionViewToggle, ColorSwatches, CommandPalette, CommandPaletteGroup, CommandPaletteOption, CommandPaletteTrigger, Comment, CommentList, ContentContainer, CopyButton, CounterAge, CounterDash, CounterDivider, CounterEmpty, CounterFigure, CounterGroup, CounterGroups, CounterItem, CounterList, CounterOfLimit, CounterPartial, CreateIssueChoice, CreateLabelForm, DataRow, DataTable, DependencyItem, DependencyList, DesignSystemProvider, DeskCard, DeskHint, DeskMergeState, DeskSection, DetailFact, DetailHero, DetailHeroDetail, DetailHeroDetails, DetailHeroTags, DetailList, DetailsHeading, DetailsSection, DetailsText, DeviceCard, DeviceStage, Diagram, DialogActions, Disclosure, DismissButton, Divider, DossierBody, DossierChips, DossierFields, DossierLine, DossierList, DossierNext, DossierNote, DossierRepos, DossierRow, DossierTitle, DossierTitleCell, DossierToggle, DossierTools, DraftFields, DraftTicketPart, Drawer, DrilldownBrowseSelector, DropdownMenu, EarlierThread, EarlierThreadList, EditActions, EditorSlot, EmptyBoard, EntryButton, Eyebrow, FactList, FeatureGrid, FeatureRow, FeatureRows, FeatureTile, Field, FilterBar, FilterChip, FilterChoice, FilterChoices, FilterMenu, FocusPanel, FolderSelector, FormAction, FormContent, FormField, FormFieldset, FormResult, FormRow, FormSection, FormStack, FormUnit, Grid, GuidedMedia, HeaderStatus, HeaderSwitch, Heading, HelpTip, Hero, HiddenField, HistoryRow, IconButton, Identity, ImageCard, ImagePicker, ImagePickerGrid, ImagePickerOption, ImageUpload, ImageViewer, InfoBox, Inline, InlineFields, InlineLink, InlineList, Input, InsetPanel, ItemAction, ItemDialogAside, ItemDialogBody, ItemDialogColumns, ItemFields, ItemProgressPanel, ItemSummary, ItemTitle, Kbd, KindIcon, KindMarker, KindQuestion, LabelChip, LabelChooser, LabelChooserEmpty, LabelChooserFooter, LabelChooserList, LabelChooserOption, LabelEditorPanel, LabelPicker, LaptopFrame, LimitBars, Link, LinkBox, LinkOverlay, ListButton, ListGroupItem, ListHeader, ListItemRow, ListNote, LiveRegion, Loading, LoadingScreen, LossList, MainColumnSlot, MainSection, MapBand, MapCanvas, MapCheckNode, MapEdgeLabel, MapEdges, MapHistoryGroup, MapHistoryList, MapLaneName, MapNode, MapPartNode, MarkdownEditor, MetaArea, MeterLegend, Modal, ModalExpandButton, NeedsYouNotice, NeedsYouResult, NoticeCard, Notifications, OnYourDesk, OpenSettingsButton, OptionSelect, OutgoingTicket, PageLayout, PageSection, PairingList, PanelField, PartKindLabel, PartLink, PartName, PartRow, PartTrack, PartWaits, PartsBar, PartsList, PartsProgress, PathList, PeoplePreview, Person, PhoneFrame, PhotoSearchConcept, PlanningNote, PlatformGrid, PointList, Popover, ProductBand, ProductBands, ProductCard, ProductGrid, ProductIndex, Progress, ProgressActivity, ProgressCount, ProgressStatusRow, ProjectIcon, ProjectLine, ProjectList, ProjectListItem, ProjectValueList, PropertySheet, PullRequestList, PullRequestReadiness, PullRequestRef, PullRequestRow, QrCode, QueueAge, QueuePlace, RadioChoice, RadioGroup, RadioGroupItem, RatingLink, ReadinessDetails, ReadinessLegend, ReadinessPanel, ReadingLine, ReasonNote, RefButton, RefreshIndicator, ReleaseNotes, RepoIdentity, RepoTag, ResourceCard, ResourceCardSkeleton, ResponsiveMedia, ResultEmpty, ResultList, ResultRow, Reveal, RichText, Roadmap, RouteDiagram, RowBlocked, RowCells, RowCount, RowFirst, RowFoot, RowGlyph, RowIdentity, RowKindCell, RowList, RowListItem, RowOpen, RowPartOf, RowSecondLine, RowSide, RowSliceNote, RowSliceToggle, RowSlices, RowState, RowStateCell, RowTitle, RowTitleCell, Screenshot, ScrollArea, ScrollRow, ScrollRowArrows, ScrollRowItem, Section, SectionHeader, SectionHeading, Select, SelectItem, ServerUnit, SettingConfirm, SettingControl, SettingDetails, SettingLastRun, SettingsNav, SettingsNote, SetupCardList, SetupHeader, SetupStep, ShowDoneToggle, SidebarNavigationGroup, SidebarNavigationItem, SidebarPane, SiteFooter, SiteHeader, SiteShell, SkeletonLoader, SliceBar, SliceChip, SliceChips, SliceList, SliceMark, SliceRow, SortMenu, SourceIcon, SpecSync, SprintCount, Stack, StackedMeter, StageList, StagePane, StagePaneEmpty, StageRowItem, StageSections, StageTrack, StartGroup, StartLine, StartNote, StartTag, StatTile, StatusGlyph, StatusIndicator, StatusLight, StatusPill, StatusPopoverContent, StatusRow, StepFlow, StepList, SummaryAge, SummaryBlocked, SummaryPanel, SummaryParent, SummaryStatus, Switch, TabletFrame, TagInput, Text, TextPreview, TextSection, Textarea, ThemeSwitch, ThreadLine, TicketLink, TicketLinkList, TicketSearch, TicketSearchPane, TimeSeriesChart, TimeSeriesChartSkeleton, TitleBar, TitleBarDivider, TitleBarTrail, TitleLink, ToolMissing, ToolbarStatusGroup, ToolbarStatusItem, Tooltip, TooltipPopup, TooltipProvider, TooltipTrigger, TrackerLabelEditor, TrackerLabelList, TrackerLabelRow, TvFrame, UpdateDownloading, UpdatePill, UpdateStatusIcon, UsageFigures, ViewTabs, ViewToggle, VirtualGrid, VirtualList, VocabularyMore, VocabularyRow, VocabularySuggestion, WaitsOnList, WarningNote, WorkMapFrame, WorkflowSteps, WorkingAgents, WorkspaceActionsHeader, ambientMotion, applePlatform, buttonKind, clearNotification, createThemeController, defaultDesignSystemLabels, dismissAllNotifications, isShortcut, isThemePreference, revealInRow, showErrorNotification, showNotification, showSuccessNotification, statusColor, tabbable, useCollectionMotion, useCommandPaletteOption, useDesignSystemLabels, useNotificationControls, useScrollRow };
@@ -1,7 +1,7 @@
1
1
  import { tabbable } from "../foundations/KeyboardFocus.js";
2
2
  import { useEffect, useId, useState } from "react";
3
- import { jsx, jsxs } from "react/jsx-runtime";
4
3
  import { MenuIcon, XIcon } from "lucide-react";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
5
  // src/layout/Site.tsx
6
6
  /** The website frame: a glass header that stays on top while the document scrolls under it, then the footer. */
7
7
  function SiteShell({ skipLabel, header, footer, children }) {
@@ -1,7 +1,7 @@
1
1
  import { useDesignSystemLabels } from "../foundations/DesignSystemProvider.js";
2
2
  import { tabbable } from "../foundations/KeyboardFocus.js";
3
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
4
3
  import { ChevronDownIcon, ChevronRightIcon } from "lucide-react";
4
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
5
5
  // src/layout/TitleBar.tsx
6
6
  /** T3 Code's 52px title bar: the brand and where you are on the left, tools on the right. Its own width,
7
7
  * not the window's, decides when search folds to an icon; narrow screens close the gaps so the title keeps
@@ -7,7 +7,7 @@ import { Section } from "./Section.js";
7
7
  import { SidebarNavigationItem } from "./sidebar/SidebarNavigationItem.js";
8
8
  import { SidebarNavigationGroup, SidebarPane } from "./sidebar/SidebarPane.js";
9
9
  import { TitleBar, TitleBarTrail, TitleBarTrailItem } from "./TitleBar.js";
10
- import { CommandPaletteTrigger } from "./toolbar/CommandPaletteTrigger.js";
10
+ import { CommandPaletteTrigger, CommandPaletteTriggerToken } from "./toolbar/CommandPaletteTrigger.js";
11
11
  import { ToolbarStatusGroup } from "./toolbar/ToolbarStatusGroup.js";
12
12
  import { ToolbarStatusItem } from "./toolbar/ToolbarStatusItem.js";
13
13
  import { WorkspaceActionsHeader } from "./WorkspaceActionsHeader.js";
@@ -16,4 +16,4 @@ import { Eyebrow, PageSection, SectionHeading } from "./PageSection.js";
16
16
  import { SiteFooter, SiteHeader, SiteLink, SiteShell } from "./Site.js";
17
17
  import { Divider } from "@ninna-ui/primitives";
18
18
  import { Box as Box$1 } from "@ninna-ui/layout";
19
- export { AppShell, AuthLayout, Box$1 as Box, CommandPaletteTrigger, ContentContainer, Divider, Eyebrow, type FlowSpace, Grid$1 as Grid, Inline, PageLayout, PageSection, ScrollArea, type ScrollAreaProps, Section, SectionHeading, SidebarNavigationGroup, SidebarNavigationItem, SidebarPane, SiteFooter, SiteHeader, type SiteLink, SiteShell, Stack$1 as Stack, type StackProps$1 as StackProps, TitleBar, TitleBarTrail, type TitleBarTrailItem, ToolbarStatusGroup, ToolbarStatusItem, WorkspaceActionsHeader };
19
+ export { AppShell, AuthLayout, Box$1 as Box, CommandPaletteTrigger, type CommandPaletteTriggerToken, ContentContainer, Divider, Eyebrow, type FlowSpace, Grid$1 as Grid, Inline, PageLayout, PageSection, ScrollArea, type ScrollAreaProps, Section, SectionHeading, SidebarNavigationGroup, SidebarNavigationItem, SidebarPane, SiteFooter, SiteHeader, type SiteLink, SiteShell, Stack$1 as Stack, type StackProps$1 as StackProps, TitleBar, TitleBarTrail, type TitleBarTrailItem, ToolbarStatusGroup, ToolbarStatusItem, WorkspaceActionsHeader };
@@ -1,13 +1,13 @@
1
1
  import { Grid as Grid$1, Inline, Stack as Stack$1 } from "./Flow.js";
2
+ import { TitleBar, TitleBarTrail } from "./TitleBar.js";
3
+ import { SidebarNavigationItem } from "./sidebar/SidebarNavigationItem.js";
4
+ import { SidebarNavigationGroup, SidebarPane } from "./sidebar/SidebarPane.js";
2
5
  import { AppShell } from "./AppShell.js";
3
6
  import { AuthLayout } from "./AuthLayout.js";
4
7
  import { ContentContainer } from "./ContentContainer.js";
5
8
  import { PageLayout } from "./PageLayout.js";
6
9
  import { ScrollArea } from "./ScrollArea.js";
7
10
  import { Section } from "./Section.js";
8
- import { SidebarNavigationItem } from "./sidebar/SidebarNavigationItem.js";
9
- import { SidebarNavigationGroup, SidebarPane } from "./sidebar/SidebarPane.js";
10
- import { TitleBar, TitleBarTrail } from "./TitleBar.js";
11
11
  import { CommandPaletteTrigger } from "./toolbar/CommandPaletteTrigger.js";
12
12
  import { ToolbarStatusGroup } from "./toolbar/ToolbarStatusGroup.js";
13
13
  import { ToolbarStatusItem } from "./toolbar/ToolbarStatusItem.js";
@@ -1,11 +1,26 @@
1
+ import { ReactNode } from "react";
2
+ /** What narrows the palette, shown in the trigger as a small chip. */
3
+ export interface CommandPaletteTriggerToken {
4
+ id: string;
5
+ label: string;
6
+ /** An icon or colour mark before the label. */
7
+ leading?: ReactNode;
8
+ /** A lar-brand app hue that colours the chip, as a kind's badge. */
9
+ hue?: number;
10
+ }
1
11
  interface CommandPaletteTriggerProps {
2
12
  label: string;
3
13
  onOpen: () => void;
4
14
  /** Key that opens the palette from anywhere, pressed with ⌘ on Apple devices and Ctrl elsewhere. */
5
15
  shortcut: string;
16
+ /** What narrows the palette now, such as filters. With tokens, the trigger measures its own room: the chips go
17
+ * into a count from the last, then it folds to its icon. */
18
+ tokens?: readonly CommandPaletteTriggerToken[];
19
+ /** The accessible name's addition while tokens show, such as "filtered by bug, docs". */
20
+ filterLabel?: (labels: readonly string[]) => string;
6
21
  }
7
22
  /** The title bar's way into the command palette: a quiet field-like button with its shortcut, folding to its
8
- * icon when the title bar is narrow. */
9
- export declare function CommandPaletteTrigger({ label, onOpen, shortcut }: CommandPaletteTriggerProps): import("react").JSX.Element;
23
+ * icon when the title bar is narrow. With tokens, it also says what narrows the palette. */
24
+ export declare const CommandPaletteTrigger: import("react").ForwardRefExoticComponent<CommandPaletteTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
10
25
  export {};
11
26
  //# sourceMappingURL=CommandPaletteTrigger.d.ts.map
@@ -1,31 +1,57 @@
1
1
  import { Kbd } from "../../display/Kbd.js";
2
2
  import { tabbable } from "../../foundations/KeyboardFocus.js";
3
3
  import { applePlatform, isShortcut } from "../../foundations/KeyboardShortcut.js";
4
- import { useEffect, useEffectEvent, useRef } from "react";
5
- import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { fitTrigger, useTriggerRoom } from "./TriggerFit.js";
5
+ import { forwardRef, useEffect, useEffectEvent, useImperativeHandle, useRef } from "react";
6
6
  import { SearchIcon } from "lucide-react";
7
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
7
8
  // src/layout/toolbar/CommandPaletteTrigger.tsx
9
+ const chip = "inline-flex h-5 shrink-0 items-center gap-1 rounded-sm bg-base-200 px-1 text-2xs font-medium text-base-800 dark:bg-base-300 dark:text-base-content [&_svg]:size-3";
10
+ function TokenChip({ token }) {
11
+ const hued = token.hue !== void 0;
12
+ return /* @__PURE__ */ jsxs("span", {
13
+ title: token.label,
14
+ className: `${chip} ${hued ? "kind-badge!" : ""}`,
15
+ style: hued ? { "--lar-kind-hue": token.hue } : void 0,
16
+ children: [token.leading, /* @__PURE__ */ jsx("span", {
17
+ className: "max-w-32 min-w-0 truncate",
18
+ children: token.label
19
+ })]
20
+ });
21
+ }
8
22
  /** The title bar's way into the command palette: a quiet field-like button with its shortcut, folding to its
9
- * icon when the title bar is narrow. */
10
- function CommandPaletteTrigger({ label, onOpen, shortcut }) {
23
+ * icon when the title bar is narrow. With tokens, it also says what narrows the palette. */
24
+ const CommandPaletteTrigger = forwardRef(({ label, onOpen, shortcut, tokens, filterLabel }, ref) => {
11
25
  const button = useRef(null);
12
26
  const openFromShortcut = useEffectEvent((event) => {
13
27
  if (!isShortcut(event, shortcut) || button.current?.closest("[aria-hidden=\"true\"]")) return;
14
28
  event.preventDefault();
15
29
  onOpen();
16
30
  });
31
+ useImperativeHandle(ref, () => button.current);
17
32
  useEffect(() => {
18
33
  const listener = (event) => openFromShortcut(event);
19
34
  document.addEventListener("keydown", listener);
20
35
  return () => document.removeEventListener("keydown", listener);
21
36
  }, []);
37
+ const keys = `${applePlatform ? "Meta" : "Control"}+${shortcut.toUpperCase()}`;
38
+ const hint = applePlatform ? `⌘${shortcut.toUpperCase()}` : `Ctrl ${shortcut.toUpperCase()}`;
39
+ if (tokens) return /* @__PURE__ */ jsx(FittedTrigger, {
40
+ button,
41
+ label,
42
+ onOpen,
43
+ tokens,
44
+ filterLabel,
45
+ keys,
46
+ hint
47
+ });
22
48
  return /* @__PURE__ */ jsxs("button", {
23
49
  ...tabbable,
24
50
  ref: button,
25
51
  type: "button",
26
52
  "aria-label": label,
27
53
  "aria-haspopup": "dialog",
28
- "aria-keyshortcuts": `${applePlatform ? "Meta" : "Control"}+${shortcut.toUpperCase()}`,
54
+ "aria-keyshortcuts": keys,
29
55
  onClick: onOpen,
30
56
  className: "text-base-600 hover:bg-base-200 hover:text-base-content focus-visible:outline-primary @2xl:border-base-300 @2xl:bg-base-100 @2xl:hover:border-base-400 @2xl:hover:bg-base-100 dark:@2xl:bg-base-200 flex size-7 items-center justify-center gap-2 rounded-lg text-sm transition-colors focus-visible:outline-2 @2xl:w-56 @2xl:justify-start @2xl:border @2xl:px-2.5 [&>svg]:size-4 [&>svg]:shrink-0",
31
57
  children: [
@@ -36,10 +62,67 @@ function CommandPaletteTrigger({ label, onOpen, shortcut }) {
36
62
  }),
37
63
  /* @__PURE__ */ jsx("span", {
38
64
  className: "hidden pointer-fine:@2xl:inline",
39
- children: /* @__PURE__ */ jsx(Kbd, { children: applePlatform ? `⌘${shortcut.toUpperCase()}` : `Ctrl ${shortcut.toUpperCase()}` })
65
+ children: /* @__PURE__ */ jsx(Kbd, { children: hint })
40
66
  })
41
67
  ]
42
68
  });
69
+ });
70
+ CommandPaletteTrigger.displayName = "CommandPaletteTrigger";
71
+ /** The trigger with tokens, up to 26rem wide: it measures its room and the chips in a hidden copy, then shows what
72
+ * fits (TriggerFit.ts). */
73
+ function FittedTrigger({ button, label, onOpen, tokens, filterLabel, keys, hint }) {
74
+ const wrapper = useRef(null);
75
+ const ghost = useRef(null);
76
+ const { room, widths } = useTriggerRoom(wrapper, ghost, tokens.map(({ id }) => id).join());
77
+ const { shown, keyHint, folded, width } = fitTrigger(room, widths);
78
+ const hidden = tokens.slice(shown);
79
+ const labels = tokens.map((token) => token.label);
80
+ return /* @__PURE__ */ jsxs("div", {
81
+ ref: wrapper,
82
+ className: "relative ml-auto flex max-w-[26rem] min-w-0 flex-1 justify-end",
83
+ children: [/* @__PURE__ */ jsx("div", {
84
+ ref: ghost,
85
+ "aria-hidden": "true",
86
+ className: "invisible absolute right-0 flex h-0 w-max gap-1 overflow-hidden",
87
+ children: tokens.map((token) => /* @__PURE__ */ jsx(TokenChip, { token }, token.id))
88
+ }), /* @__PURE__ */ jsxs("button", {
89
+ ...tabbable,
90
+ ref: button,
91
+ type: "button",
92
+ "data-search-field": true,
93
+ "data-folded": folded || void 0,
94
+ "aria-haspopup": "dialog",
95
+ "aria-keyshortcuts": keys,
96
+ "aria-label": tokens.length && filterLabel ? `${label}, ${filterLabel(labels)}` : label,
97
+ onClick: onOpen,
98
+ style: folded ? void 0 : { width },
99
+ className: `text-base-700 focus-visible:outline-primary relative flex h-7 shrink-0 cursor-pointer items-center rounded-lg text-xs transition-colors focus-visible:outline-2 ${folded ? "hover:bg-base-200 hover:text-base-content dark:hover:bg-base-300 w-7 justify-center" : "border-base-300 bg-base-100 hover:border-base-400 dark:bg-base-200 gap-1 border pr-2 pl-1.5"}`,
100
+ children: [/* @__PURE__ */ jsx(SearchIcon, {
101
+ "aria-hidden": "true",
102
+ className: `shrink-0 ${folded ? "size-4" : "mr-0.5 size-3.5"}`
103
+ }), folded ? tokens.length > 0 && /* @__PURE__ */ jsx("span", {
104
+ "data-search-count": true,
105
+ className: "bg-primary text-2xs text-primary-content absolute -top-0.5 -right-0.5 grid h-3.5 min-w-3.5 place-items-center rounded-full px-0.5 leading-none font-semibold tabular-nums",
106
+ children: tokens.length
107
+ }) : /* @__PURE__ */ jsxs(Fragment$1, { children: [
108
+ tokens.slice(0, shown).map((token) => /* @__PURE__ */ jsx(TokenChip, { token }, token.id)),
109
+ hidden.length > 0 && /* @__PURE__ */ jsxs("span", {
110
+ "data-search-count": true,
111
+ title: hidden.map((token) => token.label).join(", "),
112
+ className: `${chip} tabular-nums`,
113
+ children: [shown > 0 ? "+" : "", hidden.length]
114
+ }),
115
+ /* @__PURE__ */ jsx("span", {
116
+ className: "ml-0.5 min-w-0 flex-1 truncate text-left",
117
+ children: label
118
+ }),
119
+ keyHint && /* @__PURE__ */ jsx("span", {
120
+ className: "shrink-0 pointer-coarse:hidden",
121
+ children: /* @__PURE__ */ jsx(Kbd, { children: hint })
122
+ })
123
+ ] })]
124
+ })]
125
+ });
43
126
  }
44
127
  export { CommandPaletteTrigger };
45
128
 
@@ -1 +1 @@
1
- {"version":3,"file":"CommandPaletteTrigger.js","names":[],"sources":["../../../src/layout/toolbar/CommandPaletteTrigger.tsx"],"sourcesContent":["import { SearchIcon } from 'lucide-react';\nimport { useEffect, useEffectEvent, useRef } from 'react';\n\nimport { Kbd } from '../../display/Kbd';\nimport { tabbable } from '../../foundations/KeyboardFocus';\nimport { applePlatform, isShortcut } from '../../foundations/KeyboardShortcut';\n\ninterface CommandPaletteTriggerProps {\n label: string;\n onOpen: () => void;\n /** Key that opens the palette from anywhere, pressed with ⌘ on Apple devices and Ctrl elsewhere. */\n shortcut: string;\n}\n\n/** The title bar's way into the command palette: a quiet field-like button with its shortcut, folding to its\n * icon when the title bar is narrow. */\nexport function CommandPaletteTrigger({ label, onOpen, shortcut }: CommandPaletteTriggerProps) {\n const button = useRef<HTMLButtonElement>(null);\n const openFromShortcut = useEffectEvent((event: KeyboardEvent) => {\n // An open dialog hides the page behind it, the trigger included.\n if (!isShortcut(event, shortcut) || button.current?.closest('[aria-hidden=\"true\"]')) return;\n\n event.preventDefault();\n onOpen();\n });\n\n useEffect(() => {\n const listener = (event: KeyboardEvent) => openFromShortcut(event);\n\n document.addEventListener('keydown', listener);\n\n return () => document.removeEventListener('keydown', listener);\n }, []);\n\n return (\n <button\n {...tabbable}\n ref={button}\n type=\"button\"\n aria-label={label}\n aria-haspopup=\"dialog\"\n aria-keyshortcuts={`${applePlatform ? 'Meta' : 'Control'}+${shortcut.toUpperCase()}`}\n onClick={onOpen}\n className=\"text-base-600 hover:bg-base-200 hover:text-base-content focus-visible:outline-primary @2xl:border-base-300 @2xl:bg-base-100 @2xl:hover:border-base-400 @2xl:hover:bg-base-100 dark:@2xl:bg-base-200 flex size-7 items-center justify-center gap-2 rounded-lg text-sm transition-colors focus-visible:outline-2 @2xl:w-56 @2xl:justify-start @2xl:border @2xl:px-2.5 [&>svg]:size-4 [&>svg]:shrink-0\"\n >\n <SearchIcon />\n <span className=\"hidden flex-1 text-left @2xl:inline\">{label}</span>\n <span className=\"hidden pointer-fine:@2xl:inline\">\n <Kbd>{applePlatform ? `⌘${shortcut.toUpperCase()}` : `Ctrl ${shortcut.toUpperCase()}`}</Kbd>\n </span>\n </button>\n );\n}\n"],"mappings":";;;;;;;;;AAgBA,SAAgB,sBAAsB,EAAE,OAAO,QAAQ,YAAwC;CAC3F,MAAM,SAAS,OAA0B,IAAI;CAC7C,MAAM,mBAAmB,gBAAgB,UAAyB;EAE9D,IAAI,CAAC,WAAW,OAAO,QAAQ,KAAK,OAAO,SAAS,QAAQ,wBAAsB,GAAG;EAErF,MAAM,eAAe;EACrB,OAAO;CACX,CAAC;CAED,gBAAgB;EACZ,MAAM,YAAY,UAAyB,iBAAiB,KAAK;EAEjE,SAAS,iBAAiB,WAAW,QAAQ;EAE7C,aAAa,SAAS,oBAAoB,WAAW,QAAQ;CACjE,GAAG,CAAC,CAAC;CAEL,OACI,qBAAC,UAAD;EACI,GAAI;EACJ,KAAK;EACL,MAAK;EACL,cAAY;EACZ,iBAAc;EACd,qBAAmB,GAAG,gBAAgB,SAAS,UAAU,GAAG,SAAS,YAAY;EACjF,SAAS;EACT,WAAU;EARd,UAAA;GAUI,oBAAC,YAAD,CAAa,CAAA;GACb,oBAAC,QAAD;IAAM,WAAU;IAAuC,UAAA;GAAY,CAAA;GACnE,oBAAC,QAAD;IAAM,WAAU;IACZ,UAAA,oBAAC,KAAD,EAAA,UAAM,gBAAgB,IAAI,SAAS,YAAY,MAAM,QAAQ,SAAS,YAAY,IAAS,CAAA;GACzF,CAAA;EACF;;AAEhB"}
1
+ {"version":3,"file":"CommandPaletteTrigger.js","names":[],"sources":["../../../src/layout/toolbar/CommandPaletteTrigger.tsx"],"sourcesContent":["import { SearchIcon } from 'lucide-react';\nimport {\n type CSSProperties,\n forwardRef,\n type ReactNode,\n type Ref,\n useEffect,\n useEffectEvent,\n useImperativeHandle,\n useRef,\n} from 'react';\n\nimport { Kbd } from '../../display/Kbd';\nimport { tabbable } from '../../foundations/KeyboardFocus';\nimport { applePlatform, isShortcut } from '../../foundations/KeyboardShortcut';\nimport { fitTrigger, useTriggerRoom } from './TriggerFit';\n\n/** What narrows the palette, shown in the trigger as a small chip. */\nexport interface CommandPaletteTriggerToken {\n id: string;\n label: string;\n /** An icon or colour mark before the label. */\n leading?: ReactNode;\n /** A lar-brand app hue that colours the chip, as a kind's badge. */\n hue?: number;\n}\n\ninterface CommandPaletteTriggerProps {\n label: string;\n onOpen: () => void;\n /** Key that opens the palette from anywhere, pressed with ⌘ on Apple devices and Ctrl elsewhere. */\n shortcut: string;\n /** What narrows the palette now, such as filters. With tokens, the trigger measures its own room: the chips go\n * into a count from the last, then it folds to its icon. */\n tokens?: readonly CommandPaletteTriggerToken[];\n /** The accessible name's addition while tokens show, such as \"filtered by bug, docs\". */\n filterLabel?: (labels: readonly string[]) => string;\n}\n\nconst chip =\n 'inline-flex h-5 shrink-0 items-center gap-1 rounded-sm bg-base-200 px-1 text-2xs font-medium text-base-800 dark:bg-base-300 dark:text-base-content [&_svg]:size-3';\n\nfunction TokenChip({ token }: { token: CommandPaletteTriggerToken }) {\n const hued = token.hue !== undefined;\n\n return (\n <span\n title={token.label}\n className={`${chip} ${hued ? 'kind-badge!' : ''}`}\n style={hued ? ({ '--lar-kind-hue': token.hue } as CSSProperties) : undefined}\n >\n {token.leading}\n <span className=\"max-w-32 min-w-0 truncate\">{token.label}</span>\n </span>\n );\n}\n\n/** The title bar's way into the command palette: a quiet field-like button with its shortcut, folding to its\n * icon when the title bar is narrow. With tokens, it also says what narrows the palette. */\nexport const CommandPaletteTrigger = forwardRef<HTMLButtonElement, CommandPaletteTriggerProps>(\n ({ label, onOpen, shortcut, tokens, filterLabel }, ref) => {\n const button = useRef<HTMLButtonElement>(null);\n const openFromShortcut = useEffectEvent((event: KeyboardEvent) => {\n // An open dialog hides the page behind it, the trigger included.\n if (!isShortcut(event, shortcut) || button.current?.closest('[aria-hidden=\"true\"]')) return;\n\n event.preventDefault();\n onOpen();\n });\n\n useImperativeHandle(ref, () => button.current!);\n useEffect(() => {\n const listener = (event: KeyboardEvent) => openFromShortcut(event);\n\n document.addEventListener('keydown', listener);\n\n return () => document.removeEventListener('keydown', listener);\n }, []);\n\n const keys = `${applePlatform ? 'Meta' : 'Control'}+${shortcut.toUpperCase()}`;\n const hint = applePlatform ? `⌘${shortcut.toUpperCase()}` : `Ctrl ${shortcut.toUpperCase()}`;\n\n if (tokens)\n return (\n <FittedTrigger\n button={button}\n label={label}\n onOpen={onOpen}\n tokens={tokens}\n filterLabel={filterLabel}\n keys={keys}\n hint={hint}\n />\n );\n\n return (\n <button\n {...tabbable}\n ref={button}\n type=\"button\"\n aria-label={label}\n aria-haspopup=\"dialog\"\n aria-keyshortcuts={keys}\n onClick={onOpen}\n className=\"text-base-600 hover:bg-base-200 hover:text-base-content focus-visible:outline-primary @2xl:border-base-300 @2xl:bg-base-100 @2xl:hover:border-base-400 @2xl:hover:bg-base-100 dark:@2xl:bg-base-200 flex size-7 items-center justify-center gap-2 rounded-lg text-sm transition-colors focus-visible:outline-2 @2xl:w-56 @2xl:justify-start @2xl:border @2xl:px-2.5 [&>svg]:size-4 [&>svg]:shrink-0\"\n >\n <SearchIcon />\n <span className=\"hidden flex-1 text-left @2xl:inline\">{label}</span>\n <span className=\"hidden pointer-fine:@2xl:inline\">\n <Kbd>{hint}</Kbd>\n </span>\n </button>\n );\n },\n);\n\nCommandPaletteTrigger.displayName = 'CommandPaletteTrigger';\n\n/** The trigger with tokens, up to 26rem wide: it measures its room and the chips in a hidden copy, then shows what\n * fits (TriggerFit.ts). */\nfunction FittedTrigger({\n button,\n label,\n onOpen,\n tokens,\n filterLabel,\n keys,\n hint,\n}: {\n button: Ref<HTMLButtonElement>;\n label: string;\n onOpen: () => void;\n tokens: readonly CommandPaletteTriggerToken[];\n filterLabel?: (labels: readonly string[]) => string;\n keys: string;\n hint: string;\n}) {\n const wrapper = useRef<HTMLDivElement>(null);\n const ghost = useRef<HTMLDivElement>(null);\n const { room, widths } = useTriggerRoom(wrapper, ghost, tokens.map(({ id }) => id).join());\n const { shown, keyHint, folded, width } = fitTrigger(room, widths);\n const hidden = tokens.slice(shown);\n const labels = tokens.map((token) => token.label);\n\n return (\n <div ref={wrapper} className=\"relative ml-auto flex max-w-[26rem] min-w-0 flex-1 justify-end\">\n <div\n ref={ghost}\n aria-hidden=\"true\"\n className=\"invisible absolute right-0 flex h-0 w-max gap-1 overflow-hidden\"\n >\n {tokens.map((token) => (\n <TokenChip key={token.id} token={token} />\n ))}\n </div>\n <button\n {...tabbable}\n ref={button}\n type=\"button\"\n data-search-field\n data-folded={folded || undefined}\n aria-haspopup=\"dialog\"\n aria-keyshortcuts={keys}\n aria-label={tokens.length && filterLabel ? `${label}, ${filterLabel(labels)}` : label}\n onClick={onOpen}\n style={folded ? undefined : { width }}\n className={`text-base-700 focus-visible:outline-primary relative flex h-7 shrink-0 cursor-pointer items-center rounded-lg text-xs transition-colors focus-visible:outline-2 ${\n folded\n ? 'hover:bg-base-200 hover:text-base-content dark:hover:bg-base-300 w-7 justify-center'\n : 'border-base-300 bg-base-100 hover:border-base-400 dark:bg-base-200 gap-1 border pr-2 pl-1.5'\n }`}\n >\n <SearchIcon aria-hidden=\"true\" className={`shrink-0 ${folded ? 'size-4' : 'mr-0.5 size-3.5'}`} />\n {folded ? (\n tokens.length > 0 && (\n <span\n data-search-count\n className=\"bg-primary text-2xs text-primary-content absolute -top-0.5 -right-0.5 grid h-3.5 min-w-3.5 place-items-center rounded-full px-0.5 leading-none font-semibold tabular-nums\"\n >\n {tokens.length}\n </span>\n )\n ) : (\n <>\n {tokens.slice(0, shown).map((token) => (\n <TokenChip key={token.id} token={token} />\n ))}\n {hidden.length > 0 && (\n <span\n data-search-count\n title={hidden.map((token) => token.label).join(', ')}\n className={`${chip} tabular-nums`}\n >\n {shown > 0 ? '+' : ''}\n {hidden.length}\n </span>\n )}\n <span className=\"ml-0.5 min-w-0 flex-1 truncate text-left\">{label}</span>\n {keyHint && (\n <span className=\"shrink-0 pointer-coarse:hidden\">\n <Kbd>{hint}</Kbd>\n </span>\n )}\n </>\n )}\n </button>\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAuCA,MAAM,OACF;AAEJ,SAAS,UAAU,EAAE,SAAgD;CACjE,MAAM,OAAO,MAAM,QAAQ,KAAA;CAE3B,OACI,qBAAC,QAAD;EACI,OAAO,MAAM;EACb,WAAW,GAAG,KAAK,GAAG,OAAO,gBAAgB;EAC7C,OAAO,OAAQ,EAAE,kBAAkB,MAAM,IAAI,IAAsB,KAAA;EAHvE,UAAA,CAKK,MAAM,SACP,oBAAC,QAAD;GAAM,WAAU;GAA6B,UAAA,MAAM;EAAY,CAAA,CAC7D;;AAEd;;;AAIA,MAAa,wBAAwB,YAChC,EAAE,OAAO,QAAQ,UAAU,QAAQ,eAAe,QAAQ;CACvD,MAAM,SAAS,OAA0B,IAAI;CAC7C,MAAM,mBAAmB,gBAAgB,UAAyB;EAE9D,IAAI,CAAC,WAAW,OAAO,QAAQ,KAAK,OAAO,SAAS,QAAQ,wBAAsB,GAAG;EAErF,MAAM,eAAe;EACrB,OAAO;CACX,CAAC;CAED,oBAAoB,WAAW,OAAO,OAAQ;CAC9C,gBAAgB;EACZ,MAAM,YAAY,UAAyB,iBAAiB,KAAK;EAEjE,SAAS,iBAAiB,WAAW,QAAQ;EAE7C,aAAa,SAAS,oBAAoB,WAAW,QAAQ;CACjE,GAAG,CAAC,CAAC;CAEL,MAAM,OAAO,GAAG,gBAAgB,SAAS,UAAU,GAAG,SAAS,YAAY;CAC3E,MAAM,OAAO,gBAAgB,IAAI,SAAS,YAAY,MAAM,QAAQ,SAAS,YAAY;CAEzF,IAAI,QACA,OACI,oBAAC,eAAD;EACY;EACD;EACC;EACA;EACK;EACP;EACA;CACT,CAAA;CAGT,OACI,qBAAC,UAAD;EACI,GAAI;EACJ,KAAK;EACL,MAAK;EACL,cAAY;EACZ,iBAAc;EACd,qBAAmB;EACnB,SAAS;EACT,WAAU;EARd,UAAA;GAUI,oBAAC,YAAD,CAAa,CAAA;GACb,oBAAC,QAAD;IAAM,WAAU;IAAuC,UAAA;GAAY,CAAA;GACnE,oBAAC,QAAD;IAAM,WAAU;IACZ,UAAA,oBAAC,KAAD,EAAA,UAAM,KAAU,CAAA;GACd,CAAA;EACF;;AAEhB,CACJ;AAEA,sBAAsB,cAAc;;;AAIpC,SAAS,cAAc,EACnB,QACA,OACA,QACA,QACA,aACA,MACA,QASD;CACC,MAAM,UAAU,OAAuB,IAAI;CAC3C,MAAM,QAAQ,OAAuB,IAAI;CACzC,MAAM,EAAE,MAAM,WAAW,eAAe,SAAS,OAAO,OAAO,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC;CACzF,MAAM,EAAE,OAAO,SAAS,QAAQ,UAAU,WAAW,MAAM,MAAM;CACjE,MAAM,SAAS,OAAO,MAAM,KAAK;CACjC,MAAM,SAAS,OAAO,KAAK,UAAU,MAAM,KAAK;CAEhD,OACI,qBAAC,OAAD;EAAK,KAAK;EAAS,WAAU;EAA7B,UAAA,CACI,oBAAC,OAAD;GACI,KAAK;GACL,eAAY;GACZ,WAAU;GAET,UAAA,OAAO,KAAK,UACT,oBAAC,WAAD,EAAiC,MAAQ,GAAzB,MAAM,EAAmB,CAC5C;EACA,CAAA,GACL,qBAAC,UAAD;GACI,GAAI;GACJ,KAAK;GACL,MAAK;GACL,qBAAA;GACA,eAAa,UAAU,KAAA;GACvB,iBAAc;GACd,qBAAmB;GACnB,cAAY,OAAO,UAAU,cAAc,GAAG,MAAM,IAAI,YAAY,MAAM,MAAM;GAChF,SAAS;GACT,OAAO,SAAS,KAAA,IAAY,EAAE,MAAM;GACpC,WAAW,mKACP,SACM,wFACA;GAdd,UAAA,CAiBI,oBAAC,YAAD;IAAY,eAAY;IAAO,WAAW,YAAY,SAAS,WAAW;GAAsB,CAAA,GAC/F,SACG,OAAO,SAAS,KACZ,oBAAC,QAAD;IACI,qBAAA;IACA,WAAU;IAET,UAAA,OAAO;GACN,CAAA,IAGV,qBAAA,YAAA,EAAA,UAAA;IACK,OAAO,MAAM,GAAG,KAAK,CAAC,CAAC,KAAK,UACzB,oBAAC,WAAD,EAAiC,MAAQ,GAAzB,MAAM,EAAmB,CAC5C;IACA,OAAO,SAAS,KACb,qBAAC,QAAD;KACI,qBAAA;KACA,OAAO,OAAO,KAAK,UAAU,MAAM,KAAK,CAAC,CAAC,KAAK,IAAI;KACnD,WAAW,GAAG,KAAK;KAHvB,UAAA,CAKK,QAAQ,IAAI,MAAM,IAClB,OAAO,MACN;;IAEV,oBAAC,QAAD;KAAM,WAAU;KAA4C,UAAA;IAAY,CAAA;IACvE,WACG,oBAAC,QAAD;KAAM,WAAU;KACZ,UAAA,oBAAC,KAAD,EAAA,UAAM,KAAU,CAAA;IACd,CAAA;GAEZ,EAAA,CAAA,CAEF;EACP,CAAA,CAAA;;AAEb"}
@@ -0,0 +1,56 @@
1
+ import { useLayoutEffect, useState } from "react";
2
+ // src/layout/toolbar/TriggerFit.ts
3
+ const KEY_HINT = 34;
4
+ const GAP = 4;
5
+ /** lar-server's trigger width, which the field keeps until its tokens ask for more. */
6
+ const MIN_WIDTH = 224;
7
+ /** Up to this title bar width, the smallest phones', the field folds. Its row there still has room for the word, as the
8
+ * bar gives its actions their own row, so the room alone would never fold it. */
9
+ const NARROWEST_BAR = 340;
10
+ function fitTrigger({ field: room, bar }, tokenWidths) {
11
+ const tokens = (count) => tokenWidths.slice(0, count).reduce((sum, width) => sum + width + GAP, 0);
12
+ const used = (count) => 76 + tokens(count) + (count < tokenWidths.length ? 28 : 0);
13
+ let shown = tokenWidths.length;
14
+ while (shown > 0 && used(shown) > room) shown--;
15
+ return {
16
+ shown,
17
+ keyHint: shown === tokenWidths.length && used(shown) + KEY_HINT + GAP <= room,
18
+ folded: bar <= NARROWEST_BAR || used(shown) > room,
19
+ width: Math.min(room, Math.max(MIN_WIDTH, used(tokenWidths.length) + KEY_HINT + GAP))
20
+ };
21
+ }
22
+ /** The room in `wrapper` and the title bar holding it, and each child's width in `ghost`, which draws every token out of
23
+ * sight to be measured. */
24
+ function useTriggerRoom(wrapper, ghost, tokens) {
25
+ const [room, setRoom] = useState({
26
+ field: 0,
27
+ bar: 0
28
+ });
29
+ const [widths, setWidths] = useState([]);
30
+ useLayoutEffect(() => {
31
+ const measure = () => {
32
+ setRoom({
33
+ field: wrapper.current.getBoundingClientRect().width,
34
+ bar: (wrapper.current.closest("header") ?? wrapper.current).getBoundingClientRect().width
35
+ });
36
+ const next = [...ghost.current.children].map((child) => child.offsetWidth);
37
+ setWidths((now) => now.join() === next.join() ? now : next);
38
+ };
39
+ measure();
40
+ const observer = new ResizeObserver(measure);
41
+ observer.observe(wrapper.current);
42
+ observer.observe(ghost.current);
43
+ return () => observer.disconnect();
44
+ }, [
45
+ wrapper,
46
+ ghost,
47
+ tokens
48
+ ]);
49
+ return {
50
+ room,
51
+ widths
52
+ };
53
+ }
54
+ export { fitTrigger, useTriggerRoom };
55
+
56
+ //# sourceMappingURL=TriggerFit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TriggerFit.js","names":[],"sources":["../../../src/layout/toolbar/TriggerFit.ts"],"sourcesContent":["// What the command palette trigger shows, with tokens, in the room it has. Tokens go from the last, into a count,\n// while the word Search and the count still fit; the key hint shows only with every token and room to spare; below the\n// word's room, or on the narrowest title bar, the field folds to its magnifier with a count. Widths are in pixels, in\n// the field's `text-xs`.\nimport { type RefObject, useLayoutEffect, useState } from 'react';\n\n/** The field's left padding, magnifier, gap and right padding. */\nconst CHROME = 34;\nconst SEARCH_WORD = 42;\nconst COUNT = 24;\nconst KEY_HINT = 34;\nconst GAP = 4;\n/** lar-server's trigger width, which the field keeps until its tokens ask for more. */\nconst MIN_WIDTH = 224;\n/** Up to this title bar width, the smallest phones', the field folds. Its row there still has room for the word, as the\n * bar gives its actions their own row, so the room alone would never fold it. */\nconst NARROWEST_BAR = 340;\n\ninterface FieldRoom {\n /** What the field may fill. */\n field: number;\n /** The title bar's width. */\n bar: number;\n}\n\nexport interface TriggerFit {\n /** How many tokens show; the rest are in the count. */\n shown: number;\n keyHint: boolean;\n folded: boolean;\n width: number;\n}\n\nexport function fitTrigger({ field: room, bar }: FieldRoom, tokenWidths: readonly number[]): TriggerFit {\n const tokens = (count: number) => tokenWidths.slice(0, count).reduce((sum, width) => sum + width + GAP, 0);\n const used = (count: number) =>\n CHROME + SEARCH_WORD + tokens(count) + (count < tokenWidths.length ? COUNT + GAP : 0);\n let shown = tokenWidths.length;\n\n while (shown > 0 && used(shown) > room) shown--;\n\n return {\n shown,\n keyHint: shown === tokenWidths.length && used(shown) + KEY_HINT + GAP <= room,\n folded: bar <= NARROWEST_BAR || used(shown) > room,\n width: Math.min(room, Math.max(MIN_WIDTH, used(tokenWidths.length) + KEY_HINT + GAP)),\n };\n}\n\n/** The room in `wrapper` and the title bar holding it, and each child's width in `ghost`, which draws every token out of\n * sight to be measured. */\nexport function useTriggerRoom(\n wrapper: RefObject<HTMLElement | null>,\n ghost: RefObject<HTMLElement | null>,\n tokens: string,\n) {\n const [room, setRoom] = useState({ field: 0, bar: 0 });\n const [widths, setWidths] = useState<number[]>([]);\n\n useLayoutEffect(() => {\n const measure = () => {\n setRoom({\n field: wrapper.current!.getBoundingClientRect().width,\n bar: (wrapper.current!.closest('header') ?? wrapper.current!).getBoundingClientRect().width,\n });\n\n const next = [...ghost.current!.children].map((child) => (child as HTMLElement).offsetWidth);\n\n setWidths((now) => (now.join() === next.join() ? now : next));\n };\n\n measure();\n\n // The ghost resizes too when a late web font changes the tokens' widths.\n const observer = new ResizeObserver(measure);\n\n observer.observe(wrapper.current!);\n observer.observe(ghost.current!);\n\n return () => observer.disconnect();\n }, [wrapper, ghost, tokens]);\n\n return { room, widths };\n}\n"],"mappings":";;AAUA,MAAM,WAAW;AACjB,MAAM,MAAM;;AAEZ,MAAM,YAAY;;;AAGlB,MAAM,gBAAgB;AAiBtB,SAAgB,WAAW,EAAE,OAAO,MAAM,OAAkB,aAA4C;CACpG,MAAM,UAAU,UAAkB,YAAY,MAAM,GAAG,KAAK,CAAC,CAAC,QAAQ,KAAK,UAAU,MAAM,QAAQ,KAAK,CAAC;CACzG,MAAM,QAAQ,UACV,KAAuB,OAAO,KAAK,KAAK,QAAQ,YAAY,SAAS,KAAc;CACvF,IAAI,QAAQ,YAAY;CAExB,OAAO,QAAQ,KAAK,KAAK,KAAK,IAAI,MAAM;CAExC,OAAO;EACH;EACA,SAAS,UAAU,YAAY,UAAU,KAAK,KAAK,IAAI,WAAW,OAAO;EACzE,QAAQ,OAAO,iBAAiB,KAAK,KAAK,IAAI;EAC9C,OAAO,KAAK,IAAI,MAAM,KAAK,IAAI,WAAW,KAAK,YAAY,MAAM,IAAI,WAAW,GAAG,CAAC;CACxF;AACJ;;;AAIA,SAAgB,eACZ,SACA,OACA,QACF;CACE,MAAM,CAAC,MAAM,WAAW,SAAS;EAAE,OAAO;EAAG,KAAK;CAAE,CAAC;CACrD,MAAM,CAAC,QAAQ,aAAa,SAAmB,CAAC,CAAC;CAEjD,sBAAsB;EAClB,MAAM,gBAAgB;GAClB,QAAQ;IACJ,OAAO,QAAQ,QAAS,sBAAsB,CAAC,CAAC;IAChD,MAAM,QAAQ,QAAS,QAAQ,QAAQ,KAAK,QAAQ,QAAA,CAAU,sBAAsB,CAAC,CAAC;GAC1F,CAAC;GAED,MAAM,OAAO,CAAC,GAAG,MAAM,QAAS,QAAQ,CAAC,CAAC,KAAK,UAAW,MAAsB,WAAW;GAE3F,WAAW,QAAS,IAAI,KAAK,MAAM,KAAK,KAAK,IAAI,MAAM,IAAK;EAChE;EAEA,QAAQ;EAGR,MAAM,WAAW,IAAI,eAAe,OAAO;EAE3C,SAAS,QAAQ,QAAQ,OAAQ;EACjC,SAAS,QAAQ,MAAM,OAAQ;EAE/B,aAAa,SAAS,WAAW;CACrC,GAAG;EAAC;EAAS;EAAO;CAAM,CAAC;CAE3B,OAAO;EAAE;EAAM;CAAO;AAC1B"}
@@ -2,8 +2,8 @@ import { Button } from "../actions/Button.js";
2
2
  import { Badge } from "../display/Badge.js";
3
3
  import { DropdownMenu } from "../overlays/DropdownMenu.js";
4
4
  import { forwardRef } from "react";
5
- import { jsx, jsxs } from "react/jsx-runtime";
6
5
  import { ChevronDownIcon } from "lucide-react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
7
  // src/navigation/CollectionBrowseSelector.tsx
8
8
  const CollectionBrowseTrigger = forwardRef(({ label, icon, active = false, ...props }, ref) => /* @__PURE__ */ jsxs(Button, {
9
9
  ref,
@@ -1,4 +1,30 @@
1
+ import { ReactNode } from "react";
1
2
  export type CollectionView = 'grid' | 'table';
3
+ /** One way of drawing a view, as ViewToggle offers it: its icon, named by its label (or, as `text`, its label alone).
4
+ * `attributes` are `data-*` markers for its button, such as the pane it shows. */
5
+ export interface ViewToggleOption<V extends string> {
6
+ value: V;
7
+ label: string;
8
+ icon?: ReactNode;
9
+ disabled?: boolean;
10
+ attributes?: {
11
+ [name: `data-${string}`]: string;
12
+ };
13
+ }
14
+ /**
15
+ * A group of icon buttons that picks one way of drawing a view, the picked one raised. `compact` draws 24px buttons with
16
+ * 14px icons, for a row's line. As `text`, each button is its label in small type, such as a dialog's panes in its
17
+ * header.
18
+ */
19
+ export declare function ViewToggle<V extends string>({ label, options, value, onChange, compact, presentation }: {
20
+ /** Names the group; with none, the group is named by its options alone. */
21
+ label?: string;
22
+ options: readonly ViewToggleOption<V>[];
23
+ value: V;
24
+ onChange: (view: V) => void;
25
+ compact?: boolean;
26
+ presentation?: 'icons' | 'text';
27
+ }): import("react").JSX.Element;
2
28
  interface CollectionViewToggleProps {
3
29
  disabledViews?: readonly CollectionView[];
4
30
  gridLabel: string;