@spectrabrain/eds 0.0.4 → 0.1.1

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 (62) hide show
  1. package/AI.md +13 -40
  2. package/AI_CONTEXT.json +90 -0
  3. package/CHANGELOG.md +120 -0
  4. package/CONSUMER_AGENT.md +152 -0
  5. package/FRONTEND_CONVENTIONS.md +252 -0
  6. package/QUICKSTART.md +42 -0
  7. package/README.md +38 -69
  8. package/TAILWIND_V4.md +57 -243
  9. package/TOKEN_CONTEXT.md +98 -0
  10. package/consumer/align/templates/components.json +21 -0
  11. package/consumer/align/templates/env.mock +1 -0
  12. package/consumer/align/templates/eslint.config.js +35 -0
  13. package/consumer/align/templates/package.scripts.json +10 -0
  14. package/consumer/align/templates/prettierignore +2 -0
  15. package/consumer/align/templates/prettierrc.json +7 -0
  16. package/consumer/align/templates/src/app/App.tsx +16 -0
  17. package/consumer/align/templates/src/app/main.tsx +27 -0
  18. package/consumer/align/templates/src/app/providers/ErrorBoundary.tsx +58 -0
  19. package/consumer/align/templates/src/app/providers/ErrorHandler.tsx +29 -0
  20. package/consumer/align/templates/src/app/router/index.tsx +23 -0
  21. package/consumer/align/templates/src/app/styles/index.css +2 -0
  22. package/consumer/align/templates/src/mocks/browser.ts +5 -0
  23. package/consumer/align/templates/src/mocks/handlers.ts +4 -0
  24. package/consumer/align/templates/src/shared/api/index.ts +23 -0
  25. package/consumer/align/templates/src/shared/api/queryClient.ts +24 -0
  26. package/consumer/align/templates/src/shared/lib/eventBus.ts +44 -0
  27. package/consumer/align/templates/src/shared/lib/utils/index.ts +6 -0
  28. package/consumer/align/templates/src/vite-env.d.ts +2 -0
  29. package/consumer/align/templates/tsconfig.json +22 -0
  30. package/consumer/align/templates/vite.config.babel.ts +36 -0
  31. package/consumer/align/templates/vite.config.rolldown.ts +35 -0
  32. package/consumer/align-analysis.mjs +1159 -0
  33. package/consumer/align-plan.mjs +377 -0
  34. package/consumer/align-rules.mjs +473 -0
  35. package/consumer/align.mjs +401 -0
  36. package/consumer/cli.mjs +157 -0
  37. package/consumer/css-root.mjs +259 -0
  38. package/consumer/doctor.mjs +204 -0
  39. package/consumer/generate-tailwind.mjs +83 -0
  40. package/consumer/init.mjs +186 -0
  41. package/consumer/managed-block.mjs +126 -0
  42. package/consumer/paths.mjs +266 -0
  43. package/consumer/register-scripts.mjs +129 -0
  44. package/consumer/scan-classes.mjs +71 -0
  45. package/consumer/sync.mjs +155 -0
  46. package/consumer/update-agent-context.mjs +143 -0
  47. package/consumer-postinstall.mjs +60 -0
  48. package/dist/base.css +4 -0
  49. package/dist/components/Button/README.md +70 -80
  50. package/dist/components/Button/spec.json +71 -133
  51. package/dist/components.css +102 -368
  52. package/dist/index.d.mts +40 -1
  53. package/dist/index.d.ts +40 -1
  54. package/dist/index.js +34 -6250
  55. package/dist/index.mjs +36 -6252
  56. package/dist/styles.css +1 -0
  57. package/dist/tokens.d.mts +5 -2
  58. package/dist/tokens.d.ts +5 -2
  59. package/dist/tokens.js +6 -7
  60. package/dist/tokens.mjs +6 -7
  61. package/llms.txt +22 -9
  62. package/package.json +33 -2
@@ -3,162 +3,60 @@
3
3
  --eds-button-focus-root-outlineColor: var(--eds-color-stroke-focusRing);
4
4
  --eds-button-focus-root-outlineOffset: 2px;
5
5
  --eds-button-focus-root-outlineWidth: 2px;
6
- --eds-button-size-md-iconBoth-label-fontFamily: var(--eds-typography-title3-fontFamily);
7
- --eds-button-size-md-iconBoth-label-fontSize: var(--eds-typography-title3-fontSize);
8
- --eds-button-size-md-iconBoth-label-fontWeight: var(--eds-typography-title3-fontWeight);
9
- --eds-button-size-md-iconBoth-label-letterSpacing: var(--eds-typography-title3-letterSpacing);
10
- --eds-button-size-md-iconBoth-label-lineHeight: var(--eds-typography-title3-lineHeight);
11
- --eds-button-size-md-iconBoth-prefixIcon-size: 16px;
12
- --eds-button-size-md-iconBoth-root-cornerRadius: 6px;
13
- --eds-button-size-md-iconBoth-root-gap: 4px;
14
- --eds-button-size-md-iconBoth-root-height: 40px;
15
- --eds-button-size-md-iconBoth-root-paddingX: 12px;
16
- --eds-button-size-md-iconBoth-root-paddingY: 10px;
17
- --eds-button-size-md-iconBoth-suffixIcon-size: 16px;
18
- --eds-button-size-md-iconFirst-label-fontFamily: var(--eds-typography-title3-fontFamily);
19
- --eds-button-size-md-iconFirst-label-fontSize: var(--eds-typography-title3-fontSize);
20
- --eds-button-size-md-iconFirst-label-fontWeight: var(--eds-typography-title3-fontWeight);
21
- --eds-button-size-md-iconFirst-label-letterSpacing: var(--eds-typography-title3-letterSpacing);
22
- --eds-button-size-md-iconFirst-label-lineHeight: var(--eds-typography-title3-lineHeight);
23
- --eds-button-size-md-iconFirst-prefixIcon-size: 16px;
24
- --eds-button-size-md-iconFirst-root-cornerRadius: 6px;
25
- --eds-button-size-md-iconFirst-root-gap: 4px;
26
- --eds-button-size-md-iconFirst-root-height: 40px;
27
- --eds-button-size-md-iconFirst-root-paddingX: 12px;
28
- --eds-button-size-md-iconFirst-root-paddingY: 10px;
29
- --eds-button-size-md-iconLast-label-fontFamily: var(--eds-typography-title3-fontFamily);
30
- --eds-button-size-md-iconLast-label-fontSize: var(--eds-typography-title3-fontSize);
31
- --eds-button-size-md-iconLast-label-fontWeight: var(--eds-typography-title3-fontWeight);
32
- --eds-button-size-md-iconLast-label-letterSpacing: var(--eds-typography-title3-letterSpacing);
33
- --eds-button-size-md-iconLast-label-lineHeight: var(--eds-typography-title3-lineHeight);
34
- --eds-button-size-md-iconLast-root-cornerRadius: 6px;
35
- --eds-button-size-md-iconLast-root-gap: 4px;
36
- --eds-button-size-md-iconLast-root-height: 40px;
37
- --eds-button-size-md-iconLast-root-paddingX: 12px;
38
- --eds-button-size-md-iconLast-root-paddingY: 10px;
39
- --eds-button-size-md-iconLast-suffixIcon-size: 16px;
40
6
  --eds-button-size-md-iconOnly-icon-size: 18px;
