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,79 +0,0 @@
1
- :root {
2
- --custom-font-sans: "Inter Variable";
3
- --c-on-primary: rgb(0, 0, 0);
4
- --un-prose-links: rgb(var(--rgb-primary-700));
5
- }
6
-
7
- html {
8
- scroll-behavior: smooth;
9
- }
10
- body {
11
- overflow-x: hidden;
12
- }
13
- a, button, button > *, [role=button], [role=button] > * {
14
- transition: background-color var(--transition),
15
- color var(--transition), border-color var(--transition),
16
- opacity var(--transition), transform var(--transition-fast);
17
- }
18
-
19
- .ui-link {
20
- @apply not-prose font-medium text-primary underline underline-offset-4
21
- decoration-primary/70 hover:text-primary-bold active:text-primary-subtle;
22
- }
23
-
24
- [class*=ui-btn] {
25
- @apply not-prose inline-block text-base font-medium px-4 py-2 rounded
26
- border-2 border-transparent focus:ring-1 focus:ring-offset-1 active:ring-2;
27
- }
28
- .ui-btn-sm {
29
- @apply text-sm px-3 py-1.5 border-1;
30
- }
31
- .ui-btn-lg {
32
- @apply font-bold px-6 py-2.5 active:ring-3;
33
- }
34
- .ui-btn-primary {
35
- @apply primary border-primary hover:primary-bold ring-primary/30;
36
- }
37
- .ui-btn-secondary {
38
- @apply bg-secondary-100/50 text-secondary border-secondary
39
- hover:secondary ring-secondary/30;
40
- }
41
- .ui-btn-contrast {
42
- @apply bg-primary-50 text-on-primary hover:bg-primary-100 ring-white/30;
43
- }
44
-
45
- .ui-text-brand, .ui-title {
46
- @apply font-brand font-black italic;
47
- }
48
- .ui-title {
49
- @apply not-prose text-3xl xl:text-5xl;
50
- }
51
-
52
- [class*=ui-badge] {
53
- @apply text-center px-2.5 py-0.5 rounded-md font-semibold
54
- inline-block bg-secondary-200 text-secondary-900;
55
- }
56
- [class*=ui-badge-pill] {
57
- @apply py-0 rounded-full;
58
- }
59
- .ui-badge-pill-sm {
60
- @apply text-xs min-w-[1rem] px-0.5;
61
- }
62
- .ui-badge-pill-lg {
63
- @apply text-lg min-w-[1.75rem] px-2;
64
- }
65
-
66
- .ui-alert {
67
- @apply bg-warning-100 text-warning-800 border-warning-200
68
- border text-base rounded px-4 py-3;
69
- }
70
-
71
- [class*=ui-section] {
72
- @apply container 2xl:max-w-7xl mx-auto px-4 sm:px-2 my-6 md:my-8;
73
- }
74
- .ui-section {
75
- @apply sm:px-2 my-6 md:my-8;
76
- }
77
- .ui-section-slim {
78
- @apply my-3;
79
- }
@@ -1,97 +0,0 @@
1
- <template>
2
- <Menu
3
- as="div"
4
- class="text-base-800 relative text-center text-sm"
5
- v-slot="{ open }"
6
- >
7
- <div v-if="open">
8
- <span v-once>{{ initializeFirebaseAuth() }}</span>
9
- </div>
10
- <AccountLink role="button" @click.prevent>
11
- <MenuButton class="outline-none" :aria-label="$t.i19myAccount">
12
- <slot name="button" v-bind="{ open }" />
13
- </MenuButton>
14
- </AccountLink>
15
- <Fade>
16
- <MenuItems class="divide-base-100 absolute -right-8 mt-2
17
- w-56 divide-y rounded-md bg-white shadow ring-1
18
- ring-black/5 focus:outline-none">
19
- <div class="text-base-600 p-3">
20
- {{ `${$t.i19hello} ${customerName || $t.i19visitor}` }}
21
- <AccountLink role="button" class="ui-btn-sm ui-btn-primary my-1 block">
22
- {{ $t.i19accessMyAccount }}
23
- </AccountLink>
24
- <AccountLink
25
- v-if="!isLogged"
26
- class="text-primary-700 hover:text-primary-bold block font-medium"
27
- is-sign-up
28
- >
29
- {{ $t.i19createAnAccount }}
30
- </AccountLink>
31
- </div>
32
- <ul class="list-none">
33
- <MenuItem as="li" v-slot="{ active }">
34
- <AccountLink
35
- to="orders"
36
- class="block p-2"
37
- :class="active ? 'bg-base-100 text-primary-700' : null"
38
- >
39
- {{ $t.i19myOrders }}
40
- </AccountLink>
41
- </MenuItem>
42
- <MenuItem
43
- as="li"
44
- v-slot="{ active }"
45
- v-for="({ title, href }, i) in $settings.serviceLinks"
46
- :key="`s-${i}`"
47
- >
48
- <ALink
49
- :href="href"
50
- class="block p-2"
51
- :class="[
52
- active ? 'bg-base-100 text-primary-700' : null,
53
- i === 0 ? 'font-semibold' : null,
54
- ]"
55
- >
56
- {{ title }}
57
- </ALink>
58
- </MenuItem>
59
- <MenuItem as="li">
60
- <div class="text-base-500 flex justify-center gap-2 p-2 text-base">
61
- <span v-for="(href, network) in socialNetworks" :key="network">
62
- <SocialNetworkLink
63
- :network="network"
64
- class="hover:text-primary-bold p-1"
65
- />
66
- </span>
67
- </div>
68
- </MenuItem>
69
- <MenuItem v-if="isLogged" as="li">
70
- <button @click="logout" class="text-base-800 p-2 text-right">
71
- <span class="text-base-600">{{ $t.i19logout }}</span>
72
- <i class="i-logout-circle-r-line ml-1 text-lg"></i>
73
- </button>
74
- </MenuItem>
75
- </ul>
76
- </MenuItems>
77
- </Fade>
78
- </Menu>
79
- </template>
80
-
81
- <script setup lang="ts">
82
- import {
83
- Menu,
84
- MenuButton,
85
- MenuItems,
86
- MenuItem,
87
- } from '@headlessui/vue';
88
- import { socialNetworks } from '@@sf/sf-lib';
89
- import {
90
- customerName,
91
- initializeFirebaseAuth,
92
- isLogged,
93
- logout,
94
- } from '@@sf/state/customer-session';
95
- import AccountLink from '@@sf/components/AccountLink.vue';
96
- import SocialNetworkLink from '@@sf/components/SocialNetworkLink.vue';
97
- </script>
@@ -1,62 +0,0 @@
1
- <template>
2
- <article class="from-secondary-700 to-secondary-950 flex
3
- min-h-screen w-full flex-col justify-center bg-gradient-to-br">
4
- <div class="mx-auto p-4">
5
- <section class="ui-section text-center">
6
- <a href="/" class="text-base-200 hover:text-white">
7
- <i class="i-arrow-right mr-1 rotate-180"></i>
8
- {{ $t.i19goToStore }}
9
- </a>
10
- </section>
11
- <section class="overflow-hidden rounded-md
12
- shadow-md ring-4 ring-black/10">
13
- <LoginForm v-bind="{ loginLinkActionUrl }">
14
- <template #head>
15
- <div class="mb-5 text-center">
16
- <a href="/" class="inline-block">
17
- <slot name="logo" />
18
- </a>
19
- </div>
20
- </template>
21
- </LoginForm>
22
- </section>
23
- <nav v-if="$settings.serviceLinks?.length" class="ui-section px-0">
24
- <ul class="mx-auto flex max-w-sm flex-wrap items-center
25
- justify-evenly gap-4 px-3">
26
- <li
27
- v-for="({ title, href }, i) in $settings.serviceLinks"
28
- :key="`s-${i}`"
29
- >
30
- <ALink :href="href" class="ui-link text-base-200 hover:text-white">
31
- {{ title }}
32
- </ALink>
33
- </li>
34
- </ul>
35
- </nav>
36
- </div>
37
- </article>
38
- </template>
39
-
40
- <script setup lang="ts">
41
- import { isLogged } from '@@sf/state/customer-session';
42
- import LoginForm from '~/components/LoginForm.vue';
43
-
44
- let loginLinkActionUrl: string | null = null;
45
- if (!import.meta.env.SSR) {
46
- const { location } = window;
47
- const returnUrl = new URLSearchParams(location.search).get('return_url');
48
- if (!returnUrl) {
49
- const url = new URL(location.toString());
50
- url.pathname = '/app/';
51
- url.hash = `#${location.pathname.replace('/app/', '/')}`;
52
- loginLinkActionUrl = url.toString();
53
- }
54
- watch(isLogged, () => {
55
- if (isLogged.value) {
56
- location.href = (returnUrl || loginLinkActionUrl) as string;
57
- }
58
- }, {
59
- immediate: true,
60
- });
61
- }
62
- </script>
@@ -1,59 +0,0 @@
1
- <template>
2
- <div
3
- class="mx-auto overflow-x-hidden"
4
- :class="hasHeader ? 'grid grid-cols-1 sm:grid-cols-2 items-center' : null"
5
- >
6
- <ALink
7
- :href="href"
8
- :class="hasHeader
9
- ? 'sm:order-last [&_img]:max-w-full sm:[&_img]:max-w-none'
10
- + ' [&_img]:aspect-video sm:[&_img]:aspect-[2.5] [&_img]:object-cover'
11
- : '[&_img]:max-w-full'"
12
- >
13
- <slot name="picture" />
14
- </ALink>
15
- <div
16
- v-if="hasHeader"
17
- class="mb-3 p-12 sm:mb-0 xl:ps-32"
18
- >
19
- <Component
20
- v-if="parsedTitle"
21
- :is="headingTag"
22
- class="ui-title mt-1"
23
- >
24
- {{ parsedTitle }}
25
- </Component>
26
- <p v-if="parsedSubtitle" class="mt-4 text-lg md:mt-6">
27
- {{ parsedSubtitle }}
28
- </p>
29
- <ALink
30
- v-if="parsedButtonText"
31
- :href="buttonLink"
32
- class="ui-btn-lg ui-btn-contrast mt-7 min-w-[150px] md:mt-10"
33
- >
34
- {{ parsedButtonText }}
35
- </ALink>
36
- </div>
37
- </div>
38
- </template>
39
-
40
- <script setup lang="ts">
41
- import {
42
- type Props as UseBannerProps,
43
- useBanner,
44
- } from '@@sf/composables/use-banner';
45
-
46
- export type Props = UseBannerProps & {
47
- headingTag?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
48
- }
49
-
50
- const props = withDefaults(defineProps<Props>(), {
51
- headingTag: 'h3',
52
- });
53
- const {
54
- hasHeader,
55
- parsedTitle,
56
- parsedSubtitle,
57
- parsedButtonText,
58
- } = useBanner(props);
59
- </script>
@@ -1,25 +0,0 @@
1
- ---
2
- import type { Props as UseBannerProps } from '@@sf/composables/use-banner';
3
- import BannerPictures from '@@sf/components/BannerPictures.astro';
4
- import Banner from '~/components/Banner.vue';
5
-
6
- export type Props = {
7
- title?: string;
8
- titleLink?: string;
9
- banners: UseBannerProps[];
10
- }
11
-
12
- const { banners } = Astro.props;
13
- ---
14
-
15
- <section class="ui-section">
16
- <ul class="flex flex-wrap lg:flex-nowrap gap-4">
17
- {banners.map((banner) => (
18
- <li class="lg:flex-1 [&_img]:w-full [&_img]:object-cover">
19
- <Banner {...banner}>
20
- <BannerPictures {...banner} slot="picture" />
21
- </Banner>
22
- </li>
23
- ))}
24
- </ul>
25
- </section>
@@ -1,44 +0,0 @@
1
- ---
2
- import {
3
- type Props as UseBreadcrumbsProps,
4
- useBreadcrumbs,
5
- } from '@@sf/composables/use-breadcrumbs';
6
-
7
- export interface Props extends UseBreadcrumbsProps {}
8
-
9
- const { breadcrumbs, inlineJSONLd } = await useBreadcrumbs(Astro.props);
10
- ---
11
-
12
- {breadcrumbs.length > 0 &&
13
- <section class={`ui-section-slim ${breadcrumbs.length > 1 ? '' : 'hidden lg:block'}`}>
14
- <nav aria-label="Breadcrumb" class="w-full overflow-hidden text-lg md:text-sm">
15
- <ol class="flex items-center gap-1 text-base-600">
16
- <li>
17
- <a href="/" class="hover:text-primary">
18
- <span class="sr-only"> Home </span>
19
- <i class="i-home"></i>
20
- </a>
21
- </li>
22
- {breadcrumbs.map(({ name, link }, i) =>
23
- <>
24
- {i + 1 < breadcrumbs.length
25
- ? <li class="text-base-300">
26
- <i class="i-chevron-right"></i>
27
- </li>
28
- <li class="whitespace-nowrap">
29
- <a href={link} class="hover:text-primary">{name}</a>
30
- </li>
31
- : <li class="hidden lg:block text-base-300">
32
- <i class="i-chevron-right"></i>
33
- </li>
34
- <li class="hidden lg:block whitespace-nowrap overflow-hidden text-ellipsis">
35
- <span class="text-base-500">{name}</span>
36
- </li>
37
- }
38
- </>
39
- )}
40
- </ol>
41
- </nav>
42
- {inlineJSONLd && <script type="application/ld+json" set:html={inlineJSONLd} />}
43
- </section>
44
- }
@@ -1,64 +0,0 @@
1
- <template>
2
- <article class="relative bg-white shadow-sm">
3
- <ALink :href="link" class="group flex items-center gap-5 p-4">
4
- <AImg
5
- v-if="image"
6
- :picture="image"
7
- :alt="title"
8
- class="h-20 w-20 object-cover"
9
- />
10
- <p class="text-base-700 group-hover:text-base-900 flex-auto py-2
11
- text-sm group-hover:underline">
12
- {{ title }}
13
- </p>
14
- </ALink>
15
- <button
16
- v-if="cartItem._id"
17
- @click.stop="removeCartItem(cartItem._id)"
18
- class="absolute right-0 top-0 p-2 opacity-70 hover:opacity-100"
19
- :aria-label="$t.i19remove"
20
- >
21
- <span class="border-3 text-danger-800 border-danger-700/30 flex h-5 w-5 flex-col
22
- justify-center rounded-full text-sm leading-none">
23
- <i class="i-close mx-auto my-0"></i>
24
- </span>
25
- </button>
26
- <div class="border-base-100 flex items-center justify-between border-t-2">
27
- <div class="border-base-100 border-r-2">
28
- <QuantitySelector
29
- v-model="cartItem.quantity"
30
- :min="cartItem.min_quantity"
31
- :max="cartItem.max_quantity"
32
- />
33
- </div>
34
- <Prices
35
- :base-price="cartItem.base_price"
36
- :price="finalPrice"
37
- :has-cashback="false"
38
- :has-price-options="false"
39
- class="px-4 py-2.5 text-right text-[95%]"
40
- />
41
- </div>
42
- </article>
43
- </template>
44
-
45
- <script setup lang="ts">
46
- import { removeCartItem } from '@@sf/state/shopping-cart';
47
- import {
48
- type Props as UseCartItemProps,
49
- useCartItem,
50
- } from '@@sf/composables/use-cart-item';
51
- import QuantitySelector from '@@sf/components/QuantitySelector.vue';
52
- import Prices from '~/components/Prices.vue';
53
-
54
- export type Props = UseCartItemProps;
55
-
56
- const props = defineProps<Props>();
57
- const {
58
- cartItem,
59
- title,
60
- link,
61
- image,
62
- finalPrice,
63
- } = useCartItem(props);
64
- </script>
@@ -1,69 +0,0 @@
1
- <template>
2
- <aside class="flex h-screen flex-col bg-white">
3
- <header class="z-10 flex items-center justify-end gap-3 px-6
4
- py-4 shadow ring-1 ring-black/5">
5
- <span class="text-base-600 text-right text-base font-medium">
6
- {{ $t.i19myShoppingCart }}
7
- </span>
8
- <span class="min-w-[3rem] text-right">
9
- <span class="ui-badge-pill-lg">
10
- {{ totalItems }}
11
- </span>
12
- </span>
13
- </header>
14
- <article class="bg-base-50 grow overflow-y-auto">
15
- <div v-if="freeShippingFromValue" class="text-center text-sm">
16
- <div
17
- v-if="freeShippingFromValue > shoppingCart.subtotal"
18
- class="secondary-subtle p-3"
19
- >
20
- {{ $t.i19add$1ToEarn.replace('$1',
21
- $money(freeShippingFromValue - shoppingCart.subtotal)) }}
22
- <strong class="lowercase">{{ $t.i19freeShipping }}</strong>
23
- </div>
24
- <div v-else class="bg-success-50 text-success-800 p-3">
25
- <i class="text-success-900 i-check mr-1"></i>
26
- {{ $t.i19freeShippingFrom }} {{ $money(freeShippingFromValue) }}
27
- </div>
28
- </div>
29
- <ul class="px-4 pb-2 pt-4">
30
- <li v-for="(item, i) in shoppingCart.items" :key="i">
31
- <CartItem :item="item" class="mb-3" />
32
- </li>
33
- </ul>
34
- </article>
35
- <footer class="z-10 px-5 pb-3 pt-4 ring-2 ring-black/5">
36
- <div class="grid grid-cols-5 items-center gap-3 text-right">
37
- <div class="col-span-2">
38
- {{ $t.i19subtotal }}
39
- </div>
40
- <Prices :price="shoppingCart.subtotal" class="col-span-3 text-lg" />
41
- </div>
42
- <CheckoutLink
43
- to="checkout"
44
- class="ui-btn-lg ui-btn-primary my-2.5 w-full text-right"
45
- >
46
- <i class="i-check mr-2"></i>
47
- {{ $t.i19checkout }}
48
- </CheckoutLink>
49
- <a
50
- href="#"
51
- @click.prevent="emit('close')"
52
- class="ui-link text-base-500 hover:text-base-700 text-sm"
53
- >
54
- <i class="i-arrow-right-line mr-1 rotate-180"></i>
55
- {{ $t.i19continueShopping }}
56
- </a>
57
- </footer>
58
- </aside>
59
- </template>
60
-
61
- <script setup lang="ts">
62
- import { freeShippingFromValue } from '@@sf/state/modules-info';
63
- import { shoppingCart, totalItems } from '@@sf/state/shopping-cart';
64
- import CheckoutLink from '@@sf/components/CheckoutLink.vue';
65
- import Prices from '~/components/Prices.vue';
66
- import CartItem from '~/components/CartItem.vue';
67
-
68
- const emit = defineEmits(['close']);
69
- </script>
@@ -1,49 +0,0 @@
1
- ---
2
- import Picture from "@@sf/components/Picture.astro";
3
-
4
- const logos = [{
5
- filename: 'logo-pfizer.webp',
6
- name: 'Pfizer',
7
- }, {
8
- filename: 'logo-mastercard.webp',
9
- name: 'Mastercard',
10
- className: 'mx-auto px-1 lg:px-6',
11
- }, {
12
- filename: 'logo-arcelor-mittal.webp',
13
- name: 'Arcelor Mittal',
14
- }, {
15
- filename: 'logo-banco-pan.webp',
16
- name: 'Banco Pan',
17
- }, {
18
- filename: 'logo-brinks.webp',
19
- name: 'Brinks',
20
- }, {
21
- filename: 'logo-prudential.webp',
22
- name: 'Prudential',
23
- }, {
24
- filename: 'logo-azul.webp',
25
- name: 'Azul',
26
- }, {
27
- filename: 'logo-unimed.webp',
28
- name: 'Unimed',
29
- }]
30
- ---
31
-
32
- <article class="text-center my-4 px-8">
33
- <p class="text-base sm:text-lg mb-7 lg:mb-9">
34
- Junte-se a mais de 20.000+ empresas que utilizam nossa tecnologia
35
- </p>
36
- <div class="grid gap-6 grid-cols-3 md:grid-cols-4 items-center
37
- max-w-3xl mx-auto">
38
- {logos.map(({ filename, name, className }) =>
39
- <div class={className || 'mx-auto'}>
40
- <Picture
41
- src={`/img/uploads/${filename}`}
42
- alt={name}
43
- widths={[180, 300]}
44
- class="max-w-[90px] sm:max-w-[150px]"
45
- />
46
- </div>
47
- )}
48
- </div>
49
- </article>
@@ -1,33 +0,0 @@
1
- <template>
2
- <article class="flex min-h-screen flex-col justify-end">
3
- <section class="grow">
4
- <article id="storefront-app"></article>
5
- </section>
6
- <section class="bg-base-50 mt-4 lg:mt-8">
7
- <nav class="ui-section-slim">
8
- <ul class="mt-6 flex flex-wrap justify-center gap-6 lg:gap-8">
9
- <li
10
- v-for="({ title, href }, i) in $settings.serviceLinks"
11
- :key="`s-${i}`"
12
- >
13
- <ALink :href="href" target="blank" class="ui-link text-base-700">
14
- {{ title }}
15
- <i class="bg-base-300 i-arrow-top-right-on-square ml-0.5"></i>
16
- </ALink>
17
- </li>
18
- </ul>
19
- </nav>
20
- <FooterStamps :stamps="footerStamps" />
21
- </section>
22
- </article>
23
- </template>
24
-
25
- <script setup lang="ts">
26
- import FooterStamps from '~/components/FooterStamps.vue';
27
-
28
- export interface Props {
29
- footerStamps: InstanceType<typeof FooterStamps>['$props']['stamps'];
30
- }
31
-
32
- defineProps<Props>();
33
- </script>
@@ -1,19 +0,0 @@
1
- <template>
2
- <details class="[&_i]:open:rotate-180">
3
- <summary role="button" class="text-base-700 hover:text-base-800
4
- [&>i]:hover:text-primary my-4 list-none text-2xl
5
- font-medium lowercase md:my-5">
6
- <i class="i-chevron-down mr-1"></i>
7
- <span>{{ title }}</span>
8
- </summary>
9
- <slot />
10
- </details>
11
- </template>
12
-
13
- <script setup lang="ts">
14
- export interface Props {
15
- title: string;
16
- }
17
-
18
- defineProps<Props>();
19
- </script>
@@ -1,10 +0,0 @@
1
- <template>
2
- <iframe
3
- loading="lazy"
4
- id="ytplayer"
5
- width="700"
6
- class="aspect-video max-w-full shrink-0"
7
- src="https://www.youtube.com/embed/u_TLiNHvrLo?autoplay=0"
8
- frameborder="0"
9
- />
10
- </template>
@@ -1,28 +0,0 @@
1
- <template>
2
- <section v-if="html" class="ui-section">
3
- <Collapse :title="title || $t.i19description" open>
4
- <ContentClearfix :html="html" />
5
- </Collapse>
6
- </section>
7
- </template>
8
-
9
- <script setup lang="ts">
10
- import type {
11
- Products,
12
- Categories,
13
- Brands,
14
- Collections,
15
- } from '@cloudcommerce/api/types';
16
- import ContentClearfix from '@@sf/components/ContentClearfix.vue';
17
- import Collapse from '~/components/Collapse.vue';
18
-
19
- export interface Props {
20
- apiDoc?: Partial<Products | Categories | Brands | Collections>;
21
- title?: string;
22
- }
23
-
24
- const props = withDefaults(defineProps<Props>(), {
25
- apiDoc: () => globalThis.$storefront.apiContext?.doc as Products,
26
- });
27
- const html = computed(() => props.apiDoc.body_html || props.apiDoc.body_text);
28
- </script>