fernandes-ui 0.1.1 → 0.1.4

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 (796) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +7 -0
  3. data/app/assets/javascripts/ui.esm.js +15 -9
  4. data/app/assets/javascripts/ui.js +15 -9
  5. data/app/behaviors/ui/accordion_behavior.rb +50 -26
  6. data/app/behaviors/ui/accordion_content_behavior.rb +58 -58
  7. data/app/behaviors/ui/accordion_item_behavior.rb +38 -38
  8. data/app/behaviors/ui/accordion_trigger_behavior.rb +65 -65
  9. data/app/behaviors/ui/alert_behavior.rb +53 -36
  10. data/app/behaviors/ui/alert_description_behavior.rb +25 -25
  11. data/app/behaviors/ui/alert_dialog_action_behavior.rb +21 -21
  12. data/app/behaviors/ui/alert_dialog_behavior.rb +58 -33
  13. data/app/behaviors/ui/alert_dialog_cancel_behavior.rb +21 -21
  14. data/app/behaviors/ui/alert_dialog_content_behavior.rb +34 -34
  15. data/app/behaviors/ui/alert_dialog_description_behavior.rb +19 -19
  16. data/app/behaviors/ui/alert_dialog_footer_behavior.rb +20 -20
  17. data/app/behaviors/ui/alert_dialog_header_behavior.rb +19 -19
  18. data/app/behaviors/ui/alert_dialog_overlay_behavior.rb +56 -56
  19. data/app/behaviors/ui/alert_dialog_title_behavior.rb +19 -19
  20. data/app/behaviors/ui/alert_dialog_trigger_behavior.rb +31 -31
  21. data/app/behaviors/ui/alert_title_behavior.rb +25 -25
  22. data/app/behaviors/ui/aspect_ratio_behavior.rb +46 -38
  23. data/app/behaviors/ui/avatar_behavior.rb +44 -37
  24. data/app/behaviors/ui/avatar_fallback_behavior.rb +37 -37
  25. data/app/behaviors/ui/avatar_image_behavior.rb +40 -40
  26. data/app/behaviors/ui/badge_behavior.rb +50 -43
  27. data/app/behaviors/ui/blockquote_behavior.rb +25 -17
  28. data/app/behaviors/ui/breadcrumb_behavior.rb +35 -19
  29. data/app/behaviors/ui/breadcrumb_ellipsis_behavior.rb +28 -28
  30. data/app/behaviors/ui/breadcrumb_item_behavior.rb +26 -26
  31. data/app/behaviors/ui/breadcrumb_link_behavior.rb +27 -27
  32. data/app/behaviors/ui/breadcrumb_list_behavior.rb +26 -26
  33. data/app/behaviors/ui/breadcrumb_page_behavior.rb +29 -29
  34. data/app/behaviors/ui/breadcrumb_separator_behavior.rb +28 -28
  35. data/app/behaviors/ui/button_behavior.rb +94 -82
  36. data/app/behaviors/ui/button_group_behavior.rb +48 -48
  37. data/app/behaviors/ui/button_group_separator_behavior.rb +29 -29
  38. data/app/behaviors/ui/button_group_text_behavior.rb +29 -29
  39. data/app/behaviors/ui/calendar_behavior.rb +131 -104
  40. data/app/behaviors/ui/card_action_behavior.rb +26 -26
  41. data/app/behaviors/ui/card_behavior.rb +40 -26
  42. data/app/behaviors/ui/card_content_behavior.rb +26 -26
  43. data/app/behaviors/ui/card_description_behavior.rb +26 -26
  44. data/app/behaviors/ui/card_footer_behavior.rb +26 -26
  45. data/app/behaviors/ui/card_header_behavior.rb +26 -26
  46. data/app/behaviors/ui/card_title_behavior.rb +26 -26
  47. data/app/behaviors/ui/carousel_behavior.rb +74 -48
  48. data/app/behaviors/ui/carousel_content_behavior.rb +53 -53
  49. data/app/behaviors/ui/carousel_item_behavior.rb +20 -20
  50. data/app/behaviors/ui/carousel_next_behavior.rb +31 -31
  51. data/app/behaviors/ui/carousel_previous_behavior.rb +31 -31
  52. data/app/behaviors/ui/checkbox_behavior.rb +54 -38
  53. data/app/behaviors/ui/collapsible_behavior.rb +49 -34
  54. data/app/behaviors/ui/collapsible_content_behavior.rb +31 -31
  55. data/app/behaviors/ui/collapsible_trigger_behavior.rb +47 -47
  56. data/app/behaviors/ui/command_behavior.rb +56 -29
  57. data/app/behaviors/ui/command_dialog_behavior.rb +44 -28
  58. data/app/behaviors/ui/command_empty_behavior.rb +28 -28
  59. data/app/behaviors/ui/command_group_behavior.rb +34 -34
  60. data/app/behaviors/ui/command_input_behavior.rb +40 -40
  61. data/app/behaviors/ui/command_item_behavior.rb +39 -39
  62. data/app/behaviors/ui/command_list_behavior.rb +30 -30
  63. data/app/behaviors/ui/command_separator_behavior.rb +23 -23
  64. data/app/behaviors/ui/command_shortcut_behavior.rb +22 -22
  65. data/app/behaviors/ui/context_menu_behavior.rb +55 -28
  66. data/app/behaviors/ui/context_menu_checkbox_item_behavior.rb +32 -32
  67. data/app/behaviors/ui/context_menu_content_behavior.rb +32 -32
  68. data/app/behaviors/ui/context_menu_item_behavior.rb +34 -34
  69. data/app/behaviors/ui/context_menu_label_behavior.rb +28 -28
  70. data/app/behaviors/ui/context_menu_radio_group_behavior.rb +17 -17
  71. data/app/behaviors/ui/context_menu_radio_item_behavior.rb +32 -32
  72. data/app/behaviors/ui/context_menu_separator_behavior.rb +18 -18
  73. data/app/behaviors/ui/context_menu_shortcut_behavior.rb +17 -17
  74. data/app/behaviors/ui/context_menu_trigger_behavior.rb +28 -28
  75. data/app/behaviors/ui/date_picker_behavior.rb +95 -78
  76. data/app/behaviors/ui/date_picker_input_behavior.rb +56 -56
  77. data/app/behaviors/ui/date_picker_trigger_behavior.rb +56 -56
  78. data/app/behaviors/ui/dialog_behavior.rb +67 -42
  79. data/app/behaviors/ui/dialog_content_behavior.rb +38 -38
  80. data/app/behaviors/ui/dialog_footer_behavior.rb +20 -20
  81. data/app/behaviors/ui/dialog_header_behavior.rb +20 -20
  82. data/app/behaviors/ui/dialog_overlay_behavior.rb +57 -57
  83. data/app/behaviors/ui/drawer_behavior.rb +79 -52
  84. data/app/behaviors/ui/drawer_close_behavior.rb +8 -8
  85. data/app/behaviors/ui/drawer_content_behavior.rb +90 -90
  86. data/app/behaviors/ui/drawer_description_behavior.rb +17 -17
  87. data/app/behaviors/ui/drawer_footer_behavior.rb +17 -17
  88. data/app/behaviors/ui/drawer_handle_behavior.rb +33 -33
  89. data/app/behaviors/ui/drawer_header_behavior.rb +23 -23
  90. data/app/behaviors/ui/drawer_overlay_behavior.rb +63 -63
  91. data/app/behaviors/ui/drawer_title_behavior.rb +20 -20
  92. data/app/behaviors/ui/drawer_trigger_behavior.rb +15 -15
  93. data/app/behaviors/ui/dropdown_menu_behavior.rb +59 -37
  94. data/app/behaviors/ui/dropdown_menu_checkbox_item_behavior.rb +37 -39
  95. data/app/behaviors/ui/dropdown_menu_content_behavior.rb +32 -32
  96. data/app/behaviors/ui/dropdown_menu_item_behavior.rb +34 -34
  97. data/app/behaviors/ui/dropdown_menu_label_behavior.rb +25 -25
  98. data/app/behaviors/ui/dropdown_menu_radio_group_behavior.rb +17 -17
  99. data/app/behaviors/ui/dropdown_menu_radio_item_behavior.rb +37 -39
  100. data/app/behaviors/ui/dropdown_menu_separator_behavior.rb +19 -19
  101. data/app/behaviors/ui/dropdown_menu_shortcut_behavior.rb +17 -17
  102. data/app/behaviors/ui/dropdown_menu_sub_behavior.rb +17 -17
  103. data/app/behaviors/ui/dropdown_menu_sub_content_behavior.rb +33 -33
  104. data/app/behaviors/ui/dropdown_menu_sub_trigger_behavior.rb +30 -30
  105. data/app/behaviors/ui/dropdown_menu_trigger_behavior.rb +39 -39
  106. data/app/behaviors/ui/empty_behavior.rb +111 -100
  107. data/app/behaviors/ui/field_behavior.rb +51 -37
  108. data/app/behaviors/ui/field_content_behavior.rb +18 -20
  109. data/app/behaviors/ui/field_description_behavior.rb +18 -20
  110. data/app/behaviors/ui/field_error_behavior.rb +42 -37
  111. data/app/behaviors/ui/field_group_behavior.rb +18 -20
  112. data/app/behaviors/ui/field_label_behavior.rb +19 -21
  113. data/app/behaviors/ui/field_legend_behavior.rb +26 -22
  114. data/app/behaviors/ui/field_separator_behavior.rb +24 -26
  115. data/app/behaviors/ui/field_set_behavior.rb +24 -20
  116. data/app/behaviors/ui/field_title_behavior.rb +18 -20
  117. data/app/behaviors/ui/h1_behavior.rb +25 -17
  118. data/app/behaviors/ui/h2_behavior.rb +25 -17
  119. data/app/behaviors/ui/h3_behavior.rb +25 -17
  120. data/app/behaviors/ui/h4_behavior.rb +25 -17
  121. data/app/behaviors/ui/hover_card_behavior.rb +41 -25
  122. data/app/behaviors/ui/hover_card_content_behavior.rb +35 -35
  123. data/app/behaviors/ui/hover_card_trigger_behavior.rb +38 -38
  124. data/app/behaviors/ui/inline_code_behavior.rb +25 -17
  125. data/app/behaviors/ui/input_behavior.rb +52 -42
  126. data/app/behaviors/ui/input_group_addon_behavior.rb +9 -2
  127. data/app/behaviors/ui/input_group_behavior.rb +3 -1
  128. data/app/behaviors/ui/input_group_button_behavior.rb +16 -8
  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 +33 -6
  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 +28 -7
  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 +73 -71
  256. data/app/behaviors/ui/tooltip_behavior.rb +46 -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/base.rb +8 -0
  282. data/app/components/ui/blockquote.rb +1 -0
  283. data/app/components/ui/breadcrumb.rb +26 -26
  284. data/app/components/ui/breadcrumb_ellipsis.rb +47 -47
  285. data/app/components/ui/breadcrumb_item.rb +22 -22
  286. data/app/components/ui/breadcrumb_link.rb +22 -22
  287. data/app/components/ui/breadcrumb_list.rb +22 -22
  288. data/app/components/ui/breadcrumb_page.rb +20 -20
  289. data/app/components/ui/breadcrumb_separator.rb +43 -43
  290. data/app/components/ui/button.rb +44 -44
  291. data/app/components/ui/button_group.rb +44 -44
  292. data/app/components/ui/button_group_separator.rb +28 -28
  293. data/app/components/ui/button_group_text.rb +40 -40
  294. data/app/components/ui/calendar.rb +231 -180
  295. data/app/components/ui/card.rb +10 -10
  296. data/app/components/ui/card_action.rb +10 -10
  297. data/app/components/ui/card_content.rb +10 -10
  298. data/app/components/ui/card_description.rb +10 -10
  299. data/app/components/ui/card_footer.rb +10 -10
  300. data/app/components/ui/card_header.rb +10 -10
  301. data/app/components/ui/card_title.rb +10 -10
  302. data/app/components/ui/carousel.rb +14 -13
  303. data/app/components/ui/carousel_content.rb +12 -11
  304. data/app/components/ui/carousel_item.rb +11 -10
  305. data/app/components/ui/carousel_next.rb +13 -25
  306. data/app/components/ui/carousel_previous.rb +13 -25
  307. data/app/components/ui/checkbox.rb +43 -43
  308. data/app/components/ui/collapsible.rb +17 -17
  309. data/app/components/ui/collapsible_content.rb +11 -11
  310. data/app/components/ui/collapsible_trigger.rb +15 -15
  311. data/app/components/ui/combobox_wrapper.rb +53 -53
  312. data/app/components/ui/command.rb +12 -11
  313. data/app/components/ui/command_dialog.rb +17 -16
  314. data/app/components/ui/command_empty.rb +10 -10
  315. data/app/components/ui/command_group.rb +15 -15
  316. data/app/components/ui/command_input.rb +26 -26
  317. data/app/components/ui/command_item.rb +12 -12
  318. data/app/components/ui/command_list.rb +10 -10
  319. data/app/components/ui/command_separator.rb +10 -10
  320. data/app/components/ui/command_shortcut.rb +10 -10
  321. data/app/components/ui/context_menu.rb +25 -25
  322. data/app/components/ui/context_menu_checkbox_item.rb +42 -42
  323. data/app/components/ui/context_menu_content.rb +22 -22
  324. data/app/components/ui/context_menu_item.rb +34 -34
  325. data/app/components/ui/context_menu_label.rb +22 -22
  326. data/app/components/ui/context_menu_radio_group.rb +23 -23
  327. data/app/components/ui/context_menu_radio_item.rb +42 -42
  328. data/app/components/ui/context_menu_separator.rb +19 -19
  329. data/app/components/ui/context_menu_shortcut.rb +20 -20
  330. data/app/components/ui/context_menu_trigger.rb +22 -22
  331. data/app/components/ui/date_picker.rb +116 -116
  332. data/app/components/ui/date_picker_input.rb +66 -66
  333. data/app/components/ui/date_picker_trigger.rb +63 -63
  334. data/app/components/ui/dialog.rb +14 -14
  335. data/app/components/ui/dialog_close.rb +22 -22
  336. data/app/components/ui/dialog_content.rb +12 -12
  337. data/app/components/ui/dialog_description.rb +17 -17
  338. data/app/components/ui/dialog_footer.rb +10 -10
  339. data/app/components/ui/dialog_header.rb +10 -10
  340. data/app/components/ui/dialog_overlay.rb +13 -13
  341. data/app/components/ui/dialog_title.rb +17 -17
  342. data/app/components/ui/dialog_trigger.rb +32 -32
  343. data/app/components/ui/drawer.rb +34 -34
  344. data/app/components/ui/drawer_close.rb +18 -18
  345. data/app/components/ui/drawer_content.rb +14 -14
  346. data/app/components/ui/drawer_description.rb +11 -11
  347. data/app/components/ui/drawer_footer.rb +11 -11
  348. data/app/components/ui/drawer_handle.rb +10 -10
  349. data/app/components/ui/drawer_header.rb +11 -11
  350. data/app/components/ui/drawer_overlay.rb +12 -12
  351. data/app/components/ui/drawer_title.rb +11 -11
  352. data/app/components/ui/drawer_trigger.rb +29 -29
  353. data/app/components/ui/dropdown_menu.rb +49 -49
  354. data/app/components/ui/dropdown_menu_checkbox_item.rb +45 -45
  355. data/app/components/ui/dropdown_menu_content.rb +24 -24
  356. data/app/components/ui/dropdown_menu_item.rb +34 -34
  357. data/app/components/ui/dropdown_menu_label.rb +22 -22
  358. data/app/components/ui/dropdown_menu_radio_group.rb +23 -23
  359. data/app/components/ui/dropdown_menu_radio_item.rb +47 -47
  360. data/app/components/ui/dropdown_menu_separator.rb +19 -19
  361. data/app/components/ui/dropdown_menu_shortcut.rb +20 -20
  362. data/app/components/ui/dropdown_menu_sub.rb +23 -23
  363. data/app/components/ui/dropdown_menu_sub_content.rb +26 -26
  364. data/app/components/ui/dropdown_menu_sub_trigger.rb +40 -40
  365. data/app/components/ui/dropdown_menu_trigger.rb +37 -36
  366. data/app/components/ui/empty.rb +21 -21
  367. data/app/components/ui/empty_content.rb +18 -18
  368. data/app/components/ui/empty_description.rb +16 -16
  369. data/app/components/ui/empty_header.rb +20 -20
  370. data/app/components/ui/empty_media.rb +24 -24
  371. data/app/components/ui/empty_title.rb +16 -16
  372. data/app/components/ui/field.rb +30 -30
  373. data/app/components/ui/field_content.rb +20 -20
  374. data/app/components/ui/field_description.rb +20 -20
  375. data/app/components/ui/field_error.rb +50 -50
  376. data/app/components/ui/field_group.rb +23 -23
  377. data/app/components/ui/field_label.rb +22 -22
  378. data/app/components/ui/field_legend.rb +25 -25
  379. data/app/components/ui/field_separator.rb +41 -41
  380. data/app/components/ui/field_set.rb +22 -22
  381. data/app/components/ui/field_title.rb +20 -20
  382. data/app/components/ui/h1.rb +1 -0
  383. data/app/components/ui/h2.rb +1 -0
  384. data/app/components/ui/h3.rb +1 -0
  385. data/app/components/ui/h4.rb +1 -0
  386. data/app/components/ui/hover_card.rb +22 -22
  387. data/app/components/ui/hover_card_content.rb +28 -28
  388. data/app/components/ui/hover_card_trigger.rb +40 -40
  389. data/app/components/ui/inline_code.rb +1 -0
  390. data/app/components/ui/input.rb +15 -15
  391. data/app/components/ui/input_group.rb +28 -28
  392. data/app/components/ui/input_group_addon.rb +27 -27
  393. data/app/components/ui/input_group_button.rb +42 -35
  394. data/app/components/ui/input_group_input.rb +39 -39
  395. data/app/components/ui/input_group_text.rb +26 -26
  396. data/app/components/ui/input_group_textarea.rb +39 -39
  397. data/app/components/ui/input_otp.rb +48 -48
  398. data/app/components/ui/input_otp_group.rb +21 -21
  399. data/app/components/ui/input_otp_separator.rb +28 -28
  400. data/app/components/ui/input_otp_slot.rb +28 -28
  401. data/app/components/ui/item.rb +20 -20
  402. data/app/components/ui/item_actions.rb +10 -10
  403. data/app/components/ui/item_content.rb +10 -10
  404. data/app/components/ui/item_description.rb +10 -10
  405. data/app/components/ui/item_footer.rb +10 -10
  406. data/app/components/ui/item_group.rb +10 -10
  407. data/app/components/ui/item_header.rb +10 -10
  408. data/app/components/ui/item_media.rb +11 -11
  409. data/app/components/ui/item_separator.rb +10 -10
  410. data/app/components/ui/item_title.rb +10 -10
  411. data/app/components/ui/kbd.rb +24 -24
  412. data/app/components/ui/kbd_group.rb +25 -25
  413. data/app/components/ui/label.rb +25 -25
  414. data/app/components/ui/large.rb +1 -0
  415. data/app/components/ui/lead.rb +1 -0
  416. data/app/components/ui/list.rb +1 -0
  417. data/app/components/ui/menubar.rb +31 -31
  418. data/app/components/ui/menubar_checkbox_item.rb +45 -45
  419. data/app/components/ui/menubar_content.rb +27 -27
  420. data/app/components/ui/menubar_item.rb +34 -34
  421. data/app/components/ui/menubar_label.rb +24 -24
  422. data/app/components/ui/menubar_menu.rb +24 -24
  423. data/app/components/ui/menubar_radio_group.rb +24 -24
  424. data/app/components/ui/menubar_radio_item.rb +47 -47
  425. data/app/components/ui/menubar_separator.rb +18 -18
  426. data/app/components/ui/menubar_shortcut.rb +22 -22
  427. data/app/components/ui/menubar_sub.rb +25 -25
  428. data/app/components/ui/menubar_sub_content.rb +22 -22
  429. data/app/components/ui/menubar_sub_trigger.rb +41 -41
  430. data/app/components/ui/menubar_trigger.rb +21 -21
  431. data/app/components/ui/muted.rb +1 -0
  432. data/app/components/ui/navigation_menu.rb +43 -43
  433. data/app/components/ui/navigation_menu_content.rb +28 -28
  434. data/app/components/ui/navigation_menu_item.rb +31 -31
  435. data/app/components/ui/navigation_menu_link.rb +60 -60
  436. data/app/components/ui/navigation_menu_list.rb +23 -23
  437. data/app/components/ui/navigation_menu_trigger.rb +44 -44
  438. data/app/components/ui/navigation_menu_viewport.rb +20 -20
  439. data/app/components/ui/p.rb +1 -0
  440. data/app/components/ui/pagination.rb +15 -15
  441. data/app/components/ui/pagination_content.rb +15 -15
  442. data/app/components/ui/pagination_ellipsis.rb +20 -20
  443. data/app/components/ui/pagination_item.rb +13 -13
  444. data/app/components/ui/pagination_link.rb +21 -21
  445. data/app/components/ui/pagination_next.rb +25 -25
  446. data/app/components/ui/pagination_previous.rb +25 -25
  447. data/app/components/ui/popover.rb +67 -42
  448. data/app/components/ui/popover_content.rb +25 -25
  449. data/app/components/ui/popover_trigger.rb +30 -30
  450. data/app/components/ui/progress.rb +32 -32
  451. data/app/components/ui/radio_button.rb +44 -44
  452. data/app/components/ui/resizable_handle.rb +49 -49
  453. data/app/components/ui/resizable_panel.rb +31 -31
  454. data/app/components/ui/resizable_panel_group.rb +37 -37
  455. data/app/components/ui/responsive_dialog.rb +81 -81
  456. data/app/components/ui/scroll_area.rb +54 -54
  457. data/app/components/ui/scroll_area_corner.rb +27 -27
  458. data/app/components/ui/scroll_area_scrollbar.rb +37 -37
  459. data/app/components/ui/scroll_area_thumb.rb +31 -31
  460. data/app/components/ui/scroll_area_viewport.rb +33 -33
  461. data/app/components/ui/select.rb +49 -37
  462. data/app/components/ui/select_content.rb +36 -36
  463. data/app/components/ui/select_group.rb +32 -32
  464. data/app/components/ui/select_item.rb +58 -58
  465. data/app/components/ui/select_label.rb +28 -28
  466. data/app/components/ui/select_scroll_down_button.rb +39 -39
  467. data/app/components/ui/select_scroll_up_button.rb +39 -39
  468. data/app/components/ui/select_trigger.rb +38 -38
  469. data/app/components/ui/separator.rb +35 -35
  470. data/app/components/ui/sheet.rb +14 -14
  471. data/app/components/ui/sheet_close.rb +32 -32
  472. data/app/components/ui/sheet_content.rb +45 -45
  473. data/app/components/ui/sheet_description.rb +17 -17
  474. data/app/components/ui/sheet_footer.rb +10 -10
  475. data/app/components/ui/sheet_header.rb +10 -10
  476. data/app/components/ui/sheet_overlay.rb +13 -13
  477. data/app/components/ui/sheet_title.rb +17 -17
  478. data/app/components/ui/sheet_trigger.rb +21 -21
  479. data/app/components/ui/sidebar.rb +85 -85
  480. data/app/components/ui/sidebar_content.rb +27 -27
  481. data/app/components/ui/sidebar_footer.rb +29 -29
  482. data/app/components/ui/sidebar_group.rb +45 -45
  483. data/app/components/ui/sidebar_group_action.rb +39 -39
  484. data/app/components/ui/sidebar_group_content.rb +35 -35
  485. data/app/components/ui/sidebar_group_label.rb +38 -38
  486. data/app/components/ui/sidebar_header.rb +29 -29
  487. data/app/components/ui/sidebar_input.rb +35 -35
  488. data/app/components/ui/sidebar_inset.rb +35 -35
  489. data/app/components/ui/sidebar_menu.rb +32 -32
  490. data/app/components/ui/sidebar_menu_action.rb +52 -52
  491. data/app/components/ui/sidebar_menu_badge.rb +32 -32
  492. data/app/components/ui/sidebar_menu_button.rb +63 -63
  493. data/app/components/ui/sidebar_menu_item.rb +38 -38
  494. data/app/components/ui/sidebar_menu_skeleton.rb +57 -57
  495. data/app/components/ui/sidebar_menu_sub.rb +43 -43
  496. data/app/components/ui/sidebar_menu_sub_button.rb +40 -40
  497. data/app/components/ui/sidebar_menu_sub_item.rb +27 -27
  498. data/app/components/ui/sidebar_provider.rb +66 -66
  499. data/app/components/ui/sidebar_rail.rb +28 -28
  500. data/app/components/ui/sidebar_separator.rb +25 -25
  501. data/app/components/ui/sidebar_trigger.rb +54 -54
  502. data/app/components/ui/skeleton.rb +37 -37
  503. data/app/components/ui/small.rb +1 -0
  504. data/app/components/ui/sonner_toaster.rb +49 -49
  505. data/app/components/ui/spinner.rb +36 -36
  506. data/app/components/ui/switch.rb +62 -62
  507. data/app/components/ui/table.rb +42 -42
  508. data/app/components/ui/table_body.rb +22 -22
  509. data/app/components/ui/table_caption.rb +11 -11
  510. data/app/components/ui/table_cell.rb +11 -11
  511. data/app/components/ui/table_footer.rb +22 -22
  512. data/app/components/ui/table_head.rb +11 -11
  513. data/app/components/ui/table_header.rb +22 -22
  514. data/app/components/ui/table_row.rb +19 -19
  515. data/app/components/ui/tabs.rb +36 -36
  516. data/app/components/ui/tabs_content.rb +26 -26
  517. data/app/components/ui/tabs_list.rb +23 -23
  518. data/app/components/ui/tabs_trigger.rb +29 -29
  519. data/app/components/ui/textarea.rb +15 -15
  520. data/app/components/ui/toggle.rb +38 -38
  521. data/app/components/ui/toggle_group.rb +58 -52
  522. data/app/components/ui/toggle_group_item.rb +62 -61
  523. data/app/components/ui/tooltip.rb +49 -25
  524. data/app/components/ui/tooltip_content.rb +31 -31
  525. data/app/components/ui/tooltip_trigger.rb +36 -36
  526. data/app/helpers/ui/combobox_behavior.rb +1 -1
  527. data/app/helpers/ui/empty_behavior.rb +6 -6
  528. data/app/helpers/ui/input_group_input_behavior.rb +1 -1
  529. data/app/helpers/ui/input_group_textarea_behavior.rb +1 -1
  530. data/app/helpers/ui/popover_behavior.rb +5 -2
  531. data/app/helpers/ui/popover_content_behavior.rb +1 -1
  532. data/app/helpers/ui/popover_trigger_behavior.rb +1 -1
  533. data/app/helpers/ui/select_behavior.rb +61 -61
  534. data/app/helpers/ui/select_content_behavior.rb +31 -31
  535. data/app/helpers/ui/select_group_behavior.rb +24 -24
  536. data/app/helpers/ui/select_item_behavior.rb +34 -34
  537. data/app/helpers/ui/select_label_behavior.rb +23 -23
  538. data/app/helpers/ui/select_scroll_down_button_behavior.rb +38 -38
  539. data/app/helpers/ui/select_scroll_up_button_behavior.rb +38 -38
  540. data/app/helpers/ui/select_trigger_behavior.rb +29 -29
  541. data/app/helpers/ui/spinner_behavior.rb +1 -1
  542. data/app/javascript/ui/controllers/accordion_controller.js +15 -3
  543. data/app/javascript/ui/controllers/collapsible_controller.js +2 -0
  544. data/app/javascript/ui/controllers/command_controller.js +4 -3
  545. data/app/javascript/ui/controllers/dropdown_controller.js +8 -14
  546. data/app/view_components/ui/accordion_component.rb +31 -31
  547. data/app/view_components/ui/accordion_content_component.rb +24 -24
  548. data/app/view_components/ui/accordion_item_component.rb +37 -37
  549. data/app/view_components/ui/accordion_trigger_component.rb +25 -25
  550. data/app/view_components/ui/alert_component.rb +18 -18
  551. data/app/view_components/ui/alert_description_component.rb +16 -16
  552. data/app/view_components/ui/alert_title_component.rb +16 -16
  553. data/app/view_components/ui/aspect_ratio_component.rb +20 -20
  554. data/app/view_components/ui/avatar_component.rb +16 -16
  555. data/app/view_components/ui/avatar_fallback_component.rb +16 -16
  556. data/app/view_components/ui/avatar_image_component.rb +19 -19
  557. data/app/view_components/ui/badge_component.rb +18 -18
  558. data/app/view_components/ui/blockquote_component.rb +1 -0
  559. data/app/view_components/ui/breadcrumb_component.rb +28 -28
  560. data/app/view_components/ui/breadcrumb_ellipsis_component.rb +41 -41
  561. data/app/view_components/ui/breadcrumb_item_component.rb +24 -24
  562. data/app/view_components/ui/breadcrumb_link_component.rb +24 -24
  563. data/app/view_components/ui/breadcrumb_list_component.rb +24 -24
  564. data/app/view_components/ui/breadcrumb_page_component.rb +22 -22
  565. data/app/view_components/ui/breadcrumb_separator_component.rb +38 -38
  566. data/app/view_components/ui/button_component.rb +39 -39
  567. data/app/view_components/ui/button_group_component.rb +33 -33
  568. data/app/view_components/ui/button_group_separator_component.rb +29 -29
  569. data/app/view_components/ui/button_group_text_component.rb +25 -25
  570. data/app/view_components/ui/calendar_component.rb +241 -182
  571. data/app/view_components/ui/card_action_component.rb +10 -10
  572. data/app/view_components/ui/card_component.rb +10 -10
  573. data/app/view_components/ui/card_content_component.rb +10 -10
  574. data/app/view_components/ui/card_description_component.rb +10 -10
  575. data/app/view_components/ui/card_footer_component.rb +10 -10
  576. data/app/view_components/ui/card_header_component.rb +10 -10
  577. data/app/view_components/ui/card_title_component.rb +10 -10
  578. data/app/view_components/ui/carousel_component.rb +14 -13
  579. data/app/view_components/ui/carousel_content_component.rb +12 -11
  580. data/app/view_components/ui/carousel_item_component.rb +11 -10
  581. data/app/view_components/ui/carousel_next_component.rb +15 -27
  582. data/app/view_components/ui/carousel_previous_component.rb +15 -27
  583. data/app/view_components/ui/checkbox_component.rb +48 -48
  584. data/app/view_components/ui/collapsible_component.rb +17 -17
  585. data/app/view_components/ui/collapsible_content_component.rb +11 -11
  586. data/app/view_components/ui/collapsible_trigger_component.rb +15 -15
  587. data/app/view_components/ui/combobox_wrapper_component.rb +53 -53
  588. data/app/view_components/ui/command_component.rb +12 -11
  589. data/app/view_components/ui/command_dialog_component.rb +17 -16
  590. data/app/view_components/ui/command_empty_component.rb +10 -10
  591. data/app/view_components/ui/command_group_component.rb +16 -16
  592. data/app/view_components/ui/command_input_component.rb +15 -15
  593. data/app/view_components/ui/command_item_component.rb +12 -12
  594. data/app/view_components/ui/command_list_component.rb +10 -10
  595. data/app/view_components/ui/command_separator_component.rb +10 -10
  596. data/app/view_components/ui/command_shortcut_component.rb +10 -10
  597. data/app/view_components/ui/context_menu_checkbox_item_component.rb +36 -37
  598. data/app/view_components/ui/context_menu_component.rb +14 -14
  599. data/app/view_components/ui/context_menu_content_component.rb +14 -14
  600. data/app/view_components/ui/context_menu_item_component.rb +22 -22
  601. data/app/view_components/ui/context_menu_label_component.rb +16 -16
  602. data/app/view_components/ui/context_menu_radio_group_component.rb +13 -13
  603. data/app/view_components/ui/context_menu_radio_item_component.rb +36 -37
  604. data/app/view_components/ui/context_menu_separator_component.rb +11 -11
  605. data/app/view_components/ui/context_menu_shortcut_component.rb +13 -13
  606. data/app/view_components/ui/context_menu_trigger_component.rb +14 -14
  607. data/app/view_components/ui/date_picker_component.rb +125 -125
  608. data/app/view_components/ui/date_picker_input_component.rb +68 -68
  609. data/app/view_components/ui/date_picker_trigger_component.rb +67 -67
  610. data/app/view_components/ui/dialog_close_component.rb +61 -61
  611. data/app/view_components/ui/dialog_component.rb +45 -45
  612. data/app/view_components/ui/dialog_content_component.rb +23 -23
  613. data/app/view_components/ui/dialog_description_component.rb +21 -21
  614. data/app/view_components/ui/dialog_footer_component.rb +17 -17
  615. data/app/view_components/ui/dialog_header_component.rb +18 -18
  616. data/app/view_components/ui/dialog_overlay_component.rb +30 -30
  617. data/app/view_components/ui/dialog_title_component.rb +21 -21
  618. data/app/view_components/ui/dialog_trigger_component.rb +61 -61
  619. data/app/view_components/ui/drawer_close_component.rb +30 -30
  620. data/app/view_components/ui/drawer_component.rb +76 -76
  621. data/app/view_components/ui/drawer_content_component.rb +26 -26
  622. data/app/view_components/ui/drawer_description_component.rb +17 -17
  623. data/app/view_components/ui/drawer_footer_component.rb +20 -20
  624. data/app/view_components/ui/drawer_handle_component.rb +19 -19
  625. data/app/view_components/ui/drawer_header_component.rb +20 -20
  626. data/app/view_components/ui/drawer_overlay_component.rb +22 -22
  627. data/app/view_components/ui/drawer_title_component.rb +17 -17
  628. data/app/view_components/ui/drawer_trigger_component.rb +60 -60
  629. data/app/view_components/ui/dropdown_menu_checkbox_item_component.rb +26 -26
  630. data/app/view_components/ui/dropdown_menu_component.rb +45 -45
  631. data/app/view_components/ui/dropdown_menu_content_component.rb +13 -13
  632. data/app/view_components/ui/dropdown_menu_item_component.rb +16 -16
  633. data/app/view_components/ui/dropdown_menu_label_component.rb +13 -13
  634. data/app/view_components/ui/dropdown_menu_radio_group_component.rb +12 -12
  635. data/app/view_components/ui/dropdown_menu_radio_item_component.rb +27 -27
  636. data/app/view_components/ui/dropdown_menu_separator_component.rb +11 -11
  637. data/app/view_components/ui/dropdown_menu_shortcut_component.rb +12 -12
  638. data/app/view_components/ui/dropdown_menu_sub_component.rb +12 -12
  639. data/app/view_components/ui/dropdown_menu_sub_content_component.rb +14 -14
  640. data/app/view_components/ui/dropdown_menu_sub_trigger_component.rb +22 -22
  641. data/app/view_components/ui/dropdown_menu_trigger_component.rb +32 -48
  642. data/app/view_components/ui/empty_component.rb +12 -12
  643. data/app/view_components/ui/empty_content_component.rb +12 -12
  644. data/app/view_components/ui/empty_description_component.rb +12 -12
  645. data/app/view_components/ui/empty_header_component.rb +12 -12
  646. data/app/view_components/ui/empty_media_component.rb +13 -13
  647. data/app/view_components/ui/empty_title_component.rb +12 -12
  648. data/app/view_components/ui/field_component.rb +36 -36
  649. data/app/view_components/ui/field_content_component.rb +22 -22
  650. data/app/view_components/ui/field_description_component.rb +22 -22
  651. data/app/view_components/ui/field_error_component.rb +55 -55
  652. data/app/view_components/ui/field_group_component.rb +27 -27
  653. data/app/view_components/ui/field_label_component.rb +24 -24
  654. data/app/view_components/ui/field_legend_component.rb +29 -29
  655. data/app/view_components/ui/field_separator_component.rb +43 -43
  656. data/app/view_components/ui/field_set_component.rb +25 -25
  657. data/app/view_components/ui/field_title_component.rb +22 -22
  658. data/app/view_components/ui/h3_component.rb +1 -0
  659. data/app/view_components/ui/h4_component.rb +1 -0
  660. data/app/view_components/ui/hover_card_component.rb +24 -24
  661. data/app/view_components/ui/hover_card_content_component.rb +30 -30
  662. data/app/view_components/ui/hover_card_trigger_component.rb +47 -47
  663. data/app/view_components/ui/inline_code_component.rb +1 -0
  664. data/app/view_components/ui/input_component.rb +17 -17
  665. data/app/view_components/ui/input_group_addon_component.rb +31 -31
  666. data/app/view_components/ui/input_group_button_component.rb +47 -32
  667. data/app/view_components/ui/input_group_component.rb +30 -30
  668. data/app/view_components/ui/input_group_input_component.rb +38 -38
  669. data/app/view_components/ui/input_group_text_component.rb +28 -28
  670. data/app/view_components/ui/input_group_textarea_component.rb +38 -38
  671. data/app/view_components/ui/input_otp_component.rb +52 -52
  672. data/app/view_components/ui/input_otp_group_component.rb +23 -23
  673. data/app/view_components/ui/input_otp_separator_component.rb +29 -29
  674. data/app/view_components/ui/input_otp_slot_component.rb +28 -28
  675. data/app/view_components/ui/item_actions_component.rb +12 -12
  676. data/app/view_components/ui/item_component.rb +23 -23
  677. data/app/view_components/ui/item_content_component.rb +12 -12
  678. data/app/view_components/ui/item_description_component.rb +12 -12
  679. data/app/view_components/ui/item_footer_component.rb +12 -12
  680. data/app/view_components/ui/item_group_component.rb +12 -12
  681. data/app/view_components/ui/item_header_component.rb +12 -12
  682. data/app/view_components/ui/item_media_component.rb +13 -13
  683. data/app/view_components/ui/item_separator_component.rb +12 -12
  684. data/app/view_components/ui/item_title_component.rb +12 -12
  685. data/app/view_components/ui/kbd_component.rb +25 -25
  686. data/app/view_components/ui/kbd_group_component.rb +26 -26
  687. data/app/view_components/ui/label_component.rb +18 -18
  688. data/app/view_components/ui/large_component.rb +1 -0
  689. data/app/view_components/ui/lead_component.rb +1 -0
  690. data/app/view_components/ui/list_component.rb +1 -0
  691. data/app/view_components/ui/menubar_checkbox_item_component.rb +40 -40
  692. data/app/view_components/ui/menubar_component.rb +19 -19
  693. data/app/view_components/ui/menubar_content_component.rb +21 -21
  694. data/app/view_components/ui/menubar_item_component.rb +26 -26
  695. data/app/view_components/ui/menubar_label_component.rb +18 -18
  696. data/app/view_components/ui/menubar_menu_component.rb +20 -20
  697. data/app/view_components/ui/menubar_radio_group_component.rb +21 -21
  698. data/app/view_components/ui/menubar_radio_item_component.rb +41 -41
  699. data/app/view_components/ui/menubar_separator_component.rb +16 -16
  700. data/app/view_components/ui/menubar_shortcut_component.rb +17 -17
  701. data/app/view_components/ui/menubar_sub_component.rb +20 -20
  702. data/app/view_components/ui/menubar_sub_content_component.rb +20 -20
  703. data/app/view_components/ui/menubar_sub_trigger_component.rb +37 -37
  704. data/app/view_components/ui/menubar_trigger_component.rb +18 -18
  705. data/app/view_components/ui/muted_component.rb +1 -0
  706. data/app/view_components/ui/navigation_menu_component.rb +37 -37
  707. data/app/view_components/ui/navigation_menu_content_component.rb +18 -18
  708. data/app/view_components/ui/navigation_menu_item_component.rb +18 -18
  709. data/app/view_components/ui/navigation_menu_link_component.rb +83 -83
  710. data/app/view_components/ui/navigation_menu_list_component.rb +16 -16
  711. data/app/view_components/ui/navigation_menu_trigger_component.rb +38 -38
  712. data/app/view_components/ui/navigation_menu_viewport_component.rb +16 -16
  713. data/app/view_components/ui/p_component.rb +1 -0
  714. data/app/view_components/ui/pagination_component.rb +14 -14
  715. data/app/view_components/ui/pagination_content_component.rb +14 -14
  716. data/app/view_components/ui/pagination_ellipsis_component.rb +20 -20
  717. data/app/view_components/ui/pagination_item_component.rb +12 -12
  718. data/app/view_components/ui/pagination_link_component.rb +21 -21
  719. data/app/view_components/ui/pagination_next_component.rb +24 -24
  720. data/app/view_components/ui/pagination_previous_component.rb +25 -25
  721. data/app/view_components/ui/popover_component.rb +70 -49
  722. data/app/view_components/ui/popover_content_component.rb +36 -36
  723. data/app/view_components/ui/popover_trigger_component.rb +64 -59
  724. data/app/view_components/ui/progress_component.rb +33 -33
  725. data/app/view_components/ui/radio_button_component.rb +49 -49
  726. data/app/view_components/ui/resizable_handle_component.rb +27 -27
  727. data/app/view_components/ui/resizable_panel_component.rb +33 -33
  728. data/app/view_components/ui/resizable_panel_group_component.rb +39 -39
  729. data/app/view_components/ui/responsive_dialog_component.rb +70 -70
  730. data/app/view_components/ui/scroll_area_component.rb +39 -39
  731. data/app/view_components/ui/scroll_area_corner_component.rb +18 -18
  732. data/app/view_components/ui/scroll_area_scrollbar_component.rb +28 -28
  733. data/app/view_components/ui/scroll_area_thumb_component.rb +23 -23
  734. data/app/view_components/ui/scroll_area_viewport_component.rb +25 -25
  735. data/app/view_components/ui/select_component.rb +37 -26
  736. data/app/view_components/ui/select_content_component.rb +35 -36
  737. data/app/view_components/ui/select_group_component.rb +22 -22
  738. data/app/view_components/ui/select_item_component.rb +39 -40
  739. data/app/view_components/ui/select_label_component.rb +18 -18
  740. data/app/view_components/ui/select_scroll_down_button_component.rb +29 -29
  741. data/app/view_components/ui/select_scroll_up_button_component.rb +29 -29
  742. data/app/view_components/ui/select_trigger_component.rb +22 -22
  743. data/app/view_components/ui/separator_component.rb +23 -23
  744. data/app/view_components/ui/sheet_close_component.rb +61 -61
  745. data/app/view_components/ui/sheet_component.rb +45 -45
  746. data/app/view_components/ui/sheet_content_component.rb +43 -43
  747. data/app/view_components/ui/sheet_description_component.rb +20 -20
  748. data/app/view_components/ui/sheet_footer_component.rb +17 -17
  749. data/app/view_components/ui/sheet_header_component.rb +17 -17
  750. data/app/view_components/ui/sheet_overlay_component.rb +30 -30
  751. data/app/view_components/ui/sheet_title_component.rb +20 -20
  752. data/app/view_components/ui/sheet_trigger_component.rb +50 -50
  753. data/app/view_components/ui/skeleton_component.rb +23 -23
  754. data/app/view_components/ui/slider_component.rb +55 -55
  755. data/app/view_components/ui/slider_range_component.rb +19 -19
  756. data/app/view_components/ui/slider_thumb_component.rb +25 -25
  757. data/app/view_components/ui/slider_track_component.rb +22 -22
  758. data/app/view_components/ui/small_component.rb +1 -0
  759. data/app/view_components/ui/sonner_toaster_component.rb +49 -49
  760. data/app/view_components/ui/spinner_component.rb +41 -41
  761. data/app/view_components/ui/switch_component.rb +52 -52
  762. data/app/view_components/ui/table_body_component.rb +14 -14
  763. data/app/view_components/ui/table_caption_component.rb +10 -10
  764. data/app/view_components/ui/table_cell_component.rb +10 -10
  765. data/app/view_components/ui/table_component.rb +20 -20
  766. data/app/view_components/ui/table_footer_component.rb +14 -14
  767. data/app/view_components/ui/table_head_component.rb +10 -10
  768. data/app/view_components/ui/table_header_component.rb +14 -14
  769. data/app/view_components/ui/table_row_component.rb +16 -16
  770. data/app/view_components/ui/tabs_component.rb +33 -33
  771. data/app/view_components/ui/tabs_content_component.rb +28 -28
  772. data/app/view_components/ui/tabs_list_component.rb +24 -24
  773. data/app/view_components/ui/tabs_trigger_component.rb +31 -31
  774. data/app/view_components/ui/textarea_component.rb +14 -14
  775. data/app/view_components/ui/toggle_component.rb +43 -43
  776. data/app/view_components/ui/toggle_group_component.rb +60 -60
  777. data/app/view_components/ui/toggle_group_item_component.rb +62 -62
  778. data/app/view_components/ui/tooltip_component.rb +44 -13
  779. data/app/view_components/ui/tooltip_content_component.rb +23 -23
  780. data/app/view_components/ui/tooltip_trigger_component.rb +38 -18
  781. data/app/views/ui/_avatar.html.erb +8 -4
  782. data/app/views/ui/_button.html.erb +16 -0
  783. data/app/views/ui/_command.html.erb +2 -0
  784. data/app/views/ui/_date_picker.html.erb +4 -4
  785. data/app/views/ui/_popover.html.erb +30 -4
  786. data/app/views/ui/_select.html.erb +13 -2
  787. data/app/views/ui/_skeleton.html.erb +1 -1
  788. data/app/views/ui/_tooltip.html.erb +28 -2
  789. data/app/views/ui/carousel/_next.html.erb +1 -1
  790. data/app/views/ui/carousel/_previous.html.erb +1 -1
  791. data/app/views/ui/dropdown_menu/_trigger.html.erb +3 -1
  792. data/app/views/ui/input_group/_button.html.erb +14 -3
  793. data/app/views/ui/popover/_trigger.html.erb +22 -2
  794. data/app/views/ui/tooltip/_trigger.html.erb +16 -21
  795. data/lib/ui/version.rb +1 -1
  796. metadata +2 -1
