@supcoflow/chat 2.1.0 → 2.2.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/README.md CHANGED
@@ -34,9 +34,10 @@ const chat = montarChat(document.body, { tenantId: "tnt_xxx", projectId: "proj_x
34
34
  <script src="https://chat.supcoflow.dev/widget.js" data-tenant="tnt_xxx" data-project="proj_xxx" defer></script>
35
35
  ```
36
36
 
37
- Opciones por atributo: `data-backend`, `data-posicion` (`derecha`|`izquierda`), `data-titulo`,
38
- `data-acento` (color), `data-version-app`, `data-contexto-automatico="false"`, `data-usuario-id`,
39
- `data-usuario-rol`. También queda `window.SupcoflowChat.montar(opciones)` / `.desmontar()`.
37
+ Opciones por atributo: `data-backend`, `data-posicion` (`derecha`|`izquierda`), `data-abierto="true"`,
38
+ `data-titulo`, `data-saludo`, `data-acento` (color), `data-version-app`,
39
+ `data-contexto-automatico="false"`, `data-usuario-id`, `data-usuario-rol`, `data-usuario-nombre`.
40
+ También queda `window.SupcoflowChat.montar(opciones)` / `.desmontar()`.
40
41
 
41
42
  Los identificadores **son públicos** (modelo DSN). La contención es la lista de Origins admitidos
42
43
  del proyecto más el tope de mensajes, los dos del lado de Supcoflow.
@@ -48,13 +49,15 @@ del proyecto más el tope de mensajes, los dos del lado de Supcoflow.
48
49
  | `backendUrl` | `https://chat.supcoflow.dev` | el backend del chat |
49
50
  | `modo` | `"burbuja"` | `"burbuja"` (botón flotante + panel) o `"inline"` (el panel donde lo montes) |
50
51
  | `posicion` | `"derecha"` | lado de la burbuja |
52
+ | `abierto` | `false` | el panel arranca abierto |
51
53
  | `titulo` | `"Ayuda"` | cabecera del panel |
54
+ | `saludo` | — | la segunda línea de la pantalla de inicio; gana sobre la consola |
52
55
  | `tema` | neutro | `{ acento, fondo, texto, textoSuave, radio, fuente }`, cualquier subconjunto |
53
56
  | `contexto` | `{}` | `{ versionApp }` — viaja con el primer mensaje |
54
57
  | `contextoAutomatico` | `true` | manda la URL (sin query) y el navegador. Errores de consola: nunca |
55
58
  | `onDiagnostico` | — | `({ visible, status, motivo }) => void`, ver abajo |
56
- | `usuario` | — | `{ id, rol, atributos }` — quién es el usuario según tu app, para el diagnóstico. Ver abajo |
57
- | `previewToken` | — | **interna**: la usa la consola de Supcoflow para el preview; en tu sitio no hace nada útil |
59
+ | `usuario` | — | `{ id, rol, atributos, nombre }` — quién es el usuario según tu app, para el diagnóstico; `nombre` sólo para el saludo, nunca viaja. Ver abajo |
60
+ | `previewToken` / `onEvento` | — | **interna**: las usa la consola de Supcoflow para el preview; en tu sitio no hacen nada útil |
58
61
 
59
62
  ## Quién es el usuario
60
63
 
@@ -68,8 +71,15 @@ dato de diagnóstico más barato que hay (la mitad de los «no me aparece el bot
68
71
  **declarado, no verificado**: no da permisos a nada, es contexto. Lo que se pasa de largo se
69
72
  recorta; lo que no sea `id`, `rol` o `atributos` se descarta.
70
73
 
71
- No hay `nombre` en esta versión: llega con la pantalla de inicio, que es lo único que lo va a usar,
72
- y **nunca va a viajar** al asistente ni al reporte.
74
+ `nombre` (hasta 80) aparece en «Hola {nombre} 👋» de la pantalla de inicio y **nunca** viaja al
75
+ asistente ni al reporte.
76
+
77
+ ## La pantalla de inicio
78
+
79
+ - Antes del primer mensaje, el panel arranca con «Hola {nombre} 👋» (o «Hola 👋» sin `usuario.nombre`).
80
+ - Debajo, dos arranques: «Reportar un error» y «Tengo una duda de uso».
81
+ - El saludo lo manda `saludo` (o la consola, si no hay código) y cada arranque entra como si el
82
+ usuario lo hubiera escrito: el primer mensaje de la conversación.
73
83
 
74
84
  ## La marca desde la consola
75
85
 
@@ -9,8 +9,9 @@ export interface MarcaDelMotor {
9
9
  }
10
10
  export interface Apariencia {
11
11
  titulo: string;
12
+ saludo: string;
12
13
  logoUrl: string | null;
13
14
  tema: TemaDelChat;
14
15
  }
15
- export declare function resolverApariencia(o: Pick<OpcionesDelChat, "titulo" | "tema">, marca: unknown): Apariencia;
16
+ export declare function resolverApariencia(o: Pick<OpcionesDelChat, "titulo" | "saludo" | "tema">, marca: unknown): Apariencia;
16
17
  //# sourceMappingURL=apariencia.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"apariencia.d.ts","sourceRoot":"","sources":["../src/apariencia.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAWtF;mGACmG;AACnG,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,WAAW,CAAC;CACnB;AAoBD,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,GAAG,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,UAAU,CAQ1G"}
1
+ {"version":3,"file":"apariencia.d.ts","sourceRoot":"","sources":["../src/apariencia.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAYtF;mGACmG;AACnG,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,WAAW,CAAC;CACnB;AAoBD,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,UAAU,CAUrH"}
@@ -1 +1 @@
1
- {"version":3,"file":"Adjuntos.d.ts","sourceRoot":"","sources":["../../src/componentes/Adjuntos.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAqBrD,wBAAgB,QAAQ,CAAC,KAAK,EAAE;IAC9B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,8FAA8F;IAC9F,kBAAkB,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;IACxC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC,uCAsBA"}
1
+ {"version":3,"file":"Adjuntos.d.ts","sourceRoot":"","sources":["../../src/componentes/Adjuntos.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AA6BrD,wBAAgB,QAAQ,CAAC,KAAK,EAAE;IAC9B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,8FAA8F;IAC9F,kBAAkB,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;IACxC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACvC,uCAqCA"}
@@ -1,3 +1,4 @@
1
+ import type { ComponentChildren } from "preact";
1
2
  export interface Herramientas {
2
3
  onSenalar: () => void;
3
4
  onCapturarPantalla: () => void;
@@ -15,5 +16,7 @@ export declare function Compositor(props: {
15
16
  enfocarAlMontar: boolean;
16
17
  /** `null` en preview (§2 del diseño de la marca): ni botones ni input de archivo — la subida está apagada, no deshabilitada. */
17
18
  herramientas: Herramientas | null;
19
+ /** La tira de adjuntos (§2.2.0): va ADENTRO de la caja, arriba del textarea. `null` en preview. */
20
+ adjuntos: ComponentChildren;
18
21
  }): import("preact").JSX.Element;
19
22
  //# sourceMappingURL=Compositor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Compositor.d.ts","sourceRoot":"","sources":["../../src/componentes/Compositor.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,gBAAgB,EAAE,CAAC,OAAO,EAAE,IAAI,KAAK,IAAI,CAAC;IAC1C,+GAA+G;IAC/G,aAAa,EAAE,OAAO,CAAC;IACvB,4FAA4F;IAC5F,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,gIAAgI;IAChI,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;CACnC,gCAoEA"}
1
+ {"version":3,"file":"Compositor.d.ts","sourceRoot":"","sources":["../../src/componentes/Compositor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAIhD,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,gBAAgB,EAAE,CAAC,OAAO,EAAE,IAAI,KAAK,IAAI,CAAC;IAC1C,+GAA+G;IAC/G,aAAa,EAAE,OAAO,CAAC;IACvB,4FAA4F;IAC5F,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,gIAAgI;IAChI,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,mGAAmG;IACnG,QAAQ,EAAE,iBAAiB,CAAC;CAC7B,gCA6DA"}
@@ -0,0 +1,14 @@
1
+ export declare function Inicio(props: {
2
+ titulo: string;
3
+ logoUrl: string | null;
4
+ nombre: string | undefined;
5
+ saludo: string;
6
+ onArranque: (mensaje: string) => void;
7
+ }): import("preact").JSX.Element;
8
+ /** El logo de la marca o las iniciales del título. Decorativo: `alt` vacío, el título ya nombra. */
9
+ export declare function Avatar(props: {
10
+ titulo: string;
11
+ logoUrl: string | null;
12
+ grande?: boolean;
13
+ }): import("preact").JSX.Element;
14
+ //# sourceMappingURL=Inicio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Inicio.d.ts","sourceRoot":"","sources":["../../src/componentes/Inicio.tsx"],"names":[],"mappings":"AAMA,wBAAgB,MAAM,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,gCA0B1J;AAED,oGAAoG;AACpG,wBAAgB,MAAM,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,gCAMzF"}
@@ -2,6 +2,8 @@ import type { Respuesta } from "../cliente";
2
2
  import { type EstadoDelChat } from "../estado";
3
3
  export declare function Mensajes(props: {
4
4
  estado: EstadoDelChat;
5
+ titulo: string;
6
+ logoUrl: string | null;
5
7
  onReintentar: () => void;
6
8
  onResponder: (r: Respuesta) => void;
7
9
  }): import("preact").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"Mensajes.d.ts","sourceRoot":"","sources":["../../src/componentes/Mensajes.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAoB,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAKjE,wBAAgB,QAAQ,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,YAAY,EAAE,MAAM,IAAI,CAAC;IAAC,WAAW,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAA;CAAE,gCA+BvH"}
1
+ {"version":3,"file":"Mensajes.d.ts","sourceRoot":"","sources":["../../src/componentes/Mensajes.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAqC,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAMlF,wBAAgB,QAAQ,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,YAAY,EAAE,MAAM,IAAI,CAAC;IAAC,WAAW,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAA;CAAE,gCA6C/J"}
@@ -5,6 +5,7 @@ export declare function Panel(props: {
5
5
  enPreview: boolean;
6
6
  modo: "burbuja" | "inline";
7
7
  posicion: "derecha" | "izquierda";
8
+ sinTitulo: boolean;
8
9
  onMinimizar: () => void;
9
10
  children: ComponentChildren;
10
11
  }): import("preact").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../src/componentes/Panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAGhD,wBAAgB,KAAK,CAAC,KAAK,EAAE;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC3B,QAAQ,EAAE,SAAS,GAAG,WAAW,CAAC;IAClC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,EAAE,iBAAiB,CAAC;CAC7B,gCAyBA"}
1
+ {"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../src/componentes/Panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAQhD,wBAAgB,KAAK,CAAC,KAAK,EAAE;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC3B,QAAQ,EAAE,SAAS,GAAG,WAAW,CAAC;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,EAAE,iBAAiB,CAAC;CAC7B,gCAuBA"}
@@ -1 +1 @@
1
- {"version":3,"file":"PreguntaHitl.d.ts","sourceRoot":"","sources":["../../src/componentes/PreguntaHitl.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAKnD,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAA;CAAE,gCAqCzH"}
1
+ {"version":3,"file":"PreguntaHitl.d.ts","sourceRoot":"","sources":["../../src/componentes/PreguntaHitl.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAKnD,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,IAAI,CAAA;CAAE,gCAoCzH"}
@@ -7,6 +7,9 @@ export default function Widget(props: {
7
7
  opciones: OpcionesResueltas;
8
8
  /** De la marca del motor (§3.3); `null` = sin logo. */
9
9
  logoUrl: string | null;
10
+ /** La segunda línea de la pantalla de inicio (2.2.0, §5 de la marca): opciones del código → marca
11
+ * del motor → default, ya resuelto por `resolverApariencia`. */
12
+ saludo: string;
10
13
  /** §2/§5.3 del diseño de la marca: rótulo en la cabecera y la evidencia apagada — en el preview no
11
14
  * hay `chat_conversaciones` que la reciba, y una captura de pantalla del modal no tiene que
12
15
  * confundirse con el chat real. */
@@ -1 +1 @@
1
- {"version":3,"file":"Widget.d.ts","sourceRoot":"","sources":["../../src/componentes/Widget.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,YAAY,CAAC;AAE5D,OAAO,EAAqG,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAQjJ,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,cAAc,CAAC;AAQpE,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,KAAK,EAAE;IACpC,OAAO,EAAE,cAAc,CAAC;IACxB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,uDAAuD;IACvD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;uCAEmC;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,cAAc,GAAG,IAAI,CAAC;IACrC,eAAe,EAAE,CAAC,CAAC,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAC;IACpD,OAAO,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,CAAC;IACnC,eAAe,EAAE,OAAO,CAAC;IACzB,+GAA+G;IAC/G,aAAa,EAAE,OAAO,GAAG,IAAI,CAAC;CAC/B,uCAyOA"}
1
+ {"version":3,"file":"Widget.d.ts","sourceRoot":"","sources":["../../src/componentes/Widget.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,YAAY,CAAC;AAE5D,OAAO,EAAoH,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAQhK,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAqC,MAAM,cAAc,CAAC;AAStF,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,KAAK,EAAE;IACpC,OAAO,EAAE,cAAc,CAAC;IACxB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,uDAAuD;IACvD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;oEACgE;IAChE,MAAM,EAAE,MAAM,CAAC;IACf;;uCAEmC;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,cAAc,GAAG,IAAI,CAAC;IACrC,eAAe,EAAE,CAAC,CAAC,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAC;IACpD,OAAO,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,CAAC;IACnC,eAAe,EAAE,OAAO,CAAC;IACzB,+GAA+G;IAC/G,aAAa,EAAE,OAAO,GAAG,IAAI,CAAC;CAC/B,uCAkRA"}
@@ -1 +1 @@
1
- {"version":3,"file":"contexto.d.ts","sourceRoot":"","sources":["../src/contexto.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAapD,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,iBAAiB,EACpB,OAAO,EAAE;IAAE,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,SAAS,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAC1E,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAuBpC"}
1
+ {"version":3,"file":"contexto.d.ts","sourceRoot":"","sources":["../src/contexto.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAapD,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,iBAAiB,EACpB,OAAO,EAAE;IAAE,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,SAAS,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAC1E,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAyBpC"}
package/dist/estado.d.ts CHANGED
@@ -37,4 +37,16 @@ export declare function reducir(e: EstadoDelChat, ev: EventoDelWidget): EstadoDe
37
37
  /** Entre Enviar y el primer token pasan 4-8 s en el peor caso (medido en la 1.x): sin indicador
38
38
  * se lee como "se rompió el botón". Se apaga con el primer texto del asistente. */
39
39
  export declare function mostrarIndicador(e: EstadoDelChat): boolean;
40
+ /** 2.2.0, §3.3 del spec: la pantalla de inicio se muestra sólo cuando no hay NADA que mostrar —
41
+ * ni cursor guardado (una charla que sigue) ni mensajes (una charla que terminó y se sigue
42
+ * leyendo, o un optimista en vuelo). Después de `fin` el cursor vuelve a null pero los mensajes
43
+ * quedan: la charla terminada se lee hasta que el usuario escribe de nuevo. */
44
+ export declare function mostrarInicio(e: EstadoDelChat): boolean;
45
+ export interface GrupoDeMensajes {
46
+ rol: Mensaje["rol"];
47
+ mensajes: Mensaje[];
48
+ }
49
+ /** Consecutivos del mismo rol en un grupo: el avatar va una vez por grupo y la esquina de 6 px
50
+ * sólo en la última burbuja (§3.5 del spec). */
51
+ export declare function agruparMensajes(mensajes: Mensaje[]): GrupoDeMensajes[];
40
52
  //# sourceMappingURL=estado.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"estado.d.ts","sourceRoot":"","sources":["../src/estado.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAMrF,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,SAAS,GAAG,WAAW,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,gGAAgG;IAChG,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3B,yDAAyD;IACzD,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,aAAa,CAE1E;AA0BD;4BAC4B;AAC5B,wBAAgB,QAAQ,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAEvE;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,aAAa,GAAG,aAAa,CAE3D;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,aAAa,GAAG,aAAa,CAE5D;AAED,wFAAwF;AACxF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,aAAa,GAAG,aAAa,CAEhE;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,eAAe,GAAG,aAAa,CAsC5E;AAED;mFACmF;AACnF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,aAAa,GAAG,OAAO,CAI1D"}
1
+ {"version":3,"file":"estado.d.ts","sourceRoot":"","sources":["../src/estado.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAMrF,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,SAAS,GAAG,WAAW,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,gGAAgG;IAChG,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3B,yDAAyD;IACzD,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,aAAa,CAE1E;AA0BD;4BAC4B;AAC5B,wBAAgB,QAAQ,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAEvE;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,aAAa,GAAG,aAAa,CAE3D;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,aAAa,GAAG,aAAa,CAE5D;AAED,wFAAwF;AACxF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,aAAa,GAAG,aAAa,CAEhE;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,eAAe,GAAG,aAAa,CAsC5E;AAED;mFACmF;AACnF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,aAAa,GAAG,OAAO,CAI1D;AAED;;;+EAG+E;AAC/E,wBAAgB,aAAa,CAAC,CAAC,EAAE,aAAa,GAAG,OAAO,CAEvD;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED;gDACgD;AAChD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,eAAe,EAAE,CAQtE"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export { ChatDeIntake, type ContextoDelReporte } from "./react";
2
2
  export { montarChat, type ChatMontado } from "./montar";
3
3
  export type { OpcionesDelChat, TemaDelChat, Diagnostico, UsuarioDelChat } from "./opciones";
4
- export { esBorde, type CursorDeSesion, type EventoDelWidget, type OpcionDePregunta } from "./protocolo";
4
+ export { esBorde, type CursorDeSesion, type EventoDelWidget, type EventoDelPreview, type OpcionDePregunta } from "./protocolo";
5
+ export { claveDeSesion } from "./sesion-guardada";
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AACxD,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5F,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,UAAU,CAAC;AACxD,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5F,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/H,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC"}