@steroidsjs/bootstrap 3.0.0-beta.29 → 3.0.0-beta.30

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 (39) hide show
  1. package/content/Accordion/AccordionItemView.scss +15 -10
  2. package/content/Alert/AlertView.scss +2 -0
  3. package/content/Avatar/AvatarView.scss +9 -1
  4. package/content/Badge/BadgeView.js +6 -6
  5. package/content/Badge/BadgeView.scss +40 -30
  6. package/content/Card/CardView.js +34 -14
  7. package/content/Card/CardView.scss +126 -110
  8. package/content/Detail/DetailView.scss +1 -0
  9. package/form/Button/ButtonView.js +1 -0
  10. package/form/Button/ButtonView.scss +18 -8
  11. package/form/CheckboxField/CheckboxFieldView.js +6 -3
  12. package/form/CheckboxField/CheckboxFieldView.scss +66 -1
  13. package/form/DropDownField/DropDownFieldView.js +46 -47
  14. package/form/DropDownField/DropDownFieldView.scss +390 -183
  15. package/form/DropDownField/views/DropDownItem/DropDownItemView.d.ts +3 -0
  16. package/form/DropDownField/views/DropDownItem/DropDownItemView.js +80 -0
  17. package/form/DropDownField/views/DropDownItem/DropDownItemView.scss +217 -0
  18. package/form/DropDownField/views/DropDownItem/index.d.ts +2 -0
  19. package/form/DropDownField/views/DropDownItem/index.js +7 -0
  20. package/form/Form/FormView.js +3 -3
  21. package/form/Form/FormView.scss +10 -14
  22. package/form/InputField/InputFieldView.scss +0 -27
  23. package/form/NumberField/NumberFieldView.scss +14 -32
  24. package/form/PasswordField/PasswordFieldView.scss +3 -6
  25. package/form/RadioListField/RadioListFieldView.js +7 -4
  26. package/form/RadioListField/RadioListFieldView.scss +115 -19
  27. package/form/TextField/TextFieldView.scss +1 -3
  28. package/icons/index.js +2 -0
  29. package/icons/svgs/dots.svg +5 -0
  30. package/icons/svgs/search.svg +4 -0
  31. package/layout/Tooltip/TooltipView.js +6 -6
  32. package/layout/Tooltip/TooltipView.scss +45 -37
  33. package/package.json +3 -3
  34. package/scss/mixins/index.scss +1 -1
  35. package/scss/mixins/scroll.scss +31 -0
  36. package/scss/variables/common/colors.scss +1 -0
  37. package/scss/variables/index.scss +0 -1
  38. package/scss/mixins/card.scss +0 -26
  39. package/scss/variables/components/card.scss +0 -20
@@ -1,228 +1,435 @@
1
- $text-muted: gray;
2
- $dropdown-divider-bg: transparent;
1
+ :root {
2
+ --basic-color: #eef1f2;
3
+ --basic-focus-color: #f5f8fa;
4
+ --basic-active-color: #e5e9eb;
5
+ --chevron-background-color: #ffffff;
6
+ --chevron-background-color-outline: #f5f8fa;
7
+ --chevron-background-color-basic: #ffffff;
8
+ --chevron-inner-color: #323232;
9
+ --drop-down-border-color: #e9e9e9;
10
+ --scroll-thumb-color: #e5e9eb;
11
+ --scroll-track-color: #f5f8fa;
12
+ --search-color: #626262;
13
+ --search-background-color: #f5f8fa;
14
+ --search-hover-background-color: #eef1f2;
15
+ }
3
16
 
