jfs-components 0.1.48 → 0.1.50

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 (63) hide show
  1. package/CHANGELOG.md +8 -1
  2. package/lib/commonjs/components/CardCTA/CardCTA.js +7 -4
  3. package/lib/commonjs/components/CardFeedback/CardFeedback.js +1 -1
  4. package/lib/commonjs/components/CategoryCard/CategoryCard.js +4 -4
  5. package/lib/commonjs/components/Checkbox/Checkbox.js +4 -6
  6. package/lib/commonjs/components/CircularProgressBarDoted/CircularProgressBarDoted.js +12 -9
  7. package/lib/commonjs/components/DonutChartSummary/DonutChartSummary.js +7 -2
  8. package/lib/commonjs/components/ProductMerchandisingCard/ProductMerchandisingCard.js +3 -1
  9. package/lib/commonjs/components/ProductOverview/ProductOverview.js +2 -2
  10. package/lib/commonjs/components/Radio/Radio.js +5 -3
  11. package/lib/commonjs/components/SavingsGoalSummary/SavingsGoalSummary.js +2 -2
  12. package/lib/commonjs/components/Section/Section.js +3 -1
  13. package/lib/commonjs/components/SegmentedControl/SegmentedControl.js +1 -1
  14. package/lib/commonjs/components/SegmentedTrack/SegmentedTrack.js +1 -1
  15. package/lib/commonjs/components/Slider/Slider.js +3 -2
  16. package/lib/commonjs/components/StatusHero/StatusHero.js +1 -1
  17. package/lib/commonjs/components/Tooltip/Tooltip.js +4 -2
  18. package/lib/commonjs/design-tokens/Coin Variables-variables-full.json +1 -1
  19. package/lib/commonjs/design-tokens/figma-modes.generated.js +38 -34
  20. package/lib/commonjs/icons/registry.js +1 -1
  21. package/lib/module/components/CardCTA/CardCTA.js +7 -4
  22. package/lib/module/components/CardFeedback/CardFeedback.js +1 -1
  23. package/lib/module/components/CategoryCard/CategoryCard.js +4 -4
  24. package/lib/module/components/Checkbox/Checkbox.js +4 -6
  25. package/lib/module/components/CircularProgressBarDoted/CircularProgressBarDoted.js +12 -9
  26. package/lib/module/components/DonutChartSummary/DonutChartSummary.js +7 -2
  27. package/lib/module/components/ProductMerchandisingCard/ProductMerchandisingCard.js +3 -1
  28. package/lib/module/components/ProductOverview/ProductOverview.js +2 -2
  29. package/lib/module/components/Radio/Radio.js +5 -3
  30. package/lib/module/components/SavingsGoalSummary/SavingsGoalSummary.js +2 -2
  31. package/lib/module/components/Section/Section.js +3 -1
  32. package/lib/module/components/SegmentedControl/SegmentedControl.js +1 -1
  33. package/lib/module/components/SegmentedTrack/SegmentedTrack.js +1 -1
  34. package/lib/module/components/Slider/Slider.js +3 -2
  35. package/lib/module/components/StatusHero/StatusHero.js +1 -1
  36. package/lib/module/components/Tooltip/Tooltip.js +4 -2
  37. package/lib/module/design-tokens/Coin Variables-variables-full.json +1 -1
  38. package/lib/module/design-tokens/figma-modes.generated.js +38 -34
  39. package/lib/module/icons/registry.js +1 -1
  40. package/lib/typescript/src/components/Section/Section.d.ts +2 -1
  41. package/lib/typescript/src/design-tokens/figma-modes.generated.d.ts +6 -2
  42. package/lib/typescript/src/icons/registry.d.ts +1 -1
  43. package/package.json +1 -1
  44. package/src/components/CardCTA/CardCTA.tsx +7 -4
  45. package/src/components/CardFeedback/CardFeedback.tsx +1 -1
  46. package/src/components/CategoryCard/CategoryCard.tsx +4 -4
  47. package/src/components/Checkbox/Checkbox.tsx +4 -6
  48. package/src/components/CircularProgressBarDoted/CircularProgressBarDoted.tsx +12 -9
  49. package/src/components/DonutChartSummary/DonutChartSummary.tsx +6 -6
  50. package/src/components/ProductMerchandisingCard/ProductMerchandisingCard.tsx +3 -1
  51. package/src/components/ProductOverview/ProductOverview.tsx +2 -2
  52. package/src/components/Radio/Radio.tsx +8 -3
  53. package/src/components/SavingsGoalSummary/SavingsGoalSummary.tsx +3 -3
  54. package/src/components/Section/Section.tsx +121 -156
  55. package/src/components/SegmentedControl/SegmentedControl.tsx +1 -1
  56. package/src/components/SegmentedTrack/SegmentedTrack.tsx +1 -2
  57. package/src/components/Slider/Slider.tsx +3 -2
  58. package/src/components/StatusHero/StatusHero.tsx +1 -1
  59. package/src/components/Tooltip/Tooltip.tsx +4 -2
  60. package/src/design-tokens/Coin Variables-variables-full.json +1 -1
  61. package/src/design-tokens/figma-modes.generated.ts +38 -34
  62. package/src/icons/registry.ts +1 -1
  63. package/D2C.md +0 -113
