cloudcommerce 0.36.2 → 0.37.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 (174) hide show
  1. package/.github/workflows/test-apps.yml +2 -2
  2. package/.gitmodules +0 -3
  3. package/.vscode/settings.json +0 -1
  4. package/CHANGELOG.md +38 -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 +5 -5
  11. package/packages/api/package.json +1 -1
  12. package/packages/apps/affilate-program/package.json +1 -1
  13. package/packages/apps/correios/package.json +1 -1
  14. package/packages/apps/custom-payment/package.json +1 -1
  15. package/packages/apps/custom-shipping/package.json +1 -1
  16. package/packages/apps/datafrete/package.json +1 -1
  17. package/packages/apps/discounts/package.json +1 -1
  18. package/packages/apps/emails/package.json +1 -1
  19. package/packages/apps/fb-conversions/package.json +2 -2
  20. package/packages/apps/flash-courier/package.json +1 -1
  21. package/packages/apps/frenet/package.json +1 -1
  22. package/packages/apps/galaxpay/package.json +1 -1
  23. package/packages/apps/google-analytics/package.json +1 -1
  24. package/packages/apps/jadlog/package.json +1 -1
  25. package/packages/apps/loyalty-points/package.json +1 -1
  26. package/packages/apps/mandae/package.json +1 -1
  27. package/packages/apps/melhor-envio/package.json +1 -1
  28. package/packages/apps/mercadopago/package.json +1 -1
  29. package/packages/apps/pagarme/package.json +1 -1
  30. package/packages/apps/pagarme-v5/package.json +1 -1
  31. package/packages/apps/paghiper/package.json +1 -1
  32. package/packages/apps/pix/package.json +1 -1
  33. package/packages/apps/tiny-erp/package.json +1 -1
  34. package/packages/apps/webhooks/package.json +1 -1
  35. package/packages/cli/package.json +1 -1
  36. package/packages/config/package.json +1 -1
  37. package/packages/emails/package.json +1 -1
  38. package/packages/eslint/package.json +5 -5
  39. package/packages/events/package.json +1 -1
  40. package/packages/feeds/package.json +1 -1
  41. package/packages/firebase/package.json +1 -1
  42. package/packages/i18n/package.json +1 -1
  43. package/packages/modules/package.json +1 -1
  44. package/packages/passport/package.json +1 -1
  45. package/packages/ssr/package.json +4 -4
  46. package/packages/storefront/package.json +11 -10
  47. package/packages/storefront/src/helpers/sf-utils.ts +8 -5
  48. package/packages/storefront/src/lib/components/CarouselControl.vue +1 -1
  49. package/packages/storefront/src/lib/composables/use-search-modal.ts +90 -0
  50. package/packages/storefront/src/lib/composables/use-shop-header.ts +69 -1
  51. package/packages/storefront/src/lib/state/search-engine.ts +39 -13
  52. package/packages/storefront/src/lib/state/shopping-cart.ts +2 -1
  53. package/packages/storefront/src/lib/state/use-analytics.ts +27 -11
  54. package/packages/test-base/package.json +1 -1
  55. package/packages/types/package.json +1 -1
  56. package/ecomplus-stores/monocard/.devcontainer/devcontainer.json +0 -30
  57. package/ecomplus-stores/monocard/.editorconfig +0 -13
  58. package/ecomplus-stores/monocard/.eslintrc.cjs +0 -3
  59. package/ecomplus-stores/monocard/.firebaserc +0 -5
  60. package/ecomplus-stores/monocard/.github/build-and-deploy +0 -1
  61. package/ecomplus-stores/monocard/.github/renovate.json +0 -5
  62. package/ecomplus-stores/monocard/.github/workflows/build-and-deploy.yml +0 -37
  63. package/ecomplus-stores/monocard/.github/workflows/calibreapp-image-actions.yml +0 -23
  64. package/ecomplus-stores/monocard/.gitpod.yml +0 -12
  65. package/ecomplus-stores/monocard/.idx/dev.nix +0 -24
  66. package/ecomplus-stores/monocard/.nvmrc +0 -1
  67. package/ecomplus-stores/monocard/.vscode/extensions.json +0 -8
  68. package/ecomplus-stores/monocard/.vscode/launch.json +0 -11
  69. package/ecomplus-stores/monocard/.vscode/settings.json +0 -13
  70. package/ecomplus-stores/monocard/LICENSE.md +0 -230
  71. package/ecomplus-stores/monocard/README.md +0 -31
  72. package/ecomplus-stores/monocard/SETUP.md +0 -129
  73. package/ecomplus-stores/monocard/SETUP.pt-BR.md +0 -129
  74. package/ecomplus-stores/monocard/functions/config.json +0 -3
  75. package/ecomplus-stores/monocard/functions/example.env +0 -10
  76. package/ecomplus-stores/monocard/functions/many/index.js +0 -14
  77. package/ecomplus-stores/monocard/functions/many/package.json +0 -22
  78. package/ecomplus-stores/monocard/functions/ssr/.eslintrc.cjs +0 -6
  79. package/ecomplus-stores/monocard/functions/ssr/astro.config.mjs +0 -4
  80. package/ecomplus-stores/monocard/functions/ssr/content/blog/.gitkeep +0 -0
  81. package/ecomplus-stores/monocard/functions/ssr/content/extra-pages/terms.json +0 -11
  82. package/ecomplus-stores/monocard/functions/ssr/content/extra-pages/trocas.json +0 -11
  83. package/ecomplus-stores/monocard/functions/ssr/content/layout.json +0 -52
  84. package/ecomplus-stores/monocard/functions/ssr/content/pages/home.json +0 -20
  85. package/ecomplus-stores/monocard/functions/ssr/content/pages/products.json +0 -18
  86. package/ecomplus-stores/monocard/functions/ssr/content/settings.json +0 -78
  87. package/ecomplus-stores/monocard/functions/ssr/index.js +0 -18
  88. package/ecomplus-stores/monocard/functions/ssr/package.json +0 -36
  89. package/ecomplus-stores/monocard/functions/ssr/public/admin/.gitkeep +0 -0
  90. package/ecomplus-stores/monocard/functions/ssr/public/assets/lotties/img_1.png +0 -0
  91. package/ecomplus-stores/monocard/functions/ssr/public/assets/lotties/img_1.webp +0 -0
  92. package/ecomplus-stores/monocard/functions/ssr/public/assets/lotties/phone-nfc.json +0 -1
  93. package/ecomplus-stores/monocard/functions/ssr/public/img/icon.png +0 -0
  94. package/ecomplus-stores/monocard/functions/ssr/public/img/large-icon.png +0 -0
  95. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/card-phone.png +0 -0
  96. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/devices.jpg +0 -0
  97. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/ecom-icon.png +0 -0
  98. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/edit-suit.jpg +0 -0
  99. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/favicon.png +0 -0
  100. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/icon.png +0 -0
  101. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/large-icon.png +0 -0
  102. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/logo-arcelor-mittal.webp +0 -0
  103. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/logo-azul.webp +0 -0
  104. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/logo-banco-pan.webp +0 -0
  105. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/logo-brinks.webp +0 -0
  106. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/logo-mastercard.webp +0 -0
  107. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/logo-pfizer.webp +0 -0
  108. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/logo-prudential.webp +0 -0
  109. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/logo-unimed.webp +0 -0
  110. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/logo.webp +0 -0
  111. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/mockup-editar.png +0 -0
  112. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/og-image.png +0 -0
  113. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/padronagem-tilada.png +0 -0
  114. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/qrcode-camera.png +0 -0
  115. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/sua-logo-aqui.png +0 -0
  116. package/ecomplus-stores/monocard/functions/ssr/public/robots.txt +0 -6
  117. package/ecomplus-stores/monocard/functions/ssr/scripts/build.sh +0 -14
  118. package/ecomplus-stores/monocard/functions/ssr/src/assets/card.css +0 -99
  119. package/ecomplus-stores/monocard/functions/ssr/src/assets/style.css +0 -79
  120. package/ecomplus-stores/monocard/functions/ssr/src/components/AccountMenu.vue +0 -97
  121. package/ecomplus-stores/monocard/functions/ssr/src/components/AccountPage.vue +0 -62
  122. package/ecomplus-stores/monocard/functions/ssr/src/components/Banner.vue +0 -59
  123. package/ecomplus-stores/monocard/functions/ssr/src/components/BannersGrid.astro +0 -25
  124. package/ecomplus-stores/monocard/functions/ssr/src/components/Breadcrumbs.astro +0 -44
  125. package/ecomplus-stores/monocard/functions/ssr/src/components/CartItem.vue +0 -64
  126. package/ecomplus-stores/monocard/functions/ssr/src/components/CartSidebar.vue +0 -69
  127. package/ecomplus-stores/monocard/functions/ssr/src/components/CasesGrid.astro +0 -49
  128. package/ecomplus-stores/monocard/functions/ssr/src/components/CheckoutPage.vue +0 -33
  129. package/ecomplus-stores/monocard/functions/ssr/src/components/Collapse.vue +0 -19
  130. package/ecomplus-stores/monocard/functions/ssr/src/components/DemoVideo.vue +0 -10
  131. package/ecomplus-stores/monocard/functions/ssr/src/components/DocDescription.vue +0 -28
  132. package/ecomplus-stores/monocard/functions/ssr/src/components/FeatureTabs.vue +0 -286
  133. package/ecomplus-stores/monocard/functions/ssr/src/components/FeaturesSection.astro +0 -28
  134. package/ecomplus-stores/monocard/functions/ssr/src/components/FooterStamps.vue +0 -63
  135. package/ecomplus-stores/monocard/functions/ssr/src/components/ImagesGallery.vue +0 -154
  136. package/ecomplus-stores/monocard/functions/ssr/src/components/LoginForm.vue +0 -107
  137. package/ecomplus-stores/monocard/functions/ssr/src/components/LottiePhoneNFC.vue +0 -20
  138. package/ecomplus-stores/monocard/functions/ssr/src/components/MonocardCustomizer.vue +0 -261
  139. package/ecomplus-stores/monocard/functions/ssr/src/components/PitchBar.vue +0 -61
  140. package/ecomplus-stores/monocard/functions/ssr/src/components/Prices.vue +0 -95
  141. package/ecomplus-stores/monocard/functions/ssr/src/components/ProductCard.vue +0 -117
  142. package/ecomplus-stores/monocard/functions/ssr/src/components/ProductDetails.vue +0 -122
  143. package/ecomplus-stores/monocard/functions/ssr/src/components/ProductShelf.vue +0 -57
  144. package/ecomplus-stores/monocard/functions/ssr/src/components/ProductSpecifications.vue +0 -42
  145. package/ecomplus-stores/monocard/functions/ssr/src/components/SearchModal.vue +0 -6
  146. package/ecomplus-stores/monocard/functions/ssr/src/components/ShopFooter.vue +0 -71
  147. package/ecomplus-stores/monocard/functions/ssr/src/components/ShopHeader.vue +0 -137
  148. package/ecomplus-stores/monocard/functions/ssr/src/components/ShopHeaderMenu.vue +0 -92
  149. package/ecomplus-stores/monocard/functions/ssr/src/components/ShopSidenav.vue +0 -64
  150. package/ecomplus-stores/monocard/functions/ssr/src/components/ShopSidenavCategory.vue +0 -77
  151. package/ecomplus-stores/monocard/functions/ssr/src/components/SkuSelector.vue +0 -58
  152. package/ecomplus-stores/monocard/functions/ssr/src/env.d.ts +0 -13
  153. package/ecomplus-stores/monocard/functions/ssr/src/layouts/Base.astro +0 -15
  154. package/ecomplus-stores/monocard/functions/ssr/src/layouts/PageFooter.astro +0 -53
  155. package/ecomplus-stores/monocard/functions/ssr/src/layouts/PageHeader.astro +0 -35
  156. package/ecomplus-stores/monocard/functions/ssr/src/main/Fallback.astro +0 -10
  157. package/ecomplus-stores/monocard/functions/ssr/src/main/Home.astro +0 -95
  158. package/ecomplus-stores/monocard/functions/ssr/src/main/Sections.astro +0 -52
  159. package/ecomplus-stores/monocard/functions/ssr/src/main/Wildcard.astro +0 -18
  160. package/ecomplus-stores/monocard/functions/ssr/src/pages/[...slug].astro +0 -42
  161. package/ecomplus-stores/monocard/functions/ssr/src/pages/_vue.ts +0 -10
  162. package/ecomplus-stores/monocard/functions/ssr/src/pages/app/account.astro +0 -34
  163. package/ecomplus-stores/monocard/functions/ssr/src/pages/app/index.astro +0 -62
  164. package/ecomplus-stores/monocard/functions/ssr/src/pages/comprar/index.astro +0 -52
  165. package/ecomplus-stores/monocard/functions/ssr/src/pages/index.astro +0 -32
  166. package/ecomplus-stores/monocard/functions/ssr/src/pages/~fallback.astro +0 -23
  167. package/ecomplus-stores/monocard/functions/ssr/src/scripts/InlineScripts.astro +0 -10
  168. package/ecomplus-stores/monocard/functions/ssr/tailwind.config.cjs +0 -18
  169. package/ecomplus-stores/monocard/functions/ssr/tsconfig.json +0 -12
  170. package/ecomplus-stores/monocard/functions/ssr/uno.config.cjs +0 -5
  171. package/ecomplus-stores/monocard/functions/with-apps/index.js +0 -12
  172. package/ecomplus-stores/monocard/functions/with-apps/package.json +0 -22
  173. package/ecomplus-stores/monocard/package.json +0 -31
  174. package/ecomplus-stores/monocard/scripts/install.sh +0 -24
