@coinbase/cds-mobile 8.61.0 → 8.62.1

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 (236) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dts/accordion/Accordion.d.ts +1 -9
  3. package/dts/accordion/Accordion.d.ts.map +1 -1
  4. package/dts/alpha/combobox/Combobox.d.ts.map +1 -1
  5. package/dts/alpha/select/Select.d.ts.map +1 -1
  6. package/dts/alpha/select-chip/SelectChip.d.ts.map +1 -1
  7. package/dts/alpha/tabbed-chips/TabbedChips.d.ts.map +1 -1
  8. package/dts/banner/Banner.d.ts.map +1 -1
  9. package/dts/buttons/AvatarButton.d.ts +6 -3
  10. package/dts/buttons/AvatarButton.d.ts.map +1 -1
  11. package/dts/buttons/Button.d.ts.map +1 -1
  12. package/dts/buttons/ButtonGroup.d.ts +3 -1
  13. package/dts/buttons/ButtonGroup.d.ts.map +1 -1
  14. package/dts/buttons/IconButton.d.ts.map +1 -1
  15. package/dts/buttons/IconCounterButton.d.ts.map +1 -1
  16. package/dts/buttons/SlideButton.d.ts.map +1 -1
  17. package/dts/cards/LikeButton.d.ts.map +1 -1
  18. package/dts/carousel/Carousel.d.ts.map +1 -1
  19. package/dts/cells/Cell.d.ts.map +1 -1
  20. package/dts/cells/ListCell.d.ts.map +1 -1
  21. package/dts/cells/ListCellFallback.d.ts.map +1 -1
  22. package/dts/chips/Chip.d.ts.map +1 -1
  23. package/dts/chips/ChipProps.d.ts +10 -8
  24. package/dts/chips/ChipProps.d.ts.map +1 -1
  25. package/dts/chips/InputChip.d.ts.map +1 -1
  26. package/dts/chips/MediaChip.d.ts +3 -2
  27. package/dts/chips/MediaChip.d.ts.map +1 -1
  28. package/dts/chips/TabbedChips.d.ts.map +1 -1
  29. package/dts/coachmark/Coachmark.d.ts.map +1 -1
  30. package/dts/collapsible/Collapsible.d.ts.map +1 -1
  31. package/dts/controls/Checkbox.d.ts.map +1 -1
  32. package/dts/controls/CheckboxCell.d.ts.map +1 -1
  33. package/dts/controls/Control.d.ts.map +1 -1
  34. package/dts/controls/ControlGroup.d.ts +13 -4
  35. package/dts/controls/ControlGroup.d.ts.map +1 -1
  36. package/dts/controls/InputStack.d.ts.map +1 -1
  37. package/dts/controls/Radio.d.ts.map +1 -1
  38. package/dts/controls/RadioCell.d.ts.map +1 -1
  39. package/dts/controls/SearchInput.d.ts.map +1 -1
  40. package/dts/controls/SelectOption.d.ts +3 -1
  41. package/dts/controls/SelectOption.d.ts.map +1 -1
  42. package/dts/controls/Switch.d.ts.map +1 -1
  43. package/dts/controls/TextInput.d.ts.map +1 -1
  44. package/dts/core/componentConfig.d.ts +166 -0
  45. package/dts/core/componentConfig.d.ts.map +1 -0
  46. package/dts/dates/Calendar.d.ts.map +1 -1
  47. package/dts/dates/DateInput.d.ts.map +1 -1
  48. package/dts/dates/DatePicker.d.ts.map +1 -1
  49. package/dts/dots/DotCount.d.ts +1 -11
  50. package/dts/dots/DotCount.d.ts.map +1 -1
  51. package/dts/dots/DotStatusColor.d.ts +1 -8
  52. package/dts/dots/DotStatusColor.d.ts.map +1 -1
  53. package/dts/dots/DotSymbol.d.ts +1 -17
  54. package/dts/dots/DotSymbol.d.ts.map +1 -1
  55. package/dts/hooks/useComponentConfig.d.ts +22 -0
  56. package/dts/hooks/useComponentConfig.d.ts.map +1 -0
  57. package/dts/icons/Icon.d.ts +11 -1
  58. package/dts/icons/Icon.d.ts.map +1 -1
  59. package/dts/index.d.ts +2 -0
  60. package/dts/index.d.ts.map +1 -1
  61. package/dts/layout/Divider.d.ts +3 -1
  62. package/dts/layout/Divider.d.ts.map +1 -1
  63. package/dts/layout/Fallback.d.ts +3 -1
  64. package/dts/layout/Fallback.d.ts.map +1 -1
  65. package/dts/media/Avatar.d.ts +1 -14
  66. package/dts/media/Avatar.d.ts.map +1 -1
  67. package/dts/media/RemoteImage.d.ts.map +1 -1
  68. package/dts/media/RemoteImageGroup.d.ts +3 -10
  69. package/dts/media/RemoteImageGroup.d.ts.map +1 -1
  70. package/dts/navigation/BrowserBar.d.ts +5 -14
  71. package/dts/navigation/BrowserBar.d.ts.map +1 -1
  72. package/dts/navigation/NavigationTitle.d.ts +4 -7
  73. package/dts/navigation/NavigationTitle.d.ts.map +1 -1
  74. package/dts/navigation/NavigationTitleSelect.d.ts +5 -11
  75. package/dts/navigation/NavigationTitleSelect.d.ts.map +1 -1
  76. package/dts/navigation/TopNavBar.d.ts +3 -13
  77. package/dts/navigation/TopNavBar.d.ts.map +1 -1
  78. package/dts/numbers/RollingNumber/RollingNumber.d.ts.map +1 -1
  79. package/dts/numpad/Numpad.d.ts +41 -38
  80. package/dts/numpad/Numpad.d.ts.map +1 -1
  81. package/dts/overlays/Alert.d.ts.map +1 -1
  82. package/dts/overlays/Toast.d.ts.map +1 -1
  83. package/dts/overlays/drawer/Drawer.d.ts.map +1 -1
  84. package/dts/overlays/modal/Modal.d.ts.map +1 -1
  85. package/dts/overlays/modal/ModalBody.d.ts.map +1 -1
  86. package/dts/overlays/modal/ModalFooter.d.ts +3 -8
  87. package/dts/overlays/modal/ModalFooter.d.ts.map +1 -1
  88. package/dts/overlays/modal/ModalHeader.d.ts.map +1 -1
  89. package/dts/overlays/overlay/Overlay.d.ts +7 -3
  90. package/dts/overlays/overlay/Overlay.d.ts.map +1 -1
  91. package/dts/overlays/tooltip/Tooltip.d.ts +2 -20
  92. package/dts/overlays/tooltip/Tooltip.d.ts.map +1 -1
  93. package/dts/overlays/tray/Tray.d.ts.map +1 -1
  94. package/dts/page/PageFooter.d.ts.map +1 -1
  95. package/dts/page/PageHeader.d.ts.map +1 -1
  96. package/dts/perf/component-config/Button.component-config.perf-test.d.ts +2 -0
  97. package/dts/perf/component-config/Button.component-config.perf-test.d.ts.map +1 -0
  98. package/dts/perf/component-config/ComponentConfigProvider.perf-test.d.ts +2 -0
  99. package/dts/perf/component-config/ComponentConfigProvider.perf-test.d.ts.map +1 -0
  100. package/dts/perf/component-config/ComponentConfigStickerSheet.perf-test.d.ts +2 -0
  101. package/dts/perf/component-config/ComponentConfigStickerSheet.perf-test.d.ts.map +1 -0
  102. package/dts/stepper/Stepper.d.ts.map +1 -1
  103. package/dts/system/ComponentConfigProvider.d.ts +26 -0
  104. package/dts/system/ComponentConfigProvider.d.ts.map +1 -0
  105. package/dts/system/index.d.ts +1 -0
  106. package/dts/system/index.d.ts.map +1 -1
  107. package/dts/tabs/SegmentedTab.d.ts +6 -3
  108. package/dts/tabs/SegmentedTab.d.ts.map +1 -1
  109. package/dts/tabs/SegmentedTabs.d.ts +6 -3
  110. package/dts/tabs/SegmentedTabs.d.ts.map +1 -1
  111. package/dts/tabs/Tabs.d.ts +25 -24
  112. package/dts/tabs/Tabs.d.ts.map +1 -1
  113. package/dts/tag/Tag.d.ts.map +1 -1
  114. package/dts/tour/Tour.d.ts +42 -41
  115. package/dts/tour/Tour.d.ts.map +1 -1
  116. package/dts/typography/Link.d.ts +1 -14
  117. package/dts/typography/Link.d.ts.map +1 -1
  118. package/dts/utils/mergeComponentProps.d.ts +34 -0
  119. package/dts/utils/mergeComponentProps.d.ts.map +1 -0
  120. package/dts/visualizations/ProgressBar.d.ts.map +1 -1
  121. package/dts/visualizations/ProgressBarWithFixedLabels.d.ts +5 -3
  122. package/dts/visualizations/ProgressBarWithFixedLabels.d.ts.map +1 -1
  123. package/dts/visualizations/ProgressBarWithFloatLabel.d.ts +3 -1
  124. package/dts/visualizations/ProgressBarWithFloatLabel.d.ts.map +1 -1
  125. package/dts/visualizations/ProgressCircle.d.ts.map +1 -1
  126. package/esm/accordion/Accordion.js +5 -3
  127. package/esm/alpha/combobox/Combobox.js +8 -6
  128. package/esm/alpha/select/Select.js +6 -4
  129. package/esm/alpha/select-chip/SelectChip.js +6 -4
  130. package/esm/alpha/tabbed-chips/TabbedChips.js +6 -4
  131. package/esm/banner/Banner.js +6 -4
  132. package/esm/buttons/AvatarButton.js +6 -4
  133. package/esm/buttons/Button.js +6 -4
  134. package/esm/buttons/ButtonGroup.js +5 -3
  135. package/esm/buttons/IconButton.js +6 -4
  136. package/esm/buttons/IconCounterButton.js +6 -4
  137. package/esm/buttons/SlideButton.js +10 -8
  138. package/esm/cards/LikeButton.js +6 -4
  139. package/esm/carousel/Carousel.js +10 -8
  140. package/esm/cells/Cell.js +6 -4
  141. package/esm/cells/ListCell.js +6 -4
  142. package/esm/cells/ListCellFallback.js +6 -4
  143. package/esm/chips/Chip.js +6 -4
  144. package/esm/chips/InputChip.js +6 -4
  145. package/esm/chips/MediaChip.js +6 -4
  146. package/esm/chips/TabbedChips.js +6 -4
  147. package/esm/coachmark/Coachmark.js +6 -4
  148. package/esm/collapsible/Collapsible.js +10 -8
  149. package/esm/controls/Checkbox.js +6 -4
  150. package/esm/controls/CheckboxCell.js +6 -4
  151. package/esm/controls/Control.js +8 -6
  152. package/esm/controls/ControlGroup.js +6 -4
  153. package/esm/controls/InputStack.js +6 -4
  154. package/esm/controls/Radio.js +6 -4
  155. package/esm/controls/RadioCell.js +6 -4
  156. package/esm/controls/SearchInput.js +6 -4
  157. package/esm/controls/SelectOption.js +6 -4
  158. package/esm/controls/Switch.js +6 -4
  159. package/esm/controls/TextInput.js +6 -4
  160. package/esm/core/componentConfig.js +1 -0
  161. package/esm/dates/Calendar.js +8 -6
  162. package/esm/dates/DateInput.js +6 -4
  163. package/esm/dates/DatePicker.js +9 -6
  164. package/esm/dots/DotCount.js +6 -4
  165. package/esm/dots/DotStatusColor.js +6 -4
  166. package/esm/dots/DotSymbol.js +6 -4
  167. package/esm/hooks/useComponentConfig.js +27 -0
  168. package/esm/icons/Icon.js +10 -8
  169. package/esm/index.js +2 -0
  170. package/esm/layout/Divider.js +6 -4
  171. package/esm/layout/Fallback.js +6 -4
  172. package/esm/media/Avatar.js +6 -4
  173. package/esm/media/RemoteImage.js +6 -4
  174. package/esm/media/RemoteImageGroup.js +6 -4
  175. package/esm/navigation/BrowserBar.js +6 -4
  176. package/esm/navigation/NavigationTitle.js +6 -4
  177. package/esm/navigation/NavigationTitleSelect.js +8 -6
  178. package/esm/navigation/TopNavBar.js +5 -3
  179. package/esm/numbers/RollingNumber/RollingNumber.js +6 -4
  180. package/esm/numpad/Numpad.js +8 -6
  181. package/esm/overlays/Alert.js +7 -5
  182. package/esm/overlays/Toast.js +10 -8
  183. package/esm/overlays/drawer/Drawer.js +12 -10
  184. package/esm/overlays/modal/Modal.js +4 -1
  185. package/esm/overlays/modal/ModalBody.js +8 -6
  186. package/esm/overlays/modal/ModalFooter.js +8 -6
  187. package/esm/overlays/modal/ModalHeader.js +6 -4
  188. package/esm/overlays/overlay/Overlay.js +6 -4
  189. package/esm/overlays/tooltip/Tooltip.js +5 -3
  190. package/esm/overlays/tray/Tray.js +13 -11
  191. package/esm/page/PageFooter.js +6 -4
  192. package/esm/page/PageHeader.js +6 -4
  193. package/esm/perf/component-config/Button.component-config.perf-test.js +35 -0
  194. package/esm/perf/component-config/ComponentConfigProvider.perf-test.js +147 -0
  195. package/esm/perf/component-config/ComponentConfigStickerSheet.perf-test.js +326 -0
  196. package/esm/perf/component-config/README.md +8 -0
  197. package/esm/stepper/Stepper.js +11 -9
  198. package/esm/system/ComponentConfigProvider.js +39 -0
  199. package/esm/system/__stories__/ComponentConfigProvider.stories.js +12 -0
  200. package/esm/system/__stories__/ComponentConfigProviderCustom.stories.js +22 -0
  201. package/esm/system/__stories__/componentConfigStickerSheet/Container.js +27 -0
  202. package/esm/system/__stories__/componentConfigStickerSheet/StickerSheet.js +94 -0
  203. package/esm/system/__stories__/componentConfigStickerSheet/customComponentConfig.js +116 -0
  204. package/esm/system/__stories__/componentConfigStickerSheet/customTheme.js +520 -0
  205. package/esm/system/__stories__/componentConfigStickerSheet/examples/Accordion.js +67 -0
  206. package/esm/system/__stories__/componentConfigStickerSheet/examples/Avatar.js +48 -0
  207. package/esm/system/__stories__/componentConfigStickerSheet/examples/Banner.js +43 -0
  208. package/esm/system/__stories__/componentConfigStickerSheet/examples/Button.js +77 -0
  209. package/esm/system/__stories__/componentConfigStickerSheet/examples/Coachmark.js +15 -0
  210. package/esm/system/__stories__/componentConfigStickerSheet/examples/Controls.js +29 -0
  211. package/esm/system/__stories__/componentConfigStickerSheet/examples/DatePicker.js +15 -0
  212. package/esm/system/__stories__/componentConfigStickerSheet/examples/DotCount.js +28 -0
  213. package/esm/system/__stories__/componentConfigStickerSheet/examples/Icon.js +57 -0
  214. package/esm/system/__stories__/componentConfigStickerSheet/examples/InputChip.js +17 -0
  215. package/esm/system/__stories__/componentConfigStickerSheet/examples/ListCell.js +48 -0
  216. package/esm/system/__stories__/componentConfigStickerSheet/examples/Search.js +20 -0
  217. package/esm/system/__stories__/componentConfigStickerSheet/examples/SegmentedTabs.js +12 -0
  218. package/esm/system/__stories__/componentConfigStickerSheet/examples/Select.js +24 -0
  219. package/esm/system/__stories__/componentConfigStickerSheet/examples/SelectChip.js +22 -0
  220. package/esm/system/__stories__/componentConfigStickerSheet/examples/Tag.js +35 -0
  221. package/esm/system/__stories__/componentConfigStickerSheet/examples/TextInput.js +46 -0
  222. package/esm/system/__stories__/componentConfigStickerSheet/examples/constants.js +33 -0
  223. package/esm/system/__stories__/componentConfigStickerSheet/themeVars.js +2 -0
  224. package/esm/system/index.js +1 -0
  225. package/esm/tabs/SegmentedTab.js +7 -5
  226. package/esm/tabs/SegmentedTabs.js +9 -4
  227. package/esm/tabs/Tabs.js +12 -10
  228. package/esm/tag/Tag.js +6 -4
  229. package/esm/tour/Tour.js +5 -3
  230. package/esm/typography/Link.js +6 -4
  231. package/esm/utils/mergeComponentProps.js +35 -0
  232. package/esm/visualizations/ProgressBar.js +7 -5
  233. package/esm/visualizations/ProgressBarWithFixedLabels.js +5 -3
  234. package/esm/visualizations/ProgressBarWithFloatLabel.js +5 -3
  235. package/esm/visualizations/ProgressCircle.js +7 -5
  236. package/package.json +4 -3
