fernandes-ui 0.1.0 → 0.1.2

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 (785) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +68 -61
  3. data/app/assets/javascripts/ui.esm.js +12 -3
  4. data/app/assets/javascripts/ui.js +12 -3
  5. data/app/assets/stylesheets/ui/application.css +621 -3
  6. data/app/behaviors/ui/accordion_behavior.rb +50 -26
  7. data/app/behaviors/ui/accordion_content_behavior.rb +58 -58
  8. data/app/behaviors/ui/accordion_item_behavior.rb +38 -38
  9. data/app/behaviors/ui/accordion_trigger_behavior.rb +65 -65
  10. data/app/behaviors/ui/alert_behavior.rb +53 -36
  11. data/app/behaviors/ui/alert_description_behavior.rb +25 -25
  12. data/app/behaviors/ui/alert_dialog_action_behavior.rb +21 -21
  13. data/app/behaviors/ui/alert_dialog_behavior.rb +58 -33
  14. data/app/behaviors/ui/alert_dialog_cancel_behavior.rb +21 -21
  15. data/app/behaviors/ui/alert_dialog_content_behavior.rb +34 -34
  16. data/app/behaviors/ui/alert_dialog_description_behavior.rb +19 -19
  17. data/app/behaviors/ui/alert_dialog_footer_behavior.rb +20 -20
  18. data/app/behaviors/ui/alert_dialog_header_behavior.rb +19 -19
  19. data/app/behaviors/ui/alert_dialog_overlay_behavior.rb +56 -56
  20. data/app/behaviors/ui/alert_dialog_title_behavior.rb +19 -19
  21. data/app/behaviors/ui/alert_dialog_trigger_behavior.rb +31 -31
  22. data/app/behaviors/ui/alert_title_behavior.rb +25 -25
  23. data/app/behaviors/ui/aspect_ratio_behavior.rb +46 -38
  24. data/app/behaviors/ui/avatar_behavior.rb +44 -37
  25. data/app/behaviors/ui/avatar_fallback_behavior.rb +37 -37
  26. data/app/behaviors/ui/avatar_image_behavior.rb +40 -40
  27. data/app/behaviors/ui/badge_behavior.rb +50 -43
  28. data/app/behaviors/ui/blockquote_behavior.rb +25 -17
  29. data/app/behaviors/ui/breadcrumb_behavior.rb +35 -19
  30. data/app/behaviors/ui/breadcrumb_ellipsis_behavior.rb +28 -28
  31. data/app/behaviors/ui/breadcrumb_item_behavior.rb +26 -26
  32. data/app/behaviors/ui/breadcrumb_link_behavior.rb +27 -27
  33. data/app/behaviors/ui/breadcrumb_list_behavior.rb +26 -26
  34. data/app/behaviors/ui/breadcrumb_page_behavior.rb +29 -29
  35. data/app/behaviors/ui/breadcrumb_separator_behavior.rb +28 -28
  36. data/app/behaviors/ui/button_behavior.rb +94 -82
  37. data/app/behaviors/ui/button_group_behavior.rb +48 -48
  38. data/app/behaviors/ui/button_group_separator_behavior.rb +29 -29
  39. data/app/behaviors/ui/button_group_text_behavior.rb +29 -29
  40. data/app/behaviors/ui/calendar_behavior.rb +131 -104
  41. data/app/behaviors/ui/card_action_behavior.rb +26 -26
  42. data/app/behaviors/ui/card_behavior.rb +40 -26
  43. data/app/behaviors/ui/card_content_behavior.rb +26 -26
  44. data/app/behaviors/ui/card_description_behavior.rb +26 -26
  45. data/app/behaviors/ui/card_footer_behavior.rb +26 -26
  46. data/app/behaviors/ui/card_header_behavior.rb +26 -26
  47. data/app/behaviors/ui/card_title_behavior.rb +26 -26
  48. data/app/behaviors/ui/carousel_behavior.rb +74 -48
  49. data/app/behaviors/ui/carousel_content_behavior.rb +53 -53
  50. data/app/behaviors/ui/carousel_item_behavior.rb +20 -20
  51. data/app/behaviors/ui/carousel_next_behavior.rb +31 -31
  52. data/app/behaviors/ui/carousel_previous_behavior.rb +31 -31
  53. data/app/behaviors/ui/checkbox_behavior.rb +54 -38
  54. data/app/behaviors/ui/collapsible_behavior.rb +49 -34
  55. data/app/behaviors/ui/collapsible_content_behavior.rb +31 -31
  56. data/app/behaviors/ui/collapsible_trigger_behavior.rb +47 -47
  57. data/app/behaviors/ui/command_behavior.rb +56 -29
  58. data/app/behaviors/ui/command_dialog_behavior.rb +52 -28
  59. data/app/behaviors/ui/command_empty_behavior.rb +28 -28
  60. data/app/behaviors/ui/command_group_behavior.rb +34 -34
  61. data/app/behaviors/ui/command_input_behavior.rb +40 -40
  62. data/app/behaviors/ui/command_item_behavior.rb +39 -39
  63. data/app/behaviors/ui/command_list_behavior.rb +30 -30
  64. data/app/behaviors/ui/command_separator_behavior.rb +23 -23
  65. data/app/behaviors/ui/command_shortcut_behavior.rb +22 -22
  66. data/app/behaviors/ui/context_menu_behavior.rb +55 -28
  67. data/app/behaviors/ui/context_menu_checkbox_item_behavior.rb +32 -32
  68. data/app/behaviors/ui/context_menu_content_behavior.rb +32 -32
  69. data/app/behaviors/ui/context_menu_item_behavior.rb +34 -34
  70. data/app/behaviors/ui/context_menu_label_behavior.rb +28 -28
  71. data/app/behaviors/ui/context_menu_radio_group_behavior.rb +17 -17
  72. data/app/behaviors/ui/context_menu_radio_item_behavior.rb +32 -32
  73. data/app/behaviors/ui/context_menu_separator_behavior.rb +18 -18
  74. data/app/behaviors/ui/context_menu_shortcut_behavior.rb +17 -17
  75. data/app/behaviors/ui/context_menu_trigger_behavior.rb +28 -28
  76. data/app/behaviors/ui/date_picker_behavior.rb +95 -78
  77. data/app/behaviors/ui/date_picker_input_behavior.rb +56 -56
  78. data/app/behaviors/ui/date_picker_trigger_behavior.rb +56 -56
  79. data/app/behaviors/ui/dialog_behavior.rb +67 -42
  80. data/app/behaviors/ui/dialog_content_behavior.rb +38 -38
  81. data/app/behaviors/ui/dialog_footer_behavior.rb +20 -20
  82. data/app/behaviors/ui/dialog_header_behavior.rb +20 -20
  83. data/app/behaviors/ui/dialog_overlay_behavior.rb +57 -57
  84. data/app/behaviors/ui/drawer_behavior.rb +79 -52
  85. data/app/behaviors/ui/drawer_close_behavior.rb +8 -8
  86. data/app/behaviors/ui/drawer_content_behavior.rb +90 -90
  87. data/app/behaviors/ui/drawer_description_behavior.rb +17 -17
  88. data/app/behaviors/ui/drawer_footer_behavior.rb +17 -17
  89. data/app/behaviors/ui/drawer_handle_behavior.rb +33 -33
  90. data/app/behaviors/ui/drawer_header_behavior.rb +23 -23
  91. data/app/behaviors/ui/drawer_overlay_behavior.rb +63 -63
  92. data/app/behaviors/ui/drawer_title_behavior.rb +20 -20
  93. data/app/behaviors/ui/drawer_trigger_behavior.rb +15 -15
  94. data/app/behaviors/ui/dropdown_menu_behavior.rb +59 -37
  95. data/app/behaviors/ui/dropdown_menu_checkbox_item_behavior.rb +37 -39
  96. data/app/behaviors/ui/dropdown_menu_content_behavior.rb +32 -32
  97. data/app/behaviors/ui/dropdown_menu_item_behavior.rb +34 -34
  98. data/app/behaviors/ui/dropdown_menu_label_behavior.rb +25 -25
  99. data/app/behaviors/ui/dropdown_menu_radio_group_behavior.rb +17 -17
  100. data/app/behaviors/ui/dropdown_menu_radio_item_behavior.rb +37 -39
  101. data/app/behaviors/ui/dropdown_menu_separator_behavior.rb +19 -19
  102. data/app/behaviors/ui/dropdown_menu_shortcut_behavior.rb +17 -17
  103. data/app/behaviors/ui/dropdown_menu_sub_behavior.rb +17 -17
  104. data/app/behaviors/ui/dropdown_menu_sub_content_behavior.rb +33 -33
  105. data/app/behaviors/ui/dropdown_menu_sub_trigger_behavior.rb +30 -30
  106. data/app/behaviors/ui/dropdown_menu_trigger_behavior.rb +39 -39
  107. data/app/behaviors/ui/empty_behavior.rb +111 -100
  108. data/app/behaviors/ui/field_behavior.rb +51 -37
  109. data/app/behaviors/ui/field_content_behavior.rb +18 -20
  110. data/app/behaviors/ui/field_description_behavior.rb +18 -20
  111. data/app/behaviors/ui/field_error_behavior.rb +42 -37
  112. data/app/behaviors/ui/field_group_behavior.rb +18 -20
  113. data/app/behaviors/ui/field_label_behavior.rb +19 -21
  114. data/app/behaviors/ui/field_legend_behavior.rb +26 -22
  115. data/app/behaviors/ui/field_separator_behavior.rb +24 -26
  116. data/app/behaviors/ui/field_set_behavior.rb +24 -20
  117. data/app/behaviors/ui/field_title_behavior.rb +18 -20
  118. data/app/behaviors/ui/h1_behavior.rb +25 -17
  119. data/app/behaviors/ui/h2_behavior.rb +25 -17
  120. data/app/behaviors/ui/h3_behavior.rb +25 -17
  121. data/app/behaviors/ui/h4_behavior.rb +25 -17
  122. data/app/behaviors/ui/hover_card_behavior.rb +41 -25
  123. data/app/behaviors/ui/hover_card_content_behavior.rb +35 -35
  124. data/app/behaviors/ui/hover_card_trigger_behavior.rb +38 -38
  125. data/app/behaviors/ui/inline_code_behavior.rb +25 -17
  126. data/app/behaviors/ui/input_behavior.rb +52 -42
  127. data/app/behaviors/ui/input_group_addon_behavior.rb +9 -2
  128. data/app/behaviors/ui/input_group_button_behavior.rb +9 -2
  129. data/app/behaviors/ui/input_group_input_behavior.rb +1 -1
  130. data/app/behaviors/ui/input_group_textarea_behavior.rb +9 -3
  131. data/app/behaviors/ui/input_otp_behavior.rb +50 -36
  132. data/app/behaviors/ui/input_otp_group_behavior.rb +25 -25
  133. data/app/behaviors/ui/input_otp_separator_behavior.rb +26 -26
  134. data/app/behaviors/ui/input_otp_slot_behavior.rb +49 -41
  135. data/app/behaviors/ui/item_actions_behavior.rb +32 -26
  136. data/app/behaviors/ui/item_behavior.rb +100 -87
  137. data/app/behaviors/ui/item_content_behavior.rb +27 -26
  138. data/app/behaviors/ui/item_description_behavior.rb +27 -26
  139. data/app/behaviors/ui/item_footer_behavior.rb +27 -26
  140. data/app/behaviors/ui/item_group_behavior.rb +27 -26
  141. data/app/behaviors/ui/item_header_behavior.rb +27 -26
  142. data/app/behaviors/ui/item_media_behavior.rb +47 -41
  143. data/app/behaviors/ui/item_separator_behavior.rb +27 -26
  144. data/app/behaviors/ui/item_title_behavior.rb +27 -26
  145. data/app/behaviors/ui/kbd_behavior.rb +28 -22
  146. data/app/behaviors/ui/kbd_group_behavior.rb +18 -20
  147. data/app/behaviors/ui/label_behavior.rb +35 -26
  148. data/app/behaviors/ui/large_behavior.rb +25 -17
  149. data/app/behaviors/ui/lead_behavior.rb +25 -17
  150. data/app/behaviors/ui/list_behavior.rb +25 -17
  151. data/app/behaviors/ui/menubar_behavior.rb +73 -35
  152. data/app/behaviors/ui/menubar_checkbox_item_behavior.rb +54 -54
  153. data/app/behaviors/ui/menubar_content_behavior.rb +46 -46
  154. data/app/behaviors/ui/menubar_item_behavior.rb +63 -63
  155. data/app/behaviors/ui/menubar_label_behavior.rb +33 -33
  156. data/app/behaviors/ui/menubar_menu_behavior.rb +37 -33
  157. data/app/behaviors/ui/menubar_radio_group_behavior.rb +28 -28
  158. data/app/behaviors/ui/menubar_radio_item_behavior.rb +59 -59
  159. data/app/behaviors/ui/menubar_separator_behavior.rb +26 -26
  160. data/app/behaviors/ui/menubar_shortcut_behavior.rb +25 -25
  161. data/app/behaviors/ui/menubar_sub_behavior.rb +26 -26
  162. data/app/behaviors/ui/menubar_sub_content_behavior.rb +44 -44
  163. data/app/behaviors/ui/menubar_sub_trigger_behavior.rb +55 -55
  164. data/app/behaviors/ui/menubar_trigger_behavior.rb +40 -42
  165. data/app/behaviors/ui/muted_behavior.rb +25 -17
  166. data/app/behaviors/ui/navigation_menu_behavior.rb +65 -36
  167. data/app/behaviors/ui/navigation_menu_content_behavior.rb +58 -59
  168. data/app/behaviors/ui/navigation_menu_item_behavior.rb +31 -32
  169. data/app/behaviors/ui/navigation_menu_link_behavior.rb +57 -57
  170. data/app/behaviors/ui/navigation_menu_list_behavior.rb +28 -29
  171. data/app/behaviors/ui/navigation_menu_trigger_behavior.rb +50 -51
  172. data/app/behaviors/ui/navigation_menu_viewport_behavior.rb +54 -55
  173. data/app/behaviors/ui/p_behavior.rb +25 -17
  174. data/app/behaviors/ui/pagination_behavior.rb +36 -22
  175. data/app/behaviors/ui/pagination_content_behavior.rb +20 -20
  176. data/app/behaviors/ui/pagination_ellipsis_behavior.rb +21 -21
  177. data/app/behaviors/ui/pagination_item_behavior.rb +11 -11
  178. data/app/behaviors/ui/pagination_link_behavior.rb +51 -51
  179. data/app/behaviors/ui/pagination_next_behavior.rb +16 -16
  180. data/app/behaviors/ui/pagination_previous_behavior.rb +16 -16
  181. data/app/behaviors/ui/popover_behavior.rb +22 -3
  182. data/app/behaviors/ui/popover_content_behavior.rb +1 -1
  183. data/app/behaviors/ui/popover_trigger_behavior.rb +1 -1
  184. data/app/behaviors/ui/progress_behavior.rb +59 -40
  185. data/app/behaviors/ui/radio_button_behavior.rb +51 -36
  186. data/app/behaviors/ui/resizable_handle_behavior.rb +73 -73
  187. data/app/behaviors/ui/resizable_panel_behavior.rb +52 -45
  188. data/app/behaviors/ui/resizable_panel_group_behavior.rb +36 -36
  189. data/app/behaviors/ui/responsive_dialog_behavior.rb +43 -33
  190. data/app/behaviors/ui/scroll_area_behavior.rb +17 -2
  191. data/app/behaviors/ui/scroll_area_corner_behavior.rb +8 -2
  192. data/app/behaviors/ui/scroll_area_scrollbar_behavior.rb +8 -2
  193. data/app/behaviors/ui/scroll_area_thumb_behavior.rb +8 -2
  194. data/app/behaviors/ui/select_behavior.rb +111 -61
  195. data/app/behaviors/ui/select_content_behavior.rb +31 -31
  196. data/app/behaviors/ui/select_group_behavior.rb +24 -24
  197. data/app/behaviors/ui/select_item_behavior.rb +34 -34
  198. data/app/behaviors/ui/select_label_behavior.rb +23 -23
  199. data/app/behaviors/ui/select_scroll_down_button_behavior.rb +38 -38
  200. data/app/behaviors/ui/select_scroll_up_button_behavior.rb +38 -38
  201. data/app/behaviors/ui/select_trigger_behavior.rb +29 -29
  202. data/app/behaviors/ui/separator_behavior.rb +53 -49
  203. data/app/behaviors/ui/shared_as_child_behavior.rb +63 -63
  204. data/app/behaviors/ui/sheet_behavior.rb +63 -42
  205. data/app/behaviors/ui/sheet_content_behavior.rb +80 -80
  206. data/app/behaviors/ui/sheet_footer_behavior.rb +21 -21
  207. data/app/behaviors/ui/sheet_header_behavior.rb +21 -21
  208. data/app/behaviors/ui/sheet_overlay_behavior.rb +64 -64
  209. data/app/behaviors/ui/sidebar_behavior.rb +91 -76
  210. data/app/behaviors/ui/sidebar_content_behavior.rb +28 -28
  211. data/app/behaviors/ui/sidebar_footer_behavior.rb +27 -27
  212. data/app/behaviors/ui/sidebar_group_action_behavior.rb +32 -32
  213. data/app/behaviors/ui/sidebar_group_behavior.rb +27 -27
  214. data/app/behaviors/ui/sidebar_group_content_behavior.rb +27 -27
  215. data/app/behaviors/ui/sidebar_group_label_behavior.rb +31 -31
  216. data/app/behaviors/ui/sidebar_header_behavior.rb +27 -27
  217. data/app/behaviors/ui/sidebar_input_behavior.rb +28 -28
  218. data/app/behaviors/ui/sidebar_inset_behavior.rb +37 -31
  219. data/app/behaviors/ui/sidebar_menu_action_behavior.rb +45 -45
  220. data/app/behaviors/ui/sidebar_menu_badge_behavior.rb +38 -31
  221. data/app/behaviors/ui/sidebar_menu_behavior.rb +38 -27
  222. data/app/behaviors/ui/sidebar_menu_button_behavior.rb +67 -58
  223. data/app/behaviors/ui/sidebar_menu_item_behavior.rb +27 -27
  224. data/app/behaviors/ui/sidebar_menu_skeleton_behavior.rb +34 -27
  225. data/app/behaviors/ui/sidebar_menu_sub_behavior.rb +28 -28
  226. data/app/behaviors/ui/sidebar_menu_sub_button_behavior.rb +64 -55
  227. data/app/behaviors/ui/sidebar_menu_sub_item_behavior.rb +27 -27
  228. data/app/behaviors/ui/sidebar_provider_behavior.rb +53 -47
  229. data/app/behaviors/ui/sidebar_rail_behavior.rb +46 -39
  230. data/app/behaviors/ui/sidebar_separator_behavior.rb +28 -28
  231. data/app/behaviors/ui/sidebar_trigger_behavior.rb +32 -32
  232. data/app/behaviors/ui/slider_behavior.rb +40 -40
  233. data/app/behaviors/ui/slider_range_behavior.rb +15 -15
  234. data/app/behaviors/ui/slider_thumb_behavior.rb +21 -21
  235. data/app/behaviors/ui/slider_track_behavior.rb +19 -19
  236. data/app/behaviors/ui/small_behavior.rb +25 -17
  237. data/app/behaviors/ui/sonner_toaster_behavior.rb +37 -29
  238. data/app/behaviors/ui/spinner_behavior.rb +46 -41
  239. data/app/behaviors/ui/switch_behavior.rb +77 -56
  240. data/app/behaviors/ui/table_behavior.rb +30 -22
  241. data/app/behaviors/ui/table_body_behavior.rb +28 -22
  242. data/app/behaviors/ui/table_caption_behavior.rb +28 -22
  243. data/app/behaviors/ui/table_cell_behavior.rb +28 -22
  244. data/app/behaviors/ui/table_footer_behavior.rb +22 -22
  245. data/app/behaviors/ui/table_head_behavior.rb +28 -22
  246. data/app/behaviors/ui/table_header_behavior.rb +22 -22
  247. data/app/behaviors/ui/table_row_behavior.rb +28 -22
  248. data/app/behaviors/ui/tabs_behavior.rb +53 -28
  249. data/app/behaviors/ui/tabs_content_behavior.rb +33 -33
  250. data/app/behaviors/ui/tabs_list_behavior.rb +17 -17
  251. data/app/behaviors/ui/tabs_trigger_behavior.rb +42 -42
  252. data/app/behaviors/ui/textarea_behavior.rb +36 -28
  253. data/app/behaviors/ui/toggle_behavior.rb +83 -68
  254. data/app/behaviors/ui/toggle_group_behavior.rb +50 -52
  255. data/app/behaviors/ui/toggle_group_item_behavior.rb +69 -71
  256. data/app/behaviors/ui/tooltip_behavior.rb +36 -22
  257. data/app/behaviors/ui/tooltip_content_behavior.rb +53 -53
  258. data/app/behaviors/ui/tooltip_trigger_behavior.rb +55 -55
  259. data/app/components/ui/accordion.rb +32 -32
  260. data/app/components/ui/accordion_content.rb +25 -25
  261. data/app/components/ui/accordion_item.rb +41 -41
  262. data/app/components/ui/accordion_trigger.rb +44 -44
  263. data/app/components/ui/alert.rb +26 -26
  264. data/app/components/ui/alert_description.rb +21 -21
  265. data/app/components/ui/alert_dialog.rb +28 -28
  266. data/app/components/ui/alert_dialog_action.rb +29 -29
  267. data/app/components/ui/alert_dialog_cancel.rb +29 -29
  268. data/app/components/ui/alert_dialog_content.rb +20 -20
  269. data/app/components/ui/alert_dialog_description.rb +20 -20
  270. data/app/components/ui/alert_dialog_footer.rb +23 -23
  271. data/app/components/ui/alert_dialog_header.rb +22 -22
  272. data/app/components/ui/alert_dialog_overlay.rb +25 -25
  273. data/app/components/ui/alert_dialog_title.rb +20 -20
  274. data/app/components/ui/alert_dialog_trigger.rb +22 -22
  275. data/app/components/ui/alert_title.rb +19 -19
  276. data/app/components/ui/aspect_ratio.rb +26 -26
  277. data/app/components/ui/avatar.rb +26 -26
  278. data/app/components/ui/avatar_fallback.rb +28 -28
  279. data/app/components/ui/avatar_image.rb +29 -29
  280. data/app/components/ui/badge.rb +32 -32
  281. data/app/components/ui/blockquote.rb +1 -0
  282. data/app/components/ui/breadcrumb.rb +26 -26
  283. data/app/components/ui/breadcrumb_ellipsis.rb +47 -47
  284. data/app/components/ui/breadcrumb_item.rb +22 -22
  285. data/app/components/ui/breadcrumb_link.rb +22 -22
  286. data/app/components/ui/breadcrumb_list.rb +22 -22
  287. data/app/components/ui/breadcrumb_page.rb +20 -20
  288. data/app/components/ui/breadcrumb_separator.rb +43 -43
  289. data/app/components/ui/button.rb +44 -44
  290. data/app/components/ui/button_group.rb +44 -44
  291. data/app/components/ui/button_group_separator.rb +28 -28
  292. data/app/components/ui/button_group_text.rb +40 -40
  293. data/app/components/ui/calendar.rb +188 -188
  294. data/app/components/ui/card.rb +10 -10
  295. data/app/components/ui/card_action.rb +10 -10
  296. data/app/components/ui/card_content.rb +10 -10
  297. data/app/components/ui/card_description.rb +10 -10
  298. data/app/components/ui/card_footer.rb +10 -10
  299. data/app/components/ui/card_header.rb +10 -10
  300. data/app/components/ui/card_title.rb +10 -10
  301. data/app/components/ui/carousel.rb +14 -13
  302. data/app/components/ui/carousel_content.rb +12 -11
  303. data/app/components/ui/carousel_item.rb +11 -10
  304. data/app/components/ui/carousel_next.rb +13 -25
  305. data/app/components/ui/carousel_previous.rb +13 -25
  306. data/app/components/ui/checkbox.rb +43 -43
  307. data/app/components/ui/collapsible.rb +17 -17
  308. data/app/components/ui/collapsible_content.rb +11 -11
  309. data/app/components/ui/collapsible_trigger.rb +15 -15
  310. data/app/components/ui/combobox_wrapper.rb +53 -53
  311. data/app/components/ui/command.rb +12 -11
  312. data/app/components/ui/command_dialog.rb +17 -16
  313. data/app/components/ui/command_empty.rb +10 -10
  314. data/app/components/ui/command_group.rb +15 -15
  315. data/app/components/ui/command_input.rb +26 -26
  316. data/app/components/ui/command_item.rb +12 -12
  317. data/app/components/ui/command_list.rb +10 -10
  318. data/app/components/ui/command_separator.rb +10 -10
  319. data/app/components/ui/command_shortcut.rb +10 -10
  320. data/app/components/ui/context_menu.rb +25 -25
  321. data/app/components/ui/context_menu_checkbox_item.rb +42 -42
  322. data/app/components/ui/context_menu_content.rb +22 -22
  323. data/app/components/ui/context_menu_item.rb +34 -34
  324. data/app/components/ui/context_menu_label.rb +22 -22
  325. data/app/components/ui/context_menu_radio_group.rb +23 -23
  326. data/app/components/ui/context_menu_radio_item.rb +42 -42
  327. data/app/components/ui/context_menu_separator.rb +19 -19
  328. data/app/components/ui/context_menu_shortcut.rb +20 -20
  329. data/app/components/ui/context_menu_trigger.rb +22 -22
  330. data/app/components/ui/date_picker.rb +116 -116
  331. data/app/components/ui/date_picker_input.rb +66 -66
  332. data/app/components/ui/date_picker_trigger.rb +63 -63
  333. data/app/components/ui/dialog.rb +14 -14
  334. data/app/components/ui/dialog_close.rb +22 -22
  335. data/app/components/ui/dialog_content.rb +12 -12
  336. data/app/components/ui/dialog_description.rb +17 -17
  337. data/app/components/ui/dialog_footer.rb +10 -10
  338. data/app/components/ui/dialog_header.rb +10 -10
  339. data/app/components/ui/dialog_overlay.rb +13 -13
  340. data/app/components/ui/dialog_title.rb +17 -17
  341. data/app/components/ui/dialog_trigger.rb +32 -32
  342. data/app/components/ui/drawer.rb +34 -34
  343. data/app/components/ui/drawer_close.rb +18 -18
  344. data/app/components/ui/drawer_content.rb +14 -14
  345. data/app/components/ui/drawer_description.rb +11 -11
  346. data/app/components/ui/drawer_footer.rb +11 -11
  347. data/app/components/ui/drawer_handle.rb +10 -10
  348. data/app/components/ui/drawer_header.rb +11 -11
  349. data/app/components/ui/drawer_overlay.rb +12 -12
  350. data/app/components/ui/drawer_title.rb +11 -11
  351. data/app/components/ui/drawer_trigger.rb +29 -29
  352. data/app/components/ui/dropdown_menu.rb +49 -49
  353. data/app/components/ui/dropdown_menu_checkbox_item.rb +45 -45
  354. data/app/components/ui/dropdown_menu_content.rb +24 -24
  355. data/app/components/ui/dropdown_menu_item.rb +34 -34
  356. data/app/components/ui/dropdown_menu_label.rb +22 -22
  357. data/app/components/ui/dropdown_menu_radio_group.rb +23 -23
  358. data/app/components/ui/dropdown_menu_radio_item.rb +47 -47
  359. data/app/components/ui/dropdown_menu_separator.rb +19 -19
  360. data/app/components/ui/dropdown_menu_shortcut.rb +20 -20
  361. data/app/components/ui/dropdown_menu_sub.rb +23 -23
  362. data/app/components/ui/dropdown_menu_sub_content.rb +26 -26
  363. data/app/components/ui/dropdown_menu_sub_trigger.rb +40 -40
  364. data/app/components/ui/dropdown_menu_trigger.rb +36 -36
  365. data/app/components/ui/empty.rb +21 -21
  366. data/app/components/ui/empty_content.rb +18 -18
  367. data/app/components/ui/empty_description.rb +16 -16
  368. data/app/components/ui/empty_header.rb +20 -20
  369. data/app/components/ui/empty_media.rb +24 -24
  370. data/app/components/ui/empty_title.rb +16 -16
  371. data/app/components/ui/field.rb +30 -30
  372. data/app/components/ui/field_content.rb +20 -20
  373. data/app/components/ui/field_description.rb +20 -20
  374. data/app/components/ui/field_error.rb +50 -50
  375. data/app/components/ui/field_group.rb +23 -23
  376. data/app/components/ui/field_label.rb +22 -22
  377. data/app/components/ui/field_legend.rb +25 -25
  378. data/app/components/ui/field_separator.rb +41 -41
  379. data/app/components/ui/field_set.rb +22 -22
  380. data/app/components/ui/field_title.rb +20 -20
  381. data/app/components/ui/h1.rb +1 -0
  382. data/app/components/ui/h2.rb +1 -0
  383. data/app/components/ui/h3.rb +1 -0
  384. data/app/components/ui/h4.rb +1 -0
  385. data/app/components/ui/hover_card.rb +22 -22
  386. data/app/components/ui/hover_card_content.rb +28 -28
  387. data/app/components/ui/hover_card_trigger.rb +40 -40
  388. data/app/components/ui/inline_code.rb +1 -0
  389. data/app/components/ui/input.rb +15 -15
  390. data/app/components/ui/input_group.rb +28 -28
  391. data/app/components/ui/input_group_addon.rb +27 -27
  392. data/app/components/ui/input_group_button.rb +35 -35
  393. data/app/components/ui/input_group_input.rb +39 -39
  394. data/app/components/ui/input_group_text.rb +26 -26
  395. data/app/components/ui/input_group_textarea.rb +39 -39
  396. data/app/components/ui/input_otp.rb +48 -48
  397. data/app/components/ui/input_otp_group.rb +21 -21
  398. data/app/components/ui/input_otp_separator.rb +28 -28
  399. data/app/components/ui/input_otp_slot.rb +28 -28
  400. data/app/components/ui/item.rb +20 -20
  401. data/app/components/ui/item_actions.rb +10 -10
  402. data/app/components/ui/item_content.rb +10 -10
  403. data/app/components/ui/item_description.rb +10 -10
  404. data/app/components/ui/item_footer.rb +10 -10
  405. data/app/components/ui/item_group.rb +10 -10
  406. data/app/components/ui/item_header.rb +10 -10
  407. data/app/components/ui/item_media.rb +11 -11
  408. data/app/components/ui/item_separator.rb +10 -10
  409. data/app/components/ui/item_title.rb +10 -10
  410. data/app/components/ui/kbd.rb +24 -24
  411. data/app/components/ui/kbd_group.rb +25 -25
  412. data/app/components/ui/label.rb +25 -25
  413. data/app/components/ui/large.rb +1 -0
  414. data/app/components/ui/lead.rb +1 -0
  415. data/app/components/ui/list.rb +1 -0
  416. data/app/components/ui/menubar.rb +31 -31
  417. data/app/components/ui/menubar_checkbox_item.rb +45 -45
  418. data/app/components/ui/menubar_content.rb +27 -27
  419. data/app/components/ui/menubar_item.rb +34 -34
  420. data/app/components/ui/menubar_label.rb +24 -24
  421. data/app/components/ui/menubar_menu.rb +24 -24
  422. data/app/components/ui/menubar_radio_group.rb +24 -24
  423. data/app/components/ui/menubar_radio_item.rb +47 -47
  424. data/app/components/ui/menubar_separator.rb +18 -18
  425. data/app/components/ui/menubar_shortcut.rb +22 -22
  426. data/app/components/ui/menubar_sub.rb +25 -25
  427. data/app/components/ui/menubar_sub_content.rb +22 -22
  428. data/app/components/ui/menubar_sub_trigger.rb +41 -41
  429. data/app/components/ui/menubar_trigger.rb +21 -21
  430. data/app/components/ui/muted.rb +1 -0
  431. data/app/components/ui/navigation_menu.rb +43 -43
  432. data/app/components/ui/navigation_menu_content.rb +28 -28
  433. data/app/components/ui/navigation_menu_item.rb +31 -31
  434. data/app/components/ui/navigation_menu_link.rb +60 -60
  435. data/app/components/ui/navigation_menu_list.rb +23 -23
  436. data/app/components/ui/navigation_menu_trigger.rb +44 -44
  437. data/app/components/ui/navigation_menu_viewport.rb +20 -20
  438. data/app/components/ui/p.rb +1 -0
  439. data/app/components/ui/pagination.rb +15 -15
  440. data/app/components/ui/pagination_content.rb +15 -15
  441. data/app/components/ui/pagination_ellipsis.rb +20 -20
  442. data/app/components/ui/pagination_item.rb +13 -13
  443. data/app/components/ui/pagination_link.rb +21 -21
  444. data/app/components/ui/pagination_next.rb +25 -25
  445. data/app/components/ui/pagination_previous.rb +25 -25
  446. data/app/components/ui/popover.rb +44 -44
  447. data/app/components/ui/popover_content.rb +25 -25
  448. data/app/components/ui/popover_trigger.rb +30 -30
  449. data/app/components/ui/progress.rb +32 -32
  450. data/app/components/ui/radio_button.rb +44 -44
  451. data/app/components/ui/resizable_handle.rb +49 -49
  452. data/app/components/ui/resizable_panel.rb +31 -31
  453. data/app/components/ui/resizable_panel_group.rb +37 -37
  454. data/app/components/ui/responsive_dialog.rb +81 -81
  455. data/app/components/ui/scroll_area.rb +54 -54
  456. data/app/components/ui/scroll_area_corner.rb +27 -27
  457. data/app/components/ui/scroll_area_scrollbar.rb +37 -37
  458. data/app/components/ui/scroll_area_thumb.rb +31 -31
  459. data/app/components/ui/scroll_area_viewport.rb +33 -33
  460. data/app/components/ui/select.rb +38 -38
  461. data/app/components/ui/select_content.rb +36 -36
  462. data/app/components/ui/select_group.rb +32 -32
  463. data/app/components/ui/select_item.rb +58 -58
  464. data/app/components/ui/select_label.rb +28 -28
  465. data/app/components/ui/select_scroll_down_button.rb +39 -39
  466. data/app/components/ui/select_scroll_up_button.rb +39 -39
  467. data/app/components/ui/select_trigger.rb +38 -38
  468. data/app/components/ui/separator.rb +35 -35
  469. data/app/components/ui/sheet.rb +14 -14
  470. data/app/components/ui/sheet_close.rb +32 -32
  471. data/app/components/ui/sheet_content.rb +45 -45
  472. data/app/components/ui/sheet_description.rb +17 -17
  473. data/app/components/ui/sheet_footer.rb +10 -10
  474. data/app/components/ui/sheet_header.rb +10 -10
  475. data/app/components/ui/sheet_overlay.rb +13 -13
  476. data/app/components/ui/sheet_title.rb +17 -17
  477. data/app/components/ui/sheet_trigger.rb +21 -21
  478. data/app/components/ui/sidebar.rb +85 -85
  479. data/app/components/ui/sidebar_content.rb +27 -27
  480. data/app/components/ui/sidebar_footer.rb +29 -29
  481. data/app/components/ui/sidebar_group.rb +45 -45
  482. data/app/components/ui/sidebar_group_action.rb +39 -39
  483. data/app/components/ui/sidebar_group_content.rb +35 -35
  484. data/app/components/ui/sidebar_group_label.rb +38 -38
  485. data/app/components/ui/sidebar_header.rb +29 -29
  486. data/app/components/ui/sidebar_input.rb +35 -35
  487. data/app/components/ui/sidebar_inset.rb +35 -35
  488. data/app/components/ui/sidebar_menu.rb +32 -32
  489. data/app/components/ui/sidebar_menu_action.rb +52 -52
  490. data/app/components/ui/sidebar_menu_badge.rb +32 -32
  491. data/app/components/ui/sidebar_menu_button.rb +63 -63
  492. data/app/components/ui/sidebar_menu_item.rb +38 -38
  493. data/app/components/ui/sidebar_menu_skeleton.rb +57 -57
  494. data/app/components/ui/sidebar_menu_sub.rb +43 -43
  495. data/app/components/ui/sidebar_menu_sub_button.rb +40 -40
  496. data/app/components/ui/sidebar_menu_sub_item.rb +27 -27
  497. data/app/components/ui/sidebar_provider.rb +66 -66
  498. data/app/components/ui/sidebar_rail.rb +28 -28
  499. data/app/components/ui/sidebar_separator.rb +25 -25
  500. data/app/components/ui/sidebar_trigger.rb +54 -54
  501. data/app/components/ui/skeleton.rb +37 -37
  502. data/app/components/ui/small.rb +1 -0
  503. data/app/components/ui/sonner_toaster.rb +49 -49
  504. data/app/components/ui/spinner.rb +36 -36
  505. data/app/components/ui/switch.rb +62 -62
  506. data/app/components/ui/table.rb +42 -42
  507. data/app/components/ui/table_body.rb +22 -22
  508. data/app/components/ui/table_caption.rb +11 -11
  509. data/app/components/ui/table_cell.rb +11 -11
  510. data/app/components/ui/table_footer.rb +22 -22
  511. data/app/components/ui/table_head.rb +11 -11
  512. data/app/components/ui/table_header.rb +22 -22
  513. data/app/components/ui/table_row.rb +19 -19
  514. data/app/components/ui/tabs.rb +36 -36
  515. data/app/components/ui/tabs_content.rb +26 -26
  516. data/app/components/ui/tabs_list.rb +23 -23
  517. data/app/components/ui/tabs_trigger.rb +29 -29
  518. data/app/components/ui/textarea.rb +15 -15
  519. data/app/components/ui/toggle.rb +38 -38
  520. data/app/components/ui/toggle_group.rb +53 -53
  521. data/app/components/ui/toggle_group_item.rb +61 -61
  522. data/app/components/ui/tooltip.rb +27 -27
  523. data/app/components/ui/tooltip_content.rb +31 -31
  524. data/app/components/ui/tooltip_trigger.rb +36 -36
  525. data/app/helpers/ui/combobox_behavior.rb +1 -1
  526. data/app/helpers/ui/empty_behavior.rb +6 -6
  527. data/app/helpers/ui/input_group_input_behavior.rb +1 -1
  528. data/app/helpers/ui/input_group_textarea_behavior.rb +1 -1
  529. data/app/helpers/ui/popover_content_behavior.rb +1 -1
  530. data/app/helpers/ui/popover_trigger_behavior.rb +1 -1
  531. data/app/helpers/ui/select_behavior.rb +61 -61
  532. data/app/helpers/ui/select_content_behavior.rb +31 -31
  533. data/app/helpers/ui/select_group_behavior.rb +24 -24
  534. data/app/helpers/ui/select_item_behavior.rb +34 -34
  535. data/app/helpers/ui/select_label_behavior.rb +23 -23
  536. data/app/helpers/ui/select_scroll_down_button_behavior.rb +38 -38
  537. data/app/helpers/ui/select_scroll_up_button_behavior.rb +38 -38
  538. data/app/helpers/ui/select_trigger_behavior.rb +29 -29
  539. data/app/helpers/ui/spinner_behavior.rb +1 -1
  540. data/app/javascript/ui/controllers/accordion_controller.js +15 -3
  541. data/app/javascript/ui/controllers/command_controller.js +4 -3
  542. data/app/view_components/ui/accordion_component.rb +31 -31
  543. data/app/view_components/ui/accordion_content_component.rb +24 -24
  544. data/app/view_components/ui/accordion_item_component.rb +37 -37
  545. data/app/view_components/ui/accordion_trigger_component.rb +25 -25
  546. data/app/view_components/ui/alert_component.rb +18 -18
  547. data/app/view_components/ui/alert_description_component.rb +16 -16
  548. data/app/view_components/ui/alert_title_component.rb +16 -16
  549. data/app/view_components/ui/aspect_ratio_component.rb +20 -20
  550. data/app/view_components/ui/avatar_component.rb +16 -16
  551. data/app/view_components/ui/avatar_fallback_component.rb +16 -16
  552. data/app/view_components/ui/avatar_image_component.rb +19 -19
  553. data/app/view_components/ui/badge_component.rb +18 -18
  554. data/app/view_components/ui/blockquote_component.rb +1 -0
  555. data/app/view_components/ui/breadcrumb_component.rb +28 -28
  556. data/app/view_components/ui/breadcrumb_ellipsis_component.rb +41 -41
  557. data/app/view_components/ui/breadcrumb_item_component.rb +24 -24
  558. data/app/view_components/ui/breadcrumb_link_component.rb +24 -24
  559. data/app/view_components/ui/breadcrumb_list_component.rb +24 -24
  560. data/app/view_components/ui/breadcrumb_page_component.rb +22 -22
  561. data/app/view_components/ui/breadcrumb_separator_component.rb +38 -38
  562. data/app/view_components/ui/button_component.rb +39 -39
  563. data/app/view_components/ui/button_group_component.rb +33 -33
  564. data/app/view_components/ui/button_group_separator_component.rb +29 -29
  565. data/app/view_components/ui/button_group_text_component.rb +25 -25
  566. data/app/view_components/ui/calendar_component.rb +179 -182
  567. data/app/view_components/ui/card_action_component.rb +10 -10
  568. data/app/view_components/ui/card_component.rb +10 -10
  569. data/app/view_components/ui/card_content_component.rb +10 -10
  570. data/app/view_components/ui/card_description_component.rb +10 -10
  571. data/app/view_components/ui/card_footer_component.rb +10 -10
  572. data/app/view_components/ui/card_header_component.rb +10 -10
  573. data/app/view_components/ui/card_title_component.rb +10 -10
  574. data/app/view_components/ui/carousel_component.rb +14 -13
  575. data/app/view_components/ui/carousel_content_component.rb +12 -11
  576. data/app/view_components/ui/carousel_item_component.rb +11 -10
  577. data/app/view_components/ui/carousel_next_component.rb +15 -27
  578. data/app/view_components/ui/carousel_previous_component.rb +15 -27
  579. data/app/view_components/ui/checkbox_component.rb +48 -48
  580. data/app/view_components/ui/collapsible_component.rb +17 -17
  581. data/app/view_components/ui/collapsible_content_component.rb +11 -11
  582. data/app/view_components/ui/collapsible_trigger_component.rb +15 -15
  583. data/app/view_components/ui/combobox_wrapper_component.rb +53 -53
  584. data/app/view_components/ui/command_component.rb +12 -11
  585. data/app/view_components/ui/command_dialog_component.rb +17 -16
  586. data/app/view_components/ui/command_empty_component.rb +10 -10
  587. data/app/view_components/ui/command_group_component.rb +16 -16
  588. data/app/view_components/ui/command_input_component.rb +15 -15
  589. data/app/view_components/ui/command_item_component.rb +12 -12
  590. data/app/view_components/ui/command_list_component.rb +10 -10
  591. data/app/view_components/ui/command_separator_component.rb +10 -10
  592. data/app/view_components/ui/command_shortcut_component.rb +10 -10
  593. data/app/view_components/ui/context_menu_checkbox_item_component.rb +36 -37
  594. data/app/view_components/ui/context_menu_component.rb +14 -14
  595. data/app/view_components/ui/context_menu_content_component.rb +14 -14
  596. data/app/view_components/ui/context_menu_item_component.rb +22 -22
  597. data/app/view_components/ui/context_menu_label_component.rb +16 -16
  598. data/app/view_components/ui/context_menu_radio_group_component.rb +13 -13
  599. data/app/view_components/ui/context_menu_radio_item_component.rb +36 -37
  600. data/app/view_components/ui/context_menu_separator_component.rb +11 -11
  601. data/app/view_components/ui/context_menu_shortcut_component.rb +13 -13
  602. data/app/view_components/ui/context_menu_trigger_component.rb +14 -14
  603. data/app/view_components/ui/date_picker_component.rb +125 -125
  604. data/app/view_components/ui/date_picker_input_component.rb +68 -68
  605. data/app/view_components/ui/date_picker_trigger_component.rb +67 -67
  606. data/app/view_components/ui/dialog_close_component.rb +61 -61
  607. data/app/view_components/ui/dialog_component.rb +45 -45
  608. data/app/view_components/ui/dialog_content_component.rb +23 -23
  609. data/app/view_components/ui/dialog_description_component.rb +21 -21
  610. data/app/view_components/ui/dialog_footer_component.rb +17 -17
  611. data/app/view_components/ui/dialog_header_component.rb +18 -18
  612. data/app/view_components/ui/dialog_overlay_component.rb +30 -30
  613. data/app/view_components/ui/dialog_title_component.rb +21 -21
  614. data/app/view_components/ui/dialog_trigger_component.rb +61 -61
  615. data/app/view_components/ui/drawer_close_component.rb +30 -30
  616. data/app/view_components/ui/drawer_component.rb +76 -76
  617. data/app/view_components/ui/drawer_content_component.rb +26 -26
  618. data/app/view_components/ui/drawer_description_component.rb +17 -17
  619. data/app/view_components/ui/drawer_footer_component.rb +20 -20
  620. data/app/view_components/ui/drawer_handle_component.rb +19 -19
  621. data/app/view_components/ui/drawer_header_component.rb +20 -20
  622. data/app/view_components/ui/drawer_overlay_component.rb +22 -22
  623. data/app/view_components/ui/drawer_title_component.rb +17 -17
  624. data/app/view_components/ui/drawer_trigger_component.rb +60 -60
  625. data/app/view_components/ui/dropdown_menu_checkbox_item_component.rb +26 -26
  626. data/app/view_components/ui/dropdown_menu_component.rb +45 -45
  627. data/app/view_components/ui/dropdown_menu_content_component.rb +13 -13
  628. data/app/view_components/ui/dropdown_menu_item_component.rb +16 -16
  629. data/app/view_components/ui/dropdown_menu_label_component.rb +13 -13
  630. data/app/view_components/ui/dropdown_menu_radio_group_component.rb +12 -12
  631. data/app/view_components/ui/dropdown_menu_radio_item_component.rb +27 -27
  632. data/app/view_components/ui/dropdown_menu_separator_component.rb +11 -11
  633. data/app/view_components/ui/dropdown_menu_shortcut_component.rb +12 -12
  634. data/app/view_components/ui/dropdown_menu_sub_component.rb +12 -12
  635. data/app/view_components/ui/dropdown_menu_sub_content_component.rb +14 -14
  636. data/app/view_components/ui/dropdown_menu_sub_trigger_component.rb +22 -22
  637. data/app/view_components/ui/dropdown_menu_trigger_component.rb +46 -46
  638. data/app/view_components/ui/empty_component.rb +12 -12
  639. data/app/view_components/ui/empty_content_component.rb +12 -12
  640. data/app/view_components/ui/empty_description_component.rb +12 -12
  641. data/app/view_components/ui/empty_header_component.rb +12 -12
  642. data/app/view_components/ui/empty_media_component.rb +13 -13
  643. data/app/view_components/ui/empty_title_component.rb +12 -12
  644. data/app/view_components/ui/field_component.rb +36 -36
  645. data/app/view_components/ui/field_content_component.rb +22 -22
  646. data/app/view_components/ui/field_description_component.rb +22 -22
  647. data/app/view_components/ui/field_error_component.rb +55 -55
  648. data/app/view_components/ui/field_group_component.rb +27 -27
  649. data/app/view_components/ui/field_label_component.rb +24 -24
  650. data/app/view_components/ui/field_legend_component.rb +29 -29
  651. data/app/view_components/ui/field_separator_component.rb +43 -43
  652. data/app/view_components/ui/field_set_component.rb +25 -25
  653. data/app/view_components/ui/field_title_component.rb +22 -22
  654. data/app/view_components/ui/h3_component.rb +1 -0
  655. data/app/view_components/ui/h4_component.rb +1 -0
  656. data/app/view_components/ui/hover_card_component.rb +24 -24
  657. data/app/view_components/ui/hover_card_content_component.rb +30 -30
  658. data/app/view_components/ui/hover_card_trigger_component.rb +47 -47
  659. data/app/view_components/ui/inline_code_component.rb +1 -0
  660. data/app/view_components/ui/input_component.rb +17 -17
  661. data/app/view_components/ui/input_group_addon_component.rb +31 -31
  662. data/app/view_components/ui/input_group_button_component.rb +32 -32
  663. data/app/view_components/ui/input_group_component.rb +30 -30
  664. data/app/view_components/ui/input_group_input_component.rb +38 -38
  665. data/app/view_components/ui/input_group_text_component.rb +28 -28
  666. data/app/view_components/ui/input_group_textarea_component.rb +38 -38
  667. data/app/view_components/ui/input_otp_component.rb +52 -52
  668. data/app/view_components/ui/input_otp_group_component.rb +23 -23
  669. data/app/view_components/ui/input_otp_separator_component.rb +29 -29
  670. data/app/view_components/ui/input_otp_slot_component.rb +28 -28
  671. data/app/view_components/ui/item_actions_component.rb +12 -12
  672. data/app/view_components/ui/item_component.rb +23 -23
  673. data/app/view_components/ui/item_content_component.rb +12 -12
  674. data/app/view_components/ui/item_description_component.rb +12 -12
  675. data/app/view_components/ui/item_footer_component.rb +12 -12
  676. data/app/view_components/ui/item_group_component.rb +12 -12
  677. data/app/view_components/ui/item_header_component.rb +12 -12
  678. data/app/view_components/ui/item_media_component.rb +13 -13
  679. data/app/view_components/ui/item_separator_component.rb +12 -12
  680. data/app/view_components/ui/item_title_component.rb +12 -12
  681. data/app/view_components/ui/kbd_component.rb +25 -25
  682. data/app/view_components/ui/kbd_group_component.rb +26 -26
  683. data/app/view_components/ui/label_component.rb +18 -18
  684. data/app/view_components/ui/large_component.rb +1 -0
  685. data/app/view_components/ui/lead_component.rb +1 -0
  686. data/app/view_components/ui/list_component.rb +1 -0
  687. data/app/view_components/ui/menubar_checkbox_item_component.rb +40 -40
  688. data/app/view_components/ui/menubar_component.rb +19 -19
  689. data/app/view_components/ui/menubar_content_component.rb +21 -21
  690. data/app/view_components/ui/menubar_item_component.rb +26 -26
  691. data/app/view_components/ui/menubar_label_component.rb +18 -18
  692. data/app/view_components/ui/menubar_menu_component.rb +20 -20
  693. data/app/view_components/ui/menubar_radio_group_component.rb +21 -21
  694. data/app/view_components/ui/menubar_radio_item_component.rb +41 -41
  695. data/app/view_components/ui/menubar_separator_component.rb +16 -16
  696. data/app/view_components/ui/menubar_shortcut_component.rb +17 -17
  697. data/app/view_components/ui/menubar_sub_component.rb +20 -20
  698. data/app/view_components/ui/menubar_sub_content_component.rb +20 -20
  699. data/app/view_components/ui/menubar_sub_trigger_component.rb +37 -37
  700. data/app/view_components/ui/menubar_trigger_component.rb +18 -18
  701. data/app/view_components/ui/muted_component.rb +1 -0
  702. data/app/view_components/ui/navigation_menu_component.rb +37 -37
  703. data/app/view_components/ui/navigation_menu_content_component.rb +18 -18
  704. data/app/view_components/ui/navigation_menu_item_component.rb +18 -18
  705. data/app/view_components/ui/navigation_menu_link_component.rb +83 -83
  706. data/app/view_components/ui/navigation_menu_list_component.rb +16 -16
  707. data/app/view_components/ui/navigation_menu_trigger_component.rb +38 -38
  708. data/app/view_components/ui/navigation_menu_viewport_component.rb +16 -16
  709. data/app/view_components/ui/p_component.rb +1 -0
  710. data/app/view_components/ui/pagination_component.rb +14 -14
  711. data/app/view_components/ui/pagination_content_component.rb +14 -14
  712. data/app/view_components/ui/pagination_ellipsis_component.rb +20 -20
  713. data/app/view_components/ui/pagination_item_component.rb +12 -12
  714. data/app/view_components/ui/pagination_link_component.rb +21 -21
  715. data/app/view_components/ui/pagination_next_component.rb +24 -24
  716. data/app/view_components/ui/pagination_previous_component.rb +25 -25
  717. data/app/view_components/ui/popover_component.rb +50 -50
  718. data/app/view_components/ui/popover_content_component.rb +36 -36
  719. data/app/view_components/ui/popover_trigger_component.rb +60 -60
  720. data/app/view_components/ui/progress_component.rb +33 -33
  721. data/app/view_components/ui/radio_button_component.rb +49 -49
  722. data/app/view_components/ui/resizable_handle_component.rb +27 -27
  723. data/app/view_components/ui/resizable_panel_component.rb +33 -33
  724. data/app/view_components/ui/resizable_panel_group_component.rb +39 -39
  725. data/app/view_components/ui/responsive_dialog_component.rb +70 -70
  726. data/app/view_components/ui/scroll_area_component.rb +39 -39
  727. data/app/view_components/ui/scroll_area_corner_component.rb +18 -18
  728. data/app/view_components/ui/scroll_area_scrollbar_component.rb +28 -28
  729. data/app/view_components/ui/scroll_area_thumb_component.rb +23 -23
  730. data/app/view_components/ui/scroll_area_viewport_component.rb +25 -25
  731. data/app/view_components/ui/select_component.rb +27 -27
  732. data/app/view_components/ui/select_content_component.rb +35 -36
  733. data/app/view_components/ui/select_group_component.rb +22 -22
  734. data/app/view_components/ui/select_item_component.rb +39 -40
  735. data/app/view_components/ui/select_label_component.rb +18 -18
  736. data/app/view_components/ui/select_scroll_down_button_component.rb +29 -29
  737. data/app/view_components/ui/select_scroll_up_button_component.rb +29 -29
  738. data/app/view_components/ui/select_trigger_component.rb +22 -22
  739. data/app/view_components/ui/separator_component.rb +23 -23
  740. data/app/view_components/ui/sheet_close_component.rb +61 -61
  741. data/app/view_components/ui/sheet_component.rb +45 -45
  742. data/app/view_components/ui/sheet_content_component.rb +43 -43
  743. data/app/view_components/ui/sheet_description_component.rb +20 -20
  744. data/app/view_components/ui/sheet_footer_component.rb +17 -17
  745. data/app/view_components/ui/sheet_header_component.rb +17 -17
  746. data/app/view_components/ui/sheet_overlay_component.rb +30 -30
  747. data/app/view_components/ui/sheet_title_component.rb +20 -20
  748. data/app/view_components/ui/sheet_trigger_component.rb +50 -50
  749. data/app/view_components/ui/skeleton_component.rb +23 -23
  750. data/app/view_components/ui/slider_component.rb +55 -55
  751. data/app/view_components/ui/slider_range_component.rb +19 -19
  752. data/app/view_components/ui/slider_thumb_component.rb +25 -25
  753. data/app/view_components/ui/slider_track_component.rb +22 -22
  754. data/app/view_components/ui/small_component.rb +1 -0
  755. data/app/view_components/ui/sonner_toaster_component.rb +49 -49
  756. data/app/view_components/ui/spinner_component.rb +41 -41
  757. data/app/view_components/ui/switch_component.rb +52 -52
  758. data/app/view_components/ui/table_body_component.rb +14 -14
  759. data/app/view_components/ui/table_caption_component.rb +10 -10
  760. data/app/view_components/ui/table_cell_component.rb +10 -10
  761. data/app/view_components/ui/table_component.rb +20 -20
  762. data/app/view_components/ui/table_footer_component.rb +14 -14
  763. data/app/view_components/ui/table_head_component.rb +10 -10
  764. data/app/view_components/ui/table_header_component.rb +14 -14
  765. data/app/view_components/ui/table_row_component.rb +16 -16
  766. data/app/view_components/ui/tabs_component.rb +33 -33
  767. data/app/view_components/ui/tabs_content_component.rb +28 -28
  768. data/app/view_components/ui/tabs_list_component.rb +24 -24
  769. data/app/view_components/ui/tabs_trigger_component.rb +31 -31
  770. data/app/view_components/ui/textarea_component.rb +14 -14
  771. data/app/view_components/ui/toggle_component.rb +43 -43
  772. data/app/view_components/ui/toggle_group_component.rb +60 -60
  773. data/app/view_components/ui/toggle_group_item_component.rb +62 -62
  774. data/app/view_components/ui/tooltip_component.rb +14 -14
  775. data/app/view_components/ui/tooltip_content_component.rb +23 -23
  776. data/app/view_components/ui/tooltip_trigger_component.rb +19 -19
  777. data/app/views/ui/_command.html.erb +2 -0
  778. data/app/views/ui/carousel/_next.html.erb +1 -1
  779. data/app/views/ui/carousel/_previous.html.erb +1 -1
  780. data/lib/generators/ui/css_generator.rb +58 -0
  781. data/lib/generators/ui/install_generator.rb +140 -0
  782. data/lib/ui/version.rb +1 -1
  783. metadata +3 -3
  784. data/app/assets/stylesheets/ui/sonner.css +0 -610
  785. data/lib/generators/ui/install/install_generator.rb +0 -141
