jfs-components 0.0.44 → 0.0.47

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 (125) hide show
  1. package/lib/commonjs/components/AmountInput/AmountInput.js +82 -0
  2. package/lib/commonjs/components/AmountInput/index.js +13 -0
  3. package/lib/commonjs/components/Button/Button.js +31 -28
  4. package/lib/commonjs/components/CardProviderInfo/CardProviderInfo.js +76 -0
  5. package/lib/commonjs/components/ChipSelect/ChipSelect.js +1 -2
  6. package/lib/commonjs/components/Drawer/demo.xml +18 -0
  7. package/lib/commonjs/components/EmptyState/EmptyState.js +2 -1
  8. package/lib/commonjs/components/FormField/FormField.js +1 -0
  9. package/lib/commonjs/components/NoteInput/NoteInput.js +1 -2
  10. package/lib/commonjs/components/Nudge/Nudge.js +143 -0
  11. package/lib/commonjs/components/OTP/OTP.js +242 -0
  12. package/lib/commonjs/components/PaymentFeedback/PaymentFeedback.js +148 -0
  13. package/lib/commonjs/components/PortfolioHero/PortfolioHero.js +78 -0
  14. package/lib/commonjs/components/ProductLabel/ProductLabel.js +50 -0
  15. package/lib/commonjs/components/ProgressBadge/ProgressBadge.js +130 -0
  16. package/lib/commonjs/components/ProgressBadge/index.js +25 -0
  17. package/lib/commonjs/components/SegmentedControl/SegmentedControl.js +131 -0
  18. package/lib/commonjs/components/StatItem/StatItem.js +61 -0
  19. package/lib/commonjs/components/SupportText/SupportTextIcon.js +2 -3
  20. package/lib/commonjs/components/SwappableAmount/SwappableAmount.js +71 -0
  21. package/lib/commonjs/components/Text/Text.js +44 -0
  22. package/lib/commonjs/components/{PageTitle/PageTitle.js → Title/Title.js} +21 -20
  23. package/lib/commonjs/components/Toggle/Toggle.js +102 -0
  24. package/lib/commonjs/components/UpiHandle/UpiHandle.js +5 -2
  25. package/lib/commonjs/components/index.js +115 -3
  26. package/lib/commonjs/design-tokens/Coin Variables-variables-full.json +1 -0
  27. package/lib/commonjs/design-tokens/figma-variables-resolver.js +1 -1
  28. package/lib/commonjs/icons/registry.js +1 -1
  29. package/lib/commonjs/index.js +12 -0
  30. package/lib/commonjs/utils/index.js +18 -0
  31. package/lib/module/components/AmountInput/AmountInput.js +77 -0
  32. package/lib/module/components/AmountInput/index.js +3 -0
  33. package/lib/module/components/Button/Button.js +31 -28
  34. package/lib/module/components/CardProviderInfo/CardProviderInfo.js +71 -0
  35. package/lib/module/components/ChipSelect/ChipSelect.js +1 -2
  36. package/lib/module/components/Drawer/demo.xml +18 -0
  37. package/lib/module/components/EmptyState/EmptyState.js +2 -1
  38. package/lib/module/components/FormField/FormField.js +1 -0
  39. package/lib/module/components/NoteInput/NoteInput.js +1 -2
  40. package/lib/module/components/Nudge/Nudge.js +138 -0
  41. package/lib/module/components/OTP/OTP.js +236 -0
  42. package/lib/module/components/PaymentFeedback/PaymentFeedback.js +142 -0
  43. package/lib/module/components/PortfolioHero/PortfolioHero.js +73 -0
  44. package/lib/module/components/ProductLabel/ProductLabel.js +45 -0
  45. package/lib/module/components/ProgressBadge/ProgressBadge.js +125 -0
  46. package/lib/module/components/ProgressBadge/index.js +4 -0
  47. package/lib/module/components/SegmentedControl/SegmentedControl.js +126 -0
  48. package/lib/module/components/StatItem/StatItem.js +56 -0
  49. package/lib/module/components/SupportText/SupportTextIcon.js +2 -3
  50. package/lib/module/components/SwappableAmount/SwappableAmount.js +66 -0
  51. package/lib/module/components/Text/Text.js +39 -0
  52. package/lib/module/components/{PageTitle/PageTitle.js → Title/Title.js} +21 -20
  53. package/lib/module/components/Toggle/Toggle.js +97 -0
  54. package/lib/module/components/UpiHandle/UpiHandle.js +5 -2
  55. package/lib/module/components/index.js +18 -2
  56. package/lib/module/design-tokens/Coin Variables-variables-full.json +1 -0
  57. package/lib/module/design-tokens/figma-variables-resolver.js +1 -1
  58. package/lib/module/icons/registry.js +1 -1
  59. package/lib/module/index.js +2 -1
  60. package/lib/module/utils/index.js +3 -0
  61. package/lib/typescript/src/components/AmountInput/AmountInput.d.ts +23 -0
  62. package/lib/typescript/src/components/AmountInput/index.d.ts +3 -0
  63. package/lib/typescript/src/components/CardProviderInfo/CardProviderInfo.d.ts +24 -0
  64. package/lib/typescript/src/components/ChipSelect/ChipSelect.d.ts +1 -6
  65. package/lib/typescript/src/components/EmptyState/EmptyState.d.ts +6 -1
  66. package/lib/typescript/src/components/LinearMeter/LinearMeter.d.ts +1 -1
  67. package/lib/typescript/src/components/Nudge/Nudge.d.ts +31 -0
  68. package/lib/typescript/src/components/OTP/OTP.d.ts +36 -0
  69. package/lib/typescript/src/components/PaymentFeedback/PaymentFeedback.d.ts +23 -0
  70. package/lib/typescript/src/components/PortfolioHero/PortfolioHero.d.ts +21 -0
  71. package/lib/typescript/src/components/ProductLabel/ProductLabel.d.ts +14 -0
  72. package/lib/typescript/src/components/ProgressBadge/ProgressBadge.d.ts +36 -0
  73. package/lib/typescript/src/components/ProgressBadge/index.d.ts +3 -0
  74. package/lib/typescript/src/components/RechargeCard/RechargeCard.d.ts +1 -2
  75. package/lib/typescript/src/components/SegmentedControl/SegmentedControl.d.ts +49 -0
  76. package/lib/typescript/src/components/StatItem/StatItem.d.ts +21 -0
  77. package/lib/typescript/src/components/SupportText/SupportText.d.ts +1 -1
  78. package/lib/typescript/src/components/SupportText/SupportTextIcon.d.ts +1 -1
  79. package/lib/typescript/src/components/SwappableAmount/SwappableAmount.d.ts +22 -0
  80. package/lib/typescript/src/components/Text/Text.d.ts +16 -0
  81. package/lib/typescript/src/components/Title/Title.d.ts +16 -0
  82. package/lib/typescript/src/components/Toggle/Toggle.d.ts +29 -0
  83. package/lib/typescript/src/components/UpiHandle/UpiHandle.d.ts +3 -1
  84. package/lib/typescript/src/components/index.d.ts +22 -5
  85. package/lib/typescript/src/icons/registry.d.ts +1 -1
  86. package/lib/typescript/src/index.d.ts +1 -0
  87. package/lib/typescript/src/utils/index.d.ts +2 -0
  88. package/package.json +2 -2
  89. package/src/components/AmountInput/AmountInput.tsx +81 -0
  90. package/src/components/AmountInput/index.ts +2 -0
  91. package/src/components/Button/Button.tsx +27 -20
  92. package/src/components/CardProviderInfo/CardProviderInfo.tsx +81 -0
  93. package/src/components/ChipSelect/ChipSelect.tsx +1 -8
  94. package/src/components/Drawer/demo.xml +18 -0
  95. package/src/components/EmptyState/EmptyState.tsx +7 -1
  96. package/src/components/FormField/FormField.tsx +1 -0
  97. package/src/components/LinearMeter/LinearMeter.tsx +1 -1
  98. package/src/components/NoteInput/NoteInput.tsx +1 -1
  99. package/src/components/Nudge/Nudge.tsx +150 -0
  100. package/src/components/OTP/OTP.tsx +275 -0
  101. package/src/components/PaymentFeedback/PaymentFeedback.tsx +168 -0
  102. package/src/components/PortfolioHero/PortfolioHero.tsx +91 -0
  103. package/src/components/ProductLabel/ProductLabel.tsx +58 -0
  104. package/src/components/ProgressBadge/ProgressBadge.tsx +172 -0
  105. package/src/components/ProgressBadge/index.ts +2 -0
  106. package/src/components/RechargeCard/RechargeCard.tsx +1 -1
  107. package/src/components/SegmentedControl/SegmentedControl.tsx +168 -0
  108. package/src/components/StatItem/StatItem.tsx +71 -0
  109. package/src/components/SupportText/SupportText.tsx +1 -1
  110. package/src/components/SupportText/SupportTextIcon.tsx +4 -3
  111. package/src/components/SwappableAmount/SwappableAmount.tsx +92 -0
  112. package/src/components/Text/Text.tsx +57 -0
  113. package/src/components/{PageTitle/PageTitle.tsx → Title/Title.tsx} +25 -19
  114. package/src/components/Toggle/Toggle.tsx +122 -0
  115. package/src/components/UpiHandle/UpiHandle.tsx +6 -2
  116. package/src/components/index.ts +22 -5
  117. package/src/design-tokens/Coin Variables-variables-full.json +1 -0
  118. package/src/design-tokens/figma-variables-resolver.ts +1 -1
  119. package/src/icons/registry.ts +1 -1
  120. package/src/index.ts +1 -0
  121. package/src/utils/index.ts +1 -0
  122. package/lib/commonjs/design-tokens/JFS Variables-variables-full.json +0 -1
  123. package/lib/module/design-tokens/JFS Variables-variables-full.json +0 -1
  124. package/lib/typescript/src/components/PageTitle/PageTitle.d.ts +0 -29
  125. package/src/design-tokens/JFS Variables-variables-full.json +0 -1
