@coinbase/cds-mobile 9.16.0 → 9.17.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.
- package/CHANGELOG.md +12 -0
- package/dts/alpha/select/DefaultSelectControl.d.ts.map +1 -1
- package/dts/controls/InputStack.d.ts +6 -0
- package/dts/controls/InputStack.d.ts.map +1 -1
- package/dts/visualizations/chart/scrubber/ScrubberProvider.d.ts.map +1 -1
- package/dts/visualizations/chart/utils/bar.d.ts.map +1 -1
- package/dts/visualizations/chart/utils/gradient.d.ts +9 -0
- package/dts/visualizations/chart/utils/gradient.d.ts.map +1 -1
- package/esm/alpha/select/DefaultSelectControl.js +15 -16
- package/esm/controls/InputStack.js +35 -22
- package/esm/visualizations/chart/scrubber/ScrubberProvider.js +8 -0
- package/esm/visualizations/chart/utils/bar.js +8 -2
- package/esm/visualizations/chart/utils/gradient.js +105 -74
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,18 @@ All notable changes to this project will be documented in this file.
|
|
|
8
8
|
|
|
9
9
|
<!-- template-start -->
|
|
10
10
|
|
|
11
|
+
## 9.17.1 (8/17/2026 PST)
|
|
12
|
+
|
|
13
|
+
#### 🐞 Fixes
|
|
14
|
+
|
|
15
|
+
- Fix: restore Select field press target after chrome padding adjustments in tshirt size work.
|
|
16
|
+
|
|
17
|
+
## 9.17.0 (8/14/2026 PST)
|
|
18
|
+
|
|
19
|
+
#### 🚀 Updates
|
|
20
|
+
|
|
21
|
+
- Feat: support charts gradients for bars. [[#844](https://github.com/coinbase/cds/pull/844)]
|
|
22
|
+
|
|
11
23
|
## 9.16.0 (8/13/2026 PST)
|
|
12
24
|
|
|
13
25
|
#### 🚀 Updates
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefaultSelectControl.d.ts","sourceRoot":"","sources":["../../../src/alpha/select/DefaultSelectControl.tsx"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"DefaultSelectControl.d.ts","sourceRoot":"","sources":["../../../src/alpha/select/DefaultSelectControl.tsx"],"names":[],"mappings":"AACA,OAAO,EAAkB,gBAAgB,EAAkB,MAAM,cAAc,CAAC;AAehF,OAAO,KAAK,EAAE,kBAAkB,EAA4B,UAAU,EAAE,MAAM,UAAU,CAAC;AAuBzF,KAAK,6BAA6B,GAAG,CACnC,IAAI,SAAS,UAAU,EACvB,iBAAiB,SAAS,MAAM,GAAG,MAAM,EAEzC,KAAK,EAAE,kBAAkB,CAAC,IAAI,EAAE,iBAAiB,CAAC,GAAG;IACnD,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC;CAC9D,KACE,KAAK,CAAC,YAAY,CAAC;AAExB,eAAO,MAAM,6BAA6B,wCACvC,IAAI,SAAS,UAAU,EAAE,iBAAiB,SAAS,MAAM,4fAuCvD,kBAAkB,CAAC,IAAI,EAAE,iBAAiB,CAAC,GAAG;IAC/C,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC;CAC9D,8CAwbF,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAoC,6BAA6B,CAAC"}
|
|
@@ -76,6 +76,12 @@ export type InputStackBaseProps = SharedProps & {
|
|
|
76
76
|
* @default 'bg'
|
|
77
77
|
*/
|
|
78
78
|
inputBackground?: ThemeVars.Color;
|
|
79
|
+
/**
|
|
80
|
+
* Press handler for the bordered field chrome only (not the label or helper).
|
|
81
|
+
* Use for trigger-style controls so padding on the field remains tappable.
|
|
82
|
+
* Do not use for text fields — the native input must stay the focus target.
|
|
83
|
+
*/
|
|
84
|
+
onFieldPress?: () => void;
|
|
79
85
|
};
|
|
80
86
|
export type InputStackProps = Omit<BoxProps, 'width' | 'height' | 'borderRadius'> &
|
|
81
87
|
InputStackBaseProps & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputStack.d.ts","sourceRoot":"","sources":["../../src/controls/InputStack.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAoB,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAGjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAK1E,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"InputStack.d.ts","sourceRoot":"","sources":["../../src/controls/InputStack.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAoB,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAGjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAK1E,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAM5D,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG;IAC9C;;;;;OAKG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB;;;SAGK;IACL,KAAK,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1B;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC;IACpC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC;IAC3C,yEAAyE;IACzE,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,uHAAuH;IACvH,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B,sEAAsE;IACtE,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,mHAAmH;IACnH,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,iCAAiC;IACjC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,iGAAiG;IACjG,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACjC,qDAAqD;IACrD,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC5B,wEAAwE;IACxE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,YAAY,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;IACxC;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,oCAAoC;IACpC,WAAW,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAC/D,oDAAoD;IACpD,kBAAkB,CAAC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IACtE;;;OAGG;IACH,YAAY,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IACpC;;;OAGG;IACH,eAAe,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC;IAClC;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,GAAG,cAAc,CAAC,GAC/E,mBAAmB,GAAG;IACpB,MAAM,CAAC,EAAE;QACP,6BAA6B;QAC7B,IAAI,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QAC5B,yCAAyC;QACzC,cAAc,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;QACtC,yBAAyB;QACzB,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;KAC9B,CAAC;CACH,CAAC;AAWJ,eAAO,MAAM,UAAU,6CAyMrB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrubberProvider.d.ts","sourceRoot":"","sources":["../../../../src/visualizations/chart/scrubber/ScrubberProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAOpD,OAAO,EAAmB,KAAK,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAI9E,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,CAAC,GAAG;IAC3F,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B;;OAEG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;OAGG;IACH,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CAChE,CAAC;
|
|
1
|
+
{"version":3,"file":"ScrubberProvider.d.ts","sourceRoot":"","sources":["../../../../src/visualizations/chart/scrubber/ScrubberProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAOpD,OAAO,EAAmB,KAAK,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAI9E,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,CAAC,GAAG;IAC3F,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B;;OAEG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;OAGG;IACH,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;CAChE,CAAC;AA4KF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAM5D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bar.d.ts","sourceRoot":"","sources":["../../../../src/visualizations/chart/utils/bar.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"bar.d.ts","sourceRoot":"","sources":["../../../../src/visualizations/chart/utils/bar.ts"],"names":[],"mappings":"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"}
|
|
@@ -97,6 +97,15 @@ export declare const evaluateGradientAtValue: (
|
|
|
97
97
|
dataValue: number,
|
|
98
98
|
scale: SerializableScale | ChartScaleFunction,
|
|
99
99
|
) => string | undefined;
|
|
100
|
+
/**
|
|
101
|
+
* Evaluates the opacity at a specific data value based on gradient stops.
|
|
102
|
+
* Returns undefined when no stops define opacity.
|
|
103
|
+
*/
|
|
104
|
+
export declare const evaluateGradientOpacityAtValue: (
|
|
105
|
+
stops: GradientStop[],
|
|
106
|
+
dataValue: number,
|
|
107
|
+
scale: SerializableScale | ChartScaleFunction,
|
|
108
|
+
) => number | undefined;
|
|
100
109
|
/**
|
|
101
110
|
* Determines the baseline value for the gradient area by finding the value
|
|
102
111
|
* within the axis bounds that is closest to the target baseline.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gradient.d.ts","sourceRoot":"","sources":["../../../../src/visualizations/chart/utils/gradient.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAEL,KAAK,kBAAkB,EAGvB,KAAK,iBAAiB,EACvB,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;;OAGG;IACH,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IACjB;;;OAGG;IACH,KAAK,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,KAAK,YAAY,EAAE,CAAC,CAAC;CAClE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAC1B,UAAU,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,EAC1C,QAAQ,oBAAoB,KAC3B,GAAG,GAAG,GAER,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAC3B,OAAO,YAAY,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,KAAK,YAAY,EAAE,CAAC,EAChE,QAAQ,UAAU,KACjB,YAAY,EAKd,CAAC;AAiEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAI,QAAQ,MAAM,EAAE,SAAS,MAAM,KAAG,MAGrE,CAAC;
|
|
1
|
+
{"version":3,"file":"gradient.d.ts","sourceRoot":"","sources":["../../../../src/visualizations/chart/utils/gradient.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAEL,KAAK,kBAAkB,EAGvB,KAAK,iBAAiB,EACvB,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;;OAGG;IACH,IAAI,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IACjB;;;OAGG;IACH,KAAK,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,KAAK,YAAY,EAAE,CAAC,CAAC;CAClE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GAC1B,UAAU,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,EAC1C,QAAQ,oBAAoB,KAC3B,GAAG,GAAG,GAER,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAC3B,OAAO,YAAY,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,KAAK,YAAY,EAAE,CAAC,EAChE,QAAQ,UAAU,KACjB,YAAY,EAKd,CAAC;AAiEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAI,QAAQ,MAAM,EAAE,SAAS,MAAM,KAAG,MAGrE,CAAC;AAiGF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,iBAAiB,GAC5B,UAAU,kBAAkB,EAC5B,QAAQ,kBAAkB,EAC1B,QAAQ,kBAAkB,EAC1B,QAAQ,oBAAoB,KAC3B,YAAY,EAAE,GAAG,SAsBnB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,GAClC,OAAO,YAAY,EAAE,EACrB,WAAW,MAAM,EACjB,OAAO,iBAAiB,GAAG,kBAAkB,KAC5C,MAAM,GAAG,SAUX,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,8BAA8B,GACzC,OAAO,YAAY,EAAE,EACrB,WAAW,MAAM,EACjB,OAAO,iBAAiB,GAAG,kBAAkB,KAC5C,MAAM,GAAG,SAgBX,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,GAAI,YAAY,UAAU,EAAE,WAAU,MAAU,KAAG,MAc1E,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,cAAc,GACzB,YAAY,UAAU,EACtB,eAAe,MAAM,EACrB,MAAM,MAAM,EACZ,aAAa,MAAM,EACnB,iBAAiB,MAAM,EACvB,OAAM,GAAG,GAAG,GAAS,KACpB,kBA0BF,CAAC"}
|
|
@@ -2,7 +2,7 @@ const _excluded = ["ref", "type", "options", "value", "onChange", "open", "place
|
|
|
2
2
|
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
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, useCallback, useMemo } from 'react';
|
|
5
|
-
import {
|
|
5
|
+
import { TouchableOpacity } from 'react-native';
|
|
6
6
|
import { useInputVariant } from '@coinbase/cds-common/hooks/useInputVariant';
|
|
7
7
|
import { InputChip } from '../../chips/InputChip';
|
|
8
8
|
import { HelperText } from '../../controls/HelperText';
|
|
@@ -266,6 +266,7 @@ export const DefaultSelectControlComponent = /*#__PURE__*/memo(_ref => {
|
|
|
266
266
|
disabled: disabled,
|
|
267
267
|
onBlur: onBlur != null ? onBlur : undefined,
|
|
268
268
|
onFocus: onFocus != null ? onFocus : undefined,
|
|
269
|
+
activeOpacity: 1,
|
|
269
270
|
onPress: handleToggleOpen,
|
|
270
271
|
style: [{
|
|
271
272
|
flexGrow: 1
|
|
@@ -315,21 +316,17 @@ export const DefaultSelectControlComponent = /*#__PURE__*/memo(_ref => {
|
|
|
315
316
|
})
|
|
316
317
|
})
|
|
317
318
|
}), [ref, accessibilityHint, computedControlAccessibilityLabel, disabled, onBlur, onFocus, styles == null ? void 0 : styles.controlInputNode, styles == null ? void 0 : styles.controlStartNode, styles == null ? void 0 : styles.controlValueNode, startNode, insideHorizontalLabel, insideVerticalLabel, inlineLabelNode, valueAlignment, valueNode, contentNode, handleToggleOpen]);
|
|
318
|
-
const endNode = useMemo(() => /*#__PURE__*/_jsx(
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
children: customEndNode ? customEndNode : /*#__PURE__*/_jsx(AnimatedCaret, {
|
|
328
|
-
color: "fg",
|
|
329
|
-
rotate: open ? 0 : 180
|
|
330
|
-
})
|
|
319
|
+
const endNode = useMemo(() => /*#__PURE__*/_jsx(HStack, {
|
|
320
|
+
alignItems: "center",
|
|
321
|
+
alignSelf: "stretch",
|
|
322
|
+
flexShrink: 0,
|
|
323
|
+
paddingStart: 2,
|
|
324
|
+
style: styles == null ? void 0 : styles.controlEndNode,
|
|
325
|
+
children: customEndNode ? customEndNode : /*#__PURE__*/_jsx(AnimatedCaret, {
|
|
326
|
+
color: "fg",
|
|
327
|
+
rotate: open ? 0 : 180
|
|
331
328
|
})
|
|
332
|
-
}), [styles == null ? void 0 : styles.controlEndNode,
|
|
329
|
+
}), [styles == null ? void 0 : styles.controlEndNode, customEndNode, open]);
|
|
333
330
|
const inputStackStyles = useMemo(() => {
|
|
334
331
|
let verticalSpace;
|
|
335
332
|
if (insideVerticalLabel) {
|
|
@@ -370,6 +367,8 @@ export const DefaultSelectControlComponent = /*#__PURE__*/memo(_ref => {
|
|
|
370
367
|
input: inputStackStyles
|
|
371
368
|
},
|
|
372
369
|
variant: variant
|
|
373
|
-
}, props
|
|
370
|
+
}, props, {
|
|
371
|
+
onFieldPress: handleToggleOpen
|
|
372
|
+
}));
|
|
374
373
|
});
|
|
375
374
|
export const DefaultSelectControl = DefaultSelectControlComponent;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const _excluded = ["width", "prependNode", "endNode", "appendNode", "startNode", "disabled", "inputNode", "helperTextNode", "borderStyle", "variant", "labelNode", "testID", "borderRadius", "borderFocusedStyle", "focused", "enableColorSurge", "labelVariant", "inputBackground", "borderWidth", "focusedBorderWidth", "styles", "style"];
|
|
1
|
+
const _excluded = ["width", "prependNode", "endNode", "appendNode", "startNode", "disabled", "inputNode", "helperTextNode", "borderStyle", "variant", "labelNode", "testID", "borderRadius", "borderFocusedStyle", "focused", "enableColorSurge", "labelVariant", "inputBackground", "borderWidth", "focusedBorderWidth", "onFieldPress", "styles", "style"];
|
|
2
2
|
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
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';
|
|
@@ -11,7 +11,8 @@ import { useTheme } from '../hooks/useTheme';
|
|
|
11
11
|
import { HStack } from '../layout/HStack';
|
|
12
12
|
import { VStack } from '../layout/VStack';
|
|
13
13
|
import { ColorSurge } from '../motion/ColorSurge';
|
|
14
|
-
import {
|
|
14
|
+
import { Pressable } from '../system/Pressable';
|
|
15
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
15
16
|
const variantColorMap = {
|
|
16
17
|
primary: 'fgPrimary',
|
|
17
18
|
positive: 'fgPositive',
|
|
@@ -44,6 +45,7 @@ export const InputStack = /*#__PURE__*/memo(function InputStack(_props) {
|
|
|
44
45
|
inputBackground = 'bg',
|
|
45
46
|
borderWidth = 100,
|
|
46
47
|
focusedBorderWidth = borderWidth,
|
|
48
|
+
onFieldPress,
|
|
47
49
|
styles,
|
|
48
50
|
style
|
|
49
51
|
} = mergedProps,
|
|
@@ -99,6 +101,26 @@ export const InputStack = /*#__PURE__*/memo(function InputStack(_props) {
|
|
|
99
101
|
const rootStyles = useMemo(() => [style, styles == null ? void 0 : styles.root], [style, styles == null ? void 0 : styles.root]);
|
|
100
102
|
const inputContainerStyles = useMemo(() => [staticStyles.inputAreaContainerStyle, styles == null ? void 0 : styles.inputContainer], [styles == null ? void 0 : styles.inputContainer]);
|
|
101
103
|
const combinedInputAreaStyles = useMemo(() => [inputAreaStyles, styles == null ? void 0 : styles.input], [inputAreaStyles, styles == null ? void 0 : styles.input]);
|
|
104
|
+
const inputArea = /*#__PURE__*/_jsxs(Animated.View, {
|
|
105
|
+
onLayout: onInputAreaLayout,
|
|
106
|
+
style: combinedInputAreaStyles,
|
|
107
|
+
testID: testID && testID + "-input-area",
|
|
108
|
+
children: [focused && enableColorSurge && /*#__PURE__*/_jsx(ColorSurge, {
|
|
109
|
+
background: variant ? variantColorMap[variant] : undefined
|
|
110
|
+
}), !!startNode && /*#__PURE__*/_jsx(_Fragment, {
|
|
111
|
+
children: startNode
|
|
112
|
+
}), !!labelNode && labelVariant === 'inside' ?
|
|
113
|
+
/*#__PURE__*/
|
|
114
|
+
// A stacked inside label tightens its top/bottom spacing so the label + input still
|
|
115
|
+
// fit the same natural field height an outside label produces.
|
|
116
|
+
_jsxs(VStack, {
|
|
117
|
+
flexGrow: 1,
|
|
118
|
+
paddingY: 0.75,
|
|
119
|
+
children: [labelNode, inputNode]
|
|
120
|
+
}) : inputNode, !!endNode && /*#__PURE__*/_jsx(_Fragment, {
|
|
121
|
+
children: endNode
|
|
122
|
+
})]
|
|
123
|
+
});
|
|
102
124
|
return /*#__PURE__*/_jsxs(VStack, _extends({
|
|
103
125
|
gap: inputStackGap,
|
|
104
126
|
opacity: disabled ? accessibleOpacityDisabled : 1,
|
|
@@ -115,26 +137,17 @@ export const InputStack = /*#__PURE__*/memo(function InputStack(_props) {
|
|
|
115
137
|
style: inputContainerStyles,
|
|
116
138
|
children: [focused && /*#__PURE__*/_jsx(Animated.View, {
|
|
117
139
|
style: borderFocusedStyles
|
|
118
|
-
}), /*#__PURE__*/
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
// fit the same natural field height an outside label produces.
|
|
130
|
-
_jsxs(VStack, {
|
|
131
|
-
flexGrow: 1,
|
|
132
|
-
paddingY: 0.75,
|
|
133
|
-
children: [labelNode, inputNode]
|
|
134
|
-
}) : inputNode, !!endNode && /*#__PURE__*/_jsx(_Fragment, {
|
|
135
|
-
children: endNode
|
|
136
|
-
})]
|
|
137
|
-
})]
|
|
140
|
+
}), onFieldPress ? /*#__PURE__*/_jsx(Pressable, {
|
|
141
|
+
noScaleOnPress: true,
|
|
142
|
+
accessible: false,
|
|
143
|
+
background: "transparent",
|
|
144
|
+
borderColor: "transparent",
|
|
145
|
+
borderWidth: 0,
|
|
146
|
+
disabled: disabled,
|
|
147
|
+
flexGrow: 1,
|
|
148
|
+
onPress: onFieldPress,
|
|
149
|
+
children: inputArea
|
|
150
|
+
}) : inputArea]
|
|
138
151
|
}), !!appendNode && /*#__PURE__*/_jsx(_Fragment, {
|
|
139
152
|
children: appendNode
|
|
140
153
|
})]
|
|
@@ -99,6 +99,8 @@ const EnabledScrubberProvider = _ref => {
|
|
|
99
99
|
pan.failOffsetX([-15, 15]);
|
|
100
100
|
}
|
|
101
101
|
return pan.onStart(function onStart(event) {
|
|
102
|
+
'worklet';
|
|
103
|
+
|
|
102
104
|
runOnJS(handleStartEndHaptics)();
|
|
103
105
|
|
|
104
106
|
// Android does not trigger onUpdate when the gesture starts. This achieves consistent behavior across both iOS and Android
|
|
@@ -110,15 +112,21 @@ const EnabledScrubberProvider = _ref => {
|
|
|
110
112
|
}
|
|
111
113
|
}
|
|
112
114
|
}).onUpdate(function onUpdate(event) {
|
|
115
|
+
'worklet';
|
|
116
|
+
|
|
113
117
|
const pointerPosition = categoryAxisIsX ? event.x : event.y;
|
|
114
118
|
const newScrubberPosition = getDataIndexFromPosition(pointerPosition);
|
|
115
119
|
if (newScrubberPosition !== scrubberPosition.value) {
|
|
116
120
|
scrubberPosition.value = newScrubberPosition;
|
|
117
121
|
}
|
|
118
122
|
}).onEnd(function onEnd() {
|
|
123
|
+
'worklet';
|
|
124
|
+
|
|
119
125
|
runOnJS(handleStartEndHaptics)();
|
|
120
126
|
scrubberPosition.value = undefined;
|
|
121
127
|
}).onTouchesCancelled(function onTouchesCancelled() {
|
|
128
|
+
'worklet';
|
|
129
|
+
|
|
122
130
|
scrubberPosition.value = undefined;
|
|
123
131
|
});
|
|
124
132
|
}, [allowOverflowGestures, handleStartEndHaptics, getDataIndexFromPosition, categoryAxisIsX, scrubberPosition]);
|
|
@@ -2,7 +2,7 @@ const _excluded = ["staggerDelay"];
|
|
|
2
2
|
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
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 { defaultAxisId as fallbackAxisId } from './axis';
|
|
5
|
-
import { evaluateGradientAtValue } from './gradient';
|
|
5
|
+
import { evaluateGradientAtValue, evaluateGradientOpacityAtValue } from './gradient';
|
|
6
6
|
import { defaultTransition } from './transition';
|
|
7
7
|
|
|
8
8
|
/**
|
|
@@ -827,6 +827,7 @@ export function getBars(params) {
|
|
|
827
827
|
const valuePos = Math.min(edgeBottom, edgeTop);
|
|
828
828
|
if (length <= 0) return;
|
|
829
829
|
let barFill = s.color || defaultFill;
|
|
830
|
+
let barFillOpacity = defaultFillOpacity;
|
|
830
831
|
const seriesGradientConfig = seriesGradients.find(g => (g == null ? void 0 : g.seriesId) === s.id);
|
|
831
832
|
if (seriesGradientConfig && originalValue !== null && originalValue !== undefined) {
|
|
832
833
|
var _seriesGradientConfig;
|
|
@@ -841,6 +842,10 @@ export function getBars(params) {
|
|
|
841
842
|
if (evaluatedColor) {
|
|
842
843
|
barFill = evaluatedColor;
|
|
843
844
|
}
|
|
845
|
+
const evaluatedOpacity = evaluateGradientOpacityAtValue(seriesGradientConfig.stops, evalValue, seriesGradientConfig.scale);
|
|
846
|
+
if (evaluatedOpacity !== undefined) {
|
|
847
|
+
barFillOpacity = defaultFillOpacity !== undefined ? defaultFillOpacity * evaluatedOpacity : evaluatedOpacity;
|
|
848
|
+
}
|
|
844
849
|
}
|
|
845
850
|
allBars.push({
|
|
846
851
|
seriesId: s.id,
|
|
@@ -848,6 +853,7 @@ export function getBars(params) {
|
|
|
848
853
|
length,
|
|
849
854
|
dataValue: value,
|
|
850
855
|
fill: barFill,
|
|
856
|
+
fillOpacity: barFillOpacity,
|
|
851
857
|
roundTop,
|
|
852
858
|
roundBottom,
|
|
853
859
|
shouldApplyGap,
|
|
@@ -897,7 +903,7 @@ export function getBars(params) {
|
|
|
897
903
|
dataY: layout === 'vertical' ? bar.dataValue : categoryValue,
|
|
898
904
|
origin: barOrigins[i],
|
|
899
905
|
borderRadius,
|
|
900
|
-
fillOpacity:
|
|
906
|
+
fillOpacity: bar.fillOpacity,
|
|
901
907
|
stroke: defaultStroke,
|
|
902
908
|
strokeWidth: defaultStrokeWidth,
|
|
903
909
|
minSize: initialBarMinSizes[i],
|
|
@@ -90,6 +90,86 @@ export const getColorWithOpacity = (color1, opacity) => {
|
|
|
90
90
|
return "rgba(" + c[0] * 255 + ", " + c[1] * 255 + ", " + c[2] * 255 + ", " + opacity + ")";
|
|
91
91
|
};
|
|
92
92
|
|
|
93
|
+
/**
|
|
94
|
+
* Returns stop indices and blend progress for a data value.
|
|
95
|
+
* When startIndex === endIndex, use that stop directly; otherwise blend with t.
|
|
96
|
+
*/
|
|
97
|
+
const getGradientStopInterpolation = (stops, dataValue, scale) => {
|
|
98
|
+
'worklet';
|
|
99
|
+
|
|
100
|
+
if (stops.length === 0) return;
|
|
101
|
+
|
|
102
|
+
// Determine range based on scale type
|
|
103
|
+
let rangeMin;
|
|
104
|
+
let rangeMax;
|
|
105
|
+
if (isSerializableScale(scale)) {
|
|
106
|
+
// SerializableScale has range as [number, number]
|
|
107
|
+
[rangeMin, rangeMax] = scale.range;
|
|
108
|
+
} else {
|
|
109
|
+
// ChartScaleFunction has range() method
|
|
110
|
+
const scaleRange = scale.range();
|
|
111
|
+
[rangeMin, rangeMax] = Array.isArray(scaleRange) ? scaleRange : [scaleRange, scaleRange]; // fallback for band scales
|
|
112
|
+
}
|
|
113
|
+
const rangeSpan = Math.abs(rangeMax - rangeMin);
|
|
114
|
+
if (rangeSpan === 0) return [0, 0, 0];
|
|
115
|
+
|
|
116
|
+
// Map dataValue through scale to get position
|
|
117
|
+
let dataPosition;
|
|
118
|
+
if (isSerializableScale(scale)) {
|
|
119
|
+
dataPosition = applySerializableScale(dataValue, scale);
|
|
120
|
+
} else {
|
|
121
|
+
const result = scale(dataValue);
|
|
122
|
+
if (result === undefined) return [0, 0, 0];
|
|
123
|
+
dataPosition = result;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Normalize to 0-1 based on range
|
|
127
|
+
const normalizedValue = Math.max(0, Math.min(1, Math.abs(dataPosition - rangeMin) / rangeSpan));
|
|
128
|
+
|
|
129
|
+
// Map stop offsets through scale and normalize to 0-1
|
|
130
|
+
const positions = stops.map(stop => {
|
|
131
|
+
let stopPosition;
|
|
132
|
+
if (isSerializableScale(scale)) {
|
|
133
|
+
stopPosition = applySerializableScale(stop.offset, scale);
|
|
134
|
+
} else {
|
|
135
|
+
const result = scale(stop.offset);
|
|
136
|
+
if (result === undefined) return 0;
|
|
137
|
+
stopPosition = result;
|
|
138
|
+
}
|
|
139
|
+
return Math.max(0, Math.min(1, Math.abs(stopPosition - rangeMin) / rangeSpan));
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
// Find which segment we're in
|
|
143
|
+
if (normalizedValue < positions[0]) return [0, 0, 0];
|
|
144
|
+
const lastIndex = stops.length - 1;
|
|
145
|
+
if (normalizedValue >= positions[lastIndex]) return [lastIndex, lastIndex, 0];
|
|
146
|
+
|
|
147
|
+
// Check if dataValue matches any stop offset exactly (for hard transitions)
|
|
148
|
+
for (let i = 0; i < stops.length; i++) {
|
|
149
|
+
if (dataValue === stops[i].offset) {
|
|
150
|
+
// Found exact match - check if there are multiple stops at this offset (hard transition)
|
|
151
|
+
// Use the LAST stop at this offset for hard transitions
|
|
152
|
+
let lastIndexAtOffset = i;
|
|
153
|
+
while (lastIndexAtOffset + 1 < stops.length && stops[lastIndexAtOffset + 1].offset === stops[i].offset) {
|
|
154
|
+
lastIndexAtOffset++;
|
|
155
|
+
}
|
|
156
|
+
return [lastIndexAtOffset, lastIndexAtOffset, 0];
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Find the segment to interpolate between
|
|
161
|
+
for (let i = 0; i < positions.length - 1; i++) {
|
|
162
|
+
if (normalizedValue >= positions[i] && normalizedValue <= positions[i + 1]) {
|
|
163
|
+
const segmentStart = positions[i];
|
|
164
|
+
const segmentEnd = positions[i + 1];
|
|
165
|
+
if (segmentEnd === segmentStart) return [i, i, 0];
|
|
166
|
+
const t = (normalizedValue - segmentStart) / (segmentEnd - segmentStart);
|
|
167
|
+
return [i, i + 1, t];
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return [0, 0, 0];
|
|
171
|
+
};
|
|
172
|
+
|
|
93
173
|
/**
|
|
94
174
|
* Creates a gradient configuration for SVG components.
|
|
95
175
|
* Processes a GradientDefinition into a renderable GradientConfig.
|
|
@@ -157,82 +237,33 @@ export const getGradientConfig = (gradient, xScale, yScale, layout) => {
|
|
|
157
237
|
export const evaluateGradientAtValue = (stops, dataValue, scale) => {
|
|
158
238
|
'worklet';
|
|
159
239
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
// SerializableScale has range as [number, number]
|
|
167
|
-
[rangeMin, rangeMax] = scale.range;
|
|
168
|
-
} else {
|
|
169
|
-
// ChartScaleFunction has range() method
|
|
170
|
-
const scaleRange = scale.range();
|
|
171
|
-
[rangeMin, rangeMax] = Array.isArray(scaleRange) ? scaleRange : [scaleRange, scaleRange]; // fallback for band scales
|
|
172
|
-
}
|
|
173
|
-
const rangeSpan = Math.abs(rangeMax - rangeMin);
|
|
174
|
-
if (rangeSpan === 0) return stops[0].color;
|
|
175
|
-
|
|
176
|
-
// Map dataValue through scale to get position
|
|
177
|
-
let dataPosition;
|
|
178
|
-
if (isSerializableScale(scale)) {
|
|
179
|
-
dataPosition = applySerializableScale(dataValue, scale);
|
|
180
|
-
} else {
|
|
181
|
-
const result = scale(dataValue);
|
|
182
|
-
if (result === undefined) return stops[0].color;
|
|
183
|
-
dataPosition = result;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
// Normalize to 0-1 based on range
|
|
187
|
-
const normalizedValue = Math.max(0, Math.min(1, Math.abs(dataPosition - rangeMin) / rangeSpan));
|
|
188
|
-
|
|
189
|
-
// Map stop offsets through scale and normalize to 0-1
|
|
190
|
-
const positions = stops.map(stop => {
|
|
191
|
-
let stopPosition;
|
|
192
|
-
if (isSerializableScale(scale)) {
|
|
193
|
-
stopPosition = applySerializableScale(stop.offset, scale);
|
|
194
|
-
} else {
|
|
195
|
-
const result = scale(stop.offset);
|
|
196
|
-
if (result === undefined) return 0;
|
|
197
|
-
stopPosition = result;
|
|
198
|
-
}
|
|
199
|
-
return Math.max(0, Math.min(1, Math.abs(stopPosition - rangeMin) / rangeSpan));
|
|
200
|
-
});
|
|
201
|
-
|
|
202
|
-
// Find which segment we're in
|
|
203
|
-
if (normalizedValue < positions[0]) {
|
|
204
|
-
return stops[0].color;
|
|
205
|
-
}
|
|
206
|
-
if (normalizedValue >= positions[positions.length - 1]) {
|
|
207
|
-
return stops[stops.length - 1].color;
|
|
208
|
-
}
|
|
240
|
+
const interpolation = getGradientStopInterpolation(stops, dataValue, scale);
|
|
241
|
+
if (!interpolation) return;
|
|
242
|
+
const [startIndex, endIndex, t] = interpolation;
|
|
243
|
+
if (startIndex === endIndex) return stops[startIndex].color;
|
|
244
|
+
return interpolateColor(stops[startIndex].color, stops[endIndex].color, t);
|
|
245
|
+
};
|
|
209
246
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
while (lastIndexAtOffset + 1 < stops.length && stops[lastIndexAtOffset + 1].offset === stops[i].offset) {
|
|
217
|
-
lastIndexAtOffset++;
|
|
218
|
-
}
|
|
219
|
-
return stops[lastIndexAtOffset].color;
|
|
220
|
-
}
|
|
221
|
-
}
|
|
247
|
+
/**
|
|
248
|
+
* Evaluates the opacity at a specific data value based on gradient stops.
|
|
249
|
+
* Returns undefined when no stops define opacity.
|
|
250
|
+
*/
|
|
251
|
+
export const evaluateGradientOpacityAtValue = (stops, dataValue, scale) => {
|
|
252
|
+
'worklet';
|
|
222
253
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
return
|
|
254
|
+
var _stops$startIndex$opa, _stops$endIndex$opaci;
|
|
255
|
+
if (stops.length === 0) return;
|
|
256
|
+
if (stops.every(stop => {
|
|
257
|
+
var _stop$opacity2;
|
|
258
|
+
return ((_stop$opacity2 = stop.opacity) != null ? _stop$opacity2 : 1) === 1;
|
|
259
|
+
})) return;
|
|
260
|
+
const interpolation = getGradientStopInterpolation(stops, dataValue, scale);
|
|
261
|
+
if (!interpolation) return;
|
|
262
|
+
const [startIndex, endIndex, t] = interpolation;
|
|
263
|
+
const startOpacity = (_stops$startIndex$opa = stops[startIndex].opacity) != null ? _stops$startIndex$opa : 1;
|
|
264
|
+
if (startIndex === endIndex) return startOpacity;
|
|
265
|
+
const endOpacity = (_stops$endIndex$opaci = stops[endIndex].opacity) != null ? _stops$endIndex$opaci : 1;
|
|
266
|
+
return startOpacity + (endOpacity - startOpacity) * t;
|
|
236
267
|
};
|
|
237
268
|
|
|
238
269
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@coinbase/cds-mobile",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.17.1",
|
|
4
4
|
"description": "Coinbase Design System - Mobile",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -218,7 +218,7 @@
|
|
|
218
218
|
"react-native-worklets": "0.5.2"
|
|
219
219
|
},
|
|
220
220
|
"dependencies": {
|
|
221
|
-
"@coinbase/cds-common": "^9.
|
|
221
|
+
"@coinbase/cds-common": "^9.17.1",
|
|
222
222
|
"@coinbase/cds-icons": "^5.21.0",
|
|
223
223
|
"@coinbase/cds-illustrations": "^4.48.0",
|
|
224
224
|
"@coinbase/cds-lottie-files": "^3.3.4",
|