@ledgerhq/lumen-ui-rnative 0.1.9 → 0.1.11

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 (133) hide show
  1. package/dist/module/lib/Components/AmountInput/AmountInput.js +16 -10
  2. package/dist/module/lib/Components/AmountInput/AmountInput.js.map +1 -1
  3. package/dist/module/lib/Components/BaseInput/BaseInput.js +15 -8
  4. package/dist/module/lib/Components/BaseInput/BaseInput.js.map +1 -1
  5. package/dist/module/lib/Components/Button/BaseButton.js +8 -1
  6. package/dist/module/lib/Components/Button/BaseButton.js.map +1 -1
  7. package/dist/module/lib/Components/Card/Card.js +45 -49
  8. package/dist/module/lib/Components/Card/Card.js.map +1 -1
  9. package/dist/module/lib/Components/CardButton/CardButton.js +8 -1
  10. package/dist/module/lib/Components/CardButton/CardButton.js.map +1 -1
  11. package/dist/module/lib/Components/Checkbox/Checkbox.js +8 -1
  12. package/dist/module/lib/Components/Checkbox/Checkbox.js.map +1 -1
  13. package/dist/module/lib/Components/InteractiveIcon/InteractiveIcon.js +10 -3
  14. package/dist/module/lib/Components/InteractiveIcon/InteractiveIcon.js.map +1 -1
  15. package/dist/module/lib/Components/Label/Label.js +9 -2
  16. package/dist/module/lib/Components/Label/Label.js.map +1 -1
  17. package/dist/module/lib/Components/ListItem/ListItem.js +14 -19
  18. package/dist/module/lib/Components/ListItem/ListItem.js.map +1 -1
  19. package/dist/module/lib/Components/SegmentedControl/SegmentedControl.js +8 -1
  20. package/dist/module/lib/Components/SegmentedControl/SegmentedControl.js.map +1 -1
  21. package/dist/module/lib/Components/Select/Select.js +8 -1
  22. package/dist/module/lib/Components/Select/Select.js.map +1 -1
  23. package/dist/module/lib/Components/Spot/Spot.js +4 -4
  24. package/dist/module/lib/Components/Spot/Spot.js.map +1 -1
  25. package/dist/module/lib/Components/Stepper/Stepper.js +9 -3
  26. package/dist/module/lib/Components/Stepper/Stepper.js.map +1 -1
  27. package/dist/module/lib/Components/Subheader/Subheader.js +1 -34
  28. package/dist/module/lib/Components/Subheader/Subheader.js.map +1 -1
  29. package/dist/module/lib/Components/Subheader/Subheader.mdx +26 -61
  30. package/dist/module/lib/Components/Subheader/Subheader.stories.js +23 -12
  31. package/dist/module/lib/Components/Subheader/Subheader.stories.js.map +1 -1
  32. package/dist/module/lib/Components/Subheader/Subheader.test.js +2 -26
  33. package/dist/module/lib/Components/Subheader/Subheader.test.js.map +1 -1
  34. package/dist/module/lib/Components/Subheader/index.js +1 -1
  35. package/dist/module/lib/Components/Subheader/index.js.map +1 -1
  36. package/dist/module/lib/Components/Switch/Switch.js +8 -1
  37. package/dist/module/lib/Components/Switch/Switch.js.map +1 -1
  38. package/dist/module/lib/Components/TabBar/TabBar.js +4 -3
  39. package/dist/module/lib/Components/TabBar/TabBar.js.map +1 -1
  40. package/dist/module/lib/Components/Tag/Tag.js +9 -2
  41. package/dist/module/lib/Components/Tag/Tag.js.map +1 -1
  42. package/dist/module/lib/Components/Tile/Tile.js +27 -48
  43. package/dist/module/lib/Components/Tile/Tile.js.map +1 -1
  44. package/dist/module/lib/Components/Tile/Tile.mdx +34 -26
  45. package/dist/module/lib/Components/Tile/Tile.stories.js +31 -28
  46. package/dist/module/lib/Components/Tile/Tile.stories.js.map +1 -1
  47. package/dist/module/lib/Components/Tile/Tile.test.js +33 -188
  48. package/dist/module/lib/Components/Tile/Tile.test.js.map +1 -1
  49. package/dist/module/lib/Components/Tile/index.js +1 -1
  50. package/dist/module/lib/Components/Tile/index.js.map +1 -1
  51. package/dist/module/lib/Components/TileButton/TileButton.js +8 -2
  52. package/dist/module/lib/Components/TileButton/TileButton.js.map +1 -1
  53. package/dist/typescript/src/lib/Components/AmountInput/AmountInput.d.ts +1 -1
  54. package/dist/typescript/src/lib/Components/AmountInput/AmountInput.d.ts.map +1 -1
  55. package/dist/typescript/src/lib/Components/BaseInput/BaseInput.d.ts +1 -1
  56. package/dist/typescript/src/lib/Components/BaseInput/BaseInput.d.ts.map +1 -1
  57. package/dist/typescript/src/lib/Components/Button/BaseButton.d.ts +1 -1
  58. package/dist/typescript/src/lib/Components/Button/BaseButton.d.ts.map +1 -1
  59. package/dist/typescript/src/lib/Components/Card/Card.d.ts.map +1 -1
  60. package/dist/typescript/src/lib/Components/Card/types.d.ts +1 -3
  61. package/dist/typescript/src/lib/Components/Card/types.d.ts.map +1 -1
  62. package/dist/typescript/src/lib/Components/CardButton/CardButton.d.ts +1 -1
  63. package/dist/typescript/src/lib/Components/CardButton/CardButton.d.ts.map +1 -1
  64. package/dist/typescript/src/lib/Components/Checkbox/Checkbox.d.ts +1 -1
  65. package/dist/typescript/src/lib/Components/Checkbox/Checkbox.d.ts.map +1 -1
  66. package/dist/typescript/src/lib/Components/InteractiveIcon/InteractiveIcon.d.ts +1 -1
  67. package/dist/typescript/src/lib/Components/InteractiveIcon/InteractiveIcon.d.ts.map +1 -1
  68. package/dist/typescript/src/lib/Components/InteractiveIcon/types.d.ts +6 -1
  69. package/dist/typescript/src/lib/Components/InteractiveIcon/types.d.ts.map +1 -1
  70. package/dist/typescript/src/lib/Components/Label/Label.d.ts +1 -1
  71. package/dist/typescript/src/lib/Components/Label/Label.d.ts.map +1 -1
  72. package/dist/typescript/src/lib/Components/ListItem/ListItem.d.ts +1 -1
  73. package/dist/typescript/src/lib/Components/ListItem/ListItem.d.ts.map +1 -1
  74. package/dist/typescript/src/lib/Components/SegmentedControl/SegmentedControl.d.ts +1 -1
  75. package/dist/typescript/src/lib/Components/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  76. package/dist/typescript/src/lib/Components/SegmentedControl/SegmentedControlContext.d.ts +1 -1
  77. package/dist/typescript/src/lib/Components/SegmentedControl/SegmentedControlContext.d.ts.map +1 -1
  78. package/dist/typescript/src/lib/Components/Select/Select.d.ts +1 -1
  79. package/dist/typescript/src/lib/Components/Select/Select.d.ts.map +1 -1
  80. package/dist/typescript/src/lib/Components/Stepper/Stepper.d.ts +1 -1
  81. package/dist/typescript/src/lib/Components/Stepper/Stepper.d.ts.map +1 -1
  82. package/dist/typescript/src/lib/Components/Subheader/Subheader.d.ts +2 -7
  83. package/dist/typescript/src/lib/Components/Subheader/Subheader.d.ts.map +1 -1
  84. package/dist/typescript/src/lib/Components/Subheader/index.d.ts +1 -1
  85. package/dist/typescript/src/lib/Components/Subheader/index.d.ts.map +1 -1
  86. package/dist/typescript/src/lib/Components/Subheader/types.d.ts +1 -11
  87. package/dist/typescript/src/lib/Components/Subheader/types.d.ts.map +1 -1
  88. package/dist/typescript/src/lib/Components/Switch/Switch.d.ts +1 -1
  89. package/dist/typescript/src/lib/Components/Switch/Switch.d.ts.map +1 -1
  90. package/dist/typescript/src/lib/Components/TabBar/TabBar.d.ts.map +1 -1
  91. package/dist/typescript/src/lib/Components/Tag/Tag.d.ts +1 -1
  92. package/dist/typescript/src/lib/Components/Tag/Tag.d.ts.map +1 -1
  93. package/dist/typescript/src/lib/Components/Tile/Tile.d.ts +17 -23
  94. package/dist/typescript/src/lib/Components/Tile/Tile.d.ts.map +1 -1
  95. package/dist/typescript/src/lib/Components/Tile/index.d.ts +1 -1
  96. package/dist/typescript/src/lib/Components/Tile/index.d.ts.map +1 -1
  97. package/dist/typescript/src/lib/Components/Tile/types.d.ts +0 -9
  98. package/dist/typescript/src/lib/Components/Tile/types.d.ts.map +1 -1
  99. package/dist/typescript/src/lib/Components/TileButton/TileButton.d.ts +1 -1
  100. package/dist/typescript/src/lib/Components/TileButton/TileButton.d.ts.map +1 -1
  101. package/package.json +3 -3
  102. package/src/lib/Components/AmountInput/AmountInput.tsx +15 -7
  103. package/src/lib/Components/BaseInput/BaseInput.tsx +12 -7
  104. package/src/lib/Components/Button/BaseButton.tsx +6 -1
  105. package/src/lib/Components/Card/Card.tsx +45 -50
  106. package/src/lib/Components/Card/types.ts +1 -4
  107. package/src/lib/Components/CardButton/CardButton.tsx +7 -1
  108. package/src/lib/Components/Checkbox/Checkbox.tsx +7 -1
  109. package/src/lib/Components/InteractiveIcon/InteractiveIcon.tsx +8 -3
  110. package/src/lib/Components/InteractiveIcon/types.ts +6 -1
  111. package/src/lib/Components/Label/Label.tsx +7 -2
  112. package/src/lib/Components/ListItem/ListItem.tsx +15 -12
  113. package/src/lib/Components/SegmentedControl/SegmentedControl.tsx +6 -1
  114. package/src/lib/Components/SegmentedControl/SegmentedControlContext.tsx +1 -1
  115. package/src/lib/Components/Select/Select.tsx +6 -1
  116. package/src/lib/Components/Spot/Spot.tsx +4 -4
  117. package/src/lib/Components/Stepper/Stepper.tsx +9 -2
  118. package/src/lib/Components/Subheader/Subheader.mdx +26 -61
  119. package/src/lib/Components/Subheader/Subheader.stories.tsx +16 -10
  120. package/src/lib/Components/Subheader/Subheader.test.tsx +0 -22
  121. package/src/lib/Components/Subheader/Subheader.tsx +1 -42
  122. package/src/lib/Components/Subheader/index.ts +0 -1
  123. package/src/lib/Components/Subheader/types.ts +1 -16
  124. package/src/lib/Components/Switch/Switch.tsx +6 -1
  125. package/src/lib/Components/TabBar/TabBar.tsx +5 -2
  126. package/src/lib/Components/Tag/Tag.tsx +7 -2
  127. package/src/lib/Components/Tile/Tile.mdx +34 -26
  128. package/src/lib/Components/Tile/Tile.stories.tsx +26 -26
  129. package/src/lib/Components/Tile/Tile.test.tsx +17 -137
  130. package/src/lib/Components/Tile/Tile.tsx +28 -40
  131. package/src/lib/Components/Tile/index.ts +0 -1
  132. package/src/lib/Components/Tile/types.ts +0 -11
  133. package/src/lib/Components/TileButton/TileButton.tsx +9 -2
