@akinon/projectzero 2.0.0-beta.20 → 2.0.0-beta.22

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 (140) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/app-template/CHANGELOG.md +170 -0
  3. package/app-template/next.config.mjs +0 -1
  4. package/app-template/package.json +31 -30
  5. package/app-template/src/app/[pz]/[...prettyurl]/page.tsx +2 -2
  6. package/app-template/src/app/[pz]/account/layout.tsx +2 -1
  7. package/app-template/src/app/{[commerce]/[locale]/[currency] → [pz]}/blog/[slug]/page.tsx +4 -2
  8. package/app-template/src/app/[pz]/category/[pk]/page.tsx +11 -1
  9. package/app-template/src/app/[pz]/group-product/[pk]/page.tsx +2 -2
  10. package/app-template/src/app/[pz]/layout.tsx +3 -1
  11. package/app-template/src/app/[pz]/list/page.tsx +11 -1
  12. package/app-template/src/app/[pz]/page.tsx +13 -35
  13. package/app-template/src/app/[pz]/pages/[slug]/page.tsx +19 -0
  14. package/app-template/src/app/[pz]/product/[pk]/page.tsx +2 -2
  15. package/app-template/src/app/api/barcode-search/route.ts +1 -1
  16. package/app-template/src/app/api/cache/route.ts +1 -1
  17. package/app-template/src/app/api/image-proxy/route.ts +1 -1
  18. package/app-template/src/app/api/logout/route.ts +1 -1
  19. package/app-template/src/app/api/product-categories/route.ts +1 -1
  20. package/app-template/src/app/api/similar-product-list/route.ts +1 -1
  21. package/app-template/src/app/api/similar-products/route.ts +1 -1
  22. package/app-template/src/app/api/virtual-try-on/route.ts +1 -1
  23. package/app-template/src/app/api/web-vitals/route.ts +1 -1
  24. package/app-template/src/components/quantity-selector.tsx +16 -4
  25. package/app-template/src/components/widget-content.tsx +3 -3
  26. package/app-template/src/routes/index.ts +6 -6
  27. package/app-template/src/utils/__tests__/theme-page-context.test.ts +145 -0
  28. package/app-template/src/utils/theme-page-context.ts +309 -0
  29. package/app-template/src/views/basket/basket-item.tsx +107 -691
  30. package/app-template/src/views/basket/index.ts +0 -2
  31. package/app-template/src/views/basket/summary.tsx +75 -496
  32. package/app-template/src/views/breadcrumb.tsx +38 -13
  33. package/app-template/src/views/category/category-header.tsx +66 -289
  34. package/app-template/src/views/category/category-info.tsx +24 -173
  35. package/app-template/src/views/category/filters/index.tsx +48 -208
  36. package/app-template/src/views/category/layout.tsx +5 -7
  37. package/app-template/src/views/checkout/index.tsx +0 -5
  38. package/app-template/src/views/checkout/steps/payment/index.tsx +2 -5
  39. package/app-template/src/views/checkout/steps/payment/options/credit-card/index.tsx +1 -72
  40. package/app-template/src/views/checkout/steps/payment/payment-option-buttons.tsx +40 -171
  41. package/app-template/src/views/checkout/steps/shipping/address-box.tsx +12 -74
  42. package/app-template/src/views/checkout/steps/shipping/addresses.tsx +45 -128
  43. package/app-template/src/views/checkout/steps/shipping/shipping-options.tsx +27 -232
  44. package/app-template/src/views/checkout/summary.tsx +29 -303
  45. package/app-template/src/views/footer.tsx +13 -415
  46. package/app-template/src/views/guest-login/index.tsx +1 -1
  47. package/app-template/src/views/header/action-menu.tsx +45 -277
  48. package/app-template/src/views/header/band.tsx +21 -6
  49. package/app-template/src/views/header/index.tsx +47 -109
  50. package/app-template/src/views/header/mini-basket.tsx +45 -820
  51. package/app-template/src/views/header/navbar.tsx +111 -178
  52. package/app-template/src/views/header/search/index.tsx +32 -71
  53. package/app-template/src/views/header/search/results.tsx +65 -127
  54. package/app-template/src/views/product/accordion-wrapper.tsx +43 -135
  55. package/app-template/src/views/product/index.ts +1 -1
  56. package/app-template/src/views/product/layout.tsx +7 -2
  57. package/app-template/src/views/product/misc-buttons.tsx +25 -339
  58. package/app-template/src/views/product/product-actions.tsx +8 -137
  59. package/app-template/src/views/product/product-info.tsx +31 -69
  60. package/app-template/src/views/product/product-share.tsx +8 -11
  61. package/app-template/src/views/product/slider.tsx +79 -117
  62. package/app-template/src/views/product-item/index.tsx +46 -119
  63. package/app-template/src/widgets/footer-social.tsx +16 -47
  64. package/app-template/src/widgets/footer-subscription/index.tsx +17 -183
  65. package/codemods/migrate-auth-v5/index.js +339 -0
  66. package/codemods/migrate-auth-v5/transform.js +86 -0
  67. package/dist/commands/plugins.js +23 -2
  68. package/package.json +1 -1
  69. package/app-template/src/app/[commerce]/[locale]/[currency]/pages/[slug]/page.tsx +0 -15
  70. package/app-template/src/views/basket/basket-summary-context.tsx +0 -560
  71. package/app-template/src/views/basket/designer-context.tsx +0 -617
  72. package/app-template/src/views/breadcrumb/breadcrumb-client.tsx +0 -190
  73. package/app-template/src/views/breadcrumb/breadcrumb-registrar.tsx +0 -286
  74. package/app-template/src/views/breadcrumb/constants.ts +0 -15
  75. package/app-template/src/views/breadcrumb/index.tsx +0 -127
  76. package/app-template/src/views/category/native-widget-context.tsx +0 -257
  77. package/app-template/src/views/category/product-list-registrar.tsx +0 -665
  78. package/app-template/src/views/checkout/checkout-address-registrar.tsx +0 -254
  79. package/app-template/src/views/checkout/checkout-buttons-registrar.tsx +0 -183
  80. package/app-template/src/views/checkout/checkout-delivery-method-registrar.tsx +0 -259
  81. package/app-template/src/views/checkout/checkout-payment-options-registrar.tsx +0 -253
  82. package/app-template/src/views/checkout/checkout-summary-registrar.tsx +0 -183
  83. package/app-template/src/views/checkout/constants.ts +0 -5
  84. package/app-template/src/views/checkout/steps/payment/options/masterpass-rest.tsx +0 -15
  85. package/app-template/src/views/checkout/steps/payment/options/saved-card.tsx +0 -18
  86. package/app-template/src/views/footer/footer-app-banner-context.tsx +0 -326
  87. package/app-template/src/views/footer/footer-bottom-context.tsx +0 -215
  88. package/app-template/src/views/footer/footer-bottom-wrapper.tsx +0 -74
  89. package/app-template/src/views/footer/footer-layout-constants.ts +0 -35
  90. package/app-template/src/views/footer/footer-layout-registrar.tsx +0 -342
  91. package/app-template/src/views/footer/footer-layout-switcher.tsx +0 -110
  92. package/app-template/src/views/footer/footer-menu-context.tsx +0 -211
  93. package/app-template/src/views/footer/footer-native-widgets.tsx +0 -60
  94. package/app-template/src/views/footer/footer-social-context.tsx +0 -254
  95. package/app-template/src/views/footer/footer-subscription-context.tsx +0 -210
  96. package/app-template/src/views/footer/footer-utils.ts +0 -43
  97. package/app-template/src/views/footer/footer-value-props-context.tsx +0 -326
  98. package/app-template/src/views/footer/logo-settings.ts +0 -183
  99. package/app-template/src/views/footer/native-widget-config.ts +0 -262
  100. package/app-template/src/views/footer/subscription-settings.ts +0 -122
  101. package/app-template/src/views/footer/use-footer-logo.ts +0 -162
  102. package/app-template/src/views/header/designer-context.tsx +0 -261
  103. package/app-template/src/views/header/header-announcement-registrar.tsx +0 -267
  104. package/app-template/src/views/header/header-client-wrapper.tsx +0 -496
  105. package/app-template/src/views/header/header-content.tsx +0 -1026
  106. package/app-template/src/views/header/header-currency-registrar.tsx +0 -348
  107. package/app-template/src/views/header/header-icons-context.tsx +0 -262
  108. package/app-template/src/views/header/header-language-registrar.tsx +0 -348
  109. package/app-template/src/views/header/header-layout-context.tsx +0 -143
  110. package/app-template/src/views/header/header-layout-registrar.tsx +0 -658
  111. package/app-template/src/views/header/header-logo-context.tsx +0 -228
  112. package/app-template/src/views/header/header-logo.tsx +0 -118
  113. package/app-template/src/views/header/header-mini-basket-context.tsx +0 -524
  114. package/app-template/src/views/header/header-search-registrar.tsx +0 -511
  115. package/app-template/src/views/header/header-text-slider-registrar.tsx +0 -382
  116. package/app-template/src/views/header/inline-search.tsx +0 -262
  117. package/app-template/src/views/header/navbar-menu-context.tsx +0 -219
  118. package/app-template/src/views/header/search/search-input.tsx +0 -61
  119. package/app-template/src/views/header/server-settings-parser.ts +0 -1105
  120. package/app-template/src/views/header/use-header-icons.ts +0 -241
  121. package/app-template/src/views/header/use-header-logo.ts +0 -213
  122. package/app-template/src/views/header/use-navbar-menu.ts +0 -179
  123. package/app-template/src/views/product/accordion-section.tsx +0 -61
  124. package/app-template/src/views/product/custom-button-group.tsx +0 -69
  125. package/app-template/src/views/product/favorites-button-section.tsx +0 -69
  126. package/app-template/src/views/product/find-in-store-section.tsx +0 -60
  127. package/app-template/src/views/product/product-info-section.tsx +0 -140
  128. package/app-template/src/views/product/quantity-section.tsx +0 -73
  129. package/app-template/src/views/product/sale-tag.tsx +0 -10
  130. package/app-template/src/views/product/share-section.tsx +0 -357
  131. package/app-template/src/views/product/variants-section.tsx +0 -126
  132. package/app-template/src/views/product-detail/constants.ts +0 -272
  133. package/app-template/src/views/product-detail/index.ts +0 -10
  134. package/app-template/src/views/product-detail/product-detail-registrar.tsx +0 -616
  135. package/app-template/src/widgets/footer-app-banner.tsx +0 -444
  136. package/app-template/src/widgets/footer-bottom.tsx +0 -127
  137. package/app-template/src/widgets/footer-menu-compact.tsx +0 -238
  138. package/app-template/src/widgets/footer-menu-two.tsx +0 -298
  139. package/app-template/src/widgets/footer-social-client.tsx +0 -251
  140. package/app-template/src/widgets/footer-value-props.tsx +0 -201
