@akinon/projectzero 1.105.0 → 1.106.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @akinon/projectzero
2
2
 
3
+ ## 1.106.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 34578ef: ZERO-3419 :Add new payment plugins and update existing ones in the plugin list
8
+
3
9
  ## 1.105.0
4
10
 
5
11
  ## 1.104.0
@@ -1,5 +1,38 @@
1
1
  # projectzeronext
2
2
 
3
+ ## 1.106.0
4
+
5
+ ### Minor Changes
6
+
7
+ - e9e902b: ZERO-3650: Add Loyalty
8
+ - 9dc7298: ZERO-3416: Refactor Accordion component to enhance props and improve styling flexibility
9
+ - 2d3f178: ZERO-3417: Enhance FileInput component with additional props for customization
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies [155cd23]
14
+ - Updated dependencies [ae010f0]
15
+ - Updated dependencies [9dc7298]
16
+ - Updated dependencies [2d3f178]
17
+ - Updated dependencies [8bc82f0]
18
+ - @akinon/pz-tamara-extension@1.106.0
19
+ - @akinon/pz-otp@1.106.0
20
+ - @akinon/next@1.106.0
21
+ - @akinon/pz-checkout-gift-pack@1.106.0
22
+ - @akinon/pz-akifast@1.106.0
23
+ - @akinon/pz-b2b@1.106.0
24
+ - @akinon/pz-basket-gift-pack@1.106.0
25
+ - @akinon/pz-bkm@1.106.0
26
+ - @akinon/pz-click-collect@1.106.0
27
+ - @akinon/pz-credit-payment@1.106.0
28
+ - @akinon/pz-gpay@1.106.0
29
+ - @akinon/pz-hepsipay@1.106.0
30
+ - @akinon/pz-masterpass@1.106.0
31
+ - @akinon/pz-one-click-checkout@1.106.0
32
+ - @akinon/pz-pay-on-delivery@1.106.0
33
+ - @akinon/pz-saved-card@1.106.0
34
+ - @akinon/pz-tabby-extension@1.106.0
35
+
3
36
  ## 1.105.0
4
37
 
5
38
  ### Minor Changes
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "projectzeronext",
3
- "version": "1.105.0",
3
+ "version": "1.106.0",
4
4
  "private": true,
5
5
  "license": "MIT",
6
6
  "scripts": {
@@ -24,22 +24,23 @@
24
24
  "test:middleware": "jest middleware-matcher.test.ts --bail"
25
25
  },
26
26
  "dependencies": {
27
- "@akinon/next": "1.105.0",
28
- "@akinon/pz-akifast": "1.105.0",
29
- "@akinon/pz-b2b": "1.105.0",
30
- "@akinon/pz-basket-gift-pack": "1.105.0",
31
- "@akinon/pz-bkm": "1.105.0",
32
- "@akinon/pz-checkout-gift-pack": "1.105.0",
33
- "@akinon/pz-click-collect": "1.105.0",
34
- "@akinon/pz-credit-payment": "1.105.0",
35
- "@akinon/pz-gpay": "1.105.0",
36
- "@akinon/pz-masterpass": "1.105.0",
37
- "@akinon/pz-one-click-checkout": "1.105.0",
38
- "@akinon/pz-otp": "1.105.0",
39
- "@akinon/pz-pay-on-delivery": "1.105.0",
40
- "@akinon/pz-saved-card": "1.105.0",
41
- "@akinon/pz-tabby-extension": "1.105.0",
42
- "@akinon/pz-tamara-extension": "1.105.0",
27
+ "@akinon/next": "1.106.0",
28
+ "@akinon/pz-akifast": "1.106.0",
29
+ "@akinon/pz-b2b": "1.106.0",
30
+ "@akinon/pz-basket-gift-pack": "1.106.0",
31
+ "@akinon/pz-bkm": "1.106.0",
32
+ "@akinon/pz-checkout-gift-pack": "1.106.0",
33
+ "@akinon/pz-click-collect": "1.106.0",
34
+ "@akinon/pz-credit-payment": "1.106.0",
35
+ "@akinon/pz-gpay": "1.106.0",
36
+ "@akinon/pz-hepsipay": "1.106.0",
37
+ "@akinon/pz-masterpass": "1.106.0",
38
+ "@akinon/pz-one-click-checkout": "1.106.0",
39
+ "@akinon/pz-otp": "1.106.0",
40
+ "@akinon/pz-pay-on-delivery": "1.106.0",
41
+ "@akinon/pz-saved-card": "1.106.0",
42
+ "@akinon/pz-tabby-extension": "1.106.0",
43
+ "@akinon/pz-tamara-extension": "1.106.0",
43
44
  "@hookform/resolvers": "2.9.0",
44
45
  "@next/third-parties": "14.1.0",
45
46
  "@react-google-maps/api": "2.17.1",
@@ -62,7 +63,7 @@
62
63
  "yup": "0.32.11"
63
64
  },
