@phillips/seldon 1.240.1 → 1.242.0

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 (45) hide show
  1. package/README.md +30 -0
  2. package/dist/_virtual/index7.js +3 -2
  3. package/dist/_virtual/index8.js +2 -3
  4. package/dist/components/Accordion/AccordionItem.js +34 -34
  5. package/dist/components/AddToCalendar/calendarLinks.js +1 -1
  6. package/dist/components/Button/Button.js +37 -37
  7. package/dist/components/Button/types.d.ts +1 -0
  8. package/dist/components/Button/types.js +1 -1
  9. package/dist/components/ExitGateCard/ExitGateCard.js +7 -7
  10. package/dist/components/Tags/Tags.js +12 -13
  11. package/dist/node_modules/prop-types/index.js +1 -1
  12. package/dist/patterns/Social/Social.js +22 -22
  13. package/dist/scss/_utils.scss +10 -0
  14. package/dist/scss/components/Accordion/_accordion.scss +12 -2
  15. package/dist/scss/components/AddToCalendar/_addToCalendar.scss +1 -2
  16. package/dist/scss/components/Breadcrumb/_breadcrumb.scss +1 -2
  17. package/dist/scss/components/Button/_button.scss +82 -11
  18. package/dist/scss/components/Carousel/_carousel.scss +12 -3
  19. package/dist/scss/components/ComboBox/_combobox.scss +2 -2
  20. package/dist/scss/components/DatePicker/_datePicker.scss +4 -0
  21. package/dist/scss/components/DescriptiveRadioButton/_descriptiveRadioButton.scss +10 -2
  22. package/dist/scss/components/Dropdown/_dropdown.scss +1 -2
  23. package/dist/scss/components/ExitGateCard/_exitGateCard.scss +5 -0
  24. package/dist/scss/components/IconButton/_iconButton.scss +5 -8
  25. package/dist/scss/components/Input/_input.scss +19 -3
  26. package/dist/scss/components/Link/_link.scss +4 -0
  27. package/dist/scss/components/Navigation/NavigationItemTrigger/_navigationItemTrigger.scss +4 -0
  28. package/dist/scss/components/Pagination/_pagination.scss +2 -2
  29. package/dist/scss/components/Search/_searchButton.scss +4 -1
  30. package/dist/scss/components/Select/_select.scss +2 -3
  31. package/dist/scss/components/Tabs/_tabs.scss +22 -3
  32. package/dist/scss/components/Tags/_tags.scss +2 -12
  33. package/dist/scss/components/TextArea/_textArea.scss +2 -2
  34. package/dist/scss/patterns/CountryPicker/_countryPickerOption.scss +4 -6
  35. package/dist/scss/patterns/CountryPicker/_countryPickerTrigger.scss +1 -3
  36. package/dist/scss/patterns/FavoritesCollectionTile/_favoritesCollectionTile.scss +9 -1
  37. package/dist/scss/patterns/FiltersInline/_filterButton.scss +2 -4
  38. package/dist/scss/patterns/SaleCard/_saleCard.scss +16 -0
  39. package/dist/scss/patterns/Social/_social.scss +8 -5
  40. package/dist/scss/patterns/UserManagement/_userManagement.scss +5 -1
  41. package/dist/scss/site-furniture/Footer/_footer.scss +9 -0
  42. package/dist/scss/site-furniture/Header/_header.scss +4 -0
  43. package/dist/site-furniture/Footer/Footer.js +1 -1
  44. package/dist/site-furniture/Header/Header.js +6 -6
  45. package/package.json +1 -1
@@ -1,5 +1,8 @@
1
+ @use 'sass:color';
1
2
  @use '../../allPartials' as *;
2
3
 
4
+ $destructive-hover-disabled: color.adjust($warning-default, $alpha: -0.5);
5
+
3
6
  .#{$px}-button {
4
7
  // we need this because we can't be sure that the Text component is being used as a child of the Button component
5
8
  @include text($labelMedium);
@@ -18,8 +21,10 @@
18
21
  padding: 0 $padding-sm;
19
22
  position: relative;
20
23
  transition:
21
- color 0.25s,
22
- background-color 0.25s;
24
+ color 0.25s ease-out,
25
+ background-color 0.25s ease-out,
26
+ border-color 0.25s ease-out,
27
+ box-shadow 0.25s ease-out;
23
28
 
