@semacode/cli 3.8.5 → 3.9.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/dist/agentContextPack.js +1 -0
- package/dist/drift.part01.d.ts +1 -1
- package/dist/drift.part14.js +8 -0
- package/dist/geracaoCore.d.ts +4 -0
- package/dist/geracaoCore.js +126 -29
- package/exemplos/painel_agro.sema +68 -0
- package/node_modules/@sema/gerador-css/dist/index.part02.js +462 -461
- package/node_modules/@sema/nucleo/dist/ast/tipos.d.ts +2 -1
- package/node_modules/@sema/nucleo/dist/ir/conversor.part03.js +17 -0
- package/node_modules/@sema/nucleo/dist/ir/modelos.d.ts +14 -0
- package/node_modules/@sema/nucleo/dist/lexer/tokens.js +2 -0
- package/node_modules/@sema/nucleo/dist/parser/parser.modulo.js +9 -0
- package/node_modules/@sema/nucleo/dist/parser/parser.part01.d.ts +1 -1
- package/node_modules/@sema/nucleo/dist/parser/parser.part02.js +2 -0
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part08.d.ts +8 -0
- package/node_modules/@sema/nucleo/dist/semantico/analisador.part08.js +47 -1
- package/node_modules/@sema/padroes/dist/design.d.ts +58 -0
- package/node_modules/@sema/padroes/dist/design.js +155 -0
- package/node_modules/@sema/padroes/dist/index.d.ts +1 -0
- package/node_modules/@sema/padroes/dist/index.js +1 -0
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { IntervaloFonte } from "../diagnosticos/index.js";
|
|
2
|
-
export type TipoBloco = "module" | "use" | "database" | "type" | "entity" | "enum" | "task" | "worker" | "evento" | "fila" | "cron" | "webhook" | "cache" | "storage" | "policy" | "input" | "output" | "rules" | "effects" | "impl" | "vinculos" | "execucao" | "auth" | "authz" | "dados" | "audit" | "segredos" | "forbidden" | "guarantees" | "state" | "flow" | "route" | "tests" | "error" | "docs" | "comments" | "table" | "view" | "query" | "transaction" | "index" | "constraint" | "relationship" | "collection" | "document" | "keyspace" | "stream" | "lock" | "retention" | "replication" | "fields" | "invariants" | "transitions" | "given" | "when" | "expect" | "case" | "desconhecido";
|
|
2
|
+
export type TipoBloco = "module" | "use" | "design" | "tokens" | "database" | "type" | "entity" | "enum" | "task" | "worker" | "evento" | "fila" | "cron" | "webhook" | "cache" | "storage" | "policy" | "input" | "output" | "rules" | "effects" | "impl" | "vinculos" | "execucao" | "auth" | "authz" | "dados" | "audit" | "segredos" | "forbidden" | "guarantees" | "state" | "flow" | "route" | "tests" | "error" | "docs" | "comments" | "table" | "view" | "query" | "transaction" | "index" | "constraint" | "relationship" | "collection" | "document" | "keyspace" | "stream" | "lock" | "retention" | "replication" | "fields" | "invariants" | "transitions" | "given" | "when" | "expect" | "case" | "desconhecido";
|
|
3
3
|
export interface NoAstBase {
|
|
4
4
|
tipo: string;
|
|
5
5
|
intervalo?: IntervaloFonte;
|
|
@@ -101,6 +101,7 @@ export interface ModuloAst extends NoAstBase {
|
|
|
101
101
|
vinculos?: BlocoGenericoAst;
|
|
102
102
|
docs?: BlocoGenericoAst;
|
|
103
103
|
comments?: BlocoGenericoAst;
|
|
104
|
+
design?: BlocoGenericoAst;
|
|
104
105
|
databases: BlocoGenericoAst[];
|
|
105
106
|
types: TypeAst[];
|
|
106
107
|
entities: EntityAst[];
|
|
@@ -271,8 +271,25 @@ export function converterParaIr(modulo, diagnosticos, contexto) {
|
|
|
271
271
|
...superficies.flatMap((superficie) => superficie.vinculos),
|
|
272
272
|
],
|
|
273
273
|
});
|
|
274
|
+
const designBloco = modulo.design;
|
|
275
|
+
const tokensDesign = designBloco?.blocos.find((bloco) => bloco.tipo === "bloco_generico" && bloco.palavraChave === "tokens");
|
|
276
|
+
const design = designBloco
|
|
277
|
+
? {
|
|
278
|
+
dominio: designBloco.campos.find((campo) => campo.nome === "dominio")?.valor,
|
|
279
|
+
identidade: designBloco.campos.find((campo) => campo.nome === "identidade")?.valor,
|
|
280
|
+
tokens: {
|
|
281
|
+
...Object.fromEntries((tokensDesign?.campos ?? [])
|
|
282
|
+
.filter((campo) => ["paleta", "tipografia", "densidade", "forma", "movimento"].includes(campo.nome))
|
|
283
|
+
.map((campo) => [campo.nome, campo.valor])),
|
|
284
|
+
overrides: Object.fromEntries((tokensDesign?.campos ?? [])
|
|
285
|
+
.filter((campo) => !["paleta", "tipografia", "densidade", "forma", "movimento"].includes(campo.nome))
|
|
286
|
+
.map((campo) => [campo.nome, campo.valor])),
|
|
287
|
+
},
|
|
288
|
+
}
|
|
289
|
+
: undefined;
|
|
274
290
|
return {
|
|
275
291
|
nome: modulo.nome,
|
|
292
|
+
design,
|
|
276
293
|
uses: contexto?.modulosImportados.length
|
|
277
294
|
? [...contexto.modulosImportados]
|
|
278
295
|
: modulo.uses.filter((use) => use.origem === "sema").map((use) => use.caminho),
|
|
@@ -325,8 +325,22 @@ export interface IrBancoDados {
|
|
|
325
325
|
block: IrBlocoDeclarativo;
|
|
326
326
|
resources: IrRecursoPersistencia[];
|
|
327
327
|
}
|
|
328
|
+
export interface IrDesignTokens {
|
|
329
|
+
paleta?: string;
|
|
330
|
+
tipografia?: string;
|
|
331
|
+
densidade?: string;
|
|
332
|
+
forma?: string;
|
|
333
|
+
movimento?: string;
|
|
334
|
+
overrides: Record<string, string>;
|
|
335
|
+
}
|
|
336
|
+
export interface IrDesign {
|
|
337
|
+
dominio?: string;
|
|
338
|
+
identidade?: string;
|
|
339
|
+
tokens: IrDesignTokens;
|
|
340
|
+
}
|
|
328
341
|
export interface IrModulo {
|
|
329
342
|
nome: string;
|
|
343
|
+
design?: IrDesign;
|
|
330
344
|
uses: string[];
|
|
331
345
|
imports: IrUse[];
|
|
332
346
|
interoperabilidades: IrInteropExterno[];
|
|
@@ -9,6 +9,7 @@ export function parseModuloParser(parser) {
|
|
|
9
9
|
const nome = parser.consumirTipo("identificador", "Era esperado o nome do modulo.").valor;
|
|
10
10
|
parser.consumirValor("{", "Era esperado abrir o corpo do modulo com {.");
|
|
11
11
|
const uses = [];
|
|
12
|
+
let design;
|
|
12
13
|
let vinculos;
|
|
13
14
|
const databases = [];
|
|
14
15
|
const types = [];
|
|
@@ -58,6 +59,13 @@ export function parseModuloParser(parser) {
|
|
|
58
59
|
}
|
|
59
60
|
extras.push(parser.parseBlocoGenerico("desconhecido"));
|
|
60
61
|
break;
|
|
62
|
+
case "design":
|
|
63
|
+
if (parser.iniciaBlocoSimples("design")) {
|
|
64
|
+
design = parser.parseBlocoGenerico("design");
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
extras.push(parser.parseBlocoGenerico("desconhecido"));
|
|
68
|
+
break;
|
|
61
69
|
case "vinculos":
|
|
62
70
|
if (parser.iniciaBlocoSimples("vinculos")) {
|
|
63
71
|
vinculos = parser.parseBlocoGenerico("vinculos");
|
|
@@ -195,6 +203,7 @@ export function parseModuloParser(parser) {
|
|
|
195
203
|
tipo: "module",
|
|
196
204
|
nome,
|
|
197
205
|
uses,
|
|
206
|
+
design,
|
|
198
207
|
vinculos,
|
|
199
208
|
docs,
|
|
200
209
|
comments,
|
|
@@ -4,6 +4,6 @@ export interface ResultadoParser {
|
|
|
4
4
|
modulo?: ModuloAst;
|
|
5
5
|
diagnosticos: Diagnostico[];
|
|
6
6
|
}
|
|
7
|
-
export type PalavraBloco = "database" | "docs" | "comments" | "table" | "view" | "query" | "transaction" | "index" | "constraint" | "relationship" | "collection" | "document" | "keyspace" | "stream" | "lock" | "retention" | "replication" | "fields" | "invariants" | "transitions" | "input" | "output" | "rules" | "effects" | "impl" | "vinculos" | "execucao" | "auth" | "authz" | "dados" | "audit" | "segredos" | "forbidden" | "guarantees" | "state" | "tests" | "error" | "flow" | "route" | "worker" | "evento" | "fila" | "cron" | "webhook" | "cache" | "storage" | "policy" | "when" | "given" | "expect";
|
|
7
|
+
export type PalavraBloco = "database" | "docs" | "comments" | "design" | "tokens" | "table" | "view" | "query" | "transaction" | "index" | "constraint" | "relationship" | "collection" | "document" | "keyspace" | "stream" | "lock" | "retention" | "replication" | "fields" | "invariants" | "transitions" | "input" | "output" | "rules" | "effects" | "impl" | "vinculos" | "execucao" | "auth" | "authz" | "dados" | "audit" | "segredos" | "forbidden" | "guarantees" | "state" | "tests" | "error" | "flow" | "route" | "worker" | "evento" | "fila" | "cron" | "webhook" | "cache" | "storage" | "policy" | "when" | "given" | "expect";
|
|
8
8
|
export declare const PALAVRAS_BLOCO_NOMEADO_LIVRE: Set<PalavraBloco>;
|
|
9
9
|
export declare function decodificarTextoLiteral(valor: string): string;
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
import { type Diagnostico } from "../diagnosticos/index.js";
|
|
1
2
|
import type { ModuloAst } from "../ast/tipos.js";
|
|
2
3
|
import { OpcoesAnaliseSemantica, ResultadoSemantico } from "./analisador.part01.js";
|
|
3
4
|
export declare function analisarSemantica(modulo: ModuloAst, opcoes?: OpcoesAnaliseSemantica): ResultadoSemantico;
|
|
5
|
+
export declare const PALETAS_DESIGN_SUPORTADAS: Set<string>;
|
|
6
|
+
export declare const TIPOGRAFIAS_DESIGN_SUPORTADAS: Set<string>;
|
|
7
|
+
export declare const DENSIDADES_DESIGN_SUPORTADAS: Set<string>;
|
|
8
|
+
export declare const FORMAS_DESIGN_SUPORTADAS: Set<string>;
|
|
9
|
+
export declare const MOVIMENTOS_DESIGN_SUPORTADAS: Set<string>;
|
|
10
|
+
export declare const CAMPOS_TOKENS_DESIGN: Set<string>;
|
|
11
|
+
export declare function validarDesignModulo(modulo: import("../ast/tipos.js").ModuloAst, diagnosticos: Diagnostico[]): void;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Descricao: nucleo semantico particionado; consulte contratos/sema/software.sema antes de editar.
|
|
3
3
|
import { criarDiagnostico } from "../diagnosticos/index.js";
|
|
4
4
|
import { parsearTransicaoEstado, } from "./estruturas.js";
|
|
5
|
-
import { PADRAO_CAMINHO_INTEROP, TIPOS_PRIMITIVOS, coletarResumoTask, diagnosticoDuplicado, localizarBloco, localizarCampo, validarCamposDeTipos, validarVinculos } from "./analisador.part01.js";
|
|
5
|
+
import { PADRAO_CAMINHO_INTEROP, TIPOS_PRIMITIVOS, coletarResumoTask, diagnosticoDuplicado, localizarBloco, localizarCampo, validarCamposDeTipos, validarVinculos, valorCampoCompleto } from "./analisador.part01.js";
|
|
6
6
|
import { descreverSugestoes, recomporCaminhoRoute, resolverUseSema, serializarTransicao, validarSuperficie } from "./analisador.part04.js";
|
|
7
7
|
import { validarFlow, validarInvariantesDeCampos, validarState } from "./analisador.part05.js";
|
|
8
8
|
import { validarStatusTextoComState, validarTask } from "./analisador.part07.js";
|
|
@@ -184,6 +184,7 @@ export function analisarSemantica(modulo, opcoes = {}) {
|
|
|
184
184
|
validarRoute(route, tasksConhecidas, tarefasDetalhadas, diagnosticos);
|
|
185
185
|
}
|
|
186
186
|
validarVinculos(modulo.vinculos, diagnosticos, `modulo ${modulo.nome}`);
|
|
187
|
+
validarDesignModulo(modulo, diagnosticos);
|
|
187
188
|
for (const worker of modulo.workers) {
|
|
188
189
|
validarSuperficie(worker, "worker", tasksConhecidas, tiposConhecidos, diagnosticos);
|
|
189
190
|
}
|
|
@@ -246,4 +247,49 @@ export function analisarSemantica(modulo, opcoes = {}) {
|
|
|
246
247
|
diagnosticos,
|
|
247
248
|
};
|
|
248
249
|
}
|
|
250
|
+
export const PALETAS_DESIGN_SUPORTADAS = new Set(["padrao", "terra", "floresta", "oceano", "noturno", "grafite", "neon", "pixel"]);
|
|
251
|
+
export const TIPOGRAFIAS_DESIGN_SUPORTADAS = new Set(["padrao", "humanista", "tecnica", "display"]);
|
|
252
|
+
export const DENSIDADES_DESIGN_SUPORTADAS = new Set(["compacta", "padrao", "confortavel"]);
|
|
253
|
+
export const FORMAS_DESIGN_SUPORTADAS = new Set(["reta", "padrao", "arredondada", "pill"]);
|
|
254
|
+
export const MOVIMENTOS_DESIGN_SUPORTADAS = new Set(["nenhum", "padrao", "suave"]);
|
|
255
|
+
export const CAMPOS_TOKENS_DESIGN = new Set([
|
|
256
|
+
"paleta", "tipografia", "densidade", "forma", "movimento",
|
|
257
|
+
"cor_primaria", "cor_primaria_hover", "cor_primaria_suave", "cor_fundo", "cor_superficie",
|
|
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",
|
|
261
|
+
]);
|
|
262
|
+
export function validarDesignModulo(modulo, diagnosticos) {
|
|
263
|
+
const design = modulo.design;
|
|
264
|
+
if (!design) {
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
for (const campo of design.campos) {
|
|
268
|
+
if (!["dominio", "identidade"].includes(campo.nome)) {
|
|
269
|
+
diagnosticos.push(criarDiagnostico("SEM110", `Design do modulo "${modulo.nome}" declarou campo invalido: "${campo.nome}".`, "erro", campo.intervalo, "Use dominio, identidade ou o subbloco tokens { ... } com paleta, tipografia, densidade, forma, movimento ou overrides de cor/fonte/raio."));
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
const PRESETS = [
|
|
273
|
+
[PALETAS_DESIGN_SUPORTADAS, "paleta"],
|
|
274
|
+
[TIPOGRAFIAS_DESIGN_SUPORTADAS, "tipografia"],
|
|
275
|
+
[DENSIDADES_DESIGN_SUPORTADAS, "densidade"],
|
|
276
|
+
[FORMAS_DESIGN_SUPORTADAS, "forma"],
|
|
277
|
+
[MOVIMENTOS_DESIGN_SUPORTADAS, "movimento"],
|
|
278
|
+
];
|
|
279
|
+
const tokens = design.blocos.find((bloco) => bloco.tipo === "bloco_generico" && bloco.palavraChave === "tokens");
|
|
280
|
+
if (!tokens) {
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
for (const campo of tokens.campos) {
|
|
284
|
+
if (!CAMPOS_TOKENS_DESIGN.has(campo.nome)) {
|
|
285
|
+
diagnosticos.push(criarDiagnostico("SEM111", `Tokens de design do modulo "${modulo.nome}" declarou campo invalido: "${campo.nome}".`, "erro", campo.intervalo, `Use ${[...CAMPOS_TOKENS_DESIGN].join(", ")} dentro de tokens { ... }.`));
|
|
286
|
+
continue;
|
|
287
|
+
}
|
|
288
|
+
const preset = PRESETS.find(([conjunto, nome]) => nome === campo.nome);
|
|
289
|
+
const valor = valorCampoCompleto(campo) ?? "";
|
|
290
|
+
if (preset && !preset[0].has(valor)) {
|
|
291
|
+
diagnosticos.push(criarDiagnostico("SEM112", `Design do modulo "${modulo.nome}" declarou ${campo.nome} invalida: "${valor}".`, "erro", campo.intervalo, `Use ${[...preset[0]].join(", ")} ou um override livre (ex.: cor_primaria: "#b45309").`));
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
249
295
|
//# sourceMappingURL=analisador.part08.js.map
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export interface CoresDesign {
|
|
2
|
+
primaria: string;
|
|
3
|
+
primariaHover: string;
|
|
4
|
+
primariaSuave: string;
|
|
5
|
+
fundo: string;
|
|
6
|
+
superficie: string;
|
|
7
|
+
texto: string;
|
|
8
|
+
textoSecundario: string;
|
|
9
|
+
borda: string;
|
|
10
|
+
bordaFoco: string;
|
|
11
|
+
}
|
|
12
|
+
export interface PaletaDesign extends CoresDesign {
|
|
13
|
+
escuras: CoresDesign;
|
|
14
|
+
}
|
|
15
|
+
export interface TipografiaDesign {
|
|
16
|
+
fonte: string;
|
|
17
|
+
fonteTitulo: string;
|
|
18
|
+
fonteMono: string;
|
|
19
|
+
}
|
|
20
|
+
export interface EscalaTipografica {
|
|
21
|
+
base: string;
|
|
22
|
+
titulo: string;
|
|
23
|
+
subtitulo: string;
|
|
24
|
+
pequeno: string;
|
|
25
|
+
}
|
|
26
|
+
export interface FormaDesign {
|
|
27
|
+
raio: string;
|
|
28
|
+
raioLg: string;
|
|
29
|
+
}
|
|
30
|
+
export interface DesignTokensResolvidos {
|
|
31
|
+
cores: CoresDesign;
|
|
32
|
+
coresEscuras: CoresDesign;
|
|
33
|
+
tipografia: TipografiaDesign;
|
|
34
|
+
escala: EscalaTipografica;
|
|
35
|
+
forma: FormaDesign;
|
|
36
|
+
movimentoDuracao: string;
|
|
37
|
+
}
|
|
38
|
+
interface DesignDeclarado {
|
|
39
|
+
dominio?: string;
|
|
40
|
+
identidade?: string;
|
|
41
|
+
tokens?: {
|
|
42
|
+
paleta?: string;
|
|
43
|
+
tipografia?: string;
|
|
44
|
+
densidade?: string;
|
|
45
|
+
forma?: string;
|
|
46
|
+
movimento?: string;
|
|
47
|
+
overrides?: Record<string, string>;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
export declare function resolverDesignTokens(design?: DesignDeclarado): DesignTokensResolvidos;
|
|
51
|
+
export declare function listarNomesDesign(): {
|
|
52
|
+
paletas: string[];
|
|
53
|
+
tipografias: string[];
|
|
54
|
+
densidades: string[];
|
|
55
|
+
formas: string[];
|
|
56
|
+
movimentos: string[];
|
|
57
|
+
};
|
|
58
|
+
export {};
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
// SEMA-GOVERNED: sema.produto.dsl_design
|
|
2
|
+
// Descrição: presets de identidade visual e resolucao de tokens de design a partir do bloco design do contrato.
|
|
3
|
+
const PALETAS = {
|
|
4
|
+
padrao: {
|
|
5
|
+
primaria: "#6366f1", primariaHover: "#4f46e5", primariaSuave: "#eef2ff",
|
|
6
|
+
fundo: "#fafafa", superficie: "#ffffff", texto: "#18181b",
|
|
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" },
|
|
9
|
+
},
|
|
10
|
+
terra: {
|
|
11
|
+
primaria: "#b45309", primariaHover: "#92400e", primariaSuave: "#fef3c7",
|
|
12
|
+
fundo: "#faf7f2", superficie: "#fffef9", texto: "#292524",
|
|
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" },
|
|
15
|
+
},
|
|
16
|
+
floresta: {
|
|
17
|
+
primaria: "#15803d", primariaHover: "#166534", primariaSuave: "#dcfce7",
|
|
18
|
+
fundo: "#f7faf7", superficie: "#ffffff", texto: "#1a2e1a",
|
|
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" },
|
|
21
|
+
},
|
|
22
|
+
oceano: {
|
|
23
|
+
primaria: "#0369a1", primariaHover: "#075985", primariaSuave: "#e0f2fe",
|
|
24
|
+
fundo: "#f8fafc", superficie: "#ffffff", texto: "#0f172a",
|
|
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" },
|
|
27
|
+
},
|
|
28
|
+
noturno: {
|
|
29
|
+
primaria: "#22d3ee", primariaHover: "#06b6d4", primariaSuave: "#164e63",
|
|
30
|
+
fundo: "#0f172a", superficie: "#1e293b", texto: "#e2e8f0",
|
|
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" },
|
|
33
|
+
},
|
|
34
|
+
grafite: {
|
|
35
|
+
primaria: "#f97316", primariaHover: "#ea580c", primariaSuave: "#ffedd5",
|
|
36
|
+
fundo: "#18181b", superficie: "#27272a", texto: "#fafafa",
|
|
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" },
|
|
39
|
+
},
|
|
40
|
+
neon: {
|
|
41
|
+
primaria: "#a3e635", primariaHover: "#84cc16", primariaSuave: "#365314",
|
|
42
|
+
fundo: "#0a0a0a", superficie: "#171717", texto: "#fafafa",
|
|
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" },
|
|
45
|
+
},
|
|
46
|
+
pixel: {
|
|
47
|
+
primaria: "#fbbf24", primariaHover: "#f59e0b", primariaSuave: "#451a03",
|
|
48
|
+
fundo: "#111827", superficie: "#1f2937", texto: "#f9fafb",
|
|
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" },
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
const TIPOGRAFIAS = {
|
|
54
|
+
padrao: {
|
|
55
|
+
fonte: '"Inter", "Segoe UI", system-ui, -apple-system, sans-serif',
|
|
56
|
+
fonteTitulo: '"Inter", "Segoe UI", system-ui, sans-serif',
|
|
57
|
+
fonteMono: '"JetBrains Mono", "Fira Code", "Consolas", monospace',
|
|
58
|
+
},
|
|
59
|
+
humanista: {
|
|
60
|
+
fonte: '"Nunito Sans", "Segoe UI", system-ui, sans-serif',
|
|
61
|
+
fonteTitulo: '"Source Serif 4", Georgia, serif',
|
|
62
|
+
fonteMono: '"IBM Plex Mono", "Consolas", monospace',
|
|
63
|
+
},
|
|
64
|
+
tecnica: {
|
|
65
|
+
fonte: '"IBM Plex Sans", system-ui, sans-serif',
|
|
66
|
+
fonteTitulo: '"IBM Plex Mono", "Consolas", monospace',
|
|
67
|
+
fonteMono: '"IBM Plex Mono", "Consolas", monospace',
|
|
68
|
+
},
|
|
69
|
+
display: {
|
|
70
|
+
fonte: '"Inter", system-ui, sans-serif',
|
|
71
|
+
fonteTitulo: '"Fraunces", Georgia, serif',
|
|
72
|
+
fonteMono: '"JetBrains Mono", monospace',
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
const DENSIDADES = {
|
|
76
|
+
compacta: { base: "0.875rem", titulo: "1.5rem", subtitulo: "1.125rem", pequeno: "0.75rem" },
|
|
77
|
+
padrao: { base: "0.9375rem", titulo: "1.75rem", subtitulo: "1.25rem", pequeno: "0.8125rem" },
|
|
78
|
+
confortavel: { base: "1rem", titulo: "1.875rem", subtitulo: "1.375rem", pequeno: "0.875rem" },
|
|
79
|
+
};
|
|
80
|
+
const FORMAS = {
|
|
81
|
+
reta: { raio: "0", raioLg: "0" },
|
|
82
|
+
padrao: { raio: "0.5rem", raioLg: "0.75rem" },
|
|
83
|
+
arredondada: { raio: "0.75rem", raioLg: "1rem" },
|
|
84
|
+
pill: { raio: "999px", raioLg: "999px" },
|
|
85
|
+
};
|
|
86
|
+
const MOVIMENTOS = {
|
|
87
|
+
nenhum: "0s",
|
|
88
|
+
padrao: "150ms",
|
|
89
|
+
suave: "280ms",
|
|
90
|
+
};
|
|
91
|
+
const CHAVES_COR = {
|
|
92
|
+
cor_primaria: "primaria",
|
|
93
|
+
cor_primaria_hover: "primariaHover",
|
|
94
|
+
cor_primaria_suave: "primariaSuave",
|
|
95
|
+
cor_fundo: "fundo",
|
|
96
|
+
cor_superficie: "superficie",
|
|
97
|
+
cor_texto: "texto",
|
|
98
|
+
cor_texto_secundario: "textoSecundario",
|
|
99
|
+
cor_borda: "borda",
|
|
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
|
+
};
|
|
111
|
+
export function resolverDesignTokens(design) {
|
|
112
|
+
const tokens = design?.tokens ?? {};
|
|
113
|
+
const paleta = PALETAS[tokens.paleta ?? "padrao"] ?? PALETAS.padrao;
|
|
114
|
+
const { escuras, ...cores } = { ...paleta, escuras: { ...paleta.escuras } };
|
|
115
|
+
const coresEscuras = escuras;
|
|
116
|
+
const tipografia = { ...TIPOGRAFIAS[tokens.tipografia ?? "padrao"] ?? TIPOGRAFIAS.padrao };
|
|
117
|
+
const escala = { ...DENSIDADES[tokens.densidade ?? "padrao"] ?? DENSIDADES.padrao };
|
|
118
|
+
const forma = { ...FORMAS[tokens.forma ?? "padrao"] ?? FORMAS.padrao };
|
|
119
|
+
const movimentoDuracao = MOVIMENTOS[tokens.movimento ?? "padrao"] ?? MOVIMENTOS.padrao;
|
|
120
|
+
const overrides = tokens.overrides ?? {};
|
|
121
|
+
for (const [chave, valor] of Object.entries(overrides)) {
|
|
122
|
+
const alvoCor = CHAVES_COR[chave];
|
|
123
|
+
const alvoCorEscura = CHAVES_COR_ESCURA[chave];
|
|
124
|
+
if (alvoCor) {
|
|
125
|
+
cores[alvoCor] = valor;
|
|
126
|
+
}
|
|
127
|
+
else if (alvoCorEscura) {
|
|
128
|
+
coresEscuras[alvoCorEscura] = valor;
|
|
129
|
+
}
|
|
130
|
+
else if (chave === "fonte") {
|
|
131
|
+
tipografia.fonte = valor;
|
|
132
|
+
}
|
|
133
|
+
else if (chave === "fonte_titulo") {
|
|
134
|
+
tipografia.fonteTitulo = valor;
|
|
135
|
+
}
|
|
136
|
+
else if (chave === "fonte_mono") {
|
|
137
|
+
tipografia.fonteMono = valor;
|
|
138
|
+
}
|
|
139
|
+
else if (chave === "raio_base") {
|
|
140
|
+
forma.raio = valor;
|
|
141
|
+
forma.raioLg = valor;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return { cores, coresEscuras, tipografia, escala, forma, movimentoDuracao };
|
|
145
|
+
}
|
|
146
|
+
export function listarNomesDesign() {
|
|
147
|
+
return {
|
|
148
|
+
paletas: Object.keys(PALETAS),
|
|
149
|
+
tipografias: Object.keys(TIPOGRAFIAS),
|
|
150
|
+
densidades: Object.keys(DENSIDADES),
|
|
151
|
+
formas: Object.keys(FORMAS),
|
|
152
|
+
movimentos: Object.keys(MOVIMENTOS),
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=design.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@semacode/cli",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.9.1",
|
|
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",
|