@akinon/projectzero 1.99.0-rc.69 → 1.99.0-snapshot-ZERO-3640-20250919140314

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 (62) hide show
  1. package/CHANGELOG.md +5 -238
  2. package/app-template/.env.example +0 -1
  3. package/app-template/CHANGELOG.md +304 -5041
  4. package/app-template/README.md +1 -25
  5. package/app-template/package.json +19 -21
  6. package/app-template/public/locales/en/common.json +1 -42
  7. package/app-template/public/locales/tr/common.json +1 -42
  8. package/app-template/src/app/[commerce]/[locale]/[currency]/basket/page.tsx +82 -9
  9. package/app-template/src/app/[commerce]/[locale]/[currency]/category/[pk]/page.tsx +4 -17
  10. package/app-template/src/app/[commerce]/[locale]/[currency]/flat-page/[pk]/page.tsx +1 -12
  11. package/app-template/src/app/[commerce]/[locale]/[currency]/group-product/[pk]/page.tsx +11 -29
  12. package/app-template/src/app/[commerce]/[locale]/[currency]/landing-page/[pk]/page.tsx +1 -12
  13. package/app-template/src/app/[commerce]/[locale]/[currency]/product/[pk]/page.tsx +10 -28
  14. package/app-template/src/app/[commerce]/[locale]/[currency]/special-page/[pk]/page.tsx +1 -12
  15. package/app-template/src/assets/fonts/pz-icon.css +0 -3
  16. package/app-template/src/components/__tests__/link.test.tsx +0 -2
  17. package/app-template/src/components/accordion.tsx +19 -22
  18. package/app-template/src/components/currency-select.tsx +0 -1
  19. package/app-template/src/components/file-input.tsx +7 -27
  20. package/app-template/src/components/input.tsx +2 -9
  21. package/app-template/src/components/modal.tsx +16 -32
  22. package/app-template/src/components/pagination.tsx +0 -1
  23. package/app-template/src/components/select.tsx +26 -38
  24. package/app-template/src/components/types/index.ts +1 -25
  25. package/app-template/src/hooks/index.ts +0 -2
  26. package/app-template/src/plugins.js +1 -3
  27. package/app-template/src/settings.js +2 -8
  28. package/app-template/src/types/index.ts +3 -74
  29. package/app-template/src/views/account/address-form.tsx +4 -8
  30. package/app-template/src/views/account/contact-form.tsx +1 -1
  31. package/app-template/src/views/account/content-header.tsx +2 -2
  32. package/app-template/src/views/account/faq/faq-tabs.tsx +2 -8
  33. package/app-template/src/views/basket/basket-item.tsx +14 -22
  34. package/app-template/src/views/basket/summary.tsx +7 -10
  35. package/app-template/src/views/breadcrumb.tsx +2 -2
  36. package/app-template/src/views/category/category-info.tsx +0 -1
  37. package/app-template/src/views/category/filters/index.tsx +1 -1
  38. package/app-template/src/views/guest-login/index.tsx +1 -6
  39. package/app-template/src/views/header/action-menu.tsx +1 -1
  40. package/app-template/src/views/header/search/index.tsx +5 -17
  41. package/app-template/src/views/login/index.tsx +10 -11
  42. package/app-template/src/views/otp-login/index.tsx +6 -11
  43. package/app-template/src/views/product/product-info.tsx +263 -62
  44. package/app-template/src/views/product/slider.tsx +73 -86
  45. package/app-template/src/views/register/index.tsx +11 -15
  46. package/app-template/src/widgets/footer-menu.tsx +2 -6
  47. package/commands/plugins.ts +16 -63
  48. package/dist/commands/plugins.js +16 -57
  49. package/package.json +1 -1
  50. package/app-template/.github/instructions/account.instructions.md +0 -749
  51. package/app-template/.github/instructions/edge-cases.instructions.md +0 -73
  52. package/app-template/src/app/[commerce]/[locale]/[currency]/product/[pk]/loading.tsx +0 -67
  53. package/app-template/src/app/api/image-proxy/route.ts +0 -1
  54. package/app-template/src/app/api/similar-product-list/route.ts +0 -1
  55. package/app-template/src/app/api/similar-products/route.ts +0 -1
  56. package/app-template/src/hooks/use-product-cart.ts +0 -77
  57. package/app-template/src/hooks/use-stock-alert.ts +0 -74
  58. package/app-template/src/utils/variant-validation.ts +0 -41
  59. package/app-template/src/views/basket/basket-content.tsx +0 -106
  60. package/app-template/src/views/product/product-actions.tsx +0 -165
  61. package/app-template/src/views/product/product-share.tsx +0 -56
  62. package/app-template/src/views/product/product-variants.tsx +0 -26