@@ -1,45 +1,45 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Text - Phlex implementation
4
- #
5
- # Displays text within a button group.
6
- # Uses TextBehavior module for shared styling logic.
7
- # Supports asChild pattern for rendering custom components.
8
- #
9
- # Based on shadcn/ui ButtonGroup: https://ui.shadcn.com/docs/components/button-group
10
- #
11
- # @example Basic text
12
- # render UI::ButtonGroup.new do
13
- # render UI::Text.new { "Label" }
14
- # render UI::Button.new(variant: :outline) { "Button" }
15
- # end
16
- #
17
- # @example With asChild (render as label)
18
- # render UI::ButtonGroup.new do
19
- # render UI::Text.new(as_child: true) do |attrs|
20
- # label(**attrs, for: "name") { "Name" }
21
- # end
22
- # input(type: "text", id: "name")
23
- # end
24
- class UI::ButtonGroupText < Phlex::HTML
25
- include UI::ButtonGroupTextBehavior
3
+ # Text - Phlex implementation
4
+ #
5
+ # Displays text within a button group.
6
+ # Uses TextBehavior module for shared styling logic.
7
+ # Supports asChild pattern for rendering custom components.
8
+ #
9
+ # Based on shadcn/ui ButtonGroup: https://ui.shadcn.com/docs/components/button-group
10
+ #
11
+ # @example Basic text
12
+ # render UI::ButtonGroup.new do
13
+ # render UI::Text.new { "Label" }
14
+ # render UI::Button.new(variant: :outline) { "Button" }
15
+ # end
16
+ #
17
+ # @example With asChild (render as label)
18
+ # render UI::ButtonGroup.new do
19
+ # render UI::Text.new(as_child: true) do |attrs|
20
+ # label(**attrs, for: "name") { "Name" }
21
+ # end
22
+ # input(type: "text", id: "name")
23
+ # end
24
+ class UI::ButtonGroupText < Phlex::HTML
25
+ include UI::ButtonGroupTextBehavior
26
26
 
