@lumston/ds-angular 0.0.4 → 0.0.6

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.
Files changed (29) hide show
  1. package/package.json +1 -1
  2. package/styles/data-display/badge/badge.styles.css +244 -0
  3. package/styles/data-display/chip/chip.styles.css +245 -0
  4. package/styles/dropdown/dropdown.styles.css +14 -0
  5. package/styles/feedback/alert/alert.styles.css +304 -0
  6. package/styles/feedback/loader/loader.styles.css +132 -0
  7. package/styles/feedback/progress-bar/progress-bar.styles.css +193 -0
  8. package/styles/icon/icon.styles.css +11 -0
  9. package/styles/inputs/button/button.styles.css +377 -0
  10. package/styles/inputs/checkbox/checkbox.styles.css +157 -0
  11. package/styles/inputs/icon-button/icon-button.styles.css +157 -0
  12. package/styles/inputs/radio-button/radio-button.styles.css +274 -0
  13. package/styles/inputs/slider/slider.styles.css +228 -0
  14. package/styles/inputs/switch/switch.styles.css +483 -0
  15. package/styles/media/avatar/avatar.styles.css +112 -0
  16. package/styles/media/avatar-group/avatar-group.styles.css +37 -0
  17. package/styles/media/logo/logo.styles.css +40 -0
  18. package/styles/navigation/breadcrumb/breadcrumb.styles.css +144 -0
  19. package/styles/navigation/pagination/pagination.styles.css +336 -0
  20. package/styles/overlay/menu/menu.styles.css +138 -0
  21. package/styles/overlay/modal/modal.styles.css +178 -0
  22. package/styles/overlay/popover/popover.styles.css +112 -0
  23. package/styles/overlay/tooltip/tooltip.styles.css +172 -0
  24. package/styles/styles/_base.css +10 -0
  25. package/styles/styles/_tokens.css +75 -0
  26. package/styles/styles/index.css +28 -0
  27. package/styles/typography/link/link.styles.css +93 -0
  28. package/styles/typography/tag/tag.styles.css +274 -0
  29. package/styles/typography/text/text.styles.css +176 -0
