@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 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;AAkGxB,eAAO,MAAM,WAAW,EAA2B,aAAa,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"}
@@ -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 TabsProps<T extends string = string> = {
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> & {
@@ -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,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI;IACjD,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,GAC9B,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"}
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";
@@ -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.20.2",
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.20.2",
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",