clarus-css 0.1.0 → 0.1.1
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.md +126 -1
- package/dist/css/clarus.css +3583 -0
- package/dist/css/clarus.css.map +1 -0
- package/dist/css/clarus.min.css +2 -0
- package/dist/css/clarus.min.css.map +1 -0
- package/dist/css/components.css +162 -0
- package/dist/css/components.css.map +1 -0
- package/dist/css/components.min.css +2 -0
- package/dist/css/components.min.css.map +1 -0
- package/dist/css/forms.css +172 -0
- package/dist/css/forms.css.map +1 -0
- package/dist/css/forms.min.css +2 -0
- package/dist/css/forms.min.css.map +1 -0
- package/dist/css/helpers.css +2965 -0
- package/dist/css/helpers.css.map +1 -0
- package/dist/css/helpers.min.css +2 -0
- package/dist/css/helpers.min.css.map +1 -0
- package/dist/css/layout.css +485 -0
- package/dist/css/layout.css.map +1 -0
- package/dist/css/layout.min.css +2 -0
- package/dist/css/layout.min.css.map +1 -0
- package/dist/js/clarus.js +20 -0
- package/dist/js/clarus.js.map +7 -0
- package/dist/js/clarus.min.js +2 -0
- package/dist/js/clarus.min.js.map +7 -0
- package/docs/definitions.md +110 -13
- package/docs/guia-comandos.md +124 -0
- package/docs/scss-architecture.md +184 -0
- package/js/clarus.js +1 -0
- package/mockup/layout.html +18 -7
- package/package.json +37 -11
- package/scss/base/_index.scss +2 -0
- package/scss/base/_reset.scss +16 -0
- package/scss/base/_typography.scss +17 -0
- package/scss/clarus.scss +8 -0
- package/scss/components/_accordion.scss +4 -0
- package/scss/components/_alerts.scss +5 -0
- package/scss/components/_badges.scss +8 -0
- package/scss/components/_breadcrumbs.scss +5 -0
- package/scss/components/_buttons.scss +12 -0
- package/scss/components/_cards.scss +7 -0
- package/scss/components/_dropdown.scss +4 -0
- package/scss/components/_index.scss +14 -0
- package/scss/components/_modal.scss +9 -0
- package/scss/components/_navbar.scss +5 -0
- package/scss/components/_pagination.scss +5 -0
- package/scss/components/_tables.scss +4 -0
- package/scss/components/_tabs.scss +4 -0
- package/scss/components/_toasts.scss +5 -0
- package/scss/components/_tooltips.scss +4 -0
- package/scss/entries/components-entry.scss +5 -0
- package/scss/entries/forms-entry.scss +5 -0
- package/scss/entries/layout-entry.scss +5 -0
- package/scss/entries/utilities-entry.scss +5 -0
- package/scss/forms/_forms.scss +99 -0
- package/scss/forms/_index.scss +1 -0
- package/scss/layout/_containers.scss +24 -0
- package/scss/layout/_grid.scss +49 -0
- package/scss/layout/_index.scss +2 -0
- package/scss/settings/_breakpoints.scss +24 -0
- package/scss/settings/_colors.scss +23 -0
- package/scss/settings/_index.scss +4 -0
- package/scss/settings/_spacing.scss +12 -0
- package/scss/settings/_typography.scss +11 -0
- package/scss/themes/_dark.scss +7 -0
- package/scss/themes/_index.scss +1 -0
- package/scss/tokens/_index.scss +1 -0
- package/scss/tokens/_root.scss +25 -0
- package/scss/tools/_index.scss +1 -0
- package/scss/tools/_mixins.scss +38 -0
- package/scss/utilities/_display.scss +19 -0
- package/scss/utilities/_flex.scss +52 -0
- package/scss/utilities/_index.scss +4 -0
- package/scss/utilities/_spacing.scss +127 -0
- package/scss/utilities/_visibility.scss +7 -0
- package/assets/css/components.css +0 -0
- package/assets/css/forms.css +0 -153
- package/assets/css/helpers.css +0 -1
- package/assets/css/layout.css +0 -526
package/docs/definitions.md
CHANGED
|
@@ -88,7 +88,7 @@ O escopo inicial inclui:
|
|
|
88
88
|
- Layout e containers.
|
|
89
89
|
- Grid baseado em Flexbox.
|
|
90
90
|
- Utilitários de espaçamento, display, alinhamento, visibilidade e tipografia.
|
|
91
|
-
- Formulários e campos de entrada.
|
|
91
|
+
- Formulários e campos de entrada (incluindo validação visual, select customizado e upload de arquivo estilizado).
|
|
92
92
|
- Botões.
|
|
93
93
|
- Cards.
|
|
94
94
|
- Alertas.
|
|
@@ -209,6 +209,10 @@ As seguintes decisões estão definidas:
|
|
|
209
209
|
- Distribuição: npm desde o início.
|
|
210
210
|
- Licença: MIT.
|
|
211
211
|
- Tom do projeto: técnico, estratégico e com posicionamento de produto.
|
|
212
|
+
- Convenção de nomenclatura de classes: definida na seção 19.
|
|
213
|
+
- API JavaScript dos componentes interativos: definida na seção 20.
|
|
214
|
+
- Ordem de implementação dos componentes: definida na seção 21.
|
|
215
|
+
- Estratégia de testes visuais e funcionais: definida na seção 22.
|
|
212
216
|
|
|
213
217
|
## 18. Pontos a Definir Posteriormente
|
|
214
218
|
|
|
@@ -216,19 +220,112 @@ Apesar das decisões principais estarem firmadas, ainda precisam ser definidos e
|
|
|
216
220
|
|
|
217
221
|
- Paleta de cores oficial.
|
|
218
222
|
- Família tipográfica final.
|
|
219
|
-
- Convenção exata de nomes de classes.
|
|
220
|
-
- Estrutura definitiva dos arquivos SCSS.
|
|
221
|
-
- API JavaScript dos componentes interativos.
|
|
222
|
-
- Ordem de implementação dos componentes.
|
|
223
|
-
- Estratégia de testes visuais e funcionais.
|
|
224
223
|
|
|
225
|
-
## 19.
|
|
224
|
+
## 19. Convenção de Nomenclatura de Classes
|
|
225
|
+
|
|
226
|
+
- Sem prefixo global: as classes seguem o padrão Bootstrap já em uso (`.btn`,
|
|
227
|
+
`.card`, `.container`), sem prefixo `clarus-`.
|
|
228
|
+
- Variantes de cor/estilo por sufixo direto: `.btn-primary`, `.alert-danger`,
|
|
229
|
+
`.badge-success`, seguindo os nomes já usados em `$theme-colors`
|
|
230
|
+
(`scss/settings/_colors.scss`).
|
|
231
|
+
- Tamanhos por sufixo `-sm`/`-lg` consistente em todos os componentes que
|
|
232
|
+
tiverem variação de tamanho (botões, badges, cards, inputs), generalizando
|
|
233
|
+
o padrão já usado em `.form-control-sm`/`.form-control-lg`.
|
|
234
|
+
- Estados controlados por JavaScript usam classes `is-*` (`.is-open`,
|
|
235
|
+
`.is-active`, `.is-expanded`), nunca atributos `data-state` customizados.
|
|
236
|
+
- Utilitários mantêm abreviações curtas estilo Bootstrap (`.d-flex`, `.mt-3`,
|
|
237
|
+
`.gx-2`, `.p-2`), como já implementado em `scss/utilities/`.
|
|
238
|
+
- Responsividade em utilitários e grid segue sempre o formato fixo
|
|
239
|
+
`{propriedade}-{breakpoint}-{valor}` (ex.: `.col-md-6`, `.d-md-none`,
|
|
240
|
+
`.mt-lg-3`).
|
|
241
|
+
|
|
242
|
+
## 20. API JavaScript dos Componentes Interativos
|
|
243
|
+
|
|
244
|
+
- Inicialização sempre automática via atributo HTML (ex.:
|
|
245
|
+
`data-clarus="modal" data-target="#meuModal"`), sem exigir `new` manual
|
|
246
|
+
para o uso básico — alinhado com "uso direto em HTML sem build" (seção 7).
|
|
247
|
+
- Toda instância criada automaticamente continua acessível para controle
|
|
248
|
+
programático via método estático de recuperação (ex.:
|
|
249
|
+
`Clarus.Modal.getInstance(el)`), permitindo chamar seus métodos sem
|
|
250
|
+
precisar instanciar manualmente.
|
|
251
|
+
- Namespace global único: `window.Clarus`, com cada componente como
|
|
252
|
+
propriedade (`Clarus.Modal`, `Clarus.Tooltip`, `Clarus.Dropdown`, etc.),
|
|
253
|
+
em vez de globais separados.
|
|
254
|
+
- API de instância padronizada para todo componente interativo: `.show()`,
|
|
255
|
+
`.hide()`, `.toggle()`, `.dispose()`.
|
|
256
|
+
- Comunicação com a aplicação via eventos DOM customizados (ex.:
|
|
257
|
+
`clarus:modal:shown`, `clarus:tab:changed`), disparados com
|
|
258
|
+
`CustomEvent` nativo — sem exigir callbacks de construtor.
|
|
259
|
+
- Acessibilidade (ARIA, foco, teclado) é requisito obrigatório da API desde
|
|
260
|
+
a v0.1 para todo componente interativo, não um extra a ser adicionado
|
|
261
|
+
depois.
|
|
262
|
+
- Além do bundle único (`dist/js/clarus.js`), haverá import granular por
|
|
263
|
+
componente (ex.: `import { Modal } from "clarus-css/js/modal"`), para uso
|
|
264
|
+
com bundlers.
|
|
265
|
+
|
|
266
|
+
## 21. Ordem de Implementação dos Componentes
|
|
267
|
+
|
|
268
|
+
Critério de priorização: dependência técnica primeiro (o que outros
|
|
269
|
+
componentes reaproveitam é implementado antes), respeitando que todo
|
|
270
|
+
componente 100% CSS (sem JavaScript) seja concluído antes de iniciar os que
|
|
271
|
+
exigem JavaScript.
|
|
272
|
+
|
|
273
|
+
**Fase A — Componentes CSS-only, por dependência técnica:**
|
|
274
|
+
|
|
275
|
+
1. Botões — reaproveitados por cards, alertas, modal e navbar.
|
|
276
|
+
2. Badges — pequeno e reaproveitado por cards, navbar e tabelas.
|
|
277
|
+
3. Alertas — formaliza o padrão de variante de cor de estado
|
|
278
|
+
(success/warning/danger/info) que badges e tabelas também usam.
|
|
279
|
+
4. Cards — combina botões, badges e tipografia base num contêiner.
|
|
280
|
+
5. Tabelas — reaproveita as cores de estado definidas em alertas/badges.
|
|
281
|
+
6. Navbar (versão estática, sem dropdown/collapse) — reaproveita botões e
|
|
282
|
+
badges.
|
|
283
|
+
7. Paginação — reaproveita o padrão de item ativo/desabilitado dos botões.
|
|
284
|
+
8. Breadcrumbs — mais simples, sem dependência de outros componentes.
|
|
285
|
+
9. Formulários avançados, parte CSS-only: estados de validação
|
|
286
|
+
(`.is-valid`/`.is-invalid`, reaproveitando as cores de estado de
|
|
287
|
+
alertas/badges) e upload de arquivo estilizado (label + input nativo
|
|
288
|
+
oculto).
|
|
289
|
+
|
|
290
|
+
**Fase B — Infraestrutura JS compartilhada (antes de qualquer componente
|
|
291
|
+
interativo):**
|
|
292
|
+
|
|
293
|
+
1. Posicionamento/overlay — usado por dropdown, tooltip e modal.
|
|
294
|
+
2. Foco e teclado (focus trap + tecla Escape) — usado por modal e
|
|
295
|
+
dropdown.
|
|
296
|
+
3. Transição/collapse — usado por accordion, tabs e toast.
|
|
297
|
+
|
|
298
|
+
**Fase C — Componentes com JS, por dependência técnica:**
|
|
299
|
+
|
|
300
|
+
1. Dropdown — consumidor mais simples da infraestrutura de posicionamento.
|
|
301
|
+
2. Tooltip — reaproveita a mesma infraestrutura de posicionamento do
|
|
302
|
+
dropdown, com show/hide por hover/focus.
|
|
303
|
+
3. Modal — reaproveita posicionamento e foco/teclado; mais complexo que
|
|
304
|
+
dropdown/tooltip.
|
|
305
|
+
4. Select customizado (formulários avançados) — é um dropdown aplicado a
|
|
306
|
+
um campo de formulário; depende do dropdown já existir.
|
|
307
|
+
5. Accordion — reaproveita a infraestrutura de transição/collapse.
|
|
308
|
+
6. Tabs — reaproveita o mesmo padrão de alternância de painel do
|
|
309
|
+
accordion.
|
|
310
|
+
7. Toast — reaproveita a infraestrutura de transição/collapse e adiciona
|
|
311
|
+
timers de auto-dismiss.
|
|
312
|
+
|
|
313
|
+
## 22. Estratégia de Testes Visuais e Funcionais
|
|
314
|
+
|
|
315
|
+
- Teste visual (regressão de CSS): Playwright com comparação de
|
|
316
|
+
screenshots, rodando local e no CI já existente — sem dependência de
|
|
317
|
+
serviço externo pago.
|
|
318
|
+
- Teste funcional de JavaScript: Vitest com `jsdom`, cobrindo estado,
|
|
319
|
+
atributos ARIA e eventos disparados por cada componente interativo.
|
|
320
|
+
- Os arquivos em `mockup/*.html` são as fixtures oficiais dos testes
|
|
321
|
+
visuais — cada componente/grupo implementado ganha (ou já usa) um mockup
|
|
322
|
+
dedicado, mantido atualizado.
|
|
323
|
+
- Testes (visuais e funcionais) rodam automaticamente no GitHub Actions a
|
|
324
|
+
cada push/PR, como um novo step em `.github/workflows/ci.yml`, além do
|
|
325
|
+
lint e build já existentes.
|
|
326
|
+
|
|
327
|
+
## 23. Próximo Marco
|
|
226
328
|
|
|
227
329
|
O próximo marco do projeto é transformar estas definições em uma estrutura técnica inicial:
|
|
228
330
|
|
|
229
|
-
1.
|
|
230
|
-
2. Definir a arquitetura SCSS.
|
|
231
|
-
3. Criar pipeline de build.
|
|
232
|
-
4. Organizar `dist`.
|
|
233
|
-
5. Documentar instalação e uso inicial no `README.md`.
|
|
234
|
-
6. Implementar layout, grid, utilitários e formulários como base da versão inicial.
|
|
331
|
+
1. Implementar layout, grid, utilitários e formulários como base da versão inicial.
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# Guia Interno de Comandos — Clarus CSS
|
|
2
|
+
|
|
3
|
+
Guia de referência rápida para uso pessoal no terminal: git/GitHub, npm e
|
|
4
|
+
build. Não é documentação pública do projeto (isso é papel do README).
|
|
5
|
+
|
|
6
|
+
## Ambiente
|
|
7
|
+
|
|
8
|
+
Node.js está instalado em `C:\Users\jwmenezes\node`, mas pode não estar no
|
|
9
|
+
`PATH` da sessão do terminal. Se `node -v` / `npm -v` derem "command not
|
|
10
|
+
found", rode antes (PowerShell):
|
|
11
|
+
|
|
12
|
+
```powershell
|
|
13
|
+
$env:PATH = "C:\Users\jwmenezes\node;$env:PATH"
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Para não repetir isso sempre, adicione `C:\Users\jwmenezes\node` de forma
|
|
17
|
+
permanente ao PATH do Windows (Configurações > Sistema > Variáveis de
|
|
18
|
+
Ambiente).
|
|
19
|
+
|
|
20
|
+
Remote configurado no repositório: `work` → `https://github.com/jorgewreis/clarus-css.git`.
|
|
21
|
+
|
|
22
|
+
## Fluxo diário (git)
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# ver o que mudou
|
|
26
|
+
git status
|
|
27
|
+
git diff
|
|
28
|
+
|
|
29
|
+
# stage seletivo (evite "git add -A" se não revisou tudo)
|
|
30
|
+
git add caminho/do/arquivo
|
|
31
|
+
|
|
32
|
+
# commit
|
|
33
|
+
git commit -m "mensagem no imperativo, explicando o porquê"
|
|
34
|
+
|
|
35
|
+
# sincronizar com o GitHub
|
|
36
|
+
git fetch work
|
|
37
|
+
git push work main
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Se `git fetch work` mostrar `behind`, rode `git pull work main` antes do
|
|
41
|
+
push (ou `git merge work/main` se preferir revisar antes).
|
|
42
|
+
|
|
43
|
+
## Branches
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# nova branch a partir da main
|
|
47
|
+
git checkout -b feature/nome-da-mudanca
|
|
48
|
+
|
|
49
|
+
# voltar pra main e atualizar
|
|
50
|
+
git checkout main
|
|
51
|
+
git pull work main
|
|
52
|
+
|
|
53
|
+
# apagar branch local já mergeada
|
|
54
|
+
git branch -d feature/nome-da-mudanca
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Build, lint e watch
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
npm install # instala dependências (roda depois de clonar ou puxar mudanças no package.json)
|
|
61
|
+
npm run build # gera dist/css e dist/js a partir de scss/ e js/
|
|
62
|
+
npm run watch # rebuild automático ao salvar arquivos em scss/ ou js/
|
|
63
|
+
npm run lint # stylelint em scss/**/*.scss
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
`npm run build` sempre limpa `dist/` antes (script `clean`), então não
|
|
67
|
+
precisa rodar `clean` manualmente.
|
|
68
|
+
|
|
69
|
+
## Versionamento (semver)
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# bump de versão (atualiza package.json, package-lock.json e cria tag git vX.Y.Z)
|
|
73
|
+
npm version patch # correções 0.1.0 -> 0.1.1
|
|
74
|
+
npm version minor # features 0.1.0 -> 0.2.0
|
|
75
|
+
npm version major # breaking 0.1.0 -> 1.0.0
|
|
76
|
+
|
|
77
|
+
# depois do bump, subir o commit + a tag
|
|
78
|
+
git push work main --follow-tags
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Publicação no npm
|
|
82
|
+
|
|
83
|
+
Rodar sempre a partir da branch `main` já sincronizada e com o build
|
|
84
|
+
funcionando (`npm run build` e `npm run lint` sem erro).
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
# login (uma vez por máquina, ou quando expirar)
|
|
88
|
+
npm login
|
|
89
|
+
|
|
90
|
+
# conferir com qual usuário está logado
|
|
91
|
+
npm whoami
|
|
92
|
+
|
|
93
|
+
# ver exatamente o que seria publicado (sem publicar)
|
|
94
|
+
npm pack --dry-run
|
|
95
|
+
|
|
96
|
+
# publicar de fato (publishConfig.access já está "public" no package.json)
|
|
97
|
+
npm publish
|
|
98
|
+
|
|
99
|
+
# publicar uma pré-release (ex: 0.2.0-beta.1), sem virar "latest"
|
|
100
|
+
npm publish --tag beta
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
`prepublishOnly` já roda `npm run build && npm test` automaticamente antes
|
|
104
|
+
de qualquer `npm publish` — se o build ou o lint falhar, a publicação é
|
|
105
|
+
abortada.
|
|
106
|
+
|
|
107
|
+
**Nunca rode `npm unpublish` em pacotes com mais de 72h publicados** — o
|
|
108
|
+
npm restringe/impede isso por padrão; trate erros de publicação com uma
|
|
109
|
+
nova versão de patch em vez de tentar apagar a anterior.
|
|
110
|
+
|
|
111
|
+
## Atalho: commit + sync numa linha
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
git add caminho1 caminho2 && git commit -m "mensagem" && git push work main
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Checklist antes de publicar uma nova versão
|
|
118
|
+
|
|
119
|
+
1. `git status` limpo (nada pendente).
|
|
120
|
+
2. `npm run lint` e `npm run build` passando.
|
|
121
|
+
3. `CHANGELOG.md` atualizado com o que mudou.
|
|
122
|
+
4. `npm version <patch|minor|major>`.
|
|
123
|
+
5. `git push work main --follow-tags`.
|
|
124
|
+
6. `npm publish`.
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
# Arquitetura SCSS do Clarus CSS
|
|
2
|
+
|
|
3
|
+
## Objetivo
|
|
4
|
+
|
|
5
|
+
A arquitetura SCSS do Clarus CSS organiza o framework em módulos pequenos, previsíveis e alinhados a uma abordagem híbrida: componentes prontos, utilitários reutilizáveis e tokens customizáveis por CSS Custom Properties.
|
|
6
|
+
|
|
7
|
+
O arquivo de entrada oficial é:
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
scss/clarus.scss
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Esse arquivo deve reunir os módulos na ordem correta de geração do CSS final.
|
|
14
|
+
|
|
15
|
+
## Estrutura
|
|
16
|
+
|
|
17
|
+
```text
|
|
18
|
+
scss/
|
|
19
|
+
├── clarus.scss
|
|
20
|
+
├── settings/
|
|
21
|
+
├── tools/
|
|
22
|
+
├── tokens/
|
|
23
|
+
├── base/
|
|
24
|
+
├── layout/
|
|
25
|
+
├── forms/
|
|
26
|
+
├── components/
|
|
27
|
+
├── utilities/
|
|
28
|
+
└── themes/
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Camadas
|
|
32
|
+
|
|
33
|
+
### settings
|
|
34
|
+
|
|
35
|
+
Define valores Sass usados em tempo de compilação:
|
|
36
|
+
|
|
37
|
+
- Breakpoints.
|
|
38
|
+
- Larguras de containers.
|
|
39
|
+
- Escala de espaçamento.
|
|
40
|
+
- Cores base.
|
|
41
|
+
- Tipografia.
|
|
42
|
+
- Raios de borda.
|
|
43
|
+
|
|
44
|
+
Esses arquivos não devem gerar CSS diretamente.
|
|
45
|
+
|
|
46
|
+
### tools
|
|
47
|
+
|
|
48
|
+
Define mixins e funções Sass reutilizáveis.
|
|
49
|
+
|
|
50
|
+
Exemplos:
|
|
51
|
+
|
|
52
|
+
- `media-breakpoint-up`
|
|
53
|
+
- `focus-ring`
|
|
54
|
+
- `truncate`
|
|
55
|
+
|
|
56
|
+
Esses arquivos também não devem gerar CSS diretamente.
|
|
57
|
+
|
|
58
|
+
### tokens
|
|
59
|
+
|
|
60
|
+
Gera CSS Custom Properties públicas em `:root`.
|
|
61
|
+
|
|
62
|
+
Essa camada permite customização em CSS sem recompilar o framework.
|
|
63
|
+
|
|
64
|
+
### base
|
|
65
|
+
|
|
66
|
+
Define estilos globais mínimos:
|
|
67
|
+
|
|
68
|
+
- `box-sizing`
|
|
69
|
+
- `body`
|
|
70
|
+
- tipografia base
|
|
71
|
+
- fontes externas
|
|
72
|
+
|
|
73
|
+
Essa camada deve permanecer pequena para evitar efeitos colaterais.
|
|
74
|
+
|
|
75
|
+
### layout
|
|
76
|
+
|
|
77
|
+
Define a base estrutural do framework:
|
|
78
|
+
|
|
79
|
+
- Containers.
|
|
80
|
+
- Rows.
|
|
81
|
+
- Colunas.
|
|
82
|
+
- Grid baseado em Flexbox.
|
|
83
|
+
- Breakpoints compatíveis com a experiência do Bootstrap.
|
|
84
|
+
|
|
85
|
+
O gutter do grid (`.row`/`.col-*`) é implementado via padding + margin negativo
|
|
86
|
+
controlados pelas CSS Custom Properties `--clarus-gutter-x`/`--clarus-gutter-y`
|
|
87
|
+
(não via `gap` do flexbox), porque `gap` não é descontado da largura em
|
|
88
|
+
porcentagem das colunas numeradas (`.col-6`, `.col-md-4`), o que causaria
|
|
89
|
+
estouro de linha. As classes `.g-*`/`.gx-*`/`.gy-*` (em `utilities/_spacing.scss`)
|
|
90
|
+
controlam essas variáveis e só têm efeito dentro de uma `.row`. Para `gap`
|
|
91
|
+
literal em qualquer container flex/grid fora do sistema de colunas, use
|
|
92
|
+
`.gap-*`/`.gap-x-*`/`.gap-y-*`.
|
|
93
|
+
|
|
94
|
+
### forms
|
|
95
|
+
|
|
96
|
+
Agrupa estilos de formulários:
|
|
97
|
+
|
|
98
|
+
- Linhas e colunas de formulário.
|
|
99
|
+
- Labels.
|
|
100
|
+
- Textos auxiliares.
|
|
101
|
+
- Inputs.
|
|
102
|
+
- Tamanhos de campo.
|
|
103
|
+
- Estados de foco, desabilitado e leitura.
|
|
104
|
+
|
|
105
|
+
### components
|
|
106
|
+
|
|
107
|
+
Agrupa componentes prontos.
|
|
108
|
+
|
|
109
|
+
Cada componente deve ter seu próprio arquivo parcial:
|
|
110
|
+
|
|
111
|
+
- Buttons.
|
|
112
|
+
- Cards.
|
|
113
|
+
- Alerts.
|
|
114
|
+
- Badges.
|
|
115
|
+
- Tables.
|
|
116
|
+
- Navbar.
|
|
117
|
+
- Dropdown.
|
|
118
|
+
- Modal.
|
|
119
|
+
- Accordion.
|
|
120
|
+
- Tabs.
|
|
121
|
+
- Tooltips.
|
|
122
|
+
- Toasts.
|
|
123
|
+
- Pagination.
|
|
124
|
+
- Breadcrumbs.
|
|
125
|
+
|
|
126
|
+
### utilities
|
|
127
|
+
|
|
128
|
+
Agrupa classes utilitárias reutilizáveis:
|
|
129
|
+
|
|
130
|
+
- Display.
|
|
131
|
+
- Flex alignment.
|
|
132
|
+
- Spacing.
|
|
133
|
+
- Visibility.
|
|
134
|
+
|
|
135
|
+
Utilitários devem ser previsíveis, pequenos e combináveis.
|
|
136
|
+
|
|
137
|
+
### themes
|
|
138
|
+
|
|
139
|
+
Agrupa temas e variações globais.
|
|
140
|
+
|
|
141
|
+
O primeiro tema obrigatório é o dark mode via:
|
|
142
|
+
|
|
143
|
+
```html
|
|
144
|
+
<html data-theme="dark">
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## Convenções
|
|
148
|
+
|
|
149
|
+
- Usar arquivos parciais com prefixo `_`.
|
|
150
|
+
- Usar `@use` e `@forward`, evitando `@import` para módulos internos.
|
|
151
|
+
- Manter `scss/clarus.scss` como único ponto de entrada público para o bundle completo.
|
|
152
|
+
- Evitar estilos globais agressivos.
|
|
153
|
+
- Preferir CSS Custom Properties para valores que usuários podem sobrescrever.
|
|
154
|
+
- Preferir variáveis Sass para valores usados em geração de classes.
|
|
155
|
+
|
|
156
|
+
## Pipeline de Build
|
|
157
|
+
|
|
158
|
+
O build (`npm run build`) compila SCSS para CSS via Dart Sass, aplica PostCSS
|
|
159
|
+
com Autoprefixer e gera versões minificadas com source maps em `dist/css/`.
|
|
160
|
+
|
|
161
|
+
Para preservar a distribuição em arquivos separados (`layout.css`, `forms.css`,
|
|
162
|
+
`components.css`, `helpers.css`), existem pontos de entrada auxiliares em
|
|
163
|
+
`scss/entries/`, cada um combinando `tokens` + `base` + `themes` com o módulo
|
|
164
|
+
correspondente, garantindo que qualquer um dos arquivos possa ser usado de
|
|
165
|
+
forma isolada (com variáveis, reset e dark mode funcionando). Esses arquivos
|
|
166
|
+
são exclusivos do processo de build e não substituem `scss/clarus.scss` como
|
|
167
|
+
entrada pública para quem deseja o bundle completo.
|
|
168
|
+
|
|
169
|
+
`scss/clarus.scss` também é compilado diretamente para `dist/css/clarus.css`
|
|
170
|
+
(+ `.min.css`), como opção de import único para quem não precisa da distribuição
|
|
171
|
+
granular. É esse bundle que o campo `style` do `package.json` aponta por padrão.
|
|
172
|
+
|
|
173
|
+
Os nomes em `scss/entries/` usam o sufixo `-entry` (ex: `layout-entry.scss`)
|
|
174
|
+
para evitar colisão com os módulos de mesmo nome (`@use "layout"` dentro de
|
|
175
|
+
`scss/layout.scss` causaria um loop de importação).
|
|
176
|
+
|
|
177
|
+
## Regra de Evolução
|
|
178
|
+
|
|
179
|
+
Novos componentes devem seguir este fluxo:
|
|
180
|
+
|
|
181
|
+
1. Criar `scss/components/_nome-do-componente.scss`.
|
|
182
|
+
2. Adicionar o arquivo em `scss/components/_index.scss`.
|
|
183
|
+
3. Documentar a API de classes em Markdown.
|
|
184
|
+
4. Adicionar exemplo em `mockup/` quando fizer sentido.
|
package/js/clarus.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/mockup/layout.html
CHANGED
|
@@ -6,24 +6,36 @@
|
|
|
6
6
|
<title>Mockup - Layout</title>
|
|
7
7
|
|
|
8
8
|
<!-- STYLES IMPORT -->
|
|
9
|
-
<link rel="stylesheet" href="../
|
|
10
|
-
<link rel="stylesheet" href="../
|
|
9
|
+
<link rel="stylesheet" href="../dist/css/layout.css">
|
|
10
|
+
<link rel="stylesheet" href="../dist/css/forms.css">
|
|
11
11
|
</head>
|
|
12
12
|
<body>
|
|
13
13
|
|
|
14
|
-
<div class="container
|
|
15
|
-
|
|
14
|
+
<div class="container p-2">
|
|
15
|
+
<!-- Grid numerada de 12 colunas, com gutter via .g-3 -->
|
|
16
|
+
<div class="row g-3">
|
|
17
|
+
<div class="col-md-8 p-2">col-md-8</div>
|
|
18
|
+
<div class="col-md-4 p-2">col-md-4</div>
|
|
19
|
+
</div>
|
|
20
|
+
<div class="row g-3 mt-3">
|
|
21
|
+
<div class="col-4 p-2">col-4</div>
|
|
22
|
+
<div class="col-4 p-2">col-4</div>
|
|
23
|
+
<div class="col-4 p-2">col-4</div>
|
|
24
|
+
</div>
|
|
25
|
+
|
|
26
|
+
<!-- Colunas de largura igual automática -->
|
|
27
|
+
<div class="row gx-2 mt-3">
|
|
16
28
|
<div class="col-sm p-2">col 1</div>
|
|
17
29
|
<div class="col-md p-2">col 2</div>
|
|
18
30
|
<div class="col p-2">col 3</div>
|
|
19
31
|
</div>
|
|
20
|
-
<div class="row row-fluid justify-content-start">
|
|
32
|
+
<div class="row row-fluid justify-content-start mt-3">
|
|
21
33
|
<div class="col col-fluid p-2">col 1</div>
|
|
22
34
|
</div>
|
|
23
35
|
</div>
|
|
24
36
|
|
|
25
37
|
<div class="container-fluid p-2">
|
|
26
|
-
<div class="form-row mt-3
|
|
38
|
+
<div class="form-row mt-3 gap-x-2">
|
|
27
39
|
<div class="form-col">
|
|
28
40
|
<label for="input-text" class="form-label form-size-md">Nome completo</label>
|
|
29
41
|
<input type="text" class="form-control form-size-xxl" id="input-text" placeholder="Enter text" value="Jorge Reis">
|
|
@@ -31,7 +43,6 @@
|
|
|
31
43
|
</div>
|
|
32
44
|
</div>
|
|
33
45
|
</div>
|
|
34
|
-
|
|
35
46
|
|
|
36
47
|
</body>
|
|
37
48
|
</html>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "clarus-css",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "A modern, minimal CSS framework for building interfaces with HTML, CSS, and vanilla JavaScript.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"css",
|
|
@@ -23,26 +23,52 @@
|
|
|
23
23
|
"author": "Jorge Reis",
|
|
24
24
|
"sideEffects": [
|
|
25
25
|
"*.css",
|
|
26
|
-
"
|
|
26
|
+
"dist/**/*.css"
|
|
27
27
|
],
|
|
28
|
-
"style": "
|
|
28
|
+
"style": "dist/css/clarus.css",
|
|
29
29
|
"exports": {
|
|
30
|
-
"
|
|
31
|
-
"./
|
|
32
|
-
"./
|
|
33
|
-
"./
|
|
30
|
+
".": "./dist/css/clarus.css",
|
|
31
|
+
"./scss": "./scss/clarus.scss",
|
|
32
|
+
"./scss/*": "./scss/*",
|
|
33
|
+
"./layout.css": "./dist/css/layout.css",
|
|
34
|
+
"./forms.css": "./dist/css/forms.css",
|
|
35
|
+
"./components.css": "./dist/css/components.css",
|
|
36
|
+
"./helpers.css": "./dist/css/helpers.css",
|
|
37
|
+
"./js": "./dist/js/clarus.js"
|
|
34
38
|
},
|
|
35
39
|
"files": [
|
|
36
|
-
"
|
|
40
|
+
"dist",
|
|
41
|
+
"scss",
|
|
42
|
+
"js",
|
|
37
43
|
"docs",
|
|
38
44
|
"mockup",
|
|
39
45
|
"LICENSE",
|
|
40
46
|
"README.md"
|
|
41
47
|
],
|
|
48
|
+
"engines": {
|
|
49
|
+
"node": ">=18"
|
|
50
|
+
},
|
|
51
|
+
"scripts": {
|
|
52
|
+
"clean": "rimraf dist",
|
|
53
|
+
"build": "npm run clean && node scripts/build.mjs",
|
|
54
|
+
"watch": "node scripts/watch.mjs",
|
|
55
|
+
"lint:scss": "stylelint \"scss/**/*.scss\"",
|
|
56
|
+
"lint": "npm run lint:scss",
|
|
57
|
+
"test": "echo \"No tests configured yet\"",
|
|
58
|
+
"prepublishOnly": "npm run build && npm test"
|
|
59
|
+
},
|
|
42
60
|
"publishConfig": {
|
|
43
61
|
"access": "public"
|
|
44
62
|
},
|
|
45
|
-
"
|
|
46
|
-
"
|
|
63
|
+
"devDependencies": {
|
|
64
|
+
"autoprefixer": "^10.5.2",
|
|
65
|
+
"chokidar": "^5.0.0",
|
|
66
|
+
"cssnano": "^8.0.2",
|
|
67
|
+
"esbuild": "^0.28.1",
|
|
68
|
+
"postcss": "^8.5.16",
|
|
69
|
+
"rimraf": "^6.1.3",
|
|
70
|
+
"sass": "^1.101.0",
|
|
71
|
+
"stylelint": "^17.14.0",
|
|
72
|
+
"stylelint-config-standard-scss": "^17.0.0"
|
|
47
73
|
}
|
|
48
|
-
}
|
|
74
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
*,
|
|
2
|
+
*::before,
|
|
3
|
+
*::after {
|
|
4
|
+
box-sizing: border-box;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
html {
|
|
8
|
+
line-height: var(--clarus-line-height-base);
|
|
9
|
+
text-size-adjust: 100%;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
body {
|
|
13
|
+
margin: 0;
|
|
14
|
+
color: var(--clarus-color-text);
|
|
15
|
+
background-color: var(--clarus-color-surface);
|
|
16
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
@import url("https://fonts.googleapis.com/css2?family=Source+Code+Pro:ital,wght@0,200..900;1,200..900&display=swap");
|
|
2
|
+
@import url("https://fonts.googleapis.com/css2?family=Google+Sans+Flex:opsz,wght@6..144,1..1000&display=swap");
|
|
3
|
+
|
|
4
|
+
body,
|
|
5
|
+
button,
|
|
6
|
+
input,
|
|
7
|
+
select,
|
|
8
|
+
textarea {
|
|
9
|
+
font-family: var(--clarus-font-sans);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
code,
|
|
13
|
+
kbd,
|
|
14
|
+
pre,
|
|
15
|
+
samp {
|
|
16
|
+
font-family: var(--clarus-font-mono);
|
|
17
|
+
}
|
package/scss/clarus.scss
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
.btn {
|
|
2
|
+
display: inline-flex;
|
|
3
|
+
align-items: center;
|
|
4
|
+
justify-content: center;
|
|
5
|
+
min-height: 38px;
|
|
6
|
+
padding: 0 12px;
|
|
7
|
+
border: 1px solid transparent;
|
|
8
|
+
border-radius: var(--clarus-radius-sm);
|
|
9
|
+
color: var(--clarus-color-white);
|
|
10
|
+
background-color: var(--clarus-color-primary);
|
|
11
|
+
cursor: pointer;
|
|
12
|
+
}
|