@ledgerhq/lumen-ui-rnative 0.0.47 → 0.0.49

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 (54) hide show
  1. package/dist/package.json +3 -3
  2. package/dist/src/lib/Components/Divider/Divider.d.ts +25 -0
  3. package/dist/src/lib/Components/Divider/Divider.d.ts.map +1 -0
  4. package/dist/src/lib/Components/Divider/Divider.js +40 -0
  5. package/dist/src/lib/Components/Divider/Divider.stories.d.ts +9 -0
  6. package/dist/src/lib/Components/Divider/Divider.stories.d.ts.map +1 -0
  7. package/dist/src/lib/Components/Divider/Divider.stories.js +51 -0
  8. package/dist/src/lib/Components/Divider/index.d.ts +3 -0
  9. package/dist/src/lib/Components/Divider/index.d.ts.map +1 -0
  10. package/dist/src/lib/Components/Divider/index.js +1 -0
  11. package/dist/src/lib/Components/Divider/types.d.ts +9 -0
  12. package/dist/src/lib/Components/Divider/types.d.ts.map +1 -0
  13. package/dist/src/lib/Components/Divider/types.js +1 -0
  14. package/dist/src/lib/Components/ListItem/ListItem.d.ts.map +1 -1
  15. package/dist/src/lib/Components/ListItem/ListItem.js +9 -3
  16. package/dist/src/lib/Components/Select/GlobalSelectBottomSheet.d.ts.map +1 -1
  17. package/dist/src/lib/Components/Select/GlobalSelectBottomSheet.js +2 -7
  18. package/dist/src/lib/Components/Select/Select.d.ts.map +1 -1
  19. package/dist/src/lib/Components/Select/Select.js +4 -10
  20. package/dist/src/lib/Components/Select/types.d.ts.map +1 -1
  21. package/dist/src/lib/Components/Tile/Tile.d.ts +84 -19
  22. package/dist/src/lib/Components/Tile/Tile.d.ts.map +1 -1
  23. package/dist/src/lib/Components/Tile/Tile.figma.js +8 -18
  24. package/dist/src/lib/Components/Tile/Tile.js +160 -59
  25. package/dist/src/lib/Components/Tile/Tile.stories.d.ts +2 -2
  26. package/dist/src/lib/Components/Tile/Tile.stories.d.ts.map +1 -1
  27. package/dist/src/lib/Components/Tile/Tile.stories.js +36 -81
  28. package/dist/src/lib/Components/Tile/index.d.ts +1 -1
  29. package/dist/src/lib/Components/Tile/index.d.ts.map +1 -1
  30. package/dist/src/lib/Components/Tile/index.js +1 -1
  31. package/dist/src/lib/Components/Tile/types.d.ts +29 -19
  32. package/dist/src/lib/Components/Tile/types.d.ts.map +1 -1
  33. package/dist/src/lib/Components/index.d.ts +1 -0
  34. package/dist/src/lib/Components/index.d.ts.map +1 -1
  35. package/dist/src/lib/Components/index.js +1 -0
  36. package/package.json +3 -3
  37. package/src/lib/Components/Divider/Divider.mdx +151 -0
  38. package/src/lib/Components/Divider/Divider.stories.tsx +140 -0
  39. package/src/lib/Components/Divider/Divider.test.tsx +92 -0
  40. package/src/lib/Components/Divider/Divider.tsx +52 -0
  41. package/src/lib/Components/Divider/index.ts +2 -0
  42. package/src/lib/Components/Divider/types.ts +9 -0
  43. package/src/lib/Components/ListItem/ListItem.tsx +10 -3
  44. package/src/lib/Components/Select/GlobalSelectBottomSheet.tsx +5 -7
  45. package/src/lib/Components/Select/Select.tsx +4 -18
  46. package/src/lib/Components/Select/types.ts +1 -3
  47. package/src/lib/Components/Tile/Tile.figma.tsx +24 -23
  48. package/src/lib/Components/Tile/Tile.mdx +128 -35
  49. package/src/lib/Components/Tile/Tile.stories.tsx +173 -146
  50. package/src/lib/Components/Tile/Tile.test.tsx +193 -221
  51. package/src/lib/Components/Tile/Tile.tsx +270 -123
  52. package/src/lib/Components/Tile/index.ts +7 -1
  53. package/src/lib/Components/Tile/types.ts +38 -19
  54. package/src/lib/Components/index.ts +1 -0