41
- --eds-button-size-md-iconOnly-root-cornerRadius: 6px;
42
- --eds-button-size-md-iconOnly-root-height: 40px;
43
7
  --eds-button-size-md-iconOnly-root-minWidth: 40px;
44
8
  --eds-button-size-md-iconOnly-root-paddingX: 10px;
45
9
  --eds-button-size-md-iconOnly-root-paddingY: 10px;
10
+ --eds-button-size-md-label-fontFamily: var(--eds-typography-title3-fontFamily);
11
+ --eds-button-size-md-label-fontSize: var(--eds-typography-title3-fontSize);
12
+ --eds-button-size-md-label-fontWeight: var(--eds-typography-title3-fontWeight);
13
+ --eds-button-size-md-label-letterSpacing: var(--eds-typography-title3-letterSpacing);
14
+ --eds-button-size-md-label-lineHeight: var(--eds-typography-title3-lineHeight);
15
+ --eds-button-size-md-prefixIcon-size: 16px;
46
16
  --eds-button-size-md-progressCircle-size: 16px;
47
17
  --eds-button-size-md-progressCircle-thickness: 1.5px;
48
- --eds-button-size-md-textOnly-label-fontFamily: var(--eds-typography-title3-fontFamily);
49
- --eds-button-size-md-textOnly-label-fontSize: var(--eds-typography-title3-fontSize);
50
- --eds-button-size-md-textOnly-label-fontWeight: var(--eds-typography-title3-fontWeight);
51
- --eds-button-size-md-textOnly-label-letterSpacing: var(--eds-typography-title3-letterSpacing);
52
- --eds-button-size-md-textOnly-label-lineHeight: var(--eds-typography-title3-lineHeight);
53
- --eds-button-size-md-textOnly-root-cornerRadius: 6px;
54
- --eds-button-size-md-textOnly-root-gap: 4px;
55
- --eds-button-size-md-textOnly-root-height: 40px;
56
- --eds-button-size-md-textOnly-root-paddingX: 12px;
57
- --eds-button-size-md-textOnly-root-paddingY: 10px;
58
- --eds-button-size-sm-iconBoth-label-fontFamily: var(--eds-typography-title3-fontFamily);
59
- --eds-button-size-sm-iconBoth-label-fontSize: var(--eds-typography-title3-fontSize);
60
- --eds-button-size-sm-iconBoth-label-fontWeight: var(--eds-typography-title3-fontWeight);
61
- --eds-button-size-sm-iconBoth-label-letterSpacing: var(--eds-typography-title3-letterSpacing);
62
- --eds-button-size-sm-iconBoth-label-lineHeight: var(--eds-typography-title3-lineHeight);
63
- --eds-button-size-sm-iconBoth-prefixIcon-size: 14px;
64
- --eds-button-size-sm-iconBoth-root-cornerRadius: 6px;
65
- --eds-button-size-sm-iconBoth-root-gap: 4px;
66
- --eds-button-size-sm-iconBoth-root-height: 36px;
67
- --eds-button-size-sm-iconBoth-root-paddingX: 12px;
68
- --eds-button-size-sm-iconBoth-root-paddingY: 8px;
69
- --eds-button-size-sm-iconBoth-suffixIcon-size: 14px;
70
- --eds-button-size-sm-iconFirst-label-fontFamily: var(--eds-typography-title3-fontFamily);
71
- --eds-button-size-sm-iconFirst-label-fontSize: var(--eds-typography-title3-fontSize);
72
- --eds-button-size-sm-iconFirst-label-fontWeight: var(--eds-typography-title3-fontWeight);
73
- --eds-button-size-sm-iconFirst-label-letterSpacing: var(--eds-typography-title3-letterSpacing);
74
- --eds-button-size-sm-iconFirst-label-lineHeight: var(--eds-typography-title3-lineHeight);
75
- --eds-button-size-sm-iconFirst-prefixIcon-size: 14px;
76
- --eds-button-size-sm-iconFirst-root-cornerRadius: 6px;
77
- --eds-button-size-sm-iconFirst-root-gap: 4px;
78
- --eds-button-size-sm-iconFirst-root-height: 36px;
79
- --eds-button-size-sm-iconFirst-root-paddingX: 12px;
80
- --eds-button-size-sm-iconFirst-root-paddingY: 8px;
81
- --eds-button-size-sm-iconLast-label-fontFamily: var(--eds-typography-title3-fontFamily);
82
- --eds-button-size-sm-iconLast-label-fontSize: var(--eds-typography-title3-fontSize);
83
- --eds-button-size-sm-iconLast-label-fontWeight: var(--eds-typography-title3-fontWeight);
84
- --eds-button-size-sm-iconLast-label-letterSpacing: var(--eds-typography-title3-letterSpacing);
85
- --eds-button-size-sm-iconLast-label-lineHeight: var(--eds-typography-title3-lineHeight);
86
- --eds-button-size-sm-iconLast-root-cornerRadius: 6px;
87
- --eds-button-size-sm-iconLast-root-gap: 4px;
88
- --eds-button-size-sm-iconLast-root-height: 36px;
89
- --eds-button-size-sm-iconLast-root-paddingX: 12px;
90
- --eds-button-size-sm-iconLast-root-paddingY: 8px;
91
- --eds-button-size-sm-iconLast-suffixIcon-size: 14px;
18
+ --eds-button-size-md-root-cornerRadius: 6px;
19
+ --eds-button-size-md-root-gap: 4px;
20
+ --eds-button-size-md-root-height: 40px;
21
+ --eds-button-size-md-root-paddingX: 12px;
22
+ --eds-button-size-md-root-paddingY: 10px;
23
+ --eds-button-size-md-suffixIcon-size: 16px;
92
24
  --eds-button-size-sm-iconOnly-icon-size: 16px;