24
29
  &--small {
25
30
  height: 32px; // Explicitly defined by design
@@ -50,20 +55,22 @@
50
55
 
51
56
  path {
52
57
  fill: $pure-white;
53
- transition: 0.25s;
58
+ transition: fill 0.25s ease-out;
54
59
  }
55
60
  }
56
61
 
57
62
  &--primary,
58
63
  &--secondary,
59
- &--tertiary {
64
+ &--tertiary,
65
+ &--destructive {
60
66
  &.#{$px}-link {
61
67
  text-decoration: none;
62
68
  }
63
69
  }
64
70
 
65
71
  &--primary.#{$px}-link,
66
- &--secondary.#{$px}-link {
72
+ &--secondary.#{$px}-link,
73
+ &--destructive.#{$px}-link {
67
74
  font-variation-settings: 'wght' 600;
68
75
 
69
76
  .#{$px}-text {
@@ -91,8 +98,7 @@
91
98
  }
92
99
 
93
100
  &:focus-visible {
94
- outline: 0.5px solid $pure-white;
95
- outline-offset: -4.5px;
101
+ @include focus-ring($border-radius: $radius-3xl);
96
102
 
97
103
  svg {
98
104
  fill: $pure-white;
@@ -103,13 +109,19 @@
103
109
  background-color: transparent;
104
110
  border: 0;
105
111
  color: $pure-black;
112
+ font-variation-settings: 'wght' 400;
106
113
  height: auto;
107
114
  padding: 0;
108
115
  text-decoration: underline;
116
+
109
117
  .#{$px}-text {
110
118
  font-variation-settings: 'wght' 400;
111
119
  }
112
120
 
121
+ &:focus-visible {
122
+ @include focus-ring($border-radius: $radius-xs);
123
+ }
124
+
113
125
  &:hover {
114
126
  background-color: transparent;
115
127
  color: $pure-black;
@@ -142,8 +154,9 @@
142
154
  }
143
155
 
144
156
  &:focus-visible {
157
+ @include focus-ring($border-radius: $radius-3xl);
158
+
145
159
  background-color: $pure-white;
146
- outline-color: $soft-black;
147
160
  }
148
161
 
149
162
  svg {
@@ -168,6 +181,51 @@
168
181
  }
169
182
  }
170
183
 
184
+ &--destructive {
185
+ background-color: $white-100;
186
+ border: 2px solid $warning-default;
187
+ color: $warning-default;
188
+
189
+ &:focus-visible {
190
+ background-color: $white-100;
191
+ border-radius: $radius-3xl;
192
+ outline: 2px solid $warning-default;
193
+ outline-offset: 4px;
194
+ }
195
+
196
+ // Spinner inside destructive button uses the same red
197
+ .#{$px}-loader {
198
+ border-color: $warning-default;
199
+ border-bottom-color: transparent;
200
+ }
201
+
202
+ svg {
203
+ fill: $warning-default;
204
+
205
+ path {
206
+ fill: $warning-default;
207
+ }
208
+ }
209
+
210
+ @include hoverOrActive {
211
+ background-color: $white-100;
212
+ border-color: $destructive-hover-disabled;
213
+ color: $destructive-hover-disabled;
214
+
215
+ svg {
216
+ fill: $destructive-hover-disabled;
217
+
218
+ path {
219
+ fill: $destructive-hover-disabled;
220
+ }
221
+ }
222
+
223
+ &:disabled {
224
+ box-shadow: none;
225
+ }
226
+ }
227
+ }
228
+
171
229
  &--tertiary {
172
230
  background-color: transparent;
173
231
  color: $pure-black;
@@ -194,10 +252,9 @@
194
252
  }
195
253
 
196
254
  &:focus-visible {
255
+ @include focus-ring($border-radius: $radius-3xl);
256
+
197
257
  background-color: $pure-white;
198
- outline-color: $soft-black;
199
- outline-offset: 4.5px;
200
- padding: 0 4px;
201
258
  }
202
259
  }
203
260
 
@@ -227,6 +284,20 @@
227
284
  border-color: transparent;
228
285
  }
229
286
 
