Browse Source

Add new taker-frontend and rename old to maker-frontend

shutdown-taker-if-no-maker-present
itchymax 3 years ago
parent
commit
088bf45112
No known key found for this signature in database GPG Key ID: E5F8E74C672BC666
  1. 16
      .github/workflows/build-release-binary.yml
  2. 48
      .github/workflows/ci.yml
  3. 6
      bors.toml
  4. 4
      daemon/build.rs
  5. 2
      daemon/src/routes_maker.rs
  6. 2
      daemon/src/routes_taker.rs
  7. 10
      dprint.json
  8. 0
      maker-frontend/.gitignore
  9. 0
      maker-frontend/dynamicApp.ts
  10. 0
      maker-frontend/index.html
  11. 0
      maker-frontend/jest.config.js
  12. 0
      maker-frontend/jest.setup.js
  13. 0
      maker-frontend/jest/mocks/cssMock.js
  14. 0
      maker-frontend/package.json
  15. 0
      maker-frontend/src/MakerApp.test.tsx
  16. 0
      maker-frontend/src/MakerApp.tsx
  17. 0
      maker-frontend/src/MakerClient.tsx
  18. 0
      maker-frontend/src/TakerApp.test.tsx
  19. 0
      maker-frontend/src/TakerApp.tsx
  20. 0
      maker-frontend/src/components/BackendMonitor.tsx
  21. 0
      maker-frontend/src/components/CurrencyInputField.tsx
  22. 0
      maker-frontend/src/components/CurrentPrice.tsx
  23. 0
      maker-frontend/src/components/ErrorToast.tsx
  24. 0
      maker-frontend/src/components/Hooks.tsx
  25. 0
      maker-frontend/src/components/HttpError.tsx
  26. 0
      maker-frontend/src/components/NavLink.tsx
  27. 0
      maker-frontend/src/components/OrderTile.tsx
  28. 0
      maker-frontend/src/components/Timestamp.tsx
  29. 0
      maker-frontend/src/components/Types.tsx
  30. 0
      maker-frontend/src/components/Wallet.tsx
  31. 0
      maker-frontend/src/components/cfdtables/CfdTable.tsx
  32. 0
      maker-frontend/src/favicon.svg
  33. 0
      maker-frontend/src/index.css
  34. 0
      maker-frontend/src/logo.svg
  35. 0
      maker-frontend/src/maker.tsx
  36. 0
      maker-frontend/src/taker.tsx
  37. 0
      maker-frontend/src/theme.tsx
  38. 0
      maker-frontend/src/vite-env.d.ts
  39. 0
      maker-frontend/tsconfig.json
  40. 0
      maker-frontend/vite.config.ts
  41. 0
      maker-frontend/yarn.lock
  42. 2
      start_all.sh
  43. 5
      taker-frontend/.gitignore
  44. 13
      taker-frontend/index.html
  45. 67
      taker-frontend/package.json
  46. 168
      taker-frontend/src/App.tsx
  47. 27
      taker-frontend/src/Hooks.tsx
  48. 25
      taker-frontend/src/components/ColorModeSwitcher.tsx
  49. 264
      taker-frontend/src/components/History.tsx
  50. 44
      taker-frontend/src/components/Logo.tsx
  51. 78
      taker-frontend/src/components/NavBar.tsx
  52. 26
      taker-frontend/src/components/Timestamp.tsx
  53. 294
      taker-frontend/src/components/Trade.tsx
  54. 267
      taker-frontend/src/components/Types.tsx
  55. 67
      taker-frontend/src/components/Wallet.tsx
  56. 15
      taker-frontend/src/favicon.svg
  57. 17
      taker-frontend/src/images/logo.svg
  58. BIN
      taker-frontend/src/images/logo_nav_bar_black.png
  59. 43
      taker-frontend/src/images/logo_nav_bar_black.svg
  60. BIN
      taker-frontend/src/images/logo_nav_bar_white.png
  61. 43
      taker-frontend/src/images/logo_nav_bar_white.svg
  62. 13
      taker-frontend/src/index.css
  63. 17
      taker-frontend/src/logo.svg
  64. 21
      taker-frontend/src/main.tsx
  65. 10
      taker-frontend/src/theme.tsx
  66. 1
      taker-frontend/src/vite-env.d.ts
  67. 20
      taker-frontend/tsconfig.json
  68. 19
      taker-frontend/vite.config.ts
  69. 12799
      taker-frontend/yarn.lock

16
.github/workflows/build-release-binary.yml

@ -83,12 +83,22 @@ jobs:
cache: yarn
cache-dependency-path: 'frontend/yarn.lock'
- name: Build ${{ matrix.bin }} frontend
- name: Build maker frontend
if: matrix.bin == 'maker'
shell: bash
run: |
cd frontend;
cd maker-frontend;
yarn
APP=${{ matrix.bin }} yarn build
APP=maker yarn build
# Overwrite taker frontend with our new fancy UI
- name: Build taker frontend
if: matrix.bin == 'taker'
shell: bash
run: |
cd taker-frontend;
yarn
yarn build
- name: Build ${{ matrix.target }} ${{ matrix.bin }} release binary
run: cargo build --target=${{ matrix.target }} --release --bin ${{ matrix.bin }}

48
.github/workflows/ci.yml

@ -28,38 +28,64 @@ jobs:
- uses: Swatinem/rust-cache@v1.3.0
- run: cargo clippy --workspace --all-targets -- -D warnings
check_frontend:
check_maker_frontend:
defaults:
run:
working-directory: frontend
working-directory: maker-frontend
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2.4.0
- uses: actions/setup-node@v2
with:
cache: 'yarn'
cache-dependency-path: frontend/yarn.lock
cache-dependency-path: maker-frontend/yarn.lock
- run: yarn install
- run: yarn run eslint
- run: yarn run tsc
build_and_test_frontend:
strategy:
matrix:
app: [ maker, taker ]
check_taker_frontend:
defaults:
run:
working-directory: taker-frontend
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2.4.0
- uses: actions/setup-node@v2
with:
cache: 'yarn'
cache-dependency-path: taker-frontend/yarn.lock
- run: yarn install
- run: yarn run eslint
- run: yarn run tsc
build_and_test_maker_frontend:
defaults:
run:
working-directory: maker-frontend
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2.4.0
- uses: actions/setup-node@v2
with:
cache: 'yarn'
cache-dependency-path: maker-frontend/yarn.lock
- run: yarn install
- run: APP=maker yarn test
- run: APP=maker yarn build
build_and_test_taker_frontend:
defaults:
run:
working-directory: frontend
working-directory: taker-frontend
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2.4.0
- uses: actions/setup-node@v2
with:
cache: 'yarn'
cache-dependency-path: frontend/yarn.lock
cache-dependency-path: taker-frontend/yarn.lock
- run: yarn install
- run: APP=${{ matrix.app }} yarn test
- run: APP=${{ matrix.app }} yarn build
- run: yarn build
test_daemons:
strategy:

6
bors.toml