@@ -1,7 +1,13 @@
1
1
  import { Meta, Story, Canvas, Controls } from '@storybook/addon-docs/blocks';
2
2
  import * as TileStories from './Tile.stories';
3
3
  import { Tile } from './Tile';
4
- import { CustomTabs, Tab } from '../../../../.storybook/components';
4
+ import {
5
+ CustomTabs,
6
+ Tab,
7
+ DoVsDontRow,
8
+ DoBlockItem,
9
+ DontBlockItem,
10
+ } from '../../../../.storybook/components';
5
11
  import CommonRulesDoAndDont from '../../../../.storybook/components/DoVsDont/CommonRulesDoAndDont.mdx';
6
12
  import { Box } from '../Utility';
7
13
 
@@ -14,42 +20,47 @@ import { Box } from '../Utility';
14
20
 
15
21
  ## Introduction
16
22
 
17
- Tile components are compact, card-like interactive elements designed for horizontal lists, carousels, or grids. They feature a vertical layout with a required spot icon and title, as well as an optional description, tag, and a secondary action button visible on hover.
23
+ Tile components are compact, card-like interactive elements designed for horizontal lists, carousels, or grids. They use a flexible composite pattern that allows you to compose tiles with spots, text content, tags, and custom elements in a vertical layout.
18
24
 
