chocolatito-code 1.6.3 → 1.6.4
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/ui/banner.js +1 -1
- package/dist/ui/ink/App.js +22 -2
- package/dist/ui/ink/Prompt.d.ts +2 -2
- package/dist/ui/ink/Prompt.js +14 -6
- package/dist/ui/marco.js +7 -6
- package/extension/manifest.json +1 -1
- package/package.json +1 -1
package/dist/ui/banner.js
CHANGED
|
@@ -138,7 +138,7 @@ export const FILAS_MINIMAS_PARA_ANCLAR = 16;
|
|
|
138
138
|
* arriba la cabeza del zorro. El usuario lo vio en cuanto abrio: "hay mucho
|
|
139
139
|
* espacio y se baja y se corta el zorrito al iniciar".
|
|
140
140
|
*/
|
|
141
|
-
const FILAS_DESPUES_DEL_BANNER =
|
|
141
|
+
const FILAS_DESPUES_DEL_BANNER = 9;
|
|
142
142
|
/**
|
|
143
143
|
* Filas en blanco que hay que soltar ANTES de `contenido` para que el prompt
|
|
144
144
|
* acabe pegado al fondo de la ventana. Cero si no cabe o no hace falta.
|
package/dist/ui/ink/App.js
CHANGED
|
@@ -30,7 +30,17 @@ import { alCambiarElTurno, estadoDelTurno } from "./control.js";
|
|
|
30
30
|
*/
|
|
31
31
|
export function App() {
|
|
32
32
|
const { stdout } = useStdout();
|
|
33
|
-
|
|
33
|
+
// UNA FILA MENOS QUE LA VENTANA, Y ES LA CLAVE
|
|
34
|
+
//
|
|
35
|
+
// Ink escribe su arbol y detras un salto de linea. Si el arbol mide justo lo
|
|
36
|
+
// que la ventana, ese salto la desborda: el terminal desplaza una fila, y como
|
|
37
|
+
// Ink repinta subiendo el numero de filas que escribio, a partir de ahi borra
|
|
38
|
+
// una fila que ya no es la suya. En la pantalla alternativa, que no tiene
|
|
39
|
+
// historial al que recurrir, eso degenera en pantalla en negro.
|
|
40
|
+
//
|
|
41
|
+
// Es lo que se publico roto en la 1.6.0: "esta fallando, no sale nada". Las
|
|
42
|
+
// pruebas no lo cazan porque el terminal de mentira de la libreria no desplaza.
|
|
43
|
+
const filas = Math.max(6, (stdout?.rows || 24) - 1);
|
|
34
44
|
const [, setRedibujar] = useState(0);
|
|
35
45
|
const [subido, setSubido] = useState(0);
|
|
36
46
|
const [turno, setTurno] = useState(estadoDelTurno());
|
|
@@ -55,5 +65,15 @@ export function App() {
|
|
|
55
65
|
const altoDelTexto = Math.max(1, filas - altoBarra - altoAviso - (turno.esperando ? 5 : 0));
|
|
56
66
|
const visible = ventana(altoDelTexto, subido);
|
|
57
67
|
const huecos = Math.max(0, altoDelTexto - visible.length);
|
|
58
|
-
return (_jsxs(Box, { flexDirection: "column", height: filas, children: [Array.from({ length: huecos }, (_, i) => (_jsx(Text, { children: " " }, `hueco-${i}`))), visible.map((linea, i) => (_jsx(Text, { children: linea }, `h-${i}`))), subido > 0 && (_jsx(Text, { dimColor: true, children: ` ↑ ${subido} lineas mas arriba · Av Pag para volver al final` })), turno.esperando ? (_jsx(Prompt, { alEnviar: turno.responder, alCancelar: () => turno.responder("/exit"), cwd: turno.cwd, promptSymbol: turno.promptSymbol, avisos: [], sinHistorial: true, alDesplazar: (
|
|
68
|
+
return (_jsxs(Box, { flexDirection: "column", height: filas, children: [Array.from({ length: huecos }, (_, i) => (_jsx(Text, { children: " " }, `hueco-${i}`))), visible.map((linea, i) => (_jsx(Text, { children: linea }, `h-${i}`))), subido > 0 && (_jsx(Text, { dimColor: true, children: ` ↑ ${subido} lineas mas arriba · Av Pag para volver al final` })), turno.esperando ? (_jsx(Prompt, { alEnviar: turno.responder, alCancelar: () => turno.responder("/exit"), cwd: turno.cwd, promptSymbol: turno.promptSymbol, avisos: [], sinHistorial: true, alDesplazar: (direccion) => setSubido((n) => {
|
|
69
|
+
// El salto sale del alto SIN el aviso de "estas mirando atras".
|
|
70
|
+
// Si se contara, subir y bajar usarian bases distintas -el aviso
|
|
71
|
+
// solo existe cuando ya has subido- y bajar no deshacia lo que
|
|
72
|
+
// acababas de subir: el scroll derivaba solo.
|
|
73
|
+
const base = Math.max(1, filas - altoBarra - 5);
|
|
74
|
+
const salto = Math.max(1, Math.floor(base / 2));
|
|
75
|
+
return direccion > 0
|
|
76
|
+
? Math.min(tope(base), n + salto)
|
|
77
|
+
: Math.max(0, n - salto);
|
|
78
|
+
}) })) : (barraDeTrabajo.map((linea, i) => _jsx(Text, { children: linea }, `t-${i}`)))] }));
|
|
59
79
|
}
|
package/dist/ui/ink/Prompt.d.ts
CHANGED
|
@@ -44,7 +44,7 @@ export interface PromptProps {
|
|
|
44
44
|
* Sin esto se pintaria dos veces: una desde App y otra desde aqui.
|
|
45
45
|
*/
|
|
46
46
|
sinHistorial?: boolean;
|
|
47
|
-
/** Re Pag / Av Pag
|
|
48
|
-
alDesplazar?: (
|
|
47
|
+
/** Re Pag / Av Pag: +1 sube, -1 baja. El salto lo decide quien recibe. */
|
|
48
|
+
alDesplazar?: (direccion: number) => void;
|
|
49
49
|
}
|
|
50
50
|
export declare function Prompt({ alEnviar, alCancelar, cwd, promptSymbol, avisos, sinHistorial, alDesplazar, }: PromptProps): React.ReactElement;
|
package/dist/ui/ink/Prompt.js
CHANGED
|
@@ -63,7 +63,12 @@ export function Prompt({ alEnviar, alCancelar, cwd, promptSymbol, avisos, sinHis
|
|
|
63
63
|
// atras. Sin descontarla, el arbol mide una fila mas que la ventana y el
|
|
64
64
|
// terminal desplaza: la barra dejaria de estar clavada justo al usar el scroll,
|
|
65
65
|
// que es para lo que existe este modo.
|
|
66
|
-
|
|
66
|
+
// El alto SIN el aviso de "estas mirando atras". El salto se calcula sobre
|
|
67
|
+
// esto y no sobre el alto real: el aviso solo existe cuando ya has subido, asi
|
|
68
|
+
// que contarlo hacia que bajar no deshiciera lo que acababas de subir y el
|
|
69
|
+
// scroll derivara solo.
|
|
70
|
+
const baseDelSalto = Math.max(1, rows - marco.lines.length);
|
|
71
|
+
const altoDelTexto = Math.max(1, baseDelSalto - (subido > 0 ? 1 : 0));
|
|
67
72
|
function enviar() {
|
|
68
73
|
const orden = texto.trim();
|
|
69
74
|
if (!orden)
|
|
@@ -77,15 +82,18 @@ export function Prompt({ alEnviar, alCancelar, cwd, promptSymbol, avisos, sinHis
|
|
|
77
82
|
// Solo Re Pag y Av Pag. Las flechas y los caracteres son para escribir:
|
|
78
83
|
// robarselos aqui dejaria al usuario sin poder teclear.
|
|
79
84
|
if (tecla.pageUp || tecla.pageDown) {
|
|
80
|
-
const salto = Math.max(1, Math.floor(
|
|
81
|
-
// Con el arbol de App al mando
|
|
82
|
-
// cuanto sitio hay arriba,
|
|
85
|
+
const salto = Math.max(1, Math.floor(baseDelSalto / 2));
|
|
86
|
+
// Con el arbol de App al mando se le manda la DIRECCION, no el salto:
|
|
87
|
+
// aqui no se sabe cuanto sitio hay arriba, y calcular el salto en los dos
|
|
88
|
+
// sitios con alturas distintas hacia que bajar no deshiciera lo que
|
|
89
|
+
// acababa de subir. Con la direccion, el salto sale de un solo sitio y las
|
|
90
|
+
// dos teclas son simetricas.
|
|
83
91
|
if (alDesplazar) {
|
|
84
|
-
alDesplazar(tecla.pageUp ?
|
|
92
|
+
alDesplazar(tecla.pageUp ? 1 : -1);
|
|
85
93
|
return;
|
|
86
94
|
}
|
|
87
95
|
if (fija) {
|
|
88
|
-
setSubido((n) => tecla.pageUp ? Math.min(tope(
|
|
96
|
+
setSubido((n) => tecla.pageUp ? Math.min(tope(baseDelSalto), n + salto) : Math.max(0, n - salto));
|
|
89
97
|
return;
|
|
90
98
|
}
|
|
91
99
|
}
|
package/dist/ui/marco.js
CHANGED
|
@@ -94,7 +94,7 @@ export function buildPromptFrame(opts) {
|
|
|
94
94
|
// El 1 de delante es la fila de aire; despues barra, entrada, barra y pie.
|
|
95
95
|
// Sin contarla, el desplegable pide una fila mas de las que caben y el marco
|
|
96
96
|
// se sale por arriba de la ventana.
|
|
97
|
-
const room = Math.max(1, viewportRows - 1 - (
|
|
97
|
+
const room = Math.max(1, viewportRows - 1 - (2 + 1 + inputRows + 1 + 1));
|
|
98
98
|
const shown = Math.min(items.length, room);
|
|
99
99
|
const dropdownOffset = shown > 0 && items.length > shown
|
|
100
100
|
? Math.min(Math.max(0, selectedIndex - Math.floor(shown / 2)), items.length - shown)
|
|
@@ -187,16 +187,17 @@ export function buildPromptFrame(opts) {
|
|
|
187
187
|
else {
|
|
188
188
|
footerLine = chalk.hex(modeLook.color)(truncatePlain(modePlain, util));
|
|
189
189
|
}
|
|
190
|
-
//
|
|
190
|
+
// DOS FILAS DE AIRE ENCIMA DE LA CAJA
|
|
191
191
|
//
|
|
192
192
|
// Al anclar el prompt al fondo, el marco quedo pegado a lo de arriba: la
|
|
193
193
|
// ultima linea de la respuesta y la barra superior de la caja, seguidas. Se
|
|
194
194
|
// lee apelotonado y cuesta ver donde acaba una cosa y empieza la otra. El
|
|
195
195
|
// usuario lo pidio asi: "ponle un poquito de espacio pero no tanto".
|
|
196
196
|
//
|
|
197
|
-
//
|
|
198
|
-
//
|
|
199
|
-
|
|
197
|
+
// Dos, no una. Con una, la caja seguia leyendose pegada a lo de arriba: "pusiste
|
|
198
|
+
// una linea de espacio, que sea bien pues". Con dos se separa de verdad, y es
|
|
199
|
+
// el mismo aire que hay al arrancar entre el zorro y el aviso.
|
|
200
|
+
const lines = ["", "", bar, inputLine, ...dropdownLines, bar, footerLine];
|
|
200
201
|
// 4. Donde queda el cursor, en filas fisicas. Antes se hacia cursorCol =
|
|
201
202
|
// total % cols: aplicaba el modulo pero nunca sumaba la fila, asi que en
|
|
202
203
|
// cuanto la entrada se partia el acento se iba a escribir a otra linea.
|
|
@@ -204,7 +205,7 @@ export function buildPromptFrame(opts) {
|
|
|
204
205
|
const segments = typed.split("\n");
|
|
205
206
|
// La fila de aire de arriba cuenta: sin sumarla, el cursor se dibuja una fila
|
|
206
207
|
// por encima de donde se escribe.
|
|
207
|
-
let cursorRow =
|
|
208
|
+
let cursorRow = 2 + physicalRows(bar, cols);
|
|
208
209
|
for (let i = 0; i < segments.length - 1; i++) {
|
|
209
210
|
cursorRow += Math.max(1, Math.ceil(((i === 0 ? symbolWidth : 0) + segments[i].length) / cols));
|
|
210
211
|
}
|
package/extension/manifest.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"manifest_version": 3,
|
|
3
3
|
"minimum_chrome_version": "102",
|
|
4
4
|
"name": "Chocolatito Code",
|
|
5
|
-
"version": "1.6.
|
|
5
|
+
"version": "1.6.4",
|
|
6
6
|
"description": "Deja que Chocolatito Code trabaje dentro de tu Chrome, en segundo plano y con tus sesiones ya iniciadas.",
|
|
7
7
|
"permissions": [
|
|
8
8
|
"tabs",
|
package/package.json
CHANGED