wineater-bot 3.9.4 → 4.0.0-beta.3

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 (41) hide show
  1. package/.prettierignore +9 -0
  2. package/.prettierrc +16 -0
  3. package/README.md +86 -0
  4. package/dist/wineater-chatbot.css +1 -0
  5. package/dist/wineater-chatbot.mjs +6493 -5129
  6. package/dist/wineater-chatbot.umd.js +40 -985
  7. package/docs/SVELTE.md +146 -0
  8. package/e2e/demo.test.ts +6 -0
  9. package/eslint.config.js +41 -0
  10. package/index.html +11 -3
  11. package/package.json +30 -5
  12. package/playwright.config.ts +9 -0
  13. package/pnpm-workspace.yaml +2 -0
  14. package/src/App.svelte +394 -0
  15. package/src/App.svelte.test.ts +13 -0
  16. package/src/components/Footer.svelte +131 -0
  17. package/src/components/Header.svelte +92 -0
  18. package/src/components/Loader.svelte +62 -0
  19. package/src/components/Search.svelte +188 -0
  20. package/src/components/WinePopup.svelte +192 -0
  21. package/src/components/WineTile.svelte +331 -0
  22. package/src/demo.spec.ts +13 -0
  23. package/src/index.js +4 -36
  24. package/src/services/analytics/analytics.ts +103 -0
  25. package/src/{js/widget/widget-events.js → services/analytics/constants.ts} +0 -2
  26. package/src/services/api/api.ts +112 -0
  27. package/src/services/api/deserialize.ts +102 -0
  28. package/src/services/i18n/i18n.ts +134 -0
  29. package/src/services/i18n/translations.json +521 -0
  30. package/src/services/store/app-store.svelte.ts +84 -0
  31. package/tsconfig.json +23 -0
  32. package/vite.config.js +69 -19
  33. package/vitest-setup-client.ts +2 -0
  34. package/src/js/analytics.js +0 -117
  35. package/src/js/api.js +0 -138
  36. package/src/js/i18n.js +0 -703
  37. package/src/js/widget/widget-language.js +0 -107
  38. package/src/js/widget/widget-search.js +0 -68
  39. package/src/js/widget/widget-styles.js +0 -855
  40. package/src/js/widget/widget-ui.js +0 -186
  41. package/src/js/widget.js +0 -241
