@lar-works/design-system 0.0.0-stage → 0.1.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 (555) hide show
  1. package/README.md +24 -2
  2. package/dist/actions/Button.d.ts +25 -0
  3. package/dist/actions/Button.js +55 -0
  4. package/dist/actions/Button.js.map +1 -0
  5. package/dist/actions/ButtonLink.d.ts +21 -0
  6. package/dist/actions/ButtonLink.js +40 -0
  7. package/dist/actions/ButtonLink.js.map +1 -0
  8. package/dist/actions/IconButton.d.ts +14 -0
  9. package/dist/actions/IconButton.js +29 -0
  10. package/dist/actions/IconButton.js.map +1 -0
  11. package/dist/actions/ThemeSwitch.d.ts +7 -0
  12. package/dist/actions/ThemeSwitch.js +42 -0
  13. package/dist/actions/ThemeSwitch.js.map +1 -0
  14. package/dist/actions/index.d.ts +5 -0
  15. package/dist/collections/CollectionSectionHeader.d.ts +5 -0
  16. package/dist/collections/CollectionSectionHeader.js +18 -0
  17. package/dist/collections/CollectionSectionHeader.js.map +1 -0
  18. package/dist/collections/CollectionState.d.ts +37 -0
  19. package/dist/collections/CollectionState.js +69 -0
  20. package/dist/collections/CollectionState.js.map +1 -0
  21. package/dist/collections/CollectionTokens.d.ts +16 -0
  22. package/dist/collections/CollectionTokens.js +19 -0
  23. package/dist/collections/CollectionTokens.js.map +1 -0
  24. package/dist/collections/CollectionViewport.js +36 -0
  25. package/dist/collections/CollectionViewport.js.map +1 -0
  26. package/dist/collections/DataRow.d.ts +23 -0
  27. package/dist/collections/DataRow.js +57 -0
  28. package/dist/collections/DataRow.js.map +1 -0
  29. package/dist/collections/ResultList.d.ts +29 -0
  30. package/dist/collections/ResultList.js +128 -0
  31. package/dist/collections/ResultList.js.map +1 -0
  32. package/dist/collections/ScrollRow.d.ts +23 -0
  33. package/dist/collections/ScrollRow.js +59 -0
  34. package/dist/collections/ScrollRow.js.map +1 -0
  35. package/dist/collections/VirtualGrid.d.ts +14 -0
  36. package/dist/collections/VirtualGrid.js +71 -0
  37. package/dist/collections/VirtualGrid.js.map +1 -0
  38. package/dist/collections/VirtualList.d.ts +34 -0
  39. package/dist/collections/VirtualList.js +128 -0
  40. package/dist/collections/VirtualList.js.map +1 -0
  41. package/dist/collections/index.d.ts +10 -0
  42. package/dist/collections/useCollectionMotion.d.ts +3 -0
  43. package/dist/collections/useCollectionMotion.js +34 -0
  44. package/dist/collections/useCollectionMotion.js.map +1 -0
  45. package/dist/collections/useScrollRow.d.ts +17 -0
  46. package/dist/collections/useScrollRow.js +63 -0
  47. package/dist/collections/useScrollRow.js.map +1 -0
  48. package/dist/display/ActivityCard.d.ts +17 -0
  49. package/dist/display/ActivityCard.js +58 -0
  50. package/dist/display/ActivityCard.js.map +1 -0
  51. package/dist/display/Artwork.d.ts +25 -0
  52. package/dist/display/Artwork.js +97 -0
  53. package/dist/display/Artwork.js.map +1 -0
  54. package/dist/display/Avatar.d.ts +5 -0
  55. package/dist/display/Avatar.js +13 -0
  56. package/dist/display/Avatar.js.map +1 -0
  57. package/dist/display/Badge.d.ts +10 -0
  58. package/dist/display/Badge.js +28 -0
  59. package/dist/display/Badge.js.map +1 -0
  60. package/dist/display/BadgeList.d.ts +11 -0
  61. package/dist/display/BadgeList.js +20 -0
  62. package/dist/display/BadgeList.js.map +1 -0
  63. package/dist/display/BrandMark.d.ts +21 -0
  64. package/dist/display/BrandMark.js +60 -0
  65. package/dist/display/BrandMark.js.map +1 -0
  66. package/dist/display/ChangeList.d.ts +16 -0
  67. package/dist/display/ChangeList.js +56 -0
  68. package/dist/display/ChangeList.js.map +1 -0
  69. package/dist/display/CheckList.d.ts +10 -0
  70. package/dist/display/CheckList.js +25 -0
  71. package/dist/display/CheckList.js.map +1 -0
  72. package/dist/display/CodeBlock.d.ts +6 -0
  73. package/dist/display/CodeBlock.js +12 -0
  74. package/dist/display/CodeBlock.js.map +1 -0
  75. package/dist/display/CopyButton.d.ts +9 -0
  76. package/dist/display/CopyButton.js +59 -0
  77. package/dist/display/CopyButton.js.map +1 -0
  78. package/dist/display/DataTable.d.ts +35 -0
  79. package/dist/display/DataTable.js +53 -0
  80. package/dist/display/DataTable.js.map +1 -0
  81. package/dist/display/DetailHero.d.ts +39 -0
  82. package/dist/display/DetailHero.js +146 -0
  83. package/dist/display/DetailHero.js.map +1 -0
  84. package/dist/display/DetailList.d.ts +15 -0
  85. package/dist/display/DetailList.js +53 -0
  86. package/dist/display/DetailList.js.map +1 -0
  87. package/dist/display/DeviceCard.d.ts +18 -0
  88. package/dist/display/DeviceCard.js +48 -0
  89. package/dist/display/DeviceCard.js.map +1 -0
  90. package/dist/display/Identity.d.ts +14 -0
  91. package/dist/display/Identity.js +54 -0
  92. package/dist/display/Identity.js.map +1 -0
  93. package/dist/display/ImageCard.d.ts +22 -0
  94. package/dist/display/ImageCard.js +63 -0
  95. package/dist/display/ImageCard.js.map +1 -0
  96. package/dist/display/ImagePicker.d.ts +30 -0
  97. package/dist/display/ImagePicker.js +108 -0
  98. package/dist/display/ImagePicker.js.map +1 -0
  99. package/dist/display/InfoBox.d.ts +15 -0
  100. package/dist/display/InfoBox.js +41 -0
  101. package/dist/display/InfoBox.js.map +1 -0
  102. package/dist/display/InsetPanel.d.ts +13 -0
  103. package/dist/display/InsetPanel.js +26 -0
  104. package/dist/display/InsetPanel.js.map +1 -0
  105. package/dist/display/ItemAction.d.ts +10 -0
  106. package/dist/display/ItemAction.js +35 -0
  107. package/dist/display/ItemAction.js.map +1 -0
  108. package/dist/display/Kbd.d.ts +6 -0
  109. package/dist/display/Kbd.js +12 -0
  110. package/dist/display/Kbd.js.map +1 -0
  111. package/dist/display/KindIcon.d.ts +8 -0
  112. package/dist/display/KindIcon.js +15 -0
  113. package/dist/display/KindIcon.js.map +1 -0
  114. package/dist/display/NoticeCard.d.ts +24 -0
  115. package/dist/display/NoticeCard.js +59 -0
  116. package/dist/display/NoticeCard.js.map +1 -0
  117. package/dist/display/PairingList.d.ts +19 -0
  118. package/dist/display/PairingList.js +53 -0
  119. package/dist/display/PairingList.js.map +1 -0
  120. package/dist/display/PathList.d.ts +9 -0
  121. package/dist/display/PathList.js +21 -0
  122. package/dist/display/PathList.js.map +1 -0
  123. package/dist/display/PeoplePreview.d.ts +16 -0
  124. package/dist/display/PeoplePreview.js +41 -0
  125. package/dist/display/PeoplePreview.js.map +1 -0
  126. package/dist/display/PropertySheet.d.ts +56 -0
  127. package/dist/display/PropertySheet.js +150 -0
  128. package/dist/display/PropertySheet.js.map +1 -0
  129. package/dist/display/QrCode.d.ts +6 -0
  130. package/dist/display/QrCode.js +47 -0
  131. package/dist/display/QrCode.js.map +1 -0
  132. package/dist/display/RadioChoice.d.ts +9 -0
  133. package/dist/display/RadioChoice.js +28 -0
  134. package/dist/display/RadioChoice.js.map +1 -0
  135. package/dist/display/RatingLink.d.ts +10 -0
  136. package/dist/display/RatingLink.js +80 -0
  137. package/dist/display/RatingLink.js.map +1 -0
  138. package/dist/display/ResourceCard.d.ts +20 -0
  139. package/dist/display/ResourceCard.js +200 -0
  140. package/dist/display/ResourceCard.js.map +1 -0
  141. package/dist/display/RowList.d.ts +28 -0
  142. package/dist/display/RowList.js +76 -0
  143. package/dist/display/RowList.js.map +1 -0
  144. package/dist/display/StackedMeter.d.ts +28 -0
  145. package/dist/display/StackedMeter.js +48 -0
  146. package/dist/display/StackedMeter.js.map +1 -0
  147. package/dist/display/StatTile.d.ts +13 -0
  148. package/dist/display/StatTile.js +35 -0
  149. package/dist/display/StatTile.js.map +1 -0
  150. package/dist/display/StepList.d.ts +5 -0
  151. package/dist/display/StepList.js +12 -0
  152. package/dist/display/StepList.js.map +1 -0
  153. package/dist/display/TextPreview.d.ts +14 -0
  154. package/dist/display/TextPreview.js +46 -0
  155. package/dist/display/TextPreview.js.map +1 -0
  156. package/dist/display/TimeSeriesChart.d.ts +19 -0
  157. package/dist/display/TimeSeriesChart.js +163 -0
  158. package/dist/display/TimeSeriesChart.js.map +1 -0
  159. package/dist/display/ToneTile.js +12 -0
  160. package/dist/display/ToneTile.js.map +1 -0
  161. package/dist/display/index.d.ts +38 -0
  162. package/dist/feedback/Alert.d.ts +15 -0
  163. package/dist/feedback/Alert.js +19 -0
  164. package/dist/feedback/Alert.js.map +1 -0
  165. package/dist/feedback/AsyncState.d.ts +16 -0
  166. package/dist/feedback/AsyncState.js +29 -0
  167. package/dist/feedback/AsyncState.js.map +1 -0
  168. package/dist/feedback/ErrorNotification.d.ts +8 -0
  169. package/dist/feedback/ErrorNotification.js +20 -0
  170. package/dist/feedback/ErrorNotification.js.map +1 -0
  171. package/dist/feedback/Notifications.d.ts +2 -0
  172. package/dist/feedback/Notifications.js +9 -0
  173. package/dist/feedback/Notifications.js.map +1 -0
  174. package/dist/feedback/ProgressStatusRow.d.ts +23 -0
  175. package/dist/feedback/ProgressStatusRow.js +74 -0
  176. package/dist/feedback/ProgressStatusRow.js.map +1 -0
  177. package/dist/feedback/SkeletonLoader.d.ts +19 -0
  178. package/dist/feedback/SkeletonLoader.js +59 -0
  179. package/dist/feedback/SkeletonLoader.js.map +1 -0
  180. package/dist/feedback/StatusIndicator.d.ts +9 -0
  181. package/dist/feedback/StatusIndicator.js +28 -0
  182. package/dist/feedback/StatusIndicator.js.map +1 -0
  183. package/dist/feedback/StatusPopoverContent.d.ts +13 -0
  184. package/dist/feedback/StatusPopoverContent.js +50 -0
  185. package/dist/feedback/StatusPopoverContent.js.map +1 -0
  186. package/dist/feedback/StatusRow.d.ts +16 -0
  187. package/dist/feedback/StatusRow.js +60 -0
  188. package/dist/feedback/StatusRow.js.map +1 -0
  189. package/dist/feedback/index.d.ts +11 -0
  190. package/dist/feedback/index.js +11 -0
  191. package/dist/forms/Checkbox.d.ts +10 -0
  192. package/dist/forms/Checkbox.js +48 -0
  193. package/dist/forms/Checkbox.js.map +1 -0
  194. package/dist/forms/Field.d.ts +5 -0
  195. package/dist/forms/Field.js +15 -0
  196. package/dist/forms/Field.js.map +1 -0
  197. package/dist/forms/FormControlStyles.js +14 -0
  198. package/dist/forms/FormControlStyles.js.map +1 -0
  199. package/dist/forms/FormSection.d.ts +48 -0
  200. package/dist/forms/FormSection.js +142 -0
  201. package/dist/forms/FormSection.js.map +1 -0
  202. package/dist/forms/InlineFields.d.ts +13 -0
  203. package/dist/forms/InlineFields.js +24 -0
  204. package/dist/forms/InlineFields.js.map +1 -0
  205. package/dist/forms/Input.d.ts +5 -0
  206. package/dist/forms/Input.js +18 -0
  207. package/dist/forms/Input.js.map +1 -0
  208. package/dist/forms/OptionSelect.d.ts +21 -0
  209. package/dist/forms/OptionSelect.js +28 -0
  210. package/dist/forms/OptionSelect.js.map +1 -0
  211. package/dist/forms/RadioGroup.d.ts +5 -0
  212. package/dist/forms/RadioGroup.js +35 -0
  213. package/dist/forms/RadioGroup.js.map +1 -0
  214. package/dist/forms/Select.d.ts +6 -0
  215. package/dist/forms/Select.js +36 -0
  216. package/dist/forms/Select.js.map +1 -0
  217. package/dist/forms/Switch.d.ts +4 -0
  218. package/dist/forms/Switch.js +16 -0
  219. package/dist/forms/Switch.js.map +1 -0
  220. package/dist/forms/TagInput.d.ts +19 -0
  221. package/dist/forms/TagInput.js +60 -0
  222. package/dist/forms/TagInput.js.map +1 -0
  223. package/dist/forms/Textarea.d.ts +4 -0
  224. package/dist/forms/Textarea.js +15 -0
  225. package/dist/forms/Textarea.js.map +1 -0
  226. package/dist/forms/index.d.ts +12 -0
  227. package/dist/foundations/DesignSystemProvider.d.ts +64 -0
  228. package/dist/foundations/DesignSystemProvider.js +66 -0
  229. package/dist/foundations/DesignSystemProvider.js.map +1 -0
  230. package/dist/foundations/KeyboardFocus.d.ts +9 -0
  231. package/dist/foundations/KeyboardFocus.js +10 -0
  232. package/dist/foundations/KeyboardFocus.js.map +1 -0
  233. package/dist/foundations/KeyboardShortcut.d.ts +5 -0
  234. package/dist/foundations/KeyboardShortcut.js +10 -0
  235. package/dist/foundations/KeyboardShortcut.js.map +1 -0
  236. package/dist/foundations/Theme.d.ts +14 -0
  237. package/dist/foundations/Theme.js +56 -0
  238. package/dist/foundations/Theme.js.map +1 -0
  239. package/dist/foundations/index.d.ts +5 -0
  240. package/dist/icons/BrandIcons.d.ts +3 -0
  241. package/dist/icons/BrandIcons.js +14 -0
  242. package/dist/icons/BrandIcons.js.map +1 -0
  243. package/dist/icons/index.d.ts +3 -0
  244. package/dist/icons/index.js +2 -0
  245. package/dist/icons.d.ts +4 -0
  246. package/dist/icons.js +2 -0
  247. package/dist/index.d.ts +133 -0
  248. package/dist/index.js +125 -0
  249. package/dist/layout/AppShell.d.ts +11 -0
  250. package/dist/layout/AppShell.js +46 -0
  251. package/dist/layout/AppShell.js.map +1 -0
  252. package/dist/layout/AuthLayout.d.ts +11 -0
  253. package/dist/layout/AuthLayout.js +48 -0
  254. package/dist/layout/AuthLayout.js.map +1 -0
  255. package/dist/layout/ContentContainer.d.ts +9 -0
  256. package/dist/layout/ContentContainer.js +15 -0
  257. package/dist/layout/ContentContainer.js.map +1 -0
  258. package/dist/layout/Flow.d.ts +26 -0
  259. package/dist/layout/Flow.js +65 -0
  260. package/dist/layout/Flow.js.map +1 -0
  261. package/dist/layout/PageLayout.d.ts +12 -0
  262. package/dist/layout/PageLayout.js +31 -0
  263. package/dist/layout/PageLayout.js.map +1 -0
  264. package/dist/layout/PageSection.d.ts +43 -0
  265. package/dist/layout/PageSection.js +63 -0
  266. package/dist/layout/PageSection.js.map +1 -0
  267. package/dist/layout/ScrollArea.d.ts +4 -0
  268. package/dist/layout/ScrollArea.js +11 -0
  269. package/dist/layout/ScrollArea.js.map +1 -0
  270. package/dist/layout/Section.d.ts +12 -0
  271. package/dist/layout/Section.js +36 -0
  272. package/dist/layout/Section.js.map +1 -0
  273. package/dist/layout/Site.d.ts +41 -0
  274. package/dist/layout/Site.js +157 -0
  275. package/dist/layout/Site.js.map +1 -0
  276. package/dist/layout/TitleBar.d.ts +28 -0
  277. package/dist/layout/TitleBar.js +83 -0
  278. package/dist/layout/TitleBar.js.map +1 -0
  279. package/dist/layout/WorkspaceActionsHeader.d.ts +8 -0
  280. package/dist/layout/WorkspaceActionsHeader.js +18 -0
  281. package/dist/layout/WorkspaceActionsHeader.js.map +1 -0
  282. package/dist/layout/index.d.ts +19 -0
  283. package/dist/layout/index.js +19 -0
  284. package/dist/layout/sidebar/SidebarNavigationItem.d.ts +10 -0
  285. package/dist/layout/sidebar/SidebarNavigationItem.js +36 -0
  286. package/dist/layout/sidebar/SidebarNavigationItem.js.map +1 -0
  287. package/dist/layout/sidebar/SidebarPane.d.ts +13 -0
  288. package/dist/layout/sidebar/SidebarPane.js +30 -0
  289. package/dist/layout/sidebar/SidebarPane.js.map +1 -0
  290. package/dist/layout/toolbar/CommandPaletteTrigger.d.ts +11 -0
  291. package/dist/layout/toolbar/CommandPaletteTrigger.js +46 -0
  292. package/dist/layout/toolbar/CommandPaletteTrigger.js.map +1 -0
  293. package/dist/layout/toolbar/ToolbarStatusGroup.d.ts +5 -0
  294. package/dist/layout/toolbar/ToolbarStatusGroup.js +14 -0
  295. package/dist/layout/toolbar/ToolbarStatusGroup.js.map +1 -0
  296. package/dist/layout/toolbar/ToolbarStatusItem.d.ts +9 -0
  297. package/dist/layout/toolbar/ToolbarStatusItem.js +18 -0
  298. package/dist/layout/toolbar/ToolbarStatusItem.js.map +1 -0
  299. package/dist/navigation/ArtworkTabs.d.ts +18 -0
  300. package/dist/navigation/ArtworkTabs.js +72 -0
  301. package/dist/navigation/ArtworkTabs.js.map +1 -0
  302. package/dist/navigation/Breadcrumbs.d.ts +13 -0
  303. package/dist/navigation/Breadcrumbs.js +32 -0
  304. package/dist/navigation/Breadcrumbs.js.map +1 -0
  305. package/dist/navigation/CollectionBrowseSelector.d.ts +22 -0
  306. package/dist/navigation/CollectionBrowseSelector.js +70 -0
  307. package/dist/navigation/CollectionBrowseSelector.js.map +1 -0
  308. package/dist/navigation/CollectionViewToggle.d.ts +12 -0
  309. package/dist/navigation/CollectionViewToggle.js +36 -0
  310. package/dist/navigation/CollectionViewToggle.js.map +1 -0
  311. package/dist/navigation/DrilldownBrowseSelector.d.ts +31 -0
  312. package/dist/navigation/DrilldownBrowseSelector.js +174 -0
  313. package/dist/navigation/DrilldownBrowseSelector.js.map +1 -0
  314. package/dist/navigation/FolderSelector.d.ts +24 -0
  315. package/dist/navigation/FolderSelector.js +142 -0
  316. package/dist/navigation/FolderSelector.js.map +1 -0
  317. package/dist/navigation/TabKeys.js +13 -0
  318. package/dist/navigation/TabKeys.js.map +1 -0
  319. package/dist/navigation/ViewTabs.d.ts +19 -0
  320. package/dist/navigation/ViewTabs.js +48 -0
  321. package/dist/navigation/ViewTabs.js.map +1 -0
  322. package/dist/navigation/index.d.ts +8 -0
  323. package/dist/overlays/ActionModal.d.ts +21 -0
  324. package/dist/overlays/ActionModal.js +48 -0
  325. package/dist/overlays/ActionModal.js.map +1 -0
  326. package/dist/overlays/CommandPalette.d.ts +43 -0
  327. package/dist/overlays/CommandPalette.js +163 -0
  328. package/dist/overlays/CommandPalette.js.map +1 -0
  329. package/dist/overlays/Drawer.d.ts +19 -0
  330. package/dist/overlays/Drawer.js +83 -0
  331. package/dist/overlays/Drawer.js.map +1 -0
  332. package/dist/overlays/DropdownMenu.d.ts +47 -0
  333. package/dist/overlays/DropdownMenu.js +58 -0
  334. package/dist/overlays/DropdownMenu.js.map +1 -0
  335. package/dist/overlays/ImageViewer.d.ts +21 -0
  336. package/dist/overlays/ImageViewer.js +82 -0
  337. package/dist/overlays/ImageViewer.js.map +1 -0
  338. package/dist/overlays/Modal.d.ts +36 -0
  339. package/dist/overlays/Modal.js +149 -0
  340. package/dist/overlays/Modal.js.map +1 -0
  341. package/dist/overlays/Popover.d.ts +19 -0
  342. package/dist/overlays/Popover.js +26 -0
  343. package/dist/overlays/Popover.js.map +1 -0
  344. package/dist/overlays/Tooltip.d.ts +12 -0
  345. package/dist/overlays/Tooltip.js +54 -0
  346. package/dist/overlays/Tooltip.js.map +1 -0
  347. package/dist/overlays/index.d.ts +9 -0
  348. package/dist/overlays/useModalAutoFocus.js +84 -0
  349. package/dist/overlays/useModalAutoFocus.js.map +1 -0
  350. package/dist/overlays/useScrollFade.js +43 -0
  351. package/dist/overlays/useScrollFade.js.map +1 -0
  352. package/dist/showcase/CallToAction.d.ts +11 -0
  353. package/dist/showcase/CallToAction.js +54 -0
  354. package/dist/showcase/CallToAction.js.map +1 -0
  355. package/dist/showcase/Cards.d.ts +34 -0
  356. package/dist/showcase/Cards.js +122 -0
  357. package/dist/showcase/Cards.js.map +1 -0
  358. package/dist/showcase/Devices.d.ts +72 -0
  359. package/dist/showcase/Devices.js +249 -0
  360. package/dist/showcase/Devices.js.map +1 -0
  361. package/dist/showcase/FeatureRow.d.ts +30 -0
  362. package/dist/showcase/FeatureRow.js +91 -0
  363. package/dist/showcase/FeatureRow.js.map +1 -0
  364. package/dist/showcase/Hero.d.ts +15 -0
  365. package/dist/showcase/Hero.js +73 -0
  366. package/dist/showcase/Hero.js.map +1 -0
  367. package/dist/showcase/PhotoSearchConcept.d.ts +14 -0
  368. package/dist/showcase/PhotoSearchConcept.js +43 -0
  369. package/dist/showcase/PhotoSearchConcept.js.map +1 -0
  370. package/dist/showcase/Platforms.d.ts +15 -0
  371. package/dist/showcase/Platforms.js +48 -0
  372. package/dist/showcase/Platforms.js.map +1 -0
  373. package/dist/showcase/ProductBand.d.ts +38 -0
  374. package/dist/showcase/ProductBand.js +120 -0
  375. package/dist/showcase/ProductBand.js.map +1 -0
  376. package/dist/showcase/Roadmap.d.ts +21 -0
  377. package/dist/showcase/Roadmap.js +111 -0
  378. package/dist/showcase/Roadmap.js.map +1 -0
  379. package/dist/showcase/RouteDiagram.d.ts +14 -0
  380. package/dist/showcase/RouteDiagram.js +57 -0
  381. package/dist/showcase/RouteDiagram.js.map +1 -0
  382. package/dist/showcase/ServerUnit.d.ts +50 -0
  383. package/dist/showcase/ServerUnit.js +175 -0
  384. package/dist/showcase/ServerUnit.js.map +1 -0
  385. package/dist/showcase/Stage.d.ts +46 -0
  386. package/dist/showcase/Stage.js +106 -0
  387. package/dist/showcase/Stage.js.map +1 -0
  388. package/dist/showcase/Status.d.ts +30 -0
  389. package/dist/showcase/Status.js +84 -0
  390. package/dist/showcase/Status.js.map +1 -0
  391. package/dist/showcase/StepFlow.d.ts +13 -0
  392. package/dist/showcase/StepFlow.js +47 -0
  393. package/dist/showcase/StepFlow.js.map +1 -0
  394. package/dist/showcase/index.d.ts +15 -0
  395. package/dist/testing.d.ts +5 -0
  396. package/dist/testing.js +43 -0
  397. package/dist/testing.js.map +1 -0
  398. package/dist/typography/Link.d.ts +21 -0
  399. package/dist/typography/Link.js +60 -0
  400. package/dist/typography/Link.js.map +1 -0
  401. package/dist/typography/Typography.d.ts +53 -0
  402. package/dist/typography/Typography.js +67 -0
  403. package/dist/typography/Typography.js.map +1 -0
  404. package/dist/typography/index.d.ts +4 -0
  405. package/dist/typography/index.js +4 -0
  406. package/package.json +80 -3
  407. package/src/actions/Button.tsx +68 -0
  408. package/src/actions/ButtonLink.tsx +75 -0
  409. package/src/actions/IconButton.tsx +55 -0
  410. package/src/actions/ThemeSwitch.tsx +46 -0
  411. package/src/actions/index.ts +4 -0
  412. package/src/collections/CollectionSectionHeader.tsx +13 -0
  413. package/src/collections/CollectionState.tsx +76 -0
  414. package/src/collections/CollectionTokens.ts +12 -0
  415. package/src/collections/CollectionViewport.ts +40 -0
  416. package/src/collections/DataRow.tsx +79 -0
  417. package/src/collections/ResultList.tsx +164 -0
  418. package/src/collections/ScrollRow.tsx +90 -0
  419. package/src/collections/VirtualGrid.tsx +92 -0
  420. package/src/collections/VirtualList.tsx +224 -0
  421. package/src/collections/index.ts +10 -0
  422. package/src/collections/useCollectionMotion.ts +42 -0
  423. package/src/collections/useScrollRow.ts +64 -0
  424. package/src/display/ActivityCard.tsx +76 -0
  425. package/src/display/Artwork.tsx +140 -0
  426. package/src/display/Avatar.tsx +7 -0
  427. package/src/display/Badge.tsx +33 -0
  428. package/src/display/BadgeList.tsx +25 -0
  429. package/src/display/BrandMark.tsx +72 -0
  430. package/src/display/ChangeList.tsx +41 -0
  431. package/src/display/CheckList.tsx +27 -0
  432. package/src/display/CodeBlock.tsx +12 -0
  433. package/src/display/CopyButton.tsx +77 -0
  434. package/src/display/DataTable.tsx +80 -0
  435. package/src/display/DetailHero.tsx +191 -0
  436. package/src/display/DetailList.tsx +74 -0
  437. package/src/display/DeviceCard.tsx +49 -0
  438. package/src/display/Identity.tsx +56 -0
  439. package/src/display/ImageCard.tsx +102 -0
  440. package/src/display/ImagePicker.tsx +149 -0
  441. package/src/display/InfoBox.tsx +48 -0
  442. package/src/display/InsetPanel.tsx +37 -0
  443. package/src/display/ItemAction.tsx +53 -0
  444. package/src/display/Kbd.tsx +6 -0
  445. package/src/display/KindIcon.tsx +15 -0
  446. package/src/display/NoticeCard.tsx +77 -0
  447. package/src/display/PairingList.tsx +55 -0
  448. package/src/display/PathList.tsx +16 -0
  449. package/src/display/PeoplePreview.tsx +66 -0
  450. package/src/display/PropertySheet.tsx +180 -0
  451. package/src/display/QrCode.tsx +47 -0
  452. package/src/display/RadioChoice.tsx +34 -0
  453. package/src/display/RatingLink.tsx +76 -0
  454. package/src/display/ResourceCard.tsx +201 -0
  455. package/src/display/RowList.tsx +110 -0
  456. package/src/display/StackedMeter.tsx +72 -0
  457. package/src/display/StatTile.tsx +39 -0
  458. package/src/display/StepList.tsx +10 -0
  459. package/src/display/TextPreview.tsx +66 -0
  460. package/src/display/TimeSeriesChart.tsx +191 -0
  461. package/src/display/ToneTile.ts +10 -0
  462. package/src/display/index.ts +37 -0
  463. package/src/feedback/Alert.tsx +35 -0
  464. package/src/feedback/AsyncState.tsx +56 -0
  465. package/src/feedback/ErrorNotification.ts +24 -0
  466. package/src/feedback/Notifications.tsx +5 -0
  467. package/src/feedback/ProgressStatusRow.tsx +104 -0
  468. package/src/feedback/SkeletonLoader.tsx +88 -0
  469. package/src/feedback/StatusIndicator.tsx +28 -0
  470. package/src/feedback/StatusPopoverContent.tsx +54 -0
  471. package/src/feedback/StatusRow.tsx +70 -0
  472. package/src/feedback/index.ts +15 -0
  473. package/src/forms/Checkbox.tsx +61 -0
  474. package/src/forms/Field.tsx +17 -0
  475. package/src/forms/FormControlStyles.ts +9 -0
  476. package/src/forms/FormSection.tsx +175 -0
  477. package/src/forms/InlineFields.tsx +22 -0
  478. package/src/forms/Input.tsx +22 -0
  479. package/src/forms/OptionSelect.tsx +49 -0
  480. package/src/forms/RadioGroup.tsx +48 -0
  481. package/src/forms/Select.tsx +46 -0
  482. package/src/forms/Switch.tsx +10 -0
  483. package/src/forms/TagInput.tsx +76 -0
  484. package/src/forms/Textarea.tsx +14 -0
  485. package/src/forms/index.ts +11 -0
  486. package/src/foundations/DesignSystemProvider.tsx +79 -0
  487. package/src/foundations/KeyboardFocus.ts +6 -0
  488. package/src/foundations/KeyboardShortcut.ts +12 -0
  489. package/src/foundations/Theme.ts +75 -0
  490. package/src/foundations/index.ts +10 -0
  491. package/src/foundations/theme.css +425 -0
  492. package/src/icons/BrandIcons.tsx +8 -0
  493. package/src/icons/index.ts +4 -0
  494. package/src/icons.ts +1 -0
  495. package/src/index.ts +13 -0
  496. package/src/layout/AppShell.tsx +63 -0
  497. package/src/layout/AuthLayout.tsx +40 -0
  498. package/src/layout/ContentContainer.tsx +16 -0
  499. package/src/layout/Flow.tsx +56 -0
  500. package/src/layout/PageLayout.tsx +35 -0
  501. package/src/layout/PageSection.tsx +103 -0
  502. package/src/layout/ScrollArea.tsx +7 -0
  503. package/src/layout/Section.tsx +36 -0
  504. package/src/layout/Site.tsx +205 -0
  505. package/src/layout/TitleBar.tsx +97 -0
  506. package/src/layout/WorkspaceActionsHeader.tsx +17 -0
  507. package/src/layout/index.ts +18 -0
  508. package/src/layout/sidebar/SidebarNavigationItem.tsx +45 -0
  509. package/src/layout/sidebar/SidebarPane.tsx +37 -0
  510. package/src/layout/toolbar/CommandPaletteTrigger.tsx +53 -0
  511. package/src/layout/toolbar/ToolbarStatusGroup.tsx +9 -0
  512. package/src/layout/toolbar/ToolbarStatusItem.tsx +18 -0
  513. package/src/navigation/ArtworkTabs.tsx +107 -0
  514. package/src/navigation/Breadcrumbs.tsx +31 -0
  515. package/src/navigation/CollectionBrowseSelector.tsx +90 -0
  516. package/src/navigation/CollectionViewToggle.tsx +52 -0
  517. package/src/navigation/DrilldownBrowseSelector.tsx +229 -0
  518. package/src/navigation/FolderSelector.tsx +172 -0
  519. package/src/navigation/TabKeys.ts +21 -0
  520. package/src/navigation/ViewTabs.tsx +85 -0
  521. package/src/navigation/index.ts +15 -0
  522. package/src/overlays/ActionModal.tsx +81 -0
  523. package/src/overlays/CommandPalette.tsx +199 -0
  524. package/src/overlays/Drawer.tsx +107 -0
  525. package/src/overlays/DropdownMenu.tsx +122 -0
  526. package/src/overlays/ImageViewer.tsx +96 -0
  527. package/src/overlays/Modal.tsx +234 -0
  528. package/src/overlays/Popover.tsx +40 -0
  529. package/src/overlays/Tooltip.tsx +56 -0
  530. package/src/overlays/index.ts +8 -0
  531. package/src/overlays/useModalAutoFocus.ts +119 -0
  532. package/src/overlays/useScrollFade.ts +49 -0
  533. package/src/showcase/CallToAction.tsx +46 -0
  534. package/src/showcase/Cards.tsx +133 -0
  535. package/src/showcase/Devices.tsx +259 -0
  536. package/src/showcase/FeatureRow.tsx +107 -0
  537. package/src/showcase/Hero.tsx +70 -0
  538. package/src/showcase/PhotoSearchConcept.tsx +50 -0
  539. package/src/showcase/Platforms.tsx +49 -0
  540. package/src/showcase/ProductBand.tsx +148 -0
  541. package/src/showcase/Roadmap.tsx +115 -0
  542. package/src/showcase/RouteDiagram.tsx +56 -0
  543. package/src/showcase/ServerUnit.tsx +191 -0
  544. package/src/showcase/Stage.tsx +160 -0
  545. package/src/showcase/Status.tsx +107 -0
  546. package/src/showcase/StepFlow.tsx +48 -0
  547. package/src/showcase/devices.css +441 -0
  548. package/src/showcase/index.ts +34 -0
  549. package/src/showcase/server-unit.css +258 -0
  550. package/src/showcase/stage.css +175 -0
  551. package/src/styles.css +5 -0
  552. package/src/testing.ts +34 -0
  553. package/src/typography/Link.tsx +105 -0
  554. package/src/typography/Typography.tsx +113 -0
  555. package/src/typography/index.ts +3 -0
