shadcn_phlexcomponents 0.1.5 → 0.1.9

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 (181) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +14 -0
  3. data/app/javascript/controllers/accordion_controller.js +7 -16
  4. data/app/javascript/controllers/alert_dialog_controller.js +5 -141
  5. data/app/javascript/controllers/combobox_controller.js +20 -0
  6. data/app/javascript/controllers/date_picker_controller.js +199 -64
  7. data/app/javascript/controllers/date_range_picker_controller.js +289 -176
  8. data/app/javascript/controllers/dialog_controller.js +19 -64
  9. data/app/javascript/controllers/dropdown_menu_controller.js +15 -37
  10. data/app/javascript/controllers/form_field_controller.js +24 -0
  11. data/app/javascript/controllers/hover_card_controller.js +1 -22
  12. data/app/javascript/controllers/popover_controller.js +20 -31
  13. data/app/javascript/controllers/select_controller.js +32 -52
  14. data/app/javascript/controllers/sidebar_trigger_controller.js +1 -1
  15. data/app/javascript/controllers/toast_controller.js +2 -2
  16. data/app/javascript/controllers/tooltip_controller.js +1 -2
  17. data/app/javascript/shadcn_phlexcomponents.js +53 -0
  18. data/app/javascript/utils.js +184 -0
  19. data/app/stylesheets/date_picker.css +212 -0
  20. data/lib/install/install_shadcn_phlexcomponents.rb +7 -7
  21. data/lib/{components → shadcn_phlexcomponents/components/accordion}/accordion.rb +1 -1
  22. data/lib/{components → shadcn_phlexcomponents/components/accordion}/accordion_content.rb +1 -1
  23. data/lib/{components → shadcn_phlexcomponents/components/accordion}/accordion_item.rb +1 -1
  24. data/lib/{components → shadcn_phlexcomponents/components/accordion}/accordion_trigger.rb +5 -4
  25. data/lib/{components → shadcn_phlexcomponents/components/alert_dialog}/alert_dialog.rb +1 -1
  26. data/lib/{components → shadcn_phlexcomponents/components/alert_dialog}/alert_dialog_action.rb +1 -1
  27. data/lib/{components → shadcn_phlexcomponents/components/alert_dialog}/alert_dialog_action_to.rb +1 -1
  28. data/lib/{components → shadcn_phlexcomponents/components/alert_dialog}/alert_dialog_cancel.rb +1 -1
  29. data/lib/{components → shadcn_phlexcomponents/components/alert_dialog}/alert_dialog_content.rb +2 -2
  30. data/lib/{components → shadcn_phlexcomponents/components/alert_dialog}/alert_dialog_trigger.rb +2 -2
  31. data/lib/{components → shadcn_phlexcomponents/components/avatar}/avatar.rb +1 -1
  32. data/lib/{components → shadcn_phlexcomponents/components/avatar}/avatar_fallback.rb +1 -1
  33. data/lib/{components → shadcn_phlexcomponents/components/avatar}/avatar_image.rb +1 -1
  34. data/lib/{components → shadcn_phlexcomponents/components/badge}/badge.rb +1 -1
  35. data/lib/{components → shadcn_phlexcomponents/components}/base.rb +10 -0
  36. data/lib/{components → shadcn_phlexcomponents/components/breadcrumb}/breadcrumb.rb +2 -0
  37. data/lib/{components → shadcn_phlexcomponents/components/button}/button.rb +5 -5
  38. data/lib/{components → shadcn_phlexcomponents/components/checkbox}/checkbox.rb +5 -5
  39. data/lib/{components → shadcn_phlexcomponents/components/checkbox_group}/checkbox_group.rb +27 -15
  40. data/lib/{components → shadcn_phlexcomponents/components/collapsible}/collapsible.rb +1 -1
  41. data/lib/{components → shadcn_phlexcomponents/components/collapsible}/collapsible_content.rb +1 -1
  42. data/lib/{components → shadcn_phlexcomponents/components/collapsible}/collapsible_trigger.rb +2 -2
  43. data/lib/shadcn_phlexcomponents/components/date_picker/date_picker.rb +87 -0
  44. data/lib/shadcn_phlexcomponents/components/date_picker/date_picker_content.rb +45 -0
  45. data/lib/shadcn_phlexcomponents/components/date_picker/date_picker_trigger.rb +64 -0
  46. data/lib/shadcn_phlexcomponents/components/date_range_picker/date_range_picker.rb +105 -0
  47. data/lib/shadcn_phlexcomponents/components/date_range_picker/date_range_picker_content.rb +9 -0
  48. data/lib/shadcn_phlexcomponents/components/date_range_picker/date_range_picker_trigger.rb +9 -0
  49. data/lib/{components → shadcn_phlexcomponents/components/dialog}/dialog.rb +8 -8
  50. data/lib/{components → shadcn_phlexcomponents/components/dialog}/dialog_close.rb +1 -1
  51. data/lib/{components → shadcn_phlexcomponents/components/dialog}/dialog_content.rb +3 -3
  52. data/lib/{components → shadcn_phlexcomponents/components/dialog}/dialog_trigger.rb +2 -2
  53. data/lib/{components → shadcn_phlexcomponents/components/dropdown_menu}/dropdown_menu.rb +1 -1
  54. data/lib/{components → shadcn_phlexcomponents/components/dropdown_menu}/dropdown_menu_content.rb +9 -9
  55. data/lib/{components → shadcn_phlexcomponents/components/dropdown_menu}/dropdown_menu_item.rb +8 -8
  56. data/lib/{components → shadcn_phlexcomponents/components/dropdown_menu}/dropdown_menu_trigger.rb +5 -5
  57. data/lib/shadcn_phlexcomponents/components/form/form.rb +139 -0
  58. data/lib/shadcn_phlexcomponents/components/form/form_checkbox.rb +83 -0
  59. data/lib/shadcn_phlexcomponents/components/form/form_checkbox_group.rb +116 -0
  60. data/lib/shadcn_phlexcomponents/components/form/form_date_picker.rb +47 -0
  61. data/lib/shadcn_phlexcomponents/components/form/form_date_range_picker.rb +96 -0
  62. data/lib/{components → shadcn_phlexcomponents/components/form}/form_error.rb +6 -2
  63. data/lib/shadcn_phlexcomponents/components/form/form_helpers.rb +108 -0
  64. data/lib/{components → shadcn_phlexcomponents/components/form}/form_hint.rb +6 -2
  65. data/lib/shadcn_phlexcomponents/components/form/form_radio_group.rb +107 -0
  66. data/lib/shadcn_phlexcomponents/components/form/form_select.rb +65 -0
  67. data/lib/shadcn_phlexcomponents/components/form/form_switch.rb +66 -0
  68. data/lib/shadcn_phlexcomponents/components/form/form_textarea.rb +60 -0
  69. data/lib/{components → shadcn_phlexcomponents/components/hover_card}/hover_card.rb +1 -1
  70. data/lib/{components → shadcn_phlexcomponents/components/hover_card}/hover_card_content.rb +1 -1
  71. data/lib/{components → shadcn_phlexcomponents/components/hover_card}/hover_card_trigger.rb +1 -1
  72. data/lib/{components → shadcn_phlexcomponents/components/input}/input.rb +1 -1
  73. data/lib/{components → shadcn_phlexcomponents/components/loading_button}/loading_button.rb +1 -1
  74. data/lib/{components → shadcn_phlexcomponents/components/popover}/popover.rb +1 -1
  75. data/lib/{components → shadcn_phlexcomponents/components/popover}/popover_content.rb +6 -6
  76. data/lib/{components → shadcn_phlexcomponents/components/popover}/popover_trigger.rb +2 -3
  77. data/lib/{components → shadcn_phlexcomponents/components/progress}/progress.rb +3 -3
  78. data/lib/{components → shadcn_phlexcomponents/components/radio_group}/radio_group.rb +33 -7
  79. data/lib/{components → shadcn_phlexcomponents/components/radio_group}/radio_group_item.rb +7 -7
  80. data/lib/{components → shadcn_phlexcomponents/components/select}/select.rb +22 -12
  81. data/lib/{components → shadcn_phlexcomponents/components/select}/select_content.rb +6 -6
  82. data/lib/{components → shadcn_phlexcomponents/components/select}/select_group.rb +1 -1
  83. data/lib/{components → shadcn_phlexcomponents/components/select}/select_item.rb +8 -8
  84. data/lib/{components → shadcn_phlexcomponents/components/select}/select_label.rb +1 -1
  85. data/lib/{components → shadcn_phlexcomponents/components/select}/select_trigger.rb +10 -10
  86. data/lib/{components → shadcn_phlexcomponents/components/sheet}/sheet.rb +1 -1
  87. data/lib/{components → shadcn_phlexcomponents/components/sheet}/sheet_close.rb +1 -1
  88. data/lib/{components → shadcn_phlexcomponents/components/sheet}/sheet_content.rb +3 -3
  89. data/lib/{components → shadcn_phlexcomponents/components/sheet}/sheet_trigger.rb +2 -2
  90. data/lib/{components → shadcn_phlexcomponents/components/sidebar}/sidebar.rb +3 -3
  91. data/lib/{components → shadcn_phlexcomponents/components/sidebar}/sidebar_trigger.rb +2 -2
  92. data/lib/{components → shadcn_phlexcomponents/components/switch}/switch.rb +4 -4
  93. data/lib/{components → shadcn_phlexcomponents/components/tabs}/tabs.rb +2 -2
  94. data/lib/{components → shadcn_phlexcomponents/components/tabs}/tabs_content.rb +1 -1
  95. data/lib/{components → shadcn_phlexcomponents/components/tabs}/tabs_trigger.rb +4 -4
  96. data/lib/{components → shadcn_phlexcomponents/components/textarea}/textarea.rb +3 -2
  97. data/lib/{components → shadcn_phlexcomponents/components/theme_switcher}/theme_switcher.rb +2 -2
  98. data/lib/{components → shadcn_phlexcomponents/components/toast}/toast.rb +7 -7
  99. data/lib/{components → shadcn_phlexcomponents/components/toast}/toast_container.rb +1 -1
  100. data/lib/{components → shadcn_phlexcomponents/components/tooltip}/tooltip.rb +3 -3
  101. data/lib/{components → shadcn_phlexcomponents/components/tooltip}/tooltip_content.rb +1 -1
  102. data/lib/{components → shadcn_phlexcomponents/components/tooltip}/tooltip_trigger.rb +1 -1
  103. data/lib/shadcn_phlexcomponents/version.rb +1 -1
  104. metadata +157 -144
  105. data/app/assets/tailwind/vanilla-calendar-pro.css +0 -466
  106. data/app/javascript/controllers/sheet_controller.js +0 -159
  107. data/lib/components/combobox.rb +0 -57
  108. data/lib/components/combobox_item.rb +0 -9
  109. data/lib/components/date_picker.rb +0 -94
  110. data/lib/components/date_range_picker.rb +0 -113
  111. data/lib/components/form.rb +0 -59
  112. /data/app/{assets/tailwind → stylesheets}/choices.css +0 -0
  113. /data/app/{assets/tailwind → stylesheets}/tailwindcss-animate.css +0 -0
  114. /data/lib/{components → shadcn_phlexcomponents/components/alert}/alert.rb +0 -0
  115. /data/lib/{components → shadcn_phlexcomponents/components/alert}/alert_description.rb +0 -0
  116. /data/lib/{components → shadcn_phlexcomponents/components/alert}/alert_title.rb +0 -0
  117. /data/lib/{components → shadcn_phlexcomponents/components/alert_dialog}/alert_dialog_description.rb +0 -0
  118. /data/lib/{components → shadcn_phlexcomponents/components/alert_dialog}/alert_dialog_footer.rb +0 -0
  119. /data/lib/{components → shadcn_phlexcomponents/components/alert_dialog}/alert_dialog_header.rb +0 -0
  120. /data/lib/{components → shadcn_phlexcomponents/components/alert_dialog}/alert_dialog_title.rb +0 -0
  121. /data/lib/{components → shadcn_phlexcomponents/components/aspect_ratio}/aspect_ratio.rb +0 -0
  122. /data/lib/{components → shadcn_phlexcomponents/components/breadcrumb}/breadcrumb_ellipsis.rb +0 -0
  123. /data/lib/{components → shadcn_phlexcomponents/components/breadcrumb}/breadcrumb_item.rb +0 -0
  124. /data/lib/{components → shadcn_phlexcomponents/components/breadcrumb}/breadcrumb_link.rb +0 -0
  125. /data/lib/{components → shadcn_phlexcomponents/components/breadcrumb}/breadcrumb_page.rb +0 -0
  126. /data/lib/{components → shadcn_phlexcomponents/components/breadcrumb}/breadcrumb_separator.rb +0 -0
  127. /data/lib/{components → shadcn_phlexcomponents/components/card}/card.rb +0 -0
  128. /data/lib/{components → shadcn_phlexcomponents/components/card}/card_content.rb +0 -0
  129. /data/lib/{components → shadcn_phlexcomponents/components/card}/card_description.rb +0 -0
  130. /data/lib/{components → shadcn_phlexcomponents/components/card}/card_footer.rb +0 -0
  131. /data/lib/{components → shadcn_phlexcomponents/components/card}/card_header.rb +0 -0
  132. /data/lib/{components → shadcn_phlexcomponents/components/card}/card_title.rb +0 -0
  133. /data/lib/{components → shadcn_phlexcomponents/components/dialog}/dialog_description.rb +0 -0
  134. /data/lib/{components → shadcn_phlexcomponents/components/dialog}/dialog_footer.rb +0 -0
  135. /data/lib/{components → shadcn_phlexcomponents/components/dialog}/dialog_header.rb +0 -0
  136. /data/lib/{components → shadcn_phlexcomponents/components/dialog}/dialog_title.rb +0 -0
  137. /data/lib/{components → shadcn_phlexcomponents/components/dropdown_menu}/dropdown_menu_item_to.rb +0 -0
  138. /data/lib/{components → shadcn_phlexcomponents/components/dropdown_menu}/dropdown_menu_label.rb +0 -0
  139. /data/lib/{components → shadcn_phlexcomponents/components/dropdown_menu}/dropdown_menu_separator.rb +0 -0
  140. /data/lib/{components → shadcn_phlexcomponents/components/form}/form_input.rb +0 -0
  141. /data/lib/{components → shadcn_phlexcomponents/components/label}/label.rb +0 -0
  142. /data/lib/{components → shadcn_phlexcomponents/components/link}/link.rb +0 -0
  143. /data/lib/{components → shadcn_phlexcomponents/components/pagination}/pagination.rb +0 -0
  144. /data/lib/{components → shadcn_phlexcomponents/components/pagination}/pagination_ellipsis.rb +0 -0
  145. /data/lib/{components → shadcn_phlexcomponents/components/pagination}/pagination_link.rb +0 -0
  146. /data/lib/{components → shadcn_phlexcomponents/components/pagination}/pagination_next.rb +0 -0
  147. /data/lib/{components → shadcn_phlexcomponents/components/pagination}/pagination_previous.rb +0 -0
  148. /data/lib/{components → shadcn_phlexcomponents/components/separator}/separator.rb +0 -0
  149. /data/lib/{components → shadcn_phlexcomponents/components/sheet}/sheet_description.rb +0 -0
  150. /data/lib/{components → shadcn_phlexcomponents/components/sheet}/sheet_footer.rb +0 -0
  151. /data/lib/{components → shadcn_phlexcomponents/components/sheet}/sheet_header.rb +0 -0
  152. /data/lib/{components → shadcn_phlexcomponents/components/sheet}/sheet_title.rb +0 -0
  153. /data/lib/{components → shadcn_phlexcomponents/components/sidebar}/sidebar_container.rb +0 -0
  154. /data/lib/{components → shadcn_phlexcomponents/components/sidebar}/sidebar_content.rb +0 -0
  155. /data/lib/{components → shadcn_phlexcomponents/components/sidebar}/sidebar_footer.rb +0 -0
  156. /data/lib/{components → shadcn_phlexcomponents/components/sidebar}/sidebar_group.rb +0 -0
  157. /data/lib/{components → shadcn_phlexcomponents/components/sidebar}/sidebar_group_content.rb +0 -0
  158. /data/lib/{components → shadcn_phlexcomponents/components/sidebar}/sidebar_group_label.rb +0 -0
  159. /data/lib/{components → shadcn_phlexcomponents/components/sidebar}/sidebar_header.rb +0 -0
  160. /data/lib/{components → shadcn_phlexcomponents/components/sidebar}/sidebar_inset.rb +0 -0
  161. /data/lib/{components → shadcn_phlexcomponents/components/sidebar}/sidebar_menu.rb +0 -0
  162. /data/lib/{components → shadcn_phlexcomponents/components/sidebar}/sidebar_menu_button.rb +0 -0
  163. /data/lib/{components → shadcn_phlexcomponents/components/sidebar}/sidebar_menu_item.rb +0 -0
  164. /data/lib/{components → shadcn_phlexcomponents/components/sidebar}/sidebar_menu_sub.rb +0 -0
  165. /data/lib/{components → shadcn_phlexcomponents/components/sidebar}/sidebar_menu_sub_button.rb +0 -0
  166. /data/lib/{components → shadcn_phlexcomponents/components/sidebar}/sidebar_menu_sub_item.rb +0 -0
  167. /data/lib/{components → shadcn_phlexcomponents/components/skeleton}/skeleton.rb +0 -0
  168. /data/lib/{components → shadcn_phlexcomponents/components/table}/table.rb +0 -0
  169. /data/lib/{components → shadcn_phlexcomponents/components/table}/table_body.rb +0 -0
  170. /data/lib/{components → shadcn_phlexcomponents/components/table}/table_caption.rb +0 -0
  171. /data/lib/{components → shadcn_phlexcomponents/components/table}/table_cell.rb +0 -0
  172. /data/lib/{components → shadcn_phlexcomponents/components/table}/table_footer.rb +0 -0
  173. /data/lib/{components → shadcn_phlexcomponents/components/table}/table_head.rb +0 -0
  174. /data/lib/{components → shadcn_phlexcomponents/components/table}/table_header.rb +0 -0
  175. /data/lib/{components → shadcn_phlexcomponents/components/table}/table_row.rb +0 -0
  176. /data/lib/{components → shadcn_phlexcomponents/components/tabs}/tabs_list.rb +0 -0
  177. /data/lib/{components → shadcn_phlexcomponents/components/toast}/toast_action.rb +0 -0
  178. /data/lib/{components → shadcn_phlexcomponents/components/toast}/toast_action_to.rb +0 -0
  179. /data/lib/{components → shadcn_phlexcomponents/components/toast}/toast_content.rb +0 -0
  180. /data/lib/{components → shadcn_phlexcomponents/components/toast}/toast_description.rb +0 -0
  181. /data/lib/{components → shadcn_phlexcomponents/components/toast}/toast_title.rb +0 -0
