@transferwise/components 46.136.1 → 46.137.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 (264) hide show
  1. package/build/common/hooks/useContainerSize.js +30 -0
  2. package/build/common/hooks/useContainerSize.js.map +1 -0
  3. package/build/common/hooks/useContainerSize.mjs +28 -0
  4. package/build/common/hooks/useContainerSize.mjs.map +1 -0
  5. package/build/common/hooks/useResizeObserver.js +3 -3
  6. package/build/common/hooks/useResizeObserver.js.map +1 -1
  7. package/build/common/hooks/useResizeObserver.mjs +3 -3
  8. package/build/common/hooks/useResizeObserver.mjs.map +1 -1
  9. package/build/criticalBanner/CriticalCommsBanner.js +3 -0
  10. package/build/criticalBanner/CriticalCommsBanner.js.map +1 -1
  11. package/build/criticalBanner/CriticalCommsBanner.mjs +3 -0
  12. package/build/criticalBanner/CriticalCommsBanner.mjs.map +1 -1
  13. package/build/field/Field.js +3 -2
  14. package/build/field/Field.js.map +1 -1
  15. package/build/field/Field.mjs +3 -2
  16. package/build/field/Field.mjs.map +1 -1
  17. package/build/i18n/cs.json +2 -0
  18. package/build/i18n/cs.json.js +2 -0
  19. package/build/i18n/cs.json.js.map +1 -1
  20. package/build/i18n/cs.json.mjs +2 -0
  21. package/build/i18n/cs.json.mjs.map +1 -1
  22. package/build/i18n/de.json +2 -0
  23. package/build/i18n/de.json.js +2 -0
  24. package/build/i18n/de.json.js.map +1 -1
  25. package/build/i18n/de.json.mjs +2 -0
  26. package/build/i18n/de.json.mjs.map +1 -1
  27. package/build/i18n/en.json +2 -0
  28. package/build/i18n/en.json.js +2 -0
  29. package/build/i18n/en.json.js.map +1 -1
  30. package/build/i18n/en.json.mjs +2 -0
  31. package/build/i18n/en.json.mjs.map +1 -1
  32. package/build/i18n/es.json +2 -0
  33. package/build/i18n/es.json.js +2 -0
  34. package/build/i18n/es.json.js.map +1 -1
  35. package/build/i18n/es.json.mjs +2 -0
  36. package/build/i18n/es.json.mjs.map +1 -1
  37. package/build/i18n/fr.json +2 -0
  38. package/build/i18n/fr.json.js +2 -0
  39. package/build/i18n/fr.json.js.map +1 -1
  40. package/build/i18n/fr.json.mjs +2 -0
  41. package/build/i18n/fr.json.mjs.map +1 -1
  42. package/build/i18n/hu.json +2 -0
  43. package/build/i18n/hu.json.js +2 -0
  44. package/build/i18n/hu.json.js.map +1 -1
  45. package/build/i18n/hu.json.mjs +2 -0
  46. package/build/i18n/hu.json.mjs.map +1 -1
  47. package/build/i18n/id.json +2 -0
  48. package/build/i18n/id.json.js +2 -0
  49. package/build/i18n/id.json.js.map +1 -1
  50. package/build/i18n/id.json.mjs +2 -0
  51. package/build/i18n/id.json.mjs.map +1 -1
  52. package/build/i18n/it.json +2 -0
  53. package/build/i18n/it.json.js +2 -0
  54. package/build/i18n/it.json.js.map +1 -1
  55. package/build/i18n/it.json.mjs +2 -0
  56. package/build/i18n/it.json.mjs.map +1 -1
  57. package/build/i18n/ja.json +2 -0
  58. package/build/i18n/ja.json.js +2 -0
  59. package/build/i18n/ja.json.js.map +1 -1
  60. package/build/i18n/ja.json.mjs +2 -0
  61. package/build/i18n/ja.json.mjs.map +1 -1
  62. package/build/i18n/nl.json +2 -0
  63. package/build/i18n/nl.json.js +2 -0
  64. package/build/i18n/nl.json.js.map +1 -1
  65. package/build/i18n/nl.json.mjs +2 -0
  66. package/build/i18n/nl.json.mjs.map +1 -1
  67. package/build/i18n/pl.json +2 -0
  68. package/build/i18n/pl.json.js +2 -0
  69. package/build/i18n/pl.json.js.map +1 -1
  70. package/build/i18n/pl.json.mjs +2 -0
  71. package/build/i18n/pl.json.mjs.map +1 -1
  72. package/build/i18n/pt.json +2 -0
  73. package/build/i18n/pt.json.js +2 -0
  74. package/build/i18n/pt.json.js.map +1 -1
  75. package/build/i18n/pt.json.mjs +2 -0
  76. package/build/i18n/pt.json.mjs.map +1 -1
  77. package/build/i18n/ro.json +2 -0
  78. package/build/i18n/ro.json.js +2 -0
  79. package/build/i18n/ro.json.js.map +1 -1
  80. package/build/i18n/ro.json.mjs +2 -0
  81. package/build/i18n/ro.json.mjs.map +1 -1
  82. package/build/i18n/ru.json +2 -0
  83. package/build/i18n/ru.json.js +2 -0
  84. package/build/i18n/ru.json.js.map +1 -1
  85. package/build/i18n/ru.json.mjs +2 -0
  86. package/build/i18n/ru.json.mjs.map +1 -1
  87. package/build/i18n/th.json +2 -0
  88. package/build/i18n/th.json.js +2 -0
  89. package/build/i18n/th.json.js.map +1 -1
  90. package/build/i18n/th.json.mjs +2 -0
  91. package/build/i18n/th.json.mjs.map +1 -1
  92. package/build/i18n/tr.json +2 -0
  93. package/build/i18n/tr.json.js +2 -0
  94. package/build/i18n/tr.json.js.map +1 -1
  95. package/build/i18n/tr.json.mjs +2 -0
  96. package/build/i18n/tr.json.mjs.map +1 -1
  97. package/build/i18n/zh-CN.json +2 -0
  98. package/build/i18n/zh-CN.json.js +2 -0
  99. package/build/i18n/zh-CN.json.js.map +1 -1
  100. package/build/i18n/zh-CN.json.mjs +2 -0
  101. package/build/i18n/zh-CN.json.mjs.map +1 -1
  102. package/build/i18n/zh-HK.json +2 -0
  103. package/build/i18n/zh-HK.json.js +2 -0
  104. package/build/i18n/zh-HK.json.js.map +1 -1
  105. package/build/i18n/zh-HK.json.mjs +2 -0
  106. package/build/i18n/zh-HK.json.mjs.map +1 -1
  107. package/build/index.js +2 -0
  108. package/build/index.js.map +1 -1
  109. package/build/index.mjs +1 -0
  110. package/build/index.mjs.map +1 -1
  111. package/build/listItem/Prompt/ListItemPrompt.js +3 -2
  112. package/build/listItem/Prompt/ListItemPrompt.js.map +1 -1
  113. package/build/listItem/Prompt/ListItemPrompt.mjs +3 -2
  114. package/build/listItem/Prompt/ListItemPrompt.mjs.map +1 -1
  115. package/build/logo/Logo.js +77 -25
  116. package/build/logo/Logo.js.map +1 -1
  117. package/build/logo/Logo.mjs +79 -27
  118. package/build/logo/Logo.mjs.map +1 -1
  119. package/build/logo/logo-assets.js +68 -97
  120. package/build/logo/logo-assets.js.map +1 -1
  121. package/build/logo/logo-assets.mjs +62 -90
  122. package/build/logo/logo-assets.mjs.map +1 -1
  123. package/build/main.css +225 -59
  124. package/build/prompt/ActionPrompt/ActionPrompt.js +8 -40
  125. package/build/prompt/ActionPrompt/ActionPrompt.js.map +1 -1
  126. package/build/prompt/ActionPrompt/ActionPrompt.mjs +8 -40
  127. package/build/prompt/ActionPrompt/ActionPrompt.mjs.map +1 -1
  128. package/build/prompt/CriticalBanner/CriticalBanner.js +143 -0
  129. package/build/prompt/CriticalBanner/CriticalBanner.js.map +1 -0
  130. package/build/prompt/CriticalBanner/CriticalBanner.mjs +141 -0
  131. package/build/prompt/CriticalBanner/CriticalBanner.mjs.map +1 -0
  132. package/build/prompt/CriticalBanner/helpers.js +29 -0
  133. package/build/prompt/CriticalBanner/helpers.js.map +1 -0
  134. package/build/prompt/CriticalBanner/helpers.mjs +26 -0
  135. package/build/prompt/CriticalBanner/helpers.mjs.map +1 -0
  136. package/build/prompt/InfoPrompt/InfoPrompt.js +3 -2
  137. package/build/prompt/InfoPrompt/InfoPrompt.js.map +1 -1
  138. package/build/prompt/InfoPrompt/InfoPrompt.mjs +3 -2
  139. package/build/prompt/InfoPrompt/InfoPrompt.mjs.map +1 -1
  140. package/build/prompt/PrimitivePrompt/PrimitivePrompt.js +11 -4
  141. package/build/prompt/PrimitivePrompt/PrimitivePrompt.js.map +1 -1
  142. package/build/prompt/PrimitivePrompt/PrimitivePrompt.mjs +11 -4
  143. package/build/prompt/PrimitivePrompt/PrimitivePrompt.mjs.map +1 -1
  144. package/build/prompt/common/Expander/Expander.js +35 -0
  145. package/build/prompt/common/Expander/Expander.js.map +1 -0
  146. package/build/prompt/common/Expander/Expander.messages.js +17 -0
  147. package/build/prompt/common/Expander/Expander.messages.js.map +1 -0
  148. package/build/prompt/common/Expander/Expander.messages.mjs +13 -0
  149. package/build/prompt/common/Expander/Expander.messages.mjs.map +1 -0
  150. package/build/prompt/common/Expander/Expander.mjs +33 -0
  151. package/build/prompt/common/Expander/Expander.mjs.map +1 -0
  152. package/build/prompt/helpers/promptMedia.js +52 -0
  153. package/build/prompt/helpers/promptMedia.js.map +1 -0
  154. package/build/prompt/helpers/promptMedia.mjs +50 -0
  155. package/build/prompt/helpers/promptMedia.mjs.map +1 -0
  156. package/build/styles/css/neptune.css +0 -1
  157. package/build/styles/logo/Logo.css +3 -23
  158. package/build/styles/main.css +225 -59
  159. package/build/styles/prompt/CriticalBanner/CriticalBanner.css +134 -0
  160. package/build/styles/prompt/CriticalBanner/CriticalBanner.vars.css +0 -0
  161. package/build/styles/prompt/InfoPrompt/InfoPrompt.css +24 -0
  162. package/build/styles/prompt/common/Expander/Expander.css +8 -0
  163. package/build/styles/styles/less/neptune.css +0 -1
  164. package/build/typeahead/Typeahead.js +3 -2
  165. package/build/typeahead/Typeahead.js.map +1 -1
  166. package/build/typeahead/Typeahead.mjs +3 -2
  167. package/build/typeahead/Typeahead.mjs.map +1 -1
  168. package/build/types/common/hooks/useContainerSize.d.ts +14 -0
  169. package/build/types/common/hooks/useContainerSize.d.ts.map +1 -0
  170. package/build/types/common/hooks/useResizeObserver.d.ts +1 -1
  171. package/build/types/common/hooks/useResizeObserver.d.ts.map +1 -1
  172. package/build/types/criticalBanner/CriticalCommsBanner.d.ts +3 -0
  173. package/build/types/criticalBanner/CriticalCommsBanner.d.ts.map +1 -1
  174. package/build/types/index.d.ts +2 -2
  175. package/build/types/index.d.ts.map +1 -1
  176. package/build/types/logo/Logo.d.ts +33 -1
  177. package/build/types/logo/Logo.d.ts.map +1 -1
  178. package/build/types/logo/logo-assets.d.ts +33 -9
  179. package/build/types/logo/logo-assets.d.ts.map +1 -1
  180. package/build/types/prompt/ActionPrompt/ActionPrompt.d.ts +2 -11
  181. package/build/types/prompt/ActionPrompt/ActionPrompt.d.ts.map +1 -1
  182. package/build/types/prompt/CriticalBanner/CriticalBanner.d.ts +39 -0
  183. package/build/types/prompt/CriticalBanner/CriticalBanner.d.ts.map +1 -0
  184. package/build/types/prompt/CriticalBanner/helpers.d.ts +18 -0
  185. package/build/types/prompt/CriticalBanner/helpers.d.ts.map +1 -0
  186. package/build/types/prompt/CriticalBanner/index.d.ts +3 -0
  187. package/build/types/prompt/CriticalBanner/index.d.ts.map +1 -0
  188. package/build/types/prompt/InfoPrompt/InfoPrompt.d.ts.map +1 -1
  189. package/build/types/prompt/PrimitivePrompt/PrimitivePrompt.d.ts +35 -3
  190. package/build/types/prompt/PrimitivePrompt/PrimitivePrompt.d.ts.map +1 -1
  191. package/build/types/prompt/common/Expander/Expander.d.ts +20 -0
  192. package/build/types/prompt/common/Expander/Expander.d.ts.map +1 -0
  193. package/build/types/prompt/common/Expander/Expander.messages.d.ts +14 -0
  194. package/build/types/prompt/common/Expander/Expander.messages.d.ts.map +1 -0
  195. package/build/types/prompt/helpers/promptMedia.d.ts +22 -0
  196. package/build/types/prompt/helpers/promptMedia.d.ts.map +1 -0
  197. package/build/types/prompt/index.d.ts +2 -0
  198. package/build/types/prompt/index.d.ts.map +1 -1
  199. package/build/types/test-utils/index.d.ts +4 -0
  200. package/build/types/test-utils/index.d.ts.map +1 -1
  201. package/package.json +22 -18
  202. package/src/alert/Alert.story.tsx +30 -1
  203. package/src/avatarWrapper/AvatarWrapper.story.tsx +1 -1
  204. package/src/button/_stories/Button.story.tsx +11 -0
  205. package/src/common/hooks/useContainerSize.test.tsx +125 -0
  206. package/src/common/hooks/useContainerSize.ts +32 -0
  207. package/src/common/hooks/useResizeObserver.ts +3 -2
  208. package/src/criticalBanner/CriticalCommsBanner.story.tsx +4 -0
  209. package/src/criticalBanner/CriticalCommsBanner.test.story.tsx +1 -1
  210. package/src/criticalBanner/CriticalCommsBanner.tsx +3 -0
  211. package/src/i18n/cs.json +2 -0
  212. package/src/i18n/de.json +2 -0
  213. package/src/i18n/en.json +2 -0
  214. package/src/i18n/es.json +2 -0
  215. package/src/i18n/fr.json +2 -0
  216. package/src/i18n/hu.json +2 -0
  217. package/src/i18n/id.json +2 -0
  218. package/src/i18n/it.json +2 -0
  219. package/src/i18n/ja.json +2 -0
  220. package/src/i18n/nl.json +2 -0
  221. package/src/i18n/pl.json +2 -0
  222. package/src/i18n/pt.json +2 -0
  223. package/src/i18n/ro.json +2 -0
  224. package/src/i18n/ru.json +2 -0
  225. package/src/i18n/th.json +2 -0
  226. package/src/i18n/tr.json +2 -0
  227. package/src/i18n/zh-CN.json +2 -0
  228. package/src/i18n/zh-HK.json +2 -0
  229. package/src/index.ts +2 -2
  230. package/src/logo/Logo.css +3 -23
  231. package/src/logo/Logo.less +3 -29
  232. package/src/logo/Logo.story.tsx +117 -89
  233. package/src/logo/Logo.test.story.tsx +15 -24
  234. package/src/logo/Logo.tsx +90 -28
  235. package/src/logo/logo-assets.tsx +36 -92
  236. package/src/main.css +225 -59
  237. package/src/main.less +3 -1
  238. package/src/prompt/ActionPrompt/ActionPrompt.tsx +9 -62
  239. package/src/prompt/CriticalBanner/CriticalBanner.accessibility.docs.mdx +113 -0
  240. package/src/prompt/CriticalBanner/CriticalBanner.css +134 -0
  241. package/src/prompt/CriticalBanner/CriticalBanner.less +155 -0
  242. package/src/prompt/CriticalBanner/CriticalBanner.story.tsx +635 -0
  243. package/src/prompt/CriticalBanner/CriticalBanner.test.story.tsx +422 -0
  244. package/src/prompt/CriticalBanner/CriticalBanner.tsx +179 -0
  245. package/src/prompt/CriticalBanner/CriticalBanner.vars.css +0 -0
  246. package/src/prompt/CriticalBanner/CriticalBanner.vars.less +6 -0
  247. package/src/prompt/CriticalBanner/helpers.ts +39 -0
  248. package/src/prompt/CriticalBanner/index.ts +2 -0
  249. package/src/prompt/InfoPrompt/InfoPrompt.css +24 -0
  250. package/src/prompt/InfoPrompt/InfoPrompt.less +23 -0
  251. package/src/prompt/InfoPrompt/InfoPrompt.tsx +5 -1
  252. package/src/prompt/PrimitivePrompt/PrimitivePrompt.tsx +56 -40
  253. package/src/prompt/common/Expander/Expander.css +8 -0
  254. package/src/prompt/common/Expander/Expander.less +9 -0
  255. package/src/prompt/common/Expander/Expander.messages.ts +14 -0
  256. package/src/prompt/common/Expander/Expander.test.tsx +167 -0
  257. package/src/prompt/common/Expander/Expander.tsx +83 -0
  258. package/src/prompt/helpers/promptMedia.tsx +79 -0
  259. package/src/prompt/index.ts +4 -0
  260. package/src/radio/Radio.story.tsx +1 -1
  261. package/src/section/Section.story.tsx +2 -8
  262. package/src/sentimentSurface/SentimentSurface.story.tsx +43 -17
  263. package/src/statusIcon/StatusIcon.test.tsx +0 -2
  264. package/src/styles/less/neptune.css +0 -1
