shadcn-rails 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 (315) hide show
  1. checksums.yaml +7 -0
  2. data/.dockerignore +40 -0
  3. data/CHANGELOG.md +54 -0
  4. data/CLAUDE.md +463 -0
  5. data/PROGRESS.md +485 -0
  6. data/README.md +1483 -0
  7. data/Rakefile +29 -0
  8. data/__tests__/controllers/__snapshots__/calendar_controller.test.js.snap +13 -0
  9. data/__tests__/controllers/__snapshots__/popover_controller.test.js.snap +46 -0
  10. data/__tests__/controllers/__snapshots__/sheet_controller.test.js.snap +111 -0
  11. data/__tests__/controllers/__snapshots__/tabs_controller.test.js.snap +27 -0
  12. data/__tests__/controllers/accordion_controller.test.js +904 -0
  13. data/__tests__/controllers/calendar_controller.test.js +1370 -0
  14. data/__tests__/controllers/carousel_controller.test.js +912 -0
  15. data/__tests__/controllers/checkbox_controller.test.js +454 -0
  16. data/__tests__/controllers/collapsible_controller.test.js +407 -0
  17. data/__tests__/controllers/combobox_controller.test.js +966 -0
  18. data/__tests__/controllers/context_menu_controller.test.js +627 -0
  19. data/__tests__/controllers/date_picker_controller.test.js +636 -0
  20. data/__tests__/controllers/dialog_controller.test.js +878 -0
  21. data/__tests__/controllers/drawer_controller.test.js +995 -0
  22. data/__tests__/controllers/menubar_controller.test.js +736 -0
  23. data/__tests__/controllers/navigation_menu_controller.test.js +598 -0
  24. data/__tests__/controllers/popover_controller.test.js +1007 -0
  25. data/__tests__/controllers/radio_group_controller.test.js +640 -0
  26. data/__tests__/controllers/resizable_controller.test.js +680 -0
  27. data/__tests__/controllers/select_controller.test.js +674 -0
  28. data/__tests__/controllers/sheet_controller.test.js +986 -0
  29. data/__tests__/controllers/slider_controller.test.js +1036 -0
  30. data/__tests__/controllers/switch_controller.test.js +424 -0
  31. data/__tests__/controllers/tabs_controller.test.js +907 -0
  32. data/__tests__/controllers/toggle_group_controller.test.js +839 -0
  33. data/__tests__/controllers/tooltip_controller.test.js +808 -0
  34. data/__tests__/helpers/stimulus-test-helper.js +203 -0
  35. data/app/assets/config/manifest.js +1 -0
  36. data/app/assets/javascripts/shadcn/controllers/accordion_controller.d.ts +53 -0
  37. data/app/assets/javascripts/shadcn/controllers/accordion_controller.js +140 -0
  38. data/app/assets/javascripts/shadcn/controllers/avatar_controller.d.ts +22 -0
  39. data/app/assets/javascripts/shadcn/controllers/avatar_controller.js +26 -0
  40. data/app/assets/javascripts/shadcn/controllers/calendar_controller.js +592 -0
  41. data/app/assets/javascripts/shadcn/controllers/carousel_controller.js +263 -0
  42. data/app/assets/javascripts/shadcn/controllers/checkbox_controller.d.ts +31 -0
  43. data/app/assets/javascripts/shadcn/controllers/checkbox_controller.js +48 -0
  44. data/app/assets/javascripts/shadcn/controllers/collapsible_controller.d.ts +43 -0
  45. data/app/assets/javascripts/shadcn/controllers/collapsible_controller.js +73 -0
  46. data/app/assets/javascripts/shadcn/controllers/combobox_controller.js +234 -0
  47. data/app/assets/javascripts/shadcn/controllers/command_controller.js +141 -0
  48. data/app/assets/javascripts/shadcn/controllers/command_dialog_controller.js +162 -0
  49. data/app/assets/javascripts/shadcn/controllers/context_menu_controller.js +202 -0
  50. data/app/assets/javascripts/shadcn/controllers/date_picker_controller.js +282 -0
  51. data/app/assets/javascripts/shadcn/controllers/dialog_controller.d.ts +67 -0
  52. data/app/assets/javascripts/shadcn/controllers/dialog_controller.js +187 -0
  53. data/app/assets/javascripts/shadcn/controllers/drawer_controller.d.ts +58 -0
  54. data/app/assets/javascripts/shadcn/controllers/drawer_controller.js +112 -0
  55. data/app/assets/javascripts/shadcn/controllers/dropdown_controller.d.ts +83 -0
  56. data/app/assets/javascripts/shadcn/controllers/dropdown_controller.js +225 -0
  57. data/app/assets/javascripts/shadcn/controllers/hover_card_controller.d.ts +59 -0
  58. data/app/assets/javascripts/shadcn/controllers/hover_card_controller.js +143 -0
  59. data/app/assets/javascripts/shadcn/controllers/input_otp_controller.d.ts +44 -0
  60. data/app/assets/javascripts/shadcn/controllers/input_otp_controller.js +206 -0
  61. data/app/assets/javascripts/shadcn/controllers/menubar_controller.js +323 -0
  62. data/app/assets/javascripts/shadcn/controllers/navigation_menu_controller.js +251 -0
  63. data/app/assets/javascripts/shadcn/controllers/popover_controller.d.ts +56 -0
  64. data/app/assets/javascripts/shadcn/controllers/popover_controller.js +141 -0
  65. data/app/assets/javascripts/shadcn/controllers/radio_group_controller.d.ts +47 -0
  66. data/app/assets/javascripts/shadcn/controllers/radio_group_controller.js +108 -0
  67. data/app/assets/javascripts/shadcn/controllers/resizable_controller.js +272 -0
  68. data/app/assets/javascripts/shadcn/controllers/scroll_area_controller.d.ts +44 -0
  69. data/app/assets/javascripts/shadcn/controllers/scroll_area_controller.js +74 -0
  70. data/app/assets/javascripts/shadcn/controllers/select_controller.d.ts +84 -0
  71. data/app/assets/javascripts/shadcn/controllers/select_controller.js +222 -0
  72. data/app/assets/javascripts/shadcn/controllers/sheet_controller.d.ts +60 -0
  73. data/app/assets/javascripts/shadcn/controllers/sheet_controller.js +151 -0
  74. data/app/assets/javascripts/shadcn/controllers/sidebar_controller.js +148 -0
  75. data/app/assets/javascripts/shadcn/controllers/slider_controller.d.ts +102 -0
  76. data/app/assets/javascripts/shadcn/controllers/slider_controller.js +364 -0
  77. data/app/assets/javascripts/shadcn/controllers/switch_controller.d.ts +46 -0
  78. data/app/assets/javascripts/shadcn/controllers/switch_controller.js +78 -0
  79. data/app/assets/javascripts/shadcn/controllers/tabs_controller.d.ts +51 -0
  80. data/app/assets/javascripts/shadcn/controllers/tabs_controller.js +126 -0
  81. data/app/assets/javascripts/shadcn/controllers/toast_controller.d.ts +37 -0
  82. data/app/assets/javascripts/shadcn/controllers/toast_controller.js +58 -0
  83. data/app/assets/javascripts/shadcn/controllers/toggle_controller.d.ts +27 -0
  84. data/app/assets/javascripts/shadcn/controllers/toggle_controller.js +42 -0
  85. data/app/assets/javascripts/shadcn/controllers/toggle_group_controller.d.ts +44 -0
  86. data/app/assets/javascripts/shadcn/controllers/toggle_group_controller.js +68 -0
  87. data/app/assets/javascripts/shadcn/controllers/tooltip_controller.d.ts +56 -0
  88. data/app/assets/javascripts/shadcn/controllers/tooltip_controller.js +117 -0
  89. data/app/assets/javascripts/shadcn/index.d.ts +74 -0
  90. data/app/assets/javascripts/shadcn/index.js +133 -0
  91. data/app/assets/stylesheets/.keep +0 -0
  92. data/app/assets/stylesheets/shadcn/base.css +445 -0
  93. data/app/assets/stylesheets/shadcn/components.css +513 -0
  94. data/app/assets/stylesheets/shadcn/index.css +18 -0
  95. data/app/assets/stylesheets/shadcn/themes/gray.css +68 -0
  96. data/app/assets/stylesheets/shadcn/themes/slate.css +68 -0
  97. data/app/assets/stylesheets/shadcn/themes/stone.css +68 -0
  98. data/app/assets/stylesheets/shadcn/themes/zinc.css +68 -0
  99. data/app/components/shadcn/accordion_component.rb +63 -0
  100. data/app/components/shadcn/accordion_content_component.rb +29 -0
  101. data/app/components/shadcn/accordion_item_component.rb +40 -0
  102. data/app/components/shadcn/accordion_trigger_component.rb +49 -0
  103. data/app/components/shadcn/alert_component.rb +75 -0
  104. data/app/components/shadcn/alert_description_component.rb +12 -0
  105. data/app/components/shadcn/alert_dialog_action_component.rb +24 -0
  106. data/app/components/shadcn/alert_dialog_cancel_component.rb +24 -0
  107. data/app/components/shadcn/alert_dialog_component.rb +71 -0
  108. data/app/components/shadcn/alert_dialog_content_component.rb +57 -0
  109. data/app/components/shadcn/alert_dialog_description_component.rb +12 -0
  110. data/app/components/shadcn/alert_dialog_footer_component.rb +19 -0
  111. data/app/components/shadcn/alert_dialog_header_component.rb +19 -0
  112. data/app/components/shadcn/alert_dialog_title_component.rb +12 -0
  113. data/app/components/shadcn/alert_title_component.rb +12 -0
  114. data/app/components/shadcn/aspect_ratio_component.rb +49 -0
  115. data/app/components/shadcn/avatar_component.rb +107 -0
  116. data/app/components/shadcn/avatar_fallback_component.rb +17 -0
  117. data/app/components/shadcn/badge_component.rb +49 -0
  118. data/app/components/shadcn/base_component.rb +100 -0
  119. data/app/components/shadcn/breadcrumb_component.rb +70 -0
  120. data/app/components/shadcn/breadcrumb_item_component.rb +50 -0
  121. data/app/components/shadcn/button_component.rb +141 -0
  122. data/app/components/shadcn/button_group_component.rb +69 -0
  123. data/app/components/shadcn/calendar_component.rb +337 -0
  124. data/app/components/shadcn/card_action_component.rb +10 -0
  125. data/app/components/shadcn/card_component.rb +63 -0
  126. data/app/components/shadcn/card_content_component.rb +19 -0
  127. data/app/components/shadcn/card_description_component.rb +12 -0
  128. data/app/components/shadcn/card_footer_component.rb +12 -0
  129. data/app/components/shadcn/card_header_component.rb +24 -0
  130. data/app/components/shadcn/card_title_component.rb +18 -0
  131. data/app/components/shadcn/carousel_component.rb +275 -0
  132. data/app/components/shadcn/checkbox_component.rb +103 -0
  133. data/app/components/shadcn/collapsible_component.rb +66 -0
  134. data/app/components/shadcn/collapsible_content_component.rb +28 -0
  135. data/app/components/shadcn/combobox_component.rb +322 -0
  136. data/app/components/shadcn/command_component.rb +52 -0
  137. data/app/components/shadcn/command_dialog_component.rb +76 -0
  138. data/app/components/shadcn/command_empty_component.rb +12 -0
  139. data/app/components/shadcn/command_group_component.rb +34 -0
  140. data/app/components/shadcn/command_input_component.rb +59 -0
  141. data/app/components/shadcn/command_item_component.rb +48 -0
  142. data/app/components/shadcn/command_list_component.rb +38 -0
  143. data/app/components/shadcn/command_separator_component.rb +12 -0
  144. data/app/components/shadcn/command_shortcut_component.rb +12 -0
  145. data/app/components/shadcn/context_menu_component.rb +64 -0
  146. data/app/components/shadcn/context_menu_content_component.rb +44 -0
  147. data/app/components/shadcn/context_menu_item_component.rb +63 -0
  148. data/app/components/shadcn/context_menu_label_component.rb +18 -0
  149. data/app/components/shadcn/context_menu_separator_component.rb +12 -0
  150. data/app/components/shadcn/context_menu_shortcut_component.rb +12 -0
  151. data/app/components/shadcn/date_picker_component.rb +368 -0
  152. data/app/components/shadcn/dialog_component.rb +77 -0
  153. data/app/components/shadcn/dialog_content_component.rb +91 -0
  154. data/app/components/shadcn/dialog_description_component.rb +12 -0
  155. data/app/components/shadcn/dialog_footer_component.rb +12 -0
  156. data/app/components/shadcn/dialog_header_component.rb +19 -0
  157. data/app/components/shadcn/dialog_title_component.rb +12 -0
  158. data/app/components/shadcn/drawer_component.rb +72 -0
  159. data/app/components/shadcn/drawer_content_component.rb +76 -0
  160. data/app/components/shadcn/drawer_description_component.rb +12 -0
  161. data/app/components/shadcn/drawer_footer_component.rb +12 -0
  162. data/app/components/shadcn/drawer_header_component.rb +19 -0
  163. data/app/components/shadcn/drawer_title_component.rb +12 -0
  164. data/app/components/shadcn/dropdown_menu_component.rb +75 -0
  165. data/app/components/shadcn/dropdown_menu_content_component.rb +49 -0
  166. data/app/components/shadcn/dropdown_menu_group_component.rb +10 -0
  167. data/app/components/shadcn/dropdown_menu_item_component.rb +63 -0
  168. data/app/components/shadcn/dropdown_menu_label_component.rb +18 -0
  169. data/app/components/shadcn/dropdown_menu_separator_component.rb +12 -0
  170. data/app/components/shadcn/dropdown_menu_shortcut_component.rb +12 -0
  171. data/app/components/shadcn/empty_component.rb +48 -0
  172. data/app/components/shadcn/empty_content_component.rb +12 -0
  173. data/app/components/shadcn/empty_description_component.rb +12 -0
  174. data/app/components/shadcn/empty_header_component.rb +29 -0
  175. data/app/components/shadcn/empty_media_component.rb +21 -0
  176. data/app/components/shadcn/empty_title_component.rb +12 -0
  177. data/app/components/shadcn/field_component.rb +113 -0
  178. data/app/components/shadcn/hover_card_component.rb +64 -0
  179. data/app/components/shadcn/hover_card_content_component.rb +36 -0
  180. data/app/components/shadcn/input_component.rb +108 -0
  181. data/app/components/shadcn/input_group_component.rb +70 -0
  182. data/app/components/shadcn/input_otp_component.rb +183 -0
  183. data/app/components/shadcn/item_actions_component.rb +12 -0
  184. data/app/components/shadcn/item_component.rb +98 -0
  185. data/app/components/shadcn/item_content_component.rb +24 -0
  186. data/app/components/shadcn/item_description_component.rb +12 -0
  187. data/app/components/shadcn/item_footer_component.rb +12 -0
  188. data/app/components/shadcn/item_group_component.rb +24 -0
  189. data/app/components/shadcn/item_header_component.rb +12 -0
  190. data/app/components/shadcn/item_media_component.rb +22 -0
  191. data/app/components/shadcn/item_separator_component.rb +12 -0
  192. data/app/components/shadcn/item_title_component.rb +12 -0
  193. data/app/components/shadcn/kbd_component.rb +36 -0
  194. data/app/components/shadcn/label_component.rb +49 -0
  195. data/app/components/shadcn/menubar_checkbox_item_component.rb +76 -0
  196. data/app/components/shadcn/menubar_component.rb +56 -0
  197. data/app/components/shadcn/menubar_content_component.rb +64 -0
  198. data/app/components/shadcn/menubar_item_component.rb +65 -0
  199. data/app/components/shadcn/menubar_label_component.rb +27 -0
  200. data/app/components/shadcn/menubar_menu_component.rb +34 -0
  201. data/app/components/shadcn/menubar_radio_group_component.rb +42 -0
  202. data/app/components/shadcn/menubar_radio_item_component.rb +76 -0
  203. data/app/components/shadcn/menubar_separator_component.rb +22 -0
  204. data/app/components/shadcn/menubar_shortcut_component.rb +21 -0
  205. data/app/components/shadcn/menubar_sub_component.rb +38 -0
  206. data/app/components/shadcn/menubar_sub_content_component.rb +45 -0
  207. data/app/components/shadcn/menubar_sub_trigger_component.rb +59 -0
  208. data/app/components/shadcn/menubar_trigger_component.rb +31 -0
  209. data/app/components/shadcn/native_select_component.rb +150 -0
  210. data/app/components/shadcn/navigation_menu_component.rb +76 -0
  211. data/app/components/shadcn/navigation_menu_content_component.rb +30 -0
  212. data/app/components/shadcn/navigation_menu_item_component.rb +39 -0
  213. data/app/components/shadcn/navigation_menu_link_component.rb +38 -0
  214. data/app/components/shadcn/navigation_menu_list_component.rb +29 -0
  215. data/app/components/shadcn/navigation_menu_trigger_component.rb +59 -0
  216. data/app/components/shadcn/pagination_component.rb +195 -0
  217. data/app/components/shadcn/pagination_content_component.rb +47 -0
  218. data/app/components/shadcn/pagination_ellipsis_component.rb +30 -0
  219. data/app/components/shadcn/pagination_item_component.rb +53 -0
  220. data/app/components/shadcn/pagination_next_component.rb +48 -0
  221. data/app/components/shadcn/pagination_previous_component.rb +48 -0
  222. data/app/components/shadcn/popover_component.rb +76 -0
  223. data/app/components/shadcn/popover_content_component.rb +25 -0
  224. data/app/components/shadcn/progress_component.rb +77 -0
  225. data/app/components/shadcn/radio_group_component.rb +129 -0
  226. data/app/components/shadcn/radio_group_item_component.rb +109 -0
  227. data/app/components/shadcn/resizable_handle_component.rb +98 -0
  228. data/app/components/shadcn/resizable_panel_component.rb +56 -0
  229. data/app/components/shadcn/resizable_panel_group_component.rb +94 -0
  230. data/app/components/shadcn/scroll_area_component.rb +110 -0
  231. data/app/components/shadcn/select_component.rb +151 -0
  232. data/app/components/shadcn/select_group_component.rb +32 -0
  233. data/app/components/shadcn/select_item_component.rb +59 -0
  234. data/app/components/shadcn/select_separator_component.rb +12 -0
  235. data/app/components/shadcn/separator_component.rb +54 -0
  236. data/app/components/shadcn/sheet_component.rb +82 -0
  237. data/app/components/shadcn/sheet_content_component.rb +95 -0
  238. data/app/components/shadcn/sheet_description_component.rb +12 -0
  239. data/app/components/shadcn/sheet_footer_component.rb +12 -0
  240. data/app/components/shadcn/sheet_header_component.rb +19 -0
  241. data/app/components/shadcn/sheet_title_component.rb +12 -0
  242. data/app/components/shadcn/sidebar_component.rb +180 -0
  243. data/app/components/shadcn/sidebar_content_component.rb +32 -0
  244. data/app/components/shadcn/sidebar_footer_component.rb +24 -0
  245. data/app/components/shadcn/sidebar_group_action_component.rb +26 -0
  246. data/app/components/shadcn/sidebar_group_component.rb +38 -0
  247. data/app/components/shadcn/sidebar_group_content_component.rb +32 -0
  248. data/app/components/shadcn/sidebar_group_label_component.rb +25 -0
  249. data/app/components/shadcn/sidebar_header_component.rb +24 -0
  250. data/app/components/shadcn/sidebar_inset_component.rb +25 -0
  251. data/app/components/shadcn/sidebar_menu_action_component.rb +37 -0
  252. data/app/components/shadcn/sidebar_menu_badge_component.rb +25 -0
  253. data/app/components/shadcn/sidebar_menu_button_component.rb +52 -0
  254. data/app/components/shadcn/sidebar_menu_component.rb +32 -0
  255. data/app/components/shadcn/sidebar_menu_item_component.rb +41 -0
  256. data/app/components/shadcn/sidebar_menu_skeleton_component.rb +46 -0
  257. data/app/components/shadcn/sidebar_menu_sub_button_component.rb +43 -0
  258. data/app/components/shadcn/sidebar_menu_sub_component.rb +33 -0
  259. data/app/components/shadcn/sidebar_menu_sub_item_component.rb +30 -0
  260. data/app/components/shadcn/sidebar_provider_component.rb +57 -0
  261. data/app/components/shadcn/sidebar_rail_component.rb +30 -0
  262. data/app/components/shadcn/sidebar_separator_component.rb +24 -0
  263. data/app/components/shadcn/sidebar_trigger_component.rb +51 -0
  264. data/app/components/shadcn/skeleton_component.rb +29 -0
  265. data/app/components/shadcn/slider_component.rb +76 -0
  266. data/app/components/shadcn/spinner_component.rb +67 -0
  267. data/app/components/shadcn/switch_component.rb +147 -0
  268. data/app/components/shadcn/table_body_component.rb +16 -0
  269. data/app/components/shadcn/table_caption_component.rb +12 -0
  270. data/app/components/shadcn/table_cell_component.rb +12 -0
  271. data/app/components/shadcn/table_component.rb +57 -0
  272. data/app/components/shadcn/table_footer_component.rb +16 -0
  273. data/app/components/shadcn/table_head_component.rb +12 -0
  274. data/app/components/shadcn/table_header_component.rb +16 -0
  275. data/app/components/shadcn/table_row_component.rb +40 -0
  276. data/app/components/shadcn/tabs_component.rb +78 -0
  277. data/app/components/shadcn/tabs_content_component.rb +32 -0
  278. data/app/components/shadcn/tabs_list_component.rb +30 -0
  279. data/app/components/shadcn/tabs_trigger_component.rb +37 -0
  280. data/app/components/shadcn/textarea_component.rb +84 -0
  281. data/app/components/shadcn/toast_action_component.rb +18 -0
  282. data/app/components/shadcn/toast_component.rb +114 -0
  283. data/app/components/shadcn/toast_description_component.rb +12 -0
  284. data/app/components/shadcn/toast_title_component.rb +12 -0
  285. data/app/components/shadcn/toast_viewport_component.rb +12 -0
  286. data/app/components/shadcn/toggle_component.rb +77 -0
  287. data/app/components/shadcn/toggle_group_component.rb +96 -0
  288. data/app/components/shadcn/toggle_group_item_component.rb +62 -0
  289. data/app/components/shadcn/tooltip_component.rb +89 -0
  290. data/app/components/shadcn/typography_component.rb +112 -0
  291. data/babel.config.cjs +5 -0
  292. data/bin/console +11 -0
  293. data/bin/setup +8 -0
  294. data/config/importmap.rb +5 -0
  295. data/fly.toml +26 -0
  296. data/jest.config.js +19 -0
  297. data/jest.setup.js +8 -0
  298. data/lib/generators/shadcn/component/component_generator.rb +188 -0
  299. data/lib/generators/shadcn/install/install_generator.rb +140 -0
  300. data/lib/generators/shadcn/install/templates/initializer.rb.tt +35 -0
  301. data/lib/generators/shadcn/install/templates/shadcn.yml.tt +35 -0
  302. data/lib/generators/shadcn/theme/theme_generator.rb +128 -0
  303. data/lib/shadcn/rails/class_merger.rb +228 -0
  304. data/lib/shadcn/rails/configuration.rb +341 -0
  305. data/lib/shadcn/rails/engine.rb +59 -0
  306. data/lib/shadcn/rails/helpers/class_name_helper.rb +35 -0
  307. data/lib/shadcn/rails/helpers/component_helper.rb +60 -0
  308. data/lib/shadcn/rails/helpers/pagination_helper.rb +187 -0
  309. data/lib/shadcn/rails/version.rb +7 -0
  310. data/lib/shadcn/rails.rb +179 -0
  311. data/package-lock.json +7415 -0
  312. data/package.json +68 -0
  313. data/rollup.config.js +29 -0
  314. data/sig/shadcn/rails.rbs +6 -0
  315. metadata +526 -0