93
- --eds-button-size-sm-iconOnly-root-cornerRadius: 6px;
94
- --eds-button-size-sm-iconOnly-root-height: 36px;
95
25
  --eds-button-size-sm-iconOnly-root-minWidth: 30px;
96
26
  --eds-button-size-sm-iconOnly-root-paddingX: 10px;
97
27
  --eds-button-size-sm-iconOnly-root-paddingY: 10px;
28
+ --eds-button-size-sm-label-fontFamily: var(--eds-typography-title3-fontFamily);
29
+ --eds-button-size-sm-label-fontSize: var(--eds-typography-title3-fontSize);
30
+ --eds-button-size-sm-label-fontWeight: var(--eds-typography-title3-fontWeight);
31
+ --eds-button-size-sm-label-letterSpacing: var(--eds-typography-title3-letterSpacing);
32
+ --eds-button-size-sm-label-lineHeight: var(--eds-typography-title3-lineHeight);
33
+ --eds-button-size-sm-prefixIcon-size: 14px;
98
34
  --eds-button-size-sm-progressCircle-size: 14px;
99
35
  --eds-button-size-sm-progressCircle-thickness: 1.5px;
100
- --eds-button-size-sm-textOnly-label-fontFamily: var(--eds-typography-title3-fontFamily);
101
- --eds-button-size-sm-textOnly-label-fontSize: var(--eds-typography-title3-fontSize);
102
- --eds-button-size-sm-textOnly-label-fontWeight: var(--eds-typography-title3-fontWeight);
103
- --eds-button-size-sm-textOnly-label-letterSpacing: var(--eds-typography-title3-letterSpacing);
104
- --eds-button-size-sm-textOnly-label-lineHeight: var(--eds-typography-title3-lineHeight);
105
- --eds-button-size-sm-textOnly-root-cornerRadius: 6px;
106
- --eds-button-size-sm-textOnly-root-gap: 4px;
107
- --eds-button-size-sm-textOnly-root-height: 36px;
108
- --eds-button-size-sm-textOnly-root-paddingX: 12px;
109
- --eds-button-size-sm-textOnly-root-paddingY: 8px;
110
- --eds-button-size-xs-iconBoth-label-fontFamily: var(--eds-typography-body3-fontFamily);
111
- --eds-button-size-xs-iconBoth-label-fontSize: var(--eds-typography-body3-fontSize);
112
- --eds-button-size-xs-iconBoth-label-fontWeight: var(--eds-typography-body3-fontWeight);
113
- --eds-button-size-xs-iconBoth-label-letterSpacing: var(--eds-typography-body3-letterSpacing);
114
- --eds-button-size-xs-iconBoth-label-lineHeight: var(--eds-typography-body3-lineHeight);
115
- --eds-button-size-xs-iconBoth-prefixIcon-size: 14px;
116
- --eds-button-size-xs-iconBoth-root-cornerRadius: 4px;
117
- --eds-button-size-xs-iconBoth-root-gap: 4px;
118
- --eds-button-size-xs-iconBoth-root-height: 30px;
119
- --eds-button-size-xs-iconBoth-root-paddingX: 12px;
120
- --eds-button-size-xs-iconBoth-root-paddingY: 0px;
121
- --eds-button-size-xs-iconBoth-suffixIcon-size: 14px;
122
- --eds-button-size-xs-iconFirst-label-fontFamily: var(--eds-typography-body3-fontFamily);
123
- --eds-button-size-xs-iconFirst-label-fontSize: var(--eds-typography-body3-fontSize);
124
- --eds-button-size-xs-iconFirst-label-fontWeight: var(--eds-typography-body3-fontWeight);
125
- --eds-button-size-xs-iconFirst-label-letterSpacing: var(--eds-typography-body3-letterSpacing);
126
- --eds-button-size-xs-iconFirst-label-lineHeight: var(--eds-typography-body3-lineHeight);
127
- --eds-button-size-xs-iconFirst-prefixIcon-size: 14px;
128
- --eds-button-size-xs-iconFirst-root-cornerRadius: 4px;
129
- --eds-button-size-xs-iconFirst-root-gap: 4px;
130
- --eds-button-size-xs-iconFirst-root-height: 30px;
131
- --eds-button-size-xs-iconFirst-root-paddingX: 12px;
132
- --eds-button-size-xs-iconFirst-root-paddingY: 0px;
133
- --eds-button-size-xs-iconLast-label-fontFamily: var(--eds-typography-body3-fontFamily);
134
- --eds-button-size-xs-iconLast-label-fontSize: var(--eds-typography-body3-fontSize);
135
- --eds-button-size-xs-iconLast-label-fontWeight: var(--eds-typography-body3-fontWeight);
136
- --eds-button-size-xs-iconLast-label-letterSpacing: var(--eds-typography-body3-letterSpacing);
137
- --eds-button-size-xs-iconLast-label-lineHeight: var(--eds-typography-body3-lineHeight);
138
- --eds-button-size-xs-iconLast-root-cornerRadius: 4px;
139
- --eds-button-size-xs-iconLast-root-gap: 4px;
140
- --eds-button-size-xs-iconLast-root-height: 30px;
141
- --eds-button-size-xs-iconLast-root-paddingX: 12px;
142
- --eds-button-size-xs-iconLast-root-paddingY: 0px;
143
- --eds-button-size-xs-iconLast-suffixIcon-size: 14px;
36
+ --eds-button-size-sm-root-cornerRadius: 6px;
37
+ --eds-button-size-sm-root-gap: 4px;
38
+ --eds-button-size-sm-root-height: 36px;
39
+ --eds-button-size-sm-root-paddingX: 12px;
40
+ --eds-button-size-sm-root-paddingY: 8px;
41
+ --eds-button-size-sm-suffixIcon-size: 14px;
144
42
  --eds-button-size-xs-iconOnly-icon-size: 14px;
