minora 0.1.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,577 @@
1
+ /* ============================================================
2
+ ELEGANT MINIMALIST UI KIT — Badge & Tag Components
3
+ badge.css
4
+
5
+ ANATOMY — BADGE
6
+ ─────────────────────────────────────────────────────────────
7
+ Structure:
8
+ <span class="badge badge-success badge-md">
9
+ <span class="badge-dot"></span> <!-- optional -->
10
+ Active
11
+ </span>
12
+
13
+ Class layers:
14
+ 1. .badge → Base reset, layout, typography
15
+ 2. .badge-{variant} → Color scheme (solid/subtle/outline)
16
+ 3. .badge-{size} → Padding, font-size, height
17
+ 4. .badge-dot → Dot indicator modifier
18
+ 5. .badge-notification → Position modifier (for avatar/button overlay)
19
+
20
+ Usage contexts:
21
+ - Standalone: just <span class="badge ...">
22
+ - On avatar: <span class="badge badge-notification"> (absolute positioned)
23
+ - On button: inside button element, inline
24
+ ─────────────────────────────────────────────────────────────
25
+
26
+ ANATOMY — TAG
27
+ ─────────────────────────────────────────────────────────────
28
+ Structure:
29
+ <span class="tag tag-dismissible tag-md" role="group">
30
+ <svg class="tag-icon">...</svg> <!-- optional -->
31
+ <span class="tag-label">Design</span>
32
+ <button class="tag-dismiss" aria-label="Remove">
33
+ <svg>...</svg>
34
+ </button>
35
+ </span>
36
+
37
+ Class layers:
38
+ 1. .tag → Base layout, typography, border
39
+ 2. .tag-{variant} → Color scheme (default/clickable/outline)
40
+ 3. .tag-{size} → Padding, font-size, height
41
+ 4. .tag-dismissible → Modifier: includes dismiss button
42
+ 5. .tag-clickable → Modifier: hover state like ghost button
43
+ 6. .tag-dismissing → Animation state (fade + scale-down)
44
+
45
+ Content model:
46
+ .tag
47
+ ├── .tag-icon → Optional leading icon (SVG)
48
+ ├── .tag-label → Text content
49
+ └── .tag-dismiss → Optional close button (only with .tag-dismissible)
50
+ ─────────────────────────────────────────────────────────────
51
+ ============================================================ */
52
+
53
+ /* ═══════════════════════════════════════════════════════════
54
+ BADGE — Base
55
+ ═══════════════════════════════════════════════════════════ */
56
+
57
+ .badge {
58
+ display: inline-flex;
59
+ align-items: center;
60
+ justify-content: center;
61
+ gap: var(--space-1-5);
62
+ font-family: var(--font-sans);
63
+ font-weight: var(--font-medium);
64
+ letter-spacing: var(--tracking-wide);
65
+ line-height: var(--leading-none);
66
+ white-space: nowrap;
67
+ border-radius: var(--radius-sm);
68
+ border: var(--border-width) solid transparent;
69
+ text-decoration: none;
70
+
71
+ /* Transisi */
72
+ transition: color var(--duration-fast) var(--ease-in-out),
73
+ background-color var(--duration-fast) var(--ease-in-out),
74
+ border-color var(--duration-fast) var(--ease-in-out);
75
+ }
76
+
77
+ /* ── Dot indicator ──────────────────────────────────────── */
78
+ .badge-dot {
79
+ display: inline-block;
80
+ width: var(--space-1-5);
81
+ height: var(--space-1-5);
82
+ border-radius: var(--radius-pill);
83
+ flex-shrink: 0;
84
+ /* Warna ikut parent — di-override per variant */
85
+ }
86
+
87
+ /* ── Sizes ──────────────────────────────────────────────── */
88
+ .badge-sm {
89
+ min-height: var(--badge-sm-height);
90
+ padding: var(--space-0-5) var(--space-2);
91
+ font-size: var(--text-xs);
92
+ }
93
+
94
+ .badge-sm .badge-dot {
95
+ width: var(--space-1);
96
+ height: var(--space-1);
97
+ }
98
+
99
+ .badge-md {
100
+ min-height: var(--badge-md-height);
101
+ padding: var(--space-1) var(--space-2-5);
102
+ font-size: var(--text-xs);
103
+ }
104
+
105
+ .badge-md .badge-dot {
106
+ width: var(--space-1-5);
107
+ height: var(--space-1-5);
108
+ }
109
+
110
+ /* ── Notification badge (positioned overlay) ────────────── */
111
+ .badge-notification {
112
+ position: absolute;
113
+ top: 0;
114
+ right: 0;
115
+ transform: translate(50%, -50%);
116
+ z-index: var(--z-raised);
117
+ min-width: var(--space-4);
118
+ min-height: var(--space-4);
119
+ padding: var(--space-0-5) var(--space-1);
120
+ font-size: var(--text-xs);
121
+ border-radius: var(--radius-pill);
122
+ border: var(--border-width-2) solid var(--color-neutral-50);
123
+ line-height: var(--leading-none);
124
+ }
125
+
126
+ .badge-notification .badge-dot {
127
+ display: none;
128
+ }
129
+
130
+ /* ============================================================
131
+ BADGE — Variant: SOLID
132
+ Background penuh, teks kontras.
133
+ ============================================================ */
134
+
135
+ /* Solid — Primary (Accent Gold) */
136
+ .badge-primary {
137
+ color: var(--color-neutral-50);
138
+ background-color: var(--color-accent-500);
139
+ border-color: var(--color-accent-500);
140
+ }
141
+
142
+ .badge-primary .badge-dot {
143
+ background-color: var(--color-neutral-50);
144
+ }
145
+
146
+ /* Solid — Success */
147
+ .badge-success {
148
+ color: var(--color-neutral-50);
149
+ background-color: var(--color-success);
150
+ border-color: var(--color-success);
151
+ }
152
+
153
+ .badge-success .badge-dot {
154
+ background-color: var(--color-neutral-50);
155
+ }
156
+
157
+ /* Solid — Warning */
158
+ .badge-warning {
159
+ color: var(--color-neutral-50);
160
+ background-color: var(--color-warning);
161
+ border-color: var(--color-warning);
162
+ }
163
+
164
+ .badge-warning .badge-dot {
165
+ background-color: var(--color-neutral-50);
166
+ }
167
+
168
+ /* Solid — Error */
169
+ .badge-error {
170
+ color: var(--color-neutral-50);
171
+ background-color: var(--color-error);
172
+ border-color: var(--color-error);
173
+ }
174
+
175
+ .badge-error .badge-dot {
176
+ background-color: var(--color-neutral-50);
177
+ }
178
+
179
+ /* Solid — Neutral */
180
+ .badge-neutral {
181
+ color: var(--color-neutral-50);
182
+ background-color: var(--color-neutral-700);
183
+ border-color: var(--color-neutral-700);
184
+ }
185
+
186
+ .badge-neutral .badge-dot {
187
+ background-color: var(--color-neutral-50);
188
+ }
189
+
190
+ /* ============================================================
191
+ BADGE — Variant: SUBTLE
192
+ Background sangat light, teks berwarna gelap.
193
+ ============================================================ */
194
+
195
+ /* Subtle — Primary */
196
+ .badge-subtle-primary {
197
+ color: var(--color-accent-700);
198
+ background-color: var(--color-accent-50);
199
+ border-color: var(--color-accent-200);
200
+ }
201
+
202
+ .badge-subtle-primary .badge-dot {
203
+ background-color: var(--color-accent-500);
204
+ }
205
+
206
+ /* Subtle — Success */
207
+ .badge-subtle-success {
208
+ color: var(--color-success-dark);
209
+ background-color: var(--color-success-light);
210
+ border-color: var(--color-success-border);
211
+ }
212
+
213
+ .badge-subtle-success .badge-dot {
214
+ background-color: var(--color-success);
215
+ }
216
+
217
+ /* Subtle — Warning */
218
+ .badge-subtle-warning {
219
+ color: var(--color-warning-dark);
220
+ background-color: var(--color-warning-light);
221
+ border-color: var(--color-warning-border);
222
+ }
223
+
224
+ .badge-subtle-warning .badge-dot {
225
+ background-color: var(--color-warning);
226
+ }
227
+
228
+ /* Subtle — Error */
229
+ .badge-subtle-error {
230
+ color: var(--color-error-dark);
231
+ background-color: var(--color-error-light);
232
+ border-color: var(--color-error-border);
233
+ }
234
+
235
+ .badge-subtle-error .badge-dot {
236
+ background-color: var(--color-error);
237
+ }
238
+
239
+ /* Subtle — Neutral */
240
+ .badge-subtle-neutral {
241
+ color: var(--color-neutral-700);
242
+ background-color: var(--color-neutral-100);
243
+ border-color: var(--color-neutral-200);
244
+ }
245
+
246
+ .badge-subtle-neutral .badge-dot {
247
+ background-color: var(--color-neutral-500);
248
+ }
249
+
250
+ /* ============================================================
251
+ BADGE — Variant: OUTLINE
252
+ Border solid, background transparan.
253
+ ============================================================ */
254
+
255
+ /* Outline — Primary */
256
+ .badge-outline-primary {
257
+ color: var(--color-accent-600);
258
+ background-color: transparent;
259
+ border-color: var(--color-accent-400);
260
+ }
261
+
262
+ .badge-outline-primary .badge-dot {
263
+ background-color: var(--color-accent-500);
264
+ }
265
+
266
+ /* Outline — Success */
267
+ .badge-outline-success {
268
+ color: var(--color-success);
269
+ background-color: transparent;
270
+ border-color: var(--color-success-border);
271
+ }
272
+
273
+ .badge-outline-success .badge-dot {
274
+ background-color: var(--color-success);
275
+ }
276
+
277
+ /* Outline — Warning */
278
+ .badge-outline-warning {
279
+ color: var(--color-warning);
280
+ background-color: transparent;
281
+ border-color: var(--color-warning-border);
282
+ }
283
+
284
+ .badge-outline-warning .badge-dot {
285
+ background-color: var(--color-warning);
286
+ }
287
+
288
+ /* Outline — Error */
289
+ .badge-outline-error {
290
+ color: var(--color-error);
291
+ background-color: transparent;
292
+ border-color: var(--color-error-border);
293
+ }
294
+
295
+ .badge-outline-error .badge-dot {
296
+ background-color: var(--color-error);
297
+ }
298
+
299
+ /* Outline — Neutral */
300
+ .badge-outline-neutral {
301
+ color: var(--color-neutral-700);
302
+ background-color: transparent;
303
+ border-color: var(--color-neutral-300);
304
+ }
305
+
306
+ .badge-outline-neutral .badge-dot {
307
+ background-color: var(--color-neutral-500);
308
+ }
309
+
310
+ /* ═══════════════════════════════════════════════════════════
311
+ TAG — Base
312
+ ═══════════════════════════════════════════════════════════ */
313
+
314
+ .tag {
315
+ display: inline-flex;
316
+ align-items: center;
317
+ gap: var(--space-1-5);
318
+ font-family: var(--font-sans);
319
+ font-weight: var(--font-medium);
320
+ letter-spacing: var(--tracking-wide);
321
+ line-height: var(--leading-none);
322
+ white-space: nowrap;
323
+ border-radius: var(--radius-sm);
324
+ border: var(--border-width) solid var(--color-neutral-200);
325
+ background-color: var(--color-neutral-100);
326
+ color: var(--color-neutral-700);
327
+
328
+ /* Transisi */
329
+ transition: color var(--duration-fast) var(--ease-in-out),
330
+ background-color var(--duration-fast) var(--ease-in-out),
331
+ border-color var(--duration-fast) var(--ease-in-out),
332
+ opacity var(--duration-slow) var(--ease-out),
333
+ transform var(--duration-slow) var(--ease-out);
334
+ }
335
+
336
+ /* ── Tag icon (leading) ─────────────────────────────────── */
337
+ .tag-icon {
338
+ width: var(--space-3);
339
+ height: var(--space-3);
340
+ flex-shrink: 0;
341
+ color: var(--color-neutral-500);
342
+ }
343
+
344
+ /* ── Tag label ──────────────────────────────────────────── */
345
+ .tag-label {
346
+ display: inline;
347
+ }
348
+
349
+ /* ── Tag dismiss button ─────────────────────────────────── */
350
+ .tag-dismiss {
351
+ display: inline-flex;
352
+ align-items: center;
353
+ justify-content: center;
354
+ width: var(--space-3-5);
355
+ height: var(--space-3-5);
356
+ flex-shrink: 0;
357
+ border: none;
358
+ border-radius: var(--radius-sm);
359
+ background: transparent;
360
+ color: var(--color-neutral-400);
361
+ cursor: pointer;
362
+ padding: var(--space-0);
363
+ line-height: var(--leading-none);
364
+
365
+ /* Transisi */
366
+ transition: color var(--duration-fast) var(--ease-in-out),
367
+ background-color var(--duration-fast) var(--ease-in-out);
368
+ }
369
+
370
+ .tag-dismiss:hover {
371
+ color: var(--color-neutral-700);
372
+ background-color: var(--color-neutral-200);
373
+ }
374
+
375
+ .tag-dismiss:focus-visible {
376
+ outline: var(--focus-ring-width) solid var(--focus-ring-color);
377
+ outline-offset: var(--focus-ring-offset);
378
+ }
379
+
380
+ .tag-dismiss svg {
381
+ width: var(--space-3);
382
+ height: var(--space-3);
383
+ }
384
+
385
+ /* ── Dismiss animation (fade + scale-down) ──────────────── */
386
+ .tag-dismissing {
387
+ opacity: 0;
388
+ transform: scale(0.85);
389
+ pointer-events: none;
390
+ transition: opacity var(--duration-slow) var(--ease-out),
391
+ transform var(--duration-slow) var(--ease-out);
392
+ }
393
+
394
+ /* ── Sizes ──────────────────────────────────────────────── */
395
+ .tag-sm {
396
+ min-height: var(--tag-sm-height);
397
+ padding: var(--space-0-5) var(--space-2);
398
+ font-size: var(--text-xs);
399
+ }
400
+
401
+ .tag-sm .tag-icon {
402
+ width: var(--space-2-5);
403
+ height: var(--space-2-5);
404
+ }
405
+
406
+ .tag-sm .tag-dismiss {
407
+ width: var(--space-3);
408
+ height: var(--space-3);
409
+ }
410
+
411
+ .tag-sm .tag-dismiss svg {
412
+ width: var(--space-2-5);
413
+ height: var(--space-2-5);
414
+ }
415
+
416
+ .tag-md {
417
+ min-height: var(--tag-md-height);
418
+ padding: var(--space-1) var(--space-2-5);
419
+ font-size: var(--text-xs);
420
+ }
421
+
422
+ .tag-md .tag-icon {
423
+ width: var(--space-3);
424
+ height: var(--space-3);
425
+ }
426
+
427
+ .tag-md .tag-dismiss {
428
+ width: var(--space-3-5);
429
+ height: var(--space-3-5);
430
+ }
431
+
432
+ .tag-md .tag-dismiss svg {
433
+ width: var(--space-3);
434
+ height: var(--space-3);
435
+ }
436
+
437
+ /* ── Variant: Clickable tag (ghost-like hover) ──────────── */
438
+ .tag-clickable {
439
+ cursor: pointer;
440
+ border-color: transparent;
441
+ background-color: transparent;
442
+ color: var(--color-neutral-600);
443
+ }
444
+
445
+ .tag-clickable:hover {
446
+ color: var(--color-neutral-800);
447
+ background-color: var(--color-neutral-100);
448
+ }
449
+
450
+ .tag-clickable:focus-visible {
451
+ outline: var(--focus-ring-width) solid var(--focus-ring-color);
452
+ outline-offset: var(--focus-ring-offset);
453
+ }
454
+
455
+ .tag-clickable:active {
456
+ background-color: var(--color-neutral-200);
457
+ }
458
+
459
+ /* ── Variant: Outline tag ───────────────────────────────── */
460
+ .tag-outline {
461
+ background-color: transparent;
462
+ border-color: var(--color-neutral-300);
463
+ color: var(--color-neutral-700);
464
+ }
465
+
466
+ .tag-outline:hover {
467
+ background-color: var(--color-neutral-50);
468
+ border-color: var(--color-neutral-400);
469
+ }
470
+
471
+ /* ── Variant: Accent tag (primary color) ────────────────── */
472
+ .tag-accent {
473
+ background-color: var(--color-accent-50);
474
+ border-color: var(--color-accent-200);
475
+ color: var(--color-accent-700);
476
+ }
477
+
478
+ .tag-accent .tag-icon {
479
+ color: var(--color-accent-500);
480
+ }
481
+
482
+ .tag-accent .tag-dismiss {
483
+ color: var(--color-accent-400);
484
+ }
485
+
486
+ .tag-accent .tag-dismiss:hover {
487
+ color: var(--color-accent-700);
488
+ background-color: var(--color-accent-100);
489
+ }
490
+
491
+ .tag-accent.tag-clickable {
492
+ background-color: transparent;
493
+ border-color: transparent;
494
+ color: var(--color-accent-600);
495
+ }
496
+
497
+ .tag-accent.tag-clickable:hover {
498
+ background-color: var(--color-accent-50);
499
+ color: var(--color-accent-700);
500
+ }
501
+
502
+ .tag-accent.tag-clickable:active {
503
+ background-color: var(--color-accent-100);
504
+ }
505
+
506
+ .tag-accent.tag-outline {
507
+ background-color: transparent;
508
+ border-color: var(--color-accent-300);
509
+ color: var(--color-accent-700);
510
+ }
511
+
512
+ .tag-accent.tag-outline:hover {
513
+ background-color: var(--color-accent-50);
514
+ border-color: var(--color-accent-400);
515
+ }
516
+
517
+ /* ── Variant: Semantic color tags ───────────────────────── */
518
+
519
+ /* Success tag */
520
+ .tag-success {
521
+ background-color: var(--color-success-light);
522
+ border-color: var(--color-success-border);
523
+ color: var(--color-success-dark);
524
+ }
525
+
526
+ .tag-success .tag-icon {
527
+ color: var(--color-success);
528
+ }
529
+
530
+ .tag-success .tag-dismiss {
531
+ color: var(--color-success);
532
+ }
533
+
534
+ .tag-success .tag-dismiss:hover {
535
+ color: var(--color-success-dark);
536
+ background-color: var(--color-success-border);
537
+ }
538
+
539
+ /* Warning tag */
540
+ .tag-warning {
541
+ background-color: var(--color-warning-light);
542
+ border-color: var(--color-warning-border);
543
+ color: var(--color-warning-dark);
544
+ }
545
+
546
+ .tag-warning .tag-icon {
547
+ color: var(--color-warning);
548
+ }
549
+
550
+ .tag-warning .tag-dismiss {
551
+ color: var(--color-warning);
552
+ }
553
+
554
+ .tag-warning .tag-dismiss:hover {
555
+ color: var(--color-warning-dark);
556
+ background-color: var(--color-warning-border);
557
+ }
558
+
559
+ /* Error tag */
560
+ .tag-error {
561
+ background-color: var(--color-error-light);
562
+ border-color: var(--color-error-border);
563
+ color: var(--color-error-dark);
564
+ }
565
+
566
+ .tag-error .tag-icon {
567
+ color: var(--color-error);
568
+ }
569
+
570
+ .tag-error .tag-dismiss {
571
+ color: var(--color-error);
572
+ }
573
+
574
+ .tag-error .tag-dismiss:hover {
575
+ color: var(--color-error-dark);
576
+ background-color: var(--color-error-border);
577
+ }