zenkit-css 1.0.8 → 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,404 @@
1
+ // ========================================
2
+ // ZenKit - Code Component
3
+ // ========================================
4
+
5
+ @use '../abstracts/variables' as *;
6
+
7
+ // ----------------------------------------
8
+ // Inline Code
9
+ // ----------------------------------------
10
+ .code {
11
+ display: inline;
12
+ padding: 0.125rem 0.375rem;
13
+ font-family: var(--font-mono);
14
+ font-size: 0.875em;
15
+ font-weight: $font-weight-medium;
16
+ color: var(--danger-600);
17
+ background-color: var(--gray-100);
18
+ border-radius: $border-radius-sm;
19
+ word-wrap: break-word;
20
+ }
21
+
22
+ // ----------------------------------------
23
+ // Code Colors
24
+ // ----------------------------------------
25
+ .code-primary {
26
+ color: var(--primary-700);
27
+ background-color: var(--primary-50);
28
+ }
29
+
30
+ .code-secondary {
31
+ color: var(--gray-700);
32
+ background-color: var(--gray-100);
33
+ }
34
+
35
+ .code-success {
36
+ color: var(--success-700);
37
+ background-color: var(--success-50);
38
+ }
39
+
40
+ .code-danger {
41
+ color: var(--danger-700);
42
+ background-color: var(--danger-50);
43
+ }
44
+
45
+ .code-warning {
46
+ color: var(--warning-700);
47
+ background-color: var(--warning-50);
48
+ }
49
+
50
+ .code-info {
51
+ color: var(--info-700);
52
+ background-color: var(--info-50);
53
+ }
54
+
55
+ // ----------------------------------------
56
+ // Code Block
57
+ // ----------------------------------------
58
+ .code-block {
59
+ display: block;
60
+ padding: 1rem;
61
+ font-family: var(--font-mono);
62
+ font-size: var(--text-sm);
63
+ line-height: 1.6;
64
+ color: var(--gray-100);
65
+ background-color: var(--gray-900);
66
+ border-radius: $border-radius-lg;
67
+ overflow-x: auto;
68
+ white-space: pre;
69
+ tab-size: 2;
70
+
71
+ code {
72
+ display: block;
73
+ padding: 0;
74
+ font-size: inherit;
75
+ color: inherit;
76
+ background: transparent;
77
+ border-radius: 0;
78
+ }
79
+ }
80
+
81
+ // ----------------------------------------
82
+ // Code Block with Header
83
+ // ----------------------------------------
84
+ .code-wrapper {
85
+ border-radius: $border-radius-lg;
86
+ overflow: hidden;
87
+ border: 1px solid var(--gray-800);
88
+ }
89
+
90
+ .code-header {
91
+ display: flex;
92
+ align-items: center;
93
+ justify-content: space-between;
94
+ padding: 0.5rem 1rem;
95
+ background-color: var(--gray-800);
96
+ border-bottom: 1px solid var(--gray-700);
97
+ }
98
+
99
+ .code-filename {
100
+ display: flex;
101
+ align-items: center;
102
+ gap: 0.5rem;
103
+ font-size: var(--text-xs);
104
+ font-family: var(--font-mono);
105
+ color: var(--gray-400);
106
+
107
+ svg {
108
+ width: 1rem;
109
+ height: 1rem;
110
+ }
111
+ }
112
+
113
+ .code-language {
114
+ font-size: var(--text-xs);
115
+ font-weight: $font-weight-medium;
116
+ color: var(--gray-500);
117
+ text-transform: uppercase;
118
+ letter-spacing: 0.05em;
119
+ }
120
+
121
+ .code-wrapper .code-block {
122
+ border-radius: 0;
123
+ border: none;
124
+ }
125
+
126
+ // ----------------------------------------
127
+ // Code Copy Button
128
+ // ----------------------------------------
129
+ .code-copy {
130
+ display: inline-flex;
131
+ align-items: center;
132
+ justify-content: center;
133
+ gap: 0.375rem;
134
+ padding: 0.375rem 0.625rem;
135
+ font-size: var(--text-xs);
136
+ font-weight: $font-weight-medium;
137
+ color: var(--gray-400);
138
+ background-color: var(--gray-700);
139
+ border: none;
140
+ border-radius: $border-radius;
141
+ cursor: pointer;
142
+ transition: all $transition-fast $transition-timing;
143
+
144
+ &:hover {
145
+ color: var(--gray-200);
146
+ background-color: var(--gray-600);
147
+ }
148
+
149
+ svg {
150
+ width: 0.875rem;
151
+ height: 0.875rem;
152
+ }
153
+ }
154
+
155
+ .code-copy-success {
156
+ color: var(--success) !important;
157
+ }
158
+
159
+ // Floating copy button
160
+ .code-block-copy {
161
+ position: relative;
162
+
163
+ .code-copy {
164
+ position: absolute;
165
+ top: 0.5rem;
166
+ right: 0.5rem;
167
+ opacity: 0;
168
+ transition: opacity $transition-fast $transition-timing;
169
+ }
170
+
171
+ &:hover .code-copy {
172
+ opacity: 1;
173
+ }
174
+ }
175
+
176
+ // ----------------------------------------
177
+ // Code with Line Numbers
178
+ // ----------------------------------------
179
+ .code-line-numbers {
180
+ display: flex;
181
+ }
182
+
183
+ .code-lines {
184
+ flex-shrink: 0;
185
+ padding: 1rem 0;
186
+ text-align: right;
187
+ user-select: none;
188
+ border-right: 1px solid var(--gray-700);
189
+ color: var(--gray-600);
190
+ font-size: var(--text-sm);
191
+
192
+ span {
193
+ display: block;
194
+ padding: 0 0.75rem;
195
+ line-height: 1.6;
196
+ }
197
+ }
198
+
199
+ .code-line-numbers .code-content {
200
+ flex: 1;
201
+ padding: 1rem;
202
+ overflow-x: auto;
203
+
204
+ code {
205
+ display: block;
206
+ line-height: 1.6;
207
+ }
208
+ }
209
+
210
+ // ----------------------------------------
211
+ // Code Highlight Line
212
+ // ----------------------------------------
213
+ .code-highlight-line {
214
+ display: block;
215
+ background-color: rgba($primary, 0.15);
216
+ margin: 0 -1rem;
217
+ padding: 0 1rem;
218
+ border-left: 3px solid var(--primary);
219
+ }
220
+
221
+ // ----------------------------------------
222
+ // Code Diff
223
+ // ----------------------------------------
224
+ .code-diff-add {
225
+ background-color: rgba($success, 0.15);
226
+
227
+ &::before {
228
+ content: "+";
229
+ color: var(--success);
230
+ margin-right: 0.5rem;
231
+ }
232
+ }
233
+
234
+ .code-diff-remove {
235
+ background-color: rgba($danger, 0.15);
236
+
237
+ &::before {
238
+ content: "-";
239
+ color: var(--danger);
240
+ margin-right: 0.5rem;
241
+ }
242
+ }
243
+
244
+ // ----------------------------------------
245
+ // Code Snippet (Compact)
246
+ // ----------------------------------------
247
+ .code-snippet {
248
+ display: inline-flex;
249
+ align-items: center;
250
+ gap: 0.5rem;
251
+ padding: 0.5rem 0.75rem;
252
+ font-family: var(--font-mono);
253
+ font-size: var(--text-sm);
254
+ color: var(--gray-100);
255
+ background-color: var(--gray-900);
256
+ border-radius: $border-radius;
257
+ max-width: 100%;
258
+ }
259
+
260
+ .code-snippet-text {
261
+ overflow: hidden;
262
+ text-overflow: ellipsis;
263
+ white-space: nowrap;
264
+ }
265
+
266
+ .code-snippet-copy {
267
+ flex-shrink: 0;
268
+ display: inline-flex;
269
+ align-items: center;
270
+ justify-content: center;
271
+ padding: 0.25rem;
272
+ color: var(--gray-500);
273
+ background: transparent;
274
+ border: none;
275
+ border-radius: $border-radius-sm;
276
+ cursor: pointer;
277
+ transition: color $transition-fast $transition-timing;
278
+
279
+ &:hover {
280
+ color: var(--gray-300);
281
+ }
282
+
283
+ svg {
284
+ width: 0.875rem;
285
+ height: 0.875rem;
286
+ }
287
+ }
288
+
289
+ // ----------------------------------------
290
+ // Terminal Style
291
+ // ----------------------------------------
292
+ .code-terminal {
293
+ position: relative;
294
+ padding-top: 2rem;
295
+
296
+ &::before {
297
+ content: "";
298
+ position: absolute;
299
+ top: 0;
300
+ left: 0;
301
+ right: 0;
302
+ height: 2rem;
303
+ background-color: var(--gray-800);
304
+ border-radius: $border-radius-lg $border-radius-lg 0 0;
305
+ }
306
+
307
+ &::after {
308
+ content: "";
309
+ position: absolute;
310
+ top: 0.75rem;
311
+ left: 0.75rem;
312
+ width: 0.625rem;
313
+ height: 0.625rem;
314
+ background-color: var(--danger);
315
+ border-radius: 50%;
316
+ box-shadow: 1rem 0 0 var(--warning),
317
+ 2rem 0 0 var(--success);
318
+ }
319
+ }
320
+
321
+ .code-terminal .code-block {
322
+ border-radius: 0 0 $border-radius-lg $border-radius-lg;
323
+ }
324
+
325
+ .code-prompt {
326
+ color: var(--success);
327
+ user-select: none;
328
+
329
+ &::before {
330
+ content: "$ ";
331
+ }
332
+ }
333
+
334
+ // ----------------------------------------
335
+ // Light Theme Code Block
336
+ // ----------------------------------------
337
+ .code-block-light {
338
+ color: var(--gray-800);
339
+ background-color: var(--gray-50);
340
+ border: 1px solid var(--border);
341
+ }
342
+
343
+ .code-wrapper-light {
344
+ border-color: var(--border);
345
+
346
+ .code-header {
347
+ background-color: var(--gray-100);
348
+ border-color: var(--border);
349
+ }
350
+
351
+ .code-filename {
352
+ color: var(--gray-600);
353
+ }
354
+
355
+ .code-copy {
356
+ background-color: var(--gray-200);
357
+ color: var(--gray-600);
358
+
359
+ &:hover {
360
+ background-color: var(--gray-300);
361
+ color: var(--gray-800);
362
+ }
363
+ }
364
+ }
365
+
366
+ // ----------------------------------------
367
+ // Dark Mode (for inline code)
368
+ // ----------------------------------------
369
+ [data-theme="dark"] {
370
+ .code {
371
+ background-color: var(--gray-800);
372
+ color: var(--danger-300);
373
+ }
374
+
375
+ .code-primary {
376
+ background-color: rgba($primary, 0.2);
377
+ color: var(--primary-300);
378
+ }
379
+
380
+ .code-secondary {
381
+ background-color: var(--gray-800);
382
+ color: var(--gray-300);
383
+ }
384
+
385
+ .code-success {
386
+ background-color: rgba($success, 0.2);
387
+ color: var(--success-300);
388
+ }
389
+
390
+ .code-danger {
391
+ background-color: rgba($danger, 0.2);
392
+ color: var(--danger-300);
393
+ }
394
+
395
+ .code-warning {
396
+ background-color: rgba($warning, 0.2);
397
+ color: var(--warning-300);
398
+ }
399
+
400
+ .code-info {
401
+ background-color: rgba($info, 0.2);
402
+ color: var(--info-300);
403
+ }
404
+ }