64
65
  "devDependencies": {
65
- "@akinon/eslint-plugin-projectzero": "1.105.0",
66
+ "@akinon/eslint-plugin-projectzero": "1.106.0",
66
67
  "@semantic-release/changelog": "6.0.2",
67
68
  "@semantic-release/exec": "6.0.3",
68
69
  "@semantic-release/git": "10.0.1",
@@ -37,6 +37,7 @@
37
37
  "subtotal": "Subtotal",
38
38
  "shipping": "Shipping",
39
39
  "discounts_total": "Discounts Total",
40
+ "loyalty_money_total": "Loyalty Money Total",
40
41
  "total": "Total",
41
42
  "delivery_info": "Delivery Info",
42
43
  "change": "change",
@@ -138,6 +139,11 @@
138
139
  "payments": "Payments",
139
140
  "per_month": "Per Month",
140
141
  "total": "Total"
142
+ },
143
+ "store_credit": {
144
+ "use_my_store_credits": "Use my pz-zero credits",
145
+ "available_balance": "Available Balance",
146
+ "insufficient_balance": "Your pz-zero credits are not sufficient to pay for the order, please select an additional payment method to cover the balance of <Amount/>"
141
147
  }
142
148
  },
143
149
  "agreement": {
@@ -37,6 +37,7 @@
37
37
  "subtotal": "Ara toplam",
38
38
  "shipping": "Kargo",
39
39
  "discounts_total": "İndirimler Toplamı",
40
+ "loyalty_money_total": "Sadakat Parası Toplamı",
40
41
  "total": "Toplam",
41
42
  "delivery_info": "Teslimat Bilgileri",
42
43
  "change": "değiştir",
@@ -138,6 +139,11 @@
138
139
  "payments": "Ödemeler",
139
140
  "per_month": "Her ay",
140
141
  "total": "Toplam"
142
+ },
143
+ "store_credit": {
144
+ "use_my_store_credits": "pz-zero kredilerimi kullan",
145
+ "available_balance": "Mevcut Bakiyem",
146
+ "insufficient_balance": "pz-zero kredileriniz siparişi ödemek için yeterli değil, lütfen <Amount/> tutarını karşılamak için ek bir ödeme yöntemi seçin."
141
147
  }
142
148
  },
