@transferwise/components 0.0.0-experimental-6fa7ff3 → 0.0.0-experimental-1775875

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 (112) hide show
  1. package/build/avatarLayout/AvatarLayout.js +2 -9
  2. package/build/avatarLayout/AvatarLayout.js.map +1 -1
  3. package/build/avatarLayout/AvatarLayout.mjs +2 -9
  4. package/build/avatarLayout/AvatarLayout.mjs.map +1 -1
  5. package/build/button/Button.js +79 -78
  6. package/build/button/Button.js.map +1 -1
  7. package/build/button/Button.mjs +80 -79
  8. package/build/button/Button.mjs.map +1 -1
  9. package/build/criticalBanner/CriticalCommsBanner.js +2 -2
  10. package/build/criticalBanner/CriticalCommsBanner.js.map +1 -1
  11. package/build/criticalBanner/CriticalCommsBanner.mjs +1 -1
  12. package/build/header/Header.js +2 -2
  13. package/build/header/Header.js.map +1 -1
  14. package/build/header/Header.mjs +1 -1
  15. package/build/index.js +2 -2
  16. package/build/index.mjs +1 -1
  17. package/build/link/Link.js +3 -8
  18. package/build/link/Link.js.map +1 -1
  19. package/build/link/Link.mjs +3 -8
  20. package/build/link/Link.mjs.map +1 -1
  21. package/build/main.css +0 -258
  22. package/build/primitives/PrimitiveAnchor/src/PrimitiveAnchor.js +3 -1
  23. package/build/primitives/PrimitiveAnchor/src/PrimitiveAnchor.js.map +1 -1
  24. package/build/primitives/PrimitiveAnchor/src/PrimitiveAnchor.mjs +3 -1
  25. package/build/primitives/PrimitiveAnchor/src/PrimitiveAnchor.mjs.map +1 -1
  26. package/build/primitives/PrimitiveButton/src/PrimitiveButton.js +4 -1
  27. package/build/primitives/PrimitiveButton/src/PrimitiveButton.js.map +1 -1
  28. package/build/primitives/PrimitiveButton/src/PrimitiveButton.mjs +4 -1
  29. package/build/primitives/PrimitiveButton/src/PrimitiveButton.mjs.map +1 -1
  30. package/build/select/Select.js +3 -5
  31. package/build/select/Select.js.map +1 -1
  32. package/build/select/Select.mjs +2 -4
  33. package/build/select/Select.mjs.map +1 -1
  34. package/build/styles/avatarLayout/AvatarLayout.css +0 -11
  35. package/build/styles/button/Button.css +16 -240
  36. package/build/styles/main.css +0 -258
  37. package/build/types/avatarLayout/AvatarLayout.d.ts +2 -1
  38. package/build/types/avatarLayout/AvatarLayout.d.ts.map +1 -1
  39. package/build/types/avatarLayout/index.d.ts +0 -1
  40. package/build/types/avatarLayout/index.d.ts.map +1 -1
  41. package/build/types/button/Button.d.ts +23 -1
  42. package/build/types/button/Button.d.ts.map +1 -1
  43. package/build/types/button/index.d.ts +2 -2
  44. package/build/types/button/index.d.ts.map +1 -1
  45. package/build/types/link/Link.d.ts +2 -2
  46. package/build/types/link/Link.d.ts.map +1 -1
  47. package/build/types/primitives/PrimitiveAnchor/src/PrimitiveAnchor.d.ts.map +1 -1
  48. package/build/types/primitives/PrimitiveAnchor/src/PrimitiveAnchor.types.d.ts +1 -5
  49. package/build/types/primitives/PrimitiveAnchor/src/PrimitiveAnchor.types.d.ts.map +1 -1
  50. package/build/types/primitives/PrimitiveButton/src/PrimitiveButton.d.ts.map +1 -1
  51. package/build/types/select/Select.d.ts.map +1 -1
  52. package/build/upload/steps/completeStep/completeStep.js +2 -2
  53. package/build/upload/steps/completeStep/completeStep.js.map +1 -1
  54. package/build/upload/steps/completeStep/completeStep.mjs +1 -1
  55. package/build/upload/steps/processingStep/processingStep.js +2 -2
  56. package/build/upload/steps/processingStep/processingStep.js.map +1 -1
  57. package/build/upload/steps/processingStep/processingStep.mjs +1 -1
  58. package/build/uploadInput/UploadInput.js +3 -3
  59. package/build/uploadInput/UploadInput.js.map +1 -1
  60. package/build/uploadInput/UploadInput.mjs +1 -1
  61. package/package.json +4 -4
  62. package/src/avatarLayout/AvatarLayout.css +0 -11
  63. package/src/avatarLayout/AvatarLayout.less +1 -18
  64. package/src/avatarLayout/AvatarLayout.tsx +3 -11
  65. package/src/avatarLayout/index.ts +0 -1
  66. package/src/button/Button.css +16 -240
  67. package/src/button/Button.less +14 -208
  68. package/src/button/Button.spec.tsx +231 -54
  69. package/src/button/Button.story.tsx +137 -612
  70. package/src/button/Button.tsx +132 -88
  71. package/src/button/__snapshots__/Button.spec.tsx.snap +309 -0
  72. package/src/button/index.ts +3 -2
  73. package/src/drawer/Drawer.spec.tsx +93 -0
  74. package/src/flowNavigation/__snapshots__/FlowNavigation.spec.js.snap +1 -1
  75. package/src/inputs/SelectInput.story.tsx +1 -1
  76. package/src/link/Link.tsx +6 -15
  77. package/src/main.css +0 -258
  78. package/src/main.less +0 -1
  79. package/src/primitives/PrimitiveAnchor/src/PrimitiveAnchor.tsx +7 -1
  80. package/src/primitives/PrimitiveAnchor/src/PrimitiveAnchor.types.ts +1 -6
  81. package/src/primitives/PrimitiveAnchor/test/PrimitiveAnchor.spec.tsx +3 -1
  82. package/src/primitives/PrimitiveButton/src/PrimitiveButton.tsx +8 -1
  83. package/src/primitives/PrimitiveButton/test/PrimitiveButton.spec.tsx +5 -2
  84. package/src/select/Select.tsx +0 -1
  85. package/build/button/Button.resolver.js +0 -78
  86. package/build/button/Button.resolver.js.map +0 -1
  87. package/build/button/Button.resolver.mjs +0 -76
  88. package/build/button/Button.resolver.mjs.map +0 -1
  89. package/build/button/LegacyButton.js +0 -114
  90. package/build/button/LegacyButton.js.map +0 -1
  91. package/build/button/LegacyButton.mjs +0 -112
  92. package/build/button/LegacyButton.mjs.map +0 -1
  93. package/build/styles/button/Button.vars.css +0 -55
  94. package/build/styles/button/LegacyButton.css +0 -23
  95. package/build/types/button/Button.resolver.d.ts +0 -31
  96. package/build/types/button/Button.resolver.d.ts.map +0 -1
  97. package/build/types/button/Button.types.d.ts +0 -65
  98. package/build/types/button/Button.types.d.ts.map +0 -1
  99. package/build/types/button/LegacyButton.d.ts +0 -30
  100. package/build/types/button/LegacyButton.d.ts.map +0 -1
  101. package/src/button/Button.resolver.tsx +0 -120
  102. package/src/button/Button.types.ts +0 -86
  103. package/src/button/Button.vars.css +0 -55
  104. package/src/button/Button.vars.less +0 -69
  105. package/src/button/LegacyButton.css +0 -23
  106. package/src/button/LegacyButton.less +0 -24
  107. package/src/button/LegacyButton.spec.tsx +0 -146
  108. package/src/button/LegacyButton.story.tsx +0 -224
  109. package/src/button/LegacyButton.tsx +0 -161
  110. package/src/drawer/Drawer.rtl.spec.tsx +0 -59
  111. package/src/drawer/Drawer.spec.js +0 -101
  112. package/src/drawer/__snapshots__/Drawer.rtl.spec.tsx.snap +0 -55
