@ledgerhq/lumen-ui-rnative 0.1.37 → 0.1.39

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 (147) hide show
  1. package/dist/module/lib/Components/AmountInput/AmountInput.js +109 -72
  2. package/dist/module/lib/Components/AmountInput/AmountInput.js.map +1 -1
  3. package/dist/module/lib/Components/AmountInput/AmountInput.mdx +12 -0
  4. package/dist/module/lib/Components/AmountInput/AmountInput.stories.js +53 -0
  5. package/dist/module/lib/Components/AmountInput/AmountInput.stories.js.map +1 -1
  6. package/dist/module/lib/Components/Avatar/Avatar.js +6 -5
  7. package/dist/module/lib/Components/Avatar/Avatar.js.map +1 -1
  8. package/dist/module/lib/Components/Avatar/Avatar.mdx +2 -0
  9. package/dist/module/lib/Components/Avatar/Avatar.test.js +10 -13
  10. package/dist/module/lib/Components/Avatar/Avatar.test.js.map +1 -1
  11. package/dist/module/lib/Components/BottomSheet/BottomSheet.js +3 -1
  12. package/dist/module/lib/Components/BottomSheet/BottomSheet.js.map +1 -1
  13. package/dist/module/lib/Components/BottomSheet/BottomSheet.stories.js +1 -0
  14. package/dist/module/lib/Components/BottomSheet/BottomSheet.stories.js.map +1 -1
  15. package/dist/module/lib/Components/BottomSheet/BottomSheet.test.js +33 -1
  16. package/dist/module/lib/Components/BottomSheet/BottomSheet.test.js.map +1 -1
  17. package/dist/module/lib/Components/BottomSheet/BottomSheetHeader.js +7 -3
  18. package/dist/module/lib/Components/BottomSheet/BottomSheetHeader.js.map +1 -1
  19. package/dist/module/lib/Components/DotIcon/DotIcon.js +7 -4
  20. package/dist/module/lib/Components/DotIcon/DotIcon.js.map +1 -1
  21. package/dist/module/lib/Components/DotIcon/DotIcon.stories.js +10 -0
  22. package/dist/module/lib/Components/DotIcon/DotIcon.stories.js.map +1 -1
  23. package/dist/module/lib/Components/DotIndicator/DotIndicator.js +5 -5
  24. package/dist/module/lib/Components/DotIndicator/DotIndicator.js.map +1 -1
  25. package/dist/module/lib/Components/DotIndicator/DotIndicator.mdx +4 -4
  26. package/dist/module/lib/Components/DotIndicator/DotIndicator.stories.js +3 -3
  27. package/dist/module/lib/Components/DotIndicator/DotIndicator.test.js +12 -2
  28. package/dist/module/lib/Components/DotIndicator/DotIndicator.test.js.map +1 -1
  29. package/dist/module/lib/Components/DotSymbol/DotSymbol.js +7 -4
  30. package/dist/module/lib/Components/DotSymbol/DotSymbol.js.map +1 -1
  31. package/dist/module/lib/Components/DotSymbol/DotSymbol.stories.js +19 -0
  32. package/dist/module/lib/Components/DotSymbol/DotSymbol.stories.js.map +1 -1
  33. package/dist/module/lib/Components/Label/Label.js +1 -1
  34. package/dist/module/lib/Components/MediaButton/MediaButton.js +2 -2
  35. package/dist/module/lib/Components/MediaButton/MediaButton.mdx +2 -2
  36. package/dist/module/lib/Components/MediaImage/MediaImage.js +4 -2
  37. package/dist/module/lib/Components/MediaImage/MediaImage.js.map +1 -1
  38. package/dist/module/lib/Components/MediaImage/MediaImage.mdx +1 -1
  39. package/dist/module/lib/Components/MediaImage/MediaImage.stories.js +12 -0
  40. package/dist/module/lib/Components/MediaImage/MediaImage.stories.js.map +1 -1
  41. package/dist/module/lib/Components/OptionList/OptionList.mdx +1 -1
  42. package/dist/module/lib/Components/ThemeProvider/ThemeProvider.js +2 -5
  43. package/dist/module/lib/Components/ThemeProvider/ThemeProvider.js.map +1 -1
  44. package/dist/module/lib/Components/index.js +0 -1
  45. package/dist/module/lib/Components/index.js.map +1 -1
  46. package/dist/module/lib/Symbols/Icons/Lightbulb.js +3 -3
  47. package/dist/module/lib/Symbols/Icons/Lightbulb.js.map +1 -1
  48. package/dist/typescript/src/lib/Components/AmountInput/AmountInput.d.ts +1 -1
  49. package/dist/typescript/src/lib/Components/AmountInput/AmountInput.d.ts.map +1 -1
  50. package/dist/typescript/src/lib/Components/AmountInput/types.d.ts +12 -0
  51. package/dist/typescript/src/lib/Components/AmountInput/types.d.ts.map +1 -1
  52. package/dist/typescript/src/lib/Components/Avatar/Avatar.d.ts +1 -1
  53. package/dist/typescript/src/lib/Components/Avatar/Avatar.d.ts.map +1 -1
  54. package/dist/typescript/src/lib/Components/BottomSheet/BottomSheet.d.ts +2 -2
  55. package/dist/typescript/src/lib/Components/BottomSheet/BottomSheet.d.ts.map +1 -1
  56. package/dist/typescript/src/lib/Components/BottomSheet/BottomSheetHeader.d.ts.map +1 -1
  57. package/dist/typescript/src/lib/Components/BottomSheet/types.d.ts +9 -0
  58. package/dist/typescript/src/lib/Components/BottomSheet/types.d.ts.map +1 -1
  59. package/dist/typescript/src/lib/Components/DotIcon/DotIcon.d.ts +2 -1
  60. package/dist/typescript/src/lib/Components/DotIcon/DotIcon.d.ts.map +1 -1
  61. package/dist/typescript/src/lib/Components/DotIcon/types.d.ts +1 -1
  62. package/dist/typescript/src/lib/Components/DotIcon/types.d.ts.map +1 -1
  63. package/dist/typescript/src/lib/Components/DotIndicator/types.d.ts +2 -2
  64. package/dist/typescript/src/lib/Components/DotSymbol/DotSymbol.d.ts.map +1 -1
  65. package/dist/typescript/src/lib/Components/DotSymbol/types.d.ts +1 -1
  66. package/dist/typescript/src/lib/Components/DotSymbol/types.d.ts.map +1 -1
  67. package/dist/typescript/src/lib/Components/Label/Label.d.ts +1 -1
  68. package/dist/typescript/src/lib/Components/MediaButton/MediaButton.d.ts +2 -2
  69. package/dist/typescript/src/lib/Components/MediaImage/MediaImage.d.ts.map +1 -1
  70. package/dist/typescript/src/lib/Components/MediaImage/types.d.ts +1 -1
  71. package/dist/typescript/src/lib/Components/MediaImage/types.d.ts.map +1 -1
  72. package/dist/typescript/src/lib/Components/ThemeProvider/ThemeProvider.d.ts.map +1 -1
  73. package/dist/typescript/src/lib/Components/index.d.ts +0 -1
  74. package/dist/typescript/src/lib/Components/index.d.ts.map +1 -1
  75. package/package.json +3 -3
  76. package/src/lib/Components/AmountInput/AmountInput.mdx +12 -0
  77. package/src/lib/Components/AmountInput/AmountInput.stories.tsx +68 -1
  78. package/src/lib/Components/AmountInput/AmountInput.tsx +118 -75
  79. package/src/lib/Components/AmountInput/types.ts +14 -0
  80. package/src/lib/Components/Avatar/Avatar.mdx +2 -0
  81. package/src/lib/Components/Avatar/Avatar.test.tsx +16 -18
  82. package/src/lib/Components/Avatar/Avatar.tsx +9 -8
  83. package/src/lib/Components/BottomSheet/BottomSheet.stories.tsx +1 -0
  84. package/src/lib/Components/BottomSheet/BottomSheet.test.tsx +32 -1
  85. package/src/lib/Components/BottomSheet/BottomSheet.tsx +10 -4
  86. package/src/lib/Components/BottomSheet/BottomSheetHeader.tsx +10 -6
  87. package/src/lib/Components/BottomSheet/types.ts +9 -0
  88. package/src/lib/Components/DotIcon/DotIcon.stories.tsx +8 -0
  89. package/src/lib/Components/DotIcon/DotIcon.tsx +4 -1
  90. package/src/lib/Components/DotIcon/types.ts +1 -1
  91. package/src/lib/Components/DotIndicator/DotIndicator.mdx +4 -4
  92. package/src/lib/Components/DotIndicator/DotIndicator.stories.tsx +2 -2
  93. package/src/lib/Components/DotIndicator/DotIndicator.test.tsx +12 -2
  94. package/src/lib/Components/DotIndicator/DotIndicator.tsx +5 -5
  95. package/src/lib/Components/DotIndicator/types.ts +2 -2
  96. package/src/lib/Components/DotSymbol/DotSymbol.stories.tsx +15 -0
  97. package/src/lib/Components/DotSymbol/DotSymbol.tsx +4 -1
  98. package/src/lib/Components/DotSymbol/types.ts +1 -1
  99. package/src/lib/Components/Label/Label.tsx +1 -1
  100. package/src/lib/Components/MediaButton/MediaButton.mdx +2 -2
  101. package/src/lib/Components/MediaButton/MediaButton.tsx +2 -2
  102. package/src/lib/Components/MediaImage/MediaImage.mdx +1 -1
  103. package/src/lib/Components/MediaImage/MediaImage.stories.tsx +3 -0
  104. package/src/lib/Components/MediaImage/MediaImage.tsx +2 -0
  105. package/src/lib/Components/MediaImage/types.ts +1 -1
  106. package/src/lib/Components/OptionList/OptionList.mdx +1 -1
  107. package/src/lib/Components/ThemeProvider/ThemeProvider.tsx +1 -4
  108. package/src/lib/Components/index.ts +0 -1
  109. package/src/lib/Symbols/Icons/Lightbulb.tsx +3 -3
  110. package/dist/module/lib/Components/Select/GlobalSelectBottomSheet.js +0 -155
  111. package/dist/module/lib/Components/Select/GlobalSelectBottomSheet.js.map +0 -1
  112. package/dist/module/lib/Components/Select/GlobalSelectContext.js +0 -78
  113. package/dist/module/lib/Components/Select/GlobalSelectContext.js.map +0 -1
  114. package/dist/module/lib/Components/Select/Select.js +0 -366
  115. package/dist/module/lib/Components/Select/Select.js.map +0 -1
  116. package/dist/module/lib/Components/Select/Select.mdx +0 -596
  117. package/dist/module/lib/Components/Select/Select.stories.js +0 -304
  118. package/dist/module/lib/Components/Select/Select.stories.js.map +0 -1
  119. package/dist/module/lib/Components/Select/Select.test.js +0 -123
  120. package/dist/module/lib/Components/Select/Select.test.js.map +0 -1
  121. package/dist/module/lib/Components/Select/SelectContext.js +0 -38
  122. package/dist/module/lib/Components/Select/SelectContext.js.map +0 -1
  123. package/dist/module/lib/Components/Select/index.js +0 -6
  124. package/dist/module/lib/Components/Select/index.js.map +0 -1
  125. package/dist/module/lib/Components/Select/types.js +0 -4
  126. package/dist/module/lib/Components/Select/types.js.map +0 -1
  127. package/dist/typescript/src/lib/Components/Select/GlobalSelectBottomSheet.d.ts +0 -20
  128. package/dist/typescript/src/lib/Components/Select/GlobalSelectBottomSheet.d.ts.map +0 -1
  129. package/dist/typescript/src/lib/Components/Select/GlobalSelectContext.d.ts +0 -44
  130. package/dist/typescript/src/lib/Components/Select/GlobalSelectContext.d.ts.map +0 -1
  131. package/dist/typescript/src/lib/Components/Select/Select.d.ts +0 -52
  132. package/dist/typescript/src/lib/Components/Select/Select.d.ts.map +0 -1
  133. package/dist/typescript/src/lib/Components/Select/SelectContext.d.ts +0 -36
  134. package/dist/typescript/src/lib/Components/Select/SelectContext.d.ts.map +0 -1
  135. package/dist/typescript/src/lib/Components/Select/index.d.ts +0 -4
  136. package/dist/typescript/src/lib/Components/Select/index.d.ts.map +0 -1
  137. package/dist/typescript/src/lib/Components/Select/types.d.ts +0 -130
  138. package/dist/typescript/src/lib/Components/Select/types.d.ts.map +0 -1
  139. package/src/lib/Components/Select/GlobalSelectBottomSheet.tsx +0 -180
  140. package/src/lib/Components/Select/GlobalSelectContext.tsx +0 -103
  141. package/src/lib/Components/Select/Select.mdx +0 -596
  142. package/src/lib/Components/Select/Select.stories.tsx +0 -266
  143. package/src/lib/Components/Select/Select.test.tsx +0 -117
  144. package/src/lib/Components/Select/Select.tsx +0 -469
  145. package/src/lib/Components/Select/SelectContext.tsx +0 -68
  146. package/src/lib/Components/Select/index.ts +0 -3
  147. package/src/lib/Components/Select/types.ts +0 -149
