shadcn_phlexcomponents 0.1.9 → 0.1.11

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 (246) hide show
  1. checksums.yaml +4 -4
  2. data/app/javascript/controllers/accordion_controller.ts +133 -0
  3. data/app/javascript/controllers/{avatar_controller.js → avatar_controller.ts} +4 -0
  4. data/app/javascript/controllers/checkbox_controller.ts +34 -0
  5. data/app/javascript/controllers/collapsible_controller.ts +45 -0
  6. data/app/javascript/controllers/combobox_controller.ts +145 -0
  7. data/app/javascript/controllers/command_controller.ts +129 -0
  8. data/app/javascript/controllers/command_root_controller.ts +355 -0
  9. data/app/javascript/controllers/date_picker_controller.ts +274 -0
  10. data/app/javascript/controllers/date_range_picker_controller.ts +243 -0
  11. data/app/javascript/controllers/dialog_controller.ts +113 -0
  12. data/app/javascript/controllers/dropdown_menu_controller.ts +133 -0
  13. data/app/javascript/controllers/dropdown_menu_root_controller.ts +234 -0
  14. data/app/javascript/controllers/dropdown_menu_sub_controller.ts +150 -0
  15. data/app/javascript/controllers/{form_field_controller.js → form_field_controller.ts} +4 -6
  16. data/app/javascript/controllers/hover_card_controller.ts +93 -0
  17. data/app/javascript/controllers/{loading_button_controller.js → loading_button_controller.ts} +2 -2
  18. data/app/javascript/controllers/popover_controller.ts +141 -0
  19. data/app/javascript/controllers/progress_controller.ts +17 -0
  20. data/app/javascript/controllers/radio_group_controller.ts +106 -0
  21. data/app/javascript/controllers/select_controller.ts +200 -0
  22. data/app/javascript/controllers/{sidebar_controller.js → sidebar_controller.ts} +6 -2
  23. data/app/javascript/controllers/sidebar_trigger_controller.ts +21 -0
  24. data/app/javascript/controllers/slider_controller.ts +107 -0
  25. data/app/javascript/controllers/switch_controller.ts +30 -0
  26. data/app/javascript/controllers/tabs_controller.ts +79 -0
  27. data/app/javascript/controllers/{theme_switcher_controller.js → theme_switcher_controller.ts} +12 -9
  28. data/app/javascript/controllers/toast_container_controller.ts +62 -0
  29. data/app/javascript/controllers/toast_controller.ts +28 -0
  30. data/app/javascript/controllers/tooltip_controller.ts +98 -0
  31. data/app/javascript/{shadcn_phlexcomponents.js → shadcn_phlexcomponents.ts} +6 -2
  32. data/app/javascript/utils.ts +437 -0
  33. data/app/stylesheets/date_picker.css +16 -154
  34. data/app/stylesheets/nouislider.css +173 -0
  35. data/app/stylesheets/tw-animate.css +486 -0
  36. data/lib/install/install_shadcn_phlexcomponents.rb +16 -3
  37. data/lib/shadcn_phlexcomponents/alias.rb +3 -1
  38. data/lib/shadcn_phlexcomponents/components/accordion.rb +129 -0
  39. data/lib/shadcn_phlexcomponents/components/alert.rb +59 -0
  40. data/lib/shadcn_phlexcomponents/components/alert_dialog.rb +276 -0
  41. data/lib/shadcn_phlexcomponents/components/{aspect_ratio/aspect_ratio.rb → aspect_ratio.rb} +2 -2
  42. data/lib/shadcn_phlexcomponents/components/avatar.rb +63 -0
  43. data/lib/shadcn_phlexcomponents/components/badge.rb +35 -0
  44. data/lib/shadcn_phlexcomponents/components/base.rb +34 -7
  45. data/lib/shadcn_phlexcomponents/components/breadcrumb.rb +150 -0
  46. data/lib/shadcn_phlexcomponents/components/button.rb +49 -0
  47. data/lib/shadcn_phlexcomponents/components/card.rb +88 -0
  48. data/lib/shadcn_phlexcomponents/components/{checkbox/checkbox.rb → checkbox.rb} +18 -14
  49. data/lib/shadcn_phlexcomponents/components/{checkbox_group/checkbox_group.rb → checkbox_group.rb} +7 -8
  50. data/lib/shadcn_phlexcomponents/components/collapsible.rb +91 -0
  51. data/lib/shadcn_phlexcomponents/components/combobox.rb +398 -0
  52. data/lib/shadcn_phlexcomponents/components/command.rb +351 -0
  53. data/lib/shadcn_phlexcomponents/components/date_picker.rb +264 -0
  54. data/lib/shadcn_phlexcomponents/components/date_range_picker.rb +126 -0
  55. data/lib/shadcn_phlexcomponents/components/dialog.rb +234 -0
  56. data/lib/shadcn_phlexcomponents/components/dropdown_menu.rb +282 -0
  57. data/lib/shadcn_phlexcomponents/components/dropdown_menu_sub.rb +135 -0
  58. data/lib/shadcn_phlexcomponents/components/form/form_checkbox.rb +6 -7
  59. data/lib/shadcn_phlexcomponents/components/form/form_checkbox_group.rb +2 -2
  60. data/lib/shadcn_phlexcomponents/components/form/form_date_picker.rb +3 -4
  61. data/lib/shadcn_phlexcomponents/components/form/form_date_range_picker.rb +27 -41
  62. data/lib/shadcn_phlexcomponents/components/form/form_error.rb +1 -1
  63. data/lib/shadcn_phlexcomponents/components/form/form_helpers.rb +43 -8
  64. data/lib/shadcn_phlexcomponents/components/form/form_hint.rb +1 -1
  65. data/lib/shadcn_phlexcomponents/components/form/form_input.rb +3 -4
  66. data/lib/shadcn_phlexcomponents/components/form/form_radio_group.rb +4 -5
  67. data/lib/shadcn_phlexcomponents/components/form/form_select.rb +3 -4
  68. data/lib/shadcn_phlexcomponents/components/form/form_slider.rb +91 -0
  69. data/lib/shadcn_phlexcomponents/components/form/form_switch.rb +7 -6
  70. data/lib/shadcn_phlexcomponents/components/form/form_textarea.rb +3 -4
  71. data/lib/shadcn_phlexcomponents/components/{form/form.rb → form.rb} +22 -4
  72. data/lib/shadcn_phlexcomponents/components/hover_card.rb +110 -0
  73. data/lib/shadcn_phlexcomponents/components/input.rb +31 -0
  74. data/lib/shadcn_phlexcomponents/components/label.rb +16 -0
  75. data/lib/shadcn_phlexcomponents/components/{link/link.rb → link.rb} +10 -3
  76. data/lib/shadcn_phlexcomponents/components/{loading_button/loading_button.rb → loading_button.rb} +9 -2
  77. data/lib/shadcn_phlexcomponents/components/pagination.rb +166 -0
  78. data/lib/shadcn_phlexcomponents/components/popover.rb +116 -0
  79. data/lib/shadcn_phlexcomponents/components/{progress/progress.rb → progress.rb} +4 -4
  80. data/lib/shadcn_phlexcomponents/components/radio_group.rb +155 -0
  81. data/lib/shadcn_phlexcomponents/components/select.rb +421 -0
  82. data/lib/shadcn_phlexcomponents/components/{separator/separator.rb → separator.rb} +9 -8
  83. data/lib/shadcn_phlexcomponents/components/sheet.rb +239 -0
  84. data/lib/shadcn_phlexcomponents/components/{skeleton/skeleton.rb → skeleton.rb} +1 -1
  85. data/lib/shadcn_phlexcomponents/components/slider.rb +72 -0
  86. data/lib/shadcn_phlexcomponents/components/switch.rb +75 -0
  87. data/lib/shadcn_phlexcomponents/components/table.rb +140 -0
  88. data/lib/shadcn_phlexcomponents/components/tabs.rb +135 -0
  89. data/lib/shadcn_phlexcomponents/components/textarea.rb +24 -0
  90. data/lib/shadcn_phlexcomponents/components/toast.rb +153 -0
  91. data/lib/shadcn_phlexcomponents/components/{toast/toast_container.rb → toast_container.rb} +23 -4
  92. data/lib/shadcn_phlexcomponents/components/tooltip.rb +131 -0
  93. data/lib/shadcn_phlexcomponents/initializers/shadcn_phlexcomponents.rb +25 -0
  94. data/lib/shadcn_phlexcomponents/version.rb +1 -1
  95. data/lib/tasks/install.rake +1 -1
  96. metadata +78 -167
  97. data/app/javascript/controllers/accordion_controller.js +0 -124
  98. data/app/javascript/controllers/alert_dialog_controller.js +0 -21
  99. data/app/javascript/controllers/checkbox_controller.js +0 -28
  100. data/app/javascript/controllers/collapsible_controller.js +0 -35
  101. data/app/javascript/controllers/combobox_controller.js +0 -54
  102. data/app/javascript/controllers/date_picker_controller.js +0 -253
  103. data/app/javascript/controllers/date_range_picker_controller.js +0 -344
  104. data/app/javascript/controllers/dialog_controller.js +0 -114
  105. data/app/javascript/controllers/dropdown_menu_controller.js +0 -171
  106. data/app/javascript/controllers/hover_card_controller.js +0 -21
  107. data/app/javascript/controllers/popover_controller.js +0 -113
  108. data/app/javascript/controllers/progress_controller.js +0 -14
  109. data/app/javascript/controllers/radio_group_controller.js +0 -90
  110. data/app/javascript/controllers/select_controller.js +0 -274
  111. data/app/javascript/controllers/sidebar_trigger_controller.js +0 -15
  112. data/app/javascript/controllers/switch_controller.js +0 -24
  113. data/app/javascript/controllers/tabs_controller.js +0 -73
  114. data/app/javascript/controllers/toast_container_controller.js +0 -22
  115. data/app/javascript/controllers/toast_controller.js +0 -45
  116. data/app/javascript/controllers/tooltip_controller.js +0 -40
  117. data/app/javascript/utils.js +0 -184
  118. data/app/stylesheets/choices.css +0 -324
  119. data/app/stylesheets/tailwindcss-animate.css +0 -318
  120. data/lib/shadcn_phlexcomponents/components/accordion/accordion.rb +0 -38
  121. data/lib/shadcn_phlexcomponents/components/accordion/accordion_content.rb +0 -30
  122. data/lib/shadcn_phlexcomponents/components/accordion/accordion_item.rb +0 -26
  123. data/lib/shadcn_phlexcomponents/components/accordion/accordion_trigger.rb +0 -46
  124. data/lib/shadcn_phlexcomponents/components/alert/alert.rb +0 -40
  125. data/lib/shadcn_phlexcomponents/components/alert/alert_description.rb +0 -11
  126. data/lib/shadcn_phlexcomponents/components/alert/alert_title.rb +0 -11
  127. data/lib/shadcn_phlexcomponents/components/alert_dialog/alert_dialog.rb +0 -60
  128. data/lib/shadcn_phlexcomponents/components/alert_dialog/alert_dialog_action.rb +0 -22
  129. data/lib/shadcn_phlexcomponents/components/alert_dialog/alert_dialog_action_to.rb +0 -40
  130. data/lib/shadcn_phlexcomponents/components/alert_dialog/alert_dialog_cancel.rb +0 -22
  131. data/lib/shadcn_phlexcomponents/components/alert_dialog/alert_dialog_content.rb +0 -40
  132. data/lib/shadcn_phlexcomponents/components/alert_dialog/alert_dialog_description.rb +0 -22
  133. data/lib/shadcn_phlexcomponents/components/alert_dialog/alert_dialog_footer.rb +0 -11
  134. data/lib/shadcn_phlexcomponents/components/alert_dialog/alert_dialog_header.rb +0 -11
  135. data/lib/shadcn_phlexcomponents/components/alert_dialog/alert_dialog_title.rb +0 -22
  136. data/lib/shadcn_phlexcomponents/components/alert_dialog/alert_dialog_trigger.rb +0 -50
  137. data/lib/shadcn_phlexcomponents/components/avatar/avatar.rb +0 -31
  138. data/lib/shadcn_phlexcomponents/components/avatar/avatar_fallback.rb +0 -21
  139. data/lib/shadcn_phlexcomponents/components/avatar/avatar_image.rb +0 -19
  140. data/lib/shadcn_phlexcomponents/components/badge/badge.rb +0 -30
  141. data/lib/shadcn_phlexcomponents/components/breadcrumb/breadcrumb.rb +0 -53
  142. data/lib/shadcn_phlexcomponents/components/breadcrumb/breadcrumb_ellipsis.rb +0 -23
  143. data/lib/shadcn_phlexcomponents/components/breadcrumb/breadcrumb_item.rb +0 -11
  144. data/lib/shadcn_phlexcomponents/components/breadcrumb/breadcrumb_link.rb +0 -7
  145. data/lib/shadcn_phlexcomponents/components/breadcrumb/breadcrumb_page.rb +0 -21
  146. data/lib/shadcn_phlexcomponents/components/breadcrumb/breadcrumb_separator.rb +0 -26
  147. data/lib/shadcn_phlexcomponents/components/button/button.rb +0 -53
  148. data/lib/shadcn_phlexcomponents/components/card/card.rb +0 -31
  149. data/lib/shadcn_phlexcomponents/components/card/card_content.rb +0 -11
  150. data/lib/shadcn_phlexcomponents/components/card/card_description.rb +0 -11
  151. data/lib/shadcn_phlexcomponents/components/card/card_footer.rb +0 -11
  152. data/lib/shadcn_phlexcomponents/components/card/card_header.rb +0 -11
  153. data/lib/shadcn_phlexcomponents/components/card/card_title.rb +0 -11
  154. data/lib/shadcn_phlexcomponents/components/collapsible/collapsible.rb +0 -31
  155. data/lib/shadcn_phlexcomponents/components/collapsible/collapsible_content.rb +0 -24
  156. data/lib/shadcn_phlexcomponents/components/collapsible/collapsible_trigger.rb +0 -50
  157. data/lib/shadcn_phlexcomponents/components/date_picker/date_picker.rb +0 -87
  158. data/lib/shadcn_phlexcomponents/components/date_picker/date_picker_content.rb +0 -45
  159. data/lib/shadcn_phlexcomponents/components/date_picker/date_picker_trigger.rb +0 -64
  160. data/lib/shadcn_phlexcomponents/components/date_range_picker/date_range_picker.rb +0 -105
  161. data/lib/shadcn_phlexcomponents/components/date_range_picker/date_range_picker_content.rb +0 -9
  162. data/lib/shadcn_phlexcomponents/components/date_range_picker/date_range_picker_trigger.rb +0 -9
  163. data/lib/shadcn_phlexcomponents/components/dialog/dialog.rb +0 -52
  164. data/lib/shadcn_phlexcomponents/components/dialog/dialog_close.rb +0 -42
  165. data/lib/shadcn_phlexcomponents/components/dialog/dialog_content.rb +0 -54
  166. data/lib/shadcn_phlexcomponents/components/dialog/dialog_description.rb +0 -22
  167. data/lib/shadcn_phlexcomponents/components/dialog/dialog_footer.rb +0 -11
  168. data/lib/shadcn_phlexcomponents/components/dialog/dialog_header.rb +0 -11
  169. data/lib/shadcn_phlexcomponents/components/dialog/dialog_title.rb +0 -22
  170. data/lib/shadcn_phlexcomponents/components/dialog/dialog_trigger.rb +0 -50
  171. data/lib/shadcn_phlexcomponents/components/dropdown_menu/dropdown_menu.rb +0 -50
  172. data/lib/shadcn_phlexcomponents/components/dropdown_menu/dropdown_menu_content.rb +0 -52
  173. data/lib/shadcn_phlexcomponents/components/dropdown_menu/dropdown_menu_item.rb +0 -56
  174. data/lib/shadcn_phlexcomponents/components/dropdown_menu/dropdown_menu_item_to.rb +0 -28
  175. data/lib/shadcn_phlexcomponents/components/dropdown_menu/dropdown_menu_label.rb +0 -11
  176. data/lib/shadcn_phlexcomponents/components/dropdown_menu/dropdown_menu_separator.rb +0 -20
  177. data/lib/shadcn_phlexcomponents/components/dropdown_menu/dropdown_menu_trigger.rb +0 -57
  178. data/lib/shadcn_phlexcomponents/components/hover_card/hover_card.rb +0 -33
  179. data/lib/shadcn_phlexcomponents/components/hover_card/hover_card_content.rb +0 -32
  180. data/lib/shadcn_phlexcomponents/components/hover_card/hover_card_trigger.rb +0 -44
  181. data/lib/shadcn_phlexcomponents/components/input/input.rb +0 -32
  182. data/lib/shadcn_phlexcomponents/components/label/label.rb +0 -14
  183. data/lib/shadcn_phlexcomponents/components/pagination/pagination.rb +0 -38
  184. data/lib/shadcn_phlexcomponents/components/pagination/pagination_ellipsis.rb +0 -24
  185. data/lib/shadcn_phlexcomponents/components/pagination/pagination_link.rb +0 -34
  186. data/lib/shadcn_phlexcomponents/components/pagination/pagination_next.rb +0 -32
  187. data/lib/shadcn_phlexcomponents/components/pagination/pagination_previous.rb +0 -32
  188. data/lib/shadcn_phlexcomponents/components/popover/popover.rb +0 -34
  189. data/lib/shadcn_phlexcomponents/components/popover/popover_content.rb +0 -40
  190. data/lib/shadcn_phlexcomponents/components/popover/popover_trigger.rb +0 -50
  191. data/lib/shadcn_phlexcomponents/components/radio_group/radio_group.rb +0 -88
  192. data/lib/shadcn_phlexcomponents/components/radio_group/radio_group_item.rb +0 -66
  193. data/lib/shadcn_phlexcomponents/components/select/select.rb +0 -194
  194. data/lib/shadcn_phlexcomponents/components/select/select_content.rb +0 -64
  195. data/lib/shadcn_phlexcomponents/components/select/select_group.rb +0 -23
  196. data/lib/shadcn_phlexcomponents/components/select/select_item.rb +0 -59
  197. data/lib/shadcn_phlexcomponents/components/select/select_label.rb +0 -24
  198. data/lib/shadcn_phlexcomponents/components/select/select_trigger.rb +0 -56
  199. data/lib/shadcn_phlexcomponents/components/sheet/sheet.rb +0 -53
  200. data/lib/shadcn_phlexcomponents/components/sheet/sheet_close.rb +0 -42
  201. data/lib/shadcn_phlexcomponents/components/sheet/sheet_content.rb +0 -65
  202. data/lib/shadcn_phlexcomponents/components/sheet/sheet_description.rb +0 -22
  203. data/lib/shadcn_phlexcomponents/components/sheet/sheet_footer.rb +0 -11
  204. data/lib/shadcn_phlexcomponents/components/sheet/sheet_header.rb +0 -11
  205. data/lib/shadcn_phlexcomponents/components/sheet/sheet_title.rb +0 -22
  206. data/lib/shadcn_phlexcomponents/components/sheet/sheet_trigger.rb +0 -50
  207. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar.rb +0 -108
  208. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_container.rb +0 -11
  209. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_content.rb +0 -11
  210. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_footer.rb +0 -11
  211. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_group.rb +0 -11
  212. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_group_content.rb +0 -11
  213. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_group_label.rb +0 -16
  214. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_header.rb +0 -11
  215. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_inset.rb +0 -15
  216. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_menu.rb +0 -11
  217. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_menu_button.rb +0 -61
  218. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_menu_item.rb +0 -9
  219. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_menu_sub.rb +0 -14
  220. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_menu_sub_button.rb +0 -48
  221. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_menu_sub_item.rb +0 -9
  222. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_trigger.rb +0 -40
  223. data/lib/shadcn_phlexcomponents/components/switch/switch.rb +0 -66
  224. data/lib/shadcn_phlexcomponents/components/table/table.rb +0 -75
  225. data/lib/shadcn_phlexcomponents/components/table/table_body.rb +0 -11
  226. data/lib/shadcn_phlexcomponents/components/table/table_caption.rb +0 -11
  227. data/lib/shadcn_phlexcomponents/components/table/table_cell.rb +0 -11
  228. data/lib/shadcn_phlexcomponents/components/table/table_footer.rb +0 -11
  229. data/lib/shadcn_phlexcomponents/components/table/table_head.rb +0 -14
  230. data/lib/shadcn_phlexcomponents/components/table/table_header.rb +0 -11
  231. data/lib/shadcn_phlexcomponents/components/table/table_row.rb +0 -11
  232. data/lib/shadcn_phlexcomponents/components/tabs/tabs.rb +0 -38
  233. data/lib/shadcn_phlexcomponents/components/tabs/tabs_content.rb +0 -35
  234. data/lib/shadcn_phlexcomponents/components/tabs/tabs_list.rb +0 -23
  235. data/lib/shadcn_phlexcomponents/components/tabs/tabs_trigger.rb +0 -45
  236. data/lib/shadcn_phlexcomponents/components/textarea/textarea.rb +0 -29
  237. data/lib/shadcn_phlexcomponents/components/toast/toast.rb +0 -101
  238. data/lib/shadcn_phlexcomponents/components/toast/toast_action.rb +0 -39
  239. data/lib/shadcn_phlexcomponents/components/toast/toast_action_to.rb +0 -28
  240. data/lib/shadcn_phlexcomponents/components/toast/toast_content.rb +0 -11
  241. data/lib/shadcn_phlexcomponents/components/toast/toast_description.rb +0 -11
  242. data/lib/shadcn_phlexcomponents/components/toast/toast_title.rb +0 -11
  243. data/lib/shadcn_phlexcomponents/components/tooltip/tooltip.rb +0 -34
  244. data/lib/shadcn_phlexcomponents/components/tooltip/tooltip_content.rb +0 -39
  245. data/lib/shadcn_phlexcomponents/components/tooltip/tooltip_trigger.rb +0 -48
  246. /data/lib/shadcn_phlexcomponents/components/{theme_switcher/theme_switcher.rb → theme_switcher.rb} +0 -0
