@openk9ui/openk9-chatbot 3.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.
Files changed (39) hide show
  1. package/README.md +50 -0
  2. package/dist/SingleMessage-Dyc7W2JZ.js +13738 -0
  3. package/dist/assets/Chatbot.css +107 -0
  4. package/dist/components/Chatbot.js +399 -0
  5. package/dist/components/LanguageContext.js +53 -0
  6. package/dist/components/Search.js +91 -0
  7. package/dist/components/SingleMessage.js +9 -0
  8. package/dist/components/Translate.js +69 -0
  9. package/dist/components/client.js +119 -0
  10. package/dist/components/styled.js +21 -0
  11. package/dist/components/useFocusTrap.js +95 -0
  12. package/dist/components/useGenerateResponse.js +271 -0
  13. package/dist/components/useLanguage.js +12 -0
  14. package/dist/lib/components/Chatbot.js +168 -0
  15. package/dist/lib/components/LanguageContext.js +63 -0
  16. package/dist/lib/components/Search.js +56 -0
  17. package/dist/lib/components/SingleMessage.js +385 -0
  18. package/dist/lib/components/Translate.js +71 -0
  19. package/dist/lib/components/client.js +170 -0
  20. package/dist/lib/components/styled.js +14 -0
  21. package/dist/lib/components/useFocusTrap.js +85 -0
  22. package/dist/lib/components/useGenerateResponse.js +310 -0
  23. package/dist/lib/components/useLanguage.js +16 -0
  24. package/dist/lib/main.js +8 -0
  25. package/dist/main.js +4 -0
  26. package/dist/src/theme.js +52 -0
  27. package/dist/types/lib/components/Chatbot.d.ts +26 -0
  28. package/dist/types/lib/components/LanguageContext.d.ts +12 -0
  29. package/dist/types/lib/components/Search.d.ts +9 -0
  30. package/dist/types/lib/components/SingleMessage.d.ts +19 -0
  31. package/dist/types/lib/components/Translate.d.ts +5 -0
  32. package/dist/types/lib/components/client.d.ts +91 -0
  33. package/dist/types/lib/components/styled.d.ts +13 -0
  34. package/dist/types/lib/components/useFocusTrap.d.ts +5 -0
  35. package/dist/types/lib/components/useGenerateResponse.d.ts +33 -0
  36. package/dist/types/lib/components/useLanguage.d.ts +4 -0
  37. package/dist/types/lib/main.d.ts +2 -0
  38. package/dist/types/src/theme.d.ts +1 -0
  39. package/package.json +63 -0
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ exports.__esModule = true;
17
+ var jsx_runtime_1 = require("react/jsx-runtime");
18
+ var material_1 = require("@mui/material");
19
+ var react_1 = __importDefault(require("react"));
20
+ var Search_1 = __importDefault(require("./Search"));
21
+ var useGenerateResponse_1 = __importDefault(require("./useGenerateResponse"));
22
+ var SingleMessage_1 = require("./SingleMessage");
23
+ var useFocusTrap_1 = require("./useFocusTrap");
24
+ var Translate_1 = require("./Translate");
25
+ var theme_1 = require("../../src/theme");
26
+ var LanguageContext_1 = require("./LanguageContext");
27
+ require("@fontsource/roboto");
28
+ require("@fontsource/titillium-web");
29
+ var Chatbot = function (_a) {
30
+ var icon = _a.icon, title = _a.title, _b = _a.initialMessage, initialMessage = _b === void 0 ? "Benvenuti su Openk9, hai dei dubbi? non esitare a chiedere" : _b, nameChatbot = _a.nameChatbot, themeCustom = _a.themeCustom, language = _a.language, tenant = _a.tenant, callbackAuthorization = _a.callbackAuthorization;
31
+ return ((0, jsx_runtime_1.jsx)(react_1["default"].Fragment, { children: (0, jsx_runtime_1.jsx)(material_1.ThemeProvider, __assign({ theme: themeCustom || theme_1.defaultThemeK9 }, { children: (0, jsx_runtime_1.jsx)(LanguageContext_1.LanguageProvider, __assign({ initialLanguage: language }, { children: (0, jsx_runtime_1.jsx)(StructureChatbot, { icon: icon, title: title, initialMessage: initialMessage, nameChatbot: nameChatbot, tenant: tenant, callbackAuthorization: callbackAuthorization }) })) })) }));
32
+ };
33
+ var StructureChatbot = function (_a) {
34
+ var icon = _a.icon, title = _a.title, _b = _a.initialMessage, initialMessage = _b === void 0 ? "Benvenuti su Openk9, hai dei dubbi? non esitare a chiedere" : _b, nameChatbot = _a.nameChatbot, _c = _a.tenant, tenant = _c === void 0 ? "" : _c, callbackAuthorization = _a.callbackAuthorization;
35
+ var _d = react_1["default"].useState(false), isView = _d[0], setIsView = _d[1];
36
+ var _e = react_1["default"].useState(""), welcomeMessageTime = _e[0], setWelcomeMessageTime = _e[1];
37
+ var chatbotSearchRef = react_1["default"].useRef(null);
38
+ var theme = (0, material_1.useTheme)();
39
+ var _f = (0, useGenerateResponse_1["default"])({
40
+ initialMessages: [],
41
+ tenant: tenant,
42
+ callbackAuthorization: callbackAuthorization
43
+ }), messages = _f.messages, generateResponse = _f.generateResponse, cancelAllResponses = _f.cancelAllResponses, isChatting = _f.isChatting, isGenerateMessage = _f.isLoading, resetMessage = _f.resetMessage;
44
+ var trapRef = (0, useFocusTrap_1.useFocusTrap)(isView)[0];
45
+ var messagesEndRef = react_1["default"].useRef(null);
46
+ react_1["default"].useEffect(function () {
47
+ if (messages && messagesEndRef.current) {
48
+ messagesEndRef.current.scrollIntoView({ behavior: "smooth" });
49
+ }
50
+ }, [messages]);
51
+ react_1["default"].useEffect(function () {
52
+ var currentTime = new Date();
53
+ setWelcomeMessageTime(currentTime.toLocaleTimeString([], {
54
+ hour: "2-digit",
55
+ minute: "2-digit"
56
+ }));
57
+ }, []);
58
+ react_1["default"].useEffect(function () {
59
+ if (isView && chatbotSearchRef.current) {
60
+ chatbotSearchRef.current.focus();
61
+ }
62
+ }, [isView]);
63
+ return ((0, jsx_runtime_1.jsxs)(material_1.Box, __assign({ className: "openk9-chatbot-structure", ref: trapRef, sx: {
64
+ display: "flex",
65
+ justifyContent: "flex-start",
66
+ alignItems: "flex-end",
67
+ bgcolor: "trasparent",
68
+ flexDirection: "column",
69
+ gap: "12px"
70
+ } }, { children: [isView && ((0, jsx_runtime_1.jsxs)(material_1.Box, __assign({ className: "openk9-chatbot-container", sx: {
71
+ position: { xs: "fixed", sm: "unset" },
72
+ top: { xs: "0", sm: "unset" },
73
+ left: { xs: "0", sm: "unset" },
74
+ display: "flex",
75
+ flexDirection: "column",
76
+ border: {
77
+ xs: "unset",
78
+ sm: "1px solid ".concat(theme.palette.divider)
79
+ },
80
+ borderRadius: { xs: "unset", sm: theme.shape.borderRadius * 2 },
81
+ backgroundColor: theme.palette.primary.contrastText,
82
+ height: { xs: "100vh", sm: "460px" },
83
+ width: { xs: "100vw", sm: "365px" },
84
+ boxShadow: theme.shadows[3],
85
+ zIndex: 2
86
+ } }, { children: [(0, jsx_runtime_1.jsx)(ChatbotHeader, { title: title, icon: icon, isChatting: isChatting, resetMessage: resetMessage, setIsView: setIsView }), (0, jsx_runtime_1.jsx)(MessageList, { messages: messages, icon: icon, welcomeMessageTime: welcomeMessageTime, initialMessage: initialMessage, isGenerateMessage: isGenerateMessage, messagesEndRef: messagesEndRef, nameChatbot: nameChatbot }), (0, jsx_runtime_1.jsx)(Search_1["default"], { handleSearch: generateResponse, cancelAllResponses: cancelAllResponses, isChatting: isChatting, icon: icon, chatbotSearchRef: chatbotSearchRef })] }))), (0, jsx_runtime_1.jsx)(material_1.Button, __assign({ className: "openk9-toggle-chatbot-button", "aria-label": isView
87
+ ? (0, Translate_1.Translate)({ label: "closeChatbot" })
88
+ : (0, Translate_1.Translate)({ label: "openChatbot" }), sx: {
89
+ borderRadius: "50%",
90
+ color: "white",
91
+ display: { xs: isView ? "none" : "unset", sm: "flex" },
92
+ minWidth: "56px",
93
+ width: "56px",
94
+ height: "56px",
95
+ boxShadow: theme.shadows[3],
96
+ background: theme.palette.primary.main,
97
+ padding: 0,
98
+ "&:hover": {
99
+ background: theme.palette.primary.light,
100
+ boxShadow: theme.shadows[3]
101
+ }
102
+ }, onClick: function () { return setIsView(!isView); } }, { children: (0, jsx_runtime_1.jsx)(material_1.Box, __assign({ className: "openk9-toggle-icon-wrapper", sx: {
103
+ justifyContent: "center",
104
+ display: "flex",
105
+ height: "100%",
106
+ width: "100%",
107
+ alignItems: "center"
108
+ } }, { children: isView ? icon.closeIcon : icon.buttonIcon })) }))] })));
109
+ };
110
+ var ChatbotHeader = function (_a) {
111
+ var title = _a.title, icon = _a.icon, isChatting = _a.isChatting, resetMessage = _a.resetMessage, setIsView = _a.setIsView;
112
+ var theme = (0, material_1.useTheme)();
113
+ return ((0, jsx_runtime_1.jsxs)(material_1.Box, __assign({ className: "openk9-chatbot-header", sx: {
114
+ display: "flex",
115
+ alignItems: "center",
116
+ borderBottom: "1px solid ".concat(theme.palette.divider),
117
+ pb: theme.spacing(2),
118
+ mb: theme.spacing(2),
119
+ gap: theme.spacing(2),
120
+ padding: "12px",
121
+ paddingBottom: "0px",
122
+ marginBottom: "12px",
123
+ justifyContent: "space-between"
124
+ } }, { children: [(0, jsx_runtime_1.jsx)(material_1.Box, __assign({ className: "openk9-logo-icon", sx: {
125
+ minWidth: 0,
126
+ padding: 0
127
+ } }, { children: icon.logoIcon })), (0, jsx_runtime_1.jsx)("div", { children: title }), (0, jsx_runtime_1.jsxs)(material_1.Box, __assign({ className: "openk9-header-buttons", display: "flex", gap: "5px", alignItems: "center" }, { children: [(0, jsx_runtime_1.jsx)(material_1.Button, __assign({ className: "openk9-refresh-button", disabled: isChatting, onClick: resetMessage, "aria-label": (0, Translate_1.Translate)({ label: "clearChat" }), sx: {
128
+ minWidth: 0,
129
+ padding: 0,
130
+ height: "24px",
131
+ width: "24px"
132
+ } }, { children: icon.refreshChatIcon })), (0, jsx_runtime_1.jsx)(material_1.IconButton, __assign({ className: "openk9-close-button", onClick: function () { return setIsView(false); }, role: "button", size: "small", sx: { display: { xs: "block", sm: "none" } }, "aria-label": (0, Translate_1.Translate)({ label: "closeChatbot" }) }, { children: icon.closeModal }))] }))] })));
133
+ };
134
+ var MessageList = function (_a) {
135
+ var messages = _a.messages, icon = _a.icon, initialMessage = _a.initialMessage, isGenerateMessage = _a.isGenerateMessage, messagesEndRef = _a.messagesEndRef, nameChatbot = _a.nameChatbot, _b = _a.welcomeMessageTime, welcomeMessageTime = _b === void 0 ? "" : _b;
136
+ return ((0, jsx_runtime_1.jsx)(material_1.Box, __assign({ className: "openk9-message-list-container", component: "section", sx: {
137
+ flex: 1,
138
+ display: "flex",
139
+ flexDirection: "column",
140
+ overflow: "hidden"
141
+ } }, { children: (0, jsx_runtime_1.jsxs)(material_1.Box, __assign({ className: "openk9-message-list", sx: {
142
+ flex: 1,
143
+ overflowY: "auto",
144
+ paddingInline: "16px",
145
+ gap: "12px",
146
+ display: "flex",
147
+ flexDirection: "column",
148
+ alignItems: "flex-start",
149
+ bgcolor: "transparent"
150
+ } }, { children: [(0, jsx_runtime_1.jsx)(SingleMessage_1.SingleMessage, { contentMessage: initialMessage, isChatbot: true, timeMessage: welcomeMessageTime, icon: icon.chatbotIcon, isLoading: false, nameChatbot: nameChatbot }), messages.length > 0 &&
151
+ messages.map(function (message, index) {
152
+ var sendTime = (message === null || message === void 0 ? void 0 : message.sendTime)
153
+ ? new Date(message === null || message === void 0 ? void 0 : message.sendTime).toLocaleTimeString([], {
154
+ hour: "2-digit",
155
+ minute: "2-digit"
156
+ })
157
+ : "";
158
+ var responseTime = (message === null || message === void 0 ? void 0 : message.responseTime)
159
+ ? new Date(message === null || message === void 0 ? void 0 : message.responseTime).toLocaleTimeString([], {
160
+ hour: "2-digit",
161
+ minute: "2-digit"
162
+ })
163
+ : (message === null || message === void 0 ? void 0 : message.responseTime) || "";
164
+ return ((0, jsx_runtime_1.jsxs)(react_1["default"].Fragment, { children: [(0, jsx_runtime_1.jsx)(SingleMessage_1.SingleMessage, { contentMessage: message.question, isChatbot: false, timeMessage: sendTime, icon: icon.userIcon, isLoading: false }), (0, jsx_runtime_1.jsx)(SingleMessage_1.SingleMessage, { contentMessage: message.answer, status: message.status, sources: message === null || message === void 0 ? void 0 : message.sources, isChatbot: true, timeMessage: responseTime, icon: icon.chatbotIcon, isLoading: (isGenerateMessage === null || isGenerateMessage === void 0 ? void 0 : isGenerateMessage.id) === message.id &&
165
+ (isGenerateMessage === null || isGenerateMessage === void 0 ? void 0 : isGenerateMessage.isLoading), nameChatbot: nameChatbot }), index === messages.length - 1 && (0, jsx_runtime_1.jsx)("div", { ref: messagesEndRef })] }, index));
166
+ })] })) })));
167
+ };
168
+ exports["default"] = Chatbot;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ exports.__esModule = true;
14
+ exports.LanguageProvider = void 0;
15
+ var jsx_runtime_1 = require("react/jsx-runtime");
16
+ var react_1 = require("react");
17
+ var LanguageContext = (0, react_1.createContext)(undefined);
18
+ function remappingLanguage(language) {
19
+ switch (language) {
20
+ case "en":
21
+ return "en_US";
22
+ case "it":
23
+ return "it_IT";
24
+ case "es":
25
+ return "es_ES";
26
+ case "de":
27
+ return "de_DE";
28
+ case "fr":
29
+ return "fr_FR";
30
+ default:
31
+ return language;
32
+ }
33
+ }
34
+ var LanguageProvider = function (_a) {
35
+ var children = _a.children, initialLanguage = _a.initialLanguage;
36
+ var _b = (0, react_1.useState)(initialLanguage
37
+ ? remappingLanguage(initialLanguage)
38
+ : remappingLanguage(document.documentElement.lang || "en")), language = _b[0], setLanguage = _b[1];
39
+ (0, react_1.useEffect)(function () {
40
+ if (initialLanguage) {
41
+ setLanguage(remappingLanguage(initialLanguage));
42
+ }
43
+ }, [initialLanguage]);
44
+ (0, react_1.useEffect)(function () {
45
+ var handleLangChange = function () {
46
+ setLanguage(remappingLanguage(document.documentElement.lang || "en"));
47
+ };
48
+ var observer = new MutationObserver(function (mutationsList) {
49
+ for (var _i = 0, mutationsList_1 = mutationsList; _i < mutationsList_1.length; _i++) {
50
+ var mutation = mutationsList_1[_i];
51
+ if (mutation.type === "attributes" &&
52
+ mutation.attributeName === "lang") {
53
+ handleLangChange();
54
+ }
55
+ }
56
+ });
57
+ observer.observe(document.documentElement, { attributes: true });
58
+ return function () { return observer.disconnect(); };
59
+ }, []);
60
+ return ((0, jsx_runtime_1.jsx)(LanguageContext.Provider, __assign({ value: { language: language, setLanguage: setLanguage } }, { children: children })));
61
+ };
62
+ exports.LanguageProvider = LanguageProvider;
63
+ exports["default"] = LanguageContext;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ exports.__esModule = true;
17
+ var jsx_runtime_1 = require("react/jsx-runtime");
18
+ var material_1 = require("@mui/material");
19
+ var react_1 = __importDefault(require("react"));
20
+ var Translate_1 = require("./Translate");
21
+ function Search(_a) {
22
+ var handleSearch = _a.handleSearch, isChatting = _a.isChatting, icon = _a.icon, chatbotSearchRef = _a.chatbotSearchRef;
23
+ var _b = react_1["default"].useState(""), search = _b[0], setSearch = _b[1];
24
+ var theme = (0, material_1.useTheme)();
25
+ return ((0, jsx_runtime_1.jsx)("form", __assign({ className: "openk9-search-form", onSubmit: function (event) {
26
+ event.preventDefault();
27
+ handleSearch(search);
28
+ setSearch("");
29
+ }, style: {
30
+ display: "flex",
31
+ gap: "15px",
32
+ padding: "12px",
33
+ borderTop: "1px solid #C7C7C7C7"
34
+ } }, { children: (0, jsx_runtime_1.jsxs)(material_1.Box, __assign({ className: "openk9-search-box", display: "flex", width: "100%", gap: 1 }, { children: [(0, jsx_runtime_1.jsx)(material_1.TextField, { className: "openk9-search-input", fullWidth: true, inputRef: chatbotSearchRef, variant: "outlined", value: search, onChange: function (event) { return setSearch(event.currentTarget.value); }, placeholder: (0, Translate_1.Translate)({ label: "customPlaceholder" }), sx: { width: "100%", background: "white" }, inputProps: {
35
+ style: {
36
+ padding: 0,
37
+ paddingInline: "6px",
38
+ height: "29px",
39
+ fontSize: "12px",
40
+ fontWeight: "400",
41
+ lineHeight: "18.25px",
42
+ textAlign: "left",
43
+ borderRadius: theme.shape.borderRadius * 2
44
+ }
45
+ } }), (0, jsx_runtime_1.jsx)(material_1.Button, __assign({ className: "openk9-search-button", type: "submit", variant: "contained", "aria-label": (0, Translate_1.Translate)({ label: "startQuestion" }), color: "primary", sx: {
46
+ backgroundColor: theme.palette.primary.main,
47
+ color: theme.palette.primary.contrastText,
48
+ stroke: "white",
49
+ fill: "transparent",
50
+ minWidth: "29px",
51
+ height: "29px",
52
+ padding: 0,
53
+ borderRadius: theme.shape.borderRadius
54
+ }, disabled: search === "" || isChatting }, { children: icon.searchIcon }))] })) })));
55
+ }
56
+ exports["default"] = Search;