@apia/ai 1.0.4 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/dist/components/chat/AutoscrollContainer.js +58 -0
  2. package/dist/components/chat/AutoscrollContainer.js.map +1 -0
  3. package/dist/components/chat/ChatController.d.ts +38 -0
  4. package/dist/components/chat/ChatController.d.ts.map +1 -0
  5. package/dist/components/chat/ChatController.js +124 -0
  6. package/dist/components/chat/ChatController.js.map +1 -0
  7. package/dist/components/chat/Textarea.js +218 -0
  8. package/dist/components/chat/Textarea.js.map +1 -0
  9. package/dist/components/chat/files/useHandleFileUpload.js +61 -0
  10. package/dist/components/chat/files/useHandleFileUpload.js.map +1 -0
  11. package/dist/components/chat/messages/ChatMessage.d.ts +14 -0
  12. package/dist/components/chat/messages/ChatMessage.d.ts.map +1 -0
  13. package/dist/components/chat/messages/ChatMessage.js +52 -0
  14. package/dist/components/chat/messages/ChatMessage.js.map +1 -0
  15. package/dist/components/chat/messages/MultipleChoiceMessage.d.ts +21 -0
  16. package/dist/components/chat/messages/MultipleChoiceMessage.d.ts.map +1 -0
  17. package/dist/components/chat/messages/MultipleChoiceMessage.js +38 -0
  18. package/dist/components/chat/messages/MultipleChoiceMessage.js.map +1 -0
  19. package/dist/files/ocr/getImageOcrMaker.js +34 -0
  20. package/dist/files/ocr/getImageOcrMaker.js.map +1 -0
  21. package/dist/files/pdf/getPdfReader.js +45 -0
  22. package/dist/files/pdf/getPdfReader.js.map +1 -0
  23. package/dist/index.d.ts +4 -61
  24. package/dist/index.js +4 -614
  25. package/dist/index.js.map +1 -1
  26. package/package.json +23 -34
  27. package/LICENSE.md +0 -21
  28. package/README.md +0 -28
  29. package/cleanDist.json +0 -3
