wineater-bot 4.24.1 → 4.24.2

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 (57) hide show
  1. package/package.json +5 -1
  2. package/.claude/settings.local.json +0 -10
  3. package/.prettierignore +0 -9
  4. package/.prettierrc +0 -16
  5. package/CLAUDE.md +0 -115
  6. package/docs/CUSTOMIZATION.md +0 -133
  7. package/docs/SVELTE.md +0 -146
  8. package/e2e/demo.test.ts +0 -6
  9. package/eslint.config.js +0 -41
  10. package/index.html +0 -23
  11. package/playwright.config.ts +0 -9
  12. package/pnpm-workspace.yaml +0 -2
  13. package/src/App.svelte +0 -784
  14. package/src/App.svelte.test.ts +0 -13
  15. package/src/assets/biobio.png +0 -0
  16. package/src/components/CookieConsent.svelte +0 -73
  17. package/src/components/Footer.svelte +0 -122
  18. package/src/components/Header.svelte +0 -99
  19. package/src/components/Search.svelte +0 -177
  20. package/src/components/SkeletonTiles.svelte +0 -94
  21. package/src/components/WineBottle.svelte +0 -56
  22. package/src/components/WinePopup.svelte +0 -192
  23. package/src/components/WineTile.svelte +0 -458
  24. package/src/components/icons/Budget.svelte +0 -35
  25. package/src/components/icons/Diamond.svelte +0 -35
  26. package/src/components/icons/Fish.svelte +0 -56
  27. package/src/components/icons/Heart.svelte +0 -28
  28. package/src/components/icons/Meat.svelte +0 -32
  29. package/src/components/ui/Action.svelte +0 -83
  30. package/src/demo.spec.ts +0 -13
  31. package/src/index.js +0 -7
  32. package/src/services/analytics/analytics.ts +0 -142
  33. package/src/services/analytics/constants.ts +0 -18
  34. package/src/services/api/api.ts +0 -298
  35. package/src/services/api/deserialize.ts +0 -120
  36. package/src/services/bottle/bottle.spec.ts +0 -32
  37. package/src/services/bottle/bottle.ts +0 -78
  38. package/src/services/cache.ts +0 -28
  39. package/src/services/i18n/i18n.ts +0 -146
  40. package/src/services/i18n/translations.json +0 -658
  41. package/src/services/profile/consent.svelte.ts +0 -115
  42. package/src/services/profile/events.ts +0 -73
  43. package/src/services/profile/uid.ts +0 -87
  44. package/src/services/shopify/cart.ts +0 -105
  45. package/src/services/shopify/shopify.spec.ts +0 -66
  46. package/src/services/shopify/shopify.ts +0 -150
  47. package/src/services/store/app-store.svelte.ts +0 -172
  48. package/src/services/store/deserialize.ts +0 -25
  49. package/src/services/store/types.ts +0 -12
  50. package/src/services/ui-config/get-config.ts +0 -25
  51. package/src/services/ui-config/projects-config.ts +0 -156
  52. package/src/services/ui-config/types.ts +0 -15
  53. package/src/services/ui-config/utils.ts +0 -40
  54. package/tsconfig.json +0 -23
  55. package/vite.config.js +0 -84
  56. package/vite.config.js.timestamp-1772121492941-e00587396dc48.mjs +0 -71
  57. package/vitest-setup-client.ts +0 -2
