aural-ui 2.0.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 (308) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +456 -0
  3. package/dist/components/aspect-ratio/AspectRatio.stories.tsx +1327 -0
  4. package/dist/components/aspect-ratio/index.tsx +10 -0
  5. package/dist/components/aspect-ratio/meta.ts +8 -0
  6. package/dist/components/avatar/Avatar.stories.tsx +645 -0
  7. package/dist/components/avatar/index.tsx +50 -0
  8. package/dist/components/avatar/meta.ts +8 -0
  9. package/dist/components/badge/Badge.stories.tsx +169 -0
  10. package/dist/components/badge/index.tsx +28 -0
  11. package/dist/components/badge/meta.ts +6 -0
  12. package/dist/components/banner/Banner.stories.tsx +475 -0
  13. package/dist/components/banner/index.tsx +256 -0
  14. package/dist/components/banner/meta.ts +36 -0
  15. package/dist/components/button/Button.stories.tsx +74 -0
  16. package/dist/components/button/index.tsx +158 -0
  17. package/dist/components/button/meta.ts +33 -0
  18. package/dist/components/card/Card.stories.tsx +377 -0
  19. package/dist/components/card/index.tsx +85 -0
  20. package/dist/components/card/meta.ts +14 -0
  21. package/dist/components/char-count/CharCount.stories.tsx +334 -0
  22. package/dist/components/char-count/index.tsx +51 -0
  23. package/dist/components/char-count/meta.ts +13 -0
  24. package/dist/components/checkbox/Checkbox.stories.tsx +209 -0
  25. package/dist/components/checkbox/index.tsx +34 -0
  26. package/dist/components/checkbox/meta.ts +19 -0
  27. package/dist/components/chip/Chip.stories.tsx +207 -0
  28. package/dist/components/chip/index.tsx +92 -0
  29. package/dist/components/chip/meta.ts +17 -0
  30. package/dist/components/circular-loader/CircularLoader.stories.tsx +741 -0
  31. package/dist/components/circular-loader/index.tsx +138 -0
  32. package/dist/components/circular-loader/meta.ts +11 -0
  33. package/dist/components/collapsible/Collapsible.stories.tsx +319 -0
  34. package/dist/components/collapsible/index.tsx +158 -0
  35. package/dist/components/collapsible/meta.ts +22 -0
  36. package/dist/components/command/Command.stories.tsx +996 -0
  37. package/dist/components/command/index.tsx +324 -0
  38. package/dist/components/command/meta.ts +18 -0
  39. package/dist/components/dialog/Dialog.stories.tsx +963 -0
  40. package/dist/components/dialog/index.tsx +250 -0
  41. package/dist/components/dialog/meta.ts +28 -0
  42. package/dist/components/divider/Divider.stories.tsx +633 -0
  43. package/dist/components/divider/index.tsx +181 -0
  44. package/dist/components/divider/meta.ts +12 -0
  45. package/dist/components/dot-loader/DotLoader.stories.tsx +352 -0
  46. package/dist/components/dot-loader/index.tsx +78 -0
  47. package/dist/components/dot-loader/meta.ts +14 -0
  48. package/dist/components/dropdown/Dropdown.stories.tsx +1210 -0
  49. package/dist/components/dropdown/index.tsx +479 -0
  50. package/dist/components/dropdown/meta.ts +21 -0
  51. package/dist/components/form/Form.stories.tsx +320 -0
  52. package/dist/components/form/index.tsx +183 -0
  53. package/dist/components/form/meta.ts +11 -0
  54. package/dist/components/helper-text/HelperText.stories.tsx +254 -0
  55. package/dist/components/helper-text/index.tsx +102 -0
  56. package/dist/components/helper-text/meta.ts +18 -0
  57. package/dist/components/hover-card/HoverCard.stories.tsx +1328 -0
  58. package/dist/components/hover-card/index.tsx +42 -0
  59. package/dist/components/hover-card/meta.ts +12 -0
  60. package/dist/components/icon-button/IconButton.stories.tsx +252 -0
  61. package/dist/components/icon-button/index.tsx +130 -0
  62. package/dist/components/icon-button/meta.ts +20 -0
  63. package/dist/components/if-else/if-else.stories.tsx +100 -0
  64. package/dist/components/if-else/index.tsx +56 -0
  65. package/dist/components/if-else/meta.ts +6 -0
  66. package/dist/components/index.ts +70 -0
  67. package/dist/components/input/Input.stories.tsx +431 -0
  68. package/dist/components/input/index.tsx +487 -0
  69. package/dist/components/input/meta.ts +28 -0
  70. package/dist/components/label/Label.stories.tsx +200 -0
  71. package/dist/components/label/index.tsx +43 -0
  72. package/dist/components/label/meta.ts +14 -0
  73. package/dist/components/list/List.stories.tsx +963 -0
  74. package/dist/components/list/index.tsx +567 -0
  75. package/dist/components/list/meta.ts +24 -0
  76. package/dist/components/marquee/Marquee.stories.tsx +819 -0
  77. package/dist/components/marquee/index.tsx +107 -0
  78. package/dist/components/marquee/meta.ts +6 -0
  79. package/dist/components/overlay/Overlay.stories.tsx +954 -0
  80. package/dist/components/overlay/index.tsx +58 -0
  81. package/dist/components/overlay/meta.ts +10 -0
  82. package/dist/components/pagination/Pagination.stories.tsx +354 -0
  83. package/dist/components/pagination/index.tsx +455 -0
  84. package/dist/components/pagination/meta.ts +29 -0
  85. package/dist/components/popover/Popover.stories.tsx +1037 -0
  86. package/dist/components/popover/index.tsx +67 -0
  87. package/dist/components/popover/meta.ts +12 -0
  88. package/dist/components/radio/Radio.stories.tsx +146 -0
  89. package/dist/components/radio/index.tsx +41 -0
  90. package/dist/components/radio/meta.ts +19 -0
  91. package/dist/components/resizable/Resizable.stories.tsx +866 -0
  92. package/dist/components/resizable/index.tsx +55 -0
  93. package/dist/components/resizable/meta.ts +12 -0
  94. package/dist/components/scroll-area/ScrollArea.stories.tsx +1104 -0
  95. package/dist/components/scroll-area/index.tsx +55 -0
  96. package/dist/components/scroll-area/meta.ts +8 -0
  97. package/dist/components/search/Search.stories.tsx +678 -0
  98. package/dist/components/search/index.tsx +141 -0
  99. package/dist/components/search/meta.ts +6 -0
  100. package/dist/components/select/Select.stories.tsx +962 -0
  101. package/dist/components/select/index.tsx +512 -0
  102. package/dist/components/select/meta.ts +40 -0
  103. package/dist/components/sheet/Sheet.stories.tsx +1060 -0
  104. package/dist/components/sheet/index.tsx +440 -0
  105. package/dist/components/sheet/meta.ts +38 -0
  106. package/dist/components/skelton/Skelton.stories.tsx +859 -0
  107. package/dist/components/skelton/index.tsx +17 -0
  108. package/dist/components/skelton/meta.ts +6 -0
  109. package/dist/components/slider/Slider.stories.tsx +876 -0
  110. package/dist/components/slider/index.tsx +156 -0
  111. package/dist/components/slider/meta.ts +29 -0
  112. package/dist/components/stepper/Stepper.stories.tsx +639 -0
  113. package/dist/components/stepper/index.tsx +650 -0
  114. package/dist/components/stepper/meta.ts +19 -0
  115. package/dist/components/switch/Switch.stories.tsx +85 -0
  116. package/dist/components/switch/index.tsx +37 -0
  117. package/dist/components/switch/meta.ts +24 -0
  118. package/dist/components/switch-case/SwitchCase.stories.tsx +209 -0
  119. package/dist/components/switch-case/index.tsx +89 -0
  120. package/dist/components/switch-case/meta.ts +6 -0
  121. package/dist/components/table/Table.stories.tsx +1095 -0
  122. package/dist/components/table/index.tsx +113 -0
  123. package/dist/components/table/meta.ts +20 -0
  124. package/dist/components/tabs/Tabs.stories.tsx +1379 -0
  125. package/dist/components/tabs/index.tsx +186 -0
  126. package/dist/components/tabs/meta.ts +25 -0
  127. package/dist/components/tag/Tag.stories.tsx +625 -0
  128. package/dist/components/tag/index.tsx +320 -0
  129. package/dist/components/tag/meta.ts +52 -0
  130. package/dist/components/textarea/TextArea.stories.tsx +723 -0
  131. package/dist/components/textarea/index.tsx +480 -0
  132. package/dist/components/textarea/meta.ts +23 -0
  133. package/dist/components/toast/Toast.stories.tsx +1427 -0
  134. package/dist/components/toast/index.tsx +26 -0
  135. package/dist/components/toast/meta.ts +19 -0
  136. package/dist/components/toggle/Toggle.stories.tsx +1093 -0
  137. package/dist/components/toggle/index.tsx +44 -0
  138. package/dist/components/toggle/meta.ts +19 -0
  139. package/dist/components/tooltip/Tooltip.stories.tsx +1548 -0
  140. package/dist/components/tooltip/index.tsx +304 -0
  141. package/dist/components/tooltip/meta.ts +21 -0
  142. package/dist/components/typography/Typography.stories.tsx +197 -0
  143. package/dist/components/typography/index.tsx +184 -0
  144. package/dist/components/typography/meta.ts +38 -0
  145. package/dist/fonts/LabGrotesque-Regular.ttf +0 -0
  146. package/dist/fonts/LabGrotesqueTRIAL-Bold.otf +0 -0
  147. package/dist/fonts/LabGrotesqueTRIAL-Light.otf +0 -0
  148. package/dist/fonts/LabGrotesqueTRIAL-Medium.otf +0 -0
  149. package/dist/fonts/LabGrotesqueTRIAL-Regular.otf +0 -0
  150. package/dist/fonts/PPSupplySans-Regular (1).otf +0 -0
  151. package/dist/fonts/PPSupplySans-Regular.otf +0 -0
  152. package/dist/fonts/PPSupplySans-Ultralight.otf +0 -0
  153. package/dist/hooks/index.ts +3 -0
  154. package/dist/hooks/use-previous/UsePrevious.stories.tsx +997 -0
  155. package/dist/hooks/use-previous/index.ts +15 -0
  156. package/dist/hooks/use-previous/meta.ts +6 -0
  157. package/dist/hooks/use-standalone-pagination/UseStandalonePagination.stories.tsx +983 -0
  158. package/dist/hooks/use-standalone-pagination/index.ts +146 -0
  159. package/dist/hooks/use-standalone-pagination/meta.ts +6 -0
  160. package/dist/icons/Icons.stories.tsx +29 -0
  161. package/dist/icons/alert-icon/AlertIcon.stories.tsx +991 -0
  162. package/dist/icons/alert-icon/index.tsx +48 -0
  163. package/dist/icons/alert-icon/meta.ts +8 -0
  164. package/dist/icons/all-icons.tsx +738 -0
  165. package/dist/icons/angle-down-icon/AngleDownIcon.stories.tsx +1031 -0
  166. package/dist/icons/angle-down-icon/index.tsx +25 -0
  167. package/dist/icons/angle-down-icon/meta.ts +8 -0
  168. package/dist/icons/arrow-box-left-icon/ArrowBoxLeftIcon.stories.tsx +1080 -0
  169. package/dist/icons/arrow-box-left-icon/index.tsx +24 -0
  170. package/dist/icons/arrow-box-left-icon/meta.ts +8 -0
  171. package/dist/icons/arrow-right-icon/ArrowRightIcon.stories.tsx +1151 -0
  172. package/dist/icons/arrow-right-icon/index.tsx +26 -0
  173. package/dist/icons/arrow-right-icon/meta.ts +8 -0
  174. package/dist/icons/arrow-right-up-icon/ArrowRightUpIcon.stories.tsx +1273 -0
  175. package/dist/icons/arrow-right-up-icon/index.tsx +24 -0
  176. package/dist/icons/arrow-right-up-icon/meta.ts +8 -0
  177. package/dist/icons/art-board-icon/ArtBoardIcon.stories.tsx +670 -0
  178. package/dist/icons/art-board-icon/index.tsx +24 -0
  179. package/dist/icons/art-board-icon/meta.ts +7 -0
  180. package/dist/icons/audio-bar-icon/AudioBarIcon.stories.tsx +1244 -0
  181. package/dist/icons/audio-bar-icon/index.tsx +19 -0
  182. package/dist/icons/audio-bar-icon/meta.ts +8 -0
  183. package/dist/icons/bubble-check-icon/BubbleCheckIcon.stories.tsx +1239 -0
  184. package/dist/icons/bubble-check-icon/index.tsx +24 -0
  185. package/dist/icons/bubble-check-icon/meta.ts +8 -0
  186. package/dist/icons/bubble-crossed-icon/BubbleCrossedIcon.stories.tsx +1228 -0
  187. package/dist/icons/bubble-crossed-icon/index.tsx +24 -0
  188. package/dist/icons/bubble-crossed-icon/meta.ts +8 -0
  189. package/dist/icons/bubble-sparkle-icon/BubbleSparkleIcon.stories.tsx +912 -0
  190. package/dist/icons/bubble-sparkle-icon/index.tsx +26 -0
  191. package/dist/icons/bubble-sparkle-icon/meta.ts +8 -0
  192. package/dist/icons/chevron-double-left-icon/ChevronDoubleLeftIcon.stories.tsx +1021 -0
  193. package/dist/icons/chevron-double-left-icon/index.tsx +34 -0
  194. package/dist/icons/chevron-double-left-icon/meta.ts +8 -0
  195. package/dist/icons/chevron-double-right-icon/ChevronDoubleRightIcon.stories.tsx +1021 -0
  196. package/dist/icons/chevron-double-right-icon/index.tsx +34 -0
  197. package/dist/icons/chevron-double-right-icon/meta.ts +8 -0
  198. package/dist/icons/chevron-down-icon/ChevronDownIcon.stories.tsx +1001 -0
  199. package/dist/icons/chevron-down-icon/index.tsx +27 -0
  200. package/dist/icons/chevron-down-icon/meta.ts +8 -0
  201. package/dist/icons/chevron-left-icon/ChevronLeftIcon.stories.tsx +1029 -0
  202. package/dist/icons/chevron-left-icon/index.tsx +27 -0
  203. package/dist/icons/chevron-left-icon/meta.ts +8 -0
  204. package/dist/icons/chevron-right-icon/ChevronRightIcon.stories.tsx +1021 -0
  205. package/dist/icons/chevron-right-icon/index.tsx +27 -0
  206. package/dist/icons/chevron-right-icon/meta.ts +8 -0
  207. package/dist/icons/chevron-up-icon/ChevronUpIcon.stories.tsx +1036 -0
  208. package/dist/icons/chevron-up-icon/index.tsx +27 -0
  209. package/dist/icons/chevron-up-icon/meta.ts +8 -0
  210. package/dist/icons/command-icon/CommandIcon.stories.tsx +1098 -0
  211. package/dist/icons/command-icon/index.tsx +24 -0
  212. package/dist/icons/command-icon/meta.ts +8 -0
  213. package/dist/icons/cross-circle-icon/CrossCircleIcon.stories.tsx +1061 -0
  214. package/dist/icons/cross-circle-icon/index.tsx +23 -0
  215. package/dist/icons/cross-circle-icon/meta.ts +8 -0
  216. package/dist/icons/cross-icon/CrossIcon.stories.tsx +1027 -0
  217. package/dist/icons/cross-icon/index.tsx +24 -0
  218. package/dist/icons/cross-icon/meta.ts +8 -0
  219. package/dist/icons/edit-big-icon/EditBigIcon.stories.tsx +1092 -0
  220. package/dist/icons/edit-big-icon/index.tsx +22 -0
  221. package/dist/icons/edit-big-icon/meta.ts +8 -0
  222. package/dist/icons/eye-close-icon/EyeCloseIcon.stories.tsx +1090 -0
  223. package/dist/icons/eye-close-icon/index.tsx +26 -0
  224. package/dist/icons/eye-close-icon/meta.ts +8 -0
  225. package/dist/icons/eye-open-icon/EyeOpenIcon.stories.tsx +1098 -0
  226. package/dist/icons/eye-open-icon/index.tsx +24 -0
  227. package/dist/icons/eye-open-icon/meta.ts +8 -0
  228. package/dist/icons/feature-shine-icon/FeatureShineIcon.stories.tsx +1071 -0
  229. package/dist/icons/feature-shine-icon/index.tsx +29 -0
  230. package/dist/icons/feature-shine-icon/meta.ts +8 -0
  231. package/dist/icons/file-chart-icon/FileChartIcon.stories.tsx +1115 -0
  232. package/dist/icons/file-chart-icon/index.tsx +24 -0
  233. package/dist/icons/file-chart-icon/meta.ts +8 -0
  234. package/dist/icons/file-text-icon/FileTextIcon.stories.tsx +668 -0
  235. package/dist/icons/file-text-icon/index.tsx +24 -0
  236. package/dist/icons/file-text-icon/meta.ts +8 -0
  237. package/dist/icons/grip-vertical-icon/GripVerticalIcon.stories.tsx +1239 -0
  238. package/dist/icons/grip-vertical-icon/index.tsx +28 -0
  239. package/dist/icons/grip-vertical-icon/meta.ts +8 -0
  240. package/dist/icons/image-icon/ImageIcon.stories.tsx +1181 -0
  241. package/dist/icons/image-icon/index.tsx +24 -0
  242. package/dist/icons/image-icon/meta.ts +8 -0
  243. package/dist/icons/import-folder-icon/ImportFolderIcon.stories.tsx +1248 -0
  244. package/dist/icons/import-folder-icon/index.tsx +22 -0
  245. package/dist/icons/import-folder-icon/meta.ts +8 -0
  246. package/dist/icons/index.ts +46 -0
  247. package/dist/icons/light-bulb-simple-icon/LightBulbSimpleIcon.stories.tsx +1272 -0
  248. package/dist/icons/light-bulb-simple-icon/index.tsx +24 -0
  249. package/dist/icons/light-bulb-simple-icon/meta.ts +8 -0
  250. package/dist/icons/magic-book-icon/MagicBookIcon.stories.tsx +1245 -0
  251. package/dist/icons/magic-book-icon/index.tsx +32 -0
  252. package/dist/icons/magic-book-icon/meta.ts +8 -0
  253. package/dist/icons/maintenance-icon/MaintenanceIcon.stories.tsx +1251 -0
  254. package/dist/icons/maintenance-icon/index.tsx +23 -0
  255. package/dist/icons/maintenance-icon/meta.ts +8 -0
  256. package/dist/icons/message-icon/MessageIcon.stories.tsx +595 -0
  257. package/dist/icons/message-icon/index.tsx +30 -0
  258. package/dist/icons/message-icon/meta.ts +8 -0
  259. package/dist/icons/move-horizontal-icon/MoveHorizontalIcon.stories.tsx +1245 -0
  260. package/dist/icons/move-horizontal-icon/index.tsx +23 -0
  261. package/dist/icons/move-horizontal-icon/meta.ts +8 -0
  262. package/dist/icons/move-vertical-icon/MoveVerticalIcon.stories.tsx +1196 -0
  263. package/dist/icons/move-vertical-icon/index.tsx +23 -0
  264. package/dist/icons/move-vertical-icon/meta.ts +8 -0
  265. package/dist/icons/page-search-icon/PageSearchIcon.stories.tsx +1167 -0
  266. package/dist/icons/page-search-icon/index.tsx +21 -0
  267. package/dist/icons/page-search-icon/meta.ts +8 -0
  268. package/dist/icons/pencil-icon/PencilIcon.stories.tsx +1131 -0
  269. package/dist/icons/pencil-icon/index.tsx +21 -0
  270. package/dist/icons/pencil-icon/meta.ts +8 -0
  271. package/dist/icons/plus-icon/PlusIcon.stories.tsx +1151 -0
  272. package/dist/icons/plus-icon/index.tsx +24 -0
  273. package/dist/icons/plus-icon/meta.ts +8 -0
  274. package/dist/icons/search-icon/SearchIcon.stories.tsx +1181 -0
  275. package/dist/icons/search-icon/index.tsx +24 -0
  276. package/dist/icons/search-icon/meta.ts +8 -0
  277. package/dist/icons/site-logo-icon/SiteLogoIcon.stories.tsx +1167 -0
  278. package/dist/icons/site-logo-icon/index.tsx +79 -0
  279. package/dist/icons/site-logo-icon/meta.ts +8 -0
  280. package/dist/icons/spinner-gradient-icon/SpinnerGradientIcon.stories.tsx +637 -0
  281. package/dist/icons/spinner-gradient-icon/index.tsx +53 -0
  282. package/dist/icons/spinner-gradient-icon/meta.ts +8 -0
  283. package/dist/icons/spinner-solid-icon/SpinnerSolidIcon.stories.tsx +644 -0
  284. package/dist/icons/spinner-solid-icon/index.tsx +59 -0
  285. package/dist/icons/spinner-solid-icon/meta.ts +8 -0
  286. package/dist/icons/spinner-solid-neutral-icon/SpinnerSolidINeutralcon.stories.tsx +736 -0
  287. package/dist/icons/spinner-solid-neutral-icon/index.tsx +53 -0
  288. package/dist/icons/spinner-solid-neutral-icon/meta.ts +8 -0
  289. package/dist/icons/tick-circle-icon/TickCircleIcon.stories.tsx +1204 -0
  290. package/dist/icons/tick-circle-icon/index.tsx +23 -0
  291. package/dist/icons/tick-circle-icon/meta.ts +8 -0
  292. package/dist/icons/tick-icon/TickIcon.stories.tsx +1340 -0
  293. package/dist/icons/tick-icon/index.tsx +24 -0
  294. package/dist/icons/tick-icon/meta.ts +8 -0
  295. package/dist/icons/trash-icon/TrashIcon.stories.tsx +996 -0
  296. package/dist/icons/trash-icon/index.tsx +24 -0
  297. package/dist/icons/trash-icon/meta.ts +8 -0
  298. package/dist/icons/upload-icon/UploadIcon.stories.tsx +947 -0
  299. package/dist/icons/upload-icon/index.tsx +24 -0
  300. package/dist/icons/upload-icon/meta.ts +8 -0
  301. package/dist/icons/vertical-menu-icon/VerticalMenuIcon.stories.tsx +1045 -0
  302. package/dist/icons/vertical-menu-icon/index.tsx +27 -0
  303. package/dist/icons/vertical-menu-icon/meta.ts +8 -0
  304. package/dist/index.d.ts +6 -0
  305. package/dist/index.js +206 -0
  306. package/dist/lib/utils.ts +6 -0
  307. package/dist/styles/aural-theme.css +1008 -0
  308. package/package.json +142 -0
