@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,13 @@
1
+ import { ReactNode } from "react";
2
+ interface InlineFieldsProps {
3
+ /** Buttons after the fields, for example Cancel and Save. */
4
+ actions: ReactNode;
5
+ children: ReactNode;
6
+ }
7
+ /**
8
+ * Fields side by side with their actions at the end. Sized by its container, not the window: in a
9
+ * narrow card the fields stack and the actions sit below them.
10
+ */
11
+ export declare function InlineFields({ actions, children }: InlineFieldsProps): import("react").JSX.Element;
12
+ export {};
13
+ //# sourceMappingURL=InlineFields.d.ts.map
@@ -0,0 +1,24 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ // src/forms/InlineFields.tsx
3
+ /**
4
+ * Fields side by side with their actions at the end. Sized by its container, not the window: in a
5
+ * narrow card the fields stack and the actions sit below them.
6
+ */
7
+ function InlineFields({ actions, children }) {
8
+ return /* @__PURE__ */ jsx("div", {
9
+ className: "@container min-w-0",
10
+ children: /* @__PURE__ */ jsxs("div", {
11
+ className: "flex flex-col gap-3 @lg:flex-row @lg:items-end",
12
+ children: [/* @__PURE__ */ jsx("div", {
13
+ className: "grid min-w-0 flex-1 gap-3 @lg:auto-cols-fr @lg:grid-flow-col",
14
+ children
15
+ }), /* @__PURE__ */ jsx("div", {
16
+ className: "flex shrink-0 justify-end gap-2",
17
+ children: actions
18
+ })]
19
+ })
20
+ });
21
+ }
22
+ export { InlineFields };
23
+
24
+ //# sourceMappingURL=InlineFields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InlineFields.js","names":[],"sources":["../../src/forms/InlineFields.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\ninterface InlineFieldsProps {\n /** Buttons after the fields, for example Cancel and Save. */\n actions: ReactNode;\n children: ReactNode;\n}\n\n/**\n * Fields side by side with their actions at the end. Sized by its container, not the window: in a\n * narrow card the fields stack and the actions sit below them.\n */\nexport function InlineFields({ actions, children }: InlineFieldsProps) {\n return (\n <div className=\"@container min-w-0\">\n <div className=\"flex flex-col gap-3 @lg:flex-row @lg:items-end\">\n <div className=\"grid min-w-0 flex-1 gap-3 @lg:auto-cols-fr @lg:grid-flow-col\">{children}</div>\n <div className=\"flex shrink-0 justify-end gap-2\">{actions}</div>\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;AAYA,SAAgB,aAAa,EAAE,SAAS,YAA+B;CACnE,OACI,oBAAC,OAAD;EAAK,WAAU;EACX,UAAA,qBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACI,oBAAC,OAAD;IAAK,WAAU;IAAgE;GAAc,CAAA,GAC7F,oBAAC,OAAD;IAAK,WAAU;IAAmC,UAAA;GAAa,CAAA,CAC9D;;CACJ,CAAA;AAEb"}
@@ -0,0 +1,5 @@
1
+ import { InputProps } from "@ninna-ui/forms";
2
+ type InputProps$1 = Omit<InputProps, 'fullWidth'>;
3
+ declare const Input$1: import("react").ForwardRefExoticComponent<InputProps$1 & import("react").RefAttributes<HTMLInputElement>>;
4
+ export { Input$1 as Input, InputProps$1 as InputProps };
5
+ //# sourceMappingURL=Input.d.ts.map
@@ -0,0 +1,18 @@
1
+ import { formControlClasses, formControlDefaults } from "./FormControlStyles.js";
2
+ import { forwardRef } from "react";
3
+ import { jsx } from "react/jsx-runtime";
4
+ import { Input } from "@ninna-ui/forms";
5
+ // src/forms/Input.tsx
6
+ const Input$1 = forwardRef(({ size = formControlDefaults.size, variant = formControlDefaults.variant, className, ...props }, ref) => /* @__PURE__ */ jsx(Input, {
7
+ ref,
8
+ color: formControlDefaults.color,
9
+ ...props,
10
+ fullWidth: true,
11
+ size,
12
+ variant,
13
+ className: `${variant === "filled" ? formControlClasses : ""} ${className ?? ""}`
14
+ }));
15
+ Input$1.displayName = "Input";
16
+ export { Input$1 as Input };
17
+
18
+ //# sourceMappingURL=Input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Input.js","names":["Input","NinnaInput"],"sources":["../../src/forms/Input.tsx"],"sourcesContent":["import { Input as NinnaInput, type InputProps as NinnaInputProps } from '@ninna-ui/forms';\nimport { forwardRef } from 'react';\n\nimport { formControlClasses, formControlDefaults } from './FormControlStyles';\n\nexport type InputProps = Omit<NinnaInputProps, 'fullWidth'>;\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n ({ size = formControlDefaults.size, variant = formControlDefaults.variant, className, ...props }, ref) => (\n <NinnaInput\n ref={ref}\n color={formControlDefaults.color}\n {...props}\n fullWidth\n size={size}\n variant={variant}\n className={`${variant === 'filled' ? formControlClasses : ''} ${className ?? ''}`}\n />\n ),\n);\n\nInput.displayName = 'Input';\n"],"mappings":";;;;;AAOA,MAAaA,UAAQ,YAChB,EAAE,OAAO,oBAAoB,MAAM,UAAU,oBAAoB,SAAS,WAAW,GAAG,SAAS,QAC9F,oBAACC,OAAD;CACS;CACL,OAAO,oBAAoB;CAC3B,GAAI;CACJ,WAAA;CACM;CACG;CACT,WAAW,GAAG,YAAY,WAAW,qBAAqB,GAAG,GAAG,aAAa;AAChF,CAAA,CAET;AAEA,QAAM,cAAc"}
@@ -0,0 +1,21 @@
1
+ interface LoadedOptionSelectProps<Value extends string> {
2
+ disabled?: boolean;
3
+ label: string;
4
+ loading?: false;
5
+ onChange: (value: Value) => void;
6
+ /** Disabled options stay visible but cannot be chosen. */
7
+ options: readonly {
8
+ label: string;
9
+ value: Value;
10
+ disabled?: boolean;
11
+ }[];
12
+ value: Value;
13
+ }
14
+ interface LoadingOptionSelectProps {
15
+ label: string;
16
+ loading: true;
17
+ }
18
+ type OptionSelectProps<Value extends string> = LoadedOptionSelectProps<Value> | LoadingOptionSelectProps;
19
+ export declare function OptionSelect<Value extends string>(props: OptionSelectProps<Value>): import("react").JSX.Element;
20
+ export {};
21
+ //# sourceMappingURL=OptionSelect.d.ts.map
@@ -0,0 +1,28 @@
1
+ import { SkeletonLoader } from "../feedback/SkeletonLoader.js";
2
+ import { Select, SelectItem } from "./Select.js";
3
+ import { jsx } from "react/jsx-runtime";
4
+ // src/forms/OptionSelect.tsx
5
+ function OptionSelect(props) {
6
+ if (props.loading) return /* @__PURE__ */ jsx(SkeletonLoader, {
7
+ label: props.label,
8
+ children: /* @__PURE__ */ jsx(SkeletonLoader.Shape, { presentation: "control" })
9
+ });
10
+ const { disabled, label, onChange, options, value } = props;
11
+ return /* @__PURE__ */ jsx(Select, {
12
+ "aria-label": label,
13
+ disabled,
14
+ value,
15
+ onValueChange: (next) => {
16
+ const option = options.find((candidate) => candidate.value === next);
17
+ if (option) onChange(option.value);
18
+ },
19
+ children: options.map((option) => /* @__PURE__ */ jsx(SelectItem, {
20
+ value: option.value,
21
+ disabled: option.disabled,
22
+ children: option.label
23
+ }, option.value))
24
+ });
25
+ }
26
+ export { OptionSelect };
27
+
28
+ //# sourceMappingURL=OptionSelect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OptionSelect.js","names":[],"sources":["../../src/forms/OptionSelect.tsx"],"sourcesContent":["import { SkeletonLoader } from '../feedback/SkeletonLoader';\nimport { Select, SelectItem } from './Select';\n\ninterface LoadedOptionSelectProps<Value extends string> {\n disabled?: boolean;\n label: string;\n loading?: false;\n onChange: (value: Value) => void;\n /** Disabled options stay visible but cannot be chosen. */\n options: readonly { label: string; value: Value; disabled?: boolean }[];\n value: Value;\n}\n\ninterface LoadingOptionSelectProps {\n label: string;\n loading: true;\n}\n\ntype OptionSelectProps<Value extends string> = LoadedOptionSelectProps<Value> | LoadingOptionSelectProps;\n\nexport function OptionSelect<Value extends string>(props: OptionSelectProps<Value>) {\n if (props.loading)\n return (\n <SkeletonLoader label={props.label}>\n <SkeletonLoader.Shape presentation=\"control\" />\n </SkeletonLoader>\n );\n\n const { disabled, label, onChange, options, value } = props;\n\n return (\n <Select\n aria-label={label}\n disabled={disabled}\n value={value}\n onValueChange={(next) => {\n const option = options.find((candidate) => candidate.value === next);\n\n if (option) onChange(option.value);\n }}\n >\n {options.map((option) => (\n <SelectItem key={option.value} value={option.value} disabled={option.disabled}>\n {option.label}\n </SelectItem>\n ))}\n </Select>\n );\n}\n"],"mappings":";;;;AAoBA,SAAgB,aAAmC,OAAiC;CAChF,IAAI,MAAM,SACN,OACI,oBAAC,gBAAD;EAAgB,OAAO,MAAM;EACzB,UAAA,oBAAC,eAAe,OAAhB,EAAsB,cAAa,UAAW,CAAA;CAClC,CAAA;CAGxB,MAAM,EAAE,UAAU,OAAO,UAAU,SAAS,UAAU;CAEtD,OACI,oBAAC,QAAD;EACI,cAAY;EACF;EACH;EACP,gBAAgB,SAAS;GACrB,MAAM,SAAS,QAAQ,MAAM,cAAc,UAAU,UAAU,IAAI;GAEnE,IAAI,QAAQ,SAAS,OAAO,KAAK;EACrC;EAEC,UAAA,QAAQ,KAAK,WACV,oBAAC,YAAD;GAA+B,OAAO,OAAO;GAAO,UAAU,OAAO;GAChE,UAAA,OAAO;EACA,GAFK,OAAO,KAEZ,CACf;CACG,CAAA;AAEhB"}
@@ -0,0 +1,5 @@
1
+ import { RadioGroupItemProps, RadioGroupItemProps as RadioGroupItemProps$1, RadioGroupProps, RadioGroupProps as RadioGroupProps$1 } from "@ninna-ui/forms";
2
+ declare const RadioGroup$1: import("react").ForwardRefExoticComponent<RadioGroupProps & import("react").RefAttributes<HTMLDivElement>>;
3
+ declare const RadioGroupItem$1: import("react").ForwardRefExoticComponent<RadioGroupItemProps & import("react").RefAttributes<HTMLButtonElement>>;
4
+ export { RadioGroup$1 as RadioGroup, RadioGroupItem$1 as RadioGroupItem, type RadioGroupItemProps$1 as RadioGroupItemProps, type RadioGroupProps$1 as RadioGroupProps };
5
+ //# sourceMappingURL=RadioGroup.d.ts.map
@@ -0,0 +1,35 @@
1
+ import { formChoiceClasses, formControlDefaults } from "./FormControlStyles.js";
2
+ import { forwardRef, useImperativeHandle, useLayoutEffect, useRef } from "react";
3
+ import { jsx } from "react/jsx-runtime";
4
+ import { RadioGroup, RadioGroupItem, useFormControl } from "@ninna-ui/forms";
5
+ // src/forms/RadioGroup.tsx
6
+ const RadioGroup$1 = forwardRef((props, ref) => {
7
+ const groupRef = useRef(null);
8
+ const formControl = useFormControl();
9
+ useImperativeHandle(ref, () => groupRef.current);
10
+ useLayoutEffect(() => {
11
+ const attributes = {
12
+ "aria-label": props["aria-label"],
13
+ "aria-labelledby": props["aria-labelledby"] ?? (props["aria-label"] ? void 0 : formControl?.labelId),
14
+ "aria-describedby": props["aria-describedby"] ?? formControl?.messageId
15
+ };
16
+ for (const [name, value] of Object.entries(attributes)) if (value === void 0) groupRef.current?.removeAttribute(name);
17
+ else groupRef.current?.setAttribute(name, value);
18
+ });
19
+ return /* @__PURE__ */ jsx(RadioGroup, {
20
+ ref: groupRef,
21
+ size: formControlDefaults.size,
22
+ color: formControlDefaults.color,
23
+ ...props
24
+ });
25
+ });
26
+ RadioGroup$1.displayName = "RadioGroup";
27
+ const RadioGroupItem$1 = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(RadioGroupItem, {
28
+ ref,
29
+ ...props,
30
+ className: `${formChoiceClasses} cursor-pointer focus-visible:ring-offset-0 ${className ?? ""}`
31
+ }));
32
+ RadioGroupItem$1.displayName = "RadioGroupItem";
33
+ export { RadioGroup$1 as RadioGroup, RadioGroupItem$1 as RadioGroupItem };
34
+
35
+ //# sourceMappingURL=RadioGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadioGroup.js","names":["RadioGroup","NinnaRadioGroup","RadioGroupItem","NinnaRadioGroupItem"],"sources":["../../src/forms/RadioGroup.tsx"],"sourcesContent":["import {\n RadioGroup as NinnaRadioGroup,\n RadioGroupItem as NinnaRadioGroupItem,\n type RadioGroupItemProps,\n type RadioGroupProps,\n useFormControl,\n} from '@ninna-ui/forms';\nimport { forwardRef, useImperativeHandle, useLayoutEffect, useRef } from 'react';\n\nimport { formChoiceClasses, formControlDefaults } from './FormControlStyles';\n\nexport type { RadioGroupItemProps, RadioGroupProps } from '@ninna-ui/forms';\n\nexport const RadioGroup = forwardRef<HTMLDivElement, RadioGroupProps>((props, ref) => {\n const groupRef = useRef<HTMLDivElement>(null);\n const formControl = useFormControl();\n\n useImperativeHandle(ref, () => groupRef.current!);\n // Ninna drops the group's ARIA props instead of forwarding them to its root.\n useLayoutEffect(() => {\n const attributes = {\n 'aria-label': props['aria-label'],\n 'aria-labelledby': props['aria-labelledby'] ?? (props['aria-label'] ? undefined : formControl?.labelId),\n 'aria-describedby': props['aria-describedby'] ?? formControl?.messageId,\n };\n\n for (const [name, value] of Object.entries(attributes)) {\n if (value === undefined) groupRef.current?.removeAttribute(name);\n else groupRef.current?.setAttribute(name, value);\n }\n });\n\n return (\n <NinnaRadioGroup ref={groupRef} size={formControlDefaults.size} color={formControlDefaults.color} {...props} />\n );\n});\n\nRadioGroup.displayName = 'RadioGroup';\n\nexport const RadioGroupItem = forwardRef<HTMLButtonElement, RadioGroupItemProps>(({ className, ...props }, ref) => (\n <NinnaRadioGroupItem\n ref={ref}\n {...props}\n className={`${formChoiceClasses} cursor-pointer focus-visible:ring-offset-0 ${className ?? ''}`}\n />\n));\n\nRadioGroupItem.displayName = 'RadioGroupItem';\n"],"mappings":";;;;;AAaA,MAAaA,eAAa,YAA6C,OAAO,QAAQ;CAClF,MAAM,WAAW,OAAuB,IAAI;CAC5C,MAAM,cAAc,eAAe;CAEnC,oBAAoB,WAAW,SAAS,OAAQ;CAEhD,sBAAsB;EAClB,MAAM,aAAa;GACf,cAAc,MAAM;GACpB,mBAAmB,MAAM,uBAAuB,MAAM,gBAAgB,KAAA,IAAY,aAAa;GAC/F,oBAAoB,MAAM,uBAAuB,aAAa;EAClE;EAEA,KAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,UAAU,GACjD,IAAI,UAAU,KAAA,GAAW,SAAS,SAAS,gBAAgB,IAAI;OAC1D,SAAS,SAAS,aAAa,MAAM,KAAK;CAEvD,CAAC;CAED,OACI,oBAACC,YAAD;EAAiB,KAAK;EAAU,MAAM,oBAAoB;EAAM,OAAO,oBAAoB;EAAO,GAAI;CAAQ,CAAA;AAEtH,CAAC;AAED,aAAW,cAAc;AAEzB,MAAaC,mBAAiB,YAAoD,EAAE,WAAW,GAAG,SAAS,QACvG,oBAACC,gBAAD;CACS;CACL,GAAI;CACJ,WAAW,GAAG,kBAAkB,8CAA8C,aAAa;AAC9F,CAAA,CACJ;AAED,iBAAe,cAAc"}
@@ -0,0 +1,6 @@
1
+ import { SelectItemProps, SelectProps } from "@ninna-ui/forms";
2
+ type SelectProps$1 = Omit<SelectProps, 'fullWidth'>;
3
+ declare const Select$1: import("react").ForwardRefExoticComponent<SelectProps$1 & import("react").RefAttributes<HTMLButtonElement>>;
4
+ declare const SelectItem$1: import("react").ForwardRefExoticComponent<SelectItemProps & import("react").RefAttributes<HTMLDivElement>>;
5
+ export { Select$1 as Select, SelectItem$1 as SelectItem, SelectProps$1 as SelectProps };
6
+ //# sourceMappingURL=Select.d.ts.map
@@ -0,0 +1,36 @@
1
+ import { tabbable } from "../foundations/KeyboardFocus.js";
2
+ import { formControlClasses, formControlDefaults } from "./FormControlStyles.js";
3
+ import { forwardRef } from "react";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { Select, SelectItem } from "@ninna-ui/forms";
6
+ // src/forms/Select.tsx
7
+ const Select$1 = forwardRef(({ size = formControlDefaults.size, variant = formControlDefaults.variant, className, ...props }, ref) => /* @__PURE__ */ jsx(Select, {
8
+ ref,
9
+ color: formControlDefaults.color,
10
+ ...tabbable,
11
+ ...props,
12
+ fullWidth: true,
13
+ size,
14
+ variant,
15
+ className: `${variant === "filled" ? formControlClasses : ""} [&>span:first-child]:truncate ${className ?? ""}`
16
+ }));
17
+ Select$1.displayName = "Select";
18
+ const SelectItem$1 = forwardRef(({ icon, children, ...props }, ref) => /* @__PURE__ */ jsx(SelectItem, {
19
+ ref,
20
+ ...props,
21
+ children: icon ? /* @__PURE__ */ jsxs("span", {
22
+ className: "inline-flex min-w-0 items-center gap-2 align-middle",
23
+ children: [/* @__PURE__ */ jsx("span", {
24
+ "aria-hidden": "true",
25
+ className: "size-4 shrink-0 [&>svg]:size-full",
26
+ children: icon
27
+ }), /* @__PURE__ */ jsx("span", {
28
+ className: "truncate",
29
+ children
30
+ })]
31
+ }) : children
32
+ }));
33
+ SelectItem$1.displayName = "SelectItem";
34
+ export { Select$1 as Select, SelectItem$1 as SelectItem };
35
+
36
+ //# sourceMappingURL=Select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.js","names":["Select","NinnaSelect","SelectItem","NinnaSelectItem"],"sources":["../../src/forms/Select.tsx"],"sourcesContent":["import {\n Select as NinnaSelect,\n SelectItem as NinnaSelectItem,\n type SelectItemProps,\n type SelectProps as NinnaSelectProps,\n} from '@ninna-ui/forms';\nimport { forwardRef } from 'react';\n\nimport { tabbable } from '../foundations/KeyboardFocus';\nimport { formControlClasses, formControlDefaults } from './FormControlStyles';\n\nexport type SelectProps = Omit<NinnaSelectProps, 'fullWidth'>;\n\nexport const Select = forwardRef<HTMLButtonElement, SelectProps>(\n ({ size = formControlDefaults.size, variant = formControlDefaults.variant, className, ...props }, ref) => (\n <NinnaSelect\n ref={ref}\n color={formControlDefaults.color}\n {...tabbable}\n {...props}\n fullWidth\n size={size}\n variant={variant}\n className={`${variant === 'filled' ? formControlClasses : ''} [&>span:first-child]:truncate ${className ?? ''}`}\n />\n ),\n);\n\nSelect.displayName = 'Select';\n\nexport const SelectItem = forwardRef<HTMLDivElement, SelectItemProps>(({ icon, children, ...props }, ref) => (\n <NinnaSelectItem ref={ref} {...props}>\n {icon ? (\n <span className=\"inline-flex min-w-0 items-center gap-2 align-middle\">\n <span aria-hidden=\"true\" className=\"size-4 shrink-0 [&>svg]:size-full\">\n {icon}\n </span>\n <span className=\"truncate\">{children}</span>\n </span>\n ) : (\n children\n )}\n </NinnaSelectItem>\n));\n\nSelectItem.displayName = 'SelectItem';\n"],"mappings":";;;;;;AAaA,MAAaA,WAAS,YACjB,EAAE,OAAO,oBAAoB,MAAM,UAAU,oBAAoB,SAAS,WAAW,GAAG,SAAS,QAC9F,oBAACC,QAAD;CACS;CACL,OAAO,oBAAoB;CAC3B,GAAI;CACJ,GAAI;CACJ,WAAA;CACM;CACG;CACT,WAAW,GAAG,YAAY,WAAW,qBAAqB,GAAG,iCAAiC,aAAa;AAC9G,CAAA,CAET;AAEA,SAAO,cAAc;AAErB,MAAaC,eAAa,YAA6C,EAAE,MAAM,UAAU,GAAG,SAAS,QACjG,oBAACC,YAAD;CAAsB;CAAK,GAAI;CAC1B,UAAA,OACG,qBAAC,QAAD;EAAM,WAAU;EAAhB,UAAA,CACI,oBAAC,QAAD;GAAM,eAAY;GAAO,WAAU;GAC9B,UAAA;EACC,CAAA,GACN,oBAAC,QAAD;GAAM,WAAU;GAAY;EAAe,CAAA,CACzC;CAEN,CAAA,IAAA;AAES,CAAA,CACpB;AAED,aAAW,cAAc"}
@@ -0,0 +1,4 @@
1
+ import { SwitchProps } from "@ninna-ui/forms";
2
+ declare const Switch$1: import("react").ForwardRefExoticComponent<SwitchProps & import("react").RefAttributes<HTMLButtonElement>>;
3
+ export { Switch$1 as Switch };
4
+ //# sourceMappingURL=Switch.d.ts.map
@@ -0,0 +1,16 @@
1
+ import { tabbable } from "../foundations/KeyboardFocus.js";
2
+ import { forwardRef } from "react";
3
+ import { jsx } from "react/jsx-runtime";
4
+ import { Switch } from "@ninna-ui/forms";
5
+ // src/forms/Switch.tsx
6
+ const Switch$1 = forwardRef((props, ref) => /* @__PURE__ */ jsx(Switch, {
7
+ ref,
8
+ ...tabbable,
9
+ size: "sm",
10
+ "aria-busy": props.loading || void 0,
11
+ ...props
12
+ }));
13
+ Switch$1.displayName = "Switch";
14
+ export { Switch$1 as Switch };
15
+
16
+ //# sourceMappingURL=Switch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Switch.js","names":["Switch","NinnaSwitch"],"sources":["../../src/forms/Switch.tsx"],"sourcesContent":["import { Switch as NinnaSwitch, type SwitchProps } from '@ninna-ui/forms';\nimport { forwardRef } from 'react';\n\nimport { tabbable } from '../foundations/KeyboardFocus';\n\nexport const Switch = forwardRef<HTMLButtonElement, SwitchProps>((props, ref) => (\n <NinnaSwitch ref={ref} {...tabbable} size=\"sm\" aria-busy={props.loading || undefined} {...props} />\n));\n\nSwitch.displayName = 'Switch';\n"],"mappings":";;;;;AAKA,MAAaA,WAAS,YAA4C,OAAO,QACrE,oBAACC,QAAD;CAAkB;CAAK,GAAI;CAAU,MAAK;CAAK,aAAW,MAAM,WAAW,KAAA;CAAW,GAAI;AAAQ,CAAA,CACrG;AAED,SAAO,cAAc"}
@@ -0,0 +1,19 @@
1
+ interface TagInputProps {
2
+ /** Names the field that adds a value. */
3
+ addLabel: string;
4
+ disabled?: boolean;
5
+ /** Names the list of values. */
6
+ label: string;
7
+ onChange: (values: string[]) => void;
8
+ placeholder?: string;
9
+ /** Names the button that removes a value. */
10
+ removeLabel: (value: string) => string;
11
+ values: readonly string[];
12
+ }
13
+ /**
14
+ * Values as removable tags, in order, and a field that adds one on Enter, a comma or a
15
+ * semicolon, or when it loses focus. A value already listed, in any case, is not added again.
16
+ */
17
+ export declare function TagInput({ addLabel, disabled, label, onChange, placeholder, removeLabel, values }: TagInputProps): import("react").JSX.Element;
18
+ export {};
19
+ //# sourceMappingURL=TagInput.d.ts.map
@@ -0,0 +1,60 @@
1
+ import { IconButton } from "../actions/IconButton.js";
2
+ import { Badge } from "../display/Badge.js";
3
+ import { Input } from "./Input.js";
4
+ import { useState } from "react";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { XIcon } from "lucide-react";
7
+ // src/forms/TagInput.tsx
8
+ /**
9
+ * Values as removable tags, in order, and a field that adds one on Enter, a comma or a
10
+ * semicolon, or when it loses focus. A value already listed, in any case, is not added again.
11
+ */
12
+ function TagInput({ addLabel, disabled, label, onChange, placeholder, removeLabel, values }) {
13
+ const [draft, setDraft] = useState("");
14
+ function add() {
15
+ const value = draft.trim();
16
+ setDraft("");
17
+ if (value && !values.some((known) => known.toLocaleLowerCase() === value.toLocaleLowerCase())) onChange([...values, value]);
18
+ }
19
+ return /* @__PURE__ */ jsxs("div", {
20
+ className: "flex min-w-0 flex-col gap-2",
21
+ children: [values.length > 0 ? /* @__PURE__ */ jsx("ul", {
22
+ "aria-label": label,
23
+ className: "flex min-w-0 flex-wrap gap-1.5",
24
+ children: values.map((value) => /* @__PURE__ */ jsx("li", {
25
+ className: "max-w-full min-w-0",
26
+ children: /* @__PURE__ */ jsxs(Badge, {
27
+ className: "max-w-full pr-0.5",
28
+ children: [/* @__PURE__ */ jsx("span", {
29
+ className: "truncate",
30
+ children: value
31
+ }), /* @__PURE__ */ jsx(IconButton, {
32
+ type: "button",
33
+ "aria-label": removeLabel(value),
34
+ title: removeLabel(value),
35
+ className: "size-4 shrink-0 p-0.5",
36
+ disabled,
37
+ icon: /* @__PURE__ */ jsx(XIcon, {}),
38
+ onClick: () => onChange(values.filter((known) => known !== value))
39
+ })]
40
+ })
41
+ }, value))
42
+ }) : null, /* @__PURE__ */ jsx(Input, {
43
+ "aria-label": addLabel,
44
+ placeholder,
45
+ value: draft,
46
+ maxLength: 4096,
47
+ disabled,
48
+ onBlur: add,
49
+ onChange: (event) => setDraft(event.target.value),
50
+ onKeyDown: (event) => {
51
+ if (event.key !== "Enter" && event.key !== "," && event.key !== ";") return;
52
+ event.preventDefault();
53
+ add();
54
+ }
55
+ })]
56
+ });
57
+ }
58
+ export { TagInput };
59
+
60
+ //# sourceMappingURL=TagInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TagInput.js","names":[],"sources":["../../src/forms/TagInput.tsx"],"sourcesContent":["import { XIcon } from 'lucide-react';\nimport { useState } from 'react';\n\nimport { IconButton } from '../actions/IconButton';\nimport { Badge } from '../display/Badge';\nimport { Input } from './Input';\n\ninterface TagInputProps {\n /** Names the field that adds a value. */\n addLabel: string;\n disabled?: boolean;\n /** Names the list of values. */\n label: string;\n onChange: (values: string[]) => void;\n placeholder?: string;\n /** Names the button that removes a value. */\n removeLabel: (value: string) => string;\n values: readonly string[];\n}\n\n/**\n * Values as removable tags, in order, and a field that adds one on Enter, a comma or a\n * semicolon, or when it loses focus. A value already listed, in any case, is not added again.\n */\nexport function TagInput({ addLabel, disabled, label, onChange, placeholder, removeLabel, values }: TagInputProps) {\n const [draft, setDraft] = useState('');\n\n function add() {\n const value = draft.trim();\n\n setDraft('');\n\n if (value && !values.some((known) => known.toLocaleLowerCase() === value.toLocaleLowerCase()))\n onChange([...values, value]);\n }\n\n return (\n <div className=\"flex min-w-0 flex-col gap-2\">\n {values.length > 0 ? (\n <ul aria-label={label} className=\"flex min-w-0 flex-wrap gap-1.5\">\n {values.map((value) => (\n <li key={value} className=\"max-w-full min-w-0\">\n <Badge className=\"max-w-full pr-0.5\">\n <span className=\"truncate\">{value}</span>\n <IconButton\n type=\"button\"\n aria-label={removeLabel(value)}\n title={removeLabel(value)}\n className=\"size-4 shrink-0 p-0.5\"\n disabled={disabled}\n icon={<XIcon />}\n onClick={() => onChange(values.filter((known) => known !== value))}\n />\n </Badge>\n </li>\n ))}\n </ul>\n ) : null}\n <Input\n aria-label={addLabel}\n placeholder={placeholder}\n value={draft}\n maxLength={4096}\n disabled={disabled}\n onBlur={add}\n onChange={(event) => setDraft(event.target.value)}\n onKeyDown={(event) => {\n if (event.key !== 'Enter' && event.key !== ',' && event.key !== ';') return;\n\n event.preventDefault();\n add();\n }}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;AAwBA,SAAgB,SAAS,EAAE,UAAU,UAAU,OAAO,UAAU,aAAa,aAAa,UAAyB;CAC/G,MAAM,CAAC,OAAO,YAAY,SAAS,EAAE;CAErC,SAAS,MAAM;EACX,MAAM,QAAQ,MAAM,KAAK;EAEzB,SAAS,EAAE;EAEX,IAAI,SAAS,CAAC,OAAO,MAAM,UAAU,MAAM,kBAAkB,MAAM,MAAM,kBAAkB,CAAC,GACxF,SAAS,CAAC,GAAG,QAAQ,KAAK,CAAC;CACnC;CAEA,OACI,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACK,OAAO,SAAS,IACb,oBAAC,MAAD;GAAI,cAAY;GAAO,WAAU;GAC5B,UAAA,OAAO,KAAK,UACT,oBAAC,MAAD;IAAgB,WAAU;IACtB,UAAA,qBAAC,OAAD;KAAO,WAAU;KAAjB,UAAA,CACI,oBAAC,QAAD;MAAM,WAAU;MAAY,UAAA;KAAY,CAAA,GACxC,oBAAC,YAAD;MACI,MAAK;MACL,cAAY,YAAY,KAAK;MAC7B,OAAO,YAAY,KAAK;MACxB,WAAU;MACA;MACV,MAAM,oBAAC,OAAD,CAAQ,CAAA;MACd,eAAe,SAAS,OAAO,QAAQ,UAAU,UAAU,KAAK,CAAC;KACpE,CAAA,CACE;;GACP,GAbK,KAaL,CACP;EACD,CAAA,IACJ,MACJ,oBAAC,OAAD;GACI,cAAY;GACC;GACb,OAAO;GACP,WAAW;GACD;GACV,QAAQ;GACR,WAAW,UAAU,SAAS,MAAM,OAAO,KAAK;GAChD,YAAY,UAAU;IAClB,IAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,OAAO,MAAM,QAAQ,KAAK;IAErE,MAAM,eAAe;IACrB,IAAI;GACR;EACH,CAAA,CACA;;AAEb"}
@@ -0,0 +1,4 @@
1
+ import { TextareaProps } from "@ninna-ui/forms";
2
+ declare const Textarea$1: import("react").ForwardRefExoticComponent<TextareaProps & import("react").RefAttributes<HTMLTextAreaElement>>;
3
+ export { Textarea$1 as Textarea };
4
+ //# sourceMappingURL=Textarea.d.ts.map
@@ -0,0 +1,15 @@
1
+ import { formControlClasses, formControlDefaults } from "./FormControlStyles.js";
2
+ import { forwardRef } from "react";
3
+ import { jsx } from "react/jsx-runtime";
4
+ import { Textarea } from "@ninna-ui/forms";
5
+ // src/forms/Textarea.tsx
6
+ const Textarea$1 = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(Textarea, {
7
+ ref,
8
+ ...formControlDefaults,
9
+ ...props,
10
+ className: `${formControlClasses} ${className ?? ""}`
11
+ }));
12
+ Textarea$1.displayName = "Textarea";
13
+ export { Textarea$1 as Textarea };
14
+
15
+ //# sourceMappingURL=Textarea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Textarea.js","names":["Textarea","NinnaTextarea"],"sources":["../../src/forms/Textarea.tsx"],"sourcesContent":["import { Textarea as NinnaTextarea, type TextareaProps } from '@ninna-ui/forms';\nimport { forwardRef } from 'react';\n\nimport { formControlClasses, formControlDefaults } from './FormControlStyles';\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(({ className, ...props }, ref) => (\n <NinnaTextarea\n ref={ref}\n {...formControlDefaults}\n {...props}\n className={`${formControlClasses} ${className ?? ''}`}\n />\n));\nTextarea.displayName = 'Textarea';\n"],"mappings":";;;;;AAKA,MAAaA,aAAW,YAAgD,EAAE,WAAW,GAAG,SAAS,QAC7F,oBAACC,UAAD;CACS;CACL,GAAI;CACJ,GAAI;CACJ,WAAW,GAAG,mBAAmB,GAAG,aAAa;AACpD,CAAA,CACJ;AACD,WAAS,cAAc"}
@@ -0,0 +1,12 @@
1
+ import { Checkbox, CheckboxProps } from "./Checkbox.js";
2
+ import { Field, FieldProps } from "./Field.js";
3
+ import { Disclosure, FormAction, FormContent, FormField, FormRow, FormSection, FormStack } from "./FormSection.js";
4
+ import { InlineFields } from "./InlineFields.js";
5
+ import { Input, InputProps } from "./Input.js";
6
+ import { OptionSelect } from "./OptionSelect.js";
7
+ import { RadioGroup, RadioGroupItem, RadioGroupItemProps, RadioGroupProps } from "./RadioGroup.js";
8
+ import { Select, SelectItem, SelectProps } from "./Select.js";
9
+ import { Switch } from "./Switch.js";
10
+ import { TagInput } from "./TagInput.js";
11
+ import { Textarea } from "./Textarea.js";
12
+ export { Checkbox, type CheckboxProps, Disclosure, Field, type FieldProps, FormAction, FormContent, FormField, FormRow, FormSection, FormStack, InlineFields, Input, type InputProps, OptionSelect, RadioGroup, RadioGroupItem, type RadioGroupItemProps, type RadioGroupProps, Select, SelectItem, type SelectProps, Switch, TagInput, Textarea };
@@ -0,0 +1,64 @@
1
+ import { ReactNode } from "react";
2
+ /** The design system's own words, in English. Apps pass their translations through DesignSystemProvider. */
3
+ export declare const defaultDesignSystemLabels: {
4
+ close: string;
5
+ cancel: string;
6
+ retry: string;
7
+ toolbar: string;
8
+ imageSize: (width: number, height: number) => string;
9
+ folders: {
10
+ path: string;
11
+ selectedPath: (path: string) => string;
12
+ open: (name: string) => string;
13
+ chooseFolder: string;
14
+ title: string;
15
+ root: string;
16
+ upOneLevel: string;
17
+ loading: string;
18
+ loadFailed: string;
19
+ empty: string;
20
+ loadMore: string;
21
+ chooseThis: string;
22
+ };
23
+ theme: {
24
+ label: string;
25
+ system: string;
26
+ light: string;
27
+ dark: string;
28
+ };
29
+ };
30
+ export type DesignSystemLabels = typeof defaultDesignSystemLabels;
31
+ /** The labels an app translates: any group or label left out keeps its English default. */
32
+ export type DesignSystemLabelOverrides = { [Key in keyof DesignSystemLabels]?: DesignSystemLabels[Key] extends ((...args: never[]) => unknown) ? DesignSystemLabels[Key] : DesignSystemLabels[Key] extends object ? Partial<DesignSystemLabels[Key]> : DesignSystemLabels[Key]; };
33
+ export declare function DesignSystemProvider({ children, labels }: {
34
+ children: ReactNode;
35
+ labels?: DesignSystemLabelOverrides;
36
+ }): import("react").JSX.Element;
37
+ export declare function useDesignSystemLabels(): {
38
+ close: string;
39
+ cancel: string;
40
+ retry: string;
41
+ toolbar: string;
42
+ imageSize: (width: number, height: number) => string;
43
+ folders: {
44
+ path: string;
45
+ selectedPath: (path: string) => string;
46
+ open: (name: string) => string;
47
+ chooseFolder: string;
48
+ title: string;
49
+ root: string;
50
+ upOneLevel: string;
51
+ loading: string;
52
+ loadFailed: string;
53
+ empty: string;
54
+ loadMore: string;
55
+ chooseThis: string;
56
+ };
57
+ theme: {
58
+ label: string;
59
+ system: string;
60
+ light: string;
61
+ dark: string;
62
+ };
63
+ };
64
+ //# sourceMappingURL=DesignSystemProvider.d.ts.map
@@ -0,0 +1,66 @@
1
+ import { createContext, useContext, useMemo } from "react";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { LucideProvider } from "lucide-react";
4
+ // src/foundations/DesignSystemProvider.tsx
5
+ /** The design system's own words, in English. Apps pass their translations through DesignSystemProvider. */
6
+ const defaultDesignSystemLabels = {
7
+ close: "Close",
8
+ cancel: "Cancel",
9
+ retry: "Try again",
10
+ toolbar: "Toolbar",
11
+ imageSize: (width, height) => `${width} × ${height}`,
12
+ folders: {
13
+ path: "Folder path",
14
+ selectedPath: (path) => `Selected folder: ${path}`,
15
+ open: (name) => `Open ${name}`,
16
+ chooseFolder: "Choose folder",
17
+ title: "Select a folder",
18
+ root: "Root",
19
+ upOneLevel: "Up one level",
20
+ loading: "Loading folders",
21
+ loadFailed: "Could not load folders",
22
+ empty: "No folders",
23
+ loadMore: "Load more",
24
+ chooseThis: "Choose this folder"
25
+ },
26
+ theme: {
27
+ label: "Appearance",
28
+ system: "Match system",
29
+ light: "Light",
30
+ dark: "Dark"
31
+ }
32
+ };
33
+ const LabelContext = createContext(defaultDesignSystemLabels);
34
+ /** Lucide draws on a 24px grid at a 2px stroke; 1.75 matches the weight of Lar's type at the sizes icons use. */
35
+ const iconStrokeWidth = 1.75;
36
+ function DesignSystemProvider({ children, labels }) {
37
+ const value = useMemo(() => mergeLabels(labels), [labels]);
38
+ return /* @__PURE__ */ jsx(LabelContext.Provider, {
39
+ value,
40
+ children: /* @__PURE__ */ jsx(LucideProvider, {
41
+ strokeWidth: iconStrokeWidth,
42
+ children
43
+ })
44
+ });
45
+ }
46
+ function mergeLabels(labels) {
47
+ if (!labels) return defaultDesignSystemLabels;
48
+ return {
49
+ ...defaultDesignSystemLabels,
50
+ ...labels,
51
+ folders: {
52
+ ...defaultDesignSystemLabels.folders,
53
+ ...labels.folders
54
+ },
55
+ theme: {
56
+ ...defaultDesignSystemLabels.theme,
57
+ ...labels.theme
58
+ }
59
+ };
60
+ }
61
+ function useDesignSystemLabels() {
62
+ return useContext(LabelContext);
63
+ }
64
+ export { DesignSystemProvider, defaultDesignSystemLabels, useDesignSystemLabels };
65
+
66
+ //# sourceMappingURL=DesignSystemProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DesignSystemProvider.js","names":[],"sources":["../../src/foundations/DesignSystemProvider.tsx"],"sourcesContent":["/* oxlint-disable react/only-export-components -- Provider and consumer share the same UI label contract. */\nimport { LucideProvider } from 'lucide-react';\nimport { createContext, type ReactNode, useContext, useMemo } from 'react';\n\n/** The design system's own words, in English. Apps pass their translations through DesignSystemProvider. */\nexport const defaultDesignSystemLabels = {\n close: 'Close',\n cancel: 'Cancel',\n retry: 'Try again',\n toolbar: 'Toolbar',\n imageSize: (width: number, height: number) => `${width} × ${height}`,\n folders: {\n path: 'Folder path',\n selectedPath: (path: string) => `Selected folder: ${path}`,\n open: (name: string) => `Open ${name}`,\n chooseFolder: 'Choose folder',\n title: 'Select a folder',\n root: 'Root',\n upOneLevel: 'Up one level',\n loading: 'Loading folders',\n loadFailed: 'Could not load folders',\n empty: 'No folders',\n loadMore: 'Load more',\n chooseThis: 'Choose this folder',\n },\n theme: {\n label: 'Appearance',\n system: 'Match system',\n light: 'Light',\n dark: 'Dark',\n },\n};\n\nexport type DesignSystemLabels = typeof defaultDesignSystemLabels;\n\n/** The labels an app translates: any group or label left out keeps its English default. */\nexport type DesignSystemLabelOverrides = {\n [Key in keyof DesignSystemLabels]?: DesignSystemLabels[Key] extends (...args: never[]) => unknown\n ? DesignSystemLabels[Key]\n : DesignSystemLabels[Key] extends object\n ? Partial<DesignSystemLabels[Key]>\n : DesignSystemLabels[Key];\n};\n\nconst LabelContext = createContext(defaultDesignSystemLabels);\n\n/** Lucide draws on a 24px grid at a 2px stroke; 1.75 matches the weight of Lar's type at the sizes icons use. */\nconst iconStrokeWidth = 1.75;\n\nexport function DesignSystemProvider({\n children,\n labels,\n}: {\n children: ReactNode;\n labels?: DesignSystemLabelOverrides;\n}) {\n const value = useMemo(() => mergeLabels(labels), [labels]);\n\n return (\n <LabelContext.Provider value={value}>\n <LucideProvider strokeWidth={iconStrokeWidth}>{children}</LucideProvider>\n </LabelContext.Provider>\n );\n}\n\nfunction mergeLabels(labels: DesignSystemLabelOverrides | undefined): DesignSystemLabels {\n if (!labels) return defaultDesignSystemLabels;\n\n return {\n ...defaultDesignSystemLabels,\n ...labels,\n folders: { ...defaultDesignSystemLabels.folders, ...labels.folders },\n theme: { ...defaultDesignSystemLabels.theme, ...labels.theme },\n };\n}\n\nexport function useDesignSystemLabels() {\n return useContext(LabelContext);\n}\n"],"mappings":";;;;;AAKA,MAAa,4BAA4B;CACrC,OAAO;CACP,QAAQ;CACR,OAAO;CACP,SAAS;CACT,YAAY,OAAe,WAAmB,GAAG,MAAM,KAAK;CAC5D,SAAS;EACL,MAAM;EACN,eAAe,SAAiB,oBAAoB;EACpD,OAAO,SAAiB,QAAQ;EAChC,cAAc;EACd,OAAO;EACP,MAAM;EACN,YAAY;EACZ,SAAS;EACT,YAAY;EACZ,OAAO;EACP,UAAU;EACV,YAAY;CAChB;CACA,OAAO;EACH,OAAO;EACP,QAAQ;EACR,OAAO;EACP,MAAM;CACV;AACJ;AAaA,MAAM,eAAe,cAAc,yBAAyB;;AAG5D,MAAM,kBAAkB;AAExB,SAAgB,qBAAqB,EACjC,UACA,UAID;CACC,MAAM,QAAQ,cAAc,YAAY,MAAM,GAAG,CAAC,MAAM,CAAC;CAEzD,OACI,oBAAC,aAAa,UAAd;EAA8B;EAC1B,UAAA,oBAAC,gBAAD;GAAgB,aAAa;GAAkB;EAAyB,CAAA;CACrD,CAAA;AAE/B;AAEA,SAAS,YAAY,QAAoE;CACrF,IAAI,CAAC,QAAQ,OAAO;CAEpB,OAAO;EACH,GAAG;EACH,GAAG;EACH,SAAS;GAAE,GAAG,0BAA0B;GAAS,GAAG,OAAO;EAAQ;EACnE,OAAO;GAAE,GAAG,0BAA0B;GAAO,GAAG,OAAO;EAAM;CACjE;AACJ;AAEA,SAAgB,wBAAwB;CACpC,OAAO,WAAW,YAAY;AAClC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Safari, and Firefox while macOS keyboard navigation is off, move Tab only between text fields unless an
3
+ * element sets its tab index explicitly. Controls spread this before their own props, so Tab reaches every
4
+ * button, switch, select, radio and link in every browser and callers can still opt out with `tabIndex={-1}`.
5
+ */
6
+ export declare const tabbable: {
7
+ readonly tabIndex: 0;
8
+ };
9
+ //# sourceMappingURL=KeyboardFocus.d.ts.map
@@ -0,0 +1,10 @@
1
+ // src/foundations/KeyboardFocus.ts
2
+ /**
3
+ * Safari, and Firefox while macOS keyboard navigation is off, move Tab only between text fields unless an
4
+ * element sets its tab index explicitly. Controls spread this before their own props, so Tab reaches every
5
+ * button, switch, select, radio and link in every browser and callers can still opt out with `tabIndex={-1}`.
6
+ */
7
+ const tabbable = { tabIndex: 0 };
8
+ export { tabbable };
9
+
10
+ //# sourceMappingURL=KeyboardFocus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeyboardFocus.js","names":[],"sources":["../../src/foundations/KeyboardFocus.ts"],"sourcesContent":["/**\n * Safari, and Firefox while macOS keyboard navigation is off, move Tab only between text fields unless an\n * element sets its tab index explicitly. Controls spread this before their own props, so Tab reaches every\n * button, switch, select, radio and link in every browser and callers can still opt out with `tabIndex={-1}`.\n */\nexport const tabbable = { tabIndex: 0 } as const;\n"],"mappings":";;;;;;AAKA,MAAa,WAAW,EAAE,UAAU,EAAE"}
@@ -0,0 +1,5 @@
1
+ /** Apple devices write the app's shortcuts with ⌘; everything else uses Ctrl. */
2
+ export declare const applePlatform: boolean;
3
+ /** Whether a key press is the shortcut ⌘<key> (Ctrl+<key> off Apple devices), with no other modifier. */
4
+ export declare function isShortcut(event: KeyboardEvent, key: string): boolean;
5
+ //# sourceMappingURL=KeyboardShortcut.d.ts.map
@@ -0,0 +1,10 @@
1
+ // src/foundations/KeyboardShortcut.ts
2
+ /** Apple devices write the app's shortcuts with ⌘; everything else uses Ctrl. */
3
+ const applePlatform = typeof navigator !== "undefined" && /Mac|iPhone|iPad/.test(navigator.userAgent);
4
+ /** Whether a key press is the shortcut ⌘<key> (Ctrl+<key> off Apple devices), with no other modifier. */
5
+ function isShortcut(event, key) {
6
+ return event.key.toLowerCase() === key.toLowerCase() && (applePlatform ? event.metaKey && !event.ctrlKey : event.ctrlKey && !event.metaKey) && !event.altKey && !event.shiftKey;
7
+ }
8
+ export { applePlatform, isShortcut };
9
+
10
+ //# sourceMappingURL=KeyboardShortcut.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeyboardShortcut.js","names":[],"sources":["../../src/foundations/KeyboardShortcut.ts"],"sourcesContent":["/** Apple devices write the app's shortcuts with ⌘; everything else uses Ctrl. */\nexport const applePlatform = typeof navigator !== 'undefined' && /Mac|iPhone|iPad/.test(navigator.userAgent);\n\n/** Whether a key press is the shortcut ⌘<key> (Ctrl+<key> off Apple devices), with no other modifier. */\nexport function isShortcut(event: KeyboardEvent, key: string): boolean {\n return (\n event.key.toLowerCase() === key.toLowerCase() &&\n (applePlatform ? event.metaKey && !event.ctrlKey : event.ctrlKey && !event.metaKey) &&\n !event.altKey &&\n !event.shiftKey\n );\n}\n"],"mappings":";;AACA,MAAa,gBAAgB,OAAO,cAAc,eAAe,kBAAkB,KAAK,UAAU,SAAS;;AAG3G,SAAgB,WAAW,OAAsB,KAAsB;CACnE,OACI,MAAM,IAAI,YAAY,MAAM,IAAI,YAAY,MAC3C,gBAAgB,MAAM,WAAW,CAAC,MAAM,UAAU,MAAM,WAAW,CAAC,MAAM,YAC3E,CAAC,MAAM,UACP,CAAC,MAAM;AAEf"}
@@ -0,0 +1,14 @@
1
+ export type ThemePreference = 'system' | 'light' | 'dark';
2
+ export interface ThemeController {
3
+ /** Applies the stored preference before the first render, so the page never flashes the other theme. */
4
+ initialize(): void;
5
+ /** The current preference and a setter that stores and applies it, kept in step across tabs. */
6
+ useTheme(): readonly [ThemePreference, (value: ThemePreference) => void];
7
+ }
8
+ export declare function isThemePreference(value: string): value is ThemePreference;
9
+ /**
10
+ * The light/dark preference of one app, stored under `storageKey` in localStorage. The preference sets `.light` or
11
+ * `.dark` on <html> (nothing follows the system) and points the page's `theme-color` metas at the matching background.
12
+ */
13
+ export declare function createThemeController(storageKey: string): ThemeController;
14
+ //# sourceMappingURL=Theme.d.ts.map