@1doc/1ds-react

中文文档
2.26.1发布于 2026/11/06TypeScriptCommonJS近 30 天下载 2246

Biblioteca de componentes React do 1DS Design System.

原始使用文档
文档目录10 节
  1. Instalação
  2. Configuração
  3. Uso
  4. Componentes
  5. Ícones
  6. Temas
  7. Tema de marca própria (white-label)
  8. Formulários
  9. Modo touch (densidade)
  10. Toasts

@1doc/1ds-react

Biblioteca de componentes React do 1DS Design System.

📚 Documentação viva (Storybook): https://1dsux.vercel.app

Instalação

pnpm add @1doc/1ds-react @1doc/1ds-tokens

@1doc/1ds-tokens é peerDependency — o app instala e importa os CSS de tokens diretamente (ver abaixo).

Configuração

[!IMPORTANT] Importe o CSS dos tokens no ponto de entrada da aplicação (main.tsx), nesta ordem. Sem esses imports, os componentes ficam sem estilo.

import "@1doc/1ds-tokens/css/primitives.css";
import "@1doc/1ds-tokens/css/semantic.css";
import "@1doc/1ds-tokens/css/theme-1doc.css"; // tema da sua marca (ver Temas)

Os caminhos dist/css/... continuam funcionando, mas prefira os subpaths estáveis css/... acima.

Uso

import { Button } from "@1doc/1ds-react";

function App() {
  return (
    <Button variant="primary" onClick={() => console.log("Click")}>
      Clique aqui
    </Button>
  );
}

Componentes

Accordion · Alert · Avatar/AvatarGroup · Badge · Breadcrumb · Button · Card · Checkbox · Chips · ConfirmDialog · DataTable · DatePicker · Divider · Dropdown · EmptyState · FileInput · Grid · Icon · Input · Link · Logo · Modal · MultiSelect · PageHeader · Pagination · PhoneInput · Portal · ProgressBar · Radio · Select · Skeleton · Spinner · Stepper · Switch · Tabs · Tag · Text · Textarea · TimePicker · Toast/ToastStack · Tooltip

Props e exemplos de cada componente: Storybook (link acima) ou os .d.ts (JSDoc em português em todas as props).

[!NOTE] As interfaces de props são estritas (sem [key: string]: any): typo de prop é erro de compilação. Atributos arbitrários (data-* etc.) não são repassados ao DOM pelos componentes — antes compilavam mas eram silenciosamente descartados; agora o TypeScript avisa.

Ícones

Os ícones internos dos componentes (chevrons, calendário, setas de ordenação, ×, etc.) funcionam out-of-the-box — cada componente importa seus glifos diretamente (tree-shakeable, só o que é usado entra no bundle).

Para ícones do seu app (<Icon icon="...">, startIcon, Tab.icon...), há dois caminhos:

// 1) Recomendado: objeto importado (tree-shakeable, typo = erro de compilação)
import { faHouse } from "@fortawesome/free-solid-svg-icons";
<Icon icon={faHouse} />;

// 2) Por nome (string): exige registrar os ícones na library UMA vez no bootstrap
import { library } from "@1doc/1ds-react";
import { faHouse, faGear } from "@fortawesome/free-solid-svg-icons";
library.add(faHouse, faGear);
<Icon icon="house" />;

[!WARNING] Evite library.add(fas) (pacote inteiro): adiciona ~900 kB ao bundle. Registre apenas os ícones que o app usa, ou prefira objetos importados. Use packs FontAwesome na faixa 6.x (compatível com o svg-core do DS).

Temas

Tema via atributo data-theme no <html>. Utilitários em @1doc/1ds-react: setTheme · getTheme · initTheme · onThemeChange · registerTheme · getAvailableThemes.

MarcaLight (arquivo / setTheme)Dark
1Doctheme-1doc.css / "1doc"theme-1doc-dark.css / "1doc-dark"
Greentheme-1ds-green.css / "1ds-green"theme-1ds-green-dark.css / "1ds-green-dark"
Orangetheme-1ds-orange.css / "1ds-orange"theme-1ds-orange-dark.css / "1ds-orange-dark"
Purpletheme-1ds-purple.css / "1ds-purple"theme-1ds-purple-dark.css / "1ds-purple-dark"
Redtheme-1ds-red.css / "1ds-red"theme-1ds-red-dark.css / "1ds-red-dark"
Yellowtheme-1ds-yellow.css / "1ds-yellow"theme-1ds-yellow-dark.css / "1ds-yellow-dark"

