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
@@ -5,36 +5,36 @@
5
5
  # Shared behavior for Select trigger button across ERB, ViewComponent, and Phlex implementations.
6
6
  # This module provides consistent HTML attribute generation and styling.
7
7
  module UI::SelectTriggerBehavior
8
- # Returns HTML attributes for the select trigger element
9
- def select_trigger_html_attributes
10
- attributes_value = respond_to?(:attributes, true) ? attributes : @attributes
11
- {
12
- type: "button",
13
- role: "combobox",
14
- "aria-expanded": "false",
15
- "aria-haspopup": "listbox",
16
- class: select_trigger_classes,
17
- data: {
18
- ui__select_target: "trigger",
19
- action: "click->ui--select#toggle",
20
- slot: "select-trigger"
21
- }
22
- }.merge(attributes_value || {})
23
- end
8
+ # Returns HTML attributes for the select trigger element
9
+ def select_trigger_html_attributes
10
+ attributes_value = respond_to?(:attributes, true) ? attributes : @attributes
11
+ {
12
+ type: "button",
13
+ role: "combobox",
14
+ "aria-expanded": "false",
15
+ "aria-haspopup": "listbox",
16
+ class: select_trigger_classes,
17
+ data: {
18
+ ui__select_target: "trigger",
19
+ action: "click->ui--select#toggle",
20
+ slot: "select-trigger"
21
+ }
22
+ }.merge(attributes_value || {})
23
+ end
24
24
 
25
- # Returns combined CSS classes
26
- def select_trigger_classes
27
- classes_value = respond_to?(:classes, true) ? classes : @classes
28
- TailwindMerge::Merger.new.merge([
29
- select_trigger_base_classes,
30
- classes_value
31
- ].compact.join(" "))
32
- end
25
+ # Returns combined CSS classes
26
+ def select_trigger_classes
27
+ classes_value = respond_to?(:classes, true) ? classes : @classes
28
+ TailwindMerge::Merger.new.merge([
29
+ select_trigger_base_classes,
30
+ classes_value
31
+ ].compact.join(" "))
32
+ end
33
33
 
34
- private
34
+ private
35
35
 
36
- # Base classes for select trigger
37
- def select_trigger_base_classes
38
- "inline-flex h-9 w-full items-center justify-between gap-2 whitespace-nowrap rounded-lg border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background transition-[color,box-shadow] outline-none focus:ring-1 focus:ring-ring focus-visible:ring-[3px] focus-visible:border-ring focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1 appearance-none bg-[url('data:image/svg+xml;charset=UTF-8,%3csvg%20xmlns%3d%22http%3a%2f%2fwww.w3.org%2f2000%2fsvg%22%20width%3d%2224%22%20height%3d%2224%22%20viewBox%3d%220%200%2024%2024%22%20fill%3d%22none%22%20stroke%3d%22currentColor%22%20stroke-width%3d%222%22%20stroke-linecap%3d%22round%22%20stroke-linejoin%3d%22round%22%3e%3cpath%20d%3d%22m6%209%206%206%206-6%22%2f%3e%3c%2fsvg%3e')] bg-[length:1rem] bg-[right_0.75rem_center] bg-no-repeat pr-10 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 data-[placeholder]:text-muted-foreground aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:border-input dark:hover:bg-input/50"
39
- end
36
+ # Base classes for select trigger
37
+ def select_trigger_base_classes
38
+ "inline-flex h-9 w-full items-center justify-between gap-2 whitespace-nowrap rounded-lg border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background transition-[color,box-shadow] outline-none focus:ring-1 focus:ring-ring focus-visible:ring-[3px] focus-visible:border-ring focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1 appearance-none bg-[url('data:image/svg+xml;charset=UTF-8,%3csvg%20xmlns%3d%22http%3a%2f%2fwww.w3.org%2f2000%2fsvg%22%20width%3d%2224%22%20height%3d%2224%22%20viewBox%3d%220%200%2024%2024%22%20fill%3d%22none%22%20stroke%3d%22currentColor%22%20stroke-width%3d%222%22%20stroke-linecap%3d%22round%22%20stroke-linejoin%3d%22round%22%3e%3cpath%20d%3d%22m6%209%206%206%206-6%22%2f%3e%3c%2fsvg%3e')] bg-[length:1rem] bg-[right_0.75rem_center] bg-no-repeat pr-10 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 data-[placeholder]:text-muted-foreground aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:border-input dark:hover:bg-input/50"
40
39
  end