@@ -0,0 +1,212 @@
1
+ [data-vc='calendar'] {
2
+ @apply relative flex flex-col outline-none p-3;
3
+ }
4
+
5
+ [data-vc='controls'] {
6
+ @apply absolute z-20 -left-1 -right-1 -top-1.5 flex justify-between items-center pt-5 px-4 pointer-events-none box-content;
7
+ }
8
+
9
+ [data-vc='grid'] {
10
+ @apply grid grid-cols-1 md:grid-cols-2 gap-6;
11
+ }
12
+
13
+ [data-vc='column'] {
14
+ @apply flex flex-col;
15
+ }
16
+
17
+ [data-vc='header'] {
18
+ @apply relative flex items-center mb-3;
19
+ }
20
+
21
+ [data-vc-header='content'] {
22
+ @apply grid grid-flow-col auto-cols-max items-center justify-center px-4 whitespace-pre-wrap grow;
23
+ }
24
+
25
+ [data-vc='month'],
26
+ [data-vc='year'],
27
+ [data-vc-months-month],
28
+ [data-vc-years-year] {
29
+ @apply inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-base;
30
+ @apply font-medium transition-colors focus-visible:outline-none focus-visible:ring-1;
31
+ @apply focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50;
32
+ @apply [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 cursor-pointer;
33
+ @apply hover:bg-accent hover:text-accent-foreground px-2 h-10 md:h-8 md:px-3 pointer-events-auto;
34
+ }
35
+
36
+ [data-vc-months-month],
37
+ [data-vc-years-year] {
38
+ @apply md:text-sm;
39
+ }
40
+
41
+ [data-vc='wrapper'] {
42
+ @apply flex grow;
43
+ }
44
+
45
+ [data-vc='content'] {
46
+ @apply flex flex-col grow;
47
+ }
48
+
49
+ [data-vc='months'] {
50
+ @apply grid gap-y-4 gap-x-2 grid-cols-3 md:grid-cols-4 items-center grow;
51
+ }
52
+
53
+ [data-vc='years'] {
54
+ @apply grid gap-y-4 gap-x-2 grid-cols-3 md:grid-cols-5 items-center grow;
55
+ }
56
+
57
+ [data-vc='week'] {
58
+ @apply grid grid-cols-[repeat(7,_1fr)] justify-items-center mb-2;
59
+ }
60
+
61
+ [data-vc-week-day] {
62
+ @apply text-muted-foreground font-normal text-xs flex items-center justify-center;
63
+ }
64
+
65
+ [data-vc='dates'] {
66
+ @apply grid gap-y-1 grid-cols-[repeat(7,_1fr)] justify-items-center items-center grow pointer-events-none;
67
+ }
68
+
69
+ [data-vc-date-btn] {
70
+ @apply inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-base md:text-sm;
71
+ @apply font-medium transition-colors focus-visible:outline-none focus-visible:ring-1;
72
+ @apply focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50;
73
+ @apply [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 cursor-pointer;
74
+ @apply hover:bg-accent hover:text-accent-foreground md:h-9 md:w-9 h-10 w-10 pointer-events-auto;
75
+ }
76
+
77
+ [data-vc-years-year-selected],
78
+ [data-vc-months-month-selected] {
79
+ @apply bg-primary text-primary-foreground;
80
+ }
81
+
82
+ [data-vc-date-today] [data-vc-date-btn] {
83
+ @apply bg-accent text-accent-foreground font-bold;
84
+ }
85
+
86
+ [data-vc-date-btn][aria-selected='true'] {
87
+ @apply bg-primary text-primary-foreground hover:bg-primary/90;
88
+ }
89
+
90
+ [data-vc-arrow] {
91
+ @apply inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm;
92
+ @apply font-medium transition-colors focus-visible:outline-none focus-visible:ring-1;
93
+ @apply focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50;
94
+ @apply [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 cursor-pointer;
95
+ @apply border border-input bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground;
96
+ @apply pointer-events-auto w-7 h-7;
97
+ }
98
+
99
+ [data-vc-arrow='next']:before {
100
+ @apply bg-accent-foreground h-7 w-7;
101
+ mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right-icon lucide-chevron-right"><path d="m9 18 6-6-6-6"/></svg>');
102
+ mask-repeat: no-repeat;
103
+ position: absolute;
104
+ content: '';
105
+ mask-size: auto 16px;
106
+ mask-position: center;
107
+ }
108
+
109
+ [data-vc-arrow='prev']:before {
110
+ @apply bg-accent-foreground h-7 w-7;
111
+ mask-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-left-icon lucide-chevron-left"><path d="m15 18-6-6 6-6"/></svg>');
112
+ mask-repeat: no-repeat;
113
+ position: absolute;
114
+ content: '';
115
+ mask-size: auto 16px;
116
+ mask-position: center;
117
+ }
118
+
119
+ [data-vc-date-month='prev'] [data-vc-date-btn],
120
+ [data-vc-date-month='next'] [data-vc-date-btn] {
121
+ @apply text-muted-foreground;
122
+ }
123
+
124
+ [data-vc-date-disabled] [data-vc-date-btn] {
125
+ @apply pointer-events-none opacity-50 text-muted-foreground;
126
+ }
127
+
128
+ [data-vc='grid'][data-vc-grid='hidden'] [data-vc='column'] {
129
+ @apply opacity-30 pointer-events-none;
130
+ }
131
+
132
+ [data-vc='grid'][data-vc-grid='hidden']
133
+ [data-vc='column'][data-vc-column='month'],
134
+ [data-vc='grid'][data-vc-grid='hidden']
135
+ [data-vc='column'][data-vc-column='year'] {
136
+ @apply opacity-100 pointer-events-auto;
137
+ }
138
+
139
+ [data-vc-date][data-vc-date-hover] [data-vc-date-btn] {
140
+ @apply rounded-none;
141
+ }
142
+
143
+ [data-vc-date][data-vc-date-hover='first'] [data-vc-date-btn] {
144
+ @apply rounded-r-none rounded-l-md;
145
+ }
146
+
147
+ [data-vc-date][data-vc-date-hover='last'] [data-vc-date-btn] {
148
+ @apply rounded-l-none rounded-r-md;
149
+ }
150
+
151
+ [data-vc-date][data-vc-date-hover='first-and-last'] [data-vc-date-btn] {
152
+ @apply rounded-md;
153
+ }
154
+
155
+ [data-vc-date][data-vc-date-hover='first'][data-vc-date-selected]
156
+ [data-vc-date-btn] {
157
+ @apply rounded-l-md;
158
+ }
159
+
160
+ [data-vc-date][data-vc-date-hover='last'][data-vc-date-selected]
161
+ [data-vc-date-btn] {
162
+ @apply rounded-r-md;
163
+ }
164
+
165
+ [data-vc-date][data-vc-date-selected='first'] [data-vc-date-btn] {
166
+ @apply rounded-r-none rounded-l-md;
167
+ }
168
+
169
+ [data-vc-date][data-vc-date-selected='last'] [data-vc-date-btn] {
170
+ @apply rounded-l-none rounded-r-md;
171
+ }
172
+
173
+ [data-vc-date][data-vc-date-selected='first-and-last'] [data-vc-date-btn] {
174
+ @apply rounded-l-md rounded-r-md;
175
+ }
176
+
177
+ [data-vc-date][data-vc-date-selected='middle'] [data-vc-date-btn] {
178
+ @apply rounded-none;
179
+ }
180
+
181
+ /* [data-vc-date][data-vc-date-disabled]
182
+ + [data-vc-date-selected]
183
+ [data-vc-date-btn],
184
+ [data-vc-date][data-vc-date-disabled]
185
+ + [data-vc-date-hover]
186
+ [data-vc-date-btn] {
187
+ @apply rounded-l-md;
188
+ } */
189
+
190
+ /* [data-vc-date][data-vc-date-hover]:has(+ [data-vc-date-disabled])
191
+ [data-vc-date-btn],
192
+ [data-vc-date][data-vc-date-selected]:has(+ [data-vc-date-disabled])
193
+ [data-vc-date-btn] {
194
+ @apply rounded-r-md;
195
+ } */
196
+
197
+ [data-vc-date-hover] [data-vc-date-btn] {
198
+ @apply bg-accent text-accent-foreground;
199
+ }
200
+
201
+ [data-vc-date-selected] [data-vc-date-btn] {
202
+ @apply bg-primary text-primary-foreground;
203
+ }
204
+
205
+ [data-vc-date-selected='middle'][data-vc-date-selected] [data-vc-date-btn] {
206
+ @apply bg-primary/20 hover:bg-primary/20 text-accent-foreground;
207
+ }
208
+
209
+ [data-vc-date-hover='last'] [data-vc-date-btn],
210
+ [data-vc-date-hover='first'] [data-vc-date-btn] {
211
+ @apply bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground;
212
+ }
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- components_path = File.expand_path("../components", __dir__)
4
- components_install_path = Rails.root.join("vendor/shadcn_phlexcomponents")
5
- stimulus_controllers_path = File.expand_path("../../app/javascript/controllers", __dir__)
6
- stimulus_controllers_install_path = Rails.root.join("app/javascript/controllers/shadcn_phlexcomponents")
7
- tailwindcss_animate_path = File.expand_path("../../app/assets/tailwind/tailwindcss-animate.css", __dir__)
8
- tailwindcss_animate_install_path = Rails.root.join("app/assets/tailwind/shadcn_phlexcomponents/tailwindcss-animate.css")
3
+ components_path = File.expand_path("../shadcn_phlexcomponents/components", __dir__)
4
+ components_install_path = Rails.root.join("vendor/shadcn_phlexcomponents/components")
5
+ stimulus_controllers_path = File.expand_path("../../app/javascript", __dir__)
6
+ stimulus_controllers_install_path = Rails.root.join("vendor/shadcn_phlexcomponents/javascript")
7
+ css_path = File.expand_path("../../app/stylesheets", __dir__)
8
+ css_install_path = Rails.root.join("vendor/shadcn_phlexcomponents/stylesheets")
9
9
 
10
10
  directory(components_path, components_install_path)
11
11
  directory(stimulus_controllers_path, stimulus_controllers_install_path)
12
- copy_file(tailwindcss_animate_path, tailwindcss_animate_install_path)
12
+ directory(css_path, css_install_path)
@@ -26,7 +26,7 @@ module ShadcnPhlexcomponents
26
26
  data: {
27
27
  value: (@value || []).to_json,
28
28
  multiple: @multiple.to_s,
29
- controller: "shadcn-phlexcomponents--accordion",
29
+ controller: "accordion",
30
30
  },
31
31
  }
32
32
  end
@@ -20,7 +20,7 @@ module ShadcnPhlexcomponents
20
20
  },
21
21
  data: {
22
22
  state: "closed",
23
- "shadcn-phlexcomponents--accordion-target": "content",
23
+ "accordion-target": "content",
24
24
  },
25
25
  ) do