@@ -1,28 +1,34 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # RowBehavior
4
- #
5
- # Shared behavior for Table Row (tr) component.
6
- module UI::TableRowBehavior
7
- def render_row(&content_block)
8
- all_attributes = row_html_attributes.deep_merge(@attributes)
9
- content_tag(:tr, **all_attributes, &content_block)
10
- end
3
+ # UI::TableRowBehavior
4
+ #
5
+ # @ui_component Table Row
6
+ # @ui_category other
7
+ #
8
+ # @ui_anatomy Table Row - Table row element (required)
9
+ #
10
+ # @ui_feature Custom styling with Tailwind classes
11
+ #
12
+ module UI::TableRowBehavior
13
+ def render_row(&content_block)
14
+ all_attributes = row_html_attributes.deep_merge(@attributes)
15
+ content_tag(:tr, **all_attributes, &content_block)
16
+ end
11
17
 
12
- def row_html_attributes
13
- { class: row_classes }
14
- end
18
+ def row_html_attributes
19
+ {class: row_classes}
20
+ end
15
21
 
16
- def row_classes
17
- TailwindMerge::Merger.new.merge([
18
- row_base_classes,
19
- @classes
20
- ].compact.join(" "))
21
- end
22
+ def row_classes
23
+ TailwindMerge::Merger.new.merge([
24
+ row_base_classes,
25
+ @classes
26
+ ].compact.join(" "))
27
+ end
22
28
 