143
149
  "agreement": {
@@ -1,33 +1,25 @@
1
1
  'use client';
2
2
 
3
- import { ReactNode, useState } from 'react';
3
+ import { useState } from 'react';
4
4
  import { Icon } from './icon';
5
5
  import { twMerge } from 'tailwind-merge';
6
-
7
- type AccordionProps = {
8
- isCollapse?: boolean;
9
- title?: string;
10
- subTitle?: string;
11
- icons?: string[];
12
- iconSize?: number;
13
- iconColor?: string;
14
- children?: ReactNode;
15
- className?: string;
16
- titleClassName?: string;
17
- dataTestId?: string;
18
- };
6
+ import { AccordionProps } from './types';
19
7
 
20
8
  export const Accordion = ({
21
9
  isCollapse = false,
10
+ collapseClassName,
22
11
  title,
23
12
  subTitle,
24
13
  icons = ['chevron-up', 'chevron-down'],
25
14
  iconSize = 16,
26
15
  iconColor = 'fill-[#000000]',
27
16
  children,
17
+ headerClassName,
28
18
  className,
29
19
  titleClassName,
30
- dataTestId
20
+ subTitleClassName,
21
+ dataTestId,
22
+ contentClassName
31
23
  }: AccordionProps) => {
32
24
  const [collapse, setCollapse] = useState(isCollapse);
33
25
 
@@ -39,15 +31,22 @@ export const Accordion = ({
39
31
  )}
40
32
  >
41
33
  <div
42
- className="flex items-center justify-between cursor-pointer"
34
+ className={twMerge(
35
+ 'flex items-center justify-between cursor-pointer',
36
+ headerClassName
37
+ )}
43
38
  onClick={() => setCollapse(!collapse)}
44
39
  data-testid={dataTestId}
45
40
  >
46
- <div className="flex flex-col">
41
+ <div className={twMerge('flex flex-col', contentClassName)}>
47
42
  {title && (
48
43
  <h3 className={twMerge('text-sm', titleClassName)}>{title}</h3>
49
44
  )}
50
- {subTitle && <h4 className="text-xs text-gray-700">{subTitle}</h4>}
45
+ {subTitle && (
46
+ <h4 className={twMerge('text-xs text-gray-700', subTitleClassName)}>
47
+ {subTitle}
48
+ </h4>
49
+ )}
51
50
  </div>
52
51
 
53
52
  {icons && (
@@ -58,7 +57,11 @@ export const Accordion = ({
58
57
  />
59
58
  )}
60
59
  </div>
61
- {collapse && <div className="mt-3 text-sm">{children}</div>}
60
+ {collapse && (
61
+ <div className={twMerge('mt-3 text-sm', collapseClassName)}>
62
+ {children}
63
+ </div>
64
+ )}
62
65
  </div>
63
66
  );
64
67
  };
@@ -1,11 +1,21 @@
1
1
  import { useState } from 'react';
2
2
  import { forwardRef } from 'react';
3
3
  import { FileInputProps } from '@theme/components/types';
4
- import clsx from 'clsx';
5
4
  import { useLocalization } from '@akinon/next/hooks';
5
+ import { twMerge } from 'tailwind-merge';
6
6
 
7
7
  export const FileInput = forwardRef<HTMLInputElement, FileInputProps>(
8
- function FileInput({ className, onChange, ...props }, ref) {
8
+ function FileInput(
9
+ {
10
+ buttonClassName,
11
+ onChange,
12
+ fileClassName,
13
+ fileNameWrapperClassName,
14
+ fileInputClassName,
15
+ ...props
16
+ },
17
+ ref
18
+ ) {
9
19
  const { t } = useLocalization();
10
20
  const [fileNames, setFileNames] = useState<string[]>([]);
11
21
 
@@ -24,24 +34,34 @@ export const FileInput = forwardRef<HTMLInputElement, FileInputProps>(
24
34
  type="file"
25
35
  {...props}
26
36
  ref={ref}
27
- className="absolute inset-0 w-full h-full opacity-0 cursor-pointer"
37
+ className={twMerge(
38
+ 'absolute inset-0 w-full h-full opacity-0 cursor-pointer',
39
+ fileInputClassName
40
+ )}
28
41
  onChange={handleFileChange}
29
42
  />
30
43
  <button
31
44
  type="button"
32
- className={clsx('bg-primary text-white py-2 px-4 text-sm', className)}
45
+ className={twMerge(
46
+ 'bg-primary text-white py-2 px-4 text-sm',
47
+ buttonClassName
48
+ )}
33
49
  >
34
50
  {t('common.file_input.select_file')}
35
51
  </button>
36
- <div className="mt-1 text-gray-500">
52
+ <div
53
+ className={twMerge('mt-1 text-gray-500', fileNameWrapperClassName)}
54
+ >
37
55
  {fileNames.length > 0 ? (
38
- <ul className="list-disc pl-4 text-xs">
56
+ <ul className={twMerge('list-disc pl-4 text-xs', fileClassName)}>
39
57
  {fileNames.map((name, index) => (
40
58
  <li key={index}>{name}</li>
41
59
  ))}
42
60
  </ul>
43
61
  ) : (
44
- <span className="text-xs">{t('common.file_input.no_file')}</span>
62
+ <span className={twMerge('text-xs', fileClassName)}>
63
+ {t('common.file_input.no_file')}
64
+ </span>
45
65
  )}
46
66
  </div>
47
67
  </div>
@@ -56,7 +56,7 @@ export const Price = (props: NumericFormatProps & PriceProps) => {
56
56
 
57
57
  const currentCurrencyDecimalScale = Settings.localization.currencies.find(
58
58
  (currency) => currency.code === currencyCode_
59
- ).decimalScale;
59
+ )?.decimalScale;
60
60
 
61
61
  return (
62
62
  <NumericFormat
@@ -29,7 +29,13 @@ export interface PaginationProps {
29
29
  isLoading?: boolean;
30
30
  }
31
31
 
32
- export type FileInputProps = React.HTMLProps<HTMLInputElement>;
32
+ export interface FileInputProps extends React.HTMLProps<HTMLInputElement> {
33
+ fileClassName?: string;
34
+ fileNameWrapperClassName?: string;
35
+ fileInputClassName?: string;
36
+ onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;
37
+ buttonClassName?: string;
38
+ }
33
39
 
34
40
  export type RadioProps = React.HTMLProps<HTMLInputElement>;
35
41
 
@@ -92,3 +98,20 @@ export interface BadgeProps {
92
98
  children: ReactNode;
93
99
  className?: string;
94
100
  }
101
+
102
+ export type AccordionProps = {
103
+ isCollapse?: boolean;
104
+ collapseClassName?: string;
105
+ title?: string;
106
+ subTitle?: string;
107
+ icons?: string[];
108
+ iconSize?: number;
109
+ iconColor?: string;
110
+ children?: ReactNode;
111
+ headerClassName?: string;
112
+ className?: string;
113
+ titleClassName?: string;
114
+ subTitleClassName?: string;
115
+ dataTestId?: string;
116
+ contentClassName?: string;
117
+ };
@@ -0,0 +1,121 @@
1
+ import clsx from 'clsx';
2
+ import {
3
+ useGetCheckoutLoyaltyBalanceQuery,
4
+ usePayWithLoyaltyBalanceMutation
5
+ } from '@akinon/next/data/client/checkout';
6
+ import { useAppSelector } from '@akinon/next/redux/hooks';
7
+ import { useMemo, useState } from 'react';
8
+ import { useLocalization } from '@akinon/next/hooks';
9
+ import { twMerge } from 'tailwind-merge';
10
+ import { Icon, Price } from '@theme/components';
11
+ import { Trans } from '@akinon/next/components';
12
+ import { LoaderSpinner } from '@theme/components';
13
+
14
+ export const StoreCredits = () => {
15
+ const { t } = useLocalization();
16
+
17
+ const [payWithLoyaltyBalance, { isLoading: isPayWithLoyaltyBalanceLoading }] =
18
+ usePayWithLoyaltyBalanceMutation();
19
+
20
+ const { loyaltyBalance, preOrder } = useAppSelector(
21
+ (state) => state.checkout
22
+ );
23
+
24
+ const { isLoading: isLoyaltyBalanceLoading } =
25
+ useGetCheckoutLoyaltyBalanceQuery(undefined, {
26
+ refetchOnMountOrArgChange: true,
27
+ skip: !preOrder?.payment_option
28
+ });
29
+
30
+ const isLoyaltyBalanceUsed = useMemo(() => {
31
+ return parseFloat(preOrder?.loyalty_money ?? '0') > 0;
32
+ }, [preOrder?.loyalty_money]);
33
+
34
+ const [isLoading, setIsLoading] = useState(false);
35
+
36
+ const handleClick = async () => {
37
+ if (isLoading) return;
38
+ setIsLoading(true);
39
+
40
+ try {
41
+ await payWithLoyaltyBalance(isLoyaltyBalanceUsed ? '0' : loyaltyBalance);
42
+ } finally {
43
+ setIsLoading(false);
44
+ }
45
+ };
46
+
47
+ if (preOrder?.is_guest) {
48
+ return null;
49
+ }
50
+
51
+ if (isLoyaltyBalanceLoading) {
52
+ return (
53
+ <div className="mb-3 px-4 py-3 xs:px-0">
54
+ <LoaderSpinner />
55
+ </div>
56
+ );
57
+ }
58
+
59
+ if (parseFloat(loyaltyBalance) <= 0) {
60
+ return null;
61
+ }
62
+ return (
63
+ <div
64
+ className={twMerge(
65
+ 'hidden flex-col w-full mb-4 border border-solid border-gray-400 px-0 md:p-4',
66
+ isPayWithLoyaltyBalanceLoading && 'pointer-events-none opacity-30',
67
+ parseFloat(loyaltyBalance) > 0 && 'block'
68
+ )}
69
+ >
70
+ <div className="flex w-full items-center">
71
+ <button onClick={handleClick}>
72
+ <span
73
+ className={clsx(
74
+ 'flex h-5 w-5 items-center justify-center rounded border border-solid border-primary',
75
+ isLoyaltyBalanceUsed ? 'bg-primary' : 'bg-white'
76
+ )}
77
+ >
78
+ <Icon
79
+ name={isLoyaltyBalanceUsed ? 'check' : ''}
80
+ size={10}
81
+ className={clsx({ 'text-white': isLoyaltyBalanceUsed })}
82
+ />
83
+ </span>
84
+ </button>
85
+
86
+ <div className="w-full pl-4">
87
+ <p className="cursor-pointer text-sm" onClick={handleClick}>
88
+ {t('checkout.payment.store_credit.use_my_store_credits')}
89
+ </p>
90
+ <p className="flex text-sm text-[#606060]">
91
+ {t('checkout.payment.store_credit.available_balance')}:
92
+ <Price
93
+ value={loyaltyBalance}
94
+ currencyCode={preOrder?.currency_type_label}
95
+ className="pe-1 font-bold"
96
+ />
97
+ </p>
98
+ </div>
99
+ </div>
100
+
101
+ {isLoyaltyBalanceUsed && parseFloat(preOrder?.unpaid_amount) > 0 && (
102
+ <p className="my-4 text-[15px] font-light italic text-[#707070] max-xs:text-xs">
103
+ <Trans
104
+ i18nKey="checkout.payment.store_credit.insufficient_balance"
105
+ components={{
106
+ Amount: (
107
+ <div className="inline-flex">
108
+ <Price
109
+ value={preOrder?.unpaid_amount}
110
+ currencyCode={preOrder?.currency_type_label}
111
+ className="text-primary"
112
+ />
113
+ </div>
114
+ )
115
+ }}
116
+ />
117
+ </p>
118
+ )}
119
+ </div>
120
+ );
121
+ };
@@ -8,6 +8,7 @@ import PluginModule, { Component } from '@akinon/next/components/plugin-module';
8
8
  import { twMerge } from 'tailwind-merge';
9
9
  import { Image } from '@akinon/next/components/image';
10
10
  import { Trans } from '@akinon/next/components/trans';
11
+ import { StoreCredits } from './steps/payment/options/store-credit';
11
12
 
12
13
  export const Summary = () => {
13
14
  const { t } = useLocalization();
@@ -38,6 +39,7 @@ export const Summary = () => {
38
39
  'flex flex-col w-full mb-4 border border-solid border-gray-400'
39
40
  }}
40
41
  />
42
+ <StoreCredits />
41
43
  <div className="flex flex-col w-full border border-solid border-gray-400">
42
44
  <div className="flex justify-between items-center flex-row border-b border-solid border-gray-400 px-4 py-2 sm:px-5 sm:py-4 sm:min-h-15">
43
45
  <span className="text-black-800 text-xl font-light sm:text-2xl">
@@ -118,6 +120,14 @@ export const Summary = () => {
118
120
  <Price value={preOrder?.shipping_amount} />
119
121
  </span>
120
122
  </div>
123
+ {parseFloat(preOrder?.loyalty_money) > 0 && (
124
+ <div className="flex items-center justify-between w-full text-xs text-black-800 py-1 px-4 sm:px-5">
125
+ <span>{t('checkout.summary.loyalty_money_total')}</span>
126
+ <span>
127
+ <Price value={preOrder?.loyalty_money} />
128
+ </span>
129
+ </div>
130
+ )}
121
131
  <div className="flex items-center justify-between w-full text-xs text-black-800 py-1 px-4 sm:px-5">
122
132
  <span>{t('checkout.summary.discounts_total')}</span>
123
133
  <span>
@@ -69,45 +69,65 @@ export default async () => {
69
69
  }
70
70
 
71
71
  const definedPlugins = [
72
+ {
73
+ name: 'Akifast',
74
+ value: 'pz-akifast'
75
+ },
76
+ {
77
+ name: 'Apple Pay',
78
+ value: 'pz-apple-pay'
79
+ },
80
+ {
81
+ name: 'B2B',
82
+ value: 'pz-b2b'
83
+ },
72
84
  {
73
85
  name: 'Basket Gift Pack',
74
86
  value: 'pz-basket-gift-pack'
75
87
  },
76
88
  {
77
- name: 'Click & Collect',
78
- value: 'pz-click-collect'
89
+ name: 'BKM Express',
90
+ value: 'pz-bkm'
79
91
  },
80
92
  {
81
93
  name: 'Checkout Gift Pack',
82
94
  value: 'pz-checkout-gift-pack'
83
95
  },
84
96
  {
85
- name: 'One Click Checkout',
86
- value: 'pz-one-click-checkout'
97
+ name: 'Click & Collect',
98
+ value: 'pz-click-collect'
99
+ },
100
+ {
101
+ name: 'Credit Payment',
102
+ value: 'pz-credit-payment'
87
103
  },
88
104
  {
89
105
  name: 'Garanti Pay',
90
106
  value: 'pz-gpay'
91
107
  },
92
108
  {
93
- name: 'Pay On Delivery',
94
- value: 'pz-pay-on-delivery'
109
+ name: 'Masterpass',
110
+ value: 'pz-masterpass'
95
111
  },
96
112
  {
97
- name: 'Otp',
98
- value: 'pz-otp'
113
+ name: 'Multi Basket',
114
+ value: 'pz-multi-basket'
99
115
  },
100
116
  {
101
- name: 'BKM Express',
102
- value: 'pz-bkm'
117
+ name: 'One Click Checkout',
118
+ value: 'pz-one-click-checkout'
103
119
  },
104
120
  {
105
- name: 'Credit Payment',
106
- value: 'pz-credit-payment'
121
+ name: 'Otp',
122
+ value: 'pz-otp'
107
123
  },
108
124
  {
109
- name: 'Multi Basket',
110
- value: 'pz-multi-basket'
125
+ name: 'Pay On Delivery',
126
+ value: 'pz-pay-on-delivery'
127
+ },
128
+ {
129
+ name: 'Saved Card',
130
+ value: 'pz-saved-card'
111
131
  },
112
132
  {
113
133
  name: 'Tabby Payment Extension',
@@ -84,45 +84,65 @@ exports.default = () => __awaiter(void 0, void 0, void 0, function* () {
84
84
  process.exit(1);
85
85
  }
86
86
  const definedPlugins = [
87
+ {
88
+ name: 'Akifast',
89
+ value: 'pz-akifast'
90
+ },
91
+ {
92
+ name: 'Apple Pay',
93
+ value: 'pz-apple-pay'
94
+ },
95
+ {
96
+ name: 'B2B',
97
+ value: 'pz-b2b'
98
+ },
87
99
  {
88
100
  name: 'Basket Gift Pack',
89
101
  value: 'pz-basket-gift-pack'
90
102
  },
91
103
  {
92
- name: 'Click & Collect',
93
- value: 'pz-click-collect'
104
+ name: 'BKM Express',
105
+ value: 'pz-bkm'
94
106
  },
95
107
  {
96
108
  name: 'Checkout Gift Pack',
97
109
  value: 'pz-checkout-gift-pack'
98
110
  },
99
111
  {
100
- name: 'One Click Checkout',
101
- value: 'pz-one-click-checkout'
112
+ name: 'Click & Collect',
113
+ value: 'pz-click-collect'
114
+ },
115
+ {
116
+ name: 'Credit Payment',
117
+ value: 'pz-credit-payment'
102
118
  },
103
119
  {
104
120
  name: 'Garanti Pay',
105
121
  value: 'pz-gpay'
106
122
  },
107
123
  {
108
- name: 'Pay On Delivery',
109
- value: 'pz-pay-on-delivery'
124
+ name: 'Masterpass',
125
+ value: 'pz-masterpass'
110
126
  },
111
127
  {
112
- name: 'Otp',
113
- value: 'pz-otp'
128
+ name: 'Multi Basket',
129
+ value: 'pz-multi-basket'
114
130
  },
115
131
  {
116
- name: 'BKM Express',
117
- value: 'pz-bkm'
132
+ name: 'One Click Checkout',
133
+ value: 'pz-one-click-checkout'
118
134
  },
119
135
  {
120
- name: 'Credit Payment',
121
- value: 'pz-credit-payment'
136
+ name: 'Otp',
137
+ value: 'pz-otp'
122
138
  },
123
139
  {
124
- name: 'Multi Basket',
125
- value: 'pz-multi-basket'
140
+ name: 'Pay On Delivery',
141
+ value: 'pz-pay-on-delivery'
142
+ },
143
+ {
144
+ name: 'Saved Card',
145
+ value: 'pz-saved-card'
126
146
  },
127
147
  {
128
148
  name: 'Tabby Payment Extension',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akinon/projectzero",
3
- "version": "1.105.0",
3
+ "version": "1.106.0",
4
4
  "private": false,
5
5
  "description": "CLI tool to manage your Project Zero Next project",
6
6
  "bin": {