jfs-components 0.0.73 → 0.0.77
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.
- package/CHANGELOG.md +115 -6
- package/lib/commonjs/components/AccountCard/AccountCard.js +247 -0
- package/lib/commonjs/components/ActionFooter/ActionFooter.js +147 -82
- package/lib/commonjs/components/AppBar/AppBar.js +17 -11
- package/lib/commonjs/components/Avatar/Avatar.js +20 -0
- package/lib/commonjs/components/Badge/Badge.js +23 -0
- package/lib/commonjs/components/Button/Button.js +37 -0
- package/lib/commonjs/components/CardBankAccount/CardBankAccount.js +18 -2
- package/lib/commonjs/components/CheckboxItem/CheckboxItem.js +40 -25
- package/lib/commonjs/components/Dropdown/Dropdown.js +214 -0
- package/lib/commonjs/components/DropdownInput/DropdownInput.js +542 -0
- package/lib/commonjs/components/FormField/FormField.js +328 -178
- package/lib/commonjs/components/IconButton/IconButton.js +20 -0
- package/lib/commonjs/components/Image/Image.js +26 -1
- package/lib/commonjs/components/LottieIntroBlock/LottieIntroBlock.js +150 -0
- package/lib/commonjs/components/LottiePlayer/LottiePlayer.js +116 -0
- package/lib/commonjs/components/LottiePlayer/LottiePlayer.web.js +82 -0
- package/lib/commonjs/components/LottiePlayer/loadNativeLottieView.js +74 -0
- package/lib/commonjs/components/LottiePlayer/loadWebLottieView.js +50 -0
- package/lib/commonjs/components/PageHero/PageHero.js +189 -0
- package/lib/commonjs/components/PoweredByLabel/PoweredByLabel.js +135 -0
- package/lib/commonjs/components/PoweredByLabel/finvu.png +0 -0
- package/lib/commonjs/components/RechargeCard/RechargeCard.js +32 -17
- package/lib/commonjs/components/Text/Text.js +40 -3
- package/lib/commonjs/components/Tooltip/Tooltip.js +34 -27
- package/lib/commonjs/components/index.js +67 -0
- package/lib/commonjs/design-tokens/Coin Variables-variables-full.json +1 -1
- package/lib/commonjs/icons/Icon.js +16 -0
- package/lib/commonjs/icons/registry.js +1 -1
- package/lib/commonjs/index.js +12 -0
- package/lib/commonjs/skeleton/Skeleton.js +234 -0
- package/lib/commonjs/skeleton/SkeletonGroup.js +140 -0
- package/lib/commonjs/skeleton/index.js +58 -0
- package/lib/commonjs/skeleton/shimmer-tokens.js +189 -0
- package/lib/commonjs/skeleton/useReducedMotion.js +64 -0
- package/lib/module/components/AccountCard/AccountCard.js +241 -0
- package/lib/module/components/ActionFooter/ActionFooter.js +146 -82
- package/lib/module/components/AppBar/AppBar.js +17 -11
- package/lib/module/components/Avatar/Avatar.js +19 -0
- package/lib/module/components/Badge/Badge.js +23 -0
- package/lib/module/components/Button/Button.js +37 -0
- package/lib/module/components/CardBankAccount/CardBankAccount.js +17 -2
- package/lib/module/components/CheckboxItem/CheckboxItem.js +41 -26
- package/lib/module/components/Dropdown/Dropdown.js +206 -0
- package/lib/module/components/DropdownInput/DropdownInput.js +536 -0
- package/lib/module/components/FormField/FormField.js +330 -180
- package/lib/module/components/IconButton/IconButton.js +20 -0
- package/lib/module/components/Image/Image.js +25 -1
- package/lib/module/components/LottieIntroBlock/LottieIntroBlock.js +144 -0
- package/lib/module/components/LottiePlayer/LottiePlayer.js +111 -0
- package/lib/module/components/LottiePlayer/LottiePlayer.web.js +77 -0
- package/lib/module/components/LottiePlayer/loadNativeLottieView.js +69 -0
- package/lib/module/components/LottiePlayer/loadWebLottieView.js +45 -0
- package/lib/module/components/PageHero/PageHero.js +183 -0
- package/lib/module/components/PoweredByLabel/PoweredByLabel.js +130 -0
- package/lib/module/components/PoweredByLabel/finvu.png +0 -0
- package/lib/module/components/RechargeCard/RechargeCard.js +33 -17
- package/lib/module/components/Text/Text.js +40 -3
- package/lib/module/components/Tooltip/Tooltip.js +34 -27
- package/lib/module/components/index.js +8 -1
- package/lib/module/design-tokens/Coin Variables-variables-full.json +1 -1
- package/lib/module/icons/Icon.js +16 -0
- package/lib/module/icons/registry.js +1 -1
- package/lib/module/index.js +2 -1
- package/lib/module/skeleton/Skeleton.js +229 -0
- package/lib/module/skeleton/SkeletonGroup.js +133 -0
- package/lib/module/skeleton/index.js +6 -0
- package/lib/module/skeleton/shimmer-tokens.js +181 -0
- package/lib/module/skeleton/useReducedMotion.js +61 -0
- package/lib/typescript/src/components/AccountCard/AccountCard.d.ts +81 -0
- package/lib/typescript/src/components/ActionFooter/ActionFooter.d.ts +26 -21
- package/lib/typescript/src/components/Avatar/Avatar.d.ts +7 -1
- package/lib/typescript/src/components/Badge/Badge.d.ts +7 -1
- package/lib/typescript/src/components/Button/Button.d.ts +8 -1
- package/lib/typescript/src/components/CardBankAccount/CardBankAccount.d.ts +9 -2
- package/lib/typescript/src/components/CheckboxItem/CheckboxItem.d.ts +18 -2
- package/lib/typescript/src/components/Dropdown/Dropdown.d.ts +62 -0
- package/lib/typescript/src/components/DropdownInput/DropdownInput.d.ts +107 -0
- package/lib/typescript/src/components/FormField/FormField.d.ts +76 -19
- package/lib/typescript/src/components/IconButton/IconButton.d.ts +7 -1
- package/lib/typescript/src/components/Image/Image.d.ts +8 -1
- package/lib/typescript/src/components/LottieIntroBlock/LottieIntroBlock.d.ts +58 -0
- package/lib/typescript/src/components/LottiePlayer/LottiePlayer.d.ts +85 -0
- package/lib/typescript/src/components/LottiePlayer/LottiePlayer.web.d.ts +28 -0
- package/lib/typescript/src/components/LottiePlayer/loadNativeLottieView.d.ts +11 -0
- package/lib/typescript/src/components/LottiePlayer/loadWebLottieView.d.ts +11 -0
- package/lib/typescript/src/components/PageHero/PageHero.d.ts +79 -0
- package/lib/typescript/src/components/PoweredByLabel/PoweredByLabel.d.ts +70 -0
- package/lib/typescript/src/components/Text/Text.d.ts +31 -2
- package/lib/typescript/src/components/Tooltip/Tooltip.d.ts +13 -2
- package/lib/typescript/src/components/index.d.ts +8 -1
- package/lib/typescript/src/icons/Icon.d.ts +7 -1
- package/lib/typescript/src/icons/registry.d.ts +1 -1
- package/lib/typescript/src/index.d.ts +1 -0
- package/lib/typescript/src/skeleton/Skeleton.d.ts +60 -0
- package/lib/typescript/src/skeleton/SkeletonGroup.d.ts +78 -0
- package/lib/typescript/src/skeleton/index.d.ts +5 -0
- package/lib/typescript/src/skeleton/shimmer-tokens.d.ts +160 -0
- package/lib/typescript/src/skeleton/useReducedMotion.d.ts +15 -0
- package/package.json +11 -3
- package/src/components/AccountCard/AccountCard.tsx +376 -0
- package/src/components/ActionFooter/ActionFooter.tsx +152 -86
- package/src/components/AppBar/AppBar.tsx +25 -14
- package/src/components/Avatar/Avatar.tsx +26 -0
- package/src/components/Badge/Badge.tsx +27 -0
- package/src/components/Button/Button.tsx +40 -0
- package/src/components/CardBankAccount/CardBankAccount.tsx +29 -3
- package/src/components/CheckboxItem/CheckboxItem.tsx +65 -30
- package/src/components/Dropdown/Dropdown.tsx +331 -0
- package/src/components/DropdownInput/DropdownInput.tsx +819 -0
- package/src/components/FormField/FormField.tsx +542 -215
- package/src/components/IconButton/IconButton.tsx +27 -0
- package/src/components/Image/Image.tsx +25 -0
- package/src/components/LottieIntroBlock/LottieIntroBlock.tsx +202 -0
- package/src/components/LottiePlayer/LottiePlayer.tsx +145 -0
- package/src/components/LottiePlayer/LottiePlayer.web.tsx +94 -0
- package/src/components/LottiePlayer/loadNativeLottieView.tsx +87 -0
- package/src/components/LottiePlayer/loadWebLottieView.tsx +64 -0
- package/src/components/PageHero/PageHero.tsx +257 -0
- package/src/components/PoweredByLabel/PoweredByLabel.tsx +221 -0
- package/src/components/PoweredByLabel/finvu.png +0 -0
- package/src/components/RechargeCard/RechargeCard.tsx +32 -24
- package/src/components/Text/Text.tsx +78 -3
- package/src/components/Tooltip/Tooltip.tsx +50 -25
- package/src/components/index.ts +16 -1
- package/src/design-tokens/Coin Variables-variables-full.json +1 -1
- package/src/icons/Icon.tsx +17 -0
- package/src/icons/registry.ts +1 -1
- package/src/index.ts +1 -0
- package/src/skeleton/Skeleton.tsx +298 -0
- package/src/skeleton/SkeletonGroup.tsx +193 -0
- package/src/skeleton/index.ts +10 -0
- package/src/skeleton/shimmer-tokens.ts +221 -0
- package/src/skeleton/useReducedMotion.ts +72 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type StyleProp, type ViewStyle } from 'react-native';
|
|
3
|
+
export type LottieIntroBlockProps = {
|
|
4
|
+
/** Headline text shown below the media area. */
|
|
5
|
+
title?: string;
|
|
6
|
+
/** Whether to render the supportive paragraph below the title. */
|
|
7
|
+
showSupportText?: boolean;
|
|
8
|
+
/** Body/supportive text shown below the title. */
|
|
9
|
+
supportText?: string;
|
|
10
|
+
/** Whether to render the action button at the bottom. */
|
|
11
|
+
showButton?: boolean;
|
|
12
|
+
/** Label for the default action button. Ignored when `buttonSlot` is provided. */
|
|
13
|
+
buttonLabel?: string;
|
|
14
|
+
/** Press handler for the default action button. Ignored when `buttonSlot` is provided. */
|
|
15
|
+
onButtonPress?: () => void;
|
|
16
|
+
/**
|
|
17
|
+
* Custom slot for the media area (Lottie animation, illustration, or image).
|
|
18
|
+
* Should render at the design size of 117x117. If omitted, a neutral
|
|
19
|
+
* placeholder of the same size is rendered so the layout stays stable.
|
|
20
|
+
* `modes` are automatically cascaded into this slot.
|
|
21
|
+
*/
|
|
22
|
+
media?: React.ReactNode;
|
|
23
|
+
/**
|
|
24
|
+
* Optional slot to fully override the action button.
|
|
25
|
+
* When provided, `showButton`, `buttonLabel`, and `onButtonPress` are ignored.
|
|
26
|
+
* `modes` are automatically cascaded into this slot.
|
|
27
|
+
*/
|
|
28
|
+
buttonSlot?: React.ReactNode;
|
|
29
|
+
/** Mode configuration for design-token theming. */
|
|
30
|
+
modes?: Record<string, any>;
|
|
31
|
+
/** Style overrides applied to the outer container. */
|
|
32
|
+
style?: StyleProp<ViewStyle>;
|
|
33
|
+
testID?: string;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* LottieIntroBlock displays a centered onboarding/intro block composed of a
|
|
37
|
+
* media slot (typically a Lottie animation or illustration) above a title,
|
|
38
|
+
* an optional supportive paragraph, and an optional action button.
|
|
39
|
+
*
|
|
40
|
+
* All visual values are resolved from Figma design tokens via
|
|
41
|
+
* `getVariableByName`. Slots cascade the active `modes` to their children
|
|
42
|
+
* through `cloneChildrenWithModes`.
|
|
43
|
+
*
|
|
44
|
+
* @component
|
|
45
|
+
* @example
|
|
46
|
+
* ```tsx
|
|
47
|
+
* <LottieIntroBlock
|
|
48
|
+
* title="Let's get to know how your financial health is doing"
|
|
49
|
+
* supportText="From assets to taxes, stay on top of everything in one simple view."
|
|
50
|
+
* buttonLabel="Get started"
|
|
51
|
+
* onButtonPress={() => navigate('NextScreen')}
|
|
52
|
+
* media={<MyLottiePlayer source={animationSource} />}
|
|
53
|
+
* />
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
declare function LottieIntroBlock({ title, showSupportText, supportText, showButton, buttonLabel, onButtonPress, media, buttonSlot, modes: propModes, style, testID, }: LottieIntroBlockProps): import("react/jsx-runtime").JSX.Element;
|
|
57
|
+
export default LottieIntroBlock;
|
|
58
|
+
//# sourceMappingURL=LottieIntroBlock.d.ts.map
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type StyleProp, type ViewStyle } from 'react-native';
|
|
3
|
+
/**
|
|
4
|
+
* A parsed Lottie animation. The JSON object you get from
|
|
5
|
+
* `require('./animation.json')` or `fetch().then(r => r.json())`. We keep the
|
|
6
|
+
* type intentionally loose because both `lottie-react-native` and `lottie-react`
|
|
7
|
+
* accept slightly different shapes — `LottiePlayer` narrows back to the
|
|
8
|
+
* platform-specific type internally.
|
|
9
|
+
*/
|
|
10
|
+
export type LottieAnimationSource = Record<string, unknown>;
|
|
11
|
+
export type LottiePlayerProps = {
|
|
12
|
+
/**
|
|
13
|
+
* Parsed Lottie animation JSON. Use `require('./animation.json')` in React
|
|
14
|
+
* Native or `import animation from './animation.json'` on web.
|
|
15
|
+
*
|
|
16
|
+
* URI sources (`{ uri: '...' }`) are intentionally not accepted here — web
|
|
17
|
+
* Lottie players require the animation data to be pre-parsed. Fetch and
|
|
18
|
+
* parse the JSON yourself before passing it in if you need a remote source.
|
|
19
|
+
*/
|
|
20
|
+
source: LottieAnimationSource;
|
|
21
|
+
/**
|
|
22
|
+
* Override the rendered size. Pass a number for a square box, or
|
|
23
|
+
* `{ width, height }` for non-square.
|
|
24
|
+
*
|
|
25
|
+
* When omitted, size is resolved from the `media/width` and `media/height`
|
|
26
|
+
* design tokens (default `117 × 117`). The `Media / Output` collection
|
|
27
|
+
* exposes `L | M | S` modes (117 / 70 / 20) — pass
|
|
28
|
+
* `modes={{ 'Media / Output': 'M' }}` to render at 70×70, etc.
|
|
29
|
+
*/
|
|
30
|
+
size?: number | {
|
|
31
|
+
width: number;
|
|
32
|
+
height: number;
|
|
33
|
+
};
|
|
34
|
+
/** Play the animation on mount. Defaults to `true`. */
|
|
35
|
+
autoPlay?: boolean;
|
|
36
|
+
/** Loop the animation. Defaults to `true`. */
|
|
37
|
+
loop?: boolean;
|
|
38
|
+
/** Mode configuration for design-token theming. */
|
|
39
|
+
modes?: Record<string, any>;
|
|
40
|
+
/** Style overrides applied to the underlying view. */
|
|
41
|
+
style?: StyleProp<ViewStyle>;
|
|
42
|
+
/** Accessibility label. Lottie is decorative by default. */
|
|
43
|
+
accessibilityLabel?: string;
|
|
44
|
+
testID?: string;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Renders a Lottie animation using the consumer's installed
|
|
48
|
+
* `lottie-react-native` (native) or `lottie-react` (web) — both are declared
|
|
49
|
+
* as **optional peer dependencies** of `jfs-components`, so installing the
|
|
50
|
+
* library does not pull them in. Add the relevant package to your app only
|
|
51
|
+
* if you actually use `LottiePlayer`:
|
|
52
|
+
*
|
|
53
|
+
* ```sh
|
|
54
|
+
* # React Native (iOS / Android)
|
|
55
|
+
* npm install lottie-react-native
|
|
56
|
+
* cd ios && pod install
|
|
57
|
+
*
|
|
58
|
+
* # Web (or react-native-web)
|
|
59
|
+
* npm install lottie-react
|
|
60
|
+
* ```
|
|
61
|
+
*
|
|
62
|
+
* The web build (`LottiePlayer.web.tsx`) is picked automatically by Metro /
|
|
63
|
+
* webpack via platform extensions — same pattern as `MediaCard/GlassFill`.
|
|
64
|
+
*
|
|
65
|
+
* Token-driven sizing: when `size` is omitted, `LottiePlayer` reads
|
|
66
|
+
* `media/width` and `media/height` from the Figma variables resolver, so the
|
|
67
|
+
* animation matches the surrounding component's `Media / Output` mode
|
|
68
|
+
* automatically. This is the same sizing contract `PageHero` and
|
|
69
|
+
* `LottieIntroBlock` use for their `media` slots.
|
|
70
|
+
*
|
|
71
|
+
* @component
|
|
72
|
+
* @example
|
|
73
|
+
* ```tsx
|
|
74
|
+
* import animation from './assets/loader.json';
|
|
75
|
+
*
|
|
76
|
+
* <LottiePlayer source={animation} /> // 117 × 117 (default)
|
|
77
|
+
* <LottiePlayer source={animation} size={70} /> // 70 × 70
|
|
78
|
+
* <LottiePlayer source={animation} modes={{ 'Media / Output': 'S' }} /> // 20 × 20
|
|
79
|
+
* <PageHero media={<LottiePlayer source={animation} />} />
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
declare function LottiePlayer({ source, size, autoPlay, loop, modes: propModes, style, accessibilityLabel, testID, }: LottiePlayerProps): import("react/jsx-runtime").JSX.Element;
|
|
83
|
+
declare const _default: React.MemoExoticComponent<typeof LottiePlayer>;
|
|
84
|
+
export default _default;
|
|
85
|
+
//# sourceMappingURL=LottiePlayer.d.ts.map
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type StyleProp, type ViewStyle } from 'react-native';
|
|
3
|
+
export type LottieAnimationSource = Record<string, unknown>;
|
|
4
|
+
export type LottiePlayerProps = {
|
|
5
|
+
source: LottieAnimationSource;
|
|
6
|
+
size?: number | {
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
};
|
|
10
|
+
autoPlay?: boolean;
|
|
11
|
+
loop?: boolean;
|
|
12
|
+
modes?: Record<string, any>;
|
|
13
|
+
style?: StyleProp<ViewStyle>;
|
|
14
|
+
accessibilityLabel?: string;
|
|
15
|
+
testID?: string;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Web build of `LottiePlayer` — picked automatically by webpack /
|
|
19
|
+
* Metro-for-web via the `.web.tsx` platform extension. Uses `lottie-react`
|
|
20
|
+
* (which wraps `lottie-web`) and renders a plain DOM container.
|
|
21
|
+
*
|
|
22
|
+
* Public API mirrors `LottiePlayer.tsx` (native). See that file for the
|
|
23
|
+
* documented prop reference and usage patterns.
|
|
24
|
+
*/
|
|
25
|
+
declare function LottiePlayer({ source, size, autoPlay, loop, modes: propModes, style, accessibilityLabel, testID, }: LottiePlayerProps): import("react/jsx-runtime").JSX.Element;
|
|
26
|
+
declare const _default: React.MemoExoticComponent<typeof LottiePlayer>;
|
|
27
|
+
export default _default;
|
|
28
|
+
//# sourceMappingURL=LottiePlayer.web.d.ts.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type ViewStyle } from 'react-native';
|
|
3
|
+
/** Props we forward to the underlying native Lottie view. */
|
|
4
|
+
export type NativeLottieViewProps = {
|
|
5
|
+
source: Record<string, unknown>;
|
|
6
|
+
autoPlay?: boolean;
|
|
7
|
+
loop?: boolean;
|
|
8
|
+
style?: ViewStyle;
|
|
9
|
+
};
|
|
10
|
+
export declare function getNativeLottieView(): React.ComponentType<NativeLottieViewProps>;
|
|
11
|
+
//# sourceMappingURL=loadNativeLottieView.d.ts.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { CSSProperties } from 'react';
|
|
3
|
+
/** Props we forward to the underlying web Lottie view. */
|
|
4
|
+
export type WebLottieViewProps = {
|
|
5
|
+
animationData: Record<string, unknown>;
|
|
6
|
+
autoplay?: boolean;
|
|
7
|
+
loop?: boolean;
|
|
8
|
+
style?: CSSProperties;
|
|
9
|
+
};
|
|
10
|
+
export declare function getWebLottieView(): React.ComponentType<WebLottieViewProps>;
|
|
11
|
+
//# sourceMappingURL=loadWebLottieView.d.ts.map
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type StyleProp, type ViewStyle } from 'react-native';
|
|
3
|
+
export type PageHeroProps = {
|
|
4
|
+
/** Small eyebrow text shown above the headline. */
|
|
5
|
+
eyebrow?: string;
|
|
6
|
+
/** Main headline text. Centered and bold. */
|
|
7
|
+
headline?: string;
|
|
8
|
+
/** Optional supporting text shown below the headline. */
|
|
9
|
+
supportingText?: string;
|
|
10
|
+
/** Whether to render the supporting text. */
|
|
11
|
+
showSupportingText?: boolean;
|
|
12
|
+
/** Label for the default action button. Ignored when `buttonSlot` is provided. */
|
|
13
|
+
buttonLabel?: string;
|
|
14
|
+
/** Press handler for the default action button. Ignored when `buttonSlot` is provided. */
|
|
15
|
+
onButtonPress?: () => void;
|
|
16
|
+
/** Whether to render the default action button. Ignored when `buttonSlot` is provided. */
|
|
17
|
+
showButton?: boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Optional slot to fully override the action button.
|
|
20
|
+
* When provided, `showButton`, `buttonLabel`, and `onButtonPress` are ignored.
|
|
21
|
+
* `modes` are automatically cascaded into this slot.
|
|
22
|
+
*/
|
|
23
|
+
buttonSlot?: React.ReactNode;
|
|
24
|
+
/**
|
|
25
|
+
* Optional media element shown above the text block (eyebrow + headline).
|
|
26
|
+
*
|
|
27
|
+
* Intentionally typed as `React.ReactNode` so the consumer can bring any
|
|
28
|
+
* renderer they like — `<Image />`, `<IconCapsule />`, a Lottie player
|
|
29
|
+
* (`lottie-react-native` / `@lottiefiles/dotlottie-react`), an `<SvgXml />`
|
|
30
|
+
* from `react-native-svg`, a `<Video />` from `react-native-video`, a
|
|
31
|
+
* gradient view, or a custom illustration. The library deliberately does
|
|
32
|
+
* NOT wrap Lottie / video runtimes (they require native modules + pod
|
|
33
|
+
* autolinking on every consumer's app), so PageHero just allocates a
|
|
34
|
+
* token-sized container and lets the slot render whatever it wants.
|
|
35
|
+
*
|
|
36
|
+
* The slot is rendered inside a `width × height` box driven by
|
|
37
|
+
* `media/width` and `media/height` tokens (default 117×117). `modes` are
|
|
38
|
+
* automatically cascaded into the slot via `cloneChildrenWithModes`.
|
|
39
|
+
*/
|
|
40
|
+
media?: React.ReactNode;
|
|
41
|
+
/** Mode configuration for design-token theming. */
|
|
42
|
+
modes?: Record<string, any>;
|
|
43
|
+
/** Style overrides applied to the outer container. */
|
|
44
|
+
style?: StyleProp<ViewStyle>;
|
|
45
|
+
testID?: string;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* PageHero displays a centered hero block typically used at the top of a page
|
|
49
|
+
* or feature screen. It contains an optional media slot (illustration / image
|
|
50
|
+
* / Lottie / SVG / video — consumer's choice), an eyebrow line, a large
|
|
51
|
+
* headline, an optional supporting line (e.g. price / timeline), and an
|
|
52
|
+
* optional action button.
|
|
53
|
+
*
|
|
54
|
+
* All visual values are resolved from Figma design tokens via
|
|
55
|
+
* `getVariableByName`. Slots cascade the active `modes` to their children
|
|
56
|
+
* through `cloneChildrenWithModes`.
|
|
57
|
+
*
|
|
58
|
+
* @component
|
|
59
|
+
* @example
|
|
60
|
+
* ```tsx
|
|
61
|
+
* <PageHero
|
|
62
|
+
* eyebrow="Upgrade to JioFinance+"
|
|
63
|
+
* headline="Resume earning cashback, extra points, and 1% gold"
|
|
64
|
+
* supportingText="₹999/year · ₹0 until 2027"
|
|
65
|
+
* buttonLabel="Renew for free"
|
|
66
|
+
* onButtonPress={() => navigate('Upgrade')}
|
|
67
|
+
* media={
|
|
68
|
+
* <Image
|
|
69
|
+
* imageSource={require('./assets/upgrade.png')}
|
|
70
|
+
* width={117}
|
|
71
|
+
* height={117}
|
|
72
|
+
* />
|
|
73
|
+
* }
|
|
74
|
+
* />
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
declare function PageHero({ eyebrow, headline, supportingText, showSupportingText, buttonLabel, onButtonPress, showButton, buttonSlot, media, modes: propModes, style, testID, }: PageHeroProps): import("react/jsx-runtime").JSX.Element;
|
|
78
|
+
export default PageHero;
|
|
79
|
+
//# sourceMappingURL=PageHero.d.ts.map
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type ImageStyle, type StyleProp, type TextStyle, type ViewStyle } from 'react-native';
|
|
3
|
+
import { type UnifiedSource } from '../../utils/MediaSource';
|
|
4
|
+
export type PoweredByLabelProps = {
|
|
5
|
+
/**
|
|
6
|
+
* Label copy. Defaults to "Powered by RBI-regulated account aggregator"
|
|
7
|
+
* to match the Figma reference.
|
|
8
|
+
*/
|
|
9
|
+
label?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Brand logo source. Accepts any {@link UnifiedSource} — remote URI, SVG
|
|
12
|
+
* XML string, `require()` asset, SVG React component, or React element.
|
|
13
|
+
* Defaults to the bundled FINVU logo so the component renders correctly
|
|
14
|
+
* without any caller-provided image.
|
|
15
|
+
*
|
|
16
|
+
* Ignored when `imageSlot` is provided.
|
|
17
|
+
*/
|
|
18
|
+
imageSource?: UnifiedSource;
|
|
19
|
+
/**
|
|
20
|
+
* Rendered width of the logo in px. Defaults to `33` to match Figma.
|
|
21
|
+
*/
|
|
22
|
+
imageWidth?: number;
|
|
23
|
+
/**
|
|
24
|
+
* Rendered height of the logo in px. Defaults to `12` to match Figma.
|
|
25
|
+
*/
|
|
26
|
+
imageHeight?: number;
|
|
27
|
+
/**
|
|
28
|
+
* Replace the default `Image` entirely (e.g. with a vector logo,
|
|
29
|
+
* `BrandChip`, or custom layout). Receives `modes` recursively.
|
|
30
|
+
* Overrides `imageSource`.
|
|
31
|
+
*/
|
|
32
|
+
imageSlot?: React.ReactNode;
|
|
33
|
+
/**
|
|
34
|
+
* Design token modes for theming (e.g. `{ 'Color Mode': 'Dark' }`).
|
|
35
|
+
*/
|
|
36
|
+
modes?: Record<string, any>;
|
|
37
|
+
/** Container style override. */
|
|
38
|
+
style?: StyleProp<ViewStyle>;
|
|
39
|
+
/** Label text style override. */
|
|
40
|
+
textStyle?: StyleProp<TextStyle>;
|
|
41
|
+
/** Logo image style override (size/resize behaviour, etc.). */
|
|
42
|
+
imageStyle?: StyleProp<ImageStyle>;
|
|
43
|
+
/**
|
|
44
|
+
* Accessibility label. Defaults to the visible `label` so the brand image
|
|
45
|
+
* (which is decorative) does not need to be announced separately.
|
|
46
|
+
*/
|
|
47
|
+
accessibilityLabel?: string;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* `PoweredByLabel` renders the small "Powered by RBI-regulated account
|
|
51
|
+
* aggregator" badge with a trailing brand logo, used to attribute the
|
|
52
|
+
* underlying account-aggregator partner in flows such as bank-account
|
|
53
|
+
* linking and consent screens.
|
|
54
|
+
*
|
|
55
|
+
* The component is composed of:
|
|
56
|
+
*
|
|
57
|
+
* 1. A token-styled pill container (`poweredByLabel/background`,
|
|
58
|
+
* `poweredByLabel/padding/*`).
|
|
59
|
+
* 2. The disclosure copy rendered through the `poweredByLabel/*` typography
|
|
60
|
+
* tokens.
|
|
61
|
+
* 3. A configurable brand logo slot. Defaults to the bundled FINVU mark, but
|
|
62
|
+
* callers can pass any image via `imageSource` or fully replace the slot
|
|
63
|
+
* via `imageSlot`.
|
|
64
|
+
*
|
|
65
|
+
* @component
|
|
66
|
+
* @param {PoweredByLabelProps} props
|
|
67
|
+
*/
|
|
68
|
+
declare function PoweredByLabel({ label, imageSource, imageWidth, imageHeight, imageSlot, modes: propModes, style, textStyle, imageStyle, accessibilityLabel, }: PoweredByLabelProps): import("react/jsx-runtime").JSX.Element;
|
|
69
|
+
export default PoweredByLabel;
|
|
70
|
+
//# sourceMappingURL=PoweredByLabel.d.ts.map
|
|
@@ -1,7 +1,17 @@
|
|
|
1
|
+
import React from 'react';
|
|
1
2
|
import { type TextStyle, type StyleProp } from 'react-native';
|
|
2
3
|
export type TextProps = {
|
|
3
|
-
/**
|
|
4
|
+
/**
|
|
5
|
+
* The text content to display. You may also pass content as JSX children
|
|
6
|
+
* (e.g. `<Text>Hello</Text>`) — when both are provided, `children` wins.
|
|
7
|
+
*/
|
|
4
8
|
text?: string;
|
|
9
|
+
/**
|
|
10
|
+
* Child nodes (string, number, or nested <Text>/<RNText> elements). This
|
|
11
|
+
* mirrors the standard React Native `<Text>` API so the component is a
|
|
12
|
+
* near-drop-in replacement.
|
|
13
|
+
*/
|
|
14
|
+
children?: React.ReactNode;
|
|
5
15
|
/** Horizontal alignment of the text. */
|
|
6
16
|
textAlign?: 'Left' | 'Center';
|
|
7
17
|
/** Modes configuration for design token resolution. */
|
|
@@ -10,7 +20,26 @@ export type TextProps = {
|
|
|
10
20
|
style?: StyleProp<TextStyle>;
|
|
11
21
|
/** Number of lines to limit the text to. */
|
|
12
22
|
numberOfLines?: number;
|
|
23
|
+
/**
|
|
24
|
+
* Explicit per-instance loading override. When `true`, this `Text` renders
|
|
25
|
+
* a skeleton placeholder regardless of any surrounding `<SkeletonGroup>`.
|
|
26
|
+
* When `false`, the surrounding group is ignored for this instance. When
|
|
27
|
+
* omitted, the surrounding group's `loading` flag wins.
|
|
28
|
+
*/
|
|
29
|
+
loading?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Optional width used while the skeleton is showing. Numbers are dp;
|
|
32
|
+
* `'100%'` (etc.) is a valid RN dimension. Defaults to a character-count
|
|
33
|
+
* heuristic based on the resolved font size and the supplied content.
|
|
34
|
+
*/
|
|
35
|
+
skeletonWidth?: number | `${number}%`;
|
|
36
|
+
/**
|
|
37
|
+
* Optional explicit line count for the skeleton placeholder. Defaults to
|
|
38
|
+
* `numberOfLines ?? 1`. Useful when `numberOfLines` is intentionally
|
|
39
|
+
* unbounded but you want a sensible multi-line placeholder.
|
|
40
|
+
*/
|
|
41
|
+
skeletonLines?: number;
|
|
13
42
|
};
|
|
14
|
-
declare function Text({ text, textAlign, modes, style, numberOfLines, }: TextProps): import("react/jsx-runtime").JSX.Element;
|
|
43
|
+
declare function Text({ text, children, textAlign, modes, style, numberOfLines, loading, skeletonWidth, skeletonLines, }: TextProps): import("react/jsx-runtime").JSX.Element;
|
|
15
44
|
export default Text;
|
|
16
45
|
//# sourceMappingURL=Text.d.ts.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { ReactNode } from 'react';
|
|
2
|
-
import { Pressable } from 'react-native';
|
|
2
|
+
import { Pressable, ViewStyle } from 'react-native';
|
|
3
3
|
export type Placement = 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'left-start' | 'left-end' | 'right' | 'right-start' | 'right-end';
|
|
4
4
|
export type TooltipProps = {
|
|
5
5
|
children: ReactNode;
|
|
@@ -21,6 +21,17 @@ export declare function TooltipTrigger({ children, asChild, ...props }: TooltipT
|
|
|
21
21
|
export type TooltipContentProps = {
|
|
22
22
|
children: ReactNode;
|
|
23
23
|
sideOffset?: number;
|
|
24
|
+
/**
|
|
25
|
+
* Vertical spacing between slot children, in pixels.
|
|
26
|
+
* The content area acts as a vertical slot: any children passed in
|
|
27
|
+
* (text, icons, custom views, etc.) are stacked top-to-bottom with this gap.
|
|
28
|
+
*/
|
|
29
|
+
gap?: number;
|
|
30
|
+
/**
|
|
31
|
+
* Cross-axis alignment of slot children.
|
|
32
|
+
* Defaults to `flex-start` so multi-line/multi-element content lines up on the left.
|
|
33
|
+
*/
|
|
34
|
+
alignItems?: ViewStyle['alignItems'];
|
|
24
35
|
};
|
|
25
|
-
export declare function TooltipContent({ children, sideOffset }: TooltipContentProps): import("react/jsx-runtime").JSX.Element;
|
|
36
|
+
export declare function TooltipContent({ children, sideOffset, gap, alignItems, }: TooltipContentProps): import("react/jsx-runtime").JSX.Element;
|
|
26
37
|
//# sourceMappingURL=Tooltip.d.ts.map
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
export { default as AccountCard, type AccountCardProps, type AccountCardState } from './AccountCard/AccountCard';
|
|
1
2
|
export { default as ActionFooter, type ActionFooterProps } from './ActionFooter/ActionFooter';
|
|
2
3
|
export { default as AppBar } from './AppBar/AppBar';
|
|
3
4
|
export { default as Avatar, type AvatarProps } from './Avatar/Avatar';
|
|
@@ -21,6 +22,8 @@ export { default as CardInsight, type CardInsightProps } from './CardInsight/Car
|
|
|
21
22
|
export { default as Disclaimer } from './Disclaimer/Disclaimer';
|
|
22
23
|
export { default as Divider, type DividerProps, type DividerDirection } from './Divider/Divider';
|
|
23
24
|
export { default as Drawer } from './Drawer/Drawer';
|
|
25
|
+
export { default as Dropdown, DropdownItem, type DropdownProps, type DropdownItemProps } from './Dropdown/Dropdown';
|
|
26
|
+
export { default as DropdownInput, type DropdownInputProps, type DropdownInputOption, type DropdownInputOptionValue } from './DropdownInput/DropdownInput';
|
|
24
27
|
export { default as CardCTA, type CardCTAProps, type CardCTAType } from './CardCTA/CardCTA';
|
|
25
28
|
export { default as DebitCard, type DebitCardProps } from './DebitCard/DebitCard';
|
|
26
29
|
export { default as FilterBar } from './FilterBar/FilterBar';
|
|
@@ -43,6 +46,8 @@ export { default as LazyList } from './LazyList/LazyList';
|
|
|
43
46
|
export { default as LinearMeter, type LinearMeterProps } from './LinearMeter/LinearMeter';
|
|
44
47
|
export { default as LinearProgress, type LinearProgressProps } from './LinearProgress/LinearProgress';
|
|
45
48
|
export { default as ListGroup } from './ListGroup/ListGroup';
|
|
49
|
+
export { default as LottieIntroBlock, type LottieIntroBlockProps } from './LottieIntroBlock/LottieIntroBlock';
|
|
50
|
+
export { default as LottiePlayer, type LottiePlayerProps, type LottieAnimationSource } from './LottiePlayer/LottiePlayer';
|
|
46
51
|
export { default as ListItem } from './ListItem/ListItem';
|
|
47
52
|
export { default as MediaCard, type MediaCardProps } from './MediaCard/MediaCard';
|
|
48
53
|
export { default as MerchantProfile, type MerchantProfileProps } from './MerchantProfile/MerchantProfile';
|
|
@@ -61,7 +66,7 @@ export { StepLabel } from './Stepper/StepLabel';
|
|
|
61
66
|
export { default as TextInput } from './TextInput/TextInput';
|
|
62
67
|
export { default as StatusHero, type StatusHeroProps } from './StatusHero/StatusHero';
|
|
63
68
|
export { default as ThreadHero, type ThreadHeroProps } from './ThreadHero/ThreadHero';
|
|
64
|
-
export { Tooltip } from './Tooltip/Tooltip';
|
|
69
|
+
export { Tooltip, TooltipTrigger, TooltipContent, type TooltipProps, type TooltipTriggerProps, type TooltipContentProps, type Placement as TooltipPlacement, } from './Tooltip/Tooltip';
|
|
65
70
|
export { default as TransactionDetails } from './TransactionDetails/TransactionDetails';
|
|
66
71
|
export { default as TransactionStatus } from './TransactionStatus/TransactionStatus';
|
|
67
72
|
export { default as TransactionBubble, type TransactionBubbleProps } from './TransactionBubble/TransactionBubble';
|
|
@@ -98,8 +103,10 @@ export { default as Toast, type ToastProps } from './Toast/Toast';
|
|
|
98
103
|
export { default as ToastProvider, type ToastProviderProps } from './Toast/ToastProvider';
|
|
99
104
|
export { useToast, addToast, closeToast, closeAll, type ToastOptions, type ToastEntry, type ToastPlacement } from './Toast/useToast';
|
|
100
105
|
export { default as AmountInput, type AmountInputProps } from './AmountInput/AmountInput';
|
|
106
|
+
export { default as PageHero, type PageHeroProps } from './PageHero/PageHero';
|
|
101
107
|
export { default as Popup, type PopupProps, type PopupRef } from './Popup/Popup';
|
|
102
108
|
export { default as PortfolioHero, type PortfolioHeroProps } from './PortfolioHero/PortfolioHero';
|
|
109
|
+
export { default as PoweredByLabel, type PoweredByLabelProps } from './PoweredByLabel/PoweredByLabel';
|
|
103
110
|
export { default as ProductLabel, type ProductLabelProps } from './ProductLabel/ProductLabel';
|
|
104
111
|
export { default as ProductOverview, type ProductOverviewProps, type ProductOverviewStat } from './ProductOverview/ProductOverview';
|
|
105
112
|
export { default as ProgressBadge, type ProgressBadgeProps } from './ProgressBadge/ProgressBadge';
|
|
@@ -18,6 +18,12 @@ type IconProps = AccessibilityProps & {
|
|
|
18
18
|
size?: number;
|
|
19
19
|
color?: string;
|
|
20
20
|
style?: StyleProp<ViewStyle>;
|
|
21
|
+
/**
|
|
22
|
+
* Explicit per-instance loading override. When `true`, renders a square
|
|
23
|
+
* skeleton at the icon's size; when `false`, the surrounding
|
|
24
|
+
* `<SkeletonGroup>` is ignored. Defaults to inheriting from the group.
|
|
25
|
+
*/
|
|
26
|
+
loading?: boolean;
|
|
21
27
|
};
|
|
22
28
|
/**
|
|
23
29
|
* Generic Icon component.
|
|
@@ -43,6 +49,6 @@ type IconProps = AccessibilityProps & {
|
|
|
43
49
|
* <Icon source={BrandLogo} size={24} color="red" />
|
|
44
50
|
* ```
|
|
45
51
|
*/
|
|
46
|
-
declare function Icon({ name, source, size, color, style, ...rest }: IconProps): import("react/jsx-runtime").JSX.Element;
|
|
52
|
+
declare function Icon({ name, source, size, color, style, loading, ...rest }: IconProps): import("react/jsx-runtime").JSX.Element;
|
|
47
53
|
export default Icon;
|
|
48
54
|
//# sourceMappingURL=Icon.d.ts.map
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Auto-generated from SVG files in src/icons/
|
|
5
5
|
* DO NOT EDIT MANUALLY - Run "npm run icons:generate" to regenerate
|
|
6
6
|
*
|
|
7
|
-
* Generated: 2026-05-
|
|
7
|
+
* Generated: 2026-05-25T10:18:38.037Z
|
|
8
8
|
*/
|
|
9
9
|
export declare const iconRegistry: Record<string, {
|
|
10
10
|
path: string;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type DimensionValue, type StyleProp, type ViewStyle } from 'react-native';
|
|
3
|
+
import { type SkeletonKind } from './shimmer-tokens';
|
|
4
|
+
export interface SkeletonProps {
|
|
5
|
+
/**
|
|
6
|
+
* Visual category — controls only the corner-radius token. Sizes are still
|
|
7
|
+
* supplied via `width`/`height`. Defaults to `'other'`.
|
|
8
|
+
*/
|
|
9
|
+
kind?: SkeletonKind;
|
|
10
|
+
/** Width of the rectangular placeholder. Numbers are dp, strings are RN dimensions. */
|
|
11
|
+
width?: DimensionValue;
|
|
12
|
+
/** Height of the rectangular placeholder. */
|
|
13
|
+
height?: DimensionValue;
|
|
14
|
+
/**
|
|
15
|
+
* Optional style overrides merged onto the base layer (e.g. `marginTop`,
|
|
16
|
+
* `alignSelf`). Avoid `backgroundColor` and `borderRadius` here — use the
|
|
17
|
+
* design tokens instead so the system stays consistent.
|
|
18
|
+
*/
|
|
19
|
+
style?: StyleProp<ViewStyle>;
|
|
20
|
+
/**
|
|
21
|
+
* Modes for token resolution (forwarded to `getVariableByName`). Most
|
|
22
|
+
* consumers can omit this — defaults work for every standard mode.
|
|
23
|
+
*/
|
|
24
|
+
modes?: Record<string, any>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Atomic skeleton placeholder. Renders a base rectangle (background colour +
|
|
28
|
+
* radius per kind) plus an animated overlay that produces the shimmer.
|
|
29
|
+
*
|
|
30
|
+
* Two visual modes share the same engine:
|
|
31
|
+
*
|
|
32
|
+
* - Normal mode (gradient: true): a soft 135° band translates diagonally
|
|
33
|
+
* across the box end-to-end. Its alpha inside the moving band varies
|
|
34
|
+
* 33% → 100% → 33% via gradient stops. The sawtooth clock travels from
|
|
35
|
+
* fully off-screen (−overshoot) to fully off-screen (+overshoot) so the
|
|
36
|
+
* transparent gradient tails clear the box before the loop resets.
|
|
37
|
+
*
|
|
38
|
+
* - Reduced-motion mode (gradient: false): a solid white overlay covers the
|
|
39
|
+
* box and pulses opacity 33% → 100% → 33% in place, with no translation,
|
|
40
|
+
* ease-in-out timing and no stagger.
|
|
41
|
+
*
|
|
42
|
+
* Critical for cross-platform consistency:
|
|
43
|
+
*
|
|
44
|
+
* - The SVG gradient uses `gradientUnits="userSpaceOnUse"` with absolute
|
|
45
|
+
* pixel coordinates that have Δx === Δy. This guarantees the visual angle
|
|
46
|
+
* is exactly 45° in screen pixels (= 135° CSS) on ANY aspect ratio. With
|
|
47
|
+
* the default `objectBoundingBox` units, the gradient line is normalised
|
|
48
|
+
* to the box and tilts off-angle on non-square boxes.
|
|
49
|
+
*
|
|
50
|
+
* - The whole animated overlay sits inside a clipping parent (`overflow:
|
|
51
|
+
* hidden` + `borderRadius`). Translating an `Animated.View` is GPU-cheap
|
|
52
|
+
* on both iOS/Android (Reanimated UI thread) and on web (CSS transforms).
|
|
53
|
+
*
|
|
54
|
+
* - The SVG `id` for the gradient is per-instance (`useId`) so multiple
|
|
55
|
+
* skeletons on a web page don't collide on `url(#…)` resolution.
|
|
56
|
+
*/
|
|
57
|
+
declare function SkeletonImpl({ kind, width, height, style, modes, }: SkeletonProps): import("react/jsx-runtime").JSX.Element;
|
|
58
|
+
declare const Skeleton: React.MemoExoticComponent<typeof SkeletonImpl>;
|
|
59
|
+
export default Skeleton;
|
|
60
|
+
//# sourceMappingURL=Skeleton.d.ts.map
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import { type SharedValue } from 'react-native-reanimated';
|
|
3
|
+
/**
|
|
4
|
+
* Shape of the value carried by the SkeletonContext.
|
|
5
|
+
*
|
|
6
|
+
* The provider owns ONE Reanimated shared value per group; every child
|
|
7
|
+
* `<Skeleton>` reads it on the UI thread and computes its own opacity from
|
|
8
|
+
* `(clock + perItemPhaseOffset)`. That keeps per-skeleton work bounded to a
|
|
9
|
+
* single `useAnimatedStyle` and avoids per-block JS timers.
|
|
10
|
+
*/
|
|
11
|
+
export interface SkeletonContextValue {
|
|
12
|
+
/** Whether the surrounding group is currently in loading state. */
|
|
13
|
+
active: boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Whether reduced-motion treatment should be applied. May be auto-detected
|
|
16
|
+
* from the OS or explicitly overridden via the `reducedMotion` prop on
|
|
17
|
+
* `<SkeletonGroup>`.
|
|
18
|
+
*/
|
|
19
|
+
reducedMotion: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Shared phase value driven on the UI thread. Sawtooth: ramps linearly
|
|
22
|
+
* (or eased) from 0 -> 1 over one `SHIMMER.*.durationMs` period, then
|
|
23
|
+
* jumps back to 0 and repeats. Sawtooth is required so that the moving
|
|
24
|
+
* shimmer band sweeps from end to end at a constant heading and resets
|
|
25
|
+
* cleanly; a ping-pong clock would produce a discontinuity in
|
|
26
|
+
* `(clock + phaseOffset) % 1` at the apex, which translates to a visible
|
|
27
|
+
* jump in the band's position when stagger offsets are non-zero.
|
|
28
|
+
*/
|
|
29
|
+
clock: SharedValue<number>;
|
|
30
|
+
/**
|
|
31
|
+
* Atomically registers a child skeleton and returns its registration index.
|
|
32
|
+
* The order is stable for the life of the parent group; the counter is held
|
|
33
|
+
* in a ref so React's render lifecycle doesn't reshuffle it.
|
|
34
|
+
*/
|
|
35
|
+
nextIndex(): number;
|
|
36
|
+
}
|
|
37
|
+
export interface SkeletonGroupProps {
|
|
38
|
+
/** When true, descendant skeleton-aware primitives render placeholders. */
|
|
39
|
+
loading: boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Override the auto-detected reduced-motion preference. Pass `undefined` to
|
|
42
|
+
* use the system value (default). Pass `true`/`false` to force.
|
|
43
|
+
*/
|
|
44
|
+
reducedMotion?: boolean;
|
|
45
|
+
children?: ReactNode;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Provider that flips an entire subtree into "loading" mode and supplies the
|
|
49
|
+
* shared shimmer clock + stagger index source to every descendant skeleton.
|
|
50
|
+
*
|
|
51
|
+
* Usage:
|
|
52
|
+
* ```tsx
|
|
53
|
+
* <SkeletonGroup loading={!data}>
|
|
54
|
+
* <Card>...JFS primitives auto-skeletonize...</Card>
|
|
55
|
+
* </SkeletonGroup>
|
|
56
|
+
* ```
|
|
57
|
+
*
|
|
58
|
+
* Nesting is supported — an inner `<SkeletonGroup>` fully overrides the
|
|
59
|
+
* outer one for its subtree (its own clock, its own index counter).
|
|
60
|
+
*/
|
|
61
|
+
export declare function SkeletonGroup({ loading, reducedMotion: reducedMotionOverride, children, }: SkeletonGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
62
|
+
/**
|
|
63
|
+
* Internal hook used by skeleton-aware primitives (and by `<Skeleton>`
|
|
64
|
+
* itself) to read the surrounding context.
|
|
65
|
+
*
|
|
66
|
+
* Always returns a non-null value: when called outside any provider, the
|
|
67
|
+
* returned object has `active: false` so the consumer falls through to its
|
|
68
|
+
* normal render path. The fallback clock is a no-op shared value so any
|
|
69
|
+
* direct `<Skeleton>` usage outside a group still has something safe to read.
|
|
70
|
+
*/
|
|
71
|
+
export declare function useSkeleton(): SkeletonContextValue;
|
|
72
|
+
/**
|
|
73
|
+
* Convenience wrapper around `useSkeleton().nextIndex()` that pins the
|
|
74
|
+
* returned value across re-renders. Each `<Skeleton>` calls this once on
|
|
75
|
+
* mount; subsequent renders re-use the same index from the closure.
|
|
76
|
+
*/
|
|
77
|
+
export declare function useStaggerIndex(): number;
|
|
78
|
+
//# sourceMappingURL=SkeletonGroup.d.ts.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { default as Skeleton, type SkeletonProps } from './Skeleton';
|
|
2
|
+
export { SkeletonGroup, useSkeleton, useStaggerIndex, type SkeletonGroupProps, type SkeletonContextValue, } from './SkeletonGroup';
|
|
3
|
+
export { useReducedMotion } from './useReducedMotion';
|
|
4
|
+
export { SHIMMER, SKELETON_TOKEN, SKELETON_FALLBACK, type SkeletonKind } from './shimmer-tokens';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|