cloudcommerce 0.6.13 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/action.yml +2 -2
  3. package/ecomplus-stores/monocard/functions/core/package.json +1 -1
  4. package/ecomplus-stores/monocard/functions/events/package.json +2 -2
  5. package/ecomplus-stores/monocard/functions/modules/package.json +2 -2
  6. package/ecomplus-stores/monocard/functions/passport/package.json +2 -2
  7. package/ecomplus-stores/monocard/functions/ssr/content/settings.json +2 -2
  8. package/ecomplus-stores/monocard/functions/ssr/package.json +8 -8
  9. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/card-phone.png +0 -0
  10. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/qrcode-camera.png +0 -0
  11. package/ecomplus-stores/monocard/functions/ssr/src/components/CasesGrid.astro +1 -1
  12. package/ecomplus-stores/monocard/functions/ssr/src/components/FeatureTabs.astro +23 -0
  13. package/ecomplus-stores/monocard/functions/ssr/src/components/FeatureTabs.vue +225 -0
  14. package/ecomplus-stores/monocard/functions/ssr/src/components/ShopHeaderMenu.vue +2 -2
  15. package/ecomplus-stores/monocard/functions/ssr/src/layouts/Base.astro +1 -0
  16. package/ecomplus-stores/monocard/functions/ssr/src/layouts/Pages.astro +0 -1
  17. package/ecomplus-stores/monocard/functions/ssr/src/main/Home.astro +3 -3
  18. package/ecomplus-stores/monocard/package.json +1 -1
  19. package/ecomplus-stores/tia-sonia/functions/ssr/src/layouts/PagesHeader.astro +0 -11
  20. package/package.json +6 -6
  21. package/packages/api/package.json +1 -1
  22. package/packages/apps/correios/package.json +1 -1
  23. package/packages/apps/custom-payment/package.json +1 -1
  24. package/packages/apps/custom-shipping/package.json +1 -1
  25. package/packages/apps/datafrete/package.json +1 -1
  26. package/packages/apps/discounts/package.json +1 -1
  27. package/packages/apps/emails/package.json +1 -1
  28. package/packages/apps/fb-conversions/package.json +1 -1
  29. package/packages/apps/frenet/package.json +1 -1
  30. package/packages/apps/galaxpay/package.json +1 -1
  31. package/packages/apps/google-analytics/package.json +1 -1
  32. package/packages/apps/infinitepay/package.json +1 -1
  33. package/packages/apps/jadlog/package.json +1 -1
  34. package/packages/apps/loyalty-points/package.json +1 -1
  35. package/packages/apps/melhor-envio/package.json +1 -1
  36. package/packages/apps/mercadopago/package.json +1 -1
  37. package/packages/apps/pagarme/package.json +2 -2
  38. package/packages/apps/paghiper/package.json +1 -1
  39. package/packages/apps/pix/package.json +1 -1
  40. package/packages/apps/tiny-erp/lib/integration/after-tiny-queue.js +2 -2
  41. package/packages/apps/tiny-erp/lib/integration/after-tiny-queue.js.map +1 -1
  42. package/packages/apps/tiny-erp/lib/integration/import-order-from-tiny.js +4 -3
  43. package/packages/apps/tiny-erp/lib/integration/import-order-from-tiny.js.map +1 -1
  44. package/packages/apps/tiny-erp/lib/integration/import-product-from-tiny.js +19 -19
  45. package/packages/apps/tiny-erp/lib/integration/import-product-from-tiny.js.map +1 -1
  46. package/packages/apps/tiny-erp/lib/integration/parsers/order-to-tiny.js +5 -3
  47. package/packages/apps/tiny-erp/lib/integration/parsers/order-to-tiny.js.map +1 -1
  48. package/packages/apps/tiny-erp/lib/integration/parsers/product-from-tiny.js +11 -11
  49. package/packages/apps/tiny-erp/lib/integration/parsers/product-from-tiny.js.map +1 -1
  50. package/packages/apps/tiny-erp/lib/integration/parsers/product-to-tiny.js +19 -10
  51. package/packages/apps/tiny-erp/lib/integration/parsers/product-to-tiny.js.map +1 -1
  52. package/packages/apps/tiny-erp/package.json +1 -1
  53. package/packages/apps/tiny-erp/src/integration/after-tiny-queue.ts +2 -2
  54. package/packages/apps/tiny-erp/src/integration/import-order-from-tiny.ts +4 -3
  55. package/packages/apps/tiny-erp/src/integration/import-product-from-tiny.ts +18 -18
  56. package/packages/apps/tiny-erp/src/integration/parsers/order-to-tiny.ts +5 -3
  57. package/packages/apps/tiny-erp/src/integration/parsers/product-from-tiny.ts +11 -11
  58. package/packages/apps/tiny-erp/src/integration/parsers/product-to-tiny.ts +21 -11
  59. package/packages/apps/webhooks/package.json +1 -1
  60. package/packages/cli/config/firebase.json +24 -6
  61. package/packages/cli/package.json +1 -1
  62. package/packages/config/package.json +1 -1
  63. package/packages/emails/package.json +2 -2
  64. package/packages/events/package.json +1 -1
  65. package/packages/firebase/package.json +2 -2
  66. package/packages/i18n/package.json +1 -1
  67. package/packages/modules/package.json +1 -1
  68. package/packages/passport/package.json +1 -1
  69. package/packages/ssr/package.json +5 -5
  70. package/packages/storefront/.base.eslintrc.cjs +1 -1
  71. package/packages/storefront/astro.config.mjs +1 -1
  72. package/packages/storefront/dist/client/_astro/ShopHeader.e93c8274.js +4 -0
  73. package/packages/storefront/dist/client/_astro/{firebase-app.7ce2ebb1.js → firebase-app.72e91a3e.js} +72 -72
  74. package/packages/storefront/dist/client/sw.js +1 -1
  75. package/packages/storefront/dist/server/chunks/{astro.2e59789d.mjs → astro.9781c0a7.mjs} +217 -272
  76. package/packages/storefront/dist/server/chunks/{image-pool.78b6d784.mjs → image-pool.c24d15b2.mjs} +1202 -1202
  77. package/packages/storefront/dist/server/chunks/pages/{all.f49a350f.mjs → all.3a2f4354.mjs} +218 -289
  78. package/packages/storefront/dist/server/entry.mjs +16 -363
  79. package/packages/storefront/package.json +11 -11
  80. package/packages/storefront/scripts/build-prod.sh +7 -0
  81. package/packages/storefront/src/lib/components/Picture.astro +94 -0
  82. package/packages/storefront/src/lib/layouts/BaseHead.astro +2 -8
  83. package/packages/storefront/ssr-runtime/Picture.ssr.astro +0 -0
  84. package/packages/storefront/ssr-runtime/get-image.ts +4 -0
  85. package/packages/storefront/ssr-runtime/get-picture.ts +126 -0
  86. package/packages/types/package.json +1 -1
  87. package/ecomplus-stores/monocard/functions/ssr/src/components/UsageSteps.astro +0 -21
  88. package/ecomplus-stores/monocard/functions/ssr/src/components/UsageSteps.vue +0 -155
  89. package/packages/storefront/dist/client/_astro/ShopHeader.301e109b.js +0 -4
  90. package/packages/storefront/src/lib/ssr/Picture.astro +0 -27
  91. package/packages/storefront/src/lib/ssr/image.ts +0 -68
@@ -6,10 +6,10 @@ import postTiny from './post-tiny-erp';
6
6
  import parseProduct from './parsers/product-from-tiny';
7
7
 
