22
33module 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
121128end
0 commit comments