package/CHANGELOG.md CHANGED
@@ -4,7 +4,14 @@ All notable changes to this project are documented in this file.
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
6
 
7
- ## [0.1.48] - 2026-07-22
7
+ ## [0.1.50] - 2026-07-25
8
+
9
+ - Token resolution pass — remapped unresolved `getVariableByName` refs and bad mode keys against Figma Code Connect / Coin Variables (CardCTA, CategoryCard, Checkbox, CircularProgressBarDoted, DonutChartSummary, ProductMerchandisingCard, ProductOverview, Radio, SavingsGoalSummary, SegmentedControl, SegmentedTrack, Slider, Tooltip, StatusHero, CardFeedback).
10
+ - Coin Variables — repaired broken `nudge/radius` and Badge Semantic Intent System aliases; added `tooltip/radius` and `tooltip/maxWidth`.
11
+
12
+ ---
13
+
14
+ ## [0.1.48] - 2026-07-23
8
15
 
9
16
  - `CompareTable` (fixed-width scroll mode) — selection cards pin above the scroll surface (`stickyCards`, default `true`); accordion section titles stick under the cards and replace each other as you scroll (`stickyAccordionTitles`, default `true`); gray table-header sticky is now opt-in (`stickyHeaders` default `false`). Selection cards are square (corner radius forced to `0`).
10
17
  - `Accordion` — new `showHeader` / `showContent` props so hosts can split sticky titles from bodies in scroll layouts (used by `CompareTable`).