26
26
  div(**@attributes, &)
@@ -14,7 +14,7 @@ module ShadcnPhlexcomponents
14
14
  data: {
15
15
  state: "closed",
16
16
  value: @value,
17
- "shadcn-phlexcomponents--accordion-target": "item",
17
+ "accordion-target": "item",
18
18
  },
19
19
  }
20
20
  end
@@ -5,6 +5,7 @@ module ShadcnPhlexcomponents
5
5
  STYLES = <<~HEREDOC
6
6
  flex flex-1 items-center justify-between py-4 text-sm font-medium cursor-pointer
7
7
  transition-all hover:underline text-left [&[data-state=open]>svg]:rotate-180
8
+ disabled:opacity-50 disabled:hover:no-underline
8
9
  HEREDOC
9
10
 
10
11
  def initialize(aria_id: nil, **attributes)
@@ -22,11 +23,11 @@ module ShadcnPhlexcomponents
22
23
  },
23
24
  data: {
24
25
  state: "closed",
25
- "shadcn-phlexcomponents--accordion-target": "trigger",
26
+ "accordion-target": "trigger",
26
27
  action: <<~HEREDOC,
27
- click->shadcn-phlexcomponents--accordion#toggleItem
28
- keydown.up->shadcn-phlexcomponents--accordion#focusPrev:prevent
29
- keydown.down->shadcn-phlexcomponents--accordion#focusNext:prevent
28
+ click->accordion#toggleItem
29
+ keydown.up->accordion#focusPrev:prevent
30
+ keydown.down->accordion#focusNext:prevent
30
31
  HEREDOC
31
32
  },
