@coinbase/cds-web 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/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 +27 -21
- package/esm/controls/InputStack.js +3 -1
- package/esm/visualizations/chart/utils/bar.js +8 -2
- package/esm/visualizations/chart/utils/gradient.js +60 -27
- 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 recent 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":"AAAA,OAAO,KAAyD,MAAM,OAAO,CAAC;AAgB9E,OAAO,EAEL,KAAK,kBAAkB,EAGvB,KAAK,UAAU,EAChB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"DefaultSelectControl.d.ts","sourceRoot":"","sources":["../../../src/alpha/select/DefaultSelectControl.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyD,MAAM,OAAO,CAAC;AAgB9E,OAAO,EAEL,KAAK,kBAAkB,EAGvB,KAAK,UAAU,EAChB,MAAM,UAAU,CAAC;AAyDlB,KAAK,wBAAwB,GAAG,CAC9B,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,WAAW,CAAC,CAAC;CAC9B,KACE,KAAK,CAAC,YAAY,CAAC;AAkiBxB,eAAO,MAAM,oBAAoB,EAAoC,wBAAwB,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?: React.MouseEventHandler;
|
|
79
85
|
};
|
|
80
86
|
export type InputStackProps = Omit<
|
|
81
87
|
BoxProps<BoxDefaultElement>,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputStack.d.ts","sourceRoot":"","sources":["../../src/controls/InputStack.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoC,MAAM,OAAO,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAIjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAK1E,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAIzF,OAAO,EAAgB,KAAK,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAoDlF,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAC3C,IAAI,CAAC,qBAAqB,EAAE,aAAa,CAAC,GAAG;IAC3C;;OAEG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC;IACpC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC;IAC3C;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB;;;SAGK;IACL,KAAK,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IAC9B;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,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,YAAY,CAAC,cAAc,CAAC,CAAC;IAC5C;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,YAAY,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IACpC;;;OAGG;IACH,eAAe,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"InputStack.d.ts","sourceRoot":"","sources":["../../src/controls/InputStack.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoC,MAAM,OAAO,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAIjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AAK1E,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAIzF,OAAO,EAAgB,KAAK,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAoDlF,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAC3C,IAAI,CAAC,qBAAqB,EAAE,aAAa,CAAC,GAAG;IAC3C;;OAEG;IACH,WAAW,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC;IACpC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC;IAC3C;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB;;;SAGK;IACL,KAAK,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IAC9B;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,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,YAAY,CAAC,cAAc,CAAC,CAAC;IAC5C;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;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,KAAK,CAAC,iBAAiB,CAAC;CACxC,CAAC;AAEJ,MAAM,MAAM,eAAe,GAAG,IAAI,CAChC,QAAQ,CAAC,iBAAiB,CAAC,EAC3B,OAAO,GAAG,QAAQ,GAAG,cAAc,CACpC,GACC,mBAAmB,GAAG;IACpB,UAAU,CAAC,EAAE;QACX,6BAA6B;QAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd;;;WAGG;QACH,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,iCAAiC;QACjC,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,MAAM,CAAC,EAAE;QACP,6BAA6B;QAC7B,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QAC3B,yCAAyC;QACzC,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QACrC,iCAAiC;QACjC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;KAC7B,CAAC;CACH,CAAC;AAEJ,eAAO,MAAM,UAAU,6FA4ItB,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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"}
|
|
@@ -49,6 +49,15 @@ export declare const evaluateGradientAtValue: (
|
|
|
49
49
|
dataValue: number,
|
|
50
50
|
scale: ChartScaleFunction,
|
|
51
51
|
) => string | undefined;
|
|
52
|
+
/**
|
|
53
|
+
* Evaluates the opacity at a specific data value based on gradient stops.
|
|
54
|
+
* Returns undefined when no stops define opacity.
|
|
55
|
+
*/
|
|
56
|
+
export declare const evaluateGradientOpacityAtValue: (
|
|
57
|
+
stops: GradientStop[],
|
|
58
|
+
dataValue: number,
|
|
59
|
+
scale: ChartScaleFunction,
|
|
60
|
+
) => number | undefined;
|
|
52
61
|
/**
|
|
53
62
|
* Creates a gradient configuration for SVG components.
|
|
54
63
|
* Processes a GradientDefinition into a renderable GradientConfig.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gradient.d.ts","sourceRoot":"","sources":["../../../../src/visualizations/chart/utils/gradient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,KAAK,kBAAkB,EAAsB,MAAM,SAAS,CAAC;AAEtE;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,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;
|
|
1
|
+
{"version":3,"file":"gradient.d.ts","sourceRoot":"","sources":["../../../../src/visualizations/chart/utils/gradient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,KAAK,kBAAkB,EAAsB,MAAM,SAAS,CAAC;AAEtE;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,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;AAuIF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,GAClC,OAAO,YAAY,EAAE,EACrB,WAAW,MAAM,EACjB,OAAO,kBAAkB,KACxB,MAAM,GAAG,SAcX,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,8BAA8B,GACzC,OAAO,YAAY,EAAE,EACrB,WAAW,MAAM,EACjB,OAAO,kBAAkB,KACxB,MAAM,GAAG,SAcX,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,iBAAiB,GAC5B,UAAU,kBAAkB,EAC5B,QAAQ,kBAAkB,EAC1B,QAAQ,kBAAkB,EAC1B,SAAQ,oBAAiC,KACxC,YAAY,EAAE,GAAG,SAsBnB,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"}
|
|
@@ -38,6 +38,16 @@ const multiSelectVerticalSpaceVar = {
|
|
|
38
38
|
// Multi-select value chips always use the compact `xs` size (even at size `l`) so several chips —
|
|
39
39
|
// and a stacked inside label — stay within the field's natural height.
|
|
40
40
|
const multiSelectValueChipSize = 'xs';
|
|
41
|
+
|
|
42
|
+
// Inner control stays the tab stop but must not paint its own hover/press. The
|
|
43
|
+
// field chrome (InputStack Interactable) owns that look so padding and content
|
|
44
|
+
// share one press treatment instead of double-dimming.
|
|
45
|
+
const inertInnerBlendStyles = {
|
|
46
|
+
hoveredBackground: 'rgba(0, 0, 0, 0)',
|
|
47
|
+
hoveredOpacity: 1,
|
|
48
|
+
pressedBackground: 'rgba(0, 0, 0, 0)',
|
|
49
|
+
pressedOpacity: 1
|
|
50
|
+
};
|
|
41
51
|
const noFocusOutlineCss = "noFocusOutlineCss-n1gl6kcn";
|
|
42
52
|
const selectedOptionChipContentCss = "selectedOptionChipContentCss-s1kle8pq";
|
|
43
53
|
const variantColor = {
|
|
@@ -285,7 +295,7 @@ const DefaultSelectControlComponent = /*#__PURE__*/memo(/*#__PURE__*/forwardRef(
|
|
|
285
295
|
"aria-readonly": readOnly,
|
|
286
296
|
as: role === 'combobox' ? 'div' : 'button',
|
|
287
297
|
background: "transparent",
|
|
288
|
-
blendStyles:
|
|
298
|
+
blendStyles: inertInnerBlendStyles,
|
|
289
299
|
borderWidth: 0,
|
|
290
300
|
className: cx(noFocusOutlineCss, classNames === null || classNames === void 0 ? void 0 : classNames.controlInputNode),
|
|
291
301
|
disabled: disabled,
|
|
@@ -293,7 +303,6 @@ const DefaultSelectControlComponent = /*#__PURE__*/memo(/*#__PURE__*/forwardRef(
|
|
|
293
303
|
flexShrink: 1,
|
|
294
304
|
focusable: false,
|
|
295
305
|
minWidth: 0,
|
|
296
|
-
onClick: handleToggleOpen,
|
|
297
306
|
onKeyDown: onKeyDown,
|
|
298
307
|
role: role,
|
|
299
308
|
style: styles === null || styles === void 0 ? void 0 : styles.controlInputNode,
|
|
@@ -359,26 +368,21 @@ const DefaultSelectControlComponent = /*#__PURE__*/memo(/*#__PURE__*/forwardRef(
|
|
|
359
368
|
children: [valueNode, contentNode]
|
|
360
369
|
})
|
|
361
370
|
})]
|
|
362
|
-
}), [computedControlAccessibilityLabel, ariaHaspopup, open, role, interactableBlendStyles, classNames === null || classNames === void 0 ? void 0 : classNames.controlInputNode, classNames === null || classNames === void 0 ? void 0 : classNames.controlStartNode, classNames === null || classNames === void 0 ? void 0 : classNames.controlValueNode, disabled, readOnly, styles === null || styles === void 0 ? void 0 : styles.controlInputNode, styles === null || styles === void 0 ? void 0 : styles.controlStartNode, styles === null || styles === void 0 ? void 0 : styles.controlValueNode, tabIndex, onKeyDown, startNode, insideHorizontalLabel, insideVerticalLabel, inlineLabelNode, align, valueNode, contentNode
|
|
363
|
-
const endNode = useMemo(() => /*#__PURE__*/_jsx(
|
|
371
|
+
}), [computedControlAccessibilityLabel, ariaHaspopup, open, role, interactableBlendStyles, classNames === null || classNames === void 0 ? void 0 : classNames.controlInputNode, classNames === null || classNames === void 0 ? void 0 : classNames.controlStartNode, classNames === null || classNames === void 0 ? void 0 : classNames.controlValueNode, disabled, readOnly, styles === null || styles === void 0 ? void 0 : styles.controlInputNode, styles === null || styles === void 0 ? void 0 : styles.controlStartNode, styles === null || styles === void 0 ? void 0 : styles.controlValueNode, tabIndex, onKeyDown, startNode, insideHorizontalLabel, insideVerticalLabel, inlineLabelNode, align, valueNode, contentNode]);
|
|
372
|
+
const endNode = useMemo(() => /*#__PURE__*/_jsx(HStack, {
|
|
364
373
|
"aria-hidden": true,
|
|
374
|
+
alignItems: "center",
|
|
375
|
+
alignSelf: "stretch",
|
|
376
|
+
className: classNames === null || classNames === void 0 ? void 0 : classNames.controlEndNode,
|
|
365
377
|
flexShrink: 0,
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
height: "100%",
|
|
373
|
-
justifyContent: insideVerticalLabel ? 'flex-end' : undefined,
|
|
374
|
-
paddingStart: 2,
|
|
375
|
-
style: styles === null || styles === void 0 ? void 0 : styles.controlEndNode,
|
|
376
|
-
children: customEndNode ? customEndNode : /*#__PURE__*/_jsx(AnimatedCaret, {
|
|
377
|
-
color: "fg",
|
|
378
|
-
rotate: open ? 0 : 180
|
|
379
|
-
})
|
|
378
|
+
justifyContent: insideVerticalLabel ? 'flex-end' : undefined,
|
|
379
|
+
paddingStart: 2,
|
|
380
|
+
style: styles === null || styles === void 0 ? void 0 : styles.controlEndNode,
|
|
381
|
+
children: customEndNode ? customEndNode : /*#__PURE__*/_jsx(AnimatedCaret, {
|
|
382
|
+
color: "fg",
|
|
383
|
+
rotate: open ? 0 : 180
|
|
380
384
|
})
|
|
381
|
-
}), [classNames === null || classNames === void 0 ? void 0 : classNames.controlEndNode, insideVerticalLabel, styles === null || styles === void 0 ? void 0 : styles.controlEndNode, customEndNode, open
|
|
385
|
+
}), [classNames === null || classNames === void 0 ? void 0 : classNames.controlEndNode, insideVerticalLabel, styles === null || styles === void 0 ? void 0 : styles.controlEndNode, customEndNode, open]);
|
|
382
386
|
const inputStackStyles = useMemo(() => {
|
|
383
387
|
let verticalSpaceVar;
|
|
384
388
|
if (insideVerticalLabel) {
|
|
@@ -398,7 +402,7 @@ const DefaultSelectControlComponent = /*#__PURE__*/memo(/*#__PURE__*/forwardRef(
|
|
|
398
402
|
paddingRight: 'var(--space-2)'
|
|
399
403
|
};
|
|
400
404
|
}, [insideVerticalLabel, resolvedSize, isMultiSelect, hasValue]);
|
|
401
|
-
return /*#__PURE__*/_jsx(InputStack, _objectSpread({
|
|
405
|
+
return /*#__PURE__*/_jsx(InputStack, _objectSpread(_objectSpread({
|
|
402
406
|
ref: ref,
|
|
403
407
|
blendStyles: interactableBlendStyles,
|
|
404
408
|
borderRadius: borderRadius,
|
|
@@ -417,7 +421,9 @@ const DefaultSelectControlComponent = /*#__PURE__*/memo(/*#__PURE__*/forwardRef(
|
|
|
417
421
|
input: inputStackStyles
|
|
418
422
|
},
|
|
419
423
|
variant: variant
|
|
420
|
-
}, props)
|
|
424
|
+
}, props), {}, {
|
|
425
|
+
onFieldPress: handleToggleOpen
|
|
426
|
+
}));
|
|
421
427
|
}));
|
|
422
428
|
export const DefaultSelectControl = DefaultSelectControlComponent;
|
|
423
429
|
import "./DefaultSelectControl.css";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const _excluded = ["width", "prependNode", "endNode", "appendNode", "startNode", "disabled", "inputNode", "helperTextNode", "borderWidth", "focusedBorderWidth", "variant", "labelNode", "testID", "focused", "borderRadius", "height", "disableFocusedStyle", "enableColorSurge", "labelVariant", "blendStyles", "inputBackground", "className", "style", "classNames", "styles"];
|
|
1
|
+
const _excluded = ["width", "prependNode", "endNode", "appendNode", "startNode", "disabled", "inputNode", "helperTextNode", "borderWidth", "focusedBorderWidth", "variant", "labelNode", "testID", "focused", "borderRadius", "height", "disableFocusedStyle", "enableColorSurge", "labelVariant", "blendStyles", "inputBackground", "onFieldPress", "className", "style", "classNames", "styles"];
|
|
2
2
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
3
3
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
4
4
|
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
@@ -55,6 +55,7 @@ export const InputStack = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_props, ref
|
|
|
55
55
|
labelVariant = 'outside',
|
|
56
56
|
blendStyles,
|
|
57
57
|
inputBackground = 'bg',
|
|
58
|
+
onFieldPress,
|
|
58
59
|
className,
|
|
59
60
|
style,
|
|
60
61
|
classNames,
|
|
@@ -122,6 +123,7 @@ export const InputStack = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_props, ref
|
|
|
122
123
|
className: cx(baseCss, focused && persistedFocusCss, classNames === null || classNames === void 0 ? void 0 : classNames.input),
|
|
123
124
|
disabled: disabled,
|
|
124
125
|
height: height,
|
|
126
|
+
onClick: disabled ? undefined : onFieldPress,
|
|
125
127
|
style: _objectSpread(_objectSpread({}, inputAreaStyles), styles === null || styles === void 0 ? void 0 : styles.input),
|
|
126
128
|
testID: "input-interactable-area",
|
|
127
129
|
children: [!!focused && !!enableColorSurge && /*#__PURE__*/_jsx(ColorSurge, {
|
|
@@ -7,7 +7,7 @@ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e =
|
|
|
7
7
|
function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var n = Object.getOwnPropertySymbols(e); for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
|
|
8
8
|
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; }
|
|
9
9
|
import { defaultAxisId as fallbackAxisId } from './axis';
|
|
10
|
-
import { evaluateGradientAtValue } from './gradient';
|
|
10
|
+
import { evaluateGradientAtValue, evaluateGradientOpacityAtValue } from './gradient';
|
|
11
11
|
import { defaultTransition } from './transition';
|
|
12
12
|
|
|
13
13
|
/**
|
|
@@ -869,6 +869,7 @@ export function getBars(params) {
|
|
|
869
869
|
// Skip bars that would have zero or negative height
|
|
870
870
|
if (length <= 0) return;
|
|
871
871
|
let barFill = (_s$color = s.color) !== null && _s$color !== void 0 ? _s$color : defaultFill;
|
|
872
|
+
let barFillOpacity = defaultFillOpacity;
|
|
872
873
|
|
|
873
874
|
// Evaluate gradient if provided (using precomputed stops)
|
|
874
875
|
const seriesGradientConfig = seriesGradients.find(g => (g === null || g === void 0 ? void 0 : g.seriesId) === s.id);
|
|
@@ -887,6 +888,10 @@ export function getBars(params) {
|
|
|
887
888
|
if (evaluatedColor) {
|
|
888
889
|
barFill = evaluatedColor;
|
|
889
890
|
}
|
|
891
|
+
const evaluatedOpacity = evaluateGradientOpacityAtValue(seriesGradientConfig.stops, evalValue, seriesGradientConfig.scale);
|
|
892
|
+
if (evaluatedOpacity !== undefined) {
|
|
893
|
+
barFillOpacity = defaultFillOpacity !== undefined ? defaultFillOpacity * evaluatedOpacity : evaluatedOpacity;
|
|
894
|
+
}
|
|
890
895
|
}
|
|
891
896
|
allBars.push({
|
|
892
897
|
seriesId: s.id,
|
|
@@ -894,6 +899,7 @@ export function getBars(params) {
|
|
|
894
899
|
length,
|
|
895
900
|
dataValue: value,
|
|
896
901
|
fill: barFill,
|
|
902
|
+
fillOpacity: barFillOpacity,
|
|
897
903
|
roundTop,
|
|
898
904
|
roundBottom,
|
|
899
905
|
shouldApplyGap,
|
|
@@ -943,7 +949,7 @@ export function getBars(params) {
|
|
|
943
949
|
dataY: layout === 'vertical' ? bar.dataValue : categoryValue,
|
|
944
950
|
origin: barOrigins[i],
|
|
945
951
|
borderRadius,
|
|
946
|
-
fillOpacity:
|
|
952
|
+
fillOpacity: bar.fillOpacity,
|
|
947
953
|
stroke: defaultStroke,
|
|
948
954
|
strokeWidth: defaultStrokeWidth,
|
|
949
955
|
minSize: initialBarMinSizes[i],
|
|
@@ -63,21 +63,15 @@ const processGradientStops = (stops, scale) => {
|
|
|
63
63
|
}).sort((a, b) => a.offset - b.offset);
|
|
64
64
|
return normalizedStops;
|
|
65
65
|
};
|
|
66
|
+
const GRADIENT_OFFSET_EPSILON = 1e-10;
|
|
66
67
|
|
|
67
68
|
/**
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
* @param dataValue - The data value to evaluate (for band scales, this is the index)
|
|
71
|
-
* @param scale - The scale to use for value mapping (handles log scales correctly)
|
|
72
|
-
* @returns The color string at this data value, or undefined if invalid
|
|
69
|
+
* Returns stop indices and blend progress for a data value.
|
|
70
|
+
* When startIndex === endIndex, use that stop directly; otherwise blend with t.
|
|
73
71
|
*/
|
|
74
|
-
|
|
72
|
+
const getGradientStopInterpolation = (stops, dataValue, scale) => {
|
|
75
73
|
if (stops.length === 0) return;
|
|
76
74
|
|
|
77
|
-
// Use srgb color space to match our linearGradient which uses srgb color space
|
|
78
|
-
// https://www.w3.org/TR/SVG11/painting.html#ColorInterpolationProperty
|
|
79
|
-
const colorSpace = 'srgb';
|
|
80
|
-
|
|
81
75
|
// Use scale to map values to positions (handles log scales correctly)
|
|
82
76
|
// For numeric scales: scale(value) returns pixel position
|
|
83
77
|
// We normalize these positions to 0-1 based on the range
|
|
@@ -85,11 +79,11 @@ export const evaluateGradientAtValue = (stops, dataValue, scale) => {
|
|
|
85
79
|
const [rangeMin, rangeMax] = Array.isArray(scaleRange) ? scaleRange : [scaleRange, scaleRange]; // fallback for band scales
|
|
86
80
|
|
|
87
81
|
const rangeSpan = Math.abs(rangeMax - rangeMin);
|
|
88
|
-
if (rangeSpan === 0) return
|
|
82
|
+
if (rangeSpan === 0) return [0, 0, 0];
|
|
89
83
|
|
|
90
84
|
// Map dataValue through scale to get position
|
|
91
85
|
const dataPosition = scale(dataValue);
|
|
92
|
-
if (dataPosition === undefined) return
|
|
86
|
+
if (dataPosition === undefined) return [0, 0, 0];
|
|
93
87
|
|
|
94
88
|
// Normalize to 0-1 based on range
|
|
95
89
|
const normalizedValue = Math.max(0, Math.min(1, Math.abs(dataPosition - rangeMin) / rangeSpan));
|
|
@@ -98,38 +92,77 @@ export const evaluateGradientAtValue = (stops, dataValue, scale) => {
|
|
|
98
92
|
const positions = stops.map(stop => stop.offset);
|
|
99
93
|
|
|
100
94
|
// Find which segment we're in
|
|
101
|
-
if (normalizedValue < positions[0])
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
if (normalizedValue >= positions[positions.length - 1]) {
|
|
105
|
-
return stops[stops.length - 1].color;
|
|
106
|
-
}
|
|
95
|
+
if (normalizedValue < positions[0]) return [0, 0, 0];
|
|
96
|
+
const lastIndex = stops.length - 1;
|
|
97
|
+
if (normalizedValue >= positions[lastIndex]) return [lastIndex, lastIndex, 0];
|
|
107
98
|
|
|
108
99
|
// Check if normalizedValue matches any stop offset exactly (for hard transitions)
|
|
109
100
|
for (let i = 0; i < stops.length; i++) {
|
|
110
|
-
if (Math.abs(normalizedValue - stops[i].offset) <
|
|
101
|
+
if (Math.abs(normalizedValue - stops[i].offset) < GRADIENT_OFFSET_EPSILON) {
|
|
111
102
|
// Found exact match - check if there are multiple stops at this offset (hard transition)
|
|
112
|
-
// Use the LAST
|
|
103
|
+
// Use the LAST stop at this offset for hard transitions
|
|
113
104
|
let lastIndexAtOffset = i;
|
|
114
|
-
while (lastIndexAtOffset + 1 < stops.length && Math.abs(stops[lastIndexAtOffset + 1].offset - stops[i].offset) <
|
|
105
|
+
while (lastIndexAtOffset + 1 < stops.length && Math.abs(stops[lastIndexAtOffset + 1].offset - stops[i].offset) < GRADIENT_OFFSET_EPSILON) {
|
|
115
106
|
lastIndexAtOffset++;
|
|
116
107
|
}
|
|
117
|
-
return
|
|
108
|
+
return [lastIndexAtOffset, lastIndexAtOffset, 0];
|
|
118
109
|
}
|
|
119
110
|
}
|
|
120
111
|
|
|
121
|
-
// Find the two
|
|
112
|
+
// Find the two stops to mix based on normalized positions
|
|
122
113
|
for (let i = 0; i < positions.length - 1; i++) {
|
|
123
114
|
const start = positions[i];
|
|
124
115
|
const end = positions[i + 1];
|
|
125
116
|
if (normalizedValue >= start && normalizedValue <= end) {
|
|
126
|
-
|
|
127
|
-
|
|
117
|
+
if (end === start) return [i, i, 0];
|
|
118
|
+
const t = (normalizedValue - start) / (end - start);
|
|
119
|
+
return [i, i + 1, t];
|
|
128
120
|
}
|
|
129
121
|
}
|
|
130
122
|
|
|
131
|
-
// If we didn't reach any to be mixed, return the last
|
|
132
|
-
return
|
|
123
|
+
// If we didn't reach any to be mixed, return the last stop
|
|
124
|
+
return [lastIndex, lastIndex, 0];
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Evaluates the color at a specific data value based on the gradient stops, ignoring opacity.
|
|
129
|
+
* @param stops - The gradient stops configuration
|
|
130
|
+
* @param dataValue - The data value to evaluate (for band scales, this is the index)
|
|
131
|
+
* @param scale - The scale to use for value mapping (handles log scales correctly)
|
|
132
|
+
* @returns The color string at this data value, or undefined if invalid
|
|
133
|
+
*/
|
|
134
|
+
export const evaluateGradientAtValue = (stops, dataValue, scale) => {
|
|
135
|
+
const interpolation = getGradientStopInterpolation(stops, dataValue, scale);
|
|
136
|
+
if (!interpolation) return;
|
|
137
|
+
const [startIndex, endIndex, t] = interpolation;
|
|
138
|
+
|
|
139
|
+
// Use srgb color space to match our linearGradient which uses srgb color space
|
|
140
|
+
// https://www.w3.org/TR/SVG11/painting.html#ColorInterpolationProperty
|
|
141
|
+
const colorSpace = 'srgb';
|
|
142
|
+
if (startIndex === endIndex) return stops[startIndex].color;
|
|
143
|
+
|
|
144
|
+
// Mix colors between the resolved stops
|
|
145
|
+
return "color-mix(in ".concat(colorSpace, ", ").concat(stops[endIndex].color, " ").concat(t * 100, "%, ").concat(stops[startIndex].color, ")");
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Evaluates the opacity at a specific data value based on gradient stops.
|
|
150
|
+
* Returns undefined when no stops define opacity.
|
|
151
|
+
*/
|
|
152
|
+
export const evaluateGradientOpacityAtValue = (stops, dataValue, scale) => {
|
|
153
|
+
var _stops$startIndex$opa, _stops$endIndex$opaci;
|
|
154
|
+
if (stops.length === 0) return;
|
|
155
|
+
if (stops.every(stop => {
|
|
156
|
+
var _stop$opacity2;
|
|
157
|
+
return ((_stop$opacity2 = stop.opacity) !== null && _stop$opacity2 !== void 0 ? _stop$opacity2 : 1) === 1;
|
|
158
|
+
})) return;
|
|
159
|
+
const interpolation = getGradientStopInterpolation(stops, dataValue, scale);
|
|
160
|
+
if (!interpolation) return;
|
|
161
|
+
const [startIndex, endIndex, t] = interpolation;
|
|
162
|
+
const startOpacity = (_stops$startIndex$opa = stops[startIndex].opacity) !== null && _stops$startIndex$opa !== void 0 ? _stops$startIndex$opa : 1;
|
|
163
|
+
if (startIndex === endIndex) return startOpacity;
|
|
164
|
+
const endOpacity = (_stops$endIndex$opaci = stops[endIndex].opacity) !== null && _stops$endIndex$opaci !== void 0 ? _stops$endIndex$opaci : 1;
|
|
165
|
+
return startOpacity + (endOpacity - startOpacity) * t;
|
|
133
166
|
};
|
|
134
167
|
|
|
135
168
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@coinbase/cds-web",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.17.1",
|
|
4
4
|
"description": "Coinbase Design System - Web",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -227,7 +227,7 @@
|
|
|
227
227
|
"react-dom": "^18.0.0 || ~19.1.2"
|
|
228
228
|
},
|
|
229
229
|
"dependencies": {
|
|
230
|
-
"@coinbase/cds-common": "^9.
|
|
230
|
+
"@coinbase/cds-common": "^9.17.1",
|
|
231
231
|
"@coinbase/cds-icons": "^5.21.0",
|
|
232
232
|
"@coinbase/cds-illustrations": "^4.48.0",
|
|
233
233
|
"@coinbase/cds-lottie-files": "^3.3.4",
|