@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,274 @@
1
+ /* Radio Button Component — Pure CSS */
2
+
3
+ /* === Host === */
4
+ :host {
5
+ display: inline-flex;
6
+ }
7
+
8
+ /* === Base === */
9
+ .radio {
10
+ display: inline-flex;
11
+ align-items: center;
12
+ gap: 8px;
13
+ cursor: pointer;
14
+ position: relative;
15
+ }
16
+
17
+ /* === Indicator === */
18
+ .radio-indicator {
19
+ position: relative;
20
+ display: inline-flex;
21
+ align-items: center;
22
+ justify-content: center;
23
+ border: 2px solid #c4c4c4;
24
+ border-radius: 50%;
25
+ background-color: transparent;
26
+ padding: 0;
27
+ cursor: pointer;
28
+ transition:
29
+ border-color var(--ls-transition-duration),
30
+ background-color var(--ls-transition-duration);
31
+ outline: none;
32
+ flex-shrink: 0;
33
+ }
34
+
35
+ .radio-indicator::after {
36
+ content: '';
37
+ position: absolute;
38
+ border-radius: 50%;
39
+ transform: scale(0);
40
+ transition: transform var(--ls-transition-duration);
41
+ }
42
+
43
+ .radio-checked .radio-indicator::after {
44
+ transform: scale(1);
45
+ }
46
+
47
+ /* === Label === */
48
+ .radio-label {
49
+ user-select: none;
50
+ cursor: pointer;
51
+ font-size: 0.875rem;
52
+ }
53
+
54
+ /* ═══════════════════════════════════════════════════════
55
+ SIZES
56
+ ═══════════════════════════════════════════════════════ */
57
+
58
+ /* Small */
59
+ .radio-sm .radio-indicator {
60
+ width: 16px;
61
+ height: 16px;
62
+ }
63
+
64
+ .radio-sm .radio-indicator::after {
65
+ width: 8px;
66
+ height: 8px;
67
+ }
68
+
69
+ /* Medium */
70
+ .radio-md .radio-indicator {
71
+ width: 20px;
72
+ height: 20px;
73
+ }
74
+
75
+ .radio-md .radio-indicator::after {
76
+ width: 10px;
77
+ height: 10px;
78
+ }
79
+
80
+ /* ═══════════════════════════════════════════════════════
81
+ COLORS — Checked state
82
+ ═══════════════════════════════════════════════════════ */
83
+
84
+ .radio-checked.radio-color-inherit .radio-indicator {
85
+ border-color: inherit;
86
+ }
87
+
88
+ .radio-checked.radio-color-inherit .radio-indicator::after {
89
+ background-color: inherit;
90
+ }
91
+
92
+ .radio-checked.radio-color-primary .radio-indicator {
93
+ border-color: var(--ls-color-primary);
94
+ }
95
+
96
+ .radio-checked.radio-color-primary .radio-indicator::after {
97
+ background-color: var(--ls-color-primary);
98
+ }
99
+
100
+ .radio-checked.radio-color-secondary .radio-indicator {
101
+ border-color: var(--ls-color-secondary);
102
+ }
103
+
104
+ .radio-checked.radio-color-secondary .radio-indicator::after {
105
+ background-color: var(--ls-color-secondary);
106
+ }
107
+
108
+ .radio-checked.radio-color-success .radio-indicator {
109
+ border-color: var(--ls-color-success);
110
+ }
111
+
112
+ .radio-checked.radio-color-success .radio-indicator::after {
113
+ background-color: var(--ls-color-success);
114
+ }
115
+
116
+ .radio-checked.radio-color-error .radio-indicator {
117
+ border-color: var(--ls-color-error);
118
+ }
119
+
120
+ .radio-checked.radio-color-error .radio-indicator::after {
121
+ background-color: var(--ls-color-error);
122
+ }
123
+
124
+ .radio-checked.radio-color-info .radio-indicator {
125
+ border-color: var(--ls-color-info);
126
+ }
127
+
128
+ .radio-checked.radio-color-info .radio-indicator::after {
129
+ background-color: var(--ls-color-info);
130
+ }
131
+
132
+ .radio-checked.radio-color-warning .radio-indicator {
133
+ border-color: var(--ls-color-warning);
134
+ }
135
+
136
+ .radio-checked.radio-color-warning .radio-indicator::after {
137
+ background-color: var(--ls-color-warning);
138
+ }
139
+
140
+ /* ═══════════════════════════════════════════════════════
141
+ LABEL PLACEMENT
142
+ ═══════════════════════════════════════════════════════ */
143
+
144
+ .radio-label-end {
145
+ flex-direction: row;
146
+ }
147
+
148
+ .radio-label-start {
149
+ flex-direction: row-reverse;
150
+ }
151
+
152
+ .radio-label-top {
153
+ flex-direction: column-reverse;
154
+ align-items: center;
155
+ }
156
+
157
+ .radio-label-bottom {
158
+ flex-direction: column;
159
+ align-items: center;
160
+ }
161
+
162
+ /* ═══════════════════════════════════════════════════════
163
+ DISABLED
164
+ ═══════════════════════════════════════════════════════ */
165
+
166
+ .radio-disabled {
167
+ cursor: not-allowed;
168
+ opacity: 0.5;
169
+ pointer-events: none;
170
+ }
171
+
172
+ .radio-disabled .radio-label {
173
+ cursor: not-allowed;
174
+ }
175
+
176
+ .radio-disabled .radio-indicator {
177
+ cursor: not-allowed;
178
+ }
179
+
180
+ /* ═══════════════════════════════════════════════════════
181
+ FOCUS
182
+ ═══════════════════════════════════════════════════════ */
183
+
184
+ .radio-indicator:focus-visible {
185
+ outline: 2px solid currentColor;
186
+ outline-offset: 2px;
187
+ border-radius: 50%;
188
+ }
189
+
190
+ /* ═══════════════════════════════════════════════════════
191
+ DARK MODE
192
+ ═══════════════════════════════════════════════════════ */
193
+
194
+ body.dark .radio-indicator {
195
+ border-color: #555;
196
+ }
197
+
198
+ body.dark .radio-label {
199
+ color: #e0e6ed;
200
+ }
201
+
202
+ /* Dark mode — checked (maintains token colors) */
203
+
204
+ body.dark
205
+ .radio-checked.radio-color-primary
206
+ .radio-indicator {
207
+ border-color: var(--ls-color-primary);
208
+ }
209
+
210
+ body.dark
211
+ .radio-checked.radio-color-primary
212
+ .radio-indicator::after {
213
+ background-color: var(--ls-color-primary);
214
+ }
215
+
216
+ body.dark
217
+ .radio-checked.radio-color-secondary
218
+ .radio-indicator {
219
+ border-color: var(--ls-color-secondary);
220
+ }
221
+
222
+ body.dark
223
+ .radio-checked.radio-color-secondary
224
+ .radio-indicator::after {
225
+ background-color: var(--ls-color-secondary);
226
+ }
227
+
228
+ body.dark
229
+ .radio-checked.radio-color-success
230
+ .radio-indicator {
231
+ border-color: var(--ls-color-success);
232
+ }
233
+
234
+ body.dark
235
+ .radio-checked.radio-color-success
236
+ .radio-indicator::after {
237
+ background-color: var(--ls-color-success);
238
+ }
239
+
240
+ body.dark
241
+ .radio-checked.radio-color-error
242
+ .radio-indicator {
243
+ border-color: var(--ls-color-error);
244
+ }
245
+
246
+ body.dark
247
+ .radio-checked.radio-color-error
248
+ .radio-indicator::after {
249
+ background-color: var(--ls-color-error);
250
+ }
251
+
252
+ body.dark
253
+ .radio-checked.radio-color-info
254
+ .radio-indicator {
255
+ border-color: var(--ls-color-info);
256
+ }
257
+
258
+ body.dark
259
+ .radio-checked.radio-color-info
260
+ .radio-indicator::after {
261
+ background-color: var(--ls-color-info);
262
+ }
263
+
264
+ body.dark
265
+ .radio-checked.radio-color-warning
266
+ .radio-indicator {
267
+ border-color: var(--ls-color-warning);
268
+ }
269
+
270
+ body.dark
271
+ .radio-checked.radio-color-warning
272
+ .radio-indicator::after {
273
+ background-color: var(--ls-color-warning);
274
+ }
@@ -0,0 +1,228 @@
1
+ /* Slider Component -- Pure CSS */
2
+
3
+ :host {
4
+ display: block;
5
+ }
6
+
7
+ /* ── Base ── */
8
+
9
+ .ls-slider {
10
+ position: relative;
11
+ height: 38px;
12
+ cursor: pointer;
13
+ padding: 15px 0;
14
+ touch-action: none;
15
+ user-select: none;
16
+ }
17
+
18
+ .ls-slider__rail {
19
+ position: absolute;
20
+ top: 50%;
21
+ left: 0;
22
+ width: 100%;
23
+ border-radius: 9999px;
24
+ background: #e0e6ed;
25
+ transform: translateY(-50%);
26
+ }
27
+
28
+ .ls-slider__track {
29
+ position: absolute;
30
+ top: 50%;
31
+ border-radius: 9999px;
32
+ background: var(--ls-slider-main-color);
33
+ transform: translateY(-50%);
34
+ }
35
+
36
+ .ls-slider__thumb {
37
+ position: absolute;
38
+ top: 50%;
39
+ z-index: 1;
40
+ display: flex;
41
+ align-items: center;
42
+ justify-content: center;
43
+ border-radius: 50%;
44
+ background: var(--ls-slider-main-color);
45
+ box-shadow:
46
+ 0 1px 3px rgba(0, 0, 0, 0.2),
47
+ 0 0 0 0 transparent;
48
+ cursor: grab;
49
+ transform: translate(-50%, -50%);
50
+ transition:
51
+ box-shadow 150ms ease,
52
+ width 150ms ease,
53
+ height 150ms ease;
54
+ }
55
+
56
+ .ls-slider__thumb:hover {
57
+ box-shadow:
58
+ 0 1px 3px rgba(0, 0, 0, 0.2),
59
+ 0 0 0 8px
60
+ color-mix(
61
+ in srgb,
62
+ var(--ls-slider-main-color) 16%,
63
+ transparent
64
+ );
65
+ }
66
+
67
+ .ls-slider__thumb:focus-visible {
68
+ outline: 2px solid var(--ls-slider-main-color);
69
+ outline-offset: 2px;
70
+ }
71
+
72
+ .ls-slider__thumb--active {
73
+ cursor: grabbing;
74
+ box-shadow:
75
+ 0 1px 3px rgba(0, 0, 0, 0.2),
76
+ 0 0 0 12px
77
+ color-mix(
78
+ in srgb,
79
+ var(--ls-slider-main-color) 24%,
80
+ transparent
81
+ );
82
+ }
83
+
84
+ .ls-slider__value-label {
85
+ position: absolute;
86
+ bottom: calc(100% + 6px);
87
+ left: 50%;
88
+ padding: 2px 8px;
89
+ border-radius: 4px;
90
+ background: var(--ls-color-dark, #3b3f5c);
91
+ color: #fff;
92
+ font-size: 12px;
93
+ font-weight: 600;
94
+ line-height: 1.4;
95
+ white-space: nowrap;
96
+ transform: translateX(-50%);
97
+ pointer-events: none;
98
+ }
99
+
100
+ .ls-slider__mark {
101
+ position: absolute;
102
+ top: 50%;
103
+ border-radius: 50%;
104
+ background: #bfc9d4;
105
+ transform: translate(-50%, -50%);
106
+ }
107
+
108
+ .ls-slider__mark--active {
109
+ background: var(--ls-slider-main-color);
110
+ }
111
+
112
+ .ls-slider__mark-label {
113
+ position: absolute;
114
+ top: calc(50% + 14px);
115
+ color: #888ea8;
116
+ font-size: 11px;
117
+ white-space: nowrap;
118
+ transform: translateX(-50%);
119
+ }
120
+
121
+ /* ── Size: medium (default) ── */
122
+
123
+ .ls-slider--medium .ls-slider__rail {
124
+ height: 4px;
125
+ }
126
+
127
+ .ls-slider--medium .ls-slider__track {
128
+ height: 4px;
129
+ }
130
+
131
+ .ls-slider--medium .ls-slider__thumb {
132
+ width: 20px;
133
+ height: 20px;
134
+ }
135
+
136
+ .ls-slider--medium .ls-slider__mark {
137
+ width: 4px;
138
+ height: 4px;
139
+ }
140
+
141
+ .ls-slider--medium .ls-slider__value-label {
142
+ font-size: 12px;
143
+ }
144
+
145
+ /* ── Size: small ── */
146
+
147
+ .ls-slider--small .ls-slider__rail {
148
+ height: 2px;
149
+ }
150
+
151
+ .ls-slider--small .ls-slider__track {
152
+ height: 2px;
153
+ }
154
+
155
+ .ls-slider--small .ls-slider__thumb {
156
+ width: 12px;
157
+ height: 12px;
158
+ }
159
+
160
+ .ls-slider--small .ls-slider__mark {
161
+ width: 3px;
162
+ height: 3px;
163
+ }
164
+
165
+ .ls-slider--small .ls-slider__value-label {
166
+ font-size: 10px;
167
+ }
168
+
169
+ /* ── Color variants ── */
170
+
171
+ .ls-slider--primary {
172
+ --ls-slider-main-color: var(--ls-color-primary);
173
+ }
174
+
175
+ .ls-slider--secondary {
176
+ --ls-slider-main-color: var(--ls-color-secondary);
177
+ }
178
+
179
+ .ls-slider--success {
180
+ --ls-slider-main-color: var(--ls-color-success);
181
+ }
182
+
183
+ .ls-slider--error {
184
+ --ls-slider-main-color: var(--ls-color-error);
185
+ }
186
+
187
+ .ls-slider--info {
188
+ --ls-slider-main-color: var(--ls-color-info);
189
+ }
190
+
191
+ .ls-slider--warning {
192
+ --ls-slider-main-color: var(--ls-color-warning);
193
+ }
194
+
195
+ /* ── States ── */
196
+
197
+ .ls-slider--disabled {
198
+ opacity: 0.5;
199
+ cursor: default;
200
+ pointer-events: none;
201
+ }
202
+
203
+ .ls-slider--active {
204
+ cursor: grabbing;
205
+ }
206
+
207
+ /* ── Dark mode ── */
208
+
209
+ body.dark .ls-slider__rail {
210
+ background: rgba(255, 255, 255, 0.15);
211
+ }
212
+
213
+ body.dark .ls-slider__mark {
214
+ background: rgba(255, 255, 255, 0.3);
215
+ }
216
+
217
+ body.dark .ls-slider__mark--active {
218
+ background: var(--ls-slider-main-color);
219
+ }
220
+
221
+ body.dark .ls-slider__mark-label {
222
+ color: #888ea8;
223
+ }
224
+
225
+ body.dark .ls-slider__value-label {
226
+ background: #1b2e4b;
227
+ color: #e0e6ed;
228
+ }