Alto contraste (acessibilidade, fora da matriz de marcas): theme-1doc-high-contrast.css / "1doc-high-contrast" — fundo preto, texto branco, interativo amarelo. O DS não o aplica sozinho; ver a seção "Alto contraste" do README de @1doc/1ds-tokens para seguir prefers-contrast: more.

O CSS do tema escolhido precisa estar importado para o setTheme ter efeito. Todos os temas podem ser carregados juntos (cada um é escopado em [data-theme="..."]) — a troca em runtime é atômica.

Tema de marca própria (white-label)

Crie um CSS com [data-theme="minha-marca"] sobrescrevendo os 25 tokens --umds-theme-* (contrato idêntico aos 12 temas oficiais — o mínimo para a cor de marca são os 4 primary-*), carregue-o após o semantic.css e registre o tema para o utilitário aceitá-lo (validação + persistência):

import { registerTheme, initTheme, setTheme } from "@1doc/1ds-react";

registerTheme("minha-marca");
registerTheme("minha-marca-dark");
initTheme(); // restaura tema persistido (inclusive custom, já registrado)
setTheme("minha-marca");

Formulários

Todos os campos participam do submit nativo (<form> + FormData) via prop name — Select/DatePicker/TimePicker/MultiSelect emitem hidden inputs; PhoneInput emite também {name}_ddi; FileInput mantém os File no input. Contrato de validação uniforme: invalid/errorMessage/helperText (com aria-describedby).

Em viewports ≤640px os campos de texto sobem automaticamente para fonte 16px (evita o zoom do Safari iOS ao focar).

Modo touch (densidade)

Para apps mobile/touch, ative o modo touch — os alvos de toque dos controles interativos (botões, campos, checkboxes, paginação, calendário…) sobem para ≥44px, aumentando controle e espaçamento juntos:

import { setDensity } from "@1doc/1ds-react";

setDensity("touch");   // <html data-density="touch">
setDensity("default"); // volta ao padrão desktop

Elementos inline compactos (Tag, Chips) mantêm o tamanho — em contextos touch, dê espaçamento entre eles no layout.

Toasts

import { ToastStack, toast } from "@1doc/1ds-react";

// 1× na raiz do app:
<ToastStack position="top-right" />;

// em qualquer handler:
toast({ message: "Salvo!", variant: "positive" });

版本与发布记录

@1doc/1ds-react 共发布 28 个版本,首次发布于 2026/03/27;过去 12 个月发布了 28 个版本。

版本发布日期距今
2.26.1latest2026/11/061 天前
2.26.02026/10/2415 天前
2.25.02026/10/2315 天前
2.24.02026/10/2316 天前
2.23.02026/10/2217 天前
2.22.02026/10/2118 天前

关于 @1doc/1ds-react 的常见问题

@1doc/1ds-react 是什么?

Biblioteca de componentes React do 1DS Design System.

如何安装 @1doc/1ds-react?

在项目目录运行 npm install @1doc/1ds-react,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:react(>=18)、react-dom(>=18)、@1doc/1ds-tokens(>=0.8.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@1doc/1ds-react 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@1doc/1ds-react 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@1doc/1ds-react 可以商用吗?

@1doc/1ds-react 使用 未声明 许可。package.json 没有声明许可证。没有许可证的代码默认保留全部权利,商用前请联系作者或查看仓库中的 LICENSE 文件。以上为概括,不构成法律意见,请以许可原文为准。

@1doc/1ds-react 的下载量有多少?

根据 npm 官方下载统计,@1doc/1ds-react 在 2026/10/05 – 2026/11/03 这 30 天内被下载 2,246 次,日均约 75 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@1doc/1ds-react 还在维护吗?

最新版本 2.26.1 发布于 2026/11/06(1 天前);至今共发布 28 个版本,其中过去 12 个月发布了 28 个;首次发布于 2026/03/27。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。