@snksergio/design-system 0.34.0 → 0.35.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.md CHANGED
@@ -131,6 +131,45 @@ Cria o projeto já conectado ao registry, com tema/`cn`/`tv` configurados, tela
131
131
  > vez de copy-in. Modelo e versionamento em `DISTRIBUICAO.md` e na página
132
132
  > **Distribution** do catálogo.
133
133
 
134
+ ### Consumindo por `npm install` — setup completo
135
+
136
+ ⚠️ **A linha `@source` é obrigatória.** O Tailwind v4 **não escaneia `node_modules`**, então
137
+ sem ela nenhuma classe do DS é gerada e os componentes renderizam **sem estilo nenhum** —
138
+ não parcialmente: medido em 2026-08-07, **9 regras CSS** contra as milhares do showcase, com
139
+ o `<Button>` saindo transparente, 24px de altura e radius 0. Não há erro, e é fácil concluir
140
+ que "o pacote está quebrado".
141
+
142
+ ```css
143
+ /* seu src/index.css */
144
+ @import "tailwindcss";
145
+ @source "../node_modules/@snksergio/design-system/dist-lib/**/*.mjs";
146
+ @import "@snksergio/design-system/theme.css";
147
+ ```
148
+
149
+ O `@source` precisa cobrir `dist-lib/**`, não só o `index.mjs`: as classes dos componentes
150
+ flutuantes (Modal, Panel, dropdown, popover) vivem nos **chunks**.
151
+
152
+ O `theme.css` já traz tudo que o runtime precisa — `@font-face` do Geist, `--font-sans`,
153
+ `@custom-variant dark` (dark por classe, não por `prefers-color-scheme`), `body` e as
154
+ utilities do DS. Antes da v0.35.0 nada disso viajava e o canal ficava com fundo branco no
155
+ dark, tipografia em system-ui e `dark:` amarrado ao tema do sistema operacional.
156
+
157
+ **Fontes.** O `@font-face` aponta pra `/fonts/*.woff2` — caminho relativo à **raiz do site**,
158
+ não ao pacote. Copie os dois arquivos pro seu `public/fonts/`:
159
+
160
+ ```bash
161
+ cp node_modules/@snksergio/design-system/dist-lib/fonts/*.woff2 public/fonts/
162
+ ```
163
+
164
+ Sem isso a tipografia cai em `system-ui` e os 27 presets do DS renderizam na fonte errada.
165
+
166
+ **Animações.** Overlays (dropdown, popover, dialog, sheet) usam `animate-in`/`fade-in`/
167
+ `zoom-in`, que vêm do `tw-animate-css`. Sem ele funcionam, mas sem transição:
168
+
169
+ ```css
170
+ @import "tw-animate-css"; /* opcional — só as animações de entrada/saída */
171
+ ```
172
+
134
173
  **O que NÃO vem no copy-in:** o pipeline interno do DS (`.claude/agents|skills|hooks`, `.ai/context`, lições) vive só neste repositório. O **kit do consumidor** (orquestrador `ds-kit` + skills de tela + `DESIGN.md` + proteção por hook) vem via CLI no scaffold.
135
174
 
136
175
  ### Trocar o tema de marca
@@ -7,6 +7,50 @@
7
7
  * Customize na composição da tela (props/variantes + classes DS), não nos tokens.
8
8
  */
9
9
 
