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.
Files changed (79) hide show
  1. package/README.md +126 -1
  2. package/dist/css/clarus.css +3583 -0
  3. package/dist/css/clarus.css.map +1 -0
  4. package/dist/css/clarus.min.css +2 -0
  5. package/dist/css/clarus.min.css.map +1 -0
  6. package/dist/css/components.css +162 -0
  7. package/dist/css/components.css.map +1 -0
  8. package/dist/css/components.min.css +2 -0
  9. package/dist/css/components.min.css.map +1 -0
  10. package/dist/css/forms.css +172 -0
  11. package/dist/css/forms.css.map +1 -0
  12. package/dist/css/forms.min.css +2 -0
  13. package/dist/css/forms.min.css.map +1 -0
  14. package/dist/css/helpers.css +2965 -0
  15. package/dist/css/helpers.css.map +1 -0
  16. package/dist/css/helpers.min.css +2 -0
  17. package/dist/css/helpers.min.css.map +1 -0
  18. package/dist/css/layout.css +485 -0
  19. package/dist/css/layout.css.map +1 -0
  20. package/dist/css/layout.min.css +2 -0
  21. package/dist/css/layout.min.css.map +1 -0
  22. package/dist/js/clarus.js +20 -0
  23. package/dist/js/clarus.js.map +7 -0
  24. package/dist/js/clarus.min.js +2 -0
  25. package/dist/js/clarus.min.js.map +7 -0
  26. package/docs/definitions.md +110 -13
  27. package/docs/guia-comandos.md +124 -0
  28. package/docs/scss-architecture.md +184 -0
  29. package/js/clarus.js +1 -0
  30. package/mockup/layout.html +18 -7
  31. package/package.json +37 -11
  32. package/scss/base/_index.scss +2 -0
  33. package/scss/base/_reset.scss +16 -0
  34. package/scss/base/_typography.scss +17 -0
  35. package/scss/clarus.scss +8 -0
  36. package/scss/components/_accordion.scss +4 -0
  37. package/scss/components/_alerts.scss +5 -0
  38. package/scss/components/_badges.scss +8 -0
  39. package/scss/components/_breadcrumbs.scss +5 -0
  40. package/scss/components/_buttons.scss +12 -0
  41. package/scss/components/_cards.scss +7 -0
  42. package/scss/components/_dropdown.scss +4 -0
  43. package/scss/components/_index.scss +14 -0
  44. package/scss/components/_modal.scss +9 -0
  45. package/scss/components/_navbar.scss +5 -0
  46. package/scss/components/_pagination.scss +5 -0
  47. package/scss/components/_tables.scss +4 -0
  48. package/scss/components/_tabs.scss +4 -0
  49. package/scss/components/_toasts.scss +5 -0
  50. package/scss/components/_tooltips.scss +4 -0
  51. package/scss/entries/components-entry.scss +5 -0
  52. package/scss/entries/forms-entry.scss +5 -0
  53. package/scss/entries/layout-entry.scss +5 -0
  54. package/scss/entries/utilities-entry.scss +5 -0
  55. package/scss/forms/_forms.scss +99 -0
  56. package/scss/forms/_index.scss +1 -0
  57. package/scss/layout/_containers.scss +24 -0
  58. package/scss/layout/_grid.scss +49 -0
  59. package/scss/layout/_index.scss +2 -0
  60. package/scss/settings/_breakpoints.scss +24 -0
  61. package/scss/settings/_colors.scss +23 -0
  62. package/scss/settings/_index.scss +4 -0
  63. package/scss/settings/_spacing.scss +12 -0
  64. package/scss/settings/_typography.scss +11 -0
  65. package/scss/themes/_dark.scss +7 -0
  66. package/scss/themes/_index.scss +1 -0
  67. package/scss/tokens/_index.scss +1 -0
  68. package/scss/tokens/_root.scss +25 -0
  69. package/scss/tools/_index.scss +1 -0
  70. package/scss/tools/_mixins.scss +38 -0
  71. package/scss/utilities/_display.scss +19 -0
  72. package/scss/utilities/_flex.scss +52 -0
  73. package/scss/utilities/_index.scss +4 -0
  74. package/scss/utilities/_spacing.scss +127 -0
  75. package/scss/utilities/_visibility.scss +7 -0
  76. package/assets/css/components.css +0 -0
  77. package/assets/css/forms.css +0 -153
  78. package/assets/css/helpers.css +0 -1
  79. package/assets/css/layout.css +0 -526
@@ -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. Próximo Marco
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. Criar ou ajustar `package.json`.
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 {};
@@ -6,24 +6,36 @@
6
6
  <title>Mockup - Layout</title>
7
7
 
8
8
  <!-- STYLES IMPORT -->
9
- <link rel="stylesheet" href="../assets/css/layout.css">
10
- <link rel="stylesheet" href="../assets/css/forms.css">
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-fluid p-2 gy-2">
15
- <div class="row-fluid gx-2">
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 gx-2">
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.0",
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
- "assets/**/*.css"
26
+ "dist/**/*.css"
27
27
  ],
28
- "style": "assets/css/layout.css",
28
+ "style": "dist/css/clarus.css",
29
29
  "exports": {
30
- "./layout.css": "./assets/css/layout.css",
31
- "./forms.css": "./assets/css/forms.css",
32
- "./components.css": "./assets/css/components.css",
33
- "./helpers.css": "./assets/css/helpers.css"
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
- "assets/css",
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
- "scripts": {
46
- "test": "echo \"No tests configured yet\""
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,2 @@
1
+ @use "reset";
2
+ @use "typography";
@@ -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
+ }
@@ -0,0 +1,8 @@
1
+ @charset "UTF-8";
2
+ @use "tokens";
3
+ @use "base";
4
+ @use "layout";
5
+ @use "forms";
6
+ @use "components";
7
+ @use "utilities";
8
+ @use "themes";
@@ -0,0 +1,4 @@
1
+ .accordion {
2
+ display: flex;
3
+ flex-direction: column;
4
+ }
@@ -0,0 +1,5 @@
1
+ .alert {
2
+ padding: 12px 16px;
3
+ border: 1px solid var(--clarus-color-border);
4
+ border-radius: var(--clarus-radius-md);
5
+ }
@@ -0,0 +1,8 @@
1
+ .badge {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ min-height: 20px;
5
+ padding: 0 8px;
6
+ border-radius: 999px;
7
+ font-size: 0.75rem;
8
+ }
@@ -0,0 +1,5 @@
1
+ .breadcrumb {
2
+ display: flex;
3
+ flex-wrap: wrap;
4
+ list-style: none;
5
+ }
@@ -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
+ }
@@ -0,0 +1,7 @@
1
+ .card {
2
+ display: flex;
3
+ flex-direction: column;
4
+ border: 1px solid var(--clarus-color-border);
5
+ border-radius: var(--clarus-radius-lg);
6
+ background-color: var(--clarus-color-surface);
7
+ }
@@ -0,0 +1,4 @@
1
+ .dropdown {
2
+ position: relative;
3
+ display: inline-flex;
4
+ }