@health-samurai/react-components 0.0.0-alpha.3 → 0.0.0-alpha.5

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 (251) hide show
  1. package/dist/bundle.css +687 -446
  2. package/dist/src/components/code-editor/http/grammar/http.d.ts +3 -0
  3. package/dist/src/components/code-editor/http/grammar/http.d.ts.map +1 -0
  4. package/dist/src/components/code-editor/http/grammar/http.grammar +74 -0
  5. package/dist/src/components/code-editor/http/grammar/http.js +38 -0
  6. package/dist/src/components/code-editor/http/grammar/http.js.map +1 -0
  7. package/dist/src/components/code-editor/http/grammar/http.terms.d.ts +2 -0
  8. package/dist/src/components/code-editor/http/grammar/http.terms.d.ts.map +1 -0
  9. package/dist/src/components/code-editor/http/grammar/http.terms.js +4 -0
  10. package/dist/src/components/code-editor/http/grammar/http.terms.js.map +1 -0
  11. package/dist/src/components/code-editor/http/grammar/http.test.d.ts +2 -0
  12. package/dist/src/components/code-editor/http/grammar/http.test.d.ts.map +1 -0
  13. package/dist/src/components/code-editor/http/grammar/http.test.js +80 -0
  14. package/dist/src/components/code-editor/http/grammar/http.test.js.map +1 -0
  15. package/dist/src/components/code-editor/http/index.d.ts +4 -0
  16. package/dist/src/components/code-editor/http/index.d.ts.map +1 -0
  17. package/dist/src/components/code-editor/http/index.js +66 -0
  18. package/dist/src/components/code-editor/http/index.js.map +1 -0
  19. package/dist/src/components/code-editor/index.d.ts +13 -2
  20. package/dist/src/components/code-editor/index.d.ts.map +1 -1
  21. package/dist/src/components/code-editor/index.js +161 -20
  22. package/dist/src/components/code-editor/index.js.map +1 -1
  23. package/dist/src/components/code-editor.stories.js +3 -1
  24. package/dist/src/components/code-editor.stories.js.map +1 -1
  25. package/dist/src/components/request-line-editor.d.ts +11 -35
  26. package/dist/src/components/request-line-editor.d.ts.map +1 -1
  27. package/dist/src/components/request-line-editor.js +51 -49
  28. package/dist/src/components/request-line-editor.js.map +1 -1
  29. package/dist/src/components/request-line-editor.stories.d.ts.map +1 -1
  30. package/dist/src/components/request-line-editor.stories.js +17 -53
  31. package/dist/src/components/request-line-editor.stories.js.map +1 -1
  32. package/dist/src/components/tree-view.d.ts +16 -0
  33. package/dist/src/components/tree-view.d.ts.map +1 -0
  34. package/dist/src/components/tree-view.js +67 -0
  35. package/dist/src/components/tree-view.js.map +1 -0
  36. package/dist/src/components/tree-view.stories.d.ts +13 -0
  37. package/dist/src/components/tree-view.stories.d.ts.map +1 -0
  38. package/dist/src/components/tree-view.stories.js +274 -0
  39. package/dist/src/components/tree-view.stories.js.map +1 -0
  40. package/dist/src/icons.d.ts +3 -0
  41. package/dist/src/icons.d.ts.map +1 -0
  42. package/dist/src/icons.js +47 -0
  43. package/dist/src/icons.js.map +1 -0
  44. package/dist/src/index.css +42 -3
  45. package/dist/src/index.d.ts +1 -1
  46. package/dist/src/index.d.ts.map +1 -1
  47. package/dist/src/index.js +1 -1
  48. package/dist/src/index.js.map +1 -1
  49. package/dist/src/shadcn/components/ui/accordion.d.ts.map +1 -1
  50. package/dist/src/shadcn/components/ui/accordion.js +23 -5
  51. package/dist/src/shadcn/components/ui/accordion.js.map +1 -1
  52. package/dist/src/shadcn/components/ui/alert.d.ts.map +1 -1
  53. package/dist/src/shadcn/components/ui/alert.js +12 -5
  54. package/dist/src/shadcn/components/ui/alert.js.map +1 -1
  55. package/dist/src/shadcn/components/ui/avatar.d.ts.map +1 -1
  56. package/dist/src/shadcn/components/ui/avatar.js +4 -3
  57. package/dist/src/shadcn/components/ui/avatar.js.map +1 -1
  58. package/dist/src/shadcn/components/ui/badge.d.ts.map +1 -1
  59. package/dist/src/shadcn/components/ui/badge.js +16 -5
  60. package/dist/src/shadcn/components/ui/badge.js.map +1 -1
  61. package/dist/src/shadcn/components/ui/breadcrumb.d.ts.map +1 -1
  62. package/dist/src/shadcn/components/ui/breadcrumb.js +6 -6
  63. package/dist/src/shadcn/components/ui/breadcrumb.js.map +1 -1
  64. package/dist/src/shadcn/components/ui/button.d.ts.map +1 -1
  65. package/dist/src/shadcn/components/ui/button.js +19 -11
  66. package/dist/src/shadcn/components/ui/button.js.map +1 -1
  67. package/dist/src/shadcn/components/ui/card.d.ts.map +1 -1
  68. package/dist/src/shadcn/components/ui/card.js +14 -6
  69. package/dist/src/shadcn/components/ui/card.js.map +1 -1
  70. package/dist/src/shadcn/components/ui/carousel.d.ts.map +1 -1
  71. package/dist/src/shadcn/components/ui/carousel.js +1 -0
  72. package/dist/src/shadcn/components/ui/carousel.js.map +1 -1
  73. package/dist/src/shadcn/components/ui/checkbox.d.ts.map +1 -1
  74. package/dist/src/shadcn/components/ui/checkbox.js +20 -5
  75. package/dist/src/shadcn/components/ui/checkbox.js.map +1 -1
  76. package/dist/src/shadcn/components/ui/checkbox.stories.d.ts.map +1 -1
  77. package/dist/src/shadcn/components/ui/checkbox.stories.js +44 -35
  78. package/dist/src/shadcn/components/ui/checkbox.stories.js.map +1 -1
  79. package/dist/src/shadcn/components/ui/combobox.d.ts +18 -0
  80. package/dist/src/shadcn/components/ui/combobox.d.ts.map +1 -0
  81. package/dist/src/shadcn/components/ui/combobox.js +121 -0
  82. package/dist/src/shadcn/components/ui/combobox.js.map +1 -0
  83. package/dist/src/shadcn/components/ui/combobox.stories.d.ts +11 -0
  84. package/dist/src/shadcn/components/ui/combobox.stories.d.ts.map +1 -0
  85. package/dist/src/shadcn/components/ui/combobox.stories.js +16 -0
  86. package/dist/src/shadcn/components/ui/combobox.stories.js.map +1 -0
  87. package/dist/src/shadcn/components/ui/command.d.ts.map +1 -1
  88. package/dist/src/shadcn/components/ui/command.js +73 -12
  89. package/dist/src/shadcn/components/ui/command.js.map +1 -1
  90. package/dist/src/shadcn/components/ui/command.stories.js +0 -1
  91. package/dist/src/shadcn/components/ui/command.stories.js.map +1 -1
  92. package/dist/src/shadcn/components/ui/dialog.d.ts.map +1 -1
  93. package/dist/src/shadcn/components/ui/dialog.js +35 -7
  94. package/dist/src/shadcn/components/ui/dialog.js.map +1 -1
  95. package/dist/src/shadcn/components/ui/drawer.d.ts.map +1 -1
  96. package/dist/src/shadcn/components/ui/drawer.js +26 -5
  97. package/dist/src/shadcn/components/ui/drawer.js.map +1 -1
  98. package/dist/src/shadcn/components/ui/dropdown-menu.d.ts.map +1 -1
  99. package/dist/src/shadcn/components/ui/dropdown-menu.js +12 -1
  100. package/dist/src/shadcn/components/ui/dropdown-menu.js.map +1 -1
  101. package/dist/src/shadcn/components/ui/form.d.ts.map +1 -1
  102. package/dist/src/shadcn/components/ui/form.js +12 -4
  103. package/dist/src/shadcn/components/ui/form.js.map +1 -1
  104. package/dist/src/shadcn/components/ui/input-otp.d.ts.map +1 -1
  105. package/dist/src/shadcn/components/ui/input-otp.js +1 -0
  106. package/dist/src/shadcn/components/ui/input-otp.js.map +1 -1
  107. package/dist/src/shadcn/components/ui/input.d.ts.map +1 -1
  108. package/dist/src/shadcn/components/ui/input.js +87 -16
  109. package/dist/src/shadcn/components/ui/input.js.map +1 -1
  110. package/dist/src/shadcn/components/ui/label.d.ts.map +1 -1
  111. package/dist/src/shadcn/components/ui/label.js +8 -1
  112. package/dist/src/shadcn/components/ui/label.js.map +1 -1
  113. package/dist/src/shadcn/components/ui/menubar.d.ts.map +1 -1
  114. package/dist/src/shadcn/components/ui/menubar.js +35 -13
  115. package/dist/src/shadcn/components/ui/menubar.js.map +1 -1
  116. package/dist/src/shadcn/components/ui/pagination.d.ts.map +1 -1
  117. package/dist/src/shadcn/components/ui/pagination.js +6 -6
  118. package/dist/src/shadcn/components/ui/pagination.js.map +1 -1
  119. package/dist/src/shadcn/components/ui/popover.d.ts.map +1 -1
  120. package/dist/src/shadcn/components/ui/popover.js +12 -1
  121. package/dist/src/shadcn/components/ui/popover.js.map +1 -1
  122. package/dist/src/shadcn/components/ui/progress.d.ts.map +1 -1
  123. package/dist/src/shadcn/components/ui/progress.js +6 -2
  124. package/dist/src/shadcn/components/ui/progress.js.map +1 -1
  125. package/dist/src/shadcn/components/ui/radio-group.d.ts.map +1 -1
  126. package/dist/src/shadcn/components/ui/radio-group.js +11 -6
  127. package/dist/src/shadcn/components/ui/radio-group.js.map +1 -1
  128. package/dist/src/shadcn/components/ui/radio-group.stories.d.ts.map +1 -1
  129. package/dist/src/shadcn/components/ui/radio-group.stories.js +57 -34
  130. package/dist/src/shadcn/components/ui/radio-group.stories.js.map +1 -1
  131. package/dist/src/shadcn/components/ui/resizable.d.ts.map +1 -1
  132. package/dist/src/shadcn/components/ui/resizable.js +1 -0
  133. package/dist/src/shadcn/components/ui/resizable.js.map +1 -1
  134. package/dist/src/shadcn/components/ui/scroll-area.d.ts.map +1 -1
  135. package/dist/src/shadcn/components/ui/scroll-area.js +9 -3
  136. package/dist/src/shadcn/components/ui/scroll-area.js.map +1 -1
  137. package/dist/src/shadcn/components/ui/select.d.ts.map +1 -1
  138. package/dist/src/shadcn/components/ui/select.js +49 -14
  139. package/dist/src/shadcn/components/ui/select.js.map +1 -1
  140. package/dist/src/shadcn/components/ui/select.stories.d.ts.map +1 -1
  141. package/dist/src/shadcn/components/ui/select.stories.js +1 -4
  142. package/dist/src/shadcn/components/ui/select.stories.js.map +1 -1
  143. package/dist/src/shadcn/components/ui/separator.d.ts.map +1 -1
  144. package/dist/src/shadcn/components/ui/separator.js +7 -1
  145. package/dist/src/shadcn/components/ui/separator.js.map +1 -1
  146. package/dist/src/shadcn/components/ui/sidebar.d.ts.map +1 -1
  147. package/dist/src/shadcn/components/ui/sidebar.js +20 -6
  148. package/dist/src/shadcn/components/ui/sidebar.js.map +1 -1
  149. package/dist/src/shadcn/components/ui/skeleton.d.ts.map +1 -1
  150. package/dist/src/shadcn/components/ui/skeleton.js +3 -1
  151. package/dist/src/shadcn/components/ui/skeleton.js.map +1 -1
  152. package/dist/src/shadcn/components/ui/slider.d.ts.map +1 -1
  153. package/dist/src/shadcn/components/ui/slider.js +34 -4
  154. package/dist/src/shadcn/components/ui/slider.js.map +1 -1
  155. package/dist/src/shadcn/components/ui/sonner.d.ts +16 -1
  156. package/dist/src/shadcn/components/ui/sonner.d.ts.map +1 -1
  157. package/dist/src/shadcn/components/ui/sonner.js +23 -3
  158. package/dist/src/shadcn/components/ui/sonner.js.map +1 -1
  159. package/dist/src/shadcn/components/ui/sonner.stories.d.ts.map +1 -1
  160. package/dist/src/shadcn/components/ui/sonner.stories.js +19 -11
  161. package/dist/src/shadcn/components/ui/sonner.stories.js.map +1 -1
  162. package/dist/src/shadcn/components/ui/switch.d.ts.map +1 -1
  163. package/dist/src/shadcn/components/ui/switch.js +18 -2
  164. package/dist/src/shadcn/components/ui/switch.js.map +1 -1
  165. package/dist/src/shadcn/components/ui/table.d.ts.map +1 -1
  166. package/dist/src/shadcn/components/ui/table.js +12 -8
  167. package/dist/src/shadcn/components/ui/table.js.map +1 -1
  168. package/dist/src/shadcn/components/ui/tabs.d.ts +21 -3
  169. package/dist/src/shadcn/components/ui/tabs.d.ts.map +1 -1
  170. package/dist/src/shadcn/components/ui/tabs.js +314 -9
  171. package/dist/src/shadcn/components/ui/tabs.js.map +1 -1
  172. package/dist/src/shadcn/components/ui/tabs.stories.d.ts.map +1 -1
  173. package/dist/src/shadcn/components/ui/tabs.stories.js +50 -1
  174. package/dist/src/shadcn/components/ui/tabs.stories.js.map +1 -1
  175. package/dist/src/shadcn/components/ui/textarea.d.ts.map +1 -1
  176. package/dist/src/shadcn/components/ui/textarea.js +15 -1
  177. package/dist/src/shadcn/components/ui/textarea.js.map +1 -1
  178. package/dist/src/shadcn/components/ui/toggle-group.d.ts.map +1 -1
  179. package/dist/src/shadcn/components/ui/toggle-group.js +7 -2
  180. package/dist/src/shadcn/components/ui/toggle-group.js.map +1 -1
  181. package/dist/src/shadcn/components/ui/toggle.d.ts.map +1 -1
  182. package/dist/src/shadcn/components/ui/toggle.js +18 -6
  183. package/dist/src/shadcn/components/ui/toggle.js.map +1 -1
  184. package/dist/src/shadcn/components/ui/tooltip.d.ts.map +1 -1
  185. package/dist/src/shadcn/components/ui/tooltip.js +11 -1
  186. package/dist/src/shadcn/components/ui/tooltip.js.map +1 -1
  187. package/dist/src/shadcn/components/ui/tree.d.ts +20 -0
  188. package/dist/src/shadcn/components/ui/tree.d.ts.map +1 -0
  189. package/dist/src/shadcn/components/ui/tree.js +111 -0
  190. package/dist/src/shadcn/components/ui/tree.js.map +1 -0
  191. package/package.json +9 -2
  192. package/src/components/code-editor/http/grammar/http.grammar +74 -0
  193. package/src/components/code-editor/http/grammar/http.terms.ts +9 -0
  194. package/src/components/code-editor/http/grammar/http.test.ts +110 -0
  195. package/src/components/code-editor/http/grammar/http.ts +21 -0
  196. package/src/components/code-editor/http/index.ts +87 -0
  197. package/src/components/code-editor/index.tsx +182 -21
  198. package/src/components/code-editor.stories.tsx +1 -1
  199. package/src/components/request-line-editor.stories.tsx +17 -27
  200. package/src/components/request-line-editor.tsx +72 -61
  201. package/src/components/tree-view.stories.tsx +260 -0
  202. package/src/components/tree-view.tsx +101 -0
  203. package/src/icons.tsx +45 -0
  204. package/src/index.css +42 -3
  205. package/src/index.tsx +1 -1
  206. package/src/shadcn/components/ui/accordion.tsx +66 -8
  207. package/src/shadcn/components/ui/alert.tsx +53 -15
  208. package/src/shadcn/components/ui/avatar.tsx +17 -6
  209. package/src/shadcn/components/ui/badge.tsx +67 -18
  210. package/src/shadcn/components/ui/breadcrumb.tsx +35 -7
  211. package/src/shadcn/components/ui/button.tsx +118 -57
  212. package/src/shadcn/components/ui/card.tsx +44 -13
  213. package/src/shadcn/components/ui/carousel.tsx +1 -0
  214. package/src/shadcn/components/ui/checkbox.stories.tsx +20 -24
  215. package/src/shadcn/components/ui/checkbox.tsx +45 -4
  216. package/src/shadcn/components/ui/combobox.stories.tsx +19 -0
  217. package/src/shadcn/components/ui/combobox.tsx +142 -0
  218. package/src/shadcn/components/ui/command.stories.tsx +1 -1
  219. package/src/shadcn/components/ui/command.tsx +192 -36
  220. package/src/shadcn/components/ui/dialog.tsx +101 -13
  221. package/src/shadcn/components/ui/drawer.tsx +93 -18
  222. package/src/shadcn/components/ui/dropdown-menu.tsx +38 -9
  223. package/src/shadcn/components/ui/form.tsx +16 -4
  224. package/src/shadcn/components/ui/input-otp.tsx +1 -0
  225. package/src/shadcn/components/ui/input.tsx +281 -29
  226. package/src/shadcn/components/ui/label.tsx +21 -4
  227. package/src/shadcn/components/ui/menubar.tsx +188 -43
  228. package/src/shadcn/components/ui/pagination.tsx +12 -6
  229. package/src/shadcn/components/ui/popover.tsx +35 -4
  230. package/src/shadcn/components/ui/progress.tsx +21 -5
  231. package/src/shadcn/components/ui/radio-group.stories.tsx +22 -14
  232. package/src/shadcn/components/ui/radio-group.tsx +42 -5
  233. package/src/shadcn/components/ui/resizable.tsx +1 -0
  234. package/src/shadcn/components/ui/scroll-area.tsx +33 -5
  235. package/src/shadcn/components/ui/select.stories.tsx +0 -2
  236. package/src/shadcn/components/ui/select.tsx +184 -33
  237. package/src/shadcn/components/ui/separator.tsx +15 -5
  238. package/src/shadcn/components/ui/sidebar.tsx +68 -26
  239. package/src/shadcn/components/ui/skeleton.tsx +4 -1
  240. package/src/shadcn/components/ui/slider.tsx +82 -11
  241. package/src/shadcn/components/ui/sonner.stories.tsx +19 -15
  242. package/src/shadcn/components/ui/sonner.tsx +53 -3
  243. package/src/shadcn/components/ui/switch.tsx +53 -7
  244. package/src/shadcn/components/ui/table.tsx +38 -11
  245. package/src/shadcn/components/ui/tabs.stories.tsx +32 -0
  246. package/src/shadcn/components/ui/tabs.tsx +455 -17
  247. package/src/shadcn/components/ui/textarea.tsx +42 -4
  248. package/src/shadcn/components/ui/toggle-group.tsx +28 -5
  249. package/src/shadcn/components/ui/toggle.tsx +59 -18
  250. package/src/shadcn/components/ui/tooltip.tsx +33 -8
  251. package/src/shadcn/components/ui/tree.tsx +200 -0
