@coinbase/cds-mobile 8.66.2 → 8.67.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.67.0 (5/1/2026 PST)
12
+
13
+ #### 🚀 Updates
14
+
15
+ - Feat: Add legalText prop to PageFooter component. [[#661](https://github.com/coinbase/cds/pull/661)]
16
+
11
17
  ## 8.66.2 ((4/28/2026, 01:06 PM PST))
12
18
 
13
19
  This is an artificial version bump with no new change.
@@ -12,6 +12,10 @@ export type PageFooterBaseProps = SharedProps &
12
12
  * Set the background color of the box.
13
13
  */
14
14
  background?: ThemeVars.Color;
15
+ /**
16
+ * Optional legal text rendered below the action in a pre-styled caption. Centered on mobile.
17
+ */
18
+ legalText?: string;
15
19
  };
16
20
  export type PageFooterProps = PageFooterBaseProps & BoxProps;
17
21
  export declare const PageFooter: React.MemoExoticComponent<
@@ -25,6 +29,10 @@ export declare const PageFooter: React.MemoExoticComponent<
25
29
  * Set the background color of the box.
26
30
  */
27
31
  background?: ThemeVars.Color;
32
+ /**
33
+ * Optional legal text rendered below the action in a pre-styled caption. Centered on mobile.
34
+ */
35
+ legalText?: string;
28
36
  } & import('../styles/styleProps').StyleProps & {
29
37
  children?: React.ReactNode;
30
38
  style?: import('react-native').Animated.WithAnimatedValue<
@@ -1 +1 @@
1
- {"version":3,"file":"PageFooter.d.ts","sourceRoot":"","sources":["../../src/page/PageFooter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2B,MAAM,OAAO,CAAC;AAChD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAG9E,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAC3C,cAAc,GAAG;IACf;+HAC2H;IAC3H,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB;;OAEG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC;CAC9B,CAAC;AAEJ,MAAM,MAAM,eAAe,GAAG,mBAAmB,GAAG,QAAQ,CAAC;AAE7D,eAAO,MAAM,UAAU;IAXnB;+HAC2H;YACnH,KAAK,CAAC,SAAS;IACvB;;OAEG;iBACU,SAAS,CAAC,KAAK;;;;;;;;;;;;;;;;;iFAuB/B,CAAC"}
1
+ {"version":3,"file":"PageFooter.d.ts","sourceRoot":"","sources":["../../src/page/PageFooter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2B,MAAM,OAAO,CAAC;AAChD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAG9E,OAAO,EAAO,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAInD,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAC3C,cAAc,GAAG;IACf;+HAC2H;IAC3H,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB;;OAEG;IACH,UAAU,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC;IAC7B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEJ,MAAM,MAAM,eAAe,GAAG,mBAAmB,GAAG,QAAQ,CAAC;AAE7D,eAAO,MAAM,UAAU;IAfnB;+HAC2H;YACnH,KAAK,CAAC,SAAS;IACvB;;OAEG;iBACU,SAAS,CAAC,KAAK;IAC5B;;OAEG;gBACS,MAAM;;;;;;;;;;;;;;;;;iFAgCrB,CAAC"}
@@ -1,25 +1,36 @@
1
- const _excluded = ["action"];
1
+ const _excluded = ["action", "legalText"];
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, { forwardRef, memo } from 'react';
5
5
  import { pageFooterHeight } from '@coinbase/cds-common/tokens/page';
6
6
  import { useComponentConfig } from '../hooks/useComponentConfig';
7
7
  import { Box } from '../layout/Box';
8
- import { jsx as _jsx } from "react/jsx-runtime";
8
+ import { VStack } from '../layout/VStack';
9
+ import { Text } from '../typography/Text';
10
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
11
  export const PageFooter = /*#__PURE__*/memo(/*#__PURE__*/forwardRef((_props, ref) => {
10
12
  const mergedProps = useComponentConfig('PageFooter', _props);
11
13
  const {
12
- action
14
+ action,
15
+ legalText
13
16
  } = mergedProps,
14
17
  props = _objectWithoutPropertiesLoose(mergedProps, _excluded);
15
18
  return /*#__PURE__*/_jsx(Box, _extends({
16
19
  ref: ref,
17
20
  accessibilityRole: "toolbar",
18
21
  alignItems: "center",
19
- height: pageFooterHeight,
22
+ height: legalText ? undefined : pageFooterHeight,
20
23
  paddingX: 3,
21
24
  paddingY: 1.5
22
25
  }, props, {
23
- children: action
26
+ children: legalText ? /*#__PURE__*/_jsxs(VStack, {
27
+ alignItems: "center",
28
+ gap: 2,
29
+ children: [action, /*#__PURE__*/_jsx(Text, {
30
+ color: "fgMuted",
31
+ font: "legal",
32
+ children: legalText
33
+ })]
34
+ }) : action
24
35
  }));
25
36
  }));
@@ -1,18 +1,61 @@
1
1
  import React from 'react';
2
2
  import { figma } from '@figma/code-connect';
3
+ import { Button } from '../../buttons/Button';
4
+ import { ButtonGroup } from '../../buttons/ButtonGroup';
3
5
  import { PageFooter } from '../PageFooter';
4
- import { jsx as _jsx } from "react/jsx-runtime";
5
- figma.connect(PageFooter, 'https://www.figma.com/design/k5CtyJccNQUGMI5bI4lJ2g/✨-CDS-Components?node-id=17685%3A3266', {
6
- imports: ["import { PageFooter } from '@coinbase/cds-mobile/page/PageFooter'"],
6
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
7
+ const url = 'https://www.figma.com/design/k5CtyJccNQUGMI5bI4lJ2g/✨-CDS-Components?node-id=17685%3A3266';
8
+ figma.connect(PageFooter, url, {
9
+ imports: ["import { PageFooter } from '@coinbase/cds-mobile/page/PageFooter'", "import { Button } from '@coinbase/cds-mobile/buttons/Button'"],
10
+ variant: {
11
+ '# of actions': '1'
12
+ },
7
13
  props: {
8
- action: figma.children('ButtonGroup')
14
+ legalText: figma.boolean('show legal text', {
15
+ true: 'Your legal text here.',
16
+ false: undefined
17
+ })
9
18
  },
10
19
  example: _ref => {
11
20
  let {
12
- action
21
+ legalText
13
22
  } = _ref;
14
23
  return /*#__PURE__*/_jsx(PageFooter, {
15
- action: action
24
+ action: /*#__PURE__*/_jsx(Button, {
25
+ variant: "primary",
26
+ children: "Next"
27
+ }),
28
+ legalText: legalText
29
+ });
30
+ }
31
+ });
32
+ figma.connect(PageFooter, url, {
33
+ imports: ["import { PageFooter } from '@coinbase/cds-mobile/page/PageFooter'", "import { Button } from '@coinbase/cds-mobile/buttons/Button'", "import { ButtonGroup } from '@coinbase/cds-mobile/buttons/ButtonGroup'"],
34
+ variant: {
35
+ '# of actions': '2'
36
+ },
37
+ props: {
38
+ legalText: figma.boolean('show legal text', {
39
+ true: 'Your legal text here.',
40
+ false: undefined
41
+ })
42
+ },
43
+ example: _ref2 => {
44
+ let {
45
+ legalText
46
+ } = _ref2;
47
+ return /*#__PURE__*/_jsx(PageFooter, {
48
+ action: /*#__PURE__*/_jsxs(ButtonGroup, {
49
+ block: true,
50
+ children: [/*#__PURE__*/_jsx(Button, {
51
+ variant: "secondary",
52
+ children: "Back"
53
+ }), /*#__PURE__*/_jsx(Button, {
54
+ variant: "primary",
55
+ children: "Next"
56
+ })]
57
+ }),
58
+ legalText: legalText
16
59
  });
17
60
  }
18
61
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coinbase/cds-mobile",
3
- "version": "8.66.2",
3
+ "version": "8.67.0",
4
4
  "description": "Coinbase Design System - Mobile",
5
5
  "repository": {
6
6
  "type": "git",
@@ -196,7 +196,7 @@
196
196
  "react-native-svg": "^14.1.0"
197
197
  },
198
198
  "dependencies": {
199
- "@coinbase/cds-common": "^8.66.2",
199
+ "@coinbase/cds-common": "^8.67.0",
200
200
  "@coinbase/cds-icons": "^5.16.0",
201
201
  "@coinbase/cds-illustrations": "^4.38.0",
202
202
  "@coinbase/cds-lottie-files": "^3.3.4",