jfs-components 0.0.61 → 0.0.63

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 (259) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/lib/commonjs/components/Accordion/Accordion.js +1 -1
  3. package/lib/commonjs/components/ActionFooter/ActionFooter.js +1 -1
  4. package/lib/commonjs/components/ActionTile/ActionTile.js +2 -1
  5. package/lib/commonjs/components/AmountInput/AmountInput.js +2 -1
  6. package/lib/commonjs/components/AppBar/AppBar.js +1 -1
  7. package/lib/commonjs/components/Avatar/Avatar.js +184 -162
  8. package/lib/commonjs/components/AvatarGroup/AvatarGroup.js +1 -1
  9. package/lib/commonjs/components/Badge/Badge.js +2 -1
  10. package/lib/commonjs/components/Balance/Balance.js +2 -1
  11. package/lib/commonjs/components/BottomNav/BottomNav.js +2 -1
  12. package/lib/commonjs/components/BottomNavItem/BottomNavItem.js +106 -86
  13. package/lib/commonjs/components/Button/Button.js +190 -93
  14. package/lib/commonjs/components/ButtonGroup/ButtonGroup.js +1 -1
  15. package/lib/commonjs/components/Card/Card.js +2 -1
  16. package/lib/commonjs/components/CardCTA/CardCTA.js +1 -1
  17. package/lib/commonjs/components/CardProviderInfo/CardProviderInfo.js +1 -1
  18. package/lib/commonjs/components/Carousel/Carousel.js +3 -2
  19. package/lib/commonjs/components/Checkbox/Checkbox.js +2 -1
  20. package/lib/commonjs/components/ChipGroup/ChipGroup.js +1 -1
  21. package/lib/commonjs/components/ChipSelect/ChipSelect.js +2 -1
  22. package/lib/commonjs/components/DebitCard/DebitCard.js +1 -1
  23. package/lib/commonjs/components/Disclaimer/Disclaimer.js +2 -1
  24. package/lib/commonjs/components/Divider/Divider.js +2 -1
  25. package/lib/commonjs/components/Drawer/Drawer.js +2 -1
  26. package/lib/commonjs/components/EmptyState/EmptyState.js +2 -1
  27. package/lib/commonjs/components/FilterBar/FilterBar.js +1 -1
  28. package/lib/commonjs/components/Form/Form.js +2 -1
  29. package/lib/commonjs/components/FormField/FormField.js +3 -2
  30. package/lib/commonjs/components/HStack/HStack.js +1 -1
  31. package/lib/commonjs/components/HoldingsCard/HoldingsCard.js +2 -1
  32. package/lib/commonjs/components/IconButton/IconButton.js +118 -128
  33. package/lib/commonjs/components/IconCapsule/IconCapsule.js +61 -57
  34. package/lib/commonjs/components/InputSearch/InputSearch.js +7 -3
  35. package/lib/commonjs/components/LazyList/LazyList.js +1 -1
  36. package/lib/commonjs/components/LinearMeter/LinearMeter.js +3 -2
  37. package/lib/commonjs/components/ListGroup/ListGroup.js +2 -3
  38. package/lib/commonjs/components/ListItem/ListItem.js +190 -142
  39. package/lib/commonjs/components/MediaCard/MediaCard.js +3 -3
  40. package/lib/commonjs/components/MerchantProfile/MerchantProfile.js +2 -1
  41. package/lib/commonjs/components/MoneyValue/MoneyValue.js +2 -1
  42. package/lib/commonjs/components/NavArrow/NavArrow.js +82 -59
  43. package/lib/commonjs/components/NoteInput/NoteInput.js +2 -1
  44. package/lib/commonjs/components/Nudge/Nudge.js +1 -1
  45. package/lib/commonjs/components/Numpad/Numpad.js +2 -1
  46. package/lib/commonjs/components/OTP/OTP.js +1 -1
  47. package/lib/commonjs/components/PaymentFeedback/PaymentFeedback.js +2 -1
  48. package/lib/commonjs/components/Popup/Popup.js +2 -1
  49. package/lib/commonjs/components/ProductLabel/ProductLabel.js +2 -1
  50. package/lib/commonjs/components/ProgressBadge/ProgressBadge.js +2 -1
  51. package/lib/commonjs/components/RadioButton/RadioButton.js +2 -1
  52. package/lib/commonjs/components/RechargeCard/RechargeCard.js +2 -1
  53. package/lib/commonjs/components/Screen/Screen.js +1 -1
  54. package/lib/commonjs/components/Section/Section.js +268 -156
  55. package/lib/commonjs/components/SegmentedControl/SegmentedControl.js +3 -2
  56. package/lib/commonjs/components/StatItem/StatItem.js +2 -1
  57. package/lib/commonjs/components/StatusHero/StatusHero.js +2 -1
  58. package/lib/commonjs/components/Stepper/Step.js +2 -1
  59. package/lib/commonjs/components/Stepper/StepLabel.js +2 -1
  60. package/lib/commonjs/components/Stepper/Stepper.js +2 -1
  61. package/lib/commonjs/components/SupportText/SupportText.js +2 -1
  62. package/lib/commonjs/components/SupportText/SupportTextIcon.js +2 -1
  63. package/lib/commonjs/components/SwappableAmount/SwappableAmount.js +2 -1
  64. package/lib/commonjs/components/Tabs/TabItem.js +2 -1
  65. package/lib/commonjs/components/Tabs/Tabs.js +2 -1
  66. package/lib/commonjs/components/Text/Text.js +2 -1
  67. package/lib/commonjs/components/TextInput/TextInput.js +2 -2
  68. package/lib/commonjs/components/ThreadHero/ThreadHero.js +2 -1
  69. package/lib/commonjs/components/Title/Title.js +2 -1
  70. package/lib/commonjs/components/Toast/Toast.js +2 -1
  71. package/lib/commonjs/components/Toggle/Toggle.js +2 -1
  72. package/lib/commonjs/components/Tooltip/Tooltip.js +2 -1
  73. package/lib/commonjs/components/TransactionBubble/TransactionBubble.js +1 -1
  74. package/lib/commonjs/components/TransactionDetails/TransactionDetails.js +2 -2
  75. package/lib/commonjs/components/TransactionStatus/TransactionStatus.js +3 -2
  76. package/lib/commonjs/components/UpiHandle/UpiHandle.js +144 -110
  77. package/lib/commonjs/components/VStack/VStack.js +1 -1
  78. package/lib/commonjs/design-tokens/JFSThemeProvider.js +2 -38
  79. package/lib/commonjs/design-tokens/figma-variables-resolver.js +21 -3
  80. package/lib/commonjs/icons/registry.js +1 -1
  81. package/lib/commonjs/utils/react-utils.js +26 -3
  82. package/lib/module/components/Accordion/Accordion.js +2 -2
  83. package/lib/module/components/ActionFooter/ActionFooter.js +2 -2
  84. package/lib/module/components/ActionTile/ActionTile.js +2 -1
  85. package/lib/module/components/AmountInput/AmountInput.js +2 -1
  86. package/lib/module/components/AppBar/AppBar.js +2 -2
  87. package/lib/module/components/Avatar/Avatar.js +184 -162
  88. package/lib/module/components/AvatarGroup/AvatarGroup.js +2 -2
  89. package/lib/module/components/Badge/Badge.js +2 -1
  90. package/lib/module/components/Balance/Balance.js +2 -1
  91. package/lib/module/components/BottomNav/BottomNav.js +2 -1
  92. package/lib/module/components/BottomNavItem/BottomNavItem.js +108 -88
  93. package/lib/module/components/Button/Button.js +192 -95
  94. package/lib/module/components/ButtonGroup/ButtonGroup.js +2 -2
  95. package/lib/module/components/Card/Card.js +2 -1
  96. package/lib/module/components/CardCTA/CardCTA.js +2 -2
  97. package/lib/module/components/CardProviderInfo/CardProviderInfo.js +2 -2
  98. package/lib/module/components/Carousel/Carousel.js +3 -2
  99. package/lib/module/components/Checkbox/Checkbox.js +2 -1
  100. package/lib/module/components/ChipGroup/ChipGroup.js +2 -2
  101. package/lib/module/components/ChipSelect/ChipSelect.js +2 -1
  102. package/lib/module/components/DebitCard/DebitCard.js +2 -2
  103. package/lib/module/components/Disclaimer/Disclaimer.js +2 -1
  104. package/lib/module/components/Divider/Divider.js +2 -1
  105. package/lib/module/components/Drawer/Drawer.js +2 -1
  106. package/lib/module/components/EmptyState/EmptyState.js +2 -1
  107. package/lib/module/components/FilterBar/FilterBar.js +2 -2
  108. package/lib/module/components/Form/Form.js +2 -1
  109. package/lib/module/components/FormField/FormField.js +3 -2
  110. package/lib/module/components/HStack/HStack.js +2 -2
  111. package/lib/module/components/HoldingsCard/HoldingsCard.js +2 -1
  112. package/lib/module/components/IconButton/IconButton.js +120 -130
  113. package/lib/module/components/IconCapsule/IconCapsule.js +60 -57
  114. package/lib/module/components/InputSearch/InputSearch.js +7 -3
  115. package/lib/module/components/LazyList/LazyList.js +2 -2
  116. package/lib/module/components/LinearMeter/LinearMeter.js +3 -2
  117. package/lib/module/components/ListGroup/ListGroup.js +3 -4
  118. package/lib/module/components/ListItem/ListItem.js +194 -146
  119. package/lib/module/components/MediaCard/MediaCard.js +4 -2
  120. package/lib/module/components/MerchantProfile/MerchantProfile.js +2 -1
  121. package/lib/module/components/MoneyValue/MoneyValue.js +2 -1
  122. package/lib/module/components/NavArrow/NavArrow.js +82 -58
  123. package/lib/module/components/NoteInput/NoteInput.js +2 -1
  124. package/lib/module/components/Nudge/Nudge.js +2 -2
  125. package/lib/module/components/Numpad/Numpad.js +2 -1
  126. package/lib/module/components/OTP/OTP.js +2 -2
  127. package/lib/module/components/PaymentFeedback/PaymentFeedback.js +2 -1
  128. package/lib/module/components/Popup/Popup.js +2 -1
  129. package/lib/module/components/ProductLabel/ProductLabel.js +2 -1
  130. package/lib/module/components/ProgressBadge/ProgressBadge.js +2 -1
  131. package/lib/module/components/RadioButton/RadioButton.js +2 -1
  132. package/lib/module/components/RechargeCard/RechargeCard.js +2 -1
  133. package/lib/module/components/Screen/Screen.js +2 -2
  134. package/lib/module/components/Section/Section.js +271 -159
  135. package/lib/module/components/SegmentedControl/SegmentedControl.js +3 -2
  136. package/lib/module/components/StatItem/StatItem.js +2 -1
  137. package/lib/module/components/StatusHero/StatusHero.js +2 -1
  138. package/lib/module/components/Stepper/Step.js +2 -1
  139. package/lib/module/components/Stepper/StepLabel.js +2 -1
  140. package/lib/module/components/Stepper/Stepper.js +2 -1
  141. package/lib/module/components/SupportText/SupportText.js +2 -1
  142. package/lib/module/components/SupportText/SupportTextIcon.js +2 -1
  143. package/lib/module/components/SwappableAmount/SwappableAmount.js +2 -1
  144. package/lib/module/components/Tabs/TabItem.js +2 -1
  145. package/lib/module/components/Tabs/Tabs.js +2 -1
  146. package/lib/module/components/Text/Text.js +2 -1
  147. package/lib/module/components/TextInput/TextInput.js +3 -3
  148. package/lib/module/components/ThreadHero/ThreadHero.js +2 -1
  149. package/lib/module/components/Title/Title.js +2 -1
  150. package/lib/module/components/Toast/Toast.js +2 -1
  151. package/lib/module/components/Toggle/Toggle.js +2 -1
  152. package/lib/module/components/Tooltip/Tooltip.js +2 -1
  153. package/lib/module/components/TransactionBubble/TransactionBubble.js +2 -2
  154. package/lib/module/components/TransactionDetails/TransactionDetails.js +3 -3
  155. package/lib/module/components/TransactionStatus/TransactionStatus.js +3 -2
  156. package/lib/module/components/UpiHandle/UpiHandle.js +147 -113
  157. package/lib/module/components/VStack/VStack.js +2 -2
  158. package/lib/module/design-tokens/JFSThemeProvider.js +2 -35
  159. package/lib/module/design-tokens/figma-variables-resolver.js +21 -3
  160. package/lib/module/icons/registry.js +1 -1
  161. package/lib/module/utils/react-utils.js +25 -3
  162. package/lib/typescript/src/components/Avatar/Avatar.d.ts +11 -17
  163. package/lib/typescript/src/components/BottomNavItem/BottomNavItem.d.ts +12 -8
  164. package/lib/typescript/src/components/Button/Button.d.ts +18 -1
  165. package/lib/typescript/src/components/IconButton/IconButton.d.ts +12 -29
  166. package/lib/typescript/src/components/IconCapsule/IconCapsule.d.ts +10 -18
  167. package/lib/typescript/src/components/InputSearch/InputSearch.d.ts +8 -3
  168. package/lib/typescript/src/components/ListItem/ListItem.d.ts +14 -1
  169. package/lib/typescript/src/components/NavArrow/NavArrow.d.ts +12 -11
  170. package/lib/typescript/src/components/Section/Section.d.ts +2 -48
  171. package/lib/typescript/src/components/UpiHandle/UpiHandle.d.ts +13 -12
  172. package/lib/typescript/src/design-tokens/JFSThemeProvider.d.ts +0 -15
  173. package/lib/typescript/src/icons/registry.d.ts +1 -1
  174. package/lib/typescript/src/utils/react-utils.d.ts +15 -0
  175. package/package.json +4 -6
  176. package/src/components/Accordion/Accordion.tsx +2 -2
  177. package/src/components/ActionFooter/ActionFooter.tsx +2 -2
  178. package/src/components/ActionTile/ActionTile.tsx +2 -1
  179. package/src/components/AmountInput/AmountInput.tsx +2 -1
  180. package/src/components/AppBar/AppBar.tsx +2 -2
  181. package/src/components/Avatar/Avatar.tsx +229 -158
  182. package/src/components/AvatarGroup/AvatarGroup.tsx +2 -2
  183. package/src/components/Badge/Badge.tsx +2 -1
  184. package/src/components/Balance/Balance.tsx +2 -1
  185. package/src/components/BottomNav/BottomNav.tsx +2 -1
  186. package/src/components/BottomNavItem/BottomNavItem.tsx +159 -88
  187. package/src/components/Button/Button.tsx +228 -101
  188. package/src/components/ButtonGroup/ButtonGroup.tsx +2 -2
  189. package/src/components/Card/Card.tsx +2 -1
  190. package/src/components/CardCTA/CardCTA.tsx +2 -2
  191. package/src/components/CardProviderInfo/CardProviderInfo.tsx +2 -2
  192. package/src/components/Carousel/Carousel.tsx +3 -2
  193. package/src/components/Checkbox/Checkbox.tsx +2 -1
  194. package/src/components/ChipGroup/ChipGroup.tsx +2 -2
  195. package/src/components/ChipSelect/ChipSelect.tsx +2 -1
  196. package/src/components/DebitCard/DebitCard.tsx +2 -2
  197. package/src/components/Disclaimer/Disclaimer.tsx +2 -1
  198. package/src/components/Divider/Divider.tsx +2 -1
  199. package/src/components/Drawer/Drawer.tsx +2 -1
  200. package/src/components/EmptyState/EmptyState.tsx +2 -1
  201. package/src/components/FilterBar/FilterBar.tsx +2 -2
  202. package/src/components/Form/Form.tsx +2 -1
  203. package/src/components/FormField/FormField.tsx +3 -2
  204. package/src/components/HStack/HStack.tsx +2 -2
  205. package/src/components/HoldingsCard/HoldingsCard.tsx +2 -1
  206. package/src/components/IconButton/IconButton.tsx +154 -126
  207. package/src/components/IconCapsule/IconCapsule.tsx +73 -54
  208. package/src/components/InputSearch/InputSearch.tsx +19 -5
  209. package/src/components/LazyList/LazyList.tsx +2 -2
  210. package/src/components/LinearMeter/LinearMeter.tsx +3 -2
  211. package/src/components/ListGroup/ListGroup.tsx +4 -5
  212. package/src/components/ListItem/ListItem.tsx +257 -187
  213. package/src/components/MediaCard/MediaCard.tsx +2 -1
  214. package/src/components/MerchantProfile/MerchantProfile.tsx +2 -1
  215. package/src/components/MoneyValue/MoneyValue.tsx +2 -1
  216. package/src/components/NavArrow/NavArrow.tsx +91 -58
  217. package/src/components/NoteInput/NoteInput.tsx +2 -1
  218. package/src/components/Nudge/Nudge.tsx +2 -2
  219. package/src/components/Numpad/Numpad.tsx +2 -1
  220. package/src/components/OTP/OTP.tsx +2 -2
  221. package/src/components/PaymentFeedback/PaymentFeedback.tsx +2 -1
  222. package/src/components/Popup/Popup.tsx +2 -1
  223. package/src/components/ProductLabel/ProductLabel.tsx +2 -1
  224. package/src/components/ProgressBadge/ProgressBadge.tsx +2 -2
  225. package/src/components/RadioButton/RadioButton.tsx +2 -1
  226. package/src/components/RechargeCard/RechargeCard.tsx +2 -1
  227. package/src/components/Screen/Screen.tsx +2 -2
  228. package/src/components/Section/Section.tsx +323 -167
  229. package/src/components/SegmentedControl/SegmentedControl.tsx +3 -2
  230. package/src/components/StatItem/StatItem.tsx +2 -1
  231. package/src/components/StatusHero/StatusHero.tsx +2 -1
  232. package/src/components/Stepper/Step.tsx +2 -1
  233. package/src/components/Stepper/StepLabel.tsx +2 -1
  234. package/src/components/Stepper/Stepper.tsx +2 -1
  235. package/src/components/SupportText/SupportText.tsx +2 -1
  236. package/src/components/SupportText/SupportTextIcon.tsx +2 -1
  237. package/src/components/SwappableAmount/SwappableAmount.tsx +2 -1
  238. package/src/components/Tabs/TabItem.tsx +2 -1
  239. package/src/components/Tabs/Tabs.tsx +2 -1
  240. package/src/components/Text/Text.tsx +2 -1
  241. package/src/components/TextInput/TextInput.tsx +3 -3
  242. package/src/components/ThreadHero/ThreadHero.tsx +2 -1
  243. package/src/components/Title/Title.tsx +2 -1
  244. package/src/components/Toast/Toast.tsx +2 -1
  245. package/src/components/Toggle/Toggle.tsx +2 -1
  246. package/src/components/Tooltip/Tooltip.tsx +2 -1
  247. package/src/components/TransactionBubble/TransactionBubble.tsx +2 -2
  248. package/src/components/TransactionDetails/TransactionDetails.tsx +3 -3
  249. package/src/components/TransactionStatus/TransactionStatus.tsx +3 -2
  250. package/src/components/UpiHandle/UpiHandle.tsx +193 -125
  251. package/src/components/VStack/VStack.tsx +2 -2
  252. package/src/design-tokens/JFSThemeProvider.tsx +1 -37
  253. package/src/design-tokens/figma-variables-resolver.ts +21 -3
  254. package/src/icons/registry.ts +1 -1
  255. package/src/utils/react-utils.ts +29 -3
  256. package/lib/typescript/App.d.ts +0 -2
  257. package/lib/typescript/index.d.ts +0 -2
  258. package/lib/typescript/metro.config.d.ts +0 -78
  259. package/lib/typescript/react-native.config.d.ts +0 -4
