cloudcommerce 0.22.1 → 0.22.2

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 (164) hide show
  1. package/.editorconfig +13 -0
  2. package/.gitmodules +3 -0
  3. package/.vscode/settings.json +2 -1
  4. package/CHANGELOG.md +13 -0
  5. package/ecomplus-stores/barra-doce/.devcontainer/devcontainer.json +30 -0
  6. package/ecomplus-stores/barra-doce/.editorconfig +13 -0
  7. package/ecomplus-stores/barra-doce/.eslintrc.cjs +3 -0
  8. package/ecomplus-stores/barra-doce/.firebaserc +5 -0
  9. package/ecomplus-stores/barra-doce/.github/build-and-deploy +1 -0
  10. package/ecomplus-stores/barra-doce/.github/renovate.json +5 -0
  11. package/ecomplus-stores/barra-doce/.github/workflows/build-and-deploy.yml +36 -0
  12. package/ecomplus-stores/barra-doce/.github/workflows/calibreapp-image-actions.yml +23 -0
  13. package/ecomplus-stores/barra-doce/.gitpod.yml +12 -0
  14. package/ecomplus-stores/barra-doce/.nvmrc +1 -0
  15. package/ecomplus-stores/barra-doce/.vscode/extensions.json +8 -0
  16. package/ecomplus-stores/barra-doce/.vscode/launch.json +11 -0
  17. package/ecomplus-stores/barra-doce/.vscode/settings.json +10 -0
  18. package/ecomplus-stores/barra-doce/LICENSE.md +230 -0
  19. package/ecomplus-stores/barra-doce/README.md +31 -0
  20. package/ecomplus-stores/barra-doce/SETUP.md +117 -0
  21. package/ecomplus-stores/{iluminim/README.pt-BR.md → barra-doce/SETUP.pt-BR.md} +5 -1
  22. package/ecomplus-stores/barra-doce/functions/config.json +3 -0
  23. package/ecomplus-stores/barra-doce/functions/example.env +10 -0
  24. package/ecomplus-stores/barra-doce/functions/many/index.js +14 -0
  25. package/ecomplus-stores/barra-doce/functions/many/package.json +22 -0
  26. package/ecomplus-stores/barra-doce/functions/ssr/.eslintrc.cjs +6 -0
  27. package/ecomplus-stores/barra-doce/functions/ssr/astro.config.mjs +4 -0
  28. package/ecomplus-stores/barra-doce/functions/ssr/content/blog/.gitkeep +0 -0
  29. package/ecomplus-stores/barra-doce/functions/ssr/content/extra-pages/.gitkeep +0 -0
  30. package/ecomplus-stores/barra-doce/functions/ssr/content/layout.json +37 -0
  31. package/ecomplus-stores/barra-doce/functions/ssr/content/pages/home.json +33 -0
  32. package/ecomplus-stores/barra-doce/functions/ssr/content/settings.json +48 -0
  33. package/ecomplus-stores/barra-doce/functions/ssr/index.js +18 -0
  34. package/ecomplus-stores/barra-doce/functions/ssr/package.json +31 -0
  35. package/ecomplus-stores/barra-doce/functions/ssr/public/admin/.gitkeep +2 -0
  36. package/ecomplus-stores/barra-doce/functions/ssr/public/assets/.gitkeep +2 -0
  37. package/ecomplus-stores/barra-doce/functions/ssr/public/img/icon.png +0 -0
  38. package/ecomplus-stores/barra-doce/functions/ssr/public/img/large-icon.png +0 -0
  39. package/ecomplus-stores/barra-doce/functions/ssr/public/img/uploads/banner-forma-decora.jpg +0 -0
  40. package/ecomplus-stores/barra-doce/functions/ssr/public/img/uploads/banner2.webp +0 -0
  41. package/ecomplus-stores/barra-doce/functions/ssr/public/img/uploads/ecom-icon.png +0 -0
  42. package/ecomplus-stores/barra-doce/functions/ssr/public/img/uploads/headphone.webp +0 -0
  43. package/ecomplus-stores/barra-doce/functions/ssr/public/img/uploads/logo-barradoce.webp +0 -0
  44. package/ecomplus-stores/barra-doce/functions/ssr/public/img/uploads/logo.png +0 -0
  45. package/ecomplus-stores/barra-doce/functions/ssr/public/img/uploads/og-image.png +0 -0
  46. package/ecomplus-stores/barra-doce/functions/ssr/public/img/uploads/passion.webp +0 -0
  47. package/ecomplus-stores/barra-doce/functions/ssr/public/img/uploads/rect8589.png +0 -0
  48. package/ecomplus-stores/barra-doce/functions/ssr/public/img/uploads/rect859.png +0 -0
  49. package/ecomplus-stores/barra-doce/functions/ssr/public/img/uploads/rect89.webp +0 -0
  50. package/ecomplus-stores/barra-doce/functions/ssr/public/robots.txt +8 -0
  51. package/ecomplus-stores/barra-doce/functions/ssr/scripts/build.sh +14 -0
  52. package/ecomplus-stores/barra-doce/functions/ssr/src/assets/style.css +65 -0
  53. package/ecomplus-stores/barra-doce/functions/ssr/src/components/AccountMenu.vue +104 -0
  54. package/ecomplus-stores/barra-doce/functions/ssr/src/components/Banner.vue +64 -0
  55. package/ecomplus-stores/barra-doce/functions/ssr/src/components/BannersGrid.astro +25 -0
  56. package/ecomplus-stores/barra-doce/functions/ssr/src/components/CartSidebar.vue +35 -0
  57. package/ecomplus-stores/barra-doce/functions/ssr/src/components/HeroSlider.vue +51 -0
  58. package/ecomplus-stores/barra-doce/functions/ssr/src/components/PitchBar.vue +53 -0
  59. package/ecomplus-stores/barra-doce/functions/ssr/src/components/Prices.vue +96 -0
  60. package/ecomplus-stores/barra-doce/functions/ssr/src/components/ProductCard.vue +117 -0
  61. package/ecomplus-stores/barra-doce/functions/ssr/src/components/ProductShelf.vue +60 -0
  62. package/ecomplus-stores/barra-doce/functions/ssr/src/components/SearchModal.vue +6 -0
  63. package/ecomplus-stores/barra-doce/functions/ssr/src/components/ShopHeader.vue +136 -0
  64. package/ecomplus-stores/barra-doce/functions/ssr/src/components/ShopHeaderMenu.vue +58 -0
  65. package/ecomplus-stores/barra-doce/functions/ssr/src/components/ShopHeaderSubmenu.vue +88 -0
  66. package/ecomplus-stores/barra-doce/functions/ssr/src/components/ShopSidenav.vue +61 -0
  67. package/ecomplus-stores/barra-doce/functions/ssr/src/components/ShopSidenavCategory.vue +80 -0
  68. package/ecomplus-stores/barra-doce/functions/ssr/src/env.d.ts +13 -0
  69. package/ecomplus-stores/barra-doce/functions/ssr/src/layouts/Base.astro +15 -0
  70. package/ecomplus-stores/barra-doce/functions/ssr/src/layouts/Checkout.astro +0 -0
  71. package/ecomplus-stores/barra-doce/functions/ssr/src/layouts/PageHeader.astro +38 -0
  72. package/ecomplus-stores/barra-doce/functions/ssr/src/main/Fallback.astro +10 -0
  73. package/ecomplus-stores/barra-doce/functions/ssr/src/main/Home.astro +29 -0
  74. package/ecomplus-stores/barra-doce/functions/ssr/src/main/Sections.astro +29 -0
  75. package/ecomplus-stores/barra-doce/functions/ssr/src/main/Wildcard.astro +18 -0
  76. package/ecomplus-stores/barra-doce/functions/ssr/src/pages/[...slug].astro +40 -0
  77. package/ecomplus-stores/barra-doce/functions/ssr/src/pages/_vue.ts +3 -0
  78. package/ecomplus-stores/barra-doce/functions/ssr/src/pages/app/account.astro +0 -0
  79. package/ecomplus-stores/barra-doce/functions/ssr/src/pages/app/index.astro +0 -0
  80. package/ecomplus-stores/barra-doce/functions/ssr/src/pages/fallback.astro +25 -0
  81. package/ecomplus-stores/barra-doce/functions/ssr/src/pages/index.astro +35 -0
  82. package/ecomplus-stores/barra-doce/functions/ssr/src/scripts/InlineScripts.astro +10 -0
  83. package/ecomplus-stores/barra-doce/functions/ssr/tailwind.config.cjs +19 -0
  84. package/ecomplus-stores/barra-doce/functions/ssr/tsconfig.json +12 -0
  85. package/ecomplus-stores/barra-doce/functions/ssr/uno.config.cjs +5 -0
  86. package/ecomplus-stores/barra-doce/functions/with-apps/index.js +12 -0
  87. package/ecomplus-stores/barra-doce/functions/with-apps/package.json +22 -0
  88. package/ecomplus-stores/barra-doce/package.json +28 -0
  89. package/ecomplus-stores/barra-doce/scripts/install.sh +14 -0
  90. package/ecomplus-stores/iluminim/.editorconfig +13 -0
  91. package/ecomplus-stores/iluminim/README.md +11 -93
  92. package/ecomplus-stores/iluminim/SETUP.md +117 -0
  93. package/ecomplus-stores/iluminim/SETUP.pt-BR.md +117 -0
  94. package/ecomplus-stores/iluminim/functions/many/package.json +3 -3
  95. package/ecomplus-stores/iluminim/functions/ssr/package.json +6 -6
  96. package/ecomplus-stores/iluminim/functions/ssr/src/components/ShopHeaderSubmenu.vue +1 -1
  97. package/ecomplus-stores/iluminim/functions/ssr/src/components/ShopSidenav.vue +2 -2
  98. package/ecomplus-stores/iluminim/functions/ssr/src/components/ShopSidenavCategory.vue +4 -2
  99. package/ecomplus-stores/iluminim/functions/ssr/src/layouts/PageHeader.astro +6 -1
  100. package/ecomplus-stores/iluminim/functions/with-apps/package.json +3 -3
  101. package/ecomplus-stores/iluminim/package.json +1 -1
  102. package/package.json +1 -1
  103. package/packages/api/package.json +1 -1
  104. package/packages/apps/affilate-program/package.json +1 -1
  105. package/packages/apps/correios/package.json +1 -1
  106. package/packages/apps/custom-payment/package.json +1 -1
  107. package/packages/apps/custom-shipping/package.json +1 -1
  108. package/packages/apps/datafrete/package.json +1 -1
  109. package/packages/apps/discounts/package.json +1 -1
  110. package/packages/apps/emails/package.json +1 -1
  111. package/packages/apps/fb-conversions/package.json +1 -1
  112. package/packages/apps/flash-courier/package.json +1 -1
  113. package/packages/apps/frenet/package.json +1 -1
  114. package/packages/apps/galaxpay/package.json +1 -1
  115. package/packages/apps/google-analytics/package.json +1 -1
  116. package/packages/apps/jadlog/package.json +1 -1
  117. package/packages/apps/loyalty-points/package.json +1 -1
  118. package/packages/apps/melhor-envio/package.json +1 -1
  119. package/packages/apps/mercadopago/package.json +1 -1
  120. package/packages/apps/pagarme/package.json +1 -1
  121. package/packages/apps/paghiper/package.json +1 -1
  122. package/packages/apps/pix/package.json +1 -1
  123. package/packages/apps/tiny-erp/package.json +1 -1
  124. package/packages/apps/webhooks/package.json +1 -1
  125. package/packages/cli/package.json +1 -1
  126. package/packages/config/package.json +1 -1
  127. package/packages/emails/package.json +1 -1
  128. package/packages/events/package.json +1 -1
  129. package/packages/feeds/package.json +1 -1
  130. package/packages/firebase/package.json +1 -1
  131. package/packages/i18n/package.json +1 -1
  132. package/packages/modules/package.json +1 -1
  133. package/packages/passport/package.json +1 -1
  134. package/packages/ssr/package.json +1 -1
  135. package/packages/storefront/dist/client/_astro/HeroSlider.cea1f361.js +1 -0
  136. package/packages/storefront/dist/client/_astro/{ProductShelf.9e290480.js → ProductShelf.35614736.js} +1 -1
  137. package/packages/storefront/dist/client/_astro/ShopHeader.dbe9c1f1.js +4 -0
  138. package/packages/storefront/dist/client/_astro/{_...slug_.2f4f6929.css → _...slug_.c13e0486.css} +1 -1
  139. package/packages/storefront/dist/client/sw.js +1 -1
  140. package/packages/storefront/dist/server/chunks/{_...d496b072.mjs → _...fac94758.mjs} +2 -2
  141. package/packages/storefront/dist/server/chunks/{account@_@astro.1b311a3d.mjs → account@_@astro.460623ee.mjs} +1 -1
  142. package/packages/storefront/dist/server/chunks/{endpoint@_@js.631ff6c5.mjs → endpoint@_@js.35380ea5.mjs} +2 -2
  143. package/packages/storefront/dist/server/chunks/{fallback@_@astro.12cf85ba.mjs → fallback@_@astro.dbc26d2d.mjs} +2 -2
  144. package/packages/storefront/dist/server/chunks/{index@_@astro.a20d91aa.mjs → index@_@astro.c91e679e.mjs} +2 -2
  145. package/packages/storefront/dist/server/chunks/{index@_@astro.69eb5e8a.mjs → index@_@astro.fec107b9.mjs} +2 -2
  146. package/packages/storefront/dist/server/chunks/pages/{_...slug_.astro.c93fc36d.mjs → _...slug_.astro.2e2d4770.mjs} +80 -38
  147. package/packages/storefront/dist/server/chunks/pages/{endpoint.js.630b1212.mjs → endpoint.js.6f0f4ede.mjs} +1 -1
  148. package/packages/storefront/dist/server/chunks/pages/{fallback.astro.58c7e581.mjs → fallback.astro.fc8bc7e7.mjs} +1 -1
  149. package/packages/storefront/dist/server/chunks/pages/{index.astro.6efe85be.mjs → index.astro.03adcc55.mjs} +5 -5
  150. package/packages/storefront/dist/server/entry.mjs +8 -8
  151. package/packages/storefront/dist/server/renderers.mjs +1 -1
  152. package/packages/storefront/package.json +1 -1
  153. package/packages/storefront/src/lib/$storefront.d.ts +1 -0
  154. package/packages/storefront/src/lib/components/SharedData.astro +13 -0
  155. package/packages/storefront/src/lib/composables/use-prices.ts +1 -1
  156. package/packages/storefront/src/lib/composables/use-shop-header-submenu.ts +10 -1
  157. package/packages/storefront/src/lib/composables/use-shop-header.ts +13 -13
  158. package/packages/storefront/src/lib/layouts/BaseHead.astro +1 -1
  159. package/packages/storefront/src/lib/layouts/use-page-header.ts +14 -2
  160. package/packages/storefront/src/lib/ssr-context.ts +1 -0
  161. package/packages/types/package.json +1 -1
  162. package/pnpm-workspace.yaml +2 -0
  163. package/packages/storefront/dist/client/_astro/HeroSlider.0890631f.js +0 -1
  164. package/packages/storefront/dist/client/_astro/ShopHeader.82ae97a5.js +0 -4
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "barra-doce-many",
3
+ "private": true,
4
+ "type": "module",
5
+ "scripts": {
6
+ "build": "echo '>> Run build from repository root'",
7
+ "serve": "firebase emulators:start --only functions",
8
+ "shell": "firebase functions:shell",
9
+ "start": "npm run shell",
10
+ "deploy": "firebase deploy --only functions",
11
+ "logs": "firebase functions:log"
12
+ },
13
+ "engines": {
14
+ "node": "18"
15
+ },
16
+ "main": "index.js",
17
+ "dependencies": {
18
+ "@cloudcommerce/feeds": "^0.22.1",
19
+ "@cloudcommerce/firebase": "^0.22.1",
20
+ "@cloudcommerce/passport": "^0.22.1"
21
+ }
22
+ }
@@ -0,0 +1,6 @@
1
+ module.exports = {
2
+ extends: './node_modules/@cloudcommerce/storefront/.eslintrc.cjs',
3
+ rules: {
4
+ 'import/no-extraneous-dependencies': 'off',
5
+ },
6
+ };
@@ -0,0 +1,4 @@
1
+ // eslint-disable-next-line import/no-extraneous-dependencies
2
+ import definedAstroConfig from '@cloudcommerce/storefront/astro.config.mjs';
3
+
4
+ export default definedAstroConfig;
@@ -0,0 +1,37 @@
1
+ {
2
+ "metatags": {
3
+ "og_image": "",
4
+ "fb_app_id": "",
5
+ "twitter_username": ""
6
+ },
7
+ "custom_code": {
8
+ "css": "",
9
+ "html_head": "",
10
+ "html_body": ""
11
+ },
12
+ "header": {
13
+ "pitch_bar": [
14
+ {
15
+ "href": "",
16
+ "html": "<d-md>Ganhe tempo: </d-md>Compre online e retire <d-md>pessoalmente</d-md> na <b>loja em Moema</b>, SP"
17
+ },
18
+ {
19
+ "href": "",
20
+ "html": "<b>Frete grátis</b> <d-md>para todo Brasil</d-md> a partir de {free_shipping_from_value}"
21
+ }
22
+ ],
23
+ "inline_menu_categories": {
24
+ "featured": [],
25
+ "random": 7
26
+ },
27
+ "alphabetical_sort_submenu": false
28
+ },
29
+ "service_links": [
30
+ {
31
+ "title": "Fale conosco",
32
+ "href": "/pages/contato"
33
+ }
34
+ ],
35
+ "footer": {
36
+ }
37
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "meta_title": "",
3
+ "meta_description": "",
4
+ "hero": {
5
+ "autoplay": 9000,
6
+ "slides": [
7
+ {
8
+ "start": "",
9
+ "end": "",
10
+ "alt": "FORMAS DE TABLETES | Diversos modelos em diversos materiais | A partir de R$7,90",
11
+ "img": "/img/uploads/banner-forma-decora.jpg",
12
+ "mobile_img": "",
13
+ "href": "/categoria/formas-de-barra-e-tablete-de-chocolate",
14
+ "title": "Formas de tabletes",
15
+ "subtitle": "Acetato, 3 partes, Polipropileno, Poliestireno, Policarbonato",
16
+ "button_link": "/categoria/formas-de-barra-e-tablete-de-chocolate",
17
+ "button_text": "A partir de R$ 7,90"
18
+ }
19
+ ]
20
+ },
21
+ "sections": [
22
+ {
23
+ "type": "product-shelf",
24
+ "collection_id": null,
25
+ "sort": "-price_discount",
26
+ "title": "",
27
+ "headless": false,
28
+ "shuffle": false,
29
+ "limit": 12,
30
+ "page": 1
31
+ }
32
+ ]
33
+ }
@@ -0,0 +1,48 @@
1
+ {
2
+ "domain": "ecom2-demo.web.app",
3
+ "name": "E-Com Plus demoStore",
4
+ "description": "My PWA Shop",
5
+ "logo": "/img/uploads/logo-barradoce.webp",
6
+ "icon": "/img/uploads/ecom-icon.png",
7
+ "primary_color": "#f06606",
8
+ "email": "",
9
+ "phone": "",
10
+ "address": "",
11
+ "corporate_name": "",
12
+ "doc_number": "",
13
+ "lang": "pt_br",
14
+ "currency": "BRL",
15
+ "currency_symbol": "R$",
16
+ "country_code": "BR",
17
+ "whatsapp": "(31) 9 8272-1558",
18
+ "instagram": "https://www.instagram.com/ecomclub/",
19
+ "facebook": "https://www.facebook.com/ecom.clubpage/",
20
+ "twitter": "",
21
+ "youtube": "https://www.youtube.com/channel/UCBlIxK5JAub0E1EX_qHdzmA",
22
+ "tiktok": "",
23
+ "pinterest": "",
24
+ "modules": {
25
+ "list_payments": {
26
+ "installments_option": {
27
+ "max_number": 6,
28
+ "monthly_interest": 0,
29
+ "min_installment": 50
30
+ },
31
+ "discount_option": {
32
+ "label": null,
33
+ "apply_at": null,
34
+ "type": null,
35
+ "value": null
36
+ },
37
+ "loyalty_points_program": {
38
+ "id": null,
39
+ "name": null,
40
+ "ratio": null,
41
+ "earn_percentage": null
42
+ }
43
+ },
44
+ "calculate_shipping": {
45
+ "free_shipping_from_value": 250
46
+ }
47
+ }
48
+ }
@@ -0,0 +1,18 @@
1
+ import config from '@cloudcommerce/firebase/config';
2
+ // eslint-ignore-next-line import/no-unresolved
3
+ import { handler as renderStorefront } from './dist/server/entry.mjs';
4
+ import mergeConfig from './config.json' assert { type: 'json' };
5
+
6
+ config.set({
7
+ ...mergeConfig,
8
+ hello: 'from store',
9
+ /*
10
+ httpsFunctionOptions: {
11
+ minInstances: 1,
12
+ },
13
+ */
14
+ });
15
+
16
+ global.$renderStorefront = renderStorefront;
17
+
18
+ export * from '@cloudcommerce/ssr/firebase';
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "barra-doce-ssr",
3
+ "private": true,
4
+ "type": "module",
5
+ "scripts": {
6
+ "dev": "astro dev --host",
7
+ "build": "bash scripts/build.sh",
8
+ "build:static": "BUILD_OUTPUT=static astro build",
9
+ "serve": "firebase emulators:start --only functions",
10
+ "shell": "firebase functions:shell",
11
+ "start": "npm run shell",
12
+ "deploy": "firebase deploy --only functions",
13
+ "logs": "firebase functions:log"
14
+ },
15
+ "engines": {
16
+ "node": "18"
17
+ },
18
+ "main": "index.js",
19
+ "dependencies": {
20
+ "@cloudcommerce/api": "^0.22.1",
21
+ "@cloudcommerce/firebase": "^0.22.1",
22
+ "@cloudcommerce/ssr": "^0.22.1"
23
+ },
24
+ "devDependencies": {
25
+ "@cloudcommerce/i18n": "^0.22.1",
26
+ "@cloudcommerce/storefront": "^0.22.1",
27
+ "@cloudcommerce/types": "^0.22.1",
28
+ "@fontsource/croissant-one": "^5.0.5",
29
+ "@iconify-json/mingcute": "^1.1.7"
30
+ }
31
+ }
@@ -0,0 +1,2 @@
1
+ #index.html
2
+ #assets/
@@ -0,0 +1,2 @@
1
+ #index.html
2
+ #assets/
@@ -0,0 +1,8 @@
1
+ User-agent: *
2
+ Allow: /
3
+ Disallow: /app/
4
+ Disallow: /search$
5
+ Disallow: /search?
6
+ Disallow: /search.html$
7
+ Disallow: /search.html?
8
+ Disallow: /admin/
@@ -0,0 +1,14 @@
1
+ #!/bin/bash
2
+
3
+ # workaround for cloudcommerce pnpm monorepo
4
+ filename="../../../packages/storefront/scripts/build-prod.sh"
5
+ if [[ -f $filename ]]; then
6
+ sh $filename
7
+ elif [[ -f "../$filename" ]]; then
8
+ sh "../$filename"
9
+ else
10
+ echo '> npx storefront build'
11
+ npx storefront build
12
+ fi
13
+
14
+ exit 0
@@ -0,0 +1,65 @@
1
+ :root {
2
+ --font-brand: "Croissant One";
3
+ }
4
+ html {
5
+ scroll-behavior: smooth;
6
+ }
7
+ body {
8
+ overflow-x: hidden;
9
+ }
10
+ a, button, button > * {
11
+ transition: background-color var(--transition),
12
+ color var(--transition), border-color var(--transition),
13
+ opacity var(--transition), transform var(--transition-fast);
14
+ }
15
+
16
+ .ui-link {
17
+ @apply not-prose font-medium text-primary underline underline-offset-4
18
+ hover:text-primary-bold active:text-primary-subtle;
19
+ }
20
+
21
+ [class*=ui-btn] {
22
+ @apply not-prose inline-block text-base font-medium px-4 py-2 rounded
23
+ border-2 border-transparent active:ring-2;
24
+ }
25
+ .ui-btn-sm {
26
+ @apply text-sm px-3 py-1.5 border-1;
27
+ }
28
+ .ui-btn-lg {
29
+ @apply text-lg md:text-xl font-bold px-6 py-2.5 active:ring-3;
30
+ }
31
+ .ui-btn-primary {
32
+ @apply primary border-primary hover:primary-bold ring-primary/30;
33
+ }
34
+ .ui-btn-secondary {
35
+ @apply bg-secondary-100/50 text-secondary border-secondary
36
+ hover:secondary ring-secondary/30;
37
+ }
38
+ .ui-btn-contrast {
39
+ @apply bg-white text-primary hover:bg-primary-100 ring-white/30;
40
+ }
41
+
42
+ .ui-text-brand, .ui-title {
43
+ @apply font-brand font-normal not-italic;
44
+ }
45
+ .ui-title {
46
+ @apply not-prose text-3xl xl:text-5xl;
47
+ }
48
+
49
+ [class*=ui-badge] {
50
+ @apply text-center px-2.5 py-0.5 rounded-md font-semibold
51
+ inline-block bg-secondary-200 text-secondary-900;
52
+ }
53
+ [class*=ui-badge-pill] {
54
+ @apply py-0 rounded-full;
55
+ }
56
+ .ui-badge-pill-sm {
57
+ @apply text-xs min-w-[1rem] px-0.5;
58
+ }
59
+ .ui-badge-pill-lg {
60
+ @apply text-lg min-w-[1.75rem] px-2;
61
+ }
62
+
63
+ .ui-section {
64
+ @apply container mx-auto px-4 sm:px-0 my-6 md:my-8;
65
+ }
@@ -0,0 +1,104 @@
1
+ <template>
2
+ <Menu
3
+ as="div"
4
+ class="relative text-center text-sm text-base-800"
5
+ v-slot="{ open }"
6
+ >
7
+ <div v-if="open">
8
+ <span v-once>{{ initializeFirebaseAuth() }}</span>
9
+ </div>
10
+ <MenuButton class="outline-none">
11
+ <slot name="button" v-bind="{ open }" />
12
+ </MenuButton>
13
+ <Fade>
14
+ <MenuItems class="absolute -right-8 mt-2 w-56
15
+ rounded shadow ring-1 ring-black/5 bg-white
16
+ divide-y divide-base-100 focus:outline-none">
17
+ <div class="p-3 text-base-600">
18
+ {{ `${$t.i19hello} ${customerName || $t.i19visitor}` }}
19
+ <AccountLink role="button" class="ui-btn-sm ui-btn-primary block my-1">
20
+ {{ $t.i19accessMyAccount }}
21
+ </AccountLink>
22
+ <AccountLink v-if="!isLogged" is-sign-up class="ui-link block">
23
+ {{ $t.i19createAnAccount }}
24
+ </AccountLink>
25
+ </div>
26
+ <ul class="list-none">
27
+ <MenuItem as="li" v-slot="{ active }">
28
+ <AccountLink
29
+ to="orders"
30
+ class="block p-2"
31
+ :class="active ? 'bg-base-100 text-primary' : null"
32
+ >
33
+ {{ $t.i19myOrders }}
34
+ </AccountLink>
35
+ </MenuItem>
36
+ <MenuItem as="li" v-slot="{ active }">
37
+ <AccountLink
38
+ to="favorites"
39
+ class="block p-2"
40
+ :class="active ? 'bg-base-100 text-primary' : null"
41
+ >
42
+ <i class="i-star-line mr-1"></i>
43
+ {{ $t.i19myFavorites }}
44
+ </AccountLink>
45
+ </MenuItem>
46
+ <MenuItem
47
+ as="li"
48
+ v-slot="{ active }"
49
+ v-for="({ title, href }, i) in serviceLinks"
50
+ :key="`s-${i}`"
51
+ >
52
+ <ALink
53
+ :href="href"
54
+ class="block p-2"
55
+ :class="active ? 'bg-base-100 text-primary' : null"
56
+ >
57
+ {{ title }}
58
+ </ALink>
59
+ </MenuItem>
60
+ <MenuItem as="li">
61
+ <div class="flex justify-center gap-2 p-2 text-base-500 text-base">
62
+ <span v-for="(href, network) in socialNetworks" :key="network">
63
+ <SocialNetworkLink :network="network" class="p-1 hover:text-primary" />
64
+ </span>
65
+ </div>
66
+ </MenuItem>
67
+ <MenuItem v-if="isLogged" as="li">
68
+ <button @click="logout" class="p-2 text-right text-base-800">
69
+ <span class="text-base-600">{{ $t.i19logout }}</span>
70
+ <i class="i-align-arrow-left-fill text-lg ml-1"></i>
71
+ </button>
72
+ </MenuItem>
73
+ </ul>
74
+ </MenuItems>
75
+ </Fade>
76
+ </Menu>
77
+ </template>
78
+
79
+ <script setup lang="ts">
80
+ import {
81
+ Menu,
82
+ MenuButton,
83
+ MenuItems,
84
+ MenuItem,
85
+ } from '@headlessui/vue';
86
+ import { socialNetworks } from '@@sf/server-data';
87
+ import {
88
+ customerName,
89
+ initializeFirebaseAuth,
90
+ isLogged,
91
+ logout,
92
+ } from '@@sf/state/customer-session';
93
+ import AccountLink from '@@sf/components/AccountLink.vue';
94
+ import SocialNetworkLink from '@@sf/components/SocialNetworkLink.vue';
95
+
96
+ export interface Props {
97
+ serviceLinks?: Array<{
98
+ title: string;
99
+ href: string;
100
+ }>;
101
+ }
102
+
103
+ defineProps<Props>();
104
+ </script>
@@ -0,0 +1,64 @@
1
+ <template>
2
+ <div
3
+ class="mx-auto overflow-x-hidden"
4
+ :class="hasHeader
5
+ ? 'grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-5 items-center'
6
+ : null"
7
+ >
8
+ <component
9
+ :is="href ? 'a-link' : 'span'"
10
+ :href="href"
11
+ :class="hasHeader
12
+ ? 'lg:col-span-3 sm:order-last [&_img]:max-w-full sm:[&_img]:max-w-none'
13
+ + ' [&_img]:aspect-video sm:[&_img]:aspect-[2.5] [&_img]:object-cover'
14
+ : '[&_img]:max-w-full'"
15
+ >
16
+ <slot name="picture" />
17
+ </component>
18
+ <div v-if="hasHeader" class="lg:col-span-2 p-8 lg:p-12 xl:ps-32 mb-3 md:mb-0">
19
+ <Component
20
+ v-if="parsedTitle"
21
+ :is="headingTag"
22
+ class="ui-title mt-1"
23
+ >
24
+ {{ parsedTitle }}
25
+ </Component>
26
+ <p
27
+ v-if="parsedSubtitle"
28
+ class="mt-4 md:mt-6 text-base-800 uppercase font-medium text-lg lg:text-xl"
29
+ >
30
+ {{ parsedSubtitle }}
31
+ </p>
32
+ <component
33
+ v-if="parsedButtonText"
34
+ :is="buttonLink ? 'a-link' : 'span'"
35
+ :href="buttonLink"
36
+ class="ui-btn-lg ui-btn-contrast min-w-[150px] mt-7 md:mt-10"
37
+ >
38
+ <i class="i-tag-chevron-fill mr-1"></i>
39
+ {{ parsedButtonText }}
40
+ </component>
41
+ </div>
42
+ </div>
43
+ </template>
44
+
45
+ <script setup lang="ts">
46
+ import {
47
+ type Props as UseBannerProps,
48
+ useBanner,
49
+ } from '@@sf/composables/use-banner';
50
+
51
+ export type Props = UseBannerProps & {
52
+ headingTag?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
53
+ }
54
+
55
+ const props = withDefaults(defineProps<Props>(), {
56
+ headingTag: 'h3',
57
+ });
58
+ const {
59
+ hasHeader,
60
+ parsedTitle,
61
+ parsedSubtitle,
62
+ parsedButtonText,
63
+ } = useBanner(props);
64
+ </script>
@@ -0,0 +1,25 @@
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>
@@ -0,0 +1,35 @@
1
+ <template>
2
+ <aside class="flex flex-col h-full">
3
+ <header class="px-6 py-4 flex justify-end items-center gap-3">
4
+ <span class="text-right text-base text-base-600 font-medium">
5
+ {{ $t.i19myShoppingCart }}
6
+ </span>
7
+ <span class="ui-badge-pill-lg">
8
+ {{ totalItems }}
9
+ </span>
10
+ </header>
11
+ <article class="grow bg-base-50 border-t-2 border-b-2 border-base-100">
12
+ <div v-if="freeShippingFromValue" class="text-sm text-center">
13
+ <div
14
+ v-if="freeShippingFromValue > shoppingCart.subtotal"
15
+ class="p-3 secondary-subtle"
16
+ >
17
+ {{ $t.i19add$1ToEarn.replace('$1',
18
+ $money(freeShippingFromValue - shoppingCart.subtotal)) }}
19
+ <strong class="lowercase">{{ $t.i19freeShipping }}</strong>
20
+ </div>
21
+ <div v-else class="p-3 bg-success-50 text-success-800">
22
+ <i class="text-success-900 i-check-fill mr-1"></i>
23
+ {{ $t.i19freeShippingFrom }} {{ $money(freeShippingFromValue) }}
24
+ </div>
25
+ </div>
26
+ </article>
27
+ <footer class="p-5 shadow">
28
+ </footer>
29
+ </aside>
30
+ </template>
31
+
32
+ <script setup lang="ts">
33
+ import { freeShippingFromValue } from '@@sf/state/modules-info';
34
+ import { shoppingCart, totalItems } from '@@sf/state/shopping-cart';
35
+ </script>
@@ -0,0 +1,51 @@
1
+ <template>
2
+ <section class="relative mx-auto">
3
+ <Carousel :autoplay="autoplay" class="secondary-subtle [&>*]:items-center">
4
+ <li
5
+ v-for="(slide, i) in slides"
6
+ :key="i"
7
+ class="shrink-0 basis-full"
8
+ >
9
+ <Banner
10
+ v-bind="{ ...slide, headingTag: i === 0 ? 'h2' : 'h3' }"
11
+ class="w-screen max-w-screen-2xl"
12
+ >
13
+ <template #picture>
14
+ <slot :name="`picture-${i}`" />
15
+ </template>
16
+ </Banner>
17
+ </li>
18
+ <template #controls>
19
+ <div
20
+ v-show="slides.length > 1"
21
+ class="absolute z-10 bottom-5 flex justify-end items-center
22
+ w-screen right-5 xl:right-auto xl:max-w-screen-xl xl:left-1/2 xl:-ms-[640px]"
23
+ >
24
+ <div class="relative w-20 h-10 rounded-full
25
+ bg-white/50 text-primary shadow-sm ring-1 ring-black/5">
26
+ <CarouselControl class="w-10 h-10 rounded-full hover:bg-primary/10" is-prev>
27
+ <i class="i-arrow-left-line"></i>
28
+ </CarouselControl>
29
+ <CarouselControl class="w-10 h-10 rounded-full hover:bg-primary/10">
30
+ <i class="i-arrow-right-line"></i>
31
+ </CarouselControl>
32
+ </div>
33
+ </div>
34
+ </template>
35
+ </Carousel>
36
+ </section>
37
+ </template>
38
+
39
+ <script setup lang="ts">
40
+ import type { Props as UseBannerProps } from '@@sf/composables/use-banner';
41
+ import Carousel from '@@sf/components/Carousel.vue';
42
+ import CarouselControl from '@@sf/components/CarouselControl.vue';
43
+ import Banner from '~/components/Banner.vue';
44
+
45
+ export type Props = {
46
+ autoplay?: number;
47
+ slides: UseBannerProps[];
48
+ }
49
+
50
+ defineProps<Props>();
51
+ </script>