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,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class AccordionContent < Base
5
- STYLES = "pb-4 pt-0"
6
-
7
- def initialize(aria_id: :nil, **attributes)
8
- @aria_id = aria_id
9
- super(**attributes)
10
- end
11
-
12
- def view_template(&)
13
- div(
14
- class: "overflow-hidden text-sm data-[state=closed]:animate-accordion-up
15
- data-[state=open]:animate-accordion-down hidden",
16
- id: "#{@aria_id}-content",
17
- role: "region",
18
- aria: {
19
- labelledby: "#{@aria_id}-trigger",
20
- },
21
- data: {
22
- state: "closed",
23
- "shadcn-phlexcomponents--accordion-target": "content",
24
- },
25
- ) do
26
- div(**@attributes, &)
27
- end
28
- end
29
- end
30
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class AccordionItem < Base
5
- STYLES = "border-b"
6
-
7
- def initialize(value:, **attributes)
8
- @value = value
9
- super(**attributes)
10
- end
11
-
12
- def default_attributes
13
- {
14
- data: {
15
- state: "closed",
16
- value: @value,
17
- "shadcn-phlexcomponents--accordion-target": "item",
18
- },
19
- }
20
- end
21
-
22
- def view_template(&)
23
- div(**@attributes, &)
24
- end
25
- end
26
- end
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class AccordionTrigger < Base
5
- STYLES = <<~HEREDOC
6
- flex flex-1 items-center justify-between py-4 text-sm font-medium cursor-pointer
7
- transition-all hover:underline text-left [&[data-state=open]>svg]:rotate-180
8
- HEREDOC
9
-
10
- def initialize(aria_id: nil, **attributes)
11
- @aria_id = aria_id
12
- super(**attributes)
13
- end
14
-
15
- def default_attributes
16
- {
17
- type: "button",
18
- id: "#{@aria_id}-trigger",
19
- aria: {
20
- controls: "#{@aria_id}-content",
21
- expanded: "false",
22
- },
23
- data: {
24
- state: "closed",
25
- "shadcn-phlexcomponents--accordion-target": "trigger",
26
- action: <<~HEREDOC,
27
- click->shadcn-phlexcomponents--accordion#toggleItem
28
- keydown.up->shadcn-phlexcomponents--accordion#focusPrev:prevent
29
- keydown.down->shadcn-phlexcomponents--accordion#focusNext:prevent
30
- HEREDOC
31
- },
32
- }
33
- end
34
-
35
- def view_template(&)
36
- h3(class: "flex") do
37
- button(**@attributes) do
38
- yield
39
-
40
- icon("chevron-down", class: "size-4 shrink-0 text-muted-foreground transition-transform duration-200")
41
- end
42
- end
43
- end
44
- end
45
- end
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class Alert < Base
5
- STYLES = <<~HEREDOC
6
- relative w-full rounded-lg border px-4 py-3 text-sm [&>svg+div]:translate-y-[-3px]
7
- [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground [&>svg~*]:pl-7
8
- HEREDOC
9
-
10
- VARIANTS = {
11
- default: "bg-background text-foreground",
12
- destructive: "border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive",
13
- }.freeze
14
-
15
- def initialize(variant: :default, **attributes)
16
- @variant = variant
17
- super(**attributes)
18
- end
19
-
20
- def title(**attributes, &)
21
- AlertTitle(**attributes, &)
22
- end
23
-
24
- def description(**attributes, &)
25
- AlertDescription(**attributes, &)
26
- end
27
-
28
- def default_attributes
29
- { role: "alert" }
30
- end
31
-
32
- def default_styles
33
- "#{STYLES} #{VARIANTS[@variant]}"
34
- end
35
-
36
- def view_template(&)
37
- div(**@attributes, &)
38
- end
39
- end
40
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class AlertDescription < Base
5
- STYLES = "text-sm [&_p]:leading-relaxed"
6
-
7
- def view_template(&)
8
- div(**@attributes, &)
9
- end
10
- end
11
- end
@@ -1,60 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class AlertDialog < Base
5
- STYLES = "inline-block"
6
-
7
- def initialize(aria_id: "alert-dialog-#{SecureRandom.hex(5)}", **attributes)
8
- @aria_id = aria_id
9
- super(**attributes)
10
- end
11
-
12
- def trigger(**attributes, &)
13
- AlertDialogTrigger(aria_id: @aria_id, **attributes, &)
14
- end
15
-
16
- def content(**attributes, &)
17
- AlertDialogContent(aria_id: @aria_id, **attributes, &)
18
- end
19
-
20
- def header(**attributes, &)
21
- AlertDialogHeader(**attributes, &)
22
- end
23
-
24
- def title(**attributes, &)
25
- AlertDialogTitle(aria_id: @aria_id, **attributes, &)
26
- end
27
-
28
- def description(**attributes, &)
29
- AlertDialogDescription(aria_id: @aria_id, **attributes, &)
30
- end
31
-
32
- def footer(**attributes, &)
33
- AlertDialogFooter(**attributes, &)
34
- end
35
-
36
- def cancel(**attributes, &)
37
- AlertDialogCancel(**attributes, &)
38
- end
39
-
40
- def action(**attributes, &)
41
- AlertDialogAction(**attributes, &)
42
- end
43
-
44
- def action_to(name = nil, options = nil, html_options = nil, &block)
45
- AlertDialogActionTo(name, options, html_options, &block)
46
- end
47
-
48
- def default_attributes
49
- {
50
- data: {
51
- controller: "shadcn-phlexcomponents--alert-dialog",
52
- },
53
- }
54
- end
55
-
56
- def view_template(&)
57
- div(**@attributes, &)
58
- end
59
- end
60
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class AlertDialogAction < Base
5
- def initialize(variant: :primary, **attributes)
6
- @variant = variant
7
- super(**attributes)
8
- end
9
-
10
- def default_attributes
11
- {
12
- data: {
13
- action: "click->shadcn-phlexcomponents--alert-dialog#close",
14
- },
15
- }
16
- end
17
-
18
- def view_template(&)
19
- Button(variant: @variant, **@attributes, &)
20
- end
21
- end
22
- end
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class AlertDialogActionTo < Base
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 default_attributes
12
- {
13
- data: {
14
- action: "click->shadcn-phlexcomponents--alert-dialog#close",
15
- },
16
- }
17
- end
18
-
19
- def default_styles
20
- Button.default_styles(variant: @variant, size: :default)
21
- end
22
-
23
- def view_template(&)
24
- if block_given?
25
- @html_options = @options
26
- @options = @name
27
- end
28
- @html_options ||= {}
29
- @variant = @html_options.delete(:variant) || :primary
30
- @html_options = mix(default_attributes, @html_options)
31
- @html_options[:class] = TAILWIND_MERGER.merge("#{default_styles} #{@html_options[:class]}")
32
-
33
- if block_given?
34
- button_to(@options, @html_options, &)
35
- else
36
- button_to(@name, @options, @html_options)
37
- end
38
- end
39
- end
40
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class AlertDialogCancel < Base
5
- def initialize(variant: :outline, **attributes)
6
- @variant = variant
7
- super(**attributes)
8
- end
9
-
10
- def default_attributes
11
- {
12
- data: {
13
- action: "click->shadcn-phlexcomponents--alert-dialog#close",
14
- },
15
- }
16
- end
17
-
18
- def view_template(&)
19
- Button(variant: @variant, **@attributes, &)
20
- end
21
- end
22
- end
@@ -1,40 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class AlertDialogContent < Base
5
- STYLES = <<~HEREDOC
6
- fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%]
7
- translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200
8
- data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0
9
- data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95
10
- data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%]
11
- data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg
12
- HEREDOC
13
-
14
- def initialize(aria_id: nil, **attributes)
15
- @aria_id = aria_id
16
- super(**attributes)
17
- end
18
-
19
- def default_attributes
20
- {
21
- id: "#{@aria_id}-content",
22
- tabindex: -1,
23
- role: "alertdialog",
24
- aria: {
25
- describedby: "#{@aria_id}-description",
26
- labelledby: "#{@aria_id}-title",
27
- },
28
- data: {
29
- state: "closed",
30
- "shadcn-phlexcomponents--alert-dialog-target": "content",
31
- },
32
- }
33
- end
34
-
35
- def view_template(&)
36
- @class = @attributes.delete(:class)
37
- div(class: "#{@class} hidden", **@attributes, &)
38
- end
39
- end
40
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class AlertDialogDescription < Base
5
- STYLES = "text-sm text-muted-foreground"
6
-
7
- def initialize(aria_id:, **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 AlertDialogFooter < 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 AlertDialogHeader < 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 AlertDialogTitle < Base
5
- STYLES = "text-lg font-semibold"
6
-
7
- def initialize(aria_id:, **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 AlertDialogTrigger < 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 default_attributes
12
- {
13
- role: "button",
14
- aria: {
15
- haspopup: "dialog",
16
- expanded: "false",
17
- controls: "#{@aria_id}-content",
18
- },
19
- data: {
20
- action: "click->shadcn-phlexcomponents--alert-dialog#open",
21
- "shadcn-phlexcomponents--alert-dialog-target": "trigger",
22
- as_child: @as_child.to_s,
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,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class AlertTitle < Base
5
- STYLES = "mb-1 font-medium 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 Avatar < Base
5
- STYLES = "relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full"
6
-
7
- def initialize(**attributes)
8
- super(**attributes)
9
- end
10
-
11
- def image(**attributes, &)
12
- AvatarImage(**attributes, &)
13
- end
14
-
15
- def fallback(**attributes, &)
16
- AvatarFallback(**attributes, &)
17
- end
18
-
19
- def default_attributes
20
- {
21
- data: {
22
- controller: "shadcn-phlexcomponents--avatar",
23
- },
24
- }
25
- end
26
-
27
- def view_template(&)
28
- span(**@attributes, &)
29
- end
30
- end
31
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class AvatarFallback < Base
5
- STYLES = "flex h-full w-full items-center justify-center rounded-full bg-muted"
6
-
7
- def default_attributes
8
- {
9
- data: {
10
- "shadcn-phlexcomponents--avatar-target": "fallback",
11
- },
12
- }
13
- end
14
-
15
- def view_template(&)
16
- @class = @attributes.delete(:class)
17
-
18
- span(class: "#{@class} hidden", **@attributes, &)
19
- end
20
- end
21
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class AvatarImage < Base
5
- STYLES = "aspect-square h-full w-full"
6
-
7
- def default_attributes
8
- {
9
- data: {
10
- "shadcn-phlexcomponents--avatar-target": "image",
11
- },
12
- }
13
- end
14
-
15
- def view_template(&)
16
- img(**@attributes, &)
17
- end
18
- end
19
- end
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class Badge < Base
5
- STYLES = <<~HEREDOC
6
- inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold
7
- transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2
8
- HEREDOC
9
-
10
- VARIANTS = {
11
- primary: "border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80",
12
- secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
13
- destructive: "border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80",
14
- outline: "text-foreground",
15
- }.freeze
16
-
17
- def initialize(variant: :primary, **attributes)
18
- @variant = variant
19
- super(**attributes)
20
- end
21
-
22
- def default_styles
23
- "#{STYLES} #{VARIANTS[@variant]}"
24
- end
25
-
26
- def view_template(&)
27
- div(**@attributes, &)
28
- end
29
- end
30
- end
@@ -1,51 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class Breadcrumb < Base
5
- STYLES = "flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground sm:gap-2.5"
6
-
7
- def item(**attributes, &)
8
- BreadcrumbItem(**attributes, &)
9
- end
10
-
11
- def link(name = nil, options = nil, html_options = nil, &block)
12
- BreadcrumbLink(name, options, html_options, &block)
13
- end
14
-
15
- def separator(**attributes, &)
16
- BreadcrumbSeparator(**attributes, &)
17
- end
18
-
19
- def page(**attributes, &)
20
- BreadcrumbPage(**attributes, &)
21
- end
22
-
23
- def ellipsis(**attributes)
24
- BreadcrumbEllipsis(**attributes)
25
- end
26
-
27
- def links(collection)
28
- collection.each_with_index do |link, index|
29
- if index == collection.size - 1
30
- item do
31
- page { link[:name] }
32
- end
33
- else
34
- item do
35
- link(link[:name], link[:path])
36
- end
37
- end
38
-
39
- if index < collection.size - 1
40
- separator
41
- end
42
- end
43
- end
44
-
45
- def view_template(&)
46
- nav(aria: { label: "breadcrumb" }) do
47
- ol(**@attributes, &)
48
- end
49
- end
50
- end
51
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class BreadcrumbEllipsis < Base
5
- STYLES = "flex h-9 w-9 items-center justify-center"
6
-
7
- def default_attributes
8
- {
9
- role: "presentation",
10
- aria: {
11
- hidden: "true",
12
- },
13
- }
14
- end
15
-
16
- def view_template
17
- span(**@attributes) do
18
- icon("ellipsis", class: "size-4")
19
- span(class: "sr-only") { "More" }
20
- end
21
- end
22
- end
23
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class BreadcrumbItem < Base
5
- STYLES = "inline-flex items-center gap-1.5"
6
-
7
- def view_template(&)
8
- li(**@attributes, &)
9
- end
10
- end
11
- end
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class BreadcrumbLink < Link
5
- STYLES = "transition-colors hover:text-foreground"
6
- end
7
- end