27
- # @param as_child [Boolean] Whether to yield attributes to a child component
28
- # @param classes [String] Additional CSS classes to merge
29
- # @param attributes [Hash] Additional HTML attributes
30
- def initialize(as_child: false, classes: "", **attributes)
31
- @as_child = as_child
32
- @classes = classes
33
- @attributes = attributes
34
- end
27
+ # @param as_child [Boolean] Whether to yield attributes to a child component
28
+ # @param classes [String] Additional CSS classes to merge
29
+ # @param attributes [Hash] Additional HTML attributes
30
+ def initialize(as_child: false, classes: "", **attributes)
31
+ @as_child = as_child
32
+ @classes = classes
33
+ @attributes = attributes
34
+ end
35
35
 
36
- def view_template(&block)
37
- if @as_child
38
- # Yield attributes to the block for custom rendering
39
- yield(text_html_attributes.deep_merge(@attributes))
40
- else
41
- # Render as a div
42
- div(**text_html_attributes.deep_merge(@attributes), &block)
43
- end
44
- end
36
+ def view_template(&block)
37
+ if @as_child
38
+ # Yield attributes to the block for custom rendering
39
+ yield(text_html_attributes.deep_merge(@attributes))
40
+ else
41
+ # Render as a div
42
+ div(**text_html_attributes.deep_merge(@attributes), &block)
45
43
  end