40
+ end
@@ -1,58 +1,62 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SeparatorBehavior
4
- #
5
- # Shared behavior for Separator component across ERB, ViewComponent, and Phlex implementations.
6
- # This module provides consistent styling and HTML attribute generation.
7
- #
8
- # Based on shadcn/ui Separator: https://ui.shadcn.com/docs/components/separator
9
- # Based on Radix UI Separator: https://www.radix-ui.com/primitives/docs/components/separator
10
- module UI::SeparatorBehavior
11
- # Returns HTML attributes for the separator element
12
- def separator_html_attributes
13
- attrs = {
14
- class: separator_classes,
15
- data: {
16
- slot: "separator",
17
- orientation: @orientation
18
- }
19
- }
3
+ # UI::SeparatorBehavior
4
+ #
5
+ # @ui_component Separator
6
+ # @ui_description Separator - Phlex implementation
7
+ # @ui_category layout
8
+ #
9
+ # @ui_anatomy Separator - Visually or semantically separates content. (required)
10
+ #
11
+ # @ui_feature Custom styling with Tailwind classes
12
+ # @ui_feature ARIA attributes for accessibility
13
+ #
14
+ module UI::SeparatorBehavior
15
+ # Returns HTML attributes for the separator element
16
+ def separator_html_attributes
17
+ attrs = {
18
+ class: separator_classes,
19
+ data: {
20
+ slot: "separator",
21
+ orientation: @orientation
22
+ }
23
+ }
20
24
 
21
- # Only add ARIA attributes when separator is not decorative
22
- unless @decorative
23
- attrs[:role] = "separator"
24
- attrs[:"aria-orientation"] = @orientation.to_s
25
- end
25
+ # Only add ARIA attributes when separator is not decorative
26
+ unless @decorative
27
+ attrs[:role] = "separator"
28
+ attrs[:"aria-orientation"] = @orientation.to_s
29
+ end
26
30
 
27
- attrs
28
- end
31
+ attrs
32
+ end
29
33
 
30
- # Returns combined CSS classes for the separator
31
- def separator_classes
32
- classes_value = respond_to?(:classes, true) ? classes : @classes
33
- TailwindMerge::Merger.new.merge([
34
- separator_base_classes,
35
- separator_orientation_classes,
36
- classes_value
37
- ].compact.join(" "))
38
- end
34
+ # Returns combined CSS classes for the separator
35
+ def separator_classes
36
+ classes_value = respond_to?(:classes, true) ? classes : @classes
37
+ TailwindMerge::Merger.new.merge([
38
+ separator_base_classes,
39
+ separator_orientation_classes,
40
+ classes_value
41
+ ].compact.join(" "))
42
+ end
39
43
 
40
- private
44
+ private
41
45
 
42
- # Base classes applied to all separators
43
- # Matches shadcn/ui v4 exactly
44
- def separator_base_classes
45
- "shrink-0 bg-border"
46
- end
46
+ # Base classes applied to all separators
47
+ # Matches shadcn/ui v4 exactly
48
+ def separator_base_classes
49
+ "shrink-0 bg-border"
50
+ end
47
51
 
48
- # Orientation-specific classes based on @orientation
49
- # Matches shadcn/ui v4 exactly
50
- def separator_orientation_classes
51
- case @orientation.to_s
52
- when "vertical"
53
- "h-full w-px"
54
- else # horizontal (default)
55
- "h-px w-full"
56
- end
57
- end
52
+ # Orientation-specific classes based on @orientation
53
+ # Matches shadcn/ui v4 exactly
54
+ def separator_orientation_classes
55
+ case @orientation.to_s
56
+ when "vertical"
57
+ "h-full w-px"
58
+ else # horizontal (default)
59
+ "h-px w-full"
58
60
  end
