jfs-components 0.0.72 → 0.0.74

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 (158) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/lib/commonjs/components/AccordionCheckbox/AccordionCheckbox.js +239 -0
  3. package/lib/commonjs/components/AccountCard/AccountCard.js +247 -0
  4. package/lib/commonjs/components/AppBar/AppBar.js +17 -11
  5. package/lib/commonjs/components/BrandChip/BrandChip.js +149 -0
  6. package/lib/commonjs/components/CardBankAccount/CardBankAccount.js +229 -0
  7. package/lib/commonjs/components/CardInsight/CardInsight.js +166 -0
  8. package/lib/commonjs/components/CheckboxGroup/CheckboxGroup.js +67 -0
  9. package/lib/commonjs/components/CheckboxItem/CheckboxItem.js +140 -0
  10. package/lib/commonjs/components/CircularProgressBar/CircularProgressBar.js +56 -9
  11. package/lib/commonjs/components/CoverageBarComparison/CoverageBarComparison.js +272 -0
  12. package/lib/commonjs/components/CoverageRing/CoverageRing.js +141 -0
  13. package/lib/commonjs/components/DonutChart/DonutChart.js +309 -0
  14. package/lib/commonjs/components/DonutChartSummary/DonutChartSummary.js +155 -0
  15. package/lib/commonjs/components/Dropdown/Dropdown.js +214 -0
  16. package/lib/commonjs/components/DropdownInput/DropdownInput.js +542 -0
  17. package/lib/commonjs/components/FormField/FormField.js +328 -178
  18. package/lib/commonjs/components/LinearMeter/LinearMeter.js +9 -28
  19. package/lib/commonjs/components/LinearProgress/LinearProgress.js +68 -0
  20. package/lib/commonjs/components/LottieIntroBlock/LottieIntroBlock.js +150 -0
  21. package/lib/commonjs/components/MetricLegendItem/MetricLegendItem.js +95 -0
  22. package/lib/commonjs/components/MonthlyStatusGrid/MonthlyStatusGrid.js +286 -0
  23. package/lib/commonjs/components/OTP/OTP.js +381 -37
  24. package/lib/commonjs/components/PageHero/PageHero.js +153 -0
  25. package/lib/commonjs/components/PoweredByLabel/PoweredByLabel.js +135 -0
  26. package/lib/commonjs/components/PoweredByLabel/finvu.png +0 -0
  27. package/lib/commonjs/components/ProductOverview/ProductOverview.js +147 -0
  28. package/lib/commonjs/components/RangeTrack/RangeTrack.js +269 -0
  29. package/lib/commonjs/components/SavingsGoalSummary/SavingsGoalSummary.js +181 -0
  30. package/lib/commonjs/components/SegmentedTrack/SegmentedTrack.js +171 -0
  31. package/lib/commonjs/components/StatGroup/StatGroup.js +128 -0
  32. package/lib/commonjs/components/StatItem/StatItem.js +65 -35
  33. package/lib/commonjs/components/StrengthIndicator/StrengthIndicator.js +157 -0
  34. package/lib/commonjs/components/SummaryTile/SummaryTile.js +150 -0
  35. package/lib/commonjs/components/Text/Text.js +9 -2
  36. package/lib/commonjs/components/Tooltip/Tooltip.js +34 -27
  37. package/lib/commonjs/components/index.js +231 -1
  38. package/lib/commonjs/design-tokens/Coin Variables-variables-full.json +1 -1
  39. package/lib/commonjs/icons/registry.js +1 -1
  40. package/lib/commonjs/utils/index.js +7 -0
  41. package/lib/commonjs/utils/number-utils.js +57 -0
  42. package/lib/module/components/AccordionCheckbox/AccordionCheckbox.js +233 -0
  43. package/lib/module/components/AccountCard/AccountCard.js +241 -0
  44. package/lib/module/components/AppBar/AppBar.js +17 -11
  45. package/lib/module/components/BrandChip/BrandChip.js +143 -0
  46. package/lib/module/components/CardBankAccount/CardBankAccount.js +223 -0
  47. package/lib/module/components/CardInsight/CardInsight.js +161 -0
  48. package/lib/module/components/CheckboxGroup/CheckboxGroup.js +62 -0
  49. package/lib/module/components/CheckboxItem/CheckboxItem.js +134 -0
  50. package/lib/module/components/CircularProgressBar/CircularProgressBar.js +56 -9
  51. package/lib/module/components/CoverageBarComparison/CoverageBarComparison.js +266 -0
  52. package/lib/module/components/CoverageRing/CoverageRing.js +136 -0
  53. package/lib/module/components/DonutChart/DonutChart.js +303 -0
  54. package/lib/module/components/DonutChartSummary/DonutChartSummary.js +150 -0
  55. package/lib/module/components/Dropdown/Dropdown.js +206 -0
  56. package/lib/module/components/DropdownInput/DropdownInput.js +536 -0
  57. package/lib/module/components/FormField/FormField.js +330 -180
  58. package/lib/module/components/LinearMeter/LinearMeter.js +9 -28
  59. package/lib/module/components/LinearProgress/LinearProgress.js +63 -0
  60. package/lib/module/components/LottieIntroBlock/LottieIntroBlock.js +144 -0
  61. package/lib/module/components/MetricLegendItem/MetricLegendItem.js +90 -0
  62. package/lib/module/components/MonthlyStatusGrid/MonthlyStatusGrid.js +281 -0
  63. package/lib/module/components/OTP/OTP.js +381 -38
  64. package/lib/module/components/PageHero/PageHero.js +147 -0
  65. package/lib/module/components/PoweredByLabel/PoweredByLabel.js +130 -0
  66. package/lib/module/components/PoweredByLabel/finvu.png +0 -0
  67. package/lib/module/components/ProductOverview/ProductOverview.js +142 -0
  68. package/lib/module/components/RangeTrack/RangeTrack.js +263 -0
  69. package/lib/module/components/SavingsGoalSummary/SavingsGoalSummary.js +175 -0
  70. package/lib/module/components/SegmentedTrack/SegmentedTrack.js +166 -0
  71. package/lib/module/components/StatGroup/StatGroup.js +123 -0
  72. package/lib/module/components/StatItem/StatItem.js +66 -36
  73. package/lib/module/components/StrengthIndicator/StrengthIndicator.js +152 -0
  74. package/lib/module/components/SummaryTile/SummaryTile.js +145 -0
  75. package/lib/module/components/Text/Text.js +9 -2
  76. package/lib/module/components/Tooltip/Tooltip.js +34 -27
  77. package/lib/module/components/index.js +28 -2
  78. package/lib/module/design-tokens/Coin Variables-variables-full.json +1 -1
  79. package/lib/module/icons/registry.js +1 -1
  80. package/lib/module/utils/index.js +2 -1
  81. package/lib/module/utils/number-utils.js +53 -0
  82. package/lib/typescript/src/components/AccordionCheckbox/AccordionCheckbox.d.ts +71 -0
  83. package/lib/typescript/src/components/AccountCard/AccountCard.d.ts +81 -0
  84. package/lib/typescript/src/components/BrandChip/BrandChip.d.ts +43 -0
  85. package/lib/typescript/src/components/CardBankAccount/CardBankAccount.d.ts +86 -0
  86. package/lib/typescript/src/components/CardInsight/CardInsight.d.ts +48 -0
  87. package/lib/typescript/src/components/CheckboxGroup/CheckboxGroup.d.ts +41 -0
  88. package/lib/typescript/src/components/CheckboxItem/CheckboxItem.d.ts +72 -0
  89. package/lib/typescript/src/components/CircularProgressBar/CircularProgressBar.d.ts +11 -1
  90. package/lib/typescript/src/components/CoverageBarComparison/CoverageBarComparison.d.ts +105 -0
  91. package/lib/typescript/src/components/CoverageRing/CoverageRing.d.ts +90 -0
  92. package/lib/typescript/src/components/DonutChart/DonutChart.d.ts +117 -0
  93. package/lib/typescript/src/components/DonutChartSummary/DonutChartSummary.d.ts +103 -0
  94. package/lib/typescript/src/components/Dropdown/Dropdown.d.ts +62 -0
  95. package/lib/typescript/src/components/DropdownInput/DropdownInput.d.ts +107 -0
  96. package/lib/typescript/src/components/FormField/FormField.d.ts +76 -19
  97. package/lib/typescript/src/components/LinearProgress/LinearProgress.d.ts +17 -0
  98. package/lib/typescript/src/components/LottieIntroBlock/LottieIntroBlock.d.ts +58 -0
  99. package/lib/typescript/src/components/MetricLegendItem/MetricLegendItem.d.ts +37 -0
  100. package/lib/typescript/src/components/MonthlyStatusGrid/MonthlyStatusGrid.d.ts +119 -0
  101. package/lib/typescript/src/components/OTP/OTP.d.ts +88 -2
  102. package/lib/typescript/src/components/PageHero/PageHero.d.ts +53 -0
  103. package/lib/typescript/src/components/PoweredByLabel/PoweredByLabel.d.ts +70 -0
  104. package/lib/typescript/src/components/ProductOverview/ProductOverview.d.ts +39 -0
  105. package/lib/typescript/src/components/RangeTrack/RangeTrack.d.ts +173 -0
  106. package/lib/typescript/src/components/SavingsGoalSummary/SavingsGoalSummary.d.ts +95 -0
  107. package/lib/typescript/src/components/SegmentedTrack/SegmentedTrack.d.ts +108 -0
  108. package/lib/typescript/src/components/StatGroup/StatGroup.d.ts +45 -0
  109. package/lib/typescript/src/components/StatItem/StatItem.d.ts +24 -7
  110. package/lib/typescript/src/components/StrengthIndicator/StrengthIndicator.d.ts +58 -0
  111. package/lib/typescript/src/components/SummaryTile/SummaryTile.d.ts +60 -0
  112. package/lib/typescript/src/components/Text/Text.d.ts +12 -2
  113. package/lib/typescript/src/components/Tooltip/Tooltip.d.ts +13 -2
  114. package/lib/typescript/src/components/index.d.ts +29 -3
  115. package/lib/typescript/src/icons/registry.d.ts +1 -1
  116. package/lib/typescript/src/utils/index.d.ts +1 -0
  117. package/lib/typescript/src/utils/number-utils.d.ts +29 -0
  118. package/package.json +1 -3
  119. package/src/components/AccordionCheckbox/AccordionCheckbox.tsx +323 -0
  120. package/src/components/AccountCard/AccountCard.tsx +376 -0
  121. package/src/components/AppBar/AppBar.tsx +25 -14
  122. package/src/components/BrandChip/BrandChip.tsx +235 -0
  123. package/src/components/CardBankAccount/CardBankAccount.tsx +321 -0
  124. package/src/components/CardInsight/CardInsight.tsx +239 -0
  125. package/src/components/CheckboxGroup/CheckboxGroup.tsx +86 -0
  126. package/src/components/CheckboxItem/CheckboxItem.tsx +209 -0
  127. package/src/components/CircularProgressBar/CircularProgressBar.tsx +74 -9
  128. package/src/components/CoverageBarComparison/CoverageBarComparison.tsx +378 -0
  129. package/src/components/CoverageRing/CoverageRing.tsx +225 -0
  130. package/src/components/DonutChart/DonutChart.tsx +503 -0
  131. package/src/components/DonutChartSummary/DonutChartSummary.tsx +256 -0
  132. package/src/components/Dropdown/Dropdown.tsx +331 -0
  133. package/src/components/DropdownInput/DropdownInput.tsx +819 -0
  134. package/src/components/FormField/FormField.tsx +542 -215
  135. package/src/components/LinearMeter/LinearMeter.tsx +9 -39
  136. package/src/components/LinearProgress/LinearProgress.tsx +92 -0
  137. package/src/components/LottieIntroBlock/LottieIntroBlock.tsx +202 -0
  138. package/src/components/MetricLegendItem/MetricLegendItem.tsx +167 -0
  139. package/src/components/MonthlyStatusGrid/MonthlyStatusGrid.tsx +438 -0
  140. package/src/components/OTP/OTP.tsx +476 -29
  141. package/src/components/PageHero/PageHero.tsx +200 -0
  142. package/src/components/PoweredByLabel/PoweredByLabel.tsx +221 -0
  143. package/src/components/PoweredByLabel/finvu.png +0 -0
  144. package/src/components/ProductOverview/ProductOverview.tsx +236 -0
  145. package/src/components/RangeTrack/RangeTrack.tsx +394 -0
  146. package/src/components/SavingsGoalSummary/SavingsGoalSummary.tsx +269 -0
  147. package/src/components/SegmentedTrack/SegmentedTrack.tsx +268 -0
  148. package/src/components/StatGroup/StatGroup.tsx +169 -0
  149. package/src/components/StatItem/StatItem.tsx +117 -40
  150. package/src/components/StrengthIndicator/StrengthIndicator.tsx +205 -0
  151. package/src/components/SummaryTile/SummaryTile.tsx +251 -0
  152. package/src/components/Text/Text.tsx +24 -3
  153. package/src/components/Tooltip/Tooltip.tsx +50 -25
  154. package/src/components/index.ts +47 -3
  155. package/src/design-tokens/Coin Variables-variables-full.json +1 -1
  156. package/src/icons/registry.ts +1 -1
  157. package/src/utils/index.ts +1 -0
  158. package/src/utils/number-utils.ts +60 -0
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+
3
+ import React from 'react';
4
+ import { View } from 'react-native';
5
+ import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
6
+ import { EMPTY_MODES } from '../../utils/react-utils';
7
+
8
+ /**
9
+ * Confidence levels supported by the indicator. Mirrors the Figma `Confidence`
10
+ * mode collection exactly (`High` | `Medium` | `Low` | `None`).
11
+ */
12
+
13
+ /**
14
+ * Accepted shape for the `confidence` prop. Either:
15
+ * - one of the named levels (`'High' | 'Medium' | 'Low' | 'None'`), or
16
+ * - a float in `[0, 1]`. Floats are bucketed to the nearest level using
17
+ * midpoint thresholds (1/6, 1/2, 5/6) so anchor values land squarely:
18
+ * `0` → `None`, `~0.33` → `Low`, `~0.66` → `Medium`, `1` → `High`.
19
+ * Values outside `[0, 1]` are clamped.
20
+ */
21
+ import { jsx as _jsx } from "react/jsx-runtime";
22
+ const BAR_SIZES = ['small', 'medium', 'large'];
23
+
24
+ /**
25
+ * Maps an overall confidence level to per-bar confidence modes. Bars are
26
+ * filled from the smallest (left) to the largest (right) as confidence
27
+ * rises, with each lit bar tinted at its own confidence level so the
28
+ * indicator visually communicates *which* level the value is at — not just
29
+ * how many bars are lit.
30
+ *
31
+ * High -> [High, High, High] (3/3 lit, bright)
32
+ * Medium -> [Medium, Medium, None] (2/3 lit, mid intensity)
33
+ * Low -> [Low, None, None] (1/3 lit, low intensity)
34
+ * None -> [None, None, None] (0/3 lit)
35
+ *
36
+ * Each bar resolves its color through `getVariableByName` with its own
37
+ * per-bar `Confidence` mode, so the mapping survives any token updates in
38
+ * the Figma variables export.
39
+ */
40
+ const CONFIDENCE_TO_BARS = {
41
+ High: ['High', 'High', 'High'],
42
+ Medium: ['Medium', 'Medium', 'None'],
43
+ Low: ['Low', 'None', 'None'],
44
+ None: ['None', 'None', 'None']
45
+ };
46
+
47
+ /**
48
+ * Fallback colors used when the `strengthIndicator/*` design tokens have not
49
+ * yet been imported into `Coin Variables-variables-full.json`. The `High`
50
+ * fallback matches the Figma export (`#25ab21`); the intermediate levels
51
+ * use progressively lighter greens, and `None` uses a neutral gray for
52
+ * unlit bars. Once the tokens land, `getVariableByName` returns the
53
+ * canonical value and these fallbacks are bypassed.
54
+ */
55
+ const FALLBACK_BAR_COLOR = {
56
+ High: '#25ab21',
57
+ Medium: '#5cc257',
58
+ Low: '#a8dba2',
59
+ None: '#d9d9dd'
60
+ };
61
+
62
+ /**
63
+ * Bucket a float `[0, 1]` into the nearest named confidence level using
64
+ * midpoint thresholds between the four anchor values (`0`, `1/3`, `2/3`,
65
+ * `1`). Out-of-range values are clamped.
66
+ */
67
+ function floatToConfidence(value) {
68
+ const clamped = Math.min(Math.max(value, 0), 1);
69
+ if (clamped > 5 / 6) return 'High';
70
+ if (clamped > 1 / 2) return 'Medium';
71
+ if (clamped > 1 / 6) return 'Low';
72
+ return 'None';
73
+ }
74
+
75
+ /**
76
+ * Normalize the union `confidence` prop into a single named level.
77
+ * Strings pass through; numbers are bucketed via {@link floatToConfidence}.
78
+ * Anything else (e.g. `null`/`undefined`) defaults to `'High'` to match
79
+ * Figma's default mode.
80
+ */
81
+ function resolveConfidence(value) {
82
+ if (typeof value === 'number') return floatToConfidence(value);
83
+ if (value === 'High' || value === 'Medium' || value === 'Low' || value === 'None') {
84
+ return value;
85
+ }
86
+ return 'High';
87
+ }
88
+
89
+ /**
90
+ * StrengthIndicator renders three fixed-size, ascending bars that
91
+ * communicate a discrete confidence/strength level — typically used to
92
+ * signal model confidence, signal quality, or password strength.
93
+ *
94
+ * Sizes are intentionally fixed (matching the Figma spec): 3px-wide bars
95
+ * 6/9/12px tall with a 2px gap and 2px container padding.
96
+ *
97
+ * Pass a single `confidence` value (named enum *or* float `[0, 1]`); the
98
+ * component normalizes it to a level, maps that level to a per-bar
99
+ * confidence mode, and resolves each bar's color through design tokens
100
+ * (`strengthIndicator/bar/<size>/background`).
101
+ *
102
+ * @component
103
+ * @param {StrengthIndicatorProps} props
104
+ */
105
+ function StrengthIndicator({
106
+ confidence = 'High',
107
+ modes = EMPTY_MODES,
108
+ style,
109
+ ...rest
110
+ }) {
111
+ const containerGap = getVariableByName('strengthIndicator/container/gap', modes) ?? 2;
112
+ const containerPadding = getVariableByName('strengthIndicator/container/padding', modes) ?? 2;
113
+ const barWidth = getVariableByName('strengthIndicator/bar/width', modes) ?? 3;
114
+ const barRadius = getVariableByName('strengthIndicator/bar/radius', modes) ?? 1;
115
+ const barHeights = {
116
+ small: getVariableByName('strengthIndicator/bar/height/small', modes) ?? 6,
117
+ medium: getVariableByName('strengthIndicator/bar/height/medium', modes) ?? 9,
118
+ large: getVariableByName('strengthIndicator/bar/height/large', modes) ?? 12
119
+ };
120
+ const resolvedLevel = resolveConfidence(confidence);
121
+ const perBarConfidence = CONFIDENCE_TO_BARS[resolvedLevel];
122
+ const containerStyle = {
123
+ flexDirection: 'row',
124
+ alignItems: 'flex-end',
125
+ gap: containerGap,
126
+ padding: containerPadding
127
+ };
128
+ return /*#__PURE__*/_jsx(View, {
129
+ style: [containerStyle, style],
130
+ accessibilityRole: "image",
131
+ accessibilityLabel: `Strength indicator: ${resolvedLevel} confidence`,
132
+ ...rest,
133
+ children: BAR_SIZES.map((size, index) => {
134
+ const barConfidence = perBarConfidence[index] ?? 'None';
135
+ const barModes = {
136
+ ...modes,
137
+ Confidence: barConfidence
138
+ };
139
+ const tokenColor = getVariableByName(`strengthIndicator/bar/${size}/background`, barModes);
140
+ const backgroundColor = tokenColor ?? FALLBACK_BAR_COLOR[barConfidence];
141
+ return /*#__PURE__*/_jsx(View, {
142
+ style: {
143
+ width: barWidth,
144
+ height: barHeights[size],
145
+ borderRadius: barRadius,
146
+ backgroundColor
147
+ }
148
+ }, size);
149
+ })
150
+ });
151
+ }
152
+ export default StrengthIndicator;
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+
3
+ import React from 'react';
4
+ import { View, Text, Pressable } from 'react-native';
5
+ import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
6
+ import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils';
7
+ import Button from '../Button/Button';
8
+ import NavArrow from '../NavArrow/NavArrow';
9
+ import StrengthIndicator from '../StrengthIndicator/StrengthIndicator';
10
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
+ /**
12
+ * SummaryTile composes a title (with an inline `StrengthIndicator`), a
13
+ * supporting description and an action slot into a compact horizontal row,
14
+ * commonly used at the top of dashboard cards (e.g. "Spending — know your
15
+ * spending and savings"). An optional trailing chevron and tile-level
16
+ * `onPress` handler turn the whole row into a navigational entry point.
17
+ *
18
+ * @component
19
+ * @param {SummaryTileProps} props
20
+ */
21
+ function SummaryTile({
22
+ title = 'Spending',
23
+ description = 'Know your spending and savings',
24
+ confidence = 'None',
25
+ chevron = false,
26
+ children,
27
+ onPress,
28
+ modes = EMPTY_MODES,
29
+ style,
30
+ titleStyle,
31
+ descriptionStyle,
32
+ accessibilityLabel
33
+ }) {
34
+ const containerGap = getVariableByName('summaryTile/gap', modes) ?? 8;
35
+ const containerPadding = getVariableByName('summaryTile/padding', modes) ?? 0;
36
+ const contentGap = getVariableByName('summaryTile/content/gap', modes) ?? 8;
37
+ const titleWrapGap = getVariableByName('summaryTile/titleWrap/gap', modes) ?? 4;
38
+ const titleColor = getVariableByName('summaryTile/title/color', modes) ?? '#0d0d0f';
39
+ const titleFontFamily = getVariableByName('summaryTile/title/fontFamily', modes) ?? 'JioType Var';
40
+ const titleFontSize = getVariableByName('summaryTile/title/fontSize', modes) ?? 16;
41
+ const titleFontWeight = getVariableByName('summaryTile/title/fontWeight', modes) ?? 700;
42
+ const titleLineHeight = getVariableByName('summaryTile/title/lineHeight', modes) ?? 18;
43
+ const descriptionColor = getVariableByName('summaryTile/description/color', modes) ?? '#24262b';
44
+ const descriptionFontFamily = getVariableByName('summaryTile/description/fontFamily', modes) ?? 'JioType Var';
45
+ const descriptionFontSize = getVariableByName('summaryTile/description/fontSize', modes) ?? 12;
46
+ const descriptionFontWeight = getVariableByName('summaryTile/description/fontWeight', modes) ?? 500;
47
+ const descriptionLineHeight = getVariableByName('summaryTile/description/lineHeight', modes) ?? 16;
48
+ const titleTextStyle = {
49
+ color: titleColor,
50
+ fontFamily: titleFontFamily,
51
+ fontSize: titleFontSize,
52
+ fontWeight: String(titleFontWeight),
53
+ lineHeight: titleLineHeight
54
+ };
55
+ const descriptionTextStyle = {
56
+ color: descriptionColor,
57
+ fontFamily: descriptionFontFamily,
58
+ fontSize: descriptionFontSize,
59
+ fontWeight: String(descriptionFontWeight),
60
+ lineHeight: descriptionLineHeight
61
+ };
62
+ const showIndicator = confidence !== null;
63
+
64
+ // When the entire tile is pressable, the default `Button` slot is
65
+ // suppressed so we don't render a `<button>` inside another `<button>`
66
+ // (which is invalid HTML and triggers a React hydration warning on
67
+ // web). Consumers can still pass an explicit non-button node via
68
+ // `children` if they want a visible affordance alongside `onPress`.
69
+ const isPressable = onPress != null;
70
+ const actionSlot = children !== undefined ? children !== null ? /*#__PURE__*/_jsx(_Fragment, {
71
+ children: cloneChildrenWithModes(children, modes)
72
+ }) : null : isPressable ? null : /*#__PURE__*/_jsx(Button, {
73
+ label: "Button",
74
+ modes: {
75
+ 'AppearanceBrand': 'Secondary',
76
+ ...modes,
77
+ 'Button / Size': 'S'
78
+ }
79
+ });
80
+ const tileContent = /*#__PURE__*/_jsxs(_Fragment, {
81
+ children: [/*#__PURE__*/_jsxs(View, {
82
+ style: {
83
+ flex: 1,
84
+ minWidth: 0,
85
+ flexDirection: 'column',
86
+ gap: contentGap,
87
+ alignItems: 'flex-start'
88
+ },
89
+ children: [/*#__PURE__*/_jsxs(View, {
90
+ style: {
91
+ flexDirection: 'row',
92
+ alignItems: 'center',
93
+ gap: titleWrapGap,
94
+ width: '100%'
95
+ },
96
+ children: [title ? /*#__PURE__*/_jsx(Text, {
97
+ style: [titleTextStyle, titleStyle],
98
+ numberOfLines: 1,
99
+ children: title
100
+ }) : null, showIndicator ? /*#__PURE__*/_jsx(StrengthIndicator, {
101
+ confidence: confidence,
102
+ modes: modes
103
+ }) : null]
104
+ }), description ? /*#__PURE__*/_jsx(Text, {
105
+ style: [descriptionTextStyle, descriptionStyle],
106
+ children: description
107
+ }) : null]
108
+ }), actionSlot != null ? /*#__PURE__*/_jsx(View, {
109
+ style: {
110
+ flexDirection: 'row',
111
+ alignItems: 'center'
112
+ },
113
+ children: actionSlot
114
+ }) : null, chevron ? /*#__PURE__*/_jsx(NavArrow, {
115
+ direction: "Forward",
116
+ modes: modes
117
+ }) : null]
118
+ });
119
+ const containerLayoutStyle = {
120
+ flexDirection: 'row',
121
+ alignItems: 'center',
122
+ gap: containerGap,
123
+ padding: containerPadding,
124
+ width: '100%'
125
+ };
126
+ if (onPress) {
127
+ return /*#__PURE__*/_jsx(Pressable, {
128
+ onPress: onPress,
129
+ accessibilityRole: "button",
130
+ accessibilityLabel: accessibilityLabel ?? title,
131
+ style: ({
132
+ pressed
133
+ }) => [containerLayoutStyle, style, pressed ? {
134
+ opacity: 0.7
135
+ } : null],
136
+ children: tileContent
137
+ });
138
+ }
139
+ return /*#__PURE__*/_jsx(View, {
140
+ style: [containerLayoutStyle, style],
141
+ accessibilityLabel: accessibilityLabel,
142
+ children: tileContent
143
+ });
144
+ }
145
+ export default SummaryTile;
@@ -10,7 +10,8 @@ const TEXT_ALIGN_MAP = {
10
10
  Center: 'center'
11
11
  };
