@vendure-platform/create 0.5.0 → 1.0.0-major.202609091053.0.0

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 (463) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +53 -41
  3. package/dist/add-to-existing.d.ts +19 -13
  4. package/dist/add-to-existing.js +1 -1
  5. package/dist/assets/demo-data/assets/branding/logo.svg +4 -0
  6. package/dist/assets/demo-data/assets/images/absorbent-pad.webp +0 -0
  7. package/dist/assets/demo-data/assets/images/adjustable-wrench.webp +0 -0
  8. package/dist/assets/demo-data/assets/images/anchor-bolt.webp +0 -0
  9. package/dist/assets/demo-data/assets/images/angle-grinder.webp +0 -0
  10. package/dist/assets/demo-data/assets/images/barrier-tape.webp +0 -0
  11. package/dist/assets/demo-data/assets/images/bench-grinder.webp +0 -0
  12. package/dist/assets/demo-data/assets/images/bracket.webp +0 -0
  13. package/dist/assets/demo-data/assets/images/broom.webp +0 -0
  14. package/dist/assets/demo-data/assets/images/bucket.webp +0 -0
  15. package/dist/assets/demo-data/assets/images/cable-gland.webp +0 -0
  16. package/dist/assets/demo-data/assets/images/cable-tie.webp +0 -0
  17. package/dist/assets/demo-data/assets/images/cable-tray.webp +0 -0
  18. package/dist/assets/demo-data/assets/images/cable.webp +0 -0
  19. package/dist/assets/demo-data/assets/images/chimney-base-kit.webp +0 -0
  20. package/dist/assets/demo-data/assets/images/chimney-cowl-bird-guard.webp +0 -0
  21. package/dist/assets/demo-data/assets/images/chimney-cowl-open.webp +0 -0
  22. package/dist/assets/demo-data/assets/images/chimney-storm-collar.webp +0 -0
  23. package/dist/assets/demo-data/assets/images/chimney-wall-bracket.webp +0 -0
  24. package/dist/assets/demo-data/assets/images/circular-saw.webp +0 -0
  25. package/dist/assets/demo-data/assets/images/cleaning-spray.webp +0 -0
  26. package/dist/assets/demo-data/assets/images/conduit.webp +0 -0
  27. package/dist/assets/demo-data/assets/images/cordless-drill.webp +0 -0
  28. package/dist/assets/demo-data/assets/images/drill-bits.webp +0 -0
  29. package/dist/assets/demo-data/assets/images/dust-mask.webp +0 -0
  30. package/dist/assets/demo-data/assets/images/ear-defenders.webp +0 -0
  31. package/dist/assets/demo-data/assets/images/ear-plugs.webp +0 -0
  32. package/dist/assets/demo-data/assets/images/extension-lead.webp +0 -0
  33. package/dist/assets/demo-data/assets/images/eye-wash-station.webp +0 -0
  34. package/dist/assets/demo-data/assets/images/face-shield.webp +0 -0
  35. package/dist/assets/demo-data/assets/images/file-set.webp +0 -0
  36. package/dist/assets/demo-data/assets/images/first-aid-kit.webp +0 -0
  37. package/dist/assets/demo-data/assets/images/floor-sign.webp +0 -0
  38. package/dist/assets/demo-data/assets/images/flue-bend-45.webp +0 -0
  39. package/dist/assets/demo-data/assets/images/flue-bend-90.webp +0 -0
  40. package/dist/assets/demo-data/assets/images/flue-section-1000mm.webp +0 -0
  41. package/dist/assets/demo-data/assets/images/flue-section-250mm.webp +0 -0
  42. package/dist/assets/demo-data/assets/images/flue-section-500mm.webp +0 -0
  43. package/dist/assets/demo-data/assets/images/fuse.webp +0 -0
  44. package/dist/assets/demo-data/assets/images/glove-dispenser.webp +0 -0
  45. package/dist/assets/demo-data/assets/images/grinding-disc.webp +0 -0
  46. package/dist/assets/demo-data/assets/images/hacksaw.webp +0 -0
  47. package/dist/assets/demo-data/assets/images/hammer.webp +0 -0
  48. package/dist/assets/demo-data/assets/images/hand-sanitiser.webp +0 -0
  49. package/dist/assets/demo-data/assets/images/head-torch.webp +0 -0
  50. package/dist/assets/demo-data/assets/images/heat-gun.webp +0 -0
  51. package/dist/assets/demo-data/assets/images/hex-bolt.webp +0 -0
  52. package/dist/assets/demo-data/assets/images/hex-key-set.webp +0 -0
  53. package/dist/assets/demo-data/assets/images/hex-nut.webp +0 -0
  54. package/dist/assets/demo-data/assets/images/hi-vis-jacket.webp +0 -0
  55. package/dist/assets/demo-data/assets/images/hi-vis-vest.webp +0 -0
  56. package/dist/assets/demo-data/assets/images/hose-clamp.webp +0 -0
  57. package/dist/assets/demo-data/assets/images/impact-driver.webp +0 -0
  58. package/dist/assets/demo-data/assets/images/jigsaw.webp +0 -0
  59. package/dist/assets/demo-data/assets/images/junction-box.webp +0 -0
  60. package/dist/assets/demo-data/assets/images/knee-pads.webp +0 -0
  61. package/dist/assets/demo-data/assets/images/machine-screw.webp +0 -0
  62. package/dist/assets/demo-data/assets/images/made-to-order-configurable-chimney.webp +0 -0
  63. package/dist/assets/demo-data/assets/images/mallet.webp +0 -0
  64. package/dist/assets/demo-data/assets/images/mcb.webp +0 -0
  65. package/dist/assets/demo-data/assets/images/mop.webp +0 -0
  66. package/dist/assets/demo-data/assets/images/paper-towels.webp +0 -0
  67. package/dist/assets/demo-data/assets/images/pipe-wrench.webp +0 -0
  68. package/dist/assets/demo-data/assets/images/pliers-set.webp +0 -0
  69. package/dist/assets/demo-data/assets/images/pry-bar.webp +0 -0
  70. package/dist/assets/demo-data/assets/images/rcd.webp +0 -0
  71. package/dist/assets/demo-data/assets/images/reciprocating-saw.webp +0 -0
  72. package/dist/assets/demo-data/assets/images/rivet.webp +0 -0
  73. package/dist/assets/demo-data/assets/images/roof-flashing-high-pitch.webp +0 -0
  74. package/dist/assets/demo-data/assets/images/roof-flashing-low-pitch.webp +0 -0
  75. package/dist/assets/demo-data/assets/images/safety-boots.webp +0 -0
  76. package/dist/assets/demo-data/assets/images/safety-glasses.webp +0 -0
  77. package/dist/assets/demo-data/assets/images/safety-harness.webp +0 -0
  78. package/dist/assets/demo-data/assets/images/safety-helmet.webp +0 -0
  79. package/dist/assets/demo-data/assets/images/safety-sign.webp +0 -0
  80. package/dist/assets/demo-data/assets/images/sanding-disc.webp +0 -0
  81. package/dist/assets/demo-data/assets/images/saw-blade.webp +0 -0
  82. package/dist/assets/demo-data/assets/images/screwdriver-set.webp +0 -0
  83. package/dist/assets/demo-data/assets/images/screwdriver.webp +0 -0
  84. package/dist/assets/demo-data/assets/images/self-tapping-screw.webp +0 -0
  85. package/dist/assets/demo-data/assets/images/socket-set.webp +0 -0
  86. package/dist/assets/demo-data/assets/images/socket.webp +0 -0
  87. package/dist/assets/demo-data/assets/images/spanner-set.webp +0 -0
  88. package/dist/assets/demo-data/assets/images/spanner.webp +0 -0
  89. package/dist/assets/demo-data/assets/images/spill-kit.webp +0 -0
  90. package/dist/assets/demo-data/assets/images/spirit-level.webp +0 -0
  91. package/dist/assets/demo-data/assets/images/switch.webp +0 -0
  92. package/dist/assets/demo-data/assets/images/tape-measure.webp +0 -0
  93. package/dist/assets/demo-data/assets/images/terminal-block.webp +0 -0
  94. package/dist/assets/demo-data/assets/images/threaded-rod.webp +0 -0
  95. package/dist/assets/demo-data/assets/images/torque-wrench.webp +0 -0
  96. package/dist/assets/demo-data/assets/images/utility-knife.webp +0 -0
  97. package/dist/assets/demo-data/assets/images/wall-pass-sleeve.webp +0 -0
  98. package/dist/assets/demo-data/assets/images/wall-plug.webp +0 -0
  99. package/dist/assets/demo-data/assets/images/washer.webp +0 -0
  100. package/dist/assets/demo-data/assets/images/waste-bin.webp +0 -0
  101. package/dist/assets/demo-data/assets/images/wire-connector.webp +0 -0
  102. package/dist/assets/demo-data/assets/images/wire-cutters.webp +0 -0
  103. package/dist/assets/demo-data/assets/images/wood-screw.webp +0 -0
  104. package/dist/assets/demo-data/assets/images/work-gloves.webp +0 -0
  105. package/dist/assets/demo-data/assets/images/work-light.webp +0 -0
  106. package/dist/assets/demo-data/assets/initial-data.json +667 -0
  107. package/dist/assets/demo-data/assets/products.csv +779 -0
  108. package/dist/assets/demo-data/initial-data.json +663 -663
  109. package/dist/assets/storefront/components.json +20 -20
  110. package/dist/assets/storefront/eslint.config.mjs +10 -10
  111. package/dist/assets/storefront/graphql.config.yml +1 -1
  112. package/dist/assets/storefront/next-env.d.ts +2 -1
  113. package/dist/assets/storefront/next.config.ts +19 -17
  114. package/dist/assets/storefront/package.json +3 -2
  115. package/dist/assets/storefront/postcss.config.mjs +1 -1
  116. package/dist/assets/storefront/src/app/[locale]/(catalog)/catalog/page.tsx +17 -21
  117. package/dist/assets/storefront/src/app/[locale]/(catalog)/collection/[slug]/page.tsx +64 -42
  118. package/dist/assets/storefront/src/app/[locale]/(catalog)/layout.tsx +1 -5
  119. package/dist/assets/storefront/src/app/[locale]/(catalog)/product/[slug]/actions.ts +69 -65
  120. package/dist/assets/storefront/src/app/[locale]/(catalog)/product/[slug]/page.tsx +64 -38
  121. package/dist/assets/storefront/src/app/[locale]/(catalog)/search/page.tsx +24 -27
  122. package/dist/assets/storefront/src/app/[locale]/(catalog)/search/search-results.tsx +11 -9
  123. package/dist/assets/storefront/src/app/[locale]/(catalog)/search/search-term.tsx +4 -4
  124. package/dist/assets/storefront/src/app/[locale]/(scenario)/[...path]/page.tsx +1 -1
  125. package/dist/assets/storefront/src/app/[locale]/accept-invitation/[token]/accept-invitation-client.tsx +8 -13
  126. package/dist/assets/storefront/src/app/[locale]/accept-invitation/[token]/actions.ts +11 -14
  127. package/dist/assets/storefront/src/app/[locale]/accept-invitation/[token]/page.tsx +30 -33
  128. package/dist/assets/storefront/src/app/[locale]/accept-invitation/[token]/sign-out-and-retry.tsx +6 -6
  129. package/dist/assets/storefront/src/app/[locale]/account/addresses/actions.ts +30 -45
  130. package/dist/assets/storefront/src/app/[locale]/account/addresses/address-form.tsx +166 -159
  131. package/dist/assets/storefront/src/app/[locale]/account/addresses/addresses-client.tsx +35 -26
  132. package/dist/assets/storefront/src/app/[locale]/account/addresses/loading.tsx +1 -3
  133. package/dist/assets/storefront/src/app/[locale]/account/addresses/page.tsx +18 -18
  134. package/dist/assets/storefront/src/app/[locale]/account/approvals/actions.ts +5 -8
  135. package/dist/assets/storefront/src/app/[locale]/account/approvals/page.tsx +79 -69
  136. package/dist/assets/storefront/src/app/[locale]/account/company/actions.ts +10 -11
  137. package/dist/assets/storefront/src/app/[locale]/account/company/addresses/actions.ts +6 -15
  138. package/dist/assets/storefront/src/app/[locale]/account/company/addresses/address-form.tsx +57 -49
  139. package/dist/assets/storefront/src/app/[locale]/account/company/addresses/addresses-client.tsx +23 -25
  140. package/dist/assets/storefront/src/app/[locale]/account/company/addresses/page.tsx +30 -30
  141. package/dist/assets/storefront/src/app/[locale]/account/company/business-units/actions.ts +20 -29
  142. package/dist/assets/storefront/src/app/[locale]/account/company/business-units/business-unit-form.tsx +32 -37
  143. package/dist/assets/storefront/src/app/[locale]/account/company/business-units/business-units-client.tsx +32 -25
  144. package/dist/assets/storefront/src/app/[locale]/account/company/business-units/page.tsx +26 -24
  145. package/dist/assets/storefront/src/app/[locale]/account/company/business-units/types.ts +7 -4
  146. package/dist/assets/storefront/src/app/[locale]/account/company/edit-company-form.tsx +11 -21
  147. package/dist/assets/storefront/src/app/[locale]/account/company/page.tsx +25 -28
  148. package/dist/assets/storefront/src/app/[locale]/account/company/payment-methods/page.tsx +26 -24
  149. package/dist/assets/storefront/src/app/[locale]/account/company/payment-methods/payment-methods-client.tsx +5 -7
  150. package/dist/assets/storefront/src/app/[locale]/account/company/roles/page.tsx +24 -25
  151. package/dist/assets/storefront/src/app/[locale]/account/company/roles/roles-client.tsx +11 -26
  152. package/dist/assets/storefront/src/app/[locale]/account/company/tax-ids/actions.ts +6 -10
  153. package/dist/assets/storefront/src/app/[locale]/account/company/tax-ids/page.tsx +18 -16
  154. package/dist/assets/storefront/src/app/[locale]/account/company/tax-ids/tax-ids-client.tsx +74 -67
  155. package/dist/assets/storefront/src/app/[locale]/account/company/users/actions.ts +16 -25
  156. package/dist/assets/storefront/src/app/[locale]/account/company/users/edit-user-form.tsx +27 -25
  157. package/dist/assets/storefront/src/app/[locale]/account/company/users/invite-user-form.tsx +27 -19
  158. package/dist/assets/storefront/src/app/[locale]/account/company/users/page.tsx +34 -29
  159. package/dist/assets/storefront/src/app/[locale]/account/company/users/users-client.tsx +35 -38
  160. package/dist/assets/storefront/src/app/[locale]/account/error.tsx +1 -3
  161. package/dist/assets/storefront/src/app/[locale]/account/layout.tsx +16 -22
  162. package/dist/assets/storefront/src/app/[locale]/account/orders/[code]/page.tsx +151 -103
  163. package/dist/assets/storefront/src/app/[locale]/account/orders/[code]/reorder-actions.ts +6 -7
  164. package/dist/assets/storefront/src/app/[locale]/account/orders/[code]/reorder-dialog.tsx +22 -48
  165. package/dist/assets/storefront/src/app/[locale]/account/orders/loading.tsx +8 -8
  166. package/dist/assets/storefront/src/app/[locale]/account/orders/page.tsx +101 -61
  167. package/dist/assets/storefront/src/app/[locale]/account/profile/actions.ts +32 -23
  168. package/dist/assets/storefront/src/app/[locale]/account/profile/change-password-form.tsx +6 -16
  169. package/dist/assets/storefront/src/app/[locale]/account/profile/edit-email-form.tsx +7 -17
  170. package/dist/assets/storefront/src/app/[locale]/account/profile/edit-profile-form.tsx +6 -16
  171. package/dist/assets/storefront/src/app/[locale]/account/profile/loading.tsx +12 -18
  172. package/dist/assets/storefront/src/app/[locale]/account/profile/page.tsx +17 -15
  173. package/dist/assets/storefront/src/app/[locale]/account/quick-order/file-upload-tab.tsx +2 -6
  174. package/dist/assets/storefront/src/app/[locale]/account/quick-order/manual-entry-tab.tsx +18 -15
  175. package/dist/assets/storefront/src/app/[locale]/account/quick-order/page.tsx +5 -6
  176. package/dist/assets/storefront/src/app/[locale]/account/quick-order/preview-table.tsx +10 -2
  177. package/dist/assets/storefront/src/app/[locale]/account/quick-order/save-to-list-dialog.tsx +24 -26
  178. package/dist/assets/storefront/src/app/[locale]/account/quick-order/sku-autocomplete.tsx +19 -10
  179. package/dist/assets/storefront/src/app/[locale]/account/quick-order/text-input-tab.tsx +3 -8
  180. package/dist/assets/storefront/src/app/[locale]/account/quotes/[id]/page.tsx +93 -62
  181. package/dist/assets/storefront/src/app/[locale]/account/quotes/actions.ts +38 -45
  182. package/dist/assets/storefront/src/app/[locale]/account/quotes/new/new-quote-form.tsx +3 -5
  183. package/dist/assets/storefront/src/app/[locale]/account/quotes/new/page.tsx +6 -6
  184. package/dist/assets/storefront/src/app/[locale]/account/quotes/page.tsx +92 -59
  185. package/dist/assets/storefront/src/app/[locale]/account/shared-carts/[id]/add-item-search.tsx +11 -9
  186. package/dist/assets/storefront/src/app/[locale]/account/shared-carts/[id]/add-member-form.tsx +31 -15
  187. package/dist/assets/storefront/src/app/[locale]/account/shared-carts/[id]/members-panel.tsx +52 -33
  188. package/dist/assets/storefront/src/app/[locale]/account/shared-carts/[id]/page.tsx +22 -14
  189. package/dist/assets/storefront/src/app/[locale]/account/shared-carts/[id]/rename-dialog.tsx +34 -13
  190. package/dist/assets/storefront/src/app/[locale]/account/shared-carts/actions.ts +117 -72
  191. package/dist/assets/storefront/src/app/[locale]/account/shared-carts/new/new-shared-cart-form.tsx +21 -14
  192. package/dist/assets/storefront/src/app/[locale]/account/shared-carts/new/page.tsx +10 -10
  193. package/dist/assets/storefront/src/app/[locale]/account/shared-carts/page.tsx +54 -41
  194. package/dist/assets/storefront/src/app/[locale]/account/shopping-lists/[id]/page.tsx +22 -8
  195. package/dist/assets/storefront/src/app/[locale]/account/shopping-lists/[id]/shopping-list-detail-client.tsx +62 -49
  196. package/dist/assets/storefront/src/app/[locale]/account/shopping-lists/actions.ts +9 -4
  197. package/dist/assets/storefront/src/app/[locale]/account/shopping-lists/create-shopping-list-form.tsx +5 -11
  198. package/dist/assets/storefront/src/app/[locale]/account/shopping-lists/loading.tsx +1 -1
  199. package/dist/assets/storefront/src/app/[locale]/account/shopping-lists/page.tsx +32 -42
  200. package/dist/assets/storefront/src/app/[locale]/account/store-credits/actions.ts +8 -8
  201. package/dist/assets/storefront/src/app/[locale]/account/store-credits/claim-form.tsx +6 -10
  202. package/dist/assets/storefront/src/app/[locale]/account/store-credits/page.tsx +76 -55
  203. package/dist/assets/storefront/src/app/[locale]/account/store-credits/reveal-code.tsx +10 -6
  204. package/dist/assets/storefront/src/app/[locale]/account/verify-email/page.tsx +32 -39
  205. package/dist/assets/storefront/src/app/[locale]/cart/actions.ts +29 -23
  206. package/dist/assets/storefront/src/app/[locale]/cart/cart-items.tsx +111 -40
  207. package/dist/assets/storefront/src/app/[locale]/cart/cart-line-actions.tsx +9 -9
  208. package/dist/assets/storefront/src/app/[locale]/cart/cart-quantity-control.tsx +61 -48
  209. package/dist/assets/storefront/src/app/[locale]/cart/cart-remove-button.tsx +15 -9
  210. package/dist/assets/storefront/src/app/[locale]/cart/cart.tsx +38 -41
  211. package/dist/assets/storefront/src/app/[locale]/cart/code-input.tsx +8 -8
  212. package/dist/assets/storefront/src/app/[locale]/cart/order-summary.tsx +56 -35
  213. package/dist/assets/storefront/src/app/[locale]/cart/page.tsx +11 -11
  214. package/dist/assets/storefront/src/app/[locale]/cart/promotion-code.tsx +56 -47
  215. package/dist/assets/storefront/src/app/[locale]/cart/reapproval-confirm.tsx +22 -20
  216. package/dist/assets/storefront/src/app/[locale]/cart/request-quote-button.tsx +7 -16
  217. package/dist/assets/storefront/src/app/[locale]/checkout/actions.ts +39 -65
  218. package/dist/assets/storefront/src/app/[locale]/checkout/cancel-quote-checkout-button.tsx +5 -5
  219. package/dist/assets/storefront/src/app/[locale]/checkout/checkout-flow.tsx +202 -202
  220. package/dist/assets/storefront/src/app/[locale]/checkout/checkout-provider.tsx +142 -142
  221. package/dist/assets/storefront/src/app/[locale]/checkout/order-summary.tsx +158 -139
  222. package/dist/assets/storefront/src/app/[locale]/checkout/page.tsx +58 -47
  223. package/dist/assets/storefront/src/app/[locale]/checkout/steps/delivery-step.tsx +86 -88
  224. package/dist/assets/storefront/src/app/[locale]/checkout/steps/payment-step.tsx +90 -91
  225. package/dist/assets/storefront/src/app/[locale]/checkout/steps/review-step.tsx +166 -161
  226. package/dist/assets/storefront/src/app/[locale]/checkout/steps/shipping-address-step.tsx +573 -494
  227. package/dist/assets/storefront/src/app/[locale]/error.tsx +3 -5
  228. package/dist/assets/storefront/src/app/[locale]/forgot-password/actions.ts +10 -7
  229. package/dist/assets/storefront/src/app/[locale]/forgot-password/forgot-password-form.tsx +10 -25
  230. package/dist/assets/storefront/src/app/[locale]/forgot-password/page.tsx +5 -5
  231. package/dist/assets/storefront/src/app/[locale]/globals.css +48 -48
  232. package/dist/assets/storefront/src/app/[locale]/layout.tsx +56 -50
  233. package/dist/assets/storefront/src/app/[locale]/not-found.tsx +3 -5
  234. package/dist/assets/storefront/src/app/[locale]/order-confirmation/[code]/order-confirmation.tsx +71 -102
  235. package/dist/assets/storefront/src/app/[locale]/order-confirmation/[code]/page.tsx +7 -5
  236. package/dist/assets/storefront/src/app/[locale]/page.tsx +33 -35
  237. package/dist/assets/storefront/src/app/[locale]/register/actions.ts +7 -7
  238. package/dist/assets/storefront/src/app/[locale]/register/page.tsx +22 -16
  239. package/dist/assets/storefront/src/app/[locale]/register/registration-form.tsx +22 -34
  240. package/dist/assets/storefront/src/app/[locale]/register-company/actions.ts +15 -19
  241. package/dist/assets/storefront/src/app/[locale]/register-company/page.tsx +17 -15
  242. package/dist/assets/storefront/src/app/[locale]/register-company/registration-form.tsx +9 -15
  243. package/dist/assets/storefront/src/app/[locale]/reset-password/actions.ts +7 -8
  244. package/dist/assets/storefront/src/app/[locale]/reset-password/page.tsx +18 -12
  245. package/dist/assets/storefront/src/app/[locale]/reset-password/reset-password-form.tsx +8 -16
  246. package/dist/assets/storefront/src/app/[locale]/shopping-list/[code]/add-to-cart-button.tsx +10 -4
  247. package/dist/assets/storefront/src/app/[locale]/shopping-list/[code]/page.tsx +62 -30
  248. package/dist/assets/storefront/src/app/[locale]/sign-in/actions.ts +14 -16
  249. package/dist/assets/storefront/src/app/[locale]/sign-in/login-form.tsx +17 -30
  250. package/dist/assets/storefront/src/app/[locale]/sign-in/page.tsx +35 -30
  251. package/dist/assets/storefront/src/app/[locale]/verify/actions.ts +8 -8
  252. package/dist/assets/storefront/src/app/[locale]/verify/page.tsx +18 -14
  253. package/dist/assets/storefront/src/app/[locale]/verify/verify-content.tsx +25 -27
  254. package/dist/assets/storefront/src/app/[locale]/verify-pending/page.tsx +23 -23
  255. package/dist/assets/storefront/src/app/api/clear-company-context/route.ts +6 -3
  256. package/dist/assets/storefront/src/app/api/revalidate/route.ts +19 -28
  257. package/dist/assets/storefront/src/app/api/search-analytics/route.ts +1 -1
  258. package/dist/assets/storefront/src/components/commerce/account-nav-items.ts +43 -18
  259. package/dist/assets/storefront/src/components/commerce/account-sidebar.tsx +30 -22
  260. package/dist/assets/storefront/src/components/commerce/active-filters.tsx +1 -1
  261. package/dist/assets/storefront/src/components/commerce/add-to-shared-cart.tsx +49 -27
  262. package/dist/assets/storefront/src/components/commerce/approval-decision-form.tsx +9 -13
  263. package/dist/assets/storefront/src/components/commerce/approval-status-badge.tsx +23 -15
  264. package/dist/assets/storefront/src/components/commerce/business-unit-switcher.tsx +11 -11
  265. package/dist/assets/storefront/src/components/commerce/catalog-search-bar.tsx +2 -2
  266. package/dist/assets/storefront/src/components/commerce/category-product-section.tsx +28 -16
  267. package/dist/assets/storefront/src/components/commerce/category-sidebar.tsx +31 -18
  268. package/dist/assets/storefront/src/components/commerce/collection-hero-banner.tsx +2 -4
  269. package/dist/assets/storefront/src/components/commerce/company-state-badge.tsx +10 -16
  270. package/dist/assets/storefront/src/components/commerce/company-switcher.tsx +12 -12
  271. package/dist/assets/storefront/src/components/commerce/configurator-form.tsx +188 -79
  272. package/dist/assets/storefront/src/components/commerce/facet-filters.tsx +29 -49
  273. package/dist/assets/storefront/src/components/commerce/gift-card-pdp.tsx +4 -4
  274. package/dist/assets/storefront/src/components/commerce/gift-card-product-info.tsx +20 -30
  275. package/dist/assets/storefront/src/components/commerce/instant-search-dropdown.tsx +258 -227
  276. package/dist/assets/storefront/src/components/commerce/order-status-badge.tsx +27 -19
  277. package/dist/assets/storefront/src/components/commerce/packaging-unit-selector.tsx +27 -26
  278. package/dist/assets/storefront/src/components/commerce/permission-gate.tsx +4 -4
  279. package/dist/assets/storefront/src/components/commerce/price-range-filter.tsx +5 -5
  280. package/dist/assets/storefront/src/components/commerce/price-tiers.tsx +38 -21
  281. package/dist/assets/storefront/src/components/commerce/price.tsx +3 -3
  282. package/dist/assets/storefront/src/components/commerce/product-card-list.tsx +39 -16
  283. package/dist/assets/storefront/src/components/commerce/product-card.tsx +35 -18
  284. package/dist/assets/storefront/src/components/commerce/product-carousel.tsx +20 -12
  285. package/dist/assets/storefront/src/components/commerce/product-grid.tsx +14 -13
  286. package/dist/assets/storefront/src/components/commerce/product-image-carousel.tsx +10 -8
  287. package/dist/assets/storefront/src/components/commerce/product-info.tsx +118 -74
  288. package/dist/assets/storefront/src/components/commerce/product-list-expansion.tsx +102 -74
  289. package/dist/assets/storefront/src/components/commerce/product-list-view.tsx +1 -1
  290. package/dist/assets/storefront/src/components/commerce/product-sidebar.tsx +36 -11
  291. package/dist/assets/storefront/src/components/commerce/product-view-switcher.tsx +33 -21
  292. package/dist/assets/storefront/src/components/commerce/quote-action-buttons.tsx +80 -45
  293. package/dist/assets/storefront/src/components/commerce/quote-activity-timeline.tsx +126 -50
  294. package/dist/assets/storefront/src/components/commerce/quote-comment-form.tsx +9 -13
  295. package/dist/assets/storefront/src/components/commerce/quote-csv-export-button.tsx +6 -6
  296. package/dist/assets/storefront/src/components/commerce/quote-product-search.tsx +22 -18
  297. package/dist/assets/storefront/src/components/commerce/quote-request-form.tsx +28 -27
  298. package/dist/assets/storefront/src/components/commerce/quote-status-badge.tsx +26 -18
  299. package/dist/assets/storefront/src/components/commerce/quote-validity-indicator.tsx +7 -7
  300. package/dist/assets/storefront/src/components/commerce/quote-version-comparison.tsx +50 -30
  301. package/dist/assets/storefront/src/components/commerce/related-products.tsx +37 -28
  302. package/dist/assets/storefront/src/components/commerce/shared-cart-status-badge.tsx +12 -8
  303. package/dist/assets/storefront/src/components/commerce/shop-by-category.tsx +8 -7
  304. package/dist/assets/storefront/src/components/commerce/shopping-list-toggle.tsx +14 -20
  305. package/dist/assets/storefront/src/components/commerce/sort-dropdown.tsx +9 -16
  306. package/dist/assets/storefront/src/components/commerce/store-credit-summary.tsx +30 -32
  307. package/dist/assets/storefront/src/components/commerce/subcollection-tiles.tsx +11 -13
  308. package/dist/assets/storefront/src/components/layout/auth-page-shell.tsx +2 -2
  309. package/dist/assets/storefront/src/components/layout/draft-mode-indicator.tsx +2 -7
  310. package/dist/assets/storefront/src/components/layout/draft-mode-link.tsx +4 -2
  311. package/dist/assets/storefront/src/components/layout/footer.tsx +70 -28
  312. package/dist/assets/storefront/src/components/layout/navbar/actions.ts +9 -12
  313. package/dist/assets/storefront/src/components/layout/navbar/cart-icon.tsx +9 -9
  314. package/dist/assets/storefront/src/components/layout/navbar/channel-picker-wrapper.tsx +4 -9
  315. package/dist/assets/storefront/src/components/layout/navbar/channel-picker.tsx +13 -8
  316. package/dist/assets/storefront/src/components/layout/navbar/currency-picker-wrapper.tsx +4 -4
  317. package/dist/assets/storefront/src/components/layout/navbar/currency-picker.tsx +11 -6
  318. package/dist/assets/storefront/src/components/layout/navbar/language-picker.tsx +7 -7
  319. package/dist/assets/storefront/src/components/layout/navbar/login-button.tsx +24 -21
  320. package/dist/assets/storefront/src/components/layout/navbar/mobile-nav.tsx +8 -8
  321. package/dist/assets/storefront/src/components/layout/navbar/nav-menu-items.tsx +4 -6
  322. package/dist/assets/storefront/src/components/layout/navbar/navbar-cart.tsx +1 -1
  323. package/dist/assets/storefront/src/components/layout/navbar/navbar-collections.tsx +41 -42
  324. package/dist/assets/storefront/src/components/layout/navbar/navbar-link.tsx +7 -10
  325. package/dist/assets/storefront/src/components/layout/navbar/navbar-user.tsx +18 -23
  326. package/dist/assets/storefront/src/components/layout/navbar/theme-switcher.tsx +9 -9
  327. package/dist/assets/storefront/src/components/layout/navbar.tsx +36 -31
  328. package/dist/assets/storefront/src/components/layout/search-input.tsx +35 -32
  329. package/dist/assets/storefront/src/components/providers/awaiting-approval-banner.tsx +12 -10
  330. package/dist/assets/storefront/src/components/providers/cart-count-server.tsx +14 -12
  331. package/dist/assets/storefront/src/components/providers/company-context-guard.tsx +4 -4
  332. package/dist/assets/storefront/src/components/providers/company-permissions-server.tsx +2 -6
  333. package/dist/assets/storefront/src/components/providers/theme-provider.tsx +3 -3
  334. package/dist/assets/storefront/src/components/shared/breadcrumbs.tsx +4 -1
  335. package/dist/assets/storefront/src/components/shared/country-select.tsx +63 -67
  336. package/dist/assets/storefront/src/components/shared/pagination.tsx +15 -28
  337. package/dist/assets/storefront/src/components/shared/prefetch-link.tsx +1 -1
  338. package/dist/assets/storefront/src/components/shared/skeletons/search-input-skeleton.tsx +1 -3
  339. package/dist/assets/storefront/src/components/ui/accordion.tsx +46 -51
  340. package/dist/assets/storefront/src/components/ui/alert-dialog.tsx +94 -121
  341. package/dist/assets/storefront/src/components/ui/alert.tsx +48 -54
  342. package/dist/assets/storefront/src/components/ui/aspect-ratio.tsx +5 -7
  343. package/dist/assets/storefront/src/components/ui/avatar.tsx +29 -44
  344. package/dist/assets/storefront/src/components/ui/badge.tsx +28 -37
  345. package/dist/assets/storefront/src/components/ui/breadcrumb.tsx +82 -89
  346. package/dist/assets/storefront/src/components/ui/button.tsx +43 -49
  347. package/dist/assets/storefront/src/components/ui/calendar.tsx +157 -198
  348. package/dist/assets/storefront/src/components/ui/card.tsx +53 -76
  349. package/dist/assets/storefront/src/components/ui/carousel.tsx +194 -212
  350. package/dist/assets/storefront/src/components/ui/chart.tsx +274 -317
  351. package/dist/assets/storefront/src/components/ui/checkbox.tsx +24 -27
  352. package/dist/assets/storefront/src/components/ui/collapsible.tsx +9 -21
  353. package/dist/assets/storefront/src/components/ui/command.tsx +114 -159
  354. package/dist/assets/storefront/src/components/ui/context-menu.tsx +167 -199
  355. package/dist/assets/storefront/src/components/ui/dialog.tsx +97 -114
  356. package/dist/assets/storefront/src/components/ui/drawer.tsx +93 -107
  357. package/dist/assets/storefront/src/components/ui/dropdown-menu.tsx +171 -206
  358. package/dist/assets/storefront/src/components/ui/empty-state.tsx +5 -5
  359. package/dist/assets/storefront/src/components/ui/field.tsx +196 -208
  360. package/dist/assets/storefront/src/components/ui/form.tsx +115 -139
  361. package/dist/assets/storefront/src/components/ui/hover-card.tsx +27 -33
  362. package/dist/assets/storefront/src/components/ui/input-otp.tsx +50 -59
  363. package/dist/assets/storefront/src/components/ui/input.tsx +17 -17
  364. package/dist/assets/storefront/src/components/ui/kbd-shortcut.tsx +3 -1
  365. package/dist/assets/storefront/src/components/ui/label.tsx +16 -19
  366. package/dist/assets/storefront/src/components/ui/menubar.tsx +193 -223
  367. package/dist/assets/storefront/src/components/ui/navigation-menu.tsx +123 -130
  368. package/dist/assets/storefront/src/components/ui/pagination.tsx +87 -108
  369. package/dist/assets/storefront/src/components/ui/popover.tsx +29 -35
  370. package/dist/assets/storefront/src/components/ui/progress.tsx +19 -26
  371. package/dist/assets/storefront/src/components/ui/radio-group.tsx +32 -38
  372. package/dist/assets/storefront/src/components/ui/resizable.tsx +37 -42
  373. package/dist/assets/storefront/src/components/ui/scroll-area.tsx +41 -47
  374. package/dist/assets/storefront/src/components/ui/select.tsx +130 -152
  375. package/dist/assets/storefront/src/components/ui/separator.tsx +21 -21
  376. package/dist/assets/storefront/src/components/ui/sheet.tsx +90 -111
  377. package/dist/assets/storefront/src/components/ui/sidebar.tsx +611 -649
  378. package/dist/assets/storefront/src/components/ui/skeleton.tsx +10 -10
  379. package/dist/assets/storefront/src/components/ui/slider.tsx +50 -55
  380. package/dist/assets/storefront/src/components/ui/sonner.tsx +20 -20
  381. package/dist/assets/storefront/src/components/ui/switch.tsx +23 -26
  382. package/dist/assets/storefront/src/components/ui/table.tsx +65 -97
  383. package/dist/assets/storefront/src/components/ui/tabs.tsx +39 -55
  384. package/dist/assets/storefront/src/components/ui/textarea.tsx +14 -14
  385. package/dist/assets/storefront/src/components/ui/toggle-group.tsx +56 -62
  386. package/dist/assets/storefront/src/components/ui/toggle.tsx +37 -38
  387. package/dist/assets/storefront/src/components/ui/tooltip.tsx +38 -46
  388. package/dist/assets/storefront/src/config/capabilities.ts +41 -0
  389. package/dist/assets/storefront/src/config/scenario-meta.ts +2 -2
  390. package/dist/assets/storefront/src/config/scenario.ts +24 -16
  391. package/dist/assets/storefront/src/contexts/auth-context.tsx +5 -6
  392. package/dist/assets/storefront/src/graphql-env.d.ts +47 -41
  393. package/dist/assets/storefront/src/graphql.ts +5 -5
  394. package/dist/assets/storefront/src/hooks/use-mobile.ts +13 -13
  395. package/dist/assets/storefront/src/i18n/locale-utils.ts +3 -3
  396. package/dist/assets/storefront/src/i18n/navigation.ts +4 -4
  397. package/dist/assets/storefront/src/i18n/request.ts +4 -4
  398. package/dist/assets/storefront/src/i18n/routing.ts +5 -5
  399. package/dist/assets/storefront/src/i18n/server.ts +35 -7
  400. package/dist/assets/storefront/src/lib/actions/switch-channel.ts +9 -9
  401. package/dist/assets/storefront/src/lib/actions/switch-currency.ts +7 -7
  402. package/dist/assets/storefront/src/lib/auth.ts +1 -1
  403. package/dist/assets/storefront/src/lib/backend-health.ts +14 -6
  404. package/dist/assets/storefront/src/lib/cart-count-context.tsx +10 -4
  405. package/dist/assets/storefront/src/lib/cart-guard-utils.ts +2 -1
  406. package/dist/assets/storefront/src/lib/cart-guard.ts +7 -6
  407. package/dist/assets/storefront/src/lib/channel-server.ts +4 -4
  408. package/dist/assets/storefront/src/lib/company-context.ts +1 -1
  409. package/dist/assets/storefront/src/lib/company-permissions-context.tsx +1 -5
  410. package/dist/assets/storefront/src/lib/currency-server.ts +4 -4
  411. package/dist/assets/storefront/src/lib/format.ts +16 -7
  412. package/dist/assets/storefront/src/lib/metadata.ts +39 -44
  413. package/dist/assets/storefront/src/lib/quantity.ts +2 -4
  414. package/dist/assets/storefront/src/lib/search-bar-context.tsx +7 -4
  415. package/dist/assets/storefront/src/lib/use-recent-searches.ts +8 -6
  416. package/dist/assets/storefront/src/lib/utils.ts +3 -3
  417. package/dist/assets/storefront/src/lib/vendure/actions.ts +18 -16
  418. package/dist/assets/storefront/src/lib/vendure/api.ts +36 -23
  419. package/dist/assets/storefront/src/lib/vendure/approval-utils.ts +9 -8
  420. package/dist/assets/storefront/src/lib/vendure/cached.ts +20 -15
  421. package/dist/assets/storefront/src/lib/vendure/capability-documents.ts +246 -0
  422. package/dist/assets/storefront/src/lib/vendure/capability-schema.ts +358 -0
  423. package/dist/assets/storefront/src/lib/vendure/capability-ui.ts +15 -0
  424. package/dist/assets/storefront/src/lib/vendure/mutations.ts +835 -532
  425. package/dist/assets/storefront/src/lib/vendure/queries.ts +877 -524
  426. package/dist/assets/storefront/src/proxy.ts +11 -0
  427. package/dist/assets/storefront/src/scenarios/customer/hero.tsx +2 -2
  428. package/dist/assets/storefront/src/scenarios/customer/meta.ts +1 -1
  429. package/dist/assets/storefront/src/schema.graphql +337 -243
  430. package/dist/assets/templates/README.md.hbs +25 -1
  431. package/dist/assets/templates/docker-compose.yml.hbs +4 -0
  432. package/dist/assets/templates/env.hbs +34 -9
  433. package/dist/assets/templates/environment.d.ts.hbs +1 -0
  434. package/dist/assets/templates/gitignore.hbs +7 -4
  435. package/dist/assets/templates/migrate.ts.hbs +55 -0
  436. package/dist/assets/templates/npmrc.hbs +7 -2
  437. package/dist/assets/templates/platform-edition.ts.hbs +21 -0
  438. package/dist/assets/templates/server-package.json.hbs +15 -8
  439. package/dist/assets/templates/vendure-config.ts.hbs +18 -0
  440. package/dist/bin/run.js +1 -1
  441. package/dist/cli.d.ts +1 -1
  442. package/dist/cli.js +1 -1
  443. package/dist/console-onboarding.d.ts +44 -0
  444. package/dist/console-onboarding.js +1 -0
  445. package/dist/hub-projects.d.ts +48 -0
  446. package/dist/hub-projects.js +1 -0
  447. package/dist/index.d.ts +5 -5
  448. package/dist/index.js +1 -1
  449. package/dist/plugin-registry.d.ts +61 -2
  450. package/dist/plugin-registry.js +1 -1
  451. package/dist/registry.d.ts +16 -13
  452. package/dist/registry.js +1 -1
  453. package/dist/scaffold-shared.js +1 -1
  454. package/dist/scaffold-storefront-only.js +1 -1
  455. package/dist/scaffolder.d.ts +11 -0
  456. package/dist/scaffolder.js +1 -1
  457. package/dist/storefront-copier.d.ts +7 -2
  458. package/dist/storefront-copier.js +1 -1
  459. package/dist/template-renderer.d.ts +26 -5
  460. package/dist/template-renderer.js +1 -1
  461. package/dist/types.d.ts +54 -23
  462. package/package.json +14 -2
  463. package/dist/assets/storefront/src/middleware.ts +0 -11
