@akinon/projectzero 2.0.0-beta.9 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. package/CHANGELOG.md +191 -17
  2. package/app-template/.env.example +3 -0
  3. package/app-template/.github/instructions/account.instructions.md +749 -0
  4. package/app-template/.github/instructions/checkout.instructions.md +678 -0
  5. package/app-template/.github/instructions/default.instructions.md +279 -0
  6. package/app-template/.github/instructions/edge-cases.instructions.md +73 -0
  7. package/app-template/.github/instructions/routing.instructions.md +603 -0
  8. package/app-template/.github/instructions/settings.instructions.md +338 -0
  9. package/app-template/.gitignore +3 -0
  10. package/app-template/AGENTS.md +7 -0
  11. package/app-template/CHANGELOG.md +2065 -232
  12. package/app-template/Procfile +1 -1
  13. package/app-template/akinon.json +1 -4
  14. package/app-template/build.sh +10 -0
  15. package/app-template/docs/advanced-usage.md +111 -0
  16. package/app-template/docs/plugins.md +60 -25
  17. package/app-template/docs/sentry-usage.md +35 -0
  18. package/app-template/jest.config.ts +2 -2
  19. package/app-template/next-env.d.ts +1 -0
  20. package/app-template/{next.config.ts → next.config.mjs} +6 -7
  21. package/app-template/package.json +58 -50
  22. package/app-template/postcss.config.mjs +1 -4
  23. package/app-template/public/amex.svg +12 -0
  24. package/app-template/public/apple-pay.svg +16 -0
  25. package/app-template/public/assets/images/product-placeholder-1.jpg +0 -0
  26. package/app-template/public/assets/images/product-placeholder-2.jpg +0 -0
  27. package/app-template/public/assets/images/product-placeholder-3.jpg +0 -0
  28. package/app-template/public/assets/images/product-placeholder-4.jpg +0 -0
  29. package/app-template/public/google-pay.svg +16 -0
  30. package/app-template/public/locales/en/account.json +9 -4
  31. package/app-template/public/locales/en/auth.json +6 -7
  32. package/app-template/public/locales/en/basket.json +6 -6
  33. package/app-template/public/locales/en/blog.json +7 -0
  34. package/app-template/public/locales/en/category.json +3 -1
  35. package/app-template/public/locales/en/checkout.json +17 -4
  36. package/app-template/public/locales/en/common.json +61 -3
  37. package/app-template/public/locales/en/forgot_password.json +6 -7
  38. package/app-template/public/locales/en/product.json +84 -4
  39. package/app-template/public/locales/tr/account.json +9 -4
  40. package/app-template/public/locales/tr/auth.json +16 -17
  41. package/app-template/public/locales/tr/basket.json +4 -4
  42. package/app-template/public/locales/tr/blog.json +7 -0
  43. package/app-template/public/locales/tr/category.json +3 -1
  44. package/app-template/public/locales/tr/checkout.json +48 -36
  45. package/app-template/public/locales/tr/common.json +60 -2
  46. package/app-template/public/locales/tr/forgot_password.json +12 -13
  47. package/app-template/public/locales/tr/product.json +82 -0
  48. package/app-template/public/logo.svg +3 -27
  49. package/app-template/public/mastercard.svg +14 -0
  50. package/app-template/public/masterpass-javascript-sdk-web.min.js +1 -0
  51. package/app-template/public/promotion-banner.jpg +0 -0
  52. package/app-template/public/shop-pay.svg +12 -0
  53. package/app-template/public/visa.svg +12 -0
  54. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/[...prettyurl]/page.tsx +11 -11
  55. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/layout.tsx +4 -3
  56. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/orders/[id]/cancellation/page.tsx +13 -10
  57. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/orders/[id]/page.tsx +73 -51
  58. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/page.tsx +1 -1
  59. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/profile/page.tsx +2 -2
  60. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/address/stores/page.tsx +2 -2
  61. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/auth/page.tsx +1 -1
  62. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/basket/page.tsx +2 -2
  63. package/app-template/src/app/[pz]/blog/[slug]/page.tsx +120 -0
  64. package/app-template/src/app/[pz]/category/[pk]/page.tsx +37 -0
  65. package/app-template/src/app/[pz]/flat-page/[pk]/page.tsx +23 -0
  66. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/forms/[pk]/generate/page.tsx +2 -3
  67. package/app-template/src/app/[pz]/group-product/[pk]/page.tsx +93 -0
  68. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/landing-page/[pk]/page.tsx +2 -4
  69. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/layout.tsx +6 -11
  70. package/app-template/src/app/[pz]/list/page.tsx +26 -0
  71. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/not-found.tsx +5 -7
  72. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/orders/completed/[token]/page.tsx +6 -4
  73. package/app-template/src/app/[pz]/page.tsx +28 -0
  74. package/app-template/src/app/[pz]/pages/[slug]/page.tsx +19 -0
  75. package/app-template/src/app/[pz]/product/[pk]/page.tsx +102 -0
  76. package/app-template/src/app/[pz]/special-page/[pk]/page.tsx +35 -0
  77. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/users/email-set-primary/[[...id]]/page.tsx +3 -4
  78. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/users/registration/account-confirm-email/[[...id]]/page.tsx +3 -3
  79. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/users/reset/[[...id]]/page.tsx +41 -5
  80. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/xml-sitemap/[node]/route.ts +8 -6
  81. package/app-template/src/app/api/auth/[...nextauth]/route.ts +3 -0
  82. package/app-template/src/app/api/barcode-search/route.ts +1 -0
  83. package/app-template/src/app/api/cache/route.ts +1 -1
  84. package/app-template/src/app/api/form/[...id]/route.ts +1 -7
  85. package/app-template/src/app/api/image-proxy/route.ts +1 -0
  86. package/app-template/src/app/api/logout/route.ts +1 -1
  87. package/app-template/src/app/api/product-categories/route.ts +1 -0
  88. package/app-template/src/app/api/similar-product-list/route.ts +1 -0
  89. package/app-template/src/app/api/similar-products/route.ts +1 -0
  90. package/app-template/src/app/api/theme-settings/route.ts +12 -0
  91. package/app-template/src/app/api/virtual-try-on/limited-categories/route.ts +1 -0
  92. package/app-template/src/app/api/virtual-try-on/route.ts +1 -0
  93. package/app-template/src/app/api/web-vitals/route.ts +1 -1
  94. package/app-template/src/assets/fonts/pz-icon.css +211 -49
  95. package/app-template/src/assets/fonts/pz-icon.eot +0 -0
  96. package/app-template/src/assets/fonts/pz-icon.html +486 -0
  97. package/app-template/src/assets/fonts/pz-icon.scss +373 -49
  98. package/app-template/src/assets/fonts/pz-icon.svg +215 -53
  99. package/app-template/src/assets/fonts/pz-icon.ttf +0 -0
  100. package/app-template/src/assets/fonts/pz-icon.woff +0 -0
  101. package/app-template/src/assets/fonts/pz-icon.woff2 +0 -0
  102. package/app-template/src/assets/globals.scss +8 -133
  103. package/app-template/src/assets/icons/arrow-right.svg +3 -0
  104. package/app-template/src/assets/icons/cart.svg +4 -12
  105. package/app-template/src/assets/icons/check.svg +2 -18
  106. package/app-template/src/assets/icons/chevron-down.svg +2 -7
  107. package/app-template/src/assets/icons/delete.svg +3 -0
  108. package/app-template/src/assets/icons/facebook.svg +2 -8
  109. package/app-template/src/assets/icons/fav-off.svg +5 -0
  110. package/app-template/src/assets/icons/fav-on.svg +5 -0
  111. package/app-template/src/assets/icons/filter-and-sort.svg +3 -0
  112. package/app-template/src/assets/icons/heart.svg +3 -0
  113. package/app-template/src/assets/icons/instagram.svg +2 -13
  114. package/app-template/src/assets/icons/materials.svg +3 -0
  115. package/app-template/src/assets/icons/person.svg +4 -0
  116. package/app-template/src/assets/icons/pinterest.svg +5 -11
  117. package/app-template/src/assets/icons/ruler.svg +3 -0
  118. package/app-template/src/assets/icons/search.svg +8 -11
  119. package/app-template/src/assets/icons/share.svg +2 -9
  120. package/app-template/src/assets/icons/snapchat.svg +3 -0
  121. package/app-template/src/assets/icons/tiktok.svg +3 -0
  122. package/app-template/src/assets/icons/tumblr.svg +6 -0
  123. package/app-template/src/assets/icons/twitter.svg +2 -10
  124. package/app-template/src/assets/icons/vimeo.svg +3 -0
  125. package/app-template/src/assets/icons/youtube.svg +3 -0
  126. package/app-template/src/assets/icons/zoom.svg +8 -0
  127. package/app-template/src/auth.ts +3 -0
  128. package/app-template/src/components/__tests__/badge.test.tsx +2 -2
  129. package/app-template/src/components/__tests__/link.test.tsx +2 -0
  130. package/app-template/src/components/accordion.tsx +48 -23
  131. package/app-template/src/components/action-tooltip.tsx +160 -0
  132. package/app-template/src/components/button.tsx +1 -1
  133. package/app-template/src/components/carousel-core.tsx +4 -11
  134. package/app-template/src/components/checkbox.tsx +2 -1
  135. package/app-template/src/components/currency-select.tsx +150 -4
  136. package/app-template/src/components/file-input.tsx +27 -7
  137. package/app-template/src/components/generate-form-fields.tsx +49 -10
  138. package/app-template/src/components/icon.tsx +5 -6
  139. package/app-template/src/components/index.ts +4 -1
  140. package/app-template/src/components/input.tsx +11 -5
  141. package/app-template/src/components/language-select.tsx +88 -2
  142. package/app-template/src/components/modal.tsx +34 -16
  143. package/app-template/src/components/pagination.tsx +133 -20
  144. package/app-template/src/components/price.tsx +1 -1
  145. package/app-template/src/components/pwa-tags.tsx +1 -0
  146. package/app-template/src/components/quantity-input.tsx +63 -0
  147. package/app-template/src/components/quantity-selector.tsx +215 -0
  148. package/app-template/src/components/route-handler.tsx +50 -0
  149. package/app-template/src/components/select.tsx +86 -54
  150. package/app-template/src/components/shimmer.tsx +1 -1
  151. package/app-template/src/components/types/index.ts +51 -1
  152. package/app-template/src/components/widget-content.tsx +323 -0
  153. package/app-template/src/data/server/theme.ts +70 -0
  154. package/app-template/src/hooks/use-fav-button.tsx +9 -10
  155. package/app-template/src/hooks/use-product-cart.ts +80 -0
  156. package/app-template/src/hooks/use-stock-alert.ts +74 -0
  157. package/app-template/src/hooks/use-theme-settings.ts +42 -0
  158. package/app-template/src/lib/fonts.ts +149 -0
  159. package/app-template/src/plugins.js +12 -2
  160. package/app-template/src/{middleware.ts → proxy.ts} +3 -3
  161. package/app-template/src/redux/middlewares/category.ts +5 -4
  162. package/app-template/src/redux/store.ts +21 -1
  163. package/app-template/src/routes/index.ts +8 -7
  164. package/app-template/src/settings.js +6 -3
  165. package/app-template/src/types/hookform-resolvers-yup.d.ts +28 -0
  166. package/app-template/src/types/index.ts +74 -3
  167. package/app-template/src/types/next-auth.d.ts +2 -2
  168. package/app-template/src/types/widget.ts +169 -0
  169. package/app-template/src/utils/__tests__/theme-page-context.test.ts +145 -0
  170. package/app-template/src/utils/formatDate.ts +48 -0
  171. package/app-template/src/utils/styles.ts +71 -0
  172. package/app-template/src/utils/theme-page-context.ts +309 -0
  173. package/app-template/src/utils/variant-validation.ts +41 -0
  174. package/app-template/src/views/account/address-form.tsx +8 -4
  175. package/app-template/src/views/account/contact-form.tsx +148 -131
  176. package/app-template/src/views/account/content-header.tsx +4 -3
  177. package/app-template/src/views/account/faq/faq-tabs.tsx +8 -2
  178. package/app-template/src/views/account/favorite-item.tsx +1 -1
  179. package/app-template/src/views/account/order.tsx +11 -9
  180. package/app-template/src/views/account/orders/order-cancellation-item.tsx +1 -1
  181. package/app-template/src/views/account/orders/order-detail-header.tsx +1 -1
  182. package/app-template/src/views/anonymous-tracking/order-detail/index.tsx +45 -38
  183. package/app-template/src/views/basket/basket-item.tsx +6 -1
  184. package/app-template/src/views/basket/summary.tsx +16 -0
  185. package/app-template/src/views/breadcrumb.tsx +2 -2
  186. package/app-template/src/views/category/category-banner.tsx +4 -23
  187. package/app-template/src/views/category/category-info.tsx +2 -1
  188. package/app-template/src/views/category/filters/filter-item.tsx +138 -42
  189. package/app-template/src/views/category/filters/index.tsx +1 -1
  190. package/app-template/src/views/category/layout.tsx +1 -0
  191. package/app-template/src/views/checkout/auth.tsx +64 -40
  192. package/app-template/src/views/checkout/layout/header.tsx +10 -6
  193. package/app-template/src/views/checkout/steps/payment/options/credit-card/index.tsx +22 -6
  194. package/app-template/src/views/checkout/steps/payment/options/funds-transfer.tsx +25 -5
  195. package/app-template/src/views/checkout/steps/payment/options/loyalty.tsx +21 -2
  196. package/app-template/src/views/checkout/steps/payment/options/redirection.tsx +27 -5
  197. package/app-template/src/views/checkout/steps/payment/options/store-credit.tsx +464 -0
  198. package/app-template/src/views/checkout/steps/payment/payment-option-buttons.tsx +4 -4
  199. package/app-template/src/views/checkout/steps/shipping/address-box.tsx +33 -20
  200. package/app-template/src/views/checkout/steps/shipping/addresses.tsx +2 -2
  201. package/app-template/src/views/checkout/summary.tsx +12 -2
  202. package/app-template/src/views/find-in-store/index.tsx +2 -2
  203. package/app-template/src/views/guest-login/index.tsx +62 -58
  204. package/app-template/src/views/header/action-menu.tsx +1 -1
  205. package/app-template/src/views/header/band.tsx +2 -2
  206. package/app-template/src/views/header/index.tsx +1 -1
  207. package/app-template/src/views/header/mini-basket.tsx +3 -3
  208. package/app-template/src/views/header/mobile-hamburger-button.tsx +5 -8
  209. package/app-template/src/views/header/mobile-menu.tsx +18 -6
  210. package/app-template/src/views/header/navbar.tsx +1 -1
  211. package/app-template/src/views/header/pwa-back-button.tsx +1 -1
  212. package/app-template/src/views/header/search/index.tsx +13 -3
  213. package/app-template/src/views/header/search/results.tsx +1 -1
  214. package/app-template/src/views/header/user-menu.tsx +1 -3
  215. package/app-template/src/views/login/index.tsx +66 -57
  216. package/app-template/src/views/otp-login/index.tsx +11 -6
  217. package/app-template/src/views/product/index.ts +1 -0
  218. package/app-template/src/views/product/layout.tsx +26 -6
  219. package/app-template/src/views/product/price-wrapper.tsx +3 -24
  220. package/app-template/src/views/product/product-actions.tsx +165 -0
  221. package/app-template/src/views/product/product-info.tsx +76 -238
  222. package/app-template/src/views/product/product-share.tsx +58 -0
  223. package/app-template/src/views/product/product-variants.tsx +26 -0
  224. package/app-template/src/views/product/slider.tsx +22 -1
  225. package/app-template/src/views/product/variant.tsx +69 -41
  226. package/app-template/src/views/product-pointer-banner-item.tsx +1 -1
  227. package/app-template/src/views/register/index.tsx +31 -46
  228. package/app-template/src/views/sales-contract-modal/index.tsx +17 -17
  229. package/app-template/src/views/share/index.tsx +9 -6
  230. package/app-template/src/views/widgets/home-hero-slider-content.tsx +41 -39
  231. package/app-template/src/widgets/flatpages/about-us/index.tsx +78 -0
  232. package/app-template/src/widgets/flatpages/blog-list/index.tsx +129 -0
  233. package/app-template/src/widgets/footer-info.tsx +1 -1
  234. package/app-template/src/widgets/footer-menu.tsx +7 -3
  235. package/app-template/src/widgets/footer-subscription/footer-subscription-form.tsx +17 -14
  236. package/app-template/src/widgets/footer-subscription/index.tsx +1 -1
  237. package/app-template/src/widgets/home-stories-eng.tsx +43 -35
  238. package/app-template/src/widgets/index.ts +7 -0
  239. package/app-template/src/widgets/schemas/about-us.json +46 -0
  240. package/app-template/src/widgets/schemas/blog-list.json +37 -0
  241. package/app-template/src/widgets/schemas/blog.json +29 -0
  242. package/app-template/tailwind.config.js +155 -7
  243. package/app-template/tsconfig.json +29 -11
  244. package/codemods/migrate-auth-v5/index.js +339 -0
  245. package/codemods/migrate-auth-v5/transform.js +86 -0
  246. package/codemods/migrate-segments/index.js +591 -0
  247. package/codemods/update-tailwind-config/index.js +30 -0
  248. package/codemods/update-tailwind-config/transform.js +102 -0
  249. package/codemods/upgrade-to-2/index.js +549 -0
  250. package/commands/codemod.ts +0 -1
  251. package/commands/plugins.ts +111 -46
  252. package/dist/commands/codemod.js +0 -1
  253. package/dist/commands/plugins.js +104 -36
  254. package/package.json +3 -2
  255. package/app-template/src/app/[commerce]/[locale]/[currency]/category/[pk]/page.tsx +0 -22
  256. package/app-template/src/app/[commerce]/[locale]/[currency]/flat-page/[pk]/page.tsx +0 -20
  257. package/app-template/src/app/[commerce]/[locale]/[currency]/group-product/[pk]/page.tsx +0 -74
  258. package/app-template/src/app/[commerce]/[locale]/[currency]/list/page.tsx +0 -18
  259. package/app-template/src/app/[commerce]/[locale]/[currency]/page.tsx +0 -50
  260. package/app-template/src/app/[commerce]/[locale]/[currency]/product/[pk]/page.tsx +0 -84
  261. package/app-template/src/app/[commerce]/[locale]/[currency]/special-page/[pk]/page.tsx +0 -27
  262. package/app-template/src/pages/api/auth/[...nextauth].ts +0 -3
  263. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/address/page.tsx +0 -0
  264. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/change-email/page.tsx +0 -0
  265. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/change-password/page.tsx +0 -0
  266. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/contact/page.tsx +0 -0
  267. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/coupons/page.tsx +0 -0
  268. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/email-verification/page.tsx +0 -0
  269. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/faq/page.tsx +0 -0
  270. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/favourite-products/page.tsx +0 -0
  271. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/my-quotations/page.tsx +0 -0
  272. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/orders/[id]/layout.tsx +0 -0
  273. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/account/orders/page.tsx +0 -0
  274. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/anonymous-tracking/page.tsx +0 -0
  275. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/auth/oauth-login/page.tsx +0 -0
  276. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/basket-b2b/page.tsx +0 -0
  277. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/category/[pk]/loading.tsx +0 -0
  278. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/client-root.tsx +0 -0
  279. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/contact-us/page.tsx +0 -0
  280. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/error.tsx +0 -0
  281. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/flat-page/[pk]/loading.tsx +0 -0
  282. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/group-product/[pk]/loading.tsx +0 -0
  283. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/landing-page/[pk]/loading.tsx +0 -0
  284. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/list/loading.tsx +0 -0
  285. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/orders/checkout/page.tsx +0 -0
  286. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/orders/completed/[token]/layout.tsx +0 -0
  287. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/special-page/[pk]/loading.tsx +0 -0
  288. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/template.tsx +0 -0
  289. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/users/password/reset/page.tsx +0 -0
  290. /package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/xml-sitemap/route.ts +0 -0
