@transferwise/components 0.0.0-experimental-a656242 → 0.0.0-experimental-887f2e6

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 (154) hide show
  1. package/build/avatarLayout/AvatarLayout.js +9 -2
  2. package/build/avatarLayout/AvatarLayout.js.map +1 -1
  3. package/build/avatarLayout/AvatarLayout.mjs +9 -2
  4. package/build/avatarLayout/AvatarLayout.mjs.map +1 -1
  5. package/build/avatarView/AvatarView.js +1 -12
  6. package/build/avatarView/AvatarView.js.map +1 -1
  7. package/build/avatarView/AvatarView.mjs +1 -12
  8. package/build/avatarView/AvatarView.mjs.map +1 -1
  9. package/build/button/Button.js +78 -79
  10. package/build/button/Button.js.map +1 -1
  11. package/build/button/Button.mjs +79 -80
  12. package/build/button/Button.mjs.map +1 -1
  13. package/build/button/Button.resolver.js +78 -0
  14. package/build/button/Button.resolver.js.map +1 -0
  15. package/build/button/Button.resolver.mjs +76 -0
  16. package/build/button/Button.resolver.mjs.map +1 -0
  17. package/build/button/LegacyButton.js +114 -0
  18. package/build/button/LegacyButton.js.map +1 -0
  19. package/build/button/LegacyButton.mjs +112 -0
  20. package/build/button/LegacyButton.mjs.map +1 -0
  21. package/build/circularButton/CircularButton.js +21 -18
  22. package/build/circularButton/CircularButton.js.map +1 -1
  23. package/build/circularButton/CircularButton.mjs +22 -19
  24. package/build/circularButton/CircularButton.mjs.map +1 -1
  25. package/build/criticalBanner/CriticalCommsBanner.js +2 -2
  26. package/build/criticalBanner/CriticalCommsBanner.js.map +1 -1
  27. package/build/criticalBanner/CriticalCommsBanner.mjs +1 -1
  28. package/build/definitionList/DefinitionList.js.map +1 -1
  29. package/build/definitionList/DefinitionList.mjs.map +1 -1
  30. package/build/header/Header.js +2 -2
  31. package/build/header/Header.js.map +1 -1
  32. package/build/header/Header.mjs +1 -1
  33. package/build/i18n/de.json +0 -1
  34. package/build/i18n/de.json.js +0 -1
  35. package/build/i18n/de.json.js.map +1 -1
  36. package/build/i18n/de.json.mjs +0 -1
  37. package/build/i18n/de.json.mjs.map +1 -1
  38. package/build/i18n/it.json +0 -1
  39. package/build/i18n/it.json.js +0 -1
  40. package/build/i18n/it.json.js.map +1 -1
  41. package/build/i18n/it.json.mjs +0 -1
  42. package/build/i18n/it.json.mjs.map +1 -1
  43. package/build/i18n/th.json +0 -1
  44. package/build/i18n/th.json.js +0 -1
  45. package/build/i18n/th.json.js.map +1 -1
  46. package/build/i18n/th.json.mjs +0 -1
  47. package/build/i18n/th.json.mjs.map +1 -1
  48. package/build/index.js +2 -2
  49. package/build/index.mjs +1 -1
  50. package/build/link/Link.js +8 -3
  51. package/build/link/Link.js.map +1 -1
  52. package/build/link/Link.mjs +8 -3
  53. package/build/link/Link.mjs.map +1 -1
  54. package/build/main.css +416 -17
  55. package/build/primitives/PrimitiveAnchor/src/PrimitiveAnchor.js +1 -3
  56. package/build/primitives/PrimitiveAnchor/src/PrimitiveAnchor.js.map +1 -1
  57. package/build/primitives/PrimitiveAnchor/src/PrimitiveAnchor.mjs +1 -3
  58. package/build/primitives/PrimitiveAnchor/src/PrimitiveAnchor.mjs.map +1 -1
  59. package/build/primitives/PrimitiveButton/src/PrimitiveButton.js +1 -4
  60. package/build/primitives/PrimitiveButton/src/PrimitiveButton.js.map +1 -1
  61. package/build/primitives/PrimitiveButton/src/PrimitiveButton.mjs +1 -4
  62. package/build/primitives/PrimitiveButton/src/PrimitiveButton.mjs.map +1 -1
  63. package/build/select/Select.js +5 -3
  64. package/build/select/Select.js.map +1 -1
  65. package/build/select/Select.mjs +4 -2
  66. package/build/select/Select.mjs.map +1 -1
  67. package/build/styles/avatarLayout/AvatarLayout.css +11 -0
  68. package/build/styles/button/Button.css +240 -16
  69. package/build/styles/button/Button.vars.css +55 -0
  70. package/build/styles/button/LegacyButton.css +23 -0
  71. package/build/styles/circularButton/CircularButton.css +158 -17
  72. package/build/styles/main.css +416 -17
  73. package/build/types/avatarLayout/AvatarLayout.d.ts +1 -2
  74. package/build/types/avatarLayout/AvatarLayout.d.ts.map +1 -1
  75. package/build/types/avatarLayout/index.d.ts +1 -0
  76. package/build/types/avatarLayout/index.d.ts.map +1 -1
  77. package/build/types/avatarView/AvatarView.d.ts.map +1 -1
  78. package/build/types/button/Button.d.ts +1 -23
  79. package/build/types/button/Button.d.ts.map +1 -1
  80. package/build/types/button/Button.resolver.d.ts +31 -0
  81. package/build/types/button/Button.resolver.d.ts.map +1 -0
  82. package/build/types/button/Button.types.d.ts +67 -0
  83. package/build/types/button/Button.types.d.ts.map +1 -0
  84. package/build/types/button/LegacyButton.d.ts +30 -0
  85. package/build/types/button/LegacyButton.d.ts.map +1 -0
  86. package/build/types/button/index.d.ts +2 -2
  87. package/build/types/button/index.d.ts.map +1 -1
  88. package/build/types/circularButton/CircularButton.d.ts +4 -11
  89. package/build/types/circularButton/CircularButton.d.ts.map +1 -1
  90. package/build/types/definitionList/DefinitionList.d.ts +2 -1
  91. package/build/types/definitionList/DefinitionList.d.ts.map +1 -1
  92. package/build/types/link/Link.d.ts +2 -2
  93. package/build/types/link/Link.d.ts.map +1 -1
  94. package/build/types/primitives/PrimitiveAnchor/src/PrimitiveAnchor.d.ts.map +1 -1
  95. package/build/types/primitives/PrimitiveAnchor/src/PrimitiveAnchor.types.d.ts +1 -1
  96. package/build/types/primitives/PrimitiveAnchor/src/PrimitiveAnchor.types.d.ts.map +1 -1
  97. package/build/types/primitives/PrimitiveButton/src/PrimitiveButton.d.ts.map +1 -1
  98. package/build/types/select/Select.d.ts.map +1 -1
  99. package/build/upload/steps/completeStep/completeStep.js +2 -2
  100. package/build/upload/steps/completeStep/completeStep.js.map +1 -1
  101. package/build/upload/steps/completeStep/completeStep.mjs +1 -1
  102. package/build/upload/steps/processingStep/processingStep.js +2 -2
  103. package/build/upload/steps/processingStep/processingStep.js.map +1 -1
  104. package/build/upload/steps/processingStep/processingStep.mjs +1 -1
  105. package/build/uploadInput/UploadInput.js +3 -3
  106. package/build/uploadInput/UploadInput.js.map +1 -1
  107. package/build/uploadInput/UploadInput.mjs +1 -1
  108. package/package.json +3 -3
  109. package/src/avatarLayout/AvatarLayout.css +11 -0
  110. package/src/avatarLayout/AvatarLayout.less +18 -1
  111. package/src/avatarLayout/AvatarLayout.tsx +11 -3
  112. package/src/avatarLayout/index.ts +1 -0
  113. package/src/avatarView/AvatarView.tsx +1 -15
  114. package/src/button/Button.css +240 -16
  115. package/src/button/Button.less +208 -14
  116. package/src/button/Button.resolver.tsx +120 -0
  117. package/src/button/Button.spec.tsx +54 -231
  118. package/src/button/Button.story.tsx +610 -137
  119. package/src/button/Button.tsx +88 -132
  120. package/src/button/Button.types.ts +88 -0
  121. package/src/button/Button.vars.css +55 -0
  122. package/src/button/Button.vars.less +69 -0
  123. package/src/button/LegacyButton.css +23 -0
  124. package/src/button/LegacyButton.less +24 -0
  125. package/src/button/LegacyButton.spec.tsx +146 -0
  126. package/src/button/LegacyButton.story.tsx +224 -0
  127. package/src/button/LegacyButton.tsx +161 -0
  128. package/src/button/index.ts +2 -3
  129. package/src/circularButton/CircularButton.css +158 -17
  130. package/src/circularButton/CircularButton.less +91 -22
  131. package/src/circularButton/CircularButton.story.tsx +24 -45
  132. package/src/circularButton/CircularButton.tsx +25 -38
  133. package/src/circularButton/_button-label-states.less +34 -0
  134. package/src/definitionList/DefinitionList.spec.js +91 -0
  135. package/src/definitionList/DefinitionList.story.tsx +57 -57
  136. package/src/definitionList/DefinitionList.tsx +1 -1
  137. package/src/flowNavigation/__snapshots__/FlowNavigation.spec.js.snap +1 -1
  138. package/src/i18n/de.json +0 -1
  139. package/src/i18n/it.json +0 -1
  140. package/src/i18n/th.json +0 -1
  141. package/src/iconButton/IconButton.story.tsx +6 -6
  142. package/src/inputs/SelectInput.story.tsx +1 -1
  143. package/src/link/Link.tsx +15 -6
  144. package/src/main.css +416 -17
  145. package/src/main.less +1 -0
  146. package/src/primitives/PrimitiveAnchor/src/PrimitiveAnchor.tsx +1 -7
  147. package/src/primitives/PrimitiveAnchor/src/PrimitiveAnchor.types.ts +1 -1
  148. package/src/primitives/PrimitiveAnchor/test/PrimitiveAnchor.spec.tsx +1 -3
  149. package/src/primitives/PrimitiveButton/src/PrimitiveButton.tsx +1 -8
  150. package/src/primitives/PrimitiveButton/test/PrimitiveButton.spec.tsx +2 -5
  151. package/src/select/Select.tsx +1 -0
  152. package/src/slidingPanel/SlidingPanel.spec.js +56 -0
  153. package/src/button/__snapshots__/Button.spec.tsx.snap +0 -309
  154. package/src/slidingPanel/SlidingPanel.spec.tsx +0 -69
