22
33module RubyUI
44 class Link < 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 ( href : "#" , variant : :link , size : :md , icon : false , **attrs )
611 @href = href
712 @variant = variant . to_sym
@@ -36,43 +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 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 bg-primary text-primary-foreground shadow hover:bg-primary/90" ,
40- 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"
4151 ]
4252 end
4353
4454 def link_classes
4555 [
46- "whitespace-nowrap inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 text-primary underline-offset-4 hover:underline" ,
47- 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"
4863 ]
4964 end
5065
5166 def secondary_classes
5267 [
53- "whitespace-nowrap inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 bg-secondary text-secondary-foreground hover:bg-opacity-80" ,
54- 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"
5575 ]
5676 end
5777
5878 def destructive_classes
5979 [
60- "whitespace-nowrap inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90" ,
61- 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"
6287 ]
6388 end
6489
6590 def outline_classes
6691 [
67- "whitespace-nowrap inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground" ,
68- 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"
6999 ]
70100 end
71101
72102 def ghost_classes
73103 [
74- "whitespace-nowrap inline-flex items-center justify-center rounded-md font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 hover:bg-accent hover:text-accent-foreground" ,
75- 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"
76110 ]
77111 end
78112
@@ -88,10 +122,7 @@ def default_classes
88122 end
89123
90124 def default_attrs
91- {
92- type : "button" ,
93- class : default_classes
94- }
125+ { type : "button" , class : default_classes }
95126 end
96127 end
97128end
0 commit comments