@@ -1,86 +1,28 @@
1
- import {client} from '@/lib/vendure/api';
2
- import {graphql} from '@/graphql';
3
- import {getLatestApprovalForOrder} from '@/lib/vendure/approval-utils';
4
- import {Button} from '@/components/ui/button';
5
- import {Card, CardContent, CardHeader, CardTitle} from '@/components/ui/card';
6
- import {CheckCircle2, Clock, XCircle, MessageSquare} from 'lucide-react';
7
- import {Link} from '@/i18n/navigation';
1
+ import { Price } from '@/components/commerce/price';
2
+ import { Button } from '@/components/ui/button';
3
+ import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
4
+ import { Separator } from '@/components/ui/separator';
5
+ import { Link } from '@/i18n/navigation';
6
+ import { maskCode } from '@/lib/format';
7
+ import { client } from '@/lib/vendure/api';
8
+ import { getLatestApprovalForOrder } from '@/lib/vendure/approval-utils';
9
+ import { GetOrderByCodeForConfirmationQuery } from '@/lib/vendure/queries';
10
+ import { CheckCircle2, Clock, MessageSquare, XCircle } from 'lucide-react';
11
+ import { getTranslations } from 'next-intl/server';
8
12
  import Image from 'next/image';
9
- import {Separator} from '@/components/ui/separator';
10
- import {Price} from '@/components/commerce/price';
11
- import {maskCode} from '@/lib/format';
12
- import {notFound} from "next/navigation";
13
- import {getTranslations} from 'next-intl/server';
13
+ import { notFound } from 'next/navigation';
14
14
 
