@apia/ai 2.0.7 → 2.0.9
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 +61 -3
- package/dist/index.js +605 -3
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
- package/dist/components/chat/AutoscrollContainer.js +0 -58
- package/dist/components/chat/AutoscrollContainer.js.map +0 -1
- package/dist/components/chat/ChatController.d.ts +0 -38
- package/dist/components/chat/ChatController.d.ts.map +0 -1
- package/dist/components/chat/ChatController.js +0 -124
- package/dist/components/chat/ChatController.js.map +0 -1
- package/dist/components/chat/Textarea.js +0 -218
- package/dist/components/chat/Textarea.js.map +0 -1
- package/dist/components/chat/files/useHandleFileUpload.js +0 -61
- package/dist/components/chat/files/useHandleFileUpload.js.map +0 -1
- package/dist/components/chat/messages/ChatMessage.d.ts +0 -14
- package/dist/components/chat/messages/ChatMessage.d.ts.map +0 -1
- package/dist/components/chat/messages/ChatMessage.js +0 -52
- package/dist/components/chat/messages/ChatMessage.js.map +0 -1
- package/dist/components/chat/messages/MultipleChoiceMessage.d.ts +0 -21
- package/dist/components/chat/messages/MultipleChoiceMessage.d.ts.map +0 -1
- package/dist/components/chat/messages/MultipleChoiceMessage.js +0 -38
- package/dist/components/chat/messages/MultipleChoiceMessage.js.map +0 -1
- package/dist/files/ocr/getImageOcrMaker.js +0 -34
- package/dist/files/ocr/getImageOcrMaker.js.map +0 -1
- package/dist/files/pdf/getPdfReader.js +0 -45
- package/dist/files/pdf/getPdfReader.js.map +0 -1
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { useState, useCallback } from 'react';
|
|
2
|
-
import getImageOcrMaker, { isImageFile } from '../../../files/ocr/getImageOcrMaker.js';
|
|
3
|
-
import getPdfReader, { isPdfFile } from '../../../files/pdf/getPdfReader.js';
|
|
4
|
-
|
|
5
|
-
class WrongFormatError extends Error {
|
|
6
|
-
constructor(fileName) {
|
|
7
|
-
super(`File format not supported: ${fileName}`);
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
function useHandleFileUpload({
|
|
11
|
-
onContent
|
|
12
|
-
}) {
|
|
13
|
-
const [progress, setProgress] = useState(100);
|
|
14
|
-
const handleFileUpload = useCallback(
|
|
15
|
-
async (ev) => {
|
|
16
|
-
setProgress(0);
|
|
17
|
-
const imageProcessor = getImageOcrMaker();
|
|
18
|
-
const pdfProcessor = getPdfReader();
|
|
19
|
-
await (async () => {
|
|
20
|
-
const obtainedText = [];
|
|
21
|
-
const files = ev.target.files;
|
|
22
|
-
const filesLength = ev.target.files?.length ?? 0;
|
|
23
|
-
if (files) {
|
|
24
|
-
for (let i = 0; i < filesLength; i++) {
|
|
25
|
-
const file = files[i];
|
|
26
|
-
if (!isImageFile(file) && !isPdfFile(file)) {
|
|
27
|
-
setProgress(100);
|
|
28
|
-
throw new WrongFormatError(file.name);
|
|
29
|
-
}
|
|
30
|
-
const handleProgress = (progress2) => {
|
|
31
|
-
setProgress(
|
|
32
|
-
i / filesLength * 100 + 1 / filesLength * 100 * (progress2 / 100)
|
|
33
|
-
);
|
|
34
|
-
};
|
|
35
|
-
let result = "";
|
|
36
|
-
if (imageProcessor.willProcessFile(file)) {
|
|
37
|
-
try {
|
|
38
|
-
result = (await imageProcessor.processFile(file, handleProgress))[0];
|
|
39
|
-
} catch (e) {
|
|
40
|
-
console.error(e);
|
|
41
|
-
}
|
|
42
|
-
} else if (pdfProcessor.willProcessFile(file)) {
|
|
43
|
-
result = (await pdfProcessor.processFile(file, handleProgress)).join("\n\n");
|
|
44
|
-
}
|
|
45
|
-
if (result) {
|
|
46
|
-
obtainedText.push(result);
|
|
47
|
-
}
|
|
48
|
-
setProgress((i + 1) / filesLength * 100);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
onContent(obtainedText);
|
|
52
|
-
})();
|
|
53
|
-
ev.target.value = "";
|
|
54
|
-
},
|
|
55
|
-
[onContent]
|
|
56
|
-
);
|
|
57
|
-
return { progress, handleFileUpload };
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export { WrongFormatError, useHandleFileUpload as default };
|
|
61
|
-
//# sourceMappingURL=useHandleFileUpload.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useHandleFileUpload.js","sources":["../../../../src/components/chat/files/useHandleFileUpload.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport { ChangeEvent, useCallback, useState } from 'react';\nimport getImageOcrMaker, {\n isImageFile,\n} from '../../../files/ocr/getImageOcrMaker';\nimport getPdfReader, { isPdfFile } from '../../../files/pdf/getPdfReader';\n\nexport class WrongFormatError extends Error {\n constructor(fileName: string) {\n super(`File format not supported: ${fileName}`);\n }\n}\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 async (ev: ChangeEvent<HTMLInputElement>) => {\n setProgress(0);\n const imageProcessor = getImageOcrMaker();\n const pdfProcessor = getPdfReader();\n\n await (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 if (!isImageFile(file) && !isPdfFile(file)) {\n setProgress(100);\n throw new WrongFormatError(file.name);\n }\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"],"names":["progress"],"mappings":";;;;AAOO,MAAM,yBAAyB,KAAM,CAAA;AAAA,EAC1C,YAAY,QAAkB,EAAA;AAC5B,IAAM,KAAA,CAAA,CAAA,2BAAA,EAA8B,QAAQ,CAAE,CAAA,CAAA,CAAA;AAAA,GAChD;AACF,CAAA;AAEA,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,OAAO,EAAsC,KAAA;AAC3C,MAAA,WAAA,CAAY,CAAC,CAAA,CAAA;AACb,MAAA,MAAM,iBAAiB,gBAAiB,EAAA,CAAA;AACxC,MAAA,MAAM,eAAe,YAAa,EAAA,CAAA;AAElC,MAAA,MAAA,CAAO,YAAY;AACjB,QAAA,MAAM,eAAyB,EAAC,CAAA;AAChC,QAAM,MAAA,KAAA,GAAQ,GAAG,MAAO,CAAA,KAAA,CAAA;AACxB,QAAA,MAAM,WAAc,GAAA,EAAA,CAAG,MAAO,CAAA,KAAA,EAAO,MAAU,IAAA,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,YAAA,IAAI,CAAC,WAAY,CAAA,IAAI,KAAK,CAAC,SAAA,CAAU,IAAI,CAAG,EAAA;AAC1C,cAAA,WAAA,CAAY,GAAG,CAAA,CAAA;AACf,cAAM,MAAA,IAAI,gBAAiB,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA;AAAA,aACtC;AAEA,YAAM,MAAA,cAAA,GAAiB,CAACA,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,CAAG,EAAA;AACV,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,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;;;;"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { ReactNode } from 'react';
|
|
2
|
-
import { TMessageType } from '../ChatController.js';
|
|
3
|
-
|
|
4
|
-
declare class ChatMessage {
|
|
5
|
-
#private;
|
|
6
|
-
messageType: TMessageType;
|
|
7
|
-
id: number;
|
|
8
|
-
parseMessage(message: string): string;
|
|
9
|
-
constructor(message: ReactNode, messageType: TMessageType);
|
|
10
|
-
get message(): ReactNode;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export { ChatMessage };
|
|
14
|
-
//# sourceMappingURL=ChatMessage.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ChatMessage.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
3
|
-
var __publicField = (obj, key, value) => {
|
|
4
|
-
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
5
|
-
return value;
|
|
6
|
-
};
|
|
7
|
-
var __accessCheck = (obj, member, msg) => {
|
|
8
|
-
if (!member.has(obj))
|
|
9
|
-
throw TypeError("Cannot " + msg);
|
|
10
|
-
};
|
|
11
|
-
var __privateGet = (obj, member, getter) => {
|
|
12
|
-
__accessCheck(obj, member, "read from private field");
|
|
13
|
-
return getter ? getter.call(obj) : member.get(obj);
|
|
14
|
-
};
|
|
15
|
-
var __privateAdd = (obj, member, value) => {
|
|
16
|
-
if (member.has(obj))
|
|
17
|
-
throw TypeError("Cannot add the same private member more than once");
|
|
18
|
-
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
19
|
-
};
|
|
20
|
-
var __privateSet = (obj, member, value, setter) => {
|
|
21
|
-
__accessCheck(obj, member, "write to private field");
|
|
22
|
-
setter ? setter.call(obj, value) : member.set(obj, value);
|
|
23
|
-
return value;
|
|
24
|
-
};
|
|
25
|
-
var _message;
|
|
26
|
-
let maxId = 0;
|
|
27
|
-
class ChatMessage {
|
|
28
|
-
constructor(message, messageType) {
|
|
29
|
-
this.messageType = messageType;
|
|
30
|
-
__publicField(this, "id");
|
|
31
|
-
__privateAdd(this, _message, void 0);
|
|
32
|
-
this.id = maxId++;
|
|
33
|
-
__privateSet(this, _message, message);
|
|
34
|
-
if (messageType === "response")
|
|
35
|
-
this.messageType = "system";
|
|
36
|
-
if (typeof message === "string")
|
|
37
|
-
__privateSet(this, _message, this.parseMessage(message));
|
|
38
|
-
}
|
|
39
|
-
parseMessage(message) {
|
|
40
|
-
let result = message;
|
|
41
|
-
result = result.replaceAll("[strong]", "<strong>");
|
|
42
|
-
result = result.replaceAll("[/strong]", "</strong>");
|
|
43
|
-
return result;
|
|
44
|
-
}
|
|
45
|
-
get message() {
|
|
46
|
-
return __privateGet(this, _message);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
_message = new WeakMap();
|
|
50
|
-
|
|
51
|
-
export { ChatMessage };
|
|
52
|
-
//# sourceMappingURL=ChatMessage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ChatMessage.js","sources":["../../../../src/components/chat/messages/ChatMessage.tsx"],"sourcesContent":["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"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAA,QAAA,CAAA;AAGA,IAAI,KAAQ,GAAA,CAAA,CAAA;AAEL,MAAM,WAAY,CAAA;AAAA,EAavB,WAAA,CAAY,SAA2B,WAA2B,EAAA;AAA3B,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA,CAAA;AAZvC,IAAA,aAAA,CAAA,IAAA,EAAA,IAAA,CAAA,CAAA;AACA,IAAA,YAAA,CAAA,IAAA,EAAA,QAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAYE,IAAA,IAAA,CAAK,EAAK,GAAA,KAAA,EAAA,CAAA;AACV,IAAA,YAAA,CAAA,IAAA,EAAK,QAAW,EAAA,OAAA,CAAA,CAAA;AAEhB,IAAA,IAAI,WAAgB,KAAA,UAAA;AAAY,MAAA,IAAA,CAAK,WAAc,GAAA,QAAA,CAAA;AACnD,IAAA,IAAI,OAAO,OAAY,KAAA,QAAA;AAAU,MAAK,YAAA,CAAA,IAAA,EAAA,QAAA,EAAW,IAAK,CAAA,YAAA,CAAa,OAAO,CAAA,CAAA,CAAA;AAAA,GAC5E;AAAA,EAfA,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;AAAA,EAUA,IAAI,OAAU,GAAA;AACZ,IAAA,OAAO,YAAK,CAAA,IAAA,EAAA,QAAA,CAAA,CAAA;AAAA,GACd;AACF,CAAA;AAtBE,QAAA,GAAA,IAAA,OAAA,EAAA;;;;"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import * as react from 'react';
|
|
2
|
-
import { ReactElement } from 'react';
|
|
3
|
-
import { ChatMessage } from './ChatMessage.js';
|
|
4
|
-
|
|
5
|
-
type TMultipleChoiceMessageOption<OptionProps> = {
|
|
6
|
-
label: string;
|
|
7
|
-
url: string;
|
|
8
|
-
additionalProps?: OptionProps;
|
|
9
|
-
};
|
|
10
|
-
declare class MultipleChoiceMessage<OptionProps> extends ChatMessage {
|
|
11
|
-
private question;
|
|
12
|
-
private options;
|
|
13
|
-
private Renderer?;
|
|
14
|
-
constructor(question: string, options: TMultipleChoiceMessageOption<OptionProps>[], Renderer?: ((props: {
|
|
15
|
-
item: TMultipleChoiceMessageOption<OptionProps>;
|
|
16
|
-
}) => ReactElement) | undefined);
|
|
17
|
-
get message(): react.JSX.Element;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export { MultipleChoiceMessage, type TMultipleChoiceMessageOption };
|
|
21
|
-
//# sourceMappingURL=MultipleChoiceMessage.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MultipleChoiceMessage.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { jsxs, jsx } from '@apia/theme/jsx-runtime';
|
|
2
|
-
import { SimpleButton, ApiaUtil } from '@apia/components';
|
|
3
|
-
import { ChatMessage } from './ChatMessage.js';
|
|
4
|
-
import { Box, Paragraph } from '@apia/theme';
|
|
5
|
-
|
|
6
|
-
class MultipleChoiceMessage extends ChatMessage {
|
|
7
|
-
constructor(question, options, Renderer) {
|
|
8
|
-
super("", "multipleChoice");
|
|
9
|
-
this.question = question;
|
|
10
|
-
this.options = options;
|
|
11
|
-
this.Renderer = Renderer;
|
|
12
|
-
}
|
|
13
|
-
get message() {
|
|
14
|
-
const Renderer = this.Renderer;
|
|
15
|
-
if (Renderer) {
|
|
16
|
-
return /* @__PURE__ */ jsxs(Box, { className: "multipleChoiceMessage customRenderer", children: [
|
|
17
|
-
/* @__PURE__ */ jsx(Paragraph, { children: this.question }),
|
|
18
|
-
this.options.map((item) => /* @__PURE__ */ jsx(Renderer, { item }, item.url))
|
|
19
|
-
] });
|
|
20
|
-
}
|
|
21
|
-
return /* @__PURE__ */ jsxs(Box, { className: "multipleChoiceMessage", children: [
|
|
22
|
-
/* @__PURE__ */ jsx(Paragraph, { children: this.question }),
|
|
23
|
-
!Renderer && /* @__PURE__ */ jsx(Box, { as: "ul", children: this.options.map((current) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
|
|
24
|
-
SimpleButton,
|
|
25
|
-
{
|
|
26
|
-
className: "multipleChoice__option",
|
|
27
|
-
onClick: () => {
|
|
28
|
-
new ApiaUtil().tabs.openTab(current.label, current.url);
|
|
29
|
-
},
|
|
30
|
-
children: current.label
|
|
31
|
-
}
|
|
32
|
-
) }, current.label)) })
|
|
33
|
-
] });
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export { MultipleChoiceMessage };
|
|
38
|
-
//# sourceMappingURL=MultipleChoiceMessage.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MultipleChoiceMessage.js","sources":["../../../../src/components/chat/messages/MultipleChoiceMessage.tsx"],"sourcesContent":["import { ApiaUtil, SimpleButton } from '@apia/components';\nimport { ChatMessage } from './ChatMessage';\nimport { Box, Paragraph } from '@apia/theme';\nimport { ReactElement } from 'react';\n\nexport type TMultipleChoiceMessageOption<OptionProps> = {\n label: string;\n url: string;\n additionalProps?: OptionProps;\n};\n\nexport class MultipleChoiceMessage<OptionProps> 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 if (Renderer) {\n return (\n <Box className=\"multipleChoiceMessage customRenderer\">\n <Paragraph>{this.question}</Paragraph>\n {this.options.map((item) => (\n <Renderer item={item} key={item.url} />\n ))}\n </Box>\n );\n }\n\n return (\n <Box className=\"multipleChoiceMessage\">\n <Paragraph>{this.question}</Paragraph>\n {!Renderer && (\n <Box as=\"ul\">\n {this.options.map((current) => (\n <li key={current.label}>\n <SimpleButton\n className=\"multipleChoice__option\"\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":[],"mappings":";;;;;AAWO,MAAM,8BAA2C,WAAY,CAAA;AAAA,EAClE,WAAA,CACU,QACA,EAAA,OAAA,EACA,QAGR,EAAA;AACA,IAAA,KAAA,CAAM,IAAI,gBAAgB,CAAA,CAAA;AANlB,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA,CAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA,CAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA,CAAA;AAAA,GAKV;AAAA,EAEA,IAAI,OAAU,GAAA;AACZ,IAAA,MAAM,WAAW,IAAK,CAAA,QAAA,CAAA;AAEtB,IAAA,IAAI,QAAU,EAAA;AACZ,MACE,uBAAA,IAAA,CAAC,GAAI,EAAA,EAAA,SAAA,EAAU,sCACb,EAAA,QAAA,EAAA;AAAA,wBAAC,GAAA,CAAA,SAAA,EAAA,EAAW,eAAK,QAAS,EAAA,CAAA;AAAA,QACzB,IAAA,CAAK,OAAQ,CAAA,GAAA,CAAI,CAAC,IAAA,yBAChB,QAAS,EAAA,EAAA,IAAA,EAAA,EAAiB,IAAK,CAAA,GAAK,CACtC,CAAA;AAAA,OACH,EAAA,CAAA,CAAA;AAAA,KAEJ;AAEA,IACE,uBAAA,IAAA,CAAC,GAAI,EAAA,EAAA,SAAA,EAAU,uBACb,EAAA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,SAAA,EAAA,EAAW,eAAK,QAAS,EAAA,CAAA;AAAA,MACzB,CAAC,QAAA,oBACC,GAAA,CAAA,GAAA,EAAA,EAAI,EAAG,EAAA,IAAA,EACL,QAAK,EAAA,IAAA,CAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,OACjB,qBAAA,GAAA,CAAC,IACC,EAAA,EAAA,QAAA,kBAAA,GAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACC,SAAU,EAAA,wBAAA;AAAA,UACV,SAAS,MAAM;AACb,YAAA,IAAI,UAAW,CAAA,IAAA,CAAK,QAAQ,OAAQ,CAAA,KAAA,EAAO,QAAQ,GAAG,CAAA,CAAA;AAAA,WACxD;AAAA,UAEC,QAAQ,EAAA,OAAA,CAAA,KAAA;AAAA,SAAA;AAAA,OAPJ,EAAA,EAAA,OAAA,CAAQ,KASjB,CACD,CACH,EAAA,CAAA;AAAA,KAEJ,EAAA,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
function isImageFile(file) {
|
|
2
|
-
const IMAGE_EXTENSIONS = [
|
|
3
|
-
"jpg",
|
|
4
|
-
"jpeg",
|
|
5
|
-
"png",
|
|
6
|
-
"gif",
|
|
7
|
-
"bmp",
|
|
8
|
-
"webp",
|
|
9
|
-
"tiff",
|
|
10
|
-
"svg",
|
|
11
|
-
"jfif"
|
|
12
|
-
];
|
|
13
|
-
return IMAGE_EXTENSIONS.includes(file.name.split(".").pop());
|
|
14
|
-
}
|
|
15
|
-
function getImageOcrMaker(lang) {
|
|
16
|
-
return new class ImageOcrMaker {
|
|
17
|
-
async processFile(file, onProgress) {
|
|
18
|
-
const tesseract = await import('tesseract.js');
|
|
19
|
-
const worker = await tesseract.createWorker(lang, 1, {
|
|
20
|
-
logger(arg) {
|
|
21
|
-
onProgress?.(arg.progress * 100);
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
const result = (await worker.recognize(file)).data.text;
|
|
25
|
-
return [result];
|
|
26
|
-
}
|
|
27
|
-
willProcessFile(file) {
|
|
28
|
-
return isImageFile(file);
|
|
29
|
-
}
|
|
30
|
-
}();
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export { getImageOcrMaker as default, isImageFile };
|
|
34
|
-
//# sourceMappingURL=getImageOcrMaker.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getImageOcrMaker.js","sources":["../../../src/files/ocr/getImageOcrMaker.ts"],"sourcesContent":["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"],"names":[],"mappings":"AAEO,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,IACvD,MAAM,WACJ,CAAA,IAAA,EACA,UACmB,EAAA;AACnB,MAAM,MAAA,SAAA,GAAY,MAAM,OAAO,cAAc,CAAA,CAAA;AAE7C,MAAA,MAAM,MAAS,GAAA,MAAM,SAAU,CAAA,YAAA,CAAa,MAAM,CAAG,EAAA;AAAA,QACnD,OAAO,GAAK,EAAA;AACV,UAAa,UAAA,GAAA,GAAA,CAAI,WAAW,GAAG,CAAA,CAAA;AAAA,SACjC;AAAA,OACD,CAAA,CAAA;AAED,MAAA,MAAM,UAAU,MAAM,MAAA,CAAO,SAAU,CAAA,IAAI,GAAG,IAAK,CAAA,IAAA,CAAA;AACnD,MAAA,OAAO,CAAC,MAAM,CAAA,CAAA;AAAA,KAChB;AAAA,IAEA,gBAAgB,IAAY,EAAA;AAC1B,MAAA,OAAO,YAAY,IAAI,CAAA,CAAA;AAAA,KACzB;AAAA,GACC,EAAA,CAAA;AACL;;;;"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
function isPdfFile(file) {
|
|
2
|
-
const IMAGE_EXTENSIONS = ["pdf"];
|
|
3
|
-
return IMAGE_EXTENSIONS.includes(file.name.split(".").pop());
|
|
4
|
-
}
|
|
5
|
-
function getPdfReader() {
|
|
6
|
-
return new class PdfReader {
|
|
7
|
-
async processFile(file, onProgress) {
|
|
8
|
-
onProgress?.(0);
|
|
9
|
-
const { getDocument, GlobalWorkerOptions } = await import('pdfjs-dist');
|
|
10
|
-
async function getPdfTextFromArrayBuffer(buffer) {
|
|
11
|
-
GlobalWorkerOptions.workerSrc = "../includes/pdf.worker.min.js";
|
|
12
|
-
const pdf = await getDocument({ data: buffer }).promise;
|
|
13
|
-
const pages = [];
|
|
14
|
-
for (let i = 1; i <= pdf.numPages; i++) {
|
|
15
|
-
const page = await pdf.getPage(i);
|
|
16
|
-
const textContent = await page.getTextContent();
|
|
17
|
-
pages.push(
|
|
18
|
-
textContent.items.map((item) => item.str).join(" ")
|
|
19
|
-
);
|
|
20
|
-
}
|
|
21
|
-
return pages;
|
|
22
|
-
}
|
|
23
|
-
return new Promise((resolve) => {
|
|
24
|
-
const reader = new FileReader();
|
|
25
|
-
reader.onload = async function(event) {
|
|
26
|
-
if (!event.target?.result) {
|
|
27
|
-
alert("Error al leer el archivo.");
|
|
28
|
-
return;
|
|
29
|
-
}
|
|
30
|
-
const buffer = event.target.result;
|
|
31
|
-
const text = await getPdfTextFromArrayBuffer(buffer);
|
|
32
|
-
onProgress?.(100);
|
|
33
|
-
resolve(text);
|
|
34
|
-
};
|
|
35
|
-
reader.readAsArrayBuffer(file);
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
willProcessFile(file) {
|
|
39
|
-
return isPdfFile(file);
|
|
40
|
-
}
|
|
41
|
-
}();
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export { getPdfReader as default, isPdfFile };
|
|
45
|
-
//# sourceMappingURL=getPdfReader.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getPdfReader.js","sources":["../../../src/files/pdf/getPdfReader.ts"],"sourcesContent":["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.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"],"names":[],"mappings":"AAEO,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,IACnD,MAAM,WACJ,CAAA,IAAA,EACA,UACmB,EAAA;AACnB,MAAA,UAAA,GAAa,CAAC,CAAA,CAAA;AACd,MAAA,MAAM,EAAE,WAAa,EAAA,mBAAA,EAAwB,GAAA,MAAM,OAAO,YAAY,CAAA,CAAA;AAEtE,MAAA,eAAe,0BACb,MACmB,EAAA;AACnB,QAAA,mBAAA,CAAoB,SAAY,GAAA,+BAAA,CAAA;AAEhC,QAAA,MAAM,MAAM,MAAM,WAAA,CAAY,EAAE,IAAM,EAAA,MAAA,EAAQ,CAAE,CAAA,OAAA,CAAA;AAEhD,QAAA,MAAM,QAAkB,EAAC,CAAA;AAEzB,QAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAK,IAAA,GAAA,CAAI,UAAU,CAAK,EAAA,EAAA;AACtC,UAAA,MAAM,IAAO,GAAA,MAAM,GAAI,CAAA,OAAA,CAAQ,CAAC,CAAA,CAAA;AAChC,UAAM,MAAA,WAAA,GAAc,MAAM,IAAA,CAAK,cAAe,EAAA,CAAA;AAG9C,UAAM,KAAA,CAAA,IAAA;AAAA,YACJ,WAAA,CAAY,MACT,GAAI,CAAA,CAAC,SAAU,IAAyB,CAAA,GAAG,CAC3C,CAAA,IAAA,CAAK,GAAG,CAAA;AAAA,WACb,CAAA;AAAA,SACF;AAEA,QAAO,OAAA,KAAA,CAAA;AAAA,OACT;AAEA,MAAO,OAAA,IAAI,OAAQ,CAAA,CAAC,OAAY,KAAA;AAC9B,QAAM,MAAA,MAAA,GAAS,IAAI,UAAW,EAAA,CAAA;AAE9B,QAAO,MAAA,CAAA,MAAA,GAAS,eAAgB,KAAkC,EAAA;AAChE,UAAI,IAAA,CAAC,KAAM,CAAA,MAAA,EAAQ,MAAQ,EAAA;AACzB,YAAA,KAAA,CAAM,2BAA2B,CAAA,CAAA;AACjC,YAAA,OAAA;AAAA,WACF;AAEA,UAAM,MAAA,MAAA,GAAsB,MAAM,MAAO,CAAA,MAAA,CAAA;AACzC,UAAM,MAAA,IAAA,GAAO,MAAM,yBAAA,CAA0B,MAAM,CAAA,CAAA;AAEnD,UAAA,UAAA,GAAa,GAAG,CAAA,CAAA;AAChB,UAAA,OAAA,CAAQ,IAAI,CAAA,CAAA;AAAA,SACd,CAAA;AAEA,QAAA,MAAA,CAAO,kBAAkB,IAAI,CAAA,CAAA;AAAA,OAC9B,CAAA,CAAA;AAAA,KACH;AAAA,IAEA,gBAAgB,IAAY,EAAA;AAC1B,MAAA,OAAO,UAAU,IAAI,CAAA,CAAA;AAAA,KACvB;AAAA,GACC,EAAA,CAAA;AACL;;;;"}
|