├── .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 | License 7 |

8 | 9 |

10 | Tecnologias   |    11 | Projeto   |    12 | Como contribuir   |    13 | Licença 14 |

15 | 16 |
17 | 18 |

19 | DesignCode 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 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 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 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /assets/icon-light.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /assets/icon-logout.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/icon-menu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /assets/icon-night.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /assets/icon-notifications.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 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 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /assets/icon-refresh.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /assets/icon-star.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 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 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | ); 23 | } 24 | 25 | export const PlayIcon = (props) => ( 26 | 27 | 33 | 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 |