12
12
  function Text({
13
- text = 'Korem ipsum ',
13
+ text,
14
+ children,
14
15
  textAlign = 'Left',
15
16
  modes = EMPTY_MODES,
16
17
  style,
@@ -31,10 +32,16 @@ function Text({
31
32
  letterSpacing: letterSpacing,
32
33
  textAlign: TEXT_ALIGN_MAP[textAlign]
33
34
  };
35
+
36
+ // Prefer JSX children when present, otherwise fall back to the `text` prop.
37
+ // Keep the storybook placeholder as a last resort so the Default story
38
+ // still renders something visible when no content is supplied via either
39
+ // route.
40
+ const content = children !== undefined && children !== null && children !== false ? children : text !== undefined ? text : 'Korem ipsum ';
34
41
  return /*#__PURE__*/_jsx(RNText, {
35
42
  style: [textStyle, style],
36
43
  numberOfLines: numberOfLines,
37
- children: text
44
+ children: content
38
45
  });
39
46
  }
40
47
  export default Text;
@@ -165,7 +165,9 @@ export function TooltipTrigger({
165
165
  }
166
166
  export function TooltipContent({
167
167
  children,
168
- sideOffset = 4
168
+ sideOffset = 4,
169
+ gap = 4,
170
+ alignItems = 'flex-start'
169
171
  }) {
170
172
  const {
171
173
  isVisible,
@@ -390,6 +392,35 @@ export function TooltipContent({
390
392
  paddingHorizontal: paddingH,
391
393
  paddingVertical: paddingV
392
394
  };
395
+
396
+ // Vertical slot wrapper: stack arbitrary children top-to-bottom with a gap.
397
+ // Raw <Text> children still get auto-styled with the tooltip label tokens
398
+ // so the simple <TooltipContent><Text>label</Text></TooltipContent> usage
399
+ // keeps working without any changes.
400
+ const slotStyle = {
401
+ flexDirection: 'column',
402
+ alignItems,
403
+ gap
404
+ };
405
+ const renderSlotChildren = () => {
406
+ if (typeof children === 'string') {
407
+ return /*#__PURE__*/_jsx(Text, {
408
+ style: textStyle,
409
+ children: children
410
+ });
411
+ }
412
+ return /*#__PURE__*/_jsx(View, {
413
+ style: slotStyle,
414
+ children: React.Children.map(children, child => {
415
+ if (/*#__PURE__*/React.isValidElement(child) && (child.type === Text || child.type.displayName === 'Text')) {
416
+ return /*#__PURE__*/React.cloneElement(child, {
417
+ style: [textStyle, child.props.style]
418
+ });
419
+ }
420
+ return child;
421
+ })
422
+ });
423
+ };
393
424
  if (!hasMeasured) {
394
425
  return /*#__PURE__*/_jsx(Modal, {
395
426
  transparent: true,
@@ -401,19 +432,7 @@ export function TooltipContent({
401
432
  children: /*#__PURE__*/_jsx(View, {
402
433
  style: measureStyle,
403
434
  onLayout: e => setContentSize(e.nativeEvent.layout),
404
- children: typeof children === 'string' ? /*#__PURE__*/_jsx(Text, {
405
- style: textStyle,
406
- children: children
407
- }) : /*#__PURE__*/_jsx(View, {
408
- children: React.Children.map(children, child => {
409
- if (/*#__PURE__*/React.isValidElement(child) && (child.type === Text || child.type.displayName === 'Text')) {
410
- return /*#__PURE__*/React.cloneElement(child, {
411
- style: [textStyle, child.props.style]
412
- });
413
- }
414
- return child;
415
- })
416
- })
435
+ children: renderSlotChildren()
417
436
  })
418
437
  })
419
438
  });
@@ -444,19 +463,7 @@ export function TooltipContent({
444
463
  shadowRadius: 3.84,
445
464
  elevation: 5
446
465
  }],
447
- children: [typeof children === 'string' ? /*#__PURE__*/_jsx(Text, {
448
- style: textStyle,
449
- children: children
450
- }) : /*#__PURE__*/_jsx(View, {
451
- children: React.Children.map(children, child => {
452
- if (/*#__PURE__*/React.isValidElement(child) && (child.type === Text || child.type.displayName === 'Text')) {
453
- return /*#__PURE__*/React.cloneElement(child, {
454
- style: [textStyle, child.props.style]
455
- });
456
- }
457
- return child;
458
- })
459
- }), /*#__PURE__*/_jsx(View, {
466
+ children: [renderSlotChildren(), /*#__PURE__*/_jsx(View, {
460
467
  style: {
461
468
  position: 'absolute',
462
469
  left: arrowX,
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
 
3
+ export { default as AccountCard } from './AccountCard/AccountCard';
3
4
  export { default as ActionFooter } from './ActionFooter/ActionFooter';
4
5
  export { default as AppBar } from './AppBar/AppBar';
5
6
  export { default as Avatar } from './Avatar/Avatar';
@@ -7,16 +8,23 @@ export { default as AvatarGroup } from './AvatarGroup/AvatarGroup';
7
8
  export { default as Badge } from './Badge/Badge';
8
9
  export { default as BottomNav } from './BottomNav/BottomNav';
9
10
  export { default as BottomNavItem } from './BottomNavItem/BottomNavItem';
11
+ export { default as BrandChip } from './BrandChip/BrandChip';
10
12
  export { default as Button } from './Button/Button';
11
13
  export { default as Card } from './Card/Card';
12
14
  export { default as CardAdvisory } from './CardAdvisory/CardAdvisory';
15
+ export { default as CardBankAccount } from './CardBankAccount/CardBankAccount';
13
16
  export { default as Carousel } from './Carousel/Carousel';
14
17
  export { default as Checkbox } from './Checkbox/Checkbox';
18
+ export { default as CheckboxItem } from './CheckboxItem/CheckboxItem';
19
+ export { default as CheckboxGroup } from './CheckboxGroup/CheckboxGroup';
15
20
  export { default as CardFeedback } from './CardFeedback/CardFeedback';
16
21
  export { default as CardFinancialCondition } from './CardFinancialCondition/CardFinancialCondition';
22
+ export { default as CardInsight } from './CardInsight/CardInsight';
17
23
  export { default as Disclaimer } from './Disclaimer/Disclaimer';
18
24
  export { default as Divider } from './Divider/Divider';
19
25
  export { default as Drawer } from './Drawer/Drawer';
26
+ export { default as Dropdown, DropdownItem } from './Dropdown/Dropdown';
27
+ export { default as DropdownInput } from './DropdownInput/DropdownInput';
20
28
  export { default as CardCTA } from './CardCTA/CardCTA';
21
29
  export { default as DebitCard } from './DebitCard/DebitCard';
22
30
  export { default as FilterBar } from './FilterBar/FilterBar';
@@ -26,6 +34,9 @@ export { default as FormField } from './FormField/FormField';
26
34
  export { default as CircularProgressBar } from './CircularProgressBar/CircularProgressBar';
27
35
  export { default as CircularProgressBarDoted } from './CircularProgressBarDoted/CircularProgressBarDoted';
28
36
  export { default as CircularRating } from './CircularRating/CircularRating';
37
+ export { default as CoverageRing } from './CoverageRing/CoverageRing';
38
+ export { default as CoverageBarComparison } from './CoverageBarComparison/CoverageBarComparison';
39
+ export { default as MonthlyStatusGrid, CalendarGlyph } from './MonthlyStatusGrid/MonthlyStatusGrid';
29
40
  export { default as Gauge } from './Gauge/Gauge';
30
41
  export { default as HoldingsCard } from './HoldingsCard/HoldingsCard';
31
42
  export { default as HStack } from './HStack/HStack';
@@ -34,10 +45,13 @@ export { default as IconCapsule } from './IconCapsule/IconCapsule';
34
45
  export { default as Image } from './Image/Image';
35
46
  export { default as LazyList } from './LazyList/LazyList';
36
47
  export { default as LinearMeter } from './LinearMeter/LinearMeter';
48
+ export { default as LinearProgress } from './LinearProgress/LinearProgress';
37
49
  export { default as ListGroup } from './ListGroup/ListGroup';
50
+ export { default as LottieIntroBlock } from './LottieIntroBlock/LottieIntroBlock';
38
51
  export { default as ListItem } from './ListItem/ListItem';
39
52
  export { default as MediaCard } from './MediaCard/MediaCard';
40
53
  export { default as MerchantProfile } from './MerchantProfile/MerchantProfile';
54
+ export { default as MetricLegendItem } from './MetricLegendItem/MetricLegendItem';
41
55
  export { default as MoneyValue } from './MoneyValue/MoneyValue';
42
56
  export { default as NoteInput } from './NoteInput/NoteInput';
43
57
  export { default as Nudge } from './Nudge/Nudge';
@@ -52,7 +66,7 @@ export { StepLabel } from './Stepper/StepLabel';
52
66
  export { default as TextInput } from './TextInput/TextInput';
53
67
  export { default as StatusHero } from './StatusHero/StatusHero';
54
68
  export { default as ThreadHero } from './ThreadHero/ThreadHero';
55
- export { Tooltip } from './Tooltip/Tooltip';
69
+ export { Tooltip, TooltipTrigger, TooltipContent } from './Tooltip/Tooltip';
56
70
  export { default as TransactionDetails } from './TransactionDetails/TransactionDetails';
57
71
  export { default as TransactionStatus } from './TransactionStatus/TransactionStatus';
58
72
  export { default as TransactionBubble } from './TransactionBubble/TransactionBubble';
@@ -61,6 +75,7 @@ export { default as VStack } from './VStack/VStack';
61
75
  export { default as ChipGroup } from './ChipGroup/ChipGroup';
62
76
  export { default as EmptyState } from './EmptyState/EmptyState';
63
77
  export { default as Accordion } from './Accordion/Accordion';
78
+ export { default as AccordionCheckbox } from './AccordionCheckbox/AccordionCheckbox';
64
79
  export { default as ActionTile } from './ActionTile/ActionTile';
65
80
  export { default as Balance } from './Balance/Balance';
66
81
  export { default as ButtonGroup } from './ButtonGroup/ButtonGroup';
@@ -77,20 +92,31 @@ export { default as Radio } from './Radio/Radio';
77
92
  */
78
93
  export { default as RadioButton } from './RadioButton/RadioButton';
79
94
  export { default as RechargeCard } from './RechargeCard/RechargeCard';
95
+ export { default as SavingsGoalSummary } from './SavingsGoalSummary/SavingsGoalSummary';
96
+ export { default as DonutChart, DonutChartSegment } from './DonutChart/DonutChart';
97
+ export { default as DonutChartSummary } from './DonutChartSummary/DonutChartSummary';
98
+ export { default as RangeTrack } from './RangeTrack/RangeTrack';
99
+ export { default as SegmentedTrack, SegmentedTrackSegment } from './SegmentedTrack/SegmentedTrack';
80
100
  export { default as Tabs } from './Tabs/Tabs';
81
101
  export { default as TabItem } from './Tabs/TabItem';
82
102
  export { default as Toast } from './Toast/Toast';
83
103
  export { default as ToastProvider } from './Toast/ToastProvider';
84
104
  export { useToast, addToast, closeToast, closeAll } from './Toast/useToast';
85
105
  export { default as AmountInput } from './AmountInput/AmountInput';
106
+ export { default as PageHero } from './PageHero/PageHero';
86
107
  export { default as Popup } from './Popup/Popup';
87
108
  export { default as PortfolioHero } from './PortfolioHero/PortfolioHero';
109
+ export { default as PoweredByLabel } from './PoweredByLabel/PoweredByLabel';
88
110
  export { default as ProductLabel } from './ProductLabel/ProductLabel';
111
+ export { default as ProductOverview } from './ProductOverview/ProductOverview';
89
112
  export { default as ProgressBadge } from './ProgressBadge/ProgressBadge';
90
113
  export { default as SwappableAmount } from './SwappableAmount/SwappableAmount';
91
- export { default as OTP } from './OTP/OTP';
114
+ export { default as OTP, OTPResend, useOtpResend } from './OTP/OTP';
92
115
  export { default as PaymentFeedback } from './PaymentFeedback/PaymentFeedback';
93
116
  export { default as StatItem } from './StatItem/StatItem';
117
+ export { default as StatGroup } from './StatGroup/StatGroup';
118
+ export { default as StrengthIndicator } from './StrengthIndicator/StrengthIndicator';
119
+ export { default as SummaryTile } from './SummaryTile/SummaryTile';
94
120
  export { default as Text } from './Text/Text';
95
121
  export { default as SegmentedControl } from './SegmentedControl/SegmentedControl';
96
122
  export { default as Toggle } from './Toggle/Toggle';