@@ -1,5 +1,19 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative "form/form_helpers"
4
+ require_relative "form/form_input"
5
+ require_relative "form/form_hint"
6
+ require_relative "form/form_error"
7
+ require_relative "form/form_textarea"
8
+ require_relative "form/form_checkbox"
9
+ require_relative "form/form_switch"
10
+ require_relative "form/form_checkbox_group"
11
+ require_relative "form/form_date_picker"
12
+ require_relative "form/form_date_range_picker"
13
+ require_relative "form/form_select"
14
+ require_relative "form/form_radio_group"
15
+ require_relative "form/form_slider"
16
+
3
17
  module ShadcnPhlexcomponents
4
18
  class Form < Base
5
19
  include Phlex::Rails::Helpers::FormWith
@@ -73,11 +87,15 @@ module ShadcnPhlexcomponents
73
87
  FormDatePicker(method, model: @model, object_name: @object_name, **attributes, &)
74
88
  end
75
89
 
76
- def date_range_picker(start_date_method = nil, end_date_method = nil, **attributes, &)
77
- FormDateRangePicker(start_date_method, end_date_method, model: @model, object_name: @object_name, **attributes, &)
90
+ def date_range_picker(method = nil, end_method = nil, **attributes, &)
91
+ FormDateRangePicker(method, end_method, model: @model, object_name: @object_name, **attributes, &)
92
+ end
93
+
94
+ def slider(method = nil, end_method = nil, **attributes, &)
95
+ FormSlider(method, end_method, model: @model, object_name: @object_name, **attributes, &)
78
96
  end