package/CHANGELOG.md CHANGED
@@ -1,7 +1,21 @@
1
1
  # @akinon/projectzero
2
2
 
3
+ ## 2.0.0-beta.22
4
+
5
+ ### Patch Changes
6
+
7
+ - 11eae558: ZERO-4336: Add migrate-auth-v5 codemod for brand projects
8
+
9
+ ## 2.0.0-beta.21
10
+
3
11
  ## 2.0.0-beta.20
4
12
 
13
+ ## 1.126.0
14
+
15
+ ## 1.125.2
16
+
17
+ ## 1.125.1
18
+
5
19
  ## 1.125.0
6
20
 
7
21
  ## 1.124.0
@@ -1,5 +1,79 @@
1
1
  # projectzeronext
2
2
 
3
+ ## 2.0.0-beta.22
4
+
5
+ ### Patch Changes
6
+
7
+ - @akinon/next@2.0.0-beta.22
8
+ - @akinon/pz-akifast@2.0.0-beta.22
9
+ - @akinon/pz-apple-pay@2.0.0-beta.22
10
+ - @akinon/pz-b2b@2.0.0-beta.22
11
+ - @akinon/pz-basket-gift-pack@2.0.0-beta.22
12
+ - @akinon/pz-bkm@2.0.0-beta.22
13
+ - @akinon/pz-checkout-gift-pack@2.0.0-beta.22
14
+ - @akinon/pz-click-collect@2.0.0-beta.22
15
+ - @akinon/pz-credit-payment@2.0.0-beta.22
16
+ - @akinon/pz-cybersource-uc@2.0.0-beta.22
17
+ - @akinon/pz-flow-payment@2.0.0-beta.22
18
+ - @akinon/pz-google-pay@2.0.0-beta.22
19
+ - @akinon/pz-gpay@2.0.0-beta.22
20
+ - @akinon/pz-haso@2.0.0-beta.22
21
+ - @akinon/pz-hepsipay@2.0.0-beta.22
22
+ - @akinon/pz-masterpass@2.0.0-beta.22
23
+ - @akinon/pz-masterpass-rest@2.0.0-beta.22
24
+ - @akinon/pz-multi-basket@2.0.0-beta.22
25
+ - @akinon/pz-one-click-checkout@2.0.0-beta.22
26
+ - @akinon/pz-otp@2.0.0-beta.22
27
+ - @akinon/pz-pay-on-delivery@2.0.0-beta.22
28
+ - @akinon/pz-saved-card@2.0.0-beta.22
29
+ - @akinon/pz-similar-products@2.0.0-beta.22
30
+ - @akinon/pz-tabby-extension@2.0.0-beta.22
31
+ - @akinon/pz-tamara-extension@2.0.0-beta.22
32
+ - @akinon/pz-theme@2.0.0-beta.22
33
+ - @akinon/pz-virtual-try-on@2.0.0-beta.22
34
+
35
+ ## 2.0.0-beta.21
36
+
37
+ ### Patch Changes
38
+
39
+ - 5d44ff77: ZERO-4312: Extract ThemePlaceholder system into new @akinon/pz-theme package and strip native widget code
40
+
41
+ Introduce a dedicated `@akinon/pz-theme` package that contains the ThemePlaceholder system (CMS-driven sections/blocks, designer features, utilities). Remove native widget registration infrastructure from both `@akinon/pz-theme` and `projectzeronext` so the beta branch can be merged to main with only stable ThemePlaceholder functionality. Native widget integrations will be reintroduced via `@akinon/pz-theme` once they stabilize on the `theme-editor` branch.
42
+
43
+ Consumers should update imports:
44
+
45
+ - `@akinon/next/components/theme-editor/*` -> `@akinon/pz-theme/src/*`
46
+ - Add `@akinon/pz-theme` to package.json dependencies (matching `@akinon/next` version)
47
+
48
+ - Updated dependencies [5d44ff77]
49
+ - @akinon/pz-theme@2.0.0-beta.21
50
+ - @akinon/next@2.0.0-beta.21
51
+ - @akinon/pz-virtual-try-on@2.0.0-beta.21
52
+ - @akinon/pz-akifast@2.0.0-beta.21
53
+ - @akinon/pz-apple-pay@2.0.0-beta.21
54
+ - @akinon/pz-b2b@2.0.0-beta.21
55
+ - @akinon/pz-basket-gift-pack@2.0.0-beta.21
56
+ - @akinon/pz-bkm@2.0.0-beta.21
57
+ - @akinon/pz-checkout-gift-pack@2.0.0-beta.21
58
+ - @akinon/pz-click-collect@2.0.0-beta.21
59
+ - @akinon/pz-credit-payment@2.0.0-beta.21
60
+ - @akinon/pz-cybersource-uc@2.0.0-beta.21
61
+ - @akinon/pz-flow-payment@2.0.0-beta.21
62
+ - @akinon/pz-google-pay@2.0.0-beta.21
63
+ - @akinon/pz-gpay@2.0.0-beta.21
64
+ - @akinon/pz-haso@2.0.0-beta.21
65
+ - @akinon/pz-hepsipay@2.0.0-beta.21
66
+ - @akinon/pz-masterpass@2.0.0-beta.21
67
+ - @akinon/pz-masterpass-rest@2.0.0-beta.21
68
+ - @akinon/pz-multi-basket@2.0.0-beta.21
69
+ - @akinon/pz-one-click-checkout@2.0.0-beta.21
70
+ - @akinon/pz-otp@2.0.0-beta.21
71
+ - @akinon/pz-pay-on-delivery@2.0.0-beta.21
72
+ - @akinon/pz-saved-card@2.0.0-beta.21
73
+ - @akinon/pz-similar-products@2.0.0-beta.21
74
+ - @akinon/pz-tabby-extension@2.0.0-beta.21
75
+ - @akinon/pz-tamara-extension@2.0.0-beta.21
76
+
3
77
  ## 2.0.0-beta.20
