cloudcommerce 0.37.0 → 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.
- package/.github/workflows/test-apps.yml +2 -2
- package/.gitmodules +0 -3
- package/.vscode/settings.json +0 -1
- package/CHANGELOG.md +14 -0
- package/action.yml +2 -2
- package/ecomplus-stores/barra-doce/functions/many/package.json +3 -3
- package/ecomplus-stores/barra-doce/functions/ssr/package.json +6 -6
- package/ecomplus-stores/barra-doce/functions/with-apps/package.json +3 -3
- package/ecomplus-stores/barra-doce/package.json +2 -2
- package/package.json +2 -2
- package/packages/api/package.json +1 -1
- package/packages/apps/affilate-program/package.json +1 -1
- package/packages/apps/correios/package.json +1 -1
- package/packages/apps/custom-payment/package.json +1 -1
- package/packages/apps/custom-shipping/package.json +1 -1
- package/packages/apps/datafrete/package.json +1 -1
- package/packages/apps/discounts/package.json +1 -1
- package/packages/apps/emails/package.json +1 -1
- package/packages/apps/fb-conversions/package.json +1 -1
- package/packages/apps/flash-courier/package.json +1 -1
- package/packages/apps/frenet/package.json +1 -1
- package/packages/apps/galaxpay/package.json +1 -1
- package/packages/apps/google-analytics/package.json +1 -1
- package/packages/apps/jadlog/package.json +1 -1
- package/packages/apps/loyalty-points/package.json +1 -1
- package/packages/apps/mandae/package.json +1 -1
- package/packages/apps/melhor-envio/package.json +1 -1
- package/packages/apps/mercadopago/package.json +1 -1
- package/packages/apps/pagarme/package.json +1 -1
- package/packages/apps/pagarme-v5/package.json +1 -1
- package/packages/apps/paghiper/package.json +1 -1
- package/packages/apps/pix/package.json +1 -1
- package/packages/apps/tiny-erp/package.json +1 -1
- package/packages/apps/webhooks/package.json +1 -1
- package/packages/cli/package.json +1 -1
- package/packages/config/package.json +1 -1
- package/packages/emails/package.json +1 -1
- package/packages/eslint/package.json +1 -1
- package/packages/events/package.json +1 -1
- package/packages/feeds/package.json +1 -1
- package/packages/firebase/package.json +1 -1
- package/packages/i18n/package.json +1 -1
- package/packages/modules/package.json +1 -1
- package/packages/passport/package.json +1 -1
- package/packages/ssr/package.json +1 -1
- package/packages/storefront/package.json +3 -3
- package/packages/storefront/src/helpers/sf-utils.ts +8 -5
- package/packages/storefront/src/lib/composables/use-search-modal.ts +30 -26
- package/packages/storefront/src/lib/composables/use-shop-header.ts +69 -1
- package/packages/storefront/src/lib/state/search-engine.ts +20 -4
- package/packages/storefront/src/lib/state/use-analytics.ts +27 -11
- package/packages/test-base/package.json +1 -1
- package/packages/types/package.json +1 -1
- package/ecomplus-stores/monocard/.devcontainer/devcontainer.json +0 -30
- package/ecomplus-stores/monocard/.editorconfig +0 -13
- package/ecomplus-stores/monocard/.eslintrc.cjs +0 -3
- package/ecomplus-stores/monocard/.firebaserc +0 -5
- package/ecomplus-stores/monocard/.github/build-and-deploy +0 -1
- package/ecomplus-stores/monocard/.github/renovate.json +0 -5
- package/ecomplus-stores/monocard/.github/workflows/build-and-deploy.yml +0 -37
- package/ecomplus-stores/monocard/.github/workflows/calibreapp-image-actions.yml +0 -23
- package/ecomplus-stores/monocard/.gitpod.yml +0 -12
- package/ecomplus-stores/monocard/.idx/dev.nix +0 -24
- package/ecomplus-stores/monocard/.nvmrc +0 -1
- package/ecomplus-stores/monocard/.vscode/extensions.json +0 -8
- package/ecomplus-stores/monocard/.vscode/launch.json +0 -11
- package/ecomplus-stores/monocard/.vscode/settings.json +0 -13
- package/ecomplus-stores/monocard/LICENSE.md +0 -230
- package/ecomplus-stores/monocard/README.md +0 -31
- package/ecomplus-stores/monocard/SETUP.md +0 -129
- package/ecomplus-stores/monocard/SETUP.pt-BR.md +0 -129
- package/ecomplus-stores/monocard/functions/config.json +0 -3
- package/ecomplus-stores/monocard/functions/example.env +0 -10
- package/ecomplus-stores/monocard/functions/many/index.js +0 -14
- package/ecomplus-stores/monocard/functions/many/package.json +0 -22
- package/ecomplus-stores/monocard/functions/ssr/.eslintrc.cjs +0 -6
- package/ecomplus-stores/monocard/functions/ssr/astro.config.mjs +0 -4
- package/ecomplus-stores/monocard/functions/ssr/content/blog/.gitkeep +0 -0
- package/ecomplus-stores/monocard/functions/ssr/content/extra-pages/terms.json +0 -11
- package/ecomplus-stores/monocard/functions/ssr/content/extra-pages/trocas.json +0 -11
- package/ecomplus-stores/monocard/functions/ssr/content/layout.json +0 -52
- package/ecomplus-stores/monocard/functions/ssr/content/pages/home.json +0 -20
- package/ecomplus-stores/monocard/functions/ssr/content/pages/products.json +0 -18
- package/ecomplus-stores/monocard/functions/ssr/content/settings.json +0 -78
- package/ecomplus-stores/monocard/functions/ssr/index.js +0 -18
- package/ecomplus-stores/monocard/functions/ssr/package.json +0 -36
- package/ecomplus-stores/monocard/functions/ssr/public/admin/.gitkeep +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/assets/lotties/img_1.png +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/assets/lotties/img_1.webp +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/assets/lotties/phone-nfc.json +0 -1
- package/ecomplus-stores/monocard/functions/ssr/public/img/icon.png +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/img/large-icon.png +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/card-phone.png +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/devices.jpg +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/ecom-icon.png +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/edit-suit.jpg +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/favicon.png +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/icon.png +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/large-icon.png +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/logo-arcelor-mittal.webp +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/logo-azul.webp +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/logo-banco-pan.webp +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/logo-brinks.webp +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/logo-mastercard.webp +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/logo-pfizer.webp +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/logo-prudential.webp +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/logo-unimed.webp +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/logo.webp +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/mockup-editar.png +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/og-image.png +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/padronagem-tilada.png +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/qrcode-camera.png +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/sua-logo-aqui.png +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/robots.txt +0 -6
- package/ecomplus-stores/monocard/functions/ssr/scripts/build.sh +0 -14
- package/ecomplus-stores/monocard/functions/ssr/src/assets/card.css +0 -99
- package/ecomplus-stores/monocard/functions/ssr/src/assets/style.css +0 -79
- package/ecomplus-stores/monocard/functions/ssr/src/components/AccountMenu.vue +0 -97
- package/ecomplus-stores/monocard/functions/ssr/src/components/AccountPage.vue +0 -62
- package/ecomplus-stores/monocard/functions/ssr/src/components/Banner.vue +0 -59
- package/ecomplus-stores/monocard/functions/ssr/src/components/BannersGrid.astro +0 -25
- package/ecomplus-stores/monocard/functions/ssr/src/components/Breadcrumbs.astro +0 -44
- package/ecomplus-stores/monocard/functions/ssr/src/components/CartItem.vue +0 -64
- package/ecomplus-stores/monocard/functions/ssr/src/components/CartSidebar.vue +0 -69
- package/ecomplus-stores/monocard/functions/ssr/src/components/CasesGrid.astro +0 -49
- package/ecomplus-stores/monocard/functions/ssr/src/components/CheckoutPage.vue +0 -33
- package/ecomplus-stores/monocard/functions/ssr/src/components/Collapse.vue +0 -19
- package/ecomplus-stores/monocard/functions/ssr/src/components/DemoVideo.vue +0 -10
- package/ecomplus-stores/monocard/functions/ssr/src/components/DocDescription.vue +0 -28
- package/ecomplus-stores/monocard/functions/ssr/src/components/FeatureTabs.vue +0 -286
- package/ecomplus-stores/monocard/functions/ssr/src/components/FeaturesSection.astro +0 -28
- package/ecomplus-stores/monocard/functions/ssr/src/components/FooterStamps.vue +0 -63
- package/ecomplus-stores/monocard/functions/ssr/src/components/ImagesGallery.vue +0 -154
- package/ecomplus-stores/monocard/functions/ssr/src/components/LoginForm.vue +0 -107
- package/ecomplus-stores/monocard/functions/ssr/src/components/LottiePhoneNFC.vue +0 -20
- package/ecomplus-stores/monocard/functions/ssr/src/components/MonocardCustomizer.vue +0 -261
- package/ecomplus-stores/monocard/functions/ssr/src/components/PitchBar.vue +0 -61
- package/ecomplus-stores/monocard/functions/ssr/src/components/Prices.vue +0 -95
- package/ecomplus-stores/monocard/functions/ssr/src/components/ProductCard.vue +0 -117
- package/ecomplus-stores/monocard/functions/ssr/src/components/ProductDetails.vue +0 -122
- package/ecomplus-stores/monocard/functions/ssr/src/components/ProductShelf.vue +0 -57
- package/ecomplus-stores/monocard/functions/ssr/src/components/ProductSpecifications.vue +0 -42
- package/ecomplus-stores/monocard/functions/ssr/src/components/SearchModal.vue +0 -6
- package/ecomplus-stores/monocard/functions/ssr/src/components/ShopFooter.vue +0 -71
- package/ecomplus-stores/monocard/functions/ssr/src/components/ShopHeader.vue +0 -137
- package/ecomplus-stores/monocard/functions/ssr/src/components/ShopHeaderMenu.vue +0 -92
- package/ecomplus-stores/monocard/functions/ssr/src/components/ShopSidenav.vue +0 -64
- package/ecomplus-stores/monocard/functions/ssr/src/components/ShopSidenavCategory.vue +0 -77
- package/ecomplus-stores/monocard/functions/ssr/src/components/SkuSelector.vue +0 -58
- package/ecomplus-stores/monocard/functions/ssr/src/env.d.ts +0 -13
- package/ecomplus-stores/monocard/functions/ssr/src/layouts/Base.astro +0 -15
- package/ecomplus-stores/monocard/functions/ssr/src/layouts/PageFooter.astro +0 -53
- package/ecomplus-stores/monocard/functions/ssr/src/layouts/PageHeader.astro +0 -35
- package/ecomplus-stores/monocard/functions/ssr/src/main/Fallback.astro +0 -10
- package/ecomplus-stores/monocard/functions/ssr/src/main/Home.astro +0 -95
- package/ecomplus-stores/monocard/functions/ssr/src/main/Sections.astro +0 -52
- package/ecomplus-stores/monocard/functions/ssr/src/main/Wildcard.astro +0 -18
- package/ecomplus-stores/monocard/functions/ssr/src/pages/[...slug].astro +0 -42
- package/ecomplus-stores/monocard/functions/ssr/src/pages/_vue.ts +0 -10
- package/ecomplus-stores/monocard/functions/ssr/src/pages/app/account.astro +0 -34
- package/ecomplus-stores/monocard/functions/ssr/src/pages/app/index.astro +0 -62
- package/ecomplus-stores/monocard/functions/ssr/src/pages/comprar/index.astro +0 -52
- package/ecomplus-stores/monocard/functions/ssr/src/pages/index.astro +0 -32
- package/ecomplus-stores/monocard/functions/ssr/src/pages/~fallback.astro +0 -23
- package/ecomplus-stores/monocard/functions/ssr/src/scripts/InlineScripts.astro +0 -10
- package/ecomplus-stores/monocard/functions/ssr/tailwind.config.cjs +0 -18
- package/ecomplus-stores/monocard/functions/ssr/tsconfig.json +0 -12
- package/ecomplus-stores/monocard/functions/ssr/uno.config.cjs +0 -5
- package/ecomplus-stores/monocard/functions/with-apps/index.js +0 -12
- package/ecomplus-stores/monocard/functions/with-apps/package.json +0 -22
- package/ecomplus-stores/monocard/package.json +0 -31
- package/ecomplus-stores/monocard/scripts/install.sh +0 -24
|
@@ -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,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>
|