@ledgerhq/lumen-ui-rnative 0.0.70 → 0.0.72

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 (142) hide show
  1. package/.storybook/preview.tsx +4 -0
  2. package/dist/package.json +4 -4
  3. package/dist/src/i18n/locales/de.json +3 -0
  4. package/dist/src/i18n/locales/en.json +3 -0
  5. package/dist/src/i18n/locales/es.json +3 -0
  6. package/dist/src/i18n/locales/fr.json +3 -0
  7. package/dist/src/i18n/locales/ja.json +3 -0
  8. package/dist/src/i18n/locales/ko.json +3 -0
  9. package/dist/src/i18n/locales/pt.json +3 -0
  10. package/dist/src/i18n/locales/ru.json +3 -0
  11. package/dist/src/i18n/locales/th.json +3 -0
  12. package/dist/src/i18n/locales/tr.json +3 -0
  13. package/dist/src/i18n/locales/zh.json +3 -0
  14. package/dist/src/index.d.ts +1 -0
  15. package/dist/src/index.d.ts.map +1 -1
  16. package/dist/src/index.js +1 -0
  17. package/dist/src/lib/Animations/Pulse/Pulse.d.ts +3 -0
  18. package/dist/src/lib/Animations/Pulse/Pulse.d.ts.map +1 -0
  19. package/dist/src/lib/Animations/Pulse/Pulse.js +46 -0
  20. package/dist/src/lib/Animations/Pulse/Pulse.stories.d.ts +9 -0
  21. package/dist/src/lib/Animations/Pulse/Pulse.stories.d.ts.map +1 -0
  22. package/dist/src/lib/Animations/Pulse/Pulse.stories.js +38 -0
  23. package/dist/src/lib/Animations/Pulse/index.d.ts +3 -0
  24. package/dist/src/lib/Animations/Pulse/index.d.ts.map +1 -0
  25. package/dist/src/lib/Animations/Pulse/index.js +2 -0
  26. package/dist/src/lib/Animations/Pulse/types.d.ts +18 -0
  27. package/dist/src/lib/Animations/Pulse/types.d.ts.map +1 -0
  28. package/dist/src/lib/Animations/Pulse/types.js +1 -0
  29. package/dist/src/lib/Animations/Spin/Spin.d.ts +3 -0
  30. package/dist/src/lib/Animations/Spin/Spin.d.ts.map +1 -0
  31. package/dist/src/lib/Animations/Spin/Spin.js +23 -0
  32. package/dist/src/lib/Animations/Spin/Spin.stories.d.ts +9 -0
  33. package/dist/src/lib/Animations/Spin/Spin.stories.d.ts.map +1 -0
  34. package/dist/src/lib/Animations/Spin/Spin.stories.js +27 -0
  35. package/dist/src/lib/Animations/Spin/index.d.ts +3 -0
  36. package/dist/src/lib/Animations/Spin/index.d.ts.map +1 -0
  37. package/dist/src/lib/Animations/Spin/index.js +2 -0
  38. package/dist/src/lib/Animations/Spin/types.d.ts +14 -0
  39. package/dist/src/lib/Animations/Spin/types.d.ts.map +1 -0
  40. package/dist/src/lib/Animations/Spin/types.js +1 -0
  41. package/dist/src/lib/Animations/index.d.ts +4 -0
  42. package/dist/src/lib/Animations/index.d.ts.map +1 -0
  43. package/dist/src/lib/Animations/index.js +3 -0
  44. package/dist/src/lib/Animations/types.d.ts +2 -0
  45. package/dist/src/lib/Animations/types.d.ts.map +1 -0
  46. package/dist/src/lib/Animations/types.js +1 -0
  47. package/dist/src/lib/Components/AmountDisplay/AmountDisplay.d.ts +5 -7
  48. package/dist/src/lib/Components/AmountDisplay/AmountDisplay.d.ts.map +1 -1
  49. package/dist/src/lib/Components/AmountDisplay/AmountDisplay.js +7 -6
  50. package/dist/src/lib/Components/AmountDisplay/AmountDisplay.stories.d.ts +1 -0
  51. package/dist/src/lib/Components/AmountDisplay/AmountDisplay.stories.d.ts.map +1 -1
  52. package/dist/src/lib/Components/AmountDisplay/AmountDisplay.stories.js +5 -0
  53. package/dist/src/lib/Components/AmountDisplay/types.d.ts +7 -1
  54. package/dist/src/lib/Components/AmountDisplay/types.d.ts.map +1 -1
  55. package/dist/src/lib/Components/Skeleton/Skeleton.d.ts +21 -0
  56. package/dist/src/lib/Components/Skeleton/Skeleton.d.ts.map +1 -0
  57. package/dist/src/lib/Components/Skeleton/Skeleton.js +81 -0
  58. package/dist/src/lib/Components/Skeleton/Skeleton.stories.d.ts +11 -0
  59. package/dist/src/lib/Components/Skeleton/Skeleton.stories.d.ts.map +1 -0
  60. package/dist/src/lib/Components/Skeleton/Skeleton.stories.js +49 -0
  61. package/dist/src/lib/Components/Skeleton/index.d.ts +3 -0
  62. package/dist/src/lib/Components/Skeleton/index.d.ts.map +1 -0
  63. package/dist/src/lib/Components/Skeleton/index.js +2 -0
  64. package/dist/src/lib/Components/Skeleton/types.d.ts +10 -0
  65. package/dist/src/lib/Components/Skeleton/types.d.ts.map +1 -0
  66. package/dist/src/lib/Components/Skeleton/types.js +1 -0
  67. package/dist/src/lib/Components/Spinner/Spinner.d.ts.map +1 -1
  68. package/dist/src/lib/Components/Spinner/Spinner.js +2 -23
  69. package/dist/src/lib/Components/Stepper/Stepper.d.ts +16 -0
  70. package/dist/src/lib/Components/Stepper/Stepper.d.ts.map +1 -0
  71. package/dist/src/lib/Components/Stepper/Stepper.js +74 -0
  72. package/dist/src/lib/Components/Stepper/Stepper.stories.d.ts +9 -0
  73. package/dist/src/lib/Components/Stepper/Stepper.stories.d.ts.map +1 -0
  74. package/dist/src/lib/Components/Stepper/Stepper.stories.js +35 -0
  75. package/dist/src/lib/Components/Stepper/index.d.ts +3 -0
  76. package/dist/src/lib/Components/Stepper/index.d.ts.map +1 -0
  77. package/dist/src/lib/Components/Stepper/index.js +2 -0
  78. package/dist/src/lib/Components/Stepper/types.d.ts +21 -0
  79. package/dist/src/lib/Components/Stepper/types.d.ts.map +1 -0
  80. package/dist/src/lib/Components/Stepper/types.js +1 -0
  81. package/dist/src/lib/Components/TabBar/TabBar.d.ts +1 -0
  82. package/dist/src/lib/Components/TabBar/TabBar.d.ts.map +1 -1
  83. package/dist/src/lib/Components/TabBar/TabBar.js +2 -1
  84. package/dist/src/lib/Components/TabBar/index.d.ts +1 -1
  85. package/dist/src/lib/Components/TabBar/index.d.ts.map +1 -1
  86. package/dist/src/lib/Components/TabBar/index.js +1 -1
  87. package/dist/src/lib/Components/TileButton/TileButton.d.ts +4 -3
  88. package/dist/src/lib/Components/TileButton/TileButton.d.ts.map +1 -1
  89. package/dist/src/lib/Components/TileButton/TileButton.js +3 -4
  90. package/dist/src/lib/Components/index.d.ts +3 -0
  91. package/dist/src/lib/Components/index.d.ts.map +1 -1
  92. package/dist/src/lib/Components/index.js +3 -0
  93. package/dist/src/styles/types/factories.types.d.ts +1 -1
  94. package/dist/src/styles/types/factories.types.d.ts.map +1 -1
  95. package/package.json +4 -4
  96. package/src/i18n/locales/de.json +3 -0
  97. package/src/i18n/locales/en.json +3 -0
  98. package/src/i18n/locales/es.json +3 -0
  99. package/src/i18n/locales/fr.json +3 -0
  100. package/src/i18n/locales/ja.json +3 -0
  101. package/src/i18n/locales/ko.json +3 -0
  102. package/src/i18n/locales/pt.json +3 -0
  103. package/src/i18n/locales/ru.json +3 -0
  104. package/src/i18n/locales/th.json +3 -0
  105. package/src/i18n/locales/tr.json +3 -0
  106. package/src/i18n/locales/zh.json +3 -0
  107. package/src/index.ts +1 -0
  108. package/src/lib/Animations/Pulse/Pulse.mdx +86 -0
  109. package/src/lib/Animations/Pulse/Pulse.stories.tsx +90 -0
  110. package/src/lib/Animations/Pulse/Pulse.tsx +55 -0
  111. package/src/lib/Animations/Pulse/index.ts +2 -0
  112. package/src/lib/Animations/Pulse/types.ts +18 -0
  113. package/src/lib/Animations/Spin/Spin.mdx +85 -0
  114. package/src/lib/Animations/Spin/Spin.stories.tsx +72 -0
  115. package/src/lib/Animations/Spin/Spin.tsx +34 -0
  116. package/src/lib/Animations/Spin/index.ts +2 -0
  117. package/src/lib/Animations/Spin/types.ts +14 -0
  118. package/src/lib/Animations/index.ts +3 -0
  119. package/src/lib/Animations/types.ts +11 -0
  120. package/src/lib/Components/AmountDisplay/AmountDisplay.mdx +6 -0
  121. package/src/lib/Components/AmountDisplay/AmountDisplay.stories.tsx +12 -0
  122. package/src/lib/Components/AmountDisplay/AmountDisplay.test.tsx +13 -0
  123. package/src/lib/Components/AmountDisplay/AmountDisplay.tsx +39 -35
  124. package/src/lib/Components/AmountDisplay/types.ts +7 -1
  125. package/src/lib/Components/Skeleton/Skeleton.mdx +200 -0
  126. package/src/lib/Components/Skeleton/Skeleton.stories.tsx +89 -0
  127. package/src/lib/Components/Skeleton/Skeleton.test.tsx +54 -0
  128. package/src/lib/Components/Skeleton/Skeleton.tsx +137 -0
  129. package/src/lib/Components/Skeleton/index.ts +2 -0
  130. package/src/lib/Components/Skeleton/types.ts +10 -0
  131. package/src/lib/Components/Spinner/Spinner.tsx +3 -35
  132. package/src/lib/Components/Stepper/Stepper.mdx +217 -0
  133. package/src/lib/Components/Stepper/Stepper.stories.tsx +62 -0
  134. package/src/lib/Components/Stepper/Stepper.test.tsx +132 -0
  135. package/src/lib/Components/Stepper/Stepper.tsx +159 -0
  136. package/src/lib/Components/Stepper/index.ts +2 -0
  137. package/src/lib/Components/Stepper/types.ts +21 -0
  138. package/src/lib/Components/TabBar/TabBar.tsx +2 -1
  139. package/src/lib/Components/TabBar/index.ts +1 -1
  140. package/src/lib/Components/TileButton/TileButton.tsx +35 -44
  141. package/src/lib/Components/index.ts +3 -0
  142. package/src/styles/types/factories.types.ts +1 -1