32
33
  }
@@ -48,7 +48,7 @@ module ShadcnPhlexcomponents
48
48
  def default_attributes
49
49
  {
50
50
  data: {
51
- controller: "shadcn-phlexcomponents--alert-dialog",
51
+ controller: "alert-dialog",
52
52
  },
53
53
  }
54
54
  end
@@ -10,7 +10,7 @@ module ShadcnPhlexcomponents
10
10
  def default_attributes
11
11
  {
12
12
  data: {
13
- action: "click->shadcn-phlexcomponents--alert-dialog#close",
13
+ action: "click->alert-dialog#close",
14
14
  },
15
15
  }
16
16
  end
@@ -11,7 +11,7 @@ module ShadcnPhlexcomponents
11
11
  def default_attributes
12
12
  {
13
13
  data: {
14
- action: "click->shadcn-phlexcomponents--alert-dialog#close",
14
+ action: "click->alert-dialog#close",
15
15
  },
16
16
  }
17
17
  end
@@ -10,7 +10,7 @@ module ShadcnPhlexcomponents
10
10
  def default_attributes
11
11
  {
12
12
  data: {
13
- action: "click->shadcn-phlexcomponents--alert-dialog#close",
13
+ action: "click->alert-dialog#close",
14
14
  },
15
15
  }
