@ebay/skin 14.1.0-0 → 14.1.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 (31) hide show
  1. package/.github/workflows/pages-html-proofer.yml +1 -1
  2. package/.github/workflows/storybook-percy.yml +1 -1
  3. package/_cdn/skin/v14.1.2/skin-default.min.css +6 -0
  4. package/_cdn/skin/v14.1.2/skin-full.min.css +6 -0
  5. package/_cdn/skin/v14.1.2/skin-headless.min.css +6 -0
  6. package/_cdn/skin/v14.1.2/skin-legacy.min.css +6 -0
  7. package/dist/button/button.css +2 -4
  8. package/dist/filter-button/filter-button.css +1 -0
  9. package/dist/filter-menu-button/filter-menu-button.css +1 -0
  10. package/dist/floating-label/floating-label.css +2 -6
  11. package/dist/legacy-tokens/ds4-light.css +1 -1
  12. package/dist/select/select.css +10 -14
  13. package/dist/textbox/textbox.css +16 -10
  14. package/dist/tokens/evo-dark.css +1 -1
  15. package/dist/tokens/evo-light.css +1 -1
  16. package/package.json +1 -1
  17. package/scripts/generate-bundle.js +46 -22
  18. package/src/less/floating-label/floating-label.less +3 -7
  19. package/src/less/floating-label/stories/floating-label.stories.js +19 -1
  20. package/src/less/mixins/private/filter-button-mixins.less +1 -0
  21. package/src/less/select/select.less +11 -16
  22. package/src/less/select/stories/floating-label.stories.js +66 -0
  23. package/src/less/textbox/stories/textbox.stories.js +12 -0
  24. package/src/less/textbox/textbox.less +18 -10
  25. package/src/less/toast-dialog/stories/toast-dialog.stories.js +9 -9
  26. package/src/tokens/evo-dark.css +1 -1
  27. package/src/tokens/evo-light.css +1 -1
  28. package/_cdn/skin/v14.1.0-0/skin-default.min.css +0 -6
  29. package/_cdn/skin/v14.1.0-0/skin-full.min.css +0 -6
  30. package/_cdn/skin/v14.1.0-0/skin-headless.min.css +0 -6
  31. package/_cdn/skin/v14.1.0-0/skin-legacy.min.css +0 -6
@@ -4,6 +4,7 @@
4
4
  position: relative;
5
5
  }
