dev.cds-web

bởi coinbase

dev.cds-web — một kỹ năng có thể cài đặt cho các tác nhân AI, được xuất bản bởi coinbase/cds.

npx skills add https://github.com/coinbase/cds --skill dev.cds-web

CDS Web Package Guidelines

Component Config Adoption (Web)

Use this guidance when adding ComponentConfigProvider defaults for the specific component you are editing.

Required implementation pattern

  1. Register the component in packages/web/src/core/componentConfig.ts using its *BaseProps:
import type { MyComponentBaseProps } from '../category/MyComponent';

export type ComponentConfig = {
  MyComponent?: ConfigResolver<MyComponentBaseProps>;
};
  1. Adopt useComponentConfig in the component and destructure from merged props:
import { useComponentConfig } from '../hooks/useComponentConfig';

export const MyComponent = memo((_props: MyComponentProps) => {
  const mergedProps = useComponentConfig('MyComponent', _props);
  const { className, style, ...props } = mergedProps;

  return <Box className={className} style={style} {...props} />;
});

Rules to preserve behavior

  • Provider config supplies defaults only; local props must continue to win.
  • Use _props as the input variable and mergedProps as the configured output.
  • Type resolver entries with *BaseProps (not polymorphic/full *Props).
  • Keep scope to prop-level theming defaults; do not alter component behavior or control flow.
  • When practical during the same change, prefer arrow-function component declarations.

CSS with Linaria

Use Linaria for zero-runtime CSS. Always use CDS theme CSS variables for colors, spacing, typography, and other design tokens. Reference packages/web/src/core/theme.ts:53-119 for the CSS variable naming pattern.

import { css, cx } from '@linaria/core';

const containerCss = css`
  /* Spacing tokens */
  padding: var(--space-2);
  gap: var(--space-1);

  /* Color tokens */
  background: var(--color-bgPrimary);
  color: var(--color-fgPrimary);
  border: 1px solid var(--color-line);

  /* Border radius tokens */
  border-radius: var(--borderRadius-400);

  /* Typography tokens */
  font-size: var(--fontSize-body);

  &:hover {
    background: var(--color-bgPrimaryHover);
  }
`;

// Merge classNames with cx utility **in CORRECT ORDER**
<div
  className={cx(
    containerCss, // Base styles first
    isCompact && conditionClassToApply, // Conditional computed styles
    className, // User-provided className prop
    classNames.root, // granular overrides last
  )}
/>;

IMPORTANT: Using CSS variables ensures components respond correctly to theme changes (light/dark mode, brand themes).

CSS Variable Naming

Design tokens from packages/common/src/core/theme.ts map to CSS variables:

  • Colors: --color-{tokenName} (e.g., --color-bgPrimary, --color-fgMuted)
  • Spacing: --space-{scale} (e.g., --space-2 = 16px, --space-3 = 24px)
  • Typography: --fontSize-{font}, --fontWeight-{font}, --lineHeight-{font}, --fontFamily-{font}
  • Border: --borderRadius-{size}, --borderWidth-{size}
  • Sizing: --iconSize-{size}, --avatarSize-{size}, --controlSize-{name}
  • Shadows: --shadow-{level}

Responsive Breakpoints

Reference packages/web/src/styles/media.ts for breakpoint values:

  • phone: 0-767px
  • tablet: 768-1279px
  • desktop: 1280px+

Use the Box component's responsive prop API for responsive values:

<Box padding={{ base: 2, phone: 1, desktop: 3 }} />

Granular classNames

  • Components can expose a classNames object prop for granular overrides on child elements within the component.
  • Since the keys of the classNames object are specific to the component they should never be on the *BaseProps type

data-attributes

  • Use data attributes for state-based styling: data-active, data-disabled, data-variant, data-filled

Inline styles

  • Web components should all expose a style and styles object props for overriding inline styles.
  • As styling is a concern of that specific component, the style and styles props should never be on the *BaseProps type.
  • Styles should be merged into a single object with a useMemo hook and applied in the correct order (default styles => style prop => styles[ELEMENT_NAME] prop).

Example:

type ComponentProps = ComponentBaseProps & {
  style?: React.CSSProperties;
  styles?: { root?: React.CSSProperties; label?: React.CSSProperties };
};

Animation

Use Framer Motion for complex animations:

import { m as motion, AnimatePresence } from 'framer-motion';

<AnimatePresence>
  {visible && (
    <motion.div
      initial={{ opacity: 0, y: -8 }}
      animate={{ opacity: 1, y: 0 }}
      exit={{ opacity: 0, y: -8 }}
    />
  )}
</AnimatePresence>;

For simple transitions, prefer CSS transitions in Linaria.

Accessibility

Use ARIA attributes:

<div role="group" aria-roledescription="carousel" aria-live="polite">
  <button aria-pressed={isActive} tabIndex={isVisible ? 0 : -1} />
</div>
  • Implement keyboard navigation (Arrow keys, Home, End) for interactive components.
  • Provide descriptive labels for all interactive elements
  • Associate form inputs with helper text using aria-describedby
  • Use semantic HTML elements whenever possible
  • Follow WCAG 2.1 AA standards for color contrast
  • Support screen readers by providing descriptive labels and instructions

