cloudcommerce 0.37.0 → 0.38.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 (262) hide show
  1. package/.github/workflows/test-apps.yml +2 -2
  2. package/.gitmodules +0 -3
  3. package/.vscode/settings.json +1 -2
  4. package/CHANGELOG.md +50 -0
  5. package/action.yml +2 -2
  6. package/ecomplus-stores/barra-doce/functions/many/package.json +3 -3
  7. package/ecomplus-stores/barra-doce/functions/ssr/package.json +6 -6
  8. package/ecomplus-stores/barra-doce/functions/with-apps/package.json +3 -3
  9. package/ecomplus-stores/barra-doce/package.json +2 -2
  10. package/package.json +7 -7
  11. package/packages/api/lib/api.d.ts +2 -2
  12. package/packages/api/package.json +1 -1
  13. package/packages/api/types.d.ts +4 -1
  14. package/packages/apps/affilate-program/package.json +1 -1
  15. package/packages/apps/correios/package.json +1 -1
  16. package/packages/apps/custom-payment/package.json +1 -1
  17. package/packages/apps/custom-shipping/package.json +1 -1
  18. package/packages/apps/datafrete/package.json +1 -1
  19. package/packages/apps/discounts/package.json +1 -1
  20. package/packages/apps/emails/package.json +1 -1
  21. package/packages/apps/fb-conversions/package.json +1 -1
  22. package/packages/apps/flash-courier/package.json +1 -1
  23. package/packages/apps/frenet/package.json +1 -1
  24. package/packages/apps/galaxpay/package.json +1 -1
  25. package/packages/apps/google-analytics/package.json +1 -1
  26. package/packages/apps/jadlog/package.json +1 -1
  27. package/packages/apps/loyalty-points/package.json +1 -1
  28. package/packages/apps/mandae/package.json +1 -1
  29. package/packages/apps/melhor-envio/package.json +1 -1
  30. package/packages/apps/mercadopago/package.json +1 -1
  31. package/packages/apps/pagarme/package.json +1 -1
  32. package/packages/apps/pagarme-v5/package.json +1 -1
  33. package/packages/apps/paghiper/package.json +1 -1
  34. package/packages/apps/pix/package.json +1 -1
  35. package/packages/apps/tiny-erp/package.json +1 -1
  36. package/packages/apps/webhooks/package.json +1 -1
  37. package/packages/cli/config/firestore.rules +4 -1
  38. package/packages/cli/lib/cli.js +30 -9
  39. package/packages/cli/package.json +2 -1
  40. package/packages/cli/src/cli.ts +37 -9
  41. package/packages/config/package.json +1 -1
  42. package/packages/emails/package.json +1 -1
  43. package/packages/eslint/package.json +3 -3
  44. package/packages/events/package.json +1 -1
  45. package/packages/feeds/package.json +1 -1
  46. package/packages/firebase/package.json +1 -1
  47. package/packages/i18n/package.json +1 -1
  48. package/packages/modules/package.json +1 -1
  49. package/packages/passport/package.json +1 -1
  50. package/packages/ssr/package.json +5 -5
  51. package/packages/storefront/.auto-imports.d.ts +1 -0
  52. package/packages/storefront/client.d.ts +1 -0
  53. package/packages/storefront/config/storefront.tailwind.cjs +21 -20
  54. package/packages/storefront/config/storefront.unocss.cjs +11 -0
  55. package/packages/storefront/dist/client/_astro/{AccountPage.700be123.js → AccountPage.j0C5JBLY.js} +1 -1
  56. package/packages/storefront/dist/client/_astro/{CartSidebar.430b55df.js → CartSidebar.1kUFk9Xn.js} +1 -1
  57. package/packages/storefront/dist/client/_astro/HeroSlider.tR1dVXyu.js +1 -0
  58. package/packages/storefront/dist/client/_astro/{PitchBar.06e0f831.js → PitchBar.FelC04wE.js} +1 -1
  59. package/packages/storefront/dist/client/_astro/{Prices.0e829c31.js → Prices.PuQc6C7F.js} +1 -1
  60. package/packages/storefront/dist/client/_astro/ProductCard.ephJafAE.js +1 -0
  61. package/packages/storefront/dist/client/_astro/ProductDetails.B6Ih5MGf.js +7 -0
  62. package/packages/storefront/dist/client/_astro/ProductShelf.GESxuPZ_.js +1 -0
  63. package/packages/storefront/dist/client/_astro/{QuantitySelector.ebf60845.js → QuantitySelector.YNmWjN8y.js} +1 -1
  64. package/packages/storefront/dist/client/_astro/SearchContainer.BzixfU3R.js +1 -0
  65. package/packages/storefront/dist/client/_astro/SearchModal.F7vbwxIv.js +1 -0
  66. package/packages/storefront/dist/client/_astro/ShopHeader.5vR1LgSW.js +10 -0
  67. package/packages/storefront/dist/client/_astro/_plugin-vue_export-helper.sk5AFsEV.js +1 -0
  68. package/packages/storefront/dist/client/_astro/_slug_.r8QHNfdw.css +1 -0
  69. package/packages/storefront/dist/client/_astro/client.RF8UxjZd.js +1 -0
  70. package/packages/storefront/dist/client/_astro/customer-session._VkzXnXT.js +7 -0
  71. package/packages/storefront/dist/client/_astro/ecom-utils.gJYgRPRz.js +1 -0
  72. package/packages/storefront/dist/client/_astro/{firebase-app.992a296f.js → firebase-app.cPMfoOsn.js} +1 -1
  73. package/packages/storefront/dist/client/_astro/{format-money.9cf6b04d.js → format-money.FMQXgKHB.js} +1 -1
  74. package/packages/storefront/dist/client/_astro/{hoisted.c90fc6ab.js → hoisted.B6fKrLPR.js} +1 -1
  75. package/packages/storefront/dist/client/_astro/{hoisted.54eaab04.js → hoisted._FbzheVm.js} +1 -1
  76. package/packages/storefront/dist/client/_astro/{i18n.29216eeb.js → i18n.m7SpISxy.js} +1 -1
  77. package/packages/storefront/dist/client/_astro/{img.4f23a3dd.js → img.zh-Drf-O.js} +1 -1
  78. package/packages/storefront/dist/client/_astro/{index-61e5ac61.bdc8d0cd.js → index-dd468b12.D5s8VdAL.js} +92 -107
  79. package/packages/storefront/dist/client/_astro/{index.570b84fe.js → index.5PN-EYMS.js} +1 -1
  80. package/packages/storefront/dist/client/_astro/index.XrHFaN2F.js +1 -0
  81. package/packages/storefront/dist/client/_astro/{modules-info.55780599.js → modules-info.sD0tdb2b.js} +1 -1
  82. package/packages/storefront/dist/client/_astro/name.HU5l7TJo.js +1 -0
  83. package/packages/storefront/dist/client/_astro/{photoswipe-lightbox.esm.c157838f.js → photoswipe-lightbox.esm.dZBqKD9u.js} +1 -1
  84. package/packages/storefront/dist/client/_astro/{photoswipe.01431ec7.js → photoswipe.0V7m2jWu.js} +1 -2
  85. package/packages/storefront/dist/client/_astro/{photoswipe.esm.92c2d901.js → photoswipe.esm.Ylh9TGkz.js} +1 -1
  86. package/packages/storefront/dist/client/_astro/sf-utils.5t7r9A2G.js +1 -0
  87. package/packages/storefront/dist/client/_astro/{shopping-cart.d9f601dd.js → shopping-cart.A-1jhlKi.js} +1 -1
  88. package/packages/storefront/dist/client/_astro/use-analytics.1EVxbrS7.js +1 -0
  89. package/packages/storefront/dist/client/_astro/{use-product-card.437911bb.js → use-product-card.erbOV6Fv.js} +1 -1
  90. package/packages/storefront/dist/client/robots.txt +1 -0
  91. package/packages/storefront/dist/server/chunks/{CartSidebar_eab28771.mjs → CartSidebar_hAgJQJgm.mjs} +1 -1
  92. package/packages/storefront/dist/server/chunks/SearchModal_eWb5SdQM.mjs +351 -0
  93. package/packages/storefront/dist/server/chunks/{_.._5a781fb3.mjs → _.._S7DDBn_b.mjs} +1 -1
  94. package/packages/storefront/dist/server/chunks/{account_519edb70.mjs → account_3ySmGzMc.mjs} +1 -1
  95. package/packages/storefront/dist/server/chunks/astro/{assets-service_a9d9ab5f.mjs → assets-service_QlOZG8ov.mjs} +1 -1
  96. package/packages/storefront/dist/server/chunks/{astro_d98f7186.mjs → astro_zcC1GStV.mjs} +17 -34
  97. package/packages/storefront/dist/server/chunks/{index_5e3ed8a0.mjs → index_nIwq11oA.mjs} +1 -1
  98. package/packages/storefront/dist/server/chunks/{index_10e14f85.mjs → index_uAR5ZV4d.mjs} +1 -1
  99. package/packages/storefront/dist/server/chunks/{node_1119b0d1.mjs → node_2VvC7trl.mjs} +1 -1
  100. package/packages/storefront/dist/server/chunks/pages/{__93ade2dd.mjs → __MSibDuuV.mjs} +652 -255
  101. package/packages/storefront/dist/server/chunks/pages/{account_e5d410a7.mjs → account_iG-YqJ5q.mjs} +3 -2
  102. package/packages/storefront/dist/server/chunks/pages/{index_7e25afc1.mjs → index_BtDyKPh_.mjs} +3 -2
  103. package/packages/storefront/dist/server/chunks/pages/{node_bd378ac0.mjs → node_bKqL47eZ.mjs} +2 -2
  104. package/packages/storefront/dist/server/chunks/pages/{~fallback_73578d2f.mjs → ~fallback_73R5VA6j.mjs} +3 -2
  105. package/packages/storefront/dist/server/chunks/{photoswipe_9528923e.mjs → photoswipe_IcWDJiwc.mjs} +1 -1
  106. package/packages/storefront/dist/server/chunks/{~fallback_41122b9b.mjs → ~fallback_7q1dqY4e.mjs} +1 -1
  107. package/packages/storefront/dist/server/entry.mjs +970 -93
  108. package/packages/storefront/dist/server/manifest_dSwvaOdW.mjs +195 -0
  109. package/packages/storefront/dist/server/renderers.mjs +2 -2
  110. package/packages/storefront/package.json +13 -13
  111. package/packages/storefront/src/helpers/sf-utils.ts +37 -6
  112. package/packages/storefront/src/lib/composables/use-search-container.ts +48 -0
  113. package/packages/storefront/src/lib/composables/use-search-modal.ts +31 -27
  114. package/packages/storefront/src/lib/composables/use-shop-header.ts +78 -1
  115. package/packages/storefront/src/lib/composables/use-sticky-header.ts +2 -0
  116. package/packages/storefront/src/lib/layouts/BaseHead.astro +8 -1
  117. package/packages/storefront/src/lib/layouts/use-page-main.ts +15 -0
  118. package/packages/storefront/src/lib/scripts/firestore.ts +27 -0
  119. package/packages/storefront/src/lib/ssr-context.ts +14 -0
  120. package/packages/storefront/src/lib/state/search-engine.ts +80 -27
  121. package/packages/storefront/src/lib/state/use-analytics.ts +36 -21
  122. package/packages/test-base/package.json +1 -1
  123. package/packages/types/package.json +1 -1
  124. package/ecomplus-stores/monocard/.devcontainer/devcontainer.json +0 -30
  125. package/ecomplus-stores/monocard/.editorconfig +0 -13
  126. package/ecomplus-stores/monocard/.eslintrc.cjs +0 -3
  127. package/ecomplus-stores/monocard/.firebaserc +0 -5
  128. package/ecomplus-stores/monocard/.github/build-and-deploy +0 -1
  129. package/ecomplus-stores/monocard/.github/renovate.json +0 -5
  130. package/ecomplus-stores/monocard/.github/workflows/build-and-deploy.yml +0 -37
  131. package/ecomplus-stores/monocard/.github/workflows/calibreapp-image-actions.yml +0 -23
  132. package/ecomplus-stores/monocard/.gitpod.yml +0 -12
  133. package/ecomplus-stores/monocard/.idx/dev.nix +0 -24
  134. package/ecomplus-stores/monocard/.nvmrc +0 -1
  135. package/ecomplus-stores/monocard/.vscode/extensions.json +0 -8
  136. package/ecomplus-stores/monocard/.vscode/launch.json +0 -11
  137. package/ecomplus-stores/monocard/.vscode/settings.json +0 -13
  138. package/ecomplus-stores/monocard/LICENSE.md +0 -230
  139. package/ecomplus-stores/monocard/README.md +0 -31
  140. package/ecomplus-stores/monocard/SETUP.md +0 -129
  141. package/ecomplus-stores/monocard/SETUP.pt-BR.md +0 -129
  142. package/ecomplus-stores/monocard/functions/config.json +0 -3
  143. package/ecomplus-stores/monocard/functions/example.env +0 -10
  144. package/ecomplus-stores/monocard/functions/many/index.js +0 -14
  145. package/ecomplus-stores/monocard/functions/many/package.json +0 -22
  146. package/ecomplus-stores/monocard/functions/ssr/.eslintrc.cjs +0 -6
  147. package/ecomplus-stores/monocard/functions/ssr/astro.config.mjs +0 -4
  148. package/ecomplus-stores/monocard/functions/ssr/content/blog/.gitkeep +0 -0
  149. package/ecomplus-stores/monocard/functions/ssr/content/extra-pages/terms.json +0 -11
  150. package/ecomplus-stores/monocard/functions/ssr/content/extra-pages/trocas.json +0 -11
  151. package/ecomplus-stores/monocard/functions/ssr/content/layout.json +0 -52
  152. package/ecomplus-stores/monocard/functions/ssr/content/pages/home.json +0 -20
  153. package/ecomplus-stores/monocard/functions/ssr/content/pages/products.json +0 -18
  154. package/ecomplus-stores/monocard/functions/ssr/content/settings.json +0 -78
  155. package/ecomplus-stores/monocard/functions/ssr/index.js +0 -18
  156. package/ecomplus-stores/monocard/functions/ssr/package.json +0 -36
  157. package/ecomplus-stores/monocard/functions/ssr/public/admin/.gitkeep +0 -0
  158. package/ecomplus-stores/monocard/functions/ssr/public/assets/lotties/img_1.png +0 -0
  159. package/ecomplus-stores/monocard/functions/ssr/public/assets/lotties/img_1.webp +0 -0
  160. package/ecomplus-stores/monocard/functions/ssr/public/assets/lotties/phone-nfc.json +0 -1
  161. package/ecomplus-stores/monocard/functions/ssr/public/img/icon.png +0 -0
  162. package/ecomplus-stores/monocard/functions/ssr/public/img/large-icon.png +0 -0
  163. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/card-phone.png +0 -0
  164. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/devices.jpg +0 -0
  165. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/ecom-icon.png +0 -0
  166. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/edit-suit.jpg +0 -0
  167. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/favicon.png +0 -0
  168. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/icon.png +0 -0
  169. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/large-icon.png +0 -0
  170. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/logo-arcelor-mittal.webp +0 -0
  171. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/logo-azul.webp +0 -0
  172. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/logo-banco-pan.webp +0 -0
  173. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/logo-brinks.webp +0 -0
  174. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/logo-mastercard.webp +0 -0
  175. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/logo-pfizer.webp +0 -0
  176. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/logo-prudential.webp +0 -0
  177. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/logo-unimed.webp +0 -0
  178. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/logo.webp +0 -0
  179. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/mockup-editar.png +0 -0
  180. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/og-image.png +0 -0
  181. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/padronagem-tilada.png +0 -0
  182. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/qrcode-camera.png +0 -0
  183. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/sua-logo-aqui.png +0 -0
  184. package/ecomplus-stores/monocard/functions/ssr/public/robots.txt +0 -6
  185. package/ecomplus-stores/monocard/functions/ssr/scripts/build.sh +0 -14
  186. package/ecomplus-stores/monocard/functions/ssr/src/assets/card.css +0 -99
  187. package/ecomplus-stores/monocard/functions/ssr/src/assets/style.css +0 -79
  188. package/ecomplus-stores/monocard/functions/ssr/src/components/AccountMenu.vue +0 -97
  189. package/ecomplus-stores/monocard/functions/ssr/src/components/AccountPage.vue +0 -62
  190. package/ecomplus-stores/monocard/functions/ssr/src/components/Banner.vue +0 -59
  191. package/ecomplus-stores/monocard/functions/ssr/src/components/BannersGrid.astro +0 -25
  192. package/ecomplus-stores/monocard/functions/ssr/src/components/Breadcrumbs.astro +0 -44
  193. package/ecomplus-stores/monocard/functions/ssr/src/components/CartItem.vue +0 -64
  194. package/ecomplus-stores/monocard/functions/ssr/src/components/CartSidebar.vue +0 -69
  195. package/ecomplus-stores/monocard/functions/ssr/src/components/CasesGrid.astro +0 -49
  196. package/ecomplus-stores/monocard/functions/ssr/src/components/CheckoutPage.vue +0 -33
  197. package/ecomplus-stores/monocard/functions/ssr/src/components/Collapse.vue +0 -19
  198. package/ecomplus-stores/monocard/functions/ssr/src/components/DemoVideo.vue +0 -10
  199. package/ecomplus-stores/monocard/functions/ssr/src/components/DocDescription.vue +0 -28
  200. package/ecomplus-stores/monocard/functions/ssr/src/components/FeatureTabs.vue +0 -286
  201. package/ecomplus-stores/monocard/functions/ssr/src/components/FeaturesSection.astro +0 -28
  202. package/ecomplus-stores/monocard/functions/ssr/src/components/FooterStamps.vue +0 -63
  203. package/ecomplus-stores/monocard/functions/ssr/src/components/ImagesGallery.vue +0 -154
  204. package/ecomplus-stores/monocard/functions/ssr/src/components/LoginForm.vue +0 -107
  205. package/ecomplus-stores/monocard/functions/ssr/src/components/LottiePhoneNFC.vue +0 -20
  206. package/ecomplus-stores/monocard/functions/ssr/src/components/MonocardCustomizer.vue +0 -261
  207. package/ecomplus-stores/monocard/functions/ssr/src/components/PitchBar.vue +0 -61
  208. package/ecomplus-stores/monocard/functions/ssr/src/components/Prices.vue +0 -95
  209. package/ecomplus-stores/monocard/functions/ssr/src/components/ProductCard.vue +0 -117
  210. package/ecomplus-stores/monocard/functions/ssr/src/components/ProductDetails.vue +0 -122
  211. package/ecomplus-stores/monocard/functions/ssr/src/components/ProductShelf.vue +0 -57
  212. package/ecomplus-stores/monocard/functions/ssr/src/components/ProductSpecifications.vue +0 -42
  213. package/ecomplus-stores/monocard/functions/ssr/src/components/SearchModal.vue +0 -6
  214. package/ecomplus-stores/monocard/functions/ssr/src/components/ShopFooter.vue +0 -71
  215. package/ecomplus-stores/monocard/functions/ssr/src/components/ShopHeader.vue +0 -137
  216. package/ecomplus-stores/monocard/functions/ssr/src/components/ShopHeaderMenu.vue +0 -92
  217. package/ecomplus-stores/monocard/functions/ssr/src/components/ShopSidenav.vue +0 -64
  218. package/ecomplus-stores/monocard/functions/ssr/src/components/ShopSidenavCategory.vue +0 -77
  219. package/ecomplus-stores/monocard/functions/ssr/src/components/SkuSelector.vue +0 -58
  220. package/ecomplus-stores/monocard/functions/ssr/src/env.d.ts +0 -13
  221. package/ecomplus-stores/monocard/functions/ssr/src/layouts/Base.astro +0 -15
  222. package/ecomplus-stores/monocard/functions/ssr/src/layouts/PageFooter.astro +0 -53
  223. package/ecomplus-stores/monocard/functions/ssr/src/layouts/PageHeader.astro +0 -35
  224. package/ecomplus-stores/monocard/functions/ssr/src/main/Fallback.astro +0 -10
  225. package/ecomplus-stores/monocard/functions/ssr/src/main/Home.astro +0 -95
  226. package/ecomplus-stores/monocard/functions/ssr/src/main/Sections.astro +0 -52
  227. package/ecomplus-stores/monocard/functions/ssr/src/main/Wildcard.astro +0 -18
  228. package/ecomplus-stores/monocard/functions/ssr/src/pages/[...slug].astro +0 -42
  229. package/ecomplus-stores/monocard/functions/ssr/src/pages/_vue.ts +0 -10
  230. package/ecomplus-stores/monocard/functions/ssr/src/pages/app/account.astro +0 -34
  231. package/ecomplus-stores/monocard/functions/ssr/src/pages/app/index.astro +0 -62
  232. package/ecomplus-stores/monocard/functions/ssr/src/pages/comprar/index.astro +0 -52
  233. package/ecomplus-stores/monocard/functions/ssr/src/pages/index.astro +0 -32
  234. package/ecomplus-stores/monocard/functions/ssr/src/pages/~fallback.astro +0 -23
  235. package/ecomplus-stores/monocard/functions/ssr/src/scripts/InlineScripts.astro +0 -10
  236. package/ecomplus-stores/monocard/functions/ssr/tailwind.config.cjs +0 -18
  237. package/ecomplus-stores/monocard/functions/ssr/tsconfig.json +0 -12
  238. package/ecomplus-stores/monocard/functions/ssr/uno.config.cjs +0 -5
  239. package/ecomplus-stores/monocard/functions/with-apps/index.js +0 -12
  240. package/ecomplus-stores/monocard/functions/with-apps/package.json +0 -22
  241. package/ecomplus-stores/monocard/package.json +0 -31
  242. package/ecomplus-stores/monocard/scripts/install.sh +0 -24
  243. package/packages/storefront/dist/client/_astro/HeroSlider.bd684ed8.js +0 -1
  244. package/packages/storefront/dist/client/_astro/ProductDetails.06da998d.js +0 -1
  245. package/packages/storefront/dist/client/_astro/ProductShelf.3f4f38b5.js +0 -1
  246. package/packages/storefront/dist/client/_astro/ProductShelf.bf82838b.js +0 -1
  247. package/packages/storefront/dist/client/_astro/SearchModal.b6aa5ef7.js +0 -1
  248. package/packages/storefront/dist/client/_astro/ShopHeader.2d6e361a.js +0 -4
  249. package/packages/storefront/dist/client/_astro/_plugin-vue_export-helper.f75743ee.js +0 -1
  250. package/packages/storefront/dist/client/_astro/_slug_.e7cac999.css +0 -1
  251. package/packages/storefront/dist/client/_astro/client.41b42098.js +0 -1
  252. package/packages/storefront/dist/client/_astro/customer-session.5ab9ab1a.js +0 -1
  253. package/packages/storefront/dist/client/_astro/ecom-utils.5cbfb95e.js +0 -1
  254. package/packages/storefront/dist/client/_astro/index.8ac1db99.js +0 -1
  255. package/packages/storefront/dist/client/_astro/name.01410784.js +0 -1
  256. package/packages/storefront/dist/client/_astro/sf-utils.b04e1813.js +0 -1
  257. package/packages/storefront/dist/client/_astro/use-analytics.cc95e346.js +0 -1
  258. package/packages/storefront/dist/server/chunks/SearchModal_f66549d4.mjs +0 -147
  259. package/packages/storefront/dist/server/manifest_221d806b.mjs +0 -1069
  260. /package/packages/storefront/dist/client/_astro/{afetch.f4507208.js → afetch.5c8VmT0-.js} +0 -0
  261. /package/packages/storefront/dist/client/_astro/{img-sizes.41e0efe4.js → img-sizes.gxAI9JNh.js} +0 -0
  262. /package/packages/storefront/dist/client/_astro/{price.04ceb6c4.js → price.Easct8WC.js} +0 -0