61
+ end
62
+ end
@@ -2,70 +2,70 @@
2
2
 
3
3
  require "tailwind_merge"
4
4
 
5
- # AsChildBehavior provides the `asChild` composition pattern
6
- # Inspired by Radix UI's Slot component
7
- #
8
- # When `as_child: true`, components don't render their own wrapper element.
9
- # Instead, they yield attributes to the block, allowing the child to receive them.
10
- #
11
- # Example:
12
- # render UI::DialogTrigger.new(as_child: true) do |attrs|
13
- # render UI::Button.new(**attrs, variant: :outline) do
14
- # "Open"
15
- # end
16
- # end
17
- module UI::SharedAsChildBehavior
18
- # Merges parent component attributes with child component attributes
19
- #
20
- # Uses Rails' deep_merge for nested hashes (like data attributes)
21
- # Uses TailwindMerge for CSS classes to resolve conflicts
22
- # Concatenates Stimulus actions so both handlers execute
23
- #
24
- # @param parent_attrs [Hash] Attributes from parent component
25
- # @param child_attrs [Hash] Attributes from child element
26
- # @return [Hash] Merged attributes hash
27
- #
28
- # @example Basic merge
29
- # merge_attributes(
30
- # { class: "p-4", data: { controller: "dialog" } },
31
- # { class: "p-2", data: { testid: "button" } }
32
- # )
33
- # # => { class: "p-2", data: { controller: "dialog", testid: "button" } }
34
- #
35
- # @example Stimulus actions concatenation
36
- # merge_attributes(
37
- # { data: { action: "click->dialog#open" } },
38
- # { data: { action: "click->analytics#track" } }
39
- # )
40
- # # => { data: { action: "click->dialog#open click->analytics#track" } }
41
- def merge_attributes(parent_attrs, child_attrs)
42
- # Use Rails' deep_merge for automatic nested hash merging
43
- merged = parent_attrs.deep_merge(child_attrs)
5
+ # AsChildBehavior provides the `asChild` composition pattern
6
+ # Inspired by Radix UI's Slot component
7
+ #
8
+ # When `as_child: true`, components don't render their own wrapper element.
9
+ # Instead, they yield attributes to the block, allowing the child to receive them.
10
+ #
11
+ # Example:
12
+ # render UI::DialogTrigger.new(as_child: true) do |attrs|
13
+ # render UI::Button.new(**attrs, variant: :outline) do
14
+ # "Open"
15
+ # end
16
+ # end
17
+ module UI::SharedAsChildBehavior
18
+ # Merges parent component attributes with child component attributes
19
+ #
20
+ # Uses Rails' deep_merge for nested hashes (like data attributes)
21
+ # Uses TailwindMerge for CSS classes to resolve conflicts
22
+ # Concatenates Stimulus actions so both handlers execute
23
+ #
24
+ # @param parent_attrs [Hash] Attributes from parent component
25
+ # @param child_attrs [Hash] Attributes from child element
26
+ # @return [Hash] Merged attributes hash
27
+ #
28
+ # @example Basic merge
29
+ # merge_attributes(
30
+ # { class: "p-4", data: { controller: "dialog" } },
31
+ # { class: "p-2", data: { testid: "button" } }
32
+ # )
33
+ # # => { class: "p-2", data: { controller: "dialog", testid: "button" } }
34
+ #
35
+ # @example Stimulus actions concatenation
36
+ # merge_attributes(
37
+ # { data: { action: "click->dialog#open" } },
38
+ # { data: { action: "click->analytics#track" } }
39
+ # )
40
+ # # => { data: { action: "click->dialog#open click->analytics#track" } }
41
+ def merge_attributes(parent_attrs, child_attrs)
42
+ # Use Rails' deep_merge for automatic nested hash merging
43
+ merged = parent_attrs.deep_merge(child_attrs)
44
44
 
