@transferwise/components 0.0.0-experimental-11565f2 → 0.0.0-experimental-d0addc4

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.
@@ -1,425 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/react-webpack5';
2
- import { MultiCurrency } from '@transferwise/icons';
3
- import { lorem20, storyConfig } from '../../test-utils';
4
- import Link from '../../link';
5
- import List from '../../list';
6
- import { ListItem, type ListItemProps } from '../ListItem';
7
- import {
8
- SB_LIST_ITEM_ADDITIONAL_INFO as ADDITIONAL_INFO,
9
- SB_LIST_ITEM_CONTROLS as CONTROLS,
10
- SB_LIST_ITEM_PROMPTS as PROMPTS,
11
- type SB_ListItem_ControlType as ControlType,
12
- } from './subcomponents';
13
-
14
- export default {
15
- component: ListItem,
16
- title: 'Content/ListItem/tests/variants',
17
- tags: ['!autodocs'],
18
- parameters: {
19
- controls: { disable: true },
20
- actions: { disable: true },
21
- knobs: { disable: true },
22
- },
23
- } satisfies Meta<ListItemProps>;
24
-
25
- type Story = StoryObj<ListItemProps>;
26
- type VariantPartial = { title: string } & Partial<ListItemProps>;
27
-
28
- const title = 'This is a title';
29
- const longTitle = `This is a long title. ${lorem20}`;
30
- const subtitle = 'And it also has a subtitle';
31
- const longSubtitle = `And it also has a long subtitle. ${lorem20}`;
32
- const infoWithoutLink = (
33
- <ListItem.AdditionalInfo>Which is augmented with additional info.</ListItem.AdditionalInfo>
34
- );
35
- const infoWithLink = (
36
- <ListItem.AdditionalInfo
37
- action={{
38
- label: 'Details about the subject.',
39
- href: 'https://wise.com',
40
- target: '_blank',
41
- }}
42
- >
43
- Which is augmented with additional info.
44
- </ListItem.AdditionalInfo>
45
- );
46
-
47
- const valueTitle = '100 GBP';
48
- const longValueTitle = <>This value title<br/>spans across<br/>multiple lines</>;
49
- const valueSubtitle = '200 USD';
50
- const prompt = <ListItem.Prompt sentiment="positive">Finally, there is a prompt.</ListItem.Prompt>;
51
- const promptWithLink = (
52
- <ListItem.Prompt sentiment="positive">
53
- Finally, there is a prompt{' '}
54
- <Link href="https://wise.com" target="_blank" rel="noreferrer">
55
- referencing some details
56
- </Link>{' '}
57
- for your convenience.
58
- </ListItem.Prompt>
59
- );
60
- const media = (
61
- <ListItem.AvatarView>
62
- <MultiCurrency />
63
- </ListItem.AvatarView>
64
- );
65
-
66
- const generateVariantsForControl = (controlType: ControlType, width?: number): Story => {
67
- const control = CONTROLS[controlType];
68
- const isInteractive = [
69
- 'partialButton',
70
- 'partialButtonAsLink',
71
- 'partialIconButton',
72
- 'partialIconButtonAsLink',
73
- ].includes(controlType);
74
- const additionalInfo = isInteractive ? infoWithLink : infoWithoutLink;
75
- const variants = [
76
- { title },
77
- { title: longTitle },
78
- { title, valueTitle },
79
- { title, valueTitle: longValueTitle },
80
- { title: longTitle, valueTitle },
81
- { title, subtitle },
82
- { title, subtitle: longSubtitle },
83
- { title, additionalInfo },
84
- { title, valueTitle, valueSubtitle },
85
- { title, valueTitle: longValueTitle, valueSubtitle },
86
- { title, subtitle, inverted: true },
87
- { title, subtitle, valueTitle },
88
- { title, subtitle, valueTitle, inverted: true },
89
- { title, subtitle, valueTitle, valueSubtitle },
90
- { title, subtitle, valueTitle, valueSubtitle, inverted: true },
91
- { media, title },
92
- { media, title: longTitle },
93
- { media, title, valueTitle },
94
- { media, title: longTitle, valueTitle },
95
- { media, title, valueTitle: longValueTitle },
96
- { media, title, subtitle },
97
- { media, title: longTitle, subtitle },
98
- { media, title, valueTitle, valueSubtitle },
99
- { media, title, valueTitle },
100
- { media, title, valueSubtitle },
101
- { media, title, subtitle },
102
- { media, title, additionalInfo },
103
- { media, title, subtitle, valueTitle },
104
- { media, title, subtitle, valueTitle, valueSubtitle },
105
- { media, title, subtitle, additionalInfo: infoWithoutLink },
106
- isInteractive ? { media, title, subtitle, additionalInfo: infoWithLink } : null,
107
- { media, title, subtitle, additionalInfo, valueTitle },
108
- { media, title, subtitle, additionalInfo, valueTitle, valueSubtitle },
109
- { media, title, subtitle, additionalInfo, valueTitle, valueSubtitle, prompt },
110
- {
111
- media,
112
- title,
113
- subtitle,
114
- additionalInfo,
115
- valueTitle,
116
- valueSubtitle,
117
- prompt: promptWithLink,
118
- },
119
- {
120
- media,
121
- title,
122
- subtitle,
123
- additionalInfo,
124
- valueTitle,
125
- valueSubtitle,
126
- prompt: promptWithLink,
127
- inverted: true,
128
- },
129
- {
130
- media,
131
- title,
132
- subtitle,
133
- additionalInfo,
134
- valueTitle,
135
- valueSubtitle,
136
- prompt: promptWithLink,
137
- spotlight: 'active',
138
- },
139
- {
140
- media,
141
- title,
142
- subtitle,
143
- additionalInfo,
144
- valueTitle,
145
- valueSubtitle,
146
- prompt: promptWithLink,
147
- spotlight: 'inactive',
148
- },
149
- {
150
- media,
151
- title,
152
- subtitle,
153
- additionalInfo,
154
- valueTitle,
155
- valueSubtitle,
156
- prompt: promptWithLink,
157
- spotlight: 'inactive',
158
- disabled: true,
159
- },
160
- ].filter(Boolean) as VariantPartial[];
161
-
162
- const listContent = (
163
- <List>
164
- {variants.map((variant, variantIndex) => (
165
- <ListItem
166
- key={`${controlType}-${variantIndex}-${Math.random()}`}
167
- control={control}
168
- {...variant}
169
- />
170
- ))}
171
- </List>
172
- );
173
-
174
- return storyConfig(
175
- {
176
- render: () =>
177
- width ? (
178
- <div style={{ width: `${width}px`, border: '1px dashed #ccc', padding: '8px' }}>
179
- {listContent}
180
- </div>
181
- ) : (
182
- listContent
183
- ),
184
- },
185
- { variants: ['default', 'dark', 'bright-green', 'forest-green'] },
186
- );
187
- };
188
-
189
- export const Button = generateVariantsForControl('button');
190
- export const ButtonAsLink = generateVariantsForControl('buttonAsLink');
191
- export const ButtonPartiallyInteractive = generateVariantsForControl('partialButton');
192
- export const ButtonAsLinkPartiallyInteractive = generateVariantsForControl('partialButtonAsLink');
193
- export const IconButton = generateVariantsForControl('iconButton');
194
- export const IconButtonAsLink = generateVariantsForControl('iconButtonAsLink');
195
- export const IconButtonWithLabel = generateVariantsForControl('iconButtonWithLabel');
196
- export const IconButtonAsLinkWithLabel = generateVariantsForControl('iconButtonAsLinkWithLabel');
197
- export const IconButtonPartiallyInteractive = generateVariantsForControl('partialIconButton');
198
- export const IconButtonAsLinkPartiallyInteractive =
199
- generateVariantsForControl('partialIconButtonAsLink');
200
- export const Navigation = generateVariantsForControl('navigation');
201
- export const NavigationAsButton = generateVariantsForControl('navigationAsButton');
202
- export const Checkbox = generateVariantsForControl('checkbox');
203
- export const Radio = generateVariantsForControl('radio');
204
- export const Switch = generateVariantsForControl('switch');
205
- export const NonInteractive = generateVariantsForControl('non-interactive');
206
-
207
- export const Button350px = {
208
- ...generateVariantsForControl('button', 350),
209
- name: 'Button (350px)',
210
- };
211
- export const ButtonAsLink350px = {
212
- ...generateVariantsForControl('buttonAsLink', 350),
213
- name: 'Button As Link (350px)',
214
- };
215
- export const ButtonPartiallyInteractive350px = {
216
- ...generateVariantsForControl('partialButton', 350),
217
- name: 'Button Partially Interactive (350px)',
218
- };
219
- export const ButtonAsLinkPartiallyInteractive350px = {
220
- ...generateVariantsForControl('partialButtonAsLink', 350),
221
- name: 'Button As Link Partially Interactive (350px)',
222
- };
223
- export const IconButton350px = {
224
- ...generateVariantsForControl('iconButton', 350),
225
- name: 'Icon Button (350px)',
226
- };
227
- export const IconButtonAsLink350px = {
228
- ...generateVariantsForControl('iconButtonAsLink', 350),
229
- name: 'Icon Button As Link (350px)',
230
- };
231
- export const IconButtonWithLabel350px = {
232
- ...generateVariantsForControl('iconButtonWithLabel', 350),
233
- name: 'Icon Button With Label (350px)',
234
- };
235
- export const IconButtonAsLinkWithLabel350px = {
236
- ...generateVariantsForControl('iconButtonAsLinkWithLabel', 350),
237
- name: 'Icon Button As Link With Label (350px)',
238
- };
239
- export const IconButtonPartiallyInteractive350px = {
240
- ...generateVariantsForControl('partialIconButton', 350),
241
- name: 'Icon Button Partially Interactive (350px)',
242
- };
243
- export const IconButtonAsLinkPartiallyInteractive350px = {
244
- ...generateVariantsForControl('partialIconButtonAsLink', 350),
245
- name: 'Icon Button As Link Partially Interactive (350px)',
246
- };
247
- export const Navigation350px = {
248
- ...generateVariantsForControl('navigation', 350),
249
- name: 'Navigation (350px)',
250
- };
251
- export const NavigationAsButton350px = {
252
- ...generateVariantsForControl('navigationAsButton', 350),
253
- name: 'Navigation As Button (350px)',
254
- };
255
- export const Checkbox350px = {
256
- ...generateVariantsForControl('checkbox', 350),
257
- name: 'Checkbox (350px)',
258
- };
259
- export const Radio350px = {
260
- ...generateVariantsForControl('radio', 350),
261
- name: 'Radio (350px)',
262
- };
263
- export const Switch350px = {
264
- ...generateVariantsForControl('switch', 350),
265
- name: 'Switch (350px)',
266
- };
267
- export const NonInteractive350px = {
268
- ...generateVariantsForControl('non-interactive', 350),
269
- name: 'Non Interactive (350px)',
270
- };
271
-
272
- export const Button275px = {
273
- ...generateVariantsForControl('button', 275),
274
- name: 'Button (275px)',
275
- };
276
- export const ButtonAsLink275px = {
277
- ...generateVariantsForControl('buttonAsLink', 275),
278
- name: 'Button As Link (275px)',
279
- };
280
- export const ButtonPartiallyInteractive275px = {
281
- ...generateVariantsForControl('partialButton', 275),
282
- name: 'Button Partially Interactive (275px)',
283
- };
284
- export const ButtonAsLinkPartiallyInteractive275px = {
285
- ...generateVariantsForControl('partialButtonAsLink', 275),
286
- name: 'Button As Link Partially Interactive (275px)',
287
- };
288
- export const IconButton275px = {
289
- ...generateVariantsForControl('iconButton', 275),
290
- name: 'Icon Button (275px)',
291
- };
292
- export const IconButtonAsLink275px = {
293
- ...generateVariantsForControl('iconButtonAsLink', 275),
294
- name: 'Icon Button As Link (275px)',
295
- };
296
- export const IconButtonWithLabel275px = {
297
- ...generateVariantsForControl('iconButtonWithLabel', 275),
298
- name: 'Icon Button With Label (275px)',
299
- };
300
- export const IconButtonAsLinkWithLabel275px = {
301
- ...generateVariantsForControl('iconButtonAsLinkWithLabel', 275),
302
- name: 'Icon Button As Link With Label (275px)',
303
- };
304
- export const IconButtonPartiallyInteractive275px = {
305
- ...generateVariantsForControl('partialIconButton', 275),
306
- name: 'Icon Button Partially Interactive (275px)',
307
- };
308
- export const IconButtonAsLinkPartiallyInteractive275px = {
309
- ...generateVariantsForControl('partialIconButtonAsLink', 275),
310
- name: 'Icon Button As Link Partially Interactive (275px)',
311
- };
312
- export const Navigation275px = {
313
- ...generateVariantsForControl('navigation', 275),
314
- name: 'Navigation (275px)',
315
- };
316
- export const NavigationAsButton275px = {
317
- ...generateVariantsForControl('navigationAsButton', 275),
318
- name: 'Navigation As Button (275px)',
319
- };
320
- export const Checkbox275px = {
321
- ...generateVariantsForControl('checkbox', 275),
322
- name: 'Checkbox (275px)',
323
- };
324
- export const Radio275px = {
325
- ...generateVariantsForControl('radio', 275),
326
- name: 'Radio (275px)',
327
- };
328
- export const Switch275px = {
329
- ...generateVariantsForControl('switch', 275),
330
- name: 'Switch (275px)',
331
- };
332
- export const NonInteractive275px = {
333
- ...generateVariantsForControl('non-interactive', 275),
334
- name: 'Non Interactive (275px)',
335
- };
336
-
337
- export const ButtonControlLabel: Story = {
338
- render: () => (
339
- <List>
340
- <ListItem
341
- title="Fully interactive button."
342
- subtitle="It uses default content hierarchy."
343
- valueTitle="100 GBP"
344
- valueSubtitle="200 USD"
345
- additionalInfo={ADDITIONAL_INFO.nonInteractive}
346
- control={CONTROLS.button}
347
- prompt={PROMPTS.nonInteractive}
348
- />
349
-
350
- <ListItem
351
- inverted
352
- title="Fully interactive button."
353
- subtitle="It uses inverted content hierarchy."
354
- valueTitle="100 GBP"
355
- valueSubtitle="200 USD"
356
- additionalInfo={ADDITIONAL_INFO.nonInteractive}
357
- control={CONTROLS.button}
358
- prompt={PROMPTS.nonInteractive}
359
- />
360
-
361
- <ListItem
362
- title="Fully interactive button as HTML anchor."
363
- subtitle="It uses default content hierarchy."
364
- valueTitle="100 GBP"
365
- valueSubtitle="200 USD"
366
- additionalInfo={ADDITIONAL_INFO.nonInteractive}
367
- control={CONTROLS.buttonAsLink}
368
- prompt={PROMPTS.nonInteractive}
369
- />
370
-
371
- <ListItem
372
- inverted
373
- title="Fully interactive button as HTML anchor."
374
- subtitle="It uses inverted content hierarchy."
375
- valueTitle="100 GBP"
376
- valueSubtitle="200 USD"
377
- additionalInfo={ADDITIONAL_INFO.nonInteractive}
378
- control={CONTROLS.buttonAsLink}
379
- prompt={PROMPTS.nonInteractive}
380
- />
381
-
382
- <ListItem
383
- title="Partially interactive button."
384
- subtitle="It uses default content hierarchy."
385
- valueTitle="100 GBP"
386
- valueSubtitle="200 USD"
387
- additionalInfo={ADDITIONAL_INFO.nonInteractive}
388
- control={CONTROLS.partialButton}
389
- prompt={PROMPTS.nonInteractive}
390
- />
391
-
392
- <ListItem
393
- inverted
394
- title="Partially interactive button."
395
- subtitle="It uses inverted content hierarchy."
396
- valueTitle="100 GBP"
397
- valueSubtitle="200 USD"
398
- additionalInfo={ADDITIONAL_INFO.nonInteractive}
399
- control={CONTROLS.partialButton}
400
- prompt={PROMPTS.nonInteractive}
401
- />
402
-
403
- <ListItem
404
- title="Partially interactive button as HTML anchor."
405
- subtitle="It uses default content hierarchy."
406
- valueTitle="100 GBP"
407
- valueSubtitle="200 USD"
408
- additionalInfo={ADDITIONAL_INFO.nonInteractive}
409
- control={CONTROLS.buttonAsLink}
410
- prompt={PROMPTS.nonInteractive}
411
- />
412
-
413
- <ListItem
414
- inverted
415
- title="Partially interactive button as HTML anchor."
416
- subtitle="It uses inverted content hierarchy."
417
- valueTitle="100 GBP"
418
- valueSubtitle="200 USD"
419
- additionalInfo={ADDITIONAL_INFO.nonInteractive}
420
- control={CONTROLS.buttonAsLink}
421
- prompt={PROMPTS.nonInteractive}
422
- />
423
- </List>
424
- ),
425
- };