8
8
  export default async (apiDoc, queueEntry, appData, canCreateNew, isHiddenQueue) => {
9
- const [sku, productId] = String(queueEntry.nextId).split(';:');
9
+ const [queueSku, queueProductId] = String(queueEntry.nextId).split(';:');
10
10
  let product: Products | null = null;
11
11
  try {
12
- product = (await api.get(`products/${(productId || `sku:${sku}`)}`)).data;
12
+ product = (await api.get(`products/${(queueProductId || `sku:${queueSku}`)}`)).data;
13
13
  } catch (err: any) {
14
14
  if (err.statusCode !== 404) {
15
15
  throw err;
@@ -20,13 +20,13 @@ export default async (apiDoc, queueEntry, appData, canCreateNew, isHiddenQueue)
20
20
  if (product) {
21
21
  const { variations } = product;
22
22
  hasVariations = Boolean(variations && variations.length);
23
- const variation = variations?.find((variation) => sku === variation.sku);
23
+ const variation = variations?.find(({ sku }) => queueSku === sku);
24
24
  if (variation) {
25
25
  variationId = variation._id;
26
26
  } else {
27
- logger.info(`SKU not found ${sku}`);
27
+ logger.info(`SKU not found ${queueSku}`);
28
28
  if (!isHiddenQueue && !appData.update_product) {
29
- const msg = sku
29
+ const msg = queueSku
30
30
  + ' corresponde a um produto com variações,'
31
31
  + ' especifique o SKU da variação para importar.';
32
32
  const err: any = new Error(msg);
@@ -37,10 +37,10 @@ export default async (apiDoc, queueEntry, appData, canCreateNew, isHiddenQueue)
37
37
  }
38
38
  }
39
39
 
40
- const handleTinyStock = ({ produto, tipo }, tinyProduct?) => {
41
- let quantity = Number(produto.saldo) || Number(produto.estoqueAtual);
42
- if (produto.saldoReservado) {
43
- quantity -= Number(produto.saldoReservado);
40
+ const handleTinyStock = ({ produto: produtoSaldo, tipo }, tinyProduct?) => {
41
+ let quantity = Number(produtoSaldo.saldo) || Number(produtoSaldo.estoqueAtual);
42
+ if (produtoSaldo.saldoReservado) {
43
+ quantity -= Number(produtoSaldo.saldoReservado);
44
44
  }
45
45
  if (product && (!appData.update_product || variationId)) {
46
46
  if (!Number.isNaN(quantity)) {
@@ -77,15 +77,15 @@ export default async (apiDoc, queueEntry, appData, canCreateNew, isHiddenQueue)
77
77
  return null;
78
78
  }
79
79
  // @ts-ignore
80
- return parseProduct(produto, method === 'POST').then((product: Products) => {
80
+ return parseProduct(produto, method === 'POST').then((parsedProduct: Products) => {
81
81
  if (!Number.isNaN(quantity)) {
82
- product.quantity = quantity >= 0 ? quantity : 0;
82
+ parsedProduct.quantity = quantity >= 0 ? quantity : 0;
83
83
  }
84
84
  logger.info(`${method} ${endpoint}`);
85
85
  const promise = api({
86
86
  method,
87
87
  endpoint,
88
- data: product,
88
+ data: parsedProduct,
89
89
  });
90
90
 
91
91
  if (Array.isArray(produto.variacoes) && produto.variacoes.length) {
@@ -129,19 +129,19 @@ export default async (apiDoc, queueEntry, appData, canCreateNew, isHiddenQueue)
129
129
  };
130
130
 
131
131
  logger.info(JSON.stringify({
132
- sku,
133
- productId,
132
+ queueSku,
133
+ queueProductId,
134
134
  hasVariations,
135
135
  variationId,
136
136
  }));
137
137
  const { tinyStockUpdate } = queueEntry;
138
- if (tinyStockUpdate && isHiddenQueue && productId) {
138
+ if (tinyStockUpdate && isHiddenQueue && queueProductId) {
139
139
  return handleTinyStock(tinyStockUpdate as any);
140
140
  }
141
- return postTiny('/produtos.pesquisa.php', { pesquisa: sku })
141
+ return postTiny('/produtos.pesquisa.php', { pesquisa: queueSku })
142
142
  .then(({ produtos }) => {
143
143
  if (Array.isArray(produtos)) {
144
- let tinyProduct = produtos.find(({ produto }) => sku === String(produto.codigo));
144
+ let tinyProduct = produtos.find(({ produto }) => queueSku === String(produto.codigo));
145
145
  if (tinyProduct) {
146
146
  tinyProduct = tinyProduct.produto;
147
147
  if (!hasVariations || variationId) {
@@ -154,7 +154,7 @@ export default async (apiDoc, queueEntry, appData, canCreateNew, isHiddenQueue)
154
154
  return handleTinyStock({ produto: {} } as any, tinyProduct);
155
155
  }
156
156
  }
157
- const msg = `SKU ${sku} não encontrado no Tiny`;
157
+ const msg = `SKU ${queueSku} não encontrado no Tiny`;
158
158
  const err: any = new Error(msg);
159
159
  err.isConfigError = true;
160
160
  throw new Error(err);
@@ -31,7 +31,7 @@ export default (order: Orders, appData) => {
31
31
  ].forEach(([addressField, tinyField, maxLength]) => {
32
32
  if (address[addressField]) {
33
33
  tinyObject[tinyField] = String(address[addressField])
34
- .substring(0, maxLength as number);
34
+ .substring(0, maxLength as number).replace('&', 'e');
35
35
  }
36
36
  });
37
37
  };
@@ -39,12 +39,14 @@ export default (order: Orders, appData) => {
39
39
  if (buyer) {
40
40
  const tinyCustomer: Record<string, any> = {
41
41
  codigo: buyer._id,
42
- nome: (buyer.corporate_name || ecomUtils.fullName(buyer)).substring(0, 30)
42
+ nome: (buyer.corporate_name
43
+ || ecomUtils.fullName(buyer)).substring(0, 30).replace('&', 'e')
43
44
  || `Comprador de #${orderRef}`,
44
45
  tipo_pessoa: buyer.registry_type === 'j' ? 'J' : 'F',
45
46
  };
46
47
  if (buyer.display_name) {
47
- tinyCustomer.nome_fantasia = buyer.display_name.substring(0, 30);
48
+ tinyCustomer.nome_fantasia = buyer.display_name
49
+ .substring(0, 30).replace('&', 'e');
48
50
  }
49
51
  if (buyer.doc_number && buyer.doc_number.length <= 18) {
50
52
  tinyCustomer.cpf_cnpj = buyer.doc_number;
@@ -33,24 +33,24 @@ const tryImageUpload = (originImgUrl: string, product: Products) => new Promise(
33
33
  'X-My-ID': authenticationId,
34
34
  'X-API-Key': apiKey,
35
35
  },
36
- }).then(({ data, status }) => {
37
- if (data.picture) {
38
- Object.keys(data.picture).forEach((imgSize) => {
39
- if (data.picture[imgSize]) {
40
- if (!data.picture[imgSize].url) {
41
- delete data.picture[imgSize];
36
+ }).then(({ data: { picture }, status }) => {
37
+ if (picture) {
38
+ Object.keys(picture).forEach((imgSize) => {
39
+ if (picture[imgSize]) {
40
+ if (!picture[imgSize].url) {
41
+ delete picture[imgSize];
42
42
  return;
43
43
  }
44
- if (data.picture[imgSize].size !== undefined) {
45
- delete data.picture[imgSize].size;
44
+ if (picture[imgSize].size !== undefined) {
45
+ delete picture[imgSize].size;
46
46
  }
47
- data.picture[imgSize].alt = `${product.name} (${imgSize})`;
47
+ picture[imgSize].alt = `${product.name} (${imgSize})`;
48
48
  }
49
49
  });
50
- if (Object.keys(data.picture).length) {
50
+ if (Object.keys(picture).length) {
51
51
  return resolve({
52
52
  _id: ecomUtils.randomObjectId(),
53
- ...data.picture,
53
+ ...picture,
54
54
  });
55
55
  }
56
56
  }
@@ -1,9 +1,20 @@
1
- /* eslint-disable no-nested-ternary */
2
1
  import type { Products } from '@cloudcommerce/types';
3
2
  import ecomUtils from '@ecomplus/utils';
4
3
 
5
4
  export default async (product: Products, originalTinyProduct, appData) => {
6
5
  const hasVariations = product.variations && product.variations.length;
6
+ let unidade: string = originalTinyProduct?.unidade;
7
+ if (!unidade) {
8
+ if (
9
+ product.measurement
10
+ && product.measurement.unit !== 'oz'
11
+ && product.measurement.unit !== 'ct'
12
+ ) {
13
+ unidade = product.measurement.unit.substring(0, 3).toUpperCase();
14
+ } else {
15
+ unidade = 'UN';
16
+ }
17
+ }
7
18
  const tinyProduct: Record<string, any> = {
8
19
  sequencia: 1,
9
20
  origem: 0,
@@ -12,11 +23,7 @@ export default async (product: Products, originalTinyProduct, appData) => {
12
23
  classe_produto: hasVariations ? 'V' : 'S',
13
24
  codigo: product.sku,
14
25
  nome: ecomUtils.name(product, 'pt_br').substring(0, 120),
15
- unidade: originalTinyProduct && originalTinyProduct.unidade
16
- ? originalTinyProduct.unidade
17
- : product.measurement && product.measurement.unit !== 'oz' && product.measurement.unit !== 'ct'
18
- ? product.measurement.unit.substring(0, 3).toUpperCase()
19
- : 'UN',
26
+ unidade,
20
27
  };
21
28
 
22
29
  if (ecomUtils.onPromotion(product)) {
@@ -63,9 +70,12 @@ export default async (product: Products, originalTinyProduct, appData) => {
63
70
  if (dimensions) {
64
71
  Object.keys(dimensions).forEach((side) => {
65
72
  if (dimensions[side] && dimensions[side].value) {
66
- let field = side === 'width' ? 'largura'
67
- : side === 'height' ? 'altura'
68
- : 'comprimento';
73
+ let field: string;
74
+ if (side === 'width') {
75
+ field = 'largura';
76
+ } else {
77
+ field = side === 'height' ? 'altura' : 'comprimento';
78
+ }
69
79
  field += '_embalagem';
70
80
  tinyProduct[field] = dimensions[side].value;
71
81
  if (dimensions[side].unit === 'mm') {
@@ -124,8 +134,8 @@ export default async (product: Products, originalTinyProduct, appData) => {
124
134
  Object.keys(variation.specifications).forEach((gridId) => {
125
135
  const gridOptions = variation.specifications[gridId];
126
136
  if (gridOptions && gridOptions.length) {
127
- gridOptions.forEach(({ text }, i) => {
128
- tinyVariation.grade[i === 0 ? gridId : `${gridId}_${(i + 1)}`] = text;
137
+ gridOptions.forEach(({ text }, ii) => {
138
+ tinyVariation.grade[ii === 0 ? gridId : `${gridId}_${(ii + 1)}`] = text;
129
139
  });
130
140
  }
131
141
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-webhooks",
3
3
  "type": "module",
4
- "version": "0.6.13",
4
+ "version": "0.7.1",
5
5
  "description": "E-Com Plus Cloud Commerce app for general order webhooks",
6
6
  "main": "lib/index.js",
7
7
  "repository": {
@@ -1,8 +1,4 @@
1
1
  {
2
- "firestore": {
3
- "rules": "firestore.rules",
4
- "indexes": "firestore.indexes.json"
5
- },
6
2
  "functions": [
7
3
  {
8
4
  "predeploy": "npm run build -- --codebase core",
@@ -27,7 +23,16 @@
27
23
  {
28
24
  "predeploy": "npm run build -- --codebase ssr",
29
25
  "source": "functions/ssr",
30
- "codebase": "ssr"
26
+ "codebase": "ssr",
27
+ "ignore": [
28
+ ".git",
29
+ ".runtimeconfig.json",
30
+ "firebase-debug.log",
31
+ "firebase-debug.*.log",
32
+ "node_modules",
33
+ ".turbo",
34
+ "_astro"
35
+ ]
31
36
  }
32
37
  ],
33
38
  "hosting": {
@@ -109,7 +114,16 @@
109
114
  ]
110
115
  },
111
116
  {
112
- "source": "**/*.?????*.@(js|css|webp|avif)",
117
+ "source": "/_astro/**",
118
+ "headers": [
119
+ {
120
+ "key": "Cache-Control",
121
+ "value": "public, max-age=31536000, immutable"
122
+ }
123
+ ]
124
+ },
125
+ {
126
+ "source": "/_image",
113
127
  "headers": [
114
128
  {
115
129
  "key": "Cache-Control",
@@ -120,6 +134,10 @@
120
134
  ],
121
135
  "cleanUrls": true
122
136
  },
137
+ "firestore": {
138
+ "rules": "firestore.rules",
139
+ "indexes": "firestore.indexes.json"
140
+ },
123
141
  "storage": {
124
142
  "rules": "storage.rules"
125
143
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/cli",
3
3
  "type": "module",
4
- "version": "0.6.13",
4
+ "version": "0.7.1",
5
5
  "description": "E-Com Plus Cloud Commerce CLI tools",
6
6
  "bin": {
7
7
  "cloudcommerce": "./bin/run.mjs"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/config",
3
3
  "type": "module",
4
- "version": "0.6.13",
4
+ "version": "0.7.1",
5
5
  "description": "E-Com Plus Cloud Commerce base config",
6
6
  "main": "lib/config.js",
7
7
  "exports": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/emails",
3
3
  "type": "module",
4
- "version": "0.6.13",
4
+ "version": "0.7.1",
5
5
  "description": "E-Com Plus Cloud Commerce",
6
6
  "main": "lib/index.js",
7
7
  "types": "lib/index.d.ts",
@@ -24,7 +24,7 @@
24
24
  "dependencies": {
25
25
  "@cloudcommerce/firebase": "workspace:*",
26
26
  "axios": "^1.3.4",
27
- "ejs": "^3.1.8",
27
+ "ejs": "^3.1.9",
28
28
  "nodemailer": "^6.9.1"
29
29
  },
30
30
  "devDependencies": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/events",
3
3
  "type": "module",
4
- "version": "0.6.13",
4
+ "version": "0.7.1",
5
5
  "description": "E-Com Plus Cloud Commerce app events",
6
6
  "main": "lib/index.js",
7
7
  "exports": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/firebase",
3
3
  "type": "module",
4
- "version": "0.6.13",
4
+ "version": "0.7.1",
5
5
  "description": "E-Com Plus Cloud Commerce on Firebase",
6
6
  "main": "lib/index.js",
7
7
  "types": "lib/index.d.ts",
@@ -31,7 +31,7 @@
31
31
  "dependencies": {
32
32
  "@cloudcommerce/api": "workspace:*",
33
33
  "@cloudcommerce/config": "workspace:*",
34
- "@google-cloud/pubsub": "^3.3.0",
34
+ "@google-cloud/pubsub": "^3.4.1",
35
35
  "firebase-admin": "^11.5.0",
36
36
  "firebase-functions": "^4.2.1",
37
37
  "source-map-support": "^0.5.21"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/i18n",
3
3
  "type": "module",
4
- "version": "0.6.13",
4
+ "version": "0.7.1",
5
5
  "description": "E-Com Plus Cloud Commerce i18n",
6
6
  "main": "lib/all.js",
7
7
  "exports": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/modules",
3
3
  "type": "module",
4
- "version": "0.6.13",
4
+ "version": "0.7.1",
5
5
  "description": "E-Com Plus Cloud Commerce modules API",
6
6
  "main": "lib/index.cjs",
7
7
  "exports": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/passport",
3
3
  "type": "module",
4
- "version": "0.6.13",
4
+ "version": "0.7.1",
5
5
  "description": "E-Com Plus Cloud Commerce customers authentication (passport) API",
6
6
  "main": "lib/index.js",
7
7
  "exports": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/ssr",
3
3
  "type": "module",
4
- "version": "0.6.13",
4
+ "version": "0.7.1",
5
5
  "description": "E-Com Plus Cloud Commerce storefront SSR",
6
6
  "main": "lib/index.js",
7
7
  "exports": {
@@ -23,15 +23,15 @@
23
23
  "build": "sh ../../scripts/build-lib.sh"
24
24
  },
25
25
  "dependencies": {
26
- "@astrojs/image": "^0.15.1",
27
- "@astrojs/node": "^5.0.4",
26
+ "@astrojs/image": "^0.16.0",
27
+ "@astrojs/node": "^5.1.0",
28
28
  "@cloudcommerce/api": "workspace:*",
29
29
  "@cloudcommerce/firebase": "workspace:*",
30
30
  "@cloudcommerce/i18n": "workspace:*",
31
31
  "@ecomplus/utils": "1.5.0-rc.3",
32
- "@headlessui/vue": "^1.7.11",
32
+ "@headlessui/vue": "^1.7.12",
33
33
  "@vueuse/core": "9.12.0",
34
- "astro": "^2.0.16",
34
+ "astro": "^2.1.2",
35
35
  "firebase-admin": "^11.5.0",
36
36
  "firebase-functions": "^4.2.1",
37
37
  "image-size": "^1.0.2",
@@ -51,10 +51,10 @@ module.exports = {
51
51
  ],
52
52
  'no-unused-vars': 'off',
53
53
  '@typescript-eslint/no-unused-vars': ['error'],
54
- 'prefer-template': 'warn',
55
54
  'no-nested-ternary': 'warn',
56
55
  'no-await-in-loop': 'warn',
57
56
  'no-shadow': 'warn',
57
+ 'prefer-template': 'off',
58
58
  'no-param-reassign': 'off',
59
59
  'no-underscore-dangle': 'off',
60
60
  'no-continue': 'off',
@@ -144,7 +144,7 @@ const genAstroConfig = ({
144
144
  adapter: isSSG ? undefined : node({
145
145
  mode: 'middleware',
146
146
  }),
147
- outDir: isSSG ? './dist/client' : './dist',
147
+ outDir: process.env.BUILD_OUT_DIR || (isSSG ? './dist/client' : './dist'),
148
148
  integrations: [
149
149
  image(),
150
150
  vue({
@@ -0,0 +1,4 @@
1
+ import{c as ht,u as gt,p as bt,b as _t}from"./index.16f33784.js";import{r as k,f as S,m as ne,q as ae,d as C,p as yt,_ as V,j as ee,o as w,c as L,w as O,g as I,n as $,C as We,i as y,l as te,h as R,T as wt,b as T,B as Ne,a as St,t as M,F as j,A as Y,e as Q,D as xt,E as de,k as fe,v as ve,G as J,s as re,H as Me,I as kt,x as Ke,y as ze,J as Le,K as Fe}from"./_plugin-vue_export-helper.77ed7c18.js";import{w as Pt}from"./runtime-dom.esm-bundler.d2f39f33.js";import{_ as It}from"./preload-helper.101896b7.js";import{i as Ot}from"./idle-callback.889bf0ea.js";const Tt=e=>{if(e){if(e.display_name)return e.display_name;if(e.name&&e.name.given_name)return e.name.given_name}return""},Et=Tt,Mt=e=>{const{header:n,canSetStyles:o,canCreateHeightDiv:t,isShownOnScrollDown:r}={canSetStyles:!0,canCreateHeightDiv:!0,...e},{ready:a,start:l}=ht(100,{controls:!0,immediate:!1}),s=k(0),c=k(0);let u;const{y:i}=gt(document),m=S(()=>a.value&&i.value>c.value*1.2),v=k("none");ne(m,async d=>{o&&(n.value.style.position=d?"sticky":null),u&&(u.style.height=d?`${s.value}px`:null),d?(await bt(300),v.value="opacity var(--transition-slow), transform var(--transition)"):(l(),v.value="none")});const p=k(!1);return ne(i,(d,f)=>{p.value=d>0&&d<f}),ae(()=>{const d=()=>{s.value=n.value.offsetHeight,c.value=s.value+window.pageYOffset+n.value.getBoundingClientRect().top,l()},f=n.value.getElementsByTagName("IMG");let b=!0;for(let g=0;g<f.length;g++){const _=f[g];(!_.complete||_.naturalHeight===0)&&(b=!1,_.onload=d)}b&&d(),window.addEventListener("resize",_t(d,300)),o&&(n.value.style.willChange="transform",ne([m,p],([g,_])=>{let x=null,P=null;g&&(!_||r)&&(x="0",P="translateY(-100%)"),n.value.style.opacity=x,n.value.style.transform=P}),ne(v,g=>{n.value.style.transition=g})),t&&(u=document.createElement("div"),n.value.parentElement.insertBefore(u,n.value))}),{staticHeight:s,staticY:c,isSticky:m,isScrollUp:p,transition:v}},$t=(e,n)=>{const o=e.filter(({slug:t,parent:r})=>t&&!r);return n?.length&&o.sort((t,r)=>{const a=n.indexOf(t.slug),l=n.indexOf(r.slug);return a>-1?l===-1||a<l?-1:1:l>-1?1:0}),o},Ct=(e,n,o=!1)=>{const t=e.filter(({slug:r,parent:a})=>r&&a?a._id===n._id||a.slug&&a.slug===n.slug:!1);return o&&t.sort((r,a)=>r.name<a.name?-1:1),t},At=({header:e,categories:n,menuCategorySlugs:o,menuRandomCategories:t=7,isAlphabeticalSortSubmenu:r})=>{const{isSticky:a,staticHeight:l,staticY:s}=Mt({header:e}),c=S(()=>a.value?e.value.offsetHeight:s.value),u=$t(n,o),i=f=>Ct(n,f,!!r),m=f=>({...f,subcategories:i(f).map(b=>m(b))}),v=u.map(m);let p=0;const d=v.filter(({slug:f})=>o?.includes(f)?!0:p<t?(p+=1,!0):!1);return{isSticky:a,staticHeight:l,staticY:s,positionY:c,mainCategories:u,getSubcategories:i,getCategoryTree:m,categoryTrees:v,inlineMenuTrees:d}},Nt=C({__name:"Drawer",props:{modelValue:{type:Boolean,default:!1},placement:{default:"start"},position:{default:"fixed"},hasCloseButton:{type:Boolean,default:!0}},emits:["update:modelValue"],setup(e,{expose:n,emit:o}){n();const t=e,r=()=>o("update:modelValue",!1),a=k(null),l=p=>{a.value?.contains(p.target)||r()},s=p=>{p.key==="Escape"&&r()},c=k(0);ne(yt(t,"modelValue"),async p=>{p?(c.value=window.innerWidth-document.documentElement.clientWidth,document.body.style.overflow="hidden",document.body.style.paddingRight=`${c.value}px`,setTimeout(()=>{document.addEventListener("click",l,{passive:!0}),document.addEventListener("keydown",s,{passive:!0})},500)):(document.body.style.overflow=null,document.body.style.paddingRight=null,document.removeEventListener("click",l),document.removeEventListener("keydown",s))});const u=S(()=>{switch(t.placement){case"start":return"left";case"end":return"right";case"top":return"down";default:return"up"}}),i=S(()=>t.position==="fixed"),m=S(()=>t.placement==="start"||t.placement==="end"),v={props:t,emit:o,close:r,drawer:a,outsideClickListener:l,escClickListener:s,scrollbarWidth:c,slideTo:u,isFixed:i,isPlacementX:m};return Object.defineProperty(v,"__isScriptSetup",{enumerable:!1,value:!0}),v}}),Lt=["open","data-drawer"],Ft={class:"relative h-full"},Dt=["onClick"],Rt=y("i",{class:"i-close text-base-400 text-3xl"},null,-1),jt={key:0,class:"fixed top-0 left-0 w-screen h-screen bg-black/50 z-40","data-drawer-backdrop":""};function Bt(e,n,o,t,r,a){const l=ee("Fade");return w(),L(l,{slide:t.slideTo,speed:"slow","is-floating":""},{default:O(()=>[o.modelValue?(w(),I("dialog",{key:0,ref:"drawer",class:$(["w-screen shadow p-0 m-0 z-50",[o.position,t.isFixed?`top-0 left-0 ${t.isPlacementX?"h-screen":""}`:null,t.isPlacementX?"max-w-sm":null]]),style:We({maxWidth:t.isPlacementX?null:`calc(100vw - ${t.scrollbarWidth}px)`}),open:o.modelValue,"data-drawer":o.placement},[y("div",Ft,[o.hasCloseButton?(w(),I("button",{key:0,type:"button","aria-label":"Fechar",onClick:Pt(t.close,["prevent"]),class:$(["absolute top-2",o.placement==="end"?"left-2":"right-2"]),"data-drawer-close":""},[te(e.$slots,"close",{},()=>[Rt])],10,Dt)):R("",!0),te(e.$slots,"default")]),(w(),L(wt,{to:"#teleported-top"},[T(l,null,{default:O(()=>[o.modelValue?(w(),I("div",jt)):R("",!0)]),_:1})]))],14,Lt)):R("",!0)]),_:3},8,["slide"])}const Ht=V(Nt,[["render",Bt]]);globalThis.__apiCache||(globalThis.__apiCache={});const ce={BASE_URL:"/",MODE:"production",DEV:!1,PROD:!0,SSR:!1,SITE:'"https://ecom2-002.web.app"'};class De extends Error{constructor(n,o,t,r=!1){o?(super(o.statusText),this.data=o.data,this.statusCode=o.status):super(t||"Request error"),this.config=n,this.response=o,this.isTimeout=r}}const Ut={middleware(e){const n={...e.headers};if(!e.isNoAuth)if(e.accessToken)n.Authorization=`Bearer ${e.accessToken}`;else{const a=e.authenticationId||ce.ECOM_AUTHENTICATION_ID,l=e.apiKey||ce.ECOM_API_KEY;if(a&&l){const s=`${a}:${l}`,c=typeof Buffer=="function"?Buffer.from(s).toString("base64"):btoa(s);n.Authorization=`Basic ${c}`}}let o=e.baseUrl||ce.API_BASE_URL||"https://ecomplus.io/v2";const{endpoint:t,params:r}=e;if(t!=="login"&&t!=="authenticate"&&t!=="ask-auth-callback"&&t!=="check-username"){const a=e.storeId||ce.ECOM_STORE_ID;if(!a)throw new Error("`storeId` must be set in config or `ECOM_STORE_ID` env var");o+=`/:${a}`;const l=e.lang||ce.ECOM_LANG;l&&(o+=`,lang:${l}`)}if(o+=`/${t}`,r){if(typeof r=="string")o+=`?${r}`;else if(typeof r=="object"){const a=new URLSearchParams;Object.keys(r).forEach(l=>{const s=r[l];Array.isArray(s)?s.forEach(c=>{a.append(l,c)}):a.append(l,s)}),o+=`?${a.toString()}`}}return{url:o,headers:n}}},D=async(e,n=0)=>{const{url:o,headers:t}=Ut.middleware(e),{method:r="get",timeout:a=2e4,maxRetries:l=3,cacheMaxAge:s=6e5}=e,c=r==="get"&&(e.canCache||e.canCache===void 0&&ce.SSR);let u;if(c){u=`${o}${JSON.stringify(t)}`;const b=globalThis.__apiCache[u];if(b&&Date.now()-b.timestamp<=s)return{...b.res,config:e}}const i=e.body||e.data;let m;i&&(m=JSON.stringify(i),t["Content-Type"]="application/json",t["Content-Length"]=m.length.toString());const v=new AbortController;let p=!1;const d=setTimeout(()=>{v.abort(),p=!0},a);let f;try{f=await(e.fetch||fetch)(o,{method:r,headers:t,body:m,signal:v.signal})}catch(b){throw new De(e,f,b.message,p)}if(clearTimeout(d),f){if(f.ok){const g={...f,data:await f.json()};return c&&u&&(globalThis.__apiCache[u]={timestamp:Date.now(),res:g}),{...g,config:e}}const{status:b}=f;if(l<n&&(b===429||b>=500)){const g=f.headers.get("retry-after");return new Promise((_,x)=>{setTimeout(()=>{D(e,n+1).then(_).catch(x)},g&&parseInt(g,10)||5e3)})}}try{f.data=await f?.json()}catch{}throw new De(e,f)},Vt=(e,n)=>D({...n,endpoint:e}),Wt=(e,n,o)=>D({...o,method:"post",endpoint:e,body:n}),Kt=(e,n,o)=>D({...o,method:"put",endpoint:e,body:n}),zt=(e,n,o)=>D({...o,method:"patch",endpoint:e,body:n}),Ge=(e,n)=>D({...n,method:"delete",endpoint:e});D.get=Vt;D.post=Wt;D.put=Kt;D.patch=zt;D.del=Ge;D.delete=Ge;const Gt=(e,n,o=globalThis.localStorage)=>{if(!o)return Ne(n);let t;const r=o.getItem(e);if(r)try{t=JSON.parse(r)}catch{t=null,o.removeItem(e)}const a=Ne(t||n);return ne(a,()=>{o.setItem(e,JSON.stringify(a))}),a},Ye="SESSION",Oe={customer:{display_name:"",main_email:""},auth:null},H=Gt(Ye,Oe),$e=S(()=>{const{auth:e}=H;return e&&new Date(e.expires).getTime()-Date.now()>1e3*10}),Xe=S(()=>H.customer),he=S(()=>Et(Xe.value)),Re=S({get(){return Xe.value.main_email},set(e){H.customer.main_email=e}});let oe;const Je=S(()=>$e.value||!!oe?.currentUser?.emailVerified),Ce=()=>{H.auth=Oe.auth,H.customer=Oe.customer,localStorage.removeItem(Ye),oe.signOut()},qe=async()=>{const e=await oe.currentUser.getIdToken(),{domain:n}=window.storefront.settings;try{const o=await fetch(`https://${n}/api/passport/token`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`}});H.auth=await o.json()}catch(o){console.error(o)}},Yt=async()=>($e.value||await qe(),H.auth.access_token),Xt=async()=>{const e=await Yt(),{data:n}=await D.get(`customers/${H.auth.customer_id}`,{accessToken:e});return H.customer=n,n};let je=!1;const Qe=(e=!window.location.pathname.startsWith("/app/"))=>{if(je)return;je=!0;const n=()=>It(()=>import("./firebase-app.72e91a3e.js"),[]).then(({getAuth:o,onAuthStateChanged:t,isSignInWithEmailLink:r,signInWithEmailLink:a})=>{if(oe=o(),t(oe,async l=>{if(l){if(l.displayName&&!he.value&&(H.customer.display_name=l.displayName),l.email&&(!Re.value||l.emailVerified)&&(H.customer.main_email=l.email),l.emailVerified){const s=l.email!==Re.value;(s||!$e.value)&&(await qe(),(s||!he.value)&&await Xt())}}else Ce()}),r(oe,window.location.href)){const s=new URLSearchParams(window.location.search).get("email");s&&a(oe,s,window.location.href).then(()=>window.localStorage.removeItem("emailForSignIn")).catch(console.error)}}).catch(console.error);e?Ot(n):n()},{settings:Be,context:Zo}=globalThis.storefront,Jt=["whatsapp","instagram","facebook","twitter","youtube","tiktok","pinterest"],_e={};Jt.forEach(e=>{Be[e]&&(_e[e]=Be[e])});const qt=C({__name:"AccountLink",props:{to:null,accountUrl:{default:globalThis.storefront.settings.account_url||"/app/account"},returnUrl:{default:globalThis.location?.href},isSignUp:{type:Boolean}},setup(e,{expose:n}){n();const o=e,t=S(()=>{let a=o.accountUrl;if(!o.to)return o.isSignUp?a+="?sign_up&":a+="?",`${a}return_url=${o.returnUrl}`;const{settings:l}=globalThis.storefront;return o.to==="orders"&&l.orders_url?l.orders_url:o.to==="favorites"&&l.favorites_url?l.favorites_url:`${a}/${o.to}`}),r={props:o,href:t};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),Qt=["href"];function Zt(e,n,o,t,r,a){return w(),I("a",{href:t.href},[te(e.$slots,"default")],8,Qt)}const Ze=V(qt,[["render",Zt]]);let pe;pe=navigator.userAgent,document.body?document.body.offsetWidth:window.screen.width;pe.includes("Safari")&&pe.includes("Chrome");const en=/iPad|iPhone|iPod/.test(pe)&&!window.MSStream,tn=en||/Android|webOS|BlackBerry|IEMobile|Opera Mini/i.test(pe),nn=C({__name:"SocialNetworkIcon",props:{as:{default:"i"},network:null},setup(e,{expose:n}){n();const o=e,t=S(()=>{switch(o.network){case"facebook":return"i-facebook";case"instagram":return"i-instagram";case"whatsapp":return"i-whatsapp";case"youtube":return"i-youtube";case"pinterest":return"i-pinterest";case"tiktok":return"i-tiktok";case"twitter":return"i-twitter";default:return""}}),r={props:o,iconClassName:t};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}});function on(e,n,o,t,r,a){return w(),L(St(o.as),{class:$(t.iconClassName)},null,8,["class"])}const rn=V(nn,[["render",on]]),an=C({__name:"SocialNetworkLink",props:{network:null,href:null,message:null},setup(e,{expose:n}){n();const o=e,t=S(()=>{let a=o.href||_e[o.network];if(o.network==="whatsapp"){const l=a.replace(/[^+\d]/g,"");a=`https://${tn?"api":"web"}.whatsapp.com/send?phone=`+encodeURIComponent(l.charAt(0)==="+"?l:`+55${l}`),o.message&&(a+=`&text=${encodeURIComponent(o.message)}`)}return a}),r={props:o,fixedHref:t,SocialNetworkIcon:rn};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}});function ln(e,n,o,t,r,a){const l=ee("ALink");return w(),L(l,{href:t.fixedHref},{default:O(()=>[te(e.$slots,"default",{},()=>[T(t.SocialNetworkIcon,{network:o.network},null,8,["network"]),te(e.$slots,"append")])]),_:3},8,["href"])}const et=V(an,[["render",ln]]),sn=C({__name:"ShopSidenavCategory",props:{categoryTree:null},setup(e,{expose:n}){n();const o=k(!1),t=k(!0);ne(o,a=>{a?setTimeout(()=>{t.value=!1},25):t.value=!0});const r={isOpen:o,isFaded:t};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),un={class:"text-lg text-base-800"},cn=["href"],dn=["href"],pn={class:"inline"};function fn(e,n,o,t,r,a){const l=ee("AImg"),s=ee("ShopSidenavCategory",!0);return w(),I("li",un,[o.categoryTree.subcategories.length?(w(),I("details",{key:0,class:"bg-white overflow-y-auto overflow-x-hidden z-10 open:absolute open:top-0 open:left-0 open:w-full open:h-full",onToggle:n[0]||(n[0]=c=>t.isOpen=!t.isOpen)},[y("summary",{class:$(["cursor-pointer list-none px-6 py-3 active:bg-base-100 transition-colors",t.isOpen?"bg-base-100":null])},[y("i",{class:$(t.isOpen?"i-arrow-left text-lg":"i-arrow-right float-right mb-0 mt-1 text-xl text-base-500")},null,2),!t.isOpen&&o.categoryTree.icon?(w(),L(l,{key:0,picture:o.categoryTree.icon,class:"w-auto h-5 inline mr-3"},null,8,["picture"])):R("",!0),y("h3",{class:$(["inline",t.isOpen?"ml-4 text-base":null])},M(o.categoryTree.name),3)],2),y("ul",{class:$(["mt-2 transition-opacity",t.isFaded?"opacity-20":"opacity-100"]),tabindex:"-1"},[(w(!0),I(j,null,Y(o.categoryTree.subcategories,c=>(w(),L(s,{key:c._id,"category-tree":c},null,8,["category-tree"]))),128)),y("li",null,[y("a",{href:`/${o.categoryTree.slug}`,class:"block px-6 py-3 text-base underline active:bg-base-200"},M("Ver toda a categoria $1".replace("$1",o.categoryTree.name)),9,cn)])],2)],32)):(w(),I("a",{key:1,href:`/${o.categoryTree.slug}`,class:"block px-6 py-3 active:bg-base-200"},[!t.isOpen&&o.categoryTree.icon?(w(),L(l,{key:0,picture:o.categoryTree.icon,class:"w-auto h-5 inline mr-3"},null,8,["picture"])):R("",!0),y("h3",pn,M(o.categoryTree.name),1)],8,dn))])}const vn=V(sn,[["render",fn]]),mn=C({__name:"ShopSidenav",props:{categoryTrees:null},setup(e,{expose:n}){n(),ae(()=>Qe());const o={get customerName(){return he},get isLogged(){return Je},get logout(){return Ce},get socialNetworks(){return _e},AccountLink:Ze,SocialNetworkLink:et,ShopSidenavCategory:vn};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}}),hn={class:"flex flex-col h-full"},gn={class:"py-4 grow"},bn={class:"relative h-full"},_n={class:"text-base"},yn={class:"flex items-center px-2 py-4 bg-base-100"},wn=y("i",{class:"i-account text-4xl text-base-500 m-0"},null,-1),Sn={class:"leading-tight"},xn=y("small",{class:"block lowercase font-semibold text-primary"},M("Meus pedidos")+", "+M("Minha conta"),-1),kn=y("span",{class:"text-base-600"},M("Sair"),-1),Pn=y("i",{class:"i-logout text-lg ml-1"},null,-1),In=[kn,Pn],On={class:"flex gap-3 p-4 bg-base-200 text-xl text-base-700"};function Tn(e,n,o,t,r,a){return w(),I("aside",hn,[y("nav",gn,[y("ul",bn,[(w(!0),I(j,null,Y(o.categoryTrees,l=>(w(),L(t.ShopSidenavCategory,{key:l._id,"category-tree":l},null,8,["category-tree"]))),128))])]),y("footer",_n,[y("div",yn,[T(t.AccountLink,{class:"p-2 grow flex items-center gap-3"},{default:O(()=>[wn,y("span",Sn,[Q(M(`Olá ${t.customerName||"Visitante"}`)+" ",1),xn])]),_:1}),t.isLogged?(w(),I("button",{key:0,onClick:n[0]||(n[0]=(...l)=>t.logout&&t.logout(...l)),class:"p-2 text-right text-base-800"},In)):R("",!0)]),y("ul",On,[(w(!0),I(j,null,Y(t.socialNetworks,(l,s)=>(w(),I("li",{key:s},[T(t.SocialNetworkLink,{network:s,class:"p-1 active:text-primary"},null,8,["network"])]))),128))])])])}const En=V(mn,[["render",Tn]]);function W(e,n,...o){if(e in n){let r=n[e];return typeof r=="function"?r(...o):r}let t=new Error(`Tried to handle "${e}" but there is no handler defined. Only defined handlers are: ${Object.keys(n).map(r=>`"${r}"`).join(", ")}.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,W),t}var le=(e=>(e[e.None=0]="None",e[e.RenderStrategy=1]="RenderStrategy",e[e.Static=2]="Static",e))(le||{}),Mn=(e=>(e[e.Unmount=0]="Unmount",e[e.Hidden=1]="Hidden",e))(Mn||{});function K({visible:e=!0,features:n=0,ourProps:o,theirProps:t,...r}){var a;let l=nt(t,o),s=Object.assign(r,{props:l});if(e||n&2&&l.static)return Pe(s);if(n&1){let c=(a=l.unmount)==null||a?0:1;return W(c,{[0](){return null},[1](){return Pe({...r,props:{...l,hidden:!0,style:{display:"none"}}})}})}return Pe(s)}function Pe({props:e,attrs:n,slots:o,slot:t,name:r}){var a,l;let{as:s,...c}=$n(e,["unmount","static"]),u=(a=o.default)==null?void 0:a.call(o,t),i={};if(t){let m=!1,v=[];for(let[p,d]of Object.entries(t))typeof d=="boolean"&&(m=!0),d===!0&&v.push(p);m&&(i["data-headlessui-state"]=v.join(" "))}if(s==="template"){if(u=tt(u??[]),Object.keys(c).length>0||Object.keys(n).length>0){let[m,...v]=u??[];if(!Cn(m)||v.length>0)throw new Error(['Passing props on "template"!',"",`The current component <${r} /> is rendering a "template".`,"However we need to passthrough the following props:",Object.keys(c).concat(Object.keys(n)).map(f=>f.trim()).filter((f,b,g)=>g.indexOf(f)===b).sort((f,b)=>f.localeCompare(b)).map(f=>` - ${f}`).join(`
2
+ `),"","You can apply a few solutions:",['Add an `as="..."` prop, to ensure that we render an actual element instead of a "template".',"Render a single element as the child so that we can forward the props onto that element."].map(f=>` - ${f}`).join(`
3
+ `)].join(`
4
+ `));let p=nt((l=m.props)!=null?l:{},c),d=xt(m,p);for(let f in p)f.startsWith("on")&&(d.props||(d.props={}),d.props[f]=p[f]);return d}return Array.isArray(u)&&u.length===1?u[0]:u}return de(s,Object.assign({},c,i),{default:()=>u})}function tt(e){return e.flatMap(n=>n.type===j?tt(n.children):[n])}function nt(...e){if(e.length===0)return{};if(e.length===1)return e[0];let n={},o={};for(let t of e)for(let r in t)r.startsWith("on")&&typeof t[r]=="function"?(o[r]!=null||(o[r]=[]),o[r].push(t[r])):n[r]=t[r];if(n.disabled||n["aria-disabled"])return Object.assign(n,Object.fromEntries(Object.keys(o).map(t=>[t,void 0])));for(let t in o)Object.assign(n,{[t](r,...a){let l=o[t];for(let s of l){if(r instanceof Event&&r.defaultPrevented)return;s(r,...a)}}});return n}function $n(e,n=[]){let o=Object.assign({},e);for(let t of n)t in o&&delete o[t];return o}function Cn(e){return e==null?!1:typeof e.type=="string"||typeof e.type=="object"||typeof e.type=="function"}let An=0;function Nn(){return++An}function X(){return Nn()}var E=(e=>(e.Space=" ",e.Enter="Enter",e.Escape="Escape",e.Backspace="Backspace",e.Delete="Delete",e.ArrowLeft="ArrowLeft",e.ArrowUp="ArrowUp",e.ArrowRight="ArrowRight",e.ArrowDown="ArrowDown",e.Home="Home",e.End="End",e.PageUp="PageUp",e.PageDown="PageDown",e.Tab="Tab",e))(E||{});function Ln(e){throw new Error("Unexpected object: "+e)}var F=(e=>(e[e.First=0]="First",e[e.Previous=1]="Previous",e[e.Next=2]="Next",e[e.Last=3]="Last",e[e.Specific=4]="Specific",e[e.Nothing=5]="Nothing",e))(F||{});function Fn(e,n){let o=n.resolveItems();if(o.length<=0)return null;let t=n.resolveActiveIndex(),r=t??-1,a=(()=>{switch(e.focus){case 0:return o.findIndex(l=>!n.resolveDisabled(l));case 1:{let l=o.slice().reverse().findIndex((s,c,u)=>r!==-1&&u.length-c-1>=r?!1:!n.resolveDisabled(s));return l===-1?l:o.length-1-l}case 2:return o.findIndex((l,s)=>s<=r?!1:!n.resolveDisabled(l));case 3:{let l=o.slice().reverse().findIndex(s=>!n.resolveDisabled(s));return l===-1?l:o.length-1-l}case 4:return o.findIndex(l=>n.resolveId(l)===e.id);case 5:return null;default:Ln(e)}})();return a===-1?t:a}function h(e){var n;return e==null||e.value==null?null:(n=e.value.$el)!=null?n:e.value}let ot=Symbol("Context");var U=(e=>(e[e.Open=1]="Open",e[e.Closed=2]="Closed",e[e.Closing=4]="Closing",e[e.Opening=8]="Opening",e))(U||{});function Ae(){return fe(ot,null)}function rt(e){ve(ot,e)}function He(e,n){if(e)return e;let o=n??"button";if(typeof o=="string"&&o.toLowerCase()==="button")return"button"}function at(e,n){let o=k(He(e.value.type,e.value.as));return ae(()=>{o.value=He(e.value.type,e.value.as)}),J(()=>{var t;o.value||h(n)&&h(n)instanceof HTMLButtonElement&&!((t=h(n))!=null&&t.hasAttribute("type"))&&(o.value="button")}),o}var Dn=Object.defineProperty,Rn=(e,n,o)=>n in e?Dn(e,n,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[n]=o,Ue=(e,n,o)=>(Rn(e,typeof n!="symbol"?n+"":n,o),o);class jn{constructor(){Ue(this,"current",this.detect()),Ue(this,"currentId",0)}set(n){this.current!==n&&(this.currentId=0,this.current=n)}reset(){this.set(this.detect())}nextId(){return++this.currentId}get isServer(){return this.current==="server"}get isClient(){return this.current==="client"}detect(){return typeof window>"u"||typeof document>"u"?"server":"client"}}let ye=new jn;function se(e){if(ye.isServer)return null;if(e instanceof Node)return e.ownerDocument;if(e!=null&&e.hasOwnProperty("value")){let n=h(e);if(n)return n.ownerDocument}return document}function Bn({container:e,accept:n,walk:o,enabled:t}){J(()=>{let r=e.value;if(!r||t!==void 0&&!t.value)return;let a=se(e);if(!a)return;let l=Object.assign(c=>n(c),{acceptNode:n}),s=a.createTreeWalker(r,NodeFilter.SHOW_ELEMENT,l,!1);for(;s.nextNode();)o(s.currentNode)})}let Te=["[contentEditable=true]","[tabindex]","a[href]","area[href]","button:not([disabled])","iframe","input:not([disabled])","select:not([disabled])","textarea:not([disabled])"].map(e=>`${e}:not([tabindex='-1'])`).join(",");var B=(e=>(e[e.First=1]="First",e[e.Previous=2]="Previous",e[e.Next=4]="Next",e[e.Last=8]="Last",e[e.WrapAround=16]="WrapAround",e[e.NoScroll=32]="NoScroll",e))(B||{}),ge=(e=>(e[e.Error=0]="Error",e[e.Overflow=1]="Overflow",e[e.Success=2]="Success",e[e.Underflow=3]="Underflow",e))(ge||{}),Hn=(e=>(e[e.Previous=-1]="Previous",e[e.Next=1]="Next",e))(Hn||{});function me(e=document.body){return e==null?[]:Array.from(e.querySelectorAll(Te)).sort((n,o)=>Math.sign((n.tabIndex||Number.MAX_SAFE_INTEGER)-(o.tabIndex||Number.MAX_SAFE_INTEGER)))}var we=(e=>(e[e.Strict=0]="Strict",e[e.Loose=1]="Loose",e))(we||{});function Se(e,n=0){var o;return e===((o=se(e))==null?void 0:o.body)?!1:W(n,{[0](){return e.matches(Te)},[1](){let t=e;for(;t!==null;){if(t.matches(Te))return!0;t=t.parentElement}return!1}})}function lt(e){let n=se(e);re(()=>{n&&!Se(n.activeElement,0)&&Un(e)})}function Un(e){e?.focus({preventScroll:!0})}let Vn=["textarea","input"].join(",");function Wn(e){var n,o;return(o=(n=e?.matches)==null?void 0:n.call(e,Vn))!=null?o:!1}function st(e,n=o=>o){return e.slice().sort((o,t)=>{let r=n(o),a=n(t);if(r===null||a===null)return 0;let l=r.compareDocumentPosition(a);return l&Node.DOCUMENT_POSITION_FOLLOWING?-1:l&Node.DOCUMENT_POSITION_PRECEDING?1:0})}function Kn(e,n){return Z(me(),n,{relativeTo:e})}function Z(e,n,{sorted:o=!0,relativeTo:t=null,skipElements:r=[]}={}){var a;let l=(a=Array.isArray(e)?e.length>0?e[0].ownerDocument:document:e?.ownerDocument)!=null?a:document,s=Array.isArray(e)?o?st(e):e:me(e);r.length>0&&s.length>1&&(s=s.filter(d=>!r.includes(d))),t=t??l.activeElement;let c=(()=>{if(n&5)return 1;if(n&10)return-1;throw new Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last")})(),u=(()=>{if(n&1)return 0;if(n&2)return Math.max(0,s.indexOf(t))-1;if(n&4)return Math.max(0,s.indexOf(t))+1;if(n&8)return s.length-1;throw new Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last")})(),i=n&32?{preventScroll:!0}:{},m=0,v=s.length,p;do{if(m>=v||m+v<=0)return 0;let d=u+m;if(n&16)d=(d+v)%v;else{if(d<0)return 3;if(d>=v)return 1}p=s[d],p?.focus(i),m+=c}while(p!==l.activeElement);return n&6&&Wn(p)&&p.select(),p.hasAttribute("tabindex")||p.setAttribute("tabindex","0"),2}function Ie(e,n,o){ye.isServer||J(t=>{document.addEventListener(e,n,o),t(()=>document.removeEventListener(e,n,o))})}function it(e,n,o=S(()=>!0)){function t(a,l){if(!o.value||a.defaultPrevented)return;let s=l(a);if(s===null||!s.getRootNode().contains(s))return;let c=function u(i){return typeof i=="function"?u(i()):Array.isArray(i)||i instanceof Set?i:[i]}(e);for(let u of c){if(u===null)continue;let i=u instanceof HTMLElement?u:h(u);if(i!=null&&i.contains(s)||a.composed&&a.composedPath().includes(i))return}return!Se(s,we.Loose)&&s.tabIndex!==-1&&a.preventDefault(),n(a,s)}let r=k(null);Ie("mousedown",a=>{var l,s;o.value&&(r.value=((s=(l=a.composedPath)==null?void 0:l.call(a))==null?void 0:s[0])||a.target)},!0),Ie("click",a=>{r.value&&(t(a,()=>r.value),r.value=null)},!0),Ie("blur",a=>t(a,()=>window.document.activeElement instanceof HTMLIFrameElement?window.document.activeElement:null),!0)}var be=(e=>(e[e.None=1]="None",e[e.Focusable=2]="Focusable",e[e.Hidden=4]="Hidden",e))(be||{});let Ee=C({name:"Hidden",props:{as:{type:[Object,String],default:"div"},features:{type:Number,default:1}},setup(e,{slots:n,attrs:o}){return()=>{let{features:t,...r}=e,a={"aria-hidden":(t&2)===2?!0:void 0,style:{position:"fixed",top:1,left:1,width:1,height:0,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0",...(t&4)===4&&(t&2)!==2&&{display:"none"}}};return K({ourProps:a,theirProps:r,slot:{},attrs:o,slots:n,name:"Hidden"})}}});function Ve(e){return[e.screenX,e.screenY]}function zn(){let e=k([-1,-1]);return{wasMoved(n){let o=Ve(n);return e.value[0]===o[0]&&e.value[1]===o[1]?!1:(e.value=o,!0)},update(n){e.value=Ve(n)}}}function Gn(e,n,o){ye.isServer||J(t=>{window.addEventListener(e,n,o),t(()=>window.removeEventListener(e,n,o))})}var G=(e=>(e[e.Forwards=0]="Forwards",e[e.Backwards=1]="Backwards",e))(G||{});function ut(){let e=k(0);return Gn("keydown",n=>{n.key==="Tab"&&(e.value=n.shiftKey?1:0)}),e}function Yn(e,n,o,t){ye.isServer||J(r=>{e=e??window,e.addEventListener(n,o,t),r(()=>e.removeEventListener(n,o,t))})}var Xn=(e=>(e[e.Open=0]="Open",e[e.Closed=1]="Closed",e))(Xn||{}),Jn=(e=>(e[e.Pointer=0]="Pointer",e[e.Other=1]="Other",e))(Jn||{});function qn(e){requestAnimationFrame(()=>requestAnimationFrame(e))}let ct=Symbol("MenuContext");function xe(e){let n=fe(ct,null);if(n===null){let o=new Error(`<${e} /> is missing a parent <Menu /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(o,xe),o}return n}let Qn=C({name:"Menu",props:{as:{type:[Object,String],default:"template"}},setup(e,{slots:n,attrs:o}){let t=k(1),r=k(null),a=k(null),l=k([]),s=k(""),c=k(null),u=k(1);function i(v=p=>p){let p=c.value!==null?l.value[c.value]:null,d=st(v(l.value.slice()),b=>h(b.dataRef.domRef)),f=p?d.indexOf(p):null;return f===-1&&(f=null),{items:d,activeItemIndex:f}}let m={menuState:t,buttonRef:r,itemsRef:a,items:l,searchQuery:s,activeItemIndex:c,activationTrigger:u,closeMenu:()=>{t.value=1,c.value=null},openMenu:()=>t.value=0,goToItem(v,p,d){let f=i(),b=Fn(v===F.Specific?{focus:F.Specific,id:p}:{focus:v},{resolveItems:()=>f.items,resolveActiveIndex:()=>f.activeItemIndex,resolveId:g=>g.id,resolveDisabled:g=>g.dataRef.disabled});s.value="",c.value=b,u.value=d??1,l.value=f.items},search(v){let p=s.value!==""?0:1;s.value+=v.toLowerCase();let d=(c.value!==null?l.value.slice(c.value+p).concat(l.value.slice(0,c.value+p)):l.value).find(b=>b.dataRef.textValue.startsWith(s.value)&&!b.dataRef.disabled),f=d?l.value.indexOf(d):-1;f===-1||f===c.value||(c.value=f,u.value=1)},clearSearch(){s.value=""},registerItem(v,p){let d=i(f=>[...f,{id:v,dataRef:p}]);l.value=d.items,c.value=d.activeItemIndex,u.value=1},unregisterItem(v){let p=i(d=>{let f=d.findIndex(b=>b.id===v);return f!==-1&&d.splice(f,1),d});l.value=p.items,c.value=p.activeItemIndex,u.value=1}};return it([r,a],(v,p)=>{var d;m.closeMenu(),Se(p,we.Loose)||(v.preventDefault(),(d=h(r))==null||d.focus())},S(()=>t.value===0)),ve(ct,m),rt(S(()=>W(t.value,{[0]:U.Open,[1]:U.Closed}))),()=>{let v={open:t.value===0,close:m.closeMenu};return K({ourProps:{},theirProps:e,slot:v,slots:n,attrs:o,name:"Menu"})}}}),Zn=C({name:"MenuButton",props:{disabled:{type:Boolean,default:!1},as:{type:[Object,String],default:"button"},id:{type:String,default:()=>`headlessui-menu-button-${X()}`}},setup(e,{attrs:n,slots:o,expose:t}){let r=xe("MenuButton");t({el:r.buttonRef,$el:r.buttonRef});function a(u){switch(u.key){case E.Space:case E.Enter:case E.ArrowDown:u.preventDefault(),u.stopPropagation(),r.openMenu(),re(()=>{var i;(i=h(r.itemsRef))==null||i.focus({preventScroll:!0}),r.goToItem(F.First)});break;case E.ArrowUp:u.preventDefault(),u.stopPropagation(),r.openMenu(),re(()=>{var i;(i=h(r.itemsRef))==null||i.focus({preventScroll:!0}),r.goToItem(F.Last)});break}}function l(u){switch(u.key){case E.Space:u.preventDefault();break}}function s(u){e.disabled||(r.menuState.value===0?(r.closeMenu(),re(()=>{var i;return(i=h(r.buttonRef))==null?void 0:i.focus({preventScroll:!0})})):(u.preventDefault(),r.openMenu(),qn(()=>{var i;return(i=h(r.itemsRef))==null?void 0:i.focus({preventScroll:!0})})))}let c=at(S(()=>({as:e.as,type:n.type})),r.buttonRef);return()=>{var u;let i={open:r.menuState.value===0},{id:m,...v}=e,p={ref:r.buttonRef,id:m,type:c.value,"aria-haspopup":"menu","aria-controls":(u=h(r.itemsRef))==null?void 0:u.id,"aria-expanded":e.disabled?void 0:r.menuState.value===0,onKeydown:a,onKeyup:l,onClick:s};return K({ourProps:p,theirProps:v,slot:i,attrs:n,slots:o,name:"MenuButton"})}}}),eo=C({name:"MenuItems",props:{as:{type:[Object,String],default:"div"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},id:{type:String,default:()=>`headlessui-menu-items-${X()}`}},setup(e,{attrs:n,slots:o,expose:t}){let r=xe("MenuItems"),a=k(null);t({el:r.itemsRef,$el:r.itemsRef}),Bn({container:S(()=>h(r.itemsRef)),enabled:S(()=>r.menuState.value===0),accept(i){return i.getAttribute("role")==="menuitem"?NodeFilter.FILTER_REJECT:i.hasAttribute("role")?NodeFilter.FILTER_SKIP:NodeFilter.FILTER_ACCEPT},walk(i){i.setAttribute("role","none")}});function l(i){var m;switch(a.value&&clearTimeout(a.value),i.key){case E.Space:if(r.searchQuery.value!=="")return i.preventDefault(),i.stopPropagation(),r.search(i.key);case E.Enter:if(i.preventDefault(),i.stopPropagation(),r.activeItemIndex.value!==null){let v=r.items.value[r.activeItemIndex.value];(m=h(v.dataRef.domRef))==null||m.click()}r.closeMenu(),lt(h(r.buttonRef));break;case E.ArrowDown:return i.preventDefault(),i.stopPropagation(),r.goToItem(F.Next);case E.ArrowUp:return i.preventDefault(),i.stopPropagation(),r.goToItem(F.Previous);case E.Home:case E.PageUp:return i.preventDefault(),i.stopPropagation(),r.goToItem(F.First);case E.End:case E.PageDown:return i.preventDefault(),i.stopPropagation(),r.goToItem(F.Last);case E.Escape:i.preventDefault(),i.stopPropagation(),r.closeMenu(),re(()=>{var v;return(v=h(r.buttonRef))==null?void 0:v.focus({preventScroll:!0})});break;case E.Tab:i.preventDefault(),i.stopPropagation(),r.closeMenu(),re(()=>Kn(h(r.buttonRef),i.shiftKey?B.Previous:B.Next));break;default:i.key.length===1&&(r.search(i.key),a.value=setTimeout(()=>r.clearSearch(),350));break}}function s(i){switch(i.key){case E.Space:i.preventDefault();break}}let c=Ae(),u=S(()=>c!==null?(c.value&U.Open)===U.Open:r.menuState.value===0);return()=>{var i,m;let v={open:r.menuState.value===0},{id:p,...d}=e,f={"aria-activedescendant":r.activeItemIndex.value===null||(i=r.items.value[r.activeItemIndex.value])==null?void 0:i.id,"aria-labelledby":(m=h(r.buttonRef))==null?void 0:m.id,id:p,onKeydown:l,onKeyup:s,role:"menu",tabIndex:0,ref:r.itemsRef};return K({ourProps:f,theirProps:d,slot:v,attrs:n,slots:o,features:le.RenderStrategy|le.Static,visible:u.value,name:"MenuItems"})}}}),to=C({name:"MenuItem",inheritAttrs:!1,props:{as:{type:[Object,String],default:"template"},disabled:{type:Boolean,default:!1},id:{type:String,default:()=>`headlessui-menu-item-${X()}`}},setup(e,{slots:n,attrs:o,expose:t}){let r=xe("MenuItem"),a=k(null);t({el:a,$el:a});let l=S(()=>r.activeItemIndex.value!==null?r.items.value[r.activeItemIndex.value].id===e.id:!1),s=S(()=>({disabled:e.disabled,textValue:"",domRef:a}));ae(()=>{var d,f;let b=(f=(d=h(a))==null?void 0:d.textContent)==null?void 0:f.toLowerCase().trim();b!==void 0&&(s.value.textValue=b)}),ae(()=>r.registerItem(e.id,s)),Me(()=>r.unregisterItem(e.id)),J(()=>{r.menuState.value===0&&l.value&&r.activationTrigger.value!==0&&re(()=>{var d,f;return(f=(d=h(a))==null?void 0:d.scrollIntoView)==null?void 0:f.call(d,{block:"nearest"})})});function c(d){if(e.disabled)return d.preventDefault();r.closeMenu(),lt(h(r.buttonRef))}function u(){if(e.disabled)return r.goToItem(F.Nothing);r.goToItem(F.Specific,e.id)}let i=zn();function m(d){i.update(d)}function v(d){i.wasMoved(d)&&(e.disabled||l.value||r.goToItem(F.Specific,e.id,0))}function p(d){i.wasMoved(d)&&(e.disabled||l.value&&r.goToItem(F.Nothing))}return()=>{let{disabled:d}=e,f={active:l.value,disabled:d,close:r.closeMenu},{id:b,...g}=e;return K({ourProps:{id:b,ref:a,role:"menuitem",tabIndex:d===!0?void 0:-1,"aria-disabled":d===!0?!0:void 0,disabled:void 0,onClick:c,onFocus:u,onPointerenter:m,onMouseenter:m,onPointermove:v,onMousemove:v,onPointerleave:p,onMouseleave:p},theirProps:{...o,...g},slot:f,attrs:o,slots:n,name:"MenuItem"})}}});var no=(e=>(e[e.Open=0]="Open",e[e.Closed=1]="Closed",e))(no||{});let dt=Symbol("PopoverContext");function ke(e){let n=fe(dt,null);if(n===null){let o=new Error(`<${e} /> is missing a parent <${mt.name} /> component.`);throw Error.captureStackTrace&&Error.captureStackTrace(o,ke),o}return n}let pt=Symbol("PopoverGroupContext");function ft(){return fe(pt,null)}let vt=Symbol("PopoverPanelContext");function oo(){return fe(vt,null)}let mt=C({name:"Popover",props:{as:{type:[Object,String],default:"div"}},setup(e,{slots:n,attrs:o,expose:t}){var r;let a=k(null);t({el:a,$el:a});let l=k(1),s=k(null),c=k(null),u=k(null),i=k(null),m=S(()=>se(a)),v=S(()=>{var _,x;if(!h(s)||!h(i))return!1;for(let ue of document.querySelectorAll("body > *"))if(Number(ue?.contains(h(s)))^Number(ue?.contains(h(i))))return!0;let P=me(),A=P.indexOf(h(s)),N=(A+P.length-1)%P.length,q=(A+1)%P.length,z=P[N],ie=P[q];return!((_=h(i))!=null&&_.contains(z))&&!((x=h(i))!=null&&x.contains(ie))}),p={popoverState:l,buttonId:k(null),panelId:k(null),panel:i,button:s,isPortalled:v,beforePanelSentinel:c,afterPanelSentinel:u,togglePopover(){l.value=W(l.value,{[0]:1,[1]:0})},closePopover(){l.value!==1&&(l.value=1)},close(_){p.closePopover();let x=(()=>_?_ instanceof HTMLElement?_:_.value instanceof HTMLElement?h(_):h(p.button):h(p.button))();x?.focus()}};ve(dt,p),rt(S(()=>W(l.value,{[0]:U.Open,[1]:U.Closed})));let d={buttonId:p.buttonId,panelId:p.panelId,close(){p.closePopover()}},f=ft(),b=f?.registerPopover;function g(){var _,x,P,A;return(A=f?.isFocusWithinPopoverGroup())!=null?A:((_=m.value)==null?void 0:_.activeElement)&&(((x=h(s))==null?void 0:x.contains(m.value.activeElement))||((P=h(i))==null?void 0:P.contains(m.value.activeElement)))}return J(()=>b?.(d)),Yn((r=m.value)==null?void 0:r.defaultView,"focus",_=>{var x,P;l.value===0&&(g()||s&&i&&_.target!==window&&((x=h(p.beforePanelSentinel))!=null&&x.contains(_.target)||(P=h(p.afterPanelSentinel))!=null&&P.contains(_.target)||p.closePopover()))},!0),it([s,i],(_,x)=>{var P;p.closePopover(),Se(x,we.Loose)||(_.preventDefault(),(P=h(s))==null||P.focus())},S(()=>l.value===0)),()=>{let _={open:l.value===0,close:p.close};return K({theirProps:e,ourProps:{ref:a},slot:_,slots:n,attrs:o,name:"Popover"})}}}),ro=C({name:"PopoverButton",props:{as:{type:[Object,String],default:"button"},disabled:{type:[Boolean],default:!1},id:{type:String,default:()=>`headlessui-popover-button-${X()}`}},inheritAttrs:!1,setup(e,{attrs:n,slots:o,expose:t}){let r=ke("PopoverButton"),a=S(()=>se(r.button));t({el:r.button,$el:r.button}),ae(()=>{r.buttonId.value=e.id}),Me(()=>{r.buttonId.value=null});let l=ft(),s=l?.closeOthers,c=oo(),u=S(()=>c===null?!1:c.value===r.panelId.value),i=k(null),m=`headlessui-focus-sentinel-${X()}`;u.value||J(()=>{r.button.value=i.value});let v=at(S(()=>({as:e.as,type:n.type})),i);function p(g){var _,x,P,A,N;if(u.value){if(r.popoverState.value===1)return;switch(g.key){case E.Space:case E.Enter:g.preventDefault(),(x=(_=g.target).click)==null||x.call(_),r.closePopover(),(P=h(r.button))==null||P.focus();break}}else switch(g.key){case E.Space:case E.Enter:g.preventDefault(),g.stopPropagation(),r.popoverState.value===1&&s?.(r.buttonId.value),r.togglePopover();break;case E.Escape:if(r.popoverState.value!==0)return s?.(r.buttonId.value);if(!h(r.button)||(A=a.value)!=null&&A.activeElement&&!((N=h(r.button))!=null&&N.contains(a.value.activeElement)))return;g.preventDefault(),g.stopPropagation(),r.closePopover();break}}function d(g){u.value||g.key===E.Space&&g.preventDefault()}function f(g){var _,x;e.disabled||(u.value?(r.closePopover(),(_=h(r.button))==null||_.focus()):(g.preventDefault(),g.stopPropagation(),r.popoverState.value===1&&s?.(r.buttonId.value),r.togglePopover(),(x=h(r.button))==null||x.focus()))}function b(g){g.preventDefault(),g.stopPropagation()}return()=>{let g=r.popoverState.value===0,_={open:g},{id:x,...P}=e,A=u.value?{ref:i,type:v.value,onKeydown:p,onClick:f}:{ref:i,id:x,type:v.value,"aria-expanded":e.disabled?void 0:r.popoverState.value===0,"aria-controls":h(r.panel)?r.panelId.value:void 0,disabled:e.disabled?!0:void 0,onKeydown:p,onKeyup:d,onClick:f,onMousedown:b},N=ut();function q(){let z=h(r.panel);if(!z)return;function ie(){W(N.value,{[G.Forwards]:()=>Z(z,B.First),[G.Backwards]:()=>Z(z,B.Last)})===ge.Error&&Z(me().filter(ue=>ue.dataset.headlessuiFocusGuard!=="true"),W(N.value,{[G.Forwards]:B.Next,[G.Backwards]:B.Previous}),{relativeTo:h(r.button)})}ie()}return de(j,[K({ourProps:A,theirProps:{...n,...P},slot:_,attrs:n,slots:o,name:"PopoverButton"}),g&&!u.value&&r.isPortalled.value&&de(Ee,{id:m,features:be.Focusable,"data-headlessui-focus-guard":!0,as:"button",type:"button",onFocus:q})])}}});C({name:"PopoverOverlay",props:{as:{type:[Object,String],default:"div"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0}},setup(e,{attrs:n,slots:o}){let t=ke("PopoverOverlay"),r=`headlessui-popover-overlay-${X()}`,a=Ae(),l=S(()=>a!==null?(a.value&U.Open)===U.Open:t.popoverState.value===0);function s(){t.closePopover()}return()=>{let c={open:t.popoverState.value===0};return K({ourProps:{id:r,"aria-hidden":!0,onClick:s},theirProps:e,slot:c,attrs:n,slots:o,features:le.RenderStrategy|le.Static,visible:l.value,name:"PopoverOverlay"})}}});let ao=C({name:"PopoverPanel",props:{as:{type:[Object,String],default:"div"},static:{type:Boolean,default:!1},unmount:{type:Boolean,default:!0},focus:{type:Boolean,default:!1},id:{type:String,default:()=>`headlessui-popover-panel-${X()}`}},inheritAttrs:!1,setup(e,{attrs:n,slots:o,expose:t}){let{focus:r}=e,a=ke("PopoverPanel"),l=S(()=>se(a.panel)),s=`headlessui-focus-sentinel-before-${X()}`,c=`headlessui-focus-sentinel-after-${X()}`;t({el:a.panel,$el:a.panel}),ae(()=>{a.panelId.value=e.id}),Me(()=>{a.panelId.value=null}),ve(vt,a.panelId),J(()=>{var b,g;if(!r||a.popoverState.value!==0||!a.panel)return;let _=(b=l.value)==null?void 0:b.activeElement;(g=h(a.panel))!=null&&g.contains(_)||Z(h(a.panel),B.First)});let u=Ae(),i=S(()=>u!==null?(u.value&U.Open)===U.Open:a.popoverState.value===0);function m(b){var g,_;switch(b.key){case E.Escape:if(a.popoverState.value!==0||!h(a.panel)||l.value&&!((g=h(a.panel))!=null&&g.contains(l.value.activeElement)))return;b.preventDefault(),b.stopPropagation(),a.closePopover(),(_=h(a.button))==null||_.focus();break}}function v(b){var g,_,x,P,A;let N=b.relatedTarget;N&&h(a.panel)&&((g=h(a.panel))!=null&&g.contains(N)||(a.closePopover(),((x=(_=h(a.beforePanelSentinel))==null?void 0:_.contains)!=null&&x.call(_,N)||(A=(P=h(a.afterPanelSentinel))==null?void 0:P.contains)!=null&&A.call(P,N))&&N.focus({preventScroll:!0})))}let p=ut();function d(){let b=h(a.panel);if(!b)return;function g(){W(p.value,{[G.Forwards]:()=>{var _;Z(b,B.First)===ge.Error&&((_=h(a.afterPanelSentinel))==null||_.focus())},[G.Backwards]:()=>{var _;(_=h(a.button))==null||_.focus({preventScroll:!0})}})}g()}function f(){let b=h(a.panel);if(!b)return;function g(){W(p.value,{[G.Forwards]:()=>{let _=h(a.button),x=h(a.panel);if(!_)return;let P=me(),A=P.indexOf(_),N=P.slice(0,A+1),q=[...P.slice(A+1),...N];for(let z of q.slice())if(z.dataset.headlessuiFocusGuard==="true"||x!=null&&x.contains(z)){let ie=q.indexOf(z);ie!==-1&&q.splice(ie,1)}Z(q,B.First,{sorted:!1})},[G.Backwards]:()=>{var _;Z(b,B.Previous)===ge.Error&&((_=h(a.button))==null||_.focus())}})}g()}return()=>{let b={open:a.popoverState.value===0,close:a.close},{id:g,focus:_,...x}=e,P={ref:a.panel,id:g,onKeydown:m,onFocusout:r&&a.popoverState.value===0?v:void 0,tabIndex:-1};return K({ourProps:P,theirProps:{...n,...x},attrs:n,slot:b,slots:{...o,default:(...A)=>{var N;return[de(j,[i.value&&a.isPortalled.value&&de(Ee,{id:s,ref:a.beforePanelSentinel,features:be.Focusable,"data-headlessui-focus-guard":!0,as:"button",type:"button",onFocus:d}),(N=o.default)==null?void 0:N.call(o,...A),i.value&&a.isPortalled.value&&de(Ee,{id:c,ref:a.afterPanelSentinel,features:be.Focusable,"data-headlessui-focus-guard":!0,as:"button",type:"button",onFocus:f})])]}},features:le.RenderStrategy|le.Static,visible:i.value,name:"PopoverPanel"})}}});C({name:"PopoverGroup",props:{as:{type:[Object,String],default:"div"}},setup(e,{attrs:n,slots:o,expose:t}){let r=k(null),a=kt([]),l=S(()=>se(r));t({el:r,$el:r});function s(m){let v=a.value.indexOf(m);v!==-1&&a.value.splice(v,1)}function c(m){return a.value.push(m),()=>{s(m)}}function u(){var m;let v=l.value;if(!v)return!1;let p=v.activeElement;return(m=h(r))!=null&&m.contains(p)?!0:a.value.some(d=>{var f,b;return((f=v.getElementById(d.buttonId.value))==null?void 0:f.contains(p))||((b=v.getElementById(d.panelId.value))==null?void 0:b.contains(p))})}function i(m){for(let v of a.value)v.buttonId.value!==m&&v.close()}return ve(pt,{registerPopover:c,unregisterPopover:s,isFocusWithinPopoverGroup:u,closeOthers:i}),()=>K({ourProps:{ref:r},theirProps:e,slot:{},attrs:n,slots:o,name:"PopoverGroup"})}});const lo=e=>{const n=S(()=>e.categoryTree.pictures?.[0]),o=S(()=>e.categoryTree.subcategories.filter(({subcategories:c})=>c.length)),t=S(()=>{let c=o.value.length;return n.value&&(c+=1),o.value.length<e.categoryTree.subcategories.length&&(c+=1),c}),r=S(()=>(e.megaMenuMaxCols||7)>=t.value),a=S(()=>r.value?e.categoryTree.subcategories.filter(({subcategories:c})=>!c.length):e.categoryTree.subcategories),l=S(()=>r.value?e.categoryTree.subcategories.filter(({subcategories:c})=>c.length):e.categoryTree.subcategories),s=S(()=>r.value?t.value:n.value?2:1);return{categoryPicture:n,isMegaMenu:r,subcategoryLinks:a,subcategoryCols:l,countMenuCols:s}},so=C({__name:"ShopHeaderSubmenu",props:{categoryTree:null},setup(e,{expose:n}){n();const o=e,{categoryPicture:t,subcategoryLinks:r,subcategoryCols:a,countMenuCols:l}=lo(o),s={props:o,categoryPicture:t,subcategoryLinks:r,subcategoryCols:a,countMenuCols:l,get Popover(){return mt},get PopoverButton(){return ro},get PopoverPanel(){return ao}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}}),io={class:"relative"},uo={class:"flex gap-6 w-full"},co={key:0,class:"flex-1"},po=["href"],fo=["href"],vo={class:"text-sm text-base-600 mt-1 mb-1.5"},mo=["href"],ho=["href"];function go(e,n,o,t,r,a){const l=ee("AImg"),s=ee("Fade");return w(),L(t.Popover,null,{default:O(({open:c})=>[T(t.PopoverButton,{class:"outline-none"},{default:O(()=>[te(e.$slots,"button",Ke(ze({open:c})))]),_:2},1024),y("div",io,[T(s,null,{default:O(()=>[T(t.PopoverPanel,{class:$(["absolute z-20 top-3 left-1/2 -translate-x-1/2 !transform px-6 py-4 rounded-md backdrop-blur-md shadow bg-white/80 text-base text-base-700",t.countMenuCols===1?"w-60":t.countMenuCols===2?`w-screen ${t.categoryPicture?"max-w-lg":"max-w-sm"}`:t.countMenuCols===3?`w-screen ${t.categoryPicture?"max-w-xl":"max-w-md"}`:t.countMenuCols<6?"w-screen max-w-3xl":"w-screen max-w-5xl"])},{default:O(()=>[y("div",uo,[t.subcategoryLinks.length?(w(),I("ul",co,[(w(!0),I(j,null,Y(t.subcategoryLinks,(u,i)=>(w(),I("li",{key:`link-${i}`,class:$(t.subcategoryLinks.length>10?"text-sm mb-1":"mb-2")},[y("a",{href:`/${u.slug}`,class:"hover:text-primary"},[y("h3",null,M(u.name),1)],8,po)],2))),128))])):R("",!0),(w(!0),I(j,null,Y(t.subcategoryCols,(u,i)=>(w(),I("div",{key:u._id,class:"flex-1"},[y("a",{href:`/${u.slug}`,class:"hover:text-primary"},[y("h3",null,M(u.name),1)],8,fo),y("ul",vo,[(w(!0),I(j,null,Y(u.subcategories,(m,v)=>(w(),I("li",{key:`${i}-${v}`,class:"mb-0.5"},[y("a",{href:`/${m.slug}`,class:"hover:text-primary hover:underline"},[y("h3",null,M(m.name),1)],8,mo)]))),128))])]))),128)),t.categoryPicture?(w(),I("div",{key:1,class:$(t.countMenuCols===2?"basis-1/2":t.countMenuCols<5?"basis-2/5":"basis-1/3")},[T(l,{picture:t.categoryPicture,class:"ml-auto rounded"},null,8,["picture"])],2)):R("",!0)]),y("a",{href:`/${o.categoryTree.slug}`,class:"block mt-1 text-xs text-base-600 leading-snug underline"},M("Ver toda a categoria $1".replace("$1",o.categoryTree.name)),9,ho)]),_:1},8,["class"])]),_:1})])]),_:3})}const bo=V(so,[["render",go]]),_o=C({__name:"ShopHeaderMenu",props:{inlineMenuTrees:null},setup(e,{expose:n}){n();const o=e,t=S(()=>!!o.inlineMenuTrees.find(({subcategories:a})=>!a.length)),r={props:o,hasOneLevelSubcategories:t,ShopHeaderSubmenu:bo};return Object.defineProperty(r,"__isScriptSetup",{enumerable:!1,value:!0}),r}}),yo={class:"hover:text-primary group"},wo=["href"],So={class:"inline"};function xo(e,n,o,t,r,a){return w(),I("nav",null,[y("ul",{class:$(["flex gap-4 xl:gap-5 text-base-700",o.inlineMenuTrees.length<7?"text-base":"text-sm"])},[(w(!0),I(j,null,Y(o.inlineMenuTrees,(l,s)=>(w(),I("li",{key:s},[l.subcategories.length?(w(),L(t.ShopHeaderSubmenu,{key:0,"category-tree":l},{button:O(({open:c})=>[y("span",yo,[y("h3",{class:$(["group-hover:underline inline",[o.inlineMenuTrees.length<7?"decoration-2":null,c?"underline":null]])},M(l.name),3),t.hasOneLevelSubcategories?(w(),I("i",{key:0,class:$(["i-chevron-down ml-1 transition-transform text-base-400 group-hover:text-primary-subtle",c?"rotate-180":null])},null,2)):R("",!0)])]),_:2},1032,["category-tree"])):(w(),I("a",{key:1,href:`/${l.slug}`,class:$(["hover:text-primary hover:underline",o.inlineMenuTrees.length<7?"decoration-2":null])},[y("h3",So,M(l.name),1)],10,wo))]))),128))],2)])}const ko=V(_o,[["render",xo]]),Po={},Io={class:"w-full h-40 bg-base-300"};function Oo(e,n){return w(),I("div",Io)}const To=V(Po,[["render",Oo]]),Eo=C({__name:"AccountMenu",props:{serviceLinks:null},setup(e,{expose:n}){n();const o={get Menu(){return Qn},get MenuButton(){return Zn},get MenuItems(){return eo},get MenuItem(){return to},get socialNetworks(){return _e},get customerName(){return he},get initializeFirebaseAuth(){return Qe},get isLogged(){return Je},get logout(){return Ce},AccountLink:Ze,SocialNetworkLink:et};return Object.defineProperty(o,"__isScriptSetup",{enumerable:!1,value:!0}),o}}),Mo={key:0},$o={class:"p-3 text-base-600"},Co={class:"list-none"},Ao=y("i",{class:"i-favorites mr-1"},null,-1),No={class:"flex justify-center gap-2 p-2 text-base-500 text-base"},Lo=y("span",{class:"text-base-600"},M("Sair"),-1),Fo=y("i",{class:"i-logout text-lg ml-1"},null,-1),Do=[Lo,Fo];function Ro(e,n,o,t,r,a){const l=ee("ALink"),s=ee("Fade");return w(),L(t.Menu,{as:"div",class:"relative text-center text-sm text-base-800"},{default:O(({open:c})=>[c?(w(),I("div",Mo,[n[0]||(Le(-1),n[0]=y("span",null,[Q(M(t.initializeFirebaseAuth()),1)]),Le(1),n[0])])):R("",!0),T(t.MenuButton,{class:"outline-none"},{default:O(()=>[te(e.$slots,"button",Ke(ze({open:c})))]),_:2},1024),T(s,null,{default:O(()=>[T(t.MenuItems,{class:"absolute -right-8 mt-2 w-56 rounded-md shadow ring-1 ring-black ring-opacity-5 bg-white divide-y divide-base-100 focus:outline-none"},{default:O(()=>[y("div",$o,[Q(M(`Olá ${t.customerName||"Visitante"}`)+" ",1),T(t.AccountLink,{class:"block py-1.5 rounded primary hover:primary-bold my-1"},{default:O(()=>[Q(M("Acessar minha conta"))]),_:1}),t.isLogged?R("",!0):(w(),L(t.AccountLink,{key:0,class:"block font-medium text-primary hover:text-primary-bold","is-sign-up":""},{default:O(()=>[Q(M("Criar uma conta"))]),_:1}))]),y("ul",Co,[T(t.MenuItem,{as:"li"},{default:O(({active:u})=>[T(t.AccountLink,{to:"orders",class:$(["block p-2",u?"bg-base-100 text-primary":null])},{default:O(()=>[Q(M("Meus pedidos"))]),_:2},1032,["class"])]),_:1}),T(t.MenuItem,{as:"li"},{default:O(({active:u})=>[T(t.AccountLink,{to:"favorites",class:$(["block p-2",u?"bg-base-100 text-primary":null])},{default:O(()=>[Ao,Q(" "+M("Meus favoritos"))]),_:2},1032,["class"])]),_:1}),(w(!0),I(j,null,Y(o.serviceLinks,({title:u,href:i},m)=>(w(),L(t.MenuItem,{as:"li",key:`s-${m}`},{default:O(({active:v})=>[T(l,{href:i,class:$(["block p-2",v?"bg-base-100 text-primary":null])},{default:O(()=>[Q(M(u),1)]),_:2},1032,["href","class"])]),_:2},1024))),128)),T(t.MenuItem,{as:"li"},{default:O(()=>[y("div",No,[(w(!0),I(j,null,Y(t.socialNetworks,(u,i)=>(w(),I("span",{key:i},[T(t.SocialNetworkLink,{network:i,class:"p-1 hover:text-primary"},null,8,["network"])]))),128))])]),_:1}),t.isLogged?(w(),L(t.MenuItem,{key:0,as:"li"},{default:O(()=>[y("button",{onClick:n[1]||(n[1]=(...u)=>t.logout&&t.logout(...u)),class:"p-2 text-right text-base-800"},Do)]),_:1})):R("",!0)])]),_:1})]),_:1})]),_:3})}const jo=V(Eo,[["render",Ro]]),Bo=C({__name:"ShopHeader",props:{categories:null,menuCategorySlugs:null,menuRandomCategories:null,isAlphabeticalSortSubmenu:{type:Boolean},serviceLinks:null},setup(e,{expose:n}){n();const o=e,t=k(null),{isSticky:r,positionY:a,categoryTrees:l,inlineMenuTrees:s}=At({...o,header:t}),c=k(!1),u=k(!1),i={props:o,header:t,isSticky:r,positionY:a,categoryTrees:l,inlineMenuTrees:s,isSidenavOpen:c,isSearchOpen:u,Drawer:Ht,ShopSidenav:En,ShopHeaderMenu:ko,SearchModal:To,AccountMenu:jo};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}}),Ho={class:"container lg:max-w-7xl mx-auto px-1 lg:pl-3 grid grid-flow-col grid-cols-3 justify-between items-center lg:grid-cols-none lg:auto-cols-max"},Uo={class:"lg:hidden"},Vo={class:"px-2 flex justify-end items-center gap-3 lg:gap-4 text-base-800"},Wo=y("i",{class:"i-search w-7 h-7 hover:text-primary hover:scale-110 active:scale-125"},null,-1),Ko=[Wo],zo=y("button",{"aria-label":"Abrir carrinho"},[y("i",{class:"i-shopping-cart w-7 h-7 hover:text-primary hover:scale-110 active:scale-125"})],-1);function Go(e,n,o,t,r,a){return w(),I("header",{ref:"header",class:$(["relative top-0 z-50 transition-colors",[t.isSticky&&!t.isSidenavOpen?"bg-white/80":"bg-white",t.isSticky?"backdrop-blur-md shadow py-2 md:py-3":"py-3 sm:py-4 md:py-5"]])},[y("div",Ho,[y("div",Uo,[y("button",{class:"px-2 my-1","aria-label":"Abrir/fechar menu",onClick:n[0]||(n[0]=l=>t.isSidenavOpen=!t.isSidenavOpen)},[y("i",{class:$(["text-base-500 text-3xl",t.isSidenavOpen?"i-close":"i-menu"])},null,2)])]),te(e.$slots,"logo"),T(t.ShopHeaderMenu,Fe({class:"hidden lg:block"},{inlineMenuTrees:t.inlineMenuTrees}),null,16),y("div",Vo,[y("button",{"aria-label":"Buscar produtos",onClick:n[1]||(n[1]=l=>t.isSearchOpen=!t.isSearchOpen)},Ko),T(t.AccountMenu,{class:"hidden sm:block","aria-label":"Minha conta","service-links":o.serviceLinks},{button:O(({open:l})=>[y("i",{class:$(["i-account w-7 h-7 hover:text-primary hover:scale-110 active:scale-125",l?"text-black scale-110":null])},null,2)]),_:1},8,["service-links"]),zo])]),T(t.Drawer,{modelValue:t.isSidenavOpen,"onUpdate:modelValue":n[2]||(n[2]=l=>t.isSidenavOpen=l),"has-close-button":!1,position:"absolute",class:$(t.isSticky?"mt-2 md:mt-3":"mt-3 sm:mt-4 md:mt-5"),style:We({height:`calc(100vh - ${t.positionY}px + .5rem)`})},{default:O(()=>[T(t.ShopSidenav,Fe({class:"bg-white pt-6"},{categoryTrees:t.categoryTrees}),null,16)]),_:1},8,["modelValue","class","style"]),T(t.Drawer,{modelValue:t.isSearchOpen,"onUpdate:modelValue":n[3]||(n[3]=l=>t.isSearchOpen=l),"has-close-button":!1,placement:"top"},{default:O(()=>[T(t.SearchModal)]),_:1},8,["modelValue"])],2)}const er=V(Bo,[["render",Go]]);export{er as default};