@pradip1995/create-storefront 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (338) hide show
  1. package/bin/create-storefront.js +239 -0
  2. package/lib/kit-next-config.js +84 -0
  3. package/package.json +32 -0
  4. package/templates/storefront/.eslintrc.json +3 -0
  5. package/templates/storefront/README.md +35 -0
  6. package/templates/storefront/check-env-variables.js +51 -0
  7. package/templates/storefront/kit-next-config.js +71 -0
  8. package/templates/storefront/next-env.d.ts +5 -0
  9. package/templates/storefront/next.config.js +25 -0
  10. package/templates/storefront/package.json +56 -0
  11. package/templates/storefront/postcss.config.js +6 -0
  12. package/templates/storefront/public/favicon.png +0 -0
  13. package/templates/storefront/src/app/[countryCode]/(checkout)/checkout/page.tsx +23 -0
  14. package/templates/storefront/src/app/[countryCode]/(checkout)/checkout/payment/page.tsx +47 -0
  15. package/templates/storefront/src/app/[countryCode]/(checkout)/layout.tsx +31 -0
  16. package/templates/storefront/src/app/[countryCode]/(checkout)/not-found.tsx +19 -0
  17. package/templates/storefront/src/app/[countryCode]/(main)/account/@dashboard/addresses/page.tsx +31 -0
  18. package/templates/storefront/src/app/[countryCode]/(main)/account/@dashboard/loading.tsx +9 -0
  19. package/templates/storefront/src/app/[countryCode]/(main)/account/@dashboard/orders/details/[id]/page.tsx +35 -0
  20. package/templates/storefront/src/app/[countryCode]/(main)/account/@dashboard/orders/exchange/[id]/page.tsx +47 -0
  21. package/templates/storefront/src/app/[countryCode]/(main)/account/@dashboard/orders/page.tsx +28 -0
  22. package/templates/storefront/src/app/[countryCode]/(main)/account/@dashboard/orders/return/[id]/page.tsx +66 -0
  23. package/templates/storefront/src/app/[countryCode]/(main)/account/@dashboard/page.tsx +22 -0
  24. package/templates/storefront/src/app/[countryCode]/(main)/account/@dashboard/payment-methods/page.tsx +23 -0
  25. package/templates/storefront/src/app/[countryCode]/(main)/account/@dashboard/profile/page.tsx +43 -0
  26. package/templates/storefront/src/app/[countryCode]/(main)/account/@login/default.tsx +11 -0
  27. package/templates/storefront/src/app/[countryCode]/(main)/account/@login/page.tsx +18 -0
  28. package/templates/storefront/src/app/[countryCode]/(main)/account/guest-orders/page.tsx +13 -0
  29. package/templates/storefront/src/app/[countryCode]/(main)/account/layout.tsx +22 -0
  30. package/templates/storefront/src/app/[countryCode]/(main)/account/loading.tsx +9 -0
  31. package/templates/storefront/src/app/[countryCode]/(main)/cart/loading.tsx +5 -0
  32. package/templates/storefront/src/app/[countryCode]/(main)/cart/not-found.tsx +21 -0
  33. package/templates/storefront/src/app/[countryCode]/(main)/cart/page.tsx +23 -0
  34. package/templates/storefront/src/app/[countryCode]/(main)/categories/[...category]/page.tsx +11 -0
  35. package/templates/storefront/src/app/[countryCode]/(main)/collections/[handle]/page.tsx +11 -0
  36. package/templates/storefront/src/app/[countryCode]/(main)/contact/page.tsx +21 -0
  37. package/templates/storefront/src/app/[countryCode]/(main)/guest-orders/page.tsx +12 -0
  38. package/templates/storefront/src/app/[countryCode]/(main)/help/page.tsx +28 -0
  39. package/templates/storefront/src/app/[countryCode]/(main)/layout.tsx +21 -0
  40. package/templates/storefront/src/app/[countryCode]/(main)/not-found.tsx +20 -0
  41. package/templates/storefront/src/app/[countryCode]/(main)/order/[id]/confirmed/loading.tsx +5 -0
  42. package/templates/storefront/src/app/[countryCode]/(main)/order/[id]/confirmed/page.tsx +23 -0
  43. package/templates/storefront/src/app/[countryCode]/(main)/order/[id]/transfer/[token]/accept/page.tsx +41 -0
  44. package/templates/storefront/src/app/[countryCode]/(main)/order/[id]/transfer/[token]/decline/page.tsx +41 -0
  45. package/templates/storefront/src/app/[countryCode]/(main)/order/[id]/transfer/[token]/page.tsx +38 -0
  46. package/templates/storefront/src/app/[countryCode]/(main)/order/exchange/[id]/page.tsx +47 -0
  47. package/templates/storefront/src/app/[countryCode]/(main)/order/return/[id]/page.tsx +61 -0
  48. package/templates/storefront/src/app/[countryCode]/(main)/orders/[id]/page.tsx +33 -0
  49. package/templates/storefront/src/app/[countryCode]/(main)/page.tsx +24 -0
  50. package/templates/storefront/src/app/[countryCode]/(main)/privacy-policy/page.tsx +173 -0
  51. package/templates/storefront/src/app/[countryCode]/(main)/products/[handle]/page.tsx +193 -0
  52. package/templates/storefront/src/app/[countryCode]/(main)/reset-password/page.tsx +192 -0
  53. package/templates/storefront/src/app/[countryCode]/(main)/store/page.tsx +72 -0
  54. package/templates/storefront/src/app/[countryCode]/(main)/terms-of-use/page.tsx +179 -0
  55. package/templates/storefront/src/app/[countryCode]/(main)/wishlist/page.tsx +19 -0
  56. package/templates/storefront/src/app/api/meta/event/route.ts +63 -0
  57. package/templates/storefront/src/app/auth/customer/google/callback/page.tsx +126 -0
  58. package/templates/storefront/src/app/layout.tsx +104 -0
  59. package/templates/storefront/src/app/not-found.tsx +30 -0
  60. package/templates/storefront/src/app/opengraph-image.jpg +0 -0
  61. package/templates/storefront/src/app/robots.ts +15 -0
  62. package/templates/storefront/src/app/sitemap.ts +65 -0
  63. package/templates/storefront/src/app/twitter-image.jpg +0 -0
  64. package/templates/storefront/src/modules/account/components/account-deletion/index.tsx +160 -0
  65. package/templates/storefront/src/modules/account/components/account-info/index.tsx +145 -0
  66. package/templates/storefront/src/modules/account/components/account-nav/icons.tsx +43 -0
  67. package/templates/storefront/src/modules/account/components/account-nav/index.tsx +318 -0
  68. package/templates/storefront/src/modules/account/components/account-nav/logout-modal.tsx +92 -0
  69. package/templates/storefront/src/modules/account/components/account-nav/payment-methods-icon.tsx +9 -0
  70. package/templates/storefront/src/modules/account/components/address-book/index.tsx +47 -0
  71. package/templates/storefront/src/modules/account/components/address-card/add-address.tsx +377 -0
  72. package/templates/storefront/src/modules/account/components/address-card/edit-address-modal.tsx +468 -0
  73. package/templates/storefront/src/modules/account/components/deletion-pending-modal/index.tsx +213 -0
  74. package/templates/storefront/src/modules/account/components/forgot-password/index.tsx +1 -0
  75. package/templates/storefront/src/modules/account/components/login/index.tsx +1 -0
  76. package/templates/storefront/src/modules/account/components/order-card/index.tsx +221 -0
  77. package/templates/storefront/src/modules/account/components/order-overview/index.tsx +159 -0
  78. package/templates/storefront/src/modules/account/components/overview/index.tsx +189 -0
  79. package/templates/storefront/src/modules/account/components/profile-billing-address/index.tsx +447 -0
  80. package/templates/storefront/src/modules/account/components/profile-email/index.tsx +75 -0
  81. package/templates/storefront/src/modules/account/components/profile-form/index.tsx +416 -0
  82. package/templates/storefront/src/modules/account/components/profile-name/index.tsx +76 -0
  83. package/templates/storefront/src/modules/account/components/profile-password/index.tsx +70 -0
  84. package/templates/storefront/src/modules/account/components/profile-phone/index.tsx +185 -0
  85. package/templates/storefront/src/modules/account/components/register/index.tsx +1 -0
  86. package/templates/storefront/src/modules/account/components/return-item-selector/index.tsx +187 -0
  87. package/templates/storefront/src/modules/account/components/return-shipping-selector/index.tsx +118 -0
  88. package/templates/storefront/src/modules/account/components/transfer-request-form/index.tsx +81 -0
  89. package/templates/storefront/src/modules/account/templates/account-layout.tsx +38 -0
  90. package/templates/storefront/src/modules/account/templates/exchange-request-template.tsx +389 -0
  91. package/templates/storefront/src/modules/account/templates/guest-orders-template.tsx +123 -0
  92. package/templates/storefront/src/modules/account/templates/login-template.tsx +44 -0
  93. package/templates/storefront/src/modules/account/templates/payment-methods-template.tsx +478 -0
  94. package/templates/storefront/src/modules/account/templates/return-request-template.tsx +300 -0
  95. package/templates/storefront/src/modules/cart/components/abandoned-carts/ScrollToPendingOrdersButton.tsx +21 -0
  96. package/templates/storefront/src/modules/cart/components/abandoned-carts/index.tsx +335 -0
  97. package/templates/storefront/src/modules/cart/components/applied-promotions/index.tsx +121 -0
  98. package/templates/storefront/src/modules/cart/components/cart-delivery-selection/index.tsx +203 -0
  99. package/templates/storefront/src/modules/cart/components/cart-item-card/index.tsx +476 -0
  100. package/templates/storefront/src/modules/cart/components/cart-item-select/index.tsx +73 -0
  101. package/templates/storefront/src/modules/cart/components/cart-view-tracker/index.tsx +44 -0
  102. package/templates/storefront/src/modules/cart/components/delivery-information/index.tsx +89 -0
  103. package/templates/storefront/src/modules/cart/components/empty-cart-message/index.tsx +38 -0
  104. package/templates/storefront/src/modules/cart/components/item/index.tsx +150 -0
  105. package/templates/storefront/src/modules/cart/components/pincode-checker/index.tsx +174 -0
  106. package/templates/storefront/src/modules/cart/components/sign-in-prompt/index.tsx +26 -0
  107. package/templates/storefront/src/modules/cart/components/you-may-also-like/index.tsx +137 -0
  108. package/templates/storefront/src/modules/cart/templates/index.tsx +88 -0
  109. package/templates/storefront/src/modules/cart/templates/items.tsx +49 -0
  110. package/templates/storefront/src/modules/cart/templates/preview.tsx +51 -0
  111. package/templates/storefront/src/modules/cart/templates/summary.tsx +29 -0
  112. package/templates/storefront/src/modules/checkout/components/add-address-modal/index.tsx +390 -0
  113. package/templates/storefront/src/modules/checkout/components/address-card/index.tsx +135 -0
  114. package/templates/storefront/src/modules/checkout/components/address-select/index.tsx +116 -0
  115. package/templates/storefront/src/modules/checkout/components/addresses/index.tsx +605 -0
  116. package/templates/storefront/src/modules/checkout/components/back-link/index.tsx +32 -0
  117. package/templates/storefront/src/modules/checkout/components/billing_address/index.tsx +301 -0
  118. package/templates/storefront/src/modules/checkout/components/checkout-begin-tracker/index.tsx +45 -0
  119. package/templates/storefront/src/modules/checkout/components/checkout-leave-guard/index.tsx +109 -0
  120. package/templates/storefront/src/modules/checkout/components/checkout-shipping-tracker/index.tsx +45 -0
  121. package/templates/storefront/src/modules/checkout/components/country-select/index.tsx +50 -0
  122. package/templates/storefront/src/modules/checkout/components/discount-code/index.tsx +220 -0
  123. package/templates/storefront/src/modules/checkout/components/error-message/index.tsx +13 -0
  124. package/templates/storefront/src/modules/checkout/components/payment/index.tsx +572 -0
  125. package/templates/storefront/src/modules/checkout/components/payment-button/index.tsx +257 -0
  126. package/templates/storefront/src/modules/checkout/components/payment-button/razorpay-payment-button.tsx +136 -0
  127. package/templates/storefront/src/modules/checkout/components/payment-container/index.tsx +129 -0
  128. package/templates/storefront/src/modules/checkout/components/payment-test/index.tsx +12 -0
  129. package/templates/storefront/src/modules/checkout/components/payment-wrapper/index.tsx +50 -0
  130. package/templates/storefront/src/modules/checkout/components/payment-wrapper/stripe-wrapper.tsx +54 -0
  131. package/templates/storefront/src/modules/checkout/components/processing-overlay/index.tsx +83 -0
  132. package/templates/storefront/src/modules/checkout/components/review/index.tsx +60 -0
  133. package/templates/storefront/src/modules/checkout/components/select-address-modal/index.tsx +103 -0
  134. package/templates/storefront/src/modules/checkout/components/shipping/index.tsx +533 -0
  135. package/templates/storefront/src/modules/checkout/components/shipping-address/index.tsx +521 -0
  136. package/templates/storefront/src/modules/checkout/components/submit-button/index.tsx +32 -0
  137. package/templates/storefront/src/modules/checkout/templates/checkout-form/index.tsx +38 -0
  138. package/templates/storefront/src/modules/checkout/templates/checkout-summary/index.tsx +274 -0
  139. package/templates/storefront/src/modules/common/components/breadcrumb/index.tsx +43 -0
  140. package/templates/storefront/src/modules/common/components/cart-totals/index.tsx +473 -0
  141. package/templates/storefront/src/modules/common/components/checkbox/index.tsx +98 -0
  142. package/templates/storefront/src/modules/common/components/delete-button/index.tsx +156 -0
  143. package/templates/storefront/src/modules/common/components/divider/index.tsx +9 -0
  144. package/templates/storefront/src/modules/common/components/filter-checkbox-group/index.tsx +134 -0
  145. package/templates/storefront/src/modules/common/components/filter-radio-group/index.tsx +62 -0
  146. package/templates/storefront/src/modules/common/components/input/index.tsx +79 -0
  147. package/templates/storefront/src/modules/common/components/interactive-link/index.tsx +33 -0
  148. package/templates/storefront/src/modules/common/components/line-item-options/index.tsx +26 -0
  149. package/templates/storefront/src/modules/common/components/line-item-price/index.tsx +64 -0
  150. package/templates/storefront/src/modules/common/components/line-item-unit-price/index.tsx +61 -0
  151. package/templates/storefront/src/modules/common/components/localized-client-link/index.tsx +32 -0
  152. package/templates/storefront/src/modules/common/components/login-popup/index.tsx +78 -0
  153. package/templates/storefront/src/modules/common/components/modal/index.tsx +123 -0
  154. package/templates/storefront/src/modules/common/components/native-select/index.tsx +75 -0
  155. package/templates/storefront/src/modules/common/components/obfuscated-email/index.tsx +30 -0
  156. package/templates/storefront/src/modules/common/components/product/product-rating/index.tsx +172 -0
  157. package/templates/storefront/src/modules/common/components/product/review-modal/index.tsx +333 -0
  158. package/templates/storefront/src/modules/common/components/product/share-button/index.tsx +227 -0
  159. package/templates/storefront/src/modules/common/components/product/wishlist-icon/index.tsx +46 -0
  160. package/templates/storefront/src/modules/common/components/radio/index.tsx +27 -0
  161. package/templates/storefront/src/modules/common/components/select/index.tsx +164 -0
  162. package/templates/storefront/src/modules/common/components/side-panel/index.tsx +65 -0
  163. package/templates/storefront/src/modules/common/icons/arrow-left.tsx +36 -0
  164. package/templates/storefront/src/modules/common/icons/back.tsx +37 -0
  165. package/templates/storefront/src/modules/common/icons/bancontact.tsx +26 -0
  166. package/templates/storefront/src/modules/common/icons/chevron-down.tsx +30 -0
  167. package/templates/storefront/src/modules/common/icons/delivered.tsx +29 -0
  168. package/templates/storefront/src/modules/common/icons/envelope.tsx +27 -0
  169. package/templates/storefront/src/modules/common/icons/eye-off.tsx +37 -0
  170. package/templates/storefront/src/modules/common/icons/eye.tsx +37 -0
  171. package/templates/storefront/src/modules/common/icons/fast-delivery.tsx +65 -0
  172. package/templates/storefront/src/modules/common/icons/ideal.tsx +26 -0
  173. package/templates/storefront/src/modules/common/icons/lock.tsx +31 -0
  174. package/templates/storefront/src/modules/common/icons/map-pin.tsx +37 -0
  175. package/templates/storefront/src/modules/common/icons/medusa.tsx +27 -0
  176. package/templates/storefront/src/modules/common/icons/menu.tsx +45 -0
  177. package/templates/storefront/src/modules/common/icons/nextjs.tsx +27 -0
  178. package/templates/storefront/src/modules/common/icons/package.tsx +44 -0
  179. package/templates/storefront/src/modules/common/icons/paypal.tsx +30 -0
  180. package/templates/storefront/src/modules/common/icons/phone.tsx +30 -0
  181. package/templates/storefront/src/modules/common/icons/placeholder-image.tsx +44 -0
  182. package/templates/storefront/src/modules/common/icons/refresh.tsx +51 -0
  183. package/templates/storefront/src/modules/common/icons/spinner.tsx +37 -0
  184. package/templates/storefront/src/modules/common/icons/trash.tsx +51 -0
  185. package/templates/storefront/src/modules/common/icons/user.tsx +37 -0
  186. package/templates/storefront/src/modules/common/icons/x.tsx +37 -0
  187. package/templates/storefront/src/modules/contact/templates/index.tsx +272 -0
  188. package/templates/storefront/src/modules/help/templates/index.tsx +629 -0
  189. package/templates/storefront/src/modules/home/components/dynamic-banner/index.tsx +190 -0
  190. package/templates/storefront/src/modules/home/components/featured-products/index.tsx +16 -0
  191. package/templates/storefront/src/modules/home/components/featured-products/product-rail/index.tsx +51 -0
  192. package/templates/storefront/src/modules/home/components/features/index.tsx +1 -0
  193. package/templates/storefront/src/modules/home/components/hero/index.tsx +1 -0
  194. package/templates/storefront/src/modules/home/components/loved-by-moms/index.tsx +1 -0
  195. package/templates/storefront/src/modules/home/components/new-arrivals/index.tsx +1 -0
  196. package/templates/storefront/src/modules/home/components/shop-by-age/index.tsx +1 -0
  197. package/templates/storefront/src/modules/home/components/shop-by-category/index.tsx +1 -0
  198. package/templates/storefront/src/modules/home/components/testimonials/index.tsx +1 -0
  199. package/templates/storefront/src/modules/home/components/why-choose-us/dynamic-features.tsx +93 -0
  200. package/templates/storefront/src/modules/home/components/why-choose-us/index.tsx +1 -0
  201. package/templates/storefront/src/modules/layout/components/account-dropdown/index.tsx +56 -0
  202. package/templates/storefront/src/modules/layout/components/cart-button/index.tsx +8 -0
  203. package/templates/storefront/src/modules/layout/components/cart-dropdown/index.tsx +424 -0
  204. package/templates/storefront/src/modules/layout/components/cart-mismatch-banner/index.tsx +57 -0
  205. package/templates/storefront/src/modules/layout/components/cookie-consent/index.tsx +116 -0
  206. package/templates/storefront/src/modules/layout/components/country-select/index.tsx +135 -0
  207. package/templates/storefront/src/modules/layout/components/desktop-search/index.tsx +148 -0
  208. package/templates/storefront/src/modules/layout/components/dynamic-logo/index.tsx +27 -0
  209. package/templates/storefront/src/modules/layout/components/footer-categories/index.tsx +34 -0
  210. package/templates/storefront/src/modules/layout/components/footer-contact/index.tsx +87 -0
  211. package/templates/storefront/src/modules/layout/components/footer-description/index.tsx +12 -0
  212. package/templates/storefront/src/modules/layout/components/footer-logo/index.tsx +22 -0
  213. package/templates/storefront/src/modules/layout/components/footer-newsletter/index.tsx +100 -0
  214. package/templates/storefront/src/modules/layout/components/language-select/index.tsx +192 -0
  215. package/templates/storefront/src/modules/layout/components/medusa-cta/index.tsx +21 -0
  216. package/templates/storefront/src/modules/layout/components/mobile-menu/index.tsx +296 -0
  217. package/templates/storefront/src/modules/layout/components/nav-links/index.tsx +66 -0
  218. package/templates/storefront/src/modules/layout/components/nav-wrapper/index.tsx +14 -0
  219. package/templates/storefront/src/modules/layout/components/promo-bar/index.tsx +7 -0
  220. package/templates/storefront/src/modules/layout/components/promo-bar/promo-bar-content.tsx +174 -0
  221. package/templates/storefront/src/modules/layout/components/push-notification-manager/index.tsx +191 -0
  222. package/templates/storefront/src/modules/layout/components/search-panel/index.tsx +136 -0
  223. package/templates/storefront/src/modules/layout/components/side-menu/index.tsx +144 -0
  224. package/templates/storefront/src/modules/layout/components/verification-banner/index.tsx +217 -0
  225. package/templates/storefront/src/modules/layout/components/wishlist-counter/index.tsx +17 -0
  226. package/templates/storefront/src/modules/layout/templates/footer/index.tsx +7 -0
  227. package/templates/storefront/src/modules/layout/templates/nav/index.tsx +14 -0
  228. package/templates/storefront/src/modules/order/components/cancel-order-modal/index.tsx +168 -0
  229. package/templates/storefront/src/modules/order/components/help/index.tsx +25 -0
  230. package/templates/storefront/src/modules/order/components/item/index.tsx +62 -0
  231. package/templates/storefront/src/modules/order/components/items/index.tsx +44 -0
  232. package/templates/storefront/src/modules/order/components/onboarding-cta/index.tsx +28 -0
  233. package/templates/storefront/src/modules/order/components/order-confirmation-back-handler/index.tsx +28 -0
  234. package/templates/storefront/src/modules/order/components/order-details/index.tsx +63 -0
  235. package/templates/storefront/src/modules/order/components/order-purchase-tracker/index.tsx +48 -0
  236. package/templates/storefront/src/modules/order/components/order-redesign/index.tsx +887 -0
  237. package/templates/storefront/src/modules/order/components/order-summary/index.tsx +60 -0
  238. package/templates/storefront/src/modules/order/components/payment-details/index.tsx +63 -0
  239. package/templates/storefront/src/modules/order/components/shipping-details/index.tsx +73 -0
  240. package/templates/storefront/src/modules/order/components/transfer-actions/index.tsx +81 -0
  241. package/templates/storefront/src/modules/order/components/transfer-image/index.tsx +275 -0
  242. package/templates/storefront/src/modules/order/templates/order-completed-template.tsx +233 -0
  243. package/templates/storefront/src/modules/order/templates/order-details-template.tsx +128 -0
  244. package/templates/storefront/src/modules/products/components/image-gallery/index.tsx +297 -0
  245. package/templates/storefront/src/modules/products/components/product-actions/index.tsx +1400 -0
  246. package/templates/storefront/src/modules/products/components/product-actions/mobile-actions.tsx +217 -0
  247. package/templates/storefront/src/modules/products/components/product-actions/option-select.tsx +62 -0
  248. package/templates/storefront/src/modules/products/components/product-onboarding-cta/index.tsx +30 -0
  249. package/templates/storefront/src/modules/products/components/product-preview/index.tsx +5 -0
  250. package/templates/storefront/src/modules/products/components/product-preview/price.tsx +29 -0
  251. package/templates/storefront/src/modules/products/components/product-price/index.tsx +58 -0
  252. package/templates/storefront/src/modules/products/components/product-rating/index.tsx +1 -0
  253. package/templates/storefront/src/modules/products/components/product-tabs/accordion.tsx +100 -0
  254. package/templates/storefront/src/modules/products/components/product-tabs/index.tsx +127 -0
  255. package/templates/storefront/src/modules/products/components/product-tabs/ratings-tab.tsx +598 -0
  256. package/templates/storefront/src/modules/products/components/product-view-tracker/index.tsx +53 -0
  257. package/templates/storefront/src/modules/products/components/related-products/index.tsx +152 -0
  258. package/templates/storefront/src/modules/products/components/review-modal/index.tsx +1 -0
  259. package/templates/storefront/src/modules/products/components/share-button/index.tsx +1 -0
  260. package/templates/storefront/src/modules/products/components/thumbnail/index.tsx +91 -0
  261. package/templates/storefront/src/modules/products/components/wishlist-icon/index.tsx +1 -0
  262. package/templates/storefront/src/modules/products/context/product-context.tsx +52 -0
  263. package/templates/storefront/src/modules/products/templates/index.tsx +26 -0
  264. package/templates/storefront/src/modules/products/templates/product-actions-wrapper/index.tsx +1 -0
  265. package/templates/storefront/src/modules/products/templates/product-info/index.tsx +2 -0
  266. package/templates/storefront/src/modules/shipping/components/free-shipping-price-nudge/index.tsx +283 -0
  267. package/templates/storefront/src/modules/skeletons/components/skeleton-button/index.tsx +5 -0
  268. package/templates/storefront/src/modules/skeletons/components/skeleton-card-details/index.tsx +10 -0
  269. package/templates/storefront/src/modules/skeletons/components/skeleton-cart-item/index.tsx +35 -0
  270. package/templates/storefront/src/modules/skeletons/components/skeleton-cart-totals/index.tsx +30 -0
  271. package/templates/storefront/src/modules/skeletons/components/skeleton-code-form/index.tsx +13 -0
  272. package/templates/storefront/src/modules/skeletons/components/skeleton-line-item/index.tsx +35 -0
  273. package/templates/storefront/src/modules/skeletons/components/skeleton-order-confirmed-header/index.tsx +14 -0
  274. package/templates/storefront/src/modules/skeletons/components/skeleton-order-information/index.tsx +36 -0
  275. package/templates/storefront/src/modules/skeletons/components/skeleton-order-items/index.tsx +43 -0
  276. package/templates/storefront/src/modules/skeletons/components/skeleton-order-summary/index.tsx +15 -0
  277. package/templates/storefront/src/modules/skeletons/components/skeleton-product-preview/index.tsx +15 -0
  278. package/templates/storefront/src/modules/skeletons/templates/skeleton-cart-page/index.tsx +65 -0
  279. package/templates/storefront/src/modules/skeletons/templates/skeleton-order-confirmed/index.tsx +21 -0
  280. package/templates/storefront/src/modules/skeletons/templates/skeleton-product-grid/index.tsx +23 -0
  281. package/templates/storefront/src/modules/skeletons/templates/skeleton-related-products/index.tsx +25 -0
  282. package/templates/storefront/src/modules/store/components/client-paginated-products.tsx +108 -0
  283. package/templates/storefront/src/modules/store/components/mobile-filters/index.tsx +135 -0
  284. package/templates/storefront/src/modules/store/components/pagination/index.tsx +118 -0
  285. package/templates/storefront/src/modules/store/components/product-list-view-tracker/index.tsx +43 -0
  286. package/templates/storefront/src/modules/store/components/refinement-list/index.tsx +299 -0
  287. package/templates/storefront/src/modules/store/components/refinement-list/sort-products/index.tsx +120 -0
  288. package/templates/storefront/src/modules/store/components/store-header/index.tsx +67 -0
  289. package/templates/storefront/src/modules/store/templates/index.tsx +1 -0
  290. package/templates/storefront/src/modules/store/templates/paginated-products.tsx +175 -0
  291. package/templates/storefront/src/modules/wishlist/components/wishlist-item/index.tsx +797 -0
  292. package/templates/storefront/src/modules/wishlist/templates/index.tsx +176 -0
  293. package/templates/storefront/src/storefront.config.ts +12 -0
  294. package/templates/storefront/src/styles/globals.css +326 -0
  295. package/templates/storefront/src/theme/valero/blocks/home/Features/index.tsx +61 -0
  296. package/templates/storefront/src/theme/valero/blocks/home/Hero/index.tsx +102 -0
  297. package/templates/storefront/src/theme/valero/blocks/home/LovedByMoms/index.tsx +407 -0
  298. package/templates/storefront/src/theme/valero/blocks/home/NewArrivals/index.tsx +48 -0
  299. package/templates/storefront/src/theme/valero/blocks/home/ShopByAge/index.tsx +128 -0
  300. package/templates/storefront/src/theme/valero/blocks/home/ShopByCategory/index.tsx +409 -0
  301. package/templates/storefront/src/theme/valero/blocks/home/Testimonials/index.tsx +697 -0
  302. package/templates/storefront/src/theme/valero/blocks/home/WhyChooseUs/index.tsx +62 -0
  303. package/templates/storefront/src/theme/valero/layouts/MainLayoutShell.tsx +14 -0
  304. package/templates/storefront/src/theme/valero/primitives/Button.tsx +28 -0
  305. package/templates/storefront/src/theme/valero/primitives/Card.tsx +32 -0
  306. package/templates/storefront/src/theme/valero/primitives/index.ts +2 -0
  307. package/templates/storefront/src/theme/valero/slots/account/ForgotPassword/index.tsx +1 -0
  308. package/templates/storefront/src/theme/valero/slots/account/Login/index.tsx +1 -0
  309. package/templates/storefront/src/theme/valero/slots/account/LoginTemplate/index.tsx +44 -0
  310. package/templates/storefront/src/theme/valero/slots/account/Register/index.tsx +1 -0
  311. package/templates/storefront/src/theme/valero/slots/cart/CartItem/index.tsx +11 -0
  312. package/templates/storefront/src/theme/valero/slots/cart/CartSummary/index.tsx +13 -0
  313. package/templates/storefront/src/theme/valero/slots/checkout/CheckoutForm/index.tsx +1 -0
  314. package/templates/storefront/src/theme/valero/slots/checkout/CheckoutSummary/index.tsx +1 -0
  315. package/templates/storefront/src/theme/valero/slots/layout/Footer/index.tsx +104 -0
  316. package/templates/storefront/src/theme/valero/slots/layout/Nav/index.tsx +97 -0
  317. package/templates/storefront/src/theme/valero/slots/layout/PromoBar/index.tsx +19 -0
  318. package/templates/storefront/src/theme/valero/slots/layout/PromoBar/promo-bar-content.tsx +174 -0
  319. package/templates/storefront/src/theme/valero/slots/order/OrderDetails/index.tsx +12 -0
  320. package/templates/storefront/src/theme/valero/slots/product/ProductActions/ProductCTASection.tsx +191 -0
  321. package/templates/storefront/src/theme/valero/slots/product/ProductActions/ProductDetailsSection.tsx +137 -0
  322. package/templates/storefront/src/theme/valero/slots/product/ProductActions/ProductFeaturePanel.tsx +245 -0
  323. package/templates/storefront/src/theme/valero/slots/product/ProductActions/ProductHighlightsSection.tsx +98 -0
  324. package/templates/storefront/src/theme/valero/slots/product/ProductActions/ProductOptionsSection.tsx +233 -0
  325. package/templates/storefront/src/theme/valero/slots/product/ProductActions/ProductPriceSection.tsx +53 -0
  326. package/templates/storefront/src/theme/valero/slots/product/ProductActions/ProductTrustSection.tsx +84 -0
  327. package/templates/storefront/src/theme/valero/slots/product/ProductActions/index.tsx +161 -0
  328. package/templates/storefront/src/theme/valero/slots/product/ProductCard/index.tsx +132 -0
  329. package/templates/storefront/src/theme/valero/slots/product/ProductInfo/index.tsx +40 -0
  330. package/templates/storefront/src/theme/valero/templates/StorePage/index.tsx +154 -0
  331. package/templates/storefront/src/theme/valero/tokens/colors.js +16 -0
  332. package/templates/storefront/src/theme/valero/tokens/colors.ts +21 -0
  333. package/templates/storefront/src/theme/valero/tokens/fonts.ts +13 -0
  334. package/templates/storefront/src/theme/valero/tokens/index.ts +3 -0
  335. package/templates/storefront/src/theme/valero/tokens/spacing.ts +9 -0
  336. package/templates/storefront/src/theme/valero/tokens/theme.css +91 -0
  337. package/templates/storefront/tailwind.config.js +221 -0
  338. package/templates/storefront/tsconfig.json +30 -0