@@ -1,57 +0,0 @@
1
- <template>
2
- <section class="ui-section">
3
- <div v-if="title" class="mx-auto mb-2 max-w-prose text-center">
4
- <h2 class="ui-text-brand text-3xl">
5
- <ALink :href="titleLink" :class="titleLink ? 'ui-link' : 'text-base-700'">
6
- {{ title }}
7
- </ALink>
8
- </h2>
9
- </div>
10
- <Carousel class="group/shelf [&>ul]:justify-center">
11
- <li
12
- v-for="product in products"
13
- :key="product._id"
14
- class="shrink-0 basis-1/2 lg:basis-1/3"
15
- >
16
- <ProductCard :product="product" />
17
- </li>
18
- <template #controls>
19
- <div
20
- v-show="products.length > 2"
21
- class="text-primary text-3xl leading-none transition-opacity
22
- group-hover/shelf:opacity-90 lg:text-2xl lg:opacity-0"
23
- >
24
- <CarouselControl class="lg:hover:bg-primary-300/60 !-left-4 !top-1/2 h-12
25
- w-12 rounded-full bg-transparent ring-black/5
26
- lg:bg-white/80 lg:shadow-sm lg:ring-1" is-prev />
27
- <CarouselControl class="lg:hover:bg-primary-300/60 !-right-4 !top-1/2 h-12
28
- w-12 rounded-full bg-transparent ring-black/5
29
- lg:bg-white/80 lg:shadow-sm lg:ring-1" />
30
- </div>
31
- </template>
32
- </Carousel>
33
- </section>
34
- </template>
35
-
36
- <script setup lang="ts">
37
- import {
38
- type Props as UseProductShelfProps,
39
- useProductShelf,
40
- } from '@@sf/composables/use-product-shelf';
41
- import Carousel from '@@sf/components/Carousel.vue';
42
- import CarouselControl from '@@sf/components/CarouselControl.vue';
43
- import ProductCard from '~/components/ProductCard.vue';
44
-
45
- export interface Props extends UseProductShelfProps {}
46
-
47
- const props = defineProps<Props>();
48
- const {
49
- title,
50
- titleLink,
51
- fetching,
52
- products,
53
- } = useProductShelf(props);
54
- if (import.meta.env.SSR) {
55
- await fetching;
56
- }
57
- </script>
@@ -1,42 +0,0 @@
1
- <template>
2
- <section v-if="hasSpecs" class="ui-section">
3
- <Collapse :title="title || $t.i19specifications">
4
- <ul>
5
- <li
6
- v-for="(grid, gridId) in specifications"
7
- :key="gridId"
8
- class="border-base-200 grid grid-cols-2
9
- border-dashed py-2 sm:grid-cols-3 [&:not(:last-child)]:border-b"
10
- >
11
- <span class="text-base-700">
12
- {{ getGridTitle(`${gridId}`, grids) }}
13
- </span>
14
- <strong class="font-semibold sm:col-span-2">
15
- {{ getSpecTextValue(product, `${gridId}`, grids) }}
16
- </strong>
17
- </li>
18
- </ul>
19
- </Collapse>
20
- </section>
21
- </template>
22
-
23
- <script setup lang="ts">
24
- import type { Products } from '@cloudcommerce/api/types';
25
- import {
26
- gridTitle as getGridTitle,
27
- specTextValue as getSpecTextValue,
28
- } from '@ecomplus/utils';
29
- import Collapse from '~/components/Collapse.vue';
30
-
31
- export interface Props {
32
- product?: Products;
33
- title?: string;
34
- }
35
-
36
- const props = withDefaults(defineProps<Props>(), {
37
- product: () => globalThis.$storefront.apiContext?.doc as Products,
38
- });
39
- const specifications = computed(() => props.product.specifications || {});
40
- const hasSpecs = computed(() => Object.keys(specifications.value).length);
41
- const { grids } = globalThis.$storefront.data;
42
- </script>
@@ -1,6 +0,0 @@
1
- <template>
2
- <div class="bg-base-300 h-40 w-full"></div>
3
- </template>
4
-
5
- <script setup lang="ts">
6
- </script>
@@ -1,71 +0,0 @@
1
- <template>
2
- <footer class="text-base-300 border-base-100 w-screen border-t bg-black py-2">
3
- <div class="ui-section">
4
- <div class="border-base-200 flex flex-wrap
5
- justify-between gap-y-5 border-b pb-7 sm:gap-x-10 lg:flex-nowrap">
6
- <div class="shrink">
7
- <slot name="logo" />
8
- <div v-if="$settings.description" class="prose prose-invert">
9
- <p>{{ $settings.description }}</p>
10
- </div>
11
- <div class="text-base-400 flex gap-2">
12
- <span v-for="(href, network) in socialNetworks" :key="network">
13
- <SocialNetworkLink :network="network" class="hover:text-primary p-1">
14
- <template v-if="network === 'whatsapp'" #append>
15
- <span class="text-base-300 ml-1 text-sm">
16
- {{ $settings.whatsapp }}
17
- </span>
18
- </template>
19
- </SocialNetworkLink>
20
- </span>
21
- </div>
22
- <div v-if="$settings.phone" class="text-base-200 mt-3">
23
- <ALink
24
- v-if="$settings.phone"
25
- :href="`tel:${$settings.phone.replace(/\D/g, '')}`"
26
- class="hover:text-primary"
27
- >
28
- <i class="i-phone mr-0.5"></i>
29
- {{ $settings.phone }}
30
- </ALink>
31
- </div>
32
- </div>
33
- <div v-if="pageLinks?.length" class="basis-1/2 sm:basis-auto">
34
- <div class="mb-2.5 text-lg font-medium">
35
- {{ pagesColTitle || $t.i19institutional }}
36
- </div>
37
- <ul
38
- class="text-sm"
39
- :class="pageLinks.length > 5
40
- ? 'grid md:grid-cols-2 gap-x-5 gap-y-1.5' : 'space-y-1.5'"
41
- >
42
- <li v-for="({ title, href }, i) in pageLinks" :key="`p-${i}`">
43
- <ALink :href="href" class="ui-link text-base-50">
44
- {{ title }}
45
- </ALink>
46
- </li>
47
- </ul>
48
- </div>
49
- </div>
50
- </div>
51
- <FooterStamps :stamps="stamps" />
52
- </footer>
53
- </template>
54
-
55
- <script setup lang="ts">
56
- import type { LayoutContent } from '@@sf/content';
57
- import { socialNetworks } from '@@sf/sf-lib';
58
- import SocialNetworkLink from '@@sf/components/SocialNetworkLink.vue';
59
- import FooterStamps from '~/components/FooterStamps.vue';
60
-
61
- export interface Props {
62
- stamps?: LayoutContent['footer']['stamps'];
63
- pageLinks?: Array<{
64
- title: string;
65
- href: string;
66
- }>;
67
- pagesColTitle?: string;
68
- }
69
-
70
- defineProps<Props>();
71
- </script>
@@ -1,137 +0,0 @@
1
- <template>
2
- <header
3
- ref="header"
4
- class="relative top-0 z-50 transition-colors"
5
- :class="[
6
- isSticky && !isSidenavOpen ? 'bg-black/80' : 'bg-black',
7
- isSticky ? 'py-2 shadow backdrop-blur-md md:py-3' : 'py-3 sm:py-4 md:py-5',
8
- ]"
9
- >
10
- <div class="container mx-auto flex grid-flow-col
11
- grid-cols-3 items-center justify-between
12
- px-1 md:grid lg:max-w-4xl lg:auto-cols-max lg:grid-cols-none lg:pl-3
13
- xl:max-w-6xl 2xl:max-w-7xl">
14
- <div class="basis-1/4 lg:hidden">
15
- <button
16
- class="my-1 px-2"
17
- :aria-label="$t.i19toggleMenu"
18
- @click="isSidenavOpen = !isSidenavOpen"
19
- >
20
- <i
21
- class="text-3xl transition-colors"
22
- :class="[
23
- isSidenavOpen ? 'i-close' : 'i-menu-3-line',
24
- isMounted ? 'text-base-100' : 'text-base-300 animate-pulse',
25
- ]"
26
- ></i>
27
- </button>
28
- </div>
29
- <slot name="logo" />
30
- <ShopHeaderMenu
31
- class="hidden lg:block"
32
- v-bind="{ isSticky, ...headerNavLinks }"
33
- />
34
- <div class="flex basis-1/4 items-center justify-end gap-3 px-2 lg:gap-4">
35
- <AccountMenu class="hidden sm:block">
36
- <template #button="{ open }">
37
- <i
38
- class="i-account-pin-circle-line hover:text-primary h-7
39
- w-7 hover:scale-110 active:scale-125"
40
- :class="open ? 'text-white scale-110' : 'text-base-200'"
41
- ></i>
42
- </template>
43
- </AccountMenu>
44
- <a
45
- :href="$settings.cartUrl || '/app/'"
46
- :aria-label="$t.i19openCart"
47
- @click.prevent="isCartOpen = !isCartOpen"
48
- class="group relative"
49
- role="button"
50
- >
51
- <i class="i-shopping-bag-3-line text-base-200 hover:text-primary
52
- h-7 w-7 hover:scale-110 active:scale-125"></i>
53
- <span
54
- v-if="delayedTotalItems"
55
- class="ui-badge-pill-sm absolute -right-1.5 -top-1"
56
- >
57
- {{ delayedTotalItems }}
58
- </span>
59
- </a>
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="{
68
- height: `calc(100vh - ${positionY}px + .5rem)`,
69
- maxHeight: `calc(100dvh - ${positionY}px + .5rem)`,
70
- }"
71
- >
72
- <ShopSidenav class="bg-white pt-6" />
73
- </Drawer>
74
- <Teleport v-if="isMounted" to="#teleported-overlap">
75
- <Drawer
76
- v-model="isCartOpen"
77
- placement="end"
78
- backdrop-target="#teleported-overlap"
79
- >
80
- <Suspense>
81
- <CartSidebar v-if="isCartOpenOnce" @close="isCartOpen = false" />
82
- <template #fallback>
83
- <Skeleton class="px-6 pt-16" is-bold />
84
- </template>
85
- </Suspense>
86
- </Drawer>
87
- </Teleport>
88
- </header>
89
- </template>
90
-
91
- <script setup lang="ts">
92
- import { watchOnce } from '@vueuse/core';
93
- import { totalItems } from '@@sf/state/shopping-cart';
94
- import {
95
- type Props as UseShopHeaderProps,
96
- useShopHeader,
97
- } from '@@sf/composables/use-shop-header';
98
- import Drawer from '@@sf/components/Drawer.vue';
99
- import ShopSidenav from '~/components/ShopSidenav.vue';
100
- import ShopHeaderMenu from '~/components/ShopHeaderMenu.vue';
101
- import AccountMenu from '~/components/AccountMenu.vue';
102
-
103
- export interface Props extends Omit<UseShopHeaderProps, 'header'> {}
104
-
105
- const CartSidebar = defineAsyncComponent(() => import('~/components/CartSidebar.vue'));
106
- const props = defineProps<Props>();
107
- const header = ref<HTMLElement | null>(null);
108
- const { isSticky, positionY } = useShopHeader({ ...props, header });
109
- const isSidenavOpen = ref(false);
110
- const isCartOpen = ref(false);
111
- const isCartOpenOnce = ref(false);
112
- watchOnce(isCartOpen, () => {
113
- isCartOpenOnce.value = true;
114
- });
115
- const isMounted = ref(false);
116
- const delayedTotalItems = ref(0);
117
- onMounted(() => {
118
- isMounted.value = true;
119
- watch(totalItems, (newTotalItems, prevTotalItems) => {
120
- if (typeof prevTotalItems === 'number') {
121
- if (prevTotalItems < newTotalItems) {
122
- isCartOpen.value = true;
123
- } else if (prevTotalItems && !newTotalItems) {
124
- isCartOpen.value = false;
125
- }
126
- }
127
- delayedTotalItems.value = newTotalItems;
128
- }, { immediate: true });
129
- });
130
- const headerNavLinks = {
131
- supportUrl: '',
132
- businessLpUrl: '',
133
- monocardSlug: '',
134
- monodotSlug: '',
135
- ...globalThis.$storefront.settings.metafields,
136
- };
137
- </script>
@@ -1,92 +0,0 @@
1
- <template>
2
- <nav class="font-brand text-base-100 text-lg lowercase">
3
- <ul class="flex items-center gap-6 xl:gap-7">
4
- <li>
5
- <ALink
6
- :href="supportUrl"
7
- class="decoration-2 underline-offset-4 hover:text-white hover:underline"
8
- >
9
- {{ $t.i19help }}
10
- </ALink>
11
- </li>
12
- <li>
13
- <a
14
- :href="businessLpUrl"
15
- class="hover:text-primary decoration-primary text-white
16
- underline decoration-2 underline-offset-4"
17
- >
18
- <i class="i-stack-line mr-1.5 opacity-50"></i>
19
- <h4 class="inline">Para empresas e times</h4>
20
- </a>
21
- </li>
22
- <li>
23
- <Menu as="div" v-slot="{ open }" class="relative z-50">
24
- <MenuButton
25
- class="group rounded-full py-1 pl-4 pr-3 lowercase"
26
- :class="isSticky
27
- ? 'bg-primary/20 text-primary hover:primary'
28
- : 'primary hover:bg-primary-50'"
29
- >
30
- <span>{{ $t.i19buy }}</span>
31
- <i
32
- class="i-arrow-down-s-line ml-1 transition-transform"
33
- :class="open ? 'rotate-180' : 'opacity-50'"
34
- ></i>
35
- </MenuButton>
36
- <Fade>
37
- <MenuItems
38
- as="ul"
39
- class="absolute -left-7 mt-3 w-48 overflow-hidden rounded-b-md
40
- bg-black/80 text-white shadow backdrop-blur-md"
41
- >
42
- <MenuItem as="li">
43
- <a
44
- :href="`/${monocardSlug}`"
45
- class="flex gap-3 px-5 py-2.5 hover:bg-black"
46
- >
47
- <h4 class="basis-4/6 text-right">
48
- <span class="opacity-70">Mono</span>card
49
- </h4>
50
- <span class="basis-2/6 opacity-80">
51
- <i class="i-qr-code-line"></i>
52
- <i class="i-signal-tower-fill ml-1.5"></i>
53
- </span>
54
- </a>
55
- <a
56
- :href="`${monodotSlug}`"
57
- class="flex gap-3 px-5 py-2.5 hover:bg-black"
58
- >
59
- <h4 class="basis-4/6 text-right">
60
- <span class="opacity-70">Mono</span>dot
61
- </h4>
62
- <span class="basis-2/6 opacity-80">
63
- <i class="i-qr-code-line"></i>
64
- </span>
65
- </a>
66
- </MenuItem>
67
- </MenuItems>
68
- </Fade>
69
- </Menu>
70
- </li>
71
- </ul>
72
- </nav>
73
- </template>
74
-
75
- <script setup lang="ts">
76
- import {
77
- Menu,
78
- MenuButton,
79
- MenuItems,
80
- MenuItem,
81
- } from '@headlessui/vue';
82
-
83
- export interface Props {
84
- isSticky?: boolean;
85
- monocardSlug: string;
86
- monodotSlug: string;
87
- supportUrl: string;
88
- businessLpUrl: string;
89
- }
90
-
91
- defineProps<Props>();
92
- </script>
@@ -1,64 +0,0 @@
1
- <template>
2
- <aside class="flex h-full flex-col">
3
- <nav class="grow py-4">
4
- <ul class="relative h-full">
5
- <ShopSidenavCategory
6
- v-for="categoryTree in categoryTrees"
7
- :key="categoryTree._id"
8
- :category-tree="categoryTree"
9
- />
10
- </ul>
11
- </nav>
12
- <footer class="text-base">
13
- <div class="bg-base-100 flex items-center px-2 py-4">
14
- <AccountLink class="flex grow items-center gap-3 p-2">
15
- <i class="i-account-pin-circle-line text-base-500 m-0 text-4xl"></i>
16
- <span class="leading-tight">
17
- {{ `${$t.i19hello} ${customerName || $t.i19visitor}` }}
18
- <small class="text-primary block font-semibold lowercase">
19
- {{ $t.i19myOrders }}, {{ $t.i19myAccount }}
20
- </small>
21
- </span>
22
- </AccountLink>
23
- <button
24
- v-if="isLogged"
25
- @click="logout"
26
- class="text-base-800 p-2 text-right"
27
- >
28
- <span class="text-base-600">{{ $t.i19logout }}</span>
29
- <i class="i-logout-circle-r-line ml-1 text-lg"></i>
30
- </button>
31
- </div>
32
- <ul class="bg-base-200 text-base-700 flex gap-3 p-4 text-xl">
33
- <li v-for="(href, network) in socialNetworks" :key="network">
34
- <SocialNetworkLink :network="network" class="active:text-primary p-1" />
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 {
44
- customerName,
45
- initializeFirebaseAuth,
46
- isLogged,
47
- logout,
48
- } from '@@sf/state/customer-session';
49
- import { socialNetworks } from '@@sf/sf-lib';
50
- import AccountLink from '@@sf/components/AccountLink.vue';
51
- import SocialNetworkLink from '@@sf/components/SocialNetworkLink.vue';
52
- import ShopSidenavCategory from '~/components/ShopSidenavCategory.vue';
53
-
54
- export interface Props {
55
- categoryTrees?: CategoryTree[];
56
- }
57
-
58
- withDefaults(defineProps<Props>(), {
59
- categoryTrees() {
60
- return [];
61
- },
62
- });
63
- onMounted(() => initializeFirebaseAuth());
64
- </script>
@@ -1,77 +0,0 @@
1
- <template>
2
- <li class="text-base-800 text-lg">
3
- <details
4
- v-if="categoryTree.subcategories.length"
5
- class="z-10 overflow-y-auto overflow-x-hidden bg-white
6
- open:absolute open:left-0 open:top-0 open:h-full open:w-full"
7
- @toggle="isOpen = !isOpen"
8
- >
9
- <summary
10
- class="active:bg-base-100 cursor-pointer list-none px-6 py-3 transition-colors"
11
- :class="isOpen ? 'bg-base-100' : null"
12
- >
13
- <i :class="!isOpen
14
- ? 'i-arrow-right-line float-right mb-0 mt-1 text-xl text-base-500'
15
- : 'i-arrow-right-line text-lg rotate-180'"></i>
16
- <AImg
17
- v-if="!isOpen && categoryTree.icon"
18
- :picture="categoryTree.icon"
19
- class="mr-3 inline h-5 w-auto"
20
- />
21
- <h3 class="inline" :class="isOpen ? 'ml-4 text-base' : null">
22
- {{ categoryTree.name }}
23
- </h3>
24
- </summary>
25
- <ul
26
- class="mt-2 transition-opacity"
27
- :class="isFaded ? 'opacity-20' : 'opacity-100'"
28
- tabindex="-1"
29
- >
30
- <ShopSidenavCategory
31
- v-for="subcategoryTree in categoryTree.subcategories"
32
- :key="subcategoryTree._id"
33
- :category-tree="subcategoryTree"
34
- />
35
- <li>
36
- <a
37
- :href="`/${categoryTree.slug}`"
38
- class="active:bg-base-200 block px-6 py-3 text-base underline"
39
- >
40
- {{ $t.i19seeAll$1Category.replace('$1', categoryTree.name) }}
41
- </a>
42
- </li>
43
- </ul>
44
- </details>
45
- <a
46
- v-else
47
- :href="`/${categoryTree.slug}`"
48
- class="active:bg-base-200 block px-6 py-3"
49
- >
50
- <AImg
51
- v-if="!isOpen && categoryTree.icon"
52
- :picture="categoryTree.icon"
53
- class="mr-3 inline h-5 w-auto"
54
- />
55
- <h3 class="inline">{{ categoryTree.name }}</h3>
56
- </a>
57
- </li>
58
- </template>
59
-
60
- <script setup lang="ts">
61
- import type { CategoryTree, SubcategoryTree } from '@@sf/composables/use-shop-header';
62
-
63
- export interface Props {
64
- categoryTree: CategoryTree | SubcategoryTree;
65
- }
66
-
67
- defineProps<Props>();
68
- const isOpen = ref(false);
69
- const isFaded = ref(true);
70
- watch(isOpen, (_isOpen) => {
71
- if (_isOpen) {
72
- setTimeout(() => { isFaded.value = false; }, 25);
73
- } else {
74
- isFaded.value = true;
75
- }
76
- });
77
- </script>
@@ -1,58 +0,0 @@
1
- <template>
2
- <div>
3
- <div v-for="(options, gridId) in variationsGrids" :key="gridId">
4
- <span class="text-base-700 text-sm font-medium">
5
- {{ getGridTitle(gridId) }}:
6
- <strong v-if="selectedOptions[gridId]" class="text-base-800">
7
- {{ selectedOptions[gridId] }}
8
- </strong>
9
- </span>
10
- <ul v-if="options.length < 7" class="mt-2 flex gap-2">
11
- <li v-for="(optionText, i) in options" :key="`${gridId}-${i}`">
12
- <button
13
- class="ring-secondary/60 rounded border"
14
- :class="[
15
- selectedOptions[gridId] === optionText
16
- ? 'border-secondary ring-2'
17
- : null,
18
- gridId === 'colors'
19
- ? 'h-9 w-9 text-[0]'
20
- : 'px-2 py-1',
21
- activeVariationsGrids[gridId].includes(optionText)
22
- ? 'text-base-800 bg-base-100 border-base-400'
23
- : 'text-base-500 bg-base-200 border-base-300'
24
- ]"
25
- :style="gridId === 'colors' ? getColorOptionBg(optionText) : undefined"
26
- @click="selectOption({ optionText, gridId, gridIndex: i })"
27
- >
28
- {{ optionText }}
29
- </button>
30
- </li>
31
- </ul>
32
- </div>
33
- </div>
34
- </template>
35
-
36
- <script setup lang="ts">
37
- import {
38
- type Props as UseSkuSelector,
39
- useSkuSelector,
40
- } from '@@sf/composables/use-sku-selector';
41
-
42
- export interface Props extends UseSkuSelector {}
43
-
44
- const props = defineProps<Props>();
45
- const emit = defineEmits(['update:variationId']);
46
- const {
47
- variationsGrids,
48
- activeVariationsGrids,
49
- selectOption,
50
- selectedOptions,
51
- variationId,
52
- getGridTitle,
53
- getColorOptionBg,
54
- } = useSkuSelector(props);
55
- watch(variationId, (_id) => {
56
- emit('update:variationId', _id);
57
- });
58
- </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,15 +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
- import '@fontsource-variable/inter/index.css';
7
- ---
8
-
9
- <SfBase>
10
- <Fragment slot="base-head">
11
- <slot name="base-head" />
12
- </Fragment>
13
- <InlineScripts slot="before-head-end" />
14
- <slot />
15
- </SfBase>