@akinon/projectzero 2.0.0-beta.4 → 2.0.0-beta.6
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 +8 -0
- package/app-template/.env.example +3 -0
- package/app-template/CHANGELOG.md +46 -0
- package/app-template/package.json +21 -20
- package/app-template/postcss.config.mjs +8 -0
- package/app-template/public/locales/en/common.json +4 -0
- package/app-template/public/locales/tr/common.json +4 -0
- package/app-template/src/app/[commerce]/[locale]/[currency]/account/orders/[id]/cancellation/page.tsx +93 -4
- package/app-template/src/app/[commerce]/[locale]/[currency]/account/orders/[id]/page.tsx +1 -1
- package/app-template/src/app/[commerce]/[locale]/[currency]/account/page.tsx +1 -1
- package/app-template/src/app/[commerce]/[locale]/[currency]/address/stores/page.tsx +2 -2
- package/app-template/src/app/[commerce]/[locale]/[currency]/auth/page.tsx +1 -1
- package/app-template/src/app/[commerce]/[locale]/[currency]/basket/page.tsx +2 -2
- package/app-template/src/app/[commerce]/[locale]/[currency]/forms/[pk]/generate/page.tsx +1 -1
- package/app-template/src/app/[commerce]/[locale]/[currency]/orders/checkout/page.tsx +7 -4
- package/app-template/src/assets/globals.scss +162 -34
- package/app-template/src/components/__tests__/badge.test.tsx +2 -2
- package/app-template/src/components/accordion.tsx +1 -1
- package/app-template/src/components/button.tsx +50 -35
- package/app-template/src/components/file-input.tsx +44 -2
- package/app-template/src/components/input.tsx +3 -3
- package/app-template/src/components/modal.tsx +1 -1
- package/app-template/src/components/select.tsx +1 -1
- package/app-template/src/components/shimmer.tsx +1 -1
- package/app-template/src/components/types/index.ts +4 -1
- package/app-template/src/middleware.ts +1 -0
- package/app-template/src/plugins.js +2 -1
- package/app-template/src/views/account/contact-form.tsx +3 -8
- package/app-template/src/views/account/content-header.tsx +2 -3
- package/app-template/src/views/account/order.tsx +1 -1
- package/app-template/src/views/account/orders/order-cancellation-item.tsx +24 -4
- package/app-template/src/views/anonymous-tracking/order-detail/index.tsx +1 -1
- package/app-template/src/views/category/category-header.tsx +11 -5
- package/app-template/src/views/category/category-info.tsx +1 -1
- package/app-template/src/views/checkout/auth.tsx +1 -1
- package/app-template/src/views/checkout/layout/header.tsx +1 -1
- package/app-template/src/views/checkout/steps/payment/options/credit-card/index.tsx +1 -1
- package/app-template/src/views/checkout/steps/payment/payment-option-buttons.tsx +4 -4
- package/app-template/src/views/checkout/steps/shipping/address-box.tsx +3 -3
- package/app-template/src/views/checkout/steps/shipping/addresses.tsx +1 -1
- package/app-template/src/views/checkout/summary.tsx +2 -2
- package/app-template/src/views/header/band.tsx +2 -2
- package/app-template/src/views/header/mini-basket.tsx +2 -2
- package/app-template/src/views/header/mobile-menu.tsx +6 -6
- package/app-template/src/views/header/navbar.tsx +1 -1
- package/app-template/src/views/header/pwa-back-button.tsx +1 -1
- package/app-template/src/views/header/search/index.tsx +16 -4
- package/app-template/src/views/header/search/results.tsx +1 -1
- package/app-template/src/views/header/user-menu.tsx +3 -1
- package/app-template/src/views/login/index.tsx +30 -6
- package/app-template/src/views/product/product-info.tsx +2 -2
- package/app-template/src/views/product/slider.tsx +1 -1
- package/app-template/src/views/product-pointer-banner-item.tsx +1 -1
- package/app-template/src/views/register/index.tsx +29 -4
- package/app-template/src/views/sales-contract-modal/index.tsx +17 -17
- package/app-template/src/widgets/footer-info.tsx +1 -1
- package/app-template/src/widgets/footer-menu.tsx +1 -1
- package/app-template/src/widgets/footer-subscription/index.tsx +1 -1
- package/app-template/src/widgets/home-stories-eng.tsx +1 -1
- package/app-template/tailwind.config.js +1 -137
- package/commands/plugins.ts +4 -0
- package/dist/commands/plugins.js +4 -0
- package/package.json +1 -1
- package/app-template/postcss.config.js +0 -6
|
@@ -22,19 +22,31 @@ export default function Search() {
|
|
|
22
22
|
if (isSearchOpen) {
|
|
23
23
|
inputRef.current?.focus();
|
|
24
24
|
document.body.style.overflow = 'hidden';
|
|
25
|
+
|
|
26
|
+
const handleEscKey = (e: KeyboardEvent) => {
|
|
27
|
+
if (e.key === 'Escape') {
|
|
28
|
+
dispatch(closeSearch());
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
document.addEventListener('keydown', handleEscKey);
|
|
33
|
+
return () => {
|
|
34
|
+
document.removeEventListener('keydown', handleEscKey);
|
|
35
|
+
document.body.style.overflow = 'auto';
|
|
36
|
+
};
|
|
25
37
|
}
|
|
26
38
|
|
|
27
39
|
return () => {
|
|
28
40
|
document.body.style.overflow = 'auto';
|
|
29
41
|
};
|
|
30
|
-
}, [isSearchOpen]);
|
|
42
|
+
}, [isSearchOpen, dispatch]);
|
|
31
43
|
|
|
32
44
|
return (
|
|
33
45
|
<>
|
|
34
46
|
<div
|
|
35
47
|
className={clsx(
|
|
36
48
|
// 177px is the height of the header
|
|
37
|
-
'absolute bg-black
|
|
49
|
+
'absolute bg-black/75 w-screen h-screen transition duration-500 left-0 bottom-0 translate-y-full z-30',
|
|
38
50
|
isSearchOpen && searchText
|
|
39
51
|
? 'visible opacity-100'
|
|
40
52
|
: 'invisible opacity-0'
|
|
@@ -48,7 +60,7 @@ export default function Search() {
|
|
|
48
60
|
isSearchOpen ? 'visible opacity-100' : 'invisible opacity-0'
|
|
49
61
|
)}
|
|
50
62
|
>
|
|
51
|
-
<div className="max-w-
|
|
63
|
+
<div className="max-w-(--breakpoint-2xl) mx-auto flex flex-col gap-12">
|
|
52
64
|
<div className="border-b border-gray-400 flex flex-col py-1.5 gap-2 self-center items-center md:flex-row">
|
|
53
65
|
<span className="text-xl lg:text-2xl">
|
|
54
66
|
{t('common.search.results_for')}
|
|
@@ -62,7 +74,7 @@ export default function Search() {
|
|
|
62
74
|
router.push(`${ROUTES.LIST}/?search_text=${searchText}`);
|
|
63
75
|
}
|
|
64
76
|
}}
|
|
65
|
-
className="border-0 text-2xl outline-
|
|
77
|
+
className="border-0 text-2xl outline-hidden text-secondary placeholder:text-xl lg:placeholder:text-2xl"
|
|
66
78
|
placeholder={t('common.search.placeholder')}
|
|
67
79
|
ref={inputRef}
|
|
68
80
|
/>
|
|
@@ -80,7 +80,7 @@ export default function Results(props: ResultsProps) {
|
|
|
80
80
|
<div className="grid grid-cols-2 sm:grid-cols-4 gap-8">
|
|
81
81
|
{products.map((product, index) => (
|
|
82
82
|
<Link href={product?.url} key={index} className="flex flex-col">
|
|
83
|
-
<div className="relative aspect-
|
|
83
|
+
<div className="relative aspect-315/448">
|
|
84
84
|
{product.extra.image ? (
|
|
85
85
|
<Image
|
|
86
86
|
src={product.extra.image}
|
|
@@ -36,7 +36,9 @@ export const UserMenu = (props: UserMenuProps) => {
|
|
|
36
36
|
<ul
|
|
37
37
|
className={clsx(
|
|
38
38
|
'items-center divide-x divide-black',
|
|
39
|
-
isMobile
|
|
39
|
+
isMobile
|
|
40
|
+
? 'flex pt-2 text-sm pb-6 border-b border-gray-200 mx-8'
|
|
41
|
+
: 'hidden sm:flex'
|
|
40
42
|
)}
|
|
41
43
|
id="user-menu"
|
|
42
44
|
>
|
|
@@ -103,10 +103,34 @@ export const Login = () => {
|
|
|
103
103
|
)?.data as string[];
|
|
104
104
|
|
|
105
105
|
fieldErrors?.forEach((item) => {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
106
|
+
let parsedValue: Record<string, string[]> | string[] = [];
|
|
107
|
+
|
|
108
|
+
if (typeof item.value === 'string') {
|
|
109
|
+
try {
|
|
110
|
+
parsedValue = JSON.parse(item.value);
|
|
111
|
+
} catch {
|
|
112
|
+
parsedValue = [item.value];
|
|
113
|
+
}
|
|
114
|
+
} else {
|
|
115
|
+
parsedValue = item.value;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
if (Array.isArray(parsedValue)) {
|
|
119
|
+
setError(item.name as keyof LoginFormType, {
|
|
120
|
+
type: 'custom',
|
|
121
|
+
message: parsedValue.join(', '),
|
|
122
|
+
});
|
|
123
|
+
} else {
|
|
124
|
+
Object.keys(parsedValue).forEach((key) => {
|
|
125
|
+
const fieldName = key as keyof LoginFormType;
|
|
126
|
+
const errorMessages = parsedValue[key] as string[];
|
|
127
|
+
|
|
128
|
+
setError(fieldName, {
|
|
129
|
+
type: 'custom',
|
|
130
|
+
message: errorMessages.join(', '),
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
}
|
|
110
134
|
});
|
|
111
135
|
|
|
112
136
|
if (nonFieldErrors?.length) {
|
|
@@ -195,7 +219,7 @@ export const Login = () => {
|
|
|
195
219
|
{t('auth.login.form.submit')}
|
|
196
220
|
</Button>
|
|
197
221
|
|
|
198
|
-
<p className="relative text-gray-600 text-center my-4 before:absolute before:h-[1px] before:w-5/12 before:bg-gray-600
|
|
222
|
+
<p className="relative text-gray-600 text-center my-4 before:absolute before:h-[1px] before:w-5/12 before:bg-gray-600/25 before:top-1/2 before:left-0 after:absolute after:h-[1px] after:w-5/12 after:bg-gray-600/25 after:top-1/2 after:right-0">
|
|
199
223
|
{t('auth.login.form.or')}
|
|
200
224
|
</p>
|
|
201
225
|
|
|
@@ -224,7 +248,7 @@ export const Login = () => {
|
|
|
224
248
|
alt={provider.label}
|
|
225
249
|
width={provider.label === 'Facebook' ? 10 : 18}
|
|
226
250
|
height={18}
|
|
227
|
-
className="
|
|
251
|
+
className="shrink-0"
|
|
228
252
|
/>
|
|
229
253
|
)}
|
|
230
254
|
|
|
@@ -159,7 +159,7 @@ export default function ProductInfo({ data }: ProductPageProps) {
|
|
|
159
159
|
<>
|
|
160
160
|
<div
|
|
161
161
|
className={clsx(
|
|
162
|
-
'fixed bottom-0 left-0 w-1/2 h-14 z-
|
|
162
|
+
'fixed bottom-0 left-0 w-1/2 h-14 z-20 bg-white mt-0 border-t border-gray-500 items-center justify-center',
|
|
163
163
|
'sm:relative sm:flex sm:items-center sm:mt-5 sm:border-none'
|
|
164
164
|
)}
|
|
165
165
|
>
|
|
@@ -188,7 +188,7 @@ export default function ProductInfo({ data }: ProductPageProps) {
|
|
|
188
188
|
<Button
|
|
189
189
|
disabled={isAddToCartLoading || isAddToStockAlertLoading}
|
|
190
190
|
className={clsx(
|
|
191
|
-
'fixed bottom-0 right-0 w-1/2 h-14 z-
|
|
191
|
+
'fixed bottom-0 right-0 w-1/2 h-14 z-20 flex items-center justify-center fill-primary-foreground',
|
|
192
192
|
'hover:fill-primary sm:relative sm:w-full sm:mt-3 sm:font-semibold sm:h-12'
|
|
193
193
|
)}
|
|
194
194
|
onClick={() => {
|
|
@@ -86,7 +86,7 @@ export default function ProductInfoSlider({ product }: ProductSliderItem) {
|
|
|
86
86
|
</div>
|
|
87
87
|
|
|
88
88
|
<div className="relative lg:col-span-5">
|
|
89
|
-
<FavButton className="absolute right-8 top-6 z-
|
|
89
|
+
<FavButton className="absolute right-8 top-6 z-20 sm:hidden" />
|
|
90
90
|
|
|
91
91
|
<CarouselCore
|
|
92
92
|
responsive={{
|
|
@@ -109,7 +109,7 @@ const ProductPointerWidget = (props: ProductPointerWidgetProps) => {
|
|
|
109
109
|
hidden: buttonStatus
|
|
110
110
|
})}
|
|
111
111
|
>
|
|
112
|
-
<div className="w-full h-full flex items-center gap-2
|
|
112
|
+
<div className="w-full h-full flex items-center gap-2 shrink-0">
|
|
113
113
|
<Image
|
|
114
114
|
src={productItem?.kwargs?.value?.card_image?.url}
|
|
115
115
|
alt={productItem?.value?.alt}
|
|
@@ -143,6 +143,7 @@ export const Register = () => {
|
|
|
143
143
|
if (registerResponse.error) {
|
|
144
144
|
const errors: AuthError[] = JSON.parse(registerResponse.error);
|
|
145
145
|
|
|
146
|
+
|
|
146
147
|
if (errors.find((error) => error.type === 'captcha')) {
|
|
147
148
|
if (await validateCaptcha()) {
|
|
148
149
|
onSubmit(data);
|
|
@@ -164,10 +165,34 @@ export const Register = () => {
|
|
|
164
165
|
)?.data as string[];
|
|
165
166
|
|
|
166
167
|
fieldErrors?.forEach((item) => {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
168
|
+
let parsedValue: Record<string, string[]> | string[] = [];
|
|
169
|
+
|
|
170
|
+
if (typeof item.value === 'string') {
|
|
171
|
+
try {
|
|
172
|
+
parsedValue = JSON.parse(item.value);
|
|
173
|
+
} catch {
|
|
174
|
+
parsedValue = [item.value];
|
|
175
|
+
}
|
|
176
|
+
} else {
|
|
177
|
+
parsedValue = item.value;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
if (Array.isArray(parsedValue)) {
|
|
181
|
+
setError(item.name as keyof RegisterFormType, {
|
|
182
|
+
type: 'custom',
|
|
183
|
+
message: parsedValue.join(', '),
|
|
184
|
+
});
|
|
185
|
+
} else {
|
|
186
|
+
Object.keys(parsedValue).forEach((key) => {
|
|
187
|
+
const fieldName = key as keyof RegisterFormType;
|
|
188
|
+
const errorMessages = parsedValue[key] as string[];
|
|
189
|
+
|
|
190
|
+
setError(fieldName, {
|
|
191
|
+
type: 'custom',
|
|
192
|
+
message: errorMessages.join(', '),
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
}
|
|
171
196
|
});
|
|
172
197
|
|
|
173
198
|
if (nonFieldErrors?.length) {
|
|
@@ -169,19 +169,19 @@ export const SalesContractModal = ({ data }: Props) => {
|
|
|
169
169
|
</div>
|
|
170
170
|
</div>
|
|
171
171
|
|
|
172
|
-
<table className="w-full border">
|
|
172
|
+
<table className="w-full border border-gray-200">
|
|
173
173
|
<thead className="text-sm">
|
|
174
174
|
<tr>
|
|
175
|
-
<th className="border font-normal text-left py-2 px-3">
|
|
175
|
+
<th className="border border-gray-200 font-normal text-left py-2 px-3">
|
|
176
176
|
{t('account.sales_contract.product')}
|
|
177
177
|
</th>
|
|
178
|
-
<th className="border font-normal py-2 px-3">
|
|
178
|
+
<th className="border border-gray-200 font-normal py-2 px-3">
|
|
179
179
|
{t('account.sales_contract.quantity')}
|
|
180
180
|
</th>
|
|
181
|
-
<th className="border font-normal text-left py-2 px-3">
|
|
181
|
+
<th className="border border-gray-200 font-normal text-left py-2 px-3">
|
|
182
182
|
{t('account.sales_contract.product_price')}
|
|
183
183
|
</th>
|
|
184
|
-
<th className="border font-normal text-left py-2 px-3">
|
|
184
|
+
<th className="border border-gray-200 font-normal text-left py-2 px-3">
|
|
185
185
|
{t('account.sales_contract.total_price')}
|
|
186
186
|
</th>
|
|
187
187
|
</tr>
|
|
@@ -191,20 +191,20 @@ export const SalesContractModal = ({ data }: Props) => {
|
|
|
191
191
|
{data.orderitem_set.map((value, index) => {
|
|
192
192
|
return (
|
|
193
193
|
<tr key={index.toString()}>
|
|
194
|
-
<td className="border font-light text-left py-2 px-3">
|
|
194
|
+
<td className="border border-gray-200 font-light text-left py-2 px-3">
|
|
195
195
|
{value.product.name}
|
|
196
196
|
</td>
|
|
197
|
-
<td className="border font-light text-center py-2 px-3">
|
|
197
|
+
<td className="border border-gray-200 font-light text-center py-2 px-3">
|
|
198
198
|
{value.quantity ? value.quantity : '1'}
|
|
199
199
|
</td>
|
|
200
|
-
<td className="border font-light text-center py-2 px-3">
|
|
200
|
+
<td className="border border-gray-200 font-light text-center py-2 px-3">
|
|
201
201
|
<Price
|
|
202
202
|
value={
|
|
203
203
|
value.unit_price ? value.unit_price : value.price
|
|
204
204
|
}
|
|
205
205
|
/>
|
|
206
206
|
</td>
|
|
207
|
-
<td className="border font-light text-right py-2 px-3">
|
|
207
|
+
<td className="border border-gray-200 font-light text-right py-2 px-3">
|
|
208
208
|
<Price
|
|
209
209
|
value={
|
|
210
210
|
value.total_amount
|
|
@@ -222,12 +222,12 @@ export const SalesContractModal = ({ data }: Props) => {
|
|
|
222
222
|
<tr>
|
|
223
223
|
<th
|
|
224
224
|
colSpan={3}
|
|
225
|
-
className="border text-left py-2 px-3 font-normal"
|
|
225
|
+
className="border border-gray-200 text-left py-2 px-3 font-normal"
|
|
226
226
|
>
|
|
227
227
|
{t('account.sales_contract.products_total')}
|
|
228
228
|
</th>
|
|
229
229
|
<td
|
|
230
|
-
className="border text-right py-2 px-3 font-light"
|
|
230
|
+
className="border border-gray-200 text-right py-2 px-3 font-light"
|
|
231
231
|
colSpan={1}
|
|
232
232
|
>
|
|
233
233
|
<Price value={data.discount_amount} />
|
|
@@ -237,12 +237,12 @@ export const SalesContractModal = ({ data }: Props) => {
|
|
|
237
237
|
<tr>
|
|
238
238
|
<th
|
|
239
239
|
colSpan={3}
|
|
240
|
-
className="border text-left py-2 px-3 font-normal"
|
|
240
|
+
className="border border-gray-200 text-left py-2 px-3 font-normal"
|
|
241
241
|
>
|
|
242
242
|
{t('account.sales_contract.shipping_price')}
|
|
243
243
|
</th>
|
|
244
244
|
<td
|
|
245
|
-
className="border text-right py-2 px-3 font-light"
|
|
245
|
+
className="border border-gray-200 text-right py-2 px-3 font-light"
|
|
246
246
|
colSpan={1}
|
|
247
247
|
>
|
|
248
248
|
<Price value={data.shipping_amount} />
|
|
@@ -252,12 +252,12 @@ export const SalesContractModal = ({ data }: Props) => {
|
|
|
252
252
|
<tr>
|
|
253
253
|
<th
|
|
254
254
|
colSpan={3}
|
|
255
|
-
className="border text-left py-2 px-3 font-normal"
|
|
255
|
+
className="border border-gray-200 text-left py-2 px-3 font-normal"
|
|
256
256
|
>
|
|
257
257
|
{t('account.sales_contract.payment_type')}
|
|
258
258
|
</th>
|
|
259
259
|
<td
|
|
260
|
-
className="border text-right py-2 px-3 font-light"
|
|
260
|
+
className="border border-gray-200 text-right py-2 px-3 font-light"
|
|
261
261
|
colSpan={1}
|
|
262
262
|
>
|
|
263
263
|
{data.payment_option_slug}
|
|
@@ -267,12 +267,12 @@ export const SalesContractModal = ({ data }: Props) => {
|
|
|
267
267
|
<tr>
|
|
268
268
|
<th
|
|
269
269
|
colSpan={3}
|
|
270
|
-
className="border text-left py-2 px-3 font-normal"
|
|
270
|
+
className="border border-gray-200 text-left py-2 px-3 font-normal"
|
|
271
271
|
>
|
|
272
272
|
{t('account.sales_contract.order_total')}
|
|
273
273
|
</th>
|
|
274
274
|
<td
|
|
275
|
-
className="border text-right py-2 px-3 font-light"
|
|
275
|
+
className="border border-gray-200 text-right py-2 px-3 font-light"
|
|
276
276
|
colSpan={1}
|
|
277
277
|
>
|
|
278
278
|
<Price value={data.amount} />
|
|
@@ -19,7 +19,7 @@ export default async function FooterInfo() {
|
|
|
19
19
|
const data = await getWidgetData<FooterInfoType>({ slug: 'footer-info' });
|
|
20
20
|
|
|
21
21
|
return (
|
|
22
|
-
<div className="flex flex-col w-full mb-4 pb-4 text-xs border-b md:border-b-0 md:pb-0 md:mb-0 md:w-3/12 lg:w-1/6 md:pr-7">
|
|
22
|
+
<div className="flex flex-col w-full mb-4 pb-4 text-xs border-b border-gray-200 md:border-b-0 md:pb-0 md:mb-0 md:w-3/12 lg:w-1/6 md:pr-7">
|
|
23
23
|
<div className="flex items-center mb-8">
|
|
24
24
|
<div className="mr-3">
|
|
25
25
|
<svg
|
|
@@ -50,7 +50,7 @@ export default async function FooterMenu() {
|
|
|
50
50
|
|
|
51
51
|
return (
|
|
52
52
|
<div className="flex-1">
|
|
53
|
-
<div className="hidden justify-between text-xs md:flex md:px-6 md:py-4 md:border-r md:border-l">
|
|
53
|
+
<div className="hidden justify-between text-xs md:flex md:px-6 md:py-4 md:border-r md:border-l md:border-gray-200">
|
|
54
54
|
<div>
|
|
55
55
|
<div className="mb-4 font-medium" data-testid="footer-categories">
|
|
56
56
|
{data?.attributes?.first_column_title?.value}
|
|
@@ -19,7 +19,7 @@ export default async function FooterSubscription() {
|
|
|
19
19
|
});
|
|
20
20
|
|
|
21
21
|
return (
|
|
22
|
-
<div className="py-4 border-t md:border-t-0 lg:pl-7">
|
|
22
|
+
<div className="py-4 border-t border-gray-200 md:border-t-0 lg:pl-7">
|
|
23
23
|
<h3 className="mb-1 text-xs font-medium">
|
|
24
24
|
{data?.attributes?.title?.value}
|
|
25
25
|
</h3>
|
|
@@ -82,7 +82,7 @@ export default async function HomeStoriesEng() {
|
|
|
82
82
|
{data?.attributes?.stories?.map((story, index) => {
|
|
83
83
|
return (
|
|
84
84
|
<div
|
|
85
|
-
className="mr-4
|
|
85
|
+
className="mr-4 shrink-0 first:ms-4 w-32 md:w-32"
|
|
86
86
|
key={`story__${index}`}
|
|
87
87
|
>
|
|
88
88
|
<Link href={story?.value?.url} aria-label={story?.value?.alt}>
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
const deepMerge = require('@akinon/next/utils/deep-merge');
|
|
2
|
-
const defaultTheme = require('tailwindcss/defaultTheme');
|
|
3
2
|
const plugins = require('./src/plugins');
|
|
4
3
|
const fs = require('fs');
|
|
5
4
|
const path = require('path');
|
|
@@ -19,148 +18,13 @@ if (themeName !== 'default' && fs.existsSync(themeConfigPath)) {
|
|
|
19
18
|
|
|
20
19
|
const defaultConfig = {
|
|
21
20
|
content: [
|
|
22
|
-
'./src/app/**/*.{js,ts,jsx,tsx}',
|
|
23
|
-
'./src/pages/**/*.{js,ts,jsx,tsx}',
|
|
24
|
-
'./src/components/**/*.{js,ts,jsx,tsx}',
|
|
25
|
-
'./src/views/**/*.{js,ts,jsx,tsx}',
|
|
26
|
-
'./src/widgets/**/*.{js,ts,jsx,tsx}',
|
|
27
|
-
'./src/hooks/**/*.{js,ts,jsx,tsx}',
|
|
28
|
-
'./src/utils/**/*.{js,ts,jsx,tsx}',
|
|
29
21
|
...plugins
|
|
30
22
|
.map((plugin) => [
|
|
31
23
|
`./node_modules/@akinon/${plugin}/**/*.{js,ts,jsx,tsx}`,
|
|
32
24
|
`../../node_modules/@akinon/${plugin}/**/*.{js,ts,jsx,tsx}`
|
|
33
25
|
])
|
|
34
26
|
.flat()
|
|
35
|
-
]
|
|
36
|
-
theme: {
|
|
37
|
-
extend: {
|
|
38
|
-
fontSize: {
|
|
39
|
-
'2xs': '0.5rem'
|
|
40
|
-
},
|
|
41
|
-
outline: {
|
|
42
|
-
off: 'none'
|
|
43
|
-
},
|
|
44
|
-
width: {
|
|
45
|
-
'1/10': '10%',
|
|
46
|
-
'2/10': '20%',
|
|
47
|
-
'3/10': '30%',
|
|
48
|
-
'4/10': '40%',
|
|
49
|
-
'5/10': '50%',
|
|
50
|
-
'6/10': '60%',
|
|
51
|
-
'7/10': '70%',
|
|
52
|
-
'8/10': '80%',
|
|
53
|
-
'9/10': '90%'
|
|
54
|
-
},
|
|
55
|
-
transitionProperty: {
|
|
56
|
-
'max-width': 'max-width'
|
|
57
|
-
},
|
|
58
|
-
backgroundImage: {
|
|
59
|
-
'skeleton-shimmer':
|
|
60
|
-
'linear-gradient(90deg, #d7d7d7 0%, #ebebeb 40%, #eeeeee 60%, #d7d7d7)'
|
|
61
|
-
},
|
|
62
|
-
keyframes: {
|
|
63
|
-
'skeleton-shimmer': {
|
|
64
|
-
'100%': {
|
|
65
|
-
transform: 'translateX(100%)'
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
},
|
|
69
|
-
animation: {
|
|
70
|
-
'skeleton-shimmer': 'skeleton-shimmer 2s linear infinite'
|
|
71
|
-
}
|
|
72
|
-
},
|
|
73
|
-
colors: {
|
|
74
|
-
transparent: 'transparent',
|
|
75
|
-
white: '#ffffff',
|
|
76
|
-
primary: {
|
|
77
|
-
DEFAULT: '#000000',
|
|
78
|
-
hover: '#181818',
|
|
79
|
-
foreground: '#ffffff',
|
|
80
|
-
100: '#525252',
|
|
81
|
-
200: '#404040',
|
|
82
|
-
300: '#3d3d3d',
|
|
83
|
-
400: '#333333',
|
|
84
|
-
500: '#2d2d2d',
|
|
85
|
-
600: '#292929',
|
|
86
|
-
700: '#2b2b2b',
|
|
87
|
-
800: '#181818',
|
|
88
|
-
900: '#000000'
|
|
89
|
-
},
|
|
90
|
-
secondary: {
|
|
91
|
-
DEFAULT: '#e95151',
|
|
92
|
-
hover: '#d03838',
|
|
93
|
-
foreground: '#ffffff',
|
|
94
|
-
100: '#ffb7b7',
|
|
95
|
-
200: '#ff9e9e',
|
|
96
|
-
300: '#ff8484',
|
|
97
|
-
400: '#ff6b6b',
|
|
98
|
-
500: '#e95151',
|
|
99
|
-
600: '#d72b01',
|
|
100
|
-
700: '#b61e1e',
|
|
101
|
-
800: '#9d0505',
|
|
102
|
-
900: '#830000'
|
|
103
|
-
},
|
|
104
|
-
black: {
|
|
105
|
-
DEFAULT: '#000000',
|
|
106
|
-
100: '#525252',
|
|
107
|
-
200: '#404040',
|
|
108
|
-
300: '#3d3d3d',
|
|
109
|
-
400: '#333333',
|
|
110
|
-
500: '#2d2d2d',
|
|
111
|
-
600: '#292929',
|
|
112
|
-
700: '#2b2b2b',
|
|
113
|
-
800: '#181818',
|
|
114
|
-
900: '#000000'
|
|
115
|
-
},
|
|
116
|
-
gray: {
|
|
117
|
-
DEFAULT: '#ebebeb',
|
|
118
|
-
25: '#fdfdfd',
|
|
119
|
-
50: '#f7f7f7',
|
|
120
|
-
100: '#f5f5f5',
|
|
121
|
-
150: '#f4f4f4',
|
|
122
|
-
200: '#eeeeee',
|
|
123
|
-
300: '#ebebeb',
|
|
124
|
-
400: '#d7d7d7',
|
|
125
|
-
450: '#d4d4d4',
|
|
126
|
-
500: '#c9c9c9',
|
|
127
|
-
600: '#9d9d9d',
|
|
128
|
-
700: '#686868',
|
|
129
|
-
800: '#615f62',
|
|
130
|
-
850: '#58585a',
|
|
131
|
-
900: '#4a4f54',
|
|
132
|
-
950: '#424242'
|
|
133
|
-
},
|
|
134
|
-
error: {
|
|
135
|
-
DEFAULT: '#d72b01',
|
|
136
|
-
100: '#e20008'
|
|
137
|
-
},
|
|
138
|
-
success: {
|
|
139
|
-
DEFAULT: '#7b9d76',
|
|
140
|
-
100: '#7b9d76'
|
|
141
|
-
}
|
|
142
|
-
},
|
|
143
|
-
container: {
|
|
144
|
-
center: true,
|
|
145
|
-
padding: {
|
|
146
|
-
DEFAULT: '0rem',
|
|
147
|
-
sm: '2rem',
|
|
148
|
-
'2xl': '0rem'
|
|
149
|
-
}
|
|
150
|
-
},
|
|
151
|
-
fontFamily: {
|
|
152
|
-
sans: ['Jost'].concat(defaultTheme.fontFamily.sans)
|
|
153
|
-
},
|
|
154
|
-
screens: {
|
|
155
|
-
xs: '575px',
|
|
156
|
-
sm: '640px',
|
|
157
|
-
md: '768px',
|
|
158
|
-
lg: '1024px',
|
|
159
|
-
xl: '1170px',
|
|
160
|
-
'2xl': '1370px'
|
|
161
|
-
}
|
|
162
|
-
},
|
|
163
|
-
plugins: [require('@tailwindcss/typography')]
|
|
27
|
+
]
|
|
164
28
|
};
|
|
165
29
|
|
|
166
30
|
if (Object.keys(themeOverrides).length === 0) {
|
package/commands/plugins.ts
CHANGED
package/dist/commands/plugins.js
CHANGED
|
@@ -137,6 +137,10 @@ exports.default = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
137
137
|
{
|
|
138
138
|
name: 'Tabby Payment Extension',
|
|
139
139
|
value: 'pz-tabby-extension'
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
name: 'Tamara Payment Extension',
|
|
143
|
+
value: 'pz-tamara-extension'
|
|
140
144
|
}
|
|
141
145
|
];
|
|
142
146
|
const prompt = new Prompt({
|
package/package.json
CHANGED