287
+ &--destructive:disabled {
288
+ background-color: $white-100;
289
+ border-color: $destructive-hover-disabled;
290
+ color: $destructive-hover-disabled;
291
+
292
+ svg {
293
+ fill: $destructive-hover-disabled;
294
+
295
+ path {
296
+ fill: $destructive-hover-disabled;
297
+ }
298
+ }
299
+ }
300
+
230
301
  &--link:disabled {
231
302
  border: 0;
232
303
  }
@@ -34,10 +34,20 @@
34
34
  display: none;
35
35
  }
36
36
 
37
- &:hover {
37
+ &:hover,
38
+ &:focus-visible {
38
39
  opacity: 1;
39
40
  }
40
41
 
42
+ &:focus-visible {
43
+ outline: none;
44
+
45
+ .#{$px}-carousel-arrows-next-btn__icon,
46
+ .#{$px}-carousel-arrows-prev-btn__icon {
47
+ @include focus-ring($border-radius: $radius-3xl);
48
+ }
49
+ }
50
+
41
51
  &__icon {
42
52
  background-color: $pure-white;
43
53
  border-radius: $radius-3xl;
@@ -161,8 +171,7 @@
161
171
  width: 10px;
162
172
 
163
173
  &:focus-visible {
164
- border-radius: $radius-3xl;
165
- outline: 0.5px solid $black-100;
174
+ @include focus-ring($border-radius: $radius-3xl, $outline-offset: 0, $outline-width: 0.5px);
166
175
 
167
176
  &-dot {
168
177
  &:hover {
@@ -43,7 +43,7 @@
43
43
 
44
44
  &:focus-visible,
45
45
  &:focus {
46
- outline: 1px solid $primary-black;
46
+ @include focus-ring($border-radius: $radius-xs);
47
47
  }
48
48
 
49
49
  &--invalid {
@@ -51,7 +51,7 @@
51
51
  box-shadow: inset 0 0 3px 3px $error-pink;
52
52
 
53
53
  &:focus {
54
- outline-color: $error-red;
54
+ @include focus-ring($border-radius: $radius-xs, $outline-color: $error-red);
55
55
  }
56
56
 
57
57
  &:hover {
@@ -26,6 +26,10 @@
26
26
  color: $pure-white;
27
27
  }
28
28
 
29
+ .flatpickr-day:focus {
30
+ @include focus-ring($border-radius: $radius-xs);
31
+ }
32
+
29
33
  .flatpickr-day.today {
30
34
  border-color: transparent;
31
35
  font-variation-settings: 'wght' 700;
@@ -10,10 +10,13 @@
10
10
  display: flex;
11
11
  padding: $spacing-sm;
12
12
 
13
- &--selected,
14
- &:has(input:focus-visible) {
13
+ &--selected {
15
14
  border: 1.5px solid $pure-black;
16
15
  }
16
+
17
+ &:has(input:focus-visible) {
18
+ @include focus-ring($border-radius: $radius-xs);
19
+ }
17
20
  }
18
21
 
19
22
  &__input {
@@ -27,6 +30,11 @@
27
30
  @media (min-width: $breakpoint-md) {
28
31
  margin-top: $spacing-micro;
29
32
  }
33
+
34
+ &:focus,
35
+ &:focus-visible {
36
+ outline: none;
37
+ }
30
38
  }
31
39
 
32
40
  &__input:checked {
@@ -37,8 +37,7 @@
37
37
  }
38
38
 
39
39
  &:focus-within:not(:disabled) {
40
- box-shadow: 0 0 0 1px $light-gray;
41
- outline: 1px solid $pure-black;
40
+ @include focus-ring($border-radius: $radius-xs);
42
41
  }
43
42
  }
44
43
 
@@ -58,6 +58,11 @@
58
58
  font-size: $body-size2;
59
59
  }
60
60
  }
61
+
62
+ // Match button focus state when the link (wrapper) is focused
63
+ > a:focus-visible {
64
+ @include focus-ring($border-radius: $radius-3xl);
65
+ }
61
66
  }
62
67
  }
63
68
 
@@ -19,13 +19,10 @@
19
19
  }
20
20
 
