ngx-strata 0.5.0 → 0.5.2

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/assets/styles/components/_breadcrumb.scss +4 -0
  2. package/assets/styles/components/_number-stepper.scss +260 -0
  3. package/assets/styles/components/_skeleton.scss +115 -0
  4. package/assets/styles/components/action-menu.scss +20 -2
  5. package/assets/styles/components/input-field.scss +19 -2
  6. package/assets/styles/components/item.scss +15 -2
  7. package/assets/styles/components/modal.scss +237 -22
  8. package/assets/styles/components/notification.scss +287 -41
  9. package/assets/styles/components/segmented-control.scss +20 -0
  10. package/assets/styles/components/select.scss +18 -0
  11. package/assets/styles/components/sidemenu.scss +8 -1
  12. package/assets/styles/components/tabs.scss +7 -0
  13. package/assets/styles/public-api.scss +2 -0
  14. package/assets/styles/semantics/color-semantic.scss +8 -0
  15. package/dist/strata/strata.css +1 -1
  16. package/fesm2022/ngx-strata.mjs +695 -51
  17. package/fesm2022/ngx-strata.mjs.map +1 -1
  18. package/package.json +1 -1
  19. package/skills/ngx-strata/SKILL.md +5 -1
  20. package/skills/ngx-strata/components/badge.md +24 -0
  21. package/skills/ngx-strata/components/breadcrumb.md +4 -1
  22. package/skills/ngx-strata/components/item.md +21 -9
  23. package/skills/ngx-strata/components/modal.md +36 -5
  24. package/skills/ngx-strata/components/notification.md +51 -5
  25. package/skills/ngx-strata/components/number-stepper.md +84 -0
  26. package/skills/ngx-strata/components/segmented-control.md +3 -0
  27. package/skills/ngx-strata/components/skeleton.md +59 -0
  28. package/skills/ngx-strata/components/tabs.md +6 -1
  29. package/types/ngx-strata.d.ts +200 -17
@@ -35,6 +35,10 @@
35
35
  border-radius: var(--st-border-radius-sm, 4px);
36
36
  outline-offset: 2px;
37
37
 
38
+ st-badge {
39
+ flex-shrink: 0;
40
+ }
41
+
38
42
  &:focus-visible {
39
43
  outline: 2px solid var(--st-color-accent-default);
40
44
  }