19
25
  > View in [Figma](https://www.figma.com/design/JxaLVMTWirCpU0rsbZ30k7/2.-Components-Library?node-id=5783-1328).
20
26
 
21
27
  ## Anatomy
22
28
 
23
- <Canvas of={TileStories.Base} />
24
-
25
- - **Leading Content**: Visual icon or element at the top
26
- - **Title**: The main label of the item (required)
27
- - **Description (optional)**: Provides additional context
28
- - **Trailing Content (optional)**: Trailing custom content at the bottom of the tile
29
- - **Secondary Action (optional)**: Action button in the top right corner, visible on hover
29
+ - **TileSpot**: Visual icon or element at the top
30
+ - **TileContent**: Container for title and description
31
+ - **TileTitle**: The main label of the item (required)
32
+ - **TileDescription (optional)**: Provides additional context
33
+ - **Custom Content (optional)**: Any ReactNode like Tag, View, etc.
30
34
 
31
35
  ## Properties
32
36
 
33
- ### Overview
34
-
35
37
  <Canvas of={TileStories.Base} />
36
38
  <Controls of={TileStories.Base} />
37
39
 
38
- ### Spot Variants
40
+ ### Appearance & States
41
+
42
+ Two appearance variants are available with multiple interactive states:
39
43
 
40
- Tile components support various spot icons to categorize or visualize the content, including coin icons.
44
+ **Appearances:**
45
+ - **no-background** (default): Transparent background with pressed states
46
+ - **card**: Surface background color with pressed states
41
47
 
42
- <Canvas of={TileStories.LeadingContentVariantsShowcase} />
48
+ **States:**
49
+ - **Default**: Base state with no interaction
50
+ - **Pressed**: Darker background when pressed
51
+ - **Disabled**: Non-interactive state with disabled styles
43
52
 
44
- ### Trailing Content Variants
53
+ <Canvas of={TileStories.AppearanceShowcase} />
45
54
 
46
- Optional trailing content can be added at the bottom of the tile.
55
+ ### Variants
47
56
 
48
- <Canvas of={TileStories.WithTrailingContent} />
57
+ Tile components support various configurations including different spot icons, with/without description, and with/without trailing content (tags).
49
58
 
50
- ### Secondary Action
59
+ <Canvas of={TileStories.VariantsShowcase} />
51
60
 
52
- The secondary action is optional and can be omitted.
61
+ ### Secondary Action (Long Press)
62
+
63
+ Use `onLongPress` for secondary actions on mobile devices. Try long pressing the tile below to see it in action.
53
64
 
54
65
  <Canvas of={TileStories.WithSecondaryAction} />
55
66
 
@@ -75,42 +86,124 @@ Install and set up the library with our [Setup Guide →](?path=/docs/getting-st
75
86
  ## Basic Usage
76
87
 
77
88
  ```tsx
78
- import { Tile, Spot, Box } from '@ledgerhq/lumen-ui-rnative';
89
+ import {
90
+ Tile,
91
+ TileSpot,
92
+ TileContent,
93
+ TileTitle,
94
+ TileDescription,
95
+ } from '@ledgerhq/lumen-ui-rnative';
79
96
  import { Settings } from '@ledgerhq/lumen-ui-rnative/symbols';
80
97
 
81
98
  function MyComponent() {
82
99
  return (
83
100
  <Tile
84
101
  lx={{ width: 's128' }}
85
- title='Settings'
86
- description='BTC'
87
- leadingContent={<Spot appearance='icon' icon={Settings} />}
88
- trailingContent={<Tag label='Active' appearance='success' size='sm' />}
89
102
  onPress={() => console.log('Primary action')}
90
103
  onLongPress={() => console.log('Secondary action')}
91
- />
104
+ >
105
+ <TileSpot appearance='icon' icon={Settings} />
106
+ <TileContent>
107
+ <TileTitle>Settings</TileTitle>
108
+ <TileDescription>Manage preferences</TileDescription>
109
+ </TileContent>
110
+ </Tile>
92
111
  );
93
112
  }
94
113
  ```
95
114
 
115
+ ## Advanced Patterns
116
+
117
+ ### With Custom Content (Tags, etc.)
118
+
119
+ ```tsx
120
+ import {
121
+ Tile,
122
+ TileSpot,
123
+ TileContent,
124
+ TileTitle,
125
+ TileDescription,
126
+ Tag,
127
+ } from '@ledgerhq/lumen-ui-rnative';
128
+ import { Bitcoin } from '@ledgerhq/lumen-ui-rnative/symbols';
129
+
130
+ <Tile appearance='card'>
131
+ <TileSpot appearance='icon' icon={Bitcoin} />
132
+ <TileContent>
133
+ <TileTitle>Bitcoin</TileTitle>
134
+ <TileDescription>BTC</TileDescription>
135
+ </TileContent>
136
+ <Tag label='Active' appearance='success' />
137
+ </Tile>;
138
+ ```
139
+
140
+ ### Disabled State
141
+
142
+ ```tsx
143
+ <Tile disabled>
144
+ <TileSpot appearance='icon' icon={Settings} />
145
+ <TileContent>
146
+ <TileTitle>Settings</TileTitle>
147
+ <TileDescription>Unavailable</TileDescription>
148
+ </TileContent>
149
+ </Tile>
150
+ ```
151
+
96
152
  ### With Coin Icon
97
153
 
98
154
  ```tsx
99
- import { Tile, Spot } from '@ledgerhq/lumen-ui-rnative';
155
+ import {
156
+ Tile,
157
+ TileSpot,
158
+ TileContent,
159
+ TileTitle,
160
+ TileDescription,
161
+ } from '@ledgerhq/lumen-ui-rnative';
162
+
163
+ <Tile onPress={() => console.log('Clicked!')}>
164
+ <TileSpot appearance='coin' icon='btc' />
165
+ <TileContent>
166
+ <TileTitle>Bitcoin</TileTitle>
167
+ <TileDescription>BTC</TileDescription>
168
+ </TileContent>
169
+ </Tile>;
170
+ ```
100
171
 
101
- function MyComponent() {
102
- return (
172
+ ### Horizontal List
173
+
174
+ ```tsx
175
+ import { ScrollView } from 'react-native';
176
+
177
+ <ScrollView horizontal>
178
+ {items.map((item) => (
179
+ <Tile key={item.id} lx={{ width: 's128', flexShrink: 0 }}>
180
+ <TileSpot appearance='icon' icon={item.icon} />
181
+ <TileContent>
182
+ <TileTitle>{item.title}</TileTitle>
183
+ <TileDescription>{item.description}</TileDescription>
184
+ </TileContent>
185
+ </Tile>
186
+ ))}
187
+ </ScrollView>;
188
+ ```
189
+
190
+ ### With Secondary Action (Long Press)
191
+
192
+ ```tsx
103
193
  <Tile
104
- title='Bitcoin'
105
- description='BTC'
106
- leadingContent={<Spot appearance='coin' icon='btc' />}
107
- onPress={() => console.log('Clicked!')}
108
- />
109
- );
110
- }
194
+ onPress={() => console.log('Primary action')}
195
+ onLongPress={() => console.log('Secondary action - show menu')}
196
+ >
197
+ <TileSpot appearance='icon' icon={Settings} />
198
+ <TileContent>
199
+ <TileTitle>Settings</TileTitle>
200
+ <TileDescription>Long press for options</TileDescription>
201
+ </TileContent>
202
+ </Tile>
111
203
  ```
112
204
 
113
205
  ## Do's and Don'ts
206
+
114
207
  <Box lx={{ flexDirection: 'column', gap: 's24' }}>
115
208
  <CommonRulesDoAndDont />
116
209
  </Box>
@@ -1,20 +1,23 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react-native-web-vite';
2
- import {
3
- Settings,
4
- Plus,
5
- User,
6
- Wallet,
7
- Cart,
8
- Apps,
9
- Chart1,
10
- } from '../../Symbols';
11
- import { Spot } from '../Spot/Spot';
2
+ import { Settings, Plus, User, Apps } from '../../Symbols';
12
3
  import { Tag } from '../Tag/Tag';
13
- import { Box } from '../Utility';
14
- import { Tile } from './Tile';
4
+ import { Box, Text } from '../Utility';
5
+ import {
6
+ Tile,
7
+ TileSpot,
8
+ TileContent,
9
+ TileTitle,
10
+ TileDescription,
11
+ } from './Tile';
15
12
 
16
13
  const meta: Meta<typeof Tile> = {
17
14
  component: Tile,
15
+ subcomponents: {
16
+ TileSpot,
17
+ TileContent,
18
+ TileTitle,
19
+ TileDescription,
20
+ },
18
21
  title: 'Containment/Tile',
19
22
  parameters: {
20
23
  docs: {
@@ -25,144 +28,109 @@ const meta: Meta<typeof Tile> = {
25
28
  },
26
29
  },
27
30
  },
28
- argTypes: {
29
- leadingContent: {
30
- control: 'select',
31
- options: ['None', 'Settings', 'Plus'],
32
- mapping: {
33
- None: undefined,
34
- Settings: <Spot appearance='icon' icon={Settings} />,
35
- Plus: <Spot appearance='icon' icon={Plus} />,
36
- },
37
- },
38
- trailingContent: {
39
- control: 'select',
40
- options: ['None', 'Tag', 'Text'],
41
- mapping: {
42
- None: undefined,
43
- Tag: <Tag label='Tag' appearance='base' />,
44
- Text: <span>Text</span>,
45
- },
46
- },
47
- },
48
31
  };
49
32
 
50
33
  export default meta;
51
34
  type Story = StoryObj<typeof Tile>;
52
35
 
53
36
  export const Base: Story = {
54
- args: {
55
- title: 'Item with Spot and Description',
56
- description: 'Additional information',
57
- leadingContent: <Spot appearance='icon' icon={Settings} />,
58
- lx: { maxWidth: 's256' },
59
- },
37
+ render: () => (
38
+ <Tile lx={{ maxWidth: 's112' }}>
39
+ <TileSpot appearance='icon' icon={Settings} />
40
+ <TileContent>
41
+ <TileTitle>Item with Spot and Description</TileTitle>
42
+ <TileDescription>Additional information</TileDescription>
43
+ </TileContent>
44
+ </Tile>
45
+ ),
60
46
  parameters: {
61
47
  docs: {
62
48
  source: {
63
49
  code: `
64
- <Tile
65
- title="Item with Spot and Description"
66
- description="Additional information"
67
- leadingContent={<Spot appearance="icon" icon={Settings} />}
68
- onLongPress={() => console.log('Secondary action')}
69
- onPress={() => console.log('Primary action')}
70
- lx={{ maxWidth: 's256' }}
71
- />
50
+ <Tile lx={{ maxWidth: 's112' }}>
51
+ <TileSpot appearance="icon" icon={Settings} />
52
+ <TileContent>
53
+ <TileTitle>Item with Spot and Description</TileTitle>
54
+ <TileDescription>Additional information</TileDescription>
55
+ </TileContent>
56
+ </Tile>
72
57
  `,
73
58
  },
74
59
  },
75
60
  },
76
61
  };
77
62
 
78
- export const WithTrailingContent: Story = {
79
- args: {
80
- title: 'Item with Trailing Content',
81
- description: 'Additional information',
82
- leadingContent: <Spot appearance='icon' icon={Settings} />,
83
- trailingContent: <Tag label='New' appearance='base' />,
84
- lx: { maxWidth: 's256' },
85
- },
86
- parameters: {
87
- docs: {
88
- source: {
89
- code: `
90
- <Tile
91
- title="Item with Trailing Content"
92
- description="Additional information"
93
- leadingContent={<Spot appearance="icon" icon={Settings} />}
94
- trailingContent={<Tag label="New" appearance="base" />}
95
- onLongPress={() => console.log('Long press - secondary action')}
96
- lx={{ maxWidth: 's256' }}
97
- />
98
- `,
99
- },
100
- },
101
- },
63
+ export const VariantsShowcase: Story = {
64
+ render: () => (
65
+ <Box lx={{ flexDirection: 'column', gap: 's16' }}>
66
+ <Tile lx={{ maxWidth: 's176' }}>
67
+ <TileSpot appearance='icon' icon={User} />
68
+ <TileContent>
69
+ <TileTitle>User</TileTitle>
70
+ <TileDescription>With description</TileDescription>
71
+ </TileContent>
72
+ </Tile>
73
+ <Tile lx={{ maxWidth: 's176' }}>
74
+ <TileSpot appearance='icon' icon={Plus} />
75
+ <TileContent>
76
+ <TileTitle>Without Description</TileTitle>
77
+ </TileContent>
78
+ </Tile>
79
+ <Tile lx={{ maxWidth: 's176' }}>
80
+ <TileSpot appearance='icon' icon={Settings} />
81
+ <TileContent>
82
+ <TileTitle>With Trailing Content</TileTitle>
83
+ <TileDescription>Additional information</TileDescription>
84
+ </TileContent>
85
+ <Tag label='Custom' appearance='base' />
86
+ </Tile>
87
+ <Tile lx={{ maxWidth: 's176' }}>
88
+ <TileSpot appearance='icon' icon={Settings} />
89
+ <TileContent>
90
+ <TileTitle>With Trailing Content</TileTitle>
91
+ <TileDescription>Additional information</TileDescription>
92
+ </TileContent>
93
+ <Text typography='body2SemiBold' lx={{ color: 'success' }}>
94
+ +7.87%
95
+ </Text>
96
+ </Tile>
97
+ </Box>
98
+ ),
102
99
  };
103
100
 
104
101
  export const WithSecondaryAction: Story = {
105
- args: {
106
- title: 'Item with secondary action',
107
- description: 'LongPress to trigger secondary action',
108
- leadingContent: <Spot appearance='icon' icon={Settings} />,
109
- onLongPress: () => alert('Long press - secondary action'),
110
- lx: { maxWidth: 's256' },
111
- },
102
+ render: () => (
103
+ <Tile
104
+ onLongPress={() => alert('Long press - secondary action triggered!')}
105
+ lx={{ maxWidth: 's176' }}
106
+ >
107
+ <TileSpot appearance='icon' icon={Settings} />
108
+ <TileContent>
109
+ <TileTitle>Long Press Me</TileTitle>
110
+ <TileDescription>Try long pressing this tile</TileDescription>
111
+ </TileContent>
112
+ </Tile>
113
+ ),
112
114
  parameters: {
113
115
  docs: {
114
116
  source: {
115
117
  code: `
116
118
  <Tile
117
- title="Item secondary action"
118
- description="Additional information"
119
- onLongPress={() => // do stuff}
120
- leadingContent={<Spot appearance="icon" icon={Settings} />}
121
- lx={{ maxWidth: 's256' }}
122
- />
119
+ onLongPress={() => alert('Long press - secondary action triggered!')}
120
+ lx={{ maxWidth: 's160' }}
121
+ >
122
+ <TileSpot appearance="icon" icon={Settings} />
123
+ <TileContent>
124
+ <TileTitle>Long Press Me</TileTitle>
125
+ <TileDescription>Try long pressing this tile</TileDescription>
126
+ </TileContent>
127
+ </Tile>
123
128
  `,
124
129
  },
125
130
  },
126
131
  },
127
132
  };
128
133
 
129
- export const LeadingContentVariantsShowcase: Story = {
130
- render: () => (
131
- <Box lx={{ flexDirection: 'row' }}>
132
- <Tile
133
- title='User'
134
- description='With description'
135
- leadingContent={<Spot appearance='icon' icon={User} />}
136
- lx={{ maxWidth: 's128' }}
137
- />
138
- <Tile
139
- title='Wallet'
140
- description='With description'
141
- leadingContent={<Spot appearance='icon' icon={Wallet} />}
142
- lx={{ maxWidth: 's128' }}
143
- />
144
- <Tile
145
- title='Cart'
146
- description='With description'
147
- leadingContent={<Spot appearance='icon' icon={Cart} />}
148
- lx={{ maxWidth: 's128' }}
149
- />
150
- <Tile
151
- title='Apps'
152
- description='With description'
153
- leadingContent={<Spot appearance='icon' icon={Apps} />}
154
- lx={{ maxWidth: 's128' }}
155
- />
156
- <Tile
157
- title='Chart'
158
- description='With description'
159
- leadingContent={<Spot appearance='icon' icon={Chart1} />}
160
- lx={{ maxWidth: 's128' }}
161
- />
162
- </Box>
163
- ),
164
- };
165
-
166
134
  export const HorizontalList: Story = {
167
135
  render: () => (
168
136
  <Box lx={{ flexDirection: 'column', gap: 's16' }}>
@@ -174,13 +142,14 @@ export const HorizontalList: Story = {
174
142
  backgroundColor: 'base',
175
143
  }}
176
144
  >
177
- {Array.from({ length: 12 }).map((_, i) => (
178
- <Tile
179
- key={`list-1-${i}`}
180
- title={`Item ${i + 1}`}
181
- description={`Description ${i + 1}`}
182
- leadingContent={<Spot appearance='icon' icon={Apps} />}
183
- />
145
+ {Array.from({ length: 3 }).map((_, i) => (
146
+ <Tile key={`list-1-${i}`}>
147
+ <TileSpot appearance='icon' icon={Apps} />
148
+ <TileContent>
149
+ <TileTitle>Item {i + 1}</TileTitle>
150
+ <TileDescription>Description {i + 1}</TileDescription>
151
+ </TileContent>
152
+ </Tile>
184
153
  ))}
185
154
  </Box>
186
155
  <Box
@@ -189,16 +158,19 @@ export const HorizontalList: Story = {
189
158
  width: 's480',
190
159
  position: 'relative',
191
160
  backgroundColor: 'base',
161
+ overflow: 'scroll',
192
162
  }}
193
163
  >
194
- {Array.from({ length: 8 }).map((_, i) => (
195
- <Tile
196
- key={`list-2-${i}`}
197
- title='Long Title that should truncate appropriately'
198
- description='Long description that should truncate appropriately'
199
- leadingContent={<Spot appearance='icon' icon={Apps} />}
200
- lx={{ width: 's176', flexShrink: 0 }}
201
- />
164
+ {Array.from({ length: 5 }).map((_, i) => (
165
+ <Tile key={`list-2-${i}`} lx={{ width: 's128', flexShrink: 0 }}>
166
+ <TileSpot appearance='icon' icon={Apps} />
167
+ <TileContent>
168
+ <TileTitle>Item {i + 1}</TileTitle>
169
+ <TileDescription>
170
+ Long description that should truncate appropriately
171
+ </TileDescription>
172
+ </TileContent>
173
+ </Tile>
202
174
  ))}
203
175
  </Box>
204
176
  </Box>
@@ -209,19 +181,74 @@ export const ResponsiveLayout: Story = {
209
181
  render: () => (
210
182
  <Box lx={{ width: 'full', flexDirection: 'column', gap: 's16' }}>
211
183
  <Box>
212
- <Tile
213
- title='Item fill width'
214
- description='Description fill width'
215
- leadingContent={<Spot appearance='icon' icon={Apps} />}
216
- />
184
+ <Tile>
185
+ <TileSpot appearance='icon' icon={Apps} />
186
+ <TileContent>
187
+ <TileTitle>Item fill width</TileTitle>
188
+ <TileDescription>Description fill width</TileDescription>
189
+ </TileContent>
190
+ </Tile>
217
191
  </Box>
218
192
  <Box lx={{ alignItems: 'center', justifyContent: 'center' }}>
219
- <Tile
220
- lx={{ width: 's224' }}
221
- title='Long Item with fixed width'
222
- description='lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam, quos.'
223
- leadingContent={<Spot appearance='icon' icon={Plus} />}
224
- />
193
+ <Tile lx={{ width: 's224' }}>
194
+ <TileSpot appearance='icon' icon={Plus} />
195
+ <TileContent>
196
+ <TileTitle>Long Item with fixed width</TileTitle>
197
+ <TileDescription>
198
+ lorem ipsum dolor sit amet consectetur adipisicing elit. Quisquam,
199
+ quos.
200
+ </TileDescription>
201
+ </TileContent>
202
+ </Tile>
203
+ </Box>
204
+ </Box>
205
+ ),
206
+ };
207
+
208
+ export const AppearanceShowcase: Story = {
209
+ render: () => (
210
+ <Box lx={{ flexDirection: 'column', gap: 's24' }}>
211
+ <Box>
212
+ <Box lx={{ marginBottom: 's8' }}>
213
+ <Text typography='body2SemiBold'>No Background</Text>
214
+ </Box>
215
+ <Box lx={{ flexDirection: 'row', gap: 's16' }}>
216
+ <Tile appearance='no-background' lx={{ width: 's112' }}>
217
+ <TileSpot appearance='icon' icon={Settings} />
218
+ <TileContent>
219
+ <TileTitle>Press me</TileTitle>
220
+ <TileDescription>Press state</TileDescription>
221
+ </TileContent>
222
+ </Tile>
223
+ <Tile appearance='no-background' disabled lx={{ width: 's112' }}>
224
+ <TileSpot appearance='icon' icon={Settings} />
225
+ <TileContent>
226
+ <TileTitle>Disabled</TileTitle>
227
+ <TileDescription>Disabled state</TileDescription>
228
+ </TileContent>
229
+ </Tile>
230
+ </Box>
231
+ </Box>
232
+ <Box>
233
+ <Box lx={{ marginBottom: 's8' }}>
234
+ <Text typography='body2SemiBold'>Card</Text>
235
+ </Box>
236
+ <Box lx={{ flexDirection: 'row', gap: 's16' }}>
237
+ <Tile appearance='card' lx={{ width: 's112' }}>
238
+ <TileSpot appearance='icon' icon={User} />
239
+ <TileContent>
240
+ <TileTitle>Press me</TileTitle>
241
+ <TileDescription>Press state</TileDescription>
242
+ </TileContent>
243
+ </Tile>
244
+ <Tile appearance='card' disabled lx={{ width: 's112' }}>
245
+ <TileSpot appearance='icon' icon={User} />
246
+ <TileContent>
247
+ <TileTitle>Disabled</TileTitle>
248
+ <TileDescription>Disabled state</TileDescription>
249
+ </TileContent>
250
+ </Tile>
251
+ </Box>
225
252
  </Box>
226
253
  </Box>
227
254
  ),