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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zenkit-css",
3
- "version": "1.2.0",
3
+ "version": "1.2.2",
4
4
  "description": "A minimal, modern CSS framework for peaceful development",
5
5
  "main": "dist/zenkit.css",
6
6
  "scripts": {
@@ -0,0 +1,443 @@
1
+ // ========================================
2
+ // ZenKit - Editable Component
3
+ // ========================================
4
+
5
+ @use '../abstracts/variables' as *;
6
+
7
+ // ----------------------------------------
8
+ // Editable Container
9
+ // ----------------------------------------
10
+ .editable {
11
+ position: relative;
12
+ display: inline-flex;
13
+ align-items: center;
14
+ gap: 0.5rem;
15
+ }
16
+
17
+ .editable-block {
18
+ display: flex;
19
+ width: 100%;
20
+ }
21
+
22
+ // ----------------------------------------
23
+ // Editable Preview (View Mode)
24
+ // ----------------------------------------
25
+ .editable-preview {
26
+ display: inline-flex;
27
+ align-items: center;
28
+ gap: 0.375rem;
29
+ padding: 0.25rem 0.5rem;
30
+ margin: -0.25rem -0.5rem;
31
+ font-size: inherit;
32
+ color: var(--text);
33
+ background-color: transparent;
34
+ border: 1px solid transparent;
35
+ border-radius: $border-radius;
36
+ cursor: pointer;
37
+ transition: all $transition-fast $transition-timing;
38
+ min-height: 2rem;
39
+ word-break: break-word;
40
+
41
+ &:hover {
42
+ background-color: var(--gray-100);
43
+ border-color: var(--gray-200);
44
+ }
45
+
46
+ &:focus {
47
+ outline: none;
48
+ background-color: var(--gray-100);
49
+ border-color: var(--primary);
50
+ box-shadow: 0 0 0 2px rgba($primary, 0.15);
51
+ }
52
+ }
53
+
54
+ .editable-preview-placeholder {
55
+ color: var(--text-muted);
56
+ font-style: italic;
57
+ }
58
+
59
+ // ----------------------------------------
60
+ // Editable Edit Icon
61
+ // ----------------------------------------
62
+ .editable-edit-icon {
63
+ display: inline-flex;
64
+ align-items: center;
65
+ justify-content: center;
66
+ width: 1rem;
67
+ height: 1rem;
68
+ color: var(--text-muted);
69
+ opacity: 0;
70
+ transition: opacity $transition-fast $transition-timing;
71
+
72
+ svg {
73
+ width: 0.875rem;
74
+ height: 0.875rem;
75
+ }
76
+ }
77
+
78
+ .editable-preview:hover .editable-edit-icon,
79
+ .editable-preview:focus .editable-edit-icon {
80
+ opacity: 1;
81
+ }
82
+
83
+ // ----------------------------------------
84
+ // Editable Input (Edit Mode)
85
+ // ----------------------------------------
86
+ .editable-input {
87
+ width: 100%;
88
+ padding: 0.375rem 0.5rem;
89
+ font-size: inherit;
90
+ font-family: inherit;
91
+ color: var(--text);
92
+ background-color: var(--bg);
93
+ border: 1px solid var(--primary);
94
+ border-radius: $border-radius;
95
+ outline: none;
96
+ box-shadow: 0 0 0 2px rgba($primary, 0.15);
97
+ transition: border-color $transition-fast $transition-timing,
98
+ box-shadow $transition-fast $transition-timing;
99
+
100
+ &:focus {
101
+ border-color: var(--primary);
102
+ box-shadow: 0 0 0 3px rgba($primary, 0.15);
103
+ }
104
+ }
105
+
106
+ // ----------------------------------------
107
+ // Editable Textarea
108
+ // ----------------------------------------
109
+ .editable-textarea {
110
+ width: 100%;
111
+ min-height: 80px;
112
+ padding: 0.5rem;
113
+ font-size: inherit;
114
+ font-family: inherit;
115
+ color: var(--text);
116
+ background-color: var(--bg);
117
+ border: 1px solid var(--primary);
118
+ border-radius: $border-radius;
119
+ outline: none;
120
+ box-shadow: 0 0 0 2px rgba($primary, 0.15);
121
+ resize: vertical;
122
+ }
123
+
124
+ // ----------------------------------------
125
+ // Editable Controls
126
+ // ----------------------------------------
127
+ .editable-controls {
128
+ display: inline-flex;
129
+ gap: 0.25rem;
130
+ margin-left: 0.5rem;
131
+ }
132
+
133
+ .editable-controls-below {
134
+ display: flex;
135
+ gap: 0.25rem;
136
+ margin-top: 0.5rem;
137
+ }
138
+
139
+ .editable-btn {
140
+ display: inline-flex;
141
+ align-items: center;
142
+ justify-content: center;
143
+ width: 1.75rem;
144
+ height: 1.75rem;
145
+ padding: 0;
146
+ background-color: transparent;
147
+ border: 1px solid var(--border);
148
+ border-radius: $border-radius;
149
+ cursor: pointer;
150
+ transition: all $transition-fast $transition-timing;
151
+
152
+ svg {
153
+ width: 0.875rem;
154
+ height: 0.875rem;
155
+ }
156
+ }
157
+
158
+ .editable-btn-submit {
159
+ color: var(--success);
160
+ border-color: var(--success-200);
161
+
162
+ &:hover {
163
+ background-color: var(--success);
164
+ border-color: var(--success);
165
+ color: var(--white);
166
+ }
167
+ }
168
+
169
+ .editable-btn-cancel {
170
+ color: var(--danger);
171
+ border-color: var(--danger-200);
172
+
173
+ &:hover {
174
+ background-color: var(--danger);
175
+ border-color: var(--danger);
176
+ color: var(--white);
177
+ }
178
+ }
179
+
180
+ // ----------------------------------------
181
+ // Editable Sizes
182
+ // ----------------------------------------
183
+ .editable-sm {
184
+ font-size: var(--text-sm);
185
+
186
+ .editable-preview {
187
+ padding: 0.125rem 0.375rem;
188
+ min-height: 1.5rem;
189
+ }
190
+
191
+ .editable-input {
192
+ padding: 0.25rem 0.375rem;
193
+ }
194
+
195
+ .editable-btn {
196
+ width: 1.5rem;
197
+ height: 1.5rem;
198
+ }
199
+ }
200
+
201
+ .editable-lg {
202
+ font-size: var(--text-lg);
203
+
204
+ .editable-preview {
205
+ padding: 0.375rem 0.625rem;
206
+ min-height: 2.5rem;
207
+ }
208
+
209
+ .editable-input {
210
+ padding: 0.5rem 0.625rem;
211
+ }
212
+
213
+ .editable-btn {
214
+ width: 2rem;
215
+ height: 2rem;
216
+ }
217
+ }
218
+
219
+ // ----------------------------------------
220
+ // Editable as Heading
221
+ // ----------------------------------------
222
+ .editable-heading {
223
+ font-weight: $font-weight-semibold;
224
+
225
+ .editable-preview {
226
+ font-weight: $font-weight-semibold;
227
+ }
228
+ }
229
+
230
+ .editable-h1 {
231
+ font-size: 2rem;
232
+ }
233
+
234
+ .editable-h2 {
235
+ font-size: 1.5rem;
236
+ }
237
+
238
+ .editable-h3 {
239
+ font-size: 1.25rem;
240
+ }
241
+
242
+ // ----------------------------------------
243
+ // Editable Variants
244
+ // ----------------------------------------
245
+
246
+ // Underline on hover
247
+ .editable-underline {
248
+ .editable-preview {
249
+ padding: 0;
250
+ margin: 0;
251
+ border: none;
252
+ border-bottom: 1px dashed transparent;
253
+ border-radius: 0;
254
+ background: transparent;
255
+
256
+ &:hover {
257
+ border-bottom-color: var(--primary);
258
+ background: transparent;
259
+ }
260
+ }
261
+ }
262
+
263
+ // Always show edit icon
264
+ .editable-always-show-icon {
265
+ .editable-edit-icon {
266
+ opacity: 0.5;
267
+ }
268
+
269
+ .editable-preview:hover .editable-edit-icon {
270
+ opacity: 1;
271
+ }
272
+ }
273
+
274
+ // Double click to edit
275
+ .editable-double-click {
276
+ .editable-preview {
277
+ cursor: text;
278
+
279
+ &:hover {
280
+ background: transparent;
281
+ border-color: transparent;
282
+ }
283
+ }
284
+ }
285
+
286
+ // ----------------------------------------
287
+ // Editable States
288
+ // ----------------------------------------
289
+ .editable-disabled {
290
+ opacity: 0.6;
291
+ pointer-events: none;
292
+ }
293
+
294
+ .editable-readonly {
295
+ .editable-preview {
296
+ cursor: default;
297
+
298
+ &:hover {
299
+ background: transparent;
300
+ border-color: transparent;
301
+ }
302
+ }
303
+
304
+ .editable-edit-icon {
305
+ display: none;
306
+ }
307
+ }
308
+
309
+ // ----------------------------------------
310
+ // Editable Loading
311
+ // ----------------------------------------
312
+ .editable-loading {
313
+ position: relative;
314
+ pointer-events: none;
315
+
316
+ &::after {
317
+ content: "";
318
+ position: absolute;
319
+ top: 50%;
320
+ right: 0.5rem;
321
+ transform: translateY(-50%);
322
+ width: 1rem;
323
+ height: 1rem;
324
+ border: 2px solid var(--primary);
325
+ border-top-color: transparent;
326
+ border-radius: 50%;
327
+ animation: spin 0.6s linear infinite;
328
+ }
329
+ }
330
+
331
+ // ----------------------------------------
332
+ // Editable Error
333
+ // ----------------------------------------
334
+ .editable-error {
335
+ .editable-input,
336
+ .editable-textarea {
337
+ border-color: var(--danger);
338
+ box-shadow: 0 0 0 2px rgba($danger, 0.15);
339
+ }
340
+ }
341
+
342
+ .editable-error-message {
343
+ font-size: var(--text-xs);
344
+ color: var(--danger);
345
+ margin-top: 0.25rem;
346
+ }
347
+
348
+ // ----------------------------------------
349
+ // Editable with Character Count
350
+ // ----------------------------------------
351
+ .editable-char-count {
352
+ display: flex;
353
+ justify-content: flex-end;
354
+ margin-top: 0.25rem;
355
+ font-size: var(--text-xs);
356
+ color: var(--text-muted);
357
+ }
358
+
359
+ .editable-char-count-warning {
360
+ color: var(--warning);
361
+ }
362
+
363
+ .editable-char-count-error {
364
+ color: var(--danger);
365
+ }
366
+
367
+ // ----------------------------------------
368
+ // Editable with Prefix/Suffix
369
+ // ----------------------------------------
370
+ .editable-with-affix {
371
+ display: flex;
372
+ align-items: center;
373
+ }
374
+
375
+ .editable-prefix,
376
+ .editable-suffix {
377
+ font-size: inherit;
378
+ color: var(--text-muted);
379
+ padding: 0 0.25rem;
380
+ }
381
+
382
+ // ----------------------------------------
383
+ // Editable Table Cell
384
+ // ----------------------------------------
385
+ .editable-table-cell {
386
+ .editable-preview {
387
+ width: 100%;
388
+ padding: 0.5rem;
389
+ margin: 0;
390
+ border-radius: 0;
391
+ }
392
+
393
+ .editable-input {
394
+ width: 100%;
395
+ border-radius: 0;
396
+ }
397
+ }
398
+
399
+ // ----------------------------------------
400
+ // Inline Editable Form
401
+ // ----------------------------------------
402
+ .editable-form {
403
+ display: flex;
404
+ align-items: center;
405
+ gap: 0.5rem;
406
+ width: 100%;
407
+ }
408
+
409
+ .editable-form-input {
410
+ flex: 1;
411
+ }
412
+
413
+ // ----------------------------------------
414
+ // Dark Mode
415
+ // ----------------------------------------
416
+ [data-theme="dark"] {
417
+ .editable-preview:hover {
418
+ background-color: var(--gray-800);
419
+ border-color: var(--gray-700);
420
+ }
421
+
422
+ .editable-preview:focus {
423
+ background-color: var(--gray-800);
424
+ }
425
+
426
+ .editable-input,
427
+ .editable-textarea {
428
+ background-color: var(--gray-900);
429
+ border-color: var(--primary);
430
+ }
431
+
432
+ .editable-btn {
433
+ border-color: var(--gray-600);
434
+ }
435
+
436
+ .editable-btn-submit {
437
+ border-color: rgba($success, 0.3);
438
+ }
439
+
440
+ .editable-btn-cancel {
441
+ border-color: rgba($danger, 0.3);
442
+ }
443
+ }