@transferwise/components 46.165.0 → 46.165.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/Snackbar/Snackbar.js +98 -101
- package/build/Snackbar/Snackbar.js.map +1 -1
- package/build/Snackbar/Snackbar.mjs +99 -102
- package/build/Snackbar/Snackbar.mjs.map +1 -1
- package/build/Snackbar/SnackbarProvider.js +2 -6
- package/build/Snackbar/SnackbarProvider.js.map +1 -1
- package/build/Snackbar/SnackbarProvider.mjs +2 -6
- package/build/Snackbar/SnackbarProvider.mjs.map +1 -1
- package/build/index.js +0 -2
- package/build/index.js.map +1 -1
- package/build/index.mjs +0 -1
- package/build/index.mjs.map +1 -1
- package/build/types/Body/Body.d.ts +2 -2
- package/build/types/Carousel/_stories/constants.d.ts +25 -0
- package/build/types/Carousel/_stories/constants.d.ts.map +1 -1
- package/build/types/IconButton/IconButton.d.ts +1 -1
- package/build/types/ListItem/_stories/variants/helpers.d.ts +38 -1
- package/build/types/ListItem/_stories/variants/helpers.d.ts.map +1 -1
- package/build/types/MoneyInput/MoneyInput.d.ts +1 -1
- package/build/types/MoneyInput/MoneyInput.d.ts.map +1 -1
- package/build/types/Snackbar/Snackbar.d.ts +2 -16
- package/build/types/Snackbar/Snackbar.d.ts.map +1 -1
- package/build/types/Snackbar/SnackbarProvider.d.ts.map +1 -1
- package/build/types/Title/Title.d.ts +2 -2
- package/build/types/Upload/Steps/UploadImageStep/UploadImageStep.d.ts +1 -1
- package/build/types/UploadInput/UploadItem/UploadItemLink.d.ts +1 -1
- package/build/types/index.d.ts +0 -1
- package/build/types/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/Accordion/_stories/Accordion.test.story.tsx +74 -48
- package/src/AvatarLayout/_stories/AvatarLayout.test.story.tsx +46 -30
- package/src/Button/LegacyButton/_stories/LegacyButton.test.story.tsx +29 -19
- package/src/Button/_stories/Button.test.story.tsx +96 -62
- package/src/Calendar/_stories/Calendar.test.story.tsx +34 -21
- package/src/Carousel/_stories/Carousel.test.story.tsx +18 -8
- package/src/Carousel/_stories/constants.tsx +29 -4
- package/src/Checkbox/_stories/Checkbox.test.story.tsx +22 -13
- package/src/CheckboxButton/_stories/CheckboxButton.test.story.tsx +23 -14
- package/src/Chips/_stories/Chips.test.story.tsx +51 -36
- package/src/DateInput/_stories/DateInput.rtl.test.story.tsx +62 -12
- package/src/DateLookup/_stories/DateLookup.rtl.test.story.tsx +2 -2
- package/src/Decision/_stories/Decision.test.story.tsx +74 -58
- package/src/DefinitionList/_stories/DefinitionList.test.story.tsx +58 -42
- package/src/Drawer/_stories/Drawer.rtl.test.story.tsx +65 -38
- package/src/ExpressiveMoneyInput/_stories/ExpressiveMoneyInput.rtl.test.story.tsx +107 -74
- package/src/Field/_stories/Field.test.story.tsx +18 -18
- package/src/FlowNavigation/_stories/FlowNavigation.rtl.test.story.tsx +81 -51
- package/src/Header/_stories/Header.test.story.tsx +30 -18
- package/src/Info/_stories/Info.rtl.test.story.tsx +124 -50
- package/src/InputWithDisplayFormat/_stories/InputWithDisplayFormat.test.story.tsx +4 -4
- package/src/Inputs/InputGroup/_stories/InputGroup.test.story.tsx +9 -8
- package/src/Inputs/SearchInput/_stories/SearchInput.test.story.tsx +5 -3
- package/src/Inputs/SelectInput/_stories/SelectInput.rtl.test.story.tsx +108 -79
- package/src/Inputs/TextArea/_stories/TextArea.test.story.tsx +10 -10
- package/src/InstructionsList/_stories/InstructionsList.test.story.tsx +43 -16
- package/src/Label/_stories/Label.test.story.tsx +7 -7
- package/src/Link/_stories/Link.test.story.tsx +27 -13
- package/src/ListItem/_stories/ListItem.rtl.test.story.tsx +126 -6
- package/src/ListItem/_stories/variants/helpers.tsx +174 -126
- package/src/Loader/_stories/Loader.test.story.tsx +17 -10
- package/src/Modal/_stories/Modal.rtl.test.story.tsx +58 -39
- package/src/MoneyInput/_stories/MoneyInput.rtl.test.story.tsx +21 -3
- package/src/Nudge/_stories/Nudge.test.story.tsx +70 -21
- package/src/PhoneNumberInput/_stories/PhoneNumberInput.rtl.test.story.tsx +1 -1
- package/src/Popover/_stories/Popover.rtl.test.story.tsx +92 -49
- package/src/ProgressBar/_stories/ProgressBar.test.story.tsx +6 -6
- package/src/PromoCard/_stories/PromoCard.test.story.tsx +53 -29
- package/src/PromoCard/_stories/PromoCardGroup.test.story.tsx +60 -36
- package/src/Prompt/ActionPrompt/_stories/ActionPrompt.test.story.tsx +74 -38
- package/src/Prompt/CriticalBanner/_stories/CriticalBanner.test.story.tsx +68 -31
- package/src/Prompt/InfoPrompt/_stories/InfoPrompt.test.story.tsx +52 -22
- package/src/Prompt/InlinePrompt/_stories/InlinePrompt.test.story.tsx +36 -21
- package/src/Radio/_stories/Radio.test.story.tsx +60 -46
- package/src/RadioGroup/_stories/RadioGroup.test.story.tsx +70 -51
- package/src/Section/_stories/Section.test.story.tsx +30 -14
- package/src/SegmentedControl/_stories/SegmentedControl.test.story.tsx +38 -15
- package/src/SlidingPanel/_stories/SlidingPanel.rtl.test.story.tsx +58 -34
- package/src/Snackbar/Snackbar.test.tsx +16 -0
- package/src/Snackbar/Snackbar.tsx +93 -90
- package/src/Snackbar/SnackbarProvider.tsx +4 -10
- package/src/Snackbar/_stories/Snackbar.rtl.test.story.tsx +24 -12
- package/src/Stepper/_stories/Stepper.test.story.tsx +27 -9
- package/src/Switch/_stories/Switch.test.story.tsx +20 -12
- package/src/Table/_stories/Table.test.story.tsx +107 -86
- package/src/Tabs/_stories/Tabs.test.story.tsx +92 -52
- package/src/Tag/_stories/Tag.test.story.tsx +27 -16
- package/src/TextareaWithDisplayFormat/_stories/TextareaWithDisplayFormat.test.story.tsx +4 -4
- package/src/Tooltip/_stories/Tooltip.rtl.test.story.tsx +68 -25
- package/src/Typeahead/_stories/Typeahead.rtl.test.story.tsx +4 -4
- package/src/Upload/_stories/Upload.rtl.test.story.tsx +49 -26
- package/src/UploadInput/_stories/UploadInput.test.story.tsx +63 -41
- package/src/_deprecated/Alert/_stories/Alert.test.story.tsx +45 -24
- package/src/_deprecated/Card/_stories/Card.test.story.tsx +47 -23
- package/src/_deprecated/CriticalBanner/_stories/CriticalCommsBanner.test.story.tsx +21 -15
- package/src/_deprecated/InlineAlert/_stories/InlineAlert.test.story.tsx +23 -12
- package/src/_deprecated/Select/_stories/Select.rtl.test.story.tsx +78 -42
- package/src/common/BottomSheet/_stories/BottomSheet.test.story.tsx +38 -20
- package/src/common/Panel/_stories/Panel.rtl.test.story.tsx +135 -51
- package/src/index.ts +0 -1
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/react-webpack5';
|
|
2
|
-
import { userEvent,
|
|
2
|
+
import { expect, userEvent, waitFor } from 'storybook/test';
|
|
3
3
|
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
forEachColumn,
|
|
6
|
+
useRtlDiffI18n,
|
|
7
|
+
withRTLDiff,
|
|
8
|
+
} from '../../../.storybook/decorators/RtlDiffDecorator';
|
|
5
9
|
import Upload from '..';
|
|
6
10
|
|
|
7
11
|
export default {
|
|
@@ -13,30 +17,42 @@ export default {
|
|
|
13
17
|
type Story = StoryObj<typeof Upload>;
|
|
14
18
|
|
|
15
19
|
export const Sizes: Story = {
|
|
16
|
-
render: () =>
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
render: () => {
|
|
21
|
+
const i18n = useRtlDiffI18n();
|
|
22
|
+
return (
|
|
23
|
+
<>
|
|
24
|
+
<Upload usLabel={i18n.smallUpload} size="sm" />
|
|
25
|
+
<Upload usLabel={i18n.mediumUpload} size="md" />
|
|
26
|
+
<Upload usLabel={i18n.largeUpload} size="lg" />
|
|
27
|
+
</>
|
|
28
|
+
);
|
|
29
|
+
},
|
|
30
|
+
...withRTLDiff({
|
|
31
|
+
i18n: {
|
|
32
|
+
smallUpload: { en: 'Small upload', ar: 'منطقة رفع صغيرة' },
|
|
33
|
+
mediumUpload: { en: 'Medium upload', ar: 'منطقة رفع متوسطة' },
|
|
34
|
+
largeUpload: { en: 'Large upload', ar: 'منطقة رفع كبيرة' },
|
|
35
|
+
},
|
|
36
|
+
}),
|
|
24
37
|
};
|
|
25
38
|
|
|
26
39
|
export const WithError: Story = {
|
|
27
|
-
render: () =>
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
+
render: () => {
|
|
41
|
+
const i18n = useRtlDiffI18n();
|
|
42
|
+
return (
|
|
43
|
+
<Upload
|
|
44
|
+
usAccept="*"
|
|
45
|
+
usLabel={i18n.label}
|
|
46
|
+
usPlaceholder={i18n.placeholder}
|
|
47
|
+
maxSize={1}
|
|
48
|
+
size="md"
|
|
49
|
+
httpOptions={{
|
|
50
|
+
url: 'https://httpbin.org/post',
|
|
51
|
+
method: 'POST',
|
|
52
|
+
}}
|
|
53
|
+
/>
|
|
54
|
+
);
|
|
55
|
+
},
|
|
40
56
|
play: async ({ canvasElement }) => {
|
|
41
57
|
await forEachColumn(canvasElement, async (column) => {
|
|
42
58
|
const fileInput = column.querySelector<HTMLInputElement>('input[type="file"]');
|
|
@@ -45,9 +61,16 @@ export const WithError: Story = {
|
|
|
45
61
|
type: 'text/plain',
|
|
46
62
|
});
|
|
47
63
|
await userEvent.upload(fileInput, file);
|
|
48
|
-
|
|
49
|
-
|
|
64
|
+
await waitFor(
|
|
65
|
+
async () => expect(column.querySelector('.upload-error-message')).not.toBeNull(),
|
|
66
|
+
{ timeout: 3000 },
|
|
67
|
+
);
|
|
50
68
|
});
|
|
51
69
|
},
|
|
52
|
-
...withRTLDiff(
|
|
70
|
+
...withRTLDiff({
|
|
71
|
+
i18n: {
|
|
72
|
+
label: { en: 'Upload a file', ar: 'رفع ملف' },
|
|
73
|
+
placeholder: { en: 'Maximum filesize is 1B', ar: 'الحد الأقصى لحجم الملف هو ١ بايت' },
|
|
74
|
+
},
|
|
75
|
+
}),
|
|
53
76
|
};
|
|
@@ -5,7 +5,7 @@ import { Status } from '../../common';
|
|
|
5
5
|
import UploadInput, { UploadInputProps } from '../UploadInput';
|
|
6
6
|
import { UploadedFile, UploadResponse } from '../types';
|
|
7
7
|
import { userEvent } from 'storybook/test';
|
|
8
|
-
import { withRTLDiff } from '../../../.storybook/decorators/RtlDiffDecorator';
|
|
8
|
+
import { useRtlDiffI18n, withRTLDiff } from '../../../.storybook/decorators/RtlDiffDecorator';
|
|
9
9
|
|
|
10
10
|
const meta: Meta<typeof UploadInput> = {
|
|
11
11
|
title: 'Forms/UploadInput/Tests',
|
|
@@ -305,45 +305,67 @@ export const DeletingBottom: Story = {
|
|
|
305
305
|
const noOpUpload = async () => ({ id: 'upload-1' });
|
|
306
306
|
const noOpDelete = async () => {};
|
|
307
307
|
|
|
308
|
-
const mixedFiles = [
|
|
309
|
-
{ id: 'file-1', filename: 'document-front.pdf', url: '#' },
|
|
310
|
-
{ id: 'file-2', filename: 'succeeded-file.pdf', url: '#' },
|
|
311
|
-
{ id: 'file-3', filename: 'failed-file.png', status: Status.FAILED },
|
|
312
|
-
{ id: 'file-4', filename: 'valid-document.pdf', url: '#' },
|
|
313
|
-
{
|
|
314
|
-
id: 'file-5',
|
|
315
|
-
filename: 'too-large-image.png',
|
|
316
|
-
status: Status.FAILED,
|
|
317
|
-
errors: [
|
|
318
|
-
'File size exceeds the 5MB limit',
|
|
319
|
-
'Please compress the image or choose a smaller file',
|
|
320
|
-
'Supported formats: JPG, PNG under 5MB',
|
|
321
|
-
],
|
|
322
|
-
},
|
|
323
|
-
{
|
|
324
|
-
id: 'file-6',
|
|
325
|
-
filename: 'corrupted-file.pdf',
|
|
326
|
-
status: Status.FAILED,
|
|
327
|
-
error: 'File could not be processed',
|
|
328
|
-
},
|
|
329
|
-
];
|
|
330
|
-
|
|
331
308
|
export const RTLDiff: Story = {
|
|
332
|
-
render: () =>
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
309
|
+
render: () => {
|
|
310
|
+
const i18n = useRtlDiffI18n();
|
|
311
|
+
const mixedFiles = [
|
|
312
|
+
{ id: 'file-1', filename: i18n.documentFront, url: '#' },
|
|
313
|
+
{ id: 'file-2', filename: i18n.succeededFile, url: '#' },
|
|
314
|
+
{ id: 'file-3', filename: i18n.failedFile, status: Status.FAILED },
|
|
315
|
+
{ id: 'file-4', filename: i18n.validDocument, url: '#' },
|
|
316
|
+
{
|
|
317
|
+
id: 'file-5',
|
|
318
|
+
filename: i18n.tooLargeImage,
|
|
319
|
+
status: Status.FAILED,
|
|
320
|
+
errors: [i18n.sizeLimitError, i18n.compressHint, i18n.supportedFormats],
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
id: 'file-6',
|
|
324
|
+
filename: i18n.corruptedFile,
|
|
325
|
+
status: Status.FAILED,
|
|
326
|
+
error: i18n.processingError,
|
|
327
|
+
},
|
|
328
|
+
];
|
|
329
|
+
return (
|
|
330
|
+
<>
|
|
331
|
+
<UploadInput onUploadFile={noOpUpload} />
|
|
332
|
+
<UploadInput
|
|
333
|
+
files={[{ id: 'file-s', filename: i18n.singleUpload, url: '#' }]}
|
|
334
|
+
onUploadFile={noOpUpload}
|
|
335
|
+
onDeleteFile={noOpDelete}
|
|
336
|
+
/>
|
|
337
|
+
<UploadInput
|
|
338
|
+
multiple
|
|
339
|
+
files={mixedFiles}
|
|
340
|
+
onUploadFile={noOpUpload}
|
|
341
|
+
onDeleteFile={noOpDelete}
|
|
342
|
+
/>
|
|
343
|
+
</>
|
|
344
|
+
);
|
|
345
|
+
},
|
|
346
|
+
...withRTLDiff({
|
|
347
|
+
renderAs: 'iframe',
|
|
348
|
+
i18n: {
|
|
349
|
+
singleUpload: { en: 'single-upload.pdf', ar: 'تحميل-واحد.pdf' },
|
|
350
|
+
documentFront: { en: 'document-front.pdf', ar: 'مستند-الوجه-الأمامي.pdf' },
|
|
351
|
+
succeededFile: { en: 'succeeded-file.pdf', ar: 'ملف-ناجح.pdf' },
|
|
352
|
+
failedFile: { en: 'failed-file.png', ar: 'ملف-فاشل.png' },
|
|
353
|
+
validDocument: { en: 'valid-document.pdf', ar: 'مستند-صالح.pdf' },
|
|
354
|
+
tooLargeImage: { en: 'too-large-image.png', ar: 'صورة-كبيرة-جدًا.png' },
|
|
355
|
+
corruptedFile: { en: 'corrupted-file.pdf', ar: 'ملف-تالف.pdf' },
|
|
356
|
+
sizeLimitError: {
|
|
357
|
+
en: 'File size exceeds the 5MB limit',
|
|
358
|
+
ar: 'حجم الملف يتجاوز الحد الأقصى 5 ميغابايت',
|
|
359
|
+
},
|
|
360
|
+
compressHint: {
|
|
361
|
+
en: 'Please compress the image or choose a smaller file',
|
|
362
|
+
ar: 'يُرجى ضغط الصورة أو اختيار ملف أصغر',
|
|
363
|
+
},
|
|
364
|
+
supportedFormats: {
|
|
365
|
+
en: 'Supported formats: JPG, PNG under 5MB',
|
|
366
|
+
ar: 'الصيغ المدعومة: JPG وPNG بحجم أقل من 5 ميغابايت',
|
|
367
|
+
},
|
|
368
|
+
processingError: { en: 'File could not be processed', ar: 'تعذّر معالجة الملف' },
|
|
369
|
+
},
|
|
370
|
+
}),
|
|
349
371
|
};
|
|
@@ -3,7 +3,7 @@ import { Meta, StoryObj } from '@storybook/react-webpack5';
|
|
|
3
3
|
import { userEvent, within, expect, waitFor } from 'storybook/test';
|
|
4
4
|
import { Button, Field, SelectInput, Sentiment } from '../../..';
|
|
5
5
|
import Alert, { type AlertProps, AlertArrowPosition } from '../Alert';
|
|
6
|
-
import { withRTLDiff } from '../../../../.storybook/decorators/RtlDiffDecorator';
|
|
6
|
+
import { useRtlDiffI18n, withRTLDiff } from '../../../../.storybook/decorators/RtlDiffDecorator';
|
|
7
7
|
|
|
8
8
|
const meta = {
|
|
9
9
|
title: 'Prompts/Alert/Tests',
|
|
@@ -134,27 +134,48 @@ export const MultipleDynamicAlerts: Story = {
|
|
|
134
134
|
};
|
|
135
135
|
|
|
136
136
|
export const RTLDiff: Story = {
|
|
137
|
-
render: () =>
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
137
|
+
render: () => {
|
|
138
|
+
const i18n = useRtlDiffI18n();
|
|
139
|
+
return (
|
|
140
|
+
<>
|
|
141
|
+
<Alert message={i18n.basic} />
|
|
142
|
+
<Alert message={i18n.dismissible} onDismiss={() => {}} />
|
|
143
|
+
<Alert
|
|
144
|
+
title={i18n.linkActionTitle}
|
|
145
|
+
message={i18n.linkActionMessage}
|
|
146
|
+
action={{ href: '#', text: i18n.readMore }}
|
|
147
|
+
onDismiss={() => {}}
|
|
148
|
+
/>
|
|
149
|
+
<Alert
|
|
150
|
+
title={i18n.buttonActionTitle}
|
|
151
|
+
message={i18n.buttonActionMessage}
|
|
152
|
+
action={{ onClick: () => {}, text: i18n.open, as: 'button' }}
|
|
153
|
+
onDismiss={() => {}}
|
|
154
|
+
/>
|
|
155
|
+
<Alert message={i18n.arrowTopLeft} arrow={AlertArrowPosition.TOP_LEFT} />
|
|
156
|
+
<Alert message={i18n.arrowTopRight} arrow={AlertArrowPosition.TOP_RIGHT} />
|
|
157
|
+
<Alert message={i18n.arrowBottomLeft} arrow={AlertArrowPosition.BOTTOM_LEFT} />
|
|
158
|
+
<Alert message={i18n.arrowBottomRight} arrow={AlertArrowPosition.BOTTOM_RIGHT} />
|
|
159
|
+
</>
|
|
160
|
+
);
|
|
161
|
+
},
|
|
162
|
+
...withRTLDiff({
|
|
163
|
+
i18n: {
|
|
164
|
+
basic: { en: 'Basic alert without dismiss button.', ar: 'تنبيه أساسي بدون زر إغلاق.' },
|
|
165
|
+
dismissible: { en: 'Alert with dismiss button.', ar: 'تنبيه مع زر إغلاق.' },
|
|
166
|
+
linkActionTitle: { en: 'With title and link action', ar: 'مع عنوان وإجراء رابط' },
|
|
167
|
+
linkActionMessage: {
|
|
168
|
+
en: 'Alert with a link action and dismiss.',
|
|
169
|
+
ar: 'تنبيه مع إجراء رابط وزر إغلاق.',
|
|
170
|
+
},
|
|
171
|
+
readMore: { en: 'Read more', ar: 'اقرأ المزيد' },
|
|
172
|
+
buttonActionTitle: { en: 'With title and button action', ar: 'مع عنوان وإجراء زر' },
|
|
173
|
+
buttonActionMessage: { en: 'Alert with a button action.', ar: 'تنبيه مع إجراء زر.' },
|
|
174
|
+
open: { en: 'Open', ar: 'فتح' },
|
|
175
|
+
arrowTopLeft: { en: 'Arrow top left.', ar: 'سهم أعلى اليسار.' },
|
|
176
|
+
arrowTopRight: { en: 'Arrow top right.', ar: 'سهم أعلى اليمين.' },
|
|
177
|
+
arrowBottomLeft: { en: 'Arrow bottom left.', ar: 'سهم أسفل اليسار.' },
|
|
178
|
+
arrowBottomRight: { en: 'Arrow bottom right.', ar: 'سهم أسفل اليمين.' },
|
|
179
|
+
},
|
|
180
|
+
}),
|
|
160
181
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/react-webpack5';
|
|
2
2
|
import { FastFlag as FastFlagIcon } from '@transferwise/icons';
|
|
3
3
|
|
|
4
|
-
import { withRTLDiff } from '../../../../.storybook/decorators/RtlDiffDecorator';
|
|
4
|
+
import { useRtlDiffI18n, withRTLDiff } from '../../../../.storybook/decorators/RtlDiffDecorator';
|
|
5
5
|
import Card from '..';
|
|
6
6
|
|
|
7
7
|
export default {
|
|
@@ -13,26 +13,50 @@ export default {
|
|
|
13
13
|
type Story = StoryObj<typeof Card>;
|
|
14
14
|
|
|
15
15
|
export const RTLDiff: Story = {
|
|
16
|
-
render: () =>
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
title=
|
|
21
|
-
details=
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
16
|
+
render: () => {
|
|
17
|
+
const i18n = useRtlDiffI18n();
|
|
18
|
+
return (
|
|
19
|
+
<>
|
|
20
|
+
<Card title={i18n.basicTitle} details={i18n.basicDetails} />
|
|
21
|
+
<Card title={i18n.withIconTitle} details={i18n.withIconDetails} icon={<FastFlagIcon />} />
|
|
22
|
+
<Card
|
|
23
|
+
title={i18n.expandedWithIconTitle}
|
|
24
|
+
details={i18n.expandedWithIconDetails}
|
|
25
|
+
icon={<FastFlagIcon />}
|
|
26
|
+
isExpanded
|
|
27
|
+
>
|
|
28
|
+
{i18n.expandedWithIconContent}
|
|
29
|
+
</Card>
|
|
30
|
+
<Card title={i18n.expandedNoIconTitle} details={i18n.expandedNoIconDetails} isExpanded>
|
|
31
|
+
{i18n.expandedNoIconContent}
|
|
32
|
+
</Card>
|
|
33
|
+
</>
|
|
34
|
+
);
|
|
35
|
+
},
|
|
36
|
+
...withRTLDiff({
|
|
37
|
+
i18n: {
|
|
38
|
+
basicTitle: { en: 'Basic card', ar: 'بطاقة أساسية' },
|
|
39
|
+
basicDetails: { en: 'Some details about this card', ar: 'بعض التفاصيل عن هذه البطاقة' },
|
|
40
|
+
withIconTitle: { en: 'Card with icon', ar: 'بطاقة مع أيقونة' },
|
|
41
|
+
withIconDetails: {
|
|
42
|
+
en: 'Details with an icon on the side',
|
|
43
|
+
ar: 'تفاصيل مع أيقونة على الجانب',
|
|
44
|
+
},
|
|
45
|
+
expandedWithIconTitle: { en: 'Expanded card with icon', ar: 'بطاقة موسّعة مع أيقونة' },
|
|
46
|
+
expandedWithIconDetails: {
|
|
47
|
+
en: 'Expanded card showing content area',
|
|
48
|
+
ar: 'بطاقة موسّعة تُظهر منطقة المحتوى',
|
|
49
|
+
},
|
|
50
|
+
expandedWithIconContent: {
|
|
51
|
+
en: 'Expanded content with padding affected by icon presence.',
|
|
52
|
+
ar: 'محتوى موسّع بمساحة داخلية تتأثر بوجود الأيقونة.',
|
|
53
|
+
},
|
|
54
|
+
expandedNoIconTitle: { en: 'Expanded card without icon', ar: 'بطاقة موسّعة بدون أيقونة' },
|
|
55
|
+
expandedNoIconDetails: { en: 'No icon variant', ar: 'نسخة بدون أيقونة' },
|
|
56
|
+
expandedNoIconContent: {
|
|
57
|
+
en: 'Expanded content without icon padding.',
|
|
58
|
+
ar: 'محتوى موسّع بدون مساحة داخلية للأيقونة.',
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
}),
|
|
38
62
|
};
|
|
@@ -2,7 +2,7 @@ import { Meta, StoryObj } from '@storybook/react-webpack5';
|
|
|
2
2
|
|
|
3
3
|
import CriticalCommsBanner from '..';
|
|
4
4
|
import { withVariantConfig } from '../../../../.storybook/helpers';
|
|
5
|
-
import { withRTLDiff } from '../../../../.storybook/decorators/RtlDiffDecorator';
|
|
5
|
+
import { useRtlDiffI18n, withRTLDiff } from '../../../../.storybook/decorators/RtlDiffDecorator';
|
|
6
6
|
|
|
7
7
|
export default {
|
|
8
8
|
component: CriticalCommsBanner,
|
|
@@ -70,18 +70,24 @@ export const WithoutAction: Story = {
|
|
|
70
70
|
};
|
|
71
71
|
|
|
72
72
|
export const RTLDiff: Story = {
|
|
73
|
-
render: () =>
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
subtitle=
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
...withRTLDiff(
|
|
73
|
+
render: () => {
|
|
74
|
+
const i18n = useRtlDiffI18n();
|
|
75
|
+
return (
|
|
76
|
+
<>
|
|
77
|
+
<CriticalCommsBanner
|
|
78
|
+
title={i18n.title}
|
|
79
|
+
subtitle={i18n.subtitle}
|
|
80
|
+
action={{ label: i18n.actionLabel, href: 'https://wise.com' }}
|
|
81
|
+
/>
|
|
82
|
+
<CriticalCommsBanner title={i18n.title} subtitle={i18n.subtitle} />
|
|
83
|
+
</>
|
|
84
|
+
);
|
|
85
|
+
},
|
|
86
|
+
...withRTLDiff({
|
|
87
|
+
i18n: {
|
|
88
|
+
title: { en: 'Your account is overdrawn', ar: 'حسابك مكشوف' },
|
|
89
|
+
subtitle: { en: 'Add money within the next 30 days', ar: 'أضف أموالًا خلال 30 يومًا' },
|
|
90
|
+
actionLabel: { en: 'Take action', ar: 'اتخذ إجراءً' },
|
|
91
|
+
},
|
|
92
|
+
}),
|
|
87
93
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/react-webpack5';
|
|
2
2
|
|
|
3
|
-
import { withRTLDiff } from '../../../../.storybook/decorators/RtlDiffDecorator';
|
|
3
|
+
import { useRtlDiffI18n, withRTLDiff } from '../../../../.storybook/decorators/RtlDiffDecorator';
|
|
4
4
|
import InlineAlert from '..';
|
|
5
5
|
|
|
6
6
|
export default {
|
|
@@ -12,15 +12,26 @@ export default {
|
|
|
12
12
|
type Story = StoryObj<typeof InlineAlert>;
|
|
13
13
|
|
|
14
14
|
export const RTLDiff: Story = {
|
|
15
|
-
render: () =>
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
15
|
+
render: () => {
|
|
16
|
+
const i18n = useRtlDiffI18n();
|
|
17
|
+
return (
|
|
18
|
+
<>
|
|
19
|
+
<InlineAlert type="neutral">{i18n.neutral}</InlineAlert>
|
|
20
|
+
<InlineAlert type="warning">{i18n.warning}</InlineAlert>
|
|
21
|
+
<InlineAlert type="negative">{i18n.negative}</InlineAlert>
|
|
22
|
+
<InlineAlert type="positive">{i18n.positive}</InlineAlert>
|
|
23
|
+
</>
|
|
24
|
+
);
|
|
25
|
+
},
|
|
26
|
+
...withRTLDiff({
|
|
27
|
+
i18n: {
|
|
28
|
+
neutral: { en: 'Neutral alert without icon', ar: 'تنبيه عادي بدون أيقونة' },
|
|
29
|
+
warning: { en: 'Warning alert with icon', ar: 'تنبيه تحذيري مع أيقونة' },
|
|
30
|
+
negative: { en: 'Negative alert with icon', ar: 'تنبيه سلبي مع أيقونة' },
|
|
31
|
+
positive: {
|
|
32
|
+
en: 'Positive alert with icon and longer content that may wrap to multiple lines',
|
|
33
|
+
ar: 'تنبيه إيجابي مع أيقونة ومحتوى أطول قد يمتد على عدة أسطر',
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
}),
|
|
26
37
|
};
|
|
@@ -2,7 +2,7 @@ import type { Meta, StoryObj } from '@storybook/react-webpack5';
|
|
|
2
2
|
import { userEvent, within } from 'storybook/test';
|
|
3
3
|
import { Person } from '@transferwise/icons';
|
|
4
4
|
|
|
5
|
-
import { withRTLDiff } from '../../../../.storybook/decorators/RtlDiffDecorator';
|
|
5
|
+
import { useRtlDiffI18n, withRTLDiff } from '../../../../.storybook/decorators/RtlDiffDecorator';
|
|
6
6
|
import Select from '..';
|
|
7
7
|
|
|
8
8
|
export default {
|
|
@@ -13,54 +13,82 @@ export default {
|
|
|
13
13
|
|
|
14
14
|
type Story = StoryObj<typeof Select>;
|
|
15
15
|
|
|
16
|
-
const
|
|
17
|
-
{ header:
|
|
18
|
-
{ value: 'gbp', label:
|
|
19
|
-
{ value: 'eur', label:
|
|
20
|
-
{ value: 'usd', label:
|
|
16
|
+
const getOptions = (i18n: Record<string, string>) => [
|
|
17
|
+
{ header: i18n.popularHeader },
|
|
18
|
+
{ value: 'gbp', label: i18n.britishPound, currency: 'gbp', icon: <Person /> },
|
|
19
|
+
{ value: 'eur', label: i18n.euro, currency: 'eur', icon: <Person /> },
|
|
20
|
+
{ value: 'usd', label: i18n.usDollar, currency: 'usd', note: i18n.usDollarNote },
|
|
21
21
|
{ separator: true },
|
|
22
|
-
{ header:
|
|
23
|
-
{ value: 'cad', label:
|
|
24
|
-
{ value: 'aud', label:
|
|
22
|
+
{ header: i18n.otherHeader },
|
|
23
|
+
{ value: 'cad', label: i18n.canadianDollar, currency: 'cad' },
|
|
24
|
+
{ value: 'aud', label: i18n.australianDollar, currency: 'aud' },
|
|
25
25
|
];
|
|
26
26
|
|
|
27
|
-
const
|
|
27
|
+
const getSelected = (i18n: Record<string, string>) => ({
|
|
28
|
+
value: 'gbp',
|
|
29
|
+
label: i18n.britishPound,
|
|
30
|
+
currency: 'gbp',
|
|
31
|
+
icon: <Person />,
|
|
32
|
+
});
|
|
28
33
|
|
|
29
34
|
export const TriggerVariants: Story = {
|
|
30
|
-
render: () =>
|
|
31
|
-
|
|
35
|
+
render: () => {
|
|
36
|
+
const i18n = useRtlDiffI18n();
|
|
37
|
+
return (
|
|
38
|
+
<>
|
|
39
|
+
<Select
|
|
40
|
+
size="lg"
|
|
41
|
+
placeholder={i18n.placeholder}
|
|
42
|
+
selected={getSelected(i18n)}
|
|
43
|
+
options={getOptions(i18n)}
|
|
44
|
+
onChange={() => {}}
|
|
45
|
+
/>
|
|
46
|
+
<Select
|
|
47
|
+
size="md"
|
|
48
|
+
placeholder={i18n.placeholder}
|
|
49
|
+
selected={getSelected(i18n)}
|
|
50
|
+
options={getOptions(i18n)}
|
|
51
|
+
onChange={() => {}}
|
|
52
|
+
/>
|
|
53
|
+
<Select
|
|
54
|
+
size="sm"
|
|
55
|
+
placeholder={i18n.placeholder}
|
|
56
|
+
options={getOptions(i18n)}
|
|
57
|
+
onChange={() => {}}
|
|
58
|
+
/>
|
|
59
|
+
</>
|
|
60
|
+
);
|
|
61
|
+
},
|
|
62
|
+
...withRTLDiff({
|
|
63
|
+
i18n: {
|
|
64
|
+
placeholder: { en: 'Select currency', ar: 'اختر العملة' },
|
|
65
|
+
popularHeader: { en: 'Popular', ar: 'الأكثر شيوعًا' },
|
|
66
|
+
britishPound: { en: 'British pound', ar: 'الجنيه الإسترليني' },
|
|
67
|
+
euro: { en: 'Euro', ar: 'اليورو' },
|
|
68
|
+
usDollar: { en: 'US Dollar', ar: 'الدولار الأمريكي' },
|
|
69
|
+
usDollarNote: { en: 'United States dollar', ar: 'دولار الولايات المتحدة' },
|
|
70
|
+
otherHeader: { en: 'Other', ar: 'أخرى' },
|
|
71
|
+
canadianDollar: { en: 'Canadian dollar', ar: 'الدولار الكندي' },
|
|
72
|
+
australianDollar: { en: 'Australian dollar', ar: 'الدولار الأسترالي' },
|
|
73
|
+
},
|
|
74
|
+
}),
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
export const OpenDropdown: Story = {
|
|
78
|
+
render: () => {
|
|
79
|
+
const i18n = useRtlDiffI18n();
|
|
80
|
+
return (
|
|
32
81
|
<Select
|
|
33
82
|
size="lg"
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
83
|
+
search
|
|
84
|
+
searchPlaceholder={i18n.searchPlaceholder}
|
|
85
|
+
placeholder={i18n.placeholder}
|
|
86
|
+
selected={getSelected(i18n)}
|
|
87
|
+
options={getOptions(i18n)}
|
|
37
88
|
onChange={() => {}}
|
|
38
89
|
/>
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
placeholder="Select currency"
|
|
42
|
-
selected={selected}
|
|
43
|
-
options={options}
|
|
44
|
-
onChange={() => {}}
|
|
45
|
-
/>
|
|
46
|
-
<Select size="sm" placeholder="Select currency" options={options} onChange={() => {}} />
|
|
47
|
-
</>
|
|
48
|
-
),
|
|
49
|
-
...withRTLDiff(),
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
export const OpenDropdown: Story = {
|
|
53
|
-
render: () => (
|
|
54
|
-
<Select
|
|
55
|
-
size="lg"
|
|
56
|
-
search
|
|
57
|
-
searchPlaceholder="Type a currency"
|
|
58
|
-
placeholder="Select currency"
|
|
59
|
-
selected={selected}
|
|
60
|
-
options={options}
|
|
61
|
-
onChange={() => {}}
|
|
62
|
-
/>
|
|
63
|
-
),
|
|
90
|
+
);
|
|
91
|
+
},
|
|
64
92
|
play: async ({ canvasElement }) => {
|
|
65
93
|
const canvas = within(canvasElement);
|
|
66
94
|
const trigger = canvas.queryByRole('button');
|
|
@@ -71,8 +99,16 @@ export const OpenDropdown: Story = {
|
|
|
71
99
|
renderAs: 'iframe',
|
|
72
100
|
width: '80%',
|
|
73
101
|
i18n: {
|
|
74
|
-
searchPlaceholder: {
|
|
75
|
-
placeholder: {
|
|
102
|
+
searchPlaceholder: { en: 'Type a currency', ar: 'اكتب عملة' },
|
|
103
|
+
placeholder: { en: 'Select currency', ar: 'اختر العملة' },
|
|
104
|
+
popularHeader: { en: 'Popular', ar: 'الأكثر شيوعًا' },
|
|
105
|
+
britishPound: { en: 'British pound', ar: 'الجنيه الإسترليني' },
|
|
106
|
+
euro: { en: 'Euro', ar: 'اليورو' },
|
|
107
|
+
usDollar: { en: 'US Dollar', ar: 'الدولار الأمريكي' },
|
|
108
|
+
usDollarNote: { en: 'United States dollar', ar: 'دولار الولايات المتحدة' },
|
|
109
|
+
otherHeader: { en: 'Other', ar: 'أخرى' },
|
|
110
|
+
canadianDollar: { en: 'Canadian dollar', ar: 'الدولار الكندي' },
|
|
111
|
+
australianDollar: { en: 'Australian dollar', ar: 'الدولار الأسترالي' },
|
|
76
112
|
},
|
|
77
113
|
}),
|
|
78
114
|
};
|