23
- private
29
+ private
24
30
 
25
- def row_base_classes
26
- "border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted"
27
- end
28
- end
31
+ def row_base_classes
32
+ "border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted"
33
+ end
34
+ end
@@ -1,32 +1,57 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Shared behavior for Tabs container component
4
- # Handles Stimulus controller setup and data attributes
5
- module UI::TabsBehavior
6
- # Generate Stimulus controller data attributes
7
- def tabs_data_attributes
8
- {
9
- controller: "ui--tabs",
10
- ui__tabs_default_value_value: @default_value || "",
11
- ui__tabs_orientation_value: @orientation || "horizontal",
12
- ui__tabs_activation_mode_value: @activation_mode || "automatic"
13
- }
14
- end
3
+ # UI::TabsBehavior
4
+ #
5
+ # @ui_component Tabs
6
+ # @ui_description Tabs container component (Phlex) Root component for tabbed interface with keyboard navigation
7
+ # @ui_category navigation
8
+ #
9
+ # @ui_anatomy Tabs - Root container with state management (required)
10
+ # @ui_anatomy Content - Main content container (required)
11
+ # @ui_anatomy List - Container for list items
12
+ # @ui_anatomy Trigger - Button or element that activates the component (required)
13
+ #
14
+ # @ui_feature Keyboard navigation with arrow keys
15
+ #
16
+ # @ui_aria_pattern Tabs
17
+ # @ui_aria_reference https://www.w3.org/WAI/ARIA/apg/patterns/tabs/
18
+ #
19
+ # @ui_keyboard ArrowDown Moves focus to next item
20
+ # @ui_keyboard ArrowUp Moves focus to previous item
21
+ # @ui_keyboard ArrowLeft Moves focus left or decreases value
22
+ # @ui_keyboard ArrowRight Moves focus right or increases value
23
+ # @ui_keyboard Home Moves focus to first item
24
+ # @ui_keyboard End Moves focus to last item
25
+ # @ui_keyboard Tab Moves focus to next focusable element
26
+ #
27
+ # @ui_related navigation_menu
28
+ # @ui_related accordion
29
+ #
30
+ module UI::TabsBehavior
31
+ # Generate Stimulus controller data attributes
32
+ def tabs_data_attributes
33
+ {
34
+ controller: "ui--tabs",
35
+ ui__tabs_default_value_value: @default_value || "",
36
+ ui__tabs_orientation_value: @orientation || "horizontal",
37
+ ui__tabs_activation_mode_value: @activation_mode || "automatic"
38
+ }
39
+ end
15
40
 