@@ -1,23 +1,247 @@
1
- .np-btn {
1
+ :root {
2
+ --Button-background: var(--color-interactive-accent);
3
+ --Button-background-hover: var(--color-interactive-accent-hover);
4
+ --Button-background-active: var(--color-interactive-accent-active);
5
+ --Button-color: var(--color-interactive-control);
6
+ --Button-padding: var(--size-8) var(--size-12);
7
+ --Button-border-radius: var(--radius-full);
8
+ --Button-size-small-padding: 5px var(--size-12);
9
+ --Button-size-medium-padding: var(--size-8) var(--size-12);
10
+ --Button-size-large-padding: var(--size-12) var(--size-16);
11
+ --Button-avatar-border-color: var(--color-border-neutral);
12
+ --Button-transition-duration: 150ms;
13
+ --Button-transition-easing: ease-in-out;
14
+ --Button-secondary-background: var(--color-interactive-neutral);
15
+ --Button-secondary-background-hover: var(--color-interactive-neutral-hover);
16
+ --Button-secondary-background-active: var(--color-interactive-neutral-active);
17
+ --Button-secondary-color: var(--color-interactive-primary);
18
+ --Button-tertiary-background: var(--color-background-neutral);
19
+ --Button-tertiary-background-hover: var(--color-background-neutral-hover);
20
+ --Button-tertiary-background-active: var(--color-background-neutral-active);
21
+ --Button-tertiary-color: var(--color-content-primary);
22
+ --Button-minimal-background: transparent;
23
+ --Button-minimal-background-hover: var(--color-background-screen-hover);
24
+ --Button-minimal-background-active: var(--color-background-screen-active);
25
+ --Button-minimal-color: var(--color-interactive-primary);
26
+ --Button-primary-negative-background: var(--color-sentiment-negative-primary);
27
+ --Button-primary-negative-background-hover: var(--color-sentiment-negative-primary-hover);
28
+ --Button-primary-negative-background-active: var(--color-sentiment-negative-primary-active);
29
+ --Button-primary-negative-color: var(--color-contrast);
30
+ --Button-primary-netative-avatar-border-color: rgba(255,255,255,0.2);
31
+ --Button-secondary-negative-background: var(--color-sentiment-negative-secondary);
32
+ --Button-secondary-negative-background-hover: var(--color-sentiment-negative-secondary-hover);
33
+ --Button-secondary-negative-background-active: var(--color-sentiment-negative-secondary-active);
34
+ --Button-secondary-negative-color: var(--color-sentiment-negative-primary);
35
+ --Button-secondary-netative-avatar-border-color: rgba(168,32,13,0.12157);
36
+ }
37
+ .np-theme-personal--dark .wds-Button {
38
+ --Button-primary-netative-avatar-border-color: rgba(14,15,12,0.12157);
39
+ }
40
+ .np-theme-personal--forest-green .wds-Button {
41
+ --color-interactive-neutral: rgba(159,232,112,0.2);
42
+ --color-interactive-neutral-hover: rgba(205,255,173,0.2);
43
+ --color-interactive-neutral-active: rgba(236,255,224,0.2);
44
+ --color-sentiment-negative-secondary: rgba(255,196,194,0.2);
45
+ --color-sentiment-negative-secondary-hover: rgba(255,220,219,0.2);
46
+ --color-sentiment-negative-secondary-active: rgba(255,235,235,0.2);
47
+ --Button-primary-netative-avatar-border-color: rgba(14,15,12,0.12157);
48
+ --Button-secondary-netative-avatar-border-color: rgba(14,15,12,0.12157);
49
+ }
50
+ .np-theme-personal--bright-green .wds-Button {
51
+ --color-contrast: #FFFFFF;
52
+ --Button-secondary-color: var(--color-interactive-control);
53
+ --Button-secondary-negative-color: var(--color-contrast);
54
+ --Button-secondary-netative-avatar-border-color: var(--Button-primary-netative-avatar-border-color);
55
+ }
56
+ /* Button Styles */
57
+ .wds-Button {
58
+ display: inline-flex;
59
+ flex: none;
60
+ width: auto;
61
+ align-items: center;
62
+ justify-content: center;
63
+ vertical-align: middle;
64
+ text-align: center;
65
+ -webkit-text-decoration: none;
66
+ text-decoration: none;
67
+ white-space: nowrap;
68
+ word-wrap: break-word;
69
+ -webkit-appearance: none;
70
+ -moz-appearance: none;
71
+ appearance: none;
72
+ background-color: #00a2dd;
73
+ background-color: var(--Button-background);
74
+ border: none;
75
+ border-radius: 9999px;
76
+ border-radius: var(--Button-border-radius);
77
+ color: var(--Button-color);
78
+ cursor: pointer;
79
+ padding: 8px 12px;
80
+ padding: var(--Button-padding);
81
+ transition: color, background-color 150ms ease-in-out;
82
+ transition: color, background-color var(--Button-transition-duration) var(--Button-transition-easing);
83
+ }
84
+ .wds-Button:focus {
85
+ -webkit-text-decoration: none;
86
+ text-decoration: none;
87
+ }
88
+ .wds-Button:hover {
89
+ background-color: #008fc9;
90
+ background-color: var(--Button-background-hover);
91
+ -webkit-text-decoration: none;
92
+ text-decoration: none;
93
+ }
94
+ .wds-Button:active {
95
+ background-color: #0081ba;
96
+ background-color: var(--Button-background-active);
97
+ -webkit-text-decoration: none;
98
+ text-decoration: none;
99
+ }
100
+ .wds-Button.wds-Button--disabled,
101
+ .wds-Button:disabled {
102
+ mix-blend-mode: luminosity;
103
+ opacity: 0.45;
104
+ cursor: not-allowed;
105
+ }
106
+ .wds-Button.wds-Button--disabled:hover,
107
+ .wds-Button:disabled:hover,
108
+ .wds-Button.wds-Button--disabled:active,
109
+ .wds-Button:disabled:active {
110
+ background-color: #00a2dd;
111
+ background-color: var(--Button-background);
112
+ }
113
+ .wds-Button--secondary {
114
+ --Button-background: var(--Button-secondary-background);
115
+ --Button-background-hover: var(--Button-secondary-background-hover);
116
+ --Button-background-active: var(--Button-secondary-background-active);
117
+ --Button-color: var(--Button-secondary-color);
118
+ }
119
+ .wds-Button--tertiary {
120
+ --Button-background: var(--Button-tertiary-background);
121
+ --Button-background-hover: var(--Button-tertiary-background-hover);
122
+ --Button-background-active: var(--Button-tertiary-background-active);
123
+ --Button-color: var(--Button-tertiary-color);
124
+ }
125
+ .wds-Button--tertiary .wds-Button-icon--end {
126
+ color: var(--color-interactive-primary);
127
+ }
128
+ .wds-Button--minimal {
129
+ --Button-background: var(--Button-minimal-background);
130
+ --Button-background-hover: var(--Button-minimal-background-hover);
131
+ --Button-background-active: var(--Button-minimal-background-active);
132
+ --Button-color: var(--Button-minimal-color);
133
+ -webkit-text-decoration: underline;
134
+ text-decoration: underline;
135
+ text-underline-offset: 3px;
136
+ text-decoration-thickness: 1px;
137
+ }
138
+ .wds-Button--minimal:hover,
139
+ .wds-Button--minimal:hover:active {
140
+ -webkit-text-decoration: underline;
141
+ text-decoration: underline;
142
+ }
143
+ .wds-Button--negative.wds-Button--primary {
144
+ --Button-background: var(--Button-primary-negative-background);
145
+ --Button-background-hover: var(--Button-primary-negative-background-hover);
146
+ --Button-background-active: var(--Button-primary-negative-background-active);
147
+ --Button-color: var(--Button-primary-negative-color);
148
+ --Button-avatar-border-color: var(--Button-primary-netative-avatar-border-color);
149
+ }
150
+ .wds-Button--negative.wds-Button--secondary {
151
+ --Button-background: var(--Button-secondary-negative-background);
152
+ --Button-background-hover: var(--Button-secondary-negative-background-hover);
153
+ --Button-background-active: var(--Button-secondary-negative-background-active);
154
+ --Button-color: var(--Button-secondary-negative-color);
155
+ --Button-avatar-border-color: var(--Button-secondary-netative-avatar-border-color);
156
+ }
157
+ .wds-Button--small {
158
+ --Button-padding: var(--Button-size-small-padding);
159
+ }
160
+ .wds-Button--small .wds-Button-icon--start {
161
+ margin-right: 4px;
162
+ margin-right: var(--size-4);
163
+ }
164
+ [dir="rtl"] .wds-Button--small .wds-Button-icon--start {
165
+ margin-right: 0;
166
+ margin-left: 4px;
167
+ margin-left: var(--size-4);
168
+ }
169
+ .wds-Button--medium {
170
+ --Button-padding: var(--Button-size-medium-padding);
171
+ }
172
+ .wds-Button--large {
173
+ --Button-padding: var(--Button-size-large-padding);
174
+ }
175
+ .wds-Button--block {
176
+ width: 100%;
177
+ }
178
+ .wds-Button-avatars {
179
+ display: inline-flex;
180
+ margin-right: 5px;
181
+ margin-left: calc(4px * -1);
182
+ margin-left: calc(var(--size-4) * -1);
183
+ }
184
+ [dir="rtl"] .wds-Button-avatars {
185
+ margin-right: 0;
186
+ margin-left: 5px;
187
+ }
188
+ .wds-Button-avatars .np-circle {
189
+ --circle-border-color: var(--Button-avatar-border-color);
190
+ }
191
+ .wds-Button-avatars .np-avatar-view .np-avatar-view-content {
192
+ color: var(--Button-color);
193
+ }
194
+ .wds-Button-icon {
195
+ display: inline-block;
196
+ }
197
+ .wds-Button-icon--start {
198
+ margin-right: 8px;
199
+ margin-right: var(--size-8);
200
+ }
201
+ [dir="rtl"] .wds-Button-icon--start {
202
+ margin-right: 0;
203
+ margin-left: 8px;
204
+ margin-left: var(--size-8);
205
+ }
206
+ .wds-Button-icon--end {
207
+ margin-left: 4px;
208
+ margin-left: var(--size-4);
209
+ }
210
+ [dir="rtl"] .wds-Button-icon--end {
211
+ margin-left: 0;
212
+ margin-right: 4px;
213
+ margin-right: var(--size-4);
214
+ }
215
+ .wds-Button-content {
2
216
  position: relative;
3
217
  }
4
- .np-btn.np-btn-block > span.btn-loader {
5
- position: absolute;
6
- left: 24px;
7
- left: var(--size-24);
218
+ .wds-Button-content--loading .wds-Button-label,
219
+ .wds-Button-content--loading .wds-Button-media,
220
+ .wds-Button-content--loading .wds-Button-icon {
221
+ visibility: hidden;
222
+ opacity: 0;
223
+ }
224
+ .wds-Button-label {
225
+ display: flex;
226
+ justify-content: center;
227
+ align-items: center;
228
+ position: relative;
8
229
  }
9
- [dir="rtl"] .np-btn.np-btn-block > span.btn-loader {
10
- right: 24px;
11
- right: var(--size-24);
12
- left: auto;
13
- left: initial;
230
+ .wds-Button-loader {
231
+ position: absolute;
232
+ display: flex;
233
+ justify-content: center;
234
+ align-items: center;
235
+ width: 100%;
236
+ height: 100%;
14
237
  }
15
- .np-btn.np-btn-xs > span.btn-loader {
16
- background-size: 16px 16px;
238
+ .wds-Button-loader .process-circle {
239
+ stroke: var(--Button-color);
17
240
  }
18
- .np-btn.np-btn-xs.btn-block > span.btn-loader {
19
- top: 0;
241
+ /* RTL Styles */
242
+ [dir="rtl"] .wds-Button .tw-icon-chevron-right,[dir="rtl"] .wds-Button .tw-icon-arrow-right {
243
+ transform: rotate(180deg);
20
244
  }
21
- .np-btn.disabled[class] {
22
- pointer-events: auto;
245
+ [dir="rtl"] .wds-Button .tw-icon-chevron-left,[dir="rtl"] .wds-Button .tw-icon-arrow-left {
246
+ transform: rotate(180deg);
23
247
  }
@@ -1,24 +1,218 @@
1
- @import (reference) "../../node_modules/@transferwise/neptune-css/src/less/mixins/_logical-properties.less";
1
+ @import './Button.vars.less';
2
2
 
3
- .np-btn {
4
- position: relative;
3
+ /* Button Styles */
4
+ .wds-Button {
5
+ display: inline-flex;
6
+ flex: none;
7
+ width: auto;
8
+ align-items: center;
9
+ justify-content: center;
10
+ vertical-align: middle;
11
+ text-align: center;
12
+ text-decoration: none;
13
+ white-space: nowrap;
14
+ word-wrap: break-word;
15
+ appearance: none;
16
+ background-color: var(--Button-background);
17
+ border: none;
18
+ border-radius: var(--Button-border-radius);
19
+ color: var(--Button-color);
20
+ cursor: pointer;
21
+ padding: var(--Button-padding);
22
+ transition: color, background-color var(--Button-transition-duration) var(--Button-transition-easing);
5
23
 
6
- &.np-btn-block > span.btn-loader {
7
- position: absolute;
8
- .left(var(--size-24));
24
+ &:focus {
25
+ text-decoration: none;
26
+ }
27
+
28
+ &:hover {
29
+ background-color: var(--Button-background-hover);
30
+ text-decoration: none;
31
+ }
32
+
33
+ &:active {
34
+ background-color: var(--Button-background-active);
35
+ text-decoration: none;
36
+ }
37
+
38
+ &.wds-Button--disabled,
39
+ &:disabled {
40
+ mix-blend-mode: luminosity;
41
+ opacity: 0.45;
42
+ cursor: not-allowed;
43
+
44
+ &:hover,
45
+ &:active {
46
+ background-color: var(--Button-background);
47
+ }
48
+ }
49
+
50
+ // Priority modifiers
51
+ &--secondary {
52
+ --Button-background: var(--Button-secondary-background);
53
+ --Button-background-hover: var(--Button-secondary-background-hover);
54
+ --Button-background-active: var(--Button-secondary-background-active);
55
+ --Button-color: var(--Button-secondary-color);
56
+ }
57
+
58
+ &--tertiary {
59
+ --Button-background: var(--Button-tertiary-background);
60
+ --Button-background-hover: var(--Button-tertiary-background-hover);
61
+ --Button-background-active: var(--Button-tertiary-background-active);
62
+ --Button-color: var(--Button-tertiary-color);
63
+
64
+ .wds-Button-icon--end {
65
+ color: var(--color-interactive-primary);
66
+ }
67
+ }
68
+
69
+ &--minimal {
70
+ --Button-background: var(--Button-minimal-background);
71
+ --Button-background-hover: var(--Button-minimal-background-hover);
72
+ --Button-background-active: var(--Button-minimal-background-active);
73
+ --Button-color: var(--Button-minimal-color);
74
+
75
+ text-decoration: underline;
76
+ text-underline-offset: 3px;
77
+ text-decoration-thickness: 1px;
78
+
79
+ &:hover,
80
+ &:hover:active {
81
+ text-decoration: underline;
82
+ }
83
+ }
84
+
85
+ // Negative styles
86
+ &--negative {
87
+
88
+ &.wds-Button--primary {
89
+ --Button-background: var(--Button-primary-negative-background);
90
+ --Button-background-hover: var(--Button-primary-negative-background-hover);
91
+ --Button-background-active: var(--Button-primary-negative-background-active);
92
+ --Button-color: var(--Button-primary-negative-color);
93
+ --Button-avatar-border-color: var(--Button-primary-netative-avatar-border-color);
94
+ }
95
+
96
+ &.wds-Button--secondary {
97
+ --Button-background: var(--Button-secondary-negative-background);
98
+ --Button-background-hover: var(--Button-secondary-negative-background-hover);
99
+ --Button-background-active: var(--Button-secondary-negative-background-active);
100
+ --Button-color: var(--Button-secondary-negative-color);
101
+ --Button-avatar-border-color: var(--Button-secondary-netative-avatar-border-color);
102
+ }
103
+ }
104
+
105
+ // Size modifiers
106
+ &--small {
107
+ --Button-padding: var(--Button-size-small-padding);
108
+
109
+ .wds-Button-icon--start {
110
+ margin-right: var(--size-4);
111
+ :dir(rtl) & {
112
+ margin-right: 0;
113
+ margin-left: var(--size-4);
114
+ }
115
+ }
116
+ }
117
+
118
+ &--medium {
119
+ --Button-padding: var(--Button-size-medium-padding);
120
+ }
121
+
122
+ &--large {
123
+ --Button-padding: var(--Button-size-large-padding);
124
+ }
125
+
126
+ // Width mofidiers
127
+ &--block {
128
+ width: 100%;
9
129
  }
10
130
 
11
- &.np-btn-xs > span.btn-loader {
12
- background-size: 16px 16px;
131
+ &-avatars {
132
+ display: inline-flex;
133
+ margin-right: 5px;
134
+ margin-left: calc(var(--size-4) * -1);
135
+
136
+ :dir(rtl) & {
137
+ margin-right: 0;
138
+ margin-left: 5px;
139
+ }
140
+
141
+ .np-circle {
142
+ --circle-border-color: var(--Button-avatar-border-color);
143
+ }
144
+
145
+ .np-avatar-view .np-avatar-view-content {
146
+ color: var(--Button-color);
147
+ }
13
148
  }
14
149
 
15
- &.np-btn-xs.btn-block > span.btn-loader {
16
- top: 0;
150
+ // Icon styles
151
+ &-icon {
152
+ display: inline-block;
153
+
154
+ &--start {
155
+ margin-right: var(--size-8);
156
+ :dir(rtl) & {
157
+ margin-right: 0;
158
+ margin-left: var(--size-8);
159
+ }
160
+ }
161
+
162
+ &--end {
163
+ margin-left: var(--size-4);
164
+ :dir(rtl) & {
165
+ margin-left: 0;
166
+ margin-right: var(--size-4);
167
+ }
168
+ }
17
169
  }
18
170
 
19
- // we do not want pointer events disabled as that
20
- // prevents the custom cursor to be shown
21
- &.disabled[class] {
22
- pointer-events: auto;
171
+ &-content {
172
+ position: relative;
173
+
174
+ &--loading {
175
+ .wds-Button-label,
176
+ .wds-Button-media,
177
+ .wds-Button-icon {
178
+ visibility: hidden;
179
+ opacity: 0;
180
+ }
181
+ }
182
+ }
183
+
184
+ &-label {
185
+ display: flex;
186
+ justify-content: center;
187
+ align-items: center;
188
+ position: relative;
189
+ }
190
+
191
+ &-loader {
192
+ position: absolute;
193
+ display: flex;
194
+ justify-content: center;
195
+ align-items: center;
196
+ width: 100%;
197
+ height: 100%;
198
+
199
+ .process-circle {
200
+ stroke: var(--Button-color);
201
+ }
202
+ }
203
+ }
204
+
205
+ /* RTL Styles */
206
+ :dir(rtl) {
207
+ .wds-Button {
208
+ .tw-icon-chevron-right,
209
+ .tw-icon-arrow-right {
210
+ transform: rotate(180deg);
211
+ }
212
+
213
+ .tw-icon-chevron-left,
214
+ .tw-icon-arrow-left {
215
+ transform: rotate(180deg);
216
+ }
23
217
  }
24
218
  }
@@ -0,0 +1,120 @@
1
+ import { forwardRef } from 'react';
2
+ import LegacyButton, { LegacyButtonProps } from './LegacyButton';
3
+ import { ButtonProps as NewButtonProps } from './Button.types';
4
+ import NewButton from './Button';
5
+
6
+ type LegacyButtonType =
7
+ | 'accent'
8
+ | 'negative'
9
+ | 'positive'
10
+ | 'primary'
11
+ | 'pay'
12
+ | 'secondary'
13
+ | 'danger'
14
+ | 'link'
15
+ | null
16
+ | undefined;
17
+
18
+ type NewButtonType = 'button' | 'submit' | 'reset' | LegacyButtonType | undefined;
19
+
20
+ type CommonButtonProps = {
21
+ href?: string;
22
+ target?: string;
23
+ ref?: React.Ref<HTMLButtonElement | HTMLAnchorElement>;
24
+ };
25
+
26
+ export type ButtonProps =
27
+ | (Omit<LegacyButtonProps, 'ref'> &
28
+ CommonButtonProps & {
29
+ priority?: LegacyButtonProps['priority'];
30
+ type?: LegacyButtonType;
31
+ htmlType?: string;
32
+ v2?: false;
33
+ })
34
+ | (Omit<Omit<NewButtonProps, 'type'>, 'ref'> &
35
+ CommonButtonProps & {
36
+ priority?: NewButtonProps['priority'];
37
+ type?: NewButtonType;
38
+ v2: true;
39
+ });
40
+
41
+ const mapProps = (props: LegacyButtonProps): NewButtonProps => {
42
+ const { priority, size, type, as, ...newProps } = props;
43
+
44
+ const priorityMapping: Record<string, Record<string, NewButtonProps['priority']>> = {
45
+ accent: {
46
+ primary: 'primary',
47
+ secondary: 'tertiary',
48
+ tertiary: 'minimal',
49
+ },
50
+ positive: {
51
+ primary: 'primary',
52
+ secondary: 'tertiary',
53
+ tertiary: 'tertiary',
54
+ },
55
+ negative: {
56
+ primary: 'primary',
57
+ secondary: 'secondary',
58
+ tertiary: 'secondary',
59
+ },
60
+ };
61
+
62
+ const mappedPriority =
63
+ type && priority ? priorityMapping[type]?.[priority] || priority : priority || undefined;
64
+ const mappedSentiment = type === 'negative' ? 'negative' : undefined;
65
+
66
+ const legacyButtonTypes: LegacyButtonType[] = [
67
+ 'accent',
68
+ 'negative',
69
+ 'positive',
70
+ 'primary',
71
+ 'pay',
72
+ 'secondary',
73
+ 'danger',
74
+ 'link',
75
+ ];
76
+
77
+ const resolveSize = () => {
78
+ if (size) {
79
+ return { xs: 'sm', sm: 'sm', md: 'md', lg: 'lg' }[size] || size;
80
+ }
81
+
82
+ return size;
83
+ };
84
+
85
+ return {
86
+ ...newProps,
87
+ size: resolveSize(),
88
+ priority: mappedPriority,
89
+ sentiment: mappedSentiment || ('sentiment' in props ? props.sentiment : null),
90
+ type:
91
+ type && !legacyButtonTypes.includes(type as LegacyButtonType) ? type : props.htmlType || null,
92
+ href: as === 'a' ? props.href || '' : null,
93
+ } as NewButtonProps;
94
+ };
95
+
96
+ const Button = forwardRef<HTMLButtonElement | HTMLAnchorElement, ButtonProps>((props, ref) => {
97
+ const { v2 = false, as, ...rest } = props;
98
+
99
+ if (v2) {
100
+ const mappedProps = mapProps(props as LegacyButtonProps);
101
+ return (
102
+ <NewButton
103
+ {...mappedProps}
104
+ ref={ref as React.Ref<HTMLButtonElement | HTMLAnchorElement>}
105
+ as={as}
106
+ />
107
+ );
108
+ }
109
+
110
+ return (
111
+ <LegacyButton
112
+ {...(rest as LegacyButtonProps)}
113
+ ref={ref as React.Ref<HTMLButtonElement | HTMLAnchorElement>}
114
+ />
115
+ );
116
+ });
117
+
118
+ Button.displayName = 'Button';
119
+
120
+ export default Button;