@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 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,EAA6B,gBAAgB,EAAkB,MAAM,cAAc,CAAC;AAe3F,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,8CAsbF,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAoC,6BAA6B,CAAC"}
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;AAK5D,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;CACnC,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,6CAqLrB,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;AAwKF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAM5D,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;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;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,SAyFX,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"}
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 { Pressable, TouchableOpacity } from 'react-native';
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(Pressable, {
319
- accessible: customEndNode ? true : false,
320
- disabled: disabled,
321
- onPress: handleToggleOpen,
322
- children: /*#__PURE__*/_jsx(HStack, {
323
- alignItems: "center",
324
- flexGrow: 1,
325
- paddingStart: 2,
326
- style: styles == null ? void 0 : styles.controlEndNode,
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, disabled, customEndNode, open, handleToggleOpen]);
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 { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
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__*/_jsxs(Animated.View, {
119
- onLayout: onInputAreaLayout,
120
- style: combinedInputAreaStyles,
121
- testID: testID && testID + "-input-area",
122
- children: [focused && enableColorSurge && /*#__PURE__*/_jsx(ColorSurge, {
123
- background: variant ? variantColorMap[variant] : undefined
124
- }), !!startNode && /*#__PURE__*/_jsx(_Fragment, {
125
- children: startNode
126
- }), !!labelNode && labelVariant === 'inside' ?
127
- /*#__PURE__*/
128
- // A stacked inside label tightens its top/bottom spacing so the label + input still
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: defaultFillOpacity,
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
- if (stops.length === 0) return;
161
-
162
- // Determine range based on scale type
163
- let rangeMin;
164
- let rangeMax;
165
- if (isSerializableScale(scale)) {
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
- // Check if dataValue matches any stop offset exactly (for hard transitions)
211
- for (let i = 0; i < stops.length; i++) {
212
- if (dataValue === stops[i].offset) {
213
- // Found exact match - check if there are multiple stops at this offset (hard transition)
214
- // Use the LAST color at this offset for hard transitions
215
- let lastIndexAtOffset = i;
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
- // Find the segment to interpolate between
224
- for (let i = 0; i < positions.length - 1; i++) {
225
- if (normalizedValue >= positions[i] && normalizedValue <= positions[i + 1]) {
226
- const segmentStart = positions[i];
227
- const segmentEnd = positions[i + 1];
228
- if (segmentEnd === segmentStart) {
229
- return stops[i].color;
230
- }
231
- const t = (normalizedValue - segmentStart) / (segmentEnd - segmentStart);
232
- return interpolateColor(stops[i].color, stops[i + 1].color, t);
233
- }
234
- }
235
- return stops[0].color;
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.16.0",
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.16.0",
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",