44
+ end
45
+ end
@@ -1,209 +1,260 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Calendar component (Phlex)
4
- # A date picker calendar with support for single, range, and multiple selection
5
- #
6
- # @example Basic usage (single date)
7
- # render UI::Calendar.new(selected: Date.today)
8
- #
9
- # @example Range selection
10
- # render UI::Calendar.new(mode: :range, selected: Date.today..Date.today + 7)
11
- #
12
- # @example Multiple months
13
- # render UI::Calendar.new(number_of_months: 2)
14
- #
15
- # @example With dropdowns
16
- # render UI::Calendar.new(show_dropdowns: true)
17
- class UI::Calendar < Phlex::HTML
18
- include UI::CalendarBehavior
19
-
20
- # @param mode [Symbol] :single, :range, or :multiple selection mode
21
- # @param selected [Date, Range, Array] initially selected date(s)
22
- # @param month [Date] initially displayed month
23
- # @param number_of_months [Integer] number of months to display side by side
24
- # @param week_starts_on [Integer] 0 for Sunday, 1 for Monday, etc.
25
- # @param locale [String] BCP 47 locale tag for formatting (default: "en-US")
26
- # @param min_date [Date] minimum selectable date
27
- # @param max_date [Date] maximum selectable date
28
- # @param disabled_dates [Array<Date>] dates that cannot be selected
29
- # @param show_outside_days [Boolean] show days from adjacent months
30
- # @param fixed_weeks [Boolean] always show 6 weeks
31
- # @param show_dropdowns [Boolean] show month/year dropdowns
32
- # @param year_range [Integer] number of years to show in dropdown
33
- # @param min_range_days [Integer] minimum days for range selection (0 = no min)
34
- # @param max_range_days [Integer] maximum days for range selection (0 = no max)
35
- # @param exclude_disabled [Boolean] prevent ranges that contain disabled dates
36
- # @param use_native_select [Boolean] use native HTML select for dropdowns (default: true)
37
- # @param name [String] form field name for hidden input
38
- # @param classes [String] additional CSS classes
39
- # @param attributes [Hash] additional HTML attributes
40
- def initialize(
41
- mode: :single,
42
- selected: nil,
43
- month: Date.today,
44
- number_of_months: 1,
45
- week_starts_on: 0,
46
- locale: "en-US",
47
- min_date: nil,
48
- max_date: nil,
49
- disabled_dates: [],
50
- show_outside_days: true,
51
- fixed_weeks: false,
52
- show_dropdowns: false,
53
- year_range: 100,
54
- min_range_days: 0,
55
- max_range_days: 0,
56
- exclude_disabled: false,
57
- use_native_select: true,
58
- name: nil,
59
- classes: "",
60
- **attributes
61
- )
62
- @mode = mode
63
- @selected = selected
64
- @month = month
65
- @number_of_months = number_of_months
66
- @week_starts_on = week_starts_on
67
- @locale = locale
68
- @min_date = min_date
69
- @max_date = max_date
70
- @disabled_dates = disabled_dates
71
- @show_outside_days = show_outside_days
72
- @fixed_weeks = fixed_weeks
73
- @show_dropdowns = show_dropdowns
74
- @year_range = year_range
75
- @min_range_days = min_range_days
76
- @max_range_days = max_range_days
77
- @exclude_disabled = exclude_disabled
78
- @use_native_select = use_native_select
79
- @name = name
80
- @classes = classes
81
- @attributes = attributes
82
- super()
83
- end
3
+ # Calendar component (Phlex)
4
+ # A date picker calendar with support for single, range, and multiple selection
5
+ #
6
+ # @example Basic usage (single date)
7
+ # render UI::Calendar.new(selected: Date.today)
8
+ #
9
+ # @example Range selection
10
+ # render UI::Calendar.new(mode: :range, selected: Date.today..Date.today + 7)
11
+ #
12
+ # @example Multiple months
13
+ # render UI::Calendar.new(number_of_months: 2)
14
+ #
15
+ # @example With dropdowns
16
+ # render UI::Calendar.new(show_dropdowns: true)
17
+ class UI::Calendar < Phlex::HTML
18
+ include UI::CalendarBehavior
84
19
 