4
- .DropDownFieldView {
5
- $root: &;
17
+ html[data-theme="dark"] {
18
+ --basic-color: #5b5c6b;
19
+ --basic-focus-color: #adaab3;
20
+ --basic-active-color: #4e4f57;
21
+ --chevron-background-color: #323232;
22
+ --chevron-background-color-outline: #323232;
23
+ --chevron-background-color-basic: #6f6b76;
24
+ --chevron-inner-color: #ffffff;
25
+ --drop-down-border-color: #595959;
26
+ --scroll-thumb-color: #5b5c6b;
27
+ --scroll-track-color: #444147;
28
+ --search-color: #adacac;
29
+ --search-background-color: #4e4f57;
30
+ --search-hover-background-color: #5b5c6b;
31
+ }
32
+
33
+ $basic-color: var(--basic-color);
34
+ $basic-focus-color: var(--basic-focus-color);
35
+ $basic-active-color: var(--basic-active-color);
36
+ $chevron-background-color: var(--chevron-background-color);
37
+ $chevron-background-color-outline: var(--chevron-background-color-outline);
38
+ $chevron-background-color-basic: var(--chevron-background-color-basic);
39
+ $chevron-inner-color: var(--chevron-inner-color);
40
+ $drop-down-border-color: var(--drop-down-border-color);
41
+ $scroll-thumb-color: var(--scroll-thumb-color);
42
+ $scroll-track-color: var(--scroll-track-color);
43
+ $search-color: var(--search-color);
44
+ $search-background-color: var(--search-background-color);
45
+ $search-hover-background-color: var(--search-hover-background-color);
46
+
47
+ $drop-down-color-themes: () !default;
48
+ $drop-down-color-themes: map-merge(
49
+ (
50
+ "basic": (
51
+ "background-color": $basic-color,
52
+ "hover-color": $border-color-hover,
53
+ "focus-color": $basic-focus-color,
54
+ "active-color": $basic-active-color,
55
+ ),
56
+ "primary": (
57
+ "background-color": $primary,
58
+ "hover-color": $primary-dark,
59
+ "focus-color": $primary-light,
60
+ "active-color": $primary-dark,
61
+ ),
62
+ "secondary": (
63
+ "background-color": $secondary,
64
+ "hover-color": $secondary-dark,
65
+ "focus-color": $secondary-light,
66
+ "active-color": $secondary-dark,
67
+ ),
68
+ "warning": (
69
+ "background-color": $warning,
70
+ "hover-color": $warning-dark,
71
+ "focus-color": $warning-light,
72
+ "active-color": $warning-dark,
73
+ ),
74
+ "danger": (
75
+ "background-color": $danger,
76
+ "hover-color": $danger-dark,
77
+ "focus-color": $danger-light,
78
+ "active-color": $danger-dark,
79
+ ),
80
+ "info": (
81
+ "background-color": $info,
82
+ "hover-color": $info-dark,
83
+ "focus-color": $info-light,
84
+ "active-color": $info-dark,
85
+ ),
86
+ "success": (
87
+ "background-color": $success,
88
+ "hover-color": $success-dark,
89
+ "focus-color": $success-light,
90
+ "active-color": $success-dark,
91
+ ),
92
+ ),
93
+ $drop-down-color-themes
94
+ );
95
+
96
+ @mixin dropDownTheme($colorMap, $root, $colorType) {
97
+ background-color: map-get($colorMap, background-color);
98
+ color: $text-color;
6
99
 
7
- position: relative;
8
- font-size: 1rem;
100
+ &::before {
101
+ border-color: map-get($colorMap, focus-color);
102
+ }
9
103
 
10
- &_size_sm {
11
- font-size: 0.7875rem;
12
- }
104
+ &:not(:focus):hover {
105
+ background-color: map-get($colorMap, hover-color);
106
+ }
13
107
 
14
- &_size_lg {
15
- font-size: 1.25rem;
16
- }
108
+ &:not(:active):focus-within {
109
+ &::before {
110
+ opacity: 1;
111
+ }
112
+ }
17
113
 
18
- &__selected-items {
19
- padding: 0.375rem 1.75rem 0.375rem 0.75rem;
20
- min-width: 100px;
21
- min-height: 38px;
22
- overflow: hidden;
23
- white-space: nowrap;
24
- text-overflow: ellipsis;
25
- background-clip: padding-box;
114
+ &:active {
115
+ background-color: map-get($colorMap, hover-color);
116
+ }
26
117
 
27
- background-color: #fff;
28
- border: 1px solid $border-default;
29
- border-radius: 0.25rem;
30
- color: $heading;
31
- line-height: 1.5;
118
+ #{$root}__icon-chevron {
119
+ svg {
120
+ rect {
121
+ fill: $chevron-background-color;
122
+
123
+ @if ($colorType == "basic") {
124
+ fill: $chevron-background-color-basic;
125
+ }
126
+ }
127
+ path {
128
+ stroke: $chevron-inner-color;
129
+ }
130
+ }
131
+ }
32
132
 
33
- display: flex;
34
- flex-flow: row wrap;
133
+ #{$root}__selected-items {
134
+ color: #ffffff;
35
135
 
136
+ @if ($colorType == "basic") {
137
+ color: $text-color;
138
+ }
36
139
 
37
- &:focus {
38
- border: 1px solid $info-dark;
39
- box-shadow: 0 0 0 4px $info-light;
140
+ @if ($colorType == "warning" or $colorType == "info") {
141
+ color: #312c3a;
142
+ }
40
143
  }
144
+ }
41
145
 
42
- &::after {
43
- content: '';
44
- position: absolute;
45
- top: 50%;
46
- right: 10px;
47
- transform: translateY(-50%);
48
- display: inline-block;
49
- width: 0;
50
- height: 0;
51
- border-top: 0.3em solid;
52
- border-right: 0.3em solid transparent;
53
- border-bottom: 0;
54
- border-left: 0.3em solid transparent;
55
- }
146
+ @mixin dropDownOutlineTheme($colorMap, $root) {
147
+ background-color: $element-background-color;
148
+ border: 1px solid map-get($colorMap, background-color);
149
+ color: $text-color;
56
150
 
57
- &_reset {
58
- padding-right: 3rem;
151
+ &::before {
152
+ border-color: map-get($colorMap, focus-color);
59
153
  }
60
154
 
61
- &_no-border {
62
- padding-left: 0;
63
- border-color: transparent;
64
- box-shadow: unset;
155
+ &:not(:focus):hover {
156
+ border-color: map-get($colorMap, active-color);
157
+ }
65
158
 
66
- &#{$root}__selected-items_is-invalid {
159
+ &:not(:active):focus-within {
67
160
  border-color: transparent;
68
- }
161
+ &::before {
162
+ opacity: 1;
163
+ }
69
164
  }
70
165
 
71
- &_is-invalid {
72
- border-color: red;
166
+ &:active {
167
+ border-color: map-get($colorMap, active-color);
73
168
  }
74
169
 
75
- &_disabled {
76
- pointer-events: none;
77
- opacity: .5;
170
+ #{$root}__icon-chevron {
171
+ svg {
172
+ rect {
173
+ fill: $chevron-background-color-outline;
174
+ }
175
+ path {
176
+ stroke: $chevron-inner-color;
177
+ }
178
+ }
78
179
  }
79
- }
180
+ }
80
181
 
81
- &_size_sm &__selected-items {
82
- padding: 0.25rem 0.5rem;
83
- line-height: 1.5;
84
- border-radius: 0.2rem;
85
- height: 31px;
86
- }
182
+ .DropDownFieldView {
183
+ $root: &;
87
184
 
88
- &_size_lg &__selected-items {
89
- padding: 0.5rem 1rem;
90
- line-height: 1.5;
91
- border-radius: 0.3rem;
92
- height: 48px;
93
- }
185
+ position: relative;
186
+ width: 240px;
187
+ outline: none;
188
+ cursor: pointer;
189
+
190
+ //Pseudo element for focus statement
191
+ &::before {
192
+ content: "";
193
+ position: absolute;
194
+ top: 0;
195
+ left: 0;
196
+ width: 100%;
197
+ height: 100%;
198
+ pointer-events: none;
199
+ opacity: 0;
200
+ border: 4px solid transparent;
201
+ border-radius: inherit;
202
+ }
94
203
 
95
- &__selected-item-multiple {
96
- cursor: default;
97
- margin-right: 5px;
98
- padding: 0 4px 0 8px;
204
+ $sizes: () !default;
205
+ $sizes: map-merge(
206
+ (
207
+ "lg": (
208
+ "border-radius": $radius-large,
209
+ "height": $input-height-lg,
210
+ "beforeTransform": translateX(-1.6%) translateY(-6.5%),
211
+ "beforeRadius": 16px,
212
+ "afterTransform": translateX(-0.75%) translateY(-1.75%),
213
+ "afterRadius": 14px,
214
+ "selectedItemsPadding": 16px,
215
+ "font-size": $font-size-lg,
216
+ "line-height": 24px,
217
+ ),
218
+ "md": (
219
+ "border-radius": $radius-large,
220
+ "height": $input-height-md,
221
+ "beforeTransform": translateX(-1.6%) translateY(-7.5%),
222
+ "beforeRadius": 16px,
223
+ "afterTransform": translateX(-0.75%) translateY(-2%),
224
+ "afterRadius": 14px,
225
+ "selectedItemsPadding": 12px,
226
+ "font-size": $font-size-base,
227
+ "line-height": 22px,
228
+ ),
229
+ "sm": (
230
+ "border-radius": $radius-small,
231
+ "height": $input-height-sm,
232
+ "beforeTransform": translateX(-1.6%) translateY(-9.5%),
233
+ "beforeRadius": 12px,
234
+ "afterTransform": translateX(-0.6%) translateY(-2.5%),
235
+ "afterRadius": 10px,
236
+ "selectedItemsPadding": 8px,
237
+ "font-size": $font-size-sm,
238
+ "line-height": 18px,
239
+ ),
240
+ ),
241
+ $sizes
242
+ );
243
+
244
+ &_size {
245
+ @each $size, $sizeMap in $sizes {
246
+ &_#{$size} {
247
+ border-radius: map-get($sizeMap, border-radius);
248
+ height: map-get($sizeMap, height);
249
+
250
+ &::before {
251
+ transform: map-get($sizeMap, beforeTransform);
252
+ border-radius: map-get($sizeMap, beforeRadius);
253
+ }
254
+
255
+ &::after {
256
+ transform: map-get($sizeMap, afterTransform);
257
+ border-radius: map-get($sizeMap, afterRadius);
258
+ }
259
+
260
+ #{$root}__selected-items {
261
+ padding-top: map-get($sizeMap, selectedItemsPadding);
262
+ padding-bottom: map-get($sizeMap, selectedItemsPadding);
263
+ }
264
+
265
+ #{$root}__icon-chevron {
266
+ height: map-get($sizeMap, height);
267
+ }
268
+
269
+ font-size: map-get($sizeMap, font-size);
270
+ line-height: map-get($sizeMap, line-height);
271
+ }
272
+ }
273
+ }
274
+
275
+ @each $colorType, $colorMap in $drop-down-color-themes {
276
+ &_#{$colorType} {
277
+ @include dropDownTheme($colorMap, $root, $colorType);
278
+ }
99
279
 
100
- display: flex;
280
+ &_outline_#{$colorType} {
281
+ @include dropDownOutlineTheme($colorMap, $root);
282
+ }
283
+ }
101
284
 
