cloudcommerce 0.18.2 → 0.19.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 (96) hide show
  1. package/.github/renovate.json +1 -2
  2. package/CHANGELOG.md +26 -0
  3. package/package.json +6 -6
  4. package/packages/api/package.json +1 -1
  5. package/packages/apps/affilate-program/package.json +2 -2
  6. package/packages/apps/correios/package.json +1 -1
  7. package/packages/apps/custom-payment/package.json +1 -1
  8. package/packages/apps/custom-shipping/package.json +1 -1
  9. package/packages/apps/datafrete/package.json +2 -2
  10. package/packages/apps/discounts/package.json +1 -1
  11. package/packages/apps/emails/package.json +2 -2
  12. package/packages/apps/fb-conversions/package.json +2 -2
  13. package/packages/apps/flash-courier/package.json +1 -1
  14. package/packages/apps/frenet/package.json +2 -2
  15. package/packages/apps/galaxpay/package.json +2 -2
  16. package/packages/apps/google-analytics/package.json +2 -2
  17. package/packages/apps/jadlog/package.json +1 -1
  18. package/packages/apps/loyalty-points/package.json +1 -1
  19. package/packages/apps/melhor-envio/package.json +2 -2
  20. package/packages/apps/mercadopago/package.json +2 -2
  21. package/packages/apps/pagarme/package.json +2 -2
  22. package/packages/apps/paghiper/package.json +2 -2
  23. package/packages/apps/pix/package.json +2 -2
  24. package/packages/apps/tiny-erp/package.json +2 -2
  25. package/packages/apps/webhooks/package.json +2 -2
  26. package/packages/cli/package.json +1 -1
  27. package/packages/config/package.json +1 -1
  28. package/packages/emails/package.json +1 -1
  29. package/packages/events/package.json +2 -2
  30. package/packages/feeds/package.json +1 -1
  31. package/packages/firebase/package.json +2 -2
  32. package/packages/i18n/package.json +1 -1
  33. package/packages/modules/package.json +2 -2
  34. package/packages/passport/package.json +2 -2
  35. package/packages/ssr/lib/firebase/serve-storefront.js +81 -72
  36. package/packages/ssr/lib/firebase/serve-storefront.js.map +1 -1
  37. package/packages/ssr/package.json +3 -3
  38. package/packages/ssr/src/firebase/serve-storefront.ts +89 -84
  39. package/packages/storefront/config/storefront.tailwind.cjs +5 -8
  40. package/packages/storefront/dist/client/_astro/Carousel.62c97a79.js +1 -0
  41. package/packages/storefront/dist/client/_astro/HeroSlider.b2622951.js +1 -0
  42. package/packages/storefront/dist/client/_astro/PitchBar.ed85833a.js +1 -0
  43. package/packages/storefront/dist/client/_astro/ProductShelf.f63b3dc2.js +1 -0
  44. package/packages/storefront/dist/client/_astro/ShopHeader.61f52cad.js +4 -0
  45. package/packages/storefront/dist/client/_astro/_...slug_.c58d7d89.css +1 -0
  46. package/packages/storefront/dist/client/_astro/_plugin-vue_export-helper.4cb7dd76.js +1 -0
  47. package/packages/storefront/dist/client/_astro/api.4984c5be.js +1 -0
  48. package/packages/storefront/dist/client/_astro/client.8035a95a.js +1 -0
  49. package/packages/storefront/dist/client/_astro/img.abbe849f.js +1 -0
  50. package/packages/storefront/dist/client/_astro/index.b93f3d06.js +1 -0
  51. package/packages/storefront/dist/client/sw.js +1 -1
  52. package/packages/storefront/dist/server/chunks/{_...4cff750f.mjs → _...38dc610a.mjs} +3 -3
  53. package/packages/storefront/dist/server/chunks/{account@_@astro.9bc80fb8.mjs → account@_@astro.691bc27d.mjs} +3 -3
  54. package/packages/storefront/dist/server/chunks/{astro.2df8d1c5.mjs → astro.45d3047f.mjs} +10 -3
  55. package/packages/storefront/dist/server/chunks/{endpoint@_@js.36a1cfa7.mjs → endpoint@_@js.59bf44fe.mjs} +3 -3
  56. package/packages/storefront/dist/server/chunks/{fallback@_@astro.6af59549.mjs → fallback@_@astro.c8a88451.mjs} +3 -3
  57. package/packages/storefront/dist/server/chunks/{index@_@astro.846e70bb.mjs → index@_@astro.d808b7a7.mjs} +3 -3
  58. package/packages/storefront/dist/server/chunks/{index@_@astro.1ea814dc.mjs → index@_@astro.d93b7b12.mjs} +3 -3
  59. package/packages/storefront/dist/server/chunks/pages/{_...slug_.astro.906634b2.mjs → _...slug_.astro.b5433bcf.mjs} +119 -30
  60. package/packages/storefront/dist/server/chunks/pages/{account.astro.f630663e.mjs → account.astro.f07cf19e.mjs} +1 -1
  61. package/packages/storefront/dist/server/chunks/pages/{endpoint.js.ffec1d05.mjs → endpoint.js.2c6d6e4a.mjs} +1 -1
  62. package/packages/storefront/dist/server/chunks/pages/{fallback.astro.0a073a86.mjs → fallback.astro.09db7801.mjs} +2 -2
  63. package/packages/storefront/dist/server/chunks/pages/{index.astro.fb8fe537.mjs → index.astro.753ff02c.mjs} +91 -77
  64. package/packages/storefront/dist/server/entry.mjs +9 -9
  65. package/packages/storefront/dist/server/renderers.mjs +2 -2
  66. package/packages/storefront/package.json +5 -5
  67. package/packages/storefront/src/images/get-built-picture.ts +1 -0
  68. package/packages/storefront/src/images/use-ssr-picture.ts +11 -6
  69. package/packages/storefront/src/lib/components/{HeroPicture.astro → Banner.astro} +8 -4
  70. package/packages/storefront/src/lib/composables/use-product-card.ts +10 -11
  71. package/packages/storefront/src/lib/state/shopping-cart/parse-product.ts +6 -3
  72. package/packages/storefront/src/lib/state/shopping-cart.ts +3 -3
  73. package/packages/types/package.json +1 -1
  74. package/packages/storefront/dist/client/_astro/Carousel.533b4b19.js +0 -1
  75. package/packages/storefront/dist/client/_astro/HeroSlider.359c76cc.js +0 -1
  76. package/packages/storefront/dist/client/_astro/PitchBar.75d2999f.js +0 -1
  77. package/packages/storefront/dist/client/_astro/Prices.bd0d3474.js +0 -1
  78. package/packages/storefront/dist/client/_astro/ProductShelf.83c66e3e.js +0 -1
  79. package/packages/storefront/dist/client/_astro/ShopHeader.a06de422.js +0 -4
  80. package/packages/storefront/dist/client/_astro/_...slug_.b19aabfc.css +0 -1
  81. package/packages/storefront/dist/client/_astro/_plugin-vue_export-helper.4e6dc3af.js +0 -1
  82. package/packages/storefront/dist/client/_astro/api.7f62c1ff.js +0 -1
  83. package/packages/storefront/dist/client/_astro/client.24201f93.js +0 -1
  84. package/packages/storefront/dist/client/_astro/img.22ad29ec.js +0 -1
  85. package/packages/storefront/dist/client/_astro/index.ddc27a3a.js +0 -1
  86. package/packages/storefront/dist/client/_astro/modules-info.d6bd555b.js +0 -1
  87. package/packages/storefront/dist/client/_astro/runtime-dom.esm-bundler.578d6e91.js +0 -1
  88. package/packages/storefront/dist/client/img/uploads/banner1.png +0 -0
  89. package/packages/storefront/dist/client/img/uploads/banner2.png +0 -0
  90. package/packages/storefront/dist/client/img/uploads/favicon.png +0 -0
  91. package/packages/storefront/dist/client/img/uploads/headless.png +0 -0
  92. package/packages/storefront/dist/client/img/uploads/headphone.png +0 -0
  93. package/packages/storefront/dist/client/img/uploads/passion.png +0 -0
  94. package/packages/storefront/dist/client/img/uploads/pwa-reliable.png +0 -0
  95. package/packages/storefront/dist/client/img/uploads/rect89.png +0 -0
  96. package/packages/storefront/dist/client/img/uploads/ssl-safe.png +0 -0
