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