wineater-bot 1.1.5 → 1.1.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/wineater-chatbot.mjs +35 -11
- package/dist/wineater-chatbot.umd.js +30 -12
- package/package.json +1 -1
- package/src/index.js +21 -0
- package/src/js/styles.js +21 -3
- package/src/js/ui.js +12 -1
|
@@ -30,6 +30,24 @@ const g = `
|
|
|
30
30
|
box-shadow: 0 2px 10px rgba(0,0,0,0.2); /* Optional: add shadow for depth */
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
/* Position class for bottom-right */
|
|
34
|
+
.chat-icon-bottom-right {
|
|
35
|
+
position: fixed;
|
|
36
|
+
bottom: 20px;
|
|
37
|
+
right: 20px;
|
|
38
|
+
/* Other styles for the bottom-right button */
|
|
39
|
+
/* ... */
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.chat-icon-right-center {
|
|
43
|
+
position: fixed;
|
|
44
|
+
top: 50%;
|
|
45
|
+
right: -100px;
|
|
46
|
+
transform: translateY(-50%) rotate(90deg);
|
|
47
|
+
/* Additional styling for the button */
|
|
48
|
+
/* ... */
|
|
49
|
+
}
|
|
50
|
+
|
|
33
51
|
#chat-icon img {
|
|
34
52
|
width: 40px; /* Adjust icon size as needed */
|
|
35
53
|
height: auto;
|
|
@@ -44,13 +62,13 @@ const g = `
|
|
|
44
62
|
|
|
45
63
|
/* Chat window styles */
|
|
46
64
|
#chat-window {
|
|
65
|
+
position: fixed;
|
|
66
|
+
bottom: 20px; /* Set to the desired distance from the bottom */
|
|
67
|
+
right: 20px; /* Set to the desired distance from the right */
|
|
47
68
|
width: 350px; /* Width of the chat window */
|
|
48
69
|
background-color: white;
|
|
49
70
|
border-radius: 8px;
|
|
50
71
|
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
|
|
51
|
-
position: absolute;
|
|
52
|
-
bottom: 80px; /* Positioning from the bottom */
|
|
53
|
-
right: 0;
|
|
54
72
|
display: none; /* Initially hidden */
|
|
55
73
|
}
|
|
56
74
|
|
|
@@ -262,21 +280,22 @@ const g = `
|
|
|
262
280
|
d.textContent = g;
|
|
263
281
|
document.head.appendChild(d);
|
|
264
282
|
function c() {
|
|
265
|
-
document.getElementById("chat-window").
|
|
283
|
+
const n = document.getElementById("chat-window"), t = document.getElementById("chat-icon");
|
|
284
|
+
n.classList.contains("visible") ? (n.classList.remove("visible"), t.style.display = "flex") : (n.classList.add("visible"), t.style.display = "none");
|
|
266
285
|
}
|
|
267
286
|
function h() {
|
|
268
287
|
document.getElementById("chat-window").classList.remove("visible");
|
|
269
288
|
}
|
|
270
|
-
function
|
|
289
|
+
function m() {
|
|
271
290
|
document.getElementById("chat-window").classList.add("visible");
|
|
272
291
|
}
|
|
273
292
|
document.addEventListener("DOMContentLoaded", () => {
|
|
274
293
|
setupCloseButton(), setupOutsideClick();
|
|
275
294
|
});
|
|
276
|
-
const
|
|
295
|
+
const u = ["climats", "telckel", "biobio"];
|
|
277
296
|
class f {
|
|
278
297
|
constructor(t) {
|
|
279
|
-
this.apiEndpoint = t || "https://api.wineater.com/dish/recommendations", this.store =
|
|
298
|
+
this.apiEndpoint = t || "https://api.wineater.com/dish/recommendations", this.store = u.find((e) => window.location.href.includes(e)), console.log(this.store);
|
|
280
299
|
}
|
|
281
300
|
async getWineRecommendations(t) {
|
|
282
301
|
console.log(window.location.href);
|
|
@@ -351,7 +370,7 @@ class b {
|
|
|
351
370
|
}
|
|
352
371
|
}
|
|
353
372
|
document.addEventListener("DOMContentLoaded", () => {
|
|
354
|
-
window.toggleChatWindow = c, window.closeChatWindow = h, window.openChatWindow =
|
|
373
|
+
window.toggleChatWindow = c, window.closeChatWindow = h, window.openChatWindow = m;
|
|
355
374
|
});
|
|
356
375
|
function y() {
|
|
357
376
|
document.body.insertAdjacentHTML("beforeend", `
|
|
@@ -388,14 +407,19 @@ function w() {
|
|
|
388
407
|
function x() {
|
|
389
408
|
window.addEventListener("click", function(n) {
|
|
390
409
|
const t = document.getElementById("chat-window"), e = document.getElementById("chat-icon");
|
|
391
|
-
!t.contains(n.target) && !e.contains(n.target) && t.classList.remove("visible");
|
|
410
|
+
!t.contains(n.target) && !e.contains(n.target) && (t.classList.remove("visible"), e.style.display = "flex");
|
|
392
411
|
});
|
|
393
412
|
}
|
|
413
|
+
function v(n) {
|
|
414
|
+
console.log(n);
|
|
415
|
+
const t = document.getElementById("chat-icon"), e = document.getElementById("chat-window");
|
|
416
|
+
t.className = "", e.className = "", n === "right-center" ? (t.classList.add("chat-icon-right-center"), e.classList.add("right-center-aligned")) : t.classList.add("chat-icon-bottom-right");
|
|
417
|
+
}
|
|
394
418
|
typeof window < "u" && window.addEventListener("DOMContentLoaded", () => {
|
|
395
|
-
y(), w(), x(), new b().initialize();
|
|
419
|
+
y(), w(), x(), v("right-center"), new b().initialize();
|
|
396
420
|
});
|
|
397
421
|
export {
|
|
398
422
|
h as closeChatWindow,
|
|
399
|
-
|
|
423
|
+
m as openChatWindow,
|
|
400
424
|
c as toggleChatWindow
|
|
401
425
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(
|
|
1
|
+
(function(i,s){typeof exports=="object"&&typeof module<"u"?s(exports):typeof define=="function"&&define.amd?define(["exports"],s):(i=typeof globalThis<"u"?globalThis:i||self,s(i.WineaterChatbot={}))})(this,function(i){"use strict";var v=Object.defineProperty;var E=(i,s,r)=>s in i?v(i,s,{enumerable:!0,configurable:!0,writable:!0,value:r}):i[s]=r;var h=(i,s,r)=>(E(i,typeof s!="symbol"?s+"":s,r),r);const s=`
|
|
2
2
|
@font-face {
|
|
3
3
|
font-family: 'Poppins';
|
|
4
4
|
src: url('https://fonts.googleapis.com/css2?family=Poppins:wght@400&display=swap');
|
|
@@ -27,6 +27,24 @@
|
|
|
27
27
|
box-shadow: 0 2px 10px rgba(0,0,0,0.2); /* Optional: add shadow for depth */
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
/* Position class for bottom-right */
|
|
31
|
+
.chat-icon-bottom-right {
|
|
32
|
+
position: fixed;
|
|
33
|
+
bottom: 20px;
|
|
34
|
+
right: 20px;
|
|
35
|
+
/* Other styles for the bottom-right button */
|
|
36
|
+
/* ... */
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.chat-icon-right-center {
|
|
40
|
+
position: fixed;
|
|
41
|
+
top: 50%;
|
|
42
|
+
right: -100px;
|
|
43
|
+
transform: translateY(-50%) rotate(90deg);
|
|
44
|
+
/* Additional styling for the button */
|
|
45
|
+
/* ... */
|
|
46
|
+
}
|
|
47
|
+
|
|
30
48
|
#chat-icon img {
|
|
31
49
|
width: 40px; /* Adjust icon size as needed */
|
|
32
50
|
height: auto;
|
|
@@ -41,13 +59,13 @@
|
|
|
41
59
|
|
|
42
60
|
/* Chat window styles */
|
|
43
61
|
#chat-window {
|
|
62
|
+
position: fixed;
|
|
63
|
+
bottom: 20px; /* Set to the desired distance from the bottom */
|
|
64
|
+
right: 20px; /* Set to the desired distance from the right */
|
|
44
65
|
width: 350px; /* Width of the chat window */
|
|
45
66
|
background-color: white;
|
|
46
67
|
border-radius: 8px;
|
|
47
68
|
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
|
|
48
|
-
position: absolute;
|
|
49
|
-
bottom: 80px; /* Positioning from the bottom */
|
|
50
|
-
right: 0;
|
|
51
69
|
display: none; /* Initially hidden */
|
|
52
70
|
}
|
|
53
71
|
|
|
@@ -255,13 +273,13 @@
|
|
|
255
273
|
.typing-indicator.visible {
|
|
256
274
|
visibility: visible;
|
|
257
275
|
height: 50px;
|
|
258
|
-
}`,r=document.createElement("style");r.textContent=
|
|
259
|
-
<strong>${
|
|
260
|
-
Prix: ${
|
|
261
|
-
Région: ${
|
|
262
|
-
Type: ${
|
|
263
|
-
<a href="${
|
|
264
|
-
`,
|
|
276
|
+
}`,r=document.createElement("style");r.textContent=s,document.head.appendChild(r);function d(){const n=document.getElementById("chat-window"),t=document.getElementById("chat-icon");n.classList.contains("visible")?(n.classList.remove("visible"),t.style.display="flex"):(n.classList.add("visible"),t.style.display="none")}function c(){document.getElementById("chat-window").classList.remove("visible")}function l(){document.getElementById("chat-window").classList.add("visible")}document.addEventListener("DOMContentLoaded",()=>{setupCloseButton(),setupOutsideClick()});const u=["climats","telckel","biobio"];class m{constructor(t){this.apiEndpoint=t||"https://api.wineater.com/dish/recommendations",this.store=u.find(e=>window.location.href.includes(e)),console.log(this.store)}async getWineRecommendations(t){console.log(window.location.href);try{const e=await fetch(this.apiEndpoint,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({text:t,store:this.store?this.store.toString().charAt(0).toUpperCase()+this.store.slice(1):void 0})}),o=await e.json();if(!e.ok)throw new Error(`API call failed with status ${e.status}: ${o.message||"No additional error information"}`);return o}catch(e){throw console.error("Fetching wine recommendations failed:",e.message),new Error(`Error in getWineRecommendations: ${e.message}`)}}}class f{constructor(){h(this,"welcomeMessage","Sublimez votre expérience gastronomique. Il vous suffit de donner les détails de votre plat, et obtenez la recommandation de compagnon de vin idéale. Que voulez-vous manger?");this.api=new m,this.displayFirstMessage(this.welcomeMessage)}initialize(){document.getElementById("send-button").addEventListener("click",()=>this.handleUserInput()),document.getElementById("user-input").addEventListener("keypress",o=>{o.key==="Enter"&&this.handleUserInput()})}displayFirstMessage(t,e="api"){const o=document.getElementById("message-container"),a=document.createElement("div");a.className=`message ${e}`,a.textContent=t,o.appendChild(a),o.scrollTop=o.scrollHeight}async handleUserInput(){const t=document.getElementById("user-input"),e=t.value.trim();if(e){this.displayMessage(e,"user"),t.value="",this.showTypingIndicator();try{const o=await this.api.getWineRecommendations(e);this.hideTypingIndicator(),o&&o.length?this.displayResults(o):this.displayMessage("No results found.","api")}catch(o){this.hideTypingIndicator(),console.error("Error fetching wine recommendations:",o),this.displayMessage("Sorry, something went wrong.","api")}}}showTypingIndicator(){document.getElementById("typing-indicator").classList.add("visible")}hideTypingIndicator(){document.getElementById("typing-indicator").classList.remove("visible")}displayMessage(t,e){const o=document.getElementById("message-container"),a=document.createElement("div");a.textContent=t,a.className="message "+e,o.appendChild(a),o.scrollTop=o.scrollHeight}displayResults(t){const e=document.getElementById("message-container");t.forEach(o=>{const a=document.createElement("div");a.className="wine-item";const p=document.createElement("img");p.src=o.Image,a.appendChild(p);const g=document.createElement("div");g.innerHTML=`
|
|
277
|
+
<strong>${o.Title}</strong><br>
|
|
278
|
+
Prix: ${o.Price}<br>
|
|
279
|
+
Région: ${o.Region}<br>
|
|
280
|
+
Type: ${o.Type}<br>
|
|
281
|
+
<a href="${o.Url}" target="_blank">Plus d'infos</a>
|
|
282
|
+
`,a.appendChild(g),e.appendChild(a)}),e.scrollTop=e.scrollHeight}}document.addEventListener("DOMContentLoaded",()=>{window.toggleChatWindow=d,window.closeChatWindow=c,window.openChatWindow=l});function b(){document.body.insertAdjacentHTML("beforeend",`
|
|
265
283
|
<div id="chatbot-container">
|
|
266
284
|
<div id="chat-icon" onclick="toggleChatWindow()">
|
|
267
285
|
<img src="https://landing-static.s3.eu-central-1.amazonaws.com/images/chat-icon.svg" alt="Chat Icon"> <!-- Update the path to your logo image -->
|
|
@@ -287,4 +305,4 @@
|
|
|
287
305
|
</div>
|
|
288
306
|
</div>
|
|
289
307
|
</div>
|
|
290
|
-
`)}function y(){document.getElementById("close-btn").addEventListener("click",d)}function w(){window.addEventListener("click",function(
|
|
308
|
+
`)}function y(){document.getElementById("close-btn").addEventListener("click",d)}function w(){window.addEventListener("click",function(n){const t=document.getElementById("chat-window"),e=document.getElementById("chat-icon");!t.contains(n.target)&&!e.contains(n.target)&&(t.classList.remove("visible"),e.style.display="flex")})}function x(n){console.log(n);const t=document.getElementById("chat-icon"),e=document.getElementById("chat-window");t.className="",e.className="",n==="right-center"?(t.classList.add("chat-icon-right-center"),e.classList.add("right-center-aligned")):t.classList.add("chat-icon-bottom-right")}typeof window<"u"&&window.addEventListener("DOMContentLoaded",()=>{b(),y(),w(),x("right-center"),new f().initialize()}),i.closeChatWindow=c,i.openChatWindow=l,i.toggleChatWindow=d,Object.defineProperty(i,Symbol.toStringTag,{value:"Module"})});
|
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -14,6 +14,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|
|
14
14
|
window.toggleChatWindow = toggleChatWindow;
|
|
15
15
|
window.closeChatWindow = closeChatWindow;
|
|
16
16
|
window.openChatWindow = openChatWindow;
|
|
17
|
+
|
|
17
18
|
});
|
|
18
19
|
|
|
19
20
|
export {
|
|
@@ -65,16 +66,36 @@ function setupOutsideClick() {
|
|
|
65
66
|
const chatIcon = document.getElementById('chat-icon');
|
|
66
67
|
if (!chatWindow.contains(event.target) && !chatIcon.contains(event.target)) {
|
|
67
68
|
chatWindow.classList.remove('visible');
|
|
69
|
+
chatIcon.style.display = 'flex'; // Show the chat icon/button
|
|
68
70
|
}
|
|
69
71
|
});
|
|
70
72
|
}
|
|
71
73
|
|
|
74
|
+
// Function to toggle the chat icon position
|
|
75
|
+
function toggleChatIconPosition(position) {
|
|
76
|
+
console.log(position);
|
|
77
|
+
const chatIcon = document.getElementById('chat-icon');
|
|
78
|
+
const chatWindow = document.getElementById('chat-window');
|
|
79
|
+
|
|
80
|
+
chatIcon.className = ''; // Reset classes
|
|
81
|
+
chatWindow.className = ''; // Reset classes
|
|
82
|
+
|
|
83
|
+
if (position === 'right-center') {
|
|
84
|
+
chatIcon.classList.add('chat-icon-right-center');
|
|
85
|
+
chatWindow.classList.add('right-center-aligned');
|
|
86
|
+
} else {
|
|
87
|
+
// Apply bottom-right or other default classes as needed
|
|
88
|
+
chatIcon.classList.add('chat-icon-bottom-right');
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
72
92
|
// If you want to initialize your chatbot automatically when the script is loaded
|
|
73
93
|
if (typeof window !== 'undefined') {
|
|
74
94
|
window.addEventListener('DOMContentLoaded', () => {
|
|
75
95
|
createChatbotUI(); // Create the UI
|
|
76
96
|
setupCloseButton();
|
|
77
97
|
setupOutsideClick();
|
|
98
|
+
toggleChatIconPosition('right-center');
|
|
78
99
|
const myChatbot = new Chatbot();
|
|
79
100
|
myChatbot.initialize();
|
|
80
101
|
});
|
package/src/js/styles.js
CHANGED
|
@@ -28,6 +28,24 @@ const css = `
|
|
|
28
28
|
box-shadow: 0 2px 10px rgba(0,0,0,0.2); /* Optional: add shadow for depth */
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
+
/* Position class for bottom-right */
|
|
32
|
+
.chat-icon-bottom-right {
|
|
33
|
+
position: fixed;
|
|
34
|
+
bottom: 20px;
|
|
35
|
+
right: 20px;
|
|
36
|
+
/* Other styles for the bottom-right button */
|
|
37
|
+
/* ... */
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.chat-icon-right-center {
|
|
41
|
+
position: fixed;
|
|
42
|
+
top: 50%;
|
|
43
|
+
right: -100px;
|
|
44
|
+
transform: translateY(-50%) rotate(90deg);
|
|
45
|
+
/* Additional styling for the button */
|
|
46
|
+
/* ... */
|
|
47
|
+
}
|
|
48
|
+
|
|
31
49
|
#chat-icon img {
|
|
32
50
|
width: 40px; /* Adjust icon size as needed */
|
|
33
51
|
height: auto;
|
|
@@ -42,13 +60,13 @@ const css = `
|
|
|
42
60
|
|
|
43
61
|
/* Chat window styles */
|
|
44
62
|
#chat-window {
|
|
63
|
+
position: fixed;
|
|
64
|
+
bottom: 20px; /* Set to the desired distance from the bottom */
|
|
65
|
+
right: 20px; /* Set to the desired distance from the right */
|
|
45
66
|
width: 350px; /* Width of the chat window */
|
|
46
67
|
background-color: white;
|
|
47
68
|
border-radius: 8px;
|
|
48
69
|
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
|
|
49
|
-
position: absolute;
|
|
50
|
-
bottom: 80px; /* Positioning from the bottom */
|
|
51
|
-
right: 0;
|
|
52
70
|
display: none; /* Initially hidden */
|
|
53
71
|
}
|
|
54
72
|
|
package/src/js/ui.js
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
export function toggleChatWindow() {
|
|
2
2
|
const chatWindow = document.getElementById('chat-window');
|
|
3
|
-
|
|
3
|
+
const chatIcon = document.getElementById('chat-icon');
|
|
4
|
+
|
|
5
|
+
// Check if the chat window is currently visible
|
|
6
|
+
const isWindowOpen = chatWindow.classList.contains('visible');
|
|
7
|
+
|
|
8
|
+
if (isWindowOpen) {
|
|
9
|
+
chatWindow.classList.remove('visible');
|
|
10
|
+
chatIcon.style.display = 'flex'; // Show the chat icon/button
|
|
11
|
+
} else {
|
|
12
|
+
chatWindow.classList.add('visible');
|
|
13
|
+
chatIcon.style.display = 'none'; // Hide the chat icon/button
|
|
14
|
+
}
|
|
4
15
|
}
|
|
5
16
|
|
|
6
17
|
export function closeChatWindow() {
|