cloudcommerce 0.26.7 → 0.28.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 (248) hide show
  1. package/.github/workflows/test-apps.yml +2 -2
  2. package/.gitmodules +0 -3
  3. package/.vscode/settings.json +3 -1
  4. package/CHANGELOG.md +51 -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/content/layout.json +13 -13
  8. package/ecomplus-stores/barra-doce/functions/ssr/content/pages/home.json +10 -10
  9. package/ecomplus-stores/barra-doce/functions/ssr/content/pages/products.json +17 -0
  10. package/ecomplus-stores/barra-doce/functions/ssr/content/settings.json +8 -8
  11. package/ecomplus-stores/barra-doce/functions/ssr/package.json +6 -6
  12. package/ecomplus-stores/barra-doce/functions/ssr/src/components/AccountMenu.vue +11 -11
  13. package/ecomplus-stores/barra-doce/functions/ssr/src/components/ShopFooter.vue +24 -24
  14. package/ecomplus-stores/barra-doce/functions/ssr/src/layouts/PageFooter.astro +4 -4
  15. package/ecomplus-stores/barra-doce/functions/with-apps/package.json +3 -3
  16. package/ecomplus-stores/barra-doce/package.json +2 -2
  17. package/ecomplus-stores/monocard/functions/many/package.json +3 -3
  18. package/ecomplus-stores/monocard/functions/ssr/content/layout.json +11 -11
  19. package/ecomplus-stores/monocard/functions/ssr/content/pages/home.json +16 -16
  20. package/ecomplus-stores/monocard/functions/ssr/content/pages/products.json +2 -4
  21. package/ecomplus-stores/monocard/functions/ssr/content/settings.json +11 -11
  22. package/ecomplus-stores/monocard/functions/ssr/package.json +6 -6
  23. package/ecomplus-stores/monocard/functions/ssr/src/components/AccountMenu.vue +1 -1
  24. package/ecomplus-stores/monocard/functions/ssr/src/components/DocDescription.vue +33 -0
  25. package/ecomplus-stores/monocard/functions/ssr/src/components/FeatureTabs.vue +3 -3
  26. package/ecomplus-stores/monocard/functions/ssr/src/components/ShopFooter.vue +3 -3
  27. package/ecomplus-stores/monocard/functions/ssr/src/components/ShopHeader.vue +5 -13
  28. package/ecomplus-stores/monocard/functions/ssr/src/layouts/PageFooter.astro +2 -2
  29. package/ecomplus-stores/monocard/functions/ssr/src/main/Home.astro +1 -1
  30. package/ecomplus-stores/monocard/functions/ssr/src/main/Sections.astro +1 -1
  31. package/ecomplus-stores/monocard/functions/with-apps/package.json +3 -3
  32. package/ecomplus-stores/monocard/package.json +2 -2
  33. package/package.json +6 -6
  34. package/packages/api/package.json +1 -1
  35. package/packages/apps/affilate-program/package.json +2 -2
  36. package/packages/apps/correios/package.json +3 -4
  37. package/packages/apps/custom-payment/package.json +1 -1
  38. package/packages/apps/custom-shipping/package.json +1 -1
  39. package/packages/apps/datafrete/package.json +3 -3
  40. package/packages/apps/discounts/package.json +1 -1
  41. package/packages/apps/emails/lib/functios-lib/utils.js +1 -1
  42. package/packages/apps/emails/lib/functios-lib/utils.js.map +1 -1
  43. package/packages/apps/emails/package.json +2 -2
  44. package/packages/apps/emails/src/functios-lib/utils.ts +1 -1
  45. package/packages/apps/fb-conversions/package.json +3 -3
  46. package/packages/apps/flash-courier/package.json +2 -2
  47. package/packages/apps/frenet/package.json +3 -3
  48. package/packages/apps/galaxpay/package.json +3 -3
  49. package/packages/apps/google-analytics/package.json +3 -3
  50. package/packages/apps/jadlog/package.json +2 -2
  51. package/packages/apps/loyalty-points/lib/functions-lib/cron-add-points.d.ts +2 -0
  52. package/packages/apps/loyalty-points/lib/functions-lib/cron-add-points.js +98 -0
  53. package/packages/apps/loyalty-points/lib/functions-lib/cron-add-points.js.map +1 -0
  54. package/packages/apps/loyalty-points/lib/functions-lib/handle-loyalty-points-event.js +59 -23
  55. package/packages/apps/loyalty-points/lib/functions-lib/handle-loyalty-points-event.js.map +1 -1
  56. package/packages/apps/loyalty-points/lib/loyalty-create-transaction.js +9 -4
  57. package/packages/apps/loyalty-points/lib/loyalty-create-transaction.js.map +1 -1
  58. package/packages/apps/loyalty-points/lib/loyalty-list-payments.js +7 -2
  59. package/packages/apps/loyalty-points/lib/loyalty-list-payments.js.map +1 -1
  60. package/packages/apps/loyalty-points/lib/loyalty-points-events.d.ts +3 -1
  61. package/packages/apps/loyalty-points/lib/loyalty-points-events.js +9 -0
  62. package/packages/apps/loyalty-points/lib/loyalty-points-events.js.map +1 -1
  63. package/packages/apps/loyalty-points/package.json +3 -2
  64. package/packages/apps/loyalty-points/src/functions-lib/cron-add-points.ts +104 -0
  65. package/packages/apps/loyalty-points/src/functions-lib/handle-loyalty-points-event.ts +67 -25
  66. package/packages/apps/loyalty-points/src/loyalty-create-transaction.ts +11 -4
  67. package/packages/apps/loyalty-points/src/loyalty-list-payments.ts +9 -2
  68. package/packages/apps/loyalty-points/src/loyalty-points-events.ts +12 -1
  69. package/packages/apps/melhor-envio/package.json +3 -3
  70. package/packages/apps/mercadopago/assets/onload-expression.js +5 -1
  71. package/packages/apps/mercadopago/assets/onload-expression.min.js +1 -1
  72. package/packages/apps/mercadopago/lib/mp-create-transaction.js +16 -6
  73. package/packages/apps/mercadopago/lib/mp-create-transaction.js.map +1 -1
  74. package/packages/apps/mercadopago/package.json +3 -3
  75. package/packages/apps/mercadopago/src/mp-create-transaction.ts +19 -7
  76. package/packages/apps/pagarme/package.json +3 -3
  77. package/packages/apps/paghiper/package.json +3 -3
  78. package/packages/apps/pix/package.json +3 -3
  79. package/packages/apps/tiny-erp/lib/integration/export-order-to-tiny.js +22 -0
  80. package/packages/apps/tiny-erp/lib/integration/export-order-to-tiny.js.map +1 -1
  81. package/packages/apps/tiny-erp/lib/integration/helpers/format-tiny-date.js +2 -2
  82. package/packages/apps/tiny-erp/lib/integration/helpers/format-tiny-date.js.map +1 -1
  83. package/packages/apps/tiny-erp/lib/integration/import-order-from-tiny.js +7 -1
  84. package/packages/apps/tiny-erp/lib/integration/import-order-from-tiny.js.map +1 -1
  85. package/packages/apps/tiny-erp/lib/integration/import-product-from-tiny.js +14 -5
  86. package/packages/apps/tiny-erp/lib/integration/import-product-from-tiny.js.map +1 -1
  87. package/packages/apps/tiny-erp/lib/integration/parsers/order-from-tiny.js +9 -1
  88. package/packages/apps/tiny-erp/lib/integration/parsers/order-from-tiny.js.map +1 -1
  89. package/packages/apps/tiny-erp/lib/integration/parsers/order-to-tiny.js +8 -6
  90. package/packages/apps/tiny-erp/lib/integration/parsers/order-to-tiny.js.map +1 -1
  91. package/packages/apps/tiny-erp/lib/integration/parsers/product-from-tiny.js +118 -38
  92. package/packages/apps/tiny-erp/lib/integration/parsers/product-from-tiny.js.map +1 -1
  93. package/packages/apps/tiny-erp/lib/integration/parsers/product-to-tiny.js +8 -0
  94. package/packages/apps/tiny-erp/lib/integration/parsers/product-to-tiny.js.map +1 -1
  95. package/packages/apps/tiny-erp/package.json +3 -3
  96. package/packages/apps/tiny-erp/src/integration/export-order-to-tiny.ts +24 -0
  97. package/packages/apps/tiny-erp/src/integration/helpers/format-tiny-date.ts +2 -2
  98. package/packages/apps/tiny-erp/src/integration/import-order-from-tiny.ts +8 -1
  99. package/packages/apps/tiny-erp/src/integration/import-product-from-tiny.ts +17 -5
  100. package/packages/apps/tiny-erp/src/integration/parsers/order-from-tiny.ts +13 -1
  101. package/packages/apps/tiny-erp/src/integration/parsers/order-to-tiny.ts +11 -6
  102. package/packages/apps/tiny-erp/src/integration/parsers/product-from-tiny.ts +144 -41
  103. package/packages/apps/tiny-erp/src/integration/parsers/product-to-tiny.ts +10 -0
  104. package/packages/apps/webhooks/package.json +3 -3
  105. package/packages/cli/package.json +1 -1
  106. package/packages/config/lib/config.js +2 -2
  107. package/packages/config/lib/config.js.map +1 -1
  108. package/packages/config/package.json +1 -1
  109. package/packages/config/src/config.ts +2 -2
  110. package/packages/emails/package.json +4 -4
  111. package/packages/eslint/base.eslintrc.cjs +3 -0
  112. package/packages/eslint/package.json +5 -4
  113. package/packages/eslint/storefront.eslintrc.cjs +8 -1
  114. package/packages/events/package.json +2 -2
  115. package/packages/feeds/package.json +1 -1
  116. package/packages/firebase/package.json +2 -2
  117. package/packages/i18n/package.json +1 -1
  118. package/packages/modules/package.json +3 -3
  119. package/packages/passport/package.json +2 -2
  120. package/packages/ssr/package.json +3 -3
  121. package/packages/storefront/.auto-imports.d.ts +65 -0
  122. package/packages/storefront/astro.config.mjs +24 -1
  123. package/packages/storefront/client.d.ts +1 -0
  124. package/packages/storefront/config/astro/context-directive.mjs +21 -0
  125. package/packages/storefront/config/astro/index.d.ts +8 -0
  126. package/packages/storefront/config/storefront.cms.js +2 -2
  127. package/packages/storefront/config/storefront.tailwind.cjs +0 -1
  128. package/packages/storefront/package.json +4 -3
  129. package/packages/storefront/server.d.ts +1 -1
  130. package/packages/storefront/src/lib/$storefront.d.ts +8 -8
  131. package/packages/storefront/src/lib/assets/base.css +5 -0
  132. package/packages/storefront/src/lib/components/Carousel.vue +93 -72
  133. package/packages/storefront/src/lib/components/CarouselControl.vue +13 -7
  134. package/packages/storefront/src/lib/components/ContentClearfix.vue +17 -0
  135. package/packages/storefront/src/lib/components/Drawer.vue +2 -2
  136. package/packages/storefront/src/lib/components/PaymentMethodFlag.vue +2 -2
  137. package/packages/storefront/src/lib/components/QuantitySelector.vue +4 -4
  138. package/packages/storefront/src/lib/components/QuantitySelectorControl.vue +2 -2
  139. package/packages/storefront/src/lib/components/ViewTransitions.astro +409 -0
  140. package/packages/storefront/src/lib/components/globals/AImg.vue +2 -1
  141. package/packages/storefront/src/lib/composables/use-pitch-bar.ts +2 -2
  142. package/packages/storefront/src/lib/content.d.ts +5 -5
  143. package/packages/storefront/src/lib/layouts/Base.astro +4 -4
  144. package/packages/storefront/src/lib/layouts/BaseBody.astro +0 -2
  145. package/packages/storefront/src/lib/layouts/BaseHead.astro +32 -14
  146. package/packages/storefront/src/lib/layouts/use-page-header.ts +9 -4
  147. package/packages/storefront/src/lib/layouts/use-page-main.ts +13 -33
  148. package/packages/test-base/package.json +1 -1
  149. package/packages/types/index.ts +14 -14
  150. package/packages/types/package.json +1 -1
  151. package/ecomplus-stores/iluminim/.devcontainer/devcontainer.json +0 -30
  152. package/ecomplus-stores/iluminim/.editorconfig +0 -13
  153. package/ecomplus-stores/iluminim/.eslintrc.cjs +0 -3
  154. package/ecomplus-stores/iluminim/.firebaserc +0 -5
  155. package/ecomplus-stores/iluminim/.github/renovate.json +0 -5
  156. package/ecomplus-stores/iluminim/.github/workflows/build-and-deploy.yml +0 -36
  157. package/ecomplus-stores/iluminim/.github/workflows/calibreapp-image-actions.yml +0 -23
  158. package/ecomplus-stores/iluminim/.gitpod.yml +0 -12
  159. package/ecomplus-stores/iluminim/.idx/dev.nix +0 -24
  160. package/ecomplus-stores/iluminim/.nvmrc +0 -1
  161. package/ecomplus-stores/iluminim/.vscode/extensions.json +0 -8
  162. package/ecomplus-stores/iluminim/.vscode/launch.json +0 -11
  163. package/ecomplus-stores/iluminim/.vscode/settings.json +0 -10
  164. package/ecomplus-stores/iluminim/README.md +0 -31
  165. package/ecomplus-stores/iluminim/SETUP.md +0 -117
  166. package/ecomplus-stores/iluminim/SETUP.pt-BR.md +0 -117
  167. package/ecomplus-stores/iluminim/functions/config.json +0 -3
  168. package/ecomplus-stores/iluminim/functions/example.env +0 -10
  169. package/ecomplus-stores/iluminim/functions/many/index.js +0 -14
  170. package/ecomplus-stores/iluminim/functions/many/package.json +0 -22
  171. package/ecomplus-stores/iluminim/functions/ssr/.eslintrc.cjs +0 -6
  172. package/ecomplus-stores/iluminim/functions/ssr/astro.config.mjs +0 -4
  173. package/ecomplus-stores/iluminim/functions/ssr/content/blog/.gitkeep +0 -0
  174. package/ecomplus-stores/iluminim/functions/ssr/content/extra-pages/contato.json +0 -11
  175. package/ecomplus-stores/iluminim/functions/ssr/content/extra-pages/terms.json +0 -11
  176. package/ecomplus-stores/iluminim/functions/ssr/content/extra-pages/trocas.json +0 -11
  177. package/ecomplus-stores/iluminim/functions/ssr/content/layout.json +0 -57
  178. package/ecomplus-stores/iluminim/functions/ssr/content/pages/home.json +0 -70
  179. package/ecomplus-stores/iluminim/functions/ssr/content/settings.json +0 -65
  180. package/ecomplus-stores/iluminim/functions/ssr/index.js +0 -18
  181. package/ecomplus-stores/iluminim/functions/ssr/package.json +0 -31
  182. package/ecomplus-stores/iluminim/functions/ssr/public/admin/.gitkeep +0 -2
  183. package/ecomplus-stores/iluminim/functions/ssr/public/assets/cms-preview.css +0 -274
  184. package/ecomplus-stores/iluminim/functions/ssr/public/assets/cms.css +0 -114
  185. package/ecomplus-stores/iluminim/functions/ssr/public/assets/cvv.png +0 -0
  186. package/ecomplus-stores/iluminim/functions/ssr/public/assets/img-placeholder.png +0 -0
  187. package/ecomplus-stores/iluminim/functions/ssr/public/assets/payments.png +0 -0
  188. package/ecomplus-stores/iluminim/functions/ssr/public/assets/ssl-safe.png +0 -0
  189. package/ecomplus-stores/iluminim/functions/ssr/public/img/icon.png +0 -0
  190. package/ecomplus-stores/iluminim/functions/ssr/public/img/large-icon.png +0 -0
  191. package/ecomplus-stores/iluminim/functions/ssr/public/img/uploads/banner-chamada-desktop-9x81zmd91q.webp +0 -0
  192. package/ecomplus-stores/iluminim/functions/ssr/public/img/uploads/banner2.webp +0 -0
  193. package/ecomplus-stores/iluminim/functions/ssr/public/img/uploads/chamada-mobile-q1c6om6jx4.webp +0 -0
  194. package/ecomplus-stores/iluminim/functions/ssr/public/img/uploads/ecom-icon.png +0 -0
  195. package/ecomplus-stores/iluminim/functions/ssr/public/img/uploads/headphone.webp +0 -0
  196. package/ecomplus-stores/iluminim/functions/ssr/public/img/uploads/logo.webp +0 -0
  197. package/ecomplus-stores/iluminim/functions/ssr/public/img/uploads/og-image.png +0 -0
  198. package/ecomplus-stores/iluminim/functions/ssr/public/img/uploads/passion.webp +0 -0
  199. package/ecomplus-stores/iluminim/functions/ssr/public/img/uploads/rect8589.png +0 -0
  200. package/ecomplus-stores/iluminim/functions/ssr/public/img/uploads/rect859.png +0 -0
  201. package/ecomplus-stores/iluminim/functions/ssr/public/img/uploads/rect89.webp +0 -0
  202. package/ecomplus-stores/iluminim/functions/ssr/public/robots.txt +0 -6
  203. package/ecomplus-stores/iluminim/functions/ssr/scripts/build.sh +0 -14
  204. package/ecomplus-stores/iluminim/functions/ssr/src/assets/style.css +0 -65
  205. package/ecomplus-stores/iluminim/functions/ssr/src/components/AccountMenu.vue +0 -95
  206. package/ecomplus-stores/iluminim/functions/ssr/src/components/Banner.vue +0 -57
  207. package/ecomplus-stores/iluminim/functions/ssr/src/components/BannersGrid.astro +0 -25
  208. package/ecomplus-stores/iluminim/functions/ssr/src/components/CartItem.vue +0 -64
  209. package/ecomplus-stores/iluminim/functions/ssr/src/components/CartSidebar.vue +0 -66
  210. package/ecomplus-stores/iluminim/functions/ssr/src/components/Countdown.vue +0 -79
  211. package/ecomplus-stores/iluminim/functions/ssr/src/components/HeroSlider.vue +0 -52
  212. package/ecomplus-stores/iluminim/functions/ssr/src/components/PitchBar.vue +0 -56
  213. package/ecomplus-stores/iluminim/functions/ssr/src/components/Prices.vue +0 -95
  214. package/ecomplus-stores/iluminim/functions/ssr/src/components/ProductCard.vue +0 -117
  215. package/ecomplus-stores/iluminim/functions/ssr/src/components/ProductShelf.vue +0 -57
  216. package/ecomplus-stores/iluminim/functions/ssr/src/components/ProductsCountdown.vue +0 -20
  217. package/ecomplus-stores/iluminim/functions/ssr/src/components/SearchModal.vue +0 -6
  218. package/ecomplus-stores/iluminim/functions/ssr/src/components/ShopFooter.vue +0 -149
  219. package/ecomplus-stores/iluminim/functions/ssr/src/components/ShopHeader.vue +0 -158
  220. package/ecomplus-stores/iluminim/functions/ssr/src/components/ShopHeaderMenu.vue +0 -58
  221. package/ecomplus-stores/iluminim/functions/ssr/src/components/ShopHeaderSubmenu.vue +0 -88
  222. package/ecomplus-stores/iluminim/functions/ssr/src/components/ShopSidenav.vue +0 -61
  223. package/ecomplus-stores/iluminim/functions/ssr/src/components/ShopSidenavCategory.vue +0 -80
  224. package/ecomplus-stores/iluminim/functions/ssr/src/env.d.ts +0 -13
  225. package/ecomplus-stores/iluminim/functions/ssr/src/layouts/Base.astro +0 -16
  226. package/ecomplus-stores/iluminim/functions/ssr/src/layouts/Checkout.astro +0 -0
  227. package/ecomplus-stores/iluminim/functions/ssr/src/layouts/PageFooter.astro +0 -68
  228. package/ecomplus-stores/iluminim/functions/ssr/src/layouts/PageHeader.astro +0 -42
  229. package/ecomplus-stores/iluminim/functions/ssr/src/main/Fallback.astro +0 -10
  230. package/ecomplus-stores/iluminim/functions/ssr/src/main/Home.astro +0 -49
  231. package/ecomplus-stores/iluminim/functions/ssr/src/main/Sections.astro +0 -42
  232. package/ecomplus-stores/iluminim/functions/ssr/src/main/Wildcard.astro +0 -18
  233. package/ecomplus-stores/iluminim/functions/ssr/src/pages/[...slug].astro +0 -40
  234. package/ecomplus-stores/iluminim/functions/ssr/src/pages/_vue.ts +0 -3
  235. package/ecomplus-stores/iluminim/functions/ssr/src/pages/app/account.astro +0 -0
  236. package/ecomplus-stores/iluminim/functions/ssr/src/pages/app/index.astro +0 -0
  237. package/ecomplus-stores/iluminim/functions/ssr/src/pages/index.astro +0 -37
  238. package/ecomplus-stores/iluminim/functions/ssr/src/pages/~fallback.astro +0 -25
  239. package/ecomplus-stores/iluminim/functions/ssr/src/scripts/InlineScripts.astro +0 -10
  240. package/ecomplus-stores/iluminim/functions/ssr/tailwind.config.cjs +0 -13
  241. package/ecomplus-stores/iluminim/functions/ssr/tsconfig.json +0 -12
  242. package/ecomplus-stores/iluminim/functions/ssr/uno.config.cjs +0 -5
  243. package/ecomplus-stores/iluminim/functions/with-apps/index.js +0 -12
  244. package/ecomplus-stores/iluminim/functions/with-apps/package.json +0 -22
  245. package/ecomplus-stores/iluminim/package.json +0 -31
  246. package/ecomplus-stores/iluminim/scripts/install.sh +0 -24
  247. package/ecomplus-stores/monocard/functions/ssr/src/components/DocDescription.astro +0 -30
  248. package/packages/storefront/src/lib/components/ContentClearfix.astro +0 -15