4
78
 
5
79
  ### Minor Changes
@@ -46,6 +120,102 @@
46
120
  - @akinon/pz-tabby-extension@2.0.0-beta.20
47
121
  - @akinon/pz-tamara-extension@2.0.0-beta.20
48
122
 
123
+ ## 1.126.0
124
+
125
+ ### Patch Changes
126
+
127
+ - Updated dependencies [46d787e6]
128
+ - @akinon/pz-flow-payment@1.126.0
129
+ - @akinon/next@1.126.0
130
+ - @akinon/pz-akifast@1.126.0
131
+ - @akinon/pz-apple-pay@1.126.0
132
+ - @akinon/pz-b2b@1.126.0
133
+ - @akinon/pz-basket-gift-pack@1.126.0
134
+ - @akinon/pz-bkm@1.126.0
135
+ - @akinon/pz-checkout-gift-pack@1.126.0
136
+ - @akinon/pz-click-collect@1.126.0
137
+ - @akinon/pz-credit-payment@1.126.0
138
+ - @akinon/pz-cybersource-uc@1.126.0
139
+ - @akinon/pz-google-pay@1.126.0
140
+ - @akinon/pz-gpay@1.126.0
141
+ - @akinon/pz-haso@1.126.0
142
+ - @akinon/pz-hepsipay@1.126.0
143
+ - @akinon/pz-masterpass@1.126.0
144
+ - @akinon/pz-masterpass-rest@1.126.0
145
+ - @akinon/pz-multi-basket@1.126.0
146
+ - @akinon/pz-one-click-checkout@1.126.0
147
+ - @akinon/pz-otp@1.126.0
148
+ - @akinon/pz-pay-on-delivery@1.126.0
149
+ - @akinon/pz-saved-card@1.126.0
150
+ - @akinon/pz-similar-products@1.126.0
151
+ - @akinon/pz-tabby-extension@1.126.0
152
+ - @akinon/pz-tamara-extension@1.126.0
153
+ - @akinon/pz-virtual-try-on@1.126.0
154
+
155
+ ## 1.125.2
156
+
157
+ ### Patch Changes
158
+
159
+ - Updated dependencies [0220a136]
160
+ - @akinon/pz-flow-payment@1.125.2
161
+ - @akinon/next@1.125.2
162
+ - @akinon/pz-akifast@1.125.2
163
+ - @akinon/pz-apple-pay@1.125.2
164
+ - @akinon/pz-b2b@1.125.2
165
+ - @akinon/pz-basket-gift-pack@1.125.2
166
+ - @akinon/pz-bkm@1.125.2
167
+ - @akinon/pz-checkout-gift-pack@1.125.2
168
+ - @akinon/pz-click-collect@1.125.2
169
+ - @akinon/pz-credit-payment@1.125.2
170
+ - @akinon/pz-cybersource-uc@1.125.2
171
+ - @akinon/pz-google-pay@1.125.2
172
+ - @akinon/pz-gpay@1.125.2
173
+ - @akinon/pz-haso@1.125.2
174
+ - @akinon/pz-hepsipay@1.125.2
175
+ - @akinon/pz-masterpass@1.125.2
176
+ - @akinon/pz-masterpass-rest@1.125.2
177
+ - @akinon/pz-multi-basket@1.125.2
178
+ - @akinon/pz-one-click-checkout@1.125.2
179
+ - @akinon/pz-otp@1.125.2
180
+ - @akinon/pz-pay-on-delivery@1.125.2
181
+ - @akinon/pz-saved-card@1.125.2
182
+ - @akinon/pz-similar-products@1.125.2
183
+ - @akinon/pz-tabby-extension@1.125.2
184
+ - @akinon/pz-tamara-extension@1.125.2
185
+ - @akinon/pz-virtual-try-on@1.125.2
186
+
187
+ ## 1.125.1
188
+
189
+ ### Patch Changes
190
+
191
+ - Updated dependencies [06da9a95]
192
+ - @akinon/next@1.125.1
193
+ - @akinon/pz-virtual-try-on@1.125.1
194
+ - @akinon/pz-akifast@1.125.1
195
+ - @akinon/pz-apple-pay@1.125.1
196
+ - @akinon/pz-b2b@1.125.1
197
+ - @akinon/pz-basket-gift-pack@1.125.1
198
+ - @akinon/pz-bkm@1.125.1
199
+ - @akinon/pz-checkout-gift-pack@1.125.1
200
+ - @akinon/pz-click-collect@1.125.1
201
+ - @akinon/pz-credit-payment@1.125.1
202
+ - @akinon/pz-cybersource-uc@1.125.1
203
+ - @akinon/pz-flow-payment@1.125.1
204
+ - @akinon/pz-google-pay@1.125.1
205
+ - @akinon/pz-gpay@1.125.1
206
+ - @akinon/pz-haso@1.125.1
207
+ - @akinon/pz-hepsipay@1.125.1
208
+ - @akinon/pz-masterpass@1.125.1
209
+ - @akinon/pz-masterpass-rest@1.125.1
210
+ - @akinon/pz-multi-basket@1.125.1
211
+ - @akinon/pz-one-click-checkout@1.125.1
212
+ - @akinon/pz-otp@1.125.1
213
+ - @akinon/pz-pay-on-delivery@1.125.1
214
+ - @akinon/pz-saved-card@1.125.1
215
+ - @akinon/pz-similar-products@1.125.1
216
+ - @akinon/pz-tabby-extension@1.125.1
217
+ - @akinon/pz-tamara-extension@1.125.1
218
+
49
219
  ## 1.125.0
