@salifbiaye/create-boutique 0.1.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 (316) hide show
  1. package/README.md +1 -0
  2. package/cli/dist/commands.js +382 -0
  3. package/cli/dist/create.js +194 -0
  4. package/cli/dist/docker.js +19 -0
  5. package/cli/dist/generate.js +322 -0
  6. package/cli/dist/guide.js +72 -0
  7. package/cli/dist/index.js +156 -0
  8. package/cli/dist/paths.js +29 -0
  9. package/cli/dist/ports.js +54 -0
  10. package/cli/dist/project.js +119 -0
  11. package/cli/dist/themes.js +24 -0
  12. package/docs/fiche-client.en.html +137 -0
  13. package/docs/fiche-client.html +137 -0
  14. package/docs/guide-complet.en.html +259 -0
  15. package/docs/guide-complet.fr.html +259 -0
  16. package/package.json +51 -0
  17. package/templates/backend/.dockerignore +9 -0
  18. package/templates/backend/Dockerfile +30 -0
  19. package/templates/backend/README.md +78 -0
  20. package/templates/backend/TEMPLATE_VERSION +1 -0
  21. package/templates/backend/docker/entrypoint.sh +28 -0
  22. package/templates/backend/instrumentation.ts +24 -0
  23. package/templates/backend/medusa-config.ts +114 -0
  24. package/templates/backend/package-lock.json +16222 -0
  25. package/templates/backend/package.json +39 -0
  26. package/templates/backend/src/admin/README.md +33 -0
  27. package/templates/backend/src/admin/components/image-field.tsx +61 -0
  28. package/templates/backend/src/admin/i18n/README.md +58 -0
  29. package/templates/backend/src/admin/i18n/index.ts +8 -0
  30. package/templates/backend/src/admin/i18n/json/en.json +66 -0
  31. package/templates/backend/src/admin/i18n/json/fr.json +66 -0
  32. package/templates/backend/src/admin/lib/client.ts +9 -0
  33. package/templates/backend/src/admin/routes/boutique-campaigns/campaign-drawer.tsx +286 -0
  34. package/templates/backend/src/admin/routes/boutique-campaigns/page.tsx +113 -0
  35. package/templates/backend/src/admin/tsconfig.json +24 -0
  36. package/templates/backend/src/admin/vite-env.d.ts +1 -0
  37. package/templates/backend/src/admin/widgets/category-image.tsx +56 -0
  38. package/templates/backend/src/api/README.md +135 -0
  39. package/templates/backend/src/api/admin/boutique-campaigns/[salesChannelId]/route.ts +30 -0
  40. package/templates/backend/src/api/admin/boutique-campaigns/route.ts +24 -0
  41. package/templates/backend/src/api/middlewares.ts +28 -0
  42. package/templates/backend/src/api/rate-limit.ts +30 -0
  43. package/templates/backend/src/api/route.ts +6 -0
  44. package/templates/backend/src/api/store/campaign/route.ts +25 -0
  45. package/templates/backend/src/api/store/order-lookup/route.ts +74 -0
  46. package/templates/backend/src/emails/en.json +64 -0
  47. package/templates/backend/src/emails/fr.json +64 -0
  48. package/templates/backend/src/jobs/README.md +38 -0
  49. package/templates/backend/src/lib/emails.ts +94 -0
  50. package/templates/backend/src/lib/notify.ts +148 -0
  51. package/templates/backend/src/lib/project.ts +146 -0
  52. package/templates/backend/src/links/README.md +26 -0
  53. package/templates/backend/src/links/campaign-sales-channel.ts +9 -0
  54. package/templates/backend/src/modules/README.md +117 -0
  55. package/templates/backend/src/modules/campaign/index.ts +9 -0
  56. package/templates/backend/src/modules/campaign/migrations/.snapshot-boutique-campaign.json +272 -0
  57. package/templates/backend/src/modules/campaign/migrations/Migration20260928141440.ts +16 -0
  58. package/templates/backend/src/modules/campaign/migrations/Migration20260928145243.ts +13 -0
  59. package/templates/backend/src/modules/campaign/models/campaign.ts +28 -0
  60. package/templates/backend/src/modules/campaign/service.ts +6 -0
  61. package/templates/backend/src/modules/campaign/validators.ts +94 -0
  62. package/templates/backend/src/modules/resend/index.ts +6 -0
  63. package/templates/backend/src/modules/resend/service.ts +63 -0
  64. package/templates/backend/src/scripts/README.md +63 -0
  65. package/templates/backend/src/scripts/campaign-export.ts +15 -0
  66. package/templates/backend/src/scripts/campaign-import.ts +38 -0
  67. package/templates/backend/src/scripts/price-report.ts +34 -0
  68. package/templates/backend/src/scripts/seed.ts +418 -0
  69. package/templates/backend/src/scripts/storage.ts +63 -0
  70. package/templates/backend/src/subscribers/README.md +61 -0
  71. package/templates/backend/src/subscribers/account-emails.ts +27 -0
  72. package/templates/backend/src/subscribers/fulfillment-emails.ts +42 -0
  73. package/templates/backend/src/subscribers/order-emails.ts +12 -0
  74. package/templates/backend/src/subscribers/return-refund-emails.ts +50 -0
  75. package/templates/backend/src/workflows/README.md +81 -0
  76. package/templates/backend/src/workflows/steps/upsert-campaign.ts +53 -0
  77. package/templates/backend/src/workflows/upsert-campaign.ts +30 -0
  78. package/templates/backend/tsconfig.json +36 -0
  79. package/templates/storefront/.dockerignore +7 -0
  80. package/templates/storefront/.github/ISSUE_TEMPLATE/bug-report.yml +71 -0
  81. package/templates/storefront/.prettierrc +8 -0
  82. package/templates/storefront/Dockerfile +37 -0
  83. package/templates/storefront/LICENSE +21 -0
  84. package/templates/storefront/README.md +127 -0
  85. package/templates/storefront/locales/en.json +269 -0
  86. package/templates/storefront/locales/fr.json +269 -0
  87. package/templates/storefront/next-env.d.ts +7 -0
  88. package/templates/storefront/next-sitemap.js +19 -0
  89. package/templates/storefront/next.config.js +29 -0
  90. package/templates/storefront/package-lock.json +9031 -0
  91. package/templates/storefront/package.json +49 -0
  92. package/templates/storefront/postcss.config.js +6 -0
  93. package/templates/storefront/public/favicon.ico +0 -0
  94. package/templates/storefront/scripts/sync-design.mjs +30 -0
  95. package/templates/storefront/src/app/(checkout)/checkout/page.tsx +31 -0
  96. package/templates/storefront/src/app/(checkout)/layout.tsx +29 -0
  97. package/templates/storefront/src/app/(checkout)/not-found.tsx +20 -0
  98. package/templates/storefront/src/app/(main)/account/@dashboard/addresses/page.tsx +34 -0
  99. package/templates/storefront/src/app/(main)/account/@dashboard/loading.tsx +9 -0
  100. package/templates/storefront/src/app/(main)/account/@dashboard/orders/details/[id]/page.tsx +33 -0
  101. package/templates/storefront/src/app/(main)/account/@dashboard/orders/page.tsx +37 -0
  102. package/templates/storefront/src/app/(main)/account/@dashboard/page.tsx +22 -0
  103. package/templates/storefront/src/app/(main)/account/@dashboard/profile/page.tsx +53 -0
  104. package/templates/storefront/src/app/(main)/account/@login/page.tsx +12 -0
  105. package/templates/storefront/src/app/(main)/account/layout.tsx +20 -0
  106. package/templates/storefront/src/app/(main)/account/loading.tsx +9 -0
  107. package/templates/storefront/src/app/(main)/cart/loading.tsx +5 -0
  108. package/templates/storefront/src/app/(main)/cart/not-found.tsx +21 -0
  109. package/templates/storefront/src/app/(main)/cart/page.tsx +21 -0
  110. package/templates/storefront/src/app/(main)/categories/[...category]/page.tsx +55 -0
  111. package/templates/storefront/src/app/(main)/collections/[handle]/page.tsx +55 -0
  112. package/templates/storefront/src/app/(main)/layout.tsx +43 -0
  113. package/templates/storefront/src/app/(main)/legal/[page]/page.tsx +42 -0
  114. package/templates/storefront/src/app/(main)/not-found.tsx +21 -0
  115. package/templates/storefront/src/app/(main)/order/[id]/confirmed/loading.tsx +5 -0
  116. package/templates/storefront/src/app/(main)/order/[id]/confirmed/page.tsx +23 -0
  117. package/templates/storefront/src/app/(main)/order/[id]/transfer/[token]/accept/page.tsx +42 -0
  118. package/templates/storefront/src/app/(main)/order/[id]/transfer/[token]/decline/page.tsx +42 -0
  119. package/templates/storefront/src/app/(main)/order/[id]/transfer/[token]/page.tsx +35 -0
  120. package/templates/storefront/src/app/(main)/order/track/page.tsx +32 -0
  121. package/templates/storefront/src/app/(main)/page.tsx +68 -0
  122. package/templates/storefront/src/app/(main)/products/[handle]/page.tsx +86 -0
  123. package/templates/storefront/src/app/(main)/store/page.tsx +28 -0
  124. package/templates/storefront/src/app/api/health/route.ts +13 -0
  125. package/templates/storefront/src/app/layout.tsx +42 -0
  126. package/templates/storefront/src/app/not-found.tsx +21 -0
  127. package/templates/storefront/src/app/opengraph-image.jpg +0 -0
  128. package/templates/storefront/src/app/twitter-image.jpg +0 -0
  129. package/templates/storefront/src/instrumentation-node.ts +18 -0
  130. package/templates/storefront/src/instrumentation.ts +9 -0
  131. package/templates/storefront/src/lib/boutique/campaign.ts +116 -0
  132. package/templates/storefront/src/lib/boutique/config.ts +152 -0
  133. package/templates/storefront/src/lib/boutique/fonts.ts +29 -0
  134. package/templates/storefront/src/lib/boutique/i18n-client.tsx +34 -0
  135. package/templates/storefront/src/lib/boutique/i18n.ts +43 -0
  136. package/templates/storefront/src/lib/boutique/schema.ts +131 -0
  137. package/templates/storefront/src/lib/config.ts +39 -0
  138. package/templates/storefront/src/lib/constants.tsx +75 -0
  139. package/templates/storefront/src/lib/context/modal-context.tsx +34 -0
  140. package/templates/storefront/src/lib/data/cart.ts +434 -0
  141. package/templates/storefront/src/lib/data/categories.ts +49 -0
  142. package/templates/storefront/src/lib/data/collections.ts +59 -0
  143. package/templates/storefront/src/lib/data/cookies.ts +103 -0
  144. package/templates/storefront/src/lib/data/customer.ts +261 -0
  145. package/templates/storefront/src/lib/data/fulfillment.ts +68 -0
  146. package/templates/storefront/src/lib/data/onboarding.ts +9 -0
  147. package/templates/storefront/src/lib/data/order-lookup.ts +34 -0
  148. package/templates/storefront/src/lib/data/orders.ts +112 -0
  149. package/templates/storefront/src/lib/data/payment.ts +35 -0
  150. package/templates/storefront/src/lib/data/products.ts +127 -0
  151. package/templates/storefront/src/lib/data/regions.ts +70 -0
  152. package/templates/storefront/src/lib/data/variants.ts +38 -0
  153. package/templates/storefront/src/lib/hooks/use-in-view.tsx +29 -0
  154. package/templates/storefront/src/lib/hooks/use-toggle-state.tsx +46 -0
  155. package/templates/storefront/src/lib/util/compare-addresses.ts +28 -0
  156. package/templates/storefront/src/lib/util/get-percentage-diff.ts +6 -0
  157. package/templates/storefront/src/lib/util/get-product-price.ts +79 -0
  158. package/templates/storefront/src/lib/util/isEmpty.ts +11 -0
  159. package/templates/storefront/src/lib/util/medusa-error.ts +22 -0
  160. package/templates/storefront/src/lib/util/money.ts +35 -0
  161. package/templates/storefront/src/lib/util/product.ts +5 -0
  162. package/templates/storefront/src/lib/util/repeat.ts +5 -0
  163. package/templates/storefront/src/lib/util/sort-products.ts +50 -0
  164. package/templates/storefront/src/modules/account/components/account-info/index.tsx +140 -0
  165. package/templates/storefront/src/modules/account/components/account-nav/index.tsx +198 -0
  166. package/templates/storefront/src/modules/account/components/address-book/index.tsx +28 -0
  167. package/templates/storefront/src/modules/account/components/address-card/add-address.tsx +169 -0
  168. package/templates/storefront/src/modules/account/components/address-card/edit-address-modal.tsx +241 -0
  169. package/templates/storefront/src/modules/account/components/login/index.tsx +65 -0
  170. package/templates/storefront/src/modules/account/components/order-card/index.tsx +88 -0
  171. package/templates/storefront/src/modules/account/components/order-overview/index.tsx +47 -0
  172. package/templates/storefront/src/modules/account/components/overview/index.tsx +169 -0
  173. package/templates/storefront/src/modules/account/components/profile-billing-address/index.tsx +193 -0
  174. package/templates/storefront/src/modules/account/components/profile-email/index.tsx +75 -0
  175. package/templates/storefront/src/modules/account/components/profile-name/index.tsx +79 -0
  176. package/templates/storefront/src/modules/account/components/profile-password/index.tsx +72 -0
  177. package/templates/storefront/src/modules/account/components/profile-phone/index.tsx +74 -0
  178. package/templates/storefront/src/modules/account/components/register/index.tsx +107 -0
  179. package/templates/storefront/src/modules/account/components/transfer-request-form/index.tsx +83 -0
  180. package/templates/storefront/src/modules/account/templates/account-layout.tsx +43 -0
  181. package/templates/storefront/src/modules/account/templates/login-template.tsx +27 -0
  182. package/templates/storefront/src/modules/cart/components/cart-item-select/index.tsx +75 -0
  183. package/templates/storefront/src/modules/cart/components/empty-cart-message/index.tsx +25 -0
  184. package/templates/storefront/src/modules/cart/components/item/index.tsx +144 -0
  185. package/templates/storefront/src/modules/cart/components/sign-in-prompt/index.tsx +27 -0
  186. package/templates/storefront/src/modules/cart/templates/index.tsx +51 -0
  187. package/templates/storefront/src/modules/cart/templates/items.tsx +58 -0
  188. package/templates/storefront/src/modules/cart/templates/preview.tsx +51 -0
  189. package/templates/storefront/src/modules/cart/templates/summary.tsx +50 -0
  190. package/templates/storefront/src/modules/categories/templates/index.tsx +94 -0
  191. package/templates/storefront/src/modules/checkout/components/address-select/index.tsx +117 -0
  192. package/templates/storefront/src/modules/checkout/components/addresses/index.tsx +186 -0
  193. package/templates/storefront/src/modules/checkout/components/billing_address/index.tsx +114 -0
  194. package/templates/storefront/src/modules/checkout/components/country-select/index.tsx +50 -0
  195. package/templates/storefront/src/modules/checkout/components/discount-code/index.tsx +181 -0
  196. package/templates/storefront/src/modules/checkout/components/error-message/index.tsx +13 -0
  197. package/templates/storefront/src/modules/checkout/components/payment/index.tsx +261 -0
  198. package/templates/storefront/src/modules/checkout/components/payment-button/index.tsx +195 -0
  199. package/templates/storefront/src/modules/checkout/components/payment-container/index.tsx +130 -0
  200. package/templates/storefront/src/modules/checkout/components/payment-test/index.tsx +12 -0
  201. package/templates/storefront/src/modules/checkout/components/payment-wrapper/index.tsx +42 -0
  202. package/templates/storefront/src/modules/checkout/components/payment-wrapper/stripe-wrapper.tsx +54 -0
  203. package/templates/storefront/src/modules/checkout/components/review/index.tsx +54 -0
  204. package/templates/storefront/src/modules/checkout/components/shipping/index.tsx +417 -0
  205. package/templates/storefront/src/modules/checkout/components/shipping-address/index.tsx +219 -0
  206. package/templates/storefront/src/modules/checkout/components/submit-button/index.tsx +32 -0
  207. package/templates/storefront/src/modules/checkout/templates/checkout-form/index.tsx +38 -0
  208. package/templates/storefront/src/modules/checkout/templates/checkout-summary/index.tsx +31 -0
  209. package/templates/storefront/src/modules/collections/templates/index.tsx +44 -0
  210. package/templates/storefront/src/modules/common/components/cart-totals/index.tsx +84 -0
  211. package/templates/storefront/src/modules/common/components/checkbox/index.tsx +44 -0
  212. package/templates/storefront/src/modules/common/components/delete-button/index.tsx +42 -0
  213. package/templates/storefront/src/modules/common/components/divider/index.tsx +9 -0
  214. package/templates/storefront/src/modules/common/components/filter-radio-group/index.tsx +61 -0
  215. package/templates/storefront/src/modules/common/components/input/index.tsx +79 -0
  216. package/templates/storefront/src/modules/common/components/interactive-link/index.tsx +33 -0
  217. package/templates/storefront/src/modules/common/components/line-item-options/index.tsx +26 -0
  218. package/templates/storefront/src/modules/common/components/line-item-price/index.tsx +63 -0
  219. package/templates/storefront/src/modules/common/components/line-item-unit-price/index.tsx +62 -0
  220. package/templates/storefront/src/modules/common/components/localized-client-link/index.tsx +29 -0
  221. package/templates/storefront/src/modules/common/components/modal/index.tsx +118 -0
  222. package/templates/storefront/src/modules/common/components/native-select/index.tsx +76 -0
  223. package/templates/storefront/src/modules/common/components/radio/index.tsx +27 -0
  224. package/templates/storefront/src/modules/common/icons/back.tsx +37 -0
  225. package/templates/storefront/src/modules/common/icons/bancontact.tsx +26 -0
  226. package/templates/storefront/src/modules/common/icons/chevron-down.tsx +30 -0
  227. package/templates/storefront/src/modules/common/icons/eye-off.tsx +37 -0
  228. package/templates/storefront/src/modules/common/icons/eye.tsx +37 -0
  229. package/templates/storefront/src/modules/common/icons/fast-delivery.tsx +65 -0
  230. package/templates/storefront/src/modules/common/icons/ideal.tsx +26 -0
  231. package/templates/storefront/src/modules/common/icons/map-pin.tsx +37 -0
  232. package/templates/storefront/src/modules/common/icons/package.tsx +44 -0
  233. package/templates/storefront/src/modules/common/icons/paypal.tsx +30 -0
  234. package/templates/storefront/src/modules/common/icons/placeholder-image.tsx +44 -0
  235. package/templates/storefront/src/modules/common/icons/refresh.tsx +51 -0
  236. package/templates/storefront/src/modules/common/icons/spinner.tsx +37 -0
  237. package/templates/storefront/src/modules/common/icons/trash.tsx +51 -0
  238. package/templates/storefront/src/modules/common/icons/user.tsx +37 -0
  239. package/templates/storefront/src/modules/common/icons/x.tsx +37 -0
  240. package/templates/storefront/src/modules/layout/components/cart-mismatch-banner/index.tsx +59 -0
  241. package/templates/storefront/src/modules/order/components/help/index.tsx +26 -0
  242. package/templates/storefront/src/modules/order/components/item/index.tsx +57 -0
  243. package/templates/storefront/src/modules/order/components/items/index.tsx +44 -0
  244. package/templates/storefront/src/modules/order/components/onboarding-cta/index.tsx +28 -0
  245. package/templates/storefront/src/modules/order/components/order-details/index.tsx +64 -0
  246. package/templates/storefront/src/modules/order/components/order-summary/index.tsx +61 -0
  247. package/templates/storefront/src/modules/order/components/payment-details/index.tsx +64 -0
  248. package/templates/storefront/src/modules/order/components/shipping-details/index.tsx +74 -0
  249. package/templates/storefront/src/modules/order/components/transfer-actions/index.tsx +83 -0
  250. package/templates/storefront/src/modules/order/components/transfer-image/index.tsx +275 -0
  251. package/templates/storefront/src/modules/order/templates/order-completed-template.tsx +53 -0
  252. package/templates/storefront/src/modules/order/templates/order-details-template.tsx +46 -0
  253. package/templates/storefront/src/modules/products/components/thumbnail/index.tsx +70 -0
  254. package/templates/storefront/src/modules/products/templates/index.tsx +118 -0
  255. package/templates/storefront/src/modules/shipping/components/free-shipping-price-nudge/index.tsx +285 -0
  256. package/templates/storefront/src/modules/skeletons/components/skeleton-button/index.tsx +5 -0
  257. package/templates/storefront/src/modules/skeletons/components/skeleton-card-details/index.tsx +10 -0
  258. package/templates/storefront/src/modules/skeletons/components/skeleton-cart-item/index.tsx +35 -0
  259. package/templates/storefront/src/modules/skeletons/components/skeleton-cart-totals/index.tsx +30 -0
  260. package/templates/storefront/src/modules/skeletons/components/skeleton-code-form/index.tsx +13 -0
  261. package/templates/storefront/src/modules/skeletons/components/skeleton-line-item/index.tsx +35 -0
  262. package/templates/storefront/src/modules/skeletons/components/skeleton-order-confirmed-header/index.tsx +14 -0
  263. package/templates/storefront/src/modules/skeletons/components/skeleton-order-information/index.tsx +36 -0
  264. package/templates/storefront/src/modules/skeletons/components/skeleton-order-items/index.tsx +43 -0
  265. package/templates/storefront/src/modules/skeletons/components/skeleton-order-summary/index.tsx +15 -0
  266. package/templates/storefront/src/modules/skeletons/components/skeleton-product-preview/index.tsx +15 -0
  267. package/templates/storefront/src/modules/skeletons/templates/skeleton-cart-page/index.tsx +65 -0
  268. package/templates/storefront/src/modules/skeletons/templates/skeleton-order-confirmed/index.tsx +21 -0
  269. package/templates/storefront/src/modules/skeletons/templates/skeleton-product-grid/index.tsx +23 -0
  270. package/templates/storefront/src/modules/store/components/pagination/index.tsx +114 -0
  271. package/templates/storefront/src/modules/store/components/refinement-list/index.tsx +41 -0
  272. package/templates/storefront/src/modules/store/components/refinement-list/sort-products/index.tsx +48 -0
  273. package/templates/storefront/src/modules/store/templates/index.tsx +42 -0
  274. package/templates/storefront/src/modules/store/templates/paginated-products.tsx +80 -0
  275. package/templates/storefront/src/modules/ub/button.tsx +41 -0
  276. package/templates/storefront/src/modules/ub/campaign-blocks.tsx +197 -0
  277. package/templates/storefront/src/modules/ub/campaign-ended.tsx +28 -0
  278. package/templates/storefront/src/modules/ub/category-tiles.tsx +41 -0
  279. package/templates/storefront/src/modules/ub/countdown.tsx +46 -0
  280. package/templates/storefront/src/modules/ub/footer.tsx +56 -0
  281. package/templates/storefront/src/modules/ub/icons.tsx +42 -0
  282. package/templates/storefront/src/modules/ub/nav.tsx +90 -0
  283. package/templates/storefront/src/modules/ub/pdp/buy-box.tsx +140 -0
  284. package/templates/storefront/src/modules/ub/pdp/gallery.tsx +40 -0
  285. package/templates/storefront/src/modules/ub/product-card.tsx +66 -0
  286. package/templates/storefront/src/modules/ub/top-bar.tsx +20 -0
  287. package/templates/storefront/src/modules/ub/track-form.tsx +92 -0
  288. package/templates/storefront/src/proxy.ts +89 -0
  289. package/templates/storefront/src/styles/globals.css +98 -0
  290. package/templates/storefront/src/styles/ub/bundle.css +372 -0
  291. package/templates/storefront/src/styles/ub/fonts.css +17 -0
  292. package/templates/storefront/src/styles/ub/medusa-ui.css +90 -0
  293. package/templates/storefront/src/styles/ub/overrides.css +12 -0
  294. package/templates/storefront/src/styles/ub/tokens.css +9 -0
  295. package/templates/storefront/src/types/global.ts +24 -0
  296. package/templates/storefront/src/types/icon.ts +4 -0
  297. package/templates/storefront/tailwind.config.js +164 -0
  298. package/templates/storefront/themes/black-friday/campaign.en.json +31 -0
  299. package/templates/storefront/themes/black-friday/campaign.fr.json +31 -0
  300. package/templates/storefront/themes/black-friday/theme.json +9 -0
  301. package/templates/storefront/themes/cyber-monday/campaign.en.json +31 -0
  302. package/templates/storefront/themes/cyber-monday/campaign.fr.json +31 -0
  303. package/templates/storefront/themes/cyber-monday/theme.json +9 -0
  304. package/templates/storefront/themes/halloween/campaign.en.json +31 -0
  305. package/templates/storefront/themes/halloween/campaign.fr.json +31 -0
  306. package/templates/storefront/themes/halloween/theme.json +9 -0
  307. package/templates/storefront/themes/noel/campaign.en.json +31 -0
  308. package/templates/storefront/themes/noel/campaign.fr.json +31 -0
  309. package/templates/storefront/themes/noel/theme.json +9 -0
  310. package/templates/storefront/themes/nouvel-an/campaign.en.json +31 -0
  311. package/templates/storefront/themes/nouvel-an/campaign.fr.json +31 -0
  312. package/templates/storefront/themes/nouvel-an/theme.json +9 -0
  313. package/templates/storefront/themes/thanksgiving/campaign.en.json +31 -0
  314. package/templates/storefront/themes/thanksgiving/campaign.fr.json +31 -0
  315. package/templates/storefront/themes/thanksgiving/theme.json +9 -0
  316. package/templates/storefront/tsconfig.json +53 -0
