@ledgerhq/lumen-ui-rnative 0.1.11 → 0.1.13

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 (140) hide show
  1. package/dist/module/i18n/locales/de.json +3 -0
  2. package/dist/module/i18n/locales/en.json +3 -0
  3. package/dist/module/i18n/locales/es.json +3 -0
  4. package/dist/module/i18n/locales/fr.json +3 -0
  5. package/dist/module/i18n/locales/ja.json +3 -0
  6. package/dist/module/i18n/locales/ko.json +3 -0
  7. package/dist/module/i18n/locales/pt.json +3 -0
  8. package/dist/module/i18n/locales/ru.json +3 -0
  9. package/dist/module/i18n/locales/th.json +3 -0
  10. package/dist/module/i18n/locales/tr.json +3 -0
  11. package/dist/module/i18n/locales/zh.json +3 -0
  12. package/dist/module/lib/Animations/Pulse/Pulse.js +1 -1
  13. package/dist/module/lib/Animations/Spin/Spin.js +1 -1
  14. package/dist/module/lib/Components/AmountDisplay/AmountDisplay.js +21 -21
  15. package/dist/module/lib/Components/AmountDisplay/AmountDisplay.js.map +1 -1
  16. package/dist/module/lib/Components/AmountInput/AmountInput.js +3 -3
  17. package/dist/module/lib/Components/BaseInput/BaseInput.js +1 -1
  18. package/dist/module/lib/Components/BottomSheet/BottomSheet.stories.js.map +1 -1
  19. package/dist/module/lib/Components/Card/Card.js +39 -29
  20. package/dist/module/lib/Components/Card/Card.js.map +1 -1
  21. package/dist/module/lib/Components/InteractiveIcon/InteractiveIcon.js +22 -2
  22. package/dist/module/lib/Components/InteractiveIcon/InteractiveIcon.js.map +1 -1
  23. package/dist/module/lib/Components/Link/Link.mdx +1 -0
  24. package/dist/module/lib/Components/MediaBanner/MediaBanner.js +158 -0
  25. package/dist/module/lib/Components/MediaBanner/MediaBanner.js.map +1 -0
  26. package/dist/module/lib/Components/MediaBanner/MediaBanner.mdx +150 -0
  27. package/dist/module/lib/Components/MediaBanner/MediaBanner.stories.js +135 -0
  28. package/dist/module/lib/Components/MediaBanner/MediaBanner.stories.js.map +1 -0
  29. package/dist/module/lib/Components/MediaBanner/MediaBanner.test.js +83 -0
  30. package/dist/module/lib/Components/MediaBanner/MediaBanner.test.js.map +1 -0
  31. package/dist/module/lib/Components/MediaBanner/index.js +5 -0
  32. package/dist/module/lib/Components/MediaBanner/index.js.map +1 -0
  33. package/dist/module/lib/Components/MediaBanner/types.js +4 -0
  34. package/dist/module/lib/Components/MediaBanner/types.js.map +1 -0
  35. package/dist/module/lib/Components/MediaCard/MediaCard.js +183 -0
  36. package/dist/module/lib/Components/MediaCard/MediaCard.js.map +1 -0
  37. package/dist/module/lib/Components/MediaCard/MediaCard.mdx +111 -0
  38. package/dist/module/lib/Components/MediaCard/MediaCard.stories.js +199 -0
  39. package/dist/module/lib/Components/MediaCard/MediaCard.stories.js.map +1 -0
  40. package/dist/module/lib/Components/MediaCard/MediaCard.test.js +140 -0
  41. package/dist/module/lib/Components/MediaCard/MediaCard.test.js.map +1 -0
  42. package/dist/module/lib/Components/MediaCard/index.js +5 -0
  43. package/dist/module/lib/Components/MediaCard/index.js.map +1 -0
  44. package/dist/module/lib/Components/MediaCard/types.js +4 -0
  45. package/dist/module/lib/Components/MediaCard/types.js.map +1 -0
  46. package/dist/module/lib/Components/PageIndicator/PageIndicator.js +2 -2
  47. package/dist/module/lib/Components/SegmentedControl/usePillLayout.js +1 -1
  48. package/dist/module/lib/Components/Stepper/Stepper.js +1 -1
  49. package/dist/module/lib/Components/Switch/BaseSwitch.js +1 -1
  50. package/dist/module/lib/Components/TabBar/TabBar.js +4 -4
  51. package/dist/module/lib/Components/ThemeProvider/ThemeProvider.test.js +22 -20
  52. package/dist/module/lib/Components/ThemeProvider/ThemeProvider.test.js.map +1 -1
  53. package/dist/module/lib/Components/TriggerButton/TriggerButton.js +197 -0
  54. package/dist/module/lib/Components/TriggerButton/TriggerButton.js.map +1 -0
  55. package/dist/module/lib/Components/TriggerButton/TriggerButton.mdx +44 -0
  56. package/dist/module/lib/Components/TriggerButton/TriggerButton.stories.js +170 -0
  57. package/dist/module/lib/Components/TriggerButton/TriggerButton.stories.js.map +1 -0
  58. package/dist/module/lib/Components/TriggerButton/TriggerButton.test.js +146 -0
  59. package/dist/module/lib/Components/TriggerButton/TriggerButton.test.js.map +1 -0
  60. package/dist/module/lib/Components/TriggerButton/index.js +5 -0
  61. package/dist/module/lib/Components/TriggerButton/index.js.map +1 -0
  62. package/dist/module/lib/Components/TriggerButton/types.js +4 -0
  63. package/dist/module/lib/Components/TriggerButton/types.js.map +1 -0
  64. package/dist/module/lib/Components/Utility/Gradient/RadialGradient/RadialGradient.stories.js.map +1 -1
  65. package/dist/module/lib/Components/index.js +3 -0
  66. package/dist/module/lib/Components/index.js.map +1 -1
  67. package/dist/module/lib/Symbols/Icons/NanoGen5.js +49 -0
  68. package/dist/module/lib/Symbols/Icons/NanoGen5.js.map +1 -0
  69. package/dist/module/lib/Symbols/index.js +1 -0
  70. package/dist/module/lib/Symbols/index.js.map +1 -1
  71. package/dist/typescript/src/lib/Components/Card/Card.d.ts.map +1 -1
  72. package/dist/typescript/src/lib/Components/InteractiveIcon/InteractiveIcon.d.ts +1 -1
  73. package/dist/typescript/src/lib/Components/InteractiveIcon/InteractiveIcon.d.ts.map +1 -1
  74. package/dist/typescript/src/lib/Components/InteractiveIcon/types.d.ts +8 -0
  75. package/dist/typescript/src/lib/Components/InteractiveIcon/types.d.ts.map +1 -1
  76. package/dist/typescript/src/lib/Components/MediaBanner/MediaBanner.d.ts +16 -0
  77. package/dist/typescript/src/lib/Components/MediaBanner/MediaBanner.d.ts.map +1 -0
  78. package/dist/typescript/src/lib/Components/MediaBanner/index.d.ts +3 -0
  79. package/dist/typescript/src/lib/Components/MediaBanner/index.d.ts.map +1 -0
  80. package/dist/typescript/src/lib/Components/MediaBanner/types.d.ts +42 -0
  81. package/dist/typescript/src/lib/Components/MediaBanner/types.d.ts.map +1 -0
  82. package/dist/typescript/src/lib/Components/MediaCard/MediaCard.d.ts +32 -0
  83. package/dist/typescript/src/lib/Components/MediaCard/MediaCard.d.ts.map +1 -0
  84. package/dist/typescript/src/lib/Components/MediaCard/index.d.ts +3 -0
  85. package/dist/typescript/src/lib/Components/MediaCard/index.d.ts.map +1 -0
  86. package/dist/typescript/src/lib/Components/MediaCard/types.d.ts +38 -0
  87. package/dist/typescript/src/lib/Components/MediaCard/types.d.ts.map +1 -0
  88. package/dist/typescript/src/lib/Components/TriggerButton/TriggerButton.d.ts +26 -0
  89. package/dist/typescript/src/lib/Components/TriggerButton/TriggerButton.d.ts.map +1 -0
  90. package/dist/typescript/src/lib/Components/TriggerButton/index.d.ts +3 -0
  91. package/dist/typescript/src/lib/Components/TriggerButton/index.d.ts.map +1 -0
  92. package/dist/typescript/src/lib/Components/TriggerButton/types.d.ts +38 -0
  93. package/dist/typescript/src/lib/Components/TriggerButton/types.d.ts.map +1 -0
  94. package/dist/typescript/src/lib/Components/index.d.ts +3 -0
  95. package/dist/typescript/src/lib/Components/index.d.ts.map +1 -1
  96. package/dist/typescript/src/lib/Symbols/Icons/NanoGen5.d.ts +35 -0
  97. package/dist/typescript/src/lib/Symbols/Icons/NanoGen5.d.ts.map +1 -0
  98. package/dist/typescript/src/lib/Symbols/index.d.ts +1 -0
  99. package/dist/typescript/src/lib/Symbols/index.d.ts.map +1 -1
  100. package/package.json +3 -3
  101. package/src/i18n/locales/de.json +3 -0
  102. package/src/i18n/locales/en.json +3 -0
  103. package/src/i18n/locales/es.json +3 -0
  104. package/src/i18n/locales/fr.json +3 -0
  105. package/src/i18n/locales/ja.json +3 -0
  106. package/src/i18n/locales/ko.json +3 -0
  107. package/src/i18n/locales/pt.json +3 -0
  108. package/src/i18n/locales/ru.json +3 -0
  109. package/src/i18n/locales/th.json +3 -0
  110. package/src/i18n/locales/tr.json +3 -0
  111. package/src/i18n/locales/zh.json +3 -0
  112. package/src/lib/Components/AmountDisplay/AmountDisplay.tsx +20 -20
  113. package/src/lib/Components/BottomSheet/BottomSheet.stories.tsx +9 -9
  114. package/src/lib/Components/Card/Card.tsx +38 -33
  115. package/src/lib/Components/InteractiveIcon/InteractiveIcon.tsx +26 -4
  116. package/src/lib/Components/InteractiveIcon/types.ts +8 -0
  117. package/src/lib/Components/Link/Link.mdx +1 -0
  118. package/src/lib/Components/MediaBanner/MediaBanner.mdx +150 -0
  119. package/src/lib/Components/MediaBanner/MediaBanner.stories.tsx +143 -0
  120. package/src/lib/Components/MediaBanner/MediaBanner.test.tsx +77 -0
  121. package/src/lib/Components/MediaBanner/MediaBanner.tsx +172 -0
  122. package/src/lib/Components/MediaBanner/index.ts +2 -0
  123. package/src/lib/Components/MediaBanner/types.ts +44 -0
  124. package/src/lib/Components/MediaCard/MediaCard.mdx +111 -0
  125. package/src/lib/Components/MediaCard/MediaCard.stories.tsx +190 -0
  126. package/src/lib/Components/MediaCard/MediaCard.test.tsx +125 -0
  127. package/src/lib/Components/MediaCard/MediaCard.tsx +203 -0
  128. package/src/lib/Components/MediaCard/index.ts +2 -0
  129. package/src/lib/Components/MediaCard/types.ts +39 -0
  130. package/src/lib/Components/ThemeProvider/ThemeProvider.test.tsx +16 -18
  131. package/src/lib/Components/TriggerButton/TriggerButton.mdx +44 -0
  132. package/src/lib/Components/TriggerButton/TriggerButton.stories.tsx +132 -0
  133. package/src/lib/Components/TriggerButton/TriggerButton.test.tsx +157 -0
  134. package/src/lib/Components/TriggerButton/TriggerButton.tsx +228 -0
  135. package/src/lib/Components/TriggerButton/index.ts +2 -0
  136. package/src/lib/Components/TriggerButton/types.ts +38 -0
  137. package/src/lib/Components/Utility/Gradient/RadialGradient/RadialGradient.stories.tsx +1 -1
  138. package/src/lib/Components/index.ts +3 -0
  139. package/src/lib/Symbols/Icons/NanoGen5.tsx +44 -0
  140. package/src/lib/Symbols/index.ts +1 -0
