@lumston/ds-angular 0.0.4 → 0.0.5

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 (32) hide show
  1. package/package.json +1 -1
  2. package/styles/_base.css +10 -0
  3. package/styles/_tokens.css +75 -0
  4. package/styles/components/data-display/badge/badge.styles.css +244 -0
  5. package/styles/components/data-display/chip/chip.styles.css +245 -0
  6. package/styles/components/dropdown/dropdown.styles.css +14 -0
  7. package/styles/components/feedback/alert/alert.styles.css +304 -0
  8. package/styles/components/feedback/loader/loader.styles.css +132 -0
  9. package/styles/components/feedback/progress-bar/progress-bar.styles.css +193 -0
  10. package/styles/components/icon/icon.styles.css +11 -0
  11. package/styles/components/inputs/button/button.styles.css +377 -0
  12. package/styles/components/inputs/checkbox/checkbox.styles.css +157 -0
  13. package/styles/components/inputs/icon-button/icon-button.styles.css +157 -0
  14. package/styles/components/inputs/radio-button/radio-button.styles.css +274 -0
  15. package/styles/components/inputs/slider/slider.styles.css +228 -0
  16. package/styles/components/inputs/switch/switch.styles.css +483 -0
  17. package/styles/components/media/avatar/avatar.styles.css +112 -0
  18. package/styles/components/media/avatar-group/avatar-group.styles.css +37 -0
  19. package/styles/components/media/logo/logo.styles.css +40 -0
  20. package/styles/components/navigation/breadcrumb/breadcrumb.styles.css +144 -0
  21. package/styles/components/navigation/pagination/pagination.styles.css +336 -0
  22. package/styles/components/overlay/menu/menu.styles.css +138 -0
  23. package/styles/components/overlay/modal/modal.styles.css +178 -0
  24. package/styles/components/overlay/popover/popover.styles.css +112 -0
  25. package/styles/components/overlay/tooltip/tooltip.styles.css +172 -0
  26. package/styles/components/styles/_base.css +10 -0
  27. package/styles/components/styles/_tokens.css +75 -0
  28. package/styles/components/styles/index.css +28 -0
  29. package/styles/components/typography/link/link.styles.css +93 -0
  30. package/styles/components/typography/tag/tag.styles.css +274 -0
  31. package/styles/components/typography/text/text.styles.css +176 -0
  32. package/styles/index.css +28 -0