45
- # CSS Classes: Use TailwindMerge to resolve conflicts intelligently
46
- # Example: "p-4 text-sm" + "p-2 text-lg" => "p-2 text-lg"
47
- # (later values override earlier conflicting values)
48
- if parent_attrs[:class] && child_attrs[:class]
49
- merged[:class] = TailwindMerge::Merger.new.merge(
50
- [parent_attrs[:class], child_attrs[:class]].join(" ")
51
- )
52
- end
53
-
54
- # Stimulus Actions: Concatenate so both handlers execute
55
- # This is critical for composition - both parent and child actions should run
56
- if parent_attrs.dig(:data, :action) && child_attrs.dig(:data, :action)
57
- merged[:data][:action] = [
58
- parent_attrs.dig(:data, :action),
59
- child_attrs.dig(:data, :action)
60
- ].join(" ")
61
- end
45
+ # CSS Classes: Use TailwindMerge to resolve conflicts intelligently
46
+ # Example: "p-4 text-sm" + "p-2 text-lg" => "p-2 text-lg"
47
+ # (later values override earlier conflicting values)
48
+ if parent_attrs[:class] && child_attrs[:class]
49
+ merged[:class] = TailwindMerge::Merger.new.merge(
50
+ [parent_attrs[:class], child_attrs[:class]].join(" ")
51
+ )
52
+ end
62
53
 
63
- # Styles: Concatenate with semicolon (if both exist)
64
- # Example: "padding: 8px" + "background: blue" => "padding: 8px; background: blue"
65
- if parent_attrs[:style] && child_attrs[:style]
66
- merged[:style] = "#{parent_attrs[:style]}; #{child_attrs[:style]}"
67
- end
54
+ # Stimulus Actions: Concatenate so both handlers execute
55
+ # This is critical for composition - both parent and child actions should run
56
+ if parent_attrs.dig(:data, :action) && child_attrs.dig(:data, :action)
57
+ merged[:data][:action] = [
58
+ parent_attrs.dig(:data, :action),
59
+ child_attrs.dig(:data, :action)
60
+ ].join(" ")
61
+ end
68
62
 
69
- merged
70
- end
63
+ # Styles: Concatenate with semicolon (if both exist)
64
+ # Example: "padding: 8px" + "background: blue" => "padding: 8px; background: blue"
65
+ if parent_attrs[:style] && child_attrs[:style]
66
+ merged[:style] = "#{parent_attrs[:style]}; #{child_attrs[:style]}"
71
67
  end
68
+
69
+ merged
70
+ end
71
+ end
@@ -2,45 +2,66 @@
2
2
 
3
3
  require "tailwind_merge"
4
4
 
