jfs-components 0.1.30 → 0.1.33

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 (46) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/D2C.md +118 -0
  3. package/lib/commonjs/components/CategoryCard/CategoryCard.js +264 -0
  4. package/lib/commonjs/components/CompareTable/CompareTable.js +140 -84
  5. package/lib/commonjs/components/ContentSheet/ContentSheet.js +28 -5
  6. package/lib/commonjs/components/CounterBadge/CounterBadge.js +78 -0
  7. package/lib/commonjs/components/FavoriteToggle/FavoriteToggle.js +180 -0
  8. package/lib/commonjs/components/HelloJioInput/HelloJioInput.js +287 -0
  9. package/lib/commonjs/components/ValueBackMetric/ValueBackMetric.js +219 -0
  10. package/lib/commonjs/components/index.js +35 -0
  11. package/lib/commonjs/design-tokens/Coin Variables-variables-full.json +40095 -1
  12. package/lib/commonjs/design-tokens/figma-modes.generated.js +3 -0
  13. package/lib/commonjs/icons/registry.js +1 -1
  14. package/lib/module/components/CategoryCard/CategoryCard.js +258 -0
  15. package/lib/module/components/CompareTable/CompareTable.js +140 -84
  16. package/lib/module/components/ContentSheet/ContentSheet.js +29 -6
  17. package/lib/module/components/CounterBadge/CounterBadge.js +73 -0
  18. package/lib/module/components/FavoriteToggle/FavoriteToggle.js +174 -0
  19. package/lib/module/components/HelloJioInput/HelloJioInput.js +281 -0
  20. package/lib/module/components/ValueBackMetric/ValueBackMetric.js +214 -0
  21. package/lib/module/components/index.js +6 -1
  22. package/lib/module/design-tokens/Coin Variables-variables-full.json +40095 -1
  23. package/lib/module/design-tokens/figma-modes.generated.js +3 -0
  24. package/lib/module/icons/registry.js +1 -1
  25. package/lib/typescript/src/components/CategoryCard/CategoryCard.d.ts +72 -0
  26. package/lib/typescript/src/components/CompareTable/CompareTable.d.ts +16 -1
  27. package/lib/typescript/src/components/ContentSheet/ContentSheet.d.ts +7 -1
  28. package/lib/typescript/src/components/CounterBadge/CounterBadge.d.ts +19 -0
  29. package/lib/typescript/src/components/FavoriteToggle/FavoriteToggle.d.ts +66 -0
  30. package/lib/typescript/src/components/HelloJioInput/HelloJioInput.d.ts +111 -0
  31. package/lib/typescript/src/components/ValueBackMetric/ValueBackMetric.d.ts +86 -0
  32. package/lib/typescript/src/components/index.d.ts +5 -0
  33. package/lib/typescript/src/icons/registry.d.ts +1 -1
  34. package/package.json +7 -1
  35. package/scripts/extract-figma-modes.js +359 -0
  36. package/src/components/CategoryCard/CategoryCard.tsx +404 -0
  37. package/src/components/CompareTable/CompareTable.tsx +201 -101
  38. package/src/components/ContentSheet/ContentSheet.tsx +40 -11
  39. package/src/components/CounterBadge/CounterBadge.tsx +95 -0
  40. package/src/components/FavoriteToggle/FavoriteToggle.tsx +243 -0
  41. package/src/components/HelloJioInput/HelloJioInput.tsx +513 -0
  42. package/src/components/ValueBackMetric/ValueBackMetric.tsx +298 -0
  43. package/src/components/index.ts +5 -0
  44. package/src/design-tokens/Coin Variables-variables-full.json +40095 -1
  45. package/src/design-tokens/figma-modes.generated.ts +3 -0
  46. package/src/icons/registry.ts +1 -1
