afront 1.0.24 → 1.0.25
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/.babelrc +13 -13
- package/.env +1 -1
- package/LICENSE +21 -21
- package/README.md +94 -94
- package/build-prod/index.html +1 -1
- package/build-prod/manifest.json +25 -25
- package/build-prod/offline.html +1023 -1023
- package/build-prod/robots.txt +3 -3
- package/build-prod-static/index.html +1 -1
- package/build-prod-static/manifest.json +25 -25
- package/build-prod-static/offline.html +1023 -1023
- package/build-prod-static/robots.txt +3 -3
- package/install.js +415 -415
- package/package.json +102 -96
- package/server.js +40 -40
- package/src/ARoutes/AFRoutes.js +28 -28
- package/src/Api/api.config.js +266 -266
- package/src/Api/login.service.js +44 -44
- package/src/App.js +28 -28
- package/src/Components/Background/MeshGradient.js +18 -18
- package/src/Components/Footer/Footer.js +108 -108
- package/src/Components/Header/Header.js +149 -149
- package/src/Components/Loading/LoadingIndicator.js +12 -12
- package/src/Components/Loading/LoadingIndicator.module.css +34 -34
- package/src/Components/Loading/LoadingSpinner.js +27 -27
- package/src/Components/Loading/LoadingSpinner.module.css +100 -100
- package/src/Components/RequireAuth.js +29 -29
- package/src/LoadingFallback.js +13 -13
- package/src/PageNotFound.js +19 -19
- package/src/Pages/Home.js +50 -50
- package/src/Pages/Signup.js +230 -230
- package/src/Pages/Support.js +68 -68
- package/src/Routes/ARoutes.js +66 -66
- package/src/Routes/ARoutesStatic.js +83 -83
- package/src/Static/appStatic.js +16 -16
- package/src/Static/indexStatic.js +13 -13
- package/src/Style/App.module.css +11 -11
- package/src/Style/MeshGradient.module.css +130 -130
- package/src/Style/PageNotFound.module.css +37 -37
- package/src/Style/Style.module.css +686 -686
- package/src/Style/Support.module.css +185 -185
- package/src/Utils/LoadingContext.js +5 -5
- package/src/index.js +25 -25
- package/webpack.build-prod.js +141 -140
- package/webpack.dev.js +127 -127
- package/webpack.prod.js +148 -147
- package/webpack.ssr.prod.js +97 -97
- package/npm-shrinkwrap.json +0 -9641
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import * as styles from "../../Style/MeshGradient.module.css";
|
|
3
|
-
|
|
4
|
-
const MeshGradient = ({ children }) => {
|
|
5
|
-
return (
|
|
6
|
-
<div className={styles.gradientWrap}>
|
|
7
|
-
<div className={styles.meshgradient}>
|
|
8
|
-
<div className={`${styles.color} ${styles.c1}`}></div>
|
|
9
|
-
<div className={`${styles.color} ${styles.c2}`}></div>
|
|
10
|
-
<div className={`${styles.color} ${styles.c3}`}></div>
|
|
11
|
-
<div className={`${styles.color} ${styles.c4}`}></div>
|
|
12
|
-
</div>
|
|
13
|
-
{children}
|
|
14
|
-
</div>
|
|
15
|
-
);
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
export default MeshGradient;
|
|
1
|
+
import React from "react";
|
|
2
|
+
import * as styles from "../../Style/MeshGradient.module.css";
|
|
3
|
+
|
|
4
|
+
const MeshGradient = ({ children }) => {
|
|
5
|
+
return (
|
|
6
|
+
<div className={styles.gradientWrap}>
|
|
7
|
+
<div className={styles.meshgradient}>
|
|
8
|
+
<div className={`${styles.color} ${styles.c1}`}></div>
|
|
9
|
+
<div className={`${styles.color} ${styles.c2}`}></div>
|
|
10
|
+
<div className={`${styles.color} ${styles.c3}`}></div>
|
|
11
|
+
<div className={`${styles.color} ${styles.c4}`}></div>
|
|
12
|
+
</div>
|
|
13
|
+
{children}
|
|
14
|
+
</div>
|
|
15
|
+
);
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export default MeshGradient;
|
|
@@ -1,108 +1,108 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import * as styles from "../../Style/Style.module.css";
|
|
3
|
-
|
|
4
|
-
const Footer = () => {
|
|
5
|
-
return (
|
|
6
|
-
<footer className={styles.footer}>
|
|
7
|
-
<div className={styles.footerContainer}>
|
|
8
|
-
<div className={styles.footerBrand}>
|
|
9
|
-
<a href="/" className={styles.footerLogo}>
|
|
10
|
-
AFront
|
|
11
|
-
</a>
|
|
12
|
-
<p className={styles.footerDescription}>
|
|
13
|
-
Empowering front-end development with cutting-edge tools and
|
|
14
|
-
services.
|
|
15
|
-
</p>
|
|
16
|
-
</div>
|
|
17
|
-
|
|
18
|
-
<div className={styles.footerLinks}>
|
|
19
|
-
<div className={styles.linkColumn}>
|
|
20
|
-
<h4 className={styles.footerTitle}>Company</h4>
|
|
21
|
-
<ul className={styles.linkList}>
|
|
22
|
-
<li>
|
|
23
|
-
<a href="/about" className={styles.link}>
|
|
24
|
-
About Us
|
|
25
|
-
</a>
|
|
26
|
-
</li>
|
|
27
|
-
<li>
|
|
28
|
-
<a href="/careers" className={styles.link}>
|
|
29
|
-
Careers
|
|
30
|
-
</a>
|
|
31
|
-
</li>
|
|
32
|
-
<li>
|
|
33
|
-
<a href="/contact" className={styles.link}>
|
|
34
|
-
Contact Us
|
|
35
|
-
</a>
|
|
36
|
-
</li>
|
|
37
|
-
</ul>
|
|
38
|
-
</div>
|
|
39
|
-
|
|
40
|
-
<div className={styles.linkColumn}>
|
|
41
|
-
<h4 className={styles.footerTitle}>Resources</h4>
|
|
42
|
-
<ul className={styles.linkList}>
|
|
43
|
-
<li>
|
|
44
|
-
<a href="/blog" className={styles.link}>
|
|
45
|
-
Blog
|
|
46
|
-
</a>
|
|
47
|
-
</li>
|
|
48
|
-
<li>
|
|
49
|
-
<a href="/docs" className={styles.link}>
|
|
50
|
-
Documentation
|
|
51
|
-
</a>
|
|
52
|
-
</li>
|
|
53
|
-
<li>
|
|
54
|
-
<a href="/community" className={styles.link}>
|
|
55
|
-
Community
|
|
56
|
-
</a>
|
|
57
|
-
</li>
|
|
58
|
-
</ul>
|
|
59
|
-
</div>
|
|
60
|
-
|
|
61
|
-
<div className={styles.linkColumn}>
|
|
62
|
-
<h4 className={styles.footerTitle}>Products</h4>
|
|
63
|
-
<ul className={styles.linkList}>
|
|
64
|
-
<li>
|
|
65
|
-
<a href="/features" className={styles.link}>
|
|
66
|
-
Features
|
|
67
|
-
</a>
|
|
68
|
-
</li>
|
|
69
|
-
<li>
|
|
70
|
-
<a href="/pricing" className={styles.link}>
|
|
71
|
-
Pricing
|
|
72
|
-
</a>
|
|
73
|
-
</li>
|
|
74
|
-
<li>
|
|
75
|
-
<a href="/support" className={styles.link}>
|
|
76
|
-
Support
|
|
77
|
-
</a>
|
|
78
|
-
</li>
|
|
79
|
-
</ul>
|
|
80
|
-
</div>
|
|
81
|
-
</div>
|
|
82
|
-
</div>
|
|
83
|
-
|
|
84
|
-
<div className={styles.footerBottom}>
|
|
85
|
-
<p className={styles.footerCopy}>
|
|
86
|
-
© {new Date().getFullYear()} AFront by Asggen Inc. All rights
|
|
87
|
-
reserved.
|
|
88
|
-
</p>
|
|
89
|
-
<div className={styles.socialLinks}>
|
|
90
|
-
<a href="https://twitter.com" className={styles.socialLink}>
|
|
91
|
-
Twitter
|
|
92
|
-
</a>
|
|
93
|
-
<a href="https://facebook.com" className={styles.socialLink}>
|
|
94
|
-
Facebook
|
|
95
|
-
</a>
|
|
96
|
-
<a
|
|
97
|
-
href="https://www.linkedin.com/showcase/asggenchat/"
|
|
98
|
-
className={styles.socialLink}
|
|
99
|
-
>
|
|
100
|
-
LinkedIn
|
|
101
|
-
</a>
|
|
102
|
-
</div>
|
|
103
|
-
</div>
|
|
104
|
-
</footer>
|
|
105
|
-
);
|
|
106
|
-
};
|
|
107
|
-
|
|
108
|
-
export default Footer;
|
|
1
|
+
import React from "react";
|
|
2
|
+
import * as styles from "../../Style/Style.module.css";
|
|
3
|
+
|
|
4
|
+
const Footer = () => {
|
|
5
|
+
return (
|
|
6
|
+
<footer className={styles.footer}>
|
|
7
|
+
<div className={styles.footerContainer}>
|
|
8
|
+
<div className={styles.footerBrand}>
|
|
9
|
+
<a href="/" className={styles.footerLogo}>
|
|
10
|
+
AFront
|
|
11
|
+
</a>
|
|
12
|
+
<p className={styles.footerDescription}>
|
|
13
|
+
Empowering front-end development with cutting-edge tools and
|
|
14
|
+
services.
|
|
15
|
+
</p>
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
<div className={styles.footerLinks}>
|
|
19
|
+
<div className={styles.linkColumn}>
|
|
20
|
+
<h4 className={styles.footerTitle}>Company</h4>
|
|
21
|
+
<ul className={styles.linkList}>
|
|
22
|
+
<li>
|
|
23
|
+
<a href="/about" className={styles.link}>
|
|
24
|
+
About Us
|
|
25
|
+
</a>
|
|
26
|
+
</li>
|
|
27
|
+
<li>
|
|
28
|
+
<a href="/careers" className={styles.link}>
|
|
29
|
+
Careers
|
|
30
|
+
</a>
|
|
31
|
+
</li>
|
|
32
|
+
<li>
|
|
33
|
+
<a href="/contact" className={styles.link}>
|
|
34
|
+
Contact Us
|
|
35
|
+
</a>
|
|
36
|
+
</li>
|
|
37
|
+
</ul>
|
|
38
|
+
</div>
|
|
39
|
+
|
|
40
|
+
<div className={styles.linkColumn}>
|
|
41
|
+
<h4 className={styles.footerTitle}>Resources</h4>
|
|
42
|
+
<ul className={styles.linkList}>
|
|
43
|
+
<li>
|
|
44
|
+
<a href="/blog" className={styles.link}>
|
|
45
|
+
Blog
|
|
46
|
+
</a>
|
|
47
|
+
</li>
|
|
48
|
+
<li>
|
|
49
|
+
<a href="/docs" className={styles.link}>
|
|
50
|
+
Documentation
|
|
51
|
+
</a>
|
|
52
|
+
</li>
|
|
53
|
+
<li>
|
|
54
|
+
<a href="/community" className={styles.link}>
|
|
55
|
+
Community
|
|
56
|
+
</a>
|
|
57
|
+
</li>
|
|
58
|
+
</ul>
|
|
59
|
+
</div>
|
|
60
|
+
|
|
61
|
+
<div className={styles.linkColumn}>
|
|
62
|
+
<h4 className={styles.footerTitle}>Products</h4>
|
|
63
|
+
<ul className={styles.linkList}>
|
|
64
|
+
<li>
|
|
65
|
+
<a href="/features" className={styles.link}>
|
|
66
|
+
Features
|
|
67
|
+
</a>
|
|
68
|
+
</li>
|
|
69
|
+
<li>
|
|
70
|
+
<a href="/pricing" className={styles.link}>
|
|
71
|
+
Pricing
|
|
72
|
+
</a>
|
|
73
|
+
</li>
|
|
74
|
+
<li>
|
|
75
|
+
<a href="/support" className={styles.link}>
|
|
76
|
+
Support
|
|
77
|
+
</a>
|
|
78
|
+
</li>
|
|
79
|
+
</ul>
|
|
80
|
+
</div>
|
|
81
|
+
</div>
|
|
82
|
+
</div>
|
|
83
|
+
|
|
84
|
+
<div className={styles.footerBottom}>
|
|
85
|
+
<p className={styles.footerCopy}>
|
|
86
|
+
© {new Date().getFullYear()} AFront by Asggen Inc. All rights
|
|
87
|
+
reserved.
|
|
88
|
+
</p>
|
|
89
|
+
<div className={styles.socialLinks}>
|
|
90
|
+
<a href="https://twitter.com" className={styles.socialLink}>
|
|
91
|
+
Twitter
|
|
92
|
+
</a>
|
|
93
|
+
<a href="https://facebook.com" className={styles.socialLink}>
|
|
94
|
+
Facebook
|
|
95
|
+
</a>
|
|
96
|
+
<a
|
|
97
|
+
href="https://www.linkedin.com/showcase/asggenchat/"
|
|
98
|
+
className={styles.socialLink}
|
|
99
|
+
>
|
|
100
|
+
LinkedIn
|
|
101
|
+
</a>
|
|
102
|
+
</div>
|
|
103
|
+
</div>
|
|
104
|
+
</footer>
|
|
105
|
+
);
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
export default Footer;
|
|
@@ -1,149 +1,149 @@
|
|
|
1
|
-
import React, { useState, useEffect } from "react";
|
|
2
|
-
import * as styles from "../../Style/Style.module.css";
|
|
3
|
-
|
|
4
|
-
const Header = () => {
|
|
5
|
-
const [isBurgerActive, setBurgerActive] = useState(false);
|
|
6
|
-
const [isScrolled, setScrolled] = useState(false);
|
|
7
|
-
|
|
8
|
-
// Toggle burger and menu
|
|
9
|
-
const toggleMenu = () => {
|
|
10
|
-
setBurgerActive(!isBurgerActive);
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
// Handle click on menu links
|
|
14
|
-
const closeMenu = () => {
|
|
15
|
-
setBurgerActive(false);
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
// Change header background on scrolling
|
|
19
|
-
useEffect(() => {
|
|
20
|
-
const handleScroll = () => {
|
|
21
|
-
setScrolled(window.scrollY >= 5);
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
window.addEventListener("scroll", handleScroll);
|
|
25
|
-
|
|
26
|
-
return () => {
|
|
27
|
-
window.removeEventListener("scroll", handleScroll);
|
|
28
|
-
};
|
|
29
|
-
}, []);
|
|
30
|
-
|
|
31
|
-
// Fixed Navbar Menu on Window Resize
|
|
32
|
-
useEffect(() => {
|
|
33
|
-
const handleResize = () => {
|
|
34
|
-
if (window.innerWidth > 768 && isBurgerActive) {
|
|
35
|
-
setBurgerActive(false);
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
window.addEventListener("resize", handleResize);
|
|
40
|
-
|
|
41
|
-
return () => {
|
|
42
|
-
window.removeEventListener("resize", handleResize);
|
|
43
|
-
};
|
|
44
|
-
}, [isBurgerActive]);
|
|
45
|
-
|
|
46
|
-
useEffect(() => {
|
|
47
|
-
if (isBurgerActive) {
|
|
48
|
-
document.body.style.overflow = "hidden";
|
|
49
|
-
} else {
|
|
50
|
-
document.body.style.overflow = "auto";
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
return () => {
|
|
54
|
-
document.body.style.overflow = "auto"; // Reset to default on unmount
|
|
55
|
-
};
|
|
56
|
-
}, [isBurgerActive]);
|
|
57
|
-
return (
|
|
58
|
-
<header
|
|
59
|
-
className={`${styles.header} ${
|
|
60
|
-
isBurgerActive
|
|
61
|
-
? styles.offScroll
|
|
62
|
-
: `${isScrolled ? styles.onScroll : ""}`
|
|
63
|
-
} `}
|
|
64
|
-
id="header"
|
|
65
|
-
>
|
|
66
|
-
<nav className={`${styles.navbar} ${styles.container}`}>
|
|
67
|
-
<a href="/" className={`${styles.brand}`}>
|
|
68
|
-
AFront
|
|
69
|
-
</a>
|
|
70
|
-
<div
|
|
71
|
-
className={`${styles.burger} ${
|
|
72
|
-
isBurgerActive ? styles.isActive : ""
|
|
73
|
-
}`}
|
|
74
|
-
id="burger"
|
|
75
|
-
onClick={toggleMenu}
|
|
76
|
-
>
|
|
77
|
-
<span className={styles.burgerLine}></span>
|
|
78
|
-
<span className={styles.burgerLine}></span>
|
|
79
|
-
<span className={styles.burgerLine}></span>
|
|
80
|
-
</div>
|
|
81
|
-
<div
|
|
82
|
-
className={`${styles.menu} ${
|
|
83
|
-
isBurgerActive ? styles.isActive : styles.isInActive
|
|
84
|
-
}`}
|
|
85
|
-
id="menu"
|
|
86
|
-
>
|
|
87
|
-
<ul className={styles.menuInner}>
|
|
88
|
-
<li className={styles.menuItem}>
|
|
89
|
-
<a
|
|
90
|
-
href="#"
|
|
91
|
-
className={`${styles.menuLink} ${isBurgerActive ? styles.menuLinkMobile : ""}`}
|
|
92
|
-
onClick={closeMenu}
|
|
93
|
-
>
|
|
94
|
-
Learn
|
|
95
|
-
</a>
|
|
96
|
-
</li>
|
|
97
|
-
<li className={styles.menuItem}>
|
|
98
|
-
<a
|
|
99
|
-
href="#"
|
|
100
|
-
className={`${styles.menuLink} ${isBurgerActive ? styles.menuLinkMobile : ""}`}
|
|
101
|
-
onClick={closeMenu}
|
|
102
|
-
>
|
|
103
|
-
Feature
|
|
104
|
-
</a>
|
|
105
|
-
</li>
|
|
106
|
-
<li className={styles.menuItem}>
|
|
107
|
-
<a
|
|
108
|
-
href="#"
|
|
109
|
-
className={`${styles.menuLink} ${isBurgerActive ? styles.menuLinkMobile : ""}`}
|
|
110
|
-
onClick={closeMenu}
|
|
111
|
-
>
|
|
112
|
-
Blog
|
|
113
|
-
</a>
|
|
114
|
-
</li>
|
|
115
|
-
<li className={styles.menuItem}>
|
|
116
|
-
<a
|
|
117
|
-
href="/support"
|
|
118
|
-
className={`${styles.menuLink} ${isBurgerActive ? styles.menuLinkMobile : ""}`}
|
|
119
|
-
onClick={closeMenu}
|
|
120
|
-
>
|
|
121
|
-
Support
|
|
122
|
-
</a>
|
|
123
|
-
</li>
|
|
124
|
-
{isBurgerActive && (
|
|
125
|
-
<>
|
|
126
|
-
<li className={styles.menuItem}>
|
|
127
|
-
<a
|
|
128
|
-
href="#"
|
|
129
|
-
className={`${styles.menuLink} ${
|
|
130
|
-
isBurgerActive ? styles.menuLinkMobile : ""
|
|
131
|
-
}`}
|
|
132
|
-
onClick={closeMenu}
|
|
133
|
-
>
|
|
134
|
-
demo
|
|
135
|
-
</a>
|
|
136
|
-
</li>
|
|
137
|
-
</>
|
|
138
|
-
)}
|
|
139
|
-
</ul>
|
|
140
|
-
</div>
|
|
141
|
-
<a href="/" className={styles.menuBlock}>
|
|
142
|
-
Get Started
|
|
143
|
-
</a>
|
|
144
|
-
</nav>
|
|
145
|
-
</header>
|
|
146
|
-
);
|
|
147
|
-
};
|
|
148
|
-
|
|
149
|
-
export default Header;
|
|
1
|
+
import React, { useState, useEffect } from "react";
|
|
2
|
+
import * as styles from "../../Style/Style.module.css";
|
|
3
|
+
|
|
4
|
+
const Header = () => {
|
|
5
|
+
const [isBurgerActive, setBurgerActive] = useState(false);
|
|
6
|
+
const [isScrolled, setScrolled] = useState(false);
|
|
7
|
+
|
|
8
|
+
// Toggle burger and menu
|
|
9
|
+
const toggleMenu = () => {
|
|
10
|
+
setBurgerActive(!isBurgerActive);
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
// Handle click on menu links
|
|
14
|
+
const closeMenu = () => {
|
|
15
|
+
setBurgerActive(false);
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
// Change header background on scrolling
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
const handleScroll = () => {
|
|
21
|
+
setScrolled(window.scrollY >= 5);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
window.addEventListener("scroll", handleScroll);
|
|
25
|
+
|
|
26
|
+
return () => {
|
|
27
|
+
window.removeEventListener("scroll", handleScroll);
|
|
28
|
+
};
|
|
29
|
+
}, []);
|
|
30
|
+
|
|
31
|
+
// Fixed Navbar Menu on Window Resize
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
const handleResize = () => {
|
|
34
|
+
if (window.innerWidth > 768 && isBurgerActive) {
|
|
35
|
+
setBurgerActive(false);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
window.addEventListener("resize", handleResize);
|
|
40
|
+
|
|
41
|
+
return () => {
|
|
42
|
+
window.removeEventListener("resize", handleResize);
|
|
43
|
+
};
|
|
44
|
+
}, [isBurgerActive]);
|
|
45
|
+
|
|
46
|
+
useEffect(() => {
|
|
47
|
+
if (isBurgerActive) {
|
|
48
|
+
document.body.style.overflow = "hidden";
|
|
49
|
+
} else {
|
|
50
|
+
document.body.style.overflow = "auto";
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return () => {
|
|
54
|
+
document.body.style.overflow = "auto"; // Reset to default on unmount
|
|
55
|
+
};
|
|
56
|
+
}, [isBurgerActive]);
|
|
57
|
+
return (
|
|
58
|
+
<header
|
|
59
|
+
className={`${styles.header} ${
|
|
60
|
+
isBurgerActive
|
|
61
|
+
? styles.offScroll
|
|
62
|
+
: `${isScrolled ? styles.onScroll : ""}`
|
|
63
|
+
} `}
|
|
64
|
+
id="header"
|
|
65
|
+
>
|
|
66
|
+
<nav className={`${styles.navbar} ${styles.container}`}>
|
|
67
|
+
<a href="/" className={`${styles.brand}`}>
|
|
68
|
+
AFront
|
|
69
|
+
</a>
|
|
70
|
+
<div
|
|
71
|
+
className={`${styles.burger} ${
|
|
72
|
+
isBurgerActive ? styles.isActive : ""
|
|
73
|
+
}`}
|
|
74
|
+
id="burger"
|
|
75
|
+
onClick={toggleMenu}
|
|
76
|
+
>
|
|
77
|
+
<span className={styles.burgerLine}></span>
|
|
78
|
+
<span className={styles.burgerLine}></span>
|
|
79
|
+
<span className={styles.burgerLine}></span>
|
|
80
|
+
</div>
|
|
81
|
+
<div
|
|
82
|
+
className={`${styles.menu} ${
|
|
83
|
+
isBurgerActive ? styles.isActive : styles.isInActive
|
|
84
|
+
}`}
|
|
85
|
+
id="menu"
|
|
86
|
+
>
|
|
87
|
+
<ul className={styles.menuInner}>
|
|
88
|
+
<li className={styles.menuItem}>
|
|
89
|
+
<a
|
|
90
|
+
href="#"
|
|
91
|
+
className={`${styles.menuLink} ${isBurgerActive ? styles.menuLinkMobile : ""}`}
|
|
92
|
+
onClick={closeMenu}
|
|
93
|
+
>
|
|
94
|
+
Learn
|
|
95
|
+
</a>
|
|
96
|
+
</li>
|
|
97
|
+
<li className={styles.menuItem}>
|
|
98
|
+
<a
|
|
99
|
+
href="#"
|
|
100
|
+
className={`${styles.menuLink} ${isBurgerActive ? styles.menuLinkMobile : ""}`}
|
|
101
|
+
onClick={closeMenu}
|
|
102
|
+
>
|
|
103
|
+
Feature
|
|
104
|
+
</a>
|
|
105
|
+
</li>
|
|
106
|
+
<li className={styles.menuItem}>
|
|
107
|
+
<a
|
|
108
|
+
href="#"
|
|
109
|
+
className={`${styles.menuLink} ${isBurgerActive ? styles.menuLinkMobile : ""}`}
|
|
110
|
+
onClick={closeMenu}
|
|
111
|
+
>
|
|
112
|
+
Blog
|
|
113
|
+
</a>
|
|
114
|
+
</li>
|
|
115
|
+
<li className={styles.menuItem}>
|
|
116
|
+
<a
|
|
117
|
+
href="/support"
|
|
118
|
+
className={`${styles.menuLink} ${isBurgerActive ? styles.menuLinkMobile : ""}`}
|
|
119
|
+
onClick={closeMenu}
|
|
120
|
+
>
|
|
121
|
+
Support
|
|
122
|
+
</a>
|
|
123
|
+
</li>
|
|
124
|
+
{isBurgerActive && (
|
|
125
|
+
<>
|
|
126
|
+
<li className={styles.menuItem}>
|
|
127
|
+
<a
|
|
128
|
+
href="#"
|
|
129
|
+
className={`${styles.menuLink} ${
|
|
130
|
+
isBurgerActive ? styles.menuLinkMobile : ""
|
|
131
|
+
}`}
|
|
132
|
+
onClick={closeMenu}
|
|
133
|
+
>
|
|
134
|
+
demo
|
|
135
|
+
</a>
|
|
136
|
+
</li>
|
|
137
|
+
</>
|
|
138
|
+
)}
|
|
139
|
+
</ul>
|
|
140
|
+
</div>
|
|
141
|
+
<a href="/" className={styles.menuBlock}>
|
|
142
|
+
Get Started
|
|
143
|
+
</a>
|
|
144
|
+
</nav>
|
|
145
|
+
</header>
|
|
146
|
+
);
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
export default Header;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import * as styles from "./LoadingIndicator.module.css";
|
|
3
|
-
|
|
4
|
-
const LoadingIndicator = () => {
|
|
5
|
-
return (
|
|
6
|
-
<div className={styles.loadingIndicator}>
|
|
7
|
-
<div className={styles.loadingLine}></div>
|
|
8
|
-
</div>
|
|
9
|
-
);
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
export default LoadingIndicator;
|
|
1
|
+
import React from "react";
|
|
2
|
+
import * as styles from "./LoadingIndicator.module.css";
|
|
3
|
+
|
|
4
|
+
const LoadingIndicator = () => {
|
|
5
|
+
return (
|
|
6
|
+
<div className={styles.loadingIndicator}>
|
|
7
|
+
<div className={styles.loadingLine}></div>
|
|
8
|
+
</div>
|
|
9
|
+
);
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export default LoadingIndicator;
|
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
.loadingIndicator {
|
|
2
|
-
position: fixed;
|
|
3
|
-
top: 0;
|
|
4
|
-
left: 0;
|
|
5
|
-
width: 100%;
|
|
6
|
-
height: 0.25rem;
|
|
7
|
-
background-color: #4287f5;
|
|
8
|
-
z-index: 9998;
|
|
9
|
-
overflow: hidden;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
.loadingLine {
|
|
13
|
-
width: 100%;
|
|
14
|
-
height: 100%;
|
|
15
|
-
background: linear-gradient(90deg, transparent, #84f9f1, transparent);
|
|
16
|
-
position: absolute;
|
|
17
|
-
animation: loadingAnimation 0.5s ease-in-out infinite;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
@keyframes loadingAnimation {
|
|
21
|
-
0% {
|
|
22
|
-
transform: translateX(-100%);
|
|
23
|
-
opacity: 0;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
50% {
|
|
27
|
-
opacity: 1;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
100% {
|
|
31
|
-
transform: translateX(100%);
|
|
32
|
-
opacity: 0;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
1
|
+
.loadingIndicator {
|
|
2
|
+
position: fixed;
|
|
3
|
+
top: 0;
|
|
4
|
+
left: 0;
|
|
5
|
+
width: 100%;
|
|
6
|
+
height: 0.25rem;
|
|
7
|
+
background-color: #4287f5;
|
|
8
|
+
z-index: 9998;
|
|
9
|
+
overflow: hidden;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.loadingLine {
|
|
13
|
+
width: 100%;
|
|
14
|
+
height: 100%;
|
|
15
|
+
background: linear-gradient(90deg, transparent, #84f9f1, transparent);
|
|
16
|
+
position: absolute;
|
|
17
|
+
animation: loadingAnimation 0.5s ease-in-out infinite;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@keyframes loadingAnimation {
|
|
21
|
+
0% {
|
|
22
|
+
transform: translateX(-100%);
|
|
23
|
+
opacity: 0;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
50% {
|
|
27
|
+
opacity: 1;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
100% {
|
|
31
|
+
transform: translateX(100%);
|
|
32
|
+
opacity: 0;
|
|
33
|
+
}
|
|
34
|
+
}
|