5
- # Shared behavior for Sheet component
6
- # Reuses ui--dialog Stimulus controller since Sheet extends Dialog
7
- module UI::SheetBehavior
8
- # Generate data attributes for Stimulus controller
9
- def sheet_data_attributes
10
- attrs = {
11
- controller: "ui--dialog",
12
- ui__dialog_open_value: @open.to_s
13
- }
14
-
15
- # Only add optional values if they are explicitly set (not nil)
16
- attrs[:ui__dialog_close_on_escape_value] = @close_on_escape.to_s unless @close_on_escape.nil?
17
- attrs[:ui__dialog_close_on_overlay_click_value] = @close_on_overlay_click.to_s unless @close_on_overlay_click.nil?
18
-
19
- attrs
20
- end
21
-
22
- # Merge user-provided data attributes
23
- def merged_sheet_data_attributes
24
- user_data = @attributes&.fetch(:data, {}) || {}
25
- user_data.merge(sheet_data_attributes)
26
- end
27
-
28
- # Build complete HTML attributes hash
29
- def sheet_html_attributes
30
- base_attrs = @attributes&.except(:data) || {}
31
- base_attrs.merge(
32
- class: sheet_classes,
33
- data: merged_sheet_data_attributes
34
- )
35
- end
36
-
37
- # Base CSS classes
38
- def sheet_base_classes
39
- ""
40
- end
41
-
42
- # Generate final classes using TailwindMerge
43
- def sheet_classes
44
- TailwindMerge::Merger.new.merge([sheet_base_classes, @classes].compact.join(" "))
45
- end
46
- end
5
+ # UI::SheetBehavior
6
+ #
7
+ # @ui_component Sheet
8
+ # @ui_category overlay
9
+ #
10
+ # @ui_anatomy Sheet - Root container with state management (required)
11
+ # @ui_anatomy Close - Button to close/dismiss the component
12
+ # @ui_anatomy Content - Main content container (required)
13
+ # @ui_anatomy Description - Descriptive text element
14
+ # @ui_anatomy Footer - Footer section with actions
15
+ # @ui_anatomy Header - Header section with title and controls
16
+ # @ui_anatomy Overlay - Background overlay that dims the page
17
+ # @ui_anatomy Title - Title text element
18
+ # @ui_anatomy Trigger - Button or element that activates the component (required)
19
+ #
20
+ # @ui_feature Custom styling with Tailwind classes
21
+ #
22
+ # @ui_aria_pattern Dialog (Modal)
23
+ # @ui_aria_reference https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/
24
+ #
25
+ # @ui_related dialog
26
+ # @ui_related drawer
27
+ #
28
+ module UI::SheetBehavior
29
+ # Generate data attributes for Stimulus controller
30
+ def sheet_data_attributes
31
+ attrs = {
32
+ controller: "ui--dialog",
33
+ ui__dialog_open_value: @open.to_s
34
+ }
35
+
36
+ # Only add optional values if they are explicitly set (not nil)
37
+ attrs[:ui__dialog_close_on_escape_value] = @close_on_escape.to_s unless @close_on_escape.nil?
38
+ attrs[:ui__dialog_close_on_overlay_click_value] = @close_on_overlay_click.to_s unless @close_on_overlay_click.nil?
39
+
40
+ attrs
41
+ end
42
+
43
+ # Merge user-provided data attributes
44
+ def merged_sheet_data_attributes
45
+ user_data = @attributes&.fetch(:data, {}) || {}
46
+ user_data.merge(sheet_data_attributes)
47
+ end
48
+
49
+ # Build complete HTML attributes hash
50
+ def sheet_html_attributes
51
+ base_attrs = @attributes&.except(:data) || {}
52
+ base_attrs.merge(
53
+ class: sheet_classes,
54
+ data: merged_sheet_data_attributes
55
+ )
56
+ end
57
+
58
+ # Base CSS classes
59
+ def sheet_base_classes
60
+ ""
61
+ end
62
+
63
+ # Generate final classes using TailwindMerge
64
+ def sheet_classes
65
+ TailwindMerge::Merger.new.merge([sheet_base_classes, @classes].compact.join(" "))
66
+ end
67
+ end
@@ -2,91 +2,91 @@
2
2
 
3
3
  require "tailwind_merge"
4
4
 
5
- # Shared behavior for Sheet Content component
6
- # Handles side variants and slide animations
7
- module UI::SheetContentBehavior
8
- SIDES = %w[top right bottom left].freeze
5
+ # Shared behavior for Sheet Content component
6
+ # Handles side variants and slide animations
7
+ module UI::SheetContentBehavior
8
+ SIDES = %w[top right bottom left].freeze
9
9
 