79
97
 
80
- def submit(value = nil, variant: :primary, **attributes, &)
98
+ def submit(value = nil, variant: :default, **attributes, &)
81
99
  if @loading
82
100
  LoadingButton(variant: variant, type: :submit, **attributes) do
83
101
  if block_given?
@@ -110,7 +128,7 @@ module ShadcnPhlexcomponents
110
128
  # Follows rails f.submit
111
129
  # https://github.com/rails/rails/blob/3235827585d87661942c91bc81f64f56d710f0b2/actionview/lib/action_view/helpers/form_helper.rb#L2681-L2706
112
130
  def submit_default_value
113
- object = @model&.to_model
131
+ object = @model.respond_to?(:to_model) ? @model.to_model : nil
114
132
  key = if object
115
133
  object.persisted? ? :update : :create
116
134
  else
@@ -0,0 +1,110 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ShadcnPhlexcomponents
4
+ class HoverCard < Base
5
+ class_variants(base: "inline-block max-w-fit")
6
+
7
+ def initialize(open: false, **attributes)
8
+ @open = open
9
+ super(**attributes)
10
+ end
11
+
12
+ def content(**attributes, &)
13
+ HoverCardContent(**attributes, &)
14
+ end
15
+
16
+ def trigger(**attributes, &)
17
+ HoverCardTrigger(**attributes, &)
18
+ end
19
+
20
+ def default_attributes
21
+ {
22
+ data: {
23
+ controller: "hover-card",
24
+ hover_card_is_open_value: @open.to_s,
25
+ },
26
+ }
27
+ end
28
+
29
+ def view_template(&)
30
+ div(**@attributes, &)
31
+ end
32
+ end
33
+
34
+ class HoverCardTrigger < Base
35
+ def initialize(as_child: false, **attributes)
36
+ @as_child = as_child
37
+ super(**attributes)
38
+ end
39
+
40
+ def view_template(&)
41
+ if @as_child
42
+ content = capture(&)
43
+ element = find_as_child(content.to_s)
44
+ vanish(&)
45
+ merged_attributes = merged_as_child_attributes(element, @attributes)
46
+
47
+ send(element.name, **merged_attributes) do
48
+ sanitize_as_child(element.children.to_s)
49
+ end
50
+ else
51
+ div(**@attributes, &)
52
+ end
53
+ end
54
+
55
+ def default_attributes
56
+ {
57
+ id: @id,
58
+ role: "button",
59
+ data: {
60
+ as_child: @as_child.to_s,
61
+ hover_card_target: "trigger",
62
+ action: <<~HEREDOC,
63
+ focus->hover-card#open
64
+ blur->hover-card#close
65
+ click->hover-card#open
66
+ HEREDOC
67
+ },
68
+ }
69
+ end
70
+ end
71
+
72
+ class HoverCardContent < Base
73
+ class_variants(
74
+ base: <<~HEREDOC,
75
+ bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out
76
+ data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95
77
+ data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2
78
+ data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-64
79
+ origin-(--radix-popper-transform-origin) rounded-md border p-4 shadow-md outline-hidden
80
+ HEREDOC
81
+ )
82
+
83
+ def initialize(side: :bottom, align: :center, **attributes)
84
+ @side = side
85
+ @align = align
86
+ super(**attributes)
87
+ end
88
+
89
+ def view_template(&)
90
+ div(
91
+ class: "hidden fixed top-0 left-0 w-max z-50",
92
+ data: { hover_card_target: "contentContainer" },
93
+ ) do
94
+ div(**@attributes, &)
95
+ end
96
+ end
97
+
98
+ def default_attributes
99
+ {
100
+ tabindex: -1,
101
+ data: {
102
+ side: @side,
103
+ align: @align,
104
+ hover_card_target: "content",
105
+ action: "mouseover->hover-card#open mouseout->hover-card#close",
106
+ },
107
+ }
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ShadcnPhlexcomponents
4
+ class Input < Base
5
+ class_variants(
6
+ base: <<~HEREDOC,
7
+ file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground
8
+ dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base
9
+ shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent
10
+ file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm
11
+ focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]
12
+ aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive
13
+ HEREDOC
14
+ )
15
+
16
+ def initialize(type: :text, **attributes)
17
+ @type = type
18
+ super(**attributes)
19
+ end
20
+
21
+ def default_attributes
22
+ {
23
+ type: @type,
24
+ }
25
+ end
26
+
27
+ def view_template(&)
28
+ input(**@attributes, &)
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ShadcnPhlexcomponents
4
+ class Label < Base
5
+ class_variants(
6
+ base: <<~HEREDOC,
7
+ flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none
8
+ group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50
9
+ HEREDOC
10
+ )
11
+
12
+ def view_template(&)
13
+ label(**@attributes, &)
14
+ end
15
+ end
16
+ end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module ShadcnPhlexcomponents
4
4
  class Link < Base
