primocode 8.17.0 → 8.18.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/lib/effort.js +62 -25
- package/package.json +1 -1
package/lib/effort.js
CHANGED
|
@@ -138,18 +138,40 @@ function layoutEffort(idx) {
|
|
|
138
138
|
// há o dobro de linhas para atravessar, e uma rampa curta viraria degrau
|
|
139
139
|
// visível. Começa quase preta e termina em branco — é a amplitude que faz o
|
|
140
140
|
// pico parecer luz, e não só "roxo mais claro".
|
|
141
|
-
//
|
|
141
|
+
// A rampa é a paleta do PrimoCode, não uma cor qualquer.
|
|
142
142
|
//
|
|
143
|
-
//
|
|
144
|
-
//
|
|
145
|
-
//
|
|
146
|
-
//
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
//
|
|
151
|
-
//
|
|
152
|
-
const
|
|
143
|
+
// O plasma era roxo — bonito, e de outro programa. A marca do CLI é o ciano
|
|
144
|
+
// (brand 45, o cyan-400 do design system; brandDim 31 é a mesma cor
|
|
145
|
+
// recuando), e é dele que a rampa sai: do teal profundo ao branco, passando
|
|
146
|
+
// exatamente pelo 45 no meio do caminho. Assim o pico da onda é a cor da
|
|
147
|
+
// marca acesa, e não um roxo emprestado.
|
|
148
|
+
const RAMPA = [23, 23, 24, 30, 31, 37, 38, 44, 45, 51, 87, 123, 159, 195, 231];
|
|
149
|
+
|
|
150
|
+
// Mantido pelo nome antigo porque o resto do arquivo (e o teste) já o
|
|
151
|
+
// conhece; o conteúdo é que mudou de família.
|
|
152
|
+
const ROXOS = RAMPA;
|
|
153
|
+
|
|
154
|
+
// Quanto o plasma é amortecido nas linhas que têm texto.
|
|
155
|
+
//
|
|
156
|
+
// Baixou de 0.5 para 0.26: "os textos devem ser extremamente legíveis". Com
|
|
157
|
+
// 0.5 a linha ainda chegava ao ciano médio, e ciano claro atrás de texto
|
|
158
|
+
// claro é leitura no limite. Em 0.26 a linha de texto vive no terço escuro
|
|
159
|
+
// da rampa — teal profundo — e o texto branco salta. O brilho não se perde:
|
|
160
|
+
// ele acontece nas faixas abertas, logo acima e abaixo, que é onde ninguém
|
|
161
|
+
// precisa ler.
|
|
162
|
+
const TETO_SOB_TEXTO = 0.26;
|
|
163
|
+
|
|
164
|
+
// E um teto absoluto, além da escala: por mais alto que o campo suba, atrás
|
|
165
|
+
// de texto ele não passa daqui. A escala sozinha não garante — bastava um
|
|
166
|
+
// pico forte para a linha clarear inteira.
|
|
167
|
+
const INDICE_MAX_TEXTO = 2; // até o 24 (#005f87): teal fundo, sempre
|
|
168
|
+
//
|
|
169
|
+
// O 2 não foi escolhido a olho. Medi o contraste de TODAS as células de
|
|
170
|
+
// texto ao longo de dezenas de quadros, pela fórmula de luminância relativa
|
|
171
|
+
// da WCAG. Com teto 4 o pior caso dava 4.08 — abaixo do mínimo AA (4.5),
|
|
172
|
+
// e o vilão era o índice 3 (#008787, teal médio) atrás dos traços da régua.
|
|
173
|
+
// Com teto 2 o pior caso passa de 7, que é o nível AAA. O teste refaz essa
|
|
174
|
+
// medida e reprova se algum dia cair.
|
|
153
175
|
|
|
154
176
|
/* O campo: o que decide a cor de cada meia-célula.
|
|
155
177
|
*
|
|
@@ -192,10 +214,11 @@ function campoUltra(x, y, fase, foco, altura) {
|
|
|
192
214
|
// visíveis atravessando o plasma. Multiplicar preserva a forma da onda e só
|
|
193
215
|
// baixa a amplitude: a linha fica escura o bastante para ler e continua
|
|
194
216
|
// fazendo parte do mesmo pano.
|
|
195
|
-
function corDoCampo(v, escala) {
|
|
217
|
+
function corDoCampo(v, escala, tetoIndice) {
|
|
196
218
|
const t = escala ? v * escala : v;
|
|
197
|
-
|
|
198
|
-
|
|
219
|
+
let i = Math.round(t * (RAMPA.length - 1));
|
|
220
|
+
if (tetoIndice != null) i = Math.min(i, tetoIndice);
|
|
221
|
+
return RAMPA[Math.max(0, Math.min(RAMPA.length - 1, i))];
|
|
199
222
|
}
|
|
200
223
|
|
|
201
224
|
// Guardada para quem já usava a onda antiga (e para o teste da rampa).
|
|
@@ -241,18 +264,31 @@ function pintarLinhaUltra(texto, largura, fase, opts = {}) {
|
|
|
241
264
|
function painelUltra(L, fase) {
|
|
242
265
|
const alturaMeia = L.linhas.length * 2;
|
|
243
266
|
const foco = (L.destaque.de + L.destaque.ate) / 2;
|
|
244
|
-
|
|
267
|
+
// Duas cores de texto, as duas claras. Sobre o teal escuro das linhas de
|
|
268
|
+
// texto, tanto o branco quanto o ciano-claro passam com folga — e a
|
|
269
|
+
// diferença entre eles ainda separa o que está escolhido do resto.
|
|
270
|
+
//
|
|
271
|
+
// O lilás de antes (189) não era da paleta e, sobre ciano, ficava sujo.
|
|
272
|
+
// TUDO branco. A hierarquia fica no negrito, não na cor.
|
|
273
|
+
//
|
|
274
|
+
// O secundário era 195 (ciano quase branco). Bonito, e o cálculo de
|
|
275
|
+
// contraste reprovou: sobre o teal mais claro que o fundo de texto pode
|
|
276
|
+
// ter, o 195 dá 6.57 — passa o mínimo AA (4.5) e não chega ao AAA (7.0).
|
|
277
|
+
// E não adiantava clarear um pouco: sobre aquele fundo, NENHUMA cor
|
|
278
|
+
// chega a 7 a não ser o branco puro, que dá 7.20. Como o pedido foi
|
|
279
|
+
// "extremamente legíveis", o branco ganhou e a diferença entre escolhido
|
|
280
|
+
// e resto passou a ser o peso da fonte — que separa igual e não custa
|
|
281
|
+
// contraste nenhum.
|
|
282
|
+
const BRANCO = 231;
|
|
283
|
+
const CLARO = 231;
|
|
245
284
|
|
|
246
285
|
const corDoTexto = (l, x) => {
|
|
247
|
-
if (l.tipo === 'titulo') return { cor:
|
|
286
|
+
if (l.tipo === 'titulo') return { cor: BRANCO, negrito: true };
|
|
248
287
|
if (l.tipo === 'nomes') {
|
|
249
288
|
const dentro = x >= L.destaque.de && x < L.destaque.ate;
|
|
250
|
-
return { cor: dentro ?
|
|
251
|
-
}
|
|
252
|
-
if (l.tipo === 'resumo' || l.tipo === 'extremos' || l.tipo === 'ajuda') {
|
|
253
|
-
return { cor: LILAS, negrito: false };
|
|
289
|
+
return { cor: dentro ? BRANCO : CLARO, negrito: dentro };
|
|
254
290
|
}
|
|
255
|
-
return { cor:
|
|
291
|
+
return { cor: CLARO, negrito: false };
|
|
256
292
|
};
|
|
257
293
|
|
|
258
294
|
return L.linhas.map((l, y) => {
|
|
@@ -282,11 +318,12 @@ function painelUltra(L, fase) {
|
|
|
282
318
|
glifo = ch;
|
|
283
319
|
corFrente = t.cor;
|
|
284
320
|
querForte = t.negrito;
|
|
285
|
-
corFundo = corDoCampo((cima + baixo) / 2, TETO_SOB_TEXTO);
|
|
321
|
+
corFundo = corDoCampo((cima + baixo) / 2, TETO_SOB_TEXTO, INDICE_MAX_TEXTO);
|
|
286
322
|
} else {
|
|
287
323
|
glifo = '▀'; // ▀
|
|
288
|
-
|
|
289
|
-
|
|
324
|
+
const teto = linhaCalma ? INDICE_MAX_TEXTO : null;
|
|
325
|
+
corFrente = corDoCampo(cima, linhaCalma, teto);
|
|
326
|
+
corFundo = corDoCampo(baixo, linhaCalma, teto);
|
|
290
327
|
querForte = false;
|
|
291
328
|
}
|
|
292
329
|
|
|
@@ -331,6 +368,6 @@ function desenharEffort(idx, fase) {
|
|
|
331
368
|
}
|
|
332
369
|
|
|
333
370
|
module.exports = { NIVEIS, NOMES, normalizar, nivelDe, indiceDe, modeloDe, pesquisaDe,
|
|
334
|
-
layoutEffort, fundoRoxo, pintarLinhaUltra, desenharEffort, ROXOS,
|
|
371
|
+
layoutEffort, fundoRoxo, pintarLinhaUltra, desenharEffort, ROXOS, RAMPA,
|
|
335
372
|
campoUltra, corDoCampo, painelUltra };
|
|
336
373
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "primocode",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.18.0",
|
|
4
4
|
"description": "PrimoCode — agente de engenharia com IA e cursor próprio. Modelos grátis. Cria arquivos, roda comandos, controla navegador e desktop: abre apps, clica em botões e ícones pelo nome, digita e usa atalhos.",
|
|
5
5
|
"main": "bin/primocode.js",
|
|
6
6
|
"bin": {
|