@@ -0,0 +1,90 @@
1
+ /* Branche les composants du starter (Medusa UI : panier, checkout, compte…) sur le thème
2
+ de la boutique. Medusa UI lit ses couleurs dans des variables CSS (--bg-base, --fg-base…)
3
+ définies sur :root : on les redéfinit à partir des tokens du thème (data-theme).
4
+ html[data-theme] l'emporte sur :root sans toucher au preset. */
5
+ html[data-theme] {
6
+ --bg-base: var(--bg);
7
+ --bg-base-hover: var(--surface);
8
+ --bg-base-pressed: var(--tint-1);
9
+ --bg-subtle: var(--surface);
10
+ --bg-subtle-hover: var(--tint-1);
11
+ --bg-subtle-pressed: var(--tint-2);
12
+ --bg-component: var(--surface);
13
+ --bg-component-hover: var(--tint-1);
14
+ --bg-component-pressed: var(--tint-2);
15
+ --bg-field: var(--bg);
16
+ --bg-field-hover: var(--surface);
17
+ --bg-field-component: var(--surface);
18
+ --bg-field-component-hover: var(--tint-1);
19
+ --bg-highlight: var(--tint-1);
20
+ --bg-highlight-hover: var(--tint-2);
21
+ --bg-interactive: var(--primary);
22
+ --bg-disabled: var(--surface);
23
+ --bg-overlay: rgb(0 0 0 / 0.45);
24
+
25
+ --fg-base: var(--ink);
26
+ --fg-subtle: var(--ink-muted);
27
+ --fg-muted: var(--ink-muted);
28
+ --fg-disabled: var(--ink-muted);
29
+ --fg-interactive: var(--primary);
30
+ --fg-interactive-hover: var(--primary);
31
+ --fg-on-color: var(--on-primary);
32
+ --fg-on-inverted: var(--on-primary);
33
+
34
+ --border-base: var(--border);
35
+ --border-strong: var(--border);
36
+ --border-interactive: var(--primary);
37
+ --border-menu-top: var(--border);
38
+ --border-menu-bot: var(--border);
39
+
40
+ --button-inverted: var(--primary);
41
+ --button-inverted-hover: color-mix(in srgb, var(--primary) 88%, var(--ink));
42
+ --button-inverted-pressed: color-mix(in srgb, var(--primary) 78%, var(--ink));
43
+ --button-neutral: var(--bg);
44
+ --button-neutral-hover: var(--surface);
45
+ --button-neutral-pressed: var(--tint-1);
46
+ --button-transparent: transparent;
47
+ --button-transparent-hover: var(--surface);
48
+ --button-transparent-pressed: var(--tint-1);
49
+
50
+ --buttons-inverted: 0 0 0 1px var(--primary);
51
+ --buttons-inverted-focus: 0 0 0 1px var(--primary), 0 0 0 3px var(--focus);
52
+ --buttons-neutral: 0 0 0 1px var(--border);
53
+ --buttons-neutral-focus: 0 0 0 1px var(--border), 0 0 0 3px var(--focus);
54
+ --borders-base: 0 0 0 1px var(--border);
55
+ --borders-focus: 0 0 0 1px var(--primary), 0 0 0 3px var(--focus);
56
+ --borders-interactive-with-active: 0 0 0 1px var(--primary), 0 0 0 4px color-mix(in srgb, var(--primary) 25%, transparent);
57
+ --borders-interactive-with-focus: 0 0 0 1px var(--primary), 0 0 0 3px var(--focus);
58
+ --borders-interactive-with-shadow: 0 0 0 1px var(--primary);
59
+ --details-contrast-on-bg-interactive: var(--on-primary);
60
+ }
61
+
62
+ /* Boutons Medusa UI : forme du preset du thème (pilule, coins carrés…) */
63
+ .ub :is(button, a)[class*="bg-ui-button"] {
64
+ border-radius: var(--ub-r-btn);
65
+ font-weight: 600;
66
+ }
67
+
68
+ /* Titres Medusa UI : police et casse des titres du thème */
69
+ .ub :is(h1, h2, h3)[class*="txt-"],
70
+ .ub :is(h1, h2, h3)[class*="text-"] {
71
+ font-family: var(--ub-font-head);
72
+ text-transform: var(--ub-head-case);
73
+ letter-spacing: var(--ub-head-track);
74
+ }
75
+
76
+ /* Cartes / blocs du starter : arrondis du thème */
77
+ .ub .rounded-rounded,
78
+ .ub .rounded-md {
79
+ border-radius: var(--ub-r-card);
80
+ }
81
+
82
+ /* Champs préremplis par le navigateur : couleurs du thème (le starter force #fff / #212121) */
83
+ .ub input:-webkit-autofill,
84
+ .ub input:-webkit-autofill:hover,
85
+ .ub input:-webkit-autofill:focus,
86
+ .ub select:-webkit-autofill {
87
+ border: 1px solid var(--border);
88
+ -webkit-text-fill-color: var(--ink);
89
+ -webkit-box-shadow: 0 0 0 1000px var(--bg) inset;
90
+ }
@@ -0,0 +1,12 @@
1
+ /* Réglages de l'admin qui priment sur les presets de thème (design/bundle.css). */
2
+
3
+ /* Compte à rebours « Toujours afficher » : visible même si le thème le masque. */
4
+ .ub-hero__cd.ub-cd-on,
5
+ .ub-cd-on .ub-countdown {
6
+ display: flex !important;
7
+ }
8
+
9
+ /* Conteneur neutre autour du compte à rebours du bandeau promo. */
10
+ .ub-promo__cd {
11
+ display: contents;
12
+ }
@@ -0,0 +1,9 @@
1
+ /* COPIE de design/ par scripts/sync-design.mjs — ne pas modifier ici. */
2
+ /* Généré depuis tokens.json — variables CSS par thème (data-theme sur <html>) */
3
+ :root,[data-theme="halloween"]{--bg:#0e0c14;--surface:#17141f;--tint-1:#211a30;--tint-2:#2a1a1c;--tint-3:#1a2130;--tint-4:#1f2a1c;--ink:#f4f1fa;--ink-muted:#a8a1ba;--border:#2b2638;--primary:#ff7a1a;--on-primary:#0e0c14;--accent:#b69cff;--on-accent:#0e0c14;--sale:#ff8a3d;--star:#fbbf24;--success:#4ade80;--hero-bg:#171126;--hero-ink:#f4f1fa;--hero-muted:#b9b0cf;--band-bg:#211936;--band-ink:#f4f1fa;--bubble-bg:#ff7a1a;--bubble-ink:#0e0c14;--topbar-bg:#ff7a1a;--topbar-ink:#0e0c14;--focus:#fbbf24;}
4
+ [data-theme="thanksgiving"]{--bg:#ffffff;--surface:#f6f3ef;--tint-1:#f3e7da;--tint-2:#efe3d3;--tint-3:#e9eadf;--tint-4:#f5e2d8;--ink:#1c1917;--ink-muted:#6b625a;--border:#ebe5de;--primary:#c2410c;--on-primary:#ffffff;--accent:#1c1917;--on-accent:#ffffff;--sale:#c2410c;--star:#d97706;--success:#3f6212;--hero-bg:#f7efe6;--hero-ink:#1c1917;--hero-muted:#5f564e;--band-bg:#c2410c;--band-ink:#ffffff;--bubble-bg:#1c1917;--bubble-ink:#ffffff;--topbar-bg:#1c1917;--topbar-ink:#ffffff;--focus:#2563eb;}
5
+ [data-theme="black-friday"]{--bg:#ffffff;--surface:#f4f4f5;--tint-1:#f4f4f5;--tint-2:#f4f4f5;--tint-3:#f4f4f5;--tint-4:#f4f4f5;--ink:#09090b;--ink-muted:#52525b;--border:#e4e4e7;--primary:#f97316;--on-primary:#09090b;--accent:#18181b;--on-accent:#ffffff;--sale:#c62828;--star:#f59e0b;--success:#15803d;--hero-bg:#09090b;--hero-ink:#ffffff;--hero-muted:#a1a1aa;--band-bg:#f97316;--band-ink:#09090b;--bubble-bg:#f97316;--bubble-ink:#09090b;--topbar-bg:#09090b;--topbar-ink:#ffffff;--focus:#2563eb;}
6
+ [data-theme="cyber-monday"]{--bg:#ffffff;--surface:#f7f7fb;--tint-1:#f1effd;--tint-2:#eef4ff;--tint-3:#ecfbf4;--tint-4:#fff1ee;--ink:#0f1020;--ink-muted:#626477;--border:#ebebf3;--primary:#4a2bd6;--on-primary:#ffffff;--accent:#efeafd;--on-accent:#4a2bd6;--sale:#dc2626;--star:#f59e0b;--success:#15803d;--hero-bg:#eef0ff;--hero-ink:#0f1020;--hero-muted:#4b4d63;--band-bg:#f0ecfd;--band-ink:#0f1020;--bubble-bg:#ffffff;--bubble-ink:#4a2bd6;--topbar-bg:#f3effd;--topbar-ink:#4a2bd6;--focus:#4a2bd6;}
7
+ [data-theme="noel"]{--bg:#ffffff;--surface:#f8f8fb;--tint-1:#fdecec;--tint-2:#eaf5ee;--tint-3:#fff6e5;--tint-4:#eef2fb;--ink:#111827;--ink-muted:#5b6475;--border:#eceef3;--primary:#b91c1c;--on-primary:#ffffff;--accent:#15803d;--on-accent:#ffffff;--sale:#b91c1c;--star:#f59e0b;--success:#15803d;--hero-bg:#fbeeee;--hero-ink:#111827;--hero-muted:#4b5563;--band-bg:#14532d;--band-ink:#ffffff;--bubble-bg:#dc2626;--bubble-ink:#ffffff;--topbar-bg:#b91c1c;--topbar-ink:#ffffff;--focus:#2563eb;}
8
+ [data-theme="nouvel-an"]{--bg:#fbfaf7;--surface:#f1eee6;--tint-1:#efe9dc;--tint-2:#ebe7f5;--tint-3:#e9eef0;--tint-4:#f3e9e4;--ink:#111018;--ink-muted:#5e5b6b;--border:#e6e1d6;--primary:#d9b54a;--on-primary:#111018;--accent:#6d4aff;--on-accent:#ffffff;--sale:#9a4a07;--star:#b8860b;--success:#15803d;--hero-bg:#efeaf6;--hero-ink:#111018;--hero-muted:#4a4757;--band-bg:#16152a;--band-ink:#f5f3ea;--bubble-bg:#16152a;--bubble-ink:#e9cf7a;--topbar-bg:#16152a;--topbar-ink:#e9cf7a;--focus:#6d4aff;}
9
+ :root{--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-6:24px;--space-8:32px;--space-12:48px;--space-16:64px;--space-24:96px;--content-max:1280px;--radius-sm:6px;--radius-md:8px;--radius-lg:12px;--radius-xl:20px;--radius-2xl:28px;--radius-pill:999px;--shadow-card:0 1px 2px rgba(16,24,40,0.04), 0 8px 24px rgba(16,24,40,0.06);--shadow-pop:0 12px 32px rgba(16,24,40,0.14);--font-inter:Inter, system-ui, sans-serif;--font-space-grotesk:"Space Grotesk", Inter, sans-serif;--font-jakarta:"Plus Jakarta Sans", Inter, sans-serif;--font-oswald:Oswald, "Arial Narrow", sans-serif;--font-outfit:Outfit, Inter, sans-serif;--font-poppins:Poppins, Inter, sans-serif;--font-sora:Sora, Inter, sans-serif;--font-serif:"DM Serif Display", Georgia, serif;}
@@ -0,0 +1,24 @@
1
+ import { StorePrice } from "@medusajs/types"
2
+
3
+ export type FeaturedProduct = {
4
+ id: string
5
+ title: string
6
+ handle: string
7
+ thumbnail?: string
8
+ }
9
+
10
+ export type VariantPrice = {
11
+ calculated_price_number: number
12
+ calculated_price: string
13
+ original_price_number: number
14
+ original_price: string
15
+ currency_code: string
16
+ price_type: string
17
+ percentage_diff: string
18
+ }
19
+
20
+ export type StoreFreeShippingPrice = StorePrice & {
21
+ target_reached: boolean
22
+ target_remaining: number
23
+ remaining_percentage: number
24
+ }
@@ -0,0 +1,4 @@
1
+ export type IconProps = {
2
+ color?: string
3
+ size?: string | number
4
+ } & React.SVGAttributes<SVGElement>
@@ -0,0 +1,164 @@
1
+ const path = require("path")
2
+
3
+ module.exports = {
4
+ darkMode: "class",
5
+ presets: [require("@medusajs/ui-preset")],
6
+ content: [
7
+ "./src/app/**/*.{js,ts,jsx,tsx}",
8
+ "./src/pages/**/*.{js,ts,jsx,tsx}",
9
+ "./src/components/**/*.{js,ts,jsx,tsx}",
10
+ "./src/modules/**/*.{js,ts,jsx,tsx}",
11
+ "./node_modules/@medusajs/ui/dist/**/*.{js,jsx,ts,tsx}",
12
+ ],
13
+ theme: {
14
+ extend: {
15
+ transitionProperty: {
16
+ width: "width margin",
17
+ height: "height",
18
+ bg: "background-color",
19
+ display: "display opacity",
20
+ visibility: "visibility",
21
+ padding: "padding-top padding-right padding-bottom padding-left",
22
+ },
23
+ colors: {
24
+ grey: {
25
+ 0: "#FFFFFF",
26
+ 5: "#F9FAFB",
27
+ 10: "#F3F4F6",
28
+ 20: "#E5E7EB",
29
+ 30: "#D1D5DB",
30
+ 40: "#9CA3AF",
31
+ 50: "#6B7280",
32
+ 60: "#4B5563",
33
+ 70: "#374151",
34
+ 80: "#1F2937",
35
+ 90: "#111827",
36
+ },
37
+ },
38
+ borderRadius: {
39
+ none: "0px",
40
+ soft: "2px",
41
+ base: "4px",
42
+ rounded: "8px",
43
+ large: "16px",
44
+ circle: "9999px",
45
+ },
46
+ maxWidth: {
47
+ "8xl": "100rem",
48
+ },
49
+ screens: {
50
+ "2xsmall": "320px",
51
+ xsmall: "512px",
52
+ small: "1024px",
53
+ medium: "1280px",
54
+ large: "1440px",
55
+ xlarge: "1680px",
56
+ "2xlarge": "1920px",
57
+ },
58
+ fontSize: {
59
+ "3xl": "2rem",
60
+ },
61
+ fontFamily: {
62
+ // Police du thème (preset de bundle.css), repli sur Inter
63
+ sans: [
64
+ "var(--ub-font-body)",
65
+ "Inter",
66
+ "-apple-system",
67
+ "BlinkMacSystemFont",
68
+ "Segoe UI",
69
+ "Roboto",
70
+ "Helvetica Neue",
71
+ "Ubuntu",
72
+ "sans-serif",
73
+ ],
74
+ },
75
+ keyframes: {
76
+ ring: {
77
+ "0%": { transform: "rotate(0deg)" },
78
+ "100%": { transform: "rotate(360deg)" },
79
+ },
80
+ "fade-in-right": {
81
+ "0%": {
82
+ opacity: "0",
83
+ transform: "translateX(10px)",
84
+ },
85
+ "100%": {
86
+ opacity: "1",
87
+ transform: "translateX(0)",
88
+ },
89
+ },
90
+ "fade-in-top": {
91
+ "0%": {
92
+ opacity: "0",
93
+ transform: "translateY(-10px)",
94
+ },
95
+ "100%": {
96
+ opacity: "1",
97
+ transform: "translateY(0)",
98
+ },
99
+ },
100
+ "fade-out-top": {
101
+ "0%": {
102
+ height: "100%",
103
+ },
104
+ "99%": {
105
+ height: "0",
106
+ },
107
+ "100%": {
108
+ visibility: "hidden",
109
+ },
110
+ },
111
+ "accordion-slide-up": {
112
+ "0%": {
113
+ height: "var(--radix-accordion-content-height)",
114
+ opacity: "1",
115
+ },
116
+ "100%": {
117
+ height: "0",
118
+ opacity: "0",
119
+ },
120
+ },
121
+ "accordion-slide-down": {
122
+ "0%": {
123
+ "min-height": "0",
124
+ "max-height": "0",
125
+ opacity: "0",
126
+ },
127
+ "100%": {
128
+ "min-height": "var(--radix-accordion-content-height)",
129
+ "max-height": "none",
130
+ opacity: "1",
131
+ },
132
+ },
133
+ enter: {
134
+ "0%": { transform: "scale(0.9)", opacity: 0 },
135
+ "100%": { transform: "scale(1)", opacity: 1 },
136
+ },
137
+ leave: {
138
+ "0%": { transform: "scale(1)", opacity: 1 },
139
+ "100%": { transform: "scale(0.9)", opacity: 0 },
140
+ },
141
+ "slide-in": {
142
+ "0%": { transform: "translateY(-100%)" },
143
+ "100%": { transform: "translateY(0)" },
144
+ },
145
+ },
146
+ animation: {
147
+ ring: "ring 2.2s cubic-bezier(0.5, 0, 0.5, 1) infinite",
148
+ "fade-in-right":
149
+ "fade-in-right 0.3s cubic-bezier(0.5, 0, 0.5, 1) forwards",
150
+ "fade-in-top": "fade-in-top 0.2s cubic-bezier(0.5, 0, 0.5, 1) forwards",
151
+ "fade-out-top":
152
+ "fade-out-top 0.2s cubic-bezier(0.5, 0, 0.5, 1) forwards",
153
+ "accordion-open":
154
+ "accordion-slide-down 300ms cubic-bezier(0.87, 0, 0.13, 1) forwards",
155
+ "accordion-close":
156
+ "accordion-slide-up 300ms cubic-bezier(0.87, 0, 0.13, 1) forwards",
157
+ enter: "enter 200ms ease-out",
158
+ "slide-in": "slide-in 1.2s cubic-bezier(.41,.73,.51,1.02)",
159
+ leave: "leave 150ms ease-in forwards",
160
+ },
161
+ },
162
+ },
163
+ plugins: [require("tailwindcss-radix")()],
164
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "topbar": [
3
+ "Black Friday: biggest sale of the year",
4
+ "Free shipping over {freeShipping}",
5
+ "30-day money back"
6
+ ],
7
+ "hero": {
8
+ "eyebrow": "Black Friday",
9
+ "title": "Black Friday",
10
+ "highlight": "Up to {discount} off",
11
+ "sub": "Our biggest price drop of the year. New doorbusters every hour until {endDate}.",
12
+ "cta": "Shop the deals",
13
+ "cta2": "See doorbusters",
14
+ "bubble": [
15
+ "Up to",
16
+ "{discount}",
17
+ "Off"
18
+ ]
19
+ },
20
+ "promo": {
21
+ "eyebrow": "Flash sale",
22
+ "title": "Up to {discount} off",
23
+ "text": "Doorbusters change every hour.",
24
+ "cta": "Shop sale now",
25
+ "seal": "Today only"
26
+ },
27
+ "sections": {
28
+ "categories": "Shop the deals",
29
+ "products": "Doorbusters"
30
+ }
31
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "topbar": [
3
+ "Black Friday : la plus grosse vente de l'année",
4
+ "Livraison offerte dès {freeShipping}",
5
+ "Satisfait ou remboursé 30 jours"
6
+ ],
7
+ "hero": {
8
+ "eyebrow": "Black Friday",
9
+ "title": "Black Friday",
10
+ "highlight": "Jusqu'à -{discount}",
11
+ "sub": "Nos plus fortes baisses de prix de l'année. De nouvelles offres chaque heure jusqu'au {endDate}.",
12
+ "cta": "Voir les offres",
13
+ "cta2": "Offres chocs",
14
+ "bubble": [
15
+ "Jusqu'à",
16
+ "{discount}",
17
+ "de remise"
18
+ ]
19
+ },
20
+ "promo": {
21
+ "eyebrow": "Vente flash",
22
+ "title": "Jusqu'à -{discount}",
23
+ "text": "Les offres chocs changent chaque heure.",
24
+ "cta": "J'en profite",
25
+ "seal": "Aujourd'hui"
26
+ },
27
+ "sections": {
28
+ "categories": "Les offres",
29
+ "products": "Offres chocs"
30
+ }
31
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": "black-friday",
3
+ "name": "Black Friday",
4
+ "reference": "Aeroflow + NovaTrend",
5
+ "fonts": {
6
+ "head": "oswald",
7
+ "body": "inter"
8
+ }
9
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "topbar": [
3
+ "Free shipping on orders over {freeShipping}",
4
+ "Cyber Monday: 24 hours only",
5
+ "Pay by card, Apple Pay or Google Pay"
6
+ ],
7
+ "hero": {
8
+ "eyebrow": "Cyber Monday",
9
+ "title": "Cyber Monday tech deals",
10
+ "highlight": "tech deals",
11
+ "sub": "24 hours only. Laptops, audio and smart gadgets up to {discount} off.",
12
+ "cta": "Shop now",
13
+ "cta2": "View all deals",
14
+ "bubble": [
15
+ "Up to",
16
+ "{discount}",
17
+ "Off"
18
+ ]
19
+ },
20
+ "promo": {
21
+ "eyebrow": "Special offer",
22
+ "title": "Enhance your music experience",
23
+ "text": "Headphones and speakers at their lowest price of the year.",
24
+ "cta": "Check it out",
25
+ "seal": "24h only"
26
+ },
27
+ "sections": {
28
+ "categories": "Browse by category",
29
+ "products": "Explore our best sellers"
30
+ }
31
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "topbar": [
3
+ "Livraison offerte dès {freeShipping}",
4
+ "Cyber Monday : 24 heures seulement",
5
+ "Carte, Apple Pay ou Google Pay"
6
+ ],
7
+ "hero": {
8
+ "eyebrow": "Cyber Monday",
9
+ "title": "Cyber Monday : les offres tech",
10
+ "highlight": "offres tech",
11
+ "sub": "24 heures seulement. Ordinateurs, audio et objets connectés jusqu'à -{discount}.",
12
+ "cta": "Acheter",
13
+ "cta2": "Toutes les offres",
14
+ "bubble": [
15
+ "Jusqu'à",
16
+ "{discount}",
17
+ "de remise"
18
+ ]
19
+ },
20
+ "promo": {
21
+ "eyebrow": "Offre spéciale",
22
+ "title": "Profitez mieux de votre musique",
23
+ "text": "Casques et enceintes au prix le plus bas de l'année.",
24
+ "cta": "Découvrir",
25
+ "seal": "24 h seulement"
26
+ },
27
+ "sections": {
28
+ "categories": "Nos catégories",
29
+ "products": "Nos meilleures ventes"
30
+ }
31
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": "cyber-monday",
3
+ "name": "Cyber Monday",
4
+ "reference": "NovaTech",
5
+ "fonts": {
6
+ "head": "outfit",
7
+ "body": "outfit"
8
+ }
9
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "topbar": [
3
+ "Free shipping over {freeShipping}",
4
+ "Halloween Sale ends {endDate}",
5
+ "Secure checkout by Stripe"
6
+ ],
7
+ "hero": {
8
+ "eyebrow": "Halloween Sale",
9
+ "title": "Deals so good they're scary",
10
+ "highlight": "they're",
11
+ "sub": "Costumes, decor and treats up to {discount} off. Ends {endDate} at midnight.",
12
+ "cta": "Shop the sale",
13
+ "cta2": "Explore more",
14
+ "bubble": [
15
+ "Up to",
16
+ "{discount}",
17
+ "Off"
18
+ ]
19
+ },
20
+ "promo": {
21
+ "eyebrow": "Built for the night",
22
+ "title": "Last call: {discount} off everything",
23
+ "text": "Final hours of the Halloween Sale.",
24
+ "cta": "Grab the deals",
25
+ "seal": "Ends {endDate}"
26
+ },
27
+ "sections": {
28
+ "categories": "Shop by category",
29
+ "products": "Top picks"
30
+ }
31
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "topbar": [
3
+ "Livraison offerte dès {freeShipping}",
4
+ "Soldes d'Halloween jusqu'au {endDate}",
5
+ "Paiement sécurisé par Stripe"
6
+ ],
7
+ "hero": {
8
+ "eyebrow": "Soldes d'Halloween",
9
+ "title": "Des prix à faire peur",
10
+ "highlight": "peur",
11
+ "sub": "Costumes, déco et friandises jusqu'à -{discount}. Jusqu'au {endDate} à minuit.",
12
+ "cta": "Voir les offres",
13
+ "cta2": "Découvrir",
14
+ "bubble": [
15
+ "Jusqu'à",
16
+ "{discount}",
17
+ "de remise"
18
+ ]
19
+ },
20
+ "promo": {
21
+ "eyebrow": "Spécial Halloween",
22
+ "title": "Dernière chance : -{discount} sur tout",
23
+ "text": "Dernières heures des soldes d'Halloween.",
24
+ "cta": "J'en profite",
25
+ "seal": "Fin le {endDate}"
26
+ },
27
+ "sections": {
28
+ "categories": "Nos catégories",
29
+ "products": "Notre sélection"
30
+ }
31
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": "halloween",
3
+ "name": "Halloween",
4
+ "reference": "Nexora (sombre)",
5
+ "fonts": {
6
+ "head": "space-grotesk",
7
+ "body": "inter"
8
+ }
9
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "topbar": [
3
+ "Order by {endDate} for Christmas delivery",
4
+ "Free gift wrapping",
5
+ "Easy returns until January 31"
6
+ ],
7
+ "hero": {
8
+ "eyebrow": "Christmas Gift Shop",
9
+ "title": "Gifts they'll love. Delivered by Christmas.",
10
+ "highlight": "love.",
11
+ "sub": "Hand-picked gifts for everyone on your list, wrapped for free.",
12
+ "cta": "Shop gifts",
13
+ "cta2": "Gift guide",
14
+ "bubble": [
15
+ "Up to",
16
+ "{discount}",
17
+ "Off"
18
+ ]
19
+ },
20
+ "promo": {
21
+ "eyebrow": "Limited offer",
22
+ "title": "Gift season. Exclusive deals.",
23
+ "text": "Up to {discount} off selected gifts until {endDate}.",
24
+ "cta": "Shop now",
25
+ "seal": "Limited Offer"
26
+ },
27
+ "sections": {
28
+ "categories": "Shop by category",
29
+ "products": "Featured gifts"
30
+ }
31
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "topbar": [
3
+ "Commandez avant le {endDate} pour Noël",
4
+ "Emballage cadeau offert",
5
+ "Retours faciles jusqu'au 31 janvier"
6
+ ],
7
+ "hero": {
8
+ "eyebrow": "Boutique de Noël",
9
+ "title": "Des cadeaux qu'ils vont adorer. Livrés pour Noël.",
10
+ "highlight": "adorer.",
11
+ "sub": "Des cadeaux choisis pour chacun, emballés gratuitement.",
12
+ "cta": "Voir les cadeaux",
13
+ "cta2": "Guide cadeaux",
14
+ "bubble": [
15
+ "Jusqu'à",
16
+ "{discount}",
17
+ "de remise"
18
+ ]
19
+ },
20
+ "promo": {
21
+ "eyebrow": "Offre limitée",
22
+ "title": "La saison des cadeaux. Des offres exclusives.",
23
+ "text": "Jusqu'à -{discount} sur une sélection de cadeaux jusqu'au {endDate}.",
24
+ "cta": "Acheter",
25
+ "seal": "Offre limitée"
26
+ },
27
+ "sections": {
28
+ "categories": "Nos catégories",
29
+ "products": "Idées cadeaux"
30
+ }
31
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": "noel",
3
+ "name": "Noël",
4
+ "reference": "Crescendo",
5
+ "fonts": {
6
+ "head": "poppins",
7
+ "body": "poppins"
8
+ }
9
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "topbar": [
3
+ "New Year Sale: up to {discount} off",
4
+ "Free shipping over {freeShipping}",
5
+ "Ends {endDate}"
6
+ ],
7
+ "hero": {
8
+ "eyebrow": "New Year Sale",
9
+ "title": "New year new you",
10
+ "highlight": "new",
11
+ "sub": "Start the year with up to {discount} off our best sellers. Ends {endDate}.",
12
+ "cta": "Explore the sale",
13
+ "cta2": "New arrivals",
14
+ "bubble": [
15
+ "Up to",
16
+ "{discount}",
17
+ "Off"
18
+ ]
19
+ },
20
+ "promo": {
21
+ "eyebrow": "Ready for the new year?",
22
+ "title": "Countdown to the new year",
23
+ "text": "Midnight deals drop every hour on December 31.",
24
+ "cta": "Join the countdown",
25
+ "seal": "Dec 31"
26
+ },
27
+ "sections": {
28
+ "categories": "Explore our categories",
29
+ "products": "Explore our top picks"
30
+ }
31
+ }