16
- # Merge user-provided data attributes with tabs controller data
17
- def merged_data_attributes
18
- user_data = @attributes&.fetch(:data, {}) || {}
19
- user_data.merge(tabs_data_attributes)
20
- end
41
+ # Merge user-provided data attributes with tabs controller data
42
+ def merged_data_attributes
43
+ user_data = @attributes&.fetch(:data, {}) || {}
44
+ user_data.merge(tabs_data_attributes)
45
+ end
21
46
 
22
- # Build complete HTML attributes hash for tabs container
23
- def tabs_html_attributes
24
- base_attrs = @attributes&.except(:data) || {}
25
- base_attrs.merge(
26
- class: "flex flex-col gap-2 #{@classes}".strip,
27
- "data-orientation": @orientation || "horizontal",
28
- "data-slot": "tabs",
29
- data: merged_data_attributes
30
- )
31
- end
32
- end
47
+ # Build complete HTML attributes hash for tabs container
48
+ def tabs_html_attributes
49
+ base_attrs = @attributes&.except(:data) || {}
50
+ base_attrs.merge(
51
+ class: "flex flex-col gap-2 #{@classes}".strip,
52
+ "data-orientation": @orientation || "horizontal",
53
+ "data-slot": "tabs",
54
+ data: merged_data_attributes
55
+ )
56
+ end
57
+ end
@@ -1,38 +1,38 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Shared behavior for TabsContent component
4
- # Panel displaying content for active tab
5
- module UI::TabsContentBehavior
6
- # Determine initial state based on value
7
- def content_state
8
- if @value == @default_value
9
- "active"
10
- else
11
- "inactive"
12
- end
13
- end
3
+ # Shared behavior for TabsContent component
4
+ # Panel displaying content for active tab
5
+ module UI::TabsContentBehavior
6
+ # Determine initial state based on value
7
+ def content_state
8
+ if @value == @default_value
9
+ "active"
10
+ else
11
+ "inactive"
12
+ end
13
+ end
14
14
 