16
16
  end
@@ -3,7 +3,7 @@
3
3
  module ShadcnPhlexcomponents
4
4
  class AlertDialogContent < Base
5
5
  STYLES = <<~HEREDOC
6
- fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%]
6
+ fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] pointer-events-auto
7
7
  translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200
8
8
  data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0
9
9
  data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95
@@ -27,7 +27,7 @@ module ShadcnPhlexcomponents
27
27
  },
28
28
  data: {
29
29
  state: "closed",
30
- "shadcn-phlexcomponents--alert-dialog-target": "content",
30
+ "alert-dialog-target": "content",
31
31
  },
32
32
  }
33
33
  end
@@ -17,8 +17,8 @@ module ShadcnPhlexcomponents
17
17
  controls: "#{@aria_id}-content",
18
18
  },
19
19
  data: {
20
- action: "click->shadcn-phlexcomponents--alert-dialog#open",
21
- "shadcn-phlexcomponents--alert-dialog-target": "trigger",
20
+ action: "click->alert-dialog#open",
21
+ "alert-dialog-target": "trigger",
22
22
  as_child: @as_child.to_s,
23
23
  },
24
24
  }
@@ -19,7 +19,7 @@ module ShadcnPhlexcomponents
19
19
  def default_attributes
20
20
  {
21
21
  data: {
22
- controller: "shadcn-phlexcomponents--avatar",
22
+ controller: "avatar",
23
23
  },
24
24
  }