6
6
  .textbox button.icon-btn {
7
+ background-color: transparent;
7
8
  display: inline-flex;
8
9
  height: 100%;
9
10
  justify-content: center;
@@ -46,7 +47,6 @@ textarea.textbox__control {
46
47
  }
47
48
  input.textbox__control[disabled],
48
49
  textarea.textbox__control[disabled] {
49
- background-color: var(--textbox-disabled-background-color, var(--color-background-secondary));
50
50
  border-color: var(--textbox-disabled-border-color, var(--color-background-disabled));
51
51
  color: var(--textbox-disabled-foreground-color, var(--color-foreground-disabled));
52
52
  }
@@ -64,20 +64,15 @@ textarea.textbox__control[disabled]:-ms-input-placeholder {
64
64
  }
65
65
  input.textbox__control[readonly],
66
66
  textarea.textbox__control[readonly] {
67
- color: var(--textbox-readonly-color, var(--color-foreground-on-secondary));
67
+ background-color: transparent;
68
+ border: none;
69
+ padding-left: 0;
70
+ padding-right: 0;
68
71
  }
69
72
  input.textbox__control[aria-invalid="true"],
70
73
  textarea.textbox__control[aria-invalid="true"] {
71
- background-color: var(--color-red-1);
72
74
  border-color: var(--textbox-invalid-foreground-color, var(--color-stroke-attention));
73
75
  }
74
- input.textbox__control:focus,
75
- textarea.textbox__control:focus {
76
- border-color: var(--textbox-focus-border-color, var(--color-stroke-default));
77
- background-color: var(--textbox-focus-background-color, var(--color-background-primary));
78
- color: var(--textbox-focus-foreground-color, var(--color-foreground-on-secondary));
79
- outline: 0;
80
- }
81
76
  input.textbox__control::-webkit-input-placeholder,
82
77
  textarea.textbox__control::-webkit-input-placeholder {
83
78
  color: var(--textbox-placeholder-color, var(--color-foreground-on-secondary));
@@ -121,6 +116,17 @@ input.textbox__control--large {
121
116
  .textbox--icon-end > svg:last-child {
122
117
  right: 16px;
123
118
  }
119
+ input.textbox__control:not(:read-only):focus,
120
+ textarea.textbox__control:not(:read-only):focus {
121
+ border-color: var(--textbox-focus-border-color, var(--color-stroke-default));
122
+ background-color: var(--textbox-focus-background-color, var(--color-background-primary));
123
+ outline: 0;
124
+ }
125
+ input.textbox__control[readonly]:focus,
126
+ textarea.textbox__control[readonly]:focus {
127
+ outline: 0;
128
+ text-decoration: underline;
129
+ }
124
130
  .textbox > svg:first-child {
125
131
  left: 16px;
126
132
  }
@@ -2,7 +2,7 @@
2
2
  :root {
3
3
  --color-background-primary: var(--color-neutral-7);
4
4
  --color-background-secondary: var(--color-neutral-6);
5
- --color-background-disabled: var(--color-neutral-4);
5
+ --color-background-disabled: var(--color-neutral-5);
6
6
  --color-background-inverse: var(--color-neutral-1);
7
7
  --color-background-attention: var(--color-red-3);
8
8
  --color-background-confirmation: var(--color-green-4);
@@ -4,7 +4,7 @@
4
4
  --color-background-disabled: var(--color-neutral-3);
5
5
  --color-background-inverse: var(--color-neutral-6);
6
6
  --color-background-attention: var(--color-red-4);
7
- --color-background-confirmation: var(--color-green-4);
7
+ --color-background-confirmation: var(--color-green-6);
8
8
  --color-background-information: var(--color-blue-4);
9
9
  --color-background-accent: var(--color-blue-4);
10
10
  --color-background-invalid: var(--color-red-1);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ebay/skin",
3
3
  "description": "Skin - CSS modules that represent the brand eBay",
4
- "version": "14.1.0-0",
4
+ "version": "14.1.2",
5
5
  "license": "MIT",
6
6
  "main": "./index.js",
7
7
  "maintainers": [
@@ -14,16 +14,22 @@ const cleanCSSInstance = new CleanCSS({
14
14
  const currentDir = path.dirname(__dirname);
15
15
  const { exec } = require('child_process');
16
16
  const bodyMatch = new RegExp('body ?({(?:.|\\s|\\S)*?})', 'm');
17
+ const rootMatch = new RegExp(':root ?({(?:.|\\s|\\S)*?})', 'm');
17
18
 
18
19
  // The list of directories in the dist to pull
19
- const dsList = ['ds4', 'ds6'];
20
+ const tokensList = [
21
+ ['evo-core', 'evo-light'],
22
+ ['ds4-core', 'ds4-light'],
23
+ ];
24
+ const tokensDirList = ['evo', 'ds4'];
20
25
 
21
26
  /**
22
27
  * Main Processing class. Holds info about args passed and ds version
23
28
  */
24
29
  class CssProcesser {
25
- constructor(dsVersion, args) {
26
- this.dsVersion = dsVersion;
30
+ constructor(tokensFile, tokensDir, args) {
31
+ this.tokensFile = tokensFile;
32
+ this.tokensDir = tokensDir;
27
33
  this.args = args;
28
34
  this.processed = [];
29
35
  this.skipped = [];
@@ -52,10 +58,11 @@ class CssProcesser {
52
58
 
53
59
  getDistCss() {
54
60
  return new Promise((resolve, reject) => {
55
- glob(`${currentDir}/dist/**/${this.dsVersion}/**/*.css`, (err, files) => {
61
+ glob(`${currentDir}/dist/**/*.css`, (err, files) => {
56
62
  if (err) {
57
63
  return reject(err);
58
64
  }
65
+ console.log(files);
59
66
  resolve(files);
60
67
  });
61
68
  });
@@ -80,6 +87,18 @@ class CssProcesser {
80
87
  return this.wrap(cssContents);
81
88
  }
82
89
 
90
+ rewrapRoot(cssContents) {
91
+ const root = rootMatch.exec(cssContents);
92
+ if (root && root[1]) {
93
+ // Add newroot
94
+ const newContents = cssContents.replace(rootMatch, '');
95
+ return `${this.classDef} ${root[1]}
96
+ ${this.wrap(newContents)}
97
+ `;
98
+ }
99
+ return this.wrap(cssContents);
100
+ }
101
+
83
102
  /**
84
103
  * Generates a raw less file for given css file
85
104
  * @param {*} file
@@ -87,8 +106,10 @@ class CssProcesser {
87
106
  generateRawLess(file) {
88
107
  const fileName = path.basename(file, '.css');
89
108
  if (this.args.modules.length > 0 && this.args.modules.indexOf(fileName) === -1) {
90
- this.skipped.push(fileName);
91
- return '';
109
+ if (this.tokensFile.indexOf(fileName) === -1) {
110
+ this.skipped.push(fileName);
111
+ return '';
112
+ }
92
113
  }
93
114
  this.processed.push(fileName);
94
115
 
@@ -99,6 +120,9 @@ class CssProcesser {
99
120
  if (fileName === 'global') {
100
121
  return this.rewrapBody(cssContents);
101
122
  }
123
+ if (this.tokensFile.indexOf(fileName) > -1) {
124
+ return this.rewrapRoot(cssContents);
125
+ }
102
126
  return this.wrap(cssContents);
103
127
  }
104
128
  return `@import (inline) "${file}";`;
@@ -109,23 +133,23 @@ class CssProcesser {
109
133
  const compiled = files.map((file) => this.generateRawLess(file)).join('\n');
110
134
  const processed = this.processed;
111
135
  const skipped = this.skipped;
112
- const dsVersion = this.dsVersion;
136
+ const tokensFile = this.tokensFile;
113
137
 
114
138
  if (this.args.modules.length > 0 || this.args.verbose) {
115
- console.log(`Processed ${processed.length} modules for ${dsVersion}`);
139
+ console.log(`Processed ${processed.length} modules for ${tokensFile}`);
116
140
  }
117
141
  if (this.args.verbose) {
118
- console.log(`Modules processed: ${processed.join(',')} for ${dsVersion}`);
142
+ console.log(`Modules processed: ${processed.join(',')} for ${tokensFile}`);
119
143
 
120
- console.log(`Skipped ${skipped.length} modules for ${dsVersion}`);
121
- console.log(`Modules skipped: ${skipped.join(',')} for ${dsVersion}`);
144
+ console.log(`Skipped ${skipped.length} modules for ${tokensFile}`);
145
+ console.log(`Modules skipped: ${skipped.join(',')} for ${tokensFile}`);
122
146
  }
123
147
  resolve(compiled);
124
148
  });
125
149
  }
126
150
 
127
151
  generateLESS() {
128
- return this.getDistCss(this.dsVersion).then((files) => this.processFiles(files));
152
+ return this.getDistCss(this.tokensFile).then((files) => this.processFiles(files));
129
153
  }
130
154
 
131
155
  compileLess(raw) {
@@ -133,24 +157,24 @@ class CssProcesser {
133
157
  }
134
158
 
135
159
  writeAllFiles(raw) {
136
- const cdnPath = getCDNPath(this.args.name, this.dsVersion);
160
+ const cdnPath = getCDNPath(this.args.name);
137
161
  rimraf.sync(cdnPath);
138
162
  return makeDir(cdnPath).then(() =>
139
163
  writeFile(
140
- `${cdnPath}/skin.${this.minify ? 'min.' : ''}css`,
164
+ `${cdnPath}/skin-${this.tokensDir}.${this.minify ? 'min.' : ''}css`,
141
165
  `/* autoprefixer: off */\n${raw}\n/* autoprefixer: on */`
142
166
  )
143
167
  );
144
168
  }
145
169
  }
146
170
 
147
- function getCDNPath(bundle, dsVersion) {
148
- return `${currentDir}/_cdn/${bundle}/v${pkg.version}/${dsVersion}`;
171
+ function getCDNPath(bundle) {
172
+ return `${currentDir}/_cdn/${bundle}/v${pkg.version}`;
149
173
  }
150
174
 
151
175
  /**
152
176
  * Runs the compilation of less
153
- * @param {*} res The response with dsVersion and raw css/less
177
+ * @param {*} res The response with tokensFile and raw css/less
154
178
  * @param {*} plugin The given plugin to run the render with
155
179
  */
156
180
  /**
@@ -200,8 +224,8 @@ function runCSSBuild(name, args) {
200
224
  prebuild()
201
225
  .then(() =>
202
226
  Promise.all(
203
- dsList.map((ds) => {
204
- const cssProcesser = new CssProcesser(ds, args);
227
+ tokensList.map((token, index) => {
228
+ const cssProcesser = new CssProcesser(token, tokensDirList[index], args);
205
229
  return cssProcesser.run();
206
230
  })
207
231
  )
@@ -218,11 +242,11 @@ Please upload the ./_cdn/${args.name}/v${pkg.version} directory to CDN
218
242
 
219
243
  async function listBundles(argv) {
220
244
  await prebuild();
221
- dsList.forEach((dsVersion) => {
222
- const cssProcesser = new CssProcesser(dsVersion, argv);
245
+ tokensList.forEach((tokensFile) => {
246
+ const cssProcesser = new CssProcesser(tokensFile, argv);
223
247
  cssProcesser.getDistCss().then((files) => {
224
248
  console.log(`======================`);
225
- console.log(`${dsVersion} - modules avaiable`);
249
+ console.log(`${tokensFile} - modules avaiable`);
226
250
  console.log(`======================`);
227
251
  files.forEach((file) => {
228
252
  console.log(path.basename(file, '.css'));
@@ -14,16 +14,16 @@ div.floating-label {
14
14
  }
15
15
 
16
16
  label.floating-label__label {
17
- .background-color-token(floating-label-background-color, color-background-secondary);
18
17
  .color-token(floating-label-color, color-foreground-primary);
18
+
19
+ background-color: transparent;
19
20
  display: inline-block;
20
21
  left: 16px;
21
22
  overflow: hidden;
22
- padding-top: 3px;
23
23
  pointer-events: none;
24
24
  position: absolute;
25
25
  text-overflow: ellipsis;
26
- top: -3px;
26
+ top: 0;
27
27
  transform: scale(0.75, 0.75) translate(0, 2px);
28
28
  transform-origin: left;
29
29
  white-space: nowrap;
@@ -32,7 +32,6 @@ label.floating-label__label {
32
32
  }
33
33
 
34
34
  label.floating-label__label--focus {
35
- .background-color-token(floating-label-focus-background-color, color-background-primary);
36
35
  color: var(--color-background-inverse);
37
36
  }
38
37
 
@@ -55,14 +54,11 @@ label.floating-label__label--animate {
55
54
  }
56
55
 
57
56
  label.floating-label__label--disabled {
58
- .background-color-token(floating-label-disabled-background-color, color-background-secondary);
59
57
  .color-token(floating-label-disabled-color, color-foreground-disabled);
60
58
  }
61
59
 
62
60
  label.floating-label__label--invalid {
63
61
  .color-token(floating-label-invalid-color, color-foreground-attention);
64
-
65
- background-color: var(--color-red-1);
66
62
  }
67
63
 
68
64
  .floating-label .textbox__control,
@@ -49,13 +49,31 @@ export const disabledTextbox = () => `
49
49
 
50
50
  export const invalidTextbox = () => `
51
51
  <span class="floating-label">
52
- <label class="floating-label__label" for="firstName">First Name</label>
52
+ <label class="floating-label__label floating-label__label--inline floating-label__label--invalid" for="firstName">First Name</label>
53
53
  <span class="textbox">
54
54
  <input class="textbox__control" id="firstName03" type="text" aria-invalid="true" />
55
55
  </span>
56
56
  </span>
57
57
  `;
58
58
 
59
+ export const invalidTextboxWithValue = () => `
60
+ <span class="floating-label">
61
+ <label class="floating-label__label floating-label__label--invalid" for="firstName">First Name</label>
62
+ <span class="textbox">
63
+ <input class="textbox__control" id="firstName03" type="text" aria-invalid="true" value="value" />
64
+ </span>
65
+ </span>
66
+ `;
67
+
68
+ export const invalidTextboxWithPlaceholder = () => `
69
+ <span class="floating-label">
70
+ <label class="floating-label__label floating-label__label--invalid" for="firstName">First Name</label>
71
+ <span class="textbox">
72
+ <input class="textbox__control" id="firstName03" type="text" aria-invalid="true" placeholder="placeholder" />
73
+ </span>
74
+ </span>
75
+ `;
76
+
59
77
  export const longText = () => `
60
78
  <span class="floating-label">
61
79
  <label class="floating-label__label" for="firstName">Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiliogogogoch</label>
@@ -7,6 +7,7 @@
7
7
  display: inline-flex;
8
8
  flex: 0 1 auto;
9
9
  flex-direction: column;
10
+ font-family: inherit;
10
11
  font-size: @font-size-14;
11
12
  height: 32px;
12
13
  justify-content: center;
@@ -14,7 +14,7 @@ span.select {
14
14
  .select select {
15
15
  appearance: none;
16
16
  .background-color-token(select-background-color, color-background-secondary);
17
- .border-color-token(select-border-color, color-foreground-secondary);
17
+ .border-color-token(select-border-color, color-stroke-default);
18
18
  border-radius: var(--select-border-radius, var(--border-radius-50));
19
19
  border-style: solid;
20
20
  border-width: 1px;
@@ -54,13 +54,18 @@ span.select {
54
54
  width: auto;
55
55
 
56
56
  &:focus {
57
+ background-color: transparent;
57
58
  text-decoration: underline;
58
59
  }
59
60
  }
60
61
 
61
62
  .select select:focus {
62
63
  .background-color-token(select-focus-background-color, color-background-primary);
63
- .border-color-token(select-focus-border-color, color-foreground-primary);
64
+ }
65
+
66
+ .select select:focus:not(:read-only) {
67
+ .background-color-token(select-focus-background-color, color-background-primary);
68
+ .border-color-token(select-focus-border-color, color-stroke-default);
64
69
  outline: 0;
65
70
  text-decoration: underline;
66
71
  }
@@ -71,8 +76,8 @@ span.select {
71
76
  }
72
77
 
73
78
  .select select[disabled] {
74
- .background-color-token(select-disabled-background-color, color-background-disabled);
75
- .color-token(select-disabled-foregound-color, color-foreground-on-disabled);
79
+ .border-color-token(textbox-disabled-border-color, color-background-disabled);
80
+ .color-token(select-disabled-foregound-color, color-foreground-disabled);
76
81
  opacity: 1;
77
82
  }
78
83
 
@@ -81,20 +86,14 @@ span.select {
81
86
  }
82
87
 
83
88
  .select select[readonly] {
84
- .background-color-token(select-disabled-background-color, color-background-disabled);
85
- .color-token(select-disabled-foregound-color, color-foreground-on-disabled);
86
- }
87
-
88
- .select select[readonly] + svg {
89
- .color-token(select-disabled-foregound-color, color-foreground-on-disabled);
89
+ background-color: transparent;
90
+ border: none;
90
91
  }
91
92
 
92
93
  .select select[aria-invalid="true"] {
93
- .background-color-token(select-invalid-background-color, color-red-1);
94
94
  .border-color-token(select-invalid-border-color, color-stroke-attention);
95
95
  border-style: solid;
96
96
  border-width: 1px;
97
- .color-token(select-invalid-foreground-color, color-foreground-primary);
98
97
 
99
98
  &:focus {
100
99
  .background-color-token(select-focus-background-color, color-background-primary);
@@ -102,10 +101,6 @@ span.select {
102
101
  }
103
102
  }
104
103
 
105
- .select select[aria-invalid="true"] + svg {
106
- .color-token(select-invalid-foreground-color, color-foreground-primary);
107
- }
108
-
109
104
  // stylelint-disable no-descending-specificity
110
105
  [dir="rtl"] {
111
106
  .select > select {
@@ -0,0 +1,66 @@
1
+ export default { title: 'Select/Select/Floating Label' };
2
+
3
+ export const defaultLabel = () => `
4
+ <span class="floating-label">
5
+ <label class="floating-label__label" for="select-01">Choose Option</label>
6
+ <span class="select">
7
+ <select id="select-01">
8
+ <option value="1">Option 1 with long text</option>
9
+ <option value="2">Option 2</option>
10
+ <option value="3">Option 3</option>
11
+ </select>
12
+ <svg class="icon icon--dropdown" focusable="false" height="8" width="8" aria-hidden="true">
13
+ <use xlink:href="#icon-dropdown"></use>
14
+ </svg>
15
+ </span>
16
+ </span>
17
+ `;
18
+
19
+ export const selectedOption = () => `
20
+ <span class="floating-label">
21
+ <label class="floating-label__label floating-label__label--inline" for="select-01">Here are your options</label>
22
+ <span class="select">
23
+ <select id="select-01">
24
+ <option value=""></option>
25
+ <option value="1">Option 1 with long text</option>
26
+ <option value="2">Option 2</option>
27
+ <option value="3">Option 3</option>
28
+ </select>
29
+ <svg class="icon icon--dropdown" focusable="false" height="8" width="8" aria-hidden="true">
30
+ <use xlink:href="#icon-dropdown"></use>
31
+ </svg>
32
+ </span>
33
+ </span>
34
+ `;
35
+
36
+ export const errorState = () => `
37
+ <span class="floating-label">
38
+ <label class="floating-label__label floating-label__label--invalid" for="select-03">Choose Option</label>
39
+ <span class="select">
40
+ <select id="select-03" aria-invalid="true">
41
+ <option value="1">Option 1 with long text</option>
42
+ <option value="2">Option 2</option>
43
+ <option value="3">Option 3</option>
44
+ </select>
45
+ <svg class="icon icon--dropdown" focusable="false" height="8" width="8" aria-hidden="true">
46
+ <use xlink:href="#icon-dropdown"></use>
47
+ </svg>
48
+ </span>
49
+ </span>
50
+ `;
51
+
52
+ export const disabled = () => `
53
+ <span class="floating-label">
54
+ <label class="floating-label__label" for="select-03">Choose Option</label>
55
+ <span class="select">
56
+ <select disabled>
57
+ <option value="1">Option 1</option>
58
+ <option value="2">Option 2 can't pick</option>
59
+ <option value="3">Option 3</option>
60
+ </select>
61
+ <svg class="icon icon--dropdown" focusable="false" height="8" width="8" aria-hidden="true">
62
+ <use xlink:href="#icon-dropdown"></use>
63
+ </svg>
64
+ </span>
65
+ </span>
66
+ `;
@@ -46,6 +46,18 @@ export const inheritColor = () => `
46
46
  </div>
47
47
  `;
48
48
 
49
+ export const error = () => `
50
+ <span class="textbox">
51
+ <input class="textbox__control" type="text" aria-invalid="true" placeholder="placeholder text" />
52
+ </span>
53
+ `;
54
+
55
+ export const errorWithValue = () => `
56
+ <span class="textbox">
57
+ <input class="textbox__control" type="text" placeholder="placeholder text" aria-invalid="true" value="value" />
58
+ </span>
59
+ `;
60
+
49
61
  export const fluid = () => `
50
62
  <div class="textbox">
51
63
  <input class="textbox__control textbox__control--fluid" type="text" placeholder="placeholder text" />
@@ -7,6 +7,7 @@
7
7
  position: relative;
8
8
 
9
9
  button.icon-btn {
10
+ background-color: transparent;
10
11
  display: inline-flex;
11
12
  height: 100%;
12
13
  justify-content: center;
@@ -51,7 +52,6 @@ textarea.textbox__control {
51
52
  margin: 0; // Remove the margin in Firefox and Safari.
52
53
 
53
54
  &[disabled] {
54
- .background-color-token(textbox-disabled-background-color, color-background-secondary);
55
55
  .border-color-token(textbox-disabled-border-color, color-background-disabled);
56
56
  .color-token(textbox-disabled-foreground-color, color-foreground-disabled);
57
57
 
@@ -69,21 +69,16 @@ textarea.textbox__control {
69
69
  }
70
70
 
71
71
  &[readonly] {
72
- .color-token(textbox-readonly-color, color-foreground-on-secondary);
72
+ background-color: transparent;
73
+ border: none;
74
+ padding-left: 0;
75
+ padding-right: 0;
73
76
  }
74
77
 
75
78
  &[aria-invalid="true"] {
76
- background-color: var(--color-red-1);
77
79
  .border-color-token(textbox-invalid-foreground-color, color-stroke-attention);
78
80
  }
79
81
 
80
- &:focus {
81
- .border-color-token(textbox-focus-border-color, color-stroke-default);
82
- .background-color-token(textbox-focus-background-color, color-background-primary);
83
- .color-token(textbox-focus-foreground-color, color-foreground-on-secondary);
84
- outline: 0;
85
- }
86
-
87
82
  &::-webkit-input-placeholder {
88
83
  .color-token(textbox-placeholder-color, color-foreground-on-secondary);
89
84
  font-weight: 200;
@@ -133,6 +128,19 @@ input.textbox__control--large {
133
128
  }
134
129
  }
135
130
 
131
+ input.textbox__control:not(:read-only):focus,
132
+ textarea.textbox__control:not(:read-only):focus {
133
+ .border-color-token(textbox-focus-border-color, color-stroke-default);
134
+ .background-color-token(textbox-focus-background-color, color-background-primary);
135
+ outline: 0;
136
+ }
137
+
138
+ input.textbox__control[readonly]:focus,
139
+ textarea.textbox__control[readonly]:focus {
140
+ outline: 0;
141
+ text-decoration: underline;
142
+ }
143
+
136
144
  .textbox > svg:first-child {
137
145
  left: @spacing-200;
138
146
 
@@ -5,9 +5,9 @@ export const primaryAction = () => `
5
5
  <div class="toast-dialog__window">
6
6
  <div class="toast-dialog__header">
7
7
  <h2>User Privacy Preferences</h2>
8
- <button class="icon-btn toast-dialog__close" type="button" aria-label="Close notification dialog">
9
- <svg class="icon icon--close" focusable="false" height="24" width="24">
10
- <use xlink:href="#icon-close"></use>
8
+ <button class="icon-btn icon-btn--transparent toast-dialog__close" type="button" aria-label="Close notification dialog">
9
+ <svg class="icon icon--close icon--close-small" focusable="false">
10
+ <use href="#icon-close-small"></use>
11
11
  </svg>
12
12
  </button>
13
13
  </div>
@@ -27,9 +27,9 @@ export const secondaryAction = () => `
27
27
  <div class="toast-dialog__window">
28
28
  <div class="toast-dialog__header">
29
29
  <h2>User Privacy Preferences</h2>
30
- <button class="icon-btn toast-dialog__close" type="button" aria-label="Close notification dialog">
31
- <svg class="icon icon--close" focusable="false" height="24" width="24">
32
- <use xlink:href="#icon-close"></use>
30
+ <button class="icon-btn icon-btn--transparent toast-dialog__close" type="button" aria-label="Close notification dialog">
31
+ <svg class="icon icon--close icon--close-small" focusable="false">
32
+ <use href="#icon-close-small"></use>
33
33
  </svg>
34
34
  </button>
35
35
  </div>
@@ -51,9 +51,9 @@ export const RTL = () => `
51
51
  <div class="toast-dialog__window">
52
52
  <div class="toast-dialog__header">
53
53
  <h2>User Privacy Preferences</h2>
54
- <button style="margin-right: 140px;" class="icon-btn toast-dialog__close" type="button" aria-label="Close notification dialog">
55
- <svg class="icon icon--close" focusable="false" height="24" width="24">
56
- <use xlink:href="#icon-close"></use>
54
+ <button class="icon-btn icon-btn--transparent toast-dialog__close" type="button" aria-label="Close notification dialog">
55
+ <svg class="icon icon--close icon--close-small" focusable="false">
56
+ <use href="#icon-close-small"></use>
57
57
  </svg>
58
58
  </button>
59
59
  </div>
@@ -2,7 +2,7 @@
2
2
  :root {
3
3
  --color-background-primary: var(--color-neutral-7);
4
4
  --color-background-secondary: var(--color-neutral-6);
5
- --color-background-disabled: var(--color-neutral-4);
5
+ --color-background-disabled: var(--color-neutral-5);
6
6
  --color-background-inverse: var(--color-neutral-1);
7
7
  --color-background-attention: var(--color-red-3);
8
8
  --color-background-confirmation: var(--color-green-4);
@@ -4,7 +4,7 @@
4
4
  --color-background-disabled: var(--color-neutral-3);
5
5
  --color-background-inverse: var(--color-neutral-6);
6
6
  --color-background-attention: var(--color-red-4);
7
- --color-background-confirmation: var(--color-green-4);
7
+ --color-background-confirmation: var(--color-green-6);
8
8
  --color-background-information: var(--color-blue-4);
9
9
  --color-background-accent: var(--color-blue-4);
10
10
  --color-background-invalid: var(--color-red-1);