@@ -1,10 +1,11 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react-native-web-vite';
2
+ import React from 'react';
2
3
  import { Settings, Plus, User, Apps, ChevronRight } from '../../Symbols';
4
+ import { Spot } from '../Spot';
3
5
  import { Tag } from '../Tag/Tag';
4
6
  import { Box, Text } from '../Utility';
5
7
  import {
6
8
  Tile,
7
- TileSpot,
8
9
  TileContent,
9
10
  TileTitle,
10
11
  TileDescription,
@@ -14,7 +15,6 @@ import {
14
15
  const meta: Meta<typeof Tile> = {
15
16
  component: Tile,
16
17
  subcomponents: {
17
- TileSpot,
18
18
  TileContent,
19
19
  TileTitle,
20
20
  TileDescription,
@@ -61,7 +61,7 @@ export const Base: Story = {
61
61
  },
62
62
  render: (args) => (
63
63
  <Tile {...args} lx={{ maxWidth: 's112' }}>
64
- <TileSpot appearance='icon' icon={Settings} />
64
+ <Spot appearance='icon' icon={Settings} />
65
65
  <TileContent>
66
66
  <TileTitle>Item with Spot and Description</TileTitle>
67
67
  <TileDescription>Additional information</TileDescription>
@@ -73,7 +73,7 @@ export const Base: Story = {
73
73
  source: {
74
74
  code: `
75
75
  <Tile lx={{ maxWidth: 's112' }}>
76
- <TileSpot appearance="icon" icon={Settings} />
76
+ <Spot appearance="icon" icon={Settings} />
77
77
  <TileContent>
78
78
  <TileTitle>Item with Spot and Description</TileTitle>
79
79
  <TileDescription>Additional information</TileDescription>
@@ -89,20 +89,20 @@ export const VariantsShowcase: Story = {
89
89
  render: () => (
90
90
  <Box lx={{ flexDirection: 'column', gap: 's16' }}>
91
91
  <Tile lx={{ maxWidth: 's176' }}>
92
- <TileSpot appearance='icon' icon={User} />
92
+ <Spot appearance='icon' icon={User} />
93
93
  <TileContent>
94
94
  <TileTitle>User</TileTitle>
95
95
  <TileDescription>With description</TileDescription>
96
96
  </TileContent>
97
97
  </Tile>
98
98
  <Tile lx={{ maxWidth: 's176' }}>
99
- <TileSpot appearance='icon' icon={Plus} />
99
+ <Spot appearance='icon' icon={Plus} />
100
100
  <TileContent>
101
101
  <TileTitle>Without Description</TileTitle>
102
102
  </TileContent>
103
103
  </Tile>
104
104
  <Tile lx={{ maxWidth: 's176' }}>
105
- <TileSpot appearance='icon' icon={Settings} />
105
+ <Spot appearance='icon' icon={Settings} />
106
106
  <TileContent>
107
107
  <TileTitle>With Trailing Content</TileTitle>
108
108
  <TileDescription>Additional information</TileDescription>
@@ -112,7 +112,7 @@ export const VariantsShowcase: Story = {
112
112
  </TileContent>
113
113
  </Tile>
114
114
  <Tile lx={{ maxWidth: 's176' }}>
115
- <TileSpot appearance='icon' icon={Settings} />
115
+ <Spot appearance='icon' icon={Settings} />
116
116
  <TileContent>
117
117
  <TileTitle>With Trailing Content</TileTitle>
118
118
  <TileDescription>Additional information</TileDescription>
@@ -133,7 +133,7 @@ export const WithSecondaryAction: Story = {
133
133
  onLongPress={() => alert('Long press - secondary action triggered!')}
134
134
  lx={{ maxWidth: 's176' }}
135
135
  >
136
- <TileSpot appearance='icon' icon={Settings} />
136
+ <Spot appearance='icon' icon={Settings} />
137
137
  <TileContent>
138
138
  <TileTitle>Long Press Me</TileTitle>
139
139
  <TileDescription>Try long pressing this tile</TileDescription>
@@ -148,7 +148,7 @@ export const WithSecondaryAction: Story = {
148
148
  onLongPress={() => alert('Long press - secondary action triggered!')}
149
149
  lx={{ maxWidth: 's160' }}
150
150
  >
151
- <TileSpot appearance="icon" icon={Settings} />
151
+ <Spot appearance="icon" icon={Settings} />
152
152
  <TileContent>
153
153
  <TileTitle>Long Press Me</TileTitle>
154
154
  <TileDescription>Try long pressing this tile</TileDescription>
@@ -173,7 +173,7 @@ export const HorizontalList: Story = {
173
173
  >
174
174
  {Array.from({ length: 3 }).map((_, i) => (
175
175
  <Tile key={`list-1-${i}`}>
176
- <TileSpot appearance='icon' icon={Apps} />
176
+ <Spot appearance='icon' icon={Apps} />
177
177
  <TileContent>
178
178
  <TileTitle>Item {i + 1}</TileTitle>
179
179
  <TileDescription>Description {i + 1}</TileDescription>
@@ -192,7 +192,7 @@ export const HorizontalList: Story = {
192
192
  >
193
193
  {Array.from({ length: 5 }).map((_, i) => (
194
194
  <Tile key={`list-2-${i}`} lx={{ width: 's128', flexShrink: 0 }}>
195
- <TileSpot appearance='icon' icon={Apps} />
195
+ <Spot appearance='icon' icon={Apps} />
196
196
  <TileContent>
197
197
  <TileTitle>Item {i + 1}</TileTitle>
198
198
  <TileDescription>
@@ -211,7 +211,7 @@ export const ResponsiveLayout: Story = {
211
211
  <Box lx={{ width: 'full', flexDirection: 'column', gap: 's16' }}>
212
212
  <Box>
213
213
  <Tile>
214
- <TileSpot appearance='icon' icon={Apps} />
214
+ <Spot appearance='icon' icon={Apps} />
215
215
  <TileContent>
216
216
  <TileTitle>Item fill width</TileTitle>
217
217
  <TileDescription>Description fill width</TileDescription>
@@ -220,7 +220,7 @@ export const ResponsiveLayout: Story = {
220
220
  </Box>
221
221
  <Box lx={{ alignItems: 'center', justifyContent: 'center' }}>
222
222
  <Tile lx={{ width: 's224' }}>
223
- <TileSpot appearance='icon' icon={Plus} />
223
+ <Spot appearance='icon' icon={Plus} />
224
224
  <TileContent>
225
225
  <TileTitle>Long Item with fixed width</TileTitle>
226
226
  <TileDescription>
@@ -243,14 +243,14 @@ export const AppearanceShowcase: Story = {
243
243
  </Box>
244
244
  <Box lx={{ flexDirection: 'row', gap: 's16' }}>
245
245
  <Tile appearance='no-background' lx={{ width: 's112' }}>
246
- <TileSpot appearance='icon' icon={Settings} />
246
+ <Spot appearance='icon' icon={Settings} />
247
247
  <TileContent>
248
248
  <TileTitle>Press me</TileTitle>
249
249
  <TileDescription>Press state</TileDescription>
250
250
  </TileContent>
251
251
  </Tile>
252
252
  <Tile appearance='no-background' disabled lx={{ width: 's112' }}>
253
- <TileSpot appearance='icon' icon={Settings} />
253
+ <Spot appearance='icon' icon={Settings} disabled />
254
254
  <TileContent>
255
255
  <TileTitle>Disabled</TileTitle>
256
256
  <TileDescription>Disabled state</TileDescription>
@@ -264,14 +264,14 @@ export const AppearanceShowcase: Story = {
264
264
  </Box>
265
265
  <Box lx={{ flexDirection: 'row', gap: 's16' }}>
266
266
  <Tile appearance='card' lx={{ width: 's112' }}>
267
- <TileSpot appearance='icon' icon={User} />
267
+ <Spot appearance='icon' icon={User} />
268
268
  <TileContent>
269
269
  <TileTitle>Press me</TileTitle>
270
270
  <TileDescription>Press state</TileDescription>
271
271
  </TileContent>
272
272
  </Tile>
273
273
  <Tile appearance='card' disabled lx={{ width: 's112' }}>
274
- <TileSpot appearance='icon' icon={User} />
274
+ <Spot appearance='icon' icon={User} disabled />
275
275
  <TileContent>
276
276
  <TileTitle>Disabled</TileTitle>
277
277
  <TileDescription>Disabled state</TileDescription>
@@ -287,7 +287,7 @@ export const CenteredShowcase: Story = {
287
287
  render: () => (
288
288
  <Box lx={{ flexDirection: 'row', gap: 's8' }}>
289
289
  <Tile appearance='card' lx={{ width: 's128' }}>
290
- <TileSpot appearance='icon' icon={Apps} />
290
+ <Spot appearance='icon' icon={Apps} />
291
291
  <TileContent>
292
292
  <TileTitle>Title</TileTitle>
293
293
  <TileDescription>Description</TileDescription>
@@ -297,7 +297,7 @@ export const CenteredShowcase: Story = {
297
297
  </TileContent>
298
298
  </Tile>
299
299
  <Tile appearance='card' lx={{ width: 's128' }}>
300
- <TileSpot appearance='icon' icon={Apps} />
300
+ <Spot appearance='icon' icon={Apps} />
301
301
  <TileContent>
302
302
  <TileTitle>Title</TileTitle>
303
303
  <TileDescription>Description</TileDescription>
@@ -307,7 +307,7 @@ export const CenteredShowcase: Story = {
307
307
  </TileContent>
308
308
  </Tile>
309
309
  <Tile appearance='card' lx={{ width: 's128' }}>
310
- <TileSpot appearance='icon' icon={Apps} />
310
+ <Spot appearance='icon' icon={Apps} />
311
311
  <TileContent>
312
312
  <TileTitle>Title</TileTitle>
313
313
  <TileDescription>Description</TileDescription>
@@ -317,7 +317,7 @@ export const CenteredShowcase: Story = {
317
317
  </TileContent>
318
318
  </Tile>
319
319
  <Tile appearance='card' centered lx={{ width: 's128' }}>
320
- <TileSpot appearance='icon' icon={ChevronRight} />
320
+ <Spot appearance='icon' icon={ChevronRight} />
321
321
  <TileContent>
322
322
  <TileTitle>Show more</TileTitle>
323
323
  </TileContent>
@@ -335,14 +335,14 @@ export const SizeShowcase: Story = {
335
335
  </Box>
336
336
  <Box lx={{ flexDirection: 'row', gap: 's16' }}>
337
337
  <Tile appearance='card' lx={{ width: 's112' }}>
338
- <TileSpot appearance='icon' icon={Settings} size={48} />
338
+ <Spot appearance='icon' icon={Settings} size={48} />
339
339
  <TileContent>
340
340
  <TileTitle>Settings</TileTitle>
341
341
  <TileDescription>Size 48</TileDescription>
342
342
  </TileContent>
343
343
  </Tile>
344
344
  <Tile appearance='card' lx={{ width: 's112' }}>
345
- <TileSpot appearance='check' size={48} />
345
+ <Spot appearance='check' size={48} />
346
346
  <TileContent>
347
347
  <TileTitle>Check</TileTitle>
348
348
  <TileDescription>Size 48</TileDescription>
@@ -356,14 +356,14 @@ export const SizeShowcase: Story = {
356
356
  </Box>
357
357
  <Box lx={{ flexDirection: 'row', gap: 's16' }}>
358
358
  <Tile appearance='card' lx={{ width: 's112' }}>
359
- <TileSpot appearance='icon' icon={Settings} size={40} />
359
+ <Spot appearance='icon' icon={Settings} size={40} />
360
360
  <TileContent>
361
361
  <TileTitle>Settings</TileTitle>
362
362
  <TileDescription>Size 40</TileDescription>
363
363
  </TileContent>
364
364
  </Tile>
365
365
  <Tile appearance='card' lx={{ width: 's112' }}>
366
- <TileSpot appearance='check' size={40} />
366
+ <Spot appearance='check' size={40} />
367
367
  <TileContent>
368
368
  <TileTitle>Check</TileTitle>
369
369
  <TileDescription>Size 40</TileDescription>
@@ -8,7 +8,6 @@ import { Tag } from '../Tag';
8
8
  import { ThemeProvider } from '../ThemeProvider/ThemeProvider';
9
9
  import {
10
10
  Tile,
11
- TileSpot,
12
11
  TileContent,
13
12
  TileTitle,
14
13
  TileDescription,
@@ -27,7 +26,7 @@ describe('Tile Component', () => {
27
26
  const { getByText, getByTestId } = render(
28
27
  <TestWrapper>
29
28
  <Tile testID='tile'>
30
- <TileSpot appearance='icon' icon={Settings} />
29
+ <Settings size={24} />
31
30
  <TileContent>
32
31
  <TileTitle>Test Title</TileTitle>
33
32
  </TileContent>
@@ -44,11 +43,13 @@ describe('Tile Component', () => {
44
43
  const { getByText } = render(
45
44
  <TestWrapper>
46
45
  <Tile testID='tile'>
47
- <TileSpot appearance='icon' icon={Settings} />
46
+ <Settings size={24} />
48
47
  <TileContent>
49
48
  <TileTitle>Test Title</TileTitle>
49
+ <TileTrailingContent>
50
+ <Tag label={tagText} />
51
+ </TileTrailingContent>
50
52
  </TileContent>
51
- <Tag label={tagText} />
52
53
  </Tile>
53
54
  </TestWrapper>,
54
55
  );
@@ -64,7 +65,7 @@ describe('Tile Component', () => {
64
65
  const { getByTestId } = render(
65
66
  <TestWrapper>
66
67
  <Tile onPress={handlePress} testID='tile'>
67
- <TileSpot appearance='icon' icon={Settings} />
68
+ <Settings size={24} />
68
69
  <TileContent>
69
70
  <TileTitle>Test Title</TileTitle>
70
71
  </TileContent>
@@ -82,7 +83,7 @@ describe('Tile Component', () => {
82
83
  const { getByTestId } = render(
83
84
  <TestWrapper>
84
85
  <Tile onLongPress={handleLongPress} testID='tile'>
85
- <TileSpot appearance='icon' icon={Settings} />
86
+ <Settings size={24} />
86
87
  <TileContent>
87
88
  <TileTitle>Test Title</TileTitle>
88
89
  </TileContent>
@@ -105,7 +106,7 @@ describe('Tile Component', () => {
105
106
  onLongPress={handleLongPress}
106
107
  testID='tile'
107
108
  >
108
- <TileSpot appearance='icon' icon={Settings} />
109
+ <Settings size={24} />
109
110
  <TileContent>
110
111
  <TileTitle>Test Title</TileTitle>
111
112
  </TileContent>
@@ -124,11 +125,11 @@ describe('Tile Component', () => {
124
125
  });
125
126
 
126
127
  describe('Context Propagation', () => {
127
- it('should propagate disabled state to TileSpot', () => {
128
+ it('should propagate disabled state to pressable', () => {
128
129
  const { getByTestId } = render(
129
130
  <TestWrapper>
130
131
  <Tile disabled testID='tile'>
131
- <TileSpot appearance='icon' icon={Settings} />
132
+ <Settings size={24} />
132
133
  <TileContent>
133
134
  <TileTitle>Test Title</TileTitle>
134
135
  </TileContent>
@@ -144,7 +145,7 @@ describe('Tile Component', () => {
144
145
  const { getByText } = render(
145
146
  <TestWrapper>
146
147
  <Tile disabled testID='tile'>
147
- <TileSpot appearance='icon' icon={Settings} />
148
+ <Settings size={24} />
148
149
  <TileContent>
149
150
  <TileTitle>Test Title</TileTitle>
150
151
  <TileDescription>Test Description</TileDescription>
@@ -164,7 +165,7 @@ describe('Tile Component', () => {
164
165
  const { getByTestId } = render(
165
166
  <TestWrapper>
166
167
  <Tile testID='tile' accessibilityLabel={customLabel}>
167
- <TileSpot appearance='icon' icon={Settings} />
168
+ <Settings size={24} />
168
169
  <TileContent>
169
170
  <TileTitle>Test Title</TileTitle>
170
171
  </TileContent>
@@ -180,7 +181,7 @@ describe('Tile Component', () => {
180
181
  const { getByTestId } = render(
181
182
  <TestWrapper>
182
183
  <Tile testID='tile'>
183
- <TileSpot appearance='icon' icon={Settings} />
184
+ <Settings size={24} />
184
185
  <TileContent>
185
186
  <TileTitle>Test Title</TileTitle>
186
187
  </TileContent>
@@ -206,12 +207,14 @@ describe('Tile Component', () => {
206
207
  onLongPress={jest.fn()}
207
208
  testID='tile'
208
209
  >
209
- <TileSpot appearance='icon' icon={Settings} />
210
+ <Settings size={24} />
210
211
  <TileContent>
211
212
  <TileTitle>Test Title</TileTitle>
212
213
  <TileDescription>{description}</TileDescription>
214
+ <TileTrailingContent>
215
+ <Tag label={tagText} />
216
+ </TileTrailingContent>
213
217
  </TileContent>
214
- <Tag label={tagText} />
215
218
  </Tile>
216
219
  </TestWrapper>,
217
220
  );
@@ -222,127 +225,4 @@ describe('Tile Component', () => {
222
225
  expect(getByText(tagText)).toBeTruthy();
223
226
  });
224
227
  });
225
-
226
- describe('TileTrailingContent', () => {
227
- it('should render children correctly', () => {
228
- const { getByText } = render(
229
- <TestWrapper>
230
- <Tile testID='tile'>
231
- <TileSpot appearance='icon' icon={Settings} />
232
- <TileContent>
233
- <TileTitle>Test Title</TileTitle>
234
- <TileTrailingContent>
235
- <Tag label='Active' />
236
- </TileTrailingContent>
237
- </TileContent>
238
- </Tile>
239
- </TestWrapper>,
240
- );
241
-
242
- expect(getByText('Active')).toBeTruthy();
243
- });
244
-
245
- it('should render with testID', () => {
246
- const { getByTestId } = render(
247
- <TestWrapper>
248
- <Tile testID='tile'>
249
- <TileSpot appearance='icon' icon={Settings} />
250
- <TileContent>
251
- <TileTitle>Test Title</TileTitle>
252
- <TileTrailingContent>
253
- <Tag label='Active' />
254
- </TileTrailingContent>
255
- </TileContent>
256
- </Tile>
257
- </TestWrapper>,
258
- );
259
-
260
- expect(getByTestId('tile-trailing-content')).toBeTruthy();
261
- });
262
-
263
- it('should have correct styling (4px margin-top and 8px gap)', () => {
264
- const { getByTestId } = render(
265
- <TestWrapper>
266
- <Tile testID='tile'>
267
- <TileSpot appearance='icon' icon={Settings} />
268
- <TileContent>
269
- <TileTitle>Test Title</TileTitle>
270
- <TileTrailingContent>
271
- <Tag label='First' />
272
- <Tag label='Second' />
273
- </TileTrailingContent>
274
- </TileContent>
275
- </Tile>
276
- </TestWrapper>,
277
- );
278
-
279
- const trailingContent = getByTestId('tile-trailing-content');
280
- expect(trailingContent.props.style).toMatchObject({
281
- marginTop: 4,
282
- gap: 8,
283
- });
284
- });
285
-
286
- it('should render multiple children', () => {
287
- const { getByText } = render(
288
- <TestWrapper>
289
- <Tile testID='tile'>
290
- <TileSpot appearance='icon' icon={Settings} />
291
- <TileContent>
292
- <TileTitle>Test Title</TileTitle>
293
- <TileTrailingContent>
294
- <Tag label='First' />
295
- <Tag label='Second' />
296
- </TileTrailingContent>
297
- </TileContent>
298
- </Tile>
299
- </TestWrapper>,
300
- );
301
-
302
- expect(getByText('First')).toBeTruthy();
303
- expect(getByText('Second')).toBeTruthy();
304
- });
305
-
306
- it('should have full width', () => {
307
- const { getByTestId } = render(
308
- <TestWrapper>
309
- <Tile testID='tile'>
310
- <TileSpot appearance='icon' icon={Settings} />
311
- <TileContent>
312
- <TileTitle>Test Title</TileTitle>
313
- <TileTrailingContent>
314
- <Tag label='Active' />
315
- </TileTrailingContent>
316
- </TileContent>
317
- </Tile>
318
- </TestWrapper>,
319
- );
320
-
321
- const trailingContent = getByTestId('tile-trailing-content');
322
- expect(trailingContent.props.style).toMatchObject({
323
- width: '100%',
324
- });
325
- });
326
-
327
- it('should center items horizontally', () => {
328
- const { getByTestId } = render(
329
- <TestWrapper>
330
- <Tile testID='tile'>
331
- <TileSpot appearance='icon' icon={Settings} />
332
- <TileContent>
333
- <TileTitle>Test Title</TileTitle>
334
- <TileTrailingContent>
335
- <Tag label='Active' />
336
- </TileTrailingContent>
337
- </TileContent>
338
- </Tile>
339
- </TestWrapper>,
340
- );
341
-
342
- const trailingContent = getByTestId('tile-trailing-content');
343
- expect(trailingContent.props.style).toMatchObject({
344
- alignItems: 'center',
345
- });
346
- });
347
- });
348
228
  });
@@ -1,25 +1,20 @@
1
1
  import {
2
- createSafeContext,
2
+ DisabledProvider,
3
3
  isTextChildren,
4
+ useDisabledContext,
4
5
  } from '@ledgerhq/lumen-utils-shared';
5
6
  import { ReactNode } from 'react';
6
7
  import { StyleSheet, View } from 'react-native';
7
8
  import { useStyleSheet } from '../../../styles';
8
- import { Spot } from '../Spot';
9
9
  import { Box, Pressable, Text } from '../Utility';
10
10
  import {
11
11
  TileContentProps,
12
- TileContextValue,
13
12
  TileDescriptionProps,
14
13
  TileProps,
15
- TileSpotProps,
16
14
  TileTitleProps,
17
15
  TileTrailingContentProps,
18
16
  } from './types';
19
17
 
20
- const [TileProvider, useTileContext] =
21
- createSafeContext<TileContextValue>('Tile');
22
-
23
18
  type Appearance = NonNullable<TileProps['appearance']>;
24
19
 
25
20
  const useRootStyles = ({
@@ -85,12 +80,13 @@ const useRootStyles = ({
85
80
  * Do not use it to modify the tile's core appearance (colors, padding, etc). Use the `appearance` prop instead.
86
81
  *
87
82
  * @example
88
- * // Basic tile with spot and content
89
- * import { Tile, TileSpot, TileContent, TileTitle, TileDescription } from '@ledgerhq/lumen-ui-rnative';
83
+ * // Basic tile with icon and content
84
+ * import { Tile, TileContent, TileTitle, TileDescription } from '@ledgerhq/lumen-ui-rnative';
85
+ * import { Spot } from '@ledgerhq/lumen-ui-rnative';
90
86
  * import { Wallet } from '@ledgerhq/lumen-ui-rnative/symbols';
91
87
  *
92
88
  * <Tile appearance="card" onPress={() => console.log('Pressed!')}>
93
- * <TileSpot appearance="icon" icon={Wallet} />
89
+ * <Spot appearance="icon" icon={Wallet} />
94
90
  * <TileContent>
95
91
  * <TileTitle>My Wallet</TileTitle>
96
92
  * <TileDescription>Description</TileDescription>
@@ -98,30 +94,37 @@ const useRootStyles = ({
98
94
  * </Tile>
99
95
  *
100
96
  * @example
101
- * // With custom content and long press
102
- * import { Tile, TileSpot, TileContent, TileTitle, Tag } from '@ledgerhq/lumen-ui-rnative';
97
+ * // With trailing content (Tags)
98
+ * import { Tile, TileContent, TileTitle, TileTrailingContent, Tag } from '@ledgerhq/lumen-ui-rnative';
103
99
  * import { Bitcoin } from '@ledgerhq/lumen-ui-rnative/symbols';
104
100
  *
105
101
  * <Tile appearance="card" onLongPress={() => console.log('Long pressed')}>
106
- * <TileSpot appearance="icon" icon={Bitcoin} />
102
+ * <Spot appearance="icon" icon={Bitcoin} />
107
103
  * <TileContent>
108
104
  * <TileTitle>Bitcoin</TileTitle>
105
+ * <TileTrailingContent>
106
+ * <Tag label="Active" />
107
+ * </TileTrailingContent>
109
108
  * </TileContent>
110
- * <Tag label="Active" />
111
109
  * </Tile>
112
110
  */
113
111
  export const Tile = ({
114
112
  lx = {},
115
113
  style,
116
114
  appearance = 'no-background',
117
- disabled = false,
115
+ disabled: disabledProp = false,
118
116
  centered = false,
119
117
  children,
120
118
  ref,
121
119
  ...props
122
120
  }: TileProps) => {
121
+ const disabled = useDisabledContext({
122
+ consumerName: 'Tile',
123
+ mergeWith: { disabled: disabledProp },
124
+ });
125
+
123
126
  return (
124
- <TileProvider value={{ disabled }}>
127
+ <DisabledProvider value={{ disabled }}>
125
128
  <Pressable
126
129
  ref={ref}
127
130
  lx={lx}
@@ -137,7 +140,7 @@ export const Tile = ({
137
140
  {({ pressed }) => (
138
141
  <TilePressableContent
139
142
  appearance={appearance}
140
- disabled={disabled}
143
+ disabled={!!disabled}
141
144
  pressed={pressed}
142
145
  centered={centered}
143
146
  >
@@ -145,7 +148,7 @@ export const Tile = ({
145
148
  </TilePressableContent>
146
149
  )}
147
150
  </Pressable>
148
- </TileProvider>
151
+ </DisabledProvider>
149
152
  );
150
153
  };
151
154
 
@@ -168,22 +171,6 @@ const TilePressableContent = ({
168
171
  return <View style={styles.container}>{children}</View>;
169
172
  };
170
173
 
171
- /**
172
- * A spot adapter for use within Tile. Automatically inherits the disabled state from the parent Tile.
173
- *
174
- * @example
175
- * <Tile>
176
- * <TileSpot appearance="icon" icon={Settings} />
177
- * </Tile>
178
- */
179
- export const TileSpot = ({ size = 48, ...props }: TileSpotProps) => {
180
- const { disabled } = useTileContext({
181
- consumerName: 'TileSpot',
182
- contextRequired: true,
183
- });
184
- return <Spot {...props} size={size} disabled={disabled} />;
185
- };
186
-
187
174
  const useContentStyles = () => {
188
175
  return useStyleSheet(
189
176
  (t) => ({
@@ -195,17 +182,18 @@ const useContentStyles = () => {
195
182
  [],
196
183
  );
197
184
  };
198
- TileSpot.displayName = 'TileSpot';
199
-
200
185
  /**
201
- * A container for grouping TileTitle and TileDescription with consistent spacing.
186
+ * A container for grouping TileTitle, TileDescription and TileTrailingContent with consistent spacing.
202
187
  * Use this to wrap text content within a Tile.
203
188
  *
204
189
  * @example
205
190
  * <Tile>
206
191
  * <TileContent>
207
192
  * <TileTitle>My Title</TileTitle>
208
- * <TileDescription>My Description</TileDescription>
193
+ * <TileDescription>Description</TileDescription>
194
+ * <TileTrailingContent>
195
+ * <Tag label="Active" />
196
+ * </TileTrailingContent>
209
197
  * </TileContent>
210
198
  * </Tile>
211
199
  */
@@ -250,7 +238,7 @@ const useTitleStyles = ({ disabled }: { disabled: boolean }) => {
250
238
  * If children is a string, it will be automatically wrapped in a Text component.
251
239
  */
252
240
  export const TileTitle = ({ children, lx, style }: TileTitleProps) => {
253
- const { disabled } = useTileContext({
241
+ const disabled = useDisabledContext({
254
242
  consumerName: 'TileTitle',
255
243
  contextRequired: true,
256
244
  });
@@ -320,7 +308,7 @@ export const TileDescription = ({
320
308
  lx,
321
309
  style,
322
310
  }: TileDescriptionProps) => {
323
- const { disabled } = useTileContext({
311
+ const disabled = useDisabledContext({
324
312
  consumerName: 'TileDescription',
325
313
  contextRequired: true,
326
314
  });
@@ -1,6 +1,5 @@
1
1
  export {
2
2
  Tile,
3
- TileSpot,
4
3
  TileContent,
5
4
  TileTitle,
6
5
  TileDescription,
@@ -4,14 +4,11 @@ import {
4
4
  StyledTextProps,
5
5
  StyledViewProps,
6
6
  } from '../../../styles';
7
- import { DiscriminatedSpotProps, SpotSize } from '../Spot/types';
8
7
 
9
8
  export type TileContextValue = {
10
9
  disabled: boolean;
11
10
  };
12
11
 
13
- export type TileSpotSize = Extract<SpotSize, 40 | 48>;
14
-
15
12
  export type TileProps = {
16
13
  /**
17
14
  * The visual style of the tile.
@@ -47,14 +44,6 @@ export type TileProps = {
47
44
  children: ReactNode;
48
45
  } & Omit<StyledPressableProps, 'onPress' | 'onLongPress' | 'disabled'>;
49
46
 
50
- export type TileSpotProps = {
51
- /**
52
- * The size of the spot.
53
- * @default 48
54
- */
55
- size?: 40 | 48;
56
- } & DiscriminatedSpotProps;
57
-
58
47
  export type TileContentProps = {
59
48
  /**
60
49
  * The children to display inside the tile content area.