@akinon/projectzero 2.0.0-beta.9 → 2.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 (290) hide show
  1. package/CHANGELOG.md +183 -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 +2033 -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
@@ -0,0 +1,149 @@
1
+ import {
2
+ Roboto,
3
+ Open_Sans,
4
+ Lato,
5
+ Montserrat,
6
+ Jost,
7
+ Inter,
8
+ Poppins,
9
+ Playfair_Display,
10
+ Raleway,
11
+ Ubuntu
12
+ } from 'next/font/google';
13
+
14
+ // Google Fonts configuration
15
+ export const roboto = Roboto({
16
+ weight: ['100', '300', '400', '500', '700', '900'],
17
+ subsets: [
18
+ 'latin',
19
+ 'latin-ext',
20
+ 'cyrillic',
21
+ 'cyrillic-ext',
22
+ 'greek',
23
+ 'greek-ext',
24
+ 'vietnamese'
25
+ ],
26
+ display: 'swap',
27
+ variable: '--font-roboto'
28
+ });
29
+
30
+ export const openSans = Open_Sans({
31
+ weight: ['300', '400', '500', '600', '700', '800'],
32
+ subsets: [
33
+ 'latin',
34
+ 'latin-ext',
35
+ 'cyrillic',
36
+ 'cyrillic-ext',
37
+ 'greek',
38
+ 'greek-ext',
39
+ 'vietnamese'
40
+ ],
41
+ display: 'swap',
42
+ variable: '--font-open-sans'
43
+ });
44
+
45
+ export const lato = Lato({
46
+ weight: ['100', '300', '400', '700', '900'],
47
+ subsets: ['latin', 'latin-ext'],
48
+ display: 'swap',
49
+ variable: '--font-lato'
50
+ });
51
+
52
+ export const montserrat = Montserrat({
53
+ weight: ['100', '200', '300', '400', '500', '600', '700', '800', '900'],
54
+ subsets: ['latin', 'latin-ext', 'cyrillic', 'cyrillic-ext', 'vietnamese'],
55
+ display: 'swap',
56
+ variable: '--font-montserrat'
57
+ });
58
+
59
+ export const jost = Jost({
60
+ weight: ['100', '200', '300', '400', '500', '600', '700', '800', '900'],
61
+ subsets: ['latin', 'latin-ext', 'cyrillic'],
62
+ display: 'swap',
63
+ variable: '--font-jost'
64
+ });
65
+
66
+ export const inter = Inter({
67
+ weight: ['100', '200', '300', '400', '500', '600', '700', '800', '900'],
68
+ subsets: [
69
+ 'latin',
70
+ 'latin-ext',
71
+ 'cyrillic',
72
+ 'cyrillic-ext',
73
+ 'greek',
74
+ 'greek-ext',
75
+ 'vietnamese'
76
+ ],
77
+ display: 'swap',
78
+ variable: '--font-inter'
79
+ });
80
+
81
+ export const poppins = Poppins({
82
+ weight: ['100', '200', '300', '400', '500', '600', '700', '800', '900'],
83
+ subsets: ['latin', 'latin-ext'],
84
+ display: 'swap',
85
+ variable: '--font-poppins'
86
+ });
87
+
88
+ export const playfairDisplay = Playfair_Display({
89
+ weight: ['400', '500', '600', '700', '800', '900'],
90
+ subsets: ['latin', 'latin-ext', 'cyrillic'],
91
+ display: 'swap',
92
+ variable: '--font-playfair-display'
93
+ });
94
+
95
+ export const raleway = Raleway({
96
+ weight: ['100', '200', '300', '400', '500', '600', '700', '800', '900'],
97
+ subsets: ['latin', 'latin-ext', 'cyrillic', 'cyrillic-ext'],
98
+ display: 'swap',
99
+ variable: '--font-raleway'
100
+ });
101
+
102
+ export const ubuntu = Ubuntu({
103
+ weight: ['300', '400', '500', '700'],
104
+ subsets: [
105
+ 'latin',
106
+ 'latin-ext',
107
+ 'cyrillic',
108
+ 'cyrillic-ext',
109
+ 'greek',
110
+ 'greek-ext'
111
+ ],
112
+ display: 'swap',
113
+ variable: '--font-ubuntu'
114
+ });
115
+
116
+ // Font mapping for easy access
117
+ export const fontMap = {
118
+ Roboto: roboto,
119
+ 'Open Sans': openSans,
120
+ Lato: lato,
121
+ Montserrat: montserrat,
122
+ Jost: jost,
123
+ Inter: inter,
124
+ Poppins: poppins,
125
+ 'Playfair Display': playfairDisplay,
126
+ Raleway: raleway,
127
+ Ubuntu: ubuntu
128
+ } as const;
129
+
130
+ export type GoogleFontName = keyof typeof fontMap;
131
+
132
+ // Get font class name by font name
133
+ export function getFontClassName(fontName: string): string {
134
+ const font = fontMap[fontName as GoogleFontName];
135
+ return font?.className || '';
136
+ }
137
+
138
+ // Get font variable by font name
139
+ export function getFontVariable(fontName: string): string {
140
+ const font = fontMap[fontName as GoogleFontName];
141
+ return font?.variable || '';
142
+ }
143
+
144
+ // Get all font variables for CSS variables
145
+ export function getAllFontVariables(): string {
146
+ return Object.values(fontMap)
147
+ .map((font) => font.variable)
148
+ .join(' ');
149
+ }
@@ -1,4 +1,3 @@
1
- // we are holding all of the plugins because of the development enviroment.
2
1
  module.exports = [
3
2
  'pz-basket-gift-pack',
4
3
  'pz-click-collect',
@@ -12,7 +11,18 @@ module.exports = [
12
11
  'pz-masterpass',
13
12
  'pz-b2b',
14
13
  'pz-akifast',
14
+ 'pz-multi-basket',
15
15
  'pz-saved-card',
16
16
  'pz-tabby-extension',
17
- 'pz-tamara-extension'
17
+ 'pz-apple-pay',
18
+ 'pz-tamara-extension',
19
+ 'pz-hepsipay',
20
+ 'pz-flow-payment',
21
+ 'pz-virtual-try-on',
22
+ 'pz-cybersource-uc',
23
+ 'pz-hepsipay',
24
+ 'pz-masterpass-rest',
25
+ 'pz-similar-products',
26
+ 'pz-haso',
27
+ 'pz-google-pay'
18
28
  ];
@@ -3,7 +3,7 @@ import { NextMiddleware, NextResponse } from 'next/server';
3
3
 
4
4
  /**
5
5
  * !IMPORTANT
6
- * Do not remove this file or withPzDefault middleware.
6
+ * Do not remove this file or withPzDefault wrapper.
7
7
  * It is required for the application to work properly.
8
8
  * If you need to add custom matcher, don't remove the existing one.
9
9
  */
@@ -18,7 +18,7 @@ export const config = {
18
18
  ]
19
19
  };