Web-Specific Props

  • className?: string - CSS class always applied to root element
  • style?: React.CSSProperties - inline styles always applied to root element
  • Polymorphic as prop for element type (where applicable e.g. see Box)

Reference Components

  • Carousel: compound components, imperative handle, context pattern
  • Select (alpha/): generics, controlled/uncontrolled
  • RollingNumber: animation config, measurement patterns

Thêm skills từ coinbase

git.repo-manager
coinbase
git.repo-manager — một kỹ năng có thể cài đặt cho các tác nhân AI, được xuất bản bởi coinbase/cds.
official
agentic-wallet
coinbase
Các thao tác ví tiền điện tử qua CLI awal — đăng nhập, kiểm tra số dư, gửi USDC/ETH/POL/SOL, giao dịch token, nạp tiền vào ví, và sử dụng giao thức thanh toán x402 để…
official
authenticate-wallet
coinbase
Xác thực ví dựa trên OTP qua email với kiểm tra trạng thái và xác thực. Quy trình đăng nhập hai bước: khởi tạo bằng email để nhận mã OTP 6 chữ số, sau đó xác minh với flowId và mã để hoàn tất xác thực. Bao gồm các quy tắc kiểm tra đầu vào cho email, flowId và OTP nhằm ngăn chặn tấn công shell trước khi thực thi lệnh. Cung cấp kiểm tra trạng thái, truy vấn số dư, lấy địa chỉ và truy cập cửa sổ ví thông qua các lệnh CLI đi kèm. Tất cả lệnh đều hỗ trợ đầu ra --json để máy có thể đọc được...
official
fund
coinbase
Nạp USDC vào ví qua Coinbase Onramp hoặc chuyển khoản trực tiếp. Mở giao diện đồng hành cho phép người dùng chọn số tiền định sẵn ($10, $20, $50) hoặc giá trị tùy chỉnh và chọn thanh toán qua Apple Pay, thẻ ghi nợ, chuyển khoản ngân hàng hoặc tài khoản Coinbase. Hỗ trợ nhiều phương thức thanh toán với thời gian xử lý khác nhau: thanh toán ngay lập tức qua thẻ và Apple Pay, 1–3 ngày đối với chuyển khoản ngân hàng ACH. Nạp tiền dưới dạng USDC trên mạng Base; ngoài ra, người dùng có thể gửi USDC trực tiếp đến địa chỉ ví qua npx awal@2.0.3...
official
monetize-service
coinbase
Triển khai một điểm cuối API trả phí mà các tác nhân khác có thể khám phá và thanh toán qua giao thức x402. Tính phí USDC mỗi yêu cầu trên Base bằng giao thức thanh toán HTTP 402; khách hàng thanh toán bằng giao dịch đã ký, không cần khóa API hoặc tài khoản. Tự động đăng ký điểm cuối với x402 Bazaar để các tác nhân khám phá khi bạn khai báo phần mở rộng khám phá. Hỗ trợ nhiều mức giá, tuyến đường ký tự đại diện và nhiều tùy chọn thanh toán cho mỗi điểm cuối bằng phần mềm trung gian Express. Được xây dựng trên @x402/express và @x402/core...
official
pay-for-service
coinbase
Gọi các API trả phí trên Base với thanh toán USDC tự động qua giao thức x402. Thực thi các yêu cầu HTTP (GET, POST, v.v.) đến các điểm cuối hỗ trợ x402 với thanh toán USDC nguyên tử được xử lý tự động. Hỗ trợ tùy chỉnh yêu cầu thông qua phương thức, nội dung JSON, tham số truy vấn và tiêu đề tùy chỉnh. Bao gồm các kiểm soát thanh toán: đặt số tiền USDC tối đa cho mỗi yêu cầu và nhóm các thao tác liên quan với ID tương quan. Yêu cầu xác thực ví và số dư USDC đủ; xác thực tất cả đầu vào của người dùng để ngăn chặn shell...
official
query-blockchain-data
coinbase
Truy vấn dữ liệu onchain blockchain trên Base bằng CDP SQL API qua x402. Sử dụng khi bạn hoặc người dùng muốn xem thông tin onchain về các block đã được giải mã,…
official
query-onchain-data
coinbase
Truy vấn dữ liệu onchain trên Base bằng SQL với thanh toán x402 theo từng truy vấn. Truy cập các sự kiện, giao dịch và khối đã được giải mã qua CoinbaseQL, một phương ngữ SQL dựa trên ClickHouse hỗ trợ joins, CTEs, truy vấn con và các hàm tiêu chuẩn. Ba bảng chính có sẵn: base.events (log hợp đồng thông minh đã giải mã), base.transactions (dữ liệu giao dịch đầy đủ) và base.blocks (siêu dữ liệu khối). Yêu cầu lọc trên các trường được đánh chỉ mục (event_signature, address, block_timestamp) trong truy vấn sự kiện để tránh quét toàn bộ bảng...
official