145
- --eds-button-size-xs-iconOnly-root-cornerRadius: 4px;
146
- --eds-button-size-xs-iconOnly-root-height: 30px;
147
43
  --eds-button-size-xs-iconOnly-root-minWidth: 30px;
148
44
  --eds-button-size-xs-iconOnly-root-paddingX: 8px;
149
45
  --eds-button-size-xs-iconOnly-root-paddingY: 8px;
46
+ --eds-button-size-xs-label-fontFamily: var(--eds-typography-body3-fontFamily);
47
+ --eds-button-size-xs-label-fontSize: var(--eds-typography-body3-fontSize);
48
+ --eds-button-size-xs-label-fontWeight: var(--eds-typography-body3-fontWeight);
49
+ --eds-button-size-xs-label-letterSpacing: var(--eds-typography-body3-letterSpacing);
50
+ --eds-button-size-xs-label-lineHeight: var(--eds-typography-body3-lineHeight);
51
+ --eds-button-size-xs-prefixIcon-size: 14px;
150
52
  --eds-button-size-xs-progressCircle-size: 14px;
151
53
  --eds-button-size-xs-progressCircle-thickness: 1.3px;
152
- --eds-button-size-xs-textOnly-label-fontFamily: var(--eds-typography-body3-fontFamily);
153
- --eds-button-size-xs-textOnly-label-fontSize: var(--eds-typography-body3-fontSize);
154
- --eds-button-size-xs-textOnly-label-fontWeight: var(--eds-typography-body3-fontWeight);
155
- --eds-button-size-xs-textOnly-label-letterSpacing: var(--eds-typography-body3-letterSpacing);
156
- --eds-button-size-xs-textOnly-label-lineHeight: var(--eds-typography-body3-lineHeight);
157
- --eds-button-size-xs-textOnly-root-cornerRadius: 4px;
158
- --eds-button-size-xs-textOnly-root-gap: 4px;
159
- --eds-button-size-xs-textOnly-root-height: 30px;
160
- --eds-button-size-xs-textOnly-root-paddingX: 12px;
161
- --eds-button-size-xs-textOnly-root-paddingY: 0px;
54
+ --eds-button-size-xs-root-cornerRadius: 4px;
55
+ --eds-button-size-xs-root-gap: 4px;
56
+ --eds-button-size-xs-root-height: 30px;
57
+ --eds-button-size-xs-root-paddingX: 12px;
58
+ --eds-button-size-xs-root-paddingY: 0px;
59
+ --eds-button-size-xs-suffixIcon-size: 14px;
162
60
  --eds-button-style-brand-outline-disabled-label-color: var(--eds-color-fg-disabled);
163
61
  --eds-button-style-brand-outline-disabled-root-backgroundColor: var(--eds-color-bg-transparent);
164
62
  --eds-button-style-brand-outline-disabled-root-borderColor: var(--eds-color-stroke-neutral-secondary);
@@ -245,9 +143,7 @@
245
143
  display: inline-flex;
246
144
  align-items: center;
247
145
  justify-content: center;
248
- flex: 0 0 auto;
249
146
  appearance: none;
250
- margin: 0;
251
147
  border: 0;
252
148
  font: inherit;
253
149
  white-space: nowrap;
@@ -377,93 +273,41 @@
377
273
  }
378
274
  }
379
275
 