@@ -75,7 +75,8 @@ function CardCTA({
75
75
  const radius = (0, _figmaVariablesResolver.getVariableByName)('cardCTA/radius', modes);
76
76
  const borderSize = (0, _figmaVariablesResolver.getVariableByName)('cardCTA/border/size', modes);
77
77
  const borderColor = (0, _figmaVariablesResolver.getVariableByName)('cardCTA/border/color', modes);
78
- const leftPaddingH = (0, _figmaVariablesResolver.getVariableByName)('cardCTA/left-wrap/padding/horizontal', modes);
78
+ const leftPaddingLeft = (0, _figmaVariablesResolver.getVariableByName)('cardCTA/left-wrap/padding/left', modes);
79
+ const leftPaddingRight = (0, _figmaVariablesResolver.getVariableByName)('cardCTA/left-wrap/padding/right', modes);
79
80
  const leftPaddingV = (0, _figmaVariablesResolver.getVariableByName)('cardCTA/left-wrap/padding/vertical', modes);
80
81
  const leftGap = (0, _figmaVariablesResolver.getVariableByName)('cardCTA/left-wrap/gap', modes);
81
82
  const rightPaddingH = (0, _figmaVariablesResolver.getVariableByName)('cardCTA/right-wrap/padding/horizontal', modes);
@@ -221,7 +222,8 @@ function CardCTA({
221
222
  flexShrink: 1,
222
223
  flexBasis: 0,
223
224
  minWidth: 0,
224
- paddingHorizontal: leftPaddingH,
225
+ paddingLeft: leftPaddingLeft,
226
+ paddingRight: leftPaddingRight,
225
227
  paddingVertical: leftPaddingV,
226
228
  gap: leftGap,
227
229
  alignItems: 'flex-start',
@@ -253,7 +255,7 @@ function CardCTA({
253
255
  // space allows and can never collapse below its content.
254
256
  const iconCapsuleModes = {
255
257
  ...modes,
256
- 'IconCapsule / Size': 'M',
258
+ 'Icon Capsule Size': 'M',
257
259
  Emphasis: 'Medium',
258
260
  AppearanceBrand: 'Secondary'
259
261
  };
@@ -312,7 +314,8 @@ function CardCTA({
312
314
  };
313
315
  const sipWrapStyle = {
314
316
  width: '100%',
315
- paddingHorizontal: leftPaddingH,
317
+ paddingLeft: leftPaddingLeft,
318
+ paddingRight: leftPaddingRight,
316
319
  paddingVertical: leftPaddingV,
317
320
  gap: leftGap,
318
321
  alignItems: 'flex-start',
@@ -35,7 +35,7 @@ function CardFeedback({
35
35
  accessibilityLabel
36
36
  }) {
37
37
  const modes = {
38
- 'Appearance.System': 'positive',
38
+ 'AppearanceSystem': 'positive',
39
39
  'Context': 'Nudge&Alert',
40
40
  'Semantic Intent': 'System',
41
41
  ...propModes
@@ -62,10 +62,10 @@ function resolveCategoryCardTokens(modes, active) {
62
62
  const backgroundColor = active ? activeBackground : idleBackground;
63
63
  const imageSize = toNumber((0, _figmaVariablesResolver.getVariableByName)('cardTab/image/width', resolvedModes), 36);
64
64
  const imageRadius = toNumber((0, _figmaVariablesResolver.getVariableByName)('image/radius', resolvedModes), 0);
65
- const fontFamily = (0, _figmaVariablesResolver.getVariableByName)('cardTab/label/fontFamily', resolvedModes) ?? 'JioType Var';
66
- const fontSize = toNumber((0, _figmaVariablesResolver.getVariableByName)('cardTab/label/fontSize', resolvedModes), 12);
67
- const lineHeight = toNumber((0, _figmaVariablesResolver.getVariableByName)('cardTab/label/lineHeight', resolvedModes), Math.round(fontSize * 1.3));
68
- const fontWeight = toFontWeight((0, _figmaVariablesResolver.getVariableByName)('cardTab/label/fontWeight', resolvedModes), '500');
65
+ const fontFamily = (0, _figmaVariablesResolver.getVariableByName)('label/fontFamily', resolvedModes) ?? 'JioType Var';
66
+ const fontSize = toNumber((0, _figmaVariablesResolver.getVariableByName)('label/fontSize', resolvedModes), 12);
67
+ const lineHeight = toNumber((0, _figmaVariablesResolver.getVariableByName)('label/lineHeight', resolvedModes), Math.round(fontSize * 1.3));
68
+ const fontWeight = toFontWeight((0, _figmaVariablesResolver.getVariableByName)('label/fontWeight', resolvedModes), '500');
69
69
  const labelColor = (0, _figmaVariablesResolver.getVariableByName)('cardTab/label/color', resolvedModes) ?? '#000000';
70
70
  return {
71
71
  containerStyle: {
@@ -107,8 +107,8 @@ const Checkbox = /*#__PURE__*/(0, _react.forwardRef)(function Checkbox({
107
107
  const idleStroke = (0, _figmaVariablesResolver.getVariableByName)('checkbox/idle/stroke/color', modes) ?? '#666666';
108
108
  const hoverFill = (0, _figmaVariablesResolver.getVariableByName)('checkbox/hover/fill/color', modes) ?? 'rgba(0,0,0,0.1)';
109
109
  const hoverStroke = (0, _figmaVariablesResolver.getVariableByName)('checkbox/hover/stroke/color', modes) ?? '#666666';
110
- const hoverRing = (0, _figmaVariablesResolver.getVariableByName)('checkbox/hoverRing', modes) ?? 4;
111
- const hoverShadow = (0, _figmaVariablesResolver.getVariableByName)('hover/boxShadow', modes) ?? 'rgba(0,0,0,0.1)';
110
+ const hoverSpread = (0, _figmaVariablesResolver.getVariableByName)('checkbox/hover/spread/effect1', modes) ?? 4;
111
+ const hoverShadow = (0, _figmaVariablesResolver.getVariableByName)('checkbox/hover/shadow/color', modes) ?? 'rgba(0,0,0,0.1)';
112
112
  const selectedFill = (0, _figmaVariablesResolver.getVariableByName)('checkbox/selected/fill/color', modes) ?? '#cea15a';
113
113
  const selectedStroke = (0, _figmaVariablesResolver.getVariableByName)('checkbox/selected/stroke/color', modes) ?? '#0d0d0d';
114
114
  const selectedMarkColor = (0, _figmaVariablesResolver.getVariableByName)('checkbox/selected/mark/color', modes) ?? '#0f0d0a';
@@ -120,8 +120,6 @@ const Checkbox = /*#__PURE__*/(0, _react.forwardRef)(function Checkbox({
120
120
  const disabledActiveBg = (0, _figmaVariablesResolver.getVariableByName)('checkbox/disabledActive/background/color', modes) ?? '#f6d19a';
121
121
  const disabledActiveBorder = (0, _figmaVariablesResolver.getVariableByName)('checkbox/disabledActive/border/color', modes) ?? '#f6d19a';
122
122
  const disabledActiveMark = (0, _figmaVariablesResolver.getVariableByName)('checkbox/disabledActive/mark/color', modes) ?? '#474d54';
123
- const selectedHoverShadow = (0, _figmaVariablesResolver.getVariableByName)('selected/hover/boxShadow', modes) ?? 'rgba(0,0,0,0.1)';
124
- const hoverShadowSize = (0, _figmaVariablesResolver.getVariableByName)('hover/boxShadow/size', modes) ?? 4;
125
123
  const handlePress = (0, _react.useCallback)(() => {
126
124
  if (disabled) return;
127
125
  const next = !isChecked;
@@ -166,7 +164,7 @@ const Checkbox = /*#__PURE__*/(0, _react.forwardRef)(function Checkbox({
166
164
  ...base,
167
165
  backgroundColor: selectedFill,
168
166
  borderColor: selectedStroke,
169
- ...(0, _shadow.boxShadow)(`0px 0px 0px ${hoverShadowSize}px ${selectedHoverShadow}`)
167
+ ...(0, _shadow.boxShadow)(`0px 0px 0px ${hoverSpread}px ${hoverShadow}`)
170
168
  };
171
169
  }
172
170
  if (isChecked) {
@@ -189,7 +187,7 @@ const Checkbox = /*#__PURE__*/(0, _react.forwardRef)(function Checkbox({
189
187
  ...base,
190
188
  backgroundColor: hoverFill,
191
189
  borderColor: hoverStroke,
192
- ...(0, _shadow.boxShadow)(`0px 0px 0px ${hoverRing}px ${hoverShadow}`)
190
+ ...(0, _shadow.boxShadow)(`0px 0px 0px ${hoverSpread}px ${hoverShadow}`)
193
191
  };
194
192
  }
195
193
  return {
@@ -87,18 +87,21 @@ function CircularProgressBarDoted({
87
87
  const scoreTierWidth = toNumber((0, _figmaVariablesResolver.getVariableByName)('circularProgressBarDoted/scoreTier/width', modes), 116);
88
88
  const scoreTrendGap = toNumber((0, _figmaVariablesResolver.getVariableByName)('circularProgressBarDoted/scoreTrend/gap', modes), 2);
89
89
  const scoreTrendHeight = toNumber((0, _figmaVariablesResolver.getVariableByName)('circularProgressBarDoted/scoreTrend/height', modes), 24);
90
- const typographyFontFamily = (0, _figmaVariablesResolver.getVariableByName)('Typography/Font Family', modes);
91
90
  const labelColor = (0, _figmaVariablesResolver.getVariableByName)('circularProgressBarDoted/label/color', modes);
92
- const labelFontSize = toNumber((0, _figmaVariablesResolver.getVariableByName)('Typography/Size/Body/XS', modes), 12);
93
- const labelFontWeight = toFontWeight((0, _figmaVariablesResolver.getVariableByName)('Typography/Font Weight/Body Low (Regular)', modes), '400');
91
+ const labelFontSize = toNumber((0, _figmaVariablesResolver.getVariableByName)('circularProgressBarDoted/label/fontSize', modes), 12);
92
+ const labelFontFamily = (0, _figmaVariablesResolver.getVariableByName)('circularProgressBarDoted/label/fontFamily', modes);
93
+ const labelLineHeight = toNumber((0, _figmaVariablesResolver.getVariableByName)('circularProgressBarDoted/label/lineHeight', modes), 15.6);
94
+ const labelFontWeight = toFontWeight((0, _figmaVariablesResolver.getVariableByName)('circularProgressBarDoted/label/fontWeight', modes), '400');
94
95
  const scoreColor = (0, _figmaVariablesResolver.getVariableByName)('circularProgressBarDoted/scoreLabel/color', modes);
95
96
  const scoreFontSize = toNumber((0, _figmaVariablesResolver.getVariableByName)('circularProgressBarDoted/scoreLabel/fontSize', modes), 56);
96
97
  const scoreFontFamily = (0, _figmaVariablesResolver.getVariableByName)('circularProgressBarDoted/scoreLabel/fontFamily', modes);
97
98
  const scoreLineHeight = toNumber((0, _figmaVariablesResolver.getVariableByName)('circularProgressBarDoted/scoreLabel/lineHeight', modes), 56);
98
99
  const scoreFontWeight = toFontWeight((0, _figmaVariablesResolver.getVariableByName)('circularProgressBarDoted/scoreLabel/fontWeight', modes), '900');
99
100
  const tierColor = (0, _figmaVariablesResolver.getVariableByName)('circularProgressBarDoted/tierLabel/color', modes);
100
- const tierFontSize = toNumber((0, _figmaVariablesResolver.getVariableByName)('Typography/Size/Body/M', modes), 16);
101
- const tierFontWeight = toFontWeight((0, _figmaVariablesResolver.getVariableByName)('Typography/Font Weight/Body High', modes), '700');
101
+ const tierFontSize = toNumber((0, _figmaVariablesResolver.getVariableByName)('circularProgressBarDoted/tierLabel/fontSize', modes), 16);
102
+ const tierFontFamily = (0, _figmaVariablesResolver.getVariableByName)('circularProgressBarDoted/tierLabel/fontFamily', modes);
103
+ const tierLineHeight = toNumber((0, _figmaVariablesResolver.getVariableByName)('circularProgressBarDoted/tierLabel/lineHeight', modes), 20.8);
104
+ const tierFontWeight = toFontWeight((0, _figmaVariablesResolver.getVariableByName)('circularProgressBarDoted/tierLabel/fontWeight', modes), '700');
102
105
  const iconColor = (0, _figmaVariablesResolver.getVariableByName)('circularProgressBarDoted/icon/color', modes);
103
106
  const iconSize = toNumber((0, _figmaVariablesResolver.getVariableByName)('circularProgressBarDoted/icon/size', modes), 24);
104
107
  const dots = (0, _react.useMemo)(() => Array.from({
@@ -159,10 +162,10 @@ function CircularProgressBarDoted({
159
162
  };
160
163
  const computedLabelStyle = {
161
164
  color: labelColor,
162
- fontFamily: typographyFontFamily,
165
+ fontFamily: labelFontFamily,
163
166
  fontSize: labelFontSize,
164
167
  fontWeight: labelFontWeight,
165
- lineHeight: labelFontSize * 1.3,
168
+ lineHeight: labelLineHeight,
166
169
  textAlign: 'center'
167
170
  };
168
171
  const computedScoreLabelStyle = {
@@ -175,10 +178,10 @@ function CircularProgressBarDoted({
175
178
  };
176
179
  const computedTierLabelStyle = {
177
180
  color: tierColor,
178
- fontFamily: typographyFontFamily,
181
+ fontFamily: tierFontFamily,
179
182
  fontSize: tierFontSize,
180
183
  fontWeight: tierFontWeight,
181
- lineHeight: tierFontSize * 1.3,
184
+ lineHeight: tierLineHeight,
182
185
  textAlign: 'center'
183
186
  };
184
187
  const resolvedScoreLabel = String(Math.round(normalizedValue));
@@ -92,8 +92,13 @@ function DonutChartSummary({
92
92
  ...globalModes,
93
93
  ...propModes
94
94
  };
95
- const gap = (0, _figmaVariablesResolver.getVariableByName)('donutChartSummary/gap', modes) ?? 16;
96
- const legendGap = (0, _figmaVariablesResolver.getVariableByName)('donutChartSummary/legend/gap', modes) ?? 8;
95
+
96
+ // Figma DonutChartSummary (4203:51713) does not expose component-level
97
+ // gap variables — layout uses unbound 16px (donut→legend) and 8px
98
+ // (legend rows). Nested `textWrap/gap` / `metricLegendItem/gap` belong
99
+ // to child components and are not substitutes.
100
+ const gap = 16;
101
+ const legendGap = 8;
97
102
  const resolvedItems = items && items.length > 0 ? items : DEFAULT_ITEMS;
98
103
  const segments = resolvedItems.map((item, index) => ({
99
104
  key: item.key ?? `segment-${index}`,
@@ -334,7 +334,9 @@ function resolveTokens(modes) {
334
334
  const titleColor = asStr((0, _figmaVariablesResolver.getVariableByName)('productMerchandisingcard/footer/title/font/color', modes), '#ffffff');
335
335
  const titleSize = asNum((0, _figmaVariablesResolver.getVariableByName)('productMerchandisingcard/footer/title/fontsize', modes), 14);
336
336
  const titleFamily = asStr((0, _figmaVariablesResolver.getVariableByName)('productMerchandisingcard/footer/title/fontfamily', modes), 'JioType Var');
337
- const titleWeight = asStr((0, _figmaVariablesResolver.getVariableByName)('productMerchandisingcard/footer/title/fontweight', modes), '700');
337
+ // No `productMerchandisingcard/footer/title/fontweight` in Coin Variables (Figma
338
+ // binds 700). `typography/title/fontWeight/high` is 800; use body/high (=700).
339
+ const titleWeight = asStr((0, _figmaVariablesResolver.getVariableByName)('typography/body/fontWeight/high', modes), '700');
338
340
  const subtitleColor = asStr((0, _figmaVariablesResolver.getVariableByName)('productMerchandisingcard/footer/subtitle/font/color', modes), '#c5bcb5');
339
341
  const subtitleSize = asNum((0, _figmaVariablesResolver.getVariableByName)('productMerchandisingcard/footer/subtitle/fontsize', modes), 12);
340
342
  const subtitleFamily = asStr((0, _figmaVariablesResolver.getVariableByName)('productMerchandisingcard/footer/subtitle/fontfamily', modes), 'JioType Var');
@@ -35,12 +35,12 @@ const ProductOverview = ({
35
35
  const padding = (0, _figmaVariablesResolver.getVariableByName)('productOverview/padding', modes) ?? 24;
36
36
  const gap = (0, _figmaVariablesResolver.getVariableByName)('productOverview/gap', modes) ?? 12;
37
37
  const background = (0, _figmaVariablesResolver.getVariableByName)('productOverview/background', modes) ?? '#ffffff';
38
- const productNameColor = (0, _figmaVariablesResolver.getVariableByName)('productOverview/productName/color', modes) ?? '#0d0d0f';
38
+ const productNameColor = (0, _figmaVariablesResolver.getVariableByName)('text/appearance/high/color', modes) ?? '#0d0d0f';
39
39
  const productNameFontFamily = (0, _figmaVariablesResolver.getVariableByName)('productOverview/productName/fontFamily', modes) ?? 'JioType Var';
40
40
  const productNameFontSize = (0, _figmaVariablesResolver.getVariableByName)('productOverview/productName/fontSize', modes) ?? 26;
41
41
  const productNameFontWeight = (0, _figmaVariablesResolver.getVariableByName)('productOverview/productName/fontWeight', modes) ?? 900;
42
42
  const productNameLineHeight = (0, _figmaVariablesResolver.getVariableByName)('productOverview/productName/lineHeight', modes) ?? 26;
43
- const descriptionColor = (0, _figmaVariablesResolver.getVariableByName)('productOverview/description/color', modes) ?? '#1a1c1f';
43
+ const descriptionColor = (0, _figmaVariablesResolver.getVariableByName)('text/appearance/medium/color', modes) ?? '#1a1c1f';
44
44
  const descriptionFontFamily = (0, _figmaVariablesResolver.getVariableByName)('productOverview/description/fontFamily', modes) ?? 'JioType Var';
45
45
  const descriptionFontSize = (0, _figmaVariablesResolver.getVariableByName)('productOverview/description/fontSize', modes) ?? 14;
46
46
  const descriptionFontWeight = (0, _figmaVariablesResolver.getVariableByName)('productOverview/description/fontWeight', modes) ?? 500;
@@ -86,7 +86,9 @@ const Radio = exports.Radio = /*#__PURE__*/(0, _react.forwardRef)(function Radio
86
86
  }
87
87
 
88
88
  // Border Color
89
- let borderColorVar = `${prefix}/border/color`;
89
+ // Coin Variables has no `radio/focus/border/color` — focus indication is
90
+ // the yellow boxShadow ring; stroke reuses the published idle border.
91
+ let borderColorVar = visualState === 'focus' && !selected ? 'radio/idle/border/color' : `${prefix}/border/color`;
90
92
 
91
93
  // Border Width
92
94
  let borderWidthVar = `${prefix}/border/size`;
@@ -144,7 +146,6 @@ const Radio = exports.Radio = /*#__PURE__*/(0, _react.forwardRef)(function Radio
144
146
  (0, _figmaVariablesResolver.getVariableByName)('radio/selector/size');
145
147
  (0, _figmaVariablesResolver.getVariableByName)('radio/width');
146
148
  (0, _figmaVariablesResolver.getVariableByName)('radio/height');
147
- (0, _figmaVariablesResolver.getVariableByName)('radio/background/color');
148
149
  (0, _figmaVariablesResolver.getVariableByName)('radio/hover/background/color');
149
150
  (0, _figmaVariablesResolver.getVariableByName)('radio/hover/border/color');
150
151
  (0, _figmaVariablesResolver.getVariableByName)('radio/hover/boxShadow/size');
@@ -158,13 +159,14 @@ const Radio = exports.Radio = /*#__PURE__*/(0, _react.forwardRef)(function Radio
158
159
  (0, _figmaVariablesResolver.getVariableByName)('radio/hoverSelected/shadow/color');
159
160
  (0, _figmaVariablesResolver.getVariableByName)('radio/hoverSelected/selector/background/color');
160
161
  (0, _figmaVariablesResolver.getVariableByName)('radio/focus/background/color');
161
- (0, _figmaVariablesResolver.getVariableByName)('radio/focus/border/color');
162
162
  (0, _figmaVariablesResolver.getVariableByName)('radio/focus/border/size');
163
163
  (0, _figmaVariablesResolver.getVariableByName)('radio/focus/boxShadow/size');
164
164
  (0, _figmaVariablesResolver.getVariableByName)('radio/focus/shadow/color');
165
165
  (0, _figmaVariablesResolver.getVariableByName)('radio/focusSelected/background/color');
166
+ (0, _figmaVariablesResolver.getVariableByName)('radio/focusSelected/border/color');
166
167
  (0, _figmaVariablesResolver.getVariableByName)('radio/focusSelected/selector/background/color');
167
168
  (0, _figmaVariablesResolver.getVariableByName)('radio/focusSelected/border/size');
169
+ (0, _figmaVariablesResolver.getVariableByName)('radio/focusSelected/shadow/color');
168
170
  (0, _figmaVariablesResolver.getVariableByName)('radio/disabled/radio/disabled/border/size');
169
171
  (0, _figmaVariablesResolver.getVariableByName)('radio/disabled/background/color');
170
172
  (0, _figmaVariablesResolver.getVariableByName)('radio/disabled/border/color');
@@ -129,7 +129,7 @@ function SavingsGoalSummary({
129
129
  // ~1.2x so descenders never clip on native (same guard `Title` uses).
130
130
  const valueLineHeight = Math.max(valueRawLineHeight, Math.ceil(valueFontSize * 1.2));
131
131
  const valueFontWeight = String((0, _figmaVariablesResolver.getVariableByName)('savingsGoalSummary/value/fontWeight', mergedModes) ?? 900);
132
- const valueColor = (0, _figmaVariablesResolver.getVariableByName)('savingsGoalSummary/value/color', mergedModes) ?? '#0d0d0f';
132
+ const valueColor = (0, _figmaVariablesResolver.getVariableByName)('text/appearance/high/color', mergedModes) ?? '#0d0d0f';
133
133
 
134
134
  // Caption ("Credit usage") typography — `savingsGoalSummary/label/*`
135
135
  // (Figma 12 / 400). Only rendered when a `label` is supplied.
@@ -137,7 +137,7 @@ function SavingsGoalSummary({
137
137
  const labelFontFamily = (0, _figmaVariablesResolver.getVariableByName)('savingsGoalSummary/label/fontFamily', mergedModes) ?? 'JioType Var';
138
138
  const labelLineHeight = (0, _figmaVariablesResolver.getVariableByName)('savingsGoalSummary/label/lineHeight', mergedModes) ?? 16;
139
139
  const labelFontWeight = String((0, _figmaVariablesResolver.getVariableByName)('savingsGoalSummary/label/fontWeight', mergedModes) ?? 400);
140
- const labelColor = (0, _figmaVariablesResolver.getVariableByName)('savingsGoalSummary/label/color', mergedModes) ?? '#0d0d0f';
140
+ const labelColor = (0, _figmaVariablesResolver.getVariableByName)('text/appearance/medium/color', mergedModes) ?? '#1a1c1f';
141
141
  const labelNode = label == null || label === false ? null : typeof label === 'string' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
142
142
  style: [{
143
143
  color: labelColor,
@@ -546,6 +546,7 @@ function SectionSlot({
546
546
  * @param {Object} props
547
547
  * @param {React.ReactNode} [props.navSlot] - Optional custom slot for navigation items (Figma Slot "Nav wrap")
548
548
  * @param {React.ReactNode} [props.upiSlot] - Optional custom slot for UPI handles (Figma Slot "UPI wrap")
549
+ * @param {boolean} [props.upi=true] - Toggles the UPI wrap (Figma boolean property "upi")
549
550
  * @param {Object} [props.modes={}] - Modes object passed to `getVariableByName` for all design tokens
550
551
  * @param {Object} [props.style] - Optional container style overrides
551
552
  * @param {string} [props.accessibilityLabel] - Accessibility label for the section
@@ -558,6 +559,7 @@ const sectionBentoUpiRowStyle = {
558
559
  function SectionBento({
559
560
  navSlot,
560
561
  upiSlot,
562
+ upi = true,
561
563
  modes = _reactUtils.EMPTY_MODES,
562
564
  style,
563
565
  // Same rationale as Section: accepted on the type but unused internally.
@@ -648,7 +650,7 @@ function SectionBento({
648
650
  animateExtrasFromIndex: collapsedCount,
649
651
  animateContainerLayout: true
650
652
  } : null)
651
- }), processedUpiSlot && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
653
+ }), upi && processedUpiSlot && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
652
654
  style: sectionBentoUpiRowStyle,
653
655
  children: processedUpiSlot
654
656
  })]
@@ -109,7 +109,7 @@ function SegmentedControl({
109
109
  }, [isControlled, onSelectionChange]);
110
110
  const gap = (0, _figmaVariablesResolver.getVariableByName)('segmentedControl/gap', modes) ?? 8;
111
111
  const background = (0, _figmaVariablesResolver.getVariableByName)('segmentedControl/background', modes) ?? '#f6f3ff';
112
- const radius = (0, _figmaVariablesResolver.getVariableByName)('segmentedControl/radius', modes) ?? 24;
112
+ const radius = (0, _figmaVariablesResolver.getVariableByName)('segment/radius', modes) ?? 20;
113
113
  const containerStyle = {
114
114
  flexDirection: 'row',
115
115
  alignItems: 'center',
@@ -96,7 +96,7 @@ function SegmentedTrack({
96
96
  ...propModes
97
97
  };
98
98
  const trackHeight = (0, _figmaVariablesResolver.getVariableByName)('segmentedTrack/height', modes) ?? 24;
99
- const trackRadius = (0, _figmaVariablesResolver.getVariableByName)('segmentedTrack/radius', modes) ?? 999;
99
+ const trackRadius = trackHeight / 2;
100
100
  const renderedSegments = renderSegments({
101
101
  segments,
102
102
  children,
@@ -391,8 +391,9 @@ function resolveTokens(modes) {
391
391
  const tooltipBackground = asStr((0, _figmaVariablesResolver.getVariableByName)('tooltip/background', modes), '#0f0d0a');
392
392
  const tooltipPaddingH = asNum((0, _figmaVariablesResolver.getVariableByName)('tooltip/padding/horizontal', modes), 12);
393
393
  const tooltipPaddingV = asNum((0, _figmaVariablesResolver.getVariableByName)('tooltip/padding/vertical', modes), 8);
394
- const tooltipRadius = asNum((0, _figmaVariablesResolver.getVariableByName)('radius', modes), 8);
395
- const tooltipMaxWidth = asNum((0, _figmaVariablesResolver.getVariableByName)('maxWidth', modes), 280);
394
+ // Not yet in Coin Variables export (Figma still binds bare local radius/maxWidth).
395
+ const tooltipRadius = asNum((0, _figmaVariablesResolver.getVariableByName)('tooltip/radius', modes), 8);
396
+ const tooltipMaxWidth = asNum((0, _figmaVariablesResolver.getVariableByName)('tooltip/maxWidth', modes), 280);
396
397
  const tipWidth = asNum((0, _figmaVariablesResolver.getVariableByName)('tooltip/tipItem/width', modes), 16);
397
398
  const tipHeight = asNum((0, _figmaVariablesResolver.getVariableByName)('tooltip/tipItem/height', modes), 8);
398
399
  const tooltipLabelColor = asStr((0, _figmaVariablesResolver.getVariableByName)('tooltip/label/color', modes), '#ffffff');
@@ -129,7 +129,7 @@ function StatusHero({
129
129
  currency: currency,
130
130
  modes: {
131
131
  ...modes,
132
- Context3: 'Balance'
132
+ Context3: 'Balance & Cards'
133
133
  }
134
134
  })]
135
135
  });
@@ -195,8 +195,10 @@ function TooltipContent({
195
195
  const bgColor = (0, _figmaVariablesResolver.getVariableByName)('tooltip/background', modes);
196
196
  const paddingH = Number((0, _figmaVariablesResolver.getVariableByName)('tooltip/padding/horizontal', modes));
197
197
  const paddingV = Number((0, _figmaVariablesResolver.getVariableByName)('tooltip/padding/vertical', modes));
198
- const radius = Number((0, _figmaVariablesResolver.getVariableByName)('radius', modes));
199
- const maxWidthToken = Number((0, _figmaVariablesResolver.getVariableByName)('maxWidth', modes));
198
+ // Figma still binds bare local radius/maxWidth; published names are tooltip/*.
199
+ // Not yet in Coin Variables export — fall back to Figma values (8 / 280).
200
+ const radius = Number((0, _figmaVariablesResolver.getVariableByName)('tooltip/radius', modes) ?? 8);
201
+ const maxWidthToken = Number((0, _figmaVariablesResolver.getVariableByName)('tooltip/maxWidth', modes) ?? 280);
200
202
  const arrowWidth = Number((0, _figmaVariablesResolver.getVariableByName)('tooltip/tipItem/width', modes));
201
203
  const arrowHeight = Number((0, _figmaVariablesResolver.getVariableByName)('tooltip/tipItem/height', modes));
202
204
  const labelColor = (0, _figmaVariablesResolver.getVariableByName)('tooltip/label/color', modes);