@@ -1,158 +0,0 @@
1
- <template>
2
- <header
3
- ref="header"
4
- class="relative top-0 z-50 transition-colors"
5
- :class="[
6
- isSticky && !isSidenavOpen ? 'bg-white/80' : 'bg-white',
7
- isSticky ? 'backdrop-blur-md shadow py-2 md:py-3' : 'py-3 sm:py-4 md:py-5',
8
- ]"
9
- >
10
- <div class="w-screen lg:w-[calc(100vw-1rem)] xl:max-w-[82rem] 2xl:max-w-[85rem]
11
- mx-auto px-1 sm:pl-2 sm:pr-2.5 lg:px-1
12
- flex md:grid grid-flow-col grid-cols-3 lg:grid-cols-none lg:auto-cols-max
13
- justify-between items-center">
14
- <div class="basis-1/4 lg:hidden">
15
- <button
16
- class="px-2 my-1"
17
- :aria-label="$t.i19toggleMenu"
18
- @click="isSidenavOpen = !isSidenavOpen"
19
- >
20
- <i
21
- class="text-base-500 text-3xl"
22
- :class="isSidenavOpen ? 'i-close' : 'i-bars-3-bottom-left'"
23
- ></i>
24
- </button>
25
- </div>
26
- <slot name="logo" />
27
- <ShopHeaderMenu class="hidden lg:block" v-bind="{ inlineMenuTrees }" />
28
- <div class="basis-1/4 px-2
29
- flex justify-end items-center gap-3 lg:gap-4 text-base-800">
30
- <button
31
- :aria-label="$t.i19searchProducts"
32
- @click="isSearchOpen = !isSearchOpen"
33
- >
34
- <i class="i-magnifying-glass w-7 h-7
35
- hover:text-primary hover:scale-110 active:scale-125"></i>
36
- </button>
37
- <AccountMenu class="hidden sm:block">
38
- <template #button="{ open }">
39
- <i
40
- class="i-user-circle w-7 h-7
41
- hover:text-primary hover:scale-110 active:scale-125"
42
- :class="open ? 'text-black scale-110' : null"
43
- ></i>
44
- </template>
45
- </AccountMenu>
46
- <button
47
- :aria-label="$t.i19openCart"
48
- @click="isCartOpen = !isCartOpen"
49
- class="relative group"
50
- >
51
- <i class="i-carbon:shopping-cart w-7 h-7 group-hover:text-primary
52
- text-secondary-900 group-hover:scale-110 group-active:scale-125"></i>
53
- <span
54
- v-if="delayedTotalItems"
55
- class="ui-badge-pill-sm absolute -top-1 -right-1.5"
56
- >
57
- {{ delayedTotalItems }}
58
- </span>
59
- </button>
60
- </div>
61
- </div>
62
- <Drawer
63
- v-model="isSidenavOpen"
64
- :has-close-button="false"
65
- position="absolute"
66
- :class="isSticky ? 'mt-2 md:mt-3' : 'mt-3 sm:mt-4 md:mt-5'"
67
- :style="{ height: `calc(100vh - ${positionY}px + .5rem)` }"
68
- >
69
- <ShopSidenav class="bg-white pt-6" v-bind="{ categoryTrees }" />
70
- </Drawer>
71
- <Drawer
72
- v-model="isSearchOpen"
73
- :has-close-button="false"
74
- placement="top"
75
- >
76
- <Suspense>
77
- <SearchModal v-if="isSearchOpenOnce" />
78
- <template #fallback>
79
- <div class="container mx-auto">
80
- <Skeleton class="p-6" is-large />
81
- </div>
82
- </template>
83
- </Suspense>
84
- </Drawer>
85
- <Teleport v-if="isMounted" to="#teleported-overlap">
86
- <Drawer
87
- v-model="isCartOpen"
88
- placement="end"
89
- backdrop-target="#teleported-overlap"
90
- >
91
- <Suspense>
92
- <CartSidebar v-if="isCartOpenOnce" @close="isCartOpen = false" />
93
- <template #fallback>
94
- <Skeleton class="pt-16 px-6" is-bold />
95
- </template>
96
- </Suspense>
97
- </Drawer>
98
- </Teleport>
99
- </header>
100
- </template>
101
-
102
- <script setup lang="ts">
103
- import {
104
- ref,
105
- watch,
106
- onMounted,
107
- defineAsyncComponent,
108
- } from 'vue';
109
- import { watchOnce } from '@vueuse/core';
110
- import { totalItems } from '@@sf/state/shopping-cart';
111
- import {
112
- type Props as UseShopHeaderProps,
113
- useShopHeader,
114
- } from '@@sf/composables/use-shop-header';
115
- import Drawer from '@@sf/components/Drawer.vue';
116
- import ShopSidenav from '~/components/ShopSidenav.vue';
117
- import ShopHeaderMenu from '~/components/ShopHeaderMenu.vue';
118
- import AccountMenu from '~/components/AccountMenu.vue';
119
-
120
- export interface Props extends Omit<UseShopHeaderProps, 'header'> {}
121
-
122
- const SearchModal = defineAsyncComponent(() => import('~/components/SearchModal.vue'));
123
- const CartSidebar = defineAsyncComponent(() => import('~/components/CartSidebar.vue'));
124
- const props = defineProps<Props>();
125
- const header = ref<HTMLElement | null>(null);
126
- const {
127
- isSticky,
128
- positionY,
129
- categoryTrees,
130
- inlineMenuTrees,
131
- } = useShopHeader({ ...props, header });
132
- const isSidenavOpen = ref(false);
133
- const isSearchOpen = ref(false);
134
- const isSearchOpenOnce = ref(false);
135
- watchOnce(isSearchOpen, () => {
136
- isSearchOpenOnce.value = true;
137
- });
138
- const isCartOpen = ref(false);
139
- const isCartOpenOnce = ref(false);
140
- watchOnce(isCartOpen, () => {
141
- isCartOpenOnce.value = true;
142
- });
143
- const isMounted = ref(false);
144
- const delayedTotalItems = ref(0);
145
- onMounted(() => {
146
- isMounted.value = true;
147
- watch(totalItems, (newTotalItems, prevTotalItems) => {
148
- if (typeof prevTotalItems === 'number') {
149
- if (prevTotalItems < newTotalItems) {
150
- isCartOpen.value = true;
151
- } else if (prevTotalItems && !newTotalItems) {
152
- isCartOpen.value = false;
153
- }
154
- }
155
- delayedTotalItems.value = newTotalItems;
156
- }, { immediate: true });
157
- });
158
- </script>
@@ -1,58 +0,0 @@
1
- <template>
2
- <nav>
3
- <ul
4
- class="flex gap-4 xl:gap-5 text-base-700"
5
- :class="inlineMenuTrees.length < 7 ? 'text-base' : 'text-sm'"
6
- >
7
- <li v-for="(categoryTree, i) in inlineMenuTrees" :key="i">
8
- <ShopHeaderSubmenu
9
- v-if="categoryTree.subcategories.length"
10
- :category-tree="categoryTree"
11
- >
12
- <template #button="{ open }">
13
- <span class="hover:text-primary group">
14
- <h3
15
- class="group-hover:underline inline"
16
- :class="[
17
- inlineMenuTrees.length < 7 ? 'decoration-2' : null,
18
- open ? 'underline' : null,
19
- ]"
20
- >
21
- {{ categoryTree.name }}
22
- </h3>
23
- <i
24
- v-if="hasOneLevelSubcategories"
25
- class="i-chevron-down ml-1 transition-transform
26
- text-base-400 group-hover:text-primary-subtle"
27
- :class="open ? 'rotate-180' : null"
28
- ></i>
29
- </span>
30
- </template>
31
- </ShopHeaderSubmenu>
32
- <a
33
- v-else
34
- :href="`/${categoryTree.slug}`"
35
- class="hover:text-primary hover:underline"
36
- :class="inlineMenuTrees.length < 7 ? 'decoration-2' : null"
37
- >
38
- <h3 class="inline">{{ categoryTree.name }}</h3>
39
- </a>
40
- </li>
41
- </ul>
42
- </nav>
43
- </template>
44
-
45
- <script setup lang="ts">
46
- import type { CategoryTree } from '@@sf/composables/use-shop-header';
47
- import { computed } from 'vue';
48
- import ShopHeaderSubmenu from '~/components/ShopHeaderSubmenu.vue';
49
-
50
- export interface Props {
51
- inlineMenuTrees: CategoryTree[];
52
- }
53
-
54
- const props = defineProps<Props>();
55
- const hasOneLevelSubcategories = computed(() => {
56
- return !!props.inlineMenuTrees.find(({ subcategories }) => !subcategories.length);
57
- });
58
- </script>
@@ -1,88 +0,0 @@
1
- <template>
2
- <Popover v-slot="{ open }">
3
- <PopoverButton class="outline-none">
4
- <slot name="button" v-bind="{ open }" />
5
- </PopoverButton>
6
- <div class="relative">
7
- <Fade>
8
- <PopoverPanel
9
- class="absolute z-20 top-3 left-1/2 -translate-x-1/2 !transform
10
- px-6 py-4 rounded backdrop-blur-md shadow bg-white/80
11
- text-base text-base-700"
12
- :class="countMenuCols === 1 ? 'w-60'
13
- : countMenuCols === 2 ? `w-screen ${(categoryPicture ? 'max-w-lg' : 'max-w-sm')}`
14
- : countMenuCols === 3 ? `w-screen ${(categoryPicture ? 'max-w-xl' : 'max-w-md')}`
15
- : countMenuCols < 6 ? 'w-screen max-w-3xl' : 'w-screen max-w-5xl'"
16
- >
17
- <div class="flex gap-6 w-full">
18
- <ul v-if="subcategoryLinks.length" class="flex-1">
19
- <li
20
- v-for="(subcategory, i) in subcategoryLinks"
21
- :key="`link-${i}`"
22
- :class="subcategoryLinks.length > 10 ? 'text-sm mb-1' : 'mb-2'"
23
- >
24
- <a :href="`/${subcategory.slug}`" class="hover:text-primary">
25
- <h3>{{ subcategory.name }}</h3>
26
- </a>
27
- </li>
28
- </ul>
29
- <div
30
- v-for="(subcategory, i) in subcategoryCols"
31
- :key="i"
32
- class="flex-1"
33
- >
34
- <a :href="`/${subcategory.slug}`" class="hover:text-primary">
35
- <h3>{{ subcategory.name }}</h3>
36
- </a>
37
- <ul class="text-sm text-base-600 mt-1 mb-1.5">
38
- <li
39
- v-for="(nestedSubcategory, ii) in subcategory.subcategories"
40
- :key="`${i}-${ii}`"
41
- class="mb-0.5"
42
- >
43
- <a
44
- :href="`/${nestedSubcategory.slug}`"
45
- class="hover:text-primary hover:underline"
46
- >
47
- <h3>{{ nestedSubcategory.name }}</h3>
48
- </a>
49
- </li>
50
- </ul>
51
- </div>
52
- <div
53
- v-if="categoryPicture"
54
- :class="countMenuCols === 2 ? 'basis-1/2'
55
- : countMenuCols < 5 ? 'basis-2/5' : 'basis-1/3'"
56
- >
57
- <AImg :picture="categoryPicture" class="ml-auto rounded" />
58
- </div>
59
- </div>
60
- <a
61
- :href="`/${categoryTree.slug}`"
62
- class="block mt-1 text-xs text-base-600 leading-snug underline"
63
- >
64
- {{ $t.i19seeAll$1Category.replace('$1', categoryTree.name) }}
65
- </a>
66
- </PopoverPanel>
67
- </Fade>
68
- </div>
69
- </Popover>
70
- </template>
71
-
72
- <script setup lang="ts">
73
- import { Popover, PopoverButton, PopoverPanel } from '@headlessui/vue';
74
- import {
75
- type Props as UseShopHeaderSubmenuProps,
76
- useShopHeaderSubmenu,
77
- } from '@@sf/composables/use-shop-header-submenu';
78
-
79
- export interface Props extends UseShopHeaderSubmenuProps {}
80
-
81
- const props = defineProps<Props>();
82
- const {
83
- categoryPicture,
84
- subcategoryLinks,
85
- subcategoryCols,
86
- countMenuCols,
87
- } = useShopHeaderSubmenu(props);
88
- </script>
@@ -1,61 +0,0 @@
1
- <template>
2
- <aside class="flex flex-col h-full">
3
- <nav class="py-4 grow">
4
- <ul class="relative h-full">
5
- <ShopSidenavCategory
6
- v-for="(categoryTree, i) in categoryTrees"
7
- :key="i"
8
- :category-tree="categoryTree"
9
- />
10
- </ul>
11
- </nav>
12
- <footer class="text-base">
13
- <div class="flex items-center px-2 py-4 bg-base-100">
14
- <AccountLink class="p-2 grow flex items-center gap-3">
15
- <i class="i-user-circle text-4xl text-base-500 m-0"></i>
16
- <span class="leading-tight">
17
- {{ `${$t.i19hello} ${customerName || $t.i19visitor}` }}
18
- <small class="block lowercase font-semibold text-primary">
19
- {{ $t.i19myOrders }}, {{ $t.i19myAccount }}
20
- </small>
21
- </span>
22
- </AccountLink>
23
- <button
24
- v-if="isLogged"
25
- @click="logout"
26
- class="p-2 text-right text-base-800"
27
- >
28
- <span class="text-base-600">{{ $t.i19logout }}</span>
29
- <i class="i-arrow-right-on-rectangle text-lg ml-1"></i>
30
- </button>
31
- </div>
32
- <ul class="flex gap-3 p-4 bg-base-200 text-xl text-base-700">
33
- <li v-for="(href, network) in socialNetworks" :key="network">
34
- <SocialNetworkLink :network="network" class="p-1 active:text-primary" />
35
- </li>
36
- </ul>
37
- </footer>
38
- </aside>
39
- </template>
40
-
41
- <script setup lang="ts">
42
- import type { CategoryTree } from '@@sf/composables/use-shop-header';
43
- import { onMounted } from 'vue';
44
- import { socialNetworks } from '@@sf/sf-lib';
45
- import {
46
- customerName,
47
- initializeFirebaseAuth,
48
- isLogged,
49
- logout,
50
- } from '@@sf/state/customer-session';
51
- import AccountLink from '@@sf/components/AccountLink.vue';
52
- import SocialNetworkLink from '@@sf/components/SocialNetworkLink.vue';
53
- import ShopSidenavCategory from '~/components/ShopSidenavCategory.vue';
54
-
55
- export interface Props {
56
- categoryTrees: CategoryTree[];
57
- }
58
-
59
- defineProps<Props>();
60
- onMounted(() => initializeFirebaseAuth());
61
- </script>
@@ -1,80 +0,0 @@
1
- <template>
2
- <li class="text-lg text-base-800">
3
- <details
4
- v-if="categoryTree.subcategories.length"
5
- class="bg-white overflow-y-auto overflow-x-hidden z-10
6
- open:absolute open:top-0 open:left-0 open:w-full open:h-full"
7
- @toggle="isOpen = !isOpen"
8
- >
9
- <summary
10
- class="cursor-pointer list-none px-6 py-3 active:bg-base-100 transition-colors"
11
- :class="isOpen ? 'bg-base-100' : null"
12
- >
13
- <i :class="!isOpen
14
- ? 'i-arrow-right float-right mb-0 mt-1 text-xl text-base-500'
15
- : 'i-arrow-left text-lg'"></i>
16
- <AImg
17
- v-if="!isOpen && categoryTree.icon"
18
- :picture="categoryTree.icon"
19
- :alt="categoryTree.name"
20
- class="w-auto h-5 inline mr-3"
21
- />
22
- <h3 class="inline" :class="isOpen ? 'ml-4 text-base' : null">
23
- {{ categoryTree.name }}
24
- </h3>
25
- </summary>
26
- <ul
27
- class="mt-2 transition-opacity"
28
- :class="isFaded ? 'opacity-20' : 'opacity-100'"
29
- tabindex="-1"
30
- >
31
- <ShopSidenavCategory
32
- v-for="(subcategoryTree, i) in categoryTree.subcategories"
33
- :key="i"
34
- :category-tree="subcategoryTree"
35
- />
36
- <li>
37
- <a
38
- :href="`/${categoryTree.slug}`"
39
- class="block px-6 py-3 text-base underline active:bg-base-200"
40
- >
41
- {{ $t.i19seeAll$1Category.replace('$1', categoryTree.name) }}
42
- </a>
43
- </li>
44
- </ul>
45
- </details>
46
- <a
47
- v-else
48
- :href="`/${categoryTree.slug}`"
49
- class="block px-6 py-3 active:bg-base-200"
50
- >
51
- <AImg
52
- v-if="!isOpen && categoryTree.icon"
53
- :picture="categoryTree.icon"
54
- :alt="categoryTree.name"
55
- class="w-auto h-5 inline mr-3"
56
- />
57
- <h3 class="inline">{{ categoryTree.name }}</h3>
58
- </a>
59
- </li>
60
- </template>
61
-
62
- <script setup lang="ts">
63
- import type { CategoryTree, SubcategoryTree } from '@@sf/composables/use-shop-header';
64
- import { ref, watch } from 'vue';
65
-
66
- export interface Props {
67
- categoryTree: CategoryTree | SubcategoryTree;
68
- }
69
-
70
- defineProps<Props>();
71
- const isOpen = ref(false);
72
- const isFaded = ref(true);
73
- watch(isOpen, (_isOpen) => {
74
- if (_isOpen) {
75
- setTimeout(() => { isFaded.value = false; }, 25);
76
- } else {
77
- isFaded.value = true;
78
- }
79
- });
80
- </script>
@@ -1,13 +0,0 @@
1
- /// <reference types="@astrojs/image/client" />
2
- /// <reference types="vite-plugin-pwa/client" />
3
- /// <reference types="vue/ref-macros" />
4
- /// <reference types="@cloudcommerce/storefront/client" />
5
- /// <reference types="@cloudcommerce/storefront/server" />
6
-
7
- /* eslint-disable import/newline-after-import */
8
-
9
- declare module '*.vue' {
10
- import { type DefineComponent } from 'vue';
11
- const component: DefineComponent<{}, {}, any>;
12
- export default component;
13
- }
@@ -1,16 +0,0 @@
1
- ---
2
- import SfBase from '@@sf/layouts/Base.astro';
3
- import InlineScripts from '~/scripts/InlineScripts.astro';
4
- import '~/assets/style.css';
5
- import 'uno.css';
6
- // Supports weights 100-900
7
- import '@fontsource-variable/heebo/index.css';
8
- ---
9
-
10
- <SfBase>
11
- <Fragment slot="base-head">
12
- <slot name="base-head" />
13
- </Fragment>
14
- <InlineScripts slot="before-head-end" />
15
- <slot />
16
- </SfBase>
@@ -1,68 +0,0 @@
1
- ---
2
- import { filterMainCategories } from '@@sf/composables/use-shop-header';
3
- import useSharedData from '@@sf/composables/use-shared-data';
4
- import Picture from '@@sf/components/Picture.astro';
5
- import {
6
- type Props as ShopFooterProps,
7
- default as ShopFooter,
8
- } from '~/components/ShopFooter.vue';
9
-
10
- const { routeContext } = Astro.locals;
11
- const { settings, getContent, isHomepage } = routeContext;
12
- const LogoHeading = isHomepage ? 'h2' : 'h3';
13
- const layoutContent = await getContent('layout');
14
- const {
15
- footer: {
16
- stamps,
17
- categories_list: categoriesList,
18
- pages_list: pagesList,
19
- },
20
- } = layoutContent;
21
- let mainCategories: ShopFooterProps['categories'];
22
- let pageLinks: ShopFooterProps['pageLinks'];
23
- if (categoriesList?.enabled) {
24
- if (categoriesList.categories?.length) {
25
- mainCategories = categoriesList.categories;
26
- } else {
27
- // Will wait and reuse categories loaded from <PageHeader>
28
- const { value: categories } = await useSharedData({ field: 'categories' });
29
- mainCategories = filterMainCategories(categories);
30
- }
31
- }
32
- if (pagesList?.enabled) {
33
- if (pagesList.links?.length) {
34
- pageLinks = pagesList.links;
35
- } else {
36
- pageLinks = [];
37
- const pageSlugs = await getContent('extra-pages/');
38
- for (let i = 0; i < pageSlugs.length; i++) {
39
- const { title } = await getContent(`extra-pages/${pageSlugs[i]}`);
40
- if (title) {
41
- pageLinks.push({ title, href: `/p/${pageSlugs[i]}` });
42
- }
43
- }
44
- }
45
- }
46
- ---
47
-
48
- <ShopFooter
49
- {stamps}
50
- categories={mainCategories}
51
- categoriesColTitle={categoriesList?.title}
52
- {pageLinks}
53
- pagesColTitle={pagesList?.title}
54
- >
55
- <Fragment slot="logo">
56
- <a href="/">
57
- <LogoHeading>
58
- <Picture
59
- src={settings.logo}
60
- alt={settings.name}
61
- widths={[300]}
62
- loading="lazy"
63
- class="max-w-[150px]"
64
- />
65
- </LogoHeading>
66
- </a>
67
- </Fragment>
68
- </ShopFooter>
@@ -1,42 +0,0 @@
1
- ---
2
- import usePageHeader from '@@sf/layouts/use-page-header';
3
- import useSharedData from '@@sf/composables/use-shared-data';
4
- import Picture from '@@sf/components/Picture.astro';
5
- import PitchBar from '~/components/PitchBar.vue';
6
- import ShopHeader from '~/components/ShopHeader.vue';
7
-
8
- const { routeContext } = Astro.locals;
9
- const { settings, isHomepage } = routeContext;
10
- const LogoHeading = isHomepage ? 'h1' : 'h2';
11
- const {
12
- pitchBar,
13
- shopHeader: { categories, ...shopHeader },
14
- } = await usePageHeader({ routeContext });
15
- const { inlineClientJS } = await useSharedData({
16
- field: 'categories',
17
- value: categories?.map(({ _id, ...c }) => c),
18
- });
19
- ---
20
-
21
- <slot name="pitch-bar">
22
- {pitchBar.slides.length > 1 && <PitchBar {...pitchBar} client:idle />}
23
- {pitchBar.slides.length === 1 && <PitchBar {...pitchBar} />}
24
- </slot>
25
- <script is:inline set:html={inlineClientJS} />
26
- <ShopHeader {...shopHeader} client:load>
27
- <Fragment slot="logo">
28
- <a href="/">
29
- <LogoHeading>
30
- <Picture
31
- slot="logo-picture"
32
- src={settings.logo}
33
- alt={settings.name}
34
- widths={[300]}
35
- fetchpriority="high"
36
- loading="eager"
37
- class="hover:drop-shadow-sm max-w-[150px] mx-auto"
38
- />
39
- </LogoHeading>
40
- </a>
41
- </Fragment>
42
- </ShopHeader>
@@ -1,10 +0,0 @@
1
- ---
2
- ---
3
-
4
- <main>
5
- <h1>Error :/</h1>
6
- <p class="instructions">
7
- Check out the <code>src/pages</code> directory to get started.<br/>
8
- <strong>Code Challenge:</strong> Tweak the "Welcome to Astro" message above.
9
- </p>
10
- </main>
@@ -1,49 +0,0 @@
1
- ---
2
- import api from '@cloudcommerce/api';
3
- import { usePageHero } from '@@sf/layouts/use-page-main';
4
- import BannerPictures from '@@sf/components/BannerPictures.astro';
5
- import HeroSlider from '~/components/HeroSlider.vue';
6
- import Sections from '~/main/Sections.astro';
7
- import Countdown from '~/components/Countdown.vue';
8
-
9
- const { routeContext } = Astro.locals;
10
- const { heroSlider } = await usePageHero({ routeContext });
11
- const heroSlides = heroSlider.slides;
12
- const {
13
- data: {
14
- result: products,
15
- },
16
- } = await api.get('products', {
17
- limit: 500,
18
- fields: ['sku', 'name', 'pictures'] as const,
19
- });
20
- ---
21
-
22
- <main>
23
- {heroSlider.slides.length &&
24
- <HeroSlider {...heroSlider} client:load>
25
- {heroSlides[0] && <BannerPictures slot="picture-0" {...heroSlides[0]} index={0} />}
26
- {heroSlides[1] && <BannerPictures slot="picture-1" {...heroSlides[1]} index={1} />}
27
- {heroSlides[2] && <BannerPictures slot="picture-2" {...heroSlides[2]} index={2} />}
28
- {heroSlides[3] && <BannerPictures slot="picture-3" {...heroSlides[3]} index={3} />}
29
- {heroSlides[4] && <BannerPictures slot="picture-4" {...heroSlides[4]} index={4} />}
30
- {heroSlides[5] && <BannerPictures slot="picture-5" {...heroSlides[5]} index={5} />}
31
- {heroSlides[6] && <BannerPictures slot="picture-6" {...heroSlides[6]} index={6} />}
32
- {heroSlides[7] && <BannerPictures slot="picture-7" {...heroSlides[7]} index={7} />}
33
- {heroSlides[8] && <BannerPictures slot="picture-8" {...heroSlides[8]} index={8} />}
34
- {heroSlides[9] && <BannerPictures slot="picture-9" {...heroSlides[9]} index={9} />}
35
- <!-- https://github.com/withastro/astro/issues/5066#issuecomment-1277998365 -->
36
- </HeroSlider>
37
- }
38
- <Sections />
39
- <div class="container mx-auto py-4">
40
- <Countdown client:visible />
41
- </div>
42
- <article class="container">
43
- {products.map((product) => (
44
- <span>{product.sku}</span>
45
- <span> {product.name}</span>
46
- <br>
47
- ))}
48
- </article>
49
- </main>