@@ -62,68 +62,72 @@ const GuestLogin = () => {
62
62
  };
63
63
 
64
64
  return (
65
- <form onSubmit={handleSubmit(onSubmit)}>
66
- <div className={clsx(errors.user_email ? 'mb-8' : 'mb-4')}>
67
- <Input
68
- labelStyle="floating"
69
- label={t('checkout.auth.form.login.email.placeholder')}
70
- name="email"
71
- className="h-14"
72
- {...register('user_email')}
73
- error={errors.user_email}
74
- data-testid="guest-email"
75
- required
76
- />
77
- </div>
65
+ <section className="w-full mt-6 lg:mt-8">
66
+ <form onSubmit={handleSubmit(onSubmit)}>
67
+ <div>
68
+ <Input
69
+ labelStyle="floating"
70
+ label={t('checkout.auth.form.login.email.placeholder')}
71
+ name="email"
72
+ className="h-12"
73
+ {...register('user_email')}
74
+ error={errors.user_email}
75
+ data-testid="guest-email"
76
+ required
77
+ />
78
+ </div>
78
79
 
79
- <div className={clsx(errors.phone_number ? 'mb-8' : 'mb-4')}>
80
- <Input
81
- labelStyle="floating"
82
- label={t('checkout.auth.form.login.phone.placeholder')}
83
- className="h-14"
84
- name="phone_number"
85
- type="tel"
86
- format={user_phone_format.replace(/9/g, '#')}
87
- mask="_"
88
- control={control}
89
- {...register('phone_number')}
90
- error={errors.phone_number}
91
- data-testid="guest-phone"
92
- required
93
- />
94
- </div>
80
+ <div className="mt-4">
81
+ <Input
82
+ labelStyle="floating"
83
+ label={t('checkout.auth.form.login.phone.placeholder')}
84
+ className="h-12"
85
+ name="phone_number"
86
+ type="tel"
87
+ format={user_phone_format.replace(/9/g, '#')}
88
+ mask="_"
89
+ control={control}
90
+ {...register('phone_number')}
91
+ error={errors.phone_number}
92
+ data-testid="guest-phone"
93
+ required
94
+ />
95
+ </div>
95
96
 
96
- <Button
97
- type="submit"
98
- className="w-full h-12 uppercase text-xs font-semibold mb-4"
99
- data-testid="guest-submit"
100
- >
101
- {t('checkout.auth.form.login.button')}
102
- </Button>
103
-
104
- <div className="text-sm text-black-400 md:text-xs">
105
- <p className="mb-4">{t('checkout.auth.form.login.agreement.label')}</p>
106
- <Checkbox
107
- name="sms_allowed"
108
- className={clsx('underline', errors.sms_allowed ? 'mb-8' : 'mb-4')}
109
- {...register('sms_allowed')}
110
- error={errors.sms_allowed}
111
- data-testid="guest-sms"
97
+ <Button
98
+ type="submit"
99
+ className="w-full h-12 uppercase text-xs font-semibold mt-[38px]"
100
+ data-testid="guest-submit"
112
101
  >
113
- {t('checkout.auth.form.login.agreement.terms_conditions')}
114
- </Checkbox>
102
+ {t('checkout.auth.form.login.button')}
103
+ </Button>
115
104
 
116
- <Checkbox
117
- name="confirm"
118
- className={clsx('underline', errors.kvkk_confirm ? 'mb-8' : 'mb-4')}
119
- {...register('kvkk_confirm')}
120
- error={errors.kvkk_confirm}
121
- data-testid="guest-kvkk"
122
- >
123
- {t('checkout.auth.form.login.agreement.privacy_policy')}
124
- </Checkbox>
125
- </div>
126
- </form>
105
+ <div className="mt-[38px] text-sm text-black-400 md:text-xs">
106
+ <p className="mb-4">
107
+ {t('checkout.auth.form.login.agreement.label')}
108
+ </p>
109
+ <Checkbox
110
+ name="sms_allowed"
111
+ className="underline"
112
+ {...register('sms_allowed')}
113
+ error={errors.sms_allowed}
114
+ data-testid="guest-sms"
115
+ >
116
+ {t('checkout.auth.form.login.agreement.terms_conditions')}
117
+ </Checkbox>
118
+
119
+ <Checkbox
120
+ name="confirm"
121
+ className="underline mt-4"
122
+ {...register('kvkk_confirm')}
123
+ error={errors.kvkk_confirm}
124
+ data-testid="guest-kvkk"
125
+ >
126
+ {t('checkout.auth.form.login.agreement.privacy_policy')}
127
+ </Checkbox>
128
+ </div>
129
+ </form>
130
+ </section>
127
131
  );
