@springmicro/cart 0.5.17 → 0.6.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/.eslintrc.cjs +21 -21
- package/README.md +64 -64
- package/dist/index.js +0 -0
- package/dist/index.umd.cjs +0 -0
- package/package.json +3 -3
- package/src/AddToCartForm.tsx +16 -16
- package/src/CartButton.tsx +0 -0
- package/src/ProductCard.css +106 -106
- package/src/ProductCard.tsx +0 -0
- package/src/checkout/ReviewCartAndCalculateTaxes.css +93 -93
- package/src/checkout/ReviewCartAndCalculateTaxes.tsx +0 -0
- package/src/checkout/components/AddCard.tsx +0 -0
- package/src/checkout/components/Address.tsx +0 -0
- package/src/checkout/components/CartList.tsx +0 -0
- package/src/checkout/components/CartProductCard.css +67 -67
- package/src/checkout/components/CartProductCard.tsx +0 -0
- package/src/checkout/components/Invoice.tsx +145 -145
- package/src/checkout/components/ProviderLogos.tsx +93 -93
- package/src/checkout/components/StatusBar.tsx +0 -0
- package/src/checkout/index.tsx +0 -0
- package/src/index.css +5 -5
- package/src/index.ts +0 -0
- package/src/types.d.ts +56 -56
- package/src/utils/api.ts +67 -67
- package/src/utils/cartAuthHandler.ts +50 -50
- package/src/utils/index.ts +0 -0
- package/src/utils/storage.ts +0 -0
- package/tsconfig.json +24 -24
- package/tsconfig.node.json +11 -11
- package/vite.config.ts +25 -25
- package/springmicro-cart-0.3.4.tgz +0 -0
package/.eslintrc.cjs
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
module.exports = {
|
|
2
|
-
root: true,
|
|
3
|
-
env: { browser: true, es2020: true },
|
|
4
|
-
extends: [
|
|
5
|
-
"eslint:recommended",
|
|
6
|
-
"plugin:@typescript-eslint/recommended",
|
|
7
|
-
"plugin:react-hooks/recommended",
|
|
8
|
-
],
|
|
9
|
-
ignorePatterns: ["dist", ".eslintrc.cjs"],
|
|
10
|
-
parser: "@typescript-eslint/parser",
|
|
11
|
-
plugins: ["react-refresh"],
|
|
12
|
-
rules: {
|
|
13
|
-
"react-refresh/only-export-components": [
|
|
14
|
-
"warn",
|
|
15
|
-
{ allowConstantExport: true },
|
|
16
|
-
],
|
|
17
|
-
"@typescript-eslint/no-explicit-any": "off",
|
|
18
|
-
"@typescript-eslint/no-unused-vars": "off",
|
|
19
|
-
"react-hooks/exhaustive-deps": "off",
|
|
20
|
-
},
|
|
21
|
-
};
|
|
1
|
+
module.exports = {
|
|
2
|
+
root: true,
|
|
3
|
+
env: { browser: true, es2020: true },
|
|
4
|
+
extends: [
|
|
5
|
+
"eslint:recommended",
|
|
6
|
+
"plugin:@typescript-eslint/recommended",
|
|
7
|
+
"plugin:react-hooks/recommended",
|
|
8
|
+
],
|
|
9
|
+
ignorePatterns: ["dist", ".eslintrc.cjs"],
|
|
10
|
+
parser: "@typescript-eslint/parser",
|
|
11
|
+
plugins: ["react-refresh"],
|
|
12
|
+
rules: {
|
|
13
|
+
"react-refresh/only-export-components": [
|
|
14
|
+
"warn",
|
|
15
|
+
{ allowConstantExport: true },
|
|
16
|
+
],
|
|
17
|
+
"@typescript-eslint/no-explicit-any": "off",
|
|
18
|
+
"@typescript-eslint/no-unused-vars": "off",
|
|
19
|
+
"react-hooks/exhaustive-deps": "off",
|
|
20
|
+
},
|
|
21
|
+
};
|
package/README.md
CHANGED
|
@@ -1,64 +1,64 @@
|
|
|
1
|
-
# @springmicro/cart
|
|
2
|
-
|
|
3
|
-
A package for eCommerce sites that provides shopping cart functionality.
|
|
4
|
-
|
|
5
|
-
# Exports
|
|
6
|
-
|
|
7
|
-
## Components
|
|
8
|
-
|
|
9
|
-
### CartProvider
|
|
10
|
-
|
|
11
|
-
Provides and handles all the data for the cart.
|
|
12
|
-
Requires a ReactNode child. `apiUrl` will be modified to end with `/api/ecommerce/cart`. If the user object changes, the provider automatically logs in and out of the cart.
|
|
13
|
-
|
|
14
|
-
#### Required props:
|
|
15
|
-
|
|
16
|
-
```ts
|
|
17
|
-
user={({ id: number | string } & any) | undefined}
|
|
18
|
-
apiUrl={string}
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
### CartContext
|
|
22
|
-
|
|
23
|
-
Allows all scopes under the `CartProvider` to read from the cart data and the functions to modify the cart.
|
|
24
|
-
|
|
25
|
-
#### Provisions:
|
|
26
|
-
|
|
27
|
-
- `cart`: `Cart`
|
|
28
|
-
- - Provides cart and authentication data.
|
|
29
|
-
- `addToCart`: `(product: CartProduct) => void`
|
|
30
|
-
- - Adds a product to the cart.
|
|
31
|
-
- `removeFromCart`: `(i: number) => void`
|
|
32
|
-
- - Removes an item from the cart at the given index.
|
|
33
|
-
- `clearCart`: `() => void`
|
|
34
|
-
- - Clears the cart.
|
|
35
|
-
|
|
36
|
-
### CartButton
|
|
37
|
-
|
|
38
|
-
A frontend-facing component to display the cart contents in a Modal. This component is designed to go in a top navbar, ideally on the right-hand side.
|
|
39
|
-
This component is required to be in a `CartProvider` scope.
|
|
40
|
-
|
|
41
|
-
## Types
|
|
42
|
-
|
|
43
|
-
### Cart
|
|
44
|
-
|
|
45
|
-
The type of the `cart` in `CartContext.cart`.
|
|
46
|
-
|
|
47
|
-
```ts
|
|
48
|
-
{
|
|
49
|
-
cart: CartProducts[],
|
|
50
|
-
authentication: {loggedIn: boolean, user_id: string | number}
|
|
51
|
-
}
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
### CartProduct
|
|
55
|
-
|
|
56
|
-
The type of the products listed in `Cart.cart`.
|
|
57
|
-
|
|
58
|
-
```ts
|
|
59
|
-
{
|
|
60
|
-
id: number | string,
|
|
61
|
-
name: string,
|
|
62
|
-
quantity: number | undefined
|
|
63
|
-
}
|
|
64
|
-
```
|
|
1
|
+
# @springmicro/cart
|
|
2
|
+
|
|
3
|
+
A package for eCommerce sites that provides shopping cart functionality.
|
|
4
|
+
|
|
5
|
+
# Exports
|
|
6
|
+
|
|
7
|
+
## Components
|
|
8
|
+
|
|
9
|
+
### CartProvider
|
|
10
|
+
|
|
11
|
+
Provides and handles all the data for the cart.
|
|
12
|
+
Requires a ReactNode child. `apiUrl` will be modified to end with `/api/ecommerce/cart`. If the user object changes, the provider automatically logs in and out of the cart.
|
|
13
|
+
|
|
14
|
+
#### Required props:
|
|
15
|
+
|
|
16
|
+
```ts
|
|
17
|
+
user={({ id: number | string } & any) | undefined}
|
|
18
|
+
apiUrl={string}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### CartContext
|
|
22
|
+
|
|
23
|
+
Allows all scopes under the `CartProvider` to read from the cart data and the functions to modify the cart.
|
|
24
|
+
|
|
25
|
+
#### Provisions:
|
|
26
|
+
|
|
27
|
+
- `cart`: `Cart`
|
|
28
|
+
- - Provides cart and authentication data.
|
|
29
|
+
- `addToCart`: `(product: CartProduct) => void`
|
|
30
|
+
- - Adds a product to the cart.
|
|
31
|
+
- `removeFromCart`: `(i: number) => void`
|
|
32
|
+
- - Removes an item from the cart at the given index.
|
|
33
|
+
- `clearCart`: `() => void`
|
|
34
|
+
- - Clears the cart.
|
|
35
|
+
|
|
36
|
+
### CartButton
|
|
37
|
+
|
|
38
|
+
A frontend-facing component to display the cart contents in a Modal. This component is designed to go in a top navbar, ideally on the right-hand side.
|
|
39
|
+
This component is required to be in a `CartProvider` scope.
|
|
40
|
+
|
|
41
|
+
## Types
|
|
42
|
+
|
|
43
|
+
### Cart
|
|
44
|
+
|
|
45
|
+
The type of the `cart` in `CartContext.cart`.
|
|
46
|
+
|
|
47
|
+
```ts
|
|
48
|
+
{
|
|
49
|
+
cart: CartProducts[],
|
|
50
|
+
authentication: {loggedIn: boolean, user_id: string | number}
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### CartProduct
|
|
55
|
+
|
|
56
|
+
The type of the products listed in `Cart.cart`.
|
|
57
|
+
|
|
58
|
+
```ts
|
|
59
|
+
{
|
|
60
|
+
id: number | string,
|
|
61
|
+
name: string,
|
|
62
|
+
quantity: number | undefined
|
|
63
|
+
}
|
|
64
|
+
```
|
package/dist/index.js
CHANGED
|
File without changes
|
package/dist/index.umd.cjs
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@springmicro/cart",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.6.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"@nanostores/persistent": "^0.10.1",
|
|
25
25
|
"@nanostores/query": "^0.3.3",
|
|
26
26
|
"@nanostores/react": "^0.7.2",
|
|
27
|
-
"@springmicro/utils": "0.
|
|
27
|
+
"@springmicro/utils": "0.6.0",
|
|
28
28
|
"dotenv": "^16.4.5",
|
|
29
29
|
"nanostores": "^0.10.3",
|
|
30
30
|
"react": "^18.2.0",
|
|
@@ -49,5 +49,5 @@
|
|
|
49
49
|
"vite-plugin-css-injected-by-js": "^3.5.1",
|
|
50
50
|
"yup": "^1.4.0"
|
|
51
51
|
},
|
|
52
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "37c816671357a3b1af66ad231880216fbda2fb72"
|
|
53
53
|
}
|
package/src/AddToCartForm.tsx
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { CartProduct } from "./types";
|
|
2
|
-
import { addToCart } from "./utils/storage";
|
|
3
|
-
|
|
4
|
-
type Props = {
|
|
5
|
-
item: CartProduct;
|
|
6
|
-
children: any;
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
export default function AddToCartForm({ item, children }: Props) {
|
|
10
|
-
function addItemToCart(e: any) {
|
|
11
|
-
e.preventDefault();
|
|
12
|
-
addToCart(item);
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
return <form onSubmit={addItemToCart}>{children}</form>;
|
|
16
|
-
}
|
|
1
|
+
import { CartProduct } from "./types";
|
|
2
|
+
import { addToCart } from "./utils/storage";
|
|
3
|
+
|
|
4
|
+
type Props = {
|
|
5
|
+
item: CartProduct;
|
|
6
|
+
children: any;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export default function AddToCartForm({ item, children }: Props) {
|
|
10
|
+
function addItemToCart(e: any) {
|
|
11
|
+
e.preventDefault();
|
|
12
|
+
addToCart(item);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
return <form onSubmit={addItemToCart}>{children}</form>;
|
|
16
|
+
}
|
package/src/CartButton.tsx
CHANGED
|
File without changes
|
package/src/ProductCard.css
CHANGED
|
@@ -1,106 +1,106 @@
|
|
|
1
|
-
.card {
|
|
2
|
-
display: flex;
|
|
3
|
-
gap: 0.5rem;
|
|
4
|
-
flex-direction: column;
|
|
5
|
-
border-radius: 8px;
|
|
6
|
-
padding: 1rem;
|
|
7
|
-
box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0);
|
|
8
|
-
transition: all 0.3s 0.1s;
|
|
9
|
-
cursor: pointer;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
.card:hover {
|
|
13
|
-
box-shadow: 0px 2px 5px 2px #dfdfdfff;
|
|
14
|
-
transition: all 0.3s 0s;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
.card-section {
|
|
18
|
-
display: flex;
|
|
19
|
-
gap: 8px;
|
|
20
|
-
flex-direction: column;
|
|
21
|
-
align-items: center;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
.image-container {
|
|
25
|
-
width: 100%;
|
|
26
|
-
background-color: #ccc;
|
|
27
|
-
border-radius: 4px;
|
|
28
|
-
aspect-ratio: 1.5;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
.button-section {
|
|
32
|
-
display: flex;
|
|
33
|
-
justify-content: space-around;
|
|
34
|
-
flex-direction: row;
|
|
35
|
-
flex-wrap: wrap;
|
|
36
|
-
margin: 4px 2rem 0px;
|
|
37
|
-
gap: 0.5rem;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
.addtocartbutton {
|
|
41
|
-
color: white;
|
|
42
|
-
background-color: rgb(39, 138, 230);
|
|
43
|
-
padding: 4px 16px 6px;
|
|
44
|
-
border-radius: 8px;
|
|
45
|
-
outline: none;
|
|
46
|
-
transition: all 0.3s;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
.addtocartbutton.red {
|
|
50
|
-
background-color: rgb(230, 39, 39);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
.addtocartbutton.disabled {
|
|
54
|
-
background-color: rgb(170, 170, 170);
|
|
55
|
-
cursor: not-allowed;
|
|
56
|
-
}
|
|
57
|
-
.addtocartbutton.disabled:hover {
|
|
58
|
-
background-color: rgb(170, 170, 170);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
.addtocartbutton:hover {
|
|
62
|
-
background-color: rgb(36, 124, 207);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
.hover-button > .hover-section {
|
|
66
|
-
display: none;
|
|
67
|
-
position: absolute;
|
|
68
|
-
width: 325px;
|
|
69
|
-
margin-left: calc(-113.75px);
|
|
70
|
-
padding: 1rem;
|
|
71
|
-
color: black;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
.hover-button:hover > .hover-section {
|
|
75
|
-
display: flex;
|
|
76
|
-
justify-content: center;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
.hover-data {
|
|
80
|
-
border-radius: 8px;
|
|
81
|
-
padding: 1rem;
|
|
82
|
-
box-shadow: 0px 2px 5px 2px rgb(173, 173, 173);
|
|
83
|
-
background-color: white;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
.hover-data > div {
|
|
87
|
-
display: flex;
|
|
88
|
-
flex-direction: column;
|
|
89
|
-
background-color: rgb(203, 203, 203);
|
|
90
|
-
gap: 1px;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
.tieredpricingbutton {
|
|
94
|
-
display: flex;
|
|
95
|
-
flex-direction: column;
|
|
96
|
-
justify-content: flex-start;
|
|
97
|
-
align-items: flex-start;
|
|
98
|
-
text-align: left;
|
|
99
|
-
padding: 4px 0.5rem 8px;
|
|
100
|
-
background-color: white;
|
|
101
|
-
transition: all 0.3s;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
.tieredpricingbutton:hover {
|
|
105
|
-
background-color: rgb(233, 233, 233);
|
|
106
|
-
}
|
|
1
|
+
.card {
|
|
2
|
+
display: flex;
|
|
3
|
+
gap: 0.5rem;
|
|
4
|
+
flex-direction: column;
|
|
5
|
+
border-radius: 8px;
|
|
6
|
+
padding: 1rem;
|
|
7
|
+
box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0);
|
|
8
|
+
transition: all 0.3s 0.1s;
|
|
9
|
+
cursor: pointer;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.card:hover {
|
|
13
|
+
box-shadow: 0px 2px 5px 2px #dfdfdfff;
|
|
14
|
+
transition: all 0.3s 0s;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.card-section {
|
|
18
|
+
display: flex;
|
|
19
|
+
gap: 8px;
|
|
20
|
+
flex-direction: column;
|
|
21
|
+
align-items: center;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.image-container {
|
|
25
|
+
width: 100%;
|
|
26
|
+
background-color: #ccc;
|
|
27
|
+
border-radius: 4px;
|
|
28
|
+
aspect-ratio: 1.5;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.button-section {
|
|
32
|
+
display: flex;
|
|
33
|
+
justify-content: space-around;
|
|
34
|
+
flex-direction: row;
|
|
35
|
+
flex-wrap: wrap;
|
|
36
|
+
margin: 4px 2rem 0px;
|
|
37
|
+
gap: 0.5rem;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.addtocartbutton {
|
|
41
|
+
color: white;
|
|
42
|
+
background-color: rgb(39, 138, 230);
|
|
43
|
+
padding: 4px 16px 6px;
|
|
44
|
+
border-radius: 8px;
|
|
45
|
+
outline: none;
|
|
46
|
+
transition: all 0.3s;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.addtocartbutton.red {
|
|
50
|
+
background-color: rgb(230, 39, 39);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.addtocartbutton.disabled {
|
|
54
|
+
background-color: rgb(170, 170, 170);
|
|
55
|
+
cursor: not-allowed;
|
|
56
|
+
}
|
|
57
|
+
.addtocartbutton.disabled:hover {
|
|
58
|
+
background-color: rgb(170, 170, 170);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.addtocartbutton:hover {
|
|
62
|
+
background-color: rgb(36, 124, 207);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.hover-button > .hover-section {
|
|
66
|
+
display: none;
|
|
67
|
+
position: absolute;
|
|
68
|
+
width: 325px;
|
|
69
|
+
margin-left: calc(-113.75px);
|
|
70
|
+
padding: 1rem;
|
|
71
|
+
color: black;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.hover-button:hover > .hover-section {
|
|
75
|
+
display: flex;
|
|
76
|
+
justify-content: center;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.hover-data {
|
|
80
|
+
border-radius: 8px;
|
|
81
|
+
padding: 1rem;
|
|
82
|
+
box-shadow: 0px 2px 5px 2px rgb(173, 173, 173);
|
|
83
|
+
background-color: white;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.hover-data > div {
|
|
87
|
+
display: flex;
|
|
88
|
+
flex-direction: column;
|
|
89
|
+
background-color: rgb(203, 203, 203);
|
|
90
|
+
gap: 1px;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.tieredpricingbutton {
|
|
94
|
+
display: flex;
|
|
95
|
+
flex-direction: column;
|
|
96
|
+
justify-content: flex-start;
|
|
97
|
+
align-items: flex-start;
|
|
98
|
+
text-align: left;
|
|
99
|
+
padding: 4px 0.5rem 8px;
|
|
100
|
+
background-color: white;
|
|
101
|
+
transition: all 0.3s;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.tieredpricingbutton:hover {
|
|
105
|
+
background-color: rgb(233, 233, 233);
|
|
106
|
+
}
|
package/src/ProductCard.tsx
CHANGED
|
File without changes
|
|
@@ -1,93 +1,93 @@
|
|
|
1
|
-
.two-col {
|
|
2
|
-
display: flex;
|
|
3
|
-
/* grid-template-columns: 1fr 1fr; */
|
|
4
|
-
margin-top: 2rem;
|
|
5
|
-
align-items: flex-start;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
.two-col > * {
|
|
9
|
-
width: 50%;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
.checkout-list {
|
|
13
|
-
display: flex;
|
|
14
|
-
flex-direction: column;
|
|
15
|
-
align-items: center;
|
|
16
|
-
gap: 1rem;
|
|
17
|
-
padding: 8px 4px;
|
|
18
|
-
margin-top: 1rem;
|
|
19
|
-
max-height: 50vh;
|
|
20
|
-
overflow: auto;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
@keyframes cardanimate {
|
|
24
|
-
0% {
|
|
25
|
-
box-shadow: 0px 2px 5px 2px #dfdfdfff;
|
|
26
|
-
}
|
|
27
|
-
50% {
|
|
28
|
-
box-shadow: 0px 0px 0px 0px #ffffff00;
|
|
29
|
-
}
|
|
30
|
-
100% {
|
|
31
|
-
box-shadow: 0px 2px 5px 2px #dfdfdfff;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
.skeleton-card {
|
|
36
|
-
min-height: 318px;
|
|
37
|
-
border-radius: 8px;
|
|
38
|
-
box-shadow: 0px 2px 5px 2px #dfdfdfff;
|
|
39
|
-
animation: cardanimate 1.25s linear infinite;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
#status-bar {
|
|
43
|
-
display: flex;
|
|
44
|
-
flex-direction: row;
|
|
45
|
-
gap: 1rem;
|
|
46
|
-
align-items: center;
|
|
47
|
-
margin-left: -29px;
|
|
48
|
-
margin-bottom: 1rem;
|
|
49
|
-
margin-top: 2rem;
|
|
50
|
-
font-size: 18px;
|
|
51
|
-
font-weight: 600;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
.status-bar {
|
|
55
|
-
width: 200px;
|
|
56
|
-
height: 6px;
|
|
57
|
-
background: linear-gradient(
|
|
58
|
-
90deg,
|
|
59
|
-
rgb(40, 130, 213) 0%,
|
|
60
|
-
rgb(40, 130, 213) 50%,
|
|
61
|
-
lightgrey 50%,
|
|
62
|
-
lightgrey 100%
|
|
63
|
-
);
|
|
64
|
-
background-position: 100% 0;
|
|
65
|
-
transition: color 0.3s 0s; /* active -> inactive */
|
|
66
|
-
background-size: 200% 100%;
|
|
67
|
-
border-radius: 16px;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
.status-bar.active {
|
|
71
|
-
background-position: 0 0;
|
|
72
|
-
transition: background-position 0.75s; /* inactive -> active */
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
.status-text {
|
|
76
|
-
color: lightgrey;
|
|
77
|
-
transition: color 0.3s 0s; /* active -> inactive */
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
.status-text.active {
|
|
81
|
-
color: rgb(40, 130, 213);
|
|
82
|
-
transition: color 0.5s 0.65s; /* inactive -> active */
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
.shopping-button {
|
|
86
|
-
color: white;
|
|
87
|
-
background-color: rgb(39, 138, 230);
|
|
88
|
-
padding: 4px 16px 6px;
|
|
89
|
-
border-radius: 8px;
|
|
90
|
-
outline: none;
|
|
91
|
-
transition: all 0.3s;
|
|
92
|
-
text-decoration: none;
|
|
93
|
-
}
|
|
1
|
+
.two-col {
|
|
2
|
+
display: flex;
|
|
3
|
+
/* grid-template-columns: 1fr 1fr; */
|
|
4
|
+
margin-top: 2rem;
|
|
5
|
+
align-items: flex-start;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.two-col > * {
|
|
9
|
+
width: 50%;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.checkout-list {
|
|
13
|
+
display: flex;
|
|
14
|
+
flex-direction: column;
|
|
15
|
+
align-items: center;
|
|
16
|
+
gap: 1rem;
|
|
17
|
+
padding: 8px 4px;
|
|
18
|
+
margin-top: 1rem;
|
|
19
|
+
max-height: 50vh;
|
|
20
|
+
overflow: auto;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
@keyframes cardanimate {
|
|
24
|
+
0% {
|
|
25
|
+
box-shadow: 0px 2px 5px 2px #dfdfdfff;
|
|
26
|
+
}
|
|
27
|
+
50% {
|
|
28
|
+
box-shadow: 0px 0px 0px 0px #ffffff00;
|
|
29
|
+
}
|
|
30
|
+
100% {
|
|
31
|
+
box-shadow: 0px 2px 5px 2px #dfdfdfff;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.skeleton-card {
|
|
36
|
+
min-height: 318px;
|
|
37
|
+
border-radius: 8px;
|
|
38
|
+
box-shadow: 0px 2px 5px 2px #dfdfdfff;
|
|
39
|
+
animation: cardanimate 1.25s linear infinite;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
#status-bar {
|
|
43
|
+
display: flex;
|
|
44
|
+
flex-direction: row;
|
|
45
|
+
gap: 1rem;
|
|
46
|
+
align-items: center;
|
|
47
|
+
margin-left: -29px;
|
|
48
|
+
margin-bottom: 1rem;
|
|
49
|
+
margin-top: 2rem;
|
|
50
|
+
font-size: 18px;
|
|
51
|
+
font-weight: 600;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.status-bar {
|
|
55
|
+
width: 200px;
|
|
56
|
+
height: 6px;
|
|
57
|
+
background: linear-gradient(
|
|
58
|
+
90deg,
|
|
59
|
+
rgb(40, 130, 213) 0%,
|
|
60
|
+
rgb(40, 130, 213) 50%,
|
|
61
|
+
lightgrey 50%,
|
|
62
|
+
lightgrey 100%
|
|
63
|
+
);
|
|
64
|
+
background-position: 100% 0;
|
|
65
|
+
transition: color 0.3s 0s; /* active -> inactive */
|
|
66
|
+
background-size: 200% 100%;
|
|
67
|
+
border-radius: 16px;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.status-bar.active {
|
|
71
|
+
background-position: 0 0;
|
|
72
|
+
transition: background-position 0.75s; /* inactive -> active */
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.status-text {
|
|
76
|
+
color: lightgrey;
|
|
77
|
+
transition: color 0.3s 0s; /* active -> inactive */
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.status-text.active {
|
|
81
|
+
color: rgb(40, 130, 213);
|
|
82
|
+
transition: color 0.5s 0.65s; /* inactive -> active */
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.shopping-button {
|
|
86
|
+
color: white;
|
|
87
|
+
background-color: rgb(39, 138, 230);
|
|
88
|
+
padding: 4px 16px 6px;
|
|
89
|
+
border-radius: 8px;
|
|
90
|
+
outline: none;
|
|
91
|
+
transition: all 0.3s;
|
|
92
|
+
text-decoration: none;
|
|
93
|
+
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|