@@ -1,86 +0,0 @@
1
- import { ReactNode } from 'react';
2
- import type {
3
- PrimitiveButtonProps,
4
- PrimitiveAnchorProps,
5
- PrimitiveButtonElementRef,
6
- PrimitiveAnchorElementRef,
7
- } from '../primitives';
8
- import type { SingleAvatarType } from '../avatarLayout';
9
-
10
- export type ButtonSentiment = 'default' | 'negative';
11
- export type ButtonPriority = 'primary' | 'secondary' | 'tertiary' | 'minimal';
12
- export type ButtonType = 'button' | 'submit' | 'reset';
13
- export type ButtonSize = 'sm' | 'md' | 'lg';
14
- export type ButtonRefType = PrimitiveButtonElementRef | PrimitiveAnchorElementRef;
15
-
16
- /**
17
- * Common properties for the Button component.
18
- */
19
- export interface CommonButtonProps {
20
- /**
21
- * If set, toggles the new Button API
22
- * @default false
23
- * */
24
- v2?: boolean;
25
-
26
- /**
27
- * The HTML element to render
28
- * @default 'button'
29
- **/
30
- as?: 'button' | 'a' | null;
31
-
32
- /** Additional class name(s) to apply to the button */
33
- className?: string;
34
-
35
- /**
36
- * @default false
37
- **/
38
- disabled?: boolean;
39
-
40
- href?: string;
41
-
42
- /**
43
- * @default false
44
- * */
45
- loading?: boolean;
46
-
47
- /** Whether the button should take up the full width of its container */
48
- block?: boolean;
49
-
50
- /**
51
- * Size of the button
52
- * @default lg
53
- * */
54
- size?: ButtonSize;
55
-
56
- /**
57
- * Priority of the button
58
- * @default "primary"
59
- */
60
- priority?: ButtonPriority;
61
-
62
- /**
63
- * Sentiment of the button
64
- * @default default
65
- */
66
- sentiment?: ButtonSentiment;
67
-
68
- /** Icon to be displayed on the left side of the button */
69
- iconStart?: React.ElementType;
70
-
71
- /** Icon to be displayed on the right side of the button */
72
- iconEnd?: React.ElementType;
73
-
74
- /** Media to be displayed on the left side of the button */
75
- avatars?: SingleAvatarType[];
76
-
77
- /** Optional property to provide component Ref */
78
- ref?: ButtonRefType;
79
-
80
- /** Content to be displayed inside the button */
81
- children?: ReactNode;
82
- }
83
-
84
- export type ButtonElementProps = PrimitiveButtonProps & CommonButtonProps;
85
- export type AnchorElementProps = PrimitiveAnchorProps & CommonButtonProps;
86
- export type ButtonProps = ButtonElementProps | AnchorElementProps;
@@ -1,55 +0,0 @@
1
- :root {
2
- --Button-background: var(--color-interactive-accent);
3
- --Button-background-hover: var(--color-interactive-accent-hover);
4
- --Button-background-active: var(--color-interactive-accent-active);
5
- --Button-color: var(--color-interactive-control);
6
- --Button-padding: var(--size-8) var(--size-12);
7
- --Button-border-radius: var(--radius-full);
8
- --Button-size-small-padding: 5px var(--size-12);
9
- --Button-size-medium-padding: var(--size-8) var(--size-12);
10
- --Button-size-large-padding: var(--size-12) var(--size-16);
11
- --Button-avatar-border-color: var(--color-border-neutral);
12
- --Button-transition-duration: 150ms;
13
- --Button-transition-easing: ease-in-out;
14
- --Button-secondary-background: var(--color-interactive-neutral);
15
- --Button-secondary-background-hover: var(--color-interactive-neutral-hover);
16
- --Button-secondary-background-active: var(--color-interactive-neutral-active);
17
- --Button-secondary-color: var(--color-interactive-primary);
18
- --Button-tertiary-background: var(--color-background-neutral);
19
- --Button-tertiary-background-hover: var(--color-background-neutral-hover);
20
- --Button-tertiary-background-active: var(--color-background-neutral-active);
21
- --Button-tertiary-color: var(--color-content-primary);
22
- --Button-minimal-background: transparent;
23
- --Button-minimal-background-hover: var(--color-background-screen-hover);
24
- --Button-minimal-background-active: var(--color-background-screen-active);
25
- --Button-minimal-color: var(--color-interactive-primary);
26
- --Button-primary-negative-background: var(--color-sentiment-negative-primary);
27
- --Button-primary-negative-background-hover: var(--color-sentiment-negative-primary-hover);
28
- --Button-primary-negative-background-active: var(--color-sentiment-negative-primary-active);
29
- --Button-primary-negative-color: var(--color-contrast);
30
- --Button-primary-netative-avatar-border-color: rgba(255,255,255,0.2);
31
- --Button-secondary-negative-background: var(--color-sentiment-negative-secondary);
32
- --Button-secondary-negative-background-hover: var(--color-sentiment-negative-secondary-hover);
33
- --Button-secondary-negative-background-active: var(--color-sentiment-negative-secondary-active);
34
- --Button-secondary-negative-color: var(--color-sentiment-negative-primary);
35
- --Button-secondary-netative-avatar-border-color: rgba(168,32,13,0.12157);
36
- }
37
- .np-theme-personal--dark .wds-Button {
38
- --Button-primary-netative-avatar-border-color: rgba(14,15,12,0.12157);
39
- }
40
- .np-theme-personal--forest-green .wds-Button {
41
- --color-interactive-neutral: rgba(159,232,112,0.2);
42
- --color-interactive-neutral-hover: rgba(205,255,173,0.2);
43
- --color-interactive-neutral-active: rgba(236,255,224,0.2);
44
- --color-sentiment-negative-secondary: rgba(255,196,194,0.2);
45
- --color-sentiment-negative-secondary-hover: rgba(255,220,219,0.2);
46
- --color-sentiment-negative-secondary-active: rgba(255,235,235,0.2);
47
- --Button-primary-netative-avatar-border-color: rgba(14,15,12,0.12157);
48
- --Button-secondary-netative-avatar-border-color: rgba(14,15,12,0.12157);
49
- }
50
- .np-theme-personal--bright-green .wds-Button {
51
- --color-contrast: #FFFFFF;
52
- --Button-secondary-color: var(--color-interactive-control);
53
- --Button-secondary-negative-color: var(--color-contrast);
54
- --Button-secondary-netative-avatar-border-color: var(--Button-primary-netative-avatar-border-color);
55
- }
@@ -1,69 +0,0 @@
1
- :root {
2
- --Button-background: var(--color-interactive-accent);
3
- --Button-background-hover: var(--color-interactive-accent-hover);
4
- --Button-background-active: var(--color-interactive-accent-active);
5
- --Button-color: var(--color-interactive-control);
6
- --Button-padding: var(--size-8) var(--size-12);
7
- --Button-border-radius: var(--radius-full);
8
- --Button-size-small-padding: 5px var(--size-12);
9
- --Button-size-medium-padding: var(--size-8) var(--size-12);
10
- --Button-size-large-padding: var(--size-12) var(--size-16);
11
- --Button-avatar-border-color: var(--color-border-neutral);
12
- --Button-transition-duration: 150ms;
13
- --Button-transition-easing: ease-in-out;
14
-
15
- --Button-secondary-background: var(--color-interactive-neutral);
16
- --Button-secondary-background-hover: var(--color-interactive-neutral-hover);
17
- --Button-secondary-background-active: var(--color-interactive-neutral-active);
18
- --Button-secondary-color: var(--color-interactive-primary);
19
-
20
- --Button-tertiary-background: var(--color-background-neutral);
21
- --Button-tertiary-background-hover: var(--color-background-neutral-hover);
22
- --Button-tertiary-background-active: var(--color-background-neutral-active);
23
- --Button-tertiary-color: var(--color-content-primary);
24
-
25
- --Button-minimal-background: transparent;
26
- --Button-minimal-background-hover: var(--color-background-screen-hover);
27
- --Button-minimal-background-active: var(--color-background-screen-active);
28
- --Button-minimal-color: var(--color-interactive-primary);
29
-
30
- --Button-primary-negative-background: var(--color-sentiment-negative-primary);
31
- --Button-primary-negative-background-hover: var(--color-sentiment-negative-primary-hover);
32
- --Button-primary-negative-background-active: var(--color-sentiment-negative-primary-active);
33
- --Button-primary-negative-color: var(--color-contrast);
34
- --Button-primary-netative-avatar-border-color: #FFFFFF33;
35
-
36
- --Button-secondary-negative-background: var(--color-sentiment-negative-secondary);
37
- --Button-secondary-negative-background-hover: var(--color-sentiment-negative-secondary-hover);
38
- --Button-secondary-negative-background-active: var(--color-sentiment-negative-secondary-active);
39
- --Button-secondary-negative-color: var(--color-sentiment-negative-primary);
40
- --Button-secondary-netative-avatar-border-color: #A8200D1F;
41
- }
42
-
43
- .np-theme-personal--dark {
44
- .wds-Button {
45
- --Button-primary-netative-avatar-border-color: #0E0F0C1F;
46
- }
47
- }
48
-
49
- .np-theme-personal--forest-green {
50
- .wds-Button {
51
- --color-interactive-neutral: #9FE87033;
52
- --color-interactive-neutral-hover: #CDFFAD33;
53
- --color-interactive-neutral-active: #ECFFE033;
54
- --color-sentiment-negative-secondary: #FFC4C233;
55
- --color-sentiment-negative-secondary-hover: #FFDCDB33;
56
- --color-sentiment-negative-secondary-active: #FFEBEB33;
57
- --Button-primary-netative-avatar-border-color: #0E0F0C1F;
58
- --Button-secondary-netative-avatar-border-color: #0E0F0C1F;
59
- }
60
- }
61
-
62
- .np-theme-personal--bright-green {
63
- .wds-Button {
64
- --color-contrast: #FFFFFF;
65
- --Button-secondary-color: var(--color-interactive-control);
66
- --Button-secondary-negative-color: var(--color-contrast);
67
- --Button-secondary-netative-avatar-border-color: var(--Button-primary-netative-avatar-border-color);
68
- }
69
- }
@@ -1,23 +0,0 @@
1
- .np-btn {
2
- position: relative;
3
- }
4
- .np-btn.np-btn-block > span.btn-loader {
5
- position: absolute;
6
- left: 24px;
7
- left: var(--size-24);
8
- }
9
- [dir="rtl"] .np-btn.np-btn-block > span.btn-loader {
10
- right: 24px;
11
- right: var(--size-24);
12
- left: auto;
13
- left: initial;
14
- }
15
- .np-btn.np-btn-xs > span.btn-loader {
16
- background-size: 16px 16px;
17
- }
18
- .np-btn.np-btn-xs.btn-block > span.btn-loader {
19
- top: 0;
20
- }
21
- .np-btn.disabled[class] {
22
- pointer-events: auto;
23
- }
@@ -1,24 +0,0 @@
1
- @import (reference) "../../node_modules/@transferwise/neptune-css/src/less/mixins/_logical-properties.less";
2
-
3
- .np-btn {
4
- position: relative;
5
-
6
- &.np-btn-block > span.btn-loader {
7
- position: absolute;
8
- .left(var(--size-24));
9
- }
10
-
11
- &.np-btn-xs > span.btn-loader {
12
- background-size: 16px 16px;
13
- }
14
-
15
- &.np-btn-xs.btn-block > span.btn-loader {
16
- top: 0;
17
- }
18
-
19
- // we do not want pointer events disabled as that
20
- // prevents the custom cursor to be shown
21
- &.disabled[class] {
22
- pointer-events: auto;
23
- }
24
- }
@@ -1,146 +0,0 @@
1
- import { createRef } from 'react';
2
-
3
- import { render, screen, userEvent } from '../test-utils';
4
-
5
- import LegacyButton, { ButtonReferenceType } from './LegacyButton';
6
- import messages from '../i18n/commonMessages/Button.messages';
7
-
8
- describe('LegacyButton', () => {
9
- // eslint-disable-next-line no-console
10
- const originalWarn = console.warn;
11
- let mockedWarn: typeof originalWarn;
12
-
13
- const props = {
14
- onClick: jest.fn(),
15
- onFocus: jest.fn(),
16
- onBlur: jest.fn(),
17
- children: 'Send money',
18
- };
19
-
20
- beforeAll(() => {
21
- mockedWarn = jest.fn().mockImplementation((args) => {
22
- if (typeof args !== 'string' || !args.startsWith('Button has deprecated the')) {
23
- originalWarn(args);
24
- }
25
- });
26
- // eslint-disable-next-line no-console
27
- console.warn = mockedWarn;
28
- });
29
-
30
- beforeEach(jest.clearAllMocks);
31
-
32
- afterAll(() => {
33
- // eslint-disable-next-line no-console
34
- console.warn = originalWarn;
35
- });
36
-
37
- describe('by default', () => {
38
- it('renders the text', () => {
39
- render(<LegacyButton {...props} />);
40
- expect(screen.getByText(props.children)).toBeInTheDocument();
41
- });
42
-
43
- it('set `ref` to be true on Button', () => {
44
- const reference = createRef<ButtonReferenceType>();
45
-
46
- expect(reference.current).toBeFalsy();
47
- render(<LegacyButton ref={reference}>Click me!</LegacyButton>);
48
- expect(reference.current).toBeTruthy();
49
- });
50
-
51
- it('is not disabled', () => {
52
- render(<LegacyButton {...props} />);
53
- expect(screen.getByRole('button')).toBeEnabled();
54
- });
55
- });
56
-
57
- describe('button attributes', () => {
58
- it('sets the htmlType if set', () => {
59
- render(<LegacyButton {...props} htmlType="submit" />);
60
- expect(screen.getByRole('button')).toHaveAttribute('type', 'submit');
61
- });
62
-
63
- it('passes through custom classes if set', () => {
64
- render(<LegacyButton {...props} className="donkeysarethebest" />);
65
- expect(screen.getByRole('button')).toHaveClass('donkeysarethebest');
66
- });
67
-
68
- it('passes through aria-label if set', () => {
69
- render(<LegacyButton {...props} aria-label="unique label" />);
70
- const loadingButton = screen.getByLabelText('unique label');
71
- expect(loadingButton).toBeInTheDocument();
72
- });
73
- });
74
-
75
- describe('onClick', () => {
76
- it('calls onClick when clicked', async () => {
77
- render(<LegacyButton {...props} />);
78
- await userEvent.click(screen.getByRole('button'));
79
- expect(props.onClick).toHaveBeenCalledTimes(1);
80
- });
81
-
82
- it('does not call onClick when clicked if disabled', async () => {
83
- render(<LegacyButton {...props} disabled />);
84
- await userEvent.click(screen.getByRole('button'));
85
- expect(props.onClick).toHaveBeenCalledTimes(0);
86
- });
87
-
88
- it('does not call onClick when clicked if loading', async () => {
89
- render(<LegacyButton {...props} loading />);
90
- await userEvent.click(screen.getByRole('button'));
91
- expect(props.onClick).toHaveBeenCalledTimes(0);
92
- });
93
- });
94
-
95
- describe('onFocus and onBlur', () => {
96
- it('calls both handlers by default', async () => {
97
- render(<LegacyButton {...props} />);
98
- await userEvent.tab();
99
- expect(props.onFocus).toHaveBeenCalledTimes(1);
100
- await userEvent.tab();
101
- expect(props.onFocus).toHaveBeenCalledTimes(1);
102
- });
103
-
104
- it('does not call either handler if disabled', async () => {
105
- render(<LegacyButton {...props} disabled />);
106
- await userEvent.tab();
107
- expect(props.onFocus).not.toHaveBeenCalled();
108
- await userEvent.tab();
109
- expect(props.onFocus).not.toHaveBeenCalled();
110
- });
111
-
112
- it('calls both handlers if loading', async () => {
113
- render(<LegacyButton {...props} loading />);
114
- await userEvent.tab();
115
- expect(props.onFocus).toHaveBeenCalledTimes(1);
116
- await userEvent.tab();
117
- expect(props.onFocus).toHaveBeenCalledTimes(1);
118
- });
119
- });
120
-
121
- describe('other states', () => {
122
- it('renders as loading if `loading` is true', () => {
123
- render(<LegacyButton {...props} loading />);
124
- const button = screen.queryByRole('button', {
125
- name: messages.loadingAriaLabel.defaultMessage,
126
- });
127
- expect(button).toBeInTheDocument();
128
- expect(button).toBeEnabled();
129
- expect(button).toHaveClass('btn-loading');
130
- expect(button).toHaveAttribute('aria-disabled', 'true');
131
- expect(button).toHaveAttribute('aria-busy', 'true');
132
- expect(button).toHaveAttribute('aria-live', 'polite');
133
- expect(screen.getByTestId('ButtonProgressIndicator')).toBeInTheDocument();
134
- });
135
-
136
- it('disables the button', () => {
137
- render(<LegacyButton {...props} disabled />);
138
- const button = screen.queryByRole('button');
139
- expect(button).toBeDisabled();
140
- expect(button).toHaveClass('disabled');
141
- expect(button).toHaveAttribute('aria-disabled', 'false');
142
- expect(button).toHaveAttribute('aria-busy', 'false');
143
- expect(button).toHaveAttribute('aria-live', 'off');
144
- });
145
- });
146
- });
@@ -1,224 +0,0 @@
1
- import { Meta, StoryObj } from '@storybook/react';
2
- import { userEvent, within, fn, expect } from '@storybook/test';
3
- import { useState } from 'react';
4
-
5
- import Button from '.';
6
-
7
- const withContainer = (Story: any) => (
8
- <div
9
- style={{
10
- display: 'flex',
11
- flexDirection: 'initial',
12
- justifyContent: 'center',
13
- flexFlow: 'column',
14
- alignItems: 'center',
15
- }}
16
- >
17
- <Story />
18
- </div>
19
- );
20
-
21
- const meta: Meta<typeof Button> = {
22
- component: Button,
23
- title: 'Actions/Button/Legacy',
24
- args: {
25
- children: 'Button text',
26
- loading: false,
27
- type: undefined,
28
- onClick: fn(),
29
- onBlur: fn(),
30
- onFocus: fn(),
31
- href: 'https://example.com',
32
- },
33
- argTypes: {
34
- as: {
35
- control: {
36
- type: 'select',
37
- options: ['button', 'a'],
38
- },
39
- },
40
- type: {
41
- type: {
42
- name: 'enum',
43
- value: ['accent', 'positive', 'negative'],
44
- },
45
- },
46
- size: {
47
- type: {
48
- name: 'enum',
49
- value: ['xs', 'sm', 'md', 'lg'],
50
- },
51
- },
52
- priority: {
53
- type: {
54
- name: 'enum',
55
- value: ['primary', 'secondary', 'tertiary'],
56
- },
57
- },
58
- sentiment: {
59
- table: {
60
- disable: true,
61
- },
62
- },
63
- iconStart: {
64
- table: {
65
- disable: true,
66
- },
67
- },
68
- iconEnd: {
69
- table: {
70
- disable: true,
71
- },
72
- },
73
- avatars: {
74
- table: {
75
- disable: true,
76
- },
77
- },
78
- 'data-testid': {
79
- table: {
80
- disable: true,
81
- },
82
- },
83
- },
84
- tags: ['autodocs'],
85
- decorators: [withContainer],
86
- };
87
-
88
- export default meta;
89
-
90
- type Story = StoryObj<typeof Button>;
91
-
92
- export const Basic: Story = {};
93
-
94
- export const Secondary: Story = {
95
- args: {
96
- type: 'accent',
97
- priority: 'secondary',
98
- },
99
- };
100
-
101
- export const Tertiary: Story = {
102
- args: {
103
- type: 'accent',
104
- priority: 'tertiary',
105
- },
106
- };
107
-
108
- export const Negative: Story = {
109
- args: {
110
- type: 'negative',
111
- priority: 'primary',
112
- },
113
- };
114
-
115
- export const Loading: Story = {
116
- args: {
117
- loading: true,
118
- },
119
- };
120
-
121
- export const Variants: Story = {
122
- render: () => {
123
- return (
124
- <div className="d-flex flex-column p-b-2 align-items-start">
125
- <div className="d-flex flex-row p-b-2" style={{ gap: 'var(--size-16)' }}>
126
- <Button type="accent" priority="primary">
127
- Primary Accent
128
- </Button>
129
- <Button type="accent" priority="secondary">
130
- Secondary Accent
131
- </Button>
132
- <Button type="accent" priority="tertiary">
133
- Tertiary Accent
134
- </Button>
135
- </div>
136
- <div className="d-flex flex-row p-b-2" style={{ gap: 'var(--size-16)' }}>
137
- <Button type="positive" priority="primary">
138
- Primary Positive
139
- </Button>
140
- <Button type="positive" priority="secondary">
141
- Secondary Accent
142
- </Button>
143
- </div>
144
- <div className="d-flex flex-row flex- p-b-2" style={{ gap: 'var(--size-16)' }}>
145
- <Button type="negative" priority="primary">
146
- Primary Negative
147
- </Button>
148
- <Button type="negative" priority="secondary">
149
- Secondary Negative
150
- </Button>
151
- </div>
152
- <div className="d-flex flex-row p-b-1" style={{ gap: 'var(--size-16)' }}>
153
- <Button type="accent" priority="primary" disabled>
154
- Button Disabled
155
- </Button>
156
- <Button type="accent" priority="secondary" disabled>
157
- Button Disabled
158
- </Button>
159
- <Button type="accent" priority="tertiary" disabled>
160
- Button Disabled
161
- </Button>
162
- </div>
163
- </div>
164
- );
165
- },
166
- };
167
-
168
- const wait = async (duration = 500) =>
169
- new Promise<void>((resolve) => {
170
- setTimeout(resolve, duration);
171
- });
172
-
173
- export const Focused: Story = {
174
- play: async ({ canvasElement }: { canvasElement: HTMLElement }) => {
175
- const canvas = within(canvasElement);
176
- const button = canvas.getByRole('button');
177
- await userEvent.tab();
178
- await expect(button).toHaveFocus();
179
- await expect(button).toHaveTextContent('Focused!');
180
- },
181
- render: function Render(args: React.ComponentProps<typeof Button>) {
182
- const [focused, setFocused] = useState(false);
183
-
184
- return (
185
- <Button {...args} onFocus={() => setFocused(true)}>
186
- {focused ? 'Focused!' : 'Button text'}
187
- </Button>
188
- );
189
- },
190
- };
191
-
192
- export const SocialMedia: Story = {
193
- render: () => {
194
- return (
195
- <>
196
- <div className="m-b-2">
197
- <button type="button" className="btn btn-google">
198
- Login with Google
199
- </button>
200
- </div>
201
- <div className="m-b-2">
202
- <button type="button" className="btn btn-facebook">
203
- Login with Facebook
204
- </button>
205
- </div>
206
- <div className="m-b-2">
207
- <button type="button" className="btn btn-lg btn-facebook">
208
- Large Button
209
- </button>
210
- </div>
211
- <div className="m-b-2">
212
- <button type="button" className="btn btn-block btn-facebook">
213
- Block Button
214
- </button>
215
- </div>
216
- <div className="m-b-2">
217
- <button type="button" className="btn btn-lg btn-block btn-facebook">
218
- Large Block Button
219
- </button>
220
- </div>
221
- </>
222
- );
223
- },
224
- };