cloudcommerce 0.26.6 → 0.26.7
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/CHANGELOG.md +19 -0
- 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/ssr/src/components/ShopHeader.vue +4 -1
- package/ecomplus-stores/barra-doce/functions/with-apps/package.json +3 -3
- package/ecomplus-stores/barra-doce/package.json +2 -2
- package/ecomplus-stores/barra-doce/scripts/install.sh +12 -2
- package/ecomplus-stores/iluminim/scripts/install.sh +12 -2
- package/ecomplus-stores/monocard/.firebaserc +1 -1
- package/ecomplus-stores/monocard/.github/build-and-deploy +1 -0
- package/ecomplus-stores/monocard/.github/workflows/build-and-deploy.yml +1 -0
- package/ecomplus-stores/monocard/README.md +11 -82
- package/ecomplus-stores/monocard/SETUP.md +129 -0
- package/ecomplus-stores/monocard/{README.pt-BR.md → SETUP.pt-BR.md} +39 -12
- package/ecomplus-stores/monocard/functions/config.json +1 -1
- package/ecomplus-stores/monocard/functions/{passport → many}/index.js +5 -0
- package/ecomplus-stores/monocard/functions/{events → many}/package.json +4 -3
- package/ecomplus-stores/monocard/functions/ssr/.eslintrc.cjs +1 -1
- package/ecomplus-stores/monocard/functions/ssr/content/blog/.gitkeep +0 -0
- package/ecomplus-stores/monocard/functions/ssr/content/extra-pages/contato.json +11 -0
- package/ecomplus-stores/monocard/functions/ssr/content/extra-pages/terms.json +11 -0
- package/ecomplus-stores/monocard/functions/ssr/content/extra-pages/trocas.json +11 -0
- package/ecomplus-stores/monocard/functions/ssr/content/layout.json +25 -10
- package/ecomplus-stores/monocard/functions/ssr/content/pages/home.json +63 -0
- package/ecomplus-stores/monocard/functions/ssr/content/pages/products.json +19 -0
- package/ecomplus-stores/monocard/functions/ssr/content/settings.json +22 -2
- package/ecomplus-stores/monocard/functions/ssr/package.json +8 -9
- package/ecomplus-stores/monocard/functions/ssr/public/admin/.gitkeep +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/ecom-icon.png +0 -0
- package/ecomplus-stores/monocard/functions/ssr/src/assets/card.css +99 -0
- package/ecomplus-stores/monocard/functions/ssr/src/assets/style.css +74 -0
- package/ecomplus-stores/monocard/functions/ssr/src/components/AccountMenu.vue +5 -14
- package/ecomplus-stores/monocard/functions/ssr/src/components/Banner.vue +59 -0
- package/ecomplus-stores/monocard/functions/ssr/src/components/BannersGrid.astro +25 -0
- package/ecomplus-stores/monocard/functions/ssr/src/components/Breadcrumbs.astro +44 -0
- package/ecomplus-stores/monocard/functions/ssr/src/components/CartItem.vue +64 -0
- package/ecomplus-stores/monocard/functions/ssr/src/components/CartSidebar.vue +66 -0
- package/ecomplus-stores/monocard/functions/ssr/src/components/DemoVideo.vue +8 -3
- package/ecomplus-stores/monocard/functions/ssr/src/components/DocDescription.astro +30 -0
- package/ecomplus-stores/monocard/functions/ssr/src/components/FeatureTabs.vue +2 -2
- package/ecomplus-stores/monocard/functions/ssr/src/components/LottiePhoneNFC.vue +12 -9
- package/ecomplus-stores/monocard/functions/ssr/src/components/MonocardCustomizer.vue +8 -105
- package/ecomplus-stores/monocard/functions/ssr/src/components/Prices.vue +10 -27
- package/ecomplus-stores/monocard/functions/ssr/src/components/ProductCard.vue +117 -0
- package/ecomplus-stores/monocard/functions/ssr/src/components/ProductShelf.vue +57 -0
- package/ecomplus-stores/monocard/functions/ssr/src/components/ShopFooter.vue +123 -0
- package/ecomplus-stores/monocard/functions/ssr/src/components/ShopHeader.vue +85 -32
- package/ecomplus-stores/monocard/functions/ssr/src/components/ShopHeaderMenu.vue +1 -1
- package/ecomplus-stores/monocard/functions/ssr/src/components/ShopSidenav.vue +3 -3
- package/ecomplus-stores/monocard/functions/ssr/src/components/ShopSidenavCategory.vue +2 -2
- package/ecomplus-stores/monocard/functions/ssr/src/env.d.ts +9 -1
- package/ecomplus-stores/monocard/functions/ssr/src/layouts/Base.astro +9 -44
- package/ecomplus-stores/monocard/functions/ssr/src/layouts/PageFooter.astro +52 -0
- package/ecomplus-stores/monocard/functions/ssr/src/layouts/PageHeader.astro +35 -0
- package/ecomplus-stores/monocard/functions/ssr/src/main/Fallback.astro +0 -5
- package/ecomplus-stores/monocard/functions/ssr/src/main/Home.astro +6 -12
- package/ecomplus-stores/monocard/functions/ssr/src/main/Sections.astro +38 -0
- package/ecomplus-stores/monocard/functions/ssr/src/main/Wildcard.astro +4 -18
- package/ecomplus-stores/monocard/functions/ssr/src/pages/[...slug].astro +15 -9
- package/ecomplus-stores/monocard/functions/ssr/src/pages/comprar/index.astro +19 -9
- package/ecomplus-stores/monocard/functions/ssr/src/pages/index.astro +16 -10
- package/ecomplus-stores/monocard/functions/ssr/src/pages/~fallback.astro +25 -0
- package/ecomplus-stores/monocard/functions/ssr/src/scripts/InlineScripts.astro +6 -6
- package/ecomplus-stores/monocard/functions/ssr/tailwind.config.cjs +1 -11
- package/ecomplus-stores/monocard/functions/{modules → with-apps}/index.js +3 -0
- package/ecomplus-stores/monocard/functions/{modules → with-apps}/package.json +4 -3
- package/ecomplus-stores/monocard/package.json +4 -1
- package/ecomplus-stores/monocard/scripts/install.sh +12 -2
- package/ecomplus-stores/tia-sonia/scripts/install.sh +12 -2
- package/package.json +4 -4
- 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 +2 -2
- 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/melhor-envio/package.json +1 -1
- package/packages/apps/mercadopago/package.json +1 -1
- package/packages/apps/pagarme/package.json +2 -2
- 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 +2 -2
- package/packages/config/package.json +1 -1
- package/packages/emails/package.json +1 -1
- package/packages/eslint/package.json +3 -3
- package/packages/events/package.json +1 -1
- package/packages/feeds/package.json +1 -1
- package/packages/firebase/package.json +2 -2
- package/packages/i18n/package.json +1 -1
- package/packages/modules/package.json +1 -1
- package/packages/passport/package.json +1 -1
- package/packages/ssr/lib/firebase/serve-storefront.js +23 -8
- package/packages/ssr/lib/firebase/serve-storefront.js.map +1 -1
- package/packages/ssr/package.json +2 -2
- package/packages/ssr/src/firebase/serve-storefront.ts +24 -8
- package/packages/storefront/dist/client/_astro/{Carousel.9ad2e1dc.js → Carousel.4bf71bce.js} +1 -1
- package/packages/storefront/dist/client/_astro/{CartSidebar.a6c6a885.js → CartSidebar.05b12b39.js} +1 -1
- package/packages/storefront/dist/client/_astro/{HeroSlider.ee1e6200.js → HeroSlider.fe108a14.js} +1 -1
- package/packages/storefront/dist/client/_astro/{PitchBar.6111676e.js → PitchBar.2c821b77.js} +1 -1
- package/packages/storefront/dist/client/_astro/{Prices.04ff8fce.js → Prices.78eb0a61.js} +1 -1
- package/packages/storefront/dist/client/_astro/{ProductShelf.085721d6.js → ProductShelf.46d8a51c.js} +1 -1
- package/packages/storefront/dist/client/_astro/ShopHeader.3694a82b.js +4 -0
- package/packages/storefront/dist/client/_astro/_...slug_.a4a7a874.css +1 -0
- package/packages/storefront/dist/client/_astro/ecom-icon_CDmhA.png +0 -0
- package/packages/storefront/dist/client/_astro/ecom-icon_Z27EX9f.png +0 -0
- package/packages/storefront/dist/client/_astro/ecom-icon_Zo1CLq.png +0 -0
- package/packages/storefront/dist/client/_astro/{firebase-app.8c541cce.js → firebase-app.3f59f3c7.js} +3 -3
- package/packages/storefront/dist/client/_astro/headphone_1Ekzdh.avif +0 -0
- package/packages/storefront/dist/client/_astro/headphone_Z1GbHcH.webp +0 -0
- package/packages/storefront/dist/client/_astro/{hoisted.85fdcf03.js → hoisted.648beb9d.js} +1 -1
- package/packages/storefront/dist/client/_astro/index.fadf28bd.js +1 -0
- package/packages/storefront/dist/client/_astro/logo_144owC.webp +0 -0
- package/packages/storefront/dist/client/_astro/logo_1ug3XF.png +0 -0
- package/packages/storefront/dist/client/_astro/logo_Z1EIN1I.avif +0 -0
- package/packages/storefront/dist/client/_astro/{modules-info.e5d77bf3.js → modules-info.df822732.js} +1 -1
- package/packages/storefront/dist/client/_astro/passion_1LvKlp.webp +0 -0
- package/packages/storefront/dist/client/_astro/passion_2PSWs.avif +0 -0
- package/packages/storefront/dist/client/_astro/rect8589_1A8K2Q.webp +0 -0
- package/packages/storefront/dist/client/_astro/rect8589_1ND0he.png +0 -0
- package/packages/storefront/dist/client/_astro/rect8589_1mIaKd.png +0 -0
- package/packages/storefront/dist/client/_astro/rect8589_LhopI.avif +0 -0
- package/packages/storefront/dist/client/_astro/rect8589_Z1NFjiR.avif +0 -0
- package/packages/storefront/dist/client/_astro/rect8589_Z2a06Gx.png +0 -0
- package/packages/storefront/dist/client/_astro/rect8589_Z2nulUU.webp +0 -0
- package/packages/storefront/dist/client/_astro/rect8589_ZH7hsH.avif +0 -0
- package/packages/storefront/dist/client/_astro/rect8589_ZorpIx.webp +0 -0
- package/packages/storefront/dist/client/_astro/rect859_1CcLjM.avif +0 -0
- package/packages/storefront/dist/client/_astro/rect859_1IVKep.png +0 -0
- package/packages/storefront/dist/client/_astro/rect859_1zkdb4.webp +0 -0
- package/packages/storefront/dist/client/_astro/rect859_299fN7.avif +0 -0
- package/packages/storefront/dist/client/_astro/rect859_CnIof.png +0 -0
- package/packages/storefront/dist/client/_astro/rect859_Z1OtQaE.avif +0 -0
- package/packages/storefront/dist/client/_astro/rect859_flB3g.png +0 -0
- package/packages/storefront/dist/client/_astro/rect859_rsWaw.webp +0 -0
- package/packages/storefront/dist/client/_astro/rect859_sLbkT.webp +0 -0
- package/packages/storefront/dist/client/_astro/rect89_1yf5jS.avif +0 -0
- package/packages/storefront/dist/client/_astro/rect89_GQBli.webp +0 -0
- package/packages/storefront/dist/client/~fallback.html +67 -0
- package/packages/storefront/dist/client/~index.html +113 -0
- package/packages/storefront/dist/server/chunks/{CartSidebar.41b20543.mjs → CartSidebar.4179ad81.mjs} +4 -12
- package/packages/storefront/dist/server/chunks/{SearchModal.5f5e6a15.mjs → SearchModal.146ce2f7.mjs} +4 -11
- package/packages/storefront/dist/server/chunks/{endpoint@_@js.11be892a.mjs → _...05c626ea.mjs} +3 -10
- package/packages/storefront/dist/server/chunks/{account@_@astro.204fba92.mjs → account@_@astro.5eaddaf8.mjs} +2 -9
- package/packages/storefront/dist/server/chunks/{index@_@astro.19e0f502.mjs → index@_@astro.25a343cc.mjs} +3 -10
- package/packages/storefront/dist/server/chunks/{index@_@astro.b37a6ac9.mjs → index@_@astro.2d2f2e33.mjs} +3 -10
- package/packages/storefront/dist/server/chunks/pages/{_...slug_.astro.36e8882b.mjs → _...slug_.astro.0808946e.mjs} +1836 -450
- package/packages/storefront/dist/server/chunks/pages/index.astro.d4145872.mjs +186 -0
- package/packages/storefront/dist/server/chunks/pages/{~fallback.astro.ba4c2475.mjs → ~fallback.astro.84d4765b.mjs} +6 -23
- package/packages/storefront/dist/server/chunks/{~fallback@_@astro.6bb4c4b4.mjs → ~fallback@_@astro.86d710c3.mjs} +3 -10
- package/packages/storefront/dist/server/entry.mjs +7 -14
- package/packages/storefront/dist/server/images.dist.csv +30 -0
- package/packages/storefront/dist/server/images.src.csv +11 -0
- package/packages/storefront/dist/server/renderers.mjs +2 -9
- package/packages/storefront/dist/server/static-builds.csv +51 -0
- package/packages/storefront/package.json +3 -3
- package/packages/storefront/scripts/build-prod.sh +3 -2
- package/packages/storefront/server.d.ts +1 -0
- package/packages/storefront/src/lib/assets/base.css +8 -0
- package/packages/storefront/src/lib/assets/reset.css +11 -2
- package/packages/storefront/src/lib/components/ContentClearfix.astro +4 -1
- package/packages/storefront/src/lib/components/Drawer.vue +1 -1
- package/packages/storefront/src/lib/layouts/BaseBody.astro +3 -1
- package/packages/storefront/src/lib/layouts/BaseHead.astro +8 -3
- package/packages/storefront/src/lib/layouts/use-page-header.ts +2 -2
- package/packages/test-base/package.json +1 -1
- package/packages/types/package.json +1 -1
- package/pnpm-workspace.yaml +2 -0
- package/ecomplus-stores/monocard/functions/core/index.js +0 -9
- package/ecomplus-stores/monocard/functions/core/package.json +0 -20
- package/ecomplus-stores/monocard/functions/events/index.js +0 -9
- package/ecomplus-stores/monocard/functions/passport/package.json +0 -21
- package/ecomplus-stores/monocard/functions/ssr/content/blog.json +0 -18
- package/ecomplus-stores/monocard/functions/ssr/content/brands.json +0 -24
- package/ecomplus-stores/monocard/functions/ssr/content/categories.json +0 -24
- package/ecomplus-stores/monocard/functions/ssr/content/collections.json +0 -24
- package/ecomplus-stores/monocard/functions/ssr/content/home.json +0 -45
- package/ecomplus-stores/monocard/functions/ssr/content/maintenance.json +0 -6
- package/ecomplus-stores/monocard/functions/ssr/content/pages/contato.json +0 -6
- package/ecomplus-stores/monocard/functions/ssr/content/pages/entrega.json +0 -6
- package/ecomplus-stores/monocard/functions/ssr/content/pages/faq.json +0 -6
- package/ecomplus-stores/monocard/functions/ssr/content/pages/pagamentos.json +0 -6
- package/ecomplus-stores/monocard/functions/ssr/content/pages/privacidade.json +0 -6
- package/ecomplus-stores/monocard/functions/ssr/content/pages/sobre-nos.json +0 -6
- package/ecomplus-stores/monocard/functions/ssr/content/pages/termos.json +0 -6
- package/ecomplus-stores/monocard/functions/ssr/content/pages/trocas.json +0 -6
- package/ecomplus-stores/monocard/functions/ssr/content/posts/esta-loja-e-um-pwa.json +0 -9
- package/ecomplus-stores/monocard/functions/ssr/content/products.json +0 -32
- package/ecomplus-stores/monocard/functions/ssr/content/search.json +0 -8
- package/ecomplus-stores/monocard/functions/ssr/content/widgets/analytics.json +0 -11
- package/ecomplus-stores/monocard/functions/ssr/content/widgets/compre-confie.json +0 -11
- package/ecomplus-stores/monocard/functions/ssr/content/widgets/ebit.json +0 -11
- package/ecomplus-stores/monocard/functions/ssr/content/widgets/fb-pixel.json +0 -12
- package/ecomplus-stores/monocard/functions/ssr/content/widgets/gmc-ratings.json +0 -12
- package/ecomplus-stores/monocard/functions/ssr/content/widgets/minicart.json +0 -6
- package/ecomplus-stores/monocard/functions/ssr/content/widgets/offers-notification.json +0 -11
- package/ecomplus-stores/monocard/functions/ssr/content/widgets/opinioes-verificadas.json +0 -18
- package/ecomplus-stores/monocard/functions/ssr/content/widgets/product-card.json +0 -10
- package/ecomplus-stores/monocard/functions/ssr/content/widgets/product.json +0 -13
- package/ecomplus-stores/monocard/functions/ssr/content/widgets/search-engine.json +0 -8
- package/ecomplus-stores/monocard/functions/ssr/content/widgets/search.json +0 -6
- package/ecomplus-stores/monocard/functions/ssr/content/widgets/tag-manager.json +0 -12
- package/ecomplus-stores/monocard/functions/ssr/content/widgets/tawkto.json +0 -12
- package/ecomplus-stores/monocard/functions/ssr/content/widgets/trustvox.json +0 -15
- package/ecomplus-stores/monocard/functions/ssr/content/widgets/user.json +0 -5
- package/ecomplus-stores/monocard/functions/ssr/public/admin/config.json +0 -1
- package/ecomplus-stores/monocard/functions/ssr/public/assets/cms-preview.css +0 -274
- package/ecomplus-stores/monocard/functions/ssr/public/assets/cms.css +0 -114
- package/ecomplus-stores/monocard/functions/ssr/public/assets/cvv.png +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/assets/fonts/FavoritPro-Regular.woff2 +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/assets/fonts/MyriadPro-Regular.woff2 +0 -0
- package/ecomplus-stores/monocard/functions/ssr/public/assets/ssl-safe.png +0 -0
- package/ecomplus-stores/monocard/functions/ssr/src/layouts/Pages.astro +0 -50
- package/ecomplus-stores/monocard/functions/ssr/src/pages/fallback.astro +0 -21
- package/packages/storefront/dist/client/_astro/ShopHeader.7e485e35.js +0 -4
- package/packages/storefront/dist/client/_astro/_...slug_.b693913e.css +0 -1
- package/packages/storefront/dist/client/_astro/index.ea57babe.js +0 -1
- package/packages/storefront/dist/server/chunks/_...4a2548d2.mjs +0 -35
- package/packages/storefront/dist/server/chunks/pages/endpoint.js.f7a896a1.mjs +0 -119
- package/packages/storefront/dist/server/chunks/pages/index.astro.3145bd93.mjs +0 -1649
- /package/ecomplus-stores/monocard/functions/ssr/src/components/{FeatureTabs.astro → FeaturesSection.astro} +0 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<aside class="flex flex-col h-screen bg-white">
|
|
3
|
+
<header class="px-6 py-4 flex justify-end items-center gap-3
|
|
4
|
+
shadow ring-1 ring-black/5 z-10">
|
|
5
|
+
<span class="text-right text-base text-base-600 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="grow overflow-y-auto bg-base-50">
|
|
15
|
+
<div v-if="freeShippingFromValue" class="text-sm text-center">
|
|
16
|
+
<div
|
|
17
|
+
v-if="freeShippingFromValue > shoppingCart.subtotal"
|
|
18
|
+
class="p-3 secondary-subtle"
|
|
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="p-3 bg-success-50 text-success-800">
|
|
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 pt-4 pb-2">
|
|
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="px-5 pt-4 pb-3 ring-2 ring-black/5 z-10">
|
|
36
|
+
<div class="grid grid-cols-5 gap-3 items-center 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 class="ui-btn-lg ui-btn-primary w-full text-right my-2.5">
|
|
43
|
+
<i class="i-check mr-2"></i>
|
|
44
|
+
{{ $t.i19checkout }}
|
|
45
|
+
</CheckoutLink>
|
|
46
|
+
<a
|
|
47
|
+
href="#"
|
|
48
|
+
@click.prevent="emit('close')"
|
|
49
|
+
class="ui-link text-base-500 hover:text-base-700 text-sm"
|
|
50
|
+
>
|
|
51
|
+
<i class="i-arrow-left-line mr-1"></i>
|
|
52
|
+
{{ $t.i19continueShopping }}
|
|
53
|
+
</a>
|
|
54
|
+
</footer>
|
|
55
|
+
</aside>
|
|
56
|
+
</template>
|
|
57
|
+
|
|
58
|
+
<script setup lang="ts">
|
|
59
|
+
import { freeShippingFromValue } from '@@sf/state/modules-info';
|
|
60
|
+
import { shoppingCart, totalItems } from '@@sf/state/shopping-cart';
|
|
61
|
+
import CheckoutLink from '@@sf/components/CheckoutLink.vue';
|
|
62
|
+
import Prices from '~/components/Prices.vue';
|
|
63
|
+
import CartItem from '~/components/CartItem.vue';
|
|
64
|
+
|
|
65
|
+
const emit = defineEmits(['close']);
|
|
66
|
+
</script>
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<iframe
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
<iframe
|
|
3
|
+
loading="lazy"
|
|
4
|
+
id="ytplayer"
|
|
5
|
+
width="700"
|
|
6
|
+
class="shrink-0 max-w-full aspect-video"
|
|
7
|
+
src="https://www.youtube.com/embed/u_TLiNHvrLo?autoplay=0"
|
|
8
|
+
frameborder="0"
|
|
9
|
+
/>
|
|
5
10
|
</template>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
import type {
|
|
3
|
+
Products,
|
|
4
|
+
Categories,
|
|
5
|
+
Brands,
|
|
6
|
+
Collections,
|
|
7
|
+
} from '@cloudcommerce/api/types';
|
|
8
|
+
import { i19description } from '@@i18n';
|
|
9
|
+
import ContentClearfix from '@@sf/components/ContentClearfix.astro';
|
|
10
|
+
|
|
11
|
+
export interface Props {
|
|
12
|
+
apiDoc: Partial<Products | Categories | Brands | Collections>;
|
|
13
|
+
title?: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const { apiDoc, title } = Astro.props;
|
|
17
|
+
const html = apiDoc.body_html || apiDoc.body_text;
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
{html &&
|
|
21
|
+
<section class="ui-section">
|
|
22
|
+
<p class="text-2xl font-medium lowercase text-base-700">
|
|
23
|
+
<a href="#description" id="description">
|
|
24
|
+
<i class="i-link text-base-400 mr-1"></i>
|
|
25
|
+
{title || i19description}
|
|
26
|
+
</a>
|
|
27
|
+
</p>
|
|
28
|
+
<ContentClearfix html={html} />
|
|
29
|
+
</section>
|
|
30
|
+
}
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
</TabList>
|
|
44
44
|
<TabPanels class="text-left w-72 mx-auto sm:w-auto sm:px-5 mt-4
|
|
45
45
|
md:min-h-[870px] lg:min-h-[880px] xl:min-h-[915px]">
|
|
46
|
-
<TabPanel v-motion-fade
|
|
46
|
+
<TabPanel v-motion-fade>
|
|
47
47
|
<div class="prose mb-8">
|
|
48
48
|
<h4 class="text-2xl xl:text-3xl leading-snug mb-5">
|
|
49
49
|
Conecte instantaneamente
|
|
@@ -153,7 +153,7 @@
|
|
|
153
153
|
</a>
|
|
154
154
|
</div>
|
|
155
155
|
</TabPanel>
|
|
156
|
-
<TabPanel v-motion-fade
|
|
156
|
+
<TabPanel v-motion-fade>
|
|
157
157
|
<slot name="picture-edit" />
|
|
158
158
|
<div class="flex flex-wrap md:flex-nowrap gap-x-10">
|
|
159
159
|
<div class="md:basis-1/2 prose">
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
<script lang="ts" setup>
|
|
2
2
|
import { ref, onMounted } from 'vue';
|
|
3
|
-
import lottie from 'lottie-web';
|
|
4
3
|
|
|
5
4
|
const container = ref(null);
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
5
|
+
if (!import.meta.env.SSR) {
|
|
6
|
+
onMounted(() => {
|
|
7
|
+
import('lottie-web/build/player/lottie_light').then(({ default: lottie }) => {
|
|
8
|
+
lottie.loadAnimation({
|
|
9
|
+
container: container.value as any as Element,
|
|
10
|
+
renderer: 'svg',
|
|
11
|
+
loop: true,
|
|
12
|
+
autoplay: true,
|
|
13
|
+
path: '/assets/lotties/phone-nfc.json',
|
|
14
|
+
});
|
|
15
|
+
})
|
|
13
16
|
});
|
|
14
|
-
}
|
|
17
|
+
}
|
|
15
18
|
</script>
|
|
16
19
|
|
|
17
20
|
<template>
|
|
@@ -186,7 +186,14 @@ const logoAdditionalPrice = monocardWithLogo
|
|
|
186
186
|
</form>
|
|
187
187
|
</div>
|
|
188
188
|
<div class="basis-1/2 order-1">
|
|
189
|
-
<div
|
|
189
|
+
<div
|
|
190
|
+
class="card mt-2 mb-5"
|
|
191
|
+
:class="cardAnimationClass"
|
|
192
|
+
:style="{
|
|
193
|
+
'--background-color': cardBgColor,
|
|
194
|
+
'--color': cardTextColor,
|
|
195
|
+
}"
|
|
196
|
+
>
|
|
190
197
|
<div class="card__front card__part">
|
|
191
198
|
<div class="card__front-square card__square">
|
|
192
199
|
<div class="text-5xl i-qr-code-line"></div>
|
|
@@ -253,107 +260,3 @@ const logoAdditionalPrice = monocardWithLogo
|
|
|
253
260
|
</article>
|
|
254
261
|
</div>
|
|
255
262
|
</template>
|
|
256
|
-
|
|
257
|
-
<style scoped>
|
|
258
|
-
.card {
|
|
259
|
-
--background-color: v-bind('cardBgColor');
|
|
260
|
-
--color: v-bind('cardTextColor');
|
|
261
|
-
color: var(--color);
|
|
262
|
-
width: 320px;
|
|
263
|
-
height: 190px;
|
|
264
|
-
-webkit-perspective: 600px;
|
|
265
|
-
-moz-perspective: 600px;
|
|
266
|
-
perspective:600px;
|
|
267
|
-
}
|
|
268
|
-
.card__part {
|
|
269
|
-
box-shadow: 1px 1px #aaa3a3;
|
|
270
|
-
top: 0;
|
|
271
|
-
position: absolute;
|
|
272
|
-
z-index: 1000;
|
|
273
|
-
left: 0;
|
|
274
|
-
display: inline-block;
|
|
275
|
-
width: 320px;
|
|
276
|
-
height: 190px;
|
|
277
|
-
background: var(--background-color);
|
|
278
|
-
border-radius: 8px;
|
|
279
|
-
-webkit-transition: all .5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
|
280
|
-
-moz-transition: all .5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
|
281
|
-
-ms-transition: all .5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
|
282
|
-
-o-transition: all .5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
|
283
|
-
transition: all .5s cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
|
284
|
-
transform-style: preserve-3d;
|
|
285
|
-
-webkit-transform-style: preserve-3d;
|
|
286
|
-
-moz-transform-style: preserve-3d;
|
|
287
|
-
backface-visibility: hidden;
|
|
288
|
-
-webkit-backface-visibility: hidden;
|
|
289
|
-
-moz-backface-visibility: hidden;
|
|
290
|
-
}
|
|
291
|
-
.card__front {
|
|
292
|
-
padding: 18px;
|
|
293
|
-
transform: rotateY(0);
|
|
294
|
-
-webkit-transform: rotateY(0);
|
|
295
|
-
-moz-transform: rotateY(0);
|
|
296
|
-
}
|
|
297
|
-
.card__back {
|
|
298
|
-
display: flex;
|
|
299
|
-
align-items: center;
|
|
300
|
-
justify-content: space-around;
|
|
301
|
-
transform: rotateY(-180deg);
|
|
302
|
-
-webkit-transform: rotateY(-180deg);
|
|
303
|
-
-moz-transform: rotateY(-180deg);
|
|
304
|
-
}
|
|
305
|
-
.card__back img {
|
|
306
|
-
max-width: 256px;
|
|
307
|
-
max-height: 154px;
|
|
308
|
-
}
|
|
309
|
-
.card__logo {
|
|
310
|
-
height: 16px;
|
|
311
|
-
}
|
|
312
|
-
.card__front-logo{
|
|
313
|
-
position: absolute;
|
|
314
|
-
top: 18px;
|
|
315
|
-
right: 18px;
|
|
316
|
-
}
|
|
317
|
-
.card__square {
|
|
318
|
-
border-radius: 5px;
|
|
319
|
-
height: 30px;
|
|
320
|
-
}
|
|
321
|
-
.card__space-75 {
|
|
322
|
-
margin-top: 100px;
|
|
323
|
-
width: 75%;
|
|
324
|
-
float: left;
|
|
325
|
-
}
|
|
326
|
-
.card__space-25 {
|
|
327
|
-
margin-top: 30px;
|
|
328
|
-
width: 25%;
|
|
329
|
-
float: right;
|
|
330
|
-
text-align: right;
|
|
331
|
-
}
|
|
332
|
-
.card__label {
|
|
333
|
-
font-size: 10px;
|
|
334
|
-
text-transform: uppercase;
|
|
335
|
-
color: rgba(255,255,255,0.8);
|
|
336
|
-
letter-spacing: 1px;
|
|
337
|
-
}
|
|
338
|
-
.card__info {
|
|
339
|
-
margin-bottom: 0;
|
|
340
|
-
margin-top: 5px;
|
|
341
|
-
font-size: 16px;
|
|
342
|
-
line-height: 18px;
|
|
343
|
-
color: var(--color);
|
|
344
|
-
letter-spacing: 1px;
|
|
345
|
-
text-transform: uppercase;
|
|
346
|
-
}
|
|
347
|
-
.card:not(.card--no-back):hover .card__front,
|
|
348
|
-
.card--show-back .card__front {
|
|
349
|
-
transform: rotateY(180deg);
|
|
350
|
-
-webkit-transform: rotateY(180deg);
|
|
351
|
-
-moz-transform: rotateY(180deg);
|
|
352
|
-
}
|
|
353
|
-
.card:not(.card--no-back):hover .card__back,
|
|
354
|
-
.card--show-back .card__back {
|
|
355
|
-
transform: rotateY(0deg);
|
|
356
|
-
-webkit-transform: rotateY(0deg);
|
|
357
|
-
-moz-transform: rotateY(0deg);
|
|
358
|
-
}
|
|
359
|
-
</style>
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div
|
|
3
|
-
class="text-base-600
|
|
3
|
+
class="text-base-600
|
|
4
|
+
[&>div]:[font-size:90%] [&_small]:[font-size:92%] [&_small]:lowercase"
|
|
4
5
|
:class="isBig ? 'text-lg' : null"
|
|
5
|
-
data-prices
|
|
6
6
|
>
|
|
7
|
-
<span v-if="comparePrice" class="text-base-500 mr-1">
|
|
7
|
+
<span v-if="comparePrice" class="text-base-500 mr-1 text-[87%]">
|
|
8
8
|
<small v-if="isLiteral">
|
|
9
9
|
{{ `${$t.i19from} ` }}
|
|
10
10
|
</small>
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
<div v-if="cashbackValue && hasCashback" class="relative z-10">
|
|
27
27
|
<span :data-tooltip="$t.i19get$1back
|
|
28
28
|
.replace('$1', $percentage(cashbackPercentage))">
|
|
29
|
-
<i class="i-
|
|
29
|
+
<i class="i-arrow-go-back-fill mr-1"></i>
|
|
30
30
|
<span class="font-medium">
|
|
31
31
|
{{ $money(cashbackValue) }}
|
|
32
32
|
</span>
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
</small>
|
|
46
46
|
<span>{{ $money(installmentValue) }}</span>
|
|
47
47
|
<small v-if="!monthlyInterest && isLiteral">
|
|
48
|
-
{{ $t.i19interestFree }}
|
|
48
|
+
{{ ` ${$t.i19interestFree}` }}
|
|
49
49
|
</small>
|
|
50
50
|
</div>
|
|
51
51
|
</Fade>
|
|
@@ -64,16 +64,12 @@
|
|
|
64
64
|
</template>
|
|
65
65
|
|
|
66
66
|
<script setup lang="ts">
|
|
67
|
-
import
|
|
68
|
-
|
|
67
|
+
import {
|
|
68
|
+
type Props as UsePricesProps,
|
|
69
|
+
usePrices,
|
|
70
|
+
} from '@@sf/composables/use-prices';
|
|
69
71
|
|
|
70
|
-
export interface Props {
|
|
71
|
-
product?: Partial<Products> & { price: number, final_price?: number };
|
|
72
|
-
price?: number;
|
|
73
|
-
basePrice?: number;
|
|
74
|
-
isAmountTotal?: boolean;
|
|
75
|
-
installmentsOption?: ListPaymentsResponse['installments_option'];
|
|
76
|
-
discountOption?: ListPaymentsResponse['discount_option'];
|
|
72
|
+
export interface Props extends UsePricesProps {
|
|
77
73
|
isBig?: boolean;
|
|
78
74
|
isLiteral?: boolean;
|
|
79
75
|
hasCashback?: boolean;
|
|
@@ -97,16 +93,3 @@ const {
|
|
|
97
93
|
discountLabel,
|
|
98
94
|
} = usePrices(props);
|
|
99
95
|
</script>
|
|
100
|
-
|
|
101
|
-
<style>
|
|
102
|
-
[data-prices] > span {
|
|
103
|
-
font-size: 87%;
|
|
104
|
-
}
|
|
105
|
-
[data-prices] > div {
|
|
106
|
-
font-size: 90%;
|
|
107
|
-
}
|
|
108
|
-
[data-prices] small {
|
|
109
|
-
@apply lowercase;
|
|
110
|
-
font-size: 92%;
|
|
111
|
-
}
|
|
112
|
-
</style>
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<article
|
|
3
|
+
ref="card"
|
|
4
|
+
:data-sku="product.sku"
|
|
5
|
+
class="relative h-full max-w-[350px] mx-auto py-3 group"
|
|
6
|
+
>
|
|
7
|
+
<ALink
|
|
8
|
+
:href="link"
|
|
9
|
+
class="flex flex-col h-full rounded overflow-hidden
|
|
10
|
+
group-hover:shadow group-hover:ring-1 ring-black/5"
|
|
11
|
+
>
|
|
12
|
+
<div class="aspect-square p-2
|
|
13
|
+
motion-safe:group-hover:scale-110 transition-transform">
|
|
14
|
+
<div class="relative w-full h-full bg-white rounded overflow-hidden
|
|
15
|
+
group-hover:rounded-none">
|
|
16
|
+
<span v-if="images?.length" class="text-xs text-opacity-70">
|
|
17
|
+
<AImg
|
|
18
|
+
:picture="images[0]"
|
|
19
|
+
:alt="title"
|
|
20
|
+
class="absolute top-0 left-0 block w-full h-full object-cover"
|
|
21
|
+
/>
|
|
22
|
+
<AImg
|
|
23
|
+
v-if="images[1] && wasHoveredOnce"
|
|
24
|
+
:picture="images[1]"
|
|
25
|
+
:alt="title"
|
|
26
|
+
class="absolute top-0 left-0 block w-full h-full object-cover
|
|
27
|
+
opacity-0 group-hover:opacity-100 transition-opacity
|
|
28
|
+
motion-safe:duration-300 text-transparent z-10"
|
|
29
|
+
/>
|
|
30
|
+
</span>
|
|
31
|
+
<div
|
|
32
|
+
v-else
|
|
33
|
+
class="w-full h-full bg-gradient-to-br from-base-50/20 to-base-100"
|
|
34
|
+
/>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
<span
|
|
38
|
+
v-if="discountPercentage"
|
|
39
|
+
class=":uno: absolute top-9 right-2
|
|
40
|
+
group-hover:scale-110 group-hover:translate-x-2 transition-transform
|
|
41
|
+
bg-secondary/70 text-on-secondary text-xs
|
|
42
|
+
py-0.5 pr-1.5 pl-3 [clip-path:polygon(20%_0,100%_0,100%_100%,0_100%)]"
|
|
43
|
+
>
|
|
44
|
+
-<strong>{{ discountPercentage }}</strong>%
|
|
45
|
+
</span>
|
|
46
|
+
<div class="relative flex flex-col grow justify-between p-4
|
|
47
|
+
group-hover:backdrop-blur-md bg-white/40 z-10">
|
|
48
|
+
<component
|
|
49
|
+
:is="headingTag"
|
|
50
|
+
class="ui-link no-underline line-clamp-2"
|
|
51
|
+
:class="[
|
|
52
|
+
isActive ? 'text-base-700' : 'text-base-500',
|
|
53
|
+
link ? 'group-hover:underline group-hover:text-primary' : null,
|
|
54
|
+
]"
|
|
55
|
+
>
|
|
56
|
+
{{ title }}
|
|
57
|
+
</component>
|
|
58
|
+
<div class="pt-2">
|
|
59
|
+
<div v-if="isActive">
|
|
60
|
+
<Prices :product="product" />
|
|
61
|
+
</div>
|
|
62
|
+
<span v-else class="ui-badge bg-warning-100 text-warning-700">
|
|
63
|
+
{{ !isInStock ? $t.i19outOfStock : $t.i19inactive }}
|
|
64
|
+
</span>
|
|
65
|
+
</div>
|
|
66
|
+
<button
|
|
67
|
+
v-if="isActive && !hasVariations"
|
|
68
|
+
class=":uno: hidden md:block ui-btn-sm ui-btn-primary
|
|
69
|
+
absolute -top-6 left-0 w-full rounded-none
|
|
70
|
+
opacity-0 group-hover:opacity-100 transition -z-10 group-hover:z-10"
|
|
71
|
+
@click.prevent="addProductToCart(product)"
|
|
72
|
+
>
|
|
73
|
+
<span class="inline-block h-4 w-4 leading-none text-base text-center
|
|
74
|
+
bg-on-primary text-primary opacity-80 rounded-full mr-1">
|
|
75
|
+
+
|
|
76
|
+
</span>
|
|
77
|
+
{{ $t.i19addToCart }}
|
|
78
|
+
</button>
|
|
79
|
+
</div>
|
|
80
|
+
</ALink>
|
|
81
|
+
</article>
|
|
82
|
+
</template>
|
|
83
|
+
|
|
84
|
+
<script setup lang="ts">
|
|
85
|
+
import { ref } from 'vue';
|
|
86
|
+
import { watchOnce, useElementHover } from '@vueuse/core';
|
|
87
|
+
import { addProductToCart } from '@@sf/state/shopping-cart';
|
|
88
|
+
import {
|
|
89
|
+
type Props as UseProductCardProps,
|
|
90
|
+
useProductCard,
|
|
91
|
+
} from '@@sf/composables/use-product-card';
|
|
92
|
+
import Prices from '~/components/Prices.vue';
|
|
93
|
+
|
|
94
|
+
export type Props = UseProductCardProps & {
|
|
95
|
+
headingTag?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
99
|
+
headingTag: 'h3',
|
|
100
|
+
});
|
|
101
|
+
const {
|
|
102
|
+
product,
|
|
103
|
+
title,
|
|
104
|
+
link,
|
|
105
|
+
images,
|
|
106
|
+
isInStock,
|
|
107
|
+
isActive,
|
|
108
|
+
discountPercentage,
|
|
109
|
+
hasVariations,
|
|
110
|
+
} = useProductCard(props as UseProductCardProps);
|
|
111
|
+
const card = ref<HTMLElement | null>(null);
|
|
112
|
+
const isHovered = useElementHover(card);
|
|
113
|
+
const wasHoveredOnce = ref(false);
|
|
114
|
+
watchOnce(isHovered, () => {
|
|
115
|
+
wasHoveredOnce.value = true;
|
|
116
|
+
});
|
|
117
|
+
</script>
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<section class="ui-section">
|
|
3
|
+
<div v-if="title" class="max-w-prose mx-auto text-center mb-2">
|
|
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">
|
|
11
|
+
<li
|
|
12
|
+
v-for="product in products"
|
|
13
|
+
:key="product._id"
|
|
14
|
+
class="basis-1/2 md:basis-1/3 lg:basis-1/4 shrink-0"
|
|
15
|
+
>
|
|
16
|
+
<ProductCard :product="product" />
|
|
17
|
+
</li>
|
|
18
|
+
<template #controls>
|
|
19
|
+
<div
|
|
20
|
+
v-show="products.length > 2"
|
|
21
|
+
class="text-3xl lg:text-2xl leading-none text-primary
|
|
22
|
+
lg:opacity-0 group-hover/shelf:opacity-90 transition-opacity"
|
|
23
|
+
>
|
|
24
|
+
<CarouselControl class="!top-1/2 !-left-4 w-12 h-12
|
|
25
|
+
bg-transparent lg:bg-white/80 lg:hover:bg-primary-300/60 rounded-full
|
|
26
|
+
lg:shadow-sm lg:ring-1 ring-black/5" is-prev />
|
|
27
|
+
<CarouselControl class="!top-1/2 !-right-4 w-12 h-12
|
|
28
|
+
bg-transparent lg:bg-white/80 lg:hover:bg-primary-300/60 rounded-full
|
|
29
|
+
lg:shadow-sm lg:ring-1 ring-black/5" />
|
|
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>
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<footer class="w-screen bg-black text-base-300 border-t border-base-100 py-2">
|
|
3
|
+
<div class="ui-section">
|
|
4
|
+
<div class="pb-7 border-b border-base-200
|
|
5
|
+
flex justify-between flex-wrap lg:flex-nowrap sm:gap-x-10 gap-y-5">
|
|
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="flex gap-2 text-base-400">
|
|
12
|
+
<span v-for="(href, network) in socialNetworks" :key="network">
|
|
13
|
+
<SocialNetworkLink :network="network" class="p-1 hover:text-primary">
|
|
14
|
+
<template v-if="network === 'whatsapp'" #append>
|
|
15
|
+
<span class="ml-1 text-sm text-base-300">
|
|
16
|
+
{{ $settings.whatsapp }}
|
|
17
|
+
</span>
|
|
18
|
+
</template>
|
|
19
|
+
</SocialNetworkLink>
|
|
20
|
+
</span>
|
|
21
|
+
</div>
|
|
22
|
+
<div v-if="$settings.address || $settings.phone" class="mt-3 text-base-200">
|
|
23
|
+
<address v-if="$settings.address" class="inline-block mr-4">
|
|
24
|
+
{{ $settings.address }}
|
|
25
|
+
</address>
|
|
26
|
+
<ALink
|
|
27
|
+
v-if="$settings.phone"
|
|
28
|
+
:href="`tel:${$settings.phone.replace(/\D/g, '')}`"
|
|
29
|
+
class="hover:text-primary"
|
|
30
|
+
>
|
|
31
|
+
<i class="i-phone mr-0.5"></i>
|
|
32
|
+
{{ $settings.phone }}
|
|
33
|
+
</ALink>
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
<div v-if="pageLinks?.length" class="basis-1/2 sm:basis-auto">
|
|
37
|
+
<div class="text-lg font-medium mb-2.5">
|
|
38
|
+
{{ pagesColTitle || $t.i19institutional }}
|
|
39
|
+
</div>
|
|
40
|
+
<ul
|
|
41
|
+
class="text-sm"
|
|
42
|
+
:class="pageLinks.length > 5
|
|
43
|
+
? 'grid md:grid-cols-2 gap-x-5 gap-y-1.5' : 'space-y-1.5'"
|
|
44
|
+
>
|
|
45
|
+
<li v-for="({ title, href }, i) in pageLinks" :key="`p-${i}`">
|
|
46
|
+
<ALink :href="href" class="ui-link text-base-50">
|
|
47
|
+
{{ title }}
|
|
48
|
+
</ALink>
|
|
49
|
+
</li>
|
|
50
|
+
</ul>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
<div class="ui-section">
|
|
55
|
+
<div class="flex flex-wrap lg:flex-nowrap justify-between items-start gap-5">
|
|
56
|
+
<ul class="flex gap-y-3 gap-x-6 lg:gap-x-8 items-center
|
|
57
|
+
md:flex-wrap mx-auto md:mx-0 overflow-x-auto md:overflow-hidden">
|
|
58
|
+
<li v-for="(stamp, i) in stamps" :key="i">
|
|
59
|
+
<ALink :href="stamp.href?.replace('{domain}', $settings.domain || '')">
|
|
60
|
+
<slot :name="`picture-${i}`" />
|
|
61
|
+
<span v-if="!stamp.img" class="flex items-center">
|
|
62
|
+
<span
|
|
63
|
+
v-if="stamp.icon"
|
|
64
|
+
class="text-4xl mr-2
|
|
65
|
+
[&>*]:bg-gradient-to-br [&>*]:from-success-200 [&>*]:to-success-700"
|
|
66
|
+
>
|
|
67
|
+
<i v-if="stamp.icon === 'lock'" class="i-lock-closed"></i>
|
|
68
|
+
<i v-else-if="stamp.icon === 'check'" class="i-check-badge"></i>
|
|
69
|
+
<i v-else class="i-arrow-path-rounded-square"></i>
|
|
70
|
+
</span>
|
|
71
|
+
<span class="text-sm font-medium text-base-300 max-w-[140px]">
|
|
72
|
+
{{ stamp.alt }}
|
|
73
|
+
<i
|
|
74
|
+
v-if="stamp.href && stamp.href.charAt(0) !== '/'"
|
|
75
|
+
class="bg-base-400 ml-0.5 i-arrow-top-right-on-square"
|
|
76
|
+
></i>
|
|
77
|
+
</span>
|
|
78
|
+
</span>
|
|
79
|
+
</ALink>
|
|
80
|
+
</li>
|
|
81
|
+
</ul>
|
|
82
|
+
<div class="flex flex-wrap md:flex-nowrap justify-end items-center
|
|
83
|
+
gap-4 text-2xl mx-auto md:mx-0 overflow-x-auto md:overflow-hidden">
|
|
84
|
+
<PaymentMethodFlag
|
|
85
|
+
v-for="paymentMethod in $settings.payment_methods"
|
|
86
|
+
:key="paymentMethod"
|
|
87
|
+
:flag="paymentMethod"
|
|
88
|
+
class="!text-base-50"
|
|
89
|
+
/>
|
|
90
|
+
</div>
|
|
91
|
+
</div>
|
|
92
|
+
<div class="mt-7 text-xs text-center md:text-left
|
|
93
|
+
md:flex justify-between gap-4">
|
|
94
|
+
<div class="mb-3 md:mb-0">
|
|
95
|
+
@ {{ new Date().getFullYear() }} {{ $settings.corporate_name }}
|
|
96
|
+
{{ $settings.address ? `/ ${$settings.address}` : '' }}
|
|
97
|
+
/ {{ $settings.doc_number }}
|
|
98
|
+
</div>
|
|
99
|
+
<ALink href="https://www.ecomplus.io/" class="italic text-[rgb(239,235,240)]">
|
|
100
|
+
powered by <b>E-Com Plus</b>
|
|
101
|
+
</ALink>
|
|
102
|
+
</div>
|
|
103
|
+
</div>
|
|
104
|
+
</footer>
|
|
105
|
+
</template>
|
|
106
|
+
|
|
107
|
+
<script setup lang="ts">
|
|
108
|
+
import type { LayoutContent } from '@@sf/content';
|
|
109
|
+
import { socialNetworks } from '@@sf/sf-lib';
|
|
110
|
+
import SocialNetworkLink from '@@sf/components/SocialNetworkLink.vue';
|
|
111
|
+
import PaymentMethodFlag from '@@sf/components/PaymentMethodFlag.vue';
|
|
112
|
+
|
|
113
|
+
export interface Props {
|
|
114
|
+
stamps?: LayoutContent['footer']['stamps'];
|
|
115
|
+
pageLinks?: Array<{
|
|
116
|
+
title: string;
|
|
117
|
+
href: string;
|
|
118
|
+
}>;
|
|
119
|
+
pagesColTitle?: string;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
defineProps<Props>();
|
|
123
|
+
</script>
|