From d5166a28bfb9bf7b10578817e27ffdc0d1177e62 Mon Sep 17 00:00:00 2001 From: hariom-egov Date: Mon, 18 Oct 2021 14:02:09 +0530 Subject: [PATCH 1/2] all new added pages --- package.json | 6 +- src/App.css | 107 +++++++++++ src/Components/common/Pagination.js | 33 ++++ src/Components/common/ReactTable.js | 142 +++++++++++++++ src/Components/common/SummaryListTable.js | 97 ++++++++++ src/Components/componentspage/ErrorMessage.js | 14 +- src/Components/componentspage/Footer.js | 6 +- src/Components/componentspage/Header.js | 17 +- .../componentspage/NotificationBanner.js | 10 +- src/Components/componentspage/Pagination.js | 3 +- src/Components/componentspage/Panel.js | 21 ++- src/Components/componentspage/PopUp.js | 15 +- src/Components/componentspage/SideNav.js | 49 ++++- src/Components/componentspage/SummaryList.js | 7 +- src/Components/componentspage/Table.js | 8 +- src/Components/componentspage/Tag.js | 5 +- src/Components/componentspage/TextInput.js | 74 ++++---- .../reacttablecomponent/ReactTableRough.js | 168 ++++++++++++++++++ .../reacttablecomponent/makeData.js | 40 +++++ src/assets/img/components/error.svg | 3 + src/assets/img/components/pagination/1.png | Bin 0 -> 219 bytes src/assets/img/components/pagination/2.png | Bin 0 -> 223 bytes tailwind.config.js | 6 +- yarn.lock | 7 +- 24 files changed, 754 insertions(+), 84 deletions(-) create mode 100644 src/Components/common/Pagination.js create mode 100644 src/Components/common/ReactTable.js create mode 100644 src/Components/common/SummaryListTable.js create mode 100644 src/Components/reacttablecomponent/ReactTableRough.js create mode 100644 src/Components/reacttablecomponent/makeData.js create mode 100644 src/assets/img/components/error.svg create mode 100644 src/assets/img/components/pagination/1.png create mode 100644 src/assets/img/components/pagination/2.png diff --git a/package.json b/package.json index 0e4770b..0a34bbd 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "react-router": "^5.2.0", "react-router-dom": "^5.2.0", "react-scripts": "4.0.3", + "react-table": "^7.7.0", "web-vitals": "^1.0.1" }, "scripts": { @@ -43,9 +44,10 @@ ] }, "devDependencies": { + "namor": "^1.1.2", "autoprefixer": "^9.8.6", + "gh-pages": "^3.2.3", "postcss": "^7.0.36", - "tailwindcss": "npm:@tailwindcss/postcss7-compat@^2.2.7", - "gh-pages": "^3.2.3" + "tailwindcss": "npm:@tailwindcss/postcss7-compat@^2.2.7" } } diff --git a/src/App.css b/src/App.css index 5134fe5..e68dfee 100644 --- a/src/App.css +++ b/src/App.css @@ -97,3 +97,110 @@ li { box-shadow: inset 0px -2px 0px #0b0c0c; } /* Component Button */ +.WhatsNewCard { + box-shadow: 0 1px 2px rgb(0 0 0 / 16%); + border-radius: 0.25rem; + --bg-opacity: 1; + background-color: #fff; + --border-opacity: 1; + border-left: 4px solid #f47738; + padding: 8px; +} +.WhatsNewCard h2 { + font-size: 16px; + line-height: 24px; + --text-opacity: 1; + color: #0b0c0c; + margin-bottom: 4px; +} +.WhatsNewCard p { + color: #505a5f; +} +.prefix, +.sufix { + display: flex; + align-items: center; +} +.prefix span, +.sufix span { + text-align: center; + border: 1px solid #000; + margin-bottom: 24px; + width: 45px; + height: 40px; + display: flex; + justify-content: center; + align-items: center; +} +.prefix span { + border-right: 0px; +} +.sufix span { + border-left: 0px; +} +.passwordSmall input { + margin-bottom: 10px; +} + +.tagInactive { + background: rgba(212, 53, 28, 0.12); + padding: 0 24px; + border-radius: 11px; + color: #d4351c !important; + font-weight: bold; +} +.tagActive { + background: rgba(0, 112, 60, 0.12); + padding: 0 24px; + border-radius: 11px; + color: #00703c; + font-weight: bold; +} + +/* Side Nav Start */ +.sidebar { + width: 64px; + padding: 20px 0; + background: #22394d; + height: 100%; + color: white; + z-index: 1000; + padding-bottom: 100px; +} +.actions { + cursor: pointer; + padding: 0 20px; + margin-bottom: 32px; +} +.active { + border-right: 4px solid #f47738; + padding-right: 16px; +} +/* Side Nav End */ + +/* Table Start */ +.tabelMain { + background: #ffffff; + box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.16); + border-radius: 4px; +} +.tableCard { + background: #fafafa; + box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.16); + border-radius: 8px 8px 0px 0px; +} +.summary_ListHead h2 { + font-weight: bold; + font-size: 32px; + line-height: 37px; + color: #0b0c0c; + padding: 15px 40px; +} +.summary_ListHead h3 { + font-weight: bold; + font-size: 24px; + line-height: 28px; + color: #0b0c0c; + padding: 15px 40px; +} +/* Table end */ diff --git a/src/Components/common/Pagination.js b/src/Components/common/Pagination.js new file mode 100644 index 0000000..dbd7f67 --- /dev/null +++ b/src/Components/common/Pagination.js @@ -0,0 +1,33 @@ +import React from 'react' +import PaginationImg1 from "../../assets/img/components/pagination/1.png" +import PaginationImg2 from "../../assets/img/components/pagination/2.png" + +const Pagination = () => { + return ( +
+ + + {`1 - 5 of 5`} + + + |< + > + < + >| + +
+ ) +} +export default Pagination diff --git a/src/Components/common/ReactTable.js b/src/Components/common/ReactTable.js new file mode 100644 index 0000000..5032f59 --- /dev/null +++ b/src/Components/common/ReactTable.js @@ -0,0 +1,142 @@ +import React from 'react' +import { usePagination, useTable } from 'react-table' +import Pagination from './Pagination' + +function ReactTable() { + const data = React.useMemo( + () => [ + { + col1: PB-FSM-2019-04-23-898898, + col2: '12/08/2020', + col3: 'Alakapuri', + col4: 'Pending for Payment', + col5: 12, + }, + { + col1: PB-FSM-2019-04-23-898898, + col2: '12/08/2020', + col3: 'Alakapuri', + col4: 'Pending for Payment', + col5: 12, + }, + { + col1: PB-FSM-2019-04-23-898898, + col2: '12/08/2020', + col3: 'Alakapuri', + col4: 'Pending for Payment', + col5: 12, + }, + { + col1: PB-FSM-2019-04-23-898898, + col2: '12/08/2020', + col3: 'Alakapuri', + col4: 'Pending for Payment', + col5: 12, + }, + { + col1: PB-FSM-2019-04-23-898898, + col2: '12/08/2020', + col3: 'Alakapuri', + col4: 'Pending for Payment', + col5: 12, + }, + ], + [] + ) + + const columns = React.useMemo( + () => [ + { + Header: 'Column 1', + accessor: 'col1', // accessor is the "key" in the data + }, + { + Header: 'Column 2', + accessor: 'col2', + }, + { + Header: 'Column 3', + accessor: 'col3', + }, + { + Header: 'Column 4', + accessor: 'col4', + }, + { + Header: 'Column 5', + accessor: 'col5', + }, + ], + [] + ) + + const { + getTableProps, + getTableBodyProps, + headerGroups, + rows, + prepareRow, + page, + nextPage, + PreviousPage, + canNextPage, + canPreviousPage + } = useTable( + { columns, data }, + usePagination + ) + + return ( + <> + + + {headerGroups.map(headerGroup => ( + + {headerGroup.headers.map(column => ( + + ))} + + ))} + + + {rows.map(row => { + prepareRow(row) + return ( + + {row.cells.map(cell => { + return ( + + ) + })} + + ) + })} + +
+ {column.render('Header')} +
+ {cell.render('Cell')} +
+ {/* Pagination */} + + {/* Pagination */} + + ) +} + +export default ReactTable \ No newline at end of file diff --git a/src/Components/common/SummaryListTable.js b/src/Components/common/SummaryListTable.js new file mode 100644 index 0000000..227011a --- /dev/null +++ b/src/Components/common/SummaryListTable.js @@ -0,0 +1,97 @@ +import React from 'react' +import { useTable } from 'react-table' + +function SummaryListTable() { + const data = React.useMemo( + () => [ + { + col1: Residential Property, + col2: 'Yes', + col3: Change + }, + { + col1: Type of property, + col2: 'Independent Building', + col3: Change + }, + { + col1: No. of Floors, + col2: 'Ground + 1', + col3: Change + }, + { + col1: No. of Basements, + col2: 'None', + col3: Change + }, + ], + [] + ) + + const columns = React.useMemo( + () => [ + { + Header: 'Column 1', + accessor: 'col1', // accessor is the "key" in the data + }, + { + Header: 'Column 2', + accessor: 'col2', + }, + { + Header: 'Column 3', + accessor: 'col3', + }, + { + Header: 'Column 4', + accessor: 'col4', + }, + { + Header: 'Column 5', + accessor: 'col5', + }, + ], + [] + ) + + const { + getTableProps, + getTableBodyProps, + headerGroups, + rows, + prepareRow, + } = useTable({ columns, data }) + + return ( + + +

Check your answers

+

Property Details

+ + + {rows.map(row => { + prepareRow(row) + return ( + + {row.cells.map(cell => { + return ( + + ) + })} + + ) + })} + +
+ {cell.render('Cell')} +
+ ) +} + +export default SummaryListTable \ No newline at end of file diff --git a/src/Components/componentspage/ErrorMessage.js b/src/Components/componentspage/ErrorMessage.js index fcaa509..39020a4 100644 --- a/src/Components/componentspage/ErrorMessage.js +++ b/src/Components/componentspage/ErrorMessage.js @@ -1,9 +1,9 @@ -import { Card, CardLabelError, FormStep, Header } from "@egovernments/digit-ui-react-components"; +import { Card, Header } from "@egovernments/digit-ui-react-components"; import React from "react"; import ErrorMessageImg from "../../assets/img/components/ErrorMessage.png" const ErrorMessage = () => { - const onSelect=()=>{ + const onSelect = () => { console.log("hello") } return ( @@ -21,7 +21,15 @@ const ErrorMessage = () => {

- Error Message +
+
+ + + +

Error

+
+

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod

+

diff --git a/src/Components/componentspage/Footer.js b/src/Components/componentspage/Footer.js index 7253428..f52b572 100644 --- a/src/Components/componentspage/Footer.js +++ b/src/Components/componentspage/Footer.js @@ -3,10 +3,10 @@ import React from 'react' import FooterImg from "../../assets/img/components/Footer.png" const Footer = () => { - const menuItems =[ + const menuItems = [ { - id : 1, - heading : "city" + id: 1, + heading: "city" } ] return ( diff --git a/src/Components/componentspage/Header.js b/src/Components/componentspage/Header.js index 3f95d40..b0b061e 100644 --- a/src/Components/componentspage/Header.js +++ b/src/Components/componentspage/Header.js @@ -1,8 +1,13 @@ -import React from "react"; -import { Card, Header } from "@egovernments/digit-ui-react-components"; +import React, { useState } from "react"; +import { Card, Header, TopBar } from "@egovernments/digit-ui-react-components"; import HeaderImg from "../../assets/img/components/Header.png" const HeaderComponents = () => { + const [isSidebarOpen, toggleSidebar] = useState(false); + const logoUrl = "https://qa.digit.org/egov-dev-assets/mseva-logo-white.png"; + const handleLogout =()=>{ + console.log("logout") + } return (
@@ -17,7 +22,13 @@ const HeaderComponents = () => {
- Header + {/* Header */} +
diff --git a/src/Components/componentspage/NotificationBanner.js b/src/Components/componentspage/NotificationBanner.js index 184af89..944542a 100644 --- a/src/Components/componentspage/NotificationBanner.js +++ b/src/Components/componentspage/NotificationBanner.js @@ -1,6 +1,5 @@ -import { Banner, Card, Header, InfoBanner } from '@egovernments/digit-ui-react-components' +import { Card, Header } from '@egovernments/digit-ui-react-components' import React from 'react' -import NotificationBannerImg from "../../assets/img/components/NotificationBanner.png" const NotificationBanner = () => { return ( @@ -19,8 +18,11 @@ const NotificationBanner = () => {
- {/* */} - Notification Banner +
+

Property Tax

+

Pay your Property Tax Dues before 31st March and get 10% rebate

+

1 day ago

+
diff --git a/src/Components/componentspage/Pagination.js b/src/Components/componentspage/Pagination.js index 7c99de4..195fbbc 100644 --- a/src/Components/componentspage/Pagination.js +++ b/src/Components/componentspage/Pagination.js @@ -1,6 +1,7 @@ import { Card, Header, RadioButtons } from '@egovernments/digit-ui-react-components' import React from 'react' import PaginationImg from "../../assets/img/components/Pagination.png" +import PaginationComponent from "../common/Pagination" const Pagination = () => { const availableOptions = [ @@ -22,7 +23,7 @@ const Pagination = () => {
- Pagination +
diff --git a/src/Components/componentspage/Panel.js b/src/Components/componentspage/Panel.js index f8af8cf..8993291 100644 --- a/src/Components/componentspage/Panel.js +++ b/src/Components/componentspage/Panel.js @@ -19,8 +19,25 @@ const Panel = () => {
- Panel Success - Panel Error +
+

Success Message

+ + + + +

Reference No.

+

KA22922-28282

+
+
+

Failure Message

+ + + + + +

Reference No.

+

KA22922-28282

+
diff --git a/src/Components/componentspage/PopUp.js b/src/Components/componentspage/PopUp.js index 9d42e7b..f34b831 100644 --- a/src/Components/componentspage/PopUp.js +++ b/src/Components/componentspage/PopUp.js @@ -3,7 +3,7 @@ import React, { useState } from 'react' import PopUpImg from "../../assets/img/components/PopUp.png" const PopUps = () => { - const [showPopUp, setShowPopUp] = useState(false); + const [showPopUp, setShowPopUp] = useState(true); return (
@@ -18,19 +18,18 @@ const PopUps = () => {
- popup
-
setShowPopUp(!showPopUp)} /> { showPopUp && -
+
setShowPopUp(false)}>X} + main={

Title

} + end={} /> -
- +
+ +
diff --git a/src/Components/componentspage/SideNav.js b/src/Components/componentspage/SideNav.js index cf752ed..ff2efca 100644 --- a/src/Components/componentspage/SideNav.js +++ b/src/Components/componentspage/SideNav.js @@ -1,7 +1,9 @@ import { Card, Header } from '@egovernments/digit-ui-react-components' import React from 'react' +import { Link } from 'react-router-dom' import SideNavImg from "../../assets/img/components/SideNav.png" + const SideNav = () => { return (
@@ -14,11 +16,50 @@ const SideNav = () => { The Tag component is used to display the status of specific user actions.

-
- +

Guidelines

diff --git a/src/Components/componentspage/SummaryList.js b/src/Components/componentspage/SummaryList.js index 2875539..003f991 100644 --- a/src/Components/componentspage/SummaryList.js +++ b/src/Components/componentspage/SummaryList.js @@ -1,6 +1,7 @@ import { Card, Header } from '@egovernments/digit-ui-react-components' import React from 'react' import SummaryListImg from "../../assets/img/components/SummaryList.png" +import SummaryListTable from '../common/SummaryListTable' const SummaryList = () => { return ( @@ -15,10 +16,8 @@ const SummaryList = () => { information on the screen.

-
- - Summary List - +
+

Guidelines

diff --git a/src/Components/componentspage/Table.js b/src/Components/componentspage/Table.js index c9245ca..b63228b 100644 --- a/src/Components/componentspage/Table.js +++ b/src/Components/componentspage/Table.js @@ -1,8 +1,10 @@ import { Card, Header } from '@egovernments/digit-ui-react-components' import React from 'react' import TableImg from "../../assets/img/components/Table.png" +import ReactTable from '../common/ReactTable' const Tables = () => { + return (
@@ -14,10 +16,8 @@ const Tables = () => { The Table component makes it easier to sort information for users.

-
-
- Table -
+
+

Guidelines

diff --git a/src/Components/componentspage/Tag.js b/src/Components/componentspage/Tag.js index d638bc3..1a023af 100644 --- a/src/Components/componentspage/Tag.js +++ b/src/Components/componentspage/Tag.js @@ -16,7 +16,10 @@ const Tag = () => {
- Tag +
+ Inactive + Active +
diff --git a/src/Components/componentspage/TextInput.js b/src/Components/componentspage/TextInput.js index 22fc13b..9503101 100644 --- a/src/Components/componentspage/TextInput.js +++ b/src/Components/componentspage/TextInput.js @@ -14,43 +14,15 @@ import SufixImg from "../../assets/img/components/Sufix.png" const TextInputs = () => { const [inputName, setInputName] = useState(""); const [number, setNumber] = useState(false); + const [password, setPassword] = useState() const [errorCode, setErrorCode] = useState(false); const handleChange = (e) => { - setInputName(e.target.value); - }; + setInputName(e.target.value) + } return (
Text Input
- {/* -
-
- - -
-
-
-
-

- import - {` React from 'react';`} -

-

- import{" "} - Textfield from '@atlaskit/textfield'; -

-

{`export default function TextFieldDefaultExample() {`}

-

{`return ;`}

-

{`}`}

-
-
-
*/}
@@ -71,7 +43,7 @@ const TextInputs = () => {
@@ -147,12 +119,14 @@ const TextInputs = () => {
setPassword(e.target.value)} + placeholder="*******" + value={password} />
- + The password Must be atleast 8 characters long
@@ -180,12 +154,26 @@ const TextInputs = () => { - prefix
- Sufix +
+
+ +
+ +91 + +
+
+
+ +
+ + Kg +
+
+

- Error Messages + Error Messages

{
- Enter Name + Enter Name
-
+

- Follow the text input specifications given below for showing error messages on the screen. + Follow the text input specifications given below for showing error messages on the screen.

Use the error message list below for specific error messages, styles, and formats.

diff --git a/src/Components/reacttablecomponent/ReactTableRough.js b/src/Components/reacttablecomponent/ReactTableRough.js new file mode 100644 index 0000000..8ecfe34 --- /dev/null +++ b/src/Components/reacttablecomponent/ReactTableRough.js @@ -0,0 +1,168 @@ +import React from 'react' +import { useTable, usePagination } from 'react-table' +import makeData from './makeData' + +function Table({ columns, data }) { + // Use the state and functions returned from useTable to build your UI + const { + getTableProps, + getTableBodyProps, + headerGroups, + prepareRow, + page, // Instead of using 'rows', we'll use page, + // which has only the rows for the active page + + // The rest of these things are super handy, too ;) + canPreviousPage, + canNextPage, + pageOptions, + pageCount, + gotoPage, + nextPage, + previousPage, + setPageSize, + state: { pageIndex, pageSize }, + } = useTable( + { + columns, + data, + initialState: { pageIndex: 2 }, + }, + usePagination + ) + + // Render the UI for your table + return ( + <> + + + {headerGroups.map(headerGroup => ( + + {headerGroup.headers.map(column => ( + + ))} + + ))} + + + {page.map((row, i) => { + prepareRow(row) + return ( + + {row.cells.map(cell => { + return + })} + + ) + })} + +
{column.render('Header')}
{cell.render('Cell')}
+ {/* + Pagination can be built however you'd like. + This is just a very basic UI implementation: + */} +
+ {' '} + {' '} + {' '} + {' '} + + Page{' '} + + {pageIndex + 1} of {pageOptions.length} + {' '} + + + | Go to page:{' '} + { + const page = e.target.value ? Number(e.target.value) - 1 : 0 + gotoPage(page) + }} + style={{ width: '100px' }} + /> + {' '} + +
+ + ) +} + +function ReactTableRough() { + const columns = React.useMemo( + () => [ + { + Header: 'Name', + columns: [ + { + Header: 'First Name', + accessor: 'firstName', + }, + { + Header: 'Last Name', + accessor: 'lastName', + }, + ], + }, + { + Header: 'Info', + columns: [ + { + Header: 'Age', + accessor: 'age', + }, + { + Header: 'Visits', + accessor: 'visits', + }, + { + Header: 'Status', + accessor: 'status', + }, + { + Header: 'Profile Progress', + accessor: 'progress', + }, + ], + }, + ], + [] + ) + + const data = React.useMemo(() => makeData(100000), []) + + return ( + + ) +} + +export default ReactTableRough diff --git a/src/Components/reacttablecomponent/makeData.js b/src/Components/reacttablecomponent/makeData.js new file mode 100644 index 0000000..142557e --- /dev/null +++ b/src/Components/reacttablecomponent/makeData.js @@ -0,0 +1,40 @@ +import namor from 'namor' + +const range = len => { + const arr = [] + for (let i = 0; i < len; i++) { + arr.push(i) + } + return arr +} + +const newPerson = () => { + const statusChance = Math.random() + return { + firstName: namor.generate({ words: 1, numbers: 0 }), + lastName: namor.generate({ words: 1, numbers: 0 }), + age: Math.floor(Math.random() * 30), + visits: Math.floor(Math.random() * 100), + progress: Math.floor(Math.random() * 100), + status: + statusChance > 0.66 + ? 'relationship' + : statusChance > 0.33 + ? 'complicated' + : 'single', + } +} + +export default function makeData(...lens) { + const makeDataLevel = (depth = 0) => { + const len = lens[depth] + return range(len).map(d => { + return { + ...newPerson(), + subRows: lens[depth + 1] ? makeDataLevel(depth + 1) : undefined, + } + }) + } + + return makeDataLevel() +} diff --git a/src/assets/img/components/error.svg b/src/assets/img/components/error.svg new file mode 100644 index 0000000..ca83783 --- /dev/null +++ b/src/assets/img/components/error.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/img/components/pagination/1.png b/src/assets/img/components/pagination/1.png new file mode 100644 index 0000000000000000000000000000000000000000..6b9a6d8dac3747ddb784ea96e7f60d7751fc2623 GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp@K+MCz1|)ZGH@^v_I14-?iy0WWg+Z8+Vb&Z8pde#$ zkh>GZx^prwfgF}}M_)$E)e-c@N`~puG$B+uf-ixtZ4GKK$1>IGd{|}ce-sLH` z@$ida{--Str)nD?q}ZFqC_H#3+!N8z?C)#S(S6@aDa!W?a${zf ze7oA;e!X6H1+%+m;z0|)K8<}5naBNn(;ZCu-T}qTWC@6E# zH^s#L0 Date: Fri, 29 Oct 2021 17:00:46 +0530 Subject: [PATCH 2/2] add images --- src/assets/img/brand.png | Bin 2173 -> 2169 bytes src/assets/img/components.png | Bin 2739 -> 2735 bytes src/assets/img/content.png | Bin 503 -> 925 bytes src/assets/img/pattern.png | Bin 747 -> 1068 bytes src/assets/img/resources.png | Bin 1119 -> 2108 bytes 5 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/assets/img/brand.png b/src/assets/img/brand.png index 05cce6109a3a91e419f9a7aa8406c9bc62c99d60..399f8bafa6601312d14d37fedd3c7c73aed06382 100644 GIT binary patch delta 2040 zcmV_kaR;~YO=k%L|`Tmdl#66>PfauECEGy(0%)&L0~3WzP(;0P9_1mlMewZf2EmJ zGDRx&txCVwt&8C*Gk;A&A0rdJmrub#?~i9Ka)=(Q*Xykq6V(RC%7}=3uDI$q5QIDZ{&9^0CLTO1qz{bP|AL6htLuj%)QFbMt6uZjA!S4h|K#L& zv)}J-1p!y+^jH~TeY5t%H#B9w zDzE;0PhaQ0@c&1q_csZ=lfc#(TOhPT*=bzA^RSj=LlurFY|vzB*j6sjfA8lUuOwK$ zy}m>F1Q;L^?Nw@PV{5kQYj-mRm|v1dcq4(<%D7K0qkM-#ykq}>)nu=dRu~1Do7&;)*7Wi9J3rN| z6gAdc%S`F-Iu7SR1|$ayN7vh(7UmdcLYrxOZ@m?mux78PHfiM8f}YeF+l7R$T-LJT zzFKre@Oq-@uy!`|t5Vyle7b(53v>)_G25DYI5@EbxtWP6f9J}uNo^5u4#Fn@5`Y=% z4)QRZyixu9eW}!ToeG-7F^XbtCD4hh!HH}UNB8V$Y|b79)6sV z65W5jsAEimx$F+gtLu-0e)OJLHZPt=CN2iYOkKtqJ zwa}_>{FgFs!f80z0oT4IJnq1NrAa7trMer$jqRfQ^4%183i;_z! znXAN-NQ4-gYiyssOODXw(&!(=gG-L6B8KJ|A##~sf2y1>pfB(ISa+RUj3RLwyUWAO zOQ7i`*99a|c;>?-bXb`j!z`|2cbS=a33|N+_nE%)$t5=5l6w$C^PDPOAs_*m2MG#@ zut{`q_S?&nOxZyU%@Kv<3Yp*i_ggVkzzn7-1z$!mAD4&`J54Wzp*fQijDs<*kp_9f zTu5Mof2cvu;Kuo8I?hUx!{K1*oEL4H%!LFlbA@5Zk48Ulc3pKl%>2}+6w=&W9oWLV zpEo$7A(4v;Cw`t?B$?Zqt00e<8ws?KnB<47wN(WeS2*1_&!6Os$+Z`|%U*?1mASf4 zpgDvv3~pp-5w?@o&cSvfsaqWud8z{Vm`0krf15?xA{@Vc{*8UOJ-(o%W&8SXw1!g( zG#z!CT^!%?NK1pLM{i$j`5H%?+li*bf_?HiS9rR1fzU@gB-CC!E;sWO%E;`Z<6}&U zxu0@AiCp2VXBRPc0Io*(q)2pz^WUGk_ly`F(yr=rB7^gU1KUNkTrba41dt#jgPF-p ze~)!(9y3^&=ijArI9{ix9t6>jF3)2h@A@1-L3faWFYat?#)C|WW;a)95J1`3PaATX z6p$b#I_uboq`IVxk(#c9?01_l%*pItR6<2&}4In`Rf|IaDe~z(Nk$1@xAVC7eu=@gITJfbzfCLF(DQ3N- zUa15LfFD4D1PB-NarmWP&x>JZNRR+7CVbNAv>K3LR$wDdat;@;&ul<~1jLg@+;$1f zjOA};4=2;jW5%q{G-)6~LgG1#jsh-N18H_~5pc0=V-2JkMhj1;n&%KpiUj`&_#4u^(ecEUgI41y*06>!&0U%UC0zfI|6EM@=^6JLd z1ZD(Dyh>b}NhK?3b_`|*bO!(u07w7`5&(h(fFJ=NNB{^D0LucCG%0`F8q6q6)cyy< W|2BZ*-SZ~^0000h)hk`vVV)`rZ~JweE{ zf%Fq_0>}xHe9I*5)Hwm}G|luI>In)b2)ThX#f*z1z1`O`X`u$|&&pn#=a(S?BTI_+ zw^~WNkCs3Edc7GN{)WJ{#KiK;Ld3MfBx?k&CAR$E83NZHNIC!@0e}R6AORpq00_kaj^~YO}q&L|`Tmdl#66nrW6zEdj-J*nRV|MPMdazPny0PA37HlMewZe`Og| zGDT|5ty;g=ZHnPKGk;D(?_(3cl@GyT@Au~+IYhVB>-AQQi5r7$S|D-_y6AxY$(r=8|zk-;mtLsN1)QXqPt6uy05#>Y+|Mc`^ zv)}J-1p(LSY+E^D-C6r(*Vn18e{Qs+MSfgl|H{P6=0FR?7VeWEi1+O$*%-69Jvz{C z(2w^uVNE&E_u0aFtLw4btC3T5eX>?$|H{TY2`bG;bzAdo;nNmnqaGXD`{e8OOz*3% z{%~L4=f3d&$6)`g-1o^dypzDz7+WB;LOC&pp4`0msF7w_6^+3-x>9~f4%=upTO0?IBLm$Odl^K=+k1I%7D#h1jgcp1W`}Qs+DyD zWAWsiVBv_$;b_#0w!gu?F4MlB-%0jk`gkEhrP3>*?MlVH5|s54FSht?BnS z?|t8}QZ!g^Ei+}m>o^<(8IT+<9N#?XgcxI(3q4HRd+T9fqK3Vm+N6k8?b;PpV$VeM?`SFN#C`*8DEC+Ha5VzxE)XmDZ&e+n}bL(Y}qAvGl69E48* zBmgti928+Vc%%OD=St|!M^!q1NUEK)n)kUkw zJ^UmgCA$7*S=*QdbJ-jW(o6mLEwOA~K8#Enq#1zK^|wj>AU(Q#b@kzXl91Br1jlc~ z$I!_cb0t9%e_wl;HN8}~!u**w5TeT^d4;j@xO3aEU#(%T!aL?lf_}fdm$7ipuy+P| zf1C(<1Q6!EymF+GC77>T*vNmGxHMkdJFC|eHW8UY`!4(Acp2Sb-G4C0x%B}ln`N) z`0)IXS0$P9gBY44O34*6|M}k^#ZU<&n5Gnb8Nqy9BF5}Ay%a^}Tuv|v#<)gWj zfeGRke>sC&7Z1}(R+1cc2TSLoXwzgaBygE4j3RzK`gODGs@Y-YXFjEn=H}|a7T$xR z!4VCKTvj;A>+B%OETQHq$Rp-P0xcva`8IEDRRP8oPWQJLPYcH64i>xBZ^<*}>OO(y z5TYo!o#TkGowjxkmJ`W*)M1fli{0frKBkf8f9__H9uZF7yttLFpd_?y{VlEGlmSgg zon;rtA9*CyAnNg(ms`HZ(dKrbsTP#|r}Z&ccs6%|(0kh@bg+0*Z5Jt&k=aGZ+n5w{ zKjeH8xx!h`E~4)MT#xWcndk`Tzdv;E8!_6YUDww{2ImQfwuuN`PtQ{ZkRT_6k;zO? ze{^adGnkm?->GsqnWv{21o4he&tt#e^*Mlo<{$^3+}qepI+;?9Zm!cHfU>clHRLiW zAVEfS)UgrCbV->Y4V?$cM-d=F1_r~Stbo6NQte% zyX1(mv$9MWNRWbIJMJ=7T=VH@00~kMf1E}Qa*Vx-bQzc_1SCj-7k=0q_GzkOJXy9*1A)^}Oh2h6E|#a>6H_PS}D3vjQ7wlXJL)b>;&Sq#zkI z;L}oXIgn--7XcT`Hs(N@VYKjcsCfYqf3~v@ zZ=VE^AR{Wm($eW|W_gzWT@sSWZ65_tFvc(k!<6z?<*P?e1EUYo9z2BV!n2dgnVP2z zAVC3!ZTp~0Sf}Ud**_nD*Y>O3zY0j;h+)#m`?S$0a83Xq0e}R6AORpq00fR5&(h(Qh+jyCt#*;s;e8H6POVs^(=8&29>O2SuvO$&>R3r z03ZP%NB{^D0D=U7AORpq04xhk(x&2ZYcQiQ(ZN4GkU5Y8?N}}V0000mV{G|4kJOBUy07(Z$PDHLkV1is7OKkuE delta 179 zcmV;k08Ia{6|)tPRsl${R~QKzR!Mf`JU|_Y;%zE84Y@R+*hMZ3Rg523;}esG38a5A zuf^kggepElwlTy8ofpqq<*PTolPWeK4cNWBL1zcA3xYNPf>CX$OyD?}feOJJ05LW} zLBvN2VF1Ly1ozt;%S%uY3S$6dTykeWw}4dRhHDCC0AyG|lkZ>#DiqED$axbKRs6zp hd2ZnWenElx8C{jG4LYs-k^lez07(Z$PDHLkV1l&GMc@Dc diff --git a/src/assets/img/content.png b/src/assets/img/content.png index 6c2fa58c7a11b2ebc0598b3dcc70f73655db63ea..b4e10ede4eade36092aaa51b156ceefc33809e22 100644 GIT binary patch literal 925 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSoCO|{#S9E$svykh8Km+7D9BhG z`QCSnSQT+n&8G`*vmS zz1VrZIgFFoKjb{$5N$I>{oL(7MMd)&TkjUW5}3qxfwQ`{;&}GAZ>^Fuzwe&Bx_hDO zBpn8`f0ufkS)^Agc?cc&v%y|>{o&cAyr&K3ZSCGFa@jGFbIY=))n@;K){1<8+Nml~ z%d+CzKY;`KhcDf&-fz}Bhig$k!`k0BCoU9wXk`7%OS_J%;OMG_V&`_2c29XAv*3+n z)}zJ8?Hn0mzFpO*dNVnO^}&BvhDRI@GK?L{423KTeGEqg8!VUv+!-Fti;|I`{jiw&yuNQPF>}Ht31Xqk=f@{6;ip_tINoN`VtdZNwYsrLR zHdy)TugfmvhuI3R4?LCkWB;#dGh_0({@yq++v)q^L)G_<4vQeW24R8T`KbpM-FTg| zzqd}HC~no#2Y*s_iP-#Ky0I z;+vcYmRKfs?=yEp}@8@jg@#o#dG*5;){0!Lh zIHjO-Pj8xWc@C!vXF}Yf?Yv46ZCO2k^Sbu#pOhoJU>4UZjy?Ie{P#Xl$@yb&?DIyy zC8?ag^>zR6R(<>w9Qfn;!_@N=d`jnqo{QRDzi-a}4J~5dz8p%Q-F`RhVgDiZHEo+) y1e&7_Z4T8~$yz8G#PK z3EB>=VB`k$1YHX(=?%IRbu1eb>dw#{p-ZJoRcc;<12~dp$Ev>}iXuzNulU7wO!yby z^jjc|vbhT1>D zQ$;~T-n_ppWmC$^){#-nz3qIQN9FnM`)e7UUrw0SsnkRwuO+5|TKcWmPZ`SZ1 z88_BDmR-6E?fpp9z07KW-iIu_+^2}{QuH7n7uc6+i7&| zG06nE1PC7d*?EImU(QzhlXGws(^=Oz`FnQvZ%f{M^|d--;wSxwho8UeRTa4RTFWN1 z%xzoMU!!IdCWStR4rPW%91Ru-=8hK=5Bx5i`t#f3-YZ)wbJLgop8aW!{6gvDJB@7q zr5i`9F+4oI|L=!YMt=%+ygdF)Tl(dv_s3&7()byCp~ghNQ2UUs`TAjbrreX?hj%|O zJ+pED|KIg5_wPCsHmS(YWfQ}aHSPC*{<|0caAlw6w%ko~Pe0%PxNmBa9Sh6|n4|O} z%?l=Mua$VcE_cf|j^?LJRWH_`+uQqOum0T4hs+YJ89Czrz5Ok|cy;Q+h)u@nOP4;l z{aW+ry8HjCf^NDoIS4E0{jxt$`|9TNi1YEcgRa|KF$BN9IU{Z5Yky&EeuoFcwqQOp zZN2|Is&_ZWtlG(Nw>p*oaQfDZM&I4d8I!opL>TV>&0DY~zUhAJ`CXeYZu|JOJcH?o zAVVRGgAAj9I|GP$a#y3?=j!*HPlY{xeM5Qf>%OyLuUGHXxh)NeE`~E|Rj+TX{Pi@v zcHga6v+o9cc>8<$bwl^M_*|9hiZ`Xt?|gkOeEOW9t^LxJtqk{f9h!6hX4bDY?yLu@ z!`rG3T-@;M+m|$n;Pd{SSqtFK21jI`xA)Pub%Fa=AGa`mw|e@|ZCtTCf8BU}FQ)M4 z`OAxU&#!p@{o%u`H$OFxb8g!b@@Ba~K=4hE;&-dR|9nk2ej^IZMB{M+aDbN-!b&>(QV&m3b@751ck zS&!wmohM!&zFpTZeI{k)YkAp*Ki-$uKK`!u>Bc+0?M7!H(UBLd-8%1;HUH~veRJ7A zGhPe);=Q5I?0$aC41NYlq;O?%h}o2v5dQew=4YqEE^Ya&yWh&h&miRd{HlL*Cb2#! zxZLj>UdGmTjB}b@y`KpqBys1>tZwN1{c7&xnx@}ZKEK~`VP6OLT^7IF;qPUh3*T8j xZ@v(^Ct*1QlpUsg{WIn3hmak0(5SoinRjJLbG7Pn1yD|B@O1TaS?83{1ORjw?iT<6 delta 730 zcmV<00ww*d2rn0Alx-5n+Ky%Te`NJvzls{V%~@xPSZ>I5rLte{nIWBr_MV?mJ8WRR8|7kWNe;Y5%Es%#GyO+(Ad;rl z#y6%_6a9wXw5olXh$wv0 zWknzR)G=xQ5jjR({Fgm;2$6Jb2ToVVLia3!^HsR<;^v&IQz5&Lpks$PKXY?#tlh_{ zg<`0eKAroD(piBNiur(E`XufvN==(o?&rqw7LPccnj6l2ML%Tz0ff$54cm6lfdBvi M07*qoM6N<$g8SZ6BLDyZ diff --git a/src/assets/img/resources.png b/src/assets/img/resources.png index 72f26f435f989baf41a24af4883059a0dae641b8..547eddc6745f557705e50f67ccb7416ca2b321ba 100644 GIT binary patch delta 2101 zcmYk8dpOgJ8^E{uVk68*l8#~1kD5!l7Bduc&FwIBAqwTP+R1hLj&cjx7;;M`B4TnI zj$@=0DvCpd*-=gkD`GCoZ~b?k=e>NM&+|U-zwbK({}XAP?&@MEBc&n*fk0&JiO1bV zo%So?5~BJPA21+l2r|)!0)Z%DefJ?C5H*#)gr zv2*)c`k87Rs_p#Z_0r(d;Meus`=o&Iz#Z_n<=59%a1bjb@Sm7{%0c&mmYwhCoSY1_ z1IcvYenbwYvs*8^m8Q(_gY1qw$a^B=bjm|+K8U|#w+0c|x(5$*>}&0C4LB@~Y~91_ z_78TOItA(Ssa{{tk1rkl&6Dl~Q;nPnvlVNoi*T`0{v-Ej7wOqB!4I-Mw=5HNr}~(& z`XL={sH8J_Tuz?~*foQ8rtMbALn_cSGD46r?s*X-Vo!l15}&7nFzkZO?XHr@W1yQM zS!*AdmVFzxRX2cYabna|$yB2gAN4>9&8tP2(NXQ__qeP79Q_H`x(o{qUyW`>_$H~0 z+lmje+0$T5J!QzU?{RWW%(-BzbQXN+iJleNPI6)eQUr#LMr%E6HIb85`+U_aZn8K! zf22y^;!b&VKH3fz534$PEr(yDOfGu0WjQ@{&gqPJE5b$O^+^*#`$#s`$h|gk62KwaS zpn>#_%FM#mi2nC}h*~(uYzuisomy-7-5ut4EOC)-RQ%cF1KZH#%QyQ2%NSO(9CF#& zB}hjpFSE@YTOv`9VYMi{P(E~rO>L~8l)ZFZxyLMy)l3{MhiE_BeEH_nWN1tH;2>D@ zz$b~!w}wroCN^+c)3-OiUlZoGiA8@Ug8}JMJ9`CPe{s*D&C z1g)OdFD{&Tlv#o^#Kmb;Ra-|^m-#5;bgG@w3mY||uK=agTofJhj8_6+2;WSxP=u@O zYa#*0OjQu+kM8Xvy}{IhBDfM2_5>K)Mq8vK+}Hqy7O(hAYbArfyrcRrA9xyu;w02M z5MY8tBLoowvNS{^d!A#_(Cw#Hz*;pmUxrcP%-5+n(o{*D`_uwZf$)EH^jcWwPD&2h{8_e@+N_avc zNtb{M1(8h;<{BO7*((-f_mmmv1Rqo5o2sl}uIf1HChp%TO!wjF1o@y;gSPFKO7F;| zx1$$dCNaNWV%gN?P##|x&MIsxh{(G#;L*2+B`lBHdh*o_5zy_7CXgH0{jGv-sbO^+n_cD8_H`YO9XwQW$%@|ds~_z9Zb zp6_XBoL5`60N*;tOD@LJe8X9Q>p6voyM&VOzLzmL)`G3==8aAjdmqU|=o2{?jn?oJ zuvKHP_;F|x(<{PkQ?BwnCXxBBrDrC!A!u(HXWXdt)sa`g5?HWX*UCyL#tO%gE>Qm$ zdR{T@a`2JG=YVY|I|9R(`xIMn!K>a3Eyf|sp|1kZCK zoKm(+#|8GuaeZiHS8B5^iT16kILc2mSS*81uvjZYD!14+&FUw}K6jCv%qP6M(+TiG zMz-oT^M~Ug11LjveO^?{g`!9sBDdl1p6o_I9ZSQ^@$xVHmUGhyfZ`mp20X04$nVBy3?XG;4Z zyHfA>{XGnSLHWV@^PD)hssKb$R^bL3qkmO>$$U0@NlrX~rF`FedAam&9F>f)IqgkJ z%~teMiXdasB(nm)aJ5ar)#8x!NDb+3a zQ=f`=E%$$ICgU-ynLHM|kIA(bc2e$Q_`F^BGG;X^6gP`=2ve;euLE@{+02%=+^F3DbMj+l0AME&=~0#?j7Go!VF VcxQ&&JJAaOu|MH*yw2J`>HlTewKD(! delta 1105 zcmV-X1g`tM5Z?$kiBL{Q4GJ0x0000DNk~Le0000s0000s2nGNE0E|Uy-2eap32;bR za{vGf6951U69E94oEVWdAAbY%NklbAPm%2D=oFHx^$( z6L9!flcbow_MYBM_502mSOzB`e^-J ziaFU_D5X-BewGGf*nb&0Z!x<4Xj)$OI#gaQmg)AL2cwvm^AuBndqIs5R0)h@R?brl zLn04}!4pn=%*pvYV=Bw*TR@``u!b2q-^qg(?G-P%TZ0obU~E?OBe@*j8ki`e@Ew5? zC|m<6cV!!N2?aT7l7*%bKSF5>Ii3MjQ{W)2d*rVB7hr}qBa|^@ z0@{?R&2qhs6wrkfx}h7w>2Nhd!SvvGf%23oNQ^2AiKD+hF0OhVrGD}xInyYJO3k`nhxvbQ)i%5OS+7N88s&>x;7xLVD=s z7N=66hg+0&E5V(^;{{6hlZ;y4uawY8T}}vC){$bmbNTLSHAS^gy#yCg^t+Yd%D0`( z_MXRg>80p-7S~5UENVyJrw5 zEZ0B&lFp6m^>bDe^^H8VT<1l;<*rq!?>rOe8sj zQjAqGMoZ4H6k}bCVYwR*dT*0lpU2@{k{U26#aNjY{cvmXLQU7dOik(jnqRFyDSrS9 XA`(B;{|6BC00000NkvXXu0mjfkY)0n