zenkit-css 1.0.7 → 1.2.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.
@@ -0,0 +1,402 @@
1
+ // ========================================
2
+ // ZenKit - Command Palette Component
3
+ // ========================================
4
+
5
+ @use '../abstracts/variables' as *;
6
+
7
+ // ----------------------------------------
8
+ // Command Palette Overlay
9
+ // ----------------------------------------
10
+ .cmd-palette-overlay {
11
+ position: fixed;
12
+ inset: 0;
13
+ background-color: rgba(0, 0, 0, 0.5);
14
+ backdrop-filter: blur(4px);
15
+ -webkit-backdrop-filter: blur(4px);
16
+ z-index: 9999;
17
+ display: flex;
18
+ align-items: flex-start;
19
+ justify-content: center;
20
+ padding-top: 15vh;
21
+ opacity: 0;
22
+ visibility: hidden;
23
+ transition: opacity $transition-fast $transition-timing,
24
+ visibility $transition-fast $transition-timing;
25
+ }
26
+
27
+ .cmd-palette-overlay.open {
28
+ opacity: 1;
29
+ visibility: visible;
30
+ }
31
+
32
+ // ----------------------------------------
33
+ // Command Palette Container
34
+ // ----------------------------------------
35
+ .cmd-palette {
36
+ width: 100%;
37
+ max-width: 640px;
38
+ max-height: 70vh;
39
+ background-color: var(--bg);
40
+ border-radius: $border-radius-lg;
41
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
42
+ overflow: hidden;
43
+ display: flex;
44
+ flex-direction: column;
45
+ transform: scale(0.95) translateY(-10px);
46
+ opacity: 0;
47
+ transition: transform $transition-fast $transition-timing,
48
+ opacity $transition-fast $transition-timing;
49
+ }
50
+
51
+ .cmd-palette-overlay.open .cmd-palette {
52
+ transform: scale(1) translateY(0);
53
+ opacity: 1;
54
+ }
55
+
56
+ // ----------------------------------------
57
+ // Command Palette Header
58
+ // ----------------------------------------
59
+ .cmd-palette-header {
60
+ display: flex;
61
+ align-items: center;
62
+ padding: 0.75rem 1rem;
63
+ border-bottom: 1px solid var(--border);
64
+ gap: 0.75rem;
65
+ }
66
+
67
+ .cmd-palette-icon {
68
+ flex-shrink: 0;
69
+ width: 1.25rem;
70
+ height: 1.25rem;
71
+ color: var(--text-muted);
72
+ }
73
+
74
+ .cmd-palette-input {
75
+ flex: 1;
76
+ border: none;
77
+ background: transparent;
78
+ font-size: 1rem;
79
+ color: var(--text);
80
+ outline: none;
81
+
82
+ &::placeholder {
83
+ color: var(--text-muted);
84
+ }
85
+ }
86
+
87
+ .cmd-palette-shortcut {
88
+ display: flex;
89
+ align-items: center;
90
+ gap: 0.25rem;
91
+ }
92
+
93
+ .cmd-palette-kbd {
94
+ display: inline-flex;
95
+ align-items: center;
96
+ justify-content: center;
97
+ min-width: 1.5rem;
98
+ padding: 0.125rem 0.375rem;
99
+ font-size: var(--text-xs);
100
+ font-family: var(--font-mono);
101
+ color: var(--text-muted);
102
+ background-color: var(--gray-100);
103
+ border: 1px solid var(--gray-300);
104
+ border-radius: $border-radius-sm;
105
+ }
106
+
107
+ // ----------------------------------------
108
+ // Command Palette Body
109
+ // ----------------------------------------
110
+ .cmd-palette-body {
111
+ flex: 1;
112
+ overflow-y: auto;
113
+ padding: 0.5rem;
114
+ }
115
+
116
+ // ----------------------------------------
117
+ // Command Groups
118
+ // ----------------------------------------
119
+ .cmd-group {
120
+ margin-bottom: 0.5rem;
121
+ }
122
+
123
+ .cmd-group-title {
124
+ padding: 0.5rem 0.75rem;
125
+ font-size: var(--text-xs);
126
+ font-weight: $font-weight-medium;
127
+ color: var(--text-muted);
128
+ text-transform: uppercase;
129
+ letter-spacing: 0.05em;
130
+ }
131
+
132
+ // ----------------------------------------
133
+ // Command Items
134
+ // ----------------------------------------
135
+ .cmd-item {
136
+ display: flex;
137
+ align-items: center;
138
+ padding: 0.625rem 0.75rem;
139
+ border-radius: $border-radius;
140
+ cursor: pointer;
141
+ transition: background-color $transition-fast $transition-timing;
142
+ gap: 0.75rem;
143
+
144
+ &:hover,
145
+ &.highlighted {
146
+ background-color: var(--gray-100);
147
+ }
148
+
149
+ &.selected {
150
+ background-color: var(--primary-50);
151
+ }
152
+ }
153
+
154
+ .cmd-item-icon {
155
+ flex-shrink: 0;
156
+ width: 1.25rem;
157
+ height: 1.25rem;
158
+ color: var(--text-muted);
159
+ }
160
+
161
+ .cmd-item-content {
162
+ flex: 1;
163
+ min-width: 0;
164
+ }
165
+
166
+ .cmd-item-title {
167
+ font-size: var(--text-sm);
168
+ font-weight: $font-weight-medium;
169
+ color: var(--text);
170
+ white-space: nowrap;
171
+ overflow: hidden;
172
+ text-overflow: ellipsis;
173
+ }
174
+
175
+ .cmd-item-description {
176
+ font-size: var(--text-xs);
177
+ color: var(--text-muted);
178
+ white-space: nowrap;
179
+ overflow: hidden;
180
+ text-overflow: ellipsis;
181
+ }
182
+
183
+ .cmd-item-shortcut {
184
+ flex-shrink: 0;
185
+ display: flex;
186
+ gap: 0.25rem;
187
+ }
188
+
189
+ .cmd-item-badge {
190
+ flex-shrink: 0;
191
+ padding: 0.125rem 0.5rem;
192
+ font-size: var(--text-xs);
193
+ background-color: var(--gray-100);
194
+ border-radius: 999px;
195
+ color: var(--text-muted);
196
+ }
197
+
198
+ // ----------------------------------------
199
+ // Search Highlight
200
+ // ----------------------------------------
201
+ .cmd-highlight {
202
+ background-color: var(--warning-100);
203
+ color: var(--warning-700);
204
+ border-radius: 2px;
205
+ padding: 0 2px;
206
+ }
207
+
208
+ // ----------------------------------------
209
+ // Empty State
210
+ // ----------------------------------------
211
+ .cmd-empty {
212
+ padding: 2rem 1rem;
213
+ text-align: center;
214
+ color: var(--text-muted);
215
+ }
216
+
217
+ .cmd-empty-icon {
218
+ width: 3rem;
219
+ height: 3rem;
220
+ margin: 0 auto 0.75rem;
221
+ opacity: 0.5;
222
+ }
223
+
224
+ .cmd-empty-title {
225
+ font-weight: $font-weight-medium;
226
+ margin-bottom: 0.25rem;
227
+ }
228
+
229
+ .cmd-empty-text {
230
+ font-size: var(--text-sm);
231
+ }
232
+
233
+ // ----------------------------------------
234
+ // Loading State
235
+ // ----------------------------------------
236
+ .cmd-loading {
237
+ display: flex;
238
+ align-items: center;
239
+ justify-content: center;
240
+ padding: 2rem;
241
+ gap: 0.5rem;
242
+ color: var(--text-muted);
243
+ }
244
+
245
+ .cmd-loading-spinner {
246
+ width: 1rem;
247
+ height: 1rem;
248
+ border: 2px solid var(--gray-300);
249
+ border-top-color: var(--primary);
250
+ border-radius: 50%;
251
+ animation: spin 0.6s linear infinite;
252
+ }
253
+
254
+ // ----------------------------------------
255
+ // Command Palette Footer
256
+ // ----------------------------------------
257
+ .cmd-palette-footer {
258
+ display: flex;
259
+ align-items: center;
260
+ justify-content: space-between;
261
+ padding: 0.5rem 1rem;
262
+ border-top: 1px solid var(--border);
263
+ background-color: var(--gray-50);
264
+ font-size: var(--text-xs);
265
+ color: var(--text-muted);
266
+ }
267
+
268
+ .cmd-footer-actions {
269
+ display: flex;
270
+ gap: 1rem;
271
+ }
272
+
273
+ .cmd-footer-action {
274
+ display: flex;
275
+ align-items: center;
276
+ gap: 0.375rem;
277
+ }
278
+
279
+ // ----------------------------------------
280
+ // Nested Commands (Submenus)
281
+ // ----------------------------------------
282
+ .cmd-breadcrumb {
283
+ display: flex;
284
+ align-items: center;
285
+ padding: 0.5rem 0.75rem;
286
+ gap: 0.25rem;
287
+ font-size: var(--text-sm);
288
+ color: var(--text-muted);
289
+ }
290
+
291
+ .cmd-breadcrumb-item {
292
+ display: flex;
293
+ align-items: center;
294
+ gap: 0.25rem;
295
+ cursor: pointer;
296
+
297
+ &:hover {
298
+ color: var(--primary);
299
+ }
300
+ }
301
+
302
+ .cmd-breadcrumb-separator {
303
+ color: var(--gray-400);
304
+ }
305
+
306
+ .cmd-back {
307
+ display: flex;
308
+ align-items: center;
309
+ padding: 0.5rem 0.75rem;
310
+ gap: 0.5rem;
311
+ font-size: var(--text-sm);
312
+ color: var(--text-muted);
313
+ cursor: pointer;
314
+ border-bottom: 1px solid var(--border);
315
+
316
+ &:hover {
317
+ background-color: var(--gray-50);
318
+ color: var(--text);
319
+ }
320
+ }
321
+
322
+ // ----------------------------------------
323
+ // Recent Items
324
+ // ----------------------------------------
325
+ .cmd-recent {
326
+ display: flex;
327
+ align-items: center;
328
+ gap: 0.375rem;
329
+ }
330
+
331
+ .cmd-recent-indicator {
332
+ width: 0.375rem;
333
+ height: 0.375rem;
334
+ background-color: var(--primary);
335
+ border-radius: 50%;
336
+ }
337
+
338
+ // ----------------------------------------
339
+ // Sizes
340
+ // ----------------------------------------
341
+ .cmd-palette-sm {
342
+ max-width: 480px;
343
+ }
344
+
345
+ .cmd-palette-lg {
346
+ max-width: 800px;
347
+ }
348
+
349
+ // ----------------------------------------
350
+ // Dark Mode
351
+ // ----------------------------------------
352
+ [data-theme="dark"] {
353
+ .cmd-palette-overlay {
354
+ background-color: rgba(0, 0, 0, 0.7);
355
+ }
356
+
357
+ .cmd-palette {
358
+ background-color: var(--gray-900);
359
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);
360
+ }
361
+
362
+ .cmd-palette-header {
363
+ border-color: var(--gray-700);
364
+ }
365
+
366
+ .cmd-palette-kbd {
367
+ background-color: var(--gray-800);
368
+ border-color: var(--gray-600);
369
+ color: var(--gray-400);
370
+ }
371
+
372
+ .cmd-item:hover,
373
+ .cmd-item.highlighted {
374
+ background-color: var(--gray-800);
375
+ }
376
+
377
+ .cmd-item.selected {
378
+ background-color: rgba($primary, 0.2);
379
+ }
380
+
381
+ .cmd-item-badge {
382
+ background-color: var(--gray-800);
383
+ }
384
+
385
+ .cmd-highlight {
386
+ background-color: rgba($warning, 0.2);
387
+ color: var(--warning-300);
388
+ }
389
+
390
+ .cmd-palette-footer {
391
+ background-color: var(--gray-800);
392
+ border-color: var(--gray-700);
393
+ }
394
+
395
+ .cmd-back {
396
+ border-color: var(--gray-700);
397
+
398
+ &:hover {
399
+ background-color: var(--gray-800);
400
+ }
401
+ }
402
+ }