@@ -0,0 +1,260 @@
1
+ st-number-stepper {
2
+ --st-number-stepper-bg-color: var(--st-color-bg-raised);
3
+ --st-number-stepper-bg-hover-color: var(--st-color-input-hover);
4
+ --st-number-stepper-text-color: var(--st-color-text-primary);
5
+ --st-number-stepper-border-color: var(--st-border-muted);
6
+ --st-number-stepper-border-hover-color: var(--st-color-border-strong);
7
+ --st-number-stepper-opacity-disabled: 0.55;
8
+ --st-number-stepper-height: var(--st-interactive-element-height-md);
9
+ --st-number-stepper-font-size: var(--st-font-md);
10
+ --st-number-stepper-border-radius: var(--st-border-radius-md);
11
+ --st-number-stepper-btn-width: var(--st-interactive-element-height-md);
12
+ --st-number-stepper-btn-bg: transparent;
13
+ --st-number-stepper-btn-hover-bg: var(--st-color-control-bg-hover);
14
+ --st-number-stepper-btn-active-bg: var(--st-color-control-bg-active);
15
+ --st-number-stepper-btn-color: var(--st-color-text-secondary);
16
+ --st-number-stepper-btn-hover-color: var(--st-color-text-primary);
17
+ --st-number-stepper-btn-icon-size: var(--st-font-md);
18
+ --st-number-stepper-footer-font-size: var(--st-font-sm);
19
+
20
+ display: flex;
21
+ flex-direction: column;
22
+ box-sizing: border-box;
23
+
24
+ label {
25
+ margin-bottom: var(--st-space-2);
26
+ }
27
+
28
+ &.st-size-sm {
29
+ --st-number-stepper-height: var(--st-interactive-element-height-sm);
30
+ --st-number-stepper-font-size: var(--st-font-sm);
31
+ --st-number-stepper-border-radius: var(--st-border-radius-sm);
32
+ --st-number-stepper-btn-width: var(--st-interactive-element-height-sm);
33
+ --st-number-stepper-btn-icon-size: var(--st-font-sm);
34
+ --st-number-stepper-footer-font-size: var(--st-font-xs);
35
+ }
36
+
37
+ &.st-size-md {
38
+ --st-number-stepper-height: var(--st-interactive-element-height-md);
39
+ --st-number-stepper-font-size: var(--st-font-md);
40
+ --st-number-stepper-border-radius: var(--st-border-radius-md);
41
+ --st-number-stepper-btn-width: var(--st-interactive-element-height-md);
42
+ --st-number-stepper-btn-icon-size: var(--st-font-md);
43
+ --st-number-stepper-footer-font-size: var(--st-font-sm);
44
+ }
45
+
46
+ &.st-size-lg {
47
+ --st-number-stepper-height: var(--st-interactive-element-height-lg);
48
+ --st-number-stepper-font-size: var(--st-font-md);
49
+ --st-number-stepper-border-radius: var(--st-border-radius-md);
50
+ --st-number-stepper-btn-width: var(--st-interactive-element-height-lg);
51
+ --st-number-stepper-btn-icon-size: var(--st-font-lg);
52
+ --st-number-stepper-footer-font-size: var(--st-font-sm);
53
+ }
54
+
55
+ .st-stepper-wrapper {
56
+ position: relative;
57
+ display: flex;
58
+ flex-direction: row;
59
+ align-items: stretch;
60
+ box-sizing: border-box;
61
+ height: var(--st-number-stepper-height);
62
+ min-height: var(--st-number-stepper-height);
63
+ background-color: var(--st-number-stepper-bg-color);
64
+ border: 1px solid var(--st-number-stepper-border-color);
65
+ border-radius: var(--st-number-stepper-border-radius);
66
+ overflow: hidden;
67
+ transition:
68
+ border-color var(--st-transition-fast),
69
+ background-color var(--st-transition-fast),
70
+ box-shadow var(--st-transition-fast);
71
+
72
+ &:focus-within {
73
+ outline: var(--st-focus-ring-width) var(--st-focus-ring-style) var(--st-focus-ring-color);
74
+ outline-offset: var(--st-focus-ring-offset);
75
+ }
76
+
77
+ &:hover {
78
+ background-color: var(--st-number-stepper-bg-hover-color);
79
+ border-color: var(--st-number-stepper-border-hover-color);
80
+ }
81
+ }
82
+
83
+ input {
84
+ border: none;
85
+ background: none;
86
+ flex: 1;
87
+ min-width: 0;
88
+ width: 100%;
89
+ height: 100%;
90
+ color: var(--st-number-stepper-text-color);
91
+ font-size: var(--st-number-stepper-font-size);
92
+ font-family: inherit;
93
+ font-variant-numeric: tabular-nums;
94
+ text-align: center;
95
+ padding: 0 var(--st-space-2);
96
+ box-sizing: border-box;
97
+
98
+ &:focus-visible {
99
+ outline: none;
100
+ }
101
+ }
102
+
103
+ .st-stepper-btn {
104
+ border: none;
105
+ background: var(--st-number-stepper-btn-bg);
106
+ color: var(--st-number-stepper-btn-color);
107
+ cursor: pointer;
108
+ display: inline-flex;
109
+ align-items: center;
110
+ justify-content: center;
111
+ padding: 0;
112
+ transition:
113
+ background-color var(--st-transition-fast),
114
+ color var(--st-transition-fast);
115
+ user-select: none;
116
+
117
+ &:hover:not(:disabled) {
118
+ background-color: var(--st-number-stepper-btn-hover-bg);
119
+ color: var(--st-number-stepper-btn-hover-color);
120
+ }
121
+
122
+ &:active:not(:disabled) {
123
+ background-color: var(--st-number-stepper-btn-active-bg);
124
+ }
125
+
126
+ &:disabled {
127
+ cursor: not-allowed;
128
+ opacity: 0.4;
129
+ }
130
+
131
+ &:focus-visible {
132
+ outline: none;
133
+ }
134
+ }
135
+
136
+ &.st-layout-split {
137
+ .st-stepper-btn {
138
+ width: var(--st-number-stepper-btn-width);
139
+ min-width: var(--st-number-stepper-btn-width);
140
+ height: 100%;
141
+
142
+ st-icon {
143
+ font-size: var(--st-number-stepper-btn-icon-size);
144
+ }
145
+ }
146
+
147
+ .st-stepper-btn-dec {
148
+ border-right: 1px solid var(--st-number-stepper-border-color);
149
+ }
150
+
151
+ .st-stepper-btn-inc {
152
+ border-left: 1px solid var(--st-number-stepper-border-color);
153
+ }
154
+ }
155
+
156
+ &.st-layout-stacked {
157
+ input {
158
+ text-align: left;
159
+ padding-left: var(--st-space-3);
160
+ }
161
+
162
+ .st-stepper-stacked-actions {
163
+ display: flex;
164
+ flex-direction: column;
165
+ width: calc(var(--st-number-stepper-btn-width) * 0.75);
166
+ min-width: calc(var(--st-number-stepper-btn-width) * 0.75);
167
+ border-left: 1px solid var(--st-number-stepper-border-color);
168
+ height: 100%;
169
+
170
+ .st-stepper-btn {
171
+ flex: 1;
172
+ width: 100%;
173
+ height: 50%;
174
+
175
+ st-icon {
176
+ font-size: calc(var(--st-number-stepper-btn-icon-size) * 0.75);
177
+ }
178
+
179
+ &.st-stepper-btn-inc {
180
+ border-bottom: 1px solid var(--st-number-stepper-border-color);
181
+ }
182
+ }
183
+ }
184
+ }
185
+
186
+ &.st-state-error,
187
+ &.st-error {
188
+ --st-number-stepper-border-color: var(--st-color-feedback-error-default);
189
+ --st-number-stepper-border-hover-color: var(--st-color-feedback-error-hover, var(--st-color-feedback-error-default));
190
+
191
+ .st-stepper-wrapper:focus-within {
192
+ outline-color: var(--st-color-feedback-error-default);
193
+ }
194
+ }
195
+
196
+ &.st-state-success {
197
+ --st-number-stepper-border-color: var(--st-color-feedback-success-default);
198
+ --st-number-stepper-border-hover-color: var(--st-color-feedback-success-hover, var(--st-color-feedback-success-default));
199
+
200
+ .st-stepper-wrapper:focus-within {
201
+ outline-color: var(--st-color-feedback-success-default);
202
+ }
203
+ }
204
+
205
+ &.st-state-warning {
206
+ --st-number-stepper-border-color: var(--st-color-feedback-warning-default);
207
+ --st-number-stepper-border-hover-color: var(--st-color-feedback-warning-hover, var(--st-color-feedback-warning-default));
208
+
209
+ .st-stepper-wrapper:focus-within {
210
+ outline-color: var(--st-color-feedback-warning-default);
211
+ }
212
+ }
213
+
214
+ .st-stepper-footer {
215
+ display: flex;
216
+ justify-content: space-between;
217
+ align-items: flex-start;
218
+ gap: var(--st-space-2);
219
+ margin-top: var(--st-space-1);
220
+ line-height: 1.25;
221
+ }
222
+
223
+ .st-stepper-message {
224
+ font-size: var(--st-number-stepper-footer-font-size);
225
+ color: var(--st-color-text-secondary);
226
+
227
+ &.st-message-error {
228
+ color: var(--st-color-feedback-error-text);
229
+ }
230
+
231
+ &.st-message-success {
232
+ color: var(--st-color-feedback-success-text);
233
+ }
234
+
235
+ &.st-message-warning {
236
+ color: var(--st-color-feedback-warning-text);
237
+ }
238
+ }
239
+
240
+ &.st-disabled,
241
+ &[disabled],
242
+ &[data-disabled='true'],
243
+ &:has(input:disabled),
244
+ &:has([aria-disabled='true']) {
245
+ cursor: not-allowed;
246
+ opacity: var(--st-number-stepper-opacity-disabled);
247
+ pointer-events: none;
248
+
249
+ .st-stepper-wrapper {
250
+ &:hover {
251
+ background-color: var(--st-number-stepper-bg-color);
252
+ border-color: var(--st-number-stepper-border-color);
253
+ }
254
+
255
+ &:focus-within {
256
+ outline: none;
257
+ }
258
+ }
259
+ }
260
+ }
@@ -0,0 +1,115 @@
1
+ st-skeleton {
2
+ --st-skeleton-bg: var(--st-color-skeleton-bg);
3
+ --st-skeleton-shimmer: var(--st-color-skeleton-shimmer);
4
+ --st-skeleton-radius: var(--st-border-radius-sm);
5
+ --st-skeleton-gap: var(--st-space-2);
6
+ --st-skeleton-height: 1.15em;
7
+ --st-skeleton-animation-duration: 1.6s;
8
+
9
+ display: block;
10
+ box-sizing: border-box;
11
+ width: 100%;
12
+
13
+ &.st-skeleton-xs {
14
+ --st-skeleton-height: 20px;
15
+ --st-skeleton-size: 20px;
16
+ }
17
+
18
+ &.st-skeleton-sm {
19
+ --st-skeleton-height: 32px;
20
+ --st-skeleton-size: 32px;
21
+ }
22
+
23
+ &.st-skeleton-md {
24
+ --st-skeleton-height: 48px;
25
+ --st-skeleton-size: 48px;
26
+ }
27
+
28
+ &.st-skeleton-lg {
29
+ --st-skeleton-height: 72px;
30
+ --st-skeleton-size: 72px;
31
+ }
32
+
33
+ &.st-skeleton-circular {
34
+ --st-skeleton-radius: var(--st-border-radius-full);
35
+ --st-skeleton-height: var(--st-skeleton-size, 48px);
36
+ display: inline-block;
37
+ width: auto;
38
+
39
+ .st-skeleton-bone {
40
+ width: var(--st-skeleton-height);
41
+ height: var(--st-skeleton-height);
42
+ aspect-ratio: 1 / 1;
43
+ }
44
+ }
45
+
46
+ &.st-skeleton-rectangular {
47
+ --st-skeleton-radius: var(--st-border-radius-md);
48
+ --st-skeleton-height: 120px;
49
+ }
50
+
51
+ &.st-skeleton-rounded {
52
+ --st-skeleton-radius: var(--st-border-radius-full);
53
+ --st-skeleton-height: var(--st-skeleton-size, 36px);
54
+ }
55
+
56
+ .st-skeleton-group {
57
+ display: flex;
58
+ flex-direction: column;
59
+ gap: var(--st-skeleton-gap);
60
+ width: 100%;
61
+ }
62
+
63
+ .st-skeleton-bone {
64
+ box-sizing: border-box;
65
+ width: 100%;
66
+ min-height: 8px;
67
+ height: var(--st-skeleton-height);
68
+ border-radius: var(--st-skeleton-radius);
69
+ background-color: var(--st-skeleton-bg);
70
+ }
71
+
72
+ &.st-skeleton-anim-shimmer .st-skeleton-bone {
73
+ background-image: linear-gradient(
74
+ 90deg,
75
+ var(--st-skeleton-bg) 0%,
76
+ var(--st-skeleton-shimmer) 50%,
77
+ var(--st-skeleton-bg) 100%
78
+ );
79
+ background-size: 200% 100%;
80
+ background-repeat: no-repeat;
81
+ animation: st-skeleton-shimmer var(--st-skeleton-animation-duration) ease-in-out infinite;
82
+ }
83
+
84
+ &.st-skeleton-anim-pulse .st-skeleton-bone {
85
+ animation: st-skeleton-pulse var(--st-skeleton-animation-duration) ease-in-out infinite;
86
+ }
87
+
88
+ &.st-skeleton-anim-none .st-skeleton-bone {
89
+ animation: none;
90
+ }
91
+
92
+ @media (prefers-reduced-motion: reduce) {
93
+ .st-skeleton-bone {
94
+ animation: none !important;
95
+ }
96
+ }
97
+ }
98
+
99
+ @keyframes st-skeleton-shimmer {
100
+ 0% {
101
+ background-position: 200% 0;
102
+ }
103
+ 100% {
104
+ background-position: -200% 0;
105
+ }
106
+ }
107
+
108
+ @keyframes st-skeleton-pulse {
109
+ 0%, 100% {
110
+ opacity: 1;
111
+ }
112
+ 50% {
113
+ opacity: 0.4;
114
+ }
115
+ }
@@ -1,4 +1,8 @@
1
1
  st-action-menu-item {
2
+ --st-action-menu-item-bg: transparent;
3
+ --st-action-menu-item-hover-bg: var(--st-color-control-bg-hover);
4
+ --st-action-menu-item-hover-label-color: var(--st-color-text-secondary);
5
+ --st-action-menu-item-border-radius: var(--st-border-radius-sm);
2
6
  box-sizing: border-box;
3
7
  --st-item-gap: var(--st-size-xs);
4
8
  width: 100%;
@@ -7,13 +11,23 @@ st-action-menu-item {
7
11
  padding: 6px 10px;
8
12
  min-height: var(--st-interactive-element-height-md);
9
13
  height: fit-content;
10
- border-radius: var(--st-border-radius-sm);
14
+ border-radius: var(--st-action-menu-item-border-radius);
15
+ background-color: var(--st-action-menu-item-bg);
11
16
  user-select: none;
12
17
  transition: background-color var(--st-transition-fast), color var(--st-transition-fast);
13
18
 
19
+ .st-label {
20
+ transition: color var(--st-transition-fast);
21
+ }
22
+
14
23
  &:hover {
15
- background-color: var(--st-color-control-bg-hover);
24
+ background-color: var(--st-action-menu-item-hover-bg);
16
25
  cursor: pointer;
26
+
27
+ &.st-label,
28
+ .st-label {
29
+ color: var(--st-action-menu-item-hover-label-color);
30
+ }
17
31
  }
18
32
 
19
33
  &.active {
@@ -27,6 +41,10 @@ st-action-menu-item {
27
41
  display: flex;
28
42
  align-items: center;
29
43
  height: auto;
44
+
45
+ st-badge {
46
+ flex-shrink: 0;
47
+ }
30
48
  }
31
49
 
32
50
  .item-start:not(:empty) {
@@ -1,8 +1,9 @@
1
1
  st-input-field {
2
2
  --st-input-field-bg-color: var(--st-color-bg-raised);
3
- --st-input-field-bg-hover-color: var(--st-color-bg-raised);
3
+ --st-input-field-bg-hover-color: var(--st-color-input-hover);
4
4
  --st-input-field-text-color: var(--st-color-text-primary);
5
5
  --st-input-field-border-color: var(--st-border-muted);
6
+ --st-input-field-border-hover-color: var(--st-color-border-strong);
6
7
  --st-input-field-opacity-disabled: 0.55;
7
8
  --st-input-field-height: var(--st-interactive-element-height-md);
8
9
  --st-input-field-font-size: var(--st-font-md);
@@ -61,8 +62,9 @@ st-input-field {
61
62
  outline: var(--st-focus-ring-width) var(--st-focus-ring-style) var(--st-focus-ring-color);
62
63
  outline-offset: var(--st-focus-ring-offset);
63
64
  }
64
- &:hover:not(:has(.affix:hover)) {
65
+ &:hover {
65
66
  background-color: var(--st-input-field-bg-hover-color);
67
+ border-color: var(--st-input-field-border-hover-color);
66
68
  }
67
69
  &:has(textarea) {
68
70
  height: auto;
@@ -153,11 +155,23 @@ st-input-field {
153
155
  &:focus-visible {
154
156
  outline: none;
155
157
  }
158
+
159
+ &[type='number'] {
160
+ appearance: textfield;
161
+ -moz-appearance: textfield;
162
+
163
+ &::-webkit-inner-spin-button,
164
+ &::-webkit-outer-spin-button {
165
+ -webkit-appearance: none;
166
+ margin: 0;
167
+ }
168
+ }
156
169
  }
157
170
 
158
171
  &.st-state-error,
159
172
  &.st-error {
160
173
  --st-input-field-border-color: var(--st-color-feedback-error-default);
174
+ --st-input-field-border-hover-color: var(--st-color-feedback-error-hover, var(--st-color-feedback-error-default));
161
175
 
162
176
  .st-input-wrapper:focus-within {
163
177
  outline-color: var(--st-color-feedback-error-default);
@@ -166,6 +180,7 @@ st-input-field {
166
180
 
167
181
  &.st-state-success {
168
182
  --st-input-field-border-color: var(--st-color-feedback-success-default);
183
+ --st-input-field-border-hover-color: var(--st-color-feedback-success-hover, var(--st-color-feedback-success-default));
169
184
 
170
185
  .st-input-wrapper:focus-within {
171
186
  outline-color: var(--st-color-feedback-success-default);
@@ -174,6 +189,7 @@ st-input-field {
174
189
 
175
190
  &.st-state-warning {
176
191
  --st-input-field-border-color: var(--st-color-feedback-warning-default);
192
+ --st-input-field-border-hover-color: var(--st-color-feedback-warning-hover, var(--st-color-feedback-warning-default));
177
193
 
178
194
  .st-input-wrapper:focus-within {
179
195
  outline-color: var(--st-color-feedback-warning-default);
@@ -228,6 +244,7 @@ st-input-field {
228
244
  .st-input-wrapper {
229
245
  &:hover {
230
246
  background-color: var(--st-input-field-bg-color);
247
+ border-color: var(--st-input-field-border-color);
231
248
  }
232
249
 
233
250
  &:focus-within {
@@ -1,7 +1,10 @@
1
1
  st-item {
2
+ --st-item-bg: transparent;
3
+ --st-item-hover-bg: var(--st-color-control-bg-hover);
4
+ --st-item-hover-label-color: var(--st-color-text-secondary);
2
5
  --st-item-border-radius: var(--st-border-radius-md);
3
- box-sizing: border-box;
4
6
  --st-item-gap: var(--st-size-xs);
7
+ box-sizing: border-box;
5
8
  width: 100%;
6
9
  display: flex;
7
10
  position: relative;
@@ -12,13 +15,23 @@ st-item {
12
15
  padding-left: var(--st-size-xxs);
13
16
  padding-right: var(--st-size-xxs);
14
17
  border-radius: var(--st-item-border-radius);
18
+ background-color: var(--st-item-bg);
15
19
  transition: background-color var(--st-transition-fast);
16
20
 
21
+ .st-label {
22
+ transition: color var(--st-transition-fast);
23
+ }
24
+
17
25
  &.interactable {
18
26
  &:hover,
19
27
  &:focus-visible {
20
- background-color: var(--st-color-control-bg-hover);
28
+ background-color: var(--st-item-hover-bg);
21
29
  cursor: pointer;
30
+
31
+ &.st-label,
32
+ .st-label {
33
+ color: var(--st-item-hover-label-color);
34
+ }
22
35
  }
23
36
  }
24
37