@@ -1,92 +1,95 @@
1
1
  "use strict";
2
2
 
3
- import React from 'react';
3
+ import React, { useMemo } from 'react';
4
4
  import { View } from 'react-native';
5
5
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
6
6
  import { useTokens } from '../../design-tokens/JFSThemeProvider';
7
+ import { EMPTY_MODES } from '../../utils/react-utils';
7
8
  import Icon from '../../icons/Icon';
8
9
  import { jsx as _jsx } from "react/jsx-runtime";
10
+ function resolveIconCapsuleTokens(modes) {
11
+ const size = getVariableByName('iconCapsule/size', modes) || 42;
12
+ const radiusRaw = getVariableByName('iconCapsule/radius', modes) || 9999;
13
+ const backgroundColor = getVariableByName('iconCapsule/background', modes) || '#cfa159';
14
+ const borderColor = getVariableByName('iconCapsule/border/color', modes) || 'rgba(255,255,255,0)';
15
+ const borderSize = getVariableByName('iconCapsule/border/size', modes) || 1;
16
+ const iconColor = getVariableByName('iconCapsule/icon/color', modes) || '#0f0d0a';
17
+ const iconSize = getVariableByName('iconCapsule/icon/size', modes) || 18;
18
+
19
+ // 9999 is the design-token sentinel for "perfect circle"
20
+ const borderRadius = radiusRaw === 9999 ? size / 2 : radiusRaw;
21
+ return {
22
+ containerStyle: {
23
+ width: size,
24
+ height: size,
25
+ borderRadius,
26
+ borderWidth: borderSize,
27
+ borderColor,
28
+ backgroundColor,
29
+ overflow: 'hidden',
30
+ alignItems: 'center',
31
+ justifyContent: 'center'
32
+ },
33
+ iconColor,
34
+ iconSize
35
+ };
36
+ }
37
+
9
38
  /**
10
39
  * IconCapsule component that displays an icon within a circular or rounded container.
11
- *
12
- * This component displays an icon (default: ic_card) within a styled capsule container.
40
+ *
13
41
  * All styling values are resolved from Figma design tokens using the provided modes.
14
- *
42
+ *
15
43
  * @component
16
44
  * @param {Object} props - Component props
17
45
  * @param {string} [props.iconName="ic_card"] - The name of the icon to display from the icon registry
18
46
  * @param {Object} [props.modes={}] - Mode configuration for design tokens (e.g., {"Appearance": "Primary"})
19
- * @param {string} [props.accessibilityLabel] - Accessibility label for screen readers. If not provided, defaults to iconName
47
+ * @param {string} [props.accessibilityLabel] - Accessibility label for screen readers
20
48
  * @param {string} [props.accessibilityRole] - Accessibility role (defaults to "image" for decorative icons)
21
- *
22
- * @example
23
- * ```jsx
24
- * // Default icon (ic_card)
25
- * <IconCapsule modes={{}} />
26
- *
27
- * // Custom icon
28
- * <IconCapsule iconName="ic_rupee" modes={{}} />
29
- *
30
- * // With appearance mode
31
- * <IconCapsule modes={{"Appearance": "Secondary"}} />
32
- *
33
- * // With accessibility label
34
- * <IconCapsule iconName="ic_card" accessibilityLabel={undefined} />
35
- * ```
49
+ *
50
+ * Performance notes:
51
+ * - All token reads collapsed into a single `useMemo([modes])`. The merged
52
+ * `(globalModes + propModes)` object is also memoized so downstream
53
+ * `getVariableByName` calls hit the resolver's per-modes-object cache.
54
+ * - Wrapped in `React.memo`; with the shared `EMPTY_MODES` default the
55
+ * common path benefits from full memoization.
36
56
  */
