[xc-admin] setup frontend template (#480)

* add xc-admin-frontend template

* add more placeholder stuffs

* update placefolders

* fix precommit

* add package-lock.json

* address comments

* fix type

* add package-lock.json

* Fix CI (#483)

* fix ci

Co-authored-by: guibescos <59208140+guibescos@users.noreply.github.com>
This commit is contained in:
Daniel Chew 2023-01-13 13:23:49 +09:00 committed by GitHub
parent bab75170f9
commit 8b9682ccac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
67 changed files with 15059 additions and 1561 deletions

14571
xc-admin/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
node_modules

View File

@ -0,0 +1,3 @@
{
"extends": "next/core-web-vitals"
}

View File

@ -0,0 +1,36 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# next.js
/.next/
/out/
# production
/build
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*
# local env files
.env*.local
# vercel
.vercel
# typescript
*.tsbuildinfo
next-env.d.ts

View File

@ -0,0 +1,4 @@
.next
node_modules
build
coverage

View File

@ -0,0 +1,6 @@
{
"trailingComma": "es5",
"tabWidth": 2,
"semi": false,
"singleQuote": true
}

View File

@ -0,0 +1,36 @@
This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
## Getting Started
First, run the development server:
```bash
npm run dev
# or
yarn dev
```
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file.
[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`.
The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages.
This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
## Learn More
To learn more about Next.js, take a look at the following resources:
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
## Deploy on Vercel
The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.

View File

@ -0,0 +1,13 @@
function Main() {
return (
<div className="pt-15 relative lg:pt-20">
<div className="container z-10 flex flex-col items-center justify-between pt-32 lg:flex-row ">
<div className="mb-10 w-full max-w-lg text-center lg:mb-0 lg:w-1/2 lg:max-w-none lg:text-left">
<h1 className="h1 mb-3">Governance Dashboard</h1>
</div>
</div>
</div>
)
}
export default Main

View File

@ -0,0 +1,52 @@
import Link from 'next/link'
import Discord from '../../images/icons/discord.inline.svg'
import Github from '../../images/icons/github.inline.svg'
import LinkedIn from '../../images/icons/linkedin.inline.svg'
import Substack from '../../images/icons/substack.inline.svg'
import Telegram from '../../images/icons/telegram.inline.svg'
import Twitter from '../../images/icons/twitter.inline.svg'
import Youtube from '../../images/icons/youtube.inline.svg'
const SocialLinks = () => {
return (
<div className="flex items-center">
<Link href="https://twitter.com/PythNetwork">
<a target="_blank" className="mr-6">
<Twitter />
</a>
</Link>
<Link href="https://discord.gg/invite/PythNetwork">
<a target="_blank" className="mr-6">
<Discord />
</a>
</Link>
<Link href="https://t.me/Pyth_Network">
<a target="_blank" className="mr-6">
<Telegram />
</a>
</Link>
<Link href="https://www.linkedin.com/company/pyth-network">
<a target="_blank" className="mr-6">
<LinkedIn />
</a>
</Link>
<Link href="https://github.com/pyth-network">
<a target="_blank" className="mr-6">
<Github />
</a>
</Link>
<Link href="https://pyth.substack.com">
<a target="_blank" className="mr-6">
<Substack />
</a>
</Link>
<Link href="https://www.youtube.com/channel/UCjCkvPN9ohl0UDvldfn1neg">
<a target="_blank" className="">
<Youtube />
</a>
</Link>
</div>
)
}
export default SocialLinks

View File

@ -0,0 +1,22 @@
import Link from 'next/link'
import SocialLinks from '../common/SocialLinks'
const Footer = () => {
return (
<footer>
<div className="flex flex-col-reverse items-center justify-between px-4 pt-12 pb-4 sm:px-10 lg:flex-row lg:py-6">
<span className="text-[10px] lg:basis-[280px]">
© 2022 Pyth Data Association
</span>
<div className="py-10 lg:py-0">
<Link href="https://pyth.network/">
<a target="_blank">Pyth Network</a>
</Link>{' '}
</div>
<SocialLinks />
</div>
</footer>
)
}
export default Footer

View File

@ -0,0 +1,157 @@
import Link from 'next/link'
import { useRouter } from 'next/router'
import { useContext, useEffect, useState } from 'react'
import { ClusterContext, DEFAULT_CLUSTER } from '../../contexts/ClusterContext'
import Pyth from '../../images/logomark.inline.svg'
import MobileMenu from './MobileMenu'
export interface BurgerState {
initial: boolean | null
opened: boolean | null
}
function Header() {
const { cluster } = useContext(ClusterContext)
const router = useRouter()
const [isSticky, setIsSticky] = useState(false)
const navigation = [
{
name: 'Main',
href: `/${cluster === DEFAULT_CLUSTER ? '' : `?cluster=${cluster}`}`,
target: '_self',
},
{
name: 'Pyth Network',
href: 'https://pyth.network/',
target: '_blank',
},
]
const [headerState, setHeaderState] = useState<BurgerState>({
initial: false,
opened: null,
})
// Toggle menu
const handleToggleMenu = () => {
if (headerState.initial === false) {
setHeaderState({
initial: null,
opened: true,
})
} else {
setHeaderState({
...headerState,
opened: !headerState.opened,
})
}
}
useEffect(() => {
window.addEventListener('scroll', ifSticky)
return () => {
window.removeEventListener('scroll', ifSticky)
}
})
const ifSticky = () => {
const scrollTop = window.scrollY
if (!headerState.opened) {
scrollTop >= 250 ? setIsSticky(true) : setIsSticky(false)
}
}
return (
<>
<header
className={`left-0 top-0 z-40 w-full px-1 transition-all lg:px-10
${isSticky || headerState.opened ? 'fixed ' : 'absolute'}
${isSticky && !headerState.opened ? 'bg-darkGray shadow-black' : ''}
`}
>
<div
className={`relative flex items-center justify-between ${
isSticky ? 'lg:py-4' : 'before:gradient-border md:py-6'
}
${
!headerState.opened
? 'px-4 py-3 lg:px-10 lg:py-6'
: 'sm:px-4 sm:py-3 sm:lg:px-10 sm:lg:py-6'
}
`}
>
<Link href="/">
<a
className={`basis-7 ${
headerState.opened &&
'fixed left-5 top-3 sm:relative sm:left-0 sm:top-0'
}`}
>
<Pyth />
</a>
</Link>
<nav>
<ul
className={`hidden list-none lg:flex ${
headerState.opened && 'hidden'
}`}
>
{navigation.map((item) => (
<li key={item.name}>
<Link href={item.href}>
<a
className={`px-6 text-sm leading-none tracking-wide transition-colors hover:text-white lg:px-6 xl:px-8 ${
router.pathname === item.href
? 'text-white'
: 'text-light'
}`}
aria-current={
router.pathname === item.href ? 'page' : undefined
}
target={item.target}
>
{item.name}
</a>
</Link>
</li>
))}
</ul>
</nav>
<div
className={`basis-7 ${
headerState.opened &&
'fixed right-5 top-[20px] sm:relative sm:left-0 sm:top-0'
}`}
onClick={handleToggleMenu}
>
<button className="group ml-auto block lg:hidden">
<span
className={`ml-auto block h-0.5 w-3.5 rounded-sm bg-light transition-all lg:group-hover:w-5 ${
headerState.opened
? 'mb-0 w-5 translate-y-1 rotate-45'
: 'mb-1'
}`}
></span>
<span
className={`mb-1 block h-0.5 w-5 rounded-sm bg-light transition-all ${
headerState.opened && 'opacity-0'
}`}
></span>
<span
className={`ml-auto block h-0.5 w-3.5 rounded-sm bg-light transition-all lg:group-hover:w-5 ${
headerState.opened
? 'mb-0 w-5 -translate-y-1 -rotate-45'
: 'mb-1'
}`}
></span>
</button>
</div>
</div>
</header>
<MobileMenu headerState={headerState} setHeaderState={setHeaderState} />
</>
)
}
export default Header

View File

@ -0,0 +1,13 @@
import React from 'react'
import Footer from './Footer'
import Header from './Header'
export default function Layout({ children }: { children: React.ReactNode }) {
return (
<div className="relative overflow-hidden">
<Header />
<main>{children}</main>
<Footer />
</div>
)
}

View File

@ -0,0 +1,93 @@
import { gsap } from 'gsap'
import Image from 'next/image'
import Link from 'next/link'
import { useRouter } from 'next/router'
import { useContext, useEffect, useRef } from 'react'
import { ClusterContext, DEFAULT_CLUSTER } from '../../contexts/ClusterContext'
import { BurgerState } from './Header'
import orb from '../../images/burger.png'
interface MenuProps {
headerState: BurgerState
setHeaderState: Function
}
const MobileMenu = ({ headerState, setHeaderState }: MenuProps) => {
let burgerMenu = useRef(null)
const router = useRouter()
const { cluster } = useContext(ClusterContext)
const navigation = [
{
name: 'Main',
href: `/${cluster === DEFAULT_CLUSTER ? '' : `?cluster=${cluster}`}`,
target: '_self',
},
{
name: 'Pyth Network',
href: 'https://pyth.network/',
target: '_blank',
},
]
useEffect(() => {
// close menu
if (!headerState.opened) {
gsap.to(burgerMenu.current, {
duration: 0.3,
ease: 'power4.out',
css: { right: '-100%' },
})
gsap.set(document.body, { overflow: 'initial' })
} else {
// show menu
gsap.to(burgerMenu.current, {
duration: 0.3,
ease: 'power4.out',
css: { right: '0' },
})
gsap.set(document.body, { overflow: 'hidden' })
}
}, [headerState])
return (
<div
ref={burgerMenu}
className="fixed top-0 -right-full z-30 h-full w-full overscroll-y-none bg-darkGray landscape:overflow-auto "
>
<div className="relative flex min-h-[100vh] flex-col sm:justify-between">
<Image
src={orb}
alt=""
layout="fill"
objectFit="cover"
objectPosition="bottom center"
/>
<div className="sm:after:gradient-border relative flex px-14 pt-16 sm:flex-1 sm:items-center md:px-28 ">
<div className="grid w-full sm:grid-cols-2">
<ul className="list-none pt-5 sm:pt-10">
{navigation.map((item) => (
<li key={item.name} className="mb-5 sm:mb-10">
<Link href={item.href}>
<a
target={item.target}
className=" inline-block font-body text-4xl leading-none tracking-wide transition-colors hover:text-white"
aria-current={
router.pathname === item.href ? 'page' : undefined
}
>
{item.name}
</a>
</Link>
</li>
))}
</ul>
</div>
</div>
</div>
</div>
)
}
export default MobileMenu

View File

@ -0,0 +1,27 @@
import { PythCluster } from '@pythnetwork/client/lib/cluster'
import { createContext, useMemo, useState } from 'react'
import { isValidCluster } from '../utils/isValidCluster'
export const DEFAULT_CLUSTER: PythCluster = 'pythnet'
export const ClusterContext = createContext<{
cluster: PythCluster
setCluster: any
}>({
cluster: DEFAULT_CLUSTER,
setCluster: (cluster: PythCluster) => {},
})
export const ClusterProvider = (props: any) => {
const [cluster, setCluster] = useState<PythCluster>(DEFAULT_CLUSTER)
const contextValue = useMemo(
() => ({
cluster,
setCluster: (cluster: PythCluster) => {
setCluster(cluster)
},
}),
[cluster]
)
return <ClusterContext.Provider {...props} value={contextValue} />
}

View File

@ -0,0 +1,63 @@
import React, { createContext, useContext, useEffect, useMemo } from 'react'
import { useDebounce } from 'use-debounce'
import usePyth from '../hooks/usePyth'
import { PythData } from '../types'
// TODO: fix any
interface PythContextProps {
data: PythData
dataIsLoading: boolean
error: any
connection: any
}
const PythContext = createContext<PythContextProps>({
data: {},
dataIsLoading: true,
error: null,
connection: null,
})
export const usePythContext = () => useContext(PythContext)
interface PythContextProviderProps {
children?: React.ReactNode
symbols?: string[]
raw?: boolean
}
export const PythContextProvider: React.FC<PythContextProviderProps> = ({
children,
symbols,
raw,
}) => {
const { symbolMap, isLoading, error, connection } = usePyth(symbols)
const [debouncedSymbolMap, { flush: flushSymbolMap }] = useDebounce(
symbolMap,
500,
{ maxWait: 500 }
)
const data = raw ? symbolMap : debouncedSymbolMap
useEffect(() => {
if (Object.keys(symbolMap).length == 0) flushSymbolMap()
}, [symbolMap, flushSymbolMap])
// const {
// data: historicalData,
// loading: historicalLoading,
// error: historicalError,
// } = useHistoricalData()
const value = useMemo(
() => ({
data,
dataIsLoading: isLoading,
error,
connection,
}),
[data, isLoading, error, connection]
)
return <PythContext.Provider value={value}>{children}</PythContext.Provider>
}

View File

@ -0,0 +1,364 @@
import {
parseMappingData,
parsePriceData,
parseProductData,
PriceData,
ProductData,
} from '@pythnetwork/client'
import { AccountInfo, Commitment, Connection, PublicKey } from '@solana/web3.js'
import { Buffer } from 'buffer'
import { SetStateAction, useContext, useEffect, useRef, useState } from 'react'
import { ClusterContext } from '../contexts/ClusterContext'
import { pythClusterApiUrls } from '../utils/pythClusterApiUrl'
const ONES = '11111111111111111111111111111111'
function chunks<T>(array: T[], size: number): T[][] {
return Array.apply(0, new Array(Math.ceil(array.length / size))).map(
(_, index) => array.slice(index * size, (index + 1) * size)
)
}
const getMultipleAccountsCore = async (
connection: Connection,
keys: string[],
commitment: string
) => {
//keys are initially base58 encoded
const pubkeyTransform = keys.map((x) => new PublicKey(x))
const resultArray = await connection.getMultipleAccountsInfo(
pubkeyTransform,
commitment as Commitment
)
return { keys, array: resultArray }
}
const getMultipleAccounts = async (
connection: Connection,
keys: string[],
commitment: string
) => {
const result = await Promise.all(
chunks(keys, 99).map((chunk) =>
getMultipleAccountsCore(connection, chunk, commitment)
)
)
const array = result
.map(
(a) =>
a.array
.map((acc) => {
if (!acc) {
return undefined
} else {
return acc
}
})
.filter((_) => _) as AccountInfo<Buffer>[]
)
.flat()
return { keys, array }
}
export const ORACLE_PUBLIC_KEYS: { [key: string]: string } = {
devnet: 'BmA9Z6FjioHJPpjT39QazZyhDRUdZy2ezwx4GiDdE2u2',
testnet: 'AFmdnt9ng1uVxqCmqwQJDAYC5cKTkw8gJKSM5PnzuF6z',
'mainnet-beta': 'AHtgzX45WTKfkPG53L6WYhGEXwQkN1BVknET3sVsLL8J',
pythtest: 'AFmdnt9ng1uVxqCmqwQJDAYC5cKTkw8gJKSM5PnzuF6z',
pythnet: 'AHtgzX45WTKfkPG53L6WYhGEXwQkN1BVknET3sVsLL8J',
}
export const BAD_SYMBOLS = [undefined]
const createSetSymbolMapUpdater =
(
symbol: string | number,
product: ProductData,
price: PriceData,
productAccountKey: any,
priceAccountKey: any
) =>
(prev: { [x: string]: { price: { [x: string]: number } } }) =>
!prev[symbol] || prev[symbol].price['validSlot'] < price.validSlot
? {
...prev,
[symbol]: {
product,
price,
productAccountKey,
priceAccountKey,
},
}
: prev
const handlePriceInfo = (
symbol: string,
product: ProductData,
accountInfo: {
executable?: boolean
owner?: PublicKey
lamports?: number
data: Buffer
rentEpoch?: number | undefined
},
setSymbolMap: {
(value: SetStateAction<{}>): void
(value: SetStateAction<{}>): void
(
arg0: (prev: { [x: string]: { price: { [x: string]: number } } }) => {
[x: string]:
| { price: { [x: string]: number } }
| {
product: ProductData
price: PriceData
productAccountKey: number
priceAccountKey: number
}
}
): void
},
productAccountKey: string,
priceAccountKey: PublicKey,
setPriceAccounts: {
(value: SetStateAction<{}>): void
(value: SetStateAction<{}>): void
(arg0: (o: any) => any): void
}
) => {
if (!accountInfo || !accountInfo.data) return
const price = parsePriceData(accountInfo.data)
setPriceAccounts((o) => ({
...o,
[priceAccountKey.toString()]: {
isLoading: false,
error: null,
price,
},
}))
if (price.priceType !== 1)
console.log(symbol, price.priceType, price.nextPriceAccountKey!.toString)
setSymbolMap(
createSetSymbolMapUpdater(
symbol,
product,
price,
productAccountKey,
priceAccountKey
)
)
}
interface IProductAccount {
isLoading: boolean
error: any // TODO: fix any
product: any // TODO: fix any
}
interface PythHookData {
isLoading: boolean
error: any // TODO: fix any
version: number | null
numProducts: number
productAccounts: { [key: string]: IProductAccount }
priceAccounts: any // TODO: fix any
symbolMap: any // TODO: fix any
connection?: Connection
}
const usePyth = (
symbolFilter?: Array<String>,
subscribe = true
): PythHookData => {
const connectionRef = useRef<Connection>()
const { cluster } = useContext(ClusterContext)
const oraclePublicKey = ORACLE_PUBLIC_KEYS[cluster]
const [isLoading, setIsLoading] = useState(true)
const [error, setError] = useState(null)
const [version, setVersion] = useState<number | null>(null)
const [urlsIndex, setUrlsIndex] = useState(0)
const [numProducts, setNumProducts] = useState(0)
const [productAccounts, setProductAccounts] = useState({})
const [priceAccounts, setPriceAccounts] = useState({})
const [symbolMap, setSymbolMap] = useState({})
useEffect(() => {
setIsLoading(true)
setError(null)
setVersion(null)
setNumProducts(0)
setProductAccounts({})
setPriceAccounts({})
setSymbolMap({})
}, [urlsIndex, oraclePublicKey, cluster])
useEffect(() => {
let cancelled = false
const subscriptionIds: number[] = []
const urls = pythClusterApiUrls(cluster)
const connection = new Connection(urls[urlsIndex].rpcUrl, {
commitment: 'confirmed',
wsEndpoint: urls[urlsIndex].wsUrl,
})
connectionRef.current = connection
;(async () => {
// read mapping account
const publicKey = new PublicKey(oraclePublicKey)
try {
const accountInfo = await connection.getAccountInfo(publicKey)
if (cancelled) return
if (!accountInfo || !accountInfo.data) {
setIsLoading(false)
return
}
const { productAccountKeys, version, nextMappingAccount } =
parseMappingData(accountInfo.data)
let allProductAccountKeys = [...productAccountKeys]
let anotherMappingAccount = nextMappingAccount
while (anotherMappingAccount) {
const accountInfo = await connection.getAccountInfo(
anotherMappingAccount
)
if (cancelled) return
if (!accountInfo || !accountInfo.data) {
anotherMappingAccount = null
} else {
const { productAccountKeys, nextMappingAccount } = parseMappingData(
accountInfo.data
)
allProductAccountKeys = [
...allProductAccountKeys,
...productAccountKeys,
]
anotherMappingAccount = nextMappingAccount
}
}
setIsLoading(false)
setVersion(version)
setNumProducts(allProductAccountKeys.length)
setProductAccounts(
allProductAccountKeys.reduce((o, p) => {
// @ts-ignore
o[p.toString()] = { isLoading: true, error: null, product: null }
return o
}, {})
)
const productsInfos = await getMultipleAccounts(
connection,
allProductAccountKeys.map((p) => p.toBase58()),
'confirmed'
)
if (cancelled) return
const productsData = productsInfos.array.map((p) =>
parseProductData(p.data)
)
const priceInfos = await getMultipleAccounts(
connection,
productsData
.filter((x) => x.priceAccountKey.toString() !== ONES)
.map((p) => p.priceAccountKey.toBase58()),
'confirmed'
)
if (cancelled) return
for (let i = 0; i < productsInfos.keys.length; i++) {
const productAccountKey = productsInfos.keys[i]
const product = productsData[i]
const symbol = product.product.symbol
const priceAccountKey = product.priceAccountKey
const priceInfo = priceInfos.array[i]
setProductAccounts((o) => ({
...o,
[productAccountKey.toString()]: {
isLoading: false,
error: null,
product,
},
}))
if (
priceAccountKey.toString() !== ONES &&
(!symbolFilter || symbolFilter.includes(symbol)) &&
// @ts-ignore
!BAD_SYMBOLS.includes(symbol)
) {
// TODO: we can add product info here and update the price later
setPriceAccounts((o) => ({
...o,
[priceAccountKey.toString()]: {
isLoading: true,
error: null,
price: null,
},
}))
handlePriceInfo(
symbol,
product,
priceInfo,
setSymbolMap,
productAccountKey,
priceAccountKey,
setPriceAccounts
)
if (subscribe) {
subscriptionIds.push(
connection.onAccountChange(priceAccountKey, (accountInfo) => {
if (cancelled) return
handlePriceInfo(
symbol,
product,
accountInfo,
setSymbolMap,
productAccountKey,
priceAccountKey,
setPriceAccounts
)
})
)
}
}
}
setIsLoading(false)
} catch (e) {
if (cancelled) return
if (urlsIndex === urls.length - 1) {
// @ts-ignore
setError(e)
setIsLoading(false)
console.warn(
`Failed to fetch mapping info for ${publicKey.toString()}`
)
} else if (urlsIndex < urls.length - 1) {
setUrlsIndex((urlsIndex) => urlsIndex + 1)
}
}
})()
return () => {
cancelled = true
for (const subscriptionId of subscriptionIds) {
connection.removeAccountChangeListener(subscriptionId).catch(() => {
console.warn(
`Unsuccessfully attempted to remove listener for subscription id ${subscriptionId}`
)
})
}
}
}, [symbolFilter, urlsIndex, oraclePublicKey, cluster, subscribe])
return {
isLoading,
error,
version,
numProducts,
productAccounts,
priceAccounts,
symbolMap,
connection: connectionRef.current,
}
}
export default usePyth

Binary file not shown.

After

Width:  |  Height:  |  Size: 308 KiB

View File

@ -0,0 +1,11 @@
<svg width="9" height="11" viewBox="0 0 9 11" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_4697_1878)">
<path d="M6.62869 4.06214C6.15584 4.80071 5.48596 5.23286 4.59542 5.28786C3.45269 5.37429 2.48334 4.65929 2.06565 3.72429C1.64796 2.84429 1.81346 1.67357 2.45181 0.935C2.84586 0.479286 3.31871 0.172857 3.9019 0.055C3.98859 0.0314286 4.09892 0.0314286 4.17773 0H4.68211C4.82397 0.0314286 4.95794 0.055 5.0998 0.0864286C6.04551 0.314286 6.88088 1.24929 6.99122 2.24714C7.07791 2.89929 6.99122 3.52786 6.62869 4.06214Z" fill="#242235"/>
<path d="M8.99278 9.20566C8.99278 10.1721 8.33078 10.8871 7.38508 10.9657C7.26686 10.9657 7.13289 10.9971 7.02255 10.9971H1.92361C1.48227 10.9971 1.08823 10.9107 0.725707 10.6592C0.308019 10.3449 0.0558296 9.94423 0.0321869 9.43352C-0.0545032 8.52209 0.0558296 7.61066 0.394709 6.76209C0.591731 6.25137 0.891206 5.82709 1.39558 5.53637C1.70294 5.37137 2.03394 5.28494 2.37282 5.30852C2.48315 5.30852 2.59348 5.37137 2.70382 5.42637C2.86931 5.5128 3.01117 5.6228 3.17667 5.70923C4.06721 6.27494 4.98928 6.27494 5.87982 5.70923C5.99015 5.6228 6.13201 5.5678 6.24234 5.48137C6.46301 5.30852 6.7152 5.28494 6.96739 5.33994C7.66091 5.4578 8.13376 5.82709 8.46476 6.4478C8.77212 7.02137 8.91397 7.61066 8.96914 8.23923C8.99278 8.55351 9.02431 8.89137 8.99278 9.20566Z" fill="#242235"/>
</g>
<defs>
<clipPath id="clip0_4697_1878">
<rect width="9" height="11" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1,3 @@
<svg width="9" height="10" viewBox="0 0 9 10" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3.61375 0.5L3.61375 7.58952L1.04709 5.42731L0.210938 6.13154L4.21094 9.5L8.21094 6.13154L7.37479 5.42731L4.80813 7.58952L4.80813 0.5L3.61375 0.5Z" fill="currentColor"/>
</svg>

After

Width:  |  Height:  |  Size: 280 B

View File

@ -0,0 +1,3 @@
<svg width="10" height="9" viewBox="0 0 10 9" xmlns="http://www.w3.org/2000/svg">
<path d="M-3.34668e-07 5.17184L7.87725 5.17184L5.47479 8.05933L6.25727 9L10 4.5L6.25727 3.272e-07L5.47479 0.940668L7.87725 3.82816L-4.52137e-07 3.82816L-3.34668e-07 5.17184Z" fill="currentColor"/>
</svg>

After

Width:  |  Height:  |  Size: 287 B

View File

@ -0,0 +1,3 @@
<svg width="14" height="13" viewBox="0 0 14 13" xmlns="http://www.w3.org/2000/svg">
<path d="M-2.38419e-07 5.52956L11.0281 5.52956L7.6647 1.35874L8.76018 0L14 6.5L8.76018 13L7.6647 11.6413L11.0281 7.47044L-2.38419e-07 7.47044V5.52956Z" fill="currentColor" />
</svg>

After

Width:  |  Height:  |  Size: 267 B

View File

@ -0,0 +1,3 @@
<svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M9.39844 3.90281L2.30892 3.90281L4.47113 1.33615L3.7669 0.5L0.398438 4.5L3.7669 8.5L4.47113 7.66385L2.30892 5.09719L9.39844 5.09719V3.90281Z" fill="currentColor"/>
</svg>

After

Width:  |  Height:  |  Size: 274 B

View File

@ -0,0 +1,4 @@
<svg width="11" height="12" viewBox="0 0 11 12" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M2.05859 6.91818C2.05859 5.71877 2.05859 4.51551 2.05859 3.3161C2.05859 2.43192 2.64448 1.84375 3.53102 1.84375C5.31952 1.84375 7.10802 1.84375 8.89652 1.84375C9.78306 1.84375 10.369 2.42808 10.369 3.3161C10.369 5.71877 10.369 8.12143 10.369 10.5241C10.369 11.4083 9.78306 11.9964 8.89652 11.9964C7.10802 11.9964 5.31952 11.9964 3.53102 11.9964C2.64448 11.9964 2.05859 11.4121 2.05859 10.5241C2.05859 9.32084 2.05859 8.11759 2.05859 6.91818ZM9.44387 6.93355C9.44387 5.72261 9.44387 4.51167 9.44387 3.30073C9.44387 2.94705 9.26656 2.76637 8.91194 2.76637C7.11188 2.76637 5.31567 2.76637 3.5156 2.76637C3.15328 2.76637 2.97983 2.94321 2.97983 3.30841C2.97983 5.71492 2.97983 8.12143 2.97983 10.5318C2.97983 10.8931 3.15713 11.0738 3.5156 11.0738C5.30796 11.0738 7.10417 11.0738 8.89652 11.0738C9.27041 11.0738 9.44001 10.9008 9.44001 10.5241C9.44772 9.32469 9.44387 8.12912 9.44387 6.93355Z" fill="currentcolor"/>
<path d="M0.210938 4.10952C0.210938 3.22534 0.210938 2.34116 0.210938 1.45698C0.210938 0.592017 0.80068 0 1.66795 0C3.16736 0 4.66677 0 6.17004 0C6.53236 0 6.76749 0.311385 6.64414 0.626615C6.57476 0.803451 6.40902 0.918779 6.20473 0.922623C5.86938 0.926467 5.53018 0.922623 5.19484 0.922623C4.02306 0.922623 2.84743 0.922623 1.67566 0.922623C1.30948 0.922623 1.13602 1.09561 1.13602 1.46082C1.13602 3.2484 1.13602 5.03598 1.13602 6.82357C1.13602 6.88892 1.13602 6.95812 1.12446 7.02347C1.07435 7.25028 0.858498 7.40021 0.631081 7.37714C0.399809 7.35407 0.218647 7.16186 0.214792 6.91967C0.210938 6.31997 0.214792 5.72026 0.214792 5.11671C0.210938 4.78226 0.210938 4.44781 0.210938 4.10952Z" fill="currentcolor"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1,3 @@
<svg width="23" height="18" viewBox="0 0 23 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M19.0591 1.93931C17.584 1.26468 16.0268 0.786043 14.4272 0.515625C14.2081 0.906422 14.0099 1.30851 13.8333 1.72021C12.1291 1.46365 10.396 1.46365 8.69182 1.72021C8.51547 1.30857 8.31757 0.906489 8.09894 0.515625C6.49818 0.788391 4.93981 1.26826 3.46314 1.94314C0.847553 5.64152 -0.335465 10.1625 0.133797 14.6663C1.85078 15.9335 3.77252 16.8972 5.81552 17.5156C6.27475 16.8974 6.68102 16.2416 7.03002 15.5552C6.36589 15.3073 5.72487 15.0016 5.1144 14.6415C5.27532 14.5247 5.4324 14.4051 5.58373 14.2884C7.36062 15.1231 9.29999 15.5559 11.2635 15.5559C13.2271 15.5559 15.1665 15.1231 16.9433 14.2884C17.0966 14.4138 17.2546 14.5334 17.4127 14.6415C16.8022 15.002 16.1612 15.3084 15.4971 15.5571C15.8463 16.2432 16.2532 16.8984 16.7135 17.5156C18.7583 16.8998 20.6817 15.9366 22.399 14.6683C22.8676 10.1611 21.6807 5.6374 19.0591 1.93931ZM7.53575 12.1051C6.97163 12.0727 6.44304 11.8195 6.06455 11.4004C5.68606 10.9813 5.48818 10.4301 5.51381 9.8662C5.49817 9.58617 5.53801 9.30581 5.63103 9.04118C5.72406 8.77655 5.86845 8.53287 6.05592 8.32408C6.2434 8.1153 6.47028 7.94552 6.72356 7.82449C6.97683 7.70345 7.25153 7.63353 7.53191 7.61873C7.81317 7.63167 8.08905 7.70029 8.34353 7.82063C8.59801 7.94097 8.82602 8.11061 9.01432 8.31971C9.20261 8.52881 9.34744 8.7732 9.44039 9.03868C9.53334 9.30416 9.57256 9.58545 9.55576 9.8662C9.58217 10.4299 9.38481 10.9813 9.00658 11.4005C8.62834 11.8197 8.09979 12.0729 7.53575 12.1051ZM14.9961 12.1051C14.4321 12.0729 13.9035 11.8197 13.5253 11.4005C13.1471 10.9813 12.9497 10.4299 12.9761 9.8662C12.9605 9.58601 13.0004 9.3055 13.0935 9.04076C13.1867 8.77601 13.3312 8.53224 13.5189 8.32343C13.7066 8.11463 13.9337 7.94489 14.1872 7.82396C14.4407 7.70303 14.7156 7.63329 14.9961 7.61873C15.2772 7.63165 15.5529 7.7003 15.8071 7.8207C16.0613 7.94109 16.289 8.11082 16.4769 8.31999C16.6649 8.52916 16.8092 8.7736 16.9016 9.03906C16.994 9.30452 17.0326 9.58569 17.0152 9.8662C17.0418 10.43 16.8446 10.9815 16.4663 11.4008C16.088 11.82 15.5593 12.0732 14.9952 12.1051H14.9961Z" fill="#E6DAFE"/>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -0,0 +1 @@
<svg width="10" height="6.17" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 6.17"><path fill="currentColor" d="M1.17,0l3.83,3.82L8.82,0l1.17,1.17L5,6.17,0,1.17,1.17,0Z"/></svg>

After

Width:  |  Height:  |  Size: 182 B

View File

@ -0,0 +1,4 @@
<svg width="14" height="13" viewBox="0 0 14 13" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M13.0266 6.2433L2.06703 9.97502C1.38365 9.00698 0.97833 7.8278 0.967019 6.55247C0.938741 3.22134 3.61665 0.497244 6.94872 0.468966C10.2101 0.441631 12.8899 3.00831 13.0266 6.2433Z" fill="#74708F"/>
<path d="M13.0307 6.45333C13.0589 9.7854 10.381 12.5086 7.0499 12.5368C6.97543 12.5378 6.90097 12.5368 6.8265 12.534C6.77655 12.5331 6.72565 12.5312 6.67569 12.5274C6.63233 12.5255 6.58897 12.5236 6.54561 12.5189C6.51262 12.517 6.47963 12.5151 6.4457 12.5114C6.31656 12.5001 6.18931 12.484 6.063 12.4633C6.01964 12.4567 5.97723 12.4501 5.93481 12.4416C5.9235 12.4407 5.91313 12.4379 5.90182 12.436C5.86317 12.4284 5.82453 12.4218 5.78682 12.4133C5.76043 12.4086 5.73498 12.403 5.70859 12.3973C5.70105 12.3954 5.69351 12.3945 5.68691 12.3926C5.58417 12.37 5.48331 12.3445 5.38151 12.3163C5.31364 12.2984 5.24577 12.2776 5.17791 12.2559C5.13361 12.2418 5.09025 12.2286 5.04595 12.2126C5.03746 12.2097 5.02992 12.2069 5.02144 12.2041C4.98279 12.19 4.94509 12.1768 4.90644 12.1626C4.8348 12.1362 4.76317 12.1079 4.69247 12.0787C4.63686 12.0561 4.58125 12.0316 4.52563 12.0061C4.48133 11.9864 4.43703 11.9666 4.39273 11.9449C4.32675 11.9128 4.26076 11.8798 4.19667 11.8469C4.14483 11.8186 4.09298 11.7912 4.04208 11.762C4.04114 11.762 4.04114 11.7611 4.0402 11.7611C3.99024 11.7319 3.93934 11.7036 3.89032 11.6744C3.88561 11.6706 3.8809 11.6678 3.87619 11.6649C3.82906 11.6357 3.78098 11.6065 3.73385 11.5754C3.69615 11.5509 3.65939 11.5264 3.62169 11.5019C3.50952 11.4265 3.40206 11.3473 3.29555 11.2643C3.11928 11.1277 2.94962 10.9797 2.79032 10.8251C2.73753 10.7723 2.68475 10.7205 2.63385 10.6658C2.59614 10.6252 2.5575 10.5847 2.52074 10.5423C2.50471 10.5244 2.48869 10.5065 2.47266 10.4876C2.45664 10.4707 2.44156 10.4528 2.42742 10.4348C2.40291 10.4066 2.3784 10.3783 2.35578 10.351C2.3096 10.2953 2.26435 10.2388 2.22005 10.1813C2.20308 10.1596 2.18706 10.137 2.17009 10.1153C2.13427 10.0691 2.0994 10.022 2.06641 9.97392L13.0259 6.24219C13.0288 6.31477 13.0297 6.38358 13.0307 6.45333Z" fill="#242235"/>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -0,0 +1 @@
<svg width="18" height="18" viewBox="0 0 24 24" ><path fill="currentColor" d="M11 15h2v2h-2zm0-8h2v6h-2zm.99-5C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z"></path></svg>

After

Width:  |  Height:  |  Size: 261 B

View File

@ -0,0 +1,3 @@
<svg width="19" height="19" viewBox="0 0 19 19" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.32069 -0.000976406C7.10964 0.000627572 4.97125 0.782612 3.28785 2.20516C1.60446 3.62771 0.485817 5.59807 0.131945 7.76394C-0.221927 9.92982 0.212043 12.15 1.35626 14.0275C2.50048 15.905 4.28034 17.3174 6.37761 18.0122C6.84304 18.0969 7.01292 17.8113 7.01292 17.5665C7.01292 17.3471 7.00517 16.7659 7.00051 15.9946C4.41038 16.5527 3.86272 14.7552 3.86272 14.7552C3.69141 14.1965 3.32472 13.7169 2.82868 13.4027C1.98314 12.8292 2.89306 12.8407 2.89306 12.8407C3.18827 12.8813 3.47024 12.9883 3.71747 13.1534C3.96469 13.3186 4.17065 13.5376 4.31962 13.7937C4.44567 14.0219 4.61605 14.2229 4.82088 14.3853C5.02572 14.5476 5.26096 14.6681 5.513 14.7397C5.76504 14.8112 6.02888 14.8325 6.28926 14.8023C6.54964 14.7721 6.80141 14.6909 7.02999 14.5635C7.07227 14.0949 7.28191 13.6568 7.62109 13.328C5.55301 13.0971 3.37867 12.3019 3.37867 8.75929C3.3652 7.84098 3.70855 6.95278 4.33746 6.27901C4.05292 5.48173 4.08566 4.60675 4.42899 3.8326C4.42899 3.8326 5.21092 3.58396 6.98888 4.78022C8.51535 4.36562 10.126 4.36562 11.6525 4.78022C13.4305 3.58396 14.2124 3.8326 14.2124 3.8326C14.5571 4.6064 14.5901 5.4818 14.3047 6.27901C14.9338 6.9526 15.277 7.84099 15.2627 8.75929C15.2627 12.3104 13.0845 13.0917 11.0087 13.3203C11.2313 13.5443 11.4031 13.8129 11.5126 14.1082C11.622 14.4035 11.6666 14.7186 11.6432 15.0323C11.6432 16.264 11.6316 17.2648 11.6316 17.5673C11.6316 17.8144 11.7999 18.1061 12.2723 18.0122C14.3703 17.3172 16.1506 15.9041 17.2948 14.0257C18.4389 12.1473 18.8723 9.9262 18.5173 7.75976C18.1623 5.59333 17.0421 3.62292 15.3572 2.20105C13.6723 0.779177 11.5325 -0.00138072 9.32069 -0.000976406" fill="#E6DAFE"/>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -0,0 +1,3 @@
<svg width="19" height="19" viewBox="0 0 19 19" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M18.1016 18.0156H14.5016V11.7165C14.5016 9.98853 13.7393 9.02462 12.3722 9.02462C10.8845 9.02462 10.0016 10.029 10.0016 11.7165V18.0156H6.40158V6.31562H10.0016V7.63142C10.0016 7.63142 11.1311 5.64962 13.6763 5.64962C16.2224 5.64962 18.1016 7.20302 18.1016 10.4178V18.0156ZM2.29938 4.44452C2.00962 4.44346 1.72291 4.38532 1.45563 4.27343C1.18834 4.16153 0.94572 3.99808 0.741623 3.79239C0.537526 3.58671 0.375953 3.34283 0.266132 3.07468C0.156312 2.80654 0.100397 2.51938 0.101581 2.22962C0.100515 1.93994 0.156518 1.65288 0.266391 1.38484C0.376265 1.1168 0.537857 0.873031 0.741942 0.667441C0.946027 0.461852 1.18861 0.298474 1.45583 0.186635C1.72306 0.074796 2.0097 0.0166868 2.29938 0.015625C2.88427 0.0180074 3.44426 0.252578 3.85624 0.667759C4.26821 1.08294 4.49843 1.64474 4.49628 2.22962C4.49758 2.51934 4.44178 2.80647 4.33206 3.07461C4.22234 3.34275 4.06085 3.58664 3.85682 3.79234C3.6528 3.99803 3.41024 4.16151 3.143 4.27341C2.87577 4.38532 2.5891 4.44346 2.29938 4.44452ZM0.101581 18.0156H4.60158V6.31562H0.101581V18.0156Z" fill="currentColor"/>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1,3 @@
<svg width="38" height="13" viewBox="0 0 38 13" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M11.8026 12.5H16.5988V10.0988H21.3951V0.5H11.8026V12.5ZM16.5988 2.90125H19.0001V7.69751H16.5988V2.90125ZM23.3161 0.5V10.0925H28.1123V2.90125H30.5136V10.0988H32.9148V2.90125H35.3161V10.0988H37.7111V0.5H23.3161ZM0.289062 10.0988H5.08532V2.90125H7.48657V10.0988H9.88781V0.5H0.289062V10.0988Z" fill="#242235"/>
</svg>

After

Width:  |  Height:  |  Size: 419 B

View File

@ -0,0 +1,10 @@
<svg width="17" height="13" viewBox="0 0 17 13" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_4697_1741)">
<path d="M16.2707 8.75C16.2807 9.78 16.2807 10.82 16.2707 11.85C16.2707 12.23 16.0207 12.49 15.6507 12.49H12.5707C12.2107 12.49 11.9607 12.24 11.9607 11.88C11.9507 10.82 11.9507 9.76 11.9607 8.71C11.9607 8.35 12.2107 8.11 12.5707 8.1H13.8007V6.8H8.8107V8.1H10.0007C10.4007 8.11 10.6507 8.35 10.6507 8.77C10.6607 9.79 10.6607 10.82 10.6507 11.84C10.6507 12.24 10.4007 12.49 10.0007 12.49C9.0007 12.5 7.9907 12.5 6.9807 12.49C6.5907 12.49 6.3407 12.24 6.3407 11.83C6.3307 10.81 6.3307 9.78 6.3407 8.76C6.3407 8.36 6.5907 8.11 6.9907 8.1H8.1607C8.1607 8.1 8.1707 8.09 8.1907 8.09V6.79H3.1907V8.1H4.3907C4.8007 8.1 5.0507 8.34 5.0507 8.76V11.83C5.0507 12.24 4.8007 12.49 4.4007 12.49H1.3907C1.0407 12.49 0.840703 12.31 0.730703 11.99C0.720703 10.86 0.720703 9.73 0.720703 8.6C0.850703 8.22 1.1207 8.08 1.5107 8.1C1.8607 8.12 2.2107 8.11 2.5707 8.11C2.5807 8.04 2.5807 7.99 2.5807 7.93V6.62C2.5807 6.26 2.6707 6.18 3.0107 6.18H8.1907V4.89H8.0307C7.6807 4.89 7.3307 4.9 6.9807 4.89C6.6007 4.89 6.3407 4.63 6.3407 4.24V1.15C6.3407 0.76 6.5907 0.5 6.9807 0.5H10.0207C10.4107 0.5 10.6607 0.76 10.6607 1.15V4.21C10.6607 4.61 10.4007 4.86 10.0007 4.86C9.6107 4.87 9.2207 4.86 8.8107 4.86V6.18H14.0507C14.3207 6.19 14.4107 6.28 14.4107 6.56C14.4207 7.02 14.4107 7.47 14.4107 7.92V8.11H14.5907C14.9407 8.11 15.2907 8.1 15.6407 8.11C16.0007 8.11 16.2707 8.38 16.2707 8.75Z" fill="#242235"/>
</g>
<defs>
<clipPath id="clip0_4697_1741">
<rect width="15.56" height="12" fill="white" transform="translate(0.720703 0.5)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -0,0 +1,4 @@
<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="15.3047" cy="14.8516" r="14.1259" stroke="#E6DAFE" stroke-width="0.748296"/>
<path d="M18.3047 13.9855C18.9714 14.3704 18.9714 15.3327 18.3047 15.7176L14.5547 17.8827C13.888 18.2676 13.0547 17.7864 13.0547 17.0166L13.0547 12.6865C13.0547 11.9167 13.888 11.4356 14.5547 11.8205L18.3047 13.9855Z" fill="#E6DAFE"/>
</svg>

After

Width:  |  Height:  |  Size: 427 B

View File

@ -0,0 +1,4 @@
<svg width="18" height="11" viewBox="0 0 18 11" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1.67619 10.1701L1.38209 9.97359C1.30667 9.91628 1.27651 9.80986 1.3293 9.71981L5.31857 2.83523C5.45431 2.59784 5.68809 2.45867 5.94449 2.45867C6.20089 2.45867 6.43467 2.59784 6.57041 2.83523L9.52654 7.94341C9.54917 7.98434 9.6095 7.98434 9.63212 7.94341L13.5535 1.17344C13.6893 0.93604 13.923 0.796875 14.1794 0.796875C14.4358 0.796875 14.6696 0.93604 14.8054 1.17344L16.668 4.39061C16.7208 4.47247 16.6906 4.58708 16.6152 4.64438L16.3287 4.84085C16.2533 4.89815 16.1477 4.86541 16.0949 4.78355L14.2322 1.56638C14.2247 1.54182 14.2021 1.53363 14.1794 1.53363C14.1568 1.53363 14.1417 1.54182 14.1267 1.56638L10.2052 8.33635C10.0695 8.57375 9.83573 8.71291 9.57933 8.71291C9.32293 8.71291 9.08915 8.57375 8.95341 8.33635L5.99728 3.22817C5.97465 3.18724 5.91433 3.18724 5.8917 3.22817L1.90997 10.1128C1.85718 10.2028 1.7516 10.2274 1.67619 10.1701Z" fill="#242235"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.1801 2.47295L10.6401 8.58454C10.6398 8.58498 10.6395 8.58542 10.6393 8.58586C10.42 8.96829 10.0265 9.21291 9.58008 9.21291C9.13363 9.21291 8.74006 8.96826 8.52082 8.58577C8.52058 8.58536 8.52035 8.58495 8.52011 8.58454L5.94536 4.1354L2.34207 10.3656C2.1618 10.6731 1.73409 10.8268 1.39013 10.5798L1.09244 10.3809L1.08033 10.3717C0.826139 10.1785 0.704574 9.79982 0.897854 9.4684C0.898137 9.46792 0.89842 9.46743 0.898704 9.46695L4.88527 2.58705C4.88554 2.58658 4.88581 2.5861 4.88608 2.58563C5.10534 2.20325 5.49886 1.95867 5.94524 1.95867C6.39169 1.95867 6.78525 2.20332 7.0045 2.5858C7.00474 2.58622 7.00498 2.58663 7.00521 2.58705L9.58026 7.03669L13.1202 0.925254C13.1205 0.924809 13.1207 0.924364 13.121 0.92392C13.3402 0.541492 13.7338 0.296875 14.1802 0.296875C14.6267 0.296875 15.0203 0.541564 15.2395 0.92409C15.2397 0.924478 15.2399 0.924866 15.2402 0.925254L17.0972 4.13267C17.3024 4.46646 17.1636 4.85626 16.9185 5.04249L16.9088 5.04987L16.6196 5.24813C16.2514 5.51635 15.8372 5.3054 15.6754 5.05452L15.6689 5.04444L14.1801 2.47295Z" fill="#242235"/>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -0,0 +1,4 @@
<svg width="10" height="13" viewBox="0 0 10 13" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M6.19752 5.30405C6.19752 5.96613 5.6611 6.50295 4.99952 6.50295V7.70185C6.32268 7.70185 7.39552 6.62821 7.39552 5.30405C7.39552 3.97989 6.32268 2.90625 4.99952 2.90625C4.56334 2.90625 4.15371 3.02283 3.80152 3.22726C3.08521 3.64153 2.60352 4.4164 2.60352 5.30405V11.2986L3.68069 12.3765L3.80152 12.4975V5.30405C3.80152 4.64197 4.33793 4.10515 4.99952 4.10515C5.6611 4.10515 6.19752 4.64197 6.19752 5.30405Z" fill="#242235"/>
<path d="M4.99903 0.5C4.12614 0.5 3.30796 0.733707 2.60303 1.14202C2.15168 1.40284 1.74747 1.73523 1.40503 2.12402C0.659465 2.96938 0.207031 4.07989 0.207031 5.2956V8.8923L1.40503 10.0912V5.2956C1.40503 4.23063 1.86776 3.27357 2.60303 2.61475C2.94872 2.30567 3.35456 2.06166 3.80103 1.90441C4.17544 1.77102 4.57911 1.6989 4.99903 1.6989C6.98378 1.6989 8.59304 3.30936 8.59304 5.2956C8.59304 7.28184 6.98378 8.8923 4.99903 8.8923V10.0912C7.64591 10.0912 9.79104 7.94392 9.79104 5.2956C9.79104 2.64728 7.64591 0.5 4.99903 0.5Z" fill="#242235"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,89 @@
<svg width="17" height="17" viewBox="0 0 17 17" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M7.38867 6.60352H9.08984C10.1367 6.60352 10.1367 7.65039 9.08984 7.65039H7.38867V6.60352ZM3.33203 11.4453H8.56641V10.0059H7.38867V8.95898H8.69727C10.1367 8.95898 9.35156 11.4453 10.5293 11.4453H13.8008V8.95898H13.0156V9.2207C13.0156 10.2676 11.8379 10.1367 11.707 9.48242C11.5762 8.82813 11.0527 8.30469 10.9219 8.30469C12.8848 7.25781 11.707 5.16406 10.1367 5.16406H3.98633V6.60352H5.29492V10.0059H3.33203V11.4453Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.91992 5.15918C3.91992 5.12304 3.94922 5.09375 3.98535 5.09375H10.1357C10.9492 5.09375 11.66 5.63508 11.9145 6.31394C12.0423 6.65477 12.0557 7.03182 11.9077 7.39229C11.7709 7.72518 11.4988 8.03855 11.0631 8.2951C11.0823 8.30877 11.1023 8.32452 11.1228 8.34203C11.1964 8.40479 11.2813 8.49415 11.3653 8.60342C11.5332 8.82165 11.7023 9.12515 11.7702 9.46471C11.8279 9.75329 12.1203 9.93432 12.406 9.91928C12.5464 9.91189 12.6806 9.8568 12.78 9.74656C12.8793 9.6364 12.9492 9.46515 12.9492 9.21582V8.9541C12.9492 8.91797 12.9785 8.88867 13.0146 8.88867H13.7998C13.8359 8.88867 13.8652 8.91797 13.8652 8.9541V11.4404C13.8652 11.4766 13.8359 11.5059 13.7998 11.5059H10.5283C10.3687 11.5059 10.2385 11.4635 10.1322 11.3866C10.0268 11.3104 9.94916 11.2035 9.88891 11.0808C9.78197 10.8631 9.72355 10.5818 9.66603 10.3047C9.65951 10.2733 9.65299 10.242 9.64642 10.2107C9.58066 9.89834 9.50885 9.59915 9.36888 9.37753C9.29972 9.26803 9.21494 9.17932 9.10744 9.1177C9.0001 9.05616 8.86646 9.01953 8.69629 9.01953H7.45313V9.93555H8.56543C8.60157 9.93555 8.63086 9.96484 8.63086 10.001V11.4404C8.63086 11.4766 8.60157 11.5059 8.56543 11.5059H3.33105C3.29492 11.5059 3.26562 11.4766 3.26562 11.4404V10.001C3.26562 9.96484 3.29492 9.93555 3.33105 9.93555H5.22852V6.66406H3.98535C3.94922 6.66406 3.91992 6.63477 3.91992 6.59863V5.15918ZM4.05078 5.22461V6.5332H5.29395C5.33008 6.5332 5.35938 6.5625 5.35938 6.59863V10.001C5.35938 10.0371 5.33008 10.0664 5.29395 10.0664H3.39648V11.375H8.5V10.0664H7.3877C7.35156 10.0664 7.32227 10.0371 7.32227 10.001V8.9541C7.32227 8.91797 7.35156 8.88867 7.3877 8.88867H8.69629C8.88598 8.88867 9.04269 8.92974 9.17253 9.00417C9.30221 9.07852 9.40146 9.18406 9.47952 9.30765C9.63398 9.55222 9.70939 9.8746 9.77448 10.1838C9.78101 10.2148 9.78743 10.2457 9.79381 10.2763C9.8523 10.5573 9.90724 10.8213 10.0064 11.0231C10.0606 11.1335 10.1261 11.2208 10.2088 11.2806C10.2906 11.3397 10.3935 11.375 10.5283 11.375H13.7344V9.01953H13.0801V9.21582C13.0801 9.48993 13.0028 9.69489 12.8772 9.83419C12.7517 9.9734 12.5833 10.041 12.4129 10.05C12.077 10.0676 11.715 9.85608 11.6419 9.49037C11.5789 9.17563 11.4209 8.89026 11.2616 8.6832C11.1821 8.57983 11.1034 8.49743 11.0379 8.4416C11.0051 8.4136 10.9767 8.39325 10.9542 8.38028C10.9338 8.36854 10.9234 8.36594 10.9212 8.36538C10.9207 8.36526 10.9206 8.36523 10.9209 8.36523C10.8909 8.36523 10.8647 8.3448 10.8574 8.31567C10.8501 8.28655 10.8636 8.2562 10.8901 8.24207C11.3704 7.98594 11.6525 7.66918 11.7866 7.34257C11.9207 7.01603 11.9096 6.67336 11.792 6.35989C11.5559 5.73016 10.8926 5.22461 10.1357 5.22461H4.05078ZM7.32227 6.59863C7.32227 6.5625 7.35156 6.5332 7.3877 6.5332H9.08887C9.62975 6.5332 9.93945 6.80801 9.93945 7.12207C9.93945 7.43613 9.62975 7.71094 9.08887 7.71094H7.3877C7.35156 7.71094 7.32227 7.68164 7.32227 7.64551V6.59863ZM7.45313 6.66406V7.58008H9.08887C9.59486 7.58008 9.80859 7.33145 9.80859 7.12207C9.80859 6.9127 9.59486 6.66406 9.08887 6.66406H7.45313Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M8.50098 3.4668C5.71852 3.4668 3.46289 5.72242 3.46289 8.50488C3.46289 11.2873 5.71852 13.543 8.50098 13.543C11.2834 13.543 13.5391 11.2873 13.5391 8.50488C13.5391 5.72242 11.2834 3.4668 8.50098 3.4668ZM2.28516 8.50488C2.28516 5.07198 5.06807 2.28906 8.50098 2.28906C11.9339 2.28906 14.7168 5.07198 14.7168 8.50488C14.7168 11.9378 11.9339 14.7207 8.50098 14.7207C5.06807 14.7207 2.28516 11.9378 2.28516 8.50488Z" fill="black"/>
<path d="M14.5215 8.89453L15.1758 8.50195L14.5215 8.10938V8.89453Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.4238 7.93954C14.4853 7.9047 14.5609 7.90565 14.6215 7.94204L15.2758 8.33461C15.3349 8.37009 15.3711 8.43398 15.3711 8.50293C15.3711 8.57188 15.3349 8.63577 15.2758 8.67125L14.6215 9.06382C14.5609 9.10021 14.4853 9.10116 14.4238 9.06632C14.3623 9.03148 14.3242 8.96623 14.3242 8.89551V8.11035C14.3242 8.03963 14.3623 7.97438 14.4238 7.93954ZM14.7168 8.45704V8.54882L14.7933 8.50293L14.7168 8.45704Z" fill="black"/>
<path d="M14.3292 10.0591L15.0476 9.80174L14.4824 9.28906L14.3292 10.0591Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.4208 9.10692C14.488 9.08475 14.5619 9.10042 14.6142 9.14793L15.1794 9.66061C15.2304 9.70694 15.2535 9.77666 15.24 9.84429C15.2266 9.91191 15.1786 9.96752 15.1137 9.99078L14.3954 10.2482C14.3288 10.272 14.2546 10.2582 14.201 10.212C14.1474 10.1659 14.1229 10.0944 14.1367 10.0251L14.2898 9.25502C14.3036 9.18566 14.3537 9.12908 14.4208 9.10692ZM14.6072 9.67163L14.5893 9.76165L14.6733 9.73156L14.6072 9.67163Z" fill="black"/>
<path d="M13.9124 11.1629L14.6671 11.0506L14.2129 10.4375L13.9124 11.1629Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.1877 10.2491C14.2579 10.2405 14.3273 10.2703 14.3694 10.3271L14.8237 10.9402C14.8647 10.9956 14.8737 11.0685 14.8473 11.1322C14.8209 11.1959 14.763 11.2411 14.6948 11.2512L13.9401 11.3635C13.8702 11.3739 13.8 11.3459 13.7565 11.2902C13.713 11.2344 13.7028 11.1596 13.7299 11.0942L14.0304 10.3688C14.0574 10.3035 14.1175 10.2578 14.1877 10.2491ZM14.2604 10.8394L14.2253 10.9242L14.3135 10.911L14.2604 10.8394Z" fill="black"/>
<path d="M13.2884 12.1685L14.0505 12.2055L13.7246 11.5156L13.2884 12.1685Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.7386 11.3187C13.8091 11.3239 13.8714 11.3667 13.9016 11.4306L14.2275 12.1205C14.2569 12.1829 14.2515 12.2561 14.2132 12.3134C14.1749 12.3708 14.1093 12.4038 14.0405 12.4004L13.2783 12.3633C13.2077 12.3599 13.1444 12.3187 13.1126 12.2556C13.0807 12.1924 13.0854 12.117 13.1247 12.0582L13.5609 11.4054C13.6002 11.3466 13.668 11.3135 13.7386 11.3187ZM13.6947 11.9118L13.6437 11.9881L13.7328 11.9924L13.6947 11.9118Z" fill="black"/>
<path d="M12.48 13.0318L13.2202 13.2168L13.0352 12.4766L12.48 13.0318Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.0876 12.2837C13.1557 12.3026 13.2084 12.3567 13.2256 12.4253L13.4106 13.1656C13.4274 13.2324 13.4078 13.3032 13.359 13.352C13.3103 13.4007 13.2395 13.4203 13.1726 13.4036L12.4324 13.2185C12.3638 13.2014 12.3097 13.1486 12.2908 13.0805C12.2719 13.0123 12.2912 12.9393 12.3412 12.8893L12.8964 12.3341C12.9464 12.2841 13.0194 12.2649 13.0876 12.2837ZM12.9288 12.8568L12.8639 12.9218L12.9504 12.9434L12.9288 12.8568Z" fill="black"/>
<path d="M11.519 13.7253L12.209 14.0512L12.1719 13.2891L11.519 13.7253Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.2627 13.1126C12.3258 13.1444 12.367 13.2077 12.3704 13.2783L12.4075 14.0405C12.4109 14.1093 12.3778 14.1749 12.3205 14.2132C12.2632 14.2515 12.19 14.257 12.1276 14.2275L11.4377 13.9016C11.3737 13.8714 11.331 13.8091 11.3258 13.7386C11.3206 13.6681 11.3537 13.6002 11.4125 13.5609L12.0653 13.1247C12.1241 13.0854 12.1995 13.0808 12.2627 13.1126ZM11.9952 13.6437L11.9188 13.6947L11.9995 13.7328L11.9952 13.6437Z" fill="black"/>
<path d="M10.4426 14.2145L11.0557 14.6688L11.168 13.9141L10.4426 14.2145Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.288 13.758C11.3437 13.8015 11.3718 13.8717 11.3614 13.9416L11.2491 14.6963C11.2389 14.7645 11.1937 14.8224 11.13 14.8488C11.0663 14.8752 10.9934 14.8662 10.938 14.8252L10.325 14.3709C10.2681 14.3288 10.2384 14.2594 10.247 14.1892C10.2556 14.119 10.3014 14.0589 10.3667 14.0318L11.0921 13.7314C11.1574 13.7043 11.2323 13.7145 11.288 13.758ZM10.922 14.2267L10.8372 14.2619L10.9089 14.315L10.922 14.2267Z" fill="black"/>
<path d="M9.29243 14.4813L9.80511 15.0464L10.0625 14.3281L9.29243 14.4813Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.2093 14.2042C10.2555 14.2578 10.2693 14.332 10.2454 14.3986L9.98802 15.1169C9.96476 15.1818 9.90915 15.2298 9.84153 15.2432C9.7739 15.2567 9.70418 15.2336 9.65785 15.1826L9.14517 14.6174C9.09766 14.5651 9.08199 14.4912 9.10415 14.424C9.12632 14.3569 9.1829 14.3068 9.25226 14.293L10.0223 14.1399C10.0917 14.1261 10.1631 14.1506 10.2093 14.2042ZM9.75889 14.5925L9.66887 14.6104L9.7288 14.6765L9.75889 14.5925Z" fill="black"/>
<path d="M8.10937 14.5156L8.50195 15.1699L8.89453 14.5156H8.10937Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.06437 14.4199C9.09921 14.4814 9.09825 14.557 9.06187 14.6176L8.66929 15.2719C8.63382 15.331 8.56993 15.3672 8.50098 15.3672C8.43203 15.3672 8.36813 15.331 8.33266 15.2719L7.94008 14.6176C7.9037 14.557 7.90275 14.4814 7.93759 14.4199C7.97243 14.3584 8.03768 14.3203 8.1084 14.3203H8.89355C8.96427 14.3203 9.02952 14.3584 9.06437 14.4199ZM8.54687 14.7129H8.45508L8.50098 14.7894L8.54687 14.7129Z" fill="black"/>
<path d="M6.94282 14.3312L7.20021 15.0495L7.71289 14.4844L6.94282 14.3312Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.89894 14.4208C7.92111 14.488 7.90544 14.5619 7.85793 14.6142L7.34525 15.1794C7.29892 15.2304 7.2292 15.2535 7.16157 15.24C7.09395 15.2266 7.03834 15.1786 7.01508 15.1137L6.75769 14.3954C6.73384 14.3288 6.74764 14.2546 6.79382 14.201C6.84 14.1474 6.91141 14.1229 6.98077 14.1367L7.75084 14.2898C7.8202 14.3036 7.87678 14.3537 7.89894 14.4208ZM7.33423 14.6072L7.24421 14.5893L7.2743 14.6733L7.33423 14.6072Z" fill="black"/>
<path d="M5.83516 13.9183L5.94746 14.673L6.56055 14.2188L5.83516 13.9183Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.75476 14.1916C6.7634 14.2618 6.73362 14.3312 6.6768 14.3733L6.06372 14.8276C6.00832 14.8686 5.93544 14.8776 5.87174 14.8512C5.80804 14.8248 5.76286 14.767 5.75271 14.6988L5.6404 13.944C5.62999 13.8741 5.65801 13.8039 5.71375 13.7604C5.76949 13.7169 5.84433 13.7067 5.90967 13.7338L6.63506 14.0343C6.70039 14.0613 6.74612 14.1214 6.75476 14.1916ZM6.16453 14.2643L6.07973 14.2292L6.09286 14.3174L6.16453 14.2643Z" fill="black"/>
<path d="M4.83154 13.2904L4.79445 14.0525L5.48438 13.7266L4.83154 13.2904Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.67935 13.7405C5.67413 13.811 5.63138 13.8733 5.56744 13.9035L4.87752 14.2294C4.81517 14.2589 4.74195 14.2535 4.68462 14.2152C4.62729 14.1769 4.59427 14.1113 4.59762 14.0424L4.63471 13.2803C4.63815 13.2096 4.67931 13.1463 4.74247 13.1145C4.80563 13.0827 4.88102 13.0873 4.93982 13.1266L5.59265 13.5628C5.65145 13.6021 5.68457 13.67 5.67935 13.7405ZM5.08629 13.6966L5.00997 13.6456L5.00563 13.7347L5.08629 13.6966Z" fill="black"/>
<path d="M3.96825 12.4761L3.78319 13.2163L4.52344 13.0312L3.96825 12.4761Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M4.71235 13.0836C4.69348 13.1518 4.6394 13.2045 4.57079 13.2217L3.83054 13.4067C3.76365 13.4235 3.69289 13.4039 3.64414 13.3551C3.59538 13.3064 3.57578 13.2356 3.59251 13.1687L3.77757 12.4285C3.79472 12.3598 3.84745 12.3058 3.9156 12.2869C3.98375 12.268 4.05679 12.2873 4.10679 12.3373L4.66198 12.8925C4.71199 12.9425 4.73123 13.0155 4.71235 13.0836ZM4.13925 12.9249L4.07434 12.86L4.05271 12.9465L4.13925 12.9249Z" fill="black"/>
<path d="M3.27668 11.519L2.95076 12.209L3.71289 12.1719L3.27668 11.519Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.88938 12.2607C3.85757 12.3239 3.79424 12.365 3.72361 12.3685L2.96148 12.4056C2.89261 12.4089 2.82703 12.3759 2.78873 12.3185C2.75042 12.2612 2.745 12.188 2.77445 12.1257L3.10038 11.4357C3.13058 11.3718 3.19285 11.329 3.26337 11.3238C3.3339 11.3186 3.40178 11.3517 3.44107 11.4105L3.87728 12.0634C3.91656 12.1222 3.92119 12.1975 3.88938 12.2607ZM3.35825 11.9932L3.30726 11.9169L3.26915 11.9975L3.35825 11.9932Z" fill="black"/>
<path d="M2.78938 10.4465L2.33512 11.0596L3.08984 11.1719L2.78938 10.4465Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.24396 11.2958C3.20043 11.3516 3.1303 11.3796 3.06035 11.3692L2.30562 11.2569C2.23743 11.2467 2.17955 11.2015 2.15317 11.1378C2.12678 11.0741 2.13575 11.0013 2.1768 10.9459L2.63106 10.3328C2.67316 10.276 2.74257 10.2462 2.81276 10.2548C2.88294 10.2635 2.94306 10.3092 2.97012 10.3745L3.27059 11.0999C3.29765 11.1652 3.28748 11.2401 3.24396 11.2958ZM2.77522 10.9298L2.7401 10.845L2.68699 10.9167L2.77522 10.9298Z" fill="black"/>
<path d="M2.52065 9.29243L1.95552 9.80511L2.67383 10.0625L2.52065 9.29243Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.80362 10.2054C2.75006 10.2516 2.6758 10.2654 2.60923 10.2415L1.89091 9.98411C1.82601 9.96085 1.77806 9.90524 1.76461 9.83762C1.75116 9.77 1.77417 9.70027 1.82524 9.65395L2.39038 9.14126C2.44275 9.09375 2.51664 9.07808 2.58379 9.10025C2.65094 9.12242 2.70098 9.17899 2.71478 9.24835L2.86796 10.0184C2.88175 10.0878 2.85717 10.1592 2.80362 10.2054ZM2.41529 9.75499L2.39738 9.66496L2.33131 9.7249L2.41529 9.75499Z" fill="black"/>
<path d="M2.48242 8.11328L1.82812 8.50586L2.48242 8.89844V8.11328Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.57816 9.06046C2.51662 9.0953 2.4411 9.09435 2.38046 9.05796L1.72616 8.66539C1.66704 8.62991 1.63086 8.56602 1.63086 8.49707C1.63086 8.42812 1.66704 8.36423 1.72616 8.32875L2.38046 7.93618C2.4411 7.89979 2.51662 7.89884 2.57816 7.93368C2.6397 7.96852 2.67773 8.03377 2.67773 8.10449V8.88965C2.67773 8.96037 2.6397 9.02562 2.57816 9.06046ZM2.28516 8.54296V8.45118L2.20867 8.49707L2.28516 8.54296Z" fill="black"/>
<path d="M2.67466 6.94087L1.95635 7.19826L2.52148 7.71094L2.67466 6.94087Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.58309 7.9009C2.51593 7.92306 2.44205 7.9074 2.38967 7.85988L1.82454 7.3472C1.77347 7.30087 1.75045 7.23115 1.7639 7.16353C1.77736 7.0959 1.8253 7.04029 1.89021 7.01703L2.60852 6.75965C2.67509 6.73579 2.74935 6.74959 2.80291 6.79577C2.85647 6.84195 2.88105 6.91337 2.86725 6.98273L2.71408 7.7528C2.70028 7.82215 2.65024 7.87873 2.58309 7.9009ZM2.39668 7.33618L2.41458 7.24616L2.33061 7.27625L2.39668 7.33618Z" fill="black"/>
<path d="M3.09148 5.83711L2.33676 5.94942L2.79102 6.5625L3.09148 5.83711Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.81228 6.75085C2.7421 6.75949 2.67269 6.72971 2.63059 6.67289L2.17633 6.05981C2.13528 6.00441 2.12631 5.93154 2.15269 5.86784C2.17908 5.80414 2.23695 5.75895 2.30515 5.7488L3.05988 5.63649C3.12982 5.62609 3.19996 5.65411 3.24348 5.70985C3.287 5.76559 3.29718 5.84043 3.27011 5.90576L2.96965 6.63115C2.94259 6.69649 2.88247 6.74221 2.81228 6.75085ZM2.73962 6.16063L2.77475 6.07582L2.68652 6.08895L2.73962 6.16063Z" fill="black"/>
<path d="M3.71551 4.83154L2.95337 4.79445L3.2793 5.48438L3.71551 4.83154Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.26339 5.68131C3.19287 5.67609 3.1306 5.63334 3.10039 5.56939L2.77447 4.87947C2.74502 4.81713 2.75044 4.7439 2.78874 4.68657C2.82705 4.62925 2.89263 4.59622 2.96149 4.59957L3.72363 4.63666C3.79426 4.6401 3.85758 4.68126 3.88939 4.74442C3.9212 4.80758 3.91658 4.88297 3.87729 4.94177L3.44108 5.5946C3.4018 5.6534 3.33392 5.68652 3.26339 5.68131ZM3.30727 5.08824L3.35827 5.01192L3.26917 5.00759L3.30727 5.08824Z" fill="black"/>
<path d="M4.52394 3.96044L3.78369 3.77537L3.96875 4.51562L4.52394 3.96044Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M3.91635 4.70845C3.8482 4.68957 3.79547 4.63549 3.77832 4.56689L3.59326 3.82663C3.57654 3.75974 3.59614 3.68898 3.64489 3.64023C3.69364 3.59148 3.7644 3.57188 3.83129 3.5886L4.57155 3.77366C4.64015 3.79081 4.69423 3.84354 4.71311 3.91169C4.73198 3.97985 4.71274 4.05288 4.66274 4.10289L4.10755 4.65808C4.05754 4.70808 3.98451 4.72732 3.91635 4.70845ZM4.0751 4.13534L4.14 4.07044L4.05346 4.0488L4.0751 4.13534Z" fill="black"/>
<path d="M5.48486 3.27473L4.79494 2.9488L4.83203 3.71094L5.48486 3.27473Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M4.74125 3.88742C4.67809 3.85561 4.63693 3.79229 4.63349 3.72166L4.5964 2.95952C4.59305 2.89066 4.62607 2.82508 4.6834 2.78677C4.74073 2.74847 4.81396 2.74305 4.8763 2.7725L5.56622 3.09842C5.63016 3.12863 5.67292 3.1909 5.67813 3.26142C5.68335 3.33194 5.65023 3.39982 5.59143 3.43911L4.9386 3.87532C4.8798 3.91461 4.80441 3.91923 4.74125 3.88742ZM5.00875 3.3563L5.08507 3.3053L5.00442 3.2672L5.00875 3.3563Z" fill="black"/>
<path d="M6.56133 2.79328L5.94824 2.33903L5.83594 3.09375L6.56133 2.79328Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.7159 3.242C5.66016 3.19848 5.63214 3.12834 5.64255 3.0584L5.75485 2.30367C5.765 2.23547 5.81019 2.1776 5.87389 2.15121C5.93759 2.12483 6.01046 2.1338 6.06586 2.17485L6.67895 2.62911C6.73577 2.67121 6.76555 2.74062 6.75691 2.8108C6.74827 2.88099 6.70254 2.9411 6.63721 2.96817L5.91182 3.26863C5.84648 3.2957 5.77164 3.28552 5.7159 3.242ZM6.08188 2.77327L6.16668 2.73814L6.09501 2.68504L6.08188 2.77327Z" fill="black"/>
<path d="M7.71148 2.5187L7.19879 1.95356L6.94141 2.67188L7.71148 2.5187Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.79462 2.7958C6.74845 2.74224 6.73465 2.66799 6.7585 2.60141L7.01589 1.8831C7.03915 1.81819 7.09476 1.77025 7.16238 1.7568C7.23 1.74334 7.29973 1.76636 7.34605 1.81743L7.85874 2.38256C7.90625 2.43494 7.92192 2.50883 7.89975 2.57598C7.87758 2.64313 7.82101 2.69317 7.75165 2.70697L6.98158 2.86014C6.91222 2.87394 6.8408 2.84936 6.79462 2.7958ZM7.24501 2.40747L7.33504 2.38957L7.2751 2.3235L7.24501 2.40747Z" fill="black"/>
<path d="M8.89453 2.48438L8.50195 1.83008L8.10938 2.48438H8.89453Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.93759 2.58011C7.90275 2.51857 7.9037 2.44305 7.94008 2.38241L8.33266 1.72811C8.36813 1.66899 8.43203 1.63281 8.50098 1.63281C8.56993 1.63281 8.63382 1.66899 8.66929 1.72811L9.06187 2.38241C9.09826 2.44305 9.09921 2.51857 9.06437 2.58011C9.02952 2.64165 8.96427 2.67969 8.89355 2.67969H8.1084C8.03768 2.67969 7.97243 2.64165 7.93759 2.58011ZM8.45508 2.28711H8.54687L8.50098 2.21062L8.45508 2.28711Z" fill="black"/>
<path d="M10.0611 2.67661L9.8037 1.9583L9.29102 2.52344L10.0611 2.67661Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M9.10496 2.57918C9.08279 2.51203 9.09846 2.43814 9.14598 2.38577L9.65866 1.82063C9.70499 1.76956 9.77471 1.74655 9.84233 1.76C9.90996 1.77345 9.96557 1.82139 9.98882 1.8863L10.2462 2.60462C10.2701 2.67119 10.2563 2.74545 10.2101 2.799C10.1639 2.85256 10.0925 2.87714 10.0231 2.86335L9.25306 2.71017C9.18371 2.69637 9.12713 2.64633 9.10496 2.57918ZM9.66967 2.39277L9.7597 2.41068L9.72961 2.3267L9.66967 2.39277Z" fill="black"/>
<path d="M11.1687 3.08953L11.0564 2.3348L10.4434 2.78906L11.1687 3.08953Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M10.2491 2.80838C10.2405 2.73819 10.2703 2.66878 10.3271 2.62668L10.9402 2.17242C10.9956 2.13137 11.0685 2.1224 11.1322 2.14879C11.1959 2.17517 11.2411 2.23305 11.2512 2.30125L11.3635 3.05597C11.3739 3.12592 11.3459 3.19606 11.2902 3.23958C11.2344 3.2831 11.1596 3.29327 11.0942 3.26621L10.3688 2.96574C10.3035 2.93868 10.2578 2.87856 10.2491 2.80838ZM10.8394 2.73572L10.9242 2.77084L10.911 2.68261L10.8394 2.73572Z" fill="black"/>
<path d="M12.1724 3.71746L12.2095 2.95533L11.5195 3.28125L12.1724 3.71746Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M11.3246 3.2673C11.3298 3.19677 11.3725 3.13451 11.4365 3.1043L12.1264 2.77838C12.1887 2.74893 12.262 2.75434 12.3193 2.79265C12.3766 2.83096 12.4096 2.89653 12.4063 2.9654L12.3692 3.72753C12.3658 3.79817 12.3246 3.86149 12.2614 3.8933C12.1983 3.92511 12.1229 3.92049 12.0641 3.8812L11.4113 3.44499C11.3525 3.4057 11.3193 3.33782 11.3246 3.2673ZM11.9176 3.31118L11.9939 3.36218L11.9983 3.27308L11.9176 3.31118Z" fill="black"/>
<path d="M13.0357 4.52394L13.2207 3.78369L12.4805 3.96875L13.0357 4.52394Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.2916 3.91635C12.3104 3.8482 12.3645 3.79547 12.4331 3.77832L13.1734 3.59326C13.2403 3.57654 13.311 3.59614 13.3598 3.64489C13.4085 3.69364 13.4281 3.7644 13.4114 3.83129L13.2263 4.57155C13.2092 4.64015 13.1565 4.69423 13.0883 4.71311C13.0202 4.73198 12.9471 4.71274 12.8971 4.66274L12.3419 4.10755C12.2919 4.05754 12.2727 3.98451 12.2916 3.91635ZM12.8647 4.0751L12.9296 4.14L12.9512 4.05346L12.8647 4.0751Z" fill="black"/>
<path d="M13.7233 5.48096L14.0492 4.79103L13.2871 4.82812L13.7233 5.48096Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.1126 4.74711C13.1444 4.68395 13.2077 4.64279 13.2783 4.63935L14.0405 4.60226C14.1093 4.59891 14.1749 4.63193 14.2132 4.68926C14.2515 4.74659 14.257 4.81982 14.2275 4.88216L13.9016 5.57208C13.8714 5.63602 13.8091 5.67878 13.7386 5.68399C13.6681 5.68921 13.6002 5.65609 13.5609 5.59729L13.1247 4.94446C13.0854 4.88566 13.0808 4.81027 13.1126 4.74711ZM13.6437 5.01461L13.6947 5.09093L13.7328 5.01027L13.6437 5.01461Z" fill="black"/>
<path d="M14.2145 6.56133L14.6688 5.94824L13.9141 5.83594L14.2145 6.56133Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.758 5.71981C13.8015 5.66407 13.8717 5.63605 13.9416 5.64645L14.6963 5.75876C14.7645 5.76891 14.8224 5.8141 14.8488 5.8778C14.8752 5.9415 14.8662 6.01437 14.8252 6.06977L14.3709 6.68285C14.3288 6.73967 14.2594 6.76945 14.1892 6.76081C14.119 6.75217 14.0589 6.70645 14.0318 6.64111L13.7314 5.91572C13.7043 5.85039 13.7145 5.77555 13.758 5.71981ZM14.2267 6.08578L14.2619 6.17058L14.315 6.09891L14.2267 6.08578Z" fill="black"/>
<path d="M14.4813 7.71538L15.0464 7.2027L14.3281 6.94531L14.4813 7.71538Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M14.2003 6.79462C14.2538 6.74845 14.3281 6.73465 14.3947 6.7585L15.113 7.01589C15.1779 7.03915 15.2258 7.09476 15.2393 7.16238C15.2527 7.23 15.2297 7.29973 15.1787 7.34605L14.6135 7.85874C14.5612 7.90625 14.4873 7.92192 14.4201 7.89975C14.353 7.87758 14.3029 7.82101 14.2891 7.75165L14.136 6.98158C14.1222 6.91222 14.1467 6.8408 14.2003 6.79462ZM14.5886 7.24501L14.6065 7.33504L14.6726 7.2751L14.5886 7.24501Z" fill="black"/>
<path d="M7.58594 3.00781L8.50195 3.92383L9.41797 3.00781H7.58594Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.22521 2.85953C7.28597 2.71284 7.42912 2.61719 7.5879 2.61719H9.41993C9.57872 2.61719 9.72186 2.71284 9.78263 2.85953C9.84339 3.00623 9.8098 3.17508 9.69753 3.28736L8.78151 4.20338C8.6282 4.35669 8.37963 4.35669 8.22632 4.20338L7.31031 3.28736C7.19803 3.17508 7.16444 3.00623 7.22521 2.85953Z" fill="black"/>
<path d="M13.4473 5.92969L12.8591 7.08393L14.0134 7.67205L13.4473 5.92969Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M13.478 5.54082C13.6363 5.55328 13.7715 5.65986 13.8205 5.81087L14.3867 7.55324C14.4357 7.70425 14.389 7.86995 14.2683 7.97307C14.1475 8.07619 13.9766 8.09643 13.8351 8.02434L12.6808 7.43623C12.4876 7.33779 12.4108 7.10139 12.5093 6.90821L13.0974 5.75396C13.1695 5.61248 13.3197 5.52836 13.478 5.54082Z" fill="black"/>
<path d="M12.4746 12.4141L11.1951 12.2114L10.9925 13.4909L12.4746 12.4141Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.8549 12.3215C12.8919 12.4759 12.8323 12.6374 12.7039 12.7308L11.2217 13.8076C11.0933 13.9009 10.9212 13.9077 10.7859 13.8247C10.6505 13.7418 10.5784 13.5854 10.6032 13.4286L10.8059 12.1491C10.8398 11.9349 11.0409 11.7888 11.255 11.8228L12.5345 12.0254C12.6914 12.0503 12.8178 12.1671 12.8549 12.3215Z" fill="black"/>
<path d="M6.01367 13.4844L5.81102 12.2049L4.53153 12.4075L6.01367 13.4844Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.21787 13.8254C6.08249 13.9084 5.91046 13.9016 5.782 13.8083L4.29985 12.7315C4.1714 12.6381 4.11181 12.4766 4.14887 12.3222C4.18594 12.1678 4.31236 12.051 4.46919 12.0261L5.74868 11.8235C5.96283 11.7895 6.16392 11.9357 6.19784 12.1498L6.40049 13.4293C6.42533 13.5861 6.35326 13.7425 6.21787 13.8254Z" fill="black"/>
<path d="M2.99219 7.67969L4.14643 7.09157L3.55832 5.93732L2.99219 7.67969Z" fill="black"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M2.73777 7.96833C2.61703 7.86521 2.5703 7.69951 2.61936 7.5485L3.18549 5.80613C3.23456 5.65512 3.36976 5.54854 3.52806 5.53608C3.68635 5.52362 3.83656 5.60774 3.90865 5.74922L4.49676 6.90347C4.5952 7.09665 4.51839 7.33305 4.3252 7.43148L3.17095 8.0196C3.02948 8.09169 2.85851 8.07145 2.73777 7.96833Z" fill="black"/>
<mask id="mask0_4697_1745" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0" width="17" height="17">
<path d="M16.3516 0.648438H0.648438V16.3516H16.3516V0.648438Z" fill="white"/>
<path d="M8.49805 3.66016C8.71486 3.66016 8.89063 3.48439 8.89063 3.26758C8.89063 3.05076 8.71486 2.875 8.49805 2.875C8.28123 2.875 8.10547 3.05076 8.10547 3.26758C8.10547 3.48439 8.28123 3.66016 8.49805 3.66016Z" fill="black"/>
<path d="M13.1051 7.00662C13.1721 7.21282 13.3935 7.32567 13.5997 7.25867C13.8059 7.19167 13.9188 6.97019 13.8518 6.76399C13.7848 6.55779 13.5633 6.44494 13.3571 6.51194C13.1509 6.57894 13.0381 6.80041 13.1051 7.00662Z" fill="black"/>
<path d="M11.3459 12.4159C11.1705 12.5433 11.1316 12.7888 11.259 12.9642C11.3865 13.1396 11.632 13.1785 11.8074 13.0511C11.9828 12.9236 12.0217 12.6781 11.8942 12.5027C11.7668 12.3273 11.5213 12.2884 11.3459 12.4159Z" fill="black"/>
<path d="M5.65367 12.4153C5.47826 12.2879 5.23275 12.3267 5.10531 12.5021C4.97787 12.6776 5.01676 12.9231 5.19216 13.0505C5.36757 13.1779 5.61308 13.1391 5.74052 12.9636C5.86796 12.7882 5.82907 12.5427 5.65367 12.4153Z" fill="black"/>
<path d="M3.89539 7.00208C3.96238 6.79587 3.84954 6.5744 3.64333 6.5074C3.43713 6.4404 3.21566 6.55325 3.14866 6.75945C3.08166 6.96565 3.1945 7.18713 3.40071 7.25413C3.60691 7.32113 3.82839 7.20828 3.89539 7.00208Z" fill="black"/>
</mask>
<g mask="url(#mask0_4697_1745)">
</g>
</svg>

After

Width:  |  Height:  |  Size: 25 KiB

View File

@ -0,0 +1,6 @@
<svg width="17" height="18" viewBox="0 0 17 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<g opacity="0.5">
<circle cx="9.83821" cy="7.14094" r="6.64094" stroke="#242235"/>
<line x1="5.39457" y1="11.9551" x2="0.373596" y2="16.9761" stroke="#242235"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 269 B

View File

@ -0,0 +1,4 @@
<svg width="16" height="15" viewBox="0 0 16 15" fill="none" xmlns="http://www.w3.org/2000/svg">
<ellipse cx="6.82587" cy="6.7438" rx="5.82587" ry="5.7438" stroke="#E6DAFE" stroke-width="0.3"/>
<line y1="-0.15" x2="5.84371" y2="-0.15" transform="matrix(0.712105 0.702073 -0.712105 0.702073 10.9854 10.8438)" stroke="#E6DAFE" stroke-width="0.3"/>
</svg>

After

Width:  |  Height:  |  Size: 352 B

View File

@ -0,0 +1,3 @@
<svg width="25" height="18" viewBox="0 0 25 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M25 7.65632H5.30688L11.313 1.88133L9.35683 0L0 9L9.35683 18L11.313 16.1187L5.30688 10.3437H25V7.65632Z" fill="currentColor"/>
</svg>

After

Width:  |  Height:  |  Size: 238 B

View File

@ -0,0 +1,3 @@
<svg width="10" height="9" viewBox="0 0 10 9" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M5.99435 8.25C5.417 9.25 3.97363 9.25 3.39627 8.25L0.365186 3C-0.212165 2 0.509523 0.75 1.66422 0.75L7.7264 0.749999C8.8811 0.749999 9.60279 2 9.02544 3L5.99435 8.25Z" fill="#242235"/>
</svg>

After

Width:  |  Height:  |  Size: 295 B

View File

@ -0,0 +1,3 @@
<svg width="16" height="18" viewBox="0 0 16 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M15.0325 6.35371H0.101562V4.34488H15.0332V6.35371H15.0325ZM0.101562 8.17413V17.5156L7.5674 13.3435L15.0332 17.5156V8.17413H0.101562ZM15.0332 0.515625H0.101562V2.52446H15.0332V0.515625Z" fill="#E6DAFE"/>
</svg>

After

Width:  |  Height:  |  Size: 315 B

View File

@ -0,0 +1,3 @@
<svg width="19" height="18" viewBox="0 0 19 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M18.6209 1.31113C18.6065 1.23908 18.5746 1.17248 18.5286 1.11813C18.4826 1.06378 18.4241 1.02364 18.3591 1.00179C18.1226 0.950958 17.878 0.969791 17.6505 1.05632C17.6505 1.05632 1.87128 7.20348 0.970498 7.87867C0.776427 8.02541 0.711438 8.11068 0.679397 8.20983C0.523774 8.69466 1.00895 8.90386 1.00895 8.90386L5.07529 10.3395C5.14393 10.3528 5.21448 10.3483 5.28126 10.3266C6.20675 9.69308 14.5893 3.96036 15.0763 3.76801C15.1523 3.74322 15.2091 3.76801 15.1944 3.82849C15.0004 4.56417 7.71996 11.5739 7.71996 11.5739C7.70197 11.5989 7.68691 11.6262 7.67511 11.6552L7.66595 11.6493L7.28605 16.0187C7.28605 16.0187 7.12767 17.3572 8.36259 16.0187C9.23408 15.0738 10.0781 14.2846 10.5001 13.8999C11.8989 14.9459 13.4039 16.103 14.0529 16.7078C14.1618 16.8221 14.2909 16.9116 14.4325 16.9707C14.574 17.0298 14.7252 17.0574 14.8768 17.0518C15.4929 17.027 15.665 16.2933 15.665 16.2933C15.665 16.2933 18.5403 3.76107 18.6319 2.0825C18.641 1.91792 18.6539 1.81282 18.6557 1.69979C18.6604 1.56907 18.6484 1.43827 18.62 1.31113" fill="#E6DAFE"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,4 @@
<svg width="17" height="17" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="8.39844" cy="8" r="7.5" fill="#D9D9D9" stroke="#242235"/>
<path d="M8.53119 5.46429C8.23119 5.46429 8.02048 5.40357 7.89905 5.28214C7.78477 5.16071 7.72762 5.01071 7.72762 4.83214V4.60714C7.72762 4.42857 7.78477 4.27857 7.89905 4.15714C8.02048 4.03571 8.22762 3.975 8.52048 3.975C8.82048 3.975 9.02762 4.03571 9.14191 4.15714C9.26334 4.27857 9.32405 4.42857 9.32405 4.60714V4.83214C9.32405 5.01071 9.26334 5.16071 9.14191 5.28214C9.02762 5.40357 8.82405 5.46429 8.53119 5.46429ZM6.05619 11.0571H7.94191V7.41429H6.05619V6.47143H9.10977V11.0571H10.8776V12H6.05619V11.0571Z" fill="#242235"/>
</svg>

After

Width:  |  Height:  |  Size: 704 B

View File

@ -0,0 +1,4 @@
<svg width="21" height="22" viewBox="0 0 21 21" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="10.5" cy="10.5" r="10.25" fill="#413E53" stroke="#E6DAFE" stroke-width="0.5"/>
<path d="M10.7711 6.7475C10.4677 6.7475 10.2554 6.68683 10.1341 6.5655C10.0127 6.4355 9.95208 6.27517 9.95208 6.0845V5.8765C9.95208 5.68583 10.0127 5.52983 10.1341 5.4085C10.2554 5.2785 10.4677 5.2135 10.7711 5.2135C11.0744 5.2135 11.2867 5.2785 11.4081 5.4085C11.5294 5.52983 11.5901 5.68583 11.5901 5.8765V6.0845C11.5901 6.27517 11.5294 6.4355 11.4081 6.5655C11.2867 6.68683 11.0744 6.7475 10.7711 6.7475ZM7.83308 14.0535H10.2511V9.1135H7.83308V8.2295H11.2911V14.0535H13.5531V14.9375H7.83308V14.0535Z" fill="#E6DAFE"/>
</svg>

After

Width:  |  Height:  |  Size: 715 B

View File

@ -0,0 +1,3 @@
<svg width="20" height="18" viewBox="0 0 20 18" xmlns="http://www.w3.org/2000/svg">
<path d="M6.06824 17.0522C7.55016 17.0626 9.01932 16.771 10.3904 16.1943C11.7614 15.6176 13.0071 14.7674 14.0549 13.6929C15.1028 12.6185 15.932 11.3413 16.4944 9.9356C17.0568 8.52986 17.3411 7.02356 17.3309 5.50419C17.3309 5.3285 17.3271 5.15363 17.3196 4.97958C18.0943 4.40467 18.7629 3.69299 19.2944 2.87783C18.5721 3.20614 17.8059 3.42152 17.0213 3.51681C17.848 3.00968 18.4668 2.21178 18.7625 1.27168C17.9851 1.74461 17.1346 2.07787 16.2477 2.25708C15.6514 1.60503 14.8618 1.17293 14.0016 1.02778C13.1413 0.882631 12.2583 1.03255 11.4896 1.45428C10.7209 1.87602 10.1094 2.54601 9.7499 3.36035C9.3904 4.1747 9.30301 5.0879 9.50128 5.95836C7.92741 5.87771 6.38768 5.45854 4.9821 4.72808C3.57653 3.99761 2.33653 2.97218 1.34266 1.71838C0.836097 2.61186 0.680845 3.66974 0.908534 4.6765C1.13622 5.68325 1.72972 6.56313 2.56811 7.13687C1.93944 7.11702 1.32459 6.9428 0.775202 6.62883C0.775202 6.64541 0.775202 6.66281 0.775202 6.68105C0.77573 7.61798 1.09224 8.52591 1.67107 9.25093C2.24991 9.97596 3.05546 10.4735 3.95119 10.6591C3.36844 10.8219 2.75706 10.8458 2.16394 10.7287C2.41672 11.5352 2.90914 12.2404 3.57227 12.7457C4.23541 13.251 5.03605 13.531 5.86211 13.5466C4.46029 14.676 2.72862 15.289 0.945763 15.287C0.62967 15.2867 0.313867 15.2674 0 15.229C1.81009 16.4214 3.91672 17.0543 6.06824 17.0522Z" fill="currentColor"/>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1 @@
<svg width="18" height="18" fill="currentcolor" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><path d="M86.516 86.434H13.485c-1.328 0-2.324-.664-2.988-1.66a3.016 3.016 0 0 1 0-3.32l36.516-66.392c1.328-1.992 4.644-1.992 5.976 0l36.516 66.391a3.03 3.03 0 0 1 0 3.32c-.664.993-1.66 1.661-2.988 1.661zM19.129 79.79h61.742L50 23.69z"/><path d="M50 63.195c-1.992 0-3.32-1.328-3.32-3.32V43.277c0-1.993 1.328-3.32 3.32-3.32s3.32 1.327 3.32 3.32v16.598c0 1.992-1.332 3.32-3.32 3.32zM53.32 69.832c0 4.426-6.64 4.426-6.64 0s6.64-4.426 6.64 0"/><path d="M50 74.812c-2.656 0-4.98-2.324-4.98-4.98 0-2.653 2.324-4.981 4.98-4.981 2.652 0 4.98 2.324 4.98 4.98s-2.328 4.981-4.98 4.981zm0-6.637c-.996 0-1.66.664-1.66 1.66 0 .997.664 1.66 1.66 1.66s1.66-.663 1.66-1.66c0-.996-.664-1.66-1.66-1.66z"/></svg>

After

Width:  |  Height:  |  Size: 797 B

View File

@ -0,0 +1,3 @@
<svg width="19" height="12" viewBox="0 0 19 12" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M10.3954 11.7887L6.70081 11.726C5.50459 11.7041 4.3054 11.7478 3.13264 11.5211C1.3486 11.1823 1.22221 9.5216 1.08996 8.12855C0.907727 6.1701 0.978274 4.1761 1.32216 2.234C1.5163 1.14427 2.28031 0.494027 3.46182 0.423268C7.45029 0.166473 11.4653 0.196906 15.4449 0.31671C15.8652 0.327693 16.2884 0.387721 16.7028 0.456048C18.7486 0.789304 18.7985 2.6713 18.9311 4.25558C19.0633 5.85621 19.0075 7.46506 18.7547 9.0548C18.5519 10.371 18.1639 11.4749 16.5265 11.5814C14.4749 11.7208 12.4703 11.8329 10.413 11.7972C10.413 11.7887 10.4012 11.7887 10.3954 11.7887ZM8.22332 8.45636C9.76938 7.6314 11.2859 6.82018 12.8232 6.00075C11.2742 5.17579 9.76054 4.36457 8.22332 3.54514V8.45636Z" fill="#E6DAFE"/>
</svg>

After

Width:  |  Height:  |  Size: 808 B

View File

@ -0,0 +1,4 @@
<svg width="24" height="30" viewBox="0 0 24 30" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M14.664 12.2985C14.664 13.8758 13.386 15.1548 11.8098 15.1548V18.0111C14.9622 18.0111 17.5181 15.4532 17.5181 12.2985C17.5181 9.1438 14.9622 6.58594 11.8098 6.58594C10.7707 6.58594 9.79477 6.86368 8.9557 7.35071C7.24916 8.33769 6.10156 10.1837 6.10156 12.2985V26.5799L8.66783 29.1481L8.9557 29.4362V12.2985C8.9557 10.7211 10.2337 9.44222 11.8098 9.44222C13.386 9.44222 14.664 10.7211 14.664 12.2985Z" fill="#E6DAFE"/>
<path d="M11.8111 0.867188C9.73147 0.867188 7.78224 1.42397 6.10281 2.39674C5.0275 3.01812 4.06451 3.81002 3.24867 4.73628C1.47242 6.75027 0.394531 9.39598 0.394531 12.2923V20.8611L3.24867 23.7174V12.2923C3.24867 9.75512 4.35108 7.475 6.10281 5.9054C6.92639 5.16905 7.89326 4.58772 8.95694 4.21308C9.84894 3.89528 10.8106 3.72347 11.8111 3.72347C16.5396 3.72347 20.3735 7.56026 20.3735 12.2923C20.3735 17.0244 16.5396 20.8611 11.8111 20.8611V23.7174C18.117 23.7174 23.2276 18.6017 23.2276 12.2923C23.2276 5.98291 18.117 0.867188 11.8111 0.867188Z" fill="#E6DAFE"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,22 @@
export default {
defaultTitle: 'Pyth Network',
titleTemplate: '%s | Pyth Network',
description:
'Pyth is building a way to deliver a decentralized, cross-chain market of verifiable data from first-party sources to any smart contract, anywhere.',
openGraph: {
type: 'website',
images: [
{
url: 'https://pyth-og-images.s3.eu-west-2.amazonaws.com/default-banner.png',
width: 1200,
height: 630,
alt: 'Pyth Network',
type: 'image/png',
},
],
},
twitter: {
handle: '@PythNetwork',
cardType: 'summary_large_image',
},
}

View File

@ -0,0 +1,18 @@
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
webpack(config) {
const fileLoaderRule = config.module.rules.find(
(rule) => rule.test && rule.test.test('.svg')
)
fileLoaderRule.exclude = /\.inline\.svg$/
config.module.rules.push({
test: /\.inline\.svg$/,
loader: require.resolve('@svgr/webpack'),
})
return config
},
}
module.exports = nextConfig

View File

@ -0,0 +1,36 @@
{
"name": "xc-admin-frontend",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
},
"dependencies": {
"@coral-xyz/anchor": "^0.26.0",
"@pythnetwork/client": "^2.9.0",
"@solana/web3.js": "^1.73.0",
"@types/node": "18.11.18",
"@types/react": "18.0.26",
"@types/react-dom": "18.0.10",
"gsap": "^3.11.4",
"next": "12.2.5",
"next-seo": "^5.15.0",
"react": "18.2.0",
"react-dom": "18.2.0",
"typescript": "4.9.4",
"use-debounce": "^9.0.2"
},
"devDependencies": {
"@svgr/webpack": "^6.3.1",
"autoprefixer": "^10.4.8",
"eslint": "8.22.0",
"eslint-config-next": "12.2.5",
"postcss": "^8.4.16",
"prettier": "^2.7.1",
"prettier-plugin-tailwindcss": "^0.1.13",
"tailwindcss": "^3.1.8"
}
}

View File

@ -0,0 +1,25 @@
import { DefaultSeo } from 'next-seo'
import type { AppProps } from 'next/app'
import Head from 'next/head'
import { ClusterProvider } from '../contexts/ClusterContext'
import SEO from '../next-seo.config'
import '../styles/globals.css'
function MyApp({ Component, pageProps }: AppProps) {
return (
<>
<ClusterProvider>
<Head>
<meta
name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0"
/>
</Head>
<DefaultSeo {...SEO} />
<Component {...pageProps} />
</ClusterProvider>
</>
)
}
export default MyApp

View File

@ -0,0 +1,57 @@
import { Head, Html, Main, NextScript } from 'next/document'
import Script from 'next/script'
export default function Document() {
return (
<Html>
<Head>
<link
href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@300;400;600;700&family=Urbanist:wght@400;600;700&display=swap"
rel="stylesheet"
/>
<link
rel="icon"
type="image/x-icon"
href="/public/favicon.ico"
id="faviconTag"
/>
<link
rel="apple-touch-icon"
sizes="180x180"
href="/apple-touch-icon.png"
/>
<link
rel="icon"
type="image/png"
sizes="32x32"
href="/favicon-32x32.png"
/>
<link
rel="icon"
type="image/png"
sizes="16x16"
href="/favicon-16x16.png"
/>
<link rel="manifest" href="/site.webmanifest" />
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#242235" />
<meta name="msapplication-TileColor" content="#242235" />
<meta name="theme-color" content="#242235"></meta>
<Script id="show-banner" strategy="beforeInteractive">
{`const faviconTag = document.getElementById("faviconTag");
const isDark = window.matchMedia("(prefers-color-scheme: dark)");
const changeFavicon = () => {
if (isDark.matches) faviconTag.href = "/favicon-light.ico";
else faviconTag.href = "/favicon.ico";
};
changeFavicon();
setInterval(changeFavicon, 1000);`}
</Script>
</Head>
<body>
<Main />
<NextScript />
</body>
</Html>
)
}

View File

@ -0,0 +1,24 @@
import type { NextPage } from 'next'
import { useContext, useEffect } from 'react'
import Layout from '../components/layout/Layout'
import Main from '../components/Main'
import { PythContextProvider } from '../contexts/PythContext'
import { ClusterContext, DEFAULT_CLUSTER } from './../contexts/ClusterContext'
const Home: NextPage = () => {
const { setCluster } = useContext(ClusterContext)
useEffect(() => {
setCluster(DEFAULT_CLUSTER)
}, [setCluster])
return (
<Layout>
<PythContextProvider>
<Main />
</PythContextProvider>
</Layout>
)
}
export default Home

View File

@ -0,0 +1,6 @@
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="40" height="31" fill="none"><g opacity=".9"><path fill="url(#a)" d="M13 .4v29.3H7V6.3h-.2L0 10.5V5L7.2.4H13Z"/><path fill="url(#b)" d="M28.8 30.1c-2.2 0-4-.3-5.7-1-1.7-.8-3-1.8-4-3.1a7.7 7.7 0 0 1-1.4-4.6h6.2c0 .8.3 1.4.7 2 .4.5 1 .9 1.7 1.2.7.3 1.6.4 2.5.4 1 0 1.7-.2 2.5-.5.7-.3 1.3-.8 1.7-1.4.4-.6.6-1.2.6-2s-.2-1.5-.7-2.1c-.4-.6-1-1-1.8-1.4-.8-.4-1.8-.5-2.9-.5h-2.7v-4.6h2.7a6 6 0 0 0 2.5-.5 4 4 0 0 0 1.7-1.3c.4-.6.6-1.3.6-2a3.5 3.5 0 0 0-2-3.3 5.6 5.6 0 0 0-4.5 0 4 4 0 0 0-1.7 1.2c-.4.6-.6 1.2-.6 2h-6c0-1.7.6-3.2 1.5-4.5 1-1.3 2.2-2.3 3.8-3C25 .4 26.8 0 28.8 0s3.8.4 5.3 1.1c1.5.7 2.7 1.7 3.6 3a7.2 7.2 0 0 1 1.2 4.2c0 1.6-.5 3-1.5 4a7 7 0 0 1-4 2.2v.2c2.2.3 3.8 1 5 2.2a6.4 6.4 0 0 1 1.6 4.6c0 1.7-.5 3.1-1.4 4.4a9.7 9.7 0 0 1-4 3.1c-1.7.8-3.7 1.1-5.8 1.1Z"/></g><defs><linearGradient id="a" x1="20" x2="20" y1="0" y2="30.1" gradientUnits="userSpaceOnUse"><stop/><stop offset="1" stop-color="#3D3D3D"/></linearGradient><linearGradient id="b" x1="20" x2="20" y1="0" y2="30.1" gradientUnits="userSpaceOnUse"><stop/><stop offset="1" stop-color="#3D3D3D"/></linearGradient></defs></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 283 64"><path fill="black" d="M141 16c-11 0-19 7-19 18s9 18 20 18c7 0 13-3 16-7l-7-5c-2 3-6 4-9 4-5 0-9-3-10-7h28v-3c0-11-8-18-19-18zm-9 15c1-4 4-7 9-7s8 3 9 7h-18zm117-15c-11 0-19 7-19 18s9 18 20 18c6 0 12-3 16-7l-8-5c-2 3-5 4-8 4-5 0-9-3-11-7h28l1-3c0-11-8-18-19-18zm-10 15c2-4 5-7 10-7s8 3 9 7h-19zm-39 3c0 6 4 10 10 10 4 0 7-2 9-5l8 5c-3 5-9 8-17 8-11 0-19-7-19-18s8-18 19-18c8 0 14 3 17 8l-8 5c-2-3-5-5-9-5-6 0-10 4-10 10zm83-29v46h-9V5h9zM37 0l37 64H0L37 0zm92 5-27 48L74 5h10l18 30 17-30h10zm59 12v10l-3-1c-6 0-10 4-10 10v15h-9V17h9v9c0-5 6-9 13-9z"/></svg>

After

Width:  |  Height:  |  Size: 630 B

View File

@ -0,0 +1,278 @@
.main {
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
padding: 6rem;
min-height: 100vh;
}
.description {
display: inherit;
justify-content: inherit;
align-items: inherit;
font-size: 0.85rem;
max-width: var(--max-width);
width: 100%;
z-index: 2;
font-family: var(--font-mono);
}
.description a {
display: flex;
justify-content: center;
align-items: center;
gap: 0.5rem;
}
.description p {
position: relative;
margin: 0;
padding: 1rem;
background-color: rgba(var(--callout-rgb), 0.5);
border: 1px solid rgba(var(--callout-border-rgb), 0.3);
border-radius: var(--border-radius);
}
.code {
font-weight: 700;
font-family: var(--font-mono);
}
.grid {
display: grid;
grid-template-columns: repeat(4, minmax(25%, auto));
width: var(--max-width);
max-width: 100%;
}
.card {
padding: 1rem 1.2rem;
border-radius: var(--border-radius);
background: rgba(var(--card-rgb), 0);
border: 1px solid rgba(var(--card-border-rgb), 0);
transition: background 200ms, border 200ms;
}
.card span {
display: inline-block;
transition: transform 200ms;
}
.card h2 {
font-weight: 600;
margin-bottom: 0.7rem;
}
.card p {
margin: 0;
opacity: 0.6;
font-size: 0.9rem;
line-height: 1.5;
max-width: 30ch;
}
.center {
display: flex;
justify-content: center;
align-items: center;
position: relative;
padding: 4rem 0;
}
.center::before {
background: var(--secondary-glow);
border-radius: 50%;
width: 480px;
height: 360px;
margin-left: -400px;
}
.center::after {
background: var(--primary-glow);
width: 240px;
height: 180px;
z-index: -1;
}
.center::before,
.center::after {
content: '';
left: 50%;
position: absolute;
filter: blur(45px);
transform: translateZ(0);
}
.logo,
.thirteen {
position: relative;
}
.thirteen {
display: flex;
justify-content: center;
align-items: center;
width: 75px;
height: 75px;
padding: 25px 10px;
margin-left: 16px;
transform: translateZ(0);
border-radius: var(--border-radius);
overflow: hidden;
box-shadow: 0px 2px 8px -1px #0000001a;
}
.thirteen::before,
.thirteen::after {
content: '';
position: absolute;
z-index: -1;
}
/* Conic Gradient Animation */
.thirteen::before {
animation: 6s rotate linear infinite;
width: 200%;
height: 200%;
background: var(--tile-border);
}
/* Inner Square */
.thirteen::after {
inset: 0;
padding: 1px;
border-radius: var(--border-radius);
background: linear-gradient(
to bottom right,
rgba(var(--tile-start-rgb), 1),
rgba(var(--tile-end-rgb), 1)
);
background-clip: content-box;
}
/* Enable hover only on non-touch devices */
@media (hover: hover) and (pointer: fine) {
.card:hover {
background: rgba(var(--card-rgb), 0.1);
border: 1px solid rgba(var(--card-border-rgb), 0.15);
}
.card:hover span {
transform: translateX(4px);
}
}
@media (prefers-reduced-motion) {
.thirteen::before {
animation: none;
}
.card:hover span {
transform: none;
}
}
/* Mobile */
@media (max-width: 700px) {
.content {
padding: 4rem;
}
.grid {
grid-template-columns: 1fr;
margin-bottom: 120px;
max-width: 320px;
text-align: center;
}
.card {
padding: 1rem 2.5rem;
}
.card h2 {
margin-bottom: 0.5rem;
}
.center {
padding: 8rem 0 6rem;
}
.center::before {
transform: none;
height: 300px;
}
.description {
font-size: 0.8rem;
}
.description a {
padding: 1rem;
}
.description p,
.description div {
display: flex;
justify-content: center;
position: fixed;
width: 100%;
}
.description p {
align-items: center;
inset: 0 0 auto;
padding: 2rem 1rem 1.4rem;
border-radius: 0;
border: none;
border-bottom: 1px solid rgba(var(--callout-border-rgb), 0.25);
background: linear-gradient(
to bottom,
rgba(var(--background-start-rgb), 1),
rgba(var(--callout-rgb), 0.5)
);
background-clip: padding-box;
backdrop-filter: blur(24px);
}
.description div {
align-items: flex-end;
pointer-events: none;
inset: auto 0 0;
padding: 2rem;
height: 200px;
background: linear-gradient(
to bottom,
transparent 0%,
rgb(var(--background-end-rgb)) 40%
);
z-index: 1;
}
}
/* Tablet and Smaller Desktop */
@media (min-width: 701px) and (max-width: 1120px) {
.grid {
grid-template-columns: repeat(2, 50%);
}
}
@media (prefers-color-scheme: dark) {
.vercelLogo {
filter: invert(1);
}
.logo,
.thirteen img {
filter: invert(1) drop-shadow(0 0 0.3rem #ffffff70);
}
}
@keyframes rotate {
from {
transform: rotate(360deg);
}
to {
transform: rotate(0deg);
}
}

View File

@ -0,0 +1,225 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer base {
html {
-webkit-tap-highlight-color: transparent;
}
body {
@apply bg-dark font-mono text-base text-light antialiased;
}
p {
@apply mb-4;
}
sup {
@apply text-[65%];
}
}
@layer components {
.h1 {
@apply font-body text-5xl font-normal -tracking-[0.02em];
}
@screen lg {
.h1 {
@apply text-xl;
}
}
.h2 {
@apply font-body text-4xl font-normal;
}
@screen lg {
.h2 {
@apply text-5xl;
}
}
.h3 {
@apply font-body text-3xl font-normal;
}
@screen lg {
.h3 {
@apply text-4xl;
}
}
.h4 {
@apply font-body text-lg font-normal;
}
.h5 {
@apply font-body text-[18px] font-normal;
}
.subtitle {
@apply font-mono text-xs tracking-subtitle;
}
.btn {
@apply relative inline-block rounded-lg py-3 px-6 text-xs transition-all;
}
.btn--dark {
@apply bg-radial;
}
.btn--light {
@apply z-10 bg-radial2 text-dark;
}
.flipcard-front {
@apply absolute inset-0 flex items-center justify-center bg-darkGray p-14;
}
.flipcard-back {
@apply absolute inset-0 flex flex-col justify-between bg-darkGray p-8;
}
}
@layer utilities {
.gradient-border {
@apply absolute left-0 bottom-0 h-px w-full bg-radial opacity-60;
}
.btn-bg {
@apply absolute top-px left-px h-[calc(100%-2px)] w-[calc(100%-2px)] rounded-lg transition-all;
}
.lineTop {
@apply absolute left-8 top-8 right-8 h-px;
}
.lineBottom {
@apply absolute left-8 right-8 bottom-8 h-px;
}
.lineLeft {
@apply absolute left-8 top-0 bottom-0 w-px;
}
.lineRight {
@apply absolute right-8 top-0 bottom-0 w-px;
}
.table-responsive {
@apply w-full overflow-auto pb-4;
}
}
.news .swiper-slide,
.providers .swiper-slide {
height: auto;
}
.providers .swiper {
padding-bottom: 80px;
}
.swiper-scrollbar {
position: absolute;
left: 40px;
bottom: 8px;
width: calc(100% - 80px);
height: 1px;
background-color: #242235;
}
.swiper-scrollbar-drag {
background: #242235;
height: 6px;
position: absolute;
top: -3px;
z-index: 3;
cursor: grab;
}
.news .swiper-slide {
padding-bottom: 80px;
}
.news .swiper-scrollbar {
background: #53525f;
}
.news .swiper-scrollbar-drag {
background: #464456;
}
.perspective {
perspective: 1000px;
}
.flipcard-front {
backface-visibility: hidden;
transform-style: preserve-3d;
transition: all 0.6s ease 0s;
z-index: 2;
}
.flipcard-back {
backface-visibility: hidden;
transform-style: preserve-3d;
transition: all 0.6s ease 0s;
}
.swiper-button-prev,
.swiper-button-next {
top: initial;
margin: 0;
bottom: 0;
width: 25px;
height: 18px;
cursor: pointer;
position: absolute;
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAkCAYAAADLsGk3AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAIhSURBVHgB3ZlNUhpBFMf/b0glQ6qiLeYAVCBV2cUbZLyBy+yiNzAnEE+QyglCTqDudAXu3IlrxRovAF1uHK1y2teAH8h8ATrd4281xTygf9X9+uM18AIIURVLi7W2EF9XYAgHc6IlSDltfvxBKjwWn2q/YIAS5oAlqiyxD9D3+8+IsOa+r/jBTf8EOTKzyEiixU3/9vydCZl3mIEnEtXoCHWCUriHHCFMSRYJRaEnpS+RI1OJ2CqhyTxrpUlwXvw3JTH4/yxBen0gdbuTJNGT3XUYJFVkKBG29GPkD1ggoUkcWhkk/togoYkV4ZzwkiVomyU2YQmRInqbQaqUInHWgEVM5MhAwkEz9gsWSmjGRIoqoXkQEQtftrihjYRYvT50YCkDkQwS1kNvQULjwHGm3jjaSCkIem23vMxrGzwUmMdkF/UGKbWVECsVYReWMj79ivomy/yJDVaq0bs834aFjB11eZgdueXKBdutRUYTeR8/LOHqun8Iy5g4swdBv1NEmcjiw1Bm+XAk404EWCgTW0XhYea75c8HBPUTBZCZ/2Cl0OxddjdgmNQzu5SnHUXOKhcW/Kj3PCWvVxZq/2CYzKt6avGBeyZ0bn9bXXy4J0M5iHsvXDUh8xoFOiMyU1fjuYG+bmhczrDgihbVwsiRma4VssjwzJ7rXcnM9yNJMjyTbUjZzXWDOfdZZHTR0xr2woNEE0VEy4jFGudF3YMh7gBHWPj805reJwAAAABJRU5ErkJggg==');
background-repeat: no-repeat;
background-size: contain;
z-index: 2;
}
.dark .swiper-button-prev,
.dark .swiper-button-next {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAkCAYAAADLsGk3AAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAH6SURBVHgB3ZlLTgJBEIb/YhS3bAksIFGIK7mBcBLhBngC4ATGEwgnUE8ANxBXRjCBRHC2rCF02QWBhDAvBjPT+C3nlflSXd3V1cAfMBpxajJQvcmAS4iJBI5EJM7n3NMfuk2A3+wvvkMMHCVijzi3kiDcbK6x4nYcMoSQiAQv0NW/nnP8cIKq6UvqICLOEAI/CcV4X1h4RYQcHJFAEkkq5/M0Q4QcJGKqhBA42f0kmLkTl4QQKCKyPmjjZy+JTNGqIkZ8RdYSrCOBlNN9EyQEz6HlJ6HAjyZICK4i30Mu+0SilS1YdRiCo4iszBZ7S+hINGEQezkiElJmuL1gooSwI3KqEsJWxB5yQ/9o0+NZvT5QH4ayEgkgYTz0HySEhFIqdClvEiuJ6eeySUQNnDDbaASQmRHoBYayM6x+hss6mB5cHyZqpq+oBQPZyw9dX1V1afLk+oKhMo6JfooyrjOWFI263tJ7EOd6yzQZz6nXr4w3Seb4jRWonSlQDTHju2fPFqivQBXtPHa6T+DqdOCeT1EReFW3P3TzwfJoPujIzM9xb3TzYUMAmb6WqcQhc3iDzlCZg5vY6Wsa0xJeOVNK6v6X9MEQIaG68UFk1ByRnpWEPlbwklFQtUwx2gLz6L2IHPRcrFupqwiIRLZw1sYpIjL2gLtS1iAmfgHf8jKCCOCAIQAAAABJRU5ErkJggg==');
}
.swiper-button-next {
transform-origin: center;
transform: rotate(180deg);
}
.swiper-button-disabled {
opacity: 0.5;
pointer-events: none;
}
.swiper-button-next {
right: 0;
}
.swiper-button-prev {
left: 0;
}
/* width */
.sscroll::-webkit-scrollbar {
width: 5px;
}
/* Track */
.sscroll::-webkit-scrollbar-track {
background: rgba(241, 234, 234, 0.2);
border-radius: 5px;
}
/* Handle */
.sscroll::-webkit-scrollbar-thumb {
background: rgba(241, 234, 234, 0.6);
border-radius: 5px;
}

View File

@ -0,0 +1,120 @@
/** @type {import('tailwindcss').Config} */
const plugin = require('tailwindcss/plugin')
const rotateX = plugin(function ({ addUtilities }) {
addUtilities({
'.rotate-y-0': {
transform: 'rotateY(0)',
},
'.rotate-y-180': {
transform: 'rotateY(180deg)',
},
'.-rotate-y-180': {
transform: 'rotateY(-180deg)',
},
})
})
module.exports = {
mode: 'jit',
darkMode: 'class',
content: [
'./pages/**/*.{js,ts,jsx,tsx}',
'./components/**/*.{js,ts,jsx,tsx}',
],
theme: {
screens: {
xs: '375px',
// => @media (min-width: 375px) { ... }
sm: '640px',
// => @media (min-width: 640px) { ... }
md: '768px',
// => @media (min-width: 768px) { ... }
lg: '992px',
// => @media (min-width: 992px) { ... }
xl: '1280px',
// => @media (min-width: 1280px) { ... }
'2xl': '1536px',
// => @media (min-width: 1536px) { ... }
hoverable: { raw: '(hover: hover)' },
},
fontFamily: {
body: ["'Urbanist'", 'sans-serif'],
mono: ["'IBM Plex Mono'", 'monospace'],
},
extend: {
fontSize: {
xs: ['12px', '1'],
sm: ['13px', '1'],
base: ['14px', '22px'],
base16: ['16px', '24px'],
base18: ['18px', '1'],
lg: ['24px', '30px'],
xl: ['59px', '1.1'],
},
colors: {
transparent: 'transparent',
current: 'currentColor',
light: '#E6DAFE',
dark: '#110F23',
'dark-300': 'rgba(36, 34, 53, .3)',
darkGray: '#252236',
darkGray1: '#242235',
darkGray2: '#312F47',
darkGray3: '#2F2C4F',
darkGray4: '#413E53',
beige: '#F1EAEA',
'beige-300': 'rgba(229, 231, 235, .3)',
beige2: '#E4DADB',
beige3: '#D6CACB',
green: '#15AE6E',
lightPurple: '#7731EA',
offPurple: '#745E9D',
},
letterSpacing: {
wide: '.02em',
subtitle: '.15em',
},
backgroundImage: {
radial:
'radial-gradient(100% 628.91% at 95.63% 10.42%, rgba(230, 218, 254, 0) 0%, #E6DAFE 30.71%, #E6DAFE 71.52%, rgba(230, 218, 254, 0) 100%)',
radial2:
'radial-gradient(91.27% 628.91% at 95.63% 10.42%, rgba(75, 52, 122, 0.15) 0%, #4B347A 30.71%, #4B347A 71.52%, rgba(75, 52, 122, 0.19) 100%)',
},
boxShadow: {
purple: 'inset 0px 0px 5px rgba(255, 176, 247, 0.25)',
},
container: {
center: true,
padding: {
DEFAULT: '1rem',
lg: '2rem',
xl: '3.5rem',
},
screens: {
sm: '600px',
md: '728px',
lg: '984px',
xl: '1272px',
},
},
animation: {
marquee: 'marquee 50s linear infinite',
},
keyframes: {
marquee: {
'0%': { transform: 'translateX(0%)' },
'100%': { transform: 'translateX(-50%)' },
},
},
},
},
plugins: [rotateX],
}

View File

@ -0,0 +1,26 @@
{
"compilerOptions": {
"target": "es2020",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"incremental": true
},
"include": [
"next-env.d.ts",
"**/*.ts",
"**/*.tsx",
"contexts/PythContext.ks",
"contexts/ClusterContext.js"
],
"exclude": ["node_modules"]
}

View File

@ -0,0 +1,45 @@
import { PriceComponent, PriceType, Product } from '@pythnetwork/client'
import { PublicKey } from '@solana/web3.js'
import { PriceStatus } from '../utils/PriceStatus'
export interface PythPriceData {
aggregate?: {
status: PriceStatus
price: number
confidence: number
publishSlot: number
priceComponent: number
confidenceComponent: number
}
emaPrice: {
value: number
valueComponent: number
}
emaConfidence: {
value: number
valueComponent: number
}
validSlot: number
minPublishers: number
priceComponents: PriceComponent[]
priceType: PriceType
exponent: number
numComponentPrices: number
numQuoters: number
lastSlot: number
previousTimestamp: BigInt
timestamp: BigInt
}
export interface PythSymbolData {
productAccountKey: PublicKey
priceAccountKey: PublicKey
price: PythPriceData
product: {
product: Product
}
}
export interface PythData {
[key: string]: PythSymbolData
}

View File

@ -0,0 +1,4 @@
declare module '*.svg' {
const content: any
export default content
}

View File

@ -0,0 +1,4 @@
export enum PriceStatus {
Offline = 0,
Online = 1,
}

View File

@ -0,0 +1,5 @@
import { PythCluster } from '../contexts/ClusterContext'
export const isValidCluster = (str: string): str is PythCluster =>
['devnet', 'testnet', 'mainnet-beta', 'pythtest', 'pythnet'].indexOf(str) !==
-1

View File

@ -0,0 +1,64 @@
import { PythCluster } from '@pythnetwork/client/lib/cluster'
const CLUSTER_URLS: Record<PythCluster, any> = {
'mainnet-beta': [
{
rpcUrl:
'https://pyth-network.rpcpool.com/' +
(process.env.NEXT_PUBLIC_RPC_POOL_TOKEN || ''),
wsUrl:
'wss://pyth-network.rpcpool.com/' +
(process.env.NEXT_PUBLIC_RPC_POOL_TOKEN || ''),
},
{
rpcUrl: 'http://pyth-rpc1.certus.one:8899/',
wsUrl: 'ws://pyth-rpc1.certus.one:8900/',
},
{
rpcUrl: 'http://pyth-rpc2.certus.one:8899/',
wsUrl: 'ws://pyth-rpc2.certus.one:8900/',
},
{
rpcUrl: 'https://api.mainnet-beta.solana.com/',
wsUrl: 'wss://api.mainnet-beta.solana.com/',
},
],
devnet: [
{
rpcUrl: 'https://api.devnet.solana.com/',
wsUrl: 'wss://api.devnet.solana.com/',
},
],
testnet: [
{
rpcUrl: 'https://api.testnet.solana.com/',
wsUrl: 'wss://api.testnet.solana.com/',
},
],
pythtest: [
{
rpcUrl: 'https://api.pythtest.pyth.network/',
wsUrl: 'wss://api.pythtest.pyth.network/',
},
],
pythnet: [
{
rpcUrl: 'https://pythnet.rpcpool.com/',
wsUrl: 'wss://pythnet.rpcpool.com/',
},
],
localnet: [
{
rpcUrl: 'http://localhost:8899/',
wsUrl: 'ws://localhost:8900/',
},
],
}
export function pythClusterApiUrls(cluster: PythCluster) {
if (CLUSTER_URLS.hasOwnProperty(cluster)) {
return CLUSTER_URLS[cluster]
} else {
return []
}
}