@@ -4,6 +4,181 @@ import type * as React from "react";
4
4
 
5
5
  import { cn } from "#shadcn/lib/utils";
6
6
 
7
+ // Menubar styles
8
+ const menubarStyles = cn(
9
+ "bg-background",
10
+ "flex",
11
+ "h-9",
12
+ "items-center",
13
+ "gap-1",
14
+ "rounded-md",
15
+ "border",
16
+ "p-1",
17
+ "shadow-xs",
18
+ );
19
+
20
+ // Menubar trigger styles
21
+ const menubarTriggerStyles = cn(
22
+ "focus:bg-accent",
23
+ "focus:text-accent-foreground",
24
+ "data-[state=open]:bg-accent",
25
+ "data-[state=open]:text-accent-foreground",
26
+ "flex",
27
+ "items-center",
28
+ "rounded-sm",
29
+ "px-2",
30
+ "py-1",
31
+ "text-sm",
32
+ "font-medium",
33
+ "outline-hidden",
34
+ "select-none",
35
+ );
36
+
37
+ // Menubar content styles
38
+ const menubarContentStyles = cn(
39
+ "bg-popover",
40
+ "text-popover-foreground",
41
+ "data-[state=open]:animate-in",
42
+ "data-[state=closed]:fade-out-0",
43
+ "data-[state=open]:fade-in-0",
44
+ "data-[state=closed]:zoom-out-95",
45
+ "data-[state=open]:zoom-in-95",
46
+ "data-[side=bottom]:slide-in-from-top-2",
47
+ "data-[side=left]:slide-in-from-right-2",
48
+ "data-[side=right]:slide-in-from-left-2",
49
+ "data-[side=top]:slide-in-from-bottom-2",
50
+ "z-50",
51
+ "min-w-[12rem]",
52
+ "origin-(--radix-menubar-content-transform-origin)",
53
+ "overflow-hidden",
54
+ "rounded-md",
55
+ "border",
56
+ "p-1",
57
+ "shadow-md",
58
+ );
59
+
60
+ // Menubar item styles
61
+ const menubarItemStyles = cn(
62
+ "focus:bg-accent",
63
+ "focus:text-accent-foreground",
64
+ "data-[variant=destructive]:text-destructive",
65
+ "data-[variant=destructive]:focus:bg-destructive/10",
66
+ "dark:data-[variant=destructive]:focus:bg-destructive/20",
67
+ "data-[variant=destructive]:focus:text-destructive",
68
+ "data-[variant=destructive]:*:[svg]:!text-destructive",
69
+ "[&_svg:not([class*='text-'])]:text-muted-foreground",
70
+ "relative",
71
+ "flex",
72
+ "cursor-default",
73
+ "items-center",
74
+ "gap-2",
75
+ "rounded-sm",
76
+ "px-2",
77
+ "py-1.5",
78
+ "text-sm",
79
+ "outline-hidden",
80
+ "select-none",
81
+ "data-[disabled]:pointer-events-none",
82
+ "data-[disabled]:opacity-50",
83
+ "data-[inset]:pl-8",
84
+ "[&_svg]:pointer-events-none",
85
+ "[&_svg]:shrink-0",
86
+ "[&_svg:not([class*='size-'])]:size-4",
87
+ );
88
+
89
+ // Menubar checkbox/radio item styles
90
+ const menubarCheckboxRadioItemStyles = cn(
91
+ "focus:bg-accent",
92
+ "focus:text-accent-foreground",
93
+ "relative",
94
+ "flex",
95
+ "cursor-default",
96
+ "items-center",
97
+ "gap-2",
98
+ "rounded-xs",
99
+ "py-1.5",
100
+ "pr-2",
101
+ "pl-8",
102
+ "text-sm",
103
+ "outline-hidden",
104
+ "select-none",
105
+ "data-[disabled]:pointer-events-none",
106
+ "data-[disabled]:opacity-50",
107
+ "[&_svg]:pointer-events-none",
108
+ "[&_svg]:shrink-0",
109
+ "[&_svg:not([class*='size-'])]:size-4",
110
+ );
111
+
112
+ // Menubar indicator styles
113
+ const menubarIndicatorStyles = cn(
114
+ "pointer-events-none",
115
+ "absolute",
116
+ "left-2",
117
+ "flex",
118
+ "size-3.5",
119
+ "items-center",
120
+ "justify-center",
121
+ );
122
+
123
+ // Menubar label styles
124
+ const menubarLabelStyles = cn(
125
+ "px-2",
126
+ "py-1.5",
127
+ "text-sm",
128
+ "font-medium",
129
+ "data-[inset]:pl-8",
130
+ );
131
+
132
+ // Menubar separator styles
133
+ const menubarSeparatorStyles = cn("bg-border", "-mx-1", "my-1", "h-px");
134
+
135
+ // Menubar shortcut styles
136
+ const menubarShortcutStyles = cn(
137
+ "text-muted-foreground",
138
+ "ml-auto",
139
+ "text-xs",
140
+ "tracking-widest",
141
+ );
142
+
143
+ // Menubar sub trigger styles
144
+ const menubarSubTriggerStyles = cn(
145
+ "focus:bg-(--color-surface-1)",
146
+ "data-[state=open]:bg-(--color-surface-1)",
147
+ "flex",
148
+ "items-center",
149
+ "rounded-sm",
150
+ "px-2",
151
+ "py-1",
152
+ "text-sm",
153
+ "font-medium",
154
+ "outline-hidden",
155
+ "select-none",
156
+ );
157
+
158
+ // Menubar sub content styles
159
+ const menubarSubContentStyles = cn(
160
+ "bg-popover",
161
+ "text-popover-foreground",
162
+ "data-[state=open]:animate-in",
163
+ "data-[state=closed]:animate-out",
164
+ "data-[state=closed]:fade-out-0",
165
+ "data-[state=open]:fade-in-0",
166
+ "data-[state=closed]:zoom-out-95",
167
+ "data-[state=open]:zoom-in-95",
168
+ "data-[side=bottom]:slide-in-from-top-2",
169
+ "data-[side=left]:slide-in-from-right-2",
170
+ "data-[side=right]:slide-in-from-left-2",
171
+ "data-[side=top]:slide-in-from-bottom-2",
172
+ "z-50",
173
+ "min-w-[8rem]",
174
+ "origin-(--radix-menubar-content-transform-origin)",
175
+ "overflow-hidden",
176
+ "rounded-md",
177
+ "border",
178
+ "p-1",
179
+ "shadow-lg",
180
+ );
181
+
7
182
  function Menubar({
8
183
  className,
9
184
  ...props
@@ -11,10 +186,7 @@ function Menubar({
11
186
  return (
12
187
  <MenubarPrimitive.Root
13
188
  data-slot="menubar"
14
- className={cn(
15
- "bg-background flex h-9 items-center gap-1 rounded-md border p-1 shadow-xs",
16
- className,
17
- )}
189
+ className={cn(menubarStyles, className)}
18
190
  {...props}
19
191
  />
20
192
  );
@@ -53,10 +225,7 @@ function MenubarTrigger({
53
225
  return (
54
226
  <MenubarPrimitive.Trigger
55
227
  data-slot="menubar-trigger"
56
- className={cn(
57
- "focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none",
58
- className,
59
- )}
228
+ className={cn(menubarTriggerStyles, className)}
60
229
  {...props}
61
230
  />
62
231
  );
@@ -76,10 +245,7 @@ function MenubarContent({
76
245
  align={align}
77
246
  alignOffset={alignOffset}
78
247
  sideOffset={sideOffset}
79
- className={cn(
80
- "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[12rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-md",
81
- className,
82
- )}
248
+ className={cn(menubarContentStyles, className)}
83
249
  {...props}
84
250
  />
85
251
  </MenubarPortal>
@@ -100,10 +266,7 @@ function MenubarItem({
100
266
  data-slot="menubar-item"
101
267
  data-inset={inset}
102
268
  data-variant={variant}
103
- className={cn(
104
- "focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
105
- className,
106
- )}
269
+ className={cn(menubarItemStyles, className)}
107
270
  {...props}
108
271
  />
109
272
  );
@@ -117,13 +280,10 @@ function MenubarCheckboxItem({
117
280
  return (
118
281
  <MenubarPrimitive.CheckboxItem
119
282
  data-slot="menubar-checkbox-item"
120
- className={cn(
121
- "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
122
- className,
123
- )}
283
+ className={cn(menubarCheckboxRadioItemStyles, className)}
124
284
  {...props}
125
285
  >
126
- <span className="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center">
286
+ <span className={menubarIndicatorStyles}>
127
287
  <MenubarPrimitive.ItemIndicator>
128
288
  <CheckIcon className="size-4" />
129
289
  </MenubarPrimitive.ItemIndicator>
@@ -141,13 +301,10 @@ function MenubarRadioItem({
141
301
  return (
142
302
  <MenubarPrimitive.RadioItem
143
303
  data-slot="menubar-radio-item"
144
- className={cn(
145
- "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
146
- className,
147
- )}
304
+ className={cn(menubarCheckboxRadioItemStyles, className)}
148
305
  {...props}
149
306
  >
150
- <span className="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center">
307
+ <span className={menubarIndicatorStyles}>
151
308
  <MenubarPrimitive.ItemIndicator>
152
309
  <CircleIcon className="size-2 fill-current" />
153
310
  </MenubarPrimitive.ItemIndicator>
@@ -168,10 +325,7 @@ function MenubarLabel({
168
325
  <MenubarPrimitive.Label
169
326
  data-slot="menubar-label"
170
327
  data-inset={inset}
171
- className={cn(
172
- "px-2 py-1.5 text-sm font-medium data-[inset]:pl-8",
173
- className,
174
- )}
328
+ className={cn(menubarLabelStyles, className)}
175
329
  {...props}
176
330
  />
177
331
  );
@@ -184,7 +338,7 @@ function MenubarSeparator({
184
338
  return (
185
339
  <MenubarPrimitive.Separator
186
340
  data-slot="menubar-separator"
187
- className={cn("bg-border -mx-1 my-1 h-px", className)}
341
+ className={cn(menubarSeparatorStyles, className)}
188
342
  {...props}
189
343
  />
190
344
  );
@@ -197,10 +351,7 @@ function MenubarShortcut({
197
351
  return (
198
352
  <span
199
353
  data-slot="menubar-shortcut"
200
- className={cn(
201
- "text-muted-foreground ml-auto text-xs tracking-widest",
202
- className,
203
- )}
354
+ className={cn(menubarShortcutStyles, className)}
204
355
  {...props}
205
356
  />
206
357
  );
@@ -224,10 +375,7 @@ function MenubarSubTrigger({
224
375
  <MenubarPrimitive.SubTrigger
225
376
  data-slot="menubar-sub-trigger"
226
377
  data-inset={inset}
227
- className={cn(
228
- "focus:bg-(--color-surface-1) data-[state=open]:bg-(--color-surface-1) flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none",
229
- className,
230
- )}
378
+ className={cn(menubarSubTriggerStyles, className)}
231
379
  {...props}
232
380
  >
233
381
  {children}
@@ -243,10 +391,7 @@ function MenubarSubContent({
243
391
  return (
244
392
  <MenubarPrimitive.SubContent
245
393
  data-slot="menubar-sub-content"
246
- className={cn(
247
- "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg",
248
- className,
249
- )}
394
+ className={cn(menubarSubContentStyles, className)}
250
395
  {...props}
251
396
  />
252
397
  );
@@ -15,7 +15,7 @@ function Pagination({ className, ...props }: React.ComponentProps<"nav">) {
15
15
  role="navigation"
16
16
  aria-label="pagination"
17
17
  data-slot="pagination"
18
- className={cn("mx-auto flex w-full justify-center", className)}
18
+ className={cn("mx-auto", "flex", "w-full", "justify-center", className)}
19
19
  {...props}
20
20
  />
21
21
  );
@@ -28,7 +28,7 @@ function PaginationContent({
28
28
  return (
29
29
  <ul
30
30
  data-slot="pagination-content"
31
- className={cn("flex flex-row items-center gap-1", className)}
31
+ className={cn("flex", "flex-row", "items-center", "gap-1", className)}
32
32
  {...props}
33
33
  />
34
34
  );
@@ -37,7 +37,7 @@ function PaginationContent({
37
37
  function PaginationItem({ ...props }: React.ComponentProps<"li">) {
38
38
  return (
39
39
  <li
40
- className="hover:bg-accent rounded-md"
40
+ className={cn("hover:bg-bg-secondary", "rounded-md")}
41
41
  data-slot="pagination-item"
42
42
  {...props}
43
43
  />
@@ -80,7 +80,7 @@ function PaginationPrevious({
80
80
  <PaginationLink
81
81
  aria-label="Go to previous page"
82
82
  size="small"
83
- className={cn("gap-1 px-2.5 sm:pl-2.5", className)}
83
+ className={cn("gap-1", "px-2.5", "sm:pl-2.5", className)}
84
84
  {...props}
85
85
  >
86
86
  <ChevronLeftIcon />
@@ -97,7 +97,7 @@ function PaginationNext({
97
97
  <PaginationLink
98
98
  aria-label="Go to next page"
99
99
  size="regular"
100
- className={cn("gap-1 px-2.5 sm:pr-2.5", className)}
100
+ className={cn("gap-1", "px-2.5", "sm:pr-2.5", className)}
101
101
  {...props}
102
102
  >
103
103
  <span className="hidden sm:block">Next</span>
@@ -114,7 +114,13 @@ function PaginationEllipsis({
114
114
  <span
115
115
  aria-hidden
116
116
  data-slot="pagination-ellipsis"
117
- className={cn("flex size-9 items-center justify-center", className)}
117
+ className={cn(
118
+ "flex",
119
+ "size-9",
120
+ "items-center",
121
+ "justify-center",
122
+ className,
123
+ )}
118
124
  {...props}
119
125
  >
120
126
  <MoreHorizontalIcon className="size-4" />
@@ -4,6 +4,40 @@ import type * as React from "react";
4
4
 
5
5
  import { cn } from "#shadcn/lib/utils";
6
6
 
7
+ // Popover content styles
8
+ const popoverContentStyles = cn(
9
+ // Layout
10
+ "z-50",
11
+ "w-72",
12
+ "origin-(--radix-popover-content-transform-origin)",
13
+ "outline-hidden",
14
+ // Shape
15
+ "rounded-md",
16
+ // Borders
17
+ "border",
18
+ "border-border-primary",
19
+ // Background & Colors
20
+ "bg-bg-primary",
21
+ "text-text-primary",
22
+ // Spacing
23
+ "p-4",
24
+ // Shadow
25
+ "shadow-md",
26
+ // Animations - open
27
+ "data-[state=open]:animate-in",
28
+ "data-[state=open]:fade-in-0",
29
+ "data-[state=open]:zoom-in-95",
30
+ // Animations - closed
31
+ "data-[state=closed]:animate-out",
32
+ "data-[state=closed]:fade-out-0",
33
+ "data-[state=closed]:zoom-out-95",
34
+ // Slide animations
35
+ "data-[side=bottom]:slide-in-from-top-2",
36
+ "data-[side=left]:slide-in-from-right-2",
37
+ "data-[side=right]:slide-in-from-left-2",
38
+ "data-[side=top]:slide-in-from-bottom-2",
39
+ );
40
+
7
41
  function Popover({
8
42
  ...props
9
43
  }: React.ComponentProps<typeof PopoverPrimitive.Root>) {
@@ -28,10 +62,7 @@ function PopoverContent({
28
62
  data-slot="popover-content"
29
63
  align={align}
30
64
  sideOffset={sideOffset}
31
- className={cn(
32
- "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) rounded-md border p-4 shadow-md outline-hidden",
33
- className,
34
- )}
65
+ className={cn(popoverContentStyles, className)}
35
66
  {...props}
36
67
  />
37
68
  </PopoverPrimitive.Portal>
@@ -3,6 +3,25 @@ import type * as React from "react";
3
3
 
4
4
  import { cn } from "#shadcn/lib/utils";
5
5
 
6
+ // Progress root styles
7
+ const progressRootStyles = cn(
8
+ "relative",
9
+ "h-2",
10
+ "w-full",
11
+ "overflow-hidden",
12
+ "rounded-full",
13
+ "bg-bg-quaternary",
14
+ );
15
+
16
+ // Progress indicator styles
17
+ const progressIndicatorStyles = cn(
18
+ "bg-bg-link",
19
+ "h-full",
20
+ "w-full",
21
+ "flex-1",
22
+ "transition-all",
23
+ );
24
+
6
25
  function Progress({
7
26
  className,
8
27
  value,
@@ -11,15 +30,12 @@ function Progress({
11
30
  return (
12
31
  <ProgressPrimitive.Root
13
32
  data-slot="progress"
14
- className={cn(
15
- "bg-primary/20 relative h-2 w-full overflow-hidden rounded-full",
16
- className,
17
- )}
33
+ className={cn(progressRootStyles, className)}
18
34
  {...props}
19
35
  >
20
36
  <ProgressPrimitive.Indicator
21
37
  data-slot="progress-indicator"
22
- className="bg-primary h-full w-full flex-1 transition-all"
38
+ className={progressIndicatorStyles}
23
39
  style={{ transform: `translateX(-${100 - (value || 0)}%)` }}
24
40
  />
25
41
  </ProgressPrimitive.Root>
@@ -11,19 +11,27 @@ type Story = StoryObj<typeof meta>;
11
11
 
12
12
  export const Demo = {
13
13
  render: () => (
14
- <RadioGroup defaultValue="comfortable">
15
- <div className="flex items-center gap-3">
16
- <RadioGroupItem value="default" id="r1" />
17
- <Label htmlFor="r1">Default</Label>
18
- </div>
19
- <div className="flex items-center gap-3">
20
- <RadioGroupItem value="comfortable" id="r2" />
21
- <Label htmlFor="r2">Comfortable</Label>
22
- </div>
23
- <div className="flex items-center gap-3">
24
- <RadioGroupItem value="compact" id="r3" />
25
- <Label htmlFor="r3">Compact</Label>
26
- </div>
27
- </RadioGroup>
14
+ <div className="space-y-6">
15
+ <RadioGroup defaultValue="checked">
16
+ <div className="flex items-center gap-3">
17
+ <RadioGroupItem value="default" id="r1" />
18
+ <Label htmlFor="r1">Default</Label>
19
+ </div>
20
+ <div className="flex items-center gap-3">
21
+ <RadioGroupItem value="checked" id="r2" />
22
+ <Label htmlFor="r2">Checked</Label>
23
+ </div>
24
+ <div className="flex items-center gap-3">
25
+ <RadioGroupItem value="disabled" id="r3" disabled />
26
+ <Label htmlFor="r3">Disabled</Label>
27
+ </div>
28
+ </RadioGroup>
29
+ <RadioGroup defaultValue="disabled-checked">
30
+ <div className="flex items-center gap-3">
31
+ <RadioGroupItem value="disabled-checked" id="r4" disabled />
32
+ <Label htmlFor="r4">Disabled Checked</Label>
33
+ </div>
34
+ </RadioGroup>
35
+ </div>
28
36
  ),
29
37
  } satisfies Story;
@@ -1,6 +1,5 @@
1
1
  "use client";
2
2
  import * as RadioGroupPrimitive from "@radix-ui/react-radio-group";
3
- import { CircleIcon } from "lucide-react";
4
3
  import type * as React from "react";
5
4
 
6
5
  import { cn } from "#shadcn/lib/utils";
@@ -12,7 +11,7 @@ function RadioGroup({
12
11
  return (
13
12
  <RadioGroupPrimitive.Root
14
13
  data-slot="radio-group"
15
- className={cn("grid gap-3", className)}
14
+ className={cn("grid", "gap-3", className)}
16
15
  {...props}
17
16
  />
18
17
  );
@@ -26,16 +25,54 @@ function RadioGroupItem({
26
25
  <RadioGroupPrimitive.Item
27
26
  data-slot="radio-group-item"
28
27
  className={cn(
29
- "border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
28
+ // Base styles
29
+ "aspect-square",
30
+ "size-4",
31
+ "shrink-0",
32
+ "rounded-full",
33
+ "overflow-hidden",
34
+ "relative",
35
+ "outline-none",
36
+ "cursor-pointer",
37
+ // Animations
38
+ "transition-all",
39
+ "duration-200",
40
+ "active:scale-90",
41
+ "active:duration-75",
42
+ // Default state:
43
+ "bg-white",
44
+ "border-[1.6px]",
45
+ "border-solid",
46
+ "border-border-primary",
47
+ // Checked state:
48
+ "data-[state=checked]:bg-bg-link",
49
+ "data-[state=checked]:border-bg-link",
50
+ // Disabled states
51
+ "disabled:cursor-not-allowed",
52
+ "disabled:active:scale-100",
53
+ "disabled:bg-white",
54
+ "disabled:border-border-secondary",
55
+ "disabled:data-[state=checked]:bg-border-secondary",
56
+ "disabled:data-[state=checked]:border-border-secondary",
57
+ // Focus styles
58
+ "focus-visible:ring-2",
59
+ "focus-visible:ring-bg-link",
60
+ "focus-visible:ring-offset-2",
30
61
  className,
31
62
  )}
32
63
  {...props}
33
64
  >
34
65
  <RadioGroupPrimitive.Indicator
35
66
  data-slot="radio-group-indicator"
36
- className="relative flex items-center justify-center"
67
+ className={cn(
68
+ "absolute",
69
+ "inset-0",
70
+ "flex",
71
+ "items-center",
72
+ "justify-center",
73
+ )}
37
74
  >
38
- <CircleIcon className="fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2" />
75
+ <div className={cn("size-1.5", "rounded-full", "bg-white")} />
39
76
  </RadioGroupPrimitive.Indicator>
40
77
  </RadioGroupPrimitive.Item>
41
78
  );
@@ -1,3 +1,4 @@
1
+ "use client";
1
2
  import { GripVerticalIcon } from "lucide-react";
2
3
  import type * as React from "react";
3
4
  import * as ResizablePrimitive from "react-resizable-panels";
@@ -4,6 +4,34 @@ import type * as React from "react";
4
4
 
5
5
  import { cn } from "#shadcn/lib/utils";
6
6
 
7
+ // Scroll area viewport styles
8
+ const scrollAreaViewportStyles = cn(
9
+ "size-full",
10
+ "rounded-[inherit]",
11
+ "transition-[color,box-shadow]",
12
+ "outline-none",
13
+ "focus-visible:ring-2",
14
+ "focus-visible:ring-utility-blue/70",
15
+ "focus-visible:outline-1",
16
+ );
17
+
18
+ // Scroll bar base styles
19
+ const scrollBarBaseStyles = cn(
20
+ "flex",
21
+ "touch-none",
22
+ "p-px",
23
+ "transition-colors",
24
+ "select-none",
25
+ );
26
+
27
+ // Scroll bar thumb styles
28
+ const scrollBarThumbStyles = cn(
29
+ "bg-border-primary",
30
+ "relative",
31
+ "flex-1",
32
+ "rounded-full",
33
+ );
34
+
7
35
  function ScrollArea({
8
36
  className,
9
37
  children,
@@ -17,7 +45,7 @@ function ScrollArea({
17
45
  >
18
46
  <ScrollAreaPrimitive.Viewport
19
47
  data-slot="scroll-area-viewport"
20
- className="focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1"
48
+ className={scrollAreaViewportStyles}
21
49
  >
22
50
  {children}
23
51
  </ScrollAreaPrimitive.Viewport>
@@ -37,18 +65,18 @@ function ScrollBar({
37
65
  data-slot="scroll-area-scrollbar"
38
66
  orientation={orientation}
39
67
  className={cn(
40
- "flex touch-none p-px transition-colors select-none",
68
+ scrollBarBaseStyles,
41
69
  orientation === "vertical" &&
42
- "h-full w-2.5 border-l border-l-transparent",
70
+ cn("h-full", "w-2.5", "border-l", "border-l-transparent"),
43
71
  orientation === "horizontal" &&
44
- "h-2.5 flex-col border-t border-t-transparent",
72
+ cn("h-2.5", "flex-col", "border-t", "border-t-transparent"),
45
73
  className,
46
74
  )}
47
75
  {...props}
48
76
  >
49
77
  <ScrollAreaPrimitive.ScrollAreaThumb
50
78
  data-slot="scroll-area-thumb"
51
- className="bg-border relative flex-1 rounded-full"
79
+ className={scrollBarThumbStyles}
52
80
  />
53
81
  </ScrollAreaPrimitive.ScrollAreaScrollbar>
54
82
  );
@@ -5,7 +5,6 @@ import {
5
5
  SelectContent,
6
6
  SelectGroup,
7
7
  SelectItem,
8
- SelectLabel,
9
8
  SelectTrigger,
10
9
  SelectValue,
11
10
  } from "#shadcn/components/ui/select";
@@ -25,7 +24,6 @@ export const Demo = {
25
24
  </SelectTrigger>
26
25
  <SelectContent>
27
26
  <SelectGroup>
28
- <SelectLabel>Fruits</SelectLabel>
29
27
  <SelectItem value="apple">Apple</SelectItem>
30
28
  <SelectItem value="banana">Banana</SelectItem>
31
29
  <SelectItem value="blueberry">Blueberry</SelectItem>