21
21
  &:focus-visible {
22
- &:focus-visible {
23
- outline: 0.5px solid $soft-black;
24
- outline-offset: 0;
22
+ @include focus-ring($border-radius: $radius-3xl);
25
23
 
26
- svg {
27
- fill: $pure-white;
28
- }
24
+ svg {
25
+ fill: $pure-white;
29
26
  }
30
27
  }
31
28
 
@@ -78,7 +75,7 @@
78
75
  &--secondary,
79
76
  &--tertiary.#{$px}-icon-button {
80
77
  &:focus-visible {
81
- border-radius: $radius-3xl;
78
+ @include focus-ring($border-radius: $radius-3xl);
82
79
  }
83
80
 
84
81
  & > svg {
@@ -94,7 +91,7 @@
94
91
 
95
92
  &--tertiary {
96
93
  &:focus-visible {
97
- border-radius: $radius-3xl;
94
+ @include focus-ring($border-radius: $radius-3xl);
98
95
  }
99
96
 
100
97
  @include hoverOrActive {
@@ -40,7 +40,7 @@ $lg: #{$px}-input--lg;
40
40
 
41
41
  &:focus-visible,
42
42
  &:focus-within {
43
- outline: 1px solid $pure-black;
43
+ @include focus-ring($border-radius: $radius-xs);
44
44
  }
45
45
 
46
46
  .#{$px}-input__wrapper__input,
@@ -81,7 +81,7 @@ $lg: #{$px}-input--lg;
81
81
  }
82
82
 
83
83
  &:focus-visible {
84
- outline: 1px solid $pure-black;
84
+ @include focus-ring($border-radius: $radius-xs);
85
85
  }
86
86
 
87
87
  &:hover {
@@ -166,7 +166,7 @@ $lg: #{$px}-input--lg;
166
166
  box-shadow: inset 0 0 3px 3px $error-pink;
167
167
 
168
168
  &:focus-within {
169
- outline: 1px solid $error-red;
169
+ @include focus-ring($border-radius: $radius-xs, $outline-color: $error-red);
170
170
  }
171
171
  }
172
172
 
@@ -217,6 +217,22 @@ $lg: #{$px}-input--lg;
217
217
  }
218
218
  }
219
219
 
220
+ .#{$px}-radio-input .#{$px}-input__input {
221
+ &:focus-visible {
222
+ outline: none;
223
+ position: relative;
224
+
225
+ &::before {
226
+ border: 2px solid $focus-default;
227
+ border-radius: $radius-3xl;
228
+ content: '';
229
+ inset: -6px;
230
+ pointer-events: none;
231
+ position: absolute;
232
+ }
233
+ }
234
+ }
235
+
220
236
  .#{$px}-input--inline.#{$px}-radio-input,
221
237
  .#{$px}-input--inline.#{$px}-checkbox-input,
222
238
  .#{$px}-input--inline.#{$px}-toggle-input {
@@ -4,6 +4,10 @@
4
4
  color: $pure-black;
5
5
  text-decoration: none;
6
6
 
7
+ &:focus-visible {
8
+ @include focus-ring($border-radius: $radius-xs);
9
+ }
10
+
7
11
  &--email.#{$px}-link--email,
8
12
  &--link.#{$px}-link--link,
9
13
  &--linkSmall,
@@ -18,6 +18,10 @@
18
18
  @include isHeaderDesktop {
19
19
  color: unset;
20
20
  justify-content: center;
21
+
22
+ &:focus-visible {
23
+ @include focus-ring($border-radius: $radius-xs);
24
+ }
21
25
  }
22
26
  }
23
27
 
@@ -52,7 +52,7 @@
52
52
 
53
53
  appearance: none;
54
54
  border: none;
55
- border-bottom: 1px solid $pure-black;
55
+ border-bottom: 1px solid $black-100;
56
56
  border-radius: 0;
57
57
  font-variation-settings: 'wght' 600;
58
58
  margin-bottom: 0;
@@ -73,7 +73,7 @@
73
73
  }
74
74
 
75
75
  &:focus-visible {
76
- outline: 1px solid $medium-gray;
76
+ border-radius: 0;
77
77
  }
78
78
  }
79
79
 
@@ -30,8 +30,11 @@
30
30
  width: 1.5rem;
31
31
  }
32
32
 
33
+ &:focus-visible {
34
+ @include focus-ring($border-radius: $radius-xs);
35
+ }
36
+
33
37
  &:hover,