25
25
  end
@@ -7,7 +7,7 @@ module ShadcnPhlexcomponents
7
7
  def default_attributes
8
8
  {
9
9
  data: {
10
- "shadcn-phlexcomponents--avatar-target": "fallback",
10
+ "avatar-target": "fallback",
11
11
  },
12
12
  }
13
13
  end
@@ -7,7 +7,7 @@ module ShadcnPhlexcomponents
7
7
  def default_attributes
8
8
  {
9
9
  data: {
10
- "shadcn-phlexcomponents--avatar-target": "image",
10
+ "avatar-target": "image",
11
11
  },
12
12
  }
13
13
  end
@@ -24,7 +24,7 @@ module ShadcnPhlexcomponents
24
24
  end
25
25
 
26
26
  def view_template(&)
27
- div(**@attributes, &)
27
+ span(**@attributes, &)
28
28
  end
29
29
  end
30
30
  end
@@ -104,5 +104,15 @@ module ShadcnPhlexcomponents
104
104
  struct
105
105
  end
106
106
  end
107
+
108
+ def item_disabled?(disabled, value)
109
+ if disabled.is_a?(String)
110
+ value == disabled
111
+ elsif disabled.is_a?(Array)
112
+ disabled.include?(value)
113
+ else
114
+ disabled
115
+ end
116
+ end
107
117
  end