15
- # Build complete HTML attributes hash for content
16
- def content_html_attributes
17
- base_attrs = @attributes&.except(:data) || {}
18
- user_data = @attributes&.fetch(:data, {}) || {}
15
+ # Build complete HTML attributes hash for content
16
+ def content_html_attributes
17
+ base_attrs = @attributes&.except(:data) || {}
18
+ user_data = @attributes&.fetch(:data, {}) || {}
19
19
 
20
- content_data = {
21
- ui__tabs_target: "content",
22
- value: @value
23
- }.merge(user_data)
20
+ content_data = {
21
+ ui__tabs_target: "content",
22
+ value: @value
23
+ }.merge(user_data)
24
24
 
25
- base_attrs.merge(
26
- class: "flex-1 outline-none #{@classes}".strip,
27
- id: "tabs-content-#{@value}",
28
- role: "tabpanel",
29
- "aria-labelledby": "tabs-trigger-#{@value}",
30
- "data-state": content_state,
31
- "data-orientation": @orientation || "horizontal",
32
- "data-slot": "tabs-content",
33
- tabindex: "0",
34
- hidden: content_state == "inactive",
35
- data: content_data
36
- )
37
- end
38
- end
25
+ base_attrs.merge(
26
+ class: "flex-1 outline-none #{@classes}".strip,
27
+ id: "tabs-content-#{@value}",
28
+ role: "tabpanel",
29
+ "aria-labelledby": "tabs-trigger-#{@value}",
30
+ "data-state": content_state,
31
+ "data-orientation": @orientation || "horizontal",
32
+ "data-slot": "tabs-content",
33
+ tabindex: "0",
34
+ hidden: content_state == "inactive",
35
+ data: content_data
36
+ )
37
+ end
38
+ end
@@ -1,20 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Shared behavior for TabsList component
4
- # Container for tab triggers
5
- module UI::TabsListBehavior
6
- # Build complete HTML attributes hash for tabs list
7
- def list_html_attributes
8
- base_attrs = @attributes&.except(:data) || {}
9
- user_data = @attributes&.fetch(:data, {}) || {}
3
+ # Shared behavior for TabsList component
4
+ # Container for tab triggers
5
+ module UI::TabsListBehavior
6
+ # Build complete HTML attributes hash for tabs list
7
+ def list_html_attributes
8
+ base_attrs = @attributes&.except(:data) || {}
9
+ user_data = @attributes&.fetch(:data, {}) || {}
10
10
 