@@ -0,0 +1,24 @@
1
+ import { StatusTone } from "../feedback/StatusIndicator.js";
2
+ import { ReactNode } from "react";
3
+ interface NoticeCardProps {
4
+ /** Buttons for what can be done, primary first. */
5
+ actions?: ReactNode;
6
+ /** A short status such as a severity, beside the title. */
7
+ badge?: ReactNode;
8
+ children?: ReactNode;
9
+ description: ReactNode;
10
+ /** Quiet content under the actions, such as a disclosure of technical details. */
11
+ footer?: ReactNode;
12
+ icon: ReactNode;
13
+ /** The title's heading level; one below the section the card sits in. */
14
+ level?: 'h2' | 'h3' | 'h4';
15
+ title: string;
16
+ tone: StatusTone;
17
+ }
18
+ /**
19
+ * A persistent, substantial item that needs examination or a decision, with optional details and
20
+ * actions. Use Alert for current status, InfoBox for optional guidance, and InsetPanel for grouping.
21
+ */
22
+ export declare function NoticeCard({ actions, badge, children, description, footer, icon, level, title, tone }: NoticeCardProps): import("react").JSX.Element;
23
+ export {};
24
+ //# sourceMappingURL=NoticeCard.d.ts.map
@@ -0,0 +1,59 @@
1
+ import { Heading, Text } from "../typography/Typography.js";
2
+ import { toneTileClasses } from "./ToneTile.js";
3
+ import { useId } from "react";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ // src/display/NoticeCard.tsx
6
+ const accentClasses = {
7
+ neutral: "border-l-base-300",
8
+ success: "border-l-success",
9
+ warning: "border-l-warning",
10
+ danger: "border-l-danger",
11
+ info: "border-l-info"
12
+ };
13
+ /**
14
+ * A persistent, substantial item that needs examination or a decision, with optional details and
15
+ * actions. Use Alert for current status, InfoBox for optional guidance, and InsetPanel for grouping.
16
+ */
17
+ function NoticeCard({ actions, badge, children, description, footer, icon, level = "h2", title, tone }) {
18
+ const id = useId();
19
+ return /* @__PURE__ */ jsx("article", {
20
+ "aria-labelledby": id,
21
+ className: `border-base-300 bg-base-100 rounded-lg border border-l-4 p-4 sm:p-5 ${accentClasses[tone]}`,
22
+ children: /* @__PURE__ */ jsxs("div", {
23
+ className: "flex min-w-0 gap-3 sm:gap-4",
24
+ children: [/* @__PURE__ */ jsx("span", {
25
+ "aria-hidden": "true",
26
+ className: `flex size-9 shrink-0 items-center justify-center rounded-lg [&>svg]:size-5 ${toneTileClasses[tone]}`,
27
+ children: icon
28
+ }), /* @__PURE__ */ jsxs("div", {
29
+ className: "flex min-w-0 flex-1 flex-col gap-3",
30
+ children: [
31
+ /* @__PURE__ */ jsxs("div", {
32
+ className: "flex min-w-0 flex-col gap-1",
33
+ children: [/* @__PURE__ */ jsxs("div", {
34
+ className: "flex min-w-0 flex-wrap items-center justify-between gap-2",
35
+ children: [/* @__PURE__ */ jsx(Heading, {
36
+ id,
37
+ as: level,
38
+ variant: "title",
39
+ children: title
40
+ }), badge]
41
+ }), /* @__PURE__ */ jsx(Text, {
42
+ tone: "muted",
43
+ children: description
44
+ })]
45
+ }),
46
+ children,
47
+ actions ? /* @__PURE__ */ jsx("div", {
48
+ className: "flex flex-wrap items-center gap-2",
49
+ children: actions
50
+ }) : null,
51
+ footer
52
+ ]
53
+ })]
54
+ })
55
+ });
56
+ }
57
+ export { NoticeCard };
58
+
59
+ //# sourceMappingURL=NoticeCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NoticeCard.js","names":[],"sources":["../../src/display/NoticeCard.tsx"],"sourcesContent":["import { type ReactNode, useId } from 'react';\n\nimport type { StatusTone } from '../feedback/StatusIndicator';\nimport { Heading, Text } from '../typography/Typography';\nimport { toneTileClasses } from './ToneTile';\n\nconst accentClasses: Record<StatusTone, string> = {\n neutral: 'border-l-base-300',\n success: 'border-l-success',\n warning: 'border-l-warning',\n danger: 'border-l-danger',\n info: 'border-l-info',\n};\n\ninterface NoticeCardProps {\n /** Buttons for what can be done, primary first. */\n actions?: ReactNode;\n /** A short status such as a severity, beside the title. */\n badge?: ReactNode;\n children?: ReactNode;\n description: ReactNode;\n /** Quiet content under the actions, such as a disclosure of technical details. */\n footer?: ReactNode;\n icon: ReactNode;\n /** The title's heading level; one below the section the card sits in. */\n level?: 'h2' | 'h3' | 'h4';\n title: string;\n tone: StatusTone;\n}\n\n/**\n * A persistent, substantial item that needs examination or a decision, with optional details and\n * actions. Use Alert for current status, InfoBox for optional guidance, and InsetPanel for grouping.\n */\nexport function NoticeCard({\n actions,\n badge,\n children,\n description,\n footer,\n icon,\n level = 'h2',\n title,\n tone,\n}: NoticeCardProps) {\n const id = useId();\n\n return (\n <article\n aria-labelledby={id}\n className={`border-base-300 bg-base-100 rounded-lg border border-l-4 p-4 sm:p-5 ${accentClasses[tone]}`}\n >\n <div className=\"flex min-w-0 gap-3 sm:gap-4\">\n <span\n aria-hidden=\"true\"\n className={`flex size-9 shrink-0 items-center justify-center rounded-lg [&>svg]:size-5 ${toneTileClasses[tone]}`}\n >\n {icon}\n </span>\n <div className=\"flex min-w-0 flex-1 flex-col gap-3\">\n <div className=\"flex min-w-0 flex-col gap-1\">\n <div className=\"flex min-w-0 flex-wrap items-center justify-between gap-2\">\n <Heading id={id} as={level} variant=\"title\">\n {title}\n </Heading>\n {badge}\n </div>\n <Text tone=\"muted\">{description}</Text>\n </div>\n {children}\n {actions ? <div className=\"flex flex-wrap items-center gap-2\">{actions}</div> : null}\n {footer}\n </div>\n </div>\n </article>\n );\n}\n"],"mappings":";;;;;AAMA,MAAM,gBAA4C;CAC9C,SAAS;CACT,SAAS;CACT,SAAS;CACT,QAAQ;CACR,MAAM;AACV;;;;;AAsBA,SAAgB,WAAW,EACvB,SACA,OACA,UACA,aACA,QACA,MACA,QAAQ,MACR,OACA,QACgB;CAChB,MAAM,KAAK,MAAM;CAEjB,OACI,oBAAC,WAAD;EACI,mBAAiB;EACjB,WAAW,uEAAuE,cAAc;EAEhG,UAAA,qBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACI,oBAAC,QAAD;IACI,eAAY;IACZ,WAAW,8EAA8E,gBAAgB;IAExG,UAAA;GACC,CAAA,GACN,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACI,qBAAC,OAAD;MAAK,WAAU;MAAf,UAAA,CACI,qBAAC,OAAD;OAAK,WAAU;OAAf,UAAA,CACI,oBAAC,SAAD;QAAa;QAAI,IAAI;QAAO,SAAQ;QAC/B,UAAA;OACI,CAAA,GACR,KACA;MACL,CAAA,GAAA,oBAAC,MAAD;OAAM,MAAK;OAAS,UAAA;MAAkB,CAAA,CACrC;;KACJ;KACA,UAAU,oBAAC,OAAD;MAAK,WAAU;MAAqC,UAAA;KAAa,CAAA,IAAI;KAC/E;IACA;GACJ,CAAA,CAAA;;CACA,CAAA;AAEjB"}
@@ -0,0 +1,19 @@
1
+ import { ReactNode } from "react";
2
+ export interface PairingListItem {
3
+ key: string;
4
+ /** Short ordinal such as `1` or `2-05`. */
5
+ position: string;
6
+ title: string;
7
+ /** A secondary fact aligned in its own column, such as a duration. */
8
+ detail?: string;
9
+ /** One line under the title; `warning` draws attention to a doubt. */
10
+ note?: string;
11
+ noteTone?: 'muted' | 'warning';
12
+ control: ReactNode;
13
+ }
14
+ /** Rows that pair a numbered item with a chosen counterpart, such as release tracks and files. */
15
+ export declare function PairingList({ items, label }: {
16
+ items: readonly PairingListItem[];
17
+ label: string;
18
+ }): import("react").JSX.Element;
19
+ //# sourceMappingURL=PairingList.d.ts.map
@@ -0,0 +1,53 @@
1
+ import { Text } from "../typography/Typography.js";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ // src/display/PairingList.tsx
4
+ /** Rows that pair a numbered item with a chosen counterpart, such as release tracks and files. */
5
+ function PairingList({ items, label }) {
6
+ return /* @__PURE__ */ jsx("ul", {
7
+ "aria-label": label,
8
+ className: "divide-base-300 border-base-300 bg-base-100 divide-y rounded-lg border",
9
+ children: items.map((item) => /* @__PURE__ */ jsxs("li", {
10
+ className: "grid min-w-0 grid-cols-[2.5rem_minmax(0,1fr)_auto] items-center gap-x-3 gap-y-2 px-3 py-2.5 sm:grid-cols-[2.5rem_minmax(0,1fr)_3.5rem_minmax(0,20rem)] sm:px-4",
11
+ children: [
12
+ /* @__PURE__ */ jsx(Text, {
13
+ as: "span",
14
+ tone: "muted",
15
+ className: "tabular-nums",
16
+ children: item.position
17
+ }),
18
+ /* @__PURE__ */ jsxs("span", {
19
+ className: "min-w-0",
20
+ children: [/* @__PURE__ */ jsx(Text, {
21
+ as: "span",
22
+ className: "block",
23
+ truncate: true,
24
+ title: item.title,
25
+ variant: "label",
26
+ children: item.title
27
+ }), item.note ? /* @__PURE__ */ jsx(Text, {
28
+ as: "span",
29
+ className: "block",
30
+ truncate: true,
31
+ title: item.note,
32
+ variant: "caption",
33
+ tone: item.noteTone === "warning" ? "warning" : "muted",
34
+ children: item.note
35
+ }) : null]
36
+ }),
37
+ /* @__PURE__ */ jsx(Text, {
38
+ as: "span",
39
+ tone: "muted",
40
+ className: "text-right tabular-nums",
41
+ children: item.detail ?? ""
42
+ }),
43
+ /* @__PURE__ */ jsx("span", {
44
+ className: "col-span-3 min-w-0 sm:col-span-1",
45
+ children: item.control
46
+ })
47
+ ]
48
+ }, item.key))
49
+ });
50
+ }
51
+ export { PairingList };
52
+
53
+ //# sourceMappingURL=PairingList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PairingList.js","names":[],"sources":["../../src/display/PairingList.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { Text } from '../typography/Typography';\n\nexport interface PairingListItem {\n key: string;\n /** Short ordinal such as `1` or `2-05`. */\n position: string;\n title: string;\n /** A secondary fact aligned in its own column, such as a duration. */\n detail?: string;\n /** One line under the title; `warning` draws attention to a doubt. */\n note?: string;\n noteTone?: 'muted' | 'warning';\n control: ReactNode;\n}\n\n/** Rows that pair a numbered item with a chosen counterpart, such as release tracks and files. */\nexport function PairingList({ items, label }: { items: readonly PairingListItem[]; label: string }) {\n return (\n <ul aria-label={label} className=\"divide-base-300 border-base-300 bg-base-100 divide-y rounded-lg border\">\n {items.map((item) => (\n <li\n key={item.key}\n className=\"grid min-w-0 grid-cols-[2.5rem_minmax(0,1fr)_auto] items-center gap-x-3 gap-y-2 px-3 py-2.5 sm:grid-cols-[2.5rem_minmax(0,1fr)_3.5rem_minmax(0,20rem)] sm:px-4\"\n >\n <Text as=\"span\" tone=\"muted\" className=\"tabular-nums\">\n {item.position}\n </Text>\n <span className=\"min-w-0\">\n <Text as=\"span\" className=\"block\" truncate title={item.title} variant=\"label\">\n {item.title}\n </Text>\n {item.note ? (\n <Text\n as=\"span\"\n className=\"block\"\n truncate\n title={item.note}\n variant=\"caption\"\n tone={item.noteTone === 'warning' ? 'warning' : 'muted'}\n >\n {item.note}\n </Text>\n ) : null}\n </span>\n <Text as=\"span\" tone=\"muted\" className=\"text-right tabular-nums\">\n {item.detail ?? ''}\n </Text>\n <span className=\"col-span-3 min-w-0 sm:col-span-1\">{item.control}</span>\n </li>\n ))}\n </ul>\n );\n}\n"],"mappings":";;;;AAkBA,SAAgB,YAAY,EAAE,OAAO,SAA+D;CAChG,OACI,oBAAC,MAAD;EAAI,cAAY;EAAO,WAAU;EAC5B,UAAA,MAAM,KAAK,SACR,qBAAC,MAAD;GAEI,WAAU;GAFd,UAAA;IAII,oBAAC,MAAD;KAAM,IAAG;KAAO,MAAK;KAAQ,WAAU;KAClC,UAAA,KAAK;IACJ,CAAA;IACN,qBAAC,QAAD;KAAM,WAAU;KAAhB,UAAA,CACI,oBAAC,MAAD;MAAM,IAAG;MAAO,WAAU;MAAQ,UAAA;MAAS,OAAO,KAAK;MAAO,SAAQ;MACjE,UAAA,KAAK;KACJ,CAAA,GACL,KAAK,OACF,oBAAC,MAAD;MACI,IAAG;MACH,WAAU;MACV,UAAA;MACA,OAAO,KAAK;MACZ,SAAQ;MACR,MAAM,KAAK,aAAa,YAAY,YAAY;MAE/C,UAAA,KAAK;KACJ,CAAA,IACN,IACF;;IACN,oBAAC,MAAD;KAAM,IAAG;KAAO,MAAK;KAAQ,WAAU;KAClC,UAAA,KAAK,UAAU;IACd,CAAA;IACN,oBAAC,QAAD;KAAM,WAAU;KAAoC,UAAA,KAAK;IAAc,CAAA;GACvE;EA3BK,GAAA,KAAK,GA2BV,CACP;CACD,CAAA;AAEZ"}
@@ -0,0 +1,9 @@
1
+ /** File paths as truncated code, one per line. */
2
+ export declare function PathList({ label, paths }: {
3
+ label: string;
4
+ paths: readonly {
5
+ key: string;
6
+ path: string;
7
+ }[];
8
+ }): import("react").JSX.Element;
9
+ //# sourceMappingURL=PathList.d.ts.map
@@ -0,0 +1,21 @@
1
+ import { Code } from "@ninna-ui/primitives";
2
+ import { jsx } from "react/jsx-runtime";
3
+ // src/display/PathList.tsx
4
+ /** File paths as truncated code, one per line. */
5
+ function PathList({ label, paths }) {
6
+ return /* @__PURE__ */ jsx("ul", {
7
+ "aria-label": label,
8
+ className: "space-y-1",
9
+ children: paths.map(({ key, path }) => /* @__PURE__ */ jsx("li", {
10
+ className: "min-w-0",
11
+ children: /* @__PURE__ */ jsx(Code, {
12
+ title: path,
13
+ className: "block max-w-full truncate text-xs",
14
+ children: path
15
+ })
16
+ }, key))
17
+ });
18
+ }
19
+ export { PathList };
20
+
21
+ //# sourceMappingURL=PathList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PathList.js","names":[],"sources":["../../src/display/PathList.tsx"],"sourcesContent":["import { Code } from '@ninna-ui/primitives';\n\n/** File paths as truncated code, one per line. */\nexport function PathList({ label, paths }: { label: string; paths: readonly { key: string; path: string }[] }) {\n return (\n <ul aria-label={label} className=\"space-y-1\">\n {paths.map(({ key, path }) => (\n <li key={key} className=\"min-w-0\">\n <Code title={path} className=\"block max-w-full truncate text-xs\">\n {path}\n </Code>\n </li>\n ))}\n </ul>\n );\n}\n"],"mappings":";;;;AAGA,SAAgB,SAAS,EAAE,OAAO,SAA6E;CAC3G,OACI,oBAAC,MAAD;EAAI,cAAY;EAAO,WAAU;EAC5B,UAAA,MAAM,KAAK,EAAE,KAAK,WACf,oBAAC,MAAD;GAAc,WAAU;GACpB,UAAA,oBAAC,MAAD;IAAM,OAAO;IAAM,WAAU;IACxB,UAAA;GACC,CAAA;EACN,GAJK,GAIL,CACP;CACD,CAAA;AAEZ"}
@@ -0,0 +1,16 @@
1
+ import { ReactNode } from "react";
2
+ interface PeoplePreviewItem {
3
+ id: string;
4
+ name: string;
5
+ role: string;
6
+ artwork: ReactNode;
7
+ href?: string;
8
+ }
9
+ /** Render only the cards that fit in one row, including keyboard navigation. */
10
+ export declare function PeoplePreview({ label, items, onNavigate }: {
11
+ label: string;
12
+ items: readonly PeoplePreviewItem[];
13
+ onNavigate?: (href: string) => void;
14
+ }): import("react").JSX.Element;
15
+ export {};
16
+ //# sourceMappingURL=PeoplePreview.d.ts.map
@@ -0,0 +1,41 @@
1
+ import { ImageCard } from "./ImageCard.js";
2
+ import { useLayoutEffect, useRef, useState } from "react";
3
+ import { jsx } from "react/jsx-runtime";
4
+ // src/display/PeoplePreview.tsx
5
+ /** Render only the cards that fit in one row, including keyboard navigation. */
6
+ function PeoplePreview({ label, items, onNavigate }) {
7
+ const rowRef = useRef(null);
8
+ const [visibleCount, setVisibleCount] = useState();
9
+ useLayoutEffect(() => {
10
+ const row = rowRef.current;
11
+ if (!row) return;
12
+ const measure = () => {
13
+ const columns = getComputedStyle(row).gridTemplateColumns;
14
+ if (columns && !columns.includes("repeat(") && columns !== "none") setVisibleCount(columns.trim().split(/\s+/).length);
15
+ };
16
+ const observer = new ResizeObserver(measure);
17
+ measure();
18
+ observer.observe(row);
19
+ return () => observer.disconnect();
20
+ }, []);
21
+ return /* @__PURE__ */ jsx("ul", {
22
+ ref: rowRef,
23
+ "aria-label": label,
24
+ className: "grid min-w-0 grid-cols-[repeat(auto-fill,minmax(min(5.5rem,100%),1fr))] gap-x-3 gap-y-5",
25
+ children: items.slice(0, visibleCount).map((person) => /* @__PURE__ */ jsx("li", {
26
+ className: "min-w-0",
27
+ children: /* @__PURE__ */ jsx(ImageCard, {
28
+ presentation: "person",
29
+ title: person.name,
30
+ label: person.name,
31
+ subtitle: person.role,
32
+ artwork: person.artwork,
33
+ href: person.href,
34
+ onNavigate
35
+ })
36
+ }, person.id))
37
+ });
38
+ }
39
+ export { PeoplePreview };
40
+
41
+ //# sourceMappingURL=PeoplePreview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PeoplePreview.js","names":[],"sources":["../../src/display/PeoplePreview.tsx"],"sourcesContent":["import { type ReactNode, useLayoutEffect, useRef, useState } from 'react';\n\nimport { ImageCard } from './ImageCard';\n\ninterface PeoplePreviewItem {\n id: string;\n name: string;\n role: string;\n artwork: ReactNode;\n href?: string;\n}\n\n/** Render only the cards that fit in one row, including keyboard navigation. */\nexport function PeoplePreview({\n label,\n items,\n onNavigate,\n}: {\n label: string;\n items: readonly PeoplePreviewItem[];\n onNavigate?: (href: string) => void;\n}) {\n const rowRef = useRef<HTMLUListElement>(null);\n const [visibleCount, setVisibleCount] = useState<number>();\n\n useLayoutEffect(() => {\n const row = rowRef.current;\n\n if (!row) return;\n\n const measure = () => {\n const columns = getComputedStyle(row).gridTemplateColumns;\n\n if (columns && !columns.includes('repeat(') && columns !== 'none')\n setVisibleCount(columns.trim().split(/\\s+/).length);\n };\n const observer = new ResizeObserver(measure);\n\n measure();\n observer.observe(row);\n\n return () => observer.disconnect();\n }, []);\n\n return (\n <ul\n ref={rowRef}\n aria-label={label}\n className=\"grid min-w-0 grid-cols-[repeat(auto-fill,minmax(min(5.5rem,100%),1fr))] gap-x-3 gap-y-5\"\n >\n {items.slice(0, visibleCount).map((person) => (\n <li key={person.id} className=\"min-w-0\">\n <ImageCard\n presentation=\"person\"\n title={person.name}\n label={person.name}\n subtitle={person.role}\n artwork={person.artwork}\n href={person.href}\n onNavigate={onNavigate}\n />\n </li>\n ))}\n </ul>\n );\n}\n"],"mappings":";;;;;AAaA,SAAgB,cAAc,EAC1B,OACA,OACA,cAKD;CACC,MAAM,SAAS,OAAyB,IAAI;CAC5C,MAAM,CAAC,cAAc,mBAAmB,SAAiB;CAEzD,sBAAsB;EAClB,MAAM,MAAM,OAAO;EAEnB,IAAI,CAAC,KAAK;EAEV,MAAM,gBAAgB;GAClB,MAAM,UAAU,iBAAiB,GAAG,CAAC,CAAC;GAEtC,IAAI,WAAW,CAAC,QAAQ,SAAS,SAAS,KAAK,YAAY,QACvD,gBAAgB,QAAQ,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;EAC1D;EACA,MAAM,WAAW,IAAI,eAAe,OAAO;EAE3C,QAAQ;EACR,SAAS,QAAQ,GAAG;EAEpB,aAAa,SAAS,WAAW;CACrC,GAAG,CAAC,CAAC;CAEL,OACI,oBAAC,MAAD;EACI,KAAK;EACL,cAAY;EACZ,WAAU;EAET,UAAA,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,KAAK,WAC/B,oBAAC,MAAD;GAAoB,WAAU;GAC1B,UAAA,oBAAC,WAAD;IACI,cAAa;IACb,OAAO,OAAO;IACd,OAAO,OAAO;IACd,UAAU,OAAO;IACjB,SAAS,OAAO;IAChB,MAAM,OAAO;IACD;GACf,CAAA;EACD,GAVK,OAAO,EAUZ,CACP;CACD,CAAA;AAEZ"}
@@ -0,0 +1,56 @@
1
+ import { BadgeListItem } from "./BadgeList.js";
2
+ import { ReactNode } from "react";
3
+ type PropertySheetProps = {
4
+ title: string;
5
+ } & ({
6
+ children: ReactNode;
7
+ loading?: false;
8
+ loadingLabel?: never;
9
+ } | {
10
+ children?: never;
11
+ loading: true;
12
+ loadingLabel?: string;
13
+ });
14
+ /** A titled sheet of facts about one thing; the body is label/value rows, a row of tags, or a short note. */
15
+ declare function PropertySheetRoot({ children, loading, loadingLabel, title }: PropertySheetProps): import("react").JSX.Element;
16
+ interface PropertySheetRow {
17
+ label: string;
18
+ value: ReactNode;
19
+ }
20
+ type RowsProps = {
21
+ loading: true;
22
+ items?: never;
23
+ } | {
24
+ loading?: false;
25
+ items: readonly PropertySheetRow[];
26
+ };
27
+ declare function PropertySheetRows({ items, loading }: RowsProps): import("react").JSX.Element;
28
+ type PropertySheetTag = Omit<BadgeListItem, 'struck'>;
29
+ declare function PropertySheetTags({ items }: {
30
+ items: readonly PropertySheetTag[];
31
+ }): import("react").JSX.Element;
32
+ declare function PropertySheetNote({ children }: {
33
+ children: ReactNode;
34
+ }): import("react").JSX.Element;
35
+ declare function PropertySheetCollapsible({ children, title, summary }: {
36
+ children: ReactNode;
37
+ title: string;
38
+ summary?: string;
39
+ }): import("react").JSX.Element;
40
+ declare function PropertySheetTable({ label, columns, rows }: {
41
+ label: string;
42
+ columns: readonly string[];
43
+ rows: readonly {
44
+ key: string;
45
+ cells: readonly ReactNode[];
46
+ }[];
47
+ }): import("react").JSX.Element;
48
+ export declare const PropertySheet: typeof PropertySheetRoot & {
49
+ Collapsible: typeof PropertySheetCollapsible;
50
+ Note: typeof PropertySheetNote;
51
+ Rows: typeof PropertySheetRows;
52
+ Table: typeof PropertySheetTable;
53
+ Tags: typeof PropertySheetTags;
54
+ };
55
+ export type { PropertySheetRow, PropertySheetTag };
56
+ //# sourceMappingURL=PropertySheet.d.ts.map
@@ -0,0 +1,150 @@
1
+ import { SkeletonLoader } from "../feedback/SkeletonLoader.js";
2
+ import { Heading, Text } from "../typography/Typography.js";
3
+ import { BadgeList } from "./BadgeList.js";
4
+ import { InsetPanel } from "./InsetPanel.js";
5
+ import { useId } from "react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ import { ChevronDownIcon } from "lucide-react";
8
+ // src/display/PropertySheet.tsx
9
+ /** A titled sheet of facts about one thing; the body is label/value rows, a row of tags, or a short note. */
10
+ function PropertySheetRoot({ children, loading = false, loadingLabel, title }) {
11
+ const id = useId();
12
+ const content = /* @__PURE__ */ jsxs("section", {
13
+ "aria-labelledby": loading ? void 0 : id,
14
+ "aria-hidden": loading && !loadingLabel || void 0,
15
+ className: "min-w-0",
16
+ children: [/* @__PURE__ */ jsx(Heading, {
17
+ id,
18
+ as: "h3",
19
+ variant: "label",
20
+ tone: "muted",
21
+ className: "px-1",
22
+ loading,
23
+ "aria-hidden": loading || void 0,
24
+ children: title
25
+ }), /* @__PURE__ */ jsx("div", {
26
+ className: "mt-3",
27
+ children: /* @__PURE__ */ jsx(InsetPanel, {
28
+ presentation: "settings",
29
+ children: loading ? /* @__PURE__ */ jsx(PropertySheetRows, { loading: true }) : children
30
+ })
31
+ })]
32
+ });
33
+ return loading && loadingLabel ? /* @__PURE__ */ jsx(SkeletonLoader, {
34
+ label: loadingLabel,
35
+ children: content
36
+ }) : content;
37
+ }
38
+ function PropertySheetRows({ items, loading = false }) {
39
+ const rows = items ?? Array.from({ length: 3 }, () => ({
40
+ label: "",
41
+ value: ""
42
+ }));
43
+ return /* @__PURE__ */ jsx("dl", {
44
+ className: "divide-base-300 divide-y",
45
+ children: rows.map(({ label, value }, index) => /* @__PURE__ */ jsxs("div", {
46
+ className: "grid grid-cols-[minmax(0,1fr)_minmax(0,1.5fr)] items-baseline gap-x-6 px-4 py-2.5 sm:px-5",
47
+ children: [/* @__PURE__ */ jsx("dt", { children: /* @__PURE__ */ jsx(Text, {
48
+ as: "span",
49
+ tone: "muted",
50
+ loading,
51
+ children: label
52
+ }) }), /* @__PURE__ */ jsx("dd", {
53
+ className: "min-w-0 text-right",
54
+ children: /* @__PURE__ */ jsx(Text, {
55
+ as: "span",
56
+ className: "wrap-break-word tabular-nums",
57
+ variant: "label",
58
+ loading,
59
+ children: value
60
+ })
61
+ })]
62
+ }, loading ? index : label))
63
+ });
64
+ }
65
+ function PropertySheetTags({ items }) {
66
+ return /* @__PURE__ */ jsx("div", {
67
+ className: "px-4 py-3 sm:px-5",
68
+ children: /* @__PURE__ */ jsx(BadgeList, { items })
69
+ });
70
+ }
71
+ function PropertySheetNote({ children }) {
72
+ return /* @__PURE__ */ jsx(Text, {
73
+ className: "px-4 py-3 sm:px-5",
74
+ tone: "muted",
75
+ children
76
+ });
77
+ }
78
+ function PropertySheetCollapsible({ children, title, summary }) {
79
+ const id = useId();
80
+ return /* @__PURE__ */ jsx("section", {
81
+ "aria-labelledby": id,
82
+ className: "min-w-0",
83
+ children: /* @__PURE__ */ jsx(InsetPanel, {
84
+ presentation: "settings",
85
+ children: /* @__PURE__ */ jsxs("details", {
86
+ className: "group/sheet",
87
+ children: [/* @__PURE__ */ jsxs("summary", {
88
+ className: "hover:bg-base-100 focus-visible:outline-primary flex cursor-pointer list-none items-center gap-4 px-4 py-4 focus-visible:outline-2 focus-visible:-outline-offset-2 sm:px-5 [&::-webkit-details-marker]:hidden",
89
+ children: [/* @__PURE__ */ jsxs("span", {
90
+ className: "min-w-0 flex-1 wrap-anywhere",
91
+ children: [/* @__PURE__ */ jsx(Text, {
92
+ as: "span",
93
+ id,
94
+ variant: "label",
95
+ className: "block",
96
+ children: title
97
+ }), summary ? /* @__PURE__ */ jsx(Text, {
98
+ as: "span",
99
+ tone: "muted",
100
+ variant: "caption",
101
+ className: "mt-1 block",
102
+ children: summary
103
+ }) : null]
104
+ }), /* @__PURE__ */ jsx("span", {
105
+ "aria-hidden": "true",
106
+ className: "shrink-0 transition-transform group-open/sheet:rotate-180 [&>svg]:size-4",
107
+ children: /* @__PURE__ */ jsx(ChevronDownIcon, {})
108
+ })]
109
+ }), /* @__PURE__ */ jsx("div", {
110
+ className: "border-base-300 border-t p-4 sm:p-5",
111
+ children
112
+ })]
113
+ })
114
+ })
115
+ });
116
+ }
117
+ function PropertySheetTable({ label, columns, rows }) {
118
+ return /* @__PURE__ */ jsx("div", {
119
+ className: "overflow-x-auto",
120
+ tabIndex: 0,
121
+ children: /* @__PURE__ */ jsxs("table", {
122
+ "aria-label": label,
123
+ className: "w-full min-w-[30rem] table-fixed border-collapse text-left text-sm",
124
+ children: [/* @__PURE__ */ jsx("thead", {
125
+ className: "border-base-300 text-base-700 border-b text-xs",
126
+ children: /* @__PURE__ */ jsx("tr", { children: columns.map((column) => /* @__PURE__ */ jsx("th", {
127
+ scope: "col",
128
+ className: "px-4 py-3 font-medium sm:px-5",
129
+ children: column
130
+ }, column)) })
131
+ }), /* @__PURE__ */ jsx("tbody", {
132
+ className: "divide-base-300 divide-y",
133
+ children: rows.map((row) => /* @__PURE__ */ jsx("tr", { children: row.cells.map((cell, index) => /* @__PURE__ */ jsx("td", {
134
+ className: "px-4 py-3 align-top wrap-anywhere sm:px-5",
135
+ children: cell
136
+ }, index)) }, row.key))
137
+ })]
138
+ })
139
+ });
140
+ }
141
+ const PropertySheet = Object.assign(PropertySheetRoot, {
142
+ Collapsible: PropertySheetCollapsible,
143
+ Note: PropertySheetNote,
144
+ Rows: PropertySheetRows,
145
+ Table: PropertySheetTable,
146
+ Tags: PropertySheetTags
147
+ });
148
+ export { PropertySheet };
149
+
150
+ //# sourceMappingURL=PropertySheet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PropertySheet.js","names":[],"sources":["../../src/display/PropertySheet.tsx"],"sourcesContent":["import { ChevronDownIcon } from 'lucide-react';\n/* oxlint-disable react/only-export-components -- Compound members are exported through PropertySheet. */\nimport { type ReactNode, useId } from 'react';\n\nimport { SkeletonLoader } from '../feedback/SkeletonLoader';\nimport { Heading, Text } from '../typography/Typography';\nimport { BadgeList, type BadgeListItem } from './BadgeList';\nimport { InsetPanel } from './InsetPanel';\n\ntype PropertySheetProps = { title: string } & (\n | { children: ReactNode; loading?: false; loadingLabel?: never }\n | { children?: never; loading: true; loadingLabel?: string }\n);\n\n/** A titled sheet of facts about one thing; the body is label/value rows, a row of tags, or a short note. */\nfunction PropertySheetRoot({ children, loading = false, loadingLabel, title }: PropertySheetProps) {\n const id = useId();\n const content = (\n <section\n aria-labelledby={loading ? undefined : id}\n aria-hidden={(loading && !loadingLabel) || undefined}\n className=\"min-w-0\"\n >\n <Heading\n id={id}\n as=\"h3\"\n variant=\"label\"\n tone=\"muted\"\n className=\"px-1\"\n loading={loading}\n aria-hidden={loading || undefined}\n >\n {title}\n </Heading>\n <div className=\"mt-3\">\n <InsetPanel presentation=\"settings\">{loading ? <PropertySheetRows loading /> : children}</InsetPanel>\n </div>\n </section>\n );\n\n return loading && loadingLabel ? <SkeletonLoader label={loadingLabel}>{content}</SkeletonLoader> : content;\n}\n\ninterface PropertySheetRow {\n label: string;\n value: ReactNode;\n}\n\ntype RowsProps = { loading: true; items?: never } | { loading?: false; items: readonly PropertySheetRow[] };\n\nfunction PropertySheetRows({ items, loading = false }: RowsProps) {\n const rows = items ?? Array.from({ length: 3 }, () => ({ label: '', value: '' }));\n\n return (\n <dl className=\"divide-base-300 divide-y\">\n {rows.map(({ label, value }, index) => (\n <div\n key={loading ? index : label}\n className=\"grid grid-cols-[minmax(0,1fr)_minmax(0,1.5fr)] items-baseline gap-x-6 px-4 py-2.5 sm:px-5\"\n >\n <dt>\n <Text as=\"span\" tone=\"muted\" loading={loading}>\n {label}\n </Text>\n </dt>\n <dd className=\"min-w-0 text-right\">\n <Text as=\"span\" className=\"wrap-break-word tabular-nums\" variant=\"label\" loading={loading}>\n {value}\n </Text>\n </dd>\n </div>\n ))}\n </dl>\n );\n}\n\ntype PropertySheetTag = Omit<BadgeListItem, 'struck'>;\n\nfunction PropertySheetTags({ items }: { items: readonly PropertySheetTag[] }) {\n return (\n <div className=\"px-4 py-3 sm:px-5\">\n <BadgeList items={items} />\n </div>\n );\n}\n\nfunction PropertySheetNote({ children }: { children: ReactNode }) {\n return (\n <Text className=\"px-4 py-3 sm:px-5\" tone=\"muted\">\n {children}\n </Text>\n );\n}\n\nfunction PropertySheetCollapsible({\n children,\n title,\n summary,\n}: {\n children: ReactNode;\n title: string;\n summary?: string;\n}) {\n const id = useId();\n\n return (\n <section aria-labelledby={id} className=\"min-w-0\">\n <InsetPanel presentation=\"settings\">\n <details className=\"group/sheet\">\n <summary className=\"hover:bg-base-100 focus-visible:outline-primary flex cursor-pointer list-none items-center gap-4 px-4 py-4 focus-visible:outline-2 focus-visible:-outline-offset-2 sm:px-5 [&::-webkit-details-marker]:hidden\">\n <span className=\"min-w-0 flex-1 wrap-anywhere\">\n <Text as=\"span\" id={id} variant=\"label\" className=\"block\">\n {title}\n </Text>\n {summary ? (\n <Text as=\"span\" tone=\"muted\" variant=\"caption\" className=\"mt-1 block\">\n {summary}\n </Text>\n ) : null}\n </span>\n <span\n aria-hidden=\"true\"\n className=\"shrink-0 transition-transform group-open/sheet:rotate-180 [&>svg]:size-4\"\n >\n <ChevronDownIcon />\n </span>\n </summary>\n <div className=\"border-base-300 border-t p-4 sm:p-5\">{children}</div>\n </details>\n </InsetPanel>\n </section>\n );\n}\n\nfunction PropertySheetTable({\n label,\n columns,\n rows,\n}: {\n label: string;\n columns: readonly string[];\n rows: readonly { key: string; cells: readonly ReactNode[] }[];\n}) {\n return (\n <div className=\"overflow-x-auto\" tabIndex={0}>\n <table aria-label={label} className=\"w-full min-w-[30rem] table-fixed border-collapse text-left text-sm\">\n <thead className=\"border-base-300 text-base-700 border-b text-xs\">\n <tr>\n {columns.map((column) => (\n <th key={column} scope=\"col\" className=\"px-4 py-3 font-medium sm:px-5\">\n {column}\n </th>\n ))}\n </tr>\n </thead>\n <tbody className=\"divide-base-300 divide-y\">\n {rows.map((row) => (\n <tr key={row.key}>\n {row.cells.map((cell, index) => (\n <td key={index} className=\"px-4 py-3 align-top wrap-anywhere sm:px-5\">\n {cell}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n}\n\nexport const PropertySheet = Object.assign(PropertySheetRoot, {\n Collapsible: PropertySheetCollapsible,\n Note: PropertySheetNote,\n Rows: PropertySheetRows,\n Table: PropertySheetTable,\n Tags: PropertySheetTags,\n});\n\nexport type { PropertySheetRow, PropertySheetTag };\n"],"mappings":";;;;;;;;;AAeA,SAAS,kBAAkB,EAAE,UAAU,UAAU,OAAO,cAAc,SAA6B;CAC/F,MAAM,KAAK,MAAM;CACjB,MAAM,UACF,qBAAC,WAAD;EACI,mBAAiB,UAAU,KAAA,IAAY;EACvC,eAAc,WAAW,CAAC,gBAAiB,KAAA;EAC3C,WAAU;EAHd,UAAA,CAKI,oBAAC,SAAD;GACQ;GACJ,IAAG;GACH,SAAQ;GACR,MAAK;GACL,WAAU;GACD;GACT,eAAa,WAAW,KAAA;GAEvB,UAAA;EACI,CAAA,GACT,oBAAC,OAAD;GAAK,WAAU;GACX,UAAA,oBAAC,YAAD;IAAY,cAAa;IAAY,UAAA,UAAU,oBAAC,mBAAD,EAAmB,SAAA,KAAS,CAAA,IAAI;GAAqB,CAAA;EACnG,CAAA,CACA;;CAGb,OAAO,WAAW,eAAe,oBAAC,gBAAD;EAAgB,OAAO;EAAe,UAAA;CAAwB,CAAA,IAAI;AACvG;AASA,SAAS,kBAAkB,EAAE,OAAO,UAAU,SAAoB;CAC9D,MAAM,OAAO,SAAS,MAAM,KAAK,EAAE,QAAQ,EAAE,UAAU;EAAE,OAAO;EAAI,OAAO;CAAG,EAAE;CAEhF,OACI,oBAAC,MAAD;EAAI,WAAU;EACT,UAAA,KAAK,KAAK,EAAE,OAAO,SAAS,UACzB,qBAAC,OAAD;GAEI,WAAU;GAFd,UAAA,CAII,oBAAC,MAAD,EAAA,UACI,oBAAC,MAAD;IAAM,IAAG;IAAO,MAAK;IAAiB;IACjC,UAAA;GACC,CAAA,EACN,CAAA,GACJ,oBAAC,MAAD;IAAI,WAAU;IACV,UAAA,oBAAC,MAAD;KAAM,IAAG;KAAO,WAAU;KAA+B,SAAQ;KAAiB;KAC7E,UAAA;IACC,CAAA;GACN,CAAA,CACH;EAbI,GAAA,UAAU,QAAQ,KAatB,CACR;CACD,CAAA;AAEZ;AAIA,SAAS,kBAAkB,EAAE,SAAiD;CAC1E,OACI,oBAAC,OAAD;EAAK,WAAU;EACX,UAAA,oBAAC,WAAD,EAAkB,MAAQ,CAAA;CACzB,CAAA;AAEb;AAEA,SAAS,kBAAkB,EAAE,YAAqC;CAC9D,OACI,oBAAC,MAAD;EAAM,WAAU;EAAoB,MAAK;EACpC;CACC,CAAA;AAEd;AAEA,SAAS,yBAAyB,EAC9B,UACA,OACA,WAKD;CACC,MAAM,KAAK,MAAM;CAEjB,OACI,oBAAC,WAAD;EAAS,mBAAiB;EAAI,WAAU;EACpC,UAAA,oBAAC,YAAD;GAAY,cAAa;GACrB,UAAA,qBAAC,WAAD;IAAS,WAAU;IAAnB,UAAA,CACI,qBAAC,WAAD;KAAS,WAAU;KAAnB,UAAA,CACI,qBAAC,QAAD;MAAM,WAAU;MAAhB,UAAA,CACI,oBAAC,MAAD;OAAM,IAAG;OAAW;OAAI,SAAQ;OAAQ,WAAU;OAC7C,UAAA;MACC,CAAA,GACL,UACG,oBAAC,MAAD;OAAM,IAAG;OAAO,MAAK;OAAQ,SAAQ;OAAU,WAAU;OACpD,UAAA;MACC,CAAA,IACN,IACF;KACN,CAAA,GAAA,oBAAC,QAAD;MACI,eAAY;MACZ,WAAU;MAEV,UAAA,oBAAC,iBAAD,CAAkB,CAAA;KAChB,CAAA,CACD;IACT,CAAA,GAAA,oBAAC,OAAD;KAAK,WAAU;KAAuC;IAAc,CAAA,CAC/D;;EACD,CAAA;CACP,CAAA;AAEjB;AAEA,SAAS,mBAAmB,EACxB,OACA,SACA,QAKD;CACC,OACI,oBAAC,OAAD;EAAK,WAAU;EAAkB,UAAU;EACvC,UAAA,qBAAC,SAAD;GAAO,cAAY;GAAO,WAAU;GAApC,UAAA,CACI,oBAAC,SAAD;IAAO,WAAU;IACb,UAAA,oBAAC,MAAD,EAAA,UACK,QAAQ,KAAK,WACV,oBAAC,MAAD;KAAiB,OAAM;KAAM,WAAU;KAClC,UAAA;IACD,GAFK,MAEL,CACP,EACD,CAAA;GACD,CAAA,GACP,oBAAC,SAAD;IAAO,WAAU;IACZ,UAAA,KAAK,KAAK,QACP,oBAAC,MAAD,EAAA,UACK,IAAI,MAAM,KAAK,MAAM,UAClB,oBAAC,MAAD;KAAgB,WAAU;KACrB,UAAA;IACD,GAFK,KAEL,CACP,EACD,GANK,IAAI,GAMT,CACP;GACE,CAAA,CACJ;;CACN,CAAA;AAEb;AAEA,MAAa,gBAAgB,OAAO,OAAO,mBAAmB;CAC1D,aAAa;CACb,MAAM;CACN,MAAM;CACN,OAAO;CACP,MAAM;AACV,CAAC"}
@@ -0,0 +1,6 @@
1
+ /** Encodes locally; the value is never sent to a QR service. */
2
+ export declare function QrCode({ label, value }: {
3
+ label: string;
4
+ value: string;
5
+ }): import("react").JSX.Element | null;
6
+ //# sourceMappingURL=QrCode.d.ts.map
@@ -0,0 +1,47 @@
1
+ import { SkeletonLoader } from "../feedback/SkeletonLoader.js";
2
+ import { useEffect, useState } from "react";
3
+ import { jsx } from "react/jsx-runtime";
4
+ // src/display/QrCode.tsx
5
+ /** Encodes locally; the value is never sent to a QR service. */
6
+ function QrCode({ label, value }) {
7
+ const [encoded, setEncoded] = useState();
8
+ useEffect(() => {
9
+ let active = true;
10
+ import("qrcode-generator").then(({ default: createQrCode }) => {
11
+ try {
12
+ const code = createQrCode(0, "M");
13
+ code.addData(value, "Byte");
14
+ code.make();
15
+ if (active) setEncoded({
16
+ source: code.createDataURL(4),
17
+ value
18
+ });
19
+ } catch {
20
+ if (active) setEncoded({
21
+ source: null,
22
+ value
23
+ });
24
+ }
25
+ }).catch(() => {
26
+ if (active) setEncoded({
27
+ source: null,
28
+ value
29
+ });
30
+ });
31
+ return () => {
32
+ active = false;
33
+ };
34
+ }, [value]);
35
+ if (encoded?.value !== value) return /* @__PURE__ */ jsx(SkeletonLoader, {
36
+ label,
37
+ children: /* @__PURE__ */ jsx(SkeletonLoader.Shape, { presentation: "artwork" })
38
+ });
39
+ return encoded.source ? /* @__PURE__ */ jsx("img", {
40
+ alt: label,
41
+ src: encoded.source,
42
+ className: "block w-full max-w-sm rounded-lg bg-white"
43
+ }) : null;
44
+ }
45
+ export { QrCode };
46
+
47
+ //# sourceMappingURL=QrCode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QrCode.js","names":[],"sources":["../../src/display/QrCode.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport { SkeletonLoader } from '../feedback/SkeletonLoader';\n\n/** Encodes locally; the value is never sent to a QR service. */\nexport function QrCode({ label, value }: { label: string; value: string }) {\n const [encoded, setEncoded] = useState<{ source: string | null; value: string }>();\n\n useEffect(() => {\n let active = true;\n\n void import('qrcode-generator')\n .then(({ default: createQrCode }) => {\n try {\n const code = createQrCode(0, 'M');\n\n code.addData(value, 'Byte');\n code.make();\n\n if (active) setEncoded({ source: code.createDataURL(4), value });\n } catch {\n // The copyable value remains available if it exceeds QR capacity.\n if (active) setEncoded({ source: null, value });\n }\n })\n .catch(() => {\n // The copyable value remains usable if this optional chunk fails to load.\n if (active) setEncoded({ source: null, value });\n });\n\n return () => {\n active = false;\n };\n }, [value]);\n\n if (encoded?.value !== value) {\n return (\n <SkeletonLoader label={label}>\n <SkeletonLoader.Shape presentation=\"artwork\" />\n </SkeletonLoader>\n );\n }\n\n return encoded.source ? (\n <img alt={label} src={encoded.source} className=\"block w-full max-w-sm rounded-lg bg-white\" />\n ) : null;\n}\n"],"mappings":";;;;;AAKA,SAAgB,OAAO,EAAE,OAAO,SAA2C;CACvE,MAAM,CAAC,SAAS,cAAc,SAAmD;CAEjF,gBAAgB;EACZ,IAAI,SAAS;EAEb,OAAY,mBAAmB,CAC1B,MAAM,EAAE,SAAS,mBAAmB;GACjC,IAAI;IACA,MAAM,OAAO,aAAa,GAAG,GAAG;IAEhC,KAAK,QAAQ,OAAO,MAAM;IAC1B,KAAK,KAAK;IAEV,IAAI,QAAQ,WAAW;KAAE,QAAQ,KAAK,cAAc,CAAC;KAAG;IAAM,CAAC;GACnE,QAAQ;IAEJ,IAAI,QAAQ,WAAW;KAAE,QAAQ;KAAM;IAAM,CAAC;GAClD;EACJ,CAAC,CAAC,CACD,YAAY;GAET,IAAI,QAAQ,WAAW;IAAE,QAAQ;IAAM;GAAM,CAAC;EAClD,CAAC;EAEL,aAAa;GACT,SAAS;EACb;CACJ,GAAG,CAAC,KAAK,CAAC;CAEV,IAAI,SAAS,UAAU,OACnB,OACI,oBAAC,gBAAD;EAAuB;EACnB,UAAA,oBAAC,eAAe,OAAhB,EAAsB,cAAa,UAAW,CAAA;CAClC,CAAA;CAIxB,OAAO,QAAQ,SACX,oBAAC,OAAD;EAAK,KAAK;EAAO,KAAK,QAAQ;EAAQ,WAAU;CAA6C,CAAA,IAC7F;AACR"}
@@ -0,0 +1,9 @@
1
+ import { ReactNode } from "react";
2
+ export declare function RadioChoice({ name, checked, onChange, children, trailing }: {
3
+ name: string;
4
+ checked: boolean;
5
+ onChange: () => void;
6
+ children: ReactNode;
7
+ trailing?: ReactNode;
8
+ }): import("react").JSX.Element;
9
+ //# sourceMappingURL=RadioChoice.d.ts.map
@@ -0,0 +1,28 @@
1
+ import { tabbable } from "../foundations/KeyboardFocus.js";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ // src/display/RadioChoice.tsx
4
+ function RadioChoice({ name, checked, onChange, children, trailing }) {
5
+ return /* @__PURE__ */ jsxs("div", {
6
+ className: "hover:bg-base-100 has-checked:bg-primary/10 has-focus-visible:ring-primary flex min-w-0 items-center gap-3 transition-colors has-focus-visible:ring-2 has-focus-visible:ring-inset has-disabled:opacity-60",
7
+ children: [/* @__PURE__ */ jsxs("label", {
8
+ className: "flex min-w-0 flex-1 cursor-pointer items-center gap-3 px-4 py-3 has-disabled:cursor-default",
9
+ children: [/* @__PURE__ */ jsx("input", {
10
+ ...tabbable,
11
+ type: "radio",
12
+ name,
13
+ checked,
14
+ onChange,
15
+ className: "accent-primary size-4 shrink-0"
16
+ }), /* @__PURE__ */ jsx("span", {
17
+ className: "min-w-0 flex-1",
18
+ children
19
+ })]
20
+ }), trailing ? /* @__PURE__ */ jsx("div", {
21
+ className: "flex shrink-0 items-center gap-3 pr-4",
22
+ children: trailing
23
+ }) : null]
24
+ });
25
+ }
26
+ export { RadioChoice };
27
+
28
+ //# sourceMappingURL=RadioChoice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadioChoice.js","names":[],"sources":["../../src/display/RadioChoice.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { tabbable } from '../foundations/KeyboardFocus';\n\nexport function RadioChoice({\n name,\n checked,\n onChange,\n children,\n trailing,\n}: {\n name: string;\n checked: boolean;\n onChange: () => void;\n children: ReactNode;\n trailing?: ReactNode;\n}) {\n return (\n <div className=\"hover:bg-base-100 has-checked:bg-primary/10 has-focus-visible:ring-primary flex min-w-0 items-center gap-3 transition-colors has-focus-visible:ring-2 has-focus-visible:ring-inset has-disabled:opacity-60\">\n <label className=\"flex min-w-0 flex-1 cursor-pointer items-center gap-3 px-4 py-3 has-disabled:cursor-default\">\n <input\n {...tabbable}\n type=\"radio\"\n name={name}\n checked={checked}\n onChange={onChange}\n className=\"accent-primary size-4 shrink-0\"\n />\n <span className=\"min-w-0 flex-1\">{children}</span>\n </label>\n {trailing ? <div className=\"flex shrink-0 items-center gap-3 pr-4\">{trailing}</div> : null}\n </div>\n );\n}\n"],"mappings":";;;AAIA,SAAgB,YAAY,EACxB,MACA,SACA,UACA,UACA,YAOD;CACC,OACI,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACI,qBAAC,SAAD;GAAO,WAAU;GAAjB,UAAA,CACI,oBAAC,SAAD;IACI,GAAI;IACJ,MAAK;IACC;IACG;IACC;IACV,WAAU;GACb,CAAA,GACD,oBAAC,QAAD;IAAM,WAAU;IAAkB;GAAe,CAAA,CAC9C;EACN,CAAA,GAAA,WAAW,oBAAC,OAAD;GAAK,WAAU;GAAyC,UAAA;EAAc,CAAA,IAAI,IACrF;;AAEb"}
@@ -0,0 +1,10 @@
1
+ /** A provider's mark and its score, linked to the original rating. */
2
+ export declare function RatingLink({ source, value, scale, href }: {
3
+ source: string;
4
+ /** The score as it reads, such as "6.5" or "57%". */
5
+ value: string;
6
+ /** The scale shown after the score, such as "/ 10"; none for percentages. */
7
+ scale?: string;
8
+ href: string;
9
+ }): import("react").JSX.Element;
10
+ //# sourceMappingURL=RatingLink.d.ts.map