shadcn_phlexcomponents 0.1.9 → 0.1.14

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 (256) hide show
  1. checksums.yaml +4 -4
  2. data/app/javascript/controllers/accordion_controller.ts +136 -0
  3. data/app/javascript/controllers/alert_dialog_controller.ts +12 -0
  4. data/app/javascript/controllers/avatar_controller.ts +24 -0
  5. data/app/javascript/controllers/checkbox_controller.ts +41 -0
  6. data/app/javascript/controllers/collapsible_controller.ts +52 -0
  7. data/app/javascript/controllers/combobox_controller.ts +376 -0
  8. data/app/javascript/controllers/command_controller.ts +301 -0
  9. data/app/javascript/controllers/date_picker_controller.ts +334 -0
  10. data/app/javascript/controllers/date_range_picker_controller.ts +253 -0
  11. data/app/javascript/controllers/dialog_controller.ts +115 -0
  12. data/app/javascript/controllers/dropdown_menu_controller.ts +309 -0
  13. data/app/javascript/controllers/dropdown_menu_sub_controller.ts +152 -0
  14. data/app/javascript/controllers/form_field_controller.ts +27 -0
  15. data/app/javascript/controllers/hover_card_controller.ts +103 -0
  16. data/app/javascript/controllers/{loading_button_controller.js → loading_button_controller.ts} +7 -2
  17. data/app/javascript/controllers/popover_controller.ts +118 -0
  18. data/app/javascript/controllers/progress_controller.ts +23 -0
  19. data/app/javascript/controllers/radio_group_controller.ts +113 -0
  20. data/app/javascript/controllers/select_controller.ts +341 -0
  21. data/app/javascript/controllers/{sidebar_controller.js → sidebar_controller.ts} +6 -2
  22. data/app/javascript/controllers/sidebar_trigger_controller.ts +21 -0
  23. data/app/javascript/controllers/slider_controller.ts +114 -0
  24. data/app/javascript/controllers/switch_controller.ts +37 -0
  25. data/app/javascript/controllers/tabs_controller.ts +87 -0
  26. data/app/javascript/controllers/theme_switcher_controller.ts +40 -0
  27. data/app/javascript/controllers/toast_container_controller.ts +67 -0
  28. data/app/javascript/controllers/toast_controller.ts +34 -0
  29. data/app/javascript/controllers/toggle_controller.ts +28 -0
  30. data/app/javascript/controllers/toggle_group_controller.ts +28 -0
  31. data/app/javascript/controllers/tooltip_controller.ts +110 -0
  32. data/app/javascript/shadcn_phlexcomponents.ts +61 -0
  33. data/app/javascript/utils/command.ts +544 -0
  34. data/app/javascript/utils/floating_ui.ts +196 -0
  35. data/app/javascript/utils/index.ts +417 -0
  36. data/app/stylesheets/date_picker.css +81 -101
  37. data/app/stylesheets/nouislider.css +173 -0
  38. data/app/stylesheets/tw-animate.css +486 -0
  39. data/lib/install/install_shadcn_phlexcomponents.rb +16 -3
  40. data/lib/shadcn_phlexcomponents/alias.rb +6 -1
  41. data/lib/shadcn_phlexcomponents/components/accordion.rb +130 -0
  42. data/lib/shadcn_phlexcomponents/components/alert.rb +59 -0
  43. data/lib/shadcn_phlexcomponents/components/alert_dialog.rb +279 -0
  44. data/lib/shadcn_phlexcomponents/components/{aspect_ratio/aspect_ratio.rb → aspect_ratio.rb} +2 -2
  45. data/lib/shadcn_phlexcomponents/components/avatar.rb +63 -0
  46. data/lib/shadcn_phlexcomponents/components/badge.rb +35 -0
  47. data/lib/shadcn_phlexcomponents/components/base.rb +48 -7
  48. data/lib/shadcn_phlexcomponents/components/breadcrumb.rb +150 -0
  49. data/lib/shadcn_phlexcomponents/components/button.rb +49 -0
  50. data/lib/shadcn_phlexcomponents/components/card.rb +88 -0
  51. data/lib/shadcn_phlexcomponents/components/{checkbox/checkbox.rb → checkbox.rb} +18 -14
  52. data/lib/shadcn_phlexcomponents/components/{checkbox_group/checkbox_group.rb → checkbox_group.rb} +7 -8
  53. data/lib/shadcn_phlexcomponents/components/collapsible.rb +90 -0
  54. data/lib/shadcn_phlexcomponents/components/combobox.rb +428 -0
  55. data/lib/shadcn_phlexcomponents/components/command.rb +381 -0
  56. data/lib/shadcn_phlexcomponents/components/date_picker.rb +208 -0
  57. data/lib/shadcn_phlexcomponents/components/date_range_picker.rb +143 -0
  58. data/lib/shadcn_phlexcomponents/components/dialog.rb +236 -0
  59. data/lib/shadcn_phlexcomponents/components/dropdown_menu.rb +283 -0
  60. data/lib/shadcn_phlexcomponents/components/dropdown_menu_sub.rb +136 -0
  61. data/lib/shadcn_phlexcomponents/components/form/form_checkbox.rb +6 -7
  62. data/lib/shadcn_phlexcomponents/components/form/form_checkbox_group.rb +2 -2
  63. data/lib/shadcn_phlexcomponents/components/form/form_combobox.rb +64 -0
  64. data/lib/shadcn_phlexcomponents/components/form/form_date_picker.rb +3 -4
  65. data/lib/shadcn_phlexcomponents/components/form/form_date_range_picker.rb +27 -41
  66. data/lib/shadcn_phlexcomponents/components/form/form_error.rb +1 -1
  67. data/lib/shadcn_phlexcomponents/components/form/form_helpers.rb +43 -8
  68. data/lib/shadcn_phlexcomponents/components/form/form_hint.rb +1 -1
  69. data/lib/shadcn_phlexcomponents/components/form/form_input.rb +3 -4
  70. data/lib/shadcn_phlexcomponents/components/form/form_radio_group.rb +4 -5
  71. data/lib/shadcn_phlexcomponents/components/form/form_select.rb +3 -4
  72. data/lib/shadcn_phlexcomponents/components/form/form_slider.rb +91 -0
  73. data/lib/shadcn_phlexcomponents/components/form/form_switch.rb +7 -6
  74. data/lib/shadcn_phlexcomponents/components/form/form_textarea.rb +3 -4
  75. data/lib/shadcn_phlexcomponents/components/{form/form.rb → form.rb} +36 -4
  76. data/lib/shadcn_phlexcomponents/components/hover_card.rb +111 -0
  77. data/lib/shadcn_phlexcomponents/components/input.rb +31 -0
  78. data/lib/shadcn_phlexcomponents/components/label.rb +16 -0
  79. data/lib/shadcn_phlexcomponents/components/{link/link.rb → link.rb} +10 -3
  80. data/lib/shadcn_phlexcomponents/components/{loading_button/loading_button.rb → loading_button.rb} +9 -2
  81. data/lib/shadcn_phlexcomponents/components/pagination.rb +166 -0
  82. data/lib/shadcn_phlexcomponents/components/popover.rb +116 -0
  83. data/lib/shadcn_phlexcomponents/components/{progress/progress.rb → progress.rb} +4 -4
  84. data/lib/shadcn_phlexcomponents/components/radio_group.rb +155 -0
  85. data/lib/shadcn_phlexcomponents/components/select.rb +406 -0
  86. data/lib/shadcn_phlexcomponents/components/{separator/separator.rb → separator.rb} +9 -8
  87. data/lib/shadcn_phlexcomponents/components/sheet.rb +243 -0
  88. data/lib/shadcn_phlexcomponents/components/{skeleton/skeleton.rb → skeleton.rb} +1 -1
  89. data/lib/shadcn_phlexcomponents/components/slider.rb +72 -0
  90. data/lib/shadcn_phlexcomponents/components/switch.rb +75 -0
  91. data/lib/shadcn_phlexcomponents/components/table.rb +140 -0
  92. data/lib/shadcn_phlexcomponents/components/tabs.rb +135 -0
  93. data/lib/shadcn_phlexcomponents/components/textarea.rb +24 -0
  94. data/lib/shadcn_phlexcomponents/components/toast.rb +153 -0
  95. data/lib/shadcn_phlexcomponents/components/{toast/toast_container.rb → toast_container.rb} +23 -4
  96. data/lib/shadcn_phlexcomponents/components/toggle.rb +54 -0
  97. data/lib/shadcn_phlexcomponents/components/tooltip.rb +132 -0
  98. data/lib/shadcn_phlexcomponents/engine.rb +1 -5
  99. data/lib/shadcn_phlexcomponents/initializers/shadcn_phlexcomponents.rb +25 -0
  100. data/lib/shadcn_phlexcomponents/version.rb +1 -1
  101. data/lib/tasks/install.rake +1 -1
  102. metadata +83 -167
  103. data/app/javascript/controllers/accordion_controller.js +0 -124
  104. data/app/javascript/controllers/alert_dialog_controller.js +0 -21
  105. data/app/javascript/controllers/avatar_controller.js +0 -15
  106. data/app/javascript/controllers/checkbox_controller.js +0 -28
  107. data/app/javascript/controllers/collapsible_controller.js +0 -35
  108. data/app/javascript/controllers/combobox_controller.js +0 -54
  109. data/app/javascript/controllers/date_picker_controller.js +0 -253
  110. data/app/javascript/controllers/date_range_picker_controller.js +0 -344
  111. data/app/javascript/controllers/dialog_controller.js +0 -114
  112. data/app/javascript/controllers/dropdown_menu_controller.js +0 -171
  113. data/app/javascript/controllers/form_field_controller.js +0 -24
  114. data/app/javascript/controllers/hover_card_controller.js +0 -21
  115. data/app/javascript/controllers/popover_controller.js +0 -113
  116. data/app/javascript/controllers/progress_controller.js +0 -14
  117. data/app/javascript/controllers/radio_group_controller.js +0 -90
  118. data/app/javascript/controllers/select_controller.js +0 -274
  119. data/app/javascript/controllers/sidebar_trigger_controller.js +0 -15
  120. data/app/javascript/controllers/switch_controller.js +0 -24
  121. data/app/javascript/controllers/tabs_controller.js +0 -73
  122. data/app/javascript/controllers/theme_switcher_controller.js +0 -32
  123. data/app/javascript/controllers/toast_container_controller.js +0 -22
  124. data/app/javascript/controllers/toast_controller.js +0 -45
  125. data/app/javascript/controllers/tooltip_controller.js +0 -40
  126. data/app/javascript/shadcn_phlexcomponents.js +0 -53
  127. data/app/javascript/utils.js +0 -184
  128. data/app/stylesheets/choices.css +0 -324
  129. data/app/stylesheets/tailwindcss-animate.css +0 -318
  130. data/lib/shadcn_phlexcomponents/components/accordion/accordion.rb +0 -38
  131. data/lib/shadcn_phlexcomponents/components/accordion/accordion_content.rb +0 -30
  132. data/lib/shadcn_phlexcomponents/components/accordion/accordion_item.rb +0 -26
  133. data/lib/shadcn_phlexcomponents/components/accordion/accordion_trigger.rb +0 -46
  134. data/lib/shadcn_phlexcomponents/components/alert/alert.rb +0 -40
  135. data/lib/shadcn_phlexcomponents/components/alert/alert_description.rb +0 -11
  136. data/lib/shadcn_phlexcomponents/components/alert/alert_title.rb +0 -11
  137. data/lib/shadcn_phlexcomponents/components/alert_dialog/alert_dialog.rb +0 -60
  138. data/lib/shadcn_phlexcomponents/components/alert_dialog/alert_dialog_action.rb +0 -22
  139. data/lib/shadcn_phlexcomponents/components/alert_dialog/alert_dialog_action_to.rb +0 -40
  140. data/lib/shadcn_phlexcomponents/components/alert_dialog/alert_dialog_cancel.rb +0 -22
  141. data/lib/shadcn_phlexcomponents/components/alert_dialog/alert_dialog_content.rb +0 -40
  142. data/lib/shadcn_phlexcomponents/components/alert_dialog/alert_dialog_description.rb +0 -22
  143. data/lib/shadcn_phlexcomponents/components/alert_dialog/alert_dialog_footer.rb +0 -11
  144. data/lib/shadcn_phlexcomponents/components/alert_dialog/alert_dialog_header.rb +0 -11
  145. data/lib/shadcn_phlexcomponents/components/alert_dialog/alert_dialog_title.rb +0 -22
  146. data/lib/shadcn_phlexcomponents/components/alert_dialog/alert_dialog_trigger.rb +0 -50
  147. data/lib/shadcn_phlexcomponents/components/avatar/avatar.rb +0 -31
  148. data/lib/shadcn_phlexcomponents/components/avatar/avatar_fallback.rb +0 -21
  149. data/lib/shadcn_phlexcomponents/components/avatar/avatar_image.rb +0 -19
  150. data/lib/shadcn_phlexcomponents/components/badge/badge.rb +0 -30
  151. data/lib/shadcn_phlexcomponents/components/breadcrumb/breadcrumb.rb +0 -53
  152. data/lib/shadcn_phlexcomponents/components/breadcrumb/breadcrumb_ellipsis.rb +0 -23
  153. data/lib/shadcn_phlexcomponents/components/breadcrumb/breadcrumb_item.rb +0 -11
  154. data/lib/shadcn_phlexcomponents/components/breadcrumb/breadcrumb_link.rb +0 -7
  155. data/lib/shadcn_phlexcomponents/components/breadcrumb/breadcrumb_page.rb +0 -21
  156. data/lib/shadcn_phlexcomponents/components/breadcrumb/breadcrumb_separator.rb +0 -26
  157. data/lib/shadcn_phlexcomponents/components/button/button.rb +0 -53
  158. data/lib/shadcn_phlexcomponents/components/card/card.rb +0 -31
  159. data/lib/shadcn_phlexcomponents/components/card/card_content.rb +0 -11
  160. data/lib/shadcn_phlexcomponents/components/card/card_description.rb +0 -11
  161. data/lib/shadcn_phlexcomponents/components/card/card_footer.rb +0 -11
  162. data/lib/shadcn_phlexcomponents/components/card/card_header.rb +0 -11
  163. data/lib/shadcn_phlexcomponents/components/card/card_title.rb +0 -11
  164. data/lib/shadcn_phlexcomponents/components/collapsible/collapsible.rb +0 -31
  165. data/lib/shadcn_phlexcomponents/components/collapsible/collapsible_content.rb +0 -24
  166. data/lib/shadcn_phlexcomponents/components/collapsible/collapsible_trigger.rb +0 -50
  167. data/lib/shadcn_phlexcomponents/components/date_picker/date_picker.rb +0 -87
  168. data/lib/shadcn_phlexcomponents/components/date_picker/date_picker_content.rb +0 -45
  169. data/lib/shadcn_phlexcomponents/components/date_picker/date_picker_trigger.rb +0 -64
  170. data/lib/shadcn_phlexcomponents/components/date_range_picker/date_range_picker.rb +0 -105
  171. data/lib/shadcn_phlexcomponents/components/date_range_picker/date_range_picker_content.rb +0 -9
  172. data/lib/shadcn_phlexcomponents/components/date_range_picker/date_range_picker_trigger.rb +0 -9
  173. data/lib/shadcn_phlexcomponents/components/dialog/dialog.rb +0 -52
  174. data/lib/shadcn_phlexcomponents/components/dialog/dialog_close.rb +0 -42
  175. data/lib/shadcn_phlexcomponents/components/dialog/dialog_content.rb +0 -54
  176. data/lib/shadcn_phlexcomponents/components/dialog/dialog_description.rb +0 -22
  177. data/lib/shadcn_phlexcomponents/components/dialog/dialog_footer.rb +0 -11
  178. data/lib/shadcn_phlexcomponents/components/dialog/dialog_header.rb +0 -11
  179. data/lib/shadcn_phlexcomponents/components/dialog/dialog_title.rb +0 -22
  180. data/lib/shadcn_phlexcomponents/components/dialog/dialog_trigger.rb +0 -50
  181. data/lib/shadcn_phlexcomponents/components/dropdown_menu/dropdown_menu.rb +0 -50
  182. data/lib/shadcn_phlexcomponents/components/dropdown_menu/dropdown_menu_content.rb +0 -52
  183. data/lib/shadcn_phlexcomponents/components/dropdown_menu/dropdown_menu_item.rb +0 -56
  184. data/lib/shadcn_phlexcomponents/components/dropdown_menu/dropdown_menu_item_to.rb +0 -28
  185. data/lib/shadcn_phlexcomponents/components/dropdown_menu/dropdown_menu_label.rb +0 -11
  186. data/lib/shadcn_phlexcomponents/components/dropdown_menu/dropdown_menu_separator.rb +0 -20
  187. data/lib/shadcn_phlexcomponents/components/dropdown_menu/dropdown_menu_trigger.rb +0 -57
  188. data/lib/shadcn_phlexcomponents/components/hover_card/hover_card.rb +0 -33
  189. data/lib/shadcn_phlexcomponents/components/hover_card/hover_card_content.rb +0 -32
  190. data/lib/shadcn_phlexcomponents/components/hover_card/hover_card_trigger.rb +0 -44
  191. data/lib/shadcn_phlexcomponents/components/input/input.rb +0 -32
  192. data/lib/shadcn_phlexcomponents/components/label/label.rb +0 -14
  193. data/lib/shadcn_phlexcomponents/components/pagination/pagination.rb +0 -38
  194. data/lib/shadcn_phlexcomponents/components/pagination/pagination_ellipsis.rb +0 -24
  195. data/lib/shadcn_phlexcomponents/components/pagination/pagination_link.rb +0 -34
  196. data/lib/shadcn_phlexcomponents/components/pagination/pagination_next.rb +0 -32
  197. data/lib/shadcn_phlexcomponents/components/pagination/pagination_previous.rb +0 -32
  198. data/lib/shadcn_phlexcomponents/components/popover/popover.rb +0 -34
  199. data/lib/shadcn_phlexcomponents/components/popover/popover_content.rb +0 -40
  200. data/lib/shadcn_phlexcomponents/components/popover/popover_trigger.rb +0 -50
  201. data/lib/shadcn_phlexcomponents/components/radio_group/radio_group.rb +0 -88
  202. data/lib/shadcn_phlexcomponents/components/radio_group/radio_group_item.rb +0 -66
  203. data/lib/shadcn_phlexcomponents/components/select/select.rb +0 -194
  204. data/lib/shadcn_phlexcomponents/components/select/select_content.rb +0 -64
  205. data/lib/shadcn_phlexcomponents/components/select/select_group.rb +0 -23
  206. data/lib/shadcn_phlexcomponents/components/select/select_item.rb +0 -59
  207. data/lib/shadcn_phlexcomponents/components/select/select_label.rb +0 -24
  208. data/lib/shadcn_phlexcomponents/components/select/select_trigger.rb +0 -56
  209. data/lib/shadcn_phlexcomponents/components/sheet/sheet.rb +0 -53
  210. data/lib/shadcn_phlexcomponents/components/sheet/sheet_close.rb +0 -42
  211. data/lib/shadcn_phlexcomponents/components/sheet/sheet_content.rb +0 -65
  212. data/lib/shadcn_phlexcomponents/components/sheet/sheet_description.rb +0 -22
  213. data/lib/shadcn_phlexcomponents/components/sheet/sheet_footer.rb +0 -11
  214. data/lib/shadcn_phlexcomponents/components/sheet/sheet_header.rb +0 -11
  215. data/lib/shadcn_phlexcomponents/components/sheet/sheet_title.rb +0 -22
  216. data/lib/shadcn_phlexcomponents/components/sheet/sheet_trigger.rb +0 -50
  217. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar.rb +0 -108
  218. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_container.rb +0 -11
  219. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_content.rb +0 -11
  220. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_footer.rb +0 -11
  221. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_group.rb +0 -11
  222. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_group_content.rb +0 -11
  223. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_group_label.rb +0 -16
  224. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_header.rb +0 -11
  225. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_inset.rb +0 -15
  226. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_menu.rb +0 -11
  227. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_menu_button.rb +0 -61
  228. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_menu_item.rb +0 -9
  229. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_menu_sub.rb +0 -14
  230. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_menu_sub_button.rb +0 -48
  231. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_menu_sub_item.rb +0 -9
  232. data/lib/shadcn_phlexcomponents/components/sidebar/sidebar_trigger.rb +0 -40
  233. data/lib/shadcn_phlexcomponents/components/switch/switch.rb +0 -66
  234. data/lib/shadcn_phlexcomponents/components/table/table.rb +0 -75
  235. data/lib/shadcn_phlexcomponents/components/table/table_body.rb +0 -11
  236. data/lib/shadcn_phlexcomponents/components/table/table_caption.rb +0 -11
  237. data/lib/shadcn_phlexcomponents/components/table/table_cell.rb +0 -11
  238. data/lib/shadcn_phlexcomponents/components/table/table_footer.rb +0 -11
  239. data/lib/shadcn_phlexcomponents/components/table/table_head.rb +0 -14
  240. data/lib/shadcn_phlexcomponents/components/table/table_header.rb +0 -11
  241. data/lib/shadcn_phlexcomponents/components/table/table_row.rb +0 -11
  242. data/lib/shadcn_phlexcomponents/components/tabs/tabs.rb +0 -38
  243. data/lib/shadcn_phlexcomponents/components/tabs/tabs_content.rb +0 -35
  244. data/lib/shadcn_phlexcomponents/components/tabs/tabs_list.rb +0 -23
  245. data/lib/shadcn_phlexcomponents/components/tabs/tabs_trigger.rb +0 -45
  246. data/lib/shadcn_phlexcomponents/components/textarea/textarea.rb +0 -29
  247. data/lib/shadcn_phlexcomponents/components/toast/toast.rb +0 -101
  248. data/lib/shadcn_phlexcomponents/components/toast/toast_action.rb +0 -39
  249. data/lib/shadcn_phlexcomponents/components/toast/toast_action_to.rb +0 -28
  250. data/lib/shadcn_phlexcomponents/components/toast/toast_content.rb +0 -11
  251. data/lib/shadcn_phlexcomponents/components/toast/toast_description.rb +0 -11
  252. data/lib/shadcn_phlexcomponents/components/toast/toast_title.rb +0 -11
  253. data/lib/shadcn_phlexcomponents/components/tooltip/tooltip.rb +0 -34
  254. data/lib/shadcn_phlexcomponents/components/tooltip/tooltip_content.rb +0 -39
  255. data/lib/shadcn_phlexcomponents/components/tooltip/tooltip_trigger.rb +0 -48
  256. /data/lib/shadcn_phlexcomponents/components/{theme_switcher/theme_switcher.rb → theme_switcher.rb} +0 -0
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class BreadcrumbSeparator < Base
5
- STYLES = "[&>svg]:w-3.5 [&>svg]:h-3.5"
6
-
7
- def default_attributes
8
- {
9
- role: "presentation",
10
- aria: {
11
- hidden: "true",
12
- },
13
- }
14
- end
15
-
16
- def view_template(&)
17
- li(**@attributes) do
18
- if block_given?
19
- yield
20
- else
21
- icon("chevron-right")
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,53 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class Button < Base
5
- STYLES = <<~HEREDOC
6
- inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm
7
- font-medium transition-colors focus-visible:outline-none focus-visible:ring-1
8
- focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50
9
- [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 cursor-pointer
10
- HEREDOC
11
-
12
- VARIANTS = {
13
- primary: "bg-primary text-primary-foreground shadow hover:bg-primary/90",
14
- secondary: "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",
15
- destructive: "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
16
- outline: "border border-input bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground",
17
- ghost: "hover:bg-accent hover:text-accent-foreground",
18
- link: "text-primary underline-offset-4 hover:underline",
19
- }.freeze
20
-
21
- SIZES = {
22
- default: "h-9 px-4 py-2",
23
- sm: "h-8 px-3 text-xs",
24
- lg: "h-10 px-8",
25
- icon: "h-9 w-9",
26
- }
27
-
28
- class << self
29
- def default_styles(variant:, size:)
30
- "#{STYLES} #{VARIANTS[variant]} #{SIZES[size]}"
31
- end
32
- end
33
-
34
- def initialize(variant: :primary, size: :default, type: :button, **attributes)
35
- @type = type
36
- @variant = variant
37
- @size = size
38
- super(**attributes)
39
- end
40
-
41
- def default_attributes
42
- { type: @type }
43
- end
44
-
45
- def default_styles
46
- self.class.default_styles(variant: @variant, size: @size)
47
- end
48
-
49
- def view_template(&)
50
- button(**@attributes, &)
51
- end
52
- end
53
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class Card < Base
5
- STYLES = "rounded-xl border bg-card text-card-foreground shadow"
6
-
7
- def header(**attributes, &)
8
- CardHeader(**attributes, &)
9
- end
10
-
11
- def title(**attributes, &)
12
- CardTitle(**attributes, &)
13
- end
14
-
15
- def description(**attributes, &)
16
- CardDescription(**attributes, &)
17
- end
18
-
19
- def content(**attributes, &)
20
- CardContent(**attributes, &)
21
- end
22
-
23
- def footer(**attributes, &)
24
- CardFooter(**attributes, &)
25
- end
26
-
27
- def view_template(&)
28
- div(**@attributes, &)
29
- end
30
- end
31
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class CardContent < Base
5
- STYLES = "p-6 pt-0"
6
-
7
- def view_template(&)
8
- div(**@attributes, &)
9
- end
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class CardDescription < Base
5
- STYLES = "text-sm text-muted-foreground"
6
-
7
- def view_template(&)
8
- div(**@attributes, &)
9
- end
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class CardFooter < Base
5
- STYLES = "flex items-center p-6 pt-0"
6
-
7
- def view_template(&)
8
- div(**@attributes, &)
9
- end
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class CardHeader < Base
5
- STYLES = "flex flex-col space-y-1.5 p-6"
6
-
7
- def view_template(&)
8
- div(**@attributes, &)
9
- end
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class CardTitle < Base
5
- STYLES = "font-semibold leading-none tracking-tight"
6
-
7
- def view_template(&)
8
- div(**@attributes, &)
9
- end
10
- end
11
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class Collapsible < Base
5
- def initialize(open: false, aria_id: "collapsible-#{SecureRandom.hex(5)}", **attributes)
6
- @open = open
7
- @aria_id = aria_id
8
- super(**attributes)
9
- end
10
-
11
- def trigger(**attributes, &)
12
- CollapsibleTrigger(open: @open, aria_id: @aria_id, **attributes, &)
13
- end
14
-
15
- def content(**attributes, &)
16
- CollapsibleContent(aria_id: @aria_id, **attributes, &)
17
- end
18
-
19
- def default_attributes
20
- {
21
- data: {
22
- controller: "collapsible",
23
- },
24
- }
25
- end
26
-
27
- def view_template(&)
28
- div(**@attributes, &)
29
- end
30
- end
31
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class CollapsibleContent < Base
5
- def initialize(aria_id: :nil, **attributes)
6
- @aria_id = aria_id
7
- super(**attributes)
8
- end
9
-
10
- def default_attributes
11
- {
12
- id: "#{@aria_id}-content",
13
- data: {
14
- "collapsible-target": "content",
15
- },
16
- }
17
- end
18
-
19
- def view_template(&)
20
- @class = @attributes.delete(:class)
21
- div(class: "#{@class} hidden", **@attributes, &)
22
- end
23
- end
24
- end
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class CollapsibleTrigger < Base
5
- def initialize(open: false, as_child: false, aria_id: nil, **attributes)
6
- @open = open
7
- @as_child = as_child
8
- @aria_id = aria_id
9
- super(**attributes)
10
- end
11
-
12
- def default_attributes
13
- {
14
- role: "button",
15
- aria: {
16
- expanded: @open.to_s,
17
- controls: "#{@aria_id}-content",
18
- },
19
- data: {
20
- state: @open ? "open" : "closed",
21
- action: "click->collapsible#toggle",
22
- "collapsible-target": "trigger",
23
- },
24
- }
25
- end
26
-
27
- def view_template(&)
28
- if @as_child
29
- content = capture(&)
30
- element = find_as_child(content.to_s)
31
-
32
- vanish(&)
33
- element_attributes = nokogiri_attributes_to_hash(element)
34
- styles = TAILWIND_MERGER.merge("#{@attributes[:class]} #{element_attributes[:class]}")
35
- merged_attributes = mix(@attributes, element_attributes)
36
- merged_attributes[:class] = styles
37
-
38
- if element.name == "button"
39
- merged_attributes.delete(:role)
40
- end
41
-
42
- send(element.name, **merged_attributes) do
43
- sanitize_as_child(element.children.to_s)
44
- end
45
- else
46
- div(**@attributes, &)
47
- end
48
- end
49
- end
50
- end
@@ -1,87 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class DatePicker < Base
5
- STYLES = "w-full"
6
- CONTAINER_STYLES = <<~HEREDOC
7
- flex rounded-md border border-input items-center shadow-sm outline-none
8
- data-[focus=true]:ring-1 data-[focus=true]:ring-ring focus:ring-1 focus:ring-ring
9
- data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50
10
- HEREDOC
11
- INPUT_STYLES = <<~HEREDOC
12
- flex h-9 w-full bg-transparent px-3 py-1 text-base transition-colors placeholder:text-muted-foreground
13
- focus-visible:outline-none grow md:text-sm
14
- HEREDOC
15
-
16
- def initialize(name: nil, id: nil, value: nil, format: "DD/MM/YYYY", select_only: false, placeholder: nil,
17
- disabled: false, settings: {}, aria_id: "date-picker-#{SecureRandom.hex(5)}", **attributes)
18
- @name = name
19
- @id = id || @name
20
- @value = value&.utc&.iso8601
21
- @format = format
22
- @select_only = select_only
23
- @placeholder = placeholder
24
- @disabled = disabled
25
- @settings = settings
26
- @aria_id = aria_id
27
- super(**attributes)
28
- end
29
-
30
- def default_attributes
31
- {
32
- data: {
33
- controller: "date-picker",
34
- value: @value,
35
- format: @format,
36
- settings: @settings.to_json,
37
- },
38
- }
39
- end
40
-
41
- def view_template(&)
42
- div(**@attributes) do
43
- input(
44
- type: :hidden,
45
- name: @name,
46
- value: @value,
47
- data: { "date-picker-target": "hiddenInput" },
48
- )
49
-
50
- if @select_only
51
- DatePickerTrigger(
52
- disabled: @disabled,
53
- aria_id: @aria_id,
54
- select_only: @select_only,
55
- select_only_id: @id,
56
- placeholder: @placeholder,
57
- )
58
- else
59
- div(class: CONTAINER_STYLES, data: { "date-picker-target": "inputContainer", disabled: @disabled }) do
60
- input(
61
- id: @id,
62
- placeholder: @placeholder || @format,
63
- type: :text,
64
- class: INPUT_STYLES,
65
- disabled: @disabled,
66
- data: {
67
- "date-picker-target": "input",
68
- action: "input->date-picker#changeDate
69
- blur->date-picker#inputBlur
70
- focus->date-picker#setContainerFocus",
71
- },
72
- )
73
-
74
- DatePickerTrigger(
75
- disabled: @disabled,
76
- aria_id: @aria_id,
77
- select_only: @select_only,
78
- placeholder: @placeholder,
79
- )
80
- end
81
- end
82
-
83
- DatePickerContent(aria_id: @aria_id)
84
- end
85
- end
86
- end
87
- end
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class DatePickerContent < Base
5
- STYLES = <<~HEREDOC
6
- z-51 bg-popover text-popover-foreground outline-none rounded-md min-w-[300px]
7
- fixed left-[50%] top-[50%] shadow-lg grid translate-x-[-50%] translate-y-[-50%]#{" "}
8
- md:relative md:left-[unset] md:top-[unset] md:shadow-md md:block md:translate-x-[unset] md:translate-y-[unset] md:min-w-auto
9
- data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0
10
- data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95
11
- slide-in-from-top-2
12
- HEREDOC
13
-
14
- def initialize(aria_id: nil, **attributes)
15
- @aria_id = aria_id
16
- super(**attributes)
17
- end
18
-
19
- def view_template(&)
20
- div(
21
- class: "hidden fixed top-0 left-0 w-max z-51",
22
- data: { "#{stimulus_controller_name}-target" => "contentWrapper" },
23
- ) do
24
- div(**@attributes) do
25
- div(data: { "#{stimulus_controller_name}-target" => "calendar" })
26
- end
27
- end
28
- end
29
-
30
- def default_attributes
31
- {
32
- id: "#{@aria_id}-content",
33
- tabindex: -1,
34
- role: "dialog",
35
- data: {
36
- "#{stimulus_controller_name}-target" => "content",
37
- },
38
- }
39
- end
40
-
41
- def stimulus_controller_name
42
- "date-picker"
43
- end
44
- end
45
- end
@@ -1,64 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class DatePickerTrigger < Base
5
- SELECT_ONLY_BUTTON_STYLES = <<~HEREDOC
6
- flex h-9 items-center justify-between whitespace-nowrap rounded-md border
7
- border-input bg-transparent px-3 py-2 gap-1.5 text-base md:text-sm shadow-sm ring-offset-background
8
- data-[placeholder]:data-[has-value=false]:text-muted-foreground focus:outline-none focus:ring-1
9
- focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1
10
- w-full cursor-pointer hover:bg-accent hover:text-accent-foreground disabled:hover:bg-transparent
11
- HEREDOC
12
-
13
- def initialize(disabled: false, select_only: true, placeholder: nil, select_only_id: nil, aria_id: nil,
14
- **attributes)
15
- @disabled = disabled
16
- @select_only = select_only
17
- @placeholder = placeholder
18
- @select_only_id = select_only_id
19
- @aria_id = aria_id
20
- super(**attributes)
21
- end
22
-
23
- def view_template
24
- if @select_only
25
- button(type: :button, disabled: @disabled, id: @select_only_id, **@attributes) do
26
- span(class: "pointer-events-none", data: { "#{stimulus_controller_name}-target" => "triggerText" })
27
-
28
- icon("calendar", class: "size-4 text-foreground")
29
- end
30
- else
31
- button(type: :button, disabled: @disabled, **@attributes) do
32
- icon("calendar")
33
- end
34
- end
35
- end
36
-
37
- def default_styles
38
- if @select_only
39
- SELECT_ONLY_BUTTON_STYLES
40
- else
41
- "#{Button.default_styles(variant: :ghost, size: :icon)} mr-1.25 h-7 w-8 disabled:!opacity-100"
42
- end
43
- end
44
-
45
- def default_attributes
46
- {
47
- aria: {
48
- haspopup: "dialog",
49
- expanded: false,
50
- controls: "#{@aria_id}-content",
51
- },
52
- data: {
53
- placeholder: @placeholder,
54
- action: "click->#{stimulus_controller_name}#toggle",
55
- "#{stimulus_controller_name}-target" => "trigger",
56
- },
57
- }
58
- end
59
-
60
- def stimulus_controller_name
61
- "date-picker"
62
- end
63
- end
64
- end
@@ -1,105 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class DateRangePicker < Base
5
- def initialize(
6
- start_date_name: nil,
7
- end_date_name: nil,
8
- id: nil,
9
- start_date: nil,
10
- end_date: nil,
11
- format: "DD/MM/YYYY",
12
- select_only: false,
13
- placeholder: nil,
14
- disabled: false,
15
- settings: {},
16
- aria_id: "date-range-picker-#{SecureRandom.hex(5)}",
17
- **attributes
18
- )
19
- @start_date_name = start_date_name
20
- @end_date_name = end_date_name
21
- @id = id || start_date_name
22
- @start_date = start_date&.utc&.iso8601
23
- @end_date = end_date&.utc&.iso8601
24
- @format = format
25
- @select_only = select_only
26
- @placeholder = placeholder
27
- @disabled = disabled
28
- @settings = settings
29
- @aria_id = aria_id
30
- super(**attributes)
31
- end
32
-
33
- def default_styles
34
- DatePicker::STYLES
35
- end
36
-
37
- def default_attributes
38
- {
39
- data: {
40
- controller: "date-range-picker",
41
- start_date: @start_date,
42
- end_date: @end_date,
43
- format: @format,
44
- settings: @settings.to_json,
45
- },
46
- }
47
- end
48
-
49
- def view_template(&)
50
- div(**@attributes) do
51
- input(
52
- type: :hidden,
53
- name: @start_date_name,
54
- value: @start_date,
55
- data: { "date-range-picker-target": "startDateHiddenInput" },
56
- )
57
-
58
- input(
59
- type: :hidden,
60
- name: @end_date_name,
61
- value: @end_date,
62
- data: { "date-range-picker-target": "endDateHiddenInput" },
63
- )
64
-
65
- if @select_only
66
- DateRangePickerTrigger(
67
- disabled: @disabled,
68
- aria_id: @aria_id,
69
- select_only: @select_only,
70
- select_only_id: @id,
71
- placeholder: @placeholder,
72
- )
73
- else
74
- div(
75
- class: DatePicker::CONTAINER_STYLES,
76
- data: { "date-range-picker-target": "inputContainer", disabled: @disabled },
77
- ) do
78
- input(
79
- id: @id,
80
- placeholder: @placeholder || "#{@format} - #{@format}",
81
- type: :text,
82
- class: DatePicker::INPUT_STYLES,
83
- disabled: @disabled,
84
- data: {
85
- "date-range-picker-target": "input",
86
- action: "input->date-range-picker#changeDate
87
- blur->date-range-picker#inputBlur
88
- focus->date-range-picker#setContainerFocus",
89
- },
90
- )
91
-
92
- DateRangePickerTrigger(
93
- disabled: @disabled,
94
- aria_id: @aria_id,
95
- select_only: @select_only,
96
- placeholder: @placeholder,
97
- )
98
- end
99
- end
100
-
101
- DateRangePickerContent(aria_id: @aria_id)
102
- end
103
- end
104
- end
105
- end
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class DateRangePickerContent < DatePickerContent
5
- def stimulus_controller_name
6
- "date-range-picker"
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class DateRangePickerTrigger < DatePickerTrigger
5
- def stimulus_controller_name
6
- "date-range-picker"
7
- end
8
- end
9
- end
@@ -1,52 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class Dialog < Base
5
- STYLES = "inline-block"
6
-
7
- def initialize(aria_id: "dialog-#{SecureRandom.hex(5)}", **attributes)
8
- @aria_id = aria_id
9
- super(**attributes)
10
- end
11
-
12
- def trigger(**attributes, &)
13
- DialogTrigger(aria_id: @aria_id, **attributes, &)
14
- end
15
-
16
- def content(**attributes, &)
17
- DialogContent(aria_id: @aria_id, **attributes, &)
18
- end
19
-
20
- def header(**attributes, &)
21
- DialogHeader(**attributes, &)
22
- end
23
-
24
- def title(**attributes, &)
25
- DialogTitle(aria_id: @aria_id, **attributes, &)
26
- end
27
-
28
- def description(**attributes, &)
29
- DialogDescription(aria_id: @aria_id, **attributes, &)
30
- end
31
-
32
- def footer(**attributes, &)
33
- DialogFooter(**attributes, &)
34
- end
35
-
36
- def close(**attributes, &)
37
- DialogClose(**attributes, &)
38
- end
39
-
40
- def default_attributes
41
- {
42
- data: {
43
- controller: "dialog",
44
- },
45
- }
46
- end
47
-
48
- def view_template(&)
49
- div(**@attributes, &)
50
- end
51
- end
52
- end