11
- base_attrs.merge(
12
- class: "bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px] #{@classes}".strip,
13
- "data-orientation": @orientation || "horizontal",
14
- "data-slot": "tabs-list",
15
- role: "tablist",
16
- "aria-orientation": @orientation || "horizontal",
17
- data: user_data
18
- )
19
- end
20
- end
11
+ base_attrs.merge(
12
+ class: "bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px] #{@classes}".strip,
13
+ "data-orientation": @orientation || "horizontal",
14
+ "data-slot": "tabs-list",
15
+ role: "tablist",
16
+ "aria-orientation": @orientation || "horizontal",
17
+ data: user_data
18
+ )
19
+ end
20
+ end
@@ -1,47 +1,47 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Shared behavior for TabsTrigger component
4
- # Button that activates associated content
5
- module UI::TabsTriggerBehavior
6
- # Determine initial state based on value
7
- def trigger_state
8
- if @value == @default_value
9
- "active"
10
- else
11
- "inactive"
12
- end
13
- end
3
+ # Shared behavior for TabsTrigger component
4
+ # Button that activates associated content
5
+ module UI::TabsTriggerBehavior
6
+ # Determine initial state based on value
7
+ def trigger_state
8
+ if @value == @default_value
9
+ "active"
10
+ else
11
+ "inactive"
12
+ end
13
+ end
14
14
 