10
- # Base CSS classes for sheet content (all sides)
11
- # Match shadcn exactly - slide animations with proper pointer-events
12
- def sheet_content_base_classes
13
- [
14
- # Base structure (same as shadcn) - shadow only when open to avoid shadow bleeding when closed
15
- "bg-background fixed z-50 flex flex-col gap-4",
16
- "data-[state=open]:shadow-lg data-[state=closed]:shadow-none",
17
- # Pointer events control - prevent interaction when closed
18
- "data-[state=open]:pointer-events-auto data-[state=closed]:pointer-events-none",
19
- # Transition timing (same as shadcn)
20
- "transition ease-in-out",
21
- "data-[state=closed]:duration-300 data-[state=open]:duration-500",
22
- # Animation (same as shadcn)
23
- "data-[state=open]:animate-in data-[state=closed]:animate-out",
24
- # Prevent exit animation on page load (our addition)
25
- "data-[initial]:animate-none data-[initial]:invisible"
26
- ].join(" ")
27
- end
10
+ # Base CSS classes for sheet content (all sides)
11
+ # Match shadcn exactly - slide animations with proper pointer-events
12
+ def sheet_content_base_classes
13
+ [
14
+ # Base structure (same as shadcn) - shadow only when open to avoid shadow bleeding when closed
15
+ "bg-background fixed z-50 flex flex-col gap-4",
16
+ "data-[state=open]:shadow-lg data-[state=closed]:shadow-none",
17
+ # Pointer events control - prevent interaction when closed
18
+ "data-[state=open]:pointer-events-auto data-[state=closed]:pointer-events-none",
19
+ # Transition timing (same as shadcn)
20
+ "transition ease-in-out",
21
+ "data-[state=closed]:duration-300 data-[state=open]:duration-500",
22
+ # Animation (same as shadcn)
23
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
24
+ # Prevent exit animation on page load (our addition)
25
+ "data-[initial]:animate-none data-[initial]:invisible"
26
+ ].join(" ")
27
+ end
28
28
 
29
- # Side-specific CSS classes
30
- # Include translate classes to keep content off-screen when closed (after animation ends)
31
- def sheet_content_side_classes
32
- side = @side || "right"
29
+ # Side-specific CSS classes
30
+ # Include translate classes to keep content off-screen when closed (after animation ends)
31
+ def sheet_content_side_classes
32
+ side = @side || "right"
33
33
 
34
- case side.to_s
35
- when "right"
36
- "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right data-[state=closed]:translate-x-full data-[state=open]:translate-x-0 inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm"
37
- when "left"
38
- "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left data-[state=closed]:-translate-x-full data-[state=open]:translate-x-0 inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm"
39
- when "top"
40
- "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top data-[state=closed]:-translate-y-full data-[state=open]:translate-y-0 inset-x-0 top-0 h-auto border-b"
41
- when "bottom"
42
- "data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom data-[state=closed]:translate-y-full data-[state=open]:translate-y-0 inset-x-0 bottom-0 h-auto border-t"
43
- else
44
- # Default to right
45
- "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right data-[state=closed]:translate-x-full data-[state=open]:translate-x-0 inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm"
46
- end
47
- end
34
+ case side.to_s
35
+ when "right"
36
+ "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right data-[state=closed]:translate-x-full data-[state=open]:translate-x-0 inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm"
37
+ when "left"
38
+ "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left data-[state=closed]:-translate-x-full data-[state=open]:translate-x-0 inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm"
39
+ when "top"
40
+ "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top data-[state=closed]:-translate-y-full data-[state=open]:translate-y-0 inset-x-0 top-0 h-auto border-b"
41
+ when "bottom"
42
+ "data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom data-[state=closed]:translate-y-full data-[state=open]:translate-y-0 inset-x-0 bottom-0 h-auto border-t"
43
+ else
44
+ # Default to right
45
+ "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right data-[state=closed]:translate-x-full data-[state=open]:translate-x-0 inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm"
46
+ end
47
+ end
48
48
 
49
- # Merge base classes with side classes and custom classes
50
- def sheet_content_classes
51
- TailwindMerge::Merger.new.merge([
52
- sheet_content_base_classes,
53
- sheet_content_side_classes,
54
- @classes
55
- ].compact.join(" "))
56
- end
49
+ # Merge base classes with side classes and custom classes
50
+ def sheet_content_classes
51
+ TailwindMerge::Merger.new.merge([
52
+ sheet_content_base_classes,
53
+ sheet_content_side_classes,
54
+ @classes
55
+ ].compact.join(" "))
56
+ end
57
57
 
