@apia/ai 0.3.4 → 0.3.6
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/index.d.ts +2 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
- package/.eslintrc.cjs +0 -128
- package/rollup.config.esb.mjs +0 -56
package/dist/index.d.ts
CHANGED
|
@@ -20,7 +20,8 @@ declare class ChatController extends EventEmitter<{
|
|
|
20
20
|
components: {
|
|
21
21
|
MessageHistory: () => react.JSX.Element;
|
|
22
22
|
Textarea: {
|
|
23
|
-
({ onSubmit, }: {
|
|
23
|
+
({ hideDeleteButton, onSubmit, }: {
|
|
24
|
+
hideDeleteButton?: boolean | undefined;
|
|
24
25
|
onSubmit: (text: string) => Promise<void>;
|
|
25
26
|
}): react.JSX.Element;
|
|
26
27
|
displayName: string;
|
package/dist/index.js
CHANGED
|
@@ -158,7 +158,7 @@ function getPdfReader() {
|
|
|
158
158
|
const { getDocument, GlobalWorkerOptions } = yield import('pdfjs-dist');
|
|
159
159
|
function getPdfTextFromArrayBuffer(buffer) {
|
|
160
160
|
return __async$1(this, null, function* () {
|
|
161
|
-
GlobalWorkerOptions.workerSrc = "
|
|
161
|
+
GlobalWorkerOptions.workerSrc = "../includes/pdf.worker.min.40189.js";
|
|
162
162
|
const pdf = yield getDocument({ data: buffer }).promise;
|
|
163
163
|
const pages = [];
|
|
164
164
|
for (let i = 1; i <= pdf.numPages; i++) {
|
|
@@ -265,6 +265,7 @@ function useHandleFileUpload({
|
|
|
265
265
|
|
|
266
266
|
const makeTextarea = (gptController) => {
|
|
267
267
|
const NewTextarea = ({
|
|
268
|
+
hideDeleteButton,
|
|
268
269
|
onSubmit
|
|
269
270
|
}) => {
|
|
270
271
|
const [isLoading, setIsLoading] = useState(false);
|
|
@@ -310,7 +311,7 @@ const makeTextarea = (gptController) => {
|
|
|
310
311
|
}
|
|
311
312
|
});
|
|
312
313
|
const actualIsLoading = isLoading || progress !== 100;
|
|
313
|
-
return /* @__PURE__ */ jsxs("form", { onSubmit: handleSubmit, action: "", children: [
|
|
314
|
+
return /* @__PURE__ */ jsxs("form", { onSubmit: handleSubmit, className: "gpt__form", action: "", children: [
|
|
314
315
|
/* @__PURE__ */ jsx(
|
|
315
316
|
Textarea,
|
|
316
317
|
{
|
|
@@ -375,7 +376,7 @@ const makeTextarea = (gptController) => {
|
|
|
375
376
|
children: "Siguiente"
|
|
376
377
|
}
|
|
377
378
|
),
|
|
378
|
-
/* @__PURE__ */ jsx(
|
|
379
|
+
!hideDeleteButton && /* @__PURE__ */ jsx(
|
|
379
380
|
SimpleButton,
|
|
380
381
|
{
|
|
381
382
|
variant: "outline",
|
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 = 'react/includes/pdf.worker.min.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 onSubmit,\n }: {\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} 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 <SimpleButton\n variant=\"outline\"\n type=\"button\"\n onClick={() => gptController.messages.clear()}\n size=\"sm\"\n >\n Borrar\n </SimpleButton>\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":"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"}
|
|
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":"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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.
|
|
9
|
+
"version": "0.3.6",
|
|
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.
|
|
43
|
-
"@apia/theme": "^0.3.
|
|
44
|
-
"@apia/util": "^0.3.
|
|
42
|
+
"@apia/components": "^0.3.6",
|
|
43
|
+
"@apia/theme": "^0.3.6",
|
|
44
|
+
"@apia/util": "^0.3.6",
|
|
45
45
|
"pdfjs-dist": "^4.0.189",
|
|
46
46
|
"tesseract.js": "^5.0.3"
|
|
47
47
|
},
|
|
48
|
-
"gitHead": "
|
|
48
|
+
"gitHead": "c79e6173bbcd97539bec49c958374a0dc7e9da6f"
|
|
49
49
|
}
|
package/.eslintrc.cjs
DELETED
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
module.exports = {
|
|
2
|
-
env: {
|
|
3
|
-
browser: true,
|
|
4
|
-
node: true
|
|
5
|
-
},
|
|
6
|
-
overrides: [
|
|
7
|
-
{
|
|
8
|
-
extends: [
|
|
9
|
-
'plugin:react/recommended',
|
|
10
|
-
'plugin:prettier/recommended',
|
|
11
|
-
'plugin:@typescript-eslint/recommended',
|
|
12
|
-
'plugin:@typescript-eslint/recommended-requiring-type-checking',
|
|
13
|
-
'plugin:@typescript-eslint/strict',
|
|
14
|
-
'plugin:comment-length/recommended',
|
|
15
|
-
],
|
|
16
|
-
files: ['*.ts', '*.tsx'],
|
|
17
|
-
parserOptions: {
|
|
18
|
-
project: `${__dirname}/tsconfig.json`,
|
|
19
|
-
},
|
|
20
|
-
rules: {
|
|
21
|
-
"@typescript-eslint/no-extraneous-class": 0,
|
|
22
|
-
"no-undef": "off",
|
|
23
|
-
"react/display-name": 0,
|
|
24
|
-
"@typescript-eslint/no-unsafe-assignment": 0,
|
|
25
|
-
"@typescript-eslint/no-misused-promises": 0,
|
|
26
|
-
"import/export": 0,
|
|
27
|
-
"@typescript-eslint/no-invalid-void-type": 0,
|
|
28
|
-
"no-redeclare": 0,
|
|
29
|
-
"no-restricted-imports": ["error", {
|
|
30
|
-
"patterns": ["dist"]
|
|
31
|
-
}],
|
|
32
|
-
"import/no-default-export": 0,
|
|
33
|
-
"import/no-cycle": 0,
|
|
34
|
-
"import/no-unresolved": "error",
|
|
35
|
-
curly: 0,
|
|
36
|
-
"comment-length/limit-single-line-comments": [
|
|
37
|
-
"error",
|
|
38
|
-
{
|
|
39
|
-
"maxLength": 80,
|
|
40
|
-
"ignoreUrls": true
|
|
41
|
-
}
|
|
42
|
-
],
|
|
43
|
-
"no-shadow": 0,
|
|
44
|
-
"brace-style": 0,
|
|
45
|
-
"comment-length/limit-multi-line-comments": [
|
|
46
|
-
"warn",
|
|
47
|
-
{
|
|
48
|
-
"maxLength": 80,
|
|
49
|
-
"ignoreUrls": true
|
|
50
|
-
}
|
|
51
|
-
],
|
|
52
|
-
'nonblock-statement-body-position': 0,
|
|
53
|
-
'@typescript-eslint/no-unnecessary-condition': 0,
|
|
54
|
-
'no-use-before-define': 0,
|
|
55
|
-
'no-plusplus': 0,
|
|
56
|
-
'react/prop-types': 0,
|
|
57
|
-
'import/no-unresolved': 0,
|
|
58
|
-
'import/no-extraneous-dependencies': 0,
|
|
59
|
-
indent: 'off',
|
|
60
|
-
quotes: 0,
|
|
61
|
-
semi: ['error', 'always'],
|
|
62
|
-
'react-hooks/rules-of-hooks': 'error',
|
|
63
|
-
'react-hooks/exhaustive-deps': 'warn',
|
|
64
|
-
'no-console': 'off',
|
|
65
|
-
'prefer-object-spread': 'off',
|
|
66
|
-
'no-unused-vars': 'off',
|
|
67
|
-
'@typescript-eslint/no-unused-vars': ["error", { "ignoreRestSiblings": true }],
|
|
68
|
-
'wrap-iife': 0,
|
|
69
|
-
'import/extensions': ['error', 'never'],
|
|
70
|
-
'no-void': 'off',
|
|
71
|
-
'no-restricted-globals': ['error', 'event'],
|
|
72
|
-
'@typescript-eslint/no-unnecessary-type-assertion': 'off',
|
|
73
|
-
'@typescript-eslint/no-non-null-assertion': 'off',
|
|
74
|
-
'react/react-in-jsx-scope': 'off',
|
|
75
|
-
'class-methods-use-this': 'off',
|
|
76
|
-
'@typescript-eslint/non-nullable-type-assertion-style': 'off',
|
|
77
|
-
'linebreak-style': ['off'],
|
|
78
|
-
'no-dupe-class-members': 'off',
|
|
79
|
-
"@typescript-eslint/consistent-type-definitions": 0,
|
|
80
|
-
"@typescript-eslint/consistent-indexed-object-style": 0,
|
|
81
|
-
"arrow-body-style": 0,
|
|
82
|
-
'no-param-reassign': [
|
|
83
|
-
'error',
|
|
84
|
-
{
|
|
85
|
-
props: true,
|
|
86
|
-
ignorePropertyModificationsFor: ['state'],
|
|
87
|
-
},
|
|
88
|
-
],
|
|
89
|
-
'import/prefer-default-export': 'off',
|
|
90
|
-
'no-confusing-arrow': 'off',
|
|
91
|
-
'implicit-arrow-linebreak': 'off',
|
|
92
|
-
'function-paren-newline': 'off',
|
|
93
|
-
'object-curly-newline': 'off',
|
|
94
|
-
'no-underscore-dangle': 'off',
|
|
95
|
-
'operator-linebreak': 'off',
|
|
96
|
-
'@typescript-eslint/no-empty-function': 'off',
|
|
97
|
-
'import/no-relative-packages': 'off',
|
|
98
|
-
'max-len': 0, /* [ 'error',
|
|
99
|
-
{
|
|
100
|
-
ignoreComments: true,
|
|
101
|
-
ignoreStrings: true,
|
|
102
|
-
ignoreTemplateLiterals: true,
|
|
103
|
-
ignoreRegExpLiterals: true,
|
|
104
|
-
},
|
|
105
|
-
] */
|
|
106
|
-
'prettier/prettier': [
|
|
107
|
-
'error',
|
|
108
|
-
{
|
|
109
|
-
endOfLine: 'auto',
|
|
110
|
-
singleQuote: true,
|
|
111
|
-
trailingComma: 'all',
|
|
112
|
-
},
|
|
113
|
-
],
|
|
114
|
-
'no-multiple-empty-lines': 'off',
|
|
115
|
-
'react/no-unknown-property': ['error', { ignore: ['sx'] }],
|
|
116
|
-
},
|
|
117
|
-
},
|
|
118
|
-
],
|
|
119
|
-
parser: '@typescript-eslint/parser',
|
|
120
|
-
plugins: ['react-hooks', '@typescript-eslint', "import"],
|
|
121
|
-
ignorePatterns: ['dist', 'lib', 'node_modules'],
|
|
122
|
-
settings: {
|
|
123
|
-
react: {
|
|
124
|
-
version: 'detect',
|
|
125
|
-
},
|
|
126
|
-
},
|
|
127
|
-
root: true,
|
|
128
|
-
};
|
package/rollup.config.esb.mjs
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import bundleAnalyzer from "rollup-plugin-bundle-analyzer";
|
|
2
|
-
import commonjs from '@rollup/plugin-commonjs';
|
|
3
|
-
import dts from "rollup-plugin-dts";
|
|
4
|
-
import esbuild from 'rollup-plugin-esbuild';
|
|
5
|
-
import fs from 'fs';
|
|
6
|
-
|
|
7
|
-
const entriesFile = './entries.json';
|
|
8
|
-
let localEntries = ['src/index.ts'];
|
|
9
|
-
if (fs.existsSync(entriesFile)) {
|
|
10
|
-
localEntries = JSON.parse(
|
|
11
|
-
fs.readFileSync(entriesFile).toString(),
|
|
12
|
-
);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
const isDevelopment = process.argv.includes('--dev');
|
|
16
|
-
const shouldWatch = process.argv.includes('--watch');
|
|
17
|
-
const shouldAnalyze = process.argv.includes('--analyze');
|
|
18
|
-
|
|
19
|
-
const onwarn = (current, warn) => {
|
|
20
|
-
if (!['UNRESOLVED_IMPORT', 'UNKNOWN_OPTION'].includes(current.code))
|
|
21
|
-
warn(current);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export default [{
|
|
25
|
-
input: localEntries,
|
|
26
|
-
onwarn,
|
|
27
|
-
watch: shouldWatch,
|
|
28
|
-
output: [{
|
|
29
|
-
dir: 'dist',
|
|
30
|
-
format: 'es',
|
|
31
|
-
sourcemap: isDevelopment
|
|
32
|
-
}],
|
|
33
|
-
plugins: [
|
|
34
|
-
dts()
|
|
35
|
-
].filter(Boolean),
|
|
36
|
-
}, {
|
|
37
|
-
input: localEntries,
|
|
38
|
-
onwarn,
|
|
39
|
-
watch: shouldWatch,
|
|
40
|
-
output: [{
|
|
41
|
-
dir: 'dist',
|
|
42
|
-
format: 'es',
|
|
43
|
-
sourcemap: isDevelopment
|
|
44
|
-
}],
|
|
45
|
-
plugins: [
|
|
46
|
-
commonjs(),
|
|
47
|
-
esbuild({
|
|
48
|
-
include: /\.[jt]sx?$/,
|
|
49
|
-
exclude: /node_modules/,
|
|
50
|
-
sourceMap: isDevelopment,
|
|
51
|
-
minify: false,
|
|
52
|
-
tsconfig: 'tsconfig.json'
|
|
53
|
-
}),
|
|
54
|
-
shouldAnalyze && bundleAnalyzer()
|
|
55
|
-
].filter(Boolean),
|
|
56
|
-
}];
|