37
57
  function IconCapsule({
38
- iconName = "ic_card",
39
- modes: propModes = {},
40
- accessibilityLabel,
41
- accessibilityRole = "image",
58
+ iconName = 'ic_card',
59
+ modes: propModes = EMPTY_MODES,
60
+ // accessibilityLabel is accepted on the type for API back-compat but the
61
+ // component intentionally renders `accessibilityLabel={undefined}` (icons
62
+ // are decorative; the surrounding component owns the label).
63
+ accessibilityLabel: _accessibilityLabel,
64
+ accessibilityRole = 'image',
65
+ style: styleProp,
42
66
  ...rest
43
67
  }) {
44
68
  const {
45
69
  modes: globalModes
46
70
  } = useTokens();
47
- const modes = {
71
+
72
+ // Memoize the merged modes object so its identity is stable across renders
73
+ // when neither the global nor the prop modes change. This is what lets the
74
+ // resolver's WeakMap cache hit on every subsequent `getVariableByName`.
75
+ const modes = useMemo(() => globalModes === EMPTY_MODES && propModes === EMPTY_MODES ? EMPTY_MODES : {
48
76
  ...globalModes,
49
77
  ...propModes
50
- };
51
- // Resolve design tokens using the provided modes
52
- const size = getVariableByName('iconCapsule/size', modes) || 42;
53
- const radius = getVariableByName('iconCapsule/radius', modes) || 9999;
54
- const backgroundColor = getVariableByName('iconCapsule/background', modes) || '#cfa159';
55
- const borderColor = getVariableByName('iconCapsule/border/color', modes) || 'rgba(255,255,255,0)';
56
- const borderSize = getVariableByName('iconCapsule/border/size', modes) || 1;
57
- const iconColor = getVariableByName('iconCapsule/icon/color', modes) || '#0f0d0a';
58
- const iconSize = getVariableByName('iconCapsule/icon/size', modes) || 18;
59
-
60
- // Convert radius to React Native format (if 9999, use size/2 for perfect circle)
61
- const borderRadius = radius === 9999 ? size / 2 : radius;
62
-
63
- // Container style
64
- const containerStyle = {
65
- width: size,
66
- height: size,
67
- borderRadius: borderRadius,
68
- borderWidth: borderSize,
69
- borderColor: borderColor,
70
- backgroundColor: backgroundColor,
71
- overflow: 'hidden',
72
- alignItems: 'center',
73
- justifyContent: 'center'
74
- };
75
-
76
- // Generate default accessibility label from icon name if not provided
77
- const defaultAccessibilityLabel = accessibilityLabel || iconName.replace(/^ic_/, '').replace(/_/g, ' ').replace(/\b\w/g, l => l.toUpperCase());
78
+ }, [globalModes, propModes]);
79
+ const tokens = useMemo(() => resolveIconCapsuleTokens(modes), [modes]);
80
+ const composedStyle = useMemo(() => styleProp ? [tokens.containerStyle, styleProp] : tokens.containerStyle, [tokens.containerStyle, styleProp]);
78
81
  return /*#__PURE__*/_jsx(View, {
79
- style: containerStyle,
82
+ style: composedStyle,
80
83
  accessibilityRole: accessibilityRole,
81
84
  accessibilityLabel: undefined,
82
85
  ...rest,
83
86
  children: /*#__PURE__*/_jsx(Icon, {
84
87
  name: iconName,
85
- size: iconSize,
86
- color: iconColor,
88
+ size: tokens.iconSize,
89
+ color: tokens.iconColor,
87
90
  accessibilityElementsHidden: true,
88
91
  importantForAccessibility: "no"
89
92
  })
90
93
  });
91
94
  }
