├── .expo-shared
└── assets.json
├── .github
└── desgincode_mockup.jpg
├── .gitignore
├── App.js
├── LICENSE
├── README.md
├── app.json
├── assets
├── avatar-default.jpg
├── avatar.jpg
├── background1.jpg
├── background10.jpg
├── background11.jpg
├── background12.jpg
├── background13.jpg
├── background14.jpg
├── background15.jpg
├── background16.jpg
├── background2.jpg
├── background3.jpg
├── background4.jpg
├── background5.jpg
├── background6.jpg
├── background7.jpg
├── background8.jpg
├── background9.jpg
├── icon-courses.svg
├── icon-email-active.png
├── icon-email-animated.gif
├── icon-email.png
├── icon-home.svg
├── icon-light.svg
├── icon-logout.svg
├── icon-menu.svg
├── icon-night.svg
├── icon-notifications.svg
├── icon-password-active.png
├── icon-password-animated.gif
├── icon-password.png
├── icon-play.svg
├── icon-refresh.svg
├── icon-star.svg
├── icon.png
├── logo-dc.png
├── logo-figma.png
├── logo-framerx.png
├── logo-invision.png
├── logo-react.png
├── logo-sketch.png
├── logo-studio.png
├── logo-swift.png
├── logo-vue.png
├── logo-xcode.png
├── logo-xd.png
├── lottie-ae.json
├── lottie-checked-done.json
├── lottie-glow-loading.json
├── lottie-loading-double.json
├── lottie-loading-fluid.json
├── lottie-loading-text.json
├── lottie-loading.json
├── lottie-preloader.json
└── splash.png
├── babel.config.js
├── package.json
├── src
├── components
│ ├── Avatar
│ │ ├── index.js
│ │ └── styles.js
│ ├── Card
│ │ ├── index.js
│ │ └── styles.js
│ ├── Course
│ │ ├── index.js
│ │ └── styles.js
│ ├── CourseSection
│ │ ├── index.js
│ │ └── styles.js
│ ├── CoursesList
│ │ ├── index.js
│ │ └── styles.js
│ ├── Icons
│ │ └── index.js
│ ├── Loading
│ │ ├── index.js
│ │ └── styles.js
│ ├── Logo
│ │ ├── index.js
│ │ └── styles.js
│ ├── Menu
│ │ ├── index.js
│ │ └── styles.js
│ ├── MenuItem
│ │ ├── index.js
│ │ └── styles.js
│ ├── ModalLogin
│ │ ├── index.js
│ │ └── styles.js
│ ├── NotificationButton
│ │ ├── index.js
│ │ └── styles.js
│ ├── Notifications
│ │ ├── index.js
│ │ └── styles.js
│ ├── Project
│ │ ├── index.js
│ │ └── styles.js
│ └── Success
│ │ ├── index.js
│ │ └── styles.js
├── config
│ └── ReactotronConfig.js
├── data
│ ├── cards.js
│ ├── courses.js
│ ├── logos.js
│ ├── notifications.js
│ └── projects.js
├── firebase.js
├── navigator
│ ├── CoursesStack.js
│ ├── HomeStack.js
│ ├── ProjectsStack.js
│ └── index.js
├── screens
│ ├── Courses
│ │ ├── index.js
│ │ └── styles.js
│ ├── Home
│ │ ├── index.js
│ │ └── styles.js
│ ├── Projects
│ │ ├── index.js
│ │ └── styles.js
│ ├── Section
│ │ ├── index.js
│ │ └── styles.js
│ └── Video
│ │ ├── index.js
│ │ └── styles.js
├── services
│ └── api.js
└── store
│ ├── actions
│ └── AppActions.js
│ ├── index.js
│ └── reducers
│ ├── AppReducer.js
│ └── index.js
├── yarn-error.log
└── yarn.lock
/.expo-shared/assets.json:
--------------------------------------------------------------------------------
1 | {
2 | "12bb71342c6255bbf50437ec8f4441c083f47cdb74bd89160c15e4f43e52a1cb": true,
3 | "40b842e832070c58deac6aa9e08fa459302ee3f9da492c7e77d93d2fbf4a56fd": true
4 | }
5 |
--------------------------------------------------------------------------------
/.github/desgincode_mockup.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/.github/desgincode_mockup.jpg
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/**/*
2 | .expo/*
3 | npm-debug.*
4 | *.jks
5 | *.p8
6 | *.p12
7 | *.key
8 | *.mobileprovision
9 | *.orig.*
10 | web-build/
11 |
12 | # macOS
13 | .DS_Store
14 |
--------------------------------------------------------------------------------
/App.js:
--------------------------------------------------------------------------------
1 | if (__DEV__) {
2 | import("./src/config/ReactotronConfig").then(() =>
3 | console.log("Reactotron Configured")
4 | );
5 | }
6 |
7 | import React from "react";
8 | import { StatusBar } from "react-native";
9 | import { Provider } from "react-redux";
10 | import ApolloClient from "apollo-boost";
11 | import { ApolloProvider } from "@apollo/react-hooks";
12 | import { PersistGate } from "redux-persist/integration/react";
13 | import { persistor, store } from "./src/store";
14 | import Navigator from "./src/navigator";
15 |
16 | const client = new ApolloClient({
17 | uri: "https://graphql.contentful.com/content/v1/spaces/ldcl3ayg0mhx",
18 | credentials: "same-origin",
19 | headers: {
20 | Authorization: `Bearer 93f3808c25c1f5bdb95476ca8576c6eaa12b5587efb956efb242ceead7cb3840`,
21 | },
22 | });
23 |
24 | export default function App() {
25 | return (
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 | );
35 | }
36 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Daniel Sousa
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6 |
7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8 |
9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | DesignCode
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | Tecnologias |
11 | Projeto |
12 | Como contribuir |
13 | Licença
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | ## :rocket: Tecnologias
23 |
24 | Esse projeto foi desenvolvido com as seguintes tecnologias:
25 |
26 | - [Javascript](https://www.javascript.com/)
27 | - [Expo](https://expo.io/)
28 | - [React Native](https://facebook.github.io/react-native/)
29 | - [Styled Components](https://styled-components.com/)
30 |
31 | ## 💻 Projeto
32 |
33 | O DesignCode App é um projeto criado exclusivamente para fins acadêmicos a fim de se aplicar conteitos de estilização e animação com React Native.
34 | [Demo](https://www.linkedin.com/posts/danielsousast_reactnative-activity-6686690365832994816-CnhL)
35 |
36 | ## 🤔 Como contribuir
37 |
38 | - Faça um fork desse repositório;
39 | - Cria uma branch com a sua feature: `git checkout -b minha-feature`;
40 | - Faça commit das suas alterações: `git commit -m 'feat: Minha nova feature'`;
41 | - Faça push para a sua branch: `git push origin minha-feature`.
42 |
43 | Depois que o merge da sua pull request for feito, você pode deletar a sua branch.
44 |
45 | ## :memo: Licença
46 |
47 | Esse projeto está sob a licença MIT. Veja o arquivo [LICENSE](LICENSE) para mais detalhes.
48 |
49 | ---
50 |
51 | Feito por Daniel Sousa :wave: [LikedIn](https://www.linkedin.com/in/danielsousast/)
52 |
--------------------------------------------------------------------------------
/app.json:
--------------------------------------------------------------------------------
1 | {
2 | "expo": {
3 | "name": "designcode-app",
4 | "slug": "designcode-app",
5 | "version": "1.0.0",
6 | "orientation": "portrait",
7 | "icon": "./assets/icon.png",
8 | "splash": {
9 | "image": "./assets/splash.png",
10 | "resizeMode": "contain",
11 | "backgroundColor": "#f0f3f5"
12 | },
13 | "updates": {
14 | "fallbackToCacheTimeout": 0
15 | },
16 | "assetBundlePatterns": [
17 | "**/*"
18 | ],
19 | "ios": {
20 | "supportsTablet": true
21 | },
22 | "web": {
23 | "favicon": "./assets/favicon.png"
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/assets/avatar-default.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/avatar-default.jpg
--------------------------------------------------------------------------------
/assets/avatar.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/avatar.jpg
--------------------------------------------------------------------------------
/assets/background1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/background1.jpg
--------------------------------------------------------------------------------
/assets/background10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/background10.jpg
--------------------------------------------------------------------------------
/assets/background11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/background11.jpg
--------------------------------------------------------------------------------
/assets/background12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/background12.jpg
--------------------------------------------------------------------------------
/assets/background13.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/background13.jpg
--------------------------------------------------------------------------------
/assets/background14.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/background14.jpg
--------------------------------------------------------------------------------
/assets/background15.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/background15.jpg
--------------------------------------------------------------------------------
/assets/background16.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/background16.jpg
--------------------------------------------------------------------------------
/assets/background2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/background2.jpg
--------------------------------------------------------------------------------
/assets/background3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/background3.jpg
--------------------------------------------------------------------------------
/assets/background4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/background4.jpg
--------------------------------------------------------------------------------
/assets/background5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/background5.jpg
--------------------------------------------------------------------------------
/assets/background6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/background6.jpg
--------------------------------------------------------------------------------
/assets/background7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/background7.jpg
--------------------------------------------------------------------------------
/assets/background8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/background8.jpg
--------------------------------------------------------------------------------
/assets/background9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/background9.jpg
--------------------------------------------------------------------------------
/assets/icon-courses.svg:
--------------------------------------------------------------------------------
1 |
13 |
--------------------------------------------------------------------------------
/assets/icon-email-active.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/icon-email-active.png
--------------------------------------------------------------------------------
/assets/icon-email-animated.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/icon-email-animated.gif
--------------------------------------------------------------------------------
/assets/icon-email.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/icon-email.png
--------------------------------------------------------------------------------
/assets/icon-home.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/assets/icon-light.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/assets/icon-logout.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/assets/icon-menu.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/assets/icon-night.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/assets/icon-notifications.svg:
--------------------------------------------------------------------------------
1 |
12 |
--------------------------------------------------------------------------------
/assets/icon-password-active.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/icon-password-active.png
--------------------------------------------------------------------------------
/assets/icon-password-animated.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/icon-password-animated.gif
--------------------------------------------------------------------------------
/assets/icon-password.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/icon-password.png
--------------------------------------------------------------------------------
/assets/icon-play.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/assets/icon-refresh.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/assets/icon-star.svg:
--------------------------------------------------------------------------------
1 |
11 |
--------------------------------------------------------------------------------
/assets/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/icon.png
--------------------------------------------------------------------------------
/assets/logo-dc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/logo-dc.png
--------------------------------------------------------------------------------
/assets/logo-figma.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/logo-figma.png
--------------------------------------------------------------------------------
/assets/logo-framerx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/logo-framerx.png
--------------------------------------------------------------------------------
/assets/logo-invision.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/logo-invision.png
--------------------------------------------------------------------------------
/assets/logo-react.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/logo-react.png
--------------------------------------------------------------------------------
/assets/logo-sketch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/logo-sketch.png
--------------------------------------------------------------------------------
/assets/logo-studio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/logo-studio.png
--------------------------------------------------------------------------------
/assets/logo-swift.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/logo-swift.png
--------------------------------------------------------------------------------
/assets/logo-vue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/logo-vue.png
--------------------------------------------------------------------------------
/assets/logo-xcode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/logo-xcode.png
--------------------------------------------------------------------------------
/assets/logo-xd.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/logo-xd.png
--------------------------------------------------------------------------------
/assets/lottie-ae.json:
--------------------------------------------------------------------------------
1 | {
2 | "v": "5.5.0",
3 | "fr": 29.9700012207031,
4 | "ip": 0,
5 | "op": 30.0000012219251,
6 | "w": 200,
7 | "h": 200,
8 | "nm": "Comp 1",
9 | "ddd": 0,
10 | "assets": [],
11 | "layers": [
12 | {
13 | "ddd": 0,
14 | "ind": 1,
15 | "ty": 4,
16 | "nm": "Shape Layer 1",
17 | "sr": 1,
18 | "ks": {
19 | "o": { "a": 0, "k": 100, "ix": 11 },
20 | "r": { "a": 0, "k": 0, "ix": 10 },
21 | "p": { "a": 0, "k": [104.25, 162.5, 0], "ix": 2 },
22 | "a": { "a": 0, "k": [0, 0, 0], "ix": 1 },
23 | "s": { "a": 0, "k": [100, 100, 100], "ix": 6 }
24 | },
25 | "ao": 0,
26 | "shapes": [
27 | {
28 | "ty": "gr",
29 | "it": [
30 | {
31 | "ty": "rc",
32 | "d": 1,
33 | "s": {
34 | "a": 1,
35 | "k": [
36 | {
37 | "i": { "x": [0.667, 0.667], "y": [1, 1] },
38 | "o": { "x": [0.069, 0.228], "y": [1.643, 2.198] },
39 | "t": 0,
40 | "s": [30, 30]
41 | },
42 | { "t": 14.0000005702317, "s": [100, 130] }
43 | ],
44 | "ix": 2
45 | },
46 | "p": { "a": 0, "k": [0, 0], "ix": 3 },
47 | "r": {
48 | "a": 1,
49 | "k": [
50 | {
51 | "i": { "x": [0.833], "y": [0.833] },
52 | "o": { "x": [0.167], "y": [0.167] },
53 | "t": 0,
54 | "s": [100]
55 | },
56 | { "t": 14.0000005702317, "s": [10] }
57 | ],
58 | "ix": 4
59 | },
60 | "nm": "Rectangle Path 1",
61 | "mn": "ADBE Vector Shape - Rect",
62 | "hd": false
63 | },
64 | {
65 | "ty": "st",
66 | "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 3 },
67 | "o": { "a": 0, "k": 100, "ix": 4 },
68 | "w": { "a": 0, "k": 0, "ix": 5 },
69 | "lc": 1,
70 | "lj": 1,
71 | "ml": 4,
72 | "bm": 0,
73 | "nm": "Stroke 1",
74 | "mn": "ADBE Vector Graphic - Stroke",
75 | "hd": false
76 | },
77 | {
78 | "ty": "fl",
79 | "c": {
80 | "a": 1,
81 | "k": [
82 | {
83 | "i": { "x": [0.833], "y": [0.833] },
84 | "o": { "x": [0.167], "y": [0.167] },
85 | "t": 0,
86 | "s": [1, 1, 1, 1]
87 | },
88 | { "t": 14.0000005702317, "s": [0, 0, 0, 1] }
89 | ],
90 | "ix": 4
91 | },
92 | "o": { "a": 0, "k": 100, "ix": 5 },
93 | "r": 1,
94 | "bm": 0,
95 | "nm": "Fill 1",
96 | "mn": "ADBE Vector Graphic - Fill",
97 | "hd": false
98 | },
99 | {
100 | "ty": "tr",
101 | "p": { "a": 0, "k": [-4.722, -49.092], "ix": 2 },
102 | "a": { "a": 0, "k": [0, 0], "ix": 1 },
103 | "s": { "a": 0, "k": [100, 100], "ix": 3 },
104 | "r": { "a": 0, "k": 0, "ix": 6 },
105 | "o": { "a": 0, "k": 100, "ix": 7 },
106 | "sk": { "a": 0, "k": 0, "ix": 4 },
107 | "sa": { "a": 0, "k": 0, "ix": 5 },
108 | "nm": "Transform"
109 | }
110 | ],
111 | "nm": "Rectangle 1",
112 | "np": 3,
113 | "cix": 2,
114 | "bm": 0,
115 | "ix": 1,
116 | "mn": "ADBE Vector Group",
117 | "hd": false
118 | }
119 | ],
120 | "ip": 0,
121 | "op": 30.0000012219251,
122 | "st": 0,
123 | "bm": 0
124 | }
125 | ],
126 | "markers": []
127 | }
128 |
--------------------------------------------------------------------------------
/assets/lottie-checked-done.json:
--------------------------------------------------------------------------------
1 | {"v":"4.6.3","fr":24,"ip":0,"op":21,"w":320,"h":320,"nm":"checklist","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 13","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":300},"p":{"a":0,"k":[160,159.5,0]},"a":{"a":0,"k":[0,-34,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p667_1_0p167_0p167","0p667_1_0p167_0p167"],"t":6,"s":[15.021,15.021],"e":[0,0]},{"t":17}]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":6,"s":[0.0823529,0.6784314,0.3843137,1],"e":[0,0.7921569,0.4470588,1]},{"t":17}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p667_1_0p167_0p167","t":6,"s":[-8.142,-92.147],"e":[-7.675,-162.544],"to":[0.07779947668314,-11.7327470779419],"ti":[-0.07779947668314,11.7327470779419]},{"t":17}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[83.981,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p667_1_0p167_0p167"],"t":6,"s":[20.367],"e":[6.367]},{"t":17}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 2","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":6,"s":[15.021,15.021],"e":[0,0]},{"t":21}]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":6,"s":[0.0823529,0.6784314,0.3843137,1],"e":[0,0.9070925,0.5119235,1]},{"t":17}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":6,"s":[16.585,-99.759],"e":[28.521,-187.495],"to":[1.9892578125,-14.6227216720581],"ti":[-1.9892578125,14.6227216720581]},{"t":21}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[97.419,116],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":6,"s":[14.733],"e":[8.733]},{"t":21}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":2,"mn":"ADBE Vector Group"}],"ip":6,"op":22,"st":-21,"bm":0,"sr":1},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 12","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":250},"p":{"a":0,"k":[160,159.5,0]},"a":{"a":0,"k":[0,-34,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p667_1_0p167_0p167","0p667_1_0p167_0p167"],"t":6,"s":[15.021,15.021],"e":[0,0]},{"t":17}]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":6,"s":[0.0823529,0.6784314,0.3843137,1],"e":[0,0.7921569,0.4470588,1]},{"t":17}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p667_1_0p167_0p167","t":6,"s":[-8.142,-92.147],"e":[-7.675,-162.544],"to":[0.07779947668314,-11.7327470779419],"ti":[-0.07779947668314,11.7327470779419]},{"t":17}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[83.981,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p667_1_0p167_0p167"],"t":6,"s":[20.367],"e":[6.367]},{"t":17}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 2","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":6,"s":[15.021,15.021],"e":[0,0]},{"t":21}]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":6,"s":[0.0823529,0.6784314,0.3843137,1],"e":[0,0.9070925,0.5119235,1]},{"t":17}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":6,"s":[16.585,-99.759],"e":[28.521,-187.495],"to":[1.9892578125,-14.6227216720581],"ti":[-1.9892578125,14.6227216720581]},{"t":21}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[97.419,116],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":6,"s":[14.733],"e":[8.733]},{"t":21}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":2,"mn":"ADBE Vector Group"}],"ip":6,"op":22,"st":-21,"bm":0,"sr":1},{"ddd":0,"ind":4,"ty":4,"nm":"Shape Layer 11","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":200},"p":{"a":0,"k":[160,159.5,0]},"a":{"a":0,"k":[0,-34,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p667_1_0p167_0p167","0p667_1_0p167_0p167"],"t":6,"s":[15.021,15.021],"e":[0,0]},{"t":17}]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":6,"s":[0.0823529,0.6784314,0.3843137,1],"e":[0,0.7921569,0.4470588,1]},{"t":17}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p667_1_0p167_0p167","t":6,"s":[-8.142,-92.147],"e":[-7.675,-162.544],"to":[0.07779947668314,-11.7327470779419],"ti":[-0.07779947668314,11.7327470779419]},{"t":17}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[83.981,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p667_1_0p167_0p167"],"t":6,"s":[20.367],"e":[6.367]},{"t":17}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 2","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":6,"s":[15.021,15.021],"e":[0,0]},{"t":21}]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":6,"s":[0.0823529,0.6784314,0.3843137,1],"e":[0,0.9070925,0.5119235,1]},{"t":17}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":6,"s":[16.585,-99.759],"e":[28.521,-187.495],"to":[1.9892578125,-14.6227216720581],"ti":[-1.9892578125,14.6227216720581]},{"t":21}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[97.419,116],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":6,"s":[14.733],"e":[8.733]},{"t":21}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":2,"mn":"ADBE Vector Group"}],"ip":6,"op":22,"st":-21,"bm":0,"sr":1},{"ddd":0,"ind":5,"ty":4,"nm":"Shape Layer 10","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":150},"p":{"a":0,"k":[160,159.5,0]},"a":{"a":0,"k":[0,-34,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p667_1_0p167_0p167","0p667_1_0p167_0p167"],"t":6,"s":[15.021,15.021],"e":[0,0]},{"t":17}]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":6,"s":[0.0823529,0.6784314,0.3843137,1],"e":[0,0.7921569,0.4470588,1]},{"t":17}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p667_1_0p167_0p167","t":6,"s":[-8.142,-92.147],"e":[-7.675,-162.544],"to":[0.07779947668314,-11.7327470779419],"ti":[-0.07779947668314,11.7327470779419]},{"t":17}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[83.981,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p667_1_0p167_0p167"],"t":6,"s":[20.367],"e":[6.367]},{"t":17}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 2","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":6,"s":[15.021,15.021],"e":[0,0]},{"t":21}]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":6,"s":[0.0823529,0.6784314,0.3843137,1],"e":[0,0.9070925,0.5119235,1]},{"t":17}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":6,"s":[16.585,-99.759],"e":[28.521,-187.495],"to":[1.9892578125,-14.6227216720581],"ti":[-1.9892578125,14.6227216720581]},{"t":21}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[97.419,116],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":6,"s":[14.733],"e":[8.733]},{"t":21}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":2,"mn":"ADBE Vector Group"}],"ip":6,"op":22,"st":-21,"bm":0,"sr":1},{"ddd":0,"ind":6,"ty":4,"nm":"Shape Layer 9","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":100},"p":{"a":0,"k":[160,159.5,0]},"a":{"a":0,"k":[0,-34,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p667_1_0p167_0p167","0p667_1_0p167_0p167"],"t":6,"s":[15.021,15.021],"e":[0,0]},{"t":17}]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":6,"s":[0.0823529,0.6784314,0.3843137,1],"e":[0,0.7921569,0.4470588,1]},{"t":17}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p667_1_0p167_0p167","t":6,"s":[-8.142,-92.147],"e":[-7.675,-162.544],"to":[0.07779947668314,-11.7327470779419],"ti":[-0.07779947668314,11.7327470779419]},{"t":17}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[83.981,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p667_1_0p167_0p167"],"t":6,"s":[20.367],"e":[6.367]},{"t":17}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 2","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":6,"s":[15.021,15.021],"e":[0,0]},{"t":21}]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":6,"s":[0.0823529,0.6784314,0.3843137,1],"e":[0,0.9070925,0.5119235,1]},{"t":17}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":6,"s":[16.585,-99.759],"e":[28.521,-187.495],"to":[1.9892578125,-14.6227216720581],"ti":[-1.9892578125,14.6227216720581]},{"t":21}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[97.419,116],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":6,"s":[14.733],"e":[8.733]},{"t":21}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":2,"mn":"ADBE Vector Group"}],"ip":6,"op":22,"st":-21,"bm":0,"sr":1},{"ddd":0,"ind":7,"ty":4,"nm":"Shape Layer 8","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":50},"p":{"a":0,"k":[160,159.5,0]},"a":{"a":0,"k":[0,-34,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p667_1_0p167_0p167","0p667_1_0p167_0p167"],"t":6,"s":[15.021,15.021],"e":[0,0]},{"t":17}]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":6,"s":[0.0823529,0.6784314,0.3843137,1],"e":[0,0.7921569,0.4470588,1]},{"t":17}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p667_1_0p167_0p167","t":6,"s":[-8.142,-92.147],"e":[-7.675,-162.544],"to":[0.07779947668314,-11.7327470779419],"ti":[-0.07779947668314,11.7327470779419]},{"t":17}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[83.981,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p667_1_0p167_0p167"],"t":6,"s":[20.367],"e":[6.367]},{"t":17}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 2","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":6,"s":[15.021,15.021],"e":[0,0]},{"t":21}]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":6,"s":[0.0823529,0.6784314,0.3843137,1],"e":[0,0.9070925,0.5119235,1]},{"t":17}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":6,"s":[16.585,-99.759],"e":[28.521,-187.495],"to":[1.9892578125,-14.6227216720581],"ti":[-1.9892578125,14.6227216720581]},{"t":21}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[97.419,116],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":6,"s":[14.733],"e":[8.733]},{"t":21}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":2,"mn":"ADBE Vector Group"}],"ip":6,"op":22,"st":-21,"bm":0,"sr":1},{"ddd":0,"ind":8,"ty":4,"nm":"Shape Layer 7","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[160,159.5,0]},"a":{"a":0,"k":[0,-34,0]},"s":{"a":0,"k":[100,100,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p667_1_0p167_0p167","0p667_1_0p167_0p167"],"t":6,"s":[15.021,15.021],"e":[0,0]},{"t":17}]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":6,"s":[0.0823529,0.6784314,0.3843137,1],"e":[0,0.7921569,0.4470588,1]},{"t":17}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"n":"0p667_1_0p167_0p167","t":6,"s":[-8.142,-92.147],"e":[-7.675,-162.544],"to":[0.07779947668314,-11.7327470779419],"ti":[-0.07779947668314,11.7327470779419]},{"t":17}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[83.981,100],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0.167]},"n":["0p667_1_0p167_0p167"],"t":6,"s":[20.367],"e":[6.367]},{"t":17}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 2","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.833,0.833],"y":[0.833,0.833]},"o":{"x":[0.167,0.167],"y":[0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":6,"s":[15.021,15.021],"e":[0,0]},{"t":21}]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":6,"s":[0.0823529,0.6784314,0.3843137,1],"e":[0,0.9070925,0.5119235,1]},{"t":17}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":6,"s":[16.585,-99.759],"e":[28.521,-187.495],"to":[1.9892578125,-14.6227216720581],"ti":[-1.9892578125,14.6227216720581]},{"t":21}],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[97.419,116],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":6,"s":[14.733],"e":[8.733]},{"t":21}],"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":2,"mn":"ADBE Vector Group"}],"ip":6,"op":22,"st":-21,"bm":0,"sr":1},{"ddd":0,"ind":9,"ty":4,"nm":"Shape Layer 5","parent":11,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":-44},"p":{"a":0,"k":[0.378,-0.641,0]},"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[7.39,7.39,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0]],"o":[[0,0]],"v":[[-274.219,-254.097]],"c":false}},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke"},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 2","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-17,-16],[-17,10.5],[41,10.5]],"c":false}},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":8},"lc":2,"lj":1,"ml":5,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke"},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"ix":2,"mn":"ADBE Vector Group"}],"ip":7,"op":22,"st":-21,"bm":0,"sr":1},{"ddd":0,"ind":10,"ty":4,"nm":"Shape Layer 6","ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":4,"s":[50],"e":[0]},{"t":14}]},"r":{"a":0,"k":0},"p":{"a":0,"k":[160,160,0]},"a":{"a":0,"k":[0,0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,0.667]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0.333]},"n":["0p667_1_0p333_0","0p667_1_0p333_0","0p667_0p667_0p333_0p333"],"t":4,"s":[100,100,100],"e":[1085,1085,100]},{"t":14}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[19.779,19.779]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":0,"k":[0,0.7921569,0.4470588,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-0.068,0.036],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"}],"ip":4,"op":22,"st":-23,"bm":0,"sr":1},{"ddd":0,"ind":11,"ty":4,"nm":"Shape Layer 4","ks":{"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":6,"s":[30],"e":[100]},{"t":9}]},"r":{"a":0,"k":0},"p":{"a":0,"k":[160.312,161.188,0]},"a":{"a":0,"k":[0.812,-0.562,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,0.667]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0.333]},"n":["0p667_1_0p333_0","0p667_1_0p333_0","0p667_0p667_0p333_0p333"],"t":6,"s":[100,100,100],"e":[1087,1087,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,0.667]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0.333]},"n":["0p667_1_0p333_0","0p667_1_0p333_0","0p667_0p667_0p333_0p333"],"t":11,"s":[1087,1087,100],"e":[866,866,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0.333]},"n":["0p833_0p833_0p333_0","0p833_0p833_0p333_0","0p833_0p833_0p333_0p333"],"t":13,"s":[866,866,100],"e":[878,878,100]},{"t":16}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[10.068,10.068]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":0,"k":[0,0.7921569,0.4470588,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[0.784,-0.716],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"}],"ip":6,"op":22,"st":-19,"bm":0,"sr":1},{"ddd":0,"ind":12,"ty":4,"nm":"Shape Layer 3","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[161,160,0]},"a":{"a":0,"k":[0,0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,0.667]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0.333]},"n":["0p667_1_0p333_0","0p667_1_0p333_0","0p667_0p667_0p333_0p333"],"t":3,"s":[100,100,100],"e":[224,224,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,0.667]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0.333]},"n":["0p667_1_0p333_0","0p667_1_0p333_0","0p667_0p667_0p333_0p333"],"t":4,"s":[224,224,100],"e":[476,476,100]},{"t":8}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[6.009,6.009]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"st","c":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":4,"s":[0.0558609,0.688557,0.3778246,1],"e":[0.1089485,0.6693168,0.3941063,1]},{"t":8}]},"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":4,"s":[0],"e":[100]},{"t":5}]},"w":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":4,"s":[3],"e":[0]},{"t":8}]},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke"},{"ty":"fl","c":{"a":0,"k":[0,0.7921569,0.4470588,1]},"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":3,"s":[100],"e":[99]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":4,"s":[99],"e":[0]},{"t":5}]},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-0.338,0.065],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[649.112,649.112],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 2","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"}],"ip":3,"op":22,"st":-21,"bm":0,"sr":1},{"ddd":0,"ind":13,"ty":4,"nm":"Shape Layer 2","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[160.142,159.987,0]},"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[377.603,377.603,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[22.315,22.315]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"st","c":{"a":0,"k":[0.8352941,0.8352941,0.8352941,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":1},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke"},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-0.038,0.003],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"}],"ip":-21,"op":22,"st":-21,"bm":0,"sr":1}]}
--------------------------------------------------------------------------------
/assets/lottie-glow-loading.json:
--------------------------------------------------------------------------------
1 | {"v":"4.6.8","fr":29.9700012207031,"ip":0,"op":69.0000028104276,"w":256,"h":256,"nm":"Comp 1","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Glow ball","ks":{"o":{"a":0,"k":100},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[0],"e":[360]},{"t":69.0000028104276}]},"p":{"a":0,"k":[127.984,127.969,0]},"a":{"a":0,"k":[-0.182,32.385,0]},"s":{"a":0,"k":[132,132,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[14.125,14.125]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":0,"k":[0.1635217,0.8509804,0.8105415,1]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-0.063,1.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"}],"ip":0,"op":300.00001221925,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 8","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":315},"p":{"a":0,"k":[127.984,127.969,0]},"a":{"a":0,"k":[-0.182,32.385,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":56,"s":[132,132,100],"e":[145,145,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":59,"s":[145,145,100],"e":[132,132,100]},{"t":63.0000025660426}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[14.125,14.125]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[0.1647059,0.6313726,0.8509804,1],"e":[0.1647059,0.6313726,0.8509804,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":56,"s":[0.1647059,0.6313726,0.8509804,1],"e":[0.1647059,0.8509804,0.8117647,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":62,"s":[0.1647059,0.8509804,0.8117647,1],"e":[0.1647059,0.6313726,0.8509804,1]},{"t":69.0000028104276}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-0.063,1.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"}],"ip":0,"op":300.00001221925,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 7","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":270},"p":{"a":0,"k":[127.984,127.969,0]},"a":{"a":0,"k":[-0.182,32.385,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":48,"s":[132,132,100],"e":[145,145,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":51,"s":[145,145,100],"e":[132,132,100]},{"t":55.0000022401959}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[14.125,14.125]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[0.1647059,0.6313726,0.8509804,1],"e":[0.1647059,0.6745098,0.8431373,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":47,"s":[0.1647059,0.6745098,0.8431373,1],"e":[0.1647059,0.8509804,0.8117647,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":58,"s":[0.1647059,0.8509804,0.8117647,1],"e":[0.1647059,0.6313726,0.8509804,1]},{"t":69.0000028104276}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-0.063,1.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"}],"ip":0,"op":300.00001221925,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":4,"ty":4,"nm":"Shape Layer 6","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":225},"p":{"a":0,"k":[127.984,127.969,0]},"a":{"a":0,"k":[-0.182,32.385,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":39,"s":[132,132,100],"e":[145,145,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":42,"s":[145,145,100],"e":[132,132,100]},{"t":46.0000018736184}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[14.125,14.125]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[0.1647059,0.6313726,0.8509804,1],"e":[0.1647059,0.6313726,0.8509804,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":37,"s":[0.1647059,0.6313726,0.8509804,1],"e":[0.1647059,0.8509804,0.8117647,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":43,"s":[0.1647059,0.8509804,0.8117647,1],"e":[0.1647059,0.6313726,0.8509804,1]},{"t":48.0000019550801}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-0.063,1.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"}],"ip":0,"op":300.00001221925,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":5,"ty":4,"nm":"Shape Layer 5","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":180},"p":{"a":0,"k":[127.984,127.969,0]},"a":{"a":0,"k":[-0.182,32.385,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":31,"s":[132,132,100],"e":[145,145,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":34,"s":[145,145,100],"e":[132,132,100]},{"t":38.0000015477717}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[14.125,14.125]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[0.1647059,0.6313726,0.8509804,1],"e":[0.1647059,0.6313726,0.8509804,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":26,"s":[0.1647059,0.6313726,0.8509804,1],"e":[0.1647059,0.8509804,0.8117647,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":38,"s":[0.1647059,0.8509804,0.8117647,1],"e":[0.1647059,0.6313726,0.8509804,1]},{"t":42.0000017106951}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-0.063,1.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"}],"ip":0,"op":300.00001221925,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":6,"ty":4,"nm":"Shape Layer 4","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":135},"p":{"a":0,"k":[127.984,127.969,0]},"a":{"a":0,"k":[-0.182,32.385,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":23,"s":[132,132,100],"e":[145,145,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":26,"s":[145,145,100],"e":[132,132,100]},{"t":30.0000012219251}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[14.125,14.125]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[0.1647059,0.6313726,0.8509804,1],"e":[0.1647059,0.8509804,0.8117647,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":30,"s":[0.1647059,0.8509804,0.8117647,1],"e":[0.1647059,0.6313726,0.8509804,1]},{"t":38.0000015477717}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-0.063,1.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"}],"ip":0,"op":300.00001221925,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":7,"ty":4,"nm":"Shape Layer 3","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":90},"p":{"a":0,"k":[127.984,127.969,0]},"a":{"a":0,"k":[-0.182,32.385,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":14,"s":[132,132,100],"e":[145,145,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":17,"s":[145,145,100],"e":[132,132,100]},{"t":21.0000008553475}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[14.125,14.125]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[0.1647059,0.6313726,0.8509804,1],"e":[0.1647059,0.8509804,0.8117647,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":22,"s":[0.1647059,0.8509804,0.8117647,1],"e":[0.1647059,0.6313726,0.8509804,1]},{"t":28.0000011404634}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-0.063,1.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"}],"ip":0,"op":300.00001221925,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":8,"ty":4,"nm":"Shape Layer 2","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":45},"p":{"a":0,"k":[127.984,127.969,0]},"a":{"a":0,"k":[-0.182,32.385,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":7,"s":[132,132,100],"e":[145,145,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":10,"s":[145,145,100],"e":[132,132,100]},{"t":14.0000005702317}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[14.125,14.125]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[0.1647059,0.6313726,0.8509804,1],"e":[0.1647059,0.8509804,0.8117647,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":16,"s":[0.1647059,0.8509804,0.8117647,1],"e":[0.1647059,0.6313726,0.8509804,1]},{"t":22.0000008960784}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-0.063,1.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"}],"ip":0,"op":300.00001221925,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":9,"ty":4,"nm":"Shape Layer 1","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[127.984,127.969,0]},"a":{"a":0,"k":[-0.182,32.385,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":0,"s":[132,132,100],"e":[145,145,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":3,"s":[145,145,100],"e":[132,132,100]},{"t":7.00000028511585}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[14.125,14.125]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[0.1647059,0.6313726,0.8509804,1],"e":[0.1647059,0.8509804,0.8117647,1]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":5,"s":[0.1647059,0.8509804,0.8117647,1],"e":[0.1647059,0.6313726,0.8509804,1]},{"t":16.0000006516934}]},"o":{"a":0,"k":100},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[-0.063,1.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"}],"ip":0,"op":300.00001221925,"st":0,"bm":0,"sr":1}]}
--------------------------------------------------------------------------------
/assets/lottie-loading-double.json:
--------------------------------------------------------------------------------
1 | {"v":"5.1.16","fr":24,"ip":0,"op":48,"w":1600,"h":1600,"nm":"Roam","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":4,"s":[0],"e":[360]},{"t":31}],"ix":10},"p":{"a":0,"k":[792.641,800.641,0],"ix":2},"a":{"a":0,"k":[-173.359,-127.359,0],"ix":1},"s":{"a":0,"k":[122.553,122.553,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[225.281,225.281],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.224043573118,0.549071248372,0.957107843137,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":20,"ix":5},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-173.359,-127.359],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":4,"s":[0],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":14,"s":[0],"e":[100]},{"t":31}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":4,"s":[0],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":14,"s":[100],"e":[100]},{"t":31}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":48,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":0,"s":[0],"e":[360]},{"t":42}],"ix":10},"p":{"a":0,"k":[792.641,800.641,0],"ix":2},"a":{"a":0,"k":[-173.359,-127.359,0],"ix":1},"s":{"a":0,"k":[190.553,190.553,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[225.281,225.281],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.175536151961,1,0.939832320868,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":20,"ix":5},"lc":2,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-173.359,-127.359],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":0,"s":[0],"e":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":24,"s":[0],"e":[100]},{"t":38}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":0,"s":[0],"e":[100]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":24,"s":[100],"e":[100]},{"t":38}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":48,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"BKG","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[800,800,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[190.553,190.553,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[924.781,926.667],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":0,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.149404862348,0.073189215567,0.308363970588,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0.578,-2.677],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":48,"st":0,"bm":0}],"markers":[]}
--------------------------------------------------------------------------------
/assets/lottie-loading-text.json:
--------------------------------------------------------------------------------
1 | {"v":"5.1.6","fr":30,"ip":0,"op":94,"w":300,"h":300,"nm":"Comp 2","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[81,59.26,0],"ix":2},"a":{"a":0,"k":[-30,-6.544,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.651,0.667,0.667],"y":[0.998,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p651_0p998_0p333_0","0p667_1_0p333_0","0p667_1_0p333_0"],"t":9,"s":[0,75.476,100],"e":[110,75.476,100]},{"i":{"x":[0.524,0.833,0.833],"y":[0.97,1,1]},"o":{"x":[0.379,0.167,0.167],"y":[0.013,0,0]},"n":["0p524_0p97_0p379_0p013","0p833_1_0p167_0","0p833_1_0p167_0"],"t":21,"s":[110,75.476,100],"e":[100,75.476,100]},{"t":29}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[85.26,14.271],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":2,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.941176470588,0.949019607843,0.960784313725,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[12.63,-8.364],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":118,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[81,41.26,0],"ix":2},"a":{"a":0,"k":[-30,-6.544,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.651,0.667,0.667],"y":[0.997,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p651_0p997_0p333_0","0p667_1_0p333_0","0p667_1_0p333_0"],"t":3,"s":[0,75.476,100],"e":[90,75.476,100]},{"i":{"x":[0.524,0.833,0.833],"y":[0.94,1,1]},"o":{"x":[0.379,0.167,0.167],"y":[0.027,0,0]},"n":["0p524_0p94_0p379_0p027","0p833_1_0p167_0","0p833_1_0p167_0"],"t":15,"s":[90,75.476,100],"e":[85,75.476,100]},{"t":23}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[85.26,14.271],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":2,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.941176470588,0.949019607843,0.960784313725,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[12.63,-8.364],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":166,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[48.961,49.211,0],"ix":2},"a":{"a":0,"k":[-66.789,-32.789,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.044,0.044,0.667],"y":[0.991,0.991,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p044_0p991_0p333_0","0p044_0p991_0p333_0","0p667_1_0p333_0"],"t":0,"s":[0,0,100],"e":[93,93,100]},{"t":12}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[38.422,38.422],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":4,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.894117647059,0.901960784314,0.921568627451,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-66.789,-32.789],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":166,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"Comp 1","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[150,175,0],"ix":2},"a":{"a":0,"k":[100,50,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":200,"h":100,"ip":62,"op":152,"st":62,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"Comp 1","refId":"comp_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":62,"s":[100],"e":[60]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":76,"s":[60],"e":[60]},{"t":94}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.182,"y":1},"o":{"x":0.333,"y":0},"n":"0p182_1_0p333_0","t":62,"s":[150,175,0],"e":[150,123.5,0],"to":[0,-8.58333301544189,0],"ti":[0,8.58333301544189,0]},{"i":{"x":0.182,"y":0.182},"o":{"x":0.167,"y":0.167},"n":"0p182_0p182_0p167_0p167","t":76,"s":[150,123.5,0],"e":[150,123.5,0],"to":[0,0,0],"ti":[0,0,0]},{"t":94}],"ix":2},"a":{"a":0,"k":[100,50,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.069,0.069,0.667],"y":[0.995,0.995,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p069_0p995_0p333_0","0p069_0p995_0p333_0","0p667_1_0p333_0"],"t":62,"s":[100,100,100],"e":[80,80,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p833_1_0p333_0","0p833_1_0p333_0","0p833_1_0p333_0"],"t":76,"s":[80,80,100],"e":[80,80,100]},{"t":94}],"ix":6}},"ao":0,"w":200,"h":100,"ip":30,"op":120,"st":30,"bm":0},{"ddd":0,"ind":3,"ty":0,"nm":"Comp 1","refId":"comp_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":30,"s":[100],"e":[60]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":44,"s":[60],"e":[60]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":62,"s":[60],"e":[0]},{"t":76}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.182,"y":1},"o":{"x":0.333,"y":0},"n":"0p182_1_0p333_0","t":30,"s":[150,175,0],"e":[150,123.5,0],"to":[0,-8.58333301544189,0],"ti":[0,8.58333301544189,0]},{"i":{"x":0.182,"y":0.182},"o":{"x":0.167,"y":0.167},"n":"0p182_0p182_0p167_0p167","t":44,"s":[150,123.5,0],"e":[150,123.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.182,"y":1},"o":{"x":0.167,"y":0},"n":"0p182_1_0p167_0","t":62,"s":[150,123.5,0],"e":[150,86.5,0],"to":[0,-6.16666650772095,0],"ti":[0,6.16666650772095,0]},{"t":76}],"ix":2},"a":{"a":0,"k":[100,50,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.069,0.069,0.667],"y":[0.995,0.995,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p069_0p995_0p333_0","0p069_0p995_0p333_0","0p667_1_0p333_0"],"t":30,"s":[100,100,100],"e":[80,80,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p833_1_0p333_0","0p833_1_0p333_0","0p833_1_0p333_0"],"t":44,"s":[80,80,100],"e":[80,80,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"n":["0p833_1_0p167_0","0p833_1_0p167_0","0p833_1_0p167_0"],"t":62,"s":[80,80,100],"e":[50,50,100]},{"t":76}],"ix":6}},"ao":0,"w":200,"h":100,"ip":-2,"op":88,"st":-2,"bm":0},{"ddd":0,"ind":4,"ty":0,"nm":"Comp 1","refId":"comp_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":-1,"s":[100],"e":[60]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":13,"s":[60],"e":[60]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":31,"s":[60],"e":[0]},{"t":45}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.182,"y":1},"o":{"x":0.333,"y":0},"n":"0p182_1_0p333_0","t":-1,"s":[150,175,0],"e":[150,123.5,0],"to":[0,-8.58333301544189,0],"ti":[0,8.58333301544189,0]},{"i":{"x":0.182,"y":0.182},"o":{"x":0.167,"y":0.167},"n":"0p182_0p182_0p167_0p167","t":13,"s":[150,123.5,0],"e":[150,123.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.182,"y":1},"o":{"x":0.167,"y":0},"n":"0p182_1_0p167_0","t":31,"s":[150,123.5,0],"e":[150,86.5,0],"to":[0,-6.16666650772095,0],"ti":[0,6.16666650772095,0]},{"t":45}],"ix":2},"a":{"a":0,"k":[100,50,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.069,0.069,0.667],"y":[0.995,0.995,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p069_0p995_0p333_0","0p069_0p995_0p333_0","0p667_1_0p333_0"],"t":-1,"s":[100,100,100],"e":[80,80,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p833_1_0p333_0","0p833_1_0p333_0","0p833_1_0p333_0"],"t":13,"s":[80,80,100],"e":[80,80,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"n":["0p833_1_0p167_0","0p833_1_0p167_0","0p833_1_0p167_0"],"t":31,"s":[80,80,100],"e":[50,50,100]},{"t":45}],"ix":6}},"ao":0,"w":200,"h":100,"ip":-33,"op":57,"st":-33,"bm":0},{"ddd":0,"ind":5,"ty":0,"nm":"Comp 1","refId":"comp_0","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":-35,"s":[100],"e":[60]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":-21,"s":[60],"e":[60]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":-1,"s":[60],"e":[0]},{"t":13}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.182,"y":1},"o":{"x":0.333,"y":0},"n":"0p182_1_0p333_0","t":-35,"s":[150,175,0],"e":[150,123.5,0],"to":[0,-8.58333301544189,0],"ti":[0,8.58333301544189,0]},{"i":{"x":0.182,"y":0.182},"o":{"x":0.167,"y":0.167},"n":"0p182_0p182_0p167_0p167","t":-21,"s":[150,123.5,0],"e":[150,123.5,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.182,"y":1},"o":{"x":0.167,"y":0},"n":"0p182_1_0p167_0","t":-1,"s":[150,123.5,0],"e":[150,86.5,0],"to":[0,-6.16666650772095,0],"ti":[0,6.16666650772095,0]},{"t":13}],"ix":2},"a":{"a":0,"k":[100,50,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.069,0.069,0.667],"y":[0.995,0.995,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p069_0p995_0p333_0","0p069_0p995_0p333_0","0p667_1_0p333_0"],"t":-35,"s":[100,100,100],"e":[80,80,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p833_1_0p333_0","0p833_1_0p333_0","0p833_1_0p333_0"],"t":-21,"s":[80,80,100],"e":[80,80,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"n":["0p833_1_0p167_0","0p833_1_0p167_0","0p833_1_0p167_0"],"t":-1,"s":[80,80,100],"e":[50,50,100]},{"t":13}],"ix":6}},"ao":0,"w":200,"h":100,"ip":-76,"op":14,"st":-76,"bm":0}],"markers":[]}
--------------------------------------------------------------------------------
/assets/lottie-loading.json:
--------------------------------------------------------------------------------
1 | {"v":"5.1.15","fr":60,"ip":0,"op":141,"w":300,"h":300,"nm":"Composição 1","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Camada de forma 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[0],"e":[1080]},{"t":180}],"ix":10},"p":{"a":0,"k":[150,150,0],"ix":2},"a":{"a":0,"k":[-14.604,-15.104,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[106.793,106.793],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Caminho da elipse 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.109803921569,0.109803921569,0.109803921569,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":11,"ix":5},"lc":2,"lj":1,"ml":4,"nm":"Traçado 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-14.604,-15.104],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformar"}],"nm":"Elipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[0],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":60,"s":[0],"e":[67]},{"t":119}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[3],"e":[70]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":60,"s":[70],"e":[70]},{"t":119}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Aparar caminhos 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":900,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Camada de forma 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[0],"e":[1080]},{"t":180}],"ix":10},"p":{"a":0,"k":[150,150,0],"ix":2},"a":{"a":0,"k":[-14.604,-15.104,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[106.793,106.793],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Caminho da elipse 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,0,0.552941176471,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":1,"ml":4,"nm":"Traçado 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-14.604,-15.104],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformar"}],"nm":"Elipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":20,"s":[0],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":69.916,"s":[0],"e":[67]},{"t":119}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":20,"s":[3],"e":[70]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":69.916,"s":[70],"e":[70]},{"t":119}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Aparar caminhos 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":900,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Camada de forma 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[0],"e":[1080]},{"t":180}],"ix":10},"p":{"a":0,"k":[150,150,0],"ix":2},"a":{"a":0,"k":[-14.604,-15.104,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[106.793,106.793],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Caminho da elipse 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0.537254901961,0,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":1,"ml":4,"nm":"Traçado 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-14.604,-15.104],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformar"}],"nm":"Elipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":41,"s":[0],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":80.328,"s":[0],"e":[67]},{"t":119}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":41,"s":[3],"e":[70]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":80.328,"s":[70],"e":[70]},{"t":119}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Aparar caminhos 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":900,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Camada de forma 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":0,"s":[0],"e":[1080]},{"t":180}],"ix":10},"p":{"a":0,"k":[150,150,0],"ix":2},"a":{"a":0,"k":[-14.604,-15.104,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[106.793,106.793],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Caminho da elipse 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[0,0.117647058824,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":10,"ix":5},"lc":2,"lj":1,"ml":4,"nm":"Traçado 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[-14.604,-15.104],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformar"}],"nm":"Elipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":54,"s":[0],"e":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":86.773,"s":[0],"e":[67]},{"t":119}],"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":54,"s":[3],"e":[70]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":86.773,"s":[70],"e":[70]},{"t":119}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Aparar caminhos 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":900,"st":0,"bm":0}],"markers":[]}
--------------------------------------------------------------------------------
/assets/lottie-preloader.json:
--------------------------------------------------------------------------------
1 | {
2 | "v": "4.5.7",
3 | "fr": 25,
4 | "ip": 0,
5 | "op": 33,
6 | "w": 800,
7 | "h": 600,
8 | "ddd": 0,
9 | "assets": [
10 | {
11 | "id": "comp_0",
12 | "layers": [
13 | {
14 | "ddd": 0,
15 | "ind": 0,
16 | "ty": 3,
17 | "nm": "Null 1",
18 | "ks": {
19 | "o": { "a": 0, "k": 0 },
20 | "r": {
21 | "a": 1,
22 | "k": [
23 | {
24 | "i": { "x": [0.268], "y": [1] },
25 | "o": { "x": [0.73], "y": [0] },
26 | "n": ["0p268_1_0p73_0"],
27 | "t": 0,
28 | "s": [0],
29 | "e": [180]
30 | },
31 | { "t": 33 }
32 | ]
33 | },
34 | "p": {
35 | "a": 1,
36 | "k": [
37 | {
38 | "i": { "x": 0.277, "y": 1 },
39 | "o": { "x": 0.721, "y": 0 },
40 | "n": "0p277_1_0p721_0",
41 | "t": 0,
42 | "s": [460, 304, 0],
43 | "e": [338, 298, 0],
44 | "to": [-20.3333339691162, -1, 0],
45 | "ti": [20.3333339691162, 1, 0]
46 | },
47 | { "t": 33 }
48 | ]
49 | },
50 | "a": { "a": 0, "k": [0, 0, 0] },
51 | "s": { "a": 0, "k": [200, 200, 100] }
52 | },
53 | "ao": 0,
54 | "ip": 0,
55 | "op": 33,
56 | "st": 0,
57 | "bm": 0,
58 | "sr": 1
59 | },
60 | {
61 | "ddd": 0,
62 | "ind": 1,
63 | "ty": 4,
64 | "nm": "Shape Layer 4",
65 | "parent": 0,
66 | "ks": {
67 | "o": { "a": 0, "k": 100 },
68 | "r": { "a": 0, "k": 0 },
69 | "p": {
70 | "a": 1,
71 | "k": [
72 | {
73 | "i": { "x": 0.26, "y": 1 },
74 | "o": { "x": 0.731, "y": 0 },
75 | "n": "0p26_1_0p731_0",
76 | "t": 6,
77 | "s": [14.5, -1.375, 0],
78 | "e": [14.5, 28.625, 0],
79 | "to": [0, 0, 0],
80 | "ti": [0, 0, 0]
81 | },
82 | {
83 | "i": { "x": 0.267, "y": 1 },
84 | "o": { "x": 0.716, "y": 0 },
85 | "n": "0p267_1_0p716_0",
86 | "t": 19,
87 | "s": [14.5, 28.625, 0],
88 | "e": [14.5, -1.375, 0],
89 | "to": [0, 0, 0],
90 | "ti": [0, 0, 0]
91 | },
92 | { "t": 32 }
93 | ]
94 | },
95 | "a": { "a": 0, "k": [-99.5, -5.375, 0] },
96 | "s": {
97 | "a": 1,
98 | "k": [
99 | {
100 | "i": { "x": [0.279, 0.279, 0.667], "y": [1, 1, 0.667] },
101 | "o": { "x": [0.728, 0.728, 0.333], "y": [0, 0, 0.333] },
102 | "n": [
103 | "0p279_1_0p728_0",
104 | "0p279_1_0p728_0",
105 | "0p667_0p667_0p333_0p333"
106 | ],
107 | "t": 6,
108 | "s": [75, 75, 100],
109 | "e": [150, 150, 100]
110 | },
111 | {
112 | "i": { "x": [0.275, 0.275, 0.667], "y": [1, 1, 0.667] },
113 | "o": { "x": [0.729, 0.729, 0.333], "y": [0, 0, 0.333] },
114 | "n": [
115 | "0p275_1_0p729_0",
116 | "0p275_1_0p729_0",
117 | "0p667_0p667_0p333_0p333"
118 | ],
119 | "t": 19,
120 | "s": [150, 150, 100],
121 | "e": [75, 75, 100]
122 | },
123 | { "t": 32 }
124 | ]
125 | }
126 | },
127 | "ao": 0,
128 | "shapes": [
129 | {
130 | "ty": "gr",
131 | "it": [
132 | {
133 | "d": 1,
134 | "ty": "el",
135 | "s": { "a": 0, "k": [20.969, 20.969] },
136 | "p": { "a": 0, "k": [0, 0] },
137 | "nm": "Ellipse Path 1",
138 | "mn": "ADBE Vector Shape - Ellipse"
139 | },
140 | {
141 | "ty": "st",
142 | "c": { "a": 0, "k": [0.64, 0.16, 0.16, 1] },
143 | "o": { "a": 0, "k": 100 },
144 | "w": { "a": 0, "k": 0 },
145 | "lc": 1,
146 | "lj": 1,
147 | "ml": 4,
148 | "nm": "Stroke 1",
149 | "mn": "ADBE Vector Graphic - Stroke"
150 | },
151 | {
152 | "ty": "fl",
153 | "c": {
154 | "a": 1,
155 | "k": [
156 | {
157 | "i": { "x": [0.833], "y": [0.833] },
158 | "o": { "x": [0.167], "y": [0.167] },
159 | "n": ["0p833_0p833_0p167_0p167"],
160 | "t": 0,
161 | "s": [0.84, 0.09, 0.38, 1],
162 | "e": [0.18, 0.78, 0.69, 1]
163 | },
164 | {
165 | "i": { "x": [0.833], "y": [0.833] },
166 | "o": { "x": [0.167], "y": [0.167] },
167 | "n": ["0p833_0p833_0p167_0p167"],
168 | "t": 17,
169 | "s": [0.18, 0.78, 0.69, 1],
170 | "e": [0.84, 0.09, 0.38, 1]
171 | },
172 | { "t": 33 }
173 | ]
174 | },
175 | "o": { "a": 0, "k": 100 },
176 | "nm": "Fill 1",
177 | "mn": "ADBE Vector Graphic - Fill"
178 | },
179 | {
180 | "ty": "tr",
181 | "p": { "a": 0, "k": [-99.516, -5.516], "ix": 2 },
182 | "a": { "a": 0, "k": [0, 0], "ix": 1 },
183 | "s": { "a": 0, "k": [100, 100], "ix": 3 },
184 | "r": { "a": 0, "k": 0, "ix": 6 },
185 | "o": { "a": 0, "k": 100, "ix": 7 },
186 | "sk": { "a": 0, "k": 0, "ix": 4 },
187 | "sa": { "a": 0, "k": 0, "ix": 5 },
188 | "nm": "Transform"
189 | }
190 | ],
191 | "nm": "Ellipse 1",
192 | "np": 3,
193 | "mn": "ADBE Vector Group"
194 | }
195 | ],
196 | "ip": 0,
197 | "op": 33,
198 | "st": 0,
199 | "bm": 0,
200 | "sr": 1
201 | },
202 | {
203 | "ddd": 0,
204 | "ind": 2,
205 | "ty": 4,
206 | "nm": "Shape Layer 3",
207 | "parent": 0,
208 | "ks": {
209 | "o": { "a": 0, "k": 100 },
210 | "r": { "a": 0, "k": 0 },
211 | "p": {
212 | "a": 1,
213 | "k": [
214 | {
215 | "i": { "x": 0.281, "y": 1 },
216 | "o": { "x": 0.73, "y": 0 },
217 | "n": "0p281_1_0p73_0",
218 | "t": 4,
219 | "s": [-15.5, -1.375, 0],
220 | "e": [-15.5, -31.375, 0],
221 | "to": [0, 0, 0],
222 | "ti": [0, 0, 0]
223 | },
224 | {
225 | "i": { "x": 0.266, "y": 1 },
226 | "o": { "x": 0.737, "y": 0 },
227 | "n": "0p266_1_0p737_0",
228 | "t": 17,
229 | "s": [-15.5, -31.375, 0],
230 | "e": [-15.5, -1.375, 0],
231 | "to": [0, 0, 0],
232 | "ti": [0, 0, 0]
233 | },
234 | { "t": 30 }
235 | ]
236 | },
237 | "a": { "a": 0, "k": [-99.5, -5.375, 0] },
238 | "s": {
239 | "a": 1,
240 | "k": [
241 | {
242 | "i": { "x": [0.279, 0.279, 0.667], "y": [1, 1, 0.667] },
243 | "o": { "x": [0.728, 0.728, 0.333], "y": [0, 0, 0.333] },
244 | "n": [
245 | "0p279_1_0p728_0",
246 | "0p279_1_0p728_0",
247 | "0p667_0p667_0p333_0p333"
248 | ],
249 | "t": 4,
250 | "s": [75, 75, 100],
251 | "e": [150, 150, 100]
252 | },
253 | {
254 | "i": { "x": [0.275, 0.275, 0.667], "y": [1, 1, 0.667] },
255 | "o": { "x": [0.729, 0.729, 0.333], "y": [0, 0, 0.333] },
256 | "n": [
257 | "0p275_1_0p729_0",
258 | "0p275_1_0p729_0",
259 | "0p667_0p667_0p333_0p333"
260 | ],
261 | "t": 17,
262 | "s": [150, 150, 100],
263 | "e": [75, 75, 100]
264 | },
265 | { "t": 30 }
266 | ]
267 | }
268 | },
269 | "ao": 0,
270 | "shapes": [
271 | {
272 | "ty": "gr",
273 | "it": [
274 | {
275 | "d": 1,
276 | "ty": "el",
277 | "s": { "a": 0, "k": [20.969, 20.969] },
278 | "p": { "a": 0, "k": [0, 0] },
279 | "nm": "Ellipse Path 1",
280 | "mn": "ADBE Vector Shape - Ellipse"
281 | },
282 | {
283 | "ty": "st",
284 | "c": { "a": 0, "k": [0.64, 0.16, 0.16, 1] },
285 | "o": { "a": 0, "k": 100 },
286 | "w": { "a": 0, "k": 0 },
287 | "lc": 1,
288 | "lj": 1,
289 | "ml": 4,
290 | "nm": "Stroke 1",
291 | "mn": "ADBE Vector Graphic - Stroke"
292 | },
293 | {
294 | "ty": "fl",
295 | "c": {
296 | "a": 1,
297 | "k": [
298 | {
299 | "i": { "x": [0.833], "y": [0.833] },
300 | "o": { "x": [0.167], "y": [0.167] },
301 | "n": ["0p833_0p833_0p167_0p167"],
302 | "t": 0,
303 | "s": [0.84, 0.09, 0.38, 1],
304 | "e": [0.61, 0.76, 0.03, 1]
305 | },
306 | {
307 | "i": { "x": [0.833], "y": [0.833] },
308 | "o": { "x": [0.167], "y": [0.167] },
309 | "n": ["0p833_0p833_0p167_0p167"],
310 | "t": 17,
311 | "s": [0.61, 0.76, 0.03, 1],
312 | "e": [0.84, 0.09, 0.38, 1]
313 | },
314 | { "t": 33 }
315 | ]
316 | },
317 | "o": { "a": 0, "k": 100 },
318 | "nm": "Fill 1",
319 | "mn": "ADBE Vector Graphic - Fill"
320 | },
321 | {
322 | "ty": "tr",
323 | "p": { "a": 0, "k": [-99.516, -5.516], "ix": 2 },
324 | "a": { "a": 0, "k": [0, 0], "ix": 1 },
325 | "s": { "a": 0, "k": [100, 100], "ix": 3 },
326 | "r": { "a": 0, "k": 0, "ix": 6 },
327 | "o": { "a": 0, "k": 100, "ix": 7 },
328 | "sk": { "a": 0, "k": 0, "ix": 4 },
329 | "sa": { "a": 0, "k": 0, "ix": 5 },
330 | "nm": "Transform"
331 | }
332 | ],
333 | "nm": "Ellipse 1",
334 | "np": 3,
335 | "mn": "ADBE Vector Group"
336 | }
337 | ],
338 | "ip": 0,
339 | "op": 33,
340 | "st": 0,
341 | "bm": 0,
342 | "sr": 1
343 | },
344 | {
345 | "ddd": 0,
346 | "ind": 3,
347 | "ty": 4,
348 | "nm": "Shape Layer 2",
349 | "parent": 0,
350 | "ks": {
351 | "o": { "a": 0, "k": 100 },
352 | "r": { "a": 0, "k": 0 },
353 | "p": {
354 | "a": 1,
355 | "k": [
356 | {
357 | "i": { "x": 0.28, "y": 1 },
358 | "o": { "x": 0.729, "y": 0 },
359 | "n": "0p28_1_0p729_0",
360 | "t": 2,
361 | "s": [-45.5, -1.375, 0],
362 | "e": [-45.5, 28.625, 0],
363 | "to": [0, 0, 0],
364 | "ti": [0, 0, 0]
365 | },
366 | {
367 | "i": { "x": 0.287, "y": 1 },
368 | "o": { "x": 0.714, "y": 0 },
369 | "n": "0p287_1_0p714_0",
370 | "t": 15,
371 | "s": [-45.5, 28.625, 0],
372 | "e": [-45.5, -1.375, 0],
373 | "to": [0, 0, 0],
374 | "ti": [0, 0, 0]
375 | },
376 | { "t": 28 }
377 | ]
378 | },
379 | "a": { "a": 0, "k": [-99.5, -5.375, 0] },
380 | "s": {
381 | "a": 1,
382 | "k": [
383 | {
384 | "i": { "x": [0.279, 0.279, 0.667], "y": [1, 1, 0.667] },
385 | "o": { "x": [0.728, 0.728, 0.333], "y": [0, 0, 0.333] },
386 | "n": [
387 | "0p279_1_0p728_0",
388 | "0p279_1_0p728_0",
389 | "0p667_0p667_0p333_0p333"
390 | ],
391 | "t": 2,
392 | "s": [75, 75, 100],
393 | "e": [150, 150, 100]
394 | },
395 | {
396 | "i": { "x": [0.275, 0.275, 0.667], "y": [1, 1, 0.667] },
397 | "o": { "x": [0.729, 0.729, 0.333], "y": [0, 0, 0.333] },
398 | "n": [
399 | "0p275_1_0p729_0",
400 | "0p275_1_0p729_0",
401 | "0p667_0p667_0p333_0p333"
402 | ],
403 | "t": 15,
404 | "s": [150, 150, 100],
405 | "e": [75, 75, 100]
406 | },
407 | { "t": 28 }
408 | ]
409 | }
410 | },
411 | "ao": 0,
412 | "shapes": [
413 | {
414 | "ty": "gr",
415 | "it": [
416 | {
417 | "d": 1,
418 | "ty": "el",
419 | "s": { "a": 0, "k": [20.969, 20.969] },
420 | "p": { "a": 0, "k": [0, 0] },
421 | "nm": "Ellipse Path 1",
422 | "mn": "ADBE Vector Shape - Ellipse"
423 | },
424 | {
425 | "ty": "st",
426 | "c": { "a": 0, "k": [0.64, 0.16, 0.16, 1] },
427 | "o": { "a": 0, "k": 100 },
428 | "w": { "a": 0, "k": 0 },
429 | "lc": 1,
430 | "lj": 1,
431 | "ml": 4,
432 | "nm": "Stroke 1",
433 | "mn": "ADBE Vector Graphic - Stroke"
434 | },
435 | {
436 | "ty": "fl",
437 | "c": {
438 | "a": 1,
439 | "k": [
440 | {
441 | "i": { "x": [0.833], "y": [0.833] },
442 | "o": { "x": [0.167], "y": [0.167] },
443 | "n": ["0p833_0p833_0p167_0p167"],
444 | "t": 0,
445 | "s": [0.84, 0.09, 0.38, 1],
446 | "e": [0.95, 0.47, 0.36, 1]
447 | },
448 | {
449 | "i": { "x": [0.833], "y": [0.833] },
450 | "o": { "x": [0.167], "y": [0.167] },
451 | "n": ["0p833_0p833_0p167_0p167"],
452 | "t": 17,
453 | "s": [0.95, 0.47, 0.36, 1],
454 | "e": [0.84, 0.09, 0.38, 1]
455 | },
456 | { "t": 33 }
457 | ]
458 | },
459 | "o": { "a": 0, "k": 100 },
460 | "nm": "Fill 1",
461 | "mn": "ADBE Vector Graphic - Fill"
462 | },
463 | {
464 | "ty": "tr",
465 | "p": { "a": 0, "k": [-99.516, -5.516], "ix": 2 },
466 | "a": { "a": 0, "k": [0, 0], "ix": 1 },
467 | "s": { "a": 0, "k": [100, 100], "ix": 3 },
468 | "r": { "a": 0, "k": 0, "ix": 6 },
469 | "o": { "a": 0, "k": 100, "ix": 7 },
470 | "sk": { "a": 0, "k": 0, "ix": 4 },
471 | "sa": { "a": 0, "k": 0, "ix": 5 },
472 | "nm": "Transform"
473 | }
474 | ],
475 | "nm": "Ellipse 1",
476 | "np": 3,
477 | "mn": "ADBE Vector Group"
478 | }
479 | ],
480 | "ip": 0,
481 | "op": 33,
482 | "st": 0,
483 | "bm": 0,
484 | "sr": 1
485 | },
486 | {
487 | "ddd": 0,
488 | "ind": 4,
489 | "ty": 4,
490 | "nm": "Shape Layer 1",
491 | "parent": 0,
492 | "ks": {
493 | "o": { "a": 0, "k": 100 },
494 | "r": { "a": 0, "k": 0 },
495 | "p": {
496 | "a": 1,
497 | "k": [
498 | {
499 | "i": { "x": 0.279, "y": 1 },
500 | "o": { "x": 0.728, "y": 0 },
501 | "n": "0p279_1_0p728_0",
502 | "t": 0,
503 | "s": [-75.5, -1.375, 0],
504 | "e": [-75.5, -31.375, 0],
505 | "to": [0, -5, 0],
506 | "ti": [0, 0, 0]
507 | },
508 | {
509 | "i": { "x": 0.264, "y": 1 },
510 | "o": { "x": 0.735, "y": 0 },
511 | "n": "0p264_1_0p735_0",
512 | "t": 13,
513 | "s": [-75.5, -31.375, 0],
514 | "e": [-75.5, -1.375, 0],
515 | "to": [0, 0, 0],
516 | "ti": [0, -5, 0]
517 | },
518 | { "t": 26 }
519 | ]
520 | },
521 | "a": { "a": 0, "k": [-99.5, -5.375, 0] },
522 | "s": {
523 | "a": 1,
524 | "k": [
525 | {
526 | "i": { "x": [0.279, 0.279, 0.667], "y": [1, 1, 0.667] },
527 | "o": { "x": [0.728, 0.728, 0.333], "y": [0, 0, 0.333] },
528 | "n": [
529 | "0p279_1_0p728_0",
530 | "0p279_1_0p728_0",
531 | "0p667_0p667_0p333_0p333"
532 | ],
533 | "t": 0,
534 | "s": [75, 75, 100],
535 | "e": [150, 150, 100]
536 | },
537 | {
538 | "i": { "x": [0.275, 0.275, 0.667], "y": [1, 1, 0.667] },
539 | "o": { "x": [0.729, 0.729, 0.333], "y": [0, 0, 0.333] },
540 | "n": [
541 | "0p275_1_0p729_0",
542 | "0p275_1_0p729_0",
543 | "0p667_0p667_0p333_0p333"
544 | ],
545 | "t": 13,
546 | "s": [150, 150, 100],
547 | "e": [75, 75, 100]
548 | },
549 | { "t": 26 }
550 | ]
551 | }
552 | },
553 | "ao": 0,
554 | "shapes": [
555 | {
556 | "ty": "gr",
557 | "it": [
558 | {
559 | "d": 1,
560 | "ty": "el",
561 | "s": { "a": 0, "k": [20.969, 20.969] },
562 | "p": { "a": 0, "k": [0, 0] },
563 | "nm": "Ellipse Path 1",
564 | "mn": "ADBE Vector Shape - Ellipse"
565 | },
566 | {
567 | "ty": "st",
568 | "c": { "a": 0, "k": [0.64, 0.16, 0.16, 1] },
569 | "o": { "a": 0, "k": 100 },
570 | "w": { "a": 0, "k": 0 },
571 | "lc": 1,
572 | "lj": 1,
573 | "ml": 4,
574 | "nm": "Stroke 1",
575 | "mn": "ADBE Vector Graphic - Stroke"
576 | },
577 | {
578 | "ty": "fl",
579 | "c": { "a": 0, "k": [0.84, 0.09, 0.38, 1] },
580 | "o": { "a": 0, "k": 100 },
581 | "nm": "Fill 1",
582 | "mn": "ADBE Vector Graphic - Fill"
583 | },
584 | {
585 | "ty": "tr",
586 | "p": { "a": 0, "k": [-99.516, -5.516], "ix": 2 },
587 | "a": { "a": 0, "k": [0, 0], "ix": 1 },
588 | "s": { "a": 0, "k": [100, 100], "ix": 3 },
589 | "r": { "a": 0, "k": 0, "ix": 6 },
590 | "o": { "a": 0, "k": 100, "ix": 7 },
591 | "sk": { "a": 0, "k": 0, "ix": 4 },
592 | "sa": { "a": 0, "k": 0, "ix": 5 },
593 | "nm": "Transform"
594 | }
595 | ],
596 | "nm": "Ellipse 1",
597 | "np": 3,
598 | "mn": "ADBE Vector Group"
599 | }
600 | ],
601 | "ip": 0,
602 | "op": 33,
603 | "st": 0,
604 | "bm": 0,
605 | "sr": 1
606 | }
607 | ]
608 | }
609 | ],
610 | "layers": [
611 | {
612 | "ddd": 0,
613 | "ind": 0,
614 | "ty": 0,
615 | "nm": "Komplet",
616 | "refId": "comp_0",
617 | "ks": {
618 | "o": { "a": 0, "k": 100 },
619 | "r": { "a": 0, "k": 0 },
620 | "p": { "a": 0, "k": [400, 300, 0] },
621 | "a": { "a": 0, "k": [400, 300, 0] },
622 | "s": { "a": 0, "k": [100, 100, 100] }
623 | },
624 | "ao": 0,
625 | "w": 800,
626 | "h": 600,
627 | "ip": 0,
628 | "op": 15,
629 | "st": -18,
630 | "bm": 0,
631 | "sr": 1
632 | },
633 | {
634 | "ddd": 0,
635 | "ind": 1,
636 | "ty": 0,
637 | "nm": "Komplet",
638 | "refId": "comp_0",
639 | "ks": {
640 | "o": { "a": 0, "k": 100 },
641 | "r": { "a": 0, "k": 0 },
642 | "p": { "a": 0, "k": [400, 300, 0] },
643 | "a": { "a": 0, "k": [400, 300, 0] },
644 | "s": { "a": 0, "k": [100, 100, 100] }
645 | },
646 | "ao": 0,
647 | "w": 800,
648 | "h": 600,
649 | "ip": 15,
650 | "op": 33,
651 | "st": 15,
652 | "bm": 0,
653 | "sr": 1
654 | }
655 | ]
656 | }
657 |
--------------------------------------------------------------------------------
/assets/splash.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/danielsousast/designcode-app/733f45f1f960eac5e4f00e5a1dd443586cb3a8c5/assets/splash.png
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = function(api) {
2 | api.cache(true);
3 | return {
4 | presets: ['babel-preset-expo'],
5 | };
6 | };
7 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "main": "node_modules/expo/AppEntry.js",
3 | "scripts": {
4 | "start": "expo start",
5 | "android": "expo start --android",
6 | "ios": "expo start --ios",
7 | "web": "expo start --web",
8 | "eject": "expo eject"
9 | },
10 | "dependencies": {
11 | "@apollo/react-hooks": "^3.1.5",
12 | "@react-native-community/async-storage": "~1.11.0",
13 | "@react-native-community/masked-view": "0.1.10",
14 | "@react-navigation/bottom-tabs": "^5.6.1",
15 | "@react-navigation/native": "^5.6.1",
16 | "@react-navigation/stack": "^5.6.2",
17 | "apollo-boost": "^0.4.9",
18 | "axios": "^0.19.2",
19 | "expo": "~38.0.8",
20 | "expo-av": "~8.2.1",
21 | "expo-blur": "~8.1.2",
22 | "expo-linear-gradient": "~8.2.1",
23 | "expo-status-bar": "^1.0.2",
24 | "firebase": "7.9.0",
25 | "graphql": "^15.3.0",
26 | "lottie-react-native": "~2.6.1",
27 | "react": "~16.11.0",
28 | "react-dom": "~16.11.0",
29 | "react-native": "https://github.com/expo/react-native/archive/sdk-38.0.1.tar.gz",
30 | "react-native-gesture-handler": "~1.6.0",
31 | "react-native-reanimated": "~1.9.0",
32 | "react-native-safe-area-context": "~3.0.7",
33 | "react-native-screens": "~2.9.0",
34 | "react-native-showdown": "^1.0.1",
35 | "react-native-svg": "^12.1.0",
36 | "react-native-web": "~0.11.7",
37 | "react-native-webview": "^10.3.2",
38 | "react-redux": "^7.2.0",
39 | "reactotron-react-native": "^5.0.0",
40 | "redux": "^4.0.5",
41 | "redux-persist": "^6.0.0",
42 | "redux-thunk": "^2.3.0",
43 | "styled-components": "^5.1.1"
44 | },
45 | "devDependencies": {
46 | "@babel/core": "^7.8.6",
47 | "babel-preset-expo": "~8.1.0",
48 | "reactotron-redux": "^3.1.3"
49 | },
50 | "private": true
51 | }
52 |
--------------------------------------------------------------------------------
/src/components/Avatar/index.js:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from "react";
2 | import { Image } from "./styles";
3 |
4 | export default function Avatar() {
5 | const [photo, setPhoto] = useState(
6 | "https://cl.ly/55da82beb939/download/avatar-default.jpg"
7 | );
8 |
9 | return ;
10 | }
11 |
--------------------------------------------------------------------------------
/src/components/Avatar/styles.js:
--------------------------------------------------------------------------------
1 | import styled from "styled-components/native";
2 |
3 | export const Image = styled.Image`
4 | width: 44px;
5 | height: 44px;
6 | background: #fff;
7 | border-radius: 22px;
8 | `;
9 |
--------------------------------------------------------------------------------
/src/components/Card/index.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import {
3 | Container,
4 | Cover,
5 | Image,
6 | Title,
7 | Content,
8 | Wrapper,
9 | Logo,
10 | Caption,
11 | Subtitle,
12 | } from "./styles";
13 |
14 | export default function Card(props) {
15 | return (
16 |
17 |
18 |
19 | {props.title}
20 |
21 |
22 |
23 |
24 | {props.caption}
25 | {props.subtitle}
26 |
27 |
28 |
29 | );
30 | }
31 |
--------------------------------------------------------------------------------
/src/components/Card/styles.js:
--------------------------------------------------------------------------------
1 | import styled from "styled-components/native";
2 | import { Dimensions } from "react-native";
3 |
4 | const screenWidth = Dimensions.get("window").width;
5 | var cardWidth = screenWidth - 60;
6 | if (screenWidth > 500) {
7 | cardWidth = 335;
8 | }
9 |
10 | export const Container = styled.View`
11 | background: #fff;
12 | width: ${cardWidth}px;
13 | height: 280px;
14 | border-radius: 14px;
15 | margin: 20px;
16 | box-shadow: 0 5px 15px rgba(0, 0, 0, 0.15);
17 | `;
18 |
19 | export const Cover = styled.View`
20 | width: 100%;
21 | height: 200px;
22 | border-top-left-radius: 14px;
23 | border-top-right-radius: 14px;
24 | overflow: hidden;
25 | `;
26 |
27 | export const Image = styled.Image`
28 | width: 100%;
29 | height: 100%;
30 | position: absolute;
31 | top: 0;
32 | left: 0;
33 | `;
34 |
35 | export const Title = styled.Text`
36 | color: #fff;
37 | font-size: 24px;
38 | font-weight: bold;
39 | margin-top: 20px;
40 | margin-left: 20px;
41 | width: 170px;
42 | `;
43 |
44 | export const Content = styled.View`
45 | padding-left: 20px;
46 | flex-direction: row;
47 | align-items: center;
48 | height: 80px;
49 | `;
50 |
51 | export const Wrapper = styled.View`
52 | margin-left: 10px;
53 | `;
54 |
55 | export const Logo = styled.Image`
56 | width: 44px;
57 | height: 44px;
58 | `;
59 |
60 | export const Caption = styled.Text`
61 | color: #3c4560;
62 | font-size: 20px;
63 | font-weight: 600;
64 | `;
65 |
66 | export const Subtitle = styled.Text`
67 | color: #b8bece;
68 | font-size: 15px;
69 | font-weight: 600;
70 | text-transform: uppercase;
71 | margin-top: 4px;
72 | `;
73 |
--------------------------------------------------------------------------------
/src/components/Course/index.js:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from "react";
2 | import {
3 | Container,
4 | Cover,
5 | Image,
6 | Logo,
7 | Content,
8 | Avatar,
9 | Caption,
10 | Author,
11 | Subtitle,
12 | Title,
13 | } from "./styles";
14 | import { Dimensions } from "react-native";
15 |
16 | const { width } = Dimensions.get("window");
17 |
18 | function getCourseWidth() {
19 | var cardWidth = width - 40;
20 | if (width >= 768) {
21 | cardWidth = (width - 60) / 2;
22 | }
23 | if (width >= 900) {
24 | cardWidth = (width - 80) / 3;
25 | }
26 | return cardWidth;
27 | }
28 |
29 | export default function Course(props) {
30 | const [cardWith, setCardWidth] = useState(getCourseWidth(width));
31 |
32 | function adaptlayout(dimension) {
33 | setCardWidth(getCourseWidth(dimension.window.width));
34 | }
35 |
36 | useEffect(() => {
37 | Dimensions.addEventListener("change", adaptlayout);
38 |
39 | return Dimensions.removeEventListener("change", adaptlayout);
40 | }, [adaptlayout]);
41 |
42 | return (
43 |
44 |
45 |
46 |
47 | {props.subtitle}
48 | {props.title}
49 |
50 |
51 |
52 | {props.caption}
53 | Taught by {props.author}
54 |
55 |
56 | );
57 | }
58 |
--------------------------------------------------------------------------------
/src/components/Course/styles.js:
--------------------------------------------------------------------------------
1 | import styled from "styled-components/native";
2 | import { Dimensions } from "react-native";
3 |
4 | export const Container = styled.View`
5 | width: 335px;
6 | height: 335px;
7 | background: #fff;
8 | margin: 10px 10px;
9 | border-radius: 14px;
10 | box-shadow: 0 10px 20px rgba(0, 0, 0, 0.15);
11 | `;
12 |
13 | export const Cover = styled.View`
14 | height: 260px;
15 | border-top-left-radius: 14px;
16 | border-top-right-radius: 14px;
17 | overflow: hidden;
18 | justify-content: flex-end;
19 | `;
20 |
21 | export const Image = styled.Image`
22 | width: 100%;
23 | height: 100%;
24 | position: absolute;
25 | `;
26 |
27 | export const Logo = styled.Image`
28 | width: 48px;
29 | height: 48px;
30 | position: absolute;
31 | top: 90px;
32 | left: 50%;
33 | margin-left: -24px;
34 | `;
35 |
36 | export const Author = styled.Text`
37 | font-size: 13px;
38 | color: #b8bece;
39 | font-weight: 500;
40 | margin-top: 4px;
41 | `;
42 |
43 | export const Title = styled.Text`
44 | font-size: 24px;
45 | color: #fff;
46 | font-weight: 600;
47 | margin-top: 4px;
48 | margin-left: 20px;
49 | margin-bottom: 20px;
50 | width: 170px;
51 | `;
52 |
53 | export const Subtitle = styled.Text`
54 | font-size: 15px;
55 | font-weight: 500;
56 | color: rgba(255, 255, 255, 0.8);
57 | text-transform: uppercase;
58 | margin-left: 20px;
59 | `;
60 |
61 | export const Content = styled.View`
62 | padding-left: 62px;
63 | justify-content: center;
64 | height: 75px;
65 | `;
66 |
67 | export const Avatar = styled.Image`
68 | width: 32px;
69 | height: 32px;
70 | position: absolute;
71 | left: 20px;
72 | top: 20px;
73 | border-radius: 16px;
74 | `;
75 |
76 | export const Caption = styled.Text``;
77 |
--------------------------------------------------------------------------------
/src/components/CourseSection/index.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { LinearGradient } from "expo-linear-gradient";
3 |
4 | import { Container, Mask, Border, Text, Image } from "./styles";
5 |
6 | export default function CourseSection(props) {
7 | return (
8 |
9 |
10 |
11 |
19 |
31 |
32 | {props.title}
33 |
34 |
35 | );
36 | }
37 |
--------------------------------------------------------------------------------
/src/components/CourseSection/styles.js:
--------------------------------------------------------------------------------
1 | import styled from "styled-components/native";
2 |
3 | export const Container = styled.View`
4 | width: 150px;
5 | height: 150px;
6 | border-radius: 10px;
7 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.15);
8 | `;
9 |
10 | export const Mask = styled.View`
11 | height: 100%;
12 | border-radius: 10px;
13 | background: #3c4560;
14 | overflow: hidden;
15 | justify-content: flex-end;
16 | margin-left: 20px;
17 | `;
18 |
19 | export const Image = styled.Image`
20 | width: 100%;
21 | height: 100%;
22 | position: absolute;
23 | `;
24 |
25 | export const Text = styled.Text`
26 | font-size: 15px;
27 | font-weight: 600;
28 | color: white;
29 | margin: 16px;
30 | `;
31 |
32 | export const Border = styled.View`
33 | position: absolute;
34 | width: 100%;
35 | height: 100%;
36 | border: 1px solid rgba(255, 255, 255, 0.1);
37 | border-radius: 10px;
38 | `;
39 |
--------------------------------------------------------------------------------
/src/components/CoursesList/index.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { Container } from "./styles";
3 | import Course from "../Course";
4 |
5 | import courses from "../../data/courses";
6 |
7 | export default function CoursesList() {
8 | return (
9 |
10 | {courses.map((course, index) => (
11 |
21 | ))}
22 |
23 | );
24 | }
25 |
--------------------------------------------------------------------------------
/src/components/CoursesList/styles.js:
--------------------------------------------------------------------------------
1 | import styled from "styled-components/native";
2 |
3 | export const Container = styled.View`
4 | flex-direction: row;
5 | align-items: center;
6 | flex-wrap: wrap;
7 | padding-left: 10px;
8 | `;
9 |
--------------------------------------------------------------------------------
/src/components/Icons/index.js:
--------------------------------------------------------------------------------
1 | import * as React from "react";
2 | import Svg, { G, Path, Defs, ClipPath } from "react-native-svg";
3 |
4 | export function NotificationIcon(props) {
5 | return (
6 |
22 | );
23 | }
24 |
25 | export const PlayIcon = (props) => (
26 |
34 | );
35 |
--------------------------------------------------------------------------------
/src/components/Loading/index.js:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useRef, useState } from "react";
2 | import { Animated, Dimensions } from "react-native";
3 | import { Container } from "./styles";
4 | import LottieView from "lottie-react-native";
5 |
6 | const { height } = Dimensions.get("window");
7 |
8 | export default function Loading(props) {
9 | const [top, setTop] = useState(new Animated.Value(0));
10 | const [opacity, setOpacity] = useState(new Animated.Value(0));
11 |
12 | useEffect(() => {
13 | if (props.isActive) {
14 | Animated.timing(top, {
15 | toValue: 0,
16 | duration: 0,
17 | useNativeDriver: false,
18 | }).start();
19 | Animated.timing(opacity, {
20 | toValue: 1,
21 | useNativeDriver: false,
22 | }).start();
23 |
24 | animationRef.current.play();
25 | } else {
26 | Animated.timing(top, {
27 | toValue: height,
28 | duration: 0,
29 | useNativeDriver: false,
30 | }).start();
31 | Animated.timing(opacity, {
32 | toValue: 0,
33 | useNativeDriver: false,
34 | }).start();
35 |
36 | animationRef.current.loop = false;
37 | }
38 | }, [props.isActive]);
39 |
40 | const animationRef = useRef();
41 |
42 | return (
43 |
49 |
55 |
56 | );
57 | }
58 |
59 | const AnimatedContainer = Animated.createAnimatedComponent(Container);
60 |
--------------------------------------------------------------------------------
/src/components/Loading/styles.js:
--------------------------------------------------------------------------------
1 | import styled from "styled-components/native";
2 |
3 | export const Container = styled.View`
4 | width: 100%;
5 | height: 100%;
6 | background: rgba(255, 255, 255, 0.9);
7 | justify-content: center;
8 | align-items: center;
9 | position: absolute;
10 | top: 0;
11 | left: 0;
12 | `;
13 |
--------------------------------------------------------------------------------
/src/components/Logo/index.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { Container, Image, Text } from "./styles";
3 |
4 | export default function Logo(props) {
5 | return (
6 |
7 |
8 | {props.text}
9 |
10 | );
11 | }
12 |
--------------------------------------------------------------------------------
/src/components/Logo/styles.js:
--------------------------------------------------------------------------------
1 | import styled from "styled-components/native";
2 |
3 | export const Container = styled.View`
4 | flex-direction: row;
5 | align-items: center;
6 | background: #fff;
7 | height: 60px;
8 | padding: 12px 16px 12px;
9 | border-radius: 10px;
10 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.05);
11 | align-items: center;
12 | margin: 0 8px;
13 | `;
14 |
15 | export const Image = styled.Image`
16 | width: 36px;
17 | height: 36px;
18 | `;
19 |
20 | export const Text = styled.Text`
21 | font-weight: 600;
22 | font-size: 17px;
23 | margin-left: 8px;
24 | `;
25 |
--------------------------------------------------------------------------------
/src/components/Menu/index.js:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect, useCallback } from "react";
2 | import { Animated, Dimensions } from "react-native";
3 | import { Ionicons } from "@expo/vector-icons";
4 | import firebase from "../../firebase";
5 |
6 | import {
7 | Cover,
8 | Image,
9 | Title,
10 | Subtitle,
11 | Content,
12 | CloseView,
13 | Touchable,
14 | styles,
15 | ButtonMenu,
16 | } from "./styles";
17 | import MenuItem from "../MenuItem";
18 | import { useSelector, useDispatch } from "react-redux";
19 | import { store } from "../../store";
20 |
21 | const { height, width } = Dimensions.get("window");
22 |
23 | export default function Menu() {
24 | const [top, setTop] = useState(new Animated.Value(height));
25 |
26 | const action = useSelector((state) => state.app.action);
27 |
28 | useEffect(() => {
29 | if (action == "openMenu") {
30 | Animated.spring(top, {
31 | toValue: 54,
32 | useNativeDriver: false,
33 | }).start();
34 | }
35 |
36 | if (action == "closeMenu") {
37 | Animated.spring(top, {
38 | toValue: height,
39 | useNativeDriver: false,
40 | }).start();
41 | }
42 | }, [action]);
43 |
44 | function handleCloseMenu() {
45 | store.dispatch({
46 | type: "CLOSE_MENU",
47 | });
48 | }
49 |
50 | function handleMenu(index) {
51 | if (index == 3) {
52 | store.dispatch({ type: "CLOSE_MENU" });
53 | store.dispatch({ type: "SET_NAME", name: "" });
54 | firebase.auth().signOut();
55 | }
56 | }
57 |
58 | return (
59 |
60 |
61 |
62 | Daniel Sousa
63 | Designer at LearnCode
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 | {items.map((item, index) => (
73 | handleMenu(index)}>
74 |
75 |
76 | ))}
77 |
78 |
79 | );
80 | }
81 |
82 | const items = [
83 | {
84 | icon: "ios-settings",
85 | title: "Account",
86 | text: "settings",
87 | },
88 | {
89 | icon: "ios-card",
90 | title: "Billing",
91 | text: "payments",
92 | },
93 | {
94 | icon: "ios-compass",
95 | title: "Learn React",
96 | text: "start course",
97 | },
98 | {
99 | icon: "ios-exit",
100 | title: "Log out",
101 | text: "see you soon!",
102 | },
103 | ];
104 |
--------------------------------------------------------------------------------
/src/components/Menu/styles.js:
--------------------------------------------------------------------------------
1 | import styled from "styled-components/native";
2 | import { StyleSheet, Dimensions } from "react-native";
3 |
4 | const { height } = Dimensions.get("window");
5 |
6 | export const Container = styled.View`
7 | position: absolute;
8 | background: white;
9 | width: 100%;
10 | height: 100%;
11 | z-index: 100;
12 | border-radius: 10px;
13 | overflow: hidden;
14 | `;
15 |
16 | export const Cover = styled.View`
17 | height: 142px;
18 | background: black;
19 | justify-content: center;
20 | align-items: center;
21 | `;
22 |
23 | export const Image = styled.Image`
24 | position: absolute;
25 | height: 100%;
26 | width: 100%;
27 | `;
28 |
29 | export const Title = styled.Text`
30 | color: #fff;
31 | font-size: 24px;
32 | font-weight: 600;
33 | `;
34 |
35 | export const Subtitle = styled.Text`
36 | color: rgba(255, 255, 255, 0.7);
37 | font-size: 13px;
38 | margin-top: 8px;
39 | `;
40 |
41 | export const Content = styled.View`
42 | height: ${height}px;
43 | background: #f0f3f5;
44 | padding: 50px;
45 | `;
46 |
47 | export const CloseView = styled.View`
48 | width: 44px;
49 | height: 44px;
50 | border-radius: 22px;
51 | background: #fff;
52 | justify-content: center;
53 | align-items: center;
54 | align-self: center;
55 |
56 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.15);
57 | `;
58 |
59 | export const Touchable = styled.TouchableOpacity`
60 | position: absolute;
61 | top: 120px;
62 | left: 50%;
63 | margin-left: -22px;
64 | z-index: 1;
65 | `;
66 |
67 | export const styles = StyleSheet.create({
68 | container: {
69 | position: "absolute",
70 | backgroundColor: "white",
71 | width: "100%",
72 | height: "100%",
73 | zIndex: 100,
74 | borderRadius: 10,
75 | overflow: "hidden",
76 | },
77 | });
78 |
79 | export const ButtonMenu = styled.TouchableOpacity``;
80 |
--------------------------------------------------------------------------------
/src/components/MenuItem/index.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { Ionicons } from "@expo/vector-icons";
3 | import { Container, IconView, Content, Title, Text } from "./styles";
4 |
5 | export default function MenuItem(props) {
6 | return (
7 |
8 |
9 |
10 |
11 |
12 | {props.title}
13 | {props.text}
14 |
15 |
16 | );
17 | }
18 |
--------------------------------------------------------------------------------
/src/components/MenuItem/styles.js:
--------------------------------------------------------------------------------
1 | import styled from "styled-components/native";
2 |
3 | export const Container = styled.View`
4 | flex-direction: row;
5 | margin: 15px 0;
6 | `;
7 |
8 | export const IconView = styled.View`
9 | width: 32px;
10 | height: 32px;
11 | justify-content: center;
12 | align-items: center;
13 | `;
14 |
15 | export const Content = styled.View`
16 | padding-left: 20px;
17 | `;
18 |
19 | export const Title = styled.Text`
20 | color: #3c4560;
21 | font-size: 22px;
22 | font-weight: 600;
23 | `;
24 |
25 | export const Text = styled.Text`
26 | color: #3c4560;
27 | font-size: 16px;
28 | font-weight: 600;
29 | opacity: 0.6;
30 | margin-top: 5px;
31 | `;
32 |
--------------------------------------------------------------------------------
/src/components/ModalLogin/index.js:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from "react";
2 | import {
3 | TouchableWithoutFeedback,
4 | Keyboard,
5 | Alert,
6 | Animated,
7 | Dimensions,
8 | } from "react-native";
9 | import { BlurView } from "expo-blur";
10 | import firebase from "../../firebase";
11 |
12 | import Success from "../Success";
13 | import Loading from "../Loading";
14 | import { store } from "../../store";
15 | import {
16 | Container,
17 | Modal,
18 | Logo,
19 | Text,
20 | TextInput,
21 | Button,
22 | ButtonText,
23 | IconEmail,
24 | IconPassword,
25 | } from "./styles";
26 |
27 | const { height } = Dimensions.get("window");
28 |
29 | export default function ModalLogin() {
30 | const [email, setEmail] = useState("");
31 | const [password, setPassword] = useState("");
32 | const [successful, setSuccessful] = useState(false);
33 | const [loading, setLoading] = useState(false);
34 | const [top, setTop] = useState(new Animated.Value(height));
35 | const [scale, setScale] = useState(new Animated.Value(1.3));
36 | const [translateY, setTranslateY] = useState(new Animated.Value(0));
37 |
38 | const defaultIconEmail = require("../../../assets/icon-email.png");
39 | const defaultIconPassword = require("../../../assets/icon-password.png");
40 |
41 | const [iconEmail, setIconEmail] = useState(defaultIconEmail);
42 | const [iconPassword, setIconPassword] = useState(defaultIconPassword);
43 |
44 | useEffect(() => {
45 | if (store.getState().app.action === "openLogin") {
46 | Animated.timing(top, {
47 | toValue: 0,
48 | duration: 0,
49 | useNativeDriver: false,
50 | }).start();
51 |
52 | Animated.spring(scale, {
53 | toValue: 1,
54 | duration: 0,
55 | useNativeDriver: false,
56 | }).start();
57 |
58 | Animated.timing(translateY, {
59 | toValue: 0,
60 | duration: 0,
61 | useNativeDriver: false,
62 | }).start();
63 | }
64 |
65 | if (store.getState().app.action === "closeLogin") {
66 | setTimeout(() => {
67 | Animated.timing(top, {
68 | toValue: height,
69 | duration: 0,
70 | useNativeDriver: false,
71 | }).start();
72 |
73 | Animated.spring(scale, {
74 | toValue: 1.3,
75 | duration: 0,
76 | useNativeDriver: false,
77 | }).start();
78 | }, 500);
79 |
80 | Animated.timing(translateY, {
81 | toValue: 1000,
82 | duration: 500,
83 | useNativeDriver: false,
84 | }).start();
85 | }
86 | }, [store.getState().app.action]);
87 |
88 | function handleLogin() {
89 | setLoading(true);
90 |
91 | firebase
92 | .auth()
93 | .signInWithEmailAndPassword(email, password)
94 | .catch(function (err) {
95 | Alert.alert("Error", err.message);
96 | })
97 | .then((response) => {
98 | setLoading(false);
99 |
100 | if (response) {
101 | setSuccessful(true);
102 |
103 | Alert.alert("Congrats", "You've logged successfully");
104 |
105 | store.dispatch({
106 | type: "SET_NAME",
107 | name: response.user.email,
108 | });
109 |
110 | setTimeout(() => {
111 | store.dispatch({ type: "CLOSE_LOGIN" });
112 | setSuccessful(false);
113 | }, 1000);
114 | }
115 | });
116 | }
117 |
118 | function focusEmail() {
119 | setIconEmail(require("../../../assets/icon-email-animated.gif"));
120 | setIconPassword(defaultIconPassword);
121 | }
122 |
123 | function focusPassword() {
124 | setIconPassword(require("../../../assets/icon-password-animated.gif"));
125 | setIconEmail(defaultIconEmail);
126 | }
127 |
128 | function tapBackground() {
129 | Keyboard.dismiss();
130 |
131 | store.dispatch({
132 | type: "CLOSE_LOGIN",
133 | });
134 | }
135 |
136 | return (
137 |
138 |
139 |
148 |
149 |
150 |
153 |
154 | Start Learning. Access Pro Content
155 |
156 | setEmail(text)}
161 | onFocus={focusEmail}
162 | />
163 | setPassword(text)}
167 | onFocus={focusPassword}
168 | />
169 |
170 |
171 |
172 |
173 |
176 |
177 |
178 |
179 |
180 | );
181 | }
182 |
183 | const AnimatedContainer = Animated.createAnimatedComponent(Container);
184 |
185 | const AnimatedModal = Animated.createAnimatedComponent(Modal);
186 |
--------------------------------------------------------------------------------
/src/components/ModalLogin/styles.js:
--------------------------------------------------------------------------------
1 | import styled from "styled-components/native";
2 |
3 | export const Container = styled.View`
4 | position: absolute;
5 | top: 0;
6 | left: 0;
7 | width: 100%;
8 | height: 100%;
9 | background: rgba(0, 0, 0, 0.75);
10 | justify-content: center;
11 | align-items: center;
12 | `;
13 |
14 | export const Modal = styled.View`
15 | width: 335px;
16 | height: 370px;
17 | background: #fff;
18 | border-radius: 20px;
19 | box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15);
20 | align-items: center;
21 | `;
22 |
23 | export const Logo = styled.Image`
24 | width: 44px;
25 | height: 44px;
26 | margin-top: 50px;
27 | `;
28 |
29 | export const Text = styled.Text`
30 | margin-top: 20px;
31 | font-size: 13px;
32 | font-weight: 600;
33 | text-transform: uppercase;
34 | width: 160px;
35 | text-align: center;
36 | color: #b8bece;
37 | `;
38 |
39 | export const Button = styled.TouchableOpacity`
40 | background: #5263ff;
41 | width: 295px;
42 | height: 50px;
43 | justify-content: center;
44 | align-items: center;
45 | border-radius: 10px;
46 | box-shadow: 0 10px 20px #c2cbff;
47 | margin-top: 20px;
48 | `;
49 |
50 | export const ButtonText = styled.Text`
51 | color: #fff;
52 | font-size: 20px;
53 | font-weight: 600;
54 | text-transform: uppercase;
55 | `;
56 |
57 | export const TextInput = styled.TextInput`
58 | border: 1px solid #dbdfea;
59 | width: 295px;
60 | height: 44px;
61 | border-radius: 10px;
62 | font-size: 17px;
63 | color: #3c4560;
64 | margin-top: 20px;
65 | padding-left: 44px;
66 | `;
67 |
68 | export const IconEmail = styled.Image`
69 | width: 25px;
70 | height: 16px;
71 | position: absolute;
72 | top: 179px;
73 | left: 31px;
74 | `;
75 |
76 | export const IconPassword = styled.Image`
77 | width: 18px;
78 | height: 24px;
79 | position: absolute;
80 | top: 239px;
81 | left: 35px;
82 | `;
83 |
--------------------------------------------------------------------------------
/src/components/NotificationButton/index.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { Container, Bubble, Text } from "./styles";
3 | import { NotificationIcon } from "../Icons";
4 |
5 | export default function NotificationButton() {
6 | return (
7 |
8 |
9 |
10 | 3
11 |
12 |
13 | );
14 | }
15 |
--------------------------------------------------------------------------------
/src/components/NotificationButton/styles.js:
--------------------------------------------------------------------------------
1 | import styled from "styled-components/native";
2 |
3 | export const Container = styled.View`
4 | width: 44px;
5 | height: 44px;
6 | justify-content: center;
7 | align-items: center;
8 | `;
9 |
10 | export const Bubble = styled.View`
11 | width: 16px;
12 | height: 16px;
13 | background: #3c4560;
14 | position: absolute;
15 | top: 0px;
16 | right: 5px;
17 | border-radius: 8px;
18 | justify-content: center;
19 | align-items: center;
20 | border: 1px solid white;
21 | `;
22 |
23 | export const Text = styled.Text`
24 | color: white;
25 | font-size: 12px;
26 | font-weight: 700;
27 | `;
28 |
--------------------------------------------------------------------------------
/src/components/Notifications/index.js:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from "react";
2 | import {
3 | ScrollView,
4 | SafeAreaView,
5 | Animated,
6 | TouchableOpacity,
7 | Dimensions,
8 | } from "react-native";
9 | import {
10 | Container,
11 | CloseButton,
12 | Subtitle,
13 | Wrapper,
14 | Header,
15 | Logo,
16 | Date,
17 | DateContainer,
18 | Item,
19 | Title,
20 | Text,
21 | } from "./styles";
22 | import { useStore } from "react-redux";
23 | import { Ionicons } from "@expo/vector-icons";
24 |
25 | import items from "../../data/notifications";
26 |
27 | let { width } = Dimensions.get("window");
28 | var cardWith = width - 40;
29 | if (width > 500) {
30 | cardWith = 460;
31 | }
32 |
33 | export default function Notifications() {
34 | const [translateY, setTranslateY] = useState(new Animated.Value(30));
35 | const [opacity, setOpacity] = useState(new Animated.Value(0));
36 | const [top, setTop] = useState(new Animated.Value(3000));
37 |
38 | const store = useStore();
39 |
40 | useEffect(() => {
41 | if (store.getState().app.action == "openNotif") {
42 | Animated.parallel([
43 | Animated.spring(translateY, {
44 | toValue: 0,
45 | useNativeDriver: false,
46 | }),
47 | Animated.timing(opacity, {
48 | toValue: 1,
49 | duration: 500,
50 | useNativeDriver: false,
51 | }),
52 | Animated.timing(top, {
53 | toValue: 0,
54 | duration: 0,
55 | useNativeDriver: false,
56 | }),
57 | ]).start();
58 | }
59 |
60 | if (store.getState().app.action == "closeNotif") {
61 | Animated.parallel([
62 | Animated.spring(translateY, {
63 | toValue: 30,
64 | useNativeDriver: false,
65 | }),
66 | Animated.timing(opacity, {
67 | toValue: 0,
68 | duration: 500,
69 | useNativeDriver: false,
70 | }),
71 | Animated.timing(top, {
72 | toValue: 3000,
73 | duration: 0,
74 | useNativeDriver: false,
75 | }),
76 | ]).start();
77 | }
78 | }, [store.getState().app.action]);
79 |
80 | function closeNotif() {
81 | store.dispatch({ type: "CLOSE_NOTIF" });
82 | }
83 |
84 | return (
85 |
86 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 | New
104 | {items.map((item, index) => (
105 |
112 |
113 |
114 | {item.title}
115 |
116 | {item.date}
117 |
118 |
119 | {item.text}
120 |
121 | ))}
122 |
123 |
124 |
125 |
126 | );
127 | }
128 |
129 | const AnimatedItem = Animated.createAnimatedComponent(Item);
130 | const AnimatedContainer = Animated.createAnimatedComponent(Container);
131 |
--------------------------------------------------------------------------------
/src/components/Notifications/styles.js:
--------------------------------------------------------------------------------
1 | import styled from "styled-components/native";
2 | import { Dimensions } from "react-native";
3 |
4 | let { width } = Dimensions.get("window");
5 | var cardWith = width - 40;
6 | if (width > 500) {
7 | cardWith = 460;
8 | }
9 |
10 | export const Container = styled.View`
11 | position: absolute;
12 | top: 0;
13 | left: 0;
14 | width: 100%;
15 | height: 100%;
16 | z-index: 100;
17 | background: #f0f3f5;
18 | `;
19 |
20 | export const CloseButton = styled.View`
21 | width: 44px;
22 | height: 44px;
23 | border-radius: 22px;
24 | background: white;
25 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.15);
26 | justify-content: center;
27 | align-items: center;
28 | margin: 10px;
29 | `;
30 |
31 | export const Wrapper = styled.View`
32 | align-self: center;
33 | width: ${cardWith}px;
34 | padding-top: 50px;
35 | `;
36 |
37 | export const Subtitle = styled.Text`
38 | font-size: 15px;
39 | text-transform: uppercase;
40 | font-weight: 600;
41 | color: #b8bece;
42 | `;
43 |
44 | export const Item = styled.View`
45 | width: 100%;
46 | padding: 20px;
47 | background: white;
48 | border-radius: 10px;
49 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.15);
50 | margin-top: 20px;
51 | `;
52 |
53 | export const Header = styled.View`
54 | flex-direction: row;
55 | align-items: center;
56 | `;
57 |
58 | export const Logo = styled.Image`
59 | width: 24px;
60 | height: 24px;
61 | `;
62 |
63 | export const DateContainer = styled.View`
64 | background: #4775f2;
65 | border-radius: 10px;
66 | flex-direction: row;
67 | align-items: center;
68 | padding: 0 8px;
69 | height: 20px;
70 | position: absolute;
71 | top: 0px;
72 | right: 0px;
73 | `;
74 |
75 | export const Date = styled.Text`
76 | color: white;
77 | font-size: 12px;
78 | font-weight: 600;
79 | text-transform: uppercase;
80 | `;
81 |
82 | export const Title = styled.Text`
83 | font-size: 20px;
84 | color: #3c4560;
85 | font-weight: bold;
86 | margin-left: 8px;
87 | `;
88 |
89 | export const Text = styled.Text`
90 | font-size: 17px;
91 | color: #3c4560;
92 | margin-top: 20px;
93 | line-height: 24px;
94 | `;
95 |
--------------------------------------------------------------------------------
/src/components/Project/index.js:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from "react";
2 | import { Animated, Dimensions, StatusBar } from "react-native";
3 | import { useDispatch } from "react-redux";
4 | import { LinearGradient } from "expo-linear-gradient";
5 | import { store } from "../../store";
6 | import {
7 | Container,
8 | Cover,
9 | Image,
10 | Title,
11 | Author,
12 | Text,
13 | CardTouch,
14 | CloseButton,
15 | Icon,
16 | } from "./styles";
17 |
18 | const { width, height } = Dimensions.get("window");
19 | const tabBarHeight = 83;
20 |
21 | export default function Project(props) {
22 | const [cardWidth, setCardWidth] = useState(new Animated.Value(315));
23 | const [cardHeight, setCardHeight] = useState(new Animated.Value(460));
24 | const [titleTop, setTitleTop] = useState(new Animated.Value(20));
25 | const [buttonOpacity, setButtonOpacity] = useState(new Animated.Value(0));
26 | const [cardOpened, setCardOpened] = useState(false);
27 | const [textHeight, setTextHeight] = useState(new Animated.Value(100));
28 |
29 | const dispatch = useDispatch();
30 |
31 | useEffect(() => {
32 | if (cardOpened) {
33 | store.dispatch({ type: "OPEN_CARD" });
34 | } else {
35 | store.dispatch({ type: "CLOSE_CARD" });
36 | }
37 | }, [cardOpened]);
38 |
39 | function openCard() {
40 | if (!props.canOpen) return;
41 |
42 | Animated.spring(cardWidth, {
43 | toValue: width,
44 | useNativeDriver: false,
45 | }).start();
46 | Animated.spring(cardHeight, {
47 | toValue: height - tabBarHeight,
48 | useNativeDriver: false,
49 | }).start();
50 | Animated.spring(titleTop, { toValue: 40, useNativeDriver: false }).start();
51 | Animated.timing(buttonOpacity, {
52 | toValue: 1,
53 | useNativeDriver: false,
54 | }).start();
55 |
56 | Animated.spring(textHeight, {
57 | toValue: 1000,
58 | useNativeDriver: false,
59 | }).start();
60 |
61 | StatusBar.setHidden(true);
62 | setCardOpened(true);
63 | }
64 |
65 | function closeCard() {
66 | Animated.spring(cardWidth, {
67 | toValue: 315,
68 | useNativeDriver: false,
69 | }).start();
70 | Animated.spring(cardHeight, {
71 | toValue: 460,
72 | useNativeDriver: false,
73 | }).start();
74 | Animated.spring(titleTop, { toValue: 20, useNativeDriver: false }).start();
75 | Animated.timing(buttonOpacity, {
76 | toValue: 0,
77 | useNativeDriver: false,
78 | }).start();
79 |
80 | Animated.spring(textHeight, {
81 | toValue: 100,
82 | useNativeDriver: false,
83 | }).start();
84 |
85 | StatusBar.setHidden(false);
86 | setCardOpened(false);
87 | }
88 |
89 | return (
90 |
91 |
92 |
93 |
94 | {props.title}
95 | by {props.author}
96 |
97 | {props.text}
98 |
99 |
108 |
109 |
113 |
114 |
115 |
116 |
117 | );
118 | }
119 |
120 | const AnimatedContainer = Animated.createAnimatedComponent(Container);
121 |
122 | const AnimatedTitle = Animated.createAnimatedComponent(Title);
123 |
124 | const AnimatedText = Animated.createAnimatedComponent(Text);
125 |
126 | const AnimatedCloseButton = Animated.createAnimatedComponent(CloseButton);
127 |
128 | const AnimatedLinearGradient = Animated.createAnimatedComponent(LinearGradient);
129 |
--------------------------------------------------------------------------------
/src/components/Project/styles.js:
--------------------------------------------------------------------------------
1 | import styled from "styled-components/native";
2 | import { Ionicons } from "@expo/vector-icons";
3 |
4 | export const Container = styled.View`
5 | width: 315px;
6 | height: 460px;
7 | border-radius: 14px;
8 | background-color: white;
9 | box-shadow: 0 10px 20px rgba(0, 0, 0, 0.15);
10 | `;
11 |
12 | export const Cover = styled.View`
13 | height: 290px;
14 | border-top-left-radius: 14px;
15 | border-top-right-radius: 14px;
16 | overflow: hidden;
17 | `;
18 |
19 | export const Image = styled.Image`
20 | width: 100%;
21 | height: 290px;
22 | `;
23 |
24 | export const Title = styled.Text`
25 | position: absolute;
26 | top: 20px;
27 | left: 20px;
28 | font-size: 24px;
29 | font-weight: bold;
30 | color: white;
31 | width: 300px;
32 | `;
33 |
34 | export const Author = styled.Text`
35 | position: absolute;
36 | bottom: 20px;
37 | left: 20px;
38 | color: rgba(255, 255, 255, 0.8);
39 | font-size: 15px;
40 | font-weight: 600;
41 | text-transform: uppercase;
42 | `;
43 |
44 | export const Text = styled.Text`
45 | font-size: 17px;
46 | margin: 20px;
47 | line-height: 24px;
48 | color: #3c4560;
49 | `;
50 |
51 | export const CardTouch = styled.TouchableWithoutFeedback``;
52 |
53 | export const CloseButton = styled.TouchableOpacity`
54 | width: 32px;
55 | height: 32px;
56 | background: #fff;
57 | border-radius: 16px;
58 | justify-content: center;
59 | align-items: center;
60 |
61 | position: absolute;
62 | top: 20px;
63 | right: 20px;
64 | `;
65 |
66 | export const Icon = styled(Ionicons)``;
67 |
--------------------------------------------------------------------------------
/src/components/Success/index.js:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useRef, useState } from "react";
2 | import { Animated, Dimensions } from "react-native";
3 | import { Container } from "./styles";
4 | import LottieView from "lottie-react-native";
5 |
6 | const { height } = Dimensions.get("window");
7 |
8 | export default function Success(props) {
9 | const [top, setTop] = useState(new Animated.Value(0));
10 | const [opacity, setOpacity] = useState(new Animated.Value(0));
11 |
12 | useEffect(() => {
13 | if (props.isActive) {
14 | Animated.timing(top, {
15 | toValue: 0,
16 | duration: 0,
17 | useNativeDriver: false,
18 | }).start();
19 | Animated.timing(opacity, {
20 | toValue: 1,
21 | useNativeDriver: false,
22 | }).start();
23 |
24 | animationRef.current.play();
25 | } else {
26 | Animated.timing(top, {
27 | toValue: height,
28 | duration: 0,
29 | useNativeDriver: false,
30 | }).start();
31 | Animated.timing(opacity, {
32 | toValue: 0,
33 | useNativeDriver: false,
34 | }).start();
35 |
36 | animationRef.current.loop = false;
37 | }
38 | }, [props.isActive]);
39 |
40 | const animationRef = useRef();
41 |
42 | return (
43 |
49 |
55 |
56 | );
57 | }
58 |
59 | const AnimatedContainer = Animated.createAnimatedComponent(Container);
60 |
--------------------------------------------------------------------------------
/src/components/Success/styles.js:
--------------------------------------------------------------------------------
1 | import styled from "styled-components/native";
2 |
3 | export const Container = styled.View`
4 | width: 100%;
5 | height: 100%;
6 | background: rgba(255, 255, 255, 0.9);
7 | justify-content: center;
8 | align-items: center;
9 | position: absolute;
10 | top: 0;
11 | left: 0;
12 | `;
13 |
--------------------------------------------------------------------------------
/src/config/ReactotronConfig.js:
--------------------------------------------------------------------------------
1 | import Reactotron from "reactotron-react-native";
2 | import { reactotronRedux } from "reactotron-redux";
3 |
4 | const reactotron = Reactotron.configure({ name: "Desgin Code" })
5 | .use(reactotronRedux())
6 | .useReactNative()
7 | .connect(); //Don't forget about me!
8 |
9 | export default reactotron;
10 |
--------------------------------------------------------------------------------
/src/data/cards.js:
--------------------------------------------------------------------------------
1 | const cards = [
2 | {
3 | title: "React Native Course",
4 | image: require("../../assets/background11.jpg"),
5 | caption: "1 of 12 sections",
6 | subtitle: "React Native",
7 | logo: require("../../assets/logo-react.png"),
8 | },
9 | {
10 | title: "Styled Components",
11 | image: require("../../assets/background12.jpg"),
12 | caption: "2 of 12 sections",
13 | subtitle: "React Native",
14 | logo: require("../../assets/logo-react.png"),
15 | },
16 | {
17 | title: "Props and Icons",
18 | image: require("../../assets/background13.jpg"),
19 | caption: "3 of 12 sections",
20 | subtitle: "React Native",
21 | logo: require("../../assets/logo-react.png"),
22 | },
23 | {
24 | title: "Static Data and Loop",
25 | image: require("../../assets/background14.jpg"),
26 | caption: "4 of 12 sections",
27 | subtitle: "React Native",
28 | logo: require("../../assets/logo-react.png"),
29 | },
30 | ];
31 |
32 | export default cards;
33 |
--------------------------------------------------------------------------------
/src/data/courses.js:
--------------------------------------------------------------------------------
1 | const courses = [
2 | {
3 | title: "Prototype in InVision Studio",
4 | subtitle: "10 sections",
5 | image: require("../../assets/background13.jpg"),
6 | logo: require("../../assets/logo-studio.png"),
7 | author: "Meng To",
8 | avatar: require("../../assets/avatar.jpg"),
9 | caption: "Design and interactive prototype",
10 | },
11 | {
12 | title: "React for Designers",
13 | subtitle: "12 sections",
14 | image: require("../../assets/background11.jpg"),
15 | logo: require("../../assets/logo-react.png"),
16 | author: "Meng To",
17 | avatar: require("../../assets/avatar.jpg"),
18 | caption: "Learn to design and code a React site",
19 | },
20 | {
21 | title: "Design and Code with Framer X",
22 | subtitle: "10 sections",
23 | image: require("../../assets/background14.jpg"),
24 | logo: require("../../assets/logo-framerx.png"),
25 | author: "Meng To",
26 | avatar: require("../../assets/avatar.jpg"),
27 | caption: "Create powerful design and code components for your app",
28 | },
29 | {
30 | title: "Design System in Figma",
31 | subtitle: "10 sections",
32 | image: require("../../assets/background6.jpg"),
33 | logo: require("../../assets/logo-figma.png"),
34 | author: "Meng To",
35 | avatar: require("../../assets/avatar.jpg"),
36 | caption:
37 | "Complete guide to designing a site using a collaborative design tool",
38 | },
39 | ];
40 |
41 | export default courses;
42 |
--------------------------------------------------------------------------------
/src/data/logos.js:
--------------------------------------------------------------------------------
1 | const logos = [
2 | {
3 | image: require("../../assets/logo-framerx.png"),
4 | text: "Framer X",
5 | },
6 | {
7 | image: require("../../assets/logo-figma.png"),
8 | text: "Figma",
9 | },
10 | {
11 | image: require("../../assets/logo-studio.png"),
12 | text: "Studio",
13 | },
14 | {
15 | image: require("../../assets/logo-react.png"),
16 | text: "React",
17 | },
18 | {
19 | image: require("../../assets/logo-swift.png"),
20 | text: "Swift",
21 | },
22 | {
23 | image: require("../../assets/logo-sketch.png"),
24 | text: "Sketch",
25 | },
26 | ];
27 |
28 | export default logos;
29 |
--------------------------------------------------------------------------------
/src/data/notifications.js:
--------------------------------------------------------------------------------
1 | const notifications = [
2 | {
3 | logo: "https://cl.ly/a4d00a918f39/download/logo-vue.png",
4 | title: "Vue.js for Designers",
5 | text:
6 | "Make a dashboard web-app with a complete login system, dark mode, and animated charts for your data.",
7 | date: "23 Jan",
8 | },
9 | {
10 | logo: "https://cl.ly/5c470805a500/download/logo-invision.png",
11 | title: "InVision Studio",
12 | text:
13 | "Learn how to prototype interactions directly in the design tool in this 10-section course.",
14 | date: "27 Nov",
15 | },
16 | {
17 | logo: "https://cl.ly/cc8368bef551/download/logo-framerx.png",
18 | title: "Framer X",
19 | text: "Create production-ready React components right in the design tool.",
20 | date: "26 SEP",
21 | },
22 | {
23 | logo: "https://cl.ly/c01bb29804bd/download/logo-figma.png",
24 | title: "Design System",
25 | text:
26 | "Complete guide to designing a site using a collaborative and powerful design system.",
27 | date: "4 SEP",
28 | },
29 | ];
30 |
31 | export default notifications;
32 |
--------------------------------------------------------------------------------
/src/data/projects.js:
--------------------------------------------------------------------------------
1 | const projects = [
2 | {
3 | title: "Price Tag",
4 | image: require("./../../assets/background5.jpg"),
5 | author: "Liu Yi",
6 | text:
7 | "Thanks to Design+Code, I improved my design skill and learned to do animations for my app Price Tag, a top news app in China.learned to do animations for my app Price Tag, a top news app in China.",
8 | },
9 | {
10 | title: "The DM App - Ananoumous Chat",
11 | image: require("./../../assets/background6.jpg"),
12 | author: "Chad Goodman",
13 | text:
14 | "Design+Code was the first resource I used when breaking into software. I went from knowing nothing about design or code to building a production ready app from scratch. ",
15 | },
16 | {
17 | title: "Nikhiljay",
18 | image: require("./../../assets/background7.jpg"),
19 | author: "Nikhil D'Souza",
20 | text:
21 | "Recently finished the React course by @Mengto, and I 10/10 would recommend. I already rewrote my personal website in @reactjs and I'm very excited with it.",
22 | },
23 | ];
24 |
25 | export default projects;
26 |
--------------------------------------------------------------------------------
/src/firebase.js:
--------------------------------------------------------------------------------
1 | import * as firebase from "firebase";
2 |
3 | // Optionally import the services that you want to use
4 | //import "firebase/auth";
5 | //import "firebase/database";
6 | //import "firebase/firestore";
7 | //import "firebase/functions";
8 | //import "firebase/storage";
9 |
10 | // Initialize Firebase
11 | const firebaseConfig = {
12 | apiKey: "AIzaSyA6M3FP4Bdf2gxMps8hcEjlYRuEhsjjMkE",
13 | authDomain: "designcode-37410.firebaseapp.com",
14 | databaseURL: "https://designcode-37410.firebaseio.com",
15 | projectId: "designcode-37410",
16 | storageBucket: "designcode-37410.appspot.com",
17 | messagingSenderId: "305894725642",
18 | appId: "1:305894725642:web:454affef7d70a40c9167f3",
19 | };
20 |
21 | firebase.initializeApp(firebaseConfig);
22 |
23 | export default firebase;
24 |
--------------------------------------------------------------------------------
/src/navigator/CoursesStack.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { createStackNavigator } from "@react-navigation/stack";
3 |
4 | import Courses from "../screens/Courses";
5 |
6 | const Stack = createStackNavigator();
7 |
8 | export default function CoursesStack() {
9 | return (
10 |
16 |
17 |
18 | );
19 | }
20 |
--------------------------------------------------------------------------------
/src/navigator/HomeStack.js:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from "react";
2 | import { createStackNavigator } from "@react-navigation/stack";
3 | import { useRoute, useNavigation } from "@react-navigation/native";
4 |
5 | import Home from "../screens/Home";
6 | import Section from "../screens/Section";
7 | import VideoScreen from "../screens/Video";
8 |
9 | const Stack = createStackNavigator();
10 |
11 | export default function HomeStack() {
12 | const route = useRoute();
13 | const navigation = useNavigation();
14 |
15 | if (route.state && route.state.index > 0) {
16 | navigation.setOptions({ tabBarVisible: false });
17 | } else {
18 | navigation.setOptions({ tabBarVisible: true });
19 | }
20 |
21 | return (
22 |
28 |
29 |
30 |
31 |
32 | );
33 | }
34 |
--------------------------------------------------------------------------------
/src/navigator/ProjectsStack.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { createStackNavigator } from "@react-navigation/stack";
3 |
4 | import Projects from "../screens/Projects";
5 |
6 | const Stack = createStackNavigator();
7 |
8 | export default function ProjectStack() {
9 | return (
10 |
16 |
17 |
18 | );
19 | }
20 |
--------------------------------------------------------------------------------
/src/navigator/index.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { NavigationContainer } from "@react-navigation/native";
3 | import { createBottomTabNavigator } from "@react-navigation/bottom-tabs";
4 | import { Ionicons } from "@expo/vector-icons";
5 |
6 | import HomeStack from "./HomeStack";
7 | import ProjectsStack from "./ProjectsStack";
8 | import CoursesStack from "./CoursesStack";
9 |
10 | const Tab = createBottomTabNavigator();
11 |
12 | const icons = {
13 | Home: {
14 | lib: Ionicons,
15 | name: "ios-home",
16 | },
17 | Courses: {
18 | lib: Ionicons,
19 | name: "ios-albums",
20 | },
21 | Projects: {
22 | lib: Ionicons,
23 | name: "ios-folder",
24 | },
25 | };
26 |
27 | export default function Navigator() {
28 | return (
29 |
30 | ({
32 | headerShown: false,
33 | })}
34 | tabBarOptions={{
35 | activeTintColor: "#4775f2",
36 | inactiveTintColor: "#ccc",
37 | }}
38 | mode="modal"
39 | >
40 | {
46 | return ;
47 | },
48 | }}
49 | />
50 | {
56 | return ;
57 | },
58 | }}
59 | />
60 | {
66 | return ;
67 | },
68 | }}
69 | />
70 |
71 |
72 | );
73 | }
74 |
--------------------------------------------------------------------------------
/src/screens/Courses/index.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { Dimensions, ScrollView } from "react-native";
3 | import { LinearGradient } from "expo-linear-gradient";
4 |
5 | import CourseSection from "../../components/CourseSection";
6 | import CoursesList from "../../components/CoursesList";
7 |
8 | import {
9 | Container,
10 | Background,
11 | Hero,
12 | Logo,
13 | Caption,
14 | Title,
15 | Subtitle,
16 | Sections,
17 | SectionScrollView,
18 | Author,
19 | Name,
20 | Avatar,
21 | } from "./styles";
22 |
23 | let { width } = Dimensions.get("window");
24 |
25 | export default function Courses() {
26 | return (
27 |
28 |
29 |
30 |
31 |
35 |
36 | 12 Sections
37 | React Native for Designers
38 |
39 |
43 | {sections.map((section, index) => (
44 |
50 | ))}
51 |
52 |
53 |
54 |
55 | Taught by Meng To
56 |
57 |
58 | Latest Courses
59 |
60 |
61 |
62 | );
63 | }
64 |
65 | const sections = [
66 | {
67 | title: "React Native for Designers",
68 | progress: 0.2,
69 | image: require("../../../assets/background1.jpg"),
70 | },
71 | {
72 | title: "Styled Components",
73 | progress: 0.3,
74 | image: require("../../../assets/background2.jpg"),
75 | },
76 | {
77 | title: "Assets, Icons and SVG",
78 | progress: 0.9,
79 | image: require("../../../assets/background3.jpg"),
80 | },
81 | {
82 | title: "Props and Data",
83 | progress: 0.5,
84 | image: require("../../../assets/background4.jpg"),
85 | },
86 | {
87 | title: "States and Layout Animation",
88 | progress: 0.1,
89 | image: require("../../../assets/background6.jpg"),
90 | },
91 | ];
92 |
--------------------------------------------------------------------------------
/src/screens/Courses/styles.js:
--------------------------------------------------------------------------------
1 | import styled from "styled-components/native";
2 | import { Dimensions } from "react-native";
3 |
4 | let { width } = Dimensions.get("window");
5 |
6 | export const Container = styled.View`
7 | background: #f0f3f5;
8 | `;
9 |
10 | export const ScrollView = styled.ScrollView`
11 | width: 100%;
12 | height: 100%;
13 | `;
14 |
15 | export const Hero = styled.View`
16 | height: 460px;
17 | background: #3c4560;
18 | `;
19 |
20 | export const Background = styled.Image`
21 | position: absolute;
22 | top: 0;
23 | left: 0;
24 | width: ${width}px;
25 | height: 460px;
26 | `;
27 |
28 | export const Logo = styled.Image`
29 | width: 48px;
30 | height: 48px;
31 | margin-top: 50px;
32 | margin-left: 20px;
33 | align-self: center;
34 | `;
35 |
36 | export const Caption = styled.Text`
37 | font-size: 15px;
38 | font-weight: 600;
39 | text-transform: uppercase;
40 | color: #b8bece;
41 | margin-top: 20px;
42 | margin-left: 20px;
43 | `;
44 |
45 | export const Title = styled.Text`
46 | font-size: 32px;
47 | color: white;
48 | font-weight: 600;
49 | margin-top: 4px;
50 | margin-left: 20px;
51 | width: 220px;
52 | `;
53 |
54 | export const Sections = styled.View`
55 | margin-top: 20px;
56 | flex-direction: row;
57 | `;
58 |
59 | export const SectionScrollView = styled.ScrollView`
60 | padding: 10px 0;
61 | `;
62 |
63 | export const Author = styled.View`
64 | flex-direction: row;
65 | margin-top: 10px;
66 | align-items: center;
67 | margin-left: 20px;
68 | `;
69 |
70 | export const Avatar = styled.Image`
71 | width: 22px;
72 | height: 22px;
73 | border-radius: 11px;
74 | background: white;
75 | `;
76 |
77 | export const Name = styled.Text`
78 | margin-left: 8px;
79 | color: #b8bece;
80 | `;
81 |
82 | export const Subtitle = styled.Text`
83 | font-size: 15px;
84 | text-transform: uppercase;
85 | font-weight: 600;
86 | color: #b8bece;
87 | margin: 20px 0 0 20px;
88 | `;
89 |
--------------------------------------------------------------------------------
/src/screens/Home/index.js:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useState } from "react";
2 | import {
3 | StatusBar,
4 | Animated,
5 | Easing,
6 | StyleSheet,
7 | Platform,
8 | TouchableOpacity,
9 | } from "react-native";
10 | import { useDispatch, useSelector } from "react-redux";
11 | import { useNavigation } from "@react-navigation/native";
12 | import gql from "graphql-tag";
13 | import { useQuery } from "@apollo/react-hooks";
14 |
15 | import Card from "../../components/Card";
16 | import Course from "../../components/Course";
17 | import Menu from "../../components/Menu";
18 | import Notifications from "../../components/Notifications";
19 | import Logo from "../../components/Logo";
20 | import Avatar from "../../components/Avatar";
21 | import logos from "../../data/logos";
22 | import courses from "../../data/courses";
23 | import {
24 | TitleBar,
25 | Title,
26 | Name,
27 | Subtitle,
28 | ScrollContainer,
29 | SaveAreaContainer,
30 | ScrollLogo,
31 | ScrollCards,
32 | ButtonAvatar,
33 | RootView,
34 | ButtonCard,
35 | CardsContainer,
36 | CoursesContainer,
37 | } from "./styles";
38 | import { store } from "../../store";
39 | import ModalLogin from "../../components/ModalLogin";
40 | import NotificationButton from "../../components/NotificationButton";
41 |
42 | const CardsQuery = gql`
43 | {
44 | cardsCollection {
45 | items {
46 | title
47 | subtitle
48 | image {
49 | title
50 | description
51 | contentType
52 | fileName
53 | size
54 | url
55 | width
56 | height
57 | }
58 | subtitle
59 | caption
60 | logo {
61 | title
62 | description
63 | contentType
64 | fileName
65 | size
66 | url
67 | width
68 | height
69 | }
70 | content
71 | }
72 | }
73 | }
74 | `;
75 |
76 | export default function Home() {
77 | const [scale, setScale] = useState(new Animated.Value(1));
78 | const [opacity, setOpacity] = useState(new Animated.Value(1));
79 |
80 | const dispatch = useDispatch();
81 | const navigation = useNavigation();
82 | const action = useSelector((state) => state.app.action);
83 | const name = store.getState().app.name;
84 |
85 | const { loading, error, data } = useQuery(CardsQuery);
86 |
87 | function handleOpenMenu() {
88 | store.dispatch({
89 | type: "OPEN_MENU",
90 | });
91 | }
92 |
93 | function handleOpenLogin() {
94 | store.dispatch({
95 | type: "OPEN_LOGIN",
96 | });
97 | }
98 |
99 | useEffect(() => {
100 | if (Platform.OS === "android") StatusBar.setHidden(false);
101 | }, []);
102 |
103 | useEffect(() => {
104 | if (action == "openMenu") {
105 | Animated.timing(scale, {
106 | toValue: 0.9,
107 | duration: 300,
108 | easing: Easing.in(),
109 | useNativeDriver: false,
110 | }).start();
111 |
112 | Animated.spring(opacity, {
113 | toValue: 0.5,
114 | useNativeDriver: false,
115 | }).start();
116 |
117 | StatusBar.setBarStyle("light-content", true);
118 | }
119 |
120 | if (action == "closeMenu") {
121 | Animated.timing(scale, {
122 | toValue: 1,
123 | duration: 300,
124 | easing: Easing.in(),
125 | useNativeDriver: false,
126 | }).start();
127 | Animated.spring(opacity, {
128 | toValue: 1,
129 | useNativeDriver: false,
130 | }).start();
131 |
132 | StatusBar.setBarStyle("dark-content", true);
133 | }
134 | }, [action]);
135 |
136 | function handleAvatar() {
137 | if (store.getState().app.name) {
138 | store.dispatch({ type: "OPEN_MENU" });
139 | } else {
140 | store.dispatch({ type: "OPEN_LOGIN" });
141 | }
142 | }
143 |
144 | function openNotif() {
145 | store.dispatch({ type: "OPEN_NOTIF" });
146 | }
147 |
148 | return (
149 |
150 |
151 |
152 |
161 |
162 |
163 |
164 |
165 |
166 |
167 | Welcome back,
168 | {name}
169 |
173 |
174 |
175 |
176 |
177 | {logos.map((item, index) => (
178 |
179 | ))}
180 |
181 | Continue Learning
182 |
183 |
184 | {data &&
185 | data.cardsCollection.items.map((item, index) => (
186 |
190 | navigation.navigate("Section", {
191 | section: item,
192 | })
193 | }
194 | >
195 |
203 |
204 | ))}
205 |
206 |
207 | Popular Courses
208 |
209 | {courses.map((item, index) => (
210 |
220 | ))}
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 | );
229 | }
230 |
231 | const styles = StyleSheet.create({
232 | animatedContainer: {
233 | flex: 1,
234 | backgroundColor: "#f0f3f5",
235 | borderTopLeftRadius: 10,
236 | borderTopRightRadius: 10,
237 | overflow: "hidden",
238 | },
239 | });
240 |
--------------------------------------------------------------------------------
/src/screens/Home/styles.js:
--------------------------------------------------------------------------------
1 | import styled from "styled-components/native";
2 |
3 | export const Container = styled.View`
4 | flex: 1;
5 | background-color: #f0f3f5;
6 | `;
7 |
8 | export const CardsContainer = styled.View`
9 | flex-direction: row;
10 | padding-left: 5px;
11 | `;
12 |
13 | export const CoursesContainer = styled.View`
14 | flex-direction: row;
15 | flex-wrap: wrap;
16 | padding-left: 10px;
17 | `;
18 |
19 | export const RootView = styled.View`
20 | background: black;
21 | flex: 1;
22 | `;
23 |
24 | export const TitleBar = styled.View`
25 | width: 100%;
26 | margin-top: 40px;
27 | padding-left: 80px;
28 | `;
29 |
30 | export const ButtonAvatar = styled.TouchableOpacity`
31 | margin-left: 20px;
32 | position: absolute;
33 | top: 0;
34 | left: 0;
35 | `;
36 |
37 | export const Title = styled.Text`
38 | font-size: 16px;
39 | color: #b8bece;
40 | font-weight: 500;
41 | `;
42 |
43 | export const Name = styled.Text`
44 | font-size: 20px;
45 | color: #3c4560;
46 | font-weight: 700;
47 | `;
48 |
49 | export const Subtitle = styled.Text`
50 | color: #b8b3ce;
51 | font-weight: 600;
52 | font-size: 15px;
53 | margin-left: 20px;
54 | margin-top: 20px;
55 | text-transform: uppercase;
56 | `;
57 |
58 | export const SaveAreaContainer = styled.SafeAreaView``;
59 |
60 | export const ScrollContainer = styled.ScrollView`
61 | padding-bottom: 30px;
62 | `;
63 |
64 | export const ScrollLogo = styled.ScrollView`
65 | flex-direction: row;
66 | padding: 20px;
67 | padding-left: 12px;
68 | padding-top: 30px;
69 | `;
70 |
71 | export const ScrollCards = styled.ScrollView`
72 | padding-bottom: 30px;
73 | `;
74 |
75 | export const ButtonCard = styled.TouchableOpacity``;
76 |
77 | export const Message = styled.Text``;
78 |
--------------------------------------------------------------------------------
/src/screens/Projects/index.js:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect, useMemo } from "react";
2 | import { PanResponder, Animated } from "react-native";
3 |
4 | import { Container, Mask } from "./styles";
5 | import Project from "../../components/Project";
6 |
7 | import projects from "../../data/projects";
8 | import { store } from "../../store";
9 |
10 | function getNextIndex(index) {
11 | var nextIndex = index + 1;
12 | if (nextIndex > projects.length - 1) {
13 | return 0;
14 | }
15 | return nextIndex;
16 | }
17 |
18 | export default function Projects() {
19 | const [index, setIndex] = useState(0);
20 | const [pan, setPan] = useState(new Animated.ValueXY());
21 | const [maskOpacity, setMaskOpacity] = useState(new Animated.Value(0));
22 | const [scale, setScale] = useState(new Animated.Value(0.9));
23 | const [translateY, setTranslateY] = useState(new Animated.Value(44));
24 | const [thirdScale, setThirdScale] = useState(new Animated.Value(0.8));
25 | const [thirdTranslateY, setThirdTranslateY] = useState(
26 | new Animated.Value(-50)
27 | );
28 |
29 | const action = store.getState().app.action;
30 |
31 | const panResponder = useMemo(() => {
32 | return PanResponder.create({
33 | onMoveShouldSetPanResponder: (event, gestureState) => {
34 | if (gestureState.dx === 0 && gestureState.dy === 0) {
35 | return false;
36 | } else {
37 | if (store.getState().app.action === "openCard") {
38 | } else {
39 | return true;
40 | }
41 | }
42 | },
43 | onPanResponderGrant: () => {
44 | Animated.spring(scale, { toValue: 1, useNativeDriver: false }).start();
45 | Animated.spring(translateY, {
46 | toValue: 0,
47 | useNativeDriver: false, //true
48 | }).start();
49 |
50 | Animated.spring(thirdScale, {
51 | toValue: 0.9,
52 | useNativeDriver: false, //true
53 | }).start();
54 |
55 | Animated.spring(thirdTranslateY, {
56 | toValue: 44,
57 | useNativeDriver: false, //true
58 | }).start();
59 |
60 | Animated.timing(maskOpacity, {
61 | toValue: 1,
62 | useNativeDriver: false, //true
63 | }).start();
64 | },
65 |
66 | onPanResponderMove: Animated.event([null, { dx: pan.x, dy: pan.y }], {
67 | useNativeDriver: false,
68 | }),
69 |
70 | onPanResponderRelease: () => {
71 | const positionY = pan.y.__getValue();
72 |
73 | Animated.timing(maskOpacity, {
74 | toValue: 0,
75 | useNativeDriver: false, //true
76 | }).start();
77 |
78 | if (positionY > 200) {
79 | Animated.timing(pan, {
80 | toValue: { x: 0, y: 1000 },
81 | useNativeDriver: false, //true
82 | }).start(() => {
83 | pan.setValue({ x: 0, y: 0 });
84 | scale.setValue(0.9);
85 | translateY.setValue(44);
86 | thirdScale.setValue(0.8);
87 | thirdTranslateY.setValue(-50);
88 | setIndex(getNextIndex(index));
89 | });
90 | } else {
91 | Animated.spring(pan, {
92 | toValue: { x: 0, y: 0 },
93 | useNativeDriver: false, //true
94 | }).start();
95 |
96 | Animated.spring(scale, {
97 | toValue: 0.9,
98 | useNativeDriver: false, //true
99 | }).start();
100 |
101 | Animated.spring(translateY, {
102 | toValue: 44,
103 | useNativeDriver: false, //true
104 | }).start();
105 |
106 | Animated.spring(thirdScale, {
107 | toValue: 0.8,
108 | useNativeDriver: false, //true
109 | }).start();
110 |
111 | Animated.spring(thirdTranslateY, {
112 | toValue: -50,
113 | useNativeDriver: false, //true
114 | }).start();
115 | }
116 | },
117 | });
118 | }, [index]);
119 |
120 | return (
121 |
122 |
123 |
129 |
136 |
137 |
150 |
156 |
157 |
170 |
176 |
177 |
178 | );
179 | }
180 |
181 | const AnimatedMask = Animated.createAnimatedComponent(Mask);
182 |
--------------------------------------------------------------------------------
/src/screens/Projects/styles.js:
--------------------------------------------------------------------------------
1 | import styled from "styled-components/native";
2 |
3 | export const Container = styled.View`
4 | flex: 1;
5 | background: #f0f3f5;
6 | justify-content: center;
7 | align-items: center;
8 | `;
9 |
10 | export const Mask = styled.View`
11 | position: absolute;
12 | top: 0;
13 | left: 0;
14 | width: 100%;
15 | height: 100%;
16 | background: rgba(0, 0, 0, 0.25);
17 | z-index: -3;
18 | `;
19 |
--------------------------------------------------------------------------------
/src/screens/Section/index.js:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from "react";
2 | import {
3 | Container,
4 | Cover,
5 | Image,
6 | Title,
7 | Caption,
8 | CloseView,
9 | Wrapper,
10 | Logo,
11 | Subtitle,
12 | Content,
13 | ScrollContainer,
14 | PlayWrapper,
15 | PlayView,
16 | } from "./styles";
17 | import { useRoute, useNavigation } from "@react-navigation/native";
18 | import { Ionicons } from "@expo/vector-icons";
19 | import { StatusBar, Linking } from "react-native";
20 | import Markdown from "react-native-showdown";
21 | import { TouchableOpacity } from "react-native-gesture-handler";
22 | import { PlayIcon } from "../../components/Icons";
23 |
24 | function Section() {
25 | const navigation = useNavigation();
26 | const route = useRoute();
27 | const section = route.params.section;
28 |
29 | useEffect(() => {
30 | StatusBar.setBarStyle("light-content", true);
31 |
32 | return StatusBar.setBarStyle("dark-content", true);
33 | }, []);
34 |
35 | return (
36 | <>
37 |
38 |
39 |
40 |
41 |
42 | {
45 | navigation.navigate("Video");
46 | }}
47 | >
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 | {section.subtitle}
56 |
57 | {section.title}
58 | {section.caption}
59 |
60 | navigation.goBack()}>
61 |
67 |
68 |
69 | {
75 | if (event.url != "about:blank") {
76 | Linking.openURL(event.url);
77 | }
78 | }}
79 | />
80 |
81 |
82 |
83 |
84 | >
85 | );
86 | }
87 |
88 | export default Section;
89 |
90 | const htmlStyles = `
91 | * {
92 | font-family: -apple-system, Roboto;
93 | margin: 0;
94 | padding: 0;
95 | font-size: 17px;
96 | font-weight: normal;
97 | color: #3c4560;
98 | line-height: 24px;
99 | }
100 | h2 {
101 | font-size: 20px;
102 | text-transform: uppercase;
103 | color: #b8bece;
104 | font-weight: 600;
105 | margin-top: 50px;
106 | }
107 |
108 | p {
109 | margin-top: 20px;
110 | }
111 |
112 | a {
113 | color: #4775f2;
114 | font-weight: 600;
115 | text-decoration: none;
116 | }
117 |
118 | strong {
119 | font-weight: 700;
120 | }
121 | img {
122 | width: 100%;
123 | border-radius: 10px;
124 | margin-top: 20px;
125 | }
126 | pre {
127 | padding: 20px;
128 | background: #212C4F;
129 | overflow: hidden;
130 | word-wrap: break-word;
131 | border-radius: 10px;
132 | margin-top: 20px;
133 | }
134 |
135 | code {
136 | color: white;
137 | }
138 | `;
139 |
--------------------------------------------------------------------------------
/src/screens/Section/styles.js:
--------------------------------------------------------------------------------
1 | import styled from "styled-components/native";
2 |
3 | export const Container = styled.View`
4 | flex: 1;
5 | background: #fff;
6 | `;
7 |
8 | export const ScrollContainer = styled.ScrollView`
9 | flex: 1;
10 | background: #fff;
11 | `;
12 |
13 | export const Cover = styled.View`
14 | height: 375px;
15 | `;
16 |
17 | export const Image = styled.Image`
18 | width: 100%;
19 | height: 100%;
20 | position: absolute;
21 | `;
22 |
23 | export const Wrapper = styled.View`
24 | flex-direction: row;
25 | align-items: center;
26 | position: absolute;
27 | top: 50px;
28 | left: 20px;
29 | `;
30 |
31 | export const Logo = styled.Image`
32 | width: 24px;
33 | height: 24px;
34 | `;
35 |
36 | export const Subtitle = styled.Text`
37 | font-size: 15px;
38 | font-weight: 600;
39 | color: rgba(255, 255, 255, 0.8);
40 | margin-left: 5px;
41 | text-transform: uppercase;
42 | `;
43 |
44 | export const Title = styled.Text`
45 | font-size: 24px;
46 | color: #fff;
47 | font-weight: 700;
48 | width: 170px;
49 | position: absolute;
50 | top: 88px;
51 | left: 20px;
52 | `;
53 |
54 | export const Caption = styled.Text`
55 | color: #fff;
56 | font-size: 17px;
57 | position: absolute;
58 | bottom: 20px;
59 | left: 20px;
60 | width: 300px;
61 | `;
62 |
63 | export const CloseView = styled.TouchableOpacity`
64 | width: 32px;
65 | height: 32px;
66 | background: #fff;
67 | border-radius: 16px;
68 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.15);
69 | justify-content: center;
70 | align-items: center;
71 | position: absolute;
72 | top: 20px;
73 | right: 20px;
74 | `;
75 |
76 | export const Content = styled.View`
77 | height: 1100px;
78 | padding: 20px;
79 | `;
80 |
81 | export const PlayWrapper = styled.View`
82 | position: absolute;
83 | top: 50%;
84 | left: 50%;
85 | margin-top: -40px;
86 | margin-left: -40px;
87 | `;
88 |
89 | export const PlayView = styled.View`
90 | width: 80px;
91 | height: 80px;
92 | background: rgba(0, 0, 0, 0.5);
93 | border-radius: 40px;
94 | justify-content: center;
95 | align-items: center;
96 | `;
97 |
--------------------------------------------------------------------------------
/src/screens/Video/index.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { Dimensions, TouchableOpacity } from "react-native";
3 | import { Video } from "expo-av";
4 | import { Ionicons } from "@expo/vector-icons";
5 |
6 | import { Container, CloseView } from "./styles";
7 |
8 | let { width } = Dimensions.get("window");
9 |
10 | export default function VideoScreen({ navigation }) {
11 | return (
12 |
13 |
23 |
24 | {
26 | navigation.goBack();
27 | }}
28 | style={{ padding: 20 }}
29 | >
30 |
31 |
32 |
33 |
34 | );
35 | }
36 |
--------------------------------------------------------------------------------
/src/screens/Video/styles.js:
--------------------------------------------------------------------------------
1 | import styled from "styled-components/native";
2 |
3 | export const Container = styled.View`
4 | flex: 1;
5 | background: black;
6 | align-items: center;
7 | justify-content: center;
8 | `;
9 |
10 | export const CloseView = styled.View`
11 | position: absolute;
12 | top: 0px;
13 | right: 12px;
14 | `;
15 |
--------------------------------------------------------------------------------
/src/services/api.js:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 |
3 | const api = axios.create({
4 | baseURL: "https://api.github.com/users/danielsousast",
5 | });
6 |
7 | export default api;
8 |
--------------------------------------------------------------------------------
/src/store/actions/AppActions.js:
--------------------------------------------------------------------------------
1 | import store from "../index";
2 |
3 | export function closeMenu() {
4 | return {
5 | type: "CLOSE_MENU",
6 | };
7 | }
8 |
9 | export function openMenu() {
10 | store.dispatch({
11 | type: "OPEN_CARD",
12 | });
13 | }
14 |
15 | export function closeCard() {
16 | return {
17 | type: "CLOSE_CARD",
18 | };
19 | }
20 |
21 | export function openCard() {
22 | return {
23 | type: "OPEN_CARD",
24 | };
25 | }
26 |
27 | export function setAvatar(avatar) {
28 | return {
29 | type: "SET_AVATAR",
30 | avatar,
31 | };
32 | }
33 |
34 | export function setName(name) {
35 | return {
36 | type: "SET_NAME",
37 | name: name,
38 | };
39 | }
40 |
--------------------------------------------------------------------------------
/src/store/index.js:
--------------------------------------------------------------------------------
1 | import { createStore, applyMiddleware, compose } from "redux";
2 | import thunk from "redux-thunk";
3 | import { persistReducer, persistStore } from "redux-persist";
4 | import Reactotron from "../config/ReactotronConfig";
5 | import reducers from "./reducers";
6 | import AsyncStorage from "@react-native-community/async-storage";
7 |
8 | const persistedReducer = persistReducer(
9 | {
10 | key: "root",
11 | storage: AsyncStorage,
12 | whitelist: ["app"],
13 | },
14 | reducers
15 | );
16 |
17 | const middleware = applyMiddleware(thunk);
18 |
19 | const store = createStore(
20 | persistedReducer,
21 | compose(middleware, Reactotron.createEnhancer())
22 | );
23 |
24 | const persistor = persistStore(store);
25 |
26 | export { store, persistor };
27 |
--------------------------------------------------------------------------------
/src/store/reducers/AppReducer.js:
--------------------------------------------------------------------------------
1 | const initialState = {
2 | action: "",
3 | name: "",
4 | avatar: "https://cl.ly/55da82beb939/download/avatar-default.jpg",
5 | };
6 |
7 | const AppReducer = (state = initialState, action) => {
8 | switch (action.type) {
9 | case "CLOSE_MENU": {
10 | return { ...state, action: "closeMenu" };
11 | }
12 | case "OPEN_MENU": {
13 | return { ...state, action: "openMenu" };
14 | }
15 | case "SET_NAME": {
16 | return { ...state, name: action.name };
17 | }
18 | case "SET_AVATAR": {
19 | return { ...state, avatar: action.avatar };
20 | }
21 | case "CLOSE_CARD": {
22 | return { ...state, action: "closeCard" };
23 | }
24 | case "OPEN_CARD": {
25 | return { ...state, action: "openCard" };
26 | }
27 | case "CLOSE_LOGIN": {
28 | return { ...state, action: "closeLogin" };
29 | }
30 | case "OPEN_LOGIN": {
31 | return { ...state, action: "openLogin" };
32 | }
33 | case "CLOSE_NOTIF": {
34 | return { ...state, action: "closeNotif" };
35 | }
36 | case "OPEN_NOTIF": {
37 | return { ...state, action: "openNotif" };
38 | }
39 | default:
40 | return state;
41 | }
42 | };
43 |
44 | export default AppReducer;
45 |
--------------------------------------------------------------------------------
/src/store/reducers/index.js:
--------------------------------------------------------------------------------
1 | import { combineReducers } from "redux";
2 | import AppReducer from "./AppReducer";
3 |
4 | const rootReducer = combineReducers({
5 | app: AppReducer,
6 | });
7 |
8 | export default rootReducer;
9 |
--------------------------------------------------------------------------------