@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,48 @@
1
+ import { Text } from "../typography/Typography.js";
2
+ import { moveTabSelection } from "./TabKeys.js";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ // src/navigation/ViewTabs.tsx
5
+ /** A row of tabs that switches which list the page shows, each with its count. */
6
+ function ViewTabs({ items, label, onChange, value, end }) {
7
+ const tabs = /* @__PURE__ */ jsx("div", {
8
+ role: "tablist",
9
+ "aria-label": label,
10
+ className: "border-base-300 flex min-w-0 gap-1 overflow-x-auto border-b",
11
+ onKeyDown: (event) => moveTabSelection(event, items.map((item) => item.value), value, onChange),
12
+ children: items.map((item) => {
13
+ const selected = item.value === value;
14
+ return /* @__PURE__ */ jsxs("button", {
15
+ type: "button",
16
+ role: "tab",
17
+ "aria-selected": selected,
18
+ tabIndex: selected ? 0 : -1,
19
+ "data-value": item.value,
20
+ className: `focus-visible:outline-primary -mb-px flex shrink-0 items-center gap-2 border-b-2 px-3 py-2 text-sm font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-[-2px] ${selected ? "border-base-content text-base-content" : "text-base-700 hover:text-base-content border-transparent"}`,
21
+ onClick: () => onChange(item.value),
22
+ children: [
23
+ item.label,
24
+ item.count !== void 0 ? " " : null,
25
+ item.count !== void 0 ? /* @__PURE__ */ jsx(Text, {
26
+ as: "span",
27
+ variant: "caption",
28
+ className: `rounded-full px-1.5 tabular-nums ${selected ? "bg-base-content/10 text-base-content" : "bg-base-200 text-base-700 dark:bg-base-300"}`,
29
+ children: item.count
30
+ }) : null
31
+ ]
32
+ }, item.value);
33
+ })
34
+ });
35
+ return end ? /* @__PURE__ */ jsxs("div", {
36
+ className: "flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between",
37
+ children: [/* @__PURE__ */ jsx("div", {
38
+ className: "min-w-0",
39
+ children: tabs
40
+ }), /* @__PURE__ */ jsx("div", {
41
+ className: "sm:w-64 sm:pb-1",
42
+ children: end
43
+ })]
44
+ }) : tabs;
45
+ }
46
+ export { ViewTabs };
47
+
48
+ //# sourceMappingURL=ViewTabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ViewTabs.js","names":[],"sources":["../../src/navigation/ViewTabs.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { Text } from '../typography/Typography';\nimport { moveTabSelection } from './TabKeys';\n\nexport interface ViewTabsItem<T extends string> {\n value: T;\n label: string;\n /** Already formatted for the viewer's locale. */\n count?: string;\n}\n\ninterface ViewTabsProps<T extends string> {\n items: readonly ViewTabsItem<T>[];\n label: string;\n onChange: (value: T) => void;\n value: T;\n /** A control that acts on the same list, such as its search, beside the tabs on wide screens. */\n end?: ReactNode;\n}\n\n/** A row of tabs that switches which list the page shows, each with its count. */\nexport function ViewTabs<T extends string>({ items, label, onChange, value, end }: ViewTabsProps<T>) {\n const tabs = (\n <div\n role=\"tablist\"\n aria-label={label}\n className=\"border-base-300 flex min-w-0 gap-1 overflow-x-auto border-b\"\n onKeyDown={(event) =>\n moveTabSelection(\n event,\n items.map((item) => item.value),\n value,\n onChange,\n )\n }\n >\n {items.map((item) => {\n const selected = item.value === value;\n\n return (\n <button\n key={item.value}\n type=\"button\"\n role=\"tab\"\n aria-selected={selected}\n tabIndex={selected ? 0 : -1}\n data-value={item.value}\n className={`focus-visible:outline-primary -mb-px flex shrink-0 items-center gap-2 border-b-2 px-3 py-2 text-sm font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-[-2px] ${\n selected\n ? 'border-base-content text-base-content'\n : 'text-base-700 hover:text-base-content border-transparent'\n }`}\n onClick={() => onChange(item.value)}\n >\n {item.label}\n {item.count !== undefined ? ' ' : null}\n {item.count !== undefined ? (\n <Text\n as=\"span\"\n variant=\"caption\"\n className={`rounded-full px-1.5 tabular-nums ${\n selected\n ? 'bg-base-content/10 text-base-content'\n : 'bg-base-200 text-base-700 dark:bg-base-300'\n }`}\n >\n {item.count}\n </Text>\n ) : null}\n </button>\n );\n })}\n </div>\n );\n\n return end ? (\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-end sm:justify-between\">\n <div className=\"min-w-0\">{tabs}</div>\n <div className=\"sm:w-64 sm:pb-1\">{end}</div>\n </div>\n ) : (\n tabs\n );\n}\n"],"mappings":";;;;;AAsBA,SAAgB,SAA2B,EAAE,OAAO,OAAO,UAAU,OAAO,OAAyB;CACjG,MAAM,OACF,oBAAC,OAAD;EACI,MAAK;EACL,cAAY;EACZ,WAAU;EACV,YAAY,UACR,iBACI,OACA,MAAM,KAAK,SAAS,KAAK,KAAK,GAC9B,OACA,QACJ;EAGH,UAAA,MAAM,KAAK,SAAS;GACjB,MAAM,WAAW,KAAK,UAAU;GAEhC,OACI,qBAAC,UAAD;IAEI,MAAK;IACL,MAAK;IACL,iBAAe;IACf,UAAU,WAAW,IAAI;IACzB,cAAY,KAAK;IACjB,WAAW,gMACP,WACM,0CACA;IAEV,eAAe,SAAS,KAAK,KAAK;IAZtC,UAAA;KAcK,KAAK;KACL,KAAK,UAAU,KAAA,IAAY,MAAM;KACjC,KAAK,UAAU,KAAA,IACZ,oBAAC,MAAD;MACI,IAAG;MACH,SAAQ;MACR,WAAW,oCACP,WACM,yCACA;MAGT,UAAA,KAAK;KACJ,CAAA,IACN;IACA;GA5BC,GAAA,KAAK,KA4BN;EAEhB,CAAC;CACA,CAAA;CAGT,OAAO,MACH,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CACI,oBAAC,OAAD;GAAK,WAAU;GAAW,UAAA;EAAU,CAAA,GACpC,oBAAC,OAAD;GAAK,WAAU;GAAmB,UAAA;EAAS,CAAA,CAC1C;CAEL,CAAA,IAAA;AAER"}
@@ -0,0 +1,8 @@
1
+ import { ArtworkTabs, ArtworkTabsItem } from "./ArtworkTabs.js";
2
+ import { Breadcrumbs } from "./Breadcrumbs.js";
3
+ import { CollectionBrowseControls, CollectionBrowseSelector, CollectionBrowseTrigger } from "./CollectionBrowseSelector.js";
4
+ import { CollectionView, CollectionViewToggle } from "./CollectionViewToggle.js";
5
+ import { DrilldownBrowseGroup, DrilldownBrowseItem, DrilldownBrowseSelector } from "./DrilldownBrowseSelector.js";
6
+ import { FolderSelector, FolderSelectorOption, FolderSelectorProps } from "./FolderSelector.js";
7
+ import { ViewTabs, ViewTabsItem } from "./ViewTabs.js";
8
+ export { ArtworkTabs, type ArtworkTabsItem, Breadcrumbs, CollectionBrowseControls, CollectionBrowseSelector, CollectionBrowseTrigger, type CollectionView, CollectionViewToggle, type DrilldownBrowseGroup, type DrilldownBrowseItem, DrilldownBrowseSelector, FolderSelector, type FolderSelectorOption, type FolderSelectorProps, ViewTabs, type ViewTabsItem };
@@ -0,0 +1,21 @@
1
+ import { ReactNode } from "react";
2
+ interface ActionModalProps {
3
+ accessibleTitle?: string;
4
+ actionColor?: 'danger' | 'primary';
5
+ actionDisabled?: boolean;
6
+ actionLabel: string;
7
+ children: ReactNode;
8
+ bodyLayout?: 'scroll' | 'fill';
9
+ description: string;
10
+ footerLeading?: ReactNode;
11
+ headerActions?: ReactNode;
12
+ loading: boolean;
13
+ onAction: () => void;
14
+ onClose: () => void;
15
+ sidebar?: ReactNode;
16
+ noValidate?: boolean;
17
+ title: string;
18
+ }
19
+ export declare function ActionModal({ accessibleTitle, actionColor, actionDisabled, actionLabel, children, bodyLayout, description, footerLeading, headerActions, loading, onAction, onClose, sidebar, noValidate, title }: ActionModalProps): import("react").JSX.Element;
20
+ export {};
21
+ //# sourceMappingURL=ActionModal.d.ts.map
@@ -0,0 +1,48 @@
1
+ import { Button } from "../actions/Button.js";
2
+ import { useDesignSystemLabels } from "../foundations/DesignSystemProvider.js";
3
+ import { Modal } from "./Modal.js";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ // src/overlays/ActionModal.tsx
6
+ function ActionModal({ accessibleTitle, actionColor = "primary", actionDisabled = false, actionLabel, children, bodyLayout, description, footerLeading, headerActions, loading, onAction, onClose, sidebar, noValidate, title }) {
7
+ const labels = useDesignSystemLabels();
8
+ return /* @__PURE__ */ jsx(Modal, {
9
+ loading,
10
+ onClose,
11
+ children: /* @__PURE__ */ jsx(Modal.Content, {
12
+ title,
13
+ accessibleTitle,
14
+ description,
15
+ sidebar,
16
+ headerActions,
17
+ children: /* @__PURE__ */ jsxs(Modal.Form, {
18
+ noValidate,
19
+ onSubmit: (event) => {
20
+ event.preventDefault();
21
+ if (!loading && !actionDisabled) onAction();
22
+ },
23
+ children: [/* @__PURE__ */ jsx(Modal.Body, {
24
+ layout: bodyLayout,
25
+ children
26
+ }), /* @__PURE__ */ jsxs(Modal.Footer, {
27
+ leading: footerLeading,
28
+ children: [/* @__PURE__ */ jsx(Button, {
29
+ type: "button",
30
+ disabled: loading,
31
+ onClick: onClose,
32
+ variant: "secondary",
33
+ children: labels.cancel
34
+ }), /* @__PURE__ */ jsx(Button, {
35
+ type: "submit",
36
+ loading,
37
+ disabled: loading || actionDisabled,
38
+ variant: actionColor === "danger" ? "destructive" : "primary",
39
+ children: actionLabel
40
+ })]
41
+ })]
42
+ })
43
+ })
44
+ });
45
+ }
46
+ export { ActionModal };
47
+
48
+ //# sourceMappingURL=ActionModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionModal.js","names":[],"sources":["../../src/overlays/ActionModal.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { Button } from '../actions/Button';\nimport { useDesignSystemLabels } from '../foundations/DesignSystemProvider';\nimport { Modal } from './Modal';\n\ninterface ActionModalProps {\n accessibleTitle?: string;\n actionColor?: 'danger' | 'primary';\n actionDisabled?: boolean;\n actionLabel: string;\n children: ReactNode;\n bodyLayout?: 'scroll' | 'fill';\n description: string;\n footerLeading?: ReactNode;\n headerActions?: ReactNode;\n loading: boolean;\n onAction: () => void;\n onClose: () => void;\n sidebar?: ReactNode;\n noValidate?: boolean;\n title: string;\n}\n\nexport function ActionModal({\n accessibleTitle,\n actionColor = 'primary',\n actionDisabled = false,\n actionLabel,\n children,\n bodyLayout,\n description,\n footerLeading,\n headerActions,\n loading,\n onAction,\n onClose,\n sidebar,\n noValidate,\n title,\n}: ActionModalProps) {\n const labels = useDesignSystemLabels();\n\n return (\n <Modal loading={loading} onClose={onClose}>\n <Modal.Content\n title={title}\n accessibleTitle={accessibleTitle}\n description={description}\n sidebar={sidebar}\n headerActions={headerActions}\n >\n <Modal.Form\n noValidate={noValidate}\n onSubmit={(event) => {\n event.preventDefault();\n\n if (!loading && !actionDisabled) {\n onAction();\n }\n }}\n >\n <Modal.Body layout={bodyLayout}>{children}</Modal.Body>\n <Modal.Footer leading={footerLeading}>\n <Button type=\"button\" disabled={loading} onClick={onClose} variant=\"secondary\">\n {labels.cancel}\n </Button>\n <Button\n type=\"submit\"\n loading={loading}\n disabled={loading || actionDisabled}\n variant={actionColor === 'danger' ? 'destructive' : 'primary'}\n >\n {actionLabel}\n </Button>\n </Modal.Footer>\n </Modal.Form>\n </Modal.Content>\n </Modal>\n );\n}\n"],"mappings":";;;;;AAwBA,SAAgB,YAAY,EACxB,iBACA,cAAc,WACd,iBAAiB,OACjB,aACA,UACA,YACA,aACA,eACA,eACA,SACA,UACA,SACA,SACA,YACA,SACiB;CACjB,MAAM,SAAS,sBAAsB;CAErC,OACI,oBAAC,OAAD;EAAgB;EAAkB;EAC9B,UAAA,oBAAC,MAAM,SAAP;GACW;GACU;GACJ;GACJ;GACM;GAEf,UAAA,qBAAC,MAAM,MAAP;IACgB;IACZ,WAAW,UAAU;KACjB,MAAM,eAAe;KAErB,IAAI,CAAC,WAAW,CAAC,gBACb,SAAS;IAEjB;IARJ,UAAA,CAUI,oBAAC,MAAM,MAAP;KAAY,QAAQ;KAAa;IAAqB,CAAA,GACtD,qBAAC,MAAM,QAAP;KAAc,SAAS;KAAvB,UAAA,CACI,oBAAC,QAAD;MAAQ,MAAK;MAAS,UAAU;MAAS,SAAS;MAAS,SAAQ;MAC9D,UAAA,OAAO;KACJ,CAAA,GACR,oBAAC,QAAD;MACI,MAAK;MACI;MACT,UAAU,WAAW;MACrB,SAAS,gBAAgB,WAAW,gBAAgB;MAEnD,UAAA;KACG,CAAA,CACE;IACN,CAAA,CAAA;;EACD,CAAA;CACZ,CAAA;AAEf"}
@@ -0,0 +1,43 @@
1
+ import { ReactNode } from "react";
2
+ interface CommandPaletteProps {
3
+ /** The dialog's accessible title and description; the field says the rest. */
4
+ label: string;
5
+ description: string;
6
+ placeholder: string;
7
+ query: string;
8
+ onQueryChange: (query: string) => void;
9
+ /** Narrows the list to one level, shown as a chip before the field; Backspace in an empty field leaves it. */
10
+ scope?: {
11
+ label: string;
12
+ leaveLabel: string;
13
+ onLeave: () => void;
14
+ };
15
+ /** The options' values in list order, for the arrow keys and Enter. */
16
+ options: readonly string[];
17
+ onSelect: (value: string) => void;
18
+ onClose: () => void;
19
+ listLabel: string;
20
+ busy?: boolean;
21
+ /** Shown when nothing is listed. */
22
+ empty?: ReactNode;
23
+ /** Quiet key hints under the list, on screens with a keyboard. */
24
+ footer?: ReactNode;
25
+ children: ReactNode;
26
+ }
27
+ /** T3 Code's command palette: a field over one keyboard list of grouped options, as a dialog over the page
28
+ * or, on phones, the whole screen. The arrow keys move through `options`, Enter selects, Escape closes. */
29
+ export declare function CommandPalette({ label, description, placeholder, query, onQueryChange, scope, options, onSelect, onClose, listLabel, busy, empty, footer, children }: CommandPaletteProps): import("react").JSX.Element;
30
+ /** A labelled run of options in the palette's list. */
31
+ export declare function CommandPaletteGroup({ label, children }: {
32
+ label: string;
33
+ children: ReactNode;
34
+ }): import("react").JSX.Element;
35
+ /** Props for a palette option, such as a `ResultRow`: its id, highlight and pointer tracking. */
36
+ export declare function useCommandPaletteOption(value: string): {
37
+ id: string;
38
+ selected: boolean;
39
+ tabIndex: number;
40
+ onPointerMove: () => void;
41
+ };
42
+ export {};
43
+ //# sourceMappingURL=CommandPalette.d.ts.map
@@ -0,0 +1,163 @@
1
+ import { IconButton } from "../actions/IconButton.js";
2
+ import { ResultList } from "../collections/ResultList.js";
3
+ import { useDesignSystemLabels } from "../foundations/DesignSystemProvider.js";
4
+ import { Text } from "../typography/Typography.js";
5
+ import { useModalAutoFocus } from "./useModalAutoFocus.js";
6
+ import { useScrollFade } from "./useScrollFade.js";
7
+ import { createContext, useContext, useEffect, useId, useRef, useState } from "react";
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
+ import { SearchIcon, XIcon } from "lucide-react";
10
+ import { Modal } from "@ninna-ui/overlays";
11
+ // src/overlays/CommandPalette.tsx
12
+ const OptionContext = createContext(null);
13
+ /** T3 Code's command palette: a field over one keyboard list of grouped options, as a dialog over the page
14
+ * or, on phones, the whole screen. The arrow keys move through `options`, Enter selects, Escape closes. */
15
+ function CommandPalette({ label, description, placeholder, query, onQueryChange, scope, options, onSelect, onClose, listLabel, busy = false, empty, footer, children }) {
16
+ const labels = useDesignSystemLabels();
17
+ const focusProps = useModalAutoFocus();
18
+ const { setViewport, setContent, className } = useScrollFade();
19
+ const listId = useId();
20
+ const input = useRef(null);
21
+ const [chosen, setActiveValue] = useState();
22
+ const activeValue = chosen !== void 0 && options.includes(chosen) ? chosen : options[0];
23
+ useEffect(() => {
24
+ if (activeValue) document.getElementById(optionId(listId, activeValue))?.scrollIntoView({ block: "nearest" });
25
+ }, [activeValue, listId]);
26
+ return /* @__PURE__ */ jsx(Modal, {
27
+ open: true,
28
+ onOpenChange: (open) => !open && onClose(),
29
+ children: /* @__PURE__ */ jsxs(Modal.Content, {
30
+ title: label,
31
+ description,
32
+ centered: false,
33
+ ...focusProps,
34
+ className: "flex max-h-[min(36rem,calc(100dvh-6rem))] w-[calc(100vw-2rem)] max-w-2xl flex-col overflow-hidden p-0 shadow-(--lar-shadow-dialog) max-sm:top-0 max-sm:left-0 max-sm:h-dvh max-sm:max-h-none max-sm:w-full max-sm:max-w-none max-sm:translate-x-0 max-sm:rounded-none! max-sm:border-0 max-sm:pt-[env(safe-area-inset-top)]",
35
+ children: [
36
+ /* @__PURE__ */ jsxs("div", {
37
+ className: "border-base-300 [&>svg]:text-base-600 flex shrink-0 items-center gap-2 border-b px-4 py-3 [&>svg]:size-4 [&>svg]:shrink-0",
38
+ children: [
39
+ /* @__PURE__ */ jsx(SearchIcon, {}),
40
+ scope ? /* @__PURE__ */ jsxs("span", {
41
+ className: "bg-primary/12 text-primary flex shrink-0 items-center gap-1 rounded-md py-0.5 pr-1 pl-2 text-xs font-medium",
42
+ children: [scope.label, /* @__PURE__ */ jsx("button", {
43
+ type: "button",
44
+ tabIndex: -1,
45
+ "aria-label": scope.leaveLabel,
46
+ className: "hover:bg-primary/15 rounded-sm p-0.5 [&>svg]:size-3",
47
+ onClick: () => {
48
+ scope.onLeave();
49
+ input.current?.focus();
50
+ },
51
+ children: /* @__PURE__ */ jsx(XIcon, {})
52
+ })]
53
+ }) : null,
54
+ /* @__PURE__ */ jsx("input", {
55
+ ref: input,
56
+ role: "combobox",
57
+ "aria-label": label,
58
+ "aria-expanded": true,
59
+ "aria-controls": listId,
60
+ "aria-autocomplete": "list",
61
+ "aria-activedescendant": activeValue ? optionId(listId, activeValue) : void 0,
62
+ "aria-busy": busy,
63
+ placeholder,
64
+ value: query,
65
+ className: "text-base-content placeholder:text-base-600 min-w-0 flex-1 bg-transparent text-base outline-none sm:text-sm",
66
+ onChange: (event) => onQueryChange(event.target.value),
67
+ onKeyDown: (event) => {
68
+ if (event.nativeEvent.isComposing) return;
69
+ if (event.key === "Backspace" && !query && scope) {
70
+ event.preventDefault();
71
+ scope.onLeave();
72
+ } else if ((event.key === "ArrowDown" || event.key === "ArrowUp") && options.length) {
73
+ event.preventDefault();
74
+ const index = activeValue ? options.indexOf(activeValue) : -1;
75
+ const step = event.key === "ArrowDown" ? 1 : -1;
76
+ setActiveValue(options[(index + step + options.length) % options.length]);
77
+ } else if (event.key === "Enter" && activeValue) {
78
+ event.preventDefault();
79
+ onSelect(activeValue);
80
+ }
81
+ }
82
+ }),
83
+ /* @__PURE__ */ jsx("span", {
84
+ className: "flex sm:hidden",
85
+ children: /* @__PURE__ */ jsx(IconButton, {
86
+ "aria-label": labels.close,
87
+ icon: /* @__PURE__ */ jsx(XIcon, {}),
88
+ onClick: onClose,
89
+ variant: "header"
90
+ })
91
+ })
92
+ ]
93
+ }),
94
+ /* @__PURE__ */ jsx("div", {
95
+ ref: setViewport,
96
+ className: `min-h-0 flex-1 overflow-y-auto overscroll-contain p-2 ${className}`,
97
+ children: /* @__PURE__ */ jsxs("div", {
98
+ ref: setContent,
99
+ className: "flow-root",
100
+ children: [/* @__PURE__ */ jsx(OptionContext.Provider, {
101
+ value: {
102
+ listId,
103
+ activeValue,
104
+ setActiveValue
105
+ },
106
+ children: /* @__PURE__ */ jsx(ResultList, {
107
+ id: listId,
108
+ label: listLabel,
109
+ density: "compact",
110
+ "aria-busy": busy,
111
+ children
112
+ })
113
+ }), options.length === 0 && empty ? /* @__PURE__ */ jsx(Text, {
114
+ tone: "muted",
115
+ className: "px-3 py-8 text-center",
116
+ children: empty
117
+ }) : null]
118
+ })
119
+ }),
120
+ footer ? /* @__PURE__ */ jsx("div", {
121
+ className: "border-base-300 text-2xs text-base-700 hidden shrink-0 items-center gap-4 border-t px-4 py-2 pointer-fine:flex",
122
+ children: footer
123
+ }) : null
124
+ ]
125
+ })
126
+ });
127
+ }
128
+ /** A labelled run of options in the palette's list. */
129
+ function CommandPaletteGroup({ label, children }) {
130
+ const labelId = useId();
131
+ return /* @__PURE__ */ jsxs("div", {
132
+ role: "group",
133
+ "aria-labelledby": labelId,
134
+ className: "flex flex-col gap-1 not-first:pt-2",
135
+ children: [/* @__PURE__ */ jsx(Text, {
136
+ as: "span",
137
+ id: labelId,
138
+ variant: "caption",
139
+ tone: "muted",
140
+ className: "px-2 pt-1 font-medium tracking-wide uppercase",
141
+ children: label
142
+ }), children]
143
+ });
144
+ }
145
+ /** Props for a palette option, such as a `ResultRow`: its id, highlight and pointer tracking. */
146
+ function useCommandPaletteOption(value) {
147
+ const context = useContext(OptionContext);
148
+ if (!context) throw new Error("useCommandPaletteOption must be used inside CommandPalette");
149
+ return {
150
+ id: optionId(context.listId, value),
151
+ selected: context.activeValue === value,
152
+ tabIndex: -1,
153
+ onPointerMove: () => {
154
+ if (context.activeValue !== value) context.setActiveValue(value);
155
+ }
156
+ };
157
+ }
158
+ function optionId(listId, value) {
159
+ return `${listId}-${value.replace(/[^\w-]/g, "_")}`;
160
+ }
161
+ export { CommandPalette, CommandPaletteGroup, useCommandPaletteOption };
162
+
163
+ //# sourceMappingURL=CommandPalette.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandPalette.js","names":["NinnaModal"],"sources":["../../src/overlays/CommandPalette.tsx"],"sourcesContent":["/* oxlint-disable react/only-export-components -- The option hook belongs to the palette. */\n\nimport { Modal as NinnaModal } from '@ninna-ui/overlays';\nimport { SearchIcon, XIcon } from 'lucide-react';\nimport { createContext, type ReactNode, useContext, useEffect, useId, useRef, useState } from 'react';\n\nimport { IconButton } from '../actions/IconButton';\nimport { ResultList } from '../collections/ResultList';\nimport { useDesignSystemLabels } from '../foundations/DesignSystemProvider';\nimport { Text } from '../typography/Typography';\nimport { useModalAutoFocus } from './useModalAutoFocus';\nimport { useScrollFade } from './useScrollFade';\n\ninterface CommandPaletteProps {\n /** The dialog's accessible title and description; the field says the rest. */\n label: string;\n description: string;\n placeholder: string;\n query: string;\n onQueryChange: (query: string) => void;\n /** Narrows the list to one level, shown as a chip before the field; Backspace in an empty field leaves it. */\n scope?: { label: string; leaveLabel: string; onLeave: () => void };\n /** The options' values in list order, for the arrow keys and Enter. */\n options: readonly string[];\n onSelect: (value: string) => void;\n onClose: () => void;\n listLabel: string;\n busy?: boolean;\n /** Shown when nothing is listed. */\n empty?: ReactNode;\n /** Quiet key hints under the list, on screens with a keyboard. */\n footer?: ReactNode;\n children: ReactNode;\n}\n\nconst OptionContext = createContext<{\n listId: string;\n activeValue: string | undefined;\n setActiveValue: (value: string) => void;\n} | null>(null);\n\n/** T3 Code's command palette: a field over one keyboard list of grouped options, as a dialog over the page\n * or, on phones, the whole screen. The arrow keys move through `options`, Enter selects, Escape closes. */\nexport function CommandPalette({\n label,\n description,\n placeholder,\n query,\n onQueryChange,\n scope,\n options,\n onSelect,\n onClose,\n listLabel,\n busy = false,\n empty,\n footer,\n children,\n}: CommandPaletteProps) {\n const labels = useDesignSystemLabels();\n const focusProps = useModalAutoFocus();\n const { setViewport, setContent, className } = useScrollFade();\n const listId = useId();\n const input = useRef<HTMLInputElement>(null);\n const [chosen, setActiveValue] = useState<string>();\n // The highlight follows the list: when the chosen option leaves it, the first option takes over.\n const activeValue = chosen !== undefined && options.includes(chosen) ? chosen : options[0];\n\n useEffect(() => {\n if (activeValue) document.getElementById(optionId(listId, activeValue))?.scrollIntoView({ block: 'nearest' });\n }, [activeValue, listId]);\n\n return (\n <NinnaModal open onOpenChange={(open) => !open && onClose()}>\n <NinnaModal.Content\n title={label}\n description={description}\n centered={false}\n {...focusProps}\n className=\"flex max-h-[min(36rem,calc(100dvh-6rem))] w-[calc(100vw-2rem)] max-w-2xl flex-col overflow-hidden p-0 shadow-(--lar-shadow-dialog) max-sm:top-0 max-sm:left-0 max-sm:h-dvh max-sm:max-h-none max-sm:w-full max-sm:max-w-none max-sm:translate-x-0 max-sm:rounded-none! max-sm:border-0 max-sm:pt-[env(safe-area-inset-top)]\"\n >\n <div className=\"border-base-300 [&>svg]:text-base-600 flex shrink-0 items-center gap-2 border-b px-4 py-3 [&>svg]:size-4 [&>svg]:shrink-0\">\n <SearchIcon />\n {scope ? (\n <span className=\"bg-primary/12 text-primary flex shrink-0 items-center gap-1 rounded-md py-0.5 pr-1 pl-2 text-xs font-medium\">\n {scope.label}\n <button\n type=\"button\"\n tabIndex={-1}\n aria-label={scope.leaveLabel}\n className=\"hover:bg-primary/15 rounded-sm p-0.5 [&>svg]:size-3\"\n onClick={() => {\n scope.onLeave();\n input.current?.focus();\n }}\n >\n <XIcon />\n </button>\n </span>\n ) : null}\n <input\n ref={input}\n role=\"combobox\"\n aria-label={label}\n aria-expanded\n aria-controls={listId}\n aria-autocomplete=\"list\"\n aria-activedescendant={activeValue ? optionId(listId, activeValue) : undefined}\n aria-busy={busy}\n placeholder={placeholder}\n value={query}\n className=\"text-base-content placeholder:text-base-600 min-w-0 flex-1 bg-transparent text-base outline-none sm:text-sm\"\n onChange={(event) => onQueryChange(event.target.value)}\n onKeyDown={(event) => {\n if (event.nativeEvent.isComposing) return;\n\n if (event.key === 'Backspace' && !query && scope) {\n event.preventDefault();\n scope.onLeave();\n } else if ((event.key === 'ArrowDown' || event.key === 'ArrowUp') && options.length) {\n event.preventDefault();\n\n const index = activeValue ? options.indexOf(activeValue) : -1;\n const step = event.key === 'ArrowDown' ? 1 : -1;\n\n setActiveValue(options[(index + step + options.length) % options.length]!);\n } else if (event.key === 'Enter' && activeValue) {\n event.preventDefault();\n onSelect(activeValue);\n }\n }}\n />\n <span className=\"flex sm:hidden\">\n <IconButton aria-label={labels.close} icon={<XIcon />} onClick={onClose} variant=\"header\" />\n </span>\n </div>\n <div ref={setViewport} className={`min-h-0 flex-1 overflow-y-auto overscroll-contain p-2 ${className}`}>\n <div ref={setContent} className=\"flow-root\">\n <OptionContext.Provider value={{ listId, activeValue, setActiveValue }}>\n <ResultList id={listId} label={listLabel} density=\"compact\" aria-busy={busy}>\n {children}\n </ResultList>\n </OptionContext.Provider>\n {options.length === 0 && empty ? (\n <Text tone=\"muted\" className=\"px-3 py-8 text-center\">\n {empty}\n </Text>\n ) : null}\n </div>\n </div>\n {footer ? (\n <div className=\"border-base-300 text-2xs text-base-700 hidden shrink-0 items-center gap-4 border-t px-4 py-2 pointer-fine:flex\">\n {footer}\n </div>\n ) : null}\n </NinnaModal.Content>\n </NinnaModal>\n );\n}\n\n/** A labelled run of options in the palette's list. */\nexport function CommandPaletteGroup({ label, children }: { label: string; children: ReactNode }) {\n const labelId = useId();\n\n return (\n <div role=\"group\" aria-labelledby={labelId} className=\"flex flex-col gap-1 not-first:pt-2\">\n <Text\n as=\"span\"\n id={labelId}\n variant=\"caption\"\n tone=\"muted\"\n className=\"px-2 pt-1 font-medium tracking-wide uppercase\"\n >\n {label}\n </Text>\n {children}\n </div>\n );\n}\n\n/** Props for a palette option, such as a `ResultRow`: its id, highlight and pointer tracking. */\nexport function useCommandPaletteOption(value: string) {\n const context = useContext(OptionContext);\n\n if (!context) throw new Error('useCommandPaletteOption must be used inside CommandPalette');\n\n return {\n id: optionId(context.listId, value),\n selected: context.activeValue === value,\n tabIndex: -1,\n onPointerMove: () => {\n if (context.activeValue !== value) context.setActiveValue(value);\n },\n };\n}\n\nfunction optionId(listId: string, value: string) {\n return `${listId}-${value.replace(/[^\\w-]/g, '_')}`;\n}\n"],"mappings":";;;;;;;;;;;AAmCA,MAAM,gBAAgB,cAIZ,IAAI;;;AAId,SAAgB,eAAe,EAC3B,OACA,aACA,aACA,OACA,eACA,OACA,SACA,UACA,SACA,WACA,OAAO,OACP,OACA,QACA,YACoB;CACpB,MAAM,SAAS,sBAAsB;CACrC,MAAM,aAAa,kBAAkB;CACrC,MAAM,EAAE,aAAa,YAAY,cAAc,cAAc;CAC7D,MAAM,SAAS,MAAM;CACrB,MAAM,QAAQ,OAAyB,IAAI;CAC3C,MAAM,CAAC,QAAQ,kBAAkB,SAAiB;CAElD,MAAM,cAAc,WAAW,KAAA,KAAa,QAAQ,SAAS,MAAM,IAAI,SAAS,QAAQ;CAExF,gBAAgB;EACZ,IAAI,aAAa,SAAS,eAAe,SAAS,QAAQ,WAAW,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,UAAU,CAAC;CAChH,GAAG,CAAC,aAAa,MAAM,CAAC;CAExB,OACI,oBAACA,OAAD;EAAY,MAAA;EAAK,eAAe,SAAS,CAAC,QAAQ,QAAQ;EACtD,UAAA,qBAACA,MAAW,SAAZ;GACI,OAAO;GACM;GACb,UAAU;GACV,GAAI;GACJ,WAAU;GALd,UAAA;IAOI,qBAAC,OAAD;KAAK,WAAU;KAAf,UAAA;MACI,oBAAC,YAAD,CAAa,CAAA;MACZ,QACG,qBAAC,QAAD;OAAM,WAAU;OAAhB,UAAA,CACK,MAAM,OACP,oBAAC,UAAD;QACI,MAAK;QACL,UAAU;QACV,cAAY,MAAM;QAClB,WAAU;QACV,eAAe;SACX,MAAM,QAAQ;SACd,MAAM,SAAS,MAAM;QACzB;QAEA,UAAA,oBAAC,OAAD,CAAQ,CAAA;OACJ,CAAA,CACN;MACN,CAAA,IAAA;MACJ,oBAAC,SAAD;OACI,KAAK;OACL,MAAK;OACL,cAAY;OACZ,iBAAA;OACA,iBAAe;OACf,qBAAkB;OAClB,yBAAuB,cAAc,SAAS,QAAQ,WAAW,IAAI,KAAA;OACrE,aAAW;OACE;OACb,OAAO;OACP,WAAU;OACV,WAAW,UAAU,cAAc,MAAM,OAAO,KAAK;OACrD,YAAY,UAAU;QAClB,IAAI,MAAM,YAAY,aAAa;QAEnC,IAAI,MAAM,QAAQ,eAAe,CAAC,SAAS,OAAO;SAC9C,MAAM,eAAe;SACrB,MAAM,QAAQ;QAClB,OAAO,KAAK,MAAM,QAAQ,eAAe,MAAM,QAAQ,cAAc,QAAQ,QAAQ;SACjF,MAAM,eAAe;SAErB,MAAM,QAAQ,cAAc,QAAQ,QAAQ,WAAW,IAAI;SAC3D,MAAM,OAAO,MAAM,QAAQ,cAAc,IAAI;SAE7C,eAAe,SAAS,QAAQ,OAAO,QAAQ,UAAU,QAAQ,OAAQ;QAC7E,OAAO,IAAI,MAAM,QAAQ,WAAW,aAAa;SAC7C,MAAM,eAAe;SACrB,SAAS,WAAW;QACxB;OACJ;MACH,CAAA;MACD,oBAAC,QAAD;OAAM,WAAU;OACZ,UAAA,oBAAC,YAAD;QAAY,cAAY,OAAO;QAAO,MAAM,oBAAC,OAAD,CAAQ,CAAA;QAAG,SAAS;QAAS,SAAQ;OAAU,CAAA;MACzF,CAAA;KACL;;IACL,oBAAC,OAAD;KAAK,KAAK;KAAa,WAAW,yDAAyD;KACvF,UAAA,qBAAC,OAAD;MAAK,KAAK;MAAY,WAAU;MAAhC,UAAA,CACI,oBAAC,cAAc,UAAf;OAAwB,OAAO;QAAE;QAAQ;QAAa;OAAe;OACjE,UAAA,oBAAC,YAAD;QAAY,IAAI;QAAQ,OAAO;QAAW,SAAQ;QAAU,aAAW;QAClE;OACO,CAAA;MACQ,CAAA,GACvB,QAAQ,WAAW,KAAK,QACrB,oBAAC,MAAD;OAAM,MAAK;OAAQ,WAAU;OACxB,UAAA;MACC,CAAA,IACN,IACH;;IACJ,CAAA;IACJ,SACG,oBAAC,OAAD;KAAK,WAAU;KACV,UAAA;IACA,CAAA,IACL;GACY;;CACZ,CAAA;AAEpB;;AAGA,SAAgB,oBAAoB,EAAE,OAAO,YAAoD;CAC7F,MAAM,UAAU,MAAM;CAEtB,OACI,qBAAC,OAAD;EAAK,MAAK;EAAQ,mBAAiB;EAAS,WAAU;EAAtD,UAAA,CACI,oBAAC,MAAD;GACI,IAAG;GACH,IAAI;GACJ,SAAQ;GACR,MAAK;GACL,WAAU;GAET,UAAA;EACC,CAAA,GACL,QACA;;AAEb;;AAGA,SAAgB,wBAAwB,OAAe;CACnD,MAAM,UAAU,WAAW,aAAa;CAExC,IAAI,CAAC,SAAS,MAAM,IAAI,MAAM,4DAA4D;CAE1F,OAAO;EACH,IAAI,SAAS,QAAQ,QAAQ,KAAK;EAClC,UAAU,QAAQ,gBAAgB;EAClC,UAAU;EACV,qBAAqB;GACjB,IAAI,QAAQ,gBAAgB,OAAO,QAAQ,eAAe,KAAK;EACnE;CACJ;AACJ;AAEA,SAAS,SAAS,QAAgB,OAAe;CAC7C,OAAO,GAAG,OAAO,GAAG,MAAM,QAAQ,WAAW,GAAG;AACpD"}
@@ -0,0 +1,19 @@
1
+ import { ComponentProps, ReactNode } from "react";
2
+ import { Drawer, DrawerBodyProps, DrawerContentProps, DrawerFooterProps } from "@ninna-ui/overlays";
3
+ interface DrawerContentPolicyProps extends Omit<DrawerContentProps, 'className' | 'placement' | 'size' | 'title'> {
4
+ title: string;
5
+ subtitle?: ReactNode;
6
+ /** Header controls shown before the close button. */
7
+ actions?: ReactNode;
8
+ /** Runs as the drawer closes; preventing its default keeps focus from returning to the opening control. */
9
+ onCloseAutoFocus?: (event: Event) => void;
10
+ }
11
+ declare function DrawerRoot(props: ComponentProps<typeof Drawer>): import("react").JSX.Element;
12
+ declare const Drawer$1: typeof DrawerRoot & {
13
+ Body: import("react").ForwardRefExoticComponent<Omit<DrawerBodyProps, "className"> & import("react").RefAttributes<HTMLDivElement>>;
14
+ Content: import("react").ForwardRefExoticComponent<DrawerContentPolicyProps & import("react").RefAttributes<HTMLDivElement>>;
15
+ Footer: import("react").ForwardRefExoticComponent<Omit<DrawerFooterProps, "className"> & import("react").RefAttributes<HTMLDivElement>>;
16
+ Trigger: import("react").ForwardRefExoticComponent<import("@ninna-ui/overlays").DrawerTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
17
+ };
18
+ export { Drawer$1 as Drawer };
19
+ //# sourceMappingURL=Drawer.d.ts.map
@@ -0,0 +1,83 @@
1
+ import { IconButton } from "../actions/IconButton.js";
2
+ import { useDesignSystemLabels } from "../foundations/DesignSystemProvider.js";
3
+ import { Heading, Text } from "../typography/Typography.js";
4
+ import { useModalAutoFocus } from "./useModalAutoFocus.js";
5
+ import { forwardRef } from "react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ import { XIcon } from "lucide-react";
8
+ import { Drawer } from "@ninna-ui/overlays";
9
+ // src/overlays/Drawer.tsx
10
+ function DrawerRoot(props) {
11
+ return /* @__PURE__ */ jsx(Drawer, { ...props });
12
+ }
13
+ const DrawerContent = forwardRef(({ actions, children, description, subtitle, title, onCloseAutoFocus, ...props }, ref) => {
14
+ const labels = useDesignSystemLabels();
15
+ const autoFocus = useModalAutoFocus();
16
+ const focusProps = {
17
+ ...autoFocus,
18
+ onCloseAutoFocus: (event) => {
19
+ onCloseAutoFocus?.(event);
20
+ if (!event.defaultPrevented) autoFocus.onCloseAutoFocus(event);
21
+ }
22
+ };
23
+ return /* @__PURE__ */ jsxs(Drawer.Content, {
24
+ ref,
25
+ ...props,
26
+ ...focusProps,
27
+ title,
28
+ description,
29
+ placement: "right",
30
+ size: "lg",
31
+ className: "flex w-full max-w-xl flex-col overflow-hidden",
32
+ children: [/* @__PURE__ */ jsxs("header", {
33
+ "data-slot": "drawer-header",
34
+ className: "border-base-300 shrink-0 border-b px-5 py-5 sm:px-6 sm:py-6",
35
+ children: [/* @__PURE__ */ jsxs("div", {
36
+ className: "grid min-w-0 grid-cols-[minmax(0,1fr)_auto] items-start gap-4",
37
+ children: [/* @__PURE__ */ jsx(Heading, {
38
+ as: "h2",
39
+ className: "min-w-0 wrap-break-word",
40
+ variant: "section",
41
+ children: title
42
+ }), /* @__PURE__ */ jsxs("div", {
43
+ className: "flex items-center gap-1",
44
+ children: [actions, /* @__PURE__ */ jsx(Drawer.Close, {
45
+ asChild: true,
46
+ children: /* @__PURE__ */ jsx(IconButton, {
47
+ "aria-label": labels.close,
48
+ icon: /* @__PURE__ */ jsx(XIcon, {}),
49
+ variant: "header"
50
+ })
51
+ })]
52
+ })]
53
+ }), subtitle ?? description ? /* @__PURE__ */ jsx(Text, {
54
+ className: "mt-2 wrap-break-word",
55
+ variant: "description",
56
+ tone: "muted",
57
+ children: subtitle ?? description
58
+ }) : null]
59
+ }), children]
60
+ });
61
+ });
62
+ DrawerContent.displayName = "Drawer.Content";
63
+ const DrawerBody = forwardRef((props, ref) => /* @__PURE__ */ jsx(Drawer.Body, {
64
+ ref,
65
+ ...props,
66
+ className: "min-h-0 min-w-0 flex-1 overflow-y-auto overscroll-contain px-5 py-5 sm:px-6"
67
+ }));
68
+ DrawerBody.displayName = "Drawer.Body";
69
+ const DrawerFooter = forwardRef((props, ref) => /* @__PURE__ */ jsx(Drawer.Footer, {
70
+ ref,
71
+ ...props,
72
+ className: "border-base-300 shrink-0 justify-between border-t px-5 py-3 sm:px-6 sm:py-3"
73
+ }));
74
+ DrawerFooter.displayName = "Drawer.Footer";
75
+ const Drawer$1 = Object.assign(DrawerRoot, {
76
+ Body: DrawerBody,
77
+ Content: DrawerContent,
78
+ Footer: DrawerFooter,
79
+ Trigger: Drawer.Trigger
80
+ });
81
+ export { Drawer$1 as Drawer };
82
+
83
+ //# sourceMappingURL=Drawer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Drawer.js","names":["NinnaDrawer","Drawer"],"sources":["../../src/overlays/Drawer.tsx"],"sourcesContent":["/* oxlint-disable react/only-export-components -- Compound members are exported through Drawer. */\nimport {\n Drawer as NinnaDrawer,\n type DrawerBodyProps,\n type DrawerContentProps,\n type DrawerFooterProps,\n} from '@ninna-ui/overlays';\nimport { XIcon } from 'lucide-react';\nimport { type ComponentProps, forwardRef, type ReactNode } from 'react';\n\nimport { IconButton } from '../actions/IconButton';\nimport { useDesignSystemLabels } from '../foundations/DesignSystemProvider';\nimport { Heading, Text } from '../typography/Typography';\nimport { useModalAutoFocus } from './useModalAutoFocus';\n\ninterface DrawerContentPolicyProps extends Omit<DrawerContentProps, 'className' | 'placement' | 'size' | 'title'> {\n title: string;\n subtitle?: ReactNode;\n /** Header controls shown before the close button. */\n actions?: ReactNode;\n /** Runs as the drawer closes; preventing its default keeps focus from returning to the opening control. */\n onCloseAutoFocus?: (event: Event) => void;\n}\n\nfunction DrawerRoot(props: ComponentProps<typeof NinnaDrawer>) {\n return <NinnaDrawer {...props} />;\n}\n\nconst DrawerContent = forwardRef<HTMLDivElement, DrawerContentPolicyProps>(\n ({ actions, children, description, subtitle, title, onCloseAutoFocus, ...props }, ref) => {\n const labels = useDesignSystemLabels();\n const autoFocus = useModalAutoFocus();\n const focusProps = {\n ...autoFocus,\n onCloseAutoFocus: (event: Event) => {\n onCloseAutoFocus?.(event);\n\n if (!event.defaultPrevented) autoFocus.onCloseAutoFocus(event);\n },\n };\n\n return (\n <NinnaDrawer.Content\n ref={ref}\n {...props}\n {...focusProps}\n title={title}\n description={description}\n placement=\"right\"\n size=\"lg\"\n className=\"flex w-full max-w-xl flex-col overflow-hidden\"\n >\n <header\n data-slot=\"drawer-header\"\n className=\"border-base-300 shrink-0 border-b px-5 py-5 sm:px-6 sm:py-6\"\n >\n <div className=\"grid min-w-0 grid-cols-[minmax(0,1fr)_auto] items-start gap-4\">\n <Heading as=\"h2\" className=\"min-w-0 wrap-break-word\" variant=\"section\">\n {title}\n </Heading>\n <div className=\"flex items-center gap-1\">\n {actions}\n <NinnaDrawer.Close asChild>\n <IconButton aria-label={labels.close} icon={<XIcon />} variant=\"header\" />\n </NinnaDrawer.Close>\n </div>\n </div>\n {(subtitle ?? description) ? (\n <Text className=\"mt-2 wrap-break-word\" variant=\"description\" tone=\"muted\">\n {subtitle ?? description}\n </Text>\n ) : null}\n </header>\n {children}\n </NinnaDrawer.Content>\n );\n },\n);\n\nDrawerContent.displayName = 'Drawer.Content';\n\nconst DrawerBody = forwardRef<HTMLDivElement, Omit<DrawerBodyProps, 'className'>>((props, ref) => (\n <NinnaDrawer.Body\n ref={ref}\n {...props}\n className=\"min-h-0 min-w-0 flex-1 overflow-y-auto overscroll-contain px-5 py-5 sm:px-6\"\n />\n));\n\nDrawerBody.displayName = 'Drawer.Body';\n\nconst DrawerFooter = forwardRef<HTMLDivElement, Omit<DrawerFooterProps, 'className'>>((props, ref) => (\n <NinnaDrawer.Footer\n ref={ref}\n {...props}\n className=\"border-base-300 shrink-0 justify-between border-t px-5 py-3 sm:px-6 sm:py-3\"\n />\n));\n\nDrawerFooter.displayName = 'Drawer.Footer';\n\nexport const Drawer = Object.assign(DrawerRoot, {\n Body: DrawerBody,\n Content: DrawerContent,\n Footer: DrawerFooter,\n Trigger: NinnaDrawer.Trigger,\n});\n"],"mappings":";;;;;;;;;AAwBA,SAAS,WAAW,OAA2C;CAC3D,OAAO,oBAACA,QAAD,EAAa,GAAI,MAAQ,CAAA;AACpC;AAEA,MAAM,gBAAgB,YACjB,EAAE,SAAS,UAAU,aAAa,UAAU,OAAO,kBAAkB,GAAG,SAAS,QAAQ;CACtF,MAAM,SAAS,sBAAsB;CACrC,MAAM,YAAY,kBAAkB;CACpC,MAAM,aAAa;EACf,GAAG;EACH,mBAAmB,UAAiB;GAChC,mBAAmB,KAAK;GAExB,IAAI,CAAC,MAAM,kBAAkB,UAAU,iBAAiB,KAAK;EACjE;CACJ;CAEA,OACI,qBAACA,OAAY,SAAb;EACS;EACL,GAAI;EACJ,GAAI;EACG;EACM;EACb,WAAU;EACV,MAAK;EACL,WAAU;EARd,UAAA,CAUI,qBAAC,UAAD;GACI,aAAU;GACV,WAAU;GAFd,UAAA,CAII,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACI,oBAAC,SAAD;KAAS,IAAG;KAAK,WAAU;KAA0B,SAAQ;KACxD,UAAA;IACI,CAAA,GACT,qBAAC,OAAD;KAAK,WAAU;KAAf,UAAA,CACK,SACD,oBAACA,OAAY,OAAb;MAAmB,SAAA;MACf,UAAA,oBAAC,YAAD;OAAY,cAAY,OAAO;OAAO,MAAM,oBAAC,OAAD,CAAQ,CAAA;OAAG,SAAQ;MAAU,CAAA;KAC1D,CAAA,CAClB;IACJ,CAAA,CAAA;GACH,CAAA,GAAA,YAAY,cACV,oBAAC,MAAD;IAAM,WAAU;IAAuB,SAAQ;IAAc,MAAK;IAC7D,UAAA,YAAY;GACX,CAAA,IACN,IACA;EACP,CAAA,GAAA,QACgB;;AAE7B,CACJ;AAEA,cAAc,cAAc;AAE5B,MAAM,aAAa,YAAgE,OAAO,QACtF,oBAACA,OAAY,MAAb;CACS;CACL,GAAI;CACJ,WAAU;AACb,CAAA,CACJ;AAED,WAAW,cAAc;AAEzB,MAAM,eAAe,YAAkE,OAAO,QAC1F,oBAACA,OAAY,QAAb;CACS;CACL,GAAI;CACJ,WAAU;AACb,CAAA,CACJ;AAED,aAAa,cAAc;AAE3B,MAAaC,WAAS,OAAO,OAAO,YAAY;CAC5C,MAAM;CACN,SAAS;CACT,QAAQ;CACR,SAASD,OAAY;AACzB,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { ComponentProps } from "react";
2
+ import { DropdownMenu, DropdownMenuContentProps, DropdownMenuItemProps, DropdownMenuLabelProps, DropdownMenuRadioGroupProps, DropdownMenuRadioItemProps } from "@ninna-ui/overlays";
3
+ interface DropdownMenuContentPolicyProps extends Omit<DropdownMenuContentProps, 'className'> {
4
+ width?: 'sm' | 'md';
5
+ }
6
+ interface DropdownMenuLabelPolicyProps extends Omit<DropdownMenuLabelProps, 'className'> {
7
+ presentation?: 'section' | 'identity';
8
+ }
9
+ interface DropdownMenuItemPolicyProps extends Omit<DropdownMenuItemProps, 'className'> {
10
+ /** Forward the underlying menu item's behavior to a link without a second tab stop. */
11
+ asChild?: boolean;
12
+ }
13
+ interface DropdownMenuRadioGroupPolicyProps extends Omit<DropdownMenuRadioGroupProps, 'className'> {
14
+ presentation?: 'default' | 'segmented';
15
+ }
16
+ interface DropdownMenuRadioItemPolicyProps extends Omit<DropdownMenuRadioItemProps, 'className'> {
17
+ presentation?: 'default' | 'segmented';
18
+ }
19
+ declare function DropdownMenuRoot(props: ComponentProps<typeof DropdownMenu>): import("react").JSX.Element;
20
+ declare const DropdownMenu$1: typeof DropdownMenuRoot & {
21
+ ({ children, open, defaultOpen, onOpenChange, modal, dir }: import("@ninna-ui/overlays").DropdownMenuProps): import("react").JSX.Element;
22
+ displayName: string;
23
+ } & {
24
+ Trigger: import("react").ForwardRefExoticComponent<import("@ninna-ui/overlays").DropdownMenuTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
25
+ Content: import("react").ForwardRefExoticComponent<DropdownMenuContentProps & import("react").RefAttributes<HTMLDivElement>>;
26
+ Item: import("react").ForwardRefExoticComponent<DropdownMenuItemProps & import("react").RefAttributes<HTMLDivElement>>;
27
+ CheckboxItem: import("react").ForwardRefExoticComponent<import("@ninna-ui/overlays").DropdownMenuCheckboxItemProps & import("react").RefAttributes<HTMLDivElement>>;
28
+ RadioGroup: import("react").ForwardRefExoticComponent<DropdownMenuRadioGroupProps & import("react").RefAttributes<HTMLDivElement>>;
29
+ RadioItem: import("react").ForwardRefExoticComponent<DropdownMenuRadioItemProps & import("react").RefAttributes<HTMLDivElement>>;
30
+ Label: import("react").ForwardRefExoticComponent<DropdownMenuLabelProps & import("react").RefAttributes<HTMLDivElement>>;
31
+ Separator: import("react").ForwardRefExoticComponent<import("@ninna-ui/overlays").DropdownMenuSeparatorProps & import("react").RefAttributes<HTMLDivElement>>;
32
+ Group: import("react").ForwardRefExoticComponent<import("@ninna-ui/overlays").DropdownMenuGroupProps & import("react").RefAttributes<HTMLDivElement>>;
33
+ Sub: {
34
+ ({ children, open, defaultOpen, onOpenChange }: import("@ninna-ui/overlays").DropdownMenuSubProps): import("react").JSX.Element;
35
+ displayName: string;
36
+ };
37
+ SubTrigger: import("react").ForwardRefExoticComponent<import("@ninna-ui/overlays").DropdownMenuSubTriggerProps & import("react").RefAttributes<HTMLDivElement>>;
38
+ SubContent: import("react").ForwardRefExoticComponent<import("@ninna-ui/overlays").DropdownMenuSubContentProps & import("react").RefAttributes<HTMLDivElement>>;
39
+ } & {
40
+ Content: import("react").ForwardRefExoticComponent<DropdownMenuContentPolicyProps & import("react").RefAttributes<HTMLDivElement>>;
41
+ Item: import("react").ForwardRefExoticComponent<DropdownMenuItemPolicyProps & import("react").RefAttributes<HTMLDivElement>>;
42
+ Label: import("react").ForwardRefExoticComponent<DropdownMenuLabelPolicyProps & import("react").RefAttributes<HTMLDivElement>>;
43
+ RadioGroup: import("react").ForwardRefExoticComponent<DropdownMenuRadioGroupPolicyProps & import("react").RefAttributes<HTMLDivElement>>;
44
+ RadioItem: import("react").ForwardRefExoticComponent<DropdownMenuRadioItemPolicyProps & import("react").RefAttributes<HTMLDivElement>>;
45
+ };
46
+ export { DropdownMenu$1 as DropdownMenu };
47
+ //# sourceMappingURL=DropdownMenu.d.ts.map
@@ -0,0 +1,58 @@
1
+ import { forwardRef } from "react";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { DropdownMenu } from "@ninna-ui/overlays";
4
+ // src/overlays/DropdownMenu.tsx
5
+ const contentWidthClasses = {
6
+ sm: "w-60",
7
+ md: "w-64"
8
+ };
9
+ const DropdownMenuContent = forwardRef(({ side = "bottom", sideOffset = 8, width = "sm", ...props }, ref) => /* @__PURE__ */ jsx(DropdownMenu.Content, {
10
+ ref,
11
+ side,
12
+ sideOffset,
13
+ ...props,
14
+ className: `${contentWidthClasses[width]} max-h-(--radix-dropdown-menu-content-available-height) max-w-[calc(100vw-2rem)] overflow-y-auto`
15
+ }));
16
+ DropdownMenuContent.displayName = "DropdownMenu.Content";
17
+ const DropdownMenuLabel = forwardRef(({ presentation = "section", ...props }, ref) => /* @__PURE__ */ jsx(DropdownMenu.Label, {
18
+ ref,
19
+ ...props,
20
+ className: presentation === "identity" ? "tracking-normal normal-case" : void 0
21
+ }));
22
+ DropdownMenuLabel.displayName = "DropdownMenu.Label";
23
+ const DropdownMenuItem = forwardRef((props, ref) => /* @__PURE__ */ jsx(DropdownMenu.Item, {
24
+ ref,
25
+ ...props,
26
+ className: "aria-[current=page]:bg-primary/10 aria-[current=page]:text-primary max-lg:min-h-11 pointer-coarse:min-h-11 [&>svg]:size-4 [&>svg]:shrink-0"
27
+ }));
28
+ DropdownMenuItem.displayName = "DropdownMenu.Item";
29
+ const DropdownMenuRadioGroup = forwardRef(({ presentation = "default", ...props }, ref) => /* @__PURE__ */ jsx(DropdownMenu.RadioGroup, {
30
+ ref,
31
+ ...props,
32
+ className: presentation === "segmented" ? "bg-base-200/70 flex gap-0.5 rounded-lg p-0.5" : void 0
33
+ }));
34
+ DropdownMenuRadioGroup.displayName = "DropdownMenu.RadioGroup";
35
+ const DropdownMenuRadioItem = forwardRef(({ onSelect, presentation = "default", ...props }, ref) => /* @__PURE__ */ jsx(DropdownMenu.RadioItem, {
36
+ ref,
37
+ ...props,
38
+ "data-presentation": presentation,
39
+ onSelect: presentation === "segmented" ? (event) => {
40
+ event.preventDefault();
41
+ onSelect?.(event);
42
+ } : onSelect,
43
+ className: presentation === "segmented" ? "text-base-600 focus:bg-base-300 focus:text-base-content data-[state=checked]:bg-base-100 data-[state=checked]:text-base-content size-7 justify-center rounded-md p-0 data-[state=checked]:shadow-sm [&>span]:hidden [&>svg]:size-4" : "max-lg:min-h-11 pointer-coarse:min-h-11 [&>svg]:size-4 [&>svg]:shrink-0"
44
+ }));
45
+ DropdownMenuRadioItem.displayName = "DropdownMenu.RadioItem";
46
+ function DropdownMenuRoot(props) {
47
+ return /* @__PURE__ */ jsx(DropdownMenu, { ...props });
48
+ }
49
+ const DropdownMenu$1 = Object.assign(DropdownMenuRoot, DropdownMenu, {
50
+ Content: DropdownMenuContent,
51
+ Item: DropdownMenuItem,
52
+ Label: DropdownMenuLabel,
53
+ RadioGroup: DropdownMenuRadioGroup,
54
+ RadioItem: DropdownMenuRadioItem
55
+ });
56
+ export { DropdownMenu$1 as DropdownMenu };
57
+
58
+ //# sourceMappingURL=DropdownMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DropdownMenu.js","names":["NinnaDropdownMenu","DropdownMenu"],"sources":["../../src/overlays/DropdownMenu.tsx"],"sourcesContent":["/* oxlint-disable react/only-export-components -- Compound members are exported through DropdownMenu. */\n\nimport {\n DropdownMenu as NinnaDropdownMenu,\n type DropdownMenuContentProps,\n type DropdownMenuItemProps,\n type DropdownMenuLabelProps,\n type DropdownMenuRadioGroupProps,\n type DropdownMenuRadioItemProps,\n} from '@ninna-ui/overlays';\nimport { type ComponentProps, forwardRef } from 'react';\n\ninterface DropdownMenuContentPolicyProps extends Omit<DropdownMenuContentProps, 'className'> {\n width?: 'sm' | 'md';\n}\n\nconst contentWidthClasses: Record<NonNullable<DropdownMenuContentPolicyProps['width']>, string> = {\n sm: 'w-60',\n md: 'w-64',\n};\n\nconst DropdownMenuContent = forwardRef<HTMLDivElement, DropdownMenuContentPolicyProps>(\n ({ side = 'bottom', sideOffset = 8, width = 'sm', ...props }, ref) => (\n <NinnaDropdownMenu.Content\n ref={ref}\n side={side}\n sideOffset={sideOffset}\n {...props}\n className={`${contentWidthClasses[width]} max-h-(--radix-dropdown-menu-content-available-height) max-w-[calc(100vw-2rem)] overflow-y-auto`}\n />\n ),\n);\n\nDropdownMenuContent.displayName = 'DropdownMenu.Content';\n\ninterface DropdownMenuLabelPolicyProps extends Omit<DropdownMenuLabelProps, 'className'> {\n presentation?: 'section' | 'identity';\n}\n\nconst DropdownMenuLabel = forwardRef<HTMLDivElement, DropdownMenuLabelPolicyProps>(\n ({ presentation = 'section', ...props }, ref) => (\n <NinnaDropdownMenu.Label\n ref={ref}\n {...props}\n className={presentation === 'identity' ? 'tracking-normal normal-case' : undefined}\n />\n ),\n);\n\nDropdownMenuLabel.displayName = 'DropdownMenu.Label';\n\ninterface DropdownMenuItemPolicyProps extends Omit<DropdownMenuItemProps, 'className'> {\n /** Forward the underlying menu item's behavior to a link without a second tab stop. */\n asChild?: boolean;\n}\n\nconst DropdownMenuItem = forwardRef<HTMLDivElement, DropdownMenuItemPolicyProps>((props, ref) => (\n <NinnaDropdownMenu.Item\n ref={ref}\n {...props}\n className=\"aria-[current=page]:bg-primary/10 aria-[current=page]:text-primary max-lg:min-h-11 pointer-coarse:min-h-11 [&>svg]:size-4 [&>svg]:shrink-0\"\n />\n));\n\nDropdownMenuItem.displayName = 'DropdownMenu.Item';\n\ninterface DropdownMenuRadioGroupPolicyProps extends Omit<DropdownMenuRadioGroupProps, 'className'> {\n presentation?: 'default' | 'segmented';\n}\n\nconst DropdownMenuRadioGroup = forwardRef<HTMLDivElement, DropdownMenuRadioGroupPolicyProps>(\n ({ presentation = 'default', ...props }, ref) => (\n <NinnaDropdownMenu.RadioGroup\n ref={ref}\n {...props}\n className={presentation === 'segmented' ? 'bg-base-200/70 flex gap-0.5 rounded-lg p-0.5' : undefined}\n />\n ),\n);\n\nDropdownMenuRadioGroup.displayName = 'DropdownMenu.RadioGroup';\n\ninterface DropdownMenuRadioItemPolicyProps extends Omit<DropdownMenuRadioItemProps, 'className'> {\n presentation?: 'default' | 'segmented';\n}\n\nconst DropdownMenuRadioItem = forwardRef<HTMLDivElement, DropdownMenuRadioItemPolicyProps>(\n ({ onSelect, presentation = 'default', ...props }, ref) => (\n <NinnaDropdownMenu.RadioItem\n ref={ref}\n {...props}\n data-presentation={presentation}\n onSelect={\n presentation === 'segmented'\n ? (event) => {\n event.preventDefault();\n onSelect?.(event);\n }\n : onSelect\n }\n className={\n presentation === 'segmented'\n ? 'text-base-600 focus:bg-base-300 focus:text-base-content data-[state=checked]:bg-base-100 data-[state=checked]:text-base-content size-7 justify-center rounded-md p-0 data-[state=checked]:shadow-sm [&>span]:hidden [&>svg]:size-4'\n : 'max-lg:min-h-11 pointer-coarse:min-h-11 [&>svg]:size-4 [&>svg]:shrink-0'\n }\n />\n ),\n);\n\nDropdownMenuRadioItem.displayName = 'DropdownMenu.RadioItem';\n\nfunction DropdownMenuRoot(props: ComponentProps<typeof NinnaDropdownMenu>) {\n return <NinnaDropdownMenu {...props} />;\n}\n\nexport const DropdownMenu = Object.assign(DropdownMenuRoot, NinnaDropdownMenu, {\n Content: DropdownMenuContent,\n Item: DropdownMenuItem,\n Label: DropdownMenuLabel,\n RadioGroup: DropdownMenuRadioGroup,\n RadioItem: DropdownMenuRadioItem,\n});\n"],"mappings":";;;;AAgBA,MAAM,sBAA4F;CAC9F,IAAI;CACJ,IAAI;AACR;AAEA,MAAM,sBAAsB,YACvB,EAAE,OAAO,UAAU,aAAa,GAAG,QAAQ,MAAM,GAAG,SAAS,QAC1D,oBAACA,aAAkB,SAAnB;CACS;CACC;CACM;CACZ,GAAI;CACJ,WAAW,GAAG,oBAAoB,OAAO;AAC5C,CAAA,CAET;AAEA,oBAAoB,cAAc;AAMlC,MAAM,oBAAoB,YACrB,EAAE,eAAe,WAAW,GAAG,SAAS,QACrC,oBAACA,aAAkB,OAAnB;CACS;CACL,GAAI;CACJ,WAAW,iBAAiB,aAAa,gCAAgC,KAAA;AAC5E,CAAA,CAET;AAEA,kBAAkB,cAAc;AAOhC,MAAM,mBAAmB,YAAyD,OAAO,QACrF,oBAACA,aAAkB,MAAnB;CACS;CACL,GAAI;CACJ,WAAU;AACb,CAAA,CACJ;AAED,iBAAiB,cAAc;AAM/B,MAAM,yBAAyB,YAC1B,EAAE,eAAe,WAAW,GAAG,SAAS,QACrC,oBAACA,aAAkB,YAAnB;CACS;CACL,GAAI;CACJ,WAAW,iBAAiB,cAAc,iDAAiD,KAAA;AAC9F,CAAA,CAET;AAEA,uBAAuB,cAAc;AAMrC,MAAM,wBAAwB,YACzB,EAAE,UAAU,eAAe,WAAW,GAAG,SAAS,QAC/C,oBAACA,aAAkB,WAAnB;CACS;CACL,GAAI;CACJ,qBAAmB;CACnB,UACI,iBAAiB,eACV,UAAU;EACP,MAAM,eAAe;EACrB,WAAW,KAAK;CACpB,IACA;CAEV,WACI,iBAAiB,cACX,uOACA;AAEb,CAAA,CAET;AAEA,sBAAsB,cAAc;AAEpC,SAAS,iBAAiB,OAAiD;CACvE,OAAO,oBAACA,cAAD,EAAmB,GAAI,MAAQ,CAAA;AAC1C;AAEA,MAAaC,iBAAe,OAAO,OAAO,kBAAkBD,cAAmB;CAC3E,SAAS;CACT,MAAM;CACN,OAAO;CACP,YAAY;CACZ,WAAW;AACf,CAAC"}