@@ -0,0 +1,304 @@
1
+ /* ═══════════════════════════════════════════════════════════════════════════
2
+ Alert — ls-alert
3
+ ═══════════════════════════════════════════════════════════════════════════ */
4
+
5
+ :host {
6
+ display: contents;
7
+ }
8
+
9
+ /* ── Base ─────────────────────────────────────────────────────────────── */
10
+
11
+ .alert {
12
+ display: flex;
13
+ align-items: flex-start;
14
+ gap: 12px;
15
+ padding: 12px 16px;
16
+ border-radius: var(--ls-border-radius-md, 6px);
17
+ font-family: var(--ls-font-family, 'Nunito', sans-serif);
18
+ font-size: 14px;
19
+ line-height: 1.5;
20
+ position: relative;
21
+ width: 100%;
22
+ box-sizing: border-box;
23
+ }
24
+
25
+ /* ── Icon ─────────────────────────────────────────────────────────────── */
26
+
27
+ .alert-icon {
28
+ flex-shrink: 0;
29
+ width: 24px;
30
+ height: 24px;
31
+ display: flex;
32
+ align-items: center;
33
+ justify-content: center;
34
+ }
35
+
36
+ .alert-icon svg {
37
+ width: 100%;
38
+ height: 100%;
39
+ }
40
+
41
+ /* ── Content ──────────────────────────────────────────────────────────── */
42
+
43
+ .alert-content {
44
+ flex: 1;
45
+ min-width: 0;
46
+ }
47
+
48
+ .alert-title {
49
+ font-weight: 600;
50
+ margin-bottom: 4px;
51
+ }
52
+
53
+ .alert-message {
54
+ padding-top: 2px;
55
+ font-weight: 400;
56
+ }
57
+
58
+ /* ── Close Button ─────────────────────────────────────────────────────── */
59
+
60
+ .alert-close {
61
+ flex-shrink: 0;
62
+ background: none;
63
+ border: none;
64
+ cursor: pointer;
65
+ padding: 4px;
66
+ border-radius: 4px;
67
+ color: inherit;
68
+ opacity: 0.7;
69
+ transition: opacity var(--ls-transition-duration, 300ms);
70
+ display: flex;
71
+ align-items: center;
72
+ justify-content: center;
73
+ }
74
+
75
+ .alert-close:hover {
76
+ opacity: 1;
77
+ }
78
+
79
+ /* ═══════════════════════════════════════════════════════════════════════════
80
+ Default Variant — subtle background + left 4px border
81
+ ═══════════════════════════════════════════════════════════════════════════ */
82
+
83
+ .alert-default-success {
84
+ background-color: var(--ls-color-success-light);
85
+ border-left: 4px solid var(--ls-color-success);
86
+ color: var(--ls-color-success);
87
+ }
88
+
89
+ .alert-default-error {
90
+ background-color: var(--ls-color-danger-light);
91
+ border-left: 4px solid var(--ls-color-danger);
92
+ color: var(--ls-color-danger);
93
+ }
94
+
95
+ .alert-default-warning {
96
+ background-color: var(--ls-color-warning-light);
97
+ border-left: 4px solid var(--ls-color-warning);
98
+ color: var(--ls-color-warning);
99
+ }
100
+
101
+ .alert-default-info {
102
+ background-color: var(--ls-color-info-light);
103
+ border-left: 4px solid var(--ls-color-info);
104
+ color: var(--ls-color-info);
105
+ }
106
+
107
+ .alert-default-primary {
108
+ background-color: var(--ls-color-primary-light);
109
+ border-left: 4px solid var(--ls-color-primary);
110
+ color: var(--ls-color-primary);
111
+ }
112
+
113
+ .alert-default-secondary {
114
+ background-color: var(--ls-color-secondary-light);
115
+ border-left: 4px solid var(--ls-color-secondary);
116
+ color: var(--ls-color-secondary);
117
+ }
118
+
119
+ /* ═══════════════════════════════════════════════════════════════════════════
120
+ Filled Variant — solid background + white text
121
+ ═══════════════════════════════════════════════════════════════════════════ */
122
+
123
+ .alert-filled-success {
124
+ background-color: var(--ls-color-success);
125
+ color: #ffffff;
126
+ }
127
+
128
+ .alert-filled-error {
129
+ background-color: var(--ls-color-danger);
130
+ color: #ffffff;
131
+ }
132
+
133
+ .alert-filled-warning {
134
+ background-color: var(--ls-color-warning);
135
+ color: #ffffff;
136
+ }
137
+
138
+ .alert-filled-info {
139
+ background-color: var(--ls-color-info);
140
+ color: #ffffff;
141
+ }
142
+
143
+ .alert-filled-primary {
144
+ background-color: var(--ls-color-primary);
145
+ color: #ffffff;
146
+ }
147
+
148
+ .alert-filled-secondary {
149
+ background-color: var(--ls-color-secondary);
150
+ color: #ffffff;
151
+ }
152
+
153
+ /* ═══════════════════════════════════════════════════════════════════════════
154
+ Outlined Variant — border only + transparent background
155
+ ═══════════════════════════════════════════════════════════════════════════ */
156
+
157
+ .alert-outlined-success {
158
+ background-color: transparent;
159
+ border: 1px solid var(--ls-color-success);
160
+ color: var(--ls-color-success);
161
+ }
162
+
163
+ .alert-outlined-error {
164
+ background-color: transparent;
165
+ border: 1px solid var(--ls-color-danger);
166
+ color: var(--ls-color-danger);
167
+ }
168
+
169
+ .alert-outlined-warning {
170
+ background-color: transparent;
171
+ border: 1px solid var(--ls-color-warning);
172
+ color: var(--ls-color-warning);
173
+ }
174
+
175
+ .alert-outlined-info {
176
+ background-color: transparent;
177
+ border: 1px solid var(--ls-color-info);
178
+ color: var(--ls-color-info);
179
+ }
180
+
181
+ .alert-outlined-primary {
182
+ background-color: transparent;
183
+ border: 1px solid var(--ls-color-primary);
184
+ color: var(--ls-color-primary);
185
+ }
186
+
187
+ .alert-outlined-secondary {
188
+ background-color: transparent;
189
+ border: 1px solid var(--ls-color-secondary);
190
+ color: var(--ls-color-secondary);
191
+ }
192
+
193
+ /* ═══════════════════════════════════════════════════════════════════════════
194
+ Custom Color Override
195
+ ═══════════════════════════════════════════════════════════════════════════ */
196
+
197
+ .alert[style*='--alert-custom-color'] {
198
+ border-color: var(--alert-custom-color);
199
+ }
200
+
201
+ .alert-default-success[style*='--alert-custom-color'],
202
+ .alert-default-error[style*='--alert-custom-color'],
203
+ .alert-default-warning[style*='--alert-custom-color'],
204
+ .alert-default-info[style*='--alert-custom-color'],
205
+ .alert-default-primary[style*='--alert-custom-color'],
206
+ .alert-default-secondary[style*='--alert-custom-color'] {
207
+ border-left-color: var(--alert-custom-color);
208
+ color: var(--alert-custom-color);
209
+ }
210
+
211
+ .alert-filled-success[style*='--alert-custom-color'],
212
+ .alert-filled-error[style*='--alert-custom-color'],
213
+ .alert-filled-warning[style*='--alert-custom-color'],
214
+ .alert-filled-info[style*='--alert-custom-color'],
215
+ .alert-filled-primary[style*='--alert-custom-color'],
216
+ .alert-filled-secondary[style*='--alert-custom-color'] {
217
+ background-color: var(--alert-custom-color);
218
+ }
219
+
220
+ .alert-outlined-success[style*='--alert-custom-color'],
221
+ .alert-outlined-error[style*='--alert-custom-color'],
222
+ .alert-outlined-warning[style*='--alert-custom-color'],
223
+ .alert-outlined-info[style*='--alert-custom-color'],
224
+ .alert-outlined-primary[style*='--alert-custom-color'],
225
+ .alert-outlined-secondary[style*='--alert-custom-color'] {
226
+ border-color: var(--alert-custom-color);
227
+ color: var(--alert-custom-color);
228
+ }
229
+
230
+ /* ═══════════════════════════════════════════════════════════════════════════
231
+ Dark Mode
232
+ ═══════════════════════════════════════════════════════════════════════════ */
233
+
234
+ /* ── Default Variant — Dark ──────────────────────────────────────────── */
235
+
236
+ body.dark .alert-default-success {
237
+ background-color: var(--ls-color-success-dark-light);
238
+ border-left-color: var(--ls-color-success);
239
+ color: var(--ls-color-success);
240
+ }
241
+
242
+ body.dark .alert-default-error {
243
+ background-color: var(--ls-color-danger-dark-light);
244
+ border-left-color: var(--ls-color-danger);
245
+ color: var(--ls-color-danger);
246
+ }
247
+
248
+ body.dark .alert-default-warning {
249
+ background-color: var(--ls-color-warning-dark-light);
250
+ border-left-color: var(--ls-color-warning);
251
+ color: var(--ls-color-warning);
252
+ }
253
+
254
+ body.dark .alert-default-info {
255
+ background-color: var(--ls-color-info-dark-light);
256
+ border-left-color: var(--ls-color-info);
257
+ color: var(--ls-color-info);
258
+ }
259
+
260
+ body.dark .alert-default-primary {
261
+ background-color: var(--ls-color-primary-dark-light);
262
+ border-left-color: var(--ls-color-primary);
263
+ color: var(--ls-color-primary);
264
+ }
265
+
266
+ body.dark .alert-default-secondary {
267
+ background-color: var(--ls-color-secondary-dark-light);
268
+ border-left-color: var(--ls-color-secondary);
269
+ color: var(--ls-color-secondary);
270
+ }
271
+
272
+ /* ── Filled Variant — Dark (no change needed, solid bg is already high contrast) ── */
273
+
274
+ /* ── Outlined Variant — Dark ─────────────────────────────────────────── */
275
+
276
+ body.dark .alert-outlined-success {
277
+ border-color: var(--ls-color-success);
278
+ color: var(--ls-color-success);
279
+ }
280
+
281
+ body.dark .alert-outlined-error {
282
+ border-color: var(--ls-color-danger);
283
+ color: var(--ls-color-danger);
284
+ }
285
+
286
+ body.dark .alert-outlined-warning {
287
+ border-color: var(--ls-color-warning);
288
+ color: var(--ls-color-warning);
289
+ }
290
+
291
+ body.dark .alert-outlined-info {
292
+ border-color: var(--ls-color-info);
293
+ color: var(--ls-color-info);
294
+ }
295
+
296
+ body.dark .alert-outlined-primary {
297
+ border-color: var(--ls-color-primary);
298
+ color: var(--ls-color-primary);
299
+ }
300
+
301
+ body.dark .alert-outlined-secondary {
302
+ border-color: var(--ls-color-secondary);
303
+ color: var(--ls-color-secondary);
304
+ }
@@ -0,0 +1,132 @@
1
+ /* Loader Component — Circular SVG Spinner */
2
+
3
+ /* === Host === */
4
+ :host {
5
+ display: contents;
6
+ }
7
+
8
+ /* === SVG Container === */
9
+ .loader-svg {
10
+ display: inline-block;
11
+ vertical-align: middle;
12
+ transform-origin: center;
13
+ }
14
+
15
+ /* === Size Modifiers === */
16
+ .loader-sm {
17
+ width: 16px;
18
+ height: 16px;
19
+ }
20
+
21
+ .loader-md {
22
+ width: 32px;
23
+ height: 32px;
24
+ }
25
+
26
+ .loader-lg {
27
+ width: 48px;
28
+ height: 48px;
29
+ }
30
+
31
+ /* === Track Circle === */
32
+ .loader-track {
33
+ stroke: #e0e0e0;
34
+ }
35
+
36
+ /* === Indicator Circle === */
37
+ .loader-indicator {
38
+ stroke-linecap: round;
39
+ transform-origin: center;
40
+ transform: rotate(-90deg);
41
+ transition: stroke-dashoffset var(--ls-transition-duration) ease;
42
+ }
43
+
44
+ /* === Determinate === */
45
+ .loader-determinate {
46
+ transition: stroke-dashoffset var(--ls-transition-duration) ease;
47
+ }
48
+
49
+ /* === Indeterminate (on SVG container) === */
50
+ .loader-svg.loader-indeterminate {
51
+ animation: ls-loader-rotate 1.4s linear infinite;
52
+ }
53
+
54
+ /* === Indeterminate indicator stroke morph === */
55
+ .loader-indicator.loader-indeterminate {
56
+ animation: ls-loader-dash 1.4s ease-in-out infinite;
57
+ stroke-linecap: round;
58
+ }
59
+
60
+ /* === Buffer Circle === */
61
+ .loader-buffer {
62
+ stroke-linecap: round;
63
+ transform-origin: center;
64
+ transform: rotate(-90deg);
65
+ opacity: 0.3;
66
+ transition: stroke-dashoffset var(--ls-transition-duration) ease;
67
+ }
68
+
69
+ /* === Animations === */
70
+ @keyframes ls-loader-rotate {
71
+ 0% {
72
+ transform: rotate(0deg);
73
+ }
74
+ 100% {
75
+ transform: rotate(360deg);
76
+ }
77
+ }
78
+
79
+ @keyframes ls-loader-dash {
80
+ 0% {
81
+ stroke-dasharray: 1, 125.66;
82
+ stroke-dashoffset: 0;
83
+ }
84
+ 50% {
85
+ stroke-dasharray: 89, 125.66;
86
+ stroke-dashoffset: -35;
87
+ }
88
+ 100% {
89
+ stroke-dasharray: 89, 125.66;
90
+ stroke-dashoffset: -124;
91
+ }
92
+ }
93
+
94
+ /* ══════════════════════════════════════════════════════════════════════
95
+ Color Modifiers (stroke)
96
+ ══════════════════════════════════════════════════════════════════════ */
97
+
98
+ .loader-primary {
99
+ stroke: var(--ls-color-primary);
100
+ }
101
+
102
+ .loader-secondary {
103
+ stroke: var(--ls-color-secondary);
104
+ }
105
+
106
+ .loader-error {
107
+ stroke: var(--ls-color-danger);
108
+ }
109
+
110
+ .loader-info {
111
+ stroke: var(--ls-color-info);
112
+ }
113
+
114
+ .loader-success {
115
+ stroke: var(--ls-color-success);
116
+ }
117
+
118
+ .loader-warning {
119
+ stroke: var(--ls-color-warning);
120
+ }
121
+
122
+ .loader-inherit {
123
+ stroke: currentColor;
124
+ }
125
+
126
+ /* ══════════════════════════════════════════════════════════════════════
127
+ Dark Mode
128
+ ══════════════════════════════════════════════════════════════════════ */
129
+
130
+ body.dark .loader-track {
131
+ stroke: #374151;
132
+ }
@@ -0,0 +1,193 @@
1
+ /* ProgressBar Component — Linear Track + Indicator */
2
+
3
+ /* === Host === */
4
+ :host {
5
+ display: contents;
6
+ }
7
+
8
+ /* === Wrapper === */
9
+ .progress-bar-wrapper {
10
+ display: flex;
11
+ align-items: center;
12
+ width: 100%;
13
+ gap: 8px;
14
+ }
15
+
16
+ /* === Track === */
17
+ .progress-bar-track {
18
+ position: relative;
19
+ width: 100%;
20
+ background-color: #e5e7eb;
21
+ border-radius: var(--ls-border-radius-full);
22
+ overflow: hidden;
23
+ }
24
+
25
+ /* === Size Modifiers (track height) === */
26
+ .progress-bar-sm {
27
+ height: 4px;
28
+ }
29
+
30
+ .progress-bar-md {
31
+ height: 8px;
32
+ }
33
+
34
+ .progress-bar-lg {
35
+ height: 16px;
36
+ }
37
+
38
+ .progress-bar-xl {
39
+ height: 24px;
40
+ }
41
+
42
+ /* === Indicator (fill bar) === */
43
+ .progress-bar-indicator {
44
+ height: 100%;
45
+ border-radius: var(--ls-border-radius-full);
46
+ transition: width var(--ls-transition-duration) ease;
47
+ position: relative;
48
+ }
49
+
50
+ /* === Stripe Variant === */
51
+ .progress-bar-stripe {
52
+ background-image: linear-gradient(
53
+ 45deg,
54
+ rgba(255, 255, 255, 0.15) 25%,
55
+ transparent 25%,
56
+ transparent 50%,
57
+ rgba(255, 255, 255, 0.15) 50%,
58
+ rgba(255, 255, 255, 0.15) 75%,
59
+ transparent 75%,
60
+ transparent
61
+ );
62
+ background-size: 1rem 1rem;
63
+ }
64
+
65
+ /* === Animated Variant (stripe + moving) === */
66
+ .progress-bar-animated {
67
+ background-image: linear-gradient(
68
+ 45deg,
69
+ rgba(255, 255, 255, 0.15) 25%,
70
+ transparent 25%,
71
+ transparent 50%,
72
+ rgba(255, 255, 255, 0.15) 50%,
73
+ rgba(255, 255, 255, 0.15) 75%,
74
+ transparent 75%,
75
+ transparent
76
+ );
77
+ background-size: 1rem 1rem;
78
+ animation: ls-progress-bar-stripes 1s linear infinite;
79
+ }
80
+
81
+ /* === Indeterminate Variant === */
82
+ .progress-bar-indeterminate {
83
+ /* Modificado para mayor fluidez visual */
84
+ animation: ls-progress-bar-indeterminate 1.5s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;
85
+ width: 35% !important;
86
+ position: absolute;
87
+ }
88
+
89
+ /* === Animations === */
90
+ @keyframes ls-progress-bar-stripes {
91
+ 0% {
92
+ background-position: 1rem 0;
93
+ }
94
+ 100% {
95
+ background-position: 0 0;
96
+ }
97
+ }
98
+
99
+ @keyframes ls-progress-bar-indeterminate {
100
+ 0% {
101
+ transform: translateX(-100%);
102
+ }
103
+ 100% {
104
+ /* Modificado a 300% para que el barrido cubra todo el track */
105
+ transform: translateX(300%);
106
+ }
107
+ }
108
+
109
+ /* === Label === */
110
+ .progress-bar-label {
111
+ font-size: 0.625rem;
112
+ font-weight: 600;
113
+ white-space: nowrap;
114
+ line-height: 1;
115
+ }
116
+
117
+ .progress-bar-label-inside {
118
+ position: absolute;
119
+ top: 50%;
120
+ transform: translate(-100%, -50%);
121
+ margin-left: -4px;
122
+ z-index: 2;
123
+ transition: left var(--ls-transition-duration) ease;
124
+ pointer-events: none;
125
+ }
126
+
127
+ .progress-bar-label-dark.progress-bar-label-inside {
128
+ transform: translate(4px, -50%);
129
+ }
130
+
131
+ .progress-bar-label-right {
132
+ flex-shrink: 0;
133
+ font-size: 0.75rem;
134
+ color: #1f2937;
135
+ }
136
+
137
+ /* === Label Contrast === */
138
+ .progress-bar-label-dark {
139
+ color: #1f2937;
140
+ }
141
+
142
+ .progress-bar-label-light {
143
+ color: #ffffff;
144
+ }
145
+
146
+ /* ══════════════════════════════════════════════════════════════════════
147
+ Color Modifiers (background-color)
148
+ ══════════════════════════════════════════════════════════════════════ */
149
+
150
+ .progress-bar-primary {
151
+ background-color: var(--ls-color-primary);
152
+ }
153
+
154
+ .progress-bar-secondary {
155
+ background-color: var(--ls-color-secondary);
156
+ }
157
+
158
+ .progress-bar-error {
159
+ background-color: var(--ls-color-danger);
160
+ }
161
+
162
+ .progress-bar-info {
163
+ background-color: var(--ls-color-info);
164
+ }
165
+
166
+ .progress-bar-success {
167
+ background-color: var(--ls-color-success);
168
+ }
169
+
170
+ .progress-bar-warning {
171
+ background-color: var(--ls-color-warning);
172
+ }
173
+
174
+ .progress-bar-inherit {
175
+ background-color: currentColor;
176
+ }
177
+
178
+ /* ══════════════════════════════════════════════════════════════════════
179
+ Dark Mode
180
+ ══════════════════════════════════════════════════════════════════════ */
181
+
182
+ body.dark .progress-bar-track {
183
+ background-color: #374151;
184
+ }
185
+
186
+ body.dark .progress-bar-label-right {
187
+ color: #e5e7eb;
188
+ }
189
+
190
+ /* Agregado para visibilidad del label oscuro sobre track oscuro */
191
+ body.dark .progress-bar-label-dark {
192
+ color: #f3f4f6;
193
+ }
@@ -0,0 +1,11 @@
1
+ /* Icon Component — Pure CSS */
2
+
3
+ :host {
4
+ display: inline-flex;
5
+ align-items: center;
6
+ justify-content: center;
7
+ }
8
+
9
+ span {
10
+ display: contents;
11
+ }