@@ -57,14 +57,18 @@ const useStyles = ({
57
57
  };
58
58
 
59
59
  const [BottomSheetProvider, useBottomSheetContext] =
60
- createSafeContext<Pick<BottomSheetProps, 'onBack' | 'hideCloseButton'>>(
61
- 'BottomSheet',
62
- );
60
+ createSafeContext<
61
+ Pick<
62
+ BottomSheetProps,
63
+ 'onBack' | 'hideCloseButton' | 'onHeaderClosePressed'
64
+ >
65
+ >('BottomSheet');
63
66
 
64
67
  export const BottomSheet = ({
65
68
  onOpen,
66
69
  onClose,
67
70
  onDismiss,
71
+ onHeaderClosePressed,
68
72
  onBack,
69
73
  onAnimate,
70
74
  children,
@@ -203,7 +207,9 @@ export const BottomSheet = ({
203
207
  handleComponent={hideHandle ? HiddenHandle : CustomHandle}
204
208
  backdropComponent={hideBackdrop ? undefined : renderBackdrop}
205
209
  >
206
- <BottomSheetProvider value={{ onBack, hideCloseButton }}>
210
+ <BottomSheetProvider
211
+ value={{ onBack, hideCloseButton, onHeaderClosePressed }}
212
+ >
207
213
  {children}
208
214
  </BottomSheetProvider>
209
215
  </GorhomBottomSheetModal>
@@ -97,14 +97,18 @@ export const BottomSheetHeader = ({
97
97
  }: BottomSheetHeaderProps) => {
98
98
  const { t } = useCommonTranslation();
99
99
  const { close } = useBottomSheet();
100
- const { onBack, hideCloseButton } = useBottomSheetContext({
101
- consumerName: 'BottomSheetHeader',
102
- contextRequired: true,
103
- });
100
+ const { onBack, hideCloseButton, onHeaderClosePressed } =
101
+ useBottomSheetContext({
102
+ consumerName: 'BottomSheetHeader',
103
+ contextRequired: true,
104
+ });
104
105
 
105
106
  const handleClose = useCallback(() => {
107
+ if (onHeaderClosePressed) {
108
+ onHeaderClosePressed();
109
+ }
106
110
  close();
107
- }, [close]);
111
+ }, [close, onHeaderClosePressed]);
108
112
 
109
113
  const hasTitleSection = Boolean(title || description);
110
114
  const hasIcons = Boolean(onBack || !hideCloseButton);
@@ -115,7 +119,7 @@ export const BottomSheetHeader = ({
115
119
  hidden: !hasIcons && density !== 'compact',
116
120
  });
117
121
 
118
- if (!title && !description && !onBack && hideCloseButton) {
122
+ if (!hasTitleSection && !onBack && hideCloseButton) {
119
123
  return null;
120
124
  }
121
125
 
@@ -94,6 +94,15 @@ export type BottomSheetProps = PropsWithChildren & {
94
94
  * @default undefined
95
95
  */
96
96
  onClose?: () => void;
97
+ /**
98
+ * Callback function to handle when the close button in the header is pressed.
99
+ * This is distinct from {@link onClose} and {@link onDismiss}—those will always
100
+ * also be called after this event if the close button results in a full sheet dismissal.
101
+ * Use this to react specifically to header close intent (e.g., tracking, custom UI),
102
+ * but do cleanup/unmount logic in {@link onClose} or {@link onDismiss}.
103
+ * @default undefined
104
+ */
105
+ onHeaderClosePressed?: () => void;
97
106
  /**
98
107
  * Callback function to handle the open event.
99
108
  * @default undefined
@@ -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: 24,
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
- - **xs** - compact dot for tight layouts.
28
- - **sm** (default) - standard dot for most use cases.
29
- - **md** - medium dot for prominent indicators.
30
- - **lg** - large dot for maximum visibility.
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: ['xs', 'sm', 'md', 'lg'],
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 xs size', () => {
80
+ it('should render in sm size', () => {
81
81
  const { toJSON } = render(
82
82
  <TestWrapper>
83
- <DotIndicator size='xs' />
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 = 'sm',
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
- xs: t.sizes.s10,
67
- sm: t.sizes.s12,
68
- md: t.sizes.s14,
69
- lg: t.sizes.s16,
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 sm
7
+ * @default md
8
8
  */
9
- size?: 'xs' | 'sm' | 'md' | 'lg';
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: 24,
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, select, etc.
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 select and dropdown patterns. It displays a label with an optional leading icon and a permanent trailing chevron indicator.
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 a Select or dropdown. For standalone actions, use [Button](/docs/action-button--docs) or [IconButton](/docs/action-iconbutton--docs) instead.
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 select/dropdown components. Displays a label with an optional
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 a Select or
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
- Nine sizes are available (12, 16, 20, 24, 32, 40, 48, 56, 64). Border radius scales with size.
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. Unlike `Select`, it does not manage its own trigger or modal — consumers compose it within their own layout.
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
- <GlobalSelectProvider>
23
- <GlobalTooltipProvider>{children}</GlobalTooltipProvider>
24
- </GlobalSelectProvider>
21
+ <GlobalTooltipProvider>{children}</GlobalTooltipProvider>
25
22
  </I18nProvider>
26
23
  </LumenStyleSheetProvider>
27
24
  </ThemeContextProvider>
@@ -30,7 +30,6 @@ export * from './OptionList';
30
30
  export * from './PageIndicator';
31
31
  export * from './SearchInput';
32
32
  export * from './SegmentedControl';
33
- export * from './Select';
34
33
  export * from './Skeleton';
35
34
  export * from './Spinner';
36
35
  export * from './Spot';
@@ -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 24 24'>
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.5}
42
- d='M15 15.19H9M20 5l1.19-1.19M4 15l-1.19 1.19M5 4 3.81 2.81M20 15l1.19 1.19M21 10h1.69M1.31 10H3m6 8h5.87m-6.33-3.104c-1.78-1.26-2.85-3.45-2.47-5.86.4-2.607 2.57-4.688 5.2-4.995a5.996 5.996 0 0 1 6.725 5.95c0 2.02-1.01 3.81-2.55 4.898-.28.19-.46.49-.46.83v2.76a2.5 2.5 0 0 1-2.5 2.5h-1c-1.39 0-2.5-1.12-2.5-2.5v-2.763c0-.35-.19-.65-.46-.85z'
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":[]}