@@ -0,0 +1,72 @@
1
+ import React from 'react';
2
+ import { type AccessibilityState, type ImageSourcePropType, type StyleProp, type TextStyle, type ViewStyle } from 'react-native';
3
+ import { type SafePressableProps, type WebAccessibilityProps } from '../../utils/web-platform-utils';
4
+ import type { Modes } from '../../design-tokens';
5
+ export type CategoryCardProps = SafePressableProps & {
6
+ /** Bottom label (e.g. `"Popular"`). */
7
+ label?: string;
8
+ /**
9
+ * Image shown in the card centre. Ignored when `imageSlot` is provided.
10
+ * Accepts a remote URL string, `{ uri }` object, or `require()`-ed asset.
11
+ */
12
+ imageSource?: ImageSourcePropType | string;
13
+ /**
14
+ * Slot replacing the default `Image`. Receives `modes` recursively so inner
15
+ * components inherit theming.
16
+ */
17
+ imageSlot?: React.ReactNode;
18
+ /**
19
+ * Optional badge label rendered as an overlapping pill at the top edge.
20
+ * Omit or pass `undefined` to hide the badge.
21
+ */
22
+ badge?: string;
23
+ /** Whether the card is in the selected / active state. */
24
+ active?: boolean;
25
+ /**
26
+ * Fixed width of the card in dp. Defaults to `60` per the Figma spec.
27
+ */
28
+ width?: number;
29
+ /**
30
+ * When `true`, disables text truncation: the trailing ellipsis (`…`) is never
31
+ * shown and any `numberOfLines` clamp is ignored, so the label wraps to as many
32
+ * lines as it needs even when horizontal space is tight. Same behaviour as
33
+ * {@link Text}'s `disableTruncation`.
34
+ */
35
+ disableTruncation?: boolean;
36
+ /**
37
+ * When `true`, forces the label onto a single line with no wrapping (implies
38
+ * `disableTruncation`). On web the line overflows horizontally instead of
39
+ * wrapping or truncating. Same behaviour as {@link Text}'s `singleLine`.
40
+ */
41
+ singleLine?: boolean;
42
+ /** Press handler — the card is always a `Pressable`. */
43
+ onPress?: () => void;
44
+ disabled?: boolean;
45
+ /** Design token modes for theming (e.g. `{ 'Color Mode': 'Light' }`). */
46
+ modes?: Modes;
47
+ /** Container style override. */
48
+ style?: StyleProp<ViewStyle>;
49
+ /** Label style override. */
50
+ labelStyle?: StyleProp<TextStyle>;
51
+ accessibilityLabel?: string;
52
+ accessibilityHint?: string;
53
+ accessibilityState?: AccessibilityState;
54
+ webAccessibilityProps?: WebAccessibilityProps;
55
+ testID?: string;
56
+ };
57
+ /**
58
+ * `CategoryCard` is a compact, tappable tile for category pickers and
59
+ * merchandising rails. It stacks a square image above a short label and can
60
+ * optionally show an overlapping badge at the top edge. Cards are typically
61
+ * laid out in a horizontal `ScrollView` or `HStack`.
62
+ *
63
+ * All visual values resolve through the `cardTab/*` design tokens with
64
+ * sensible Figma defaults so the card renders correctly out of the box.
65
+ *
66
+ * @component
67
+ * @param {CategoryCardProps} props
68
+ */
69
+ declare function CategoryCard({ label, imageSource, imageSlot, badge, active, width, disableTruncation, singleLine, onPress, disabled, modes: propModes, style, labelStyle, accessibilityLabel, accessibilityHint, accessibilityState, webAccessibilityProps, testID, ...rest }: CategoryCardProps): import("react/jsx-runtime").JSX.Element;
70
+ declare const _default: React.MemoExoticComponent<typeof CategoryCard>;
71
+ export default _default;
72
+ //# sourceMappingURL=CategoryCard.d.ts.map
@@ -96,6 +96,21 @@ export type CompareTableProps = {
96
96
  * no scrolling). @default undefined
97
97
  */
98
98
  columnWidth?: number;
99
+ /**
100
+ * When `true` (default), each section's header row (the gray header label)
101
+ * sticks to the top of the viewport when scrolling vertically, with multiple
102
+ * sticky headers stacking up as each reaches the top. Only applies in
103
+ * fixed-width scroll mode (`columnWidth` is set).
104
+ * @default true
105
+ */
106
+ stickyHeaders?: boolean;
107
+ /**
108
+ * When `true` (default), the section header label stays fixed on the left
109
+ * when scrolling horizontally. Only applies in fixed-width scroll mode
110
+ * (`columnWidth` is set).
111
+ * @default true
112
+ */
113
+ stickyHeaderLabel?: boolean;
99
114
  };
100
115
  /**
101
116
  * CompareTable renders a product comparison surface: a row of selection cards
@@ -109,6 +124,6 @@ export type CompareTableProps = {
109
124
  *
110
125
  * @component
111
126
  */