5
- STYLES = "font-medium underline underline-offset-4"
5
+ class_variants(base: "font-medium underline underline-offset-4")
6
6
 
7
7
  def initialize(name = nil, options = nil, html_options = nil)
8
8
  @name = name
@@ -15,9 +15,16 @@ module ShadcnPhlexcomponents
15
15
  @html_options = @options
16
16
  @options = @name
17
17
  end
18
+
18
19
  @html_options ||= {}
19
- @html_options = mix(default_attributes, @html_options)
20
- @html_options[:class] = TAILWIND_MERGER.merge("#{default_styles} #{@html_options[:class]}")
20
+ variant = @html_options.delete(:variant)
21
+ size = @html_options.delete(:size) || :default
22
+
23
+ @html_options[:class] = if variant
24
+ Button.new.class_variants(variant: variant, size: size, class: @html_options[:class])
25
+ else
26
+ class_variants(class: @html_options[:class])
27
+ end
21
28
 
22
29
  if block_given?
23
30
  link_to(@options, @html_options, &)
@@ -1,7 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ShadcnPhlexcomponents
4
- class LoadingButton < Button
4
+ class LoadingButton < Base
5
+ def initialize(variant: :default, size: :default, type: :submit, **attributes)
6
+ @variant = variant
7
+ @size = size
8
+ @type = type
9
+ super(**attributes)
10
+ end
11
+
5
12
  def default_attributes