@@ -3,4 +3,5 @@
3
3
  export * from './components';
4
4
  export * as Icons from './icons';
5
5
  export * from './design-tokens';
6
- export * from './Containers';
6
+ export * from './Containers';
7
+ export * from './utils';
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+
3
+ export { cloneChildrenWithModes, flattenChildren } from './react-utils';
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ import { type ViewStyle } from 'react-native';
3
+ export type AmountInputProps = {
4
+ /**
5
+ * Slot for the MoneyValue component.
6
+ */
7
+ moneyValueSlot?: React.ReactNode;
8
+ /**
9
+ * Slot for the NoteInput component.
10
+ */
11
+ noteInputSlot?: React.ReactNode;
12
+ /** Modes for design token resolution */
13
+ modes?: Record<string, any>;
14
+ /** Optional container style */
15
+ style?: ViewStyle;
16
+ };
17
+ /**
18
+ * AmountInput component that combines MoneyValue and NoteInput from Figma design.
19
+ *
20
+ * @component
21
+ */
22
+ export default function AmountInput({ moneyValueSlot, noteInputSlot, modes: propModes, style, }: AmountInputProps): import("react/jsx-runtime").JSX.Element;
23
+ //# sourceMappingURL=AmountInput.d.ts.map
@@ -0,0 +1,3 @@
1
+ export { default } from './AmountInput';
2
+ export type { AmountInputProps } from './AmountInput';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,24 @@
1
+ import React from 'react';
2
+ import { type ViewStyle, type StyleProp, type ImageSourcePropType } from 'react-native';
3
+ export type CardProviderInfoProps = {
4
+ /** Product name shown in the ProductLabel header. */
5
+ label?: string;
6
+ /** Image source for the product avatar. */
7
+ imageSource?: ImageSourcePropType | string;
8
+ /** Slot content — typically StatItem components arranged in a 2-column grid. */
9
+ children?: React.ReactNode;
10
+ /** Design token modes for theming. */
11
+ modes?: Record<string, any>;
12
+ /** Override container styles. */
13
+ style?: StyleProp<ViewStyle>;
14
+ };
15
+ /**
16
+ * CardProviderInfo displays a product header (ProductLabel) followed by a
17
+ * 2-column grid of children (typically StatItem instances).
18
+ *
19
+ * @component
20
+ * @param {CardProviderInfoProps} props
21
+ */
22
+ declare function CardProviderInfo({ label, imageSource, children, modes, style, }: CardProviderInfoProps): import("react/jsx-runtime").JSX.Element;
23
+ export default CardProviderInfo;
24
+ //# sourceMappingURL=CardProviderInfo.d.ts.map
@@ -16,11 +16,6 @@ export type ChipSelectProps = {
16
16
  * @default "ic_calendar_week"
17
17
  */
18
18
  icon?: string;
19
- /**
20
- * Whether to show the close icon in Active state (when active is true).
21
- * @default true
22
- */
23
- close?: boolean;
24
19
  /**
25
20
  * Modes for design token resolution.
26
21
  */
@@ -42,6 +37,6 @@ export type ChipSelectProps = {
42
37
  * ChipSelect component for selecting options (e.g. Date selection).
43
38
  * Based on Figma Node 1901-4727.
44
39
  */
45
- declare function ChipSelect({ label, active, icon, close, modes, style, labelSlot, onPress, }: ChipSelectProps): import("react/jsx-runtime").JSX.Element;
40
+ declare function ChipSelect({ label, active, icon, modes, style, labelSlot, onPress, }: ChipSelectProps): import("react/jsx-runtime").JSX.Element;
46
41
  export default ChipSelect;
47
42
  //# sourceMappingURL=ChipSelect.d.ts.map
@@ -11,6 +11,11 @@ export type EmptyStateProps = {
11
11
  * @default "Start by paying bills, recharge or your friends"
12
12
  */
13
13
  description?: string;
14
+ /**
15
+ * Whether to show the description text
16
+ * @default true
17
+ */
18
+ showDescription?: boolean;
14
19
  /**
15
20
  * Custom slot for the icon area. Defaults to IconCapsule.
16
21
  * If providing a custom component, ensure it accepts `modes` if needed.
@@ -33,6 +38,6 @@ export type EmptyStateProps = {
33
38
  *
34
39
  * @component
35
40
  */
36
- declare function EmptyState({ title, description, iconSlot, buttonSlot, modes: propModes, style, testID, }: EmptyStateProps): import("react/jsx-runtime").JSX.Element;
41
+ declare function EmptyState({ title, description, showDescription, iconSlot, buttonSlot, modes: propModes, style, testID, }: EmptyStateProps): import("react/jsx-runtime").JSX.Element;
37
42
  export default EmptyState;
38
43
  //# sourceMappingURL=EmptyState.d.ts.map
@@ -5,7 +5,7 @@ type LinearMeterLabelProps = {
5
5
  modes?: Record<string, any>;
6
6
  style?: StyleProp<TextStyle>;
7
7
  } & React.ComponentProps<typeof Text>;
8
- type LinearMeterProps = {
8
+ export type LinearMeterProps = {
9
9
  value?: number;
10
10
  modes?: Record<string, any>;
11
11
  style?: StyleProp<ViewStyle>;
@@ -0,0 +1,31 @@
1
+ import React from 'react';
2
+ import { type ViewStyle, type StyleProp } from 'react-native';
3
+ export type NudgeProps = {
4
+ /**
5
+ * Controls the layout variant.
6
+ * - "Default": horizontal layout with optional start icon and content (title/body/button or children slot)
7
+ * - "Variant2": vertical layout with header (icon + title) and children slot below
8
+ */
9
+ variant?: 'Default' | 'Variant2';
10
+ /** Title text displayed in the nudge */
11
+ title?: string;
12
+ /** Body text displayed below the title (Default variant only, when no children are provided) */
13
+ body?: string;
14
+ /** Label for the default button (Default variant only, when no children are provided) */
15
+ buttonLabel?: string;
16
+ /** Callback for the default button press */
17
+ onPressButton?: () => void;
18
+ /** Custom button slot (Default variant only, overrides buttonLabel/onPressButton) */
19
+ buttonSlot?: React.ReactNode;
20
+ /** Optional leading slot for an icon/element. Pass null or omit to hide. */
21
+ startSlot?: React.ReactNode;
22
+ /** Content slot — overrides the default title/body/button content */
23
+ children?: React.ReactNode;
24
+ /** Mode configuration for design token resolution */
25
+ modes?: Record<string, any>;
26
+ /** Optional container style overrides */
27
+ style?: StyleProp<ViewStyle>;
28
+ };
29
+ declare function Nudge({ variant, title, body, buttonLabel, onPressButton, buttonSlot, startSlot, children, modes: propModes, style, }: NudgeProps): import("react/jsx-runtime").JSX.Element;
30
+ export default Nudge;
31
+ //# sourceMappingURL=Nudge.d.ts.map
@@ -0,0 +1,36 @@
1
+ import React from 'react';
2
+ import { type ViewStyle, type StyleProp } from 'react-native';
3
+ import { type SupportTextProps } from '../SupportText/SupportText';
4
+ export type OTPProps = {
5
+ /** Number of OTP digits. Defaults to 6. */
6
+ length?: number;
7
+ /** Controlled value of the OTP input. */
8
+ value?: string;
9
+ /** Default value for uncontrolled usage. */
10
+ defaultValue?: string;
11
+ /** Called when the OTP value changes. Receives the current string of entered digits. */
12
+ onChange?: (value: string) => void;
13
+ /** Alias for onChange — called when the OTP value changes. */
14
+ onValueChange?: (value: string) => void;
15
+ /** Called when all digits have been entered. Receives the complete OTP string. */
16
+ onComplete?: (value: string) => void;
17
+ /** Whether the OTP input is disabled. */
18
+ isDisabled?: boolean;
19
+ /** Whether the OTP input is in an invalid/error state. */
20
+ isInvalid?: boolean;
21
+ /** Regex pattern to filter allowed characters. Defaults to digits only. */
22
+ allowedPattern?: RegExp;
23
+ /** Auto-focus the input on mount. */
24
+ autoFocus?: boolean;
25
+ /** Design token modes for Figma token resolution. */
26
+ modes?: Record<string, any>;
27
+ /** Container style override. */
28
+ style?: StyleProp<ViewStyle>;
29
+ /** Optional SupportText rendered below the slots. Pass a string for the label or a ReactNode for full control. */
30
+ supportText?: React.ReactNode;
31
+ /** SupportText status when using the string shorthand. */
32
+ supportTextStatus?: SupportTextProps['status'];
33
+ };
34
+ declare function OTP({ length, value: controlledValue, defaultValue, onChange, onValueChange, onComplete, isDisabled, isInvalid, allowedPattern, autoFocus, modes: propModes, style, supportText, supportTextStatus, }: OTPProps): import("react/jsx-runtime").JSX.Element;
35
+ export default OTP;
36
+ //# sourceMappingURL=OTP.d.ts.map
@@ -0,0 +1,23 @@
1
+ import { type ReactNode } from 'react';
2
+ import { type ViewStyle } from 'react-native';
3
+ export type PaymentFeedbackProps = {
4
+ /** Large heading text, typically a monetary value (e.g. "₹50,000") */
5
+ title?: string;
6
+ /** Status line below the title (e.g. "Payment successful") */
7
+ subtitle?: string;
8
+ /** Descriptive body text below the subtitle */
9
+ body?: string;
10
+ /** Transaction metadata shown at the bottom (e.g. date, transaction ID). Supports newlines. */
11
+ details?: string;
12
+ /** Whether to render the details section */
13
+ showDetails?: boolean;
14
+ /** Icon name used in the default IconCapsule media slot */
15
+ iconName?: string;
16
+ /** Optional custom media slot that replaces the default IconCapsule */
17
+ renderMedia?: ReactNode;
18
+ /** Mode configuration for design tokens */
19
+ modes?: Record<string, any>;
20
+ style?: ViewStyle;
21
+ };
22
+ export default function PaymentFeedback({ title, subtitle, body, details, showDetails, iconName, renderMedia, modes: propModes, style, }: PaymentFeedbackProps): import("react/jsx-runtime").JSX.Element;
23
+ //# sourceMappingURL=PaymentFeedback.d.ts.map
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import { type ViewStyle, type ImageSourcePropType } from 'react-native';
3
+ export type PortfolioHeroProps = {
4
+ /** Product label text displayed next to the avatar. */
5
+ label?: string;
6
+ /** Image source for the product avatar. */
7
+ imageSource?: ImageSourcePropType | string;
8
+ /** Monetary value to display. */
9
+ value?: string;
10
+ /** Currency symbol or ISO code. */
11
+ currency?: string;
12
+ /** Modes configuration mapped to Figma tokens. */
13
+ modes?: Record<string, any>;
14
+ /** Slot content rendered below the money value (e.g. Badge, subtitle). */
15
+ children?: React.ReactNode;
16
+ /** Container style override. */
17
+ style?: ViewStyle;
18
+ };
19
+ declare function PortfolioHero({ label, imageSource, value, currency, modes, children, style, }: PortfolioHeroProps): import("react/jsx-runtime").JSX.Element;
20
+ export default PortfolioHero;
21
+ //# sourceMappingURL=PortfolioHero.d.ts.map
@@ -0,0 +1,14 @@
1
+ import { type ViewStyle, type ImageSourcePropType } from 'react-native';
2
+ export type ProductLabelProps = {
3
+ /** The product name label text. */
4
+ label?: string;
5
+ /** Image source for the product avatar. */
6
+ imageSource?: ImageSourcePropType | string;
7
+ /** Modes configuration for design token resolution. */
8
+ modes?: Record<string, any>;
9
+ /** Container style override. */
10
+ style?: ViewStyle;
11
+ };
12
+ declare function ProductLabel({ label, imageSource, modes, style, }: ProductLabelProps): import("react/jsx-runtime").JSX.Element;
13
+ export default ProductLabel;
14
+ //# sourceMappingURL=ProductLabel.d.ts.map
@@ -0,0 +1,36 @@
1
+ import React from 'react';
2
+ import { View, type StyleProp, type ViewStyle, type TextStyle } from 'react-native';
3
+ export type ProgressBadgeProps = {
4
+ /** The text displayed in the badge (e.g. "Live price...") */
5
+ taskName?: string;
6
+ /** The icon name to display to the left of the text */
7
+ iconName?: string;
8
+ /** The progress value between 0 and 100 */
9
+ value?: number;
10
+ /** Modes object passed to `getVariableByName` for design token resolution */
11
+ modes?: Record<string, any>;
12
+ /** Optional container style overrides */
13
+ style?: StyleProp<ViewStyle>;
14
+ /** Optional text style overrides */
15
+ textStyle?: StyleProp<TextStyle>;
16
+ /** Accessibility label for screen readers */
17
+ accessibilityLabel?: string;
18
+ } & React.ComponentProps<typeof View>;
19
+ /**
20
+ * ProgressBadge component that displays an icon, text, and an internal progress bar.
21
+ *
22
+ * All visual attributes resolve from Figma tokens via `getVariableByName` using the provided `modes`.
23
+ *
24
+ * @component
25
+ * @param {Object} props
26
+ * @param {string} [props.taskName="Live price: [price] (00:43)"] - The text displayed.
27
+ * @param {string} [props.iconName="ic_live"] - Icon name from the registry.
28
+ * @param {number} [props.value=0] - The progress value between 0 and 100.
29
+ * @param {Object} [props.modes={}] - Modes object passed to `getVariableByName` for design tokens.
30
+ * @param {Object} [props.style] - Optional container style overrides.
31
+ * @param {Object} [props.textStyle] - Optional text style overrides.
32
+ * @param {string} [props.accessibilityLabel] - Accessibility label.
33
+ */
34
+ declare function ProgressBadge({ taskName, iconName, value, modes, style, textStyle: textStyleOverride, accessibilityLabel, ...rest }: ProgressBadgeProps): import("react/jsx-runtime").JSX.Element;
35
+ export default ProgressBadge;
36
+ //# sourceMappingURL=ProgressBadge.d.ts.map
@@ -0,0 +1,3 @@
1
+ export { default } from './ProgressBadge';
2
+ export * from './ProgressBadge';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { type ViewStyle } from 'react-native';
3
- type RechargeCardProps = {
3
+ export type RechargeCardProps = {
4
4
  /**
5
5
  * Title of the card.
6
6
  * Default: "Unlimited 5G"
@@ -47,5 +47,4 @@ type RechargeCardProps = {
47
47
  * Displays a recharge plan with price, validity, data, and subscription details.
48
48
  */
49
49
  export default function RechargeCard({ title, price, validity, data, disclaimer, subscriptionContent, actions, modes, style, }: RechargeCardProps): import("react/jsx-runtime").JSX.Element;
50
- export {};
51
50
  //# sourceMappingURL=RechargeCard.d.ts.map
@@ -0,0 +1,49 @@
1
+ import React from 'react';
2
+ import { type StyleProp, type ViewStyle } from 'react-native';
3
+ export type SegmentedControlItem = {
4
+ key: React.Key;
5
+ label: string;
6
+ };
7
+ export type SegmentedControlProps = {
8
+ /** The items to display as segments */
9
+ items: SegmentedControlItem[];
10
+ /** The currently selected key (controlled) */
11
+ selectedKey?: React.Key;
12
+ /** The initially selected key (uncontrolled). Defaults to the first item's key. */
13
+ defaultSelectedKey?: React.Key;
14
+ /** Callback fired when the selected segment changes */
15
+ onSelectionChange?: (key: React.Key) => void;
16
+ /** Design token modes for theming */
17
+ modes?: Record<string, any>;
18
+ /** Override container styles */
19
+ style?: StyleProp<ViewStyle>;
20
+ };
21
+ /**
22
+ * SegmentedControl component backed by Figma design tokens.
23
+ *
24
+ * Provides a horizontal row of mutually exclusive segments.
25
+ * Supports controlled (`selectedKey` + `onSelectionChange`) and
26
+ * uncontrolled (`defaultSelectedKey`) usage patterns.
27
+ *
28
+ * @component
29
+ * @param {SegmentedControlProps} props
30
+ *
31
+ * @example
32
+ * ```tsx
33
+ * const [selected, setSelected] = useState<React.Key>('daily');
34
+ *
35
+ * <SegmentedControl
36
+ * items={[
37
+ * { key: 'daily', label: 'Daily' },
38
+ * { key: 'weekly', label: 'Weekly' },
39
+ * { key: 'monthly', label: 'Monthly' },
40
+ * ]}
41
+ * selectedKey={selected}
42
+ * onSelectionChange={setSelected}
43
+ * modes={{ 'Color Mode': 'Light' }}
44
+ * />
45
+ * ```
46
+ */
47
+ declare function SegmentedControl({ items, selectedKey: controlledSelectedKey, defaultSelectedKey, onSelectionChange, modes, style, }: SegmentedControlProps): import("react/jsx-runtime").JSX.Element;
48
+ export default SegmentedControl;
49
+ //# sourceMappingURL=SegmentedControl.d.ts.map
@@ -0,0 +1,21 @@
1
+ import { type StyleProp, type ViewStyle } from 'react-native';
2
+ export type StatItemProps = {
3
+ /** The small descriptive label above the value. */
4
+ label?: string;
5
+ /** The large prominent value to display. */
6
+ value?: string;
7
+ /** Design token modes for theming. */
8
+ modes?: Record<string, any>;
9
+ /** Override container styles. */
10
+ style?: StyleProp<ViewStyle>;
11
+ };
12
+ /**
13
+ * StatItem displays a label/value pair with the value in a large, bold style.
14
+ * Useful for metrics, product stats, or KPI callouts.
15
+ *
16
+ * @component
17
+ * @param {StatItemProps} props
18
+ */
19
+ declare function StatItem({ label, value, modes, style, }: StatItemProps): import("react/jsx-runtime").JSX.Element;
20
+ export default StatItem;
21
+ //# sourceMappingURL=StatItem.d.ts.map
@@ -7,7 +7,7 @@ export type SupportTextProps = {
7
7
  */
8
8
  label?: string;
9
9
  /**
10
- * Status of the support text (Neutral, Warning, Error, Success)
10
+ * Status of the support text (Neutral, Warning, Error, Success, Loading)
11
11
  */
12
12
  status?: SupportTextStatus;
13
13
  /**
@@ -1,5 +1,5 @@
1
1
  import { type ViewStyle } from 'react-native';
2
- export type SupportTextStatus = 'Neutral' | 'Warning' | 'Error' | 'Success';
2
+ export type SupportTextStatus = 'Neutral' | 'Warning' | 'Error' | 'Success' | 'Loading';
3
3
  export type SupportTextIconProps = {
4
4
  status?: SupportTextStatus;
5
5
  modes?: Record<string, any>;
@@ -0,0 +1,22 @@
1
+ import { type ViewStyle } from 'react-native';
2
+ export type SwappableAmountProps = {
3
+ /** Large display value (e.g. "49g"). */
4
+ value?: string;
5
+ /** Whether to show the schedule button above the value. */
6
+ schedule?: boolean;
7
+ /** Label text for the schedule button (e.g. "Weekly on Mondays"). */
8
+ scheduleLabel?: string;
9
+ /** Label text for the amount/swap button (e.g. "₹5100"). */
10
+ amountLabel?: string;
11
+ /** Callback when the schedule button is pressed. */
12
+ onSchedulePress?: () => void;
13
+ /** Callback when the amount/swap button is pressed. */
14
+ onAmountPress?: () => void;
15
+ /** Modes configuration for design token resolution. */
16
+ modes?: Record<string, any>;
17
+ /** Container style override. */
18
+ style?: ViewStyle;
19
+ };
20
+ declare function SwappableAmount({ value, schedule, scheduleLabel, amountLabel, onSchedulePress, onAmountPress, modes, style, }: SwappableAmountProps): import("react/jsx-runtime").JSX.Element;
21
+ export default SwappableAmount;
22
+ //# sourceMappingURL=SwappableAmount.d.ts.map
@@ -0,0 +1,16 @@
1
+ import { type TextStyle, type StyleProp } from 'react-native';
2
+ export type TextProps = {
3
+ /** The text content to display. */
4
+ text?: string;
5
+ /** Horizontal alignment of the text. */
6
+ textAlign?: 'Left' | 'Center';
7
+ /** Modes configuration for design token resolution. */
8
+ modes?: Record<string, any>;
9
+ /** Style override for the text. */
10
+ style?: StyleProp<TextStyle>;
11
+ /** Number of lines to limit the text to. */
12
+ numberOfLines?: number;
13
+ };
14
+ declare function Text({ text, textAlign, modes, style, numberOfLines, }: TextProps): import("react/jsx-runtime").JSX.Element;
15
+ export default Text;
16
+ //# sourceMappingURL=Text.d.ts.map
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import { View, type StyleProp, type ViewStyle, type TextStyle } from 'react-native';
3
+ export type TitleProps = {
4
+ title?: string;
5
+ /** Horizontal alignment of the title text. */
6
+ textAlign?: 'Left' | 'Center';
7
+ modes?: Record<string, any>;
8
+ style?: StyleProp<ViewStyle>;
9
+ textStyle?: StyleProp<TextStyle>;
10
+ numberOfLines?: number;
11
+ accessibilityLabel?: string;
12
+ accessibilityHint?: string;
13
+ } & React.ComponentProps<typeof View>;
14
+ declare function Title({ title, textAlign, modes: propModes, style, textStyle, numberOfLines, accessibilityLabel, accessibilityHint, ...rest }: TitleProps): import("react/jsx-runtime").JSX.Element;
15
+ export default Title;
16
+ //# sourceMappingURL=Title.d.ts.map
@@ -0,0 +1,29 @@
1
+ import { type StyleProp, type ViewStyle } from 'react-native';
2
+ export interface ToggleProps {
3
+ /** Whether the toggle is on (controlled) */
4
+ value?: boolean;
5
+ /** Initial value (uncontrolled) */
6
+ defaultValue?: boolean;
7
+ /** Callback when the toggle state changes */
8
+ onValueChange?: (value: boolean) => void;
9
+ /** Whether the toggle is disabled */
10
+ disabled?: boolean;
11
+ /** Design token modes for theming */
12
+ modes?: Record<string, any>;
13
+ /** Override container styles */
14
+ style?: StyleProp<ViewStyle>;
15
+ /** Accessibility label for screen readers */
16
+ accessibilityLabel?: string;
17
+ }
18
+ /**
19
+ * Toggle (switch) component that maps directly to the Figma design using design tokens.
20
+ *
21
+ * Supports controlled and uncontrolled usage, on/off states, and disabled state.
22
+ * All styling is driven by design tokens with optional mode overrides.
23
+ *
24
+ * @component
25
+ * @param {ToggleProps} props
26
+ */
27
+ declare function Toggle({ value: controlledValue, defaultValue, onValueChange, disabled, modes, style, accessibilityLabel, }: ToggleProps): import("react/jsx-runtime").JSX.Element;
28
+ export default Toggle;
29
+ //# sourceMappingURL=Toggle.d.ts.map
@@ -9,6 +9,7 @@ type UpiHandleProps = {
9
9
  accessibilityLabel?: string;
10
10
  accessibilityHint?: string;
11
11
  onPress?: () => void;
12
+ onClick?: () => void;
12
13
  disabled?: boolean;
13
14
  } & Omit<React.ComponentProps<typeof View>, 'style' | 'accessibilityRole' | 'accessibilityLabel' | 'accessibilityHint'>;
14
15
  /**
@@ -29,9 +30,10 @@ type UpiHandleProps = {
29
30
  * @param {boolean} [props.showIcon=true] - Toggles the trailing icon visibility.
30
31
  * @param {string} [props.iconName='ic_scan_qr_code'] - Icon name from the actions set (e.g. 'ic_qr_code', 'ic_scan_qr_code').
31
32
  * @param {ImageSourcePropType} [props.avatarSource] - Optional custom image source for the avatar.
33
+ * @param {Function} [props.onClick] - Click/tap handler. Works as an alias for `onPress`.
32
34
  * @param {string} [props.accessibilityLabel] - Accessibility label for screen readers. If not provided, uses label
33
35
  * @param {string} [props.accessibilityHint] - Additional accessibility hint for screen readers
34
36
  */
35
- declare function UpiHandle({ label, modes: propModes, showIcon, iconName, avatarSource, onPress, disabled, accessibilityLabel, accessibilityHint, ...rest }: UpiHandleProps): import("react/jsx-runtime").JSX.Element;
37
+ declare function UpiHandle({ label, modes: propModes, showIcon, iconName, avatarSource, onPress, onClick, disabled, accessibilityLabel, accessibilityHint, ...rest }: UpiHandleProps): import("react/jsx-runtime").JSX.Element;
36
38
  export default UpiHandle;
37
39
  //# sourceMappingURL=UpiHandle.d.ts.map
@@ -7,8 +7,10 @@ export { default as BottomNav } from './BottomNav/BottomNav';
7
7
  export { default as BottomNavItem } from './BottomNavItem/BottomNavItem';
8
8
  export { default as Button, type ButtonProps } from './Button/Button';
9
9
  export { default as Card } from './Card/Card';
10
+ export { default as Carousel } from './Carousel/Carousel';
11
+ export type { CarouselProps, CarouselItemProps, PaginationProps } from './Carousel/Carousel';
10
12
  export { default as Checkbox, type CheckboxProps } from './Checkbox/Checkbox';
11
- export { default as CardFeedback } from './CardFeedback/CardFeedback';
13
+ export { default as CardFeedback, type CardFeedbackProps } from './CardFeedback/CardFeedback';
12
14
  export { default as Disclaimer } from './Disclaimer/Disclaimer';
13
15
  export { default as Divider, type DividerProps, type DividerDirection } from './Divider/Divider';
14
16
  export { default as Drawer } from './Drawer/Drawer';
@@ -16,20 +18,22 @@ export { default as CtaCard } from './CtaCard/CtaCard';
16
18
  export { default as FilterBar } from './FilterBar/FilterBar';
17
19
  export { default as Form, type FormProps } from './Form/Form';
18
20
  export { useFormContext } from './Form/Form';
19
- export { default as FormField, type FormFieldProps } from './FormField/FormField';
21
+ export { default as FormField, type FormFieldProps, type FormFieldType } from './FormField/FormField';
20
22
  export { default as HStack, type HStackProps } from './HStack/HStack';
21
23
  export { default as IconButton } from './IconButton/IconButton';
22
24
  export { default as IconCapsule } from './IconCapsule/IconCapsule';
23
25
  export { default as LazyList } from './LazyList/LazyList';
26
+ export { default as LinearMeter, type LinearMeterProps } from './LinearMeter/LinearMeter';
24
27
  export { default as ListGroup } from './ListGroup/ListGroup';
25
28
  export { default as ListItem } from './ListItem/ListItem';
26
29
  export { default as MediaCard } from './MediaCard/MediaCard';
27
30
  export { default as MerchantProfile, type MerchantProfileProps } from './MerchantProfile/MerchantProfile';
28
31
  export { default as MoneyValue } from './MoneyValue/MoneyValue';
29
- export { default as NoteInput } from './NoteInput/NoteInput';
32
+ export { default as NoteInput, type NoteInputProps } from './NoteInput/NoteInput';
33
+ export { default as Nudge, type NudgeProps } from './Nudge/Nudge';
30
34
  export { default as NavArrow } from './NavArrow/NavArrow';
31
35
  export { default as Numpad, type NumpadProps, type NumpadKeyValue } from './Numpad/Numpad';
32
- export { default as PageTitle } from './PageTitle/PageTitle';
36
+ export { default as Title, type TitleProps } from './Title/Title';
33
37
  export { default as Screen, type ScreenProps } from './Screen/Screen';
34
38
  export { default as Section } from './Section/Section';
35
39
  export { default as Stepper } from './Stepper/Stepper';
@@ -49,14 +53,27 @@ export { default as Accordion, type AccordionProps } from './Accordion/Accordion
49
53
  export { default as ActionTile, type ActionTileProps } from './ActionTile/ActionTile';
50
54
  export { default as Balance, type BalanceProps } from './Balance/Balance';
51
55
  export { default as ButtonGroup, type ButtonGroupProps } from './ButtonGroup/ButtonGroup';
56
+ export { default as CardProviderInfo, type CardProviderInfoProps } from './CardProviderInfo/CardProviderInfo';
52
57
  export { default as ChipSelect, type ChipSelectProps } from './ChipSelect/ChipSelect';
53
58
  export { default as InputSearch, type InputSearchProps } from './InputSearch/InputSearch';
54
59
  export { default as SupportText, type SupportTextProps } from './SupportText/SupportText';
55
- export { default as SupportTextIcon, type SupportTextIconProps } from './SupportText/SupportTextIcon';
60
+ export { default as SupportTextIcon, type SupportTextIconProps, type SupportTextStatus } from './SupportText/SupportTextIcon';
56
61
  export { default as RadioButton, type RadioButtonProps } from './RadioButton/RadioButton';
62
+ export { default as RechargeCard, type RechargeCardProps } from './RechargeCard/RechargeCard';
57
63
  export { default as Tabs, type TabsProps } from './Tabs/Tabs';
58
64
  export { default as TabItem, type TabItemProps } from './Tabs/TabItem';
59
65
  export { default as Toast, type ToastProps } from './Toast/Toast';
60
66
  export { default as ToastProvider, type ToastProviderProps } from './Toast/ToastProvider';
61
67
  export { useToast, addToast, closeToast, closeAll, type ToastOptions, type ToastEntry, type ToastPlacement } from './Toast/useToast';
68
+ export { default as AmountInput, type AmountInputProps } from './AmountInput/AmountInput';
69
+ export { default as PortfolioHero, type PortfolioHeroProps } from './PortfolioHero/PortfolioHero';
70
+ export { default as ProductLabel, type ProductLabelProps } from './ProductLabel/ProductLabel';
71
+ export { default as ProgressBadge, type ProgressBadgeProps } from './ProgressBadge/ProgressBadge';
72
+ export { default as SwappableAmount, type SwappableAmountProps } from './SwappableAmount/SwappableAmount';
73
+ export { default as OTP, type OTPProps } from './OTP/OTP';
74
+ export { default as PaymentFeedback, type PaymentFeedbackProps } from './PaymentFeedback/PaymentFeedback';
75
+ export { default as StatItem, type StatItemProps } from './StatItem/StatItem';
76
+ export { default as Text, type TextProps } from './Text/Text';
77
+ export { default as SegmentedControl, type SegmentedControlProps, type SegmentedControlItem } from './SegmentedControl/SegmentedControl';
78
+ export { default as Toggle, type ToggleProps } from './Toggle/Toggle';
62
79
  //# sourceMappingURL=index.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-02-25T22:30:05.664Z
7
+ * Generated: 2026-03-28T10:10:45.171Z
8
8
  */
9
9
  export declare const iconRegistry: Record<string, {
10
10
  path: string;
@@ -2,4 +2,5 @@ export * from './components';
2
2
  export * as Icons from './icons';
3
3
  export * from './design-tokens';
4
4
  export * from './Containers';
5
+ export * from './utils';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,2 @@
1
+ export { cloneChildrenWithModes, flattenChildren } from './react-utils';
2
+ //# sourceMappingURL=index.d.ts.map
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "jfs-components",
3
- "version": "0.0.44",
3
+ "version": "0.0.47",
4
4
  "description": "React Native Jio Finance Components Library",
5
5
  "author": "sunshuaiqi@gmail.com",
6
6
  "license": "MIT",
7
7
  "main": "lib/commonjs/index.js",
8
8
  "module": "lib/module/index.js",
9
- "types": "lib/typescript/index.d.ts",
9
+ "types": "lib/typescript/src/index.d.ts",
10
10
  "react-native": "src/index.ts",
11
11
  "source": "src/index.ts",
12
12
  "sideEffects": false,