112
- declare function CompareTable({ columns, sections, onAddColumn, addColumnLabel, maxColumns, modes, style, disableTruncation, columnWidth, }: CompareTableProps): import("react/jsx-runtime").JSX.Element;
127
+ declare function CompareTable({ columns, sections, onAddColumn, addColumnLabel, maxColumns, modes, style, disableTruncation, columnWidth, stickyHeaders, stickyHeaderLabel, }: CompareTableProps): import("react/jsx-runtime").JSX.Element;
113
128
  export default CompareTable;
114
129
  //# sourceMappingURL=CompareTable.d.ts.map
@@ -66,6 +66,12 @@ export type ContentSheetProps = {
66
66
  * `useAnimatedStyle`. Default `true`.
67
67
  */
68
68
  visible?: boolean;
69
+ /**
70
+ * Max height of the sheet as a fraction (0–1) of the screen height.
71
+ * When content reaches this height the sheet becomes vertically scrollable.
72
+ * Default `0.7`.
73
+ */
74
+ maxHeightPercent?: number;
69
75
  /** Optional style override applied to the sheet container. */
70
76
  style?: StyleProp<ViewStyle>;
71
77
  } & Omit<ViewProps, 'style' | 'children'>;
@@ -85,6 +91,6 @@ export type ContentSheetProps = {
85
91
  * - **Token-driven** styling via `getVariableByName` + `modes`, with `modes`
86
92
  * cascaded to all slot children.
87
93
  */
88
- declare function ContentSheet({ children, modes, title, avoidKeyboard, keyboardSpacing, safeAreaBottom, pinToBottom, visible, style, ...rest }: ContentSheetProps): import("react/jsx-runtime").JSX.Element;
94
+ declare function ContentSheet({ children, modes, title, avoidKeyboard, keyboardSpacing, safeAreaBottom, pinToBottom, visible, maxHeightPercent, style, ...rest }: ContentSheetProps): import("react/jsx-runtime").JSX.Element;
89
95
  export default ContentSheet;
90
96
  //# sourceMappingURL=ContentSheet.d.ts.map
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+ import { View, type ViewStyle } from 'react-native';
3
+ import type { Modes } from '../../design-tokens';
4
+ export type CounterBadgeProps = {
5
+ /** The value shown inside the badge. */
6
+ value?: string;
7
+ /** Modes used to resolve design tokens. Counter Badge exposes a single `Default` mode. */
8
+ modes?: Modes;
9
+ style?: ViewStyle;
10
+ } & Omit<React.ComponentProps<typeof View>, 'style'>;
11
+ /**
12
+ * Counter Badge — a small token-driven pill that displays a value.
13
+ *
14
+ * All visual attributes resolve from the Figma `counterBadge/*` tokens via
15
+ * `getVariableByName`.
16
+ */
17
+ declare function CounterBadge({ value, modes, style, ...rest }: CounterBadgeProps): import("react/jsx-runtime").JSX.Element;
18
+ export default CounterBadge;
19
+ //# sourceMappingURL=CounterBadge.d.ts.map
@@ -0,0 +1,66 @@
1
+ import React from 'react';
2
+ import { type AccessibilityState, type StyleProp, type ViewStyle } from 'react-native';
3
+ import { type SafePressableProps, type WebAccessibilityProps } from '../../utils/web-platform-utils';
4
+ import type { Modes } from '../../design-tokens';
5
+ export type FavoriteToggleProps = SafePressableProps & {
6
+ /**
7
+ * Whether the toggle is favorited (active) — **controlled**. When provided,
8
+ * the component reflects this value and defers state ownership to the parent
9
+ * (update it in `onChange`). Omit it to use the component uncontrolled with
10
+ * `defaultActive`.
11
+ */
12
+ isActive?: boolean;
13
+ /**
14
+ * Initial favorited state for **uncontrolled** usage. Ignored when `isActive`
15
+ * is provided. Defaults to `false`.
16
+ */
17
+ defaultActive?: boolean;
18
+ /**
19
+ * Icon rendered inside the toggle. Defaults to the heart glyph
20
+ * (`ic_favorite`). Both Figma variants use the same filled heart; only its
21
+ * color changes with state (white when inactive, gold when active). Figma
22
+ * hardcodes the heart, so this prop is exposed purely for future reuse.
23
+ */
24
+ icon?: string;
25
+ /** Fired on press with the next (toggled) active state. */
26
+ onChange?: (next: boolean) => void;
27
+ /** Raw press handler, fired alongside `onChange`. */
28
+ onPress?: () => void;
29
+ /** Modes used to resolve design tokens. */
30
+ modes?: Modes;
31
+ disabled?: boolean;
32
+ /** Accessibility label; defaults to `"Favorite"`. */
33
+ accessibilityLabel?: string;
34
+ accessibilityHint?: string;
35
+ accessibilityState?: AccessibilityState;
36
+ webAccessibilityProps?: WebAccessibilityProps;
37
+ style?: StyleProp<ViewStyle>;
38
+ /**
39
+ * Explicit per-instance loading override. When `true`, renders a same-size
40
+ * circular skeleton instead of the toggle. Defaults to inheriting from the
41
+ * surrounding `<SkeletonGroup>`.
42
+ */
43
+ loading?: boolean;
44
+ };
45
+ /**
46
+ * Circular glass favorite (heart) toggle, mirroring the Figma `Favorite Toggle`
47
+ * component set's boolean `isActive` variant:
48
+ * - inactive: translucent frosted circle (`#ffffff33` over a `blur/minimal`
49
+ * backdrop) with a white heart.
50
+ * - active: solid white circle with a gold (`#cea15a`) heart.
51
+ * Both variants share the identical filled-heart glyph; only the background and
52
+ * icon colors change between states.
53
+ *
54
+ * Controlled or uncontrolled: pass `isActive` (+ `onChange`) to control it, or
55
+ * omit `isActive` and use `defaultActive` to let the component own the state.
56
+ *
57
+ * Visual attributes resolve from the `favoriteToggle/*` / `color/favoriteToggle/*`
58
+ * tokens via `getVariableByName`. Those tokens are not yet in the committed
59
+ * variables snapshot, so the component currently runs on the Figma-node values
60
+ * as fallbacks; once the tokens are exported (under the `isActive` collection,
61
+ * modes `False`/`True`) the resolver takes over.
62
+ */
63
+ declare function FavoriteToggle({ isActive: controlledActive, defaultActive, icon, onChange, onPress, modes, disabled, accessibilityLabel, accessibilityHint, accessibilityState, webAccessibilityProps, style, loading, ...rest }: FavoriteToggleProps): import("react/jsx-runtime").JSX.Element;
64
+ declare const _default: React.MemoExoticComponent<typeof FavoriteToggle>;
65
+ export default _default;
66
+ //# sourceMappingURL=FavoriteToggle.d.ts.map
@@ -0,0 +1,111 @@
1
+ import React from 'react';
2
+ import { TextInput as RNTextInput, type StyleProp, type ViewStyle, type TextStyle, type TextInputProps as RNTextInputProps } from 'react-native';
3
+ import type { Modes } from '../../design-tokens';
4
+ export type HelloJioInputProps = {
5
+ /** Placeholder shown when empty. Defaults to `"Ask me anything"`. */
6
+ placeholder?: string;
7
+ /** Controlled value. Pair with `onChangeText`. */
8
+ value?: string;
9
+ /** Uncontrolled initial value. Ignored when `value` is provided. */
10
+ defaultValue?: string;
11
+ /** Called whenever the text changes. */
12
+ onChangeText?: (text: string) => void;
13
+ /**
14
+ * Called when the user submits — either via the send button or the keyboard
15
+ * return key. Receives the current text. This is the primary action hook.
16
+ */
17
+ onSubmit?: (text: string) => void;
18
+ /**
19
+ * Leading icon name from the registry. Defaults to `"ic_hellojio"`.
20
+ * Ignored when `leading` is provided.
21
+ */
22
+ leadingIconName?: string;
23
+ /**
24
+ * Slot replacing the default leading icon (Figma Slot "start"). Receives
25
+ * `modes` recursively.
26
+ */
27
+ leading?: React.ReactNode;
28
+ /**
29
+ * Slot replacing the default send `IconButton` (Figma Slot "end").
30
+ * Pass `null` to hide the trailing control entirely.
31
+ */
32
+ trailing?: React.ReactNode | null;
33
+ /**
34
+ * Icon name for the default send button. Defaults to `"ic_send_message"`.
35
+ * Ignored when `trailing` is provided.
36
+ */
37
+ sendIconName?: string;
38
+ /**
39
+ * When `true`, renders the IdleJioPlus glass surface while unfocused.
40
+ * Focus still switches to the Active (solid white + border) state.
41
+ */
42
+ jioPlus?: boolean;
43
+ /** Disables typing and the send button. */
44
+ disabled?: boolean;
45
+ /** Design token modes. Visual Idle/Active/IdleJioPlus is derived from focus + `jioPlus`. */
46
+ modes?: Modes;
47
+ /** Container style override. */
48
+ style?: StyleProp<ViewStyle>;
49
+ /** Text input style override. */
50
+ inputStyle?: StyleProp<TextStyle>;
51
+ accessibilityLabel?: string;
52
+ accessibilityHint?: string;
53
+ testID?: string;
54
+ onFocus?: RNTextInputProps['onFocus'];
55
+ onBlur?: RNTextInputProps['onBlur'];
56
+ } & Omit<RNTextInputProps, 'style' | 'value' | 'defaultValue' | 'onChangeText' | 'onFocus' | 'onBlur' | 'placeholder' | 'editable' | 'onSubmitEditing'>;
57
+ declare const _default: React.NamedExoticComponent<{
58
+ /** Placeholder shown when empty. Defaults to `"Ask me anything"`. */
59
+ placeholder?: string;
60
+ /** Controlled value. Pair with `onChangeText`. */
61
+ value?: string;
62
+ /** Uncontrolled initial value. Ignored when `value` is provided. */
63
+ defaultValue?: string;
64
+ /** Called whenever the text changes. */
65
+ onChangeText?: (text: string) => void;
66
+ /**
67
+ * Called when the user submits — either via the send button or the keyboard
68
+ * return key. Receives the current text. This is the primary action hook.
69
+ */
70
+ onSubmit?: (text: string) => void;
71
+ /**
72
+ * Leading icon name from the registry. Defaults to `"ic_hellojio"`.
73
+ * Ignored when `leading` is provided.
74
+ */
75
+ leadingIconName?: string;
76
+ /**
77
+ * Slot replacing the default leading icon (Figma Slot "start"). Receives
78
+ * `modes` recursively.
79
+ */
80
+ leading?: React.ReactNode;
81
+ /**
82
+ * Slot replacing the default send `IconButton` (Figma Slot "end").
83
+ * Pass `null` to hide the trailing control entirely.
84
+ */
85
+ trailing?: React.ReactNode | null;
86
+ /**
87
+ * Icon name for the default send button. Defaults to `"ic_send_message"`.
88
+ * Ignored when `trailing` is provided.
89
+ */
90
+ sendIconName?: string;
91
+ /**
92
+ * When `true`, renders the IdleJioPlus glass surface while unfocused.
93
+ * Focus still switches to the Active (solid white + border) state.
94
+ */
95
+ jioPlus?: boolean;
96
+ /** Disables typing and the send button. */
97
+ disabled?: boolean;
98
+ /** Design token modes. Visual Idle/Active/IdleJioPlus is derived from focus + `jioPlus`. */
99
+ modes?: Modes;
100
+ /** Container style override. */
101
+ style?: StyleProp<ViewStyle>;
102
+ /** Text input style override. */
103
+ inputStyle?: StyleProp<TextStyle>;
104
+ accessibilityLabel?: string;
105
+ accessibilityHint?: string;
106
+ testID?: string;
107
+ onFocus?: RNTextInputProps["onFocus"];
108
+ onBlur?: RNTextInputProps["onBlur"];
109
+ } & Omit<RNTextInputProps, "style" | "value" | "onFocus" | "onBlur" | "defaultValue" | "placeholder" | "editable" | "onChangeText" | "onSubmitEditing"> & React.RefAttributes<RNTextInput>>;
110
+ export default _default;
111
+ //# sourceMappingURL=HelloJioInput.d.ts.map
@@ -0,0 +1,86 @@
1
+ import React from 'react';
2
+ import { type StyleProp, type ViewStyle, type TextStyle, type GestureResponderEvent } from 'react-native';
3
+ import type { Modes } from '../../design-tokens';
4
+ export type ValueBackMetricProps = {
5
+ /**
6
+ * Header glyph slot, shown to the left of the title. Mirrors the Figma swap
7
+ * slot whose preferred instances are `Icon` and `Image`:
8
+ * - a registry icon name (e.g. `'ic_rupee_coin'`) renders the shared
9
+ * {@link Icon}, colour/size from the `icon/*` tokens (default 18px gold —
10
+ * retint via `modes`, e.g. `{ AppearanceBrand: 'Secondary' }`);
11
+ * - a custom node (an `<Icon/>`, an `<Image/>`, your brand logo) renders
12
+ * as-is with `modes` cascaded into it.
13
+ * The Figma design uses a dedicated JioPoints brand mark that is not in the
14
+ * icon registry, so `ic_rupee_coin` stands in by default.
15
+ */
16
+ icon?: string | React.ReactNode;
17
+ /** Header title next to the icon. Defaults to `'JioPoints'`. */
18
+ title?: string;
19
+ /**
20
+ * The prominent value line (16px/500). Pass a string, or any node to compose
21
+ * a richer value. Hidden when omitted.
22
+ */
23
+ value?: string | React.ReactNode;
24
+ /** Muted caption below the value (12px, `#777`). Hidden when omitted. */
25
+ caption?: string;
26
+ /** Bottom link label (underlined, brand accent). Hidden when omitted. */
27
+ linkLabel?: string;
28
+ /** Fired when the link is pressed. Navigation is the consumer's job. */
29
+ onLinkPress?: (event: GestureResponderEvent) => void;
30
+ /**
31
+ * Press handler for the whole card. When set, the card becomes pressable
32
+ * (rendered through a `Pressable` with `accessibilityRole="button"`).
33
+ * Independent of {@link onLinkPress} — the bottom link keeps its own handler.
34
+ */
35
+ onPress?: (event: GestureResponderEvent) => void;
36
+ /** Disable interaction when `onPress` is set. */
37
+ disabled?: boolean;
38
+ /** Design-token modes for theming. */
39
+ modes?: Modes;
40
+ /** Override the container styles. */
41
+ style?: StyleProp<ViewStyle>;
42
+ /** Override the title text styles. */
43
+ titleStyle?: StyleProp<TextStyle>;
44
+ /** Override the value text styles. */
45
+ valueStyle?: StyleProp<TextStyle>;
46
+ /** Override the caption text styles. */
47
+ captionStyle?: StyleProp<TextStyle>;
48
+ /**
49
+ * Accessibility label. Defaults to the resolved `title`, `value`, `caption`
50
+ * and `linkLabel` joined together.
51
+ */
52
+ accessibilityLabel?: string;
53
+ };
54
+ /**
55
+ * ValueBackMetric — a compact, left-aligned "value back" card.
56
+ *
57
+ * Stacks a branded header row (icon + `title`, e.g. "JioPoints"), a prominent
58
+ * `value`, a muted `caption`, and an optional bottom `linkLabel` (e.g. "Earn").
59
+ * `value`, `caption` and `linkLabel` each render only when provided; the header
60
+ * (icon + title) always shows.
61
+ *
62
+ * Colours, gaps and padding resolve from the `metricdata/*` tokens; the header
63
+ * glyph from the `icon/*` tokens (default 18px gold); the link entirely from
64
+ * the `link/*` + `text/foreground` tokens via the shared {@link Link}, with
65
+ * `Text Appearance: Secondary` and `Text Sizes: Small` seeded so it renders
66
+ * purple at 12px like the design (caller `modes` win). The per-part font
67
+ * sizes/weights come from the Figma `valueBackMetric/*` variables, which are
68
+ * not yet in the committed token snapshot, so they are encoded as constants
69
+ * matching the design.
70
+ *
71
+ * @example
72
+ * ```tsx
73
+ * <ValueBackMetric
74
+ * title="JioPoints"
75
+ * value="Value"
76
+ * caption="Earn 10 point with UPI"
77
+ * linkLabel="Earn"
78
+ * onPress={() => navigation.navigate('ValueBack')}
79
+ * onLinkPress={() => navigation.navigate('EarnPoints')}
80
+ * />
81
+ * ```
82
+ */
83
+ declare function ValueBackMetric({ icon, title, value, caption, linkLabel, onLinkPress, onPress, disabled, modes, style, titleStyle, valueStyle, captionStyle, accessibilityLabel, }: ValueBackMetricProps): import("react/jsx-runtime").JSX.Element;
84
+ declare const _default: React.MemoExoticComponent<typeof ValueBackMetric>;
85
+ export default _default;
86
+ //# sourceMappingURL=ValueBackMetric.d.ts.map
@@ -23,6 +23,7 @@ export { default as CardFeedback, type CardFeedbackProps } from './CardFeedback/
23
23
  export { default as CardFinancialCondition, type CardFinancialConditionProps, } from './CardFinancialCondition/CardFinancialCondition';
24
24
  export { default as CardInsight, type CardInsightProps } from './CardInsight/CardInsight';
25
25
  export { default as CcCard, type CcCardProps, type CcCardBadge, type CcCardListItem } from './CcCard/CcCard';
26
+ export { default as CategoryCard, type CategoryCardProps } from './CategoryCard/CategoryCard';
26
27
  export { default as Disclaimer } from './Disclaimer/Disclaimer';
27
28
  export { default as Divider, type DividerProps, type DividerDirection } from './Divider/Divider';
28
29
  export { default as Drawer, type DrawerProps, type DrawerHandle } from './Drawer/Drawer';
@@ -50,6 +51,7 @@ export { default as AllocationComparisonChart, type AllocationComparisonChartPro
50
51
  export { default as MonthlyStatusGrid, CalendarGlyph, type MonthlyStatusGridProps, type MonthlyStatusGridMonth, type MonthlyStatus, type CalendarGlyphProps, } from './MonthlyStatusGrid/MonthlyStatusGrid';
51
52
  export { default as Gauge, type GaugeProps } from './Gauge/Gauge';
52
53
  export { default as HeroSection, type HeroSectionProps } from './HeroSection/HeroSection';
54
+ export { default as HelloJioInput, type HelloJioInputProps } from './HelloJioInput/HelloJioInput';
53
55
  export { default as HoldingsCard, type HoldingsCardProps } from './HoldingsCard/HoldingsCard';
54
56
  export { default as HStack, type HStackProps } from './HStack/HStack';
55
57
  export { default as Icon, type IconProps } from './Icon/Icon';
@@ -157,4 +159,7 @@ export { default as SegmentedControl, type SegmentedControlProps, type Segmented
157
159
  export { default as Toggle, type ToggleProps } from './Toggle/Toggle';
158
160
  export { default as AutoplayControl, type AutoplayControlProps } from './AutoplayControl/AutoplayControl';
159
161
  export { default as NumberPagination, type NumberPaginationProps } from './NumberPagination/NumberPagination';
162
+ export { default as CounterBadge, type CounterBadgeProps } from './CounterBadge/CounterBadge';
163
+ export { default as FavoriteToggle, type FavoriteToggleProps } from './FavoriteToggle/FavoriteToggle';
164
+ export { default as ValueBackMetric, type ValueBackMetricProps } from './ValueBackMetric/ValueBackMetric';
160
165
  //# 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-07-10T20:55:36.505Z
7
+ * Generated: 2026-07-20T10:48:20.222Z
8
8
  */
9
9
  export declare const iconRegistry: Record<string, {
10
10
  path: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jfs-components",
3
- "version": "0.1.30",
3
+ "version": "0.1.33",
4
4
  "description": "React Native Jio Finance Components Library",
5
5
  "author": "sunshuaiqi@gmail.com",
6
6
  "license": "MIT",
@@ -10,9 +10,14 @@
10
10
  "react-native": "src/index.ts",
11
11
  "source": "src/index.ts",
12
12
  "sideEffects": false,
13
+ "bin": {
14
+ "jfs-extract-modes": "scripts/extract-figma-modes.js"
15
+ },
13
16
  "files": [
14
17
  "src",
15
18
  "lib",
19
+ "scripts/extract-figma-modes.js",
20
+ "D2C.md",
16
21
  "CHANGELOG.md",
17
22
  "!**/__tests__",
18
23
  "!**/*.stories.*",
@@ -41,6 +46,7 @@
41
46
  "postinstall": "patch-package",
42
47
  "icons:generate": "node scripts/generate-icon-registry.js",
43
48
  "audit:tokens": "node scripts/audit-tokens.js",
49
+ "extract-modes": "node scripts/extract-figma-modes.js",
44
50
  "prepare": "bob build",
45
51
  "build": "bob build",
46
52
  "prepack": "yarn icons:generate && bob build",