@@ -7,7 +7,6 @@ import { Product } from '@akinon/next/types';
7
7
  import { Image } from '@akinon/next/components/image';
8
8
  import useFavButton from '../../hooks/use-fav-button';
9
9
  import { twMerge } from 'tailwind-merge';
10
- import PluginModule, { Component } from '@akinon/next/components/plugin-module';
11
10
 
12
11
  type ProductSliderItem = {
13
12
  product: Product;
@@ -36,102 +35,90 @@ export default function ProductInfoSlider({ product }: ProductSliderItem) {
36
35
  carouselRef.current?.next();
37
36
  };
38
37
 
39
- const handleThumbnailClick = (index: number) => {
38
+ const handleThumbnailClick = (index) => {
40
39
  setActiveIndex(index);
41
40
  carouselRef.current?.goToSlide(index);
42
41
  };
43
42
 
44
43
  return (
45
- <>
46
- <div className="lg:grid lg:grid-cols-6">
47
- <div className="lg:col-span-1">
48
- <div className="flex flex-col items-center justify-center md:mr-[6px]">
49
- <button
50
- onClick={goToPrev}
51
- className={twMerge(
52
- 'hidden justify-center p-2 mb-3 border border-gray-100 rounded-full cursor-pointer lg:block',
53
- [activeIndex === 0 && 'cursor-not-allowed opacity-45']
54
- )}
55
- disabled={activeIndex === 0}
56
- >
57
- <Icon name="chevron-up" size={15} className="fill-[#000000]" />
58
- </button>
59
- <div className="hidden flex-col items-center overflow-scroll w-[80px] max-h-[620px] lg:block">
60
- {product?.productimage_set?.map((item, index) => (
61
- <Image
62
- key={index}
63
- src={item.image}
64
- alt={`Thumbnail ${index}`}
65
- width={80}
66
- height={128}
67
- aspectRatio={80 / 128}
68
- className={twMerge('cursor-pointer', [
69
- activeIndex === index && 'border-2 border-primary'
70
- ])}
71
- onClick={() => handleThumbnailClick(index)}
72
- />
73
- ))}
74
- </div>
75
- <button
76
- onClick={goToNext}
77
- className={twMerge(
78
- 'hidden justify-center p-2 mt-3 border border-gray-100 rounded-full cursor-pointer lg:block',
79
- [
80
- activeIndex === product.productimage_set.length - 1 &&
81
- 'cursor-not-allowed opacity-45'
82
- ]
83
- )}
84
- disabled={activeIndex === product.productimage_set.length - 1}
85
- >
86
- <Icon name="chevron-down" size={15} className="fill-[#000000]" />
87
- </button>
88
- </div>
89
- </div>
90
-
91
- <div className="relative lg:col-span-5">
92
- <FavButton className="absolute right-8 top-6 z-[20] sm:hidden" />
93
-
94
- <PluginModule
95
- component={Component.ProductImageSearchFeature}
96
- props={{
97
- product,
98
- activeIndex,
99
- showResetButton: true
100
- }}
101
- />
102
-
103
- <CarouselCore
104
- responsive={{
105
- all: {
106
- breakpoint: { max: 5000, min: 0 },
107
- items: 1
108
- }
109
- }}
110
- arrows={false}
111
- swipeable={true}
112
- ref={carouselRef}
113
- afterChange={(previousSlide, { currentSlide }) => {
114
- setActiveIndex(currentSlide);
115
- }}
116
- containerAspectRatio={{ mobile: 520 / 798, desktop: 484 / 726 }}
44
+ <div className="lg:grid lg:grid-cols-6">
45
+ <div className="lg:col-span-1">
46
+ <div className="flex flex-col items-center justify-center md:mr-[6px]">
47
+ <button
48
+ onClick={goToPrev}
49
+ className={twMerge(
50
+ 'hidden justify-center p-2 mb-3 border border-gray-100 rounded-full cursor-pointer lg:block',
51
+ [activeIndex === 0 && 'cursor-not-allowed opacity-45']
52
+ )}
53
+ disabled={activeIndex === 0}
117
54
  >
118
- {product?.productimage_set?.map((item, i) => (
55
+ <Icon name="chevron-up" size={15} className="fill-[#000000]" />
56
+ </button>
57
+ <div className="hidden flex-col items-center overflow-scroll w-[80px] max-h-[620px] lg:block">
58
+ {product?.productimage_set?.map((item, index) => (
119
59
  <Image
120
- key={i}
60
+ key={index}
121
61
  src={item.image}
122
- alt={product?.name || 'Product image'}
123
- draggable={false}
124
- aspectRatio={484 / 726}
125
- sizes="(min-width: 425px) 512px,
126
- (min-width: 601px) 576px,
127
- (min-width: 768px) 336px,
128
- (min-width: 1024px) 484px, 368px"
129
- fill
62
+ alt={`Thumbnail ${index}`}
63
+ width={80}
64
+ height={128}
65
+ className={twMerge('cursor-pointer', [
66
+ activeIndex === index && 'border-2 border-primary'
67
+ ])}
68
+ onClick={() => handleThumbnailClick(index)}
130
69
  />
131
70
  ))}
132
- </CarouselCore>
71
+ </div>
72
+ <button
73
+ onClick={goToNext}
74
+ className={twMerge(
75
+ 'hidden justify-center p-2 mt-3 border border-gray-100 rounded-full cursor-pointer lg:block',
76
+ [
77
+ activeIndex === product.productimage_set.length - 1 &&
78
+ 'cursor-not-allowed opacity-45'
79
+ ]
80
+ )}
81
+ disabled={activeIndex === product.productimage_set.length - 1}
82
+ >
83
+ <Icon name="chevron-down" size={15} className="fill-[#000000]" />
84
+ </button>
133
85
  </div>
134
86
  </div>
135
- </>
87
+
88
+ <div className="relative lg:col-span-5">
89
+ <FavButton className="absolute right-8 top-6 z-[20] sm:hidden" />
90
+
91
+ <CarouselCore
92
+ responsive={{
93
+ all: {
94
+ breakpoint: { max: 5000, min: 0 },
95
+ items: 1
96
+ }
97
+ }}
98
+ arrows={false}
99
+ swipeable={true}
100
+ ref={carouselRef}
101
+ afterChange={(previousSlide, { currentSlide }) => {
102
+ setActiveIndex(currentSlide);
103
+ }}
104
+ containerAspectRatio={{ mobile: 520 / 798, desktop: 484 / 726 }}
105
+ >
106
+ {product?.productimage_set?.map((item, i) => (
107
+ <Image
108
+ key={i}
109
+ src={item.image}
110
+ alt={product.name}
111
+ draggable={false}
112
+ aspectRatio={484 / 726}
113
+ sizes="(min-width: 425px) 512px,
114
+ (min-width: 601px) 576px,
115
+ (min-width: 768px) 336px,
116
+ (min-width: 1024px) 484px, 368px"
117
+ fill
118
+ />
119
+ ))}
120
+ </CarouselCore>
121
+ </div>
122
+ </div>
136
123
  );
137
124
  }
@@ -2,11 +2,11 @@
2
2
 
3
3
  import { yupResolver } from '@hookform/resolvers/yup';
4
4
  import clsx from 'clsx';
5
- import { signIn } from 'next-auth/react';
5
+ import { signIn, SignInOptions } from 'next-auth/react';
6
6
  import { useState } from 'react';
7
7
  import { SubmitHandler, useForm } from 'react-hook-form';
8
8
  import { useAppDispatch, useAppSelector } from '@akinon/next/redux/hooks';
9
- import { RegisterFormType, FormType, PzSignInOptions } from '@theme/types';
9
+ import { RegisterFormType } from '@theme/types';
10
10
  import { Button, Checkbox, Icon, Input, Modal } from '@theme/components';
11
11
  import * as yup from 'yup';
12
12
  import { useCaptcha, useLocalization, useRouter } from '@akinon/next/hooks';
@@ -125,9 +125,8 @@ export const Register = () => {
125
125
  redirect: false,
126
126
  callbackUrl: '/',
127
127
  captchaValidated,
128
- ...data,
129
- formType: FormType.register
130
- } as PzSignInOptions);
128
+ ...data
129
+ } as SignInOptions);
131
130
  };
