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,52 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class DropdownMenuContent < Base
5
- STYLES = <<~HEREDOC
6
- z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1
7
- text-popover-foreground shadow-md outline-none
8
- data-[state=open]:animate-in pointer-events-auto
9
- data-[state=closed]:animate-out data-[state=closed]:fade-out-0
10
- data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95
11
- data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2
12
- data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2
13
- data-[side=top]:slide-in-from-bottom-2
14
- HEREDOC
15
-
16
- def initialize(side: :bottom, aria_id: nil, **attributes)
17
- @side = side
18
- @aria_id = aria_id
19
- super(**attributes)
20
- end
21
-
22
- def view_template(&)
23
- div(
24
- class: "hidden fixed top-0 left-0 w-max z-50",
25
- data: { "dropdown-menu-target": "contentWrapper" },
26
- ) do
27
- div(**@attributes, &)
28
- end
29
- end
30
-
31
- def default_attributes
32
- {
33
- id: "#{@aria_id}-content",
34
- tabindex: -1,
35
- role: "menu",
36
- aria: {
37
- labelledby: "#{@aria_id}-trigger",
38
- orientation: "vertical",
39
- },
40
- data: {
41
- state: "closed",
42
- side: @side,
43
- "dropdown-menu-target": "content",
44
- action: <<~HEREDOC,
45
- keydown.up->dropdown-menu#focusLastItem:prevent
46
- keydown.down->dropdown-menu#focusFirstItem:prevent
47
- HEREDOC
48
- },
49
- }
50
- end
51
- end
52
- end
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class DropdownMenuItem < Base
5
- STYLES = <<~HEREDOC
6
- relative flex cursor-default select-none items-center gap-2 rounded-sm px-2
7
- py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground
8
- data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>svg]:size-4 [&>svg]:shrink-0
9
- HEREDOC
10
-
11
- def initialize(as_child: false, disabled: false, **attributes)
12
- @as_child = as_child
13
- @disabled = disabled
14
- super(**attributes)
15
- end
16
-
17
- def view_template(&)
18
- if @as_child
19
- content = capture(&)
20
- element = find_as_child(content.to_s)
21
-
22
- vanish(&)
23
- element_attributes = nokogiri_attributes_to_hash(element)
24
- styles = TAILWIND_MERGER.merge("#{@attributes[:class]} #{element_attributes[:class]}")
25
- merged_attributes = mix(@attributes, element_attributes)
26
- merged_attributes[:class] = styles
27
-
28
- send(element.name, **merged_attributes) do
29
- sanitize_as_child(element.children.to_s)
30
- end
31
- else
32
- div(**@attributes, &)
33
- end
34
- end
35
-
36
- def default_attributes
37
- {
38
- role: "menuitem",
39
- tabindex: -1,
40
- data: {
41
- disabled: @disabled,
42
- action: <<~HEREDOC,
43
- click->dropdown-menu#selectItem
44
- keydown.up->dropdown-menu#focusPrevItem:stop
45
- keydown.down->dropdown-menu#focusNextItem:stop
46
- keydown.enter->dropdown-menu#selectItem:prevent
47
- keydown.space->dropdown-menu#selectItem:prevent
48
- mouseover->dropdown-menu#focusItem
49
- mouseout->dropdown-menu#focusContent
50
- HEREDOC
51
- "dropdown-menu-target": "item",
52
- },
53
- }
54
- end
55
- end
56
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class DropdownMenuItemTo < DropdownMenuItem
5
- def initialize(name = nil, options = nil, html_options = nil)
6
- @name = name
7
- @options = options
8
- @html_options = html_options
9
- end
10
-
11
- def view_template(&)
12
- if block_given?
13
- @html_options = @options
14
- @options = @name
15
- end
16
- @html_options ||= {}
17
- @disabled = @html_options[:disabled]
18
- @html_options = mix(default_attributes, @html_options)
19
- @html_options[:class] = TAILWIND_MERGER.merge("w-full #{default_styles} #{@html_options[:class]}")
20
-
21
- if block_given?
22
- button_to(@options, @html_options, &)
23
- else
24
- button_to(@name, @options, @html_options)
25
- end
26
- end
27
- end
28
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class DropdownMenuLabel < Base
5
- STYLES = "px-2 py-1.5 text-sm font-semibold"
6
-
7
- def view_template(&)
8
- div(**@attributes, &)
9
- end
10
- end
11
- end
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class DropdownMenuSeparator < Base
5
- STYLES = "-mx-1 my-1 h-px bg-muted"
6
-
7
- def view_template(&)
8
- div(**@attributes, &)
9
- end
10
-
11
- def default_attributes
12
- {
13
- role: "separator",
14
- aria: {
15
- orientation: "horizontal",
16
- },
17
- }
18
- end
19
- end
20
- end
@@ -1,57 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class DropdownMenuTrigger < 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
- id: "#{@aria_id}-trigger",
37
- role: "button",
38
- aria: {
39
- haspopup: "menu",
40
- expanded: false,
41
- controls: "#{@aria_id}-content",
42
- },
43
- data: {
44
- state: "closed",
45
- as_child: @as_child.to_s,
46
- action: <<~HEREDOC,
47
- click->dropdown-menu#toggle
48
- keydown.space->dropdown-menu#toggle
49
- keydown.enter->dropdown-menu#toggle
50
- keydown.down->dropdown-menu#toggle:prevent
51
- HEREDOC
52
- "dropdown-menu-target": "trigger",
53
- },
54
- }
55
- end
56
- end
57
- end
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class HoverCard < Base
5
- STYLES = "inline-block"
6
-
7
- def initialize(side: :bottom, **attributes)
8
- @side = side
9
- super(**attributes)
10
- end
11
-
12
- def content(**attributes, &)
13
- HoverCardContent(**attributes, &)
14
- end
15
-
16
- def trigger(**attributes, &)
17
- HoverCardTrigger(side: @side, **attributes, &)
18
- end
19
-
20
- def default_attributes
21
- {
22
- data: {
23
- controller: "hover-card",
24
- side: @side,
25
- },
26
- }
27
- end
28
-
29
- def view_template(&)
30
- div(**@attributes, &)
31
- end
32
- end
33
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class HoverCardContent < Base
5
- STYLES = <<~HEREDOC
6
- rounded-md border w-64 bg-popover p-4 text-popover-foreground shadow-md outline-none#{" "}
7
- animate-in fade-in-0 zoom-in-95
8
- data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2
9
- data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2#{" "}
10
- HEREDOC
11
-
12
- def initialize(side: :bottom, **attributes)
13
- @side = side
14
- super(**attributes)
15
- end
16
-
17
- def view_template(&)
18
- div(class: "hidden", data: { "hover-card-target": "content" }) do
19
- div(**@attributes, &)
20
- end
21
- end
22
-
23
- def default_attributes
24
- {
25
- tabindex: -1,
26
- data: {
27
- side: @side,
28
- },
29
- }
30
- end
31
- end
32
- end
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class HoverCardTrigger < Base
5
- def initialize(as_child: false, **attributes)
6
- @as_child = as_child
7
- super(**attributes)
8
- end
9
-
10
- def view_template(&)
11
- if @as_child
12
- content = capture(&)
13
- element = find_as_child(content.to_s)
14
-
15
- vanish(&)
16
- element_attributes = nokogiri_attributes_to_hash(element)
17
- styles = TAILWIND_MERGER.merge("#{@attributes[:class]} #{element_attributes[:class]}")
18
- merged_attributes = mix(@attributes, element_attributes)
19
- merged_attributes[:class] = styles
20
-
21
- if element.name == "button"
22
- merged_attributes.delete(:role)
23
- end
24
-
25
- send(element.name, **merged_attributes) do
26
- sanitize_as_child(element.children.to_s)
27
- end
28
- else
29
- div(**@attributes, &)
30
- end
31
- end
32
-
33
- def default_attributes
34
- {
35
- id: @id,
36
- role: "button",
37
- data: {
38
- as_child: @as_child.to_s,
39
- "hover-card-target": "trigger",
40
- },
41
- }
42
- end
43
- end
44
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class Input < Base
5
- STYLES = <<~HEREDOC
6
- flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1
7
- text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:pt-1
8
- file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground
9
- focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring
10
- disabled:cursor-not-allowed disabled:opacity-50 md:text-sm
11
- HEREDOC
12
-
13
- def initialize(type: :text, name: nil, id: nil, **attributes)
14
- @type = type
15
- @name = name
16
- @id = id || @name
17
- super(**attributes)
18
- end
19
-
20
- def default_attributes
21
- {
22
- type: @type,
23
- name: @name,
24
- id: @id,
25
- }
26
- end
27
-
28
- def view_template(&)
29
- input(**@attributes, &)
30
- end
31
- end
32
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class Label < Base
5
- STYLES = <<~HEREDOC
6
- text-sm font-medium leading-none peer-disabled:cursor-not-allowed
7
- peer-disabled:opacity-70 block
8
- HEREDOC
9
-
10
- def view_template(&)
11
- label(**@attributes, &)
12
- end
13
- end
14
- end
@@ -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