85
- def view_template
86
- div(**calendar_html_attributes) do
87
- # Screen reader live region for announcements
88
- div(class: "sr-only", aria_live: "polite", aria_atomic: "true", data: { ui__calendar_target: "liveRegion" })
20
+ # @param mode [Symbol] :single, :range, or :multiple selection mode
21
+ # @param selected [Date, Range, Array] initially selected date(s)
22
+ # @param month [Date] initially displayed month
23
+ # @param number_of_months [Integer] number of months to display side by side
24
+ # @param week_starts_on [Integer] 0 for Sunday, 1 for Monday, etc.
25
+ # @param locale [String] BCP 47 locale tag for formatting (default: "en-US")
26
+ # @param min_date [Date] minimum selectable date
27
+ # @param max_date [Date] maximum selectable date
28
+ # @param disabled_dates [Array<Date>] dates that cannot be selected
29
+ # @param show_outside_days [Boolean] show days from adjacent months
30
+ # @param fixed_weeks [Boolean] always show 6 weeks
31
+ # @param show_dropdowns [Boolean] show month/year dropdowns
32
+ # @param year_range [Integer] number of years to show in dropdown
33
+ # @param min_range_days [Integer] minimum days for range selection (0 = no min)
34
+ # @param max_range_days [Integer] maximum days for range selection (0 = no max)
35
+ # @param exclude_disabled [Boolean] prevent ranges that contain disabled dates
36
+ # @param use_native_select [Boolean] use native HTML select for dropdowns (default: true)
37
+ # @param name [String] form field name for hidden input
38
+ # @param classes [String] additional CSS classes
39
+ # @param attributes [Hash] additional HTML attributes
40
+ def initialize(
41
+ mode: :single,
42
+ selected: nil,
43
+ month: Date.today,
44
+ number_of_months: 1,
45
+ week_starts_on: 0,
46
+ locale: "en-US",
47
+ min_date: nil,
48
+ max_date: nil,
49
+ disabled_dates: [],
50
+ show_outside_days: true,
51
+ fixed_weeks: false,
52
+ show_dropdowns: false,
53
+ year_range: 100,
54
+ min_range_days: 0,
55
+ max_range_days: 0,
56
+ exclude_disabled: false,
57
+ use_native_select: true,
58
+ name: nil,
59
+ classes: "",
60
+ **attributes
61
+ )
62
+ @mode = mode
63
+ @selected = selected
64
+ @month = month
65
+ @number_of_months = number_of_months
66
+ @week_starts_on = week_starts_on
67
+ @locale = locale
68
+ @min_date = min_date
69
+ @max_date = max_date
70
+ @disabled_dates = disabled_dates
71
+ @show_outside_days = show_outside_days
72
+ @fixed_weeks = fixed_weeks
73
+ @show_dropdowns = show_dropdowns
74
+ @year_range = year_range
75
+ @min_range_days = min_range_days
76
+ @max_range_days = max_range_days
77
+ @exclude_disabled = exclude_disabled
78
+ @use_native_select = use_native_select
79
+ @name = name
80
+ @classes = classes
81
+ @attributes = attributes
82
+ super()
83
+ end
89
84
 
