cloudcommerce 0.33.0 → 0.33.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 (173) hide show
  1. package/.github/workflows/test-apps.yml +2 -2
  2. package/CHANGELOG.md +37 -0
  3. package/action.yml +2 -2
  4. package/ecomplus-stores/barra-doce/.github/workflows/build-and-deploy.yml +1 -1
  5. package/ecomplus-stores/barra-doce/.github/workflows/calibreapp-image-actions.yml +1 -1
  6. package/ecomplus-stores/barra-doce/.vscode/settings.json +3 -0
  7. package/ecomplus-stores/barra-doce/functions/many/package.json +3 -3
  8. package/ecomplus-stores/barra-doce/functions/ssr/content/extra-pages/terms.json +1 -1
  9. package/ecomplus-stores/barra-doce/functions/ssr/content/pages/home.json +20 -0
  10. package/ecomplus-stores/barra-doce/functions/ssr/content/pages/products.json +2 -1
  11. package/ecomplus-stores/barra-doce/functions/ssr/content/settings.json +4 -1
  12. package/ecomplus-stores/barra-doce/functions/ssr/package.json +9 -8
  13. package/ecomplus-stores/barra-doce/functions/ssr/public/robots.txt +1 -1
  14. package/ecomplus-stores/barra-doce/functions/ssr/src/assets/style.css +15 -4
  15. package/ecomplus-stores/barra-doce/functions/ssr/src/components/AccountMenu.vue +5 -3
  16. package/ecomplus-stores/barra-doce/functions/ssr/src/components/AccountPage.vue +62 -0
  17. package/ecomplus-stores/barra-doce/functions/ssr/src/components/Banner.vue +6 -3
  18. package/ecomplus-stores/barra-doce/functions/ssr/src/components/Breadcrumbs.astro +44 -0
  19. package/ecomplus-stores/barra-doce/functions/ssr/src/components/CartItem.vue +11 -11
  20. package/ecomplus-stores/barra-doce/functions/ssr/src/components/CartSidebar.vue +16 -13
  21. package/ecomplus-stores/barra-doce/functions/ssr/src/components/CheckoutPage.vue +33 -0
  22. package/ecomplus-stores/barra-doce/functions/ssr/src/components/Collapse.vue +19 -0
  23. package/ecomplus-stores/barra-doce/functions/ssr/src/components/DocDescription.vue +28 -0
  24. package/ecomplus-stores/barra-doce/functions/ssr/src/components/FooterStamps.vue +62 -0
  25. package/ecomplus-stores/barra-doce/functions/ssr/src/components/HeroSlider.vue +14 -9
  26. package/ecomplus-stores/barra-doce/functions/ssr/src/components/ImagesGallery.vue +151 -0
  27. package/ecomplus-stores/barra-doce/functions/ssr/src/components/LoginForm.vue +107 -0
  28. package/ecomplus-stores/barra-doce/functions/ssr/src/components/PitchBar.vue +6 -8
  29. package/ecomplus-stores/barra-doce/functions/ssr/src/components/Prices.vue +3 -3
  30. package/ecomplus-stores/barra-doce/functions/ssr/src/components/ProductCard.vue +22 -22
  31. package/ecomplus-stores/barra-doce/functions/ssr/src/components/ProductDetails.vue +122 -0
  32. package/ecomplus-stores/barra-doce/functions/ssr/src/components/ProductShelf.vue +10 -12
  33. package/ecomplus-stores/barra-doce/functions/ssr/src/components/ProductSpecifications.vue +42 -0
  34. package/ecomplus-stores/barra-doce/functions/ssr/src/components/SearchModal.vue +1 -1
  35. package/ecomplus-stores/barra-doce/functions/ssr/src/components/ShopFooter.vue +7 -58
  36. package/ecomplus-stores/barra-doce/functions/ssr/src/components/ShopHeader.vue +33 -34
  37. package/ecomplus-stores/barra-doce/functions/ssr/src/components/ShopHeaderMenu.vue +5 -5
  38. package/ecomplus-stores/barra-doce/functions/ssr/src/components/ShopHeaderSubmenu.vue +19 -11
  39. package/ecomplus-stores/barra-doce/functions/ssr/src/components/ShopSidenav.vue +10 -11
  40. package/ecomplus-stores/barra-doce/functions/ssr/src/components/ShopSidenavCategory.vue +9 -10
  41. package/ecomplus-stores/barra-doce/functions/ssr/src/components/SkuSelector.vue +58 -0
  42. package/ecomplus-stores/barra-doce/functions/ssr/src/layouts/PageFooter.astro +3 -1
  43. package/ecomplus-stores/barra-doce/functions/ssr/src/layouts/PageHeader.astro +1 -2
  44. package/ecomplus-stores/barra-doce/functions/ssr/src/main/Home.astro +1 -2
  45. package/ecomplus-stores/barra-doce/functions/ssr/src/main/Sections.astro +25 -2
  46. package/ecomplus-stores/barra-doce/functions/ssr/src/main/Wildcard.astro +12 -12
  47. package/ecomplus-stores/barra-doce/functions/ssr/src/pages/[...slug].astro +2 -0
  48. package/ecomplus-stores/barra-doce/functions/ssr/src/pages/_vue.ts +17 -1
  49. package/ecomplus-stores/barra-doce/functions/ssr/src/pages/app/account.astro +34 -0
  50. package/ecomplus-stores/barra-doce/functions/ssr/src/pages/app/index.astro +62 -0
  51. package/ecomplus-stores/barra-doce/functions/ssr/src/pages/index.astro +0 -5
  52. package/ecomplus-stores/barra-doce/functions/ssr/src/pages/~fallback.astro +0 -2
  53. package/ecomplus-stores/barra-doce/functions/ssr/tailwind.config.cjs +0 -1
  54. package/ecomplus-stores/barra-doce/functions/with-apps/package.json +3 -3
  55. package/ecomplus-stores/barra-doce/package.json +2 -2
  56. package/ecomplus-stores/monocard/.editorconfig +13 -0
  57. package/ecomplus-stores/monocard/.eslintrc.cjs +1 -1
  58. package/ecomplus-stores/monocard/.vscode/settings.json +5 -1
  59. package/ecomplus-stores/monocard/functions/many/package.json +3 -3
  60. package/ecomplus-stores/monocard/functions/ssr/content/extra-pages/terms.json +1 -1
  61. package/ecomplus-stores/monocard/functions/ssr/content/pages/home.json +1 -44
  62. package/ecomplus-stores/monocard/functions/ssr/content/pages/products.json +2 -1
  63. package/ecomplus-stores/monocard/functions/ssr/content/settings.json +4 -1
  64. package/ecomplus-stores/monocard/functions/ssr/package.json +8 -7
  65. package/ecomplus-stores/monocard/functions/ssr/public/robots.txt +2 -4
  66. package/ecomplus-stores/monocard/functions/ssr/src/assets/style.css +7 -2
  67. package/ecomplus-stores/monocard/functions/ssr/src/components/AccountMenu.vue +16 -14
  68. package/ecomplus-stores/monocard/functions/ssr/src/components/AccountPage.vue +62 -0
  69. package/ecomplus-stores/monocard/functions/ssr/src/components/Banner.vue +3 -3
  70. package/ecomplus-stores/monocard/functions/ssr/src/components/Breadcrumbs.astro +1 -1
  71. package/ecomplus-stores/monocard/functions/ssr/src/components/CartItem.vue +11 -11
  72. package/ecomplus-stores/monocard/functions/ssr/src/components/CartSidebar.vue +16 -13
  73. package/ecomplus-stores/monocard/functions/ssr/src/components/CheckoutPage.vue +33 -0
  74. package/ecomplus-stores/monocard/functions/ssr/src/components/Collapse.vue +19 -0
  75. package/ecomplus-stores/monocard/functions/ssr/src/components/DemoVideo.vue +1 -1
  76. package/ecomplus-stores/monocard/functions/ssr/src/components/DocDescription.vue +3 -8
  77. package/ecomplus-stores/monocard/functions/ssr/src/components/FeatureTabs.vue +73 -79
  78. package/ecomplus-stores/monocard/functions/ssr/src/components/FooterStamps.vue +63 -0
  79. package/ecomplus-stores/monocard/functions/ssr/src/components/ImagesGallery.vue +154 -0
  80. package/ecomplus-stores/monocard/functions/ssr/src/components/LoginForm.vue +107 -0
  81. package/ecomplus-stores/monocard/functions/ssr/src/components/LottiePhoneNFC.vue +1 -3
  82. package/ecomplus-stores/monocard/functions/ssr/src/components/MonocardCustomizer.vue +21 -22
  83. package/ecomplus-stores/monocard/functions/ssr/src/components/PitchBar.vue +7 -7
  84. package/ecomplus-stores/monocard/functions/ssr/src/components/Prices.vue +3 -3
  85. package/ecomplus-stores/monocard/functions/ssr/src/components/ProductCard.vue +24 -24
  86. package/ecomplus-stores/monocard/functions/ssr/src/components/ProductDetails.vue +122 -0
  87. package/ecomplus-stores/monocard/functions/ssr/src/components/ProductShelf.vue +11 -11
  88. package/ecomplus-stores/monocard/functions/ssr/src/components/ProductSpecifications.vue +42 -0
  89. package/ecomplus-stores/monocard/functions/ssr/src/components/SearchModal.vue +1 -1
  90. package/ecomplus-stores/monocard/functions/ssr/src/components/ShopFooter.vue +10 -62
  91. package/ecomplus-stores/monocard/functions/ssr/src/components/ShopHeader.vue +25 -31
  92. package/ecomplus-stores/monocard/functions/ssr/src/components/ShopHeaderMenu.vue +8 -8
  93. package/ecomplus-stores/monocard/functions/ssr/src/components/ShopSidenav.vue +10 -11
  94. package/ecomplus-stores/monocard/functions/ssr/src/components/ShopSidenavCategory.vue +9 -10
  95. package/ecomplus-stores/monocard/functions/ssr/src/components/SkuSelector.vue +58 -0
  96. package/ecomplus-stores/monocard/functions/ssr/src/layouts/PageFooter.astro +4 -3
  97. package/ecomplus-stores/monocard/functions/ssr/src/layouts/PageHeader.astro +1 -1
  98. package/ecomplus-stores/monocard/functions/ssr/src/main/Home.astro +2 -1
  99. package/ecomplus-stores/monocard/functions/ssr/src/main/Sections.astro +18 -4
  100. package/ecomplus-stores/monocard/functions/ssr/src/main/Wildcard.astro +10 -1
  101. package/ecomplus-stores/monocard/functions/ssr/src/pages/app/account.astro +34 -0
  102. package/ecomplus-stores/monocard/functions/ssr/src/pages/app/index.astro +62 -0
  103. package/ecomplus-stores/monocard/functions/ssr/src/pages/index.astro +0 -5
  104. package/ecomplus-stores/monocard/functions/ssr/src/pages/~fallback.astro +0 -2
  105. package/ecomplus-stores/monocard/functions/ssr/tailwind.config.cjs +0 -1
  106. package/ecomplus-stores/monocard/functions/with-apps/package.json +3 -3
  107. package/ecomplus-stores/monocard/package.json +2 -2
  108. package/package.json +7 -7
  109. package/packages/api/package.json +1 -1
  110. package/packages/apps/affilate-program/package.json +1 -1
  111. package/packages/apps/correios/package.json +3 -3
  112. package/packages/apps/custom-payment/package.json +1 -1
  113. package/packages/apps/custom-shipping/package.json +1 -1
  114. package/packages/apps/datafrete/package.json +2 -2
  115. package/packages/apps/discounts/package.json +1 -1
  116. package/packages/apps/emails/package.json +1 -1
  117. package/packages/apps/fb-conversions/package.json +3 -3
  118. package/packages/apps/flash-courier/package.json +2 -2
  119. package/packages/apps/frenet/package.json +2 -2
  120. package/packages/apps/galaxpay/package.json +2 -2
  121. package/packages/apps/google-analytics/package.json +2 -2
  122. package/packages/apps/jadlog/package.json +2 -2
  123. package/packages/apps/loyalty-points/package.json +1 -1
  124. package/packages/apps/mandae/package.json +2 -2
  125. package/packages/apps/melhor-envio/package.json +2 -2
  126. package/packages/apps/mercadopago/package.json +2 -2
  127. package/packages/apps/pagarme/package.json +2 -2
  128. package/packages/apps/pagarme-v5/package.json +3 -3
  129. package/packages/apps/paghiper/package.json +2 -2
  130. package/packages/apps/pix/package.json +2 -2
  131. package/packages/apps/tiny-erp/package.json +2 -2
  132. package/packages/apps/webhooks/package.json +2 -2
  133. package/packages/cli/package.json +1 -1
  134. package/packages/config/package.json +1 -1
  135. package/packages/emails/package.json +4 -4
  136. package/packages/eslint/package.json +4 -4
  137. package/packages/events/package.json +1 -1
  138. package/packages/feeds/package.json +1 -1
  139. package/packages/firebase/package.json +2 -2
  140. package/packages/i18n/package.json +1 -1
  141. package/packages/modules/package.json +2 -2
  142. package/packages/passport/package.json +1 -1
  143. package/packages/ssr/package.json +2 -2
  144. package/packages/storefront/client.d.ts +3 -0
  145. package/packages/storefront/config/astro/context-directive.mjs +2 -2
  146. package/packages/storefront/package.json +9 -7
  147. package/packages/storefront/src/analytics/event-to-fbq.ts +82 -0
  148. package/packages/storefront/src/analytics/event-to-ttq.ts +15 -0
  149. package/packages/storefront/src/helpers/afetch.ts +20 -8
  150. package/packages/storefront/src/helpers/sf-utils.ts +15 -0
  151. package/packages/storefront/src/lib/components/Carousel.vue +19 -14
  152. package/packages/storefront/src/lib/composables/use-product-card.ts +12 -0
  153. package/packages/storefront/src/lib/layouts/Base.astro +1 -0
  154. package/packages/storefront/src/lib/layouts/BaseHead.astro +9 -2
  155. package/packages/storefront/src/lib/scripts/push-analytics-events.ts +88 -0
  156. package/packages/storefront/src/lib/scripts/session-utm.ts +16 -6
  157. package/packages/storefront/src/lib/scripts/vbeta-app.ts +4 -0
  158. package/packages/storefront/src/lib/ssr-context.ts +2 -2
  159. package/packages/storefront/src/lib/state/shopping-cart.ts +35 -2
  160. package/packages/storefront/src/lib/state/use-analytics.ts +283 -0
  161. package/packages/test-base/package.json +1 -1
  162. package/packages/types/package.json +1 -1
  163. package/ecomplus-stores/barra-doce/functions/ssr/public/img/uploads/banner2.webp +0 -0
  164. package/ecomplus-stores/barra-doce/functions/ssr/public/img/uploads/headphone.webp +0 -0
  165. package/ecomplus-stores/barra-doce/functions/ssr/public/img/uploads/logo.png +0 -0
  166. package/ecomplus-stores/barra-doce/functions/ssr/public/img/uploads/passion.webp +0 -0
  167. package/ecomplus-stores/barra-doce/functions/ssr/public/img/uploads/rect8589.png +0 -0
  168. package/ecomplus-stores/barra-doce/functions/ssr/public/img/uploads/rect859.png +0 -0
  169. package/ecomplus-stores/barra-doce/functions/ssr/public/img/uploads/rect89.webp +0 -0
  170. package/ecomplus-stores/barra-doce/functions/ssr/src/layouts/Checkout.astro +0 -0
  171. package/ecomplus-stores/monocard/functions/ssr/content/extra-pages/contato.json +0 -11
  172. package/ecomplus-stores/monocard/functions/ssr/public/img/uploads/fluxo.png +0 -0
  173. package/ecomplus-stores/monocard/functions/ssr/src/layouts/Checkout.astro +0 -0
