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,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: "shadcn-phlexcomponents--sidebar-trigger",
23
- action: "click->shadcn-phlexcomponents--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
- "shadcn-phlexcomponents--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: "shadcn-phlexcomponents--switch",
60
- action: "click->shadcn-phlexcomponents--switch#toggle",
61
- "shadcn-phlexcomponents--switch-checked-value": @checked,
62
- },
63
- }
64
- end
65
- end
66
- end
@@ -1,75 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class Table < Base
5
- STYLES = "w-full caption-bottom text-sm"
6
-
7
- def initialize(**attributes)
8
- @columns = []
9
- super(**attributes)
10
- end
11
-
12
- def view_template(&)
13
- table(**@attributes, &)
14
- end
15
-
16
- def header(**attributes, &)
17
- TableHeader(**attributes, &)
18
- end
19
-
20
- def caption(**attributes, &)
21
- TableCaption(**attributes, &)
22
- end
23
-
24
- def row(**attributes, &)
25
- TableRow(**attributes, &)
26
- end
27
-
28
- def head(**attributes, &)
29
- TableHead(**attributes, &)
30
- end
31
-
32
- def body(**attributes, &)
33
- TableBody(**attributes, &)
34
- end
35
-
36
- def cell(**attributes, &)
37
- TableCell(**attributes, &)
38
- end
39
-
40
- def footer(**attributes, &)
41
- TableFooter(**attributes, &)
42
- end
43
-
44
- def rows(rows, &)
45
- @rows = rows
46
-
47
- vanish(&)
48
-
49
- thead(class: TableHeader::STYLES) do
50
- tr(class: TableRow::STYLES) do
51
- @columns.each do |column|
52
- th(class: TAILWIND_MERGER.merge("#{TableHead::STYLES} #{column[:head_class]}")) { column[:header] }
53
- end
54
- end
55
- end
56
-
57
- tbody(class: TableBody::STYLES) do
58
- @rows.each do |row|
59
- tr(class: TableRow::STYLES) do
60
- @columns.each do |column|
61
- td(class: TAILWIND_MERGER.merge("#{TableCell::STYLES} #{column[:cell_class]}")) do
62
- column[:content].call(row)
63
- end
64
- end
65
- end
66
- end
67
- end
68
- end
69
-
70
- def column(header, head_class: nil, cell_class: nil, &content)
71
- @columns << { header:, head_class:, cell_class:, content: }
72
- nil
73
- end
74
- end
75
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class TableBody < Base
5
- STYLES = "[&_tr:last-child]:border-0"
6
-
7
- def view_template(&)
8
- tbody(**@attributes, &)
9
- end
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class TableCaption < Base
5
- STYLES = "mt-4 text-sm text-muted-foreground"
6
-
7
- def view_template(&)
8
- caption(**@attributes, &)
9
- end
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class TableCell < Base
5
- STYLES = "p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]"
6
-
7
- def view_template(&)
8
- td(**@attributes, &)
9
- end
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class TableFooter < Base
5
- STYLES = "border-t bg-muted/50 font-medium [&>tr]:last:border-b-0"
6
-
7
- def view_template(&)
8
- tfoot(**@attributes, &)
9
- end
10
- end
11
- end
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class TableHead < Base
5
- STYLES = <<~HEREDOC
6
- h-10 px-2 text-left align-middle font-medium text-muted-foreground
7
- [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]#{" "}
8
- HEREDOC
9
-
10
- def view_template(&)
11
- th(**@attributes, &)
12
- end
13
- end
14
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class TableHeader < Base
5
- STYLES = "[&_tr]:border-b"
6
-
7
- def view_template(&)
8
- thead(**@attributes, &)
9
- end
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class TableRow < Base
5
- STYLES = "border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted"
6
-
7
- def view_template(&)
8
- tr(**@attributes, &)
9
- end
10
- end
11
- end
@@ -1,38 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class Tabs < Base
5
- def initialize(value: nil, dir: "ltr", aria_id: "tabs-#{SecureRandom.hex(5)}", **attributes)
6
- @dir = dir
7
- @value = value
8
- @aria_id = aria_id
9
- super(**attributes)
10
- end
11
-
12
- def view_template(&)
13
- div(**@attributes, &)
14
- end
15
-
16
- def default_attributes
17
- {
18
- dir: @dir,
19
- data: {
20
- controller: "shadcn-phlexcomponents--tabs",
21
- "shadcn-phlexcomponents--tabs-selected-value": @value,
22
- },
23
- }
24
- end
25
-
26
- def list(**attributes, &)
27
- TabsList(**attributes, &)
28
- end
29
-
30
- def trigger(**attributes, &)
31
- TabsTrigger(aria_id: @aria_id, **attributes, &)
32
- end
33
-
34
- def content(**attributes, &)
35
- TabsContent(aria_id: @aria_id, **attributes, &)
36
- end
37
- end
38
- end
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class TabsContent < Base
5
- STYLES = <<~HEREDOC
6
- mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2
7
- focus-visible:ring-ring focus-visible:ring-offset-2 hidden
8
- HEREDOC
9
-
10
- def initialize(value: nil, aria_id: nil, **attributes)
11
- @value = value
12
- @aria_id = aria_id
13
- super(**attributes)
14
- end
15
-
16
- def view_template(&)
17
- div(**@attributes, &)
18
- end
19
-
20
- def default_attributes
21
- {
22
- id: "#{@aria_id}-content-#{@value}",
23
- role: "tabpanel",
24
- tabindex: "0",
25
- aria: {
26
- labelledby: "#{@aria_id}-trigger-#{@value}",
27
- },
28
- data: {
29
- value: @value,
30
- "shadcn-phlexcomponents--tabs-target": "content",
31
- },
32
- }
33
- end
34
- end
35
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class TabsList < Base
5
- STYLES = <<~HEREDOC
6
- inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground outline-none
7
- HEREDOC
8
-
9
- def view_template(&)
10
- div(**@attributes, &)
11
- end
12
-
13
- def default_attributes
14
- {
15
- role: "tablist",
16
- tabindex: "-1",
17
- aria: {
18
- orientation: "horizontal",
19
- },
20
- }
21
- end
22
- end
23
- end
@@ -1,45 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class TabsTrigger < Base
5
- STYLES = <<~HEREDOC
6
- inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm
7
- font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2
8
- focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50
9
- data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow
10
- cursor-pointer
11
- HEREDOC
12
-
13
- def initialize(value: nil, aria_id: nil, **attributes)
14
- @value = value
15
- @aria_id = aria_id
16
- super(**attributes)
17
- end
18
-
19
- def view_template(&)
20
- button(**@attributes, &)
21
- end
22
-
23
- def default_attributes
24
- {
25
- id: "#{@aria_id}-trigger-#{@value}",
26
- role: "tab",
27
- tabindex: "-1",
28
- aria: {
29
- controls: "#{@aria_id}-content-#{@value}",
30
- selected: false,
31
- },
32
- data: {
33
- "shadcn-phlexcomponents--tabs-target": "trigger",
34
- value: @value,
35
- state: "inactive",
36
- action: <<~HEREDOC,
37
- click->shadcn-phlexcomponents--tabs#setActiveTab
38
- keydown.left->shadcn-phlexcomponents--tabs#setActiveToPrev:prevent
39
- keydown.right->shadcn-phlexcomponents--tabs#setActiveToNext:prevent
40
- HEREDOC
41
- },
42
- }
43
- end
44
- end
45
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class Textarea < Base
5
- STYLES = <<~HEREDOC
6
- flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3
7
- py-2 text-base shadow-sm placeholder:text-muted-foreground focus-visible:outline-none
8
- focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm
9
- HEREDOC
10
-
11
- def initialize(name: nil, id: nil, **attributes)
12
- @name = name
13
- @id = id || @name
14
- super(**attributes)
15
- end
16
-
17
- def default_attributes
18
- {
19
- name: @name,
20
- id: @id,
21
- }
22
- end
23
-
24
- def view_template(&)
25
- textarea(**@attributes, &)
26
- end
27
- end
28
- end