├── .DS_Store
├── .firebaserc
├── .gitignore
├── .vscode
├── javascriptreact.json.code-snippets
└── scss.code-snippets.json.code-snippets
├── README.md
├── components
├── .DS_Store
├── Avatar.js
├── Bar.js
├── Button.js
├── Calendar.js
├── Card.js
├── Center.js
├── Checkbox.js
├── Discount.js
├── Dropdown.js
├── Flexbox.js
├── Footer.js
├── Form.js
├── Gradient.js
├── Grid.js
├── Header.js
├── Icon.js
├── Image.js
├── Input.js
├── Layout.js
├── Line.js
├── List.js
├── List2.js
├── Loading.js
├── Media.js
├── Menu.js
├── Meta.js
├── Modal.js
├── Navigation.js
├── Notification.js
├── Overlay.js
├── Page.js
├── Player.js
├── Pricing.js
├── Search.js
├── Shadow.js
├── Sidebar.js
├── SignUp.js
├── SingleDiv.js
├── Social.js
├── Tab.js
├── Table.js
├── Tags.js
├── Template.js
├── Text.js
├── UpComing.js
├── ViewCode.js
├── course
│ └── CourseItem.js
└── temp.js
├── database.rules.json
├── firebase.json
├── lib
└── copyToClipboard.js
├── package-lock.json
├── package.json
├── pages
├── _app.js
├── _document.js
├── center.js
├── flexbox.js
└── index.js
├── public
├── .DS_Store
├── favicon.ico
├── fonts
│ ├── .DS_Store
│ ├── SF-Mono-Light.otf
│ └── SF-Mono-Regular.otf
├── images
│ ├── .DS_Store
│ ├── banner.png
│ ├── brand-codingui.png
│ ├── brand-evondev.png
│ ├── dell.jpeg
│ ├── electro
│ │ ├── .DS_Store
│ │ ├── apple-watch-1.png
│ │ ├── express-icon-1.png
│ │ ├── headphone-1.png
│ │ ├── home-gadget-about-1.png
│ │ ├── home-gadget-vr_small-1.png
│ │ ├── icon-boxed.png
│ │ ├── icon-card.png
│ │ ├── icon-express.png
│ │ ├── icon-percent.png
│ │ ├── icon-policy.png
│ │ ├── img-apple-watch-rtl.png
│ │ ├── img-apple-watch.jpg
│ │ ├── img-apple-watch.png
│ │ ├── img-big-headphone-white.png
│ │ ├── img-drone.png
│ │ ├── img-game-white.png
│ │ ├── img-headphone.jpg
│ │ ├── img-mouse.jpg
│ │ ├── img-sony-headphone.png
│ │ ├── img-sony.jpg
│ │ ├── img-sound.jpg
│ │ ├── img-vr-glasses.jpg
│ │ ├── img-xiaomi.jpg
│ │ ├── img-zenbook.png
│ │ ├── logo-black.png
│ │ ├── logo2-1.png
│ │ ├── logo22x.png
│ │ ├── logo_01.png
│ │ ├── logo_02.png
│ │ ├── logo_03.png
│ │ ├── logo_04.png
│ │ ├── logo_05.png
│ │ ├── logoblack2x.png
│ │ ├── pattern_bg.png
│ │ ├── sony_headphone.png
│ │ └── zenbook.png
│ ├── girl1.jpeg
│ ├── girl2.jpeg
│ ├── girl3.jpeg
│ ├── header-img.jpg
│ ├── html-css-course.jpg
│ ├── html-css-psd-course.png
│ ├── iu-logo.png
│ ├── js-course.jpg
│ ├── logo.png
│ ├── me.jpeg
│ ├── me.png
│ ├── og-image.jpg
│ ├── og-image.png
│ ├── outer-space.png
│ ├── poker-building.png
│ ├── rachelizmarvel.png
│ ├── rachelizmarvel2021.png
│ ├── torii.png
│ └── unicorn.png
├── js
│ └── grid.js
├── reset.css
├── slick.css
├── util.css
└── vercel.svg
├── server.js
├── styles
├── FilterStyles.js
├── FooterStyles.js
├── GlobalStyles.js
├── GridStyles.js
├── HeaderStyles.js
├── Theme.js
├── UIStyles.js
└── sass
│ └── main.scss
├── vendors
└── fire.js
└── yarn.lock
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/.DS_Store
--------------------------------------------------------------------------------
/.firebaserc:
--------------------------------------------------------------------------------
1 | {
2 | "projects": {
3 | "default": "codingui-bdd21"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .history
2 | /node_modules
3 | .next
--------------------------------------------------------------------------------
/.vscode/javascriptreact.json.code-snippets:
--------------------------------------------------------------------------------
1 | {
2 | "New component": {
3 | "prefix": "new-component",
4 | "body": [
5 | "const $1 = () => {",
6 | " ",
7 | " return (",
8 | " <>",
9 | "$0",
10 | " ",
18 | " >",
19 | " );",
20 | "};"
21 | ],
22 | "description": "New component"
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/.vscode/scss.code-snippets.json.code-snippets:
--------------------------------------------------------------------------------
1 | {
2 | "Each loop in SASS": {
3 | "prefix": "scss-each",
4 | "body": ["@each $1 in $2{$3}"],
5 | "description": "Each loop in SASS"
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | This is codingui project development by [Evondev](https://evondev.com)
2 |
--------------------------------------------------------------------------------
/components/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/components/.DS_Store
--------------------------------------------------------------------------------
/components/Avatar.js:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from "react";
2 | import Template from "./Template";
3 |
4 | export const AvatarDefault = () => {
5 | return (
6 |
11 |
12 |
13 | `}
14 | css={`
15 | .avatar-default {
16 | width: 100px;
17 | height: 100px;
18 | border-radius: 100rem;
19 | }
20 | `}
21 | >
22 | );
23 | };
24 | export const AvatarDefault1 = () => {
25 | return (
26 |
31 |
32 |
33 | `}
34 | css={`
35 | .avatar-border {
36 | position: relative;
37 | width: 100px;
38 | height: 100px;
39 | border-radius: 100rem;
40 | z-index: 1;
41 | }
42 | .avatar-border:before {
43 | content: "";
44 | position: absolute;
45 | top: 0;
46 | left: 0;
47 | width: 100%;
48 | height: 100%;
49 | z-index: 5;
50 | background-color: #eee;
51 | border-radius: inherit;
52 | transform: scale(1.15);
53 | z-index: -1;
54 | }
55 | `}
56 | >
57 | );
58 | };
59 | export const AvatarDefault2 = () => {
60 | return (
61 |
66 |
67 |
68 | `}
69 | css={`
70 | .avatar-gradient-border {
71 | position: relative;
72 | width: 100px;
73 | height: 100px;
74 | border-radius: 100rem;
75 | z-index: 1;
76 | }
77 | .avatar-gradient-border:before {
78 | content: "";
79 | position: absolute;
80 | top: 0;
81 | left: 0;
82 | width: 100%;
83 | height: 100%;
84 | z-index: 5;
85 | background-image: linear-gradient(to right, #1abcf4, #5defb8);
86 | border-radius: inherit;
87 | transform: scale(1.15);
88 | z-index: -1;
89 | }
90 | `}
91 | >
92 | );
93 | };
94 | export const AvatarDefault3 = () => {
95 | return (
96 |
101 |
102 |
103 |
104 | `}
105 | css={`
106 | .avatar-status {
107 | position: relative;
108 | width: 100px;
109 | height: 100px;
110 | border-radius: 100rem;
111 | z-index: 1;
112 | }
113 | .avatar-status ._status {
114 | width: 15px;
115 | height: 15px;
116 | border-radius: 100rem;
117 | background-color: var(--secondary);
118 | display: inline-block;
119 | position: absolute;
120 | right: 0;
121 | top: 0;
122 | transform: translate(-15px, 0);
123 | box-shadow: 0 0 0 2px white;
124 | }
125 | `}
126 | >
127 | );
128 | };
129 |
130 | export const AvatarDefault4 = () => {
131 | return (
132 |
137 |
138 |
139 | `}
140 | css={`
141 | .avatar-triangle {
142 | position: relative;
143 | width: 100px;
144 | height: 100px;
145 | border-radius: 100rem;
146 | z-index: 1;
147 | }
148 | .avatar-triangle:before {
149 | background-image: linear-gradient(to right, #ffcd2b, #fb07ee);
150 | display: inline-block;
151 | position: absolute;
152 | right: 0;
153 | top: 0;
154 | content: "";
155 | transform: scaleX(1.5) translateY(-30%);
156 | width: 100%;
157 | height: 100%;
158 | clip-path: polygon(50% 0, 100% 100%, 0 100%);
159 | z-index: -1;
160 | }
161 | `}
162 | >
163 | );
164 | };
165 |
166 | export const AvatarDefault5 = () => {
167 | return (
168 |
173 |
174 |
175 | `}
176 | css={`
177 | .avatar-flash {
178 | position: relative;
179 | width: 100px;
180 | height: 100px;
181 | border-radius: 100rem;
182 | z-index: 1;
183 | overflow: hidden;
184 | }
185 | .avatar-flash:before {
186 | content: "";
187 | width: 14px;
188 | height: 100%;
189 | background-color: rgba(255, 255, 255, 0.1);
190 | position: absolute;
191 | top: 0;
192 | left: 0;
193 | transform: translateX(-100%) rotate(15deg);
194 | animation: flash 1s infinite;
195 | }
196 | @keyframes flash {
197 | to {
198 | transform: translateX(100%) rotate(15deg);
199 | left: 100%;
200 | }
201 | }
202 | `}
203 | >
204 | );
205 | };
206 |
--------------------------------------------------------------------------------
/components/Bar.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Template from "./Template";
3 |
4 | const ProgressBar = () => {
5 | return (
6 | <>
7 |
11 |
12 | `}
13 | css={`
14 | .bar {
15 | width: 100%;
16 | height: 1rem;
17 | border-radius: 5rem;
18 | border: 1px solid #eee;
19 | }
20 |
21 | .bar-percent {
22 | height: 100%;
23 | background-color: #07a787;
24 | border-radius: inherit;
25 | }
26 | `}
27 | >
28 | >
29 | );
30 | };
31 | const CircleBar = () => {
32 | return (
33 | <>
34 |
38 |
39 | `}
40 | css={`
41 | .circle-bar {
42 | margin: 0 auto;
43 | width: 10rem;
44 | height: 10rem;
45 | border-radius: 10rem;
46 | position: relative;
47 | }
48 | .circle-bar-percent {
49 | position: absolute;
50 | top: 0;
51 | left: 0;
52 | height: 100%;
53 | width: 100%;
54 | border-radius: inherit;
55 | border: 10px solid #eee;
56 | border-right: 10px solid var(--pink);
57 | border-bottom: 10px solid var(--pink);
58 | transform: rotate(-45deg);
59 | z-index: 2;
60 | }
61 | `}
62 | >
63 | >
64 | );
65 | };
66 |
67 | export { ProgressBar, CircleBar };
68 |
--------------------------------------------------------------------------------
/components/Button.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Template from "./Template";
3 |
4 | export const Button = function () {
5 | return (
6 | Evondev is awesome`}
11 | css={`
12 | .button {
13 | --color: #6a5af9;
14 | font-family: "Poppins", sans-serif;
15 | color: white;
16 | padding: 15px 30px;
17 | border-radius: 4px;
18 | background-color: transparent;
19 | cursor: pointer;
20 | font-weight: 500;
21 | outline: none;
22 | border: 1px solid var(--color);
23 | font-size: 16px;
24 | position: relative;
25 | isolation: isolate;
26 | }
27 | .button:before {
28 | content: "";
29 | height: 100%;
30 | width: 0;
31 | position: absolute;
32 | top: 0;
33 | left: 0;
34 | background-color: var(--color);
35 | z-index: -1;
36 | transition: width 0.25s ease-in;
37 | }
38 | .button:hover:before {
39 | width: 100%;
40 | }
41 | `}
42 | >
43 | );
44 | };
45 | export const Button2 = function () {
46 | return (
47 | Evondev is awesome`}
52 | css={`
53 | .button {
54 | --color: #6a5af9;
55 | font-family: "Poppins", sans-serif;
56 | color: white;
57 | padding: 15px 30px;
58 | border-radius: 4px;
59 | background-color: transparent;
60 | cursor: pointer;
61 | font-weight: 500;
62 | outline: none;
63 | border: 1px solid var(--color);
64 | font-size: 16px;
65 | position: relative;
66 | isolation: isolate;
67 | }
68 | .button:before {
69 | content: "";
70 | height: 100%;
71 | width: 0;
72 | position: absolute;
73 | top: 0;
74 | right: 0;
75 | background-color: var(--color);
76 | z-index: -1;
77 | transition: width 0.25s ease-in;
78 | }
79 | .button:hover:before {
80 | width: 100%;
81 | }
82 | `}
83 | >
84 | );
85 | };
86 | export const Button3 = function () {
87 | return (
88 | Evondev is awesome`}
93 | css={`
94 | .button {
95 | --color: #6a5af9;
96 | font-family: "Poppins", sans-serif;
97 | color: white;
98 | padding: 15px 30px;
99 | border-radius: 4px;
100 | background-color: transparent;
101 | cursor: pointer;
102 | font-weight: 500;
103 | outline: none;
104 | border: 1px solid var(--color);
105 | font-size: 16px;
106 | position: relative;
107 | isolation: isolate;
108 | }
109 | .button:before {
110 | content: "";
111 | height: 0;
112 | width: 100%;
113 | position: absolute;
114 | top: 0;
115 | left: 0;
116 | background-color: var(--color);
117 | z-index: -1;
118 | transition: height 0.25s ease-in;
119 | }
120 | .button:hover:before {
121 | height: 100%;
122 | }
123 | `}
124 | >
125 | );
126 | };
127 | export const Button4 = function () {
128 | return (
129 | Evondev is awesome`}
134 | css={`
135 | .button {
136 | --color: #6a5af9;
137 | font-family: "Poppins", sans-serif;
138 | color: white;
139 | padding: 15px 30px;
140 | border-radius: 4px;
141 | background-color: transparent;
142 | cursor: pointer;
143 | font-weight: 500;
144 | outline: none;
145 | border: 1px solid var(--color);
146 | font-size: 16px;
147 | position: relative;
148 | isolation: isolate;
149 | }
150 | .button:before {
151 | content: "";
152 | height: 0;
153 | width: 100%;
154 | position: absolute;
155 | bottom: 0;
156 | left: 0;
157 | background-color: var(--color);
158 | z-index: -1;
159 | transition: height 0.25s ease-in;
160 | }
161 | .button:hover:before {
162 | height: 100%;
163 | }
164 | `}
165 | >
166 | );
167 | };
168 | export const Button5 = function () {
169 | return (
170 | Evondev is awesome`}
175 | css={`
176 | .button {
177 | --color: #6a5af9;
178 | font-family: "Poppins", sans-serif;
179 | color: white;
180 | padding: 15px 30px;
181 | border-radius: 4px;
182 | background-color: transparent;
183 | cursor: pointer;
184 | font-weight: 500;
185 | outline: none;
186 | border: none;
187 | font-size: 16px;
188 | position: relative;
189 | isolation: isolate;
190 | }
191 | .button:before {
192 | content: "";
193 | height: 0;
194 | width: 100%;
195 | position: absolute;
196 | top: 50%;
197 | left: 0;
198 | transform: translate(0, -50%);
199 | background-color: var(--color);
200 | z-index: -1;
201 | transition: height 0.25s ease-in;
202 | }
203 | .button:hover:before {
204 | height: 100%;
205 | }
206 | `}
207 | >
208 | );
209 | };
210 | export const Button6 = function () {
211 | return (
212 | Evondev is awesome`}
217 | css={`
218 | .button {
219 | --color: #6a5af9;
220 | font-family: "Poppins", sans-serif;
221 | color: white;
222 | padding: 15px 30px;
223 | border-radius: 4px;
224 | background-color: transparent;
225 | cursor: pointer;
226 | font-weight: 500;
227 | outline: none;
228 | border: none;
229 | font-size: 16px;
230 | position: relative;
231 | isolation: isolate;
232 | }
233 | .button:before {
234 | content: "";
235 | height: 100%;
236 | width: 0;
237 | position: absolute;
238 | top: 0;
239 | left: 50%;
240 | transform: translate(-50%, 0);
241 | background-color: var(--color);
242 | z-index: -1;
243 | transition: width 0.25s ease-in;
244 | }
245 | .button:hover:before {
246 | width: 100%;
247 | }
248 | `}
249 | >
250 | );
251 | };
252 | export const Button7 = function () {
253 | return (
254 |
259 | Evondev is
260 | `}
261 | css={`
262 | .button {
263 | --color: #6a5af9;
264 | font-family: "Poppins", sans-serif;
265 | color: white;
266 | padding: 15px 30px;
267 | border-radius: 4px;
268 | background-color: var(--color);
269 | cursor: pointer;
270 | font-weight: 500;
271 | outline: none;
272 | border: none;
273 | font-size: 16px;
274 | position: relative;
275 | isolation: isolate;
276 | overflow: hidden;
277 | backface-visibility: hidden;
278 | }
279 | .button span {
280 | display: inline-block;
281 | width: 100%;
282 | height: 100%;
283 | transition: all 0.2s linear;
284 | backface-visibility: hidden;
285 | }
286 | .button:before {
287 | content: "awesome";
288 | height: 100%;
289 | width: 100%;
290 | position: absolute;
291 | left: 0;
292 | top: -100%;
293 | transition: all 0.25s ease-in;
294 | display: flex;
295 | justify-content: center;
296 | align-items: center;
297 | }
298 | .button:hover:before {
299 | top: 0;
300 | }
301 | .button:hover span {
302 | transform: translateY(300%);
303 | }
304 | `}
305 | >
306 | );
307 | };
308 | export const Button8 = function () {
309 | return (
310 | 3D BUTTON`}
315 | css={`
316 | .button {
317 | --color: #6a5af9;
318 | font-family: "Poppins", sans-serif;
319 | color: white;
320 | padding: 15px 30px;
321 | width: 200px;
322 | border-radius: 4px;
323 | background-color: var(--color);
324 | cursor: pointer;
325 | font-weight: 500;
326 | outline: none;
327 | border: none;
328 | font-size: 16px;
329 | -webkit-transform-style: preserve-3d;
330 | -moz-transform-style: preserve-3d;
331 | transform-style: preserve-3d;
332 | transition: all 0.2s linear;
333 | }
334 | .button:hover {
335 | transform: rotateY(-15deg);
336 | }
337 | `}
338 | >
339 | );
340 | };
341 |
--------------------------------------------------------------------------------
/components/Calendar.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Template from "./Template";
3 |
4 | const Calendar = () => {
5 | return (
6 | <>
7 |
14 |
21 |
22 |
23 |
24 |
25 | Sun |
26 | Mon |
27 | Tue |
28 | Wed |
29 | Thu |
30 | Fri |
31 | Sat |
32 |
33 |
34 |
35 |
36 | 1 |
37 | 2 |
38 | 3 |
39 | 4 |
40 | 5 |
41 | 6 |
42 | 7 |
43 |
44 |
45 | 8 |
46 | 9 |
47 | 10 |
48 | 11 |
49 | 12 |
50 | 13 |
51 | 14 |
52 |
53 |
54 | 15 |
55 | 16 |
56 | 17 |
57 | 18 |
58 | 19 |
59 | 20 |
60 | 21 |
61 |
62 |
63 | 22 |
64 | 23 |
65 | 24 |
66 | 25 |
67 | 26 |
68 | 27 |
69 | 28 |
70 |
71 |
72 | 29 |
73 | 30 |
74 | 31 |
75 | 1 |
76 | 2 |
77 | 3 |
78 | 4 |
79 |
80 |
81 |
82 |
83 |
84 | `}
85 | css={`
86 | .calendar {
87 | padding: 3rem 2rem;
88 | width: 100%;
89 | background-color: white;
90 | box-shadow: 0 0 15px 0 rgba(0, 0, 0, 0.05);
91 | border-radius: 12px;
92 | }
93 | .calendar-header {
94 | display: flex;
95 | align-items: center;
96 | justify-content: space-between;
97 | margin-bottom: 1.5rem;
98 | padding: 0 1rem;
99 | }
100 | .calendar-year {
101 | color: #1a2633;
102 | font-size: 1.8rem;
103 | font-weight: normal;
104 | }
105 | .calendar-action {
106 | font-size: 3rem;
107 | color: var(--primary);
108 | }
109 | .calendar-action i {
110 | cursor: pointer;
111 | }
112 | .calendar-action i:last-child {
113 | margin-left: 3rem;
114 | }
115 | .calendar-table {
116 | width: 100%;
117 | vertical-align: middle;
118 | table-layout: fixed;
119 | }
120 | .calendar-table th {
121 | color: #999;
122 | font-size: 1.2rem;
123 | }
124 | .calendar-table th,
125 | .calendar-table td {
126 | padding: 1rem;
127 | border-radius: 4px;
128 | text-align: center;
129 | }
130 | .calendar-table td {
131 | vertical-align: middle;
132 | width: 3.5rem;
133 | height: 3.5rem;
134 | cursor: pointer;
135 | }
136 | .calendar-table td.other {
137 | color: #999;
138 | opacity: 0.5;
139 | }
140 | .calendar-table td:hover {
141 | color: white;
142 | background-color: var(--primary);
143 | }
144 | @media screen and (max-width: 767px) {
145 | .calendar {
146 | padding: 1.5rem;
147 | }
148 | .calendar-header {
149 | margin-bottom: 5px;
150 | }
151 | .calendar-content {
152 | width: 100%;
153 | overflow-x: auto;
154 | }
155 | .calendar td {
156 | font-size: 1.2rem;
157 | width: auto;
158 | height: auto;
159 | }
160 | }
161 | `}
162 | >
163 | >
164 | );
165 | };
166 |
167 | export { Calendar };
168 |
--------------------------------------------------------------------------------
/components/Card.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Template from "./Template";
3 |
4 | const FlipCard = () => {
5 | return (
6 | <>
7 |
11 |
12 |
13 |

14 |
15 |
16 |

17 |
18 |
19 |
20 | `}
21 | css={`
22 | .flip-card {
23 | max-width: 30rem;
24 | height: 40rem;
25 | margin: 0 auto;
26 | perspective: 150rem;
27 | }
28 | .flip-card-inner {
29 | width: 100%;
30 | height: 100%;
31 | perspective: 1000px;
32 | transition: transform 0.6s;
33 | transform-style: preserve-3d;
34 | position: relative;
35 | }
36 | .flip-card:hover .flip-card-inner {
37 | transform: rotateY(180deg);
38 | }
39 | .flip-card .front,
40 | .flip-card .back {
41 | width: 100%;
42 | height: 100%;
43 | position: absolute;
44 | top: 0;
45 | left: 0;
46 | -webkit-backface-visibility: hidden;
47 | backface-visibility: hidden;
48 | }
49 | .flip-card .back {
50 | transform: rotateY(180deg);
51 | }
52 |
53 | .flip-card img {
54 | width: 100%;
55 | height: 100%;
56 | object-fit: cover;
57 | }
58 | `}
59 | >
60 | >
61 | );
62 | };
63 |
64 | export { FlipCard };
65 |
--------------------------------------------------------------------------------
/components/Checkbox.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Template from "./Template";
3 |
4 | const CustomCheckboxToggle = () => {
5 | return (
6 | <>
7 |
11 | `}
12 | css={`
13 | .switch {
14 | position: relative;
15 | cursor: pointer;
16 | width: 12rem;
17 | height: 5rem;
18 | display: block;
19 | margin: 0 auto;
20 | overflow: hidden;
21 | box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.1);
22 | background: #000;
23 | border-radius: 100rem;
24 | transition: background-color 0.25s linear;
25 | }
26 | .switch:after {
27 | content: "";
28 | position: absolute;
29 | width: 4rem;
30 | height: 4rem;
31 | border-radius: 4rem;
32 | background-color: #fff;
33 | top: 5px;
34 | left: 5px;
35 | transition: background-color 0.25s linear, transform 0.25s linear;
36 | }
37 | .switch-input {
38 | display: none;
39 | }
40 | .switch-input:checked + .switch {
41 | background-color: #6a5af9;
42 | }
43 | .switch-input:checked + .switch:after {
44 | transform: translateX(7rem);
45 | background-color: white;
46 | }
47 | `}
48 | >
49 | >
50 | );
51 | };
52 |
53 | const CustomRadio = () => {
54 | return (
55 | <>
56 |
60 |
61 |
62 |
63 | `}
64 | css={`
65 | .radio-input {
66 | display: none;
67 | }
68 | .radio-label {
69 | width: 2rem;
70 | height: 2rem;
71 | border-radius: 2rem;
72 | background-color: #eee;
73 | display: inline-block;
74 | cursor: pointer;
75 | margin: 0 1rem;
76 | box-shadow: 0 0 0 4px #eee;
77 | transition: all 0.25s linear;
78 | }
79 | .radio-input:checked + .radio-label {
80 | box-shadow: 0 0 0 4px #fff, 0 0 0 6px #fd656b;
81 | background-color: #fd656b;
82 | }
83 | `}
84 | >
85 | >
86 | );
87 | };
88 |
89 | export { CustomCheckboxToggle, CustomRadio };
90 |
--------------------------------------------------------------------------------
/components/Discount.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Template from "./Template";
3 |
4 | const DiscountUI = () => {
5 | return (
6 | <>
7 |
14 |
18 |
19 |
449.000 vnđ
20 |
21 | Mã giảm giá:
22 |
EVONTET
23 |
24 |
25 |
26 |
27 |
28 | `}
29 | >
30 | >
31 | );
32 | };
33 |
34 | export { DiscountUI };
35 |
--------------------------------------------------------------------------------
/components/Dropdown.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { useEffect } from "react";
3 | import Template from "./Template";
4 |
5 | const Dropdown = () => {
6 | return (
7 | <>
8 |
12 |
13 | Call to action
14 |
15 |
16 |
17 | -
18 | New project
19 |
20 |
21 | -
22 | View profile
23 |
24 |
25 | -
26 | Settings
27 |
28 |
29 | -
30 | Logout
31 |
32 |
33 |
34 | `}
35 | css={`
36 | .dropdown {
37 | --primary: #de4b3e;
38 | --secondary: #c74237;
39 | width: 100%;
40 | position: relative;
41 | color: white;
42 | text-transform: uppercase;
43 | font-size: 1.8rem;
44 | font-weight: bold;
45 | border-radius: 4px;
46 | }
47 | .dropdown__select {
48 | border-radius: inherit;
49 | }
50 | .dropdown__list {
51 | margin-top: 2.5rem;
52 | position: absolute;
53 | top: 100%;
54 | left: 0;
55 | right: 0;
56 | display: none;
57 | z-index: 9999;
58 | }
59 | .dropdown__list:before {
60 | content: "";
61 | height: 2.5rem;
62 | position: absolute;
63 | left: 0;
64 | right: 0;
65 | background-color: transparent;
66 | transform: translateY(-100%);
67 | }
68 | .dropdown:hover .dropdown__list {
69 | display: block;
70 | }
71 | .dropdown__select,
72 | .dropdown__item {
73 | width: 100%;
74 | padding: 2rem;
75 | background-color: var(--primary);
76 | display: flex;
77 | align-items: center;
78 | justify-content: space-between;
79 | cursor: pointer;
80 | }
81 | .dropdown__item {
82 | transition: background-color 0.2s linear;
83 | }
84 | .dropdown__item:first-child {
85 | border-radius: 4px 4px 0 0;
86 | position: relative;
87 | }
88 | .dropdown__item:first-child:before {
89 | content: "";
90 | position: absolute;
91 | top: 0;
92 | left: 3rem;
93 | border-left: 10px solid transparent;
94 | border-right: 10px solid transparent;
95 | border-bottom: 10px solid var(--primary);
96 | transform: translateY(-100%);
97 | transition: border-color 0.2s linear;
98 | }
99 | .dropdown__item:first-child:hover:before {
100 | border-bottom-color: var(--secondary);
101 | }
102 | .dropdown__item:last-child {
103 | border-radius: 0 0 4px 4px;
104 | }
105 | .dropdown__item:hover {
106 | background-color: var(--secondary);
107 | }
108 | `}
109 | >
110 | >
111 | );
112 | };
113 |
114 | export { Dropdown };
115 |
--------------------------------------------------------------------------------
/components/Footer.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { FooterStyles } from "../styles/FooterStyles";
3 |
4 | const Footer = () => {
5 | return (
6 |
7 |
8 | Development by{" "}
9 |
14 | Evondev
15 | {" "}
16 | with
©
17 | {new Date().getFullYear()}
18 |
19 |
20 | );
21 | };
22 |
23 | export default Footer;
24 |
--------------------------------------------------------------------------------
/components/Form.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Template from "./Template";
3 | import { useEffect } from "react";
4 |
5 | const SearchForm = () => {
6 | return (
7 | <>
8 | `}
12 | css={`
13 | .search-form {
14 | border: 1px solid #eee;
15 | border-radius: 4px;
16 | padding: 1.5rem;
17 | display: flex;
18 | align-items: center;
19 | }
20 | .search-form__icon {
21 | color: #999;
22 | flex-shrink: 0;
23 | }
24 | .search-form__input {
25 | padding: 0 1.5rem;
26 | flex: 1;
27 | }
28 | `}
29 | >
30 | >
31 | );
32 | };
33 |
34 | const LoginForm = () => {
35 | useEffect(() => {
36 | window.addEventListener("load", function () {
37 | const loginForm = document.querySelector(".login-form");
38 | const showPasswordIcon =
39 | loginForm && loginForm.querySelector(".show-password");
40 | const inputPassword =
41 | loginForm && loginForm.querySelector(`input[type="password"`);
42 | showPasswordIcon?.addEventListener("click", function () {
43 | const inputPasswordType = inputPassword.getAttribute("type");
44 | inputPasswordType === "password"
45 | ? inputPassword.setAttribute("type", "text")
46 | : inputPassword.setAttribute("type", "password");
47 | });
48 | });
49 | }, []);
50 | return (
51 | <>
52 |
57 |
58 |
59 |
60 |
61 |
62 | Forgot password?
63 |
64 |
65 | `}
66 | css={`
67 | .login-form {
68 | max-width: 35rem;
69 | margin: 0 auto;
70 | padding: 1.5rem;
71 | }
72 | .login-form input {
73 | padding: 1.5rem;
74 | border: 1px solid #eee;
75 | color: #333;
76 | border-radius: 4px;
77 | margin-bottom: 1.5rem;
78 | display: block;
79 | width: 100%;
80 | transition: border 0.25s linear;
81 | font-weight: normal;
82 | }
83 | .login-form input:focus {
84 | border-color: var(--primary);
85 | }
86 | .login-form .forgot {
87 | display: inline-block;
88 | text-transform: uppercase;
89 | color: #333;
90 | font-size: 1.2rem;
91 | font-weight: 600;
92 | margin-bottom: 1.5rem;
93 | }
94 | .login-form button {
95 | width: 100%;
96 | padding: 1.5rem;
97 | border-radius: 4px;
98 | color: white;
99 | background-color: var(--primary);
100 | text-transform: uppercase;
101 | }
102 | .login-form .input-icon {
103 | position: relative;
104 | }
105 | .login-form .input-icon input {
106 | padding-right: 4rem;
107 | }
108 | .login-form .input-icon i {
109 | position: absolute;
110 | top: 50%;
111 | right: 1.5rem;
112 | transform: translateY(-50%);
113 | color: #ccc;
114 | cursor: pointer;
115 | }
116 | `}
117 | js={`
118 | window.addEventListener("load", function () {
119 | const loginForm = document.querySelector(".login-form");
120 | const showPasswordIcon =
121 | loginForm && loginForm.querySelector(".show-password");
122 | const inputPassword =
123 | loginForm && loginForm.querySelector('input[type="password"');
124 | showPasswordIcon.addEventListener("click", function () {
125 | const inputPasswordType = inputPassword.getAttribute("type");
126 | inputPasswordType === "password"
127 | ? inputPassword.setAttribute("type", "text")
128 | : inputPassword.setAttribute("type", "password");
129 | });
130 | });
131 | `}
132 | >
133 | >
134 | );
135 | };
136 |
137 | const ContactForm = () => {
138 | return (
139 | <>
140 |
147 |
162 |
163 | `}
164 | css={`
165 | .contact {
166 | max-width: 45rem;
167 | }
168 | .contact-heading {
169 | color: #4d49ba;
170 | font-weight: bold;
171 | font-size: 3rem;
172 | margin-bottom: 2rem;
173 | }
174 | .contact-notice {
175 | font-weight: 300;
176 | line-height: 1.6;
177 | color: #7e95cc;
178 | margin-bottom: 3rem;
179 | }
180 | .contact-form-group {
181 | margin-bottom: 2rem;
182 | }
183 | .contact-form-label {
184 | color: #7e95cc;
185 | display: inline-block;
186 | margin-bottom: 1rem;
187 | font-weight: 500;
188 | }
189 | .contact-form-input,
190 | .contact-form-area {
191 | color: #7e95cc;
192 | display: block;
193 | width: 100%;
194 | padding: 1.5rem;
195 | background-color: #f5f6fd;
196 | border: 0;
197 | outline: none;
198 | resize: none;
199 | }
200 | .contact-form-input::-webkit-input-placeholder,
201 | .contact-form-area::-webkit-input-placeholder {
202 | color: #b2bada;
203 | }
204 | .contact-form-input {
205 | border-radius: 5rem;
206 | }
207 | .contact-form-area {
208 | min-height: 16rem;
209 | border-radius: 2rem;
210 | line-height: 1.6;
211 | }
212 | .contact-form-submit {
213 | color: white;
214 | padding: 1.5rem;
215 | width: 100%;
216 | max-width: 25rem;
217 | border-radius: 5rem;
218 | border: 0;
219 | outline: none;
220 | cursor: pointer;
221 | text-align: center;
222 | font-weight: 500;
223 | white-space: nowrap;
224 | letter-spacing: 1px;
225 | background-color: #7b78f8;
226 | box-shadow: 0 10px 20px 0 rgba(123, 120, 248, 0.5);
227 | }
228 | .contact-form-area::-webkit-scrollbar {
229 | width: 5px;
230 | }
231 |
232 | .contact-form-area::-webkit-scrollbar-track {
233 | border-radius: 3rem;
234 | background-color: #eee;
235 | }
236 |
237 | .contact-form-area::-webkit-scrollbar-thumb {
238 | border-radius: 3rem;
239 | background-color: #7b78f8;
240 | }
241 | `}
242 | >
243 | >
244 | );
245 | };
246 |
247 | const SubscribeForm = () => {
248 | return (
249 | <>
250 |
257 |
258 |
259 |
260 | `}
261 | css={`
262 | .subscribe-form {
263 | width: 100%;
264 | display: flex;
265 | align-items: center;
266 | justify-content: space-between;
267 | position: relative;
268 | }
269 | .subscribe-form-input {
270 | flex: 1;
271 | width: 100%;
272 | outline: none;
273 | padding: 15px 10px;
274 | border: 1px solid #eee;
275 | border-radius: 4px;
276 | transition: all 0.2s linear;
277 | }
278 | .subscribe-form-input:focus {
279 | border-color: var(--purple);
280 | }
281 | .subscribe-form-input:focus + .subscribe-form-button {
282 | background-color: var(--purple);
283 | }
284 | .subscribe-form-button {
285 | padding: 5px 15px;
286 | background-color: #999;
287 | color: white;
288 | outline: none;
289 | cursor: pointer;
290 | font-weight: 500;
291 | border-radius: 4px;
292 | flex-shrink: 0;
293 | transition: all 0.2s linear;
294 | position: absolute;
295 | top: 50%;
296 | right: 10px;
297 | transform: translateY(-50%);
298 | }
299 | `}
300 | >
301 | >
302 | );
303 | };
304 |
305 | export { SearchForm, LoginForm, ContactForm, SubscribeForm };
306 |
--------------------------------------------------------------------------------
/components/Gradient.js:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from "react";
2 | import Template from "./Template";
3 |
4 | const GradientDefault = ({ number = 1, dir = "to right", color1, color2 }) => {
5 | return (
6 |
11 | `}
12 | htmlCopy={`
13 |
14 | `}
15 | css={`
16 | .gradient${number} {
17 | width: 100%;
18 | height: 150px;
19 | border-radius: 8px;
20 | background-image: linear-gradient(${dir}, #${color1}, #${color2});
21 | }
22 | `}
23 | cssCopy={`background-image: linear-gradient(
24 | ${dir},
25 | #${color1},
26 | #${color2}
27 | );`}
28 | >
29 | );
30 | };
31 |
32 | export const Gradient1 = () =>
33 | GradientDefault({
34 | number: 1,
35 | color1: "f40076",
36 | color2: "df98fa",
37 | });
38 | export const Gradient2 = () =>
39 | GradientDefault({
40 | number: 2,
41 | color1: "d6ff7f",
42 | color2: "00b3cc",
43 | });
44 | export const Gradient3 = () =>
45 | GradientDefault({
46 | number: 3,
47 | color1: "cb5eee",
48 | color2: "4be1ec",
49 | });
50 | export const Gradient4 = () =>
51 | GradientDefault({
52 | number: 4,
53 | color1: "0b63f6",
54 | color2: "003cc5",
55 | });
56 | export const Gradient5 = () =>
57 | GradientDefault({
58 | number: 5,
59 | color1: "df98fa",
60 | color2: "9055ff",
61 | });
62 | export const Gradient6 = () =>
63 | GradientDefault({
64 | number: 6,
65 | color1: "FFA70F",
66 | color2: "E33ED9",
67 | });
68 | export const Gradient7 = () =>
69 | GradientDefault({
70 | number: 7,
71 | color1: "1ABCF4",
72 | color2: "5DEFB8",
73 | });
74 | export const Gradient8 = () =>
75 | GradientDefault({
76 | number: 8,
77 | color1: "1BF67B",
78 | color2: "0D736E",
79 | });
80 | export const Gradient9 = () =>
81 | GradientDefault({
82 | number: 9,
83 | color1: "D73350",
84 | color2: "FC6F69",
85 | });
86 | export const Gradient10 = () =>
87 | GradientDefault({
88 | number: 10,
89 | color1: "A73EF5",
90 | color2: "FB53E1",
91 | });
92 | export const Gradient11 = () =>
93 | GradientDefault({
94 | number: 11,
95 | color1: "FFCD2B",
96 | color2: "FB07EE",
97 | });
98 | export const Gradient12 = () =>
99 | GradientDefault({
100 | number: 12,
101 | color1: "00FB8E",
102 | color2: "4101B7",
103 | });
104 | export const Gradient13 = () =>
105 | GradientDefault({
106 | number: 13,
107 | color1: "FE0C6B",
108 | color2: "29055E",
109 | dir: "to right bottom",
110 | });
111 | export const Gradient14 = () =>
112 | GradientDefault({
113 | number: 14,
114 | color1: "FF7C2C",
115 | color2: "0BC799",
116 | });
117 | export const Gradient15 = () =>
118 | GradientDefault({
119 | number: 15,
120 | color1: "37CCFF",
121 | color2: "7B22FF",
122 | });
123 |
--------------------------------------------------------------------------------
/components/Grid.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { GridStyles } from "../styles/GridStyles";
3 | import { Dropdown } from "./Dropdown";
4 | import {
5 | InputFile,
6 | InputFocusEffect,
7 | TextField1,
8 | TextField2,
9 | TextField3,
10 | } from "./Input";
11 | import { SocialShare, Pagination, Countdown } from "./List";
12 | import { CustomCheckboxToggle, CustomRadio } from "./Checkbox";
13 | import { FlipCard } from "./Card";
14 | import { Calendar } from "./Calendar";
15 | import { Tabs1, Tabs5, Tabs7 } from "./Tab";
16 | import { SocialShareButon } from "./Social";
17 | import {
18 | Button,
19 | Button2,
20 | Button3,
21 | Button4,
22 | Button5,
23 | Button6,
24 | Button7,
25 | Button8,
26 | } from "./Button";
27 | import {
28 | BallLoading,
29 | BallsLoading,
30 | CircleLoading,
31 | CircleLoading2,
32 | DashedLoading,
33 | DotsLoading,
34 | FadeLoading,
35 | LineLoading,
36 | SquareLoading,
37 | } from "./Loading";
38 |
39 | const Grid = () => {
40 | return (
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 | );
87 | };
88 |
89 | export default Grid;
90 |
--------------------------------------------------------------------------------
/components/Header.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { HeaderStyles } from "../styles/HeaderStyles";
3 | import { FilterStyles } from "../styles/FilterStyles";
4 | import { useEffect } from "react";
5 | import { useState } from "react";
6 | import { firebaseApp } from "../vendors/fire";
7 | import Link from "next/link";
8 | import Head from "next/head";
9 |
10 | const Header = () => {
11 | const [loveCount, setLoveCount] = useState(1);
12 | const [counter, setCounter] = useState(1);
13 |
14 | useEffect(() => {
15 | const counterLove = parseInt(localStorage.getItem("counter")) || 1;
16 | setCounter(parseInt(counterLove));
17 | }, []);
18 |
19 | useEffect(() => {
20 | const gridItems = document.querySelectorAll(".grid-item");
21 | const filterItems = document.querySelectorAll(".filter-item");
22 |
23 | function handleFilterItems(e) {
24 | filterItems.forEach((el) => el.classList.remove("active"));
25 | const elm = e.target;
26 | if (!elm) return;
27 | elm.classList.add("active");
28 | const { source } = e.target.dataset;
29 | gridItems.length > 0 &&
30 | gridItems.forEach((item) => {
31 | const itemSource = item.getAttribute("data-source");
32 | if (itemSource === source || source === "all") {
33 | item.style.display = "block";
34 | } else {
35 | item.style.display = "none";
36 | }
37 | if (itemSource === "fixed") item.style.display = "block";
38 | });
39 | }
40 |
41 | filterItems.length > 0 &&
42 | filterItems.forEach((item) =>
43 | item.addEventListener("click", handleFilterItems)
44 | );
45 | });
46 |
47 | useEffect(() => {
48 | firebaseApp
49 | ?.database()
50 | ?.ref("love")
51 | .on("value", function (snapshot) {
52 | setLoveCount(snapshot.val().value + 1);
53 | });
54 | }, [loveCount]);
55 |
56 | const handleLove = () => {
57 | localStorage.setItem("counter", counter);
58 | if (counter >= 50) return;
59 | setCounter(counter + 1);
60 | setLoveCount(loveCount + 1);
61 | firebaseApp?.database()?.ref("love").set({ value: loveCount });
62 | const loveIcon = document.querySelector(".love-icon");
63 | const loveHeart = document.querySelector(".love-heart");
64 | if (loveIcon && loveHeart) {
65 | loveIcon.classList.add("active");
66 | loveHeart.classList.add("active");
67 | setTimeout(() => {
68 | loveIcon.classList.remove("active");
69 | }, 50);
70 | setTimeout(() => {
71 | loveHeart.classList.remove("active");
72 | }, 250);
73 | }
74 | };
75 |
76 | return (
77 | <>
78 |
79 |
83 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 | CodingUI
105 |
106 |
107 | {loveCount > 1 && (
108 | = 50 ? "point-none" : ""}`}>
109 |
{loveCount}
110 |
111 |
112 |
113 |
114 |
115 | )}
116 |
117 |
118 |
119 | All
120 |
121 |
122 | Button
123 |
124 |
125 | Loading
126 |
127 |
128 | tab
129 |
130 |
131 | input
132 |
133 |
134 | list
135 |
136 |
137 | >
138 | );
139 | };
140 |
141 | export default Header;
142 |
--------------------------------------------------------------------------------
/components/Icon.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Template from "./Template";
3 |
4 | const IconOpacity = () => {
5 | return (
6 | <>
7 |
13 |
14 |
15 | `}
16 | css={`
17 | .icon-opacity {
18 | width: 5rem;
19 | height: 5rem;
20 | margin: 5px;
21 | display: inline-flex;
22 | align-items: center;
23 | justify-content: center;
24 | color: var(--purple);
25 | position: relative;
26 | }
27 | .icon-opacity--secondary {
28 | color: var(--pink);
29 | }
30 | .icon-opacity--third {
31 | color: var(--blue);
32 | }
33 | .icon-opacity:before {
34 | content: "";
35 | position: absolute;
36 | top: 0;
37 | left: 0;
38 | width: 100%;
39 | height: 100%;
40 | border-radius: 4px;
41 | background-color: currentColor;
42 | opacity: 0.2;
43 | }
44 | `}
45 | >
46 | >
47 | );
48 | };
49 |
50 | const RatingStar = () => {
51 | return (
52 | <>
53 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 | `}
81 | css={`
82 | .rating-star {
83 | display: inline-flex;
84 | flex-direction: row-reverse;
85 | }
86 | .rating-star input {
87 | display: none;
88 | }
89 | .rating-star label {
90 | color: #eee;
91 | }
92 | .rating-star label:before {
93 | font-family: "Font Awesome 5 Pro";
94 | display: block;
95 | font-size: 3.5rem;
96 | padding: 0.3rem 0.2rem;
97 | margin: 0;
98 | cursor: pointer;
99 | font-weight: 900;
100 | content: "\f005 ";
101 | color: inherit;
102 | }
103 | .rating-star label.half {
104 | width: 25px;
105 | overflow: hidden;
106 | position: relative;
107 | margin-right: -25px;
108 | }
109 | .rating-star label.half:before {
110 | content: "\f089 ";
111 | position: absolute;
112 | top: 0;
113 | left: 0;
114 | padding-right: 0;
115 | width: 100%;
116 | }
117 | .rating-star input:checked ~ label:before {
118 | text-shadow: 0px 0 5px rgba(255, 157, 180, 0.28);
119 | color: var(--purple);
120 | }
121 | `}
122 | >
123 | >
124 | );
125 | };
126 |
127 | const LikeUnlike = () => {
128 | return (
129 | <>
130 |
137 |
138 |
139 |
140 | `}
141 | css={`
142 | .action {
143 | display: flex;
144 | align-items: center;
145 | justify-content: center;
146 | }
147 | .action-item {
148 | width: 50px;
149 | height: 50px;
150 | border-radius: 50px;
151 | margin: 0 10px;
152 | display: flex;
153 | align-items: center;
154 | justify-content: center;
155 | font-size: 18px;
156 | cursor: pointer;
157 | }
158 | .action-dislike {
159 | color: #999;
160 | background-color: #eee;
161 | }
162 | .action-like {
163 | color: #fff;
164 | background-color: #ff7870;
165 | }
166 | `}
167 | >
168 | >
169 | );
170 | };
171 |
172 | const PlayerIcon = () => {
173 | return (
174 | <>
175 |
182 |
195 |
196 |
197 | `}
198 | css={`
199 | .player-icon {
200 | position: relative;
201 | width: 80px;
202 | height: 80px;
203 | display: flex;
204 | justify-content: center;
205 | align-items: center;
206 | }
207 | .player-icon svg {
208 | position: absolute;
209 | top: 0;
210 | left: 0;
211 | width: 100%;
212 | height: 100%;
213 | transform: rotate(-80deg);
214 | }
215 | .player-icon i {
216 | width: 50px;
217 | height: 50px;
218 | color: white;
219 | background-color: rgba(0, 0, 0, 0.25);
220 | border-radius: 100px;
221 | display: flex;
222 | justify-content: center;
223 | align-items: center;
224 | }
225 | `}
226 | >
227 | >
228 | );
229 | };
230 |
231 | const AvatarWithCheck = () => {
232 | return (
233 | <>
234 |
241 |
242 |
243 |
244 | `}
245 | css={`
246 | .avatar {
247 | width: 80px;
248 | height: 80px;
249 | position: relative;
250 | background: linear-gradient(to right, #b993d6, #8ca6db);
251 | padding: 3px;
252 | border-radius: 100px;
253 | }
254 | .avatar img {
255 | width: 100%;
256 | height: 100%;
257 | object-fit: cover;
258 | border-radius: inherit;
259 | border: 3px solid white;
260 | }
261 | .avatar .icon {
262 | width: 20px;
263 | height: 20px;
264 | border-radius: 20px;
265 | display: flex;
266 | justify-content: center;
267 | align-items: center;
268 | background-color: #8ca6db;
269 | font-size: 10px;
270 | color: white;
271 | box-shadow: 0 0 0 3px white;
272 | position: absolute;
273 | bottom: 0;
274 | right: 0;
275 | transform: translate(-25%, -25%);
276 | z-index: 10;
277 | }
278 | `}
279 | >
280 | >
281 | );
282 | };
283 |
284 | export { IconOpacity, RatingStar, LikeUnlike, PlayerIcon, AvatarWithCheck };
285 |
--------------------------------------------------------------------------------
/components/Image.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Template from "./Template";
3 |
4 | const CircleImage = () => {
5 | return (
6 | 

`}
10 | css={`
11 | .image {
12 | display: inline-block;
13 | margin: 5px;
14 | width: 5rem;
15 | height: 5rem;
16 | object-fit: cover;
17 | }
18 | .image--circle {
19 | border-radius: 100rem;
20 | }
21 | .image--rounded {
22 | border-radius: 4px;
23 | }
24 | .image--special {
25 | border-radius: 18px 0 18px 0;
26 | }
27 | `}
28 | >
29 | );
30 | };
31 | const Triangle = () => {
32 | return (
33 | `}
37 | css={`
38 | .triangle {
39 | margin: 5px;
40 | display: inline-block;
41 | width: 0;
42 | height: 0;
43 | }
44 | .triangle--top {
45 | border-left: 1rem solid transparent;
46 | border-right: 1rem solid transparent;
47 | border-bottom: 1rem solid var(--primary);
48 | }
49 | .triangle--bottom {
50 | border-left: 1rem solid transparent;
51 | border-right: 1rem solid transparent;
52 | border-top: 1rem solid var(--primary);
53 | }
54 | .triangle--right {
55 | border-top: 1rem solid transparent;
56 | border-bottom: 1rem solid transparent;
57 | border-left: 1rem solid var(--primary);
58 | }
59 | .triangle--left {
60 | border-top: 1rem solid transparent;
61 | border-bottom: 1rem solid transparent;
62 | border-right: 1rem solid var(--primary);
63 | }
64 | `}
65 | >
66 | );
67 | };
68 |
69 | export { CircleImage, Triangle };
70 |
--------------------------------------------------------------------------------
/components/Layout.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Template from "./Template";
3 |
4 | const AvatarInfo = () => {
5 | return (
6 | <>
7 |
11 |
15 |
16 |
Super cool title
17 |
18 | This is something that you can call it is super cool descriptions
19 |
20 |
21 | `}
22 | css={`
23 | .avatar-info {
24 | display: flex;
25 | align-items: center;
26 | }
27 | .avatar-info img {
28 | width: 5rem;
29 | height: 5rem;
30 | border-radius: 5rem;
31 | margin-right: 1.5rem;
32 | object-fit: cover;
33 | filter: none;
34 | flex-shrink: 0;
35 | }
36 | .avatar-info h3 {
37 | font-weight: bold;
38 | font-size: 1.4rem;
39 | text-transform: uppercase;
40 | margin-bottom: 1rem;
41 | }
42 | .avatar-info p {
43 | font-size: 1.4rem;
44 | font-weight: 300;
45 | line-height: 1.4;
46 | }
47 | `}
48 | >
49 | >
50 | );
51 | };
52 |
53 | const GridImage = () => {
54 | return (
55 | <>
56 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 | `}
71 | css={`
72 | .grid-image {
73 | display: grid;
74 | grid-template-columns: repeat(4, 1fr);
75 | grid-template-rows: 300px 100px 300px;
76 | grid-gap: 25px;
77 | }
78 | .image-item {
79 | border-radius: 20px;
80 | width: 100%;
81 | height: 100%;
82 | object-fit: cover;
83 | }
84 | .image-item:first-child {
85 | grid-row: 1/2;
86 | grid-column: 1/3;
87 | }
88 | .image-item:nth-child(2),
89 | .image-item:nth-child(3) {
90 | grid-row: 1/3;
91 | }
92 | .image-item:nth-child(4),
93 | .image-item:nth-child(5) {
94 | grid-row: 2/-1;
95 | }
96 | .image-item:last-child {
97 | grid-column: 3/-1;
98 | }
99 | @media screen and (max-width: 767px) {
100 | .grid-image {
101 | grid-template-rows: 100px 20px 100px;
102 | grid-gap: 10px;
103 | }
104 | }
105 | `}
106 | >
107 | >
108 | );
109 | };
110 |
111 | const GridImage2 = () => {
112 | return (
113 | <>
114 |
121 |
122 |
123 |
124 |
125 |
126 |
127 | `}
128 | css={`
129 | .grid-image {
130 | display: grid;
131 | grid-template-columns: repeat(4, 1fr);
132 | grid-template-rows: 250px 250px;
133 | grid-gap: 25px;
134 | }
135 | .image-item {
136 | border-radius: 20px;
137 | width: 100%;
138 | height: 100%;
139 | object-fit: cover;
140 | }
141 | .image-item:first-child {
142 | grid-row: 1/-1;
143 | grid-column: 1/3;
144 | }
145 | .image-item:nth-child(2),
146 | .image-item:nth-child(3) {
147 | grid-row: 1/2;
148 | }
149 | .image-item:nth-child(4),
150 | .image-item:nth-child(5) {
151 | grid-row: 2/-1;
152 | }
153 | @media screen and (max-width: 767px) {
154 | .grid-image {
155 | grid-template-rows: 100px 100px;
156 | grid-gap: 10px;
157 | }
158 | }
159 | `}
160 | >
161 | >
162 | );
163 | };
164 |
165 | export { AvatarInfo, GridImage, GridImage2 };
166 |
--------------------------------------------------------------------------------
/components/Line.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Template from "./Template";
3 |
4 | const LineText = () => {
5 | return (
6 | <>
7 | CodingUI`}
11 | css={`
12 | .line-text {
13 | text-align: center;
14 | position: relative;
15 | }
16 | .line-text:before {
17 | content: "";
18 | width: 100%;
19 | height: 1px;
20 | position: absolute;
21 | top: 50%;
22 | left: 0;
23 | transform: translateY(-50%);
24 | background-color: var(--gray);
25 | }
26 | .line-text span {
27 | display: inline-block;
28 | background-color: white;
29 | position: relative;
30 | z-index: 2;
31 | padding: 1rem;
32 | font-weight: 600;
33 | }
34 | `}
35 | >
36 | >
37 | );
38 | };
39 |
40 | export { LineText };
41 |
--------------------------------------------------------------------------------
/components/List.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Template from "./Template";
3 |
4 | const SocialShare = () => {
5 | return (
6 | <>
7 |
11 |
12 |
13 |
14 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | `}
24 | css={`
25 | .social-share {
26 | display: flex;
27 | justify-content: center;
28 | }
29 | .social-item {
30 | width: 5rem;
31 | height: 5rem;
32 | display: flex;
33 | align-items: center;
34 | justify-content: center;
35 | color: white;
36 | cursor: pointer;
37 | }
38 | .social-item--facebook {
39 | background-color: #3b5999;
40 | }
41 | .social-item--twitter {
42 | background-color: #55acee;
43 | }
44 | .social-item--telegram {
45 | background-color: #0077b5;
46 | }
47 | .social-item--linkedin {
48 | background-color: #007ee5;
49 | }
50 | `}
51 | >
52 | >
53 | );
54 | };
55 |
56 | const Pagination = () => {
57 | return (
58 | <>
59 |
63 |
64 |
65 |
66 | 1
67 | 2
68 | 3
69 | 4
70 | 5
71 |
72 |
73 |
74 | `}
75 | css={`
76 | .pagi {
77 | display: flex;
78 | justify-content: center;
79 | }
80 | .pagi-item {
81 | margin: 0 1.5rem;
82 | font-size: 2rem;
83 | color: #999;
84 | cursor: pointer;
85 | transition: all 0.2s linear;
86 | }
87 | .pagi-item.is-disabled {
88 | opacity: 0.5;
89 | cursor: not-allowed;
90 | }
91 | .pagi-item:hover,
92 | .pagi-item.is-active {
93 | color: var(--primary);
94 | }
95 | `}
96 | >
97 | >
98 | );
99 | };
100 |
101 | const Countdown = () => {
102 | return (
103 | <>
104 | 28days10hours40minutes53seconds`}
108 | css={`
109 | .countdown {
110 | display: flex;
111 | justify-content: center;
112 | padding: 2rem 0;
113 | border-radius: 4px;
114 | background-color: #1a1c28;
115 | color: white;
116 | font-size: 2rem;
117 | }
118 | .countdown-item {
119 | display: flex;
120 | flex-direction: column;
121 | justify-content: center;
122 | text-align: center;
123 | padding: 0px 2rem;
124 | width: 25%;
125 | }
126 | .countdown-number {
127 | font-weight: 600;
128 | font-size: 5rem;
129 | margin-bottom: 5px;
130 | }
131 | .countdown-text {
132 | font-weight: 300;
133 | font-size: 1.2rem;
134 | }
135 | @media screen and (max-width: 767px) {
136 | .countdown-number {
137 | font-size: 3.5rem;
138 | }
139 | }
140 | `}
141 | >
142 | >
143 | );
144 | };
145 | const Calculation = () => {
146 | return (
147 | <>
148 |
153 |
154 |
155 |
156 |
157 |
158 | C |
159 | 0 |
160 | . |
161 | / |
162 |
163 |
164 | 7 |
165 | 8 |
166 | 9 |
167 | * |
168 |
169 |
170 | 4 |
171 | 5 |
172 | 6 |
173 | - |
174 |
175 |
176 | 1 |
177 | 2 |
178 | 3 |
179 | + |
180 |
181 |
182 |
183 |
184 |
187 | `}
188 | css={`
189 | .calc {
190 | width: 30rem;
191 | min-height: 40rem;
192 | box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.1);
193 | margin: 2rem auto;
194 | background-color: #fff;
195 | }
196 | .calc.shake {
197 | -webkit-animation: shake 0.03s alternate linear infinite;
198 | animation: shake 0.03s alternate linear infinite;
199 | }
200 | .calc__header {
201 | padding: 2.5rem;
202 | text-align: right;
203 | }
204 | .calc__header-result {
205 | font-size: 3rem;
206 | font-weight: 400;
207 | margin-top: 1rem;
208 | display: block;
209 | overflow: hidden;
210 | text-overflow: ellipsis;
211 | }
212 | .calc__inp-number {
213 | overflow: hidden;
214 | text-overflow: ellipsis;
215 | width: 100%;
216 | letter-spacing: 2px;
217 | font-size: 1.2rem;
218 | }
219 | .calc__content {
220 | padding: 2rem;
221 | background-color: rgba(26, 28, 40, 0.95);
222 | margin: 0 auto;
223 | width: 110%;
224 | margin-left: -5%;
225 | text-align: center;
226 | box-shadow: 0 1.5rem 4rem rgba(0, 0, 0, 0.7);
227 | position: relative;
228 | z-index: 10;
229 | }
230 | .calc__table {
231 | color: white;
232 | font-size: 3rem;
233 | font-weight: 300;
234 | text-align: center;
235 | width: 100%;
236 | }
237 | .calc__table td {
238 | padding: 1.5rem;
239 | cursor: pointer;
240 | vertical-align: center;
241 | }
242 | .calc__footer {
243 | padding: 0 2.5rem;
244 | text-align: center;
245 | background-image: linear-gradient(45deg, #fa8d50, #fe5130);
246 | }
247 | .calc__btn-equal {
248 | background-color: transparent;
249 | border: 0;
250 | box-shadow: none;
251 | outline: none;
252 | color: white;
253 | font-size: 5rem;
254 | font-weight: 100;
255 | font-family: "Montserrat", serif;
256 | cursor: pointer;
257 | }
258 | `}
259 | >
260 | >
261 | );
262 | };
263 |
264 | export { SocialShare, Pagination, Countdown, Calculation };
265 |
--------------------------------------------------------------------------------
/components/List2.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Template from "./Template";
3 |
4 | const RecentActivity = () => {
5 | return (
6 | <>
7 |
14 |
15 |
16 |
Samantha
17 | Ngopi Sore
18 |
19 |
20 | + IDR 35.000
21 |
22 |
23 |
24 |
25 |

26 |
27 |
Karen William
28 | Makan Bareng
29 |
30 |
31 | - IDR 67.000
32 |
33 |
34 |
35 |
36 |

37 |
38 |
Rachelizmarvel
39 | Designer Expert
40 |
41 |
42 | + IDR 84.000
43 |
44 |
45 |
46 | `}
47 | css={`
48 | .recent-item {
49 | display: flex;
50 | align-items: center;
51 | margin-bottom: 2.5rem;
52 | }
53 | .recent-image {
54 | width: 5rem;
55 | height: 5rem;
56 | border-radius: 5rem;
57 | flex-shrink: 0;
58 | object-fit: cover;
59 | }
60 | .recent-info {
61 | margin-left: 1.5rem;
62 | }
63 | .recent-author,
64 | .recent-change {
65 | display: block;
66 | margin-bottom: 1rem;
67 | color: #333;
68 | font-weight: 600;
69 | }
70 | .recent-position,
71 | .recent-time {
72 | font-size: 1.2rem;
73 | color: #999;
74 | }
75 | .recent-meta {
76 | margin-left: auto;
77 | }
78 | .recent-change.increase {
79 | color: var(--secondary);
80 | }
81 | .recent-change.decrease {
82 | color: var(--danger);
83 | }
84 | `}
85 | >
86 | >
87 | );
88 | };
89 |
90 | const AvatarList = () => {
91 | return (
92 | <>
93 |
98 |
99 |
100 |
101 |
102 |
103 |
104 | `}
105 | css={`
106 | .avatar-list {
107 | display: inline-flex;
108 | align-items: center;
109 | }
110 | .avatar-image,
111 | .avatar-more {
112 | width: 5rem;
113 | height: 5rem;
114 | border-radius: 10rem;
115 | object-fit: cover;
116 | border: 3px solid white;
117 | }
118 | .avatar-more {
119 | display: flex;
120 | align-items: center;
121 | justify-content: center;
122 | background-color: var(--primary);
123 | margin-left: -1.5rem;
124 | cursor: pointer;
125 | color: white;
126 | font-size: 2rem;
127 | }
128 | .avatar-image:not(:first-child) {
129 | margin-left: -1.5rem;
130 | }
131 | `}
132 | >
133 | >
134 | );
135 | };
136 |
137 | export { RecentActivity, AvatarList };
138 |
--------------------------------------------------------------------------------
/components/Media.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Template from "./Template";
3 |
4 | const ResponsiveMedia = () => {
5 | return (
6 | <>
7 |
11 |
12 | `}
13 | css={`
14 | .responsive-media > * {
15 | max-width: 100%;
16 | height: auto;
17 | }
18 | @media screen and (min-width: 768px) {
19 | .responsive-media {
20 | position: relative;
21 | height: 0;
22 | padding-bottom: 56.25%;
23 | width: 100%;
24 | overflow: hidden;
25 | }
26 | .responsive-media > * {
27 | position: absolute;
28 | top: 0;
29 | left: 0;
30 | width: 100%;
31 | height: 100%;
32 | object-fit: cover;
33 | }
34 | }
35 | `}
36 | >
37 | >
38 | );
39 | };
40 | const ResponsiveImage = () => {
41 | return (
42 | <>
43 |
47 |
48 | `}
49 | css={`
50 | .responsive-image {
51 | position: relative;
52 | height: 0;
53 | padding-bottom: 56.25%;
54 | }
55 | .responsive-image > * {
56 | position: absolute;
57 | top: 0;
58 | left: 0;
59 | width: 100%;
60 | height: 100%;
61 | object-fit: cover;
62 | }
63 | `}
64 | >
65 | >
66 | );
67 | };
68 |
69 | export { ResponsiveMedia, ResponsiveImage };
70 |
--------------------------------------------------------------------------------
/components/Menu.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/components/Menu.js
--------------------------------------------------------------------------------
/components/Meta.js:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from "react";
2 | import Head from "next/head";
3 |
4 | const Meta = () => {
5 | return (
6 |
7 |
8 |
12 |
13 |
17 |
21 |
25 |
31 |
32 |
33 | CodingUI - Download giao diện miễn phí chỉ với 1 click
34 |
39 |
44 |
45 |
46 |
51 |
52 |
57 |
58 |
59 |
60 | );
61 | };
62 |
63 | export default Meta;
64 |
--------------------------------------------------------------------------------
/components/Modal.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import styled, { css } from "styled-components";
3 |
4 | const ModalStyles = styled.div`
5 | position: fixed;
6 | top: 0;
7 | bottom: 0;
8 | left: 0;
9 | right: 0;
10 | overflow: hidden;
11 | z-index: 10000;
12 | display: flex;
13 | align-items: ${(props) => (props.top ? "flex-start" : "center")};
14 | justify-content: center;
15 | opacity: 0;
16 | visibility: hidden;
17 | background-color: rgba(0, 0, 0, 0.3);
18 | & > div {
19 | width: 100%;
20 | max-width: ${(props) => props.maxWidth || "1200px"};
21 | margin: 0 auto;
22 | max-height: 80vh;
23 | overflow-y: auto;
24 | height: auto;
25 | -ms-overflow-style: none;
26 | scrollbar-width: none;
27 | background-color: #ffffff;
28 | border-radius: 20px;
29 | border: 1px solid #eee;
30 | padding: ${(props) => props.padding || null};
31 | &::-webkit-scrollbar {
32 | display: none;
33 | }
34 | }
35 | .btn__close-modal {
36 | position: absolute;
37 | right: 2rem;
38 | top: 2rem;
39 | cursor: pointer;
40 | color: #333;
41 | display: flex;
42 | align-items: center;
43 | justify-content: center;
44 | width: 26px;
45 | height: 26px;
46 | border-radius: 26px;
47 | background-color: #ecf0ff;
48 | z-index: 99;
49 | @media screen and (max-width: 767px) {
50 | top: 5px;
51 | right: 5px;
52 | }
53 | }
54 | .modal-heading {
55 | color: #ff6bcb;
56 | font-weight: bold;
57 | font-size: 25px;
58 | @media screen and (max-width: 1023px) {
59 | font-size: 20px;
60 | }
61 | }
62 |
63 | ${(props) =>
64 | props.open &&
65 | css`
66 | opacity: 1;
67 | visibility: visible;
68 | & > div {
69 | margin-top: ${(props) => (props.top ? "150px" : "0")};
70 | opacity: 1;
71 | visibility: visible;
72 | pointer-events: auto;
73 | box-sizing: border-box;
74 | position: relative;
75 | }
76 | `};
77 | `;
78 |
79 | const Modal = ({
80 | showModal,
81 | hideModal,
82 | modalRef,
83 | children,
84 | maxWidth,
85 | padding,
86 | modalClassName = "",
87 | className,
88 | }) => {
89 | return (
90 |
96 |
97 |
98 | {children}
99 |
100 |
101 | );
102 | };
103 |
104 | export default Modal;
105 |
--------------------------------------------------------------------------------
/components/Navigation.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { useEffect } from "react";
3 | import Template from "./Template";
4 |
5 | const DropdownMenu = () => {
6 | useEffect(() => {
7 | window.addEventListener("load", function () {
8 | const menuToggle = document.querySelector(".menu-toggle");
9 | const menuChild = document.querySelectorAll(".has-child > a");
10 | menuChild?.forEach((el) =>
11 | el.addEventListener("click", function (e) {
12 | e.preventDefault();
13 | const subMenu = e.target?.nextElementSibling?.classList.toggle(
14 | "show"
15 | );
16 | })
17 | );
18 | menuToggle?.addEventListener("click", function () {
19 | const menu = document.querySelector(".menu");
20 | menu.classList.toggle("show");
21 | });
22 | });
23 | }, []);
24 | return (
25 | <>
26 |
33 |
34 |
85 |
86 | `}
87 | css={`
88 | .menu {
89 | display: flex;
90 | }
91 | .menu-link {
92 | font-size: 1.4rem;
93 | color: #918eae;
94 | display: block;
95 | }
96 | .menu-link:hover {
97 | color: #202842;
98 | }
99 | .menu-item {
100 | position: relative;
101 | }
102 |
103 | .menu-child-link {
104 | display: flex;
105 | align-items: center;
106 | justify-content: space-between;
107 | padding: 1.5rem;
108 | color: #918eae;
109 | }
110 | .menu-child-item {
111 | position: relative;
112 | }
113 | .menu-child-link:hover {
114 | color: #202842;
115 | }
116 |
117 | .menu-toggle {
118 | display: none;
119 | }
120 | .nav {
121 | position: relative;
122 | }
123 | .arrow-right {
124 | display: none;
125 | }
126 | @media screen and (min-width: 1024px) {
127 | .arrow-down {
128 | display: none;
129 | }
130 | .arrow-right {
131 | display: block;
132 | }
133 | .menu-item:not(:first-child) {
134 | margin-left: 2rem;
135 | }
136 | .menu-child {
137 | position: absolute;
138 | top: 100%;
139 | left: 0;
140 | margin-top: 1rem;
141 | min-width: 20rem;
142 | background-color: white;
143 | box-shadow: var(--shadow);
144 | display: none;
145 | }
146 | .menu-child:before {
147 | content: "";
148 | position: absolute;
149 | top: 0;
150 | left: 0;
151 | width: 100%;
152 | height: 1rem;
153 | background-color: transparent;
154 | transform: translateY(-100%);
155 | }
156 | .menu-child1 {
157 | top: 0;
158 | left: 100%;
159 | margin-top: 0;
160 | }
161 | .menu-item.has-child:hover > .menu-child {
162 | display: block;
163 | }
164 | .menu-child-item.has-child:hover > .menu-child {
165 | display: block;
166 | }
167 | }
168 | @media screen and (max-width: 1023px) {
169 | .menu {
170 | position: absolute;
171 | right: 0;
172 | top: 100%;
173 | min-width: 20rem;
174 | background-color: white;
175 | box-shadow: var(--shadow);
176 | flex-direction: column;
177 | display: none;
178 | z-index: 100;
179 | }
180 | .menu.show,
181 | .menu-child.show {
182 | display: block;
183 | }
184 | .menu-item:not(:last-child) {
185 | border-bottom: 1px solid #eee;
186 | }
187 | .menu-link {
188 | padding: 1.5rem;
189 | display: flex;
190 | justify-content: space-between;
191 | align-items: center;
192 | }
193 | .menu-child {
194 | display: none;
195 | background-color: #f6f6f6;
196 | }
197 | .menu-child1 {
198 | background-color: #eee;
199 | }
200 | .menu-toggle {
201 | width: max-content;
202 | font-size: 2rem;
203 | display: block;
204 | margin-left: auto;
205 | cursor: pointer;
206 | }
207 | }
208 | `}
209 | js={`
210 | window.addEventListener("load", function () {
211 | const menuToggle = document.querySelector(".menu-toggle");
212 | const menuChild = document.querySelectorAll(".has-child > a");
213 | menuChild?.forEach((el) =>
214 | el.addEventListener("click", function (e) {
215 | e.preventDefault();
216 | const subMenu = e.target?.nextElementSibling?.classList.toggle(
217 | "show"
218 | );
219 | })
220 | );
221 | menuToggle?.addEventListener("click", function () {
222 | const menu = document.querySelector(".menu");
223 | menu.classList.toggle("show");
224 | });
225 | });
226 | `}
227 | >
228 | >
229 | );
230 | };
231 |
232 | export { DropdownMenu };
233 |
--------------------------------------------------------------------------------
/components/Notification.js:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from "react";
2 | import Template from "./Template";
3 |
4 | const NotiBell = () => {
5 | return (
6 | <>
7 |
12 |
13 |
14 | `}
15 | css={`
16 | .bell-noti {
17 | font-size: 5rem;
18 | color: #ccc;
19 | position: relative;
20 | display: inline-block;
21 | }
22 | .bell-noti-icon:hover {
23 | animation: ring 0.25s forwards alternate infinite linear;
24 | }
25 | .bell-noti-status {
26 | width: 1rem;
27 | height: 1rem;
28 | border-radius: 1rem;
29 | background-color: var(--secondary);
30 | position: absolute;
31 | right: 0;
32 | top: 0;
33 | }
34 | @keyframes ring {
35 | from {
36 | transform: rotate(-10deg);
37 | }
38 | to {
39 | transform: rotate(10deg);
40 | }
41 | }
42 | `}
43 | >
44 | >
45 | );
46 | };
47 |
48 | export { NotiBell };
49 |
--------------------------------------------------------------------------------
/components/Overlay.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Template from "./Template";
3 |
4 | const OverlayIcon = () => {
5 | return (
6 |
`}
12 | css={`
13 | .overlay-icon {
14 | position: relative;
15 | }
16 | .overlay-icon i {
17 | color: white;
18 | font-size: 5rem;
19 | position: absolute;
20 | top: 50%;
21 | left: 50%;
22 | transform: translate(-50%, -50%);
23 | cursor: pointer;
24 | }
25 | `}
26 | >
27 | );
28 | };
29 |
30 | const Tooltip = () => {
31 | return (
32 | <>
33 |
40 |
41 | Variables are for remembering something for later
42 |
43 |
44 |
45 | `}
46 | css={`
47 | .tooltip {
48 | position: relative;
49 | text-align: center;
50 | display: block;
51 | width: max-content;
52 | margin: 0 auto;
53 | }
54 | .tooltip-content {
55 | position: absolute;
56 | top: -1.5rem;
57 | left: 50%;
58 | transform: translateX(-50%) translateY(-100%);
59 | min-width: 25rem;
60 | padding: 2rem;
61 | line-height: 1.4;
62 | border-radius: 8px;
63 | background-color: var(--gray);
64 | color: white;
65 | z-index: 1;
66 | opacity: 0;
67 | visibility: hidden;
68 | }
69 | .tooltip-content:after {
70 | content: "";
71 | position: absolute;
72 | bottom: 0;
73 | left: 50%;
74 | transform: translateX(-50%) translateY(30%) rotate(45deg);
75 | width: 2.5rem;
76 | height: 2.5rem;
77 | border-radius: 4px;
78 | background-color: inherit;
79 | z-index: -1;
80 | }
81 | .tooltip i {
82 | color: var(--primary);
83 | font-size: 2rem;
84 | }
85 | .tooltip:hover .tooltip-content {
86 | opacity: 1;
87 | visibility: visible;
88 | }
89 | `}
90 | >
91 | >
92 | );
93 | };
94 |
95 | export { OverlayIcon, Tooltip };
96 |
--------------------------------------------------------------------------------
/components/Page.js:
--------------------------------------------------------------------------------
1 | import React, { Component } from "react";
2 | import { ThemeProvider } from "styled-components";
3 | import { theme } from "../styles/Theme";
4 | import { GlobalStyle } from "../styles/GlobalStyles";
5 | import Meta from "./Meta";
6 | class Page extends Component {
7 | render() {
8 | return (
9 |
10 | <>
11 |
12 |
13 | {this.props.children}
14 |
15 |
16 |
17 | >
18 |
19 | );
20 | }
21 | }
22 |
23 | export default Page;
24 |
--------------------------------------------------------------------------------
/components/Player.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Template from "./Template";
3 |
4 | const MusicPlayer = () => {
5 | return (
6 | <>
7 |
14 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | `}
26 | css={`
27 | .player {
28 | padding: 1.5rem;
29 | width: 100%;
30 | border-radius: 8px;
31 | background-color: white;
32 | box-shadow: 0 0 15px 2px rgba(0, 0, 0, 0.05);
33 | }
34 | .player .bar {
35 | width: 100%;
36 | height: 4px;
37 | border-radius: 1rem;
38 | background-color: #eee;
39 | position: relative;
40 | margin-bottom: 2.5rem;
41 | }
42 | .player .bar-percent {
43 | position: absolute;
44 | top: 0;
45 | left: 0;
46 | height: 100%;
47 | width: 45%;
48 | border-radius: inherit;
49 | background-color: var(--secondary);
50 | }
51 | .player .bar-point {
52 | width: 1rem;
53 | height: 1rem;
54 | border-radius: 1rem;
55 | background-color: var(--secondary);
56 | position: absolute;
57 | top: 50%;
58 | left: 45%;
59 | transform: translate(-50%, -50%);
60 | }
61 | .player .meta {
62 | display: flex;
63 | align-items: center;
64 | justify-content: space-between;
65 | color: #999;
66 | font-size: 1.4rem;
67 | }
68 | .player .action {
69 | color: var(--secondary);
70 | }
71 | `}
72 | >
73 | >
74 | );
75 | };
76 |
77 | export { MusicPlayer };
78 |
--------------------------------------------------------------------------------
/components/Pricing.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Template from "./Template";
3 |
4 | const Pricing = () => {
5 | return (
6 | <>
7 |
14 |
15 |
16 |
17 |
18 |
Intro
19 | Save %20
20 |
21 |
22 | $19
23 | / Month
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
Basic
33 | Save %20
34 |
35 |
36 | $39
37 | / Month
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
Pro
47 | Save %20
48 |
49 |
50 | $59
51 | / Month
52 |
53 |
54 |
55 | `}
56 | css={`
57 | .pricing {
58 | margin-bottom: 1.5rem;
59 | position: relative;
60 | }
61 | .pricing input[type="radio"] {
62 | display: none;
63 | }
64 | .pricing input[type="radio"]:checked + .pricing-check {
65 | border-color: white;
66 | }
67 | .pricing input[type="radio"]:checked ~ .pricing-content {
68 | border-color: var(--primary);
69 | background-color: var(--primary);
70 | color: white;
71 | }
72 | .pricing
73 | input[type="radio"]:checked
74 | ~ .pricing-content
75 | .pricing-saving {
76 | background-color: white;
77 | }
78 | .pricing-check {
79 | display: inline-block;
80 | width: 2rem;
81 | height: 2rem;
82 | border-radius: 2rem;
83 | background-color: white;
84 | border: 2px solid #aeaec4;
85 | cursor: pointer;
86 | position: absolute;
87 | left: 2.5rem;
88 | top: 50%;
89 | margin-top: -1rem;
90 | }
91 | .pricing-content {
92 | padding: 2.5rem 2.5rem 2.5rem 7.5rem;
93 | border-radius: 8px;
94 | border: 1px solid #eee;
95 | display: flex;
96 | align-items: center;
97 | justify-content: space-between;
98 | color: #0c0e44;
99 | }
100 | .pricing-name {
101 | font-size: 2rem;
102 | font-weight: 500;
103 | margin-bottom: 1rem;
104 | }
105 | .pricing-saving {
106 | text-align: center;
107 | display: inline-block;
108 | padding: 7.5px 1.5rem;
109 | color: #fa9376;
110 | background-color: #feeeee;
111 | border-radius: 2rem;
112 | font-size: 1.2rem;
113 | }
114 | .pricing-price {
115 | display: flex;
116 | align-items: center;
117 | }
118 | .pricing-money {
119 | font-weight: 600;
120 | font-size: 3rem;
121 | }
122 | .pricing-time {
123 | font-size: 1.2rem;
124 | margin-left: 1rem;
125 | }
126 | `}
127 | >
128 | >
129 | );
130 | };
131 |
132 | export { Pricing };
133 |
--------------------------------------------------------------------------------
/components/Search.js:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from "react";
2 | import Template from "./Template";
3 |
4 | const AutocompleteSearch = () => {
5 | return (
6 | <>
7 |
12 |
17 |
18 |
About
19 |
Home
20 |
Contact
21 |
22 |
23 | `}
24 | css={`
25 | .search-auto {
26 | max-width: 50rem;
27 | margin: 2rem auto;
28 | position: relative;
29 | }
30 | .search-auto-input {
31 | width: 100%;
32 | display: block;
33 | padding: 1.5rem;
34 | font-family: "Poppins";
35 | color: #333;
36 | border-radius: 4px;
37 | outline: none;
38 | background-color: transparent;
39 | transition: 0.2s ease;
40 | border: 1px solid transparent;
41 | box-shadow: var(--shadow);
42 | }
43 | .search-auto-input:focus {
44 | border-color: #ff695b;
45 | box-shadow: 0 0 0 2px #ffe0dd;
46 | }
47 | .search-auto-input:focus + .search-auto-list {
48 | opacity: 1;
49 | visibility: visible;
50 | }
51 | .search-auto-list {
52 | position: absolute;
53 | top: 100%;
54 | left: 0;
55 | width: 100%;
56 | background-color: white;
57 | padding: 1.5rem;
58 | box-shadow: var(--shadow);
59 | border-radius: 8px;
60 | opacity: 0;
61 | visibility: hidden;
62 | transition: 0.2s ease;
63 | }
64 | .search-auto-item {
65 | padding: 1.5rem;
66 | cursor: pointer;
67 | border-radius: inherit;
68 | transition: 0.2s ease;
69 | }
70 | .search-auto-item:hover {
71 | color: #ff695b;
72 | background-color: #fafafa;
73 | }
74 | `}
75 | >
76 | >
77 | );
78 | };
79 |
80 | const SimpleSearch1 = () => {
81 | return (
82 | <>
83 |
90 |
91 |
92 |
93 | `}
94 | css={`
95 | .simple-search {
96 | width: 100%;
97 | display: flex;
98 | }
99 | .simple-search button {
100 | padding: 15px;
101 | color: white;
102 | flex-shrink: 0;
103 | border-radius: 8px;
104 | background-color: #fc8383;
105 | margin-left: 15px;
106 | }
107 | .simple-search input {
108 | width: 100%;
109 | padding: 15px;
110 | background-color: #fafafa;
111 | border-radius: 8px;
112 | -webkit-appearance: none;
113 | font-size: 14px;
114 | font-weight: 500;
115 | }
116 | `}
117 | >
118 | >
119 | );
120 | };
121 |
122 | const SimpleSearch2 = () => {
123 | return (
124 | <>
125 |
132 |
133 |
134 |
135 | `}
136 | css={`
137 | .simple-search {
138 | width: 100%;
139 | display: flex;
140 | padding: 5px;
141 | background-color: white;
142 | border-radius: 4px;
143 | border: 1px solid #eee;
144 | }
145 | .simple-search button {
146 | padding: 10px 20px;
147 | color: white;
148 | flex-shrink: 0;
149 | border-radius: 4px;
150 | background-color: #22c58b;
151 | }
152 | .simple-search input {
153 | width: 100%;
154 | padding: 10px;
155 | background-color: transparent;
156 | -webkit-appearance: none;
157 | font-size: 14px;
158 | font-weight: 500;
159 | }
160 | `}
161 | >
162 | >
163 | );
164 | };
165 |
166 | const SimpleSearch3 = () => {
167 | return (
168 | <>
169 |
176 |
177 |
178 |
179 | `}
180 | css={`
181 | .simple-search {
182 | width: 100%;
183 | display: flex;
184 | border-radius: 8px;
185 | overflow: hidden;
186 | box-shadow: 0 0 12px 2px rgba(0, 0, 0, 0.05);
187 | }
188 | .simple-search button {
189 | padding: 15px 30px;
190 | color: white;
191 | flex-shrink: 0;
192 | background-color: #2cccff;
193 | }
194 | .simple-search input {
195 | width: 100%;
196 | padding: 15px;
197 | background-color: white;
198 | -webkit-appearance: none;
199 | font-size: 14px;
200 | font-weight: 500;
201 | }
202 | `}
203 | >
204 | >
205 | );
206 | };
207 |
208 | export { AutocompleteSearch, SimpleSearch1, SimpleSearch2, SimpleSearch3 };
209 |
--------------------------------------------------------------------------------
/components/Shadow.js:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from "react";
2 | import Template from "./Template";
3 |
4 | const ComplexShadow = () => {
5 | return (
6 | <>
7 |
14 | `}
15 | css={`
16 | .square {
17 | width: 5px;
18 | height: 5px;
19 | background-color: var(--pink);
20 | box-shadow: 10px 0 0 0 var(--pink), 20px 0 0 0 var(--pink),
21 | 30px 0 0 0 var(--pink), 0 10px 0 0 var(--pink),
22 | 10px 10px 0 0 var(--pink), 20px 10px 0 0 var(--pink),
23 | 30px 10px 0 0 var(--pink), 0px 20px 0 0 var(--pink),
24 | 10px 20px 0 0 var(--pink), 20px 20px 0 0 var(--pink),
25 | 30px 20px 0 0 var(--pink), 0 30px 0 0 var(--pink),
26 | 10px 30px 0 0 var(--pink), 20px 30px 0 0 var(--pink),
27 | 30px 30px 0 0 var(--pink);
28 | }
29 | `}
30 | >
31 | >
32 | );
33 | };
34 |
35 | export { ComplexShadow };
36 |
--------------------------------------------------------------------------------
/components/Sidebar.js:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from "react";
2 | import Template from "./Template";
3 |
4 | const SidebarMenu = () => {
5 | return (
6 | <>
7 |
66 | >
67 | );
68 | };
69 |
70 | export { SidebarMenu };
71 |
--------------------------------------------------------------------------------
/components/SingleDiv.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Template from "./Template";
3 |
4 | const CaptainShield = () => {
5 | return (
6 | <>
7 | ★`}
11 | css={`
12 | .captain-shield {
13 | margin: 8rem auto;
14 | width: 3rem;
15 | height: 3rem;
16 | text-align: center;
17 | color: white;
18 | font-size: 2rem;
19 | border-radius: 50%;
20 | background-color: #00aefd;
21 | display: flex;
22 | align-items: center;
23 | justify-content: center;
24 | box-shadow: 0 0 0 20px #ff7870, 0 0 0 20.5px white, 0 0 0 40px #eee,
25 | 0 0 0 40.5px white, 0 0 0 60px #ff7870, 0 5px 0 60px #a2413b;
26 | }
27 | `}
28 | >
29 | >
30 | );
31 | };
32 |
33 | export { CaptainShield };
34 |
--------------------------------------------------------------------------------
/components/Social.js:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from "react";
2 | import Template from "./Template";
3 |
4 | const SocialShareButon = () => {
5 | return (
6 | <>
7 |
12 |
13 |
14 | Share this post on Facebook
15 |
16 |
17 |
18 | Share this post on Instagram
19 |
20 |
24 |
25 | `}
26 | css={`
27 | .social-share {
28 | width: 100%;
29 | max-width: 400px;
30 | }
31 | .social-share-icon {
32 | width: 40px;
33 | height: 40px;
34 | background-color: white;
35 | border-radius: inherit;
36 | display: flex;
37 | align-items: center;
38 | justify-content: center;
39 | font-size: 18px;
40 | }
41 | .social-share-text {
42 | color: white;
43 | margin-left: 20px;
44 | font-size: 16px;
45 | }
46 |
47 | .social-share-item {
48 | width: 100%;
49 | padding: 10px;
50 | border-radius: 8px;
51 | display: flex;
52 | align-items: center;
53 | cursor: pointer;
54 | }
55 | .social-share-item.facebook {
56 | background-color: #3b5999;
57 | }
58 | .social-share-item.facebook .social-share-icon {
59 | color: #3b5999;
60 | }
61 | .social-share-item.instagram {
62 | background-color: #e4405f;
63 | }
64 | .social-share-item.instagram .social-share-icon {
65 | color: #e4405f;
66 | }
67 | .social-share-item.twitter {
68 | background-color: #55acee;
69 | }
70 | .social-share-item.twitter .social-share-icon {
71 | color: #55acee;
72 | }
73 | .social-share-item + .social-share-item {
74 | margin-top: 20px;
75 | }
76 | `}
77 | >
78 | >
79 | );
80 | };
81 |
82 | export { SocialShareButon };
83 |
--------------------------------------------------------------------------------
/components/Tab.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Template from "./Template";
3 | import { useEffect } from "react";
4 |
5 | const SimpleTab = () => {
6 | useEffect(() => {
7 | window.addEventListener("load", function () {
8 | const tabs = document.querySelectorAll(".tab-item");
9 | const tabsContent = document.querySelectorAll(".tab-content");
10 |
11 | function handleChangeTab(e) {
12 | const tabId = e.target.dataset.tab;
13 | tabs.forEach((el) => el.classList.remove("active"));
14 | e.target.classList.add("active");
15 | tabsContent.forEach((el) => {
16 | el.classList.remove("active");
17 | if (el.getAttribute("data-tab") === tabId) {
18 | el.classList.add("active");
19 | }
20 | });
21 | }
22 |
23 | tabs.forEach((el) => el.addEventListener("click", handleChangeTab));
24 | });
25 | }, []);
26 | return (
27 | <>
28 |
35 |
36 |
Popular
37 |
Bali
38 |
New York
39 |
40 |
41 |
42 |
43 |

44 |
45 | Beach
46 |
Cabo San Lucas, Mexico
47 |
48 |
49 |
50 |
51 |
52 |

53 |
54 | Unicorn
55 |
Cabo San Lucas, Mexico
56 |
57 |
58 |
59 |
60 |
61 |

62 |
63 | Hawaii
64 |
Cabo San Lucas, Mexico
65 |
66 |
67 |
68 |
69 |
70 | `}
71 | css={`
72 | .tab {
73 | padding: 2.5rem;
74 | border-radius: 1rem;
75 | background-color: white;
76 | box-shadow: var(--shadow);
77 | }
78 | .tab-list {
79 | display: flex;
80 | justify-content: space-between;
81 | margin-bottom: 2.5rem;
82 | }
83 | .tab-item {
84 | cursor: pointer;
85 | padding: 1.2rem 2rem;
86 | border-radius: 5rem;
87 | color: #818e9b;
88 | background-color: #f4f5f7;
89 | text-align: center;
90 | white-space: nowrap;
91 | font-weight: 500;
92 | }
93 | .tab-item.active {
94 | color: white;
95 | background-color: var(--primary);
96 | pointer-events: none;
97 | }
98 | .tab-item:not(:first-child) {
99 | margin-left: 1.5rem;
100 | }
101 | .tab-content {
102 | display: none;
103 | }
104 | .tab-content.active {
105 | display: block;
106 | }
107 | .post {
108 | display: flex;
109 | align-items: center;
110 | }
111 | .post:not(:first-child) {
112 | margin-bottom: 2rem;
113 | }
114 | .post-image {
115 | width: 8rem;
116 | height: 8rem;
117 | border-radius: 1rem;
118 | object-fit: cover;
119 | flex-shrink: 0;
120 | margin-right: 2.5rem;
121 | }
122 | .post-info {
123 | flex: 1;
124 | }
125 | .post-category {
126 | color: #818e9b;
127 | display: inline-block;
128 | font-size: 1.6rem;
129 | margin-bottom: 1rem;
130 | font-weight: 500;
131 | }
132 | .post-title {
133 | color: #4e4f51;
134 | font-weight: 600;
135 | font-size: 1.8rem;
136 | line-height: 1.4;
137 | }
138 | `}
139 | js={`
140 | window.addEventListener("load", function () {
141 | const tabs = document.querySelectorAll(".tab-item");
142 | const tabsContent = document.querySelectorAll(".tab-content");
143 |
144 | function handleChangeTab(e) {
145 | const tabId = e.target.dataset.tab;
146 | tabs.forEach((el) => el.classList.remove("active"));
147 | e.target.classList.add("active");
148 | tabsContent.forEach((el) => {
149 | el.classList.remove("active");
150 | if (el.getAttribute("data-tab") === tabId) {
151 | el.classList.add("active");
152 | }
153 | });
154 | }
155 |
156 | tabs.forEach((el) => el.addEventListener("click", handleChangeTab));
157 | });
158 | `}
159 | >
160 | >
161 | );
162 | };
163 |
164 | const Tabs5 = () => {
165 | return (
166 | <>
167 |
174 | Education
175 | Fashion
176 | Music
177 | Podcast
178 |
179 | `}
180 | css={`
181 | .tabs5 {
182 | display: flex;
183 | border: 1px solid #6a5af9;
184 | }
185 | .tabs5 .tab-item:not(:first-child) {
186 | border-left: 1px solid #6a5af9;
187 | }
188 | .tabs5 .tab-item.active {
189 | color: white;
190 | background-color: #6a5af9;
191 | }
192 | .tabs5 .tab-item {
193 | white-space: nowrap;
194 | padding: 10px 15px;
195 | cursor: pointer;
196 | color: #6a5af9;
197 | font-weight: 500;
198 | flex: 1;
199 | display: flex;
200 | align-items: center;
201 | justify-content: center;
202 | }
203 | `}
204 | >
205 | >
206 | );
207 | };
208 | const Tabs7 = () => {
209 | return (
210 | <>
211 |
218 | Education
219 | Fashion
220 | Music
221 | Podcast
222 |
223 | `}
224 | css={`
225 | .tabs7 {
226 | display: flex;
227 | background-color: #eee;
228 | border-radius: 8px;
229 | padding: 5px;
230 | }
231 | .tabs7 .tab-item.active {
232 | color: #6a5af9;
233 | background-color: white;
234 | }
235 | .tabs7 .tab-item {
236 | white-space: nowrap;
237 | padding: 10px 15px;
238 | cursor: pointer;
239 | color: #999;
240 | font-weight: 500;
241 | flex: 1;
242 | display: flex;
243 | align-items: center;
244 | justify-content: center;
245 | border-radius: inherit;
246 | }
247 | `}
248 | >
249 | >
250 | );
251 | };
252 | const Tabs1 = () => {
253 | return (
254 | <>
255 |
262 | Education
263 | Fashion
264 | Music
265 | Podcast
266 |
267 | `}
268 | css={`
269 | .tabs1 {
270 | display: flex;
271 | }
272 | .tabs1 .tab-item.active {
273 | color: #6a5af9;
274 | border-bottom-color: currentColor;
275 | }
276 | .tabs1 .tab-item {
277 | white-space: nowrap;
278 | padding: 10px 15px;
279 | cursor: pointer;
280 | color: #999;
281 | font-weight: 500;
282 | flex: 1;
283 | display: flex;
284 | align-items: center;
285 | justify-content: center;
286 | border-radius: inherit;
287 | border-bottom: 1px solid transparent;
288 | }
289 | `}
290 | >
291 | >
292 | );
293 | };
294 |
295 | export { SimpleTab, Tabs5, Tabs7, Tabs1 };
296 |
--------------------------------------------------------------------------------
/components/Table.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Template from "./Template";
3 |
4 | const Table = () => {
5 | return (
6 | <>
7 |
14 |
15 |
16 |
17 | Project name |
18 | Contact person |
19 | Project lead |
20 | Team |
21 | Progress |
22 | Deadline |
23 | Action |
24 |
25 |
26 |
27 |
28 |
29 |
30 | 
31 | Rachel
32 |
33 | |
34 | Mike wazowski |
35 | Mike Dawson |
36 |
37 |
38 | 
39 | 
40 |
41 | |
42 |
43 |
46 | |
47 |
48 | 12 days left
49 | |
50 |
51 |
52 | |
53 |
54 |
55 |
56 |
57 | 
58 | Evondev
59 |
60 | |
61 | Mike wazowski |
62 | Mike Dawson |
63 |
64 |
65 | 
66 | 
67 |
68 | |
69 |
70 |
73 | |
74 |
75 | 12 days left
76 | |
77 |
78 |
79 | |
80 |
81 |
82 |
83 |
84 | `}
85 | css={`
86 | .table {
87 | width: 100%;
88 | overflow-x: auto;
89 | }
90 | .table table {
91 | border-collapse: collapse;
92 | border-spacing: 0;
93 | width: 100%;
94 | color: #697b92;
95 | }
96 | .table tr {
97 | border-bottom: 1px solid #e6e9ec;
98 | }
99 | .table th {
100 | font-size: 1.2rem;
101 | color: #aeb6c3;
102 | text-align: left;
103 | font-weight: 400;
104 | padding: 1rem;
105 | white-space: nowrap;
106 | }
107 | .table td {
108 | vertical-align: middle;
109 | padding: 1.5rem 1rem;
110 | white-space: nowrap;
111 | font-size: 1.2rem;
112 | font-weight: normal;
113 | }
114 | .table .image-text {
115 | display: flex;
116 | align-items: center;
117 | }
118 | .table .image-text img {
119 | width: 3.5rem;
120 | height: 3.5rem;
121 | border-radius: 1rem;
122 | object-fit: cover;
123 | margin-right: 1rem;
124 | flex-shrink: 0;
125 | }
126 | .table .image-list {
127 | display: flex;
128 | min-width: 10rem;
129 | }
130 | .table .image-list img {
131 | width: 3rem;
132 | height: 3rem;
133 | border-radius: 6px;
134 | object-fit: cover;
135 | margin-right: 1rem;
136 | flex-shrink: 0;
137 | }
138 | .table .progress {
139 | width: 15rem;
140 | height: 5px;
141 | background-color: #ccc;
142 | border-radius: 1rem;
143 | position: relative;
144 | }
145 | .table .progress .percent {
146 | position: absolute;
147 | top: 0;
148 | left: 0;
149 | height: 100%;
150 | width: 50%;
151 | background-color: var(--primary);
152 | border-radius: inherit;
153 | }
154 | .table .tag {
155 | display: inline-block;
156 | padding: 1rem;
157 | color: #999;
158 | font-size: 1.2rem;
159 | text-align: center;
160 | background-color: #eee;
161 | border-radius: 1rem;
162 | }
163 | .table .action {
164 | display: block;
165 | text-align: center;
166 | font-size: 3rem;
167 | }
168 | `}
169 | >
170 | >
171 | );
172 | };
173 |
174 | export { Table };
175 |
--------------------------------------------------------------------------------
/components/Tags.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Template from "./Template";
3 |
4 | const Labels = () => {
5 | return (
6 | <>
7 |
11 | Default
12 | Success
13 | Danger
14 | Warning
15 | Info
16 | `}
17 | css={`
18 | .label {
19 | display: inline-flex;
20 | flex-wrap: wrap;
21 | }
22 | .label-item {
23 | color: white;
24 | padding: 5px 1rem;
25 | border-radius: 6px;
26 | margin-right: 1rem;
27 | margin-bottom: 1rem;
28 | text-transform: uppercase;
29 | font-size: 1rem;
30 | font-weight: bold;
31 | background-color: #333;
32 | display: inline-block;
33 | }
34 | .label-item.success {
35 | background-color: #07a787;
36 | }
37 | .label-item.info {
38 | background-color: #00aefd;
39 | }
40 | .label-item.danger {
41 | background-color: #ff7870;
42 | }
43 | .label-item.warning {
44 | background-color: #ffa400;
45 | }
46 | `}
47 | >
48 | >
49 | );
50 | };
51 |
52 | const Tags = () => {
53 | return (
54 | <>
55 |
62 |
63 | Frontend
64 |
65 |
66 |
67 | Backend
68 |
69 |
70 |
71 | Fullstack
72 |
73 |
74 |
75 | DevOps
76 |
77 |
78 |
79 | Designer
80 |
81 |
82 |
83 | `}
84 | css={`
85 | .tags {
86 | display: flex;
87 | flex-flow: row wrap;
88 | margin-left: -1rem;
89 | }
90 | .tags-item {
91 | padding: 1rem;
92 | border-radius: 4px;
93 | text-align: center;
94 | display: flex;
95 | align-items: center;
96 | color: var(--secondary);
97 | background-color: rgb(19 210 184 / 10%);
98 | margin-left: 1rem;
99 | margin-bottom: 1rem;
100 | }
101 | .tags-text {
102 | white-space: nowrap;
103 | max-width: 10rem;
104 | text-overflow: ellipsis;
105 | overflow: hidden;
106 | line-height: 1.4;
107 | }
108 | .tags-remove {
109 | cursor: pointer;
110 | margin-left: 1rem;
111 | }
112 | `}
113 | >
114 | >
115 | );
116 | };
117 |
118 | export { Labels, Tags };
119 |
--------------------------------------------------------------------------------
/components/Template.js:
--------------------------------------------------------------------------------
1 | import React, { Fragment } from "react";
2 | import parse from "react-html-parser";
3 | import copyToClipboard from "../lib/copyToClipboard";
4 | import styled from "styled-components";
5 | import SyntaxHighlighter from "react-syntax-highlighter";
6 | import cssbeautify from "cssbeautify";
7 | import pretty from "pretty";
8 | import { useState } from "react";
9 | import { docco } from "react-syntax-highlighter/dist/cjs/styles/hljs";
10 | import { useEffect } from "react";
11 | import Modal from "./Modal";
12 |
13 | const TemplateStyles = styled.div`
14 | ${(props) => props.css}
15 | `;
16 |
17 | const Template = ({
18 | title,
19 | html = "",
20 | htmlCopy = "",
21 | css = "",
22 | cssCopy = "",
23 | source = "",
24 | hideCode = false,
25 | js = "",
26 | className = "",
27 | allowView = true,
28 | }) => {
29 | const [showCode, setShowCode] = useState(false);
30 | const [editCode, setEditCode] = useState(false);
31 | const [htmlCode, setHtmlCode] = useState(html);
32 | const [cssCode, setCssCode] = useState(css);
33 | let newCss = `${cssCode}`;
34 | let newHTML = `${htmlCode}
35 | `;
36 |
37 | useEffect(() => {
38 | setHtmlCode(html);
39 | setCssCode(css);
40 | }, [css, html, js]);
41 |
42 | return (
43 |
48 |
49 |
{title}
50 | {allowView && (
51 |
57 | )}
58 |
59 | {html && {parse(htmlCode)}
}
60 |
61 |
67 |
73 | {js.length > 0 && (
74 |
80 | )}
81 |
82 | {allowView && showCode && (
83 |
84 |
85 |
HTML
86 |
87 | {pretty(htmlCopy || html, { ocd: true })}
88 |
89 |
90 |
91 |
CSS
92 |
93 | {cssbeautify(cssCopy || css, {
94 | indent: ` `,
95 | autosemicolon: true,
96 | })}
97 |
98 |
99 |
100 | )}
101 | {/*
102 |
{title}
103 | {!hideCode && (
104 |
105 |
copyToClipboard(htmlCopy || newHTML)}
108 | >
109 | Copy HTML
110 |
111 |
copyToClipboard(cssCopy || newCss)}
114 | >
115 | Copy CSS
116 |
117 | {js.length > 0 && (
118 |
copyToClipboard(js)}>
119 | Copy JS
120 |
121 | )}
122 |
123 | )}
124 |
125 | {html && {parse(htmlCode)}
}
126 |
127 | {!hideCode && (
128 |
129 | {author && (
130 |
136 | )}
137 |
setShowCode(!showCode)}
140 | >
141 |
142 |
143 |
{
146 | setShowCode(true);
147 | setEditCode(!editCode);
148 | }}
149 | >
150 |
151 |
152 |
153 | )}
154 | {showCode && (
155 | <>
156 |
157 | {!editCode ? (
158 |
159 | {pretty(html, { ocd: true })}
160 |
161 | ) : (
162 |
166 | )}
167 |
168 |
169 | {!editCode ? (
170 |
171 | {cssbeautify(css, {
172 | indent: ` `,
173 | autosemicolon: true,
174 | })}
175 |
176 | ) : (
177 |
181 | )}
182 |
183 | {js.length > 0 && (
184 |
185 |
186 | {pretty(js, { ocd: true })}
187 |
188 |
189 | )}
190 | >
191 | )} */}
192 |
193 | );
194 | };
195 |
196 | export default React.memo(Template);
197 |
--------------------------------------------------------------------------------
/components/Text.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Template from "./Template";
3 |
4 | const SingleLine = () => {
5 | return (
6 | <>
7 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Eligendi, voluptas incidunt! Nulla tenetur consequatur nostrum dignissimos temporibus iure assumenda iste quia, quam voluptates totam. Libero laboriosam ipsa voluptates voluptatem ad!`}
11 | css={`
12 | .single-line {
13 | white-space: nowrap;
14 | overflow: hidden;
15 | text-overflow: ellipsis;
16 | color: #333;
17 | font-size: 1.4rem;
18 | line-height: 1.4;
19 | }
20 | `}
21 | >
22 | >
23 | );
24 | };
25 | const MultiLine = () => {
26 | return (
27 | <>
28 | Lorem ipsum dolor sit amet consectetur adipisicing elit. Eligendi, voluptas incidunt! Nulla tenetur consequatur nostrum dignissimos temporibus iure assumenda iste quia, quam voluptates totam. Libero laboriosam ipsa voluptates voluptatem ad!`}
32 | css={`
33 | .multi-line {
34 | color: #333;
35 | font-size: 1.4rem;
36 | line-height: 1.4;
37 | display: -webkit-box;
38 | -webkit-line-clamp: 3;
39 | -webkit-box-orient: vertical;
40 | overflow: hidden;
41 | text-overflow: ellipsis;
42 | }
43 | `}
44 | >
45 | >
46 | );
47 | };
48 | const TextGradient = () => {
49 | return (
50 | <>
51 | Text Gradient`}
55 | css={`
56 | .text-gradient {
57 | font-weight: bold;
58 | font-size: 4rem;
59 | display: inline-block;
60 | color: var(--purple);
61 | }
62 | @supports (-webkit-background-clip: text) {
63 | .text-gradient {
64 | color: transparent;
65 | background-image: var(--gradient);
66 | -webkit-background-clip: text;
67 | }
68 | }
69 | `}
70 | >
71 | >
72 | );
73 | };
74 |
75 | export { SingleLine, MultiLine, TextGradient };
76 |
--------------------------------------------------------------------------------
/components/UpComing.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Template from "./Template";
3 |
4 | const UpComingUI = () => {
5 | return (
6 | <>
7 |
14 | Donate:
15 |
16 | 0937253577
17 |
18 | `}
19 | css={`
20 | .momo-layout {
21 | color: white;
22 | display: grid;
23 | grid-template-columns: auto 50px 1fr;
24 | grid-gap: 0 20px;
25 | align-items: center;
26 | font-size: 20px;
27 | font-weight: bold;
28 | }
29 | .momo img {
30 | width: 50px;
31 | height: 50px;
32 | object-fit: cover;
33 | }
34 | `}
35 | >
36 | >
37 | );
38 | };
39 |
40 | export { UpComingUI };
41 |
--------------------------------------------------------------------------------
/components/ViewCode.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import styled from "styled-components";
3 | const ViewCodeStyles = styled.div``;
4 |
5 | const ViewCode = () => {
6 | return ;
7 | };
8 |
9 | export default ViewCode;
10 |
--------------------------------------------------------------------------------
/components/course/CourseItem.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import styled from "styled-components";
3 | const CourseItemStyles = styled.div`
4 | background-color: #ffffff;
5 | box-shadow: 0px 4px 16px rgba(215, 215, 215, 0.25) !important;
6 | border-radius: 8px !important;
7 | font-family: "Montserrat", sans-serif;
8 | margin-bottom: 30px !important;
9 | height: 100%;
10 | padding: 0 !important;
11 | display: flex;
12 | flex-direction: column;
13 |
14 | @media screen and (max-width: 767px) {
15 | margin-bottom: 20px;
16 | }
17 | .course-media {
18 | position: relative;
19 | padding-top: 56.25%;
20 | border-radius: inherit;
21 | overflow: hidden;
22 | }
23 | .course-image {
24 | position: absolute;
25 | top: 0;
26 | left: 0;
27 | width: 100%;
28 | height: 100%;
29 | object-fit: cover;
30 | }
31 | .course-content {
32 | padding: 20px;
33 | display: flex;
34 | flex-direction: column;
35 | flex: 1;
36 | }
37 | .course-name {
38 | color: #332a2a;
39 | font-weight: 600;
40 | line-height: 1.5;
41 | margin-bottom: 10px;
42 | font-size: 16px;
43 | @media screen and (min-width: 1024px) {
44 | font-size: 18px;
45 | }
46 | }
47 | .course-meta {
48 | display: flex;
49 | align-items: center;
50 | justify-content: space-between;
51 | margin-bottom: 40px;
52 | margin-top: auto;
53 | @media screen and (max-width: 1023.98px) {
54 | flex-direction: column;
55 | align-items: flex-start;
56 | gap: 5px;
57 | margin-bottom: 15px;
58 | }
59 | }
60 | .course-price {
61 | color: var(--green);
62 | font-weight: 500;
63 | font-size: 20px;
64 | }
65 | .course-coupon .text {
66 | font-weight: 300;
67 | font-size: 14px;
68 | color: #aeaeae;
69 | margin-right: 5px;
70 | }
71 | .course-coupon .coupon {
72 | font-weight: 500;
73 | color: #fe8b78;
74 | font-size: 16px;
75 | @media screen and (min-width: 1024px) {
76 | font-size: 18px;
77 | }
78 | }
79 | .course-buy {
80 | width: 100%;
81 | padding: 0 15px;
82 | height: 55px;
83 | color: white;
84 | font-size: 16px;
85 | font-weight: 600;
86 | border-radius: 4px;
87 | display: flex;
88 | align-items: center;
89 | justify-content: center;
90 | @media screen and (max-width: 1023.98px) {
91 | height: 45px;
92 | }
93 |
94 | &--primary {
95 | background: linear-gradient(90.06deg, #f86086 -4.45%, #fe8d77 104.12%);
96 | }
97 | &--secondary {
98 | background: linear-gradient(90.06deg, #2cccff -4.45%, #22dfbf 104.12%);
99 | }
100 | &--third {
101 | background: linear-gradient(90.06deg, #6f5cf1 -4.45%, #fc5776 104.12%);
102 | }
103 | &--default {
104 | background-color: #ccc;
105 | pointer-events: none;
106 | }
107 | }
108 | .course-label {
109 | position: absolute;
110 | right: 20px;
111 | top: 20px;
112 | text-transform: uppercase;
113 | padding: 5px 20px;
114 | border-radius: 100px;
115 | font-size: 12px;
116 | color: white;
117 | font-weight: bold;
118 | &--hot {
119 | background-color: #f86385;
120 | }
121 | &--new {
122 | background-color: var(--green);
123 | }
124 | }
125 | .placeholder-image {
126 | background-color: #eee;
127 | position: absolute;
128 | top: 0;
129 | left: 0;
130 | width: 100%;
131 | height: 100%;
132 | }
133 | .placeholder-line {
134 | height: 20px;
135 | background-color: #eee;
136 | width: 100%;
137 | margin-bottom: 10px;
138 | }
139 | .placeholder-price {
140 | width: 100px;
141 | margin-bottom: 0;
142 | }
143 | `;
144 | const CourseItem = ({ image, label, title, price, coupon, cta, link }) => {
145 | return (
146 |
147 |
148 |

149 | {label && (
150 |
{label}
151 | )}
152 |
153 |
154 |
{title}
155 |
156 |
{price}đ
157 | {coupon && (
158 |
159 | Mã giảm giá:
160 | {coupon}
161 |
162 | )}
163 |
164 |
170 | {cta}
171 |
172 |
173 |
174 | );
175 | };
176 |
177 | export default CourseItem;
178 |
--------------------------------------------------------------------------------
/components/temp.js:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from "react";
2 | import Template from "./Template";
3 |
4 | const ComponentName = () => {
5 | useEffect(() => {
6 | window.addEventListener("load", function () {});
7 | });
8 | return (
9 | <>
10 |
18 | >
19 | );
20 | };
21 |
22 | export { ComponentName };
23 |
--------------------------------------------------------------------------------
/database.rules.json:
--------------------------------------------------------------------------------
1 | {
2 | "rules": {
3 | ".read": true,
4 | ".write": true
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/firebase.json:
--------------------------------------------------------------------------------
1 | {
2 | "database": {
3 | "rules": "database.rules.json"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/lib/copyToClipboard.js:
--------------------------------------------------------------------------------
1 | export default function copyToClipboard(str) {
2 | const el = document.createElement("textarea");
3 | el.value = str.trim();
4 | el.setAttribute("readonly", "");
5 | el.style.position = "absolute";
6 | el.style.left = "-9999px";
7 | document.body.appendChild(el);
8 | el.select();
9 | document.execCommand("copy");
10 | document.body.removeChild(el);
11 | const template = `
12 |
13 |
14 |
Coppied to clipboard successfully
15 | `;
16 | document.getElementById("__next").insertAdjacentHTML("afterbegin", template);
17 | setTimeout(function () {
18 | const prevItem = document.body.querySelector(".sweet-noti");
19 | if (prevItem) {
20 | prevItem.parentNode.removeChild(prevItem);
21 | }
22 | }, 2100);
23 | }
24 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "codingui",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "cross-env NODE_ENV=production node server.js "
9 | },
10 | "dependencies": {
11 | "babel-plugin-styled-components": "^1.12.0",
12 | "cross-env": "^7.0.3",
13 | "cssbeautify": "^0.3.1",
14 | "express": "^4.17.1",
15 | "firebase": "^7.19.1",
16 | "lazysizes": "^5.2.2",
17 | "next": "^9.5.5",
18 | "postcss-cli": "^9.1.0",
19 | "pretty": "^2.0.0",
20 | "re-base": "^4.0.0",
21 | "react": "16.13.1",
22 | "react-dom": "16.13.1",
23 | "react-helmet": "^6.1.0",
24 | "react-html-parser": "^2.0.2",
25 | "react-lazyload": "^3.0.0",
26 | "react-slick": "^0.27.13",
27 | "react-syntax-highlighter": "^13.5.1",
28 | "sass": "^1.32.0",
29 | "styled-components": "^5.2.3"
30 | },
31 | "devDependencies": {}
32 | }
33 |
--------------------------------------------------------------------------------
/pages/_app.js:
--------------------------------------------------------------------------------
1 | import "../styles/sass/main.scss";
2 |
3 | import App from "next/app";
4 | import Page from "../components/Page";
5 |
6 | class MyApp extends App {
7 | render() {
8 | const { Component, apolloClient, pageProps, router } = this.props;
9 | return (
10 |
11 | <>
12 |
13 | >
14 |
15 | );
16 | }
17 | }
18 |
19 | export default MyApp;
20 |
--------------------------------------------------------------------------------
/pages/_document.js:
--------------------------------------------------------------------------------
1 | import Document, { Html, Head, Main, NextScript } from "next/document";
2 | import { ServerStyleSheet } from "styled-components";
3 |
4 | export default class MyDocument extends Document {
5 | static getInitialProps({ renderPage }) {
6 | const sheet = new ServerStyleSheet();
7 | const page = renderPage((App) => (props) =>
8 | sheet.collectStyles()
9 | );
10 | const styleTags = sheet.getStyleElement();
11 | return { ...page, styleTags };
12 | }
13 |
14 | render() {
15 | return (
16 |
17 | {this.props.styleTags}
18 |
19 |
20 |
21 |
22 |
23 | );
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/pages/center.js:
--------------------------------------------------------------------------------
1 | import React, { Fragment } from "react";
2 | import styled from "styled-components";
3 | import Head from "next/head";
4 | import { GridStyles } from "../styles/GridStyles";
5 | import {
6 | CenterAbsoluteX,
7 | CenterBlock,
8 | CenterInlineBlock,
9 | CenterAbsoluteY,
10 | CenterAbsolute,
11 | CenterFlexbox,
12 | CenterGrid,
13 | } from "../components/Center";
14 | const Layout = styled.div`
15 | padding: 50px 20px;
16 | margin: 0 auto;
17 | max-width: 1000px;
18 | `;
19 | const Heading = styled.h1`
20 | text-transform: capitalize;
21 | font-size: 40px;
22 | font-weight: bold;
23 | text-align: center;
24 | margin-bottom: 50px;
25 | color: transparent;
26 | background-clip: text;
27 | -webkit-background-clip: text;
28 | background-image: linear-gradient(to right, #2979ff, #07a787);
29 | `;
30 |
31 | const CenterPage = () => {
32 | return (
33 |
34 |
35 | Common CSS Center - CodingUI
36 |
37 |
38 |
39 |
40 | Common CSS Center
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 | );
66 | };
67 |
68 | export default CenterPage;
69 |
--------------------------------------------------------------------------------
/pages/flexbox.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import styled from "styled-components";
3 | import {
4 | FlexEqualSize,
5 | FlexGrid,
6 | FlexDynamicItem,
7 | FlexSquareLayout,
8 | FlexLastItemOnRight,
9 | FlexLast2ItemOnRight,
10 | FlexEqualHeight,
11 | FlexHorizontal,
12 | } from "../components/Flexbox";
13 | import { GridStyles } from "../styles/GridStyles";
14 | import Head from "next/head";
15 | const Flex = {
16 | Layout: styled.div`
17 | padding: 50px 20px;
18 | margin: 0 auto;
19 | max-width: 1000px;
20 | `,
21 | Heading: styled.h1`
22 | text-transform: capitalize;
23 | font-size: 40px;
24 | font-weight: bold;
25 | text-align: center;
26 | margin-bottom: 50px;
27 | color: transparent;
28 | background-clip: text;
29 | -webkit-background-clip: text;
30 | background-image: linear-gradient(to right, #ff6bcb, #e74c3c);
31 | `,
32 | };
33 |
34 | const FlexboxPage = () => {
35 | return (
36 |
37 |
38 | Common CSS Flexbox layout with code
39 |
40 |
41 |
42 |
43 | Common CSS Flexbox layout
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 | );
72 | };
73 |
74 | export default FlexboxPage;
75 |
--------------------------------------------------------------------------------
/pages/index.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import Grid from "../components/Grid";
3 | import Header from "../components/Header";
4 | import Footer from "../components/Footer";
5 | import "lazysizes";
6 |
7 | const index = () => {
8 | return (
9 | <>
10 |
11 |
12 |
13 | >
14 | );
15 | };
16 |
17 | export default index;
18 |
--------------------------------------------------------------------------------
/public/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/.DS_Store
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/favicon.ico
--------------------------------------------------------------------------------
/public/fonts/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/fonts/.DS_Store
--------------------------------------------------------------------------------
/public/fonts/SF-Mono-Light.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/fonts/SF-Mono-Light.otf
--------------------------------------------------------------------------------
/public/fonts/SF-Mono-Regular.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/fonts/SF-Mono-Regular.otf
--------------------------------------------------------------------------------
/public/images/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/.DS_Store
--------------------------------------------------------------------------------
/public/images/banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/banner.png
--------------------------------------------------------------------------------
/public/images/brand-codingui.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/brand-codingui.png
--------------------------------------------------------------------------------
/public/images/brand-evondev.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/brand-evondev.png
--------------------------------------------------------------------------------
/public/images/dell.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/dell.jpeg
--------------------------------------------------------------------------------
/public/images/electro/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/.DS_Store
--------------------------------------------------------------------------------
/public/images/electro/apple-watch-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/apple-watch-1.png
--------------------------------------------------------------------------------
/public/images/electro/express-icon-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/express-icon-1.png
--------------------------------------------------------------------------------
/public/images/electro/headphone-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/headphone-1.png
--------------------------------------------------------------------------------
/public/images/electro/home-gadget-about-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/home-gadget-about-1.png
--------------------------------------------------------------------------------
/public/images/electro/home-gadget-vr_small-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/home-gadget-vr_small-1.png
--------------------------------------------------------------------------------
/public/images/electro/icon-boxed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/icon-boxed.png
--------------------------------------------------------------------------------
/public/images/electro/icon-card.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/icon-card.png
--------------------------------------------------------------------------------
/public/images/electro/icon-express.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/icon-express.png
--------------------------------------------------------------------------------
/public/images/electro/icon-percent.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/icon-percent.png
--------------------------------------------------------------------------------
/public/images/electro/icon-policy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/icon-policy.png
--------------------------------------------------------------------------------
/public/images/electro/img-apple-watch-rtl.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/img-apple-watch-rtl.png
--------------------------------------------------------------------------------
/public/images/electro/img-apple-watch.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/img-apple-watch.jpg
--------------------------------------------------------------------------------
/public/images/electro/img-apple-watch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/img-apple-watch.png
--------------------------------------------------------------------------------
/public/images/electro/img-big-headphone-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/img-big-headphone-white.png
--------------------------------------------------------------------------------
/public/images/electro/img-drone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/img-drone.png
--------------------------------------------------------------------------------
/public/images/electro/img-game-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/img-game-white.png
--------------------------------------------------------------------------------
/public/images/electro/img-headphone.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/img-headphone.jpg
--------------------------------------------------------------------------------
/public/images/electro/img-mouse.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/img-mouse.jpg
--------------------------------------------------------------------------------
/public/images/electro/img-sony-headphone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/img-sony-headphone.png
--------------------------------------------------------------------------------
/public/images/electro/img-sony.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/img-sony.jpg
--------------------------------------------------------------------------------
/public/images/electro/img-sound.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/img-sound.jpg
--------------------------------------------------------------------------------
/public/images/electro/img-vr-glasses.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/img-vr-glasses.jpg
--------------------------------------------------------------------------------
/public/images/electro/img-xiaomi.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/img-xiaomi.jpg
--------------------------------------------------------------------------------
/public/images/electro/img-zenbook.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/img-zenbook.png
--------------------------------------------------------------------------------
/public/images/electro/logo-black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/logo-black.png
--------------------------------------------------------------------------------
/public/images/electro/logo2-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/logo2-1.png
--------------------------------------------------------------------------------
/public/images/electro/logo22x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/logo22x.png
--------------------------------------------------------------------------------
/public/images/electro/logo_01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/logo_01.png
--------------------------------------------------------------------------------
/public/images/electro/logo_02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/logo_02.png
--------------------------------------------------------------------------------
/public/images/electro/logo_03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/logo_03.png
--------------------------------------------------------------------------------
/public/images/electro/logo_04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/logo_04.png
--------------------------------------------------------------------------------
/public/images/electro/logo_05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/logo_05.png
--------------------------------------------------------------------------------
/public/images/electro/logoblack2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/logoblack2x.png
--------------------------------------------------------------------------------
/public/images/electro/pattern_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/pattern_bg.png
--------------------------------------------------------------------------------
/public/images/electro/sony_headphone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/sony_headphone.png
--------------------------------------------------------------------------------
/public/images/electro/zenbook.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/electro/zenbook.png
--------------------------------------------------------------------------------
/public/images/girl1.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/girl1.jpeg
--------------------------------------------------------------------------------
/public/images/girl2.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/girl2.jpeg
--------------------------------------------------------------------------------
/public/images/girl3.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/girl3.jpeg
--------------------------------------------------------------------------------
/public/images/header-img.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/header-img.jpg
--------------------------------------------------------------------------------
/public/images/html-css-course.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/html-css-course.jpg
--------------------------------------------------------------------------------
/public/images/html-css-psd-course.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/html-css-psd-course.png
--------------------------------------------------------------------------------
/public/images/iu-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/iu-logo.png
--------------------------------------------------------------------------------
/public/images/js-course.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/js-course.jpg
--------------------------------------------------------------------------------
/public/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/logo.png
--------------------------------------------------------------------------------
/public/images/me.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/me.jpeg
--------------------------------------------------------------------------------
/public/images/me.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/me.png
--------------------------------------------------------------------------------
/public/images/og-image.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/og-image.jpg
--------------------------------------------------------------------------------
/public/images/og-image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/og-image.png
--------------------------------------------------------------------------------
/public/images/outer-space.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/outer-space.png
--------------------------------------------------------------------------------
/public/images/poker-building.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/poker-building.png
--------------------------------------------------------------------------------
/public/images/rachelizmarvel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/rachelizmarvel.png
--------------------------------------------------------------------------------
/public/images/rachelizmarvel2021.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/rachelizmarvel2021.png
--------------------------------------------------------------------------------
/public/images/torii.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/torii.png
--------------------------------------------------------------------------------
/public/images/unicorn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/evondev/codingui/d13c9311fcf9c7e9414c845e1555938383319e49/public/images/unicorn.png
--------------------------------------------------------------------------------
/public/js/grid.js:
--------------------------------------------------------------------------------
1 | window.addEventListener("load", function () {
2 | const items = document.querySelectorAll(".grid__item");
3 | let x = 0;
4 | let y = 0;
5 | const gap = 0;
6 | const itemPerRow = 7;
7 | const container = document.body.clientWidth - gap * 6;
8 | const itemWidth = Math.ceil(container / itemPerRow);
9 | items.forEach((el) => (el.style.width = itemWidth + "px"));
10 |
11 | for (let index = 0; index < items.length; index++) {
12 | const element = items[index];
13 | element.style.left = x + "px";
14 | element.style.top = y + "px";
15 | if (index > 0 && index < itemPerRow) {
16 | x = x + items[index - 1].offsetWidth + gap;
17 | element.style.left = x + "px";
18 | element.style.top = y + "px";
19 | } else if (index >= itemPerRow) {
20 | x = items[index - itemPerRow].offsetLeft;
21 | y =
22 | items[index - itemPerRow].offsetHeight +
23 | items[index - itemPerRow].offsetTop;
24 | element.style.left = x + "px";
25 | element.style.top = y + gap + "px";
26 | }
27 | }
28 | });
29 |
--------------------------------------------------------------------------------
/public/reset.css:
--------------------------------------------------------------------------------
1 | /* http://meyerweb.com/eric/tools/css/reset/
2 | v2.0 | 20110126
3 | License: none (public domain)
4 | */
5 |
6 | html,
7 | body,
8 | div,
9 | span,
10 | applet,
11 | object,
12 | iframe,
13 | h1,
14 | h2,
15 | h3,
16 | h4,
17 | h5,
18 | h6,
19 | p,
20 | blockquote,
21 | pre,
22 | a,
23 | abbr,
24 | acronym,
25 | address,
26 | big,
27 | cite,
28 | code,
29 | del,
30 | dfn,
31 | em,
32 | img,
33 | ins,
34 | kbd,
35 | q,
36 | s,
37 | samp,
38 | small,
39 | strike,
40 | strong,
41 | sub,
42 | sup,
43 | tt,
44 | var,
45 | b,
46 | u,
47 | i,
48 | center,
49 | dl,
50 | dt,
51 | dd,
52 | ol,
53 | ul,
54 | li,
55 | fieldset,
56 | form,
57 | label,
58 | legend,
59 | table,
60 | caption,
61 | tbody,
62 | tfoot,
63 | thead,
64 | tr,
65 | th,
66 | td,
67 | article,
68 | aside,
69 | canvas,
70 | details,
71 | embed,
72 | figure,
73 | figcaption,
74 | footer,
75 | header,
76 | hgroup,
77 | menu,
78 | nav,
79 | output,
80 | ruby,
81 | section,
82 | summary,
83 | time,
84 | mark,
85 | audio,
86 | video {
87 | margin: 0;
88 | padding: 0;
89 | border: 0;
90 | font-size: 100%;
91 | font: inherit;
92 | vertical-align: baseline;
93 | }
94 | /* HTML5 display-role reset for older browsers */
95 | article,
96 | aside,
97 | details,
98 | figcaption,
99 | figure,
100 | footer,
101 | header,
102 | hgroup,
103 | menu,
104 | nav,
105 | section {
106 | display: block;
107 | }
108 | body {
109 | line-height: 1;
110 | }
111 | ol,
112 | ul {
113 | list-style: none;
114 | }
115 | blockquote,
116 | q {
117 | quotes: none;
118 | }
119 | blockquote:before,
120 | blockquote:after,
121 | q:before,
122 | q:after {
123 | content: "";
124 | content: none;
125 | }
126 | table {
127 | border-collapse: collapse;
128 | border-spacing: 0;
129 | }
130 |
--------------------------------------------------------------------------------
/public/slick.css:
--------------------------------------------------------------------------------
1 | .slick-slider {
2 | position: relative;
3 | }
4 | .slick-list {
5 | overflow: hidden;
6 | }
7 | .slick-track {
8 | display: flex;
9 | justify-content: space-between;
10 | align-items: stretch;
11 | transform: translate3d(0, 0, 0);
12 | -webkit-overflow-scrolling: touch;
13 | -ms-touch-action: pan-y;
14 | touch-action: pan-y;
15 | }
16 |
17 | .slick-track .slick-slide > div {
18 | height: 100%;
19 | }
20 |
21 | .slick-track .slick-slide {
22 | margin: 0 1.5rem;
23 | }
24 |
--------------------------------------------------------------------------------
/public/util.css:
--------------------------------------------------------------------------------
1 | :root {
2 | --primary: #455af7;
3 | --secondary: #13d2b8;
4 | --purple: #bd93f9;
5 | --purple-dark: #6a5af9;
6 | --pink: #ff6bcb;
7 | --blue: #8be9fd;
8 | --danger: #e74c3c;
9 | --green: #00e7af;
10 | --gray: #333;
11 | --font: "Poppins", sans-serif;
12 | --gradient: linear-gradient(40deg, #ff6ec4, #7873f5);
13 | --shadow: 0 0 15px 0 rgba(0, 0, 0, 0.05);
14 | --dark: rgb(15 23 42);
15 | }
16 | *,
17 | *:before,
18 | *:after {
19 | box-sizing: border-box;
20 | }
21 | html {
22 | font-size: 10px;
23 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
24 | scroll-behavior: smooth;
25 | }
26 |
27 | body {
28 | font-family: var(--font);
29 | overflow-x: hidden;
30 | background-color: var(--dark);
31 | font-weight: 300;
32 | font-size: 14px;
33 | overflow-anchor: none;
34 | scroll-behavior: smooth;
35 | line-height: 1.4;
36 | }
37 | body::-webkit-scrollbar {
38 | display: none;
39 | width: 0;
40 | }
41 |
42 | strong {
43 | font-weight: 600;
44 | }
45 |
46 | img {
47 | display: block;
48 | max-width: 100%;
49 | }
50 |
51 | a {
52 | text-decoration: none;
53 | }
54 |
55 | input,
56 | button,
57 | textarea,
58 | select {
59 | font-family: var(--font);
60 | font-size: 1.4rem;
61 | font-weight: 300;
62 | outline: none;
63 | border: 0;
64 | margin: 0;
65 | padding: 0;
66 | border-radius: 0;
67 | -webkit-appearance: none;
68 | }
69 |
70 | button {
71 | cursor: pointer;
72 | }
73 |
74 | @font-face {
75 | font-family: "SF Mono";
76 | src: url("../fonts/SF-Mono-Regular.otf") format("otf");
77 | }
78 | @font-face {
79 | font-family: "SF Mono Light";
80 | src: url("../fonts/SF-Mono-Light.otf") format("otf");
81 | }
82 | .container {
83 | max-width: 1920px;
84 | padding: 0 2rem;
85 | margin: 0 auto;
86 | }
87 | .point-none {
88 | pointer-events: none;
89 | user-select: none;
90 | }
91 | .flex {
92 | display: flex;
93 | }
94 | .align-center {
95 | align-items: center;
96 | }
97 | .justify-between {
98 | justify-content: space-between;
99 | }
100 | input[type="number"]::-webkit-inner-spin-button,
101 | input[type="number"]::-webkit-outer-spin-button {
102 | -webkit-appearance: none;
103 | margin: 0;
104 | }
105 |
--------------------------------------------------------------------------------
/public/vercel.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/server.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const next = require("next");
3 |
4 | const dev = process.env.NODE_ENV !== "production";
5 | const app = next({ dev });
6 | const handle = app.getRequestHandler();
7 |
8 | app
9 | .prepare()
10 | .then(() => {
11 | const server = express();
12 | server.get("*", (req, res) => {
13 | return handle(req, res);
14 | });
15 | server.listen(3001, (err) => {
16 | if (err) throw err;
17 | console.log(`> Ready on http://localhost:3001`);
18 | });
19 | })
20 | .catch((ex) => {
21 | console.error(ex.stack);
22 | process.exit(1);
23 | });
24 |
--------------------------------------------------------------------------------
/styles/FilterStyles.js:
--------------------------------------------------------------------------------
1 | import styled from "styled-components";
2 | export const FilterStyles = styled.div`
3 | padding: 0 20px;
4 | display: flex;
5 | gap: 20px;
6 | flex-flow: row wrap;
7 | justify-content: center;
8 | max-width: 800px;
9 | margin: 0 auto 50px;
10 | .filter-item {
11 | display: inline-block;
12 | padding: 10px 20px;
13 | border-radius: 8px;
14 | line-height: 1;
15 | color: white;
16 | cursor: pointer;
17 | font-size: 16px;
18 | white-space: nowrap;
19 | text-transform: capitalize;
20 | border: 1px solid var(--purple-dark);
21 | font-weight: 500;
22 | &.active {
23 | color: white;
24 | background-image: linear-gradient(to right top, #6a5af9, #d66efd);
25 | border: none;
26 | }
27 | }
28 | @media screen and (max-width: 767px) {
29 | margin-bottom: 30px;
30 | gap: 10px;
31 | .filter-item {
32 | font-size: 14px;
33 | padding: 10px 15px;
34 | }
35 | }
36 | `;
37 |
--------------------------------------------------------------------------------
/styles/FooterStyles.js:
--------------------------------------------------------------------------------
1 | import styled from "styled-components";
2 | export const FooterStyles = styled.footer`
3 | padding: 2rem 0;
4 | text-align: center;
5 | color: #999;
6 | font-size: 1.3rem;
7 | margin-top: 2.5rem;
8 | background-color: white;
9 | display: none;
10 | .heart {
11 | color: #ff7870;
12 | }
13 | a {
14 | color: #ff7870;
15 | }
16 | `;
17 |
--------------------------------------------------------------------------------
/styles/GlobalStyles.js:
--------------------------------------------------------------------------------
1 | import { createGlobalStyle } from "styled-components";
2 |
3 | export const GlobalStyle = createGlobalStyle`
4 |
5 |
6 | `;
7 |
--------------------------------------------------------------------------------
/styles/GridStyles.js:
--------------------------------------------------------------------------------
1 | import styled from "styled-components";
2 | export const GridStyles = styled.div`
3 | --font-code: "SF Mono";
4 | --code-bg: #292e3e;
5 | max-width: 1440px;
6 | margin: 0 auto;
7 | min-height: calc(100vh - 300px);
8 | .grid-layout {
9 | padding: 0 20px;
10 | display: grid;
11 | grid-gap: 30px;
12 | grid-template-columns: minmax(0, 1fr);
13 | @media screen and (min-width: 768px) {
14 | grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
15 | }
16 |
17 | @media screen and (min-width: 1280px) {
18 | grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr);
19 | padding: 0 50px;
20 | }
21 | }
22 | .grid-column {
23 | display: flex;
24 | flex-direction: column;
25 | }
26 | .grid-item {
27 | margin-bottom: 30px;
28 | background-color: #323a46;
29 | padding: 20px 20px;
30 | border-radius: 8px;
31 | }
32 | .grid-header {
33 | margin-bottom: 20px;
34 | display: flex;
35 | align-items: center;
36 | justify-content: space-between;
37 | }
38 | .grid-name {
39 | color: white;
40 | font-size: 16px;
41 | font-weight: 500;
42 | display: -webkit-box;
43 | -webkit-line-clamp: 1;
44 | -webkit-box-orient: vertical;
45 | overflow: hidden;
46 | text-overflow: ellipsis;
47 | width: 100%;
48 | max-width: 100%;
49 | }
50 |
51 | .grid-footer {
52 | display: grid;
53 | grid-template-columns: repeat(3, 1fr);
54 | grid-gap: 0 20px;
55 | }
56 | .grid-copy {
57 | padding: 10px;
58 | background-color: #b5b5b5;
59 | border-radius: 4px;
60 | color: white;
61 | font-weight: 500;
62 | font-size: 13px;
63 | transition: all 0.25s ease-in;
64 | @media screen and (max-width: 767px) {
65 | font-size: 11px;
66 | }
67 | }
68 | .grid-copy--html:hover {
69 | background-color: #1c55e8;
70 | }
71 | .grid-copy--css:hover {
72 | background-color: #eb6215;
73 | }
74 | .grid-copy--js:hover {
75 | background-color: #ffb86c;
76 | }
77 | .grid-view {
78 | flex-shrink: 0;
79 | background-image: linear-gradient(to right top, #6a5af9, #d66efd);
80 | }
81 | .grid-result {
82 | margin: 0 auto 30px;
83 | }
84 | .grid__desc {
85 | font-size: 1.6rem;
86 | color: #333;
87 | margin-bottom: 2.5rem;
88 | line-height: 1.6;
89 | }
90 | .grid__header {
91 | display: flex;
92 | justify-content: space-between;
93 | align-items: flex-end;
94 | margin-bottom: 1rem;
95 | }
96 | .grid__copies {
97 | white-space: nowrap;
98 | }
99 | .grid__copy {
100 | cursor: pointer;
101 | color: #999;
102 | font-size: 12px;
103 | padding: 1rem;
104 | display: inline-block;
105 | font-weight: normal;
106 | transition: 0.2s linear;
107 | }
108 | .grid__bottom {
109 | margin-top: 1.5rem;
110 | }
111 | .grid__show {
112 | margin-left: auto;
113 | }
114 | .grid__show,
115 | .grid__edit {
116 | display: flex;
117 | font-size: 12px;
118 | justify-content: flex-end;
119 | margin-left: auto;
120 | width: max-content;
121 | padding: 1rem;
122 | cursor: pointer;
123 | border-radius: 4px;
124 | border: 1px solid #eee;
125 | /* background-color: #eee; */
126 | color: #ccc;
127 | &.active {
128 | background-color: var(--purple);
129 | color: white;
130 | }
131 | }
132 | .grid__edit {
133 | margin-left: 1rem;
134 | border-radius: 4px;
135 | justify-content: center;
136 | align-items: center;
137 | &.active {
138 | background-color: var(--purple);
139 | color: white;
140 | }
141 | }
142 | .grid__code {
143 | margin-top: 2rem;
144 | max-height: 20rem;
145 | overflow: auto;
146 | &.edit {
147 | overflow: hidden;
148 | }
149 |
150 | &::-webkit-scrollbar {
151 | width: 5px;
152 | height: 5px;
153 | }
154 |
155 | &::-webkit-scrollbar-track {
156 | border-radius: 5rem;
157 | background-color: #eee;
158 | }
159 |
160 | &::-webkit-scrollbar-thumb {
161 | background-color: #ccc;
162 | border-radius: 5rem;
163 | }
164 | textarea {
165 | font-family: "SF Mono", "Roboto Mono", Arial, Helvetica, sans-serif !important;
166 | font-weight: 400 !important;
167 | font-size: 14px !important;
168 | line-height: 1.6 !important;
169 | resize: none !important;
170 | width: 100% !important;
171 | height: 20rem !important;
172 | padding: 0.5em !important;
173 | background: rgb(248, 248, 255) !important;
174 | border: 0 !important;
175 | border-radius: 0 !important;
176 | display: block !important;
177 | opacity: 1 !important;
178 | visibility: visible !important;
179 | position: unset !important;
180 | color: #333 !important;
181 | white-space: pre !important;
182 | &::-webkit-scrollbar {
183 | width: 5px;
184 | height: 5px;
185 | }
186 |
187 | &::-webkit-scrollbar-track {
188 | border-radius: 5rem;
189 | background-color: #eee;
190 | }
191 |
192 | &::-webkit-scrollbar-thumb {
193 | background-color: #ccc;
194 | border-radius: 5rem;
195 | }
196 | }
197 | }
198 |
199 | .grid pre[class*="language-"] {
200 | background-color: var(--code-bg) !important;
201 | }
202 | .grid code[class*="language-"],
203 | .grid pre {
204 | font-family: "SF Mono", "Roboto Mono", Arial, Helvetica, sans-serif;
205 | font-weight: 400;
206 | font-size: 14px;
207 | line-height: 1.6;
208 | max-width: 100%;
209 | &::-webkit-scrollbar {
210 | display: none;
211 | width: 0;
212 | }
213 | }
214 | @media screen and (max-width: 767px) {
215 | .grid__column {
216 | margin-bottom: 0;
217 | }
218 | .grid-item {
219 | margin-bottom: 3rem;
220 | }
221 | }
222 | .momo {
223 | background-color: #ae2170;
224 | padding: 20px;
225 | .grid__header {
226 | display: none;
227 | }
228 | }
229 | .discount {
230 | padding: 0;
231 | border-radius: 8px;
232 | overflow: hidden;
233 | font-family: "Montserrat", sans-serif;
234 | box-shadow: var(--shadow);
235 | &-media {
236 | display: flex;
237 | align-items: center;
238 | justify-content: center;
239 | flex-direction: column;
240 | border-right: 1px dashed #eee;
241 | padding-right: 30px;
242 | }
243 | &-banner {
244 | width: 120px;
245 | height: 120px;
246 | object-fit: cover;
247 | border-radius: 50rem;
248 | }
249 | &-title {
250 | font-weight: bold;
251 | margin-top: 20px;
252 | font-size: 18px;
253 | color: #404d91;
254 | }
255 | &-layout {
256 | display: grid;
257 | grid-template-columns: auto 1fr;
258 | grid-gap: 0;
259 | align-items: center;
260 | padding: 30px;
261 | }
262 | &-number {
263 | font-size: 40px;
264 | font-weight: 600;
265 | margin-bottom: 30px;
266 | text-align: right;
267 | color: #404d91;
268 | }
269 | &-promote {
270 | display: flex;
271 | justify-content: flex-end;
272 | align-items: center;
273 | color: #cbcfdc;
274 | font-size: 20px;
275 | }
276 | &-text {
277 | color: #404d91;
278 | font-size: 18px;
279 | margin-right: 10px;
280 | font-weight: 500;
281 | }
282 | &-code {
283 | padding: 15px 30px;
284 | color: #ff442c;
285 | text-transform: uppercase;
286 | font-size: 25px;
287 | font-weight: 600;
288 | background-color: #ffece9;
289 | border-radius: 100rem;
290 | margin-left: 20px;
291 | }
292 | &-info {
293 | padding-left: 30px;
294 | }
295 | &-buy {
296 | display: block;
297 | margin-left: auto;
298 | margin-top: 30px;
299 | padding: 15px;
300 | color: white;
301 | text-transform: uppercase;
302 | font-size: 18px;
303 | background-image: linear-gradient(to right, #37ccff, #7b22ff);
304 | border-radius: 4px;
305 | font-family: "Montserrat", sans-serif;
306 | font-weight: 600;
307 | }
308 | .grid__header {
309 | display: none;
310 | }
311 | @media screen and (max-width: 767px) {
312 | &-layout {
313 | grid-template-columns: 100%;
314 | }
315 | &-info {
316 | margin-top: 30px;
317 | padding-left: 0;
318 | }
319 | &-media {
320 | border-right: 0;
321 | padding-right: 0;
322 | }
323 | &-number,
324 | &-promote {
325 | justify-content: center;
326 | text-align: center;
327 | }
328 | }
329 | }
330 | /* Modal Code */
331 | @import url("https://fonts.googleapis.com/css2?family=Roboto+Mono:wght@400;500&display=swap");
332 | .modal-code-heading {
333 | display: inline-block;
334 | font-size: 16px;
335 | font-weight: 600;
336 | margin-bottom: 20px;
337 | color: white;
338 | }
339 | .modal-code {
340 | margin-top: 50px;
341 | }
342 | .modal-code pre {
343 | padding: 20px !important;
344 | font-family: "Roboto Mono", monospace;
345 | font-weight: 500;
346 | }
347 | @media screen and (max-width: 1023.98px) {
348 | .modal-code {
349 | margin-top: 20px;
350 | }
351 | .modal-code-heading {
352 | margin-bottom: 10px;
353 | }
354 | .modal-code pre {
355 | padding: 15px !important;
356 | font-size: 12px;
357 | }
358 | .grid-course {
359 | display: grid;
360 | justify-content: flex-start;
361 | grid-auto-columns: 320px;
362 | grid-auto-flow: column;
363 | grid-gap: 30px;
364 | overflow: auto;
365 | overflow-y: hidden;
366 | scroll-snap-type: x mandatory;
367 | scroll-snap-stop: always;
368 | -ms-touch-action: manipulation;
369 | touch-action: manipulation;
370 | -webkit-overflow-scrolling: touch;
371 | scroll-padding: 1rem;
372 | grid-template-columns: unset;
373 | }
374 | .grid-course::-webkit-scrollbar {
375 | display: none;
376 | width: 0;
377 | }
378 | .grid-course > * {
379 | scroll-snap-align: start;
380 | }
381 | }
382 | `;
383 |
--------------------------------------------------------------------------------
/styles/HeaderStyles.js:
--------------------------------------------------------------------------------
1 | import styled from "styled-components";
2 | export const HeaderStyles = styled.header`
3 | padding: 5rem 0 2.5rem;
4 | text-align: center;
5 | .love {
6 | position: fixed;
7 | right: 3rem;
8 | bottom: 3rem;
9 | z-index: 99;
10 | display: flex;
11 | flex-flow: column nowrap;
12 | align-items: center;
13 | &-count {
14 | color: #999;
15 | display: inline-block;
16 | margin-bottom: 5px;
17 | font-size: 14px;
18 | }
19 | &-icon {
20 | position: relative;
21 | width: 50px;
22 | height: 50px;
23 | display: flex;
24 | align-items: center;
25 | justify-content: center;
26 | border-radius: 50px;
27 | cursor: pointer;
28 | color: rgb(226, 45, 72);
29 | background-color: white;
30 | box-shadow: 0 0 20px -10px rgba(0, 0, 0, 0.2);
31 | i {
32 | pointer-events: none;
33 | }
34 | &.active {
35 | animation: clicked 0.05s forwards alternate 1 linear;
36 | }
37 | }
38 | &-heart {
39 | position: absolute;
40 | top: 50%;
41 | left: 50%;
42 | transform: translate(-50%, -50%);
43 | &.active {
44 | animation: loveFly 0.25s forwards 1 linear;
45 | }
46 | }
47 | }
48 | @keyframes loveFly {
49 | to {
50 | transform: translate(-50%, -10rem);
51 | opacity: 0;
52 | }
53 | }
54 | @keyframes clicked {
55 | from {
56 | transform: scale(1) translateY(0);
57 | }
58 | to {
59 | transform: scale(0.9) translateY(5px);
60 | }
61 | }
62 |
63 | .heading {
64 | text-transform: uppercase;
65 | font-weight: bold;
66 | font-size: 50px;
67 | color: white;
68 | letter-spacing: 1.5px;
69 | }
70 | .heading strong {
71 | font-weight: 800;
72 | color: transparent;
73 | background-clip: text;
74 | -webkit-background-clip: text;
75 | background-size: 400% 400%;
76 | background-image: linear-gradient(to right, #ffb4dc, #6a5af9);
77 | }
78 | @media screen and (max-width: 767px) {
79 | padding-top: 25px;
80 | padding-bottom: 15px;
81 | .logo {
82 | max-width: 50px;
83 | margin-bottom: 10px;
84 | margin-left: auto;
85 | margin-right: auto;
86 | }
87 | .heading {
88 | font-size: 30px;
89 | }
90 | }
91 | `;
92 |
--------------------------------------------------------------------------------
/styles/Theme.js:
--------------------------------------------------------------------------------
1 | export const theme = {
2 | primary: "#08aeea",
3 | secondary: "#13D2B8",
4 | font: "Montserrat",
5 | };
6 |
--------------------------------------------------------------------------------
/styles/UIStyles.js:
--------------------------------------------------------------------------------
1 | import styled from "styled-components";
2 | export const UIStyles = styled.div`
3 | .input-button {
4 | display: flex;
5 | width: 100%;
6 | }
7 | .input-button input {
8 | flex: 1;
9 | padding: 1rem;
10 | }
11 | .input-button button {
12 | background-color: #292e3e;
13 | color: white;
14 | padding: 1rem 2rem;
15 | }
16 |
17 | .gradient-button {
18 | padding: 1.5rem 2rem;
19 | border-radius: 4px;
20 | color: white;
21 | font-size: 1.6rem;
22 | text-transform: uppercase;
23 | width: 100%;
24 | font-weight: bold;
25 | cursor: pointer;
26 | outline: none;
27 | font-family: ${(props) => props.theme.font}, sans-serif;
28 | background-image: linear-gradient(
29 | to right,
30 | ${(props) => props.theme.primary},
31 | ${(props) => props.theme.secondary}
32 | );
33 | }
34 | `;
35 |
--------------------------------------------------------------------------------
/styles/sass/main.scss:
--------------------------------------------------------------------------------
1 | .e-flex-item {
2 | height: 50px;
3 | border-radius: 8px;
4 | background-color: #a2cbfa;
5 | border: 1px solid #4390e1;
6 | box-sizing: border-box;
7 | box-shadow: 0 2px 2px rgb(0 90 250 / 5%), 0 4px 4px rgb(0 90 250 / 5%),
8 | 0 8px 8px rgb(0 90 250 / 5%), 0 16px 16px rgb(0 90 250 / 5%);
9 | }
10 | .header-logo {
11 | display: block;
12 | max-width: 100px;
13 | margin: 0 auto 20px;
14 | }
15 | .sweet-noti {
16 | padding: 5px;
17 | background-color: white;
18 | box-shadow: 0px 2px 7px rgba(63, 63, 122, 0.1);
19 | border-radius: 8px;
20 | position: fixed;
21 | top: 1rem;
22 | right: 1rem;
23 | z-index: 100000;
24 | display: flex;
25 | align-items: center;
26 | transition: 0.2s linear;
27 | animation: fadeAlert 2s forwards 1 linear;
28 | color: #13d2b8;
29 | @media screen and (max-width: 767px) {
30 | width: auto;
31 | left: 1rem;
32 | right: 1rem;
33 | top: 1rem;
34 | padding: 1.5rem;
35 | }
36 | }
37 | i.sweet-noti__icon {
38 | font-size: 20px;
39 | width: 40px;
40 | height: 40px;
41 | border-radius: 8px;
42 | flex-shrink: 0;
43 | background-color: rgba(0, 255, 56, 0.1);
44 | display: flex;
45 | align-items: center;
46 | justify-content: center;
47 | color: var(--green);
48 | }
49 | .sweet-noti__title {
50 | font-weight: 500;
51 | font-size: 14px;
52 | color: #253b4f;
53 | padding: 0 10px;
54 | }
55 |
56 | @keyframes fadeAlert {
57 | 0% {
58 | opacity: 0;
59 | visibility: hidden;
60 | }
61 | 10%,
62 | 90% {
63 | opacity: 1;
64 | visibility: visible;
65 | }
66 | 100% {
67 | opacity: 0;
68 | visibility: hidden;
69 | }
70 | }
71 |
72 | .back-to-top {
73 | width: 50px;
74 | height: 50px;
75 | position: fixed;
76 | left: 30px;
77 | bottom: 30px;
78 | z-index: 10;
79 | background-color: #ff7870;
80 | display: flex;
81 | align-items: center;
82 | justify-content: center;
83 | font-size: 20px;
84 | color: white;
85 | opacity: 0.5;
86 | &:hover {
87 | opacity: 1;
88 | }
89 | }
90 |
--------------------------------------------------------------------------------
/vendors/fire.js:
--------------------------------------------------------------------------------
1 | import Rebase from "re-base";
2 | import firebase from "firebase";
3 |
4 | const firebaseApp = !firebase.apps.length
5 | ? firebase.initializeApp({
6 | apiKey: "AIzaSyA_laQsMy1Cwrr6PXDhYulmuyJqK7GwUPk",
7 | authDomain: "codingui-bdd21.firebaseapp.com",
8 | databaseURL: "https://codingui-bdd21.firebaseio.com",
9 | projectId: "codingui-bdd21",
10 | storageBucket: "codingui-bdd21.appspot.com",
11 | messagingSenderId: "949549299875",
12 | appId: "1:949549299875:web:86678c9e445949ae3a6716",
13 | })
14 | : firebase.app();
15 |
16 | const fire = Rebase.createClass(firebaseApp.database());
17 |
18 | export { firebaseApp };
19 |
20 | export default fire;
21 |
--------------------------------------------------------------------------------