@@ -104,11 +104,11 @@ jobs:
104
104
  ${{ steps.npm-paths.outputs.LIB_PATH }}
105
105
  ${{ steps.npm-paths.outputs.BIN_PATH }}
106
106
  ~/.npm-global/bin
107
- key: ${{ runner.os }}-npm-globals-firebase-tools-12.6.2
107
+ key: ${{ runner.os }}-npm-globals-firebase-tools-12.9.0
108
108
 
109
109
  - if: steps.npm-g-cache.outputs.cache-hit != 'true'
110
110
  shell: bash
111
- run: npm install -g firebase-tools@12.6.2
111
+ run: npm install -g firebase-tools@12.9.0
112
112
 
113
113
  - name: Initialize Firebase emulators
114
114
  shell: bash
package/CHANGELOG.md CHANGED
@@ -2,6 +2,43 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ### [0.33.2](https://github.com/ecomplus/cloud-commerce/compare/v0.33.1...v0.33.2) (2023-11-21)
6
+
7
+
8
+ ### Features
9
+
10
+ * **storefront:** Export `cartEvents` from shopping cart state to handle item add/remove events ([57bdcc8](https://github.com/ecomplus/cloud-commerce/commit/57bdcc85aff78a41e67cc05ec8734f7683261315))
11
+ * **storefront:** Parsing pageview, items and cart events to Meta Pixel ([0ace18a](https://github.com/ecomplus/cloud-commerce/commit/0ace18a2715ae06f5d81513e368fbf73efffefa4))
12
+ * **storefront:** Update `useAnalytics` to emit shopping cart gtag events ([c1a600f](https://github.com/ecomplus/cloud-commerce/commit/c1a600f0970cf2687fc098b42030c43c52db7d10))
13
+
14
+
15
+ ### Bug Fixes
16
+
17
+ * **storefront:** Identifying analytics item view on product page by list id ([cb2cbd2](https://github.com/ecomplus/cloud-commerce/commit/cb2cbd2378a74423f022cb641fab647b3e157c04))
18
+ * **storefront:** Sen page view params on every analytics message payload ([98be05f](https://github.com/ecomplus/cloud-commerce/commit/98be05f5b4a2ef098efe69da4f9ced60eda2741c))
19
+
20
+ ### [0.33.1](https://github.com/ecomplus/cloud-commerce/compare/v0.33.0...v0.33.1) (2023-11-16)
21
+
22
+
23
+ ### Features
24
+
25
+ * **storefront:** Add new `getGtagItem` method on `useAnalytics` state as reusable parser ([2f7cb99](https://github.com/ecomplus/cloud-commerce/commit/2f7cb99ccf37f9c0dfcd484068702e0e7291f0f6))
26
+ * **storefront:** New `send-gtag-events` script, auto emit first pageview ([a888870](https://github.com/ecomplus/cloud-commerce/commit/a88887013901aa42fbf1722fd7a5c578a810c6ed))
27
+ * **storefront:** New `state/use-analytics` module to send and watch events and retrieve session ([f2c10f5](https://github.com/ecomplus/cloud-commerce/commit/f2c10f5d0138755c9526b94f7d033de48123d89d))
28
+ * **storefront:** Send page view analytics event on each view transitions "SPA" page load ([914aec4](https://github.com/ecomplus/cloud-commerce/commit/914aec4e07f9b954d2a5da803d1a2fc1dd01f4b3))
29
+ * **storefront:** Typing analytics gtag events ([12d2325](https://github.com/ecomplus/cloud-commerce/commit/12d2325d4270b9f8233e4c854cccbd5c41098258))
30
+ * **storefront:** Update `scripts/push-analytics-events` to handle GTM `dataLayer` if globally set ([058fe1d](https://github.com/ecomplus/cloud-commerce/commit/058fe1d4b3a6bb6c4a683282a1de1bfc3f0c58c9))
31
+ * **storefront:** Update `useProductCard` composable to send view item gtag event ([f2dafd5](https://github.com/ecomplus/cloud-commerce/commit/f2dafd545471530f1e49f51147312aef169a4ad3))
32
+
33
+
34
+ ### Bug Fixes
35
+
36
+ * **deps:** Update non-major dependencies ([#268](https://github.com/ecomplus/cloud-commerce/issues/268)) ([a2a2ebd](https://github.com/ecomplus/cloud-commerce/commit/a2a2ebdccb6153afb89b5df937ca0ea30fa16300))
37
+ * **storefront:** Ensure async components hydration with `client:context` on first load ([782ba4a](https://github.com/ecomplus/cloud-commerce/commit/782ba4a0d4b0388e2081c1181393b7c252ce99fe))
38
+ * **storefront:** Keep UTM on local storage and consider valid for 7 days ([b0b2d6e](https://github.com/ecomplus/cloud-commerce/commit/b0b2d6e33948798f8a564bc0ee9a0467a09f29d9))
39
+ * **storefront:** Properly set page meta title and description from route state and store settings ([39f1ce4](https://github.com/ecomplus/cloud-commerce/commit/39f1ce4b0f8c20777770b0eba67d0e20d4d4f84e))
40
+ * **storefront:** Update `<Carousel>` to properly handle partially fit slides ([86666f7](https://github.com/ecomplus/cloud-commerce/commit/86666f7451ebaa5be09df303b297f17b1ac7be58))
41
+
5
42
  ## [0.33.0](https://github.com/ecomplus/cloud-commerce/compare/v0.32.0...v0.33.0) (2023-11-09)
6
43
 
7
44
 
package/action.yml CHANGED
@@ -145,11 +145,11 @@ runs:
145
145
  ${{ steps.npm-paths.outputs.LIB_PATH }}
146
146
  ${{ steps.npm-paths.outputs.BIN_PATH }}
147
147
  ~/.npm-global/bin
148
- key: ${{ runner.os }}-npm-g-firebase-tools-12.6.2
148
+ key: ${{ runner.os }}-npm-g-firebase-tools-12.9.0
149
149
 
150
150
  - if: ${{ github.event_name == 'push' && steps.npm-g-cache.outputs.cache-hit != 'true' }}
151
151
  shell: bash
152
- run: npm i --location=global firebase-tools@12.6.2
152
+ run: npm i --location=global firebase-tools@12.9.0
153
153
 
154
154
  - if: steps.npm-cache-many.outputs.cache-hit != 'true'
155
155
  name: Install codebase "many" dependencies
@@ -24,7 +24,7 @@ jobs:
24
24
  if: |
25
25
  !contains(github.event.head_commit.message, '[skip ci]')
26
26
  steps:
27
- - uses: actions/checkout@v3
27
+ - uses: actions/checkout@v4
28
28
  with:
29
29
  fetch-depth: 0
30
30
  - uses: ecomplus/cloud-commerce@main
@@ -16,7 +16,7 @@ jobs:
16
16
  name: calibreapp/image-actions
17
17
  runs-on: ubuntu-latest
18
18
  steps:
19
- - uses: actions/checkout@v3
19
+ - uses: actions/checkout@v4
20
20
  - name: Compress images
21
21
  uses: calibreapp/image-actions@main
22
22
  with:
@@ -2,6 +2,9 @@
2
2
  "editor.quickSuggestions": {
3
3
  "strings": true
4
4
  },
5
+ "editor.codeActionsOnSave": {
6
+ "source.fixAll.eslint": true
7
+ },
5
8
  "files.associations": {
6
9
  "*.css": "tailwindcss"
7
10
  },
@@ -15,8 +15,8 @@
15
15
  },
16
16
  "main": "index.js",
17
17
  "dependencies": {
18
- "@cloudcommerce/feeds": "^0.32.0",
19
- "@cloudcommerce/firebase": "^0.32.0",
20
- "@cloudcommerce/passport": "^0.32.0"
18
+ "@cloudcommerce/feeds": "^0.33.1",
19
+ "@cloudcommerce/firebase": "^0.33.1",
20
+ "@cloudcommerce/passport": "^0.33.1"
21
21
  }
22
22
  }
@@ -1,5 +1,5 @@
1
1
  {
2
- "title": "Termos de serviço",
2
+ "title": "Privacidade e termos de serviço",
3
3
  "date": "",
4
4
  "meta_title": "",
5
5
  "meta_description": "",
@@ -28,6 +28,26 @@
28
28
  "isShuffle": false,
29
29
  "limit": 12,
30
30
  "page": 1
31
+ },
32
+ {
33
+ "type": "product-shelf",
34
+ "collectionIdAndInfo": null,
35
+ "sort": "-sales",
36
+ "title": "Ingredientes que fazem a diferença",
37
+ "isHeadless": false,
38
+ "isShuffle": false,
39
+ "limit": 12,
40
+ "page": 3
41
+ },
42
+ {
43
+ "type": "product-shelf",
44
+ "collectionIdAndInfo": null,
45
+ "sort": "-created_at",
46
+ "title": "Fitas de Natal",
47
+ "isHeadless": false,
48
+ "isShuffle": false,
49
+ "limit": 12,
50
+ "page": 3
31
51
  }
32
52
  ]
33
53
  }
@@ -5,7 +5,8 @@
5
5
  },
6
6
  {
7
7
  "type": "product-details",
8
- "hasDescription": true
8
+ "hasDescription": true,
9
+ "hasSpecifications": true
9
10
  },
10
11
  {
11
12
  "type": "related-products"
@@ -1,6 +1,5 @@
1
1
  {
2
2
  "domain": "barradoce.ecomplus.app",
3
- "assetsPrefix": "https://s2-barradoce.b-cdn.net",
4
3
  "name": "BarraDoce",
5
4
  "description": "Loja de utensílios de confeitaria e acessórios de festa. Tudo o que precisa para fazer bolos, chocolates, biscoitos e muito mais.",
6
5
  "logo": "/img/uploads/logo-barradoce.webp",
@@ -28,6 +27,10 @@
28
27
  {
29
28
  "title": "Fale conosco",
30
29
  "href": "/pages/contato"
30
+ },
31
+ {
32
+ "title": "Privacidade e termos",
33
+ "href": "/p/terms"
31
34
  }
32
35
  ],
33
36
  "paymentMethods": [
@@ -17,16 +17,17 @@
17
17
  },
18
18
  "main": "index.js",
19
19
  "dependencies": {
20
- "@cloudcommerce/api": "^0.32.0",
21
- "@cloudcommerce/firebase": "^0.32.0",
22
- "@cloudcommerce/ssr": "^0.32.0",
20
+ "@cloudcommerce/api": "^0.33.1",
21
+ "@cloudcommerce/firebase": "^0.33.1",
22
+ "@cloudcommerce/ssr": "^0.33.1",
23
23
  "@headlessui/vue": "^1.7.16"
24
24
  },
25
25
  "devDependencies": {
26
- "@cloudcommerce/i18n": "^0.32.0",
27
- "@cloudcommerce/storefront": "^0.32.0",
28
- "@cloudcommerce/types": "^0.32.0",
29
- "@fontsource/croissant-one": "^5.0.9",
30
- "@iconify-json/mingcute": "^1.1.9"
26
+ "@cloudcommerce/i18n": "^0.33.1",
27
+ "@cloudcommerce/storefront": "^0.33.1",
28
+ "@cloudcommerce/types": "^0.33.1",
29
+ "@fontsource/croissant-one": "^5.0.17",
30
+ "@iconify-json/mingcute": "^1.1.11",
31
+ "photoswipe": "^5.4.2"
31
32
  }
32
33
  }
@@ -2,5 +2,5 @@ User-agent: *
2
2
  Allow: /
3
3
  Disallow: /app/
4
4
  Disallow: /admin/
5
- Disallow: /api/
5
+ Disallow: /_api/
6
6
  Disallow: /~*
@@ -7,7 +7,7 @@ html {
7
7
  body {
8
8
  overflow-x: hidden;
9
9
  }
10
- a, button, button > * {
10
+ a, button, button > *, [role=button], [role=button] > * {
11
11
  transition: background-color var(--transition),
12
12
  color var(--transition), border-color var(--transition),
13
13
  opacity var(--transition), transform var(--transition-fast);
@@ -20,13 +20,13 @@ a, button, button > * {
20
20
 
21
21
  [class*=ui-btn] {
22
22
  @apply not-prose inline-block text-base font-medium px-4 py-2 rounded
23
- border-2 border-transparent focus:ring-1 active:ring-2;
23
+ border-2 border-transparent focus:ring-1 focus:ring-offset-1 active:ring-2;
24
24
  }
25
25
  .ui-btn-sm {
26
26
  @apply text-sm px-3 py-1.5 border-1;
27
27
  }
28
28
  .ui-btn-lg {
29
- @apply text-lg md:text-xl font-bold px-6 py-2.5 active:ring-3;
29
+ @apply text-lg font-bold px-6 py-3 lg:text-base lg:py-2.5 active:ring-3;
30
30
  }
31
31
  .ui-btn-primary {
32
32
  @apply primary border-primary hover:primary-bold ring-primary/30;
@@ -60,6 +60,17 @@ a, button, button > * {
60
60
  @apply text-lg min-w-[1.75rem] px-2;
61
61
  }
62
62
 
63
- .ui-section {
63
+ .ui-alert {
64
+ @apply bg-warning-100 text-warning-800 border-warning-200
65
+ border text-base rounded px-4 py-3;
66
+ }
67
+
68
+ [class*=ui-section] {
64
69
  @apply container 2xl:max-w-7xl mx-auto px-4 sm:px-2 my-6 md:my-8;
65
70
  }
71
+ .ui-section {
72
+ @apply sm:px-2 my-6 md:my-8;
73
+ }
74
+ .ui-section-slim {
75
+ @apply my-3;
76
+ }
@@ -7,9 +7,11 @@
7
7
  <div v-if="open">
8
8
  <span v-once>{{ initializeFirebaseAuth() }}</span>
9
9
  </div>
10
- <MenuButton class="outline-none" :aria-label="$t.i19myAccount">
11
- <slot name="button" v-bind="{ open }" />
12
- </MenuButton>
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>
13
15
  <Fade>
14
16
  <MenuItems class="divide-base-100 absolute -right-8 mt-2
15
17
  w-56 divide-y rounded bg-white shadow
@@ -0,0 +1,62 @@
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-line 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>
@@ -15,7 +15,10 @@
15
15
  >
16
16
  <slot name="picture" />
17
17
  </ALink>
18
- <div v-if="hasHeader" class="lg:col-span-2 p-8 lg:p-12 xl:ps-32 mb-3 md:mb-0">
18
+ <div
19
+ v-if="hasHeader"
20
+ class="mb-3 p-8 md:mb-0 lg:col-span-2 lg:p-12 xl:ps-32"
21
+ >
19
22
  <Component
20
23
  v-if="parsedTitle"
21
24
  :is="headingTag"
@@ -25,14 +28,14 @@
25
28
  </Component>
26
29
  <p
27
30
  v-if="parsedSubtitle"
28
- class="mt-4 md:mt-6 text-base-800 uppercase font-medium text-lg lg:text-xl"
31
+ class="text-base-800 mt-4 text-lg font-medium uppercase md:mt-6 lg:text-xl"
29
32
  >
30
33
  {{ parsedSubtitle }}
31
34
  </p>
32
35
  <ALink
33
36
  v-if="parsedButtonText"
34
37
  :href="buttonLink"
35
- class="ui-btn-lg ui-btn-contrast min-w-[150px] mt-7 md:mt-10"
38
+ class="ui-btn-lg ui-btn-contrast mt-7 min-w-[150px] md:mt-10"
36
39
  >
37
40
  <i class="i-tag-chevron-fill mr-1"></i>
38
41
  {{ parsedButtonText }}
@@ -0,0 +1,44 @@
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,30 +1,30 @@
1
1
  <template>
2
2
  <article class="relative bg-white shadow-sm">
3
- <ALink :href="link" class="flex items-center gap-5 p-4 group">
3
+ <ALink :href="link" class="group flex items-center gap-5 p-4">
4
4
  <AImg
5
5
  v-if="image"
6
6
  :picture="image"
7
7
  :alt="title"
8
- class="w-20 h-20 object-cover"
8
+ class="h-20 w-20 object-cover"
9
9
  />
10
- <p class="py-2 flex-auto text-sm text-base-700
11
- group-hover:text-base-900 group-hover:underline">
10
+ <p class="text-base-700 group-hover:text-base-900 flex-auto py-2
11
+ text-sm group-hover:underline">
12
12
  {{ title }}
13
13
  </p>
14
14
  </ALink>
15
15
  <button
16
16
  v-if="cartItem._id"
17
17
  @click.stop="removeCartItem(cartItem._id)"
18
- class="absolute top-0 right-0 p-2 opacity-70 hover:opacity-100"
18
+ class="absolute right-0 top-0 p-2 opacity-70 hover:opacity-100"
19
19
  :aria-label="$t.i19remove"
20
20
  >
21
- <span class="w-5 h-5 text-sm leading-none flex flex-col justify-center
22
- rounded-full border-3 text-danger-800 border-danger-700/30">
23
- <i class="i-close my-0 mx-auto"></i>
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
24
  </span>
25
25
  </button>
26
- <div class="flex justify-between items-center border-t-2 border-base-100">
27
- <div class="border-r-2 border-base-100">
26
+ <div class="border-base-100 flex items-center justify-between border-t-2">
27
+ <div class="border-base-100 border-r-2">
28
28
  <QuantitySelector
29
29
  v-model="cartItem.quantity"
30
30
  :min="cartItem.min_quantity"
@@ -36,7 +36,7 @@
36
36
  :price="finalPrice"
37
37
  :has-cashback="false"
38
38
  :has-price-options="false"
39
- class="px-4 py-2.5 text-[95%] text-right"
39
+ class="px-4 py-2.5 text-right text-[95%]"
40
40
  />
41
41
  </div>
42
42
  </article>
@@ -1,8 +1,8 @@
1
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">
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
6
  {{ $t.i19myShoppingCart }}
7
7
  </span>
8
8
  <span class="min-w-[3rem] text-right">
@@ -11,35 +11,38 @@
11
11
  </span>
12
12
  </span>
13
13
  </header>
14
- <article class="grow overflow-y-auto bg-base-50">
15
- <div v-if="freeShippingFromValue" class="text-sm text-center">
14
+ <article class="bg-base-50 grow overflow-y-auto">
15
+ <div v-if="freeShippingFromValue" class="text-center text-sm">
16
16
  <div
17
17
  v-if="freeShippingFromValue > shoppingCart.subtotal"
18
- class="p-3 secondary-subtle"
18
+ class="secondary-subtle p-3"
19
19
  >
20
20
  {{ $t.i19add$1ToEarn.replace('$1',
21
21
  $money(freeShippingFromValue - shoppingCart.subtotal)) }}
22
22
  <strong class="lowercase">{{ $t.i19freeShipping }}</strong>
23
23
  </div>
24
- <div v-else class="p-3 bg-success-50 text-success-800">
24
+ <div v-else class="bg-success-50 text-success-800 p-3">
25
25
  <i class="text-success-900 i-check mr-1"></i>
26
26
  {{ $t.i19freeShippingFrom }} {{ $money(freeShippingFromValue) }}
27
27
  </div>
28
28
  </div>
29
- <ul class="px-4 pt-4 pb-2">
29
+ <ul class="px-4 pb-2 pt-4">
30
30
  <li v-for="(item, i) in shoppingCart.items" :key="i">
31
31
  <CartItem :item="item" class="mb-3" />
32
32
  </li>
33
33
  </ul>
34
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">
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
37
  <div class="col-span-2">
38
38
  {{ $t.i19subtotal }}
39
39
  </div>
40
40
  <Prices :price="shoppingCart.subtotal" class="col-span-3 text-lg" />
41
41
  </div>
42
- <CheckoutLink class="ui-btn-lg ui-btn-primary w-full text-right my-2.5">
42
+ <CheckoutLink
43
+ to="checkout"
44
+ class="ui-btn-lg ui-btn-primary my-2.5 w-full text-right"
45
+ >
43
46
  <i class="i-check mr-2"></i>
44
47
  {{ $t.i19checkout }}
45
48
  </CheckoutLink>
@@ -48,7 +51,7 @@
48
51
  @click.prevent="emit('close')"
49
52
  class="ui-link text-base-500 hover:text-base-700 text-sm"
50
53
  >
51
- <i class="i-arrow-left mr-1"></i>
54
+ <i class="i-arrow-right-line mr-1 rotate-180"></i>
52
55
  {{ $t.i19continueShopping }}
53
56
  </a>
54
57
  </footer>
@@ -0,0 +1,33 @@
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>
@@ -0,0 +1,19 @@
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>
@@ -0,0 +1,28 @@
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>