20
20
 
21
- const middleware: NextMiddleware = () =>
21
+ const proxy: NextMiddleware = () =>
22
22
  // req: PzNextRequest,
23
23
  // event: NextFetchEvent
24
24
  {
@@ -32,4 +32,4 @@ const middleware: NextMiddleware = () =>
32
32
  return NextResponse.next();
33
33
  };
34
34
 
35
- export default withPzDefault(middleware);
35
+ export default withPzDefault(proxy);
@@ -1,5 +1,5 @@
1
1
  import { Facet } from '@akinon/next/types';
2
- import { Middleware } from '@reduxjs/toolkit';
2
+ import { Middleware, UnknownAction } from '@reduxjs/toolkit';
3
3
  import { setSelectedFacets } from '@theme/redux/reducers/category';
4
4
 
5
5
  const getSelectedFacets = (facets: Array<Facet>) => {
@@ -21,13 +21,14 @@ const getSelectedFacets = (facets: Array<Facet>) => {
21
21
  const categoryMiddleware: Middleware = ({ dispatch, getState }) => {
22
22
  return (next) => (action) => {
23
23
  const result = next(action);
24
+ const act = action as UnknownAction;
24
25
 
25
- if (action.type === 'category/setFacets') {
26
- const facets: Array<Facet> = result.payload;
26
+ if (act.type === 'category/setFacets') {
27
+ const facets: Array<Facet> = (result as { payload: Array<Facet> }).payload;
27
28
  const selectedFacets = getSelectedFacets(facets);
28
29
 
29
30
  dispatch(setSelectedFacets(selectedFacets));
30
- } else if (action.type === 'category/toggleFacet') {
31
+ } else if (act.type === 'category/toggleFacet') {
31
32
  const selectedFacets = getSelectedFacets(
32
33
  getState().category.selectedFacets
33
34
  );
@@ -14,6 +14,11 @@ import {
14
14
  import categoryReducer from '@theme/redux/reducers/category';
15
15
  import categoryMiddleware from '@theme/redux/middlewares/category';
16
16
 
17
+ // Import all action creators from akinon-next
18
+ import * as defaultActions from '@akinon/next/redux/actions';
19
+ import { rtkApiActionCreators } from '@akinon/next/redux/actions';
20
+ import * as categorySlice from './reducers/category';
21
+
17
22
  const _middlewares: Middleware[] = [...middlewares, categoryMiddleware];
18
23
 
19
24
  const _reducers = {
@@ -21,13 +26,28 @@ const _reducers = {
21
26
  category: categoryReducer
22
27
  };
23
28
 
29
+ const actionCreators = {
30
+ // Slice actions (automatically extracted from akinon-next)
31
+ ...defaultActions,
32
+ // RTK Query API endpoints from akinon-next
33
+ ...rtkApiActionCreators,
34
+ // Local category slice actions
35
+ ...categorySlice
36
+ };
37
+
24
38
  export const makeStore = (): Store<{
25
39
  [key in keyof typeof _reducers]: ReturnType<typeof _reducers[key]>;
26
40
  }> =>
27
41
  configureStore({
28
42
  reducer: _reducers,
29
43
  middleware: (getDefaultMiddleware) =>
30
- getDefaultMiddleware().concat(_middlewares)
44
+ getDefaultMiddleware().concat(_middlewares),
45
+ devTools:
46
+ process.env.NODE_ENV !== 'production'
47
+ ? {
48
+ actionCreators
49
+ }
50
+ : false
31
51
  });
32
52
 
33
53
  export type AppStore = ReturnType<typeof makeStore>;
@@ -1,17 +1,17 @@
1
- enum GENERAL_ROUTES {
1
+ export enum GENERAL_ROUTES {
2
2
  HOME = '/',
3
3
  BASKET = '/baskets/basket',
4
4
  LIST = '/list'
5
5
  }
6
6
 
7
- enum AUTH_ROUTES {
7
+ export enum AUTH_ROUTES {
8
8
  AUTH = '/users/auth',
9
9
  FORGOT_PASSWORD = '/users/password/reset',
10
10
  EMAIL_SET_PRIMARY = '/users/email-set-primary/.+',
11
11
  CONFIRM_EMAIL = '/users/registration/account-confirm-email/.+'
12
12
  }
13
13
 
14
- enum ACCOUNT_ROUTES {
14
+ export enum ACCOUNT_ROUTES {
15
15
  ACCOUNT = '/account',
16
16
  ACCOUNT_ADDRESS = '/account/address',
17
17
  ACCOUNT_CHANGE_EMAIL = '/account/change-email',
@@ -25,16 +25,17 @@ enum ACCOUNT_ROUTES {
25
25
  ANONYMOUS_TRACKING = '/anonymous-tracking'
26
26
  }
27
27
 
28
- enum ORDER_ROUTES {
28
+ export enum ORDER_ROUTES {
29
29
  CHECKOUT = '/orders/checkout',
30
- CHECKOUT_COMPLETED = '/orders/completed'
30
+ CHECKOUT_COMPLETED = '/orders/completed',
31
+ PAYMENT_GATEWAY_HASO = '/payment-gateway/haso'
31
32
  }
32
33
 
33
- enum FLATPAGE_ROUTES {
34
+ export enum FLATPAGE_ROUTES {
34
35
  CONTACT_US = '/contact-us'
35
36
  }
36
37
 
37
- enum PRODUCT_ROUTES {}
38
+ export enum PRODUCT_ROUTES {}
38
39
 
39
40
  export const ROUTES = {
40
41
  ...GENERAL_ROUTES,
@@ -16,14 +16,14 @@ module.exports = {
16
16
  localization: {
17
17
  locales: [
18
18
  {
19
- label: 'EN',
19
+ label: 'English',
20
20
  value: 'en',
21
21
  localePath: 'en',
22
22
  apiValue: 'en-us',
23
23
  rtl: false
24
24
  },
25
25
  {
26
- label: 'TR',
26
+ label: 'Turkish',
27
27
  value: 'tr',
28
28
  localePath: 'tr',
29
29
  apiValue: 'tr-tr',
@@ -61,5 +61,8 @@ module.exports = {
61
61
  ],
62
62
  redis: {
63
63
  defaultExpirationTime: 900 // 15 min
64
- }
64
+ },
65
+ customNotFoundEnabled: false,
66
+ usePzSegment: true,
67
+ commerceRedirectionIgnoreList: ['/users/reset']
65
68
  };
@@ -0,0 +1,28 @@
1
+ declare module '@hookform/resolvers/yup' {
2
+ import { FieldValues, ResolverOptions, ResolverResult, UnpackNestedValue } from 'react-hook-form';
3
+ import * as Yup from 'yup';
4
+ import type Lazy from 'yup/lib/Lazy';
5
+
6
+ type Options<T extends Yup.AnyObjectSchema | Lazy<any>> =
7
+ Parameters<T['validate']>[1];
8
+
9
+ export type Resolver = <
10
+ T extends Yup.AnyObjectSchema | Lazy<any>
11
+ >(
12
+ schema: T,
13
+ schemaOptions?: Options<T>,
14
+ factoryOptions?: {
15
+ mode?: 'async' | 'sync';
16
+ rawValues?: boolean;
17
+ }
18
+ ) => <
19
+ TFieldValues extends FieldValues,
20
+ TContext
21
+ >(
22
+ values: UnpackNestedValue<TFieldValues>,
23
+ context: TContext | undefined,
24
+ options: ResolverOptions<TFieldValues>
25
+ ) => Promise<ResolverResult<TFieldValues>>;
26
+
27
+ export const yupResolver: Resolver;
28
+ }
@@ -1,4 +1,58 @@
1
1
  export * from '@theme/types/widgets';
2
+ import { SignInOptions } from 'next-auth/react';
3
+
4
+ /**
5
+ * Form types for authentication
6
+ */
7
+ export enum FormType {
8
+ login = 'login',
9
+ register = 'register',
10
+ loyaltyRegister = 'loyaltyRegister',
11
+ otpLogin = 'otpLogin'
12
+ }
13
+
14
+ /**
15
+ * Extended SignInOptions with additional form type support for Project Zero Next authentication
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * // For standard login
20
+ * signIn('default', {
21
+ * ...data,
22
+ * formType: FormType.login
23
+ * } as PzSignInOptions);
24
+ *
25
+ * // For standard user registration
26
+ * signIn('default', {
27
+ * ...data,
28
+ * formType: FormType.register
29
+ * } as PzSignInOptions);
30
+ *
31
+ * // For loyalty program registration
32
+ * signIn('default', {
33
+ * ...data,
34
+ * formType: FormType.loyaltyRegister
35
+ * } as PzSignInOptions);
36
+ *
37
+ * // For OTP login
38
+ * signIn('default', {
39
+ * ...data,
40
+ * formType: FormType.otpLogin
41
+ * } as PzSignInOptions);
42
+ * ```
43
+ */
44
+ export interface PzSignInOptions extends SignInOptions<boolean> {
45
+ /**
46
+ * Type of the authentication form being submitted
47
+ *
48
+ * Available options:
49
+ * - `FormType.login` - Standard email/password login
50
+ * - `FormType.register` - Standard user registration
51
+ * - `FormType.loyaltyRegister` - Loyalty program registration (use this for loyalty signups)
52
+ * - `FormType.otpLogin` - OTP-based login via SMS
53
+ */
54
+ formType?: FormType;
55
+ }
2
56
 
3
57
  export type RegisterFormType = {
4
58
  email: string;
@@ -10,14 +64,14 @@ export type RegisterFormType = {
10
64
  kvkk_confirm: boolean;
11
65
  email_allowed: boolean;
12
66
  sms_allowed: boolean;
13
- formType: string;
67
+ formType: FormType;
14
68
  locale: string;
15
69
  };
16
70
 
17
71
  export type LoginFormType = {
18
72
  email: string;
19
73
  password: string;
20
- formType: string;
74
+ formType: FormType;
21
75
  locale: string;
22
76
  };
23
77
 
@@ -25,7 +79,7 @@ export type OtpLoginFormType = {
25
79
  phone: string;
26
80
  code?: string;
27
81
  locale: string;
28
- formType: string;
82
+ formType: FormType;
29
83
  };
30
84
 
31
85
  export enum WIDGET_TYPE {
@@ -71,3 +125,20 @@ export interface SeoProps {
71
125
  ogPriceAmount?: string;
72
126
  ogPriceCurrency?: string;
73
127
  }
128
+
129
+ export interface ModalProps {
130
+ portalId: string;
131
+ children?: React.ReactNode;
132
+ open?: boolean;
133
+ setOpen?: (open: boolean) => void;
134
+ title?: React.ReactNode;
135
+ showCloseButton?: React.ReactNode;
136
+ className?: string;
137
+ overlayClassName?: string;
138
+ headerWrapperClassName?: string;
139
+ titleClassName?: string;
140
+ closeButtonClassName?: string;
141
+ iconName?: string;
142
+ iconSize?: number;
143
+ iconClassName?: string;
144
+ }
@@ -1,9 +1,9 @@
1
1
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
2
- import NextAuth from 'next-auth';
2
+ import 'next-auth';
3
3
 
4
4
  declare module 'next-auth' {
5
5
  interface User {
6
- id?: number;
6
+ id?: string;
7
7
  pk: number;
8
8
  firstName: string;
9
9
  lastName: string;
@@ -0,0 +1,169 @@
1
+ export type WidgetStyle = {
2
+ [breakpoint: string]: Record<string, string>;
3
+ };
4
+
5
+ export type WidgetParent = {
6
+ id: string;
7
+ type: 'container';
8
+ tag: string;
9
+ style: WidgetStyle;
10
+ };
11
+
12
+ export type ImageSizes = {
13
+ mobile?: string;
14
+ tablet?: string;
15
+ desktop?: string;
16
+ [key: string]: string | undefined;
17
+ };
18
+
19
+ export type WidgetAttribute = {
20
+ type:
21
+ | 'image'
22
+ | 'link'
23
+ | 'divider'
24
+ | 'icon'
25
+ | 'text'
26
+ | 'video'
27
+ | 'collection'
28
+ | 'container'
29
+ | 'slider'
30
+ | 'slider-item'
31
+ | string;
32
+ tag: string;
33
+ parentId: string;
34
+ value?: {
35
+ text?: string;
36
+ src?: string;
37
+ alt?: string;
38
+ href?: string;
39
+ title?: string;
40
+ target?: string;
41
+ url?: string;
42
+ type?: string;
43
+ width?: string;
44
+ height?: string;
45
+ autoplay?: boolean;
46
+ controls?: boolean;
47
+ muted?: boolean;
48
+ loop?: boolean;
49
+ sizes?: { [size: string]: string };
50
+ products?: Array<Product>;
51
+ limit?: number;
52
+ mobileSrc?: string;
53
+ tabletSrc?: string;
54
+ desktopSrc?: string;
55
+ mediaQueries?: {
56
+ mobile?: string;
57
+ tablet?: string;
58
+ desktop?: string;
59
+ [key: string]: string | undefined;
60
+ };
61
+ };
62
+ style: WidgetStyle;
63
+ insideCollection?: boolean;
64
+ containerId?: string;
65
+ instanceId?: string;
66
+ items?: number;
67
+ slidesToSlide?: number;
68
+ showDots?: string;
69
+ arrows?: string;
70
+ infinite?: string;
71
+ autoPlay?: string;
72
+ autoPlaySpeed?: number;
73
+ selectedSlideItem?: number;
74
+ sliderItems?: number;
75
+ slider?: any;
76
+ };
77
+
78
+ export type WidgetData = {
79
+ attributes: { [key: string]: WidgetAttribute };
80
+ name: string;
81
+ template: string;
82
+ slug: string;
83
+ parent?: WidgetParent;
84
+ children?: WidgetData[];
85
+ };
86
+
87
+ export type Product = {
88
+ absolute_url: string;
89
+ attribute_set: number;
90
+ attributes: {
91
+ [key: string]: any;
92
+ };
93
+ attributes_kwargs: any;
94
+ base_code: string;
95
+ basket_offers: Array<{
96
+ kwargs: { show_benefit_products: boolean };
97
+ label: string;
98
+ listing_kwargs: {
99
+ [key: string]: any;
100
+ };
101
+ pk: number;
102
+ }>;
103
+ currency_type: string;
104
+ data_source: null;
105
+ item_id?: string;
106
+ extra_attributes: {
107
+ [key: string]: any;
108
+ };
109
+ form_schema: null;
110
+ image?: string;
111
+ in_stock: boolean;
112
+ is_ready_to_basket: boolean;
113
+ name: string;
114
+ pk: number;
115
+ price: string;
116
+ price_type: string;
117
+ product_type: string;
118
+ productimage_set: Array<{
119
+ created_date: Date;
120
+ image: string;
121
+ order: number;
122
+ pk: number;
123
+ specialimage_set: Array<{
124
+ [key: string]: any;
125
+ }>;
126
+ status: string;
127
+ }>;
128
+ productvideo_set: Array<{
129
+ [key: string]: any;
130
+ }>;
131
+ retail_price: string;
132
+ sku: string;
133
+ stock: number;
134
+ unit_type: string;
135
+ created_date: string;
136
+ modified_date: string;
137
+ description?: string;
138
+ quantity: string;
139
+ extra_data: {
140
+ [key: string]: any;
141
+ };
142
+ [key: string]: any;
143
+ };
144
+
145
+ export interface WidgetContentProps {
146
+ widgetData: WidgetData;
147
+ skipParentWrapper?: boolean;
148
+ collectionData?: any[];
149
+ collectionLimit?: number;
150
+ selectedWidget?: any;
151
+ onWidgetClick?: (e: React.MouseEvent) => void;
152
+ designMode?: boolean;
153
+ responsive?: string;
154
+ draggable?: boolean;
155
+ onDragStart?: (e: React.DragEvent) => void;
156
+ onDragOver?: (e: React.DragEvent) => void;
157
+ onDragLeave?: (e: React.DragEvent) => void;
158
+ onDrop?: (e: React.DragEvent) => void;
159
+ }
160
+
161
+ export interface DynamicWidgetContainerProps {
162
+ onRender?: (widgetData: WidgetData) => void;
163
+ customRender?: (
164
+ widgetData: WidgetData
165
+ ) => React.ReactNode | typeof RENDER_NOTHING;
166
+ instanceId?: string;
167
+ }
168
+
169
+ export const RENDER_NOTHING = Symbol('RENDER_NOTHING');