primocode 7.18.0 → 8.0.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/bin/primocode.js +0 -0
- package/lib/catalogo.js +12 -0
- package/lib/studio.js +198 -0
- package/lib/tools.js +15 -0
- package/lib/ui.js +3 -1
- package/package.json +2 -1
- package/studio/PRIMOCODE.md +58 -0
- package/studio/README.md +154 -0
- package/studio/__pycache__/server.cpython-311.pyc +0 -0
- package/studio/ferramentas/00-protocolo.md +111 -0
- package/studio/ferramentas/01-modelos.md +202 -0
- package/studio/ferramentas/README.md +32 -0
- package/studio/ferramentas/corte.md +193 -0
- package/studio/ferramentas/grade.md +92 -0
- package/studio/ferramentas/prisma.md +99 -0
- package/studio/ferramentas/prosa.md +86 -0
- package/studio/ferramentas/tela.md +72 -0
- package/studio/ferramentas/traco.md +79 -0
- package/studio/server.py +792 -0
- package/studio/web/core.css +723 -0
- package/studio/web/home.html +149 -0
- package/studio/web/js/audio.js +262 -0
- package/studio/web/js/editor.js +1270 -0
- package/studio/web/js/exportar.js +135 -0
- package/studio/web/js/ferramentas.js +105 -0
- package/studio/web/js/icones.js +91 -0
- package/studio/web/js/midia.js +157 -0
- package/studio/web/js/narracao.js +254 -0
- package/studio/web/js/player.js +504 -0
- package/studio/web/js/render-grade.js +243 -0
- package/studio/web/js/render-prosa.js +104 -0
- package/studio/web/js/render.js +622 -0
- package/studio/web/render.css +565 -0
- package/studio/web/tool.html +70 -0
- package/studio/web/view.html +20 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# PROSA — documentos
|
|
2
|
+
|
|
3
|
+
No lugar de Word, Google Docs e Notion. Modelo `documento`, página A4.
|
|
4
|
+
|
|
5
|
+
## Estrutura de um documento que se lê até o fim
|
|
6
|
+
|
|
7
|
+
1. `capa` — chapéu, título, apoio, autor e data
|
|
8
|
+
2. `sumario` — só se passar de 4 seções
|
|
9
|
+
3. `secao` a cada bloco de raciocínio, com `paragrafo` de 3 a 5 linhas
|
|
10
|
+
4. `destaque` para o que não pode passar batido
|
|
11
|
+
5. `tabela` quando comparar, `lista` quando enumerar, `citacao` quando emprestar autoridade
|
|
12
|
+
6. fecho com o próximo passo concreto
|
|
13
|
+
|
|
14
|
+
## Exemplo
|
|
15
|
+
|
|
16
|
+
```json
|
|
17
|
+
{
|
|
18
|
+
"ferramenta": "prosa",
|
|
19
|
+
"titulo": "Proposta — modernização do parque de servidores",
|
|
20
|
+
"doc": {
|
|
21
|
+
"tema": "papel",
|
|
22
|
+
"capa": {
|
|
23
|
+
"chapeu": "Proposta técnica",
|
|
24
|
+
"titulo": "Modernização do parque de servidores",
|
|
25
|
+
"apoio": "Diagnóstico, plano em três ondas e estimativa de custo.",
|
|
26
|
+
"autor": "Time de Infraestrutura",
|
|
27
|
+
"data": "Agosto de 2026"
|
|
28
|
+
},
|
|
29
|
+
"blocos": [
|
|
30
|
+
{ "tipo": "sumario", "texto": "Sumário" },
|
|
31
|
+
|
|
32
|
+
{ "tipo": "secao", "texto": "Onde estamos" },
|
|
33
|
+
{ "tipo": "paragrafo", "texto": "O parque atual tem **34 máquinas**, das quais 11 passaram do fim de suporte do fabricante. O custo de manutenção subiu 40% em dois anos enquanto a capacidade útil ficou parada." },
|
|
34
|
+
{ "tipo": "destaque", "titulo": "Risco imediato",
|
|
35
|
+
"texto": "Três servidores de banco não recebem correção de segurança desde março." },
|
|
36
|
+
|
|
37
|
+
{ "tipo": "secao", "texto": "O que propomos" },
|
|
38
|
+
{ "tipo": "numerada", "itens": [
|
|
39
|
+
"Onda 1 — trocar os 11 equipamentos fora de suporte",
|
|
40
|
+
"Onda 2 — consolidar cargas em 6 máquinas novas",
|
|
41
|
+
"Onda 3 — mover o que for elástico para nuvem"
|
|
42
|
+
]},
|
|
43
|
+
{ "tipo": "tabela", "linhas": [
|
|
44
|
+
["Onda", "Prazo", "Investimento"],
|
|
45
|
+
["1", "60 dias", "R$ 420 mil"],
|
|
46
|
+
["2", "120 dias", "R$ 310 mil"],
|
|
47
|
+
["3", "180 dias", "custo variável"]
|
|
48
|
+
]},
|
|
49
|
+
|
|
50
|
+
{ "tipo": "secao", "texto": "Próximo passo" },
|
|
51
|
+
{ "tipo": "paragrafo", "texto": "Aprovar a Onda 1 até o fim do mês para caber na janela de manutenção de outubro." }
|
|
52
|
+
]
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Blocos
|
|
58
|
+
|
|
59
|
+
| tipo | campos | vira |
|
|
60
|
+
|---|---|---|
|
|
61
|
+
| `titulo` | `texto` | H1 |
|
|
62
|
+
| `chapeu` | `texto` | sobretítulo colorido |
|
|
63
|
+
| `apoio` | `texto` | linha de apoio, cinza |
|
|
64
|
+
| `secao` | `texto` | H2 |
|
|
65
|
+
| `subsecao` | `texto` | H3 |
|
|
66
|
+
| `paragrafo` | `texto` | parágrafo |
|
|
67
|
+
| `lista` / `numerada` | `itens[]` | lista |
|
|
68
|
+
| `citacao` | `texto`, `autor` | citação com barra |
|
|
69
|
+
| `codigo` | `texto` | bloco monoespaçado |
|
|
70
|
+
| `tabela` | `linhas[][]` | primeira linha é cabeçalho |
|
|
71
|
+
| `imagem` | `src`, `legenda` | figura |
|
|
72
|
+
| `destaque` | `titulo`, `texto` | caixa de atenção |
|
|
73
|
+
| `sumario` | `texto` | índice das seções, automático |
|
|
74
|
+
| `divisor` | — | linha |
|
|
75
|
+
| `quebra` | — | quebra de página no PDF |
|
|
76
|
+
|
|
77
|
+
No texto: `**negrito**`, `*itálico*`, `` `código` ``, `[link](url)`.
|
|
78
|
+
|
|
79
|
+
## Temas
|
|
80
|
+
|
|
81
|
+
`papel` para leitura longa (serifado, bege) · `claro` para corporativo ·
|
|
82
|
+
`meia-noite` para leitura em tela.
|
|
83
|
+
|
|
84
|
+
## Export
|
|
85
|
+
|
|
86
|
+
`GET /api/arquivos/<id>/export` devolve **Markdown**. Para PDF, abra `/v/<id>` e `P`.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# TELA — design gráfico
|
|
2
|
+
|
|
3
|
+
No lugar de Photoshop, Figma e Canva. Modelo `cena` com `layout: "livre"`:
|
|
4
|
+
você controla cada `x`, `y`, `l`, `a` em pixels da tela.
|
|
5
|
+
|
|
6
|
+
## Tamanhos
|
|
7
|
+
|
|
8
|
+
| Peça | largura × altura |
|
|
9
|
+
|---|---|
|
|
10
|
+
| Post quadrado | 1080 × 1080 |
|
|
11
|
+
| Story / Reels capa | 1080 × 1920 |
|
|
12
|
+
| Capa e thumbnail | 1920 × 1080 |
|
|
13
|
+
| Banner de topo | 1600 × 600 |
|
|
14
|
+
| Apresentação de perfil | 1200 × 630 |
|
|
15
|
+
|
|
16
|
+
## Como compor sem ficar feio
|
|
17
|
+
|
|
18
|
+
- **Margem viva:** nada encosta na borda. Reserve ~8% de cada lado (86 px em 1080).
|
|
19
|
+
- **Conte as linhas antes de definir `a`.** Em texto, `a` é altura mínima — o bloco
|
|
20
|
+
cresce se precisar, então deixe folga abaixo dele. Uma linha ocupa ~1,15 × `tamanho`.
|
|
21
|
+
- **Um foco só.** Um elemento manda; o resto apoia.
|
|
22
|
+
- **Escala com folga:** título 110–160 px em 1080, apoio 34–44 px. Meio-termo some.
|
|
23
|
+
- **Camadas de fundo primeiro:** forma grande → foto → texto por cima. `z` resolve empates.
|
|
24
|
+
- **Cor:** duas do tema, uma de destaque. `preenchimento` com `opacidade: 0.15` cria
|
|
25
|
+
fundo sem brigar com o texto.
|
|
26
|
+
|
|
27
|
+
## Exemplo — post 1080×1080
|
|
28
|
+
|
|
29
|
+
```json
|
|
30
|
+
{
|
|
31
|
+
"ferramenta": "tela",
|
|
32
|
+
"titulo": "Post — lançamento",
|
|
33
|
+
"doc": {
|
|
34
|
+
"tema": "brasa",
|
|
35
|
+
"largura": 1080, "altura": 1080,
|
|
36
|
+
"cenas": [{
|
|
37
|
+
"layout": "livre",
|
|
38
|
+
"fundo": { "tipo": "gradiente", "de": "#1b0a04", "para": "#0a0506", "angulo": 155 },
|
|
39
|
+
"elementos": [
|
|
40
|
+
{ "tipo": "forma", "forma": "circulo", "x": 640, "y": -140, "l": 620, "a": 620,
|
|
41
|
+
"preenchimento": "#ff5a36", "opacidade": 0.16 },
|
|
42
|
+
{ "tipo": "icone", "nome": "foguete", "x": 86, "y": 140, "tamanho": 88, "cor": "#ffb03a" },
|
|
43
|
+
{ "tipo": "texto", "x": 86, "y": 292, "l": 900, "a": 44,
|
|
44
|
+
"texto": "LANÇAMENTO", "tamanho": 30, "peso": 700, "espacamento": 0.2, "cor": "#ffb03a" },
|
|
45
|
+
{ "tipo": "texto", "x": 86, "y": 372, "l": 908, "a": 460,
|
|
46
|
+
"texto": "A primeira versão\nestá no ar", "tamanho": 118, "peso": 750 },
|
|
47
|
+
{ "tipo": "forma", "forma": "linha", "x": 86, "y": 880, "l": 180, "a": 8,
|
|
48
|
+
"preenchimento": "#ff5a36", "espessura": 8 },
|
|
49
|
+
{ "tipo": "texto", "x": 86, "y": 926, "l": 800, "a": 60,
|
|
50
|
+
"texto": "primocode.studio", "tamanho": 36, "cor": "#bf9c8a" }
|
|
51
|
+
]
|
|
52
|
+
}]
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Ícones disponíveis
|
|
58
|
+
|
|
59
|
+
`raio` `alvo` `foguete` `escudo` `relogio` `usuario` `pessoas` `coracao` `estrela`
|
|
60
|
+
`nuvem` `engrenagem` `lampada` `cadeado` `casa` `email` `telefone` `camera` `fogo`
|
|
61
|
+
`globo` `chave` `presente` `sino` `mapa` `dinheiro` `crescimento` `grafico` `balao`
|
|
62
|
+
`pasta` `livro` `play2` `check` `imagem` `codigo` `tabela` `lista`
|
|
63
|
+
|
|
64
|
+
## Várias artes no mesmo arquivo
|
|
65
|
+
|
|
66
|
+
Cada item de `cenas` é uma prancha independente. Um carrossel de Instagram é um
|
|
67
|
+
arquivo com 5 cenas de 1080×1080 — o modo Abrir passa uma a uma com `→`.
|
|
68
|
+
|
|
69
|
+
## Export
|
|
70
|
+
|
|
71
|
+
`GET /api/arquivos/<id>/export` devolve um `.html` autônomo. Para PNG, abra em
|
|
72
|
+
`/v/<id>` e use a captura de tela do sistema, ou `P` para gerar PDF em escala real.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# TRAÇO — diagramas
|
|
2
|
+
|
|
3
|
+
No lugar de Miro, Whimsical e Lucidchart. Modelo `cena` com `layout: "livre"`:
|
|
4
|
+
nós posicionados e conectores que se ligam sozinhos pela borda mais curta.
|
|
5
|
+
|
|
6
|
+
## Regra que faz o diagrama ficar legível
|
|
7
|
+
|
|
8
|
+
- **Grade invisível de 60 px.** Use `x` e `y` múltiplos de 60. Alinhamento é o que
|
|
9
|
+
separa diagrama de rabisco.
|
|
10
|
+
- **Fluxo lê da esquerda para a direita** (processo) ou **de cima para baixo**
|
|
11
|
+
(hierarquia). Não misture os dois no mesmo diagrama.
|
|
12
|
+
- **Nó padrão:** `l: 340, a: 150`. Mantenha o mesmo tamanho para nós do mesmo nível.
|
|
13
|
+
- **Espaço entre colunas:** 200 px. Entre linhas: 90 px.
|
|
14
|
+
- **`destaque: true`** em no máximo dois nós — o começo e o resultado.
|
|
15
|
+
|
|
16
|
+
## Exemplo — fluxo de aprovação
|
|
17
|
+
|
|
18
|
+
```json
|
|
19
|
+
{
|
|
20
|
+
"ferramenta": "traco",
|
|
21
|
+
"titulo": "Fluxo de aprovação de compras",
|
|
22
|
+
"doc": {
|
|
23
|
+
"tema": "meia-noite",
|
|
24
|
+
"largura": 1920, "altura": 1080,
|
|
25
|
+
"cenas": [{
|
|
26
|
+
"layout": "livre",
|
|
27
|
+
"fundo": "pontos",
|
|
28
|
+
"elementos": [
|
|
29
|
+
{ "id": "ped", "tipo": "no", "texto": "Pedido aberto", "x": 120, "y": 480, "l": 320, "a": 140, "destaque": true },
|
|
30
|
+
{ "id": "val", "tipo": "no", "texto": "Validação\nfiscal", "x": 620, "y": 480, "l": 320, "a": 140 },
|
|
31
|
+
{ "id": "ger", "tipo": "no", "texto": "Aprovação\ngerência", "x": 1120, "y": 300, "l": 320, "a": 140 },
|
|
32
|
+
{ "id": "dir", "tipo": "no", "texto": "Aprovação\ndiretoria", "x": 1120, "y": 660, "l": 320, "a": 140 },
|
|
33
|
+
{ "id": "ok", "tipo": "no", "texto": "Compra\nemitida", "x": 1560, "y": 480, "l": 280, "a": 140, "destaque": true },
|
|
34
|
+
|
|
35
|
+
{ "tipo": "conector", "de": "ped", "para": "val" },
|
|
36
|
+
{ "tipo": "conector", "de": "val", "para": "ger", "texto": "até R$ 20 mil" },
|
|
37
|
+
{ "tipo": "conector", "de": "val", "para": "dir", "texto": "acima de R$ 20 mil" },
|
|
38
|
+
{ "tipo": "conector", "de": "ger", "para": "ok" },
|
|
39
|
+
{ "tipo": "conector", "de": "dir", "para": "ok" },
|
|
40
|
+
|
|
41
|
+
{ "tipo": "texto", "x": 120, "y": 120, "l": 900, "a": 120,
|
|
42
|
+
"texto": "Compras · fluxo vigente", "papel": "chapeu" }
|
|
43
|
+
]
|
|
44
|
+
}]
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Nós e conectores
|
|
50
|
+
|
|
51
|
+
```jsonc
|
|
52
|
+
{ "id": "a", "tipo": "no", "texto": "Etapa",
|
|
53
|
+
"x": 300, "y": 460, "l": 340, "a": 150,
|
|
54
|
+
"destaque": false, // pinta com a cor do tema
|
|
55
|
+
"formato": "circulo", // opcional
|
|
56
|
+
"cor": "#1f8fe0" } // opcional, sobrepõe o tema
|
|
57
|
+
|
|
58
|
+
{ "tipo": "conector", "de": "a", "para": "b",
|
|
59
|
+
"estilo": "curva", // curva | reta | cotovelo
|
|
60
|
+
"texto": "rótulo da seta",
|
|
61
|
+
"tracejado": false,
|
|
62
|
+
"seta": true }
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
O conector calcula sozinho de qual lado sai e entra. Se `de` ou `para` apontar para
|
|
66
|
+
um `id` que não existe, ele simplesmente não é desenhado — sem quebrar o resto.
|
|
67
|
+
|
|
68
|
+
## Também serve para
|
|
69
|
+
|
|
70
|
+
- **Mapa mental:** nó central `destaque` e ramos em volta, `estilo: "curva"`.
|
|
71
|
+
- **Arquitetura:** uma `forma` grande atrás como área ("Nuvem", "On-premise") e os
|
|
72
|
+
nós por cima; use `opacidade: 0.06` na área.
|
|
73
|
+
- **Organograma:** fluxo de cima para baixo, `estilo: "cotovelo"`.
|
|
74
|
+
- **Jornada:** uma linha só, `estilo: "reta"`, com `icone` acima de cada etapa.
|
|
75
|
+
|
|
76
|
+
## Vários diagramas
|
|
77
|
+
|
|
78
|
+
Cada item de `cenas` é uma prancha. Um arquivo pode ter o "como é hoje" e o
|
|
79
|
+
"como fica depois" — o modo Abrir alterna com `→`.
|