90
- # Hidden input for form submission
91
- if @name
92
- input(type: "hidden", name: @name, value: selected_value, data: { ui__calendar_target: "input" })
93
- end
85
+ def view_template
86
+ div(**calendar_html_attributes) do
87
+ # Screen reader live region for announcements
88
+ div(class: "sr-only", aria_live: "polite", aria_atomic: "true", data: {ui__calendar_target: "liveRegion"})
94
89
 
95
- @number_of_months.times do |i|
96
- render_month(i)
97
- end
98
- end
90
+ # Hidden input for form submission
91
+ if @name
92
+ input(type: "hidden", name: @name, value: selected_value, data: {ui__calendar_target: "input"})
99
93
  end
100
94
 
101
- private
102
-
103
- def render_month(index)
104
- div(class: "space-y-4") do
105
- render_header(index)
106
- render_table
107
- end
95
+ @number_of_months.times do |i|
96
+ render_month(i)
108
97
  end
98
+ end
99
+ end
109
100
 
110
- def render_header(index)
111
- div(class: "flex justify-center pt-1 relative items-center") do
112
- # Previous button (only on first month or always)
113
- button(
114
- type: "button",
115
- data: { action: "click->ui--calendar#previousMonth" },
116
- class: nav_button_classes("left"),
117
- aria: { label: "Go to previous month" }
118
- ) do
119
- render_chevron_left
120
- end
101
+ private
121
102
 