15
- # Build complete HTML attributes hash for trigger
16
- def trigger_html_attributes
17
- base_attrs = @attributes&.except(:data) || {}
18
- user_data = @attributes&.fetch(:data, {}) || {}
15
+ # Build complete HTML attributes hash for trigger
16
+ def trigger_html_attributes
17
+ base_attrs = @attributes&.except(:data) || {}
18
+ user_data = @attributes&.fetch(:data, {}) || {}
19
19
 
20
- trigger_data = {
21
- ui__tabs_target: "trigger",
22
- value: @value,
23
- action: "click->ui--tabs#selectTab"
24
- }.merge(user_data)
20
+ trigger_data = {
21
+ ui__tabs_target: "trigger",
22
+ value: @value,
23
+ action: "click->ui--tabs#selectTab"
24
+ }.merge(user_data)
25
25
 
26
- base_attrs.merge(
27
- class: [
28
- "focus-visible:ring-ring/50 data-[state=active]:bg-background data-[state=active]:text-foreground",
29
- "dark:data-[state=active]:text-foreground inline-flex cursor-default items-center justify-center gap-2",
30
- "whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium outline-none transition-all",
31
- "focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
32
- "[&_svg]:pointer-events-none [&_svg]:shrink-0",
33
- @classes
34
- ].join(" ").strip,
35
- type: "button",
36
- role: "tab",
37
- "aria-selected": trigger_state == "active" ? "true" : "false",
38
- "aria-controls": "tabs-content-#{@value}",
39
- "data-state": trigger_state,
40
- "data-orientation": @orientation || "horizontal",
41
- "data-slot": "tabs-trigger",
42
- tabindex: trigger_state == "active" ? "0" : "-1",
43
- disabled: @disabled || false,
44
- data: trigger_data
45
- )
46
- end
47
- end
26
+ base_attrs.merge(
27
+ class: [
28
+ "focus-visible:ring-ring/50 data-[state=active]:bg-background data-[state=active]:text-foreground",
29
+ "dark:data-[state=active]:text-foreground inline-flex cursor-default items-center justify-center gap-2",
30
+ "whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium outline-none transition-all",
31
+ "focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
32
+ "[&_svg]:pointer-events-none [&_svg]:shrink-0",
33
+ @classes
34
+ ].join(" ").strip,
35
+ type: "button",
36
+ role: "tab",
37
+ "aria-selected": (trigger_state == "active") ? "true" : "false",
38
+ "aria-controls": "tabs-content-#{@value}",
39
+ "data-state": trigger_state,
40
+ "data-orientation": @orientation || "horizontal",
41
+ "data-slot": "tabs-trigger",
42
+ tabindex: (trigger_state == "active") ? "0" : "-1",
43
+ disabled: @disabled || false,
44
+ data: trigger_data
45
+ )
46
+ end
47
+ end
@@ -1,36 +1,44 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module UI
4
- # TextareaBehavior
5
- #
6
- # Shared behavior for Textarea component across ERB, ViewComponent, and Phlex implementations.
7
- # This module provides consistent styling and HTML attribute generation for textarea elements.
8
- module TextareaBehavior
9
- # Returns HTML attributes for the textarea element
10
- def textarea_html_attributes
11
- {
12
- class: textarea_classes,
13
- placeholder: @placeholder,
14
- name: @name,
15
- rows: @rows
16
- }.compact
17
- end
3
+ # UI::TextareaBehavior
4
+ #
5
+ # @ui_component Textarea
6
+ # @ui_category forms
7
+ #
8
+ # @ui_anatomy Textarea - Root textarea element (required)
9
+ #
10
+ # @ui_feature Custom styling with Tailwind classes
11
+ # @ui_feature Disabled state support
12
+ # @ui_feature ARIA attributes for accessibility
13
+ #
14
+ # @ui_related input
15
+ # @ui_related field
16
+ #
17
+ module UI::TextareaBehavior
18
+ # Returns HTML attributes for the textarea element
19
+ def textarea_html_attributes
20
+ {
21
+ class: textarea_classes,
22
+ placeholder: @placeholder,
23
+ name: @name,
24
+ rows: @rows
25
+ }.compact
26
+ end
18
27
 
