@ledgerhq/lumen-ui-rnative 0.1.37 → 0.1.38
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/dist/module/lib/Components/AmountInput/AmountInput.js +109 -72
- package/dist/module/lib/Components/AmountInput/AmountInput.js.map +1 -1
- package/dist/module/lib/Components/AmountInput/AmountInput.mdx +12 -0
- package/dist/module/lib/Components/AmountInput/AmountInput.stories.js +53 -0
- package/dist/module/lib/Components/AmountInput/AmountInput.stories.js.map +1 -1
- package/dist/module/lib/Components/Avatar/Avatar.js +6 -5
- package/dist/module/lib/Components/Avatar/Avatar.js.map +1 -1
- package/dist/module/lib/Components/Avatar/Avatar.mdx +2 -0
- package/dist/module/lib/Components/Avatar/Avatar.test.js +10 -13
- package/dist/module/lib/Components/Avatar/Avatar.test.js.map +1 -1
- package/dist/module/lib/Components/DotIcon/DotIcon.js +7 -4
- package/dist/module/lib/Components/DotIcon/DotIcon.js.map +1 -1
- package/dist/module/lib/Components/DotIcon/DotIcon.stories.js +10 -0
- package/dist/module/lib/Components/DotIcon/DotIcon.stories.js.map +1 -1
- package/dist/module/lib/Components/DotIndicator/DotIndicator.js +5 -5
- package/dist/module/lib/Components/DotIndicator/DotIndicator.js.map +1 -1
- package/dist/module/lib/Components/DotIndicator/DotIndicator.mdx +4 -4
- package/dist/module/lib/Components/DotIndicator/DotIndicator.stories.js +3 -3
- package/dist/module/lib/Components/DotIndicator/DotIndicator.test.js +12 -2
- package/dist/module/lib/Components/DotIndicator/DotIndicator.test.js.map +1 -1
- package/dist/module/lib/Components/DotSymbol/DotSymbol.js +7 -4
- package/dist/module/lib/Components/DotSymbol/DotSymbol.js.map +1 -1
- package/dist/module/lib/Components/DotSymbol/DotSymbol.stories.js +19 -0
- package/dist/module/lib/Components/DotSymbol/DotSymbol.stories.js.map +1 -1
- package/dist/module/lib/Components/Label/Label.js +1 -1
- package/dist/module/lib/Components/MediaButton/MediaButton.js +2 -2
- package/dist/module/lib/Components/MediaButton/MediaButton.mdx +2 -2
- package/dist/module/lib/Components/MediaImage/MediaImage.js +4 -2
- package/dist/module/lib/Components/MediaImage/MediaImage.js.map +1 -1
- package/dist/module/lib/Components/MediaImage/MediaImage.mdx +1 -1
- package/dist/module/lib/Components/MediaImage/MediaImage.stories.js +12 -0
- package/dist/module/lib/Components/MediaImage/MediaImage.stories.js.map +1 -1
- package/dist/module/lib/Components/OptionList/OptionList.mdx +1 -1
- package/dist/module/lib/Components/ThemeProvider/ThemeProvider.js +2 -5
- package/dist/module/lib/Components/ThemeProvider/ThemeProvider.js.map +1 -1
- package/dist/module/lib/Components/index.js +0 -1
- package/dist/module/lib/Components/index.js.map +1 -1
- package/dist/module/lib/Symbols/Icons/Lightbulb.js +3 -3
- package/dist/module/lib/Symbols/Icons/Lightbulb.js.map +1 -1
- package/dist/typescript/src/lib/Components/AmountInput/AmountInput.d.ts +1 -1
- package/dist/typescript/src/lib/Components/AmountInput/AmountInput.d.ts.map +1 -1
- package/dist/typescript/src/lib/Components/AmountInput/types.d.ts +12 -0
- package/dist/typescript/src/lib/Components/AmountInput/types.d.ts.map +1 -1
- package/dist/typescript/src/lib/Components/Avatar/Avatar.d.ts +1 -1
- package/dist/typescript/src/lib/Components/Avatar/Avatar.d.ts.map +1 -1
- package/dist/typescript/src/lib/Components/DotIcon/DotIcon.d.ts +2 -1
- package/dist/typescript/src/lib/Components/DotIcon/DotIcon.d.ts.map +1 -1
- package/dist/typescript/src/lib/Components/DotIcon/types.d.ts +1 -1
- package/dist/typescript/src/lib/Components/DotIcon/types.d.ts.map +1 -1
- package/dist/typescript/src/lib/Components/DotIndicator/types.d.ts +2 -2
- package/dist/typescript/src/lib/Components/DotSymbol/DotSymbol.d.ts.map +1 -1
- package/dist/typescript/src/lib/Components/DotSymbol/types.d.ts +1 -1
- package/dist/typescript/src/lib/Components/DotSymbol/types.d.ts.map +1 -1
- package/dist/typescript/src/lib/Components/Label/Label.d.ts +1 -1
- package/dist/typescript/src/lib/Components/MediaButton/MediaButton.d.ts +2 -2
- package/dist/typescript/src/lib/Components/MediaImage/MediaImage.d.ts.map +1 -1
- package/dist/typescript/src/lib/Components/MediaImage/types.d.ts +1 -1
- package/dist/typescript/src/lib/Components/MediaImage/types.d.ts.map +1 -1
- package/dist/typescript/src/lib/Components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
- package/dist/typescript/src/lib/Components/index.d.ts +0 -1
- package/dist/typescript/src/lib/Components/index.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/lib/Components/AmountInput/AmountInput.mdx +12 -0
- package/src/lib/Components/AmountInput/AmountInput.stories.tsx +68 -1
- package/src/lib/Components/AmountInput/AmountInput.tsx +118 -75
- package/src/lib/Components/AmountInput/types.ts +14 -0
- package/src/lib/Components/Avatar/Avatar.mdx +2 -0
- package/src/lib/Components/Avatar/Avatar.test.tsx +16 -18
- package/src/lib/Components/Avatar/Avatar.tsx +9 -8
- package/src/lib/Components/DotIcon/DotIcon.stories.tsx +8 -0
- package/src/lib/Components/DotIcon/DotIcon.tsx +4 -1
- package/src/lib/Components/DotIcon/types.ts +1 -1
- package/src/lib/Components/DotIndicator/DotIndicator.mdx +4 -4
- package/src/lib/Components/DotIndicator/DotIndicator.stories.tsx +2 -2
- package/src/lib/Components/DotIndicator/DotIndicator.test.tsx +12 -2
- package/src/lib/Components/DotIndicator/DotIndicator.tsx +5 -5
- package/src/lib/Components/DotIndicator/types.ts +2 -2
- package/src/lib/Components/DotSymbol/DotSymbol.stories.tsx +15 -0
- package/src/lib/Components/DotSymbol/DotSymbol.tsx +4 -1
- package/src/lib/Components/DotSymbol/types.ts +1 -1
- package/src/lib/Components/Label/Label.tsx +1 -1
- package/src/lib/Components/MediaButton/MediaButton.mdx +2 -2
- package/src/lib/Components/MediaButton/MediaButton.tsx +2 -2
- package/src/lib/Components/MediaImage/MediaImage.mdx +1 -1
- package/src/lib/Components/MediaImage/MediaImage.stories.tsx +3 -0
- package/src/lib/Components/MediaImage/MediaImage.tsx +2 -0
- package/src/lib/Components/MediaImage/types.ts +1 -1
- package/src/lib/Components/OptionList/OptionList.mdx +1 -1
- package/src/lib/Components/ThemeProvider/ThemeProvider.tsx +1 -4
- package/src/lib/Components/index.ts +0 -1
- package/src/lib/Symbols/Icons/Lightbulb.tsx +3 -3
- package/dist/module/lib/Components/Select/GlobalSelectBottomSheet.js +0 -155
- package/dist/module/lib/Components/Select/GlobalSelectBottomSheet.js.map +0 -1
- package/dist/module/lib/Components/Select/GlobalSelectContext.js +0 -78
- package/dist/module/lib/Components/Select/GlobalSelectContext.js.map +0 -1
- package/dist/module/lib/Components/Select/Select.js +0 -366
- package/dist/module/lib/Components/Select/Select.js.map +0 -1
- package/dist/module/lib/Components/Select/Select.mdx +0 -596
- package/dist/module/lib/Components/Select/Select.stories.js +0 -304
- package/dist/module/lib/Components/Select/Select.stories.js.map +0 -1
- package/dist/module/lib/Components/Select/Select.test.js +0 -123
- package/dist/module/lib/Components/Select/Select.test.js.map +0 -1
- package/dist/module/lib/Components/Select/SelectContext.js +0 -38
- package/dist/module/lib/Components/Select/SelectContext.js.map +0 -1
- package/dist/module/lib/Components/Select/index.js +0 -6
- package/dist/module/lib/Components/Select/index.js.map +0 -1
- package/dist/module/lib/Components/Select/types.js +0 -4
- package/dist/module/lib/Components/Select/types.js.map +0 -1
- package/dist/typescript/src/lib/Components/Select/GlobalSelectBottomSheet.d.ts +0 -20
- package/dist/typescript/src/lib/Components/Select/GlobalSelectBottomSheet.d.ts.map +0 -1
- package/dist/typescript/src/lib/Components/Select/GlobalSelectContext.d.ts +0 -44
- package/dist/typescript/src/lib/Components/Select/GlobalSelectContext.d.ts.map +0 -1
- package/dist/typescript/src/lib/Components/Select/Select.d.ts +0 -52
- package/dist/typescript/src/lib/Components/Select/Select.d.ts.map +0 -1
- package/dist/typescript/src/lib/Components/Select/SelectContext.d.ts +0 -36
- package/dist/typescript/src/lib/Components/Select/SelectContext.d.ts.map +0 -1
- package/dist/typescript/src/lib/Components/Select/index.d.ts +0 -4
- package/dist/typescript/src/lib/Components/Select/index.d.ts.map +0 -1
- package/dist/typescript/src/lib/Components/Select/types.d.ts +0 -130
- package/dist/typescript/src/lib/Components/Select/types.d.ts.map +0 -1
- package/src/lib/Components/Select/GlobalSelectBottomSheet.tsx +0 -180
- package/src/lib/Components/Select/GlobalSelectContext.tsx +0 -103
- package/src/lib/Components/Select/Select.mdx +0 -596
- package/src/lib/Components/Select/Select.stories.tsx +0 -266
- package/src/lib/Components/Select/Select.test.tsx +0 -117
- package/src/lib/Components/Select/Select.tsx +0 -469
- package/src/lib/Components/Select/SelectContext.tsx +0 -68
- package/src/lib/Components/Select/index.ts +0 -3
- package/src/lib/Components/Select/types.ts +0 -149
|
@@ -55,6 +55,8 @@ An optional notification indicator can be displayed to show status or alerts:
|
|
|
55
55
|
|
|
56
56
|
- **showNotification**: Boolean prop to toggle the notification dot (default: false)
|
|
57
57
|
|
|
58
|
+
> The notification dot is only rendered on the `sm` and `md` sizes. It is suppressed on `lg` and `xl` even when `showNotification` is `true`.
|
|
59
|
+
|
|
58
60
|
<Canvas of={AvatarStories.NotificationShowcase} />
|
|
59
61
|
|
|
60
62
|
### As Interactive Trigger
|
|
@@ -195,26 +195,24 @@ describe('Avatar Component', () => {
|
|
|
195
195
|
|
|
196
196
|
dot = toJSON().children[0];
|
|
197
197
|
expect(dot.props.style.height).toBe(sizes.s12);
|
|
198
|
-
|
|
199
|
-
rerender(
|
|
200
|
-
<TestWrapper>
|
|
201
|
-
<Avatar testID='avatar-id' size='lg' showNotification />
|
|
202
|
-
</TestWrapper>,
|
|
203
|
-
);
|
|
204
|
-
|
|
205
|
-
dot = toJSON().children[0];
|
|
206
|
-
expect(dot.props.style.height).toBe(sizes.s14);
|
|
207
|
-
|
|
208
|
-
rerender(
|
|
209
|
-
<TestWrapper>
|
|
210
|
-
<Avatar testID='avatar-id' size='xl' showNotification />
|
|
211
|
-
</TestWrapper>,
|
|
212
|
-
);
|
|
213
|
-
|
|
214
|
-
dot = toJSON().children[0];
|
|
215
|
-
expect(dot.props.style.height).toBe(sizes.s16);
|
|
216
198
|
});
|
|
217
199
|
|
|
200
|
+
it.each(['lg', 'xl'] as const)(
|
|
201
|
+
'should not render the notification indicator on size=%s even when showNotification is true',
|
|
202
|
+
(size) => {
|
|
203
|
+
const { toJSON } = render(
|
|
204
|
+
<TestWrapper>
|
|
205
|
+
<Avatar testID='avatar-id' size={size} showNotification />
|
|
206
|
+
</TestWrapper>,
|
|
207
|
+
);
|
|
208
|
+
|
|
209
|
+
const tree = toJSON();
|
|
210
|
+
expect(tree.props.testID).toBe('avatar-id');
|
|
211
|
+
expect(tree.props.accessibilityRole).toBe('image');
|
|
212
|
+
expect(tree.props.accessibilityLabel).toBe('avatar');
|
|
213
|
+
},
|
|
214
|
+
);
|
|
215
|
+
|
|
218
216
|
it('should apply custom styles', () => {
|
|
219
217
|
const customStyle = { borderWidth: 2 };
|
|
220
218
|
const { getByTestId } = render(
|
|
@@ -16,14 +16,11 @@ const fallbackSizes = {
|
|
|
16
16
|
xl: 40,
|
|
17
17
|
} as const;
|
|
18
18
|
|
|
19
|
-
const dotSizeMap:
|
|
20
|
-
Size,
|
|
21
|
-
NonNullable<React.ComponentProps<typeof DotIndicator>['size']>
|
|
19
|
+
const dotSizeMap: Partial<
|
|
20
|
+
Record<Size, NonNullable<React.ComponentProps<typeof DotIndicator>['size']>>
|
|
22
21
|
> = {
|
|
23
|
-
sm: '
|
|
24
|
-
md: '
|
|
25
|
-
lg: 'md',
|
|
26
|
-
xl: 'lg',
|
|
22
|
+
sm: 'lg',
|
|
23
|
+
md: 'xl',
|
|
27
24
|
};
|
|
28
25
|
|
|
29
26
|
const useStyles = ({ size }: { size: Size }) => {
|
|
@@ -81,7 +78,7 @@ export const Avatar = ({
|
|
|
81
78
|
src,
|
|
82
79
|
alt = 'avatar',
|
|
83
80
|
size = 'md',
|
|
84
|
-
showNotification = false,
|
|
81
|
+
showNotification: showNotificationProp = false,
|
|
85
82
|
testID,
|
|
86
83
|
ref,
|
|
87
84
|
...props
|
|
@@ -93,6 +90,10 @@ export const Avatar = ({
|
|
|
93
90
|
|
|
94
91
|
const resolvedAlt = alt || t('components.avatar.defaultAlt');
|
|
95
92
|
|
|
93
|
+
// dot indicator is not visible on larger sizes, regardless of the `showNotification` prop
|
|
94
|
+
const showNotification =
|
|
95
|
+
showNotificationProp && (size === 'sm' || size === 'md');
|
|
96
|
+
|
|
96
97
|
const accessibilityLabel = showNotification
|
|
97
98
|
? `${resolvedAlt}, ${t('components.avatar.notificationAriaLabel')}`
|
|
98
99
|
: resolvedAlt;
|
|
@@ -184,6 +184,14 @@ export const SizeShowcase: Story = {
|
|
|
184
184
|
>
|
|
185
185
|
<MediaImage src={parentSrc} size={64} shape='circle' />
|
|
186
186
|
</DotIcon>
|
|
187
|
+
<DotIcon
|
|
188
|
+
appearance='muted'
|
|
189
|
+
icon={Spinner}
|
|
190
|
+
size={mediaImageDotIconSizeMap[72]}
|
|
191
|
+
pin='bottom-end'
|
|
192
|
+
>
|
|
193
|
+
<MediaImage src={parentSrc} size={72} shape='circle' />
|
|
194
|
+
</DotIcon>
|
|
187
195
|
</Box>
|
|
188
196
|
),
|
|
189
197
|
};
|
|
@@ -16,12 +16,14 @@ const dotIconSizeMap: Record<DotIconSize, IconSize> = {
|
|
|
16
16
|
16: 12,
|
|
17
17
|
20: 16,
|
|
18
18
|
24: 16,
|
|
19
|
+
32: 20,
|
|
19
20
|
};
|
|
20
21
|
|
|
21
22
|
const dotSquareRadiusMap: Record<DotIconSize, number> = {
|
|
22
23
|
16: 5,
|
|
23
24
|
20: 6,
|
|
24
25
|
24: 8,
|
|
26
|
+
32: 10,
|
|
25
27
|
};
|
|
26
28
|
|
|
27
29
|
export const mediaImageDotIconSizeMap = {
|
|
@@ -29,13 +31,14 @@ export const mediaImageDotIconSizeMap = {
|
|
|
29
31
|
48: 20,
|
|
30
32
|
56: 24,
|
|
31
33
|
64: 24,
|
|
34
|
+
72: 32,
|
|
32
35
|
} as const satisfies Record<number, DotIconSize>;
|
|
33
36
|
|
|
34
37
|
export const spotDotIconSizeMap = {
|
|
35
38
|
40: 16,
|
|
36
39
|
48: 20,
|
|
37
40
|
56: 24,
|
|
38
|
-
72:
|
|
41
|
+
72: 32,
|
|
39
42
|
} as const satisfies Record<number, DotIconSize>;
|
|
40
43
|
|
|
41
44
|
const pinAxisMap: Record<DotIconPin, [vertical: string, horizontal: string]> = {
|
|
@@ -3,7 +3,7 @@ import type { StyleProp, TextStyle } from 'react-native';
|
|
|
3
3
|
import type { StyledViewProps } from '../../../styles';
|
|
4
4
|
import type { IconSize } from '../Icon';
|
|
5
5
|
|
|
6
|
-
export type DotIconSize = 16 | 20 | 24;
|
|
6
|
+
export type DotIconSize = 16 | 20 | 24 | 32;
|
|
7
7
|
|
|
8
8
|
export type DotIconPin =
|
|
9
9
|
| 'top-start'
|
|
@@ -24,10 +24,10 @@ import { CustomTabs, Tab } from '../../../../.storybook/components';
|
|
|
24
24
|
|
|
25
25
|
DotIndicator comes in four sizes:
|
|
26
26
|
|
|
27
|
-
- **
|
|
28
|
-
- **
|
|
29
|
-
- **
|
|
30
|
-
- **
|
|
27
|
+
- **sm** - compact dot for tight layouts.
|
|
28
|
+
- **md** (default) - standard dot for most use cases.
|
|
29
|
+
- **lg** - large dot for prominent indicators.
|
|
30
|
+
- **xl** - extra-large dot for maximum visibility.
|
|
31
31
|
|
|
32
32
|
<Canvas of={DotIndicatorStories.SizeShowcase} />
|
|
33
33
|
|
|
@@ -21,7 +21,7 @@ const meta = {
|
|
|
21
21
|
argTypes: {
|
|
22
22
|
size: {
|
|
23
23
|
control: 'radio',
|
|
24
|
-
options: ['
|
|
24
|
+
options: ['sm', 'md', 'lg', 'xl'],
|
|
25
25
|
},
|
|
26
26
|
appearance: {
|
|
27
27
|
control: 'radio',
|
|
@@ -42,10 +42,10 @@ export const Base: Story = {
|
|
|
42
42
|
export const SizeShowcase: Story = {
|
|
43
43
|
render: () => (
|
|
44
44
|
<Box lx={{ flexDirection: 'row', alignItems: 'center', gap: 's12' }}>
|
|
45
|
-
<DotIndicator size='xs' />
|
|
46
45
|
<DotIndicator size='sm' />
|
|
47
46
|
<DotIndicator size='md' />
|
|
48
47
|
<DotIndicator size='lg' />
|
|
48
|
+
<DotIndicator size='xl' />
|
|
49
49
|
</Box>
|
|
50
50
|
),
|
|
51
51
|
};
|
|
@@ -77,10 +77,10 @@ describe('DotIndicator', () => {
|
|
|
77
77
|
expect(ref.current).toBeTruthy();
|
|
78
78
|
});
|
|
79
79
|
|
|
80
|
-
it('should render in
|
|
80
|
+
it('should render in sm size', () => {
|
|
81
81
|
const { toJSON } = render(
|
|
82
82
|
<TestWrapper>
|
|
83
|
-
<DotIndicator size='
|
|
83
|
+
<DotIndicator size='sm' />
|
|
84
84
|
</TestWrapper>,
|
|
85
85
|
);
|
|
86
86
|
|
|
@@ -107,6 +107,16 @@ describe('DotIndicator', () => {
|
|
|
107
107
|
expect(toJSON()).toBeTruthy();
|
|
108
108
|
});
|
|
109
109
|
|
|
110
|
+
it('should render in xl size', () => {
|
|
111
|
+
const { toJSON } = render(
|
|
112
|
+
<TestWrapper>
|
|
113
|
+
<DotIndicator size='xl' />
|
|
114
|
+
</TestWrapper>,
|
|
115
|
+
);
|
|
116
|
+
|
|
117
|
+
expect(toJSON()).toBeTruthy();
|
|
118
|
+
});
|
|
119
|
+
|
|
110
120
|
it('should render with red appearance', () => {
|
|
111
121
|
const { toJSON } = render(
|
|
112
122
|
<TestWrapper>
|
|
@@ -5,7 +5,7 @@ import { Box } from '../Utility';
|
|
|
5
5
|
import type { DotIndicatorProps } from './types';
|
|
6
6
|
|
|
7
7
|
export function DotIndicator({
|
|
8
|
-
size = '
|
|
8
|
+
size = 'md',
|
|
9
9
|
appearance = 'base',
|
|
10
10
|
disabled: disabledProp = false,
|
|
11
11
|
lx = {},
|
|
@@ -63,10 +63,10 @@ const useStyles = ({
|
|
|
63
63
|
return useStyleSheet(
|
|
64
64
|
(t) => {
|
|
65
65
|
const sizeMap = {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
66
|
+
sm: t.sizes.s6,
|
|
67
|
+
md: t.sizes.s8,
|
|
68
|
+
lg: t.sizes.s10,
|
|
69
|
+
xl: t.sizes.s12,
|
|
70
70
|
};
|
|
71
71
|
|
|
72
72
|
const bgColorMap = {
|
|
@@ -4,9 +4,9 @@ import type { StyledViewProps } from '../../../styles';
|
|
|
4
4
|
export type DotIndicatorProps = {
|
|
5
5
|
/**
|
|
6
6
|
* The size of the dot indicator.
|
|
7
|
-
* @default
|
|
7
|
+
* @default md
|
|
8
8
|
*/
|
|
9
|
-
size?: '
|
|
9
|
+
size?: 'sm' | 'md' | 'lg' | 'xl';
|
|
10
10
|
/**
|
|
11
11
|
* The appearance of the dot indicator.
|
|
12
12
|
* @default base
|
|
@@ -163,6 +163,13 @@ export const SizeShowcase: Story = {
|
|
|
163
163
|
>
|
|
164
164
|
<MediaImage src={parentSrc} size={64} shape='circle' />
|
|
165
165
|
</DotSymbol>
|
|
166
|
+
<DotSymbol
|
|
167
|
+
src={dotSrc}
|
|
168
|
+
size={mediaImageDotSizeMap[72]}
|
|
169
|
+
pin='bottom-end'
|
|
170
|
+
>
|
|
171
|
+
<MediaImage src={parentSrc} size={72} shape='circle' />
|
|
172
|
+
</DotSymbol>
|
|
166
173
|
</Box>
|
|
167
174
|
<Box lx={{ flexDirection: 'row', alignItems: 'flex-end', gap: 's24' }}>
|
|
168
175
|
<DotSymbol
|
|
@@ -221,6 +228,14 @@ export const SizeShowcase: Story = {
|
|
|
221
228
|
>
|
|
222
229
|
<MediaImage src={parentSrc} size={64} shape='square' />
|
|
223
230
|
</DotSymbol>
|
|
231
|
+
<DotSymbol
|
|
232
|
+
shape='square'
|
|
233
|
+
src={dotSrc}
|
|
234
|
+
size={mediaImageDotSizeMap[72]}
|
|
235
|
+
pin='bottom-end'
|
|
236
|
+
>
|
|
237
|
+
<MediaImage src={parentSrc} size={72} shape='square' />
|
|
238
|
+
</DotSymbol>
|
|
224
239
|
</Box>
|
|
225
240
|
</Box>
|
|
226
241
|
),
|
|
@@ -17,6 +17,7 @@ const dotSquareRadiusMap: Record<DotSymbolSize, number> = {
|
|
|
17
17
|
16: 5,
|
|
18
18
|
20: 6,
|
|
19
19
|
24: 8,
|
|
20
|
+
32: 10,
|
|
20
21
|
};
|
|
21
22
|
|
|
22
23
|
const offsetBySize: Record<DotSymbolSize, number> = {
|
|
@@ -26,6 +27,7 @@ const offsetBySize: Record<DotSymbolSize, number> = {
|
|
|
26
27
|
16: -3,
|
|
27
28
|
20: -3,
|
|
28
29
|
24: -3,
|
|
30
|
+
32: -3,
|
|
29
31
|
};
|
|
30
32
|
|
|
31
33
|
export const mediaImageDotSizeMap: Record<MediaImageSize, DotSymbolSize> = {
|
|
@@ -38,6 +40,7 @@ export const mediaImageDotSizeMap: Record<MediaImageSize, DotSymbolSize> = {
|
|
|
38
40
|
48: 20,
|
|
39
41
|
56: 24,
|
|
40
42
|
64: 24,
|
|
43
|
+
72: 32,
|
|
41
44
|
};
|
|
42
45
|
|
|
43
46
|
export const spotDotSizeMap: Record<SpotSize, DotSymbolSize> = {
|
|
@@ -45,7 +48,7 @@ export const spotDotSizeMap: Record<SpotSize, DotSymbolSize> = {
|
|
|
45
48
|
40: 16,
|
|
46
49
|
48: 20,
|
|
47
50
|
56: 24,
|
|
48
|
-
72:
|
|
51
|
+
72: 32,
|
|
49
52
|
};
|
|
50
53
|
|
|
51
54
|
const pinAxisMap: Record<DotSymbolPin, [vertical: string, horizontal: string]> =
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
2
|
import type { StyledViewProps } from '../../../styles';
|
|
3
3
|
|
|
4
|
-
export type DotSymbolSize = 8 | 10 | 12 | 16 | 20 | 24;
|
|
4
|
+
export type DotSymbolSize = 8 | 10 | 12 | 16 | 20 | 24 | 32;
|
|
5
5
|
|
|
6
6
|
export type DotSymbolPin =
|
|
7
7
|
| 'top-start'
|
|
@@ -19,7 +19,7 @@ const useStyles = ({ disabled }: { disabled: boolean }) => {
|
|
|
19
19
|
* A label that should be used to describe a form field.
|
|
20
20
|
*
|
|
21
21
|
* Either choices fields like checkbox, switch or radio.
|
|
22
|
-
* Or text fields like input, textarea,
|
|
22
|
+
* Or text fields like input, textarea, option list, etc.
|
|
23
23
|
*/
|
|
24
24
|
export const Label = ({
|
|
25
25
|
style,
|
|
@@ -11,11 +11,11 @@ import * as MediaButtonStories from './MediaButton.stories';
|
|
|
11
11
|
|
|
12
12
|
## Introduction
|
|
13
13
|
|
|
14
|
-
A specialized media button designed exclusively for
|
|
14
|
+
A specialized media button designed exclusively for option list and dropdown patterns. It displays a label with an optional leading icon and a permanent trailing chevron indicator.
|
|
15
15
|
|
|
16
16
|
> View in [Figma](https://www.figma.com/design/JxaLVMTWirCpU0rsbZ30k7/2.-Components-Library?node-id=6389-45680&m=dev).
|
|
17
17
|
|
|
18
|
-
> **Important**: This component should only be used as a trigger inside
|
|
18
|
+
> **Important**: This component should only be used as a trigger inside an OptionList or dropdown. For standalone actions, use [Button](/docs/action-button--docs) or [IconButton](/docs/action-iconbutton--docs) instead.
|
|
19
19
|
|
|
20
20
|
## Properties
|
|
21
21
|
|
|
@@ -132,10 +132,10 @@ const useStyles = ({
|
|
|
132
132
|
};
|
|
133
133
|
|
|
134
134
|
/**
|
|
135
|
-
* Media button for
|
|
135
|
+
* Media button for option list/dropdown components. Displays a label with an optional
|
|
136
136
|
* leading content and a trailing chevron indicator.
|
|
137
137
|
*
|
|
138
|
-
* This component is intended to be used exclusively as the trigger inside
|
|
138
|
+
* This component is intended to be used exclusively as the trigger inside an OptionList or
|
|
139
139
|
* dropdown pattern. It should not be used as a standalone action button — use `Button`
|
|
140
140
|
* or `IconButton` instead.
|
|
141
141
|
*
|
|
@@ -37,7 +37,7 @@ MediaImage displays an image with consistent sizing and shape. When the image fa
|
|
|
37
37
|
|
|
38
38
|
### Sizes
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
Ten sizes are available (12, 16, 20, 24, 32, 40, 48, 56, 64, 72). Border radius scales with size.
|
|
41
41
|
|
|
42
42
|
<Canvas of={MediaImageStories.SizeShowcase} />
|
|
43
43
|
|
|
@@ -42,6 +42,7 @@ export const SizeShowcase: Story = {
|
|
|
42
42
|
<MediaImage src={exampleSrc} alt='Size 48' size={48} />
|
|
43
43
|
<MediaImage src={exampleSrc} alt='Size 56' size={56} />
|
|
44
44
|
<MediaImage src={exampleSrc} alt='Size 64' size={64} />
|
|
45
|
+
<MediaImage src={exampleSrc} alt='Size 72' size={72} />
|
|
45
46
|
</Box>
|
|
46
47
|
),
|
|
47
48
|
};
|
|
@@ -67,6 +68,7 @@ export const FallbackShowcase: Story = {
|
|
|
67
68
|
<MediaImage fallback='Bitcoin' alt='Bitcoin' size={48} />
|
|
68
69
|
<MediaImage fallback='Bitcoin' alt='Bitcoin' size={56} />
|
|
69
70
|
<MediaImage fallback='Bitcoin' alt='Bitcoin' size={64} />
|
|
71
|
+
<MediaImage fallback='Bitcoin' alt='Bitcoin' size={72} />
|
|
70
72
|
</Box>
|
|
71
73
|
),
|
|
72
74
|
};
|
|
@@ -83,6 +85,7 @@ export const LoadingShowcase: Story = {
|
|
|
83
85
|
<MediaImage loading alt='Loading' size={48} />
|
|
84
86
|
<MediaImage loading alt='Loading' size={56} />
|
|
85
87
|
<MediaImage loading alt='Loading' size={64} />
|
|
88
|
+
<MediaImage loading alt='Loading' size={72} />
|
|
86
89
|
</Box>
|
|
87
90
|
),
|
|
88
91
|
};
|
|
@@ -20,6 +20,7 @@ const borderRadiusMap: Record<MediaImageSize, BorderRadiusKey> = {
|
|
|
20
20
|
48: 'md',
|
|
21
21
|
56: 'lg',
|
|
22
22
|
64: 'lg',
|
|
23
|
+
72: 'lg',
|
|
23
24
|
};
|
|
24
25
|
|
|
25
26
|
export const fontSizeMap: Record<MediaImageSize, number> = {
|
|
@@ -32,6 +33,7 @@ export const fontSizeMap: Record<MediaImageSize, number> = {
|
|
|
32
33
|
48: 24,
|
|
33
34
|
56: 24,
|
|
34
35
|
64: 24,
|
|
36
|
+
72: 32,
|
|
35
37
|
};
|
|
36
38
|
|
|
37
39
|
const useStyles = ({
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { StyledViewProps } from '../../../styles';
|
|
2
2
|
|
|
3
|
-
export type MediaImageSize = 12 | 16 | 20 | 24 | 32 | 40 | 48 | 56 | 64;
|
|
3
|
+
export type MediaImageSize = 12 | 16 | 20 | 24 | 32 | 40 | 48 | 56 | 64 | 72;
|
|
4
4
|
|
|
5
5
|
export type MediaImageShape = 'square' | 'circle';
|
|
6
6
|
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
|
|
18
18
|
## Introduction
|
|
19
19
|
|
|
20
|
-
OptionList is a data-driven, composable selection list designed to be embedded inside a `BottomSheet`, a new screen, or any container.
|
|
20
|
+
OptionList is a data-driven, composable selection list designed to be embedded inside a `BottomSheet`, a new screen, or any container.
|
|
21
21
|
|
|
22
22
|
It handles **selection state**, **automatic grouping** (via a `group` field on items), and exposes a `renderItem` callback for full control over item rendering.
|
|
23
23
|
|
|
@@ -3,7 +3,6 @@ import { createSafeContext } from '@ledgerhq/lumen-utils-shared';
|
|
|
3
3
|
import { I18nProvider } from '../../../i18n';
|
|
4
4
|
import { LumenStyleSheetProvider } from '../../../styles';
|
|
5
5
|
|
|
6
|
-
import { GlobalSelectProvider } from '../Select/GlobalSelectContext';
|
|
7
6
|
import { GlobalTooltipProvider } from '../Tooltip/GlobalTooltipContext';
|
|
8
7
|
import type { ThemeProviderProps } from './types';
|
|
9
8
|
|
|
@@ -19,9 +18,7 @@ const ThemeProvider = ({
|
|
|
19
18
|
<ThemeContextProvider value={{}}>
|
|
20
19
|
<LumenStyleSheetProvider colorScheme={colorScheme} themes={themes}>
|
|
21
20
|
<I18nProvider locale={locale}>
|
|
22
|
-
<
|
|
23
|
-
<GlobalTooltipProvider>{children}</GlobalTooltipProvider>
|
|
24
|
-
</GlobalSelectProvider>
|
|
21
|
+
<GlobalTooltipProvider>{children}</GlobalTooltipProvider>
|
|
25
22
|
</I18nProvider>
|
|
26
23
|
</LumenStyleSheetProvider>
|
|
27
24
|
</ThemeContextProvider>
|
|
@@ -33,13 +33,13 @@ import createIcon from '../../Components/Icon/createIcon';
|
|
|
33
33
|
*/
|
|
34
34
|
export const Lightbulb = createIcon(
|
|
35
35
|
'Lightbulb',
|
|
36
|
-
<Svg width={24} height={24} fill='currentColor' viewBox='0 0
|
|
36
|
+
<Svg width={24} height={24} fill='currentColor' viewBox='0 0 16 16'>
|
|
37
37
|
<Path
|
|
38
38
|
stroke='currentColor'
|
|
39
39
|
strokeLinecap='round'
|
|
40
40
|
strokeLinejoin='round'
|
|
41
|
-
strokeWidth={1.
|
|
42
|
-
d='
|
|
41
|
+
strokeWidth={1.3}
|
|
42
|
+
d='M10 10.127H6m7.333-6.794.794-.793M2.667 10l-.794.793m1.46-8.126-.793-.794M13.333 10l.794.793M14 6.667h1.127m-14.254 0H2M6 12h3.913m-4.22-2.07a3.99 3.99 0 0 1-1.646-3.906c.266-1.738 1.713-3.125 3.466-3.33a3.997 3.997 0 0 1 4.484 3.967c0 1.346-.674 2.54-1.7 3.265a.67.67 0 0 0-.307.553v1.84c0 .92-.747 1.667-1.667 1.667h-.666a1.663 1.663 0 0 1-1.667-1.667v-1.842a.71.71 0 0 0-.307-.566z'
|
|
43
43
|
/>
|
|
44
44
|
</Svg>,
|
|
45
45
|
);
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
import { useCallback, useEffect } from 'react';
|
|
4
|
-
import { Pressable } from 'react-native';
|
|
5
|
-
import { useStyleSheet } from "../../../styles/index.js";
|
|
6
|
-
import { Check } from "../../Symbols/index.js";
|
|
7
|
-
import { BottomSheet, BottomSheetHeader, BottomSheetView, useBottomSheetRef } from "../BottomSheet/index.js";
|
|
8
|
-
import { Divider } from "../Divider/index.js";
|
|
9
|
-
import { Box, Text } from "../Utility/index.js";
|
|
10
|
-
import { useGlobalSelectSafeContext } from "./GlobalSelectContext.js";
|
|
11
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
12
|
-
const useStyles = () => {
|
|
13
|
-
return useStyleSheet(t => ({
|
|
14
|
-
bottomSheetView: {
|
|
15
|
-
paddingHorizontal: t.spacings.s8
|
|
16
|
-
},
|
|
17
|
-
groupLabel: {
|
|
18
|
-
marginBottom: t.spacings.s4,
|
|
19
|
-
paddingHorizontal: t.spacings.s8,
|
|
20
|
-
paddingTop: t.spacings.s8,
|
|
21
|
-
color: t.colors.text.muted,
|
|
22
|
-
...t.typographies.body3SemiBold
|
|
23
|
-
},
|
|
24
|
-
item: {
|
|
25
|
-
flexDirection: 'row',
|
|
26
|
-
alignItems: 'center',
|
|
27
|
-
borderRadius: t.borderRadius.sm,
|
|
28
|
-
padding: t.spacings.s8,
|
|
29
|
-
backgroundColor: t.colors.bg.baseTransparent
|
|
30
|
-
},
|
|
31
|
-
itemPressed: {
|
|
32
|
-
backgroundColor: t.colors.bg.baseTransparentPressed
|
|
33
|
-
},
|
|
34
|
-
itemDisabled: {
|
|
35
|
-
opacity: 0.5
|
|
36
|
-
},
|
|
37
|
-
itemLabel: {
|
|
38
|
-
flex: 1,
|
|
39
|
-
color: t.colors.text.base,
|
|
40
|
-
...t.typographies.body2
|
|
41
|
-
},
|
|
42
|
-
itemLabelDisabled: {
|
|
43
|
-
color: t.colors.text.disabled
|
|
44
|
-
}
|
|
45
|
-
}), []);
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* BottomSheet component that displays select options.
|
|
50
|
-
* This should be placed at the root level inside GestureHandlerRootView.
|
|
51
|
-
*
|
|
52
|
-
* @see {@link https://ldls.vercel.app/?path=/docs/components-select-overview--docs Storybook}
|
|
53
|
-
*
|
|
54
|
-
* @example
|
|
55
|
-
* import { GlobalSelectProvider, GlobalSelectBottomSheet } from '@ledgerhq/lumen-ui-rnative';
|
|
56
|
-
*
|
|
57
|
-
* function App() {
|
|
58
|
-
* return (
|
|
59
|
-
* <GestureHandlerRootView>
|
|
60
|
-
* <YourAppContent />
|
|
61
|
-
* <GlobalSelectBottomSheet />
|
|
62
|
-
* </GestureHandlerRootView>
|
|
63
|
-
* );
|
|
64
|
-
* }
|
|
65
|
-
*/
|
|
66
|
-
export const GlobalSelectBottomSheet = () => {
|
|
67
|
-
const bottomSheetRef = useBottomSheetRef();
|
|
68
|
-
const styles = useStyles();
|
|
69
|
-
/**
|
|
70
|
-
* This is the only component that subscribes to currentSelect
|
|
71
|
-
* All other components use refs to avoid re-renders
|
|
72
|
-
*/
|
|
73
|
-
const {
|
|
74
|
-
currentSelect,
|
|
75
|
-
hideSelectRef
|
|
76
|
-
} = useGlobalSelectSafeContext({
|
|
77
|
-
consumerName: 'useGlobalSelectBottomSheetContext',
|
|
78
|
-
contextRequired: true
|
|
79
|
-
});
|
|
80
|
-
useEffect(() => {
|
|
81
|
-
if (currentSelect) {
|
|
82
|
-
bottomSheetRef.current?.present();
|
|
83
|
-
} else {
|
|
84
|
-
bottomSheetRef.current?.dismiss();
|
|
85
|
-
}
|
|
86
|
-
}, [currentSelect, bottomSheetRef]);
|
|
87
|
-
const handleClose = useCallback(() => {
|
|
88
|
-
currentSelect?.setOpen?.(false);
|
|
89
|
-
hideSelectRef.current();
|
|
90
|
-
}, [hideSelectRef, currentSelect]);
|
|
91
|
-
const handleSelectItem = useCallback(value => {
|
|
92
|
-
if (currentSelect) {
|
|
93
|
-
currentSelect.onSelectValue(value);
|
|
94
|
-
currentSelect.setOpen?.(false);
|
|
95
|
-
hideSelectRef.current();
|
|
96
|
-
}
|
|
97
|
-
}, [currentSelect, hideSelectRef]);
|
|
98
|
-
return /*#__PURE__*/_jsx(BottomSheet, {
|
|
99
|
-
ref: bottomSheetRef,
|
|
100
|
-
snapPoints: null,
|
|
101
|
-
backdropPressBehavior: "close",
|
|
102
|
-
onClose: handleClose,
|
|
103
|
-
maxDynamicContentSize: "fullWithOffset",
|
|
104
|
-
enableDynamicSizing: true,
|
|
105
|
-
enablePanDownToClose: true,
|
|
106
|
-
children: /*#__PURE__*/_jsx(BottomSheetView, {
|
|
107
|
-
style: styles.bottomSheetView,
|
|
108
|
-
children: currentSelect && /*#__PURE__*/_jsxs(_Fragment, {
|
|
109
|
-
children: [currentSelect.label && /*#__PURE__*/_jsx(BottomSheetHeader, {
|
|
110
|
-
title: currentSelect.label,
|
|
111
|
-
density: "compact"
|
|
112
|
-
}), /*#__PURE__*/_jsx(Box, {
|
|
113
|
-
lx: {
|
|
114
|
-
gap: 's4'
|
|
115
|
-
},
|
|
116
|
-
children: currentSelect.items.map((item, index) => {
|
|
117
|
-
if (item.type === 'separator') {
|
|
118
|
-
return /*#__PURE__*/_jsx(Divider, {
|
|
119
|
-
lx: {
|
|
120
|
-
marginVertical: 's4',
|
|
121
|
-
marginHorizontal: 's8'
|
|
122
|
-
}
|
|
123
|
-
}, `separator-${index}`);
|
|
124
|
-
}
|
|
125
|
-
if (item.type === 'group-label') {
|
|
126
|
-
return /*#__PURE__*/_jsx(Text, {
|
|
127
|
-
style: styles.groupLabel,
|
|
128
|
-
children: item.label
|
|
129
|
-
}, `label-${index}`);
|
|
130
|
-
}
|
|
131
|
-
const isSelected = currentSelect.selectedValue === item.value;
|
|
132
|
-
return /*#__PURE__*/_jsx(Pressable, {
|
|
133
|
-
disabled: item.disabled,
|
|
134
|
-
onPress: () => handleSelectItem(item.value),
|
|
135
|
-
children: ({
|
|
136
|
-
pressed
|
|
137
|
-
}) => /*#__PURE__*/_jsxs(Box, {
|
|
138
|
-
style: [styles.item, pressed && styles.itemPressed, item.disabled && styles.itemDisabled],
|
|
139
|
-
children: [/*#__PURE__*/_jsx(Text, {
|
|
140
|
-
style: [styles.itemLabel, item.disabled && styles.itemLabelDisabled],
|
|
141
|
-
numberOfLines: 1,
|
|
142
|
-
children: item.label
|
|
143
|
-
}), isSelected && /*#__PURE__*/_jsx(Check, {
|
|
144
|
-
size: 24,
|
|
145
|
-
color: "active"
|
|
146
|
-
})]
|
|
147
|
-
})
|
|
148
|
-
}, item.value);
|
|
149
|
-
})
|
|
150
|
-
})]
|
|
151
|
-
})
|
|
152
|
-
})
|
|
153
|
-
});
|
|
154
|
-
};
|
|
155
|
-
//# sourceMappingURL=GlobalSelectBottomSheet.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useEffect","Pressable","useStyleSheet","Check","BottomSheet","BottomSheetHeader","BottomSheetView","useBottomSheetRef","Divider","Box","Text","useGlobalSelectSafeContext","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","useStyles","t","bottomSheetView","paddingHorizontal","spacings","s8","groupLabel","marginBottom","s4","paddingTop","color","colors","text","muted","typographies","body3SemiBold","item","flexDirection","alignItems","borderRadius","sm","padding","backgroundColor","bg","baseTransparent","itemPressed","baseTransparentPressed","itemDisabled","opacity","itemLabel","flex","base","body2","itemLabelDisabled","disabled","GlobalSelectBottomSheet","bottomSheetRef","styles","currentSelect","hideSelectRef","consumerName","contextRequired","current","present","dismiss","handleClose","setOpen","handleSelectItem","value","onSelectValue","ref","snapPoints","backdropPressBehavior","onClose","maxDynamicContentSize","enableDynamicSizing","enablePanDownToClose","children","style","label","title","density","lx","gap","items","map","index","type","marginVertical","marginHorizontal","isSelected","selectedValue","onPress","pressed","numberOfLines","size"],"sourceRoot":"../../../../../src","sources":["lib/Components/Select/GlobalSelectBottomSheet.tsx"],"mappings":"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","ignoreList":[]}
|