@@ -0,0 +1,9 @@
1
+ # Package Managers
2
+ package-lock.json
3
+ pnpm-lock.yaml
4
+ yarn.lock
5
+ bun.lock
6
+ bun.lockb
7
+
8
+ # Miscellaneous
9
+ /static/
package/.prettierrc ADDED
@@ -0,0 +1,16 @@
1
+ {
2
+ "useTabs": true,
3
+ "singleQuote": true,
4
+ "trailingComma": "none",
5
+ "printWidth": 100,
6
+ "plugins": ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"],
7
+ "overrides": [
8
+ {
9
+ "files": "*.svelte",
10
+ "options": {
11
+ "parser": "svelte"
12
+ }
13
+ }
14
+ ],
15
+ "tailwindStylesheet": "./src/app.css"
16
+ }
package/README.md ADDED
@@ -0,0 +1,86 @@
1
+ # Wineater Chatbot Widget
2
+
3
+ Embeddable Svelte-based wine recommendation widget.
4
+
5
+ ## Prerequisites
6
+
7
+ - Node.js (LTS recommended)
8
+ - [pnpm](https://pnpm.io/) package manager
9
+
10
+ ## Install dependencies
11
+
12
+ ```bash
13
+ pnpm install
14
+ ```
15
+
16
+ ## Run locally (development)
17
+
18
+ Start the Vite dev server (Svelte app with HMR):
19
+
20
+ ```bash
21
+ pnpm dev
22
+ ```
23
+
24
+ This will start the dev server on:
25
+
26
+ - http://localhost:3001 (as configured in `vite.config.js`)
27
+
28
+ You can open `index.html` directly in the browser or rely on Vite’s default index page, depending on how you integrate the widget during development.
29
+
30
+ ## Build for production
31
+
32
+ Build the library bundles (ESM + UMD):
33
+
34
+ ```bash
35
+ pnpm build
36
+ ```
37
+
38
+ This produces files in the `dist/` directory, including:
39
+
40
+ - `wineater-chatbot.mjs` – ES module build (primary distribution)
41
+ - `wineater-chatbot.umd.js` – legacy UMD/global build (kept for historical reasons; can be removed if not used)
42
+ - CSS asset(s) emitted by Vite/Svelte (e.g. `wineater-chatbot.css` if configured)
43
+
44
+ > Note: The UMD bundle is only generated for backward compatibility. If you do not embed the widget via a plain `<script>` tag in older environments, you can safely remove the UMD output from the build config.
45
+
46
+ ## Using the production bundles
47
+
48
+ ### 1. ESM (modern bundlers / type="module")
49
+
50
+ Use this in apps that can import ES modules (e.g. via Vite/Webpack, or directly in the browser):
51
+
52
+ ```html
53
+ <link rel="stylesheet" href="/path/to/dist/wineater-chatbot.css">
54
+ <div id="wineater-widget-conteiner"></div>
55
+ <script src="/path/to/dist/wineater-chatbot.mjs"></script>
56
+ ```
57
+
58
+ ### 2. UMD (script tag, no bundler)
59
+
60
+ Use this when you want to embed the widget directly on a site via `<script>` and rely on its auto-initialization:
61
+
62
+ ```html
63
+ <link rel="stylesheet" href="/path/to/dist/wineater-chatbot.css">
64
+ <div id="wineater-widget-conteiner"></div>
65
+ <script src="/path/to/dist/wineater-chatbot.umd.js"></script>
66
+ ```
67
+
68
+ No manual JS init is required; the bundle mounts itself when loaded.
69
+
70
+ ## Scripts reference
71
+
72
+ Defined in `package.json`:
73
+
74
+ - `pnpm dev` – start Vite dev server
75
+ - `pnpm build` – build the library with Vite
76
+ - `pnpm test` – run all tests (unit + e2e)
77
+ - `pnpm test:unit` – run unit tests with Vitest
78
+ - `pnpm test:e2e` – run Playwright end-to-end tests
79
+ - `pnpm lint` – run Prettier + ESLint
80
+ - `pnpm format` – format code with Prettier
81
+
82
+ ## Notes
83
+
84
+ - The library entry point is `src/index.js`.
85
+ - Vite is configured in `vite.config.js` to emit both UMD and ESM bundles; the UMD bundle is considered legacy.
86
+ - Svelte components are built as a hydratable widget suitable for embedding on third-party sites.
@@ -0,0 +1 @@
1
+ @import"https://fonts.googleapis.com/css2?family=Bricolage+Grotesque:opsz,wght@12..96,200..800&display=swap";#wine-widget-header.svelte-oiwvqb h1:where(.svelte-oiwvqb){font-family:Bricolage Grotesque,serif;font-weight:600;font-size:24px;margin:0 auto;line-height:1.3;color:#333;text-align:center}.icon.svelte-oiwvqb{display:inline-block;width:1.2em;height:1.2em;vertical-align:middle;margin:0 4px 0 2px;background-repeat:no-repeat;background-size:contain}.icon-meal.svelte-oiwvqb{background-image:url(https://czvgkhagwvmknscoerfy.supabase.co/storage/v1/object/public/static-media//meal1.svg)}.icon-meal.svelte-oiwvqb:hover{background-image:url(https://czvgkhagwvmknscoerfy.supabase.co/storage/v1/object/public/static-media//meal3.svg)}.icon-mood.svelte-oiwvqb{background-image:url(https://czvgkhagwvmknscoerfy.supabase.co/storage/v1/object/public/static-media//mood.svg)}.icon-occasion.svelte-oiwvqb{background-image:url(https://czvgkhagwvmknscoerfy.supabase.co/storage/v1/object/public/static-media//ocasion.svg)}.icon-label.svelte-oiwvqb{color:var(--wineater-color);font-weight:500}@media screen and (max-width: 768px){#wine-widget-header.svelte-oiwvqb h1:where(.svelte-oiwvqb){display:none}}#powered-by-widget.svelte-1sr6y3t{position:relative;border-top:2px solid #f6f7fd;font-family:Bricolage Grotesque,sans-serif;font-weight:200;padding:12px 24px;min-height:40px}#powered-by-widget.svelte-1sr6y3t .powered-by-center:where(.svelte-1sr6y3t){position:absolute;left:50%;transform:translate(-50%);text-align:center}#powered-by-widget.svelte-1sr6y3t .powered-by-lang:where(.svelte-1sr6y3t){position:absolute;right:0;top:50%;transform:translateY(-50%)}.language-dropdown.svelte-1sr6y3t{padding:4px;border-radius:6px;border:2px solid var(--wineater-color);background-color:#fff;color:var(--wineater-color);font-weight:500;font-family:Bricolage Grotesque,sans-serif;font-size:12px;cursor:pointer;transition:all .2s ease}.language-dropdown.svelte-1sr6y3t:hover{box-shadow:0 4px 8px #7b2beb33}#powered-by-widget.svelte-1sr6y3t a:where(.svelte-1sr6y3t){text-decoration:none;display:flex;align-items:center;white-space:nowrap;gap:8px;color:#a8a8a8;font-size:12px;line-height:16px;transition:opacity .2s ease}#powered-by-widget.svelte-1sr6y3t a:where(.svelte-1sr6y3t):hover{opacity:.8}#powered-by-widget.svelte-1sr6y3t img:where(.svelte-1sr6y3t){height:16px;width:auto;color:#a8a8a8}@media screen and (max-width: 768px){.powered-by-sommelier.svelte-1sr6y3t{display:none}}#wine-widget-search.svelte-1wah7ro{position:relative;margin:12px auto;padding:0 6px;display:flex;align-items:center;border:2px solid #d5d9ee;border-radius:10px}.search-icon.svelte-1wah7ro{left:12px;width:24px;height:24px;flex:0 0 auto;background-image:url(https://czvgkhagwvmknscoerfy.supabase.co/storage/v1/object/public/static-media//search.svg?x=1);background-repeat:no-repeat;background-size:contain;z-index:2}#wine-search-input.svelte-1wah7ro{flex:1 1 0%;min-width:0;padding:12px;font-size:16px;border:none;border-radius:10px;outline:none;transition:border .2s ease}#wine-search-input.svelte-1wah7ro::placeholder{color:var(--wineater-color);opacity:1;transition:color .3s ease,opacity .3s ease-in-out}#wine-search-input.svelte-1wah7ro:focus{border-color:var(--wineater-color)}#wine-search-input.svelte-1wah7ro:focus::placeholder{opacity:.5}#wine-search-button.svelte-1wah7ro{flex:0 0 auto;background-color:var(--wineater-color);color:#fff;border:none;border-radius:6px;padding:8px 16px;font-size:16px;cursor:pointer;transition:opacity .2s ease}#wine-search-button.svelte-1wah7ro:hover{opacity:.8}#loading-indicator.svelte-li6gfl{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);z-index:10000;text-align:center}.typing-indicator.svelte-li6gfl{display:flex;justify-content:center;align-items:center;height:40px;visibility:visible;background-color:#fff}.typing-indicator.svelte-li6gfl span:where(.svelte-li6gfl){display:block;width:8px;height:8px;margin:0 3px;border-radius:50%;background:linear-gradient(90deg,var(--wineater-color),var(--wineater-corp-color));opacity:.7;animation:svelte-li6gfl-typing 1s infinite}@keyframes svelte-li6gfl-typing{0%,to{transform:translateY(0);opacity:.7}50%{transform:translateY(-8px);opacity:1}}.typing-indicator.svelte-li6gfl span:where(.svelte-li6gfl):nth-child(1){animation-delay:0s}.typing-indicator.svelte-li6gfl span:where(.svelte-li6gfl):nth-child(2){animation-delay:.15s}.typing-indicator.svelte-li6gfl span:where(.svelte-li6gfl):nth-child(3){animation-delay:.3s}.card-popup.svelte-17gehox{position:absolute;width:100%;background-color:#fff;padding:16px;border-radius:16px;box-shadow:0 6px 30px #0003;text-align:left;font-size:14px;box-sizing:border-box;display:flex;flex-direction:column}.card-popup.svelte-17gehox p:where(.svelte-17gehox){margin:5px 0}.card-popup-header.svelte-17gehox{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.card-popup-header.svelte-17gehox h2:where(.svelte-17gehox){font-size:16px;font-weight:600;margin:0;flex:1;line-height:1.3}.card-popup-close.svelte-17gehox{font-size:20px;font-weight:700;cursor:pointer;color:#999;border:none;background:transparent;line-height:1}.card-popup-close.svelte-17gehox:hover{color:#000}.popup-short-desc.svelte-17gehox{margin-top:8px}.popup-reason.svelte-17gehox{font-size:14px;font-weight:400;color:#333;margin-top:8px}.popup-pairing.svelte-17gehox{margin-top:8px}.popup-tags.svelte-17gehox{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px;justify-content:center}.popup-tag.svelte-17gehox{display:inline-block;padding:4px 8px;border-radius:12px;background-color:#f5f0ff;border:1px solid #ddd;font-size:13px;color:#333;text-transform:capitalize}.mobile-fullscreen-wrapper.svelte-17gehox{position:fixed;top:0;left:0;width:100%;height:100%;z-index:10000}.mobile-fullscreen-overlay.svelte-17gehox{position:absolute;top:0;left:0;width:100%;height:100%;background:#00000080}.mobile-fullscreen-popup.svelte-17gehox{position:absolute;width:100%;height:100%;top:50%;left:50%;transform:translate(-50%,-50%);max-width:90%;max-height:80%;overflow-y:auto;background:transparent}.wine-recommendation-tile.svelte-yk3emv{display:flex;flex-direction:column;align-items:center;text-align:center;box-sizing:border-box;padding:16px 8px;border-right:2px solid #f6f7fd;position:relative;transform:translateY(0);opacity:1;transition:transform .18s cubic-bezier(.22,.61,.36,1),opacity .18s cubic-bezier(.22,.61,.36,1);will-change:transform,opacity}.wine-recommendation-tile.svelte-yk3emv:last-child{border-right:none}.wine-recommendation-tile.ww-slide-up.svelte-yk3emv{transform:translateY(-28px);opacity:0}.tile-top.svelte-yk3emv{display:flex;flex-direction:column;align-items:center;justify-content:flex-start}.wine-image.svelte-yk3emv{height:200px;object-fit:contain;margin:0 auto 16px;display:block}.wine-title.svelte-yk3emv{font-size:15px;font-weight:500;margin:0 0 8px;min-height:3rem;line-height:1.2;text-align:center;color:#000}.wine-params.svelte-yk3emv{font-size:14px;color:#666;white-space:normal;text-align:center}.bottom-row.svelte-yk3emv{margin-top:auto;display:flex;align-items:center;gap:12px;justify-content:center}.wine-price.svelte-yk3emv{font-size:16px;font-weight:400;margin-bottom:8px;color:#333}.buy-btn.svelte-yk3emv{margin:16px auto 0;background-color:transparent;color:var(--wineater-color);border:2px solid var(--wineater-color);border-radius:6px;padding:8px 16px;font-size:14px;font-weight:500;cursor:pointer;display:block;text-decoration:none;transition:background-color .2s,color .2s,box-shadow .2s}.buy-btn.svelte-yk3emv:hover{box-shadow:0 4px 8px #7b2beb40;background-color:var(--wineater-color);color:#fff}.wine-hover-popup.svelte-yk3emv{display:none;position:absolute;top:0;left:0;width:100%;padding:12px;background-color:#fff;border:1px solid #ddd;border-radius:8px;box-shadow:0 4px 16px #0000001a;transition:transform .3s ease;z-index:999}.wine-hover-popup.visible.svelte-yk3emv{display:block}.wine-hover-popup.slide-in.svelte-yk3emv{animation:svelte-yk3emv-whPopup .25s ease}.popup-reason.svelte-yk3emv{font-size:14px;font-weight:400;color:#333;margin-bottom:8px}.popup-tags.svelte-yk3emv{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px;justify-content:center}.popup-tag.svelte-yk3emv{display:inline-block;padding:4px 8px;border-radius:12px;background-color:#f5f0ff;border:1px solid #ddd;font-size:13px;color:#333;text-transform:capitalize}@keyframes svelte-yk3emv-whPopup{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@media screen and (max-width: 768px){.wine-recommendation-tile.svelte-yk3emv{flex:0 0 auto;scroll-snap-align:center;width:240px;text-align:center}}:root{--wineater-corp-color: #0044ff;--wineater-color: #7b2beb}*{box-sizing:border-box}.hidden{display:none}#wine-widget-container.svelte-1n46o8q{display:flex;gap:24px;font-family:Bricolage Grotesque,sans-serif;padding:12px 12px 0;border-radius:16px;background-color:#fff;box-shadow:0 4px 16px #0000001a;max-width:1024px;min-width:1024px;min-height:500px;margin:40px auto;position:relative;box-sizing:border-box}#wine-widget-container.svelte-1n46o8q [class^=icon-],#wine-widget-container.svelte-1n46o8q [class*=" icon-"]{font-family:Bricolage Grotesque,sans-serif!important}.wine-widget-wrapper.svelte-1n46o8q{width:100%}#wine-widget-right.svelte-1n46o8q{position:relative;min-height:300px}#wine-placeholder.svelte-1n46o8q{display:grid;grid-template-columns:repeat(4,1fr);gap:0;align-items:stretch;margin-bottom:0}.error-message.svelte-1n46o8q{text-align:center;padding:24px;color:#666}@media screen and (max-width: 768px){#wine-widget-container.svelte-1n46o8q{flex-direction:column;padding:0 16px;min-width:100vw}#wine-placeholder.svelte-1n46o8q{display:flex;gap:8px;overflow-x:auto;scroll-snap-type:x mandatory;padding:8px 0;width:calc(100vw - 32px);min-width:calc(100vw - 32px)}}