50
220
 
51
221
  ### Patch Changes
@@ -4,7 +4,6 @@ import withPzConfig from '@akinon/next/with-pz-config.js';
4
4
 
5
5
  /** @type {import('next').NextConfig} */
6
6
  const nextConfig = {
7
- // Your Next.js config to override defaults
8
7
  rewrites: async () => {
9
8
  return [
10
9
  {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "projectzeronext",
3
- "version": "2.0.0-beta.20",
3
+ "version": "2.0.0-beta.22",
4
4
  "private": true,
5
5
  "license": "MIT",
6
6
  "scripts": {
@@ -24,32 +24,33 @@
24
24
  "test:middleware": "jest middleware-matcher.test.ts --bail"
25
25
  },
26
26
  "dependencies": {
27
- "@akinon/next": "2.0.0-beta.20",
28
- "@akinon/pz-akifast": "2.0.0-beta.20",
29
- "@akinon/pz-apple-pay": "2.0.0-beta.20",
30
- "@akinon/pz-b2b": "2.0.0-beta.20",
31
- "@akinon/pz-basket-gift-pack": "2.0.0-beta.20",
32
- "@akinon/pz-bkm": "2.0.0-beta.20",
33
- "@akinon/pz-checkout-gift-pack": "2.0.0-beta.20",
34
- "@akinon/pz-click-collect": "2.0.0-beta.20",
35
- "@akinon/pz-credit-payment": "2.0.0-beta.20",
36
- "@akinon/pz-cybersource-uc": "2.0.0-beta.20",
37
- "@akinon/pz-flow-payment": "2.0.0-beta.20",
38
- "@akinon/pz-google-pay": "2.0.0-beta.20",
39
- "@akinon/pz-gpay": "2.0.0-beta.20",
40
- "@akinon/pz-haso": "2.0.0-beta.20",
41
- "@akinon/pz-hepsipay": "2.0.0-beta.20",
42
- "@akinon/pz-masterpass": "2.0.0-beta.20",
43
- "@akinon/pz-masterpass-rest": "2.0.0-beta.20",
44
- "@akinon/pz-multi-basket": "2.0.0-beta.20",
45
- "@akinon/pz-one-click-checkout": "2.0.0-beta.20",
46
- "@akinon/pz-otp": "2.0.0-beta.20",
47
- "@akinon/pz-pay-on-delivery": "2.0.0-beta.20",
48
- "@akinon/pz-saved-card": "2.0.0-beta.20",
49
- "@akinon/pz-similar-products": "2.0.0-beta.20",
50
- "@akinon/pz-tabby-extension": "2.0.0-beta.20",
51
- "@akinon/pz-tamara-extension": "2.0.0-beta.20",
52
- "@akinon/pz-virtual-try-on": "2.0.0-beta.20",
27
+ "@akinon/next": "2.0.0-beta.22",
28
+ "@akinon/pz-akifast": "2.0.0-beta.22",
29
+ "@akinon/pz-apple-pay": "2.0.0-beta.22",
30
+ "@akinon/pz-b2b": "2.0.0-beta.22",
31
+ "@akinon/pz-basket-gift-pack": "2.0.0-beta.22",
32
+ "@akinon/pz-bkm": "2.0.0-beta.22",
33
+ "@akinon/pz-checkout-gift-pack": "2.0.0-beta.22",
34
+ "@akinon/pz-click-collect": "2.0.0-beta.22",
35
+ "@akinon/pz-credit-payment": "2.0.0-beta.22",
36
+ "@akinon/pz-cybersource-uc": "2.0.0-beta.22",
37
+ "@akinon/pz-flow-payment": "2.0.0-beta.22",
38
+ "@akinon/pz-google-pay": "2.0.0-beta.22",
39
+ "@akinon/pz-gpay": "2.0.0-beta.22",
40
+ "@akinon/pz-haso": "2.0.0-beta.22",
41
+ "@akinon/pz-hepsipay": "2.0.0-beta.22",
42
+ "@akinon/pz-masterpass": "2.0.0-beta.22",
43
+ "@akinon/pz-masterpass-rest": "2.0.0-beta.22",
44
+ "@akinon/pz-multi-basket": "2.0.0-beta.22",
45
+ "@akinon/pz-one-click-checkout": "2.0.0-beta.22",
46
+ "@akinon/pz-otp": "2.0.0-beta.22",
47
+ "@akinon/pz-pay-on-delivery": "2.0.0-beta.22",
48
+ "@akinon/pz-saved-card": "2.0.0-beta.22",
49
+ "@akinon/pz-similar-products": "2.0.0-beta.22",
50
+ "@akinon/pz-tabby-extension": "2.0.0-beta.22",
51
+ "@akinon/pz-tamara-extension": "2.0.0-beta.22",
52
+ "@akinon/pz-theme": "2.0.0-beta.22",
53
+ "@akinon/pz-virtual-try-on": "2.0.0-beta.22",
53
54
  "@hookform/resolvers": "2.9.0",
54
55
  "@next/third-parties": "16.1.6",
55
56
  "@react-google-maps/api": "2.17.1",
@@ -60,8 +61,8 @@
60
61
  "next-pwa": "5.6.0",
61
62
  "pino": "8.11.0",
62
63
  "postcss": "8.4.49",
63
- "react": "19.2.4",
64
- "react-dom": "19.2.4",
64
+ "react": "19.2.5",
65
+ "react-dom": "19.2.5",
65
66
  "react-google-recaptcha": "2.1.0",
66
67
  "react-hook-form": "7.71.2",
67
68
  "react-intersection-observer": "9.4.0",
@@ -72,7 +73,7 @@
72
73
  "yup": "0.32.11"
73
74
  },
74
75
  "devDependencies": {
75
- "@akinon/eslint-plugin-projectzero": "2.0.0-beta.20",
76
+ "@akinon/eslint-plugin-projectzero": "2.0.0-beta.22",
76
77
  "@semantic-release/changelog": "6.0.2",
77
78
  "@semantic-release/exec": "6.0.3",
78
79
  "@semantic-release/git": "10.0.1",
@@ -1,5 +1,5 @@
1
1
  import { URLS } from '@akinon/next/data/urls';
2
- import { Metadata, PageProps } from '@akinon/next/types';
2
+ import { Metadata, AsyncPageProps } from '@akinon/next/types';
3
3
  import logger from '@akinon/next/utils/log';
4
4
  import { notFound } from 'next/navigation';
5
5
 
@@ -56,7 +56,7 @@ const resolvePrettyUrlHandler =
56
56
  return prettyUrlResult;
57
57
  };
58
58
 
59
- export async function generateMetadata(props: PageProps) {
59
+ export async function generateMetadata(props: AsyncPageProps) {
60
60
  const params = await props.params;
61
61
  let result: Metadata = {};
62
62
  const { prettyurl } = params;
@@ -1,5 +1,6 @@
1
1
  import AccountBackButton from '@theme/views/account/back-button';
2
2
  import AccountMenu from '@theme/views/account/account-menu';
3
+ import ThemePlaceholder from '@akinon/pz-theme/src/theme-placeholder';
3
4
  import { auth } from 'auth';
4
5
  import { ROUTES } from 'routes';
5
6
  import { redirect } from '@akinon/next/utils/redirect';
@@ -20,7 +21,7 @@ export default async function AccountLayout({
20
21
  <AccountMenu />
21
22
  <div className="w-full flex-1">
22
23
  <AccountBackButton />
23
-
24
+ <ThemePlaceholder slug="account-page-body" />
24
25
  {children}
25
26
  </div>
26
27
  </div>
@@ -3,9 +3,10 @@
3
3
  import { Image } from '@akinon/next/components';
4
4
  import { useGetWidgetQuery } from '@akinon/next/data/client/misc';
5
5
  import { useLocalization } from '@akinon/next/hooks/use-localization';
6
- import { PageProps, WidgetResultType } from '@akinon/next/types';
6
+ import { WidgetResultType } from '@akinon/next/types';
7
7
  import { Icon, Link, LoaderSpinner } from '@theme/components';
8
8
  import { formatDateToMonthYear } from '@theme/utils/formatDate';
9
+ import { useParams } from 'next/navigation';
9
10
 
10
11
  interface BlogItemKwargs {
11
12
  url: string;
@@ -26,7 +27,8 @@ type BlogType = {
26
27
  date: blogItem;
27
28
  };
28
29
 
29
- export default function Page({ params }: PageProps<{ slug: string }>) {
30
+ export default function Page() {
31
+ const params = useParams<{ slug: string }>();
30
32
  const { locale, t } = useLocalization();
31
33
  const slug = params.slug;
32
34
  const { data, isLoading } = useGetWidgetQuery(slug) as ReturnType<
@@ -2,6 +2,7 @@ import { getCategoryData } from '@akinon/next/data/server';
2
2
  import { withSegmentDefaults } from '@akinon/next/hocs/server';
3
3
  import { ResolvedPageProps } from '@akinon/next/types';
4
4
  import CategoryLayout from '@theme/views/category/layout';
5
+ import { buildListingPageContext } from '@theme/utils/theme-page-context';
5
6
  import { notFound } from 'next/navigation';
6
7
 
7
8
  async function Page({ params, searchParams }: ResolvedPageProps<{ pk: number }>) {
@@ -13,7 +14,16 @@ async function Page({ params, searchParams }: ResolvedPageProps<{ pk: number }>)
13
14
 
14
15
  return (
15
16
  <>
16
- <CategoryLayout data={data} breadcrumbData={breadcrumbData} />
17
+ <CategoryLayout
18
+ data={data}
19
+ breadcrumbData={breadcrumbData}
20
+ pageContext={buildListingPageContext({
21
+ data,
22
+ breadcrumbData,
23
+ pageType: 'category',
24
+ path: data.category?.absolute_url
25
+ })}
26
+ />
17
27
  </>
18
28
  );
19
29
  } catch (error: unknown) {
@@ -2,12 +2,12 @@ import ProductLayout from '@theme/views/product/layout';
2
2
  import { ProductGroupInfo } from '@theme/views/product';
3
3
  import { getProductData, getWidgetData } from '@akinon/next/data/server';
4
4
  import { withSegmentDefaults } from '@akinon/next/hocs/server';
5
- import { PageProps, ResolvedPageProps, Metadata } from '@akinon/next/types';
5
+ import { AsyncPageProps, ResolvedPageProps, Metadata } from '@akinon/next/types';
6
6
  import { generateJsonLd } from '@theme/utils/generate-jsonld';
7
7
  import { notFound } from 'next/navigation';
8
8
 
9
9
  export async function generateMetadata(
10
- props: PageProps<{ pk: number }>
10
+ props: AsyncPageProps<{ pk: number }>
11
11
  ) {
12
12
  const params = await props.params;
13
13
  const searchParams = await props.searchParams;
@@ -13,6 +13,7 @@ import MobileAppToggler from '@akinon/next/components/mobile-app-toggler';
13
13
  import pwaTags from '@theme/components/pwa-tags';
14
14
  import type { Viewport } from 'next';
15
15
  import settings from '@theme/settings';
16
+ import RouteHandler from '@theme/components/route-handler';
16
17
 
17
18
  export const viewport: Viewport = {
18
19
  width: 'device-width',
@@ -49,12 +50,13 @@ async function RootLayout({ locale, translations, children }: ResolvedRootLayout
49
50
  <body className="overflow-x-hidden">
50
51
  <PzRoot translations={translations} locale={locale.value}>
51
52
  <ClientRoot>
52
- <div className="overflow-x-hidden">
53
+ <div className="overflow-x-clip">
53
54
  <MobileAppToggler>
54
55
  <Header />
55
56
  </MobileAppToggler>
56
57
  <main>
57
58
  {children}
59
+ <RouteHandler />
58
60
  <RootModal />
59
61
  </main>
60
62
  <MobileAppToggler>
@@ -2,13 +2,23 @@ import { getListData } from '@akinon/next/data/server';
2
2
  import { withSegmentDefaults } from '@akinon/next/hocs/server';
3
3
  import { ResolvedPageProps } from '@akinon/next/types';
4
4
  import CategoryLayout from '@theme/views/category/layout';
5
+ import { ROUTES } from '@theme/routes';
6
+ import { buildListingPageContext } from '@theme/utils/theme-page-context';
5
7
 
6
8
  async function Page({ searchParams }: ResolvedPageProps) {
7
9
  const data = await getListData({ searchParams });
10
+ const pageType = data.search_text ? 'search' : 'plp';
8
11
 
9
12
  return (
10
13
  <>
11
- <CategoryLayout data={data} />
14
+ <CategoryLayout
15
+ data={data}
16
+ pageContext={buildListingPageContext({
17
+ data,
18
+ pageType,
19
+ path: ROUTES.LIST
20
+ })}
21
+ />
12
22
  </>
13
23
  );
14
24
  }
@@ -1,46 +1,24 @@
1
1
  import 'server-only';
2
2
 
3
- import { HOME_WIDGETS } from '@theme/widgets';
4
- import { getWidgetData } from '@akinon/next/data/server';
5
3
  import { withSegmentDefaults } from '@akinon/next/hocs/server';
6
- import LazyComponent from '@akinon/next/components/lazy-component';
7
-
8
- type HomeWidgetOrderType = {
9
- widget_order: Array<{
10
- value: { item_slug: string };
11
- kwargs: { value: object; data_type: string };
12
- }>;
13
- };
4
+ import ThemePlaceholder from '@akinon/pz-theme/src/theme-placeholder';
5
+ import { buildHomepagePageContext } from '@theme/utils/theme-page-context';
14
6
 
15
7
  export const dynamic = 'force-static';
16
8
  export const revalidate = 600;
17
9
 
18
- async function Page() {
19
- const data = await getWidgetData<HomeWidgetOrderType>({
20
- slug: 'home-widget-order'
21
- });
22
-
23
- if (!data?.attributes?.widget_order) {
24
- return null;
25
- }
26
-
27
- return data.attributes.widget_order.map((widget, index) => {
28
- const Widget = HOME_WIDGETS[widget.value.item_slug];
29
-
30
- if (Widget) {
31
- if (index > 2) {
32
- return (
33
- <LazyComponent key={widget.value.item_slug} className="min-h-[150px]">
34
- <Widget />
35
- </LazyComponent>
36
- );
37
- }
38
-
39
- return <Widget key={widget.value.item_slug} />;
40
- }
10
+ const getPlaceholderSlug = (baseSlug: string) => {
11
+ const isDevelopment = process.env.NODE_ENV === 'development';
12
+ return isDevelopment ? `${baseSlug}-dev` : baseSlug;
13
+ };
41
14
 
42
- return null;
43
- });
15
+ async function Page() {
16
+ return (
17
+ <ThemePlaceholder
18
+ slug={getPlaceholderSlug('homepage-body-new')}
19
+ pageContext={buildHomepagePageContext()}
20
+ />
21
+ );
44
22
  }
45
23
 
46
24
  export async function generateStaticParams() {
@@ -0,0 +1,19 @@
1
+ import ThemePlaceholder from '@akinon/pz-theme/src/theme-placeholder';
2
+ import { withSegmentDefaults } from '@akinon/next/hocs/server';
3
+ import { ResolvedPageProps } from '@akinon/next/types';
4
+ import { buildCustomPageContext } from '@theme/utils/theme-page-context';
5
+
6
+ export const dynamic = 'force-dynamic';
7
+
8
+ async function Page({ params }: ResolvedPageProps<{ slug: string }>) {
9
+ return (
10
+ <div className="min-h-screen">
11
+ <ThemePlaceholder
12
+ slug={`page-${params.slug}`}
13
+ pageContext={buildCustomPageContext(params.slug)}
14
+ />
15
+ </div>
16
+ );
17
+ }
18
+
19
+ export default withSegmentDefaults(Page, { segmentType: 'page' });
@@ -1,13 +1,13 @@
1
1
  import { getProductData, getWidgetData } from '@akinon/next/data/server';
2
2
  import { withSegmentDefaults } from '@akinon/next/hocs/server';
3
- import { PageProps, ResolvedPageProps, Metadata } from '@akinon/next/types';
3
+ import { AsyncPageProps, ResolvedPageProps, Metadata } from '@akinon/next/types';
4
4
  import { generateJsonLd } from '@theme/utils/generate-jsonld';
5
5
  import { AccordionWrapper, ProductInfo } from '@theme/views/product';
6
6
  import ProductLayout from '@theme/views/product/layout';
7
7
  import { notFound } from 'next/navigation';
8
8
 
9
9
  export async function generateMetadata(
10
- props: PageProps<{ pk: number }>
10
+ props: AsyncPageProps<{ pk: number }>
11
11
  ) {
12
12
  const params = await props.params;
13
13
  const searchParams = await props.searchParams;
@@ -1 +1 @@
1
- export * from '@akinon/next/api/barcode-search';
1
+ export { GET } from "@akinon/next/api/barcode-search";
@@ -1 +1 @@
1
- export * from '@akinon/next/api/cache';
1
+ export { POST, PUT } from "@akinon/next/api/cache";
@@ -1 +1 @@
1
- export * from '@akinon/next/api/image-proxy';
1
+ export { GET, POST } from "@akinon/next/api/image-proxy";
@@ -1 +1 @@
1
- export * from '@akinon/next/api/logout';
1
+ export { POST } from "@akinon/next/api/logout";
@@ -1 +1 @@
1
- export * from '@akinon/next/api/product-categories';
1
+ export { GET } from "@akinon/next/api/product-categories";
@@ -1 +1 @@
1
- export * from '@akinon/next/api/similar-product-list';
1
+ export { GET } from "@akinon/next/api/similar-product-list";
@@ -1 +1 @@
1
- export * from '@akinon/next/api/similar-products';
1
+ export { GET, POST } from "@akinon/next/api/similar-products";
@@ -1 +1 @@
1
- export * from '@akinon/next/api/virtual-try-on';
1
+ export { GET, POST, PUT, OPTIONS } from "@akinon/next/api/virtual-try-on";
@@ -1 +1 @@
1
- export * from '@akinon/next/api/web-vitals';
1
+ export { POST } from "@akinon/next/api/web-vitals";
@@ -1,13 +1,25 @@
1
1
  'use client';
2
2
 
3
3
  import { Button, Icon, LoaderSpinner, Select } from '@theme/components';
4
- import {
5
- QuantityDisplayType,
6
- QuantityStyles
7
- } from '@theme/views/product-detail';
8
4
  import clsx from 'clsx';
9
5
  import { useMemo } from 'react';
10
6
 
7
+ type QuantityDisplayType = 'buttons' | 'dropdown';
8
+
9
+ type QuantityStyles = {
10
+ width?: string;
11
+ height?: string;
12
+ color?: string;
13
+ 'background-color'?: string;
14
+ 'border-color'?: string;
15
+ 'border-width'?: string;
16
+ 'border-radius'?: string;
17
+ 'font-size'?: string;
18
+ 'font-weight'?: string | number;
19
+ 'button-color'?: string;
20
+ 'button-hover-color'?: string;
21
+ };
22
+
11
23
  interface QuantitySelectorProps {
12
24
  quantity: number;
13
25
  onChange?: (newQuantity: number) => void;
@@ -136,7 +136,7 @@ export function WidgetContent({
136
136
  case 'text':
137
137
  Tag = (
138
138
  componentData.tag || 'div'
139
- ).toLowerCase() as keyof JSX.IntrinsicElements;
139
+ ).toLowerCase() as keyof React.JSX.IntrinsicElements;
140
140
  return wrapWithTooltip(
141
141
  <Tag
142
142
  id={componentId}
@@ -278,7 +278,7 @@ export function WidgetContent({
278
278
  default:
279
279
  if (componentData.tag) {
280
280
  CustomTag =
281
- componentData.tag.toLowerCase() as keyof JSX.IntrinsicElements;
281
+ componentData.tag.toLowerCase() as keyof React.JSX.IntrinsicElements;
282
282
  return wrapWithTooltip(
283
283
  <CustomTag
284
284
  id={componentId}
@@ -307,7 +307,7 @@ export function WidgetContent({
307
307
  if (parentData && !skipParentWrapper) {
308
308
  const ParentTag = (
309
309
  parentData.tag || 'div'
310
- ).toLowerCase() as keyof JSX.IntrinsicElements;
310
+ ).toLowerCase() as keyof React.JSX.IntrinsicElements;
311
311
  return (
312
312
  <ParentTag
313
313
  id={parentData.id}