@@ -1,64 +1,20 @@
1
- import { memoryUsage } from 'node:process';
2
1
  import { join as joinPath } from 'node:path';
3
2
  import { readFile } from 'node:fs/promises';
3
+ import { getFirestore, Timestamp } from 'firebase-admin/firestore';
4
4
  import logger from 'firebase-functions/logger';
5
5
 
6
6
  const {
7
- STOREFRONT_BASE_DIR, SSR_CACHE_MAXAGE, SSR_CACHE_MIN_HEAP_FREE, SSR_PROXY_DEBUG, SSR_PROXY_TIMEOUT,
7
+ DEPLOY_RAND, STOREFRONT_BASE_DIR, SSR_CACHE_MAXAGE, SSR_CACHE_SWR, SSR_PROXY_DEBUG, SSR_PROXY_TIMEOUT,
8
8
  } = process.env;
9
9
  const cacheMaxAge = SSR_CACHE_MAXAGE ? Number(SSR_CACHE_MAXAGE) : 1000 * 60 * 2;
10
- const cacheMinHeapFree = SSR_CACHE_MIN_HEAP_FREE
11
- ? Number(SSR_CACHE_MIN_HEAP_FREE)
12
- : 536870912; /* 512MiB */
10
+ const isCacheSWR = SSR_CACHE_SWR ? String(SSR_CACHE_SWR).toLowerCase() === 'true' : true;
11
+ const lockedCacheKeys = [];
13
12
  const baseDir = STOREFRONT_BASE_DIR || process.cwd();
14
13
  const clientRoot = new URL(joinPath(baseDir, 'dist/client/'), import.meta.url);
15
14
  let imagesManifest;
16
15
  const builtImages = [];
17
16
  const isProxyDebug = SSR_PROXY_DEBUG ? String(SSR_PROXY_DEBUG).toLowerCase() === 'true' : false;
18
17
  const proxyTimeout = SSR_PROXY_TIMEOUT ? Number(SSR_PROXY_TIMEOUT) : 3000;