@@ -0,0 +1,445 @@
1
+ /**
2
+ * shadcn-rails Base Styles
3
+ *
4
+ * This file contains the base CSS variables, animations, and utility styles
5
+ * required for shadcn-rails components to work properly.
6
+ *
7
+ * Import this file in your application's stylesheet:
8
+ * @import "shadcn/base";
9
+ *
10
+ * Or with Tailwind CSS:
11
+ * @import "shadcn/base.css";
12
+ */
13
+
14
+ /* ============================================
15
+ CSS Custom Properties (Theme Variables)
16
+ ============================================ */
17
+
18
+ :root {
19
+ /* Base Colors - Neutral theme (default) */
20
+ --background: 0 0% 100%;
21
+ --foreground: 0 0% 3.9%;
22
+
23
+ --card: 0 0% 100%;
24
+ --card-foreground: 0 0% 3.9%;
25
+
26
+ --popover: 0 0% 100%;
27
+ --popover-foreground: 0 0% 3.9%;
28
+
29
+ --primary: 0 0% 9%;
30
+ --primary-foreground: 0 0% 98%;
31
+
32
+ --secondary: 0 0% 96.1%;
33
+ --secondary-foreground: 0 0% 9%;
34
+
35
+ --muted: 0 0% 96.1%;
36
+ --muted-foreground: 0 0% 45.1%;
37
+
38
+ --accent: 0 0% 96.1%;
39
+ --accent-foreground: 0 0% 9%;
40
+
41
+ --destructive: 0 84.2% 60.2%;
42
+ --destructive-foreground: 0 0% 98%;
43
+
44
+ --border: 0 0% 89.8%;
45
+ --input: 0 0% 89.8%;
46
+ --ring: 0 0% 3.9%;
47
+
48
+ /* Border Radius */
49
+ --radius: 0.5rem;
50
+
51
+ /* Chart Colors */
52
+ --chart-1: 12 76% 61%;
53
+ --chart-2: 173 58% 39%;
54
+ --chart-3: 197 37% 24%;
55
+ --chart-4: 43 74% 66%;
56
+ --chart-5: 27 87% 67%;
57
+
58
+ /* Sidebar Colors */
59
+ --sidebar-background: 0 0% 98%;
60
+ --sidebar-foreground: 240 5.3% 26.1%;
61
+ --sidebar-primary: 240 5.9% 10%;
62
+ --sidebar-primary-foreground: 0 0% 98%;
63
+ --sidebar-accent: 240 4.8% 95.9%;
64
+ --sidebar-accent-foreground: 240 5.9% 10%;
65
+ --sidebar-border: 220 13% 91%;
66
+ --sidebar-ring: 217.2 91.2% 59.8%;
67
+ }
68
+
69
+ /* Dark Mode */
70
+ .dark {
71
+ --background: 0 0% 3.9%;
72
+ --foreground: 0 0% 98%;
73
+
74
+ --card: 0 0% 3.9%;
75
+ --card-foreground: 0 0% 98%;
76
+
77
+ --popover: 0 0% 3.9%;
78
+ --popover-foreground: 0 0% 98%;
79
+
80
+ --primary: 0 0% 98%;
81
+ --primary-foreground: 0 0% 9%;
82
+
83
+ --secondary: 0 0% 14.9%;
84
+ --secondary-foreground: 0 0% 98%;
85
+
86
+ --muted: 0 0% 14.9%;
87
+ --muted-foreground: 0 0% 63.9%;
88
+
89
+ --accent: 0 0% 14.9%;
90
+ --accent-foreground: 0 0% 98%;
91
+
92
+ --destructive: 0 62.8% 30.6%;
93
+ --destructive-foreground: 0 0% 98%;
94
+
95
+ --border: 0 0% 14.9%;
96
+ --input: 0 0% 14.9%;
97
+ --ring: 0 0% 83.1%;
98
+
99
+ /* Chart Colors - Dark */
100
+ --chart-1: 220 70% 50%;
101
+ --chart-2: 160 60% 45%;
102
+ --chart-3: 30 80% 55%;
103
+ --chart-4: 280 65% 60%;
104
+ --chart-5: 340 75% 55%;
105
+
106
+ /* Sidebar Colors - Dark */
107
+ --sidebar-background: 240 5.9% 10%;
108
+ --sidebar-foreground: 240 4.8% 95.9%;
109
+ --sidebar-primary: 224.3 76.3% 48%;
110
+ --sidebar-primary-foreground: 0 0% 100%;
111
+ --sidebar-accent: 240 3.7% 15.9%;
112
+ --sidebar-accent-foreground: 240 4.8% 95.9%;
113
+ --sidebar-border: 240 3.7% 15.9%;
114
+ --sidebar-ring: 217.2 91.2% 59.8%;
115
+ }
116
+
117
+ /* ============================================
118
+ Base Styles
119
+ ============================================ */
120
+
121
+ * {
122
+ border-color: hsl(var(--border));
123
+ }
124
+
125
+ body {
126
+ background-color: hsl(var(--background));
127
+ color: hsl(var(--foreground));
128
+ }
129
+
130
+ /* ============================================
131
+ Animations
132
+ ============================================ */
133
+
134
+ @keyframes accordion-down {
135
+ from {
136
+ height: 0;
137
+ }
138
+ to {
139
+ height: var(--radix-accordion-content-height, auto);
140
+ }
141
+ }
142
+
143
+ @keyframes accordion-up {
144
+ from {
145
+ height: var(--radix-accordion-content-height, auto);
146
+ }
147
+ to {
148
+ height: 0;
149
+ }
150
+ }
151
+
152
+ @keyframes collapsible-down {
153
+ from {
154
+ height: 0;
155
+ }
156
+ to {
157
+ height: var(--radix-collapsible-content-height, auto);
158
+ }
159
+ }
160
+
161
+ @keyframes collapsible-up {
162
+ from {
163
+ height: var(--radix-collapsible-content-height, auto);
164
+ }
165
+ to {
166
+ height: 0;
167
+ }
168
+ }
169
+
170
+ @keyframes progress-indeterminate {
171
+ 0% {
172
+ transform: translateX(-100%);
173
+ }
174
+ 100% {
175
+ transform: translateX(100%);
176
+ }
177
+ }
178
+
179
+ @keyframes fade-in {
180
+ from {
181
+ opacity: 0;
182
+ }
183
+ to {
184
+ opacity: 1;
185
+ }
186
+ }
187
+
188
+ @keyframes fade-out {
189
+ from {
190
+ opacity: 1;
191
+ }
192
+ to {
193
+ opacity: 0;
194
+ }
195
+ }
196
+
197
+ @keyframes zoom-in {
198
+ from {
199
+ transform: scale(0.95);
200
+ }
201
+ to {
202
+ transform: scale(1);
203
+ }
204
+ }
205
+
206
+ @keyframes zoom-out {
207
+ from {
208
+ transform: scale(1);
209
+ }
210
+ to {
211
+ transform: scale(0.95);
212
+ }
213
+ }
214
+
215
+ @keyframes slide-in-from-top {
216
+ from {
217
+ transform: translateY(-100%);
218
+ }
219
+ to {
220
+ transform: translateY(0);
221
+ }
222
+ }
223
+
224
+ @keyframes slide-in-from-bottom {
225
+ from {
226
+ transform: translateY(100%);
227
+ }
228
+ to {
229
+ transform: translateY(0);
230
+ }
231
+ }
232
+
233
+ @keyframes slide-in-from-left {
234
+ from {
235
+ transform: translateX(-100%);
236
+ }
237
+ to {
238
+ transform: translateX(0);
239
+ }
240
+ }
241
+
242
+ @keyframes slide-in-from-right {
243
+ from {
244
+ transform: translateX(100%);
245
+ }
246
+ to {
247
+ transform: translateX(0);
248
+ }
249
+ }
250
+
251
+ @keyframes slide-out-to-top {
252
+ from {
253
+ transform: translateY(0);
254
+ }
255
+ to {
256
+ transform: translateY(-100%);
257
+ }
258
+ }
259
+
260
+ @keyframes slide-out-to-bottom {
261
+ from {
262
+ transform: translateY(0);
263
+ }
264
+ to {
265
+ transform: translateY(100%);
266
+ }
267
+ }
268
+
269
+ @keyframes slide-out-to-left {
270
+ from {
271
+ transform: translateX(0);
272
+ }
273
+ to {
274
+ transform: translateX(-100%);
275
+ }
276
+ }
277
+
278
+ @keyframes slide-out-to-right {
279
+ from {
280
+ transform: translateX(0);
281
+ }
282
+ to {
283
+ transform: translateX(100%);
284
+ }
285
+ }
286
+
287
+ @keyframes spin {
288
+ from {
289
+ transform: rotate(0deg);
290
+ }
291
+ to {
292
+ transform: rotate(360deg);
293
+ }
294
+ }
295
+
296
+ @keyframes pulse {
297
+ 0%, 100% {
298
+ opacity: 1;
299
+ }
300
+ 50% {
301
+ opacity: 0.5;
302
+ }
303
+ }
304
+
305
+ /* ============================================
306
+ Animation Utility Classes
307
+ ============================================ */
308
+
309
+ .animate-accordion-down {
310
+ animation: accordion-down 0.2s ease-out;
311
+ }
312
+
313
+ .animate-accordion-up {
314
+ animation: accordion-up 0.2s ease-out;
315
+ }
316
+
317
+ .animate-collapsible-down {
318
+ animation: collapsible-down 0.2s ease-out;
319
+ }
320
+
321
+ .animate-collapsible-up {
322
+ animation: collapsible-up 0.2s ease-out;
323
+ }
324
+
325
+ .animate-progress-indeterminate {
326
+ animation: progress-indeterminate 1.5s ease-in-out infinite;
327
+ }
328
+
329
+ .animate-in {
330
+ animation-duration: 150ms;
331
+ animation-timing-function: ease-out;
332
+ animation-fill-mode: both;
333
+ }
334
+
335
+ .animate-out {
336
+ animation-duration: 150ms;
337
+ animation-timing-function: ease-in;
338
+ animation-fill-mode: both;
339
+ }
340
+
341
+ .fade-in-0 {
342
+ animation-name: fade-in;
343
+ }
344
+
345
+ .fade-out-0 {
346
+ animation-name: fade-out;
347
+ }
348
+
349
+ .zoom-in-95 {
350
+ animation-name: zoom-in;
351
+ }
352
+
353
+ .zoom-out-95 {
354
+ animation-name: zoom-out;
355
+ }
356
+
357
+ .slide-in-from-top-2 {
358
+ animation-name: slide-in-from-top;
359
+ }
360
+
361
+ .slide-in-from-bottom-2 {
362
+ animation-name: slide-in-from-bottom;
363
+ }
364
+
365
+ .slide-in-from-left-2 {
366
+ animation-name: slide-in-from-left;
367
+ }
368
+
369
+ .slide-in-from-right-2 {
370
+ animation-name: slide-in-from-right;
371
+ }
372
+
373
+ .slide-out-to-top {
374
+ animation-name: slide-out-to-top;
375
+ }
376
+
377
+ .slide-out-to-bottom {
378
+ animation-name: slide-out-to-bottom;
379
+ }
380
+
381
+ .slide-out-to-left {
382
+ animation-name: slide-out-to-left;
383
+ }
384
+
385
+ .slide-out-to-right {
386
+ animation-name: slide-out-to-right;
387
+ }
388
+
389
+ .animate-spin {
390
+ animation: spin 1s linear infinite;
391
+ }
392
+
393
+ .animate-pulse {
394
+ animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
395
+ }
396
+
397
+ /* ============================================
398
+ Portal Styles
399
+ ============================================ */
400
+
401
+ .shadcn-dialog-portal,
402
+ .shadcn-sheet-portal {
403
+ position: fixed;
404
+ inset: 0;
405
+ z-index: 50;
406
+ }
407
+
408
+ /* ============================================
409
+ Focus Visible Styles
410
+ ============================================ */
411
+
412
+ .focus-visible\:outline-none:focus-visible {
413
+ outline: none;
414
+ }
415
+
416
+ .focus-visible\:ring-1:focus-visible {
417
+ box-shadow: 0 0 0 1px hsl(var(--ring));
418
+ }
419
+
420
+ .focus-visible\:ring-2:focus-visible {
421
+ box-shadow: 0 0 0 2px hsl(var(--ring));
422
+ }
423
+
424
+ .focus-visible\:ring-ring:focus-visible {
425
+ --tw-ring-color: hsl(var(--ring));
426
+ }
427
+
428
+ .focus-visible\:ring-offset-2:focus-visible {
429
+ box-shadow: 0 0 0 2px hsl(var(--background)), 0 0 0 4px hsl(var(--ring));
430
+ }
431
+
432
+ /* ============================================
433
+ Scrollbar Styles
434
+ ============================================ */
435
+
436
+ /* Hide scrollbar for Chrome, Safari and Opera */
437
+ .scrollbar-hide::-webkit-scrollbar {
438
+ display: none;
439
+ }
440
+
441
+ /* Hide scrollbar for IE, Edge and Firefox */
442
+ .scrollbar-hide {
443
+ -ms-overflow-style: none;
444
+ scrollbar-width: none;
445
+ }