108
118
  end
@@ -40,6 +40,8 @@ module ShadcnPhlexcomponents
40
40
  separator
41
41
  end
42
42
  end
43
+
44
+ nil
43
45
  end
44
46
 
45
47
  def view_template(&)
@@ -3,8 +3,8 @@
3
3
  module ShadcnPhlexcomponents
4
4
  class Button < Base
5
5
  STYLES = <<~HEREDOC
6
- inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md
7
- text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1
6
+ inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm
7
+ font-medium transition-colors focus-visible:outline-none focus-visible:ring-1
8
8
  focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50
9
9
  [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 cursor-pointer
10
10
  HEREDOC
@@ -13,15 +13,15 @@ module ShadcnPhlexcomponents
13
13
  primary: "bg-primary text-primary-foreground shadow hover:bg-primary/90",
14
14
  secondary: "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",
15
15
  destructive: "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
16
- outline: "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground",
16
+ outline: "border border-input bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground",
17
17
  ghost: "hover:bg-accent hover:text-accent-foreground",
18
18
  link: "text-primary underline-offset-4 hover:underline",
19
19
  }.freeze
20
20
 
21
21
  SIZES = {
22
22
  default: "h-9 px-4 py-2",
23
- sm: "h-8 rounded-md px-3 text-xs",
24
- lg: "h-10 rounded-md px-8",
23
+ sm: "h-8 px-3 text-xs",
24
+ lg: "h-10 px-8",
25
25
  icon: "h-9 w-9",
26
26
  }