58
- # Data attributes for Stimulus target
59
- def sheet_content_data_attributes
60
- {
61
- ui__dialog_target: "content"
62
- }
63
- end
58
+ # Data attributes for Stimulus target
59
+ def sheet_content_data_attributes
60
+ {
61
+ ui__dialog_target: "content"
62
+ }
63
+ end
64
64
 
65
- # Merge user-provided data attributes
66
- def merged_sheet_content_data_attributes
67
- user_data = @attributes&.fetch(:data, {}) || {}
68
- user_data.merge(sheet_content_data_attributes)
69
- end
65
+ # Merge user-provided data attributes
66
+ def merged_sheet_content_data_attributes
67
+ user_data = @attributes&.fetch(:data, {}) || {}
68
+ user_data.merge(sheet_content_data_attributes)
69
+ end
70
70
 
71
- # Build complete HTML attributes hash for sheet content
72
- def sheet_content_html_attributes
73
- base_attrs = @attributes&.except(:data) || {}
74
- attrs = base_attrs.merge(
75
- class: sheet_content_classes,
76
- role: "dialog",
77
- "aria-modal": "true",
78
- "data-state": @open ? "open" : "closed",
79
- data: merged_sheet_content_data_attributes
80
- )
81
- # Add data-initial when closed to prevent exit animations on page load
82
- attrs["data-initial"] = "" unless @open
83
- # Add inert when closed to prevent focus on elements inside
84
- attrs[:inert] = true unless @open
85
- attrs
86
- end
71
+ # Build complete HTML attributes hash for sheet content
72
+ def sheet_content_html_attributes
73
+ base_attrs = @attributes&.except(:data) || {}
74
+ attrs = base_attrs.merge(
75
+ class: sheet_content_classes,
76
+ role: "dialog",
77
+ "aria-modal": "true",
78
+ "data-state": @open ? "open" : "closed",
79
+ data: merged_sheet_content_data_attributes
80
+ )
81
+ # Add data-initial when closed to prevent exit animations on page load
82
+ attrs["data-initial"] = "" unless @open
83
+ # Add inert when closed to prevent focus on elements inside
84
+ attrs[:inert] = true unless @open
85
+ attrs
86
+ end
87
87
 
88
- # CSS classes for the built-in close button
89
- def sheet_content_close_button_classes
90
- "ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none"
91
- end
92
- end
88
+ # CSS classes for the built-in close button
89
+ def sheet_content_close_button_classes
90
+ "ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none"
91
+ end
92
+ end
@@ -2,26 +2,26 @@
2
2
 
3
3
  require "tailwind_merge"
4
4
 
5
- # Shared behavior for Sheet Footer component
6
- module UI::SheetFooterBehavior
7
- # Returns HTML attributes for the sheet footer
8
- def sheet_footer_html_attributes
9
- {
10
- class: sheet_footer_classes
11
- }
12
- end
5
+ # Shared behavior for Sheet Footer component
6
+ module UI::SheetFooterBehavior
7
+ # Returns HTML attributes for the sheet footer
8
+ def sheet_footer_html_attributes
9
+ {
10
+ class: sheet_footer_classes
11
+ }
12
+ end
13
13
 
14
- # Returns combined CSS classes for the sheet footer
15
- def sheet_footer_classes
16
- TailwindMerge::Merger.new.merge([
17
- sheet_footer_base_classes,
18
- @classes
19
- ].compact.join(" "))
20
- end
14
+ # Returns combined CSS classes for the sheet footer
15
+ def sheet_footer_classes
16
+ TailwindMerge::Merger.new.merge([
17
+ sheet_footer_base_classes,
18
+ @classes
19
+ ].compact.join(" "))
20
+ end
21
21
 
22
- # Base classes applied to sheet footer
23
- # Different from Dialog: uses mt-auto and p-4
24
- def sheet_footer_base_classes
25
- "mt-auto flex flex-col gap-2 p-4"
26
- end
27
- end
22
+ # Base classes applied to sheet footer
23
+ # Different from Dialog: uses mt-auto and p-4
24
+ def sheet_footer_base_classes
25
+ "mt-auto flex flex-col gap-2 p-4"
26
+ end
27
+ end