15
- const GetOrderByCodeQuery = graphql(`
16
- query GetOrderByCode($code: String!) {
17
- orderByCode(code: $code) {
18
- id
19
- code
20
- state
21
- subTotal
22
- subTotalWithTax
23
- shipping
24
- shippingWithTax
25
- total
26
- totalWithTax
27
- currencyCode
28
- storeCreditsApplied {
29
- code
30
- balance
31
- amountDeducted
32
- }
33
- totalWithTaxAfterStoreCredit
34
- payments {
35
- id
36
- method
37
- amount
38
- state
39
- metadata
40
- }
41
- lines {
42
- id
43
- productVariant {
44
- id
45
- name
46
- product {
47
- id
48
- name
49
- slug
50
- featuredAsset {
51
- id
52
- preview
53
- }
54
- }
55
- }
56
- quantity
57
- linePrice
58
- linePriceWithTax
59
- }
60
- shippingAddress {
61
- fullName
62
- streetLine1
63
- streetLine2
64
- city
65
- province
66
- postalCode
67
- country
68
- }
69
- }
70
- }
71
- `);
72
-
73
- export async function OrderConfirmation({params}: {params: Promise<{locale: string; code: string}>}) {
74
- const {code} = await params;
15
+ export async function OrderConfirmation({ params }: { params: Promise<{ locale: string; code: string }> }) {
16
+ const { code } = await params;
75
17
  const t = await getTranslations('OrderConfirmation');
76
- const [result, queryError] = await client.query(GetOrderByCodeQuery, {code});
18
+ const [result, queryError] = await client.query(GetOrderByCodeForConfirmationQuery, { code });
77
19
  if (queryError) {
78
20
  notFound();
79
21
  }
80
22
  const order = result.data.orderByCode;
81
23
 
82
24
  if (!order) {
83
- notFound();
25
+ notFound();
84
26
  }
85
27
 
86
28
  const taxTotal = order.totalWithTax - order.total;
@@ -99,10 +41,11 @@ export async function OrderConfirmation({params}: {params: Promise<{locale: stri
99
41
  <div className="text-center mb-8">
100
42
  {isRejected ? (
101
43
  <>
102
- <XCircle className="h-16 w-16 text-red-500 mx-auto mb-4"/>
44
+ <XCircle className="h-16 w-16 text-red-500 mx-auto mb-4" />
103
45
  <h1 className="text-3xl font-bold mb-2">Order Rejected</h1>
104
46
  <p className="text-muted-foreground">
105
- Your order <span className="font-semibold">{order.code}</span> was not approved.
47
+ Your order <span className="font-semibold">{order.code}</span> was not
48
+ approved.
106
49
  </p>
107
50
  <div className="mt-4 flex gap-3 justify-center">
108
51
  <Button variant="outline" asChild>
@@ -115,7 +58,7 @@ export async function OrderConfirmation({params}: {params: Promise<{locale: stri
115
58
  </>
116
59
  ) : isChangesRequested ? (
117
60
  <>
118
- <MessageSquare className="h-16 w-16 text-orange-500 mx-auto mb-4"/>
61
+ <MessageSquare className="h-16 w-16 text-orange-500 mx-auto mb-4" />
119
62
  <h1 className="text-3xl font-bold mb-2">Changes Requested</h1>
120
63
  <p className="text-muted-foreground">
121
64
  A reviewer has requested changes to your order{' '}
@@ -134,11 +77,12 @@ export async function OrderConfirmation({params}: {params: Promise<{locale: stri
134
77
  </>
135
78
  ) : isAwaitingApproval ? (
136
79
  <>
137
- <Clock className="h-16 w-16 text-amber-500 mx-auto mb-4"/>
80
+ <Clock className="h-16 w-16 text-amber-500 mx-auto mb-4" />
138
81
  <h1 className="text-3xl font-bold mb-2">Order Submitted for Approval</h1>
139
82
  <p className="text-muted-foreground">
140
83
  Your order <span className="font-semibold">{order.code}</span> has been
141
- submitted and is awaiting approval. You&apos;ll be notified once a decision is made.
84
+ submitted and is awaiting approval. You&apos;ll be notified once a decision is
85
+ made.
142
86
  </p>
143
87
  <div className="mt-4">
144
88
  <Button variant="outline" asChild>
@@ -148,11 +92,10 @@ export async function OrderConfirmation({params}: {params: Promise<{locale: stri
148
92
  </>
149
93
  ) : (
150
94
  <>
151
- <CheckCircle2 className="h-16 w-16 text-green-500 mx-auto mb-4"/>
95
+ <CheckCircle2 className="h-16 w-16 text-green-500 mx-auto mb-4" />
152
96
  <h1 className="text-3xl font-bold mb-2">{t('orderConfirmed')}</h1>
153
97
  <p className="text-muted-foreground">
154
- {t('thankYou')}{' '}
155
- <span className="font-semibold">{order.code}</span>
98
+ {t('thankYou')} <span className="font-semibold">{order.code}</span>
156
99
  </p>
157
100
  </>
158
101
  )}
@@ -190,44 +133,58 @@ export async function OrderConfirmation({params}: {params: Promise<{locale: stri
190
133
  </div>
191
134
  <div className="text-right w-24">
192
135
  <p className="font-semibold">
193
- <Price value={line.linePrice} currencyCode={order.currencyCode}/>
136
+ <Price value={line.linePrice} currencyCode={order.currencyCode} />
194
137
  </p>
195
138
  </div>
196
139
  </div>
197
140
  ))}
198
141
 
199
- <Separator/>
142
+ <Separator />
200
143
 
201
144
  <div className="space-y-2">
202
145
  <div className="flex justify-between text-sm">
203
- <span className="text-muted-foreground">Subtotal <span className="text-[10px]">(excl. tax)</span></span>
146
+ <span className="text-muted-foreground">
147
+ Subtotal <span className="text-[10px]">(excl. tax)</span>
148
+ </span>
204
149
  <span>
205
- <Price value={order.subTotal} currencyCode={order.currencyCode}/>
150
+ <Price value={order.subTotal} currencyCode={order.currencyCode} />
206
151
  </span>
207
152
  </div>
208
153
  <div className="flex justify-between text-sm">
209
154
  <span className="text-muted-foreground">Shipping</span>
210
155
  <span>
211
- {order.shipping > 0
212
- ? <Price value={order.shipping} currencyCode={order.currencyCode}/>
213
- : 'FREE'}
156
+ {order.shipping > 0 ? (
157
+ <Price value={order.shipping} currencyCode={order.currencyCode} />
158
+ ) : (
159
+ 'FREE'
160
+ )}
214
161
  </span>
215
162
  </div>
216
163
  <div className="flex justify-between text-sm">
217
164
  <span className="text-muted-foreground">Tax</span>
218
165
  <span>
219
- <Price value={taxTotal} currencyCode={order.currencyCode}/>
166
+ <Price value={taxTotal} currencyCode={order.currencyCode} />
220
167
  </span>
221
168
  </div>
222
- {hasCreditsApplied && order.storeCreditsApplied.map((credit) => (
223
- <div key={credit.code} className="flex justify-between text-sm text-green-600">
224
- <span>Store Credit ({maskCode(credit.code)})</span>
225
- <span>-<Price value={credit.amountDeducted} currencyCode={order.currencyCode}/></span>
226
- </div>
227
- ))}
169
+ {hasCreditsApplied &&
170
+ order.storeCreditsApplied.map((credit) => (
171
+ <div
172
+ key={credit.code}
173
+ className="flex justify-between text-sm text-green-600"
174
+ >
175
+ <span>Store Credit ({maskCode(credit.code)})</span>
176
+ <span>
177
+ -
178
+ <Price
179
+ value={credit.amountDeducted}
180
+ currencyCode={order.currencyCode}
181
+ />
182
+ </span>
183
+ </div>
184
+ ))}
228
185
  </div>
229
186
 
230
- <Separator/>
187
+ <Separator />
231
188
 
232
189
  <div>
233
190
  <div className="flex justify-between font-bold text-lg">
@@ -236,12 +193,23 @@ export async function OrderConfirmation({params}: {params: Promise<{locale: stri
236
193
  {hasCreditsApplied ? (
237
194
  <span className="flex items-center gap-2">
238
195
  <span className="text-sm font-normal text-muted-foreground line-through">
239
- <Price value={order.totalWithTax} currencyCode={order.currencyCode}/>
196
+ <Price
197
+ value={order.totalWithTax}
198
+ currencyCode={order.currencyCode}
199
+ />
240
200
  </span>
241
- <Price value={order.totalWithTaxAfterStoreCredit} currencyCode={order.currencyCode} taxLabel="incl" />
201
+ <Price
202
+ value={order.totalWithTaxAfterStoreCredit}
203
+ currencyCode={order.currencyCode}
204
+ taxLabel="incl"
205
+ />
242
206
  </span>
243
207
  ) : (
244
- <Price value={order.totalWithTax} currencyCode={order.currencyCode} taxLabel="incl" />
208
+ <Price
209
+ value={order.totalWithTax}
210
+ currencyCode={order.currencyCode}
211
+ taxLabel="incl"
212
+ />
245
213
  )}
246
214
  </span>
247
215
  </div>
@@ -258,7 +226,7 @@ export async function OrderConfirmation({params}: {params: Promise<{locale: stri
258
226
  {order.payments.map((payment) => (
259
227
  <div key={payment.id} className="flex justify-between text-sm">
260
228
  <span className="text-muted-foreground capitalize">{payment.method}</span>
261
- <Price value={payment.amount} currencyCode={order.currencyCode}/>
229
+ <Price value={payment.amount} currencyCode={order.currencyCode} />
262
230
  </div>
263
231
  ))}
264
232
  </CardContent>
@@ -274,7 +242,8 @@ export async function OrderConfirmation({params}: {params: Promise<{locale: stri
274
242
  <p className="font-medium">{order.shippingAddress.fullName}</p>
275
243
  <p className="text-sm text-muted-foreground mt-1">
276
244
  {order.shippingAddress.streetLine1}
277
- {order.shippingAddress.streetLine2 && `, ${order.shippingAddress.streetLine2}`}
245
+ {order.shippingAddress.streetLine2 &&
246
+ `, ${order.shippingAddress.streetLine2}`}
278
247
  </p>
279
248
  <p className="text-sm text-muted-foreground">
280
249
  {order.shippingAddress.city}, {order.shippingAddress.province}{' '}
@@ -1,7 +1,7 @@
1
- import type {Metadata} from 'next';
2
- import {Suspense} from 'react';
3
- import {OrderConfirmation} from './order-confirmation';
4
- import {noIndexRobots} from '@/lib/metadata';
1
+ import { noIndexRobots } from '@/lib/metadata';
2
+ import type { Metadata } from 'next';
3
+ import { Suspense } from 'react';
4
+ import { OrderConfirmation } from './order-confirmation';
5
5
 
6
6
  export const metadata: Metadata = {
7
7
  title: 'Order Confirmation',
@@ -9,7 +9,9 @@ export const metadata: Metadata = {
9
9
  robots: noIndexRobots(),
10
10
  };
11
11
 
12
- export default async function OrderConfirmationPage(props: {params: Promise<{locale: string; code: string}>}) {
12
+ export default async function OrderConfirmationPage(props: {
13
+ params: Promise<{ locale: string; code: string }>;
14
+ }) {
13
15
  return (
14
16
  <Suspense fallback={<div className="container mx-auto px-4 py-16 text-center">Loading...</div>}>
15
17
  <OrderConfirmation {...props} />
@@ -1,17 +1,17 @@
1
- import type { Metadata } from 'next';
2
- import { Suspense } from 'react';
3
- import { SITE_NAME, SITE_URL, buildCanonicalUrl } from '@/lib/metadata';
4
- import { getTopCollections } from '@/lib/vendure/cached';
5
- import { getActiveChannelToken } from '@/lib/channel-server';
6
- import { setRequestLocale } from 'next-intl/server';
7
1
  import { CatalogSearchBar } from '@/components/commerce/catalog-search-bar';
8
- import { CategorySidebar } from '@/components/commerce/category-sidebar';
9
2
  import { CategoryProductSection } from '@/components/commerce/category-product-section';
3
+ import { CategorySidebar } from '@/components/commerce/category-sidebar';
10
4
  import { ShopByCategory } from '@/components/commerce/shop-by-category';
11
5
  import { CatalogSidebarSkeleton } from '@/components/shared/catalog-sidebar-skeleton';
12
6
  import { getBranding } from '@/config/branding';
7
+ import type { HomeSlotOverrides, ServerComponent } from '@/config/scenario';
13
8
  import { getScenarioConfig, isFullPageOverride } from '@/config/scenario';
14
- import type { ServerComponent, HomeSlotOverrides } from '@/config/scenario';
9
+ import { getActiveChannelToken } from '@/lib/channel-server';
10
+ import { SITE_NAME, SITE_URL, buildCanonicalUrl } from '@/lib/metadata';
11
+ import { getTopCollections } from '@/lib/vendure/cached';
12
+ import type { Metadata } from 'next';
13
+ import { setRequestLocale } from 'next-intl/server';
14
+ import { Suspense } from 'react';
15
15
 
16
16
  const _branding = getBranding();
17
17
 
@@ -55,8 +55,8 @@ function CategorySectionSkeleton() {
55
55
  );
56
56
  }
57
57
 
58
- export default async function Home({params}: {params: Promise<{locale: string}>}) {
59
- const {locale} = await params;
58
+ export default async function Home({ params }: { params: Promise<{ locale: string }> }) {
59
+ const { locale } = await params;
60
60
  setRequestLocale(locale);
61
61
  const channelToken = await getActiveChannelToken();
62
62
  const collections = await getTopCollections(locale, channelToken);
@@ -76,9 +76,7 @@ export default async function Home({params}: {params: Promise<{locale: string}>}
76
76
  // collection carries a featuredAsset — avoids mixed rows of real imagery
77
77
  // and fallback icons during partial populate (see EE-73 plan concern #11).
78
78
  const showBaseShopByCategory =
79
- !ShopByCategoryComponent &&
80
- collections.length > 0 &&
81
- collections.every((c) => !!c.featuredAsset);
79
+ !ShopByCategoryComponent && collections.length > 0 && collections.every((c) => !!c.featuredAsset);
82
80
 
83
81
  return (
84
82
  // No wrapper padding-top here — the hero is full-bleed and absorbs
@@ -95,31 +93,31 @@ export default async function Home({params}: {params: Promise<{locale: string}>}
95
93
  </section>
96
94
  ) : null}
97
95
  <div className="container mx-auto px-4 pt-8">
98
- <div className="grid grid-cols-1 lg:grid-cols-4 gap-8 pb-8">
99
- <aside className="lg:col-span-1">
100
- <Suspense fallback={<CatalogSidebarSkeleton />}>
101
- <CategorySidebar collections={collections} />
102
- </Suspense>
103
- </aside>
104
- <div className="lg:col-span-3">
105
- <Suspense>
106
- <CatalogSearchBar />
107
- </Suspense>
108
- <div className="mt-6 space-y-12">
109
- {collections.map((collection) => (
110
- <Suspense key={collection.id} fallback={<CategorySectionSkeleton />}>
111
- <CategoryProductSection
112
- name={collection.name}
113
- slug={collection.slug}
114
- locale={locale}
115
- channelToken={channelToken}
116
- />
117
- </Suspense>
118
- ))}
96
+ <div className="grid grid-cols-1 lg:grid-cols-4 gap-8 pb-8">
97
+ <aside className="lg:col-span-1">
98
+ <Suspense fallback={<CatalogSidebarSkeleton />}>
99
+ <CategorySidebar collections={collections} />
100
+ </Suspense>
101
+ </aside>
102
+ <div className="lg:col-span-3">
103
+ <Suspense>
104
+ <CatalogSearchBar />
105
+ </Suspense>
106
+ <div className="mt-6 space-y-12">
107
+ {collections.map((collection) => (
108
+ <Suspense key={collection.id} fallback={<CategorySectionSkeleton />}>
109
+ <CategoryProductSection
110
+ name={collection.name}
111
+ slug={collection.slug}
112
+ locale={locale}
113
+ channelToken={channelToken}
114
+ />
115
+ </Suspense>
116
+ ))}
117
+ </div>
119
118
  </div>
120
119
  </div>
121
120
  </div>
122
- </div>
123
121
  </div>
124
122
  );
125
123
  }
@@ -1,9 +1,9 @@
1
1
  'use server';
2
2
 
3
- import {client} from '@/lib/vendure/api';
4
- import {RegisterCustomerAccountMutation} from '@/lib/vendure/mutations';
5
- import {cookies} from 'next/headers';
6
- import {redirect} from '@/i18n/navigation';
3
+ import { redirect } from '@/i18n/navigation';
4
+ import { client } from '@/lib/vendure/api';
5
+ import { RegisterCustomerAccountMutation } from '@/lib/vendure/mutations';
6
+ import { cookies } from 'next/headers';
7
7
 
8
8
  export async function registerAction(prevState: { error?: string } | undefined, formData: FormData) {
9
9
  const emailAddress = formData.get('emailAddress') as string;
@@ -14,7 +14,7 @@ export async function registerAction(prevState: { error?: string } | undefined,
14
14
  const redirectTo = formData.get('redirectTo') as string | null;
15
15
 
16
16
  if (!emailAddress || !password) {
17
- return {error: 'Email address and password are required'};
17
+ return { error: 'Email address and password are required' };
18
18
  }
19
19
 
20
20
  const [result, error] = await client.mutate(RegisterCustomerAccountMutation, {
@@ -24,14 +24,14 @@ export async function registerAction(prevState: { error?: string } | undefined,
24
24
  lastName: lastName || undefined,
25
25
  phoneNumber: phoneNumber || undefined,
26
26
  password,
27
- }
27
+ },
28
28
  });
29
29
  if (error) throw error;
30
30
 
31
31
  const registerResult = result.data.registerCustomerAccount;
32
32
 
33
33
  if (registerResult.__typename !== 'Success') {
34
- return {error: registerResult.message};
34
+ return { error: registerResult.message };
35
35
  }
36
36
 
37
37
  // Two mechanisms preserve redirectTo through the email verification round-trip:
@@ -1,16 +1,16 @@
1
- import type {Metadata} from 'next';
2
- import {Suspense} from 'react';
3
- import {getTranslations} from 'next-intl/server';
4
- import {locale as rootLocale} from 'next/root-params';
5
- import {type Locale} from '@/i18n/routing';
6
- import { RegistrationForm } from "./registration-form";
7
- import { Card, CardContent, CardFooter } from "@/components/ui/card";
8
- import { Skeleton } from "@/components/ui/skeleton";
9
- import { AuthPageShell } from "@/components/layout/auth-page-shell";
1
+ import { AuthPageShell } from '@/components/layout/auth-page-shell';
2
+ import { Card, CardContent, CardFooter } from '@/components/ui/card';
3
+ import { Skeleton } from '@/components/ui/skeleton';
4
+ import { type Locale } from '@/i18n/routing';
5
+ import type { Metadata } from 'next';
6
+ import { getTranslations } from 'next-intl/server';
7
+ import { locale as rootLocale } from 'next/root-params';
8
+ import { Suspense } from 'react';
9
+ import { RegistrationForm } from './registration-form';
10
10
 
11
11
  export async function generateMetadata(): Promise<Metadata> {
12
12
  const locale = (await rootLocale()) as Locale;
13
- const t = await getTranslations({locale, namespace: 'Auth'});
13
+ const t = await getTranslations({ locale, namespace: 'Auth' });
14
14
  return {
15
15
  title: t('createAccount'),
16
16
  description: t('joinUs'),
@@ -56,23 +56,29 @@ function RegistrationFormSkeleton() {
56
56
  );
57
57
  }
58
58
 
59
- async function RegisterContent({searchParams}: {searchParams: Promise<Record<string, string | string[] | undefined>>}) {
59
+ async function RegisterContent({
60
+ searchParams,
61
+ }: {
62
+ searchParams: Promise<Record<string, string | string[] | undefined>>;
63
+ }) {
60
64
  const resolvedParams = await searchParams;
61
65
  const redirectTo = resolvedParams?.redirectTo as string | undefined;
62
66
 
63
67
  return <RegistrationForm redirectTo={redirectTo} />;
64
68
  }
65
69
 
66
- export default async function RegisterPage({searchParams}: {searchParams: Promise<Record<string, string | string[] | undefined>>}) {
70
+ export default async function RegisterPage({
71
+ searchParams,
72
+ }: {
73
+ searchParams: Promise<Record<string, string | string[] | undefined>>;
74
+ }) {
67
75
  const locale = (await rootLocale()) as Locale;
68
- const t = await getTranslations({locale, namespace: 'Auth'});
76
+ const t = await getTranslations({ locale, namespace: 'Auth' });
69
77
  return (
70
78
  <AuthPageShell>
71
79
  <div className="space-y-2 text-center">
72
80
  <h1 className="text-3xl font-bold">{t('createAccount')}</h1>
73
- <p className="text-muted-foreground">
74
- {t('signUpMessage')}
75
- </p>
81
+ <p className="text-muted-foreground">{t('signUpMessage')}</p>
76
82
  </div>
77
83
  <Suspense fallback={<RegistrationFormSkeleton />}>
78
84
  <RegisterContent searchParams={searchParams} />
@@ -1,37 +1,32 @@
1
1
  'use client';
2
2
 
3
+ import { Button } from '@/components/ui/button';
4
+ import { Card, CardContent, CardFooter } from '@/components/ui/card';
5
+ import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form';
6
+ import { Input } from '@/components/ui/input';
7
+ import { Link } from '@/i18n/navigation';
8
+ import { zodResolver } from '@hookform/resolvers/zod';
9
+ import { useTranslations } from 'next-intl';
3
10
  import { useState, useTransition } from 'react';
4
11
  import { useForm } from 'react-hook-form';
5
- import { zodResolver } from '@hookform/resolvers/zod';
6
12
  import * as z from 'zod';
7
- import { useTranslations } from 'next-intl';
8
13
  import { registerAction } from './actions';
9
- import { Button } from '@/components/ui/button';
10
- import { Input } from '@/components/ui/input';
11
- import { Card, CardContent, CardFooter } from '@/components/ui/card';
12
- import {
13
- Form,
14
- FormControl,
15
- FormField,
16
- FormItem,
17
- FormLabel,
18
- FormMessage,
19
- } from '@/components/ui/form';
20
- import {Link} from '@/i18n/navigation';
21
14
 
22
15
  function useRegistrationSchema() {
23
16
  const t = useTranslations('Auth');
24
- return z.object({
25
- emailAddress: z.string().email('Please enter a valid email address'),
26
- firstName: z.string().optional(),
27
- lastName: z.string().optional(),
28
- phoneNumber: z.string().optional(),
29
- password: z.string().min(8, t('passwordMinLength')),
30
- confirmPassword: z.string(),
31
- }).refine((data) => data.password === data.confirmPassword, {
32
- message: t('passwordsMismatch'),
33
- path: ["confirmPassword"],
34
- });
17
+ return z
18
+ .object({
19
+ emailAddress: z.string().email('Please enter a valid email address'),
20
+ firstName: z.string().optional(),
21
+ lastName: z.string().optional(),
22
+ phoneNumber: z.string().optional(),
23
+ password: z.string().min(8, t('passwordMinLength')),
24
+ confirmPassword: z.string(),
25
+ })
26
+ .refine((data) => data.password === data.confirmPassword, {
27
+ message: t('passwordsMismatch'),
28
+ path: ['confirmPassword'],
29
+ });
35
30
  }
36
31
 
37
32
  type RegistrationFormData = {
@@ -86,9 +81,7 @@ export function RegistrationForm({ redirectTo }: RegistrationFormProps) {
86
81
  });
87
82
  };
88
83
 
89
- const signInHref = redirectTo
90
- ? `/sign-in?redirectTo=${encodeURIComponent(redirectTo)}`
91
- : '/sign-in';
84
+ const signInHref = redirectTo ? `/sign-in?redirectTo=${encodeURIComponent(redirectTo)}` : '/sign-in';
92
85
 
93
86
  return (
94
87
  <Card>
@@ -211,18 +204,13 @@ export function RegistrationForm({ redirectTo }: RegistrationFormProps) {
211
204
  )}
212
205
  />
213
206
 
214
- {serverError && (
215
- <div className="text-sm text-destructive">
216
- {serverError}
217
- </div>
218
- )}
207
+ {serverError && <div className="text-sm text-destructive">{serverError}</div>}
219
208
 
220
209
  <Button type="submit" className="w-full" disabled={isPending}>
221
210
  {isPending ? t('creatingAccount') : t('createAccount')}
222
211
  </Button>
223
212
  </CardContent>
224
213
  <CardFooter className="flex flex-col space-y-4 mt-4">
225
-
226
214
  <div className="text-sm text-center text-muted-foreground">
227
215
  {t('alreadyHaveAccount')}{' '}
228
216
  <Link href={signInHref} className="hover:text-primary underline">
@@ -1,35 +1,31 @@
1
1
  'use server';
2
2
 
3
- import {readFragment} from '@/graphql';
4
- import {client} from '@/lib/vendure/api';
5
- import {RegisterCompanyMutation} from '@/lib/vendure/mutations';
6
- import {CompanyFragment} from '@/lib/vendure/fragments';
7
- import {setCompanyId} from '@/lib/company-context';
8
- import {redirect} from '@/i18n/navigation';
9
- import {revalidatePath} from 'next/cache';
10
-
11
- export async function registerCompanyAction(
12
- prevState: { error?: string } | undefined,
13
- formData: FormData,
14
- ) {
3
+ import { readFragment } from '@/graphql';
4
+ import { redirect } from '@/i18n/navigation';
5
+ import { setCompanyId } from '@/lib/company-context';
6
+ import { client } from '@/lib/vendure/api';
7
+ import { CompanyFragment } from '@/lib/vendure/fragments';
8
+ import { RegisterCompanyMutation } from '@/lib/vendure/mutations';
9
+ import { revalidatePath } from 'next/cache';
10
+
11
+ export async function registerCompanyAction(prevState: { error?: string } | undefined, formData: FormData) {
15
12
  const companyName = formData.get('companyName') as string;
16
13
 
17
14
  if (!companyName?.trim()) {
18
- return {error: 'Company name is required'};
15
+ return { error: 'Company name is required' };
19
16
  }
20
17
 
21
- const [result, error] = await client.mutate(
22
- RegisterCompanyMutation,
23
- {input: {companyName: companyName.trim()}},
24
- );
18
+ const [result, error] = await client.mutate(RegisterCompanyMutation, {
19
+ input: { companyName: companyName.trim() },
20
+ });
25
21
 
26
22
  if (error) {
27
- return {error: 'An unexpected error occurred. Please try again.'};
23
+ return { error: 'An unexpected error occurred. Please try again.' };
28
24
  }
29
25
 
30
26
  const companyAccount = result.data.registerCompany;
31
27
  if (!companyAccount?.company) {
32
- return {error: 'Failed to register company'};
28
+ return { error: 'Failed to register company' };
33
29
  }
34
30
 
35
31
  const company = readFragment(CompanyFragment, companyAccount.company);