@@ -0,0 +1,81 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Pulse } from '../../Animations/Pulse';
3
+ import { Box } from '../Utility';
4
+ /** Internal base skeleton element */
5
+ const BaseSkeleton = ({ lx, ...props }) => {
6
+ return (_jsx(Box, { lx: {
7
+ borderRadius: 'md',
8
+ backgroundColor: 'mutedTransparent',
9
+ ...lx,
10
+ }, ...props }));
11
+ };
12
+ BaseSkeleton.displayName = 'BaseSkeleton';
13
+ const ListItemSkeleton = ({ lx, ...props }) => {
14
+ return (_jsxs(Box, { lx: {
15
+ flexDirection: 'row',
16
+ width: 'full',
17
+ alignItems: 'center',
18
+ gap: 's16',
19
+ paddingVertical: 's8',
20
+ ...lx,
21
+ }, ...props, children: [_jsx(BaseSkeleton, { lx: {
22
+ width: 's48',
23
+ height: 's48',
24
+ borderRadius: 'full',
25
+ flexShrink: 0,
26
+ } }), _jsxs(Box, { lx: { flex: 1, flexDirection: 'column', gap: 's10' }, children: [_jsx(BaseSkeleton, { lx: { height: 's12', width: 's176', borderRadius: 'full' } }), _jsx(BaseSkeleton, { lx: { height: 's12', width: 's112', borderRadius: 'full' } })] })] }));
27
+ };
28
+ ListItemSkeleton.displayName = 'ListItemSkeleton';
29
+ const TileSkeleton = ({ lx, ...props }) => {
30
+ return (_jsxs(Box, { lx: {
31
+ flexDirection: 'column',
32
+ width: 's112',
33
+ alignItems: 'center',
34
+ gap: 's12',
35
+ borderRadius: 'md',
36
+ paddingHorizontal: 's8',
37
+ paddingVertical: 's16',
38
+ ...lx,
39
+ }, ...props, children: [_jsx(BaseSkeleton, { lx: {
40
+ width: 's48',
41
+ height: 's48',
42
+ borderRadius: 'full',
43
+ flexShrink: 0,
44
+ } }), _jsxs(Box, { lx: {
45
+ width: 'full',
46
+ flexDirection: 'column',
47
+ alignItems: 'center',
48
+ gap: 's8',
49
+ }, children: [_jsx(BaseSkeleton, { lx: { height: 's12', width: 's48', borderRadius: 'full' } }), _jsx(BaseSkeleton, { lx: { height: 's12', width: 's64', borderRadius: 'full' } })] })] }));
50
+ };
51
+ TileSkeleton.displayName = 'TileSkeleton';
52
+ const componentsMap = {
53
+ 'list-item': ListItemSkeleton,
54
+ tile: TileSkeleton,
55
+ };
56
+ /**
57
+ * A skeleton component that displays a pulsing placeholder for loading content.
58
+ *
59
+ * @example
60
+ * <Skeleton lx={{ height: 's16', width: 's256' }} />
61
+ *
62
+ * @example
63
+ * // List item variant
64
+ * <Skeleton component='list-item' lx={{ width: 's320' }} />
65
+ *
66
+ * @example
67
+ * // Tile variant
68
+ * <Skeleton component='tile' />
69
+ */
70
+ const Skeleton = ({ lx, component, ...props }) => {
71
+ /**
72
+ * Check if the component is a valid pre-built variant and return the corresponding component.
73
+ */
74
+ if (component && componentsMap[component]) {
75
+ const Component = componentsMap[component];
76
+ return (_jsx(Pulse, { animate: true, children: _jsx(Component, { ...props, lx: lx }) }));
77
+ }
78
+ return (_jsx(Pulse, { animate: true, children: _jsx(BaseSkeleton, { testID: 'skeleton', lx: lx, ...props }) }));
79
+ };
80
+ Skeleton.displayName = 'Skeleton';
81
+ export { Skeleton };
@@ -0,0 +1,11 @@
1
+ import { Meta, StoryObj } from '@storybook/react-native-web-vite';
2
+ import { Skeleton } from './Skeleton';
3
+ declare const meta: Meta<typeof Skeleton>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof Skeleton>;
6
+ export declare const Base: Story;
7
+ export declare const WithListItem: Story;
8
+ export declare const WithTile: Story;
9
+ export declare const SizeShowcase: Story;
10
+ export declare const ShapeShowcase: Story;
11
+ //# sourceMappingURL=Skeleton.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Skeleton.stories.d.ts","sourceRoot":"","sources":["../../../../../src/lib/Components/Skeleton/Skeleton.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAElE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,QAAQ,CAa/B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,QAAQ,CAAC,CAAC;AAEvC,eAAO,MAAM,IAAI,EAAE,KAelB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAe1B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAgB3B,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box } from '../Utility/Box';
3
+ import { Skeleton } from './Skeleton';
4
+ const meta = {
5
+ title: 'Communication/Skeleton',
6
+ component: Skeleton,
7
+ parameters: {
8
+ actions: { disable: true },
9
+ },
10
+ argTypes: {
11
+ component: {
12
+ control: 'select',
13
+ options: [undefined, 'list-item', 'tile'],
14
+ description: 'Pre-built skeleton component variant',
15
+ },
16
+ },
17
+ };
18
+ export default meta;
19
+ export const Base = {
20
+ args: {
21
+ lx: {
22
+ height: 's16',
23
+ width: 's256',
24
+ },
25
+ },
26
+ render: (args) => (_jsx(Box, { lx: { padding: 's16', backgroundColor: 'canvas', borderRadius: 'md' }, children: _jsx(Skeleton, { component: args.component, lx: args.component ? undefined : args.lx }) })),
27
+ };
28
+ export const WithListItem = {
29
+ render: () => (_jsx(Box, { lx: { padding: 's16', backgroundColor: 'canvas', borderRadius: 'md' }, children: _jsx(Skeleton, { component: 'list-item' }) })),
30
+ };
31
+ export const WithTile = {
32
+ render: () => (_jsx(Box, { lx: { padding: 's16', backgroundColor: 'canvas', borderRadius: 'md' }, children: _jsx(Skeleton, { component: 'tile' }) })),
33
+ };
34
+ export const SizeShowcase = {
35
+ render: () => (_jsxs(Box, { lx: {
36
+ padding: 's16',
37
+ backgroundColor: 'canvas',
38
+ borderRadius: 'md',
39
+ gap: 's4',
40
+ }, children: [_jsx(Skeleton, { lx: { height: 's40', width: 's56' } }), _jsx(Skeleton, { lx: { height: 's12', width: 's112' } }), _jsx(Skeleton, { lx: { height: 's128', width: 's256' } })] })),
41
+ };
42
+ export const ShapeShowcase = {
43
+ render: () => (_jsxs(Box, { lx: {
44
+ padding: 's16',
45
+ backgroundColor: 'canvas',
46
+ borderRadius: 'md',
47
+ gap: 's4',
48
+ }, children: [_jsx(Skeleton, { lx: { height: 's40', width: 's256', borderRadius: 'none' } }), _jsx(Skeleton, { lx: { height: 's40', width: 's256', borderRadius: 'lg' } }), _jsx(Skeleton, { lx: { width: 's48', height: 's48', borderRadius: 'full' } }), _jsx(Skeleton, { lx: { width: 's48', height: 's48', borderRadius: 'md' } })] })),
49
+ };
@@ -0,0 +1,3 @@
1
+ export * from './Skeleton';
2
+ export * from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lib/Components/Skeleton/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './Skeleton';
2
+ export * from './types';
@@ -0,0 +1,10 @@
1
+ import { StyledViewProps } from '../../../styles';
2
+ export type SkeletonProps = {
3
+ /**
4
+ * Pre-built skeleton component variant
5
+ * - `list-item`: Horizontal layout with circle and two text lines
6
+ * - `tile`: Vertical centered layout with circle and two text lines in a rounded container
7
+ */
8
+ component?: 'list-item' | 'tile';
9
+ } & Omit<StyledViewProps, 'children'>;
10
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/lib/Components/Skeleton/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,MAAM,aAAa,GAAG;IAC1B;;;;OAIG;IACH,SAAS,CAAC,EAAE,WAAW,GAAG,MAAM,CAAC;CAClC,GAAG,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -1 +1 @@
1
- {"version":3,"file":"Spinner.d.ts","sourceRoot":"","sources":["../../../../../src/lib/Components/Spinner/Spinner.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAgCvC;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,OAAO;yCAMjB,YAAY;;CA2Bd,CAAC"}
1
+ {"version":3,"file":"Spinner.d.ts","sourceRoot":"","sources":["../../../../../src/lib/Components/Spinner/Spinner.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,OAAO;yCAMjB,YAAY;;CA2Bd,CAAC"}
@@ -1,30 +1,9 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { memo, useEffect, useRef } from 'react';
3
- import { Animated, Easing } from 'react-native';
4
2
  import Svg, { Path } from 'react-native-svg';
5
3
  import { useCommonTranslation } from '../../../i18n';
6
4
  import { useResolveTextStyle, useTheme } from '../../../styles';
7
- import { RuntimeConstants } from '../../utils';
5
+ import { Spin } from '../../Animations/Spin';
8
6
  import { Box } from '../Utility';
9
- const SpinAnimation = memo(({ children }) => {
10
- const spinValue = useRef(new Animated.Value(0)).current;
11
- useEffect(() => {
12
- const animation = Animated.loop(Animated.timing(spinValue, {
13
- toValue: 1,
14
- duration: 1000,
15
- easing: Easing.linear,
16
- useNativeDriver: RuntimeConstants.isNative,
17
- }));
18
- animation.start();
19
- return () => animation.stop();
20
- }, [spinValue]);
21
- const spin = spinValue.interpolate({
22
- inputRange: [0, 1],
23
- outputRange: ['0deg', '360deg'],
24
- });
25
- return (_jsx(Animated.View, { style: { transform: [{ rotate: spin }] }, children: children }));
26
- });
27
- SpinAnimation.displayName = 'SpinAnimation';
28
7
  /**
29
8
  * A basic spinner component for loading states.
30
9
  *
@@ -44,6 +23,6 @@ export const Spinner = ({ lx = {}, size = 16, color, ref, ...props }) => {
44
23
  const { theme } = useTheme();
45
24
  const resolvedColorStyle = useResolveTextStyle({ color });
46
25
  const strokeColor = resolvedColorStyle?.color ?? color ?? theme.colors.text.base;
47
- return (_jsx(Box, { ref: ref, lx: { flexShrink: 0, ...lx }, ...props, children: _jsx(SpinAnimation, { children: _jsx(Svg, { width: size, height: size, viewBox: '0 0 16 16', fill: 'none', accessibilityLabel: t('components.spinner.loadingAriaLabel'), children: _jsx(Path, { d: 'M8 1.5C11.5899 1.5 14.5 4.41015 14.5 8C14.5 11.5899 11.5899 14.5 8 14.5C4.41015 14.5 1.5 11.5899 1.5 8', stroke: strokeColor, strokeWidth: '1.5', strokeLinecap: 'round' }) }) }) }));
26
+ return (_jsx(Box, { ref: ref, lx: { flexShrink: 0, ...lx }, ...props, children: _jsx(Spin, { children: _jsx(Svg, { width: size, height: size, viewBox: '0 0 16 16', fill: 'none', accessibilityLabel: t('components.spinner.loadingAriaLabel'), children: _jsx(Path, { d: 'M8 1.5C11.5899 1.5 14.5 4.41015 14.5 8C14.5 11.5899 11.5899 14.5 8 14.5C4.41015 14.5 1.5 11.5899 1.5 8', stroke: strokeColor, strokeWidth: '1.5', strokeLinecap: 'round' }) }) }) }));
48
27
  };
49
28
  Spinner.displayName = 'Spinner';
@@ -0,0 +1,16 @@
1
+ import { StepperProps } from './types';
2
+ /**
3
+ * A circular stepper component showing progress as current step out of total steps.
4
+ * Renders a track arc with a progress arc and a center label.
5
+ *
6
+ * @see [Figma – Stepper](https://www.figma.com/design/JxaLVMTWirCpU0rsbZ30k7/2.-Components-Library?node-id=11977-94&m=dev)
7
+ *
8
+ * @example
9
+ * <Stepper currentStep={1} totalSteps={4} />
10
+ * <Stepper currentStep={0} totalSteps={9} disabled /> // Shows minimal dot, disabled style
11
+ */
12
+ export declare const Stepper: {
13
+ ({ lx, currentStep, totalSteps, disabled, label, ref, ...props }: StepperProps): import("react/jsx-runtime").JSX.Element;
14
+ displayName: string;
15
+ };
16
+ //# sourceMappingURL=Stepper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stepper.d.ts","sourceRoot":"","sources":["../../../../../src/lib/Components/Stepper/Stepper.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAOvC;;;;;;;;;GASG;AACH,eAAO,MAAM,OAAO;sEAQjB,YAAY;;CA2Hd,CAAC"}
@@ -0,0 +1,74 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { getStepperCalculations } from '@ledgerhq/lumen-utils-shared';
3
+ import { useEffect, useRef } from 'react';
4
+ import { Animated, Easing } from 'react-native';
5
+ import Svg, { Circle } from 'react-native-svg';
6
+ import { useCommonTranslation } from '../../../i18n';
7
+ import { useTheme } from '../../../styles';
8
+ import { Box } from '../Utility/Box';
9
+ import { Text } from '../Utility/Text';
10
+ const SIZE = 48;
11
+ const STROKE_WIDTH = 4;
12
+ const AnimatedCircle = Animated.createAnimatedComponent(Circle);
13
+ /**
14
+ * A circular stepper component showing progress as current step out of total steps.
15
+ * Renders a track arc with a progress arc and a center label.
16
+ *
17
+ * @see [Figma – Stepper](https://www.figma.com/design/JxaLVMTWirCpU0rsbZ30k7/2.-Components-Library?node-id=11977-94&m=dev)
18
+ *
19
+ * @example
20
+ * <Stepper currentStep={1} totalSteps={4} />
21
+ * <Stepper currentStep={0} totalSteps={9} disabled /> // Shows minimal dot, disabled style
22
+ */
23
+ export const Stepper = ({ lx = {}, currentStep, totalSteps, disabled = false, label, ref, ...props }) => {
24
+ const { t } = useCommonTranslation();
25
+ const { theme } = useTheme();
26
+ const { displayLabel, r, cx, cy, trackDashArray, progressDashArray, progressDashOffset, } = getStepperCalculations({
27
+ currentStep,
28
+ totalSteps,
29
+ size: SIZE,
30
+ label,
31
+ strokeWidth: STROKE_WIDTH,
32
+ });
33
+ const animatedOffset = useRef(new Animated.Value(progressDashOffset)).current;
34
+ useEffect(() => {
35
+ const animation = Animated.timing(animatedOffset, {
36
+ toValue: progressDashOffset,
37
+ duration: 300,
38
+ easing: Easing.inOut(Easing.ease),
39
+ useNativeDriver: false,
40
+ });
41
+ animation.start();
42
+ return () => animation.stop();
43
+ }, [progressDashOffset, animatedOffset]);
44
+ return (_jsxs(Box, { ref: ref, accessibilityRole: 'progressbar', accessibilityValue: {
45
+ now: currentStep,
46
+ min: 1,
47
+ max: totalSteps,
48
+ text: displayLabel,
49
+ }, accessibilityLabel: label ??
50
+ t('components.stepper.progressAriaLabel', {
51
+ currentStep: Math.min(Math.max(currentStep, 0), totalSteps),
52
+ totalSteps,
53
+ }), lx: {
54
+ width: 's48',
55
+ height: 's48',
56
+ flexShrink: 0,
57
+ alignItems: 'center',
58
+ justifyContent: 'center',
59
+ borderRadius: 'full',
60
+ ...lx,
61
+ }, ...props, children: [_jsxs(Svg, { width: SIZE, height: SIZE, viewBox: `0 0 ${SIZE} ${SIZE}`, style: { transform: [{ rotate: '135deg' }] }, children: [_jsx(Circle, { cx: cx, cy: cy, r: r, fill: 'none', stroke: theme.colors.border.mutedSubtle, strokeLinecap: 'round', strokeWidth: STROKE_WIDTH, strokeDasharray: trackDashArray, strokeDashoffset: 0 }), _jsx(AnimatedCircle, { cx: cx, cy: cy, r: r, fill: 'none', stroke: disabled
62
+ ? theme.colors.border.mutedSubtleHover
63
+ : theme.colors.border.active, strokeLinecap: 'round', strokeWidth: STROKE_WIDTH, strokeDasharray: progressDashArray, strokeDashoffset: animatedOffset })] }), _jsx(Box, { lx: {
64
+ position: 'absolute',
65
+ alignItems: 'center',
66
+ justifyContent: 'center',
67
+ flexDirection: 'row',
68
+ top: 's0',
69
+ left: 's0',
70
+ right: 's0',
71
+ bottom: 's0',
72
+ }, children: label ? (_jsx(Text, { typography: 'body2SemiBold', lx: { color: 'base' }, children: label })) : (_jsxs(_Fragment, { children: [_jsx(Text, { typography: 'body1SemiBold', lx: { color: 'base' }, children: Math.min(Math.max(currentStep, 0), totalSteps) }), _jsxs(Text, { typography: 'body2SemiBold', lx: { color: 'muted' }, children: ["/", totalSteps] })] })) })] }));
73
+ };
74
+ Stepper.displayName = 'Stepper';
@@ -0,0 +1,9 @@
1
+ import { Meta, StoryObj } from '@storybook/react-native-web-vite';
2
+ import { Stepper } from './Stepper';
3
+ declare const meta: Meta<typeof Stepper>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof Stepper>;
6
+ export declare const Base: Story;
7
+ export declare const DisabledShowcase: Story;
8
+ export declare const WithCustomLabel: Story;
9
+ //# sourceMappingURL=Stepper.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stepper.stories.d.ts","sourceRoot":"","sources":["../../../../../src/lib/Components/Stepper/Stepper.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAGlE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,OAAO,CAW9B,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,OAAO,CAAC,CAAC;AAEtC,eAAO,MAAM,IAAI,EAAE,KAMlB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAuB9B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAO7B,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box } from '../Utility/Box';
3
+ import { Text } from '../Utility/Text';
4
+ import { Stepper } from './Stepper';
5
+ const meta = {
6
+ title: 'Communication/Stepper',
7
+ component: Stepper,
8
+ parameters: {
9
+ actions: { disable: true },
10
+ },
11
+ argTypes: {
12
+ currentStep: { control: 'number' },
13
+ totalSteps: { control: 'number' },
14
+ disabled: { control: 'boolean' },
15
+ },
16
+ };
17
+ export default meta;
18
+ export const Base = {
19
+ args: {
20
+ currentStep: 2,
21
+ totalSteps: 4,
22
+ },
23
+ render: (args) => _jsx(Stepper, { ...args }),
24
+ };
25
+ export const DisabledShowcase = {
26
+ render: () => (_jsxs(Box, { lx: { gap: 's32', alignItems: 'center' }, children: [_jsxs(Box, { lx: { alignItems: 'center', gap: 's8' }, children: [_jsx(Text, { typography: 'body3', lx: { color: 'muted' }, children: "Default (2/4)" }), _jsx(Stepper, { currentStep: 2, totalSteps: 4 })] }), _jsxs(Box, { lx: { alignItems: 'center', gap: 's8' }, children: [_jsx(Text, { typography: 'body3', lx: { color: 'muted' }, children: "Disabled (2/4)" }), _jsx(Stepper, { currentStep: 2, totalSteps: 4, disabled: true })] }), _jsxs(Box, { lx: { alignItems: 'center', gap: 's8' }, children: [_jsx(Text, { typography: 'body3', lx: { color: 'muted' }, children: "Unstarted (0/9)" }), _jsx(Stepper, { currentStep: 0, totalSteps: 9 })] })] })),
27
+ };
28
+ export const WithCustomLabel = {
29
+ args: {
30
+ currentStep: 5,
31
+ totalSteps: 5,
32
+ label: '🎉',
33
+ },
34
+ render: (args) => _jsx(Stepper, { ...args }),
35
+ };
@@ -0,0 +1,3 @@
1
+ export * from './Stepper';
2
+ export * from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lib/Components/Stepper/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './Stepper';
2
+ export * from './types';
@@ -0,0 +1,21 @@
1
+ import { StyledViewProps } from '../../../styles';
2
+ export type StepperProps = {
3
+ /**
4
+ * Current step number (1-based). Use 0 or negative to show minimal dot (before starting).
5
+ */
6
+ currentStep: number;
7
+ /**
8
+ * Total number of steps.
9
+ */
10
+ totalSteps: number;
11
+ /**
12
+ * Whether the stepper is disabled. Changes the progress arc to a muted style.
13
+ * @default false
14
+ */
15
+ disabled?: boolean;
16
+ /**
17
+ * Optional custom label. Defaults to "{currentStep}/{totalSteps}".
18
+ */
19
+ label?: string;
20
+ } & Omit<StyledViewProps, 'children'>;
21
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/lib/Components/Stepper/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,MAAM,YAAY,GAAG;IACzB;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -1,4 +1,5 @@
1
1
  import { TabBarItemProps, TabBarProps } from './types';
2
+ export declare const TAB_BAR_HEIGHT = 56;
2
3
  /**
3
4
  * Individual tab item component that displays an icon and label.
4
5
  * Must be used as a child of TabBar.
@@ -1 +1 @@
1
- {"version":3,"file":"TabBar.d.ts","sourceRoot":"","sources":["../../../../../src/lib/Components/TabBar/TabBar.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAIvD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,KAAK,EACL,IAAI,EACJ,UAAU,GACX,EAAE,eAAe,2CA+FjB;yBApGe,UAAU;;;AAwG1B;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,MAAM,CAAC,EACrB,MAAM,EACN,UAAU,EACV,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,WAAW,2CAiFb"}
1
+ {"version":3,"file":"TabBar.d.ts","sourceRoot":"","sources":["../../../../../src/lib/Components/TabBar/TabBar.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEvD,eAAO,MAAM,cAAc,KAAK,CAAC;AAGjC;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,KAAK,EACL,IAAI,EACJ,UAAU,GACX,EAAE,eAAe,2CA+FjB;yBApGe,UAAU;;;AAwG1B;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,MAAM,CAAC,EACrB,MAAM,EACN,UAAU,EACV,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,WAAW,2CAiFb"}
@@ -7,6 +7,7 @@ import { useStyleSheet, useTheme } from '../../../styles';
7
7
  import { Placeholder } from '../../Symbols';
8
8
  import { Box, Pressable } from '../Utility';
9
9
  import { TabBarContextProvider, useTabBarContext } from './TabBarContext';
10
+ export const TAB_BAR_HEIGHT = 56;
10
11
  const PILL_INSET = 4;
11
12
  /**
12
13
  * Individual tab item component that displays an icon and label.
@@ -130,7 +131,7 @@ export function TabBar({ active, onTabPress, children, ...props }) {
130
131
  }
131
132
  const useStyles = () => useStyleSheet((t) => ({
132
133
  container: {
133
- height: t.sizes.s56,
134
+ height: TAB_BAR_HEIGHT,
134
135
  flexDirection: 'row',
135
136
  justifyContent: 'center',
136
137
  padding: t.spacings.s4,
@@ -1,3 +1,3 @@
1
- export { TabBar, TabBarItem } from './TabBar';
1
+ export { TabBar, TabBarItem, TAB_BAR_HEIGHT } from './TabBar';
2
2
  export type { TabBarProps, TabBarItemProps } from './types';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lib/Components/TabBar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC9C,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/lib/Components/TabBar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC9D,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC"}
@@ -1 +1 @@
1
- export { TabBar, TabBarItem } from './TabBar';
1
+ export { TabBar, TabBarItem, TAB_BAR_HEIGHT } from './TabBar';
@@ -1,5 +1,3 @@
1
- import React from 'react';
2
- import { View } from 'react-native';
3
1
  import { TileButtonProps } from './types';
4
2
  /**
5
3
  * A compact button component displaying an icon above a label in a vertical layout.
@@ -15,5 +13,8 @@ import { TileButtonProps } from './types';
15
13
  * Settings
16
14
  * </TileButton>
17
15
  */
18
- export declare const TileButton: React.ForwardRefExoticComponent<Omit<TileButtonProps, "ref"> & React.RefAttributes<View>>;
16
+ export declare const TileButton: {
17
+ ({ lx, style, icon: IconProp, children, disabled, isFull, numberOfLines, ...props }: TileButtonProps): import("react/jsx-runtime").JSX.Element;
18
+ displayName: string;
19
+ };
19
20
  //# sourceMappingURL=TileButton.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TileButton.d.ts","sourceRoot":"","sources":["../../../../../src/lib/Components/TileButton/TileButton.tsx"],"names":[],"mappings":"AACA,OAAO,KAAgC,MAAM,OAAO,CAAC;AACrD,OAAO,EAAc,IAAI,EAAE,MAAM,cAAc,CAAC;AAIhD,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAwD1C;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,UAAU,2FA2CtB,CAAC"}
1
+ {"version":3,"file":"TileButton.d.ts","sourceRoot":"","sources":["../../../../../src/lib/Components/TileButton/TileButton.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAwD1C;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,UAAU;yFASpB,eAAe;;CAyBjB,CAAC"}
@@ -1,6 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { isTextChildren } from '@ledgerhq/lumen-utils-shared';
3
- import React from 'react';
4
3
  import { StyleSheet, View } from 'react-native';
5
4
  import { useStyleSheet } from '../../../styles';
6
5
  import { Pressable, Text } from '../Utility';
@@ -55,10 +54,10 @@ const useStyles = ({ disabled, pressed, isFull, }) => {
55
54
  * Settings
56
55
  * </TileButton>
57
56
  */
58
- export const TileButton = React.forwardRef(({ lx, style, icon: IconProp, children, disabled = false, isFull = false, numberOfLines = 2, ...props }, ref) => {
57
+ export const TileButton = ({ lx, style, icon: IconProp, children, disabled = false, isFull = false, numberOfLines = 2, ...props }) => {
59
58
  const rootStyles = useRootStyles({ isFull });
60
- return (_jsx(Pressable, { ref: ref, lx: lx, style: StyleSheet.flatten([style, rootStyles.root]), disabled: disabled, accessibilityRole: 'button', accessibilityState: { disabled }, ...props, children: ({ pressed }) => (_jsx(TileButtonContent, { disabled: disabled, pressed: pressed, isFull: isFull, IconProp: IconProp, numberOfLines: numberOfLines, children: children })) }));
61
- });
59
+ return (_jsx(Pressable, { lx: lx, style: StyleSheet.flatten([style, rootStyles.root]), disabled: disabled, accessibilityRole: 'button', accessibilityState: { disabled }, ...props, children: ({ pressed }) => (_jsx(TileButtonContent, { disabled: disabled, pressed: pressed, isFull: isFull, IconProp: IconProp, numberOfLines: numberOfLines, children: children })) }));
60
+ };
62
61
  const TileButtonContent = ({ disabled, pressed, isFull, IconProp, numberOfLines, children, }) => {
63
62
  const styles = useStyles({ disabled, pressed, isFull });
64
63
  return (_jsxs(View, { style: styles.container, testID: 'tile-button-content', children: [_jsx(IconProp, { size: ICON_SIZE, style: styles.icon }), isTextChildren(children) ? (_jsx(Text, { style: styles.label, numberOfLines: numberOfLines, children: children })) : (children)] }));
@@ -17,7 +17,10 @@ export * from './NavBar';
17
17
  export * from './PageIndicator';
18
18
  export * from './SearchInput';
19
19
  export * from './Select';
20
+ export * from './Skeleton';
21
+ export * from './Spinner';
20
22
  export * from './Spot';
23
+ export * from './Stepper';
21
24
  export * from './Subheader';
22
25
  export * from './Switch';
23
26
  export * from './TabBar';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/Components/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/Components/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
@@ -17,7 +17,10 @@ export * from './NavBar';
17
17
  export * from './PageIndicator';
18
18
  export * from './SearchInput';
19
19
  export * from './Select';
20
+ export * from './Skeleton';
21
+ export * from './Spinner';
20
22
  export * from './Spot';
23
+ export * from './Stepper';
21
24
  export * from './Subheader';
22
25
  export * from './Switch';
23
26
  export * from './TabBar';
@@ -1,4 +1,4 @@
1
- import { ComponentPropsWithRef } from 'react';
1
+ import type { ComponentPropsWithRef } from 'react';
2
2
  import { PressableProps, PressableStateCallbackType, TextProps as RNTextProps, ViewProps, ViewStyle, Text as RNText, View as RNView, Pressable as RNPressable } from 'react-native';
3
3
  import { LumenTextStyle, LumenViewStyle } from './lx.types';
4
4
  import { LumenTypographyTokenName } from './theme.types';
@@ -1 +1 @@
1
- {"version":3,"file":"factories.types.d.ts","sourceRoot":"","sources":["../../../../src/styles/types/factories.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EACL,cAAc,EACd,0BAA0B,EAC1B,SAAS,IAAI,WAAW,EACxB,SAAS,EACT,SAAS,EACT,IAAI,IAAI,MAAM,EACd,IAAI,IAAI,MAAM,EACd,SAAS,IAAI,WAAW,EACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAEzD,KAAK,OAAO,GAAG,CAAC,KAAK,EAAE,0BAA0B,KAAK,SAAS,CAAC;AAChE,MAAM,MAAM,kBAAkB,GAC1B,SAAS,GACT,OAAO,GACP,kBAAkB,EAAE,GACpB,IAAI,GACJ,SAAS,CAAC;AAEd,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG;IACnE,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B;;OAEG;IACH,EAAE,CAAC,EAAE,cAAc,CAAC;CACrB,GAAG,SAAS,GACX,qBAAqB,CAAC,OAAO,MAAM,CAAC,CAAC;AAEvC;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B;;OAEG;IACH,EAAE,CAAC,EAAE,cAAc,CAAC;IACpB;;OAEG;IACH,UAAU,CAAC,EAAE,wBAAwB,CAAC;CACvC,GAAG,WAAW,GACb,qBAAqB,CAAC,OAAO,MAAM,CAAC,CAAC;AAEvC;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC;;OAEG;IACH,EAAE,CAAC,EAAE,cAAc,CAAC;CACrB,GAAG,sBAAsB,GACxB,qBAAqB,CAAC,OAAO,WAAW,CAAC,CAAC"}
1
+ {"version":3,"file":"factories.types.d.ts","sourceRoot":"","sources":["../../../../src/styles/types/factories.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,EACL,cAAc,EACd,0BAA0B,EAC1B,SAAS,IAAI,WAAW,EACxB,SAAS,EACT,SAAS,EACT,IAAI,IAAI,MAAM,EACd,IAAI,IAAI,MAAM,EACd,SAAS,IAAI,WAAW,EACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAEzD,KAAK,OAAO,GAAG,CAAC,KAAK,EAAE,0BAA0B,KAAK,SAAS,CAAC;AAChE,MAAM,MAAM,kBAAkB,GAC1B,SAAS,GACT,OAAO,GACP,kBAAkB,EAAE,GACpB,IAAI,GACJ,SAAS,CAAC;AAEd,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,GAAG;IACnE,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B;;OAEG;IACH,EAAE,CAAC,EAAE,cAAc,CAAC;CACrB,GAAG,SAAS,GACX,qBAAqB,CAAC,OAAO,MAAM,CAAC,CAAC;AAEvC;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B;;OAEG;IACH,EAAE,CAAC,EAAE,cAAc,CAAC;IACpB;;OAEG;IACH,UAAU,CAAC,EAAE,wBAAwB,CAAC;CACvC,GAAG,WAAW,GACb,qBAAqB,CAAC,OAAO,MAAM,CAAC,CAAC;AAEvC;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC;;OAEG;IACH,EAAE,CAAC,EAAE,cAAc,CAAC;CACrB,GAAG,sBAAsB,GACxB,qBAAqB,CAAC,OAAO,WAAW,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ledgerhq/lumen-ui-rnative",
3
- "version": "0.0.70",
3
+ "version": "0.0.72",
4
4
  "license": "Apache-2.0",
5
5
  "keywords": [
6
6
  "react-native",
@@ -27,7 +27,7 @@
27
27
  "./styles": "./src/styles/index.ts"
28
28
  },
29
29
  "dependencies": {
30
- "@ledgerhq/lumen-utils-shared": "0.0.18",
30
+ "@ledgerhq/lumen-utils-shared": "0.0.19",
31
31
  "i18next": "^23.7.0",
32
32
  "react-i18next": "^14.0.0"
33
33
  },
@@ -37,8 +37,8 @@
37
37
  "peerDependencies": {
38
38
  "@types/react": "^19.0.0",
39
39
  "@gorhom/bottom-sheet": "^5.0.0",
40
- "@ledgerhq/lumen-design-core": "0.0.51",
41
- "react": "19.0.0",
40
+ "@ledgerhq/lumen-design-core": "0.0.52",
41
+ "react": "^19.0.0",
42
42
  "react-native": "~0.79.7",
43
43
  "react-native-reanimated": "^3.0.0",
44
44
  "react-native-safe-area-context": "^4.0.0 || ^5.0.0",
@@ -22,6 +22,9 @@
22
22
  },
23
23
  "link": {
24
24
  "opensInNewTabAriaLabel": "(Öffnet in neuem Tab)"
25
+ },
26
+ "stepper": {
27
+ "progressAriaLabel": "Schritt {{currentStep}} von {{totalSteps}}"
25
28
  }
26
29
  }
27
30
  }
@@ -22,6 +22,9 @@
22
22
  },
23
23
  "link": {
24
24
  "opensInNewTabAriaLabel": "(opens in a new tab)"
25
+ },
26
+ "stepper": {
27
+ "progressAriaLabel": "Step {{currentStep}} of {{totalSteps}}"
25
28
  }
26
29
  }
27
30
  }
@@ -22,6 +22,9 @@
22
22
  },
23
23
  "link": {
24
24
  "opensInNewTabAriaLabel": "(se abre en una pestaña nueva)"
25
+ },
26
+ "stepper": {
27
+ "progressAriaLabel": "Paso {{currentStep}} de {{totalSteps}}"
25
28
  }
26
29
  }
27
30
  }
@@ -22,6 +22,9 @@
22
22
  },
23
23
  "link": {
24
24
  "opensInNewTabAriaLabel": "(s'ouvre dans un nouvel onglet)"
25
+ },
26
+ "stepper": {
27
+ "progressAriaLabel": "Étape {{currentStep}} sur {{totalSteps}}"
25
28
  }
26
29
  }
27
30
  }