@@ -0,0 +1,193 @@
1
+ import { Metadata } from "next"
2
+ import { notFound } from "next/navigation"
3
+ import { listProducts } from "@core/data/products"
4
+ import { getRegion, listRegions } from "@core/data/regions"
5
+ import { ProductPage as ProductPageView } from "@controllers/product/product-page"
6
+ import { HttpTypes } from "@medusajs/types"
7
+ import { getImagesForVariant } from "@core/util/product"
8
+
9
+ type Props = {
10
+ params: Promise<{ countryCode: string; handle: string }>
11
+ searchParams: Promise<{ v_id?: string }>
12
+ }
13
+
14
+ // During CI builds, skip static generation to avoid backend dependency
15
+ export const dynamic = 'force-dynamic'
16
+ export const dynamicParams = true
17
+ export const revalidate = 0
18
+
19
+ export async function generateStaticParams() {
20
+ try {
21
+ const countryCodes = await listRegions().then((regions) =>
22
+ regions?.map((r) => r.countries?.map((c) => c.iso_2)).flat()
23
+ )
24
+
25
+ if (!countryCodes) {
26
+ return []
27
+ }
28
+
29
+ const promises = countryCodes.map(async (country) => {
30
+ const { response } = await listProducts({
31
+ countryCode: country,
32
+ queryParams: { limit: 100, fields: "handle" },
33
+ })
34
+
35
+ return {
36
+ country,
37
+ products: response.products,
38
+ }
39
+ })
40
+
41
+ const countryProducts = await Promise.all(promises)
42
+
43
+ return countryProducts
44
+ .flatMap((countryData) =>
45
+ countryData.products.map((product) => ({
46
+ countryCode: countryData.country,
47
+ handle: product.handle,
48
+ }))
49
+ )
50
+ .filter((param) => param.handle)
51
+ } catch (error) {
52
+ return []
53
+ }
54
+ }
55
+
56
+ export async function generateMetadata(props: Props): Promise<Metadata> {
57
+ try {
58
+ const params = await props.params
59
+ const { handle } = params
60
+ const region = await getRegion(params.countryCode)
61
+
62
+ if (!region) {
63
+ // During build, if backend is unavailable, return default metadata
64
+ if (process.env.NODE_ENV === 'production' || process.env.CI) {
65
+ return {
66
+ title: 'Product | Chocomelon',
67
+ description: 'Product',
68
+ }
69
+ }
70
+ notFound()
71
+ }
72
+
73
+ const product = await listProducts({
74
+ countryCode: params.countryCode,
75
+ queryParams: { handle },
76
+ }).then(({ response }) => response.products[0])
77
+
78
+ if (!product) {
79
+ // During build, if backend is unavailable, return default metadata
80
+ if (process.env.NODE_ENV === 'production' || process.env.CI) {
81
+ return {
82
+ title: 'Product | Chocomelon',
83
+ description: 'Product',
84
+ }
85
+ }
86
+ notFound()
87
+ }
88
+
89
+ return {
90
+ title: `${product.title} | Chocomelon`,
91
+ description: `${product.title}`,
92
+ openGraph: {
93
+ title: `${product.title} | Chocomelon`,
94
+ description: `${product.title}`,
95
+ images: product.thumbnail ? [product.thumbnail] : [],
96
+ },
97
+ }
98
+ } catch (error: any) {
99
+ // During build, if backend is unavailable, return default metadata
100
+ if (process.env.NODE_ENV === 'production' || process.env.CI) {
101
+ return {
102
+ title: 'Product | Chocomelon',
103
+ description: 'Product',
104
+ }
105
+ }
106
+ notFound()
107
+ }
108
+ }
109
+
110
+ export default async function ProductPage(props: Props) {
111
+ const params = await props.params
112
+ const searchParams = await props.searchParams
113
+
114
+
115
+
116
+ const region = await getRegion(params.countryCode)
117
+
118
+ if (!region) {
119
+ notFound()
120
+ }
121
+
122
+ const selectedVariantId = searchParams.v_id
123
+
124
+
125
+
126
+ const pricedProduct = await listProducts({
127
+ countryCode: params.countryCode,
128
+ queryParams: { handle: params.handle },
129
+ }).then(({ response }) => {
130
+ const product = response.products[0]
131
+ return product
132
+ })
133
+
134
+ const images = getImagesForVariant(pricedProduct, selectedVariantId)
135
+
136
+ if (!pricedProduct) {
137
+ notFound()
138
+ }
139
+
140
+ // Detailed product information for single product page
141
+ const productDetails = {
142
+ id: pricedProduct.id,
143
+ title: pricedProduct.title,
144
+ handle: pricedProduct.handle,
145
+ description: pricedProduct.description,
146
+ status: pricedProduct.status,
147
+ thumbnail: pricedProduct.thumbnail,
148
+ images: pricedProduct.images?.map((img: any) => ({
149
+ id: img.id,
150
+ url: img.url,
151
+ })) || [],
152
+ imagesCount: images?.length || 0,
153
+ selectedVariantId: selectedVariantId,
154
+ variants: pricedProduct.variants?.map((v: any) => ({
155
+ id: v.id,
156
+ sku: v.sku,
157
+ title: v.title,
158
+ inventory_quantity: v.inventory_quantity,
159
+ calculated_price: v.calculated_price?.calculated_amount
160
+ ? `${(v.calculated_price.calculated_amount / 100).toFixed(2)} ${v.calculated_price.currency_code || ''}`
161
+ : 'N/A',
162
+ imagesCount: v.images?.length || 0,
163
+ options: v.options?.map((o: any) => ({
164
+ option_id: o.option_id,
165
+ value: o.value,
166
+ })) || [],
167
+ })) || [],
168
+ variantsCount: pricedProduct.variants?.length || 0,
169
+ tags: pricedProduct.tags?.map((t: any) => t.value) || [],
170
+ metadata: pricedProduct.metadata || {},
171
+ average_rating: (pricedProduct as any).average_rating,
172
+ total_rating_count: (pricedProduct as any).total_rating_count,
173
+ total_rating_sum: (pricedProduct as any).total_rating_sum,
174
+ created_at: pricedProduct.created_at,
175
+ updated_at: pricedProduct.updated_at,
176
+ region: {
177
+ id: region.id,
178
+ name: region.name,
179
+ currency_code: region.currency_code,
180
+ },
181
+ }
182
+
183
+
184
+
185
+ return (
186
+ <ProductPageView
187
+ product={pricedProduct}
188
+ region={region}
189
+ countryCode={params.countryCode}
190
+ images={images || []}
191
+ />
192
+ )
193
+ }
@@ -0,0 +1,192 @@
1
+ "use client"
2
+
3
+ import { useState, useEffect, Suspense } from "react"
4
+ import { useRouter, useSearchParams } from "next/navigation"
5
+ import { completePasswordReset } from "@core/data/customer-registration"
6
+ import ErrorMessage from "@modules/checkout/components/error-message"
7
+ import Lock from "@modules/common/icons/lock"
8
+ import Eye from "@modules/common/icons/eye"
9
+ import EyeOff from "@modules/common/icons/eye-off"
10
+ import Envelope from "@modules/common/icons/envelope"
11
+
12
+ function ResetPasswordForm() {
13
+ const router = useRouter()
14
+ const searchParams = useSearchParams()
15
+
16
+ const [token, setToken] = useState<string | null>(null)
17
+ const [email, setEmail] = useState("")
18
+ const [password, setPassword] = useState("")
19
+ const [confirmPassword, setConfirmPassword] = useState("")
20
+ const [showPassword, setShowPassword] = useState(false)
21
+ const [isSubmitting, setIsSubmitting] = useState(false)
22
+ const [error, setError] = useState<string | null>(null)
23
+ const [success, setSuccess] = useState(false)
24
+
25
+ useEffect(() => {
26
+ const t = searchParams.get("token")
27
+ const e = searchParams.get("email")
28
+ if (t) setToken(t)
29
+ if (e) setEmail(e)
30
+ }, [searchParams])
31
+
32
+ const handleSubmit = async (e: React.FormEvent) => {
33
+ e.preventDefault()
34
+
35
+ if (!token) {
36
+ setError("Invalid or missing reset token.")
37
+ return
38
+ }
39
+
40
+ if (password !== confirmPassword) {
41
+ setError("Passwords do not match.")
42
+ return
43
+ }
44
+
45
+ setIsSubmitting(true)
46
+ setError(null)
47
+
48
+ try {
49
+ const result = await completePasswordReset({
50
+ email,
51
+ password,
52
+ token
53
+ })
54
+
55
+ if (result.success) {
56
+ setSuccess(true)
57
+ setTimeout(() => {
58
+ router.push("/account")
59
+ }, 3000)
60
+ } else {
61
+ setError(result.error || "Failed to reset password")
62
+ }
63
+ } catch (err: any) {
64
+ setError(err.message || "An error occurred")
65
+ } finally {
66
+ setIsSubmitting(false)
67
+ }
68
+ }
69
+
70
+ if (success) {
71
+ return (
72
+ <div className="w-full max-w-md bg-surface rounded-2xl shadow-lg p-8 text-center">
73
+ <div className="w-16 h-16 bg-green-100 rounded-full flex items-center justify-center mx-auto mb-4">
74
+ <svg className="w-8 h-8 text-green-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
75
+ <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M5 13l4 4L19 7" />
76
+ </svg>
77
+ </div>
78
+ <h1 className="text-2xl font-bold text-heading mb-2">Password Reset Successful</h1>
79
+ <p className="text-muted mb-6">Your password has been reset successfully. Redirecting you to login...</p>
80
+ <button
81
+ onClick={() => router.push("/account")}
82
+ className="w-full py-3 account-btn-primary font-bold rounded-full"
83
+ >
84
+ Go to Login
85
+ </button>
86
+ </div>
87
+ )
88
+ }
89
+
90
+ if (!token) {
91
+ return (
92
+ <div className="w-full max-w-md bg-surface rounded-2xl shadow-lg p-8 text-center">
93
+ <h1 className="text-2xl font-bold text-heading mb-2">Invalid Link</h1>
94
+ <p className="text-muted mb-6">This password reset link is invalid or has expired.</p>
95
+ <button
96
+ onClick={() => router.push("/account")}
97
+ className="w-full py-3 account-btn-primary font-bold rounded-full"
98
+ >
99
+ Return to Login
100
+ </button>
101
+ </div>
102
+ )
103
+ }
104
+
105
+ return (
106
+ <div className="w-full max-w-md bg-surface rounded-2xl shadow-lg p-8">
107
+ <h1 className="text-2xl font-bold text-heading mb-2 text-center">Reset Password</h1>
108
+ <p className="text-muted mb-8 text-center">Enter your email and a new password for your account.</p>
109
+
110
+ <form onSubmit={handleSubmit} className="space-y-4">
111
+ <div>
112
+ <div className="relative">
113
+ <div className="absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none">
114
+ <Envelope size="20" color="#9CA3AF" />
115
+ </div>
116
+ <input
117
+ type="email"
118
+ placeholder="Email"
119
+ required
120
+ value={email}
121
+ onChange={(e) => setEmail(e.target.value)}
122
+ className="w-full pl-12 pr-4 py-3 text-sm account-input rounded-full"
123
+ />
124
+ </div>
125
+ </div>
126
+
127
+ <div>
128
+ <div className="relative">
129
+ <div className="absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none">
130
+ <Lock size="20" color="#9CA3AF" />
131
+ </div>
132
+ <input
133
+ type={showPassword ? "text" : "password"}
134
+ placeholder="New Password"
135
+ required
136
+ value={password}
137
+ onChange={(e) => setPassword(e.target.value)}
138
+ className="w-full pl-12 pr-12 py-3 text-sm account-input rounded-full"
139
+ />
140
+ <button
141
+ type="button"
142
+ onClick={() => setShowPassword(!showPassword)}
143
+ className="absolute inset-y-0 right-0 pr-4 flex items-center text-muted hover:text-heading"
144
+ >
145
+ {showPassword ? <EyeOff size="20" /> : <Eye size="20" />}
146
+ </button>
147
+ </div>
148
+ </div>
149
+
150
+ <div>
151
+ <div className="relative">
152
+ <div className="absolute inset-y-0 left-0 pl-4 flex items-center pointer-events-none">
153
+ <Lock size="20" color="#9CA3AF" />
154
+ </div>
155
+ <input
156
+ type={showPassword ? "text" : "password"}
157
+ placeholder="Confirm New Password"
158
+ required
159
+ value={confirmPassword}
160
+ onChange={(e) => setConfirmPassword(e.target.value)}
161
+ className="w-full pl-12 pr-12 py-3 text-sm account-input rounded-full"
162
+ />
163
+ </div>
164
+ </div>
165
+
166
+ <ErrorMessage error={error} />
167
+
168
+ <button
169
+ type="submit"
170
+ disabled={isSubmitting}
171
+ className="w-full py-3 account-btn-primary font-bold rounded-full"
172
+ >
173
+ {isSubmitting ? "Resetting..." : "Reset Password"}
174
+ </button>
175
+ </form>
176
+ </div>
177
+ )
178
+ }
179
+
180
+ export default function ResetPasswordPage() {
181
+ return (
182
+ <div className="min-h-screen flex items-center justify-center bg-page-bg px-4">
183
+ <Suspense fallback={
184
+ <div className="w-full max-w-md bg-surface rounded-2xl shadow-lg p-8 text-center">
185
+ <p>Loading...</p>
186
+ </div>
187
+ }>
188
+ <ResetPasswordForm />
189
+ </Suspense>
190
+ </div>
191
+ )
192
+ }
@@ -0,0 +1,72 @@
1
+ import { Metadata } from "next"
2
+
3
+ import { listCollections } from "@core/data/collections"
4
+ import { getDynamicFilters } from "@core/data/products"
5
+ import { listCategories } from "@core/data/categories"
6
+ import { SortOptions } from "@modules/store/components/refinement-list/sort-products"
7
+ import StoreTemplate from "@modules/store/templates"
8
+
9
+ export const metadata: Metadata = {
10
+ title: "Shop All Products",
11
+ description: "Browse Chocomelon's complete collection of premium kids' fashion. Perfect styles for all ages, from age-specific groups to category favorites.",
12
+ }
13
+
14
+ type Params = {
15
+ searchParams: Promise<{
16
+ sortBy?: SortOptions
17
+ page?: string
18
+ collection?: string | string[]
19
+ category?: string | string[]
20
+ gender?: string | string[]
21
+ type?: string | string[]
22
+ material?: string | string[]
23
+ color?: string | string[]
24
+ min_price?: string
25
+ max_price?: string
26
+ q?: string
27
+ }>
28
+ params: Promise<{
29
+ countryCode: string
30
+ }>
31
+ }
32
+
33
+ export default async function StorePage(props: Params) {
34
+ const params = await props.params;
35
+ const searchParams = await props.searchParams;
36
+ const { sortBy, page, collection, category, gender, type, material, color, min_price, max_price, q } = searchParams
37
+
38
+ const [{ collections }, categories, dynamicFilters] = await Promise.all([
39
+ listCollections(),
40
+ listCategories(),
41
+ getDynamicFilters(params.countryCode)
42
+ ])
43
+
44
+ // Filter for top-level categories or all for now
45
+ const categoryOptions = categories.map(c => ({
46
+ value: c.id,
47
+ label: c.name || ""
48
+ }))
49
+
50
+ return (
51
+ <StoreTemplate
52
+ sortBy={sortBy}
53
+ page={page}
54
+ countryCode={params.countryCode}
55
+ collections={collections}
56
+ collection={collection}
57
+ category={category}
58
+ categoryOptions={categoryOptions}
59
+ gender={gender}
60
+ type={type}
61
+ material={material}
62
+ color={color}
63
+ minPrice={min_price}
64
+ maxPrice={max_price}
65
+ genderOptions={dynamicFilters.genders}
66
+ typeOptions={dynamicFilters.productTypes}
67
+ materialOptions={dynamicFilters.materials}
68
+ colorOptions={dynamicFilters.colors}
69
+ q={q}
70
+ />
71
+ )
72
+ }
@@ -0,0 +1,179 @@
1
+ import { Metadata } from "next"
2
+ import { Heading, Text } from "@medusajs/ui"
3
+
4
+ export const metadata: Metadata = {
5
+ title: "Terms of Use | Chocomelon",
6
+ description: "Read our terms and conditions for using the Chocomelon store.",
7
+ }
8
+
9
+ export default function TermsOfUsePage() {
10
+ return (
11
+ <div className="min-h-screen bg-[#FFFAFE] pb-16 sm:pb-24">
12
+ {/* Header Section */}
13
+ <div className="bg-[#04122C] text-white py-16 sm:py-24 mb-12 relative overflow-hidden">
14
+ {/* Decorative elements */}
15
+ <div className="absolute top-0 left-0 w-96 h-96 bg-[#8B5AB1] opacity-10 rounded-full -ml-48 -mt-48 blur-3xl"></div>
16
+ <div className="absolute bottom-0 right-0 w-64 h-64 bg-blue-500 opacity-10 rounded-full -mr-32 -mb-32 blur-3xl"></div>
17
+
18
+ <div className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 relative z-10 text-center">
19
+ <Heading level="h1" className="text-3xl sm:text-5xl font-extrabold mb-4 tracking-tight">
20
+ Terms of Use
21
+ </Heading>
22
+ <Text className="text-gray-300 text-base sm:text-xl max-w-2xl mx-auto leading-relaxed font-light">
23
+ Clear and simple terms for your peace of mind while shopping with Chocomelon.
24
+ </Text>
25
+ </div>
26
+ </div>
27
+
28
+ {/* Content Section */}
29
+ <div className="max-w-4xl mx-auto px-3 sm:px-6 lg:px-8">
30
+ <div className="bg-[#FFFAFE] rounded-3xl shadow-xl shadow-gray-200/50 border border-gray-100 overflow-hidden">
31
+ <div className="p-5 sm:p-10 md:p-16 space-y-12 sm:space-y-16">
32
+
33
+ <section className="relative">
34
+ <div className="flex flex-col md:flex-row gap-8 items-start">
35
+ <div className="flex-shrink-0 w-10 h-10 sm:w-14 sm:h-14 bg-blue-50 text-[#04122C] rounded-2xl flex items-center justify-center font-bold text-xl sm:text-2xl shadow-sm">
36
+ 01
37
+ </div>
38
+ <div>
39
+ <Heading level="h2" className="text-2xl font-bold mb-4 text-[#04122C]">
40
+ Agreement to Terms
41
+ </Heading>
42
+ <Text className="leading-relaxed text-gray-600 text-lg">
43
+ By accessing or using the Chocomelon website, you agree to be bound by these Terms of Use and our Privacy Policy. If you do not agree with any part of these terms, you must not use our services.
44
+ </Text>
45
+ </div>
46
+ </div>
47
+ </section>
48
+
49
+ <section className="relative">
50
+ <div className="flex flex-col md:flex-row gap-8 items-start">
51
+ <div className="flex-shrink-0 w-10 h-10 sm:w-14 sm:h-14 bg-purple-50 text-[#8B5AB1] rounded-2xl flex items-center justify-center font-bold text-xl sm:text-2xl shadow-sm">
52
+ 02
53
+ </div>
54
+ <div>
55
+ <Heading level="h2" className="text-2xl font-bold mb-4 text-[#04122C]">
56
+ Products and Pricing
57
+ </Heading>
58
+ <Text className="leading-relaxed text-gray-600 text-lg">
59
+ We strive to provide accurate descriptions and pricing for all products. However, we do not warrant that product descriptions or other content are error-free. We reserve the right to correct any errors and to change or update information at any time without prior notice.
60
+ </Text>
61
+ </div>
62
+ </div>
63
+ </section>
64
+
65
+ <section className="relative">
66
+ <div className="flex flex-col md:flex-row gap-8 items-start">
67
+ <div className="flex-shrink-0 w-10 h-10 sm:w-14 sm:h-14 bg-pink-50 text-pink-500 rounded-2xl flex items-center justify-center font-bold text-xl sm:text-2xl shadow-sm">
68
+ 03
69
+ </div>
70
+ <div>
71
+ <Heading level="h2" className="text-2xl font-bold mb-4 text-[#04122C]">
72
+ Orders and Payment
73
+ </Heading>
74
+ <Text className="leading-relaxed text-gray-600 text-lg mb-6">
75
+ All orders placed through the website are subject to acceptance. We reserve the right to refuse or cancel any order for any reason.
76
+ </Text>
77
+ <div className="bg-gray-50 rounded-2xl p-6 border border-gray-100">
78
+ <Text className="text-sm font-semibold text-[#04122C] uppercase tracking-wider mb-2">Secure Payments</Text>
79
+ <Text className="text-gray-500">Payments must be made through our approved payment gateways at the time of purchase. We use industry-standard encryption to keep your data safe.</Text>
80
+ </div>
81
+ </div>
82
+ </div>
83
+ </section>
84
+
85
+ <section className="relative">
86
+ <div className="flex flex-col md:flex-row gap-8 items-start">
87
+ <div className="flex-shrink-0 w-10 h-10 sm:w-14 sm:h-14 bg-blue-50 text-[#04122C] rounded-2xl flex items-center justify-center font-bold text-xl sm:text-2xl shadow-sm">
88
+ 04
89
+ </div>
90
+ <div>
91
+ <Heading level="h2" className="text-2xl font-bold mb-4 text-[#04122C]">
92
+ Shipping and Delivery
93
+ </Heading>
94
+ <Text className="leading-relaxed text-gray-600 text-lg">
95
+ Delivery times are estimates and not guaranteed. Chocomelon is not responsible for delays caused by shipping carriers or customs. Risk of loss and title for items purchased pass to you upon delivery to the carrier.
96
+ </Text>
97
+ </div>
98
+ </div>
99
+ </section>
100
+
101
+ <section className="relative">
102
+ <div className="flex flex-col md:flex-row gap-8 items-start">
103
+ <div className="flex-shrink-0 w-10 h-10 sm:w-14 sm:h-14 bg-purple-50 text-[#8B5AB1] rounded-2xl flex items-center justify-center font-bold text-xl sm:text-2xl shadow-sm">
104
+ 05
105
+ </div>
106
+ <div>
107
+ <Heading level="h2" className="text-2xl font-bold mb-4 text-[#04122C]">
108
+ Returns and Refunds
109
+ </Heading>
110
+ <Text className="leading-relaxed text-gray-600 text-lg">
111
+ Our return and refund policy is governed by specific rules visible on our returns page. Generally, items must be in original condition with tags attached to be eligible for return.
112
+ </Text>
113
+ </div>
114
+ </div>
115
+ </section>
116
+
117
+ <section className="relative">
118
+ <div className="flex flex-col md:flex-row gap-8 items-start">
119
+ <div className="flex-shrink-0 w-10 h-10 sm:w-14 sm:h-14 bg-yellow-50 text-yellow-600 rounded-2xl flex items-center justify-center font-bold text-xl sm:text-2xl shadow-sm">
120
+ 06
121
+ </div>
122
+ <div>
123
+ <Heading level="h2" className="text-2xl font-bold mb-4 text-[#04122C]">
124
+ Intellectual Property
125
+ </Heading>
126
+ <Text className="leading-relaxed text-gray-600 text-lg">
127
+ All content on this website, including text, graphics, logos, and images, is the property of Chocomelon and is protected by intellectual property laws. You may not use our content without explicit written permission.
128
+ </Text>
129
+ </div>
130
+ </div>
131
+ </section>
132
+
133
+ <div className="pt-12 border-t border-gray-100">
134
+ <div className="bg-[#04122C] rounded-3xl p-6 sm:p-10 text-white relative overflow-hidden">
135
+ <div className="absolute top-0 right-0 w-32 h-32 bg-white/10 rounded-full -mr-16 -mt-16 blur-2xl"></div>
136
+ <Heading level="h3" className="text-xl font-bold mb-4 relative z-10">
137
+ Limitation of Liability
138
+ </Heading>
139
+ <Text className="text-gray-300 relative z-10 leading-relaxed">
140
+ Chocomelon shall not be liable for any indirect, incidental, special, or consequential damages resulting from the use or inability to use our services or products. These terms shall be governed by and construed in accordance with the laws of India.
141
+ </Text>
142
+ </div>
143
+ </div>
144
+
145
+ <section className="bg-purple-50/30 p-6 sm:p-8 rounded-3xl border border-purple-100/50">
146
+ <Heading level="h2" className="text-xl font-bold mb-3 text-[#04122C]">
147
+ Questions about our Terms?
148
+ </Heading>
149
+ <Text className="text-gray-600 mb-4">
150
+ If you have any questions or need clarification on our Terms of Use, please reach out to our legal team.
151
+ </Text>
152
+ <div className="flex flex-col sm:flex-row sm:items-center gap-1 sm:gap-2 text-[#8B5AB1] font-semibold">
153
+ <span className="text-gray-400 font-normal">Email:</span>
154
+ <a href="mailto:chocomelonllp@gmail.com" className="hover:underline break-all sm:break-normal">chocomelonllp@gmail.com</a>
155
+ </div>
156
+ </section>
157
+
158
+ <section className="pt-8 flex flex-col sm:flex-row justify-between items-center gap-4">
159
+ <p className="text-sm text-gray-400 font-medium">
160
+ Last Updated: March 19, 2026
161
+ </p>
162
+ <div className="flex gap-3">
163
+ <div className="px-5 py-2 rounded-full bg-gradient-to-r from-[#04122C] to-blue-900 text-white text-[10px] font-bold shadow-lg shadow-blue-900/20 uppercase tracking-widest flex items-center gap-1.5 transition-transform hover:scale-105">
164
+ <div className="w-1.5 h-1.5 rounded-full bg-blue-400"></div>
165
+ OFFICIAL
166
+ </div>
167
+ <div className="px-5 py-2 rounded-full bg-gradient-to-r from-green-600 to-emerald-400 text-white text-[10px] font-bold shadow-lg shadow-green-900/20 uppercase tracking-widest flex items-center gap-1.5 transition-transform hover:scale-105">
168
+ <div className="w-1.5 h-1.5 rounded-full bg-green-300"></div>
169
+ VERIFIED
170
+ </div>
171
+ </div>
172
+ </section>
173
+ </div>
174
+ </div>
175
+ </div>
176
+ </div>
177
+ )
178
+ }
179
+
@@ -0,0 +1,19 @@
1
+ import { Metadata } from "next"
2
+ import WishlistTemplate from "@modules/wishlist/templates"
3
+
4
+ type Props = {
5
+ params: Promise<{ countryCode: string }>
6
+ }
7
+
8
+ export const metadata: Metadata = {
9
+ title: "My Wishlist",
10
+ description: "View your wishlist items",
11
+ }
12
+
13
+ export default async function WishlistPage(props: Props) {
14
+ const params = await props.params
15
+ const countryCode = params.countryCode
16
+
17
+ return <WishlistTemplate countryCode={countryCode} />
18
+ }
19
+