@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,178 @@
1
+ /* Modal Component — Pure CSS */
2
+
3
+ /* === Host === */
4
+ :host {
5
+ display: contents;
6
+ }
7
+
8
+ /* ══════════════════════════════════════════════════════════════════════
9
+ Overlay (Backdrop)
10
+ ══════════════════════════════════════════════════════════════════════ */
11
+
12
+ .modal-overlay {
13
+ align-items: center;
14
+ background-color: var(--ls-modal-backdrop-bg);
15
+ display: flex;
16
+ inset: 0;
17
+ justify-content: center;
18
+ padding: 1rem;
19
+ position: fixed;
20
+ z-index: var(--ls-modal-z-index);
21
+ }
22
+
23
+ /* Scroll=body: backdrop is scrollable */
24
+ .modal-overlay-body {
25
+ align-items: flex-start;
26
+ overflow-y: auto;
27
+ }
28
+
29
+ /* ══════════════════════════════════════════════════════════════════════
30
+ Panel
31
+ ══════════════════════════════════════════════════════════════════════ */
32
+
33
+ .modal-panel {
34
+ background-color: var(--ls-color-white);
35
+ border-radius: var(--ls-border-radius-lg);
36
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
37
+ display: flex;
38
+ flex-direction: column;
39
+ max-height: calc(100vh - 2rem);
40
+ outline: none;
41
+ position: relative;
42
+ width: 100%;
43
+ }
44
+
45
+ /* ══════════════════════════════════════════════════════════════════════
46
+ Size Modifiers (max-width)
47
+ ══════════════════════════════════════════════════════════════════════ */
48
+
49
+ .modal-max-sm {
50
+ max-width: 24rem;
51
+ }
52
+
53
+ .modal-max-md {
54
+ max-width: 32rem;
55
+ }
56
+
57
+ .modal-max-lg {
58
+ max-width: 48rem;
59
+ }
60
+
61
+ .modal-max-xl {
62
+ max-width: 64rem;
63
+ }
64
+
65
+ .modal-max-full {
66
+ max-width: 100%;
67
+ }
68
+
69
+ /* ══════════════════════════════════════════════════════════════════════
70
+ Full Screen
71
+ ══════════════════════════════════════════════════════════════════════ */
72
+
73
+ .modal-full-screen {
74
+ border-radius: 0;
75
+ height: 100vh;
76
+ max-height: 100vh;
77
+ max-width: 100vw;
78
+ width: 100vw;
79
+ }
80
+
81
+ /* ══════════════════════════════════════════════════════════════════════
82
+ Full Width
83
+ ══════════════════════════════════════════════════════════════════════ */
84
+
85
+ .modal-full-width {
86
+ max-width: 100%;
87
+ }
88
+
89
+ /* ══════════════════════════════════════════════════════════════════════
90
+ Scroll Variants
91
+ ══════════════════════════════════════════════════════════════════════ */
92
+
93
+ /* scroll=dialog: panel height is constrained, inner content scrolls */
94
+ .modal-scroll-dialog {
95
+ max-height: calc(100vh - 2rem);
96
+ overflow: hidden;
97
+ }
98
+
99
+ /* scroll=body: panel grows to natural height, overlay scrolls */
100
+ .modal-scroll-body {
101
+ max-height: none;
102
+ }
103
+
104
+ /* ══════════════════════════════════════════════════════════════════════
105
+ Close Button
106
+ ══════════════════════════════════════════════════════════════════════ */
107
+
108
+ .modal-close-btn {
109
+ align-items: center;
110
+ background: transparent;
111
+ border: none;
112
+ border-radius: 0.25rem;
113
+ color: inherit;
114
+ cursor: pointer;
115
+ display: flex;
116
+ justify-content: center;
117
+ padding: 0.25rem;
118
+ position: absolute;
119
+ right: 0.75rem;
120
+ top: 0.75rem;
121
+ transition: background-color 0.15s;
122
+ }
123
+
124
+ .modal-close-btn:hover {
125
+ background-color: var(--ls-color-dark-light);
126
+ }
127
+
128
+ /* Prevent title text from overlapping the close button */
129
+ .modal-has-close-btn .modal-title {
130
+ padding-right: 3rem;
131
+ }
132
+
133
+ /* ══════════════════════════════════════════════════════════════════════
134
+ Subcomponent Areas
135
+ ══════════════════════════════════════════════════════════════════════ */
136
+
137
+ .modal-title {
138
+ border-bottom: 1px solid var(--ls-color-dark-light);
139
+ font-family: var(--ls-font-family);
140
+ font-size: 1.125rem;
141
+ font-weight: 700;
142
+ padding: 1.25rem 1.5rem;
143
+ }
144
+
145
+ .modal-content {
146
+ flex: 1;
147
+ overflow-y: auto;
148
+ padding: 1.5rem;
149
+ }
150
+
151
+ .modal-actions {
152
+ border-top: 1px solid var(--ls-color-dark-light);
153
+ display: flex;
154
+ gap: 0.75rem;
155
+ justify-content: flex-end;
156
+ padding: 1rem 1.5rem;
157
+ }
158
+
159
+ /* ══════════════════════════════════════════════════════════════════════
160
+ Dark Mode
161
+ ══════════════════════════════════════════════════════════════════════ */
162
+
163
+ body.dark .modal-panel {
164
+ background-color: #1b2e4b;
165
+ box-shadow: 0 20px 60px rgba(0, 0, 0, 0.6);
166
+ }
167
+
168
+ body.dark .modal-title {
169
+ border-bottom-color: #253958;
170
+ }
171
+
172
+ body.dark .modal-actions {
173
+ border-top-color: #253958;
174
+ }
175
+
176
+ body.dark .modal-close-btn:hover {
177
+ background-color: #253958;
178
+ }
@@ -0,0 +1,112 @@
1
+ /* Popover Component -- Pure CSS */
2
+
3
+ :host {
4
+ display: contents;
5
+ }
6
+
7
+ .popover-panel {
8
+ position: fixed;
9
+ top: var(--popover-top, 0);
10
+ left: var(--popover-left, 0);
11
+ z-index: 1050;
12
+ background: var(--ls-color-white, #fff);
13
+ border: 1px solid var(--ls-color-border, #e0e6ed);
14
+ border-radius: 8px;
15
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
16
+ padding: 12px 16px;
17
+ animation-duration: 150ms;
18
+ animation-fill-mode: both;
19
+ animation-timing-function: ease-out;
20
+ }
21
+
22
+ /* Enter animation */
23
+ .popover-enter {
24
+ animation-name: popoverFadeIn;
25
+ }
26
+
27
+ /* Exit animation */
28
+ .popover-exit {
29
+ animation-name: popoverFadeOut;
30
+ }
31
+
32
+ @keyframes popoverFadeIn {
33
+ from {
34
+ opacity: 0;
35
+ transform: translateY(4px);
36
+ }
37
+ to {
38
+ opacity: 1;
39
+ transform: translateY(0);
40
+ }
41
+ }
42
+
43
+ @keyframes popoverFadeOut {
44
+ from {
45
+ opacity: 1;
46
+ transform: translateY(0);
47
+ }
48
+ to {
49
+ opacity: 0;
50
+ transform: translateY(4px);
51
+ }
52
+ }
53
+
54
+ /* Arrow */
55
+ .popover-arrow {
56
+ position: absolute;
57
+ width: 10px;
58
+ height: 10px;
59
+ background: inherit;
60
+ border: inherit;
61
+ transform: rotate(45deg);
62
+ z-index: -1; /* Esto es clave: se mete detrás del panel */
63
+ }
64
+
65
+ .popover-arrow-top {
66
+ bottom: -6px; /* Ajuste fino de -5 a -6 */
67
+ left: 50%;
68
+ margin-left: -5px;
69
+ border-top: 0;
70
+ border-left: 0;
71
+ }
72
+
73
+ .popover-arrow-bottom {
74
+ top: -6px; /* Ajuste fino de -5 a -6 */
75
+ left: 50%;
76
+ margin-left: -5px;
77
+ border-bottom: 0;
78
+ border-right: 0;
79
+ }
80
+
81
+ /* AQUÍ ESTÁ EL CAMBIO IMPORTANTE */
82
+ .popover-arrow-left {
83
+ right: -6px; /* Ajuste para que se esconda el rombo */
84
+ top: 50%;
85
+ margin-top: -5px;
86
+ border-bottom: 0; /* Cambiamos qué bordes ocultamos para laterales */
87
+ border-left: 0;
88
+ }
89
+
90
+ .popover-arrow-right {
91
+ left: -6px; /* Ajuste para que se esconda el rombo */
92
+ top: 50%;
93
+ margin-top: -5px;
94
+ border-top: 0; /* Cambiamos qué bordes ocultamos para laterales */
95
+ border-right: 0;
96
+ }
97
+
98
+ /* Dark mode */
99
+ /* Opción A: La forma recomendada por Angular */
100
+ :host-context(body.dark) .popover-panel {
101
+ background: #1b2e4b !important; /* Forzamos el color oscuro de fondo */
102
+ border-color: #253b5c !important;
103
+ color: #e0e6ed !important; /* Texto claro para que contraste */
104
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.5) !important;
105
+ }
106
+
107
+ /* Opción B: Si el body tiene la clase directamente */
108
+ :host-context(.dark) .popover-panel {
109
+ background: #1b2e4b !important;
110
+ border-color: #253b5c !important;
111
+ color: #e0e6ed !important;
112
+ }
@@ -0,0 +1,172 @@
1
+ /* Tooltip Component — Pure CSS */
2
+
3
+ /* === Host === */
4
+ :host {
5
+ display: contents;
6
+ }
7
+
8
+ /* === Trigger === */
9
+ .ls-tooltip-trigger {
10
+ position: relative;
11
+ display: inline-flex;
12
+ }
13
+
14
+ .ls-tooltip-disabled {
15
+ pointer-events: none;
16
+ }
17
+
18
+ /* === Tooltip Box === */
19
+ .tooltip-box {
20
+ position: absolute;
21
+ z-index: 10;
22
+ padding: 2px 8px;
23
+ border-radius: 6px;
24
+ font-family: var(--ls-font-family);
25
+ font-size: 0.800rem;
26
+ font-weight: 500;
27
+ white-space: nowrap;
28
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
29
+ pointer-events: none;
30
+ animation: tooltip-fade-in var(--ls-transition-duration) ease forwards;
31
+ }
32
+
33
+ /* === Animation === */
34
+ @keyframes tooltip-fade-in {
35
+ from {
36
+ opacity: 0;
37
+ }
38
+ to {
39
+ opacity: 1;
40
+ }
41
+ }
42
+
43
+ /* ══════════════════════════════════════════════════════════════════════
44
+ Placement Modifiers
45
+ ══════════════════════════════════════════════════════════════════════ */
46
+
47
+ .tooltip-top {
48
+ bottom: calc(100% + 8px);
49
+ left: 50%;
50
+ transform: translateX(-50%);
51
+ }
52
+
53
+ .tooltip-bottom {
54
+ top: calc(100% + 8px);
55
+ left: 50%;
56
+ transform: translateX(-50%);
57
+ }
58
+
59
+ .tooltip-left {
60
+ right: calc(100% + 8px);
61
+ top: 50%;
62
+ transform: translateY(-50%);
63
+ }
64
+
65
+ .tooltip-right {
66
+ left: calc(100% + 8px);
67
+ top: 50%;
68
+ transform: translateY(-50%);
69
+ }
70
+
71
+ /* ══════════════════════════════════════════════════════════════════════
72
+ Arrow
73
+ ══════════════════════════════════════════════════════════════════════ */
74
+
75
+ .tooltip-arrow {
76
+ position: absolute;
77
+ width: 0;
78
+ height: 0;
79
+ border: 6px solid transparent;
80
+ }
81
+
82
+ /* Arrow for top placement — arrow at bottom */
83
+ .tooltip-top .tooltip-arrow {
84
+ bottom: -6px;
85
+ left: 50%;
86
+ transform: translateX(-50%);
87
+ border-bottom: none;
88
+ border-top-color: inherit;
89
+ }
90
+
91
+ /* Arrow for bottom placement — arrow at top */
92
+ .tooltip-bottom .tooltip-arrow {
93
+ top: -6px;
94
+ left: 50%;
95
+ transform: translateX(-50%);
96
+ border-top: none;
97
+ border-bottom-color: inherit;
98
+ }
99
+
100
+ /* Arrow for left placement — arrow at right */
101
+ .tooltip-left .tooltip-arrow {
102
+ right: -6px;
103
+ top: 50%;
104
+ transform: translateY(-50%);
105
+ border-right: none;
106
+ border-left-color: inherit;
107
+ }
108
+
109
+ /* Arrow for right placement — arrow at left */
110
+ .tooltip-right .tooltip-arrow {
111
+ left: -6px;
112
+ top: 50%;
113
+ transform: translateY(-50%);
114
+ border-left: none;
115
+ border-right-color: inherit;
116
+ }
117
+
118
+ /* ══════════════════════════════════════════════════════════════════════
119
+ Background Classes
120
+ ══════════════════════════════════════════════════════════════════════ */
121
+
122
+ .tooltip-bg-primary {
123
+ background-color: var(--ls-color-primary);
124
+ color: #ffffff;
125
+ border-color: var(--ls-color-primary);
126
+ }
127
+
128
+ .tooltip-bg-success {
129
+ background-color: var(--ls-color-success);
130
+ color: #ffffff;
131
+ border-color: var(--ls-color-success);
132
+ }
133
+
134
+ .tooltip-bg-info {
135
+ background-color: var(--ls-color-info);
136
+ color: #ffffff;
137
+ border-color: var(--ls-color-info);
138
+ }
139
+
140
+ .tooltip-bg-danger {
141
+ background-color: var(--ls-color-danger);
142
+ color: #ffffff;
143
+ border-color: var(--ls-color-danger);
144
+ }
145
+
146
+ .tooltip-bg-warning {
147
+ background-color: var(--ls-color-warning);
148
+ color: #ffffff;
149
+ border-color: var(--ls-color-warning);
150
+ }
151
+
152
+ .tooltip-bg-secondary {
153
+ background-color: var(--ls-color-secondary);
154
+ color: #ffffff;
155
+ border-color: var(--ls-color-secondary);
156
+ }
157
+
158
+ .tooltip-bg-dark {
159
+ background-color: var(--ls-color-dark);
160
+ color: #ffffff;
161
+ border-color: var(--ls-color-dark);
162
+ }
163
+
164
+ /* ══════════════════════════════════════════════════════════════════════
165
+ Dark Mode
166
+ ══════════════════════════════════════════════════════════════════════ */
167
+
168
+ body.dark .tooltip-bg-dark {
169
+ background-color: #e0e6ed;
170
+ color: var(--ls-color-dark);
171
+ border-color: #e0e6ed;
172
+ }
@@ -0,0 +1,10 @@
1
+ /* Lumston Design System — Base / Keyframes */
2
+
3
+ @keyframes ls-spin {
4
+ from {
5
+ transform: rotate(0deg);
6
+ }
7
+ to {
8
+ transform: rotate(360deg);
9
+ }
10
+ }
@@ -0,0 +1,75 @@
1
+ /* Lumston Design System — Design Tokens */
2
+
3
+ :root {
4
+ /* Primary */
5
+ --ls-color-primary: #4361ee;
6
+ --ls-color-primary-light: #eaf1ff;
7
+ --ls-color-primary-dark-light: rgba(67, 97, 238, 0.15);
8
+
9
+ /* Secondary */
10
+ --ls-color-secondary: #805dca;
11
+ --ls-color-secondary-light: #ebe4f7;
12
+ --ls-color-secondary-dark-light: rgb(128 93 202 / 15%);
13
+
14
+ /* Success */
15
+ --ls-color-success: #00ab55;
16
+ --ls-color-success-light: #ddf5f0;
17
+ --ls-color-success-dark-light: rgba(0, 171, 85, 0.15);
18
+
19
+ /* Danger */
20
+ --ls-color-danger: #e7515a;
21
+ --ls-color-danger-light: #fff5f5;
22
+ --ls-color-danger-dark-light: rgba(231, 81, 90, 0.15);
23
+
24
+ /* Error (alias of Danger) */
25
+ --ls-color-error: #e7515a;
26
+ --ls-color-error-light: #fff5f5;
27
+ --ls-color-error-dark-light: rgba(231, 81, 90, 0.15);
28
+
29
+ /* Warning */
30
+ --ls-color-warning: #e2a03f;
31
+ --ls-color-warning-light: #fff9ed;
32
+ --ls-color-warning-dark-light: rgba(226, 160, 63, 0.15);
33
+
34
+ /* Info */
35
+ --ls-color-info: #2196f3;
36
+ --ls-color-info-light: #e7f7ff;
37
+ --ls-color-info-dark-light: rgba(33, 150, 243, 0.15);
38
+
39
+ /* Dark */
40
+ --ls-color-dark: #3b3f5c;
41
+ --ls-color-dark-light: #eaeaec;
42
+ --ls-color-dark-dark-light: rgba(59, 63, 92, 0.15);
43
+
44
+ /* Black */
45
+ --ls-color-black: #0e1726;
46
+ --ls-color-black-light: #e3e4eb;
47
+ --ls-color-black-dark-light: rgba(14, 23, 38, 0.15);
48
+
49
+ /* White */
50
+ --ls-color-white: #ffffff;
51
+ --ls-color-white-light: #e0e6ed;
52
+ --ls-color-white-dark: #888ea8;
53
+
54
+ /* Typography */
55
+ --ls-font-family: 'Nunito', sans-serif;
56
+
57
+ /* Transitions */
58
+ --ls-transition-duration: 300ms;
59
+
60
+ /* Border radius */
61
+ --ls-border-radius-md: 0.375rem;
62
+ --ls-border-radius-lg: 0.5rem;
63
+ --ls-border-radius-full: 9999px;
64
+
65
+ /* Modal */
66
+ --ls-modal-z-index: 1000;
67
+ --ls-modal-backdrop-bg: rgba(0, 0, 0, 0.5);
68
+
69
+ /* Menu */
70
+ --ls-menu-z-index: 1001;
71
+
72
+ /* Gradient */
73
+ --ls-gradient-start: #ef1262;
74
+ --ls-gradient-end: #4361ee;
75
+ }
@@ -0,0 +1,28 @@
1
+ /* Lumston Design System — All Styles */
2
+
3
+ @import './_tokens.css';
4
+ @import './_base.css';
5
+ @import "./inputs/button/button.styles.css"
6
+ /* @import '../inputs/button/button.styles.css';
7
+ @import '../inputs/checkbox/checkbox.styles.css';
8
+ @import '../inputs/icon-button/icon-button.styles.css';
9
+ @import '../inputs/radio-button/radio-button.styles.css';
10
+ @import '../inputs/slider/slider.styles.css';
11
+ @import '../inputs/switch/switch.styles.css';
12
+ @import '../typography/text/text.styles.css';
13
+ @import '../typography/tag/tag.styles.css';
14
+ @import '../typography/link/link.styles.css';
15
+ @import '../feedback/loader/loader.styles.css';
16
+ @import '../overlay/tooltip/tooltip.styles.css';
17
+ @import '../media/avatar/avatar.styles.css';
18
+ @import '../media/avatar-group/avatar-group.styles.css';
19
+ @import '../media/logo/logo.styles.css';
20
+ @import '../data-display/badge/badge.styles.css';
21
+ @import '../data-display/chip/chip.styles.css';
22
+ @import '../feedback/progress-bar/progress-bar.styles.css';
23
+ @import '../feedback/alert/alert.styles.css';
24
+ @import '../overlay/modal/modal.styles.css';
25
+ @import '../overlay/popover/popover.styles.css';
26
+ @import '../navigation/pagination/pagination.styles.css';
27
+ @import '../navigation/breadcrumb/breadcrumb.styles.css';
28
+ @import '../overlay/menu/menu.styles.css'; */
@@ -0,0 +1,93 @@
1
+ /* Link Component — Pure CSS */
2
+
3
+ :host {
4
+ display: contents;
5
+ }
6
+
7
+ .link.text {
8
+ display: inline;
9
+ margin: 0;
10
+ cursor: pointer;
11
+ transition: color var(--ls-transition-duration),
12
+ text-decoration var(--ls-transition-duration);
13
+ }
14
+
15
+ /* ── Link colors ── */
16
+
17
+ .link-color-inherit {
18
+ color: inherit;
19
+ }
20
+
21
+ .link-color-primary {
22
+ color: var(--ls-color-primary);
23
+ }
24
+
25
+ .link-color-secondary {
26
+ color: var(--ls-color-secondary);
27
+ }
28
+
29
+ .link-color-success {
30
+ color: var(--ls-color-success);
31
+ }
32
+
33
+ .link-color-error {
34
+ color: var(--ls-color-danger);
35
+ }
36
+
37
+ .link-color-info {
38
+ color: var(--ls-color-info);
39
+ }
40
+
41
+ .link-color-warning {
42
+ color: var(--ls-color-warning);
43
+ }
44
+
45
+ /* ── Hover states ── */
46
+
47
+ .link-color-primary:hover {
48
+ opacity: 0.8;
49
+ }
50
+
51
+ .link-color-secondary:hover {
52
+ opacity: 0.8;
53
+ }
54
+
55
+ .link-color-success:hover {
56
+ opacity: 0.8;
57
+ }
58
+
59
+ .link-color-error:hover {
60
+ opacity: 0.8;
61
+ }
62
+
63
+ .link-color-info:hover {
64
+ opacity: 0.8;
65
+ }
66
+
67
+ .link-color-warning:hover {
68
+ opacity: 0.8;
69
+ }
70
+
71
+ /* ── Underline styles ── */
72
+
73
+ .link-underline-always {
74
+ text-decoration: underline;
75
+ }
76
+
77
+ .link-underline-hover {
78
+ text-decoration: none;
79
+ }
80
+
81
+ .link-underline-hover:hover {
82
+ text-decoration: underline;
83
+ }
84
+
85
+ .link-underline-none {
86
+ text-decoration: none;
87
+ }
88
+
89
+ /* ── Dark mode ── */
90
+
91
+ body.dark .link-color-inherit {
92
+ color: #e0e6ed;
93
+ }