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,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class Pagination < Base
5
- STYLES = "mx-auto flex w-full justify-center"
6
-
7
- def link(**attributes, &)
8
- PaginationLink(**attributes, &)
9
- end
10
-
11
- def previous(**attributes, &)
12
- PaginationPrevious(**attributes, &)
13
- end
14
-
15
- def next(**attributes, &)
16
- PaginationNext(**attributes, &)
17
- end
18
-
19
- def ellipsis(**attributes, &)
20
- PaginationEllipsis(**attributes, &)
21
- end
22
-
23
- def default_attributes
24
- {
25
- role: "navigation",
26
- aria: {
27
- label: "navigation",
28
- },
29
- }
30
- end
31
-
32
- def view_template(&)
33
- div(**@attributes) do
34
- ul(class: "flex flex-row items-center gap-1", &)
35
- end
36
- end
37
- end
38
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class PaginationEllipsis < Base
5
- STYLES = "flex h-9 w-9 items-center justify-center"
6
-
7
- def default_attributes
8
- {
9
- aria: {
10
- hidden: "true",
11
- },
12
- }
13
- end
14
-
15
- def view_template
16
- li do
17
- span(**@attributes) do
18
- icon("ellipsis", class: "size-4")
19
- span(class: "sr-only") { "More pages" }
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class PaginationLink < Base
5
- def initialize(href: nil, active: false, **attributes)
6
- @href = href
7
- @active = active
8
- super(**attributes)
9
- end
10
-
11
- def default_styles
12
- if @active
13
- Button.default_styles(variant: :outline, size: :icon)
14
- else
15
- Button.default_styles(variant: :ghost, size: :icon)
16
- end
17
- end
18
-
19
- def default_attributes
20
- {
21
- href: @href,
22
- aria: {
23
- current: @active ? "page" : nil,
24
- },
25
- }
26
- end
27
-
28
- def view_template(&)
29
- li do
30
- a(**@attributes, &)
31
- end
32
- end
33
- end
34
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class PaginationNext < Base
5
- def initialize(href: nil, **attributes)
6
- @href = href
7
- super(**attributes)
8
- end
9
-
10
- def default_styles
11
- "#{Button.default_styles(variant: :ghost, size: :default)} gap-1 pr-2.5"
12
- end
13
-
14
- def default_attributes
15
- {
16
- href: @href,
17
- aria: {
18
- label: "Go to next page",
19
- },
20
- }
21
- end
22
-
23
- def view_template(&)
24
- li do
25
- a(**@attributes) do
26
- span { "Next" }
27
- icon("chevron-right", class: "size-4")
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class PaginationPrevious < Base
5
- def initialize(href: nil, **attributes)
6
- @href = href
7
- super(**attributes)
8
- end
9
-
10
- def default_attributes
11
- {
12
- href: @href,
13
- aria: {
14
- label: "Go to previous page",
15
- },
16
- }
17
- end
18
-
19
- def default_styles
20
- "#{Button.default_styles(variant: :ghost, size: :default)} gap-1 pl-2.5"
21
- end
22
-
23
- def view_template(&)
24
- li do
25
- a(**@attributes) do
26
- icon("chevron-left", class: "size-4")
27
- span { "Previous" }
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class Popover < Base
5
- STYLES = "inline-block"
6
-
7
- def initialize(side: :bottom, aria_id: "popover-#{SecureRandom.hex(5)}", **attributes)
8
- @side = side
9
- @aria_id = aria_id
10
- super(**attributes)
11
- end
12
-
13
- def content(**attributes, &)
14
- PopoverContent(side: @side, aria_id: @aria_id, **attributes, &)
15
- end
16
-
17
- def trigger(**attributes, &)
18
- PopoverTrigger(aria_id: @aria_id, **attributes, &)
19
- end
20
-
21
- def default_attributes
22
- {
23
- data: {
24
- controller: "popover",
25
- side: @side,
26
- },
27
- }
28
- end
29
-
30
- def view_template(&)
31
- div(**@attributes, &)
32
- end
33
- end
34
- end
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class PopoverContent < Base
5
- STYLES = <<~HEREDOC
6
- z-50 rounded-md border w-72 bg-popover p-4 text-popover-foreground shadow-md outline-none
7
- data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0
8
- data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95
9
- data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2
10
- data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2
11
- HEREDOC
12
-
13
- def initialize(side: :bottom, aria_id: nil, **attributes)
14
- @side = side
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-50",
22
- data: { "popover-target": "contentWrapper" },
23
- ) do
24
- div(**@attributes, &)
25
- end
26
- end
27
-
28
- def default_attributes
29
- {
30
- id: "#{@aria_id}-content",
31
- tabindex: -1,
32
- role: "dialog",
33
- data: {
34
- side: @side,
35
- "popover-target": "content",
36
- },
37
- }
38
- end
39
- end
40
- end
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class PopoverTrigger < Base
5
- def initialize(as_child: false, aria_id: nil, **attributes)
6
- @as_child = as_child
7
- @aria_id = aria_id
8
- super(**attributes)
9
- end
10
-
11
- def view_template(&)
12
- if @as_child
13
- content = capture(&)
14
- element = find_as_child(content.to_s)
15
-
16
- vanish(&)
17
- element_attributes = nokogiri_attributes_to_hash(element)
18
- styles = TAILWIND_MERGER.merge("#{@attributes[:class]} #{element_attributes[:class]}")
19
- merged_attributes = mix(@attributes, element_attributes)
20
- merged_attributes[:class] = styles
21
-
22
- if element.name == "button"
23
- merged_attributes.delete(:role)
24
- end
25
-
26
- send(element.name, **merged_attributes) do
27
- sanitize_as_child(element.children.to_s)
28
- end
29
- else
30
- div(**@attributes, &)
31
- end
32
- end
33
-
34
- def default_attributes
35
- {
36
- role: "button",
37
- aria: {
38
- haspopup: "dialog",
39
- expanded: false,
40
- controls: "#{@aria_id}-content",
41
- },
42
- data: {
43
- as_child: @as_child.to_s,
44
- action: "click->popover#toggle",
45
- "popover-target": "trigger",
46
- },
47
- }
48
- end
49
- end
50
- end
@@ -1,88 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class RadioGroup < Base
5
- STYLES = "grid gap-2 outline-none"
6
-
7
- def initialize(name: nil, value: nil, dir: "ltr", include_hidden: true, item_id_prefix: nil, **attributes)
8
- @name = name
9
- @value = value
10
- @dir = dir
11
- @include_hidden = include_hidden
12
- @item_id_prefix = item_id_prefix
13
- super(**attributes)
14
- end
15
-
16
- def label(**attributes)
17
- @label_attributes = attributes
18
- nil
19
- end
20
-
21
- def radio(**attributes)
22
- @radio_attributes = attributes
23
- nil
24
- end
25
-
26
- def item(name: nil, value: nil, **attributes)
27
- RadioGroupItem(name: name || @name, value: value, checked: @value == value, **attributes)
28
- end
29
-
30
- def items(collection, value_method:, text_method:, wrapper_class: nil, disabled_items: nil, &)
31
- vanish(&)
32
-
33
- wrapper_class = TAILWIND_MERGER.merge("flex items-center space-x-2 #{wrapper_class}")
34
-
35
- if collection.first&.is_a?(Hash)
36
- collection = convert_collection_hash_to_struct(collection, value_method: value_method, text_method: text_method)
37
- end
38
-
39
- collection.each do |item|
40
- value = item.public_send(value_method)
41
- text = item.public_send(text_method)
42
- id = if @item_id_prefix
43
- "#{@item_id_prefix.parameterize.underscore}_#{value}"
44
- else
45
- "#{@name.parameterize.underscore}_#{value}"
46
- end
47
-
48
- div(class: wrapper_class) do
49
- RadioGroupItem(
50
- name: @name,
51
- value: value,
52
- checked: @value == value,
53
- id: id,
54
- disabled: item_disabled?(disabled_items, value),
55
- **@radio_attributes,
56
- )
57
- Label(for: id, **@label_attributes) { text }
58
- end
59
- end
60
-
61
- nil
62
- end
63
-
64
- def view_template(&)
65
- div(**@attributes) do
66
- if @include_hidden
67
- input(type: "hidden", name: @name, autocomplete: "off")
68
- end
69
-
70
- yield
71
- end
72
- end
73
-
74
- def default_attributes
75
- {
76
- role: "radiogroup",
77
- dir: @dir,
78
- aria: {
79
- required: false,
80
- },
81
- data: {
82
- controller: "radio-group",
83
- "radio-group-selected-value": @value,
84
- },
85
- }
86
- end
87
- end
88
- end
@@ -1,66 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class RadioGroupItem < Base
5
- STYLES = <<~HEREDOC
6
- aspect-square h-4 w-4 rounded-full border border-primary text-primary shadow
7
- focus:outline-none focus-visible:ring-1 focus-visible:ring-ring
8
- disabled:cursor-not-allowed disabled:opacity-50 relative cursor-pointer
9
- group/radio
10
- HEREDOC
11
-
12
- def initialize(name: nil, value: nil, checked: false, id: nil, **attributes)
13
- @value = value
14
- @name = name
15
- @checked = checked
16
- @id = id || name
17
- super(**attributes)
18
- end
19
-
20
- def view_template(&)
21
- button(**@attributes) do
22
- span(
23
- class: "items-center justify-center hidden group-data-[checked=true]/radio:flex",
24
- ) do
25
- icon("circle", class: "size-2.5 fill-primary")
26
- end
27
-
28
- input(
29
- type: "radio",
30
- value: @value,
31
- class: "-translate-x-full pointer-events-none absolute top-0 left-0 size-4 opacity-0",
32
- name: @name,
33
- tabindex: -1,
34
- checked: @checked,
35
- aria: { hidden: true },
36
- data: { input: "" },
37
- )
38
- end
39
- end
40
-
41
- def default_attributes
42
- {
43
- id: @id,
44
- type: "button",
45
- tabindex: -1,
46
- role: "radio",
47
- aria: {
48
- checked: @checked.to_s,
49
- },
50
- data: {
51
- checked: @checked.to_s,
52
- value: @value,
53
- "radio-group-target": "item",
54
- action: <<~HEREDOC,
55
- click->radio-group#setChecked
56
- keydown.right->radio-group#setCheckedToNext:prevent
57
- keydown.down->radio-group#setCheckedToNext:prevent
58
- keydown.up->radio-group#setCheckedToPrev:prevent
59
- keydown.left->radio-group#setCheckedToPrev:prevent
60
- keydown.enter->radio-group#preventDefault
61
- HEREDOC
62
- },
63
- }
64
- end
65
- end
66
- end
@@ -1,194 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class Select < Base
5
- STYLES = "w-full"
6
-
7
- NATIVE_STYLES = <<~HEREDOC
8
- flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-2 pr-8
9
- text-base shadow-sm transition-colors placeholder:text-muted-foreground
10
- focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring
11
- disabled:cursor-not-allowed disabled:opacity-50 md:text-sm appearance-none
12
- relative
13
- HEREDOC
14
-
15
- NATIVE_OPTION_STYLES = "bg-popover text-popover-foreground"
16
-
17
- def initialize(id: nil,
18
- name: nil,
19
- value: nil,
20
- placeholder: nil,
21
- side: :bottom,
22
- native: false,
23
- dir: "ltr",
24
- include_blank: false,
25
- disabled: false,
26
- aria_id: "select-#{SecureRandom.hex(5)}",
27
- **attributes)
28
- @id = id || name
29
- @name = name
30
- @value = value
31
- @placeholder = placeholder
32
- @side = side
33
- @native = native
34
- @dir = dir
35
- @include_blank = include_blank
36
- @disabled = disabled
37
- @aria_id = aria_id
38
- super(**attributes)
39
- end
40
-
41
- def trigger(**attributes)
42
- SelectTrigger(
43
- id: @id,
44
- aria_id: @aria_id,
45
- dir: @dir,
46
- value: @value,
47
- placeholder: @placeholder,
48
- disabled: @disabled,
49
- **attributes,
50
- )
51
- end
52
-
53
- def content(**attributes, &)
54
- SelectContent(
55
- side: @side, aria_id: @aria_id, dir: @dir, include_blank: @include_blank, native: @native, **attributes, &
56
- )
57
- end
58
-
59
- def item(**attributes, &)
60
- SelectItem(aria_id: @aria_id, **attributes, &)
61
- end
62
-
63
- def label(**attributes, &)
64
- SelectLabel(aria_id: @aria_id, **attributes, &)
65
- end
66
-
67
- def group(**attributes, &)
68
- SelectGroup(aria_id: @aria_id, **attributes, &)
69
- end
70
-
71
- def items(collection, value_method:, text_method:, disabled_items: nil, &)
72
- vanish(&)
73
-
74
- if collection.first&.is_a?(Hash)
75
- collection = convert_collection_hash_to_struct(collection, value_method: value_method, text_method: text_method)
76
- end
77
-
78
- SelectTrigger(
79
- id: @id,
80
- aria_id: @aria_id,
81
- dir: @dir,
82
- value: @value,
83
- placeholder: @placeholder,
84
- disabled: @disabled,
85
- )
86
-
87
- SelectContent(aria_id: @aria_id, dir: @dir, include_blank: @include_blank, native: @native) do
88
- collection.each do |item|
89
- value = item.public_send(value_method)
90
- text = item.public_send(text_method)
91
-
92
- SelectItem(value: value, aria_id: @aria_id, disabled: item_disabled?(disabled_items, value)) { text }
93
- end
94
- end
95
- end
96
-
97
- def view_template(&)
98
- content = capture(&)
99
- element = Nokogiri::HTML.fragment(content.to_s)
100
- content_element = element.css('[data-select-target="content"]')
101
-
102
- if @native
103
- div(class: "relative") do
104
- select(**@attributes) do
105
- if @placeholder || @include_blank
106
- option(value: "", class: NATIVE_OPTION_STYLES) { @placeholder }
107
- end
108
-
109
- build_native_options(content_element)
110
- end
111
-
112
- icon("chevron-down", class: "size-4 absolute opacity-50 top-1/2 -translate-y-1/2 right-3 pointer-events-none")
113
- end
114
- else
115
- div(**@attributes) do
116
- yield
117
-
118
- select(
119
- name: @name,
120
- disabled: @disabled,
121
- class: "sr-only",
122
- tabindex: -1,
123
- data: {
124
- "select-target": "select",
125
- },
126
- ) do
127
- option(value: "")
128
- build_native_options(content_element)
129
- end
130
- end
131
- end
132
- end
133
-
134
- def default_styles
135
- if @native
136
- NATIVE_STYLES
137
- else
138
- STYLES
139
- end
140
- end
141
-
142
- def default_attributes
143
- if @native
144
- {
145
- id: @id,
146
- name: @name,
147
- disabled: @disabled,
148
- }
149
- else
150
- {
151
- data: {
152
- side: @side,
153
- aria_id: @aria_id,
154
- controller: "select",
155
- "select-selected-value": @value,
156
- },
157
- }
158
- end
159
- end
160
-
161
- def build_native_options(content_element)
162
- content_element.children.each do |content_child|
163
- next if content_child.is_a?(Nokogiri::XML::Text) || content_child.is_a?(Nokogiri::XML::Comment)
164
-
165
- if content_child.attributes["data-select-target"]&.value == "group"
166
- group_label = content_child.at_css('[data-select-target="label"]')&.text
167
-
168
- optgroup(label: group_label, class: NATIVE_OPTION_STYLES) do
169
- content_child.css('[data-select-target="item"]').each do |i|
170
- option(
171
- value: i.attributes["data-value"].value,
172
- class: NATIVE_OPTION_STYLES,
173
- selected: i.attributes["data-value"].value == @value,
174
- disabled: i.attributes["data-disabled"]&.value == "",
175
- ) do
176
- i.text
177
- end
178
- end
179
- end
180
- elsif content_child.attributes["data-select-target"]&.value == "item"
181
-
182
- option(
183
- value: content_child.attributes["data-value"].value,
184
- class: NATIVE_OPTION_STYLES,
185
- selected: content_child.attributes["data-value"].value == @value,
186
- disabled: content_child.attributes["data-disabled"]&.value == "",
187
- ) do
188
- content_child.text
189
- end
190
- end
191
- end
192
- end
193
- end
194
- end
@@ -1,64 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SelectContent < Base
5
- STYLES = <<~HEREDOC
6
- relative z-50 min-w-[8rem] max-h-108 overflow-y-auto overflow-x-hidden rounded-md border
7
- bg-popover text-popover-foreground p-1 shadow-md outline-none pointer-events-auto
8
- data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0
9
- data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95
10
- data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2
11
- data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2
12
- data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1
13
- data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1
14
- HEREDOC
15
-
16
- def initialize(side: :bottom, include_blank: false, native: false, dir: "ltr", aria_id: nil, **attributes)
17
- @side = side
18
- @include_blank = include_blank
19
- @native = native
20
- @dir = dir
21
- @aria_id = aria_id
22
- super(**attributes)
23
- end
24
-
25
- def view_template(&)
26
- div(
27
- class: "hidden fixed top-0 left-0 w-max z-50",
28
- data: { "select-target": "contentWrapper" },
29
- ) do
30
- div(**@attributes) do
31
- if @include_blank && !@native
32
- SelectItem(aria_id: @aria_id, value: "", class: "h-8", hide_icon: true) do
33
- @include_blank.is_a?(String) ? @include_blank : ""
34
- end
35
- end
36
-
37
- yield
38
- end
39
- end
40
- end
41
-
42
- def default_attributes
43
- {
44
- id: "#{@aria_id}-content",
45
- dir: @dir,
46
- tabindex: -1,
47
- role: "listbox",
48
- aria: {
49
- labelledby: "#{@aria_id}-trigger",
50
- orientation: "vertical",
51
- },
52
- data: {
53
- state: "closed",
54
- side: @side,
55
- "select-target": "content",
56
- action: <<~HEREDOC,
57
- keydown.up->select#focusLastItem:prevent
58
- keydown.down->select#focusFirstItem:prevent
59
- HEREDOC
60
- },
61
- }
62
- end
63
- end
64
- end