@@ -0,0 +1,483 @@
1
+ /* Switch Component — Pure CSS */
2
+
3
+ :host {
4
+ display: inline-flex;
5
+ }
6
+
7
+ .switch {
8
+ display: inline-flex;
9
+ align-items: center;
10
+ gap: 8px;
11
+ cursor: pointer;
12
+ position: relative;
13
+ }
14
+
15
+ /* ── Track ── */
16
+
17
+ .switch-track {
18
+ position: relative;
19
+ display: inline-flex;
20
+ align-items: center;
21
+ border: none;
22
+ border-radius: 999px;
23
+ padding: 2px;
24
+ cursor: pointer;
25
+ transition:
26
+ background-color var(--ls-transition-duration),
27
+ border-color var(--ls-transition-duration);
28
+ outline: none;
29
+ flex-shrink: 0;
30
+ }
31
+
32
+ /* ── Thumb ── */
33
+
34
+ .switch-thumb {
35
+ display: flex;
36
+ align-items: center;
37
+ justify-content: center;
38
+ border-radius: 50%;
39
+ background-color: #fff;
40
+ transition: transform var(--ls-transition-duration);
41
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
42
+ }
43
+
44
+ /* ── Icon inside thumb ── */
45
+
46
+ .switch-icon {
47
+ display: flex;
48
+ align-items: center;
49
+ justify-content: center;
50
+ line-height: 0;
51
+ color: #999;
52
+ }
53
+
54
+ .switch-icon svg {
55
+ width: 100%;
56
+ height: 100%;
57
+ }
58
+
59
+ /* ── Label ── */
60
+
61
+ .switch-label {
62
+ user-select: none;
63
+ cursor: pointer;
64
+ font-size: 0.875rem;
65
+ }
66
+
67
+ /* ═══════════════════════════════════════════════════════
68
+ SIZES
69
+ ═══════════════════════════════════════════════════════ */
70
+
71
+ /* Small */
72
+
73
+ .switch-sm .switch-track {
74
+ width: 34px;
75
+ height: 20px;
76
+ }
77
+
78
+ .switch-sm .switch-thumb {
79
+ width: 16px;
80
+ height: 16px;
81
+ }
82
+
83
+ .switch-sm .switch-icon {
84
+ width: 10px;
85
+ height: 10px;
86
+ }
87
+
88
+ .switch-sm.switch-checked .switch-thumb {
89
+ transform: translateX(14px);
90
+ }
91
+
92
+ /* Medium */
93
+
94
+ .switch-md .switch-track {
95
+ width: 42px;
96
+ height: 24px;
97
+ }
98
+
99
+ .switch-md .switch-thumb {
100
+ width: 20px;
101
+ height: 20px;
102
+ }
103
+
104
+ .switch-md .switch-icon {
105
+ width: 12px;
106
+ height: 12px;
107
+ }
108
+
109
+ .switch-md.switch-checked .switch-thumb {
110
+ transform: translateX(18px);
111
+ }
112
+
113
+ /* ═══════════════════════════════════════════════════════
114
+ VARIANTS — Unchecked
115
+ ═══════════════════════════════════════════════════════ */
116
+
117
+ /* Solid unchecked */
118
+
119
+ .switch-solid .switch-track {
120
+ background-color: #c4c4c4;
121
+ }
122
+
123
+ /* Outlined unchecked */
124
+
125
+ .switch-outlined .switch-track {
126
+ background-color: transparent;
127
+ border: 2px solid #999;
128
+ }
129
+
130
+ .switch-outlined .switch-track {
131
+ padding: 0;
132
+ }
133
+
134
+ .switch-outlined .switch-thumb {
135
+ background-color: #999;
136
+ }
137
+
138
+ .switch-outlined .switch-icon {
139
+ color: #fff;
140
+ }
141
+
142
+ /* ═══════════════════════════════════════════════════════
143
+ COLORS — Checked state
144
+ ═══════════════════════════════════════════════════════ */
145
+
146
+ /* Solid checked */
147
+
148
+ .switch-checked.switch-solid.switch-color-inherit
149
+ .switch-track {
150
+ background-color: inherit;
151
+ }
152
+
153
+ .switch-checked.switch-solid.switch-color-primary
154
+ .switch-track {
155
+ background-color: var(--ls-color-primary);
156
+ }
157
+
158
+ .switch-checked.switch-solid.switch-color-secondary
159
+ .switch-track {
160
+ background-color: var(--ls-color-secondary);
161
+ }
162
+
163
+ .switch-checked.switch-solid.switch-color-success
164
+ .switch-track {
165
+ background-color: var(--ls-color-success);
166
+ }
167
+
168
+ .switch-checked.switch-solid.switch-color-error
169
+ .switch-track {
170
+ background-color: var(--ls-color-danger);
171
+ }
172
+
173
+ .switch-checked.switch-solid.switch-color-info
174
+ .switch-track {
175
+ background-color: var(--ls-color-info);
176
+ }
177
+
178
+ .switch-checked.switch-solid.switch-color-warning
179
+ .switch-track {
180
+ background-color: var(--ls-color-warning);
181
+ }
182
+
183
+ /* Outlined checked */
184
+
185
+ .switch-checked.switch-outlined.switch-color-inherit
186
+ .switch-track {
187
+ border-color: inherit;
188
+ }
189
+
190
+ .switch-checked.switch-outlined.switch-color-primary
191
+ .switch-track {
192
+ border-color: var(--ls-color-primary);
193
+ }
194
+
195
+ .switch-checked.switch-outlined.switch-color-secondary
196
+ .switch-track {
197
+ border-color: var(--ls-color-secondary);
198
+ }
199
+
200
+ .switch-checked.switch-outlined.switch-color-success
201
+ .switch-track {
202
+ border-color: var(--ls-color-success);
203
+ }
204
+
205
+ .switch-checked.switch-outlined.switch-color-error
206
+ .switch-track {
207
+ border-color: var(--ls-color-danger);
208
+ }
209
+
210
+ .switch-checked.switch-outlined.switch-color-info
211
+ .switch-track {
212
+ border-color: var(--ls-color-info);
213
+ }
214
+
215
+ .switch-checked.switch-outlined.switch-color-warning
216
+ .switch-track {
217
+ border-color: var(--ls-color-warning);
218
+ }
219
+
220
+ /* Outlined checked — thumb color */
221
+
222
+ .switch-checked.switch-outlined.switch-color-inherit
223
+ .switch-thumb {
224
+ background-color: inherit;
225
+ }
226
+
227
+ .switch-checked.switch-outlined.switch-color-primary
228
+ .switch-thumb {
229
+ background-color: var(--ls-color-primary);
230
+ }
231
+
232
+ .switch-checked.switch-outlined.switch-color-secondary
233
+ .switch-thumb {
234
+ background-color: var(--ls-color-secondary);
235
+ }
236
+
237
+ .switch-checked.switch-outlined.switch-color-success
238
+ .switch-thumb {
239
+ background-color: var(--ls-color-success);
240
+ }
241
+
242
+ .switch-checked.switch-outlined.switch-color-error
243
+ .switch-thumb {
244
+ background-color: var(--ls-color-danger);
245
+ }
246
+
247
+ .switch-checked.switch-outlined.switch-color-info
248
+ .switch-thumb {
249
+ background-color: var(--ls-color-info);
250
+ }
251
+
252
+ .switch-checked.switch-outlined.switch-color-warning
253
+ .switch-thumb {
254
+ background-color: var(--ls-color-warning);
255
+ }
256
+
257
+ /* Outlined checked icon color — white for contrast */
258
+
259
+ .switch-checked.switch-outlined .switch-icon {
260
+ color: #fff;
261
+ }
262
+
263
+ /* Solid checked icon color — color token for contrast on white thumb */
264
+
265
+ .switch-checked.switch-solid .switch-icon {
266
+ color: var(--ls-color-primary);
267
+ }
268
+
269
+ .switch-checked.switch-solid.switch-color-secondary
270
+ .switch-icon {
271
+ color: var(--ls-color-secondary);
272
+ }
273
+
274
+ .switch-checked.switch-solid.switch-color-success
275
+ .switch-icon {
276
+ color: var(--ls-color-success);
277
+ }
278
+
279
+ .switch-checked.switch-solid.switch-color-error
280
+ .switch-icon {
281
+ color: var(--ls-color-danger);
282
+ }
283
+
284
+ .switch-checked.switch-solid.switch-color-info
285
+ .switch-icon {
286
+ color: var(--ls-color-info);
287
+ }
288
+
289
+ .switch-checked.switch-solid.switch-color-warning
290
+ .switch-icon {
291
+ color: var(--ls-color-warning);
292
+ }
293
+
294
+ .switch-checked.switch-solid.switch-color-inherit
295
+ .switch-icon {
296
+ color: inherit;
297
+ }
298
+
299
+ /* ═══════════════════════════════════════════════════════
300
+ LABEL PLACEMENT
301
+ ═══════════════════════════════════════════════════════ */
302
+
303
+ .switch-label-end {
304
+ flex-direction: row;
305
+ }
306
+
307
+ .switch-label-start {
308
+ flex-direction: row-reverse;
309
+ }
310
+
311
+ .switch-label-top {
312
+ flex-direction: column-reverse;
313
+ align-items: center;
314
+ }
315
+
316
+ .switch-label-bottom {
317
+ flex-direction: column;
318
+ align-items: center;
319
+ }
320
+
321
+ /* ═══════════════════════════════════════════════════════
322
+ DISABLED
323
+ ═══════════════════════════════════════════════════════ */
324
+
325
+ .switch-disabled {
326
+ cursor: not-allowed;
327
+ opacity: 0.5;
328
+ pointer-events: none;
329
+ }
330
+
331
+ .switch-disabled .switch-label {
332
+ cursor: not-allowed;
333
+ }
334
+
335
+ .switch-disabled .switch-track {
336
+ cursor: not-allowed;
337
+ }
338
+
339
+ /* ═══════════════════════════════════════════════════════
340
+ FOCUS
341
+ ═══════════════════════════════════════════════════════ */
342
+
343
+ .switch-track:focus-visible {
344
+ outline: 2px solid currentColor;
345
+ outline-offset: 2px;
346
+ border-radius: 999px;
347
+ }
348
+
349
+ /* ═══════════════════════════════════════════════════════
350
+ DARK MODE
351
+ ═══════════════════════════════════════════════════════ */
352
+
353
+ body.dark .switch-solid .switch-track {
354
+ background-color: #3b3f5c;
355
+ }
356
+
357
+ body.dark .switch-outlined .switch-track {
358
+ border-color: #555;
359
+ }
360
+
361
+ body.dark .switch-outlined .switch-thumb {
362
+ background-color: #888;
363
+ }
364
+
365
+ body.dark .switch-label {
366
+ color: #e0e6ed;
367
+ }
368
+
369
+ body.dark .switch-icon {
370
+ color: #bbb;
371
+ }
372
+
373
+ /* Dark mode — checked solid (overrides unchecked dark) */
374
+
375
+ body.dark
376
+ .switch-checked.switch-solid.switch-color-primary
377
+ .switch-track {
378
+ background-color: var(--ls-color-primary);
379
+ }
380
+
381
+ body.dark
382
+ .switch-checked.switch-solid.switch-color-secondary
383
+ .switch-track {
384
+ background-color: var(--ls-color-secondary);
385
+ }
386
+
387
+ body.dark
388
+ .switch-checked.switch-solid.switch-color-success
389
+ .switch-track {
390
+ background-color: var(--ls-color-success);
391
+ }
392
+
393
+ body.dark
394
+ .switch-checked.switch-solid.switch-color-error
395
+ .switch-track {
396
+ background-color: var(--ls-color-danger);
397
+ }
398
+
399
+ body.dark
400
+ .switch-checked.switch-solid.switch-color-info
401
+ .switch-track {
402
+ background-color: var(--ls-color-info);
403
+ }
404
+
405
+ body.dark
406
+ .switch-checked.switch-solid.switch-color-warning
407
+ .switch-track {
408
+ background-color: var(--ls-color-warning);
409
+ }
410
+
411
+ /* Dark mode — checked outlined */
412
+
413
+ body.dark
414
+ .switch-checked.switch-outlined.switch-color-primary
415
+ .switch-track {
416
+ border-color: var(--ls-color-primary);
417
+ }
418
+
419
+ body.dark
420
+ .switch-checked.switch-outlined.switch-color-secondary
421
+ .switch-track {
422
+ border-color: var(--ls-color-secondary);
423
+ }
424
+
425
+ body.dark
426
+ .switch-checked.switch-outlined.switch-color-success
427
+ .switch-track {
428
+ border-color: var(--ls-color-success);
429
+ }
430
+
431
+ body.dark
432
+ .switch-checked.switch-outlined.switch-color-error
433
+ .switch-track {
434
+ border-color: var(--ls-color-danger);
435
+ }
436
+
437
+ body.dark
438
+ .switch-checked.switch-outlined.switch-color-info
439
+ .switch-track {
440
+ border-color: var(--ls-color-info);
441
+ }
442
+
443
+ body.dark
444
+ .switch-checked.switch-outlined.switch-color-warning
445
+ .switch-track {
446
+ border-color: var(--ls-color-warning);
447
+ }
448
+
449
+ body.dark
450
+ .switch-checked.switch-outlined.switch-color-primary
451
+ .switch-thumb {
452
+ background-color: var(--ls-color-primary);
453
+ }
454
+
455
+ body.dark
456
+ .switch-checked.switch-outlined.switch-color-secondary
457
+ .switch-thumb {
458
+ background-color: var(--ls-color-secondary);
459
+ }
460
+
461
+ body.dark
462
+ .switch-checked.switch-outlined.switch-color-success
463
+ .switch-thumb {
464
+ background-color: var(--ls-color-success);
465
+ }
466
+
467
+ body.dark
468
+ .switch-checked.switch-outlined.switch-color-error
469
+ .switch-thumb {
470
+ background-color: var(--ls-color-danger);
471
+ }
472
+
473
+ body.dark
474
+ .switch-checked.switch-outlined.switch-color-info
475
+ .switch-thumb {
476
+ background-color: var(--ls-color-info);
477
+ }
478
+
479
+ body.dark
480
+ .switch-checked.switch-outlined.switch-color-warning
481
+ .switch-thumb {
482
+ background-color: var(--ls-color-warning);
483
+ }
@@ -0,0 +1,112 @@
1
+ /* Avatar Component — Pure CSS */
2
+
3
+ /* === Host === */
4
+ :host {
5
+ display: contents;
6
+ }
7
+
8
+ /* === Base === */
9
+ .avatar {
10
+ display: inline-flex;
11
+ align-items: center;
12
+ justify-content: center;
13
+ overflow: hidden;
14
+ font-family: var(--ls-font-family);
15
+ font-weight: 600;
16
+ color: #fff;
17
+ user-select: none;
18
+ vertical-align: middle;
19
+ }
20
+
21
+ img.avatar {
22
+ object-fit: cover;
23
+ }
24
+
25
+ /* ══════════════════════════════════════════════════════════════════════
26
+ Size Modifiers
27
+ ══════════════════════════════════════════════════════════════════════ */
28
+
29
+ .avatar-small {
30
+ width: 2.25rem;
31
+ height: 2.25rem;
32
+ font-size: 0.75rem;
33
+ }
34
+
35
+ .avatar-medium {
36
+ width: 2.75rem;
37
+ height: 2.75rem;
38
+ font-size: 0.875rem;
39
+ }
40
+
41
+ .avatar-large {
42
+ width: 3.5rem;
43
+ height: 3.5rem;
44
+ font-size: 1.125rem;
45
+ }
46
+
47
+ /* ══════════════════════════════════════════════════════════════════════
48
+ Variant Modifiers
49
+ ══════════════════════════════════════════════════════════════════════ */
50
+
51
+ .avatar-circular {
52
+ border-radius: var(--ls-border-radius-full);
53
+ }
54
+
55
+ .avatar-rounded {
56
+ border-radius: var(--ls-border-radius-md);
57
+ }
58
+
59
+ .avatar-square {
60
+ border-radius: 0;
61
+ }
62
+
63
+ /* ══════════════════════════════════════════════════════════════════════
64
+ Color Modifiers (text mode)
65
+ ══════════════════════════════════════════════════════════════════════ */
66
+
67
+ .avatar-color-primary {
68
+ background-color: var(--ls-color-primary);
69
+ }
70
+
71
+ .avatar-color-secondary {
72
+ background-color: var(--ls-color-secondary);
73
+ }
74
+
75
+ .avatar-color-error {
76
+ background-color: var(--ls-color-error);
77
+ }
78
+
79
+ .avatar-color-info {
80
+ background-color: var(--ls-color-info);
81
+ }
82
+
83
+ .avatar-color-success {
84
+ background-color: var(--ls-color-success);
85
+ }
86
+
87
+ .avatar-color-warning {
88
+ background-color: var(--ls-color-warning);
89
+ }
90
+
91
+ /* ══════════════════════════════════════════════════════════════════════
92
+ Fallback
93
+ ══════════════════════════════════════════════════════════════════════ */
94
+
95
+ .avatar-fallback {
96
+ background-color: var(--ls-color-dark);
97
+ }
98
+
99
+ .avatar-icon {
100
+ width: 60%;
101
+ height: 60%;
102
+ fill: currentColor;
103
+ }
104
+
105
+ /* ══════════════════════════════════════════════════════════════════════
106
+ Dark Mode
107
+ ══════════════════════════════════════════════════════════════════════ */
108
+
109
+ body.dark .avatar-fallback {
110
+ background-color: #3b3f5c;
111
+ color: #e0e6ed;
112
+ }
@@ -0,0 +1,37 @@
1
+ /* AvatarGroup Component — Pure CSS */
2
+
3
+ /* === Host === */
4
+ :host {
5
+ display: contents;
6
+ }
7
+
8
+ /* === Base === */
9
+ .avatar-group {
10
+ display: inline-flex;
11
+ align-items: center;
12
+ }
13
+
14
+ /* === Items === */
15
+ .avatar-group-item {
16
+ position: relative;
17
+ display: flex;
18
+ align-items: center;
19
+ margin-left: -0.5rem;
20
+ }
21
+
22
+ .avatar-group-item:first-child {
23
+ margin-left: 0;
24
+ }
25
+
26
+ /* === Border ring for stacking contrast === */
27
+ .avatar-group-item .avatar {
28
+ border: 2px solid #fff;
29
+ }
30
+
31
+ /* ══════════════════════════════════════════════════════════════════════
32
+ Dark Mode
33
+ ══════════════════════════════════════════════════════════════════════ */
34
+
35
+ body.dark .avatar-group-item .avatar {
36
+ border-color: #1b2e4b;
37
+ }
@@ -0,0 +1,40 @@
1
+ /* Logo Component — Pure CSS */
2
+
3
+ /* === Host === */
4
+ :host {
5
+ display: contents;
6
+ }
7
+
8
+ /* === Base === */
9
+ .logo {
10
+ display: block;
11
+ height: auto;
12
+ max-width: 100%;
13
+ object-fit: contain;
14
+ }
15
+
16
+ /* ══════════════════════════════════════════════════════════════════════
17
+ Size Modifiers
18
+ ══════════════════════════════════════════════════════════════════════ */
19
+
20
+ .logo-small {
21
+ height: 1.5rem;
22
+ }
23
+
24
+ .logo-medium {
25
+ height: 2rem;
26
+ }
27
+
28
+ .logo-large {
29
+ height: 2.5rem;
30
+ }
31
+
32
+ /* ══════════════════════════════════════════════════════════════════════
33
+ Link Wrapper
34
+ ══════════════════════════════════════════════════════════════════════ */
35
+
36
+ .logo-link {
37
+ display: inline-flex;
38
+ line-height: 0;
39
+ text-decoration: none;
40
+ }