package/dist/index.js CHANGED
@@ -1,614 +1,4 @@
1
- import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { Box, getVariant, Textarea, Paragraph } from '@apia/theme';
3
- import { getLabel, EventEmitter } from '@apia/util';
4
- import { useRef, useCallback, useState, useEffect } from 'react';
5
- import { IconButton, SimpleButton, ApiaUtil } from '@apia/components';
6
-
7
- var __defProp$1 = Object.defineProperty;
8
- var __defProps$1 = Object.defineProperties;
9
- var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;
10
- var __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;
11
- var __hasOwnProp$1 = Object.prototype.hasOwnProperty;
12
- var __propIsEnum$1 = Object.prototype.propertyIsEnumerable;
13
- var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
14
- var __spreadValues$1 = (a, b) => {
15
- for (var prop in b || (b = {}))
16
- if (__hasOwnProp$1.call(b, prop))
17
- __defNormalProp$1(a, prop, b[prop]);
18
- if (__getOwnPropSymbols$1)
19
- for (var prop of __getOwnPropSymbols$1(b)) {
20
- if (__propIsEnum$1.call(b, prop))
21
- __defNormalProp$1(a, prop, b[prop]);
22
- }
23
- return a;
24
- };
25
- var __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));
26
- const AutoscrollContainer = ({ children }) => {
27
- const observer = useRef(null);
28
- const unsuscribe = useRef(null);
29
- const isFullScrolled = useRef(false);
30
- const hasInited = useRef(false);
31
- const ref = useCallback((el) => {
32
- var _a, _b;
33
- if (!el)
34
- return;
35
- if (!hasInited.current) {
36
- hasInited.current = true;
37
- el.scrollTo({
38
- top: el.getBoundingClientRect().height,
39
- behavior: "auto"
40
- });
41
- isFullScrolled.current = true;
42
- }
43
- (_a = observer.current) == null ? void 0 : _a.disconnect();
44
- (_b = unsuscribe.current) == null ? void 0 : _b.call(unsuscribe);
45
- observer.current = new MutationObserver(([mutation]) => {
46
- if (mutation && mutation.target instanceof HTMLElement && mutation.target === el) {
47
- if (isFullScrolled.current && mutation.target.scrollTop !== mutation.target.scrollHeight - mutation.target.offsetHeight) {
48
- mutation.target.scrollTo({
49
- top: mutation.target.scrollHeight,
50
- behavior: "smooth"
51
- });
52
- }
53
- }
54
- });
55
- observer.current.observe(el, { childList: true, subtree: true });
56
- const handleScroll = (ev) => {
57
- if (ev.target === el && el instanceof HTMLElement) {
58
- setTimeout(() => {
59
- isFullScrolled.current = Math.abs(el.scrollTop - (el.scrollHeight - el.offsetHeight)) < 150;
60
- }, 100);
61
- }
62
- };
63
- el.addEventListener("scroll", handleScroll);
64
- unsuscribe.current = () => {
65
- el.removeEventListener("scroll", handleScroll);
66
- };
67
- }, []);
68
- return /* @__PURE__ */ jsx(
69
- Box,
70
- __spreadProps$1(__spreadValues$1({}, getVariant("layout.common.components.autoscrollContainer")), {
71
- className: "autoscrollContainer",
72
- ref,
73
- children
74
- })
75
- );
76
- };
77
-
78
- var __async$2 = (__this, __arguments, generator) => {
79
- return new Promise((resolve, reject) => {
80
- var fulfilled = (value) => {
81
- try {
82
- step(generator.next(value));
83
- } catch (e) {
84
- reject(e);
85
- }
86
- };
87
- var rejected = (value) => {
88
- try {
89
- step(generator.throw(value));
90
- } catch (e) {
91
- reject(e);
92
- }
93
- };
94
- var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
95
- step((generator = generator.apply(__this, __arguments)).next());
96
- });
97
- };
98
- function isImageFile(file) {
99
- const IMAGE_EXTENSIONS = [
100
- "jpg",
101
- "jpeg",
102
- "png",
103
- "gif",
104
- "bmp",
105
- "webp",
106
- "tiff",
107
- "svg",
108
- "jfif"
109
- ];
110
- return IMAGE_EXTENSIONS.includes(file.name.split(".").pop());
111
- }
112
- function getImageOcrMaker(lang) {
113
- return new class ImageOcrMaker {
114
- processFile(file, onProgress) {
115
- return __async$2(this, null, function* () {
116
- const tesseract = yield import('tesseract.js');
117
- const worker = yield tesseract.createWorker(lang, 1, {
118
- logger(arg) {
119
- onProgress == null ? void 0 : onProgress(arg.progress * 100);
120
- }
121
- });
122
- const result = (yield worker.recognize(file)).data.text;
123
- return [result];
124
- });
125
- }
126
- willProcessFile(file) {
127
- return isImageFile(file);
128
- }
129
- }();
130
- }
131
-
132
- var __async$1 = (__this, __arguments, generator) => {
133
- return new Promise((resolve, reject) => {
134
- var fulfilled = (value) => {
135
- try {
136
- step(generator.next(value));
137
- } catch (e) {
138
- reject(e);
139
- }
140
- };
141
- var rejected = (value) => {
142
- try {
143
- step(generator.throw(value));
144
- } catch (e) {
145
- reject(e);
146
- }
147
- };
148
- var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
149
- step((generator = generator.apply(__this, __arguments)).next());
150
- });
151
- };
152
- function isPdfFile(file) {
153
- const IMAGE_EXTENSIONS = ["pdf"];
154
- return IMAGE_EXTENSIONS.includes(file.name.split(".").pop());
155
- }
156
- function getPdfReader() {
157
- return new class PdfReader {
158
- processFile(file, onProgress) {
159
- return __async$1(this, null, function* () {
160
- onProgress == null ? void 0 : onProgress(0);
161
- const { getDocument, GlobalWorkerOptions } = yield import('pdfjs-dist');
162
- function getPdfTextFromArrayBuffer(buffer) {
163
- return __async$1(this, null, function* () {
164
- GlobalWorkerOptions.workerSrc = "../includes/pdf.worker.min.40189.js";
165
- const pdf = yield getDocument({ data: buffer }).promise;
166
- const pages = [];
167
- for (let i = 1; i <= pdf.numPages; i++) {
168
- const page = yield pdf.getPage(i);
169
- const textContent = yield page.getTextContent();
170
- pages.push(
171
- textContent.items.map((item) => item.str).join(" ")
172
- );
173
- }
174
- return pages;
175
- });
176
- }
177
- return new Promise((resolve) => {
178
- const reader = new FileReader();
179
- reader.onload = function(event) {
180
- return __async$1(this, null, function* () {
181
- var _a;
182
- if (!((_a = event.target) == null ? void 0 : _a.result)) {
183
- alert("Error al leer el archivo.");
184
- return;
185
- }
186
- const buffer = event.target.result;
187
- const text = yield getPdfTextFromArrayBuffer(buffer);
188
- onProgress == null ? void 0 : onProgress(100);
189
- resolve(text);
190
- });
191
- };
192
- reader.readAsArrayBuffer(file);
193
- });
194
- });
195
- }
196
- willProcessFile(file) {
197
- return isPdfFile(file);
198
- }
199
- }();
200
- }
201
-
202
- var __async = (__this, __arguments, generator) => {
203
- return new Promise((resolve, reject) => {
204
- var fulfilled = (value) => {
205
- try {
206
- step(generator.next(value));
207
- } catch (e) {
208
- reject(e);
209
- }
210
- };
211
- var rejected = (value) => {
212
- try {
213
- step(generator.throw(value));
214
- } catch (e) {
215
- reject(e);
216
- }
217
- };
218
- var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
219
- step((generator = generator.apply(__this, __arguments)).next());
220
- });
221
- };
222
- function useHandleFileUpload({
223
- onContent
224
- }) {
225
- const [progress, setProgress] = useState(100);
226
- const handleFileUpload = useCallback(
227
- (ev) => {
228
- setProgress(0);
229
- const imageProcessor = getImageOcrMaker();
230
- const pdfProcessor = getPdfReader();
231
- void (() => __async(this, null, function* () {
232
- var _a, _b;
233
- const obtainedText = [];
234
- const files = ev.target.files;
235
- const filesLength = (_b = (_a = ev.target.files) == null ? void 0 : _a.length) != null ? _b : 0;
236
- if (files) {
237
- for (let i = 0; i < filesLength; i++) {
238
- const file = files[i];
239
- const handleProgress = (progress2) => {
240
- setProgress(
241
- i / filesLength * 100 + 1 / filesLength * 100 * (progress2 / 100)
242
- );
243
- };
244
- let result = "";
245
- if (imageProcessor.willProcessFile(file)) {
246
- try {
247
- result = (yield imageProcessor.processFile(file, handleProgress))[0];
248
- } catch (e) {
249
- console.error(e);
250
- }
251
- } else if (pdfProcessor.willProcessFile(file)) {
252
- result = (yield pdfProcessor.processFile(file, handleProgress)).join("\n\n");
253
- }
254
- if (result) {
255
- obtainedText.push(result);
256
- }
257
- setProgress((i + 1) / filesLength * 100);
258
- }
259
- }
260
- onContent(obtainedText);
261
- }))();
262
- ev.target.value = "";
263
- },
264
- [onContent]
265
- );
266
- return { progress, handleFileUpload };
267
- }
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
-
312
- const makeTextarea = (gptController) => {
313
- const NewTextarea = ({
314
- hideDeleteButton,
315
- isLoading: outIsLoading,
316
- onSubmit,
317
- preventAppendUserMessages
318
- }) => {
319
- const [isLoading, setIsLoading] = useState(false);
320
- const submit = useCallback(
321
- (text) => {
322
- if (preventAppendUserMessages !== true)
323
- gptController.messages.add(new ChatMessage(text, "user"));
324
- gptController.history.add(text);
325
- onSubmit(text).finally(() => {
326
- setIsLoading(false);
327
- });
328
- },
329
- [onSubmit, preventAppendUserMessages]
330
- );
331
- const handleSubmit = useCallback(
332
- (ev) => {
333
- ev.preventDefault();
334
- const textarea = document.getElementById(
335
- `GPTMessage${gptController.id}`
336
- );
337
- if (textarea.value) {
338
- setIsLoading(true);
339
- submit(textarea.value);
340
- }
341
- textarea.focus();
342
- textarea.value = "";
343
- },
344
- [submit]
345
- );
346
- const onKeyDown = useCallback((ev) => {
347
- var _a, _b;
348
- if (ev.target.readOnly)
349
- return;
350
- if (ev.code === "Enter" && !ev.shiftKey) {
351
- ev.preventDefault();
352
- (_b = (_a = ev.target.closest("form")) == null ? void 0 : _a.querySelector('button[type="submit"]')) == null ? void 0 : _b.click();
353
- }
354
- }, []);
355
- const { progress, handleFileUpload } = useHandleFileUpload({
356
- onContent(content) {
357
- document.getElementById(
358
- `GPTMessage${gptController.id}`
359
- ).value = content.join("\n\n");
360
- }
361
- });
362
- const actualIsLoading = isLoading || progress !== 100 || outIsLoading;
363
- return /* @__PURE__ */ jsxs("form", { onSubmit: handleSubmit, className: "gpt__form", action: "", children: [
364
- /* @__PURE__ */ jsx(
365
- Textarea,
366
- {
367
- onKeyDown,
368
- id: `GPTMessage${gptController.id}`,
369
- readOnly: actualIsLoading
370
- }
371
- ),
372
- /* @__PURE__ */ jsxs(Box, { className: "gpt__buttonsContainer", children: [
373
- /* @__PURE__ */ jsx(
374
- "input",
375
- {
376
- type: "file",
377
- id: `gptUploadFile__${gptController.id}`,
378
- sx: { display: "none" },
379
- onChange: handleFileUpload
380
- }
381
- ),
382
- /* @__PURE__ */ jsx(
383
- IconButton,
384
- {
385
- title: getLabel("btnUploadFile").text,
386
- icon: "File",
387
- variant: "icon-outline",
388
- disabled: actualIsLoading,
389
- onClick: () => {
390
- document.getElementById(
391
- `gptUploadFile__${gptController.id}`
392
- ).click();
393
- },
394
- size: "Lg"
395
- }
396
- ),
397
- /* @__PURE__ */ jsx(
398
- SimpleButton,
399
- {
400
- title: getLabel("btnAiPrevious").tooltip,
401
- variant: "outline",
402
- type: "button",
403
- onClick: () => {
404
- const historyValue = gptController.history.previous();
405
- if (historyValue)
406
- document.getElementById(
407
- `GPTMessage${gptController.id}`
408
- ).value = historyValue;
409
- },
410
- size: "sm",
411
- children: getLabel("btnAiPrevious").text
412
- }
413
- ),
414
- /* @__PURE__ */ jsx(
415
- SimpleButton,
416
- {
417
- title: getLabel("btnAiNext").tooltip,
418
- variant: "outline",
419
- type: "button",
420
- onClick: () => {
421
- const historyValue = gptController.history.next();
422
- document.getElementById(
423
- `GPTMessage${gptController.id}`
424
- ).value = historyValue != null ? historyValue : "";
425
- },
426
- size: "sm",
427
- children: getLabel("btnAiNext").text
428
- }
429
- ),
430
- !hideDeleteButton && /* @__PURE__ */ jsx(
431
- SimpleButton,
432
- {
433
- title: getLabel("btnAiDelete").tooltip,
434
- variant: "outline",
435
- type: "button",
436
- onClick: () => gptController.messages.clear(),
437
- size: "sm",
438
- children: getLabel("btnAiDelete").text
439
- }
440
- ),
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
- )
451
- ] })
452
- ] });
453
- };
454
- NewTextarea.displayName = "";
455
- return NewTextarea;
456
- };
457
-
458
- var __defProp = Object.defineProperty;
459
- var __defProps = Object.defineProperties;
460
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
461
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
462
- var __hasOwnProp = Object.prototype.hasOwnProperty;
463
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
464
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
465
- var __spreadValues = (a, b) => {
466
- for (var prop in b || (b = {}))
467
- if (__hasOwnProp.call(b, prop))
468
- __defNormalProp(a, prop, b[prop]);
469
- if (__getOwnPropSymbols)
470
- for (var prop of __getOwnPropSymbols(b)) {
471
- if (__propIsEnum.call(b, prop))
472
- __defNormalProp(a, prop, b[prop]);
473
- }
474
- return a;
475
- };
476
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
477
- var __accessCheck = (obj, member, msg) => {
478
- if (!member.has(obj))
479
- throw TypeError("Cannot " + msg);
480
- };
481
- var __privateGet = (obj, member, getter) => {
482
- __accessCheck(obj, member, "read from private field");
483
- return getter ? getter.call(obj) : member.get(obj);
484
- };
485
- var __privateAdd = (obj, member, value) => {
486
- if (member.has(obj))
487
- throw TypeError("Cannot add the same private member more than once");
488
- member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
489
- };
490
- var __privateSet = (obj, member, value, setter) => {
491
- __accessCheck(obj, member, "write to private field");
492
- setter ? setter.call(obj, value) : member.set(obj, value);
493
- return value;
494
- };
495
- var __privateWrapper = (obj, member, setter, getter) => ({
496
- set _(value) {
497
- __privateSet(obj, member, value, setter);
498
- },
499
- get _() {
500
- return __privateGet(obj, member, getter);
501
- }
502
- });
503
- var _messages, _promptsHistory, _currentHistoryIndex;
504
- class ChatController extends EventEmitter {
505
- constructor(id, welcomeMessage = getLabel("lblAiDashboardWelcomeMessage").text) {
506
- super();
507
- this.id = id;
508
- __privateAdd(this, _messages, []);
509
- this.components = {
510
- MessageHistory: () => {
511
- const messages = this.history.useList();
512
- return /* @__PURE__ */ jsx(
513
- Box,
514
- __spreadProps(__spreadValues({}, getVariant("layout.common.components.chat")), {
515
- className: "history",
516
- children: /* @__PURE__ */ jsx(AutoscrollContainer, { children: messages.map((current) => /* @__PURE__ */ jsx(
517
- Box,
518
- __spreadValues({
519
- as: "pre",
520
- className: `history__message ${current.messageType}`
521
- }, typeof current.message === "string" ? { dangerouslySetInnerHTML: { __html: current.message } } : { children: current.message }),
522
- current.id
523
- )) })
524
- })
525
- );
526
- },
527
- Textarea: makeTextarea(this)
528
- };
529
- __privateAdd(this, _promptsHistory, []);
530
- __privateAdd(this, _currentHistoryIndex, -1);
531
- this.history = {
532
- add: (prompt) => {
533
- __privateSet(this, _currentHistoryIndex, -1);
534
- if (prompt === __privateGet(this, _promptsHistory)[__privateGet(this, _promptsHistory).length]) {
535
- return;
536
- }
537
- __privateSet(this, _promptsHistory, [
538
- prompt,
539
- ...__privateGet(this, _promptsHistory).slice(
540
- Math.max(0, __privateGet(this, _promptsHistory).length - 10)
541
- )
542
- ]);
543
- },
544
- next: () => {
545
- if (__privateGet(this, _promptsHistory)[__privateGet(this, _currentHistoryIndex) - 1])
546
- return __privateGet(this, _promptsHistory)[--__privateWrapper(this, _currentHistoryIndex)._];
547
- else {
548
- __privateSet(this, _currentHistoryIndex, -1);
549
- return "";
550
- }
551
- },
552
- previous: () => {
553
- if (__privateGet(this, _promptsHistory)[__privateGet(this, _currentHistoryIndex) + 1]) {
554
- return __privateGet(this, _promptsHistory)[++__privateWrapper(this, _currentHistoryIndex)._];
555
- }
556
- },
557
- useList: () => {
558
- const [messages, setMessages] = useState(__privateGet(this, _messages));
559
- useEffect(() => {
560
- return this.on("listChange", (messages2) => setMessages(messages2));
561
- }, []);
562
- return messages;
563
- }
564
- };
565
- this.messages = {
566
- add: (message) => {
567
- __privateGet(this, _messages).push(message);
568
- this.emit("listChange", [...__privateGet(this, _messages)]);
569
- },
570
- clear: () => {
571
- __privateSet(this, _messages, []);
572
- this.emit("listChange", []);
573
- }
574
- };
575
- if (typeof welcomeMessage === "string")
576
- __privateGet(this, _messages).push(new ChatMessage(welcomeMessage, "system"));
577
- }
578
- }
579
- _messages = new WeakMap();
580
- _promptsHistory = new WeakMap();
581
- _currentHistoryIndex = new WeakMap();
582
-
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 };
1
+ export { ChatController } from './components/chat/ChatController.js';
2
+ export { ChatMessage } from './components/chat/messages/ChatMessage.js';
3
+ export { MultipleChoiceMessage } from './components/chat/messages/MultipleChoiceMessage.js';
4
+ //# sourceMappingURL=index.js.map