34
- &:focus-visible,
35
38
  &:active {
36
39
  &::after {
37
40
  border-bottom: 1px solid $black-100;
@@ -67,10 +67,9 @@
67
67
  }
68
68
 
69
69
  &:focus-visible {
70
+ @include focus-ring($border-radius: $radius-3xl);
71
+
70
72
  background-color: $pure-white;
71
- border-radius: $radius-3xl;
72
- box-shadow: 0 0 0 0.5px $black-100;
73
- outline: none;
74
73
  }
75
74
 
76
75
  svg {
@@ -6,7 +6,7 @@
6
6
  &__tabs-list {
7
7
  display: flex;
8
8
  gap: 1rem;
9
- overflow: hidden; /* Prevent overflow */
9
+ overflow: visible;
10
10
  position: relative;
11
11
  }
12
12
 
@@ -16,14 +16,24 @@
16
16
  border-bottom: 2px solid transparent;
17
17
  padding-bottom: $spacing-sm;
18
18
  padding-inline: 0;
19
+ position: relative;
19
20
  transition:
20
21
  background 0.2s ease,
21
22
  font-weight 0.2s ease-out,
22
23
  border-bottom 0.2s ease-out;
23
24
 
24
25
  &:focus-visible {
25
- box-shadow: rgba($pure-black, 1) 0 0 0 1px inset;
26
26
  outline: none;
27
+
28
+ &::after {
29
+ border: 2px solid $focus-default;
30
+ border-radius: $radius-xs;
31
+ content: '';
32
+ inset: -4px -4px -6px;
33
+ pointer-events: none;
34
+ position: absolute;
35
+ z-index: 1;
36
+ }
27
37
  }
28
38
 
29
39
  .#{$px}-text {
@@ -42,8 +52,17 @@
42
52
  color: $pure-black;
43
53
 
44
54
  &:focus-visible {
45
- box-shadow: rgba($pure-black, 1) 0 0 0 1px inset;
46
55
  outline: none;
56
+
57
+ &::after {
58
+ border: 2px solid $focus-default;
59
+ border-radius: $radius-xs;
60
+ content: '';
61
+ inset: -6px -6px -8px;
62
+ pointer-events: none;
63
+ position: absolute;
64
+ z-index: 1;
65
+ }
47
66
  }
48
67
  .#{$px}-text {
49
68
  color: $pure-black;
@@ -6,12 +6,6 @@
6
6
  flex-flow: row wrap;
7
7
  gap: $spacing-sm;
8
8
 
9
- &:focus-visible {
10
- border: unset;
11
- outline: 1px solid $black-100;
12
- outline-offset: 1px;
13
- }
14
-
15
9
  .#{$px}-tag {
16
10
  border: 1px solid $black-100;
17
11
  border-radius: $radius-3xl;
@@ -89,12 +83,8 @@
89
83
  }
90
84
 
91
85
  &:focus-visible {
92
- border-color: $black-100;
93
- border-radius: $radius-2xl;
94
- border-style: solid;
95
- border-width: 1px;
96
- outline-color: transparent;
97
- outline-offset: unset;
86
+ @include focus-ring($border-radius: $radius-3xl);
87
+
98
88
  padding: 0 $spacing-sm;
99
89
 
100
90
  @include media($breakpoint-xl) {
@@ -34,7 +34,7 @@
34
34
  }
35
35
 
36
36
  &:focus-visible {
37
- outline: 1px solid $pure-black;
37
+ @include focus-ring($border-radius: $radius-xs);
38
38
  }
39
39
 
40
40
  &__label {
@@ -87,7 +87,7 @@
87
87
  box-shadow: inset 0 0 3px 3px $error-pink;
88
88
 
89
89
  &:focus-within {
90
- outline: 1px solid $error-red;
90
+ @include focus-ring($border-radius: $radius-xs, $outline-color: $error-red);
91
91
  }
92
92
  }
93
93
  }
@@ -28,8 +28,8 @@
28
28
  }
29
29
 
30
30
  &--is-phone:focus-within {
31
- outline: 1px solid $soft-black;
32
- outline-offset: 1px;
31
+ box-shadow: inset 0 0 0 2px $focus-default;
32
+ outline: none;
33
33
  }