122
- if @show_dropdowns
123
- render_dropdowns
124
- else
125
- div(class: "text-sm font-medium", data: { ui__calendar_target: "monthLabel" })
126
- end
103
+ def render_month(index)
104
+ div(class: "space-y-4") do
105
+ render_header(index)
106
+ render_table
107
+ end
108
+ end
127
109
 
128
- # Next button
129
- button(
130
- type: "button",
131
- data: { action: "click->ui--calendar#nextMonth" },
132
- class: nav_button_classes("right"),
133
- aria: { label: "Go to next month" }
134
- ) do
135
- render_chevron_right
136
- end
137
- end
110
+ def render_header(index)
111
+ div(class: "flex justify-center pt-1 relative items-center") do
112
+ # Previous button (only on first month or always)
113
+ button(
114
+ type: "button",
115
+ data: {action: "click->ui--calendar#previousMonth"},
116
+ class: nav_button_classes("left"),
117
+ aria: {label: "Go to previous month"}
118
+ ) do
119
+ render_chevron_left
138
120
  end
139
121
 
140
- def render_dropdowns
141
- div(class: "flex items-center gap-1") do
142
- select(
143
- data: { ui__calendar_target: "monthSelect", action: "change->ui--calendar#goToMonth" },
144
- class: "text-sm font-medium h-7 px-2 rounded-md border border-input bg-background"
145
- ) do
146
- Date::MONTHNAMES.compact.each_with_index do |name, i|
147
- option(value: i) { name }
148
- end
149
- end
122
+ if @show_dropdowns
123
+ render_dropdowns
124
+ else
125
+ div(class: "text-sm font-medium", data: {ui__calendar_target: "monthLabel"})
126
+ end
150
127
 
151
- select(
152
- data: { ui__calendar_target: "yearSelect", action: "change->ui--calendar#goToYear" },
153
- class: "text-sm font-medium h-7 px-2 rounded-md border border-input bg-background"
154
- ) do
155
- current_year = Date.today.year
156
- ((current_year - @year_range)..(current_year + 10)).each do |y|
157
- option(value: y) { y.to_s }
158
- end
159
- end
160
- end
128
+ # Next button
129
+ button(
130
+ type: "button",
131
+ data: {action: "click->ui--calendar#nextMonth"},
132
+ class: nav_button_classes("right"),
133
+ aria: {label: "Go to next month"}
134
+ ) do
135
+ render_chevron_right
161
136
  end
137
+ end
138
+ end
162
139
 
163
- def render_table
164
- table(class: "w-full border-collapse space-y-1", role: "grid") do
165
- thead { render_weekdays }
166
- tbody(data: { ui__calendar_target: "grid" }, role: "rowgroup")
140
+ def render_dropdowns
141
+ if use_native_select?
142
+ render_native_dropdowns
143
+ else
144
+ render_ui_select_dropdowns
145
+ end
146
+ end
147
+
148
+ def render_native_dropdowns
149
+ div(class: "flex items-center gap-1") do
150
+ select(
151
+ data: {ui__calendar_target: "monthSelect", action: "change->ui--calendar#goToMonth"},
152
+ class: "text-sm font-medium h-7 px-2 rounded-md border border-input bg-background"
153
+ ) do
154
+ Date::MONTHNAMES.compact.each_with_index do |name, i|
155
+ option(value: i) { name }
167
156
  end
168
157
  end
169
158
 
170
- def render_weekdays
171
- tr(class: "flex", data: { ui__calendar_target: "weekdaysHeader" }) do
172
- ordered_weekdays.each do |day|
173
- th(scope: "col", class: "text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]") { day }
174
- end
159
+ select(
160
+ data: {ui__calendar_target: "yearSelect", action: "change->ui--calendar#goToYear"},
161
+ class: "text-sm font-medium h-7 px-2 rounded-md border border-input bg-background"
162
+ ) do
163
+ current_year = Date.today.year
164
+ ((current_year - @year_range)..(current_year + 10)).each do |y|
165
+ option(value: y) { y.to_s }
175
166
  end