27
27
 
@@ -40,7 +40,7 @@ module ShadcnPhlexcomponents
40
40
  checked: @checked,
41
41
  aria: { hidden: true },
42
42
  data: {
43
- "shadcn-phlexcomponents--checkbox-target": "input",
43
+ "checkbox-target": "input",
44
44
  },
45
45
  )
46
46
  end
@@ -56,12 +56,12 @@ module ShadcnPhlexcomponents
56
56
  },
57
57
  data: {
58
58
  checked: @checked.to_s,
59
- controller: "shadcn-phlexcomponents--checkbox",
59
+ controller: "checkbox",
60
60
  action: <<~HEREDOC,
61
- click->shadcn-phlexcomponents--checkbox#toggle
62
- keydown.enter->shadcn-phlexcomponents--checkbox#preventDefault
61
+ click->checkbox#toggle
62
+ keydown.enter->checkbox#preventDefault
63
63
  HEREDOC
64
- "shadcn-phlexcomponents--checkbox-checked-value": @checked,
64
+ "checkbox-checked-value": @checked,
65
65
  },
66
66
  }
67
67
  end
@@ -4,16 +4,28 @@ module ShadcnPhlexcomponents
4
4
  class CheckboxGroup < Base
5
5
  STYLES = "space-y-1.5"
6
6
 
7
- def initialize(name:, value: [], include_hidden: true, disabled: false, **attributes)
7
+ def initialize(name:, value: [], include_hidden: true, item_id_prefix: nil, **attributes)
8
8
  @name = name
9
9
  @value = value
10
10
  @include_hidden = include_hidden
11
- @disabled = disabled
11
+ @item_id_prefix = item_id_prefix
12
12
  super(**attributes)
13
13
  end
14
14
 
15
- def items(collection, value_method:, text_method:, wrapper_class: nil)
16
- wrapper_class = TAILWIND_MERGER.merge("flex items-center space-x-2 #{wrapper_class}")
15
+ def label(**attributes)
16
+ @label_attributes = attributes
17
+ nil
18
+ end
19
+
20
+ def checkbox(**attributes)
21
+ @checkbox_attributes = attributes
22
+ nil
23
+ end
24
+
25
+ def items(collection, value_method:, text_method:, wrapper_class: nil, disabled_items: nil, &)
26
+ vanish(&)
27
+
28
+ @wrapper_class = TAILWIND_MERGER.merge("flex items-center space-x-2 #{wrapper_class}")
17
29
 
18
30
  if collection.first&.is_a?(Hash)
19
31
  collection = convert_collection_hash_to_struct(collection, value_method: value_method, text_method: text_method)
@@ -22,28 +34,28 @@ module ShadcnPhlexcomponents
22
34
  collection.each do |item|
23
35
  value = item.public_send(value_method)
24
36
  text = item.public_send(text_method)
25
- id = "#{@name.parameterize.underscore}_#{value}"
26
37
 
27
- div(class: wrapper_class) do
28
- checkbox_disabled = if @disabled.is_a?(String)
29
- value == @disabled
30
- elsif @disabled.is_a?(Array)
31
- @disabled.include?(value)
32
- else
33
- @disabled
34
- end
38
+ id = if @item_id_prefix
39
+ "#{@item_id_prefix.parameterize.underscore}_#{value}"
40
+ else
41
+ "#{@name.parameterize.underscore}_#{value}"
42
+ end
35
43
 
44
+ div(class: @wrapper_class) do
36
45
  Checkbox(
37
46
  name: "#{@name}[]",
38
47
  id: id,
39
48
  value: value,
40
49
  checked: @value.include?(value),
41
50
  include_hidden: false,
42
- disabled: checkbox_disabled,
51
+ disabled: item_disabled?(disabled_items, value),
52
+ **@checkbox_attributes,
43
53
  )
44
- Label(for: id) { text }
54
+ Label(for: id, **@label_attributes) { text }
45
55
  end
46
56
  end
57
+
58
+ nil
47
59
  end
48
60
 
49
61
  def default_attributes
@@ -19,7 +19,7 @@ module ShadcnPhlexcomponents
19
19
  def default_attributes
20
20
  {
21
21
  data: {
22
- controller: "shadcn-phlexcomponents--collapsible",
22
+ controller: "collapsible",
23
23
  },
24
24
  }
25
25
  end
@@ -11,7 +11,7 @@ module ShadcnPhlexcomponents
11
11
  {
12
12
  id: "#{@aria_id}-content",
13
13
  data: {
14
- "shadcn-phlexcomponents--collapsible-target": "content",
14
+ "collapsible-target": "content",
15
15
  },
16
16
  }
17
17
  end
@@ -18,8 +18,8 @@ module ShadcnPhlexcomponents
18
18
  },
19
19
  data: {
20
20
  state: @open ? "open" : "closed",
21
- action: "click->shadcn-phlexcomponents--collapsible#toggle",
22
- "shadcn-phlexcomponents--collapsible-target": "trigger",
21
+ action: "click->collapsible#toggle",
22
+ "collapsible-target": "trigger",
23
23
  },
24
24
  }
25
25
  end