@coinbase/cds-web 8.20.2 → 8.21.0
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 +6 -0
- package/dts/alpha/tabbed-chips/TabbedChips.d.ts +85 -0
- package/dts/alpha/tabbed-chips/TabbedChips.d.ts.map +1 -0
- package/dts/chips/TabbedChips.d.ts +3 -0
- package/dts/chips/TabbedChips.d.ts.map +1 -1
- package/dts/tabs/Tabs.d.ts +3 -2
- package/dts/tabs/Tabs.d.ts.map +1 -1
- package/esm/alpha/tabbed-chips/TabbedChips.css +1 -0
- package/esm/alpha/tabbed-chips/TabbedChips.js +145 -0
- package/esm/chips/TabbedChips.js +4 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,12 @@ All notable changes to this project will be documented in this file.
|
|
|
8
8
|
|
|
9
9
|
<!-- template-start -->
|
|
10
10
|
|
|
11
|
+
## 8.21.0 (11/12/2025 PST)
|
|
12
|
+
|
|
13
|
+
#### 🚀 Updates
|
|
14
|
+
|
|
15
|
+
- Deprecate TabbedChips and create new TabbedChips(Alpha), whose props mirror Tabs' props. [[#138](https://github.com/coinbase/cds/pull/138)]
|
|
16
|
+
|
|
11
17
|
## 8.20.2 (11/12/2025 PST)
|
|
12
18
|
|
|
13
19
|
#### 🐞 Fixes
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { SharedAccessibilityProps, SharedProps, ThemeVars } from '@coinbase/cds-common';
|
|
3
|
+
import type { TabValue } from '@coinbase/cds-common/tabs/useTabs';
|
|
4
|
+
import type { ChipProps } from '../../chips/ChipProps';
|
|
5
|
+
import { type HStackDefaultElement, type HStackProps } from '../../layout';
|
|
6
|
+
import { type TabsBaseProps, type TabsProps } from '../../tabs';
|
|
7
|
+
export type TabbedChipProps<T extends string = string> = Omit<ChipProps, 'children' | 'onClick'> &
|
|
8
|
+
TabValue<T> & {
|
|
9
|
+
Component?: React.FC<Omit<ChipProps, 'children'> & TabValue<T>>;
|
|
10
|
+
};
|
|
11
|
+
export type TabbedChipsBaseProps<T extends string = string> = Omit<
|
|
12
|
+
TabsBaseProps<T>,
|
|
13
|
+
| 'TabComponent'
|
|
14
|
+
| 'TabsActiveIndicatorComponent'
|
|
15
|
+
| 'tabs'
|
|
16
|
+
| 'onActiveTabElementChange'
|
|
17
|
+
| 'activeBackground'
|
|
18
|
+
> & {
|
|
19
|
+
TabComponent?: React.FC<TabbedChipProps<T>>;
|
|
20
|
+
TabsActiveIndicatorComponent?: TabsProps<T>['TabsActiveIndicatorComponent'];
|
|
21
|
+
tabs: TabbedChipProps<T>[];
|
|
22
|
+
/**
|
|
23
|
+
* Turn on to use a compact Chip component for each tab.
|
|
24
|
+
* @default false
|
|
25
|
+
*/
|
|
26
|
+
compact?: boolean;
|
|
27
|
+
};
|
|
28
|
+
export type TabbedChipsProps<T extends string = string> = TabbedChipsBaseProps<T> &
|
|
29
|
+
SharedProps &
|
|
30
|
+
SharedAccessibilityProps & {
|
|
31
|
+
background?: ThemeVars.Color;
|
|
32
|
+
previousArrowAccessibilityLabel?: string;
|
|
33
|
+
nextArrowAccessibilityLabel?: string;
|
|
34
|
+
/**
|
|
35
|
+
* The spacing between Tabs
|
|
36
|
+
* @default 1
|
|
37
|
+
*/
|
|
38
|
+
gap?: HStackProps<HStackDefaultElement>['gap'];
|
|
39
|
+
/**
|
|
40
|
+
* The width of the scroll container, defaults to 100% of the parent container
|
|
41
|
+
* If the tabs are wider than the width of the container, paddles will be shown to scroll the tabs.
|
|
42
|
+
* @default 100%
|
|
43
|
+
*/
|
|
44
|
+
width?: HStackProps<HStackDefaultElement>['width'];
|
|
45
|
+
styles?: {
|
|
46
|
+
/**
|
|
47
|
+
* Style applied to the root container.
|
|
48
|
+
*/
|
|
49
|
+
root?: React.CSSProperties;
|
|
50
|
+
/**
|
|
51
|
+
* Style applied to the scroll container.
|
|
52
|
+
*/
|
|
53
|
+
scrollContainer?: React.CSSProperties;
|
|
54
|
+
/**
|
|
55
|
+
* Style applied to the paddle icon buttons.
|
|
56
|
+
*/
|
|
57
|
+
paddle?: React.CSSProperties;
|
|
58
|
+
/**
|
|
59
|
+
* Style applied to the root of the Tabs component.
|
|
60
|
+
*/
|
|
61
|
+
tabs?: React.CSSProperties;
|
|
62
|
+
};
|
|
63
|
+
classNames?: {
|
|
64
|
+
/**
|
|
65
|
+
* Class name applied to the root container.
|
|
66
|
+
*/
|
|
67
|
+
root?: string;
|
|
68
|
+
/**
|
|
69
|
+
* Class name applied to the scroll container.
|
|
70
|
+
*/
|
|
71
|
+
scrollContainer?: string;
|
|
72
|
+
/**
|
|
73
|
+
* Class name applied to the root of the Tabs component.
|
|
74
|
+
*/
|
|
75
|
+
tabs?: string;
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
type TabbedChipsFC = <T extends string = string>(
|
|
79
|
+
props: TabbedChipsProps<T> & {
|
|
80
|
+
ref?: React.ForwardedRef<HTMLElement>;
|
|
81
|
+
},
|
|
82
|
+
) => React.ReactElement;
|
|
83
|
+
export declare const TabbedChips: TabbedChipsFC;
|
|
84
|
+
export {};
|
|
85
|
+
//# sourceMappingURL=TabbedChips.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TabbedChips.d.ts","sourceRoot":"","sources":["../../../src/alpha/tabbed-chips/TabbedChips.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2D,MAAM,OAAO,CAAC;AAChF,OAAO,KAAK,EAAE,wBAAwB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAE7F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAGlE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIvD,OAAO,EAAU,KAAK,oBAAoB,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,SAAS,EACf,MAAM,YAAY,CAAC;AAyCpB,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,UAAU,GAAG,SAAS,CAAC,GAC9F,QAAQ,CAAC,CAAC,CAAC,GAAG;IACZ,SAAS,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;CACjE,CAAC;AAEJ,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,IAAI,CAChE,aAAa,CAAC,CAAC,CAAC,EACd,cAAc,GACd,8BAA8B,GAC9B,MAAM,GACN,0BAA0B,GAC1B,kBAAkB,CACrB,GAAG;IACF,YAAY,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,4BAA4B,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC;IAC5E,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3B;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,oBAAoB,CAAC,CAAC,CAAC,GAC/E,WAAW,GACX,wBAAwB,GAAG;IACzB,UAAU,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC;IAC7B,+BAA+B,CAAC,EAAE,MAAM,CAAC;IACzC,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC;;;OAGG;IACH,GAAG,CAAC,EAAE,WAAW,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAC;IAC/C;;;;OAIG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,CAAC,EAAE;QACP;;WAEG;QACH,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QAC3B;;WAEG;QACH,eAAe,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QACtC;;WAEG;QACH,MAAM,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QAC7B;;WAEG;QACH,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;KAC5B,CAAC;IACF,UAAU,CAAC,EAAE;QACX;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,CAAC;QACd;;WAEG;QACH,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB;;WAEG;QACH,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH,CAAC;AAEJ,KAAK,aAAa,GAAG,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAC7C,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,CAAA;CAAE,KACnE,KAAK,CAAC,YAAY,CAAC;AAuGxB,eAAO,MAAM,WAAW,EAA2B,aAAa,CAAC"}
|
|
@@ -9,6 +9,9 @@ type TabbedChipsFC = <T extends string = string>(
|
|
|
9
9
|
ref?: React.ForwardedRef<HTMLElement>;
|
|
10
10
|
},
|
|
11
11
|
) => React.ReactElement;
|
|
12
|
+
/**
|
|
13
|
+
* @deprecated Use `TabbedChips(Alpha)` instead.
|
|
14
|
+
*/
|
|
12
15
|
export declare const TabbedChips: TabbedChipsFC;
|
|
13
16
|
export {};
|
|
14
17
|
//# sourceMappingURL=TabbedChips.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabbedChips.d.ts","sourceRoot":"","sources":["../../src/chips/TabbedChips.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2D,MAAM,OAAO,CAAC;AAMhF,OAAO,EAAE,KAAK,YAAY,EAAU,MAAM,WAAW,CAAC;AACtD,OAAO,EAAU,KAAK,sBAAsB,EAAQ,MAAM,SAAS,CAAC;AAiCpE,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,YAAY,GACxE,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAE7C,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,oBAAoB,CAAC,CAAC,CAAC,CAAC;AAElF,KAAK,aAAa,GAAG,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAC7C,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,CAAA;CAAE,KACnE,KAAK,CAAC,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"TabbedChips.d.ts","sourceRoot":"","sources":["../../src/chips/TabbedChips.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2D,MAAM,OAAO,CAAC;AAMhF,OAAO,EAAE,KAAK,YAAY,EAAU,MAAM,WAAW,CAAC;AACtD,OAAO,EAAU,KAAK,sBAAsB,EAAQ,MAAM,SAAS,CAAC;AAiCpE,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,YAAY,GACxE,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAE7C,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,oBAAoB,CAAC,CAAC,CAAC,CAAC;AAElF,KAAK,aAAa,GAAG,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EAC7C,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,CAAA;CAAE,KACnE,KAAK,CAAC,YAAY,CAAC;AA2FxB;;GAEG;AACH,eAAO,MAAM,WAAW,EAA2B,aAAa,CAAC"}
|
package/dts/tabs/Tabs.d.ts
CHANGED
|
@@ -18,7 +18,7 @@ export type TabsActiveIndicatorProps = {
|
|
|
18
18
|
MotionProps;
|
|
19
19
|
export type TabComponent<T extends string = string> = React.FC<TabValue<T>>;
|
|
20
20
|
export type TabsActiveIndicatorComponent = React.FC<TabsActiveIndicatorProps>;
|
|
21
|
-
export type
|
|
21
|
+
export type TabsBaseProps<T extends string = string> = {
|
|
22
22
|
/** The array of tabs data. Each tab may optionally define a custom Component to render. */
|
|
23
23
|
tabs: (TabValue<T> & {
|
|
24
24
|
Component?: TabComponent<T>;
|
|
@@ -31,7 +31,8 @@ export type TabsProps<T extends string = string> = {
|
|
|
31
31
|
activeBackground?: ThemeVars.Color;
|
|
32
32
|
/** Optional callback to receive the active tab element. */
|
|
33
33
|
onActiveTabElementChange?: (element: HTMLElement | null) => void;
|
|
34
|
-
} & Omit<TabsOptions<T>, 'tabs'
|
|
34
|
+
} & Omit<TabsOptions<T>, 'tabs'>;
|
|
35
|
+
export type TabsProps<T extends string = string> = TabsBaseProps<T> &
|
|
35
36
|
Omit<HStackProps<HStackDefaultElement>, 'onChange' | 'ref'>;
|
|
36
37
|
type TabsFC = <T extends string = string>(
|
|
37
38
|
props: TabsProps<T> & {
|
package/dts/tabs/Tabs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../src/tabs/Tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiD,MAAM,OAAO,CAAC;AAEtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAIjE,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,QAAQ,EAEd,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAe,KAAK,IAAI,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAe,KAAK,WAAW,EAAmB,MAAM,eAAe,CAAC;AAE/E,OAAO,EAAO,KAAK,iBAAiB,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAU,KAAK,oBAAoB,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAkBvF,eAAO,MAAM,oBAAoB;;;;;;CAMF,CAAC;AAEhC,MAAM,MAAM,wBAAwB,GAAG;IACrC,aAAa,EAAE,IAAI,CAAC;CACrB,GAAG,QAAQ,CAAC,iBAAiB,CAAC,GAC7B,WAAW,CAAC;AAEd,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5E,MAAM,MAAM,4BAA4B,GAAG,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAAC,CAAC;AAE9E,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../src/tabs/Tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiD,MAAM,OAAO,CAAC;AAEtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAIjE,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,QAAQ,EAEd,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAe,KAAK,IAAI,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAe,KAAK,WAAW,EAAmB,MAAM,eAAe,CAAC;AAE/E,OAAO,EAAO,KAAK,iBAAiB,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAU,KAAK,oBAAoB,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAkBvF,eAAO,MAAM,oBAAoB;;;;;;CAMF,CAAC;AAEhC,MAAM,MAAM,wBAAwB,GAAG;IACrC,aAAa,EAAE,IAAI,CAAC;CACrB,GAAG,QAAQ,CAAC,iBAAiB,CAAC,GAC7B,WAAW,CAAC;AAEd,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAE5E,MAAM,MAAM,4BAA4B,GAAG,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAAC,CAAC;AAE9E,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI;IACrD,2FAA2F;IAC3F,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG;QAAE,SAAS,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAA;KAAE,CAAC,EAAE,CAAC;IACxD,gDAAgD;IAChD,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IAC9B,iEAAiE;IACjE,4BAA4B,EAAE,4BAA4B,CAAC;IAC3D,mEAAmE;IACnE,gBAAgB,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC;IACnC,2DAA2D;IAC3D,wBAAwB,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;CAClE,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAEjC,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC,GACjE,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,EAAE,UAAU,GAAG,KAAK,CAAC,CAAC;AAE9D,KAAK,MAAM,GAAG,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,EACtC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,CAAA;CAAE,KAC5D,KAAK,CAAC,YAAY,CAAC;AA0FxB,eAAO,MAAM,IAAI,EAAoB,MAAM,CAAC;AAE5C,eAAO,MAAM,mBAAmB,GAAI,uCAIjC,wBAAwB,mDAgB1B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@layer cds{.scrollContainerCss-sb6ypby{-webkit-scrollbar-width:none;-moz-scrollbar-width:none;-ms-scrollbar-width:none;scrollbar-width:none;}.scrollContainerCss-sb6ypby::-webkit-scrollbar{display:none;}}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
const _excluded = ["label", "id"],
|
|
2
|
+
_excluded2 = ["tabs", "activeTab", "onChange", "TabComponent", "testID", "background", "gap", "previousArrowAccessibilityLabel", "nextArrowAccessibilityLabel", "width", "TabsActiveIndicatorComponent", "disabled", "compact", "styles", "classNames"];
|
|
3
|
+
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; }
|
|
4
|
+
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; }
|
|
5
|
+
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; }
|
|
6
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
7
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
8
|
+
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; }
|
|
9
|
+
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; }
|
|
10
|
+
import React, { forwardRef, memo, useCallback, useMemo, useState } from 'react';
|
|
11
|
+
import { useTabsContext } from '@coinbase/cds-common/tabs/TabsContext';
|
|
12
|
+
import { MediaChip } from '../../chips/MediaChip';
|
|
13
|
+
import { cx } from '../../cx';
|
|
14
|
+
import { useHorizontalScrollToTarget } from '../../hooks/useHorizontalScrollToTarget';
|
|
15
|
+
import { HStack } from '../../layout';
|
|
16
|
+
import { Paddle, Tabs } from '../../tabs';
|
|
17
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
18
|
+
const scrollContainerCss = "scrollContainerCss-sb6ypby";
|
|
19
|
+
const DefaultTabComponent = _ref => {
|
|
20
|
+
let {
|
|
21
|
+
label = '',
|
|
22
|
+
id
|
|
23
|
+
} = _ref,
|
|
24
|
+
tabProps = _objectWithoutProperties(_ref, _excluded);
|
|
25
|
+
const {
|
|
26
|
+
activeTab,
|
|
27
|
+
updateActiveTab
|
|
28
|
+
} = useTabsContext();
|
|
29
|
+
const isActive = useMemo(() => (activeTab === null || activeTab === void 0 ? void 0 : activeTab.id) === id, [activeTab, id]);
|
|
30
|
+
const handleClick = useCallback(event => {
|
|
31
|
+
event.preventDefault();
|
|
32
|
+
updateActiveTab(id);
|
|
33
|
+
}, [id, updateActiveTab]);
|
|
34
|
+
return /*#__PURE__*/_jsx(MediaChip, _objectSpread(_objectSpread({
|
|
35
|
+
"aria-selected": isActive,
|
|
36
|
+
invertColorScheme: isActive,
|
|
37
|
+
onClick: handleClick,
|
|
38
|
+
role: "tab",
|
|
39
|
+
width: "max-content"
|
|
40
|
+
}, tabProps), {}, {
|
|
41
|
+
children: label
|
|
42
|
+
}));
|
|
43
|
+
};
|
|
44
|
+
const DefaultTabsActiveIndicatorComponent = () => {
|
|
45
|
+
return null;
|
|
46
|
+
};
|
|
47
|
+
const TabbedChipsComponent = /*#__PURE__*/memo(/*#__PURE__*/forwardRef(function TabbedChips(_ref2, ref) {
|
|
48
|
+
let {
|
|
49
|
+
tabs,
|
|
50
|
+
activeTab,
|
|
51
|
+
onChange,
|
|
52
|
+
TabComponent = DefaultTabComponent,
|
|
53
|
+
testID,
|
|
54
|
+
background = 'bg',
|
|
55
|
+
gap = 1,
|
|
56
|
+
previousArrowAccessibilityLabel = 'Previous',
|
|
57
|
+
nextArrowAccessibilityLabel = 'Next',
|
|
58
|
+
width = '100%',
|
|
59
|
+
TabsActiveIndicatorComponent = DefaultTabsActiveIndicatorComponent,
|
|
60
|
+
disabled,
|
|
61
|
+
compact,
|
|
62
|
+
styles,
|
|
63
|
+
classNames
|
|
64
|
+
} = _ref2,
|
|
65
|
+
accessibilityProps = _objectWithoutProperties(_ref2, _excluded2);
|
|
66
|
+
const [scrollTarget, setScrollTarget] = useState(null);
|
|
67
|
+
const {
|
|
68
|
+
scrollRef,
|
|
69
|
+
isScrollContentOffscreenLeft,
|
|
70
|
+
isScrollContentOffscreenRight,
|
|
71
|
+
handleScroll
|
|
72
|
+
} = useHorizontalScrollToTarget({
|
|
73
|
+
activeTarget: scrollTarget,
|
|
74
|
+
scrollPadding: 50
|
|
75
|
+
});
|
|
76
|
+
const handleScrollLeft = useCallback(() => {
|
|
77
|
+
var _scrollRef$current;
|
|
78
|
+
scrollRef === null || scrollRef === void 0 || (_scrollRef$current = scrollRef.current) === null || _scrollRef$current === void 0 || _scrollRef$current.scrollTo({
|
|
79
|
+
left: 0,
|
|
80
|
+
behavior: 'smooth'
|
|
81
|
+
});
|
|
82
|
+
}, [scrollRef]);
|
|
83
|
+
const handleScrollRight = useCallback(() => {
|
|
84
|
+
if (!scrollRef.current) return;
|
|
85
|
+
const maxScroll = scrollRef.current.scrollWidth - scrollRef.current.clientWidth;
|
|
86
|
+
scrollRef.current.scrollTo({
|
|
87
|
+
left: maxScroll,
|
|
88
|
+
behavior: 'smooth'
|
|
89
|
+
});
|
|
90
|
+
}, [scrollRef]);
|
|
91
|
+
const TabComponentWithCompact = useCallback(props => {
|
|
92
|
+
return /*#__PURE__*/_jsx(TabComponent, _objectSpread({
|
|
93
|
+
compact: compact
|
|
94
|
+
}, props));
|
|
95
|
+
}, [TabComponent, compact]);
|
|
96
|
+
return /*#__PURE__*/_jsxs(HStack, {
|
|
97
|
+
alignItems: "center",
|
|
98
|
+
className: classNames === null || classNames === void 0 ? void 0 : classNames.root,
|
|
99
|
+
position: "relative",
|
|
100
|
+
style: styles === null || styles === void 0 ? void 0 : styles.root,
|
|
101
|
+
testID: testID,
|
|
102
|
+
width: width,
|
|
103
|
+
children: [/*#__PURE__*/_jsx(Paddle, {
|
|
104
|
+
accessibilityLabel: previousArrowAccessibilityLabel,
|
|
105
|
+
background: background,
|
|
106
|
+
direction: "left",
|
|
107
|
+
onClick: handleScrollLeft,
|
|
108
|
+
paddleStyle: styles === null || styles === void 0 ? void 0 : styles.paddle,
|
|
109
|
+
show: isScrollContentOffscreenLeft,
|
|
110
|
+
variant: "secondary"
|
|
111
|
+
}), /*#__PURE__*/_jsx(HStack, {
|
|
112
|
+
ref: scrollRef,
|
|
113
|
+
alignItems: "center",
|
|
114
|
+
className: cx(scrollContainerCss, classNames === null || classNames === void 0 ? void 0 : classNames.scrollContainer),
|
|
115
|
+
onScroll: handleScroll,
|
|
116
|
+
overflow: "auto",
|
|
117
|
+
style: styles === null || styles === void 0 ? void 0 : styles.scrollContainer,
|
|
118
|
+
children: /*#__PURE__*/_jsx(Tabs, _objectSpread({
|
|
119
|
+
ref: ref,
|
|
120
|
+
TabComponent: TabComponentWithCompact,
|
|
121
|
+
TabsActiveIndicatorComponent: DefaultTabsActiveIndicatorComponent,
|
|
122
|
+
activeTab: activeTab || null,
|
|
123
|
+
background: background,
|
|
124
|
+
className: classNames === null || classNames === void 0 ? void 0 : classNames.tabs,
|
|
125
|
+
disabled: disabled,
|
|
126
|
+
gap: gap,
|
|
127
|
+
onActiveTabElementChange: setScrollTarget,
|
|
128
|
+
onChange: onChange,
|
|
129
|
+
style: styles === null || styles === void 0 ? void 0 : styles.tabs,
|
|
130
|
+
tabs: tabs
|
|
131
|
+
}, accessibilityProps))
|
|
132
|
+
}), /*#__PURE__*/_jsx(Paddle, {
|
|
133
|
+
accessibilityLabel: nextArrowAccessibilityLabel,
|
|
134
|
+
background: background,
|
|
135
|
+
direction: "right",
|
|
136
|
+
onClick: handleScrollRight,
|
|
137
|
+
paddleStyle: styles === null || styles === void 0 ? void 0 : styles.paddle,
|
|
138
|
+
show: isScrollContentOffscreenRight,
|
|
139
|
+
variant: "secondary"
|
|
140
|
+
})]
|
|
141
|
+
});
|
|
142
|
+
}));
|
|
143
|
+
TabbedChipsComponent.displayName = 'TabbedChips';
|
|
144
|
+
export const TabbedChips = TabbedChipsComponent;
|
|
145
|
+
import "./TabbedChips.css";
|
package/esm/chips/TabbedChips.js
CHANGED
|
@@ -87,7 +87,6 @@ const TabbedChipsComponent = /*#__PURE__*/memo(/*#__PURE__*/forwardRef(function
|
|
|
87
87
|
}, [scrollRef]);
|
|
88
88
|
return /*#__PURE__*/_jsxs(HStack, _objectSpread(_objectSpread({
|
|
89
89
|
alignItems: "center",
|
|
90
|
-
overflow: "hidden",
|
|
91
90
|
position: "relative",
|
|
92
91
|
testID: testID,
|
|
93
92
|
width: width
|
|
@@ -130,5 +129,9 @@ const TabbedChipsComponent = /*#__PURE__*/memo(/*#__PURE__*/forwardRef(function
|
|
|
130
129
|
}));
|
|
131
130
|
}));
|
|
132
131
|
TabbedChipsComponent.displayName = 'TabbedChips';
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* @deprecated Use `TabbedChips(Alpha)` instead.
|
|
135
|
+
*/
|
|
133
136
|
export const TabbedChips = TabbedChipsComponent;
|
|
134
137
|
import "./TabbedChips.css";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@coinbase/cds-web",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.21.0",
|
|
4
4
|
"description": "Coinbase Design System - Web",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -147,7 +147,7 @@
|
|
|
147
147
|
"react-dom": "^18.3.1"
|
|
148
148
|
},
|
|
149
149
|
"dependencies": {
|
|
150
|
-
"@coinbase/cds-common": "^8.
|
|
150
|
+
"@coinbase/cds-common": "^8.21.0",
|
|
151
151
|
"@coinbase/cds-icons": "^5.5.1",
|
|
152
152
|
"@coinbase/cds-illustrations": "^4.26.1",
|
|
153
153
|
"@coinbase/cds-lottie-files": "^3.3.3",
|