diff --git a/assets/gva-tx.json b/assets/gva-tx.json new file mode 100644 index 0000000000000000000000000000000000000000..309985c6e97e313d58744f6c2f35207885806402 --- /dev/null +++ b/assets/gva-tx.json @@ -0,0 +1,70 @@ +{ + "data": { + "balance": { + "amount": 3, + "base": 0 + }, + "currentUd": { + "amount": 68, + "base": 0 + }, + "txsHistoryBc": { + "both": { + "edges": [ + { + "direction": "SENT", + "node": { + "comment": "", + "currency": "g1", + "issuers": [ + "6DrGg8cftpkgffv4Y4Lse9HSjgc8coEQor3yvMPHAnVH" + ], + "outputs": [ + "1200:0:SIG(EDB7chzCBdtUCnqFZquVeto4a65FjeRkPrqcV8NwVbTx)", + "8800:0:SIG(6DrGg8cftpkgffv4Y4Lse9HSjgc8coEQor3yvMPHAnVH)" + ], + "writtenTime": 1676720148 + } + }, + { + "direction": "RECEIVED", + "node": { + "comment": "Bienvenido Vicente :-)", + "currency": "g1", + "issuers": [ + "A1Fc1VoCLKHyPYmXimYECSmjmsceqwRSZcTBXfgG9JaB" + ], + "outputs": [ + "10000:0:SIG(6DrGg8cftpkgffv4Y4Lse9HSjgc8coEQor3yvMPHAnVH)", + "510:0:SIG(A1Fc1VoCLKHyPYmXimYECSmjmsceqwRSZcTBXfgG9JaB)" + ], + "writtenTime": 1674899170 + } + } + ], + "pageInfo": { + "endCursor": "596813:A1C8830A779045C8D8D5D3BC439179666779D5020B7B1D3096C2B3C8B3733420", + "hasNextPage": false, + "hasPreviousPage": false, + "startCursor": "612232:A5E4B1575ADF60A8E26BFB474AA91888D53566CFA4C1390E84C523BF7A258D09" + } + } + }, + "txsHistoryMp": { + "receiving": [ + { + "comment": "Testing transactions", + "currency": "g1", + "issuers": [ + "BrgsSYK3xUzDyztGBHmxq69gfNxBfe2UKpxG21oZUBr5" + ], + "outputs": [ + "100:0:SIG(6DrGg8cftpkgffv4Y4Lse9HSjgc8coEQor3yvMPHAnVH)", + "327:0:SIG(BrgsSYK3xUzDyztGBHmxq69gfNxBfe2UKpxG21oZUBr5)" + ] + } + ], + "sending": [] + } + } +} diff --git a/assets/img/undraw_intro_1.png b/assets/img/undraw_intro_1.png index e4189be7884d870286dc0f1c99830aaf613213d6..e0283c8acfbf3dc4f1666978c1739fc65618c7c1 100644 Binary files a/assets/img/undraw_intro_1.png and b/assets/img/undraw_intro_1.png differ diff --git a/assets/img/undraw_intro_1.svg b/assets/img/undraw_intro_1.svg index f45d1228f719deb85921974cf6dfafaef9f52189..79ea083225ad071233e44906abebddd7c0c0a48c 100644 --- a/assets/img/undraw_intro_1.svg +++ b/assets/img/undraw_intro_1.svg @@ -1 +1,163 @@ -<svg xmlns="http://www.w3.org/2000/svg" data-name="Layer 1" width="928.52587" height="635.2126" viewBox="0 0 928.52587 635.2126" xmlns:xlink="http://www.w3.org/1999/xlink"><circle cx="546.40861" cy="233" r="233" fill="#f2f2f2"/><path d="M267.14836,695.73927a39.063,39.063,0,0,0,37.72112-6.64475c13.212-11.08918,17.35435-29.35853,20.72485-46.275l9.96924-50.03559-20.87165,14.37143c-15.00965,10.33508-30.35744,21.00127-40.75007,35.97113s-14.929,35.40506-6.57885,51.60315" transform="translate(-135.73706 -132.3937)" fill="#e6e6e6"/><path d="M268.93246,756.31777c-2.11249-15.38745-4.28468-30.97255-2.80288-46.52494,1.316-13.81219,5.52988-27.30282,14.10882-38.36422a63.8196,63.8196,0,0,1,16.37384-14.83745c1.63739-1.03352,3.14442,1.5614,1.51416,2.59041a60.67183,60.67183,0,0,0-23.99889,28.9564c-5.22489,13.28948-6.06393,27.77612-5.16355,41.89338.54449,8.53722,1.69847,17.01851,2.86134,25.48891a1.55428,1.55428,0,0,1-1.04766,1.84517,1.50915,1.50915,0,0,1-1.84518-1.04766Z" transform="translate(-135.73706 -132.3937)" fill="#f2f2f2"/><path d="M408.73336,735.12443a22.26366,22.26366,0,0,0,20.4619,7.60621c9.69252-1.64386,16.99541-9.4324,23.52884-16.77825l19.32458-21.72757L457.644,705.27456c-10.359.75491-20.97969,1.57515-30.4046,5.93973s-17.54587,13.10443-18.10946,23.4756" transform="translate(-135.73706 -132.3937)" fill="#e6e6e6"/><path d="M392.14858,765.42363c3.39683-8.17455,6.82128-16.46349,12.03288-23.68308,4.62846-6.41176,10.589-11.8301,17.99559-14.7958a36.37365,36.37365,0,0,1,12.32755-2.57538c1.103-.03617,1.096,1.67409-.00222,1.7101a34.57944,34.57944,0,0,0-20.14644,7.31937c-6.39969,5.028-10.988,11.90886-14.61472,19.1095-2.19317,4.35449-4.07055,8.85716-5.94042,13.35705a.88586.88586,0,0,1-1.047.60523.86012.86012,0,0,1-.60523-1.047Z" transform="translate(-135.73706 -132.3937)" fill="#f2f2f2"/><path d="M289.27958,729.08926a28.75529,28.75529,0,0,0,25.05474,12.93133c12.68315-.60208,23.25684-9.45412,32.77516-17.85807l28.15329-24.85722L356.63,698.41361c-13.39961-.64126-27.14492-1.23941-39.90759,2.89278s-24.53307,14.0769-26.8668,27.28729" transform="translate(-135.73706 -132.3937)" fill="#e6e6e6"/><path d="M262.96242,765.16329c10.16773-17.99115,21.9614-37.98626,43.03473-44.377a48.022,48.022,0,0,1,18.10109-1.869c1.9218.16571,1.44191,3.1281-.4764,2.9627a44.61381,44.61381,0,0,0-28.88649,7.64231c-8.1449,5.544-14.48659,13.25165-19.85414,21.42525-3.28779,5.00658-6.23278,10.22556-9.17833,15.43754-.94134,1.66563-3.69279.46328-2.74046-1.22182Z" transform="translate(-135.73706 -132.3937)" fill="#f2f2f2"/><path d="M702.07,458.07511c20.21713-11.11154,45.37875-8.88155,67.16141-1.28454s41.52211,20.04317,62.67523,29.24883c64.64,28.1308,142.54824,23.5948,203.48691-11.84751,5.76335,13.406-.41945,28.74022-7.21108,41.65571s-14.53209,26.914-11.7363,41.236c3.57763,18.32718,22.793,29.31536,30.57874,46.28791,7.39086,16.11167,3.42387,35.0325-2.24615,51.82719s-13.028,33.7152-12.06453,51.415,13.82268,36.416,31.54867,36.43c-26.26936,4.08171-53.0555,8.16626-79.3089,3.9832s-52.36859-18.06777-64.55825-41.693c-6.09277-11.80863-8.44148-25.38593-15.43872-36.68213-11.91826-19.2406-34.79115-28.28862-56.37224-35.1079s-44.6762-13.38826-59.871-30.16213c-14.47787-15.98239-19.06353-38.24611-26.73413-58.4007a186.53661,186.53661,0,0,0-64.58839-84.22984" transform="translate(-135.73706 -132.3937)" fill="#6c63ff"/><path d="M725.49486,374.3382c-7.097-3.30155-15.81044-4.38389-23.03182-1.316s-12.14452,10.93154-9.80947,17.89083c1.05869,3.15524,3.46989,6.25835,2.53051,9.445-.72307,2.45285-3.24546,4.07226-5.72259,5.22372s-5.18694,2.11952-6.97842,4.06155-2.16509,5.28533.07286,6.79139c.73731.49618,1.65885.7315,2.37375,1.25437a3.772,3.772,0,0,1,1.16432,4.22219,8.89329,8.89329,0,0,1-2.85084,3.75066c-2.54053,2.19094-5.89807,4.69849-5.10925,7.80873a5.47831,5.47831,0,0,0,3.697,3.45788,18.36721,18.36721,0,0,0,5.42688.71626l74.96621,2.36156a28.422,28.422,0,0,0,7.40167-.41344,8.76185,8.76185,0,0,0,5.81294-3.905c1.43559-2.65728.4931-5.93057-1.2798-8.41186s-4.282-4.43862-6.35525-6.71709-3.76948-5.1227-3.404-8.06747c.29256-2.35733,1.84718-4.39471,2.96321-6.53661s1.76427-4.81847.31886-6.78893c-2.03678-2.77665-6.92687-2.5255-9.24284-5.11283-1.74777-1.95256-1.41027-4.76346-1.58405-7.28135-.418-6.05656-4.61117-11.77645-10.58027-14.43257a20.83058,20.83058,0,0,0-18.95323,1.29081Z" transform="translate(-135.73706 -132.3937)" fill="#2f2e41"/><polygon points="542.385 622.099 530.644 618.571 538.663 571.604 555.992 576.811 542.385 622.099" fill="#a0616a"/><path d="M677.69743,766.77357l-37.85868-11.37465.14386-.47886a15.386,15.386,0,0,1,19.16265-10.30886l.00093.00028,23.12268,6.9473Z" transform="translate(-135.73706 -132.3937)" fill="#2f2e41"/><polygon points="653.182 622.496 640.922 622.495 635.09 575.207 653.184 575.208 653.182 622.496" fill="#a0616a"/><path d="M792.04534,766.77357l-39.53051-.00147v-.5a15.38605,15.38605,0,0,1,15.38647-15.38623h.001l24.1438.001Z" transform="translate(-135.73706 -132.3937)" fill="#2f2e41"/><path d="M771.90046,719.12347a4.50048,4.50048,0,0,1-4.4414-3.78808L749.25569,601.7807a3.50022,3.50022,0,0,0-6.68824-.78906L695.40608,714.52777a4.51622,4.51622,0,0,1-5.57862,2.54394L672.79328,711.393a4.48511,4.48511,0,0,1-2.9663-5.26074L708.4759,535.11078a4.52538,4.52538,0,0,1,3.37183-3.3916L763.68025,519.687a4.5623,4.5623,0,0,1,3.70752.76953c34.13037,24.79883,31.24707,105.82129,24.88623,193.79785a4.50192,4.50192,0,0,1-4.29444,4.17383l-15.88183.69141C772.03181,719.12152,771.96589,719.12347,771.90046,719.12347Z" transform="translate(-135.73706 -132.3937)" fill="#2f2e41"/><circle cx="592.53158" cy="282.47071" r="24.56103" fill="#a0616a"/><path d="M729.32893,542.16156a39.89858,39.89858,0,0,1-17.02368-3.93457l-.18262-.085-.07251-.18848-22.02954-57.07617-.41895-9.917A23.7725,23.7725,0,0,1,714.692,446.22015l23.38769,1.31739a23.787,23.787,0,0,1,22.43677,23.61035c.60742,1.167,4.92139,10.292-3.533,18.86523-.31592,1.95215-3.27319,22.24707,7.88672,33.40723l.31372.31347-.27417.34864C764.732,524.309,750.39949,542.15863,729.32893,542.16156Z" transform="translate(-135.73706 -132.3937)" fill="#3f3d56"/><path d="M762.17091,546.46725a10.05576,10.05576,0,0,0,5.277-14.48823l23.35887-27.04334-18.41436-2.39689-19.35886,26.04828a10.11028,10.11028,0,0,0,9.13733,17.88018Z" transform="translate(-135.73706 -132.3937)" fill="#a0616a"/><path d="M776.77546,525.59418a4.48916,4.48916,0,0,1-2.46875-.74024l-11.553-7.57715a4.49134,4.49134,0,0,1-1.39892-6.06445l8.36377-14.05176a6.27236,6.27236,0,0,0-2.824-8.93164l-24.02783-10.77246a14.32392,14.32392,0,0,1-8.11206-15.915h0a14.24089,14.24089,0,0,1,20.43237-9.7539l36.45215,18.67871a19.17711,19.17711,0,0,1,6.80493,28.28906L780.4239,523.725A4.48892,4.48892,0,0,1,776.77546,525.59418Z" transform="translate(-135.73706 -132.3937)" fill="#3f3d56"/><path d="M703.142,411.37254c7.75642-.62285,14.19623-8.3714,13.38973-16.11089a13.00909,13.00909,0,0,0,11.14121,13.24574c3.55787.392,7.4584-.68444,10.55524,1.11047,3.43,1.988,4.52758,6.81578,8.10091,8.53283,3.45255,1.659,7.83771-.60362,9.54346-4.03331s1.28713-7.5502.15669-11.21005a31.65248,31.65248,0,0,0-52.68951-12.97513c-3.26143,3.28049-5.851,7.46146-6.271,12.06821s1.717,9.60535,5.85416,11.67486Z" transform="translate(-135.73706 -132.3937)" fill="#2f2e41"/><path d="M646.00131,343.3379a10.05578,10.05578,0,0,1,3.10451,15.10357l19.15887,30.16483-18.567-.31813-15.34707-28.59626a10.11027,10.11027,0,0,1,11.65066-16.354Z" transform="translate(-135.73706 -132.3937)" fill="#a0616a"/><path d="M661.44385,364.81768l24.67358,58.30169,25.86871,43.86419a14.18889,14.18889,0,0,1-8.12022,20.7901h0a14.26532,14.26532,0,0,1-16.95083-7.56917L637.0578,373.67221a4.49993,4.49993,0,0,1,2.69943-6.19151l16.16594-5.193a4.60035,4.60035,0,0,1,.94246-.19733A4.47425,4.47425,0,0,1,661.44385,364.81768Z" transform="translate(-135.73706 -132.3937)" fill="#3f3d56"/><path d="M892.73706,767.6063h-756a1,1,0,0,1,0-2h756a1,1,0,0,1,0,2Z" transform="translate(-135.73706 -132.3937)" fill="#ccc"/><path d="M733.59533,240.6063v82a1,1,0,1,1-2,0v-82a1,1,0,0,1,2,0Z" transform="translate(-135.73706 -132.3937)" fill="#ccc"/><path d="M820.42095,310.17127l-28.28427,28.28427a1,1,0,0,1-1.41421-1.41421l28.28427-28.28427a1,1,0,1,1,1.41421,1.41421Z" transform="translate(-135.73706 -132.3937)" fill="#ccc"/><path d="M644.76971,310.17127,673.054,338.45554a1,1,0,0,0,1.41422-1.41421l-28.28428-28.28427a1,1,0,1,0-1.41421,1.41421Z" transform="translate(-135.73706 -132.3937)" fill="#ccc"/></svg> \ No newline at end of file +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + data-name="Layer 1" + width="928.52587" + height="635.2126" + viewBox="0 0 928.52587 635.2126" + version="1.1" + id="svg52" + sodipodi:docname="undraw_intro_1.svg" + inkscape:export-filename="/home/vjrj/proyectos/dev/ginkgo/assets/img/undraw_intro_1.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" + inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs56" /> + <sodipodi:namedview + id="namedview54" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="true" + showgrid="false" + inkscape:zoom="1.374343" + inkscape:cx="464.2218" + inkscape:cy="317.60629" + inkscape:window-width="3440" + inkscape:window-height="1370" + inkscape:window-x="0" + inkscape:window-y="33" + inkscape:window-maximized="1" + inkscape:current-layer="svg52" /> + <circle + cx="546.40861" + cy="233" + r="233" + fill="#f2f2f2" + id="circle2" /> + <path + d="M267.14836,695.73927a39.063,39.063,0,0,0,37.72112-6.64475c13.212-11.08918,17.35435-29.35853,20.72485-46.275l9.96924-50.03559-20.87165,14.37143c-15.00965,10.33508-30.35744,21.00127-40.75007,35.97113s-14.929,35.40506-6.57885,51.60315" + transform="translate(-135.73706 -132.3937)" + fill="#e6e6e6" + id="path4" /> + <path + d="M268.93246,756.31777c-2.11249-15.38745-4.28468-30.97255-2.80288-46.52494,1.316-13.81219,5.52988-27.30282,14.10882-38.36422a63.8196,63.8196,0,0,1,16.37384-14.83745c1.63739-1.03352,3.14442,1.5614,1.51416,2.59041a60.67183,60.67183,0,0,0-23.99889,28.9564c-5.22489,13.28948-6.06393,27.77612-5.16355,41.89338.54449,8.53722,1.69847,17.01851,2.86134,25.48891a1.55428,1.55428,0,0,1-1.04766,1.84517,1.50915,1.50915,0,0,1-1.84518-1.04766Z" + transform="translate(-135.73706 -132.3937)" + fill="#f2f2f2" + id="path6" /> + <path + d="M408.73336,735.12443a22.26366,22.26366,0,0,0,20.4619,7.60621c9.69252-1.64386,16.99541-9.4324,23.52884-16.77825l19.32458-21.72757L457.644,705.27456c-10.359.75491-20.97969,1.57515-30.4046,5.93973s-17.54587,13.10443-18.10946,23.4756" + transform="translate(-135.73706 -132.3937)" + fill="#e6e6e6" + id="path8" /> + <path + d="M392.14858,765.42363c3.39683-8.17455,6.82128-16.46349,12.03288-23.68308,4.62846-6.41176,10.589-11.8301,17.99559-14.7958a36.37365,36.37365,0,0,1,12.32755-2.57538c1.103-.03617,1.096,1.67409-.00222,1.7101a34.57944,34.57944,0,0,0-20.14644,7.31937c-6.39969,5.028-10.988,11.90886-14.61472,19.1095-2.19317,4.35449-4.07055,8.85716-5.94042,13.35705a.88586.88586,0,0,1-1.047.60523.86012.86012,0,0,1-.60523-1.047Z" + transform="translate(-135.73706 -132.3937)" + fill="#f2f2f2" + id="path10" /> + <path + d="M289.27958,729.08926a28.75529,28.75529,0,0,0,25.05474,12.93133c12.68315-.60208,23.25684-9.45412,32.77516-17.85807l28.15329-24.85722L356.63,698.41361c-13.39961-.64126-27.14492-1.23941-39.90759,2.89278s-24.53307,14.0769-26.8668,27.28729" + transform="translate(-135.73706 -132.3937)" + fill="#e6e6e6" + id="path12" /> + <path + d="M262.96242,765.16329c10.16773-17.99115,21.9614-37.98626,43.03473-44.377a48.022,48.022,0,0,1,18.10109-1.869c1.9218.16571,1.44191,3.1281-.4764,2.9627a44.61381,44.61381,0,0,0-28.88649,7.64231c-8.1449,5.544-14.48659,13.25165-19.85414,21.42525-3.28779,5.00658-6.23278,10.22556-9.17833,15.43754-.94134,1.66563-3.69279.46328-2.74046-1.22182Z" + transform="translate(-135.73706 -132.3937)" + fill="#f2f2f2" + id="path14" /> + <path + d="M702.07,458.07511c20.21713-11.11154,45.37875-8.88155,67.16141-1.28454s41.52211,20.04317,62.67523,29.24883c64.64,28.1308,142.54824,23.5948,203.48691-11.84751,5.76335,13.406-.41945,28.74022-7.21108,41.65571s-14.53209,26.914-11.7363,41.236c3.57763,18.32718,22.793,29.31536,30.57874,46.28791,7.39086,16.11167,3.42387,35.0325-2.24615,51.82719s-13.028,33.7152-12.06453,51.415,13.82268,36.416,31.54867,36.43c-26.26936,4.08171-53.0555,8.16626-79.3089,3.9832s-52.36859-18.06777-64.55825-41.693c-6.09277-11.80863-8.44148-25.38593-15.43872-36.68213-11.91826-19.2406-34.79115-28.28862-56.37224-35.1079s-44.6762-13.38826-59.871-30.16213c-14.47787-15.98239-19.06353-38.24611-26.73413-58.4007a186.53661,186.53661,0,0,0-64.58839-84.22984" + transform="translate(-135.73706 -132.3937)" + fill="#6c63ff" + id="path16" /> + <path + d="M725.49486,374.3382c-7.097-3.30155-15.81044-4.38389-23.03182-1.316s-12.14452,10.93154-9.80947,17.89083c1.05869,3.15524,3.46989,6.25835,2.53051,9.445-.72307,2.45285-3.24546,4.07226-5.72259,5.22372s-5.18694,2.11952-6.97842,4.06155-2.16509,5.28533.07286,6.79139c.73731.49618,1.65885.7315,2.37375,1.25437a3.772,3.772,0,0,1,1.16432,4.22219,8.89329,8.89329,0,0,1-2.85084,3.75066c-2.54053,2.19094-5.89807,4.69849-5.10925,7.80873a5.47831,5.47831,0,0,0,3.697,3.45788,18.36721,18.36721,0,0,0,5.42688.71626l74.96621,2.36156a28.422,28.422,0,0,0,7.40167-.41344,8.76185,8.76185,0,0,0,5.81294-3.905c1.43559-2.65728.4931-5.93057-1.2798-8.41186s-4.282-4.43862-6.35525-6.71709-3.76948-5.1227-3.404-8.06747c.29256-2.35733,1.84718-4.39471,2.96321-6.53661s1.76427-4.81847.31886-6.78893c-2.03678-2.77665-6.92687-2.5255-9.24284-5.11283-1.74777-1.95256-1.41027-4.76346-1.58405-7.28135-.418-6.05656-4.61117-11.77645-10.58027-14.43257a20.83058,20.83058,0,0,0-18.95323,1.29081Z" + transform="translate(-135.73706 -132.3937)" + fill="#2f2e41" + id="path18" /> + <polygon + points="542.385 622.099 530.644 618.571 538.663 571.604 555.992 576.811 542.385 622.099" + fill="#a0616a" + id="polygon20" /> + <path + d="M677.69743,766.77357l-37.85868-11.37465.14386-.47886a15.386,15.386,0,0,1,19.16265-10.30886l.00093.00028,23.12268,6.9473Z" + transform="translate(-135.73706 -132.3937)" + fill="#2f2e41" + id="path22" /> + <polygon + points="653.182 622.496 640.922 622.495 635.09 575.207 653.184 575.208 653.182 622.496" + fill="#a0616a" + id="polygon24" /> + <path + d="M792.04534,766.77357l-39.53051-.00147v-.5a15.38605,15.38605,0,0,1,15.38647-15.38623h.001l24.1438.001Z" + transform="translate(-135.73706 -132.3937)" + fill="#2f2e41" + id="path26" /> + <path + d="M771.90046,719.12347a4.50048,4.50048,0,0,1-4.4414-3.78808L749.25569,601.7807a3.50022,3.50022,0,0,0-6.68824-.78906L695.40608,714.52777a4.51622,4.51622,0,0,1-5.57862,2.54394L672.79328,711.393a4.48511,4.48511,0,0,1-2.9663-5.26074L708.4759,535.11078a4.52538,4.52538,0,0,1,3.37183-3.3916L763.68025,519.687a4.5623,4.5623,0,0,1,3.70752.76953c34.13037,24.79883,31.24707,105.82129,24.88623,193.79785a4.50192,4.50192,0,0,1-4.29444,4.17383l-15.88183.69141C772.03181,719.12152,771.96589,719.12347,771.90046,719.12347Z" + transform="translate(-135.73706 -132.3937)" + fill="#2f2e41" + id="path28" /> + <circle + cx="592.53158" + cy="282.47071" + r="24.56103" + fill="#a0616a" + id="circle30" /> + <path + d="M729.32893,542.16156a39.89858,39.89858,0,0,1-17.02368-3.93457l-.18262-.085-.07251-.18848-22.02954-57.07617-.41895-9.917A23.7725,23.7725,0,0,1,714.692,446.22015l23.38769,1.31739a23.787,23.787,0,0,1,22.43677,23.61035c.60742,1.167,4.92139,10.292-3.533,18.86523-.31592,1.95215-3.27319,22.24707,7.88672,33.40723l.31372.31347-.27417.34864C764.732,524.309,750.39949,542.15863,729.32893,542.16156Z" + transform="translate(-135.73706 -132.3937)" + fill="#3f3d56" + id="path32" /> + <path + d="M762.17091,546.46725a10.05576,10.05576,0,0,0,5.277-14.48823l23.35887-27.04334-18.41436-2.39689-19.35886,26.04828a10.11028,10.11028,0,0,0,9.13733,17.88018Z" + transform="translate(-135.73706 -132.3937)" + fill="#a0616a" + id="path34" /> + <path + d="M776.77546,525.59418a4.48916,4.48916,0,0,1-2.46875-.74024l-11.553-7.57715a4.49134,4.49134,0,0,1-1.39892-6.06445l8.36377-14.05176a6.27236,6.27236,0,0,0-2.824-8.93164l-24.02783-10.77246a14.32392,14.32392,0,0,1-8.11206-15.915h0a14.24089,14.24089,0,0,1,20.43237-9.7539l36.45215,18.67871a19.17711,19.17711,0,0,1,6.80493,28.28906L780.4239,523.725A4.48892,4.48892,0,0,1,776.77546,525.59418Z" + transform="translate(-135.73706 -132.3937)" + fill="#3f3d56" + id="path36" /> + <path + d="M703.142,411.37254c7.75642-.62285,14.19623-8.3714,13.38973-16.11089a13.00909,13.00909,0,0,0,11.14121,13.24574c3.55787.392,7.4584-.68444,10.55524,1.11047,3.43,1.988,4.52758,6.81578,8.10091,8.53283,3.45255,1.659,7.83771-.60362,9.54346-4.03331s1.28713-7.5502.15669-11.21005a31.65248,31.65248,0,0,0-52.68951-12.97513c-3.26143,3.28049-5.851,7.46146-6.271,12.06821s1.717,9.60535,5.85416,11.67486Z" + transform="translate(-135.73706 -132.3937)" + fill="#2f2e41" + id="path38" /> + <path + d="M646.00131,343.3379a10.05578,10.05578,0,0,1,3.10451,15.10357l19.15887,30.16483-18.567-.31813-15.34707-28.59626a10.11027,10.11027,0,0,1,11.65066-16.354Z" + transform="translate(-135.73706 -132.3937)" + fill="#a0616a" + id="path40" /> + <path + d="M661.44385,364.81768l24.67358,58.30169,25.86871,43.86419a14.18889,14.18889,0,0,1-8.12022,20.7901h0a14.26532,14.26532,0,0,1-16.95083-7.56917L637.0578,373.67221a4.49993,4.49993,0,0,1,2.69943-6.19151l16.16594-5.193a4.60035,4.60035,0,0,1,.94246-.19733A4.47425,4.47425,0,0,1,661.44385,364.81768Z" + transform="translate(-135.73706 -132.3937)" + fill="#3f3d56" + id="path42" /> + <path + d="M892.73706,767.6063h-756a1,1,0,0,1,0-2h756a1,1,0,0,1,0,2Z" + transform="translate(-135.73706 -132.3937)" + fill="#ccc" + id="path44" /> + <path + d="M733.59533,240.6063v82a1,1,0,1,1-2,0v-82a1,1,0,0,1,2,0Z" + transform="translate(-135.73706 -132.3937)" + fill="#ccc" + id="path46" /> + <path + d="M820.42095,310.17127l-28.28427,28.28427a1,1,0,0,1-1.41421-1.41421l28.28427-28.28427a1,1,0,1,1,1.41421,1.41421Z" + transform="translate(-135.73706 -132.3937)" + fill="#ccc" + id="path48" /> + <path + d="M644.76971,310.17127,673.054,338.45554a1,1,0,0,0,1.41422-1.41421l-28.28428-28.28427a1,1,0,1,0-1.41421,1.41421Z" + transform="translate(-135.73706 -132.3937)" + fill="#ccc" + id="path50" /> +</svg> diff --git a/assets/img/undraw_intro_2.png b/assets/img/undraw_intro_2.png index 9bf6801c2f45de0537f9e7829643bbc09bbb66cf..66202eae2fa00e19d069dec3a8e52740679dd2f0 100644 Binary files a/assets/img/undraw_intro_2.png and b/assets/img/undraw_intro_2.png differ diff --git a/assets/img/undraw_intro_2.svg b/assets/img/undraw_intro_2.svg index 9f9094f28c2d9da0cbcca8eb1f717bf6b117078a..35bcfbf5f9540c7fd5d90e96c05348966e99e806 100644 --- a/assets/img/undraw_intro_2.svg +++ b/assets/img/undraw_intro_2.svg @@ -1 +1,246 @@ -<svg xmlns="http://www.w3.org/2000/svg" data-name="Layer 1" width="619.86836" height="562.03084" viewBox="0 0 619.86836 562.03084" xmlns:xlink="http://www.w3.org/1999/xlink"><rect x="60.40639" y="139.84921" width="280.48127" height="277.59048" rx="26.74409" fill="#f2f2f2"/><path d="M424.884,314.33363a68.91168,68.91168,0,0,0-68.91167,68.91167v176.435a21.24414,21.24414,0,0,0,21.24414,21.24414H522.08892A103.36435,103.36435,0,0,0,625.45327,477.5601V335.57777a21.24415,21.24415,0,0,0-21.24414-21.24414Z" transform="translate(-290.06582 -168.98458)" fill="#fff"/><path d="M877.7568,217.21468H311.02633a1,1,0,0,1,0-2H877.7568a1,1,0,0,1,0,2Z" transform="translate(-290.06582 -168.98458)" fill="#e6e6e6"/><ellipse cx="49.31535" cy="9.56458" rx="8.45661" ry="8.64507" fill="#e6e6e6"/><ellipse cx="78.5291" cy="9.56458" rx="8.45661" ry="8.64507" fill="#e6e6e6"/><ellipse cx="107.74285" cy="9.56458" rx="8.45661" ry="8.64507" fill="#e6e6e6"/><path d="M431.12009,185.382a.9967.9967,0,0,1-.71484-.30078l-5.70605-5.833a.99951.99951,0,0,1,0-1.39843l5.70605-5.83252a1,1,0,1,1,1.42969,1.39843l-5.022,5.1333,5.022,5.13379a1,1,0,0,1-.71485,1.69922Z" transform="translate(-290.06582 -168.98458)" fill="#e6e6e6"/><path d="M440.70847,185.382a1,1,0,0,1-.71484-1.69922l5.02148-5.13379-5.02148-5.1333a1,1,0,1,1,1.42969-1.39843l5.70556,5.83252a.99953.99953,0,0,1,0,1.39843l-5.70556,5.833A.9967.9967,0,0,1,440.70847,185.382Z" transform="translate(-290.06582 -168.98458)" fill="#e6e6e6"/><path d="M827.2183,170.905h-10.61a2.18934,2.18934,0,0,0-2.19,2.19v10.62a2.18934,2.18934,0,0,0,2.19,2.19h10.61a2.1979,2.1979,0,0,0,2.2-2.19v-10.62A2.1979,2.1979,0,0,0,827.2183,170.905Z" transform="translate(-290.06582 -168.98458)" fill="#e6e6e6"/><path d="M801.2183,170.905h-10.61a2.18934,2.18934,0,0,0-2.19,2.19v10.62a2.18934,2.18934,0,0,0,2.19,2.19h10.61a2.1979,2.1979,0,0,0,2.2-2.19v-10.62A2.1979,2.1979,0,0,0,801.2183,170.905Z" transform="translate(-290.06582 -168.98458)" fill="#e6e6e6"/><path d="M851.7183,171.405h-10.61a2.18934,2.18934,0,0,0-2.19,2.19v10.62a2.18934,2.18934,0,0,0,2.19,2.19h10.61a2.1979,2.1979,0,0,0,2.2-2.19v-10.62A2.1979,2.1979,0,0,0,851.7183,171.405Z" transform="translate(-290.06582 -168.98458)" fill="#e6e6e6"/><path d="M638.94274,186.98458h-69a9,9,0,0,1,0-18h69a9,9,0,0,1,0,18Z" transform="translate(-290.06582 -168.98458)" fill="#e6e6e6"/><path d="M525.3338,486.38416H371.34105a3.32086,3.32086,0,1,1,0-6.64172H525.3338a3.32086,3.32086,0,0,1,0,6.64172Z" transform="translate(-290.06582 -168.98458)" fill="#f2f2f2"/><path d="M525.3338,391.66156H293.38721a3.32086,3.32086,0,1,1,0-6.64171H525.3338a3.32086,3.32086,0,0,1,0,6.64171Z" transform="translate(-290.06582 -168.98458)" fill="#f2f2f2"/><path d="M525.3383,415.3753H293.382a3.32344,3.32344,0,0,0,0,6.64687H525.3383a3.32344,3.32344,0,0,0,0-6.64687Z" transform="translate(-290.06582 -168.98458)" fill="#f2f2f2"/><path d="M525.3338,452.38245H293.38721a3.32086,3.32086,0,1,1,0-6.64172H525.3338a3.32086,3.32086,0,0,1,0,6.64172Z" transform="translate(-290.06582 -168.98458)" fill="#f2f2f2"/><polygon points="430.582 548.714 419.933 548.713 414.868 507.64 430.584 507.641 430.582 548.714" fill="#a0616a"/><path d="M721.02239,728.80744l-32.74574-.00125v-.41408a12.74625,12.74625,0,0,1,12.74555-12.74536h.00079l5.98141-4.53779,11.16,4.53851,2.85851.00007Z" transform="translate(-290.06582 -168.98458)" fill="#2f2e41"/><polygon points="537.725 548.714 527.077 548.713 522.011 507.64 537.728 507.641 537.725 548.714" fill="#a0616a"/><path d="M828.16609,728.80744l-32.74574-.00125v-.41408a12.74625,12.74625,0,0,1,12.74555-12.74536h.00079l5.98141-4.53779,11.16,4.53851,2.8585.00007Z" transform="translate(-290.06582 -168.98458)" fill="#2f2e41"/><path d="M729.33579,481.73279s-6.99338,7.42211-7.28869,12.23732,3.349-3.93121-.29532,4.81522-3.64434,2.91547-3.64434,8.74642-7.72224,11.52478-7.72224,11.52478L697.651,571.449l7.3368,122.67319h16.03512c14.90172-45.42466,21.83474-80.503,13.8485-96.21067l22.2685-49.4952S799.21831,680.086,800.93726,681.63758s1.71895-.63508,1.71895,1.55153-2.18661,0,0,2.1866l10.20416,10.20416,15.30624-1.45773s2.04837-95.33-15.01092-111.80547c0,0,3.93966-51.01877,0-50.87551s-3.93966,6.70308-3.93966.14326,4.66853-8.31021,4.66853-8.31021L800.76492,477.197Z" transform="translate(-290.06582 -168.98458)" fill="#2f2e41"/><path d="M811.95805,380.16959l-14.82,62.05,3.5,23.08,4.2,27.65-14.52-.94-22.47-1.46-41.72-2.7-3.65-122.45,19.14-20,3.42-9.71,27.67-.17,6.62,11.66,17.02,4.84a42.21587,42.21587,0,0,1,6.14,4.74c4.2,3.89,7.92,8.83,9.66,13.89a18.26132,18.26132,0,0,1,.99,4.57Z" transform="translate(-290.06582 -168.98458)" fill="#e6e6e6"/><path d="M683.16043,537.60686a8.7959,8.7959,0,0,0,2.66491-13.12821l21.10689-38.4259-9.19319-8.45131-24.73528,45.82233a8.78357,8.78357,0,0,0,10.15667,14.18309Z" transform="translate(-290.06582 -168.98458)" fill="#e6e6e6"/><path d="M734.6398,357.91347l-4.91986,88.1348L706.01713,501.435l-15.42727,20.45876,1.75369-9.27062-10.63419-5.32074-.99855-.49563,20.41561-79.228,1.88048-30.78742A38.36336,38.36336,0,0,1,717.10322,369.364l11.80767-9.59191Z" transform="translate(-290.06582 -168.98458)" fill="#e6e6e6"/><path d="M683.16043,537.60686a8.7959,8.7959,0,0,0,2.66491-13.12821l21.10689-38.4259-9.19319-8.45131-24.73528,45.82233a8.78357,8.78357,0,0,0,10.15667,14.18309Z" transform="translate(-290.06582 -168.98458)" fill="#a0616a"/><path d="M734.6398,357.91347l-4.91986,88.1348L706.01713,501.435l-15.42727,20.45876,1.75369-9.27062-10.63419-5.32074-.99855-.49563,20.41561-79.228,1.88048-30.78742A38.36336,38.36336,0,0,1,717.10322,369.364l11.80767-9.59191Z" transform="translate(-290.06582 -168.98458)" fill="#e6e6e6"/><rect x="213.68198" y="191.96732" width="280.48127" height="170.59048" rx="26.74409" fill="#fff"/><path d="M757.48526,532.54255H530.4921A27.77566,27.77566,0,0,1,502.748,504.79841V387.69587a27.77566,27.77566,0,0,1,27.74414-27.74414H757.48526a27.77556,27.77556,0,0,1,27.74365,27.74414V504.79841A27.77556,27.77556,0,0,1,757.48526,532.54255ZM530.4921,361.95173A25.74413,25.74413,0,0,0,504.748,387.69587v43.76968a99.077,99.077,0,0,0,99.077,99.077h153.6603a25.74365,25.74365,0,0,0,25.74365-25.74365v-117.103a25.74413,25.74413,0,0,0-25.74414-25.74414Z" transform="translate(-290.06582 -168.98458)" fill="#3f3d56"/><rect x="243.92262" y="316.26256" width="60" height="7" rx="3.5" fill="#6c63ff"/><rect x="419.92262" y="306.76256" width="44" height="26" rx="3.5" fill="#6c63ff"/><circle cx="261.92262" cy="239.76256" r="18" fill="#6c63ff"/><circle cx="467.79653" cy="138.77976" r="22.60167" fill="#a0616a"/><path d="M776.40434,319.44653c.17634,1.35028-2.26629,1.493-2.81707.24763s.16361-2.65684.85821-3.82811l1.61227-2.71869a3.73532,3.73532,0,0,0-2.4605-5.56408h0c1.47528-3.318-.12574-7.4594-3.06517-9.59131s-7.313,1.857-10.87911,2.54107-6.42119-2.04529-9.67189-.42719l1.953-4.50218-10.81018,4.65749,2.5115-5.06459c-2.72828.14863-3.89,3.47146-4.43363,6.14916-.57923,2.853-2.09906,6.41945-5.20067,5.8284a4.0018,4.0018,0,0,1-3.02643-2.998c-2.39623-9.24107,4.56171-19.34369,13.78545-20.96447a13.5606,13.5606,0,0,1,25.88081,1.23229l3.0242-3.70271.58962,5.24629c2.17326-.231,4.22651,1.30332,5.28261,3.21671s.557,4.38376,1.571,6.31979c4.54466,8.677,3.041,18.44556-3.97631,25.10044" transform="translate(-290.06582 -168.98458)" fill="#2f2e41"/><path d="M855.67531,713.68247a2.26935,2.26935,0,0,0,1.64468-3.93333l-.1555-.61819q.03072-.07428.06179-.1484a6.09416,6.09416,0,0,1,11.24138.04177c1.83859,4.42818,4.17943,8.86389,4.7558,13.546a18.02889,18.02889,0,0,1-.31649,6.20046A72.28135,72.28135,0,0,0,879.48213,698.75a69.76616,69.76616,0,0,0-.43275-7.78294q-.3585-3.17781-.99471-6.31034a73.11893,73.11893,0,0,0-14.50012-30.98962,19.459,19.459,0,0,1-8.09295-8.39652,14.84338,14.84338,0,0,1-1.34991-4.05618c.394.05168,1.48556-5.94866,1.18841-6.31679.549-.83317,1.53177-1.24733,2.13143-2.06035,2.98232-4.0434,7.0912-3.33741,9.23621,2.15727,4.58224,2.31266,4.62659,6.14806,1.815,9.83683-1.78878,2.34682-2.03456,5.52233-3.60409,8.03478.16151.20671.32945.407.49091.61366a73.59123,73.59123,0,0,1,7.681,12.1686,30.59244,30.59244,0,0,1,1.8264-14.20959c1.74819-4.21732,5.02491-7.76915,7.91045-11.415a6.27921,6.27921,0,0,1,11.184,3.08332q.00886.08063.01731.1612-.6429.36267-1.25863.76992a3.0782,3.0782,0,0,0,1.24106,5.60174l.06277.00967a30.628,30.628,0,0,1-.80734,4.57938c3.70179,14.31579-4.29011,19.5299-15.70147,19.76412-.25191.12916-.49739.25833-.74929.38109a75.11456,75.11456,0,0,1,4.04326,19.02779,71.24332,71.24332,0,0,1-.05167,11.50322l.01938-.13562a18.8256,18.8256,0,0,1,6.42661-10.87027c4.9456-4.06264,11.93282-5.55869,17.26825-8.82426a3.533,3.533,0,0,1,5.41122,3.43708l-.02182.14261a20.67547,20.67547,0,0,0-2.31871,1.11733q-.6429.36276-1.25864.76992a3.07824,3.07824,0,0,0,1.24107,5.6018l.06282.00965c.04519.00646.084.01295.12911.01943a30.65453,30.65453,0,0,1-5.63854,8.82923c-2.31464,12.49712-12.256,13.68282-22.89023,10.04353h-.00648a75.09193,75.09193,0,0,1-5.0444,14.72621H856.12687c-.06464-.20022-.12274-.40692-.1809-.60717a20.47485,20.47485,0,0,0,4.9863-.297c-1.337-1.64059-2.674-3.2941-4.011-4.93463a1.11772,1.11772,0,0,1-.084-.09689c-.67817-.8396-1.36282-1.67283-2.041-2.51246l-.00036-.001a29.99039,29.99039,0,0,1,.87876-7.63984Z" transform="translate(-290.06582 -168.98458)" fill="#f2f2f2"/><path d="M577.124,729.82542a1.18647,1.18647,0,0,0,1.19007,1.19h330.29a1.19,1.19,0,0,0,0-2.38H578.314A1.18651,1.18651,0,0,0,577.124,729.82542Z" transform="translate(-290.06582 -168.98458)" fill="#ccc"/><path d="M767.48859,532.25832a8.7959,8.7959,0,0,0,2.19681-13.2146l19.72835-39.15154-9.48764-8.11935L756.83443,518.445a8.78357,8.78357,0,0,0,10.65416,13.81328Z" transform="translate(-290.06582 -168.98458)" fill="#a0616a"/><path d="M812.14805,370.64957l.99,4.57-2.37,63.88-10.13,26.2-10.32,26.71-1.27,3.29-14.69,20.99,1.42-9.33-10.82-4.94-1.01-.45,3.9-11.02,8.97-25.32,3.88-10.96.84-32.61.78-30.83a38.36441,38.36441,0,0,1,13.11-27.91l7.06-6.16C806.688,360.64957,810.40806,365.58958,812.14805,370.64957Z" transform="translate(-290.06582 -168.98458)" fill="#e6e6e6"/><path d="M576.138,530.232l-46.8779-1a22.02467,22.02467,0,0,1-21.99209-22l-2-49.01237C511.02409,498.178,533.14387,523.52476,576.138,530.232Z" transform="translate(-290.06582 -168.98458)" fill="#6c63ff"/></svg> \ No newline at end of file +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + data-name="Layer 1" + width="619.86836" + height="562.03084" + viewBox="0 0 619.86836 562.03084" + version="1.1" + id="svg442" + sodipodi:docname="undraw_intro_2.svg" + inkscape:export-filename="/home/vjrj/dev/ginkgo/assets/img/undraw_intro_2.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" + inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs446" /> + <sodipodi:namedview + id="namedview444" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="true" + showgrid="false" + inkscape:zoom="1.5532956" + inkscape:cx="309.66418" + inkscape:cy="281.01541" + inkscape:window-width="3440" + inkscape:window-height="1370" + inkscape:window-x="0" + inkscape:window-y="33" + inkscape:window-maximized="1" + inkscape:current-layer="svg442" /> + <rect + x="60.40639" + y="139.84921" + width="280.48127" + height="277.59048" + rx="26.74409" + fill="#f2f2f2" + id="rect366" /> + <path + d="M424.884,314.33363a68.91168,68.91168,0,0,0-68.91167,68.91167v176.435a21.24414,21.24414,0,0,0,21.24414,21.24414H522.08892A103.36435,103.36435,0,0,0,625.45327,477.5601V335.57777a21.24415,21.24415,0,0,0-21.24414-21.24414Z" + transform="translate(-290.06582 -168.98458)" + fill="#fff" + id="path368" /> + <path + d="M877.7568,217.21468H311.02633a1,1,0,0,1,0-2H877.7568a1,1,0,0,1,0,2Z" + transform="translate(-290.06582 -168.98458)" + fill="#e6e6e6" + id="path370" /> + <ellipse + cx="49.31535" + cy="9.56458" + rx="8.45661" + ry="8.64507" + fill="#e6e6e6" + id="ellipse372" /> + <ellipse + cx="78.5291" + cy="9.56458" + rx="8.45661" + ry="8.64507" + fill="#e6e6e6" + id="ellipse374" /> + <ellipse + cx="107.74285" + cy="9.56458" + rx="8.45661" + ry="8.64507" + fill="#e6e6e6" + id="ellipse376" /> + <path + d="M431.12009,185.382a.9967.9967,0,0,1-.71484-.30078l-5.70605-5.833a.99951.99951,0,0,1,0-1.39843l5.70605-5.83252a1,1,0,1,1,1.42969,1.39843l-5.022,5.1333,5.022,5.13379a1,1,0,0,1-.71485,1.69922Z" + transform="translate(-290.06582 -168.98458)" + fill="#e6e6e6" + id="path378" /> + <path + d="M440.70847,185.382a1,1,0,0,1-.71484-1.69922l5.02148-5.13379-5.02148-5.1333a1,1,0,1,1,1.42969-1.39843l5.70556,5.83252a.99953.99953,0,0,1,0,1.39843l-5.70556,5.833A.9967.9967,0,0,1,440.70847,185.382Z" + transform="translate(-290.06582 -168.98458)" + fill="#e6e6e6" + id="path380" /> + <path + d="M827.2183,170.905h-10.61a2.18934,2.18934,0,0,0-2.19,2.19v10.62a2.18934,2.18934,0,0,0,2.19,2.19h10.61a2.1979,2.1979,0,0,0,2.2-2.19v-10.62A2.1979,2.1979,0,0,0,827.2183,170.905Z" + transform="translate(-290.06582 -168.98458)" + fill="#e6e6e6" + id="path382" /> + <path + d="M801.2183,170.905h-10.61a2.18934,2.18934,0,0,0-2.19,2.19v10.62a2.18934,2.18934,0,0,0,2.19,2.19h10.61a2.1979,2.1979,0,0,0,2.2-2.19v-10.62A2.1979,2.1979,0,0,0,801.2183,170.905Z" + transform="translate(-290.06582 -168.98458)" + fill="#e6e6e6" + id="path384" /> + <path + d="M851.7183,171.405h-10.61a2.18934,2.18934,0,0,0-2.19,2.19v10.62a2.18934,2.18934,0,0,0,2.19,2.19h10.61a2.1979,2.1979,0,0,0,2.2-2.19v-10.62A2.1979,2.1979,0,0,0,851.7183,171.405Z" + transform="translate(-290.06582 -168.98458)" + fill="#e6e6e6" + id="path386" /> + <path + d="M638.94274,186.98458h-69a9,9,0,0,1,0-18h69a9,9,0,0,1,0,18Z" + transform="translate(-290.06582 -168.98458)" + fill="#e6e6e6" + id="path388" /> + <path + d="M525.3338,486.38416H371.34105a3.32086,3.32086,0,1,1,0-6.64172H525.3338a3.32086,3.32086,0,0,1,0,6.64172Z" + transform="translate(-290.06582 -168.98458)" + fill="#f2f2f2" + id="path390" /> + <path + d="M525.3338,391.66156H293.38721a3.32086,3.32086,0,1,1,0-6.64171H525.3338a3.32086,3.32086,0,0,1,0,6.64171Z" + transform="translate(-290.06582 -168.98458)" + fill="#f2f2f2" + id="path392" /> + <path + d="M525.3383,415.3753H293.382a3.32344,3.32344,0,0,0,0,6.64687H525.3383a3.32344,3.32344,0,0,0,0-6.64687Z" + transform="translate(-290.06582 -168.98458)" + fill="#f2f2f2" + id="path394" /> + <path + d="M525.3338,452.38245H293.38721a3.32086,3.32086,0,1,1,0-6.64172H525.3338a3.32086,3.32086,0,0,1,0,6.64172Z" + transform="translate(-290.06582 -168.98458)" + fill="#f2f2f2" + id="path396" /> + <polygon + points="430.582 548.714 419.933 548.713 414.868 507.64 430.584 507.641 430.582 548.714" + fill="#a0616a" + id="polygon398" /> + <path + d="M721.02239,728.80744l-32.74574-.00125v-.41408a12.74625,12.74625,0,0,1,12.74555-12.74536h.00079l5.98141-4.53779,11.16,4.53851,2.85851.00007Z" + transform="translate(-290.06582 -168.98458)" + fill="#2f2e41" + id="path400" /> + <polygon + points="537.725 548.714 527.077 548.713 522.011 507.64 537.728 507.641 537.725 548.714" + fill="#a0616a" + id="polygon402" /> + <path + d="M828.16609,728.80744l-32.74574-.00125v-.41408a12.74625,12.74625,0,0,1,12.74555-12.74536h.00079l5.98141-4.53779,11.16,4.53851,2.8585.00007Z" + transform="translate(-290.06582 -168.98458)" + fill="#2f2e41" + id="path404" /> + <path + d="M729.33579,481.73279s-6.99338,7.42211-7.28869,12.23732,3.349-3.93121-.29532,4.81522-3.64434,2.91547-3.64434,8.74642-7.72224,11.52478-7.72224,11.52478L697.651,571.449l7.3368,122.67319h16.03512c14.90172-45.42466,21.83474-80.503,13.8485-96.21067l22.2685-49.4952S799.21831,680.086,800.93726,681.63758s1.71895-.63508,1.71895,1.55153-2.18661,0,0,2.1866l10.20416,10.20416,15.30624-1.45773s2.04837-95.33-15.01092-111.80547c0,0,3.93966-51.01877,0-50.87551s-3.93966,6.70308-3.93966.14326,4.66853-8.31021,4.66853-8.31021L800.76492,477.197Z" + transform="translate(-290.06582 -168.98458)" + fill="#2f2e41" + id="path406" /> + <path + d="M811.95805,380.16959l-14.82,62.05,3.5,23.08,4.2,27.65-14.52-.94-22.47-1.46-41.72-2.7-3.65-122.45,19.14-20,3.42-9.71,27.67-.17,6.62,11.66,17.02,4.84a42.21587,42.21587,0,0,1,6.14,4.74c4.2,3.89,7.92,8.83,9.66,13.89a18.26132,18.26132,0,0,1,.99,4.57Z" + transform="translate(-290.06582 -168.98458)" + fill="#e6e6e6" + id="path408" /> + <path + d="M683.16043,537.60686a8.7959,8.7959,0,0,0,2.66491-13.12821l21.10689-38.4259-9.19319-8.45131-24.73528,45.82233a8.78357,8.78357,0,0,0,10.15667,14.18309Z" + transform="translate(-290.06582 -168.98458)" + fill="#e6e6e6" + id="path410" /> + <path + d="M734.6398,357.91347l-4.91986,88.1348L706.01713,501.435l-15.42727,20.45876,1.75369-9.27062-10.63419-5.32074-.99855-.49563,20.41561-79.228,1.88048-30.78742A38.36336,38.36336,0,0,1,717.10322,369.364l11.80767-9.59191Z" + transform="translate(-290.06582 -168.98458)" + fill="#e6e6e6" + id="path412" /> + <path + d="M683.16043,537.60686a8.7959,8.7959,0,0,0,2.66491-13.12821l21.10689-38.4259-9.19319-8.45131-24.73528,45.82233a8.78357,8.78357,0,0,0,10.15667,14.18309Z" + transform="translate(-290.06582 -168.98458)" + fill="#a0616a" + id="path414" /> + <path + d="M734.6398,357.91347l-4.91986,88.1348L706.01713,501.435l-15.42727,20.45876,1.75369-9.27062-10.63419-5.32074-.99855-.49563,20.41561-79.228,1.88048-30.78742A38.36336,38.36336,0,0,1,717.10322,369.364l11.80767-9.59191Z" + transform="translate(-290.06582 -168.98458)" + fill="#e6e6e6" + id="path416" /> + <rect + x="213.68198" + y="191.96732" + width="280.48127" + height="170.59048" + rx="26.74409" + fill="#fff" + id="rect418" /> + <path + d="M757.48526,532.54255H530.4921A27.77566,27.77566,0,0,1,502.748,504.79841V387.69587a27.77566,27.77566,0,0,1,27.74414-27.74414H757.48526a27.77556,27.77556,0,0,1,27.74365,27.74414V504.79841A27.77556,27.77556,0,0,1,757.48526,532.54255ZM530.4921,361.95173A25.74413,25.74413,0,0,0,504.748,387.69587v43.76968a99.077,99.077,0,0,0,99.077,99.077h153.6603a25.74365,25.74365,0,0,0,25.74365-25.74365v-117.103a25.74413,25.74413,0,0,0-25.74414-25.74414Z" + transform="translate(-290.06582 -168.98458)" + fill="#3f3d56" + id="path420" /> + <rect + x="243.92262" + y="316.26256" + width="60" + height="7" + rx="3.5" + fill="#6c63ff" + id="rect422" /> + <rect + x="419.92262" + y="306.76256" + width="44" + height="26" + rx="3.5" + fill="#6c63ff" + id="rect424" /> + <circle + cx="261.92262" + cy="239.76256" + r="18" + fill="#6c63ff" + id="circle426" /> + <circle + cx="467.79653" + cy="138.77976" + r="22.60167" + fill="#a0616a" + id="circle428" /> + <path + d="M776.40434,319.44653c.17634,1.35028-2.26629,1.493-2.81707.24763s.16361-2.65684.85821-3.82811l1.61227-2.71869a3.73532,3.73532,0,0,0-2.4605-5.56408h0c1.47528-3.318-.12574-7.4594-3.06517-9.59131s-7.313,1.857-10.87911,2.54107-6.42119-2.04529-9.67189-.42719l1.953-4.50218-10.81018,4.65749,2.5115-5.06459c-2.72828.14863-3.89,3.47146-4.43363,6.14916-.57923,2.853-2.09906,6.41945-5.20067,5.8284a4.0018,4.0018,0,0,1-3.02643-2.998c-2.39623-9.24107,4.56171-19.34369,13.78545-20.96447a13.5606,13.5606,0,0,1,25.88081,1.23229l3.0242-3.70271.58962,5.24629c2.17326-.231,4.22651,1.30332,5.28261,3.21671s.557,4.38376,1.571,6.31979c4.54466,8.677,3.041,18.44556-3.97631,25.10044" + transform="translate(-290.06582 -168.98458)" + fill="#2f2e41" + id="path430" /> + <path + d="M855.67531,713.68247a2.26935,2.26935,0,0,0,1.64468-3.93333l-.1555-.61819q.03072-.07428.06179-.1484a6.09416,6.09416,0,0,1,11.24138.04177c1.83859,4.42818,4.17943,8.86389,4.7558,13.546a18.02889,18.02889,0,0,1-.31649,6.20046A72.28135,72.28135,0,0,0,879.48213,698.75a69.76616,69.76616,0,0,0-.43275-7.78294q-.3585-3.17781-.99471-6.31034a73.11893,73.11893,0,0,0-14.50012-30.98962,19.459,19.459,0,0,1-8.09295-8.39652,14.84338,14.84338,0,0,1-1.34991-4.05618c.394.05168,1.48556-5.94866,1.18841-6.31679.549-.83317,1.53177-1.24733,2.13143-2.06035,2.98232-4.0434,7.0912-3.33741,9.23621,2.15727,4.58224,2.31266,4.62659,6.14806,1.815,9.83683-1.78878,2.34682-2.03456,5.52233-3.60409,8.03478.16151.20671.32945.407.49091.61366a73.59123,73.59123,0,0,1,7.681,12.1686,30.59244,30.59244,0,0,1,1.8264-14.20959c1.74819-4.21732,5.02491-7.76915,7.91045-11.415a6.27921,6.27921,0,0,1,11.184,3.08332q.00886.08063.01731.1612-.6429.36267-1.25863.76992a3.0782,3.0782,0,0,0,1.24106,5.60174l.06277.00967a30.628,30.628,0,0,1-.80734,4.57938c3.70179,14.31579-4.29011,19.5299-15.70147,19.76412-.25191.12916-.49739.25833-.74929.38109a75.11456,75.11456,0,0,1,4.04326,19.02779,71.24332,71.24332,0,0,1-.05167,11.50322l.01938-.13562a18.8256,18.8256,0,0,1,6.42661-10.87027c4.9456-4.06264,11.93282-5.55869,17.26825-8.82426a3.533,3.533,0,0,1,5.41122,3.43708l-.02182.14261a20.67547,20.67547,0,0,0-2.31871,1.11733q-.6429.36276-1.25864.76992a3.07824,3.07824,0,0,0,1.24107,5.6018l.06282.00965c.04519.00646.084.01295.12911.01943a30.65453,30.65453,0,0,1-5.63854,8.82923c-2.31464,12.49712-12.256,13.68282-22.89023,10.04353h-.00648a75.09193,75.09193,0,0,1-5.0444,14.72621H856.12687c-.06464-.20022-.12274-.40692-.1809-.60717a20.47485,20.47485,0,0,0,4.9863-.297c-1.337-1.64059-2.674-3.2941-4.011-4.93463a1.11772,1.11772,0,0,1-.084-.09689c-.67817-.8396-1.36282-1.67283-2.041-2.51246l-.00036-.001a29.99039,29.99039,0,0,1,.87876-7.63984Z" + transform="translate(-290.06582 -168.98458)" + fill="#f2f2f2" + id="path432" /> + <path + d="M577.124,729.82542a1.18647,1.18647,0,0,0,1.19007,1.19h330.29a1.19,1.19,0,0,0,0-2.38H578.314A1.18651,1.18651,0,0,0,577.124,729.82542Z" + transform="translate(-290.06582 -168.98458)" + fill="#ccc" + id="path434" /> + <path + d="M767.48859,532.25832a8.7959,8.7959,0,0,0,2.19681-13.2146l19.72835-39.15154-9.48764-8.11935L756.83443,518.445a8.78357,8.78357,0,0,0,10.65416,13.81328Z" + transform="translate(-290.06582 -168.98458)" + fill="#a0616a" + id="path436" /> + <path + d="M812.14805,370.64957l.99,4.57-2.37,63.88-10.13,26.2-10.32,26.71-1.27,3.29-14.69,20.99,1.42-9.33-10.82-4.94-1.01-.45,3.9-11.02,8.97-25.32,3.88-10.96.84-32.61.78-30.83a38.36441,38.36441,0,0,1,13.11-27.91l7.06-6.16C806.688,360.64957,810.40806,365.58958,812.14805,370.64957Z" + transform="translate(-290.06582 -168.98458)" + fill="#e6e6e6" + id="path438" /> + <path + d="M576.138,530.232l-46.8779-1a22.02467,22.02467,0,0,1-21.99209-22l-2-49.01237C511.02409,498.178,533.14387,523.52476,576.138,530.232Z" + transform="translate(-290.06582 -168.98458)" + fill="#6c63ff" + id="path440" /> +</svg> diff --git a/assets/img/undraw_intro_3.png b/assets/img/undraw_intro_3.png index 0d950627ace154c9f3e64b96b59169f174c4d168..56d02d87c7dc22b099bf6642132fa8540da13a70 100644 Binary files a/assets/img/undraw_intro_3.png and b/assets/img/undraw_intro_3.png differ diff --git a/assets/img/undraw_intro_3.svg b/assets/img/undraw_intro_3.svg index da6b88b1d50822380848c0388b3a72eeabd69beb..8171dfa542b084b426700a00581d2297f698c621 100644 --- a/assets/img/undraw_intro_3.svg +++ b/assets/img/undraw_intro_3.svg @@ -1 +1,287 @@ -<svg xmlns="http://www.w3.org/2000/svg" data-name="Layer 1" width="1027.99206" height="529.55555" viewBox="0 0 1027.99206 529.55555" xmlns:xlink="http://www.w3.org/1999/xlink"><title>online_transactions</title><rect x="305.99206" y="295.38557" width="343.71997" height="234.16998" fill="#6c63ff"/><path d="M754.88605,453.21778h-338.24a4.11628,4.11628,0,0,0-4.11005,4.11v228.69a4.10986,4.10986,0,0,0,4.11005,4.11h338.24a4.10984,4.10984,0,0,0,4.11-4.11v-228.69A4.11626,4.11626,0,0,0,754.88605,453.21778Zm1.37,232.8a1.36568,1.36568,0,0,1-1.37,1.37h-338.24a1.36569,1.36569,0,0,1-1.37-1.37v-228.69a1.37207,1.37207,0,0,1,1.37-1.37h338.24a1.37206,1.37206,0,0,1,1.37,1.37Z" transform="translate(-86.00397 -185.22222)" fill="#3f3d56"/><rect x="344.33535" y="429.58731" width="154.74254" height="17.80224" rx="2" fill="#3f3d56"/><path d="M726.126,599.74775h-49.29a4.10991,4.10991,0,0,0-4.11005,4.11v38.34a4.10986,4.10986,0,0,0,4.11005,4.11h49.29a4.1098,4.1098,0,0,0,4.11-4.11v-38.34A4.10985,4.10985,0,0,0,726.126,599.74775Zm1.37,42.45a1.37206,1.37206,0,0,1-1.37,1.37h-49.29a1.37212,1.37212,0,0,1-1.37006-1.37v-38.34a1.36574,1.36574,0,0,1,1.37006-1.37h49.29a1.36568,1.36568,0,0,1,1.37,1.37Z" transform="translate(-86.00397 -185.22222)" fill="#3f3d56"/><rect x="598.67562" y="423.37233" width="33.60304" height="6.95235" rx="2" fill="#3f3d56"/><rect x="598.67562" y="434.32756" width="33.60304" height="6.95235" rx="2" fill="#3f3d56"/><rect x="598.67562" y="445.28278" width="33.60304" height="6.95235" rx="2" fill="#3f3d56"/><rect x="348.44356" y="284.4306" width="71.20896" height="30.12687" rx="2" fill="#3f3d56"/><path d="M475.52961,484.71625c0,5.29411-2.45241,9.58583-5.47761,9.58583s-5.47761-4.29172-5.47761-9.58583,5.47761-9.58582,5.47761-9.58582S475.52961,479.42215,475.52961,484.71625Z" transform="translate(-86.00397 -185.22222)" fill="#6c63ff"/><polygon points="901.992 161.837 899.992 161.837 899.992 385.451 672.992 385.451 672.992 387.451 901.992 387.451 901.992 161.837" fill="#3f3d56"/><polygon points="305.992 387.451 76.992 387.451 76.992 161.837 78.992 161.837 78.992 385.451 305.992 385.451 305.992 387.451" fill="#3f3d56"/><path d="M1113.35519,223.03181h-1.28168v-2.24294h.96126a.64087.64087,0,0,0,.64084-.64084V208.6129a.64085.64085,0,0,0-.64084-.64084h-.96126v-6.551a13.95586,13.95586,0,0,0-13.956-13.95591h-1.42421v-1.60211a.64085.64085,0,0,0-.64084-.64084h-11.53513a.64085.64085,0,0,0-.64084.64084v1.60211H875.46088a13.95586,13.95586,0,0,0-13.956,13.95591v296.9942a13.9559,13.9559,0,0,0,13.956,13.956h222.65667a13.9559,13.9559,0,0,0,13.956-13.956V235.84861h1.28168a.64087.64087,0,0,0,.64084-.64084V223.67265A.64085.64085,0,0,0,1113.35519,223.03181Z" transform="translate(-86.00397 -185.22222)" fill="#3f3d56"/><rect x="787.03482" y="11.37165" width="229.42338" height="304.40573" rx="1.9048" fill="#d0cde1"/><rect x="875.401" y="160.55814" width="39.35653" height="11.66295" rx="2" fill="#3f3d56"/><rect x="827.82072" y="69.75378" width="134.51708" height="4.99841" rx="2" fill="#3f3d56"/><rect x="827.82072" y="85.58206" width="134.51708" height="4.99841" rx="2" fill="#3f3d56"/><rect x="827.82072" y="101.41034" width="134.51708" height="4.99841" rx="2" fill="#3f3d56"/><rect x="827.82072" y="117.23863" width="134.51708" height="4.99841" rx="2" fill="#3f3d56"/><rect x="827.82072" y="133.06691" width="134.51708" height="4.99841" rx="2" fill="#3f3d56"/><circle cx="890.31727" cy="261.97835" r="41.77968" fill="#6c63ff"/><path d="M988.63566,479.42627a52.38194,52.38194,0,1,1,52.38193-52.38194A52.44121,52.44121,0,0,1,988.63566,479.42627Zm0-102.85908a50.47714,50.47714,0,1,0,50.47714,50.47714A50.53392,50.53392,0,0,0,988.63566,376.56719Z" transform="translate(-86.00397 -185.22222)" fill="#3f3d56"/><path d="M241.496,273.13387h-1.71341V226.19551a27.16665,27.16665,0,0,0-27.16673-27.16667H113.1707A27.16664,27.16664,0,0,0,86.004,226.19551V483.703a27.16664,27.16664,0,0,0,27.16673,27.16667h99.44519A27.16665,27.16665,0,0,0,239.78262,483.703V306.54539H241.496Z" transform="translate(-86.00397 -185.22222)" fill="#3f3d56"/><path d="M233.99737,227.79218V484.92413a20.28849,20.28849,0,0,1-20.28483,20.29192H113.78728a20.28842,20.28842,0,0,1-20.28475-20.29192V227.79218a20.28688,20.28688,0,0,1,20.28475-20.28471h12.12326a9.63757,9.63757,0,0,0,8.925,13.27583h56.97157a9.63747,9.63747,0,0,0,8.925-13.27583h12.98047A20.287,20.287,0,0,1,233.99737,227.79218Z" transform="translate(-86.00397 -185.22222)" fill="#d0cde1"/><rect x="64.36182" y="173.77302" width="26.76842" height="7.93258" rx="2" fill="#3f3d56"/><rect x="32" y="112.01225" width="91.49206" height="3.39968" rx="1.69984" fill="#3f3d56"/><rect x="32" y="122.77789" width="91.49206" height="3.39968" rx="1.69984" fill="#3f3d56"/><rect x="32" y="133.54352" width="91.49206" height="3.39968" rx="1.69984" fill="#3f3d56"/><rect x="32" y="144.30916" width="91.49206" height="3.39968" rx="1.69984" fill="#3f3d56"/><rect x="32" y="155.0748" width="91.49206" height="3.39968" rx="1.69984" fill="#3f3d56"/><circle cx="69.87495" cy="256.35481" r="28.81288" fill="#6c63ff"/><path d="M164.37142,463.80112A36.12462,36.12462,0,1,1,200.496,427.67651,36.16549,36.16549,0,0,1,164.37142,463.80112Zm0-70.9356a34.811,34.811,0,1,0,34.811,34.811A34.85016,34.85016,0,0,0,164.37142,392.86552Z" transform="translate(-86.00397 -185.22222)" fill="#3f3d56"/><rect x="147.50456" y="375.18969" width="28" height="28" fill="#d0cde1"/><path d="M278.50853,572.41192h-34v-34h34Zm-32.52174-1.47826h31.04348V539.89018H245.98679Z" transform="translate(-86.00397 -185.22222)" fill="#3f3d56"/><rect x="774.50456" y="375.18969" width="28" height="28" fill="#d0cde1"/><path d="M905.50853,572.41192h-34v-34h34Zm-32.52174-1.47826h31.04348V539.89018H872.98679Z" transform="translate(-86.00397 -185.22222)" fill="#3f3d56"/></svg> \ No newline at end of file +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + data-name="Layer 1" + width="1027.99206" + height="529.55555" + viewBox="0 0 1027.99206 529.55555" + version="1.1" + id="svg628" + sodipodi:docname="undraw_intro_3.svg" + inkscape:export-filename="/home/vjrj/dev/ginkgo/assets/img/undraw_intro_3.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" + inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:dc="http://purl.org/dc/elements/1.1/"> + <defs + id="defs632" /> + <sodipodi:namedview + id="namedview630" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="true" + showgrid="false" + inkscape:zoom="1.3696604" + inkscape:cx="513.99603" + inkscape:cy="264.66415" + inkscape:window-width="3440" + inkscape:window-height="1370" + inkscape:window-x="0" + inkscape:window-y="33" + inkscape:window-maximized="1" + inkscape:current-layer="svg628" /> + <title + id="title556">online_transactions</title> + <rect + x="305.99206" + y="295.38557" + width="343.71997" + height="234.16998" + fill="#6c63ff" + id="rect558" /> + <path + d="M754.88605,453.21778h-338.24a4.11628,4.11628,0,0,0-4.11005,4.11v228.69a4.10986,4.10986,0,0,0,4.11005,4.11h338.24a4.10984,4.10984,0,0,0,4.11-4.11v-228.69A4.11626,4.11626,0,0,0,754.88605,453.21778Zm1.37,232.8a1.36568,1.36568,0,0,1-1.37,1.37h-338.24a1.36569,1.36569,0,0,1-1.37-1.37v-228.69a1.37207,1.37207,0,0,1,1.37-1.37h338.24a1.37206,1.37206,0,0,1,1.37,1.37Z" + transform="translate(-86.00397 -185.22222)" + fill="#3f3d56" + id="path560" /> + <rect + x="344.33535" + y="429.58731" + width="154.74254" + height="17.80224" + rx="2" + fill="#3f3d56" + id="rect562" /> + <path + d="M726.126,599.74775h-49.29a4.10991,4.10991,0,0,0-4.11005,4.11v38.34a4.10986,4.10986,0,0,0,4.11005,4.11h49.29a4.1098,4.1098,0,0,0,4.11-4.11v-38.34A4.10985,4.10985,0,0,0,726.126,599.74775Zm1.37,42.45a1.37206,1.37206,0,0,1-1.37,1.37h-49.29a1.37212,1.37212,0,0,1-1.37006-1.37v-38.34a1.36574,1.36574,0,0,1,1.37006-1.37h49.29a1.36568,1.36568,0,0,1,1.37,1.37Z" + transform="translate(-86.00397 -185.22222)" + fill="#3f3d56" + id="path564" /> + <rect + x="598.67562" + y="423.37233" + width="33.60304" + height="6.95235" + rx="2" + fill="#3f3d56" + id="rect566" /> + <rect + x="598.67562" + y="434.32756" + width="33.60304" + height="6.95235" + rx="2" + fill="#3f3d56" + id="rect568" /> + <rect + x="598.67562" + y="445.28278" + width="33.60304" + height="6.95235" + rx="2" + fill="#3f3d56" + id="rect570" /> + <rect + x="348.44356" + y="284.4306" + width="71.20896" + height="30.12687" + rx="2" + fill="#3f3d56" + id="rect572" /> + <path + d="M475.52961,484.71625c0,5.29411-2.45241,9.58583-5.47761,9.58583s-5.47761-4.29172-5.47761-9.58583,5.47761-9.58582,5.47761-9.58582S475.52961,479.42215,475.52961,484.71625Z" + transform="translate(-86.00397 -185.22222)" + fill="#6c63ff" + id="path574" /> + <polygon + points="901.992 161.837 899.992 161.837 899.992 385.451 672.992 385.451 672.992 387.451 901.992 387.451 901.992 161.837" + fill="#3f3d56" + id="polygon576" /> + <polygon + points="305.992 387.451 76.992 387.451 76.992 161.837 78.992 161.837 78.992 385.451 305.992 385.451 305.992 387.451" + fill="#3f3d56" + id="polygon578" /> + <path + d="M1113.35519,223.03181h-1.28168v-2.24294h.96126a.64087.64087,0,0,0,.64084-.64084V208.6129a.64085.64085,0,0,0-.64084-.64084h-.96126v-6.551a13.95586,13.95586,0,0,0-13.956-13.95591h-1.42421v-1.60211a.64085.64085,0,0,0-.64084-.64084h-11.53513a.64085.64085,0,0,0-.64084.64084v1.60211H875.46088a13.95586,13.95586,0,0,0-13.956,13.95591v296.9942a13.9559,13.9559,0,0,0,13.956,13.956h222.65667a13.9559,13.9559,0,0,0,13.956-13.956V235.84861h1.28168a.64087.64087,0,0,0,.64084-.64084V223.67265A.64085.64085,0,0,0,1113.35519,223.03181Z" + transform="translate(-86.00397 -185.22222)" + fill="#3f3d56" + id="path580" /> + <rect + x="787.03482" + y="11.37165" + width="229.42338" + height="304.40573" + rx="1.9048" + fill="#d0cde1" + id="rect582" /> + <rect + x="875.401" + y="160.55814" + width="39.35653" + height="11.66295" + rx="2" + fill="#3f3d56" + id="rect584" /> + <rect + x="827.82072" + y="69.75378" + width="134.51708" + height="4.99841" + rx="2" + fill="#3f3d56" + id="rect586" /> + <rect + x="827.82072" + y="85.58206" + width="134.51708" + height="4.99841" + rx="2" + fill="#3f3d56" + id="rect588" /> + <rect + x="827.82072" + y="101.41034" + width="134.51708" + height="4.99841" + rx="2" + fill="#3f3d56" + id="rect590" /> + <rect + x="827.82072" + y="117.23863" + width="134.51708" + height="4.99841" + rx="2" + fill="#3f3d56" + id="rect592" /> + <rect + x="827.82072" + y="133.06691" + width="134.51708" + height="4.99841" + rx="2" + fill="#3f3d56" + id="rect594" /> + <circle + cx="890.31727" + cy="261.97835" + r="41.77968" + fill="#6c63ff" + id="circle596" /> + <path + d="M988.63566,479.42627a52.38194,52.38194,0,1,1,52.38193-52.38194A52.44121,52.44121,0,0,1,988.63566,479.42627Zm0-102.85908a50.47714,50.47714,0,1,0,50.47714,50.47714A50.53392,50.53392,0,0,0,988.63566,376.56719Z" + transform="translate(-86.00397 -185.22222)" + fill="#3f3d56" + id="path598" /> + <path + d="M241.496,273.13387h-1.71341V226.19551a27.16665,27.16665,0,0,0-27.16673-27.16667H113.1707A27.16664,27.16664,0,0,0,86.004,226.19551V483.703a27.16664,27.16664,0,0,0,27.16673,27.16667h99.44519A27.16665,27.16665,0,0,0,239.78262,483.703V306.54539H241.496Z" + transform="translate(-86.00397 -185.22222)" + fill="#3f3d56" + id="path600" /> + <path + d="M233.99737,227.79218V484.92413a20.28849,20.28849,0,0,1-20.28483,20.29192H113.78728a20.28842,20.28842,0,0,1-20.28475-20.29192V227.79218a20.28688,20.28688,0,0,1,20.28475-20.28471h12.12326a9.63757,9.63757,0,0,0,8.925,13.27583h56.97157a9.63747,9.63747,0,0,0,8.925-13.27583h12.98047A20.287,20.287,0,0,1,233.99737,227.79218Z" + transform="translate(-86.00397 -185.22222)" + fill="#d0cde1" + id="path602" /> + <rect + x="64.36182" + y="173.77302" + width="26.76842" + height="7.93258" + rx="2" + fill="#3f3d56" + id="rect604" /> + <rect + x="32" + y="112.01225" + width="91.49206" + height="3.39968" + rx="1.69984" + fill="#3f3d56" + id="rect606" /> + <rect + x="32" + y="122.77789" + width="91.49206" + height="3.39968" + rx="1.69984" + fill="#3f3d56" + id="rect608" /> + <rect + x="32" + y="133.54352" + width="91.49206" + height="3.39968" + rx="1.69984" + fill="#3f3d56" + id="rect610" /> + <rect + x="32" + y="144.30916" + width="91.49206" + height="3.39968" + rx="1.69984" + fill="#3f3d56" + id="rect612" /> + <rect + x="32" + y="155.0748" + width="91.49206" + height="3.39968" + rx="1.69984" + fill="#3f3d56" + id="rect614" /> + <circle + cx="69.87495" + cy="256.35481" + r="28.81288" + fill="#6c63ff" + id="circle616" /> + <path + d="M164.37142,463.80112A36.12462,36.12462,0,1,1,200.496,427.67651,36.16549,36.16549,0,0,1,164.37142,463.80112Zm0-70.9356a34.811,34.811,0,1,0,34.811,34.811A34.85016,34.85016,0,0,0,164.37142,392.86552Z" + transform="translate(-86.00397 -185.22222)" + fill="#3f3d56" + id="path618" /> + <rect + x="147.50456" + y="375.18969" + width="28" + height="28" + fill="#d0cde1" + id="rect620" /> + <path + d="M278.50853,572.41192h-34v-34h34Zm-32.52174-1.47826h31.04348V539.89018H245.98679Z" + transform="translate(-86.00397 -185.22222)" + fill="#3f3d56" + id="path622" /> + <rect + x="774.50456" + y="375.18969" + width="28" + height="28" + fill="#d0cde1" + id="rect624" /> + <path + d="M905.50853,572.41192h-34v-34h34Zm-32.52174-1.47826h31.04348V539.89018H872.98679Z" + transform="translate(-86.00397 -185.22222)" + fill="#3f3d56" + id="path626" /> + <metadata + id="metadata634"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:title>online_transactions</dc:title> + </cc:Work> + </rdf:RDF> + </metadata> +</svg> diff --git a/assets/img/undraw_intro_4.png b/assets/img/undraw_intro_4.png index eed08968d0ec1693805400381ed24d5ef46a9ad2..067bcf700edeabe4bd88757d5aec9760965cea05 100644 Binary files a/assets/img/undraw_intro_4.png and b/assets/img/undraw_intro_4.png differ diff --git a/assets/img/undraw_intro_4.svg b/assets/img/undraw_intro_4.svg index 1093521ca47b195fce545beba8d7593eb1e97c35..3d04a9d13ec7a269dba113a8ae2595801b0f358e 100644 --- a/assets/img/undraw_intro_4.svg +++ b/assets/img/undraw_intro_4.svg @@ -1 +1,278 @@ -<svg xmlns="http://www.w3.org/2000/svg" data-name="Layer 1" width="725.85572" height="493.82563" viewBox="0 0 725.85572 493.82563" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M246.72509,241.01744H435.27491a9.66388,9.66388,0,0,1,9.653,9.653V530.25986a9.66387,9.66387,0,0,1-9.653,9.653H246.72509a9.66387,9.66387,0,0,1-9.653-9.653V250.67039A9.66388,9.66388,0,0,1,246.72509,241.01744Z" transform="translate(-237.07214 -203.08719)" fill="#f2f2f2"/><path d="M249.0652,248.03777H432.9348a4.97829,4.97829,0,0,1,4.97273,4.97273V527.91976a4.97829,4.97829,0,0,1-4.97273,4.97273H249.0652a4.97829,4.97829,0,0,1-4.97273-4.97273V253.0105A4.97829,4.97829,0,0,1,249.0652,248.03777Z" transform="translate(-237.07214 -203.08719)" fill="#fff"/><path d="M376.84252,350.71712c0,17.67311-16.34161,15-36.5,15s-36.5,2.67311-36.5-15,7.98246-49,36.5-49C369.84252,301.71712,376.84252,333.044,376.84252,350.71712Z" transform="translate(-237.07214 -203.08719)" fill="#2f2e41"/><path d="M419.7806,500.31525a10.74272,10.74272,0,0,0-6.25282-15.23974l-41.81616-88.45906-19.12793,13.413,47.1186,82.73471a10.80091,10.80091,0,0,0,20.07831,7.551Z" transform="translate(-237.07214 -203.08719)" fill="#a0616a"/><path d="M383.3937,404.38708l-2.39014-3.74-1.21972-1.92-9.39014-14.72a13.3748,13.3748,0,0,0-24.45019,10.85l2.15039,7.67,4.38964,15.68a4.70061,4.70061,0,0,0,1.62012,2.44,4.37247,4.37247,0,0,0,.98.62,4.79238,4.79238,0,0,0,3.93994.07c.02-.01.0503-.02.07032-.03l11.35986-5.08.02-.01,8.66992-3.88,2.16016-.96a4.70689,4.70689,0,0,0,1.62011-1.19,4.65015,4.65015,0,0,0,1.01954-1.83A4.756,4.756,0,0,0,383.3937,404.38708Z" transform="translate(-237.07214 -203.08719)" fill="#ccc"/><path d="M323.46353,529.80712a4.82146,4.82146,0,0,0-8.21-.08,3.92072,3.92072,0,0,0-.4497.92l-.57032,1.57h10.68018Z" transform="translate(-237.07214 -203.08719)" fill="#2f2e41"/><circle cx="103.0406" cy="137.0544" r="24.56103" fill="#a0616a"/><path d="M383.16372,412.7871c-.06006-.88-.14014-1.75-.23975-2.6a54.597,54.597,0,0,0-1.92041-9.54c-.18994-.68-.3999-1.34-.62988-1.99a53.311,53.311,0,0,0-14.75976-22.44,14.57376,14.57376,0,0,0-9.73-3.72h-34.6001a14.58343,14.58343,0,0,0-14.37012,17.06c-.01025.01-.01025.01,0,.02a14.4943,14.4943,0,0,0,1.33008,4.02l1.3999,2.79,9.37988,18.76,11.66993,23.34.68017,1.36,43.49024,11.96.17968-.41c.16016-.36.33008-.73.48-1.09.24024-.54.47022-1.08.7002-1.61a85.24335,85.24335,0,0,0,6.96-27.81v-.01A64.10078,64.10078,0,0,0,383.16372,412.7871Z" transform="translate(-237.07214 -203.08719)" fill="#3f3d56"/><path d="M376.22378,448.69708a4.67431,4.67431,0,0,0-.68994-1.42,18.6942,18.6942,0,0,0-3.97022-3.92l-.00976-.01c-5.27-4-15.73-8.66-35.93994-8.78h-.03028a4.82651,4.82651,0,0,0-4.39013,2.83l-.5,1.09-3.21973,7.07995a3.73082,3.73082,0,0,1-1.25,1.51c-5.10986,3.62-29.85986,23.92005-15.33008,68.49,1.41992,4.35,2.87988,9.1,4.35986,14.16q.36036,1.23.72022,2.49h43.56006l-.93018-7a3.70677,3.70677,0,0,1,.07031-1.37l17.52979-72.34.08008-.31A4.81675,4.81675,0,0,0,376.22378,448.69708Z" transform="translate(-237.07214 -203.08719)" fill="#2f2e41"/><path d="M389.89371,367.71709l19,0a3.00006,3.00006,0,0,1,3,3v5a1.00307,1.00307,0,0,1,1,1v2a1.00308,1.00308,0,0,1-1,1v2a1.00308,1.00308,0,0,1,1,1v2a1.00308,1.00308,0,0,1-1,1l0,27a3.00007,3.00007,0,0,1-3,3l-19,0a3.00007,3.00007,0,0,1-3-3l0-42A3.00008,3.00008,0,0,1,389.89371,367.71709Z" transform="translate(-237.07214 -203.08719)" fill="#3f3d56"/><path d="M388.89369,412.7171v-42a3.00007,3.00007,0,0,1,3-3h-2a3.00007,3.00007,0,0,0-3,3v42a3.00007,3.00007,0,0,0,3,3h2A3.00007,3.00007,0,0,1,388.89369,412.7171Z" transform="translate(-237.07214 -203.08719)" fill="#6c63ff"/><circle cx="161.82156" cy="178.62991" r="4" fill="#fff"/><path d="M393.81854,395.7304a10.52584,10.52584,0,0,0-.86435,1.41428l-49.23923,5.915-7.24081-9.62939-15.96072,9.02824,11.16177,18.29267a8,8,0,0,0,8.91848,3.55538l54.46327-14.73582a10.4971,10.4971,0,1,0-1.23841-13.8404Z" transform="translate(-237.07214 -203.08719)" fill="#a0616a"/><path d="M343.30386,396.89709l-13.8003-17.88a12.49724,12.49724,0,0,0-22.58984,10.54c-.01025.01-.01025.01,0,.02a11.3634,11.3634,0,0,0,.73975,1.58l1.99023,5.23,6.04981,15.95a4.47813,4.47813,0,0,0,2.67041,2.63,4.04234,4.04234,0,0,0,.65966.18,4.45217,4.45217,0,0,0,3.07032-.48l4.37988-2.45,15.46-8.64a4.55186,4.55186,0,0,0,2.21-3.03A4.50776,4.50776,0,0,0,343.30386,396.89709Z" transform="translate(-237.07214 -203.08719)" fill="#3f3d56"/><path d="M311.84252,344.71706v0h9.71436l4.28564-14.76922.85693,14.76922h4.64307l2.5-8.61538.5,8.61538h34.5v0c0-17.67308-11.64059-31.99994-26-31.99994h-5.00006C323.4831,312.71712,311.84252,327.044,311.84252,344.71706Z" transform="translate(-237.07214 -203.08719)" fill="#2f2e41"/><path d="M596.71993,325.9429H393.13046a9.66387,9.66387,0,0,1-9.653-9.653V212.74014a9.66387,9.66387,0,0,1,9.653-9.653H596.71993a9.66386,9.66386,0,0,1,9.653,9.653V316.28995A9.66386,9.66386,0,0,1,596.71993,325.9429Z" transform="translate(-237.07214 -203.08719)" fill="#ccc"/><path d="M594.37983,318.92258H395.47057a4.97829,4.97829,0,0,1-4.97273-4.97273V215.08024a4.97829,4.97829,0,0,1,4.97273-4.97273H594.37983a4.97829,4.97829,0,0,1,4.97273,4.97273v98.86961A4.9783,4.9783,0,0,1,594.37983,318.92258Z" transform="translate(-237.07214 -203.08719)" fill="#fff"/><path d="M405.33688,344.97693a3.75017,3.75017,0,0,1-1.43786-.2908,3.63886,3.63886,0,0,1-2.28169-3.41476V322.23971l28.68-.725-22.37044,22.37015A3.6456,3.6456,0,0,1,405.33688,344.97693Z" transform="translate(-237.07214 -203.08719)" fill="#ccc"/><path d="M570.16142,260.08131H469.53673a4.68022,4.68022,0,1,1,0-9.36043H570.16142a4.68021,4.68021,0,0,1,0,9.36043Z" transform="translate(-237.07214 -203.08719)" fill="#ccc"/><path d="M537.39989,240.19039H469.53673a4.68022,4.68022,0,1,1,0-9.36044h67.86316a4.68022,4.68022,0,0,1,0,9.36044Z" transform="translate(-237.07214 -203.08719)" fill="#ccc"/><circle cx="190.81037" cy="42.36845" r="14.62568" fill="#6c63ff"/><circle cx="302.07968" cy="90.43273" r="4.68022" fill="#e6e6e6"/><circle cx="318.46044" cy="90.43273" r="4.68022" fill="#e6e6e6"/><circle cx="334.8412" cy="90.43273" r="4.68022" fill="#e6e6e6"/><path d="M764.72509,398.01744H953.27491a9.66388,9.66388,0,0,1,9.653,9.65295V687.25986a9.66387,9.66387,0,0,1-9.653,9.653H764.72509a9.66387,9.66387,0,0,1-9.653-9.653V407.67039A9.66388,9.66388,0,0,1,764.72509,398.01744Z" transform="translate(-237.07214 -203.08719)" fill="#f2f2f2"/><path d="M767.0652,405.03777H950.9348a4.97829,4.97829,0,0,1,4.97273,4.97273V684.91976a4.97829,4.97829,0,0,1-4.97273,4.97273H767.0652a4.97829,4.97829,0,0,1-4.97273-4.97273V410.0105A4.97829,4.97829,0,0,1,767.0652,405.03777Z" transform="translate(-237.07214 -203.08719)" fill="#fff"/><path d="M772.64477,539.57281H569.05529a9.66387,9.66387,0,0,1-9.653-9.653V426.37005a9.66387,9.66387,0,0,1,9.653-9.65295H772.64477a9.66387,9.66387,0,0,1,9.653,9.65295V529.91986A9.66387,9.66387,0,0,1,772.64477,539.57281Z" transform="translate(-237.07214 -203.08719)" fill="#ccc"/><path d="M770.30466,532.55249H571.3954a4.97829,4.97829,0,0,1-4.97273-4.97273V428.71015a4.97829,4.97829,0,0,1,4.97273-4.97273H770.30466a4.97829,4.97829,0,0,1,4.97273,4.97273v98.86961A4.97829,4.97829,0,0,1,770.30466,532.55249Z" transform="translate(-237.07214 -203.08719)" fill="#fff"/><path d="M758.78529,557.51477l-22.37043-22.37015,28.68.725v19.03166a3.63885,3.63885,0,0,1-2.28169,3.41476,3.75017,3.75017,0,0,1-1.43786.2908A3.64561,3.64561,0,0,1,758.78529,557.51477Z" transform="translate(-237.07214 -203.08719)" fill="#ccc"/><path d="M746.08625,473.71122H645.46157a4.68022,4.68022,0,1,1,0-9.36043H746.08625a4.68022,4.68022,0,1,1,0,9.36043Z" transform="translate(-237.07214 -203.08719)" fill="#ccc"/><path d="M713.32473,453.8203H645.46157a4.68022,4.68022,0,1,1,0-9.36044h67.86316a4.68022,4.68022,0,0,1,0,9.36044Z" transform="translate(-237.07214 -203.08719)" fill="#ccc"/><circle cx="366.7352" cy="255.99836" r="14.62568" fill="#6c63ff"/><circle cx="478.00451" cy="304.06264" r="4.68022" fill="#e6e6e6"/><circle cx="494.38527" cy="304.06264" r="4.68022" fill="#e6e6e6"/><circle cx="510.76604" cy="304.06264" r="4.68022" fill="#e6e6e6"/><path d="M774.88126,602.2472a10.05579,10.05579,0,0,1,15.32038-1.74408L821.95606,584.113l-1.974,18.46448L790.13014,615.311a10.11027,10.11027,0,0,1-15.24888-13.06381Z" transform="translate(-237.07214 -203.08719)" fill="#ffb8b8"/><path d="M873.75356,520.1571a14.50022,14.50022,0,0,0-17.35009-.39,15.0208,15.0208,0,0,0-3.04981,2.92l-27.87988,51.71-25.73,19.44a4.48714,4.48714,0,0,0-1.68018,2.61,4.4321,4.4321,0,0,0,.08985,2.31l2.53027,8.16a4.53909,4.53909,0,0,0,1.52,2.22,5.10989,5.10989,0,0,0,.8999.54.61567.61567,0,0,0,.12012.05,4.47,4.47,0,0,0,3.5498-.01l30.16016-13.08.33008-.15a46.33092,46.33092,0,0,0,23.12988-22.55005l15.85986-33.47A14.5129,14.5129,0,0,0,873.75356,520.1571Z" transform="translate(-237.07214 -203.08719)" fill="#3f3d56"/><circle cx="639.87739" cy="273.45375" r="24.56103" fill="#ffb8b8"/><path d="M893.57388,640.7871l-.25-1.91-1.16016-8.71-1.27-9.51-4.50976.77-1.74024.29-1.75976.3-.58008.1-44.74024,7.6-5.56982-3.35-.12012-.07.05029.51,1.04981,10.89,5.00976,52.02h62.12012Z" transform="translate(-237.07214 -203.08719)" fill="#2f2e41"/><path d="M910.77358,540.85711a34.65261,34.65261,0,0,0-11.75-23.04,32.69863,32.69863,0,0,0-23.6499-8.16c-8.25.55-14.58984,3.94-18.97021,10.11a34.64244,34.64244,0,0,0-4.91993,10.84c-4.98,17.92-10.23,44.17-14.21972,65.88-2.24024,12.12-4.08008,22.82995-5.27,29.88-.02.15-.04.29-.06983.44-.46044,2.75-.81005,4.9-1.04,6.33a4.484,4.484,0,0,0,2.08984,4.56c.00976.01.02978.02.04.03a33.07446,33.07446,0,0,0,16.68994,4.69c7.12012,0,15.66016-2.48,24.6499-10.49a3.52434,3.52434,0,0,1,4.51026-.19l.98.76,9.67968,7.53a4.48737,4.48737,0,0,0,2.64014.95,4.00538,4.00538,0,0,0,1.41016-.19.524.524,0,0,0,.11963-.03,4.47747,4.47747,0,0,0,2.92041-3.03c.53955-1.88,1.13964-4.05,1.7998-6.47.27-1.00994.54981-2.07.83984-3.17,1.27-4.86,2.68018-10.5,4.06006-16.64C908.13394,589.98712,912.71353,562.41711,910.77358,540.85711Z" transform="translate(-237.07214 -203.08719)" fill="#3f3d56"/><path d="M870.3269,643.35286a10.05578,10.05578,0,0,1,10.97879-10.8269l14.87184-32.49319,9.84155,15.74731-15.63137,28.44185a10.11027,10.11027,0,0,1-20.06081-.86907Z" transform="translate(-237.07214 -203.08719)" fill="#ffb8b8"/><path d="M920.1437,568.30712l-8.18017-36.13a14.52959,14.52959,0,0,0-12.93995-14.36c-.50976-.05-1.02978-.07995-1.56005-.07995a14.52756,14.52756,0,0,0-14.48975,14.59l9.98,57.89-.02979.12-5.29,19.97-2.93018,11.09a1.64643,1.64643,0,0,0-.06006.32,4.33628,4.33628,0,0,0,.3501,2.75,4.43052,4.43052,0,0,0,1.5,1.78l5.66992,3.92,1.3501.94a4.45753,4.45753,0,0,0,2.56006.8,4.6959,4.6959,0,0,0,1.0498-.12c.04-.01.06983-.02.10986-.03a4.412,4.412,0,0,0,1.18018-.5,4.4907,4.4907,0,0,0,1.62012-1.69995l15.65967-28.91A46.431,46.431,0,0,0,920.1437,568.30712Z" transform="translate(-237.07214 -203.08719)" fill="#3f3d56"/><polygon points="647.893 353.651 656.893 391.651 643.893 423.651 652.893 392.651 647.893 353.651" opacity="0.2"/><path d="M896.82726,491.30225a16.53848,16.53848,0,0,0,5.56792-3.3377c.71476-.63818,1.483-1.231,2.19616-1.86881,6.298-5.63286,8.19023-15.31969,5.38028-23.28825s-9.79872-14.09376-17.78456-16.85421-16.83725-2.38366-24.94582-.00778c-8.73428,2.5592-17.48157,8.322-19.55612,17.18386-.55221,2.3589-.57321,4.97583,1.03307,6.96573a4.40362,4.40362,0,0,0,1.834,1.34478c2.83043,1.085,4.40754-1.12983,6.5201-2.07055,2.90369-1.293,6.47739.10319,8.4986,2.55635s2.76949,5.71154,3.07979,8.87493a23.45894,23.45894,0,0,0,.91072,5.75968,5.74057,5.74057,0,0,0,4.01072,3.88868c2.27844.42089,4.46958-1.14791,5.903-2.96825s2.44959-3.98248,4.14351-5.56331,4.45662-2.41517,6.3133-1.02912a6.93481,6.93481,0,0,1,1.55,1.86108c2.84585,4.37141,2.49942,4.18148,5.34527,8.55289Z" transform="translate(-237.07214 -203.08719)" fill="#2f2e41"/><path d="M779.20559,581.2194,761.87847,589.015a3.00007,3.00007,0,0,0-1.505,3.96674l2.05146,4.55977a1.00308,1.00308,0,0,0-.50166,1.32224l.82059,1.82391a1.00308,1.00308,0,0,0,1.32225.50166l.82058,1.82391a1.00307,1.00307,0,0,0-.50166,1.32225l.82058,1.8239a1.00308,1.00308,0,0,0,1.32225.50167l11.07789,24.62276a3.00007,3.00007,0,0,0,3.96674,1.505l17.32713-7.79555a3.00007,3.00007,0,0,0,1.505-3.96674l-17.23228-38.30207A3.00007,3.00007,0,0,0,779.20559,581.2194Z" transform="translate(-237.07214 -203.08719)" fill="#3f3d56"/><path d="M797.19351,618.76708l-2.43995-5.43-6.3999-14.22-5.62012-12.49a2.87811,2.87811,0,0,0-3.7998-1.45l-9.54,4.29-4.37012,1.97a2.88273,2.88273,0,0,0-1.43994,3.80005l5.81006,12.92,2.23,4.95,6.41992,14.28a2.89061,2.89061,0,0,0,3.81006,1.44l13.8999-6.26A2.879,2.879,0,0,0,797.19351,618.76708Z" transform="translate(-237.07214 -203.08719)" fill="#6c63ff"/></svg> \ No newline at end of file +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + data-name="Layer 1" + width="725.85572" + height="493.82563" + viewBox="0 0 725.85572 493.82563" + version="1.1" + id="svg856" + sodipodi:docname="undraw_intro_4.svg" + inkscape:export-filename="/home/vjrj/dev/ginkgo/assets/img/undraw_intro_4.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" + inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs860" /> + <sodipodi:namedview + id="namedview858" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="true" + showgrid="false" + inkscape:zoom="1.7678305" + inkscape:cx="363.15699" + inkscape:cy="246.91281" + inkscape:window-width="3440" + inkscape:window-height="1370" + inkscape:window-x="0" + inkscape:window-y="33" + inkscape:window-maximized="1" + inkscape:current-layer="svg856" /> + <path + d="M246.72509,241.01744H435.27491a9.66388,9.66388,0,0,1,9.653,9.653V530.25986a9.66387,9.66387,0,0,1-9.653,9.653H246.72509a9.66387,9.66387,0,0,1-9.653-9.653V250.67039A9.66388,9.66388,0,0,1,246.72509,241.01744Z" + transform="translate(-237.07214 -203.08719)" + fill="#f2f2f2" + id="path764" /> + <path + d="M249.0652,248.03777H432.9348a4.97829,4.97829,0,0,1,4.97273,4.97273V527.91976a4.97829,4.97829,0,0,1-4.97273,4.97273H249.0652a4.97829,4.97829,0,0,1-4.97273-4.97273V253.0105A4.97829,4.97829,0,0,1,249.0652,248.03777Z" + transform="translate(-237.07214 -203.08719)" + fill="#fff" + id="path766" /> + <path + d="M376.84252,350.71712c0,17.67311-16.34161,15-36.5,15s-36.5,2.67311-36.5-15,7.98246-49,36.5-49C369.84252,301.71712,376.84252,333.044,376.84252,350.71712Z" + transform="translate(-237.07214 -203.08719)" + fill="#2f2e41" + id="path768" /> + <path + d="M419.7806,500.31525a10.74272,10.74272,0,0,0-6.25282-15.23974l-41.81616-88.45906-19.12793,13.413,47.1186,82.73471a10.80091,10.80091,0,0,0,20.07831,7.551Z" + transform="translate(-237.07214 -203.08719)" + fill="#a0616a" + id="path770" /> + <path + d="M383.3937,404.38708l-2.39014-3.74-1.21972-1.92-9.39014-14.72a13.3748,13.3748,0,0,0-24.45019,10.85l2.15039,7.67,4.38964,15.68a4.70061,4.70061,0,0,0,1.62012,2.44,4.37247,4.37247,0,0,0,.98.62,4.79238,4.79238,0,0,0,3.93994.07c.02-.01.0503-.02.07032-.03l11.35986-5.08.02-.01,8.66992-3.88,2.16016-.96a4.70689,4.70689,0,0,0,1.62011-1.19,4.65015,4.65015,0,0,0,1.01954-1.83A4.756,4.756,0,0,0,383.3937,404.38708Z" + transform="translate(-237.07214 -203.08719)" + fill="#ccc" + id="path772" /> + <path + d="M323.46353,529.80712a4.82146,4.82146,0,0,0-8.21-.08,3.92072,3.92072,0,0,0-.4497.92l-.57032,1.57h10.68018Z" + transform="translate(-237.07214 -203.08719)" + fill="#2f2e41" + id="path774" /> + <circle + cx="103.0406" + cy="137.0544" + r="24.56103" + fill="#a0616a" + id="circle776" /> + <path + d="M383.16372,412.7871c-.06006-.88-.14014-1.75-.23975-2.6a54.597,54.597,0,0,0-1.92041-9.54c-.18994-.68-.3999-1.34-.62988-1.99a53.311,53.311,0,0,0-14.75976-22.44,14.57376,14.57376,0,0,0-9.73-3.72h-34.6001a14.58343,14.58343,0,0,0-14.37012,17.06c-.01025.01-.01025.01,0,.02a14.4943,14.4943,0,0,0,1.33008,4.02l1.3999,2.79,9.37988,18.76,11.66993,23.34.68017,1.36,43.49024,11.96.17968-.41c.16016-.36.33008-.73.48-1.09.24024-.54.47022-1.08.7002-1.61a85.24335,85.24335,0,0,0,6.96-27.81v-.01A64.10078,64.10078,0,0,0,383.16372,412.7871Z" + transform="translate(-237.07214 -203.08719)" + fill="#3f3d56" + id="path778" /> + <path + d="M376.22378,448.69708a4.67431,4.67431,0,0,0-.68994-1.42,18.6942,18.6942,0,0,0-3.97022-3.92l-.00976-.01c-5.27-4-15.73-8.66-35.93994-8.78h-.03028a4.82651,4.82651,0,0,0-4.39013,2.83l-.5,1.09-3.21973,7.07995a3.73082,3.73082,0,0,1-1.25,1.51c-5.10986,3.62-29.85986,23.92005-15.33008,68.49,1.41992,4.35,2.87988,9.1,4.35986,14.16q.36036,1.23.72022,2.49h43.56006l-.93018-7a3.70677,3.70677,0,0,1,.07031-1.37l17.52979-72.34.08008-.31A4.81675,4.81675,0,0,0,376.22378,448.69708Z" + transform="translate(-237.07214 -203.08719)" + fill="#2f2e41" + id="path780" /> + <path + d="M389.89371,367.71709l19,0a3.00006,3.00006,0,0,1,3,3v5a1.00307,1.00307,0,0,1,1,1v2a1.00308,1.00308,0,0,1-1,1v2a1.00308,1.00308,0,0,1,1,1v2a1.00308,1.00308,0,0,1-1,1l0,27a3.00007,3.00007,0,0,1-3,3l-19,0a3.00007,3.00007,0,0,1-3-3l0-42A3.00008,3.00008,0,0,1,389.89371,367.71709Z" + transform="translate(-237.07214 -203.08719)" + fill="#3f3d56" + id="path782" /> + <path + d="M388.89369,412.7171v-42a3.00007,3.00007,0,0,1,3-3h-2a3.00007,3.00007,0,0,0-3,3v42a3.00007,3.00007,0,0,0,3,3h2A3.00007,3.00007,0,0,1,388.89369,412.7171Z" + transform="translate(-237.07214 -203.08719)" + fill="#6c63ff" + id="path784" /> + <circle + cx="161.82156" + cy="178.62991" + r="4" + fill="#fff" + id="circle786" /> + <path + d="M393.81854,395.7304a10.52584,10.52584,0,0,0-.86435,1.41428l-49.23923,5.915-7.24081-9.62939-15.96072,9.02824,11.16177,18.29267a8,8,0,0,0,8.91848,3.55538l54.46327-14.73582a10.4971,10.4971,0,1,0-1.23841-13.8404Z" + transform="translate(-237.07214 -203.08719)" + fill="#a0616a" + id="path788" /> + <path + d="M343.30386,396.89709l-13.8003-17.88a12.49724,12.49724,0,0,0-22.58984,10.54c-.01025.01-.01025.01,0,.02a11.3634,11.3634,0,0,0,.73975,1.58l1.99023,5.23,6.04981,15.95a4.47813,4.47813,0,0,0,2.67041,2.63,4.04234,4.04234,0,0,0,.65966.18,4.45217,4.45217,0,0,0,3.07032-.48l4.37988-2.45,15.46-8.64a4.55186,4.55186,0,0,0,2.21-3.03A4.50776,4.50776,0,0,0,343.30386,396.89709Z" + transform="translate(-237.07214 -203.08719)" + fill="#3f3d56" + id="path790" /> + <path + d="M311.84252,344.71706v0h9.71436l4.28564-14.76922.85693,14.76922h4.64307l2.5-8.61538.5,8.61538h34.5v0c0-17.67308-11.64059-31.99994-26-31.99994h-5.00006C323.4831,312.71712,311.84252,327.044,311.84252,344.71706Z" + transform="translate(-237.07214 -203.08719)" + fill="#2f2e41" + id="path792" /> + <path + d="M596.71993,325.9429H393.13046a9.66387,9.66387,0,0,1-9.653-9.653V212.74014a9.66387,9.66387,0,0,1,9.653-9.653H596.71993a9.66386,9.66386,0,0,1,9.653,9.653V316.28995A9.66386,9.66386,0,0,1,596.71993,325.9429Z" + transform="translate(-237.07214 -203.08719)" + fill="#ccc" + id="path794" /> + <path + d="M594.37983,318.92258H395.47057a4.97829,4.97829,0,0,1-4.97273-4.97273V215.08024a4.97829,4.97829,0,0,1,4.97273-4.97273H594.37983a4.97829,4.97829,0,0,1,4.97273,4.97273v98.86961A4.9783,4.9783,0,0,1,594.37983,318.92258Z" + transform="translate(-237.07214 -203.08719)" + fill="#fff" + id="path796" /> + <path + d="M405.33688,344.97693a3.75017,3.75017,0,0,1-1.43786-.2908,3.63886,3.63886,0,0,1-2.28169-3.41476V322.23971l28.68-.725-22.37044,22.37015A3.6456,3.6456,0,0,1,405.33688,344.97693Z" + transform="translate(-237.07214 -203.08719)" + fill="#ccc" + id="path798" /> + <path + d="M570.16142,260.08131H469.53673a4.68022,4.68022,0,1,1,0-9.36043H570.16142a4.68021,4.68021,0,0,1,0,9.36043Z" + transform="translate(-237.07214 -203.08719)" + fill="#ccc" + id="path800" /> + <path + d="M537.39989,240.19039H469.53673a4.68022,4.68022,0,1,1,0-9.36044h67.86316a4.68022,4.68022,0,0,1,0,9.36044Z" + transform="translate(-237.07214 -203.08719)" + fill="#ccc" + id="path802" /> + <circle + cx="190.81037" + cy="42.36845" + r="14.62568" + fill="#6c63ff" + id="circle804" /> + <circle + cx="302.07968" + cy="90.43273" + r="4.68022" + fill="#e6e6e6" + id="circle806" /> + <circle + cx="318.46044" + cy="90.43273" + r="4.68022" + fill="#e6e6e6" + id="circle808" /> + <circle + cx="334.8412" + cy="90.43273" + r="4.68022" + fill="#e6e6e6" + id="circle810" /> + <path + d="M764.72509,398.01744H953.27491a9.66388,9.66388,0,0,1,9.653,9.65295V687.25986a9.66387,9.66387,0,0,1-9.653,9.653H764.72509a9.66387,9.66387,0,0,1-9.653-9.653V407.67039A9.66388,9.66388,0,0,1,764.72509,398.01744Z" + transform="translate(-237.07214 -203.08719)" + fill="#f2f2f2" + id="path812" /> + <path + d="M767.0652,405.03777H950.9348a4.97829,4.97829,0,0,1,4.97273,4.97273V684.91976a4.97829,4.97829,0,0,1-4.97273,4.97273H767.0652a4.97829,4.97829,0,0,1-4.97273-4.97273V410.0105A4.97829,4.97829,0,0,1,767.0652,405.03777Z" + transform="translate(-237.07214 -203.08719)" + fill="#fff" + id="path814" /> + <path + d="M772.64477,539.57281H569.05529a9.66387,9.66387,0,0,1-9.653-9.653V426.37005a9.66387,9.66387,0,0,1,9.653-9.65295H772.64477a9.66387,9.66387,0,0,1,9.653,9.65295V529.91986A9.66387,9.66387,0,0,1,772.64477,539.57281Z" + transform="translate(-237.07214 -203.08719)" + fill="#ccc" + id="path816" /> + <path + d="M770.30466,532.55249H571.3954a4.97829,4.97829,0,0,1-4.97273-4.97273V428.71015a4.97829,4.97829,0,0,1,4.97273-4.97273H770.30466a4.97829,4.97829,0,0,1,4.97273,4.97273v98.86961A4.97829,4.97829,0,0,1,770.30466,532.55249Z" + transform="translate(-237.07214 -203.08719)" + fill="#fff" + id="path818" /> + <path + d="M758.78529,557.51477l-22.37043-22.37015,28.68.725v19.03166a3.63885,3.63885,0,0,1-2.28169,3.41476,3.75017,3.75017,0,0,1-1.43786.2908A3.64561,3.64561,0,0,1,758.78529,557.51477Z" + transform="translate(-237.07214 -203.08719)" + fill="#ccc" + id="path820" /> + <path + d="M746.08625,473.71122H645.46157a4.68022,4.68022,0,1,1,0-9.36043H746.08625a4.68022,4.68022,0,1,1,0,9.36043Z" + transform="translate(-237.07214 -203.08719)" + fill="#ccc" + id="path822" /> + <path + d="M713.32473,453.8203H645.46157a4.68022,4.68022,0,1,1,0-9.36044h67.86316a4.68022,4.68022,0,0,1,0,9.36044Z" + transform="translate(-237.07214 -203.08719)" + fill="#ccc" + id="path824" /> + <circle + cx="366.7352" + cy="255.99836" + r="14.62568" + fill="#6c63ff" + id="circle826" /> + <circle + cx="478.00451" + cy="304.06264" + r="4.68022" + fill="#e6e6e6" + id="circle828" /> + <circle + cx="494.38527" + cy="304.06264" + r="4.68022" + fill="#e6e6e6" + id="circle830" /> + <circle + cx="510.76604" + cy="304.06264" + r="4.68022" + fill="#e6e6e6" + id="circle832" /> + <path + d="M774.88126,602.2472a10.05579,10.05579,0,0,1,15.32038-1.74408L821.95606,584.113l-1.974,18.46448L790.13014,615.311a10.11027,10.11027,0,0,1-15.24888-13.06381Z" + transform="translate(-237.07214 -203.08719)" + fill="#ffb8b8" + id="path834" /> + <path + d="M873.75356,520.1571a14.50022,14.50022,0,0,0-17.35009-.39,15.0208,15.0208,0,0,0-3.04981,2.92l-27.87988,51.71-25.73,19.44a4.48714,4.48714,0,0,0-1.68018,2.61,4.4321,4.4321,0,0,0,.08985,2.31l2.53027,8.16a4.53909,4.53909,0,0,0,1.52,2.22,5.10989,5.10989,0,0,0,.8999.54.61567.61567,0,0,0,.12012.05,4.47,4.47,0,0,0,3.5498-.01l30.16016-13.08.33008-.15a46.33092,46.33092,0,0,0,23.12988-22.55005l15.85986-33.47A14.5129,14.5129,0,0,0,873.75356,520.1571Z" + transform="translate(-237.07214 -203.08719)" + fill="#3f3d56" + id="path836" /> + <circle + cx="639.87739" + cy="273.45375" + r="24.56103" + fill="#ffb8b8" + id="circle838" /> + <path + d="M893.57388,640.7871l-.25-1.91-1.16016-8.71-1.27-9.51-4.50976.77-1.74024.29-1.75976.3-.58008.1-44.74024,7.6-5.56982-3.35-.12012-.07.05029.51,1.04981,10.89,5.00976,52.02h62.12012Z" + transform="translate(-237.07214 -203.08719)" + fill="#2f2e41" + id="path840" /> + <path + d="M910.77358,540.85711a34.65261,34.65261,0,0,0-11.75-23.04,32.69863,32.69863,0,0,0-23.6499-8.16c-8.25.55-14.58984,3.94-18.97021,10.11a34.64244,34.64244,0,0,0-4.91993,10.84c-4.98,17.92-10.23,44.17-14.21972,65.88-2.24024,12.12-4.08008,22.82995-5.27,29.88-.02.15-.04.29-.06983.44-.46044,2.75-.81005,4.9-1.04,6.33a4.484,4.484,0,0,0,2.08984,4.56c.00976.01.02978.02.04.03a33.07446,33.07446,0,0,0,16.68994,4.69c7.12012,0,15.66016-2.48,24.6499-10.49a3.52434,3.52434,0,0,1,4.51026-.19l.98.76,9.67968,7.53a4.48737,4.48737,0,0,0,2.64014.95,4.00538,4.00538,0,0,0,1.41016-.19.524.524,0,0,0,.11963-.03,4.47747,4.47747,0,0,0,2.92041-3.03c.53955-1.88,1.13964-4.05,1.7998-6.47.27-1.00994.54981-2.07.83984-3.17,1.27-4.86,2.68018-10.5,4.06006-16.64C908.13394,589.98712,912.71353,562.41711,910.77358,540.85711Z" + transform="translate(-237.07214 -203.08719)" + fill="#3f3d56" + id="path842" /> + <path + d="M870.3269,643.35286a10.05578,10.05578,0,0,1,10.97879-10.8269l14.87184-32.49319,9.84155,15.74731-15.63137,28.44185a10.11027,10.11027,0,0,1-20.06081-.86907Z" + transform="translate(-237.07214 -203.08719)" + fill="#ffb8b8" + id="path844" /> + <path + d="M920.1437,568.30712l-8.18017-36.13a14.52959,14.52959,0,0,0-12.93995-14.36c-.50976-.05-1.02978-.07995-1.56005-.07995a14.52756,14.52756,0,0,0-14.48975,14.59l9.98,57.89-.02979.12-5.29,19.97-2.93018,11.09a1.64643,1.64643,0,0,0-.06006.32,4.33628,4.33628,0,0,0,.3501,2.75,4.43052,4.43052,0,0,0,1.5,1.78l5.66992,3.92,1.3501.94a4.45753,4.45753,0,0,0,2.56006.8,4.6959,4.6959,0,0,0,1.0498-.12c.04-.01.06983-.02.10986-.03a4.412,4.412,0,0,0,1.18018-.5,4.4907,4.4907,0,0,0,1.62012-1.69995l15.65967-28.91A46.431,46.431,0,0,0,920.1437,568.30712Z" + transform="translate(-237.07214 -203.08719)" + fill="#3f3d56" + id="path846" /> + <polygon + points="647.893 353.651 656.893 391.651 643.893 423.651 652.893 392.651 647.893 353.651" + opacity="0.2" + id="polygon848" /> + <path + d="M896.82726,491.30225a16.53848,16.53848,0,0,0,5.56792-3.3377c.71476-.63818,1.483-1.231,2.19616-1.86881,6.298-5.63286,8.19023-15.31969,5.38028-23.28825s-9.79872-14.09376-17.78456-16.85421-16.83725-2.38366-24.94582-.00778c-8.73428,2.5592-17.48157,8.322-19.55612,17.18386-.55221,2.3589-.57321,4.97583,1.03307,6.96573a4.40362,4.40362,0,0,0,1.834,1.34478c2.83043,1.085,4.40754-1.12983,6.5201-2.07055,2.90369-1.293,6.47739.10319,8.4986,2.55635s2.76949,5.71154,3.07979,8.87493a23.45894,23.45894,0,0,0,.91072,5.75968,5.74057,5.74057,0,0,0,4.01072,3.88868c2.27844.42089,4.46958-1.14791,5.903-2.96825s2.44959-3.98248,4.14351-5.56331,4.45662-2.41517,6.3133-1.02912a6.93481,6.93481,0,0,1,1.55,1.86108c2.84585,4.37141,2.49942,4.18148,5.34527,8.55289Z" + transform="translate(-237.07214 -203.08719)" + fill="#2f2e41" + id="path850" /> + <path + d="M779.20559,581.2194,761.87847,589.015a3.00007,3.00007,0,0,0-1.505,3.96674l2.05146,4.55977a1.00308,1.00308,0,0,0-.50166,1.32224l.82059,1.82391a1.00308,1.00308,0,0,0,1.32225.50166l.82058,1.82391a1.00307,1.00307,0,0,0-.50166,1.32225l.82058,1.8239a1.00308,1.00308,0,0,0,1.32225.50167l11.07789,24.62276a3.00007,3.00007,0,0,0,3.96674,1.505l17.32713-7.79555a3.00007,3.00007,0,0,0,1.505-3.96674l-17.23228-38.30207A3.00007,3.00007,0,0,0,779.20559,581.2194Z" + transform="translate(-237.07214 -203.08719)" + fill="#3f3d56" + id="path852" /> + <path + d="M797.19351,618.76708l-2.43995-5.43-6.3999-14.22-5.62012-12.49a2.87811,2.87811,0,0,0-3.7998-1.45l-9.54,4.29-4.37012,1.97a2.88273,2.88273,0,0,0-1.43994,3.80005l5.81006,12.92,2.23,4.95,6.41992,14.28a2.89061,2.89061,0,0,0,3.81006,1.44l13.8999-6.26A2.879,2.879,0,0,0,797.19351,618.76708Z" + transform="translate(-237.07214 -203.08719)" + fill="#6c63ff" + id="path854" /> +</svg> diff --git a/assets/img/undraw_intro_5.png b/assets/img/undraw_intro_5.png index d11949f5cb6a699205a8e922734ca5298f3e423b..e4c43ef24a146fb2ec7455b0f87714717e2a3ed6 100644 Binary files a/assets/img/undraw_intro_5.png and b/assets/img/undraw_intro_5.png differ diff --git a/assets/img/undraw_intro_5.svg b/assets/img/undraw_intro_5.svg index 1d7798f1edd6cbca5903ad888d96e25161731926..db3b5b02b6593da414c35817559d9f4fb14445ba 100644 --- a/assets/img/undraw_intro_5.svg +++ b/assets/img/undraw_intro_5.svg @@ -1 +1,418 @@ -<svg xmlns="http://www.w3.org/2000/svg" data-name="Layer 1" width="888" height="741.04834" viewBox="0 0 888 741.04834" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M521.89611,253.85607H517.8642v-110.453a63.92718,63.92718,0,0,0-63.92738-63.92726H219.92738A63.92718,63.92718,0,0,0,156,143.40309V749.35675A63.92719,63.92719,0,0,0,219.92738,813.284H453.93682a63.92719,63.92719,0,0,0,63.92738-63.92726V332.47837h4.03191Z" transform="translate(-156 -79.47583)" fill="#e6e6e6"/><path d="M456.51633,96.10749h-30.546a22.68123,22.68123,0,0,1-20.99971,31.24733H270.90951a22.68123,22.68123,0,0,1-20.99972-31.24733h-28.53a47.74011,47.74011,0,0,0-47.74018,47.74005V748.91223a47.74012,47.74012,0,0,0,47.74018,47.74012H456.51633a47.74012,47.74012,0,0,0,47.74018-47.74012V143.84754A47.74011,47.74011,0,0,0,456.51633,96.10749Z" transform="translate(-156 -79.47583)" fill="#fff"/><path d="M269.67241,219.11054H255.63313a1.86134,1.86134,0,0,0-1.86133,1.86133v6.16225a1.86134,1.86134,0,0,0,1.86133,1.86133h2.32651v9.23317h9.38625v-9.23317h2.32652a1.86133,1.86133,0,0,0,1.86132-1.86133v-6.16225A1.86133,1.86133,0,0,0,269.67241,219.11054Z" transform="translate(-156 -79.47583)" fill="#e6e6e6"/><path d="M283.73425,275.50749a72.178,72.178,0,0,1-12.55683-42.79357,1.52226,1.52226,0,0,0-1.18821-1.5191v-2.66269H255.16187v2.62568h-.2043a1.52142,1.52142,0,0,0-1.51944,1.52339q.00006.05544.00418.11074,1.75218,24.42494-11.83339,43.8076a4.19288,4.19288,0,0,0-.75883,2.541l1.62129,50.15132a4.34147,4.34147,0,0,0,4.30433,4.19019h33.53723a4.343,4.343,0,0,0,4.30692-4.26409l.62478-48.69283A8.78784,8.78784,0,0,0,283.73425,275.50749Z" transform="translate(-156 -79.47583)" fill="#e6e6e6"/><path d="M278.42523,292.16618H249.23369a2.997,2.997,0,0,0-2.96218,3.45275l4.41126,28.67321h25.33006l5.3581-28.5766a2.997,2.997,0,0,0-2.9457-3.54936Z" transform="translate(-156 -79.47583)" fill="#fff"/><path d="M425.95669,369.34511H411.91741a1.86133,1.86133,0,0,0-1.86133,1.86132v6.16226a1.86134,1.86134,0,0,0,1.86133,1.86133h2.32651v9.23316h9.38625V379.23h2.32652a1.86133,1.86133,0,0,0,1.86132-1.86133v-6.16226A1.86132,1.86132,0,0,0,425.95669,369.34511Z" transform="translate(-156 -79.47583)" fill="#e6e6e6"/><path d="M440.01853,425.74206a72.178,72.178,0,0,1-12.55683-42.79357,1.52226,1.52226,0,0,0-1.1882-1.5191V378.7667H411.44615v2.62568h-.2043a1.52141,1.52141,0,0,0-1.51944,1.52339q.00007.05542.00418.11074,1.75218,24.42492-11.83339,43.8076a4.19294,4.19294,0,0,0-.75883,2.541l1.62129,50.15132a4.34145,4.34145,0,0,0,4.30433,4.19018h33.53723a4.343,4.343,0,0,0,4.30692-4.26409l.62479-48.69283A8.78789,8.78789,0,0,0,440.01853,425.74206Z" transform="translate(-156 -79.47583)" fill="#e6e6e6"/><path d="M434.70951,442.40074H405.518a2.997,2.997,0,0,0-2.96218,3.45276l4.41126,28.6732h25.33006l5.35811-28.57659a2.9971,2.9971,0,0,0-2.94571-3.54937Z" transform="translate(-156 -79.47583)" fill="#fff"/><path d="M249.935,581.73267h-6.65947a.88292.88292,0,0,0-.88292.88291v2.923a.88292.88292,0,0,0,.88292.88291h1.10357v4.37972h4.45233v-4.37972H249.935a.88291.88291,0,0,0,.88291-.88291v-2.923A.88291.88291,0,0,0,249.935,581.73267Z" transform="translate(-156 -79.47583)" fill="#e6e6e6"/><path d="M256.60519,608.48432a34.2373,34.2373,0,0,1-5.95627-20.29895.72208.72208,0,0,0-.56363-.72057v-1.263H243.052v1.24548h-.09691a.72168.72168,0,0,0-.72074.72262q0,.02628.002.05252a31.24565,31.24565,0,0,1-5.61312,20.77995,1.98884,1.98884,0,0,0-.35994,1.20529l.769,23.78907a2.05934,2.05934,0,0,0,2.04174,1.98759h15.90824a2.06007,2.06007,0,0,0,2.043-2.02265l.29636-23.09723A4.1684,4.1684,0,0,0,256.60519,608.48432Z" transform="translate(-156 -79.47583)" fill="#e6e6e6"/><rect x="83.13662" y="537.75318" width="15.17906" height="7.58953" fill="#fff"/><path d="M280.935,581.73267h-6.65947a.88292.88292,0,0,0-.88292.88291v2.923a.88292.88292,0,0,0,.88292.88291h1.10357v4.37972h4.45233v-4.37972H280.935a.88291.88291,0,0,0,.88291-.88291v-2.923A.88291.88291,0,0,0,280.935,581.73267Z" transform="translate(-156 -79.47583)" fill="#e6e6e6"/><path d="M287.60519,608.48432a34.2373,34.2373,0,0,1-5.95627-20.29895.72208.72208,0,0,0-.56363-.72057v-1.263H274.052v1.24548h-.09691a.72168.72168,0,0,0-.72074.72262q0,.02628.002.05252a31.24565,31.24565,0,0,1-5.61312,20.77995,1.98884,1.98884,0,0,0-.35994,1.20529l.769,23.78907a2.05934,2.05934,0,0,0,2.04174,1.98759h15.90824a2.06007,2.06007,0,0,0,2.043-2.02265l.29636-23.09723A4.1684,4.1684,0,0,0,287.60519,608.48432Z" transform="translate(-156 -79.47583)" fill="#e6e6e6"/><rect x="114.13662" y="537.75318" width="15.17906" height="7.58953" fill="#fff"/><path d="M311.935,581.73267h-6.65947a.88292.88292,0,0,0-.88292.88291v2.923a.88292.88292,0,0,0,.88292.88291h1.10357v4.37972h4.45233v-4.37972H311.935a.88291.88291,0,0,0,.88291-.88291v-2.923A.88291.88291,0,0,0,311.935,581.73267Z" transform="translate(-156 -79.47583)" fill="#e6e6e6"/><path d="M318.60519,608.48432a34.2373,34.2373,0,0,1-5.95627-20.29895.72208.72208,0,0,0-.56363-.72057v-1.263H305.052v1.24548h-.09691a.72168.72168,0,0,0-.72074.72262q0,.02628.002.05252a31.24565,31.24565,0,0,1-5.61312,20.77995,1.98884,1.98884,0,0,0-.35994,1.20529l.769,23.78907a2.05934,2.05934,0,0,0,2.04174,1.98759h15.90824a2.06007,2.06007,0,0,0,2.043-2.02265l.29636-23.09723A4.1684,4.1684,0,0,0,318.60519,608.48432Z" transform="translate(-156 -79.47583)" fill="#e6e6e6"/><rect x="145.13662" y="537.75318" width="15.17906" height="7.58953" fill="#fff"/><path d="M401.56726,523.61282H387.528a1.86132,1.86132,0,0,0-1.86133,1.86132v6.16226a1.86133,1.86133,0,0,0,1.86133,1.86133h2.32651v9.23316h9.38625v-9.23316h2.32651a1.86133,1.86133,0,0,0,1.86132-1.86133v-6.16226A1.86132,1.86132,0,0,0,401.56726,523.61282Z" transform="translate(-156 -79.47583)" fill="#e6e6e6"/><path d="M415.6291,580.00977a72.178,72.178,0,0,1-12.55683-42.79357,1.52226,1.52226,0,0,0-1.1882-1.5191v-2.66269H387.05672v2.62568h-.2043a1.52141,1.52141,0,0,0-1.51944,1.52339q.00007.05542.00418.11074,1.75218,24.42492-11.83339,43.8076a4.19294,4.19294,0,0,0-.75883,2.541l1.62129,50.15132a4.34145,4.34145,0,0,0,4.30434,4.19018h33.53722a4.343,4.343,0,0,0,4.30693-4.26409l.62478-48.69283A8.78782,8.78782,0,0,0,415.6291,580.00977Z" transform="translate(-156 -79.47583)" fill="#e6e6e6"/><path d="M410.32009,596.66845H381.12854a2.997,2.997,0,0,0-2.96218,3.45276l4.41127,28.6732h25.33006l5.3581-28.57659a2.9971,2.9971,0,0,0-2.9457-3.54937Z" transform="translate(-156 -79.47583)" fill="#fff"/><path d="M409.23171,339.93829H325.544c5.85094-31.63336,4.50485-69.83172,0-110.91142h83.68771C404.84668,270.1067,403.53635,308.305,409.23171,339.93829Z" transform="translate(-156 -79.47583)" fill="#e6e6e6"/><circle cx="211.892" cy="201.98189" r="20.16571" fill="#fff"/><path d="M332.602,487.148H248.91429c5.85093-31.63337,4.50485-69.83173,0-110.91143H332.602C328.217,417.31641,326.90664,455.5147,332.602,487.148Z" transform="translate(-156 -79.47583)" fill="#e6e6e6"/><circle cx="135.26229" cy="349.1916" r="20.16571" fill="#fff"/><path d="M456.62114,346.99629H372.93343c5.85093-31.63336,4.50485-69.83172,0-110.91142h83.68771C452.2361,277.1647,450.92578,315.363,456.62114,346.99629Z" transform="translate(-156 -79.47583)" fill="#e6e6e6"/><circle cx="259.28142" cy="209.03989" r="20.16571" fill="#fff"/><path d="M456.62114,341.95487H372.93343c5.85093-31.63337,4.50485-69.83173,0-110.91143h83.68771C452.2361,272.12327,450.92578,310.32156,456.62114,341.95487Z" transform="translate(-156 -79.47583)" fill="#e6e6e6"/><circle cx="259.28142" cy="203.99847" r="20.16571" fill="#fff"/><path d="M456.62114,346.99629H372.93343c5.85093-31.63336,4.50485-69.83172,0-110.91142h83.68771C452.2361,277.1647,450.92578,315.363,456.62114,346.99629Z" transform="translate(-156 -79.47583)" fill="#e6e6e6"/><circle cx="259.28142" cy="209.03989" r="20.16571" fill="#fff"/><rect x="45.52486" y="254.41275" width="274.25371" height="30.24857" fill="#e6e6e6"/><rect x="45.52486" y="404.64732" width="274.25371" height="30.24857" fill="#e6e6e6"/><rect x="45.52486" y="554.88188" width="274.25371" height="30.24857" fill="#e6e6e6"/><path d="M952.85457,757.07471l-68.32479-48.32553c23.04357-22.44766,44.00226-54.41107,64.04589-90.55092l68.32478,48.32553C989.59882,697.53027,966.4714,727.95969,952.85457,757.07471Z" transform="translate(-156 -79.47583)" fill="#6c63ff"/><circle cx="796.87342" cy="605.9822" r="20.16571" fill="#fff"/><path d="M623.26239,536.554h-7.5a.99435.99435,0,0,0-.99435.99435v3.292a.99434.99434,0,0,0,.99435.99434h1.24285v4.93249h5.01427v-4.93249h1.24285a.99435.99435,0,0,0,.99435-.99434v-3.292A.99436.99436,0,0,0,623.26239,536.554Z" transform="translate(-156 -79.47583)" fill="#e6e6e6"/><path d="M630.77443,566.68205a38.55843,38.55843,0,0,1-6.708-22.86093.81323.81323,0,0,0-.63476-.81152v-1.42245h-7.921v1.40268h-.10914a.81275.81275,0,0,0-.8117.81381q0,.02961.00223.05916a35.18922,35.18922,0,0,1-6.32157,23.40264,2.23989,2.23989,0,0,0-.40537,1.35741l.86611,26.79155a2.31928,2.31928,0,0,0,2.29944,2.23846h17.91606a2.32008,2.32008,0,0,0,2.30082-2.27794l.33376-26.0124A4.69456,4.69456,0,0,0,630.77443,566.68205Z" transform="translate(-156 -79.47583)" fill="#6c63ff"/><path d="M621.69892,537.62665a2.14526,2.14526,0,0,1-4.29053,0" transform="translate(-156 -79.47583)" opacity="0.2" style="isolation:isolate"/><rect x="456.16063" y="492.36817" width="15.12429" height="10.08286" fill="#fff"/><path d="M860.60239,641.21767H846.56312a1.86134,1.86134,0,0,0-1.86134,1.86133v6.16226a1.86134,1.86134,0,0,0,1.86134,1.86132h2.32651v9.23317h9.38625v-9.23317h2.32651a1.86132,1.86132,0,0,0,1.86132-1.86132V643.079A1.86133,1.86133,0,0,0,860.60239,641.21767Z" transform="translate(-156 -79.47583)" fill="#e6e6e6"/><path d="M874.66423,697.61463a72.178,72.178,0,0,1-12.55683-42.79358,1.52224,1.52224,0,0,0-1.1882-1.51909v-2.6627H846.09185v2.62568h-.2043a1.52142,1.52142,0,0,0-1.51944,1.5234q.00008.05543.00418.11073,1.75218,24.42493-11.83339,43.80761a4.19289,4.19289,0,0,0-.75883,2.54095l1.62129,50.15132a4.34146,4.34146,0,0,0,4.30434,4.19019h33.53722a4.343,4.343,0,0,0,4.30692-4.26409l.62479-48.69283A8.7878,8.7878,0,0,0,874.66423,697.61463Z" transform="translate(-156 -79.47583)" fill="#6c63ff"/><path d="M857.67571,643.22557a4.01574,4.01574,0,0,1-8.03148,0" transform="translate(-156 -79.47583)" opacity="0.2" style="isolation:isolate"/><path d="M869.35522,714.27331H840.16367a2.997,2.997,0,0,0-2.96218,3.45275l4.41126,28.67321h25.33007l5.3581-28.5766a2.9971,2.9971,0,0,0-2.9457-3.54936Z" transform="translate(-156 -79.47583)" fill="#fff"/><path d="M820.546,756.99571H736.85827c5.85094-31.63336,4.50486-69.83172,0-110.91142H820.546C816.161,687.16411,814.85062,725.36241,820.546,756.99571Z" transform="translate(-156 -79.47583)" fill="#6c63ff"/><circle cx="623.20627" cy="619.03931" r="20.16571" fill="#fff"/><polygon points="322.243 328.466 341.03 326.758 352.986 297.724 331.637 285.768 322.243 328.466" fill="#ffb8b8"/><path d="M650.66043,487.64986v0a10.59328,10.59328,0,0,0-9.20188-14.51664l-29.16988-1.73941-4.2949,14.28206,30.02882,8.24691A10.59326,10.59326,0,0,0,650.66043,487.64986Z" transform="translate(-156 -79.47583)" fill="#ffb8b8"/><path d="M619.33866,494.16267l-.32093-26.79954-64.79286-10.33856L504.30953,399.777a16.33816,16.33816,0,0,0-21.29428-2.91186l0,0a16.33815,16.33815,0,0,0-2.84636,24.922l41.17966,50.67767Z" transform="translate(-156 -79.47583)" fill="#575a89"/><path d="M463.72552,795.64251h17.07932L523.168,604.10914l43.88737,59.16871,25.619,128.09483h16.22535l-3.41586-137.48845-57.2157-146.88208H491.90639c-15.40224,27.87449-27.48462,56.60826-13.66345,86.25052Z" transform="translate(-156 -79.47583)" fill="#2f2e41"/><path d="M582.20449,807.27611a4.45733,4.45733,0,0,0,3.4756,5.71828l41.79324,7.41672a6.87646,6.87646,0,0,0,7.8008-4.71314h0a6.83384,6.83384,0,0,0-3.34222-8.12572,63.9022,63.9022,0,0,1-23.04833-20.0382c-4.59335,4.27726-9.7273,3.875-15.179.72281l-5.78247.72281Z" transform="translate(-156 -79.47583)" fill="#2f2e41"/><path d="M455.81759,807.27611a4.45733,4.45733,0,0,0,3.4756,5.71828l41.79324,7.41672a6.87646,6.87646,0,0,0,7.8008-4.71314h0a6.83384,6.83384,0,0,0-3.34222-8.12572,63.9022,63.9022,0,0,1-23.04833-20.0382c-4.59335,4.27726-9.7273,3.875-15.179.72281l-5.78247.72281Z" transform="translate(-156 -79.47583)" fill="#2f2e41"/><circle cx="353.41268" cy="284.48709" r="23.91104" fill="#ffb8b8"/><path d="M488.06354,513.40689,550.403,511.699l-18.30772-57.61963c11.37738-18.23924-.073-36.46-16.27789-54.67684l-12.80948-8.53965-20.49517-1.70793h0a50.3141,50.3141,0,0,0-13.54915,35.0504C469.36939,452.03191,474.29652,482.324,488.06354,513.40689Z" transform="translate(-156 -79.47583)" fill="#575a89"/><path d="M631.29146,552.19152h0a10.59327,10.59327,0,0,0-2.74926-16.96611L602.4085,522.15112l-9.567,11.441,24.36342,19.395A10.59327,10.59327,0,0,0,631.29146,552.19152Z" transform="translate(-156 -79.47583)" fill="#ffb8b8"/><path d="M599.933,545.85758l10.24759-24.765-55.50168-34.99377-23.37023-72.268a16.33817,16.33817,0,0,0-18.43188-11.054h0a16.33815,16.33815,0,0,0-12.42089,21.79283l17.92341,62.79126Z" transform="translate(-156 -79.47583)" fill="#575a89"/><path d="M470.13027,354.5693c0,9.30389,6.04222,23.7124,13.66345,29.8888,5.12781,4.15568,11.90457,3.98066,14.51741-1.70793,2.68032-5.83557,11.91945-19.55229,28.18086-28.18087,21.67761-11.50252-7.68756-31.18152-28.18086-28.18086C482.9115,328.64329,470.13027,339.00544,470.13027,354.5693Z" transform="translate(-156 -79.47583)" fill="#2f2e41"/><circle cx="328.64768" cy="245.20468" r="17.07931" fill="#2f2e41"/><path d="M504.28889,318.70275a17.06865,17.06865,0,0,0-15.79836-17.01463c.42437-.03158.84854-.06468,1.28094-.06468a17.07931,17.07931,0,0,1,0,34.15862c-.4324,0-.85657-.0331-1.28094-.06468A17.06869,17.06869,0,0,0,504.28889,318.70275Z" transform="translate(-156 -79.47583)" fill="#2f2e41"/><ellipse cx="353.83966" cy="287.90296" rx="3.84284" ry="5.12379" fill="#ffb8b8"/><polygon points="837.751 684.845 571.879 684.845 515.578 418.694 467.529 418.694 467.529 406.752 525.258 406.752 581.559 672.902 837.751 672.902 837.751 684.845" fill="#3f3d56"/><circle cx="610.84102" cy="707.87676" r="25.59138" fill="#3f3d56"/><circle cx="801.92331" cy="707.87676" r="25.59138" fill="#3f3d56"/><path d="M988.90348,758.69673H730.22506L684.58373,533.14489h347.15138a12.2655,12.2655,0,0,1,12.11592,14.16689l-42.8333,201.0251A12.20374,12.20374,0,0,1,988.90348,758.69673Zm-255.86937-3.41219H988.90348a8.80568,8.80568,0,0,0,8.74205-7.47748l42.8333-201.0251a8.85014,8.85014,0,0,0-8.74372-10.22489H688.72567Z" transform="translate(-156 -79.47583)" fill="#3f3d56"/><polygon points="624.513 678.499 594.623 455.653 597.989 455.097 627.879 677.943 624.513 678.499" fill="#3f3d56"/><polygon points="790.712 676.788 787.343 676.242 816.36 455.102 819.729 455.648 790.712 676.788" fill="#3f3d56"/><rect x="708.11491" y="455.37515" width="3.41218" height="222.84575" fill="#3f3d56"/><rect x="865.45079" y="431.52231" width="3.41219" height="330.29569" transform="translate(112.38887 1382.90398) rotate(-89.86127)" fill="#3f3d56"/><rect x="718.83766" y="700.96181" width="290.1779" height="3.41226" transform="translate(-160.7831 -73.5538) rotate(-0.39166)" fill="#3f3d56"/><ellipse cx="472.64757" cy="411.01676" rx="18.76701" ry="10.23655" fill="#3f3d56"/></svg> \ No newline at end of file +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + data-name="Layer 1" + width="888" + height="741.04834" + viewBox="0 0 888 741.04834" + version="1.1" + id="svg1188" + sodipodi:docname="undraw_intro_5.svg" + inkscape:export-filename="/home/vjrj/dev/ginkgo/assets/img/undraw_intro_5.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96" + inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns="http://www.w3.org/2000/svg" + xmlns:svg="http://www.w3.org/2000/svg"> + <defs + id="defs1192" /> + <sodipodi:namedview + id="namedview1190" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageshadow="2" + inkscape:pageopacity="0.0" + inkscape:pagecheckerboard="true" + showgrid="false" + inkscape:zoom="1.1780608" + inkscape:cx="443.94992" + inkscape:cy="370.52417" + inkscape:window-width="3440" + inkscape:window-height="1370" + inkscape:window-x="0" + inkscape:window-y="33" + inkscape:window-maximized="1" + inkscape:current-layer="svg1188" /> + <path + d="M521.89611,253.85607H517.8642v-110.453a63.92718,63.92718,0,0,0-63.92738-63.92726H219.92738A63.92718,63.92718,0,0,0,156,143.40309V749.35675A63.92719,63.92719,0,0,0,219.92738,813.284H453.93682a63.92719,63.92719,0,0,0,63.92738-63.92726V332.47837h4.03191Z" + transform="translate(-156 -79.47583)" + fill="#e6e6e6" + id="path1050" /> + <path + d="M456.51633,96.10749h-30.546a22.68123,22.68123,0,0,1-20.99971,31.24733H270.90951a22.68123,22.68123,0,0,1-20.99972-31.24733h-28.53a47.74011,47.74011,0,0,0-47.74018,47.74005V748.91223a47.74012,47.74012,0,0,0,47.74018,47.74012H456.51633a47.74012,47.74012,0,0,0,47.74018-47.74012V143.84754A47.74011,47.74011,0,0,0,456.51633,96.10749Z" + transform="translate(-156 -79.47583)" + fill="#fff" + id="path1052" /> + <path + d="M269.67241,219.11054H255.63313a1.86134,1.86134,0,0,0-1.86133,1.86133v6.16225a1.86134,1.86134,0,0,0,1.86133,1.86133h2.32651v9.23317h9.38625v-9.23317h2.32652a1.86133,1.86133,0,0,0,1.86132-1.86133v-6.16225A1.86133,1.86133,0,0,0,269.67241,219.11054Z" + transform="translate(-156 -79.47583)" + fill="#e6e6e6" + id="path1054" /> + <path + d="M283.73425,275.50749a72.178,72.178,0,0,1-12.55683-42.79357,1.52226,1.52226,0,0,0-1.18821-1.5191v-2.66269H255.16187v2.62568h-.2043a1.52142,1.52142,0,0,0-1.51944,1.52339q.00006.05544.00418.11074,1.75218,24.42494-11.83339,43.8076a4.19288,4.19288,0,0,0-.75883,2.541l1.62129,50.15132a4.34147,4.34147,0,0,0,4.30433,4.19019h33.53723a4.343,4.343,0,0,0,4.30692-4.26409l.62478-48.69283A8.78784,8.78784,0,0,0,283.73425,275.50749Z" + transform="translate(-156 -79.47583)" + fill="#e6e6e6" + id="path1056" /> + <path + d="M278.42523,292.16618H249.23369a2.997,2.997,0,0,0-2.96218,3.45275l4.41126,28.67321h25.33006l5.3581-28.5766a2.997,2.997,0,0,0-2.9457-3.54936Z" + transform="translate(-156 -79.47583)" + fill="#fff" + id="path1058" /> + <path + d="M425.95669,369.34511H411.91741a1.86133,1.86133,0,0,0-1.86133,1.86132v6.16226a1.86134,1.86134,0,0,0,1.86133,1.86133h2.32651v9.23316h9.38625V379.23h2.32652a1.86133,1.86133,0,0,0,1.86132-1.86133v-6.16226A1.86132,1.86132,0,0,0,425.95669,369.34511Z" + transform="translate(-156 -79.47583)" + fill="#e6e6e6" + id="path1060" /> + <path + d="M440.01853,425.74206a72.178,72.178,0,0,1-12.55683-42.79357,1.52226,1.52226,0,0,0-1.1882-1.5191V378.7667H411.44615v2.62568h-.2043a1.52141,1.52141,0,0,0-1.51944,1.52339q.00007.05542.00418.11074,1.75218,24.42492-11.83339,43.8076a4.19294,4.19294,0,0,0-.75883,2.541l1.62129,50.15132a4.34145,4.34145,0,0,0,4.30433,4.19018h33.53723a4.343,4.343,0,0,0,4.30692-4.26409l.62479-48.69283A8.78789,8.78789,0,0,0,440.01853,425.74206Z" + transform="translate(-156 -79.47583)" + fill="#e6e6e6" + id="path1062" /> + <path + d="M434.70951,442.40074H405.518a2.997,2.997,0,0,0-2.96218,3.45276l4.41126,28.6732h25.33006l5.35811-28.57659a2.9971,2.9971,0,0,0-2.94571-3.54937Z" + transform="translate(-156 -79.47583)" + fill="#fff" + id="path1064" /> + <path + d="M249.935,581.73267h-6.65947a.88292.88292,0,0,0-.88292.88291v2.923a.88292.88292,0,0,0,.88292.88291h1.10357v4.37972h4.45233v-4.37972H249.935a.88291.88291,0,0,0,.88291-.88291v-2.923A.88291.88291,0,0,0,249.935,581.73267Z" + transform="translate(-156 -79.47583)" + fill="#e6e6e6" + id="path1066" /> + <path + d="M256.60519,608.48432a34.2373,34.2373,0,0,1-5.95627-20.29895.72208.72208,0,0,0-.56363-.72057v-1.263H243.052v1.24548h-.09691a.72168.72168,0,0,0-.72074.72262q0,.02628.002.05252a31.24565,31.24565,0,0,1-5.61312,20.77995,1.98884,1.98884,0,0,0-.35994,1.20529l.769,23.78907a2.05934,2.05934,0,0,0,2.04174,1.98759h15.90824a2.06007,2.06007,0,0,0,2.043-2.02265l.29636-23.09723A4.1684,4.1684,0,0,0,256.60519,608.48432Z" + transform="translate(-156 -79.47583)" + fill="#e6e6e6" + id="path1068" /> + <rect + x="83.13662" + y="537.75318" + width="15.17906" + height="7.58953" + fill="#fff" + id="rect1070" /> + <path + d="M280.935,581.73267h-6.65947a.88292.88292,0,0,0-.88292.88291v2.923a.88292.88292,0,0,0,.88292.88291h1.10357v4.37972h4.45233v-4.37972H280.935a.88291.88291,0,0,0,.88291-.88291v-2.923A.88291.88291,0,0,0,280.935,581.73267Z" + transform="translate(-156 -79.47583)" + fill="#e6e6e6" + id="path1072" /> + <path + d="M287.60519,608.48432a34.2373,34.2373,0,0,1-5.95627-20.29895.72208.72208,0,0,0-.56363-.72057v-1.263H274.052v1.24548h-.09691a.72168.72168,0,0,0-.72074.72262q0,.02628.002.05252a31.24565,31.24565,0,0,1-5.61312,20.77995,1.98884,1.98884,0,0,0-.35994,1.20529l.769,23.78907a2.05934,2.05934,0,0,0,2.04174,1.98759h15.90824a2.06007,2.06007,0,0,0,2.043-2.02265l.29636-23.09723A4.1684,4.1684,0,0,0,287.60519,608.48432Z" + transform="translate(-156 -79.47583)" + fill="#e6e6e6" + id="path1074" /> + <rect + x="114.13662" + y="537.75318" + width="15.17906" + height="7.58953" + fill="#fff" + id="rect1076" /> + <path + d="M311.935,581.73267h-6.65947a.88292.88292,0,0,0-.88292.88291v2.923a.88292.88292,0,0,0,.88292.88291h1.10357v4.37972h4.45233v-4.37972H311.935a.88291.88291,0,0,0,.88291-.88291v-2.923A.88291.88291,0,0,0,311.935,581.73267Z" + transform="translate(-156 -79.47583)" + fill="#e6e6e6" + id="path1078" /> + <path + d="M318.60519,608.48432a34.2373,34.2373,0,0,1-5.95627-20.29895.72208.72208,0,0,0-.56363-.72057v-1.263H305.052v1.24548h-.09691a.72168.72168,0,0,0-.72074.72262q0,.02628.002.05252a31.24565,31.24565,0,0,1-5.61312,20.77995,1.98884,1.98884,0,0,0-.35994,1.20529l.769,23.78907a2.05934,2.05934,0,0,0,2.04174,1.98759h15.90824a2.06007,2.06007,0,0,0,2.043-2.02265l.29636-23.09723A4.1684,4.1684,0,0,0,318.60519,608.48432Z" + transform="translate(-156 -79.47583)" + fill="#e6e6e6" + id="path1080" /> + <rect + x="145.13662" + y="537.75318" + width="15.17906" + height="7.58953" + fill="#fff" + id="rect1082" /> + <path + d="M401.56726,523.61282H387.528a1.86132,1.86132,0,0,0-1.86133,1.86132v6.16226a1.86133,1.86133,0,0,0,1.86133,1.86133h2.32651v9.23316h9.38625v-9.23316h2.32651a1.86133,1.86133,0,0,0,1.86132-1.86133v-6.16226A1.86132,1.86132,0,0,0,401.56726,523.61282Z" + transform="translate(-156 -79.47583)" + fill="#e6e6e6" + id="path1084" /> + <path + d="M415.6291,580.00977a72.178,72.178,0,0,1-12.55683-42.79357,1.52226,1.52226,0,0,0-1.1882-1.5191v-2.66269H387.05672v2.62568h-.2043a1.52141,1.52141,0,0,0-1.51944,1.52339q.00007.05542.00418.11074,1.75218,24.42492-11.83339,43.8076a4.19294,4.19294,0,0,0-.75883,2.541l1.62129,50.15132a4.34145,4.34145,0,0,0,4.30434,4.19018h33.53722a4.343,4.343,0,0,0,4.30693-4.26409l.62478-48.69283A8.78782,8.78782,0,0,0,415.6291,580.00977Z" + transform="translate(-156 -79.47583)" + fill="#e6e6e6" + id="path1086" /> + <path + d="M410.32009,596.66845H381.12854a2.997,2.997,0,0,0-2.96218,3.45276l4.41127,28.6732h25.33006l5.3581-28.57659a2.9971,2.9971,0,0,0-2.9457-3.54937Z" + transform="translate(-156 -79.47583)" + fill="#fff" + id="path1088" /> + <path + d="M409.23171,339.93829H325.544c5.85094-31.63336,4.50485-69.83172,0-110.91142h83.68771C404.84668,270.1067,403.53635,308.305,409.23171,339.93829Z" + transform="translate(-156 -79.47583)" + fill="#e6e6e6" + id="path1090" /> + <circle + cx="211.892" + cy="201.98189" + r="20.16571" + fill="#fff" + id="circle1092" /> + <path + d="M332.602,487.148H248.91429c5.85093-31.63337,4.50485-69.83173,0-110.91143H332.602C328.217,417.31641,326.90664,455.5147,332.602,487.148Z" + transform="translate(-156 -79.47583)" + fill="#e6e6e6" + id="path1094" /> + <circle + cx="135.26229" + cy="349.1916" + r="20.16571" + fill="#fff" + id="circle1096" /> + <path + d="M456.62114,346.99629H372.93343c5.85093-31.63336,4.50485-69.83172,0-110.91142h83.68771C452.2361,277.1647,450.92578,315.363,456.62114,346.99629Z" + transform="translate(-156 -79.47583)" + fill="#e6e6e6" + id="path1098" /> + <circle + cx="259.28142" + cy="209.03989" + r="20.16571" + fill="#fff" + id="circle1100" /> + <path + d="M456.62114,341.95487H372.93343c5.85093-31.63337,4.50485-69.83173,0-110.91143h83.68771C452.2361,272.12327,450.92578,310.32156,456.62114,341.95487Z" + transform="translate(-156 -79.47583)" + fill="#e6e6e6" + id="path1102" /> + <circle + cx="259.28142" + cy="203.99847" + r="20.16571" + fill="#fff" + id="circle1104" /> + <path + d="M456.62114,346.99629H372.93343c5.85093-31.63336,4.50485-69.83172,0-110.91142h83.68771C452.2361,277.1647,450.92578,315.363,456.62114,346.99629Z" + transform="translate(-156 -79.47583)" + fill="#e6e6e6" + id="path1106" /> + <circle + cx="259.28142" + cy="209.03989" + r="20.16571" + fill="#fff" + id="circle1108" /> + <rect + x="45.52486" + y="254.41275" + width="274.25371" + height="30.24857" + fill="#e6e6e6" + id="rect1110" /> + <rect + x="45.52486" + y="404.64732" + width="274.25371" + height="30.24857" + fill="#e6e6e6" + id="rect1112" /> + <rect + x="45.52486" + y="554.88188" + width="274.25371" + height="30.24857" + fill="#e6e6e6" + id="rect1114" /> + <path + d="M952.85457,757.07471l-68.32479-48.32553c23.04357-22.44766,44.00226-54.41107,64.04589-90.55092l68.32478,48.32553C989.59882,697.53027,966.4714,727.95969,952.85457,757.07471Z" + transform="translate(-156 -79.47583)" + fill="#6c63ff" + id="path1116" /> + <circle + cx="796.87342" + cy="605.9822" + r="20.16571" + fill="#fff" + id="circle1118" /> + <path + d="M623.26239,536.554h-7.5a.99435.99435,0,0,0-.99435.99435v3.292a.99434.99434,0,0,0,.99435.99434h1.24285v4.93249h5.01427v-4.93249h1.24285a.99435.99435,0,0,0,.99435-.99434v-3.292A.99436.99436,0,0,0,623.26239,536.554Z" + transform="translate(-156 -79.47583)" + fill="#e6e6e6" + id="path1120" /> + <path + d="M630.77443,566.68205a38.55843,38.55843,0,0,1-6.708-22.86093.81323.81323,0,0,0-.63476-.81152v-1.42245h-7.921v1.40268h-.10914a.81275.81275,0,0,0-.8117.81381q0,.02961.00223.05916a35.18922,35.18922,0,0,1-6.32157,23.40264,2.23989,2.23989,0,0,0-.40537,1.35741l.86611,26.79155a2.31928,2.31928,0,0,0,2.29944,2.23846h17.91606a2.32008,2.32008,0,0,0,2.30082-2.27794l.33376-26.0124A4.69456,4.69456,0,0,0,630.77443,566.68205Z" + transform="translate(-156 -79.47583)" + fill="#6c63ff" + id="path1122" /> + <path + d="M621.69892,537.62665a2.14526,2.14526,0,0,1-4.29053,0" + transform="translate(-156 -79.47583)" + opacity="0.2" + style="isolation:isolate" + id="path1124" /> + <rect + x="456.16063" + y="492.36817" + width="15.12429" + height="10.08286" + fill="#fff" + id="rect1126" /> + <path + d="M860.60239,641.21767H846.56312a1.86134,1.86134,0,0,0-1.86134,1.86133v6.16226a1.86134,1.86134,0,0,0,1.86134,1.86132h2.32651v9.23317h9.38625v-9.23317h2.32651a1.86132,1.86132,0,0,0,1.86132-1.86132V643.079A1.86133,1.86133,0,0,0,860.60239,641.21767Z" + transform="translate(-156 -79.47583)" + fill="#e6e6e6" + id="path1128" /> + <path + d="M874.66423,697.61463a72.178,72.178,0,0,1-12.55683-42.79358,1.52224,1.52224,0,0,0-1.1882-1.51909v-2.6627H846.09185v2.62568h-.2043a1.52142,1.52142,0,0,0-1.51944,1.5234q.00008.05543.00418.11073,1.75218,24.42493-11.83339,43.80761a4.19289,4.19289,0,0,0-.75883,2.54095l1.62129,50.15132a4.34146,4.34146,0,0,0,4.30434,4.19019h33.53722a4.343,4.343,0,0,0,4.30692-4.26409l.62479-48.69283A8.7878,8.7878,0,0,0,874.66423,697.61463Z" + transform="translate(-156 -79.47583)" + fill="#6c63ff" + id="path1130" /> + <path + d="M857.67571,643.22557a4.01574,4.01574,0,0,1-8.03148,0" + transform="translate(-156 -79.47583)" + opacity="0.2" + style="isolation:isolate" + id="path1132" /> + <path + d="M869.35522,714.27331H840.16367a2.997,2.997,0,0,0-2.96218,3.45275l4.41126,28.67321h25.33007l5.3581-28.5766a2.9971,2.9971,0,0,0-2.9457-3.54936Z" + transform="translate(-156 -79.47583)" + fill="#fff" + id="path1134" /> + <path + d="M820.546,756.99571H736.85827c5.85094-31.63336,4.50486-69.83172,0-110.91142H820.546C816.161,687.16411,814.85062,725.36241,820.546,756.99571Z" + transform="translate(-156 -79.47583)" + fill="#6c63ff" + id="path1136" /> + <circle + cx="623.20627" + cy="619.03931" + r="20.16571" + fill="#fff" + id="circle1138" /> + <polygon + points="322.243 328.466 341.03 326.758 352.986 297.724 331.637 285.768 322.243 328.466" + fill="#ffb8b8" + id="polygon1140" /> + <path + d="M650.66043,487.64986v0a10.59328,10.59328,0,0,0-9.20188-14.51664l-29.16988-1.73941-4.2949,14.28206,30.02882,8.24691A10.59326,10.59326,0,0,0,650.66043,487.64986Z" + transform="translate(-156 -79.47583)" + fill="#ffb8b8" + id="path1142" /> + <path + d="M619.33866,494.16267l-.32093-26.79954-64.79286-10.33856L504.30953,399.777a16.33816,16.33816,0,0,0-21.29428-2.91186l0,0a16.33815,16.33815,0,0,0-2.84636,24.922l41.17966,50.67767Z" + transform="translate(-156 -79.47583)" + fill="#575a89" + id="path1144" /> + <path + d="M463.72552,795.64251h17.07932L523.168,604.10914l43.88737,59.16871,25.619,128.09483h16.22535l-3.41586-137.48845-57.2157-146.88208H491.90639c-15.40224,27.87449-27.48462,56.60826-13.66345,86.25052Z" + transform="translate(-156 -79.47583)" + fill="#2f2e41" + id="path1146" /> + <path + d="M582.20449,807.27611a4.45733,4.45733,0,0,0,3.4756,5.71828l41.79324,7.41672a6.87646,6.87646,0,0,0,7.8008-4.71314h0a6.83384,6.83384,0,0,0-3.34222-8.12572,63.9022,63.9022,0,0,1-23.04833-20.0382c-4.59335,4.27726-9.7273,3.875-15.179.72281l-5.78247.72281Z" + transform="translate(-156 -79.47583)" + fill="#2f2e41" + id="path1148" /> + <path + d="M455.81759,807.27611a4.45733,4.45733,0,0,0,3.4756,5.71828l41.79324,7.41672a6.87646,6.87646,0,0,0,7.8008-4.71314h0a6.83384,6.83384,0,0,0-3.34222-8.12572,63.9022,63.9022,0,0,1-23.04833-20.0382c-4.59335,4.27726-9.7273,3.875-15.179.72281l-5.78247.72281Z" + transform="translate(-156 -79.47583)" + fill="#2f2e41" + id="path1150" /> + <circle + cx="353.41268" + cy="284.48709" + r="23.91104" + fill="#ffb8b8" + id="circle1152" /> + <path + d="M488.06354,513.40689,550.403,511.699l-18.30772-57.61963c11.37738-18.23924-.073-36.46-16.27789-54.67684l-12.80948-8.53965-20.49517-1.70793h0a50.3141,50.3141,0,0,0-13.54915,35.0504C469.36939,452.03191,474.29652,482.324,488.06354,513.40689Z" + transform="translate(-156 -79.47583)" + fill="#575a89" + id="path1154" /> + <path + d="M631.29146,552.19152h0a10.59327,10.59327,0,0,0-2.74926-16.96611L602.4085,522.15112l-9.567,11.441,24.36342,19.395A10.59327,10.59327,0,0,0,631.29146,552.19152Z" + transform="translate(-156 -79.47583)" + fill="#ffb8b8" + id="path1156" /> + <path + d="M599.933,545.85758l10.24759-24.765-55.50168-34.99377-23.37023-72.268a16.33817,16.33817,0,0,0-18.43188-11.054h0a16.33815,16.33815,0,0,0-12.42089,21.79283l17.92341,62.79126Z" + transform="translate(-156 -79.47583)" + fill="#575a89" + id="path1158" /> + <path + d="M470.13027,354.5693c0,9.30389,6.04222,23.7124,13.66345,29.8888,5.12781,4.15568,11.90457,3.98066,14.51741-1.70793,2.68032-5.83557,11.91945-19.55229,28.18086-28.18087,21.67761-11.50252-7.68756-31.18152-28.18086-28.18086C482.9115,328.64329,470.13027,339.00544,470.13027,354.5693Z" + transform="translate(-156 -79.47583)" + fill="#2f2e41" + id="path1160" /> + <circle + cx="328.64768" + cy="245.20468" + r="17.07931" + fill="#2f2e41" + id="circle1162" /> + <path + d="M504.28889,318.70275a17.06865,17.06865,0,0,0-15.79836-17.01463c.42437-.03158.84854-.06468,1.28094-.06468a17.07931,17.07931,0,0,1,0,34.15862c-.4324,0-.85657-.0331-1.28094-.06468A17.06869,17.06869,0,0,0,504.28889,318.70275Z" + transform="translate(-156 -79.47583)" + fill="#2f2e41" + id="path1164" /> + <ellipse + cx="353.83966" + cy="287.90296" + rx="3.84284" + ry="5.12379" + fill="#ffb8b8" + id="ellipse1166" /> + <polygon + points="837.751 684.845 571.879 684.845 515.578 418.694 467.529 418.694 467.529 406.752 525.258 406.752 581.559 672.902 837.751 672.902 837.751 684.845" + fill="#3f3d56" + id="polygon1168" /> + <circle + cx="610.84102" + cy="707.87676" + r="25.59138" + fill="#3f3d56" + id="circle1170" /> + <circle + cx="801.92331" + cy="707.87676" + r="25.59138" + fill="#3f3d56" + id="circle1172" /> + <path + d="M988.90348,758.69673H730.22506L684.58373,533.14489h347.15138a12.2655,12.2655,0,0,1,12.11592,14.16689l-42.8333,201.0251A12.20374,12.20374,0,0,1,988.90348,758.69673Zm-255.86937-3.41219H988.90348a8.80568,8.80568,0,0,0,8.74205-7.47748l42.8333-201.0251a8.85014,8.85014,0,0,0-8.74372-10.22489H688.72567Z" + transform="translate(-156 -79.47583)" + fill="#3f3d56" + id="path1174" /> + <polygon + points="624.513 678.499 594.623 455.653 597.989 455.097 627.879 677.943 624.513 678.499" + fill="#3f3d56" + id="polygon1176" /> + <polygon + points="790.712 676.788 787.343 676.242 816.36 455.102 819.729 455.648 790.712 676.788" + fill="#3f3d56" + id="polygon1178" /> + <rect + x="708.11491" + y="455.37515" + width="3.41218" + height="222.84575" + fill="#3f3d56" + id="rect1180" /> + <rect + x="865.45079" + y="431.52231" + width="3.41219" + height="330.29569" + transform="translate(112.38887 1382.90398) rotate(-89.86127)" + fill="#3f3d56" + id="rect1182" /> + <rect + x="718.83766" + y="700.96181" + width="290.1779" + height="3.41226" + transform="translate(-160.7831 -73.5538) rotate(-0.39166)" + fill="#3f3d56" + id="rect1184" /> + <ellipse + cx="472.64757" + cy="411.01676" + rx="18.76701" + ry="10.23655" + fill="#3f3d56" + id="ellipse1186" /> +</svg> diff --git a/assets/translations/ca.json b/assets/translations/ca.json index a475ce92482962c5c9efbd86a8a46978852943a4..b20bf1dd0e2ef5510ca9b0f8315be89a04e62607 100644 --- a/assets/translations/ca.json +++ b/assets/translations/ca.json @@ -35,7 +35,7 @@ "online_terminal": "Connectat", "offline_terminal": "Desconnectat", "show_qr_to_client": "Mostra la meva clau pública", - "show_qr_to_client_amount": "Mostra el meu QR amb aquesta quantitat", + "show_qr_to_client_amount": "Mostra aquest codi QR amb aquesta quantitat a una altra cartera Äž1nkgo", "keys_tooltip": "Les claus públiques i privades en Äž1 i Duniter són com un sistema de pany i clau, on la clau pública fa de pany que pot obrir qualsevol que tingui la clau privada corresponent, oferint una manera segura d'autenticar i verificar transaccions.", "card_validity": "Validesa", "card_validity_tooltip": "Tingues en compte que aquest moneder només és accessible mentre usis aquest navegador i aquest dispositiu especÃfic. Si esborres o reinstal·les el navegador, perdrà s l'accès a aquest moneder i els fons emmagatzemats en ell.", diff --git a/assets/translations/en.json b/assets/translations/en.json index c44742e661f7235b2d4963a4b7bcf1a7f0f92df7..7cc29e7f8b92a9ff9c1ed7267270e25e5a033d77 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -35,7 +35,7 @@ "online_terminal": "Online", "offline_terminal": "Offline", "show_qr_to_client": "Show your public key to your client", - "show_qr_to_client_amount": "Show your QR with this amount", + "show_qr_to_client_amount": "Display this QR code with that amount to another Äž1nkgo wallet", "keys_tooltip": "Public and private keys in Äž1 and Duniter are like a lock and key system, where the public key acts as the lock that can be opened by anyone with the corresponding private key, providing a secure way to authenticate and verify transactions", "card_validity": "Validity", "card_validity_tooltip": "Please note that this wallet is only accessible while using this specific browser and device. If you delete or reset the browser, you will lose access to this wallet and the funds stored in it.", @@ -89,5 +89,10 @@ "yes_sent": "YES, SEND IT", "receive_g1": "Receive Äž1", "insufficient balance": "Oops, insufficient balance to pay this", - "language_switch_title": "Select your language" + "language_switch_title": "Select your language", + "transaction_pending": "Pending", + "transaction_sending": "Sending", + "transaction_receiving": "Receiving", + "transaction_sent": "Sent", + "transaction_received": "Received" } diff --git a/assets/translations/es.json b/assets/translations/es.json index 082d49fc6fb87debbf5d8528491737b4d3725963..cb7388144c32bd2e3735b209f090d133915f7f7d 100644 --- a/assets/translations/es.json +++ b/assets/translations/es.json @@ -15,7 +15,7 @@ "search_user_title": "Usuario a pagar", "search_user": "Buscar (usuari@ o clave pública)", "search_user_btn": "Buscar usuari@", - "g1_form_pay_desc": "Comment", + "g1_form_pay_desc": "Comentario", "g1_form_pay_hint": "Introduzca un comentario (opcional)", "code_card_title": "Repositorio de código", "intro_1_title": "¡Bienvenido a nuestro monedero Äž1!", @@ -35,7 +35,7 @@ "online_terminal": "En lÃnea", "offline_terminal": "Fuera de lÃnea", "show_qr_to_client": "Muestre su clave pública a su clientæ", - "show_qr_to_client_amount": "Muestre su QR con esa cantidad", + "show_qr_to_client_amount": "Muestre este QR con esa cantidad a otro monedero Äž1nkgo", "keys_tooltip": "Las claves públicas y privadas en Äž1 y Duniter son como un sistema de cerradura y llave, donde la clave pública actúa como la cerradura que puede ser abierta por cualquiera que tenga la clave privada correspondiente, proporcionando una forma segura de autenticar y verificar transacciones.", "card_validity": "Validez", "card_validity_tooltip": "Tenga en cuenta que este monedero solo es accesible mientras utiliza este navegador y este dispositivo especÃfico. Si borra o restablece el navegador, perderá el acceso a este monedero y los fondos almacenados en el.", @@ -47,7 +47,7 @@ "some_key_copied_to_clipboard": "La clave pública se ha copiado al portapapeles", "key_tools_title": "Llaves y Herramientas", "transactions": "Transacciones", - "balance": "Balance", + "balance": "Saldo", "transaction_from_to": "Desde {from} a {to}", "your_wallet": "tu monedero", "delete_contact": "Borrar contacto", @@ -87,6 +87,11 @@ "please_confirm_sent_desc": "Por favor confirma que quieres enviar {amount} Äž1 a {to}", "yes_sent": "SÃ, ENVÃALO", "receive_g1": "Recibe Junas", - "insufficient balance": "Upps, balance insuficiente para hacer este pago", - "language_switch_title": "Selecciona tu idioma" + "insufficient balance": "Upps, saldo insuficiente para hacer este pago", + "language_switch_title": "Selecciona tu idioma", + "transaction_pending": "Pendiente", + "transaction_sending": "Enviando", + "transaction_receiving": "Recibiendo", + "transaction_sent": "Enviado", + "transaction_received": "Recibido" } diff --git a/assets/translations/fr.json b/assets/translations/fr.json index 165273fc7496761db7b8b52d285c2b185eca239e..f5ad60d0d422513dab887b6cf2d8a65095295adf 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -35,7 +35,7 @@ "online_terminal": "En ligne", "offline_terminal": "Hors ligne", "show_qr_to_client": "Montrez votre clé publique à votre client", - "show_qr_to_client_amount": "Montrez votre QR avec ce montant", + "show_qr_to_client_amount": "Affichez ce code QR avec cette quantité sur un autre portefeuille Äž1nkgo", "keys_tooltip": "Les clés publiques et privées en Äž1 et Duniter fonctionnent comme un système de verrou et de clé, où la clé publique agit comme le verrou qui peut être ouvert par n'importe qui ayant la clé privée correspondante, offrant ainsi un moyen sécurisé d'authentifier et de vérifier les transactions", "card_validity": "Validité", "card_validity_tooltip": "Veuillez noter que ce portefeuille n'est accessible que lors de l'utilisation de ce navigateur et de cet appareil spécifiques. Si vous supprimez ou réinitialisez le navigateur, vous perdrez l'accès à ce portefeuille et aux fonds qu'il contient.", diff --git a/lib/data/models/app_state.dart b/lib/data/models/app_state.dart index 99d588d4bf0b26136a76a0b810f4b86e0f4909a0..f6a6a4b950b103059f2c051c65d6922af8b3fbf5 100644 --- a/lib/data/models/app_state.dart +++ b/lib/data/models/app_state.dart @@ -11,7 +11,6 @@ class AppState extends Equatable implements IsJsonSerializable<AppState> { this.introViewed = false, this.warningViewed = false, this.expertMode = false, - this.locale = 'en', }); factory AppState.fromJson(Map<String, dynamic> json) => @@ -20,7 +19,6 @@ class AppState extends Equatable implements IsJsonSerializable<AppState> { final bool introViewed; final bool warningViewed; final bool expertMode; - final String locale; AppState copyWith({ bool? introViewed, @@ -31,8 +29,7 @@ class AppState extends Equatable implements IsJsonSerializable<AppState> { return AppState( introViewed: introViewed ?? this.introViewed, warningViewed: warningViewed ?? this.warningViewed, - expertMode: expertMode ?? this.expertMode, - locale: locale ?? this.locale); + expertMode: expertMode ?? this.expertMode); } @override @@ -42,6 +39,5 @@ class AppState extends Equatable implements IsJsonSerializable<AppState> { Map<String, dynamic> toJson() => _$AppStateToJson(this); @override - List<Object?> get props => - <Object>[introViewed, warningViewed, expertMode, locale]; + List<Object?> get props => <Object>[introViewed, warningViewed, expertMode]; } diff --git a/lib/data/models/app_state.g.dart b/lib/data/models/app_state.g.dart index 8e1120d54c2e362818cc95429e7e4ba91c038ab0..dca06c2fc3f6db2daa603fd305b2ad99e6141664 100644 --- a/lib/data/models/app_state.g.dart +++ b/lib/data/models/app_state.g.dart @@ -10,12 +10,10 @@ AppState _$AppStateFromJson(Map<String, dynamic> json) => AppState( introViewed: json['introViewed'] as bool? ?? false, warningViewed: json['warningViewed'] as bool? ?? false, expertMode: json['expertMode'] as bool? ?? false, - locale: json['locale'] as String? ?? 'en', ); Map<String, dynamic> _$AppStateToJson(AppState instance) => <String, dynamic>{ 'introViewed': instance.introViewed, 'warningViewed': instance.warningViewed, 'expertMode': instance.expertMode, - 'locale': instance.locale, }; diff --git a/lib/data/models/contact_cubit.dart b/lib/data/models/contact_cubit.dart index e162f7d5a4f3c4679cf4136b9eb900104b906782..f3e76655e96eead8831fe5625a769d13ce7772b2 100644 --- a/lib/data/models/contact_cubit.dart +++ b/lib/data/models/contact_cubit.dart @@ -6,8 +6,18 @@ import 'contact_state.dart'; class ContactsCubit extends HydratedCubit<ContactsState> { ContactsCubit() : super(const ContactsState()); + Contact? _find(Contact contact) { + try { + return state.contacts + .firstWhere((Contact c) => c.pubkey == contact.pubkey); + } catch (e) { + return null; + } + } + void addContact(Contact contact) { - if (!state.contacts.contains(contact)) { + final Contact? nFound = _find(contact); + if (nFound == null) { emit(state.copyWith(contacts: <Contact>[...state.contacts, contact])); } } diff --git a/lib/data/models/payment_cubit.dart b/lib/data/models/payment_cubit.dart index 184812277b65fa0bb8dcd1747f9ca5b05d3b817a..6538413d2b940eee8b332ae47b4c6aa894fbcc90 100644 --- a/lib/data/models/payment_cubit.dart +++ b/lib/data/models/payment_cubit.dart @@ -29,7 +29,7 @@ class PaymentCubit extends HydratedCubit<PaymentState> { void selectKeyAmount(String publicKey, double amount) { final PaymentState newState = - PaymentState(publicKey: publicKey, amount: amount); + PaymentState(publicKey: publicKey, amount: amount); emit(newState); } @@ -63,16 +63,24 @@ class PaymentCubit extends HydratedCubit<PaymentState> { } void selectAmount(double? amount) { - // As ignores null amounts + // As copyWith ignores null amounts final PaymentState newState = PaymentState( publicKey: state.publicKey, nick: state.nick, + comment: state.comment, avatar: state.avatar, amount: amount); emit(newState); } void setComment(String comment) { - emit(state.copyWith(comment: comment)); + // As copyWith ignores null amounts + final PaymentState newState = PaymentState( + publicKey: state.publicKey, + amount: state.amount, + comment: comment, + avatar: state.avatar, + nick: state.nick); + emit(newState); } } diff --git a/lib/data/models/transaction.dart b/lib/data/models/transaction.dart index 9fec0435f076455b287bc17bc4b4bb6d0647facc..57eaccea013139d5805ee417586bdf611b3d836d 100644 --- a/lib/data/models/transaction.dart +++ b/lib/data/models/transaction.dart @@ -5,6 +5,7 @@ import 'package:equatable/equatable.dart'; import 'package:json_annotation/json_annotation.dart'; import 'model_utils.dart'; +import 'transaction_type.dart'; part 'transaction.g.dart'; @@ -12,6 +13,7 @@ part 'transaction.g.dart'; @CopyWith() class Transaction extends Equatable { const Transaction({ + required this.type, required this.from, required this.to, required this.amount, @@ -25,22 +27,25 @@ class Transaction extends Equatable { factory Transaction.fromJson(Map<String, dynamic> json) => _$TransactionFromJson(json); + + final TransactionType type; final String from; final String to; + final double amount; + final String comment; + final DateTime time; @JsonKey(fromJson: uIntFromList, toJson: uIntToList) final Uint8List? toAvatar; final String? toNick; - final double amount; @JsonKey(fromJson: uIntFromList, toJson: uIntToList) final Uint8List? fromAvatar; final String? fromNick; - final String comment; - final DateTime time; Map<String, dynamic> toJson() => _$TransactionToJson(this); @override List<Object?> get props => <dynamic>[ + type, from, to, amount, diff --git a/lib/data/models/transaction.g.dart b/lib/data/models/transaction.g.dart index 62df6223e9f799e27394b8285adccc5afb16aca5..d7217394fe006c17a686ea513500d58529ce599d 100644 --- a/lib/data/models/transaction.g.dart +++ b/lib/data/models/transaction.g.dart @@ -7,6 +7,8 @@ part of 'transaction.dart'; // ************************************************************************** abstract class _$TransactionCWProxy { + Transaction type(TransactionType type); + Transaction from(String from); Transaction to(String to); @@ -32,6 +34,7 @@ abstract class _$TransactionCWProxy { /// Transaction(...).copyWith(id: 12, name: "My name") /// ```` Transaction call({ + TransactionType? type, String? from, String? to, double? amount, @@ -50,6 +53,9 @@ class _$TransactionCWProxyImpl implements _$TransactionCWProxy { final Transaction _value; + @override + Transaction type(TransactionType type) => this(type: type); + @override Transaction from(String from) => this(from: from); @@ -86,6 +92,7 @@ class _$TransactionCWProxyImpl implements _$TransactionCWProxy { /// Transaction(...).copyWith(id: 12, name: "My name") /// ```` Transaction call({ + Object? type = const $CopyWithPlaceholder(), Object? from = const $CopyWithPlaceholder(), Object? to = const $CopyWithPlaceholder(), Object? amount = const $CopyWithPlaceholder(), @@ -97,6 +104,10 @@ class _$TransactionCWProxyImpl implements _$TransactionCWProxy { Object? fromNick = const $CopyWithPlaceholder(), }) { return Transaction( + type: type == const $CopyWithPlaceholder() || type == null + ? _value.type + // ignore: cast_nullable_to_non_nullable + : type as TransactionType, from: from == const $CopyWithPlaceholder() || from == null ? _value.from // ignore: cast_nullable_to_non_nullable @@ -225,6 +236,7 @@ extension $TransactionsAndBalanceStateCopyWith on TransactionsAndBalanceState { // ************************************************************************** Transaction _$TransactionFromJson(Map<String, dynamic> json) => Transaction( + type: $enumDecode(_$TransactionTypeEnumMap, json['type']), from: json['from'] as String, to: json['to'] as String, amount: (json['amount'] as num).toDouble(), @@ -238,17 +250,27 @@ Transaction _$TransactionFromJson(Map<String, dynamic> json) => Transaction( Map<String, dynamic> _$TransactionToJson(Transaction instance) => <String, dynamic>{ + 'type': _$TransactionTypeEnumMap[instance.type], 'from': instance.from, 'to': instance.to, + 'amount': instance.amount, + 'comment': instance.comment, + 'time': instance.time.toIso8601String(), 'toAvatar': uIntToList(instance.toAvatar), 'toNick': instance.toNick, - 'amount': instance.amount, 'fromAvatar': uIntToList(instance.fromAvatar), 'fromNick': instance.fromNick, - 'comment': instance.comment, - 'time': instance.time.toIso8601String(), }; +const Map<TransactionType, String> _$TransactionTypeEnumMap = + <TransactionType, String>{ + TransactionType.sending: 'sending', + TransactionType.received: 'received', + TransactionType.receiving: 'receiving', + TransactionType.sent: 'sent', + TransactionType.pending: 'pending', +}; + TransactionsAndBalanceState _$TransactionsAndBalanceStateFromJson( Map<String, dynamic> json) => TransactionsAndBalanceState( diff --git a/lib/data/models/transaction_cubit.dart b/lib/data/models/transaction_cubit.dart index 6e6282451c463ba7bc2b4ec5be5895e3f40d452d..0ec452f8a3d6e7df90a658a7264446d27c32edec 100644 --- a/lib/data/models/transaction_cubit.dart +++ b/lib/data/models/transaction_cubit.dart @@ -4,7 +4,6 @@ import '../../../g1/api.dart'; import '../../../g1/transaction_parser.dart'; import '../../shared_prefs.dart'; import '../../ui/logger.dart'; -import '../../ui/ui_helpers.dart'; import 'node_list_cubit.dart'; import 'transaction.dart'; @@ -31,11 +30,13 @@ class TransactionsCubit extends HydratedCubit<TransactionsAndBalanceState> { Future<void> fetchTransactions(NodeListCubit cubit) async { logger('Loading transactions'); - logger('GVA balance: ${gvaBalance()}'); - final String txData = txDebugging - ? await getTxHistory('6DrGg8cftpkgffv4Y4Lse9HSjgc8coEQor3yvMPHAnVH') - : await getTxHistory(SharedPreferencesHelper().getPubKey()); - final TransactionsAndBalanceState state = transactionParser(txData); + final Map<String, dynamic>? txData = + await gva().history(SharedPreferencesHelper().getPubKey()); + if (txData == null) { + logger('Failed to get transactions'); + return; + } + final TransactionsAndBalanceState state = transactionsGvaParser(txData); emit(state.copyWith( transactions: state.transactions, balance: state.balance, diff --git a/lib/data/models/transaction_type.dart b/lib/data/models/transaction_type.dart new file mode 100644 index 0000000000000000000000000000000000000000..a94ad342de0490898b596e596097cb33e6e1a327 --- /dev/null +++ b/lib/data/models/transaction_type.dart @@ -0,0 +1,7 @@ +enum TransactionType { sending, received, receiving, sent, pending } + +bool isProcessing(TransactionType type) { + return type == TransactionType.sending || + type == TransactionType.receiving || + type == TransactionType.pending; +} diff --git a/lib/g1/api.dart b/lib/g1/api.dart index 8773f85a040bc55615b2d290773f5d27af718404..e7caa27550fb1e929dcba81af9a2bc93347a0a4b 100644 --- a/lib/g1/api.dart +++ b/lib/g1/api.dart @@ -58,6 +58,7 @@ Not found sample: } */ Future<List<Contact>> searchWot(String searchTerm) async { + // USE gva.getUsername final Response response = await requestDuniterWithRetry( '/wot/lookup/$searchTerm', retryWith404: false); @@ -416,6 +417,7 @@ Future<String> pay( // logger('Current balance ${await gva.balance(wallet.pubkey)}'); logger( 'Trying $node to send $amount to $to with comment ${comment ?? ''}'); + final String response = await gva.pay( recipient: to, amount: amount, @@ -435,9 +437,9 @@ Future<String> pay( String getGvaNode() { final List<Node> nodes = nodesWorkingList(NodeType.gva); if (nodes.isNotEmpty) { -// reorder list to use others + // reorder list to use others nodes.shuffle(); -// Reference of working proxy 'https://g1demo.comunes.net/proxy/g1v1.p2p.legal/gva/'; + // Reference of working proxy 'https://g1demo.comunes.net/proxy/g1v1.p2p.legal/gva/'; final String node = 'https://g1demo.comunes.net/proxy/${nodes.first.url.replaceFirst('https://', '').replaceFirst('http://', '')}/'; return node; @@ -453,8 +455,8 @@ Future<double> gvaBalance() async { try { final Gva gva = Gva(node: node); logger('Trying $node to get balance'); - final CesiumWallet wallet = await SharedPreferencesHelper().getWallet(); - final double balance = await gva.balance(wallet.pubkey); + final String pubKey = SharedPreferencesHelper().getPubKey(); + final double balance = await gva.balance(pubKey); logger('Current balance $balance'); return balance; } catch (e, stacktrace) { @@ -466,3 +468,20 @@ Future<double> gvaBalance() async { } throw Exception('Sorry: I cannot find a working node to get your balance'); } + +Gva gva() { + final String output = getGvaNode(); + if (Uri.tryParse(output) != null) { + final String node = output; + try { + final Gva gva = Gva(node: node); + return gva; + } catch (e, stacktrace) { + // move logger outside main + logger(e); + logger(stacktrace); + throw Exception('Oops! failed to obtain balance'); + } + } + throw Exception('Sorry: I cannot find a working node to get your balance'); +} diff --git a/lib/g1/transaction_parser.dart b/lib/g1/transaction_parser.dart index cfcbdc43314e8ea57fb5b27d73245cd031bf3290..831b624aac733a75e42f8ac7f2bc521f827899d0 100644 --- a/lib/g1/transaction_parser.dart +++ b/lib/g1/transaction_parser.dart @@ -1,10 +1,11 @@ import 'dart:convert'; import '../data/models/transaction.dart'; +import '../data/models/transaction_type.dart'; -TransactionsAndBalanceState transactionParser(String txData) { - final RegExp exp = RegExp(r'\((.*?)\)'); +final RegExp exp = RegExp(r'\((.*?)\)'); +TransactionsAndBalanceState transactionParser(String txData) { final Map<String, dynamic> parsedTxData = json.decode(txData) as Map<String, dynamic>; final String pubKey = parsedTxData['pubkey'] as String; @@ -20,12 +21,15 @@ TransactionsAndBalanceState transactionParser(String txData) { final double amount = double.parse((outputs[0] as String).split(':')[0]); final String? address1 = exp.firstMatch(outputs[0] as String)!.group(1); final String? address2 = exp.firstMatch(outputs[1] as String)!.group(1); + TransactionType type = TransactionType.received; if (pubKey == address1) { // Receive + type = TransactionType.received; balance = balance += amount; } if (pubKey == address2) { // Send + type = TransactionType.sent; balance = balance -= amount; } final DateTime txDate = @@ -37,6 +41,7 @@ TransactionsAndBalanceState transactionParser(String txData) { tx.insert( 0, Transaction( + type: type, from: address2!, to: address1!, amount: pubKey == address2 ? -amount : amount, @@ -46,3 +51,84 @@ TransactionsAndBalanceState transactionParser(String txData) { return TransactionsAndBalanceState( transactions: tx, balance: balance, lastChecked: DateTime.now()); } + +TransactionsAndBalanceState transactionsGvaParser(Map<String, dynamic> txData) { + // Balance + final dynamic rawBalance = txData['balance']; + final double? amount; + if (rawBalance != null) { + final Map<String, dynamic> balance = rawBalance as Map<String, dynamic>; + amount = (balance['amount'] as int) / 1.0; + } else { + amount = 0; + } + // Transactions + final Map<String, dynamic> txsHistoryBc = + txData['txsHistoryBc'] as Map<String, dynamic>; + + final Map<String, dynamic> txsHistoryMp = + txData['txsHistoryMp'] as Map<String, dynamic>; + final Map<String, dynamic> both = + txsHistoryBc['both'] as Map<String, dynamic>; + final List<dynamic> edges = both['edges'] as List<dynamic>; + final List<Transaction> txs = <Transaction>[]; + for (final dynamic edgeRaw in edges) { + final Transaction tx = + _transactionGvaParser(edgeRaw as Map<String, dynamic>); + txs.add(tx); + } + final List<dynamic> receiving = txsHistoryMp['receiving'] as List<dynamic>; + final List<dynamic> sending = txsHistoryMp['sending'] as List<dynamic>; + for (final dynamic receiveRaw in receiving) { + final Transaction tx = _txGvaParse( + receiveRaw as Map<String, dynamic>, TransactionType.receiving); + txs.add(tx); + } + for (final dynamic sendingRaw in sending) { + final Transaction tx = _txGvaParse( + sendingRaw as Map<String, dynamic>, TransactionType.sending); + txs.add(tx); + } + return TransactionsAndBalanceState( + transactions: txs, balance: amount, lastChecked: DateTime.now()); +} + +Transaction _transactionGvaParser(Map<String, dynamic> edge) { + final Map<String, dynamic> parsedTxData = edge; + // Direction + final String direction = parsedTxData['direction'] as String; + final TransactionType type = + direction == 'SENT' ? TransactionType.sent : TransactionType.received; + + final Map<String, dynamic> tx = parsedTxData['node'] as Map<String, dynamic>; + return _txGvaParse(tx, type); +} + +Transaction _txGvaParse(Map<String, dynamic> tx, TransactionType type) { + final List<dynamic> issuers = tx['issuers'] as List<dynamic>; + final List<dynamic> outputs = tx['outputs'] as List<dynamic>; + final String from = issuers[0] as String; + final String? to = exp.firstMatch(outputs[0] as String)!.group(1); + + // Time + final dynamic writtenTime = tx['writtenTime']; + final DateTime time = writtenTime == null + ? DateTime.now() + : DateTime.fromMillisecondsSinceEpoch((writtenTime as int) * 1000); + // Amount + double amount = double.parse((outputs.first as String).split(':')[0]); + if (type == TransactionType.sent || type == TransactionType.sending) { + amount = -amount; + } + // Comment + final String comment = tx['comment'] as String; + + return Transaction( + type: type, + from: from, + to: to!, + amount: amount, + comment: comment, + time: time, + ); +} diff --git a/lib/main.dart b/lib/main.dart index d24385f3156726a7a00e3e455b50f704265e5600..9b7ec5b32b04fd4fc10629af83440d1f2a3fb8b2 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -32,6 +32,7 @@ import 'g1/api.dart'; import 'shared_prefs.dart'; import 'ui/logger.dart'; import 'ui/screens/skeleton_screen.dart'; +import 'ui/ui_helpers.dart'; void main() async { /// Initialize packages @@ -100,11 +101,18 @@ void main() async { ), ); + final String version = getAppVersion(); if (kReleaseMode) { // Only use sentry in production await SentryFlutter.init(( SentryFlutterOptions options, ) { + options.release = version; + options.environment = 'production'; + options.beforeSend = (SentryEvent event, {dynamic hint}) { + return event; + }; + options.dsn = "${dotenv.env['SENTRY_DSN']}"; // Set tracesSampleRate to 1.0 to capture 100% of transactions for performance monitoring. // We recommend adjusting this value in production. @@ -126,8 +134,8 @@ class _AppIntro extends State<AppIntro> { final GlobalKey<IntroductionScreenState> introKey = GlobalKey<IntroductionScreenState>(); - void _onIntroEnd(BuildContext context) { - context.read<AppCubit>().introViewed(); + void _onIntroEnd(BuildContext context, AppCubit cubit) { + cubit.introViewed(); Navigator.of(context).pushReplacement( MaterialPageRoute<void>( builder: (BuildContext _) => const SkeletonScreen()), @@ -137,36 +145,35 @@ class _AppIntro extends State<AppIntro> { @override Widget build(BuildContext context) { return BlocBuilder<AppCubit, AppState>( - builder: (BuildContext buildContext, AppState state) => - IntroductionScreen( - key: introKey, - pages: <PageViewModel>[ - for (int i = 1; i <= 5; i++) - createPageViewModel( - 'intro_${i}_title', - 'intro_${i}_description', - 'assets/img/undraw_intro_$i.png', - context), - ], - onDone: () => _onIntroEnd(buildContext), - showSkipButton: true, - skipOrBackFlex: 0, - onSkip: () => _onIntroEnd(buildContext), - nextFlex: 0, - skip: Text(tr('skip')), - next: const Icon(Icons.arrow_forward), - done: Text(tr('start'), - style: const TextStyle(fontWeight: FontWeight.w600)), - dotsDecorator: const DotsDecorator( - size: Size(10.0, 10.0), - color: Color(0xFFBDBDBD), - activeColor: Colors.blueAccent, - activeSize: Size(22.0, 10.0), - activeShape: RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(25.0)), - ), - ), - )); + builder: (BuildContext buildContext, AppState state) { + final AppCubit cubit = context.read<AppCubit>(); + return IntroductionScreen( + key: introKey, + pages: <PageViewModel>[ + for (int i = 1; i <= 5; i++) + createPageViewModel('intro_${i}_title', 'intro_${i}_description', + 'assets/img/undraw_intro_$i.png', context), + ], + onDone: () => _onIntroEnd(buildContext, cubit), + showSkipButton: true, + skipOrBackFlex: 0, + onSkip: () => _onIntroEnd(buildContext, cubit), + nextFlex: 0, + skip: Text(tr('skip')), + next: const Icon(Icons.arrow_forward), + done: Text(tr('start'), + style: const TextStyle(fontWeight: FontWeight.w600)), + dotsDecorator: const DotsDecorator( + size: Size(10.0, 10.0), + color: Color(0xFFBDBDBD), + activeColor: Colors.blueAccent, + activeSize: Size(22.0, 10.0), + activeShape: RoundedRectangleBorder( + borderRadius: BorderRadius.all(Radius.circular(25.0)), + ), + ), + ); + }); } } diff --git a/lib/ui/screens/first_screen.dart b/lib/ui/screens/first_screen.dart index 74ba6f2dff15db5d49cd028eed340e6b713e7bad..01fac17d0bcad5b6cc677c36cc7ffe9a93ef695c 100644 --- a/lib/ui/screens/first_screen.dart +++ b/lib/ui/screens/first_screen.dart @@ -21,66 +21,63 @@ class FirstScreen extends StatefulWidget { class _FirstScreenState extends State<FirstScreen> { @override - Widget build(BuildContext context) => - BlocBuilder<AppCubit, AppState>( + Widget build(BuildContext context) => BlocBuilder<AppCubit, AppState>( builder: (BuildContext context, AppState state) { - WidgetsBinding.instance.addPostFrameCallback((_) async { - if (!state.warningViewed) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(tr('demo_desc')), - action: SnackBarAction( - label: 'OK', - onPressed: () { - ScaffoldMessenger.of(context).hideCurrentSnackBar(); - context.read<AppCubit>().warningViewed(); - }, + WidgetsBinding.instance.addPostFrameCallback((_) async { + if (!state.warningViewed) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(tr('demo_desc')), + action: SnackBarAction( + label: 'OK', + onPressed: () { + ScaffoldMessenger.of(context).hideCurrentSnackBar(); + context.read<AppCubit>().warningViewed(); + }, + ), + ), + ); + } + }); + return BlocBuilder<PaymentCubit, PaymentState>( + builder: (BuildContext context, PaymentState state) => + Stack(children: <Widget>[ + Scaffold( + appBar: AppBar(title: Text(tr('credit_card_title'))), + drawer: const CardDrawer(), + body: ListView( + padding: const EdgeInsets.symmetric(horizontal: 16), + //physics: const AlwaysScrollableScrollPhysics(), + //controller: _controller, + // shrinkWrap: true, + children: <Widget>[ + CreditCard(), + const SizedBox(height: 8), + Padding( + padding: + const EdgeInsets.symmetric(horizontal: 24), + child: Divider( + color: Theme.of(context) + .colorScheme + .onBackground + .withOpacity(.4), + ), + ), + const SizedBox(height: 10), + const PayContactSearchButton(), + const SizedBox(height: 10), + const PayForm(), + const BottomWidget() + ])), + Visibility( + visible: state.status == PaymentStatus.sending, + child: Container( + color: Colors.black.withOpacity(0.5), + child: const Center( + child: CircularProgressIndicator(), + ), ), - ), - ); - } - }); - return BlocBuilder<PaymentCubit, PaymentState>( - builder: (BuildContext context, PaymentState state) => - Stack(children: <Widget>[ - Scaffold( - appBar: AppBar(title: Text(tr('credit_card_title'))), - drawer: const CardDrawer(), - body: ListView( - padding: const EdgeInsets.symmetric( - horizontal: 16), - //physics: const AlwaysScrollableScrollPhysics(), - //controller: _controller, - // shrinkWrap: true, - children: <Widget>[ - CreditCard(), - const SizedBox(height: 8), - Padding( - padding: const EdgeInsets.symmetric( - horizontal: 24), - child: Divider( - color: Theme - .of(context) - .colorScheme - .onBackground - .withOpacity(.4), - ), - ), - const SizedBox(height: 10), - const PayContactSearchButton(), - const SizedBox(height: 10), - const PayForm(), - const BottomWidget() - ])), - Visibility( - visible: state.status == PaymentStatus.sending, - child: Container( - color: Colors.black.withOpacity(0.5), - child: const Center( - child: CircularProgressIndicator(), - ), - ), - ) - ])); - }); + ) + ])); + }); } diff --git a/lib/ui/screens/g1_textfield.dart b/lib/ui/screens/g1_textfield.dart index 6030412c20ebc48b4f039324b2c66eb56572ed7b..4fa30a23665a41300fd0e73f17ffa0e7a4ee90c9 100644 --- a/lib/ui/screens/g1_textfield.dart +++ b/lib/ui/screens/g1_textfield.dart @@ -5,6 +5,7 @@ import 'package:flutter_svg/flutter_svg.dart'; import '../../data/models/payment_cubit.dart'; import '../../data/models/payment_state.dart'; +import '../ui_helpers.dart'; class G1PayAmountField extends StatefulWidget { const G1PayAmountField({super.key}); @@ -20,9 +21,15 @@ class _G1PayAmountFieldState extends State<G1PayAmountField> { @override Widget build(BuildContext context) => BlocBuilder<PaymentCubit, PaymentState>( builder: (BuildContext context, PaymentState state) { - if (state.amount != null && - _controller.text != state.amount.toString()) { - _controller.text = '${state.amount}'; + final NumberFormat format = + NumberFormat.decimalPattern(context.locale.toString()); + if (state.amount != null) { + final String amountFormatted = localizeNumber(context, state.amount!); + if (_controller.text != amountFormatted) { + _controller.text = amountFormatted; + _controller.selection = TextSelection.fromPosition( + TextPosition(offset: _controller.text.length)); + } } return Form( key: _formKey, @@ -38,13 +45,10 @@ class _G1PayAmountFieldState extends State<G1PayAmountField> { onEditingComplete: () {}, onChanged: (String? value) { final bool? validate = _formKey.currentState?.validate(); - if (validate != null && - validate && - value != null && - double.tryParse(value) != null) { + if (validate != null && validate) { context .read<PaymentCubit>() - .selectAmount(value.isEmpty ? null : double.parse(value)); + .selectAmount(format.parse(value!).toDouble()); } }, decoration: InputDecoration( @@ -66,16 +70,19 @@ class _G1PayAmountFieldState extends State<G1PayAmountField> { }); String? validateDecimal(String? value) { + final NumberFormat format = + NumberFormat.decimalPattern(context.locale.toString()); if (value == null || value.isEmpty) { - return tr('g1_amount_hint'); + return null; } - final num? n = num.tryParse(value); - if (n == null) { + try { + final num n = format.parse(value); + if (n <= 0) { + return tr('enter_a_positive_number'); + } + } catch (e) { return tr('enter_a_valid_number'); } - if (n <= 0) { - return tr('enter_a_positive_number'); - } return null; } } diff --git a/lib/ui/screens/pay_form.dart b/lib/ui/screens/pay_form.dart index af51e2f6afc613cda65c8cb3cd22f781592a6d71..42b00a81fd0bbb75004a09cba352c760dc43cdf2 100644 --- a/lib/ui/screens/pay_form.dart +++ b/lib/ui/screens/pay_form.dart @@ -25,102 +25,108 @@ class _PayFormState extends State<PayForm> { Widget build(BuildContext context) { return BlocBuilder<PaymentCubit, PaymentState>( builder: (BuildContext context, PaymentState state) { - if (state.comment != null && _commentController.text != state.comment) { - _commentController.text = state.comment; - } - return Form( - key: _formKey, - child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: <Widget>[ - const G1PayAmountField(), - const SizedBox(height: 10.0), - TextField( - controller: _commentController, - inputFormatters: <TextInputFormatter>[ - Iso88591TextInputFormatter() - ], - onChanged: (String? value) { - if (value != null) { - context.read<PaymentCubit>().setComment(value); - } - }, - decoration: InputDecoration( - labelText: tr('g1_form_pay_desc'), - hintText: tr('g1_form_pay_hint'), - border: const OutlineInputBorder(), - ), - maxLines: null, - ), - const SizedBox(height: 10.0), - ElevatedButton( - onPressed: !state.canBeSent() || + if (state.comment != null && + _commentController.text != state.comment) { + _commentController.text = state.comment; + } + return Form( + key: _formKey, + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: <Widget>[ + const G1PayAmountField(), + const SizedBox(height: 10.0), + TextField( + controller: _commentController, + inputFormatters: <TextInputFormatter>[ + Iso88591TextInputFormatter() + ], + onChanged: (String? value) { + if (value != null) { + context.read<PaymentCubit>().setComment(value); + } + }, + decoration: InputDecoration( + labelText: tr('g1_form_pay_desc'), + hintText: tr('g1_form_pay_hint'), + border: const OutlineInputBorder(), + ), + maxLines: null, + ), + const SizedBox(height: 10.0), + ElevatedButton( + onPressed: !state.canBeSent() || state.amount == null || !_weHaveBalance(context, state.amount!) - ? null - : () async { - // We disable the number, anyway - context.read<PaymentCubit>().sending(); - final bool? confirmed = await _confirmSend( - context, - state.amount!.toString(), - humanizePubKey(state.publicKey)); + ? null + : () async { + // We disable the number, anyway + context.read<PaymentCubit>().sending(); + final bool? confirmed = await _confirmSend( + context, + state.amount!.toString(), + humanizePubKey(state.publicKey)); + if (!mounted) { + return; + } + if (confirmed == null || !confirmed) { + context.read<PaymentCubit>().sentFailed(); + } else { + final String response = await pay( + to: state.publicKey, + comment: state.comment, + amount: state.amount!); if (!mounted) { + // Cannot show a tooltip if the widget is not now visible return; } - if (confirmed == null || !confirmed) { - context.read<PaymentCubit>().sentFailed(); + if (response == 'success') { + context.read<PaymentCubit>().sent(); + showTooltip(context, '', tr('payment_successful')); } else { - final String response = await pay( - to: state.publicKey, - comment: state.comment, - amount: state.amount!); - if (!mounted) { - // Cannot show a tooltip if the widget is not now visible - return; - } - if (response == 'success') { - context.read<PaymentCubit>().sent(); - showTooltip(context, '', tr('payment_successful')); - } else { - context.read<PaymentCubit>().sentFailed(); - showTooltip(context, '', tr(response)); - } + context.read<PaymentCubit>().sentFailed(); + showTooltip(context, '', tr(response)); } - }, - style: ElevatedButton.styleFrom( - padding: + } + }, + style: ElevatedButton.styleFrom( + padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 25), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(30.0), - ), - foregroundColor: Colors.white, - backgroundColor: Theme.of(context).colorScheme.primary, - textStyle: const TextStyle( - fontWeight: FontWeight.bold, - fontSize: 16, - ), - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: <Widget>[ - const Icon(Icons.send), - const SizedBox(width: 10), - Text(tr('g1_form_pay_send')), - ], - ), - ) - ], - ), - ); - }); + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(30.0), + ), + foregroundColor: Colors.white, + backgroundColor: Theme + .of(context) + .colorScheme + .primary, + textStyle: const TextStyle( + fontWeight: FontWeight.bold, + fontSize: 16, + ), + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: <Widget>[ + const Icon(Icons.send), + const SizedBox(width: 10), + Text(tr('g1_form_pay_send')), + ], + ), + ) + ], + ), + ); + }); } bool _weHaveBalance(BuildContext context, double amount) => - context.read<TransactionsCubit>().balance >= amount * 100; + context + .read<TransactionsCubit>() + .balance >= amount * 100; - Future<bool?> _confirmSend( - BuildContext context, String amount, String to) async { + Future<bool?> _confirmSend(BuildContext context, String amount, + String to) async { return showDialog<bool>( context: context, builder: (BuildContext context) { @@ -145,12 +151,12 @@ class _PayFormState extends State<PayForm> { } class Iso88591TextInputFormatter extends TextInputFormatter { - static final RegExp _iso88591RegExp = RegExp('^[\u0000-\u00FF]*\$'); + // static final RegExp _iso88591RegExp = RegExp('^[\u0000-\u00FF]*\$'); static final RegExp _englishRegExp = RegExp('^[\u0000-\u007F]*\$'); @override - TextEditingValue formatEditUpdate( - TextEditingValue oldValue, TextEditingValue newValue) { + TextEditingValue formatEditUpdate(TextEditingValue oldValue, + TextEditingValue newValue) { if (_englishRegExp.hasMatch(newValue.text)) { return newValue; } else { diff --git a/lib/ui/ui_helpers.dart b/lib/ui/ui_helpers.dart index b3f5a916a30b09e230dc68e1b26713f8daa3d8f4..3ae8976fdb128d4c81a8c308c064279189883895 100644 --- a/lib/ui/ui_helpers.dart +++ b/lib/ui/ui_helpers.dart @@ -5,6 +5,7 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:timeago/timeago.dart' as timeago; +import '../data/models/transaction_type.dart'; import '../shared_prefs.dart'; import 'widgets/first_screen/circular_icon.dart'; @@ -92,6 +93,27 @@ bool bigScreen(BuildContext context) => bool smallScreen(BuildContext context) => MediaQuery.of(context).size.width <= smallScreenWidth; -String formatAmount(double amount) => amount.toStringAsFixed(2); +String formatAmount(BuildContext context, double amount) { + final NumberFormat currencyFormatter = NumberFormat.currency( + symbol: 'Äž1', + locale: Localizations.localeOf(context).toString(), + decimalDigits: 2, + ); + return currencyFormatter.format(amount); +} + +String formatKAmount(BuildContext context, double amount) => + formatAmount(context, amount / 100); + +String getAppVersion() => '0.0.8'; -String formatKAmount(double amount) => formatAmount(amount / 100); +String localizeNumber(BuildContext context, double amount) => + NumberFormat.decimalPattern(context.locale.toString()).format(amount); + +bool isOutgoing(TransactionType type) { + return type == TransactionType.sending || type == TransactionType.sent; +} + +bool isIncoming(TransactionType type) { + return type == TransactionType.receiving || type == TransactionType.received; +} diff --git a/lib/ui/widgets/fourth_screen/transaction_item.dart b/lib/ui/widgets/fourth_screen/transaction_item.dart new file mode 100644 index 0000000000000000000000000000000000000000..81b6dcab10f92842aef2e90bfee6d05e8c0f1205 --- /dev/null +++ b/lib/ui/widgets/fourth_screen/transaction_item.dart @@ -0,0 +1,180 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:flutter_slidable/flutter_slidable.dart'; + +import '../../../data/models/contact_cubit.dart'; +import '../../../data/models/transaction.dart'; +import '../../../data/models/transaction_cubit.dart'; +import '../../../data/models/transaction_type.dart'; +import '../../../shared_prefs.dart'; +import '../../ui_helpers.dart'; + +class TransactionListItem extends StatelessWidget { + const TransactionListItem({ + super.key, + required this.transaction, + required this.avatar, + required this.index, + }); + + final Transaction transaction; + final Widget avatar; + final int index; + + @override + Widget build(BuildContext context) => + BlocBuilder<TransactionsCubit, TransactionsAndBalanceState>(builder: + (BuildContext context, + TransactionsAndBalanceState transBalanceState) { + IconData? icon; + Color? iconColor; + String statusText; + final String amountS = + '${transaction.amount < 0 ? "" : "+"}${formatKAmount(context, transaction.amount)}'; + statusText = tr('transaction_${transaction.type.name}'); + switch (transaction.type) { + case TransactionType.pending: + icon = Icons.timelapse; + iconColor = Colors.grey; + break; + case TransactionType.sending: + icon = Icons.flight_takeoff; + iconColor = Colors.grey; + break; + case TransactionType.receiving: + icon = Icons.flight_land; + iconColor = Colors.grey; + break; + case TransactionType.sent: + break; + case TransactionType.received: + break; + } + final String myPubKey = SharedPreferencesHelper().getPubKey(); + final ContactsCubit contactsCubit = context.read<ContactsCubit>(); + return Slidable( + // Specify a key if the Slidable is dismissible. + key: const ValueKey<int>(0), + // The end action pane is the one at the right or the bottom side. + endActionPane: ActionPane( + motion: const ScrollMotion(), + children: <SlidableAction>[ + SlidableAction( + onPressed: (BuildContext c) { + /* _addContact(transactions, index, + myPubKey, contactsCubit); + ScaffoldMessenger.of(context) + .showSnackBar( + SnackBar( + content: + Text(tr('contact_added')), + ), + ); */ + }, + backgroundColor: Theme.of(context).primaryColor, + foregroundColor: Colors.white, + icon: Icons.contacts, + label: tr('add_contact'), + ), + ], + ), + child: ListTile( + leading: (icon != null) + ? Icon( + icon, + color: iconColor, + ) + : null, + tileColor: tileColor(index, context), + title: Row( + children: <Widget>[ + // if (avatar != null) avatar, + const SizedBox(width: 8.0), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: <Widget>[ + Text( + statusText, + style: const TextStyle( + fontSize: 12.0, + color: Colors.grey, + ), + ), + const SizedBox(height: 4.0), + Text.rich( + TextSpan( + children: <InlineSpan>[ + /* TextSpan( + text: isIncoming(transaction.type) + ? 'Recibido de ' + : 'Pago a ', + style: const TextStyle( + fontSize: 14.0, + // fontWeight: FontWeight.bold, + ), + ), */ + /* WidgetSpan( + child: avatar != null + ? const SizedBox(width: 8.0) + : const SizedBox.shrink(), + ), */ + WidgetSpan( + child: Text( + tr('transaction_from_to', + namedArgs: <String, String>{ + 'from': humanizeFromToPubKey( + myPubKey, transaction.from), + 'to': humanizeFromToPubKey( + myPubKey, transaction.to) + }), + style: const TextStyle( + fontSize: 14.0, + // fontWeight: FontWeight.bold, + ), + ), + ), + ], + ), + ), + ], + ), + ), + ], + ), + subtitle: Padding( + padding: const EdgeInsets.fromLTRB(8, 0, 0, 10), + child: Text(transaction.comment, + style: const TextStyle( + fontStyle: FontStyle.italic, + color: Colors.grey, + )), + ), + trailing: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.end, + children: <Widget>[ + Text( + amountS, + style: TextStyle( + // fontWeight: FontWeight.bold, + color: transaction.type == TransactionType.received || + transaction.type == TransactionType.receiving + ? Colors.blue + : Colors.red, + ), + ), + const SizedBox(height: 4.0), + Text( + humanizeTime(transaction.time, context.locale.toString())!, + style: const TextStyle( + fontSize: 12.0, + color: Colors.grey, + ), + ), + ], + ), + )); + }); +} diff --git a/lib/ui/widgets/fourth_screen/transaction_page.dart b/lib/ui/widgets/fourth_screen/transaction_page.dart index 6a596a74850602999da20f7caa32b1d78f147dae..aefc10e448cb2b4fb7f3da5e52979a768f556f46 100644 --- a/lib/ui/widgets/fourth_screen/transaction_page.dart +++ b/lib/ui/widgets/fourth_screen/transaction_page.dart @@ -1,8 +1,8 @@ +import 'package:backdrop/backdrop.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:flutter_slidable/flutter_slidable.dart'; import '../../../data/models/contact.dart'; import '../../../data/models/contact_cubit.dart'; @@ -11,11 +11,9 @@ import '../../../data/models/transaction.dart'; import '../../../data/models/transaction_cubit.dart'; import '../../../shared_prefs.dart'; import '../../ui_helpers.dart'; -import '../card_drawer.dart'; -import '../header.dart'; import '../loading_box.dart'; -import '../third_screen/contacts_page.dart'; import 'transaction_chart.dart'; +import 'transaction_item.dart'; class TransactionsAndBalanceWidget extends StatefulWidget { const TransactionsAndBalanceWidget({super.key}); @@ -29,8 +27,6 @@ class _TransactionsAndBalanceWidgetState extends State<TransactionsAndBalanceWidget> with SingleTickerProviderStateMixin { final ScrollController _transScrollController = ScrollController(); - final DraggableScrollableController _draggableScrollableController = - DraggableScrollableController(); late NodeListCubit nodeListCubit; late TransactionsCubit transCubit; @@ -53,8 +49,8 @@ class _TransactionsAndBalanceWidgetState } Future<void> _scrollListener() async { - if (_transScrollController.position.pixels == - _transScrollController.position.maxScrollExtent || + if (/* _transScrollController.position.pixels == + _transScrollController.position.maxScrollExtent || */ _transScrollController.offset == 0) { await _refreshTransactions(); } @@ -72,9 +68,7 @@ class _TransactionsAndBalanceWidgetState @override Widget build(BuildContext context) { - final String myPubKey = !txDebugging - ? SharedPreferencesHelper().getPubKey() - : '6DrGg8cftpkgffv4Y4Lse9HSjgc8coEQor3yvMPHAnVH'; + final String myPubKey = SharedPreferencesHelper().getPubKey(); return BlocBuilder<TransactionsCubit, TransactionsAndBalanceState>(builder: (BuildContext context, TransactionsAndBalanceState transBalanceState) { // Fetch transactions @@ -83,9 +77,10 @@ class _TransactionsAndBalanceWidgetState final List<Transaction> transactions = transBalanceState.transactions; final double balance = transBalanceState.balance; if (!isLoading) { - return Scaffold( - appBar: AppBar( - title: Text(tr('transactions')), + return BackdropScaffold( + appBar: BackdropAppBar( + backgroundColor: Theme.of(context).colorScheme.inversePrimary, + title: Text(tr('balance')), actions: <Widget>[ IconButton( icon: const Icon(Icons.refresh), @@ -93,169 +88,161 @@ class _TransactionsAndBalanceWidgetState _refreshTransactions(); }, ), - if (!kReleaseMode) - IconButton( - onPressed: () { - if (_draggableScrollableController.size != null) { - _draggableScrollableController.animateTo( - 100, - duration: const Duration(milliseconds: 500), - curve: Curves.easeInOut, - ); - } - }, - icon: const Icon(Icons.savings), - ), + const BackdropToggleButton( + // The default + // icon: AnimatedIcons.close_menu, + ) ], ), - drawer: const CardDrawer(), - body: Stack(children: <Widget>[ - Column(crossAxisAlignment: CrossAxisAlignment.start, children: < - Widget>[ - /* Container( - color: Theme.of(context).colorScheme.surfaceVariant, - height: 90, - width: double.infinity, - child: const Padding( - padding: EdgeInsets.symmetric(horizontal: 16), - child: Header(text: 'transactions'))), */ - Expanded( - child: Padding( - padding: const EdgeInsets.fromLTRB(0, 0, 0, 50), - child: transactions.isEmpty - ? Column(children: const <Widget>[ - NoElements(text: 'no_transactions') - ]) - : ListView.builder( - physics: const AlwaysScrollableScrollPhysics(), - shrinkWrap: true, - controller: _transScrollController, - itemCount: transactions.length, - // Size of elements - // itemExtent: 100, - itemBuilder: (BuildContext context, int index) { - return Slidable( - // Specify a key if the Slidable is dismissible. - key: const ValueKey<int>(0), - // The end action pane is the one at the right or the bottom side. - endActionPane: ActionPane( - motion: const ScrollMotion(), - children: <SlidableAction>[ - SlidableAction( - onPressed: (BuildContext c) { - _addContact(transactions, index, - myPubKey, contactsCubit); - // FIXME i18n - ScaffoldMessenger.of(context) - .showSnackBar( - SnackBar( - content: - Text(tr('contact_added')), - ), - ); - }, - backgroundColor: - Theme.of(context).primaryColor, - foregroundColor: Colors.white, - icon: Icons.contacts, - label: tr('add_contact'), - ), - ], - ), - child: ListTile( - title: Text(tr('transaction_from_to', - namedArgs: <String, String>{ - 'from': humanizeFromToPubKey( - myPubKey, - transactions[index].from), - 'to': humanizeFromToPubKey(myPubKey, - transactions[index].to) - })), - subtitle: Column( - crossAxisAlignment: - CrossAxisAlignment.start, - children: <Widget>[ - if (transactions[index] - .comment - .isNotEmpty) - Text( - transactions[index].comment, - style: const TextStyle( - fontStyle: FontStyle.italic, - ), - ), - Text(humanizeTime( - transactions[index].time, - context.locale.toString())!) - ]), - tileColor: tileColor(index, context), - trailing: Text( - '${transactions[index].amount < 0 ? "" : "+"}${(transactions[index].amount / 100).toStringAsFixed(2)} Äž1', - style: TextStyle( - color: - transactions[index].amount < 0 - ? Colors.red - : Colors.blue)), - )); - }, - )), - ) - ]), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 10), - child: DraggableScrollableSheet( - controller: _draggableScrollableController, - initialChildSize: 0.12, - minChildSize: 0.12, - maxChildSize: 0.9, - builder: (BuildContext context, - ScrollController scrollController) => - Container( - decoration: BoxDecoration( - color: - Theme.of(context).colorScheme.inversePrimary, - border: Border.all( - color: Theme.of(context) - .colorScheme - .inversePrimary, - width: 3), - borderRadius: const BorderRadius.only( - topLeft: Radius.circular(8), - topRight: Radius.circular(8), - ), - ), - child: Scrollbar( - child: ListView( - controller: scrollController, - children: <Widget>[ - const Padding( - padding: - EdgeInsets.symmetric(horizontal: 16), - child: Header( - text: 'balance', - // topPadding: 0, - )), - Padding( + backLayer: Center( + child: Container( + decoration: BoxDecoration( + color: Theme.of(context).colorScheme.inversePrimary, + border: Border.all( + color: Theme.of(context).colorScheme.inversePrimary, + width: 3), + /* borderRadius: const BorderRadius.only( + topLeft: Radius.circular(8), + topRight: Radius.circular(8), + ), */ + ), + child: Scrollbar( + child: ListView( + // controller: scrollController, + children: <Widget>[ + Padding( + padding: const EdgeInsets.symmetric(vertical: 10.0), + child: Center( + child: Text( + formatKAmount(context, balance), + style: TextStyle( + fontSize: 36.0, + color: balance == 0 + ? Colors.lightBlue + : Colors.lightBlue, + fontWeight: FontWeight.bold), + )), + ), + if (!kReleaseMode) TransactionChart() + /*BalanceChart( + transactions: .transactions),*/ + ], + )), + )), + subHeader: BackdropSubHeader( + title: Text(tr('transactions')), + ), + frontLayer: Center( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: <Widget>[ + /* Container( + /* color: Theme + .of(context) + .colorScheme + .surfaceVariant, */ + height: 70, + width: double.infinity, + child: const Padding( + padding: EdgeInsets.symmetric(horizontal: 16), + child: Header(text: 'transactions'))), */ + Expanded( + child: Padding( + padding: const EdgeInsets.fromLTRB(0, 0, 0, 50), + child: transactions.isEmpty + ? Padding( padding: const EdgeInsets.symmetric( - vertical: 10.0), + horizontal: 20), child: Center( - child: Text( - '${formatKAmount(balance)} Äž1', - style: TextStyle( - fontSize: 36.0, - color: balance == 0 - ? Colors.lightBlue - : Colors.lightBlue, - fontWeight: FontWeight.bold), - )), - ), - if (!kReleaseMode) TransactionChart() - /*BalanceChart( - transactions: .transactions),*/ - ], - )), - ))) - ])); + child: Text(tr('no_transactions')))) + : ListView.builder( + physics: + const AlwaysScrollableScrollPhysics(), + shrinkWrap: true, + controller: _transScrollController, + itemCount: transactions.length, + // Size of elements + // itemExtent: 100, + itemBuilder: + (BuildContext context, int index) { + return TransactionListItem( + index: index, + transaction: transactions[index], + avatar: avatar(null), + ); + /* + Slidable( + + // Specify a key if the Slidable is dismissible. + key: const ValueKey<int>(0), + // The end action pane is the one at the right or the bottom side. + endActionPane: ActionPane( + motion: const ScrollMotion(), + children: <SlidableAction>[ + SlidableAction( + onPressed: (BuildContext c) { + _addContact(transactions, index, + myPubKey, contactsCubit); + // FIXME i18n + ScaffoldMessenger.of(context) + .showSnackBar( + SnackBar( + content: + Text(tr('contact_added')), + ), + ); + }, + backgroundColor: + Theme.of(context).primaryColor, + foregroundColor: Colors.white, + icon: Icons.contacts, + label: tr('add_contact'), + ), + ], + ), + child: ListTile( + title: Text(tr('transaction_from_to', + namedArgs: <String, String>{ + 'from': humanizeFromToPubKey( + myPubKey, + transactions[index].from), + 'to': humanizeFromToPubKey( + myPubKey, + transactions[index].to) + })), + subtitle: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: <Widget>[ + if (transactions[index] + .comment + .isNotEmpty) + Text( + transactions[index].comment, + style: const TextStyle( + fontStyle: FontStyle.italic, + ), + ), + Text(humanizeTime( + transactions[index].time, + context.locale.toString())!) + ]), + tileColor: tileColor(index, context), + trailing: Text( + '${transactions[index].amount < 0 ? "" : "+"}${(transactions[index].amount / 100).toStringAsFixed(2)} Äž1', + style: TextStyle( + color: + transactions[index].amount < + 0 + ? Colors.red + : Colors.blue)), + )); + */ + }, + )), + ) + ]), + )); } else { return const LoadingScreen(); } diff --git a/lib/ui/widgets/second_screen/card_terminal.dart b/lib/ui/widgets/second_screen/card_terminal.dart index 2be24238d2f94e425b0de47656f95d1c7432d646..2ba30940084f103d97e00675ff0c7f301036efde 100644 --- a/lib/ui/widgets/second_screen/card_terminal.dart +++ b/lib/ui/widgets/second_screen/card_terminal.dart @@ -2,6 +2,7 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:vibration/vibration.dart'; +import '../../logger.dart'; import '../../ui_helpers.dart'; import 'card_terminal_screen.dart'; import 'rubber_button.dart'; @@ -27,7 +28,7 @@ class _CardTerminalState extends State<CardTerminal> { '9', 'DEC', '0', - '#', + '+', ]; final int _cancelIndex = 12; final int _backspaceIndex = 13; @@ -107,9 +108,13 @@ class _CardTerminalState extends State<CardTerminal> { return RubberButton( // Green, send bgColor: const Color(0xFF36B649), - icon: Icons.subdirectory_arrow_left, + // icon: Icons.subdirectory_arrow_left, + label: '=', onPressed: () { - vibrateIfPossible(); + setState(() { + _currentValue = + calculate(_currentValue, _decimalSep, context).toString(); + }); }); } else if (index == _cancelIndex) { return RubberButton( @@ -126,9 +131,9 @@ class _CardTerminalState extends State<CardTerminal> { return RubberButton( label: _numbers[index], onPressed: () { - if (_numbers[index] == '#') { + /* if (_numbers[index] == '+') { return; - } + } */ if (_numbers[index] == _decimalSep && _currentValue.contains(_decimalSep)) { return; @@ -139,6 +144,34 @@ class _CardTerminalState extends State<CardTerminal> { }); }); } + + double calculate( + String textInTerminal, String decimalSep, BuildContext context) { + String operation = textInTerminal; + double sum = 0.0; + operation = operation.replaceAll( + decimalSep, '.'); // change decimal separator to a dot + final NumberFormat numberFormat = + NumberFormat.decimalPattern(context.locale.toString()); + final RegExp regex = + RegExp(r'[\d.]+'); // regular expression to find numbers + final Iterable<Match> matches = + regex.allMatches(operation); // find all numbers in the input + for (final Match? match in matches) { + try { + if (match != null) { + final String? g1 = match.group(0); + if (g1 != null) { + sum += numberFormat.parse(g1); // add the number to the sum + } + } + } catch (e) { + // could not convert the number to a double value, ignore it + } + } + logger(numberFormat.format(sum)); // print the formatted sum + return sum; + } } Future<void> vibrateIfPossible() async { diff --git a/lib/ui/widgets/second_screen/card_terminal_screen.dart b/lib/ui/widgets/second_screen/card_terminal_screen.dart index b958c14603b88a1b61b3a2e97a59a38d6283bcec..476cb3dab840667f10f53052111b33f8140319ed 100644 --- a/lib/ui/widgets/second_screen/card_terminal_screen.dart +++ b/lib/ui/widgets/second_screen/card_terminal_screen.dart @@ -75,11 +75,15 @@ class CardTerminalScreen extends StatelessWidget { ])), Expanded( child: Column(children: <Widget>[ - QrImage( - data: getQrUri(SharedPreferencesHelper().getPubKey(), amount), - size: smallScreen(context) ? 120.0 : 160.0, - ) - ])), + if (!amount.contains('+')) + QrImage( + data: getQrUri( + SharedPreferencesHelper().getPubKey(), amount), + size: + smallScreen(context) ? 100.0 : 140.0 + //: (smallScreen(context) ? 120.0 : 160.0), + ) + ])), Container( decoration: const BoxDecoration( borderRadius: BorderRadius.only( @@ -101,6 +105,7 @@ class CardTerminalScreen extends StatelessWidget { child: Padding( padding: const EdgeInsets.symmetric(horizontal: 10), child: TextField( + maxLines: amount.isNotEmpty ? 2 : 2, style: const TextStyle( fontFamily: 'Roboto Mono', color: Colors.white, diff --git a/pubspec.yaml b/pubspec.yaml index b9d39b4725643211384a00f43eb3d7374ca1c0cc..0ee85e1930590c1171a1359af4f566d7640a2097 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,7 +15,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 0.0.7+1 +version: 0.0.8 environment: sdk: ">=2.17.1 <3.0.0" @@ -45,7 +45,7 @@ dependencies: connectivity_wrapper: ^1.1.1 responsive_framework: ^0.2.0 #durt: ^0.1.6 - durt: + durt: path: ../durt flutter_neumorphic: ^3.2.0 shared_preferences: ^2.0.18 @@ -105,6 +105,7 @@ flutter: - assets/img/logo-duniter.png - assets/img/logo-cesium.png - assets/tx.json + - assets/gva-tx.json fonts: - family: Nunito diff --git a/test/transactions_test.dart b/test/transactions_test.dart index 8186343636a75859d2e347724f978aa67cff5e3c..a1ab3da5efaeea92690e754dc086288fd2524b7d 100644 --- a/test/transactions_test.dart +++ b/test/transactions_test.dart @@ -1,6 +1,9 @@ +import 'dart:convert'; + import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:ginkgo/data/models/transaction.dart'; +import 'package:ginkgo/data/models/transaction_type.dart'; import 'package:ginkgo/g1/transaction_parser.dart'; void main() { @@ -20,4 +23,64 @@ void main() { expect(txs[txs.length - 2].amount < 0, equals(true)); expect(txs.last.amount > 0, equals(true)); }); + + test('Test gva history parsing', () async { + TestWidgetsFlutterBinding.ensureInitialized(); + final String txData = await rootBundle.loadString('assets/gva-tx.json'); + final TransactionsAndBalanceState result = transactionsGvaParser( + (jsonDecode(txData) as Map<String, dynamic>)['data'] + as Map<String, dynamic>); + expect(result.balance, equals(3)); + final List<Transaction> txs = result.transactions; + for (final Transaction tx in txs) { + expect(tx.from != tx.to, equals(true)); + } + expect( + txs.first.to, equals('EDB7chzCBdtUCnqFZquVeto4a65FjeRkPrqcV8NwVbTx')); + expect( + txs.first.from, equals('6DrGg8cftpkgffv4Y4Lse9HSjgc8coEQor3yvMPHAnVH')); + expect(txs.first.amount, equals(-1200)); + expect(txs.first.type, equals(TransactionType.sent)); + expect( + txs.last.from, equals('BrgsSYK3xUzDyztGBHmxq69gfNxBfe2UKpxG21oZUBr5')); + expect(txs.last.to, equals('6DrGg8cftpkgffv4Y4Lse9HSjgc8coEQor3yvMPHAnVH')); + expect(txs.last.type, equals(TransactionType.receiving)); + expect(txs.last.amount, equals(100)); + expect(txs[1].from, equals('A1Fc1VoCLKHyPYmXimYECSmjmsceqwRSZcTBXfgG9JaB')); + expect(txs[1].to, equals('6DrGg8cftpkgffv4Y4Lse9HSjgc8coEQor3yvMPHAnVH')); + expect(txs[1].type, equals(TransactionType.received)); + expect(txs[1].amount, equals(10000)); + + const String emptyTx = ''' + { + "data": { + "balance": null, + "currentUd": { + "amount": 1068, + "base": 0 + }, + "txsHistoryBc": { + "both": { + "edges": [], + "pageInfo": { + "endCursor": null, + "hasNextPage": false, + "hasPreviousPage": false, + "startCursor": null + } + } + }, + "txsHistoryMp": { + "receiving": [], + "sending": [] + } + } +}'''; + final TransactionsAndBalanceState emptyResult = transactionsGvaParser( + (jsonDecode(emptyTx) as Map<String, dynamic>)['data'] + as Map<String, dynamic>); + expect(emptyResult.balance, equals(0)); + final List<Transaction> emptyTxs = emptyResult.transactions; + expect(emptyTxs.length, equals(0)); + }); }