@ -1,9 +1,9 @@
status = [
"formatting",
"clippy",
"check_frontend",
"build_and_test_frontend (maker)",
"build_and_test_frontend (taker)",
"check_maker_frontend",
"build_and_test_taker_frontend",
"build_and_test_maker_frontend",
"test_daemons (ubuntu-latest)",
"test_daemons (macos-latest)",
"test_daemons (windows-latest)",

4
daemon/build.rs

@ -2,8 +2,8 @@ use anyhow::Result;
use vergen::{vergen, Config, SemverKind};
fn main() -> Result<()> {
std::fs::create_dir_all("../frontend/dist/maker")?;
std::fs::create_dir_all("../frontend/dist/taker")?;
std::fs::create_dir_all("../maker-frontend/dist/maker")?;
std::fs::create_dir_all("../taker-frontend/dist/taker")?;
let mut config = Config::default();
*config.git_mut().semver_kind_mut() = SemverKind::Lightweight;

2
daemon/src/routes_maker.rs

@ -193,7 +193,7 @@ pub async fn post_cfd_action(
pub fn get_health_check() {}
#[derive(RustEmbed)]
#[folder = "../frontend/dist/maker"]
#[folder = "../maker-frontend/dist/maker"]
struct Asset;
#[rocket::get("/assets/<file..>")]

2
daemon/src/routes_taker.rs

@ -197,7 +197,7 @@ pub fn margin_calc(
}
#[derive(RustEmbed)]
#[folder = "../frontend/dist/taker"]
#[folder = "../taker-frontend/dist/taker"]
struct Asset;
#[rocket::get("/assets/<file..>")]

10
dprint.json

@ -7,16 +7,12 @@
"wrap_comments": true,
"comment_width": 120
},
"includes": ["**/*.{md,rs,toml,ts,tsx,js}"],
"excludes": ["**/target",
"**/sqlx-data.json",
"frontend/dist",
"**/node_modules"
],
"includes": ["**/*.{md,rs,toml,ts,tsx,js,json}"],
"excludes": ["**/target", "**/sqlx-data.json", "maker-frontend/dist", "taker-frontend/dist", "**/node_modules"],
"plugins": [
"https://plugins.dprint.dev/markdown-0.9.2.wasm",
"https://plugins.dprint.dev/rustfmt-0.4.0.exe-plugin@c6bb223ef6e5e87580177f6461a0ab0554ac9ea6b54f78ea7ae8bf63b14f5bc2",
"https://plugins.dprint.dev/toml-0.4.0.wasm"
"https://plugins.dprint.dev/toml-0.4.0.wasm",
"https://plugins.dprint.dev/typescript-0.35.0.wasm",
"https://plugins.dprint.dev/json-0.7.2.wasm"
]

0
frontend/.gitignore → maker-frontend/.gitignore

0
frontend/dynamicApp.ts → maker-frontend/dynamicApp.ts

0
frontend/index.html → maker-frontend/index.html

0
frontend/jest.config.js → maker-frontend/jest.config.js

0
frontend/jest.setup.js → maker-frontend/jest.setup.js

0
frontend/jest/mocks/cssMock.js → maker-frontend/jest/mocks/cssMock.js

0
frontend/package.json → maker-frontend/package.json

0
frontend/src/MakerApp.test.tsx → maker-frontend/src/MakerApp.test.tsx

0
frontend/src/MakerApp.tsx → maker-frontend/src/MakerApp.tsx

0
frontend/src/MakerClient.tsx → maker-frontend/src/MakerClient.tsx

0
frontend/src/TakerApp.test.tsx → maker-frontend/src/TakerApp.test.tsx

0
frontend/src/TakerApp.tsx → maker-frontend/src/TakerApp.tsx

0
frontend/src/components/BackendMonitor.tsx → maker-frontend/src/components/BackendMonitor.tsx

0
frontend/src/components/CurrencyInputField.tsx → maker-frontend/src/components/CurrencyInputField.tsx

0
frontend/src/components/CurrentPrice.tsx → maker-frontend/src/components/CurrentPrice.tsx

0
frontend/src/components/ErrorToast.tsx → maker-frontend/src/components/ErrorToast.tsx

0
frontend/src/components/Hooks.tsx → maker-frontend/src/components/Hooks.tsx

0
frontend/src/components/HttpError.tsx → maker-frontend/src/components/HttpError.tsx

0
frontend/src/components/NavLink.tsx → maker-frontend/src/components/NavLink.tsx

0
frontend/src/components/OrderTile.tsx → maker-frontend/src/components/OrderTile.tsx

0
frontend/src/components/Timestamp.tsx → maker-frontend/src/components/Timestamp.tsx

0
frontend/src/components/Types.tsx → maker-frontend/src/components/Types.tsx

0
frontend/src/components/Wallet.tsx → maker-frontend/src/components/Wallet.tsx

0
frontend/src/components/cfdtables/CfdTable.tsx → maker-frontend/src/components/cfdtables/CfdTable.tsx

0
frontend/src/favicon.svg → maker-frontend/src/favicon.svg

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

0
frontend/src/index.css → maker-frontend/src/index.css

0
frontend/src/logo.svg → maker-frontend/src/logo.svg

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

0
frontend/src/maker.tsx → maker-frontend/src/maker.tsx

0
frontend/src/taker.tsx → maker-frontend/src/taker.tsx

0
frontend/src/theme.tsx → maker-frontend/src/theme.tsx

0
frontend/src/vite-env.d.ts → maker-frontend/src/vite-env.d.ts

0
frontend/tsconfig.json → maker-frontend/tsconfig.json

0
frontend/vite.config.ts → maker-frontend/vite.config.ts

0
frontend/yarn.lock → maker-frontend/yarn.lock

2
start_all.sh

@ -5,4 +5,4 @@ export RUST_BACKTRACE=1
# A simple command to spin up the complete package, ie. both daemons and frontends.
# A single 'ctrl+c' stops all processes.
# The maker-id is generated from the makers seed found in daemon/util/testnet_seeds/maker_seed
(trap 'kill 0' SIGINT; cargo run --bin maker -- testnet & cargo run --bin taker -- --maker-id 10d4ba2ac3f7a22da4009d813ff1bc3f404dfe2cc93a32bedf1512aa9951c95e testnet -- & APP=maker yarn --cwd=./frontend dev & APP=taker yarn --cwd=./frontend dev)
(trap 'kill 0' SIGINT; cargo run --bin maker -- testnet & cargo run --bin taker -- --maker-id 10d4ba2ac3f7a22da4009d813ff1bc3f404dfe2cc93a32bedf1512aa9951c95e testnet -- & APP=maker yarn --cwd=./maker-frontend dev & yarn --cwd=./taker-frontend dev)

5
taker-frontend/.gitignore

@ -0,0 +1,5 @@
node_modules
.DS_Store
dist-ssr
*.local
dist/

13
taker-frontend/index.html

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/src/logo.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Itchy Stats</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>

67
taker-frontend/package.json

@ -0,0 +1,67 @@
{
"name": "itchysats",
"version": "0.1.0",
"scripts": {
"dev": "vite",
"build": "vite build",
"serve": "vite preview",
"eslint": "eslint src/**/*.{ts,tsx}",
"tsc": "tsc"
},
"dependencies": {
"@chakra-ui/icons": "^1.0.16",
"@chakra-ui/react": "^1.6.10",
"@emotion/react": "^11",
"@emotion/styled": "^11",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"@testing-library/jest-dom": "^5.9.0",
"@testing-library/react": "^10.2.1",
"@testing-library/user-event": "^12.0.2",
"@types/jest": "^25.0.0",
"@types/node": "^12.0.0",
"@types/react": "^17.0.34",
"@types/react-dom": "^17.0.11",
"@types/react-router-dom": "5.3.1",
"framer-motion": "^4",
"react-async": "^10.0.1",
"react-icons": "^3.0.0",
"react-refresh": "^0.10.0",
"react-router-dom": "5.3.0",
"react-scripts": "4.0.3",
"react-sse-hooks": "^1.0.5",
"web-vitals": "^0.2.2",
"@vitejs/plugin-react": "^1.0.0",
"typescript": "^4.4.4",
"vite": "^2.6.13"
},
"devDependencies": {
"@types/eslint": "^7",
"@types/react": "^17.0.34",
"@types/react-dom": "^17.0.11",
"typescript": "^4.4.4",
"vite": "^2.6.13"
},
"eslintConfig": {
"parser": "@typescript-eslint/parser",
"plugins": [
"@typescript-eslint"
],
"parserOptions": {
"project": "./tsconfig.json"
},
"extends": [
"react-app",
"react-app/jest"
],
"rules": {
"@typescript-eslint/no-floating-promises": "error",
"@typescript-eslint/promise-function-async": "error",
"require-await": "off",
"@typescript-eslint/require-await": "error",
"@typescript-eslint/no-use-before-define": "off",
"@typescript-eslint/no-unused-vars": "error",
"react-hooks/exhaustive-deps": "error"
}
}
}

168
taker-frontend/src/App.tsx

@ -0,0 +1,168 @@
import { Box, StackDivider, useToast, VStack } from "@chakra-ui/react";
import * as React from "react";
import { useEffect, useState } from "react";
import { useAsync } from "react-async";
import { Route, Switch } from "react-router-dom";
import { useEventSource } from "react-sse-hooks";
import History from "./components/History";
import Nav from "./components/NavBar";
import Trade from "./components/Trade";
import {
Cfd,
CfdOrderRequestPayload,
intoCfd,
intoOrder,
MarginRequestPayload,
MarginResponse,
Order,
StateGroupKey,
WalletInfo,
} from "./components/Types";
import { Wallet } from "./components/Wallet";
import useLatestEvent from "./Hooks";
async function getMargin(payload: MarginRequestPayload): Promise<MarginResponse> {
let res = await fetch(`/api/calculate/margin`, { method: "POST", body: JSON.stringify(payload) });
if (!res.status.toString().startsWith("2")) {
throw new Error("failed to create new CFD order request: " + res.status + ", " + res.statusText);
}
return res.json();
}
async function postCfdOrderRequest(payload: CfdOrderRequestPayload) {
let res = await fetch(`/api/cfd/order`, { method: "POST", body: JSON.stringify(payload) });
if (!res.status.toString().startsWith("2")) {
console.log(`Error${JSON.stringify(res)}`);
throw new Error("failed to create new CFD order request: " + res.status + ", " + res.statusText);
}
}
export const App = () => {
const toast = useToast();
let source = useEventSource({ source: "/api/feed" });
const walletInfo = useLatestEvent<WalletInfo>(source, "wallet");
const order = useLatestEvent<Order>(source, "order", intoOrder);
const cfdsOrUndefined = useLatestEvent<Cfd[]>(source, "cfds", intoCfd);
let cfds = cfdsOrUndefined ? cfdsOrUndefined! : [];
cfds.sort((a, b) => a.order_id.localeCompare(b.order_id));
let [quantity, setQuantity] = useState("0");
let [margin, setMargin] = useState("0");
let [userHasEdited, setUserHasEdited] = useState(false);
const { price, min_quantity, max_quantity, leverage, liquidation_price: liquidationPrice } = order || {};
let effectiveQuantity = userHasEdited ? quantity : (min_quantity?.toString() || "0");
let { run: calculateMargin } = useAsync({
deferFn: async ([payload]: any[]) => {
try {
let res = await getMargin(payload as MarginRequestPayload);
setMargin(res.margin.toString());
} catch (e) {
const description = typeof e === "string" ? e : JSON.stringify(e);
toast({
title: "Error",
description,
status: "error",
duration: 9000,
isClosable: true,
});
}
},
});
let { run: makeNewOrderRequest, isLoading: isCreatingNewOrderRequest } = useAsync({
deferFn: async ([payload]: any[]) => {
try {
await postCfdOrderRequest(payload as CfdOrderRequestPayload);
} catch (e) {
console.error(`Error received: ${JSON.stringify(e)}`);
const description = typeof e === "string" ? e : JSON.stringify(e);
toast({
title: "Error",
description,
status: "error",
duration: 9000,
isClosable: true,
});
}
},
});
useEffect(() => {
if (!order) {
return;
}
let quantity = effectiveQuantity ? Number.parseFloat(effectiveQuantity) : 0;
let payload: MarginRequestPayload = {
leverage: order.leverage,
price: order.price,
quantity,
};
calculateMargin(payload);
}, // Eslint demands us to include `calculateMargin` in the list of dependencies.
// We don't want that as we will end up in an endless loop. It is safe to ignore `calculateMargin` because
// nothing in `calculateMargin` depends on outside values, i.e. is guaranteed to be stable.
// eslint-disable-next-line react-hooks/exhaustive-deps
[margin, effectiveQuantity, order]);
const format = (val: any) => `$` + val;
const parse = (val: any) => val.replace(/^\$/, "");
return (
<>
<Nav walletInfo={walletInfo} />
<Box textAlign="center" padding={3}>
<Switch>
<Route path="/">
<VStack divider={<StackDivider borderColor="gray.500" />} spacing={4}>
<Trade
order_id={order?.id}
quantity={format(effectiveQuantity)}
max_quantity={max_quantity || 0}
min_quantity={min_quantity || 0}
price={price}
margin={margin}
leverage={leverage}
liquidationPrice={liquidationPrice}
onQuantityChange={(valueString: string) => {
setUserHasEdited(true);
setQuantity(parse(valueString));
if (!order) {
return;
}
let quantity = valueString ? Number.parseFloat(valueString) : 0;
let payload: MarginRequestPayload = {
leverage: order.leverage,
price: order.price,
quantity,
};
calculateMargin(payload);
}}
onLongSubmit={makeNewOrderRequest}
isSubmitting={isCreatingNewOrderRequest}
/>
<History
cfds={cfds.filter((cfd) => cfd.state.getGroup() !== StateGroupKey.CLOSED)}
title={"Open Positions"}
/>
<History
cfds={cfds.filter((cfd) => cfd.state.getGroup() === StateGroupKey.CLOSED)}
title={"Closed Positions"}
/>
</VStack>
</Route>
<Route path="/wallet">
<Wallet walletInfo={walletInfo} />
</Route>
</Switch>
</Box>
</>
);
};

27
taker-frontend/src/Hooks.tsx

@ -0,0 +1,27 @@
import { useState } from "react";
import { useEventSourceListener } from "react-sse-hooks";
export default function useLatestEvent<T>(
source: EventSource,
event_name: string,
mapping: (key: string, value: any) => any = (key, value) => value,
): T | null {
const [state, setState] = useState<T | null>(null);
useEventSourceListener<T | null>(
{
source: source,
startOnInit: true,
event: {
name: event_name,
listener: ({ event }) => {
// @ts-ignore - yes, there is a data field on event
setState(JSON.parse(event.data, mapping));
},
},
},
[source],
);
return state;
}

25
taker-frontend/src/components/ColorModeSwitcher.tsx

@ -0,0 +1,25 @@
import { IconButton, IconButtonProps, useColorMode, useColorModeValue } from "@chakra-ui/react";
import * as React from "react";
import { FaMoon, FaSun } from "react-icons/fa";
type ColorModeSwitcherProps = Omit<IconButtonProps, "aria-label">;
export const ColorModeSwitcher: React.FC<ColorModeSwitcherProps> = (props) => {
const { toggleColorMode } = useColorMode();
const text = useColorModeValue("dark", "light");
const SwitchIcon = useColorModeValue(FaMoon, FaSun);
return (
<IconButton
size="md"
fontSize="lg"
variant="ghost"
color="current"
marginLeft="2"
onClick={toggleColorMode}
icon={<SwitchIcon />}
aria-label={`Switch to ${text} mode`}
{...props}
/>
);
};

264
taker-frontend/src/components/History.tsx

@ -0,0 +1,264 @@
import { ExternalLinkIcon, Icon } from "@chakra-ui/icons";
import {
Badge,
Box,
Button,
Center,
Checkbox,
Divider,
GridItem,
Heading,
HStack,
Link,
Popover,
PopoverArrow,
PopoverBody,
PopoverCloseButton,
PopoverContent,
PopoverFooter,
PopoverHeader,
PopoverTrigger,
SimpleGrid,
Spinner,
Table,
Tbody,
Td,
Text,
Tr,
useColorModeValue,
useToast,
VStack,
} from "@chakra-ui/react";
import * as React from "react";
import { useAsync } from "react-async";
import { Cfd, StateGroupKey, StateKey, Tx, TxLabel } from "./Types";
interface HistoryProps {
cfds: Cfd[];
title: string;
}
const History = ({ cfds, title }: HistoryProps) => {
return (
<VStack spacing={3}>
<Heading size={"lg"} padding={2}>{title}</Heading>
<SimpleGrid
columns={{ sm: 2, md: 4 }}
gap={4}
>
{cfds.map((cfd) => {
return (<GridItem rowSpan={1} colSpan={2} key={cfd.order_id}>
<CfdDetails cfd={cfd} />
</GridItem>);
})}
</SimpleGrid>
</VStack>
);
};
export default History;
interface CfdDetailsProps {
cfd: Cfd;
}
async function doPostAction(id: string, action: string) {
await fetch(
`/api/cfd/${id}/${action}`,
{ method: "POST", credentials: "include" },
);
}
const CfdDetails = ({ cfd }: CfdDetailsProps) => {
const toast = useToast();
const initialPrice = `$${cfd.initial_price.toLocaleString()}`;
const quantity = `$${cfd.quantity_usd}`;
const margin = `${Math.round((cfd.margin) * 1_000_000) / 1_000_000}`;
const liquidationPrice = `$${cfd.liquidation_price}`;
const pAndL = Math.round((cfd.profit_btc) * 1_000_000) / 1_000_000;
const expiry = cfd.expiry_timestamp;
const profit = Math.round((cfd.margin + cfd.profit_btc) * 1_000_000) / 1_000_000;
const txLock = cfd.details.tx_url_list.find((tx) => tx.label === TxLabel.Lock);
const txCommit = cfd.details.tx_url_list.find((tx) => tx.label === TxLabel.Commit);
const txRefund = cfd.details.tx_url_list.find((tx) => tx.label === TxLabel.Refund);
const txCet = cfd.details.tx_url_list.find((tx) => tx.label === TxLabel.Cet);
const txSettled = cfd.details.tx_url_list.find((tx) => tx.label === TxLabel.Collaborative);
let { run: postAction, isLoading: isActioning } = useAsync({
deferFn: async ([orderId, action]: any[]) => {
try {
console.log(`Closing: ${orderId} ${action}`);
await doPostAction(orderId, action);
} catch (e) {
const description = typeof e === "string" ? e : JSON.stringify(e);
toast({
title: "Error",
description,
status: "error",
duration: 9000,
isClosable: true,
});
}
},
});
const disableCloseButton = cfd.state.getGroup() === StateGroupKey.CLOSED
|| [StateKey.OPEN_COMMITTED, StateKey.OUTGOING_SETTLEMENT_PROPOSAL, StateKey.PENDING_CLOSE].includes(
cfd.state.key,
);
return (
<HStack bg={useColorModeValue("gray.100", "gray.700")} rounded={5}>
<Center rounded={5} h={"100%"}>
<Table variant="striped" colorScheme="gray" size="sm">
<Tbody>
<Tr>
<Td><Text as={"b"}>Quantity</Text></Td>
<Td>{quantity}</Td>
</Tr>
<Tr>
<Td><Text as={"b"}>Opening price</Text></Td>
<Td>{initialPrice}</Td>
</Tr>
<Tr>
<Td><Text as={"b"}>Liquidation</Text></Td>
<Td>{liquidationPrice}</Td>
</Tr>
<Tr>
<Td><Text as={"b"}>Margin</Text></Td>
<Td>{margin}</Td>
</Tr>
<Tr>
<Td><Text as={"b"}>Unrealized P/L</Text></Td>
<Td>{pAndL.toString()}</Td>
</Tr>
</Tbody>
</Table>
</Center>
<VStack>
<Badge colorScheme={cfd.state.getColorScheme()}>{cfd.state.getLabel()}</Badge>
<HStack w={"95%"}>
<VStack>
<TxIcon tx={txLock} />
<Text>Lock</Text>
</VStack>
{txSettled
? <>
<Divider variant={txSettled ? "solid" : "dashed"} />
<VStack>
<TxIcon tx={txSettled} />
<Text>Payout</Text>
</VStack>
</>
: <>
<Divider variant={txCommit ? "solid" : "dashed"} />
<VStack>
<TxIcon tx={txCommit} />
<Text>Commit</Text>
</VStack>
{txRefund
? <>
<Divider variant={txRefund ? "solid" : "dashed"} />
<VStack>
<TxIcon tx={txRefund} />
<Text>Refund</Text>
</VStack>
</>
: <>
<Divider variant={txCet ? "solid" : "dashed"} />
<VStack>
<TxIcon tx={txCet} />
<Text>Payout</Text>
</VStack>
</>}
</>}
</HStack>
<HStack>
<Box w={"45%"}>
<Text fontSize={"sm"} align={"left"}>
At the current rate you would receive <b> {profit}</b>
</Text>
</Box>
<Box w={"45%"}>
<Popover
placement="bottom"
closeOnBlur={true}
>
{({ onClose }) => (<>
<PopoverTrigger>
<Button colorScheme={"blue"} disabled={disableCloseButton}>Close</Button>
</PopoverTrigger>
<PopoverContent color="white" bg="blue.800" borderColor="blue.800">
<PopoverHeader pt={4} fontWeight="bold" border="0">
Close your position
</PopoverHeader>
<PopoverArrow />
<PopoverCloseButton />
<PopoverBody>
<Text>
This will force-close your position if your counterparty cannot be reached.
The exchange rate at {expiry}
will determine your profit/losses. It is likely that the rate will change
until then.
</Text>
</PopoverBody>
<PopoverFooter
border="0"
d="flex"
alignItems="center"
justifyContent="space-between"
pb={4}
>
<Button
size="sm"
colorScheme="red"
onClick={async () => {
await postAction(cfd.order_id, "settle");
onClose();
}}
isLoading={isActioning}
>
Close
</Button>
<Checkbox defaultIsChecked>Don't show this again</Checkbox>
</PopoverFooter>
</PopoverContent>
</>)}
</Popover>
</Box>
</HStack>
</VStack>
</HStack>
);
};
const CircleIcon = (props: any) => (
<Icon viewBox="0 0 200 200" {...props}>
<path
stroke="currentColor"
fill="transparent"
d="M 100, 100 m -75, 0 a 75,75 0 1,0 150,0 a 75,75 0 1,0 -150,0"
/>
</Icon>
);
interface TxIconProps {
tx?: Tx;
}
const TxIcon = ({ tx }: TxIconProps) => {
const iconColor = useColorModeValue("white.200", "white.600");
if (!tx) {
return (<CircleIcon boxSize={5} color={iconColor} />);
} else if (tx && !tx.url) {
return (<Spinner mx="2px" color={iconColor} speed="1.65s" />);
} else {
return (<Link href={tx.url!} isExternal>
<ExternalLinkIcon mx="2px" color={iconColor} />
</Link>);
}
};

44
taker-frontend/src/components/Logo.tsx

@ -0,0 +1,44 @@
import { Box, BoxProps } from "@chakra-ui/layout";
import { Center, Image, Text, VStack } from "@chakra-ui/react";
import { motion } from "framer-motion";
import React from "react";
import { useHistory } from "react-router-dom";
import logo from "../images/logo.svg";
const MotionBox = motion<BoxProps>(Box);
export const Logo = () => {
const history = useHistory();
function handleClick() {
history.push("/trade");
}
return (
<Center>
<VStack>
<MotionBox
height="200px"
width="200px"
whileHover={{ scale: 1.2 }}
whileTap={{ scale: 0.9 }}
animate={{
scale: [1, 1.5, 1.5, 1, 1],
rotate: [0, 360],
}}
onClick={handleClick}
// @ts-ignore: lint is complaining but should be fine :)
transition={{
repeat: 999,
repeatType: "loop",
duration: 2,
}}
>
<Image src={logo} width="200px" />
</MotionBox>
<Text>Click to enter</Text>
</VStack>
</Center>
);
};

78
taker-frontend/src/components/NavBar.tsx

@ -0,0 +1,78 @@
import { HamburgerIcon, MoonIcon, SunIcon } from "@chakra-ui/icons";
import {
Box,
Button,
Flex,
Image,
Menu,
MenuButton,
MenuItem,
MenuList,
Stack,
useColorMode,
useColorModeValue,
} from "@chakra-ui/react";
import * as React from "react";
import { useHistory } from "react-router-dom";
import logoBlack from "../images/logo_nav_bar_black.svg";
import logoWhite from "../images/logo_nav_bar_white.svg";
import { WalletInfo } from "./Types";
import { WalletNavBar } from "./Wallet";
interface NavProps {
walletInfo: WalletInfo | null;
}
export default function Nav({ walletInfo }: NavProps) {
const history = useHistory();
const { toggleColorMode } = useColorMode();
const navBarLog = useColorModeValue(
<Image src={logoBlack} w="128px" />,
<Image src={logoWhite} w="128px" />,
);
const toggleIcon = useColorModeValue(
<MoonIcon />,
<SunIcon />,
);
return (
<>
<Box bg={useColorModeValue("gray.100", "gray.900")} px={4}>
<Flex h={16} alignItems={"center"} justifyContent={"space-between"}>
<Menu>
<MenuButton
as={Button}
variant={"link"}
cursor={"pointer"}
minW={0}
>
<HamburgerIcon w={"32px"} />
</MenuButton>
<MenuList alignItems={"center"}>
<MenuItem onClick={() => history.push("/trade")}>Home</MenuItem>
<MenuItem onClick={() => history.push("/wallet")}>Wallet</MenuItem>
<MenuItem>Settings</MenuItem>
</MenuList>
</Menu>
<WalletNavBar walletInfo={walletInfo} />
<Flex alignItems={"center"}>
<Stack direction={"row"} spacing={7}>
<Button onClick={toggleColorMode} bg={"transparent"}>
{toggleIcon}
</Button>
<Box>
<Button bg={"transparent"} onClick={() => history.push("/trade")}>
{navBarLog}
</Button>
</Box>
</Stack>
</Flex>
</Flex>
</Box>
</>
);
}

26
taker-frontend/src/components/Timestamp.tsx

@ -0,0 +1,26 @@
import { Text } from "@chakra-ui/react";
import React from "react";
import { unixTimestampToDate } from "./Types";
interface Props {
timestamp: number;
}
export default function Timestamp(
{
timestamp,
}: Props,
) {
return (
<Text>
{unixTimestampToDate(timestamp).toLocaleDateString("en-US", {
year: "numeric",
month: "numeric",
day: "numeric",
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
})}
</Text>
);
}

294
taker-frontend/src/components/Trade.tsx

@ -0,0 +1,294 @@
import { BoxProps } from "@chakra-ui/layout";
import {
Box,
Button,
ButtonGroup,
Center,
Checkbox,
Circle,
FormControl,
FormHelperText,
FormLabel,
Grid,
GridItem,
HStack,
Modal,
ModalBody,
ModalCloseButton,
ModalContent,
ModalFooter,
ModalHeader,
ModalOverlay,
NumberDecrementStepper,
NumberIncrementStepper,
NumberInput,
NumberInputField,
NumberInputStepper,
Skeleton,
Slider,
SliderFilledTrack,
SliderThumb,
SliderTrack,
Table,
TableCaption,
Tbody,
Td,
Text,
Tr,
useColorModeValue,
useDisclosure,
VStack,
} from "@chakra-ui/react";
import { motion } from "framer-motion";
import * as React from "react";
import { useAsync } from "react-async";
import { CfdOrderRequestPayload } from "./Types";
const MotionBox = motion<BoxProps>(Box);
interface TradeProps {
order_id?: string;
min_quantity: number;
max_quantity: number;
price?: number;
margin?: string;
leverage?: number;
quantity: string;
liquidationPrice?: number;
isSubmitting: boolean;
onQuantityChange: any;
onLongSubmit: (payload: CfdOrderRequestPayload) => void;
}
const Trade = (
{
min_quantity,
max_quantity,
price: priceAsNumber,
quantity,
onQuantityChange,
margin: marginAsNumber,
leverage,
liquidationPrice: liquidationPriceAsNumber,
onLongSubmit,
order_id,
}: TradeProps,
) => {
let outerCircleBg = useColorModeValue("gray.100", "gray.700");
let innerCircleBg = useColorModeValue("gray.200", "gray.600");
const price = `$${priceAsNumber?.toLocaleString() || "0.0"}`;
const liquidationPrice = `$${liquidationPriceAsNumber?.toLocaleString() || "0.0"}`;
const margin = `${marginAsNumber?.toLocaleString() || "0.0"}`;
const { isOpen, onOpen, onClose } = useDisclosure();
let { run: goLong, isLoading: isSubmitting } = useAsync({
deferFn: async () => {
const quantityAsNumber = quantity.replace("$", "");
let payload: CfdOrderRequestPayload = {
order_id: order_id!,
quantity: Number.parseFloat(quantityAsNumber),
};
await onLongSubmit(payload);
onClose();
},
});
return (
<Center>
<Grid
templateRows="repeat(1, 1fr)"
templateColumns="repeat(1, 1fr)"
gap={4}
>
<GridItem colSpan={1}>
<Center>
<MotionBox
variants={{
pulse: {
scale: [1, 1.05, 1],
},
}}
// @ts-ignore: lint is complaining but should be fine :)
transition={{
// type: "spring",
ease: "linear",
duration: 2,
repeat: Infinity,
}}
animate={"pulse"}
>
<Circle size="256px" bg={outerCircleBg}>
<Circle size="180px" bg={innerCircleBg}>
<MotionBox>
<Skeleton isLoaded={!!price}>
<Text fontSize={"4xl"} as="b">{price}</Text>
</Skeleton>
</MotionBox>
</Circle>
</Circle>
</MotionBox>
</Center>
</GridItem>
<GridItem colSpan={1}>
<Quantity min={min_quantity} max={max_quantity} quantity={quantity} onChange={onQuantityChange} />
</GridItem>
<GridItem colSpan={1}>
<Leverage leverage={leverage} />
</GridItem>
<GridItem colSpan={1}>
<Margin margin={margin} />
</GridItem>
<GridItem colSpan={1}>
<Liquidation value={liquidationPrice} />
</GridItem>
<GridItem colSpan={1}>
<Center>
<ButtonGroup variant="solid" padding="3" spacing="6">
<Button colorScheme="red" size="lg" disabled h={16}>
<VStack>
<Text as="b">Short</Text>
<Text fontSize={"sm"}>{quantity.replace("$", "")}@{price}</Text>
</VStack>
</Button>
<Button colorScheme="green" size="lg" onClick={onOpen} h={16}>
<VStack>
<Text as="b">Long</Text>
<Text fontSize={"sm"}>{quantity.replace("$", "")}@{price}</Text>
</VStack>
</Button>
<Modal isOpen={isOpen} onClose={onClose}>
<ModalOverlay />
<ModalContent>
<ModalHeader>Market buy <b>{quantity}</b> of BTC/USD @ <b>{price}</b></ModalHeader>
<ModalCloseButton />
<ModalBody>
<Table variant="striped" colorScheme="gray" size="sm">
<TableCaption>
By submitting {margin} will be locked on-chain in a contract.
</TableCaption>
<Tbody>
<Tr>
<Td><Text as={"b"}>Margin</Text></Td>
<Td>{margin}</Td>
</Tr>
<Tr>
<Td><Text as={"b"}>Leverage</Text></Td>
<Td>{leverage}</Td>
</Tr>
<Tr>
<Td><Text as={"b"}>Liquidation Price</Text></Td>
<Td>{liquidationPrice}</Td>
</Tr>
</Tbody>
</Table>
</ModalBody>
<ModalFooter>
<HStack>
<Button colorScheme="teal" isLoading={isSubmitting} onClick={goLong}>
Confirm
</Button>
<Checkbox defaultIsChecked>Always show this dialog</Checkbox>
</HStack>
</ModalFooter>
</ModalContent>
</Modal>
</ButtonGroup>
</Center>
</GridItem>
</Grid>
</Center>
);
};
export default Trade;
interface QuantityProps {
min: number;
max: number;
quantity: string;
onChange: any;
}
function Quantity({ min, max, onChange, quantity }: QuantityProps) {
return (
<FormControl id="quantity">
<FormLabel>Quantity</FormLabel>
<NumberInput
min={min}
max={max}
default={min}
onChange={onChange}
value={quantity}
>
<NumberInputField />
<NumberInputStepper>
<NumberIncrementStepper />
<NumberDecrementStepper />
</NumberInputStepper>
</NumberInput>
<FormHelperText>How much do you want to buy or sell?</FormHelperText>
</FormControl>
);
}
interface LeverageProps {
leverage?: number;
}
function Leverage({ leverage }: LeverageProps) {
return (
<FormControl id="leverage">
<FormLabel>Leverage (fixed to 2 atm)</FormLabel>
<Slider isReadOnly defaultValue={leverage} min={1} max={5} step={1}>
<SliderTrack>
<Box position="relative" right={10} />
<SliderFilledTrack />
</SliderTrack>
<SliderThumb boxSize={6}>
<Text color="black">{leverage}</Text>
</SliderThumb>
</Slider>
<FormHelperText>
How much do you want to leverage your position?
</FormHelperText>
</FormControl>
);
}
interface MarginProps {
margin?: string;
}
function Margin({ margin }: MarginProps) {
return (
<VStack>
<HStack>
<Text as={"b"}>Required margin:</Text>
<Text>{margin}</Text>
</HStack>
<Text fontSize={"sm"} color={"darkgrey"}>The collateral you will need to provide</Text>
</VStack>
);
}
interface LiquidationProps {
value?: string;
}
function Liquidation({ value }: LiquidationProps) {
return (
<VStack>
<HStack>
<Text as={"b"}>Liquidation price:</Text>
<Text>{value || "0.0"}</Text>
</HStack>
<Text fontSize={"sm"} color={"darkgrey"}>
You will lose your collateral if the price drops below this value
</Text>
</VStack>
);
}

267
taker-frontend/src/components/Types.tsx

@ -0,0 +1,267 @@
export interface WalletInfo {
balance: number;
address: string;
last_updated_at: number;
}
export function unixTimestampToDate(unixTimestamp: number): Date {
return new Date(unixTimestamp * 1000);
}
export interface Order {
id: string;
trading_pair: string;
position: Position;
price: number;
min_quantity: number;
max_quantity: number;
leverage: number;
liquidation_price: number;
creation_timestamp: number;
settlement_time_interval_in_secs: number;
}
export class Position {
constructor(public key: PositionKey) {}
public getColorScheme(): string {
switch (this.key) {
case PositionKey.LONG:
return "green";
case PositionKey.SHORT:
return "blue";
}
}
}
enum PositionKey {
LONG = "Long",
SHORT = "Short",
}
export interface Cfd {
order_id: string;
initial_price: number;
leverage: number;
trading_pair: string;
position: Position;
liquidation_price: number;
quantity_usd: number;
margin: number;
profit_btc: number;
profit_in_percent: number;
state: State;
state_transition_timestamp: number;
details: CfdDetails;
expiry_timestamp: number;
}
export interface CfdDetails {
tx_url_list: Tx[];
payout?: number;
}
export interface Tx {
label: TxLabel;
url: string;
}
export enum TxLabel {
Lock = "Lock",
Commit = "Commit",
Cet = "Cet",
Refund = "Refund",
Collaborative = "Collaborative",
}
export class State {
constructor(public key: StateKey) {}
public getLabel(): string {
switch (this.key) {
case StateKey.INCOMING_ORDER_REQUEST:
return "Order Requested";
case StateKey.OUTGOING_ORDER_REQUEST:
return "Order Requested";
case StateKey.ACCEPTED:
return "Accepted";
case StateKey.REJECTED:
return "Rejected";
case StateKey.CONTRACT_SETUP:
return "Contract Setup";
case StateKey.PENDING_OPEN:
return "Pending Open";
case StateKey.OPEN:
return "Open";
case StateKey.PENDING_COMMIT:
return "Pending Commit";
case StateKey.PENDING_CLOSE:
return "Pending Close";
case StateKey.OPEN_COMMITTED:
return "Open (commit-tx published)";
case StateKey.INCOMING_SETTLEMENT_PROPOSAL:
return "Settlement Proposed";
case StateKey.OUTGOING_SETTLEMENT_PROPOSAL:
return "Settlement Proposed";
case StateKey.INCOMING_ROLL_OVER_PROPOSAL:
return "Rollover Proposed";
case StateKey.OUTGOING_ROLL_OVER_PROPOSAL:
return "Rollover Proposed";
case StateKey.MUST_REFUND:
return "Refunding";
case StateKey.REFUNDED:
return "Refunded";
case StateKey.SETUP_FAILED:
return "Setup Failed";
case StateKey.PENDING_CET:
return "Pending CET";
case StateKey.CLOSED:
return "Closed";
}
}
public getColorScheme(): string {
const default_color = "gray";
const green = "green";
const red = "red";
const orange = "orange";
switch (this.key) {
case StateKey.ACCEPTED:
case StateKey.OPEN:
return green;
case StateKey.REJECTED:
return red;
case StateKey.PENDING_COMMIT:
case StateKey.OPEN_COMMITTED:
case StateKey.MUST_REFUND:
case StateKey.PENDING_CET:
case StateKey.PENDING_CLOSE:
return orange;
case StateKey.OUTGOING_ORDER_REQUEST:
case StateKey.INCOMING_ORDER_REQUEST:
case StateKey.OUTGOING_SETTLEMENT_PROPOSAL:
case StateKey.INCOMING_SETTLEMENT_PROPOSAL:
case StateKey.INCOMING_ROLL_OVER_PROPOSAL:
case StateKey.OUTGOING_ROLL_OVER_PROPOSAL:
case StateKey.CONTRACT_SETUP:
case StateKey.PENDING_OPEN:
case StateKey.REFUNDED:
case StateKey.SETUP_FAILED:
case StateKey.CLOSED:
return default_color;
}
}
public getGroup(): StateGroupKey {
switch (this.key) {
case StateKey.INCOMING_ORDER_REQUEST:
return StateGroupKey.PENDING_ORDER;
case StateKey.OUTGOING_ORDER_REQUEST:
case StateKey.ACCEPTED:
case StateKey.CONTRACT_SETUP:
return StateGroupKey.OPENING;
case StateKey.PENDING_OPEN:
case StateKey.OPEN:
case StateKey.PENDING_COMMIT:
case StateKey.OPEN_COMMITTED:
case StateKey.MUST_REFUND:
case StateKey.OUTGOING_SETTLEMENT_PROPOSAL:
case StateKey.OUTGOING_ROLL_OVER_PROPOSAL:
case StateKey.PENDING_CET:
case StateKey.PENDING_CLOSE:
return StateGroupKey.OPEN;
case StateKey.INCOMING_SETTLEMENT_PROPOSAL:
return StateGroupKey.PENDING_SETTLEMENT;
case StateKey.INCOMING_ROLL_OVER_PROPOSAL:
return StateGroupKey.PENDING_ROLL_OVER;
case StateKey.REJECTED:
case StateKey.REFUNDED:
case StateKey.SETUP_FAILED:
case StateKey.CLOSED:
return StateGroupKey.CLOSED;
}
}
}
export const enum StateKey {
OUTGOING_ORDER_REQUEST = "OutgoingOrderRequest",
INCOMING_ORDER_REQUEST = "IncomingOrderRequest",
ACCEPTED = "Accepted",
REJECTED = "Rejected",
CONTRACT_SETUP = "ContractSetup",
PENDING_OPEN = "PendingOpen",
OPEN = "Open",
PENDING_CLOSE = "PendingClose",
PENDING_COMMIT = "PendingCommit",
PENDING_CET = "PendingCet",
OPEN_COMMITTED = "OpenCommitted",
OUTGOING_SETTLEMENT_PROPOSAL = "OutgoingSettlementProposal",
INCOMING_SETTLEMENT_PROPOSAL = "IncomingSettlementProposal",
OUTGOING_ROLL_OVER_PROPOSAL = "OutgoingRollOverProposal",
INCOMING_ROLL_OVER_PROPOSAL = "IncomingRollOverProposal",
MUST_REFUND = "MustRefund",
REFUNDED = "Refunded",
SETUP_FAILED = "SetupFailed",
CLOSED = "Closed",
}
export enum StateGroupKey {
/// A CFD which is still being set up (not on chain yet)
OPENING = "Opening",
PENDING_ORDER = "Pending Order",
/// A CFD that is an ongoing open position (on chain)
OPEN = "Open",
PENDING_SETTLEMENT = "Pending Settlement",
PENDING_ROLL_OVER = "Pending Roll Over",
/// A CFD that has been successfully or not-successfully terminated
CLOSED = "Closed",
}
export interface MarginRequestPayload {
price: number;
quantity: number;
leverage: number;
}
export interface MarginResponse {
margin: number;
}
export interface CfdOrderRequestPayload {
order_id: string;
quantity: number;
}
export function intoOrder(key: string, value: any): any {
switch (key) {
case "position":
return new Position(value);
default:
return value;
}
}
export function intoCfd(key: string, value: any): any {
switch (key) {
case "position":
return new Position(value);
case "state":
return new State(value);
default:
return value;
}
}

67
taker-frontend/src/components/Wallet.tsx

@ -0,0 +1,67 @@
import { CheckIcon, CopyIcon } from "@chakra-ui/icons";
import { Box, Center, Divider, HStack, IconButton, Skeleton, Text, useClipboard } from "@chakra-ui/react";
import * as React from "react";
import Timestamp from "./Timestamp";
import { WalletInfo } from "./Types";
interface WalletProps {
walletInfo: WalletInfo | null;
}
export default function Wallet(
{
walletInfo,
}: WalletProps,
) {
const { hasCopied, onCopy } = useClipboard(walletInfo ? walletInfo.address : "");
const { balance, address, last_updated_at } = walletInfo || {};
return (
<Center>
<Box shadow={"md"} marginBottom={5} padding={5} boxSize={"sm"}>
<Center><Text fontWeight={"bold"}>Your wallet</Text></Center>
<HStack>
<Text align={"left"}>Balance:</Text>
<Skeleton isLoaded={balance != null}>
<Text>{balance} BTC</Text>
</Skeleton>
</HStack>
<Divider marginTop={2} marginBottom={2} />
<Skeleton isLoaded={address != null}>
<HStack>
<Text isTruncated>{address}</Text>
<IconButton
aria-label="Copy to clipboard"
icon={hasCopied ? <CheckIcon /> : <CopyIcon />}
onClick={onCopy}
/>
</HStack>
</Skeleton>
<Divider marginTop={2} marginBottom={2} />
<HStack>
<Text align={"left"}>Updated:</Text>
<Skeleton isLoaded={last_updated_at != null}>
<Timestamp timestamp={last_updated_at!} />
</Skeleton>
</HStack>
</Box>
</Center>
);
}
const WalletNavBar = ({
walletInfo,
}: WalletProps) => {
const { balance } = walletInfo || {};
return (
<HStack>
<Text align={"left"} as="b">On-chain balance:</Text>
<Skeleton isLoaded={balance != null}>
<Text>{balance} BTC</Text>
</Skeleton>
</HStack>
);
};
export { Wallet, WalletNavBar };

15
taker-frontend/src/favicon.svg

@ -0,0 +1,15 @@
<svg width="410" height="404" viewBox="0 0 410 404" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M399.641 59.5246L215.643 388.545C211.844 395.338 202.084 395.378 198.228 388.618L10.5817 59.5563C6.38087 52.1896 12.6802 43.2665 21.0281 44.7586L205.223 77.6824C206.398 77.8924 207.601 77.8904 208.776 77.6763L389.119 44.8058C397.439 43.2894 403.768 52.1434 399.641 59.5246Z" fill="url(#paint0_linear)"/>
<path d="M292.965 1.5744L156.801 28.2552C154.563 28.6937 152.906 30.5903 152.771 32.8664L144.395 174.33C144.198 177.662 147.258 180.248 150.51 179.498L188.42 170.749C191.967 169.931 195.172 173.055 194.443 176.622L183.18 231.775C182.422 235.487 185.907 238.661 189.532 237.56L212.947 230.446C216.577 229.344 220.065 232.527 219.297 236.242L201.398 322.875C200.278 328.294 207.486 331.249 210.492 326.603L212.5 323.5L323.454 102.072C325.312 98.3645 322.108 94.137 318.036 94.9228L279.014 102.454C275.347 103.161 272.227 99.746 273.262 96.1583L298.731 7.86689C299.767 4.27314 296.636 0.855181 292.965 1.5744Z" fill="url(#paint1_linear)"/>
<defs>
<linearGradient id="paint0_linear" x1="6.00017" y1="32.9999" x2="235" y2="344" gradientUnits="userSpaceOnUse">
<stop stop-color="#41D1FF"/>
<stop offset="1" stop-color="#BD34FE"/>
</linearGradient>
<linearGradient id="paint1_linear" x1="194.651" y1="8.81818" x2="236.076" y2="292.989" gradientUnits="userSpaceOnUse">
<stop stop-color="#FFEA83"/>
<stop offset="0.0833333" stop-color="#FFDD35"/>
<stop offset="1" stop-color="#FFA800"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

17
taker-frontend/src/images/logo.svg

@ -0,0 +1,17 @@
<svg width="179" height="179" viewBox="0 0 179 179" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M88.3279 0H90.6721C139.454 0 179 40.0705 179 89.5C179 138.93 139.454 179 90.6721 179H88.3279C39.5459 179 0 138.93 0 89.5C0 40.0705 39.5459 0 88.3279 0Z" fill="#F7931A"/>
<path d="M88.4026 5.68115H90.5974C136.282 5.68115 173.317 43.2075 173.317 89.4986C173.317 135.79 136.282 173.316 90.5974 173.316H88.4026C42.7175 173.316 5.68252 135.79 5.68252 89.4986C5.68252 43.2075 42.7175 5.68115 88.4026 5.68115Z" fill="black"/>
<path d="M137.789 76.6935C140.036 62.9617 128.582 55.5799 112.919 50.655L118 32.0538L105.591 29.2319L100.645 47.3432C97.3874 46.6015 94.038 45.9017 90.7097 45.2083L95.6912 26.9776L83.2933 24.1558L78.2091 42.7509C75.5101 42.1897 72.8603 41.635 70.2881 41.0513L70.3021 40.9933L53.1944 37.0943L49.8945 49.1879C49.8945 49.1879 59.0984 51.1131 58.904 51.2323C63.9281 52.3773 64.8396 55.412 64.6842 57.8179L58.897 79.0091C59.2432 79.0893 59.6917 79.2055 60.1868 79.3864L58.8794 79.0893L50.7635 108.775C50.1487 110.168 48.5908 112.258 45.0788 111.465C45.2025 111.629 36.0622 109.411 36.0622 109.411L29.9039 122.375L46.0504 126.048C49.0536 126.735 51.9968 127.454 54.8906 128.131L49.7567 146.949L62.1477 149.771L67.2354 131.156C70.6163 131.995 73.9021 132.769 77.1177 133.497L72.051 152.025L84.4559 154.846L89.5897 136.068C110.742 139.722 126.652 138.248 133.341 120.788C138.736 106.727 133.076 98.6164 121.946 93.3242C130.051 91.6119 136.156 86.7457 137.786 76.6935H137.789ZM109.443 112.971C105.606 127.032 79.6718 119.434 71.2598 117.525L78.0713 92.5986C86.4803 94.5143 113.442 98.3072 109.446 112.971H109.443ZM113.276 76.4901C109.778 89.2803 88.1906 82.7819 81.1842 81.1889L87.3603 58.582C94.3662 60.1751 116.922 63.1486 113.276 76.4901Z" fill="#F7931A" fill-opacity="0.49935"/>
<path d="M30.296 100.014C30.296 98.8628 30.1667 98.5712 31.3378 97.4096C41.625 87.2051 52.0356 77.1228 62.5919 67.1974C64.908 65.0191 67.852 63.6221 70.4051 61.7279C77.9382 56.1385 86.0296 51.7068 94.6271 47.9239C101.094 45.0783 107.576 43.5632 114.421 42.194C115.751 41.9281 117.236 42.3443 118.588 42.194C119.974 42.0401 121.194 41.586 122.495 41.1522C123.326 40.8752 125.414 41 124.839 39.85" fill="black"/>
<path d="M30.296 100.014C30.296 98.8628 30.1667 98.5712 31.3378 97.4096C41.625 87.2051 52.0356 77.1228 62.5919 67.1974C64.908 65.0191 67.852 63.6221 70.4051 61.7279C77.9382 56.1385 86.0296 51.7068 94.6271 47.9239C101.094 45.0783 107.576 43.5632 114.421 42.194C115.751 41.9281 117.236 42.3443 118.588 42.194C119.974 42.0401 121.194 41.586 122.495 41.1522C123.326 40.8752 125.414 41 124.839 39.85" stroke="black" stroke-width="0.0254068"/>
<path d="M28.2128 126.578C26.7383 126.578 28.3583 124.053 28.7337 123.453C30.3453 120.874 32.1642 118.165 34.2032 115.9C35.9047 114.009 38.062 112.652 39.9331 110.951C42.0617 109.016 43.7567 106.626 45.9234 104.701C48.6262 102.298 51.8787 100.781 54.7786 98.7099C57.7181 96.6103 60.3514 94.2135 63.3736 92.199C64.8899 91.1878 66.496 90.2733 68.0614 89.3337C69.8955 88.2338 71.3352 86.2364 73.531 85.6877C79.2632 84.2545 85.0624 81.8517 90.1998 78.9157C97.4453 74.7756 104.523 71.1681 112.338 68.2377C113.72 67.7195 114.884 66.5735 116.245 65.8935C120.658 63.6871 125.159 61.3785 129.788 59.6427C132.568 58.5999 135.571 58.2361 138.383 57.2985C141.242 56.3454 144.113 55.0065 146.978 54.4337C148.627 54.104 150.951 54.1401 152.447 53.3919" fill="black"/>
<path d="M28.2128 126.578C26.7383 126.578 28.3583 124.053 28.7337 123.453C30.3453 120.874 32.1642 118.165 34.2032 115.9C35.9047 114.009 38.062 112.652 39.9331 110.951C42.0617 109.016 43.7567 106.626 45.9234 104.701C48.6262 102.298 51.8787 100.781 54.7786 98.7099C57.7181 96.6103 60.3514 94.2135 63.3736 92.199C64.8899 91.1878 66.496 90.2733 68.0614 89.3337C69.8955 88.2338 71.3352 86.2364 73.531 85.6877C79.2632 84.2545 85.0624 81.8517 90.1998 78.9157C97.4453 74.7756 104.523 71.1681 112.338 68.2377C113.72 67.7195 114.884 66.5735 116.245 65.8935C120.658 63.6871 125.159 61.3785 129.788 59.6427C132.568 58.5999 135.571 58.2361 138.383 57.2985C141.242 56.3454 144.113 55.0065 146.978 54.4337C148.627 54.104 150.951 54.1401 152.447 53.3919" stroke="black" stroke-width="0.0254068"/>
<path d="M53.4767 135.176C51.8757 135.176 54.0044 133.319 54.2584 133.093C56.6637 130.954 59.3296 129.146 61.8111 127.102C63.4748 125.732 64.8438 124.03 66.4994 122.675C71.2625 118.778 76.8708 115.23 82.1264 111.997C89.6029 107.395 97.5039 103.375 105.567 100.016C108.391 98.839 111.166 97.2159 113.901 95.8484C116.58 94.5089 119.519 94.07 122.235 92.9836C126.637 91.2227 131.119 89.5931 135.779 88.8164C137.444 88.5388 139 87.281 140.728 86.9933C143.22 86.5779 145.597 85.915 148.02 85.4304C148.58 85.3186 150.435 85.4705 150.885 85.1698C151.548 84.7278 151.198 84.6492 152.188 84.6492" fill="black"/>
<path d="M53.4767 135.176C51.8757 135.176 54.0044 133.319 54.2584 133.093C56.6637 130.954 59.3296 129.146 61.8111 127.102C63.4748 125.732 64.8438 124.03 66.4994 122.675C71.2625 118.778 76.8708 115.23 82.1264 111.997C89.6029 107.395 97.5039 103.375 105.567 100.016C108.391 98.839 111.166 97.2159 113.901 95.8484C116.58 94.5089 119.519 94.07 122.235 92.9836C126.637 91.2227 131.119 89.5931 135.779 88.8164C137.444 88.5388 139 87.281 140.728 86.9933C143.22 86.5779 145.597 85.915 148.02 85.4304C148.58 85.3186 150.435 85.4705 150.885 85.1698C151.548 84.7278 151.198 84.6492 152.188 84.6492" stroke="black" stroke-width="0.0254068"/>
<path d="M30.296 100.014C30.296 98.8628 30.1667 98.5712 31.3378 97.4096C41.625 87.2051 52.0356 77.1228 62.5919 67.1974C64.908 65.0191 67.852 63.6221 70.4051 61.7279C77.9382 56.1385 86.0296 51.7068 94.6271 47.9239C101.094 45.0783 107.576 43.5632 114.421 42.194C115.751 41.9281 117.236 42.3443 118.588 42.194C119.974 42.0401 121.194 41.586 122.495 41.1522C123.326 40.8752 125.414 41 124.839 39.85" fill="white"/>
<path d="M30.296 100.014C30.296 98.8628 30.1667 98.5712 31.3378 97.4096C41.625 87.2051 52.0356 77.1228 62.5919 67.1974C64.908 65.0191 67.852 63.6221 70.4051 61.7279C77.9382 56.1385 86.0296 51.7068 94.6271 47.9239C101.094 45.0783 107.576 43.5632 114.421 42.194C115.751 41.9281 117.236 42.3443 118.588 42.194C119.974 42.0401 121.194 41.586 122.495 41.1522C123.326 40.8752 125.414 41 124.839 39.85" stroke="white" stroke-width="0.0254068"/>
<path d="M28.2128 126.578C26.7383 126.578 28.3583 124.053 28.7337 123.453C30.3453 120.874 32.1642 118.165 34.2032 115.9C35.9047 114.009 38.062 112.652 39.9331 110.951C42.0617 109.016 43.7567 106.626 45.9234 104.701C48.6262 102.298 51.8787 100.781 54.7786 98.7099C57.7181 96.6103 60.3514 94.2135 63.3736 92.199C64.8899 91.1878 66.496 90.2733 68.0614 89.3337C69.8955 88.2338 71.3352 86.2364 73.531 85.6877C79.2632 84.2545 85.0624 81.8517 90.1998 78.9157C97.4453 74.7756 104.523 71.1681 112.338 68.2377C113.72 67.7195 114.884 66.5735 116.245 65.8935C120.658 63.6871 125.159 61.3785 129.788 59.6427C132.568 58.5999 135.571 58.2361 138.383 57.2985C141.242 56.3454 144.113 55.0065 146.978 54.4337C148.627 54.104 150.951 54.1401 152.447 53.3919" fill="white"/>
<path d="M28.2128 126.578C26.7383 126.578 28.3583 124.053 28.7337 123.453C30.3453 120.874 32.1642 118.165 34.2032 115.9C35.9047 114.009 38.062 112.652 39.9331 110.951C42.0617 109.016 43.7567 106.626 45.9234 104.701C48.6262 102.298 51.8787 100.781 54.7786 98.7099C57.7181 96.6103 60.3514 94.2135 63.3736 92.199C64.8899 91.1878 66.496 90.2733 68.0614 89.3337C69.8955 88.2338 71.3352 86.2364 73.531 85.6877C79.2632 84.2545 85.0624 81.8517 90.1998 78.9157C97.4453 74.7756 104.523 71.1681 112.338 68.2377C113.72 67.7195 114.884 66.5735 116.245 65.8935C120.658 63.6871 125.159 61.3785 129.788 59.6427C132.568 58.5999 135.571 58.2361 138.383 57.2985C141.242 56.3454 144.113 55.0065 146.978 54.4337C148.627 54.104 150.951 54.1401 152.447 53.3919" stroke="white" stroke-width="0.0254068"/>
<path d="M53.4767 135.176C51.8757 135.176 54.0044 133.319 54.2584 133.093C56.6637 130.954 59.3296 129.146 61.8111 127.102C63.4748 125.732 64.8438 124.03 66.4994 122.675C71.2625 118.778 76.8708 115.23 82.1264 111.997C89.6029 107.395 97.5039 103.375 105.567 100.016C108.391 98.839 111.166 97.2159 113.901 95.8484C116.58 94.5089 119.519 94.07 122.235 92.9836C126.637 91.2227 131.119 89.5931 135.779 88.8164C137.444 88.5388 139 87.281 140.728 86.9933C143.22 86.5779 145.597 85.915 148.02 85.4304C148.58 85.3186 150.435 85.4705 150.885 85.1698C151.548 84.7278 151.198 84.6492 152.188 84.6492" fill="white"/>
<path d="M53.4767 135.176C51.8757 135.176 54.0044 133.319 54.2584 133.093C56.6637 130.954 59.3296 129.146 61.8111 127.102C63.4748 125.732 64.8438 124.03 66.4994 122.675C71.2625 118.778 76.8708 115.23 82.1264 111.997C89.6029 107.395 97.5039 103.375 105.567 100.016C108.391 98.839 111.166 97.2159 113.901 95.8484C116.58 94.5089 119.519 94.07 122.235 92.9836C126.637 91.2227 131.119 89.5931 135.779 88.8164C137.444 88.5388 139 87.281 140.728 86.9933C143.22 86.5779 145.597 85.915 148.02 85.4304C148.58 85.3186 150.435 85.4705 150.885 85.1698C151.548 84.7278 151.198 84.6492 152.188 84.6492" stroke="white" stroke-width="0.0254068"/>
</svg>

After

Width:  |  Height:  |  Size: 8.8 KiB

BIN
taker-frontend/src/images/logo_nav_bar_black.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

43
taker-frontend/src/images/logo_nav_bar_black.svg

@ -0,0 +1,43 @@
<svg width="364" height="100" viewBox="0 0 364 100" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M125.961 74.8338C126.273 73.0477 124.684 72.0875 122.512 71.4469L123.217 69.0273L121.496 68.6602L120.81 71.0161C120.358 70.9197 119.894 70.8285 119.432 70.7384L120.123 68.3669L118.404 68L117.699 70.4188C117.325 70.3457 116.957 70.2735 116.6 70.1977L116.602 70.1901L114.23 69.683L113.772 71.2561C113.772 71.2561 115.048 71.5066 115.022 71.5219C115.718 71.671 115.845 72.0656 115.823 72.3786L115.021 75.1352C115.069 75.1456 115.131 75.1607 115.199 75.1841L115.018 75.1456L113.893 79.0072C113.807 79.1884 113.591 79.4601 113.104 79.3568C113.122 79.3783 111.854 79.0898 111.854 79.0898L111 80.7762L113.239 81.2539C113.656 81.3433 114.064 81.4368 114.465 81.525L113.753 83.9727L115.471 84.3396L116.177 81.9183C116.646 82.0275 117.101 82.1281 117.547 82.223L116.845 84.6329L118.565 85L119.277 82.5574C122.21 83.0325 124.417 82.8408 125.344 80.5696C126.092 78.7407 125.307 77.6857 123.764 76.9973C124.888 76.7745 125.735 76.1416 125.96 74.8338H125.961ZM122.03 79.5528C121.498 81.3818 117.902 80.3935 116.735 80.1452L117.68 76.9029C118.846 77.1521 122.585 77.6453 122.03 79.5528H122.03ZM122.562 74.8074C122.077 76.4713 119.083 75.626 118.111 75.4186L118.968 72.4781C119.939 72.6853 123.067 73.072 122.562 74.8074Z" fill="black"/>
<path d="M132.686 77.5155C132.595 77.1306 132.408 76.8219 132.124 76.5891C131.841 76.356 131.497 76.2398 131.092 76.2398C130.666 76.2398 130.32 76.3511 130.051 76.5739C129.783 76.7965 129.614 77.1104 129.543 77.5155H132.686ZM129.467 79.1102C129.467 80.2948 130.024 80.8871 131.137 80.8871C131.735 80.8871 132.185 80.6441 132.489 80.1581H135.147C134.61 81.94 133.269 82.8311 131.122 82.8311C130.464 82.8311 129.862 82.7324 129.315 82.5349C128.768 82.3375 128.3 82.0565 127.91 81.692C127.52 81.3275 127.219 80.8921 127.006 80.3859C126.794 79.8795 126.687 79.3126 126.687 78.6849C126.687 78.0369 126.789 77.4521 126.991 76.9308C127.194 76.4092 127.482 75.9664 127.857 75.6019C128.231 75.2374 128.684 74.9564 129.216 74.759C129.748 74.5615 130.348 74.4628 131.016 74.4628C131.674 74.4628 132.266 74.5615 132.793 74.759C133.319 74.9564 133.765 75.2424 134.129 75.6171C134.494 75.9916 134.772 76.4498 134.964 76.9915C135.157 77.5331 135.253 78.1432 135.253 78.8216V79.1102H129.467Z" fill="black"/>
<path d="M139.885 77.0452V82.5431H137.136V77.0452H136.225V74.7519H137.136V72.4131H139.885V74.7519H141.449V77.0452H139.885Z" fill="black"/>
<path d="M145.55 77.0452V82.5431H142.801V77.0452H141.89V74.7519H142.801V72.4131H145.55V74.7519H147.114V77.0452H145.55Z" fill="black"/>
<path d="M153.843 77.5155C153.752 77.1306 153.565 76.8219 153.281 76.5891C152.998 76.356 152.654 76.2398 152.249 76.2398C151.823 76.2398 151.477 76.3511 151.208 76.5739C150.94 76.7965 150.77 77.1104 150.699 77.5155H153.843ZM150.623 79.1102C150.623 80.2948 151.18 80.8871 152.294 80.8871C152.892 80.8871 153.342 80.6441 153.646 80.1581H156.304C155.767 81.94 154.426 82.8311 152.279 82.8311C151.621 82.8311 151.018 82.7324 150.472 82.5349C149.925 82.3375 149.457 82.0565 149.067 81.692C148.677 81.3275 148.376 80.8921 148.163 80.3859C147.95 79.8795 147.844 79.3126 147.844 78.6849C147.844 78.0369 147.945 77.4521 148.148 76.9308C148.351 76.4092 148.639 75.9664 149.014 75.6019C149.388 75.2374 149.841 74.9564 150.373 74.759C150.904 74.5615 151.504 74.4628 152.173 74.4628C152.831 74.4628 153.423 74.5615 153.949 74.759C154.476 74.9564 154.921 75.2424 155.286 75.6171C155.65 75.9916 155.929 76.4498 156.121 76.9915C156.314 77.5331 156.41 78.1432 156.41 78.8216V79.1102H150.623Z" fill="black"/>
<path d="M157.973 74.7501H160.722V76.0258C161.016 75.56 161.375 75.2031 161.8 74.9551C162.225 74.7069 162.722 74.583 163.289 74.583C163.36 74.583 163.438 74.583 163.524 74.583C163.61 74.583 163.709 74.593 163.82 74.6134V77.2408C163.456 77.0586 163.061 76.9674 162.636 76.9674C161.998 76.9674 161.519 77.1573 161.2 77.537C160.881 77.9166 160.722 78.471 160.722 79.2V82.5412H157.973V74.7501Z" fill="black"/>
<path d="M186.404 77.272C185.928 76.9479 185.447 76.786 184.961 76.786C184.698 76.786 184.452 76.8316 184.224 76.9227C183.996 77.0139 183.797 77.1429 183.624 77.31C183.452 77.4771 183.318 77.6745 183.222 77.9023C183.126 78.1301 183.078 78.3857 183.078 78.6693C183.078 78.9426 183.126 79.1932 183.222 79.4211C183.318 79.6489 183.45 79.8463 183.617 80.0134C183.784 80.1804 183.984 80.3095 184.217 80.4006C184.45 80.4918 184.698 80.5373 184.961 80.5373C185.477 80.5373 185.958 80.3601 186.404 80.0058V82.3446C185.725 82.6382 185.082 82.7851 184.475 82.7851C183.908 82.7851 183.369 82.6887 182.857 82.4965C182.346 82.3041 181.896 82.0281 181.506 81.6688C181.116 81.3093 180.805 80.879 180.572 80.3779C180.339 79.8767 180.222 79.3171 180.222 78.6997C180.222 78.082 180.334 77.5174 180.556 77.0063C180.779 76.4949 181.083 76.0544 181.468 75.685C181.853 75.3153 182.311 75.0267 182.842 74.8193C183.374 74.6116 183.943 74.5079 184.551 74.5079C185.219 74.5079 185.837 74.6496 186.404 74.9332V77.272Z" fill="black"/>
<path d="M187.969 74.7501H190.718V76.0258C191.012 75.56 191.371 75.2031 191.796 74.9551C192.222 74.7069 192.718 74.583 193.285 74.583C193.356 74.583 193.434 74.583 193.52 74.583C193.606 74.583 193.705 74.593 193.816 74.6134V77.2408C193.452 77.0586 193.057 76.9674 192.632 76.9674C191.994 76.9674 191.515 77.1573 191.196 77.537C190.877 77.9166 190.718 78.471 190.718 79.2V82.5412H187.969V74.7501Z" fill="black"/>
<path d="M197.582 78.6237C197.582 78.8767 197.627 79.1121 197.719 79.3299C197.81 79.5475 197.934 79.7374 198.091 79.8995C198.248 80.0613 198.435 80.188 198.653 80.2791C198.87 80.3703 199.106 80.4158 199.359 80.4158C199.602 80.4158 199.832 80.3703 200.05 80.2791C200.268 80.188 200.455 80.0613 200.612 79.8995C200.769 79.7374 200.895 79.5501 200.991 79.3375C201.088 79.1249 201.136 78.8971 201.136 78.6541C201.136 78.4111 201.088 78.1807 200.991 77.9631C200.895 77.7452 200.769 77.5554 200.612 77.3935C200.455 77.2315 200.268 77.105 200.05 77.0139C199.832 76.9227 199.602 76.8772 199.359 76.8772C199.106 76.8772 198.87 76.9227 198.653 77.0139C198.435 77.105 198.248 77.2315 198.091 77.3935C197.934 77.5554 197.81 77.7402 197.719 77.9479C197.627 78.1553 197.582 78.3807 197.582 78.6237ZM201.045 74.7509H203.809V82.5421H201.045V81.6764C200.458 82.4154 199.663 82.7851 198.66 82.7851C198.093 82.7851 197.572 82.6811 197.096 82.4737C196.62 82.2661 196.205 81.9749 195.851 81.6004C195.496 81.2257 195.22 80.7853 195.023 80.2791C194.825 79.7728 194.727 79.221 194.727 78.6237C194.727 78.0668 194.823 77.5378 195.015 77.0366C195.208 76.5355 195.476 76.0974 195.82 75.7229C196.164 75.3482 196.575 75.0521 197.05 74.8345C197.526 74.6166 198.053 74.5079 198.63 74.5079C199.602 74.5079 200.407 74.847 201.045 75.5255V74.7509Z" fill="black"/>
<path d="M208.745 77.0452V82.5431H205.996V77.0452H205.085V74.7519H205.996V72.4131H208.745V74.7519H210.309V77.0452H208.745Z" fill="black"/>
<path d="M217.22 77.272C216.744 76.9479 216.263 76.786 215.777 76.786C215.514 76.786 215.268 76.8316 215.041 76.9227C214.813 77.0139 214.613 77.1429 214.441 77.31C214.269 77.4771 214.135 77.6745 214.038 77.9023C213.942 78.1301 213.894 78.3857 213.894 78.6693C213.894 78.9426 213.942 79.1932 214.038 79.4211C214.135 79.6489 214.266 79.8463 214.433 80.0134C214.6 80.1804 214.8 80.3095 215.033 80.4006C215.266 80.4918 215.514 80.5373 215.777 80.5373C216.294 80.5373 216.775 80.3601 217.22 80.0058V82.3446C216.542 82.6382 215.899 82.7851 215.291 82.7851C214.724 82.7851 214.185 82.6887 213.674 82.4965C213.163 82.3041 212.712 82.0281 212.322 81.6688C211.932 81.3093 211.621 80.879 211.388 80.3779C211.155 79.8767 211.039 79.3171 211.039 78.6997C211.039 78.082 211.15 77.5174 211.373 77.0063C211.596 76.4949 211.899 76.0544 212.284 75.685C212.669 75.3153 213.127 75.0267 213.659 74.8193C214.19 74.6116 214.76 74.5079 215.367 74.5079C216.035 74.5079 216.653 74.6496 217.22 74.9332V77.272Z" fill="black"/>
<path d="M218.784 69.9353H221.533V75.7369C221.907 75.2812 222.287 74.9749 222.672 74.818C223.056 74.661 223.507 74.5826 224.023 74.5826C225.005 74.5826 225.747 74.8534 226.248 75.3952C226.749 75.9367 227 76.6683 227 77.5897V82.5408H224.251V78.6073C224.251 78.2124 224.221 77.8935 224.16 77.6505C224.099 77.4075 223.998 77.22 223.856 77.0885C223.613 76.8759 223.32 76.7696 222.975 76.7696C222.51 76.7696 222.153 76.9087 221.905 77.1873C221.657 77.4656 221.533 77.8631 221.533 78.3795V82.5408H218.784V69.9353Z" fill="black"/>
<path d="M173.789 76.7469C172.721 75.9239 172.05 75.1952 171.775 74.5605C171.499 73.9259 171.491 73.1813 171.748 72.3265C172.079 71.2282 172.69 70.4712 173.582 70.0553C174.474 69.6394 175.535 69.6164 176.763 69.9861C177.32 70.1538 177.858 70.3853 178.377 70.6802C178.896 70.975 179.391 71.3291 179.863 71.7426L179.159 74.0798C178.754 73.5625 178.315 73.1295 177.842 72.7806C177.369 72.4315 176.873 72.179 176.353 72.0225C175.774 71.8483 175.296 71.8309 174.917 71.9709C174.539 72.1106 174.285 72.3968 174.154 72.8296C174.053 73.165 174.082 73.4762 174.241 73.763C174.399 74.0496 174.796 74.433 175.43 74.9131L176.343 75.613C177.21 76.2633 177.784 76.9523 178.066 77.6805C178.349 78.4086 178.355 79.2218 178.084 80.12C177.716 81.3426 177.08 82.1469 176.176 82.5326C175.272 82.9184 174.09 82.8915 172.629 82.4517C172.029 82.271 171.448 82.018 170.889 81.6932C170.328 81.3682 169.809 80.9802 169.331 80.5296L170.077 78.0543C170.578 78.7011 171.094 79.2252 171.626 79.6271C172.157 80.0289 172.714 80.3176 173.299 80.4936C173.888 80.6711 174.386 80.6748 174.791 80.5047C175.196 80.3348 175.471 80.0089 175.616 79.5275C175.725 79.1649 175.713 78.8145 175.579 78.4761C175.445 78.1378 175.195 77.8282 174.832 77.5475L173.789 76.7469Z" fill="black"/>
<path d="M174.598 67L176 67.5531L175.402 71L174 70.4469L174.598 67Z" fill="black"/>
<path d="M176.897 68L179 68.5529L178.103 72L176 71.4469L176.897 68Z" fill="black"/>
<path d="M170.598 81L172 81.5531L171.402 85L170 84.4469L170.598 81Z" fill="black"/>
<path d="M173.598 82L175 82.4148L174.402 85L173 84.5852L173.598 82Z" fill="black"/>
<path d="M119.501 19.349V56.446H113.902V19.349H119.501Z" fill="black"/>
<path d="M138.651 24.6108V56.446H133.053V24.6108H124.524V19.349H147.157V24.6108H138.651Z" fill="black"/>
<path d="M179.566 21.3403V27.9716C176.33 25.2648 172.982 23.9112 169.523 23.9112C165.71 23.9112 162.499 25.2808 159.888 28.0195C157.261 30.7427 155.948 34.0744 155.948 38.0146C155.948 41.9072 157.261 45.1905 159.888 47.8657C162.515 50.5404 165.734 51.878 169.547 51.878C171.517 51.878 173.191 51.5578 174.568 50.9169C175.337 50.5966 176.134 50.164 176.959 49.6195C177.784 49.0749 178.653 48.418 179.566 47.6492V54.4007C176.362 56.2106 172.999 57.1156 169.475 57.1156C164.173 57.1156 159.648 55.2659 155.899 51.5656C152.168 47.8337 150.301 43.3325 150.301 38.063C150.301 33.3375 151.863 29.125 154.987 25.4247C158.831 20.8918 163.804 18.6253 169.907 18.6253C173.238 18.6253 176.458 19.5303 179.566 21.3403Z" fill="black"/>
<path d="M192.228 33.8612H208.229V19.349H213.827V56.446H208.229V39.123H192.228V56.446H186.629V19.349H192.228V33.8612Z" fill="black"/>
<path d="M230.214 40.4204L218.104 19.349H224.543L233.025 34.1732L241.53 19.349H247.969L235.812 40.4204V56.446H230.214V40.4204Z" fill="black"/>
<path d="M273.224 24.8722L268.683 27.5631C267.834 26.0894 267.025 25.1287 266.256 24.68C265.455 24.1675 264.422 23.9112 263.157 23.9112C261.603 23.9112 260.314 24.3516 259.288 25.2328C258.263 26.0976 257.751 27.1867 257.751 28.5001C257.751 30.3101 259.096 31.7678 261.787 32.8729L265.487 34.3868C268.499 35.6039 270.701 37.0899 272.095 38.8437C273.488 40.5975 274.185 42.7478 274.185 45.2946C274.185 48.7067 273.048 51.5258 270.773 53.752C268.483 55.9945 265.64 57.1156 262.244 57.1156C259.024 57.1156 256.365 56.1627 254.267 54.2567C252.201 52.3504 250.911 49.6674 250.399 46.2078L256.069 44.9584C256.325 47.1366 256.774 48.6423 257.414 49.4755C258.567 51.0772 260.25 51.878 262.46 51.878C264.206 51.878 265.656 51.2933 266.809 50.1242C267.962 48.9548 268.539 47.4732 268.539 45.6793C268.539 44.9584 268.439 44.2978 268.238 43.6971C268.038 43.0963 267.726 42.5436 267.301 42.0392C266.877 41.5345 266.328 41.0621 265.656 40.6217C264.983 40.1813 264.182 39.7606 263.253 39.3604L259.673 37.8706C254.595 35.724 252.057 32.5846 252.057 28.4521C252.057 25.665 253.122 23.3345 255.252 21.4605C257.382 19.5704 260.033 18.6253 263.205 18.6253C267.482 18.6253 270.821 20.7076 273.224 24.8722Z" fill="black"/>
<path d="M302.728 47.4393H286.847L282.714 56.4494H276.683L295.04 17.0217L312.747 56.4494H306.621L302.728 47.4393ZM300.446 42.1775L294.944 29.5634L289.177 42.1775H300.446Z" fill="black"/>
<path d="M327.618 24.6108V56.446H322.02V24.6108H313.491V19.349H336.123V24.6108H327.618Z" fill="black"/>
<path d="M362.095 24.8722L357.556 27.5631C356.707 26.0894 355.9 25.1287 355.129 24.68C354.329 24.1675 353.296 23.9112 352.029 23.9112C350.476 23.9112 349.187 24.3516 348.161 25.2328C347.136 26.0976 346.624 27.1867 346.624 28.5001C346.624 30.3101 347.969 31.7678 350.66 32.8729L354.362 34.3868C357.372 35.6039 359.574 37.0899 360.968 38.8437C362.362 40.5975 363.059 42.7478 363.059 45.2946C363.059 48.7067 361.919 51.5258 359.647 53.752C357.355 55.9945 354.514 57.1156 351.117 57.1156C347.897 57.1156 345.238 56.1627 343.14 54.2567C341.073 52.3504 339.784 49.6674 339.271 46.2078L344.942 44.9584C345.198 47.1366 345.647 48.6423 346.287 49.4755C347.441 51.0772 349.122 51.878 351.333 51.878C353.078 51.878 354.53 51.2933 355.682 50.1242C356.834 48.9548 357.413 47.4732 357.413 45.6793C357.413 44.9584 357.31 44.2978 357.109 43.6971C356.912 43.0963 356.597 42.5436 356.174 42.0392C355.748 41.5345 355.202 41.0621 354.53 40.6217C353.857 40.1813 353.054 39.7606 352.127 39.3604L348.546 37.8706C343.468 35.724 340.929 32.5846 340.929 28.4521C340.929 25.665 341.994 23.3345 344.125 21.4605C346.255 19.5704 348.906 18.6253 352.078 18.6253C356.355 18.6253 359.693 20.7076 362.095 24.8722Z" fill="black"/>
<path d="M49.3452 0H50.6548C77.9074 0 100 22.3858 100 50C100 77.6143 77.9074 100 50.6548 100H49.3452C22.0927 100 0 77.6143 0 50C0 22.3858 22.0927 0 49.3452 0Z" fill="#F7931A"/>
<path d="M49.3876 3.17767H50.6138C76.136 3.17767 96.8261 24.1421 96.8261 50.0031C96.8261 75.864 76.136 96.8285 50.6138 96.8285H49.3876C23.8652 96.8285 3.17528 75.864 3.17528 50.0031C3.17528 24.1421 23.8652 3.17767 49.3876 3.17767Z" fill="black"/>
<path d="M76.9782 42.8462C78.2335 35.1748 71.8345 31.0509 63.0844 28.2996L65.9228 17.9078L58.9905 16.3314L56.2271 26.4494C54.4075 26.035 52.5363 25.6441 50.6769 25.2567L53.4598 15.072L46.5337 13.4955L43.6933 23.8838C42.1855 23.5704 40.7052 23.2605 39.2682 22.9344L39.276 22.9019L29.7186 20.7238L27.8751 27.4799C27.8751 27.4799 33.017 28.5555 32.9084 28.6221C35.7151 29.2618 36.2243 30.9571 36.1375 32.3012L32.9044 44.1399C33.0979 44.1846 33.3484 44.2496 33.625 44.3507L32.8946 44.1846L28.3606 60.769C28.0171 61.5473 27.1468 62.7146 25.1848 62.2715C25.2539 62.3633 20.1476 61.124 20.1476 61.124L16.7072 68.3665L25.7276 70.4185C27.4053 70.8023 29.0496 71.2041 30.6663 71.5823L27.7981 82.0951L34.7205 83.6715L37.5628 73.2723C39.4516 73.7407 41.2872 74.1732 43.0836 74.5802L40.2531 84.9307L47.1831 86.5071L50.0512 76.0163C61.8684 78.0574 70.7567 77.2341 74.4931 67.4802C77.507 59.6249 74.345 55.0936 68.1274 52.1371C72.6556 51.1805 76.0662 48.462 76.9763 42.8462H76.9782ZM61.1422 63.1127C58.9986 70.9681 44.5105 66.7235 39.811 65.6569L43.6163 51.7317C48.3141 52.802 63.3764 54.9209 61.1441 63.1127H61.1422ZM63.2838 42.7326C61.3297 49.8779 49.2696 46.2476 45.3554 45.3576L48.8057 32.7281C52.7197 33.618 65.3207 35.2792 63.2838 42.7326Z" fill="#F7931A" fill-opacity="0.49935"/>
<path d="M16.9251 55.8744C16.9251 55.2314 16.8529 55.0684 17.5071 54.4195C23.2541 48.7187 29.0701 43.0861 34.9675 37.5412C36.2614 36.3243 37.9061 35.5438 39.3324 34.4856C43.5409 31.3631 48.0612 28.8872 52.8643 26.7739C56.4773 25.1841 60.0981 24.3377 63.9225 23.5728C64.6652 23.4243 65.4952 23.6567 66.2505 23.5728C67.0243 23.4868 67.706 23.2332 68.433 22.9908C68.8974 22.8361 70.0637 22.9058 69.7426 22.2633" fill="black"/>
<path d="M16.9251 55.8744C16.9251 55.2314 16.8529 55.0684 17.5071 54.4195C23.2541 48.7187 29.0701 43.0861 34.9675 37.5412C36.2614 36.3243 37.9061 35.5438 39.3324 34.4856C43.5409 31.3631 48.0612 28.8872 52.8643 26.7739C56.4773 25.1841 60.0981 24.3377 63.9225 23.5728C64.6652 23.4243 65.4952 23.6567 66.2505 23.5728C67.0243 23.4868 67.706 23.2332 68.433 22.9908C68.8974 22.8361 70.0637 22.9058 69.7426 22.2633" stroke="black" stroke-width="0.00800313"/>
<path d="M15.7611 70.716C14.9374 70.716 15.8424 69.3054 16.0521 68.97C16.9524 67.5294 17.9686 66.016 19.1077 64.7503C20.0583 63.6941 21.2634 62.936 22.3087 61.9859C23.4979 60.9047 24.4449 59.5696 25.6553 58.4938C27.1653 57.1515 28.9823 56.3043 30.6024 55.147C32.2445 53.9741 33.7156 52.6351 35.404 51.5097C36.2511 50.9447 37.1484 50.4338 38.0229 49.9089C39.0475 49.2945 39.8518 48.1786 41.0785 47.872C44.2809 47.0714 47.5207 45.729 50.3907 44.0888C54.4385 41.7759 58.3927 39.7606 62.7585 38.1234C63.5303 37.834 64.1809 37.1937 64.941 36.8138C67.4062 35.5812 69.9212 34.2915 72.5071 33.3218C74.0603 32.7392 75.7377 32.536 77.3088 32.0122C78.9062 31.4797 80.51 30.7317 82.1104 30.4117C83.0317 30.2275 84.3299 30.2477 85.1658 29.8297" fill="black"/>
<path d="M15.7611 70.716C14.9374 70.716 15.8424 69.3054 16.0521 68.97C16.9524 67.5294 17.9686 66.016 19.1077 64.7503C20.0583 63.6941 21.2634 62.936 22.3087 61.9859C23.4979 60.9047 24.4449 59.5696 25.6553 58.4938C27.1653 57.1515 28.9823 56.3043 30.6024 55.147C32.2445 53.9741 33.7156 52.6351 35.404 51.5097C36.2511 50.9447 37.1484 50.4338 38.0229 49.9089C39.0475 49.2945 39.8518 48.1786 41.0785 47.872C44.2809 47.0714 47.5207 45.729 50.3907 44.0888C54.4385 41.7759 58.3927 39.7606 62.7585 38.1234C63.5303 37.834 64.1809 37.1937 64.941 36.8138C67.4062 35.5812 69.9212 34.2915 72.5071 33.3218C74.0603 32.7392 75.7377 32.536 77.3088 32.0122C78.9062 31.4797 80.51 30.7317 82.1104 30.4117C83.0317 30.2275 84.3299 30.2477 85.1658 29.8297" stroke="black" stroke-width="0.00800313"/>
<path d="M29.8743 75.5151C28.9799 75.5151 30.1691 74.4773 30.3111 74.3511C31.6548 73.1565 33.1441 72.1462 34.5304 71.0046C35.4598 70.2392 36.2247 69.2879 37.1496 68.531C39.8105 66.3541 42.9437 64.3721 45.8798 62.5656C50.0566 59.9951 54.4705 57.7494 58.9749 55.8723C60.5527 55.215 62.103 54.3082 63.631 53.5443C65.1276 52.796 66.7697 52.5507 68.287 51.9438C70.7461 50.9601 73.2499 50.0497 75.8532 49.6158C76.7834 49.4607 77.6527 48.758 78.6179 48.5973C80.0101 48.3652 81.3382 47.9949 82.692 47.7242C83.0047 47.6617 84.0408 47.7465 84.2925 47.5786C84.6628 47.3317 84.4674 47.2877 85.0201 47.2877" fill="black"/>
<path d="M29.8743 75.5151C28.9799 75.5151 30.1691 74.4773 30.3111 74.3511C31.6548 73.1565 33.1441 72.1462 34.5304 71.0046C35.4598 70.2392 36.2247 69.2879 37.1496 68.531C39.8105 66.3541 42.9437 64.3721 45.8798 62.5656C50.0566 59.9951 54.4705 57.7494 58.9749 55.8723C60.5527 55.215 62.103 54.3082 63.631 53.5443C65.1276 52.796 66.7697 52.5507 68.287 51.9438C70.7461 50.9601 73.2499 50.0497 75.8532 49.6158C76.7834 49.4607 77.6527 48.758 78.6179 48.5973C80.0101 48.3652 81.3382 47.9949 82.692 47.7242C83.0047 47.6617 84.0408 47.7465 84.2925 47.5786C84.6628 47.3317 84.4674 47.2877 85.0201 47.2877" stroke="black" stroke-width="0.00800313"/>
<path d="M16.9251 55.8744C16.9251 55.2314 16.8529 55.0684 17.5071 54.4195C23.2541 48.7187 29.0701 43.0861 34.9675 37.5412C36.2614 36.3243 37.9061 35.5438 39.3324 34.4856C43.5409 31.3631 48.0612 28.8872 52.8643 26.7739C56.4773 25.1841 60.0981 24.3377 63.9225 23.5728C64.6652 23.4243 65.4952 23.6567 66.2505 23.5728C67.0243 23.4868 67.706 23.2332 68.433 22.9908C68.8974 22.8361 70.0637 22.9058 69.7426 22.2633" fill="white"/>
<path d="M16.9251 55.8744C16.9251 55.2314 16.8529 55.0684 17.5071 54.4195C23.2541 48.7187 29.0701 43.0861 34.9675 37.5412C36.2614 36.3243 37.9061 35.5438 39.3324 34.4856C43.5409 31.3631 48.0612 28.8872 52.8643 26.7739C56.4773 25.1841 60.0981 24.3377 63.9225 23.5728C64.6652 23.4243 65.4952 23.6567 66.2505 23.5728C67.0243 23.4868 67.706 23.2332 68.433 22.9908C68.8974 22.8361 70.0637 22.9058 69.7426 22.2633" stroke="white" stroke-width="0.00800313"/>
<path d="M15.7611 70.716C14.9374 70.716 15.8424 69.3054 16.0521 68.97C16.9524 67.5294 17.9686 66.016 19.1077 64.7503C20.0583 63.6941 21.2634 62.936 22.3087 61.9859C23.4979 60.9047 24.4449 59.5696 25.6553 58.4938C27.1653 57.1515 28.9823 56.3043 30.6024 55.147C32.2445 53.9741 33.7156 52.6351 35.404 51.5097C36.2511 50.9447 37.1484 50.4338 38.0229 49.9089C39.0475 49.2945 39.8518 48.1786 41.0785 47.872C44.2809 47.0714 47.5207 45.729 50.3907 44.0888C54.4385 41.7759 58.3927 39.7606 62.7585 38.1234C63.5303 37.834 64.1809 37.1937 64.941 36.8138C67.4062 35.5812 69.9212 34.2915 72.5071 33.3218C74.0603 32.7392 75.7377 32.536 77.3088 32.0122C78.9062 31.4797 80.51 30.7317 82.1104 30.4117C83.0317 30.2275 84.3299 30.2477 85.1658 29.8297" fill="white"/>
<path d="M15.7611 70.716C14.9374 70.716 15.8424 69.3054 16.0521 68.97C16.9524 67.5294 17.9686 66.016 19.1077 64.7503C20.0583 63.6941 21.2634 62.936 22.3087 61.9859C23.4979 60.9047 24.4449 59.5696 25.6553 58.4938C27.1653 57.1515 28.9823 56.3043 30.6024 55.147C32.2445 53.9741 33.7156 52.6351 35.404 51.5097C36.2511 50.9447 37.1484 50.4338 38.0229 49.9089C39.0475 49.2945 39.8518 48.1786 41.0785 47.872C44.2809 47.0714 47.5207 45.729 50.3907 44.0888C54.4385 41.7759 58.3927 39.7606 62.7585 38.1234C63.5303 37.834 64.1809 37.1937 64.941 36.8138C67.4062 35.5812 69.9212 34.2915 72.5071 33.3218C74.0603 32.7392 75.7377 32.536 77.3088 32.0122C78.9062 31.4797 80.51 30.7317 82.1104 30.4117C83.0317 30.2275 84.3299 30.2477 85.1658 29.8297" stroke="white" stroke-width="0.00800313"/>
<path d="M29.8743 75.5151C28.9799 75.5151 30.1691 74.4773 30.3111 74.3511C31.6548 73.1565 33.1441 72.1462 34.5304 71.0046C35.4598 70.2392 36.2247 69.2879 37.1496 68.531C39.8105 66.3541 42.9437 64.3721 45.8798 62.5656C50.0566 59.9951 54.4705 57.7494 58.9749 55.8723C60.5527 55.215 62.103 54.3082 63.631 53.5443C65.1276 52.796 66.7697 52.5507 68.287 51.9438C70.7461 50.9601 73.2499 50.0497 75.8532 49.6158C76.7834 49.4607 77.6527 48.758 78.6179 48.5973C80.0101 48.3652 81.3382 47.9949 82.692 47.7242C83.0047 47.6617 84.0408 47.7465 84.2925 47.5786C84.6628 47.3317 84.4674 47.2877 85.0201 47.2877" fill="white"/>
<path d="M29.8743 75.5151C28.9799 75.5151 30.1691 74.4773 30.3111 74.3511C31.6548 73.1565 33.1441 72.1462 34.5304 71.0046C35.4598 70.2392 36.2247 69.2879 37.1496 68.531C39.8105 66.3541 42.9437 64.3721 45.8798 62.5656C50.0566 59.9951 54.4705 57.7494 58.9749 55.8723C60.5527 55.215 62.103 54.3082 63.631 53.5443C65.1276 52.796 66.7697 52.5507 68.287 51.9438C70.7461 50.9601 73.2499 50.0497 75.8532 49.6158C76.7834 49.4607 77.6527 48.758 78.6179 48.5973C80.0101 48.3652 81.3382 47.9949 82.692 47.7242C83.0047 47.6617 84.0408 47.7465 84.2925 47.5786C84.6628 47.3317 84.4674 47.2877 85.0201 47.2877" stroke="white" stroke-width="0.00800313"/>
</svg>

After

Width:  |  Height:  |  Size: 22 KiB

BIN
taker-frontend/src/images/logo_nav_bar_white.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

43
taker-frontend/src/images/logo_nav_bar_white.svg

@ -0,0 +1,43 @@
<svg width="364" height="100" viewBox="0 0 364 100" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M125.961 74.8338C126.273 73.0477 124.684 72.0875 122.512 71.4469L123.217 69.0273L121.496 68.6602L120.81 71.0161C120.358 70.9197 119.894 70.8285 119.432 70.7384L120.123 68.3669L118.404 68L117.699 70.4188C117.325 70.3457 116.957 70.2735 116.6 70.1977L116.602 70.1901L114.23 69.683L113.772 71.2561C113.772 71.2561 115.048 71.5066 115.022 71.5219C115.718 71.671 115.845 72.0656 115.823 72.3786L115.021 75.1352C115.069 75.1456 115.131 75.1607 115.199 75.1841L115.018 75.1456L113.893 79.0072C113.807 79.1884 113.591 79.4601 113.104 79.3568C113.122 79.3783 111.854 79.0898 111.854 79.0898L111 80.7762L113.239 81.2539C113.656 81.3433 114.064 81.4368 114.465 81.525L113.753 83.9727L115.471 84.3396L116.177 81.9183C116.646 82.0275 117.101 82.1281 117.547 82.223L116.845 84.6329L118.565 85L119.277 82.5574C122.21 83.0325 124.417 82.8408 125.344 80.5696C126.092 78.7407 125.307 77.6857 123.764 76.9973C124.888 76.7745 125.735 76.1416 125.96 74.8338H125.961ZM122.03 79.5528C121.498 81.3818 117.902 80.3935 116.735 80.1452L117.68 76.9029C118.846 77.1521 122.585 77.6453 122.03 79.5528H122.03ZM122.562 74.8074C122.077 76.4713 119.083 75.626 118.111 75.4186L118.968 72.4781C119.939 72.6853 123.067 73.072 122.562 74.8074Z" fill="white"/>
<path d="M132.686 77.5155C132.595 77.1306 132.408 76.8219 132.124 76.5891C131.841 76.356 131.497 76.2398 131.092 76.2398C130.666 76.2398 130.32 76.3511 130.051 76.5739C129.783 76.7965 129.614 77.1104 129.543 77.5155H132.686ZM129.467 79.1102C129.467 80.2948 130.024 80.8871 131.137 80.8871C131.735 80.8871 132.185 80.6441 132.489 80.1581H135.147C134.61 81.94 133.269 82.8311 131.122 82.8311C130.464 82.8311 129.862 82.7324 129.315 82.5349C128.768 82.3375 128.3 82.0565 127.91 81.692C127.52 81.3275 127.219 80.8921 127.006 80.3859C126.794 79.8795 126.687 79.3126 126.687 78.6849C126.687 78.0369 126.789 77.4521 126.991 76.9308C127.194 76.4092 127.482 75.9664 127.857 75.6019C128.231 75.2374 128.684 74.9564 129.216 74.759C129.748 74.5615 130.348 74.4628 131.016 74.4628C131.674 74.4628 132.266 74.5615 132.793 74.759C133.319 74.9564 133.765 75.2424 134.129 75.6171C134.494 75.9916 134.772 76.4498 134.964 76.9915C135.157 77.5331 135.253 78.1432 135.253 78.8216V79.1102H129.467Z" fill="white"/>
<path d="M139.885 77.0452V82.5431H137.136V77.0452H136.225V74.7519H137.136V72.4131H139.885V74.7519H141.449V77.0452H139.885Z" fill="white"/>
<path d="M145.55 77.0452V82.5431H142.801V77.0452H141.89V74.7519H142.801V72.4131H145.55V74.7519H147.114V77.0452H145.55Z" fill="white"/>
<path d="M153.843 77.5155C153.752 77.1306 153.565 76.8219 153.281 76.5891C152.998 76.356 152.654 76.2398 152.249 76.2398C151.823 76.2398 151.477 76.3511 151.208 76.5739C150.94 76.7965 150.77 77.1104 150.699 77.5155H153.843ZM150.623 79.1102C150.623 80.2948 151.18 80.8871 152.294 80.8871C152.892 80.8871 153.342 80.6441 153.646 80.1581H156.304C155.767 81.94 154.426 82.8311 152.279 82.8311C151.621 82.8311 151.018 82.7324 150.472 82.5349C149.925 82.3375 149.457 82.0565 149.067 81.692C148.677 81.3275 148.376 80.8921 148.163 80.3859C147.95 79.8795 147.844 79.3126 147.844 78.6849C147.844 78.0369 147.945 77.4521 148.148 76.9308C148.351 76.4092 148.639 75.9664 149.014 75.6019C149.388 75.2374 149.841 74.9564 150.373 74.759C150.904 74.5615 151.504 74.4628 152.173 74.4628C152.831 74.4628 153.423 74.5615 153.949 74.759C154.476 74.9564 154.921 75.2424 155.286 75.6171C155.65 75.9916 155.929 76.4498 156.121 76.9915C156.314 77.5331 156.41 78.1432 156.41 78.8216V79.1102H150.623Z" fill="white"/>
<path d="M157.973 74.7501H160.722V76.0258C161.016 75.56 161.375 75.2031 161.8 74.9551C162.225 74.7069 162.722 74.583 163.289 74.583C163.36 74.583 163.438 74.583 163.524 74.583C163.61 74.583 163.709 74.593 163.82 74.6134V77.2408C163.456 77.0586 163.061 76.9674 162.636 76.9674C161.998 76.9674 161.519 77.1573 161.2 77.537C160.881 77.9166 160.722 78.471 160.722 79.2V82.5412H157.973V74.7501Z" fill="white"/>
<path d="M186.404 77.272C185.928 76.9479 185.447 76.786 184.961 76.786C184.698 76.786 184.452 76.8316 184.224 76.9227C183.996 77.0139 183.797 77.1429 183.624 77.31C183.452 77.4771 183.318 77.6745 183.222 77.9023C183.126 78.1301 183.078 78.3857 183.078 78.6693C183.078 78.9426 183.126 79.1932 183.222 79.4211C183.318 79.6489 183.45 79.8463 183.617 80.0134C183.784 80.1804 183.984 80.3095 184.217 80.4006C184.45 80.4918 184.698 80.5373 184.961 80.5373C185.477 80.5373 185.958 80.3601 186.404 80.0058V82.3446C185.725 82.6382 185.082 82.7851 184.475 82.7851C183.908 82.7851 183.369 82.6887 182.857 82.4965C182.346 82.3041 181.896 82.0281 181.506 81.6688C181.116 81.3093 180.805 80.879 180.572 80.3779C180.339 79.8767 180.222 79.3171 180.222 78.6997C180.222 78.082 180.334 77.5174 180.556 77.0063C180.779 76.4949 181.083 76.0544 181.468 75.685C181.853 75.3153 182.311 75.0267 182.842 74.8193C183.374 74.6116 183.943 74.5079 184.551 74.5079C185.219 74.5079 185.837 74.6496 186.404 74.9332V77.272Z" fill="white"/>
<path d="M187.969 74.7501H190.718V76.0258C191.012 75.56 191.371 75.2031 191.796 74.9551C192.222 74.7069 192.718 74.583 193.285 74.583C193.356 74.583 193.434 74.583 193.52 74.583C193.606 74.583 193.705 74.593 193.816 74.6134V77.2408C193.452 77.0586 193.057 76.9674 192.632 76.9674C191.994 76.9674 191.515 77.1573 191.196 77.537C190.877 77.9166 190.718 78.471 190.718 79.2V82.5412H187.969V74.7501Z" fill="white"/>
<path d="M197.582 78.6237C197.582 78.8767 197.627 79.1121 197.719 79.3299C197.81 79.5475 197.934 79.7374 198.091 79.8995C198.248 80.0613 198.435 80.188 198.653 80.2791C198.87 80.3703 199.106 80.4158 199.359 80.4158C199.602 80.4158 199.832 80.3703 200.05 80.2791C200.268 80.188 200.455 80.0613 200.612 79.8995C200.769 79.7374 200.895 79.5501 200.991 79.3375C201.088 79.1249 201.136 78.8971 201.136 78.6541C201.136 78.4111 201.088 78.1807 200.991 77.9631C200.895 77.7452 200.769 77.5554 200.612 77.3935C200.455 77.2315 200.268 77.105 200.05 77.0139C199.832 76.9227 199.602 76.8772 199.359 76.8772C199.106 76.8772 198.87 76.9227 198.653 77.0139C198.435 77.105 198.248 77.2315 198.091 77.3935C197.934 77.5554 197.81 77.7402 197.719 77.9479C197.627 78.1553 197.582 78.3807 197.582 78.6237ZM201.045 74.7509H203.809V82.5421H201.045V81.6764C200.458 82.4154 199.663 82.7851 198.66 82.7851C198.093 82.7851 197.572 82.6811 197.096 82.4737C196.62 82.2661 196.205 81.9749 195.851 81.6004C195.496 81.2257 195.22 80.7853 195.023 80.2791C194.825 79.7728 194.727 79.221 194.727 78.6237C194.727 78.0668 194.823 77.5378 195.015 77.0366C195.208 76.5355 195.476 76.0974 195.82 75.7229C196.164 75.3482 196.575 75.0521 197.05 74.8345C197.526 74.6166 198.053 74.5079 198.63 74.5079C199.602 74.5079 200.407 74.847 201.045 75.5255V74.7509Z" fill="white"/>
<path d="M208.745 77.0452V82.5431H205.996V77.0452H205.085V74.7519H205.996V72.4131H208.745V74.7519H210.309V77.0452H208.745Z" fill="white"/>
<path d="M217.22 77.272C216.744 76.9479 216.263 76.786 215.777 76.786C215.514 76.786 215.268 76.8316 215.041 76.9227C214.813 77.0139 214.613 77.1429 214.441 77.31C214.269 77.4771 214.135 77.6745 214.038 77.9023C213.942 78.1301 213.894 78.3857 213.894 78.6693C213.894 78.9426 213.942 79.1932 214.038 79.4211C214.135 79.6489 214.266 79.8463 214.433 80.0134C214.6 80.1804 214.8 80.3095 215.033 80.4006C215.266 80.4918 215.514 80.5373 215.777 80.5373C216.294 80.5373 216.775 80.3601 217.22 80.0058V82.3446C216.542 82.6382 215.899 82.7851 215.291 82.7851C214.724 82.7851 214.185 82.6887 213.674 82.4965C213.163 82.3041 212.712 82.0281 212.322 81.6688C211.932 81.3093 211.621 80.879 211.388 80.3779C211.155 79.8767 211.039 79.3171 211.039 78.6997C211.039 78.082 211.15 77.5174 211.373 77.0063C211.596 76.4949 211.899 76.0544 212.284 75.685C212.669 75.3153 213.127 75.0267 213.659 74.8193C214.19 74.6116 214.76 74.5079 215.367 74.5079C216.035 74.5079 216.653 74.6496 217.22 74.9332V77.272Z" fill="white"/>
<path d="M218.784 69.9353H221.533V75.7369C221.907 75.2812 222.287 74.9749 222.672 74.818C223.056 74.661 223.507 74.5826 224.023 74.5826C225.005 74.5826 225.747 74.8534 226.248 75.3952C226.749 75.9367 227 76.6683 227 77.5897V82.5408H224.251V78.6073C224.251 78.2124 224.221 77.8935 224.16 77.6505C224.099 77.4075 223.998 77.22 223.856 77.0885C223.613 76.8759 223.32 76.7696 222.975 76.7696C222.51 76.7696 222.153 76.9087 221.905 77.1873C221.657 77.4656 221.533 77.8631 221.533 78.3795V82.5408H218.784V69.9353Z" fill="white"/>
<path d="M173.789 76.7469C172.721 75.9239 172.05 75.1952 171.775 74.5605C171.499 73.9259 171.491 73.1813 171.748 72.3265C172.079 71.2282 172.69 70.4712 173.582 70.0553C174.474 69.6394 175.535 69.6164 176.763 69.9861C177.32 70.1538 177.858 70.3853 178.377 70.6802C178.896 70.975 179.391 71.3291 179.863 71.7426L179.159 74.0798C178.754 73.5625 178.315 73.1295 177.842 72.7806C177.369 72.4315 176.873 72.179 176.353 72.0225C175.774 71.8483 175.296 71.8309 174.917 71.9709C174.539 72.1106 174.285 72.3968 174.154 72.8296C174.053 73.165 174.082 73.4762 174.241 73.763C174.399 74.0496 174.796 74.433 175.43 74.9131L176.343 75.613C177.21 76.2633 177.784 76.9523 178.066 77.6805C178.349 78.4086 178.355 79.2218 178.084 80.12C177.716 81.3426 177.08 82.1469 176.176 82.5326C175.272 82.9184 174.09 82.8915 172.629 82.4517C172.029 82.271 171.448 82.018 170.889 81.6932C170.328 81.3682 169.809 80.9802 169.331 80.5296L170.077 78.0543C170.578 78.7011 171.094 79.2252 171.626 79.6271C172.157 80.0289 172.714 80.3176 173.299 80.4936C173.888 80.6711 174.386 80.6748 174.791 80.5047C175.196 80.3348 175.471 80.0089 175.616 79.5275C175.725 79.1649 175.713 78.8145 175.579 78.4761C175.445 78.1378 175.195 77.8282 174.832 77.5475L173.789 76.7469Z" fill="white"/>
<path d="M174.598 67L176 67.5531L175.402 71L174 70.4469L174.598 67Z" fill="white"/>
<path d="M176.897 68L179 68.5529L178.103 72L176 71.4469L176.897 68Z" fill="white"/>
<path d="M170.598 81L172 81.5531L171.402 85L170 84.4469L170.598 81Z" fill="white"/>
<path d="M173.598 82L175 82.4148L174.402 85L173 84.5852L173.598 82Z" fill="white"/>
<path d="M119.501 19.349V56.4461H113.902V19.349H119.501Z" fill="white"/>
<path d="M138.651 24.6109V56.4461H133.053V24.6109H124.524V19.349H147.157V24.6109H138.651Z" fill="white"/>
<path d="M179.566 21.3403V27.9716C176.33 25.2648 172.982 23.9112 169.523 23.9112C165.71 23.9112 162.499 25.2808 159.888 28.0195C157.261 30.7427 155.948 34.0744 155.948 38.0146C155.948 41.9072 157.261 45.1905 159.888 47.8657C162.515 50.5404 165.734 51.878 169.547 51.878C171.517 51.878 173.191 51.5578 174.568 50.9169C175.337 50.5966 176.134 50.164 176.959 49.6195C177.784 49.0749 178.653 48.418 179.566 47.6492V54.4007C176.362 56.2106 172.999 57.1156 169.475 57.1156C164.173 57.1156 159.648 55.2659 155.899 51.5656C152.168 47.8337 150.301 43.3325 150.301 38.063C150.301 33.3375 151.863 29.125 154.987 25.4247C158.831 20.8918 163.804 18.6253 169.907 18.6253C173.238 18.6253 176.458 19.5303 179.566 21.3403Z" fill="white"/>
<path d="M192.228 33.8612H208.229V19.349H213.827V56.4461H208.229V39.123H192.228V56.4461H186.629V19.349H192.228V33.8612Z" fill="white"/>
<path d="M230.214 40.4204L218.104 19.349H224.543L233.025 34.1733L241.53 19.349H247.969L235.812 40.4204V56.4461H230.214V40.4204Z" fill="white"/>
<path d="M273.224 24.8722L268.683 27.5631C267.834 26.0894 267.025 25.1287 266.256 24.68C265.455 24.1675 264.422 23.9112 263.157 23.9112C261.603 23.9112 260.314 24.3516 259.288 25.2328C258.263 26.0976 257.751 27.1867 257.751 28.5001C257.751 30.3101 259.096 31.7678 261.787 32.8729L265.487 34.3868C268.499 35.6039 270.701 37.0899 272.095 38.8437C273.488 40.5975 274.185 42.7478 274.185 45.2946C274.185 48.7067 273.048 51.5258 270.773 53.752C268.483 55.9945 265.64 57.1156 262.244 57.1156C259.024 57.1156 256.365 56.1627 254.267 54.2567C252.201 52.3504 250.911 49.6674 250.399 46.2078L256.069 44.9584C256.325 47.1366 256.774 48.6423 257.414 49.4755C258.567 51.0772 260.25 51.878 262.46 51.878C264.206 51.878 265.656 51.2933 266.809 50.1242C267.962 48.9548 268.539 47.4732 268.539 45.6793C268.539 44.9584 268.439 44.2978 268.238 43.6971C268.038 43.0963 267.726 42.5436 267.301 42.0392C266.877 41.5345 266.328 41.0621 265.656 40.6217C264.983 40.1813 264.182 39.7606 263.253 39.3604L259.673 37.8706C254.595 35.724 252.057 32.5846 252.057 28.4521C252.057 25.665 253.122 23.3345 255.252 21.4605C257.382 19.5704 260.033 18.6253 263.205 18.6253C267.482 18.6253 270.821 20.7076 273.224 24.8722Z" fill="white"/>
<path d="M302.728 47.4393H286.847L282.714 56.4494H276.683L295.04 17.0217L312.747 56.4494H306.621L302.728 47.4393ZM300.446 42.1775L294.944 29.5634L289.177 42.1775H300.446Z" fill="white"/>
<path d="M327.618 24.6109V56.4461H322.02V24.6109H313.491V19.349H336.123V24.6109H327.618Z" fill="white"/>
<path d="M362.095 24.8722L357.556 27.5631C356.707 26.0894 355.9 25.1287 355.129 24.68C354.329 24.1675 353.296 23.9112 352.029 23.9112C350.476 23.9112 349.187 24.3516 348.161 25.2328C347.136 26.0976 346.624 27.1867 346.624 28.5001C346.624 30.3101 347.969 31.7678 350.66 32.8729L354.362 34.3868C357.372 35.6039 359.574 37.0899 360.968 38.8437C362.362 40.5975 363.059 42.7478 363.059 45.2946C363.059 48.7067 361.919 51.5258 359.647 53.752C357.355 55.9945 354.514 57.1156 351.117 57.1156C347.897 57.1156 345.238 56.1627 343.14 54.2567C341.073 52.3504 339.784 49.6674 339.271 46.2078L344.942 44.9584C345.198 47.1366 345.647 48.6423 346.287 49.4755C347.441 51.0772 349.122 51.878 351.333 51.878C353.078 51.878 354.53 51.2933 355.682 50.1242C356.834 48.9548 357.413 47.4732 357.413 45.6793C357.413 44.9584 357.31 44.2978 357.109 43.6971C356.912 43.0963 356.597 42.5436 356.174 42.0392C355.748 41.5345 355.202 41.0621 354.53 40.6217C353.857 40.1813 353.054 39.7606 352.127 39.3604L348.546 37.8706C343.468 35.724 340.929 32.5846 340.929 28.4521C340.929 25.665 341.994 23.3345 344.125 21.4605C346.255 19.5704 348.906 18.6253 352.078 18.6253C356.355 18.6253 359.693 20.7076 362.095 24.8722Z" fill="white"/>
<path d="M49.3452 0H50.6548C77.9074 0 100 22.3858 100 50C100 77.6143 77.9074 100 50.6548 100H49.3452C22.0927 100 0 77.6143 0 50C0 22.3858 22.0927 0 49.3452 0Z" fill="#F7931A"/>
<path d="M49.3876 3.1777H50.6138C76.136 3.1777 96.8261 24.1421 96.8261 50.0031C96.8261 75.8641 76.136 96.8285 50.6138 96.8285H49.3876C23.8652 96.8285 3.17528 75.8641 3.17528 50.0031C3.17528 24.1421 23.8652 3.1777 49.3876 3.1777Z" fill="black"/>
<path d="M76.9782 42.8462C78.2335 35.1748 71.8345 31.0509 63.0844 28.2996L65.9228 17.9078L58.9905 16.3314L56.2271 26.4494C54.4075 26.035 52.5363 25.6441 50.6769 25.2567L53.4598 15.072L46.5337 13.4955L43.6933 23.8838C42.1855 23.5704 40.7052 23.2605 39.2682 22.9344L39.276 22.9019L29.7186 20.7238L27.8751 27.4799C27.8751 27.4799 33.017 28.5555 32.9084 28.6221C35.7151 29.2618 36.2243 30.9571 36.1375 32.3012L32.9044 44.1399C33.0979 44.1846 33.3484 44.2496 33.625 44.3507L32.8946 44.1846L28.3606 60.769C28.0171 61.5473 27.1468 62.7146 25.1848 62.2715C25.2539 62.3633 20.1476 61.124 20.1476 61.124L16.7072 68.3665L25.7276 70.4185C27.4053 70.8023 29.0496 71.2041 30.6663 71.5823L27.7981 82.0951L34.7205 83.6715L37.5628 73.2723C39.4516 73.7407 41.2872 74.1732 43.0836 74.5802L40.2531 84.9307L47.1831 86.5071L50.0512 76.0163C61.8684 78.0574 70.7567 77.2341 74.4931 67.4802C77.507 59.6249 74.345 55.0936 68.1274 52.1371C72.6556 51.1805 76.0662 48.462 76.9763 42.8462H76.9782ZM61.1422 63.1127C58.9986 70.9681 44.5105 66.7235 39.811 65.6569L43.6163 51.7317C48.3141 52.802 63.3764 54.9209 61.1441 63.1127H61.1422ZM63.2838 42.7326C61.3297 49.8779 49.2696 46.2476 45.3554 45.3576L48.8057 32.7281C52.7197 33.618 65.3207 35.2792 63.2838 42.7326Z" fill="#F7931A" fill-opacity="0.49935"/>
<path d="M16.9251 55.8744C16.9251 55.2313 16.8529 55.0684 17.5071 54.4195C23.2541 48.7186 29.0701 43.0861 34.9675 37.5412C36.2614 36.3242 37.9061 35.5438 39.3324 34.4856C43.5409 31.363 48.0612 28.8872 52.8643 26.7738C56.4773 25.1841 60.0981 24.3377 63.9225 23.5728C64.6652 23.4242 65.4952 23.6567 66.2505 23.5728C67.0243 23.4868 67.706 23.2331 68.433 22.9908C68.8974 22.836 70.0637 22.9057 69.7426 22.2633" fill="black"/>
<path d="M16.9251 55.8744C16.9251 55.2313 16.8529 55.0684 17.5071 54.4195C23.2541 48.7186 29.0701 43.0861 34.9675 37.5412C36.2614 36.3242 37.9061 35.5438 39.3324 34.4856C43.5409 31.363 48.0612 28.8872 52.8643 26.7738C56.4773 25.1841 60.0981 24.3377 63.9225 23.5728C64.6652 23.4242 65.4952 23.6567 66.2505 23.5728C67.0243 23.4868 67.706 23.2331 68.433 22.9908C68.8974 22.836 70.0637 22.9057 69.7426 22.2633" stroke="black" stroke-width="0.00800313"/>
<path d="M15.7611 70.7161C14.9374 70.7161 15.8424 69.3054 16.0521 68.97C16.9524 67.5294 17.9686 66.016 19.1077 64.7504C20.0583 63.6941 21.2634 62.936 22.3087 61.9859C23.4979 60.9047 24.4449 59.5697 25.6553 58.4938C27.1653 57.1515 28.9823 56.3044 30.6024 55.1471C32.2445 53.9741 33.7156 52.6351 35.404 51.5097C36.2511 50.9448 37.1484 50.4339 38.0229 49.909C39.0475 49.2945 39.8518 48.1786 41.0785 47.8721C44.2809 47.0714 47.5207 45.7291 50.3907 44.0889C54.4385 41.7759 58.3927 39.7606 62.7585 38.1235C63.5303 37.834 64.1809 37.1938 64.941 36.8139C67.4062 35.5813 69.9212 34.2915 72.5071 33.3218C74.0603 32.7392 75.7377 32.536 77.3088 32.0122C78.9062 31.4798 80.51 30.7317 82.1104 30.4118C83.0317 30.2275 84.3299 30.2477 85.1658 29.8297" fill="black"/>
<path d="M15.7611 70.7161C14.9374 70.7161 15.8424 69.3054 16.0521 68.97C16.9524 67.5294 17.9686 66.016 19.1077 64.7504C20.0583 63.6941 21.2634 62.936 22.3087 61.9859C23.4979 60.9047 24.4449 59.5697 25.6553 58.4938C27.1653 57.1515 28.9823 56.3044 30.6024 55.1471C32.2445 53.9741 33.7156 52.6351 35.404 51.5097C36.2511 50.9448 37.1484 50.4339 38.0229 49.909C39.0475 49.2945 39.8518 48.1786 41.0785 47.8721C44.2809 47.0714 47.5207 45.7291 50.3907 44.0889C54.4385 41.7759 58.3927 39.7606 62.7585 38.1235C63.5303 37.834 64.1809 37.1938 64.941 36.8139C67.4062 35.5813 69.9212 34.2915 72.5071 33.3218C74.0603 32.7392 75.7377 32.536 77.3088 32.0122C78.9062 31.4798 80.51 30.7317 82.1104 30.4118C83.0317 30.2275 84.3299 30.2477 85.1658 29.8297" stroke="black" stroke-width="0.00800313"/>
<path d="M29.8743 75.5151C28.9799 75.5151 30.1691 74.4773 30.3111 74.3511C31.6548 73.1565 33.1441 72.1462 34.5304 71.0046C35.4598 70.2392 36.2247 69.2879 37.1496 68.531C39.8105 66.3541 42.9437 64.3721 45.8798 62.5656C50.0566 59.9951 54.4705 57.7494 58.9749 55.8723C60.5527 55.215 62.103 54.3082 63.631 53.5443C65.1276 52.796 66.7697 52.5507 68.287 51.9438C70.7461 50.9601 73.2499 50.0497 75.8532 49.6158C76.7834 49.4607 77.6527 48.758 78.6179 48.5973C80.0101 48.3652 81.3382 47.9949 82.692 47.7242C83.0047 47.6617 84.0408 47.7465 84.2925 47.5786C84.6628 47.3317 84.4674 47.2877 85.0201 47.2877" fill="black"/>
<path d="M29.8743 75.5151C28.9799 75.5151 30.1691 74.4773 30.3111 74.3511C31.6548 73.1565 33.1441 72.1462 34.5304 71.0046C35.4598 70.2392 36.2247 69.2879 37.1496 68.531C39.8105 66.3541 42.9437 64.3721 45.8798 62.5656C50.0566 59.9951 54.4705 57.7494 58.9749 55.8723C60.5527 55.215 62.103 54.3082 63.631 53.5443C65.1276 52.796 66.7697 52.5507 68.287 51.9438C70.7461 50.9601 73.2499 50.0497 75.8532 49.6158C76.7834 49.4607 77.6527 48.758 78.6179 48.5973C80.0101 48.3652 81.3382 47.9949 82.692 47.7242C83.0047 47.6617 84.0408 47.7465 84.2925 47.5786C84.6628 47.3317 84.4674 47.2877 85.0201 47.2877" stroke="black" stroke-width="0.00800313"/>
<path d="M16.9251 55.8744C16.9251 55.2313 16.8529 55.0684 17.5071 54.4195C23.2541 48.7186 29.0701 43.0861 34.9675 37.5412C36.2614 36.3242 37.9061 35.5438 39.3324 34.4856C43.5409 31.363 48.0612 28.8872 52.8643 26.7738C56.4773 25.1841 60.0981 24.3377 63.9225 23.5728C64.6652 23.4242 65.4952 23.6567 66.2505 23.5728C67.0243 23.4868 67.706 23.2331 68.433 22.9908C68.8974 22.836 70.0637 22.9057 69.7426 22.2633" fill="white"/>
<path d="M16.9251 55.8744C16.9251 55.2313 16.8529 55.0684 17.5071 54.4195C23.2541 48.7186 29.0701 43.0861 34.9675 37.5412C36.2614 36.3242 37.9061 35.5438 39.3324 34.4856C43.5409 31.363 48.0612 28.8872 52.8643 26.7738C56.4773 25.1841 60.0981 24.3377 63.9225 23.5728C64.6652 23.4242 65.4952 23.6567 66.2505 23.5728C67.0243 23.4868 67.706 23.2331 68.433 22.9908C68.8974 22.836 70.0637 22.9057 69.7426 22.2633" stroke="white" stroke-width="0.00800313"/>
<path d="M15.7611 70.7161C14.9374 70.7161 15.8424 69.3054 16.0521 68.97C16.9524 67.5294 17.9686 66.016 19.1077 64.7504C20.0583 63.6941 21.2634 62.936 22.3087 61.9859C23.4979 60.9047 24.4449 59.5697 25.6553 58.4938C27.1653 57.1515 28.9823 56.3044 30.6024 55.1471C32.2445 53.9741 33.7156 52.6351 35.404 51.5097C36.2511 50.9448 37.1484 50.4339 38.0229 49.909C39.0475 49.2945 39.8518 48.1786 41.0785 47.8721C44.2809 47.0714 47.5207 45.7291 50.3907 44.0889C54.4385 41.7759 58.3927 39.7606 62.7585 38.1235C63.5303 37.834 64.1809 37.1938 64.941 36.8139C67.4062 35.5813 69.9212 34.2915 72.5071 33.3218C74.0603 32.7392 75.7377 32.536 77.3088 32.0122C78.9062 31.4798 80.51 30.7317 82.1104 30.4118C83.0317 30.2275 84.3299 30.2477 85.1658 29.8297" fill="white"/>
<path d="M15.7611 70.7161C14.9374 70.7161 15.8424 69.3054 16.0521 68.97C16.9524 67.5294 17.9686 66.016 19.1077 64.7504C20.0583 63.6941 21.2634 62.936 22.3087 61.9859C23.4979 60.9047 24.4449 59.5697 25.6553 58.4938C27.1653 57.1515 28.9823 56.3044 30.6024 55.1471C32.2445 53.9741 33.7156 52.6351 35.404 51.5097C36.2511 50.9448 37.1484 50.4339 38.0229 49.909C39.0475 49.2945 39.8518 48.1786 41.0785 47.8721C44.2809 47.0714 47.5207 45.7291 50.3907 44.0889C54.4385 41.7759 58.3927 39.7606 62.7585 38.1235C63.5303 37.834 64.1809 37.1938 64.941 36.8139C67.4062 35.5813 69.9212 34.2915 72.5071 33.3218C74.0603 32.7392 75.7377 32.536 77.3088 32.0122C78.9062 31.4798 80.51 30.7317 82.1104 30.4118C83.0317 30.2275 84.3299 30.2477 85.1658 29.8297" stroke="white" stroke-width="0.00800313"/>
<path d="M29.8743 75.5151C28.9799 75.5151 30.1691 74.4773 30.3111 74.3511C31.6548 73.1565 33.1441 72.1462 34.5304 71.0046C35.4598 70.2392 36.2247 69.2879 37.1496 68.531C39.8105 66.3541 42.9437 64.3721 45.8798 62.5656C50.0566 59.9951 54.4705 57.7494 58.9749 55.8723C60.5527 55.215 62.103 54.3082 63.631 53.5443C65.1276 52.796 66.7697 52.5507 68.287 51.9438C70.7461 50.9601 73.2499 50.0497 75.8532 49.6158C76.7834 49.4607 77.6527 48.758 78.6179 48.5973C80.0101 48.3652 81.3382 47.9949 82.692 47.7242C83.0047 47.6617 84.0408 47.7465 84.2925 47.5786C84.6628 47.3317 84.4674 47.2877 85.0201 47.2877" fill="white"/>
<path d="M29.8743 75.5151C28.9799 75.5151 30.1691 74.4773 30.3111 74.3511C31.6548 73.1565 33.1441 72.1462 34.5304 71.0046C35.4598 70.2392 36.2247 69.2879 37.1496 68.531C39.8105 66.3541 42.9437 64.3721 45.8798 62.5656C50.0566 59.9951 54.4705 57.7494 58.9749 55.8723C60.5527 55.215 62.103 54.3082 63.631 53.5443C65.1276 52.796 66.7697 52.5507 68.287 51.9438C70.7461 50.9601 73.2499 50.0497 75.8532 49.6158C76.7834 49.4607 77.6527 48.758 78.6179 48.5973C80.0101 48.3652 81.3382 47.9949 82.692 47.7242C83.0047 47.6617 84.0408 47.7465 84.2925 47.5786C84.6628 47.3317 84.4674 47.2877 85.0201 47.2877" stroke="white" stroke-width="0.00800313"/>
</svg>

After

Width:  |  Height:  |  Size: 22 KiB

13
taker-frontend/src/index.css

@ -0,0 +1,13 @@
body {
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
code {
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
monospace;
}

17
taker-frontend/src/logo.svg

@ -0,0 +1,17 @@
<svg width="179" height="179" viewBox="0 0 179 179" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M88.3279 0H90.6721C139.454 0 179 40.0705 179 89.5C179 138.93 139.454 179 90.6721 179H88.3279C39.5459 179 0 138.93 0 89.5C0 40.0705 39.5459 0 88.3279 0Z" fill="#F7931A"/>
<path d="M88.4026 5.68115H90.5974C136.282 5.68115 173.317 43.2075 173.317 89.4986C173.317 135.79 136.282 173.316 90.5974 173.316H88.4026C42.7175 173.316 5.68252 135.79 5.68252 89.4986C5.68252 43.2075 42.7175 5.68115 88.4026 5.68115Z" fill="black"/>
<path d="M137.789 76.6935C140.036 62.9617 128.582 55.5799 112.919 50.655L118 32.0538L105.591 29.2319L100.645 47.3432C97.3874 46.6015 94.038 45.9017 90.7097 45.2083L95.6912 26.9776L83.2933 24.1558L78.2091 42.7509C75.5101 42.1897 72.8603 41.635 70.2881 41.0513L70.3021 40.9933L53.1944 37.0943L49.8945 49.1879C49.8945 49.1879 59.0984 51.1131 58.904 51.2323C63.9281 52.3773 64.8396 55.412 64.6842 57.8179L58.897 79.0091C59.2432 79.0893 59.6917 79.2055 60.1868 79.3864L58.8794 79.0893L50.7635 108.775C50.1487 110.168 48.5908 112.258 45.0788 111.465C45.2025 111.629 36.0622 109.411 36.0622 109.411L29.9039 122.375L46.0504 126.048C49.0536 126.735 51.9968 127.454 54.8906 128.131L49.7567 146.949L62.1477 149.771L67.2354 131.156C70.6163 131.995 73.9021 132.769 77.1177 133.497L72.051 152.025L84.4559 154.846L89.5897 136.068C110.742 139.722 126.652 138.248 133.341 120.788C138.736 106.727 133.076 98.6164 121.946 93.3242C130.051 91.6119 136.156 86.7457 137.786 76.6935H137.789ZM109.443 112.971C105.606 127.032 79.6718 119.434 71.2598 117.525L78.0713 92.5986C86.4803 94.5143 113.442 98.3072 109.446 112.971H109.443ZM113.276 76.4901C109.778 89.2803 88.1906 82.7819 81.1842 81.1889L87.3603 58.582C94.3662 60.1751 116.922 63.1486 113.276 76.4901Z" fill="#F7931A" fill-opacity="0.49935"/>
<path d="M30.296 100.014C30.296 98.8628 30.1667 98.5712 31.3378 97.4096C41.625 87.2051 52.0356 77.1228 62.5919 67.1974C64.908 65.0191 67.852 63.6221 70.4051 61.7279C77.9382 56.1385 86.0296 51.7068 94.6271 47.9239C101.094 45.0783 107.576 43.5632 114.421 42.194C115.751 41.9281 117.236 42.3443 118.588 42.194C119.974 42.0401 121.194 41.586 122.495 41.1522C123.326 40.8752 125.414 41 124.839 39.85" fill="black"/>
<path d="M30.296 100.014C30.296 98.8628 30.1667 98.5712 31.3378 97.4096C41.625 87.2051 52.0356 77.1228 62.5919 67.1974C64.908 65.0191 67.852 63.6221 70.4051 61.7279C77.9382 56.1385 86.0296 51.7068 94.6271 47.9239C101.094 45.0783 107.576 43.5632 114.421 42.194C115.751 41.9281 117.236 42.3443 118.588 42.194C119.974 42.0401 121.194 41.586 122.495 41.1522C123.326 40.8752 125.414 41 124.839 39.85" stroke="black" stroke-width="0.0254068"/>
<path d="M28.2128 126.578C26.7383 126.578 28.3583 124.053 28.7337 123.453C30.3453 120.874 32.1642 118.165 34.2032 115.9C35.9047 114.009 38.062 112.652 39.9331 110.951C42.0617 109.016 43.7567 106.626 45.9234 104.701C48.6262 102.298 51.8787 100.781 54.7786 98.7099C57.7181 96.6103 60.3514 94.2135 63.3736 92.199C64.8899 91.1878 66.496 90.2733 68.0614 89.3337C69.8955 88.2338 71.3352 86.2364 73.531 85.6877C79.2632 84.2545 85.0624 81.8517 90.1998 78.9157C97.4453 74.7756 104.523 71.1681 112.338 68.2377C113.72 67.7195 114.884 66.5735 116.245 65.8935C120.658 63.6871 125.159 61.3785 129.788 59.6427C132.568 58.5999 135.571 58.2361 138.383 57.2985C141.242 56.3454 144.113 55.0065 146.978 54.4337C148.627 54.104 150.951 54.1401 152.447 53.3919" fill="black"/>
<path d="M28.2128 126.578C26.7383 126.578 28.3583 124.053 28.7337 123.453C30.3453 120.874 32.1642 118.165 34.2032 115.9C35.9047 114.009 38.062 112.652 39.9331 110.951C42.0617 109.016 43.7567 106.626 45.9234 104.701C48.6262 102.298 51.8787 100.781 54.7786 98.7099C57.7181 96.6103 60.3514 94.2135 63.3736 92.199C64.8899 91.1878 66.496 90.2733 68.0614 89.3337C69.8955 88.2338 71.3352 86.2364 73.531 85.6877C79.2632 84.2545 85.0624 81.8517 90.1998 78.9157C97.4453 74.7756 104.523 71.1681 112.338 68.2377C113.72 67.7195 114.884 66.5735 116.245 65.8935C120.658 63.6871 125.159 61.3785 129.788 59.6427C132.568 58.5999 135.571 58.2361 138.383 57.2985C141.242 56.3454 144.113 55.0065 146.978 54.4337C148.627 54.104 150.951 54.1401 152.447 53.3919" stroke="black" stroke-width="0.0254068"/>
<path d="M53.4767 135.176C51.8757 135.176 54.0044 133.319 54.2584 133.093C56.6637 130.954 59.3296 129.146 61.8111 127.102C63.4748 125.732 64.8438 124.03 66.4994 122.675C71.2625 118.778 76.8708 115.23 82.1264 111.997C89.6029 107.395 97.5039 103.375 105.567 100.016C108.391 98.839 111.166 97.2159 113.901 95.8484C116.58 94.5089 119.519 94.07 122.235 92.9836C126.637 91.2227 131.119 89.5931 135.779 88.8164C137.444 88.5388 139 87.281 140.728 86.9933C143.22 86.5779 145.597 85.915 148.02 85.4304C148.58 85.3186 150.435 85.4705 150.885 85.1698C151.548 84.7278 151.198 84.6492 152.188 84.6492" fill="black"/>
<path d="M53.4767 135.176C51.8757 135.176 54.0044 133.319 54.2584 133.093C56.6637 130.954 59.3296 129.146 61.8111 127.102C63.4748 125.732 64.8438 124.03 66.4994 122.675C71.2625 118.778 76.8708 115.23 82.1264 111.997C89.6029 107.395 97.5039 103.375 105.567 100.016C108.391 98.839 111.166 97.2159 113.901 95.8484C116.58 94.5089 119.519 94.07 122.235 92.9836C126.637 91.2227 131.119 89.5931 135.779 88.8164C137.444 88.5388 139 87.281 140.728 86.9933C143.22 86.5779 145.597 85.915 148.02 85.4304C148.58 85.3186 150.435 85.4705 150.885 85.1698C151.548 84.7278 151.198 84.6492 152.188 84.6492" stroke="black" stroke-width="0.0254068"/>
<path d="M30.296 100.014C30.296 98.8628 30.1667 98.5712 31.3378 97.4096C41.625 87.2051 52.0356 77.1228 62.5919 67.1974C64.908 65.0191 67.852 63.6221 70.4051 61.7279C77.9382 56.1385 86.0296 51.7068 94.6271 47.9239C101.094 45.0783 107.576 43.5632 114.421 42.194C115.751 41.9281 117.236 42.3443 118.588 42.194C119.974 42.0401 121.194 41.586 122.495 41.1522C123.326 40.8752 125.414 41 124.839 39.85" fill="white"/>
<path d="M30.296 100.014C30.296 98.8628 30.1667 98.5712 31.3378 97.4096C41.625 87.2051 52.0356 77.1228 62.5919 67.1974C64.908 65.0191 67.852 63.6221 70.4051 61.7279C77.9382 56.1385 86.0296 51.7068 94.6271 47.9239C101.094 45.0783 107.576 43.5632 114.421 42.194C115.751 41.9281 117.236 42.3443 118.588 42.194C119.974 42.0401 121.194 41.586 122.495 41.1522C123.326 40.8752 125.414 41 124.839 39.85" stroke="white" stroke-width="0.0254068"/>
<path d="M28.2128 126.578C26.7383 126.578 28.3583 124.053 28.7337 123.453C30.3453 120.874 32.1642 118.165 34.2032 115.9C35.9047 114.009 38.062 112.652 39.9331 110.951C42.0617 109.016 43.7567 106.626 45.9234 104.701C48.6262 102.298 51.8787 100.781 54.7786 98.7099C57.7181 96.6103 60.3514 94.2135 63.3736 92.199C64.8899 91.1878 66.496 90.2733 68.0614 89.3337C69.8955 88.2338 71.3352 86.2364 73.531 85.6877C79.2632 84.2545 85.0624 81.8517 90.1998 78.9157C97.4453 74.7756 104.523 71.1681 112.338 68.2377C113.72 67.7195 114.884 66.5735 116.245 65.8935C120.658 63.6871 125.159 61.3785 129.788 59.6427C132.568 58.5999 135.571 58.2361 138.383 57.2985C141.242 56.3454 144.113 55.0065 146.978 54.4337C148.627 54.104 150.951 54.1401 152.447 53.3919" fill="white"/>
<path d="M28.2128 126.578C26.7383 126.578 28.3583 124.053 28.7337 123.453C30.3453 120.874 32.1642 118.165 34.2032 115.9C35.9047 114.009 38.062 112.652 39.9331 110.951C42.0617 109.016 43.7567 106.626 45.9234 104.701C48.6262 102.298 51.8787 100.781 54.7786 98.7099C57.7181 96.6103 60.3514 94.2135 63.3736 92.199C64.8899 91.1878 66.496 90.2733 68.0614 89.3337C69.8955 88.2338 71.3352 86.2364 73.531 85.6877C79.2632 84.2545 85.0624 81.8517 90.1998 78.9157C97.4453 74.7756 104.523 71.1681 112.338 68.2377C113.72 67.7195 114.884 66.5735 116.245 65.8935C120.658 63.6871 125.159 61.3785 129.788 59.6427C132.568 58.5999 135.571 58.2361 138.383 57.2985C141.242 56.3454 144.113 55.0065 146.978 54.4337C148.627 54.104 150.951 54.1401 152.447 53.3919" stroke="white" stroke-width="0.0254068"/>
<path d="M53.4767 135.176C51.8757 135.176 54.0044 133.319 54.2584 133.093C56.6637 130.954 59.3296 129.146 61.8111 127.102C63.4748 125.732 64.8438 124.03 66.4994 122.675C71.2625 118.778 76.8708 115.23 82.1264 111.997C89.6029 107.395 97.5039 103.375 105.567 100.016C108.391 98.839 111.166 97.2159 113.901 95.8484C116.58 94.5089 119.519 94.07 122.235 92.9836C126.637 91.2227 131.119 89.5931 135.779 88.8164C137.444 88.5388 139 87.281 140.728 86.9933C143.22 86.5779 145.597 85.915 148.02 85.4304C148.58 85.3186 150.435 85.4705 150.885 85.1698C151.548 84.7278 151.198 84.6492 152.188 84.6492" fill="white"/>
<path d="M53.4767 135.176C51.8757 135.176 54.0044 133.319 54.2584 133.093C56.6637 130.954 59.3296 129.146 61.8111 127.102C63.4748 125.732 64.8438 124.03 66.4994 122.675C71.2625 118.778 76.8708 115.23 82.1264 111.997C89.6029 107.395 97.5039 103.375 105.567 100.016C108.391 98.839 111.166 97.2159 113.901 95.8484C116.58 94.5089 119.519 94.07 122.235 92.9836C126.637 91.2227 131.119 89.5931 135.779 88.8164C137.444 88.5388 139 87.281 140.728 86.9933C143.22 86.5779 145.597 85.915 148.02 85.4304C148.58 85.3186 150.435 85.4705 150.885 85.1698C151.548 84.7278 151.198 84.6492 152.188 84.6492" stroke="white" stroke-width="0.0254068"/>
</svg>

After

Width:  |  Height:  |  Size: 8.8 KiB

21
taker-frontend/src/main.tsx

@ -0,0 +1,21 @@
import { ChakraProvider } from "@chakra-ui/react";
import React from "react";
import ReactDOM from "react-dom";
import { BrowserRouter } from "react-router-dom";
import { EventSourceProvider } from "react-sse-hooks";
import { App } from "./App";
import "./index.css";
import theme from "./theme";
ReactDOM.render(
<React.StrictMode>
<ChakraProvider theme={theme}>
<EventSourceProvider>
<BrowserRouter>
<App />
</BrowserRouter>
</EventSourceProvider>
</ChakraProvider>
</React.StrictMode>,
document.getElementById("root"),
);

10
taker-frontend/src/theme.tsx

@ -0,0 +1,10 @@
import { extendTheme, ThemeConfig } from "@chakra-ui/react";
let themeConfig: ThemeConfig = {
initialColorMode: "dark",
useSystemColorMode: false,
};
const theme = extendTheme({ themeConfig });
export default theme;

1
taker-frontend/src/vite-env.d.ts

@ -0,0 +1 @@
/// <reference types="vite/client" />

20
taker-frontend/tsconfig.json

@ -0,0 +1,20 @@
{
"compilerOptions": {
"target": "ESNext",
"useDefineForClassFields": true,
"lib": ["DOM", "DOM.Iterable", "ESNext"],
"allowJs": false,
"esModuleInterop": false,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"module": "ESNext",
"moduleResolution": "Node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react",
"skipLibCheck": false
},
"include": ["src"]
}

19
taker-frontend/vite.config.ts

@ -0,0 +1,19 @@
import react from "@vitejs/plugin-react";
import { resolve } from "path";
import { defineConfig } from "vite";
// https://vitejs.dev/config/
export default defineConfig({
plugins: [react()],
build: {
rollupOptions: {
input: resolve(__dirname, `index.html`),
},
outDir: `dist/taker`,
},
server: {
proxy: {
"/api": "http://localhost:8000",
},
},
});

12799
taker-frontend/yarn.lock

File diff suppressed because it is too large
Loading…
Cancel
Save