fernandes-ui 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 (1093) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +392 -0
  4. data/Rakefile +6 -0
  5. data/app/assets/javascripts/ui.esm.js +14385 -0
  6. data/app/assets/javascripts/ui.js +13990 -0
  7. data/app/assets/stylesheets/ui/application.css +584 -0
  8. data/app/assets/stylesheets/ui/sonner.css +610 -0
  9. data/app/behaviors/ui/accordion_behavior.rb +30 -0
  10. data/app/behaviors/ui/accordion_content_behavior.rb +72 -0
  11. data/app/behaviors/ui/accordion_item_behavior.rb +47 -0
  12. data/app/behaviors/ui/accordion_trigger_behavior.rb +79 -0
  13. data/app/behaviors/ui/alert_behavior.rb +44 -0
  14. data/app/behaviors/ui/alert_description_behavior.rb +32 -0
  15. data/app/behaviors/ui/alert_dialog_action_behavior.rb +27 -0
  16. data/app/behaviors/ui/alert_dialog_behavior.rb +41 -0
  17. data/app/behaviors/ui/alert_dialog_cancel_behavior.rb +27 -0
  18. data/app/behaviors/ui/alert_dialog_content_behavior.rb +42 -0
  19. data/app/behaviors/ui/alert_dialog_description_behavior.rb +25 -0
  20. data/app/behaviors/ui/alert_dialog_footer_behavior.rb +26 -0
  21. data/app/behaviors/ui/alert_dialog_header_behavior.rb +25 -0
  22. data/app/behaviors/ui/alert_dialog_overlay_behavior.rb +68 -0
  23. data/app/behaviors/ui/alert_dialog_title_behavior.rb +25 -0
  24. data/app/behaviors/ui/alert_dialog_trigger_behavior.rb +39 -0
  25. data/app/behaviors/ui/alert_title_behavior.rb +32 -0
  26. data/app/behaviors/ui/aspect_ratio_behavior.rb +47 -0
  27. data/app/behaviors/ui/avatar_behavior.rb +43 -0
  28. data/app/behaviors/ui/avatar_fallback_behavior.rb +43 -0
  29. data/app/behaviors/ui/avatar_image_behavior.rb +46 -0
  30. data/app/behaviors/ui/badge_behavior.rb +50 -0
  31. data/app/behaviors/ui/blockquote_behavior.rb +23 -0
  32. data/app/behaviors/ui/breadcrumb_behavior.rb +22 -0
  33. data/app/behaviors/ui/breadcrumb_ellipsis_behavior.rb +34 -0
  34. data/app/behaviors/ui/breadcrumb_item_behavior.rb +32 -0
  35. data/app/behaviors/ui/breadcrumb_link_behavior.rb +33 -0
  36. data/app/behaviors/ui/breadcrumb_list_behavior.rb +32 -0
  37. data/app/behaviors/ui/breadcrumb_page_behavior.rb +35 -0
  38. data/app/behaviors/ui/breadcrumb_separator_behavior.rb +34 -0
  39. data/app/behaviors/ui/button_behavior.rb +99 -0
  40. data/app/behaviors/ui/button_group_behavior.rb +55 -0
  41. data/app/behaviors/ui/button_group_separator_behavior.rb +33 -0
  42. data/app/behaviors/ui/button_group_text_behavior.rb +34 -0
  43. data/app/behaviors/ui/calendar_behavior.rb +119 -0
  44. data/app/behaviors/ui/card_action_behavior.rb +32 -0
  45. data/app/behaviors/ui/card_behavior.rb +32 -0
  46. data/app/behaviors/ui/card_content_behavior.rb +32 -0
  47. data/app/behaviors/ui/card_description_behavior.rb +32 -0
  48. data/app/behaviors/ui/card_footer_behavior.rb +32 -0
  49. data/app/behaviors/ui/card_header_behavior.rb +32 -0
  50. data/app/behaviors/ui/card_title_behavior.rb +32 -0
  51. data/app/behaviors/ui/carousel_behavior.rb +53 -0
  52. data/app/behaviors/ui/carousel_content_behavior.rb +65 -0
  53. data/app/behaviors/ui/carousel_item_behavior.rb +26 -0
  54. data/app/behaviors/ui/carousel_next_behavior.rb +39 -0
  55. data/app/behaviors/ui/carousel_previous_behavior.rb +39 -0
  56. data/app/behaviors/ui/checkbox_behavior.rb +48 -0
  57. data/app/behaviors/ui/collapsible_behavior.rb +42 -0
  58. data/app/behaviors/ui/collapsible_content_behavior.rb +39 -0
  59. data/app/behaviors/ui/collapsible_trigger_behavior.rb +55 -0
  60. data/app/behaviors/ui/combobox_behavior.rb +0 -0
  61. data/app/behaviors/ui/command_behavior.rb +37 -0
  62. data/app/behaviors/ui/command_dialog_behavior.rb +30 -0
  63. data/app/behaviors/ui/command_empty_behavior.rb +36 -0
  64. data/app/behaviors/ui/command_group_behavior.rb +43 -0
  65. data/app/behaviors/ui/command_input_behavior.rb +49 -0
  66. data/app/behaviors/ui/command_item_behavior.rb +47 -0
  67. data/app/behaviors/ui/command_list_behavior.rb +38 -0
  68. data/app/behaviors/ui/command_separator_behavior.rb +30 -0
  69. data/app/behaviors/ui/command_shortcut_behavior.rb +29 -0
  70. data/app/behaviors/ui/context_menu_behavior.rb +32 -0
  71. data/app/behaviors/ui/context_menu_checkbox_item_behavior.rb +38 -0
  72. data/app/behaviors/ui/context_menu_content_behavior.rb +37 -0
  73. data/app/behaviors/ui/context_menu_item_behavior.rb +40 -0
  74. data/app/behaviors/ui/context_menu_label_behavior.rb +33 -0
  75. data/app/behaviors/ui/context_menu_radio_group_behavior.rb +20 -0
  76. data/app/behaviors/ui/context_menu_radio_item_behavior.rb +38 -0
  77. data/app/behaviors/ui/context_menu_separator_behavior.rb +22 -0
  78. data/app/behaviors/ui/context_menu_shortcut_behavior.rb +21 -0
  79. data/app/behaviors/ui/context_menu_trigger_behavior.rb +32 -0
  80. data/app/behaviors/ui/date_picker_behavior.rb +90 -0
  81. data/app/behaviors/ui/date_picker_input_behavior.rb +62 -0
  82. data/app/behaviors/ui/date_picker_trigger_behavior.rb +62 -0
  83. data/app/behaviors/ui/dialog_behavior.rb +46 -0
  84. data/app/behaviors/ui/dialog_content_behavior.rb +46 -0
  85. data/app/behaviors/ui/dialog_footer_behavior.rb +26 -0
  86. data/app/behaviors/ui/dialog_header_behavior.rb +26 -0
  87. data/app/behaviors/ui/dialog_overlay_behavior.rb +69 -0
  88. data/app/behaviors/ui/drawer_behavior.rb +57 -0
  89. data/app/behaviors/ui/drawer_close_behavior.rb +10 -0
  90. data/app/behaviors/ui/drawer_content_behavior.rb +107 -0
  91. data/app/behaviors/ui/drawer_description_behavior.rb +23 -0
  92. data/app/behaviors/ui/drawer_footer_behavior.rb +23 -0
  93. data/app/behaviors/ui/drawer_handle_behavior.rb +40 -0
  94. data/app/behaviors/ui/drawer_header_behavior.rb +29 -0
  95. data/app/behaviors/ui/drawer_overlay_behavior.rb +75 -0
  96. data/app/behaviors/ui/drawer_title_behavior.rb +26 -0
  97. data/app/behaviors/ui/drawer_trigger_behavior.rb +18 -0
  98. data/app/behaviors/ui/dropdown_menu_behavior.rb +43 -0
  99. data/app/behaviors/ui/dropdown_menu_checkbox_item_behavior.rb +46 -0
  100. data/app/behaviors/ui/dropdown_menu_content_behavior.rb +37 -0
  101. data/app/behaviors/ui/dropdown_menu_item_behavior.rb +40 -0
  102. data/app/behaviors/ui/dropdown_menu_label_behavior.rb +30 -0
  103. data/app/behaviors/ui/dropdown_menu_radio_group_behavior.rb +20 -0
  104. data/app/behaviors/ui/dropdown_menu_radio_item_behavior.rb +46 -0
  105. data/app/behaviors/ui/dropdown_menu_separator_behavior.rb +23 -0
  106. data/app/behaviors/ui/dropdown_menu_shortcut_behavior.rb +21 -0
  107. data/app/behaviors/ui/dropdown_menu_sub_behavior.rb +21 -0
  108. data/app/behaviors/ui/dropdown_menu_sub_content_behavior.rb +38 -0
  109. data/app/behaviors/ui/dropdown_menu_sub_trigger_behavior.rb +35 -0
  110. data/app/behaviors/ui/dropdown_menu_trigger_behavior.rb +46 -0
  111. data/app/behaviors/ui/empty_behavior.rb +124 -0
  112. data/app/behaviors/ui/field_behavior.rb +46 -0
  113. data/app/behaviors/ui/field_content_behavior.rb +26 -0
  114. data/app/behaviors/ui/field_description_behavior.rb +26 -0
  115. data/app/behaviors/ui/field_error_behavior.rb +47 -0
  116. data/app/behaviors/ui/field_group_behavior.rb +26 -0
  117. data/app/behaviors/ui/field_label_behavior.rb +27 -0
  118. data/app/behaviors/ui/field_legend_behavior.rb +28 -0
  119. data/app/behaviors/ui/field_separator_behavior.rb +33 -0
  120. data/app/behaviors/ui/field_set_behavior.rb +26 -0
  121. data/app/behaviors/ui/field_title_behavior.rb +26 -0
  122. data/app/behaviors/ui/h1_behavior.rb +23 -0
  123. data/app/behaviors/ui/h2_behavior.rb +23 -0
  124. data/app/behaviors/ui/h3_behavior.rb +23 -0
  125. data/app/behaviors/ui/h4_behavior.rb +23 -0
  126. data/app/behaviors/ui/hover_card_behavior.rb +29 -0
  127. data/app/behaviors/ui/hover_card_content_behavior.rb +41 -0
  128. data/app/behaviors/ui/hover_card_trigger_behavior.rb +44 -0
  129. data/app/behaviors/ui/inline_code_behavior.rb +23 -0
  130. data/app/behaviors/ui/input_behavior.rb +52 -0
  131. data/app/behaviors/ui/input_group_addon_behavior.rb +52 -0
  132. data/app/behaviors/ui/input_group_behavior.rb +63 -0
  133. data/app/behaviors/ui/input_group_button_behavior.rb +82 -0
  134. data/app/behaviors/ui/input_group_input_behavior.rb +50 -0
  135. data/app/behaviors/ui/input_group_text_behavior.rb +32 -0
  136. data/app/behaviors/ui/input_group_textarea_behavior.rb +50 -0
  137. data/app/behaviors/ui/input_otp_behavior.rb +44 -0
  138. data/app/behaviors/ui/input_otp_group_behavior.rb +32 -0
  139. data/app/behaviors/ui/input_otp_separator_behavior.rb +33 -0
  140. data/app/behaviors/ui/input_otp_slot_behavior.rb +49 -0
  141. data/app/behaviors/ui/item_actions_behavior.rb +31 -0
  142. data/app/behaviors/ui/item_behavior.rb +100 -0
  143. data/app/behaviors/ui/item_content_behavior.rb +31 -0
  144. data/app/behaviors/ui/item_description_behavior.rb +31 -0
  145. data/app/behaviors/ui/item_footer_behavior.rb +31 -0
  146. data/app/behaviors/ui/item_group_behavior.rb +31 -0
  147. data/app/behaviors/ui/item_header_behavior.rb +31 -0
  148. data/app/behaviors/ui/item_media_behavior.rb +47 -0
  149. data/app/behaviors/ui/item_separator_behavior.rb +31 -0
  150. data/app/behaviors/ui/item_title_behavior.rb +31 -0
  151. data/app/behaviors/ui/kbd_behavior.rb +28 -0
  152. data/app/behaviors/ui/kbd_group_behavior.rb +26 -0
  153. data/app/behaviors/ui/label_behavior.rb +35 -0
  154. data/app/behaviors/ui/large_behavior.rb +23 -0
  155. data/app/behaviors/ui/lead_behavior.rb +23 -0
  156. data/app/behaviors/ui/list_behavior.rb +23 -0
  157. data/app/behaviors/ui/menubar_behavior.rb +43 -0
  158. data/app/behaviors/ui/menubar_checkbox_item_behavior.rb +56 -0
  159. data/app/behaviors/ui/menubar_content_behavior.rb +53 -0
  160. data/app/behaviors/ui/menubar_item_behavior.rb +78 -0
  161. data/app/behaviors/ui/menubar_label_behavior.rb +41 -0
  162. data/app/behaviors/ui/menubar_menu_behavior.rb +39 -0
  163. data/app/behaviors/ui/menubar_radio_group_behavior.rb +34 -0
  164. data/app/behaviors/ui/menubar_radio_item_behavior.rb +61 -0
  165. data/app/behaviors/ui/menubar_separator_behavior.rb +30 -0
  166. data/app/behaviors/ui/menubar_shortcut_behavior.rb +29 -0
  167. data/app/behaviors/ui/menubar_sub_behavior.rb +30 -0
  168. data/app/behaviors/ui/menubar_sub_content_behavior.rb +49 -0
  169. data/app/behaviors/ui/menubar_sub_trigger_behavior.rb +57 -0
  170. data/app/behaviors/ui/menubar_trigger_behavior.rb +48 -0
  171. data/app/behaviors/ui/muted_behavior.rb +23 -0
  172. data/app/behaviors/ui/navigation_menu_behavior.rb +42 -0
  173. data/app/behaviors/ui/navigation_menu_content_behavior.rb +65 -0
  174. data/app/behaviors/ui/navigation_menu_item_behavior.rb +38 -0
  175. data/app/behaviors/ui/navigation_menu_link_behavior.rb +68 -0
  176. data/app/behaviors/ui/navigation_menu_list_behavior.rb +33 -0
  177. data/app/behaviors/ui/navigation_menu_trigger_behavior.rb +57 -0
  178. data/app/behaviors/ui/navigation_menu_viewport_behavior.rb +61 -0
  179. data/app/behaviors/ui/p_behavior.rb +23 -0
  180. data/app/behaviors/ui/pagination_behavior.rb +26 -0
  181. data/app/behaviors/ui/pagination_content_behavior.rb +24 -0
  182. data/app/behaviors/ui/pagination_ellipsis_behavior.rb +25 -0
  183. data/app/behaviors/ui/pagination_item_behavior.rb +13 -0
  184. data/app/behaviors/ui/pagination_link_behavior.rb +57 -0
  185. data/app/behaviors/ui/pagination_next_behavior.rb +20 -0
  186. data/app/behaviors/ui/pagination_previous_behavior.rb +20 -0
  187. data/app/behaviors/ui/popover_behavior.rb +54 -0
  188. data/app/behaviors/ui/popover_content_behavior.rb +52 -0
  189. data/app/behaviors/ui/popover_trigger_behavior.rb +33 -0
  190. data/app/behaviors/ui/progress_behavior.rb +48 -0
  191. data/app/behaviors/ui/radio_button_behavior.rb +46 -0
  192. data/app/behaviors/ui/resizable_handle_behavior.rb +81 -0
  193. data/app/behaviors/ui/resizable_panel_behavior.rb +53 -0
  194. data/app/behaviors/ui/resizable_panel_group_behavior.rb +41 -0
  195. data/app/behaviors/ui/responsive_dialog_behavior.rb +41 -0
  196. data/app/behaviors/ui/scroll_area_behavior.rb +36 -0
  197. data/app/behaviors/ui/scroll_area_corner_behavior.rb +34 -0
  198. data/app/behaviors/ui/scroll_area_scrollbar_behavior.rb +50 -0
  199. data/app/behaviors/ui/scroll_area_thumb_behavior.rb +34 -0
  200. data/app/behaviors/ui/scroll_area_viewport_behavior.rb +36 -0
  201. data/app/behaviors/ui/select_behavior.rb +84 -0
  202. data/app/behaviors/ui/select_content_behavior.rb +42 -0
  203. data/app/behaviors/ui/select_group_behavior.rb +35 -0
  204. data/app/behaviors/ui/select_item_behavior.rb +48 -0
  205. data/app/behaviors/ui/select_label_behavior.rb +34 -0
  206. data/app/behaviors/ui/select_scroll_down_button_behavior.rb +51 -0
  207. data/app/behaviors/ui/select_scroll_up_button_behavior.rb +51 -0
  208. data/app/behaviors/ui/select_trigger_behavior.rb +40 -0
  209. data/app/behaviors/ui/separator_behavior.rb +58 -0
  210. data/app/behaviors/ui/shared_as_child_behavior.rb +71 -0
  211. data/app/behaviors/ui/sheet_behavior.rb +46 -0
  212. data/app/behaviors/ui/sheet_content_behavior.rb +92 -0
  213. data/app/behaviors/ui/sheet_footer_behavior.rb +27 -0
  214. data/app/behaviors/ui/sheet_header_behavior.rb +27 -0
  215. data/app/behaviors/ui/sheet_overlay_behavior.rb +76 -0
  216. data/app/behaviors/ui/sidebar_behavior.rb +88 -0
  217. data/app/behaviors/ui/sidebar_content_behavior.rb +36 -0
  218. data/app/behaviors/ui/sidebar_footer_behavior.rb +35 -0
  219. data/app/behaviors/ui/sidebar_group_action_behavior.rb +40 -0
  220. data/app/behaviors/ui/sidebar_group_behavior.rb +35 -0
  221. data/app/behaviors/ui/sidebar_group_content_behavior.rb +35 -0
  222. data/app/behaviors/ui/sidebar_group_label_behavior.rb +39 -0
  223. data/app/behaviors/ui/sidebar_header_behavior.rb +35 -0
  224. data/app/behaviors/ui/sidebar_input_behavior.rb +36 -0
  225. data/app/behaviors/ui/sidebar_inset_behavior.rb +39 -0
  226. data/app/behaviors/ui/sidebar_menu_action_behavior.rb +49 -0
  227. data/app/behaviors/ui/sidebar_menu_badge_behavior.rb +39 -0
  228. data/app/behaviors/ui/sidebar_menu_behavior.rb +35 -0
  229. data/app/behaviors/ui/sidebar_menu_button_behavior.rb +70 -0
  230. data/app/behaviors/ui/sidebar_menu_item_behavior.rb +35 -0
  231. data/app/behaviors/ui/sidebar_menu_skeleton_behavior.rb +35 -0
  232. data/app/behaviors/ui/sidebar_menu_sub_behavior.rb +36 -0
  233. data/app/behaviors/ui/sidebar_menu_sub_button_behavior.rb +59 -0
  234. data/app/behaviors/ui/sidebar_menu_sub_item_behavior.rb +35 -0
  235. data/app/behaviors/ui/sidebar_provider_behavior.rb +56 -0
  236. data/app/behaviors/ui/sidebar_rail_behavior.rb +47 -0
  237. data/app/behaviors/ui/sidebar_separator_behavior.rb +36 -0
  238. data/app/behaviors/ui/sidebar_trigger_behavior.rb +40 -0
  239. data/app/behaviors/ui/slider_behavior.rb +46 -0
  240. data/app/behaviors/ui/slider_range_behavior.rb +18 -0
  241. data/app/behaviors/ui/slider_thumb_behavior.rb +25 -0
  242. data/app/behaviors/ui/slider_track_behavior.rb +23 -0
  243. data/app/behaviors/ui/small_behavior.rb +23 -0
  244. data/app/behaviors/ui/sonner_toaster_behavior.rb +34 -0
  245. data/app/behaviors/ui/spinner_behavior.rb +50 -0
  246. data/app/behaviors/ui/switch_behavior.rb +68 -0
  247. data/app/behaviors/ui/table_behavior.rb +28 -0
  248. data/app/behaviors/ui/table_body_behavior.rb +28 -0
  249. data/app/behaviors/ui/table_caption_behavior.rb +28 -0
  250. data/app/behaviors/ui/table_cell_behavior.rb +28 -0
  251. data/app/behaviors/ui/table_footer_behavior.rb +28 -0
  252. data/app/behaviors/ui/table_head_behavior.rb +28 -0
  253. data/app/behaviors/ui/table_header_behavior.rb +28 -0
  254. data/app/behaviors/ui/table_row_behavior.rb +28 -0
  255. data/app/behaviors/ui/tabs_behavior.rb +32 -0
  256. data/app/behaviors/ui/tabs_content_behavior.rb +38 -0
  257. data/app/behaviors/ui/tabs_list_behavior.rb +20 -0
  258. data/app/behaviors/ui/tabs_trigger_behavior.rb +47 -0
  259. data/app/behaviors/ui/textarea_behavior.rb +36 -0
  260. data/app/behaviors/ui/toggle_behavior.rb +85 -0
  261. data/app/behaviors/ui/toggle_group_behavior.rb +68 -0
  262. data/app/behaviors/ui/toggle_group_item_behavior.rb +88 -0
  263. data/app/behaviors/ui/tooltip_behavior.rb +29 -0
  264. data/app/behaviors/ui/tooltip_content_behavior.rb +57 -0
  265. data/app/behaviors/ui/tooltip_trigger_behavior.rb +60 -0
  266. data/app/components/ui/accordion.rb +36 -0
  267. data/app/components/ui/accordion_content.rb +30 -0
  268. data/app/components/ui/accordion_item.rb +48 -0
  269. data/app/components/ui/accordion_trigger.rb +52 -0
  270. data/app/components/ui/alert.rb +31 -0
  271. data/app/components/ui/alert_description.rb +26 -0
  272. data/app/components/ui/alert_dialog.rb +33 -0
  273. data/app/components/ui/alert_dialog_action.rb +34 -0
  274. data/app/components/ui/alert_dialog_cancel.rb +34 -0
  275. data/app/components/ui/alert_dialog_content.rb +25 -0
  276. data/app/components/ui/alert_dialog_description.rb +25 -0
  277. data/app/components/ui/alert_dialog_footer.rb +28 -0
  278. data/app/components/ui/alert_dialog_header.rb +27 -0
  279. data/app/components/ui/alert_dialog_overlay.rb +30 -0
  280. data/app/components/ui/alert_dialog_title.rb +25 -0
  281. data/app/components/ui/alert_dialog_trigger.rb +27 -0
  282. data/app/components/ui/alert_title.rb +24 -0
  283. data/app/components/ui/aspect_ratio.rb +32 -0
  284. data/app/components/ui/avatar.rb +31 -0
  285. data/app/components/ui/avatar_fallback.rb +33 -0
  286. data/app/components/ui/avatar_image.rb +33 -0
  287. data/app/components/ui/badge.rb +37 -0
  288. data/app/components/ui/blockquote.rb +15 -0
  289. data/app/components/ui/breadcrumb.rb +31 -0
  290. data/app/components/ui/breadcrumb_ellipsis.rb +55 -0
  291. data/app/components/ui/breadcrumb_item.rb +27 -0
  292. data/app/components/ui/breadcrumb_link.rb +27 -0
  293. data/app/components/ui/breadcrumb_list.rb +27 -0
  294. data/app/components/ui/breadcrumb_page.rb +25 -0
  295. data/app/components/ui/breadcrumb_separator.rb +51 -0
  296. data/app/components/ui/button.rb +52 -0
  297. data/app/components/ui/button_group.rb +48 -0
  298. data/app/components/ui/button_group_separator.rb +32 -0
  299. data/app/components/ui/button_group_text.rb +45 -0
  300. data/app/components/ui/calendar.rb +209 -0
  301. data/app/components/ui/card.rb +14 -0
  302. data/app/components/ui/card_action.rb +14 -0
  303. data/app/components/ui/card_content.rb +14 -0
  304. data/app/components/ui/card_description.rb +14 -0
  305. data/app/components/ui/card_footer.rb +14 -0
  306. data/app/components/ui/card_header.rb +14 -0
  307. data/app/components/ui/card_title.rb +14 -0
  308. data/app/components/ui/carousel.rb +16 -0
  309. data/app/components/ui/carousel_content.rb +15 -0
  310. data/app/components/ui/carousel_item.rb +13 -0
  311. data/app/components/ui/carousel_next.rb +29 -0
  312. data/app/components/ui/carousel_previous.rb +29 -0
  313. data/app/components/ui/checkbox.rb +49 -0
  314. data/app/components/ui/collapsible.rb +23 -0
  315. data/app/components/ui/collapsible_content.rb +15 -0
  316. data/app/components/ui/collapsible_trigger.rb +21 -0
  317. data/app/components/ui/combobox_wrapper.rb +57 -0
  318. data/app/components/ui/command.rb +15 -0
  319. data/app/components/ui/command_dialog.rb +25 -0
  320. data/app/components/ui/command_empty.rb +14 -0
  321. data/app/components/ui/command_group.rb +21 -0
  322. data/app/components/ui/command_input.rb +32 -0
  323. data/app/components/ui/command_item.rb +16 -0
  324. data/app/components/ui/command_list.rb +14 -0
  325. data/app/components/ui/command_separator.rb +14 -0
  326. data/app/components/ui/command_shortcut.rb +14 -0
  327. data/app/components/ui/context_menu.rb +30 -0
  328. data/app/components/ui/context_menu_checkbox_item.rb +51 -0
  329. data/app/components/ui/context_menu_content.rb +27 -0
  330. data/app/components/ui/context_menu_item.rb +40 -0
  331. data/app/components/ui/context_menu_label.rb +27 -0
  332. data/app/components/ui/context_menu_radio_group.rb +28 -0
  333. data/app/components/ui/context_menu_radio_item.rb +51 -0
  334. data/app/components/ui/context_menu_separator.rb +23 -0
  335. data/app/components/ui/context_menu_shortcut.rb +25 -0
  336. data/app/components/ui/context_menu_trigger.rb +27 -0
  337. data/app/components/ui/date_picker.rb +128 -0
  338. data/app/components/ui/date_picker_input.rb +75 -0
  339. data/app/components/ui/date_picker_trigger.rb +74 -0
  340. data/app/components/ui/dialog.rb +19 -0
  341. data/app/components/ui/dialog_close.rb +27 -0
  342. data/app/components/ui/dialog_content.rb +17 -0
  343. data/app/components/ui/dialog_description.rb +22 -0
  344. data/app/components/ui/dialog_footer.rb +15 -0
  345. data/app/components/ui/dialog_header.rb +15 -0
  346. data/app/components/ui/dialog_overlay.rb +18 -0
  347. data/app/components/ui/dialog_title.rb +22 -0
  348. data/app/components/ui/dialog_trigger.rb +38 -0
  349. data/app/components/ui/drawer.rb +39 -0
  350. data/app/components/ui/drawer_close.rb +23 -0
  351. data/app/components/ui/drawer_content.rb +19 -0
  352. data/app/components/ui/drawer_description.rb +16 -0
  353. data/app/components/ui/drawer_footer.rb +16 -0
  354. data/app/components/ui/drawer_handle.rb +14 -0
  355. data/app/components/ui/drawer_header.rb +16 -0
  356. data/app/components/ui/drawer_overlay.rb +17 -0
  357. data/app/components/ui/drawer_title.rb +16 -0
  358. data/app/components/ui/drawer_trigger.rb +34 -0
  359. data/app/components/ui/dropdown_menu.rb +56 -0
  360. data/app/components/ui/dropdown_menu_checkbox_item.rb +55 -0
  361. data/app/components/ui/dropdown_menu_content.rb +29 -0
  362. data/app/components/ui/dropdown_menu_item.rb +40 -0
  363. data/app/components/ui/dropdown_menu_label.rb +27 -0
  364. data/app/components/ui/dropdown_menu_radio_group.rb +28 -0
  365. data/app/components/ui/dropdown_menu_radio_item.rb +57 -0
  366. data/app/components/ui/dropdown_menu_separator.rb +23 -0
  367. data/app/components/ui/dropdown_menu_shortcut.rb +25 -0
  368. data/app/components/ui/dropdown_menu_sub.rb +28 -0
  369. data/app/components/ui/dropdown_menu_sub_content.rb +31 -0
  370. data/app/components/ui/dropdown_menu_sub_trigger.rb +47 -0
  371. data/app/components/ui/dropdown_menu_trigger.rb +43 -0
  372. data/app/components/ui/empty.rb +25 -0
  373. data/app/components/ui/empty_content.rb +22 -0
  374. data/app/components/ui/empty_description.rb +20 -0
  375. data/app/components/ui/empty_header.rb +24 -0
  376. data/app/components/ui/empty_media.rb +28 -0
  377. data/app/components/ui/empty_title.rb +20 -0
  378. data/app/components/ui/field.rb +35 -0
  379. data/app/components/ui/field_content.rb +25 -0
  380. data/app/components/ui/field_description.rb +25 -0
  381. data/app/components/ui/field_error.rb +61 -0
  382. data/app/components/ui/field_group.rb +28 -0
  383. data/app/components/ui/field_label.rb +27 -0
  384. data/app/components/ui/field_legend.rb +30 -0
  385. data/app/components/ui/field_separator.rb +50 -0
  386. data/app/components/ui/field_set.rb +27 -0
  387. data/app/components/ui/field_title.rb +25 -0
  388. data/app/components/ui/h1.rb +15 -0
  389. data/app/components/ui/h2.rb +15 -0
  390. data/app/components/ui/h3.rb +15 -0
  391. data/app/components/ui/h4.rb +15 -0
  392. data/app/components/ui/hover_card.rb +26 -0
  393. data/app/components/ui/hover_card_content.rb +32 -0
  394. data/app/components/ui/hover_card_trigger.rb +46 -0
  395. data/app/components/ui/inline_code.rb +15 -0
  396. data/app/components/ui/input.rb +19 -0
  397. data/app/components/ui/input_group.rb +33 -0
  398. data/app/components/ui/input_group_addon.rb +32 -0
  399. data/app/components/ui/input_group_button.rb +40 -0
  400. data/app/components/ui/input_group_input.rb +43 -0
  401. data/app/components/ui/input_group_text.rb +31 -0
  402. data/app/components/ui/input_group_textarea.rb +43 -0
  403. data/app/components/ui/input_otp.rb +56 -0
  404. data/app/components/ui/input_otp_group.rb +25 -0
  405. data/app/components/ui/input_otp_separator.rb +34 -0
  406. data/app/components/ui/input_otp_slot.rb +32 -0
  407. data/app/components/ui/item.rb +26 -0
  408. data/app/components/ui/item_actions.rb +14 -0
  409. data/app/components/ui/item_content.rb +14 -0
  410. data/app/components/ui/item_description.rb +14 -0
  411. data/app/components/ui/item_footer.rb +14 -0
  412. data/app/components/ui/item_group.rb +14 -0
  413. data/app/components/ui/item_header.rb +14 -0
  414. data/app/components/ui/item_media.rb +15 -0
  415. data/app/components/ui/item_separator.rb +14 -0
  416. data/app/components/ui/item_title.rb +14 -0
  417. data/app/components/ui/kbd.rb +29 -0
  418. data/app/components/ui/kbd_group.rb +30 -0
  419. data/app/components/ui/label.rb +30 -0
  420. data/app/components/ui/large.rb +15 -0
  421. data/app/components/ui/lead.rb +15 -0
  422. data/app/components/ui/list.rb +15 -0
  423. data/app/components/ui/menubar.rb +36 -0
  424. data/app/components/ui/menubar_checkbox_item.rb +54 -0
  425. data/app/components/ui/menubar_content.rb +32 -0
  426. data/app/components/ui/menubar_item.rb +39 -0
  427. data/app/components/ui/menubar_label.rb +29 -0
  428. data/app/components/ui/menubar_menu.rb +29 -0
  429. data/app/components/ui/menubar_radio_group.rb +29 -0
  430. data/app/components/ui/menubar_radio_item.rb +56 -0
  431. data/app/components/ui/menubar_separator.rb +22 -0
  432. data/app/components/ui/menubar_shortcut.rb +27 -0
  433. data/app/components/ui/menubar_sub.rb +30 -0
  434. data/app/components/ui/menubar_sub_content.rb +27 -0
  435. data/app/components/ui/menubar_sub_trigger.rb +48 -0
  436. data/app/components/ui/menubar_trigger.rb +26 -0
  437. data/app/components/ui/muted.rb +15 -0
  438. data/app/components/ui/navigation_menu.rb +50 -0
  439. data/app/components/ui/navigation_menu_content.rb +33 -0
  440. data/app/components/ui/navigation_menu_item.rb +36 -0
  441. data/app/components/ui/navigation_menu_link.rb +70 -0
  442. data/app/components/ui/navigation_menu_list.rb +28 -0
  443. data/app/components/ui/navigation_menu_trigger.rb +51 -0
  444. data/app/components/ui/navigation_menu_viewport.rb +25 -0
  445. data/app/components/ui/p.rb +15 -0
  446. data/app/components/ui/pagination.rb +19 -0
  447. data/app/components/ui/pagination_content.rb +19 -0
  448. data/app/components/ui/pagination_ellipsis.rb +26 -0
  449. data/app/components/ui/pagination_item.rb +17 -0
  450. data/app/components/ui/pagination_link.rb +25 -0
  451. data/app/components/ui/pagination_next.rb +31 -0
  452. data/app/components/ui/pagination_previous.rb +31 -0
  453. data/app/components/ui/popover.rb +48 -0
  454. data/app/components/ui/popover_content.rb +29 -0
  455. data/app/components/ui/popover_trigger.rb +36 -0
  456. data/app/components/ui/progress.rb +37 -0
  457. data/app/components/ui/radio_button.rb +50 -0
  458. data/app/components/ui/resizable_handle.rb +58 -0
  459. data/app/components/ui/resizable_panel.rb +35 -0
  460. data/app/components/ui/resizable_panel_group.rb +41 -0
  461. data/app/components/ui/responsive_dialog.rb +98 -0
  462. data/app/components/ui/scroll_area.rb +62 -0
  463. data/app/components/ui/scroll_area_corner.rb +33 -0
  464. data/app/components/ui/scroll_area_scrollbar.rb +45 -0
  465. data/app/components/ui/scroll_area_thumb.rb +38 -0
  466. data/app/components/ui/scroll_area_viewport.rb +41 -0
  467. data/app/components/ui/select.rb +42 -0
  468. data/app/components/ui/select_content.rb +43 -0
  469. data/app/components/ui/select_group.rb +38 -0
  470. data/app/components/ui/select_item.rb +67 -0
  471. data/app/components/ui/select_label.rb +34 -0
  472. data/app/components/ui/select_scroll_down_button.rb +47 -0
  473. data/app/components/ui/select_scroll_up_button.rb +47 -0
  474. data/app/components/ui/select_trigger.rb +45 -0
  475. data/app/components/ui/separator.rb +39 -0
  476. data/app/components/ui/sheet.rb +19 -0
  477. data/app/components/ui/sheet_close.rb +39 -0
  478. data/app/components/ui/sheet_content.rb +55 -0
  479. data/app/components/ui/sheet_description.rb +22 -0
  480. data/app/components/ui/sheet_footer.rb +15 -0
  481. data/app/components/ui/sheet_header.rb +15 -0
  482. data/app/components/ui/sheet_overlay.rb +18 -0
  483. data/app/components/ui/sheet_title.rb +22 -0
  484. data/app/components/ui/sheet_trigger.rb +27 -0
  485. data/app/components/ui/sidebar.rb +100 -0
  486. data/app/components/ui/sidebar_content.rb +34 -0
  487. data/app/components/ui/sidebar_footer.rb +36 -0
  488. data/app/components/ui/sidebar_group.rb +52 -0
  489. data/app/components/ui/sidebar_group_action.rb +47 -0
  490. data/app/components/ui/sidebar_group_content.rb +42 -0
  491. data/app/components/ui/sidebar_group_label.rb +46 -0
  492. data/app/components/ui/sidebar_header.rb +36 -0
  493. data/app/components/ui/sidebar_input.rb +42 -0
  494. data/app/components/ui/sidebar_inset.rb +42 -0
  495. data/app/components/ui/sidebar_menu.rb +39 -0
  496. data/app/components/ui/sidebar_menu_action.rb +60 -0
  497. data/app/components/ui/sidebar_menu_badge.rb +39 -0
  498. data/app/components/ui/sidebar_menu_button.rb +71 -0
  499. data/app/components/ui/sidebar_menu_item.rb +45 -0
  500. data/app/components/ui/sidebar_menu_skeleton.rb +63 -0
  501. data/app/components/ui/sidebar_menu_sub.rb +50 -0
  502. data/app/components/ui/sidebar_menu_sub_button.rb +48 -0
  503. data/app/components/ui/sidebar_menu_sub_item.rb +34 -0
  504. data/app/components/ui/sidebar_provider.rb +73 -0
  505. data/app/components/ui/sidebar_rail.rb +35 -0
  506. data/app/components/ui/sidebar_separator.rb +32 -0
  507. data/app/components/ui/sidebar_trigger.rb +57 -0
  508. data/app/components/ui/skeleton.rb +42 -0
  509. data/app/components/ui/small.rb +15 -0
  510. data/app/components/ui/sonner_toaster.rb +53 -0
  511. data/app/components/ui/spinner.rb +41 -0
  512. data/app/components/ui/switch.rb +70 -0
  513. data/app/components/ui/table.rb +45 -0
  514. data/app/components/ui/table_body.rb +29 -0
  515. data/app/components/ui/table_caption.rb +16 -0
  516. data/app/components/ui/table_cell.rb +16 -0
  517. data/app/components/ui/table_footer.rb +29 -0
  518. data/app/components/ui/table_head.rb +16 -0
  519. data/app/components/ui/table_header.rb +29 -0
  520. data/app/components/ui/table_row.rb +25 -0
  521. data/app/components/ui/tabs.rb +40 -0
  522. data/app/components/ui/tabs_content.rb +30 -0
  523. data/app/components/ui/tabs_list.rb +27 -0
  524. data/app/components/ui/tabs_trigger.rb +33 -0
  525. data/app/components/ui/textarea.rb +19 -0
  526. data/app/components/ui/toggle.rb +43 -0
  527. data/app/components/ui/toggle_group.rb +58 -0
  528. data/app/components/ui/toggle_group_item.rb +71 -0
  529. data/app/components/ui/tooltip.rb +31 -0
  530. data/app/components/ui/tooltip_content.rb +35 -0
  531. data/app/components/ui/tooltip_trigger.rb +42 -0
  532. data/app/controllers/ui/application_controller.rb +4 -0
  533. data/app/helpers/ui/application_helper.rb +20 -0
  534. data/app/helpers/ui/combobox_behavior.rb +59 -0
  535. data/app/helpers/ui/empty_behavior.rb +124 -0
  536. data/app/helpers/ui/input_group_addon_behavior.rb +52 -0
  537. data/app/helpers/ui/input_group_behavior.rb +63 -0
  538. data/app/helpers/ui/input_group_button_behavior.rb +82 -0
  539. data/app/helpers/ui/input_group_input_behavior.rb +50 -0
  540. data/app/helpers/ui/input_group_text_behavior.rb +32 -0
  541. data/app/helpers/ui/input_group_textarea_behavior.rb +50 -0
  542. data/app/helpers/ui/popover_behavior.rb +54 -0
  543. data/app/helpers/ui/popover_content_behavior.rb +52 -0
  544. data/app/helpers/ui/popover_trigger_behavior.rb +33 -0
  545. data/app/helpers/ui/scroll_area_behavior.rb +36 -0
  546. data/app/helpers/ui/scroll_area_corner_behavior.rb +34 -0
  547. data/app/helpers/ui/scroll_area_scrollbar_behavior.rb +50 -0
  548. data/app/helpers/ui/scroll_area_thumb_behavior.rb +34 -0
  549. data/app/helpers/ui/scroll_area_viewport_behavior.rb +36 -0
  550. data/app/helpers/ui/select_behavior.rb +84 -0
  551. data/app/helpers/ui/select_content_behavior.rb +42 -0
  552. data/app/helpers/ui/select_group_behavior.rb +35 -0
  553. data/app/helpers/ui/select_item_behavior.rb +48 -0
  554. data/app/helpers/ui/select_label_behavior.rb +34 -0
  555. data/app/helpers/ui/select_scroll_down_button_behavior.rb +51 -0
  556. data/app/helpers/ui/select_scroll_up_button_behavior.rb +51 -0
  557. data/app/helpers/ui/select_trigger_behavior.rb +40 -0
  558. data/app/helpers/ui/spinner_behavior.rb +50 -0
  559. data/app/helpers/ui/textarea_behavior.rb +36 -0
  560. data/app/javascript/ui/common.js +24 -0
  561. data/app/javascript/ui/controllers/accordion_controller.js +159 -0
  562. data/app/javascript/ui/controllers/alert_dialog_controller.js +98 -0
  563. data/app/javascript/ui/controllers/avatar_controller.js +84 -0
  564. data/app/javascript/ui/controllers/calendar_controller.js +867 -0
  565. data/app/javascript/ui/controllers/carousel_controller.js +191 -0
  566. data/app/javascript/ui/controllers/checkbox_controller.js +27 -0
  567. data/app/javascript/ui/controllers/collapsible_controller.js +65 -0
  568. data/app/javascript/ui/controllers/combobox_controller.js +149 -0
  569. data/app/javascript/ui/controllers/command_controller.js +199 -0
  570. data/app/javascript/ui/controllers/command_dialog_controller.js +100 -0
  571. data/app/javascript/ui/controllers/context_menu_controller.js +289 -0
  572. data/app/javascript/ui/controllers/datepicker_controller.js +385 -0
  573. data/app/javascript/ui/controllers/dialog_controller.js +136 -0
  574. data/app/javascript/ui/controllers/drawer_controller.js +945 -0
  575. data/app/javascript/ui/controllers/dropdown_controller.js +850 -0
  576. data/app/javascript/ui/controllers/hello_controller.js +30 -0
  577. data/app/javascript/ui/controllers/hover_card_controller.js +147 -0
  578. data/app/javascript/ui/controllers/input_otp_controller.js +139 -0
  579. data/app/javascript/ui/controllers/menubar_controller.js +799 -0
  580. data/app/javascript/ui/controllers/navigation_menu_controller.js +527 -0
  581. data/app/javascript/ui/controllers/popover_controller.js +257 -0
  582. data/app/javascript/ui/controllers/resizable_controller.js +449 -0
  583. data/app/javascript/ui/controllers/responsive_dialog_controller.js +156 -0
  584. data/app/javascript/ui/controllers/scroll_area_controller.js +623 -0
  585. data/app/javascript/ui/controllers/select_controller.js +456 -0
  586. data/app/javascript/ui/controllers/sidebar_controller.js +284 -0
  587. data/app/javascript/ui/controllers/slider_controller.js +342 -0
  588. data/app/javascript/ui/controllers/sonner_controller.js +393 -0
  589. data/app/javascript/ui/controllers/switch_controller.js +75 -0
  590. data/app/javascript/ui/controllers/tabs_controller.js +156 -0
  591. data/app/javascript/ui/controllers/toggle_controller.js +49 -0
  592. data/app/javascript/ui/controllers/toggle_group_controller.js +155 -0
  593. data/app/javascript/ui/controllers/tooltip_controller.js +122 -0
  594. data/app/javascript/ui/index.js +94 -0
  595. data/app/javascript/ui/utils/click-outside-manager.js +133 -0
  596. data/app/javascript/ui/utils/escape-key-manager.js +118 -0
  597. data/app/javascript/ui/utils/floating-ui-positioner.js +282 -0
  598. data/app/javascript/ui/utils/focus-trap-manager.js +238 -0
  599. data/app/javascript/ui/utils/index.js +86 -0
  600. data/app/javascript/ui/utils/menu_utils.js +423 -0
  601. data/app/javascript/ui/utils/scroll-lock-manager.js +149 -0
  602. data/app/javascript/ui/utils/state-manager.js +205 -0
  603. data/app/jobs/ui/application_job.rb +4 -0
  604. data/app/mailers/ui/application_mailer.rb +6 -0
  605. data/app/models/ui/application_record.rb +5 -0
  606. data/app/view_components/ui/accordion_component.rb +35 -0
  607. data/app/view_components/ui/accordion_content_component.rb +29 -0
  608. data/app/view_components/ui/accordion_item_component.rb +43 -0
  609. data/app/view_components/ui/accordion_trigger_component.rb +31 -0
  610. data/app/view_components/ui/alert_component.rb +23 -0
  611. data/app/view_components/ui/alert_description_component.rb +21 -0
  612. data/app/view_components/ui/alert_title_component.rb +21 -0
  613. data/app/view_components/ui/aspect_ratio_component.rb +26 -0
  614. data/app/view_components/ui/avatar_component.rb +21 -0
  615. data/app/view_components/ui/avatar_fallback_component.rb +21 -0
  616. data/app/view_components/ui/avatar_image_component.rb +23 -0
  617. data/app/view_components/ui/badge_component.rb +23 -0
  618. data/app/view_components/ui/blockquote_component.rb +18 -0
  619. data/app/view_components/ui/breadcrumb_component.rb +33 -0
  620. data/app/view_components/ui/breadcrumb_ellipsis_component.rb +50 -0
  621. data/app/view_components/ui/breadcrumb_item_component.rb +29 -0
  622. data/app/view_components/ui/breadcrumb_link_component.rb +29 -0
  623. data/app/view_components/ui/breadcrumb_list_component.rb +29 -0
  624. data/app/view_components/ui/breadcrumb_page_component.rb +27 -0
  625. data/app/view_components/ui/breadcrumb_separator_component.rb +47 -0
  626. data/app/view_components/ui/button_component.rb +43 -0
  627. data/app/view_components/ui/button_group_component.rb +38 -0
  628. data/app/view_components/ui/button_group_separator_component.rb +33 -0
  629. data/app/view_components/ui/button_group_text_component.rb +30 -0
  630. data/app/view_components/ui/calendar_component.rb +185 -0
  631. data/app/view_components/ui/card_action_component.rb +14 -0
  632. data/app/view_components/ui/card_component.rb +14 -0
  633. data/app/view_components/ui/card_content_component.rb +14 -0
  634. data/app/view_components/ui/card_description_component.rb +14 -0
  635. data/app/view_components/ui/card_footer_component.rb +14 -0
  636. data/app/view_components/ui/card_header_component.rb +14 -0
  637. data/app/view_components/ui/card_title_component.rb +14 -0
  638. data/app/view_components/ui/carousel_component.rb +16 -0
  639. data/app/view_components/ui/carousel_content_component.rb +15 -0
  640. data/app/view_components/ui/carousel_item_component.rb +13 -0
  641. data/app/view_components/ui/carousel_next_component.rb +31 -0
  642. data/app/view_components/ui/carousel_previous_component.rb +31 -0
  643. data/app/view_components/ui/checkbox_component.rb +55 -0
  644. data/app/view_components/ui/collapsible_component.rb +23 -0
  645. data/app/view_components/ui/collapsible_content_component.rb +15 -0
  646. data/app/view_components/ui/collapsible_trigger_component.rb +21 -0
  647. data/app/view_components/ui/combobox_wrapper_component.rb +56 -0
  648. data/app/view_components/ui/command_component.rb +15 -0
  649. data/app/view_components/ui/command_dialog_component.rb +25 -0
  650. data/app/view_components/ui/command_empty_component.rb +14 -0
  651. data/app/view_components/ui/command_group_component.rb +21 -0
  652. data/app/view_components/ui/command_input_component.rb +20 -0
  653. data/app/view_components/ui/command_item_component.rb +16 -0
  654. data/app/view_components/ui/command_list_component.rb +14 -0
  655. data/app/view_components/ui/command_separator_component.rb +14 -0
  656. data/app/view_components/ui/command_shortcut_component.rb +14 -0
  657. data/app/view_components/ui/context_menu_checkbox_item_component.rb +45 -0
  658. data/app/view_components/ui/context_menu_component.rb +20 -0
  659. data/app/view_components/ui/context_menu_content_component.rb +20 -0
  660. data/app/view_components/ui/context_menu_item_component.rb +29 -0
  661. data/app/view_components/ui/context_menu_label_component.rb +22 -0
  662. data/app/view_components/ui/context_menu_radio_group_component.rb +19 -0
  663. data/app/view_components/ui/context_menu_radio_item_component.rb +45 -0
  664. data/app/view_components/ui/context_menu_separator_component.rb +15 -0
  665. data/app/view_components/ui/context_menu_shortcut_component.rb +19 -0
  666. data/app/view_components/ui/context_menu_trigger_component.rb +20 -0
  667. data/app/view_components/ui/date_picker_component.rb +137 -0
  668. data/app/view_components/ui/date_picker_input_component.rb +76 -0
  669. data/app/view_components/ui/date_picker_trigger_component.rb +79 -0
  670. data/app/view_components/ui/dialog_close_component.rb +71 -0
  671. data/app/view_components/ui/dialog_component.rb +50 -0
  672. data/app/view_components/ui/dialog_content_component.rb +28 -0
  673. data/app/view_components/ui/dialog_description_component.rb +26 -0
  674. data/app/view_components/ui/dialog_footer_component.rb +21 -0
  675. data/app/view_components/ui/dialog_header_component.rb +22 -0
  676. data/app/view_components/ui/dialog_overlay_component.rb +36 -0
  677. data/app/view_components/ui/dialog_title_component.rb +26 -0
  678. data/app/view_components/ui/dialog_trigger_component.rb +71 -0
  679. data/app/view_components/ui/drawer_close_component.rb +35 -0
  680. data/app/view_components/ui/drawer_component.rb +81 -0
  681. data/app/view_components/ui/drawer_content_component.rb +32 -0
  682. data/app/view_components/ui/drawer_description_component.rb +21 -0
  683. data/app/view_components/ui/drawer_footer_component.rb +24 -0
  684. data/app/view_components/ui/drawer_handle_component.rb +24 -0
  685. data/app/view_components/ui/drawer_header_component.rb +24 -0
  686. data/app/view_components/ui/drawer_overlay_component.rb +28 -0
  687. data/app/view_components/ui/drawer_title_component.rb +21 -0
  688. data/app/view_components/ui/drawer_trigger_component.rb +71 -0
  689. data/app/view_components/ui/dropdown_menu_checkbox_item_component.rb +36 -0
  690. data/app/view_components/ui/dropdown_menu_component.rb +52 -0
  691. data/app/view_components/ui/dropdown_menu_content_component.rb +18 -0
  692. data/app/view_components/ui/dropdown_menu_item_component.rb +21 -0
  693. data/app/view_components/ui/dropdown_menu_label_component.rb +18 -0
  694. data/app/view_components/ui/dropdown_menu_radio_group_component.rb +17 -0
  695. data/app/view_components/ui/dropdown_menu_radio_item_component.rb +37 -0
  696. data/app/view_components/ui/dropdown_menu_separator_component.rb +15 -0
  697. data/app/view_components/ui/dropdown_menu_shortcut_component.rb +17 -0
  698. data/app/view_components/ui/dropdown_menu_sub_component.rb +17 -0
  699. data/app/view_components/ui/dropdown_menu_sub_content_component.rb +19 -0
  700. data/app/view_components/ui/dropdown_menu_sub_trigger_component.rb +29 -0
  701. data/app/view_components/ui/dropdown_menu_trigger_component.rb +52 -0
  702. data/app/view_components/ui/empty_component.rb +17 -0
  703. data/app/view_components/ui/empty_content_component.rb +17 -0
  704. data/app/view_components/ui/empty_description_component.rb +17 -0
  705. data/app/view_components/ui/empty_header_component.rb +17 -0
  706. data/app/view_components/ui/empty_media_component.rb +18 -0
  707. data/app/view_components/ui/empty_title_component.rb +17 -0
  708. data/app/view_components/ui/field_component.rb +41 -0
  709. data/app/view_components/ui/field_content_component.rb +27 -0
  710. data/app/view_components/ui/field_description_component.rb +27 -0
  711. data/app/view_components/ui/field_error_component.rb +63 -0
  712. data/app/view_components/ui/field_group_component.rb +32 -0
  713. data/app/view_components/ui/field_label_component.rb +29 -0
  714. data/app/view_components/ui/field_legend_component.rb +34 -0
  715. data/app/view_components/ui/field_separator_component.rb +53 -0
  716. data/app/view_components/ui/field_set_component.rb +30 -0
  717. data/app/view_components/ui/field_title_component.rb +27 -0
  718. data/app/view_components/ui/h1_component.rb +21 -0
  719. data/app/view_components/ui/h2_component.rb +21 -0
  720. data/app/view_components/ui/h3_component.rb +18 -0
  721. data/app/view_components/ui/h4_component.rb +18 -0
  722. data/app/view_components/ui/hover_card_component.rb +30 -0
  723. data/app/view_components/ui/hover_card_content_component.rb +36 -0
  724. data/app/view_components/ui/hover_card_trigger_component.rb +54 -0
  725. data/app/view_components/ui/inline_code_component.rb +18 -0
  726. data/app/view_components/ui/input_component.rb +23 -0
  727. data/app/view_components/ui/input_group_addon_component.rb +36 -0
  728. data/app/view_components/ui/input_group_button_component.rb +36 -0
  729. data/app/view_components/ui/input_group_component.rb +35 -0
  730. data/app/view_components/ui/input_group_input_component.rb +42 -0
  731. data/app/view_components/ui/input_group_text_component.rb +33 -0
  732. data/app/view_components/ui/input_group_textarea_component.rb +42 -0
  733. data/app/view_components/ui/input_otp_component.rb +61 -0
  734. data/app/view_components/ui/input_otp_group_component.rb +29 -0
  735. data/app/view_components/ui/input_otp_separator_component.rb +36 -0
  736. data/app/view_components/ui/input_otp_slot_component.rb +32 -0
  737. data/app/view_components/ui/item_actions_component.rb +18 -0
  738. data/app/view_components/ui/item_component.rb +30 -0
  739. data/app/view_components/ui/item_content_component.rb +18 -0
  740. data/app/view_components/ui/item_description_component.rb +18 -0
  741. data/app/view_components/ui/item_footer_component.rb +18 -0
  742. data/app/view_components/ui/item_group_component.rb +18 -0
  743. data/app/view_components/ui/item_header_component.rb +18 -0
  744. data/app/view_components/ui/item_media_component.rb +19 -0
  745. data/app/view_components/ui/item_separator_component.rb +18 -0
  746. data/app/view_components/ui/item_title_component.rb +18 -0
  747. data/app/view_components/ui/kbd_component.rb +31 -0
  748. data/app/view_components/ui/kbd_group_component.rb +32 -0
  749. data/app/view_components/ui/label_component.rb +23 -0
  750. data/app/view_components/ui/large_component.rb +18 -0
  751. data/app/view_components/ui/lead_component.rb +18 -0
  752. data/app/view_components/ui/list_component.rb +18 -0
  753. data/app/view_components/ui/menubar_checkbox_item_component.rb +47 -0
  754. data/app/view_components/ui/menubar_component.rb +24 -0
  755. data/app/view_components/ui/menubar_content_component.rb +26 -0
  756. data/app/view_components/ui/menubar_item_component.rb +31 -0
  757. data/app/view_components/ui/menubar_label_component.rb +23 -0
  758. data/app/view_components/ui/menubar_menu_component.rb +25 -0
  759. data/app/view_components/ui/menubar_radio_group_component.rb +26 -0
  760. data/app/view_components/ui/menubar_radio_item_component.rb +48 -0
  761. data/app/view_components/ui/menubar_separator_component.rb +20 -0
  762. data/app/view_components/ui/menubar_shortcut_component.rb +22 -0
  763. data/app/view_components/ui/menubar_sub_component.rb +25 -0
  764. data/app/view_components/ui/menubar_sub_content_component.rb +25 -0
  765. data/app/view_components/ui/menubar_sub_trigger_component.rb +43 -0
  766. data/app/view_components/ui/menubar_trigger_component.rb +23 -0
  767. data/app/view_components/ui/muted_component.rb +18 -0
  768. data/app/view_components/ui/navigation_menu_component.rb +42 -0
  769. data/app/view_components/ui/navigation_menu_content_component.rb +23 -0
  770. data/app/view_components/ui/navigation_menu_item_component.rb +23 -0
  771. data/app/view_components/ui/navigation_menu_link_component.rb +101 -0
  772. data/app/view_components/ui/navigation_menu_list_component.rb +21 -0
  773. data/app/view_components/ui/navigation_menu_trigger_component.rb +45 -0
  774. data/app/view_components/ui/navigation_menu_viewport_component.rb +21 -0
  775. data/app/view_components/ui/p_component.rb +18 -0
  776. data/app/view_components/ui/pagination_component.rb +18 -0
  777. data/app/view_components/ui/pagination_content_component.rb +18 -0
  778. data/app/view_components/ui/pagination_ellipsis_component.rb +25 -0
  779. data/app/view_components/ui/pagination_item_component.rb +16 -0
  780. data/app/view_components/ui/pagination_link_component.rb +26 -0
  781. data/app/view_components/ui/pagination_next_component.rb +30 -0
  782. data/app/view_components/ui/pagination_previous_component.rb +30 -0
  783. data/app/view_components/ui/popover_component.rb +55 -0
  784. data/app/view_components/ui/popover_content_component.rb +43 -0
  785. data/app/view_components/ui/popover_trigger_component.rb +72 -0
  786. data/app/view_components/ui/progress_component.rb +39 -0
  787. data/app/view_components/ui/radio_button_component.rb +56 -0
  788. data/app/view_components/ui/resizable_handle_component.rb +35 -0
  789. data/app/view_components/ui/resizable_panel_component.rb +39 -0
  790. data/app/view_components/ui/resizable_panel_group_component.rb +45 -0
  791. data/app/view_components/ui/responsive_dialog_component.rb +81 -0
  792. data/app/view_components/ui/scroll_area_component.rb +46 -0
  793. data/app/view_components/ui/scroll_area_corner_component.rb +22 -0
  794. data/app/view_components/ui/scroll_area_scrollbar_component.rb +35 -0
  795. data/app/view_components/ui/scroll_area_thumb_component.rb +29 -0
  796. data/app/view_components/ui/scroll_area_viewport_component.rb +32 -0
  797. data/app/view_components/ui/select_component.rb +31 -0
  798. data/app/view_components/ui/select_content_component.rb +41 -0
  799. data/app/view_components/ui/select_group_component.rb +26 -0
  800. data/app/view_components/ui/select_item_component.rb +45 -0
  801. data/app/view_components/ui/select_label_component.rb +22 -0
  802. data/app/view_components/ui/select_scroll_down_button_component.rb +35 -0
  803. data/app/view_components/ui/select_scroll_up_button_component.rb +35 -0
  804. data/app/view_components/ui/select_trigger_component.rb +27 -0
  805. data/app/view_components/ui/separator_component.rb +27 -0
  806. data/app/view_components/ui/sheet_close_component.rb +71 -0
  807. data/app/view_components/ui/sheet_component.rb +50 -0
  808. data/app/view_components/ui/sheet_content_component.rb +52 -0
  809. data/app/view_components/ui/sheet_description_component.rb +25 -0
  810. data/app/view_components/ui/sheet_footer_component.rb +21 -0
  811. data/app/view_components/ui/sheet_header_component.rb +21 -0
  812. data/app/view_components/ui/sheet_overlay_component.rb +36 -0
  813. data/app/view_components/ui/sheet_title_component.rb +25 -0
  814. data/app/view_components/ui/sheet_trigger_component.rb +60 -0
  815. data/app/view_components/ui/skeleton_component.rb +30 -0
  816. data/app/view_components/ui/slider_component.rb +61 -0
  817. data/app/view_components/ui/slider_range_component.rb +24 -0
  818. data/app/view_components/ui/slider_thumb_component.rb +30 -0
  819. data/app/view_components/ui/slider_track_component.rb +28 -0
  820. data/app/view_components/ui/small_component.rb +18 -0
  821. data/app/view_components/ui/sonner_toaster_component.rb +53 -0
  822. data/app/view_components/ui/spinner_component.rb +48 -0
  823. data/app/view_components/ui/switch_component.rb +55 -0
  824. data/app/view_components/ui/table_body_component.rb +21 -0
  825. data/app/view_components/ui/table_caption_component.rb +14 -0
  826. data/app/view_components/ui/table_cell_component.rb +14 -0
  827. data/app/view_components/ui/table_component.rb +27 -0
  828. data/app/view_components/ui/table_footer_component.rb +21 -0
  829. data/app/view_components/ui/table_head_component.rb +14 -0
  830. data/app/view_components/ui/table_header_component.rb +21 -0
  831. data/app/view_components/ui/table_row_component.rb +23 -0
  832. data/app/view_components/ui/tabs_component.rb +39 -0
  833. data/app/view_components/ui/tabs_content_component.rb +34 -0
  834. data/app/view_components/ui/tabs_list_component.rb +30 -0
  835. data/app/view_components/ui/tabs_trigger_component.rb +37 -0
  836. data/app/view_components/ui/textarea_component.rb +18 -0
  837. data/app/view_components/ui/toggle_component.rb +48 -0
  838. data/app/view_components/ui/toggle_group_component.rb +68 -0
  839. data/app/view_components/ui/toggle_group_item_component.rb +72 -0
  840. data/app/view_components/ui/tooltip_component.rb +19 -0
  841. data/app/view_components/ui/tooltip_content_component.rb +28 -0
  842. data/app/view_components/ui/tooltip_trigger_component.rb +25 -0
  843. data/app/views/layouts/ui/application.html.erb +21 -0
  844. data/app/views/ui/_accordion.html.erb +17 -0
  845. data/app/views/ui/_alert.html.erb +22 -0
  846. data/app/views/ui/_aspect_ratio.html.erb +18 -0
  847. data/app/views/ui/_avatar.html.erb +13 -0
  848. data/app/views/ui/_badge.html.erb +18 -0
  849. data/app/views/ui/_blockquote.html.erb +19 -0
  850. data/app/views/ui/_breadcrumb.html.erb +14 -0
  851. data/app/views/ui/_button.html.erb +38 -0
  852. data/app/views/ui/_button_group.html.erb +17 -0
  853. data/app/views/ui/_calendar.html.erb +172 -0
  854. data/app/views/ui/_card.html.erb +18 -0
  855. data/app/views/ui/_carousel.html.erb +17 -0
  856. data/app/views/ui/_checkbox.html.erb +32 -0
  857. data/app/views/ui/_collapsible.html.erb +23 -0
  858. data/app/views/ui/_command.html.erb +19 -0
  859. data/app/views/ui/_context_menu.html.erb +21 -0
  860. data/app/views/ui/_date_picker.html.erb +93 -0
  861. data/app/views/ui/_dialog.html.erb +18 -0
  862. data/app/views/ui/_drawer.html.erb +25 -0
  863. data/app/views/ui/_dropdown_menu.html.erb +40 -0
  864. data/app/views/ui/_empty.html.erb +13 -0
  865. data/app/views/ui/_field.html.erb +15 -0
  866. data/app/views/ui/_h1.html.erb +19 -0
  867. data/app/views/ui/_h2.html.erb +19 -0
  868. data/app/views/ui/_h3.html.erb +19 -0
  869. data/app/views/ui/_h4.html.erb +19 -0
  870. data/app/views/ui/_hover_card.html.erb +14 -0
  871. data/app/views/ui/_inline_code.html.erb +19 -0
  872. data/app/views/ui/_input.html.erb +18 -0
  873. data/app/views/ui/_input_group.html.erb +14 -0
  874. data/app/views/ui/_input_otp.html.erb +44 -0
  875. data/app/views/ui/_item.html.erb +9 -0
  876. data/app/views/ui/_kbd.html.erb +15 -0
  877. data/app/views/ui/_label.html.erb +16 -0
  878. data/app/views/ui/_large.html.erb +19 -0
  879. data/app/views/ui/_lead.html.erb +19 -0
  880. data/app/views/ui/_list.html.erb +19 -0
  881. data/app/views/ui/_menubar.html.erb +25 -0
  882. data/app/views/ui/_muted.html.erb +19 -0
  883. data/app/views/ui/_navigation_menu.html.erb +34 -0
  884. data/app/views/ui/_p.html.erb +19 -0
  885. data/app/views/ui/_pagination.html.erb +14 -0
  886. data/app/views/ui/_popover.html.erb +19 -0
  887. data/app/views/ui/_progress.html.erb +15 -0
  888. data/app/views/ui/_radio_button.html.erb +34 -0
  889. data/app/views/ui/_responsive_dialog.html.erb +44 -0
  890. data/app/views/ui/_scroll_area.html.erb +60 -0
  891. data/app/views/ui/_select.html.erb +17 -0
  892. data/app/views/ui/_separator.html.erb +20 -0
  893. data/app/views/ui/_sheet.html.erb +18 -0
  894. data/app/views/ui/_skeleton.html.erb +19 -0
  895. data/app/views/ui/_slider.html.erb +27 -0
  896. data/app/views/ui/_small.html.erb +19 -0
  897. data/app/views/ui/_spinner.html.erb +28 -0
  898. data/app/views/ui/_switch.html.erb +45 -0
  899. data/app/views/ui/_table.html.erb +18 -0
  900. data/app/views/ui/_tabs.html.erb +23 -0
  901. data/app/views/ui/_textarea.html.erb +16 -0
  902. data/app/views/ui/_toggle.html.erb +27 -0
  903. data/app/views/ui/_toggle_group.html.erb +38 -0
  904. data/app/views/ui/_tooltip.html.erb +13 -0
  905. data/app/views/ui/accordion/_content.html.erb +21 -0
  906. data/app/views/ui/accordion/_item.html.erb +21 -0
  907. data/app/views/ui/accordion/_trigger.html.erb +23 -0
  908. data/app/views/ui/alert/_description.html.erb +13 -0
  909. data/app/views/ui/alert/_title.html.erb +13 -0
  910. data/app/views/ui/avatar/_fallback.html.erb +13 -0
  911. data/app/views/ui/avatar/_image.html.erb +18 -0
  912. data/app/views/ui/breadcrumb/_ellipsis.html.erb +26 -0
  913. data/app/views/ui/breadcrumb/_item.html.erb +14 -0
  914. data/app/views/ui/breadcrumb/_link.html.erb +16 -0
  915. data/app/views/ui/breadcrumb/_list.html.erb +14 -0
  916. data/app/views/ui/breadcrumb/_page.html.erb +15 -0
  917. data/app/views/ui/breadcrumb/_separator.html.erb +23 -0
  918. data/app/views/ui/button_group/_separator.html.erb +19 -0
  919. data/app/views/ui/button_group/_text.html.erb +16 -0
  920. data/app/views/ui/card/_action.html.erb +18 -0
  921. data/app/views/ui/card/_content.html.erb +18 -0
  922. data/app/views/ui/card/_description.html.erb +20 -0
  923. data/app/views/ui/card/_footer.html.erb +18 -0
  924. data/app/views/ui/card/_header.html.erb +18 -0
  925. data/app/views/ui/card/_title.html.erb +20 -0
  926. data/app/views/ui/carousel/_content.html.erb +16 -0
  927. data/app/views/ui/carousel/_item.html.erb +14 -0
  928. data/app/views/ui/carousel/_next.html.erb +13 -0
  929. data/app/views/ui/carousel/_previous.html.erb +13 -0
  930. data/app/views/ui/collapsible/_content.html.erb +20 -0
  931. data/app/views/ui/collapsible/_trigger.html.erb +18 -0
  932. data/app/views/ui/combobox/_wrapper.html.erb +43 -0
  933. data/app/views/ui/command/_dialog.html.erb +17 -0
  934. data/app/views/ui/command/_empty.html.erb +19 -0
  935. data/app/views/ui/command/_group.html.erb +23 -0
  936. data/app/views/ui/command/_input.html.erb +20 -0
  937. data/app/views/ui/command/_item.html.erb +21 -0
  938. data/app/views/ui/command/_list.html.erb +17 -0
  939. data/app/views/ui/command/_separator.html.erb +15 -0
  940. data/app/views/ui/command/_shortcut.html.erb +19 -0
  941. data/app/views/ui/context_menu/_checkbox_item.html.erb +23 -0
  942. data/app/views/ui/context_menu/_content.html.erb +15 -0
  943. data/app/views/ui/context_menu/_item.html.erb +19 -0
  944. data/app/views/ui/context_menu/_label.html.erb +16 -0
  945. data/app/views/ui/context_menu/_radio_group.html.erb +14 -0
  946. data/app/views/ui/context_menu/_radio_item.html.erb +23 -0
  947. data/app/views/ui/context_menu/_separator.html.erb +12 -0
  948. data/app/views/ui/context_menu/_shortcut.html.erb +15 -0
  949. data/app/views/ui/context_menu/_trigger.html.erb +14 -0
  950. data/app/views/ui/date_picker/_input.html.erb +47 -0
  951. data/app/views/ui/date_picker/_trigger.html.erb +53 -0
  952. data/app/views/ui/dialog/_close.html.erb +24 -0
  953. data/app/views/ui/dialog/_content.html.erb +22 -0
  954. data/app/views/ui/dialog/_description.html.erb +14 -0
  955. data/app/views/ui/dialog/_footer.html.erb +14 -0
  956. data/app/views/ui/dialog/_header.html.erb +14 -0
  957. data/app/views/ui/dialog/_overlay.html.erb +19 -0
  958. data/app/views/ui/dialog/_title.html.erb +14 -0
  959. data/app/views/ui/dialog/_trigger.html.erb +24 -0
  960. data/app/views/ui/drawer/_close.html.erb +17 -0
  961. data/app/views/ui/drawer/_content.html.erb +31 -0
  962. data/app/views/ui/drawer/_description.html.erb +15 -0
  963. data/app/views/ui/drawer/_footer.html.erb +15 -0
  964. data/app/views/ui/drawer/_handle.html.erb +12 -0
  965. data/app/views/ui/drawer/_header.html.erb +15 -0
  966. data/app/views/ui/drawer/_overlay.html.erb +16 -0
  967. data/app/views/ui/drawer/_title.html.erb +15 -0
  968. data/app/views/ui/drawer/_trigger.html.erb +25 -0
  969. data/app/views/ui/dropdown_menu/_checkbox_item.html.erb +24 -0
  970. data/app/views/ui/dropdown_menu/_content.html.erb +15 -0
  971. data/app/views/ui/dropdown_menu/_item.html.erb +24 -0
  972. data/app/views/ui/dropdown_menu/_label.html.erb +16 -0
  973. data/app/views/ui/dropdown_menu/_radio_group.html.erb +15 -0
  974. data/app/views/ui/dropdown_menu/_radio_item.html.erb +27 -0
  975. data/app/views/ui/dropdown_menu/_separator.html.erb +12 -0
  976. data/app/views/ui/dropdown_menu/_shortcut.html.erb +15 -0
  977. data/app/views/ui/dropdown_menu/_sub.html.erb +14 -0
  978. data/app/views/ui/dropdown_menu/_sub_content.html.erb +17 -0
  979. data/app/views/ui/dropdown_menu/_sub_trigger.html.erb +17 -0
  980. data/app/views/ui/dropdown_menu/_trigger.html.erb +20 -0
  981. data/app/views/ui/empty/_content.html.erb +13 -0
  982. data/app/views/ui/empty/_description.html.erb +13 -0
  983. data/app/views/ui/empty/_header.html.erb +13 -0
  984. data/app/views/ui/empty/_media.html.erb +14 -0
  985. data/app/views/ui/empty/_title.html.erb +13 -0
  986. data/app/views/ui/field/_content.html.erb +14 -0
  987. data/app/views/ui/field/_description.html.erb +15 -0
  988. data/app/views/ui/field/_error.html.erb +15 -0
  989. data/app/views/ui/field/_group.html.erb +14 -0
  990. data/app/views/ui/field/_label.html.erb +15 -0
  991. data/app/views/ui/field/_legend.html.erb +16 -0
  992. data/app/views/ui/field/_separator.html.erb +15 -0
  993. data/app/views/ui/field/_set.html.erb +14 -0
  994. data/app/views/ui/field/_title.html.erb +15 -0
  995. data/app/views/ui/hover_card/_content.html.erb +16 -0
  996. data/app/views/ui/hover_card/_trigger.html.erb +27 -0
  997. data/app/views/ui/input_group/_addon.html.erb +15 -0
  998. data/app/views/ui/input_group/_button.html.erb +18 -0
  999. data/app/views/ui/input_group/_input.html.erb +17 -0
  1000. data/app/views/ui/input_group/_text.html.erb +15 -0
  1001. data/app/views/ui/input_group/_textarea.html.erb +17 -0
  1002. data/app/views/ui/input_otp/_group.html.erb +20 -0
  1003. data/app/views/ui/input_otp/_separator.html.erb +22 -0
  1004. data/app/views/ui/input_otp/_slot.html.erb +28 -0
  1005. data/app/views/ui/item/_actions.html.erb +7 -0
  1006. data/app/views/ui/item/_content.html.erb +7 -0
  1007. data/app/views/ui/item/_description.html.erb +7 -0
  1008. data/app/views/ui/item/_footer.html.erb +7 -0
  1009. data/app/views/ui/item/_group.html.erb +7 -0
  1010. data/app/views/ui/item/_header.html.erb +7 -0
  1011. data/app/views/ui/item/_media.html.erb +8 -0
  1012. data/app/views/ui/item/_separator.html.erb +5 -0
  1013. data/app/views/ui/item/_title.html.erb +7 -0
  1014. data/app/views/ui/kbd/_group.html.erb +14 -0
  1015. data/app/views/ui/menubar/_checkbox_item.html.erb +24 -0
  1016. data/app/views/ui/menubar/_content.html.erb +18 -0
  1017. data/app/views/ui/menubar/_item.html.erb +24 -0
  1018. data/app/views/ui/menubar/_label.html.erb +16 -0
  1019. data/app/views/ui/menubar/_menu.html.erb +14 -0
  1020. data/app/views/ui/menubar/_radio_group.html.erb +16 -0
  1021. data/app/views/ui/menubar/_radio_item.html.erb +25 -0
  1022. data/app/views/ui/menubar/_separator.html.erb +12 -0
  1023. data/app/views/ui/menubar/_shortcut.html.erb +15 -0
  1024. data/app/views/ui/menubar/_sub.html.erb +15 -0
  1025. data/app/views/ui/menubar/_sub_content.html.erb +15 -0
  1026. data/app/views/ui/menubar/_sub_trigger.html.erb +20 -0
  1027. data/app/views/ui/menubar/_trigger.html.erb +15 -0
  1028. data/app/views/ui/navigation_menu/_content.html.erb +13 -0
  1029. data/app/views/ui/navigation_menu/_item.html.erb +13 -0
  1030. data/app/views/ui/navigation_menu/_link.html.erb +33 -0
  1031. data/app/views/ui/navigation_menu/_list.html.erb +12 -0
  1032. data/app/views/ui/navigation_menu/_trigger.html.erb +30 -0
  1033. data/app/views/ui/navigation_menu/_viewport.html.erb +13 -0
  1034. data/app/views/ui/pagination/_content.html.erb +14 -0
  1035. data/app/views/ui/pagination/_ellipsis.html.erb +19 -0
  1036. data/app/views/ui/pagination/_item.html.erb +14 -0
  1037. data/app/views/ui/pagination/_link.html.erb +18 -0
  1038. data/app/views/ui/pagination/_next.html.erb +19 -0
  1039. data/app/views/ui/pagination/_previous.html.erb +19 -0
  1040. data/app/views/ui/popover/_content.html.erb +14 -0
  1041. data/app/views/ui/popover/_trigger.html.erb +15 -0
  1042. data/app/views/ui/resizable/_handle.html.erb +22 -0
  1043. data/app/views/ui/resizable/_panel.html.erb +21 -0
  1044. data/app/views/ui/resizable/_panel_group.html.erb +20 -0
  1045. data/app/views/ui/scroll_area/_corner.html.erb +40 -0
  1046. data/app/views/ui/scroll_area/_scrollbar.html.erb +50 -0
  1047. data/app/views/ui/scroll_area/_thumb.html.erb +44 -0
  1048. data/app/views/ui/scroll_area/_viewport.html.erb +47 -0
  1049. data/app/views/ui/select/_content.html.erb +25 -0
  1050. data/app/views/ui/select/_group.html.erb +42 -0
  1051. data/app/views/ui/select/_item.html.erb +48 -0
  1052. data/app/views/ui/select/_label.html.erb +42 -0
  1053. data/app/views/ui/select/_scroll_down_button.html.erb +44 -0
  1054. data/app/views/ui/select/_scroll_up_button.html.erb +44 -0
  1055. data/app/views/ui/select/_trigger.html.erb +43 -0
  1056. data/app/views/ui/sheet/_close.html.erb +24 -0
  1057. data/app/views/ui/sheet/_content.html.erb +30 -0
  1058. data/app/views/ui/sheet/_description.html.erb +14 -0
  1059. data/app/views/ui/sheet/_footer.html.erb +14 -0
  1060. data/app/views/ui/sheet/_header.html.erb +14 -0
  1061. data/app/views/ui/sheet/_overlay.html.erb +19 -0
  1062. data/app/views/ui/sheet/_title.html.erb +14 -0
  1063. data/app/views/ui/sheet/_trigger.html.erb +21 -0
  1064. data/app/views/ui/slider/_range.html.erb +13 -0
  1065. data/app/views/ui/slider/_thumb.html.erb +14 -0
  1066. data/app/views/ui/slider/_track.html.erb +16 -0
  1067. data/app/views/ui/sonner/_toaster.html.erb +38 -0
  1068. data/app/views/ui/table/_body.html.erb +18 -0
  1069. data/app/views/ui/table/_caption.html.erb +18 -0
  1070. data/app/views/ui/table/_cell.html.erb +18 -0
  1071. data/app/views/ui/table/_footer.html.erb +18 -0
  1072. data/app/views/ui/table/_head.html.erb +18 -0
  1073. data/app/views/ui/table/_header.html.erb +18 -0
  1074. data/app/views/ui/table/_row.html.erb +18 -0
  1075. data/app/views/ui/tabs/_content.html.erb +19 -0
  1076. data/app/views/ui/tabs/_list.html.erb +16 -0
  1077. data/app/views/ui/tabs/_trigger.html.erb +20 -0
  1078. data/app/views/ui/toggle_group/_item.html.erb +51 -0
  1079. data/app/views/ui/tooltip/_content.html.erb +17 -0
  1080. data/app/views/ui/tooltip/_trigger.html.erb +39 -0
  1081. data/config/importmap.rb +6 -0
  1082. data/config/routes.rb +3 -0
  1083. data/lib/fernandes-ui.rb +12 -0
  1084. data/lib/generators/ui/install/install_generator.rb +141 -0
  1085. data/lib/generators/ui/install/templates/Procfile.dev +2 -0
  1086. data/lib/generators/ui/install/templates/application.tailwind.css +32 -0
  1087. data/lib/generators/ui/install/templates/package.json +13 -0
  1088. data/lib/tasks/ui_tasks.rake +4 -0
  1089. data/lib/ui/configuration.rb +54 -0
  1090. data/lib/ui/engine.rb +158 -0
  1091. data/lib/ui/version.rb +3 -0
  1092. data/lib/ui.rb +8 -0
  1093. metadata +1214 -0
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ # ContentComponent - ViewComponent implementation
4
+ #
5
+ # The content that appears on hover.
6
+ # Uses HoverCardContentBehavior for shared styling logic.
7
+ #
8
+ # @example Basic usage
9
+ # <%= render UI::ContentComponent.new { "Hover card content" } %>
10
+ #
11
+ # @example With custom alignment
12
+ # <%= render UI::ContentComponent.new(align: "start", side_offset: 8) do %>
13
+ # Content here
14
+ # <% end %>
15
+ class UI::HoverCardContentComponent < ViewComponent::Base
16
+ include UI::HoverCardContentBehavior
17
+
18
+ # @param align [String] Alignment of the content ("start", "center", "end")
19
+ # @param side_offset [Integer] Distance in pixels from the trigger
20
+ # @param classes [String] Additional CSS classes to merge
21
+ # @param attributes [Hash] Additional HTML attributes
22
+ def initialize(align: "center", side_offset: 4, classes: "", **attributes)
23
+ @align = align
24
+ @side_offset = side_offset
25
+ @classes = classes
26
+ @attributes = attributes
27
+ end
28
+
29
+ def call
30
+ attrs = content_html_attributes
31
+
32
+ content_tag :div, **attrs.merge(@attributes) do
33
+ content
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ # TriggerComponent - ViewComponent implementation
4
+ #
5
+ # Element that triggers the hover card on hover.
6
+ # Uses HoverCardTriggerBehavior for shared styling logic.
7
+ # Supports asChild pattern for composition.
8
+ #
9
+ # @example Basic usage
10
+ # <%= render UI::TriggerComponent.new { "Hover me" } %>
11
+ #
12
+ # @example With asChild - compose with Button (yields attributes)
13
+ # <%= render UI::TriggerComponent.new(as_child: true) do |trigger_attrs| %>
14
+ # <%= render UI::ButtonComponent.new(**trigger_attrs, variant: :link) { "@nextjs" } %>
15
+ # <% end %>
16
+ #
17
+ # @example With custom tag
18
+ # <%= render UI::TriggerComponent.new(tag: :a, href: "#") { "Link" } %>
19
+ class UI::HoverCardTriggerComponent < ViewComponent::Base
20
+ include UI::HoverCardTriggerBehavior
21
+
22
+ # @param as_child [Boolean] If true, yields attributes to block instead of wrapping
23
+ # @param tag [Symbol] HTML tag to use for the trigger (default: :span)
24
+ # @param classes [String] Additional CSS classes to merge
25
+ # @param attributes [Hash] Additional HTML attributes
26
+ def initialize(as_child: false, tag: :span, classes: "", **attributes)
27
+ @as_child = as_child
28
+ @tag = tag
29
+ @classes = classes
30
+ @attributes = attributes
31
+ end
32
+
33
+ # Override render_in to pass trigger_attrs to block when as_child is true
34
+ def render_in(view_context, &block)
35
+ @view_context = view_context
36
+
37
+ if @as_child && block
38
+ # asChild pattern: call the block with trigger attributes
39
+ # Block should use these attrs on the actual trigger element
40
+ view_context.capture(trigger_html_attributes, &block)
41
+ else
42
+ super
43
+ end
44
+ end
45
+
46
+ def call
47
+ # Default: render with full styling and tabindex for keyboard focus
48
+ attrs = trigger_html_attributes.merge(@attributes)
49
+ attrs[:tabindex] ||= "0" if @tag == :span || @tag == :div
50
+ content_tag @tag, **attrs do
51
+ content
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module UI
4
+ class UI::InlineCodeComponent < ViewComponent::Base
5
+ def initialize(classes: nil, **attributes)
6
+ @classes = classes
7
+ @attributes = attributes
8
+ end
9
+
10
+ def call
11
+ extend UI::InlineCodeBehavior
12
+ attrs = inline_code_html_attributes
13
+ content_tag :code, **attrs.merge(@attributes) do
14
+ content
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ class UI::InputComponent < ViewComponent::Base
4
+ include UI::InputBehavior
5
+
6
+ def initialize(type: "text", placeholder: nil, value: nil, name: nil, id: nil, classes: "", **attributes)
7
+ @type = type
8
+ @placeholder = placeholder
9
+ @value = value
10
+ @name = name
11
+ @id = id
12
+ @classes = classes
13
+ @attributes = attributes
14
+ end
15
+
16
+ def call
17
+ tag.input(**input_html_attributes.merge(@attributes))
18
+ end
19
+
20
+ private
21
+
22
+ attr_reader :classes, :attributes
23
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ # InputGroupAddonComponent - ViewComponent implementation
4
+ #
5
+ # An addon element for input groups that can contain text, icons, or other elements.
6
+ # Uses InputGroupAddonBehavior concern for shared styling logic.
7
+ #
8
+ # @example Text addon
9
+ # <%= render UI::InputGroupAddonComponent.new(align: "inline-start") do %>
10
+ # @
11
+ # <% end %>
12
+ #
13
+ # @example Button addon
14
+ # <%= render UI::InputGroupAddonComponent.new(align: "inline-end") do %>
15
+ # <%= render UI::InputGroupButtonComponent.new do %>
16
+ # Submit
17
+ # <% end %>
18
+ # <% end %>
19
+ class UI::InputGroupAddonComponent < ViewComponent::Base
20
+ include UI::InputGroupAddonBehavior
21
+
22
+ # @param align [String] Alignment position: "inline-start", "inline-end", "block-start", "block-end"
23
+ # @param classes [String] Additional CSS classes to merge
24
+ # @param attributes [Hash] Additional HTML attributes
25
+ def initialize(align: "inline-start", classes: "", **attributes)
26
+ @align = align
27
+ @classes = classes
28
+ @attributes = attributes
29
+ end
30
+
31
+ def call
32
+ content_tag :div, **input_group_addon_html_attributes do
33
+ content
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ # InputGroupButtonComponent - ViewComponent implementation
4
+ #
5
+ # A button component specifically styled for use within input groups.
6
+ # Uses InputGroupButtonBehavior concern for shared styling logic.
7
+ #
8
+ # @example Basic button
9
+ # <%= render UI::InputGroupButtonComponent.new do %>
10
+ # Search
11
+ # <% end %>
12
+ #
13
+ # @example Icon button
14
+ # <%= render UI::InputGroupButtonComponent.new(size: "icon-xs") do %>
15
+ # <svg>...</svg>
16
+ # <% end %>
17
+ class UI::InputGroupButtonComponent < ViewComponent::Base
18
+ include UI::InputGroupButtonBehavior
19
+
20
+ # @param size [String] Size variant: "xs", "sm", "icon-xs", "icon-sm"
21
+ # @param variant [String] Button variant (default: "ghost")
22
+ # @param type [String] Button type attribute (default: "button")
23
+ # @param classes [String] Additional CSS classes to merge
24
+ # @param attributes [Hash] Additional HTML attributes
25
+ def initialize(size: "xs", variant: "ghost", type: "button", classes: "", **attributes)
26
+ @size = size
27
+ @variant = variant
28
+ @type = type
29
+ @classes = classes
30
+ @attributes = attributes
31
+ end
32
+
33
+ def call
34
+ render partial: "ui/button", locals: input_group_button_attributes.merge(content: content)
35
+ end
36
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ # InputGroupComponent - ViewComponent implementation
4
+ #
5
+ # A wrapper component for grouping inputs with addons, buttons, and text.
6
+ # Uses InputGroupBehavior concern for shared styling logic.
7
+ #
8
+ # @example Basic usage
9
+ # <%= render UI::InputGroupComponent.new do %>
10
+ # <%= render UI::InputGroupInputComponent.new(placeholder: "Enter text") %>
11
+ # <% end %>
12
+ #
13
+ # @example With addons
14
+ # <%= render UI::InputGroupComponent.new do %>
15
+ # <%= render UI::InputGroupAddonComponent.new(align: "inline-start") do %>
16
+ # @
17
+ # <% end %>
18
+ # <%= render UI::InputGroupInputComponent.new(placeholder: "username") %>
19
+ # <% end %>
20
+ class UI::InputGroupComponent < ViewComponent::Base
21
+ include UI::InputGroupBehavior
22
+
23
+ # @param classes [String] Additional CSS classes to merge
24
+ # @param attributes [Hash] Additional HTML attributes
25
+ def initialize(classes: "", **attributes)
26
+ @classes = classes
27
+ @attributes = attributes
28
+ end
29
+
30
+ def call
31
+ content_tag :div, **input_group_html_attributes do
32
+ content
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ # InputGroupInputComponent - ViewComponent implementation
4
+ #
5
+ # An input element styled for use within input groups.
6
+ # Uses InputGroupInputBehavior concern for shared styling logic.
7
+ #
8
+ # @example Basic input
9
+ # <%= render UI::InputGroupInputComponent.new(
10
+ # placeholder: "Enter text",
11
+ # name: "username"
12
+ # ) %>
13
+ #
14
+ # @example With type
15
+ # <%= render UI::InputGroupInputComponent.new(
16
+ # type: "email",
17
+ # placeholder: "email@example.com"
18
+ # ) %>
19
+ class UI::InputGroupInputComponent < ViewComponent::Base
20
+ include UI::InputGroupInputBehavior
21
+
22
+ # @param type [String] Input type (default: "text")
23
+ # @param placeholder [String] Placeholder text
24
+ # @param value [String] Input value
25
+ # @param name [String] Input name attribute
26
+ # @param id [String] Input id attribute
27
+ # @param classes [String] Additional CSS classes to merge
28
+ # @param attributes [Hash] Additional HTML attributes
29
+ def initialize(type: "text", placeholder: nil, value: nil, name: nil, id: nil, classes: "", **attributes)
30
+ @type = type
31
+ @placeholder = placeholder
32
+ @value = value
33
+ @name = name
34
+ @id = id
35
+ @classes = classes
36
+ @attributes = attributes
37
+ end
38
+
39
+ def call
40
+ render partial: "ui/input", locals: input_group_input_attributes
41
+ end
42
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ # InputGroupTextComponent - ViewComponent implementation
4
+ #
5
+ # A text element for displaying static text within input groups.
6
+ # Uses InputGroupTextBehavior concern for shared styling logic.
7
+ #
8
+ # @example Simple text
9
+ # <%= render UI::InputGroupTextComponent.new do %>
10
+ # @
11
+ # <% end %>
12
+ #
13
+ # @example With icon
14
+ # <%= render UI::InputGroupTextComponent.new do %>
15
+ # <svg class="size-4">...</svg>
16
+ # Username
17
+ # <% end %>
18
+ class UI::InputGroupTextComponent < ViewComponent::Base
19
+ include UI::InputGroupTextBehavior
20
+
21
+ # @param classes [String] Additional CSS classes to merge
22
+ # @param attributes [Hash] Additional HTML attributes
23
+ def initialize(classes: "", **attributes)
24
+ @classes = classes
25
+ @attributes = attributes
26
+ end
27
+
28
+ def call
29
+ content_tag :span, **input_group_text_html_attributes do
30
+ content
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ # InputGroupTextareaComponent - ViewComponent implementation
4
+ #
5
+ # A textarea element styled for use within input groups.
6
+ # Uses InputGroupTextareaBehavior concern for shared styling logic.
7
+ #
8
+ # @example Basic textarea
9
+ # <%= render UI::InputGroupTextareaComponent.new(
10
+ # placeholder: "Enter your message",
11
+ # rows: 3
12
+ # ) %>
13
+ #
14
+ # @example With name
15
+ # <%= render UI::InputGroupTextareaComponent.new(
16
+ # placeholder: "Description",
17
+ # name: "description"
18
+ # ) %>
19
+ class UI::InputGroupTextareaComponent < ViewComponent::Base
20
+ include UI::InputGroupTextareaBehavior
21
+
22
+ # @param placeholder [String] Placeholder text
23
+ # @param value [String] Textarea value
24
+ # @param name [String] Textarea name attribute
25
+ # @param id [String] Textarea id attribute
26
+ # @param rows [Integer] Number of visible text lines
27
+ # @param classes [String] Additional CSS classes to merge
28
+ # @param attributes [Hash] Additional HTML attributes
29
+ def initialize(placeholder: nil, value: nil, name: nil, id: nil, rows: nil, classes: "", **attributes)
30
+ @placeholder = placeholder
31
+ @value = value
32
+ @name = name
33
+ @id = id
34
+ @rows = rows
35
+ @classes = classes
36
+ @attributes = attributes
37
+ end
38
+
39
+ def call
40
+ render partial: "ui/textarea", locals: input_group_textarea_attributes
41
+ end
42
+ end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ # InputOtpComponent - ViewComponent implementation
4
+ #
5
+ # Accessible one-time password container component.
6
+ # Supports both composition (with Group/Slot/Separator) and auto-generation.
7
+ #
8
+ # @example With composition
9
+ # <%= render UI::InputOtpComponent.new(length: 6) do %>
10
+ # <%= render UI::InputOtpGroupComponent.new do %>
11
+ # <%= render UI::InputOtpSlotComponent.new(index: 0) %>
12
+ # <% end %>
13
+ # <% end %>
14
+ #
15
+ # @example Auto-generated
16
+ # <%= render UI::InputOtpComponent.new(length: 6) %>
17
+ class UI::InputOtpComponent < ViewComponent::Base
18
+ include UI::InputOtpBehavior
19
+
20
+ # @param length [Integer] Maximum number of OTP characters
21
+ # @param pattern [String] Regex pattern for valid characters (default: digits only)
22
+ # @param name [String] Form input name
23
+ # @param id [String] HTML id attribute
24
+ # @param disabled [Boolean] Whether inputs are disabled
25
+ # @param classes [String] Additional CSS classes
26
+ # @param attributes [Hash] Additional HTML attributes
27
+ def initialize(length: 6, pattern: "\\d", name: nil, id: nil, disabled: false, classes: "", **attributes)
28
+ @length = length
29
+ @pattern = pattern
30
+ @name = name
31
+ @id = id
32
+ @disabled = disabled
33
+ @classes = classes
34
+ @attributes = attributes
35
+ end
36
+
37
+ def call
38
+ attrs = input_otp_html_attributes
39
+ attrs[:data] = attrs[:data].merge(@attributes.fetch(:data, {}))
40
+
41
+ content_tag :div, **attrs.merge(@attributes.except(:data)) do
42
+ if content.present?
43
+ content
44
+ else
45
+ # Auto-generate inputs wrapped in InputOtpGroupComponent
46
+ render(UI::InputOtpGroupComponent.new) do
47
+ safe_join(
48
+ @length.times.map do |i|
49
+ render(UI::InputOtpSlotComponent.new(
50
+ index: i,
51
+ name: @name ? "#{@name}[#{i}]" : nil,
52
+ id: @id ? "#{@id}_#{i}" : nil,
53
+ disabled: @disabled
54
+ ))
55
+ end
56
+ )
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ # GroupComponent - ViewComponent implementation
4
+ #
5
+ # Container for grouping OTP input slots together visually.
6
+ #
7
+ # @example
8
+ # <%= render UI::GroupComponent.new do %>
9
+ # <%= render UI::SlotComponent.new(index: 0) %>
10
+ # <%= render UI::SlotComponent.new(index: 1) %>
11
+ # <% end %>
12
+ class UI::InputOtpGroupComponent < ViewComponent::Base
13
+ include UI::InputOtpGroupBehavior
14
+
15
+ # @param classes [String] Additional CSS classes
16
+ # @param attributes [Hash] Additional HTML attributes
17
+ def initialize(classes: "", **attributes)
18
+ @classes = classes
19
+ @attributes = attributes
20
+ end
21
+
22
+ def call
23
+ attrs = input_otp_group_html_attributes
24
+
25
+ content_tag :div, **attrs.merge(@attributes) do
26
+ content
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ # SeparatorComponent - ViewComponent implementation
4
+ #
5
+ # Visual divider between OTP input groups.
6
+ #
7
+ # @example
8
+ # <%= render UI::SeparatorComponent.new %>
9
+ class UI::InputOtpSeparatorComponent < ViewComponent::Base
10
+ include UI::InputOtpSeparatorBehavior
11
+
12
+ # @param classes [String] Additional CSS classes
13
+ # @param attributes [Hash] Additional HTML attributes
14
+ def initialize(classes: "", **attributes)
15
+ @classes = classes
16
+ @attributes = attributes
17
+ end
18
+
19
+ def call
20
+ attrs = input_otp_separator_html_attributes
21
+
22
+ content_tag :div, **attrs.merge(@attributes) do
23
+ # Render dot or dash separator
24
+ content_tag :svg,
25
+ nil,
26
+ xmlns: "http://www.w3.org/2000/svg",
27
+ width: "15",
28
+ height: "15",
29
+ viewBox: "0 0 15 15",
30
+ fill: "none",
31
+ class: "size-4 opacity-50" do
32
+ tag.rect(x: "4", y: "7", width: "7", height: "1", fill: "currentColor", rx: "0.5")
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ # SlotComponent - ViewComponent implementation
4
+ #
5
+ # Individual OTP input slot for a single character.
6
+ #
7
+ # @example
8
+ # <%= render UI::SlotComponent.new(index: 0, value: "1") %>
9
+ class UI::InputOtpSlotComponent < ViewComponent::Base
10
+ include UI::InputOtpSlotBehavior
11
+
12
+ # @param index [Integer] Index of the slot in the OTP sequence
13
+ # @param value [String] Character value to display in the slot
14
+ # @param name [String] Form input name
15
+ # @param id [String] HTML id attribute
16
+ # @param disabled [Boolean] Whether input is disabled
17
+ # @param classes [String] Additional CSS classes
18
+ # @param attributes [Hash] Additional HTML attributes
19
+ def initialize(index: 0, value: "", name: nil, id: nil, disabled: false, classes: "", **attributes)
20
+ @index = index
21
+ @value = value
22
+ @name = name
23
+ @id = id
24
+ @disabled = disabled
25
+ @classes = classes
26
+ @attributes = attributes
27
+ end
28
+
29
+ def call
30
+ tag.input(**input_otp_slot_html_attributes.merge(@attributes))
31
+ end
32
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ class UI::ItemActionsComponent < ViewComponent::Base
4
+ include UI::ItemActionsBehavior
5
+
6
+ def initialize(classes: "", **attributes)
7
+ @classes = classes
8
+ @attributes = attributes
9
+ end
10
+
11
+ def call
12
+ content_tag :div, content, **item_actions_html_attributes
13
+ end
14
+
15
+ private
16
+
17
+ attr_reader :classes, :attributes
18
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ class UI::ItemComponent < ViewComponent::Base
4
+ include UI::ItemBehavior
5
+ include UI::SharedAsChildBehavior
6
+
7
+ def initialize(variant: "default", size: "default", as_child: false, classes: "", **attributes)
8
+ @variant = variant
9
+ @size = size
10
+ @as_child = as_child
11
+ @classes = classes
12
+ @attributes = attributes
13
+ end
14
+
15
+ def call
16
+ item_attrs = item_html_attributes.merge(@attributes)
17
+
18
+ if @as_child
19
+ # Yield attributes to block - child element will receive them
20
+ yield(item_attrs) if block_given?
21
+ else
22
+ # Default: render as div
23
+ content_tag :div, content, **item_attrs
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ attr_reader :variant, :size, :as_child, :classes, :attributes
30
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ class UI::ItemContentComponent < ViewComponent::Base
4
+ include UI::ItemContentBehavior
5
+
6
+ def initialize(classes: "", **attributes)
7
+ @classes = classes
8
+ @attributes = attributes
9
+ end
10
+
11
+ def call
12
+ content_tag :div, content, **item_content_html_attributes
13
+ end
14
+
15
+ private
16
+
17
+ attr_reader :classes, :attributes
18
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ class UI::ItemDescriptionComponent < ViewComponent::Base
4
+ include UI::ItemDescriptionBehavior
5
+
6
+ def initialize(classes: "", **attributes)
7
+ @classes = classes
8
+ @attributes = attributes
9
+ end
10
+
11
+ def call
12
+ content_tag :p, content, **item_description_html_attributes
13
+ end
14
+
15
+ private
16
+
17
+ attr_reader :classes, :attributes
18
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ class UI::ItemFooterComponent < ViewComponent::Base
4
+ include UI::ItemFooterBehavior
5
+
6
+ def initialize(classes: "", **attributes)
7
+ @classes = classes
8
+ @attributes = attributes
9
+ end
10
+
11
+ def call
12
+ content_tag :div, content, **item_footer_html_attributes
13
+ end
14
+
15
+ private
16
+
17
+ attr_reader :classes, :attributes
18
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ class UI::ItemGroupComponent < ViewComponent::Base
4
+ include UI::ItemGroupBehavior
5
+
6
+ def initialize(classes: "", **attributes)
7
+ @classes = classes
8
+ @attributes = attributes
9
+ end
10
+
11
+ def call
12
+ content_tag :div, content, **item_group_html_attributes
13
+ end
14
+
15
+ private
16
+
17
+ attr_reader :classes, :attributes
18
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ class UI::ItemHeaderComponent < ViewComponent::Base
4
+ include UI::ItemHeaderBehavior
5
+
6
+ def initialize(classes: "", **attributes)
7
+ @classes = classes
8
+ @attributes = attributes
9
+ end
10
+
11
+ def call
12
+ content_tag :div, content, **item_header_html_attributes
13
+ end
14
+
15
+ private
16
+
17
+ attr_reader :classes, :attributes
18
+ end