176
167
  end
168
+ end
169
+ end
177
170
 
178
- def nav_button_classes(position)
179
- base = "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium " \
180
- "ring-offset-background transition-colors " \
181
- "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 " \
182
- "border border-input bg-background hover:bg-accent hover:text-accent-foreground " \
183
- "h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100"
184
- position_class = position == "left" ? "absolute left-1" : "absolute right-1"
185
- "#{base} #{position_class}"
171
+ def render_ui_select_dropdowns
172
+ div(class: "flex items-center gap-1 px-8 flex-1") do
173
+ # Month select
174
+ render UI::Select.new(classes: "flex-1", value: (@month.month - 1).to_s) do
175
+ render UI::SelectTrigger.new(classes: "h-9 w-full gap-1 px-2 text-sm font-medium border-0 shadow-none")
176
+ render UI::SelectContent.new(classes: "min-w-[8rem]") do
177
+ Date::MONTHNAMES.compact.each_with_index do |name, i|
178
+ render UI::SelectItem.new(value: i.to_s) { name }
179
+ end
180
+ end
181
+ input(
182
+ type: "hidden",
183
+ value: (@month.month - 1).to_s,
184
+ data: {
185
+ ui__select_target: "hiddenInput",
186
+ ui__calendar_target: "monthSelect",
187
+ action: "change->ui--calendar#goToMonth"
188
+ }
189
+ )
186
190
  end
187
191
 
188
- def render_chevron_left
189
- svg(
190
- xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16",
191
- viewBox: "0 0 24 24", fill: "none", stroke: "currentColor",
192
- stroke_width: "2", stroke_linecap: "round", stroke_linejoin: "round",
193
- class: "h-4 w-4"
194
- ) do |s|
195
- s.path(d: "m15 18-6-6 6-6")
192
+ # Year select
193
+ render UI::Select.new(value: @month.year.to_s) do
194
+ render UI::SelectTrigger.new(classes: "min-w-[75px] h-9 w-auto gap-1 px-2 text-sm font-medium border-0 shadow-none")
195
+ render UI::SelectContent.new(classes: "min-w-[5rem] max-h-[200px]") do
196
+ current_year = Date.today.year
197
+ ((current_year - @year_range)..(current_year + 10)).each do |y|
198
+ render UI::SelectItem.new(value: y.to_s) { y.to_s }
199
+ end
196
200
  end
201
+ input(
202
+ type: "hidden",
203
+ value: @month.year.to_s,
204
+ data: {
205
+ ui__select_target: "hiddenInput",
206
+ ui__calendar_target: "yearSelect",
207
+ action: "change->ui--calendar#goToYear"
208
+ }
209
+ )
197
210
  end
211
+ end
212
+ end
198
213
 
199
- def render_chevron_right
200
- svg(
201
- xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16",
202
- viewBox: "0 0 24 24", fill: "none", stroke: "currentColor",
203
- stroke_width: "2", stroke_linecap: "round", stroke_linejoin: "round",
204
- class: "h-4 w-4"
205
- ) do |s|
206
- s.path(d: "m9 18 6-6-6-6")
207
- end
214
+ def render_table
215
+ table(class: "w-full border-collapse space-y-1", role: "grid") do
216
+ thead { render_weekdays }
217
+ tbody(data: {ui__calendar_target: "grid"}, role: "rowgroup")
218
+ end
219
+ end
220
+
221
+ def render_weekdays
222
+ tr(class: "flex", data: {ui__calendar_target: "weekdaysHeader"}) do
223
+ ordered_weekdays.each do |day|
224
+ th(scope: "col", class: "text-muted-foreground rounded-md w-9 font-normal text-[0.8rem]") { day }
208
225
  end
209
226
  end
227
+ end
228
+
229
+ def nav_button_classes(position)
230
+ base = "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium " \
231
+ "ring-offset-background transition-colors " \
232
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 " \
233
+ "border border-input bg-background hover:bg-accent hover:text-accent-foreground " \
234
+ "h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100"
235
+ position_class = (position == "left") ? "absolute left-1" : "absolute right-1"
236
+ "#{base} #{position_class}"
237
+ end
238
+
239
+ def render_chevron_left
240
+ svg(
241
+ xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16",
242
+ viewBox: "0 0 24 24", fill: "none", stroke: "currentColor",
243
+ stroke_width: "2", stroke_linecap: "round", stroke_linejoin: "round",
244
+ class: "h-4 w-4"
245
+ ) do |s|
246
+ s.path(d: "m15 18-6-6 6-6")
247
+ end
248
+ end
249
+
250
+ def render_chevron_right
251
+ svg(
252
+ xmlns: "http://www.w3.org/2000/svg", width: "16", height: "16",
253
+ viewBox: "0 0 24 24", fill: "none", stroke: "currentColor",
254
+ stroke_width: "2", stroke_linecap: "round", stroke_linejoin: "round",
255
+ class: "h-4 w-4"
256
+ ) do |s|
257
+ s.path(d: "m9 18 6-6-6-6")
258
+ end
259
+ end
260
+ end
@@ -1,14 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class UI::Card < Phlex::HTML
4
- include UI::CardBehavior
3
+ class UI::Card < Phlex::HTML
4
+ include UI::CardBehavior
5
5
 
6
- def initialize(classes: "", **attributes)
7
- @classes = classes
8
- @attributes = attributes
9
- end
6
+ def initialize(classes: "", **attributes)
7
+ @classes = classes
8
+ @attributes = attributes
9
+ end
10
10
 
11
- def view_template(&)
12
- div(**card_html_attributes.deep_merge(@attributes), &)
13
- end
14
- end
11
+ def view_template(&)
12
+ div(**card_html_attributes.deep_merge(@attributes), &)
13
+ end
14
+ end
@@ -1,14 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class UI::CardAction < Phlex::HTML
4
- include UI::CardActionBehavior
3
+ class UI::CardAction < Phlex::HTML
4
+ include UI::CardActionBehavior
5
5
 
6
- def initialize(classes: "", **attributes)
7
- @classes = classes
8
- @attributes = attributes
9
- end
6
+ def initialize(classes: "", **attributes)
7
+ @classes = classes
8
+ @attributes = attributes
9
+ end
10
10
 
11
- def view_template(&)
12
- div(**card_action_html_attributes.deep_merge(@attributes), &)
13
- end
14
- end
11
+ def view_template(&)
12
+ div(**card_action_html_attributes.deep_merge(@attributes), &)
13
+ end
14
+ end
@@ -1,14 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class UI::CardContent < Phlex::HTML
4
- include UI::CardContentBehavior
3
+ class UI::CardContent < Phlex::HTML
4
+ include UI::CardContentBehavior
5
5
 
6
- def initialize(classes: "", **attributes)
7
- @classes = classes
8
- @attributes = attributes
9
- end
6
+ def initialize(classes: "", **attributes)
7
+ @classes = classes
8
+ @attributes = attributes
9
+ end
10
10
 
11
- def view_template(&)
12
- div(**card_content_html_attributes.deep_merge(@attributes), &)
13
- end
14
- end
11
+ def view_template(&)
12
+ div(**card_content_html_attributes.deep_merge(@attributes), &)
13
+ end
14
+ end
@@ -1,14 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class UI::CardDescription < Phlex::HTML
4
- include UI::CardDescriptionBehavior
3
+ class UI::CardDescription < Phlex::HTML
4
+ include UI::CardDescriptionBehavior
5
5
 
6
- def initialize(classes: "", **attributes)
7
- @classes = classes
8
- @attributes = attributes
9
- end
6
+ def initialize(classes: "", **attributes)
7
+ @classes = classes
8
+ @attributes = attributes
9
+ end
10
10
 
11
- def view_template(&)
12
- div(**card_description_html_attributes.deep_merge(@attributes), &)
13
- end
14
- end
11
+ def view_template(&)
12
+ div(**card_description_html_attributes.deep_merge(@attributes), &)
13
+ end
14
+ end
@@ -1,14 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class UI::CardFooter < Phlex::HTML
4
- include UI::CardFooterBehavior
3
+ class UI::CardFooter < Phlex::HTML
4
+ include UI::CardFooterBehavior
5
5
 
6
- def initialize(classes: "", **attributes)
7
- @classes = classes
8
- @attributes = attributes
9
- end
6
+ def initialize(classes: "", **attributes)
7
+ @classes = classes
8
+ @attributes = attributes
9
+ end
10
10
 
11
- def view_template(&)
12
- div(**card_footer_html_attributes.deep_merge(@attributes), &)
13
- end
14
- end
11
+ def view_template(&)
12
+ div(**card_footer_html_attributes.deep_merge(@attributes), &)
13
+ end
14
+ end