@semacode/cli 3.9.0 → 3.9.2

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.
@@ -141,6 +141,19 @@ export function gerarDesignTokensArquivos(ir, alvo) {
141
141
  }
142
142
  const design = resolverDesignTokens(ir.design);
143
143
  const cabecalho = `/* SEMA-GOVERNED — design tokens de ${ir.nome}; edite o bloco design do contrato, nao este arquivo. */\n`;
144
+ const cssEscuro = `
145
+ @media (prefers-color-scheme: dark) {
146
+ :root {
147
+ --sema-cor-primaria: ${design.coresEscuras.primaria};
148
+ --sema-cor-primaria-hover: ${design.coresEscuras.primariaHover};
149
+ --sema-cor-fundo: ${design.coresEscuras.fundo};
150
+ --sema-cor-superficie: ${design.coresEscuras.superficie};
151
+ --sema-cor-texto: ${design.coresEscuras.texto};
152
+ --sema-cor-texto-secundario: ${design.coresEscuras.textoSecundario};
153
+ --sema-cor-borda: ${design.coresEscuras.borda};
154
+ }
155
+ }
156
+ `;
144
157
  const css = `${cabecalho}:root {
145
158
  --sema-cor-primaria: ${design.cores.primaria};
146
159
  --sema-cor-primaria-hover: ${design.cores.primariaHover};
@@ -157,9 +170,10 @@ export function gerarDesignTokensArquivos(ir, alvo) {
157
170
  --sema-raio: ${design.forma.raio};
158
171
  --sema-movimento-duracao: ${design.movimentoDuracao};
159
172
  }
160
- `;
173
+ ${cssEscuro}`;
161
174
  const objetoTokens = JSON.stringify({
162
175
  colors: design.cores,
176
+ darkColors: design.coresEscuras,
163
177
  typography: { ...design.tipografia, scale: design.escala },
164
178
  shape: design.forma,
165
179
  motion: { duration: design.movimentoDuracao },
@@ -57,20 +57,20 @@ export function gerarCss(modulo) {
57
57
  ======================================== */
58
58
  @media (prefers-color-scheme: dark) {
59
59
  :root {
60
- --sema-cor-primaria: #818cf8;
61
- --sema-cor-primaria-hover: #a5b4fc;
62
- --sema-cor-primaria-suave: #1e1b4b;
60
+ --sema-cor-primaria: ${design.coresEscuras.primaria};
61
+ --sema-cor-primaria-hover: ${design.coresEscuras.primariaHover};
62
+ --sema-cor-primaria-suave: ${design.coresEscuras.primariaSuave};
63
63
  --sema-cor-sucesso: #34d399;
64
64
  --sema-cor-sucesso-fundo: #064e3b;
65
65
  --sema-cor-erro: #f87171;
66
66
  --sema-cor-erro-texto: #fecaca;
67
67
  --sema-cor-erro-fundo: #450a0a;
68
- --sema-cor-fundo: #09090b;
69
- --sema-cor-superficie: #18181b;
70
- --sema-cor-texto: #fafafa;
71
- --sema-cor-texto-secundario: #a1a1aa;
72
- --sema-cor-borda: #3f3f46;
73
- --sema-cor-borda-foco: #6366f1;
68
+ --sema-cor-fundo: ${design.coresEscuras.fundo};
69
+ --sema-cor-superficie: ${design.coresEscuras.superficie};
70
+ --sema-cor-texto: ${design.coresEscuras.texto};
71
+ --sema-cor-texto-secundario: ${design.coresEscuras.textoSecundario};
72
+ --sema-cor-borda: ${design.coresEscuras.borda};
73
+ --sema-cor-borda-foco: ${design.coresEscuras.bordaFoco};
74
74
  --sema-cor-entidade: #a78bfa;
75
75
  }
76
76
  }
@@ -256,6 +256,8 @@ export const CAMPOS_TOKENS_DESIGN = new Set([
256
256
  "paleta", "tipografia", "densidade", "forma", "movimento",
257
257
  "cor_primaria", "cor_primaria_hover", "cor_primaria_suave", "cor_fundo", "cor_superficie",
258
258
  "cor_texto", "cor_texto_secundario", "cor_borda", "fonte", "fonte_titulo", "fonte_mono", "raio_base",
259
+ "cor_primaria_escuro", "cor_primaria_hover_escuro", "cor_primaria_suave_escuro", "cor_fundo_escuro",
260
+ "cor_superficie_escuro", "cor_texto_escuro", "cor_texto_secundario_escuro", "cor_borda_escuro",
259
261
  ]);
260
262
  export function validarDesignModulo(modulo, diagnosticos) {
261
263
  const design = modulo.design;
@@ -9,6 +9,9 @@ export interface CoresDesign {
9
9
  borda: string;
10
10
  bordaFoco: string;
11
11
  }
12
+ export interface PaletaDesign extends CoresDesign {
13
+ escuras: CoresDesign;
14
+ }
12
15
  export interface TipografiaDesign {
13
16
  fonte: string;
14
17
  fonteTitulo: string;
@@ -26,6 +29,7 @@ export interface FormaDesign {
26
29
  }
27
30
  export interface DesignTokensResolvidos {
28
31
  cores: CoresDesign;
32
+ coresEscuras: CoresDesign;
29
33
  tipografia: TipografiaDesign;
30
34
  escala: EscalaTipografica;
31
35
  forma: FormaDesign;
@@ -5,41 +5,49 @@ const PALETAS = {
5
5
  primaria: "#6366f1", primariaHover: "#4f46e5", primariaSuave: "#eef2ff",
6
6
  fundo: "#fafafa", superficie: "#ffffff", texto: "#18181b",
7
7
  textoSecundario: "#71717a", borda: "#e4e4e7", bordaFoco: "#a5b4fc",
8
+ escuras: { primaria: "#818cf8", primariaHover: "#a5b4fc", primariaSuave: "#1e1b4b", fundo: "#09090b", superficie: "#18181b", texto: "#fafafa", textoSecundario: "#a1a1aa", borda: "#3f3f46", bordaFoco: "#6366f1" },
8
9
  },
9
10
  terra: {
10
11
  primaria: "#b45309", primariaHover: "#92400e", primariaSuave: "#fef3c7",
11
12
  fundo: "#faf7f2", superficie: "#fffef9", texto: "#292524",
12
13
  textoSecundario: "#78716c", borda: "#e7e5e4", bordaFoco: "#d97706",
14
+ escuras: { primaria: "#d97706", primariaHover: "#f59e0b", primariaSuave: "#451a03", fundo: "#1c1410", superficie: "#292019", texto: "#faf5ef", textoSecundario: "#b8a894", borda: "#4a3a2c", bordaFoco: "#f59e0b" },
13
15
  },
14
16
  floresta: {
15
17
  primaria: "#15803d", primariaHover: "#166534", primariaSuave: "#dcfce7",
16
18
  fundo: "#f7faf7", superficie: "#ffffff", texto: "#1a2e1a",
17
19
  textoSecundario: "#6b7f6b", borda: "#dbe7db", bordaFoco: "#22c55e",
20
+ escuras: { primaria: "#4ade80", primariaHover: "#86efac", primariaSuave: "#14532d", fundo: "#0d1510", superficie: "#16211a", texto: "#f0faf0", textoSecundario: "#93a893", borda: "#2a3d2e", bordaFoco: "#4ade80" },
18
21
  },
19
22
  oceano: {
20
23
  primaria: "#0369a1", primariaHover: "#075985", primariaSuave: "#e0f2fe",
21
24
  fundo: "#f8fafc", superficie: "#ffffff", texto: "#0f172a",
22
25
  textoSecundario: "#64748b", borda: "#e2e8f0", bordaFoco: "#38bdf8",
26
+ escuras: { primaria: "#38bdf8", primariaHover: "#7dd3fc", primariaSuave: "#0c4a6e", fundo: "#0b1220", superficie: "#141f33", texto: "#f1f6fb", textoSecundario: "#8ba3bd", borda: "#28394f", bordaFoco: "#38bdf8" },
23
27
  },
24
28
  noturno: {
25
29
  primaria: "#22d3ee", primariaHover: "#06b6d4", primariaSuave: "#164e63",
26
30
  fundo: "#0f172a", superficie: "#1e293b", texto: "#e2e8f0",
27
31
  textoSecundario: "#94a3b8", borda: "#334155", bordaFoco: "#22d3ee",
32
+ escuras: { primaria: "#67e8f9", primariaHover: "#a5f3fc", primariaSuave: "#0e2a33", fundo: "#020617", superficie: "#111c2e", texto: "#eef6fa", textoSecundario: "#8899ab", borda: "#22334a", bordaFoco: "#67e8f9" },
28
33
  },
29
34
  grafite: {
30
35
  primaria: "#f97316", primariaHover: "#ea580c", primariaSuave: "#ffedd5",
31
36
  fundo: "#18181b", superficie: "#27272a", texto: "#fafafa",
32
37
  textoSecundario: "#a1a1aa", borda: "#3f3f46", bordaFoco: "#fb923c",
38
+ escuras: { primaria: "#fb923c", primariaHover: "#fdba74", primariaSuave: "#431407", fundo: "#101012", superficie: "#1d1d20", texto: "#fafafa", textoSecundario: "#a0a0a6", borda: "#3a3a40", bordaFoco: "#fb923c" },
33
39
  },
34
40
  neon: {
35
41
  primaria: "#a3e635", primariaHover: "#84cc16", primariaSuave: "#365314",
36
42
  fundo: "#0a0a0a", superficie: "#171717", texto: "#fafafa",
37
43
  textoSecundario: "#a3a3a3", borda: "#262626", bordaFoco: "#a3e635",
44
+ escuras: { primaria: "#bef264", primariaHover: "#d9f99d", primariaSuave: "#1a2e05", fundo: "#050505", superficie: "#101210", texto: "#fafafa", textoSecundario: "#9ca89c", borda: "#1f241f", bordaFoco: "#bef264" },
38
45
  },
39
46
  pixel: {
40
47
  primaria: "#fbbf24", primariaHover: "#f59e0b", primariaSuave: "#451a03",
41
48
  fundo: "#111827", superficie: "#1f2937", texto: "#f9fafb",
42
49
  textoSecundario: "#9ca3af", borda: "#374151", bordaFoco: "#fbbf24",
50
+ escuras: { primaria: "#fcd34d", primariaHover: "#fde68a", primariaSuave: "#3b2a05", fundo: "#0a0d16", superficie: "#151a28", texto: "#f9fafb", textoSecundario: "#98a1b3", borda: "#2b3446", bordaFoco: "#fcd34d" },
43
51
  },
44
52
  };
45
53
  const TIPOGRAFIAS = {
@@ -90,9 +98,21 @@ const CHAVES_COR = {
90
98
  cor_texto_secundario: "textoSecundario",
91
99
  cor_borda: "borda",
92
100
  };
101
+ const CHAVES_COR_ESCURA = {
102
+ cor_primaria_escuro: "primaria",
103
+ cor_primaria_hover_escuro: "primariaHover",
104
+ cor_primaria_suave_escuro: "primariaSuave",
105
+ cor_fundo_escuro: "fundo",
106
+ cor_superficie_escuro: "superficie",
107
+ cor_texto_escuro: "texto",
108
+ cor_texto_secundario_escuro: "textoSecundario",
109
+ cor_borda_escuro: "borda",
110
+ };
93
111
  export function resolverDesignTokens(design) {
94
112
  const tokens = design?.tokens ?? {};
95
- const cores = { ...PALETAS[tokens.paleta ?? "padrao"] ?? PALETAS.padrao };
113
+ const paleta = PALETAS[tokens.paleta ?? "padrao"] ?? PALETAS.padrao;
114
+ const { escuras, ...cores } = { ...paleta, escuras: { ...paleta.escuras } };
115
+ const coresEscuras = escuras;
96
116
  const tipografia = { ...TIPOGRAFIAS[tokens.tipografia ?? "padrao"] ?? TIPOGRAFIAS.padrao };
97
117
  const escala = { ...DENSIDADES[tokens.densidade ?? "padrao"] ?? DENSIDADES.padrao };
98
118
  const forma = { ...FORMAS[tokens.forma ?? "padrao"] ?? FORMAS.padrao };
@@ -100,9 +120,13 @@ export function resolverDesignTokens(design) {
100
120
  const overrides = tokens.overrides ?? {};
101
121
  for (const [chave, valor] of Object.entries(overrides)) {
102
122
  const alvoCor = CHAVES_COR[chave];
123
+ const alvoCorEscura = CHAVES_COR_ESCURA[chave];
103
124
  if (alvoCor) {
104
125
  cores[alvoCor] = valor;
105
126
  }
127
+ else if (alvoCorEscura) {
128
+ coresEscuras[alvoCorEscura] = valor;
129
+ }
106
130
  else if (chave === "fonte") {
107
131
  tipografia.fonte = valor;
108
132
  }
@@ -117,7 +141,7 @@ export function resolverDesignTokens(design) {
117
141
  forma.raioLg = valor;
118
142
  }
119
143
  }
120
- return { cores, tipografia, escala, forma, movimentoDuracao };
144
+ return { cores, coresEscuras, tipografia, escala, forma, movimentoDuracao };
121
145
  }
122
146
  export function listarNomesDesign() {
123
147
  return {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@semacode/cli",
3
- "version": "3.9.0",
3
+ "version": "3.9.2",
4
4
  "description": "Local-first semantic governance CLI for AI agents, proven with Claude, Codex, zCode (GLM) and Kimi: contracts, drift, impact, docs gates, and code generation.",
5
5
  "type": "module",
6
6
  "icon": "logo.png",