19
- # Returns combined CSS classes for the textarea
20
- def textarea_classes
21
- classes_value = respond_to?(:classes, true) ? classes : @classes
22
- TailwindMerge::Merger.new.merge([
23
- textarea_base_classes,
24
- classes_value
28
+ # Returns combined CSS classes for the textarea
29
+ def textarea_classes
30
+ classes_value = respond_to?(:classes, true) ? classes : @classes
31
+ TailwindMerge::Merger.new.merge([
32
+ textarea_base_classes,
33
+ classes_value
25
34
 
26
- ].compact.join(" "))
27
- end
35
+ ].compact.join(" "))
36
+ end
28
37
 
29
- private
38
+ private
30
39
 
31
- # Base classes applied to all textareas (from shadcn/ui)
32
- def textarea_base_classes
33
- "border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm"
34
- end
40
+ # Base classes applied to all textareas (from shadcn/ui)
41
+ def textarea_base_classes
42
+ "border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm"
35
43
  end
36
44
  end
@@ -2,84 +2,99 @@
2
2
 
3
3
  require "tailwind_merge"
4
4
 
5
- module UI
6
- # ToggleBehavior
7
- #
8
- # Shared behavior for Toggle component across ERB, ViewComponent, and Phlex implementations.
9
- # This module provides consistent variant and size styling, along with HTML attribute generation.
10
- module ToggleBehavior
11
- # Renders the toggle HTML
12
- # This method can be used by both ERB partials and ViewComponents
13
- # @param content_block [Proc] Block that returns the toggle content
14
- # @return [String] HTML string for the toggle
15
- def render_toggle(&content_block)
16
- all_attributes = toggle_html_attributes.deep_merge(@attributes)
17
- content_tag(:button, **all_attributes, &content_block)
18
- end
5
+ # UI::ToggleBehavior
6
+ #
7
+ # @ui_component Toggle
8
+ # @ui_description Toggle - Phlex implementation
9
+ # @ui_category forms
10
+ #
11
+ # @ui_anatomy Toggle - A two-state button that can be either on or off. (required)
12
+ # @ui_anatomy Group - A container for a set of toggle items that can be toggled on or off.
13
+ #
14
+ # @ui_feature Custom styling with Tailwind classes
15
+ # @ui_feature Disabled state support
16
+ # @ui_feature ARIA attributes for accessibility
17
+ #
18
+ # @ui_aria_pattern Button
19
+ # @ui_aria_reference https://www.w3.org/WAI/ARIA/apg/patterns/button/
20
+ # @ui_aria_attr aria-pressed
21
+ #
22
+ # @ui_related checkbox
23
+ # @ui_related switch
24
+ # @ui_related toggle_group
25
+ #
26
+ module UI::ToggleBehavior
27
+ # Renders the toggle HTML
28
+ # This method can be used by both ERB partials and ViewComponents
29
+ # @param content_block [Proc] Block that returns the toggle content
30
+ # @return [String] HTML string for the toggle
31
+ def render_toggle(&content_block)
32
+ all_attributes = toggle_html_attributes.deep_merge(@attributes)
33
+ content_tag(:button, **all_attributes, &content_block)
34
+ end
19
35
 
20
- # Returns HTML attributes for the toggle element
21
- def toggle_html_attributes
22
- attrs = {
23
- class: toggle_classes,
24
- type: @type || "button",
25
- disabled: @disabled ? true : nil,
26
- "aria-pressed": @pressed ? "true" : "false",
27
- data: {
28
- controller: "ui--toggle",
29
- action: "click->ui--toggle#toggle",
30
- "ui--toggle-pressed-value": @pressed ? "true" : "false"
31
- }
36
+ # Returns HTML attributes for the toggle element
37
+ def toggle_html_attributes
38
+ attrs = {
39
+ class: toggle_classes,
40
+ type: @type || "button",
41
+ disabled: @disabled ? true : nil,
42
+ "aria-pressed": @pressed ? "true" : "false",
43
+ data: {
44
+ controller: "ui--toggle",
45
+ action: "click->ui--toggle#toggle",
46
+ "ui--toggle-pressed-value": @pressed ? "true" : "false"
32
47
  }
48
+ }
33
49
 
34
- # Add state attribute for CSS targeting
35
- attrs[:"data-state"] = @pressed ? "on" : "off"
36
- attrs[:"data-disabled"] = "" if @disabled
50
+ # Add state attribute for CSS targeting
51
+ attrs[:"data-state"] = @pressed ? "on" : "off"
52
+ attrs[:"data-disabled"] = "" if @disabled
37
53
 
38
- attrs.compact
39
- end
54
+ attrs.compact
55
+ end
40
56
 
41
- # Returns combined CSS classes for the toggle
42
- def toggle_classes
43
- classes_value = respond_to?(:classes, true) ? classes : @classes
44
- TailwindMerge::Merger.new.merge([
45
- toggle_base_classes,
46
- toggle_variant_classes,
47
- toggle_size_classes,
48
- classes_value
49
- ].compact.join(" "))
50
- end
57
+ # Returns combined CSS classes for the toggle
58
+ def toggle_classes
59
+ classes_value = respond_to?(:classes, true) ? classes : @classes
60
+ TailwindMerge::Merger.new.merge([
61
+ toggle_base_classes,
62
+ toggle_variant_classes,
63
+ toggle_size_classes,
64
+ classes_value
65
+ ].compact.join(" "))
66
+ end
51
67
 
52
- private
68
+ private
53
69
 
54
- # Base classes applied to all toggles
55
- def toggle_base_classes
56
- "inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap"
57
- end
70
+ # Base classes applied to all toggles
71
+ def toggle_base_classes
72
+ "inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap"
73
+ end
58
74
 
59
- # Variant-specific classes based on @variant
60
- def toggle_variant_classes
61
- case @variant.to_s
62
- when "default"
63
- "bg-transparent"
64
- when "outline"
65
- "border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground"
66
- else
67
- "bg-transparent"
68
- end
75
+ # Variant-specific classes based on @variant
76
+ def toggle_variant_classes
77
+ case @variant.to_s
78
+ when "default"
79
+ "bg-transparent"
80
+ when "outline"
81
+ "border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground"
82
+ else
83
+ "bg-transparent"
69
84
  end
85
+ end
70
86
 
71
- # Size-specific classes based on @size
72
- def toggle_size_classes
73
- case @size.to_s
74
- when "default"
75
- "h-9 px-2 min-w-9"
76
- when "sm"
77
- "h-8 px-1.5 min-w-8"
78
- when "lg"
79
- "h-10 px-2.5 min-w-10"
80
- else
81
- "h-9 px-2 min-w-9"
82
- end
87
+ # Size-specific classes based on @size
88
+ def toggle_size_classes
89
+ case @size.to_s
90
+ when "default"
91
+ "h-9 px-2 min-w-9"
92
+ when "sm"
93
+ "h-8 px-1.5 min-w-8"
94
+ when "lg"
95
+ "h-10 px-2.5 min-w-10"
96
+ else
97
+ "h-9 px-2 min-w-9"
83
98
  end
84
99
  end
85
100
  end