380
- .eds-button__button[data-size="xs"][data-layout="textOnly"] {
381
- height: var(--eds-button-size-xs-textOnly-root-height);
382
- border-radius: var(--eds-button-size-xs-textOnly-root-cornerRadius);
383
- gap: var(--eds-button-size-xs-textOnly-root-gap);
384
- padding-inline: var(--eds-button-size-xs-textOnly-root-paddingX);
385
- padding-block: var(--eds-button-size-xs-textOnly-root-paddingY);
386
- }
387
-
388
- .eds-button__button[data-size="xs"][data-layout="textOnly"] .eds-button__label {
389
- font-family: var(--eds-button-size-xs-textOnly-label-fontFamily);
390
- font-weight: var(--eds-button-size-xs-textOnly-label-fontWeight);
391
- font-size: var(--eds-button-size-xs-textOnly-label-fontSize);
392
- line-height: var(--eds-button-size-xs-textOnly-label-lineHeight);
393
- letter-spacing: var(--eds-button-size-xs-textOnly-label-letterSpacing);
394
- }
395
-
396
- .eds-button__button[data-size="xs"][data-layout="iconFirst"] {
397
- height: var(--eds-button-size-xs-iconFirst-root-height);
398
- border-radius: var(--eds-button-size-xs-iconFirst-root-cornerRadius);
399
- gap: var(--eds-button-size-xs-iconFirst-root-gap);
400
- padding-inline: var(--eds-button-size-xs-iconFirst-root-paddingX);
401
- padding-block: var(--eds-button-size-xs-iconFirst-root-paddingY);
402
- }
403
-
404
- .eds-button__button[data-size="xs"][data-layout="iconFirst"] .eds-button__label {
405
- font-family: var(--eds-button-size-xs-iconFirst-label-fontFamily);
406
- font-weight: var(--eds-button-size-xs-iconFirst-label-fontWeight);
407
- font-size: var(--eds-button-size-xs-iconFirst-label-fontSize);
408
- line-height: var(--eds-button-size-xs-iconFirst-label-lineHeight);
409
- letter-spacing: var(--eds-button-size-xs-iconFirst-label-letterSpacing);
410
- }
411
-
412
- .eds-button__button[data-size="xs"][data-layout="iconFirst"] .eds-button__prefixIcon {
413
- width: var(--eds-button-size-xs-iconFirst-prefixIcon-size);
414
- height: var(--eds-button-size-xs-iconFirst-prefixIcon-size);
415
- }
416
-
417
- .eds-button__button[data-size="xs"][data-layout="iconLast"] {
418
- height: var(--eds-button-size-xs-iconLast-root-height);
419
- border-radius: var(--eds-button-size-xs-iconLast-root-cornerRadius);
420
- gap: var(--eds-button-size-xs-iconLast-root-gap);
421
- padding-inline: var(--eds-button-size-xs-iconLast-root-paddingX);
422
- padding-block: var(--eds-button-size-xs-iconLast-root-paddingY);
276
+ /*
277
+ * Size and layout. Height and corner radius apply to every layout; gap, padding and the label text style
278
+ * apply to the layouts that render a label; iconOnly swaps in its own min-width and padding.
279
+ * [data-layout] and :not([data-layout="iconOnly"]) keep the specificity of one attribute selector per layout.
280
+ */
281
+ .eds-button__button[data-size="xs"][data-layout] {
282
+ height: var(--eds-button-size-xs-root-height);
283
+ border-radius: var(--eds-button-size-xs-root-cornerRadius);
423
284
  }
424
285
 
425
- .eds-button__button[data-size="xs"][data-layout="iconLast"] .eds-button__label {
426
- font-family: var(--eds-button-size-xs-iconLast-label-fontFamily);
427
- font-weight: var(--eds-button-size-xs-iconLast-label-fontWeight);
428
- font-size: var(--eds-button-size-xs-iconLast-label-fontSize);
429
- line-height: var(--eds-button-size-xs-iconLast-label-lineHeight);
430
- letter-spacing: var(--eds-button-size-xs-iconLast-label-letterSpacing);
286
+ .eds-button__button[data-size="xs"]:not([data-layout="iconOnly"]) {
287
+ gap: var(--eds-button-size-xs-root-gap);
288
+ padding-inline: var(--eds-button-size-xs-root-paddingX);
289
+ padding-block: var(--eds-button-size-xs-root-paddingY);
431
290
  }
432
291
 
433
- .eds-button__button[data-size="xs"][data-layout="iconLast"] .eds-button__suffixIcon {
434
- width: var(--eds-button-size-xs-iconLast-suffixIcon-size);
435
- height: var(--eds-button-size-xs-iconLast-suffixIcon-size);
292
+ .eds-button__button[data-size="xs"][data-layout] .eds-button__label {
293
+ font-family: var(--eds-button-size-xs-label-fontFamily);
294
+ font-weight: var(--eds-button-size-xs-label-fontWeight);
295
+ font-size: var(--eds-button-size-xs-label-fontSize);
296
+ line-height: var(--eds-button-size-xs-label-lineHeight);
297
+ letter-spacing: var(--eds-button-size-xs-label-letterSpacing);
436
298
  }
437
299
 
438
- .eds-button__button[data-size="xs"][data-layout="iconBoth"] {
439
- height: var(--eds-button-size-xs-iconBoth-root-height);
440
- border-radius: var(--eds-button-size-xs-iconBoth-root-cornerRadius);
441
- gap: var(--eds-button-size-xs-iconBoth-root-gap);
442
- padding-inline: var(--eds-button-size-xs-iconBoth-root-paddingX);
443
- padding-block: var(--eds-button-size-xs-iconBoth-root-paddingY);
300
+ .eds-button__button[data-size="xs"][data-layout] .eds-button__prefixIcon {
301
+ width: var(--eds-button-size-xs-prefixIcon-size);
302
+ height: var(--eds-button-size-xs-prefixIcon-size);
444
303
  }
445
304
 
446
- .eds-button__button[data-size="xs"][data-layout="iconBoth"] .eds-button__label {
447
- font-family: var(--eds-button-size-xs-iconBoth-label-fontFamily);
448
- font-weight: var(--eds-button-size-xs-iconBoth-label-fontWeight);
449
- font-size: var(--eds-button-size-xs-iconBoth-label-fontSize);
450
- line-height: var(--eds-button-size-xs-iconBoth-label-lineHeight);
451
- letter-spacing: var(--eds-button-size-xs-iconBoth-label-letterSpacing);
452
- }
453
-
454
- .eds-button__button[data-size="xs"][data-layout="iconBoth"] .eds-button__prefixIcon {
455
- width: var(--eds-button-size-xs-iconBoth-prefixIcon-size);
456
- height: var(--eds-button-size-xs-iconBoth-prefixIcon-size);
457
- }
458
-
459
- .eds-button__button[data-size="xs"][data-layout="iconBoth"] .eds-button__suffixIcon {
460
- width: var(--eds-button-size-xs-iconBoth-suffixIcon-size);
461
- height: var(--eds-button-size-xs-iconBoth-suffixIcon-size);
305
+ .eds-button__button[data-size="xs"][data-layout] .eds-button__suffixIcon {
306
+ width: var(--eds-button-size-xs-suffixIcon-size);
307
+ height: var(--eds-button-size-xs-suffixIcon-size);
462
308
  }
463
309
 
464
310
  .eds-button__button[data-size="xs"][data-layout="iconOnly"] {
465
- height: var(--eds-button-size-xs-iconOnly-root-height);
466
- border-radius: var(--eds-button-size-xs-iconOnly-root-cornerRadius);
467
311
  min-width: var(--eds-button-size-xs-iconOnly-root-minWidth);
468
312
  padding-inline: var(--eds-button-size-xs-iconOnly-root-paddingX);
469
313
  padding-block: var(--eds-button-size-xs-iconOnly-root-paddingY);
@@ -474,93 +318,36 @@
474
318
  height: var(--eds-button-size-xs-iconOnly-icon-size);
475
319
  }
476
320
 
477
- .eds-button__button[data-size="sm"][data-layout="textOnly"] {
478
- height: var(--eds-button-size-sm-textOnly-root-height);
479
- border-radius: var(--eds-button-size-sm-textOnly-root-cornerRadius);
480
- gap: var(--eds-button-size-sm-textOnly-root-gap);
481
- padding-inline: var(--eds-button-size-sm-textOnly-root-paddingX);
482
- padding-block: var(--eds-button-size-sm-textOnly-root-paddingY);
483
- }
484
-
485
- .eds-button__button[data-size="sm"][data-layout="textOnly"] .eds-button__label {
486
- font-family: var(--eds-button-size-sm-textOnly-label-fontFamily);
487
- font-weight: var(--eds-button-size-sm-textOnly-label-fontWeight);
488
- font-size: var(--eds-button-size-sm-textOnly-label-fontSize);
489
- line-height: var(--eds-button-size-sm-textOnly-label-lineHeight);
490
- letter-spacing: var(--eds-button-size-sm-textOnly-label-letterSpacing);
321
+ .eds-button__button[data-size="sm"][data-layout] {
322
+ height: var(--eds-button-size-sm-root-height);
323
+ border-radius: var(--eds-button-size-sm-root-cornerRadius);
491
324
  }
492
325
 
493
- .eds-button__button[data-size="sm"][data-layout="iconFirst"] {
494
- height: var(--eds-button-size-sm-iconFirst-root-height);
495
- border-radius: var(--eds-button-size-sm-iconFirst-root-cornerRadius);
496
- gap: var(--eds-button-size-sm-iconFirst-root-gap);
497
- padding-inline: var(--eds-button-size-sm-iconFirst-root-paddingX);
498
- padding-block: var(--eds-button-size-sm-iconFirst-root-paddingY);
326
+ .eds-button__button[data-size="sm"]:not([data-layout="iconOnly"]) {
327
+ gap: var(--eds-button-size-sm-root-gap);
328
+ padding-inline: var(--eds-button-size-sm-root-paddingX);
329
+ padding-block: var(--eds-button-size-sm-root-paddingY);
499
330
  }
500
331
 
501
- .eds-button__button[data-size="sm"][data-layout="iconFirst"] .eds-button__label {
502
- font-family: var(--eds-button-size-sm-iconFirst-label-fontFamily);
503
- font-weight: var(--eds-button-size-sm-iconFirst-label-fontWeight);
504
- font-size: var(--eds-button-size-sm-iconFirst-label-fontSize);
505
- line-height: var(--eds-button-size-sm-iconFirst-label-lineHeight);
506
- letter-spacing: var(--eds-button-size-sm-iconFirst-label-letterSpacing);
332
+ .eds-button__button[data-size="sm"][data-layout] .eds-button__label {
333
+ font-family: var(--eds-button-size-sm-label-fontFamily);
334
+ font-weight: var(--eds-button-size-sm-label-fontWeight);
335
+ font-size: var(--eds-button-size-sm-label-fontSize);
336
+ line-height: var(--eds-button-size-sm-label-lineHeight);
337
+ letter-spacing: var(--eds-button-size-sm-label-letterSpacing);
507
338
  }
508
339
 
509
- .eds-button__button[data-size="sm"][data-layout="iconFirst"] .eds-button__prefixIcon {
510
- width: var(--eds-button-size-sm-iconFirst-prefixIcon-size);
511
- height: var(--eds-button-size-sm-iconFirst-prefixIcon-size);
340
+ .eds-button__button[data-size="sm"][data-layout] .eds-button__prefixIcon {
341
+ width: var(--eds-button-size-sm-prefixIcon-size);
342
+ height: var(--eds-button-size-sm-prefixIcon-size);
512
343
  }
513
344
 
514
- .eds-button__button[data-size="sm"][data-layout="iconLast"] {
515
- height: var(--eds-button-size-sm-iconLast-root-height);
516
- border-radius: var(--eds-button-size-sm-iconLast-root-cornerRadius);
517
- gap: var(--eds-button-size-sm-iconLast-root-gap);
518
- padding-inline: var(--eds-button-size-sm-iconLast-root-paddingX);
519
- padding-block: var(--eds-button-size-sm-iconLast-root-paddingY);
520
- }
521
-
522
- .eds-button__button[data-size="sm"][data-layout="iconLast"] .eds-button__label {
523
- font-family: var(--eds-button-size-sm-iconLast-label-fontFamily);
524
- font-weight: var(--eds-button-size-sm-iconLast-label-fontWeight);
525
- font-size: var(--eds-button-size-sm-iconLast-label-fontSize);
526
- line-height: var(--eds-button-size-sm-iconLast-label-lineHeight);
527
- letter-spacing: var(--eds-button-size-sm-iconLast-label-letterSpacing);
528
- }
529
-
530
- .eds-button__button[data-size="sm"][data-layout="iconLast"] .eds-button__suffixIcon {
531
- width: var(--eds-button-size-sm-iconLast-suffixIcon-size);
532
- height: var(--eds-button-size-sm-iconLast-suffixIcon-size);
533
- }
534
-
535
- .eds-button__button[data-size="sm"][data-layout="iconBoth"] {
536
- height: var(--eds-button-size-sm-iconBoth-root-height);
537
- border-radius: var(--eds-button-size-sm-iconBoth-root-cornerRadius);
538
- gap: var(--eds-button-size-sm-iconBoth-root-gap);
539
- padding-inline: var(--eds-button-size-sm-iconBoth-root-paddingX);
540
- padding-block: var(--eds-button-size-sm-iconBoth-root-paddingY);
541
- }
542
-
543
- .eds-button__button[data-size="sm"][data-layout="iconBoth"] .eds-button__label {
544
- font-family: var(--eds-button-size-sm-iconBoth-label-fontFamily);
545
- font-weight: var(--eds-button-size-sm-iconBoth-label-fontWeight);
546
- font-size: var(--eds-button-size-sm-iconBoth-label-fontSize);
547
- line-height: var(--eds-button-size-sm-iconBoth-label-lineHeight);
548
- letter-spacing: var(--eds-button-size-sm-iconBoth-label-letterSpacing);
549
- }
550
-
551
- .eds-button__button[data-size="sm"][data-layout="iconBoth"] .eds-button__prefixIcon {
552
- width: var(--eds-button-size-sm-iconBoth-prefixIcon-size);
553
- height: var(--eds-button-size-sm-iconBoth-prefixIcon-size);
554
- }
555
-
556
- .eds-button__button[data-size="sm"][data-layout="iconBoth"] .eds-button__suffixIcon {
557
- width: var(--eds-button-size-sm-iconBoth-suffixIcon-size);
558
- height: var(--eds-button-size-sm-iconBoth-suffixIcon-size);
345
+ .eds-button__button[data-size="sm"][data-layout] .eds-button__suffixIcon {
346
+ width: var(--eds-button-size-sm-suffixIcon-size);
347
+ height: var(--eds-button-size-sm-suffixIcon-size);
559
348
  }
560
349
 
561
350
  .eds-button__button[data-size="sm"][data-layout="iconOnly"] {
562
- height: var(--eds-button-size-sm-iconOnly-root-height);
563
- border-radius: var(--eds-button-size-sm-iconOnly-root-cornerRadius);
564
351
  min-width: var(--eds-button-size-sm-iconOnly-root-minWidth);
565
352
  padding-inline: var(--eds-button-size-sm-iconOnly-root-paddingX);
566
353
  padding-block: var(--eds-button-size-sm-iconOnly-root-paddingY);
@@ -571,93 +358,36 @@
571
358
  height: var(--eds-button-size-sm-iconOnly-icon-size);
572
359
  }
573
360
 
574
- .eds-button__button[data-size="md"][data-layout="textOnly"] {
575
- height: var(--eds-button-size-md-textOnly-root-height);
576
- border-radius: var(--eds-button-size-md-textOnly-root-cornerRadius);
577
- gap: var(--eds-button-size-md-textOnly-root-gap);
578
- padding-inline: var(--eds-button-size-md-textOnly-root-paddingX);
579
- padding-block: var(--eds-button-size-md-textOnly-root-paddingY);
580
- }
581
-
582
- .eds-button__button[data-size="md"][data-layout="textOnly"] .eds-button__label {
583
- font-family: var(--eds-button-size-md-textOnly-label-fontFamily);
584
- font-weight: var(--eds-button-size-md-textOnly-label-fontWeight);
585
- font-size: var(--eds-button-size-md-textOnly-label-fontSize);
586
- line-height: var(--eds-button-size-md-textOnly-label-lineHeight);
587
- letter-spacing: var(--eds-button-size-md-textOnly-label-letterSpacing);
588
- }
589
-
590
- .eds-button__button[data-size="md"][data-layout="iconFirst"] {
591
- height: var(--eds-button-size-md-iconFirst-root-height);
592
- border-radius: var(--eds-button-size-md-iconFirst-root-cornerRadius);
593
- gap: var(--eds-button-size-md-iconFirst-root-gap);
594
- padding-inline: var(--eds-button-size-md-iconFirst-root-paddingX);
595
- padding-block: var(--eds-button-size-md-iconFirst-root-paddingY);
596
- }
597
-
598
- .eds-button__button[data-size="md"][data-layout="iconFirst"] .eds-button__label {
599
- font-family: var(--eds-button-size-md-iconFirst-label-fontFamily);
600
- font-weight: var(--eds-button-size-md-iconFirst-label-fontWeight);
601
- font-size: var(--eds-button-size-md-iconFirst-label-fontSize);
602
- line-height: var(--eds-button-size-md-iconFirst-label-lineHeight);
603
- letter-spacing: var(--eds-button-size-md-iconFirst-label-letterSpacing);
604
- }
605
-
606
- .eds-button__button[data-size="md"][data-layout="iconFirst"] .eds-button__prefixIcon {
607
- width: var(--eds-button-size-md-iconFirst-prefixIcon-size);
608
- height: var(--eds-button-size-md-iconFirst-prefixIcon-size);
609
- }
610
-
611
- .eds-button__button[data-size="md"][data-layout="iconLast"] {
612
- height: var(--eds-button-size-md-iconLast-root-height);
613
- border-radius: var(--eds-button-size-md-iconLast-root-cornerRadius);
614
- gap: var(--eds-button-size-md-iconLast-root-gap);
615
- padding-inline: var(--eds-button-size-md-iconLast-root-paddingX);
616
- padding-block: var(--eds-button-size-md-iconLast-root-paddingY);
617
- }
618
-
619
- .eds-button__button[data-size="md"][data-layout="iconLast"] .eds-button__label {
620
- font-family: var(--eds-button-size-md-iconLast-label-fontFamily);
621
- font-weight: var(--eds-button-size-md-iconLast-label-fontWeight);
622
- font-size: var(--eds-button-size-md-iconLast-label-fontSize);
623
- line-height: var(--eds-button-size-md-iconLast-label-lineHeight);
624
- letter-spacing: var(--eds-button-size-md-iconLast-label-letterSpacing);
625
- }
626
-
627
- .eds-button__button[data-size="md"][data-layout="iconLast"] .eds-button__suffixIcon {
628
- width: var(--eds-button-size-md-iconLast-suffixIcon-size);
629
- height: var(--eds-button-size-md-iconLast-suffixIcon-size);
361
+ .eds-button__button[data-size="md"][data-layout] {
362
+ height: var(--eds-button-size-md-root-height);
363
+ border-radius: var(--eds-button-size-md-root-cornerRadius);
630
364
  }
631
365
 
632
- .eds-button__button[data-size="md"][data-layout="iconBoth"] {
633
- height: var(--eds-button-size-md-iconBoth-root-height);
634
- border-radius: var(--eds-button-size-md-iconBoth-root-cornerRadius);
635
- gap: var(--eds-button-size-md-iconBoth-root-gap);
636
- padding-inline: var(--eds-button-size-md-iconBoth-root-paddingX);
637
- padding-block: var(--eds-button-size-md-iconBoth-root-paddingY);
366
+ .eds-button__button[data-size="md"]:not([data-layout="iconOnly"]) {
367
+ gap: var(--eds-button-size-md-root-gap);
368
+ padding-inline: var(--eds-button-size-md-root-paddingX);
369
+ padding-block: var(--eds-button-size-md-root-paddingY);
638
370
  }
639
371
 
640
- .eds-button__button[data-size="md"][data-layout="iconBoth"] .eds-button__label {
641
- font-family: var(--eds-button-size-md-iconBoth-label-fontFamily);
642
- font-weight: var(--eds-button-size-md-iconBoth-label-fontWeight);
643
- font-size: var(--eds-button-size-md-iconBoth-label-fontSize);
644
- line-height: var(--eds-button-size-md-iconBoth-label-lineHeight);
645
- letter-spacing: var(--eds-button-size-md-iconBoth-label-letterSpacing);
372
+ .eds-button__button[data-size="md"][data-layout] .eds-button__label {
373
+ font-family: var(--eds-button-size-md-label-fontFamily);
374
+ font-weight: var(--eds-button-size-md-label-fontWeight);
375
+ font-size: var(--eds-button-size-md-label-fontSize);
376
+ line-height: var(--eds-button-size-md-label-lineHeight);
377
+ letter-spacing: var(--eds-button-size-md-label-letterSpacing);
646
378
  }
647
379
 
648
- .eds-button__button[data-size="md"][data-layout="iconBoth"] .eds-button__prefixIcon {
649
- width: var(--eds-button-size-md-iconBoth-prefixIcon-size);
650
- height: var(--eds-button-size-md-iconBoth-prefixIcon-size);
380
+ .eds-button__button[data-size="md"][data-layout] .eds-button__prefixIcon {
381
+ width: var(--eds-button-size-md-prefixIcon-size);
382
+ height: var(--eds-button-size-md-prefixIcon-size);
651
383
  }
652
384
 
653
- .eds-button__button[data-size="md"][data-layout="iconBoth"] .eds-button__suffixIcon {
654
- width: var(--eds-button-size-md-iconBoth-suffixIcon-size);
655
- height: var(--eds-button-size-md-iconBoth-suffixIcon-size);
385
+ .eds-button__button[data-size="md"][data-layout] .eds-button__suffixIcon {
386
+ width: var(--eds-button-size-md-suffixIcon-size);
387
+ height: var(--eds-button-size-md-suffixIcon-size);
656
388
  }
657
389
 
658
390
  .eds-button__button[data-size="md"][data-layout="iconOnly"] {
659
- height: var(--eds-button-size-md-iconOnly-root-height);
660
- border-radius: var(--eds-button-size-md-iconOnly-root-cornerRadius);
661
391
  min-width: var(--eds-button-size-md-iconOnly-root-minWidth);
662
392
  padding-inline: var(--eds-button-size-md-iconOnly-root-paddingX);
663
393
  padding-block: var(--eds-button-size-md-iconOnly-root-paddingY);
@@ -668,6 +398,10 @@
668
398
  height: var(--eds-button-size-md-iconOnly-icon-size);
669
399
  }
670
400
 
401
+ /*
402
+ * Role, variant and state. A loading button also carries data-disabled="true", so each loading rule
403
+ * follows the disabled rule of the same specificity and restores the enabled label color and border.
404
+ */
671
405
  .eds-button__button[data-role="brand"][data-variant="solid"] {
672
406
  background-color: var(--eds-button-style-brand-solid-enabled-root-backgroundColor);
673
407
  color: var(--eds-button-style-brand-solid-enabled-label-color);