10
+ /* ── Runtime base (fonte, dark-variant, body) — ver buildRuntimeBase ──────── */
11
+
12
+ @font-face {
13
+ font-family: 'Geist';
14
+ src: url('/fonts/Geist-Variable.woff2') format('woff2');
15
+ font-weight: 100 900;
16
+ font-style: normal;
17
+ font-display: swap;
18
+ }
19
+
20
+ @font-face {
21
+ font-family: 'Geist Mono';
22
+ src: url('/fonts/GeistMono-Variable.woff2') format('woff2');
23
+ font-weight: 100 900;
24
+ font-style: normal;
25
+ font-display: swap;
26
+ }
27
+
28
+ @theme inline {
29
+ --font-sans: 'Geist', system-ui, -apple-system, sans-serif;
30
+ --font-mono: 'Geist Mono', 'Fira Code', monospace;
31
+ }
32
+
33
+ /* Dark por CLASSE, nunca por prefers-color-scheme: sem isto o tema do SO vaza
34
+ * pro app nos dois sentidos (app claro com SO escuro dispara `dark:`). */
35
+ @custom-variant dark (&:where(.dark, .dark *));
36
+
37
+ html {
38
+ font-family: var(--font-sans);
39
+ }
40
+
41
+ body {
42
+ min-height: 100vh;
43
+ background-color: var(--color-bg-canvas);
44
+ color: var(--color-fg-default);
45
+ transition: background-color 0.2s ease, color 0.2s ease;
46
+ }
47
+
48
+ @layer base {
49
+ button {
50
+ cursor: pointer;
51
+ }
52
+ }
53
+
10
54
  @theme {
11
55
  --color-bg-canvas: oklch(1 0 0);
12
56
  --color-bg-surface: oklch(1 0 0);
@@ -633,4 +677,33 @@
633
677
  &::-webkit-scrollbar-thumb:hover {
634
678
  background-color: var(--color-fg-muted);
635
679
  }
680
+ }
681
+
682
+ /* ── Superfície flutuante (usadas por 14 componentes distribuídos) ────────── */
683
+
684
+ @utility outline-float {
685
+ outline: 6px solid var(--color-overlay-float);
686
+ outline-offset: 0;
687
+ }
688
+
689
+ /* Bottom-sheet mobile de DropdownMenu/Popover (L-030/L-031).
690
+ *
691
+ * O Radix Popper envolve o Content num wrapper posicionado por `transform`
692
+ * inline, fora do alcance do className do Content — só dá pra alcançá-lo por
693
+ * seletor global. Sem este bloco, um menu marcado `mobileSheet` abre flutuando
694
+ * na posição calculada pelo Popper em vez de colar no rodapé.
695
+ *
696
+ * z-60 é load-bearing: acima de qualquer surface z-50 (drawer do sidebar mobile,
697
+ * dialog, sheet). Sem isso, um sheet aberto DE DENTRO do drawer empata em z-50 e
698
+ * renderiza atrás de forma intermitente, e o backdrop não captura o clique-fora. */
699
+ @media (width < 768px) {
700
+ [data-radix-popper-content-wrapper]:has(> [data-mobile-sheet]) {
701
+ position: fixed !important;
702
+ inset: auto 0 0 0 !important;
703
+ transform: none !important;
704
+ min-width: 0 !important;
705
+ width: 100% !important;
706
+ max-width: 100% !important;
707
+ z-index: 60 !important;
708
+ }
636
709
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@snksergio/design-system",
3
- "version": "0.34.0",
3
+ "version": "0.35.0",
4
4
  "//distribuicao": "Canal PRIMARIO = registry shadcn (copy-in) + CLI @snksergio/create-design-system; sobe sozinho no merge (Vercel). Canal SECUNDARIO = este pacote npm (@snksergio/design-system), funcional (build:lib gera ESM+CJS+types+theme.css) e publicado por passo MANUAL do mantenedor, entao costuma ficar atras do registry. NAO e depreciado — o texto anterior dizia isso e estava errado. Publish so pelo Passo 7 do .claude/skills/ds-dev/release.md (valida com `npm run lib:verify`, pede o token, publica, revoga). Ver DISTRIBUICAO.md.",
5
5
  "description": "iGreen Design System — internal library for SaaS CRM, admin panels and dashboards. React 19 + Tailwind v4 + Shadcn + Radix.",
6
6
  "license": "UNLICENSED",
@@ -13,6 +13,7 @@
13
13
  "dist-lib/tokens.*",
14
14
  "dist-lib/theme.css",
15
15
  "dist-lib/theme/**",
16
+ "dist-lib/fonts/**",
16
17
  "dist-lib/preview/**",
17
18
  "dist-lib/chunks/**",
18
19
  "dist-lib/src/**",