128
132
  };
129
133
 
@@ -76,7 +76,7 @@ export default function ActionMenu() {
76
76
  : 'bg-secondary-500 text-white'
77
77
  )}
78
78
  >
79
- {totalQuantity}
79
+ <span data-testid="header-basket-count">{totalQuantity}</span>
80
80
  </Badge>
81
81
  ),
82
82
  miniBasket: <MiniBasket />
@@ -16,13 +16,13 @@ export default function HeaderBand() {
16
16
  </div>
17
17
 
18
18
  <div className="header-grid-area-nav bg-gray-100 h-auto p-3 sm:header-grid-area-band-m sm:h-9 sm:py-0">
19
- <div className="text-center text-ellipsis line-clamp-2 h-full flex items-center justify-center">
19
+ <div className="text-center overflow-ellipsis line-clamp-2 h-full flex items-center justify-center">
20
20
  <HeaderBandText />
21
21
  </div>
22
22
  </div>
23
23
 
24
24
  <div className="header-grid-area-main-r h-full pr-4 sm:header-grid-area-band-r sm:pr-0">
25
- <div className="flex items-center justify-end h-full gap-10">
25
+ <div className="flex items-center justify-end h-full">
26
26
  <UserMenu isMobile={false} />
27
27
  <ActionMenu />
28
28
  </div>
@@ -13,7 +13,7 @@ import { getMenu } from '@akinon/next/data/server';
13
13
  import { Image } from '@akinon/next/components/image';
14
14
 
15
15
  export default async function Header() {
16
- const response = await getMenu();
16
+ const response = await getMenu({ depth: 3 });
17
17
  const menu = menuGenerator(response);
18
18
 
19
19
  return (
@@ -168,7 +168,7 @@ export default function MiniBasket() {
168
168
  () => miniBasket?.total_quantity ?? 0,
169
169
  [miniBasket]
170
170
  );
171
- const miniBasketList = useRef(null);
171
+ const miniBasketList = useRef<HTMLUListElement | null>(null);
172
172
 
173
173
  useEffect(() => {
174
174
  if (highlightedItem > 0) {
@@ -203,7 +203,7 @@ export default function MiniBasket() {
203
203
  miniBasketOpen
204
204
  ? 'opacity-100 visible lg:invisible'
205
205
  : 'opacity-0 invisible',
206
- 'fixed top-0 left-0 z-50 w-screen h-screen bg-black/80 transition-all duration-300'
206
+ 'fixed top-0 left-0 z-50 w-screen h-screen bg-black bg-opacity-80 transition-all duration-300'
207
207
  )}
208
208
  onClick={() => {
209
209
  dispatch(closeMiniBasket());
@@ -217,7 +217,7 @@ export default function MiniBasket() {
217
217
  'fixed lg:absolute bottom-0 lg:-bottom-1 right-0 w-80 h-screen lg:h-auto bg-white lg:border-l lg:border-t lg:border-r-2 lg:border-b-2 lg:border-gray-500 p-5 z-50 transition-all duration-300'
218
218
  )}
219
219
  >
220
- <header className="flex items-center gap-2 pb-3 border-b border-gray-200">
220
+ <header className="flex items-center gap-2 pb-3 border-b">
221
221
  <h3 className="text-xl font-bold">
222
222
  {t('basket.mini_basket.my_bag')}
223
223
  </h3>
@@ -11,24 +11,21 @@ export default function MobileHamburgerButton() {
11
11
  const dispatch = useAppDispatch();
12
12
 
13
13
  return (
14
- <div className="flex row-start-2 sm:hidden ">
14
+ <div className="flex sm:hidden">
15
15
  <PwaBackButton />
16
16
  <Button
17
17
  className={clsx([
18
- 'w-12',
19
- 'h-12',
20
- 'bg-secondary',
21
- 'text-white',
18
+ 'h-auto',
19
+ 'bg-transparent',
22
20
  'flex',
23
21
  'items-center',
24
22
  'justify-center',
25
23
  'px-0',
26
- 'border-none',
27
- 'hover:bg-secondary-hover'
24
+ 'border-none'
28
25
  ])}
29
26
  onClick={() => dispatch(toggleMobileMenu())}
30
27
  >
31
- <Icon name="hamburger" size={18} className="fill-white" />
28
+ <Icon name="hamburger" size={18} className="text-black" />
32
29
  </Button>
33
30
  </div>
34
31
  );
@@ -58,9 +58,9 @@ export default function MobileMenu(props: MobileMenuProps) {
58
58
  <>
59
59
  <div
60
60
  className={clsx(
61
- 'fixed top-0 left-0 z-30 w-screen h-screen invisible opacity-0 bg-black/80 transition duration-500',
61
+ 'fixed top-0 left-0 z-30 w-screen h-screen invisible opacity-0 bg-black bg-opacity-80 transition duration-500',
62
62
  {
63
- 'visible! opacity-100! scroll-lock': isMobileMenuOpen
63
+ '!visible !opacity-100 scroll-lock': isMobileMenuOpen
64
64
  }
65
65
  )}
66
66
  />
@@ -70,7 +70,7 @@ export default function MobileMenu(props: MobileMenuProps) {
70
70
  className={clsx(
71
71
  'fixed top-0 left-0 z-50 flex flex-col bg-white w-72 pt-4 h-screen invisible opacity-0 transition duration-500 transform -translate-x-72',
72
72
  {
73
- 'visible! opacity-100! translate-x-0': isMobileMenuOpen
73
+ '!visible !opacity-100 translate-x-0': isMobileMenuOpen
74
74
  }
75
75
  )}
76
76
  >
@@ -90,10 +90,22 @@ export default function MobileMenu(props: MobileMenuProps) {
90
90
  onClick={(e) => {
91
91
  if (item.children.length > 0) {
92
92
  e.preventDefault();
93
+ e.stopPropagation();
93
94
  setSelectedSubMenu(item);
95
+
96
+ window?.parent?.postMessage(
97
+ {
98
+ type: 'MENU_TOGGLE',
99
+ isMenuAction: true
100
+ },
101
+ '*'
102
+ );
94
103
  }
95
104
  }}
96
105
  className="flex items-center justify-between"
106
+ data-is-menu-toggle={
107
+ item.children.length > 0 ? 'true' : undefined
108
+ }
97
109
  >
98
110
  <span>{item.label}</span>
99
111
  <Icon name="chevron-end" size={14} />
@@ -106,15 +118,15 @@ export default function MobileMenu(props: MobileMenuProps) {
106
118
  className={clsx(
107
119
  'absolute top-0 left-0 right-0 px-8 bg-white invisible opacity-0 transition duration-500 transform translate-x-full',
108
120
  {
109
- 'visible! opacity-100! translate-x-0!': selectedSubMenu
121
+ '!visible !opacity-100 !translate-x-0': selectedSubMenu
110
122
  }
111
123
  )}
112
124
  >
113
- <header className="flex items-center justify-between border-b border-gray-200 h-[61px] py-4 mb-4">
125
+ <header className="flex items-center justify-between border-b h-[61px] py-4 mb-4">
114
126
  <Button
115
127
  appearance="ghost"
116
128
  onClick={() => setSelectedSubMenu(null)}
117
- className="underline text-xs font-semibold flex items-center gap-2 p-0!"
129
+ className="underline text-xs font-semibold flex items-center gap-2 !p-0"
118
130
  >
119
131
  <Icon name="chevron-start" size={12} className="shrink-0" />
120
132
  {t('common.mobile_menu.back')}
@@ -102,7 +102,7 @@ export default function Navbar(props: NavbarProps) {
102
102
  'after:bg-gray'
103
103
  ],
104
104
  {
105
- 'visible! opacity-100! delay-500':
105
+ '!visible !opacity-100 delay-500':
106
106
  openedMenu === item.pk
107
107
  }
108
108
  )}
@@ -34,7 +34,7 @@ export const PwaBackButton = () => {
34
34
  return (
35
35
  <div className="relative z-10 md:top-0 md:left-0 md:fixed">
36
36
  <button
37
- className="bg-secondary-600 text-white flex items-center justify-center shrink-0 w-12 h-12 md:w-10 md:h-9 active:bg-secondary-700"
37
+ className="bg-secondary-600 text-white flex items-center justify-center flex-shrink-0 w-12 h-12 md:w-10 md:h-9 active:bg-secondary-700"
38
38
  onClick={() => router.back()}
39
39
  >
40
40
  <svg
@@ -9,6 +9,7 @@ import { Icon } from '@theme/components';
9
9
  import Results from './results';
10
10
  import { ROUTES } from '@theme/routes';
11
11
  import { useLocalization, useRouter } from '@akinon/next/hooks';
12
+ import PluginModule, { Component } from '@akinon/next/components/plugin-module';
12
13
 
13
14
  export default function Search() {
14
15
  const { t } = useLocalization();
@@ -46,7 +47,7 @@ export default function Search() {
46
47
  <div
47
48
  className={clsx(
48
49
  // 177px is the height of the header
49
- 'absolute bg-black/75 w-screen h-screen transition duration-500 left-0 bottom-0 translate-y-full z-30',
50
+ 'absolute bg-black opacity-75 w-screen h-screen transition duration-500 left-0 bottom-0 translate-y-full z-30',
50
51
  isSearchOpen && searchText
51
52
  ? 'visible opacity-100'
52
53
  : 'invisible opacity-0'
@@ -60,7 +61,7 @@ export default function Search() {
60
61
  isSearchOpen ? 'visible opacity-100' : 'invisible opacity-0'
61
62
  )}
62
63
  >
63
- <div className="max-w-(--breakpoint-2xl) mx-auto flex flex-col gap-12">
64
+ <div className="max-w-screen-2xl mx-auto flex flex-col gap-12">
64
65
  <div className="border-b border-gray-400 flex flex-col py-1.5 gap-2 self-center items-center md:flex-row">
65
66
  <span className="text-xl lg:text-2xl">
66
67
  {t('common.search.results_for')}
@@ -74,10 +75,19 @@ export default function Search() {
74
75
  router.push(`${ROUTES.LIST}/?search_text=${searchText}`);
75
76
  }
76
77
  }}
77
- className="border-0 text-2xl outline-hidden text-secondary placeholder:text-xl lg:placeholder:text-2xl"
78
+ className="border-0 text-2xl outline-none text-secondary placeholder:text-xl placeholder:lg:text-2xl"
78
79
  placeholder={t('common.search.placeholder')}
79
80
  ref={inputRef}
80
81
  />
82
+
83
+ <PluginModule
84
+ component={Component.HeaderImageSearchFeature}
85
+ props={{
86
+ enableTextSearch: true,
87
+ isEnabled: true
88
+ }}
89
+ />
90
+
81
91
  <Icon
82
92
  name="close"
83
93
  size={14}
@@ -80,7 +80,7 @@ export default function Results(props: ResultsProps) {
80
80
  <div className="grid grid-cols-2 sm:grid-cols-4 gap-8">
81
81
  {products.map((product, index) => (
82
82
  <Link href={product?.url} key={index} className="flex flex-col">
83
- <div className="relative aspect-315/448">
83
+ <div className="relative aspect-[315/448]">
84
84
  {product.extra.image ? (
85
85
  <Image
86
86
  src={product.extra.image}
@@ -36,9 +36,7 @@ export const UserMenu = (props: UserMenuProps) => {
36
36
  <ul
37
37
  className={clsx(
38
38
  'items-center divide-x divide-black',
39
- isMobile
40
- ? 'flex pt-2 text-sm pb-6 border-b border-gray-200 mx-8'
41
- : 'hidden sm:flex'
39
+ isMobile ? 'flex pt-2 text-sm pb-6 border-b mx-8' : 'hidden sm:flex'
42
40
  )}
43
41
  id="user-menu"
44
42
  >
@@ -1,10 +1,10 @@
1
1
  'use client';
2
2
 
3
- import { signIn, SignInOptions } from 'next-auth/react';
4
- import { useSearchParams } from 'next/navigation';
5
- import { useState } from 'react';
3
+ import { signIn } from 'next-auth/react';
4
+ import { usePathname, useSearchParams } from 'next/navigation';
5
+ import { useEffect, useState } from 'react';
6
6
  import { ROUTES } from '@theme/routes';
7
- import { LoginFormType } from '@theme/types';
7
+ import { LoginFormType, FormType, PzSignInOptions } from '@theme/types';
8
8
  import { Button, Input, Link } from '@theme/components';
9
9
  import { SubmitHandler, useForm } from 'react-hook-form';
10
10
  import * as yup from 'yup';
@@ -15,6 +15,7 @@ import { useCaptcha, useLocalization } from '@akinon/next/hooks';
15
15
  import { AuthError } from '@akinon/next/types';
16
16
  import { Image } from '@akinon/next/components/image';
17
17
  import PluginModule, { Component } from '@akinon/next/components/plugin-module';
18
+ import { twMerge } from 'tailwind-merge';
18
19
 
19
20
  const oauthProviders: Array<{
20
21
  key: string;
@@ -24,18 +25,15 @@ const oauthProviders: Array<{
24
25
  }> = [
25
26
  {
26
27
  key: 'google',
27
- label: 'Google',
28
- image: '/google.svg'
28
+ label: 'Google'
29
29
  },
30
30
  {
31
31
  key: 'facebook',
32
- label: 'Facebook',
33
- image: '/facebook.svg'
32
+ label: 'Facebook'
34
33
  },
35
34
  {
36
35
  key: 'apple',
37
- label: 'Apple',
38
- image: '/apple.svg'
36
+ label: 'Apple'
39
37
  }
40
38
  ];
41
39
 
@@ -48,7 +46,11 @@ const loginFormSchema = (t) =>
48
46
  password: yup.string().required(t('auth.login.form.error.required'))
49
47
  });
50
48
 
51
- export const Login = () => {
49
+ export const Login = ({
50
+ setActiveTab
51
+ }: {
52
+ setActiveTab?: (tab: string) => void;
53
+ }) => {
52
54
  const { t, locale } = useLocalization();
53
55
 
54
56
  const { refetch: refetchBasketData } = useGetBasketQuery();
@@ -62,8 +64,10 @@ export const Login = () => {
62
64
  resolver: yupResolver(loginFormSchema(t))
63
65
  });
64
66
 
67
+ const pathname = usePathname();
65
68
  const searchParams = useSearchParams();
66
69
  const [formError, setFormError] = useState(null);
70
+ const [isCheckout, setIsCheckout] = useState<boolean>(false);
67
71
 
68
72
  const {
69
73
  CaptchaView,
@@ -79,11 +83,12 @@ export const Login = () => {
79
83
  redirect: false,
80
84
  callbackUrl: searchParams.get('callbackUrl') ?? '/',
81
85
  captchaValidated,
82
- ...data
83
- } as SignInOptions);
86
+ ...data,
87
+ formType: FormType.login
88
+ } as PzSignInOptions & { redirect: false });
84
89
 
85
90
  if (loginResponse.error) {
86
- const errors: AuthError[] = JSON.parse(loginResponse.error);
91
+ const errors: AuthError[] = JSON.parse(loginResponse.code);
87
92
 
88
93
  if (errors.find((error) => error.type === 'captcha')) {
89
94
  if (await validateCaptcha()) {
@@ -109,25 +114,25 @@ export const Login = () => {
109
114
  try {
110
115
  parsedValue = JSON.parse(item.value);
111
116
  } catch {
112
- parsedValue = [item.value];
117
+ parsedValue = [item.value];
113
118
  }
114
119
  } else {
115
- parsedValue = item.value;
120
+ parsedValue = item.value;
116
121
  }
117
122
 
118
123
  if (Array.isArray(parsedValue)) {
119
124
  setError(item.name as keyof LoginFormType, {
120
125
  type: 'custom',
121
- message: parsedValue.join(', '),
126
+ message: parsedValue.join(', ')
122
127
  });
123
128
  } else {
124
129
  Object.keys(parsedValue).forEach((key) => {
125
130
  const fieldName = key as keyof LoginFormType;
126
131
  const errorMessages = parsedValue[key] as string[];
127
-
132
+
128
133
  setError(fieldName, {
129
134
  type: 'custom',
130
- message: errorMessages.join(', '),
135
+ message: errorMessages.join(', ')
131
136
  });
132
137
  });
133
138
  }
@@ -146,29 +151,27 @@ export const Login = () => {
146
151
  }
147
152
  };
148
153
 
149
- return (
150
- <section
151
- className={clsx([
152
- 'w-full py-10 px-5 md:py-0 md:px-8 md:mx-auto lg:px-16'
153
- ])}
154
- >
155
- <h2 className="mb-3 text-lg text-start text-black-800 font-light md:mb-9 md:text-2xl">
156
- {t('auth.login.title')}
157
- </h2>
154
+ useEffect(() => {
155
+ if (pathname.includes('/orders/checkout')) {
156
+ setIsCheckout(true);
157
+ }
158
+ }, [pathname]);
158
159
 
160
+ return (
161
+ <section className="w-full mt-6 lg:mt-8">
159
162
  <form
160
163
  action="/api/auth/signin/credentials"
161
164
  method="post"
162
165
  onSubmit={handleSubmit(onSubmit)}
163
166
  >
164
- <input type="hidden" value="login" {...register('formType')} />
167
+ <input type="hidden" value={FormType.login} {...register('formType')} />
165
168
  <input type="hidden" value={locale} {...register('locale')} />
166
169
 
167
- <div className={clsx(errors.email ? 'mb-8' : 'mb-4')}>
170
+ <div>
168
171
  <Input
169
172
  labelStyle="floating"
170
173
  label={t('auth.login.form.email.placeholder')}
171
- className="h-14"
174
+ className="h-12"
172
175
  {...register('email')}
173
176
  error={errors.email}
174
177
  data-testid="login-email"
@@ -176,11 +179,11 @@ export const Login = () => {
176
179
  />
177
180
  </div>
178
181
 
179
- <div className={clsx(errors.password ? 'mb-8' : 'mb-4')}>
182
+ <div className="mt-4">
180
183
  <Input
181
184
  labelStyle="floating"
182
185
  label={t('auth.login.form.password.placeholder')}
183
- className="h-14"
186
+ className="h-12"
184
187
  type="password"
185
188
  {...register('password')}
186
189
  error={errors.password}
@@ -191,7 +194,7 @@ export const Login = () => {
191
194
 
192
195
  <Link
193
196
  href={ROUTES.FORGOT_PASSWORD}
194
- className="block text-sm underline mb-8"
197
+ className="block text-black-750/75 text-sm underline mt-4"
195
198
  data-testid="login-forgot-password"
196
199
  >
197
200
  {t('auth.login.form.forgot_password')}
@@ -199,7 +202,7 @@ export const Login = () => {
199
202
 
200
203
  {formError && (
201
204
  <p
202
- className="text-error text-xs my-5"
205
+ className="text-error text-xs my-2"
203
206
  data-testid="login-error-field"
204
207
  >
205
208
  {formError}
@@ -207,11 +210,11 @@ export const Login = () => {
207
210
  )}
208
211
 
209
212
  <div className="flex justify-center">
210
- <CaptchaView className="mb-5" data-testid="login-captcha" />
213
+ <CaptchaView className="mt-8" data-testid="login-captcha" />
211
214
  </div>
212
215
 
213
216
  <Button
214
- className="w-full h-12 uppercase text-xs font-semibold"
217
+ className="w-full h-12 text-sm font-normal mt-6 lg:mt-8"
215
218
  type="submit"
216
219
  disabled={isCaptchaVisible && !captchaValidated}
217
220
  data-testid="login-submit"
@@ -219,22 +222,23 @@ export const Login = () => {
219
222
  {t('auth.login.form.submit')}
220
223
  </Button>
221
224
 
222
- <p className="relative text-gray-600 text-center my-4 before:absolute before:h-[1px] before:w-5/12 before:bg-gray-600/25 before:top-1/2 before:left-0 after:absolute after:h-[1px] after:w-5/12 after:bg-gray-600/25 after:top-1/2 after:right-0">
223
- {t('auth.login.form.or')}
225
+ <p
226
+ className={clsx(
227
+ twMerge(
228
+ 'relative block text-center mt-3 lg:mt-8 text-black-750 text-sm',
229
+ 'before:absolute before:left-0 before:top-1/2 before:w-full before:h-px before:bg-[#d2d2d2] before:-z-10'
230
+ )
231
+ )}
232
+ >
233
+ <span className="bg-white px-4">{t('auth.login.form.or')}</span>
224
234
  </p>
225
-
226
- <div className="social-login">
227
- <p className="mb-3 text-lg text-start font-light md:mb-9 md:text-2xl">
228
- {t('auth.login.form.sign_in_with')}
229
- </p>
230
- </div>
231
235
  </form>
232
236
 
233
- <div className="grid grid-cols-2 gap-4 lg:grid-cols-3">
237
+ <div className="grid gap-4 mt-2">
234
238
  {oauthProviders.map((provider) => (
235
239
  <Button
236
240
  key={provider.key}
237
- className="w-full h-14 uppercase text-xs font-semibold flex items-center justify-center gap-2 hover:bg-transparent hover:border hover:border-primary-800 hover:text-primary"
241
+ className="text-base text-black-750 h-auto py-4 border border-gray-650 leading-[0.94]"
238
242
  type="submit"
239
243
  appearance="outlined"
240
244
  disabled={isCaptchaVisible && !captchaValidated}
@@ -242,19 +246,24 @@ export const Login = () => {
242
246
  location.href = `/${provider.key}/login/`;
243
247
  }}
244
248
  >
245
- {provider.image && (
246
- <Image
247
- src={provider.image}
248
- alt={provider.label}
249
- width={provider.label === 'Facebook' ? 10 : 18}
250
- height={18}
251
- className="shrink-0"
252
- />
249
+ {t('auth.login.form.continue_with_provider').replace(
250
+ '{provider}',
251
+ provider.localeKey ? t(provider.localeKey) : provider.label
253
252
  )}
254
-
255
- {provider.localeKey ? t(provider.localeKey) : provider.label}
256
253
  </Button>
257
254
  ))}
255
+ {isCheckout && (
256
+ <Button
257
+ className="text-base text-black-750 h-auto py-4 border border-gray-650 leading-[0.94]"
258
+ type="submit"
259
+ appearance="outlined"
260
+ onClick={() => {
261
+ setActiveTab?.('guest');
262
+ }}
263
+ >
264
+ {t('checkout.auth.continue_as_guest_checkout')}
265
+ </Button>
266
+ )}
258
267
  <PluginModule
259
268
  component={Component.AkifastQuickLoginButton}
260
269
  props={{