6
13
  {
7
14
  type: @type,
@@ -12,7 +19,7 @@ module ShadcnPhlexcomponents
12
19
  end
13
20
 
14
21
  def view_template(&)
15
- button(**@attributes) do
22
+ Button(variant: @variant, size: @size, **@attributes) do
16
23
  icon("loader-circle", class: "animate-spin hidden group-aria-busy:inline")
17
24
  yield
18
25
  end
@@ -0,0 +1,166 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ShadcnPhlexcomponents
4
+ class Pagination < Base
5
+ class_variants(base: "mx-auto flex w-full justify-center")
6
+
7
+ def item(**attributes, &)
8
+ PaginationItem(**attributes, &)
9
+ end
10
+
11
+ def link(name = nil, options = nil, html_options = nil, &)
12
+ PaginationLink(name, options, html_options, &)
13
+ end
14
+
15
+ def previous(options = nil, html_options = nil)
16
+ PaginationPrevious(options, html_options)
17
+ end
18
+
19
+ def next(options = nil, html_options = nil)
20
+ PaginationNext(options, html_options)
21
+ end
22
+
23
+ def ellipsis(**attributes, &)
24
+ PaginationEllipsis(**attributes, &)
25
+ end
26
+
27
+ def default_attributes
28
+ {
29
+ role: "navigation",
30
+ aria: {
31
+ label: "navigation",
32
+ },
33
+ }
34
+ end
35
+
36
+ def view_template(&)
37
+ div(**@attributes) do
38
+ ul(class: "flex flex-row items-center gap-1", &)
39
+ end
40
+ end
41
+ end
42
+
43
+ class PaginationItem < Base
44
+ def view_template(&)
45
+ li(**@attributes, &)
46
+ end
47
+ end
48
+
49
+ class PaginationPrevious < Base
50
+ class_variants(base: "gap-1 px-2.5 sm:pl-2.5")
51
+
52
+ def initialize(options = nil, html_options = nil)
53
+ @options = options
54
+ @html_options = html_options
55
+ end
56
+
57
+ def default_attributes
58
+ {
59
+ aria: {
60
+ label: "Go to previous page",
61
+ },
62
+ }
63
+ end
64
+
65
+ def view_template
66
+ @html_options ||= {}
67
+ @html_options = mix(default_attributes, @html_options)
68
+ @html_options[:class] = class_variants(clase: @html_options[:class])
69
+ @html_options[:size] = :default
70
+
71
+ PaginationLink(@options, @html_options) do
72
+ icon("chevron-left")
73
+ span(class: "hidden sm:block") { "Previous" }
74
+ end
75
+ end
76
+ end
77
+
78
+ class PaginationNext < Base
79
+ class_variants(base: "gap-1 px-2.5 sm:pr-2.5")
80
+
81
+ def initialize(options = nil, html_options = nil)
82
+ @options = options
83
+ @html_options = html_options
84
+ end
85
+
86
+ def default_attributes
87
+ {
88
+ aria: {
89
+ label: "Go to next page",
90
+ },
91
+ }
92
+ end
93
+
94
+ def view_template
95
+ @html_options ||= {}
96
+ @html_options = mix(default_attributes, @html_options)
97
+ @html_options[:class] = class_variants(clase: @html_options[:class])
98
+ @html_options[:size] = :default
99
+
100
+ PaginationLink(@options, @html_options) do
101
+ span(class: "hidden sm:block") { "Next" }
102
+ icon("chevron-right")
103
+ end
104
+ end
105
+ end
106
+
107
+ class PaginationLink < Base
108
+ def initialize(name = nil, options = nil, html_options = nil)
109
+ @name = name
110
+ @options = options
111
+ @html_options = html_options
112
+ end
113
+
114
+ def view_template(&)
115
+ if block_given?
116
+ @html_options = @options
117
+ @options = @name
118
+ end
119
+
120
+ @html_options ||= {}
121
+ @html_options = mix(default_attributes, @html_options)
122
+
123
+ active = @html_options.delete(:active)
124
+ size = @html_options.delete(:size)
125
+
126
+ if active
127
+ @html_options = mix({ aria: { current: "page" } }, @html_options)
128
+ end
129
+
130
+ @html_options[:class] = Button.new.class_variants(
131
+ variant: active ? :outline : :ghost,
132
+ size: size || :icon,
133
+ class: @html_options[:class],
134
+ )
135
+
136
+ if block_given?
137
+ li do
138
+ link_to(@options, @html_options, &)
139
+ end
140
+ else
141
+ li do
142
+ link_to(@name, @options, @html_options)
143
+ end
144
+ end
145
+ end
146
+ end
147
+
148
+ class PaginationEllipsis < Base
149
+ class_variants(base: "flex size-9 items-center justify-center")
150
+
151
+ def default_attributes
152
+ {
153
+ aria: {
154
+ hidden: "true",
155
+ },
156
+ }
157
+ end
158
+
159
+ def view_template
160
+ span(**@attributes) do
161
+ icon("ellipsis", class: "size-4")
162
+ span(class: "sr-only") { "More pages" }
163
+ end
164
+ end
165
+ end
166
+ end
@@ -0,0 +1,116 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ShadcnPhlexcomponents
4
+ class Popover < Base
5
+ class_variants(base: "inline-block max-w-fit")
6
+
7
+ def initialize(open: false, **attributes)
8
+ @open = open
9
+ @aria_id = "popover-#{SecureRandom.hex(5)}"
10
+ super(**attributes)
11
+ end
12
+
13
+ def trigger(**attributes, &)
14
+ PopoverTrigger(aria_id: @aria_id, **attributes, &)
15
+ end
16
+
17
+ def content(**attributes, &)
18
+ PopoverContent(aria_id: @aria_id, **attributes, &)
19
+ end
20
+
21
+ def default_attributes
22
+ {
23
+ data: {
24
+ controller: "popover",
25
+ popover_is_open_value: @open.to_s,
26
+ side: @side,
27
+ },
28
+ }
29
+ end
30
+
31
+ def view_template(&)
32
+ div(**@attributes, &)
33
+ end
34
+ end
35
+
36
+ class PopoverTrigger < Base
37
+ def initialize(as_child: false, aria_id: nil, **attributes)
38
+ @as_child = as_child
39
+ @aria_id = aria_id
40
+ super(**attributes)
41
+ end
42
+
43
+ def view_template(&)
44
+ if @as_child
45
+ content = capture(&)
46
+ element = find_as_child(content.to_s)
47
+ vanish(&)
48
+ merged_attributes = merged_as_child_attributes(element, @attributes)
49
+
50
+ send(element.name, **merged_attributes) do
51
+ sanitize_as_child(element.children.to_s)
52
+ end
53
+ else
54
+ div(**@attributes, &)
55
+ end
56
+ end
57
+
58
+ def default_attributes
59
+ {
60
+ role: "button",
61
+ aria: {
62
+ haspopup: "dialog",
63
+ expanded: false,
64
+ controls: "#{@aria_id}-content",
65
+ },
66
+ data: {
67
+ as_child: @as_child.to_s,
68
+ action: "click->popover#toggle",
69
+ popover_target: "trigger",
70
+ },
71
+ }
72
+ end
73
+ end
74
+
75
+ class PopoverContent < Base
76
+ class_variants(
77
+ base: <<~HEREDOC,
78
+ bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out
79
+ data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95
80
+ data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2
81
+ data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popper-transform-origin) rounded-md
82
+ border p-4 shadow-md outline-hidden
83
+ HEREDOC
84
+ )
85
+
86
+ def initialize(side: :bottom, align: :center, aria_id: nil, **attributes)
87
+ @side = side
88
+ @align = align
89
+ @aria_id = aria_id
90
+ super(**attributes)
91
+ end
92
+
93
+ def view_template(&)
94
+ div(
95
+ class: "hidden fixed top-0 left-0 w-max z-50",
96
+ data: { popover_target: "contentContainer" },
97
+ ) do
98
+ div(**@attributes, &)
99
+ end
100
+ end
101
+
102
+ def default_attributes
103
+ {
104
+ id: "#{@aria_id}-content",
105
+ tabindex: -1,
106
+ role: "dialog",
107
+ data: {
108
+ side: @side,
109
+ align: @align,
110
+ popover_target: "content",
111
+ action: "popover:click:outside->popover#clickOutside",
112
+ },
113
+ }
114
+ end
115
+ end
116
+ end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module ShadcnPhlexcomponents
4
4
  class Progress < Base
5
- STYLES = "relative h-2 w-full overflow-hidden rounded-full bg-primary/20"
5
+ class_variants(base: "bg-primary/20 relative h-2 w-full overflow-hidden rounded-full")
6
6
 
7
7
  def initialize(value: 0, **attributes)
8
8
  @value = value
@@ -19,7 +19,7 @@ module ShadcnPhlexcomponents
19
19
  },
20
20
  data: {
21
21
  controller: "progress",
22
- "progress-progress-value": @value,
22
+ progress_percent_value: @value,
23
23
  },
24
24
  }
25
25
  end
@@ -27,9 +27,9 @@ module ShadcnPhlexcomponents
27
27
  def view_template
28
28
  div(**@attributes) do
29
29
  div(
30
- class: "h-full w-full flex-1 bg-primary transition-all",
30
+ class: "bg-primary h-full w-full flex-1 transition-all",
31
31
  style: "transform: translateX(-#{100 - @value}%)",
32
- data: { "progress-target": "bar" },
32
+ data: { progress_target: "indicator" },
33
33
  )
34
34
  end
35
35
  end