shadcn_phlexcomponents 0.1.18 → 0.1.19
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.
- checksums.yaml +4 -4
- data/README.md +321 -23
- data/app/javascript/controllers/accordion_controller.js +101 -90
- data/app/javascript/controllers/alert_dialog_controller.js +5 -4
- data/app/javascript/controllers/avatar_controller.js +12 -11
- data/app/javascript/controllers/checkbox_controller.js +26 -26
- data/app/javascript/controllers/collapsible_controller.js +35 -36
- data/app/javascript/controllers/combobox_controller.js +262 -231
- data/app/javascript/controllers/command_controller.js +205 -184
- data/app/javascript/controllers/date_picker_controller.js +252 -253
- data/app/javascript/controllers/date_range_picker_controller.js +189 -200
- data/app/javascript/controllers/dialog_controller.js +79 -78
- data/app/javascript/controllers/dropdown_menu_controller.js +229 -208
- data/app/javascript/controllers/dropdown_menu_sub_controller.js +111 -97
- data/app/javascript/controllers/form_field_controller.js +17 -16
- data/app/javascript/controllers/hover_card_controller.js +69 -71
- data/app/javascript/controllers/loading_button_controller.js +11 -10
- data/app/javascript/controllers/popover_controller.js +85 -78
- data/app/javascript/controllers/progress_controller.js +12 -11
- data/app/javascript/controllers/radio_group_controller.js +75 -74
- data/app/javascript/controllers/select_controller.js +247 -232
- data/app/javascript/controllers/sidebar_controller.js +26 -27
- data/app/javascript/controllers/sidebar_trigger_controller.js +12 -9
- data/app/javascript/controllers/slider_controller.js +74 -74
- data/app/javascript/controllers/switch_controller.js +23 -23
- data/app/javascript/controllers/tabs_controller.js +61 -61
- data/app/javascript/controllers/theme_switcher_controller.js +28 -27
- data/app/javascript/controllers/toast_container_controller.js +45 -31
- data/app/javascript/controllers/toast_controller.js +19 -18
- data/app/javascript/controllers/toggle_controller.js +17 -17
- data/app/javascript/controllers/toggle_group_controller.js +17 -17
- data/app/javascript/controllers/tooltip_controller.js +75 -77
- data/app/javascript/shadcn_phlexcomponents.js +27 -60
- data/app/javascript/utils/command.js +390 -334
- data/app/javascript/utils/floating_ui.js +139 -107
- data/app/javascript/utils/index.js +253 -190
- data/app/typescript/controllers/accordion_controller.ts +2 -0
- data/app/typescript/controllers/alert_dialog_controller.ts +2 -0
- data/app/typescript/controllers/avatar_controller.ts +2 -0
- data/app/typescript/controllers/checkbox_controller.ts +2 -0
- data/app/typescript/controllers/collapsible_controller.ts +2 -0
- data/app/typescript/controllers/combobox_controller.ts +2 -0
- data/app/typescript/controllers/command_controller.ts +2 -0
- data/app/typescript/controllers/date_picker_controller.ts +2 -0
- data/app/typescript/controllers/date_range_picker_controller.ts +2 -0
- data/app/typescript/controllers/dialog_controller.ts +2 -0
- data/app/typescript/controllers/dropdown_menu_controller.ts +2 -0
- data/app/typescript/controllers/dropdown_menu_sub_controller.ts +2 -0
- data/app/typescript/controllers/form_field_controller.ts +2 -0
- data/app/typescript/controllers/hover_card_controller.ts +2 -0
- data/app/typescript/controllers/loading_button_controller.ts +2 -0
- data/app/typescript/controllers/popover_controller.ts +2 -0
- data/app/typescript/controllers/progress_controller.ts +2 -0
- data/app/typescript/controllers/radio_group_controller.ts +2 -0
- data/app/typescript/controllers/select_controller.ts +2 -0
- data/app/typescript/controllers/slider_controller.ts +2 -0
- data/app/typescript/controllers/switch_controller.ts +2 -0
- data/app/typescript/controllers/tabs_controller.ts +2 -0
- data/app/typescript/controllers/theme_switcher_controller.ts +2 -0
- data/app/typescript/controllers/toast_container_controller.ts +2 -0
- data/app/typescript/controllers/toast_controller.ts +2 -0
- data/app/typescript/controllers/toggle_controller.ts +2 -0
- data/app/typescript/controllers/toggle_group_controller.ts +2 -0
- data/app/typescript/controllers/tooltip_controller.ts +2 -0
- data/app/typescript/shadcn_phlexcomponents.ts +27 -61
- data/app/typescript/utils/index.ts +7 -0
- data/lib/install/upgrade_shadcn_phlexcomponents.rb +28 -0
- data/lib/shadcn_phlexcomponents/components/accordion.rb +55 -12
- data/lib/shadcn_phlexcomponents/components/alert.rb +35 -16
- data/lib/shadcn_phlexcomponents/components/alert_dialog.rb +52 -12
- data/lib/shadcn_phlexcomponents/components/aspect_ratio.rb +33 -2
- data/lib/shadcn_phlexcomponents/components/avatar.rb +24 -7
- data/lib/shadcn_phlexcomponents/components/badge.rb +23 -18
- data/lib/shadcn_phlexcomponents/components/breadcrumb.rb +46 -6
- data/lib/shadcn_phlexcomponents/components/button.rb +32 -27
- data/lib/shadcn_phlexcomponents/components/card.rb +59 -10
- data/lib/shadcn_phlexcomponents/components/checkbox.rb +51 -30
- data/lib/shadcn_phlexcomponents/components/checkbox_group.rb +24 -4
- data/lib/shadcn_phlexcomponents/components/combobox.rb +212 -69
- data/lib/shadcn_phlexcomponents/components/command.rb +156 -52
- data/lib/shadcn_phlexcomponents/components/date_picker.rb +134 -48
- data/lib/shadcn_phlexcomponents/components/date_range_picker.rb +20 -42
- data/lib/shadcn_phlexcomponents/components/dialog.rb +80 -26
- data/lib/shadcn_phlexcomponents/components/dropdown_menu.rb +74 -25
- data/lib/shadcn_phlexcomponents/components/dropdown_menu_sub.rb +52 -24
- data/lib/shadcn_phlexcomponents/components/form/form_checkbox.rb +1 -1
- data/lib/shadcn_phlexcomponents/components/form/form_checkbox_group.rb +1 -1
- data/lib/shadcn_phlexcomponents/components/form/form_combobox.rb +1 -1
- data/lib/shadcn_phlexcomponents/components/form/form_date_picker.rb +1 -1
- data/lib/shadcn_phlexcomponents/components/form/form_date_range_picker.rb +1 -1
- data/lib/shadcn_phlexcomponents/components/form/form_error.rb +8 -1
- data/lib/shadcn_phlexcomponents/components/form/form_helpers.rb +3 -2
- data/lib/shadcn_phlexcomponents/components/form/form_hint.rb +8 -1
- data/lib/shadcn_phlexcomponents/components/form/form_input.rb +1 -1
- data/lib/shadcn_phlexcomponents/components/form/form_radio_group.rb +1 -1
- data/lib/shadcn_phlexcomponents/components/form/form_select.rb +1 -1
- data/lib/shadcn_phlexcomponents/components/form/form_slider.rb +1 -1
- data/lib/shadcn_phlexcomponents/components/form/form_switch.rb +1 -1
- data/lib/shadcn_phlexcomponents/components/form/form_textarea.rb +1 -1
- data/lib/shadcn_phlexcomponents/components/form.rb +22 -6
- data/lib/shadcn_phlexcomponents/components/hover_card.rb +48 -18
- data/lib/shadcn_phlexcomponents/components/input.rb +13 -8
- data/lib/shadcn_phlexcomponents/components/label.rb +9 -4
- data/lib/shadcn_phlexcomponents/components/link.rb +8 -1
- data/lib/shadcn_phlexcomponents/components/pagination.rb +34 -6
- data/lib/shadcn_phlexcomponents/components/popover.rb +43 -13
- data/lib/shadcn_phlexcomponents/components/progress.rb +37 -6
- data/lib/shadcn_phlexcomponents/components/radio_group.rb +41 -15
- data/lib/shadcn_phlexcomponents/components/select.rb +99 -42
- data/lib/shadcn_phlexcomponents/components/separator.rb +9 -4
- data/lib/shadcn_phlexcomponents/components/sheet.rb +87 -21
- data/lib/shadcn_phlexcomponents/components/skeleton.rb +8 -1
- data/lib/shadcn_phlexcomponents/components/switch.rb +45 -17
- data/lib/shadcn_phlexcomponents/components/table.rb +84 -17
- data/lib/shadcn_phlexcomponents/components/tabs.rb +36 -12
- data/lib/shadcn_phlexcomponents/components/textarea.rb +12 -7
- data/lib/shadcn_phlexcomponents/components/toast.rb +46 -20
- data/lib/shadcn_phlexcomponents/components/toast_container.rb +19 -14
- data/lib/shadcn_phlexcomponents/components/toggle.rb +28 -23
- data/lib/shadcn_phlexcomponents/components/tooltip.rb +49 -14
- data/lib/shadcn_phlexcomponents/configuration.rb +46 -0
- data/lib/shadcn_phlexcomponents/initializers/shadcn_phlexcomponents.rb +28 -0
- data/lib/shadcn_phlexcomponents/version.rb +1 -1
- data/lib/shadcn_phlexcomponents.rb +12 -1
- data/lib/tasks/upgrade.rake +10 -0
- metadata +15 -14
- data/app/typescript/controllers/sidebar_controller.ts +0 -39
- data/app/typescript/controllers/sidebar_trigger_controller.ts +0 -21
@@ -3,24 +3,29 @@
|
|
3
3
|
module ShadcnPhlexcomponents
|
4
4
|
class Badge < Base
|
5
5
|
class_variants(
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
6
|
+
**(
|
7
|
+
ShadcnPhlexcomponents.configuration.badge ||
|
8
|
+
{
|
9
|
+
base: <<~HEREDOC,
|
10
|
+
inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium
|
11
|
+
w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none
|
12
|
+
focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]
|
13
|
+
aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive
|
14
|
+
transition-[color,box-shadow] overflow-hidden
|
15
|
+
HEREDOC
|
16
|
+
variants: {
|
17
|
+
variant: {
|
18
|
+
default: "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90",
|
19
|
+
secondary: "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90",
|
20
|
+
destructive: "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
|
21
|
+
outline: "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground",
|
22
|
+
},
|
23
|
+
},
|
24
|
+
defaults: {
|
25
|
+
variant: :default,
|
26
|
+
},
|
27
|
+
}
|
28
|
+
),
|
24
29
|
)
|
25
30
|
|
26
31
|
def initialize(variant: :default, **attributes)
|
@@ -3,7 +3,12 @@
|
|
3
3
|
module ShadcnPhlexcomponents
|
4
4
|
class Breadcrumb < Base
|
5
5
|
class_variants(
|
6
|
-
|
6
|
+
**(
|
7
|
+
ShadcnPhlexcomponents.configuration.breadcrumb&.dig(:root) ||
|
8
|
+
{
|
9
|
+
base: "text-muted-foreground flex flex-wrap items-center gap-1.5 text-sm break-words sm:gap-2.5",
|
10
|
+
}
|
11
|
+
),
|
7
12
|
)
|
8
13
|
|
9
14
|
def item(**attributes, &)
|
@@ -54,7 +59,14 @@ module ShadcnPhlexcomponents
|
|
54
59
|
end
|
55
60
|
|
56
61
|
class BreadcrumbItem < Base
|
57
|
-
class_variants(
|
62
|
+
class_variants(
|
63
|
+
**(
|
64
|
+
ShadcnPhlexcomponents.configuration.breadcrumb&.dig(:item) ||
|
65
|
+
{
|
66
|
+
base: "inline-flex items-center gap-1.5",
|
67
|
+
}
|
68
|
+
),
|
69
|
+
)
|
58
70
|
|
59
71
|
def view_template(&)
|
60
72
|
li(**@attributes, &)
|
@@ -62,7 +74,14 @@ module ShadcnPhlexcomponents
|
|
62
74
|
end
|
63
75
|
|
64
76
|
class BreadcrumbLink < Base
|
65
|
-
class_variants(
|
77
|
+
class_variants(
|
78
|
+
**(
|
79
|
+
ShadcnPhlexcomponents.configuration.breadcrumb&.dig(:link) ||
|
80
|
+
{
|
81
|
+
base: "transition-colors hover:text-foreground",
|
82
|
+
}
|
83
|
+
),
|
84
|
+
)
|
66
85
|
|
67
86
|
def initialize(name = nil, options = nil, html_options = nil)
|
68
87
|
@name = name
|
@@ -88,7 +107,14 @@ module ShadcnPhlexcomponents
|
|
88
107
|
end
|
89
108
|
|
90
109
|
class BreadcrumbSeparator < Base
|
91
|
-
class_variants(
|
110
|
+
class_variants(
|
111
|
+
**(
|
112
|
+
ShadcnPhlexcomponents.configuration.breadcrumb&.dig(:separator) ||
|
113
|
+
{
|
114
|
+
base: "[&>svg]:size-3.5",
|
115
|
+
}
|
116
|
+
),
|
117
|
+
)
|
92
118
|
|
93
119
|
def default_attributes
|
94
120
|
{
|
@@ -111,7 +137,14 @@ module ShadcnPhlexcomponents
|
|
111
137
|
end
|
112
138
|
|
113
139
|
class BreadcrumbPage < Base
|
114
|
-
class_variants(
|
140
|
+
class_variants(
|
141
|
+
**(
|
142
|
+
ShadcnPhlexcomponents.configuration.breadcrumb&.dig(:page) ||
|
143
|
+
{
|
144
|
+
base: "font-normal text-foreground",
|
145
|
+
}
|
146
|
+
),
|
147
|
+
)
|
115
148
|
|
116
149
|
def default_attributes
|
117
150
|
{
|
@@ -129,7 +162,14 @@ module ShadcnPhlexcomponents
|
|
129
162
|
end
|
130
163
|
|
131
164
|
class BreadcrumbEllipsis < Base
|
132
|
-
class_variants(
|
165
|
+
class_variants(
|
166
|
+
**(
|
167
|
+
ShadcnPhlexcomponents.configuration.breadcrumb&.dig(:ellipsis) ||
|
168
|
+
{
|
169
|
+
base: "flex size-9 items-center justify-center",
|
170
|
+
}
|
171
|
+
),
|
172
|
+
)
|
133
173
|
|
134
174
|
def default_attributes
|
135
175
|
{
|
@@ -3,33 +3,38 @@
|
|
3
3
|
module ShadcnPhlexcomponents
|
4
4
|
class Button < Base
|
5
5
|
class_variants(
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
6
|
+
**(
|
7
|
+
ShadcnPhlexcomponents.configuration.button ||
|
8
|
+
{
|
9
|
+
base: <<~HEREDOC,
|
10
|
+
inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium
|
11
|
+
transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none
|
12
|
+
[&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring
|
13
|
+
focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20
|
14
|
+
dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive
|
15
|
+
HEREDOC
|
16
|
+
variants: {
|
17
|
+
variant: {
|
18
|
+
default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
|
19
|
+
destructive: "bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60",
|
20
|
+
outline: "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50",
|
21
|
+
secondary: "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",
|
22
|
+
ghost: "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",
|
23
|
+
link: "text-primary underline-offset-4 hover:underline",
|
24
|
+
},
|
25
|
+
size: {
|
26
|
+
default: "h-9 px-4 py-2 has-[>svg]:px-3",
|
27
|
+
sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
|
28
|
+
lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
|
29
|
+
icon: "size-9",
|
30
|
+
},
|
31
|
+
},
|
32
|
+
defaults: {
|
33
|
+
variant: :default,
|
34
|
+
size: :default,
|
35
|
+
},
|
36
|
+
}
|
37
|
+
),
|
33
38
|
)
|
34
39
|
|
35
40
|
def initialize(variant: :default, size: :default, type: :button, **attributes)
|
@@ -2,7 +2,14 @@
|
|
2
2
|
|
3
3
|
module ShadcnPhlexcomponents
|
4
4
|
class Card < Base
|
5
|
-
class_variants(
|
5
|
+
class_variants(
|
6
|
+
**(
|
7
|
+
ShadcnPhlexcomponents.configuration.card&.dig(:root) ||
|
8
|
+
{
|
9
|
+
base: "bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",
|
10
|
+
}
|
11
|
+
),
|
12
|
+
)
|
6
13
|
|
7
14
|
def header(**attributes, &)
|
8
15
|
CardHeader(**attributes, &)
|
@@ -35,10 +42,15 @@ module ShadcnPhlexcomponents
|
|
35
42
|
|
36
43
|
class CardHeader < Base
|
37
44
|
class_variants(
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
45
|
+
**(
|
46
|
+
ShadcnPhlexcomponents.configuration.card&.dig(:header) ||
|
47
|
+
{
|
48
|
+
base: <<~HEREDOC,
|
49
|
+
@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5
|
50
|
+
px-6 has-data-[shadcn-phlexcomponents=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6
|
51
|
+
HEREDOC
|
52
|
+
}
|
53
|
+
),
|
42
54
|
)
|
43
55
|
|
44
56
|
def view_template(&)
|
@@ -47,7 +59,14 @@ module ShadcnPhlexcomponents
|
|
47
59
|
end
|
48
60
|
|
49
61
|
class CardTitle < Base
|
50
|
-
class_variants(
|
62
|
+
class_variants(
|
63
|
+
**(
|
64
|
+
ShadcnPhlexcomponents.configuration.card&.dig(:title) ||
|
65
|
+
{
|
66
|
+
base: "leading-none font-semibold",
|
67
|
+
}
|
68
|
+
),
|
69
|
+
)
|
51
70
|
|
52
71
|
def view_template(&)
|
53
72
|
div(**@attributes, &)
|
@@ -55,7 +74,14 @@ module ShadcnPhlexcomponents
|
|
55
74
|
end
|
56
75
|
|
57
76
|
class CardDescription < Base
|
58
|
-
class_variants(
|
77
|
+
class_variants(
|
78
|
+
**(
|
79
|
+
ShadcnPhlexcomponents.configuration.card&.dig(:description) ||
|
80
|
+
{
|
81
|
+
base: "text-muted-foreground text-sm",
|
82
|
+
}
|
83
|
+
),
|
84
|
+
)
|
59
85
|
|
60
86
|
def view_template(&)
|
61
87
|
div(**@attributes, &)
|
@@ -63,7 +89,14 @@ module ShadcnPhlexcomponents
|
|
63
89
|
end
|
64
90
|
|
65
91
|
class CardAction < Base
|
66
|
-
class_variants(
|
92
|
+
class_variants(
|
93
|
+
**(
|
94
|
+
ShadcnPhlexcomponents.configuration.card&.dig(:action) ||
|
95
|
+
{
|
96
|
+
base: "col-start-2 row-span-2 row-start-1 self-start justify-self-end",
|
97
|
+
}
|
98
|
+
),
|
99
|
+
)
|
67
100
|
|
68
101
|
def view_template(&)
|
69
102
|
div(**@attributes, &)
|
@@ -71,7 +104,16 @@ module ShadcnPhlexcomponents
|
|
71
104
|
end
|
72
105
|
|
73
106
|
class CardContent < Base
|
74
|
-
class_variants(
|
107
|
+
class_variants(
|
108
|
+
**(
|
109
|
+
ShadcnPhlexcomponents.configuration.card&.dig(:content) ||
|
110
|
+
{
|
111
|
+
base: "px-6",
|
112
|
+
}
|
113
|
+
),
|
114
|
+
)
|
115
|
+
|
116
|
+
class_variants(base: "")
|
75
117
|
|
76
118
|
def view_template(&)
|
77
119
|
div(**@attributes, &)
|
@@ -79,7 +121,14 @@ module ShadcnPhlexcomponents
|
|
79
121
|
end
|
80
122
|
|
81
123
|
class CardFooter < Base
|
82
|
-
class_variants(
|
124
|
+
class_variants(
|
125
|
+
**(
|
126
|
+
ShadcnPhlexcomponents.configuration.card&.dig(:footer) ||
|
127
|
+
{
|
128
|
+
base: "flex items-center px-6 [.border-t]:pt-6",
|
129
|
+
}
|
130
|
+
),
|
131
|
+
)
|
83
132
|
|
84
133
|
def view_template(&)
|
85
134
|
div(**@attributes, &)
|
@@ -3,14 +3,19 @@
|
|
3
3
|
module ShadcnPhlexcomponents
|
4
4
|
class Checkbox < Base
|
5
5
|
class_variants(
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
6
|
+
**(
|
7
|
+
ShadcnPhlexcomponents.configuration.checkbox&.dig(:root) ||
|
8
|
+
{
|
9
|
+
base: <<~HEREDOC,
|
10
|
+
peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground
|
11
|
+
dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring
|
12
|
+
focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40
|
13
|
+
aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow
|
14
|
+
outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50
|
15
|
+
relative
|
16
|
+
HEREDOC
|
17
|
+
}
|
18
|
+
),
|
14
19
|
)
|
15
20
|
|
16
21
|
def initialize(name: nil, value: "1", unchecked_value: "0", checked: false, include_hidden: true,
|
@@ -23,14 +28,28 @@ module ShadcnPhlexcomponents
|
|
23
28
|
super(**attributes)
|
24
29
|
end
|
25
30
|
|
31
|
+
def default_attributes
|
32
|
+
{
|
33
|
+
type: "button",
|
34
|
+
role: "checkbox",
|
35
|
+
aria: {
|
36
|
+
checked: @checked.to_s,
|
37
|
+
},
|
38
|
+
data: {
|
39
|
+
checked: @checked.to_s,
|
40
|
+
controller: "checkbox",
|
41
|
+
action: <<~HEREDOC,
|
42
|
+
click->checkbox#toggle
|
43
|
+
keydown.enter->checkbox#preventDefault
|
44
|
+
HEREDOC
|
45
|
+
checkbox_is_checked_value: @checked,
|
46
|
+
},
|
47
|
+
}
|
48
|
+
end
|
49
|
+
|
26
50
|
def view_template(&)
|
27
51
|
button(**@attributes) do
|
28
|
-
|
29
|
-
class: "flex items-center justify-center text-current transition-none",
|
30
|
-
data: { checkbox_target: "indicator" },
|
31
|
-
) do
|
32
|
-
icon("check", class: "size-3.5")
|
33
|
-
end
|
52
|
+
CheckboxIndicator()
|
34
53
|
|
35
54
|
if @include_hidden
|
36
55
|
input(name: @name, type: "hidden", value: @unchecked_value, autocomplete: "off")
|
@@ -50,24 +69,26 @@ module ShadcnPhlexcomponents
|
|
50
69
|
)
|
51
70
|
end
|
52
71
|
end
|
72
|
+
end
|
73
|
+
|
74
|
+
class CheckboxIndicator < Base
|
75
|
+
class_variants(
|
76
|
+
**(
|
77
|
+
ShadcnPhlexcomponents.configuration.checkbox&.dig(:indicator) ||
|
78
|
+
{
|
79
|
+
base: "flex items-center justify-center text-current transition-none",
|
80
|
+
}
|
81
|
+
),
|
82
|
+
)
|
53
83
|
|
54
84
|
def default_attributes
|
55
|
-
{
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
checked: @checked.to_s,
|
63
|
-
controller: "checkbox",
|
64
|
-
action: <<~HEREDOC,
|
65
|
-
click->checkbox#toggle
|
66
|
-
keydown.enter->checkbox#preventDefault
|
67
|
-
HEREDOC
|
68
|
-
checkbox_is_checked_value: @checked,
|
69
|
-
},
|
70
|
-
}
|
85
|
+
{ data: { checkbox_target: "indicator" } }
|
86
|
+
end
|
87
|
+
|
88
|
+
def view_template(&)
|
89
|
+
span(**@attributes) do
|
90
|
+
icon("check", class: "size-3.5")
|
91
|
+
end
|
71
92
|
end
|
72
93
|
end
|
73
94
|
end
|
@@ -2,7 +2,14 @@
|
|
2
2
|
|
3
3
|
module ShadcnPhlexcomponents
|
4
4
|
class CheckboxGroup < Base
|
5
|
-
class_variants(
|
5
|
+
class_variants(
|
6
|
+
**(
|
7
|
+
ShadcnPhlexcomponents.configuration.checkbox_group&.dig(:root) ||
|
8
|
+
{
|
9
|
+
base: "space-y-1.5",
|
10
|
+
}
|
11
|
+
),
|
12
|
+
)
|
6
13
|
|
7
14
|
def initialize(name:, value: [], include_hidden: true, **attributes)
|
8
15
|
@name = name
|
@@ -24,8 +31,6 @@ module ShadcnPhlexcomponents
|
|
24
31
|
def items(collection, value_method:, text_method:, container_class: nil, disabled_items: nil, id_prefix: nil, &)
|
25
32
|
vanish(&)
|
26
33
|
|
27
|
-
container_class = TAILWIND_MERGER.merge("flex flex-row items-center gap-2 #{container_class}")
|
28
|
-
|
29
34
|
if collection.first&.is_a?(Hash)
|
30
35
|
collection = convert_collection_hash_to_struct(collection, value_method: value_method, text_method: text_method)
|
31
36
|
end
|
@@ -40,7 +45,7 @@ module ShadcnPhlexcomponents
|
|
40
45
|
"#{@name.parameterize.underscore}_#{value}"
|
41
46
|
end
|
42
47
|
|
43
|
-
|
48
|
+
CheckboxGroupItemContainer(class: container_class) do
|
44
49
|
Checkbox(
|
45
50
|
name: "#{@name}[]",
|
46
51
|
id: id,
|
@@ -73,4 +78,19 @@ module ShadcnPhlexcomponents
|
|
73
78
|
end
|
74
79
|
end
|
75
80
|
end
|
81
|
+
|
82
|
+
class CheckboxGroupItemContainer < Base
|
83
|
+
class_variants(
|
84
|
+
**(
|
85
|
+
ShadcnPhlexcomponents.configuration.checkbox_group&.dig(:item_container) ||
|
86
|
+
{
|
87
|
+
base: "flex flex-row items-center gap-2",
|
88
|
+
}
|
89
|
+
),
|
90
|
+
)
|
91
|
+
|
92
|
+
def view_template(&)
|
93
|
+
div(**@attributes, &)
|
94
|
+
end
|
95
|
+
end
|
76
96
|
end
|