@codenhub/styles 0.7.0 → 0.9.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/README.es.md +9 -8
- package/README.md +8 -7
- package/README.pt-BR.md +9 -8
- package/dist/aesthetics/chunky-tile.css +1 -1
- package/dist/aesthetics/cyber.css +1 -1
- package/dist/aesthetics/glass.css +1 -1
- package/dist/aesthetics/index.css +2 -2
- package/dist/aesthetics/neobrutalism.css +1 -1
- package/dist/aesthetics/pixel.css +1 -1
- package/dist/aesthetics/sketch.css +1 -1
- package/dist/cli.js +358 -0
- package/dist/components.css +50 -2
- package/dist/index.css +50 -2
- package/dist/index.d.ts +1 -0
- package/dist/native.css +50 -2
- package/dist/palette.css +1 -1
- package/dist/purge/classes.json +1 -0
- package/dist/purge/index.css +50 -0
- package/dist/theme.css +2 -2
- package/docs/accessibility.md +46 -27
- package/docs/changelog/0.8.0.md +70 -0
- package/docs/changelog/0.9.0.md +40 -0
- package/docs/changelog/index.md +2 -0
- package/docs/es/accessibility.md +47 -28
- package/docs/es/index.md +4 -3
- package/docs/es/integrating/index.md +38 -10
- package/docs/es/integrating/tailwind.md +79 -8
- package/docs/es/integrating/without-a-bundler.md +157 -5
- package/docs/es/setup.md +43 -34
- package/docs/es/usage/aesthetics.md +20 -14
- package/docs/es/usage/buttons.md +6 -2
- package/docs/es/usage/composing.md +6 -2
- package/docs/es/usage/content-and-layout.md +10 -4
- package/docs/es/usage/customizing.md +46 -26
- package/docs/es/usage/feedback.md +5 -1
- package/docs/es/usage/forms.md +30 -5
- package/docs/es/usage/index.md +7 -3
- package/docs/es/usage/presets.md +92 -0
- package/docs/es/usage/solo.md +4 -2
- package/docs/es/usage/theming.md +29 -16
- package/docs/es/usage/tooltips.md +2 -2
- package/docs/index.md +3 -2
- package/docs/integrating/index.md +38 -10
- package/docs/integrating/tailwind.md +78 -7
- package/docs/integrating/without-a-bundler.md +156 -4
- package/docs/pt-BR/accessibility.md +47 -28
- package/docs/pt-BR/index.md +4 -3
- package/docs/pt-BR/integrating/index.md +38 -10
- package/docs/pt-BR/integrating/tailwind.md +79 -8
- package/docs/pt-BR/integrating/without-a-bundler.md +157 -5
- package/docs/pt-BR/setup.md +43 -34
- package/docs/pt-BR/usage/aesthetics.md +20 -14
- package/docs/pt-BR/usage/buttons.md +6 -2
- package/docs/pt-BR/usage/composing.md +6 -2
- package/docs/pt-BR/usage/content-and-layout.md +10 -4
- package/docs/pt-BR/usage/customizing.md +46 -26
- package/docs/pt-BR/usage/feedback.md +5 -1
- package/docs/pt-BR/usage/forms.md +30 -5
- package/docs/pt-BR/usage/index.md +7 -3
- package/docs/pt-BR/usage/presets.md +92 -0
- package/docs/pt-BR/usage/solo.md +4 -2
- package/docs/pt-BR/usage/theming.md +22 -9
- package/docs/pt-BR/usage/tooltips.md +2 -2
- package/docs/setup.md +31 -22
- package/docs/usage/aesthetics.md +19 -13
- package/docs/usage/buttons.md +5 -1
- package/docs/usage/composing.md +5 -1
- package/docs/usage/content-and-layout.md +9 -3
- package/docs/usage/customizing.md +45 -25
- package/docs/usage/feedback.md +4 -0
- package/docs/usage/forms.md +29 -4
- package/docs/usage/index.md +6 -2
- package/docs/usage/presets.md +91 -0
- package/docs/usage/solo.md +3 -1
- package/docs/usage/theming.md +21 -8
- package/docs/usage/tooltips.md +1 -1
- package/llms-full.txt +695 -134
- package/llms.txt +3 -2
- package/package.json +117 -65
- package/{dist/tw → tw}/aesthetics/chunky-tile.css +43 -20
- package/{dist/tw → tw}/aesthetics/cyber.css +19 -25
- package/{dist/tw → tw}/aesthetics/glass.css +110 -36
- package/{dist/tw → tw}/aesthetics/neobrutalism.css +41 -21
- package/{dist/tw → tw}/aesthetics/pixel.css +3 -0
- package/tw/aesthetics/sketch.css +435 -0
- package/{dist/tw → tw}/box.css +109 -26
- package/tw/components/button.css +11 -0
- package/tw/components/button.rules.css +187 -0
- package/tw/components/feedback.css +11 -0
- package/{dist/tw/components/feedback.css → tw/components/feedback.rules.css} +156 -33
- package/tw/components/form.css +11 -0
- package/{dist/tw/components/form.css → tw/components/form.rules.css} +584 -141
- package/tw/components/index.css +16 -0
- package/tw/components/rules.css +41 -0
- package/tw/components/surface.css +11 -0
- package/tw/components/surface.rules.css +225 -0
- package/tw/components/tooltip.css +11 -0
- package/{dist/tw/components/tooltip.css → tw/components/tooltip.rules.css} +82 -61
- package/{dist/tw → tw}/corner.css +18 -12
- package/{dist/tw → tw}/elevation.css +27 -21
- package/{dist/tw → tw}/index.css +11 -9
- package/tw/index.d.ts +1 -0
- package/tw/intent.css +312 -0
- package/tw/modifiers.css +127 -0
- package/tw/native.css +323 -0
- package/tw/presentation.css +139 -0
- package/tw/reset.css +10 -0
- package/{dist/tw/reset.css → tw/reset.rules.css} +7 -8
- package/tw/size.css +34 -0
- package/tw/surface.css +9 -0
- package/tw/surface.rules.css +212 -0
- package/{dist/tw → tw}/theme.css +93 -29
- package/tw/typography.css +8 -0
- package/{dist/tw/typography.css → tw/typography.rules.css} +0 -3
- package/{dist/tw → tw}/utilities/content.css +248 -108
- package/tw/utilities/index.css +11 -0
- package/tw/utilities/layout.css +210 -0
- package/tw/utilities/rules.css +8 -0
- package/dist/tw/aesthetics/sketch.css +0 -398
- package/dist/tw/components/button.css +0 -139
- package/dist/tw/components/index.css +0 -35
- package/dist/tw/components/surface.css +0 -184
- package/dist/tw/intent.css +0 -229
- package/dist/tw/native.css +0 -203
- package/dist/tw/palette.css +0 -460
- package/dist/tw/presentation.css +0 -68
- package/dist/tw/surface.css +0 -61
- package/dist/tw/utilities/index.css +0 -6
- package/dist/tw/utilities/layout.css +0 -144
- /package/{dist/tw → tw}/aesthetics/index.css +0 -0
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
title: Tailwind CSS v4
|
|
3
3
|
description: Como usar os entrypoints de código-fonte /tw num projeto com Tailwind CSS v4.
|
|
4
4
|
order: 1
|
|
5
|
-
source:
|
|
5
|
+
source: 4866b77d4cfb1655499f633fff8bf61dde2aa4bb
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Tailwind CSS v4
|
|
9
9
|
|
|
10
|
-
Um projeto que já roda Tailwind CSS v4 pode compilar o código-fonte deste pacote em vez de carregar a saída compilada. Os utilitários da sua aplicação e as classes do pacote saem então de um único build, compartilham um único tema e usam uma única variante `dark:`. Esta página trata do import, das estéticas, dos entrypoints específicos e dos problemas de build que você provavelmente vai encontrar.
|
|
10
|
+
Um projeto que já roda Tailwind CSS v4 pode compilar o código-fonte deste pacote em vez de carregar a saída compilada. Os utilitários da sua aplicação e as classes do pacote saem então de um único build, compartilham um único tema e usam uma única variante `dark:`. Esta página trata do import, das estéticas, dos entrypoints específicos, de como construir seus próprios componentes com `@apply`, de como descartar a paleta do Tailwind e dos problemas de build que você provavelmente vai encontrar.
|
|
11
11
|
|
|
12
12
|
## Por que código-fonte em vez de compilado
|
|
13
13
|
|
|
14
|
-
Os entrypoints `/tw` publicam uma cópia do código-fonte não compilado
|
|
14
|
+
Os entrypoints `/tw` publicam uma cópia do código-fonte não compilado da pasta `tw/` do pacote; o seu próprio build do Tailwind o compila junto com a sua aplicação, então as diretivas `@theme`, `@utility` e `@apply` dele são resolvidas junto com as suas. Os entrypoints compilados (`@codenhub/styles`) continuam funcionando num projeto com Tailwind, mas aí dois pipelines de CSS separados rodam lado a lado em vez de um — use `/tw`, a menos que um motivo específico o descarte.
|
|
15
15
|
|
|
16
16
|
## Importe o entrypoint de código-fonte
|
|
17
17
|
|
|
@@ -23,7 +23,7 @@ Os entrypoints `/tw` publicam uma cópia do código-fonte não compilado de `dis
|
|
|
23
23
|
|
|
24
24
|
O `/tw` importa o próprio Tailwind, então ele substitui o seu `@import "tailwindcss"` em vez de se somar a ele: com os dois, o Preflight do Tailwind é emitido duas vezes. Todos os outros entrypoints `/tw/*` esperam que o seu import venha antes; veja [Usando um entrypoint específico](#usando-um-entrypoint-específico).
|
|
25
25
|
|
|
26
|
-
O Tailwind CSS v4 varre o seu projeto automaticamente — a maioria dos projetos não precisa de nada além do import acima. Os caminhos de `@source` são resolvidos a partir do arquivo CSS que os declara, não da raiz do projeto, então `./src` aqui significa "o `src/` ao lado desta folha de estilos"; ajuste para onde a sua folha de estilos global realmente está. Adicione `@source` só para markup que a varredura automática do Tailwind não alcança sozinha: um caminho excluído por padrão (listado no `.gitignore`, ou dentro de `node_modules` — uma biblioteca de componentes externa, por exemplo) ou, num monorepo, um caminho fora da árvore de diretórios deste arquivo. Aponte para o markup da sua aplicação, não para este pacote
|
|
26
|
+
O Tailwind CSS v4 varre o seu projeto automaticamente — a maioria dos projetos não precisa de nada além do import acima. Os caminhos de `@source` são resolvidos a partir do arquivo CSS que os declara, não da raiz do projeto, então `./src` aqui significa "o `src/` ao lado desta folha de estilos"; ajuste para onde a sua folha de estilos global realmente está. Adicione `@source` só para markup que a varredura automática do Tailwind não alcança sozinha: um caminho excluído por padrão (listado no `.gitignore`, ou dentro de `node_modules` — uma biblioteca de componentes externa, por exemplo) ou, num monorepo, um caminho fora da árvore de diretórios deste arquivo. Aponte para o markup da sua aplicação, não para este pacote: o código-fonte do pacote nomeia todas as classes que ele define, então varrê-lo emite todas elas, quer as suas páginas as usem ou não.
|
|
27
27
|
|
|
28
28
|
## Adicione estéticas
|
|
29
29
|
|
|
@@ -47,6 +47,71 @@ Diferente do `/tw`, os entrypoints específicos e o `/tw/native` não importam o
|
|
|
47
47
|
@import "@codenhub/styles/tw/button";
|
|
48
48
|
```
|
|
49
49
|
|
|
50
|
+
## Construa seus próprios componentes com `@apply`
|
|
51
|
+
|
|
52
|
+
No `/tw`, todo componente, helper e classe de eixo é um utilitário do Tailwind. Isso inclui as intenções (`neutral`, `primary`, `secondary`, `success`, `warning`, `destructive`, `info`), a apresentação (`solid`, `soft`, `ghost`, `edged`, `edgeless`), a elevação (`flat`, `raised`, `floating`), os padrões de canto (`cut-diagonal`, `cut-diagonal-reverse`) e os tamanhos (`sm`, `lg`). Assim, uma classe sua pode carregar uma receita inteira:
|
|
53
|
+
|
|
54
|
+
```css
|
|
55
|
+
@import "@codenhub/styles/tw";
|
|
56
|
+
|
|
57
|
+
@utility btn-save {
|
|
58
|
+
@apply btn primary soft sm;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
@utility btn-danger {
|
|
62
|
+
@apply btn destructive md:lg dark:solid;
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
```html
|
|
67
|
+
<button class="btn-save" type="submit">Salvar</button>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
- **Um componente aplicado se comporta como a classe.** `btn-save` reage ao hover, é pressionado, recebe foco e segue uma estética do mesmo jeito que `class="btn primary soft sm"`.
|
|
71
|
+
- **Variantes funcionam.** `hover:primary`, `md:lg` e `dark:solid` aplicam uma classe de eixo sob essa condição, no seu markup ou dentro do `@apply`.
|
|
72
|
+
- **Escreva a sua classe como `@utility`.** Assim ela fica na camada `utilities`, e os seus outros utilitários no mesmo elemento continuam vencendo. Uma regra simples `.btn-save { @apply … }` também funciona, mas fica sem camada, então o que ela aplica vence todos os utilitários do elemento; [Personalização → Helpers de composição](../usage/customizing.md#helpers-de-composição) tem os detalhes.
|
|
73
|
+
- **Modificadores também se aplicam.** Os modificadores de um componente, como `.tight` no `.stack`, `.icon` no `.btn` ou `.interactive` no `.card`, também são utilitários, então `@apply stack tight`, `@apply btn icon pill` e `md:tight` funcionam. O estado desabilitado é a exceção: continua sendo um atributo ou a classe `.disabled` no markup.
|
|
74
|
+
- **O seu utilitário vence os padrões internos de um componente.** `p-0 text-center` numa célula de `.data-table`, `text-sm` num `.label` e `px-8` num `.btn.sm` são todos aplicados.
|
|
75
|
+
|
|
76
|
+
A página de [Predefinições](../usage/presets.md) compara isso com as outras formas de definir um visual uma única vez.
|
|
77
|
+
|
|
78
|
+
## Descarte a paleta do Tailwind
|
|
79
|
+
|
|
80
|
+
O `/tw` é construído sobre o tema padrão do Tailwind, então os utilitários da paleta do Tailwind, como `bg-red-500`, continuam disponíveis. Se o seu design usa só os tokens do pacote, limpe os tons que você não usa:
|
|
81
|
+
|
|
82
|
+
```css
|
|
83
|
+
@import "@codenhub/styles/tw";
|
|
84
|
+
|
|
85
|
+
@theme {
|
|
86
|
+
--color-red-*: initial;
|
|
87
|
+
--color-orange-*: initial;
|
|
88
|
+
--color-yellow-*: initial;
|
|
89
|
+
--color-lime-*: initial;
|
|
90
|
+
--color-green-*: initial;
|
|
91
|
+
--color-teal-*: initial;
|
|
92
|
+
--color-cyan-*: initial;
|
|
93
|
+
--color-sky-*: initial;
|
|
94
|
+
--color-blue-*: initial;
|
|
95
|
+
--color-violet-*: initial;
|
|
96
|
+
--color-purple-*: initial;
|
|
97
|
+
--color-fuchsia-*: initial;
|
|
98
|
+
--color-pink-*: initial;
|
|
99
|
+
--color-slate-*: initial;
|
|
100
|
+
--color-gray-*: initial;
|
|
101
|
+
--color-zinc-*: initial;
|
|
102
|
+
--color-stone-*: initial;
|
|
103
|
+
--color-black: initial;
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
As cores do próprio pacote não mudam, e você ainda pode acrescentar cores suas no mesmo bloco.
|
|
108
|
+
|
|
109
|
+
O bloco deixa de fora `neutral`, `emerald`, `amber`, `rose`, `indigo` e `white` de propósito: o tema constrói as cores dele a partir deles.
|
|
110
|
+
|
|
111
|
+
- **Não limpe o namespace inteiro.** `--color-*: initial` também remove as cores semânticas do pacote, e o build para com um erro como `Cannot apply unknown utility class`.
|
|
112
|
+
- **Não limpe uma escala que o tema lê.** Limpar `--color-emerald-*` compila sem erro, mas as cores de sucesso feitas com ela se perdem.
|
|
113
|
+
- **Não limpe os namespaces de tipo, fonte ou espaçamento.** Os componentes aplicam os utilitários `text-*` e `font-*` do Tailwind e a função `--spacing()` dele, então `--text-*: initial`, `--font-*: initial`, `--spacing: initial` ou `--*: initial` interrompe a compilação com `Cannot apply unknown utility class` ou `The --spacing(…) function requires that the --spacing theme variable exists`. Sobrescreva valores isolados, como `--text-sm`. Limpar `--radius-*` é seguro.
|
|
114
|
+
|
|
50
115
|
## Solução de problemas
|
|
51
116
|
|
|
52
117
|
**As classes não resultam em nenhum estilo**
|
|
@@ -63,11 +128,17 @@ Diferente do `/tw`, os entrypoints específicos e o `/tw/native` não importam o
|
|
|
63
128
|
|
|
64
129
|
**Uma classe montada em tempo de execução fica sem estilo**
|
|
65
130
|
|
|
66
|
-
- **O que aconteceu:** `<button class="btn primary">` é estilizado, mas um botão cuja
|
|
67
|
-
- **Por quê:** o Tailwind só
|
|
68
|
-
- **Como resolver:** escreva
|
|
131
|
+
- **O que aconteceu:** `<button class="btn primary">` é estilizado, mas um botão cuja classe vem de uma variável, como `"btn " + variant`, ou de conteúdo de um CMS, não é.
|
|
132
|
+
- **Por quê:** o Tailwind emite só as classes que encontra escritas por extenso nos arquivos que varre. Isso vale também para as classes de componente do pacote: um build com `/tw` emite `.alert` só se `alert` aparecer em algum lugar que ele varre, o que mantém a folha de estilos restrita ao que as suas páginas usam. As classes de intenção, de apresentação, de elevação, de canto e de tamanho, como `.primary`, `.soft` e `.sm`, também são utilitários, então o mesmo vale para elas. As classes de estética, como `.glass`, são CSS comum e sempre emitidas. Um nome montado em tempo de execução nunca aparece inteiro num arquivo, então a varredura não o encontra.
|
|
133
|
+
- **Como resolver:** escreva cada nome de classe completo em algum lugar que o Tailwind varre, por exemplo num objeto de consulta (`{ save: "btn primary", remove: "btn destructive" }`), ou liste na sua folha de estilos os nomes que o seu código ou o seu conteúdo podem produzir:
|
|
134
|
+
|
|
135
|
+
```css
|
|
136
|
+
@import "@codenhub/styles/tw";
|
|
137
|
+
|
|
138
|
+
@source inline("btn alert badge primary destructive soft");
|
|
139
|
+
```
|
|
69
140
|
|
|
70
|
-
Todo entrypoint `/tw` exige Tailwind CSS 4.3.2 ou mais recente, abaixo da 5
|
|
141
|
+
Todo entrypoint `/tw` exige Tailwind CSS 4.3.2 ou mais recente, abaixo da 5 (`>=4.3.2 <5`).
|
|
71
142
|
|
|
72
143
|
## A variante `dark:`
|
|
73
144
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Sem bundler
|
|
3
|
-
description: Como referenciar as folhas de estilos compiladas a partir de HTML puro, Rails, Django ou qualquer aplicação renderizada no servidor.
|
|
3
|
+
description: Como referenciar as folhas de estilos compiladas a partir de HTML puro, Rails, Laravel, Django ou qualquer aplicação renderizada no servidor, e o build por linha de comando.
|
|
4
4
|
order: 6
|
|
5
|
-
source:
|
|
5
|
+
source: ca6e2fe1c1b8c2404b90d9a1bd77b25b7e124f82
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Sem bundler
|
|
@@ -11,7 +11,10 @@ As folhas de estilos compiladas são CSS pronto: cada uma é um único arquivo,
|
|
|
11
11
|
|
|
12
12
|
O que precisa de uma ferramenta de build é o _nome_ do import. `@import "@codenhub/styles"` nomeia um pacote, e encontrar o arquivo por trás desse nome — `node_modules/@codenhub/styles/dist/index.css` — é trabalho de ferramentas que conhecem o Node, como Vite, webpack ou a CLI do Tailwind, que leem o mapa `exports` do pacote. Um navegador não faz isso: ele resolve a URL de um `@import` em relação à folha de estilos que o contém, e um `<link href>` em relação à página, então um nome de pacote solto vira uma requisição para um caminho que não existe. Sem bundler, referencie o arquivo pelo caminho.
|
|
13
13
|
|
|
14
|
-
Os entrypoints `/tw` são código-fonte do Tailwind e precisam de um build do Tailwind. O `/tw/aesthetics` é a exceção, CSS puro sem nada para o Tailwind processar, mas sem bundler referencie os arquivos compilados de `dist/aesthetics/`, como abaixo. Esta página
|
|
14
|
+
Os entrypoints `/tw` são código-fonte do Tailwind e precisam de um build do Tailwind. O `/tw/aesthetics` é a exceção, CSS puro sem nada para o Tailwind processar, mas sem bundler referencie os arquivos compilados de `dist/aesthetics/`, como abaixo. Esta página é para uma página que não tem um build de CSS com Node.js: HTML puro, Rails, Laravel, Django ou qualquer aplicação renderizada no servidor. Há dois caminhos:
|
|
15
|
+
|
|
16
|
+
1. **Referencie a folha de estilos compilada.** Não precisa de nada além de arquivos estáticos. Você entrega todas as classes, usadas ou não pelas suas páginas.
|
|
17
|
+
2. **Gere uma folha de estilos com o comando `chs build` do pacote.** Ela varre os seus templates e escreve uma folha de estilos com só as classes que eles usam. Veja [Gere só as classes que você usa](#gere-só-as-classes-que-você-usa).
|
|
15
18
|
|
|
16
19
|
## Qual arquivo referenciar
|
|
17
20
|
|
|
@@ -27,14 +30,17 @@ Cada caminho de import compilado é um arquivo na pasta `dist/` do pacote:
|
|
|
27
30
|
| `@codenhub/styles/aesthetics` | `dist/aesthetics/index.css` |
|
|
28
31
|
| `@codenhub/styles/aesthetics/*` | `dist/aesthetics/<name>.css`, como `dist/aesthetics/pixel.css` |
|
|
29
32
|
|
|
30
|
-
Referencie
|
|
33
|
+
Referencie um arquivo base só, não vários, porque eles se sobrepõem, e as estéticas que você usar. A ordem entre eles não importa, porque todo arquivo declara as [camadas de cascata](../setup.md#camadas-de-cascata) antes de usar qualquer uma. [Configuração → Todos os entrypoints](../setup.md#todos-os-entrypoints) explica o que cada um contém.
|
|
31
34
|
|
|
32
35
|
## A partir de uma CDN
|
|
33
36
|
|
|
34
37
|
O jsDelivr e o unpkg servem todos os arquivos de todas as versões publicadas no npm, então uma página pode referenciar um deles sem instalar nada:
|
|
35
38
|
|
|
36
39
|
```html
|
|
37
|
-
<
|
|
40
|
+
<head>
|
|
41
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@codenhub/styles@0.9.0/dist/index.css" />
|
|
42
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@codenhub/styles@0.9.0/dist/aesthetics/pixel.css" />
|
|
43
|
+
</head>
|
|
38
44
|
```
|
|
39
45
|
|
|
40
46
|
Coloque a versão exata na URL. Sem ela, a CDN serve a versão mais recente, e abaixo da 1.0 uma versão minor pode renomear ou remover uma classe; veja [Versionamento](../index.md#versionamento).
|
|
@@ -80,6 +86,8 @@ Depois referencie o arquivo no layout, pelo caminho dele dentro dessa pasta:
|
|
|
80
86
|
|
|
81
87
|
Aponte o caminho para `node_modules/@codenhub`, e não para o próprio `dist/`. O Propshaft serve os arquivos pelo caminho dentro de cada pasta de assets, então adicionar `dist/` diretamente publicaria um `index.css` solto, que colide com qualquer `index.css` seu.
|
|
82
88
|
|
|
89
|
+
Os arquivos que você referencia ficam em `dist/`, que guarda CSS pronto sem `@import` a resolver, mais um `index.d.ts` vazio para o TypeScript e o comando `chs build` com os arquivos que ele lê. O código-fonte do Tailwind fica em `tw/`, fora de `dist/`, então um pipeline estático que serve `dist/` ou aplica fingerprint aos arquivos dele não encontra nenhum `@import` que não consiga resolver.
|
|
90
|
+
|
|
83
91
|
### Django
|
|
84
92
|
|
|
85
93
|
Adicione a pasta a `STATICFILES_DIRS` com um prefixo, o que mantém os nomes dos arquivos dela separados dos seus próprios arquivos estáticos:
|
|
@@ -96,10 +104,154 @@ STATICFILES_DIRS = [
|
|
|
96
104
|
<link rel="stylesheet" href="{% static 'codenhub-styles/index.css' %}" />
|
|
97
105
|
```
|
|
98
106
|
|
|
107
|
+
Aponte o prefixo para `dist`, não para a pasta do pacote. `dist/` contém CSS pronto sem `@import` a resolver, mais um `index.d.ts` vazio para o TypeScript e o comando `chs build` com os arquivos que ele lê, que o storage copia como estão, então o `collectstatic` também funciona com `ManifestStaticFilesStorage`, que coloca uma impressão digital (hash) no nome de cada arquivo e reescreve as referências dentro dele. A pasta do pacote também contém o código-fonte do Tailwind em `tw/`, com linhas `@import "tailwindcss/..."` que esse storage não consegue resolver.
|
|
108
|
+
|
|
99
109
|
### Laravel
|
|
100
110
|
|
|
101
111
|
Uma aplicação Laravel roda Vite por padrão, então ela tem um bundler: importe o pacote a partir de `resources/css/app.css`, como em [Configuração → Importe a folha de estilos](../setup.md#importe-a-folha-de-estilos), e carregue esse arquivo com a diretiva `@vite`, como de costume.
|
|
102
112
|
|
|
113
|
+
## Gere só as classes que você usa
|
|
114
|
+
|
|
115
|
+
O pacote traz um comando, `chs`, que lê os seus templates atrás de nomes de classe e escreve uma única folha de estilos minificada com só as classes do StyleKit que eles usam. Uma página que usa um botão recebe cerca de um oitavo da folha de estilos completa; o tamanho exato depende das classes que você usa, porque cada componente traz as regras compartilhadas de que depende.
|
|
116
|
+
|
|
117
|
+
O comando também serve com um bundler. Um projeto cujo bundler não roda o Tailwind, como um build simples com Vite ou webpack, pode escrever a folha de estilos entre os seus fontes, `--output src/stylekit.css`, e importar esse arquivo onde importaria `@codenhub/styles`. Um projeto que usa o Tailwind CSS v4 tem a mesma redução pelo [entrypoint de código-fonte](./tailwind.md) e não precisa do comando.
|
|
118
|
+
|
|
119
|
+
Ele precisa do Node.js 24 ou mais recente na máquina que gera o CSS, seja o seu notebook, um job de CI ou uma etapa do deploy, e de nada mais: o pacote é toda a instalação, sem Tailwind e sem configuração. Instale-o como dependência de desenvolvimento a partir da raiz do projeto; o npm cria um `package.json` se você não tiver um:
|
|
120
|
+
|
|
121
|
+
```sh
|
|
122
|
+
npm install --save-dev @codenhub/styles
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
A folha de estilos que o comando escreve é CSS puro, então os servidores que servem o seu site não precisam nem do Node.js nem do pacote. Acrescente o build aos scripts do seu `package.json`, onde o comando instalado está no path pelo nome dele:
|
|
126
|
+
|
|
127
|
+
```json
|
|
128
|
+
{
|
|
129
|
+
"scripts": {
|
|
130
|
+
"build:css": "chs build --content \"app/views/**/*.erb\" --output public/stylekit.css"
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Depois rode a partir da raiz do projeto:
|
|
136
|
+
|
|
137
|
+
```sh
|
|
138
|
+
npm run build:css
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Para rodá-lo uma vez sem script, chame-o pelo nome do pacote:
|
|
142
|
+
|
|
143
|
+
```sh
|
|
144
|
+
npx @codenhub/styles build --content "app/views/**/*.erb" --output public/stylekit.css
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Não digite `npx chs`. `chs` é o nome do comando dentro deste pacote, mas o npm também tem um pacote sem relação chamado `chs`, e `npx chs` roda esse outro em qualquer pasta onde este pacote não esteja instalado.
|
|
148
|
+
|
|
149
|
+
Quando dá certo, o comando imprime uma linha: o caminho absoluto que escreveu e o tamanho do arquivo em bytes:
|
|
150
|
+
|
|
151
|
+
```text
|
|
152
|
+
/home/you/shop/public/stylekit.css 24497 bytes
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Referencie esse arquivo no seu layout como qualquer folha de estilos estática.
|
|
156
|
+
|
|
157
|
+
### Views do Rails
|
|
158
|
+
|
|
159
|
+
```json
|
|
160
|
+
"build:css": "chs build --content \"app/views/**/*.erb\" --content \"app/helpers/**/*.rb\" --output public/stylekit.css"
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
```erb
|
|
164
|
+
<%# app/views/layouts/application.html.erb %>
|
|
165
|
+
<link rel="stylesheet" href="/stylekit.css" />
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### Views Blade do Laravel
|
|
169
|
+
|
|
170
|
+
```json
|
|
171
|
+
"build:css": "chs build --content \"resources/views/**/*.blade.php\" --output public/css/stylekit.css"
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
```blade
|
|
175
|
+
{{-- resources/views/layouts/app.blade.php --}}
|
|
176
|
+
<link rel="stylesheet" href="{{ asset('css/stylekit.css') }}" />
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Templates do Django
|
|
180
|
+
|
|
181
|
+
Um projeto Django guarda os templates numa pasta `templates/` do projeto, na pasta `templates/` de cada app, ou nas duas. Passe um `--content` para cada lugar onde ficam os seus, e deixe de fora os que você não usa, porque um glob que não casa com nada faz o build falhar:
|
|
182
|
+
|
|
183
|
+
```json
|
|
184
|
+
"build:css": "chs build --content \"templates/**/*.html\" --content \"shop/templates/**/*.html\" --output static/stylekit.css"
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
```django
|
|
188
|
+
{% load static %}
|
|
189
|
+
<link rel="stylesheet" href="{% static 'stylekit.css' %}" />
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Escreva a saída numa pasta listada em `STATICFILES_DIRS`, aqui `static/`, para que o `collectstatic` a recolha. A configuração acima lista só a pasta do pacote, então adicione `BASE_DIR / "static"` a essa lista se o seu projeto ainda não a tiver.
|
|
193
|
+
|
|
194
|
+
### Opções
|
|
195
|
+
|
|
196
|
+
- `--content <glob>`, ou `-c <glob>`, indica os arquivos onde procurar nomes de classe. É obrigatório e pode ser repetido: passe uma vez por glob, e o build lê todo arquivo que casar com algum deles. Um glob relativo é resolvido em relação à pasta de onde você roda o comando, então rode a partir da raiz do projeto; um glob absoluto é usado como está. `**` casa com qualquer número de pastas, e `{rb,erb}` com qualquer uma das duas extensões. Qualquer arquivo de texto serve, seja qual for a extensão. Cada glob precisa casar com pelo menos um arquivo, senão o build falha e o nomeia, então um erro de digitação não consegue publicar uma folha de estilos vazia. Arquivos que o seu `.gitignore` exclui são lidos mesmo assim quando um glob casa com eles, e nada fora dos seus globs é lido.
|
|
197
|
+
- Coloque cada glob entre aspas, com `\"` dentro de um script do `package.json`. Sem aspas, o seu shell pode expandir o glob numa lista de arquivos antes de o comando vê-lo, e só o primeiro arquivo conta como valor do `--content`. Quando isso deixa nomes de arquivo sobrando, o build os rejeita em vez de ler em silêncio menos do que você queria; quando o glob casou com um único arquivo, o build lê só esse arquivo e nada que os seus templates ganharem depois.
|
|
198
|
+
- `--output <file>`, ou `-o <file>`, é a folha de estilos a escrever. É obrigatório. Um caminho relativo é resolvido em relação à pasta de onde você roda o comando, pastas-pai que faltam são criadas, e um arquivo existente é substituído.
|
|
199
|
+
- `--aesthetic <name>` acrescenta uma das [estéticas](../usage/aesthetics.md): `neobrutalism`, `glass`, `pixel`, `chunky-tile`, `cyber` ou `sketch`. Repita para mais de uma; nomear uma duas vezes a inclui uma vez só. As estéticas precisam ser pedidas porque o build não tem como saber pelos seus templates qual você quer: cada uma entra quando você a pede, menos as regras dela para classes que os seus templates não usam, e nenhuma entra quando você não pede.
|
|
200
|
+
- `--no-minify` escreve CSS legível e indentado no lugar. Útil para ler o que o build gerou; em produção, sirva o arquivo minificado.
|
|
201
|
+
- `--help` imprime o uso, com as estéticas que esta versão traz. `--version` imprime a versão do pacote. Nenhum dos dois gera nada, e os dois terminam com status 0.
|
|
202
|
+
|
|
203
|
+
A saída sempre traz o tema, os design tokens dele como propriedades personalizadas de CSS, o reset, as regras base de que todo componente depende e as classes que uma página recebe em tempo de execução, e não de um template, como `.theme-dark`. Por cima vem cada classe do StyleKit que os seus templates usam. A saída é gerada a partir da folha de estilos completa, não da `/native`, então não inclui os mapeamentos sem classes. Um build cujos templates nomeiam todas as classes escreve a folha de estilos completa, byte por byte.
|
|
204
|
+
|
|
205
|
+
### Como as classes são encontradas
|
|
206
|
+
|
|
207
|
+
O build não executa os seus templates. Ele lê como texto puro cada arquivo que casa com os seus globs de `--content`, recolhe cada palavra que poderia ser um nome de classe e escreve as regras das palavras que são classes do StyleKit. É assim que o Tailwind CSS também lê o conteúdo.
|
|
208
|
+
|
|
209
|
+
Uma classe precisa aparecer num arquivo como uma palavra inteira. `class="btn primary"`, `class: "btn primary"` e `classes = ["btn", "primary"]` funcionam, assim como uma classe escrita antes ou depois de dois-pontos, como no `class:primary={isPrimary}` do Svelte ou no `btn: true` de um hash Ruby. Uma palavra que só parece uma classe também conta: um comentário que diz "card" adiciona todas as regras do card à folha de estilos, o que aumenta o arquivo e não muda nada na página.
|
|
210
|
+
|
|
211
|
+
Um nome de classe que o seu código monta na renderização nunca aparece inteiro em nenhum arquivo, então o build não consegue encontrá-lo. Em `class="btn <%= @order.priority %>"`, o `btn` é encontrado, mas a intenção é o que `priority` tiver na hora de renderizar; se for `destructive`, o botão aparece sem o vermelho dele. Há duas saídas:
|
|
212
|
+
|
|
213
|
+
- **Escreva os nomes de classe inteiros.** Associe cada valor a um nome de classe completo num arquivo que o build leia, como `{ "urgent" => "destructive", "normal" => "neutral" }.fetch(@order.priority)` num helper.
|
|
214
|
+
- **Liste-os num arquivo de safelist.** Um arquivo de texto puro com um nome de classe por linha, adicionado com o seu próprio `--content`, como `--content config/stylekit-classes.txt`. Guarde-o perto do código que monta os nomes de classe, para que quem mudar um veja o outro.
|
|
215
|
+
|
|
216
|
+
### Variantes
|
|
217
|
+
|
|
218
|
+
Uma classe de intenção, apresentação ou modificador pode receber um de dez prefixos, escritos como no Tailwind: `sm:`, `md:`, `lg:`, `xl:` e `2xl:` a aplicam a partir daquele breakpoint, `hover:`, `focus:`, `focus-visible:` e `active:` enquanto o elemento está naquele estado, e `dark:` onde quer que o tema escuro se aplique, como [Temas → A variante `dark:`](../usage/theming.md#a-variante-dark) descreve. `md:lg` deixa um botão grande a partir do breakpoint `md`, e `hover:primary` dá a ele a intenção primary no hover:
|
|
219
|
+
|
|
220
|
+
```html
|
|
221
|
+
<button class="btn sm md:lg ghost hover:soft">Save</button>
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
Isso cobre intenções como `primary` e `destructive`, as classes de preenchimento e borda como `soft` e `edged`, e modificadores como `sm`, `lg`, `raised`, `pill`, `tight` e `ruled`. `disabled` não recebe nenhum: é um estado em que o elemento está, então escreva-o como atributo ou como classe. Classes de componente como `btn` e `card`, e os helpers de texto e de layout, não recebem prefixo.
|
|
225
|
+
|
|
226
|
+
Cada prefixo é uma cópia fixa dessas classes, embutida no pacote, então a lista traz os comuns, e não todos os do Tailwind. O comando não empilha prefixos, como em `md:hover:primary`, e não oferece outros, como `print:` ou `group-hover:`. Uma classe assim não recebe estilo, e o elemento aparece sem ela.
|
|
227
|
+
|
|
228
|
+
### O que ele não faz
|
|
229
|
+
|
|
230
|
+
- **Não tem utilitários do Tailwind.** `flex`, `mt-4`, `text-red-500` e o resto do Tailwind não são classes do StyleKit, então o build os deixa de fora. Para layout, os [helpers de layout](../usage/content-and-layout.md) do próprio StyleKit entram no build como qualquer outra classe. Um projeto que quer os utilitários do Tailwind, as outras variantes dele ou prefixos empilhados roda o próprio Tailwind e importa o [entrypoint de código-fonte](./tailwind.md), que dá os três.
|
|
231
|
+
- **Não tem modo watch.** Ele gera uma vez e termina. Rode de novo depois de mudar um template, a partir de um script ou de um observador de arquivos que o seu framework ou editor já tenha. Uma classe que a folha de estilos ainda não tem deixa o elemento sem estilo até o próximo build.
|
|
232
|
+
- **Não tem arquivo de configuração nem CSS próprio.** Você não consegue acrescentar os seus próprios valores de `@theme`, definições de `@utility` nem plugins. Para mudar o visual, sobrescreva as propriedades personalizadas numa folha de estilos sua carregada depois desta, como [Personalização](../usage/customizing.md) descreve.
|
|
233
|
+
- **Não tem outros comandos.** `build` é o único; `--help` e `--version` são as únicas flags que funcionam sem ele.
|
|
234
|
+
|
|
235
|
+
### Num deploy
|
|
236
|
+
|
|
237
|
+
Gere a folha de estilos antes da etapa que recolhe ou aplica fingerprint aos seus assets, como `rails assets:precompile`, `php artisan optimize` ou `python manage.py collectstatic`. Você pode fazer commit da saída, e aí os servidores não precisam de Node.js nenhum, ao custo de um arquivo gerado que alguém precisa lembrar de regenerar; ou gerá-la no deploy, e aí a máquina de build precisa do Node.js 24 ou mais recente.
|
|
238
|
+
|
|
239
|
+
Fixe a versão. Abaixo da 1.0 uma versão minor pode renomear ou remover uma classe, então o mesmo comando pode escrever outra folha de estilos com uma versão mais nova. A saída não depende de nada além da versão do pacote e dos seus templates, então faça commit do `package.json` e do lockfile que o npm escreve, e instale com `npm ci` na máquina de build, para que cada build use a versão que você testou.
|
|
240
|
+
|
|
241
|
+
### Quando o build falha
|
|
242
|
+
|
|
243
|
+
Toda falha imprime uma linha começando com `chs:` na saída de erro padrão e termina com status 1, sem escrever o arquivo de saída, então um script de deploy para em vez de publicar uma folha de estilos desatualizada ou vazia. A linha diz o que deu errado e o que fazer:
|
|
244
|
+
|
|
245
|
+
- **`missing --content` ou `missing --output`.** Acrescente a que ela nomeia. Um `--output` vazio ou só com espaços conta como ausente.
|
|
246
|
+
- **`--content "<glob>" matches no file in <folder>`.** Em geral é um erro de digitação no caminho, um comando rodado de outra pasta que não a raiz do projeto, ou um glob de um lugar que o seu projeto não usa. Gerar a partir de nada escreveria uma folha de estilos sem classes de componente, e o site perderia o estilo sem aviso.
|
|
247
|
+
- **`unexpected argument "<file>"`.** Quase sempre é um glob de `--content` sem aspas, que o seu shell expandiu numa lista de arquivos. Coloque o glob entre aspas.
|
|
248
|
+
- **`unknown option "<flag>"`.** Um erro de digitação, ou uma opção de outra ferramenta, como `--watch` ou `--config`. `--help` lista as opções.
|
|
249
|
+
- **`option "<flag>" is missing its value or does not take one`.** Uma flag que leva valor foi a última coisa da linha, ou o `--no-minify` recebeu um valor, como em `--no-minify=true`.
|
|
250
|
+
- **`unknown aesthetic "<name>"; choose from ...`.** Escolha um dos nomes listados. Eles são em minúsculas e com hífen, como `chunky-tile`.
|
|
251
|
+
- **`missing command` ou `unknown command "<name>"`.** A primeira palavra depois de `chs` precisa ser `build`.
|
|
252
|
+
- **`this command needs Node.js 24 or newer`.** Atualize o Node.js na máquina que gera o CSS.
|
|
253
|
+
- **`cannot write the stylesheet: <reason>`.** `<reason>` é a própria mensagem do Node.js. `EISDIR` quer dizer que o `--output` nomeia uma pasta existente, então nomeie um arquivo dentro dela; `EACCES` ou `EPERM` quer dizer que você não pode escrever ali.
|
|
254
|
+
|
|
103
255
|
## Conferindo se funcionou
|
|
104
256
|
|
|
105
257
|
Renderize um elemento estilizado, como em [Integração → Conferindo se funcionou](./index.md#conferindo-se-funcionou):
|
package/docs/pt-BR/setup.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
title: Configuração
|
|
3
3
|
description: Instale o pacote, escolha entre CSS compilado ou código-fonte do Tailwind e renderize a estrutura da página de configurações.
|
|
4
4
|
order: 1
|
|
5
|
-
source:
|
|
5
|
+
source: 01adaabea85fb4d04139c86d9ad693e23c321d04
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# Configuração
|
|
@@ -44,9 +44,11 @@ A folha de estilos completa inclui o reset, os tokens, os utilitários de layout
|
|
|
44
44
|
|
|
45
45
|
Escolha um:
|
|
46
46
|
|
|
47
|
-
- **CSS compilado** (`@codenhub/styles`, mostrado acima). Use este, a menos que tenha um motivo para não usar. Qualquer bundler que resolva imports de CSS de pacotes funciona, como Vite, webpack ou a CLI do Tailwind.
|
|
47
|
+
- **CSS compilado** (`@codenhub/styles`, mostrado acima). Use este, a menos que tenha um motivo para não usar. Qualquer bundler que resolva imports de CSS de pacotes funciona, como Vite, webpack ou a CLI do Tailwind. Ele traz todas as classes, sejam usadas pelas suas páginas ou não.
|
|
48
48
|
- **Código-fonte do Tailwind CSS v4** (`@codenhub/styles/tw`). Use quando o seu projeto já roda Tailwind v4. O seu build compila o pacote junto com os seus próprios utilitários, então você fica com uma única folha de estilos e a variante `dark:` do Tailwind acompanha o tema do pacote. Exige Tailwind 4.3.2 ou mais recente, abaixo da 5.
|
|
49
|
-
- **Sem bundler.** Referencie o arquivo compilado a partir do `node_modules` ou de uma CDN com uma tag `<link
|
|
49
|
+
- **Sem bundler.** Referencie o arquivo compilado a partir do `node_modules` ou de uma CDN com uma tag `<link>`; veja [Sem bundler](./integrating/without-a-bundler.md).
|
|
50
|
+
|
|
51
|
+
Para entregar só as classes que as suas páginas usam num projeto que não usa Tailwind, com bundler ou sem, o comando `chs build` do pacote lê os seus arquivos e escreve uma folha de estilos com só essas classes, que você importa ou referencia no lugar da compilada; veja [Gere só as classes que você usa](./integrating/without-a-bundler.md#gere-só-as-classes-que-você-usa).
|
|
50
52
|
|
|
51
53
|
O seu framework pode precisar de uma configuração própria, como onde fica a folha de estilos global no Next.js ou no Astro. Cada um destes guias cobre uma configuração e depois traz você de volta para cá:
|
|
52
54
|
|
|
@@ -71,16 +73,18 @@ A ordem dos dois imports não importa, porque todo entrypoint declara as [camada
|
|
|
71
73
|
## Requisitos
|
|
72
74
|
|
|
73
75
|
- **Navegadores:** Chrome 123, Safari 17.5 ou Firefox 128 e mais recentes. As cores usam `light-dark()` e `color-scheme` (Firefox 120). O `.input-group` lê o estado inválido e desabilitado de um controle aninhado com `:has()` (Firefox 121). As classes de elevação registram uma propriedade sem herança com `@property` (Firefox 128); sem isso, uma classe de elevação também atingiria os elementos sem classe dentro dela.
|
|
74
|
-
- **Ferramental:** um `@import` com nome de pacote precisa de uma ferramenta que resolva imports de CSS de pacotes. Sem ela, referencie o arquivo compilado pelo caminho ou a partir de uma CDN; veja [Sem bundler](./integrating/without-a-bundler.md).
|
|
75
|
-
- **Tailwind:** 4.3.2 ou mais recente, abaixo da 5, só para os entrypoints de código-fonte `/tw`. É uma peer dependency opcional, então os entrypoints compilados não o instalam.
|
|
76
|
+
- **Ferramental:** um `@import` com nome de pacote precisa de uma ferramenta que resolva imports de CSS de pacotes pelo mapa `exports` deles. Sem ela, referencie o arquivo compilado pelo caminho ou a partir de uma CDN; veja [Sem bundler](./integrating/without-a-bundler.md). Duas ferramentas comuns precisam de um ajuste, descrito em [Integração → Bundlers que precisam de um empurrão](./integrating/index.md#bundlers-que-precisam-de-um-empurrão): o Parcel e o PostCSS com `postcss-import`.
|
|
77
|
+
- **Tailwind:** 4.3.2 ou mais recente, abaixo da 5, só para os entrypoints de código-fonte `/tw`. É uma peer dependency opcional, então os entrypoints compilados e o comando `chs build` não o instalam.
|
|
78
|
+
- **Node.js:** 24 ou mais recente na máquina que roda o comando `chs build`. As folhas de estilos não precisam dele, mas o pacote o declara como sua engine, então o Yarn 1, e o npm com `engine-strict`, recusam a instalação num Node.js mais antigo.
|
|
76
79
|
- **Sua aplicação:** o pacote não tem JavaScript. HTML semântico, ARIA, comportamento de teclado, gerenciamento de foco, validação e anúncios ficam com você; veja [Acessibilidade](./accessibility.md).
|
|
77
80
|
|
|
78
81
|
## Quando nada é estilizado
|
|
79
82
|
|
|
80
83
|
- **O import está faltando ou não é carregado globalmente.** As classes não fazem nada até a folha de estilos estar na página. Importe-a uma vez numa folha de estilos que toda página carrega, não num componente que pode não ser renderizado.
|
|
81
|
-
- **O nome do pacote não é resolvido.** Um `<link>` simples ou uma ferramenta sem resolução de pacotes CSS não consegue ler `@import "@codenhub/styles"`. Referencie `node_modules/@codenhub/styles/dist/index.css` ou siga [Sem bundler](./integrating/without-a-bundler.md).
|
|
84
|
+
- **O nome do pacote não é resolvido.** Um `<link>` simples ou uma ferramenta sem resolução de pacotes CSS não consegue ler `@import "@codenhub/styles"`. Referencie `node_modules/@codenhub/styles/dist/index.css` ou siga [Sem bundler](./integrating/without-a-bundler.md). O Parcel e o `postcss-import` resolvem o nome com uma pequena mudança; veja [Integração → Bundlers que precisam de um empurrão](./integrating/index.md#bundlers-que-precisam-de-um-empurrão).
|
|
82
85
|
- **Um caminho `/tw` é carregado sem Tailwind.** Os arquivos `/tw` são código-fonte do Tailwind: eles contêm `@theme`, `@utility` e `@apply`, que os navegadores não entendem. O seu build do Tailwind precisa compilá-los; veja [Tailwind CSS v4](./integrating/tailwind.md).
|
|
83
|
-
- **
|
|
86
|
+
- **Um entrypoint `/tw` específico é importado sem o Tailwind antes.** `@codenhub/styles/tw/button` e os outros arquivos de um componente específico não importam o Tailwind. Importados sozinhos, eles compilam sem erro, mas não produzem nenhuma regra de componente. Coloque `@import "tailwindcss";` antes; veja [Tailwind CSS v4 → Usando um entrypoint específico](./integrating/tailwind.md#usando-um-entrypoint-específico).
|
|
87
|
+
- **Falta uma classe montada em tempo de execução (só com código-fonte do Tailwind).** O Tailwind só gera uma classe utilitária, incluindo os componentes do pacote como `.btn`, quando encontra o nome nos seus arquivos de código. Um nome montado a partir de strings, como `` `btn ${tone}` ``, é invisível para essa varredura. Escreva os nomes de classe completos, ou liste-os como descrito em [Tailwind CSS v4](./integrating/tailwind.md).
|
|
84
88
|
|
|
85
89
|
### CSS crítico inline
|
|
86
90
|
|
|
@@ -90,9 +94,9 @@ Isso não vale para os arquivos `/tw`. Eles são código-fonte do Tailwind, não
|
|
|
90
94
|
|
|
91
95
|
## Todos os entrypoints
|
|
92
96
|
|
|
93
|
-
Os entrypoints compilados são CSS pronto. Os entrypoints `/tw` publicam o código-fonte não compilado de `
|
|
97
|
+
Os entrypoints compilados são CSS pronto. Os entrypoints `/tw` publicam o código-fonte não compilado de `tw/`, ao lado de `dist/`, que um build do Tailwind v4 precisa processar. Um entrypoint `/tw` de um componente específico inclui os tokens do tema, então as classes dele não precisam de mais nada do pacote, mas ele precisa de `@import "tailwindcss";` antes; veja [Tailwind CSS v4 → Usando um entrypoint específico](./integrating/tailwind.md#usando-um-entrypoint-específico).
|
|
94
98
|
|
|
95
|
-
Cada caminho de import resolve para o mesmo arquivo nas condições de export `style`, `import` e `default`. Um import de CSS é um efeito colateral, então garanta que o seu bundler não o descarte como não usado.
|
|
99
|
+
Cada caminho de import resolve para o mesmo arquivo nas condições de export `style`, `import` e `default`. Uma condição `types` vem primeiro e aponta para uma declaração vazia, para que o TypeScript aceite um import de efeito colateral como `import "@codenhub/styles";` com `noUncheckedSideEffectImports`, que o TypeScript 6 ativa por padrão. Um import de CSS é um efeito colateral, então garanta que o seu bundler não o descarte como não usado.
|
|
96
100
|
|
|
97
101
|
| Caminho de import | O que contém e o que altera |
|
|
98
102
|
| -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
@@ -100,7 +104,7 @@ Cada caminho de import resolve para o mesmo arquivo nas condições de export `s
|
|
|
100
104
|
| `@codenhub/styles/theme` | Tokens compilados e as classes de intenção, apresentação, elevação e padrão de cantos. Define as propriedades do tema na raiz e os seletores de claro e escuro. Sem reset e sem componentes. |
|
|
101
105
|
| `@codenhub/styles/palette` | Custom properties `--palette-*` geradas: a cor de preenchimento, de texto e de borda de cada combinação de intenção e apresentação como valor plano, mais as cores planas `border`, `surface` e `text`. Para código que não pode usar o pacote em si; veja [Personalização → Paleta gerada](./usage/customizing.md#paleta-gerada). |
|
|
102
106
|
| `@codenhub/styles/components` | Tokens compilados, utilitários de tipografia e todas as classes de componente. Cada componente traz a sua própria regra de movimento reduzido, e a correção do `<dialog>` fechado vem com o `.card`. Sem reset, sem utilitários de layout ou de conteúdo, sem mapeamentos sem classes. |
|
|
103
|
-
| `@codenhub/styles/native` |
|
|
107
|
+
| `@codenhub/styles/native` | Tokens, tipografia, utilitários de layout e de conteúdo, componentes e o reset do pacote, compilados, mais os [mapeamentos sem classes](#html-sem-classes) para elementos HTML puros. Sem o Preflight do Tailwind. Aplica o reset e seletores amplos de elementos. |
|
|
104
108
|
| `@codenhub/styles/aesthetics` | As seis estéticas compiladas, `.neobrutalism`, `.glass`, `.pixel`, `.chunky-tile`, `.cyber` e `.sketch`, cada uma com a sua classe `-solo`. Sem tokens nem componentes próprios; importe em qualquer ordem. |
|
|
105
109
|
| `@codenhub/styles/aesthetics/*` | Uma estética compilada e a sua classe solo: `/neobrutalism`, `/glass`, `/pixel`, `/chunky-tile`, `/cyber` ou `/sketch`. |
|
|
106
110
|
| `@codenhub/styles/tw` | Versão em código-fonte da folha de estilos completa. Importa o próprio Tailwind e depois o tema, a tipografia, os utilitários, os componentes e o reset. Mesmas regras globais. |
|
|
@@ -112,9 +116,9 @@ Cada caminho de import resolve para o mesmo arquivo nas condições de export `s
|
|
|
112
116
|
| `@codenhub/styles/tw/feedback` | Tema em código-fonte mais `.alert`, `.badge`, `.skeleton` e `.progress`, com as suas animações. |
|
|
113
117
|
| `@codenhub/styles/tw/tooltip` | Tema em código-fonte mais as classes de tooltip. |
|
|
114
118
|
| `@codenhub/styles/tw/reset` | Tema, utilitários de tipografia e o reset global em código-fonte. Altera a raiz, o body e os elementos, e define regras de seleção, movimento, foco, barra de rolagem e cores forçadas. |
|
|
115
|
-
| `@codenhub/styles/tw/native` | Versão em código-fonte da `/native`: tudo, mais o reset e os mapeamentos sem classes. O efeito global mais amplo.
|
|
119
|
+
| `@codenhub/styles/tw/native` | Versão em código-fonte da `/native`: tudo menos o Preflight do Tailwind, mais o reset do pacote e os mapeamentos sem classes. O efeito global mais amplo. |
|
|
116
120
|
| `@codenhub/styles/tw/typography` | Tema em código-fonte mais os utilitários de tipografia. Define os seletores de tema; sem reset, sem mapeamentos sem classes. |
|
|
117
|
-
| `@codenhub/styles/tw/utilities` | Tema e tipografia em código-fonte mais os utilitários de layout e de conteúdo.
|
|
121
|
+
| `@codenhub/styles/tw/utilities` | Tema e tipografia em código-fonte mais os utilitários de layout e de conteúdo. |
|
|
118
122
|
| `@codenhub/styles/tw/aesthetics` | As seis estéticas em código-fonte. `/tw/aesthetics/neobrutalism`, `/glass`, `/pixel`, `/chunky-tile`, `/cyber` e `/sketch` publicam uma cada. CSS puro, sem efeitos colaterais de tema ou de reset. |
|
|
119
123
|
| `@codenhub/styles/package.json` | O manifesto do pacote, em JSON. Para ferramentas que leem a versão instalada ou o mapa de exports; não é uma folha de estilos. |
|
|
120
124
|
|
|
@@ -122,19 +126,21 @@ Não importe dois entrypoints que se sobrepõem, como `@codenhub/styles` e `@cod
|
|
|
122
126
|
|
|
123
127
|
## HTML sem classes
|
|
124
128
|
|
|
125
|
-
`@codenhub/styles/native` estiliza elementos HTML puros sem nenhuma classe, para conteúdo em que você não consegue colocar classes, como a saída de um Markdown ou o corpo de um CMS.
|
|
126
|
-
|
|
127
|
-
| Elemento | Estilizado como
|
|
128
|
-
| ---------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
129
|
-
| `h1`, `h2`, `h3`, `h4`, `h5` e `h6` | `.text-title-lg`, `.text-title`, `.text-title-sm`, `.text-label-lg`, `.text-label`
|
|
130
|
-
| `
|
|
131
|
-
| `table` | `.data-table`
|
|
132
|
-
| `kbd`, `blockquote`, `q`, `code`, `pre` | `.kbd`, `.quote`, `.quote-inline`, `.code`, `.pre`
|
|
133
|
-
| `hr` | `.divider`
|
|
134
|
-
| `input` sem type, ou com type `text`, `number`, `email`, `password`, `url`, `tel`, `search`, `month`, `week`, `time`, `date`, `datetime-local` | `.ipt`
|
|
135
|
-
| `textarea`, `select` | `.textarea`, `.select`
|
|
136
|
-
| `input type="checkbox"`, `input type="radio"` | `.checkbox`, `.radio`
|
|
137
|
-
| `button`, `input type="button"`, `type="submit"`, `type="reset"` | `.btn`
|
|
129
|
+
`@codenhub/styles/native` estiliza elementos HTML puros sem nenhuma classe, para conteúdo em que você não consegue colocar classes, como a saída de um Markdown ou o corpo de um CMS. Ela traz tudo o que a folha de estilos completa traz, menos o Preflight do Tailwind, o reset dos padrões do navegador que o `@codenhub/styles` traz junto com o Tailwind. O reset do próprio pacote está nela: o box sizing, o fundo, a cor do texto e a fonte da raiz, o reset de margens de títulos, parágrafos e listas, as cores de seleção, os anéis de foco e a regra de movimento reduzido. Depois ela acrescenta estes mapeamentos:
|
|
130
|
+
|
|
131
|
+
| Elemento | Estilizado como |
|
|
132
|
+
| ---------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
|
|
133
|
+
| `h1`, `h2`, `h3`, `h4`, `h5` e `h6` | `.text-title-lg`, `.text-title`, `.text-title-sm`, `.text-label-lg`, `.text-label` |
|
|
134
|
+
| `body` | `.text-body`, herdado por parágrafos, itens de lista e outros textos |
|
|
135
|
+
| `table` | `.data-table` |
|
|
136
|
+
| `kbd`, `blockquote`, `q`, `code`, `pre` | `.kbd`, `.quote`, `.quote-inline`, `.code`, `.pre` |
|
|
137
|
+
| `hr` | `.divider` |
|
|
138
|
+
| `input` sem type, ou com type `text`, `number`, `email`, `password`, `url`, `tel`, `search`, `month`, `week`, `time`, `date`, `datetime-local` | `.ipt` |
|
|
139
|
+
| `textarea`, `select` | `.textarea`, `.select` |
|
|
140
|
+
| `input type="checkbox"`, `input type="radio"` | `.checkbox`, `.radio` |
|
|
141
|
+
| `button`, `input type="button"`, `type="submit"`, `type="reset"` | `.btn` |
|
|
142
|
+
| `dialog` | `.card.floating`: escondido até ser aberto, e então um card flutuante centralizado |
|
|
143
|
+
| `progress` | `.progress`, preenchido até o seu `value`; sem `value`, é a varredura indeterminada |
|
|
138
144
|
|
|
139
145
|
```html
|
|
140
146
|
<article>
|
|
@@ -152,7 +158,9 @@ O que ele não faz:
|
|
|
152
158
|
- **Alguns tipos de input ficam de fora:** `file`, `range`, `color` e `hidden` mantêm a aparência do próprio navegador.
|
|
153
159
|
- **Nada de switch.** Um checkbox com `role="switch"` continua pintado como checkbox; o mapeamento não lê roles. Uma página que precisa de switches fica mais bem servida pela folha de estilos baseada em classes.
|
|
154
160
|
- **Links acompanham o texto ao redor.** Um link dentro de um título mantém o tamanho do título; um link nunca é estilizado como botão.
|
|
155
|
-
-
|
|
161
|
+
- **O texto do corpo é definido uma vez.** `p` e `li` herdam a tipografia do elemento em que estão, então um contêiner que define o seu próprio tamanho, peso ou espaçamento entre letras o aplica ao Markdown dentro dele. Os controles mantêm o próprio espaçamento entre letras: um botão, um badge e um campo de texto ficam em `normal`, seja o que for que a página ou o contêiner definam.
|
|
162
|
+
- **O comportamento nativo continua nativo.** Um `<dialog>` abre com `show()` ou `showModal()` como sempre; o mapeamento só o pinta. A varredura de um `<progress>` para com a preferência de movimento reduzido, e em cores forçadas a barra usa as cores do sistema.
|
|
163
|
+
- **`pre code` não recebe estilo duplicado.** O código dentro de um `pre` perde o chip que desenharia sozinho: fundo, padding, borda, sombra, brilho e recorte.
|
|
156
164
|
|
|
157
165
|
Os mapeamentos são globais: todo elemento correspondente na página é estilizado, inclusive elementos dentro de widgets de terceiros. Eles ficam na [camada de cascata](#camadas-de-cascata) `base`, então qualquer classe vence. Adicione uma classe de intenção ou de apresentação a um elemento mapeado, como `<button class="destructive">`, e ela funciona como funcionaria num `.btn`.
|
|
158
166
|
|
|
@@ -160,18 +168,19 @@ Os mapeamentos são globais: todo elemento correspondente na página é estiliza
|
|
|
160
168
|
|
|
161
169
|
Todo entrypoint coloca o seu CSS nas quatro camadas de cascata (cascade layers) do Tailwind e declara a ordem delas antes de usar qualquer uma, então o resultado não depende de qual arquivo carrega primeiro:
|
|
162
170
|
|
|
163
|
-
| Camada | Contém
|
|
164
|
-
| ------------ |
|
|
165
|
-
| `theme` | O tema do Tailwind, os tokens fundamentais, os seletores de tema e a `/palette`.
|
|
166
|
-
| `base` | O reset e os estilos de elemento sem classes.
|
|
167
|
-
| `components` | As classes de intenção
|
|
168
|
-
| `utilities` | Todos os componentes (`.btn`, `.card`, `.ipt` e assim por diante), ao lado dos seus próprios utilitários do Tailwind. |
|
|
169
|
-
| _sem camada_ | As sobrescritas de cores forçadas e de movimento reduzido, a correção do `<dialog>` fechado e as classes `-solo`.
|
|
171
|
+
| Camada | Contém |
|
|
172
|
+
| ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
173
|
+
| `theme` | O tema do Tailwind, os tokens fundamentais, os seletores de tema e a `/palette`. |
|
|
174
|
+
| `base` | O reset e os estilos de elemento sem classes. |
|
|
175
|
+
| `components` | As classes de estética e os valores de intenção neutros de que todo componente parte. |
|
|
176
|
+
| `utilities` | Todos os componentes (`.btn`, `.card`, `.ipt` e assim por diante), ao lado dos seus próprios utilitários do Tailwind. As classes de intenção, apresentação, borda, elevação, canto e tamanho ficam em `utilities.families`, uma subcamada que perde para qualquer outra regra de `utilities`. |
|
|
177
|
+
| _sem camada_ | As sobrescritas de cores forçadas e de movimento reduzido, a correção do `<dialog>` fechado e as classes `-solo`. |
|
|
170
178
|
|
|
171
179
|
O que isso significa quando você escreve o seu próprio CSS:
|
|
172
180
|
|
|
173
|
-
- **O seu utilitário ou CSS sem camada vence uma classe de intenção, apresentação, elevação ou estética** no mesmo elemento. `[--ui-fill:50%]` num botão `.solid`, `font-serif` numa região `.pixel` ou `.my-card { --ui-radius: 0 }` na sua própria folha de estilos, todos se aplicam.
|
|
181
|
+
- **O seu utilitário ou CSS sem camada vence uma classe de intenção, apresentação, elevação ou estética** no mesmo elemento. `[--ui-fill:50%]` num botão `.solid`, `font-serif` numa região `.pixel` ou `.my-card { --ui-radius-surface: 0 }` na sua própria folha de estilos, todos se aplicam.
|
|
174
182
|
- **Um componente e o seu utilitário dividem a camada `utilities`.** A especificidade decide entre eles e depois a ordem no código, como entre dois utilitários quaisquer. O seu CSS sem camada sempre vence um componente.
|
|
183
|
+
- **O seu utilitário vence os padrões internos de um componente.** `p-0 text-center` numa célula de tabela, `text-sm` numa `.label` ou `px-8` num `.btn.sm` se aplicam, porque o componente escreve esses padrões de modo que uma classe no elemento vença.
|
|
175
184
|
- **O estado vence a sua intenção.** Um campo com `aria-invalid="true"` continua destrutivo mesmo com um utilitário de intenção aplicado.
|
|
176
185
|
- **As classes `-solo` ficam fora das camadas de propósito**, para vencer os estilos em camadas ou de especificidade zero de um componente de terceiros. Uma regra sem camada mais específica, ou uma igualmente específica que carrega depois, ainda vence essas classes; veja [Classes solo](./usage/solo.md).
|
|
177
186
|
|