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,64 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SelectContent < Base
5
- STYLES = <<~HEREDOC
6
- relative z-50 min-w-[8rem] max-h-108 overflow-y-auto overflow-x-hidden rounded-md border
7
- bg-popover text-popover-foreground p-1 shadow-md outline-none
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-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2
11
- data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2
12
- data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1#{" "}
13
- data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1
14
- HEREDOC
15
-
16
- def initialize(side: :bottom, include_blank: false, native: false, dir: "ltr", aria_id: nil, **attributes)
17
- @side = side
18
- @include_blank = include_blank
19
- @native = native
20
- @dir = dir
21
- @aria_id = aria_id
22
- super(**attributes)
23
- end
24
-
25
- def view_template(&)
26
- div(
27
- class: "hidden fixed top-0 left-0 w-max z-50",
28
- data: { "shadcn-phlexcomponents--select-target": "contentWrapper" },
29
- ) do
30
- div(**@attributes) do
31
- if @include_blank && !@native
32
- SelectItem(aria_id: @aria_id, value: "", class: "h-8", hide_icon: true) do
33
- @include_blank.is_a?(String) ? @include_blank : ""
34
- end
35
- end
36
-
37
- yield
38
- end
39
- end
40
- end
41
-
42
- def default_attributes
43
- {
44
- id: "#{@aria_id}-content",
45
- dir: @dir,
46
- tabindex: -1,
47
- role: "listbox",
48
- aria: {
49
- labelledby: "#{@aria_id}-trigger",
50
- orientation: "vertical",
51
- },
52
- data: {
53
- state: "closed",
54
- side: @side,
55
- "shadcn-phlexcomponents--select-target": "content",
56
- action: <<~HEREDOC,
57
- keydown.up->shadcn-phlexcomponents--select#focusLastItem:prevent
58
- keydown.down->shadcn-phlexcomponents--select#focusFirstItem:prevent
59
- HEREDOC
60
- },
61
- }
62
- end
63
- end
64
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SelectGroup < Base
5
- def initialize(aria_id:, **attributes)
6
- @aria_id = aria_id
7
- super(**attributes)
8
- end
9
-
10
- def view_template(&)
11
- div(**@attributes, &)
12
- end
13
-
14
- def default_attributes
15
- {
16
- role: "group",
17
- data: {
18
- "shadcn-phlexcomponents--select-target": "group",
19
- },
20
- }
21
- end
22
- end
23
- end
@@ -1,59 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SelectItem < Base
5
- STYLES = <<~HEREDOC
6
- group/item relative flex w-full cursor-default select-none items-center
7
- rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-accent
8
- focus:text-accent-foreground data-[disabled]:pointer-events-none#{" "}
9
- data-[disabled]:opacity-50
10
- HEREDOC
11
-
12
- def initialize(value: nil, disabled: false, hide_icon: false, aria_id: nil, **attributes)
13
- @value = value
14
- @disabled = disabled
15
- @aria_id = aria_id
16
- @hide_icon = hide_icon
17
- @aria_labelledby = "#{@aria_id}-#{@value.dasherize.parameterize}"
18
- super(**attributes)
19
- end
20
-
21
- def view_template(&)
22
- div(**@attributes) do
23
- span(id: @aria_labelledby, &)
24
-
25
- unless @hide_icon
26
- span(class: "absolute right-2 h-3.5 w-3.5 items-center hidden justify-center
27
- group-aria-[selected=true]/item:flex") do
28
- icon("check", class: "size-4")
29
- end
30
- end
31
- end
32
- end
33
-
34
- def default_attributes
35
- {
36
- role: "option",
37
- tabindex: -1,
38
- aria: {
39
- selected: false,
40
- labelledby: @aria_labelledby,
41
- },
42
- data: {
43
- disabled: @disabled,
44
- value: @value,
45
- action: <<~HEREDOC,
46
- click->shadcn-phlexcomponents--select#selectItem
47
- keydown.up->shadcn-phlexcomponents--select#focusPrevItem:prevent:stop
48
- keydown.down->shadcn-phlexcomponents--select#focusNextItem:prevent:stop
49
- keydown.enter->shadcn-phlexcomponents--select#selectItem:prevent
50
- keydown.space->shadcn-phlexcomponents--select#selectItem:prevent
51
- mouseover->shadcn-phlexcomponents--select#focusItem
52
- mouseout->shadcn-phlexcomponents--select#focusContent
53
- HEREDOC
54
- "shadcn-phlexcomponents--select-target": "item",
55
- },
56
- }
57
- end
58
- end
59
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SelectLabel < Base
5
- STYLES = "px-2 py-1.5 text-sm font-semibold"
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(**@attributes, &)
14
- end
15
-
16
- def default_attributes
17
- {
18
- data: {
19
- "shadcn-phlexcomponents--select-target": "label",
20
- },
21
- }
22
- end
23
- end
24
- end
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SelectTrigger < Base
5
- STYLES = <<~HEREDOC
6
- flex h-9 items-center justify-between whitespace-nowrap rounded-md border
7
- border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background#{" "}
8
- data-[placeholder]:text-muted-foreground focus:outline-none focus:ring-1
9
- focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1
10
- w-full cursor-pointer
11
- HEREDOC
12
-
13
- def initialize(id: nil, value: nil, placeholder: nil, dir: "ltr", aria_id: nil, **attributes)
14
- @id = id
15
- @value = value
16
- @placeholder = placeholder
17
- @dir = dir
18
- @aria_id = aria_id
19
- super(**attributes)
20
- end
21
-
22
- def view_template
23
- button(**@attributes) do
24
- span(class: "pointer-events-none", data: { "shadcn-phlexcomponents--select-target": "triggerText" }) do
25
- @value || @placeholder
26
- end
27
-
28
- icon("chevron-down", class: "size-4 opacity-50")
29
- end
30
- end
31
-
32
- def default_attributes
33
- {
34
- type: "button",
35
- id: @id,
36
- dir: @dir,
37
- role: "combobox",
38
- aria: {
39
- autocomplete: "none",
40
- expanded: false,
41
- controls: "#{@aria_id}-content",
42
- },
43
- data: {
44
- placeholder: @placeholder.present?,
45
- placeholder_text: @placeholder,
46
- action: <<~HEREDOC,
47
- click->shadcn-phlexcomponents--select#toggle
48
- keydown.down->shadcn-phlexcomponents--select#toggle:prevent
49
- keydown.up->shadcn-phlexcomponents--select#toggle:prevent
50
- HEREDOC
51
- "shadcn-phlexcomponents--select-target": "trigger",
52
- },
53
- }
54
- end
55
- end
56
- end
@@ -1,53 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class Sheet < Base
5
- STYLES = "inline-block"
6
-
7
- def initialize(side: :right, aria_id: "sheet-#{SecureRandom.hex(5)}", **attributes)
8
- @side = side
9
- @aria_id = aria_id
10
- super(**attributes)
11
- end
12
-
13
- def trigger(**attributes, &)
14
- SheetTrigger(aria_id: @aria_id, **attributes, &)
15
- end
16
-
17
- def content(**attributes, &)
18
- SheetContent(side: @side, aria_id: @aria_id, **attributes, &)
19
- end
20
-
21
- def header(**attributes, &)
22
- SheetHeader(**attributes, &)
23
- end
24
-
25
- def title(**attributes, &)
26
- SheetTitle(aria_id: @aria_id, **attributes, &)
27
- end
28
-
29
- def description(**attributes, &)
30
- SheetDescription(aria_id: @aria_id, **attributes, &)
31
- end
32
-
33
- def footer(**attributes, &)
34
- SheetFooter(**attributes, &)
35
- end
36
-
37
- def close(**attributes, &)
38
- SheetClose(**attributes, &)
39
- end
40
-
41
- def view_template(&)
42
- div(**@attributes, &)
43
- end
44
-
45
- def default_attributes
46
- {
47
- data: {
48
- controller: "shadcn-phlexcomponents--sheet",
49
- },
50
- }
51
- end
52
- end
53
- end
@@ -1,42 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SheetClose < Base
5
- def initialize(as_child: false, **attributes)
6
- @as_child = as_child
7
- super(**attributes)
8
- end
9
-
10
- def view_template(&)
11
- if @as_child
12
- content = capture(&)
13
- element = find_as_child(content.to_s)
14
-
15
- vanish(&)
16
- element_attributes = nokogiri_attributes_to_hash(element)
17
- styles = TAILWIND_MERGER.merge("#{@attributes[:class]} #{element_attributes[:class]}")
18
- merged_attributes = mix(@attributes, element_attributes)
19
- merged_attributes[:class] = styles
20
-
21
- if element.name == "button"
22
- merged_attributes.delete(:role)
23
- end
24
-
25
- send(element.name, **merged_attributes) do
26
- sanitize_as_child(element.children.to_s)
27
- end
28
- else
29
- div(**@attributes, &)
30
- end
31
- end
32
-
33
- def default_attributes
34
- {
35
- role: "button",
36
- data: {
37
- action: "click->shadcn-phlexcomponents--sheet#close",
38
- },
39
- }
40
- end
41
- end
42
- end
@@ -1,65 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SheetContent < Base
5
- STYLES = <<~HEREDOC
6
- fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out
7
- data-[state=closed]:duration-300 data-[state=open]:duration-500
8
- data-[state=open]:animate-in data-[state=closed]:animate-out
9
- HEREDOC
10
-
11
- CLOSE_BUTTON_STYLES = <<~HEREDOC
12
- absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background
13
- transition-opacity hover:opacity-100 focus:outline-none focus:ring-2
14
- focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none
15
- cursor-pointer
16
- HEREDOC
17
-
18
- SIDES = {
19
- left: "inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left
20
- data-[state=open]:slide-in-from-left sm:max-w-sm",
21
- right: "inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right
22
- data-[state=open]:slide-in-from-right sm:max-w-sm",
23
- top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
24
- bottom: "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom
25
- data-[state=open]:slide-in-from-bottom",
26
- }
27
-
28
- def initialize(side: :right, aria_id: nil, **attributes)
29
- @side = side
30
- @aria_id = aria_id
31
- super(**attributes)
32
- end
33
-
34
- def view_template(&)
35
- @class = @attributes.delete(:class)
36
- div(class: "#{@class} hidden", **@attributes) do
37
- yield
38
-
39
- button(class: CLOSE_BUTTON_STYLES, data: { action: "click->shadcn-phlexcomponents--sheet#close" }) do
40
- icon("x", class: "size-4")
41
- span(class: "sr-only") { "close" }
42
- end
43
- end
44
- end
45
-
46
- def default_attributes
47
- {
48
- id: "#{@aria_id}-content",
49
- tabindex: -1,
50
- role: "dialog",
51
- aria: {
52
- describedby: "#{@aria_id}-description",
53
- labelledby: "#{@aria_id}-title",
54
- },
55
- data: {
56
- "shadcn-phlexcomponents--sheet-target": "content",
57
- },
58
- }
59
- end
60
-
61
- def default_styles
62
- "#{STYLES} #{SIDES[@side]}"
63
- end
64
- end
65
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SheetDescription < Base
5
- STYLES = "text-sm text-muted-foreground"
6
-
7
- def initialize(aria_id: nil, **attributes)
8
- @aria_id = aria_id
9
- super(**attributes)
10
- end
11
-
12
- def default_attributes
13
- {
14
- id: "#{@aria_id}-description",
15
- }
16
- end
17
-
18
- def view_template(&)
19
- p(**@attributes, &)
20
- end
21
- end
22
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SheetFooter < Base
5
- STYLES = "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2"
6
-
7
- def view_template(&)
8
- div(**@attributes, &)
9
- end
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SheetHeader < Base
5
- STYLES = "flex flex-col space-y-2 text-center sm:text-left"
6
-
7
- def view_template(&)
8
- div(**@attributes, &)
9
- end
10
- end
11
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SheetTitle < Base
5
- STYLES = "text-lg font-semibold text-foreground"
6
-
7
- def initialize(aria_id: nil, **attributes)
8
- @aria_id = aria_id
9
- super(**attributes)
10
- end
11
-
12
- def default_attributes
13
- {
14
- id: "#{@aria_id}-title",
15
- }
16
- end
17
-
18
- def view_template(&)
19
- h2(**@attributes, &)
20
- end
21
- end
22
- end
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SheetTrigger < Base
5
- def initialize(as_child: false, aria_id: nil, **attributes)
6
- @as_child = as_child
7
- @aria_id = aria_id
8
- super(**attributes)
9
- end
10
-
11
- def view_template(&)
12
- if @as_child
13
- content = capture(&)
14
- element = find_as_child(content.to_s)
15
-
16
- vanish(&)
17
- element_attributes = nokogiri_attributes_to_hash(element)
18
- styles = TAILWIND_MERGER.merge("#{@attributes[:class]} #{element_attributes[:class]}")
19
- merged_attributes = mix(@attributes, element_attributes)
20
- merged_attributes[:class] = styles
21
-
22
- if element.name == "button"
23
- merged_attributes.delete(:role)
24
- end
25
-
26
- send(element.name, **merged_attributes) do
27
- sanitize_as_child(element.children.to_s)
28
- end
29
- else
30
- div(**@attributes, &)
31
- end
32
- end
33
-
34
- def default_attributes
35
- {
36
- role: "button",
37
- aria: {
38
- haspopup: "dialog",
39
- expanded: false,
40
- controls: "#{@aria_id}-content",
41
- },
42
- data: {
43
- as_child: @as_child.to_s,
44
- action: "click->shadcn-phlexcomponents--sheet#open",
45
- "shadcn-phlexcomponents--sheet-target": "trigger",
46
- },
47
- }
48
- end
49
- end
50
- end
@@ -1,108 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class Sidebar < Base
5
- STYLES = <<~HEREDOC
6
- bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col
7
- group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border
8
- group-data-[variant=floating]:shadow
9
- HEREDOC
10
-
11
- PANEL_STYLES = {
12
- sidebar: "group-data-[side=left]:border-r group-data-[side=right]:border-l",
13
- floating: "p-2",
14
- inset: "p-2",
15
- }
16
-
17
- def initialize(id:, variant: :sidebar, side: :left, width: "16rem", expanded: true, **attributes)
18
- @id = id
19
- @variant = variant
20
- @side = side
21
- @width = width
22
- @expanded = expanded
23
- super(**attributes)
24
- end
25
-
26
- def header(**attributes, &)
27
- SidebarHeader(**attributes, &)
28
- end
29
-
30
- def content(**attributes, &)
31
- SidebarContent(**attributes, &)
32
- end
33
-
34
- def group(**attributes, &)
35
- SidebarGroup(**attributes, &)
36
- end
37
-
38
- def group_content(**attributes, &)
39
- SidebarGroupContent(**attributes, &)
40
- end
41
-
42
- def group_label(**attributes, &)
43
- SidebarGroupLabel(**attributes, &)
44
- end
45
-
46
- def menu(**attributes, &)
47
- SidebarMenu(**attributes, &)
48
- end
49
-
50
- def menu_item(**attributes, &)
51
- SidebarMenuItem(**attributes, &)
52
- end
53
-
54
- def menu_button(**attributes, &)
55
- SidebarMenuButton(**attributes, &)
56
- end
57
-
58
- def menu_sub(**attributes, &)
59
- SidebarMenuSub(**attributes, &)
60
- end
61
-
62
- def menu_sub_item(**attributes, &)
63
- SidebarMenuSubItem(**attributes, &)
64
- end
65
-
66
- def menu_sub_button(**attributes, &)
67
- SidebarMenuSubButton(**attributes, &)
68
- end
69
-
70
- def footer(**attributes, &)
71
- SidebarFooter(**attributes, &)
72
- end
73
-
74
- def view_template(&)
75
- div(
76
- id: @id,
77
- class: "group peer hidden md:block",
78
- style: { "--sidebar-width": @width },
79
- data: {
80
- side: @side,
81
- variant: @variant,
82
- collapsible: @expanded ? "" : "offcanvas",
83
- sidebar_id: @sidebar_id,
84
- state: @expanded ? "expanded" : "collapsed",
85
- controller: "shadcn-phlexcomponents--sidebar",
86
- },
87
- ) do
88
- div(
89
- class: "relative h-svh w-[var(--sidebar-width)] bg-transparent transition-[width] duration-200
90
- ease-linear group-data-[collapsible=offcanvas]:w-0 group-data-[side=right]:rotate-180
91
- group-data-[collapsible=icon]:w-[--sidebar-width-icon]",
92
- data: { "shadcn-phlexcomponents--sidebar-target": "panelOffset" },
93
- )
94
-
95
- div(
96
- class: "fixed inset-y-0 z-10 hidden h-svh w-[var(--sidebar-width)] transition-[left,right,width] duration-200
97
- ease-linear md:flex left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]
98
- group-data-[collapsible=icon]:w-[--sidebar-width-icon] #{PANEL_STYLES[@variant]}",
99
- data: {
100
- "shadcn-phlexcomponents--sidebar-target": "panel",
101
- },
102
- ) do
103
- div(**@attributes, &)
104
- end
105
- end
106
- end
107
- end
108
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SidebarContainer < Base
5
- STYLES = "group/sidebar-wrapper text-sidebar-foreground has-[[data-variant=inset]]:bg-sidebar flex min-h-svh w-full"
6
-
7
- def view_template(&)
8
- div(**@attributes, &)
9
- end
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SidebarContent < Base
5
- STYLES = "flex min-h-0 flex-1 flex-col gap-2 overflow-auto"
6
-
7
- def view_template(&)
8
- div(**@attributes, &)
9
- end
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SidebarFooter < Base
5
- STYLES = "flex flex-col gap-2 p-2"
6
-
7
- def view_template(&)
8
- div(**@attributes, &)
9
- end
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SidebarGroup < Base
5
- STYLES = "relative flex w-full min-w-0 flex-col p-2"
6
-
7
- def view_template(&)
8
- div(**@attributes, &)
9
- end
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ShadcnPhlexcomponents
4
- class SidebarGroupContent < Base
5
- STYLES = "w-full text-sm"
6
-
7
- def view_template(&)
8
- div(**@attributes, &)
9
- end
10
- end
11
- end