102
- border-radius: 2px;
103
- background: #f5f5f5;
104
- }
285
+ &__icon-chevron {
286
+ width: 40px;
287
+ position: absolute;
288
+ top: 50%;
289
+ right: 0px;
290
+ outline: none;
105
291
 
106
- &__selected-item-multiple-remove {
107
- cursor: pointer;
108
- margin-left: 6px;
292
+ transform: translateY(-50%);
109
293
 
110
- display: flex;
111
- align-items: center;
294
+ display: flex;
295
+ justify-content: center;
296
+ align-items: center;
112
297
 
113
- svg {
114
- width: 10px;
115
- opacity: .5;
116
- transition: opacity .1s ease-in;
298
+ svg {
299
+ transition: transform 125ms ease-in-out;
300
+ }
117
301
  }
118
302
 
119
- &:hover {
120
- svg {
121
- opacity: 1;
122
- }
303
+ &__selected-items {
304
+ position: absolute;
305
+ width: calc(100% - 29px);
306
+ height: 100%;
307
+ top: 0;
308
+ left: 0;
309
+ overflow: hidden;
310
+ padding-left: 8px;
311
+ outline: none;
312
+
313
+ text-overflow: ellipsis;
314
+ white-space: nowrap;
315
+ overflow: hidden;
123
316
  }
124
- }
125
317
 
126
- &__reset {
127
- display: block;
128
- position: absolute;
129
- top: 0;
130
- right: 20px;
131
- width: 30px;
132
- height: 100%;
133
- cursor: pointer;
318
+ &__drop-down {
319
+ position: absolute;
320
+ z-index: 2;
321
+ width: 100%;
322
+ height: fit-content;
323
+ top: calc(100% + 8px);
324
+ left: 0;
134
325
 
135
- &::before,
136
- &::after {
137
- display: block;
138
- position: absolute;
139
- top: 50%;
140
- margin-top: -5px;
141
- left: 50%;
142
- width: 1px;
143
- height: 10px;
144
- background-color: $text-muted;
145
- content: '';
146
- }
326
+ background-color: $element-background-color;
147
327
 
148
- &::before {
149
- transform: rotate(45deg);
150
- }
151
-
152
- &::after {
153
- transform: rotate(-45deg);
154
- }
155
- }
156
-
157
- &__drop-down {
158
- position: absolute;
159
- top: calc(100% + 8px);
160
- left: 0;
161
- padding: 0.375rem 0;
162
- width: 100%;
163
- z-index: 100;
164
- background-color: #fff;
165
- background-clip: padding-box;
166
- border: 1px solid #CCCCCC;
167
- border-radius: 10px;
168
- box-shadow: 0 0 30px rgba(0, 0, 0, 0.1);
169
- line-height: 1.5;
170
- color: #152536;
171
- }
172
-
173
- &__drop-down-list {
174
- max-height: 273px;
175
- overflow: auto;
176
- }
177
-
178
- &__search {
179
- padding: 0.25rem 0.5rem;
180
-
181
- > .form-control {
182
- width: 100%;
183
- }
184
- }
185
-
186
- &_size_sm &__search {
187
- padding: 0.1rem 0.2rem;
188
- }
189
-
190
- &__drop-down-item {
191
- width: 100%;
192
- text-align: left;
193
- padding: 0.375rem 0.75rem;
194
- cursor: pointer;
195
- transition: background-color .2s ease;
196
- background-color: transparent;
197
- border: unset;
328
+ border: 1px solid $drop-down-border-color;
329
+ overflow: hidden;
330
+ border-radius: 12px;
198
331
 
199
- &_group {
200
- font-weight: bold;
332
+ &-list {
333
+ @include scrollWrapper(240px, 0, $scroll-thumb-color, $scroll-track-color);
334
+ }
201
335
  }
202
336
 
203
- &_level_1 {
204
- padding-left: 1.25rem
337
+ &_opened {
338
+ #{$root}__icon-chevron {
339
+ svg {
340
+ transform: rotate(180deg);
341
+ }
342
+ }
205
343
  }
206
344
 
207
- &_hover {
208
- background-color: $dropdown-divider-bg;
345
+ &__search {
346
+ width: 100%;
347
+ padding: 9px;
348
+ position: relative;
349
+
350
+ $searchRoot: &;
351
+
352
+ &_size {
353
+ &_lg {
354
+ #{$searchRoot}-input {
355
+ padding: 8px 4px;
356
+ padding-left: 32px;
357
+ }
358
+ }
359
+ &_md {
360
+ #{$searchRoot}-input {
361
+ padding: 5px 4px;
362
+ padding-left: 32px;
363
+
364
+ }
365
+ }
366
+ &_sm {
367
+ #{$searchRoot}-input {
368
+ padding: 5px 8px;
369
+ padding-left: 32px;
370
+
371
+ }
372
+ }
373
+ }
374
+
375
+ &-input {
376
+ width: 220px;
377
+ border-radius: 6px;
378
+ outline: none;
379
+
380
+ font-size: $font-size-base;
381
+ font-weight: 400;
382
+ line-height: 22px;
383
+ border: 1px solid $border-color;
384
+
385
+ color: $text-color;
386
+ background-color: $search-background-color;
387
+
388
+ &:hover {
389
+ background-color: $search-hover-background-color;
390
+ }
391
+
392
+ &::-webkit-search-cancel-button {
393
+ display: none;
394
+ }
395
+ }
396
+
397
+ &-icon {
398
+ display: inline-block;
399
+ width: 24px;
400
+ height: 24px;
401
+ position: absolute;
402
+ top: 50%;
403
+ left: 10px;
404
+
405
+ transform: translateY(-50%);
406
+
407
+ svg {
408
+ circle,
409
+ path {
410
+ stroke: $search-color;
411
+ }
412
+ }
413
+ }
209
414
  }
210
415
 
211
- &_select {
212
- background-color: #D8CCF6;
213
- color: #152536;
416
+ &__placeholder {
417
+ text-overflow: ellipsis;
418
+ white-space: nowrap;
419
+ overflow: hidden;
214
420
  }
215
- }
216
421
 
217
- &_size_sm &__drop-down-item {
218
- padding: 0.25rem 0.5rem;
219
- }
220
-
221
- &_size_lg &__drop-down-item {
222
- padding: 0.5rem 1rem;
223
- }
224
-
225
- &__placeholder {
226
- color: #fff;
227
- }
422
+ &__icon-close {
423
+ position: absolute;
424
+ z-index: 9;
425
+ width: 24px;
426
+ height: 24px;
427
+
428
+ display: flex;
429
+ justify-content: center;
430
+ align-items: center;
431
+ top: 50%;
432
+ right: 36px;
433
+ transform: translateY(-50%);
434
+ }
228
435
  }
@@ -0,0 +1,3 @@
1
+ import { IDropDownItemViewProps } from '@steroidsjs/core/ui/form/DropDownField/DropDownField';
2
+ import './DropDownItemView.scss';
3
+ export default function DropDownItemView(props: IDropDownItemViewProps): JSX.Element;