@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,30 @@
1
+ import { AnchorHTMLAttributes, ReactNode } from "react";
2
+ /** Where a product or feature stands: out now, being built, or planned. */
3
+ export type Readiness = 'available' | 'development' | 'planned';
4
+ /** A readiness label with its light. */
5
+ export declare function StatusPill({ status, children }: {
6
+ status: Readiness;
7
+ children: ReactNode;
8
+ }): import("react").JSX.Element;
9
+ export declare function StatusLight({ status, pulse }: {
10
+ status: Readiness;
11
+ pulse?: boolean;
12
+ }): import("react").JSX.Element;
13
+ interface AnnouncementProps extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'className' | 'style'> {
14
+ href: string;
15
+ tag: string;
16
+ status?: Readiness;
17
+ children: ReactNode;
18
+ external?: boolean;
19
+ onNavigate?: (href: string) => void;
20
+ }
21
+ /** The pill above a hero title that points at news. */
22
+ export declare function Announcement({ href, tag, status, children, external, onNavigate, ...props }: AnnouncementProps): import("react").JSX.Element;
23
+ /** A Lar app icon, cut to the platform's continuous corner. */
24
+ export declare function AppIcon({ src, alt, size }: {
25
+ src: string;
26
+ alt: string;
27
+ size?: 'sm' | 'md' | 'lg';
28
+ }): import("react").JSX.Element;
29
+ export {};
30
+ //# sourceMappingURL=Status.d.ts.map
@@ -0,0 +1,84 @@
1
+ import { tabbable } from "../foundations/KeyboardFocus.js";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { ArrowRightIcon } from "lucide-react";
4
+ // src/showcase/Status.tsx
5
+ const readinessClasses = {
6
+ available: {
7
+ pill: "bg-success/10 text-(--lar-success-text) ring-success/20 dark:bg-success/14",
8
+ dot: "bg-success shadow-[0_0_0_3px_color-mix(in_srgb,var(--color-success)_22%,transparent)]"
9
+ },
10
+ development: {
11
+ pill: "bg-primary/10 text-primary ring-primary/20 dark:bg-primary/22 dark:text-[color-mix(in_srgb,var(--color-primary)_42%,white)] dark:ring-primary/35",
12
+ dot: "bg-primary dark:bg-[color-mix(in_srgb,var(--color-primary)_60%,white)] shadow-[0_0_0_3px_color-mix(in_srgb,var(--color-primary)_24%,transparent)]"
13
+ },
14
+ planned: {
15
+ pill: "bg-base-200 text-base-800 ring-base-300 dark:bg-base-300/70",
16
+ dot: "bg-base-500 dark:bg-base-600"
17
+ }
18
+ };
19
+ /** A readiness label with its light. */
20
+ function StatusPill({ status, children }) {
21
+ return /* @__PURE__ */ jsxs("span", {
22
+ className: `inline-flex h-6 shrink-0 items-center gap-1.5 rounded-full px-2.5 text-xs font-medium whitespace-nowrap ring-1 ring-inset ${readinessClasses[status].pill}`,
23
+ children: [/* @__PURE__ */ jsx(StatusLight, { status }), children]
24
+ });
25
+ }
26
+ function StatusLight({ status, pulse }) {
27
+ return /* @__PURE__ */ jsx("span", {
28
+ "aria-hidden": "true",
29
+ className: `inline-block size-1.5 shrink-0 rounded-full ${readinessClasses[status].dot} ${pulse ? "lar-led-pulse" : ""}`
30
+ });
31
+ }
32
+ /** The pill above a hero title that points at news. */
33
+ function Announcement({ href, tag, status = "available", children, external, onNavigate, ...props }) {
34
+ return /* @__PURE__ */ jsxs("a", {
35
+ ...tabbable,
36
+ ...props,
37
+ href,
38
+ ...external ? {
39
+ target: "_blank",
40
+ rel: "noreferrer"
41
+ } : {},
42
+ onClick: (event) => {
43
+ if (!onNavigate || external || event.metaKey || event.ctrlKey || event.shiftKey || event.button !== 0) return;
44
+ event.preventDefault();
45
+ onNavigate(href);
46
+ },
47
+ className: "group/announcement border-base-300 bg-base-100/80 text-base-800 hover:border-base-400 hover:text-base-content focus-visible:outline-primary dark:bg-base-200/60 inline-flex h-8 max-w-full items-center gap-2 rounded-full border py-1 pr-3 pl-1 text-[13px] shadow-xs/5 backdrop-blur transition-colors focus-visible:outline-2",
48
+ children: [
49
+ /* @__PURE__ */ jsxs("span", {
50
+ className: `inline-flex h-6 items-center gap-1.5 rounded-full px-2 text-xs font-semibold ${readinessClasses[status].pill}`,
51
+ children: [/* @__PURE__ */ jsx(StatusLight, {
52
+ status,
53
+ pulse: true
54
+ }), tag]
55
+ }),
56
+ /* @__PURE__ */ jsx("span", {
57
+ className: "truncate",
58
+ children
59
+ }),
60
+ /* @__PURE__ */ jsx("span", {
61
+ className: "text-base-600 inline-flex transition-transform duration-200 group-hover/announcement:translate-x-0.5 [&_svg]:size-3.5",
62
+ children: /* @__PURE__ */ jsx(ArrowRightIcon, {})
63
+ })
64
+ ]
65
+ });
66
+ }
67
+ /** A Lar app icon, cut to the platform's continuous corner. */
68
+ function AppIcon({ src, alt, size = "md" }) {
69
+ return /* @__PURE__ */ jsx("img", {
70
+ src,
71
+ alt,
72
+ width: 128,
73
+ height: 128,
74
+ loading: "lazy",
75
+ className: `shrink-0 shadow-[0_6px_16px_-6px_rgb(0_0_0/45%),inset_0_0_0_0.5px_rgb(255_255_255/12%)] ${{
76
+ sm: "size-9 rounded-[0.55rem]",
77
+ md: "size-12 rounded-[0.75rem]",
78
+ lg: "size-16 rounded-[1rem]"
79
+ }[size]}`
80
+ });
81
+ }
82
+ export { Announcement, AppIcon, StatusLight, StatusPill };
83
+
84
+ //# sourceMappingURL=Status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Status.js","names":[],"sources":["../../src/showcase/Status.tsx"],"sourcesContent":["import { ArrowRightIcon } from 'lucide-react';\nimport type { AnchorHTMLAttributes, ReactNode } from 'react';\n\nimport { tabbable } from '../foundations/KeyboardFocus';\n\n/** Where a product or feature stands: out now, being built, or planned. */\nexport type Readiness = 'available' | 'development' | 'planned';\n\nconst readinessClasses: Record<Readiness, { pill: string; dot: string }> = {\n available: {\n pill: 'bg-success/10 text-(--lar-success-text) ring-success/20 dark:bg-success/14',\n dot: 'bg-success shadow-[0_0_0_3px_color-mix(in_srgb,var(--color-success)_22%,transparent)]',\n },\n development: {\n pill: 'bg-primary/10 text-primary ring-primary/20 dark:bg-primary/22 dark:text-[color-mix(in_srgb,var(--color-primary)_42%,white)] dark:ring-primary/35',\n dot: 'bg-primary dark:bg-[color-mix(in_srgb,var(--color-primary)_60%,white)] shadow-[0_0_0_3px_color-mix(in_srgb,var(--color-primary)_24%,transparent)]',\n },\n planned: {\n pill: 'bg-base-200 text-base-800 ring-base-300 dark:bg-base-300/70',\n dot: 'bg-base-500 dark:bg-base-600',\n },\n};\n\n/** A readiness label with its light. */\nexport function StatusPill({ status, children }: { status: Readiness; children: ReactNode }) {\n return (\n <span\n className={`inline-flex h-6 shrink-0 items-center gap-1.5 rounded-full px-2.5 text-xs font-medium whitespace-nowrap ring-1 ring-inset ${readinessClasses[status].pill}`}\n >\n <StatusLight status={status} />\n {children}\n </span>\n );\n}\n\nexport function StatusLight({ status, pulse }: { status: Readiness; pulse?: boolean }) {\n return (\n <span\n aria-hidden=\"true\"\n className={`inline-block size-1.5 shrink-0 rounded-full ${readinessClasses[status].dot} ${pulse ? 'lar-led-pulse' : ''}`}\n />\n );\n}\n\ninterface AnnouncementProps extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, 'className' | 'style'> {\n href: string;\n tag: string;\n status?: Readiness;\n children: ReactNode;\n external?: boolean;\n onNavigate?: (href: string) => void;\n}\n\n/** The pill above a hero title that points at news. */\nexport function Announcement({\n href,\n tag,\n status = 'available',\n children,\n external,\n onNavigate,\n ...props\n}: AnnouncementProps) {\n return (\n <a\n {...tabbable}\n {...props}\n href={href}\n {...(external ? { target: '_blank', rel: 'noreferrer' } : {})}\n onClick={(event) => {\n if (!onNavigate || external || event.metaKey || event.ctrlKey || event.shiftKey || event.button !== 0)\n return;\n\n event.preventDefault();\n onNavigate(href);\n }}\n className=\"group/announcement border-base-300 bg-base-100/80 text-base-800 hover:border-base-400 hover:text-base-content focus-visible:outline-primary dark:bg-base-200/60 inline-flex h-8 max-w-full items-center gap-2 rounded-full border py-1 pr-3 pl-1 text-[13px] shadow-xs/5 backdrop-blur transition-colors focus-visible:outline-2\"\n >\n <span\n className={`inline-flex h-6 items-center gap-1.5 rounded-full px-2 text-xs font-semibold ${readinessClasses[status].pill}`}\n >\n <StatusLight status={status} pulse />\n {tag}\n </span>\n <span className=\"truncate\">{children}</span>\n <span className=\"text-base-600 inline-flex transition-transform duration-200 group-hover/announcement:translate-x-0.5 [&_svg]:size-3.5\">\n <ArrowRightIcon />\n </span>\n </a>\n );\n}\n\n/** A Lar app icon, cut to the platform's continuous corner. */\nexport function AppIcon({ src, alt, size = 'md' }: { src: string; alt: string; size?: 'sm' | 'md' | 'lg' }) {\n const sizes = { sm: 'size-9 rounded-[0.55rem]', md: 'size-12 rounded-[0.75rem]', lg: 'size-16 rounded-[1rem]' };\n\n return (\n <img\n src={src}\n alt={alt}\n width={128}\n height={128}\n loading=\"lazy\"\n className={`shrink-0 shadow-[0_6px_16px_-6px_rgb(0_0_0/45%),inset_0_0_0_0.5px_rgb(255_255_255/12%)] ${sizes[size]}`}\n />\n );\n}\n"],"mappings":";;;;AAQA,MAAM,mBAAqE;CACvE,WAAW;EACP,MAAM;EACN,KAAK;CACT;CACA,aAAa;EACT,MAAM;EACN,KAAK;CACT;CACA,SAAS;EACL,MAAM;EACN,KAAK;CACT;AACJ;;AAGA,SAAgB,WAAW,EAAE,QAAQ,YAAwD;CACzF,OACI,qBAAC,QAAD;EACI,WAAW,6HAA6H,iBAAiB,OAAO,CAAC;EADrK,UAAA,CAGI,oBAAC,aAAD,EAAqB,OAAS,CAAA,GAC7B,QACC;;AAEd;AAEA,SAAgB,YAAY,EAAE,QAAQ,SAAiD;CACnF,OACI,oBAAC,QAAD;EACI,eAAY;EACZ,WAAW,+CAA+C,iBAAiB,OAAO,CAAC,IAAI,GAAG,QAAQ,kBAAkB;CACvH,CAAA;AAET;;AAYA,SAAgB,aAAa,EACzB,MACA,KACA,SAAS,aACT,UACA,UACA,YACA,GAAG,SACe;CAClB,OACI,qBAAC,KAAD;EACI,GAAI;EACJ,GAAI;EACE;EACN,GAAK,WAAW;GAAE,QAAQ;GAAU,KAAK;EAAa,IAAI,CAAC;EAC3D,UAAU,UAAU;GAChB,IAAI,CAAC,cAAc,YAAY,MAAM,WAAW,MAAM,WAAW,MAAM,YAAY,MAAM,WAAW,GAChG;GAEJ,MAAM,eAAe;GACrB,WAAW,IAAI;EACnB;EACA,WAAU;EAZd,UAAA;GAcI,qBAAC,QAAD;IACI,WAAW,gFAAgF,iBAAiB,OAAO,CAAC;IADxH,UAAA,CAGI,oBAAC,aAAD;KAAqB;KAAQ,OAAA;IAAO,CAAA,GACnC,GACC;;GACN,oBAAC,QAAD;IAAM,WAAU;IAAY;GAAe,CAAA;GAC3C,oBAAC,QAAD;IAAM,WAAU;IACZ,UAAA,oBAAC,gBAAD,CAAiB,CAAA;GACf,CAAA;EACP;;AAEX;;AAGA,SAAgB,QAAQ,EAAE,KAAK,KAAK,OAAO,QAAiE;CAGxG,OACI,oBAAC,OAAD;EACS;EACA;EACL,OAAO;EACP,QAAQ;EACR,SAAQ;EACR,WAAW,2FAA2F;GAT9F,IAAI;GAA4B,IAAI;GAA6B,IAAI;EAS6B,EAAE;CAC/G,CAAA;AAET"}
@@ -0,0 +1,13 @@
1
+ import { ReactNode } from "react";
2
+ export interface Step {
3
+ label: string;
4
+ title: string;
5
+ body: string;
6
+ icon: ReactNode;
7
+ }
8
+ /** A workflow: compact numbered rows on phones, and on wide screens five stops joined by a line. */
9
+ export declare function StepFlow({ steps, label }: {
10
+ steps: readonly Step[];
11
+ label: string;
12
+ }): import("react").JSX.Element;
13
+ //# sourceMappingURL=StepFlow.d.ts.map
@@ -0,0 +1,47 @@
1
+ import { Heading, Text } from "../typography/Typography.js";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ // src/showcase/StepFlow.tsx
4
+ /** A workflow: compact numbered rows on phones, and on wide screens five stops joined by a line. */
5
+ function StepFlow({ steps, label }) {
6
+ return /* @__PURE__ */ jsxs("ol", {
7
+ "aria-label": label,
8
+ className: "relative grid gap-5 sm:grid-cols-2 sm:gap-4 lg:grid-cols-5 lg:gap-0",
9
+ children: [/* @__PURE__ */ jsx("span", {
10
+ "aria-hidden": "true",
11
+ className: "absolute top-[26px] right-[10%] left-[10%] hidden h-px bg-[linear-gradient(90deg,transparent,var(--color-base-400)_12%,var(--color-base-400)_88%,transparent)] lg:block"
12
+ }), steps.map((step, index) => /* @__PURE__ */ jsxs("li", {
13
+ className: "relative grid grid-cols-[auto_1fr] items-start gap-x-4 gap-y-1 sm:rounded-2xl sm:p-5 lg:flex lg:flex-col lg:items-center lg:gap-3 lg:text-center",
14
+ children: [
15
+ /* @__PURE__ */ jsxs("span", {
16
+ className: "border-base-300 bg-base-100 text-base-800 relative z-10 row-span-2 inline-flex size-10 items-center justify-center rounded-[0.75rem] border shadow-[0_8px_24px_-12px_rgb(0_0_0/35%)] sm:size-[52px] sm:rounded-[0.9rem] [&>svg]:size-[18px] sm:[&>svg]:size-[22px]",
17
+ children: [step.icon, /* @__PURE__ */ jsx("span", {
18
+ className: "bg-primary text-primary-content absolute -top-1.5 -right-1.5 inline-flex size-5 items-center justify-center rounded-full text-[11px] font-semibold tabular-nums",
19
+ children: index + 1
20
+ })]
21
+ }),
22
+ /* @__PURE__ */ jsx(Text, {
23
+ as: "span",
24
+ variant: "overline",
25
+ tone: "muted",
26
+ className: "hidden lg:mt-2 lg:block",
27
+ children: step.label
28
+ }),
29
+ /* @__PURE__ */ jsx(Heading, {
30
+ as: "h3",
31
+ variant: "subsection",
32
+ className: "self-center lg:self-auto",
33
+ children: step.title
34
+ }),
35
+ /* @__PURE__ */ jsx(Text, {
36
+ variant: "body",
37
+ tone: "muted",
38
+ className: "col-start-2 leading-6 lg:max-w-[220px] dark:text-[#a3a3aa]",
39
+ children: step.body
40
+ })
41
+ ]
42
+ }, step.label))]
43
+ });
44
+ }
45
+ export { StepFlow };
46
+
47
+ //# sourceMappingURL=StepFlow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StepFlow.js","names":[],"sources":["../../src/showcase/StepFlow.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { Heading, Text } from '../typography/Typography';\n\nexport interface Step {\n label: string;\n title: string;\n body: string;\n icon: ReactNode;\n}\n\n/** A workflow: compact numbered rows on phones, and on wide screens five stops joined by a line. */\nexport function StepFlow({ steps, label }: { steps: readonly Step[]; label: string }) {\n return (\n <ol aria-label={label} className=\"relative grid gap-5 sm:grid-cols-2 sm:gap-4 lg:grid-cols-5 lg:gap-0\">\n <span\n aria-hidden=\"true\"\n className=\"absolute top-[26px] right-[10%] left-[10%] hidden h-px bg-[linear-gradient(90deg,transparent,var(--color-base-400)_12%,var(--color-base-400)_88%,transparent)] lg:block\"\n />\n {steps.map((step, index) => (\n <li\n key={step.label}\n className=\"relative grid grid-cols-[auto_1fr] items-start gap-x-4 gap-y-1 sm:rounded-2xl sm:p-5 lg:flex lg:flex-col lg:items-center lg:gap-3 lg:text-center\"\n >\n <span className=\"border-base-300 bg-base-100 text-base-800 relative z-10 row-span-2 inline-flex size-10 items-center justify-center rounded-[0.75rem] border shadow-[0_8px_24px_-12px_rgb(0_0_0/35%)] sm:size-[52px] sm:rounded-[0.9rem] [&>svg]:size-[18px] sm:[&>svg]:size-[22px]\">\n {step.icon}\n <span className=\"bg-primary text-primary-content absolute -top-1.5 -right-1.5 inline-flex size-5 items-center justify-center rounded-full text-[11px] font-semibold tabular-nums\">\n {index + 1}\n </span>\n </span>\n <Text as=\"span\" variant=\"overline\" tone=\"muted\" className=\"hidden lg:mt-2 lg:block\">\n {step.label}\n </Text>\n <Heading as=\"h3\" variant=\"subsection\" className=\"self-center lg:self-auto\">\n {step.title}\n </Heading>\n <Text\n variant=\"body\"\n tone=\"muted\"\n className=\"col-start-2 leading-6 lg:max-w-[220px] dark:text-[#a3a3aa]\"\n >\n {step.body}\n </Text>\n </li>\n ))}\n </ol>\n );\n}\n"],"mappings":";;;;AAYA,SAAgB,SAAS,EAAE,OAAO,SAAoD;CAClF,OACI,qBAAC,MAAD;EAAI,cAAY;EAAO,WAAU;EAAjC,UAAA,CACI,oBAAC,QAAD;GACI,eAAY;GACZ,WAAU;EACb,CAAA,GACA,MAAM,KAAK,MAAM,UACd,qBAAC,MAAD;GAEI,WAAU;GAFd,UAAA;IAII,qBAAC,QAAD;KAAM,WAAU;KAAhB,UAAA,CACK,KAAK,MACN,oBAAC,QAAD;MAAM,WAAU;MACX,UAAA,QAAQ;KACP,CAAA,CACJ;;IACN,oBAAC,MAAD;KAAM,IAAG;KAAO,SAAQ;KAAW,MAAK;KAAQ,WAAU;KACrD,UAAA,KAAK;IACJ,CAAA;IACN,oBAAC,SAAD;KAAS,IAAG;KAAK,SAAQ;KAAa,WAAU;KAC3C,UAAA,KAAK;IACD,CAAA;IACT,oBAAC,MAAD;KACI,SAAQ;KACR,MAAK;KACL,WAAU;KAET,UAAA,KAAK;IACJ,CAAA;GACN;EAtBK,GAAA,KAAK,KAsBV,CACP,CACD;;AAEZ"}
@@ -0,0 +1,15 @@
1
+ import { CallToAction } from "./CallToAction.js";
2
+ import { FeatureGrid, FeatureTile, ProductCard, ProductGrid } from "./Cards.js";
3
+ import { AppWindow, BrowserFrame, Callout, CalloutPair, CalloutStack, GuidedMedia, LaptopFrame, PhoneFrame, Screenshot, ScreenshotProps, TabletFrame, TvFrame } from "./Devices.js";
4
+ import { FeatureRow, FeatureRows, PointList } from "./FeatureRow.js";
5
+ import { Hero } from "./Hero.js";
6
+ import { ConceptPhoto, PhotoSearchConcept } from "./PhotoSearchConcept.js";
7
+ import { Platform, PlatformGrid } from "./Platforms.js";
8
+ import { ProductBand, ProductBands, ProductEntry, ProductIndex } from "./ProductBand.js";
9
+ import { Roadmap, RoadmapItem } from "./Roadmap.js";
10
+ import { RouteDiagram, RouteNode } from "./RouteDiagram.js";
11
+ import { MediaApp, ReadinessItem, ReadinessLegend, ReadinessPanel, ServerBay, ServerUnit } from "./ServerUnit.js";
12
+ import { AngledDevice, Backdrop, DeviceStage, ResponsiveMedia, Reveal } from "./Stage.js";
13
+ import { Announcement, AppIcon, Readiness, StatusLight, StatusPill } from "./Status.js";
14
+ import { Step, StepFlow } from "./StepFlow.js";
15
+ export { AngledDevice, Announcement, AppIcon, AppWindow, Backdrop, BrowserFrame, CallToAction, Callout, CalloutPair, CalloutStack, type ConceptPhoto, DeviceStage, FeatureGrid, FeatureRow, FeatureRows, FeatureTile, GuidedMedia, Hero, LaptopFrame, type MediaApp, PhoneFrame, PhotoSearchConcept, type Platform, PlatformGrid, PointList, ProductBand, ProductBands, ProductCard, type ProductEntry, ProductGrid, ProductIndex, type Readiness, type ReadinessItem, ReadinessLegend, ReadinessPanel, ResponsiveMedia, Reveal, Roadmap, type RoadmapItem, RouteDiagram, type RouteNode, Screenshot, type ScreenshotProps, type ServerBay, ServerUnit, StatusLight, StatusPill, type Step, StepFlow, TabletFrame, TvFrame };
@@ -0,0 +1,5 @@
1
+ /** Clears state the design system keeps at module level, such as the toast store, which outlives a test. */
2
+ export declare function resetDesignSystem(): void;
3
+ /** Adds the browser APIs the design system's components use and jsdom does not implement. */
4
+ export declare function installDomStubs(): void;
5
+ //# sourceMappingURL=testing.d.ts.map
@@ -0,0 +1,43 @@
1
+ import { dismissAllNotifications } from "./feedback/ErrorNotification.js";
2
+ // src/testing.ts
3
+ /** Clears state the design system keeps at module level, such as the toast store, which outlives a test. */
4
+ function resetDesignSystem() {
5
+ dismissAllNotifications();
6
+ }
7
+ /** Adds the browser APIs the design system's components use and jsdom does not implement. */
8
+ function installDomStubs() {
9
+ class ResizeObserverStub {
10
+ disconnect() {}
11
+ observe() {}
12
+ unobserve() {}
13
+ }
14
+ globalThis.ResizeObserver = ResizeObserverStub;
15
+ let objectUrlSequence = 0;
16
+ Object.defineProperty(URL, "createObjectURL", {
17
+ configurable: true,
18
+ value: () => `blob:mock-object-url-${objectUrlSequence += 1}`
19
+ });
20
+ Object.defineProperty(URL, "revokeObjectURL", {
21
+ configurable: true,
22
+ value: () => void 0
23
+ });
24
+ Object.defineProperty(HTMLElement.prototype, "hasPointerCapture", {
25
+ configurable: true,
26
+ value: () => false
27
+ });
28
+ Object.defineProperty(HTMLElement.prototype, "scrollIntoView", {
29
+ configurable: true,
30
+ value: () => void 0
31
+ });
32
+ Object.defineProperty(HTMLElement.prototype, "scrollTo", {
33
+ configurable: true,
34
+ value: () => Promise.resolve()
35
+ });
36
+ Object.defineProperty(window, "scrollTo", {
37
+ configurable: true,
38
+ value: () => void 0
39
+ });
40
+ }
41
+ export { installDomStubs, resetDesignSystem };
42
+
43
+ //# sourceMappingURL=testing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing.js","names":[],"sources":["../src/testing.ts"],"sourcesContent":["// Helpers for apps' component tests (jsdom). Import them from `@lar-works/design-system/testing` in a test setup file.\nimport { dismissAllNotifications } from './feedback/ErrorNotification';\n\n/** Clears state the design system keeps at module level, such as the toast store, which outlives a test. */\nexport function resetDesignSystem() {\n dismissAllNotifications();\n}\n\n/** Adds the browser APIs the design system's components use and jsdom does not implement. */\nexport function installDomStubs() {\n class ResizeObserverStub implements ResizeObserver {\n disconnect(): void {}\n observe(): void {}\n unobserve(): void {}\n }\n\n globalThis.ResizeObserver = ResizeObserverStub;\n\n let objectUrlSequence = 0;\n\n // jsdom has no object URL registry; components that show fetched bytes need a working (if fake) `blob:` URL.\n Object.defineProperty(URL, 'createObjectURL', {\n configurable: true,\n value: () => `blob:mock-object-url-${(objectUrlSequence += 1)}`,\n });\n\n Object.defineProperty(URL, 'revokeObjectURL', { configurable: true, value: () => undefined });\n Object.defineProperty(HTMLElement.prototype, 'hasPointerCapture', { configurable: true, value: () => false });\n Object.defineProperty(HTMLElement.prototype, 'scrollIntoView', { configurable: true, value: () => undefined });\n\n // Browsers' element scrollTo returns a promise, which an effect must not return as its cleanup.\n Object.defineProperty(HTMLElement.prototype, 'scrollTo', { configurable: true, value: () => Promise.resolve() });\n Object.defineProperty(window, 'scrollTo', { configurable: true, value: () => undefined });\n}\n"],"mappings":";;;AAIA,SAAgB,oBAAoB;CAChC,wBAAwB;AAC5B;;AAGA,SAAgB,kBAAkB;CAC9B,MAAM,mBAA6C;EAC/C,aAAmB,CAAC;EACpB,UAAgB,CAAC;EACjB,YAAkB,CAAC;CACvB;CAEA,WAAW,iBAAiB;CAE5B,IAAI,oBAAoB;CAGxB,OAAO,eAAe,KAAK,mBAAmB;EAC1C,cAAc;EACd,aAAa,wBAAyB,qBAAqB;CAC/D,CAAC;CAED,OAAO,eAAe,KAAK,mBAAmB;EAAE,cAAc;EAAM,aAAa,KAAA;CAAU,CAAC;CAC5F,OAAO,eAAe,YAAY,WAAW,qBAAqB;EAAE,cAAc;EAAM,aAAa;CAAM,CAAC;CAC5G,OAAO,eAAe,YAAY,WAAW,kBAAkB;EAAE,cAAc;EAAM,aAAa,KAAA;CAAU,CAAC;CAG7G,OAAO,eAAe,YAAY,WAAW,YAAY;EAAE,cAAc;EAAM,aAAa,QAAQ,QAAQ;CAAE,CAAC;CAC/G,OAAO,eAAe,QAAQ,YAAY;EAAE,cAAc;EAAM,aAAa,KAAA;CAAU,CAAC;AAC5F"}
@@ -0,0 +1,21 @@
1
+ import { LinkBoxProps, LinkOverlayProps, LinkProps } from "@ninna-ui/primitives";
2
+ import { ReactNode } from "react";
3
+ type LinkProps$1 = Omit<LinkProps, 'size' | 'color'> & {
4
+ variant?: 'body' | 'caption';
5
+ onNavigate?: (href: string) => void;
6
+ };
7
+ type LinkOverlayProps$1 = LinkOverlayProps & Pick<LinkProps$1, 'onNavigate'>;
8
+ /** Keep secondary links and buttons above the stretched primary link or action. */
9
+ declare function LinkBox$1({ className, ...props }: LinkBoxProps): import("react").JSX.Element;
10
+ declare const LinkOverlay$1: import("react").ForwardRefExoticComponent<LinkOverlayProps & Pick<LinkProps$1, "onNavigate"> & import("react").RefAttributes<HTMLAnchorElement>>;
11
+ declare const Link$1: import("react").ForwardRefExoticComponent<Omit<LinkProps, "color" | "size"> & {
12
+ variant?: 'body' | 'caption';
13
+ onNavigate?: (href: string) => void;
14
+ } & import("react").RefAttributes<HTMLAnchorElement>>;
15
+ /** A link inside running text or a note: the surrounding size and colour, underlined. */
16
+ export declare function InlineLink({ href, children }: {
17
+ href: string;
18
+ children?: ReactNode;
19
+ }): import("react").JSX.Element;
20
+ export { Link$1 as Link, LinkBox$1 as LinkBox, LinkOverlay$1 as LinkOverlay, LinkOverlayProps$1 as LinkOverlayProps, LinkProps$1 as LinkProps };
21
+ //# sourceMappingURL=Link.d.ts.map
@@ -0,0 +1,60 @@
1
+ import { tabbable } from "../foundations/KeyboardFocus.js";
2
+ import { Link, LinkBox, LinkOverlay } from "@ninna-ui/primitives";
3
+ import { forwardRef } from "react";
4
+ import { jsx } from "react/jsx-runtime";
5
+ // src/typography/Link.tsx
6
+ /** Keep secondary links and buttons above the stretched primary link or action. */
7
+ function LinkBox$1({ className = "", ...props }) {
8
+ return /* @__PURE__ */ jsx(LinkBox, {
9
+ ...props,
10
+ className: `isolate [&_:is(a,button):not([data-slot=link-overlay]):not([data-slot=action-overlay])]:relative [&_:is(a,button):not([data-slot=link-overlay]):not([data-slot=action-overlay])]:z-10 ${className}`
11
+ });
12
+ }
13
+ const LinkOverlay$1 = forwardRef(({ onNavigate, onClick, className = "", ...props }, ref) => /* @__PURE__ */ jsx(LinkOverlay, {
14
+ ...tabbable,
15
+ ...props,
16
+ ref,
17
+ className: `focus-visible:before:outline-primary before:z-1 before:rounded-[inherit] focus-visible:outline-none focus-visible:before:outline-2 focus-visible:before:-outline-offset-2 ${className}`,
18
+ onClick: navigationClick({
19
+ ...props,
20
+ onClick,
21
+ onNavigate
22
+ })
23
+ }));
24
+ LinkOverlay$1.displayName = "LinkOverlay";
25
+ const Link$1 = forwardRef(({ variant = "body", onNavigate, onClick, ...props }, ref) => /* @__PURE__ */ jsx(Link, {
26
+ ...tabbable,
27
+ ...props,
28
+ ref,
29
+ size: variant === "caption" ? "xs" : "sm",
30
+ underline: "hover",
31
+ onClick: navigationClick({
32
+ ...props,
33
+ onClick,
34
+ onNavigate
35
+ })
36
+ }));
37
+ Link$1.displayName = "Link";
38
+ function navigationClick({ href, onNavigate, onClick, external, target, download }) {
39
+ return (event) => {
40
+ if (onNavigate) event.stopPropagation();
41
+ onClick?.(event);
42
+ if (!onNavigate || !href || event.defaultPrevented || event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || external || target && target !== "_self" || download !== void 0 && download !== false) return;
43
+ event.preventDefault();
44
+ onNavigate(href);
45
+ };
46
+ }
47
+ /** A link inside running text or a note: the surrounding size and colour, underlined. */
48
+ function InlineLink({ href, children }) {
49
+ return /* @__PURE__ */ jsx("a", {
50
+ ...tabbable,
51
+ href,
52
+ target: "_blank",
53
+ rel: "noreferrer",
54
+ className: "focus-visible:outline-primary text-inherit underline decoration-current/40 underline-offset-2 transition-colors hover:decoration-current focus-visible:outline-2",
55
+ children
56
+ });
57
+ }
58
+ export { InlineLink, Link$1 as Link, LinkBox$1 as LinkBox, LinkOverlay$1 as LinkOverlay };
59
+
60
+ //# sourceMappingURL=Link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Link.js","names":["LinkBox","NinnaLinkBox","LinkOverlay","NinnaLinkOverlay","Link","NinnaLink"],"sources":["../../src/typography/Link.tsx"],"sourcesContent":["import {\n Link as NinnaLink,\n LinkBox as NinnaLinkBox,\n type LinkBoxProps,\n LinkOverlay as NinnaLinkOverlay,\n type LinkOverlayProps as NinnaLinkOverlayProps,\n type LinkProps as NinnaLinkProps,\n} from '@ninna-ui/primitives';\nimport { forwardRef, type ReactNode } from 'react';\n\nimport { tabbable } from '../foundations/KeyboardFocus';\n\nexport type LinkProps = Omit<NinnaLinkProps, 'size' | 'color'> & {\n variant?: 'body' | 'caption';\n onNavigate?: (href: string) => void;\n};\n\nexport type LinkOverlayProps = NinnaLinkOverlayProps & Pick<LinkProps, 'onNavigate'>;\n\n/** Keep secondary links and buttons above the stretched primary link or action. */\nexport function LinkBox({ className = '', ...props }: LinkBoxProps) {\n return (\n <NinnaLinkBox\n {...props}\n className={`isolate [&_:is(a,button):not([data-slot=link-overlay]):not([data-slot=action-overlay])]:relative [&_:is(a,button):not([data-slot=link-overlay]):not([data-slot=action-overlay])]:z-10 ${className}`}\n />\n );\n}\n\nexport const LinkOverlay = forwardRef<HTMLAnchorElement, LinkOverlayProps>(\n ({ onNavigate, onClick, className = '', ...props }, ref) => (\n <NinnaLinkOverlay\n {...tabbable}\n {...props}\n ref={ref}\n className={`focus-visible:before:outline-primary before:z-1 before:rounded-[inherit] focus-visible:outline-none focus-visible:before:outline-2 focus-visible:before:-outline-offset-2 ${className}`}\n onClick={navigationClick({ ...props, onClick, onNavigate })}\n />\n ),\n);\n\nLinkOverlay.displayName = 'LinkOverlay';\n\nexport const Link = forwardRef<HTMLAnchorElement, LinkProps>(\n ({ variant = 'body', onNavigate, onClick, ...props }, ref) => (\n <NinnaLink\n {...tabbable}\n {...props}\n ref={ref}\n size={variant === 'caption' ? 'xs' : 'sm'}\n underline=\"hover\"\n onClick={navigationClick({ ...props, onClick, onNavigate })}\n />\n ),\n);\n\nLink.displayName = 'Link';\n\nfunction navigationClick({\n href,\n onNavigate,\n onClick,\n external,\n target,\n download,\n}: LinkOverlayProps): LinkProps['onClick'] {\n return (event) => {\n if (onNavigate) event.stopPropagation();\n\n onClick?.(event);\n\n if (\n !onNavigate ||\n !href ||\n event.defaultPrevented ||\n event.button !== 0 ||\n event.metaKey ||\n event.ctrlKey ||\n event.shiftKey ||\n event.altKey ||\n external ||\n (target && target !== '_self') ||\n (download !== undefined && download !== false)\n )\n return;\n\n event.preventDefault();\n onNavigate(href);\n };\n}\n\n/** A link inside running text or a note: the surrounding size and colour, underlined. */\nexport function InlineLink({ href, children }: { href: string; children?: ReactNode }) {\n return (\n <a\n {...tabbable}\n href={href}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"focus-visible:outline-primary text-inherit underline decoration-current/40 underline-offset-2 transition-colors hover:decoration-current focus-visible:outline-2\"\n >\n {children}\n </a>\n );\n}\n"],"mappings":";;;;;;AAoBA,SAAgBA,UAAQ,EAAE,YAAY,IAAI,GAAG,SAAuB;CAChE,OACI,oBAACC,SAAD;EACI,GAAI;EACJ,WAAW,yLAAyL;CACvM,CAAA;AAET;AAEA,MAAaC,gBAAc,YACtB,EAAE,YAAY,SAAS,YAAY,IAAI,GAAG,SAAS,QAChD,oBAACC,aAAD;CACI,GAAI;CACJ,GAAI;CACC;CACL,WAAW,6KAA6K;CACxL,SAAS,gBAAgB;EAAE,GAAG;EAAO;EAAS;CAAW,CAAC;AAC7D,CAAA,CAET;AAEA,cAAY,cAAc;AAE1B,MAAaC,SAAO,YACf,EAAE,UAAU,QAAQ,YAAY,SAAS,GAAG,SAAS,QAClD,oBAACC,MAAD;CACI,GAAI;CACJ,GAAI;CACC;CACL,MAAM,YAAY,YAAY,OAAO;CACrC,WAAU;CACV,SAAS,gBAAgB;EAAE,GAAG;EAAO;EAAS;CAAW,CAAC;AAC7D,CAAA,CAET;AAEA,OAAK,cAAc;AAEnB,SAAS,gBAAgB,EACrB,MACA,YACA,SACA,UACA,QACA,YACuC;CACvC,QAAQ,UAAU;EACd,IAAI,YAAY,MAAM,gBAAgB;EAEtC,UAAU,KAAK;EAEf,IACI,CAAC,cACD,CAAC,QACD,MAAM,oBACN,MAAM,WAAW,KACjB,MAAM,WACN,MAAM,WACN,MAAM,YACN,MAAM,UACN,YACC,UAAU,WAAW,WACrB,aAAa,KAAA,KAAa,aAAa,OAExC;EAEJ,MAAM,eAAe;EACrB,WAAW,IAAI;CACnB;AACJ;;AAGA,SAAgB,WAAW,EAAE,MAAM,YAAoD;CACnF,OACI,oBAAC,KAAD;EACI,GAAI;EACE;EACN,QAAO;EACP,KAAI;EACJ,WAAU;EAET;CACF,CAAA;AAEX"}
@@ -0,0 +1,53 @@
1
+ import { HTMLAttributes } from "react";
2
+ declare const textStyles: {
3
+ readonly body: 'text-sm leading-5';
4
+ readonly description: 'text-[15px] leading-6';
5
+ readonly caption: 'text-xs leading-4';
6
+ readonly label: 'text-sm font-medium leading-5';
7
+ readonly overline: 'text-[11px] font-semibold uppercase leading-4 tracking-[0.08em]';
8
+ readonly metric: 'text-2xl font-semibold leading-8 tracking-[-0.02em] tabular-nums';
9
+ /** The paragraph under a hero or section title. */
10
+ readonly lead: 'text-[17px] leading-[1.6] tracking-[-0.011em] sm:text-lg sm:leading-[1.6] text-pretty';
11
+ /** Running copy on marketing pages. */
12
+ readonly prose: 'text-[15px] leading-[1.65] tracking-[-0.006em] text-pretty';
13
+ };
14
+ /** T3's headings: semibold with tightening tracking as they grow; the hero takes t3.codes' display setting. */
15
+ declare const headingStyles: {
16
+ readonly page: 'text-[1.375rem] font-semibold leading-7 tracking-[-0.02em]';
17
+ readonly section: 'text-base font-semibold leading-6 tracking-[-0.01em]';
18
+ readonly subsection: 'text-[15px] font-semibold leading-6 tracking-[-0.005em]';
19
+ readonly title: 'text-sm font-semibold leading-5';
20
+ readonly label: 'text-sm font-semibold leading-5';
21
+ readonly hero: 'text-3xl font-semibold leading-[1.05] tracking-[-0.035em] [text-box:trim-both_cap_alphabetic] sm:text-4xl lg:text-[2.875rem]';
22
+ /** A page's one big statement. */
23
+ readonly display: 'text-[2.625rem] font-semibold leading-[1.04] tracking-[-0.036em] text-balance sm:text-6xl lg:text-[4.5rem] xl:text-[5rem]';
24
+ /** A marketing section's title. */
25
+ readonly headline: 'text-[1.875rem] font-semibold leading-[1.08] tracking-[-0.035em] text-balance sm:text-[2.5rem] lg:text-[3rem]';
26
+ /** A feature's title inside a section. */
27
+ readonly feature: 'text-xl font-semibold leading-7 tracking-[-0.02em] text-balance sm:text-2xl sm:leading-8';
28
+ };
29
+ declare const tones: {
30
+ readonly default: 'text-base-content';
31
+ readonly muted: 'text-base-700';
32
+ readonly soft: 'text-base-800';
33
+ readonly danger: 'text-danger';
34
+ readonly warning: 'text-warning';
35
+ readonly success: 'text-success';
36
+ };
37
+ interface TypographyProps extends HTMLAttributes<HTMLElement> {
38
+ loading?: boolean;
39
+ tone?: keyof typeof tones;
40
+ truncate?: boolean;
41
+ }
42
+ export interface TextProps extends TypographyProps {
43
+ as?: 'p' | 'span' | 'div';
44
+ variant?: keyof typeof textStyles;
45
+ }
46
+ export declare function Text({ as: Tag, variant, tone, truncate, loading, className, children, ...props }: TextProps): import("react").JSX.Element;
47
+ export interface HeadingProps extends TypographyProps {
48
+ as?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
49
+ variant?: keyof typeof headingStyles;
50
+ }
51
+ export declare function Heading({ as: Tag, variant, tone, truncate, loading, className, children, ...props }: HeadingProps): import("react").JSX.Element;
52
+ export {};
53
+ //# sourceMappingURL=Typography.d.ts.map
@@ -0,0 +1,67 @@
1
+ import { SkeletonLoader } from "../feedback/SkeletonLoader.js";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ // src/typography/Typography.tsx
4
+ const textStyles = {
5
+ body: "text-sm leading-5",
6
+ description: "text-[15px] leading-6",
7
+ caption: "text-xs leading-4",
8
+ label: "text-sm font-medium leading-5",
9
+ overline: "text-[11px] font-semibold uppercase leading-4 tracking-[0.08em]",
10
+ metric: "text-2xl font-semibold leading-8 tracking-[-0.02em] tabular-nums",
11
+ /** The paragraph under a hero or section title. */
12
+ lead: "text-[17px] leading-[1.6] tracking-[-0.011em] sm:text-lg sm:leading-[1.6] text-pretty",
13
+ /** Running copy on marketing pages. */
14
+ prose: "text-[15px] leading-[1.65] tracking-[-0.006em] text-pretty"
15
+ };
16
+ /** T3's headings: semibold with tightening tracking as they grow; the hero takes t3.codes' display setting. */
17
+ const headingStyles = {
18
+ page: "text-[1.375rem] font-semibold leading-7 tracking-[-0.02em]",
19
+ section: "text-base font-semibold leading-6 tracking-[-0.01em]",
20
+ subsection: "text-[15px] font-semibold leading-6 tracking-[-0.005em]",
21
+ title: "text-sm font-semibold leading-5",
22
+ label: "text-sm font-semibold leading-5",
23
+ hero: "text-3xl font-semibold leading-[1.05] tracking-[-0.035em] [text-box:trim-both_cap_alphabetic] sm:text-4xl lg:text-[2.875rem]",
24
+ /** A page's one big statement. */
25
+ display: "text-[2.625rem] font-semibold leading-[1.04] tracking-[-0.036em] text-balance sm:text-6xl lg:text-[4.5rem] xl:text-[5rem]",
26
+ /** A marketing section's title. */
27
+ headline: "text-[1.875rem] font-semibold leading-[1.08] tracking-[-0.035em] text-balance sm:text-[2.5rem] lg:text-[3rem]",
28
+ /** A feature's title inside a section. */
29
+ feature: "text-xl font-semibold leading-7 tracking-[-0.02em] text-balance sm:text-2xl sm:leading-8"
30
+ };
31
+ const tones = {
32
+ default: "text-base-content",
33
+ muted: "text-base-700",
34
+ soft: "text-base-800",
35
+ danger: "text-danger",
36
+ warning: "text-warning",
37
+ success: "text-success"
38
+ };
39
+ function Text({ as: Tag = "p", variant = "body", tone = "default", truncate, loading, className = "", children, ...props }) {
40
+ return /* @__PURE__ */ jsx(Tag, {
41
+ ...props,
42
+ className: `${textStyles[variant]} ${tones[tone]} ${tone === "muted" && (variant === "lead" || variant === "prose") ? "dark:text-[#a3a3aa]" : ""} ${truncate ? "truncate" : ""} ${loading ? `relative ${Tag === "span" ? "inline-block w-full" : ""}` : ""} ${className}`,
43
+ children: loading ? /* @__PURE__ */ jsx(LoadingText, {}) : children
44
+ });
45
+ }
46
+ function Heading({ as: Tag = "h2", variant = "section", tone = "default", truncate, loading, className = "", children, ...props }) {
47
+ return /* @__PURE__ */ jsx(Tag, {
48
+ ...props,
49
+ className: `${headingStyles[variant]} ${tones[tone]} ${truncate ? "truncate" : ""} ${loading ? "relative" : ""} ${className}`,
50
+ children: loading ? /* @__PURE__ */ jsx(LoadingText, { heading: variant === "hero" }) : children
51
+ });
52
+ }
53
+ /** An invisible glyph retains the font's line box, including cap-height trimming. */
54
+ function LoadingText({ heading = false }) {
55
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
56
+ "aria-hidden": "true",
57
+ className: "invisible",
58
+ children: "\xA0"
59
+ }), /* @__PURE__ */ jsx("span", {
60
+ "aria-hidden": "true",
61
+ className: "absolute inset-0 flex items-center",
62
+ children: /* @__PURE__ */ jsx(SkeletonLoader.Shape, { presentation: heading ? "heading" : "line" })
63
+ })] });
64
+ }
65
+ export { Heading, Text };
66
+
67
+ //# sourceMappingURL=Typography.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Typography.js","names":[],"sources":["../../src/typography/Typography.tsx"],"sourcesContent":["import type { HTMLAttributes } from 'react';\n\nimport { SkeletonLoader } from '../feedback/SkeletonLoader';\n\nconst textStyles = {\n body: 'text-sm leading-5',\n description: 'text-[15px] leading-6',\n caption: 'text-xs leading-4',\n label: 'text-sm font-medium leading-5',\n overline: 'text-[11px] font-semibold uppercase leading-4 tracking-[0.08em]',\n metric: 'text-2xl font-semibold leading-8 tracking-[-0.02em] tabular-nums',\n /** The paragraph under a hero or section title. */\n lead: 'text-[17px] leading-[1.6] tracking-[-0.011em] sm:text-lg sm:leading-[1.6] text-pretty',\n /** Running copy on marketing pages. */\n prose: 'text-[15px] leading-[1.65] tracking-[-0.006em] text-pretty',\n} as const;\n\n/** T3's headings: semibold with tightening tracking as they grow; the hero takes t3.codes' display setting. */\nconst headingStyles = {\n page: 'text-[1.375rem] font-semibold leading-7 tracking-[-0.02em]',\n section: 'text-base font-semibold leading-6 tracking-[-0.01em]',\n subsection: 'text-[15px] font-semibold leading-6 tracking-[-0.005em]',\n title: 'text-sm font-semibold leading-5',\n label: 'text-sm font-semibold leading-5',\n hero: 'text-3xl font-semibold leading-[1.05] tracking-[-0.035em] [text-box:trim-both_cap_alphabetic] sm:text-4xl lg:text-[2.875rem]',\n /** A page's one big statement. */\n display:\n 'text-[2.625rem] font-semibold leading-[1.04] tracking-[-0.036em] text-balance sm:text-6xl lg:text-[4.5rem] xl:text-[5rem]',\n /** A marketing section's title. */\n headline:\n 'text-[1.875rem] font-semibold leading-[1.08] tracking-[-0.035em] text-balance sm:text-[2.5rem] lg:text-[3rem]',\n /** A feature's title inside a section. */\n feature: 'text-xl font-semibold leading-7 tracking-[-0.02em] text-balance sm:text-2xl sm:leading-8',\n} as const;\n\nconst tones = {\n default: 'text-base-content',\n muted: 'text-base-700',\n soft: 'text-base-800',\n danger: 'text-danger',\n warning: 'text-warning',\n success: 'text-success',\n} as const;\n\ninterface TypographyProps extends HTMLAttributes<HTMLElement> {\n loading?: boolean;\n tone?: keyof typeof tones;\n truncate?: boolean;\n}\n\nexport interface TextProps extends TypographyProps {\n as?: 'p' | 'span' | 'div';\n variant?: keyof typeof textStyles;\n}\n\nexport function Text({\n as: Tag = 'p',\n variant = 'body',\n tone = 'default',\n truncate,\n loading,\n className = '',\n children,\n ...props\n}: TextProps) {\n return (\n <Tag\n {...props}\n className={`${textStyles[variant]} ${tones[tone]} ${tone === 'muted' && (variant === 'lead' || variant === 'prose') ? 'dark:text-[#a3a3aa]' : ''} ${truncate ? 'truncate' : ''} ${loading ? `relative ${Tag === 'span' ? 'inline-block w-full' : ''}` : ''} ${className}`}\n >\n {loading ? <LoadingText /> : children}\n </Tag>\n );\n}\n\nexport interface HeadingProps extends TypographyProps {\n as?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n variant?: keyof typeof headingStyles;\n}\n\nexport function Heading({\n as: Tag = 'h2',\n variant = 'section',\n tone = 'default',\n truncate,\n loading,\n className = '',\n children,\n ...props\n}: HeadingProps) {\n return (\n <Tag\n {...props}\n className={`${headingStyles[variant]} ${tones[tone]} ${truncate ? 'truncate' : ''} ${loading ? 'relative' : ''} ${className}`}\n >\n {loading ? <LoadingText heading={variant === 'hero'} /> : children}\n </Tag>\n );\n}\n\n/** An invisible glyph retains the font's line box, including cap-height trimming. */\nfunction LoadingText({ heading = false }: { heading?: boolean }) {\n return (\n <>\n <span aria-hidden=\"true\" className=\"invisible\">\n &nbsp;\n </span>\n <span aria-hidden=\"true\" className=\"absolute inset-0 flex items-center\">\n <SkeletonLoader.Shape presentation={heading ? 'heading' : 'line'} />\n </span>\n </>\n );\n}\n"],"mappings":";;;AAIA,MAAM,aAAa;CACf,MAAM;CACN,aAAa;CACb,SAAS;CACT,OAAO;CACP,UAAU;CACV,QAAQ;;CAER,MAAM;;CAEN,OAAO;AACX;;AAGA,MAAM,gBAAgB;CAClB,MAAM;CACN,SAAS;CACT,YAAY;CACZ,OAAO;CACP,OAAO;CACP,MAAM;;CAEN,SACI;;CAEJ,UACI;;CAEJ,SAAS;AACb;AAEA,MAAM,QAAQ;CACV,SAAS;CACT,OAAO;CACP,MAAM;CACN,QAAQ;CACR,SAAS;CACT,SAAS;AACb;AAaA,SAAgB,KAAK,EACjB,IAAI,MAAM,KACV,UAAU,QACV,OAAO,WACP,UACA,SACA,YAAY,IACZ,UACA,GAAG,SACO;CACV,OACI,oBAAC,KAAD;EACI,GAAI;EACJ,WAAW,GAAG,WAAW,SAAS,GAAG,MAAM,MAAM,GAAG,SAAS,YAAY,YAAY,UAAU,YAAY,WAAW,wBAAwB,GAAG,GAAG,WAAW,aAAa,GAAG,GAAG,UAAU,YAAY,QAAQ,SAAS,wBAAwB,OAAO,GAAG,GAAG;EAE7P,UAAA,UAAU,oBAAC,aAAD,CAAc,CAAA,IAAI;CAC5B,CAAA;AAEb;AAOA,SAAgB,QAAQ,EACpB,IAAI,MAAM,MACV,UAAU,WACV,OAAO,WACP,UACA,SACA,YAAY,IACZ,UACA,GAAG,SACU;CACb,OACI,oBAAC,KAAD;EACI,GAAI;EACJ,WAAW,GAAG,cAAc,SAAS,GAAG,MAAM,MAAM,GAAG,WAAW,aAAa,GAAG,GAAG,UAAU,aAAa,GAAG,GAAG;EAEjH,UAAA,UAAU,oBAAC,aAAD,EAAa,SAAS,YAAY,OAAS,CAAA,IAAI;CACzD,CAAA;AAEb;;AAGA,SAAS,YAAY,EAAE,UAAU,SAAgC;CAC7D,OACI,qBAAA,UAAA,EAAA,UAAA,CACI,oBAAC,QAAD;EAAM,eAAY;EAAO,WAAU;EAAY,UAAA;CAEzC,CAAA,GACN,oBAAC,QAAD;EAAM,eAAY;EAAO,WAAU;EAC/B,UAAA,oBAAC,eAAe,OAAhB,EAAsB,cAAc,UAAU,YAAY,OAAS,CAAA;CACjE,CAAA,CACR,EAAA,CAAA;AAEV"}
@@ -0,0 +1,4 @@
1
+ import { InlineLink, Link as Link$1, LinkBox as LinkBox$1, LinkOverlay as LinkOverlay$1, LinkOverlayProps as LinkOverlayProps$1, LinkProps as LinkProps$1 } from "./Link.js";
2
+ import { Heading, HeadingProps, Text, TextProps } from "./Typography.js";
3
+ import { Code as Code$1 } from "@ninna-ui/primitives";
4
+ export { Code$1 as Code, Heading, type HeadingProps, InlineLink, Link$1 as Link, LinkBox$1 as LinkBox, LinkOverlay$1 as LinkOverlay, type LinkOverlayProps$1 as LinkOverlayProps, type LinkProps$1 as LinkProps, Text, type TextProps };
@@ -0,0 +1,4 @@
1
+ import { Heading, Text } from "./Typography.js";
2
+ import { InlineLink, Link as Link$1, LinkBox as LinkBox$1, LinkOverlay as LinkOverlay$1 } from "./Link.js";
3
+ import { Code as Code$1 } from "@ninna-ui/primitives";
4
+ export { Code$1 as Code, Heading, InlineLink, Link$1 as Link, LinkBox$1 as LinkBox, LinkOverlay$1 as LinkOverlay, Text };
package/package.json CHANGED
@@ -1,6 +1,83 @@
1
1
  {
2
2
  "name": "@lar-works/design-system",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.1.0",
4
+ "description": "Lar's design system: tokens, base styles and every visual component the Lar web apps use.",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/maddec01/lar-web.git",
9
+ "directory": "packages/design-system"
10
+ },
11
+ "type": "module",
12
+ "sideEffects": [
13
+ "**/*.css"
14
+ ],
15
+ "exports": {
16
+ ".": {
17
+ "types": "./dist/index.d.ts",
18
+ "default": "./dist/index.js"
19
+ },
20
+ "./icons": {
21
+ "types": "./dist/icons.d.ts",
22
+ "default": "./dist/icons.js"
23
+ },
24
+ "./testing": {
25
+ "types": "./dist/testing.d.ts",
26
+ "default": "./dist/testing.js"
27
+ },
28
+ "./styles.css": "./src/styles.css"
29
+ },
30
+ "files": [
31
+ "dist",
32
+ "src",
33
+ "!src/**/*.test.tsx",
34
+ "!src/**/*.stories.tsx"
35
+ ],
36
+ "dependencies": {
37
+ "@ninna-ui/core": "^0.6.0",
38
+ "@ninna-ui/feedback": "^0.6.0",
39
+ "@ninna-ui/forms": "^0.6.0",
40
+ "@ninna-ui/layout": "^0.6.0",
41
+ "@ninna-ui/overlays": "^0.6.0",
42
+ "@ninna-ui/primitives": "^0.6.0",
43
+ "@ninna-ui/react-internal": "^0.6.0",
44
+ "@tanstack/react-virtual": "^3.14.26",
45
+ "lucide-react": "^1.70.0",
46
+ "qrcode-generator": "^2.0.4"
47
+ },
48
+ "peerDependencies": {
49
+ "react": "^19.2.0",
50
+ "react-dom": "^19.2.0",
51
+ "tailwindcss": "^4.3.0"
52
+ },
53
+ "devDependencies": {
54
+ "@lar-works/config": "0.1.0",
55
+ "@storybook/addon-a11y": "10.6.6",
56
+ "@storybook/addon-docs": "10.6.6",
57
+ "@storybook/addon-themes": "10.6.6",
58
+ "@storybook/react-vite": "10.6.6",
59
+ "@tailwindcss/vite": "^4.3.5",
60
+ "@testing-library/jest-dom": "^7.0.1",
61
+ "@testing-library/react": "^16.3.3",
62
+ "@testing-library/user-event": "^14.6.8",
63
+ "@types/node": "^24.19.2",
64
+ "@types/react": "^19.3.0",
65
+ "@types/react-dom": "^19.3.0",
66
+ "@vitejs/plugin-react": "^6.2.1",
67
+ "jsdom": "^30.1.3",
68
+ "react": "^19.3.1",
69
+ "react-dom": "^19.3.1",
70
+ "storybook": "10.6.6",
71
+ "tailwindcss": "^4.3.5",
72
+ "typescript": "^7.0.2",
73
+ "vite": "npm:@voidzero-dev/vite-plus-core@1.5.0",
74
+ "vite-plus": "1.5.0"
75
+ },
76
+ "scripts": {
77
+ "build": "vp pack",
78
+ "dev": "vp pack --watch",
79
+ "test": "vp test run",
80
+ "storybook": "storybook dev --port 6006",
81
+ "build-storybook": "storybook build --output-dir storybook-static"
82
+ }
6
83
  }