@@ -0,0 +1,183 @@
1
+ "use strict";
2
+
3
+ import { useState } from 'react';
4
+ import { Image, StyleSheet, View } from 'react-native';
5
+ import { useCommonTranslation } from "../../../i18n/index.js";
6
+ import { useStyleSheet } from "../../../styles/index.js";
7
+ import { Close } from "../../Symbols/index.js";
8
+ import { InteractiveIcon } from "../InteractiveIcon/index.js";
9
+ import { LinearGradient, Pressable, Text } from "../Utility/index.js";
10
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
11
+ const CARD_HEIGHT = 164;
12
+ const useStyles = () => useStyleSheet(t => ({
13
+ root: {
14
+ position: 'relative',
15
+ width: t.sizes.full,
16
+ height: CARD_HEIGHT,
17
+ borderRadius: t.borderRadius.md,
18
+ overflow: 'hidden',
19
+ flexDirection: 'column',
20
+ alignItems: 'flex-start',
21
+ justifyContent: 'flex-end',
22
+ backgroundColor: t.colors.bg.muted
23
+ },
24
+ content: {
25
+ flexDirection: 'column',
26
+ alignItems: 'flex-start',
27
+ gap: t.spacings.s8,
28
+ width: t.sizes.full,
29
+ minWidth: 0,
30
+ padding: t.spacings.s12
31
+ },
32
+ title: {
33
+ ...t.typographies.heading3SemiBold,
34
+ color: t.colors.text.white
35
+ },
36
+ closeButton: {
37
+ position: 'absolute',
38
+ top: t.spacings.s12,
39
+ right: t.spacings.s12
40
+ },
41
+ gradientOverlays: {
42
+ color: t.colors.text.black
43
+ },
44
+ pressedOverlay: {
45
+ backgroundColor: t.colors.bg.mutedTransparentPressed
46
+ }
47
+ }), []);
48
+
49
+ /**
50
+ * Title text for the card, styled with heading typography and white color.
51
+ */
52
+ export const MediaCardTitle = ({
53
+ children,
54
+ lx = {},
55
+ style,
56
+ ref,
57
+ ...props
58
+ }) => {
59
+ const styles = useStyles();
60
+ return /*#__PURE__*/_jsx(Text, {
61
+ ref: ref,
62
+ lx: lx,
63
+ style: StyleSheet.flatten([styles.title, style]),
64
+ numberOfLines: 3,
65
+ ellipsizeMode: "tail",
66
+ ...props,
67
+ children: children
68
+ });
69
+ };
70
+ MediaCardTitle.displayName = 'MediaCardTitle';
71
+ const GradientOverlays = () => {
72
+ const styles = useStyles();
73
+ return /*#__PURE__*/_jsxs(_Fragment, {
74
+ children: [/*#__PURE__*/_jsx(LinearGradient, {
75
+ direction: "to-top",
76
+ stops: [{
77
+ color: styles.gradientOverlays.color,
78
+ opacity: 0.8,
79
+ offset: 0
80
+ }, {
81
+ color: styles.gradientOverlays.color,
82
+ opacity: 0,
83
+ offset: 0.75
84
+ }],
85
+ style: StyleSheet.absoluteFill,
86
+ pointerEvents: "none",
87
+ accessible: false
88
+ }), /*#__PURE__*/_jsx(LinearGradient, {
89
+ direction: 45,
90
+ stops: [{
91
+ color: styles.gradientOverlays.color,
92
+ opacity: 0,
93
+ offset: 0.6
94
+ }, {
95
+ color: styles.gradientOverlays.color,
96
+ opacity: 0.8
97
+ }],
98
+ style: StyleSheet.absoluteFill,
99
+ pointerEvents: "none",
100
+ accessible: false
101
+ })]
102
+ });
103
+ };
104
+
105
+ /**
106
+ * A media card component for displaying a full-bleed background image with
107
+ * composable content and a close button, using gradient overlays to ensure
108
+ * readability.
109
+ *
110
+ * @example
111
+ * import { MediaCard, MediaCardTitle } from '@ledgerhq/lumen-ui-rnative';
112
+ * import { Tag } from '@ledgerhq/lumen-ui-rnative';
113
+ *
114
+ * <MediaCard imageUrl="/image.jpg" onPress={() => {}} onClose={() => {}}>
115
+ * <Tag label="New" size="md" />
116
+ * <MediaCardTitle>Card title</MediaCardTitle>
117
+ * </MediaCard>
118
+ *
119
+ * // Without close button
120
+ * <MediaCard imageUrl="/image.jpg" onPress={() => {}}>
121
+ * <MediaCardTitle>Card title</MediaCardTitle>
122
+ * </MediaCard>
123
+ */
124
+ export const MediaCard = ({
125
+ ref,
126
+ children,
127
+ imageUrl,
128
+ onPress,
129
+ onClose,
130
+ closeAccessibilityLabel,
131
+ lx = {},
132
+ style,
133
+ ...pressableProps
134
+ }) => {
135
+ const {
136
+ t
137
+ } = useCommonTranslation();
138
+ const [imageLoadError, setImageLoadError] = useState(false);
139
+ const showImage = imageUrl && !imageLoadError;
140
+ const styles = useStyles();
141
+ return /*#__PURE__*/_jsx(Pressable, {
142
+ ref: ref,
143
+ lx: lx,
144
+ style: StyleSheet.flatten([styles.root, style]),
145
+ accessibilityRole: onPress ? 'button' : undefined,
146
+ onPress: onPress,
147
+ ...pressableProps,
148
+ children: ({
149
+ pressed
150
+ }) => /*#__PURE__*/_jsxs(_Fragment, {
151
+ children: [showImage && /*#__PURE__*/_jsx(Image, {
152
+ source: {
153
+ uri: imageUrl
154
+ },
155
+ style: [StyleSheet.absoluteFill, imageLoadError && {
156
+ opacity: 0
157
+ }],
158
+ accessible: false,
159
+ onError: () => setImageLoadError(true),
160
+ testID: "media-card-image"
161
+ }), /*#__PURE__*/_jsx(GradientOverlays, {}), /*#__PURE__*/_jsx(View, {
162
+ style: styles.content,
163
+ children: children
164
+ }), onClose && /*#__PURE__*/_jsx(InteractiveIcon, {
165
+ iconType: "stroked",
166
+ appearance: "white",
167
+ style: styles.closeButton,
168
+ onPress: onClose,
169
+ accessibilityLabel: closeAccessibilityLabel || t('common.closeAriaLabel'),
170
+ testID: "media-card-close-button",
171
+ children: /*#__PURE__*/_jsx(Close, {
172
+ size: 20
173
+ })
174
+ }), pressed && /*#__PURE__*/_jsx(View, {
175
+ style: [StyleSheet.absoluteFill, styles.pressedOverlay],
176
+ pointerEvents: "none",
177
+ accessible: false
178
+ })]
179
+ })
180
+ });
181
+ };
182
+ MediaCard.displayName = 'MediaCard';
183
+ //# sourceMappingURL=MediaCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useState","Image","StyleSheet","View","useCommonTranslation","useStyleSheet","Close","InteractiveIcon","LinearGradient","Pressable","Text","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","CARD_HEIGHT","useStyles","t","root","position","width","sizes","full","height","borderRadius","md","overflow","flexDirection","alignItems","justifyContent","backgroundColor","colors","bg","muted","content","gap","spacings","s8","minWidth","padding","s12","title","typographies","heading3SemiBold","color","text","white","closeButton","top","right","gradientOverlays","black","pressedOverlay","mutedTransparentPressed","MediaCardTitle","children","lx","style","ref","props","styles","flatten","numberOfLines","ellipsizeMode","displayName","GradientOverlays","direction","stops","opacity","offset","absoluteFill","pointerEvents","accessible","MediaCard","imageUrl","onPress","onClose","closeAccessibilityLabel","pressableProps","imageLoadError","setImageLoadError","showImage","accessibilityRole","undefined","pressed","source","uri","onError","testID","iconType","appearance","accessibilityLabel","size"],"sourceRoot":"../../../../../src","sources":["lib/Components/MediaCard/MediaCard.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,111 @@
1
+ import { Meta, Canvas, Controls } from '@storybook/addon-docs/blocks';
2
+ import * as MediaCardStories from './MediaCard.stories';
3
+ import { CustomTabs, Tab } from '../../../../.storybook/components';
4
+ import CommonRulesDoAndDont from '../../../../.storybook/components/DoVsDont/CommonRulesDoAndDont.mdx';
5
+
6
+ <Meta title='Communication/MediaCard' of={MediaCardStories} />
7
+
8
+ # MediaCard
9
+
10
+ <CustomTabs>
11
+ <Tab label="Overview">
12
+
13
+ ## Introduction
14
+
15
+ MediaCard is a promotional card component that displays a full-bleed background image with gradient overlays for text readability. It uses a simplified compound pattern with `MediaCardTitle` for the text and free-form children for leading content (e.g. tags, icons).
16
+
17
+ > View in [Figma](https://www.figma.com/design/JxaLVMTWirCpU0rsbZ30k7?node-id=15160-2853).
18
+
19
+ ## Anatomy
20
+
21
+ <Canvas of={MediaCardStories.Base} />
22
+
23
+ - **MediaCard**: Root pressable container with background image and gradient overlays
24
+ - **MediaCardTitle**: Styled title text (clamps at 3 lines)
25
+ - **Leading content**: Any element rendered before `MediaCardTitle` (tags, badges, icons) — no wrapper needed
26
+ - **Close button**: Rendered via the `onClose` prop (positioned absolute top-right) — only visible when `onClose` is provided
27
+
28
+ ## Properties
29
+
30
+ <Canvas of={MediaCardStories.Base} />
31
+ <Controls of={MediaCardStories.Base} />
32
+
33
+ ### Layout
34
+
35
+ The card fills its parent width by default.
36
+
37
+ <Canvas of={MediaCardStories.LayoutShowcase} />
38
+
39
+ ### Compositions
40
+
41
+ Leading content is optional — just place any element before `MediaCardTitle` inside `MediaCard`.
42
+
43
+ <Canvas of={MediaCardStories.CompositionShowcase} />
44
+
45
+ ## Accessibility
46
+
47
+ - The root element uses `accessibilityRole='button'` when `onPress` is provided
48
+ - The close button includes an `accessibilityLabel` (auto-translated via i18n) — only rendered when `onClose` is provided
49
+ - The background image is not accessible (`accessible={false}`) since it is decorative
50
+ - Components forward refs and spread props for accessibility support
51
+
52
+ </Tab>
53
+ <Tab label="Implementation">
54
+
55
+ ## Setup
56
+
57
+ Install and set up the library with our [Setup Guide →](?path=/docs/getting-started-setup--docs).
58
+
59
+ ## Basic Usage
60
+
61
+ Both `onPress` and `onClose` are optional. When `onClose` is omitted, the close button is hidden. When `onPress` is omitted, the card is non-interactive.
62
+
63
+ ```tsx
64
+ import { MediaCard, MediaCardTitle, Tag } from '@ledgerhq/lumen-ui-rnative';
65
+
66
+ function MyComponent() {
67
+ return (
68
+ <MediaCard
69
+ imageUrl='https://example.com/promo.jpg'
70
+ onPress={() => console.log('pressed')}
71
+ onClose={() => console.log('closed')}
72
+ >
73
+ <Tag label='New' size='md' />
74
+ <MediaCardTitle>Card title</MediaCardTitle>
75
+ </MediaCard>
76
+ );
77
+ }
78
+ ```
79
+
80
+ ### Without Close Button
81
+
82
+ Omit `onClose` to hide the close button — useful for non-dismissible promotions:
83
+
84
+ ```tsx
85
+ <MediaCard
86
+ imageUrl='https://example.com/promo.jpg'
87
+ onPress={() => console.log('pressed')}
88
+ >
89
+ <Tag label='New' size='md' />
90
+ <MediaCardTitle>Card title</MediaCardTitle>
91
+ </MediaCard>
92
+ ```
93
+
94
+ ### Layout Adjustments with lx
95
+
96
+ Use the `lx` prop for layout adjustments like margins or positioning:
97
+
98
+ ```tsx
99
+ <MediaCard
100
+ imageUrl='https://example.com/promo.jpg'
101
+ onPress={() => console.log('pressed')}
102
+ lx={{ marginTop: 's16', marginBottom: 's8' }}
103
+ >
104
+ <MediaCardTitle>With margin</MediaCardTitle>
105
+ </MediaCard>
106
+ ```
107
+
108
+ <CommonRulesDoAndDont />
109
+
110
+ </Tab>
111
+ </CustomTabs>
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+
3
+ import { CryptoIcon } from '@ledgerhq/crypto-icons';
4
+ import { useState } from 'react';
5
+ import { Button } from "../Button/index.js";
6
+ import { Tag } from "../Tag/index.js";
7
+ import { Box, Text } from "../Utility/index.js";
8
+ import { MediaCard, MediaCardTitle } from "./MediaCard.js";
9
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
10
+ const meta = {
11
+ component: MediaCard,
12
+ subcomponents: {
13
+ MediaCardTitle
14
+ },
15
+ title: 'Communication/MediaCard',
16
+ parameters: {
17
+ layout: 'centered',
18
+ backgrounds: {
19
+ default: 'light'
20
+ },
21
+ docs: {
22
+ source: {
23
+ language: 'tsx',
24
+ format: true,
25
+ type: 'code'
26
+ }
27
+ }
28
+ }
29
+ };
30
+ export default meta;
31
+ const EXAMPLE_SRC = 'https://ledger-wp-website-s3-prd.ledger.com/uploads/2026/03/hero_visual-1.webp';
32
+ const baseArgs = {
33
+ imageUrl: EXAMPLE_SRC,
34
+ onPress: () => ({}),
35
+ onClose: () => ({})
36
+ };
37
+ export const Base = {
38
+ args: baseArgs,
39
+ render: args => /*#__PURE__*/_jsx(Box, {
40
+ lx: {
41
+ width: 's320'
42
+ },
43
+ children: /*#__PURE__*/_jsxs(MediaCard, {
44
+ ...args,
45
+ children: [/*#__PURE__*/_jsx(Tag, {
46
+ label: "Label",
47
+ size: "md"
48
+ }), /*#__PURE__*/_jsxs(MediaCardTitle, {
49
+ children: ["Black Friday sale.", /*#__PURE__*/_jsxs(Text, {
50
+ typography: "heading3SemiBold",
51
+ lx: {
52
+ color: 'active'
53
+ },
54
+ children: [' ', "3 days with no fees", ' ']
55
+ }), "on your transactions."]
56
+ })]
57
+ })
58
+ }),
59
+ parameters: {
60
+ docs: {
61
+ source: {
62
+ code: `
63
+ <MediaCard imageUrl="/promo.jpg" onPress={() => {}} onClose={() => {}}>
64
+ <Tag label='Label' size='md' />
65
+ <MediaCardTitle>
66
+ Black Friday sale.
67
+ <Text typography='heading3SemiBold' lx={{ color: 'active' }}>
68
+ {' '}
69
+ 3 days with no fees{' '}
70
+ </Text>
71
+ on your transactions.
72
+ </MediaCardTitle>
73
+ </MediaCard>`
74
+ }
75
+ }
76
+ }
77
+ };
78
+ export const LayoutShowcase = {
79
+ render: () => /*#__PURE__*/_jsx(Box, {
80
+ lx: {
81
+ flexDirection: 'column',
82
+ width: 's320',
83
+ gap: 's16',
84
+ padding: 's8'
85
+ },
86
+ children: /*#__PURE__*/_jsxs(MediaCard, {
87
+ ...baseArgs,
88
+ children: [/*#__PURE__*/_jsx(Tag, {
89
+ label: "Label",
90
+ size: "md"
91
+ }), /*#__PURE__*/_jsx(MediaCardTitle, {
92
+ children: "Full width card"
93
+ })]
94
+ })
95
+ }),
96
+ parameters: {
97
+ docs: {
98
+ source: {
99
+ code: `
100
+ <MediaCard imageUrl="/promo.jpg" onPress={() => {}} onClose={() => {}}>
101
+ <Tag label="Label" size="md" />
102
+ <MediaCardTitle>Full width card</MediaCardTitle>
103
+ </MediaCard>`
104
+ }
105
+ }
106
+ }
107
+ };
108
+ export const CompositionShowcase = {
109
+ render: () => /*#__PURE__*/_jsxs(Box, {
110
+ lx: {
111
+ flexDirection: 'column',
112
+ width: 's320',
113
+ gap: 's16',
114
+ padding: 's8'
115
+ },
116
+ children: [/*#__PURE__*/_jsx(MediaCard, {
117
+ ...baseArgs,
118
+ children: /*#__PURE__*/_jsx(MediaCardTitle, {
119
+ children: "Title only"
120
+ })
121
+ }), /*#__PURE__*/_jsxs(MediaCard, {
122
+ ...baseArgs,
123
+ children: [/*#__PURE__*/_jsx(Tag, {
124
+ label: "Promo",
125
+ size: "md"
126
+ }), /*#__PURE__*/_jsx(MediaCardTitle, {
127
+ children: "With tag and title"
128
+ })]
129
+ }), /*#__PURE__*/_jsxs(MediaCard, {
130
+ ...baseArgs,
131
+ children: [/*#__PURE__*/_jsx(CryptoIcon, {
132
+ ledgerId: "bitcoin",
133
+ ticker: "BTC",
134
+ size: "32px"
135
+ }), /*#__PURE__*/_jsx(MediaCardTitle, {
136
+ children: "With crypto icon"
137
+ })]
138
+ })]
139
+ }),
140
+ parameters: {
141
+ docs: {
142
+ source: {
143
+ code: `
144
+ {/* Title only */}
145
+ <MediaCard imageUrl="/promo.jpg" onPress={() => {}} onClose={() => {}}>
146
+ <MediaCardTitle>Title only</MediaCardTitle>
147
+ </MediaCard>
148
+
149
+ {/* With tag */}
150
+ <MediaCard imageUrl="/promo.jpg" onPress={() => {}} onClose={() => {}}>
151
+ <Tag label="Promo" size="md" />
152
+ <MediaCardTitle>With tag and title</MediaCardTitle>
153
+ </MediaCard>
154
+
155
+ {/* With crypto icon */}
156
+ <MediaCard imageUrl="/promo.jpg" onPress={() => {}} onClose={() => {}}>
157
+ <CryptoIcon ledgerId="bitcoin" ticker="BTC" size="32px" />
158
+ <MediaCardTitle>With crypto icon</MediaCardTitle>
159
+ </MediaCard>`
160
+ }
161
+ }
162
+ }
163
+ };
164
+ export const WithClose = {
165
+ render: () => {
166
+ const [visible, setVisible] = useState(true);
167
+ if (!visible) {
168
+ return /*#__PURE__*/_jsx(Button, {
169
+ appearance: "transparent",
170
+ size: "sm",
171
+ onPress: () => setVisible(true),
172
+ children: "Show card again"
173
+ });
174
+ }
175
+ return /*#__PURE__*/_jsx(Box, {
176
+ lx: {
177
+ width: 's320'
178
+ },
179
+ children: /*#__PURE__*/_jsxs(MediaCard, {
180
+ imageUrl: EXAMPLE_SRC,
181
+ onPress: () => ({}),
182
+ onClose: () => setVisible(false),
183
+ children: [/*#__PURE__*/_jsx(Tag, {
184
+ label: "Label",
185
+ size: "md"
186
+ }), /*#__PURE__*/_jsxs(MediaCardTitle, {
187
+ children: ["Black Friday sale.", /*#__PURE__*/_jsxs(Text, {
188
+ typography: "heading3SemiBold",
189
+ lx: {
190
+ color: 'active'
191
+ },
192
+ children: [' ', "3 days with no fees", ' ']
193
+ }), "on your transactions."]
194
+ })]
195
+ })
196
+ });
197
+ }
198
+ };
199
+ //# sourceMappingURL=MediaCard.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["CryptoIcon","useState","Button","Tag","Box","Text","MediaCard","MediaCardTitle","jsx","_jsx","jsxs","_jsxs","meta","component","subcomponents","title","parameters","layout","backgrounds","default","docs","source","language","format","type","EXAMPLE_SRC","baseArgs","imageUrl","onPress","onClose","Base","args","render","lx","width","children","label","size","typography","color","code","LayoutShowcase","flexDirection","gap","padding","CompositionShowcase","ledgerId","ticker","WithClose","visible","setVisible","appearance"],"sourceRoot":"../../../../../src","sources":["lib/Components/MediaCard/MediaCard.stories.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+
3
+ import { describe, it, expect, jest } from '@jest/globals';
4
+ import { ledgerLiveThemes } from '@ledgerhq/lumen-design-core';
5
+ import { fireEvent, render } from '@testing-library/react-native';
6
+ import { ThemeProvider } from "../ThemeProvider/ThemeProvider.js";
7
+ import { MediaCard, MediaCardTitle } from "./MediaCard.js";
8
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
+ const TestWrapper = ({
10
+ children
11
+ }) => /*#__PURE__*/_jsx(ThemeProvider, {
12
+ themes: ledgerLiveThemes,
13
+ colorScheme: "dark",
14
+ locale: "en",
15
+ children: children
16
+ });
17
+ const makeProps = () => ({
18
+ imageUrl: 'https://example.com/image.jpg',
19
+ onPress: jest.fn(),
20
+ onClose: jest.fn()
21
+ });
22
+ describe('MediaCard', () => {
23
+ it('should render title', () => {
24
+ const {
25
+ getByText
26
+ } = render(/*#__PURE__*/_jsx(TestWrapper, {
27
+ children: /*#__PURE__*/_jsx(MediaCard, {
28
+ ...makeProps(),
29
+ children: /*#__PURE__*/_jsx(MediaCardTitle, {
30
+ children: "Title"
31
+ })
32
+ })
33
+ }));
34
+ getByText('Title');
35
+ });
36
+ it('should render leading content and title', () => {
37
+ const {
38
+ getByText
39
+ } = render(/*#__PURE__*/_jsx(TestWrapper, {
40
+ children: /*#__PURE__*/_jsxs(MediaCard, {
41
+ ...makeProps(),
42
+ children: [/*#__PURE__*/_jsx(MediaCardTitle, {
43
+ children: "Tag"
44
+ }), /*#__PURE__*/_jsx(MediaCardTitle, {
45
+ children: "Title"
46
+ })]
47
+ })
48
+ }));
49
+ getByText('Tag');
50
+ getByText('Title');
51
+ });
52
+ it('should fire onPress on press', () => {
53
+ const props = makeProps();
54
+ const {
55
+ getByTestId
56
+ } = render(/*#__PURE__*/_jsx(TestWrapper, {
57
+ children: /*#__PURE__*/_jsx(MediaCard, {
58
+ ...props,
59
+ testID: "media-card",
60
+ children: /*#__PURE__*/_jsx(MediaCardTitle, {
61
+ children: "Title"
62
+ })
63
+ })
64
+ }));
65
+ fireEvent.press(getByTestId('media-card'));
66
+ expect(props.onPress).toHaveBeenCalledTimes(1);
67
+ });
68
+ it('should render image when imageUrl is provided', () => {
69
+ const {
70
+ getByTestId
71
+ } = render(/*#__PURE__*/_jsx(TestWrapper, {
72
+ children: /*#__PURE__*/_jsx(MediaCard, {
73
+ ...makeProps(),
74
+ children: /*#__PURE__*/_jsx(MediaCardTitle, {
75
+ children: "Title"
76
+ })
77
+ })
78
+ }));
79
+ expect(getByTestId('media-card-image')).toBeTruthy();
80
+ });
81
+ it('should hide image on error', () => {
82
+ const {
83
+ getByTestId,
84
+ queryByTestId
85
+ } = render(/*#__PURE__*/_jsx(TestWrapper, {
86
+ children: /*#__PURE__*/_jsx(MediaCard, {
87
+ ...makeProps(),
88
+ children: /*#__PURE__*/_jsx(MediaCardTitle, {
89
+ children: "Title"
90
+ })
91
+ })
92
+ }));
93
+ const img = getByTestId('media-card-image');
94
+ fireEvent(img, 'onError');
95
+ expect(queryByTestId('media-card-image')).toBeNull();
96
+ });
97
+ it('should fire onClose on close button press', () => {
98
+ const props = makeProps();
99
+ const {
100
+ getByTestId
101
+ } = render(/*#__PURE__*/_jsx(TestWrapper, {
102
+ children: /*#__PURE__*/_jsx(MediaCard, {
103
+ ...props,
104
+ children: /*#__PURE__*/_jsx(MediaCardTitle, {
105
+ children: "Title"
106
+ })
107
+ })
108
+ }));
109
+ fireEvent.press(getByTestId('media-card-close-button'));
110
+ expect(props.onClose).toHaveBeenCalledTimes(1);
111
+ });
112
+ it('should not render close button when onClose is not provided', () => {
113
+ const {
114
+ queryByTestId
115
+ } = render(/*#__PURE__*/_jsx(TestWrapper, {
116
+ children: /*#__PURE__*/_jsx(MediaCard, {
117
+ imageUrl: "https://example.com/image.jpg",
118
+ children: /*#__PURE__*/_jsx(MediaCardTitle, {
119
+ children: "Title"
120
+ })
121
+ })
122
+ }));
123
+ expect(queryByTestId('media-card-close-button')).toBeNull();
124
+ });
125
+ it('should not have button role when onPress is not provided', () => {
126
+ const {
127
+ getByTestId
128
+ } = render(/*#__PURE__*/_jsx(TestWrapper, {
129
+ children: /*#__PURE__*/_jsx(MediaCard, {
130
+ imageUrl: "https://example.com/image.jpg",
131
+ testID: "media-card",
132
+ children: /*#__PURE__*/_jsx(MediaCardTitle, {
133
+ children: "Title"
134
+ })
135
+ })
136
+ }));
137
+ expect(getByTestId('media-card').props.accessibilityRole).toBeUndefined();
138
+ });
139
+ });
140
+ //# sourceMappingURL=MediaCard.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["describe","it","expect","jest","ledgerLiveThemes","fireEvent","render","ThemeProvider","MediaCard","MediaCardTitle","jsx","_jsx","jsxs","_jsxs","TestWrapper","children","themes","colorScheme","locale","makeProps","imageUrl","onPress","fn","onClose","getByText","props","getByTestId","testID","press","toHaveBeenCalledTimes","toBeTruthy","queryByTestId","img","toBeNull","accessibilityRole","toBeUndefined"],"sourceRoot":"../../../../../src","sources":["lib/Components/MediaCard/MediaCard.test.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ export { MediaCard, MediaCardTitle } from "./MediaCard.js";
4
+ export * from "./types.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["MediaCard","MediaCardTitle"],"sourceRoot":"../../../../../src","sources":["lib/Components/MediaCard/index.ts"],"mappings":";;AAAA,SAASA,SAAS,EAAEC,cAAc,QAAQ,gBAAa;AACvD,cAAc,YAAS","ignoreList":[]}
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=types.js.map