@@ -4,6 +4,7 @@ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t =
4
4
  import React, { memo, useMemo } from 'react';
5
5
  import { Animated, StyleSheet, View } from 'react-native';
6
6
  import { accessibleOpacityDisabled } from '@coinbase/cds-common/tokens/interactable';
7
+ import { useComponentConfig } from '../hooks/useComponentConfig';
7
8
  import { useLayout } from '../hooks/useLayout';
8
9
  import { useTheme } from '../hooks/useTheme';
9
10
  import { HStack } from '../layout/HStack';
@@ -18,8 +19,9 @@ const variantColorMap = {
18
19
  foregroundMuted: 'fgMuted',
19
20
  secondary: 'bgSecondary'
20
21
  };
21
- export const InputStack = /*#__PURE__*/memo(function InputStack(_ref) {
22
- let {
22
+ export const InputStack = /*#__PURE__*/memo(function InputStack(_props) {
23
+ const mergedProps = useComponentConfig('InputStack', _props);
24
+ const {
23
25
  /** CDS custom props */
24
26
  width = '100%',
25
27
  prependNode,
@@ -41,8 +43,8 @@ export const InputStack = /*#__PURE__*/memo(function InputStack(_ref) {
41
43
  inputBackground = 'bg',
42
44
  borderWidth = 100,
43
45
  focusedBorderWidth = borderWidth
44
- } = _ref,
45
- props = _objectWithoutPropertiesLoose(_ref, _excluded);
46
+ } = mergedProps,
47
+ props = _objectWithoutPropertiesLoose(mergedProps, _excluded);
46
48
  const theme = useTheme();
47
49
  const [inputAreaSize, onInputAreaLayout] = useLayout();
48
50
  const inputAreaStyle = useMemo(() => {
@@ -4,6 +4,7 @@ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t =
4
4
  import React, { forwardRef, memo } from 'react';
5
5
  import { Animated, StyleSheet } from 'react-native';
6
6
  import { Circle, Svg } from 'react-native-svg';
7
+ import { useComponentConfig } from '../hooks/useComponentConfig';
7
8
  import { useTheme } from '../hooks/useTheme';
8
9
  import { Box } from '../layout';
9
10
  import { Interactable } from '../system/Interactable';
@@ -84,13 +85,14 @@ const RadioIcon = _ref2 => {
84
85
  })
85
86
  });
86
87
  };
87
- const RadioWithRef = /*#__PURE__*/forwardRef(function Radio(_ref3, ref) {
88
- let {
88
+ const RadioWithRef = /*#__PURE__*/forwardRef(function Radio(_props, ref) {
89
+ const mergedProps = useComponentConfig('Radio', _props);
90
+ const {
89
91
  children,
90
92
  accessibilityHint,
91
93
  accessibilityLabel
92
- } = _ref3,
93
- props = _objectWithoutPropertiesLoose(_ref3, _excluded);
94
+ } = mergedProps,
95
+ props = _objectWithoutPropertiesLoose(mergedProps, _excluded);
94
96
  const accessibilityLabelValue = typeof children === 'string' && accessibilityLabel === undefined ? children : accessibilityLabel;
95
97
  return /*#__PURE__*/_jsx(Control, _extends({}, props, {
96
98
  ref: ref,
@@ -3,6 +3,7 @@ function _extends() { return _extends = Object.assign ? Object.assign.bind() : f
3
3
  function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
4
4
  import React, { forwardRef, memo, useCallback, useMemo, useState } from 'react';
5
5
  import { Animated } from 'react-native';
6
+ import { useComponentConfig } from '../hooks/useComponentConfig';
6
7
  import { useLayout } from '../hooks/useLayout';
7
8
  import { useSelectionCellBorderStyle } from '../hooks/useSelectionCellBorderStyle';
8
9
  import { useTheme } from '../hooks/useTheme';
@@ -11,8 +12,9 @@ import { Pressable } from '../system/Pressable';
11
12
  import { Text } from '../typography/Text';
12
13
  import { Radio } from './Radio';
13
14
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
- const RadioCellWithRef = /*#__PURE__*/forwardRef(function RadioCell(_ref, ref) {
15
- let {
15
+ const RadioCellWithRef = /*#__PURE__*/forwardRef(function RadioCell(_props, ref) {
16
+ const mergedProps = useComponentConfig('RadioCell', _props);
17
+ const {
16
18
  title,
17
19
  description,
18
20
  checked,
@@ -40,8 +42,8 @@ const RadioCellWithRef = /*#__PURE__*/forwardRef(function RadioCell(_ref, ref) {
40
42
  pressedBorderColor = 'bgPrimary',
41
43
  pressedBorderWidth = 200,
42
44
  styles
43
- } = _ref,
44
- props = _objectWithoutPropertiesLoose(_ref, _excluded);
45
+ } = mergedProps,
46
+ props = _objectWithoutPropertiesLoose(mergedProps, _excluded);
45
47
  const theme = useTheme();
46
48
  const [layout, setLayout] = useLayout();
47
49
  const [pressed, setPressed] = useState(false);
@@ -3,12 +3,14 @@ function _extends() { return _extends = Object.assign ? Object.assign.bind() : f
3
3
  function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
4
4
  import React, { forwardRef, memo, useCallback, useMemo, useRef, useState } from 'react';
5
5
  import { useMergeRefs } from '@coinbase/cds-common/hooks/useMergeRefs';
6
+ import { useComponentConfig } from '../hooks/useComponentConfig';
6
7
  import { Box } from '../layout/Box';
7
8
  import { InputIconButton } from './InputIconButton';
8
9
  import { TextInput } from './TextInput';
9
10
  import { jsx as _jsx } from "react/jsx-runtime";
10
- export const SearchInput = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_ref, ref) => {
11
- let {
11
+ export const SearchInput = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_props, ref) => {
12
+ const mergedProps = useComponentConfig('SearchInput', _props);
13
+ const {
12
14
  value,
13
15
  testID,
14
16
  onSearch,
@@ -26,8 +28,8 @@ export const SearchInput = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_ref, ref)
26
28
  startIconAccessibilityLabel = 'Back',
27
29
  clearIconAccessibilityLabel = 'Clear text',
28
30
  borderRadius = 1000
29
- } = _ref,
30
- props = _objectWithoutPropertiesLoose(_ref, _excluded);
31
+ } = mergedProps,
32
+ props = _objectWithoutPropertiesLoose(mergedProps, _excluded);
31
33
  const [startIconName, setStartIconName] = useState(startIcon != null ? startIcon : 'search');
32
34
  const internalRef = useRef(null);
33
35
  const refs = useMergeRefs(ref, internalRef);
@@ -5,14 +5,16 @@ import React, { memo, useCallback } from 'react';
5
5
  import { selectCellMobileSpacingConfig } from '@coinbase/cds-common/tokens/select';
6
6
  import { Cell } from '../cells/Cell';
7
7
  import { CellAccessory } from '../cells/CellAccessory';
8
+ import { useComponentConfig } from '../hooks/useComponentConfig';
8
9
  import { VStack } from '../layout/VStack';
9
10
  import { Text } from '../typography/Text';
10
11
  import { useSelectContext } from './SelectContext';
11
12
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
13
  const selectOptionMinHeight = 56;
13
14
  const selectOptionMaxHeight = 64;
14
- export const SelectOption = /*#__PURE__*/memo(function SelectOption(_ref) {
15
- let {
15
+ export const SelectOption = /*#__PURE__*/memo(_props => {
16
+ const mergedProps = useComponentConfig('SelectOption', _props);
17
+ const {
16
18
  title,
17
19
  description,
18
20
  multiline,
@@ -20,8 +22,8 @@ export const SelectOption = /*#__PURE__*/memo(function SelectOption(_ref) {
20
22
  value,
21
23
  accessibilityLabel,
22
24
  accessibilityHint
23
- } = _ref,
24
- props = _objectWithoutPropertiesLoose(_ref, _excluded);
25
+ } = mergedProps,
26
+ props = _objectWithoutPropertiesLoose(mergedProps, _excluded);
25
27
  const {
26
28
  value: selectedValue,
27
29
  onChange,
@@ -3,6 +3,7 @@ function _extends() { return _extends = Object.assign ? Object.assign.bind() : f
3
3
  function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
4
4
  import React, { forwardRef, memo, useMemo } from 'react';
5
5
  import { StyleSheet } from 'react-native';
6
+ import { useComponentConfig } from '../hooks/useComponentConfig';
6
7
  import { useTheme } from '../hooks/useTheme';
7
8
  import { Box } from '../layout/Box';
8
9
  import { Interactable } from '../system/Interactable';
@@ -70,11 +71,12 @@ const SwitchIcon = _ref => {
70
71
  })
71
72
  });
72
73
  };
73
- const SwitchWithRef = /*#__PURE__*/forwardRef(function SwitchWithRef(_ref2, ref) {
74
- let {
74
+ const SwitchWithRef = /*#__PURE__*/forwardRef(function SwitchWithRef(_props, ref) {
75
+ const mergedProps = useComponentConfig('Switch', _props);
76
+ const {
75
77
  children
76
- } = _ref2,
77
- props = _objectWithoutPropertiesLoose(_ref2, _excluded);
78
+ } = mergedProps,
79
+ props = _objectWithoutPropertiesLoose(mergedProps, _excluded);
78
80
  const theme = useTheme();
79
81
  const {
80
82
  switchHeight
@@ -5,6 +5,7 @@ import React, { cloneElement, forwardRef, isValidElement, memo, useCallback, use
5
5
  import { Pressable } from 'react-native';
6
6
  import { useInputVariant } from '@coinbase/cds-common/hooks/useInputVariant';
7
7
  import { useMergeRefs } from '@coinbase/cds-common/hooks/useMergeRefs';
8
+ import { useComponentConfig } from '../hooks/useComponentConfig';
8
9
  import { useInputBorderStyle } from '../hooks/useInputBorderStyle';
9
10
  import { useTheme } from '../hooks/useTheme';
10
11
  import { Box } from '../layout/Box';
@@ -25,9 +26,10 @@ const variantColorMap = {
25
26
  foregroundMuted: 'fgMuted',
26
27
  secondary: 'bgSecondary'
27
28
  };
28
- export const TextInput = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_ref, ref) => {
29
+ export const TextInput = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_props, ref) => {
29
30
  var _testIDMap$end, _testIDMap$helperText, _testIDMap$label;
30
- let {
31
+ const mergedProps = useComponentConfig('TextInput', _props);
32
+ const {
31
33
  label,
32
34
  helperText = '',
33
35
  variant = 'foregroundMuted',
@@ -50,8 +52,8 @@ export const TextInput = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_ref, ref) =
50
52
  labelVariant = 'outside',
51
53
  labelNode,
52
54
  inputBackground
53
- } = _ref,
54
- editableInputProps = _objectWithoutPropertiesLoose(_ref, _excluded);
55
+ } = mergedProps,
56
+ editableInputProps = _objectWithoutPropertiesLoose(mergedProps, _excluded);
55
57
  const theme = useTheme();
56
58
  const [focused, setFocused] = useState(false);
57
59
  const focusedVariant = useInputVariant(focused, variant);
@@ -0,0 +1 @@
1
+ export {};
@@ -10,6 +10,7 @@ import { getTimesFromDatesAndRanges } from '@coinbase/cds-common/dates/getTimesF
10
10
  import { useLocale } from '@coinbase/cds-common/system/LocaleProvider';
11
11
  import { accessibleOpacityDisabled } from '@coinbase/cds-common/tokens/interactable';
12
12
  import { useA11y } from '../hooks/useA11y';
13
+ import { useComponentConfig } from '../hooks/useComponentConfig';
13
14
  import { useScreenReaderStatus } from '../hooks/useScreenReaderStatus';
14
15
  import { Icon } from '../icons/Icon';
15
16
  import { Box } from '../layout/Box';
@@ -140,8 +141,9 @@ const CalendarDay = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_ref2, ref) => {
140
141
  return dayButton;
141
142
  }));
142
143
  CalendarDay.displayName = 'CalendarDay';
143
- export const Calendar = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_ref3, ref) => {
144
- let {
144
+ export const Calendar = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_props, ref) => {
145
+ const mergedProps = useComponentConfig('Calendar', _props);
146
+ const {
145
147
  selectedDate,
146
148
  seedDate,
147
149
  onPressDate,
@@ -158,8 +160,8 @@ export const Calendar = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_ref3, ref) =
158
160
  highlightedDateAccessibilityHint = 'Highlighted',
159
161
  style,
160
162
  styles
161
- } = _ref3,
162
- props = _objectWithoutPropertiesLoose(_ref3, _excluded2);
163
+ } = mergedProps,
164
+ props = _objectWithoutPropertiesLoose(mergedProps, _excluded2);
163
165
  const {
164
166
  setA11yFocus,
165
167
  announceForA11y
@@ -316,8 +318,8 @@ export const Calendar = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_ref3, ref) =
316
318
  children: day.charAt(0)
317
319
  })
318
320
  }, day))
319
- }), calendarWeeks.map(_ref4 => {
320
- let [weekId, week] = _ref4;
321
+ }), calendarWeeks.map(_ref3 => {
322
+ let [weekId, week] = _ref3;
321
323
  return /*#__PURE__*/_jsx(HStack, {
322
324
  gap: 1,
323
325
  justifyContent: "space-between",
@@ -6,10 +6,12 @@ import { IntlDateFormat } from '@coinbase/cds-common/dates/IntlDateFormat';
6
6
  import { useDateInput } from '@coinbase/cds-common/dates/useDateInput';
7
7
  import { useLocale } from '@coinbase/cds-common/system/LocaleProvider';
8
8
  import { TextInput } from '../controls/TextInput';
9
+ import { useComponentConfig } from '../hooks/useComponentConfig';
9
10
  import { VStack } from '../layout/VStack';
10
11
  import { jsx as _jsx } from "react/jsx-runtime";
11
- export const DateInput = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_ref, ref) => {
12
- let {
12
+ export const DateInput = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_props, ref) => {
13
+ const mergedProps = useComponentConfig('DateInput', _props);
14
+ const {
13
15
  date,
14
16
  onChangeDate,
15
17
  error,
@@ -32,8 +34,8 @@ export const DateInput = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_ref, ref) =
32
34
  onEndEditing,
33
35
  testIDMap,
34
36
  style
35
- } = _ref,
36
- props = _objectWithoutPropertiesLoose(_ref, _excluded);
37
+ } = mergedProps,
38
+ props = _objectWithoutPropertiesLoose(mergedProps, _excluded);
37
39
  const hasTyped = useRef(Boolean(date));
38
40
  const {
39
41
  locale
@@ -4,14 +4,16 @@ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t =
4
4
  import { forwardRef, memo, useCallback, useMemo, useRef, useState } from 'react';
5
5
  import { Button } from '../buttons/Button';
6
6
  import { InputIconButton } from '../controls/InputIconButton';
7
+ import { useComponentConfig } from '../hooks/useComponentConfig';
7
8
  import { Box, VStack } from '../layout';
8
9
  import { Tray } from '../overlays/tray/Tray';
9
10
  import { StickyFooter } from '../sticky-footer/StickyFooter';
10
11
  import { Calendar } from './Calendar';
11
12
  import { DateInput } from './DateInput';
12
13
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
- export const DatePicker = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_ref, ref) => {
14
- let {
14
+ export const DatePicker = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_props, ref) => {
15
+ const mergedProps = useComponentConfig('DatePicker', _props);
16
+ const {
15
17
  date,
16
18
  styles,
17
19
  highlightedDates,
@@ -49,14 +51,15 @@ export const DatePicker = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_ref, ref)
49
51
  onConfirm,
50
52
  onCancel,
51
53
  onChange
52
- } = _ref,
53
- props = _objectWithoutPropertiesLoose(_ref, _excluded);
54
+ } = mergedProps,
55
+ props = _objectWithoutPropertiesLoose(mergedProps, _excluded);
54
56
  const [showPicker, setShowPicker] = useState(false);
55
57
  const [calendarSelectedDate, setCalendarSelectedDate] = useState(null);
56
58
  const dateInputRef = useRef(null);
57
59
  const calendarButtonRef = useRef(null);
58
60
  const calendarRef = useRef(null);
59
61
  const closedByConfirmRef = useRef(false);
62
+
60
63
  /**
61
64
  * Be careful to preserve the correct event orders
62
65
  * 1. Selecting a date with the picker: onOpen -> onConfirm -> onChangeDate -> onErrorDate -> onClose
@@ -139,10 +142,10 @@ export const DatePicker = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_ref, ref)
139
142
  variant: variant
140
143
  })), showPicker && /*#__PURE__*/_jsx(Tray, {
141
144
  accessibilityRole: "none",
142
- footer: _ref2 => {
145
+ footer: _ref => {
143
146
  let {
144
147
  handleClose
145
- } = _ref2;
148
+ } = _ref;
146
149
  return /*#__PURE__*/_jsx(StickyFooter, {
147
150
  paddingTop: 3,
148
151
  paddingX: 3,
@@ -7,6 +7,7 @@ import Animated, { runOnJS, useAnimatedReaction, useAnimatedStyle, useSharedValu
7
7
  import { usePreviousValue } from '@coinbase/cds-common/hooks/usePreviousValue';
8
8
  import { dotOpacityEnterConfig, dotOpacityExitConfig, dotScaleEnterConfig, dotScaleExitConfig } from '@coinbase/cds-common/motion/dot';
9
9
  import { dotCountSize } from '@coinbase/cds-common/tokens/dot';
10
+ import { useComponentConfig } from '../hooks/useComponentConfig';
10
11
  import { useDotPinStyles } from '../hooks/useDotPinStyles';
11
12
  import { useTheme } from '../hooks/useTheme';
12
13
  import { convertMotionConfigs } from '../motion/convertMotionConfig';
@@ -30,8 +31,9 @@ const dotTextPaddingHorizontal = 6;
30
31
  const variantColorMap = {
31
32
  negative: 'bgNegative'
32
33
  };
33
- export const DotCount = /*#__PURE__*/memo(_ref => {
34
- let {
34
+ export const DotCount = /*#__PURE__*/memo(_props => {
35
+ const mergedProps = useComponentConfig('DotCount', _props);
36
+ const {
35
37
  children,
36
38
  pin,
37
39
  variant = 'negative',
@@ -40,8 +42,8 @@ export const DotCount = /*#__PURE__*/memo(_ref => {
40
42
  overlap,
41
43
  style,
42
44
  styles
43
- } = _ref,
44
- props = _objectWithoutPropertiesLoose(_ref, _excluded);
45
+ } = mergedProps,
46
+ props = _objectWithoutPropertiesLoose(mergedProps, _excluded);
45
47
  const theme = useTheme();
46
48
  const [childrenSize, onChildrenLayout] = useDotsLayout();
47
49
  const transforms = useDotPinStyles(childrenSize, {
@@ -3,6 +3,7 @@ function _extends() { return _extends = Object.assign ? Object.assign.bind() : f
3
3
  function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
4
4
  import React, { memo, useMemo } from 'react';
5
5
  import { View } from 'react-native';
6
+ import { useComponentConfig } from '../hooks/useComponentConfig';
6
7
  import { useDotPinStyles } from '../hooks/useDotPinStyles';
7
8
  import { useTheme } from '../hooks/useTheme';
8
9
  import { getTransform } from './dotStyles';
@@ -15,15 +16,16 @@ const variantColorMap = {
15
16
  warning: 'bgWarning',
16
17
  negative: 'bgNegative'
17
18
  };
18
- export const DotStatusColor = /*#__PURE__*/memo(_ref => {
19
- let {
19
+ export const DotStatusColor = /*#__PURE__*/memo(_props => {
20
+ const mergedProps = useComponentConfig('DotStatusColor', _props);
21
+ const {
20
22
  variant,
21
23
  pin,
22
24
  size = 's',
23
25
  children,
24
26
  overlap
25
- } = _ref,
26
- props = _objectWithoutPropertiesLoose(_ref, _excluded);
27
+ } = mergedProps,
28
+ props = _objectWithoutPropertiesLoose(mergedProps, _excluded);
27
29
  const theme = useTheme();
28
30
  const iconSize = theme.iconSize[size];
29
31
  const [childrenSize, onLayout] = useDotsLayout();
@@ -3,6 +3,7 @@ function _extends() { return _extends = Object.assign ? Object.assign.bind() : f
3
3
  function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
4
4
  import React, { memo, useMemo } from 'react';
5
5
  import { View } from 'react-native';
6
+ import { useComponentConfig } from '../hooks/useComponentConfig';
6
7
  import { useDotPinStyles } from '../hooks/useDotPinStyles';
7
8
  import { useTheme } from '../hooks/useTheme';
8
9
  import { Icon } from '../icons/Icon';
@@ -11,8 +12,9 @@ import { RemoteImage } from '../media/RemoteImage';
11
12
  import { getTransform } from './dotStyles';
12
13
  import { useDotsLayout } from './useDotsLayout';
13
14
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
- export const DotSymbol = /*#__PURE__*/memo(_ref => {
15
- let {
15
+ export const DotSymbol = /*#__PURE__*/memo(_props => {
16
+ const mergedProps = useComponentConfig('DotSymbol', _props);
17
+ const {
16
18
  children,
17
19
  symbol,
18
20
  pin,
@@ -27,8 +29,8 @@ export const DotSymbol = /*#__PURE__*/memo(_ref => {
27
29
  style,
28
30
  iconStyle,
29
31
  imageStyle
30
- } = _ref,
31
- props = _objectWithoutPropertiesLoose(_ref, _excluded);
32
+ } = mergedProps,
33
+ props = _objectWithoutPropertiesLoose(mergedProps, _excluded);
32
34
  const theme = useTheme();
33
35
  const iconSize = theme.iconSize[size];
34
36
  const [childrenSize, onChildrenLayout] = useDotsLayout();
@@ -0,0 +1,27 @@
1
+ import { useStore } from 'zustand';
2
+ import { useComponentConfigStore } from '../system/ComponentConfigProvider';
3
+ import { mergeComponentProps } from '../utils/mergeComponentProps';
4
+
5
+ /**
6
+ * Subscribes to the component config for a specific component via zustand selectors.
7
+ * Only triggers re-renders when the config for THIS component changes - other
8
+ * components' config changes are ignored.
9
+ *
10
+ * Raw config values are stored in the zustand store (not normalized to functions)
11
+ * so that Object.is reference comparisons work correctly and unchanged entries
12
+ * never cause re-renders.
13
+ *
14
+ * @param componentName - The component key in ComponentConfig (e.g., 'Button')
15
+ * @param localProps - The props passed directly to the component instance
16
+ * @returns Merged props with config defaults applied (local props take precedence)
17
+ */
18
+ export const useComponentConfig = (componentName, localProps) => {
19
+ const store = useComponentConfigStore();
20
+ const rawConfig = useStore(store, state => {
21
+ var _state$components;
22
+ return (_state$components = state.components) == null ? void 0 : _state$components[componentName];
23
+ });
24
+ if (!rawConfig) return localProps;
25
+ const resolvedConfig = typeof rawConfig === 'function' ? rawConfig(localProps) : rawConfig;
26
+ return mergeComponentProps(resolvedConfig, localProps);
27
+ };
package/esm/icons/Icon.js CHANGED
@@ -2,6 +2,7 @@ import React, { memo, useMemo } from 'react';
2
2
  import { Animated, Text, useWindowDimensions } from 'react-native';
3
3
  import { glyphMap } from '@coinbase/cds-icons/glyphMap';
4
4
  import { isDevelopment } from '@coinbase/cds-utils';
5
+ import { useComponentConfig } from '../hooks/useComponentConfig';
5
6
  import { useTheme } from '../hooks/useTheme';
6
7
  import { Box } from '../layout/Box';
7
8
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -10,8 +11,9 @@ const getIconSourceSize = iconSize => {
10
11
  if (iconSize <= 16) return 16;
11
12
  return 24;
12
13
  };
13
- export const Icon = /*#__PURE__*/memo(function Icon(_ref) {
14
- let {
14
+ export const Icon = /*#__PURE__*/memo(_props => {
15
+ const mergedProps = useComponentConfig('Icon', _props);
16
+ const {
15
17
  accessibilityLabel,
16
18
  accessibilityHint,
17
19
  animated = false,
@@ -31,7 +33,7 @@ export const Icon = /*#__PURE__*/memo(function Icon(_ref) {
31
33
  paddingBottom,
32
34
  paddingStart,
33
35
  active
34
- } = _ref;
36
+ } = mergedProps;
35
37
  const TextComponent = animated ? Animated.Text : Text;
36
38
  const theme = useTheme();
37
39
  const {
@@ -44,12 +46,12 @@ export const Icon = /*#__PURE__*/memo(function Icon(_ref) {
44
46
  const iconColor = theme.color[color];
45
47
  const finalColor = dangerouslySetColor != null ? dangerouslySetColor : iconColor;
46
48
  const rootStyle = useMemo(() => {
47
- var _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9;
49
+ var _ref, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8;
48
50
  return [{
49
- paddingTop: theme.space[(_ref2 = (_ref3 = paddingTop != null ? paddingTop : paddingY) != null ? _ref3 : padding) != null ? _ref2 : 0],
50
- paddingEnd: theme.space[(_ref4 = (_ref5 = paddingEnd != null ? paddingEnd : paddingX) != null ? _ref5 : padding) != null ? _ref4 : 0],
51
- paddingBottom: theme.space[(_ref6 = (_ref7 = paddingBottom != null ? paddingBottom : paddingY) != null ? _ref7 : padding) != null ? _ref6 : 0],
52
- paddingStart: theme.space[(_ref8 = (_ref9 = paddingStart != null ? paddingStart : paddingX) != null ? _ref9 : padding) != null ? _ref8 : 0]
51
+ paddingTop: theme.space[(_ref = (_ref2 = paddingTop != null ? paddingTop : paddingY) != null ? _ref2 : padding) != null ? _ref : 0],
52
+ paddingEnd: theme.space[(_ref3 = (_ref4 = paddingEnd != null ? paddingEnd : paddingX) != null ? _ref4 : padding) != null ? _ref3 : 0],
53
+ paddingBottom: theme.space[(_ref5 = (_ref6 = paddingBottom != null ? paddingBottom : paddingY) != null ? _ref6 : padding) != null ? _ref5 : 0],
54
+ paddingStart: theme.space[(_ref7 = (_ref8 = paddingStart != null ? paddingStart : paddingX) != null ? _ref8 : padding) != null ? _ref7 : 0]
53
55
  }, style, styles == null ? void 0 : styles.root];
54
56
  }, [style, theme.space, padding, paddingX, paddingY, paddingTop, paddingEnd, paddingBottom, paddingStart, styles == null ? void 0 : styles.root]);
55
57
  const iconStyle = useMemo(() => [{
package/esm/index.js CHANGED
@@ -1,3 +1,5 @@
1
1
  export * from './core/theme';
2
+ export * from './hooks/useComponentConfig';
2
3
  export * from './hooks/useTheme';
4
+ export * from './system/ComponentConfigProvider';
3
5
  export * from './system/ThemeProvider';
@@ -3,15 +3,17 @@ function _extends() { return _extends = Object.assign ? Object.assign.bind() : f
3
3
  function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (-1 !== e.indexOf(n)) continue; t[n] = r[n]; } return t; }
4
4
  import { memo, useMemo } from 'react';
5
5
  import { StyleSheet, View } from 'react-native';
6
+ import { useComponentConfig } from '../hooks/useComponentConfig';
6
7
  import { useTheme } from '../hooks/useTheme';
7
8
  import { Box } from './Box';
8
9
  import { jsx as _jsx } from "react/jsx-runtime";
9
- export const Divider = /*#__PURE__*/memo(function Divider(_ref) {
10
- let {
10
+ export const Divider = /*#__PURE__*/memo(_props => {
11
+ const mergedProps = useComponentConfig('Divider', _props);
12
+ const {
11
13
  color = 'bgLine',
12
14
  direction = 'horizontal'
13
- } = _ref,
14
- boxProps = _objectWithoutPropertiesLoose(_ref, _excluded);
15
+ } = mergedProps,
16
+ boxProps = _objectWithoutPropertiesLoose(mergedProps, _excluded);
15
17
  const theme = useTheme();
16
18
  const style = useMemo(() => [styles[direction], {
17
19
  backgroundColor: theme.color[color]
@@ -6,20 +6,22 @@ import React, { memo, useEffect, useMemo, useRef } from 'react';
6
6
  import { Animated, StyleSheet, Text, View } from 'react-native';
7
7
  import { useFallbackShape } from '@coinbase/cds-common/hooks/useFallbackShape';
8
8
  import { LinearGradient } from '../gradients/LinearGradient';
9
+ import { useComponentConfig } from '../hooks/useComponentConfig';
9
10
  import { useTheme } from '../hooks/useTheme';
10
11
  import { fallbackShimmer } from '../styles/fallbackShimmer';
11
12
  import { Box } from './Box';
12
13
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
- export const Fallback = /*#__PURE__*/memo(function Fallback(_ref) {
14
- let {
14
+ export const Fallback = /*#__PURE__*/memo(_props => {
15
+ const mergedProps = useComponentConfig('Fallback', _props);
16
+ const {
15
17
  height,
16
18
  shape = 'rectangle',
17
19
  width: baseWidth,
18
20
  disableRandomRectWidth,
19
21
  rectWidthVariant,
20
22
  accessibilityLabel = 'Loading'
21
- } = _ref,
22
- props = _objectWithoutPropertiesLoose(_ref, _excluded);
23
+ } = mergedProps,
24
+ props = _objectWithoutPropertiesLoose(mergedProps, _excluded);
23
25
  const fallbackShapeOptions = useMemo(() => ({
24
26
  disableRandomRectWidth,
25
27
  rectWidthVariant
@@ -5,6 +5,7 @@ import React, { memo, useMemo } from 'react';
5
5
  import { StyleSheet } from 'react-native';
6
6
  import { colorSchemeMap } from '@coinbase/cds-common/tokens/avatar';
7
7
  import { getAccessibleColor } from '@coinbase/cds-common/utils/getAccessibleColor';
8
+ import { useComponentConfig } from '../hooks/useComponentConfig';
8
9
  import { useTheme } from '../hooks/useTheme';
9
10
  import { Box } from '../layout/Box';
10
11
  import { Text } from '../typography/Text';
@@ -14,8 +15,9 @@ import { jsx as _jsx } from "react/jsx-runtime";
14
15
  const smallAvatarSize = 44;
15
16
  export const coloredFallbackTestID = 'cds-avatar-colored-fallback';
16
17
  export const fallbackImageSrc = 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2NjIpLCBxdWFsaXR5ID0gOTAK/9sAQwADAgIDAgIDAwMDBAMDBAUIBQUEBAUKBwcGCAwKDAwLCgsLDQ4SEA0OEQ4LCxAWEBETFBUVFQwPFxgWFBgSFBUU/9sAQwEDBAQFBAUJBQUJFA0LDRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8AAEQgAOAA4AwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A+t80Zo4o4oAM0ZrsPBvw7m8Sxi7uZDa2GcKwHzyeu30HvXdf8Kp0Dytnlz7v+ennHP8Ah+lAHiuaM12XjL4dTeG4jd2sjXViDhiR88f1x1HvXG8UAGaKOKKADI9Kkt4vtFxFEOC7Bc/U4qPJ9KVXZGDLwwOQaAPpS0tY7G1ht4VCRRKEVcdABipc1meG9eh8RaRBeRMNzACRB1R+4/z2rU/OgCK5t47y3lgmUPFKpR1I6gjBr5uu4fst1NCefLdkz64OK+g/EWuQ+HtJnvJmHyjCIerv2Ar55klaWRnblmJJPqaAG5HpRRk+lFABzVnTtOutWvY7W0iMs8hwqj+Z9BVbB9a9o+GXhlNI0VL2VR9rvFD5PVY/4R+PX8vSgCfwX4EXwsDNJdSTXTrh1RisQ/Dv9T+QrrP89aT8qPyoA5Txr4FHilRNHdSQ3Ua4RHYtEfw7fUfrXjOo6dc6Tey2t3EYp4zgqf5j1FfSP5VxvxN8Mpq+jPfRKPtlmpfI6tH/ABD8Ov5+tAHi/NFGDRQBY060+3aja22f9dKsf5kD+tfSKIsaKigKqjAAHAFFFAC/j+lL+P6UUUAH4/pTXRZEZGG5WGCCOooooA+btRtPsOoXVtn/AFMrR/kSKKKKAP/Z';
17
- export const Avatar = /*#__PURE__*/memo(_ref => {
18
- let {
18
+ export const Avatar = /*#__PURE__*/memo(_props => {
19
+ const mergedProps = useComponentConfig('Avatar', _props);
20
+ const {
19
21
  alt,
20
22
  src,
21
23
  shape = 'circle',
@@ -27,8 +29,8 @@ export const Avatar = /*#__PURE__*/memo(_ref => {
27
29
  name,
28
30
  accessibilityLabel,
29
31
  style
30
- } = _ref,
31
- props = _objectWithoutPropertiesLoose(_ref, _excluded);
32
+ } = mergedProps,
33
+ props = _objectWithoutPropertiesLoose(mergedProps, _excluded);
32
34
  const imgSrc = src != null ? src : fallbackImageSrc;
33
35
  const shapeStyle = shapeStyles[shape];
34
36
  const theme = useTheme();
@@ -6,6 +6,7 @@ import React, { memo, useMemo } from 'react';
6
6
  import { Image } from 'react-native';
7
7
  import { ClipPath, Defs, Image as SvgImage, Path, Svg, SvgXml } from 'react-native-svg';
8
8
  import { SvgCssUri } from 'react-native-svg/css';
9
+ import { useComponentConfig } from '../hooks/useComponentConfig';
9
10
  import { useTheme } from '../hooks/useTheme';
10
11
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
12
  function getSource(source, cachePolicy) {
@@ -57,9 +58,10 @@ const shapeBorderRadius = {
57
58
  rectangle: 0,
58
59
  hexagon: 0
59
60
  };
60
- export const RemoteImage = /*#__PURE__*/memo(function RemoteImage(_ref2) {
61
+ export const RemoteImage = /*#__PURE__*/memo(function RemoteImage(_props) {
61
62
  var _props$accessible;
62
- let {
63
+ const mergedProps = useComponentConfig('RemoteImage', _props);
64
+ const {
63
65
  width,
64
66
  height,
65
67
  aspectRatio,
@@ -75,8 +77,8 @@ export const RemoteImage = /*#__PURE__*/memo(function RemoteImage(_ref2) {
75
77
  onLoad,
76
78
  fallbackAccessibilityLabel,
77
79
  fallbackAccessibilityHint
78
- } = _ref2,
79
- props = _objectWithoutPropertiesLoose(_ref2, _excluded2);
80
+ } = mergedProps,
81
+ props = _objectWithoutPropertiesLoose(mergedProps, _excluded2);
80
82
  const shapeRadius = shapeBorderRadius[shape];
81
83
  const {
82
84
  activeColorScheme,