@@ -3,7 +3,9 @@ import type { PageContent } from '@@sf/content';
3
3
  import type { RouteContext } from '@@sf/ssr-context';
4
4
  import type { Props as UseBannerProps } from '@@sf/composables/use-banner';
5
5
  import type { Props as UseProductShelfProps } from '@@sf/composables/use-product-shelf';
6
+ import type { Props as UseSearchContainerProps } from '@@sf/composables/use-search-container';
6
7
  import { useProductShelf } from '@@sf/composables/use-product-shelf';
8
+ import { useSearchContainer } from '@@sf/composables/use-search-container';
7
9
 
8
10
  export interface Props {
9
11
  routeContext: RouteContext;
@@ -56,6 +58,7 @@ export const usePageSections = async <T extends CustomSection = CustomSection>
56
58
  | { type: 'related-products', props: {} }
57
59
  | { type: 'doc-description', props: {} }
58
60
  | { type: 'product-specifications', props: {} }
61
+ | { type: 'search-container', props: UseSearchContainerProps }
59
62
  > = [];
60
63
  if (sectionsContent) {
61
64
  await Promise.all(sectionsContent.map(async ({ type, ...sectionContent }, index) => {
@@ -122,6 +125,18 @@ export const usePageSections = async <T extends CustomSection = CustomSection>
122
125
  return;
123
126
  }
124
127
 
128
+ if (type === 'search-container') {
129
+ const props: UseSearchContainerProps = { ...sectionContent };
130
+ if (routeContext.searchPageTerm !== undefined) {
131
+ props.term = routeContext.searchPageTerm || null;
132
+ const { searchEngine, fetching } = useSearchContainer(props);
133
+ await fetching;
134
+ props.products = searchEngine.products;
135
+ props.ssrError = searchEngine.fetchError.value?.message;
136
+ }
137
+ sections[index] = { type, props };
138
+ return;
139
+ }
125
140
  if (type === 'banners-grid') {
126
141
  sections[index] = {
127
142
  type,
@@ -0,0 +1,27 @@
1
+ import { getFirestore, collection, addDoc } from 'firebase/firestore/lite';
2
+ import { initializeAppCheck, ReCaptchaV3Provider } from 'firebase/app-check';
3
+ import firebaseApp from './firebase-app';
4
+
5
+ const firestore = getFirestore(firebaseApp);
6
+ if (window.$reCaptchaSiteKey) {
7
+ initializeAppCheck(firebaseApp, {
8
+ provider: new ReCaptchaV3Provider(window.$reCaptchaSiteKey),
9
+ isTokenAutoRefreshEnabled: true,
10
+ });
11
+ }
12
+
13
+ export default firestore;
14
+
15
+ export {
16
+ firestore,
17
+ collection,
18
+ addDoc,
19
+ };
20
+
21
+ export const getFormCollRef = (form: string) => {
22
+ return collection(firestore, `forms/p/${form}`);
23
+ };
24
+
25
+ export const addFormDoc = (form: string, data: Record<string, any>) => {
26
+ return addDoc(getFormCollRef(form), data);
27
+ };
@@ -5,6 +5,7 @@ import type { ResourceId, CategoriesList, BrandsList } from '@cloudcommerce/api/
5
5
  import type { ContentGetter, SettingsContent, PageContent } from '@@sf/content';
6
6
  import { EventEmitter } from 'node:events';
7
7
  import api from '@cloudcommerce/api';
8
+ import { termify } from '../helpers/sf-utils';
8
9
  import _getConfig from '../../config/storefront.config.mjs';
9
10
 
10
11
  export type StorefrontConfig = {
@@ -87,6 +88,14 @@ const loadRouteContext = async (
87
88
  urlPath = urlPath.replace('/~preview', '');
88
89
  }
89
90
  const isHomepage = urlPath === '/';
91
+ const isSearchPage = !isHomepage && (urlPath.startsWith('/s/') || urlPath === '/s');
92
+ let searchPageTerm: string | undefined;
93
+ if (isSearchPage) {
94
+ const pathTerm = urlPath.split('/')[2];
95
+ if (typeof pathTerm === 'string') {
96
+ searchPageTerm = termify(decodeURIComponent(pathTerm));
97
+ }
98
+ }
90
99
  const config = getConfig();
91
100
  globalThis.$storefront.settings = config.settings;
92
101
  let cmsContent: PageContent | null = { sections: [] };
@@ -117,6 +126,8 @@ const loadRouteContext = async (
117
126
  const { slug } = Astro.params;
118
127
  if (isHomepage) {
119
128
  cmsContent = await config.getContent('pages/home');
129
+ } else if (isSearchPage) {
130
+ cmsContent = await config.getContent('pages/search');
120
131
  } else if (slug && typeof slug === 'string') {
121
132
  if (contentCollection) {
122
133
  cmsContent = await config.getContent(`${contentCollection}/${slug}`);
@@ -219,11 +230,14 @@ const loadRouteContext = async (
219
230
  const routeContext = {
220
231
  ...config,
221
232
  isHomepage,
233
+ isSearchPage,
234
+ searchPageTerm,
222
235
  cmsContent,
223
236
  fetchingApiContext,
224
237
  apiContext,
225
238
  apiState,
226
239
  isPreview,
240
+ // Astro,
227
241
  };
228
242
  Astro.locals.routeContext = routeContext;
229
243
  emitter.emit('load', routeContext);
@@ -1,5 +1,10 @@
1
1
  import type { SearchItem, SearchResult } from '@cloudcommerce/types';
2
- import { ref, watch, shallowReactive } from 'vue';
2
+ import {
3
+ ref,
4
+ computed,
5
+ watch,
6
+ shallowReactive,
7
+ } from 'vue';
3
8
  import { useDebounceFn } from '@vueuse/core';
4
9
  import api from '@cloudcommerce/api';
5
10
  import useStorage from '@@sf/state/use-storage';
@@ -8,34 +13,53 @@ const storageKey = 'ecomSeachHistory';
8
13
 
9
14
  export const searchHistory = useStorage<string[]>(storageKey, []);
10
15
 
16
+ for (let i = 0; i < searchHistory.length; i++) {
17
+ if (typeof searchHistory[i] !== 'string') {
18
+ searchHistory.splice(i, 1);
19
+ i -= 1;
20
+ }
21
+ }
22
+
11
23
  export const search = async ({
12
24
  term,
13
25
  params,
14
26
  fields,
15
27
  url = 'search/v1',
16
28
  }: {
17
- term: string,
29
+ term: string | null,
18
30
  params?: Record<string, any>,
19
31
  fields?: readonly string[],
20
32
  url?: 'search/v1' | `search/v1?${string}`,
21
33
  }) => {
22
- term = term.trim();
23
- if (term.length < 2) {
24
- return { data: { result: [], meta: null } };
34
+ if (typeof term === 'string') {
35
+ term = term.trim();
36
+ if (term.length < 2) {
37
+ return { data: { result: [], meta: null } };
38
+ }
25
39
  }
26
40
  const response = await api.get(url, {
27
41
  fields,
28
- params: {
42
+ params: !term ? params : {
29
43
  ...params,
30
44
  term,
31
45
  },
32
46
  });
33
- if (response.data.result.length) {
34
- const termIndex = searchHistory.findIndex((_term) => term.startsWith(_term));
35
- if (termIndex > -1) {
36
- searchHistory.splice(termIndex, 1);
47
+ if (term && response.data.result.length) {
48
+ const termStr = term;
49
+ const completeTermIndex = searchHistory.findIndex((_term) => {
50
+ return _term.includes(termStr) && !(_term.replace(termStr, '')).includes(' ');
51
+ });
52
+ if (completeTermIndex > -1) {
53
+ const completeTerm = searchHistory[completeTermIndex];
54
+ searchHistory.splice(completeTermIndex, 1);
55
+ searchHistory.unshift(completeTerm);
56
+ } else {
57
+ const termIndex = searchHistory.findIndex((_term) => termStr.startsWith(_term));
58
+ if (termIndex > -1) {
59
+ searchHistory.splice(termIndex, 1);
60
+ }
61
+ searchHistory.unshift(term);
37
62
  }
38
- searchHistory.unshift(term);
39
63
  while (searchHistory.length > 20) {
40
64
  searchHistory.pop();
41
65
  }
@@ -45,13 +69,21 @@ export const search = async ({
45
69
 
46
70
  export class SearchEngine {
47
71
  fields?: readonly string[];
48
- term = ref('');
72
+ term = ref<string | null>('');
49
73
  isWithCount = ref(true);
50
74
  isWithBuckets = ref(true);
51
75
  params = shallowReactive<Record<string, any>>({});
52
76
  pageSize = ref(24);
53
77
  pageNumber = ref(1);
54
- isFetching = ref(false);
78
+ #isFetching = ref(false);
79
+ isFetching = computed(() => this.#isFetching.value);
80
+ #wasFetched = ref(false);
81
+ wasFetched = computed(() => this.#wasFetched.value);
82
+ #fetching = ref<Promise<void> | null>(null);
83
+ #fulfillFetching: (() => void) | undefined;
84
+ fetching = computed(() => this.#fetching.value);
85
+ #fetchError = ref<Error | null>(null);
86
+ fetchError = computed(() => this.#fetchError.value);
55
87
  products = shallowReactive<SearchItem[]>([]);
56
88
  meta = shallowReactive<SearchResult<'v1'>['meta']>({
57
89
  offset: 0,
@@ -70,12 +102,15 @@ export class SearchEngine {
70
102
  } = {}) {
71
103
  this.fields = fields;
72
104
  this.#search = useDebounceFn((opts) => {
73
- this.isFetching.value = true;
105
+ this.#isFetching.value = true;
74
106
  return search(opts);
75
107
  }, debounce);
76
- watch([this.term, this.params], () => {
108
+ watch([this.term, this.params, this.pageSize], () => {
77
109
  this.pageNumber.value = 1;
78
110
  });
111
+ watch(this.pageNumber, () => {
112
+ this.#wasFetched.value = false;
113
+ });
79
114
  }
80
115
 
81
116
  async fetch(term?: string) {
@@ -85,25 +120,43 @@ export class SearchEngine {
85
120
  }
86
121
  const limit = this.pageSize.value;
87
122
  const offset = limit * (this.pageNumber.value - 1);
88
- const response = await this.#search({
89
- term: this.term.value,
90
- params: {
91
- ...this.params,
92
- limit,
93
- offset,
94
- count: this.isWithCount.value || undefined,
95
- buckets: this.isWithBuckets.value || undefined,
96
- },
97
- fields: this.fields,
98
- });
123
+ if (!this.#fetching.value) {
124
+ this.#fetching.value = new Promise((resolve) => {
125
+ this.#fulfillFetching = resolve;
126
+ });
127
+ }
128
+ let response: Awaited<ReturnType<typeof search>> | null | undefined;
129
+ try {
130
+ response = await this.#search({
131
+ term: this.term.value,
132
+ params: {
133
+ ...this.params,
134
+ limit,
135
+ offset,
136
+ count: this.isWithCount.value || undefined,
137
+ buckets: this.isWithBuckets.value || undefined,
138
+ },
139
+ fields: this.fields,
140
+ });
141
+ } catch (err: any) {
142
+ if (this.#fulfillFetching) {
143
+ this.#fetchError.value = err;
144
+ this.#fulfillFetching();
145
+ }
146
+ throw err;
147
+ }
99
148
  if (response) {
100
- this.isFetching.value = false;
149
+ this.#isFetching.value = false;
150
+ this.#wasFetched.value = true;
101
151
  const { data } = response;
102
152
  if (data.meta) {
103
153
  this.products.splice(0);
104
154
  Object.assign(this.meta, data.meta);
105
155
  }
106
156
  data.result.forEach((item) => this.products.push(item));
157
+ if (this.#fulfillFetching) {
158
+ this.#fulfillFetching();
159
+ }
107
160
  }
108
161
  }
109
162
  }
@@ -1,8 +1,10 @@
1
1
  import type { Products, Carts, SearchItem } from '@cloudcommerce/types';
2
+ import { watch } from 'vue';
2
3
  import { watchOnce } from '@vueuse/core';
3
4
  import { price as getPrice, name as getName } from '@ecomplus/utils';
4
5
  import { customer, isLogged } from '@@sf/state/customer-session';
5
6
  import { cartEvents } from '@@sf/state/shopping-cart';
7
+ import { searchHistory } from '@@sf/state/search-engine';
6
8
  import utm from '@@sf/scripts/session-utm';
7
9
 
8
10
  export const trackingIds: {
@@ -98,16 +100,15 @@ export const emitGtagEvent = async <N extends Gtag.EventNames = 'view_item'>(
98
100
  default:
99
101
  }
100
102
  } else {
101
- switch (window.location.pathname) {
102
- case '/':
103
- defaultItemsList = 'Home';
104
- break;
105
- case '/s':
106
- case '/search':
107
- case '/busca':
108
- defaultItemsList = 'Search results';
109
- break;
110
- default:
103
+ const { pathname } = window.location;
104
+ if (pathname === '/') {
105
+ defaultItemsList = 'Home';
106
+ } else if (
107
+ /^\/s\/?/.test(pathname)
108
+ || pathname === '/search'
109
+ || pathname === '/busca'
110
+ ) {
111
+ defaultItemsList = 'Search results';
111
112
  }
112
113
  }
113
114
  if (pageViewState.resolve) {
@@ -218,17 +219,6 @@ export const getGtagItem = (product: Partial<Products> | SearchItem | CartItem)
218
219
 
219
220
  export const useAnalytics = () => {
220
221
  document.addEventListener('astro:beforeload', resetPageViewPromise);
221
- if (isLogged.value) {
222
- emitGtagEvent('login', {});
223
- } else {
224
- watchOnce(isLogged, () => emitGtagEvent('login', {}));
225
- }
226
- cartEvents.on('*', (evName, cartItem) => {
227
- emitGtagEvent(
228
- evName === 'addCartItem' ? 'add_to_cart' : 'remove_from_cart',
229
- { items: [getGtagItem(cartItem)] },
230
- );
231
- });
232
222
  const {
233
223
  gtag,
234
224
  GTAG_TAG_ID,
@@ -279,6 +269,31 @@ export const useAnalytics = () => {
279
269
  }
280
270
  storage.setItem(`analytics_${key}`, trackingIds[key]);
281
271
  });
272
+ if (isLogged.value) {
273
+ emitGtagEvent('login', {});
274
+ } else {
275
+ watchOnce(isLogged, () => emitGtagEvent('login', {}));
276
+ }
277
+ cartEvents.on('*', (evName, cartItem) => {
278
+ emitGtagEvent(
279
+ evName === 'addCartItem' ? 'add_to_cart' : 'remove_from_cart',
280
+ { items: [getGtagItem(cartItem)] },
281
+ );
282
+ });
283
+ watch(searchHistory, () => {
284
+ const term = searchHistory[0];
285
+ if (term) {
286
+ emitGtagEvent('search', { search_term: term });
287
+ }
288
+ });
289
+ if (window.location.pathname === '/s') {
290
+ setTimeout(() => {
291
+ const urlSearchQ = new URLSearchParams(window.location.search).get('q');
292
+ if (urlSearchQ && typeof urlSearchQ === 'string') {
293
+ emitGtagEvent('view_search_results', { search_term: urlSearchQ });
294
+ }
295
+ }, 300);
296
+ }
282
297
  };
283
298
 
284
299
  export default useAnalytics;
@@ -2,7 +2,7 @@
2
2
  "name": "@cloudcommerce/test-base",
3
3
  "private": true,
4
4
  "type": "module",
5
- "version": "0.37.0",
5
+ "version": "0.38.0",
6
6
  "description": "E-Com Plus Cloud Commerce basic setup for testing",
7
7
  "main": "lib/index.js",
8
8
  "repository": {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/types",
3
3
  "type": "module",
4
- "version": "0.37.0",
4
+ "version": "0.38.0",
5
5
  "description": "E-Com Plus Cloud Commerce reusable type definitions",
6
6
  "main": "index.ts",
7
7
  "repository": {
@@ -1,30 +0,0 @@
1
- {
2
- "postCreateCommand": "npm i && npm i --prefix=functions/ssr",
3
- "waitFor": "postCreateCommand",
4
- "portsAttributes": {
5
- "3000": {
6
- "label": "Application",
7
- "onAutoForward": "openPreview"
8
- }
9
- },
10
- "forwardPorts": [
11
- 3000
12
- ],
13
- "postAttachCommand": {
14
- "Server": "npm run dev"
15
- },
16
- "customizations": {
17
- "codespaces": {
18
- "openFiles": [
19
- "functions/ssr/src/main/Home.astro"
20
- ]
21
- },
22
- "vscode": {
23
- "extensions": [
24
- "astro-build.astro-vscode",
25
- "vue.volar",
26
- "bradlc.vscode-tailwindcss"
27
- ]
28
- }
29
- }
30
- }
@@ -1,13 +0,0 @@
1
- # editorconfig.org
2
- root = true
3
-
4
- [*]
5
- indent_style = space
6
- indent_size = 2
7
- end_of_line = lf
8
- charset = utf-8
9
- trim_trailing_whitespace = true
10
- insert_final_newline = true
11
-
12
- [*.md]
13
- trim_trailing_whitespace = false
@@ -1,3 +0,0 @@
1
- module.exports = {
2
- extends: './node_modules/@cloudcommerce/eslint/base.eslintrc.cjs',
3
- };
@@ -1,5 +0,0 @@
1
- {
2
- "projects": {
3
- "default": "ecom2monocard"
4
- }
5
- }
@@ -1,5 +0,0 @@
1
- {
2
- "extends": [
3
- "github>ecomplus/cloud-commerce:store.renovate"
4
- ]
5
- }
@@ -1,37 +0,0 @@
1
- name: Build and deploy
2
-
3
- on:
4
- push:
5
- branches:
6
- - main
7
- paths:
8
- - 'functions/**'
9
- - 'package-lock.json'
10
- - '.firebaserc'
11
- - '.ecomplus/**'
12
- - '.github/build-and-deploy'
13
- - '.github/workflows/build-and-deploy.yml'
14
- pull_request:
15
- paths:
16
- - 'functions/ssr/**'
17
- - '.firebaserc'
18
- - 'package-lock.json'
19
-
20
- jobs:
21
- build-and-deploy:
22
- name: Cloud Commerce build and deploy
23
- runs-on: ubuntu-latest
24
- if: |
25
- github.event.head_commit.message != 'Initial commit' &&
26
- !contains(github.event.head_commit.message, '[skip ci]')
27
- steps:
28
- - uses: actions/checkout@v3
29
- with:
30
- fetch-depth: 0
31
- - uses: ecomplus/cloud-commerce@main
32
- with:
33
- github-token: ${{ secrets.GITHUB_TOKEN }}
34
- firebase-service-account: ${{ secrets.FIREBASE_SERVICE_ACCOUNT }}
35
- ecom-authentication-id: ${{ secrets.ECOM_AUTHENTICATION_ID }}
36
- ecom-api-key: ${{ secrets.ECOM_API_KEY }}
37
- ecom-store-id: ${{ secrets.ECOM_STORE_ID }}
@@ -1,23 +0,0 @@
1
- name: Compress images
2
-
3
- on:
4
- pull_request:
5
- paths:
6
- - '**.jpg'
7
- - '**.jpeg'
8
- - '**.png'
9
- - '**.webp'
10
- - 'package-lock.json'
11
-
12
- jobs:
13
- build:
14
- # Only run on Pull Requests within the same repository, and not from forks.
15
- if: github.event.pull_request.head.repo.full_name == github.repository
16
- name: calibreapp/image-actions
17
- runs-on: ubuntu-latest
18
- steps:
19
- - uses: actions/checkout@v3
20
- - name: Compress images
21
- uses: calibreapp/image-actions@main
22
- with:
23
- githubToken: ${{ secrets.GITHUB_TOKEN }}
@@ -1,12 +0,0 @@
1
- tasks:
2
- - init: npm i && npm i --prefix=functions/ssr
3
- command: npm run dev
4
- vscode:
5
- extensions:
6
- - astro-build.astro-vscode
7
- - vue.volar
8
- - bradlc.vscode-tailwindcss
9
- ports:
10
- - port: 3000
11
- onOpen: open-preview
12
- visibility: public
@@ -1,24 +0,0 @@
1
- {pkgs}: {
2
- channel = "stable-23.05"; # "stable-23.05" or "unstable"
3
- packages = [
4
- pkgs.nodejs_18
5
- pkgs.nodePackages.firebase-tools
6
- ];
7
- idx.extensions = [
8
- "vue.volar"
9
- # Other recommended extensions crashing launch
10
- # "dbaeumer.vscode-eslint",
11
- # "astro-build.astro-vscode",
12
- # "bradlc.vscode-tailwindcss",
13
- ];
14
- idx.previews = {
15
- enable = true;
16
- previews = [
17
- {
18
- command = ["npm" "run" "dev" "--" "--port" "$PORT" "--host"];
19
- manager = "web";
20
- id = "web";
21
- }
22
- ];
23
- };
24
- }
@@ -1 +0,0 @@
1
- 18
@@ -1,8 +0,0 @@
1
- {
2
- "recommendations": [
3
- "dbaeumer.vscode-eslint",
4
- "astro-build.astro-vscode",
5
- "vue.volar",
6
- "bradlc.vscode-tailwindcss"
7
- ]
8
- }
@@ -1,11 +0,0 @@
1
- {
2
- "version": "0.2.0",
3
- "configurations": [
4
- {
5
- "command": "./node_modules/.bin/cloudcommerce dev",
6
- "name": "Development server",
7
- "request": "launch",
8
- "type": "node-terminal"
9
- }
10
- ]
11
- }
@@ -1,13 +0,0 @@
1
- {
2
- "editor.quickSuggestions": {
3
- "strings": true
4
- },
5
- "editor.codeActionsOnSave": {
6
- "source.fixAll.eslint": true
7
- },
8
- "files.associations": {
9
- "*.css": "tailwindcss"
10
- },
11
- "css.lint.unknownAtRules": "ignore",
12
- "git.autofetch": true
13
- }