maquina-components 0.1.2 → 0.3.0
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 +399 -137
- data/app/assets/images/maquina.svg +1 -0
- data/app/assets/stylesheets/alert.css +143 -0
- data/app/assets/stylesheets/badge.css +145 -0
- data/app/assets/stylesheets/breadcrumbs.css +163 -0
- data/app/assets/stylesheets/card.css +128 -0
- data/app/assets/stylesheets/combobox.css +218 -0
- data/app/assets/stylesheets/dropdown_menu.css +248 -0
- data/app/assets/stylesheets/empty.css +133 -0
- data/app/assets/stylesheets/form.css +617 -0
- data/app/assets/stylesheets/header.css +61 -0
- data/app/assets/stylesheets/maquina_components.css +143 -64
- data/app/assets/stylesheets/pagination.css +154 -0
- data/app/assets/stylesheets/sidebar.css +477 -0
- data/app/assets/stylesheets/table.css +205 -0
- data/app/assets/stylesheets/toast.css +433 -0
- data/app/assets/stylesheets/toggle_group.css +151 -0
- data/app/assets/tailwind/maquina_components_engine/engine.css +18 -0
- data/app/helpers/maquina_components/breadcrumbs_helper.rb +118 -0
- data/app/helpers/maquina_components/combobox_helper.rb +300 -0
- data/app/helpers/maquina_components/dropdown_menu_helper.rb +249 -0
- data/app/helpers/maquina_components/empty_helper.rb +102 -0
- data/app/helpers/{components → maquina_components}/icons_helper.rb +40 -3
- data/app/helpers/maquina_components/pagination_helper.rb +153 -0
- data/app/helpers/maquina_components/sidebar_helper.rb +63 -0
- data/app/helpers/maquina_components/table_helper.rb +144 -0
- data/app/helpers/maquina_components/toast_helper.rb +115 -0
- data/app/helpers/maquina_components/toggle_group_helper.rb +172 -0
- data/app/javascript/controllers/breadcrumb_controller.js +71 -0
- data/app/javascript/controllers/combobox_controller.js +325 -0
- data/app/javascript/controllers/dropdown_menu_controller.js +203 -0
- data/app/javascript/controllers/menu_button_controller.js +59 -0
- data/app/javascript/controllers/sidebar_controller.js +316 -0
- data/app/javascript/controllers/sidebar_trigger_controller.js +32 -0
- data/app/javascript/controllers/toast_controller.js +115 -0
- data/app/javascript/controllers/toaster_controller.js +226 -0
- data/app/javascript/controllers/toggle_group_controller.js +178 -0
- data/app/views/components/_alert.html.erb +11 -10
- data/app/views/components/_badge.html.erb +10 -0
- data/app/views/components/_breadcrumbs.html.erb +16 -0
- data/app/views/components/_card.html.erb +4 -8
- data/app/views/components/_combobox.html.erb +13 -0
- data/app/views/components/_dropdown.html.erb +25 -0
- data/app/views/components/_dropdown_menu.html.erb +9 -0
- data/app/views/components/_empty.html.erb +10 -0
- data/app/views/components/_header.html.erb +8 -0
- data/app/views/components/_menu_button.html.erb +44 -0
- data/app/views/components/_pagination.html.erb +12 -33
- data/app/views/components/_separator.html.erb +11 -0
- data/app/views/components/_sidebar.html.erb +30 -20
- data/app/views/components/_simple_table.html.erb +49 -0
- data/app/views/components/_table.html.erb +21 -0
- data/app/views/components/_toast.html.erb +53 -0
- data/app/views/components/_toaster.html.erb +17 -0
- data/app/views/components/_toggle_group.html.erb +24 -0
- data/app/views/components/alert/_description.html.erb +6 -0
- data/app/views/components/alert/_title.html.erb +6 -0
- data/app/views/components/breadcrumbs/_ellipsis.html.erb +9 -0
- data/app/views/components/breadcrumbs/_item.html.erb +8 -0
- data/app/views/components/breadcrumbs/_link.html.erb +8 -0
- data/app/views/components/breadcrumbs/_list.html.erb +8 -0
- data/app/views/components/breadcrumbs/_page.html.erb +8 -0
- data/app/views/components/breadcrumbs/_separator.html.erb +17 -0
- data/app/views/components/card/_action.html.erb +6 -0
- data/app/views/components/card/_content.html.erb +9 -0
- data/app/views/components/card/_description.html.erb +6 -0
- data/app/views/components/card/_footer.html.erb +17 -0
- data/app/views/components/card/_header.html.erb +9 -0
- data/app/views/components/card/_title.html.erb +9 -0
- data/app/views/components/combobox/_content.html.erb +17 -0
- data/app/views/components/combobox/_empty.html.erb +9 -0
- data/app/views/components/combobox/_group.html.erb +8 -0
- data/app/views/components/combobox/_input.html.erb +18 -0
- data/app/views/components/combobox/_label.html.erb +8 -0
- data/app/views/components/combobox/_list.html.erb +8 -0
- data/app/views/components/combobox/_option.html.erb +24 -0
- data/app/views/components/combobox/_separator.html.erb +6 -0
- data/app/views/components/combobox/_trigger.html.erb +22 -0
- data/app/views/components/dropdown_menu/_content.html.erb +20 -0
- data/app/views/components/dropdown_menu/_group.html.erb +12 -0
- data/app/views/components/dropdown_menu/_item.html.erb +29 -0
- data/app/views/components/dropdown_menu/_label.html.erb +13 -0
- data/app/views/components/dropdown_menu/_separator.html.erb +11 -0
- data/app/views/components/dropdown_menu/_shortcut.html.erb +12 -0
- data/app/views/components/dropdown_menu/_trigger.html.erb +24 -0
- data/app/views/components/empty/_content.html.erb +8 -0
- data/app/views/components/empty/_description.html.erb +12 -0
- data/app/views/components/empty/_header.html.erb +8 -0
- data/app/views/components/empty/_media.html.erb +13 -0
- data/app/views/components/empty/_title.html.erb +12 -0
- data/app/views/components/pagination/_content.html.erb +8 -0
- data/app/views/components/pagination/_ellipsis.html.erb +28 -0
- data/app/views/components/pagination/_item.html.erb +8 -0
- data/app/views/components/pagination/_link.html.erb +23 -0
- data/app/views/components/pagination/_next.html.erb +57 -0
- data/app/views/components/pagination/_previous.html.erb +57 -0
- data/app/views/components/sidebar/_content.html.erb +8 -0
- data/app/views/components/sidebar/_footer.html.erb +8 -0
- data/app/views/components/sidebar/_group.html.erb +12 -0
- data/app/views/components/sidebar/_header.html.erb +8 -0
- data/app/views/components/sidebar/_inset.html.erb +8 -0
- data/app/views/components/sidebar/_menu.html.erb +8 -0
- data/app/views/components/sidebar/_menu_button.html.erb +14 -0
- data/app/views/components/sidebar/_menu_item.html.erb +7 -0
- data/app/views/components/sidebar/_menu_link.html.erb +32 -0
- data/app/views/components/sidebar/_provider.html.erb +16 -0
- data/app/views/components/sidebar/_trigger.html.erb +12 -0
- data/app/views/components/stats/_stats_card.html.erb +100 -0
- data/app/views/components/stats/_stats_grid.html.erb +38 -0
- data/app/views/components/table/_body.html.erb +5 -0
- data/app/views/components/table/_caption.html.erb +5 -0
- data/app/views/components/table/_cell.html.erb +5 -0
- data/app/views/components/table/_footer.html.erb +5 -0
- data/app/views/components/table/_head.html.erb +8 -0
- data/app/views/components/table/_header.html.erb +8 -0
- data/app/views/components/table/_row.html.erb +8 -0
- data/app/views/components/toast/_action.html.erb +14 -0
- data/app/views/components/toast/_description.html.erb +8 -0
- data/app/views/components/toast/_title.html.erb +8 -0
- data/app/views/components/toggle_group/_item.html.erb +19 -0
- data/config/importmap.rb +1 -0
- data/lib/generators/maquina_components/install/USAGE +39 -0
- data/lib/generators/maquina_components/install/install_generator.rb +123 -0
- data/lib/generators/maquina_components/install/templates/maquina_components_helper.rb.tt +68 -0
- data/lib/generators/maquina_components/install/templates/theme.css.tt +179 -0
- data/lib/maquina_components/engine.rb +10 -0
- data/lib/maquina_components/version.rb +1 -1
- metadata +138 -12
- data/app/helpers/components/pagination_helper.rb +0 -15
- data/app/views/components/_card_content.html.erb +0 -5
- data/app/views/components/_card_header.html.erb +0 -8
- data/app/views/components/_sidebar_content.html.erb +0 -8
- data/app/views/components/_sidebar_group.html.erb +0 -42
- data/app/views/components/_sidebar_header.html.erb +0 -3
|
@@ -1,99 +1,178 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
1
|
+
/* Base animation utilities */
|
|
2
|
+
@utility animate-in {
|
|
3
|
+
animation-duration: var(--duration-normal);
|
|
4
|
+
animation-timing-function: var(--ease-out);
|
|
5
|
+
animation-fill-mode: forwards;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
@utility animate-out {
|
|
9
|
+
animation-duration: var(--duration-normal);
|
|
10
|
+
animation-timing-function: var(--ease-in);
|
|
11
|
+
animation-fill-mode: forwards;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/* Fade animations */
|
|
15
|
+
@keyframes fade-in-0 {
|
|
16
|
+
from {
|
|
17
|
+
opacity: 0;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
to {
|
|
21
|
+
opacity: 1;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@keyframes fade-out-0 {
|
|
26
|
+
from {
|
|
27
|
+
opacity: 1;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
to {
|
|
31
|
+
opacity: 0;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
@utility fade-in-0 {
|
|
36
|
+
animation-name: fade-in-0;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
@utility fade-out-0 {
|
|
40
|
+
animation-name: fade-out-0;
|
|
41
|
+
}
|
|
21
42
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
43
|
+
/* Zoom animations */
|
|
44
|
+
@keyframes zoom-in-95 {
|
|
45
|
+
from {
|
|
46
|
+
transform: scale(0.95);
|
|
47
|
+
opacity: 0;
|
|
26
48
|
}
|
|
27
49
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
opacity:
|
|
50
|
+
to {
|
|
51
|
+
transform: scale(1);
|
|
52
|
+
opacity: 1;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@keyframes zoom-out-95 {
|
|
57
|
+
from {
|
|
58
|
+
transform: scale(1);
|
|
59
|
+
opacity: 1;
|
|
31
60
|
}
|
|
32
61
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
/* size-4 */
|
|
37
|
-
height: 1rem;
|
|
38
|
-
/* size-4 */
|
|
39
|
-
flex-shrink: 0;
|
|
62
|
+
to {
|
|
63
|
+
transform: scale(0.95);
|
|
64
|
+
opacity: 0;
|
|
40
65
|
}
|
|
41
66
|
}
|
|
42
67
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
@apply flex flex-col w-full gap-6;
|
|
68
|
+
@utility zoom-in-95 {
|
|
69
|
+
animation-name: zoom-in-95;
|
|
46
70
|
}
|
|
47
71
|
|
|
48
|
-
|
|
49
|
-
|
|
72
|
+
@utility zoom-out-95 {
|
|
73
|
+
animation-name: zoom-out-95;
|
|
50
74
|
}
|
|
51
75
|
|
|
52
|
-
|
|
53
|
-
|
|
76
|
+
/* Slide animations with specific measurements */
|
|
77
|
+
@keyframes slide-in-from-top-2 {
|
|
78
|
+
from {
|
|
79
|
+
transform: translateY(-0.5rem);
|
|
80
|
+
opacity: 0;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
to {
|
|
84
|
+
transform: translateY(0);
|
|
85
|
+
opacity: 1;
|
|
86
|
+
}
|
|
54
87
|
}
|
|
55
88
|
|
|
56
|
-
|
|
57
|
-
|
|
89
|
+
@keyframes slide-in-from-bottom-2 {
|
|
90
|
+
from {
|
|
91
|
+
transform: translateY(0.5rem);
|
|
92
|
+
opacity: 0;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
to {
|
|
96
|
+
transform: translateY(0);
|
|
97
|
+
opacity: 1;
|
|
98
|
+
}
|
|
58
99
|
}
|
|
59
100
|
|
|
60
|
-
|
|
61
|
-
|
|
101
|
+
@keyframes slide-in-from-left-2 {
|
|
102
|
+
from {
|
|
103
|
+
transform: translateX(-0.5rem);
|
|
104
|
+
opacity: 0;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
to {
|
|
108
|
+
transform: translateX(0);
|
|
109
|
+
opacity: 1;
|
|
110
|
+
}
|
|
62
111
|
}
|
|
63
112
|
|
|
64
|
-
|
|
65
|
-
|
|
113
|
+
@keyframes slide-in-from-right-2 {
|
|
114
|
+
from {
|
|
115
|
+
transform: translateX(0.5rem);
|
|
116
|
+
opacity: 0;
|
|
117
|
+
}
|
|
66
118
|
|
|
67
|
-
|
|
68
|
-
|
|
119
|
+
to {
|
|
120
|
+
transform: translateX(0);
|
|
121
|
+
opacity: 1;
|
|
69
122
|
}
|
|
70
123
|
}
|
|
71
124
|
|
|
72
|
-
|
|
73
|
-
|
|
125
|
+
@utility slide-in-from-top-2 {
|
|
126
|
+
animation-name: slide-in-from-top-2;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
@utility slide-in-from-bottom-2 {
|
|
130
|
+
animation-name: slide-in-from-bottom-2;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
@utility slide-in-from-left-2 {
|
|
134
|
+
animation-name: slide-in-from-left-2;
|
|
74
135
|
}
|
|
75
136
|
|
|
76
|
-
|
|
77
|
-
|
|
137
|
+
@utility slide-in-from-right-2 {
|
|
138
|
+
animation-name: slide-in-from-right-2;
|
|
78
139
|
}
|
|
79
140
|
|
|
80
|
-
/*
|
|
81
|
-
|
|
82
|
-
|
|
141
|
+
/* Duration modifiers */
|
|
142
|
+
@utility duration-fast {
|
|
143
|
+
animation-duration: var(--duration-fast);
|
|
83
144
|
}
|
|
84
145
|
|
|
85
|
-
|
|
86
|
-
|
|
146
|
+
@utility duration-normal {
|
|
147
|
+
animation-duration: var(--duration-normal);
|
|
87
148
|
}
|
|
88
149
|
|
|
89
|
-
|
|
90
|
-
|
|
150
|
+
@utility duration-slow {
|
|
151
|
+
animation-duration: var(--duration-slow);
|
|
91
152
|
}
|
|
92
153
|
|
|
93
|
-
|
|
94
|
-
|
|
154
|
+
/* Sidebar */
|
|
155
|
+
|
|
156
|
+
.sidebar-primary-button {
|
|
157
|
+
@apply flex w-full items-center gap-2 overflow-hidden rounded-md p-2
|
|
158
|
+
text-left outline-hidden ring-sidebar-ring transition-[width,height,padding]
|
|
159
|
+
focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50
|
|
160
|
+
group-has-data-[sidebar=menu-action]/menu-item:pr-8
|
|
161
|
+
aria-disabled:pointer-events-none aria-disabled:opacity-50
|
|
162
|
+
group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2!
|
|
163
|
+
[&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 h-8 text-sm
|
|
164
|
+
bg-primary text-primary-foreground hover:bg-primary/90
|
|
165
|
+
hover:text-primary-foreground min-w-8 duration-200 ease-linear;
|
|
95
166
|
}
|
|
96
167
|
|
|
97
|
-
.button
|
|
98
|
-
@apply
|
|
168
|
+
.sidebar-outline-button {
|
|
169
|
+
@apply inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md
|
|
170
|
+
text-sm font-medium transition-all disabled:pointer-events-none
|
|
171
|
+
disabled:opacity-50 [&_svg]:pointer-events-none
|
|
172
|
+
[&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none
|
|
173
|
+
focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]
|
|
174
|
+
aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40
|
|
175
|
+
aria-invalid:border-destructive border bg-background shadow-xs hover:bg-accent
|
|
176
|
+
hover:text-accent-foreground dark:bg-input/30 dark:border-input
|
|
177
|
+
dark:hover:bg-input/50 size-8 group-data-[collapsible=icon]:opacity-0;
|
|
99
178
|
}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/* ===== Pagination Component Styles ===== */
|
|
2
|
+
/*
|
|
3
|
+
* Navigation for paginated content following shadcn/ui patterns.
|
|
4
|
+
* Uses data attributes for styling to avoid inline utility classes.
|
|
5
|
+
* Fully compatible with dark mode via CSS variables.
|
|
6
|
+
*
|
|
7
|
+
* Structure:
|
|
8
|
+
* - pagination (nav root)
|
|
9
|
+
* - content (ul list)
|
|
10
|
+
* - item (li wrapper)
|
|
11
|
+
* - link / previous / next / ellipsis
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/* ===== Root Container ===== */
|
|
15
|
+
[data-component="pagination"] {
|
|
16
|
+
display: flex;
|
|
17
|
+
justify-content: center;
|
|
18
|
+
width: 100%;
|
|
19
|
+
@apply mx-auto;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/* ===== Content List ===== */
|
|
23
|
+
[data-pagination-part="content"] {
|
|
24
|
+
display: flex;
|
|
25
|
+
flex-direction: row;
|
|
26
|
+
align-items: center;
|
|
27
|
+
@apply gap-1;
|
|
28
|
+
list-style: none;
|
|
29
|
+
margin: 0;
|
|
30
|
+
padding: 0;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/* ===== Item Wrapper ===== */
|
|
34
|
+
[data-pagination-part="item"] {
|
|
35
|
+
/* No specific styles needed, just a wrapper */
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/* ===== Shared Button/Link Base Styles ===== */
|
|
39
|
+
[data-pagination-part="link"],
|
|
40
|
+
[data-pagination-part="previous"],
|
|
41
|
+
[data-pagination-part="next"] {
|
|
42
|
+
display: inline-flex;
|
|
43
|
+
align-items: center;
|
|
44
|
+
justify-content: center;
|
|
45
|
+
white-space: nowrap;
|
|
46
|
+
@apply rounded-md text-sm font-medium;
|
|
47
|
+
@apply transition-colors duration-150;
|
|
48
|
+
|
|
49
|
+
/* Size */
|
|
50
|
+
@apply h-9 min-w-9 px-3;
|
|
51
|
+
|
|
52
|
+
/* Colors - ghost style */
|
|
53
|
+
background-color: transparent;
|
|
54
|
+
color: var(--foreground);
|
|
55
|
+
|
|
56
|
+
/* Remove default link/button styles */
|
|
57
|
+
text-decoration: none;
|
|
58
|
+
border: none;
|
|
59
|
+
cursor: pointer;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/* ===== Page Number Links ===== */
|
|
63
|
+
[data-pagination-part="link"]:hover:not([aria-disabled="true"]) {
|
|
64
|
+
background-color: var(--accent);
|
|
65
|
+
color: var(--accent-foreground);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
[data-pagination-part="link"][data-active="true"] {
|
|
69
|
+
border: 1px solid var(--border);
|
|
70
|
+
background-color: var(--background);
|
|
71
|
+
color: var(--foreground);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
[data-pagination-part="link"][data-active="true"]:hover {
|
|
75
|
+
background-color: var(--accent);
|
|
76
|
+
color: var(--accent-foreground);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/* ===== Previous/Next Navigation ===== */
|
|
80
|
+
[data-pagination-part="previous"],
|
|
81
|
+
[data-pagination-part="next"] {
|
|
82
|
+
@apply gap-1 px-2.5;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
[data-pagination-part="previous"]:hover:not([aria-disabled="true"]),
|
|
86
|
+
[data-pagination-part="next"]:hover:not([aria-disabled="true"]) {
|
|
87
|
+
background-color: var(--accent);
|
|
88
|
+
color: var(--accent-foreground);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/* Hide labels on small screens */
|
|
92
|
+
@media (max-width: 640px) {
|
|
93
|
+
[data-pagination-part="previous"] span,
|
|
94
|
+
[data-pagination-part="next"] span {
|
|
95
|
+
@apply sr-only;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
[data-pagination-part="previous"],
|
|
99
|
+
[data-pagination-part="next"] {
|
|
100
|
+
@apply px-2;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/* ===== Ellipsis ===== */
|
|
105
|
+
[data-pagination-part="ellipsis"] {
|
|
106
|
+
display: flex;
|
|
107
|
+
align-items: center;
|
|
108
|
+
justify-content: center;
|
|
109
|
+
@apply h-9 w-9;
|
|
110
|
+
color: var(--muted-foreground);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/* ===== Disabled State ===== */
|
|
114
|
+
[data-pagination-part="link"][aria-disabled="true"],
|
|
115
|
+
[data-pagination-part="previous"][aria-disabled="true"],
|
|
116
|
+
[data-pagination-part="next"][aria-disabled="true"] {
|
|
117
|
+
@apply opacity-50 pointer-events-none cursor-not-allowed;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/* ===== Focus Visible ===== */
|
|
121
|
+
[data-pagination-part="link"]:focus-visible,
|
|
122
|
+
[data-pagination-part="previous"]:focus-visible,
|
|
123
|
+
[data-pagination-part="next"]:focus-visible {
|
|
124
|
+
@apply outline-none;
|
|
125
|
+
box-shadow: 0 0 0 2px var(--background),
|
|
126
|
+
0 0 0 4px var(--ring);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/* ===== Icon Sizing ===== */
|
|
130
|
+
[data-pagination-part="previous"] svg,
|
|
131
|
+
[data-pagination-part="next"] svg,
|
|
132
|
+
[data-pagination-part="ellipsis"] svg {
|
|
133
|
+
@apply size-4 shrink-0;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/* ===== Screen Reader Only ===== */
|
|
137
|
+
.sr-only {
|
|
138
|
+
position: absolute;
|
|
139
|
+
width: 1px;
|
|
140
|
+
height: 1px;
|
|
141
|
+
padding: 0;
|
|
142
|
+
margin: -1px;
|
|
143
|
+
overflow: hidden;
|
|
144
|
+
clip: rect(0, 0, 0, 0);
|
|
145
|
+
white-space: nowrap;
|
|
146
|
+
border-width: 0;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/* ===== Dark Mode ===== */
|
|
150
|
+
/*
|
|
151
|
+
* Dark mode is handled automatically through CSS variables.
|
|
152
|
+
* The theme variables change based on the .dark class on html/body.
|
|
153
|
+
* No additional dark mode styles needed here.
|
|
154
|
+
*/
|