Skip to content

Commit 187b2bc

Browse files
authored
Button constants (#270)
1 parent b4beb97 commit 187b2bc

File tree

1 file changed

+47
-40
lines changed

1 file changed

+47
-40
lines changed

lib/ruby_ui/button/button.rb

Lines changed: 47 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22

33
module RubyUI
44
class Button < Base
5+
DISABLED_CLASSES = "disabled:pointer-events-none disabled:opacity-50"
6+
FOCUS_VISIBLE_CLASSES = "focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
7+
ARIA_DISABLED_CLASSES = "aria-disabled:pointer-events-none aria-disabled:opacity-50 aria-disabled:cursor-not-allowed"
8+
DEFAULT_CLASSES = "whitespace-nowrap inline-flex items-center justify-center rounded-md font-medium transition-colors"
9+
510
def initialize(type: :button, variant: :primary, size: :md, icon: false, **attrs)
611
@type = type
712
@variant = variant.to_sym
@@ -36,67 +41,72 @@ def size_classes
3641

3742
def primary_classes
3843
[
39-
"whitespace-nowrap inline-flex items-center justify-center rounded-md font-medium transition-colors bg-primary text-primary-foreground shadow",
40-
"hover:bg-primary/90",
41-
"disabled:pointer-events-none disabled:opacity-50",
42-
"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
43-
"aria-disabled:pointer-events-none aria-disabled:opacity-50 aria-disabled:cursor-not-allowed",
44-
size_classes
44+
DEFAULT_CLASSES,
45+
FOCUS_VISIBLE_CLASSES,
46+
DISABLED_CLASSES,
47+
ARIA_DISABLED_CLASSES,
48+
size_classes,
49+
"bg-primary text-primary-foreground shadow",
50+
"hover:bg-primary/90"
4551
]
4652
end
4753

4854
def link_classes
4955
[
50-
"whitespace-nowrap inline-flex items-center justify-center rounded-md font-medium transition-colors text-primary underline-offset-4",
51-
"hover:underline",
52-
"disabled:pointer-events-none disabled:opacity-50",
53-
"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
54-
"aria-disabled:pointer-events-none aria-disabled:opacity-50 aria-disabled:cursor-not-allowed",
55-
size_classes
56+
DEFAULT_CLASSES,
57+
FOCUS_VISIBLE_CLASSES,
58+
DISABLED_CLASSES,
59+
ARIA_DISABLED_CLASSES,
60+
size_classes,
61+
"text-primary underline-offset-4",
62+
"hover:underline"
5663
]
5764
end
5865

5966
def secondary_classes
6067
[
61-
"whitespace-nowrap inline-flex items-center justify-center rounded-md font-medium transition-colors bg-secondary text-secondary-foreground",
62-
"hover:bg-opacity-80",
63-
"disabled:pointer-events-none disabled:opacity-50",
64-
"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
65-
"aria-disabled:pointer-events-none aria-disabled:opacity-50 aria-disabled:cursor-not-allowed",
66-
size_classes
68+
DEFAULT_CLASSES,
69+
FOCUS_VISIBLE_CLASSES,
70+
DISABLED_CLASSES,
71+
ARIA_DISABLED_CLASSES,
72+
size_classes,
73+
"bg-secondary text-secondary-foreground",
74+
"hover:bg-opacity-80"
6775
]
6876
end
6977

7078
def destructive_classes
7179
[
72-
"whitespace-nowrap inline-flex items-center justify-center rounded-md font-medium transition-colors bg-destructive text-destructive-foreground shadow-sm",
73-
"hover:bg-destructive/90",
74-
"disabled:pointer-events-none disabled:opacity-50",
75-
"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
76-
"aria-disabled:pointer-events-none aria-disabled:opacity-50 aria-disabled:cursor-not-allowed",
77-
size_classes
80+
DEFAULT_CLASSES,
81+
FOCUS_VISIBLE_CLASSES,
82+
DISABLED_CLASSES,
83+
ARIA_DISABLED_CLASSES,
84+
size_classes,
85+
"bg-destructive text-destructive-foreground shadow-sm",
86+
"hover:bg-destructive/90"
7887
]
7988
end
8089

8190
def outline_classes
8291
[
83-
"whitespace-nowrap inline-flex items-center justify-center rounded-md font-medium transition-colors border border-input bg-background shadow-sm",
84-
"hover:bg-accent hover:text-accent-foreground",
85-
"disabled:pointer-events-none disabled:opacity-50",
86-
"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
87-
"aria-disabled:pointer-events-none aria-disabled:opacity-50 aria-disabled:cursor-not-allowed",
88-
size_classes
92+
DEFAULT_CLASSES,
93+
FOCUS_VISIBLE_CLASSES,
94+
DISABLED_CLASSES,
95+
ARIA_DISABLED_CLASSES,
96+
size_classes,
97+
"border border-input bg-background shadow-sm",
98+
"hover:bg-accent hover:text-accent-foreground"
8999
]
90100
end
91101

92102
def ghost_classes
93103
[
94-
"whitespace-nowrap inline-flex items-center justify-center rounded-md font-medium transition-colors",
95-
"hover:bg-accent hover:text-accent-foreground",
96-
"disabled:pointer-events-none disabled:opacity-50",
97-
"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring",
98-
"aria-disabled:pointer-events-none aria-disabled:opacity-50 aria-disabled:cursor-not-allowed",
99-
size_classes
104+
DEFAULT_CLASSES,
105+
FOCUS_VISIBLE_CLASSES,
106+
DISABLED_CLASSES,
107+
ARIA_DISABLED_CLASSES,
108+
size_classes,
109+
"hover:bg-accent hover:text-accent-foreground"
100110
]
101111
end
102112

@@ -112,10 +122,7 @@ def default_classes
112122
end
113123

114124
def default_attrs
115-
{
116-
type: @type,
117-
class: default_classes
118-
}
125+
{type: @type, class: default_classes}
119126
end
120127
end
121128
end

0 commit comments

Comments
 (0)