92
- export default IconCapsule;
95
+ export default /*#__PURE__*/React.memo(IconCapsule);
@@ -3,6 +3,7 @@
3
3
  import React, { useState } from 'react';
4
4
  import { View, Text, Pressable } from 'react-native';
5
5
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
6
+ import { EMPTY_MODES } from '../../utils/react-utils';
6
7
  import Icon from '../../icons/Icon';
7
8
  import TextInput from '../TextInput/TextInput';
8
9
 
@@ -12,7 +13,8 @@ import TextInput from '../TextInput/TextInput';
12
13
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
14
  function SupportText({
14
15
  label = "Support Text",
15
- modes = {},
16
+ iconName = "ic_info",
17
+ modes = EMPTY_MODES,
16
18
  style
17
19
  }) {
18
20
  // Resolve variables
@@ -31,7 +33,7 @@ function SupportText({
31
33
  gap: gap
32
34
  }, style],
33
35
  children: [/*#__PURE__*/_jsx(Icon, {
34
- name: "ic_info",
36
+ name: iconName,
35
37
  size: iconSize,
36
38
  color: foreground
37
39
  }), /*#__PURE__*/_jsx(Text, {
@@ -49,7 +51,8 @@ function SupportText({
49
51
  export default function InputSearch({
50
52
  supportText = true,
51
53
  supportTextLabel = "Support Text",
52
- modes = {},
54
+ supportTextIcon = "ic_info",
55
+ modes = EMPTY_MODES,
53
56
  containerStyle,
54
57
  placeholder = "Search",
55
58
  value,
@@ -130,6 +133,7 @@ export default function InputSearch({
130
133
  ...rest
131
134
  }), supportText && /*#__PURE__*/_jsx(SupportText, {
132
135
  label: supportTextLabel,
136
+ iconName: supportTextIcon,
133
137
  modes: componentModes
134
138
  })]
135
139
  });
@@ -3,7 +3,7 @@
3
3
  import React from 'react';
4
4
  import { View } from 'react-native';
5
5
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
6
- import { cloneChildrenWithModes } from '../../utils/react-utils';
6
+ import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils';
7
7
  import { jsx as _jsx } from "react/jsx-runtime";
8
8
  /**
9
9
  * LazyList component that mirrors the Figma "LazyList" component.
@@ -26,7 +26,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
26
26
  */
27
27
  function LazyList({
28
28
  listGroupsSlot,
29
- modes = {},
29
+ modes = EMPTY_MODES,
30
30
  style,
31
31
  accessibilityLabel = undefined,
32
32
  accessibilityHint,
@@ -3,11 +3,12 @@
3
3
  import React from 'react';
4
4
  import { View, Text } from 'react-native';
5
5
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
6
+ import { EMPTY_MODES } from '../../utils/react-utils';
6
7
  import MoneyValue from '../MoneyValue/MoneyValue';
7
8
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
9
  const LinearMeterLabel = ({
9
10
  children,
10
- modes = {},
11
+ modes = EMPTY_MODES,
11
12
  style,
12
13
  ...rest
13
14
  }) => {
@@ -32,7 +33,7 @@ const LinearMeterLabel = ({
32
33
  };
33
34
  const LinearMeter = ({
34
35
  value = 0,
35
- modes = {},
36
+ modes = EMPTY_MODES,
36
37
  style,
37
38
  trackStyle,
38
39
  indicatorStyle,
@@ -8,7 +8,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
8
8
  * Helper function to recursively clone children and pass modes prop to components that accept it.
9
9
  * This ensures that all child components in slots receive the modes prop from the parent.
10
10
  */
11
- import { cloneChildrenWithModes, flattenChildren } from '../../utils/react-utils';
11
+ import { EMPTY_MODES, cloneChildrenWithModes, flattenChildren } from '../../utils/react-utils';
12
12
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
13
  /**
14
14
  * ListGroup component that mirrors the Figma "List Group" component.
@@ -39,7 +39,7 @@ function ListGroup({
39
39
  label = '',
40
40
  listGroupSlot,
41
41
  children,
42
- modes = {},
42
+ modes = EMPTY_MODES,
43
43
  style,
44
44
  accessibilityLabel,
45
45
  accessibilityHint,
@@ -79,8 +79,7 @@ function ListGroup({
79
79
  // propagate modes. Both props are interchangeable; when both are provided
80
80
  // the slot items render first, followed by children.
81
81
  const rawItems = [...(listGroupSlot ? flattenChildren(listGroupSlot) : []), ...(children ? flattenChildren(children) : [])];
82
- const keyedItems = React.Children.toArray(rawItems);
83
- const processedSlot = keyedItems.length > 0 ? cloneChildrenWithModes(keyedItems, modes) : null;
82
+ const processedSlot = rawItems.length > 0 ? cloneChildrenWithModes(rawItems, modes) : null;
84
83
 
85
84
  // Use provided accessibilityLabel or fall back to label
86
85
  const defaultAccessibilityLabel = accessibilityLabel || label || "List group";