package/build/main.css CHANGED
@@ -4456,7 +4456,6 @@ kbd kbd {
4456
4456
 
4457
4457
  .text-underline {
4458
4458
  text-decoration: underline;
4459
- -webkit-text-decoration: underline !important;
4460
4459
  text-decoration: underline !important;
4461
4460
  text-underline-offset: 0.3em;
4462
4461
  }
@@ -31067,35 +31066,9 @@ button.np-link {
31067
31066
 
31068
31067
  .np-logo {
31069
31068
  display: inline-block;
31070
- }
31071
-
31072
- .np-theme-personal--forest-green .np-logo-svg path,
31073
- .np-theme-personal--bright-green .np-logo-svg path {
31074
- fill: var(--color-interactive-primary);
31075
- }
31076
-
31077
- .np-theme-personal--dark .np-logo-svg path {
31078
- fill: var(--color-white);
31079
- }
31080
-
31081
- .np-logo-svg--size-sm {
31082
- display: block;
31083
- }
31084
-
31085
- @media (min-width: 576px) {
31086
- .np-logo-svg--size-sm {
31087
- display: none;
31088
- }
31089
- }
31090
-
31091
- .np-logo-svg--size-md {
31092
- display: none;
31093
- }
31094
-
31095
- @media (min-width: 576px) {
31096
- .np-logo-svg--size-md {
31097
- display: block;
31098
- }
31069
+ color: var(--color-interactive-primary);
31070
+ width: var(--wds-logo-width);
31071
+ height: var(--wds-logo-height);
31099
31072
  }
31100
31073
 
31101
31074
  .tw-modal--scrollable {
@@ -32233,6 +32206,228 @@ html:not([dir="rtl"]) .np-navigation-option {
32233
32206
  padding: 0;
32234
32207
  }
32235
32208
 
32209
+ @media (max-width: 320px) {
32210
+ .wds-info-prompt .wds-prompt__media-wrapper {
32211
+ padding-top: 4px;
32212
+ padding-top: var(--size-4);
32213
+ }
32214
+ }
32215
+
32216
+ @media (max-width: 320px) {
32217
+ .wds-info-prompt .wds-prompt__media-wrapper:has(.wds-info-prompt__media > .tw-icon) {
32218
+ padding-top: 8px;
32219
+ padding-top: var(--size-8);
32220
+ }
32221
+ }
32222
+
32223
+ @media (max-width: 320px) {
32224
+ .wds-info-prompt .wds-prompt__media-wrapper:has(+ .wds-info-prompt__content .wds-info-prompt__title:first-child) {
32225
+ padding-top: 8px;
32226
+ padding-top: var(--size-8);
32227
+ }
32228
+ }
32229
+
32230
+ @media (max-width: 320px) {
32231
+ .wds-info-prompt .wds-prompt__media-wrapper:has(+ .wds-info-prompt__content .wds-info-prompt__title:first-child):has(.wds-info-prompt__media > .tw-icon) {
32232
+ padding-top: 12px;
32233
+ padding-top: var(--size-12);
32234
+ }
32235
+ }
32236
+
32237
+ .wds-action-prompt {
32238
+ --Prompt-padding: var(--size-16);
32239
+ --Prompt-actions-gap: var(--size-8);
32240
+ --Prompt-gap: var(--size-10) var(--size-16);
32241
+ --Prompt-border-radius: var(--radius-large);
32242
+ }
32243
+
32244
+ .wds-action-prompt--media-image {
32245
+ width: 48px;
32246
+ width: var(--size-48);
32247
+ height: 48px;
32248
+ height: var(--size-48);
32249
+ -o-object-fit: contain;
32250
+ object-fit: contain;
32251
+ }
32252
+
32253
+ @media (max-width: 767px) {
32254
+ .wds-action-prompt--with-two-actions .wds-prompt__actions-wrapper .wds-Button {
32255
+ flex: 1 1 calc(50% - (var(--Prompt-actions-gap) / 2));
32256
+ min-width: -moz-fit-content;
32257
+ min-width: fit-content;
32258
+ }
32259
+ }
32260
+
32261
+ .wds-action-prompt__content {
32262
+ max-width: calc(48px * 10);
32263
+ max-width: calc(var(--size-48) * 10);
32264
+ }
32265
+
32266
+ .wds-critical-banner {
32267
+ --Prompt-padding: var(--size-16);
32268
+ --Prompt-actions-gap: var(--size-8);
32269
+ --Prompt-gap: var(--size-10) var(--size-16);
32270
+ --Prompt-border-radius: 0;
32271
+ container-type: inline-size;
32272
+ --critical-banner-easing: cubic-bezier(0.9, 0, 0.7, 1);
32273
+ --critical-banner-duration: 150ms;
32274
+ /* Override PrimitivePrompt's --screen-sm-max actions behaviour:
32275
+ actions only go full-width below mobile-max token (container query) */
32276
+ }
32277
+
32278
+ .wds-critical-banner--media-image {
32279
+ width: 48px;
32280
+ width: var(--size-48);
32281
+ height: 48px;
32282
+ height: var(--size-48);
32283
+ -o-object-fit: contain;
32284
+ object-fit: contain;
32285
+ }
32286
+
32287
+ .wds-critical-banner__title {
32288
+ display: -webkit-box;
32289
+ -webkit-line-clamp: 8;
32290
+ line-clamp: 8;
32291
+ -webkit-box-orient: vertical;
32292
+ max-height: 192px;
32293
+ overflow: hidden;
32294
+ transition: max-height var(--critical-banner-duration) var(--critical-banner-easing);
32295
+ }
32296
+
32297
+ .wds-critical-banner--collapsed .wds-critical-banner__title {
32298
+ -webkit-line-clamp: 2;
32299
+ line-clamp: 2;
32300
+ max-height: 48px;
32301
+ }
32302
+
32303
+ .wds-critical-banner__description {
32304
+ max-height: 30vh;
32305
+ opacity: 1;
32306
+ overflow: hidden;
32307
+ transition: max-height var(--critical-banner-duration) var(--critical-banner-easing), opacity var(--critical-banner-duration) var(--critical-banner-easing);
32308
+ }
32309
+
32310
+ .wds-critical-banner--collapsed .wds-critical-banner__description--with-title {
32311
+ max-height: 0;
32312
+ opacity: 0;
32313
+ }
32314
+
32315
+ .wds-critical-banner--collapsed .wds-critical-banner__description:not(.wds-critical-banner__description--with-title) {
32316
+ display: -webkit-box;
32317
+ -webkit-line-clamp: 2;
32318
+ line-clamp: 2;
32319
+ -webkit-box-orient: vertical;
32320
+ overflow: hidden;
32321
+ }
32322
+
32323
+ .wds-critical-banner .wds-prompt__content-wrapper {
32324
+ grid-template-columns: auto 1fr auto;
32325
+ align-items: flex-start;
32326
+ transition: row-gap var(--critical-banner-duration) var(--critical-banner-easing);
32327
+ }
32328
+
32329
+ .wds-critical-banner--collapsed .wds-prompt__content-wrapper {
32330
+ row-gap: 0;
32331
+ }
32332
+
32333
+ .wds-critical-banner__text-wrapper {
32334
+ position: relative;
32335
+ display: flex;
32336
+ flex-direction: column;
32337
+ justify-content: center;
32338
+ align-items: flex-start;
32339
+ text-align: start;
32340
+ min-width: 0;
32341
+ max-width: 480px;
32342
+ height: 100%;
32343
+ padding-top: 3px;
32344
+ }
32345
+
32346
+ @media (max-width: 320px) {
32347
+ .wds-critical-banner__text-wrapper {
32348
+ padding-top: 0;
32349
+ }
32350
+ }
32351
+
32352
+ @container (max-width: 320px) {
32353
+ .wds-critical-banner__text-wrapper {
32354
+ padding-top: 0;
32355
+ }
32356
+ }
32357
+
32358
+ .wds-critical-banner--collapsed .wds-critical-banner__title,
32359
+ .wds-critical-banner--collapsed .wds-critical-banner__description {
32360
+ transform: translateY(0);
32361
+ }
32362
+
32363
+ .wds-critical-banner__toggle {
32364
+ flex-shrink: 0;
32365
+ transition: transform var(--critical-banner-duration) var(--critical-banner-easing);
32366
+ }
32367
+
32368
+ .wds-critical-banner__toggle--collapsed {
32369
+ transform: rotate(180deg);
32370
+ }
32371
+
32372
+ @container (min-width: 768px) {
32373
+ .wds-critical-banner__toggle {
32374
+ display: none;
32375
+ }
32376
+ }
32377
+
32378
+ .wds-critical-banner .wds-prompt__actions-wrapper {
32379
+ grid-column-start: 2;
32380
+ grid-column-end: 3;
32381
+ max-height: 200px;
32382
+ opacity: 1;
32383
+ overflow: visible;
32384
+ }
32385
+
32386
+ @container (max-width: 600px) {
32387
+ .wds-critical-banner .wds-prompt__actions-wrapper {
32388
+ grid-column: span 3;
32389
+ width: 100%;
32390
+ }
32391
+ .wds-critical-banner .wds-prompt__actions-wrapper .wds-Button {
32392
+ flex: 1 1 100%;
32393
+ width: 100%;
32394
+ }
32395
+ }
32396
+
32397
+ .wds-critical-banner--collapsed .wds-prompt__actions-wrapper {
32398
+ max-height: 0;
32399
+ opacity: 0;
32400
+ overflow: hidden;
32401
+ pointer-events: none;
32402
+ }
32403
+
32404
+ @container (max-width: 600px) {
32405
+ .wds-critical-banner--with-two-actions .wds-prompt__actions-wrapper .wds-Button {
32406
+ flex: 1 1 calc(50% - (var(--Prompt-actions-gap) / 2));
32407
+ min-width: -moz-fit-content;
32408
+ min-width: fit-content;
32409
+ }
32410
+ }
32411
+
32412
+ @media (prefers-reduced-motion: reduce) {
32413
+ .wds-critical-banner__description,
32414
+ .wds-critical-banner__title,
32415
+ .wds-critical-banner .wds-prompt__content-wrapper,
32416
+ .wds-critical-banner__toggle {
32417
+ transition: none !important;
32418
+ }
32419
+ }
32420
+
32421
+ .wds-expander-toggle {
32422
+ align-self: flex-start;
32423
+ flex-shrink: 0;
32424
+ transition: transform 0.2s ease-in-out;
32425
+ }
32426
+
32427
+ .wds-expander-toggle--collapsed {
32428
+ transform: rotate(180deg);
32429
+ }
32430
+
32236
32431
  .wds-radio-group .np-radio:last-child label {
32237
32432
  margin-bottom: 0;
32238
32433
  }
@@ -34658,32 +34853,3 @@ html:not([dir="rtl"]) .np-navigation-option {
34658
34853
  .np-list-item__action {
34659
34854
  flex-shrink: 0;
34660
34855
  }
34661
-
34662
- .wds-action-prompt {
34663
- --Prompt-padding: var(--size-16);
34664
- --Prompt-actions-gap: var(--size-8);
34665
- --Prompt-gap: var(--size-10) var(--size-16);
34666
- --Prompt-border-radius: var(--radius-large);
34667
- }
34668
-
34669
- .wds-action-prompt--media-image {
34670
- width: 48px;
34671
- width: var(--size-48);
34672
- height: 48px;
34673
- height: var(--size-48);
34674
- -o-object-fit: contain;
34675
- object-fit: contain;
34676
- }
34677
-
34678
- @media (max-width: 767px) {
34679
- .wds-action-prompt--with-two-actions .wds-prompt__actions-wrapper .wds-Button {
34680
- flex: 1 1 calc(50% - (var(--Prompt-actions-gap) / 2));
34681
- min-width: -moz-fit-content;
34682
- min-width: fit-content;
34683
- }
34684
- }
34685
-
34686
- .wds-action-prompt__content {
34687
- max-width: calc(48px * 10);
34688
- max-width: calc(var(--size-48) * 10);
34689
- }
@@ -2,7 +2,6 @@
2
2
 
3
3
  var React = require('react');
4
4
  var clsx = require('clsx');
5
- var StatusIcon = require('../../statusIcon/StatusIcon.js');
6
5
  var Body = require('../../body/Body.js');
7
6
  var Button_resolver = require('../../button/Button.resolver.js');
8
7
  require('../../common/theme.js');
@@ -25,14 +24,13 @@ require('../../common/propsValues/scroll.js');
25
24
  require('../../common/propsValues/markdownNodeType.js');
26
25
  require('../../common/fileType.js');
27
26
  require('@transferwise/formatting');
28
- var icons = require('@transferwise/icons');
27
+ require('@transferwise/icons');
29
28
  require('react-intl');
30
29
  require('../../common/closeButton/CloseButton.messages.js');
31
30
  var jsxRuntime = require('react/jsx-runtime');
32
- var AvatarView = require('../../avatarView/AvatarView.js');
33
- var Image = require('../../image/Image.js');
34
31
  var PrimitivePrompt = require('../PrimitivePrompt/PrimitivePrompt.js');
35
32
  var useScreenSize = require('../../common/hooks/useScreenSize.js');
33
+ var promptMedia = require('../helpers/promptMedia.js');
36
34
 
37
35
  const ActionPrompt = ({
38
36
  sentiment = 'neutral',
@@ -52,42 +50,12 @@ const ActionPrompt = ({
52
50
  const titleId = React.useId();
53
51
  const descId = React.useId();
54
52
  const ariaLabelledByIds = [media['aria-hidden'] ? undefined : mediaId, ariaLabel ? undefined : titleId].filter(Boolean).join(' ');
55
- const renderMedia = () => {
56
- if (media?.imgSrc) {
57
- return /*#__PURE__*/jsxRuntime.jsx(Image.default, {
58
- id: mediaId,
59
- src: media.imgSrc,
60
- className: "wds-action-prompt--media-image",
61
- alt: media['aria-label'] ?? ''
62
- });
63
- }
64
- if (media?.avatar) {
65
- const badge = media.avatar.badge ? media.avatar.badge : sentiment === 'proposition' ? {} : {
66
- status: sentiment
67
- };
68
- return /*#__PURE__*/jsxRuntime.jsx(AvatarView.default, {
69
- ...media.avatar,
70
- badge: badge,
71
- "aria-label": media['aria-label'],
72
- "aria-hidden": media['aria-hidden'],
73
- id: mediaId,
74
- size: 48,
75
- children: media.avatar.asset
76
- });
77
- }
78
- return sentiment === 'proposition' ? /*#__PURE__*/jsxRuntime.jsx(AvatarView.default, {
79
- id: mediaId,
80
- size: 48,
81
- "aria-label": media['aria-label'],
82
- "aria-hidden": media['aria-hidden'],
83
- children: /*#__PURE__*/jsxRuntime.jsx(icons.GiftBox, {})
84
- }) : /*#__PURE__*/jsxRuntime.jsx(StatusIcon.default, {
85
- id: mediaId,
86
- size: 48,
87
- sentiment: sentiment,
88
- iconLabel: media['aria-hidden'] ? null : media['aria-label']
89
- });
90
- };
53
+ const renderMedia = () => promptMedia.renderPromptMedia({
54
+ media,
55
+ sentiment,
56
+ mediaId,
57
+ imgClassName: 'wds-action-prompt--media-image'
58
+ });
91
59
  return /*#__PURE__*/jsxRuntime.jsx(PrimitivePrompt.PrimitivePrompt, {
92
60
  id: id,
93
61
  sentiment: sentiment,
@@ -1 +1 @@
1
- {"version":3,"file":"ActionPrompt.js","sources":["../../../src/prompt/ActionPrompt/ActionPrompt.tsx"],"sourcesContent":["import { AriaAttributes, ReactNode, useId } from 'react';\nimport { clsx } from 'clsx';\n\nimport StatusIcon from '../../statusIcon';\nimport Body from '../../body';\nimport Button from '../../button';\nimport { Breakpoint, Typography } from '../../common';\nimport AvatarView, { AvatarViewProps } from '../../avatarView';\nimport Image from '../../image';\nimport { ButtonProps } from '../../button/Button.types';\nimport { PrimitivePrompt, PrimitivePromptProps } from '../PrimitivePrompt';\nimport { BadgeAssetsProps } from '../../badge';\nimport { GiftBox } from '@transferwise/icons';\nimport { useScreenSize } from '../../common/hooks/useScreenSize';\n\nexport type ActionPromptProps = {\n title: ReactNode;\n description?: ReactNode;\n /** @default {} */\n media?: {\n imgSrc?: string;\n avatar?: Pick<AvatarViewProps, 'imgSrc' | 'profileName' | 'profileType'> & {\n asset?: AvatarViewProps['children'];\n badge?: Pick<BadgeAssetsProps, 'flagCode'>;\n };\n 'aria-label'?: string;\n 'aria-hidden'?: boolean;\n };\n action: Pick<ButtonProps, 'onClick' | 'href' | 'target'> & {\n label: ButtonProps['children'];\n };\n actionSecondary?: Pick<ButtonProps, 'onClick' | 'href' | 'target'> & {\n label: ButtonProps['children'];\n };\n 'aria-label'?: AriaAttributes['aria-label'];\n} & Pick<PrimitivePromptProps, 'id' | 'className' | 'data-testid' | 'onDismiss'> & {\n /**\n * The sentiment determines the colour scheme\n * @default 'neutral'\n */\n sentiment?: PrimitivePromptProps['sentiment'];\n };\n\n/**\n * Use an action prompt for optional feedback that doesn't require immediate action, such as feature upsells, warnings, or suggestions. These prompts are typically used outside of core product flows (e.g., Launchpad, Recipient, or Transaction screens) and can be addressed at the user's convenience.\n *\n * If your message is about immediate user feedback (e.g., form submission errors, download failures, missing data warnings), use an [info prompt](https://storybook.wise.design/?path=/docs/prompts-infoprompt--docs) instead.\n *\n * Guidance can be found in the [design system](https://wise.design/components/action-prompt).\n */\nexport const ActionPrompt = ({\n sentiment = 'neutral',\n title,\n description,\n onDismiss,\n media = {},\n action,\n actionSecondary,\n id,\n className,\n 'data-testid': testId,\n 'aria-label': ariaLabel,\n}: ActionPromptProps) => {\n const isMobile = !useScreenSize(Breakpoint.MEDIUM);\n\n const mediaId = useId();\n const titleId = useId();\n const descId = useId();\n\n const ariaLabelledByIds = [\n media['aria-hidden'] ? undefined : mediaId,\n ariaLabel ? undefined : titleId,\n ]\n .filter(Boolean)\n .join(' ');\n\n const renderMedia = () => {\n if (media?.imgSrc) {\n return (\n <Image\n id={mediaId}\n src={media.imgSrc}\n className=\"wds-action-prompt--media-image\"\n alt={media['aria-label'] ?? ''}\n />\n );\n }\n if (media?.avatar) {\n const badge = media.avatar.badge\n ? media.avatar.badge\n : sentiment === 'proposition'\n ? {}\n : { status: sentiment };\n return (\n <AvatarView\n {...media.avatar}\n badge={badge}\n aria-label={media['aria-label']}\n aria-hidden={media['aria-hidden']}\n id={mediaId}\n size={48}\n >\n {media.avatar.asset}\n </AvatarView>\n );\n }\n return sentiment === 'proposition' ? (\n <AvatarView\n id={mediaId}\n size={48}\n aria-label={media['aria-label']}\n aria-hidden={media['aria-hidden']}\n >\n <GiftBox />\n </AvatarView>\n ) : (\n <StatusIcon\n id={mediaId}\n size={48}\n sentiment={sentiment}\n iconLabel={media['aria-hidden'] ? null : media['aria-label']}\n />\n );\n };\n\n return (\n <PrimitivePrompt\n id={id}\n sentiment={sentiment}\n data-testid={testId}\n className={clsx(\n 'wds-action-prompt',\n { 'wds-action-prompt--with-two-actions': !!actionSecondary },\n className,\n )}\n media={renderMedia()}\n actions={\n <>\n {actionSecondary && (\n // @ts-expect-error onClick type mismatch\n <Button\n v2\n size=\"md\"\n priority=\"secondary\"\n href={actionSecondary.href}\n block={isMobile}\n onClick={actionSecondary?.onClick}\n >\n {actionSecondary.label}\n </Button>\n )}\n {/* @ts-expect-error onClick type mismatch */}\n <Button\n v2\n size=\"md\"\n priority=\"primary\"\n href={action.href}\n block={isMobile}\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n </>\n }\n role=\"region\"\n onDismiss={onDismiss}\n {...(ariaLabel\n ? { 'aria-label': ariaLabel }\n : {\n 'aria-labelledby': ariaLabelledByIds,\n 'aria-describedby': descId,\n })}\n >\n <div className={clsx('d-flex', 'flex-column', 'justify-content-center')}>\n <Body id={titleId} type={Typography.BODY_LARGE_BOLD} className=\"wds-action-prompt__content\">\n {title}\n </Body>\n {description && (\n <Body id={descId} className=\"wds-action-prompt__content\">\n {description}\n </Body>\n )}\n </div>\n </PrimitivePrompt>\n );\n};\n\nexport default ActionPrompt;\n"],"names":["ActionPrompt","sentiment","title","description","onDismiss","media","action","actionSecondary","id","className","testId","ariaLabel","isMobile","useScreenSize","Breakpoint","MEDIUM","mediaId","useId","titleId","descId","ariaLabelledByIds","undefined","filter","Boolean","join","renderMedia","imgSrc","_jsx","Image","src","alt","avatar","badge","status","AvatarView","size","children","asset","GiftBox","StatusIcon","iconLabel","PrimitivePrompt","clsx","actions","_jsxs","_Fragment","Button","v2","priority","href","block","onClick","label","role","Body","type","Typography","BODY_LARGE_BOLD"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDO,MAAMA,YAAY,GAAGA,CAAC;AAC3BC,EAAAA,SAAS,GAAG,SAAS;EACrBC,KAAK;EACLC,WAAW;EACXC,SAAS;EACTC,KAAK,GAAG,EAAE;EACVC,MAAM;EACNC,eAAe;EACfC,EAAE;EACFC,SAAS;AACT,EAAA,aAAa,EAAEC,MAAM;AACrB,EAAA,YAAY,EAAEC;AAAS,CACL,KAAI;EACtB,MAAMC,QAAQ,GAAG,CAACC,2BAAa,CAACC,qBAAU,CAACC,MAAM,CAAC;AAElD,EAAA,MAAMC,OAAO,GAAGC,WAAK,EAAE;AACvB,EAAA,MAAMC,OAAO,GAAGD,WAAK,EAAE;AACvB,EAAA,MAAME,MAAM,GAAGF,WAAK,EAAE;EAEtB,MAAMG,iBAAiB,GAAG,CACxBf,KAAK,CAAC,aAAa,CAAC,GAAGgB,SAAS,GAAGL,OAAO,EAC1CL,SAAS,GAAGU,SAAS,GAAGH,OAAO,CAChC,CACEI,MAAM,CAACC,OAAO,CAAC,CACfC,IAAI,CAAC,GAAG,CAAC;EAEZ,MAAMC,WAAW,GAAGA,MAAK;IACvB,IAAIpB,KAAK,EAAEqB,MAAM,EAAE;MACjB,oBACEC,cAAA,CAACC,aAAK,EAAA;AACJpB,QAAAA,EAAE,EAAEQ,OAAQ;QACZa,GAAG,EAAExB,KAAK,CAACqB,MAAO;AAClBjB,QAAAA,SAAS,EAAC,gCAAgC;AAC1CqB,QAAAA,GAAG,EAAEzB,KAAK,CAAC,YAAY,CAAC,IAAI;AAAG,OAAA,CAC/B;AAEN,IAAA;IACA,IAAIA,KAAK,EAAE0B,MAAM,EAAE;MACjB,MAAMC,KAAK,GAAG3B,KAAK,CAAC0B,MAAM,CAACC,KAAK,GAC5B3B,KAAK,CAAC0B,MAAM,CAACC,KAAK,GAClB/B,SAAS,KAAK,aAAa,GACzB,EAAE,GACF;AAAEgC,QAAAA,MAAM,EAAEhC;OAAW;MAC3B,oBACE0B,cAAA,CAACO,kBAAU,EAAA;QAAA,GACL7B,KAAK,CAAC0B,MAAM;AAChBC,QAAAA,KAAK,EAAEA,KAAM;QACb,YAAA,EAAY3B,KAAK,CAAC,YAAY,CAAE;QAChC,aAAA,EAAaA,KAAK,CAAC,aAAa,CAAE;AAClCG,QAAAA,EAAE,EAAEQ,OAAQ;AACZmB,QAAAA,IAAI,EAAE,EAAG;AAAAC,QAAAA,QAAA,EAER/B,KAAK,CAAC0B,MAAM,CAACM;AAAK,OACT,CAAC;AAEjB,IAAA;AACA,IAAA,OAAOpC,SAAS,KAAK,aAAa,gBAChC0B,cAAA,CAACO,kBAAU,EAAA;AACT1B,MAAAA,EAAE,EAAEQ,OAAQ;AACZmB,MAAAA,IAAI,EAAE,EAAG;MACT,YAAA,EAAY9B,KAAK,CAAC,YAAY,CAAE;MAChC,aAAA,EAAaA,KAAK,CAAC,aAAa,CAAE;AAAA+B,MAAAA,QAAA,eAElCT,cAAA,CAACW,aAAO,EAAA,EAAA;AACV,KAAY,CAAC,gBAEbX,cAAA,CAACY,kBAAU,EAAA;AACT/B,MAAAA,EAAE,EAAEQ,OAAQ;AACZmB,MAAAA,IAAI,EAAE,EAAG;AACTlC,MAAAA,SAAS,EAAEA,SAAU;MACrBuC,SAAS,EAAEnC,KAAK,CAAC,aAAa,CAAC,GAAG,IAAI,GAAGA,KAAK,CAAC,YAAY;AAAE,KAAA,CAEhE;EACH,CAAC;EAED,oBACEsB,cAAA,CAACc,+BAAe,EAAA;AACdjC,IAAAA,EAAE,EAAEA,EAAG;AACPP,IAAAA,SAAS,EAAEA,SAAU;AACrB,IAAA,aAAA,EAAaS,MAAO;AACpBD,IAAAA,SAAS,EAAEiC,SAAI,CACb,mBAAmB,EACnB;MAAE,qCAAqC,EAAE,CAAC,CAACnC;KAAiB,EAC5DE,SAAS,CACT;IACFJ,KAAK,EAAEoB,WAAW,EAAG;IACrBkB,OAAO,eACLC,eAAA,CAAAC,mBAAA,EAAA;AAAAT,MAAAA,QAAA,GACG7B,eAAe;AAAA;AACd;AACAoB,MAAAA,cAAA,CAACmB,uBAAM,EAAA;QACLC,EAAE,EAAA,IAAA;AACFZ,QAAAA,IAAI,EAAC,IAAI;AACTa,QAAAA,QAAQ,EAAC,WAAW;QACpBC,IAAI,EAAE1C,eAAe,CAAC0C,IAAK;AAC3BC,QAAAA,KAAK,EAAEtC,QAAS;QAChBuC,OAAO,EAAE5C,eAAe,EAAE4C,OAAQ;QAAAf,QAAA,EAEjC7B,eAAe,CAAC6C;AAAK,OAChB,CACT,eAEDzB,cAAA,CAACmB,uBAAM,EAAA;QACLC,EAAE,EAAA,IAAA;AACFZ,QAAAA,IAAI,EAAC,IAAI;AACTa,QAAAA,QAAQ,EAAC,SAAS;QAClBC,IAAI,EAAE3C,MAAM,CAAC2C,IAAK;AAClBC,QAAAA,KAAK,EAAEtC,QAAS;QAChBuC,OAAO,EAAE7C,MAAM,CAAC6C,OAAQ;QAAAf,QAAA,EAEvB9B,MAAM,CAAC8C;AAAK,OACP,CACV;AAAA,KAAA,CACD;AACDC,IAAAA,IAAI,EAAC,QAAQ;AACbjD,IAAAA,SAAS,EAAEA,SAAU;AAAA,IAAA,IAChBO,SAAS,GACV;AAAE,MAAA,YAAY,EAAEA;AAAS,KAAE,GAC3B;AACE,MAAA,iBAAiB,EAAES,iBAAiB;AACpC,MAAA,kBAAkB,EAAED;KACrB,CAAA;AAAAiB,IAAAA,QAAA,eAELQ,eAAA,CAAA,KAAA,EAAA;MAAKnC,SAAS,EAAEiC,SAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,wBAAwB,CAAE;MAAAN,QAAA,EAAA,cACtET,cAAA,CAAC2B,YAAI,EAAA;AAAC9C,QAAAA,EAAE,EAAEU,OAAQ;QAACqC,IAAI,EAAEC,qBAAU,CAACC,eAAgB;AAAChD,QAAAA,SAAS,EAAC,4BAA4B;AAAA2B,QAAAA,QAAA,EACxFlC;AAAK,OACF,CACN,EAACC,WAAW,iBACVwB,cAAA,CAAC2B,YAAI,EAAA;AAAC9C,QAAAA,EAAE,EAAEW,MAAO;AAACV,QAAAA,SAAS,EAAC,4BAA4B;AAAA2B,QAAAA,QAAA,EACrDjC;AAAW,OACR,CACP;KACE;AACP,GAAiB,CAAC;AAEtB;;;;"}
1
+ {"version":3,"file":"ActionPrompt.js","sources":["../../../src/prompt/ActionPrompt/ActionPrompt.tsx"],"sourcesContent":["import { AriaAttributes, ReactNode, useId } from 'react';\nimport { clsx } from 'clsx';\n\nimport Body from '../../body';\nimport Button from '../../button';\nimport { Breakpoint, Typography } from '../../common';\nimport { ButtonProps } from '../../button/Button.types';\nimport { PrimitivePrompt, PrimitivePromptProps } from '../PrimitivePrompt';\nimport { useScreenSize } from '../../common/hooks/useScreenSize';\nimport { renderPromptMedia, PromptMedia } from '../helpers/promptMedia';\n\nexport type ActionPromptProps = {\n title: ReactNode;\n description?: ReactNode;\n /** @default {} */\n media?: PromptMedia;\n action: Pick<ButtonProps, 'onClick' | 'href' | 'target'> & {\n label: ButtonProps['children'];\n };\n actionSecondary?: Pick<ButtonProps, 'onClick' | 'href' | 'target'> & {\n label: ButtonProps['children'];\n };\n 'aria-label'?: AriaAttributes['aria-label'];\n} & Pick<PrimitivePromptProps, 'id' | 'className' | 'data-testid' | 'onDismiss'> & {\n /**\n * The sentiment determines the colour scheme\n * @default 'neutral'\n */\n sentiment?: PrimitivePromptProps['sentiment'];\n };\n\n/**\n * Use an action prompt for optional feedback that doesn't require immediate action, such as feature upsells, warnings, or suggestions. These prompts are typically used outside of core product flows (e.g., Launchpad, Recipient, or Transaction screens) and can be addressed at the user's convenience.\n *\n * If your message is about immediate user feedback (e.g., form submission errors, download failures, missing data warnings), use an [info prompt](https://storybook.wise.design/?path=/docs/prompts-infoprompt--docs) instead.\n *\n * Guidance can be found in the [design system](https://wise.design/components/action-prompt).\n */\nexport const ActionPrompt = ({\n sentiment = 'neutral',\n title,\n description,\n onDismiss,\n media = {},\n action,\n actionSecondary,\n id,\n className,\n 'data-testid': testId,\n 'aria-label': ariaLabel,\n}: ActionPromptProps) => {\n const isMobile = !useScreenSize(Breakpoint.MEDIUM);\n\n const mediaId = useId();\n const titleId = useId();\n const descId = useId();\n\n const ariaLabelledByIds = [\n media['aria-hidden'] ? undefined : mediaId,\n ariaLabel ? undefined : titleId,\n ]\n .filter(Boolean)\n .join(' ');\n\n const renderMedia = () =>\n renderPromptMedia({\n media,\n sentiment,\n mediaId,\n imgClassName: 'wds-action-prompt--media-image',\n });\n\n return (\n <PrimitivePrompt\n id={id}\n sentiment={sentiment}\n data-testid={testId}\n className={clsx(\n 'wds-action-prompt',\n { 'wds-action-prompt--with-two-actions': !!actionSecondary },\n className,\n )}\n media={renderMedia()}\n actions={\n <>\n {actionSecondary && (\n // @ts-expect-error onClick type mismatch\n <Button\n v2\n size=\"md\"\n priority=\"secondary\"\n href={actionSecondary.href}\n block={isMobile}\n onClick={actionSecondary?.onClick}\n >\n {actionSecondary.label}\n </Button>\n )}\n {/* @ts-expect-error onClick type mismatch */}\n <Button\n v2\n size=\"md\"\n priority=\"primary\"\n href={action.href}\n block={isMobile}\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n </>\n }\n role=\"region\"\n onDismiss={onDismiss}\n {...(ariaLabel\n ? { 'aria-label': ariaLabel }\n : {\n 'aria-labelledby': ariaLabelledByIds,\n 'aria-describedby': descId,\n })}\n >\n <div className={clsx('d-flex', 'flex-column', 'justify-content-center')}>\n <Body id={titleId} type={Typography.BODY_LARGE_BOLD} className=\"wds-action-prompt__content\">\n {title}\n </Body>\n {description && (\n <Body id={descId} className=\"wds-action-prompt__content\">\n {description}\n </Body>\n )}\n </div>\n </PrimitivePrompt>\n );\n};\n\nexport default ActionPrompt;\n"],"names":["ActionPrompt","sentiment","title","description","onDismiss","media","action","actionSecondary","id","className","testId","ariaLabel","isMobile","useScreenSize","Breakpoint","MEDIUM","mediaId","useId","titleId","descId","ariaLabelledByIds","undefined","filter","Boolean","join","renderMedia","renderPromptMedia","imgClassName","_jsx","PrimitivePrompt","clsx","actions","_jsxs","_Fragment","children","Button","v2","size","priority","href","block","onClick","label","role","Body","type","Typography","BODY_LARGE_BOLD"],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  import { useId } from 'react';
2
2
  import { clsx } from 'clsx';
3
- import StatusIcon from '../../statusIcon/StatusIcon.mjs';
4
3
  import Body from '../../body/Body.mjs';
5
4
  import Button from '../../button/Button.resolver.mjs';
6
5
  import '../../common/theme.mjs';
@@ -23,14 +22,13 @@ import '../../common/propsValues/scroll.mjs';
23
22
  import '../../common/propsValues/markdownNodeType.mjs';
24
23
  import '../../common/fileType.mjs';
25
24
  import '@transferwise/formatting';
26
- import { GiftBox } from '@transferwise/icons';
25
+ import '@transferwise/icons';
27
26
  import 'react-intl';
28
27
  import '../../common/closeButton/CloseButton.messages.mjs';
29
28
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
30
- import AvatarView from '../../avatarView/AvatarView.mjs';
31
- import Image from '../../image/Image.mjs';
32
29
  import { PrimitivePrompt } from '../PrimitivePrompt/PrimitivePrompt.mjs';
33
30
  import { useScreenSize } from '../../common/hooks/useScreenSize.mjs';
31
+ import { renderPromptMedia } from '../helpers/promptMedia.mjs';
34
32
 
35
33
  const ActionPrompt = ({
36
34
  sentiment = 'neutral',
@@ -50,42 +48,12 @@ const ActionPrompt = ({
50
48
  const titleId = useId();
51
49
  const descId = useId();
52
50
  const ariaLabelledByIds = [media['aria-hidden'] ? undefined : mediaId, ariaLabel ? undefined : titleId].filter(Boolean).join(' ');
53
- const renderMedia = () => {
54
- if (media?.imgSrc) {
55
- return /*#__PURE__*/jsx(Image, {
56
- id: mediaId,
57
- src: media.imgSrc,
58
- className: "wds-action-prompt--media-image",
59
- alt: media['aria-label'] ?? ''
60
- });
61
- }
62
- if (media?.avatar) {
63
- const badge = media.avatar.badge ? media.avatar.badge : sentiment === 'proposition' ? {} : {
64
- status: sentiment
65
- };
66
- return /*#__PURE__*/jsx(AvatarView, {
67
- ...media.avatar,
68
- badge: badge,
69
- "aria-label": media['aria-label'],
70
- "aria-hidden": media['aria-hidden'],
71
- id: mediaId,
72
- size: 48,
73
- children: media.avatar.asset
74
- });
75
- }
76
- return sentiment === 'proposition' ? /*#__PURE__*/jsx(AvatarView, {
77
- id: mediaId,
78
- size: 48,
79
- "aria-label": media['aria-label'],
80
- "aria-hidden": media['aria-hidden'],
81
- children: /*#__PURE__*/jsx(GiftBox, {})
82
- }) : /*#__PURE__*/jsx(StatusIcon, {
83
- id: mediaId,
84
- size: 48,
85
- sentiment: sentiment,
86
- iconLabel: media['aria-hidden'] ? null : media['aria-label']
87
- });
88
- };
51
+ const renderMedia = () => renderPromptMedia({
52
+ media,
53
+ sentiment,
54
+ mediaId,
55
+ imgClassName: 'wds-action-prompt--media-image'
56
+ });
89
57
  return /*#__PURE__*/jsx(PrimitivePrompt, {
90
58
  id: id,
91
59
  sentiment: sentiment,
@@ -1 +1 @@
1
- {"version":3,"file":"ActionPrompt.mjs","sources":["../../../src/prompt/ActionPrompt/ActionPrompt.tsx"],"sourcesContent":["import { AriaAttributes, ReactNode, useId } from 'react';\nimport { clsx } from 'clsx';\n\nimport StatusIcon from '../../statusIcon';\nimport Body from '../../body';\nimport Button from '../../button';\nimport { Breakpoint, Typography } from '../../common';\nimport AvatarView, { AvatarViewProps } from '../../avatarView';\nimport Image from '../../image';\nimport { ButtonProps } from '../../button/Button.types';\nimport { PrimitivePrompt, PrimitivePromptProps } from '../PrimitivePrompt';\nimport { BadgeAssetsProps } from '../../badge';\nimport { GiftBox } from '@transferwise/icons';\nimport { useScreenSize } from '../../common/hooks/useScreenSize';\n\nexport type ActionPromptProps = {\n title: ReactNode;\n description?: ReactNode;\n /** @default {} */\n media?: {\n imgSrc?: string;\n avatar?: Pick<AvatarViewProps, 'imgSrc' | 'profileName' | 'profileType'> & {\n asset?: AvatarViewProps['children'];\n badge?: Pick<BadgeAssetsProps, 'flagCode'>;\n };\n 'aria-label'?: string;\n 'aria-hidden'?: boolean;\n };\n action: Pick<ButtonProps, 'onClick' | 'href' | 'target'> & {\n label: ButtonProps['children'];\n };\n actionSecondary?: Pick<ButtonProps, 'onClick' | 'href' | 'target'> & {\n label: ButtonProps['children'];\n };\n 'aria-label'?: AriaAttributes['aria-label'];\n} & Pick<PrimitivePromptProps, 'id' | 'className' | 'data-testid' | 'onDismiss'> & {\n /**\n * The sentiment determines the colour scheme\n * @default 'neutral'\n */\n sentiment?: PrimitivePromptProps['sentiment'];\n };\n\n/**\n * Use an action prompt for optional feedback that doesn't require immediate action, such as feature upsells, warnings, or suggestions. These prompts are typically used outside of core product flows (e.g., Launchpad, Recipient, or Transaction screens) and can be addressed at the user's convenience.\n *\n * If your message is about immediate user feedback (e.g., form submission errors, download failures, missing data warnings), use an [info prompt](https://storybook.wise.design/?path=/docs/prompts-infoprompt--docs) instead.\n *\n * Guidance can be found in the [design system](https://wise.design/components/action-prompt).\n */\nexport const ActionPrompt = ({\n sentiment = 'neutral',\n title,\n description,\n onDismiss,\n media = {},\n action,\n actionSecondary,\n id,\n className,\n 'data-testid': testId,\n 'aria-label': ariaLabel,\n}: ActionPromptProps) => {\n const isMobile = !useScreenSize(Breakpoint.MEDIUM);\n\n const mediaId = useId();\n const titleId = useId();\n const descId = useId();\n\n const ariaLabelledByIds = [\n media['aria-hidden'] ? undefined : mediaId,\n ariaLabel ? undefined : titleId,\n ]\n .filter(Boolean)\n .join(' ');\n\n const renderMedia = () => {\n if (media?.imgSrc) {\n return (\n <Image\n id={mediaId}\n src={media.imgSrc}\n className=\"wds-action-prompt--media-image\"\n alt={media['aria-label'] ?? ''}\n />\n );\n }\n if (media?.avatar) {\n const badge = media.avatar.badge\n ? media.avatar.badge\n : sentiment === 'proposition'\n ? {}\n : { status: sentiment };\n return (\n <AvatarView\n {...media.avatar}\n badge={badge}\n aria-label={media['aria-label']}\n aria-hidden={media['aria-hidden']}\n id={mediaId}\n size={48}\n >\n {media.avatar.asset}\n </AvatarView>\n );\n }\n return sentiment === 'proposition' ? (\n <AvatarView\n id={mediaId}\n size={48}\n aria-label={media['aria-label']}\n aria-hidden={media['aria-hidden']}\n >\n <GiftBox />\n </AvatarView>\n ) : (\n <StatusIcon\n id={mediaId}\n size={48}\n sentiment={sentiment}\n iconLabel={media['aria-hidden'] ? null : media['aria-label']}\n />\n );\n };\n\n return (\n <PrimitivePrompt\n id={id}\n sentiment={sentiment}\n data-testid={testId}\n className={clsx(\n 'wds-action-prompt',\n { 'wds-action-prompt--with-two-actions': !!actionSecondary },\n className,\n )}\n media={renderMedia()}\n actions={\n <>\n {actionSecondary && (\n // @ts-expect-error onClick type mismatch\n <Button\n v2\n size=\"md\"\n priority=\"secondary\"\n href={actionSecondary.href}\n block={isMobile}\n onClick={actionSecondary?.onClick}\n >\n {actionSecondary.label}\n </Button>\n )}\n {/* @ts-expect-error onClick type mismatch */}\n <Button\n v2\n size=\"md\"\n priority=\"primary\"\n href={action.href}\n block={isMobile}\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n </>\n }\n role=\"region\"\n onDismiss={onDismiss}\n {...(ariaLabel\n ? { 'aria-label': ariaLabel }\n : {\n 'aria-labelledby': ariaLabelledByIds,\n 'aria-describedby': descId,\n })}\n >\n <div className={clsx('d-flex', 'flex-column', 'justify-content-center')}>\n <Body id={titleId} type={Typography.BODY_LARGE_BOLD} className=\"wds-action-prompt__content\">\n {title}\n </Body>\n {description && (\n <Body id={descId} className=\"wds-action-prompt__content\">\n {description}\n </Body>\n )}\n </div>\n </PrimitivePrompt>\n );\n};\n\nexport default ActionPrompt;\n"],"names":["ActionPrompt","sentiment","title","description","onDismiss","media","action","actionSecondary","id","className","testId","ariaLabel","isMobile","useScreenSize","Breakpoint","MEDIUM","mediaId","useId","titleId","descId","ariaLabelledByIds","undefined","filter","Boolean","join","renderMedia","imgSrc","_jsx","Image","src","alt","avatar","badge","status","AvatarView","size","children","asset","GiftBox","StatusIcon","iconLabel","PrimitivePrompt","clsx","actions","_jsxs","_Fragment","Button","v2","priority","href","block","onClick","label","role","Body","type","Typography","BODY_LARGE_BOLD"],"mappings":"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"}
1
+ {"version":3,"file":"ActionPrompt.mjs","sources":["../../../src/prompt/ActionPrompt/ActionPrompt.tsx"],"sourcesContent":["import { AriaAttributes, ReactNode, useId } from 'react';\nimport { clsx } from 'clsx';\n\nimport Body from '../../body';\nimport Button from '../../button';\nimport { Breakpoint, Typography } from '../../common';\nimport { ButtonProps } from '../../button/Button.types';\nimport { PrimitivePrompt, PrimitivePromptProps } from '../PrimitivePrompt';\nimport { useScreenSize } from '../../common/hooks/useScreenSize';\nimport { renderPromptMedia, PromptMedia } from '../helpers/promptMedia';\n\nexport type ActionPromptProps = {\n title: ReactNode;\n description?: ReactNode;\n /** @default {} */\n media?: PromptMedia;\n action: Pick<ButtonProps, 'onClick' | 'href' | 'target'> & {\n label: ButtonProps['children'];\n };\n actionSecondary?: Pick<ButtonProps, 'onClick' | 'href' | 'target'> & {\n label: ButtonProps['children'];\n };\n 'aria-label'?: AriaAttributes['aria-label'];\n} & Pick<PrimitivePromptProps, 'id' | 'className' | 'data-testid' | 'onDismiss'> & {\n /**\n * The sentiment determines the colour scheme\n * @default 'neutral'\n */\n sentiment?: PrimitivePromptProps['sentiment'];\n };\n\n/**\n * Use an action prompt for optional feedback that doesn't require immediate action, such as feature upsells, warnings, or suggestions. These prompts are typically used outside of core product flows (e.g., Launchpad, Recipient, or Transaction screens) and can be addressed at the user's convenience.\n *\n * If your message is about immediate user feedback (e.g., form submission errors, download failures, missing data warnings), use an [info prompt](https://storybook.wise.design/?path=/docs/prompts-infoprompt--docs) instead.\n *\n * Guidance can be found in the [design system](https://wise.design/components/action-prompt).\n */\nexport const ActionPrompt = ({\n sentiment = 'neutral',\n title,\n description,\n onDismiss,\n media = {},\n action,\n actionSecondary,\n id,\n className,\n 'data-testid': testId,\n 'aria-label': ariaLabel,\n}: ActionPromptProps) => {\n const isMobile = !useScreenSize(Breakpoint.MEDIUM);\n\n const mediaId = useId();\n const titleId = useId();\n const descId = useId();\n\n const ariaLabelledByIds = [\n media['aria-hidden'] ? undefined : mediaId,\n ariaLabel ? undefined : titleId,\n ]\n .filter(Boolean)\n .join(' ');\n\n const renderMedia = () =>\n renderPromptMedia({\n media,\n sentiment,\n mediaId,\n imgClassName: 'wds-action-prompt--media-image',\n });\n\n return (\n <PrimitivePrompt\n id={id}\n sentiment={sentiment}\n data-testid={testId}\n className={clsx(\n 'wds-action-prompt',\n { 'wds-action-prompt--with-two-actions': !!actionSecondary },\n className,\n )}\n media={renderMedia()}\n actions={\n <>\n {actionSecondary && (\n // @ts-expect-error onClick type mismatch\n <Button\n v2\n size=\"md\"\n priority=\"secondary\"\n href={actionSecondary.href}\n block={isMobile}\n onClick={actionSecondary?.onClick}\n >\n {actionSecondary.label}\n </Button>\n )}\n {/* @ts-expect-error onClick type mismatch */}\n <Button\n v2\n size=\"md\"\n priority=\"primary\"\n href={action.href}\n block={isMobile}\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n </>\n }\n role=\"region\"\n onDismiss={onDismiss}\n {...(ariaLabel\n ? { 'aria-label': ariaLabel }\n : {\n 'aria-labelledby': ariaLabelledByIds,\n 'aria-describedby': descId,\n })}\n >\n <div className={clsx('d-flex', 'flex-column', 'justify-content-center')}>\n <Body id={titleId} type={Typography.BODY_LARGE_BOLD} className=\"wds-action-prompt__content\">\n {title}\n </Body>\n {description && (\n <Body id={descId} className=\"wds-action-prompt__content\">\n {description}\n </Body>\n )}\n </div>\n </PrimitivePrompt>\n );\n};\n\nexport default ActionPrompt;\n"],"names":["ActionPrompt","sentiment","title","description","onDismiss","media","action","actionSecondary","id","className","testId","ariaLabel","isMobile","useScreenSize","Breakpoint","MEDIUM","mediaId","useId","titleId","descId","ariaLabelledByIds","undefined","filter","Boolean","join","renderMedia","renderPromptMedia","imgClassName","_jsx","PrimitivePrompt","clsx","actions","_jsxs","_Fragment","children","Button","v2","size","priority","href","block","onClick","label","role","Body","type","Typography","BODY_LARGE_BOLD"],"mappings":"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"}