zenkit-css 1.2.0 → 1.2.2

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.
@@ -0,0 +1,370 @@
1
+ // ========================================
2
+ // ZenKit - Menubar Component
3
+ // ========================================
4
+
5
+ @use '../abstracts/variables' as *;
6
+
7
+ // ----------------------------------------
8
+ // Menubar Container
9
+ // ----------------------------------------
10
+ .menubar {
11
+ display: flex;
12
+ align-items: center;
13
+ gap: 0.25rem;
14
+ padding: 0.25rem;
15
+ background-color: var(--bg);
16
+ border: 1px solid var(--border);
17
+ border-radius: $border-radius;
18
+ }
19
+
20
+ // ----------------------------------------
21
+ // Menubar Item (Top Level)
22
+ // ----------------------------------------
23
+ .menubar-item {
24
+ position: relative;
25
+ }
26
+
27
+ .menubar-trigger {
28
+ display: inline-flex;
29
+ align-items: center;
30
+ gap: 0.25rem;
31
+ padding: 0.375rem 0.75rem;
32
+ font-size: var(--text-sm);
33
+ font-weight: $font-weight-medium;
34
+ color: var(--text);
35
+ background-color: transparent;
36
+ border: none;
37
+ border-radius: $border-radius-sm;
38
+ cursor: pointer;
39
+ transition: all $transition-fast $transition-timing;
40
+ white-space: nowrap;
41
+
42
+ &:hover {
43
+ background-color: var(--gray-100);
44
+ }
45
+
46
+ &:focus {
47
+ outline: none;
48
+ background-color: var(--gray-100);
49
+ }
50
+
51
+ &[aria-expanded="true"] {
52
+ background-color: var(--gray-100);
53
+ }
54
+ }
55
+
56
+ .menubar-trigger-icon {
57
+ width: 1rem;
58
+ height: 1rem;
59
+ color: var(--text-muted);
60
+ }
61
+
62
+ // ----------------------------------------
63
+ // Menubar Dropdown
64
+ // ----------------------------------------
65
+ .menubar-content {
66
+ position: absolute;
67
+ top: calc(100% + 4px);
68
+ left: 0;
69
+ min-width: 200px;
70
+ padding: 0.375rem;
71
+ background-color: var(--bg);
72
+ border: 1px solid var(--border);
73
+ border-radius: $border-radius;
74
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
75
+ z-index: 1000;
76
+ opacity: 0;
77
+ visibility: hidden;
78
+ transform: translateY(-4px);
79
+ transition: opacity $transition-fast $transition-timing,
80
+ visibility $transition-fast $transition-timing,
81
+ transform $transition-fast $transition-timing;
82
+ }
83
+
84
+ .menubar-item:hover .menubar-content,
85
+ .menubar-item:focus-within .menubar-content,
86
+ .menubar-content.open {
87
+ opacity: 1;
88
+ visibility: visible;
89
+ transform: translateY(0);
90
+ }
91
+
92
+ // ----------------------------------------
93
+ // Menu Items
94
+ // ----------------------------------------
95
+ .menubar-menu-item {
96
+ display: flex;
97
+ align-items: center;
98
+ gap: 0.5rem;
99
+ padding: 0.5rem 0.75rem;
100
+ font-size: var(--text-sm);
101
+ color: var(--text);
102
+ background: transparent;
103
+ border: none;
104
+ border-radius: $border-radius-sm;
105
+ cursor: pointer;
106
+ transition: background-color $transition-fast $transition-timing;
107
+ width: 100%;
108
+ text-align: left;
109
+
110
+ &:hover {
111
+ background-color: var(--gray-100);
112
+ }
113
+
114
+ &:focus {
115
+ outline: none;
116
+ background-color: var(--gray-100);
117
+ }
118
+
119
+ &:disabled {
120
+ opacity: 0.5;
121
+ cursor: not-allowed;
122
+ }
123
+ }
124
+
125
+ .menubar-menu-icon {
126
+ width: 1rem;
127
+ height: 1rem;
128
+ color: var(--text-muted);
129
+ flex-shrink: 0;
130
+ }
131
+
132
+ .menubar-menu-label {
133
+ flex: 1;
134
+ }
135
+
136
+ .menubar-menu-shortcut {
137
+ font-size: var(--text-xs);
138
+ color: var(--text-muted);
139
+ margin-left: auto;
140
+ }
141
+
142
+ // ----------------------------------------
143
+ // Submenu
144
+ // ----------------------------------------
145
+ .menubar-submenu {
146
+ position: relative;
147
+ }
148
+
149
+ .menubar-submenu-trigger {
150
+ display: flex;
151
+ align-items: center;
152
+ width: 100%;
153
+
154
+ &::after {
155
+ content: "";
156
+ margin-left: auto;
157
+ border: solid var(--text-muted);
158
+ border-width: 0 1.5px 1.5px 0;
159
+ padding: 2.5px;
160
+ transform: rotate(-45deg);
161
+ }
162
+ }
163
+
164
+ .menubar-submenu-content {
165
+ position: absolute;
166
+ left: calc(100% + 4px);
167
+ top: -0.375rem;
168
+ min-width: 180px;
169
+ padding: 0.375rem;
170
+ background-color: var(--bg);
171
+ border: 1px solid var(--border);
172
+ border-radius: $border-radius;
173
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
174
+ opacity: 0;
175
+ visibility: hidden;
176
+ transform: translateX(-4px);
177
+ transition: opacity $transition-fast $transition-timing,
178
+ visibility $transition-fast $transition-timing,
179
+ transform $transition-fast $transition-timing;
180
+ }
181
+
182
+ .menubar-submenu:hover .menubar-submenu-content,
183
+ .menubar-submenu:focus-within .menubar-submenu-content {
184
+ opacity: 1;
185
+ visibility: visible;
186
+ transform: translateX(0);
187
+ }
188
+
189
+ // ----------------------------------------
190
+ // Separator
191
+ // ----------------------------------------
192
+ .menubar-separator {
193
+ height: 1px;
194
+ background-color: var(--border);
195
+ margin: 0.375rem 0;
196
+ }
197
+
198
+ // ----------------------------------------
199
+ // Group Label
200
+ // ----------------------------------------
201
+ .menubar-group-label {
202
+ padding: 0.375rem 0.75rem;
203
+ font-size: var(--text-xs);
204
+ font-weight: $font-weight-medium;
205
+ color: var(--text-muted);
206
+ text-transform: uppercase;
207
+ letter-spacing: 0.05em;
208
+ }
209
+
210
+ // ----------------------------------------
211
+ // Checkbox Item
212
+ // ----------------------------------------
213
+ .menubar-checkbox {
214
+ position: relative;
215
+ padding-left: 1.75rem;
216
+
217
+ &::before {
218
+ content: "";
219
+ position: absolute;
220
+ left: 0.5rem;
221
+ top: 50%;
222
+ transform: translateY(-50%);
223
+ width: 1rem;
224
+ height: 1rem;
225
+ border: 1.5px solid var(--border);
226
+ border-radius: 3px;
227
+ transition: all $transition-fast $transition-timing;
228
+ }
229
+
230
+ &[data-checked="true"]::before {
231
+ background-color: var(--primary);
232
+ border-color: var(--primary);
233
+ }
234
+
235
+ &[data-checked="true"]::after {
236
+ content: "";
237
+ position: absolute;
238
+ left: 0.75rem;
239
+ top: 50%;
240
+ transform: translateY(-60%) rotate(45deg);
241
+ width: 4px;
242
+ height: 8px;
243
+ border: solid var(--white);
244
+ border-width: 0 2px 2px 0;
245
+ }
246
+ }
247
+
248
+ // ----------------------------------------
249
+ // Radio Item
250
+ // ----------------------------------------
251
+ .menubar-radio {
252
+ position: relative;
253
+ padding-left: 1.75rem;
254
+
255
+ &::before {
256
+ content: "";
257
+ position: absolute;
258
+ left: 0.5rem;
259
+ top: 50%;
260
+ transform: translateY(-50%);
261
+ width: 1rem;
262
+ height: 1rem;
263
+ border: 1.5px solid var(--border);
264
+ border-radius: 50%;
265
+ transition: all $transition-fast $transition-timing;
266
+ }
267
+
268
+ &[data-checked="true"]::before {
269
+ border-color: var(--primary);
270
+ }
271
+
272
+ &[data-checked="true"]::after {
273
+ content: "";
274
+ position: absolute;
275
+ left: 0.75rem;
276
+ top: 50%;
277
+ transform: translateY(-50%);
278
+ width: 6px;
279
+ height: 6px;
280
+ background-color: var(--primary);
281
+ border-radius: 50%;
282
+ }
283
+ }
284
+
285
+ // ----------------------------------------
286
+ // Menubar Sizes
287
+ // ----------------------------------------
288
+ .menubar-sm {
289
+ padding: 0.125rem;
290
+
291
+ .menubar-trigger {
292
+ padding: 0.25rem 0.5rem;
293
+ font-size: var(--text-xs);
294
+ }
295
+
296
+ .menubar-menu-item {
297
+ padding: 0.375rem 0.5rem;
298
+ font-size: var(--text-xs);
299
+ }
300
+ }
301
+
302
+ .menubar-lg {
303
+ padding: 0.375rem;
304
+
305
+ .menubar-trigger {
306
+ padding: 0.5rem 1rem;
307
+ font-size: var(--text-base);
308
+ }
309
+
310
+ .menubar-menu-item {
311
+ padding: 0.625rem 1rem;
312
+ font-size: var(--text-base);
313
+ }
314
+ }
315
+
316
+ // ----------------------------------------
317
+ // Menubar Variants
318
+ // ----------------------------------------
319
+
320
+ // Borderless
321
+ .menubar-borderless {
322
+ border: none;
323
+ background: transparent;
324
+ padding: 0;
325
+ }
326
+
327
+ // Filled
328
+ .menubar-filled {
329
+ background-color: var(--gray-50);
330
+ }
331
+
332
+ // ----------------------------------------
333
+ // Dark Mode
334
+ // ----------------------------------------
335
+ [data-theme="dark"] {
336
+ .menubar {
337
+ background-color: var(--gray-900);
338
+ border-color: var(--gray-700);
339
+ }
340
+
341
+ .menubar-trigger:hover,
342
+ .menubar-trigger:focus,
343
+ .menubar-trigger[aria-expanded="true"] {
344
+ background-color: var(--gray-800);
345
+ }
346
+
347
+ .menubar-content {
348
+ background-color: var(--gray-900);
349
+ border-color: var(--gray-700);
350
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3);
351
+ }
352
+
353
+ .menubar-menu-item:hover,
354
+ .menubar-menu-item:focus {
355
+ background-color: var(--gray-800);
356
+ }
357
+
358
+ .menubar-submenu-content {
359
+ background-color: var(--gray-900);
360
+ border-color: var(--gray-700);
361
+ }
362
+
363
+ .menubar-separator {
364
+ background-color: var(--gray-700);
365
+ }
366
+
367
+ .menubar-filled {
368
+ background-color: var(--gray-800);
369
+ }
370
+ }