@@ -1,192 +0,0 @@
1
- <script lang="ts">
2
- let {
3
- title,
4
- shortDescription,
5
- reason,
6
- pairing,
7
- tags,
8
- onClose,
9
- isMobile
10
- }: {
11
- title: string;
12
- shortDescription?: string;
13
- reason?: string;
14
- pairing?: string;
15
- tags?: string[];
16
- onClose: () => void;
17
- isMobile?: boolean;
18
- } = $props();
19
-
20
- const mobile = !!isMobile;
21
- </script>
22
-
23
- {#if mobile}
24
- <div class="wr-WinePopupMobile">
25
- <div class="wr-WinePopupMobile-overlay" onclick={onClose}></div>
26
- <div class="wr-WinePopupMobile-wrapper">
27
- <div class="wr-WinePopup js-WinePopup">
28
- <div class="wr-WinePopup-header">
29
- <h2 class="wr-WinePopup-title">{title}</h2>
30
- <button class="wr-WinePopup-close js-WinePopupClose" onclick={onClose}>&times;</button>
31
- </div>
32
-
33
- {#if shortDescription}
34
- <p class="wr-WinePopup-desc wr-WinePopup-text">{shortDescription}</p>
35
- {/if}
36
-
37
- {#if reason}
38
- <div class="wr-WinePopup-reason">{reason}</div>
39
- {:else if pairing}
40
- <p class="wr-WinePopup-pairing wr-WinePopup-text">{pairing}</p>
41
- {/if}
42
-
43
- {#if tags && tags.length}
44
- <div class="wr-WinePopup-tags">
45
- {#each tags as tag}
46
- <span class="wr-WinePopup-tag">{tag}</span>
47
- {/each}
48
- </div>
49
- {/if}
50
- </div>
51
- </div>
52
- </div>
53
- {:else}
54
- <div class="wr-WinePopup">
55
- <div class="wr-WinePopup-header">
56
- <h2 class="wr-WinePopup-title">{title}</h2>
57
- <button class="wr-WinePopup-close" onclick={onClose}>&times;</button>
58
- </div>
59
-
60
- {#if shortDescription}
61
- <p class="wr-WinePopup-desc wr-WinePopup-text">{shortDescription}</p>
62
- {/if}
63
-
64
- {#if reason}
65
- <div class="wr-WinePopup-reason">{reason}</div>
66
- {:else if pairing}
67
- <p class="wr-WinePopup-pairing wr-WinePopup-text">{pairing}</p>
68
- {/if}
69
-
70
- {#if tags && tags.length}
71
- <div class="wr-WinePopup-tags">
72
- {#each tags as tag}
73
- <span class="wr-WinePopup-tag">{tag}</span>
74
- {/each}
75
- </div>
76
- {/if}
77
- </div>
78
- {/if}
79
-
80
- <style>
81
- .wr-WinePopup {
82
- position: absolute;
83
- width: 100%;
84
- background-color: white;
85
- padding: 16px;
86
- border-radius: 16px;
87
- box-shadow: 0 6px 30px rgba(0, 0, 0, 0.2);
88
- text-align: left;
89
- font-size: 14px;
90
- box-sizing: border-box;
91
- display: flex;
92
- flex-direction: column;
93
- }
94
-
95
- .wr-WinePopup-text {
96
- margin: 5px 0;
97
- }
98
-
99
- .wr-WinePopup-header {
100
- display: flex;
101
- justify-content: space-between;
102
- align-items: flex-start;
103
- gap: 12px;
104
- }
105
-
106
- .wr-WinePopup-title {
107
- font-size: 16px;
108
- font-weight: 600;
109
- margin: 0;
110
- flex: 1;
111
- line-height: 1.3;
112
- }
113
-
114
- .wr-WinePopup-close {
115
- font-size: 20px;
116
- font-weight: bold;
117
- cursor: pointer;
118
- color: #999;
119
- border: none;
120
- background: transparent;
121
- line-height: 1;
122
- }
123
-
124
- .wr-WinePopup-close:hover {
125
- color: #000;
126
- }
127
-
128
- .wr-WinePopup-desc {
129
- margin-top: 8px;
130
- }
131
-
132
- .wr-WinePopup-reason {
133
- font-size: 14px;
134
- font-weight: 400;
135
- color: #333;
136
- margin-top: 8px;
137
- }
138
-
139
- .wr-WinePopup-pairing {
140
- margin-top: 8px;
141
- }
142
-
143
- .wr-WinePopup-tags {
144
- display: flex;
145
- flex-wrap: wrap;
146
- gap: 8px;
147
- margin-top: 8px;
148
- justify-content: center;
149
- }
150
-
151
- .wr-WinePopup-tag {
152
- display: inline-block;
153
- padding: 4px 8px;
154
- border-radius: 12px;
155
- background-color: #f5f0ff;
156
- border: 1px solid #ddd;
157
- font-size: 13px;
158
- color: #333;
159
- text-transform: capitalize;
160
- }
161
-
162
- .wr-WinePopupMobile {
163
- position: fixed;
164
- top: 0;
165
- left: 0;
166
- width: 100%;
167
- height: 100%;
168
- z-index: 10000;
169
- }
170
-
171
- .wr-WinePopupMobile-overlay {
172
- position: absolute;
173
- top: 0;
174
- left: 0;
175
- width: 100%;
176
- height: 100%;
177
- background: rgba(0, 0, 0, 0.5);
178
- }
179
-
180
- .wr-WinePopupMobile-wrapper {
181
- position: absolute;
182
- width: 100%;
183
- height: 100%;
184
- top: 50%;
185
- left: 50%;
186
- transform: translate(-50%, -50%);
187
- max-width: 90%;
188
- max-height: 80%;
189
- overflow-y: auto;
190
- background: transparent;
191
- }
192
- </style>
@@ -1,458 +0,0 @@
1
- <script lang="ts">
2
- import type { RecommendedWine, Wine, WineId, WinePrice } from '../services/api/api';
3
- import { formatCurrency, getTranslation } from '../services/i18n/i18n';
4
- import WinePopup from './WinePopup.svelte';
5
- import { onMount } from 'svelte';
6
- import { appStore } from '../services/store/app-store.svelte';
7
- import Action from './ui/Action.svelte';
8
- import WineBottle from './WineBottle.svelte';
9
- import { hasImage } from '../services/bottle/bottle';
10
- import { variantIdOf } from '../services/shopify/shopify';
11
-
12
- // Desktop grid has 4 columns: the first row is above the fold
13
- const FIRST_ROW_SIZE = 4;
14
-
15
- let lang = $derived(appStore.getAppLanguage());
16
-
17
- // A broken image URL falls back to the drawn bottle, same as an empty one
18
- let imageFailed = $state(false);
19
-
20
- let {
21
- wine,
22
- index,
23
- selectedWineId,
24
- hoveredWineId,
25
- onTileEnter,
26
- onTileLeave,
27
- onTileClick,
28
- onBuyClick,
29
- onBuyLinkClick,
30
- onAddToCart,
31
- addedToCart = false,
32
- onPopupClose,
33
- onSimilarClick,
34
- isAnimating,
35
- translatedPopup
36
- }: {
37
- wine: Wine | RecommendedWine;
38
- index: number;
39
- selectedWineId: WineId | null;
40
- hoveredWineId: WineId | null;
41
- onTileEnter: (wine: Wine | RecommendedWine) => void;
42
- onTileLeave: (wine: Wine | RecommendedWine) => void;
43
- onTileClick: (event: MouseEvent, wine: Wine | RecommendedWine) => void;
44
- onBuyClick: (wine: Wine | RecommendedWine, index: number) => void;
45
- onBuyLinkClick: (wine: Wine | RecommendedWine, index: number) => void;
46
- /** Shopify mode: BUY puts the bottle into the shop's cart */
47
- onAddToCart?: (wine: Wine | RecommendedWine, index: number) => void;
48
- addedToCart?: boolean;
49
- onPopupClose: () => void;
50
- onSimilarClick?: (wine: Wine | RecommendedWine) => void;
51
- isAnimating: boolean;
52
- translatedPopup: Partial<RecommendedWine> | null;
53
- } = $props();
54
-
55
- const getValue = (wine: Wine | RecommendedWine, key: string) =>
56
- wine[key] || wine[key.charAt(0).toUpperCase() + key.slice(1)];
57
-
58
- const joinParams = (wine: Wine | RecommendedWine, keys: string[]) =>
59
- keys
60
- .map((key) => getValue(wine, key))
61
- .filter(Boolean)
62
- .join(' • ');
63
-
64
- function formatPrice(price: WinePrice) {
65
- return formatCurrency(price, appStore.getCurrency?.() || 'USD', lang);
66
- }
67
-
68
- function isPopupOpen(id: WineId) {
69
- return selectedWineId === id;
70
- }
71
-
72
- function hasHoverPopupContent(w: Wine | RecommendedWine) {
73
- return !!(w.reason || w.shortDescription || w.tags);
74
- }
75
-
76
- function getTags(translated: Wine | RecommendedWine, w: Wine | RecommendedWine) {
77
- let tags: any = translated?.tags || w.tags;
78
- if (!tags) return [];
79
- if (Array.isArray(tags)) tags = tags.join(',');
80
- if (typeof tags !== 'string') return [];
81
- return tags
82
- .split(',')
83
- .map((tag) => tag.trim())
84
- .filter(Boolean);
85
- }
86
- let isMobile = $state(false);
87
- let canAddToCart = $derived(!!onAddToCart && !!variantIdOf(wine as { url?: string | null; itemId?: string | null }));
88
- let adding = $state(false);
89
-
90
- async function addToCartClick() {
91
- if (adding || addedToCart) return;
92
- adding = true;
93
- try {
94
- await onAddToCart?.(wine, index);
95
- } finally {
96
- adding = false;
97
- }
98
- }
99
-
100
- onMount(() => {
101
- const checkIsMobile = () => {
102
- isMobile = window.innerWidth <= 768;
103
- };
104
-
105
- checkIsMobile();
106
- window.addEventListener('resize', checkIsMobile);
107
- return () => {
108
- window.removeEventListener('resize', checkIsMobile);
109
- };
110
- });
111
- </script>
112
-
113
- <!-- svelte-ignore a11y_no_static_element_interactions -->
114
- <!-- svelte-ignore a11y_click_events_have_key_events -->
115
- <!-- svelte-ignore a11y_no_noninteractive_element_interactions -->
116
- <article
117
- class="wr-WineTile {isAnimating ? 'ww-slide-up' : ''}"
118
- onmouseenter={() => onTileEnter(wine)}
119
- onmouseleave={() => onTileLeave(wine)}
120
- onclick={(event) => onTileClick(event, wine)}
121
- >
122
- <header class="wr-WineTile-header">
123
- {#if hasImage(wine.image) && !imageFailed}
124
- <img
125
- src={wine.image}
126
- alt={wine.title}
127
- class="wr-WineTile-image"
128
- loading={index < FIRST_ROW_SIZE ? 'eager' : 'lazy'}
129
- fetchpriority={index < FIRST_ROW_SIZE ? 'high' : 'auto'}
130
- decoding="async"
131
- onerror={() => (imageFailed = true)}
132
- />
133
- {:else}
134
- <div class="wr-WineTile-image wr-WineTile-bottle">
135
- <WineBottle type={wine.type} />
136
- </div>
137
- {/if}
138
- {#if wine.total}
139
- <div class="wr-WineTile-price">
140
- {formatPrice(wine.total)}
141
- </div>
142
- {/if}
143
-
144
- {#if wine.byTheGlass}
145
- <div class="wr-WineTile-glass">
146
- {getTranslation({ key: 'byTheGlass', lang })}{wine.glassPrice ? ` — ${formatPrice(wine.glassPrice)}` : ''}
147
- </div>
148
- {/if}
149
-
150
- {#if canAddToCart && wine.url}
151
- <h3 class="wr-WineTile-title">
152
- <a class="wr-WineTile-titleLink js-WineTileAction" href={wine.url}>{wine.title}</a>
153
- </h3>
154
- {:else}
155
- <h3 class="wr-WineTile-title">{wine.title}</h3>
156
- {/if}
157
- </header>
158
-
159
- {#if joinParams(wine, ['type', 'country', 'region', 'grape'])}
160
- <div class="wr-WineTile-params">
161
- {joinParams(wine, ['type', 'country', 'region', 'grape'])}
162
- </div>
163
- {/if}
164
-
165
- <footer class="wr-WineTile-footer">
166
- <!-- We need this wrapper for top margin -->
167
- <div class="wr-WineTile-actions">
168
- {#if canAddToCart}
169
- <Action
170
- handleClick={addToCartClick}
171
- variant={addedToCart ? 'outlined' : 'primary'}
172
- className="wr-WineTile-action wr-WineTile-action--cart js-WineTileAction"
173
- >
174
- {getTranslation({ key: addedToCart ? 'addedToCart' : 'addToCart', lang })}
175
- </Action>
176
- {:else if wine.url}
177
- <Action
178
- href={wine.url}
179
- handleClick={() => onBuyLinkClick(wine, index)}
180
- className="wr-WineTile-action wr-WineTile-action--link js-WineTileAction"
181
- target="_blank"
182
- variant="outlined"
183
- >
184
- {getTranslation({ key: 'wineDetails.buy', lang })}
185
- </Action>
186
- {:else}
187
- <Action
188
- handleClick={() => onBuyClick(wine, index)}
189
- variant="outlined"
190
- className="wr-WineTile-action wr-WineTile-action--button js-WineTileAction"
191
- >
192
- {getTranslation({ key: 'moreInfo', lang })}
193
- </Action>
194
- {/if}
195
- {#if onSimilarClick}
196
- <Action
197
- handleClick={() => onSimilarClick(wine)}
198
- variant="text"
199
- className="wr-WineTile-action wr-WineTile-action--similar js-WineTileAction"
200
- >
201
- {getTranslation({ key: 'similarWines', lang })}
202
- </Action>
203
- {/if}
204
- </div>
205
- </footer>
206
-
207
- {#if isPopupOpen(wine.id) && !isMobile}
208
- <WinePopup
209
- title={wine.title}
210
- shortDescription={translatedPopup?.shortDescription || wine.shortDescription}
211
- reason={translatedPopup?.reason || wine.reason}
212
- pairing={translatedPopup?.pairingRecommendation || wine.pairingRecommendation}
213
- tags={getTags(translatedPopup, wine)}
214
- onClose={onPopupClose}
215
- isMobile={false}
216
- />
217
- {/if}
218
-
219
- {#if hasHoverPopupContent(wine)}
220
- <div class="wr-WineTilePopup {hoveredWineId === wine.id ? 'slide-in visible' : ''}">
221
- {#if translatedPopup?.reason || translatedPopup?.shortDescription || wine.reason || wine.shortDescription}
222
- <div class="wr-WineTilePopup-reason">
223
- {translatedPopup?.reason ||
224
- translatedPopup?.shortDescription ||
225
- wine.reason ||
226
- wine.shortDescription}
227
- </div>
228
- {/if}
229
- {#if translatedPopup?.tags || translatedPopup?.Tags || wine.tags}
230
- <div class="wr-WineTilePopup-tags">
231
- {#each getTags(translatedPopup, wine) as tag}
232
- <span class="wr-WineTilePopup-tag">{tag}</span>
233
- {/each}
234
- </div>
235
- {/if}
236
- </div>
237
- {/if}
238
- </article>
239
-
240
- {#if isPopupOpen(wine.id) && isMobile}
241
- <WinePopup
242
- title={wine.title}
243
- shortDescription={translatedPopup?.shortDescription || wine.shortDescription}
244
- reason={translatedPopup?.reason || wine.reason}
245
- pairing={translatedPopup?.pairingRecommendation || wine.pairingRecommendation}
246
- tags={getTags(translatedPopup, wine)}
247
- onClose={onPopupClose}
248
- isMobile={true}
249
- />
250
- {/if}
251
-
252
- <style>
253
- .wr-WineTile {
254
- display: flex;
255
- flex-direction: column;
256
- align-items: center;
257
- text-align: center;
258
- box-sizing: border-box;
259
- padding: 16px 8px;
260
- border-right: 2px solid #f6f7fd;
261
- position: relative;
262
- transform: translateY(0);
263
- opacity: 1;
264
- transition:
265
- transform 180ms cubic-bezier(0.22, 0.61, 0.36, 1),
266
- opacity 180ms cubic-bezier(0.22, 0.61, 0.36, 1);
267
- will-change: transform, opacity;
268
- }
269
-
270
- .wr-WineTile:last-child {
271
- border-right: none;
272
- }
273
-
274
- .wr-WineTile.ww-slide-up {
275
- transform: translateY(-28px);
276
- opacity: 0;
277
- }
278
-
279
- .wr-WineTile-header {
280
- display: flex;
281
- flex-direction: column;
282
- align-items: center;
283
- justify-content: flex-start;
284
- }
285
-
286
- .wr-WineTile-image {
287
- height: 200px;
288
- width: 100%;
289
- max-width: 100%;
290
- object-fit: contain;
291
- margin: 0 auto 16px;
292
- display: block;
293
- }
294
-
295
- .wr-WineTile-bottle {
296
- padding: 4px 0;
297
- box-sizing: border-box;
298
- }
299
-
300
- .wr-WineTile-title {
301
- font-size: 15px;
302
- font-weight: 500;
303
- margin: 0 0 8px;
304
- min-height: 3rem;
305
- line-height: 1.2;
306
- text-align: center;
307
- color: #000;
308
- }
309
-
310
- .wr-WineTile-titleLink {
311
- color: inherit;
312
- text-decoration: none;
313
- }
314
-
315
- .wr-WineTile-titleLink:hover {
316
- text-decoration: underline;
317
- }
318
-
319
- .wr-WineTile-params {
320
- font-size: 14px;
321
- color: #666;
322
- white-space: normal;
323
- text-align: center;
324
- }
325
-
326
- .wr-WineTile-footer {
327
- margin-top: auto;
328
- display: flex;
329
- align-items: center;
330
- gap: 12px;
331
- justify-content: center;
332
- }
333
-
334
- .wr-WineTile-price {
335
- font-size: 16px;
336
- font-weight: 400;
337
- margin-bottom: 8px;
338
- color: #333;
339
- }
340
-
341
- .wr-WineTile-glass {
342
- font-size: 12px;
343
- font-weight: 500;
344
- color: var(--wr-brand-color, #7b2beb);
345
- margin-bottom: 8px;
346
- }
347
-
348
- .wr-WineTile-actions {
349
- margin: 16px auto 0;
350
- display: flex;
351
- flex-direction: column;
352
- align-items: center;
353
- gap: 8px;
354
- }
355
-
356
- /* :global обязателен — класс уезжает внутрь <Action>, а скоуп Svelte
357
- действует только на разметку этого компонента, иначе правило отбрасывается
358
- как неиспользуемое. Цвет тот же, что у Buy; подчёркивание выезжает слева. */
359
- :global(.wr-WineTile-action--similar) {
360
- /* Заметно легче кнопки Buy (14px/500) — это вторичное действие, не кнопка */
361
- font-size: 12px;
362
- font-weight: 400;
363
- color: var(--wr-brand-color, #7b2beb);
364
- text-decoration: none;
365
- background: transparent;
366
- border: none;
367
- padding: 0;
368
- position: relative;
369
- }
370
-
371
- :global(.wr-WineTile-action--similar)::after {
372
- content: '';
373
- position: absolute;
374
- left: 0;
375
- bottom: -2px;
376
- width: 100%;
377
- height: 1px;
378
- background-color: currentColor;
379
- transform: scaleX(0);
380
- transform-origin: left;
381
- transition: transform 180ms cubic-bezier(0.22, 0.61, 0.36, 1);
382
- }
383
-
384
- :global(.wr-WineTile-action--similar:hover)::after,
385
- :global(.wr-WineTile-action--similar:focus-visible)::after {
386
- transform: scaleX(1);
387
- }
388
-
389
- /* Hover popup inside tile */
390
- .wr-WineTilePopup {
391
- display: none;
392
- position: absolute;
393
- top: 0;
394
- left: 0;
395
- width: 100%;
396
- padding: 12px;
397
- background-color: #fff;
398
- border: 1px solid #ddd;
399
- border-radius: 8px;
400
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.1);
401
- transition: transform 0.3s ease;
402
- z-index: 999;
403
- }
404
-
405
- .wr-WineTilePopup.visible {
406
- display: block;
407
- }
408
-
409
- .wr-WineTilePopup.slide-in {
410
- animation: whPopup 0.25s ease;
411
- }
412
-
413
- .wr-WineTilePopup-reason {
414
- font-size: 14px;
415
- font-weight: 400;
416
- color: #333;
417
- margin-bottom: 8px;
418
- }
419
-
420
- .wr-WineTilePopup-tags {
421
- display: flex;
422
- flex-wrap: wrap;
423
- gap: 8px;
424
- margin-top: 8px;
425
- justify-content: center;
426
- }
427
-
428
- .wr-WineTilePopup-tag {
429
- display: inline-block;
430
- padding: 4px 8px;
431
- border-radius: 12px;
432
- background-color: #f5f0ff;
433
- border: 1px solid #ddd;
434
- font-size: 13px;
435
- color: #333;
436
- text-transform: capitalize;
437
- }
438
-
439
- @keyframes whPopup {
440
- from {
441
- opacity: 0;
442
- transform: translateY(6px);
443
- }
444
- to {
445
- opacity: 1;
446
- transform: translateY(0);
447
- }
448
- }
449
-
450
- @media screen and (max-width: 768px) {
451
- .wr-WineTile {
452
- flex: 0 0 auto;
453
- scroll-snap-align: center;
454
- width: 240px;
455
- text-align: center;
456
- }
457
- }
458
- </style>
@@ -1,35 +0,0 @@
1
- <script lang="ts">
2
- export let className: string = '';
3
- export let size: number = 20;
4
- </script>
5
-
6
- <svg
7
- class={className}
8
- xmlns="http://www.w3.org/2000/svg"
9
- width={size}
10
- height={size}
11
- viewBox="0 0 37 37"
12
- fill="none"
13
- >
14
- <path
15
- d="M29.3014 7.96326C27.0206 7.96326 25.0439 10.092 24.7398 11.0044C19.4179 8.72353 8.01376 10.5482 8.01376 18.6071C8.01376 21.3441 8.01376 23.1687 11.0549 25.4496V30.7715H17.1371V27.7304H21.6987V30.7715H27.7809V24.6893C29.3014 23.929 30.3658 23.1687 30.822 21.6482H33.8631V15.566H30.822C30.822 14.0455 30.0617 13.2852 29.3014 12.5249V7.96326Z"
16
- stroke="currentColor"
17
- stroke-width="3.0411"
18
- stroke-linecap="round"
19
- stroke-linejoin="round"
20
- />
21
- <path
22
- d="M3.45209 14.0455V15.5661C3.45209 17.2387 4.82058 18.6072 6.49318 18.6072H8.01373"
23
- stroke="currentColor"
24
- stroke-width="3.0411"
25
- stroke-linecap="round"
26
- stroke-linejoin="round"
27
- />
28
- <path
29
- d="M24.7398 17.0867H24.7544"
30
- stroke="currentColor"
31
- stroke-width="3.0411"
32
- stroke-linecap="round"
33
- stroke-linejoin="round"
34
- />
35
- </svg>
@@ -1,35 +0,0 @@
1
- <script lang="ts">
2
- export let className: string = '';
3
- export let size: number = 20;
4
- </script>
5
-
6
- <svg
7
- class={className}
8
- xmlns="http://www.w3.org/2000/svg"
9
- width={size}
10
- height={size}
11
- viewBox="0 0 38 38"
12
- fill="none"
13
- >
14
- <path
15
- d="M10.036 4.96326H28.2826L34.3648 14.0865L19.1593 33.8537L3.95381 14.0865L10.036 4.96326Z"
16
- stroke="currentColor"
17
- stroke-width="3.0411"
18
- stroke-linecap="round"
19
- stroke-linejoin="round"
20
- />
21
- <path
22
- d="M17.6388 4.96326L13.0771 14.0865L19.1593 33.8537L25.2415 14.0865L20.6799 4.96326"
23
- stroke="currentColor"
24
- stroke-width="3.0411"
25
- stroke-linecap="round"
26
- stroke-linejoin="round"
27
- />
28
- <path
29
- d="M3.95381 14.0867H34.3648"
30
- stroke="currentColor"
31
- stroke-width="3.0411"
32
- stroke-linecap="round"
33
- stroke-linejoin="round"
34
- />
35
- </svg>