19
- const memCache = {
20
- timers: {},
21
- storage: [],
22
- set(key, data) {
23
- if (cacheMaxAge > 0) {
24
- this.storage.push({ key, data });
25
- if (this.timers[key]) {
26
- clearTimeout(this.timers[key]);
27
- }
28
- this.timers[key] = setTimeout(() => {
29
- this.pull(key);
30
- }, cacheMaxAge);
31
- const { heapTotal, heapUsed } = memoryUsage();
32
- if (heapTotal - heapUsed < cacheMinHeapFree) {
33
- this.pull();
34
- }
35
- }
36
- },
37
- get(key) {
38
- for (let i = this.storage.length - 1; i >= 0; i--) {
39
- if (this.storage[i].key === key) {
40
- return this.storage[i];
41
- }
42
- }
43
- return undefined;
44
- },
45
- pull(key) {
46
- if (key) {
47
- for (let i = this.storage.length - 1; i >= 0; i--) {
48
- if (this.storage[i].key === key) {
49
- this.storage.splice(i, 1);
50
- }
51
- }
52
- } else {
53
- for (let i = 0; i < this.storage.length; i++) {
54
- if (this.storage[i].key !== '__home') {
55
- this.storage.splice(i, 1);
56
- break;
57
- }
58
- }
59
- }
60
- },
61
- };
62
18
  const proxy = async (req, res) => {
63
19
  let proxyURL;
64
20
  try {
@@ -202,22 +158,14 @@ export default async (req, res) => {
202
158
  res.sendStatus(400);
203
159
  return;
204
160
  }
161
+ const startedAt = Date.now();
162
+ let ssrStartedAt;
205
163
  const cacheKey = (!req.path || req.path === '/')
206
164
  ? '__home'
207
165
  : req.path.slice(1).replace(/\//g, '_');
208
- if (req.query.__noCache === undefined && req.path.charAt(1) !== '~') {
209
- const cached = memCache.get(cacheKey)?.data;
210
- if (cached) {
211
- const { headers: cachedHeaders, status: cachedStatus = 200, chunks: cachedChunks } = cached;
212
- res.writeHead(cachedStatus, cachedHeaders);
213
- cachedChunks.forEach((chunk) => {
214
- res.write(chunk);
215
- });
216
- res.end();
217
- return;
218
- }
219
- }
220
- const startedAt = Date.now();
166
+ let cacheRef;
167
+ let isCachedBodySent = false;
168
+ let isSSRChunkSent = false;
221
169
  let status;
222
170
  let headers = {};
223
171
  const chunks = [];
@@ -229,40 +177,101 @@ export default async (req, res) => {
229
177
  /* eslint-disable prefer-rest-params */
230
178
  // @ts-ignore
231
179
  res.writeHead = function writeHead(_status, _headers) {
232
- if (!res.headersSent) {
233
- // @ts-ignore
234
- _writeHead.apply(res, arguments);
235
- }
236
180
  status = _status;
237
181
  if (_headers) {
182
+ const now = Date.now();
183
+ _headers['X-Function-Took'] = String(now - startedAt);
184
+ if (ssrStartedAt) {
185
+ _headers['X-SSR-Took'] = String(now - ssrStartedAt);
186
+ }
238
187
  headers = _headers;
239
- headers['X-SSR-Took'] = String(Date.now() - startedAt);
188
+ }
189
+ if (!res.headersSent) {
190
+ // @ts-ignore
191
+ _writeHead.apply(res, arguments);
240
192
  }
241
193
  };
242
194
  const _write = res.write;
243
195
  // @ts-ignore
244
196
  res.write = function write(chunk) {
245
- // @ts-ignore
246
- _write.apply(res, arguments);
197
+ if (!isCachedBodySent) {
198
+ // @ts-ignore
199
+ _write.apply(res, arguments);
200
+ isSSRChunkSent = true;
201
+ }
247
202
  chunks.push(chunk);
248
203
  };
249
204
  const _end = res.end;
250
205
  // @ts-ignore
251
206
  res.end = function end() {
252
- // @ts-ignore
253
- _end.apply(res, arguments);
207
+ if (!isCachedBodySent) {
208
+ // @ts-ignore
209
+ _end.apply(res, arguments);
210
+ }
254
211
  if (!status) {
255
212
  status = res.statusCode;
256
213
  }
257
- if (status === 200) {
258
- memCache.set(cacheKey, { headers, status, chunks });
214
+ if (cacheRef && status === 200) {
215
+ cacheRef.set({
216
+ headers,
217
+ status,
218
+ body: Buffer.concat(chunks).toString('utf8'),
219
+ __deploy: DEPLOY_RAND,
220
+ __timestamp: Timestamp.now(),
221
+ }).catch(logger.warn);
222
+ }
223
+ for (let i = lockedCacheKeys.length - 1; i >= 0; i--) {
224
+ if (lockedCacheKeys[i] === cacheKey) {
225
+ lockedCacheKeys.splice(i, 1);
226
+ }
259
227
  }
260
228
  };
229
+ const isSWRLocked = lockedCacheKeys.includes(cacheKey);
230
+ let gettingCacheDoc;
231
+ if (req.query.__noCache === undefined && req.path.charAt(1) !== '~' && cacheMaxAge > 0) {
232
+ gettingCacheDoc = (async () => {
233
+ try {
234
+ const firestore = getFirestore();
235
+ cacheRef = firestore.doc(`ssrCache/${cacheKey}`);
236
+ const cacheDoc = await cacheRef.get();
237
+ if (!isSSRChunkSent && cacheDoc.exists) {
238
+ const {
239
+ headers: cachedHeaders, status: cachedStatus = 200, body: cachedBody, __deploy, __timestamp,
240
+ } = cacheDoc.data();
241
+ const isFresh = (Timestamp.now().toMillis() - __timestamp.toMillis()) <= cacheMaxAge;
242
+ if (__deploy !== DEPLOY_RAND) return;
243
+ if (isFresh || isCacheSWR) {
244
+ cachedHeaders['X-SWR-Date'] = (isFresh ? 'fresh ' : '')
245
+ + __timestamp.toDate().toISOString();
246
+ cachedHeaders['X-Function-Took'] = String(Date.now() - startedAt);
247
+ Object.keys(cachedHeaders).forEach((headerName) => {
248
+ res.set(headerName, cachedHeaders[headerName]);
249
+ });
250
+ _writeHead.apply(res, [cachedStatus, cachedHeaders]);
251
+ _write.apply(res, [cachedBody, 'utf8']);
252
+ _end.apply(res);
253
+ isCachedBodySent = true;
254
+ }
255
+ }
256
+ } catch (err) {
257
+ cacheRef = null;
258
+ logger.warn(err);
259
+ }
260
+ })();
261
+ }
262
+ if (gettingCacheDoc && (!isCacheSWR || isSWRLocked)) {
263
+ await gettingCacheDoc;
264
+ if (isCachedBodySent) return;
265
+ }
266
+ if (isCacheSWR) {
267
+ lockedCacheKeys.push(cacheKey);
268
+ }
261
269
  /*
262
270
  https://github.com/withastro/astro/blob/main/examples/ssr/server/server.mjs
263
271
  import { handler as renderStorefront } from '../dist/server/entry.mjs';
264
272
  global.$renderStorefront = renderStorefront;
265
273
  */
274
+ ssrStartedAt = Date.now();
266
275
  global.$renderStorefront(req, res, async (err) => {
267
276
  if (err) {
268
277
  if (res.headersSent) {
@@ -1 +1 @@
1
- {"version":3,"file":"serve-storefront.js","sourceRoot":"","sources":["../../src/firebase/serve-storefront.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serve-storefront.js","sourceRoot":"","sources":["../../src/firebase/serve-storefront.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/ssr",
3
3
  "type": "module",
4
- "version": "0.18.2",
4
+ "version": "0.19.0",
5
5
  "description": "E-Com Plus Cloud Commerce storefront SSR",
6
6
  "main": "lib/index.js",
7
7
  "exports": {
@@ -30,8 +30,8 @@
30
30
  "@ecomplus/utils": "1.5.0-rc.5",
31
31
  "@headlessui/vue": "^1.7.14",
32
32
  "@vueuse/core": "10.2.1",
33
- "astro": "2.8.0",
34
- "firebase-admin": "^11.9.0",
33
+ "astro": "2.8.3",
34
+ "firebase-admin": "^11.10.1",
35
35
  "firebase-functions": "^4.4.1",
36
36
  "semver": "^7.5.4",
37
37
  "vue": "^3.3.4"
@@ -1,9 +1,9 @@
1
1
  import type { OutgoingHttpHeaders } from 'node:http';
2
- import type { Readable } from 'node:stream';
3
2
  import type { Request, Response } from 'firebase-functions';
4
- import { memoryUsage } from 'node:process';
3
+ import type { DocumentReference } from 'firebase-admin/firestore';
5
4
  import { join as joinPath } from 'node:path';
6
5
  import { readFile } from 'node:fs/promises';
6
+ import { getFirestore, Timestamp } from 'firebase-admin/firestore';
7
7
  import logger from 'firebase-functions/logger';
8
8
 
9
9
  declare global {
@@ -16,17 +16,17 @@ declare global {
16
16
  }
17
17
 
18
18
  const {
19
+ DEPLOY_RAND,
19
20
  STOREFRONT_BASE_DIR,
20
21
  SSR_CACHE_MAXAGE,
21
- SSR_CACHE_MIN_HEAP_FREE,
22
+ SSR_CACHE_SWR,
22
23
  SSR_PROXY_DEBUG,
23
24
  SSR_PROXY_TIMEOUT,
24
25
  } = process.env;
25
26
 
26
27
  const cacheMaxAge = SSR_CACHE_MAXAGE ? Number(SSR_CACHE_MAXAGE) : 1000 * 60 * 2;
27
- const cacheMinHeapFree = SSR_CACHE_MIN_HEAP_FREE
28
- ? Number(SSR_CACHE_MIN_HEAP_FREE)
29
- : 536870912; /* 512MiB */
28
+ const isCacheSWR = SSR_CACHE_SWR ? String(SSR_CACHE_SWR).toLowerCase() === 'true' : true;
29
+ const lockedCacheKeys: string[] = [];
30
30
 
31
31
  const baseDir = STOREFRONT_BASE_DIR || process.cwd();
32
32
  const clientRoot = new URL(joinPath(baseDir, 'dist/client/'), import.meta.url);
@@ -37,55 +37,6 @@ const builtImages: BuiltImage[] = [];
37
37
  const isProxyDebug = SSR_PROXY_DEBUG ? String(SSR_PROXY_DEBUG).toLowerCase() === 'true' : false;
38
38
  const proxyTimeout = SSR_PROXY_TIMEOUT ? Number(SSR_PROXY_TIMEOUT) : 3000;
39
39
 
40
- type CacheData = {
41
- headers: OutgoingHttpHeaders,
42
- status: number,
43
- chunks: Readable[],
44
- };
45
- const memCache = {
46
- timers: {} as Record<string, NodeJS.Timeout>,
47
- storage: [] as Array<{ key: string, data: CacheData | null }>,
48
- set(key: string, data: CacheData) {
49
- if (cacheMaxAge > 0) {
50
- this.storage.push({ key, data });
51
- if (this.timers[key]) {
52
- clearTimeout(this.timers[key]);
53
- }
54
- this.timers[key] = setTimeout(() => {
55
- this.pull(key);
56
- }, cacheMaxAge);
57
- const { heapTotal, heapUsed } = memoryUsage();
58
- if (heapTotal - heapUsed < cacheMinHeapFree) {
59
- this.pull();
60
- }
61
- }
62
- },
63
- get(key: string) {
64
- for (let i = this.storage.length - 1; i >= 0; i--) {
65
- if (this.storage[i].key === key) {
66
- return this.storage[i];
67
- }
68
- }
69
- return undefined;
70
- },
71
- pull(key?: string) {
72
- if (key) {
73
- for (let i = this.storage.length - 1; i >= 0; i--) {
74
- if (this.storage[i].key === key) {
75
- this.storage.splice(i, 1);
76
- }
77
- }
78
- } else {
79
- for (let i = 0; i < this.storage.length; i++) {
80
- if (this.storage[i].key !== '__home') {
81
- this.storage.splice(i, 1);
82
- break;
83
- }
84
- }
85
- }
86
- },
87
- };
88
-
89
40
  const proxy = async (req: Request, res: Response) => {
90
41
  let proxyURL: URL | undefined;
91
42
  try {
@@ -235,30 +186,18 @@ export default async (req: Request, res: Response) => {
235
186
  return;
236
187
  }
237
188
 
189
+ const startedAt = Date.now();
190
+ let ssrStartedAt: number | undefined;
238
191
  const cacheKey = (!req.path || req.path === '/')
239
192
  ? '__home'
240
193
  : req.path.slice(1).replace(/\//g, '_');
241
- if (req.query.__noCache === undefined && req.path.charAt(1) !== '~') {
242
- const cached = memCache.get(cacheKey)?.data;
243
- if (cached) {
244
- const {
245
- headers: cachedHeaders,
246
- status: cachedStatus = 200,
247
- chunks: cachedChunks,
248
- } = cached;
249
- res.writeHead(cachedStatus, cachedHeaders);
250
- cachedChunks.forEach((chunk) => {
251
- res.write(chunk);
252
- });
253
- res.end();
254
- return;
255
- }
256
- }
257
-
258
- const startedAt = Date.now();
194
+ let cacheRef: DocumentReference<any> | undefined | null;
195
+ let isCachedBodySent = false;
196
+ let isSSRChunkSent = false;
259
197
  let status: number;
260
198
  let headers: OutgoingHttpHeaders = {};
261
199
  const chunks: any[] = [];
200
+
262
201
  /*
263
202
  Check Response methods used by Astro Node.js integration:
264
203
  https://github.com/withastro/astro/blob/main/packages/integrations/node/src/nodeMiddleware.ts
@@ -267,41 +206,107 @@ export default async (req: Request, res: Response) => {
267
206
  /* eslint-disable prefer-rest-params */
268
207
  // @ts-ignore
269
208
  res.writeHead = function writeHead(_status: number, _headers: OutgoingHttpHeaders) {
270
- if (!res.headersSent) {
271
- // @ts-ignore
272
- _writeHead.apply(res, arguments);
273
- }
274
209
  status = _status;
275
210
  if (_headers) {
211
+ const now = Date.now();
212
+ _headers['X-Function-Took'] = String(now - startedAt);
213
+ if (ssrStartedAt) {
214
+ _headers['X-SSR-Took'] = String(now - ssrStartedAt);
215
+ }
276
216
  headers = _headers;
277
- headers['X-SSR-Took'] = String(Date.now() - startedAt);
217
+ }
218
+ if (!res.headersSent) {
219
+ // @ts-ignore
220
+ _writeHead.apply(res, arguments);
278
221
  }
279
222
  };
280
223
  const _write = res.write;
281
224
  // @ts-ignore
282
225
  res.write = function write(chunk: any) {
283
- // @ts-ignore
284
- _write.apply(res, arguments);
226
+ if (!isCachedBodySent) {
227
+ // @ts-ignore
228
+ _write.apply(res, arguments);
229
+ isSSRChunkSent = true;
230
+ }
285
231
  chunks.push(chunk);
286
232
  };
287
233
  const _end = res.end;
288
234
  // @ts-ignore
289
235
  res.end = function end() {
290
- // @ts-ignore
291
- _end.apply(res, arguments);
236
+ if (!isCachedBodySent) {
237
+ // @ts-ignore
238
+ _end.apply(res, arguments);
239
+ }
292
240
  if (!status) {
293
241
  status = res.statusCode;
294
242
  }
295
- if (status === 200) {
296
- memCache.set(cacheKey, { headers, status, chunks });
243
+ if (cacheRef && status === 200) {
244
+ cacheRef.set({
245
+ headers,
246
+ status,
247
+ body: Buffer.concat(chunks).toString('utf8'),
248
+ __deploy: DEPLOY_RAND,
249
+ __timestamp: Timestamp.now(),
250
+ }).catch(logger.warn);
251
+ }
252
+ for (let i = lockedCacheKeys.length - 1; i >= 0; i--) {
253
+ if (lockedCacheKeys[i] === cacheKey) {
254
+ lockedCacheKeys.splice(i, 1);
255
+ }
297
256
  }
298
257
  };
299
258
 
259
+ const isSWRLocked = lockedCacheKeys.includes(cacheKey);
260
+ let gettingCacheDoc: Promise<void> | undefined;
261
+ if (req.query.__noCache === undefined && req.path.charAt(1) !== '~' && cacheMaxAge > 0) {
262
+ gettingCacheDoc = (async () => {
263
+ try {
264
+ const firestore = getFirestore();
265
+ cacheRef = firestore.doc(`ssrCache/${cacheKey}`);
266
+ const cacheDoc = await cacheRef.get();
267
+ if (!isSSRChunkSent && cacheDoc.exists) {
268
+ const {
269
+ headers: cachedHeaders,
270
+ status: cachedStatus = 200,
271
+ body: cachedBody,
272
+ __deploy,
273
+ __timestamp,
274
+ } = cacheDoc.data();
275
+ const isFresh = (Timestamp.now().toMillis() - __timestamp.toMillis()) <= cacheMaxAge;
276
+ if (__deploy !== DEPLOY_RAND) return;
277
+ if (isFresh || isCacheSWR) {
278
+ cachedHeaders['X-SWR-Date'] = (isFresh ? 'fresh ' : '')
279
+ + __timestamp.toDate().toISOString();
280
+ cachedHeaders['X-Function-Took'] = String(Date.now() - startedAt);
281
+ Object.keys(cachedHeaders).forEach((headerName) => {
282
+ res.set(headerName, cachedHeaders[headerName]);
283
+ });
284
+ _writeHead.apply(res, [cachedStatus, cachedHeaders]);
285
+ _write.apply(res, [cachedBody, 'utf8']);
286
+ _end.apply(res);
287
+ isCachedBodySent = true;
288
+ }
289
+ }
290
+ } catch (err) {
291
+ cacheRef = null;
292
+ logger.warn(err);
293
+ }
294
+ })();
295
+ }
296
+ if (gettingCacheDoc && (!isCacheSWR || isSWRLocked)) {
297
+ await gettingCacheDoc;
298
+ if (isCachedBodySent) return;
299
+ }
300
+ if (isCacheSWR) {
301
+ lockedCacheKeys.push(cacheKey);
302
+ }
303
+
300
304
  /*
301
305
  https://github.com/withastro/astro/blob/main/examples/ssr/server/server.mjs
302
306
  import { handler as renderStorefront } from '../dist/server/entry.mjs';
303
307
  global.$renderStorefront = renderStorefront;
304
308
  */
309
+ ssrStartedAt = Date.now();
305
310
  global.$renderStorefront(req, res, async (err: any) => {
306
311
  if (err) {
307
312
  if (res.headersSent) {
@@ -40,14 +40,9 @@ let defaultThemeOptions = {
40
40
  ],
41
41
  generalIcons: 'heroicons',
42
42
  iconAliases: {
43
- 'shopping-cart': 'shopping-bag',
44
- cashback: 'arrow-uturn-left',
45
- menu: 'bars-3-bottom-left',
46
- search: 'magnifying-glass',
47
- account: 'user-circle',
48
43
  close: 'x-mark',
49
- logout: 'arrow-right-on-rectangle',
50
- favorites: 'heart',
44
+ 'chevron-right': 'chevron-right',
45
+ 'chevron-left': 'chevron-left',
51
46
  },
52
47
  };
53
48
  if (globalThis.$storefrontThemeOptions) {
@@ -179,7 +174,9 @@ const genTailwindConfig = (themeOptions = {}) => {
179
174
  const { icons } = require(`@iconify-json/${iconset}`);
180
175
  shortcuts = Object.keys(icons.icons);
181
176
  Object.keys(iconAliases).forEach((alias) => {
182
- shortcuts.push([alias, iconAliases[alias]]);
177
+ if (alias !== iconAliases[alias]) {
178
+ shortcuts.push([alias, iconAliases[alias]]);
179
+ }
183
180
  });
184
181
  }
185
182
  shortcuts.forEach((shortcut) => {
@@ -0,0 +1 @@
1
+ import{a as q,h as G,c as J}from"./index.b93f3d06.js";import{_ as M,d as K,B as X,o as B,a as Q,u as v,b as Y,n as H,j as c,k as h,t as $,c as D,l as Z,E as ee,Q as te,C as ae,g as oe,w as P,h as le,e as F,H as se,I as re}from"./_plugin-vue_export-helper.4cb7dd76.js";const U=Symbol("carousel"),ne=K({__name:"CarouselControl",props:{isPrev:{type:Boolean,default:!1}},setup(r,{expose:u}){u();const{changeSlide:l}=X(U),t={changeSlide:l};return Object.defineProperty(t,"__isScriptSetup",{enumerable:!1,value:!0}),t}}),ue=["aria-label","data-carousel-control"];function ie(r,u,l,t,n,o){return B(),Q("button",{type:"button","aria-label":l.isPrev?"Anterior":"Próximo",onClick:u[0]||(u[0]=m=>t.changeSlide(l.isPrev?-1:1)),class:H(["group absolute top-0 z-1",l.isPrev?"left-0":"right-0"]),"data-carousel-control":l.isPrev?"previous":"next"},[v(r.$slots,"default",{},()=>[Y("i",{class:H(["m-0",l.isPrev?"i-chevron-left group-active:-translate-x-1":"i-chevron-right group-active:translate-x-1"])},null,2)])],10,ue)}const ce=M(ne,[["render",ie]]),de=K({__name:"Carousel",props:{as:{default:"ul"},modelValue:{default:1},autoplay:{}},emits:["update:modelValue"],setup(r,{expose:u,emit:l}){u();const t=r,n=c(t.modelValue-1);h($(t,"modelValue"),e=>{n.value=e-1}),h(n,(e,a)=>{e!==a&&l("update:modelValue",e+1)});const o=c(null),{x:m,isScrolling:L,arrivedState:_}=q(o),T=D(()=>_.left),W=D(()=>_.right),s=c([]),g=c(0),p=c(0),I=c(0),k=()=>{o.value&&(g.value=o.value.scrollWidth,p.value=o.value.offsetWidth)},V=()=>{if(!o.value)return;let e=[...o.value.children];e.length===1&&e[0].tagName.endsWith("SLOT")&&(e=[...e[0].children]),s.value=e.map(a=>({offsetLeft:a.offsetLeft,width:a.offsetWidth}))},z=e=>{let a=n.value+e;if(a>=s.value.length)return 0;a<0&&(a=s.value.length+a);const{offsetLeft:b,width:d}=s.value[a]||{};return d?b:0},x=()=>{const e=s.value.findIndex(a=>Math.abs(a.offsetLeft-m.value)<=5);e>-1&&(n.value=e||0)},E=()=>{const e=g.value-p.value;I.value=s.value.findIndex(({offsetLeft:a})=>a>=e-5)};let i;const f=()=>{t.autoplay&&(clearTimeout(i),i=setTimeout(()=>{C(1)},t.autoplay))},C=(e,a=!0)=>{if(s.value.length<2)return;if(a&&(e===1||e===-1)){let d=0,j=0;for(let S=n.value;S<s.value.length;S++){const{width:A}=s.value[S]||{};if(A&&(d+=1,j+=A,j>=p.value))break}d&&(e=e>0?d:-d)}t.autoplay||console.log({direction:e},n.value,s.value.length);const b=z(e);o.value?.scrollTo({left:b,behavior:"smooth"}),f()};h(L,e=>{e?clearTimeout(i):(x(),f())});const O=c(null),R=G(O);h(R,e=>{e?clearTimeout(i):f()});const w=()=>{o.value&&(k(),V(),x(),E())},y=J(()=>{o.value&&(o.value.scrollLeft=0,w())},400);Z(()=>{w(),ee(()=>{o.value&&[...o.value.children].forEach(e=>{e.setAttribute("tabindex","0")})}),f(),window.addEventListener("resize",y)}),te(()=>{window.removeEventListener("resize",y),clearTimeout(i)}),ae(U,{autoplay:$(t,"autoplay"),changeSlide:C,isBoundLeft:T,isBoundRight:W});const N={props:t,emit:l,currentIndex:n,wrapper:o,currentPos:m,isScrolling:L,arrivedState:_,isBoundLeft:T,isBoundRight:W,slidesWidth:s,wrapperScrollWidth:g,wrapperVisibleWidth:p,indexCount:I,calcWrapperWidth:k,calcSlidesWidth:V,calcNextOffsetLeft:z,calcCurrentIndex:x,calcIndexCount:E,get autoplayTimer(){return i},set autoplayTimer(e){i=e},restartAutoplay:f,changeSlide:C,carousel:O,isHovered:R,calcOnInit:w,onResize:y,CarouselControl:ce};return Object.defineProperty(N,"__isScriptSetup",{enumerable:!1,value:!0}),N}}),fe={ref:"carousel",class:"relative","data-carousel":""};function ve(r,u,l,t,n,o){return B(),Q("div",fe,[(B(),oe(le(l.as),{ref:"wrapper",class:"flex overflow-x-scroll overflow-y-hidden list-none m-0 p-0 snap-x snap-mandatory scroll-smooth [&>*]:snap-start [&>*]:outline-none",style:{"scrollbar-width":"none","-webkit-overflow-scrolling":"touch","-ms-overflow-style":"none"},"data-carousel-wrapper":""},{default:P(()=>[v(r.$slots,"default")]),_:3},512)),v(r.$slots,"controls",se(re({changeSlide:t.changeSlide,isBoundLeft:t.isBoundLeft,isBoundRight:t.isBoundRight,currentPage:t.currentIndex+1,pageCount:t.indexCount+1})),()=>[F(t.CarouselControl,{"is-prev":""},{default:P(()=>[v(r.$slots,"previous")]),_:3}),F(t.CarouselControl,null,{default:P(()=>[v(r.$slots,"next")]),_:3})])],512)}const me=M(de,[["render",ve]]);export{me as C,ce as a};
@@ -0,0 +1 @@
1
+ import{c as x,_ as b,d as g,a,e as d,w as i,o as r,f as w,v,b as o,F as y,r as C,n as f,u as S,g as k,h as H,y as T,x as m,i as p}from"./_plugin-vue_export-helper.4cb7dd76.js";import{p as h}from"./index.b93f3d06.js";import{C as B,a as N}from"./Carousel.62c97a79.js";import"./session-utm.744b0db3.js";const V=l=>({parsedSlides:x(()=>l.slides.map(e=>{const s=e.title?h(e.title).value:"",n=e.subtitle?h(e.subtitle).value:"",_=e.buttonText?h(e.buttonText).value:"";return{...e,hasHeader:!!(s||n||_)}}))}),D=g({__name:"HeroSlider",props:{autoplay:{},slides:{}},setup(l,{expose:c}){c();const e=l,{parsedSlides:s}=V(e),n={props:e,parsedSlides:s,Carousel:B,CarouselControl:N};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),j={class:"relative mx-auto"},z=["href"],F={key:0,class:"basis-1/2 grow-0 p-12 xl:ps-32 mb-3 md:mb-0"},L={key:0,class:"text-lg mt-4 md:mt-6"},P=["href"],E={class:"absolute z-10 bottom-5 flex justify-end items-center w-screen right-5 xl:right-auto xl:max-w-screen-xl xl:left-1/2 xl:-ms-[640px]"},O={class:"relative w-20 h-10 rounded-full bg-white/50 text-primary shadow-sm ring-1 ring-black/5"},q=o("i",{class:"i-arrow-left"},null,-1),A=o("i",{class:"i-arrow-right"},null,-1);function G(l,c,e,s,n,_){return r(),a("section",j,[d(s.Carousel,{autoplay:e.autoplay,class:"secondary [&>*]:items-center"},{controls:i(()=>[w(o("div",E,[o("div",O,[d(s.CarouselControl,{class:"w-10 h-10 rounded-full hover:bg-primary/10","is-prev":""},{default:i(()=>[q]),_:1}),d(s.CarouselControl,{class:"w-10 h-10 rounded-full hover:bg-primary/10"},{default:i(()=>[A]),_:1})])],512),[[v,s.parsedSlides.length>1]])]),default:i(()=>[(r(!0),a(y,null,C(s.parsedSlides,(t,u)=>(r(),a("li",{key:u,class:"shrink-0 basis-full"},[o("div",{class:f(["w-screen max-w-screen-2xl mx-auto overflow-x-hidden",t.hasHeader?"grid grid-cols-1 md:grid-cols-2 items-center":null])},[o("a",{href:t.href,class:f(t.hasHeader?"basis-1/2 grow-0 md:order-last":null)},[S(l.$slots,`picture-${u}`)],10,z),t.hasHeader?(r(),a("div",F,[(r(),k(H(u===0?"h2":"h3"),{class:"ui-title mt-1"},{default:i(()=>[T(m(t.title),1)]),_:2},1024)),t.subtitle?(r(),a("p",L,m(t.subtitle),1)):p("",!0),t.buttonText?(r(),a("a",{key:1,href:t.buttonLink,class:"ui-btn-lg ui-btn-contrast min-w-[150px] mt-7 md:mt-10"},m(t.buttonText),9,P)):p("",!0)])):p("",!0)],2)]))),128))]),_:3},8,["autoplay"])])}const Q=b(D,[["render",G]]);export{Q as default};
@@ -0,0 +1 @@
1
+ import{s as _,c as u,_ as f,d as m,a as l,b as h,e as d,w as p,o,f as v,v as C,F as g,r as b,g as w,h as x,n as y,i as S}from"./_plugin-vue_export-helper.4cb7dd76.js";import{p as k}from"./index.b93f3d06.js";import{C as B,a as P}from"./Carousel.62c97a79.js";import"./session-utm.744b0db3.js";function V(t,s){{const a=btoa(JSON.stringify({filename:t}));window.parent.postMessage(JSON.parse(JSON.stringify({type:"open",filename:t,id:a})),window.location.origin),window.addEventListener("message",e=>{e.data.id===a&&s(e.data.data)})}}const L=t=>{const s=_(null);return window.$isCmsPreview&&V(t,a=>{s.value=a}),{liveContent:s}},N=t=>{const s={slides:[]};return t.header?.pitch_bar&&(s.slides=t.header.pitch_bar),s},O=t=>{const{liveContent:s}=L("layout"),a=u(()=>(s.value?N(s.value).slides:t.slides).map(({html:n})=>k(n).value.replace(/<\/?p>/g,"").replace(/&lt;(\/?d-md)&gt;/g,"<$1>"))),e=u(()=>a.value.filter(r=>r).length);return{parsedContents:a,countValidSlides:e}},J=m({__name:"PitchBar",props:{slides:{}},setup(t,{expose:s}){s();const a=t,{parsedContents:e,countValidSlides:r}=O(a),n={props:a,parsedContents:e,countValidSlides:r,Carousel:B,CarouselControl:P};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}}),M={class:"bg-base-100 relative z-20"},z={class:"container md:w-2/3 mx-auto px-3 py-1"},D=["innerHTML"],E={class:"text-xl leading-none text-base-400"};function F(t,s,a,e,r,n){return o(),l("div",M,[h("div",z,[d(e.Carousel,{autoplay:e.countValidSlides>1?7e3:void 0},{controls:p(()=>[v(h("div",E,[d(e.CarouselControl,{class:"pr-2 bg-base-100 hover:text-base-700","is-prev":""}),d(e.CarouselControl,{class:"pl-2 bg-base-100 hover:text-base-700"})],512),[[C,e.countValidSlides>1]])]),default:p(()=>[(o(!0),l(g,null,b(a.slides,(i,c)=>(o(),l("li",{key:c,class:"shrink-0 basis-full h-full text-center"},[(o(),w(x(i.href?"ALink":"span"),{href:i.href,target:i.target,class:y(["inline-block px-8",i.href?"hover:underline":null])},{default:p(()=>[e.parsedContents[c]?(o(),l("span",{key:0,innerHTML:e.parsedContents[c],class:"prose text-sm text-base-800"},null,8,D)):S("",!0)]),_:2},1032,["href","target","class"]))]))),128))]),_:1},8,["autoplay"])])])}const R=f(J,[["render",F]]);export{R as default};
@@ -0,0 +1 @@
1
+ import{L as R,j as O,M as F,N as A,c as d,O as Q,_ as z,d as E,m as M,o as i,a as c,x as h,i as f,b as g,y as I,n as B,e as w,w as L,g as j,F as D,h as T,q as G,f as J,v as K,r as U}from"./_plugin-vue_export-helper.4cb7dd76.js";import{a as N,b as X}from"./api.4984c5be.js";import{C as Y,a as Z}from"./Carousel.62c97a79.js";import{d as $,e as ee,g as te,l as ne,h as ae,w as re}from"./index.b93f3d06.js";import{i as oe,g as se}from"./img.abbe849f.js";import"./session-utm.744b0db3.js";const ie=(t,n=R.get("lang"))=>n&&t.i18n&&t.i18n[n]?t.i18n[n]:t.name||t.title||oe(t.i18n,n)||"",le=ie,ce=t=>t&&t.min_quantity||1,ue=ce,de=t=>!t.hasOwnProperty("quantity")||t.quantity>=ue(t),W=de,me=t=>{const n=O(t.title||""),r=O(t.titleLink||""),e=O(!1);let m=null;const o=O(null),u=F(t.products||[]);return t.products||(e.value=!0,m=(async()=>{let _=t.searchQuery||"",p;if(t.collectionId){try{const{data:a}=await N.get(`collections/${t.collectionId}`);p=a}catch(a){console.error(a),o.value=a}const l=p?.products;Array.isArray(l)&&l.length&&(_+=`&_id=${l.slice(0,60).join(",")}`),!n.value&&n.value!==null&&p?.name&&(n.value=p?.name)}const v=t.limit||24;let b=`offset=${t.page?(t.page-1)*v:0}&limit=${v}`;t.sort&&(b+=`&sort=${t.sort}`),b+=_;try{const{data:l}=await N.get(`search/v1?${b}`);if(t.isShuffle){let a=l.result.filter(P=>P.available&&W(P)).length,k,C;for(;a;)C=Math.floor(Math.random()*a--),k=l.result[a],l.result[a]=l.result[C],l.result[C]=k}l.result.forEach(a=>u.push(a))}catch(l){console.error(l),o.value=l}e.value=!1})()),{title:n,titleLink:r,isFetching:e,fetching:m,fetchError:o,products:u}},he=t=>{const n=O(!1);let r=null;const e=O(null),{productId:m}=t,o=F({...t.product,_id:t.product?._id||m,price:A(t.product||{})});!t.product&&m&&(n.value=!0,r=(async()=>{try{const{data:a}=await N.get(`products/${m}`);Object.assign(o,a)}catch(a){console.error(a),e.value=a}n.value=!1})());const u=d(()=>le(o)),_=d(()=>{const{slug:a}=o;return typeof a=="string"?`/${a}`:null}),p=d(()=>{const{pictures:a}=o,k=[];return a&&a.forEach(C=>{const P=se(C);P&&k.push(P)}),k}),v=d(()=>W(o)),x=d(()=>v.value&&o.available&&o.visible),b=d(()=>{if(Q(o)){const a=o.base_price;return Math.round((a-A(o))*100/a)}return 0}),l=d(()=>o.has_variations?!0:!!o.variations?.length);return{isFetching:n,fetching:r,fetchError:e,product:o,title:u,link:_,images:p,isInStock:v,isActive:x,discountPercentage:b,hasVariations:l}},q=(t,n)=>{const{type:r,value:e}=n;let m;return e?(r==="percentage"?m=t*((100-e)/100):m=t-e,m>0?m:0):t},_e=t=>{const n=d(()=>t.product||{price:t.price||0,base_price:t.basePrice}),r=d(()=>{const{variations:s}=n.value;if(s){const y=A(n.value);for(let S=0;S<s.length;S++)if(A({...n.value,...s[S]})>y)return!0}return!1}),e=d(()=>{const s=A(n.value),y=$.value;return y&&(!y.min_amount||s>y.min_amount)?q(s,y):s}),m=d(()=>{if(Q(n.value))return n.value.base_price;const s=A(n.value);return s>e.value?s:0}),o=d(()=>t.installmentsOption||ee.value||{max_number:1}),u=d(()=>{if(o.value.max_number<=1)return 1;const s=o.value.min_installment||5,y=Math.round(e.value/s);return Math.min(y,o.value.max_number)}),_=d(()=>o.value.monthly_interest||0),p=d(()=>{if(u.value>=2){if(!_.value)return e.value/u.value;const s=_.value/100;return e.value*s/(1-(1+s)**-u.value)}return 0}),v=d(()=>{const s=t.discountOption||te.value;return s&&(!s.min_amount||s.min_amount<=e.value)&&(!t.isAmountTotal||s.apply_at==="total")?s:{}}),x=d(()=>{const{label:s}=v.value;return s?s.includes(" ")?s:`via ${s}`:""}),b=d(()=>q(e.value,v.value)),l=d(()=>{if(t.loyaltyPointsProgram)return t.loyaltyPointsProgram;const s=ne.value;if(s){const y=Object.keys(s);for(let S=0;S<y.length;S++){const V=s[y[S]];if(V?.earn_percentage&&V.earn_percentage>0)return V}}return{ratio:0}}),a=d(()=>l.value.min_subtotal_to_earn||0),k=d(()=>l.value.name||""),C=d(()=>l.value.earn_percentage||0),P=d(()=>C.value*l.value.ratio),H=d(()=>P.value>=1?e.value*(P.value/100):0);return{hasVariedPrices:r,salePrice:e,comparePrice:m,installmentsObject:o,installmentsNumber:u,monthlyInterest:_,installmentValue:p,discountObject:v,discountLabel:x,priceWithDiscount:b,pointsProgramObject:l,pointsMinPrice:a,pointsProgramName:k,earnPointsPercentage:C,cashbackPercentage:P,cashbackValue:H}},fe=E({__name:"Prices",props:{isBig:{type:Boolean},isLiteral:{type:Boolean},hasCashback:{type:Boolean,default:!0},hasPriceOptions:{type:Boolean,default:!0},product:{},price:{},basePrice:{},isAmountTotal:{type:Boolean},installmentsOption:{},discountOption:{},loyaltyPointsProgram:{}},setup(t,{expose:n}){n();const r=t,{hasVariedPrices:e,salePrice:m,comparePrice:o,cashbackPercentage:u,cashbackValue:_,installmentsNumber:p,monthlyInterest:v,installmentValue:x,priceWithDiscount:b,discountLabel:l}=_e(r),a={props:r,hasVariedPrices:e,salePrice:m,comparePrice:o,cashbackPercentage:u,cashbackValue:_,installmentsNumber:p,monthlyInterest:v,installmentValue:x,priceWithDiscount:b,discountLabel:l};return Object.defineProperty(a,"__isScriptSetup",{enumerable:!1,value:!0}),a}}),ge={key:0,class:"text-base-500 mr-1 [font-size:87%]"},ve={key:0},pe={key:1},be={key:0},ye={key:0,class:"relative z-10"},ke=["data-tooltip"],Pe=g("i",{class:"i-arrow-uturn-left mr-1"},null,-1),we={class:"font-medium"},xe=g("small",null," cashback",-1),Ce={key:0},Oe={key:0},Ie={key:1},Le={key:2},Se={key:0},Ae={key:0},Ve={key:1};function je(t,n,r,e,m,o){const u=M("Fade");return i(),c("div",{class:B(["text-base-600 [&>div]:[font-size:90%] [&_small]:lowercase [&_small]:[font-size:92%]",r.isBig?"text-lg":null]),"data-prices":""},[e.comparePrice?(i(),c("span",ge,[r.isLiteral?(i(),c("small",ve,h("De "))):f("",!0),g("s",null,h(t.$money(e.comparePrice)),1),r.isLiteral?(i(),c("small",pe,h(" Por"))):f("",!0)])):f("",!0),g("strong",{class:B(["inline-block text-base-800",r.isBig?"text-5xl block":null])},[e.hasVariedPrices?(i(),c("small",be,h("A partir de "))):f("",!0),I(" "+h(t.$money(e.salePrice)),1)],2),w(u,{slide:"down"},{default:L(()=>[e.cashbackValue&&r.hasCashback?(i(),c("div",ye,[g("span",{"data-tooltip":"Receba $1 de volta".replace("$1",t.$percentage(e.cashbackPercentage))},[Pe,g("span",we,h(t.$money(e.cashbackValue)),1),xe],8,ke)])):f("",!0)]),_:1}),w(u,{slide:"down"},{default:L(()=>[e.installmentValue&&r.hasPriceOptions?(i(),c("div",Ce,[r.isLiteral?(i(),c("small",Oe,h("Até "))):f("",!0),I(" "+h(e.installmentsNumber)+"x ",1),r.isLiteral?(i(),c("small",Ie,h(" De "))):f("",!0),g("span",null,h(t.$money(e.installmentValue)),1),!e.monthlyInterest&&r.isLiteral?(i(),c("small",Le,h("Sem juros"))):f("",!0)])):f("",!0)]),_:1}),w(u,{slide:"down"},{default:L(()=>[e.priceWithDiscount<e.salePrice&&r.hasPriceOptions?(i(),c("div",Se,[e.discountLabel?f("",!0):(i(),c("small",Ae,h("A partir de "))),g("span",null,h(t.$money(e.priceWithDiscount)),1),e.discountLabel?(i(),c("small",Ve,h(` ${e.discountLabel}`),1)):f("",!0)])):f("",!0)]),_:1})],2)}const Be=z(fe,[["render",je]]),De=E({__name:"ProductCard",props:{product:{},productId:{},headingTag:{default:"h3"}},setup(t,{expose:n}){n();const r=t,{product:e,title:m,link:o,images:u,isInStock:_,isActive:p,discountPercentage:v,hasVariations:x}=he({product:r.product,productId:r.productId}),b=O(null),l=ae(b),a=O(!1);re(l,()=>{a.value=!0});const k={props:r,product:e,title:m,link:o,images:u,isInStock:_,isActive:p,discountPercentage:v,hasVariations:x,card:b,isHovered:l,wasHoveredOnce:a,get addProductToCart(){return X},Prices:Be};return Object.defineProperty(k,"__isScriptSetup",{enumerable:!1,value:!0}),k}}),Ne=["data-sku"],ze={class:"aspect-square p-2 motion-safe:group-hover:scale-110 transition-transform"},Ee={class:"relative w-full h-full bg-white rounded overflow-hidden group-hover:rounded-none"},Me={key:1,class:"w-full h-full bg-gradient-to-br from-base-50/20 to-base-100"},Te={key:0,class:"uno-bm03rg"},qe={class:"relative flex flex-col grow justify-between p-4 group-hover:backdrop-blur-md bg-white/40 z-10"},Fe={class:"pt-2"},Qe={key:0},We={key:1,class:"ui-badge bg-warning-100 text-warning-700"},He=g("i",{class:"i-plus-20-solid mr-0.5"},null,-1);function Re(t,n,r,e,m,o){const u=M("AImg");return i(),c("article",{ref:"card","data-sku":e.product.sku,class:"relative h-full max-w-[350px] mx-auto py-3 group"},[(i(),j(T(e.link?"ALink":"span"),{href:e.link,class:"flex flex-col h-full rounded overflow-hidden group-hover:shadow group-hover:ring-1 ring-black/5"},{default:L(()=>[g("div",ze,[g("div",Ee,[e.images?.length?(i(),c(D,{key:0},[w(u,{picture:e.images[0],alt:e.title,class:"absolute top-0 left-0 block w-full h-full object-cover"},null,8,["picture","alt"]),e.images[1]&&e.wasHoveredOnce?(i(),j(u,{key:0,picture:e.images[1],alt:e.title,class:"absolute top-0 left-0 block w-full h-full object-cover opacity-0 group-hover:opacity-100 transition-opacity motion-safe:duration-300 text-transparent z-10"},null,8,["picture","alt"])):f("",!0)],64)):(i(),c("div",Me))])]),e.discountPercentage?(i(),c("span",Te,[I(" -"),g("strong",null,h(e.discountPercentage),1),I("% ")])):f("",!0),g("div",qe,[(i(),j(T(r.headingTag),{class:B(["ui-link no-underline line-clamp-2",[e.isActive?"text-base-700":"text-base-500",e.link?"group-hover:underline group-hover:text-primary":null]])},{default:L(()=>[I(h(e.title),1)]),_:1},8,["class"])),g("div",Fe,[e.isActive?(i(),c("div",Qe,[w(e.Prices,{product:e.product},null,8,["product"])])):(i(),c("span",We,h(e.isInStock?"Inativo":"Sem estoque"),1))]),e.isActive&&!e.hasVariations?(i(),c("button",{key:0,class:"ui-btn-sm ui-btn-primary absolute -top-6 left-0 w-full rounded-none opacity-0 group-hover:opacity-100 transition -z-10 group-hover:z-10",onClick:n[0]||(n[0]=G(_=>e.addProductToCart(e.product),["prevent"]))},[He,I(" "+h("Adicionar ao carrinho"))])):f("",!0)])]),_:1},8,["href"]))],8,Ne)}const Ge=z(De,[["render",Re]]),Je=E({__name:"ProductShelf",props:{collectionId:{},searchQuery:{},sort:{},title:{},titleLink:{},isShuffle:{type:Boolean},limit:{},page:{},products:{}},async setup(t,{expose:n}){n();const r=t,{title:e,titleLink:m,fetching:o,products:u}=me(r),_={props:r,title:e,titleLink:m,fetching:o,products:u,Carousel:Y,CarouselControl:Z,ProductCard:Ge};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}}),Ke={class:"container mx-auto"},Ue={key:0},Xe={class:"text-3xl lg:text-xl leading-none text-primary lg:opacity-0 group-hover/shelf:opacity-90 transition-opacity"};function Ye(t,n,r,e,m,o){const u=M("ALink");return i(),c("section",Ke,[e.title?(i(),c("h2",Ue,[e.titleLink?(i(),j(u,{key:0,href:e.titleLink},{default:L(()=>[I(h(e.title),1)]),_:1},8,["href"])):(i(),c(D,{key:1},[I(h(e.title),1)],64))])):f("",!0),w(e.Carousel,{class:"group/shelf"},{controls:L(()=>[J(g("div",Xe,[w(e.CarouselControl,{class:"!top-1/2 lg:-left-2 w-10 h-10 bg-transparent lg:bg-white/80 lg:hover:bg-primary/10 rounded-full lg:shadow-sm lg:ring-1 ring-black/5","is-prev":""}),w(e.CarouselControl,{class:"!top-1/2 lg:-right-2 w-10 h-10 bg-transparent lg:bg-white/80 lg:hover:bg-primary/10 rounded-full lg:shadow-sm lg:ring-1 ring-black/5"})],512),[[K,e.products.length>2]])]),default:L(()=>[(i(!0),c(D,null,U(e.products,_=>(i(),c("li",{key:_._id,class:"basis-1/2 md:basis-1/3 lg:basis-1/4 shrink-0"},[w(e.ProductCard,{product:_},null,8,["product"])]))),128))]),_:1})])}const rt=z(Je,[["render",Ye]]);export{rt as default};