@@ -0,0 +1,479 @@
1
+ import * as React from "react"
2
+ import { Divider } from "@components/divider"
3
+ import { Label } from "@components/label"
4
+ import { ChevronRightIcon } from "@icons/chevron-right-icon"
5
+ import { TickIcon } from "@icons/tick-icon"
6
+ import { cn } from "@lib/utils"
7
+ import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu"
8
+
9
+ function DropdownMenu({
10
+ ...props
11
+ }: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {
12
+ return <DropdownMenuPrimitive.Root data-slot="dropdown-menu" {...props} />
13
+ }
14
+
15
+ function DropdownMenuPortal({
16
+ ...props
17
+ }: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {
18
+ return (
19
+ <DropdownMenuPrimitive.Portal data-slot="dropdown-menu-portal" {...props} />
20
+ )
21
+ }
22
+
23
+ function DropdownMenuTrigger({
24
+ ...props
25
+ }: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {
26
+ return (
27
+ <DropdownMenuPrimitive.Trigger
28
+ data-slot="dropdown-menu-trigger"
29
+ {...props}
30
+ />
31
+ )
32
+ }
33
+
34
+ type DropdownMenuContentProps = React.ComponentProps<
35
+ typeof DropdownMenuPrimitive.Content
36
+ > & {
37
+ classes?: {
38
+ root?: string
39
+ border?: string
40
+ }
41
+ }
42
+
43
+ function DropdownMenuContent({
44
+ className,
45
+ sideOffset = 4,
46
+ classes = {},
47
+ children,
48
+ ...props
49
+ }: DropdownMenuContentProps) {
50
+ return (
51
+ <DropdownMenuPrimitive.Portal>
52
+ <DropdownMenuPrimitive.Content
53
+ data-slot="dropdown-menu-content"
54
+ sideOffset={sideOffset}
55
+ className={cn(
56
+ "bg-fm-surface-frosted/20 rounded-fm-s relative z-50 min-w-40 border-0 shadow-lg backdrop-blur-lg",
57
+ // Animation classes
58
+ "popover-content",
59
+ className,
60
+ classes?.root
61
+ )}
62
+ {...props}
63
+ >
64
+ {/* Top border gradient */}
65
+ <div
66
+ className={cn(
67
+ "absolute top-0 right-0 left-0 block h-0.5 w-full bg-(image:--gradient-fm-stroke-neutral)",
68
+ classes?.border
69
+ )}
70
+ />
71
+ {children}
72
+ </DropdownMenuPrimitive.Content>
73
+ </DropdownMenuPrimitive.Portal>
74
+ )
75
+ }
76
+
77
+ function DropdownArrow({
78
+ className,
79
+ ...props
80
+ }: React.ComponentProps<typeof DropdownMenuPrimitive.Arrow>) {
81
+ return (
82
+ <DropdownMenuPrimitive.Arrow
83
+ data-slot="dropdown-menu-arrow"
84
+ className={cn("fill-fm-surface-frosted/20", className)}
85
+ {...props}
86
+ />
87
+ )
88
+ }
89
+
90
+ function DropdownMenuGroup({
91
+ ...props
92
+ }: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {
93
+ return (
94
+ <DropdownMenuPrimitive.Group data-slot="dropdown-menu-group" {...props} />
95
+ )
96
+ }
97
+
98
+ type DropdownMenuItemProps = React.ComponentProps<
99
+ typeof DropdownMenuPrimitive.Item
100
+ > & {
101
+ inset?: boolean
102
+ variant?: "default" | "destructive"
103
+ classes?: {
104
+ root?: string
105
+ }
106
+ }
107
+
108
+ function DropdownMenuItem({
109
+ className,
110
+ inset,
111
+ variant = "default",
112
+ classes = {},
113
+ ...props
114
+ }: DropdownMenuItemProps) {
115
+ return (
116
+ <DropdownMenuPrimitive.Item
117
+ data-slot="dropdown-menu-item"
118
+ data-inset={inset}
119
+ data-variant={variant}
120
+ className={cn(
121
+ // Base styles
122
+ "rounded-fm-s relative flex cursor-default items-center gap-2 px-4 py-3",
123
+ "text-fm-primary font-fm-text leading-fm-lg [font-size:var(--text-fm-lg)] tracking-wide",
124
+ "transition-colors duration-200 outline-none select-none",
125
+ // Hover and focus states
126
+ "hover:bg-fm-surface-frosted/20 focus-visible:bg-fm-surface-frosted/20",
127
+ // Checked state
128
+ "data-[state=checked]:not-data-[disabled]:bg-fm-surface-frosted/10",
129
+ // Disabled state
130
+ "data-[disabled]:text-fm-inactive data-[disabled]:bg-fm-surface-frosted/30 data-[disabled]:pointer-events-none",
131
+ // Destructive variant
132
+ "data-[variant=destructive]:text-fm-negative",
133
+ "data-[variant=destructive]:hover:bg-fm-surface-negative-alpha-15",
134
+ "data-[variant=destructive]:focus:bg-fm-surface-negative-alpha-15",
135
+ // Inset
136
+ "data-[inset]:pl-8",
137
+ // Icon styling
138
+ "[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
139
+ "[&_svg:not([class*='text-'])]:text-fm-icon-active",
140
+ "data-[variant=destructive]:*:[svg]:!text-fm-negative",
141
+ className,
142
+ classes?.root
143
+ )}
144
+ {...props}
145
+ />
146
+ )
147
+ }
148
+
149
+ type DropdownMenuCheckboxItemProps = React.ComponentProps<
150
+ typeof DropdownMenuPrimitive.CheckboxItem
151
+ > & {
152
+ classes?: {
153
+ root?: string
154
+ indicator?: string
155
+ }
156
+ }
157
+
158
+ function DropdownMenuCheckboxItem({
159
+ className,
160
+ children,
161
+ checked,
162
+ classes = {},
163
+ ...props
164
+ }: DropdownMenuCheckboxItemProps) {
165
+ return (
166
+ <DropdownMenuPrimitive.CheckboxItem
167
+ data-slot="dropdown-menu-checkbox-item"
168
+ className={cn(
169
+ // Base styles
170
+ "rounded-fm-s relative flex cursor-default items-center gap-2 px-4 py-3 pl-8",
171
+ "text-fm-primary font-fm-text leading-fm-lg [font-size:var(--text-fm-lg)] tracking-wide",
172
+ "transition-colors duration-200 outline-none select-none",
173
+ // Hover and focus states
174
+ "hover:bg-fm-surface-frosted/20 focus-visible:bg-fm-surface-frosted/20",
175
+ // Checked state
176
+ "data-[state=checked]:not-data-[disabled]:bg-fm-surface-frosted/10",
177
+ // Disabled state
178
+ "data-[disabled]:text-fm-inactive data-[disabled]:bg-fm-surface-frosted/30 data-[disabled]:pointer-events-none",
179
+ // Icon styling
180
+ "[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
181
+ className,
182
+ classes?.root
183
+ )}
184
+ checked={checked}
185
+ {...props}
186
+ >
187
+ <span className="pointer-events-none absolute left-4 flex size-3.5 items-center justify-center">
188
+ <DropdownMenuPrimitive.ItemIndicator>
189
+ <TickIcon
190
+ className={cn("text-fm-icon-active size-4", classes?.indicator)}
191
+ />
192
+ </DropdownMenuPrimitive.ItemIndicator>
193
+ </span>
194
+ {children}
195
+ </DropdownMenuPrimitive.CheckboxItem>
196
+ )
197
+ }
198
+
199
+ function DropdownMenuRadioGroup({
200
+ ...props
201
+ }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {
202
+ return (
203
+ <DropdownMenuPrimitive.RadioGroup
204
+ data-slot="dropdown-menu-radio-group"
205
+ {...props}
206
+ />
207
+ )
208
+ }
209
+
210
+ type DropdownMenuRadioItemProps = React.ComponentProps<
211
+ typeof DropdownMenuPrimitive.RadioItem
212
+ > & {
213
+ classes?: {
214
+ root?: string
215
+ indicator?: string
216
+ }
217
+ }
218
+
219
+ function DropdownMenuRadioItem({
220
+ className,
221
+ children,
222
+ classes = {},
223
+ ...props
224
+ }: DropdownMenuRadioItemProps) {
225
+ return (
226
+ <DropdownMenuPrimitive.RadioItem
227
+ data-slot="dropdown-menu-radio-item"
228
+ className={cn(
229
+ // Base styles
230
+ "rounded-fm-s relative flex cursor-default items-center gap-2 px-4 py-3 pl-8",
231
+ "text-fm-primary font-fm-text leading-fm-lg [font-size:var(--text-fm-lg)] tracking-wide",
232
+ "transition-colors duration-200 outline-none select-none",
233
+ // Hover and focus states
234
+ "hover:bg-fm-surface-frosted/20 focus-visible:bg-fm-surface-frosted/20",
235
+ // Checked state
236
+ "data-[state=checked]:not-data-[disabled]:bg-fm-surface-frosted/10",
237
+ // Disabled state
238
+ "data-[disabled]:text-fm-inactive data-[disabled]:bg-fm-surface-frosted/30 data-[disabled]:pointer-events-none",
239
+ // Icon styling
240
+ "[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
241
+ className,
242
+ classes?.root
243
+ )}
244
+ {...props}
245
+ >
246
+ <span className="pointer-events-none absolute left-4 flex size-3.5 items-center justify-center">
247
+ <DropdownMenuPrimitive.ItemIndicator>
248
+ <TickIcon
249
+ className={cn(
250
+ "text-fm-icon-active size-2 fill-current",
251
+ classes?.indicator
252
+ )}
253
+ />
254
+ </DropdownMenuPrimitive.ItemIndicator>
255
+ </span>
256
+ {children}
257
+ </DropdownMenuPrimitive.RadioItem>
258
+ )
259
+ }
260
+
261
+ function DropdownMenuItemIndicator({
262
+ className,
263
+ ...props
264
+ }: React.ComponentProps<typeof DropdownMenuPrimitive.ItemIndicator>) {
265
+ return (
266
+ <DropdownMenuPrimitive.ItemIndicator
267
+ data-slot="dropdown-menu-item-indicator"
268
+ className={cn("text-fm-icon-active", className)}
269
+ {...props}
270
+ />
271
+ )
272
+ }
273
+
274
+ type DropdownMenuLabelProps = React.ComponentProps<
275
+ typeof DropdownMenuPrimitive.Label
276
+ > & {
277
+ inset?: boolean
278
+ classes?: {
279
+ root?: string
280
+ }
281
+ }
282
+
283
+ function DropdownMenuLabel({
284
+ className,
285
+ inset,
286
+ classes = {},
287
+ ...props
288
+ }: DropdownMenuLabelProps) {
289
+ return (
290
+ <DropdownMenuPrimitive.Label
291
+ data-slot="dropdown-menu-label"
292
+ data-inset={inset}
293
+ className={cn(
294
+ // Label styling
295
+ "text-fm-label-secondary px-4 py-2 text-sm font-medium tracking-wide",
296
+ "data-[inset]:pl-8",
297
+ className,
298
+ classes?.root
299
+ )}
300
+ {...props}
301
+ asChild
302
+ >
303
+ <Label>{props.children}</Label>
304
+ </DropdownMenuPrimitive.Label>
305
+ )
306
+ }
307
+
308
+ type DropdownMenuSeparatorProps = React.ComponentProps<
309
+ typeof DropdownMenuPrimitive.Separator
310
+ > & {
311
+ classes?: {
312
+ root?: string
313
+ }
314
+ }
315
+
316
+ function DropdownMenuSeparator({
317
+ className,
318
+ classes = {},
319
+ ...props
320
+ }: DropdownMenuSeparatorProps) {
321
+ return (
322
+ <DropdownMenuPrimitive.Separator
323
+ data-slot="dropdown-menu-separator"
324
+ className={cn("my-1", className, classes?.root)}
325
+ {...props}
326
+ asChild
327
+ >
328
+ <Divider variant="dashed" size="full_default" />
329
+ </DropdownMenuPrimitive.Separator>
330
+ )
331
+ }
332
+
333
+ type DropdownMenuShortcutProps = React.ComponentProps<"span"> & {
334
+ classes?: {
335
+ root?: string
336
+ }
337
+ }
338
+
339
+ function DropdownMenuShortcut({
340
+ className,
341
+ classes = {},
342
+ ...props
343
+ }: DropdownMenuShortcutProps) {
344
+ return (
345
+ <span
346
+ data-slot="dropdown-menu-shortcut"
347
+ className={cn(
348
+ "font-fm-brand ml-auto text-xs tracking-widest",
349
+ className,
350
+ classes?.root
351
+ )}
352
+ {...props}
353
+ />
354
+ )
355
+ }
356
+
357
+ function DropdownMenuSub({
358
+ ...props
359
+ }: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {
360
+ return <DropdownMenuPrimitive.Sub data-slot="dropdown-menu-sub" {...props} />
361
+ }
362
+
363
+ type DropdownMenuSubTriggerProps = React.ComponentProps<
364
+ typeof DropdownMenuPrimitive.SubTrigger
365
+ > & {
366
+ inset?: boolean
367
+ classes?: {
368
+ root?: string
369
+ icon?: string
370
+ }
371
+ }
372
+
373
+ function DropdownMenuSubTrigger({
374
+ className,
375
+ inset,
376
+ children,
377
+ classes = {},
378
+ ...props
379
+ }: DropdownMenuSubTriggerProps) {
380
+ return (
381
+ <DropdownMenuPrimitive.SubTrigger
382
+ data-slot="dropdown-menu-sub-trigger"
383
+ data-inset={inset}
384
+ className={cn(
385
+ // Base styles
386
+ "rounded-fm-s relative flex cursor-default items-center gap-2 px-4 py-3",
387
+ "text-fm-primary font-fm-text leading-fm-lg [font-size:var(--text-fm-lg)] tracking-wide",
388
+ "transition-colors duration-200 outline-none select-none",
389
+ // Hover and focus states
390
+ "hover:bg-fm-surface-frosted/20 focus-visible:bg-fm-surface-frosted/20",
391
+ // Checked state
392
+ "data-[state=checked]:not-data-[disabled]:bg-fm-surface-frosted/10",
393
+ // Disabled state
394
+ "data-[disabled]:text-fm-inactive data-[disabled]:bg-fm-surface-frosted/30 data-[disabled]:pointer-events-none",
395
+ // Inset
396
+ "data-[inset]:pl-8",
397
+ className,
398
+ classes?.root
399
+ )}
400
+ {...props}
401
+ >
402
+ {children}
403
+ <ChevronRightIcon
404
+ className={cn("text-fm-icon-active ml-auto size-4", classes?.icon)}
405
+ />
406
+ </DropdownMenuPrimitive.SubTrigger>
407
+ )
408
+ }
409
+
410
+ type DropdownMenuSubContentProps = React.ComponentProps<
411
+ typeof DropdownMenuPrimitive.SubContent
412
+ > & {
413
+ classes?: {
414
+ root?: string
415
+ border?: string
416
+ }
417
+ }
418
+
419
+ function DropdownMenuSubContent({
420
+ className,
421
+ classes = {},
422
+ children,
423
+ ...props
424
+ }: DropdownMenuSubContentProps) {
425
+ return (
426
+ <DropdownMenuPrimitive.SubContent
427
+ data-slot="dropdown-menu-sub-content"
428
+ className={cn(
429
+ "bg-fm-surface-frosted/20 rounded-fm-s relative z-50 min-w-40 overflow-hidden border-0 shadow-lg backdrop-blur-lg",
430
+ // Animation classes
431
+ "popover-content",
432
+ className,
433
+ classes?.root
434
+ )}
435
+ {...props}
436
+ >
437
+ {/* Top border gradient */}
438
+ <div
439
+ className={cn(
440
+ "absolute top-0 right-0 left-0 block h-0.5 w-full bg-(image:--gradient-fm-stroke-neutral)",
441
+ classes?.border
442
+ )}
443
+ />
444
+ {children}
445
+ </DropdownMenuPrimitive.SubContent>
446
+ )
447
+ }
448
+
449
+ export {
450
+ DropdownMenu,
451
+ DropdownMenuPortal,
452
+ DropdownMenuTrigger,
453
+ DropdownMenuContent,
454
+ DropdownArrow,
455
+ DropdownMenuGroup,
456
+ DropdownMenuLabel,
457
+ DropdownMenuItem,
458
+ DropdownMenuCheckboxItem,
459
+ DropdownMenuRadioGroup,
460
+ DropdownMenuRadioItem,
461
+ DropdownMenuItemIndicator,
462
+ DropdownMenuSeparator,
463
+ DropdownMenuShortcut,
464
+ DropdownMenuSub,
465
+ DropdownMenuSubTrigger,
466
+ DropdownMenuSubContent,
467
+ }
468
+
469
+ export type {
470
+ DropdownMenuContentProps,
471
+ DropdownMenuItemProps,
472
+ DropdownMenuCheckboxItemProps,
473
+ DropdownMenuRadioItemProps,
474
+ DropdownMenuLabelProps,
475
+ DropdownMenuSeparatorProps,
476
+ DropdownMenuShortcutProps,
477
+ DropdownMenuSubTriggerProps,
478
+ DropdownMenuSubContentProps,
479
+ }
@@ -0,0 +1,21 @@
1
+ export const meta = {
2
+ dependencies: {
3
+ "@radix-ui/react-dropdown-menu": "^2.1.15",
4
+ },
5
+ devDependencies: {},
6
+ internalDependencies: ["divider", "label", "chevron-right-icon", "tick-icon"],
7
+ tokens: [
8
+ "--color-fm-icon-active",
9
+ "--color-fm-inactive",
10
+ "--color-fm-label-secondary",
11
+ "--color-fm-negative",
12
+ "--color-fm-primary",
13
+ "--color-fm-surface-frosted",
14
+ "--color-fm-surface-negative-alpha-15",
15
+ "--font-fm-brand",
16
+ "--font-fm-text",
17
+ "--gradient-fm-stroke-neutral",
18
+ "--text-fm-lg",
19
+ ".popover-content",
20
+ ],
21
+ }