132
131
 
133
132
  const onSubmit: SubmitHandler<RegisterFormType> = async (data) => {
@@ -144,6 +143,7 @@ export const Register = () => {
144
143
  if (registerResponse.error) {
145
144
  const errors: AuthError[] = JSON.parse(registerResponse.error);
146
145
 
146
+
147
147
  if (errors.find((error) => error.type === 'captcha')) {
148
148
  if (await validateCaptcha()) {
149
149
  onSubmit(data);
@@ -171,25 +171,25 @@ export const Register = () => {
171
171
  try {
172
172
  parsedValue = JSON.parse(item.value);
173
173
  } catch {
174
- parsedValue = [item.value];
174
+ parsedValue = [item.value];
175
175
  }
176
176
  } else {
177
- parsedValue = item.value;
177
+ parsedValue = item.value;
178
178
  }
179
179
 
180
180
  if (Array.isArray(parsedValue)) {
181
181
  setError(item.name as keyof RegisterFormType, {
182
182
  type: 'custom',
183
- message: parsedValue.join(', ')
183
+ message: parsedValue.join(', '),
184
184
  });
185
185
  } else {
186
186
  Object.keys(parsedValue).forEach((key) => {
187
187
  const fieldName = key as keyof RegisterFormType;
188
188
  const errorMessages = parsedValue[key] as string[];
189
-
189
+
190
190
  setError(fieldName, {
191
191
  type: 'custom',
192
- message: errorMessages.join(', ')
192
+ message: errorMessages.join(', '),
193
193
  });
194
194
  });
195
195
  }
@@ -247,11 +247,7 @@ export const Register = () => {
247
247
  </p>
248
248
 
249
249
  <form onSubmit={handleSubmit(onSubmit)} className="flex flex-col gap-4">
250
- <input
251
- type="hidden"
252
- value={FormType.register}
253
- {...register('formType')}
254
- />
250
+ <input type="hidden" value="register" {...register('formType')} />
255
251
  <input type="hidden" value={locale} {...register('locale')} />
256
252
 
257
253
  <div className={clsx({ 'mb-4': errors.email })}>
@@ -2,7 +2,6 @@ import 'server-only';
2
2
 
3
3
  import { Link, Accordion } from '@theme/components';
4
4
  import { getWidgetData } from '@akinon/next/data/server';
5
- import { ServerVariables } from '@akinon/next/utils/server-variables';
6
5
 
7
6
  type SideItem = {
8
7
  value: string;
@@ -48,7 +47,6 @@ type FooterMenuType = {
48
47
 
49
48
  export default async function FooterMenu() {
50
49
  const data = await getWidgetData<FooterMenuType>({ slug: 'footer-menu' });
51
- const { locale } = ServerVariables;
52
50
 
53
51
  return (
54
52
  <div className="flex-1">
@@ -74,7 +72,7 @@ export default async function FooterMenu() {
74
72
  : '_self'
75
73
  }
76
74
  data-testid={`footer-categories-${item?.value?.name
77
- ?.toLocaleLowerCase(locale)
75
+ ?.toLocaleLowerCase()
78
76
  .split(' ')
79
77
  .join('')}`}
80
78
  >
@@ -98,9 +96,7 @@ export default async function FooterMenu() {
98
96
  ? '_blank'
99
97
  : '_self'
100
98
  }
101
- data-testid={`footer-categories-${item?.value?.name?.toLocaleLowerCase(
102
- locale
103
- )}`}
99
+ data-testid={`footer-categories-${item?.value?.name?.toLocaleLowerCase()}`}
104
100
  >
105
101
  {item?.value?.name}
106
102
  </Link>
@@ -29,14 +29,7 @@ async function checkVersion(pkg: PackageJson) {
29
29
 
30
30
  if (!semver.satisfies(pkg.dependencies['@akinon/next'], latestVersion)) {
31
31
  console.warn(
32
- `\x1b[43m Warning: The "${packageName}" package is currently at`,
33
- `\x1b[41m version ${pkg.dependencies['@akinon/next']}`,
34
- `\x1b[43m Please upgrade it to the latest version (${latestVersion}) to ensure plugin compatibility.`,
35
- '\x1b[0m\n'
36
- );
37
- } else {
38
- console.log(
39
- `\x1b[42m Info: The package "${packageName}" is currently in the current version (${latestVersion}).`,
32
+ `\x1b[43mWarning: The "${packageName}" package is currently at version ${pkg.dependencies['@akinon/next']}. Please upgrade it to the latest version (${latestVersion}) to ensure plugin compatibility.`,
40
33
  '\x1b[0m\n'
41
34
  );
42
35
  }
@@ -61,27 +54,7 @@ export default async () => {
61
54
  }
62
55
  }
63
56
 
64
- function findPackageJson(): PackageJson {
65
- const packageJsonPaths = [
66
- path.resolve(rootDir, './package.json'),
67
- path.resolve(rootDir, './apps/projectzeronext/package.json')
68
- ];
69
-
70
- for (const packageJsonPath of packageJsonPaths) {
71
- try {
72
- const pkg = require(packageJsonPath);
73
- if (pkg.dependencies['@akinon/next']) {
74
- return pkg;
75
- }
76
- } catch (error) {
77
- continue;
78
- }
79
- }
80
-
81
- throw new Error('Could not find package.json with @akinon/next dependency');
82
- }
83
-
84
- const pkg = findPackageJson();
57
+ const pkg: PackageJson = require(path.resolve(rootDir, './package.json'));
85
58
  await checkVersion(pkg);
86
59
 
87
60
  const pluginsFilePath = findPluginsFilePath();
@@ -96,65 +69,45 @@ export default async () => {
96
69
  }
97
70
 
98
71
  const definedPlugins = [
99
- {
100
- name: 'Akifast',
101
- value: 'pz-akifast'
102
- },
103
- {
104
- name: 'Apple Pay',
105
- value: 'pz-apple-pay'
106
- },
107
- {
108
- name: 'B2B',
109
- value: 'pz-b2b'
110
- },
111
72
  {
112
73
  name: 'Basket Gift Pack',
113
74
  value: 'pz-basket-gift-pack'
114
75
  },
115
76
  {
116
- name: 'BKM Express',
117
- value: 'pz-bkm'
77
+ name: 'Click & Collect',
78
+ value: 'pz-click-collect'
118
79
  },
119
80
  {
120
81
  name: 'Checkout Gift Pack',
121
82
  value: 'pz-checkout-gift-pack'
122
83
  },
123
84
  {
124
- name: 'Click & Collect',
125
- value: 'pz-click-collect'
126
- },
127
- {
128
- name: 'Credit Payment',
129
- value: 'pz-credit-payment'
85
+ name: 'One Click Checkout',
86
+ value: 'pz-one-click-checkout'
130
87
  },
131
88
  {
132
89
  name: 'Garanti Pay',
133
90
  value: 'pz-gpay'
134
91
  },
135
92
  {
136
- name: 'Masterpass',
137
- value: 'pz-masterpass'
138
- },
139
- {
140
- name: 'Multi Basket',
141
- value: 'pz-multi-basket'
142
- },
143
- {
144
- name: 'One Click Checkout',
145
- value: 'pz-one-click-checkout'
93
+ name: 'Pay On Delivery',
94
+ value: 'pz-pay-on-delivery'
146
95
  },
147
96
  {
148
97
  name: 'Otp',
149
98
  value: 'pz-otp'
150
99
  },
151
100
  {
152
- name: 'Pay On Delivery',
153
- value: 'pz-pay-on-delivery'
101
+ name: 'BKM Express',
102
+ value: 'pz-bkm'
154
103
  },
155
104
  {
156
- name: 'Saved Card',
157
- value: 'pz-saved-card'
105
+ name: 'Credit Payment',
106
+ value: 'pz-credit-payment'
107
+ },
108
+ {
109
+ name: 'Multi Basket',
110
+ value: 'pz-multi-basket'
158
111
  },
159
112
  {
160
113
  name: 'Tabby Payment Extension',
@@ -50,10 +50,7 @@ function checkVersion(pkg) {
50
50
  const pkgInfo = (yield response.json());
51
51
  const latestVersion = pkgInfo['dist-tags'].latest;
52
52
  if (!semver_1.default.satisfies(pkg.dependencies['@akinon/next'], latestVersion)) {
53
- console.warn(`\x1b[43m Warning: The "${packageName}" package is currently at`, `\x1b[41m version ${pkg.dependencies['@akinon/next']}`, `\x1b[43m Please upgrade it to the latest version (${latestVersion}) to ensure plugin compatibility.`, '\x1b[0m\n');
54
- }
55
- else {
56
- console.log(`\x1b[42m Info: The package "${packageName}" is currently in the current version (${latestVersion}).`, '\x1b[0m\n');
53
+ console.warn(`\x1b[43mWarning: The "${packageName}" package is currently at version ${pkg.dependencies['@akinon/next']}. Please upgrade it to the latest version (${latestVersion}) to ensure plugin compatibility.`, '\x1b[0m\n');
57
54
  }
58
55
  }
59
56
  catch (error) {
@@ -75,25 +72,7 @@ exports.default = () => __awaiter(void 0, void 0, void 0, function* () {
75
72
  throw new Error('plugins.js was not found in either of the expected locations.');
76
73
  }
77
74
  }
78
- function findPackageJson() {
79
- const packageJsonPaths = [
80
- path_1.default.resolve(rootDir, './package.json'),
81
- path_1.default.resolve(rootDir, './apps/projectzeronext/package.json')
82
- ];
83
- for (const packageJsonPath of packageJsonPaths) {
84
- try {
85
- const pkg = require(packageJsonPath);
86
- if (pkg.dependencies['@akinon/next']) {
87
- return pkg;
88
- }
89
- }
90
- catch (error) {
91
- continue;
92
- }
93
- }
94
- throw new Error('Could not find package.json with @akinon/next dependency');
95
- }
96
- const pkg = findPackageJson();
75
+ const pkg = require(path_1.default.resolve(rootDir, './package.json'));
97
76
  yield checkVersion(pkg);
98
77
  const pluginsFilePath = findPluginsFilePath();
99
78
  let installedPlugins = [];
@@ -105,65 +84,45 @@ exports.default = () => __awaiter(void 0, void 0, void 0, function* () {
105
84
  process.exit(1);
106
85
  }
107
86
  const definedPlugins = [
108
- {
109
- name: 'Akifast',
110
- value: 'pz-akifast'
111
- },
112
- {
113
- name: 'Apple Pay',
114
- value: 'pz-apple-pay'
115
- },
116
- {
117
- name: 'B2B',
118
- value: 'pz-b2b'
119
- },
120
87
  {
121
88
  name: 'Basket Gift Pack',
122
89
  value: 'pz-basket-gift-pack'
123
90
  },
124
91
  {
125
- name: 'BKM Express',
126
- value: 'pz-bkm'
92
+ name: 'Click & Collect',
93
+ value: 'pz-click-collect'
127
94
  },
128
95
  {
129
96
  name: 'Checkout Gift Pack',
130
97
  value: 'pz-checkout-gift-pack'
131
98
  },
132
99
  {
133
- name: 'Click & Collect',
134
- value: 'pz-click-collect'
135
- },
136
- {
137
- name: 'Credit Payment',
138
- value: 'pz-credit-payment'
100
+ name: 'One Click Checkout',
101
+ value: 'pz-one-click-checkout'
139
102
  },
140
103
  {
141
104
  name: 'Garanti Pay',
142
105
  value: 'pz-gpay'
143
106
  },
144
107
  {
145
- name: 'Masterpass',
146
- value: 'pz-masterpass'
147
- },
148
- {
149
- name: 'Multi Basket',
150
- value: 'pz-multi-basket'
151
- },
152
- {
153
- name: 'One Click Checkout',
154
- value: 'pz-one-click-checkout'
108
+ name: 'Pay On Delivery',
109
+ value: 'pz-pay-on-delivery'
155
110
  },
156
111
  {
157
112
  name: 'Otp',
158
113
  value: 'pz-otp'
159
114
  },
160
115
  {
161
- name: 'Pay On Delivery',
162
- value: 'pz-pay-on-delivery'
116
+ name: 'BKM Express',
117
+ value: 'pz-bkm'
118
+ },
119
+ {
120
+ name: 'Credit Payment',
121
+ value: 'pz-credit-payment'
163
122
  },
164
123
  {
165
- name: 'Saved Card',
166
- value: 'pz-saved-card'
124
+ name: 'Multi Basket',
125
+ value: 'pz-multi-basket'
167
126
  },
168
127
  {
169
128
  name: 'Tabby Payment Extension',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akinon/projectzero",
3
- "version": "1.99.0-rc.69",
3
+ "version": "1.99.0-snapshot-ZERO-3640-20250919140314",
4
4
  "private": false,
5
5
  "description": "CLI tool to manage your Project Zero Next project",
6
6
  "bin": {