@apia/ai 0.3.6 → 1.0.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/cleanDist.json CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "cleanDist": 0.2318938201855587
2
+ "cleanDist": 0.9681770510991421
3
3
  }
package/dist/index.d.ts CHANGED
@@ -1,28 +1,32 @@
1
1
  import * as react from 'react';
2
- import { ReactNode } from 'react';
2
+ import { ReactNode, ReactElement } from 'react';
3
3
  import { EventEmitter } from '@apia/util';
4
4
 
5
- type TMessageType = 'user' | 'system' | 'warning' | 'error' | 'information' | 'response';
6
5
  declare class ChatMessage {
7
- message: ReactNode;
6
+ #private;
8
7
  messageType: TMessageType;
9
8
  id: number;
10
9
  parseMessage(message: string): string;
11
10
  constructor(message: ReactNode, messageType: TMessageType);
12
- }
11
+ get message(): ReactNode;
12
+ }
13
+
14
+ type TMessageType = 'user' | 'system' | 'warning' | 'error' | 'information' | 'response' | 'multipleChoice';
13
15
  declare class ChatController extends EventEmitter<{
14
16
  listChange: ChatMessage[];
15
- messageSubmited: string;
17
+ messageSubmited?: string;
16
18
  }> {
17
19
  #private;
18
20
  id: string;
19
- constructor(id: string);
21
+ constructor(id: string, welcomeMessage?: string | false);
20
22
  components: {
21
23
  MessageHistory: () => react.JSX.Element;
22
24
  Textarea: {
23
- ({ hideDeleteButton, onSubmit, }: {
25
+ ({ hideDeleteButton, isLoading: outIsLoading, onSubmit, preventAppendUserMessages, }: {
24
26
  hideDeleteButton?: boolean | undefined;
27
+ isLoading?: boolean | undefined;
25
28
  onSubmit: (text: string) => Promise<void>;
29
+ preventAppendUserMessages?: boolean | undefined;
26
30
  }): react.JSX.Element;
27
31
  displayName: string;
28
32
  };
@@ -39,4 +43,19 @@ declare class ChatController extends EventEmitter<{
39
43
  };
40
44
  }
41
45
 
42
- export { ChatController, ChatMessage };
46
+ type TMultipleChoiceMessageOption<OptionProps> = {
47
+ label: string;
48
+ url: string;
49
+ additionalProps?: OptionProps;
50
+ };
51
+ declare class MultipleChoiceMessage<OptionProps> extends ChatMessage {
52
+ private question;
53
+ private options;
54
+ private Renderer?;
55
+ constructor(question: string, options: TMultipleChoiceMessageOption<OptionProps>[], Renderer?: ((props: {
56
+ item: TMultipleChoiceMessageOption<OptionProps>;
57
+ }) => ReactElement) | undefined);
58
+ get message(): react.JSX.Element;
59
+ }
60
+
61
+ export { ChatController, ChatMessage, MultipleChoiceMessage, TMessageType, TMultipleChoiceMessageOption };
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { Box, getVariant, Textarea } from '@apia/theme';
3
- import { EventEmitter } from '@apia/util';
2
+ import { Box, getVariant, Textarea, Paragraph } from '@apia/theme';
3
+ import { getLabel, EventEmitter } from '@apia/util';
4
4
  import { useRef, useCallback, useState, useEffect } from 'react';
5
- import { IconButton, SimpleButton } from '@apia/components';
5
+ import { IconButton, SimpleButton, ApiaUtil } from '@apia/components';
6
6
 
7
7
  var __defProp$1 = Object.defineProperty;
8
8
  var __defProps$1 = Object.defineProperties;
@@ -45,7 +45,10 @@ const AutoscrollContainer = ({ children }) => {
45
45
  observer.current = new MutationObserver(([mutation]) => {
46
46
  if (mutation && mutation.target instanceof HTMLElement && mutation.target === el) {
47
47
  if (isFullScrolled.current && mutation.target.scrollTop !== mutation.target.scrollHeight - mutation.target.offsetHeight) {
48
- mutation.target.scrollTop = mutation.target.scrollHeight;
48
+ mutation.target.scrollTo({
49
+ top: mutation.target.scrollHeight,
50
+ behavior: "smooth"
51
+ });
49
52
  }
50
53
  }
51
54
  });
@@ -263,21 +266,67 @@ function useHandleFileUpload({
263
266
  return { progress, handleFileUpload };
264
267
  }
265
268
 
269
+ var __accessCheck$1 = (obj, member, msg) => {
270
+ if (!member.has(obj))
271
+ throw TypeError("Cannot " + msg);
272
+ };
273
+ var __privateGet$1 = (obj, member, getter) => {
274
+ __accessCheck$1(obj, member, "read from private field");
275
+ return getter ? getter.call(obj) : member.get(obj);
276
+ };
277
+ var __privateAdd$1 = (obj, member, value) => {
278
+ if (member.has(obj))
279
+ throw TypeError("Cannot add the same private member more than once");
280
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
281
+ };
282
+ var __privateSet$1 = (obj, member, value, setter) => {
283
+ __accessCheck$1(obj, member, "write to private field");
284
+ setter ? setter.call(obj, value) : member.set(obj, value);
285
+ return value;
286
+ };
287
+ var _message;
288
+ let maxId = 0;
289
+ class ChatMessage {
290
+ constructor(message, messageType) {
291
+ this.messageType = messageType;
292
+ __privateAdd$1(this, _message, void 0);
293
+ this.id = maxId++;
294
+ __privateSet$1(this, _message, message);
295
+ if (messageType === "response")
296
+ this.messageType = "system";
297
+ if (typeof message === "string")
298
+ __privateSet$1(this, _message, this.parseMessage(message));
299
+ }
300
+ parseMessage(message) {
301
+ let result = message;
302
+ result = result.replaceAll("[strong]", "<strong>");
303
+ result = result.replaceAll("[/strong]", "</strong>");
304
+ return result;
305
+ }
306
+ get message() {
307
+ return __privateGet$1(this, _message);
308
+ }
309
+ }
310
+ _message = new WeakMap();
311
+
266
312
  const makeTextarea = (gptController) => {
267
313
  const NewTextarea = ({
268
314
  hideDeleteButton,
269
- onSubmit
315
+ isLoading: outIsLoading,
316
+ onSubmit,
317
+ preventAppendUserMessages
270
318
  }) => {
271
319
  const [isLoading, setIsLoading] = useState(false);
272
320
  const submit = useCallback(
273
321
  (text) => {
322
+ if (preventAppendUserMessages !== true)
323
+ gptController.messages.add(new ChatMessage(text, "user"));
274
324
  gptController.history.add(text);
275
- gptController.messages.add(new ChatMessage(text, "user"));
276
325
  onSubmit(text).finally(() => {
277
326
  setIsLoading(false);
278
327
  });
279
328
  },
280
- [onSubmit]
329
+ [onSubmit, preventAppendUserMessages]
281
330
  );
282
331
  const handleSubmit = useCallback(
283
332
  (ev) => {
@@ -310,7 +359,7 @@ const makeTextarea = (gptController) => {
310
359
  ).value = content.join("\n\n");
311
360
  }
312
361
  });
313
- const actualIsLoading = isLoading || progress !== 100;
362
+ const actualIsLoading = isLoading || progress !== 100 || outIsLoading;
314
363
  return /* @__PURE__ */ jsxs("form", { onSubmit: handleSubmit, className: "gpt__form", action: "", children: [
315
364
  /* @__PURE__ */ jsx(
316
365
  Textarea,
@@ -333,10 +382,10 @@ const makeTextarea = (gptController) => {
333
382
  /* @__PURE__ */ jsx(
334
383
  IconButton,
335
384
  {
385
+ title: getLabel("btnUploadFile").text,
336
386
  icon: "File",
337
387
  variant: "icon-outline",
338
- isLoading: progress !== 100,
339
- disabled: isLoading,
388
+ disabled: actualIsLoading,
340
389
  onClick: () => {
341
390
  document.getElementById(
342
391
  `gptUploadFile__${gptController.id}`
@@ -348,6 +397,7 @@ const makeTextarea = (gptController) => {
348
397
  /* @__PURE__ */ jsx(
349
398
  SimpleButton,
350
399
  {
400
+ title: getLabel("btnAiPrevious").tooltip,
351
401
  variant: "outline",
352
402
  type: "button",
353
403
  onClick: () => {
@@ -358,12 +408,13 @@ const makeTextarea = (gptController) => {
358
408
  ).value = historyValue;
359
409
  },
360
410
  size: "sm",
361
- children: "Previo"
411
+ children: getLabel("btnAiPrevious").text
362
412
  }
363
413
  ),
364
414
  /* @__PURE__ */ jsx(
365
415
  SimpleButton,
366
416
  {
417
+ title: getLabel("btnAiNext").tooltip,
367
418
  variant: "outline",
368
419
  type: "button",
369
420
  onClick: () => {
@@ -373,20 +424,30 @@ const makeTextarea = (gptController) => {
373
424
  ).value = historyValue != null ? historyValue : "";
374
425
  },
375
426
  size: "sm",
376
- children: "Siguiente"
427
+ children: getLabel("btnAiNext").text
377
428
  }
378
429
  ),
379
430
  !hideDeleteButton && /* @__PURE__ */ jsx(
380
431
  SimpleButton,
381
432
  {
433
+ title: getLabel("btnAiDelete").tooltip,
382
434
  variant: "outline",
383
435
  type: "button",
384
436
  onClick: () => gptController.messages.clear(),
385
437
  size: "sm",
386
- children: "Borrar"
438
+ children: getLabel("btnAiDelete").text
387
439
  }
388
440
  ),
389
- /* @__PURE__ */ jsx(SimpleButton, { isLoading: actualIsLoading, type: "submit", size: "sm", children: "Enviar" })
441
+ /* @__PURE__ */ jsx(
442
+ SimpleButton,
443
+ {
444
+ title: getLabel("btnAiSend").tooltip,
445
+ isLoading: actualIsLoading,
446
+ type: "submit",
447
+ size: "sm",
448
+ children: getLabel("btnAiSend").text
449
+ }
450
+ )
390
451
  ] })
391
452
  ] });
392
453
  };
@@ -440,40 +501,17 @@ var __privateWrapper = (obj, member, setter, getter) => ({
440
501
  }
441
502
  });
442
503
  var _messages, _promptsHistory, _currentHistoryIndex;
443
- let maxId = 0;
444
- class ChatMessage {
445
- constructor(message, messageType) {
446
- this.message = message;
447
- this.messageType = messageType;
448
- this.id = maxId++;
449
- if (messageType === "response")
450
- this.messageType = "system";
451
- if (typeof message === "string")
452
- this.message = this.parseMessage(message);
453
- }
454
- parseMessage(message) {
455
- let result = message;
456
- result = result.replaceAll("[strong]", "<strong>");
457
- result = result.replaceAll("[/strong]", "</strong>");
458
- return result;
459
- }
460
- }
461
504
  class ChatController extends EventEmitter {
462
- constructor(id) {
505
+ constructor(id, welcomeMessage = getLabel("lblAiDashboardWelcomeMessage").text) {
463
506
  super();
464
507
  this.id = id;
465
- __privateAdd(this, _messages, [
466
- new ChatMessage(
467
- "Bienvenido, esta interfaz intenta ofrecer una forma alternativa de acceso a las distintas acciones disponibles en el sistema. Interact\xFAa directamente desde el chat o escribe [strong]ayuda[/strong] para conocer las opciones disponibles.",
468
- "system"
469
- )
470
- ]);
508
+ __privateAdd(this, _messages, []);
471
509
  this.components = {
472
510
  MessageHistory: () => {
473
511
  const messages = this.history.useList();
474
512
  return /* @__PURE__ */ jsx(
475
513
  Box,
476
- __spreadProps(__spreadValues({}, getVariant("layout.panels.gpt.chat.history")), {
514
+ __spreadProps(__spreadValues({}, getVariant("layout.common.components.chat")), {
477
515
  className: "history",
478
516
  children: /* @__PURE__ */ jsx(AutoscrollContainer, { children: messages.map((current) => /* @__PURE__ */ jsx(
479
517
  Box,
@@ -534,10 +572,43 @@ class ChatController extends EventEmitter {
534
572
  this.emit("listChange", []);
535
573
  }
536
574
  };
575
+ if (typeof welcomeMessage === "string")
576
+ __privateGet(this, _messages).push(new ChatMessage(welcomeMessage, "system"));
537
577
  }
538
578
  }
539
579
  _messages = new WeakMap();
540
580
  _promptsHistory = new WeakMap();
541
581
  _currentHistoryIndex = new WeakMap();
542
582
 
543
- export { ChatController, ChatMessage };
583
+ class MultipleChoiceMessage extends ChatMessage {
584
+ constructor(question, options, Renderer) {
585
+ super("", "multipleChoice");
586
+ this.question = question;
587
+ this.options = options;
588
+ this.Renderer = Renderer;
589
+ }
590
+ get message() {
591
+ const Renderer = this.Renderer;
592
+ if (Renderer) {
593
+ return /* @__PURE__ */ jsxs(Box, { className: "multipleChoiceMessage customRenderer", children: [
594
+ /* @__PURE__ */ jsx(Paragraph, { children: this.question }),
595
+ this.options.map((item) => /* @__PURE__ */ jsx(Renderer, { item }, item.url))
596
+ ] });
597
+ }
598
+ return /* @__PURE__ */ jsxs(Box, { className: "multipleChoiceMessage", children: [
599
+ /* @__PURE__ */ jsx(Paragraph, { children: this.question }),
600
+ !Renderer && /* @__PURE__ */ jsx(Box, { as: "ul", children: this.options.map((current) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
601
+ SimpleButton,
602
+ {
603
+ className: "multipleChoice__option",
604
+ onClick: () => {
605
+ new ApiaUtil().tabs.openTab(current.label, current.url);
606
+ },
607
+ children: current.label
608
+ }
609
+ ) }, current.label)) })
610
+ ] });
611
+ }
612
+ }
613
+
614
+ export { ChatController, ChatMessage, MultipleChoiceMessage };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/components/chat/AutoscrollContainer.tsx","../src/files/ocr/getImageOcrMaker.ts","../src/files/pdf/getPdfReader.ts","../src/components/chat/files/useHandleFileUpload.ts","../src/components/chat/Textarea.tsx","../src/components/chat/ChatController.tsx"],"sourcesContent":["import { getVariant } from '@apia/theme';\nimport { ReactNode, useCallback, useRef } from 'react';\nimport { Box } from '@apia/theme';\n\nexport const AutoscrollContainer = ({ children }: { children: ReactNode }) => {\n const observer = useRef<MutationObserver | null>(null);\n const unsuscribe = useRef<(() => void) | null>(null);\n const isFullScrolled = useRef(false);\n const hasInited = useRef(false);\n\n const ref = useCallback((el: HTMLElement) => {\n if (!el) return;\n\n if (!hasInited.current) {\n hasInited.current = true;\n el.scrollTo({\n top: el.getBoundingClientRect().height,\n behavior: 'auto',\n });\n isFullScrolled.current = true;\n }\n\n observer.current?.disconnect();\n unsuscribe.current?.();\n\n observer.current = new MutationObserver(([mutation]) => {\n if (\n mutation &&\n mutation.target instanceof HTMLElement &&\n mutation.target === el\n ) {\n if (\n isFullScrolled.current &&\n mutation.target.scrollTop !==\n mutation.target.scrollHeight - mutation.target.offsetHeight\n ) {\n // eslint-disable-next-line no-param-reassign\n mutation.target.scrollTop = mutation.target.scrollHeight;\n }\n }\n });\n observer.current.observe(el, { childList: true, subtree: true });\n\n const handleScroll = (ev: Event) => {\n if (ev.target === el && el instanceof HTMLElement) {\n setTimeout(() => {\n isFullScrolled.current =\n Math.abs(el.scrollTop - (el.scrollHeight - el.offsetHeight)) < 150;\n }, 100);\n }\n };\n el.addEventListener('scroll', handleScroll);\n unsuscribe.current = () => {\n el.removeEventListener('scroll', handleScroll);\n };\n }, []);\n\n return (\n <Box\n {...getVariant('layout.common.components.autoscrollContainer')}\n className=\"autoscrollContainer\"\n ref={ref}\n >\n {children}\n </Box>\n );\n};\n","import { FileProcessor } from '../FileProcessor';\n\nexport function isImageFile(file: File) {\n const IMAGE_EXTENSIONS = [\n 'jpg',\n 'jpeg',\n 'png',\n 'gif',\n 'bmp',\n 'webp',\n 'tiff',\n 'svg',\n 'jfif',\n ];\n\n return IMAGE_EXTENSIONS.includes(file.name.split('.').pop() as string);\n}\n\nexport default function getImageOcrMaker(lang: 'eng' | 'spa') {\n return new (class ImageOcrMaker implements FileProcessor {\n async processFile(\n file: File,\n onProgress?: (progress: number) => unknown,\n ): Promise<string[]> {\n const tesseract = await import('tesseract.js');\n\n const worker = await tesseract.createWorker(lang, 1, {\n logger(arg) {\n onProgress?.(arg.progress * 100);\n },\n });\n\n const result = (await worker.recognize(file)).data.text;\n return [result];\n }\n\n willProcessFile(file: File) {\n return isImageFile(file);\n }\n })();\n}\n","import { FileProcessor } from '../FileProcessor';\n\nexport function isPdfFile(file: File) {\n const IMAGE_EXTENSIONS = ['pdf'];\n\n return IMAGE_EXTENSIONS.includes(file.name.split('.').pop() as string);\n}\n\nexport default function getPdfReader() {\n return new (class PdfReader implements FileProcessor {\n async processFile(\n file: File,\n onProgress?: (progress: number) => void,\n ): Promise<string[]> {\n onProgress?.(0);\n const { getDocument, GlobalWorkerOptions } = await import('pdfjs-dist');\n\n async function getPdfTextFromArrayBuffer(\n buffer: ArrayBuffer,\n ): Promise<string[]> {\n GlobalWorkerOptions.workerSrc = '../includes/pdf.worker.min.40189.js';\n\n const pdf = await getDocument({ data: buffer }).promise;\n\n const pages: string[] = [];\n\n for (let i = 1; i <= pdf.numPages; i++) {\n const page = await pdf.getPage(i);\n const textContent = await page.getTextContent();\n\n // Concatenar texto de cada página\n pages.push(\n textContent.items\n .map((item) => (item as { str: string }).str)\n .join(' '),\n );\n }\n\n return pages;\n }\n\n return new Promise((resolve) => {\n const reader = new FileReader();\n\n reader.onload = async function (event: ProgressEvent<FileReader>) {\n if (!event.target?.result) {\n alert('Error al leer el archivo.');\n return;\n }\n\n const buffer: ArrayBuffer = event.target.result as ArrayBuffer;\n const text = await getPdfTextFromArrayBuffer(buffer);\n\n onProgress?.(100);\n resolve(text);\n };\n\n reader.readAsArrayBuffer(file);\n });\n }\n\n willProcessFile(file: File) {\n return isPdfFile(file);\n }\n })();\n}\n","/* eslint-disable no-param-reassign */\nimport { ChangeEvent, useCallback, useState } from 'react';\nimport getImageOcrMaker from '../../../files/ocr/getImageOcrMaker';\nimport getPdfReader from '../../../files/pdf/getPdfReader';\n\nexport default function useHandleFileUpload({\n onContent,\n}: {\n onContent: (content: string[]) => unknown;\n}) {\n const [progress, setProgress] = useState(100);\n\n const handleFileUpload = useCallback(\n (ev: ChangeEvent<HTMLInputElement>) => {\n setProgress(0);\n\n const imageProcessor = getImageOcrMaker();\n const pdfProcessor = getPdfReader();\n\n void (async () => {\n const obtainedText: string[] = [];\n const files = ev.target.files;\n const filesLength = ev.target.files?.length ?? 0;\n if (files) {\n for (let i = 0; i < filesLength; i++) {\n const file = files[i];\n\n const handleProgress = (progress: number) => {\n setProgress(\n (i / filesLength) * 100 +\n (1 / filesLength) * 100 * (progress / 100),\n );\n };\n\n let result = '';\n if (imageProcessor.willProcessFile(file)) {\n try {\n result = (\n await imageProcessor.processFile(file, handleProgress)\n )[0];\n } catch (e) {\n console.error(e);\n }\n } else if (pdfProcessor.willProcessFile(file)) {\n result = (\n await pdfProcessor.processFile(file, handleProgress)\n ).join('\\n\\n');\n try {\n } catch (e) {\n console.error(e);\n }\n }\n\n if (result) {\n obtainedText.push(result);\n }\n\n setProgress(((i + 1) / filesLength) * 100);\n }\n }\n onContent(obtainedText);\n })();\n\n ev.target.value = '';\n },\n [onContent],\n );\n\n return { progress, handleFileUpload };\n}\n","/* eslint-disable no-param-reassign */\nimport { FormEvent, KeyboardEvent, useCallback, useState } from 'react';\nimport { ChatMessage, ChatController } from './ChatController';\nimport { IconButton, SimpleButton } from '@apia/components';\nimport { Box, Textarea } from '@apia/theme';\nimport useHandleFileUpload from './files/useHandleFileUpload';\n\nexport const makeTextarea = (gptController: ChatController) => {\n const NewTextarea = ({\n hideDeleteButton,\n onSubmit,\n }: {\n hideDeleteButton?: boolean;\n onSubmit: (text: string) => Promise<void>;\n }) => {\n const [isLoading, setIsLoading] = useState(false);\n\n const submit = useCallback(\n (text: string) => {\n gptController.history.add(text);\n gptController.messages.add(new ChatMessage(text, 'user'));\n\n onSubmit(text).finally(() => {\n setIsLoading(false);\n });\n },\n [onSubmit],\n );\n\n const handleSubmit = useCallback(\n (ev: FormEvent<HTMLFormElement>) => {\n ev.preventDefault();\n //setIsLoading(true);\n const textarea = document.getElementById(\n `GPTMessage${gptController.id}`,\n ) as HTMLTextAreaElement;\n\n if (textarea.value) {\n setIsLoading(true);\n submit(textarea.value);\n }\n\n textarea.focus();\n textarea.value = '';\n },\n [submit],\n );\n\n const onKeyDown = useCallback((ev: KeyboardEvent) => {\n if ((ev.target as HTMLTextAreaElement).readOnly) return;\n\n if (ev.code === 'Enter' && !ev.shiftKey) {\n ev.preventDefault();\n (ev.target as HTMLElement)\n .closest('form')\n ?.querySelector<HTMLButtonElement>('button[type=\"submit\"]')\n ?.click();\n }\n }, []);\n\n const { progress, handleFileUpload } = useHandleFileUpload({\n onContent(content) {\n (\n document.getElementById(\n `GPTMessage${gptController.id}`,\n ) as HTMLTextAreaElement\n ).value = content.join('\\n\\n');\n },\n });\n\n const actualIsLoading = isLoading || progress !== 100;\n\n return (\n <form onSubmit={handleSubmit} className=\"gpt__form\" action=\"\">\n <Textarea\n onKeyDown={onKeyDown}\n id={`GPTMessage${gptController.id}`}\n readOnly={actualIsLoading}\n />\n <Box className=\"gpt__buttonsContainer\">\n <input\n type=\"file\"\n id={`gptUploadFile__${gptController.id}`}\n sx={{ display: 'none' }}\n onChange={handleFileUpload}\n />\n <IconButton\n icon=\"File\"\n variant=\"icon-outline\"\n isLoading={progress !== 100}\n disabled={isLoading}\n onClick={() => {\n (\n document.getElementById(\n `gptUploadFile__${gptController.id}`,\n ) as HTMLElement\n ).click();\n }}\n size=\"Lg\"\n />\n <SimpleButton\n variant=\"outline\"\n type=\"button\"\n onClick={() => {\n const historyValue = gptController.history.previous();\n if (historyValue)\n (\n document.getElementById(\n `GPTMessage${gptController.id}`,\n ) as HTMLTextAreaElement\n ).value = historyValue;\n }}\n size=\"sm\"\n >\n Previo\n </SimpleButton>\n <SimpleButton\n variant=\"outline\"\n type=\"button\"\n onClick={() => {\n const historyValue = gptController.history.next();\n (\n document.getElementById(\n `GPTMessage${gptController.id}`,\n ) as HTMLTextAreaElement\n ).value = historyValue ?? '';\n }}\n size=\"sm\"\n >\n Siguiente\n </SimpleButton>\n {!hideDeleteButton && (\n <SimpleButton\n variant=\"outline\"\n type=\"button\"\n onClick={() => gptController.messages.clear()}\n size=\"sm\"\n >\n Borrar\n </SimpleButton>\n )}\n <SimpleButton isLoading={actualIsLoading} type=\"submit\" size=\"sm\">\n Enviar\n </SimpleButton>\n </Box>\n </form>\n );\n };\n\n NewTextarea.displayName = '';\n\n return NewTextarea;\n};\n","/* eslint-disable no-param-reassign */\nimport { getVariant } from '@apia/theme';\nimport { EventEmitter } from '@apia/util';\nimport { ReactNode, useEffect, useState } from 'react';\nimport { Box } from '@apia/theme';\nimport { AutoscrollContainer } from './AutoscrollContainer';\nimport { makeTextarea } from './Textarea';\n\nexport type TMessageType =\n | 'user'\n | 'system'\n | 'warning'\n | 'error'\n | 'information'\n | 'response';\n\nlet maxId = 0;\n\nexport class ChatMessage {\n id: number;\n\n parseMessage(message: string) {\n let result = message;\n\n result = result.replaceAll('[strong]', '<strong>');\n result = result.replaceAll('[/strong]', '</strong>');\n\n return result;\n }\n\n constructor(public message: ReactNode, public messageType: TMessageType) {\n this.id = maxId++;\n\n if (messageType === 'response') this.messageType = 'system';\n if (typeof message === 'string') this.message = this.parseMessage(message);\n }\n}\n\nexport class ChatController extends EventEmitter<{\n listChange: ChatMessage[];\n messageSubmited: string;\n}> {\n #messages: ChatMessage[] = [\n new ChatMessage(\n 'Bienvenido, esta interfaz intenta ofrecer una forma alternativa de acceso a las distintas acciones disponibles en el sistema. Interactúa directamente desde el chat o escribe [strong]ayuda[/strong] para conocer las opciones disponibles.',\n 'system',\n ),\n ];\n\n constructor(public id: string) {\n super();\n }\n\n components = {\n MessageHistory: () => {\n const messages = this.history.useList();\n\n return (\n <Box\n {...getVariant('layout.panels.gpt.chat.history')}\n className=\"history\"\n >\n <AutoscrollContainer>\n {messages.map((current) => (\n <Box\n as=\"pre\"\n className={`history__message ${current.messageType}`}\n key={current.id}\n {...(typeof current.message === 'string'\n ? { dangerouslySetInnerHTML: { __html: current.message } }\n : { children: current.message })}\n />\n ))}\n </AutoscrollContainer>\n </Box>\n );\n },\n Textarea: makeTextarea(this),\n };\n\n #promptsHistory: string[] = [];\n #currentHistoryIndex = -1;\n\n history = {\n add: (prompt: string) => {\n this.#currentHistoryIndex = -1;\n\n if (prompt === this.#promptsHistory[this.#promptsHistory.length]) {\n return;\n }\n\n this.#promptsHistory = [\n prompt,\n ...this.#promptsHistory.slice(\n Math.max(0, this.#promptsHistory.length - 10),\n ),\n ];\n },\n next: () => {\n if (this.#promptsHistory[this.#currentHistoryIndex - 1])\n return this.#promptsHistory[--this.#currentHistoryIndex];\n else {\n this.#currentHistoryIndex = -1;\n return '';\n }\n },\n previous: () => {\n if (this.#promptsHistory[this.#currentHistoryIndex + 1]) {\n return this.#promptsHistory[++this.#currentHistoryIndex];\n }\n },\n useList: () => {\n const [messages, setMessages] = useState<ChatMessage[]>(this.#messages);\n\n useEffect(() => {\n return this.on('listChange', (messages) => setMessages(messages));\n }, []);\n\n return messages;\n },\n };\n\n messages = {\n add: (message: ChatMessage) => {\n this.#messages.push(message);\n this.emit('listChange', [...this.#messages]);\n },\n clear: () => {\n this.#messages = [];\n this.emit('listChange', []);\n },\n };\n}\n"],"names":["__spreadProps","__spreadValues","__async","progress","messages"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAIO,MAAM,mBAAsB,GAAA,CAAC,EAAE,QAAA,EAAwC,KAAA;AAC5E,EAAM,MAAA,QAAA,GAAW,OAAgC,IAAI,CAAA,CAAA;AACrD,EAAM,MAAA,UAAA,GAAa,OAA4B,IAAI,CAAA,CAAA;AACnD,EAAM,MAAA,cAAA,GAAiB,OAAO,KAAK,CAAA,CAAA;AACnC,EAAM,MAAA,SAAA,GAAY,OAAO,KAAK,CAAA,CAAA;AAE9B,EAAM,MAAA,GAAA,GAAM,WAAY,CAAA,CAAC,EAAoB,KAAA;AAV/C,IAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAWI,IAAA,IAAI,CAAC,EAAA;AAAI,MAAA,OAAA;AAET,IAAI,IAAA,CAAC,UAAU,OAAS,EAAA;AACtB,MAAA,SAAA,CAAU,OAAU,GAAA,IAAA,CAAA;AACpB,MAAA,EAAA,CAAG,QAAS,CAAA;AAAA,QACV,GAAA,EAAK,EAAG,CAAA,qBAAA,EAAwB,CAAA,MAAA;AAAA,QAChC,QAAU,EAAA,MAAA;AAAA,OACX,CAAA,CAAA;AACD,MAAA,cAAA,CAAe,OAAU,GAAA,IAAA,CAAA;AAAA,KAC3B;AAEA,IAAA,CAAA,EAAA,GAAA,QAAA,CAAS,YAAT,IAAkB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,UAAA,EAAA,CAAA;AAClB,IAAA,CAAA,EAAA,GAAA,UAAA,CAAW,OAAX,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,UAAA,CAAA,CAAA;AAEA,IAAA,QAAA,CAAS,UAAU,IAAI,gBAAA,CAAiB,CAAC,CAAC,QAAQ,CAAM,KAAA;AACtD,MAAA,IACE,YACA,QAAS,CAAA,MAAA,YAAkB,WAC3B,IAAA,QAAA,CAAS,WAAW,EACpB,EAAA;AACA,QACE,IAAA,cAAA,CAAe,OACf,IAAA,QAAA,CAAS,MAAO,CAAA,SAAA,KACd,SAAS,MAAO,CAAA,YAAA,GAAe,QAAS,CAAA,MAAA,CAAO,YACjD,EAAA;AAEA,UAAS,QAAA,CAAA,MAAA,CAAO,SAAY,GAAA,QAAA,CAAS,MAAO,CAAA,YAAA,CAAA;AAAA,SAC9C;AAAA,OACF;AAAA,KACD,CAAA,CAAA;AACD,IAAS,QAAA,CAAA,OAAA,CAAQ,QAAQ,EAAI,EAAA,EAAE,WAAW,IAAM,EAAA,OAAA,EAAS,MAAM,CAAA,CAAA;AAE/D,IAAM,MAAA,YAAA,GAAe,CAAC,EAAc,KAAA;AAClC,MAAA,IAAI,EAAG,CAAA,MAAA,KAAW,EAAM,IAAA,EAAA,YAAc,WAAa,EAAA;AACjD,QAAA,UAAA,CAAW,MAAM;AACf,UAAe,cAAA,CAAA,OAAA,GACb,KAAK,GAAI,CAAA,EAAA,CAAG,aAAa,EAAG,CAAA,YAAA,GAAe,EAAG,CAAA,YAAA,CAAa,CAAI,GAAA,GAAA,CAAA;AAAA,WAChE,GAAG,CAAA,CAAA;AAAA,OACR;AAAA,KACF,CAAA;AACA,IAAG,EAAA,CAAA,gBAAA,CAAiB,UAAU,YAAY,CAAA,CAAA;AAC1C,IAAA,UAAA,CAAW,UAAU,MAAM;AACzB,MAAG,EAAA,CAAA,mBAAA,CAAoB,UAAU,YAAY,CAAA,CAAA;AAAA,KAC/C,CAAA;AAAA,GACF,EAAG,EAAE,CAAA,CAAA;AAEL,EACE,uBAAA,GAAA;AAAA,IAAC,GAAA;AAAA,IACKA,eAAA,CAAAC,gBAAA,CAAA,EAAA,EAAA,UAAA,CAAW,8CAA8C,CAD9D,CAAA,EAAA;AAAA,MAEC,SAAU,EAAA,qBAAA;AAAA,MACV,GAAA;AAAA,MAEC,QAAA;AAAA,KAAA,CAAA;AAAA,GACH,CAAA;AAEJ,CAAA;;;;;;;;;;;;;;;;;;;;;;AChEO,SAAS,YAAY,IAAY,EAAA;AACtC,EAAA,MAAM,gBAAmB,GAAA;AAAA,IACvB,KAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,GACF,CAAA;AAEA,EAAO,OAAA,gBAAA,CAAiB,SAAS,IAAK,CAAA,IAAA,CAAK,MAAM,GAAG,CAAA,CAAE,KAAe,CAAA,CAAA;AACvE,CAAA;AAEA,SAAwB,iBAAiB,IAAqB,EAAA;AAC5D,EAAO,OAAA,IAAK,MAAM,aAAuC,CAAA;AAAA,IACjD,WAAA,CACJ,MACA,UACmB,EAAA;AAAA,MAAA,OAAAC,SAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACnB,QAAM,MAAA,SAAA,GAAY,MAAM,OAAO,cAAc,CAAA,CAAA;AAE7C,QAAA,MAAM,MAAS,GAAA,MAAM,SAAU,CAAA,YAAA,CAAa,MAAM,CAAG,EAAA;AAAA,UACnD,OAAO,GAAK,EAAA;AACV,YAAA,UAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAa,IAAI,QAAW,GAAA,GAAA,CAAA,CAAA;AAAA,WAC9B;AAAA,SACD,CAAA,CAAA;AAED,QAAA,MAAM,UAAU,MAAM,MAAA,CAAO,SAAU,CAAA,IAAI,GAAG,IAAK,CAAA,IAAA,CAAA;AACnD,QAAA,OAAO,CAAC,MAAM,CAAA,CAAA;AAAA,OAChB,CAAA,CAAA;AAAA,KAAA;AAAA,IAEA,gBAAgB,IAAY,EAAA;AAC1B,MAAA,OAAO,YAAY,IAAI,CAAA,CAAA;AAAA,KACzB;AAAA,GACC,EAAA,CAAA;AACL;;;;;;;;;;;;;;;;;;;;;;ACtCO,SAAS,UAAU,IAAY,EAAA;AACpC,EAAM,MAAA,gBAAA,GAAmB,CAAC,KAAK,CAAA,CAAA;AAE/B,EAAO,OAAA,gBAAA,CAAiB,SAAS,IAAK,CAAA,IAAA,CAAK,MAAM,GAAG,CAAA,CAAE,KAAe,CAAA,CAAA;AACvE,CAAA;AAEA,SAAwB,YAAe,GAAA;AACrC,EAAO,OAAA,IAAK,MAAM,SAAmC,CAAA;AAAA,IAC7C,WAAA,CACJ,MACA,UACmB,EAAA;AAAA,MAAA,OAAAA,SAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACnB,QAAa,UAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAA,CAAA,CAAA,CAAA;AACb,QAAA,MAAM,EAAE,WAAa,EAAA,mBAAA,EAAwB,GAAA,MAAM,OAAO,YAAY,CAAA,CAAA;AAEtE,QAAA,SAAe,0BACb,MACmB,EAAA;AAAA,UAAA,OAAAA,SAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACnB,YAAA,mBAAA,CAAoB,SAAY,GAAA,qCAAA,CAAA;AAEhC,YAAA,MAAM,MAAM,MAAM,WAAA,CAAY,EAAE,IAAM,EAAA,MAAA,EAAQ,CAAE,CAAA,OAAA,CAAA;AAEhD,YAAA,MAAM,QAAkB,EAAC,CAAA;AAEzB,YAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAK,IAAA,GAAA,CAAI,UAAU,CAAK,EAAA,EAAA;AACtC,cAAA,MAAM,IAAO,GAAA,MAAM,GAAI,CAAA,OAAA,CAAQ,CAAC,CAAA,CAAA;AAChC,cAAM,MAAA,WAAA,GAAc,MAAM,IAAA,CAAK,cAAe,EAAA,CAAA;AAG9C,cAAM,KAAA,CAAA,IAAA;AAAA,gBACJ,WAAA,CAAY,MACT,GAAI,CAAA,CAAC,SAAU,IAAyB,CAAA,GAAG,CAC3C,CAAA,IAAA,CAAK,GAAG,CAAA;AAAA,eACb,CAAA;AAAA,aACF;AAEA,YAAO,OAAA,KAAA,CAAA;AAAA,WACT,CAAA,CAAA;AAAA,SAAA;AAEA,QAAO,OAAA,IAAI,OAAQ,CAAA,CAAC,OAAY,KAAA;AAC9B,UAAM,MAAA,MAAA,GAAS,IAAI,UAAW,EAAA,CAAA;AAE9B,UAAO,MAAA,CAAA,MAAA,GAAS,SAAgB,KAAkC,EAAA;AAAA,YAAA,OAAAA,SAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AA5C1E,cAAA,IAAA,EAAA,CAAA;AA6CU,cAAA,IAAI,EAAC,CAAA,EAAA,GAAA,KAAA,CAAM,MAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAc,MAAQ,CAAA,EAAA;AACzB,gBAAA,KAAA,CAAM,2BAA2B,CAAA,CAAA;AACjC,gBAAA,OAAA;AAAA,eACF;AAEA,cAAM,MAAA,MAAA,GAAsB,MAAM,MAAO,CAAA,MAAA,CAAA;AACzC,cAAM,MAAA,IAAA,GAAO,MAAM,yBAAA,CAA0B,MAAM,CAAA,CAAA;AAEnD,cAAa,UAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAA,GAAA,CAAA,CAAA;AACb,cAAA,OAAA,CAAQ,IAAI,CAAA,CAAA;AAAA,aACd,CAAA,CAAA;AAAA,WAAA,CAAA;AAEA,UAAA,MAAA,CAAO,kBAAkB,IAAI,CAAA,CAAA;AAAA,SAC9B,CAAA,CAAA;AAAA,OACH,CAAA,CAAA;AAAA,KAAA;AAAA,IAEA,gBAAgB,IAAY,EAAA;AAC1B,MAAA,OAAO,UAAU,IAAI,CAAA,CAAA;AAAA,KACvB;AAAA,GACC,EAAA,CAAA;AACL;;;;;;;;;;;;;;;;;;;;;;AC5DA,SAAwB,mBAAoB,CAAA;AAAA,EAC1C,SAAA;AACF,CAEG,EAAA;AACD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,GAAG,CAAA,CAAA;AAE5C,EAAA,MAAM,gBAAmB,GAAA,WAAA;AAAA,IACvB,CAAC,EAAsC,KAAA;AACrC,MAAA,WAAA,CAAY,CAAC,CAAA,CAAA;AAEb,MAAA,MAAM,iBAAiB,gBAAiB,EAAA,CAAA;AACxC,MAAA,MAAM,eAAe,YAAa,EAAA,CAAA;AAElC,MAAA,KAAA,CAAM,MAAY,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AAnBxB,QAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAoBQ,QAAA,MAAM,eAAyB,EAAC,CAAA;AAChC,QAAM,MAAA,KAAA,GAAQ,GAAG,MAAO,CAAA,KAAA,CAAA;AACxB,QAAA,MAAM,eAAc,EAAG,GAAA,CAAA,EAAA,GAAA,EAAA,CAAA,MAAA,CAAO,KAAV,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAiB,WAAjB,IAA2B,GAAA,EAAA,GAAA,CAAA,CAAA;AAC/C,QAAA,IAAI,KAAO,EAAA;AACT,UAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,WAAA,EAAa,CAAK,EAAA,EAAA;AACpC,YAAM,MAAA,IAAA,GAAO,MAAM,CAAC,CAAA,CAAA;AAEpB,YAAM,MAAA,cAAA,GAAiB,CAACC,SAAqB,KAAA;AAC3C,cAAA,WAAA;AAAA,gBACG,IAAI,WAAe,GAAA,GAAA,GACjB,CAAI,GAAA,WAAA,GAAe,OAAOA,SAAW,GAAA,GAAA,CAAA;AAAA,eAC1C,CAAA;AAAA,aACF,CAAA;AAEA,YAAA,IAAI,MAAS,GAAA,EAAA,CAAA;AACb,YAAI,IAAA,cAAA,CAAe,eAAgB,CAAA,IAAI,CAAG,EAAA;AACxC,cAAI,IAAA;AACF,gBAAA,MAAA,GAAA,CACE,MAAM,cAAe,CAAA,WAAA,CAAY,IAAM,EAAA,cAAc,GACrD,CAAC,CAAA,CAAA;AAAA,uBACI,CAAP,EAAA;AACA,gBAAA,OAAA,CAAQ,MAAM,CAAC,CAAA,CAAA;AAAA,eACjB;AAAA,aACS,MAAA,IAAA,YAAA,CAAa,eAAgB,CAAA,IAAI,CAAG,EAAA;AAC7C,cAAA,MAAA,GAAA,CACE,MAAM,YAAa,CAAA,WAAA,CAAY,MAAM,cAAc,CAAA,EACnD,KAAK,MAAM,CAAA,CAAA;AAIb,aACF;AAEA,YAAA,IAAI,MAAQ,EAAA;AACV,cAAA,YAAA,CAAa,KAAK,MAAM,CAAA,CAAA;AAAA,aAC1B;AAEA,YAAc,WAAA,CAAA,CAAA,CAAA,GAAI,CAAK,IAAA,WAAA,GAAe,GAAG,CAAA,CAAA;AAAA,WAC3C;AAAA,SACF;AACA,QAAA,SAAA,CAAU,YAAY,CAAA,CAAA;AAAA,OACrB,CAAA,GAAA,CAAA;AAEH,MAAA,EAAA,CAAG,OAAO,KAAQ,GAAA,EAAA,CAAA;AAAA,KACpB;AAAA,IACA,CAAC,SAAS,CAAA;AAAA,GACZ,CAAA;AAEA,EAAO,OAAA,EAAE,UAAU,gBAAiB,EAAA,CAAA;AACtC;;AC9Da,MAAA,YAAA,GAAe,CAAC,aAAkC,KAAA;AAC7D,EAAA,MAAM,cAAc,CAAC;AAAA,IACnB,gBAAA;AAAA,IACA,QAAA;AAAA,GAII,KAAA;AACJ,IAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA,CAAA;AAEhD,IAAA,MAAM,MAAS,GAAA,WAAA;AAAA,MACb,CAAC,IAAiB,KAAA;AAChB,QAAc,aAAA,CAAA,OAAA,CAAQ,IAAI,IAAI,CAAA,CAAA;AAC9B,QAAA,aAAA,CAAc,SAAS,GAAI,CAAA,IAAI,WAAY,CAAA,IAAA,EAAM,MAAM,CAAC,CAAA,CAAA;AAExD,QAAS,QAAA,CAAA,IAAI,CAAE,CAAA,OAAA,CAAQ,MAAM;AAC3B,UAAA,YAAA,CAAa,KAAK,CAAA,CAAA;AAAA,SACnB,CAAA,CAAA;AAAA,OACH;AAAA,MACA,CAAC,QAAQ,CAAA;AAAA,KACX,CAAA;AAEA,IAAA,MAAM,YAAe,GAAA,WAAA;AAAA,MACnB,CAAC,EAAmC,KAAA;AAClC,QAAA,EAAA,CAAG,cAAe,EAAA,CAAA;AAElB,QAAA,MAAM,WAAW,QAAS,CAAA,cAAA;AAAA,UACxB,aAAa,aAAc,CAAA,EAAA,CAAA,CAAA;AAAA,SAC7B,CAAA;AAEA,QAAA,IAAI,SAAS,KAAO,EAAA;AAClB,UAAA,YAAA,CAAa,IAAI,CAAA,CAAA;AACjB,UAAA,MAAA,CAAO,SAAS,KAAK,CAAA,CAAA;AAAA,SACvB;AAEA,QAAA,QAAA,CAAS,KAAM,EAAA,CAAA;AACf,QAAA,QAAA,CAAS,KAAQ,GAAA,EAAA,CAAA;AAAA,OACnB;AAAA,MACA,CAAC,MAAM,CAAA;AAAA,KACT,CAAA;AAEA,IAAM,MAAA,SAAA,GAAY,WAAY,CAAA,CAAC,EAAsB,KAAA;AAhDzD,MAAA,IAAA,EAAA,EAAA,EAAA,CAAA;AAiDM,MAAA,IAAK,GAAG,MAA+B,CAAA,QAAA;AAAU,QAAA,OAAA;AAEjD,MAAA,IAAI,EAAG,CAAA,IAAA,KAAS,OAAW,IAAA,CAAC,GAAG,QAAU,EAAA;AACvC,QAAA,EAAA,CAAG,cAAe,EAAA,CAAA;AAClB,QAAC,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,EAAA,CAAG,OACD,OAAQ,CAAA,MAAM,MADhB,IAEG,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,aAAA,CAAiC,6BAFpC,IAGG,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,EAAA,CAAA;AAAA,OACN;AAAA,KACF,EAAG,EAAE,CAAA,CAAA;AAEL,IAAA,MAAM,EAAE,QAAA,EAAU,gBAAiB,EAAA,GAAI,mBAAoB,CAAA;AAAA,MACzD,UAAU,OAAS,EAAA;AACjB,QACE,QAAS,CAAA,cAAA;AAAA,UACP,aAAa,aAAc,CAAA,EAAA,CAAA,CAAA;AAAA,SAE7B,CAAA,KAAA,GAAQ,OAAQ,CAAA,IAAA,CAAK,MAAM,CAAA,CAAA;AAAA,OAC/B;AAAA,KACD,CAAA,CAAA;AAED,IAAM,MAAA,eAAA,GAAkB,aAAa,QAAa,KAAA,GAAA,CAAA;AAElD,IAAA,4BACG,MAAK,EAAA,EAAA,QAAA,EAAU,cAAc,SAAU,EAAA,WAAA,EAAY,QAAO,EACzD,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,SAAA;AAAA,UACA,EAAA,EAAI,aAAa,aAAc,CAAA,EAAA,CAAA,CAAA;AAAA,UAC/B,QAAU,EAAA,eAAA;AAAA,SAAA;AAAA,OACZ;AAAA,sBACA,IAAA,CAAC,GAAI,EAAA,EAAA,SAAA,EAAU,uBACb,EAAA,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,IAAK,EAAA,MAAA;AAAA,YACL,EAAA,EAAI,kBAAkB,aAAc,CAAA,EAAA,CAAA,CAAA;AAAA,YACpC,EAAA,EAAI,EAAE,OAAA,EAAS,MAAO,EAAA;AAAA,YACtB,QAAU,EAAA,gBAAA;AAAA,WAAA;AAAA,SACZ;AAAA,wBACA,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,IAAK,EAAA,MAAA;AAAA,YACL,OAAQ,EAAA,cAAA;AAAA,YACR,WAAW,QAAa,KAAA,GAAA;AAAA,YACxB,QAAU,EAAA,SAAA;AAAA,YACV,SAAS,MAAM;AACb,cACE,QAAS,CAAA,cAAA;AAAA,gBACP,kBAAkB,aAAc,CAAA,EAAA,CAAA,CAAA;AAAA,gBAElC,KAAM,EAAA,CAAA;AAAA,aACV;AAAA,YACA,IAAK,EAAA,IAAA;AAAA,WAAA;AAAA,SACP;AAAA,wBACA,GAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,OAAQ,EAAA,SAAA;AAAA,YACR,IAAK,EAAA,QAAA;AAAA,YACL,SAAS,MAAM;AACb,cAAM,MAAA,YAAA,GAAe,aAAc,CAAA,OAAA,CAAQ,QAAS,EAAA,CAAA;AACpD,cAAI,IAAA,YAAA;AACF,gBACE,QAAS,CAAA,cAAA;AAAA,kBACP,aAAa,aAAc,CAAA,EAAA,CAAA,CAAA;AAAA,kBAE7B,KAAQ,GAAA,YAAA,CAAA;AAAA,aACd;AAAA,YACA,IAAK,EAAA,IAAA;AAAA,YACN,QAAA,EAAA,QAAA;AAAA,WAAA;AAAA,SAED;AAAA,wBACA,GAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,OAAQ,EAAA,SAAA;AAAA,YACR,IAAK,EAAA,QAAA;AAAA,YACL,SAAS,MAAM;AACb,cAAM,MAAA,YAAA,GAAe,aAAc,CAAA,OAAA,CAAQ,IAAK,EAAA,CAAA;AAChD,cACE,QAAS,CAAA,cAAA;AAAA,gBACP,aAAa,aAAc,CAAA,EAAA,CAAA,CAAA;AAAA,eAC7B,CACA,QAAQ,YAAgB,IAAA,IAAA,GAAA,YAAA,GAAA,EAAA,CAAA;AAAA,aAC5B;AAAA,YACA,IAAK,EAAA,IAAA;AAAA,YACN,QAAA,EAAA,WAAA;AAAA,WAAA;AAAA,SAED;AAAA,QACC,CAAC,gBACA,oBAAA,GAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,OAAQ,EAAA,SAAA;AAAA,YACR,IAAK,EAAA,QAAA;AAAA,YACL,OAAS,EAAA,MAAM,aAAc,CAAA,QAAA,CAAS,KAAM,EAAA;AAAA,YAC5C,IAAK,EAAA,IAAA;AAAA,YACN,QAAA,EAAA,QAAA;AAAA,WAAA;AAAA,SAED;AAAA,wBAEF,GAAA,CAAC,gBAAa,SAAW,EAAA,eAAA,EAAiB,MAAK,QAAS,EAAA,IAAA,EAAK,MAAK,QAElE,EAAA,QAAA,EAAA,CAAA;AAAA,OACF,EAAA,CAAA;AAAA,KACF,EAAA,CAAA,CAAA;AAAA,GAEJ,CAAA;AAEA,EAAA,WAAA,CAAY,WAAc,GAAA,EAAA,CAAA;AAE1B,EAAO,OAAA,WAAA,CAAA;AACT,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxJA,IAAA,SAAA,EAAA,eAAA,EAAA,oBAAA,CAAA;AAgBA,IAAI,KAAQ,GAAA,CAAA,CAAA;AAEL,MAAM,WAAY,CAAA;AAAA,EAYvB,WAAA,CAAmB,SAA2B,WAA2B,EAAA;AAAtD,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA,CAAA;AAA2B,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA,CAAA;AAC5C,IAAA,IAAA,CAAK,EAAK,GAAA,KAAA,EAAA,CAAA;AAEV,IAAA,IAAI,WAAgB,KAAA,UAAA;AAAY,MAAA,IAAA,CAAK,WAAc,GAAA,QAAA,CAAA;AACnD,IAAA,IAAI,OAAO,OAAY,KAAA,QAAA;AAAU,MAAK,IAAA,CAAA,OAAA,GAAU,IAAK,CAAA,YAAA,CAAa,OAAO,CAAA,CAAA;AAAA,GAC3E;AAAA,EAdA,aAAa,OAAiB,EAAA;AAC5B,IAAA,IAAI,MAAS,GAAA,OAAA,CAAA;AAEb,IAAS,MAAA,GAAA,MAAA,CAAO,UAAW,CAAA,UAAA,EAAY,UAAU,CAAA,CAAA;AACjD,IAAS,MAAA,GAAA,MAAA,CAAO,UAAW,CAAA,WAAA,EAAa,WAAW,CAAA,CAAA;AAEnD,IAAO,OAAA,MAAA,CAAA;AAAA,GACT;AAQF,CAAA;AAEO,MAAM,uBAAuB,YAGjC,CAAA;AAAA,EAQD,YAAmB,EAAY,EAAA;AAC7B,IAAM,KAAA,EAAA,CAAA;AADW,IAAA,IAAA,CAAA,EAAA,GAAA,EAAA,CAAA;AAPnB,IAA2B,YAAA,CAAA,IAAA,EAAA,SAAA,EAAA;AAAA,MACzB,IAAI,WAAA;AAAA,QACF,gPAAA;AAAA,QACA,QAAA;AAAA,OACF;AAAA,KACF,CAAA,CAAA;AAMA,IAAa,IAAA,CAAA,UAAA,GAAA;AAAA,MACX,gBAAgB,MAAM;AACpB,QAAM,MAAA,QAAA,GAAW,IAAK,CAAA,OAAA,CAAQ,OAAQ,EAAA,CAAA;AAEtC,QACE,uBAAA,GAAA;AAAA,UAAC,GAAA;AAAA,UACK,aAAA,CAAA,cAAA,CAAA,EAAA,EAAA,UAAA,CAAW,gCAAgC,CADhD,CAAA,EAAA;AAAA,YAEC,SAAU,EAAA,SAAA;AAAA,YAEV,QAAC,kBAAA,GAAA,CAAA,mBAAA,EAAA,EACE,QAAS,EAAA,QAAA,CAAA,GAAA,CAAI,CAAC,OACb,qBAAA,GAAA;AAAA,cAAC,GAAA;AAAA,cAAA,cAAA,CAAA;AAAA,gBACC,EAAG,EAAA,KAAA;AAAA,gBACH,SAAA,EAAW,oBAAoB,OAAQ,CAAA,WAAA,CAAA,CAAA;AAAA,eAAA,EAElC,OAAO,OAAA,CAAQ,OAAY,KAAA,QAAA,GAC5B,EAAE,uBAAyB,EAAA,EAAE,MAAQ,EAAA,OAAA,CAAQ,SAAU,EAAA,GACvD,EAAE,QAAA,EAAU,QAAQ,OAAQ,EAAA,CAAA;AAAA,cAH3B,OAAQ,CAAA,EAAA;AAAA,aAKhB,CACH,EAAA,CAAA;AAAA,WAAA,CAAA;AAAA,SACF,CAAA;AAAA,OAEJ;AAAA,MACA,QAAA,EAAU,aAAa,IAAI,CAAA;AAAA,KAC7B,CAAA;AAEA,IAAA,YAAA,CAAA,IAAA,EAAA,eAAA,EAA4B,EAAC,CAAA,CAAA;AAC7B,IAAuB,YAAA,CAAA,IAAA,EAAA,oBAAA,EAAA,CAAA,CAAA,CAAA,CAAA;AAEvB,IAAU,IAAA,CAAA,OAAA,GAAA;AAAA,MACR,GAAA,EAAK,CAAC,MAAmB,KAAA;AACvB,QAAA,YAAA,CAAA,IAAA,EAAK,oBAAuB,EAAA,CAAA,CAAA,CAAA,CAAA;AAE5B,QAAA,IAAI,WAAW,YAAK,CAAA,IAAA,EAAA,eAAA,CAAA,CAAgB,YAAK,CAAA,IAAA,EAAA,eAAA,CAAA,CAAgB,MAAM,CAAG,EAAA;AAChE,UAAA,OAAA;AAAA,SACF;AAEA,QAAA,YAAA,CAAA,IAAA,EAAK,eAAkB,EAAA;AAAA,UACrB,MAAA;AAAA,UACA,GAAG,mBAAK,eAAgB,CAAA,CAAA,KAAA;AAAA,YACtB,KAAK,GAAI,CAAA,CAAA,EAAG,YAAK,CAAA,IAAA,EAAA,eAAA,CAAA,CAAgB,SAAS,EAAE,CAAA;AAAA,WAC9C;AAAA,SACF,CAAA,CAAA;AAAA,OACF;AAAA,MACA,MAAM,MAAM;AACV,QAAA,IAAI,YAAK,CAAA,IAAA,EAAA,eAAA,CAAA,CAAgB,YAAK,CAAA,IAAA,EAAA,oBAAA,CAAA,GAAuB,CAAC,CAAA;AACpD,UAAA,OAAO,YAAK,CAAA,IAAA,EAAA,eAAA,CAAA,CAAuB,EAAL,gBAAA,CAAA,IAAA,EAAK,sBAAL,CAAyB,CAAA,CAAA;AAAA,aACpD;AACH,UAAA,YAAA,CAAA,IAAA,EAAK,oBAAuB,EAAA,CAAA,CAAA,CAAA,CAAA;AAC5B,UAAO,OAAA,EAAA,CAAA;AAAA,SACT;AAAA,OACF;AAAA,MACA,UAAU,MAAM;AACd,QAAA,IAAI,YAAK,CAAA,IAAA,EAAA,eAAA,CAAA,CAAgB,YAAK,CAAA,IAAA,EAAA,oBAAA,CAAA,GAAuB,CAAC,CAAG,EAAA;AACvD,UAAA,OAAO,YAAK,CAAA,IAAA,EAAA,eAAA,CAAA,CAAuB,EAAL,gBAAA,CAAA,IAAA,EAAK,sBAAL,CAAyB,CAAA,CAAA;AAAA,SACzD;AAAA,OACF;AAAA,MACA,SAAS,MAAM;AACb,QAAA,MAAM,CAAC,QAAU,EAAA,WAAW,CAAI,GAAA,QAAA,CAAwB,mBAAK,SAAS,CAAA,CAAA,CAAA;AAEtE,QAAA,SAAA,CAAU,MAAM;AACd,UAAA,OAAO,KAAK,EAAG,CAAA,YAAA,EAAc,CAACC,SAAa,KAAA,WAAA,CAAYA,SAAQ,CAAC,CAAA,CAAA;AAAA,SAClE,EAAG,EAAE,CAAA,CAAA;AAEL,QAAO,OAAA,QAAA,CAAA;AAAA,OACT;AAAA,KACF,CAAA;AAEA,IAAW,IAAA,CAAA,QAAA,GAAA;AAAA,MACT,GAAA,EAAK,CAAC,OAAyB,KAAA;AAC7B,QAAK,YAAA,CAAA,IAAA,EAAA,SAAA,CAAA,CAAU,KAAK,OAAO,CAAA,CAAA;AAC3B,QAAA,IAAA,CAAK,KAAK,YAAc,EAAA,CAAC,GAAG,YAAA,CAAA,IAAA,EAAK,UAAS,CAAC,CAAA,CAAA;AAAA,OAC7C;AAAA,MACA,OAAO,MAAM;AACX,QAAA,YAAA,CAAA,IAAA,EAAK,WAAY,EAAC,CAAA,CAAA;AAClB,QAAK,IAAA,CAAA,IAAA,CAAK,YAAc,EAAA,EAAE,CAAA,CAAA;AAAA,OAC5B;AAAA,KACF,CAAA;AAAA,GAhFA;AAiFF,CAAA;AA1FE,SAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AAsCA,eAAA,GAAA,IAAA,OAAA,EAAA,CAAA;AACA,oBAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../src/components/chat/AutoscrollContainer.tsx","../src/files/ocr/getImageOcrMaker.ts","../src/files/pdf/getPdfReader.ts","../src/components/chat/files/useHandleFileUpload.ts","../src/components/chat/messages/ChatMessage.tsx","../src/components/chat/Textarea.tsx","../src/components/chat/ChatController.tsx","../src/components/chat/messages/MultipleChoiceMessage.tsx"],"sourcesContent":["import { getVariant } from '@apia/theme';\nimport { ReactNode, useCallback, useRef } from 'react';\nimport { Box } from '@apia/theme';\n\nexport const AutoscrollContainer = ({ children }: { children: ReactNode }) => {\n const observer = useRef<MutationObserver | null>(null);\n const unsuscribe = useRef<(() => void) | null>(null);\n const isFullScrolled = useRef(false);\n const hasInited = useRef(false);\n\n const ref = useCallback((el: HTMLElement) => {\n if (!el) return;\n\n if (!hasInited.current) {\n hasInited.current = true;\n el.scrollTo({\n top: el.getBoundingClientRect().height,\n behavior: 'auto',\n });\n isFullScrolled.current = true;\n }\n\n observer.current?.disconnect();\n unsuscribe.current?.();\n\n observer.current = new MutationObserver(([mutation]) => {\n if (\n mutation &&\n mutation.target instanceof HTMLElement &&\n mutation.target === el\n ) {\n if (\n isFullScrolled.current &&\n mutation.target.scrollTop !==\n mutation.target.scrollHeight - mutation.target.offsetHeight\n ) {\n // eslint-disable-next-line no-param-reassign\n mutation.target.scrollTop = mutation.target.scrollHeight;\n }\n }\n });\n observer.current.observe(el, { childList: true, subtree: true });\n\n const handleScroll = (ev: Event) => {\n if (ev.target === el && el instanceof HTMLElement) {\n setTimeout(() => {\n isFullScrolled.current =\n Math.abs(el.scrollTop - (el.scrollHeight - el.offsetHeight)) < 150;\n }, 100);\n }\n };\n el.addEventListener('scroll', handleScroll);\n unsuscribe.current = () => {\n el.removeEventListener('scroll', handleScroll);\n };\n }, []);\n\n return (\n <Box\n {...getVariant('layout.common.components.autoscrollContainer')}\n className=\"autoscrollContainer\"\n ref={ref}\n >\n {children}\n </Box>\n );\n};\n","import { FileProcessor } from '../FileProcessor';\n\nexport function isImageFile(file: File) {\n const IMAGE_EXTENSIONS = [\n 'jpg',\n 'jpeg',\n 'png',\n 'gif',\n 'bmp',\n 'webp',\n 'tiff',\n 'svg',\n 'jfif',\n ];\n\n return IMAGE_EXTENSIONS.includes(file.name.split('.').pop() as string);\n}\n\nexport default function getImageOcrMaker(lang: 'eng' | 'spa') {\n return new (class ImageOcrMaker implements FileProcessor {\n async processFile(\n file: File,\n onProgress?: (progress: number) => unknown,\n ): Promise<string[]> {\n const tesseract = await import('tesseract.js');\n\n const worker = await tesseract.createWorker(lang, 1, {\n logger(arg) {\n onProgress?.(arg.progress * 100);\n },\n });\n\n const result = (await worker.recognize(file)).data.text;\n return [result];\n }\n\n willProcessFile(file: File) {\n return isImageFile(file);\n }\n })();\n}\n","import { FileProcessor } from '../FileProcessor';\n\nexport function isPdfFile(file: File) {\n const IMAGE_EXTENSIONS = ['pdf'];\n\n return IMAGE_EXTENSIONS.includes(file.name.split('.').pop() as string);\n}\n\nexport default function getPdfReader() {\n return new (class PdfReader implements FileProcessor {\n async processFile(\n file: File,\n onProgress?: (progress: number) => void,\n ): Promise<string[]> {\n onProgress?.(0);\n const { getDocument, GlobalWorkerOptions } = await import('pdfjs-dist');\n\n async function getPdfTextFromArrayBuffer(\n buffer: ArrayBuffer,\n ): Promise<string[]> {\n GlobalWorkerOptions.workerSrc = '../includes/pdf.worker.min.40189.js';\n\n const pdf = await getDocument({ data: buffer }).promise;\n\n const pages: string[] = [];\n\n for (let i = 1; i <= pdf.numPages; i++) {\n const page = await pdf.getPage(i);\n const textContent = await page.getTextContent();\n\n // Concatenar texto de cada página\n pages.push(\n textContent.items\n .map((item) => (item as { str: string }).str)\n .join(' '),\n );\n }\n\n return pages;\n }\n\n return new Promise((resolve) => {\n const reader = new FileReader();\n\n reader.onload = async function (event: ProgressEvent<FileReader>) {\n if (!event.target?.result) {\n alert('Error al leer el archivo.');\n return;\n }\n\n const buffer: ArrayBuffer = event.target.result as ArrayBuffer;\n const text = await getPdfTextFromArrayBuffer(buffer);\n\n onProgress?.(100);\n resolve(text);\n };\n\n reader.readAsArrayBuffer(file);\n });\n }\n\n willProcessFile(file: File) {\n return isPdfFile(file);\n }\n })();\n}\n","/* eslint-disable no-param-reassign */\nimport { ChangeEvent, useCallback, useState } from 'react';\nimport getImageOcrMaker from '../../../files/ocr/getImageOcrMaker';\nimport getPdfReader from '../../../files/pdf/getPdfReader';\n\nexport default function useHandleFileUpload({\n onContent,\n}: {\n onContent: (content: string[]) => unknown;\n}) {\n const [progress, setProgress] = useState(100);\n\n const handleFileUpload = useCallback(\n (ev: ChangeEvent<HTMLInputElement>) => {\n setProgress(0);\n\n const imageProcessor = getImageOcrMaker();\n const pdfProcessor = getPdfReader();\n\n void (async () => {\n const obtainedText: string[] = [];\n const files = ev.target.files;\n const filesLength = ev.target.files?.length ?? 0;\n if (files) {\n for (let i = 0; i < filesLength; i++) {\n const file = files[i];\n\n const handleProgress = (progress: number) => {\n setProgress(\n (i / filesLength) * 100 +\n (1 / filesLength) * 100 * (progress / 100),\n );\n };\n\n let result = '';\n if (imageProcessor.willProcessFile(file)) {\n try {\n result = (\n await imageProcessor.processFile(file, handleProgress)\n )[0];\n } catch (e) {\n console.error(e);\n }\n } else if (pdfProcessor.willProcessFile(file)) {\n result = (\n await pdfProcessor.processFile(file, handleProgress)\n ).join('\\n\\n');\n try {\n } catch (e) {\n console.error(e);\n }\n }\n\n if (result) {\n obtainedText.push(result);\n }\n\n setProgress(((i + 1) / filesLength) * 100);\n }\n }\n onContent(obtainedText);\n })();\n\n ev.target.value = '';\n },\n [onContent],\n );\n\n return { progress, handleFileUpload };\n}\n","import { ReactNode } from 'react';\nimport { TMessageType } from '../ChatController';\n\nlet maxId = 0;\n\nexport class ChatMessage {\n id: number;\n #message: ReactNode;\n\n parseMessage(message: string) {\n let result = message;\n\n result = result.replaceAll('[strong]', '<strong>');\n result = result.replaceAll('[/strong]', '</strong>');\n\n return result;\n }\n\n constructor(message: ReactNode, public messageType: TMessageType) {\n this.id = maxId++;\n this.#message = message;\n\n if (messageType === 'response') this.messageType = 'system';\n if (typeof message === 'string') this.#message = this.parseMessage(message);\n }\n\n get message() {\n return this.#message;\n }\n}\n","/* eslint-disable no-param-reassign */\nimport { FormEvent, KeyboardEvent, useCallback, useState } from 'react';\nimport { ChatController } from './ChatController';\nimport { IconButton, SimpleButton } from '@apia/components';\nimport { Box, Textarea } from '@apia/theme';\nimport useHandleFileUpload from './files/useHandleFileUpload';\nimport { getLabel } from '@apia/util';\nimport { ChatMessage } from './messages/ChatMessage';\n\nexport const makeTextarea = (gptController: ChatController) => {\n const NewTextarea = ({\n hideDeleteButton,\n isLoading: outIsLoading,\n onSubmit,\n preventAppendUserMessages,\n }: {\n hideDeleteButton?: boolean;\n isLoading?: boolean;\n onSubmit: (text: string) => Promise<void>;\n preventAppendUserMessages?: boolean;\n }) => {\n const [isLoading, setIsLoading] = useState(false);\n\n const submit = useCallback(\n (text: string) => {\n if (preventAppendUserMessages !== true)\n gptController.messages.add(new ChatMessage(text, 'user'));\n\n gptController.history.add(text);\n\n onSubmit(text).finally(() => {\n setIsLoading(false);\n });\n },\n [onSubmit, preventAppendUserMessages],\n );\n\n const handleSubmit = useCallback(\n (ev: FormEvent<HTMLFormElement>) => {\n ev.preventDefault();\n //setIsLoading(true);\n const textarea = document.getElementById(\n `GPTMessage${gptController.id}`,\n ) as HTMLTextAreaElement;\n\n if (textarea.value) {\n setIsLoading(true);\n submit(textarea.value);\n }\n\n textarea.focus();\n textarea.value = '';\n },\n [submit],\n );\n\n const onKeyDown = useCallback((ev: KeyboardEvent) => {\n if ((ev.target as HTMLTextAreaElement).readOnly) return;\n\n if (ev.code === 'Enter' && !ev.shiftKey) {\n ev.preventDefault();\n (ev.target as HTMLElement)\n .closest('form')\n ?.querySelector<HTMLButtonElement>('button[type=\"submit\"]')\n ?.click();\n }\n }, []);\n\n const { progress, handleFileUpload } = useHandleFileUpload({\n onContent(content) {\n (\n document.getElementById(\n `GPTMessage${gptController.id}`,\n ) as HTMLTextAreaElement\n ).value = content.join('\\n\\n');\n },\n });\n\n const actualIsLoading = isLoading || progress !== 100 || outIsLoading;\n\n return (\n <form onSubmit={handleSubmit} className=\"gpt__form\" action=\"\">\n <Textarea\n onKeyDown={onKeyDown}\n id={`GPTMessage${gptController.id}`}\n readOnly={actualIsLoading}\n />\n <Box className=\"gpt__buttonsContainer\">\n <input\n type=\"file\"\n id={`gptUploadFile__${gptController.id}`}\n sx={{ display: 'none' }}\n onChange={handleFileUpload}\n />\n <IconButton\n title={getLabel('btnUploadFile').text}\n icon=\"File\"\n variant=\"icon-outline\"\n disabled={actualIsLoading}\n onClick={() => {\n (\n document.getElementById(\n `gptUploadFile__${gptController.id}`,\n ) as HTMLElement\n ).click();\n }}\n size=\"Lg\"\n />\n <SimpleButton\n title={getLabel('btnAiPrevious').tooltip}\n variant=\"outline\"\n type=\"button\"\n onClick={() => {\n const historyValue = gptController.history.previous();\n if (historyValue)\n (\n document.getElementById(\n `GPTMessage${gptController.id}`,\n ) as HTMLTextAreaElement\n ).value = historyValue;\n }}\n size=\"sm\"\n >\n {getLabel('btnAiPrevious').text}\n </SimpleButton>\n <SimpleButton\n title={getLabel('btnAiNext').tooltip}\n variant=\"outline\"\n type=\"button\"\n onClick={() => {\n const historyValue = gptController.history.next();\n (\n document.getElementById(\n `GPTMessage${gptController.id}`,\n ) as HTMLTextAreaElement\n ).value = historyValue ?? '';\n }}\n size=\"sm\"\n >\n {getLabel('btnAiNext').text}\n </SimpleButton>\n {!hideDeleteButton && (\n <SimpleButton\n title={getLabel('btnAiDelete').tooltip}\n variant=\"outline\"\n type=\"button\"\n onClick={() => gptController.messages.clear()}\n size=\"sm\"\n >\n {getLabel('btnAiDelete').text}\n </SimpleButton>\n )}\n <SimpleButton\n title={getLabel('btnAiSend').tooltip}\n isLoading={actualIsLoading}\n type=\"submit\"\n size=\"sm\"\n >\n {getLabel('btnAiSend').text}\n </SimpleButton>\n </Box>\n </form>\n );\n };\n\n NewTextarea.displayName = '';\n\n return NewTextarea;\n};\n","/* eslint-disable no-param-reassign */\nimport { getVariant } from '@apia/theme';\nimport { EventEmitter } from '@apia/util';\nimport { useEffect, useState } from 'react';\nimport { Box } from '@apia/theme';\nimport { AutoscrollContainer } from './AutoscrollContainer';\nimport { makeTextarea } from './Textarea';\nimport { ChatMessage } from './messages/ChatMessage';\n\nexport type TMessageType =\n | 'user'\n | 'system'\n | 'warning'\n | 'error'\n | 'information'\n | 'response'\n | 'multipleChoice';\n\nexport class ChatController extends EventEmitter<{\n listChange: ChatMessage[];\n messageSubmited?: string;\n}> {\n #messages: ChatMessage[] = [];\n\n constructor(\n public id: string,\n welcomeMessage = 'Bienvenido, esta interfaz intenta ofrecer una forma alternativa de acceso a las distintas acciones disponibles en el sistema. Interactúa directamente desde el chat o escribe [strong]ayuda[/strong] para conocer las opciones disponibles.',\n ) {\n super();\n if (!welcomeMessage)\n this.#messages.push(new ChatMessage(welcomeMessage, 'system'));\n }\n\n components = {\n MessageHistory: () => {\n const messages = this.history.useList();\n\n return (\n <Box\n {...getVariant('layout.common.components.chat')}\n className=\"history\"\n >\n <AutoscrollContainer>\n {messages.map((current) => (\n <Box\n as=\"pre\"\n className={`history__message ${current.messageType}`}\n key={current.id}\n {...(typeof current.message === 'string'\n ? { dangerouslySetInnerHTML: { __html: current.message } }\n : { children: current.message })}\n />\n ))}\n </AutoscrollContainer>\n </Box>\n );\n },\n Textarea: makeTextarea(this),\n };\n\n #promptsHistory: string[] = [];\n #currentHistoryIndex = -1;\n\n history = {\n add: (prompt: string) => {\n this.#currentHistoryIndex = -1;\n\n if (prompt === this.#promptsHistory[this.#promptsHistory.length]) {\n return;\n }\n\n this.#promptsHistory = [\n prompt,\n ...this.#promptsHistory.slice(\n Math.max(0, this.#promptsHistory.length - 10),\n ),\n ];\n },\n next: () => {\n if (this.#promptsHistory[this.#currentHistoryIndex - 1])\n return this.#promptsHistory[--this.#currentHistoryIndex];\n else {\n this.#currentHistoryIndex = -1;\n return '';\n }\n },\n previous: () => {\n if (this.#promptsHistory[this.#currentHistoryIndex + 1]) {\n return this.#promptsHistory[++this.#currentHistoryIndex];\n }\n },\n useList: () => {\n const [messages, setMessages] = useState<ChatMessage[]>(this.#messages);\n\n useEffect(() => {\n return this.on('listChange', (messages) => setMessages(messages));\n }, []);\n\n return messages;\n },\n };\n\n messages = {\n add: (message: ChatMessage) => {\n this.#messages.push(message);\n this.emit('listChange', [...this.#messages]);\n },\n clear: () => {\n this.#messages = [];\n this.emit('listChange', []);\n },\n };\n}\n","import { ApiaUtil } from '@apia/components';\nimport { SimpleButton } from '@apia/components';\nimport { ChatMessage } from './ChatMessage';\nimport { Box, Paragraph } from '@apia/theme';\nimport { ReactElement } from 'react';\n\nexport type TMultipleChoiceMessageOption<\n OptionProps extends Record<string, unknown>,\n> = {\n label: string;\n url: string;\n additionalProps?: OptionProps;\n};\n\nexport class MultipleChoiceMessage<\n OptionProps extends Record<string, unknown>,\n> extends ChatMessage {\n constructor(\n private question: string,\n private options: TMultipleChoiceMessageOption<OptionProps>[],\n private Renderer?: (props: {\n item: TMultipleChoiceMessageOption<OptionProps>;\n }) => ReactElement,\n ) {\n super('', 'multipleChoice');\n }\n\n get message() {\n const Renderer = this.Renderer;\n\n return (\n <Box className=\"multipleChoiceMessage\">\n <Paragraph>{this.question}</Paragraph>\n {Renderer ? (\n <>\n {this.options.map((item) => (\n <Renderer item={item} key={item.url} />\n ))}\n </>\n ) : (\n <Box as=\"ul\">\n {this.options.map((current) => (\n <li key={current.label}>\n <SimpleButton\n onClick={() => {\n new ApiaUtil().tabs.openTab(current.label, current.url);\n }}\n >\n {current.label}\n </SimpleButton>\n </li>\n ))}\n </Box>\n )}\n </Box>\n );\n }\n}\n"],"names":["__spreadProps","__spreadValues","__async","progress","__privateAdd","__privateSet","__privateGet","messages"],"mappings":"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"}
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "sideEffects": false,
7
7
  "main": "./dist/index.js",
8
8
  "types": "./dist/index.d.ts",
9
- "version": "0.3.6",
9
+ "version": "1.0.1",
10
10
  "scripts": {
11
11
  "build": "rollup -c rollup.config.esb.mjs",
12
12
  "buildDev": "rollup -c rollup.config.esb.mjs --dev",
@@ -39,11 +39,11 @@
39
39
  "directory": "packages/initiator"
40
40
  },
41
41
  "dependencies": {
42
- "@apia/components": "^0.3.6",
43
- "@apia/theme": "^0.3.6",
44
- "@apia/util": "^0.3.6",
42
+ "@apia/components": "^1.0.1",
43
+ "@apia/theme": "^1.0.1",
44
+ "@apia/util": "^1.0.1",
45
45
  "pdfjs-dist": "^4.0.189",
46
46
  "tesseract.js": "^5.0.3"
47
47
  },
48
- "gitHead": "c79e6173bbcd97539bec49c958374a0dc7e9da6f"
48
+ "gitHead": "a2430a210dacdfec4869e14b8fd438253b9c16a9"
49
49
  }