@transferwise/components 0.0.0-experimental-5ff6475 → 0.0.0-experimental-f16de49
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/Calendar/Calendar.js +9 -3
- package/build/Calendar/Calendar.js.map +1 -1
- package/build/Calendar/Calendar.mjs +9 -3
- package/build/Calendar/Calendar.mjs.map +1 -1
- package/build/Carousel/Carousel.js +17 -10
- package/build/Carousel/Carousel.js.map +1 -1
- package/build/Carousel/Carousel.mjs +17 -10
- package/build/Carousel/Carousel.mjs.map +1 -1
- package/build/SegmentedControl/SegmentedControl.js +2 -9
- package/build/SegmentedControl/SegmentedControl.js.map +1 -1
- package/build/SegmentedControl/SegmentedControl.mjs +2 -9
- package/build/SegmentedControl/SegmentedControl.mjs.map +1 -1
- package/build/Tooltip/Tooltip.js +6 -1
- package/build/Tooltip/Tooltip.js.map +1 -1
- package/build/Tooltip/Tooltip.mjs +6 -1
- package/build/Tooltip/Tooltip.mjs.map +1 -1
- package/build/main.css +10 -28
- package/build/styles/AvatarLayout/AvatarLayout.css +9 -26
- package/build/styles/SegmentedControl/SegmentedControl.css +1 -2
- package/build/styles/main.css +10 -28
- package/build/types/Calendar/Calendar.d.ts.map +1 -1
- package/build/types/Carousel/Carousel.d.ts.map +1 -1
- package/build/types/Carousel/_stories/constants.d.ts +3 -0
- package/build/types/Carousel/_stories/constants.d.ts.map +1 -0
- package/build/types/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/build/types/Tooltip/Tooltip.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/AvatarLayout/AvatarLayout.css +9 -26
- package/src/AvatarLayout/AvatarLayout.less +22 -46
- package/src/AvatarLayout/_stories/AvatarLayout.test.story.tsx +42 -17
- package/src/Calendar/Calendar.test.tsx +82 -0
- package/src/Calendar/Calendar.tsx +6 -3
- package/src/Carousel/Carousel.tsx +13 -10
- package/src/Carousel/_stories/Carousel.story.tsx +12 -52
- package/src/Carousel/_stories/Carousel.test.story.tsx +7 -43
- package/src/Carousel/_stories/constants.tsx +46 -0
- package/src/DateLookup/_stories/DateLookup.rtl.test.story.tsx +48 -59
- package/src/Field/_stories/Field.test.story.tsx +37 -48
- package/src/FlowNavigation/_stories/FlowNavigation.test.story.tsx +44 -0
- package/src/Label/_stories/Label.test.story.tsx +22 -35
- package/src/Popover/_stories/Popover.rtl.test.story.tsx +50 -40
- package/src/SegmentedControl/SegmentedControl.css +1 -2
- package/src/SegmentedControl/SegmentedControl.less +2 -4
- package/src/SegmentedControl/SegmentedControl.tsx +2 -8
- package/src/SegmentedControl/_stories/SegmentedControl.test.story.tsx +8 -16
- package/src/Tooltip/Tooltip.test.tsx +51 -0
- package/src/Tooltip/Tooltip.tsx +6 -1
- package/src/Tooltip/_stories/Tooltip.rtl.test.story.tsx +16 -34
- package/src/main.css +10 -28
- package/src/FlowNavigation/_stories/FlowNavigation.rtl.test.story.tsx +0 -78
|
@@ -14,6 +14,16 @@ export default {
|
|
|
14
14
|
|
|
15
15
|
type Story = StoryObj<typeof Popover>;
|
|
16
16
|
|
|
17
|
+
const iframeDiff = withRTLDiff({ renderAs: 'iframe' });
|
|
18
|
+
|
|
19
|
+
const containerStyle: React.CSSProperties = {
|
|
20
|
+
display: 'flex',
|
|
21
|
+
justifyContent: 'center',
|
|
22
|
+
alignItems: 'center',
|
|
23
|
+
minHeight: '24rem',
|
|
24
|
+
width: '100%',
|
|
25
|
+
};
|
|
26
|
+
|
|
17
27
|
const clickTrigger = async ({ canvasElement }: { canvasElement: HTMLElement }) => {
|
|
18
28
|
const canvas = within(canvasElement);
|
|
19
29
|
const trigger = canvas.queryByRole('button');
|
|
@@ -23,64 +33,64 @@ const clickTrigger = async ({ canvasElement }: { canvasElement: HTMLElement }) =
|
|
|
23
33
|
|
|
24
34
|
export const PlacementRight: Story = {
|
|
25
35
|
render: () => (
|
|
26
|
-
<
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
right
|
|
33
|
-
</
|
|
34
|
-
</
|
|
36
|
+
<div style={containerStyle}>
|
|
37
|
+
<Popover
|
|
38
|
+
preferredPlacement={Position.RIGHT}
|
|
39
|
+
title="Guaranteed rate"
|
|
40
|
+
content="You'll get this rate as long as we receive your 10 EUR within the next 51 hours."
|
|
41
|
+
>
|
|
42
|
+
<Button v2>Placement right</Button>
|
|
43
|
+
</Popover>
|
|
44
|
+
</div>
|
|
35
45
|
),
|
|
36
46
|
play: clickTrigger,
|
|
37
|
-
...
|
|
47
|
+
...iframeDiff,
|
|
38
48
|
};
|
|
39
49
|
|
|
40
50
|
export const PlacementLeft: Story = {
|
|
41
51
|
render: () => (
|
|
42
|
-
<
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
left
|
|
49
|
-
</
|
|
50
|
-
</
|
|
52
|
+
<div style={containerStyle}>
|
|
53
|
+
<Popover
|
|
54
|
+
preferredPlacement={Position.LEFT}
|
|
55
|
+
title="Guaranteed rate"
|
|
56
|
+
content="You'll get this rate as long as we receive your 10 EUR within the next 51 hours."
|
|
57
|
+
>
|
|
58
|
+
<Button v2>Placement left</Button>
|
|
59
|
+
</Popover>
|
|
60
|
+
</div>
|
|
51
61
|
),
|
|
52
62
|
play: clickTrigger,
|
|
53
|
-
...
|
|
63
|
+
...iframeDiff,
|
|
54
64
|
};
|
|
55
65
|
|
|
56
66
|
export const PlacementTop: Story = {
|
|
57
67
|
render: () => (
|
|
58
|
-
<
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
top
|
|
65
|
-
</
|
|
66
|
-
</
|
|
68
|
+
<div style={containerStyle}>
|
|
69
|
+
<Popover
|
|
70
|
+
preferredPlacement={Position.TOP}
|
|
71
|
+
title="Guaranteed rate"
|
|
72
|
+
content="You'll get this rate as long as we receive your 10 EUR within the next 51 hours."
|
|
73
|
+
>
|
|
74
|
+
<Button v2>Placement top</Button>
|
|
75
|
+
</Popover>
|
|
76
|
+
</div>
|
|
67
77
|
),
|
|
68
78
|
play: clickTrigger,
|
|
69
|
-
...
|
|
79
|
+
...iframeDiff,
|
|
70
80
|
};
|
|
71
81
|
|
|
72
82
|
export const PlacementBottom: Story = {
|
|
73
83
|
render: () => (
|
|
74
|
-
<
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
bottom
|
|
81
|
-
</
|
|
82
|
-
</
|
|
84
|
+
<div style={containerStyle}>
|
|
85
|
+
<Popover
|
|
86
|
+
preferredPlacement={Position.BOTTOM}
|
|
87
|
+
title="Guaranteed rate"
|
|
88
|
+
content="You'll get this rate as long as we receive your 10 EUR within the next 51 hours."
|
|
89
|
+
>
|
|
90
|
+
<Button v2>Placement bottom</Button>
|
|
91
|
+
</Popover>
|
|
92
|
+
</div>
|
|
83
93
|
),
|
|
84
94
|
play: clickTrigger,
|
|
85
|
-
...
|
|
95
|
+
...iframeDiff,
|
|
86
96
|
};
|
|
@@ -35,8 +35,7 @@
|
|
|
35
35
|
background: var(--color-background-screen);
|
|
36
36
|
border-radius: 24px;
|
|
37
37
|
border-radius: var(--size-24);
|
|
38
|
-
transition: left 300ms
|
|
39
|
-
right 300ms;
|
|
38
|
+
transition: left 300ms;
|
|
40
39
|
}
|
|
41
40
|
.segmented-control__segments--no-animate::after {
|
|
42
41
|
transition: none !important;
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
justify-content: center;
|
|
13
13
|
align-items: center;
|
|
14
14
|
background: var(--color-background-neutral);
|
|
15
|
-
border-radius: var(--size-24);
|
|
15
|
+
border-radius: var(--size-24);
|
|
16
16
|
transition: outline 300ms;
|
|
17
17
|
outline: 2px solid transparent;
|
|
18
18
|
}
|
|
@@ -31,9 +31,7 @@
|
|
|
31
31
|
z-index: 0;
|
|
32
32
|
background: var(--color-background-screen);
|
|
33
33
|
border-radius: var(--size-24);
|
|
34
|
-
transition:
|
|
35
|
-
left 300ms,
|
|
36
|
-
right 300ms;
|
|
34
|
+
transition: left 300ms;
|
|
37
35
|
}
|
|
38
36
|
|
|
39
37
|
.segmented-control__segments--no-animate::after {
|
|
@@ -3,7 +3,6 @@ import { createRef, useEffect, useRef, useState } from 'react';
|
|
|
3
3
|
|
|
4
4
|
import Body from '../Body';
|
|
5
5
|
import { Typography } from '../common';
|
|
6
|
-
import { useDirection } from '../common/hooks';
|
|
7
6
|
|
|
8
7
|
type SegmentBase = { id: string; label: string; value: string };
|
|
9
8
|
|
|
@@ -41,7 +40,6 @@ const SegmentedControl = ({
|
|
|
41
40
|
}: SegmentedControlProps) => {
|
|
42
41
|
const isMountedRef = useRef(false);
|
|
43
42
|
const [animate, setAnimate] = useState(false);
|
|
44
|
-
const { isRTL } = useDirection();
|
|
45
43
|
|
|
46
44
|
const segmentsRef = useRef<HTMLDivElement>(null);
|
|
47
45
|
|
|
@@ -64,12 +62,8 @@ const SegmentedControl = ({
|
|
|
64
62
|
// This is so we can animate the highlight to the selected segment
|
|
65
63
|
if (selectedSegmentRef?.current && segmentsRef.current) {
|
|
66
64
|
const { style } = segmentsRef.current;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
? segmentsRef.current.offsetWidth - segment.offsetLeft - segment.offsetWidth
|
|
70
|
-
: segment.offsetLeft;
|
|
71
|
-
style.setProperty('--segment-highlight-width', `${segment.offsetWidth}px`);
|
|
72
|
-
style.setProperty('--segment-highlight-x', `${inlineOffset}px`);
|
|
65
|
+
style.setProperty('--segment-highlight-width', `${selectedSegmentRef.current.offsetWidth}px`);
|
|
66
|
+
style.setProperty('--segment-highlight-x', `${selectedSegmentRef.current.offsetLeft}px`);
|
|
73
67
|
}
|
|
74
68
|
};
|
|
75
69
|
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { useState } from 'react';
|
|
2
1
|
import type { Meta, StoryObj } from '@storybook/react-webpack5';
|
|
3
2
|
import { withRTLDiff } from '../../../.storybook/decorators/RtlDiffDecorator';
|
|
4
3
|
import SegmentedControl from '../SegmentedControl';
|
|
@@ -23,31 +22,24 @@ const viewSegments = [
|
|
|
23
22
|
{ id: 'seg-gamma', label: 'Gamma', value: 'gamma', controls: 'panel-gamma' },
|
|
24
23
|
] as const;
|
|
25
24
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const [viewValue, setViewValue] = useState('beta');
|
|
29
|
-
|
|
30
|
-
return (
|
|
25
|
+
export const RTLDiff: Story = {
|
|
26
|
+
render: () => (
|
|
31
27
|
<>
|
|
32
28
|
<SegmentedControl
|
|
33
29
|
name="rtl-input"
|
|
34
30
|
mode="input"
|
|
35
31
|
segments={inputSegments}
|
|
36
|
-
value=
|
|
37
|
-
onChange={
|
|
32
|
+
value="one"
|
|
33
|
+
onChange={() => {}}
|
|
38
34
|
/>
|
|
39
35
|
<SegmentedControl
|
|
40
36
|
name="rtl-view"
|
|
41
37
|
mode="view"
|
|
42
38
|
segments={viewSegments}
|
|
43
|
-
value=
|
|
44
|
-
onChange={
|
|
39
|
+
value="alpha"
|
|
40
|
+
onChange={() => {}}
|
|
45
41
|
/>
|
|
46
42
|
</>
|
|
47
|
-
)
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
export const RTLDiff: Story = {
|
|
51
|
-
render: () => <InteractiveSegmentedControl />,
|
|
52
|
-
...withRTLDiff({ width: 'stretch', renderAs: 'iframe' }),
|
|
43
|
+
),
|
|
44
|
+
...withRTLDiff(),
|
|
53
45
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { render, screen } from '@testing-library/react';
|
|
2
2
|
import { userEvent } from '@testing-library/user-event';
|
|
3
3
|
|
|
4
|
+
import { DirectionProvider } from '../Provider/Direction/DirectionProvider';
|
|
4
5
|
import Tooltip from '.';
|
|
5
6
|
|
|
6
7
|
describe('Tooltip Component', () => {
|
|
@@ -102,4 +103,54 @@ describe('Tooltip Component', () => {
|
|
|
102
103
|
const tooltipElement = screen.getByRole('tooltip', { hidden: true });
|
|
103
104
|
expect(tooltipElement).toBeVisible();
|
|
104
105
|
});
|
|
106
|
+
|
|
107
|
+
describe('RTL position mirroring', () => {
|
|
108
|
+
it('mirrors position="left" to right in RTL', async () => {
|
|
109
|
+
render(
|
|
110
|
+
<DirectionProvider direction="rtl">
|
|
111
|
+
<Tooltip label="Test Tooltip" position="left">
|
|
112
|
+
<span>Hover me</span>
|
|
113
|
+
</Tooltip>
|
|
114
|
+
</DirectionProvider>,
|
|
115
|
+
);
|
|
116
|
+
const triggerElement = screen.getByText('Hover me');
|
|
117
|
+
await userEvent.hover(triggerElement);
|
|
118
|
+
|
|
119
|
+
const tooltip = screen.getByRole('tooltip', { hidden: true });
|
|
120
|
+
expect(tooltip).toHaveAttribute('data-popper-placement', 'right');
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
it('mirrors position="right" to left in RTL', async () => {
|
|
124
|
+
render(
|
|
125
|
+
<DirectionProvider direction="rtl">
|
|
126
|
+
<Tooltip label="Test Tooltip" position="right">
|
|
127
|
+
<span>Hover me</span>
|
|
128
|
+
</Tooltip>
|
|
129
|
+
</DirectionProvider>,
|
|
130
|
+
);
|
|
131
|
+
const triggerElement = screen.getByText('Hover me');
|
|
132
|
+
await userEvent.hover(triggerElement);
|
|
133
|
+
|
|
134
|
+
const tooltip = screen.getByRole('tooltip', { hidden: true });
|
|
135
|
+
expect(tooltip).toHaveAttribute('data-popper-placement', 'left');
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
it.each(['top', 'bottom'] as const)(
|
|
139
|
+
'does not mirror position="%s" in RTL',
|
|
140
|
+
async (position) => {
|
|
141
|
+
render(
|
|
142
|
+
<DirectionProvider direction="rtl">
|
|
143
|
+
<Tooltip label="Test Tooltip" position={position}>
|
|
144
|
+
<span>Hover me</span>
|
|
145
|
+
</Tooltip>
|
|
146
|
+
</DirectionProvider>,
|
|
147
|
+
);
|
|
148
|
+
const triggerElement = screen.getByText('Hover me');
|
|
149
|
+
await userEvent.hover(triggerElement);
|
|
150
|
+
|
|
151
|
+
const tooltip = screen.getByRole('tooltip', { hidden: true });
|
|
152
|
+
expect(tooltip).toHaveAttribute('data-popper-placement', position);
|
|
153
|
+
},
|
|
154
|
+
);
|
|
155
|
+
});
|
|
105
156
|
});
|
package/src/Tooltip/Tooltip.tsx
CHANGED
|
@@ -19,6 +19,7 @@ import {
|
|
|
19
19
|
} from 'react';
|
|
20
20
|
|
|
21
21
|
import { CommonProps, Position } from '../common';
|
|
22
|
+
import useDirection from '../common/hooks/useDirection';
|
|
22
23
|
import {
|
|
23
24
|
PositionBottom,
|
|
24
25
|
PositionLeft,
|
|
@@ -42,12 +43,16 @@ const Tooltip = ({
|
|
|
42
43
|
}: TooltipProps) => {
|
|
43
44
|
const [open, setOpen] = useState(false);
|
|
44
45
|
const arrowRef = useRef<HTMLDivElement | null>(null);
|
|
46
|
+
const { isRTL } = useDirection();
|
|
47
|
+
|
|
48
|
+
const resolvedPosition =
|
|
49
|
+
isRTL && position === 'left' ? 'right' : isRTL && position === 'right' ? 'left' : position;
|
|
45
50
|
|
|
46
51
|
const fallbackId = useId();
|
|
47
52
|
const tooltipId = id ?? fallbackId;
|
|
48
53
|
|
|
49
54
|
const { refs, floatingStyles, placement, middlewareData } = useFloating({
|
|
50
|
-
placement:
|
|
55
|
+
placement: resolvedPosition,
|
|
51
56
|
middleware: [
|
|
52
57
|
offset(16),
|
|
53
58
|
flip({ fallbackPlacements: [Position.TOP] }),
|
|
@@ -13,16 +13,6 @@ export default {
|
|
|
13
13
|
|
|
14
14
|
type Story = StoryObj<typeof Tooltip>;
|
|
15
15
|
|
|
16
|
-
const iframeDiff = withRTLDiff({ renderAs: 'iframe' });
|
|
17
|
-
|
|
18
|
-
const containerStyle: React.CSSProperties = {
|
|
19
|
-
display: 'flex',
|
|
20
|
-
justifyContent: 'center',
|
|
21
|
-
alignItems: 'center',
|
|
22
|
-
minHeight: '20rem',
|
|
23
|
-
width: '100%',
|
|
24
|
-
};
|
|
25
|
-
|
|
26
16
|
const hoverTrigger = async ({ canvasElement }: { canvasElement: HTMLElement }) => {
|
|
27
17
|
const canvas = within(canvasElement);
|
|
28
18
|
const button = canvas.queryByRole('button');
|
|
@@ -32,48 +22,40 @@ const hoverTrigger = async ({ canvasElement }: { canvasElement: HTMLElement }) =
|
|
|
32
22
|
|
|
33
23
|
export const PositionTop: Story = {
|
|
34
24
|
render: () => (
|
|
35
|
-
<
|
|
36
|
-
<
|
|
37
|
-
|
|
38
|
-
</Tooltip>
|
|
39
|
-
</div>
|
|
25
|
+
<Tooltip label="Top positioned tooltip" position="top">
|
|
26
|
+
<Button>Top</Button>
|
|
27
|
+
</Tooltip>
|
|
40
28
|
),
|
|
41
29
|
play: hoverTrigger,
|
|
42
|
-
...
|
|
30
|
+
...withRTLDiff({ renderAs: 'iframe', hAlign: 'center', vAlign: 'bottom' }),
|
|
43
31
|
};
|
|
44
32
|
|
|
45
33
|
export const PositionBottom: Story = {
|
|
46
34
|
render: () => (
|
|
47
|
-
<
|
|
48
|
-
<
|
|
49
|
-
|
|
50
|
-
</Tooltip>
|
|
51
|
-
</div>
|
|
35
|
+
<Tooltip label="Bottom positioned tooltip" position="bottom">
|
|
36
|
+
<Button>Bottom</Button>
|
|
37
|
+
</Tooltip>
|
|
52
38
|
),
|
|
53
39
|
play: hoverTrigger,
|
|
54
|
-
...
|
|
40
|
+
...withRTLDiff({ renderAs: 'iframe', hAlign: 'center' }),
|
|
55
41
|
};
|
|
56
42
|
|
|
57
43
|
export const PositionRight: Story = {
|
|
58
44
|
render: () => (
|
|
59
|
-
<
|
|
60
|
-
<
|
|
61
|
-
|
|
62
|
-
</Tooltip>
|
|
63
|
-
</div>
|
|
45
|
+
<Tooltip label="Right positioned tooltip" position="right">
|
|
46
|
+
<Button>Right</Button>
|
|
47
|
+
</Tooltip>
|
|
64
48
|
),
|
|
65
49
|
play: hoverTrigger,
|
|
66
|
-
...
|
|
50
|
+
...withRTLDiff({ renderAs: 'iframe', hAlign: 'left', vAlign: 'center', width: 'stretch' }),
|
|
67
51
|
};
|
|
68
52
|
|
|
69
53
|
export const PositionLeft: Story = {
|
|
70
54
|
render: () => (
|
|
71
|
-
<
|
|
72
|
-
<
|
|
73
|
-
|
|
74
|
-
</Tooltip>
|
|
75
|
-
</div>
|
|
55
|
+
<Tooltip label="Left positioned tooltip" position="left">
|
|
56
|
+
<Button>Left</Button>
|
|
57
|
+
</Tooltip>
|
|
76
58
|
),
|
|
77
59
|
play: hoverTrigger,
|
|
78
|
-
...
|
|
60
|
+
...withRTLDiff({ renderAs: 'iframe', hAlign: 'right', vAlign: 'center' }),
|
|
79
61
|
};
|
package/src/main.css
CHANGED
|
@@ -20354,53 +20354,36 @@ a[data-toggle="tooltip"] {
|
|
|
20354
20354
|
block-size: var(--np-avatar-layout-size);
|
|
20355
20355
|
}
|
|
20356
20356
|
.np-avatar-layout-diagonal-mask {
|
|
20357
|
-
--np-avatar-layout-mask-direction: right;
|
|
20358
20357
|
-webkit-mask-image: radial-gradient(circle at bottom calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)) right calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)), transparent 0, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
20359
20358
|
mask-image: radial-gradient(circle at bottom calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)) right calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)), transparent 0, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
20360
|
-
-webkit-mask-image: radial-gradient(circle at bottom calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)) var(--np-avatar-layout-mask-direction) calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)), transparent 0, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
20361
|
-
mask-image: radial-gradient(circle at bottom calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)) var(--np-avatar-layout-mask-direction) calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)), transparent 0, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
20362
20359
|
}
|
|
20363
20360
|
[dir="rtl"] .np-avatar-layout-diagonal-mask {
|
|
20364
|
-
--np-avatar-
|
|
20365
|
-
|
|
20366
|
-
margin-inline-end: unset;
|
|
20361
|
+
-webkit-mask-image: radial-gradient(circle at bottom calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)) left calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)), transparent 0, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
20362
|
+
mask-image: radial-gradient(circle at bottom calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)) left calc(100% - var(--np-avatar-size) - var(--np-avatar-offset)), transparent 0, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
20367
20363
|
}
|
|
20368
20364
|
.np-avatar-layout-diagonal-child {
|
|
20369
20365
|
margin-inline-start: calc(var(--np-avatar-layout-size) - var(--np-avatar-size) * 2);
|
|
20370
20366
|
margin-block-start: calc(var(--np-avatar-layout-size) - var(--np-avatar-size));
|
|
20371
20367
|
}
|
|
20372
20368
|
[dir="rtl"] .np-avatar-layout-diagonal-child {
|
|
20373
|
-
-
|
|
20374
|
-
|
|
20369
|
+
margin-inline-start: 0;
|
|
20370
|
+
margin-inline-end: calc(var(--np-avatar-layout-size) - var(--np-avatar-size) * 2);
|
|
20375
20371
|
}
|
|
20376
20372
|
.np-avatar-layout-horizontal {
|
|
20377
|
-
--np-avatar-layout-mask-direction: left;
|
|
20378
20373
|
inline-size: calc(var(--np-avatar-size) * var(--np-avatar-avatars-count) - (var(--np-avatar-offset) * (var(--np-avatar-avatars-count) - 1)));
|
|
20379
20374
|
inline-size: calc(var(--np-avatar-size) * var(--np-avatar-avatars-count) - calc(var(--np-avatar-offset) * calc(var(--np-avatar-avatars-count) - 1)));
|
|
20380
20375
|
block-size: var(--np-avatar-layout-size);
|
|
20381
20376
|
}
|
|
20382
|
-
|
|
20383
|
-
--np-avatar-
|
|
20384
|
-
|
|
20385
|
-
|
|
20386
|
-
|
|
20387
|
-
-webkit-mask-image: radial-gradient(circle at top calc(100% - (var(--np-avatar-size) / 2)) var(--np-avatar-layout-mask-direction) calc(100% + (var(--np-avatar-size) / 2) - var(--np-avatar-offset)), transparent, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
20388
|
-
mask-image: radial-gradient(circle at top calc(100% - (var(--np-avatar-size) / 2)) var(--np-avatar-layout-mask-direction) calc(100% + (var(--np-avatar-size) / 2) - var(--np-avatar-offset)), transparent, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
20389
|
-
-webkit-mask-image: radial-gradient(circle at top calc(100% - calc(var(--np-avatar-size) / 2)) var(--np-avatar-layout-mask-direction) calc(100% + calc(var(--np-avatar-size) / 2) - var(--np-avatar-offset)), transparent, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
20390
|
-
mask-image: radial-gradient(circle at top calc(100% - calc(var(--np-avatar-size) / 2)) var(--np-avatar-layout-mask-direction) calc(100% + calc(var(--np-avatar-size) / 2) - var(--np-avatar-offset)), transparent, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
20391
|
-
}
|
|
20392
|
-
[dir="rtl"] .np-avatar-layout-horizontal-mask {
|
|
20393
|
-
margin-inline-end: calc(var(--np-avatar-offset) * -1);
|
|
20394
|
-
}
|
|
20395
|
-
[dir="rtl"] .np-avatar-layout-horizontal-mask:last-child {
|
|
20396
|
-
-webkit-mask-image: initial;
|
|
20397
|
-
mask-image: initial;
|
|
20377
|
+
.np-avatar-layout-horizontal-mask {
|
|
20378
|
+
-webkit-mask-image: radial-gradient(circle at top calc(100% - (var(--np-avatar-size) / 2)) left calc(100% + (var(--np-avatar-size) / 2) - var(--np-avatar-offset)), transparent, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
20379
|
+
mask-image: radial-gradient(circle at top calc(100% - (var(--np-avatar-size) / 2)) left calc(100% + (var(--np-avatar-size) / 2) - var(--np-avatar-offset)), transparent, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
20380
|
+
-webkit-mask-image: radial-gradient(circle at top calc(100% - calc(var(--np-avatar-size) / 2)) left calc(100% + calc(var(--np-avatar-size) / 2) - var(--np-avatar-offset)), transparent, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
20381
|
+
mask-image: radial-gradient(circle at top calc(100% - calc(var(--np-avatar-size) / 2)) left calc(100% + calc(var(--np-avatar-size) / 2) - var(--np-avatar-offset)), transparent, transparent calc(var(--np-avatar-size) / 2 + 2px), black 0);
|
|
20398
20382
|
}
|
|
20399
20383
|
.np-avatar-layout-horizontal-child {
|
|
20400
20384
|
margin-inline-start: calc(var(--np-avatar-offset) * -1);
|
|
20401
20385
|
}
|
|
20402
20386
|
[dir="rtl"] .np-avatar-layout-horizontal-child {
|
|
20403
|
-
margin-inline-start: unset;
|
|
20404
20387
|
margin-inline-end: calc(var(--np-avatar-offset) * -1);
|
|
20405
20388
|
}
|
|
20406
20389
|
.np-icon-button {
|
|
@@ -25818,8 +25801,7 @@ button.np-link {
|
|
|
25818
25801
|
background: var(--color-background-screen);
|
|
25819
25802
|
border-radius: 24px;
|
|
25820
25803
|
border-radius: var(--size-24);
|
|
25821
|
-
transition: left 300ms
|
|
25822
|
-
right 300ms;
|
|
25804
|
+
transition: left 300ms;
|
|
25823
25805
|
}
|
|
25824
25806
|
.segmented-control__segments--no-animate::after {
|
|
25825
25807
|
transition: none !important;
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { Meta, StoryObj } from '@storybook/react-webpack5';
|
|
2
|
-
|
|
3
|
-
import { withRTLDiff } from '../../../.storybook/decorators/RtlDiffDecorator';
|
|
4
|
-
import AvatarView from '../../AvatarView';
|
|
5
|
-
import { ProfileType } from '../../common';
|
|
6
|
-
import Logo from '../../Logo';
|
|
7
|
-
|
|
8
|
-
import FlowNavigation from '../FlowNavigation';
|
|
9
|
-
|
|
10
|
-
const noop = () => {};
|
|
11
|
-
|
|
12
|
-
const steps = [
|
|
13
|
-
{ label: 'Amount', hoverLabel: '100 GBP', onClick: noop },
|
|
14
|
-
{ label: 'You', hoverLabel: 'Elena Durante', onClick: noop },
|
|
15
|
-
{ label: 'Review', onClick: noop },
|
|
16
|
-
{ label: 'Pay', onClick: noop },
|
|
17
|
-
];
|
|
18
|
-
|
|
19
|
-
const meta: Meta<typeof FlowNavigation> = {
|
|
20
|
-
component: FlowNavigation,
|
|
21
|
-
title: 'Navigation/FlowNavigation/Tests/RTL Diff',
|
|
22
|
-
tags: ['!autodocs', '!manifest'],
|
|
23
|
-
parameters: {
|
|
24
|
-
padding: '0',
|
|
25
|
-
},
|
|
26
|
-
};
|
|
27
|
-
export default meta;
|
|
28
|
-
|
|
29
|
-
type Story = StoryObj<typeof FlowNavigation>;
|
|
30
|
-
|
|
31
|
-
export const Desktop: Story = {
|
|
32
|
-
render: () => (
|
|
33
|
-
<>
|
|
34
|
-
<FlowNavigation
|
|
35
|
-
activeStep={2}
|
|
36
|
-
avatar={<AvatarView profileType={ProfileType.PERSONAL} />}
|
|
37
|
-
logo={<Logo />}
|
|
38
|
-
steps={steps}
|
|
39
|
-
onClose={noop}
|
|
40
|
-
onGoBack={noop}
|
|
41
|
-
/>
|
|
42
|
-
<FlowNavigation
|
|
43
|
-
avatar={<AvatarView profileType={ProfileType.PERSONAL} />}
|
|
44
|
-
logo={<Logo />}
|
|
45
|
-
onClose={noop}
|
|
46
|
-
/>
|
|
47
|
-
<FlowNavigation
|
|
48
|
-
done
|
|
49
|
-
avatar={<AvatarView profileType={ProfileType.PERSONAL} />}
|
|
50
|
-
logo={<Logo />}
|
|
51
|
-
steps={steps}
|
|
52
|
-
onClose={noop}
|
|
53
|
-
/>
|
|
54
|
-
</>
|
|
55
|
-
),
|
|
56
|
-
...withRTLDiff(),
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
export const Mobile: Story = {
|
|
60
|
-
render: () => (
|
|
61
|
-
<>
|
|
62
|
-
<FlowNavigation
|
|
63
|
-
activeStep={2}
|
|
64
|
-
avatar={<AvatarView profileType={ProfileType.PERSONAL} />}
|
|
65
|
-
logo={<Logo />}
|
|
66
|
-
steps={steps}
|
|
67
|
-
onClose={noop}
|
|
68
|
-
onGoBack={noop}
|
|
69
|
-
/>
|
|
70
|
-
<FlowNavigation
|
|
71
|
-
avatar={<AvatarView profileType={ProfileType.PERSONAL} />}
|
|
72
|
-
logo={<Logo />}
|
|
73
|
-
onClose={noop}
|
|
74
|
-
/>
|
|
75
|
-
</>
|
|
76
|
-
),
|
|
77
|
-
...withRTLDiff({ viewport: 'largeMobile' }),
|
|
78
|
-
};
|