34
34
 
35
35
  &-content {
@@ -78,12 +78,10 @@
78
78
  }
79
79
  }
80
80
 
81
- // Override focus within styles when phone option is clicked
82
- // TODO: align with design on focus states since the radio input is hidden
81
+ // When both selected and focused, show both the border and focus ring
83
82
  .#{$px}-country-picker__option--is-phone.#{$px}-country-picker__option--selected {
84
- border: 1px solid $pure-black;
85
-
86
83
  &:focus-within {
84
+ box-shadow: inset 0 0 0 2px $focus-default;
87
85
  outline: none;
88
86
  }
89
87
  }
@@ -34,9 +34,7 @@
34
34
  width: 100%;
35
35
 
36
36
  &:focus-visible {
37
- border-color: $pure-black;
38
- box-shadow: 0 0 0 2px rgba($pure-black, 0.08);
39
- outline: none;
37
+ @include focus-ring($border-radius: $radius-xs);
40
38
  }
41
39
 
42
40
  &--error {
@@ -108,6 +108,10 @@
108
108
  &.#{$px}-link {
109
109
  text-transform: none;
110
110
  }
111
+
112
+ &:focus-visible {
113
+ @include focus-ring;
114
+ }
111
115
  }
112
116
 
113
117
  &__media-container {
@@ -130,6 +134,10 @@
130
134
  display: block;
131
135
  position: relative;
132
136
 
137
+ &:focus-visible {
138
+ @include focus-ring;
139
+ }
140
+
133
141
  &--bg {
134
142
  background-color: $soft-gray;
135
143
  }
@@ -186,7 +194,7 @@
186
194
  width: 100%;
187
195
 
188
196
  &:focus-visible {
189
- outline: 1px solid $pure-black;
197
+ @include focus-ring;
190
198
  }
191
199
  }
192
200
  }
@@ -12,16 +12,14 @@
12
12
  }
13
13
 
14
14
  &:focus-visible {
15
- box-shadow: 0 0 0 0.5px $bg-border;
16
- outline: none;
15
+ @include focus-ring($border-radius: $radius-3xl);
17
16
  }
18
17
 
19
18
  &--selected {
20
19
  border: 2px solid $black-100;
21
20
 
22
21
  &:focus-visible {
23
- box-shadow: 0 0 0 0.5px $black-100;
24
- outline: none;
22
+ @include focus-ring($border-radius: $radius-3xl);
25
23
  }
26
24
  }
27
25
 
@@ -1,5 +1,17 @@
1
1
  @use '../../allPartials' as *;
2
2
 
3
+ // Focus ring when the entire card acts as a link (wrapped in <a>)
4
+ a:focus-visible > .#{$px}-sale-card {
5
+ @include focus-ring($border-radius: $radius-xs);
6
+ }
7
+
8
+ // Remove default browser outline from the link so only the card focus ring shows
9
+ a:has(> .#{$px}-sale-card) {
10
+ &:focus {
11
+ outline: none;
12
+ }
13
+ }
14
+
3
15
  .#{$px}-sale-card {
4
16
  align-items: center;
5
17
  display: flex;
@@ -87,6 +99,10 @@
87
99
  }
88
100
  }
89
101
 
102
+ &__modal-link .#{$px}-button {
103
+ @include text($linkSmall);
104
+ }
105
+
90
106
  &__badge {
91
107
  border: 1px solid $badge-blue;
92
108
  color: $badge-blue;
@@ -33,9 +33,12 @@ $num_icons: 5;
33
33
  }
34
34
 
35
35
  &__button {
36
- @include labelText('link');
36
+ @include text($linkMedium);
37
37
 
38
- color: $pure-black;
38
+ border: 0;
39
+ height: auto;
40
+ margin-bottom: $spacing-sm;
41
+ margin-top: $spacing-xsm;
39
42
  padding: 0;
40
43
  text-align: left;
41
44
  text-decoration: underline;
@@ -49,9 +52,9 @@ $num_icons: 5;
49
52
  color: unset;
50
53
  }
51
54
 
52
- &:focus {
53
- background-color: unset;
54
- color: unset;
55
+ &:focus-visible {
56
+ border-radius: $radius-xs;
57
+ padding: 0;
55
58
  }
56
59
  }
57
60