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,65 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SheetContent < Base
5
- STYLES = <<~HEREDOC
6
- fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out
7
- data-[state=closed]:duration-300 data-[state=open]:duration-500
8
- data-[state=open]:animate-in data-[state=closed]:animate-out pointer-events-auto
9
- HEREDOC
10
-
11
- CLOSE_BUTTON_STYLES = <<~HEREDOC
12
- absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background
13
- transition-opacity hover:opacity-100 focus:outline-none focus:ring-2
14
- focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none
15
- cursor-pointer
16
- HEREDOC
17
-
18
- SIDES = {
19
- left: "inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left
20
- data-[state=open]:slide-in-from-left sm:max-w-sm",
21
- right: "inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right
22
- data-[state=open]:slide-in-from-right sm:max-w-sm",
23
- top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
24
- bottom: "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom
25
- data-[state=open]:slide-in-from-bottom",
26
- }
27
-
28
- def initialize(side: :right, aria_id: nil, **attributes)
29
- @side = side
30
- @aria_id = aria_id
31
- super(**attributes)
32
- end
33
-
34
- def view_template(&)
35
- @class = @attributes.delete(:class)
36
- div(class: "#{@class} hidden", **@attributes) do
37
- yield
38
-
39
- button(class: CLOSE_BUTTON_STYLES, data: { action: "click->dialog#close" }) do
40
- icon("x", class: "size-4")
41
- span(class: "sr-only") { "close" }
42
- end
43
- end
44
- end
45
-
46
- def default_attributes
47
- {
48
- id: "#{@aria_id}-content",
49
- tabindex: -1,
50
- role: "dialog",
51
- aria: {
52
- describedby: "#{@aria_id}-description",
53
- labelledby: "#{@aria_id}-title",
54
- },
55
- data: {
56
- "dialog-target": "content",
57
- },
58
- }
59
- end
60
-
61
- def default_styles
62
- "#{STYLES} #{SIDES[@side]}"
63
- end
64
- end
65
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SheetDescription < Base
5
- STYLES = "text-sm text-muted-foreground"
6
-
7
- def initialize(aria_id: nil, **attributes)
8
- @aria_id = aria_id
9
- super(**attributes)
10
- end
11
-
12
- def default_attributes
13
- {
14
- id: "#{@aria_id}-description",
15
- }
16
- end
17
-
18
- def view_template(&)
19
- p(**@attributes, &)
20
- end
21
- end
22
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SheetFooter < Base
5
- STYLES = "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2"
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 SheetHeader < Base
5
- STYLES = "flex flex-col space-y-2 text-center sm:text-left"
6
-
7
- def view_template(&)
8
- div(**@attributes, &)
9
- end
10
- end
11
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SheetTitle < Base
5
- STYLES = "text-lg font-semibold text-foreground"
6
-
7
- def initialize(aria_id: nil, **attributes)
8
- @aria_id = aria_id
9
- super(**attributes)
10
- end
11
-
12
- def default_attributes
13
- {
14
- id: "#{@aria_id}-title",
15
- }
16
- end
17
-
18
- def view_template(&)
19
- h2(**@attributes, &)
20
- end
21
- end
22
- end
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SheetTrigger < 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->dialog#open",
45
- "dialog-target": "trigger",
46
- },
47
- }
48
- end
49
- end
50
- end
@@ -1,108 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class Sidebar < Base
5
- STYLES = <<~HEREDOC
6
- bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col
7
- group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border
8
- group-data-[variant=floating]:shadow
9
- HEREDOC
10
-
11
- PANEL_STYLES = {
12
- sidebar: "group-data-[side=left]:border-r group-data-[side=right]:border-l",
13
- floating: "p-2",
14
- inset: "p-2",
15
- }
16
-
17
- def initialize(id:, variant: :sidebar, side: :left, width: "16rem", expanded: true, **attributes)
18
- @id = id
19
- @variant = variant
20
- @side = side
21
- @width = width
22
- @expanded = expanded
23
- super(**attributes)
24
- end
25
-
26
- def header(**attributes, &)
27
- SidebarHeader(**attributes, &)
28
- end
29
-
30
- def content(**attributes, &)
31
- SidebarContent(**attributes, &)
32
- end
33
-
34
- def group(**attributes, &)
35
- SidebarGroup(**attributes, &)
36
- end
37
-
38
- def group_content(**attributes, &)
39
- SidebarGroupContent(**attributes, &)
40
- end
41
-
42
- def group_label(**attributes, &)
43
- SidebarGroupLabel(**attributes, &)
44
- end
45
-
46
- def menu(**attributes, &)
47
- SidebarMenu(**attributes, &)
48
- end
49
-
50
- def menu_item(**attributes, &)
51
- SidebarMenuItem(**attributes, &)
52
- end
53
-
54
- def menu_button(**attributes, &)
55
- SidebarMenuButton(**attributes, &)
56
- end
57
-
58
- def menu_sub(**attributes, &)
59
- SidebarMenuSub(**attributes, &)
60
- end
61
-
62
- def menu_sub_item(**attributes, &)
63
- SidebarMenuSubItem(**attributes, &)
64
- end
65
-
66
- def menu_sub_button(**attributes, &)
67
- SidebarMenuSubButton(**attributes, &)
68
- end
69
-
70
- def footer(**attributes, &)
71
- SidebarFooter(**attributes, &)
72
- end
73
-
74
- def view_template(&)
75
- div(
76
- id: @id,
77
- class: "group peer hidden md:block",
78
- style: { "--sidebar-width": @width },
79
- data: {
80
- side: @side,
81
- variant: @variant,
82
- collapsible: @expanded ? "" : "offcanvas",
83
- sidebar_id: @sidebar_id,
84
- state: @expanded ? "expanded" : "collapsed",
85
- controller: "sidebar",
86
- },
87
- ) do
88
- div(
89
- class: "relative h-svh w-[var(--sidebar-width)] bg-transparent transition-[width] duration-200
90
- ease-linear group-data-[collapsible=offcanvas]:w-0 group-data-[side=right]:rotate-180
91
- group-data-[collapsible=icon]:w-[--sidebar-width-icon]",
92
- data: { "sidebar-target": "panelOffset" },
93
- )
94
-
95
- div(
96
- class: "fixed inset-y-0 z-10 hidden h-svh w-[var(--sidebar-width)] transition-[left,right,width] duration-200
97
- ease-linear md:flex left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]
98
- group-data-[collapsible=icon]:w-[--sidebar-width-icon] #{PANEL_STYLES[@variant]}",
99
- data: {
100
- "sidebar-target": "panel",
101
- },
102
- ) do
103
- div(**@attributes, &)
104
- end
105
- end
106
- end
107
- end
108
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SidebarContainer < Base
5
- STYLES = "group/sidebar-wrapper text-sidebar-foreground has-[[data-variant=inset]]:bg-sidebar flex min-h-svh w-full"
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 SidebarContent < Base
5
- STYLES = "flex min-h-0 flex-1 flex-col gap-2 overflow-auto"
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 SidebarFooter < Base
5
- STYLES = "flex flex-col gap-2 p-2"
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 SidebarGroup < Base
5
- STYLES = "relative flex w-full min-w-0 flex-col p-2"
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 SidebarGroupContent < Base
5
- STYLES = "w-full text-sm"
6
-
7
- def view_template(&)
8
- div(**@attributes, &)
9
- end
10
- end
11
- end
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SidebarGroupLabel < Base
5
- STYLES = <<~HEREDOC
6
- text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center
7
- rounded-md px-2 text-xs font-medium outline-none transition-[margin,opa]
8
- duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0
9
- group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0
10
- HEREDOC
11
-
12
- def view_template(&)
13
- div(**@attributes, &)
14
- end
15
- end
16
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SidebarHeader < Base
5
- STYLES = "flex flex-col gap-2 p-2"
6
-
7
- def view_template(&)
8
- div(**@attributes, &)
9
- end
10
- end
11
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SidebarInset < Base
5
- STYLES = <<~HEREDOC
6
- relative flex min-h-svh flex-1 flex-col bg-background peer-data-[variant=inset]:min-h-[calc(100svh-theme(spacing.4))]
7
- md:peer-data-[variant=inset]:m-2 md:peer-data-[state=collapsed]:peer-data-[variant=inset]:ml-2
8
- md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow
9
- HEREDOC
10
-
11
- def view_template(&)
12
- main(**@attributes, &)
13
- end
14
- end
15
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SidebarMenu < Base
5
- STYLES = "flex w-full min-w-0 flex-col gap-1"
6
-
7
- def view_template(&)
8
- ul(**@attributes, &)
9
- end
10
- end
11
- end
@@ -1,61 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SidebarMenuButton < Base
5
- STYLES = <<~HEREDOC
6
- peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left
7
- text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground
8
- focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground
9
- disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8
10
- aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent
11
- data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent
12
- data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2!
13
- [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 cursor-pointer
14
- HEREDOC
15
-
16
- SIZES = {
17
- default: "h-8 text-sm",
18
- sm: "h-7 text-xs",
19
- lg: "h-12 text-sm group-data-[collapsible=icon]:p-0!",
20
- }
21
-
22
- def initialize(size: :default, type: :button, active: false, as_child: false, **attributes)
23
- @type = type
24
- @size = size
25
- @active = active
26
- @as_child = as_child
27
- super(**attributes)
28
- end
29
-
30
- def default_attributes
31
- {
32
- data: {
33
- active: @active.to_s,
34
- },
35
- }
36
- end
37
-
38
- def default_styles
39
- "#{STYLES} #{SIZES[@size]}"
40
- end
41
-
42
- def view_template(&)
43
- if @as_child
44
- content = capture(&)
45
- element = find_as_child(content.to_s)
46
-
47
- vanish(&)
48
- element_attributes = nokogiri_attributes_to_hash(element)
49
- styles = TAILWIND_MERGER.merge("#{@attributes[:class]} #{element_attributes[:class]}")
50
- merged_attributes = mix(@attributes, element_attributes)
51
- merged_attributes[:class] = styles
52
-
53
- send(element.name, **merged_attributes) do
54
- sanitize_as_child(element.children.to_s)
55
- end
56
- else
57
- button(**@attributes, &)
58
- end
59
- end
60
- end
61
- end
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SidebarMenuItem < Base
5
- def view_template(&)
6
- li(**@attributes, &)
7
- end
8
- end
9
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SidebarMenuSub < Base
5
- STYLES = <<~HEREDOC
6
- border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col
7
- gap-1 border-l px-2.5 py-0.5 group-data-[collapsible=icon]:hidden#{" "}
8
- HEREDOC
9
-
10
- def view_template(&)
11
- ul(**@attributes, &)
12
- end
13
- end
14
- end
@@ -1,48 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SidebarMenuSubButton < Base
5
- STYLES = <<~HEREDOC
6
- text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground
7
- active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground
8
- flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-none
9
- focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none
10
- aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0#{" "}
11
- data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground#{" "}
12
- text-sm group-data-[collapsible=icon]:hidden cursor-pointer
13
- HEREDOC
14
-
15
- def initialize(type: :button, active: false, as_child: false, **attributes)
16
- @active = active
17
- @as_child = as_child
18
- super(**attributes)
19
- end
20
-
21
- def default_attributes
22
- {
23
- data: {
24
- active: @active.to_s,
25
- },
26
- }
27
- end
28
-
29
- def view_template(&)
30
- if @as_child
31
- content = capture(&)
32
- element = find_as_child(content.to_s)
33
-
34
- vanish(&)
35
- element_attributes = nokogiri_attributes_to_hash(element)
36
- styles = TAILWIND_MERGER.merge("#{@attributes[:class]} #{element_attributes[:class]}")
37
- merged_attributes = mix(@attributes, element_attributes)
38
- merged_attributes[:class] = styles
39
-
40
- send(element.name, **merged_attributes) do
41
- sanitize_as_child(element.children.to_s)
42
- end
43
- else
44
- button(**@attributes, &)
45
- end
46
- end
47
- end
48
- end
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SidebarMenuSubItem < Base
5
- def view_template(&)
6
- li(**@attributes, &)
7
- end
8
- end
9
- end
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SidebarTrigger < Base
5
- STYLES = <<~HEREDOC
6
- inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md
7
- text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none
8
- focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none
9
- disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 hover:bg-accent
10
- hover:text-accent-foreground h-7 w-7 -ml-1 cursor-pointer
11
- HEREDOC
12
-
13
- def initialize(sidebar_id:, **attributes)
14
- @sidebar_id = sidebar_id
15
- super(**attributes)
16
- end
17
-
18
- def default_attributes
19
- {
20
- data: {
21
- sidebar_id: @sidebar_id,
22
- controller: "sidebar-trigger",
23
- action: "click->sidebar-trigger#toggle",
24
- },
25
- }
26
- end
27
-
28
- def view_template(&)
29
- button(**@attributes) do
30
- if block_given?
31
- yield
32
- else
33
- icon("panel-left", class: "")
34
- end
35
-
36
- span(class: "sr-only") { "Toggle Sidebar" }
37
- end
38
- end
39
- end
40
- end
@@ -1,66 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class Switch < Base
5
- STYLES = <<~HEREDOC
6
- peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full
7
- border-2 border-transparent transition-colors focus-visible:outline-none#{" "}
8
- focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2
9
- focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50
10
- data-[checked=true]:bg-primary data-[checked=false]:bg-input group/switch
11
- HEREDOC
12
-
13
- def initialize(name: nil, value: "1", unchecked_value: "0", checked: false, id: nil, include_hidden: true,
14
- **attributes)
15
- @name = name
16
- @value = value
17
- @unchecked_value = unchecked_value
18
- @checked = checked
19
- @id = id || name
20
- @include_hidden = include_hidden
21
- super(**attributes)
22
- end
23
-
24
- def view_template(&)
25
- button(**@attributes) do
26
- span(class: "pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg
27
- ring-0 transition-transform group-data-[checked=true]/switch:translate-x-5
28
- group-data-[checked=false]/switch:translate-x-0")
29
-
30
- if @include_hidden
31
- input(name: @name, type: "hidden", value: @unchecked_value, autocomplete: "off")
32
- end
33
-
34
- input(
35
- type: "checkbox",
36
- value: @value,
37
- class: "-translate-x-full pointer-events-none absolute top-0 left-0 size-4 opacity-0",
38
- name: @name,
39
- tabindex: -1,
40
- checked: @checked,
41
- aria: { hidden: true },
42
- data: {
43
- "switch-target": "input",
44
- },
45
- )
46
- end
47
- end
48
-
49
- def default_attributes
50
- {
51
- id: @id,
52
- type: "button",
53
- role: "switch",
54
- aria: {
55
- checked: @checked.to_s,
56
- },
57
- data: {
58
- checked: @checked.to_s,
59
- controller: "switch",
60
- action: "click->switch#toggle",
61
- "switch-checked-value": @checked,
62
- },
63
- }
64
- end
65
- end
66
- end