@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,14 @@
1
+ import { ReactNode } from "react";
2
+ type TextPreviewProps = {
3
+ loading: true;
4
+ } | {
5
+ loading?: false;
6
+ children?: ReactNode;
7
+ value: string;
8
+ moreLabel: string;
9
+ language?: string;
10
+ title: string;
11
+ };
12
+ export declare function TextPreview(props: TextPreviewProps): import("react").JSX.Element;
13
+ export {};
14
+ //# sourceMappingURL=TextPreview.d.ts.map
@@ -0,0 +1,46 @@
1
+ import { Button } from "../actions/Button.js";
2
+ import { Stack } from "../layout/Flow.js";
3
+ import { Modal } from "../overlays/Modal.js";
4
+ import { Text } from "../typography/Typography.js";
5
+ import { useState } from "react";
6
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
7
+ // src/display/TextPreview.tsx
8
+ function TextPreview(props) {
9
+ const [open, setOpen] = useState(false);
10
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs("div", {
11
+ className: "flex max-w-3xl min-w-0 items-center gap-3",
12
+ children: [/* @__PURE__ */ jsx(Text, {
13
+ lang: props.loading ? void 0 : props.language,
14
+ tone: "muted",
15
+ className: `min-w-0 truncate leading-6 ${props.loading ? "flex-1" : ""}`,
16
+ loading: props.loading,
17
+ children: !props.loading && props.value
18
+ }), props.loading ? /* @__PURE__ */ jsx(Text, {
19
+ className: "w-20 shrink-0 leading-6",
20
+ loading: true
21
+ }) : /* @__PURE__ */ jsx(Button, {
22
+ className: "h-auto shrink-0 px-0 py-0 text-sm leading-6 before:-inset-y-2.5",
23
+ "aria-haspopup": "dialog",
24
+ onClick: () => setOpen(true),
25
+ variant: "quiet",
26
+ children: props.moreLabel
27
+ })]
28
+ }), !props.loading && open ? /* @__PURE__ */ jsx(Modal, {
29
+ onClose: () => setOpen(false),
30
+ children: /* @__PURE__ */ jsx(Modal.Content, {
31
+ title: props.title,
32
+ children: /* @__PURE__ */ jsx(Modal.Body, { children: /* @__PURE__ */ jsxs(Stack, {
33
+ space: "section",
34
+ children: [props.children, /* @__PURE__ */ jsx(Text, {
35
+ lang: props.language,
36
+ className: "leading-7 text-pretty wrap-break-word whitespace-pre-line",
37
+ variant: "description",
38
+ children: props.value
39
+ })]
40
+ }) })
41
+ })
42
+ }) : null] });
43
+ }
44
+ export { TextPreview };
45
+
46
+ //# sourceMappingURL=TextPreview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextPreview.js","names":[],"sources":["../../src/display/TextPreview.tsx"],"sourcesContent":["import { type ReactNode, useState } from 'react';\n\nimport { Button } from '../actions/Button';\nimport { Stack } from '../layout/Flow';\nimport { Modal } from '../overlays/Modal';\nimport { Text } from '../typography/Typography';\n\ntype TextPreviewProps =\n | { loading: true }\n | {\n loading?: false;\n children?: ReactNode;\n value: string;\n moreLabel: string;\n language?: string;\n title: string;\n };\n\nexport function TextPreview(props: TextPreviewProps) {\n const [open, setOpen] = useState(false);\n\n return (\n <>\n <div className=\"flex max-w-3xl min-w-0 items-center gap-3\">\n <Text\n lang={props.loading ? undefined : props.language}\n tone=\"muted\"\n className={`min-w-0 truncate leading-6 ${props.loading ? 'flex-1' : ''}`}\n loading={props.loading}\n >\n {!props.loading && props.value}\n </Text>\n {props.loading ? (\n <Text className=\"w-20 shrink-0 leading-6\" loading />\n ) : (\n <Button\n className=\"h-auto shrink-0 px-0 py-0 text-sm leading-6 before:-inset-y-2.5\"\n aria-haspopup=\"dialog\"\n onClick={() => setOpen(true)}\n variant=\"quiet\"\n >\n {props.moreLabel}\n </Button>\n )}\n </div>\n {!props.loading && open ? (\n <Modal onClose={() => setOpen(false)}>\n <Modal.Content title={props.title}>\n <Modal.Body>\n <Stack space=\"section\">\n {props.children}\n <Text\n lang={props.language}\n className=\"leading-7 text-pretty wrap-break-word whitespace-pre-line\"\n variant=\"description\"\n >\n {props.value}\n </Text>\n </Stack>\n </Modal.Body>\n </Modal.Content>\n </Modal>\n ) : null}\n </>\n );\n}\n"],"mappings":";;;;;;;AAkBA,SAAgB,YAAY,OAAyB;CACjD,MAAM,CAAC,MAAM,WAAW,SAAS,KAAK;CAEtC,OACI,qBAAA,YAAA,EAAA,UAAA,CACI,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACI,oBAAC,MAAD;GACI,MAAM,MAAM,UAAU,KAAA,IAAY,MAAM;GACxC,MAAK;GACL,WAAW,8BAA8B,MAAM,UAAU,WAAW;GACpE,SAAS,MAAM;GAEd,UAAA,CAAC,MAAM,WAAW,MAAM;EACvB,CAAA,GACL,MAAM,UACH,oBAAC,MAAD;GAAM,WAAU;GAA0B,SAAA;EAAS,CAAA,IAEnD,oBAAC,QAAD;GACI,WAAU;GACV,iBAAc;GACd,eAAe,QAAQ,IAAI;GAC3B,SAAQ;GAEP,UAAA,MAAM;EACH,CAAA,CAEX;CACJ,CAAA,GAAA,CAAC,MAAM,WAAW,OACf,oBAAC,OAAD;EAAO,eAAe,QAAQ,KAAK;EAC/B,UAAA,oBAAC,MAAM,SAAP;GAAe,OAAO,MAAM;GACxB,UAAA,oBAAC,MAAM,MAAP,EAAA,UACI,qBAAC,OAAD;IAAO,OAAM;IAAb,UAAA,CACK,MAAM,UACP,oBAAC,MAAD;KACI,MAAM,MAAM;KACZ,WAAU;KACV,SAAQ;KAEP,UAAA,MAAM;IACL,CAAA,CACH;GACC,CAAA,EAAA,CAAA;EACD,CAAA;CACZ,CAAA,IACP,IACN,EAAA,CAAA;AAEV"}
@@ -0,0 +1,19 @@
1
+ export interface TimeSeriesPoint {
2
+ timestamp: number;
3
+ lar: number | null;
4
+ host: number | null;
5
+ }
6
+ export declare function TimeSeriesChartSkeleton(): import("react").JSX.Element;
7
+ interface TimeSeriesChartProps {
8
+ label: string;
9
+ larLabel: string;
10
+ hostLabel: string;
11
+ points: readonly TimeSeriesPoint[];
12
+ formatValue: (value: number) => string;
13
+ maximum?: number;
14
+ unavailableLabel: string;
15
+ }
16
+ /** Host and lar series, each drawn only when the server measured it, with gaps for missed samples. */
17
+ export declare function TimeSeriesChart({ label, larLabel, hostLabel, points, formatValue, maximum, unavailableLabel }: TimeSeriesChartProps): import("react").JSX.Element | null;
18
+ export {};
19
+ //# sourceMappingURL=TimeSeriesChart.d.ts.map
@@ -0,0 +1,163 @@
1
+ import { SkeletonLoader } from "../feedback/SkeletonLoader.js";
2
+ import { useState } from "react";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ // src/display/TimeSeriesChart.tsx
5
+ function TimeSeriesChartSkeleton() {
6
+ return /* @__PURE__ */ jsxs("figure", {
7
+ className: "border-base-300 bg-base-100 min-w-0 rounded-lg border p-4",
8
+ children: [
9
+ /* @__PURE__ */ jsx("div", {
10
+ className: "mb-3 h-5",
11
+ children: /* @__PURE__ */ jsx(SkeletonLoader.Shape, { width: "short" })
12
+ }),
13
+ /* @__PURE__ */ jsx(SkeletonLoader.Shape, { presentation: "chart" }),
14
+ /* @__PURE__ */ jsxs("div", {
15
+ className: "mt-3 flex h-4 items-center gap-5",
16
+ children: [/* @__PURE__ */ jsx(SkeletonLoader.Shape, { width: "short" }), /* @__PURE__ */ jsx(SkeletonLoader.Shape, { width: "short" })]
17
+ }),
18
+ /* @__PURE__ */ jsxs("div", {
19
+ className: "mt-1 flex h-4 items-center justify-between",
20
+ children: [/* @__PURE__ */ jsx(SkeletonLoader.Shape, { width: "short" }), /* @__PURE__ */ jsx(SkeletonLoader.Shape, { width: "short" })]
21
+ })
22
+ ]
23
+ });
24
+ }
25
+ const colors = {
26
+ host: "var(--color-base-600)",
27
+ lar: "var(--color-primary)"
28
+ };
29
+ const time = (timestamp) => new Date(timestamp).toLocaleTimeString();
30
+ /** Host and lar series, each drawn only when the server measured it, with gaps for missed samples. */
31
+ function TimeSeriesChart({ label, larLabel, hostLabel, points, formatValue, maximum, unavailableLabel }) {
32
+ const [hovered, setHovered] = useState(null);
33
+ const labels = {
34
+ host: hostLabel,
35
+ lar: larLabel
36
+ };
37
+ const series = ["host", "lar"].filter((kind) => points.some((point) => point[kind] !== null));
38
+ if (series.length === 0) return null;
39
+ const observed = points.flatMap((point) => series.map((kind) => point[kind])).filter((value) => value !== null);
40
+ const upper = Math.max(maximum ?? 0, ...observed, 1);
41
+ const latest = points.at(-1);
42
+ const first = points[0]?.timestamp ?? 0;
43
+ const last = latest?.timestamp ?? first;
44
+ const span = Math.max(last - first, 1);
45
+ const x = (timestamp) => 2 + (timestamp - first) / span * 96;
46
+ const y = (value) => 38 - Math.max(0, value) / upper * 36;
47
+ const path = (kind) => points.map((point, index) => {
48
+ const value = point[kind];
49
+ if (value === null) return "";
50
+ const start = points[index - 1]?.[kind] == null;
51
+ return `${start ? "M" : "L"}${x(point.timestamp).toFixed(2)},${y(value).toFixed(2)}${start ? "h0" : ""}`;
52
+ }).join(" ");
53
+ const latestText = (kind) => latest?.[kind] == null ? unavailableLabel : formatValue(latest[kind]);
54
+ const swatch = (kind) => /* @__PURE__ */ jsx("span", {
55
+ "aria-hidden": "true",
56
+ className: "size-2 shrink-0 rounded-full",
57
+ style: { backgroundColor: colors[kind] }
58
+ });
59
+ const active = hovered === null ? void 0 : points[hovered];
60
+ const readings = active ? series.flatMap((kind) => {
61
+ const value = active[kind];
62
+ return value === null ? [] : [{
63
+ kind,
64
+ value
65
+ }];
66
+ }) : [];
67
+ const trackPointer = (event) => {
68
+ const bounds = event.currentTarget.getBoundingClientRect();
69
+ const target = (event.clientX - bounds.left) / bounds.width * 100;
70
+ const distance = (point) => Math.abs(x(point.timestamp) - target);
71
+ setHovered(points.reduce((best, point, index) => distance(point) < distance(points[best] ?? point) ? index : best, 0));
72
+ };
73
+ return /* @__PURE__ */ jsxs("figure", {
74
+ className: "border-base-300 bg-base-100 min-w-0 rounded-lg border p-4",
75
+ children: [
76
+ /* @__PURE__ */ jsx("figcaption", {
77
+ className: "text-base-content mb-3 text-sm font-medium",
78
+ children: label
79
+ }),
80
+ /* @__PURE__ */ jsxs("div", {
81
+ className: "relative h-36 w-full touch-pan-y",
82
+ onPointerMove: trackPointer,
83
+ onPointerLeave: () => setHovered(null),
84
+ children: [/* @__PURE__ */ jsxs("svg", {
85
+ "aria-label": `${label}: ${series.map((kind) => `${labels[kind]} ${latestText(kind)}`).join(", ")}`,
86
+ className: "size-full overflow-visible",
87
+ preserveAspectRatio: "none",
88
+ role: "img",
89
+ viewBox: "0 0 100 40",
90
+ children: [/* @__PURE__ */ jsx("path", {
91
+ d: "M2,38 H98 M2,20 H98 M2,2 H98",
92
+ fill: "none",
93
+ stroke: "currentColor",
94
+ strokeOpacity: "0.12",
95
+ strokeWidth: "0.25"
96
+ }), series.map((kind) => /* @__PURE__ */ jsx("path", {
97
+ d: path(kind),
98
+ fill: "none",
99
+ stroke: colors[kind],
100
+ strokeLinecap: "round",
101
+ strokeWidth: "2",
102
+ vectorEffect: "non-scaling-stroke"
103
+ }, kind))]
104
+ }), active && readings.length > 0 ? /* @__PURE__ */ jsxs("div", {
105
+ "aria-hidden": "true",
106
+ className: "pointer-events-none absolute inset-0",
107
+ children: [
108
+ /* @__PURE__ */ jsx("div", {
109
+ className: "bg-base-content/20 absolute inset-y-0 w-px -translate-x-1/2",
110
+ style: { left: `${x(active.timestamp)}%` }
111
+ }),
112
+ readings.map(({ kind, value }) => /* @__PURE__ */ jsx("div", {
113
+ className: "ring-base-50 absolute size-2.5 -translate-x-1/2 -translate-y-1/2 rounded-full ring-2",
114
+ style: {
115
+ left: `${x(active.timestamp)}%`,
116
+ top: `${y(value) / 40 * 100}%`,
117
+ backgroundColor: colors[kind]
118
+ }
119
+ }, kind)),
120
+ /* @__PURE__ */ jsxs("div", {
121
+ className: `border-base-300 bg-base-100 absolute top-0 z-10 w-max rounded-md border px-2 py-1 text-xs shadow-sm ${x(active.timestamp) > 50 ? "-ml-2 -translate-x-full" : "ml-2"}`,
122
+ style: { left: `${x(active.timestamp)}%` },
123
+ children: [/* @__PURE__ */ jsx("div", {
124
+ className: "text-base-600 tabular-nums",
125
+ children: time(active.timestamp)
126
+ }), readings.map(({ kind, value }) => /* @__PURE__ */ jsxs("div", {
127
+ className: "text-base-content flex items-center gap-1.5 tabular-nums",
128
+ children: [
129
+ swatch(kind),
130
+ labels[kind],
131
+ ": ",
132
+ formatValue(value)
133
+ ]
134
+ }, kind))]
135
+ })
136
+ ]
137
+ }) : null]
138
+ }),
139
+ /* @__PURE__ */ jsxs("div", {
140
+ className: "text-base-700 mt-3 flex flex-wrap items-center gap-x-5 gap-y-1 text-xs",
141
+ children: [series.map((kind) => /* @__PURE__ */ jsxs("span", {
142
+ className: "inline-flex items-center gap-1.5",
143
+ children: [
144
+ swatch(kind),
145
+ labels[kind],
146
+ ": ",
147
+ latestText(kind)
148
+ ]
149
+ }, kind)), /* @__PURE__ */ jsx("span", {
150
+ className: "ml-auto tabular-nums",
151
+ children: formatValue(upper)
152
+ })]
153
+ }),
154
+ points.length > 1 ? /* @__PURE__ */ jsxs("div", {
155
+ className: "text-base-600 mt-1 flex justify-between text-xs tabular-nums",
156
+ children: [/* @__PURE__ */ jsx("span", { children: time(first) }), /* @__PURE__ */ jsx("span", { children: time(last) })]
157
+ }) : null
158
+ ]
159
+ });
160
+ }
161
+ export { TimeSeriesChart, TimeSeriesChartSkeleton };
162
+
163
+ //# sourceMappingURL=TimeSeriesChart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimeSeriesChart.js","names":[],"sources":["../../src/display/TimeSeriesChart.tsx"],"sourcesContent":["import { type PointerEvent, useState } from 'react';\n\nimport { SkeletonLoader } from '../feedback/SkeletonLoader';\n\nexport interface TimeSeriesPoint {\n timestamp: number;\n lar: number | null;\n host: number | null;\n}\n\nexport function TimeSeriesChartSkeleton() {\n return (\n <figure className=\"border-base-300 bg-base-100 min-w-0 rounded-lg border p-4\">\n <div className=\"mb-3 h-5\">\n <SkeletonLoader.Shape width=\"short\" />\n </div>\n <SkeletonLoader.Shape presentation=\"chart\" />\n <div className=\"mt-3 flex h-4 items-center gap-5\">\n <SkeletonLoader.Shape width=\"short\" />\n <SkeletonLoader.Shape width=\"short\" />\n </div>\n <div className=\"mt-1 flex h-4 items-center justify-between\">\n <SkeletonLoader.Shape width=\"short\" />\n <SkeletonLoader.Shape width=\"short\" />\n </div>\n </figure>\n );\n}\n\ntype Series = 'host' | 'lar';\n\ninterface TimeSeriesChartProps {\n label: string;\n larLabel: string;\n hostLabel: string;\n points: readonly TimeSeriesPoint[];\n formatValue: (value: number) => string;\n maximum?: number;\n unavailableLabel: string;\n}\n\nconst colors: Record<Series, string> = { host: 'var(--color-base-600)', lar: 'var(--color-primary)' };\nconst time = (timestamp: number) => new Date(timestamp).toLocaleTimeString();\n\n/** Host and lar series, each drawn only when the server measured it, with gaps for missed samples. */\nexport function TimeSeriesChart({\n label,\n larLabel,\n hostLabel,\n points,\n formatValue,\n maximum,\n unavailableLabel,\n}: TimeSeriesChartProps) {\n const [hovered, setHovered] = useState<number | null>(null);\n const labels: Record<Series, string> = { host: hostLabel, lar: larLabel };\n const series = (['host', 'lar'] as const).filter((kind) => points.some((point) => point[kind] !== null));\n\n if (series.length === 0) return null;\n\n const observed = points.flatMap((point) => series.map((kind) => point[kind])).filter((value) => value !== null);\n const upper = Math.max(maximum ?? 0, ...observed, 1);\n const latest = points.at(-1);\n const first = points[0]?.timestamp ?? 0;\n const last = latest?.timestamp ?? first;\n const span = Math.max(last - first, 1);\n // Plot coordinates in percent of the viewBox, shared by the SVG lines and the HTML hover layer.\n const x = (timestamp: number) => 2 + ((timestamp - first) / span) * 96;\n const y = (value: number) => 38 - (Math.max(0, value) / upper) * 36;\n const path = (kind: Series) =>\n points\n .map((point, index) => {\n const value = point[kind];\n\n if (value === null) return '';\n\n // A sample after a gap starts a segment; a zero-length one draws as a dot through the round cap.\n const start = points[index - 1]?.[kind] == null;\n\n return `${start ? 'M' : 'L'}${x(point.timestamp).toFixed(2)},${y(value).toFixed(2)}${start ? 'h0' : ''}`;\n })\n .join(' ');\n const latestText = (kind: Series) => (latest?.[kind] == null ? unavailableLabel : formatValue(latest[kind]));\n const swatch = (kind: Series) => (\n <span aria-hidden=\"true\" className=\"size-2 shrink-0 rounded-full\" style={{ backgroundColor: colors[kind] }} />\n );\n const active = hovered === null ? undefined : points[hovered];\n const readings = active\n ? series.flatMap((kind) => {\n const value = active[kind];\n\n return value === null ? [] : [{ kind, value }];\n })\n : [];\n const trackPointer = (event: PointerEvent<HTMLDivElement>) => {\n const bounds = event.currentTarget.getBoundingClientRect();\n const target = ((event.clientX - bounds.left) / bounds.width) * 100;\n const distance = (point: TimeSeriesPoint) => Math.abs(x(point.timestamp) - target);\n\n setHovered(\n points.reduce(\n (best, point, index) => (distance(point) < distance(points[best] ?? point) ? index : best),\n 0,\n ),\n );\n };\n\n return (\n <figure className=\"border-base-300 bg-base-100 min-w-0 rounded-lg border p-4\">\n <figcaption className=\"text-base-content mb-3 text-sm font-medium\">{label}</figcaption>\n <div\n className=\"relative h-36 w-full touch-pan-y\"\n onPointerMove={trackPointer}\n onPointerLeave={() => setHovered(null)}\n >\n <svg\n aria-label={`${label}: ${series.map((kind) => `${labels[kind]} ${latestText(kind)}`).join(', ')}`}\n className=\"size-full overflow-visible\"\n preserveAspectRatio=\"none\"\n role=\"img\"\n viewBox=\"0 0 100 40\"\n >\n <path\n d=\"M2,38 H98 M2,20 H98 M2,2 H98\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeOpacity=\"0.12\"\n strokeWidth=\"0.25\"\n />\n {series.map((kind) => (\n <path\n key={kind}\n d={path(kind)}\n fill=\"none\"\n stroke={colors[kind]}\n strokeLinecap=\"round\"\n strokeWidth=\"2\"\n vectorEffect=\"non-scaling-stroke\"\n />\n ))}\n </svg>\n {active && readings.length > 0 ? (\n <div aria-hidden=\"true\" className=\"pointer-events-none absolute inset-0\">\n <div\n className=\"bg-base-content/20 absolute inset-y-0 w-px -translate-x-1/2\"\n style={{ left: `${x(active.timestamp)}%` }}\n />\n {readings.map(({ kind, value }) => (\n <div\n key={kind}\n className=\"ring-base-50 absolute size-2.5 -translate-x-1/2 -translate-y-1/2 rounded-full ring-2\"\n style={{\n left: `${x(active.timestamp)}%`,\n top: `${(y(value) / 40) * 100}%`,\n backgroundColor: colors[kind],\n }}\n />\n ))}\n <div\n className={`border-base-300 bg-base-100 absolute top-0 z-10 w-max rounded-md border px-2 py-1 text-xs shadow-sm ${x(active.timestamp) > 50 ? '-ml-2 -translate-x-full' : 'ml-2'}`}\n style={{ left: `${x(active.timestamp)}%` }}\n >\n <div className=\"text-base-600 tabular-nums\">{time(active.timestamp)}</div>\n {readings.map(({ kind, value }) => (\n <div key={kind} className=\"text-base-content flex items-center gap-1.5 tabular-nums\">\n {swatch(kind)}\n {labels[kind]}: {formatValue(value)}\n </div>\n ))}\n </div>\n </div>\n ) : null}\n </div>\n <div className=\"text-base-700 mt-3 flex flex-wrap items-center gap-x-5 gap-y-1 text-xs\">\n {series.map((kind) => (\n <span key={kind} className=\"inline-flex items-center gap-1.5\">\n {swatch(kind)}\n {labels[kind]}: {latestText(kind)}\n </span>\n ))}\n <span className=\"ml-auto tabular-nums\">{formatValue(upper)}</span>\n </div>\n {points.length > 1 ? (\n <div className=\"text-base-600 mt-1 flex justify-between text-xs tabular-nums\">\n <span>{time(first)}</span>\n <span>{time(last)}</span>\n </div>\n ) : null}\n </figure>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ // src/display/ToneTile.ts
2
+ /** A small square holding an icon, tinted by tone: T3 Code's 8% tint behind its foreground colour. */
3
+ const toneTileClasses = {
4
+ neutral: "bg-base-200 text-base-700 ring-1 ring-inset ring-base-300/70 dark:bg-base-300/60",
5
+ success: "bg-success/10 text-(--lar-success-text) dark:bg-success/16",
6
+ warning: "bg-warning/12 text-(--lar-warning-text) dark:bg-warning/16",
7
+ danger: "bg-danger/10 text-(--lar-danger-text) dark:bg-danger/16",
8
+ info: "bg-info/10 text-(--lar-info-text) dark:bg-info/16"
9
+ };
10
+ export { toneTileClasses };
11
+
12
+ //# sourceMappingURL=ToneTile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToneTile.js","names":[],"sources":["../../src/display/ToneTile.ts"],"sourcesContent":["import type { StatusTone } from '../feedback/StatusIndicator';\n\n/** A small square holding an icon, tinted by tone: T3 Code's 8% tint behind its foreground colour. */\nexport const toneTileClasses: Record<StatusTone, string> = {\n neutral: 'bg-base-200 text-base-700 ring-1 ring-inset ring-base-300/70 dark:bg-base-300/60',\n success: 'bg-success/10 text-(--lar-success-text) dark:bg-success/16',\n warning: 'bg-warning/12 text-(--lar-warning-text) dark:bg-warning/16',\n danger: 'bg-danger/10 text-(--lar-danger-text) dark:bg-danger/16',\n info: 'bg-info/10 text-(--lar-info-text) dark:bg-info/16',\n};\n"],"mappings":";;AAGA,MAAa,kBAA8C;CACvD,SAAS;CACT,SAAS;CACT,SAAS;CACT,QAAQ;CACR,MAAM;AACV"}
@@ -0,0 +1,38 @@
1
+ import { ActivityCard, ActivityCardSkeleton } from "./ActivityCard.js";
2
+ import { ItemAction } from "./ItemAction.js";
3
+ import { Artwork } from "./Artwork.js";
4
+ import { Avatar } from "./Avatar.js";
5
+ import { Badge, BadgeProps } from "./Badge.js";
6
+ import { BadgeList, BadgeListItem } from "./BadgeList.js";
7
+ import { BrandLink, BrandMark } from "./BrandMark.js";
8
+ import { ChangeList, ChangeListItem } from "./ChangeList.js";
9
+ import { CheckList, CheckListItem } from "./CheckList.js";
10
+ import { CodeBlock } from "./CodeBlock.js";
11
+ import { CopyButton } from "./CopyButton.js";
12
+ import { DataTable, DataTableCell, DataTableRow } from "./DataTable.js";
13
+ import { DetailHero, DetailHeroDetail, DetailHeroDetails, DetailHeroTags } from "./DetailHero.js";
14
+ import { DetailList } from "./DetailList.js";
15
+ import { DeviceCard } from "./DeviceCard.js";
16
+ import { Identity } from "./Identity.js";
17
+ import { ImageCard } from "./ImageCard.js";
18
+ import { ImagePicker, ImagePickerGrid, ImagePickerOption, ImageUpload } from "./ImagePicker.js";
19
+ import { InfoBox } from "./InfoBox.js";
20
+ import { InsetPanel } from "./InsetPanel.js";
21
+ import { Kbd } from "./Kbd.js";
22
+ import { KindIcon } from "./KindIcon.js";
23
+ import { NoticeCard } from "./NoticeCard.js";
24
+ import { PairingList, PairingListItem } from "./PairingList.js";
25
+ import { PathList } from "./PathList.js";
26
+ import { PeoplePreview } from "./PeoplePreview.js";
27
+ import { PropertySheet, PropertySheetRow, PropertySheetTag } from "./PropertySheet.js";
28
+ import { QrCode } from "./QrCode.js";
29
+ import { RadioChoice } from "./RadioChoice.js";
30
+ import { RatingLink } from "./RatingLink.js";
31
+ import { ResourceCard, ResourceCardSkeleton } from "./ResourceCard.js";
32
+ import { RowList, RowListItem } from "./RowList.js";
33
+ import { MeterLegend, MeterSegment, MeterTone, StackedMeter } from "./StackedMeter.js";
34
+ import { StatTile } from "./StatTile.js";
35
+ import { StepList } from "./StepList.js";
36
+ import { TextPreview } from "./TextPreview.js";
37
+ import { TimeSeriesChart, TimeSeriesChartSkeleton, TimeSeriesPoint } from "./TimeSeriesChart.js";
38
+ export { ActivityCard, ActivityCardSkeleton, Artwork, Avatar, Badge, BadgeList, type BadgeListItem, type BadgeProps, BrandLink, BrandMark, ChangeList, type ChangeListItem, CheckList, type CheckListItem, CodeBlock, CopyButton, DataTable, type DataTableCell, type DataTableRow, DetailHero, DetailHeroDetail, DetailHeroDetails, DetailHeroTags, DetailList, DeviceCard, Identity, ImageCard, ImagePicker, ImagePickerGrid, ImagePickerOption, ImageUpload, InfoBox, InsetPanel, ItemAction, Kbd, KindIcon, MeterLegend, type MeterSegment, type MeterTone, NoticeCard, PairingList, type PairingListItem, PathList, PeoplePreview, PropertySheet, type PropertySheetRow, type PropertySheetTag, QrCode, RadioChoice, RatingLink, ResourceCard, ResourceCardSkeleton, RowList, RowListItem, StackedMeter, StatTile, StepList, TextPreview, TimeSeriesChart, TimeSeriesChartSkeleton, type TimeSeriesPoint };
@@ -0,0 +1,15 @@
1
+ import { StatusTone } from "./StatusIndicator.js";
2
+ import { AlertProps } from "@ninna-ui/feedback";
3
+ type AlertProps$1 = Omit<AlertProps, 'color' | 'size' | 'variant'> & {
4
+ compact?: boolean;
5
+ /** Stays below the application header while its containing region is visible. */
6
+ sticky?: boolean;
7
+ tone?: Exclude<StatusTone, 'neutral'>;
8
+ };
9
+ /**
10
+ * An immediate status about a condition or operation. Compact notes can hold short inline guidance.
11
+ * Use NoticeCard for content that needs examination and InfoBox for guidance that opens another surface.
12
+ */
13
+ declare function Alert$1({ compact, sticky, tone, className, ...props }: AlertProps$1): import("react").JSX.Element;
14
+ export { Alert$1 as Alert };
15
+ //# sourceMappingURL=Alert.d.ts.map
@@ -0,0 +1,19 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { Alert } from "@ninna-ui/feedback";
3
+ // src/feedback/Alert.tsx
4
+ /**
5
+ * An immediate status about a condition or operation. Compact notes can hold short inline guidance.
6
+ * Use NoticeCard for content that needs examination and InfoBox for guidance that opens another surface.
7
+ */
8
+ function Alert$1({ compact = false, sticky = false, tone = "info", className = "", ...props }) {
9
+ return /* @__PURE__ */ jsx(Alert, {
10
+ size: compact ? "xs" : "sm",
11
+ showIcon: true,
12
+ ...props,
13
+ color: tone,
14
+ className: (sticky ? "bg-base-50 sticky top-(--lar-header-height,0px) z-30 shadow-sm " : "") + (compact ? "[&_[data-slot=description]]:text-xs [&_[data-slot=icon]>svg]:size-4 [&_[data-slot=title]]:text-xs " : "") + (tone === "warning" ? "[&_[data-slot=description]]:text-(--lar-warning-text) [&_[data-slot=description]]:opacity-100 [&_[data-slot=title]]:text-(--lar-warning-text) " : "") + className
15
+ });
16
+ }
17
+ export { Alert$1 as Alert };
18
+
19
+ //# sourceMappingURL=Alert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Alert.js","names":["Alert","NinnaAlert"],"sources":["../../src/feedback/Alert.tsx"],"sourcesContent":["import { Alert as NinnaAlert, type AlertProps as NinnaAlertProps } from '@ninna-ui/feedback';\n\nimport type { StatusTone } from './StatusIndicator';\n\ntype AlertProps = Omit<NinnaAlertProps, 'color' | 'size' | 'variant'> & {\n compact?: boolean;\n /** Stays below the application header while its containing region is visible. */\n sticky?: boolean;\n tone?: Exclude<StatusTone, 'neutral'>;\n};\n\n/**\n * An immediate status about a condition or operation. Compact notes can hold short inline guidance.\n * Use NoticeCard for content that needs examination and InfoBox for guidance that opens another surface.\n */\nexport function Alert({ compact = false, sticky = false, tone = 'info', className = '', ...props }: AlertProps) {\n return (\n <NinnaAlert\n size={compact ? 'xs' : 'sm'}\n showIcon\n {...props}\n color={tone}\n className={\n (sticky ? 'bg-base-50 sticky top-(--lar-header-height,0px) z-30 shadow-sm ' : '') +\n (compact\n ? '[&_[data-slot=description]]:text-xs [&_[data-slot=icon]>svg]:size-4 [&_[data-slot=title]]:text-xs '\n : '') +\n (tone === 'warning'\n ? '[&_[data-slot=description]]:text-(--lar-warning-text) [&_[data-slot=description]]:opacity-100 [&_[data-slot=title]]:text-(--lar-warning-text) '\n : '') +\n className\n }\n />\n );\n}\n"],"mappings":";;;;;;;AAeA,SAAgBA,QAAM,EAAE,UAAU,OAAO,SAAS,OAAO,OAAO,QAAQ,YAAY,IAAI,GAAG,SAAqB;CAC5G,OACI,oBAACC,OAAD;EACI,MAAM,UAAU,OAAO;EACvB,UAAA;EACA,GAAI;EACJ,OAAO;EACP,YACK,SAAS,oEAAoE,OAC7E,UACK,uGACA,OACL,SAAS,YACJ,mJACA,MACN;CAEP,CAAA;AAET"}
@@ -0,0 +1,16 @@
1
+ import { ReactNode } from "react";
2
+ interface AsyncStateProps {
3
+ placeholder?: ReactNode;
4
+ error?: string;
5
+ errorTitle: string;
6
+ label: string;
7
+ loading: boolean;
8
+ onRetry?: () => void;
9
+ presentation?: 'card' | 'line';
10
+ retryLabel?: string;
11
+ retrying?: boolean;
12
+ }
13
+ /** Owns a region's loading geometry and load failure; use Alert for other operation feedback. */
14
+ export declare function AsyncState({ error, errorTitle, label, loading, onRetry, presentation, placeholder, retryLabel, retrying }: AsyncStateProps): import("react").JSX.Element | null;
15
+ export {};
16
+ //# sourceMappingURL=AsyncState.d.ts.map
@@ -0,0 +1,29 @@
1
+ import { Button } from "../actions/Button.js";
2
+ import { SkeletonLoader } from "./SkeletonLoader.js";
3
+ import { jsx } from "react/jsx-runtime";
4
+ import { Alert } from "@ninna-ui/feedback";
5
+ // src/feedback/AsyncState.tsx
6
+ /** Owns a region's loading geometry and load failure; use Alert for other operation feedback. */
7
+ function AsyncState({ error, errorTitle, label, loading, onRetry, presentation = "card", placeholder, retryLabel, retrying = false }) {
8
+ if (loading) return /* @__PURE__ */ jsx(SkeletonLoader, {
9
+ label,
10
+ children: placeholder ?? /* @__PURE__ */ jsx(SkeletonLoader.Shape, { presentation })
11
+ });
12
+ if (!error) return null;
13
+ return /* @__PURE__ */ jsx(Alert, {
14
+ color: "danger",
15
+ title: errorTitle,
16
+ description: error,
17
+ showIcon: true,
18
+ action: onRetry && retryLabel ? /* @__PURE__ */ jsx(Button, {
19
+ type: "button",
20
+ onClick: onRetry,
21
+ variant: "primary",
22
+ loading: retrying,
23
+ children: retryLabel
24
+ }) : void 0
25
+ });
26
+ }
27
+ export { AsyncState };
28
+
29
+ //# sourceMappingURL=AsyncState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AsyncState.js","names":[],"sources":["../../src/feedback/AsyncState.tsx"],"sourcesContent":["import { Alert } from '@ninna-ui/feedback';\nimport type { ReactNode } from 'react';\n\nimport { Button } from '../actions/Button';\nimport { SkeletonLoader } from './SkeletonLoader';\n\ninterface AsyncStateProps {\n placeholder?: ReactNode;\n error?: string;\n errorTitle: string;\n label: string;\n loading: boolean;\n onRetry?: () => void;\n presentation?: 'card' | 'line';\n retryLabel?: string;\n retrying?: boolean;\n}\n\n/** Owns a region's loading geometry and load failure; use Alert for other operation feedback. */\nexport function AsyncState({\n error,\n errorTitle,\n label,\n loading,\n onRetry,\n presentation = 'card',\n placeholder,\n retryLabel,\n retrying = false,\n}: AsyncStateProps) {\n if (loading) {\n return (\n <SkeletonLoader label={label}>\n {placeholder ?? <SkeletonLoader.Shape presentation={presentation} />}\n </SkeletonLoader>\n );\n }\n\n if (!error) return null;\n\n return (\n <Alert\n color=\"danger\"\n title={errorTitle}\n description={error}\n showIcon\n action={\n onRetry && retryLabel ? (\n <Button type=\"button\" onClick={onRetry} variant=\"primary\" loading={retrying}>\n {retryLabel}\n </Button>\n ) : undefined\n }\n />\n );\n}\n"],"mappings":";;;;;;AAmBA,SAAgB,WAAW,EACvB,OACA,YACA,OACA,SACA,SACA,eAAe,QACf,aACA,YACA,WAAW,SACK;CAChB,IAAI,SACA,OACI,oBAAC,gBAAD;EAAuB;EAClB,UAAA,eAAe,oBAAC,eAAe,OAAhB,EAAoC,aAAe,CAAA;CACvD,CAAA;CAIxB,IAAI,CAAC,OAAO,OAAO;CAEnB,OACI,oBAAC,OAAD;EACI,OAAM;EACN,OAAO;EACP,aAAa;EACb,UAAA;EACA,QACI,WAAW,aACP,oBAAC,QAAD;GAAQ,MAAK;GAAS,SAAS;GAAS,SAAQ;GAAU,SAAS;GAC9D,UAAA;EACG,CAAA,IACR,KAAA;CAEX,CAAA;AAET"}
@@ -0,0 +1,8 @@
1
+ export interface ErrorNotification {
2
+ description: string;
3
+ title: string;
4
+ }
5
+ export declare function dismissAllNotifications(): void;
6
+ export declare function showErrorNotification(notification: ErrorNotification): void;
7
+ export declare function showSuccessNotification(message: string): void;
8
+ //# sourceMappingURL=ErrorNotification.d.ts.map
@@ -0,0 +1,20 @@
1
+ import { toast } from "@ninna-ui/feedback";
2
+ // src/feedback/ErrorNotification.ts
3
+ function dismissAllNotifications() {
4
+ toast.dismissAll();
5
+ }
6
+ function showErrorNotification(notification) {
7
+ toast.create({
8
+ ...notification,
9
+ color: "danger"
10
+ });
11
+ }
12
+ function showSuccessNotification(message) {
13
+ toast.create({
14
+ color: "success",
15
+ title: message
16
+ });
17
+ }
18
+ export { dismissAllNotifications, showErrorNotification, showSuccessNotification };
19
+
20
+ //# sourceMappingURL=ErrorNotification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorNotification.js","names":[],"sources":["../../src/feedback/ErrorNotification.ts"],"sourcesContent":["import { toast } from '@ninna-ui/feedback';\n\nexport interface ErrorNotification {\n description: string;\n title: string;\n}\n\nexport function dismissAllNotifications(): void {\n toast.dismissAll();\n}\n\nexport function showErrorNotification(notification: ErrorNotification): void {\n toast.create({\n ...notification,\n color: 'danger',\n });\n}\n\nexport function showSuccessNotification(message: string): void {\n toast.create({\n color: 'success',\n title: message,\n });\n}\n"],"mappings":";;AAOA,SAAgB,0BAAgC;CAC5C,MAAM,WAAW;AACrB;AAEA,SAAgB,sBAAsB,cAAuC;CACzE,MAAM,OAAO;EACT,GAAG;EACH,OAAO;CACX,CAAC;AACL;AAEA,SAAgB,wBAAwB,SAAuB;CAC3D,MAAM,OAAO;EACT,OAAO;EACP,OAAO;CACX,CAAC;AACL"}
@@ -0,0 +1,2 @@
1
+ export declare function Notifications(): import("react").JSX.Element;
2
+ //# sourceMappingURL=Notifications.d.ts.map
@@ -0,0 +1,9 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { Toaster } from "@ninna-ui/feedback";
3
+ // src/feedback/Notifications.tsx
4
+ function Notifications() {
5
+ return /* @__PURE__ */ jsx(Toaster, { position: "bottom-right" });
6
+ }
7
+ export { Notifications };
8
+
9
+ //# sourceMappingURL=Notifications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Notifications.js","names":[],"sources":["../../src/feedback/Notifications.tsx"],"sourcesContent":["import { Toaster } from '@ninna-ui/feedback';\n\nexport function Notifications() {\n return <Toaster position=\"bottom-right\" />;\n}\n"],"mappings":";;;AAEA,SAAgB,gBAAgB;CAC5B,OAAO,oBAAC,SAAD,EAAS,UAAS,eAAgB,CAAA;AAC7C"}
@@ -0,0 +1,23 @@
1
+ import { StatusTone } from "./StatusIndicator.js";
2
+ import { ReactNode } from "react";
3
+ interface ProgressStatusRowProps {
4
+ active: boolean;
5
+ detail?: string;
6
+ secondaryDetail?: string;
7
+ issue?: string;
8
+ label: string;
9
+ progress?: {
10
+ max: number;
11
+ value: number;
12
+ };
13
+ tone?: StatusTone;
14
+ trailing?: ReactNode;
15
+ onDetails?: () => void;
16
+ detailsLabel?: string;
17
+ progressLabel?: string;
18
+ compact?: boolean;
19
+ }
20
+ /** Ledger rows reserve the count line and track so updates never displace controls. */
21
+ export declare function ProgressStatusRow({ active, detail, secondaryDetail, issue, label, progress, tone, trailing, onDetails, detailsLabel, progressLabel, compact }: ProgressStatusRowProps): import("react").JSX.Element;
22
+ export {};
23
+ //# sourceMappingURL=ProgressStatusRow.d.ts.map
@@ -0,0 +1,74 @@
1
+ import { Button } from "../actions/Button.js";
2
+ import { StatusIndicator } from "./StatusIndicator.js";
3
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
4
+ import { ChevronRightIcon } from "lucide-react";
5
+ // src/feedback/ProgressStatusRow.tsx
6
+ /** Ledger rows reserve the count line and track so updates never displace controls. */
7
+ function ProgressStatusRow({ active, detail, secondaryDetail, issue, label, progress, tone = "info", trailing, onDetails, detailsLabel, progressLabel, compact = false }) {
8
+ const known = progress && progress.max > 0 ? progress : void 0;
9
+ const colors = {
10
+ info: "bg-primary",
11
+ success: "bg-success",
12
+ danger: "bg-danger",
13
+ warning: "bg-warning",
14
+ neutral: "bg-base-400"
15
+ };
16
+ const heading = /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(StatusIndicator, { tone }), /* @__PURE__ */ jsx("span", {
17
+ className: "text-base-content min-w-0 flex-1 truncate",
18
+ title: label,
19
+ children: label
20
+ })] });
21
+ return /* @__PURE__ */ jsxs("div", {
22
+ className: "w-full min-w-0",
23
+ children: [
24
+ /* @__PURE__ */ jsxs("div", {
25
+ className: "grid min-h-12 min-w-0 grid-cols-[minmax(0,1fr)_auto] content-center items-center gap-x-3 gap-y-1",
26
+ children: [
27
+ onDetails ? /* @__PURE__ */ jsxs(Button, {
28
+ variant: "status",
29
+ className: "w-full",
30
+ onClick: onDetails,
31
+ "aria-label": detailsLabel,
32
+ "aria-haspopup": "dialog",
33
+ children: [heading, /* @__PURE__ */ jsx(ChevronRightIcon, {})]
34
+ }) : /* @__PURE__ */ jsx("div", {
35
+ className: "flex h-4 min-w-0 items-center gap-1.5 text-xs",
36
+ children: heading
37
+ }),
38
+ trailing ? /* @__PURE__ */ jsx("div", {
39
+ className: "col-start-2 row-span-3 row-start-1 shrink-0",
40
+ children: trailing
41
+ }) : null,
42
+ /* @__PURE__ */ jsx("div", {
43
+ className: `text-2xs text-base-700 col-start-1 tabular-nums ${compact ? "truncate" : "break-words"}`,
44
+ title: detail,
45
+ children: detail || "\xA0"
46
+ }),
47
+ /* @__PURE__ */ jsx("div", {
48
+ className: "bg-base-300/70 col-start-1 h-1.5 overflow-hidden rounded-full",
49
+ role: active ? "progressbar" : void 0,
50
+ "aria-label": active ? progressLabel || detail || label : void 0,
51
+ "aria-valuenow": active && known ? known.value : void 0,
52
+ "aria-valuemin": active && known ? 0 : void 0,
53
+ "aria-valuemax": active && known ? known.max : void 0,
54
+ children: active ? /* @__PURE__ */ jsx("div", {
55
+ className: `h-full rounded-full ${colors[tone]} ${known ? "" : "lar-progress-indeterminate"}`,
56
+ style: known ? { width: `${Math.min(100, Math.max(0, known.value / known.max * 100))}%` } : void 0
57
+ }) : null
58
+ })
59
+ ]
60
+ }),
61
+ issue ? /* @__PURE__ */ jsx("div", {
62
+ className: "text-2xs break-words text-(--lar-danger-text) tabular-nums",
63
+ children: issue
64
+ }) : null,
65
+ secondaryDetail ? /* @__PURE__ */ jsx("div", {
66
+ className: "text-2xs text-base-700 break-words tabular-nums",
67
+ children: secondaryDetail
68
+ }) : null
69
+ ]
70
+ });
71
+ }
72
+ export { ProgressStatusRow };
73
+
74
+ //# sourceMappingURL=ProgressStatusRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProgressStatusRow.js","names":[],"sources":["../../src/feedback/ProgressStatusRow.tsx"],"sourcesContent":["import { ChevronRightIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport { Button } from '../actions/Button';\nimport { StatusIndicator, type StatusTone } from './StatusIndicator';\n\ninterface ProgressStatusRowProps {\n active: boolean;\n detail?: string;\n secondaryDetail?: string;\n issue?: string;\n label: string;\n progress?: { max: number; value: number };\n tone?: StatusTone;\n trailing?: ReactNode;\n onDetails?: () => void;\n detailsLabel?: string;\n progressLabel?: string;\n compact?: boolean;\n}\n\n/** Ledger rows reserve the count line and track so updates never displace controls. */\nexport function ProgressStatusRow({\n active,\n detail,\n secondaryDetail,\n issue,\n label,\n progress,\n tone = 'info',\n trailing,\n onDetails,\n detailsLabel,\n progressLabel,\n compact = false,\n}: ProgressStatusRowProps) {\n const known = progress && progress.max > 0 ? progress : undefined;\n const colors = {\n info: 'bg-primary',\n success: 'bg-success',\n danger: 'bg-danger',\n warning: 'bg-warning',\n neutral: 'bg-base-400',\n };\n const heading = (\n <>\n <StatusIndicator tone={tone} />\n <span className=\"text-base-content min-w-0 flex-1 truncate\" title={label}>\n {label}\n </span>\n </>\n );\n\n return (\n <div className=\"w-full min-w-0\">\n <div className=\"grid min-h-12 min-w-0 grid-cols-[minmax(0,1fr)_auto] content-center items-center gap-x-3 gap-y-1\">\n {onDetails ? (\n <Button\n variant=\"status\"\n className=\"w-full\"\n onClick={onDetails}\n aria-label={detailsLabel}\n aria-haspopup=\"dialog\"\n >\n {heading}\n <ChevronRightIcon />\n </Button>\n ) : (\n <div className=\"flex h-4 min-w-0 items-center gap-1.5 text-xs\">{heading}</div>\n )}\n {trailing ? <div className=\"col-start-2 row-span-3 row-start-1 shrink-0\">{trailing}</div> : null}\n <div\n className={`text-2xs text-base-700 col-start-1 tabular-nums ${compact ? 'truncate' : 'break-words'}`}\n title={detail}\n >\n {detail || '\\u00a0'}\n </div>\n <div\n className=\"bg-base-300/70 col-start-1 h-1.5 overflow-hidden rounded-full\"\n role={active ? 'progressbar' : undefined}\n aria-label={active ? progressLabel || detail || label : undefined}\n aria-valuenow={active && known ? known.value : undefined}\n aria-valuemin={active && known ? 0 : undefined}\n aria-valuemax={active && known ? known.max : undefined}\n >\n {active ? (\n <div\n className={`h-full rounded-full ${colors[tone]} ${known ? '' : 'lar-progress-indeterminate'}`}\n style={\n known\n ? { width: `${Math.min(100, Math.max(0, (known.value / known.max) * 100))}%` }\n : undefined\n }\n />\n ) : null}\n </div>\n </div>\n {issue ? <div className=\"text-2xs break-words text-(--lar-danger-text) tabular-nums\">{issue}</div> : null}\n {secondaryDetail ? (\n <div className=\"text-2xs text-base-700 break-words tabular-nums\">{secondaryDetail}</div>\n ) : null}\n </div>\n );\n}\n"],"mappings":";;;;;;AAsBA,SAAgB,kBAAkB,EAC9B,QACA,QACA,iBACA,OACA,OACA,UACA,OAAO,QACP,UACA,WACA,cACA,eACA,UAAU,SACa;CACvB,MAAM,QAAQ,YAAY,SAAS,MAAM,IAAI,WAAW,KAAA;CACxD,MAAM,SAAS;EACX,MAAM;EACN,SAAS;EACT,QAAQ;EACR,SAAS;EACT,SAAS;CACb;CACA,MAAM,UACF,qBAAA,UAAA,EAAA,UAAA,CACI,oBAAC,iBAAD,EAAuB,KAAO,CAAA,GAC9B,oBAAC,QAAD;EAAM,WAAU;EAA4C,OAAO;EAC9D,UAAA;CACC,CAAA,CACR,EAAA,CAAA;CAGN,OACI,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACI,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KACK,YACG,qBAAC,QAAD;MACI,SAAQ;MACR,WAAU;MACV,SAAS;MACT,cAAY;MACZ,iBAAc;MALlB,UAAA,CAOK,SACD,oBAAC,kBAAD,CAAmB,CAAA,CACf;KAER,CAAA,IAAA,oBAAC,OAAD;MAAK,WAAU;MAAiD,UAAA;KAAa,CAAA;KAEhF,WAAW,oBAAC,OAAD;MAAK,WAAU;MAA+C,UAAA;KAAc,CAAA,IAAI;KAC5F,oBAAC,OAAD;MACI,WAAW,mDAAmD,UAAU,aAAa;MACrF,OAAO;MAEN,UAAA,UAAU;KACV,CAAA;KACL,oBAAC,OAAD;MACI,WAAU;MACV,MAAM,SAAS,gBAAgB,KAAA;MAC/B,cAAY,SAAS,iBAAiB,UAAU,QAAQ,KAAA;MACxD,iBAAe,UAAU,QAAQ,MAAM,QAAQ,KAAA;MAC/C,iBAAe,UAAU,QAAQ,IAAI,KAAA;MACrC,iBAAe,UAAU,QAAQ,MAAM,MAAM,KAAA;MAE5C,UAAA,SACG,oBAAC,OAAD;OACI,WAAW,uBAAuB,OAAO,MAAM,GAAG,QAAQ,KAAK;OAC/D,OACI,QACM,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,KAAK,IAAI,GAAI,MAAM,QAAQ,MAAM,MAAO,GAAG,CAAC,EAAE,GAAG,IAC3E,KAAA;MAEb,CAAA,IACD;KACH,CAAA;IACJ;;GACJ,QAAQ,oBAAC,OAAD;IAAK,WAAU;IAA8D,UAAA;GAAW,CAAA,IAAI;GACpG,kBACG,oBAAC,OAAD;IAAK,WAAU;IAAmD,UAAA;GAAqB,CAAA,IACvF;EACH;;AAEb"}
@@ -0,0 +1,19 @@
1
+ import { ReactNode } from "react";
2
+ type SkeletonPresentation = 'artwork' | 'poster' | 'video' | 'card' | 'chart' | 'circle' | 'control' | 'heading' | 'line' | 'metric';
3
+ type SkeletonWidth = 'action' | 'full' | 'medium' | 'short' | 'wide';
4
+ interface SkeletonLoaderProps {
5
+ children: ReactNode;
6
+ label: string;
7
+ loading?: boolean;
8
+ }
9
+ declare function SkeletonLoaderRoot({ children, label, loading }: SkeletonLoaderProps): import("react").JSX.Element;
10
+ interface SkeletonShapeProps {
11
+ presentation?: SkeletonPresentation;
12
+ width?: SkeletonWidth;
13
+ }
14
+ declare function SkeletonShape({ presentation, width }: SkeletonShapeProps): import("react").JSX.Element;
15
+ export declare const SkeletonLoader: typeof SkeletonLoaderRoot & {
16
+ Shape: typeof SkeletonShape;
17
+ };
18
+ export {};
19
+ //# sourceMappingURL=SkeletonLoader.d.ts.map